{"version":3,"file":"ej2.min.js","sources":["../node_modules/@syncfusion/ej2-base/src/util.js","../node_modules/@syncfusion/ej2-base/src/dom.js","../node_modules/@syncfusion/ej2-base/src/notify-property-change.js","../node_modules/@syncfusion/ej2-base/src/animation.js","../node_modules/@syncfusion/ej2-base/src/internationalization.js","../node_modules/@syncfusion/ej2-base/src/template.js","../node_modules/@syncfusion/ej2-base/src/template-engine.js","../node_modules/@syncfusion/ej2-buttons/src/common/common.js","../node_modules/@syncfusion/ej2-popups/src/common/position.js","../node_modules/@syncfusion/ej2-popups/src/common/collision.js","../node_modules/@syncfusion/ej2-popups/src/popup/popup.js","../node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js","../node_modules/@syncfusion/ej2-inputs/src/maskedtextbox/base/mask-base.js","../node_modules/@syncfusion/ej2-splitbuttons/src/common/common.js","../node_modules/@syncfusion/ej2-lists/src/common/list-base.js","../node_modules/@syncfusion/ej2-charts/src/common/model/theme.js","../node_modules/@syncfusion/ej2-charts/src/common/utils/helper.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/utils.js","../node_modules/@syncfusion/ej2-file-utils/src/encoding.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/interface.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/helper.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/model/acc-base.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/utils/helper.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/utils/helper.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/utils/theme.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/helper.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/path-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/matrix.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/dictionary/basic-shapes.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/dictionary/common.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/dictionary/flow-shapes.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/tooltip.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/connector.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/connector.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/constraints-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/ruler/ruler.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/diagram-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/dom-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/base-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/actions.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/bpmn.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/symmetrical-layout.js","../node_modules/@syncfusion/ej2-dropdowns/src/common/incremental-search.js","../node_modules/@syncfusion/ej2-dropdowns/src/common/highlight-search.js","../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/float-label.js","../node_modules/@syncfusion/ej2-grids/src/grid/base/util.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/aria-service.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/aggregate.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/datepicker-edit-cell.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/utils/helper.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-maps/src/maps/utils/helper.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/util.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-attributes.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/util.js","../node_modules/@syncfusion/ej2-schedule/src/recurrence-editor/date-generator.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/utils/helper.js","../node_modules/@syncfusion/ej2-base/src/ajax.js","../node_modules/@syncfusion/ej2-base/src/event-handler.js","../node_modules/@syncfusion/ej2-base/src/observer.js","../node_modules/@syncfusion/ej2-base/src/base.js","../node_modules/@syncfusion/ej2-base/src/browser.js","../node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","../node_modules/@syncfusion/ej2-base/src/canvas-renderer.js","../node_modules/@syncfusion/ej2-base/src/module-loader.js","../node_modules/@syncfusion/ej2-base/src/child-property.js","../node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","../node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","../node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","../node_modules/@syncfusion/ej2-base/src/component.js","../node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","../node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","../node_modules/@syncfusion/ej2-base/src/draggable.js","../node_modules/@syncfusion/ej2-popups/src/dialog/dialog.js","../node_modules/@syncfusion/ej2-base/src/droppable.js","../node_modules/@syncfusion/ej2-base/src/keyboard.js","../node_modules/@syncfusion/ej2-base/src/l10n.js","../node_modules/@syncfusion/ej2-base/src/svg-renderer.js","../node_modules/@syncfusion/ej2-base/src/touch.js","../node_modules/@syncfusion/ej2-buttons/src/button/button.js","../node_modules/@syncfusion/ej2-buttons/src/check-box/check-box.js","../node_modules/@syncfusion/ej2-buttons/src/radio-button/radio-button.js","../node_modules/@syncfusion/ej2-buttons/src/switch/switch.js","../node_modules/@syncfusion/ej2-calendars/src/calendar/calendar.js","../node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-inputs/src/input/input.js","../node_modules/@syncfusion/ej2-inputs/src/numerictextbox/numerictextbox.js","../node_modules/@syncfusion/ej2-inputs/src/form-validator/form-validator.js","../node_modules/@syncfusion/ej2-inputs/src/maskedtextbox/maskedtextbox/maskedtextbox.js","../node_modules/@syncfusion/ej2-inputs/src/slider/slider.js","../node_modules/@syncfusion/ej2-inputs/src/uploader/uploader.js","../node_modules/@syncfusion/ej2-splitbuttons/src/drop-down-button/drop-down-button.js","../node_modules/@syncfusion/ej2-splitbuttons/src/split-button/split-button.js","../node_modules/@syncfusion/ej2-splitbuttons/src/progress-button/progress-button.js","../node_modules/@syncfusion/ej2-inputs/src/color-picker/color-picker.js","../node_modules/@syncfusion/ej2-inputs/src/textbox/textbox.js","../node_modules/@syncfusion/ej2-calendars/src/datepicker/datepicker.js","../node_modules/@syncfusion/ej2-data/src/query.js","../node_modules/@syncfusion/ej2-data/src/util.js","../node_modules/@syncfusion/ej2-data/src/adaptors.js","../node_modules/@syncfusion/ej2-data/src/manager.js","../node_modules/@syncfusion/ej2-lists/src/list-view/list-view.js","../node_modules/@syncfusion/ej2-calendars/src/timepicker/timepicker.js","../node_modules/@syncfusion/ej2-lists/src/list-view/virtualization.js","../node_modules/@syncfusion/ej2-calendars/src/daterangepicker/daterangepicker.js","../node_modules/@syncfusion/ej2-calendars/src/datetimepicker/datetimepicker.js","../node_modules/@syncfusion/ej2-charts/src/common/model/base.js","../node_modules/@syncfusion/ej2-charts/src/chart/utils/double-range.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/double-axis.js","../node_modules/@syncfusion/ej2-charts/src/common/model/constants.js","../node_modules/@syncfusion/ej2-charts/src/chart/model/chart-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/cartesian-panel.js","../node_modules/@syncfusion/ej2-charts/src/chart/utils/get-data.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/chart-series.js","../node_modules/@syncfusion/ej2-charts/src/common/model/data.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/marker-explode.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/marker.js","../node_modules/@syncfusion/ej2-charts/src/common/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/technical-indicator.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-name.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-operators.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-dictionary-properties.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-number.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-array.js","../node_modules/@syncfusion/ej2-file-utils/src/save.js","../node_modules/@syncfusion/ej2-file-utils/src/xml-writer.js","../node_modules/@syncfusion/ej2-file-utils/src/stream-writer.js","../node_modules/@syncfusion/ej2-compression/src/compression-writer.js","../node_modules/@syncfusion/ej2-compression/src/zip-archive.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-stream.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-string.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-reference.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/actions/action.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/actions/uri-action.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-color.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/drawing/pdf-drawing.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-brush.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-solid-brush.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-string-format.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/string-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/string-tokenizer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-main-object-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document-base.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-catalog.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-size.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-margins.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/image-decoder.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-settings.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-stream-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-pen.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-transformation-matrix.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/constants.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/object-object-pair/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-transparency.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field-info-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/graphics-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/byte-array.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-boolean.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/unit-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/pdf-image.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/pdf-bitmap.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-table-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-name-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-name-record.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-head-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-horizontal-header-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-OS2-Table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-post-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-long-hor-metric.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-cmap-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-glyph-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-loca-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-apple-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-glyph-header.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/big-endian-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-reader.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-font-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/unicode-true-type-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl/rtl-text-shape.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl/rtl-bidirectional.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl-renderer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-graphics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-layer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-layer-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/pdf-template.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-resources.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-base.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/annotation-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/page-added-event-arguments.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document-template.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-templates.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-document-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-cache-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-standard-font-metrics-factory.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-standard-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/action-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/document-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/element-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/layout-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/text-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/text-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/uri-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/pdf-text-web-link.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-numbers-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-template-value-pair.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/multiple-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-page-number-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/composite-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/single-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/page-count-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-destination.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/tables/light-tables/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-true-type-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-template-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/styles/pdf-borders.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/styles/style.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-cell.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-column.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-row.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/layout/grid-layouter.js","../node_modules/@syncfusion/ej2-charts/src/common/utils/export.js","../node_modules/@syncfusion/ej2-charts/src/chart/chart.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/axis-helper.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/date-time-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/category-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/logarithmic-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/date-time-category-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/strip-line.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/line-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/column-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/bar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/polar-radar-panel.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/polar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/radar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-bar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/candle-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/step-line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/step-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/scatter-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/range-column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/waterfall-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/hilo-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/hilo-open-close-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/range-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/bubble-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/histogram-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/indicator-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/sma-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/ema-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/tma-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/ad-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/atr-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/momentum-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/rsi-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/stochastic-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/bollinger-bands.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/macd-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/trend-lines/trend-line.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/crosshair.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/common/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/zooming-toolkit.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/zooming.js","../node_modules/@syncfusion/ej2-charts/src/common/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/data-label.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/error-bar.js","../node_modules/@syncfusion/ej2-charts/src/chart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/common/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/src/chart/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/box-and-whisker-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/multi-level-labels.js","../node_modules/@syncfusion/ej2-charts/src/common/scrollbar/scrollbar-elements.js","../node_modules/@syncfusion/ej2-charts/src/common/scrollbar/scrollbar.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/pareto-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/accumulation-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pie-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pie-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/accumulation.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/triangular-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/funnel-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pyramid-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/legend.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/dataLabel.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/chart-render.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/range-axis.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/model/range-base.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/model/theme.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/slider.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/range-navigator.js","../node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","../node_modules/@syncfusion/ej2-navigations/src/toolbar/toolbar.js","../node_modules/@syncfusion/ej2-navigations/src/accordion/accordion.js","../node_modules/@syncfusion/ej2-navigations/src/common/menu-base.js","../node_modules/@syncfusion/ej2-navigations/src/context-menu/context-menu.js","../node_modules/@syncfusion/ej2-navigations/src/menu/menu.js","../node_modules/@syncfusion/ej2-navigations/src/tab/tab.js","../node_modules/@syncfusion/ej2-navigations/src/treeview/treeview.js","../node_modules/@syncfusion/ej2-navigations/src/sidebar/sidebar.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/period-selector.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/utils.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/title/title.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/series.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/area.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/axis/axisrender.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/marker.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/datalabel.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/seriesrender.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/model/constant.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/export.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/enum.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/smithchart.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/legend/legendrender.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/model/base.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/rendering/sparkline-renderer.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/sparkline.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/rendering/sparkline-tooltip.js","../charts.ts","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/model/theme.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/model/base.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/model/constants.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/pointer-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/circular-gauge.js","../circulargauge.ts","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/size.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/point.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/rect.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/enum/enum.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/diagram-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/appearance.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/containers/container.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/path-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/native-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/text-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/image-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/containers/canvas.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/port.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/annotation.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/icon.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/node-base.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/selector.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/html-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/node.js","../node_modules/@syncfusion/ej2-diagrams/src/ruler/ruler.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/rendering/canvas-renderer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/rendering/svg-renderer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/rendering/renderer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/page-settings.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/service.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/grid-lines.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/ruler-settings.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/data-source.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/layout-base.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/tool.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/connector-editing.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/event-handlers.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/layer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/command-manager.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/scroller.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/spatial-search/quad.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/spatial-search/spatial-search.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/keyboard-commands.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/print-settings.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/containers/stack-panel.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/data-binding/data-binding.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/context-menu.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/connector-bridging.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/snapping.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/undo-redo.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/layout-animation.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/hierarchical-tree.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/mind-map.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/radial-tree.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/complex-hierarchical-tree.js","../node_modules/@syncfusion/ej2-diagrams/src/symbol-palette/symbol-palette.js","../node_modules/@syncfusion/ej2-diagrams/src/overview/overview.js","../diagrams.ts","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/dictionary.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/unique-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/unique-formats.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/document-editor.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/print.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/section-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/level-override.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/list.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/list-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/paragraph-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/character-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/editor-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/style.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/border.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/borders.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/shading.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/table-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/row-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/cell-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/page.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/context-menu.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/abstract-list.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/list-level.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/layout.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/render.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/text-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/zooming.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/viewer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/sfdt-reader.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/html-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search-result.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search-results.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/search-results.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/search.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/options-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/table-resizer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/editor.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/history-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/base-history-info.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/image-resizer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/history-info.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/editor-history.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/word-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/text-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/sfdt-export.js","../node_modules/@syncfusion/ej2-dropdowns/src/drop-down-base/drop-down-base.js","../node_modules/@syncfusion/ej2-dropdowns/src/drop-down-list/drop-down-list.js","../node_modules/@syncfusion/ej2-dropdowns/src/combo-box/combo-box.js","../node_modules/@syncfusion/ej2-dropdowns/src/auto-complete/auto-complete.js","../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/multi-select.js","../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/checkbox-selection.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/hyperlink-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/bookmark-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-of-contents-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/page-setup-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/paragraph-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/list-view-model.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/list-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/style-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/bullets-and-numbering-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/font-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-properties-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/borders-and-shading-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-options-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/cell-options-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/styles-dialog.js","../documenteditor.ts","../dropdowns.ts","../node_modules/@syncfusion/ej2-grids/src/grid/base/enum.js","../node_modules/@syncfusion/ej2-excel-export/src/cell-style.js","../node_modules/@syncfusion/ej2-excel-export/src/cell.js","../node_modules/@syncfusion/ej2-excel-export/src/column.js","../node_modules/@syncfusion/ej2-excel-export/src/row.js","../node_modules/@syncfusion/ej2-excel-export/src/worksheets.js","../node_modules/@syncfusion/ej2-excel-export/src/worksheet.js","../node_modules/@syncfusion/ej2-excel-export/src/value-formatter.js","../node_modules/@syncfusion/ej2-excel-export/src/csv-helper.js","../node_modules/@syncfusion/ej2-excel-export/src/blob-helper.js","../node_modules/@syncfusion/ej2-excel-export/src/workbook.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/value-formatter.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/column.js","../node_modules/@syncfusion/ej2-grids/src/grid/base/constant.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/checkbox-filter.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/data.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/row.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-merge-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/row-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/summary-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/group-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/content-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/stacked-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/indent-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/caption-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/render.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/cell-render-factory.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/service-locator.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/renderer-factory.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/width-controller.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/focus-strategy.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/page-settings.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/selection.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/search.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/show-hide.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/scroll.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/print.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/aggregate.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/clipboard.js","../node_modules/@syncfusion/ej2-grids/src/grid/base/grid.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/sort.js","../node_modules/@syncfusion/ej2-grids/src/pager/numeric-container.js","../node_modules/@syncfusion/ej2-grids/src/pager/pager-message.js","../node_modules/@syncfusion/ej2-grids/src/pager/pager.js","../node_modules/@syncfusion/ej2-grids/src/pager/pager-dropdown.js","../node_modules/@syncfusion/ej2-grids/src/pager/external-message.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/page.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-operator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/string-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/number-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/date-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-filter.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/filter.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/resize.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/reorder.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/row-reorder.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/group.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/detail-row.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/toolbar.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/footer-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/summary-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/intersection-observer.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/virtual-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/virtual-content-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/virtual-scroll.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/inline-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/batch-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/dialog-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/dropdown-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/numeric-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/default-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/normal-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/inline-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/batch-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/dialog-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/template-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/column-chooser.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/export-helper.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-export.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/pdf-export.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/command-column-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/command-column.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/context-menu.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/freeze-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/freeze-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/freeze.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/column-menu.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/foreign-key.js","../grids.ts","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/model/theme.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/model/base.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/utils/colorMapping.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/axis/axis.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/axis/axis-helpers.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/series/series.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/datasource/twodimensional.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/legend/legend.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/heatmap.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/datasource/adaptor.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/utils/tooltip.js","../heatmap.ts","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/model/base.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/model/constant.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/animation.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/linear-gauge.js","../lineargauge.ts","../lists.ts","../node_modules/@syncfusion/ej2-maps/src/maps/model/theme.js","../node_modules/@syncfusion/ej2-maps/src/maps/model/base.js","../node_modules/@syncfusion/ej2-maps/src/maps/model/constants.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/bing-map.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/color-mapping.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/layer-panel.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/annotation.js","../node_modules/@syncfusion/ej2-maps/src/maps/utils/export.js","../node_modules/@syncfusion/ej2-maps/src/maps/maps.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/bubble.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/marker.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/data-label.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/navigation-selected-line.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/legend.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/highlight.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/selection.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/zoom.js","../maps.ts","../node_modules/@syncfusion/ej2-notifications/src/toast/toast.js","../node_modules/@syncfusion/ej2-pivotview/src/base/util.js","../node_modules/@syncfusion/ej2-pivotview/src/base/engine.js","../node_modules/@syncfusion/ej2-pivotview/src/common/base/constant.js","../node_modules/@syncfusion/ej2-pivotview/src/common/base/css-constant.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/renderer/render.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/model/dataSource.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/model/gridsettings.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/excel-export.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/pdf-export.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/keyboard.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/context-menu.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/virtualscroll.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/base/pivotview.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/keyboard.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/event-base.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/node-state-modified.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/dataSource-update.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/error-dialog.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/filter-dialog.js","../node_modules/@syncfusion/ej2-pivotview/src/common/base/pivot-common.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/renderer/dialog-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/renderer/tree-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/renderer/axis-table-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/pivot-button.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/renderer/axis-field-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/renderer/renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/field-list/base/field-list.js","../node_modules/@syncfusion/ej2-pivotview/src/common/calculatedfield/calculated-field.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/field-list.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/common.js","../node_modules/@syncfusion/ej2-pivotview/src/common/grouping-bar/axis-field-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/common/grouping-bar/grouping-bar.js","../node_modules/@syncfusion/ej2-pivotview/src/common/conditionalformatting/conditional-formatting.js","../pivotview.ts","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/enum.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/classes.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/items.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/default-locale.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/toolbar-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/dropdown-buttons.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/service-locator.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/renderer-factory.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar-action.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/keyboard.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/color-picker.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-quick-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/popup-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/quick-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/count.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/markdown-selection.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/markdown-toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/execute-command-callback.js","../node_modules/@syncfusion/ej2-richtexteditor/src/common/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/lists.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/formats.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/md-selection-formats.js","../node_modules/@syncfusion/ej2-richtexteditor/src/common/config.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/undo.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/link.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/clearformat.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/base/markdown-parser.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/markdown-formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/markdown-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/markdown-editor.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/selection/selection.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/dom-node.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/lists.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/formats.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/insert-methods.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/nodecutter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/link.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/alignments.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/indents.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/image.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/table.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/isformatted.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-commands.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/undo.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/editor-manager.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/html-formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/content-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/iframe-content-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-editor.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/render.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/link-module.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/image-module.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/view-source.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/table-module.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/interface.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/toolbar-settings.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/iframe-settings.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/inline-mode.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/full-screen.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/rich-text-editor.js","../richtexteditor.ts","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/constant.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/css-constant.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/scroll.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/touch.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/keyboard.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/data.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/timezone/timezone.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/event-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/crud.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/form-validator.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/quick-popups.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/event-tooltip.js","../node_modules/@syncfusion/ej2-schedule/src/recurrence-editor/recurrence-editor.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/event-window.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/renderer.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/work-hours.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/time-scale.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/quick-info-templates.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/header-rows.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/field-options.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/fields.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/event-settings.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/group.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/resources.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/resource.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/schedule.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/action-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/resize.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/drag.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/view-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/work-cells.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/month.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/day.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/week.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/work-week.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/month.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/agenda-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/agenda.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/month-agenda.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/timeline-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-header-row.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-month.js","../schedule.ts","../node_modules/@syncfusion/ej2-treemap/src/treemap/model/theme.js","../node_modules/@syncfusion/ej2-splitbuttons/src/button-group/button-group.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/model/constants.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/model/base.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/layout/render-panel.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/utils/export.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/treemap.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/layout/legend.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/user-interaction/highlight-selection.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/user-interaction/tooltip.js","../treemap.ts"],"sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\nexport function getValue(nameSpace, obj) {\n /* tslint:disable no-any */\n var value = obj;\n var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @return {void}\n * @private\n */\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} params - String value to the get the inner object\n * @return {void}\n * @private\n */\nexport function deleteObject(obj, key) {\n delete obj[key];\n}\n/**\n * Check weather the given argument is only object.\n * @param {any} obj - Object which is need to check.\n * @return {boolean}\n * @private\n */\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @return {any}\n * @private\n */\nexport function getEnumValue(enumObject, enumValue) {\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @return {void}\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[deepmerge]) && (temrObj[deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {\n extend(temrObj[key], temrObj[key], tempProp[key], true);\n }\n else {\n temrObj[key] = tempProp[key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @return {Object}\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied || {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n if (deep && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n result[key] = extend({}, clone, copy, deep);\n }\n else {\n clone = src ? src : [];\n result[key] = extend([], clone, copy, deep);\n }\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @return {Function}\n * @private\n */\nexport function debounce(eventFunction, delay) {\n var out;\n // tslint:disable-next-line\n return function () {\n var _this = this;\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n// Added since lint ignored after added '//tslint:disable-next-line' \n/* tslint:disable:no-any */\n/**\n * To convert the object to string for query url\n * @param {Object} data\n * @returns string\n * @private\n */\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('link, style'));\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[i].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + '');\n printWindow.document.close();\n printWindow.focus();\n // tslint:disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n * @param {number|string} value\n * @return {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result === 'auto' || result.indexOf('%') !== -1 || result.indexOf('px') !== -1) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\nexport function getInstance(element, component) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\nexport function addInstance(element, instance) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n elem[instances].push(instance);\n }\n else {\n elem[instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n * @return {any}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function uniqueID() {\n // tslint:disable-next-line:no-any\n if ((typeof window) === 'undefined') {\n return;\n }\n // tslint:disable-next-line:no-any\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[i];\n }\n return ret;\n}\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n * @param tagName - Name of the tag, id and class names.\n * @param properties - Object to set properties in the element.\n * @param properties.id - To set the id to the created element.\n * @param properties.className - To add classes to the element.\n * @param properties.innerHTML - To set the innerHTML to element.\n * @param properties.styles - To set the some custom styles to element.\n * @param properties.attrs - To set the attributes to element.\n * @private\n */\nexport function createElement(tagName, properties) {\n //tslint:disable-next-line\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n if (ele.className !== '') {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n ele.classList.remove(className);\n }\n }\n }\n return elements;\n}\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n * @param {Element|Node} element - An element the need to check visibility\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function prepend(fromElements, toElement) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function append(fromElements, toElement) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.appendChild(docFrag);\n return fromElements;\n}\n/**\n * The function used to remove the element from the\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\nexport function detach(element) {\n var parentNode = element.parentNode;\n return parentNode.removeChild(element);\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, attributes[key]);\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function select(selector, context) {\n if (context === void 0) { context = document; }\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function selectAll(selector, context) {\n if (context === void 0) { context = document; }\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * Returns single closest parent element based on class selector.\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param {Element|Node} element - An element that need to get siblings.\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal = element.getAttribute(property);\n if (isNullOrUndefined(attrVal)) {\n element.setAttribute(property, value.toString());\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n // tslint:disable-next-line:no-any\n element.style[key] = attrs[key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @return {void}\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\nexport function matches(element, selector) {\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue.length;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[i], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[i], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[i], true]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[curKey] = defaultValue;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[curKey] !== newValue) {\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Method used to create property. General syntax below.\n * @param {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n * @param {T} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n * @param {Function} defaultType - Specifies the default value of property.\n * @param {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n * @param {T[]} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n * @param {T[]} defaultType - Specifies the default type of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n * @param {Function} defaultValue? - Specifies the default value of property.\n * @param {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n /* tslint:disable no-any */\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @return {void}\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n };\n /**\n * Triggers animation\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var startTime = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element \n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame \n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n * @param {AnimationModel} options\n * @returns {AnimationModel}\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n */\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n * @private\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n * @private\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n var Animation_1;\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n *
\n * \n * ```\n * @private\n * @param HTMLElement element - Target element\n * @param RippleOptions rippleOptions - Ripple options .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return Function;\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n * @private\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberParser = function (options) {\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date}\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number}\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData);\n };\n /**\n * Returns the First Day of the Week\n * @returns {number}\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n /* tslint:disable no-any */\n var numObject = IntlBase.getDependables(cldrData, locale, true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale)[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\nexport function getDefaultDateObject() {\n return IntlBase.getDependables(cldrData, '', false)[mapper[1]];\n}\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(\\/if|\\/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\n/**\n * The function to set regular expression for template expression string.\n * @param {RegExp} value - Value expression.\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper? - Helper functions as an object.\n * @private\n */\nexport function compile(template, helper) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper);\n var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\";\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n// function used to evaluate the function expression\nfunction evalExp(str, nameSpace, helper) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORD, function (strs) {\n strs = strs.trim();\n return addNameSpace(strs, !(QUOTES.test(strs)) && (localKeys.indexOf(strs) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(',', nameSpace + '.'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys)) +\n '+\"';\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n //handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition \n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else {\n // evaluate normal expression\n cnt = '\"+' + addNameSpace(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '+\"';\n }\n return cnt;\n });\n}\nfunction addNameSpace(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nvar HAS_ROW = /^[\\n\\r.]+\\ containerWidth) {\n if (overLeft > 0 && overRight <= 0) {\n position.left = containerRight - elemData.width;\n }\n else if (overRight > 0 && overLeft <= 0) {\n position.left = containerLeft;\n }\n else {\n position.left = overLeft > overRight ? (containerRight - elemData.width) : containerLeft;\n }\n }\n else if (overLeft > 0) {\n position.left += overLeft;\n }\n else if (overRight > 0) {\n position.left -= overRight;\n }\n }\n if (axis.Y) {\n var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n var containerTop = ContainerTop();\n var containerBottom = ContainerBottom();\n var overTop = containerTop - position.top;\n var overBottom = position.top + elemData.height - containerBottom;\n if (elemData.height > containerHeight) {\n if (overTop > 0 && overBottom <= 0) {\n position.top = containerBottom - elemData.height;\n }\n else if (overBottom > 0 && overTop <= 0) {\n position.top = containerTop;\n }\n else {\n position.top = overTop > overBottom ? (containerBottom - elemData.height) : containerTop;\n }\n }\n else if (overTop > 0) {\n position.top += overTop;\n }\n else if (overBottom > 0) {\n position.top -= overBottom;\n }\n }\n return position;\n}\nexport function isCollide(element, viewPortElement, x, y) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n var elemOffset = calculatePosition(element, 'left', 'top');\n if (x) {\n elemOffset.left = x;\n }\n if (y) {\n elemOffset.top = y;\n }\n var data = [];\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n var elementRect = element.getBoundingClientRect();\n var top = elemOffset.top;\n var left = elemOffset.left;\n var right = elemOffset.left + elementRect.width;\n var bottom = elemOffset.top + elementRect.height;\n var topData = '';\n var leftData = '';\n var yAxis = topCollideCheck(top, bottom);\n var xAxis = leftCollideCheck(left, right);\n if (yAxis.topSide) {\n data.push('top');\n }\n if (xAxis.rightSide) {\n data.push('right');\n }\n if (xAxis.leftSide) {\n data.push('left');\n }\n if (yAxis.bottomSide) {\n data.push('bottom');\n }\n return data;\n}\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, axis, fixedParent) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: true, Y: true }; }\n if (!target || !element || !positionX || !positionY || (!axis.X && !axis.Y)) {\n return;\n }\n var tEdge = { TL: null,\n TR: null,\n BL: null,\n BR: null };\n var eEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n };\n var elementRect = element.getBoundingClientRect();\n var pos = {\n posX: positionX, posY: positionY, offsetX: offsetX, offsetY: offsetY, position: { left: 0, top: 0 }\n };\n targetContainer = viewPortElement;\n parentDocument = target.ownerDocument;\n updateElementData(target, tEdge, pos, fixedParent, elementRect);\n setPosition(eEdge, pos, elementRect);\n if (axis.X) {\n leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n if (axis.Y && tEdge.TL.top > -1) {\n topFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n setPopup(element, pos, elementRect);\n}\nfunction setPopup(element, pos, elementRect) {\n var left = 0;\n var top = 0;\n if (element.offsetParent != null\n && (getComputedStyle(element.offsetParent).position === 'absolute' ||\n getComputedStyle(element.offsetParent).position === 'relative')) {\n var data = calculatePosition(element.offsetParent, 'left', 'top', false, elementRect);\n left = data.left;\n top = data.top;\n }\n element.style.top = (pos.position.top + pos.offsetY - (top)) + 'px';\n element.style.left = (pos.position.left + pos.offsetX - (left)) + 'px';\n}\nfunction updateElementData(target, edge, pos, fixedParent, elementRect) {\n pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent, elementRect);\n edge.TL = calculatePosition(target, 'left', 'top', fixedParent, elementRect);\n edge.TR = calculatePosition(target, 'right', 'top', fixedParent, elementRect);\n edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent, elementRect);\n edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent, elementRect);\n}\nfunction setPosition(eStatus, pos, elementRect) {\n eStatus.TL = { top: pos.position.top + pos.offsetY, left: pos.position.left + pos.offsetX };\n eStatus.TR = { top: eStatus.TL.top, left: eStatus.TL.left + elementRect.width };\n eStatus.BL = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left };\n eStatus.BR = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left + elementRect.width };\n}\nfunction leftCollideCheck(left, right) {\n var leftSide = false;\n var rightSide = false;\n if (((left - getBodyScrollLeft()) < ContainerLeft())) {\n leftSide = true;\n }\n if (right > ContainerRight()) {\n rightSide = true;\n }\n return { leftSide: leftSide, rightSide: rightSide };\n}\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n if ((tEdge.TL.left - getBodyScrollLeft()) <= ContainerLeft()) {\n collideSide.leftSide = false;\n }\n if (tEdge.TR.left >= ContainerRight()) {\n collideSide.rightSide = false;\n }\n if ((collideSide.leftSide && !collideSide.rightSide) || (!collideSide.leftSide && collideSide.rightSide)) {\n if (pos.posX === 'right') {\n pos.posX = 'left';\n }\n else {\n pos.posX = 'right';\n }\n pos.offsetX = pos.offsetX + elementRect.width;\n pos.offsetX = -1 * pos.offsetX;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n leftFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n if ((tEdge.TL.top - getBodyScrollTop()) <= ContainerTop()) {\n collideSide.topSide = false;\n }\n if (tEdge.BL.top >= ContainerBottom()) {\n collideSide.bottomSide = false;\n }\n if ((collideSide.topSide && !collideSide.bottomSide) || (!collideSide.topSide && collideSide.bottomSide)) {\n if (pos.posY === 'top') {\n pos.posY = 'bottom';\n }\n else {\n pos.posY = 'top';\n }\n pos.offsetY = pos.offsetY + elementRect.height;\n pos.offsetY = -1 * pos.offsetY;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false, elementRect);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n topFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topCollideCheck(top, bottom) {\n var topSide = false;\n var bottomSide = false;\n if ((top - getBodyScrollTop()) < ContainerTop()) {\n topSide = true;\n }\n if (bottom > ContainerBottom()) {\n bottomSide = true;\n }\n return { topSide: topSide, bottomSide: bottomSide };\n}\nfunction getTargetContainerWidth() {\n return targetContainer.getBoundingClientRect().width;\n}\nfunction getTargetContainerHeight() {\n return targetContainer.getBoundingClientRect().height;\n}\nfunction getTargetContainerLeft() {\n return targetContainer.getBoundingClientRect().left;\n}\nfunction getTargetContainerTop() {\n return targetContainer.getBoundingClientRect().top;\n}\nfunction ContainerTop() {\n if (targetContainer) {\n return getTargetContainerTop();\n }\n return 0;\n}\nfunction ContainerLeft() {\n if (targetContainer) {\n return getTargetContainerLeft();\n }\n return 0;\n}\nfunction ContainerRight() {\n if (targetContainer) {\n return (getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth());\n }\n return (getBodyScrollLeft() + getViewPortWidth());\n}\nfunction ContainerBottom() {\n if (targetContainer) {\n return (getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight());\n }\n return (getBodyScrollTop() + getViewPortHeight());\n}\nfunction getBodyScrollTop() {\n // if(targetContainer)\n // return targetContainer.scrollTop;\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\nfunction getBodyScrollLeft() {\n // if(targetContainer)\n // return targetContainer.scrollLeft;\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\nfunction getViewPortHeight() {\n return window.innerHeight;\n}\nfunction getViewPortWidth() {\n return window.innerWidth;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { setStyleAttribute, addClass, removeClass, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { calculatePosition, calculateRelativeBasedPosition } from '../common/position';\nimport { Animation, Property, Event, Component } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { flip, fit, isCollide } from '../common/collision';\n/**\n * Specifies the offset position values.\n */\nvar PositionData = /** @class */ (function (_super) {\n __extends(PositionData, _super);\n function PositionData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('left')\n ], PositionData.prototype, \"X\", void 0);\n __decorate([\n Property('top')\n ], PositionData.prototype, \"Y\", void 0);\n return PositionData;\n}(ChildProperty));\nexport { PositionData };\n// don't use space in classNames\nvar CLASSNAMES = {\n ROOT: 'e-popup',\n RTL: 'e-rtl',\n OPEN: 'e-popup-open',\n CLOSE: 'e-popup-close'\n};\n/**\n * Represents the Popup Component\n * ```html\n *
\n *
Popup Content
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup(element, options) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Popup.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'zIndex':\n setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'position':\n case 'relateTo':\n this.refreshPosition();\n break;\n case 'offsetX':\n var x = newProp.offsetX - oldProp.offsetX;\n this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n break;\n case 'offsetY':\n var y = newProp.offsetY - oldProp.offsetY;\n this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n break;\n case 'content':\n this.setContent();\n break;\n case 'actionOnScroll':\n if (newProp.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n else {\n this.unwireScrollEvents();\n }\n break;\n }\n }\n };\n /**\n * gets the Component module name.\n * @private\n */\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * gets the persisted state properties of the Component.\n */\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\n */\n Popup.prototype.destroy = function () {\n this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL);\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Popup.prototype.render = function () {\n this.element.classList.add(CLASSNAMES.ROOT);\n var styles = {};\n if (this.zIndex !== 1000) {\n styles.zIndex = this.zIndex;\n }\n if (this.width !== 'auto') {\n styles.width = formatUnit(this.width);\n }\n if (this.height !== 'auto') {\n styles.height = formatUnit(this.height);\n }\n setStyleAttribute(this.element, styles);\n this.fixedParent = false;\n this.setEnableRtl();\n this.setContent();\n this.wireEvents();\n };\n Popup.prototype.wireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n }\n if (this.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n };\n Popup.prototype.wireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n }\n }\n };\n Popup.prototype.unwireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n }\n if (this.actionOnScroll !== 'none') {\n this.unwireScrollEvents();\n }\n };\n Popup.prototype.unwireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n }\n }\n };\n Popup.prototype.getRelateToElement = function () {\n var relateToElement = this.relateTo === '' || isNullOrUndefined(this.relateTo) ?\n document.body : this.relateTo;\n this.setProperties({ relateTo: relateToElement }, true);\n return ((typeof this.relateTo) === 'string') ?\n document.querySelector(this.relateTo) : this.relateTo;\n };\n Popup.prototype.scrollRefresh = function (e) {\n if (this.actionOnScroll === 'reposition') {\n if (!(this.element.offsetParent === e.target ||\n (this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' &&\n e.target.parentElement == null))) {\n this.refreshPosition();\n }\n }\n else if (this.actionOnScroll === 'hide') {\n this.hide();\n }\n if (this.actionOnScroll !== 'none') {\n if (this.getRelateToElement()) {\n var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n if (!targetVisible && !this.targetInvisibleStatus) {\n this.trigger('targetExitViewport');\n this.targetInvisibleStatus = true;\n }\n else if (targetVisible) {\n this.targetInvisibleStatus = false;\n }\n }\n }\n };\n /**\n * This method is to get the element visibility on viewport when scroll\n * the page. This method will returns true even though 1 px of element\n * part is in visible.\n */\n Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n var scrollParents = this.getScrollableParent(relateToElement);\n for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n continue;\n }\n else {\n return false;\n }\n }\n return true;\n };\n Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n var rect = this.checkGetBoundingClientRect(relateToElement);\n if (!rect.height || !rect.width) {\n return false;\n }\n if (!isNullOrUndefined(this.checkGetBoundingClientRect(scrollElement))) {\n var parent_4 = scrollElement.getBoundingClientRect();\n return !(rect.bottom < parent_4.top) &&\n (!(rect.bottom > parent_4.bottom) &&\n (!(rect.right > parent_4.right) &&\n !(rect.left < parent_4.left)));\n }\n else {\n var win = window;\n var windowView = {\n top: win.scrollY,\n left: win.scrollX,\n right: win.scrollX + win.outerWidth,\n bottom: win.scrollY + win.outerHeight\n };\n var off = calculatePosition(relateToElement);\n var ele = {\n top: off.top,\n left: off.left,\n right: off.left + rect.width,\n bottom: off.top + rect.height\n };\n var elementView = {\n top: windowView.bottom - ele.top,\n left: windowView.right - ele.left,\n bottom: ele.bottom - windowView.top,\n right: ele.right - windowView.left\n };\n return elementView.top > 0\n && elementView.left > 0\n && elementView.right > 0\n && elementView.bottom > 0;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Popup.prototype.preRender = function () {\n //There is no event handler\n };\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\n this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n };\n Popup.prototype.setContent = function () {\n if (!isNullOrUndefined(this.content)) {\n this.element.innerHTML = '';\n if (typeof (this.content) === 'string') {\n this.element.textContent = this.content;\n }\n else {\n this.element.appendChild(this.content);\n }\n }\n };\n Popup.prototype.orientationOnChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.refreshPosition();\n }, 200);\n };\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n */\n Popup.prototype.refreshPosition = function (target, collision) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n if (!collision) {\n this.checkCollision();\n }\n };\n Popup.prototype.reposition = function () {\n var pos;\n var position;\n var relateToElement = this.getRelateToElement();\n if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n pos = { left: this.position.X, top: this.position.Y };\n }\n else if ((typeof this.position.X === 'string' && typeof this.position.Y === 'number') ||\n (typeof this.position.X === 'number' && typeof this.position.Y === 'string')) {\n var display = this.element.style.display;\n var parentDisplay = void 0;\n this.element.style.display = 'block';\n if (this.element.classList.contains('e-dlg-modal')) {\n parentDisplay = this.element.parentElement.style.display;\n this.element.parentElement.style.display = 'block';\n }\n position = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n if (typeof this.position.X === 'string') {\n pos = { left: position.left, top: this.position.Y };\n }\n else {\n pos = { left: this.position.X, top: position.top };\n }\n this.element.style.display = display;\n if (this.element.classList.contains('e-dlg-modal')) {\n this.element.parentElement.style.display = parentDisplay;\n }\n }\n else if (relateToElement) {\n var display = this.element.style.display;\n this.element.style.display = 'block';\n pos = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n this.element.style.display = display;\n }\n else {\n pos = { left: 0, top: 0 };\n }\n if (!isNullOrUndefined(pos)) {\n this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n }\n };\n Popup.prototype.checkGetBoundingClientRect = function (ele) {\n var eleRect;\n try {\n eleRect = ele.getBoundingClientRect();\n return eleRect;\n }\n catch (error) {\n return null;\n }\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n var eleRect = this.checkGetBoundingClientRect(ele);\n var anchorRect = this.checkGetBoundingClientRect(anchorEle);\n if (isNullOrUndefined(eleRect) || isNullOrUndefined(anchorRect)) {\n return null;\n }\n var anchor = anchorEle;\n var anchorPos = { left: 0, top: 0 };\n if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n anchorPos = calculatePosition(anchorEle);\n }\n else {\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName !== 'BODY')) {\n ele = ele.parentElement;\n }\n anchorPos = calculateRelativeBasedPosition(anchor, ele);\n }\n switch (position.X) {\n default:\n case 'left':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth / 2 - eleRect.width / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width / 2 - eleRect.width / 2);\n }\n else {\n anchorPos.left += (anchorRect.width / 2);\n }\n break;\n case 'right':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth - eleRect.width);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width - eleRect.width);\n }\n else {\n anchorPos.left += (anchorRect.width);\n }\n break;\n }\n switch (position.Y) {\n default:\n case 'top':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight / 2 - eleRect.height / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height / 2 - eleRect.height / 2);\n }\n else {\n anchorPos.top += (anchorRect.height / 2);\n }\n break;\n case 'bottom':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight - eleRect.height);\n }\n else if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height - eleRect.height);\n }\n else {\n anchorPos.top += (anchorRect.height);\n }\n break;\n }\n anchorPos.left += offsetX;\n anchorPos.top += offsetY;\n return anchorPos;\n };\n Popup.prototype.callFlip = function (param) {\n var relateToElement = this.getRelateToElement();\n flip(this.element, relateToElement, this.offsetX, this.offsetY, this.position.X, this.position.Y, this.viewPortElement, param, this.fixedParent);\n };\n Popup.prototype.callFit = function (param) {\n if (isCollide(this.element, this.viewPortElement).length !== 0) {\n if (isNullOrUndefined(this.viewPortElement)) {\n var data = fit(this.element, this.viewPortElement, param);\n this.element.style.left = data.left + 'px';\n this.element.style.top = data.top + 'px';\n }\n else {\n var elementRect = this.checkGetBoundingClientRect(this.element);\n var viewPortRect = this.checkGetBoundingClientRect(this.viewPortElement);\n if (isNullOrUndefined(elementRect) || isNullOrUndefined(viewPortRect)) {\n return null;\n }\n if (param && param.Y === true) {\n if (viewPortRect.top > elementRect.top) {\n this.element.style.top = '0px';\n }\n else if (viewPortRect.bottom < elementRect.bottom) {\n this.element.style.top = parseInt(this.element.style.top, 10) - (elementRect.bottom - viewPortRect.bottom) + 'px';\n }\n }\n if (param && param.X === true) {\n if (viewPortRect.right < elementRect.right) {\n this.element.style.left = parseInt(this.element.style.left, 10) - (elementRect.right - viewPortRect.right) + 'px';\n }\n else if (viewPortRect.left > elementRect.left) {\n this.element.style.left = parseInt(this.element.style.left, 10) + (viewPortRect.left - elementRect.left) + 'px';\n }\n }\n }\n }\n };\n Popup.prototype.checkCollision = function () {\n var horz = this.collision.X;\n var vert = this.collision.Y;\n if (horz === 'none' && vert === 'none') {\n return;\n }\n if (horz === 'flip' && vert === 'flip') {\n this.callFlip({ X: true, Y: true });\n }\n else if (horz === 'fit' && vert === 'fit') {\n this.callFit({ X: true, Y: true });\n }\n else {\n if (horz === 'flip') {\n this.callFlip({ X: true, Y: false });\n }\n else if (vert === 'flip') {\n this.callFlip({ Y: true, X: false });\n }\n if (horz === 'fit') {\n this.callFit({ X: true, Y: false });\n }\n else if (vert === 'fit') {\n this.callFit({ X: false, Y: true });\n }\n }\n };\n /**\n * Shows the popup element from screen.\n * @param { AnimationModel | Function } collisionOrAnimationOptions? - To pass animation options or collision function.\n * @param { Function } collision? - To pass the collision function.\n * @param { HTMLElement } relativeElement? - To calculate the zIndex value dynamically.\n */\n Popup.prototype.show = function (animationOptions, relativeElement) {\n var _this = this;\n if (this.zIndex === 1000 || !isNullOrUndefined(relativeElement)) {\n var zIndexElement = (isNullOrUndefined(relativeElement)) ? this.element : relativeElement;\n this.zIndex = getZindexPartial(zIndexElement);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n }\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.showAnimation;\n if (this.collision.X !== 'none' || this.collision.Y !== 'none') {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.checkCollision();\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n }\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.begin = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.CLOSE);\n addClass([_this.element], CLASSNAMES.OPEN);\n }\n };\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n _this.trigger('open');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.trigger('open');\n }\n };\n /**\n * Hides the popup element from screen.\n * @param { AnimationModel } animationOptions? - To give the animation options.\n */\n Popup.prototype.hide = function (animationOptions) {\n var _this = this;\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.hideAnimation;\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.OPEN);\n addClass([_this.element], CLASSNAMES.CLOSE);\n _this.trigger('close');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n this.trigger('close');\n }\n };\n /**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n */\n Popup.prototype.getScrollableParent = function (element) {\n this.checkFixedParent(element);\n return getScrollableParent(element, this.fixedParent);\n };\n Popup.prototype.checkFixedParent = function (element) {\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (parentStyle.position === 'fixed' && this.element.offsetParent && this.element.offsetParent.tagName === 'BODY') {\n this.element.style.position = 'fixed';\n this.fixedParent = true;\n }\n parent = parent.parentElement;\n if (isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed'\n && this.element.style.position === 'fixed') {\n this.fixedParent = true;\n }\n }\n };\n __decorate([\n Property('auto')\n ], Popup.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Popup.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"content\", void 0);\n __decorate([\n Property('container')\n ], Popup.prototype, \"targetType\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"viewPortElement\", void 0);\n __decorate([\n Property({ X: 'none', Y: 'none' })\n ], Popup.prototype, \"collision\", void 0);\n __decorate([\n Property('')\n ], Popup.prototype, \"relateTo\", void 0);\n __decorate([\n Complex({}, PositionData)\n ], Popup.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetY\", void 0);\n __decorate([\n Property(1000)\n ], Popup.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Popup.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('reposition')\n ], Popup.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"showAnimation\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"hideAnimation\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"targetExitViewport\", void 0);\n Popup = __decorate([\n NotifyPropertyChanges\n ], Popup);\n return Popup;\n}(Component));\nexport { Popup };\n/**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @private\n */\nexport function getScrollableParent(element, fixedParent) {\n var eleStyle = getComputedStyle(element);\n var scrollParents = [];\n var overflowRegex = /(auto|scroll)/;\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static')\n && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n if (!fixedParent) {\n scrollParents.push(document);\n }\n return scrollParents;\n}\n/**\n * Gets the maximum z-index of the given element.\n * @param { HTMLElement } element - Specify the element to get the maximum z-index of it.\n * @private\n */\nexport function getZindexPartial(element) {\n // upto body traversal\n var parent = element.parentElement;\n var parentZindex = [];\n while (parent) {\n if (parent.tagName !== 'BODY') {\n var index = document.defaultView.getComputedStyle(parent, null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(parent, null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n parentZindex.push(index);\n }\n parent = parent.parentElement;\n }\n else {\n break;\n }\n }\n //Body direct children element traversal\n var childrenZindex = [];\n for (var i = 0; i < document.body.children.length; i++) {\n if (!element.isEqualNode(document.body.children[i])) {\n var index = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n childrenZindex.push(index);\n }\n }\n }\n childrenZindex.push('999');\n var siblingsZindex = [];\n if (!isNullOrUndefined(element.parentElement) && element.parentElement.tagName !== 'BODY') {\n var childNodes = [].slice.call(element.parentElement.children);\n for (var i = 0; i < childNodes.length; i++) {\n var index = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n siblingsZindex.push(index);\n }\n }\n }\n var finalValue = parentZindex.concat(childrenZindex, siblingsZindex);\n var currentZindexValue = Math.max.apply(Math, finalValue) + 1;\n // Checking the max-zindex value\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n/**\n * Gets the maximum z-index of the page.\n * @param { HTMLElement } tagName - Specify the tagName to get the maximum z-index of it.\n * @private\n */\nexport function getMaxZindex(tagName) {\n if (tagName === void 0) { tagName = ['*']; }\n var maxZindex = [];\n for (var i = 0; i < tagName.length; i++) {\n var elements = document.getElementsByTagName(tagName[i]);\n for (var i_1 = 0; i_1 < elements.length; i_1++) {\n var index = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n maxZindex.push(index);\n }\n }\n }\n var currentZindexValue = Math.max.apply(Math, maxZindex) + 1;\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n","import { isNullOrUndefined, classList, createElement } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar spinTemplate = null;\nvar spinCSSClass = null;\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_HIGHCONTRASTSPIN = 'e-spin-high-contrast';\nvar CLS_SPINWRAP = 'e-spinner-pane';\nvar CLS_SPININWRAP = 'e-spinner-inner';\nvar CLS_SPINCIRCLE = 'e-path-circle';\nvar CLS_SPINARC = 'e-path-arc';\nvar CLS_SPINLABEL = 'e-spin-label';\nvar CLS_SPINTEMPLATE = 'e-spin-template';\n/**\n * Create a spinner for the specified target element.\n * ```\n * E.g : createSpinner({ target: targetElement, width: '34px', label: 'Loading..' });\n * ```\n * @param args\n * @private\n */\nexport function createSpinner(args, internalCreateElement) {\n var radius;\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = create_spinner_container(args.target, makeElement);\n if (!isNullOrUndefined(args.cssClass)) {\n container.wrap.classList.add(args.cssClass);\n }\n if (!isNullOrUndefined(args.template) || !isNullOrUndefined(spinTemplate)) {\n var template = !isNullOrUndefined(args.template) ? args.template : spinTemplate;\n container.wrap.classList.add(CLS_SPINTEMPLATE);\n replaceContent(container.wrap, template, spinCSSClass);\n }\n else {\n var theme = !isNullOrUndefined(args.type) ? args.type : getTheme(container.wrap);\n var width = !isNullOrUndefined(args.width) ? args.width : undefined;\n radius = calculateRadius(width, theme);\n setTheme(theme, container.wrap, radius, makeElement);\n if (!isNullOrUndefined(args.label)) {\n createLabel(container.inner_wrap, args.label, makeElement);\n }\n }\n container.wrap.classList.add(CLS_HIDESPIN);\n container = null;\n}\nfunction createLabel(container, label, makeElement) {\n var labelEle = makeElement('div', {});\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.textContent = label;\n container.appendChild(labelEle);\n return labelEle;\n}\nfunction createMaterialSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n create_material_element(container, uniqueID, makeElement);\n mat_calculate_attributes(radius, container);\n}\nfunction startMatAnimate(container, uniqueID, radius) {\n var globalObject = {};\n var timeOutVar = 0;\n globalTimeOut[uniqueID].timeOut = 0;\n globalObject[uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n var spinnerInfo = { uniqueID: uniqueID, container: container, globalInfo: globalObject, timeOutVar: timeOutVar };\n animateMaterial(spinnerInfo);\n}\nfunction createFabricSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FABRICSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\nfunction createHighContrastSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_HIGHCONTRASTSPIN);\n}\nfunction getTheme(container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n}\nfunction setTheme(theme, container, radius, makeElement) {\n var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n var svg = innerContainer.querySelector('svg');\n if (!isNullOrUndefined(svg)) {\n innerContainer.removeChild(svg);\n }\n switch (theme) {\n case 'Material':\n createMaterialSpinner(innerContainer, radius, makeElement);\n break;\n case 'Fabric':\n createFabricSpinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap':\n createBootstrapSpinner(innerContainer, radius, makeElement);\n break;\n case 'HighContrast':\n createHighContrastSpinner(innerContainer, radius, makeElement);\n break;\n }\n}\nfunction createBootstrapSpinner(innerContainer, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n create_bootstrap_element(innerContainer, uniqueID, makeElement);\n boot_calculate_attributes(innerContainer, radius);\n}\nfunction create_bootstrap_element(innerContainer, uniqueID, makeElement) {\n var svgBoot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var viewBoxValue = 64;\n var trans = 32;\n var defaultRadius = 2;\n svgBoot.setAttribute('id', uniqueID);\n svgBoot.setAttribute('class', CLS_BOOTSPIN);\n svgBoot.setAttribute('viewBox', '0 0 ' + viewBoxValue + ' ' + viewBoxValue);\n innerContainer.insertBefore(svgBoot, innerContainer.firstChild);\n for (var item = 0; item <= 7; item++) {\n var bootCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n bootCircle.setAttribute('class', CLS_SPINCIRCLE + '_' + item);\n bootCircle.setAttribute('r', defaultRadius + '');\n bootCircle.setAttribute('transform', 'translate(' + trans + ',' + trans + ')');\n svgBoot.appendChild(bootCircle);\n }\n}\nfunction boot_calculate_attributes(innerContainer, radius) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n svg.style.width = svg.style.height = radius + 'px';\n var x = 0;\n var y = 0;\n var rad = 24;\n var startArc = 90;\n for (var item = 0; item <= 7; item++) {\n var start = defineArcPoints(x, y, rad, startArc);\n var circleEle = svg.querySelector('.' + CLS_SPINCIRCLE + '_' + item);\n circleEle.setAttribute('cx', start.x + '');\n circleEle.setAttribute('cy', start.y + '');\n startArc = startArc >= 360 ? 0 : startArc;\n startArc = startArc + 45;\n }\n}\nfunction generateSeries(begin, stop) {\n var series = [];\n var start = begin;\n var end = stop;\n var increment = false;\n var count = 1;\n formSeries(start);\n function formSeries(i) {\n series.push(i);\n if (i !== end || count === 1) {\n if (i <= start && i > 1 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n else if (i === 1) {\n i = 7;\n i = parseFloat((i + 0.2).toFixed(2));\n increment = true;\n }\n else if (i < 8 && increment) {\n i = parseFloat((i + 0.2).toFixed(2));\n if (i === 8) {\n increment = false;\n }\n }\n else if (i <= 8 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n ++count;\n formSeries(i);\n }\n }\n return series;\n}\nfunction animateBootstrap(innerContainer) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var id = svg.getAttribute('id');\n for (var i = 1; i <= 8; i++) {\n var circleEle = (innerContainer.getElementsByClassName('e-path-circle_' +\n (i === 8 ? 0 : i))[0]);\n rotation(circleEle, i, i, generateSeries(i, i), id);\n }\n function rotation(circle, start, end, series, id) {\n var count = 0;\n boot_animate(start);\n function boot_animate(radius) {\n if (globalTimeOut[id].isAnimate) {\n ++count;\n circle.setAttribute('r', radius + '');\n if (count >= series.length) {\n count = 0;\n }\n globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n }\n }\n }\n}\nfunction replaceContent(container, template, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var inner = container.querySelector('.e-spinner-inner');\n inner.innerHTML = template;\n}\nfunction calculateRadius(width, theme) {\n var defaultSize = theme === 'Material' ? DEFT_MAT_WIDTH : theme === 'Fabric' ? DEFT_FAB_WIDTH : DEFT_BOOT_WIDTH;\n width = width ? parseFloat(width + '') : defaultSize;\n return theme === 'Bootstrap' ? width : width / 2;\n}\nfunction globalVariables(id, radius, count, previousId) {\n return {\n radius: radius,\n count: count,\n previousId: previousId\n };\n}\nfunction random_generator() {\n var random = '';\n var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 5; i++) {\n random += combine.charAt(Math.floor(Math.random() * combine.length));\n }\n return random;\n}\nfunction create_fabric_element(innerCon, uniqueID, themeClass, makeElement) {\n var svgFabric = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFabric.setAttribute('id', uniqueID);\n svgFabric.setAttribute('class', themeClass);\n var fabricCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n var fabricCircleArc = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCircleArc.setAttribute('class', CLS_SPINARC);\n innerCon.insertBefore(svgFabric, innerCon.firstChild);\n svgFabric.appendChild(fabricCirclePath);\n svgFabric.appendChild(fabricCircleArc);\n}\nfunction create_material_element(innerContainer, uniqueID, makeElement) {\n var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgMaterial.setAttribute('class', CLS_MATERIALSPIN);\n svgMaterial.setAttribute('id', uniqueID);\n var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n svgMaterial.appendChild(matCirclePath);\n}\nfunction create_spinner_container(target, makeElement) {\n var spinnerContainer = makeElement('div', {});\n spinnerContainer.classList.add(CLS_SPINWRAP);\n var spinnerInnerContainer = makeElement('div', {});\n spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n target.appendChild(spinnerContainer);\n spinnerContainer.appendChild(spinnerInnerContainer);\n return { wrap: spinnerContainer, inner_wrap: spinnerInnerContainer };\n}\nfunction animateMaterial(spinnerInfo) {\n var start = 1;\n var end = 149;\n var duration = 1333;\n var max = 75;\n createCircle(start, end, easeAnimation, duration, spinnerInfo.globalInfo[spinnerInfo.uniqueID].count, max, spinnerInfo);\n spinnerInfo.globalInfo[spinnerInfo.uniqueID].count = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].count % 4;\n}\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n var startTime = new Date().getTime();\n var change = end - start;\n var diameter = getSize((spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2) + '');\n var strokeSize = getStrokeSize(diameter);\n var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n mat_animation(spinnerInfo);\n function mat_animation(spinnerInfo) {\n var currentTime = Math.max(0, Math.min(new Date().getTime() - startTime, duration));\n updatePath(easing(currentTime, start, change, duration), spinnerInfo.container);\n if (id === spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId && currentTime < duration) {\n globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n }\n else {\n animateMaterial(spinnerInfo);\n }\n }\n function updatePath(value, container) {\n if ((!isNullOrUndefined(container.querySelector('svg.e-spin-material')))\n && (!isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle')))) {\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, value, max) + '');\n path.setAttribute('transform', 'rotate(' + (rotate) + ' ' + diameter / 2 + ' ' + diameter / 2 + ')');\n }\n }\n}\nfunction mat_calculate_attributes(radius, container) {\n var diameter = radius * 2;\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n var strokeSize = getStrokeSize(diameter);\n var transformOrigin = (diameter / 2) + 'px';\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.width = svg.style.height = diameter + 'px';\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n path.setAttribute('stroke-width', strokeSize + '');\n path.setAttribute('d', drawArc(diameter, strokeSize));\n path.setAttribute('stroke-dasharray', ((diameter - strokeSize) * Math.PI * 0.75) + '');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, 1, 75) + '');\n}\nfunction getSize(value) {\n var parsed = parseFloat(value);\n return parsed;\n}\nfunction drawArc(diameter, strokeSize) {\n var radius = diameter / 2;\n var offset = strokeSize / 2;\n return 'M' + radius + ',' + offset\n + 'A' + (radius - offset) + ',' + (radius - offset) + ' 0 1 1 ' + offset + ',' + radius;\n}\nfunction getStrokeSize(diameter) {\n return 10 / 100 * diameter;\n}\nfunction getDashOffset(diameter, strokeSize, value, max) {\n return (diameter - strokeSize) * Math.PI * ((3 * (max) / 100) - (value / 100));\n}\nfunction easeAnimation(current, start, change, duration) {\n var timestamp = (current /= duration) * current;\n var timecount = timestamp * current;\n return start + change * (6 * timecount * timestamp + -15 * timestamp * timestamp + 10 * timecount);\n}\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n var centerX = radius;\n var centerY = radius;\n var diameter = radius * 2;\n var startArc = 315;\n var endArc = 45;\n var svg = innerConainer.querySelector('.' + trgClass);\n var circle = svg.querySelector('.e-path-circle');\n var path = svg.querySelector('.e-path-arc');\n var transformOrigin = (diameter / 2) + 'px';\n circle.setAttribute('d', defineCircle(centerX, centerY, radius));\n path.setAttribute('d', defineArc(centerX, centerY, radius, startArc, endArc));\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n svg.style.width = svg.style.height = diameter + 'px';\n}\nfunction defineArcPoints(centerX, centerY, radius, angle) {\n var radians = (angle - 90) * Math.PI / 180.0;\n return {\n x: centerX + (radius * Math.cos(radians)),\n y: centerY + (radius * Math.sin(radians))\n };\n}\nfunction defineArc(x, y, radius, startArc, endArc) {\n var start = defineArcPoints(x, y, radius, endArc);\n var end = defineArcPoints(x, y, radius, startArc);\n var d = [\n 'M', start.x, start.y,\n 'A', radius, radius, 0, 0, 0, end.x, end.y\n ].join(' ');\n return d;\n}\nfunction defineCircle(x, y, radius) {\n var d = [\n 'M', x, y,\n 'm', -radius, 0,\n 'a', radius, radius, 0, 1, 0, radius * 2, 0,\n 'a', radius, radius, 0, 1, 0, -radius * 2, 0,\n ].join(' ');\n return d;\n}\n/**\n * Function to show the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function showSpinner(container) {\n showHideSpinner(container, false);\n container = null;\n}\nfunction showHideSpinner(container, isHide) {\n var spinnerWrap = container.classList.contains(CLS_SPINWRAP) ? container :\n container.querySelector('.' + CLS_SPINWRAP);\n var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n var spinCheck;\n spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_HIDESPIN) :\n !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n if (spinCheck) {\n var svgEle = spinnerWrap.querySelector('svg');\n if (isNullOrUndefined(svgEle)) {\n return;\n }\n var id = svgEle.getAttribute('id');\n globalTimeOut[id].isAnimate = !isHide;\n switch (globalTimeOut[id].type) {\n case 'Material':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n break;\n case 'Bootstrap':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n break;\n }\n }\n isHide ? classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]) : classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n container = null;\n}\n/**\n * Function to hide the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function hideSpinner(container) {\n showHideSpinner(container, true);\n container = null;\n}\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : setSpinner({ cssClass: 'custom-css'; type: 'Material' });\n * ```\n * @param args\n * @private\n */\nexport function setSpinner(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.template !== undefined) {\n spinTemplate = args.template;\n if (args.template !== undefined) {\n spinCSSClass = args.cssClass;\n }\n }\n var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n for (var index = 0; index < container.length; index++) {\n ensureTemplate(args.template, container[index], args.type, args.cssClass, makeElement);\n }\n}\nfunction ensureTemplate(template, container, theme, cssClass, makeEle) {\n if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n replaceTheme(container, theme, cssClass, makeEle);\n if (container.classList.contains(CLS_SHOWSPIN)) {\n container.classList.remove(CLS_SHOWSPIN);\n showSpinner(container);\n }\n else {\n container.classList.remove(CLS_HIDESPIN);\n hideSpinner(container);\n }\n }\n else {\n spinTemplate = template;\n if (!isNullOrUndefined(cssClass)) {\n spinCSSClass = cssClass;\n }\n }\n}\nfunction replaceTheme(container, theme, cssClass, makeEle) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var svgElement = container.querySelector('svg');\n var radius = theme === 'Bootstrap' ? parseFloat(svgElement.style.height) : parseFloat(svgElement.style.height) / 2;\n var classNames = svgElement.getAttribute('class');\n var svgClassList = classNames.split(/\\s/);\n if (svgClassList.indexOf('e-spin-material') >= 0) {\n var id = svgElement.getAttribute('id');\n clearTimeout(globalTimeOut[id].timeOut);\n }\n setTheme(theme, container, radius, makeEle);\n}\n","/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser, extend } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nvar ERROR = 'e-error';\nvar INPUTGROUP = 'e-input-group';\nvar FLOATINPUT = 'e-float-input';\nvar UTILMASK = 'e-utility-mask';\nvar TOPLABEL = 'e-label-top';\nvar BOTTOMLABEL = 'e-label-bottom';\n/**\n * @hidden\n * Built-in masking elements collection.\n */\nexport var regularExpressions = {\n '0': '[0-9]',\n '9': '[0-9 ]',\n '#': '[0-9 +-]',\n 'L': '[A-Za-z]',\n '?': '[A-Za-z ]',\n '&': '[^\\x7f ]+',\n 'C': '[^\\x7f]+',\n 'A': '[A-Za-z0-9]',\n 'a': '[A-Za-z0-9 ]',\n};\n/**\n * @hidden\n * Generate required masking elements to the MaskedTextBox from user mask input.\n */\nexport function createMask() {\n attributes(this.element, {\n 'role': 'textbox', 'autocomplete': 'off', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': ''\n });\n if (this.mask) {\n var splitMask = this.mask.split(']');\n for (var i = 0; i < splitMask.length; i++) {\n if (splitMask[i][splitMask[i].length - 1] === '\\\\') {\n splitMask[i] = splitMask[i] + ']';\n var splitInnerMask = splitMask[i].split('[');\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j][splitInnerMask[j].length - 1] === '\\\\') {\n splitInnerMask[j] = splitInnerMask[j] + '[';\n }\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n else {\n var splitInnerMask = splitMask[i].split('[');\n if (splitInnerMask.length > 1) {\n var chkSpace = false;\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j] === '\\\\') {\n this.customRegExpCollec.push('[');\n this.hiddenMask += splitInnerMask[j] + '[';\n }\n else if (splitInnerMask[j] === '') {\n chkSpace = true;\n }\n else if ((splitInnerMask[j] !== '' && chkSpace) || j === splitInnerMask.length - 1) {\n this.customRegExpCollec.push('[' + splitInnerMask[j] + ']');\n this.hiddenMask += this.promptChar;\n chkSpace = false;\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[0]);\n }\n }\n }\n this.escapeMaskValue = this.hiddenMask;\n this.promptMask = this.hiddenMask.replace(/[09?LCAa#&]/g, this.promptChar);\n if (!isNullOrUndefined(this.customCharacters)) {\n for (var i = 0; i < this.promptMask.length; i++) {\n if (!isNullOrUndefined(this.customCharacters[this.promptMask[i]])) {\n this.promptMask = this.promptMask.replace(new RegExp(this.promptMask[i], 'g'), this.promptChar);\n }\n }\n }\n var escapeNumber = 0;\n if (this.hiddenMask.match(new RegExp(/\\\\/))) {\n for (var i = 0; i < this.hiddenMask.length; i++) {\n var j = 0;\n if (i >= 2) {\n j = i;\n }\n escapeNumber = this.hiddenMask.length - this.promptMask.length;\n j = j - escapeNumber;\n if ((i > 0 && this.hiddenMask[i - 1] !== '\\\\') && (this.hiddenMask[i] === '>' ||\n this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|')) {\n this.promptMask = this.promptMask.substring(0, j) +\n this.promptMask.substring((i + 1) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) +\n this.escapeMaskValue.substring((i + 1) - escapeNumber, this.escapeMaskValue.length);\n }\n if (this.hiddenMask[i] === '\\\\') {\n this.promptMask = this.promptMask.substring(0, j) + this.hiddenMask[i + 1] +\n this.promptMask.substring((i + 2) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) + this.escapeMaskValue[i + 1] +\n this.escapeMaskValue.substring((i + 2) - escapeNumber, this.escapeMaskValue.length);\n }\n }\n }\n else {\n this.promptMask = this.promptMask.replace(/[>|<]/g, '');\n this.escapeMaskValue = this.hiddenMask.replace(/[>|<]/g, '');\n }\n attributes(this.element, { 'aria-invalid': 'false' });\n }\n}\n/**\n * @hidden\n * Apply mask ability with masking elements to the MaskedTextBox.\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * @hidden\n * To wire required events to the MaskedTextBox.\n */\nexport function wireEvents() {\n EventHandler.add(this.element, 'keydown', maskInputKeyDownHandler, this);\n EventHandler.add(this.element, 'keypress', maskInputKeyPressHandler, this);\n EventHandler.add(this.element, 'keyup', maskInputKeyUpHandler, this);\n EventHandler.add(this.element, 'input', maskInputHandler, this);\n EventHandler.add(this.element, 'focus', maskInputFocusHandler, this);\n EventHandler.add(this.element, 'blur', maskInputBlurHandler, this);\n EventHandler.add(this.element, 'paste', maskInputPasteHandler, this);\n EventHandler.add(this.element, 'cut', maskInputCutHandler, this);\n EventHandler.add(this.element, 'drop', maskInputDropHandler, this);\n if (this.enabled) {\n bindClearEvent.call(this);\n }\n}\n/**\n * @hidden\n * To unwire events attached to the MaskedTextBox.\n */\nexport function unwireEvents() {\n EventHandler.remove(this.element, 'keydown', maskInputKeyDownHandler);\n EventHandler.remove(this.element, 'keypress', maskInputKeyPressHandler);\n EventHandler.remove(this.element, 'keyup', maskInputKeyUpHandler);\n EventHandler.remove(this.element, 'input', maskInputHandler);\n EventHandler.remove(this.element, 'focus', maskInputFocusHandler);\n EventHandler.remove(this.element, 'blur', maskInputBlurHandler);\n EventHandler.remove(this.element, 'paste', maskInputPasteHandler);\n EventHandler.remove(this.element, 'cut', maskInputCutHandler);\n}\n/**\n * @hidden\n * To bind required events to the MaskedTextBox clearButton.\n */\nexport function bindClearEvent() {\n if (this.showClearButton) {\n EventHandler.add(this.inputObj.clearButton, 'mousedown touchstart', resetHandler, this);\n }\n}\nfunction resetHandler(e) {\n e.preventDefault();\n if (!this.inputObj.clearButton.classList.contains('e-clear-icon-hide')) {\n clear.call(this, e);\n }\n}\nfunction clear(event) {\n var value = this.element.value;\n setElementValue.call(this, this.promptMask);\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, value);\n this.element.setSelectionRange(0, 0);\n}\n/**\n * @hidden\n * To get masked value from the MaskedTextBox.\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * @hidden\n * To extract raw value from the MaskedTextBox.\n */\nexport function strippedValue(element, maskValues) {\n var value = '';\n var k = 0;\n var checkMask = false;\n var maskValue = (!isNullOrUndefined(maskValues)) ? maskValues : (!isNullOrUndefined(element) &&\n !isNullOrUndefined(this)) ? element.value : maskValues;\n if (maskValue !== this.promptMask) {\n for (var i = 0; i < this.customRegExpCollec.length; i++) {\n if (checkMask) {\n checkMask = false;\n }\n if (this.customRegExpCollec[k] === '>' || this.customRegExpCollec[k] === '<' ||\n this.customRegExpCollec[k] === '|' || this.customRegExpCollec[k] === '\\\\') {\n --i;\n checkMask = true;\n }\n if (!checkMask) {\n if ((maskValue[i] !== this.promptChar) && (!isNullOrUndefined(this.customRegExpCollec[k]) &&\n ((!isNullOrUndefined(this.regExpCollec[this.customRegExpCollec[k]])) ||\n (this.customRegExpCollec[k].length > 2 && this.customRegExpCollec[k][0] === '[' &&\n this.customRegExpCollec[k][this.customRegExpCollec[k].length - 1] === ']') ||\n (!isNullOrUndefined(this.customCharacters) &&\n (!isNullOrUndefined(this.customCharacters[this.customRegExpCollec[k]]))))) && (maskValue !== '')) {\n value += maskValue[i];\n }\n }\n ++k;\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n value = maskValue;\n }\n return value;\n}\nfunction pushIntoRegExpCollec(value) {\n for (var k = 0; k < value.length; k++) {\n this.hiddenMask += value[k];\n if (value[k] !== '\\\\') {\n this.customRegExpCollec.push(value[k]);\n }\n }\n}\nexport function maskInputFocusHandler(event) {\n var _this = this;\n if (this.promptMask.length > 0) {\n this.focusEventArgs = { selectionStart: 0, selectionEnd: this.promptMask.length };\n }\n else {\n this.focusEventArgs = { selectionStart: 0, selectionEnd: this.element.value.length };\n }\n var eventArgs = {};\n merge(eventArgs, this.focusEventArgs);\n this.trigger('focus', eventArgs);\n this.focusEventArgs = eventArgs;\n if (this.mask) {\n this.isFocus = true;\n if (this.element.value === '') {\n setElementValue.call(this, this.promptMask);\n }\n else {\n setElementValue.call(this, this.element.value);\n }\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(this.focusEventArgs.selectionStart, this.focusEventArgs.selectionEnd);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 450 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(_this.focusEventArgs.selectionStart, _this.focusEventArgs.selectionEnd);\n }, delay);\n }\n }\n}\nexport function maskInputBlurHandler(event) {\n if (this.mask) {\n this.isFocus = false;\n if (this.placeholder && this.element.value === this.promptMask && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.floatLabelType === 'Auto' && !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL)) {\n removeClass([labelElement], TOPLABEL);\n }\n }\n }\n}\nfunction maskInputPasteHandler(event) {\n var _this = this;\n if (this.mask) {\n var sIndex_1 = this.element.selectionStart;\n var eIndex_1 = this.element.selectionEnd;\n var oldValue_1 = this.element.value;\n setElementValue.call(this, '');\n this._callPasteHandler = true;\n setTimeout(function () {\n var value = _this.element.value.replace(/ /g, '');\n if (_this.redoCollec.length > 0 && _this.redoCollec[0].value === _this.element.value) {\n value = strippedValue.call(_this, _this.element);\n }\n setElementValue.call(_this, oldValue_1);\n _this.element.selectionStart = sIndex_1;\n _this.element.selectionEnd = eIndex_1;\n var i = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i], false, null);\n ++i;\n } while (i < value.length);\n _this.maskKeyPress = false;\n _this._callPasteHandler = false;\n if (_this.element.value === oldValue_1) {\n var i_1 = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i_1], false, null);\n ++i_1;\n } while (i_1 < value.length);\n _this.maskKeyPress = false;\n }\n else {\n triggerMaskChangeEvent.call(_this, event, oldValue_1);\n }\n }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask) {\n var preValue_1 = this.element.value;\n var sIndex_2 = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd });\n var value_1 = this.element.value.substring(0, sIndex_2) + this.promptMask.substring(sIndex_2, eIndex) +\n this.element.value.substring(eIndex);\n setTimeout(function () {\n setElementValue.call(_this, value_1);\n _this.element.selectionStart = _this.element.selectionEnd = sIndex_2;\n if (_this.element.value !== preValue_1) {\n triggerMaskChangeEvent.call(_this, event, null);\n }\n }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputHandler(event) {\n if (Browser.isIE === true && this.element.value === '' && this.floatLabelType === 'Never') {\n return;\n }\n var eventArgs = { ctrlKey: false, keyCode: 229 };\n // tslint:disable-next-line\n extend(event, eventArgs);\n if (this.mask) {\n if (this.element.value === '') {\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (!this._callPasteHandler) {\n removeMaskInputValues.call(this, event);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var value = this.element.value.substring(startIndex - addedValues, startIndex);\n this.maskKeyPress = false;\n var i = 0;\n do {\n validateValue.call(this, value[i], event.ctrlKey, event);\n ++i;\n } while (i < value.length);\n if (this.element.value !== this.preEleVal) {\n triggerMaskChangeEvent.call(this, event, null);\n }\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (val === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(0, 0);\n }\n }\n}\nfunction maskInputKeyDownHandler(event) {\n if (this.mask) {\n var value = this;\n if (event.keyCode !== 229) {\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n event.preventDefault();\n }\n removeMaskInputValues.call(this, event);\n }\n var startValue = this.element.value;\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n var collec = void 0;\n if (event.keyCode === 90 && this.undoCollec.length > 0 && startValue !== this.undoCollec[this.undoCollec.length - 1].value) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.undoCollec.splice(this.undoCollec.length - 1, 1);\n }\n else if (event.keyCode === 89 && this.redoCollec.length > 0 && startValue !== this.redoCollec[0].value) {\n collec = this.redoCollec[0];\n this.undoCollec.push({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.redoCollec.splice(0, 1);\n }\n }\n }\n}\nexport function mobileRemoveFunction() {\n var collec;\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n collec = this.redoCollec[0];\n setElementValue.call(this, collec.value);\n if ((collec.startIndex - sIndex) === 1) {\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n }\n else {\n this.element.selectionStart = sIndex + 1;\n this.element.selectionEnd = eIndex + 1;\n }\n }\n else {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n }\n}\nfunction autoFillMaskInputValues(isRemove, oldEventVal, event) {\n if (event.type === 'input') {\n isRemove = false;\n oldEventVal = this.element.value;\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, oldEventVal);\n }\n return isRemove;\n}\nfunction removeMaskInputValues(event) {\n var isRemove = false;\n var oldEventVal;\n var isDeleted = false;\n if (this.element.value.length < this.promptMask.length) {\n isRemove = true;\n oldEventVal = this.element.value;\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n mobileRemoveFunction.call(this);\n }\n if (this.element.value.length >= this.promptMask.length && event.type === 'input') {\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n }\n var initStartIndex = this.element.selectionStart;\n var initEndIndex = this.element.selectionEnd;\n var startIndex = this.element.selectionStart;\n var endIndex = this.element.selectionEnd;\n var maskValue = this.hiddenMask.replace(/[>|\\\\<]/g, '');\n var curMask = maskValue[startIndex - 1];\n var parentElement = this.element.parentNode;\n if (isRemove || event.keyCode === 8 || event.keyCode === 46) {\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: endIndex });\n var multipleDel = false;\n var preValue = this.element.value;\n if (startIndex > 0 || ((event.keyCode === 8 || event.keyCode === 46) && startIndex < this.element.value.length\n && ((this.element.selectionEnd - startIndex) !== this.element.value.length))) {\n var index = startIndex;\n if (startIndex !== endIndex) {\n startIndex = endIndex;\n if (event.keyCode === 46) {\n multipleDel = true;\n }\n }\n else if (event.keyCode === 46) {\n ++index;\n }\n else {\n --index;\n }\n for (var k = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? k > index : k < index; (event.keyCode === 8 || isRemove || multipleDel) ? k-- : k++) {\n for (var i = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? i > 0 : i < this.element.value.length; (event.keyCode === 8 || isRemove || multipleDel) ? i-- : i++) {\n var sIndex = void 0;\n if (((event.keyCode === 8 || multipleDel) && ((initStartIndex !== initEndIndex && initStartIndex !== startIndex) ||\n (initStartIndex === initEndIndex))) || isRemove) {\n curMask = maskValue[i - 1];\n sIndex = startIndex - 1;\n }\n else {\n curMask = maskValue[i];\n sIndex = startIndex;\n ++startIndex;\n }\n var oldValue = this.element.value[sIndex];\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (!isNullOrUndefined(this.customCharacters)\n && isNullOrUndefined(this.customCharacters[curMask]))\n && ((this.hiddenMask[sIndex] !== this.promptChar && this.customRegExpCollec[sIndex][0] !== '['\n && this.customRegExpCollec[sIndex][this.customRegExpCollec[sIndex].length - 1] !== ']')))\n || (this.promptMask[sIndex] !== this.promptChar && isNullOrUndefined(this.customCharacters))) {\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n ++this.element.selectionStart;\n }\n }\n else {\n var value = this.element.value;\n var prompt_1 = this.promptChar;\n var elementValue = value.substring(0, sIndex) + prompt_1 + value.substring(startIndex, value.length);\n setElementValue.call(this, elementValue);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n isDeleted = true;\n }\n startIndex = this.element.selectionStart;\n if ((!isDeleted && event.keyCode === 8) || multipleDel || (!isDeleted && !(event.keyCode === 46))) {\n sIndex = startIndex - 1;\n }\n else {\n sIndex = startIndex;\n isDeleted = false;\n }\n oldValue = this.element.value[sIndex];\n if (((initStartIndex !== initEndIndex) && (this.element.selectionStart === initStartIndex))\n || (this.promptMask[sIndex] === this.promptChar) || ((oldValue !== this.promptMask[sIndex]) &&\n (this.promptMask[sIndex] !== this.promptChar) && !isNullOrUndefined(this.customCharacters))) {\n break;\n }\n }\n }\n }\n if (this.element.selectionStart === 0 && (this.element.selectionEnd === this.element.value.length)) {\n setElementValue.call(this, this.promptMask);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = startIndex;\n }\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n if (this.element.value !== preValue) {\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n}\nfunction maskInputKeyPressHandler(event) {\n if (this.mask) {\n var oldValue = this.element.value;\n if ((!event.ctrlKey) || (event.ctrlKey && event.code !== 'KeyA' && event.code !== 'KeyY'\n && event.code !== 'KeyZ' && event.code !== 'KeyX' && event.code !== 'KeyC' && event.code !== 'KeyV')) {\n this.maskKeyPress = true;\n var key = event.key;\n if (key === 'Spacebar') {\n key = String.fromCharCode(event.keyCode);\n }\n if (!key) {\n this.isIosInvalid = true;\n validateValue.call(this, String.fromCharCode(event.keyCode), event.ctrlKey, event);\n event.preventDefault();\n this.isIosInvalid = false;\n }\n else if (key && key.length === 1) {\n validateValue.call(this, key, event.ctrlKey, event);\n event.preventDefault();\n }\n if (event.keyCode === 32 && key === ' ' && this.promptChar === ' ') {\n this.element.selectionStart = this.element.selectionEnd = this.element.selectionStart - key.length;\n }\n }\n if (this.element.value !== oldValue) {\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n }\n}\nfunction triggerMaskChangeEvent(event, oldValue) {\n if (!isNullOrUndefined(this.changeEventArgs) && !this.isInitial) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n merge(eventArgs, this.changeEventArgs);\n this.trigger('change', eventArgs);\n }\n this.preEleVal = this.element.value;\n this.prevValue = strippedValue.call(this, this.element);\n attributes(this.element, { 'aria-valuenow': this.element.value });\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask) {\n var collec = void 0;\n var key = event.key;\n if (key && key.length === 1 && this.floatLabelType === 'Never' && this.undoCollec.length > 0) {\n if (this.undoCollec[this.undoCollec.length - 1].value === this.element.value) {\n validateValue.call(this, key, event.ctrlKey, event);\n }\n }\n if (!this.maskKeyPress && event.keyCode === 229) {\n var oldEventVal = void 0;\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var val_1 = this.element.value.substring(startIndex - addedValues, startIndex);\n if (this.undoCollec.length > 0) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n var startIndex_1 = this.element.selectionStart;\n oldEventVal = collec.value;\n var oldVal = collec.value.substring(startIndex_1 - addedValues, startIndex_1);\n collec = this.redoCollec[0];\n val_1 = val_1.trim();\n var isSpace = Browser.isAndroid && val_1 === '';\n if (!isSpace && oldVal !== val_1 && collec.value.substring(startIndex_1 - addedValues, startIndex_1) !== val_1) {\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n else if (isSpace) {\n preventUnsupportedValues.call(this, event, startIndex_1 - 1, this.element.selectionEnd - 1, val_1, event.ctrlKey, false);\n }\n }\n else {\n oldEventVal = this.promptMask;\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n this.maskKeyPress = false;\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n else {\n removeMaskError.call(this);\n }\n var val = strippedValue.call(this, this.element);\n if (!((this.element.selectionStart === 0) && (this.promptMask === this.element.value) && val === '')\n || (val === '' && this.value !== val)) {\n this.prevValue = val;\n this.value = val;\n }\n }\n else {\n triggerMaskChangeEvent.call(this, event);\n this.value = this.element.value;\n }\n if (this.element.selectionStart === 0 && this.element.selectionEnd === 0) {\n // tslint:disable-next-line\n var temp_1 = this.element;\n setTimeout(function () {\n temp_1.setSelectionRange(0, 0);\n }, 0);\n }\n}\nfunction mobileSwipeCheck(key) {\n if (key.length > 1 && ((this.promptMask.length + key.length) < this.element.value.length)) {\n var elementValue = this.redoCollec[0].value.substring(0, this.redoCollec[0].startIndex) + key +\n this.redoCollec[0].value.substring(this.redoCollec[0].startIndex, this.redoCollec[0].value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = this.redoCollec[0].startIndex + key.length;\n }\n this.element.selectionStart = this.element.selectionStart - key.length;\n this.element.selectionEnd = this.element.selectionEnd - key.length;\n}\nfunction mobileValidation(key) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\n }\n}\nfunction validateValue(key, isCtrlKey, event) {\n mobileValidation.call(this, key);\n if (isNullOrUndefined(this) || isNullOrUndefined(key)) {\n return;\n }\n var startIndex = this.element.selectionStart;\n var initStartIndex = startIndex;\n var endIndex = this.element.selectionEnd;\n var curMask;\n var allowText = false;\n var value = this.element.value;\n var eventOldVal;\n var prevSupport = false;\n var isEqualVal = false;\n for (var k = 0; k < key.length; k++) {\n var keyValue = key[k];\n startIndex = this.element.selectionStart;\n endIndex = this.element.selectionEnd;\n if (!this.maskKeyPress && initStartIndex === startIndex) {\n startIndex = startIndex + k;\n }\n if ((!this.maskKeyPress || startIndex < this.promptMask.length)) {\n for (var i = startIndex; i < this.promptMask.length; i++) {\n var maskValue = this.escapeMaskValue;\n curMask = maskValue[startIndex];\n if (this.hiddenMask[startIndex] === '\\\\' && this.hiddenMask[startIndex + 1] === key) {\n isEqualVal = true;\n }\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (isNullOrUndefined(this.customCharacters)\n || (!isNullOrUndefined(this.customCharacters) && isNullOrUndefined(this.customCharacters[curMask])))\n && ((this.hiddenMask[startIndex] !== this.promptChar && this.customRegExpCollec[startIndex][0] !== '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] !== ']')))\n || ((this.promptMask[startIndex] !== this.promptChar) && isNullOrUndefined(this.customCharacters))\n || (this.promptChar === curMask && this.escapeMaskValue === this.mask)) {\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n startIndex = this.element.selectionStart;\n curMask = this.hiddenMask[startIndex];\n }\n }\n if (!isNullOrUndefined(this.customCharacters) && !isNullOrUndefined(this.customCharacters[curMask])) {\n var customValStr = this.customCharacters[curMask];\n var customValArr = customValStr.split(',');\n for (var i = 0; i < customValArr.length; i++) {\n if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\n }\n else if (!isNullOrUndefined(this.regExpCollec[curMask]) && keyValue.match(new RegExp(this.regExpCollec[curMask]))\n && this.promptMask[startIndex] === this.promptChar) {\n allowText = true;\n }\n else if (this.promptMask[startIndex] === this.promptChar && this.customRegExpCollec[startIndex][0] === '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] === ']'\n && keyValue.match(new RegExp(this.customRegExpCollec[startIndex]))) {\n allowText = true;\n }\n if ((!this.maskKeyPress || startIndex < this.hiddenMask.length) && allowText) {\n if (k === 0) {\n if (this.maskKeyPress) {\n this.undoCollec.push({ value: value, startIndex: startIndex, endIndex: startIndex });\n }\n else {\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n eventOldVal = this.redoCollec[0].value;\n setElementValue.call(this, eventOldVal);\n this.undoCollec.push(this.redoCollec[0]);\n }\n else {\n this.undoCollec.push({ value: this.promptMask, startIndex: startIndex, endIndex: startIndex });\n eventOldVal = this.promptMask;\n setElementValue.call(this, eventOldVal);\n }\n this.element.selectionStart = sIndex;\n this.element.selectionEnd = eIndex;\n }\n }\n startIndex = this.element.selectionStart;\n applySupportedValues.call(this, event, startIndex, keyValue, eventOldVal, isEqualVal);\n prevSupport = true;\n if (k === key.length - 1) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n allowText = false;\n }\n else {\n startIndex = this.element.selectionStart;\n preventUnsupportedValues.call(this, event, startIndex, initStartIndex, key, isCtrlKey, prevSupport);\n }\n if (k === key.length - 1 && !allowText) {\n if (!Browser.isAndroid || (Browser.isAndroid && startIndex < this.promptMask.length)) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n }\n }\n else {\n if (key.length === 1 && !isCtrlKey && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n }\n }\n}\nfunction applySupportedValues(event, startIndex, keyValue, eventOldVal, isEqualVal) {\n if (this.hiddenMask.length > this.promptMask.length) {\n keyValue = changeToLowerUpperCase.call(this, keyValue, this.element.value);\n }\n if (!isEqualVal) {\n var value = this.element.value;\n var elementValue = value.substring(0, startIndex) + keyValue + value.substring(startIndex + 1, value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n }\n}\nfunction preventUnsupportedValues(event, sIdx, idx, key, ctrl, chkSupport) {\n if (!this.maskKeyPress) {\n var eventOldVal = void 0;\n var value = this.element.value;\n if (sIdx >= this.promptMask.length) {\n setElementValue.call(this, value.substring(0, sIdx));\n }\n else {\n if (idx === sIdx) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx + 1, value.length));\n }\n else {\n if (this.promptMask.length === this.element.value.length) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx, value.length));\n }\n else {\n setElementValue.call(this, value.substring(0, idx) + value.substring(idx + 1, value.length));\n }\n }\n this.element.selectionStart = this.element.selectionEnd = (chkSupport ||\n this.element.value[idx] !== this.promptChar) ? sIdx : idx;\n }\n eventOldVal = this.element.value;\n addMaskErrorClass.call(this);\n }\n if (key.length === 1 && !ctrl && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n}\nfunction addMaskErrorClass() {\n var _this = this;\n var parentElement = this.element.parentNode;\n var timer = 200;\n if (parentElement.classList.contains(INPUTGROUP) || parentElement.classList.contains(FLOATINPUT)) {\n addClass([parentElement], ERROR);\n }\n else {\n addClass([this.element], ERROR);\n }\n if (this.isIosInvalid === true) {\n timer = 400;\n }\n attributes(this.element, { 'aria-invalid': 'true' });\n setTimeout(function () {\n if (!_this.maskKeyPress) {\n removeMaskError.call(_this);\n }\n }, timer);\n}\nfunction removeMaskError() {\n var parentElement = this.element.parentNode;\n removeClass([parentElement], ERROR);\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * @hidden\n * Validates user input using masking elements '<' , '>' and '|'.\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var j = 0;\n var curVal = value;\n var caseCount = 0;\n for (i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === '\\\\') {\n promptMask = curVal.substring(0, i) + '\\\\' + curVal.substring(i, curVal.length);\n }\n if (this.hiddenMask[i] === '>' || this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|') {\n if (this.hiddenMask[i] !== curVal[i]) {\n promptMask = curVal.substring(0, i) + this.hiddenMask[i] + curVal.substring(i, curVal.length);\n }\n ++caseCount;\n }\n if (promptMask) {\n if (((promptMask[i] === this.promptChar) && (i > this.element.selectionStart)) ||\n (this.element.value.indexOf(this.promptChar) < 0 && (this.element.selectionStart + caseCount) === i)) {\n caseCount = 0;\n break;\n }\n curVal = promptMask;\n }\n }\n while (i >= 0 && promptMask) {\n if (i === 0 || promptMask[i - 1] !== '\\\\') {\n var val = this.element.value;\n if (promptMask[i] === '>') {\n key = key.toUpperCase();\n break;\n }\n else if (promptMask[i] === '<') {\n key = key.toLowerCase();\n break;\n }\n else if (promptMask[i] === '|') {\n break;\n }\n }\n --i;\n }\n return key;\n}\n/**\n * @hidden\n * To set updated values in the MaskedTextBox.\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (this.prevValue === undefined || this.prevValue !== val)) {\n this.maskKeyPress = true;\n if (val === null && this.floatLabelType === 'Never' && this.placeholder) {\n setElementValue.call(this, this.promptMask);\n }\n else if (val !== '') {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n if (val !== null) {\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\n }\n var newVal = strippedValue.call(this, this.element);\n this.prevValue = newVal;\n this.value = newVal;\n triggerMaskChangeEvent.call(this, null, null);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' && this.placeholder &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n}\n/**\n * @hidden\n * To set updated values in the input element.\n */\nexport function setElementValue(val, element) {\n if (!this.isFocus && this.floatLabelType === 'Auto' && this.placeholder && isNullOrUndefined(this.value)) {\n val = '';\n }\n var value = strippedValue.call(this, (element ? element : this.element), val);\n if (value === null || value === '') {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, false);\n if (this.showClearButton) {\n this.inputObj.clearButton.classList.add('e-clear-icon-hide');\n }\n }\n else {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n }\n}\n/**\n * @hidden\n * Provide mask support to input textbox through utility method.\n */\nexport function maskInput(args) {\n var inputEle = getMaskInput(args);\n applyMask.call(inputEle);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (args.mask) {\n unwireEvents.call(inputEle);\n wireEvents.call(inputEle);\n }\n}\nfunction getMaskInput(args) {\n addClass([args.element], UTILMASK);\n var inputEle = {\n element: args.element,\n mask: args.mask,\n promptMask: '',\n hiddenMask: '',\n escapeMaskValue: '',\n promptChar: args.promptChar ? (args.promptChar.length > 1) ? args.promptChar = args.promptChar[0]\n : args.promptChar : '_',\n value: args.value ? args.value : null,\n regExpCollec: regularExpressions,\n customRegExpCollec: [],\n customCharacters: args.customCharacters,\n undoCollec: [],\n redoCollec: [],\n maskKeyPress: false,\n prevValue: ''\n };\n createMask.call(inputEle);\n return inputEle;\n}\n/**\n * @hidden\n * Gets raw value of the textbox which has been masked through utility method.\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * @hidden\n * Gets masked value of the textbox which has been masked through utility method.\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var value = '';\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * @hidden\n * Arguments to perform undo and redo functionalities.\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\nvar maskUndo = new MaskUndo();\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, extend, deleteObject, Property } from '@syncfusion/ej2-base';\n/**\n * @param props\n * @param model\n */\nexport function getModel(props, model) {\n var obj = extend({}, props);\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((model).indexOf(prop) < 0) {\n deleteObject(obj, prop);\n }\n }\n return obj;\n}\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"separator\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"url\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n","import { extend, merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper'\n};\n/**\n * Base List Generator\n */\nexport var ListBase;\n(function (ListBase) {\n /**\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right'\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n * @param {{[key:string]:Object}[]|string[]} dataSource - Specifies an array of JSON or String data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, options, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options);\n }\n else {\n return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListFromArray(createElement, dataSource, isSingleLevel, options) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListItemFromArray(createElement, dataSource, isSingleLevel, options) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n // tslint:disable-next-line:max-func-body-length\n function createListItemFromJson(createElement, dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData.id;\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n if (isSingleLevel === true) {\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n && !curOpt.template) {\n var attr = { src: fieldData[fields.imageUrl] };\n merge(attr, fieldData[fields.imageAttributes]);\n prepend([createElement('img', { className: cssClass.image, attrs: attr })], li.firstElementChild);\n }\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) &&\n !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n prepend([createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] })], li.firstElementChild);\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createListFromJson(createElement, dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel);\n return generateUL(createElement, li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]|NodeList} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n * @param {{[key:string]:Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder='None'} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var cusQuery = new Query().group(curFields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[curFields.text] = ds[j].key;\n grpItem[hdr] = true;\n grpItem.id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query=new Query()} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // tslint:disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n var attributes_1 = getAllAttributes(li);\n if (attributes_1.id) {\n json[fields.id] = attributes_1.id;\n delete attributes_1.id;\n }\n else {\n json[fields.id] = generateId();\n }\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function renderContentTemplate(createElement, template, dataSource, fields, options) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var compiledString = compile(template);\n var liCollection = [];\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], curFields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n var value = fieldData[curFields.value];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], curFields);\n value = fieldData[curFields.value];\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n li.innerText = fieldData[curFields.text];\n }\n else {\n append(compiledString(curItem), li);\n li.setAttribute('data-value', value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, headerItems) {\n var compiledString = compile(groupTemplate);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var category = curFields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[category] = header.textContent;\n header.innerHTML = '';\n append(compiledString(headerData), header);\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n // Get SubList\n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(createElement, subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n if (!isNullOrUndefined(value)) {\n li.setAttribute('data-value', value);\n }\n li.setAttribute('role', 'option');\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length) {\n append(innerElements, li);\n }\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n li.appendChild(anchorTag(createElement, dataSource, fields, text));\n }\n else {\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper'\n };\n }\n function anchorTag(createElement, dataSource, fields, text) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n attr.href = fieldData[fields.url] ? fieldData[fields.url] :\n fieldData[fields.urlAttributes].href;\n }\n var anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n /* tslint:disable:align */\n function generateLI(createElement, item, fieldData, fields, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = fieldData[fields.text] || '';\n uID = fieldData[fields.id];\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n !isNullOrUndefined(uID) ? li.setAttribute('data-uid', uID) : li.setAttribute('data-uid', generateId());\n if (grpLI && options && options.groupTemplate) {\n var compiledString = compile(options.groupTemplate);\n append(compiledString(item), li);\n }\n else if (!grpLI && options && options.template) {\n var compiledString = compile(options.template);\n append(compiledString(item), li);\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text));\n }\n else {\n innerDiv.appendChild(createElement('span', {\n className: cssClass.text, innerHTML: text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n }));\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n * @param {string} className? - Specifies class name that need to be added in UL element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n * @param {liElement} liElement - Specifies LI element.\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n * @param {{[key:string]:Object}|string[]|string} dataSource - Specifies an JSON or String data.\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[dataField] = value;\n }\n }\n }\n return fieldData;\n}\n","/**\n * Specifies Chart Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisTitleFont = {\n size: '14px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.chartTitleFont = {\n size: '15px',\n fontWeight: '500',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.chartSubTitleFont = {\n size: '11px',\n fontWeight: '500',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.crosshairLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.tooltipLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.stripLineLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#353535',\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getSeriesColor(theme) {\n var palette;\n switch (theme) {\n case 'Fabric':\n palette = ['#4472c4', '#ed7d31', '#ffc000', '#70ad47', '#5b9bd5',\n '#c1c1c1', '#6f6fe2', '#e269ae', '#9e480e', '#997300'];\n break;\n case 'Bootstrap':\n palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n break;\n case 'Highcontrast':\n palette = ['#79ECE4', '#E98272', '#DFE6B6', '#C6E773', '#BA98FF',\n '#FA83C3', '#00C27A', '#43ACEF', '#D681EF', '#D8BC6E'];\n break;\n default:\n palette = ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n break;\n }\n return palette;\n}\n/** @private */\nexport function getThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n axisLabel: '#ffffff',\n axisTitle: '#ffffff',\n axisLine: '#ffffff',\n majorGridLine: '#BFBFBF',\n minorGridLine: '#969696',\n majorTickLine: '#BFBFBF',\n minorTickLine: '#969696',\n chartTitle: '#ffffff',\n legendLabel: '#ffffff',\n background: '#000000',\n areaBorder: '#ffffff',\n errorBar: '#ffffff',\n crosshairLine: '#ffffff',\n crosshairFill: '#ffffff',\n crosshairLabel: '#000000',\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696',\n markerShadow: '#BFBFBF',\n selectionRectFill: 'rgba(255, 217, 57, 0.3)',\n selectionRectStroke: '#ffffff',\n selectionCircleStroke: '#FFD939'\n };\n break;\n default:\n style = {\n axisLabel: '#686868',\n axisTitle: '#424242',\n axisLine: '#b5b5b5',\n majorGridLine: '#dbdbdb',\n minorGridLine: '#eaeaea',\n majorTickLine: '#b5b5b5',\n minorTickLine: '#d6d6d6',\n chartTitle: '#424242',\n legendLabel: '#353535',\n background: '#FFFFFF',\n areaBorder: 'Gray',\n errorBar: '#000000',\n crosshairLine: '#4f4f4f',\n crosshairFill: '#4f4f4f',\n crosshairLabel: '#e5e5e5',\n tooltipFill: 'rgba(0, 8, 22, 0.75)',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff',\n markerShadow: null,\n selectionRectFill: 'rgba(41, 171, 226, 0.1)',\n selectionRectStroke: '#29abe2',\n selectionCircleStroke: '#29abe2'\n };\n break;\n }\n return style;\n}\n/** @private */\nexport function getScrollbarThemeColor(theme) {\n var scrollStyle;\n switch (theme) {\n case 'Highcontrast':\n scrollStyle = {\n backRect: '#333',\n thumb: '#bfbfbf',\n circle: '#fff',\n circleHover: '#685708',\n arrow: '#333',\n grip: '#333',\n arrowHover: '#fff',\n backRectBorder: '#969696',\n };\n break;\n case 'Bootstrap':\n scrollStyle = {\n backRect: '#f5f5f5',\n thumb: '#e6e6e6',\n circle: '#fff',\n circleHover: '#eee',\n arrow: '#8c8c8c',\n grip: '#8c8c8c'\n };\n break;\n case 'Fabric':\n scrollStyle = {\n backRect: '#f8f8f8',\n thumb: '#eaeaea',\n circle: '#fff',\n circleHover: '#eaeaea',\n arrow: '#a6a6a6',\n grip: '#a6a6a6'\n };\n break;\n default:\n scrollStyle = {\n backRect: '#f5f5f5',\n thumb: '#e0e0e0',\n circle: '#fff',\n circleHover: '#eee',\n arrow: '#9e9e9e',\n grip: '#9e9e9e'\n };\n break;\n }\n return scrollStyle;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { SvgRenderer, Animation, compile as templateComplier, Browser } from '@syncfusion/ej2-base';\nimport { merge, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { Index } from '../../common/model/base';\nimport { VisibleLabels } from '../../chart/axis/axis';\nimport { axisLabelRender } from '../model/constants';\n/**\n * Methods for calculating the text size.\n */\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('chartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'chartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Function to sort the dataSource, by default it sort the data in ascending order.\n * @param {Object} data\n * @param {string} fields\n * @param {boolean} isDescending\n * @returns Object\n */\nexport function sort(data, fields, isDescending) {\n var sortData = extend([], data, null);\n sortData.sort(function (a, b) {\n var first = 0;\n var second = 0;\n for (var i = 0; i < fields.length; i++) {\n first += a[fields[i]];\n second += b[fields[i]];\n }\n if ((!isDescending && first < second) || (isDescending && first > second)) {\n return -1;\n }\n else if (first === second) {\n return 0;\n }\n return 1;\n });\n return sortData;\n}\n/** @private */\nexport function rotateTextSize(font, text, angle, chart) {\n var renderer = new SvgRenderer(chart.element.id);\n var box;\n var options;\n var htmlObject;\n options = {\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'transform': 'rotate(' + angle + ', 0, 0)',\n 'text-anchor': 'middle'\n };\n htmlObject = renderer.createText(options, text);\n if (!chart.delayRedraw && !chart.redraw) {\n chart.element.appendChild(chart.svgObject);\n }\n chart.svgObject.appendChild(htmlObject);\n box = htmlObject.getBoundingClientRect();\n remove(htmlObject);\n if (!chart.delayRedraw && !chart.redraw) {\n remove(chart.svgObject);\n }\n return new Size((box.right - box.left), (box.bottom - box.top));\n}\n/** @private */\nexport function removeElement(id) {\n if (!id) {\n return null;\n }\n var element = typeof id === 'string' ? getElement(id) : id;\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function logBase(value, base) {\n return Math.log(value) / Math.log(base);\n}\n/** @private */\nexport function showTooltip(text, x, y, areaWidth, id, element, isTouch) {\n //let id1: string = 'EJ2_legend_tooltip';\n var tooltip = document.getElementById(id);\n var width = measureText(text, {\n fontFamily: 'Segoe UI', size: '12px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n }).width + 5;\n x = (x + width > areaWidth) ? x - width : x;\n if (!tooltip) {\n tooltip = createElement('div', {\n innerHTML: text,\n id: id,\n styles: 'top:' + (y + 15).toString() + 'px;left:' + (x + 15).toString() +\n 'px;background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(112, 112, 112); padding-left : 3px; padding-right : 2px;' +\n 'padding-bottom : 2px; padding-top : 2px; font-size:12px; font-family: \"Segoe UI\"'\n });\n element.appendChild(tooltip);\n }\n else {\n tooltip.innerHTML = text;\n tooltip.style.top = (y + 15).toString() + 'px';\n tooltip.style.left = (x + 15).toString() + 'px';\n }\n if (isTouch) {\n setTimeout(function () { removeElement(id); }, 1500);\n }\n}\n/** @private */\nexport function inside(value, range) {\n return (value < range.max) && (value > range.min);\n}\n/** @private */\nexport function withIn(value, range) {\n return (value <= range.max) && (value >= range.min);\n}\n/** @private */\nexport function logWithIn(value, axis) {\n if (axis.valueType === 'Logarithmic') {\n value = logBase(value, axis.logBase);\n }\n else {\n value = value;\n }\n return value;\n}\n/** @private */\nexport function withInRange(previousPoint, currentPoint, nextPoint, series) {\n var mX2 = logWithIn(currentPoint.xValue, series.xAxis);\n var mX1 = previousPoint ? logWithIn(previousPoint.xValue, series.xAxis) : mX2;\n var mX3 = nextPoint ? logWithIn(nextPoint.xValue, series.xAxis) : mX2;\n var xStart = Math.floor(series.xAxis.visibleRange.min);\n var xEnd = Math.ceil(series.xAxis.visibleRange.max);\n return ((mX1 >= xStart && mX1 <= xEnd) || (mX2 >= xStart && mX2 <= xEnd) ||\n (mX3 >= xStart && mX3 <= xEnd) || (xStart >= mX1 && xStart <= mX3));\n}\n/** @private */\nexport function sum(values) {\n var sum = 0;\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n sum += value;\n }\n return sum;\n}\n/** @private */\nexport function subArraySum(values, first, last, index, series) {\n var sum = 0;\n if (index !== null) {\n for (var i = (first + 1); i < last; i++) {\n if (index.indexOf(i) === -1) {\n sum += values[i][series.yName];\n }\n }\n }\n else {\n for (var i = (first + 1); i < last; i++) {\n if (!isNullOrUndefined(values[i][series.yName])) {\n sum += values[i][series.yName];\n }\n }\n }\n return sum;\n}\n/** @private */\nexport function subtractThickness(rect, thickness) {\n rect.x += thickness.left;\n rect.y += thickness.top;\n rect.width -= thickness.left + thickness.right;\n rect.height -= thickness.top + thickness.bottom;\n return rect;\n}\n/** @private */\nexport function subtractRect(rect, thickness) {\n rect.x += thickness.x;\n rect.y += thickness.y;\n rect.width -= thickness.x + thickness.width;\n rect.height -= thickness.y + thickness.height;\n return rect;\n}\n/** @private */\nexport function degreeToLocation(degree, radius, center) {\n var radian = (degree * Math.PI) / 180;\n return new ChartLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\nfunction getAccumulationLegend(locX, locY, r, height, width, mode) {\n var cartesianlarge = degreeToLocation(270, r, new ChartLocation(locX, locY));\n var cartesiansmall = degreeToLocation(270, r, new ChartLocation(locX + (width / 10), locY));\n return 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + ' ' + (locX + r) + ' ' + (locY) + ' ' + 'A' + ' ' + (r) + ' ' + (r) +\n ' ' + 0 + ' ' + 1 + ' ' + 1 + ' ' + cartesianlarge.x + ' ' + cartesianlarge.y + ' ' + 'Z' + ' ' + 'M' + ' ' + (locX +\n (width / 10)) + ' ' + (locY - (height / 10)) + ' ' + 'L' + (locX + (r)) + ' ' + (locY - height / 10) + ' ' + 'A' + ' '\n + (r) + ' ' + (r) + ' ' + 0 + ' ' + 0 + ' ' + 0 + ' ' + cartesiansmall.x + ' ' + cartesiansmall.y + ' ' + 'Z';\n}\n/** @private */\nexport function getAngle(center, point) {\n var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n angle = angle < 0 ? (6.283 + angle) : angle;\n return angle * (180 / Math.PI);\n}\n/** @private */\nexport function subArray(values, index) {\n var subArray = [];\n for (var i = 0; i <= index - 1; i++) {\n subArray.push(values[i]);\n }\n return subArray;\n}\n/** @private */\nexport function valueToCoefficient(value, axis) {\n var range = axis.visibleRange;\n var result = (value - range.min) / (range.delta);\n return axis.isInversed ? (1 - result) : result;\n}\n/** @private */\nexport function TransformToVisible(x, y, xAxis, yAxis, isInverted, series) {\n x = (xAxis.valueType === 'Logarithmic' ? logBase(x > 1 ? x : 1, xAxis.logBase) : x);\n y = (yAxis.valueType === 'Logarithmic' ?\n logBase(y > 1 ? y : 1, yAxis.logBase) : y);\n x += xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks' && series.type !== 'Radar' ? 0.5 : 0;\n var radius = series.chart.radius * valueToCoefficient(y, yAxis);\n var point = CoefficientToVector(valueToPolarCoefficient(x, xAxis), series.chart.primaryXAxis.startAngle);\n return {\n x: (series.clipRect.width / 2 + series.clipRect.x) + radius * point.x,\n y: (series.clipRect.height / 2 + series.clipRect.y) + radius * point.y\n };\n}\n/**\n * method to find series, point index by element id\n * @private\n */\nexport function indexFinder(id, isPoint) {\n if (isPoint === void 0) { isPoint = false; }\n var ids = ['NaN', 'NaN'];\n if (id.indexOf('_Point_') > -1) {\n ids = id.split('_Series_')[1].split('_Point_');\n }\n else if (id.indexOf('_shape_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n ids = id.split('_shape_');\n ids[0] = '0';\n }\n else if (id.indexOf('_text_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n ids = id.split('_text_');\n ids[0] = '0';\n }\n return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n}\n/** @private */\nexport function CoefficientToVector(coefficient, startAngle) {\n startAngle = startAngle < 0 ? startAngle + 360 : startAngle;\n var angle = Math.PI * (1.5 - 2 * coefficient);\n angle = angle + (startAngle * Math.PI) / 180;\n return { x: Math.cos(angle), y: Math.sin(angle) };\n}\n/** @private */\nexport function valueToPolarCoefficient(value, axis) {\n var range = axis.visibleRange;\n var delta;\n var length;\n if (axis.valueType !== 'Category') {\n delta = (range.max - (axis.valueType === 'DateTime' ? axis.dateTimeInterval : range.interval)) - range.min;\n length = axis.visibleLabels.length - 1;\n delta = delta === 0 ? 1 : delta;\n }\n else {\n delta = range.delta;\n length = axis.visibleLabels.length;\n }\n return axis.isInversed ? ((value - range.min) / delta) * (1 - 1 / (length)) :\n 1 - ((value - range.min) / delta) * (1 - 1 / (length));\n}\n/** @private */\nvar Mean = /** @class */ (function () {\n function Mean(verticalStandardMean, verticalSquareRoot, horizontalStandardMean, horizontalSquareRoot, verticalMean, horizontalMean) {\n this.verticalStandardMean = verticalStandardMean;\n this.horizontalStandardMean = horizontalStandardMean;\n this.verticalSquareRoot = verticalSquareRoot;\n this.horizontalSquareRoot = horizontalSquareRoot;\n this.verticalMean = verticalMean;\n this.horizontalMean = horizontalMean;\n }\n return Mean;\n}());\nexport { Mean };\n/** @private */\nvar PolarArc = /** @class */ (function () {\n function PolarArc(startAngle, endAngle, innerRadius, radius, currentXPosition) {\n this.startAngle = startAngle;\n this.endAngle = endAngle;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.currentXPosition = currentXPosition;\n }\n return PolarArc;\n}());\nexport { PolarArc };\n/** @private */\nexport function createTooltip(id, text, top, left, fontSize) {\n var tooltip = getElement(id);\n var style = 'top:' + top.toString() + 'px;' +\n 'left:' + left.toString() + 'px;' +\n 'color:black !important; ' +\n 'background:#FFFFFF !important; ' +\n 'position:absolute;border:1px solid #707070;font-size:' + fontSize + ';border-radius:2px;';\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id, innerHTML: ' ' + text + ' ', styles: style\n });\n document.body.appendChild(tooltip);\n }\n else {\n tooltip.setAttribute('innerHTML', ' ' + text + ' ');\n tooltip.setAttribute('styles', style);\n }\n}\n/** @private */\nexport function createZoomingLabels(chart, axis, parent, index, isVertical, rect) {\n var margin = 5;\n var opposedPosition = axis.opposedPosition;\n var anchor = isVertical ? 'start' : 'auto';\n var size;\n var chartRect = chart.availableSize.width;\n var x;\n var y;\n var rx = 3;\n var arrowLocation;\n var direction;\n var scrollBarHeight = axis.zoomingScrollBar && axis.zoomingScrollBar.svgObject ? axis.scrollBarHeight : 0;\n for (var i = 0; i < 2; i++) {\n size = measureText(i ? axis.endLabel : axis.startLabel, axis.labelStyle);\n if (isVertical) {\n arrowLocation = i ? new ChartLocation(rect.x - scrollBarHeight, rect.y + rx) :\n new ChartLocation(axis.rect.x - scrollBarHeight, (rect.y + rect.height - rx));\n x = (rect.x + (opposedPosition ? (rect.width + margin + scrollBarHeight) : -(size.width + margin + margin + scrollBarHeight)));\n y = (rect.y + (i ? 0 : rect.height - size.height - margin));\n x += (x < 0 || ((chartRect) < (x + size.width + margin))) ? (opposedPosition ? -(size.width / 2) : size.width / 2) : 0;\n direction = findDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, false, false, !opposedPosition, arrowLocation.x, arrowLocation.y + (i ? -rx : rx));\n }\n else {\n arrowLocation = i ? new ChartLocation((rect.x + rect.width - rx), (rect.y + rect.height + scrollBarHeight)) :\n new ChartLocation(rect.x + rx, (rect.y + rect.height + scrollBarHeight));\n x = (rect.x + (i ? (rect.width - size.width - margin) : 0));\n y = (opposedPosition ? (rect.y - size.height - 10 - scrollBarHeight) : (rect.y + rect.height + margin + scrollBarHeight));\n direction = findDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, opposedPosition, !opposedPosition, false, arrowLocation.x + (i ? rx : -rx), arrowLocation.y);\n }\n x = x + (margin / 2);\n y = y + (3 * (size.height / 4)) + (margin / 2);\n parent.appendChild(chart.renderer.drawPath(new PathOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_Shape_' + i, chart.themeStyle.crosshairFill, 2, chart.themeStyle.crosshairFill, 1, null, direction)));\n textElement(new TextOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_' + i, x, y, anchor, i ? axis.endLabel : axis.startLabel), { color: chart.themeStyle.crosshairLabel, fontFamily: 'Segoe UI', fontWeight: 'Regular', size: '11px' }, chart.themeStyle.crosshairLabel, parent);\n }\n return parent;\n}\n//Within bounds\n/** @private */\nexport function withInBounds(x, y, bounds, width, height) {\n if (width === void 0) { width = 0; }\n if (height === void 0) { height = 0; }\n return (x >= bounds.x - width && x <= bounds.x + bounds.width + width && y >= bounds.y - height\n && y <= bounds.y + bounds.height + height);\n}\n/** @private */\nexport function getValueXByPoint(value, size, axis) {\n var actualValue = !axis.isInversed ? value / size : (1 - (value / size));\n return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/** @private */\nexport function getValueYByPoint(value, size, axis) {\n var actualValue = axis.isInversed ? value / size : (1 - (value / size));\n return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/** @private */\nexport function findClipRect(series) {\n var rect = series.clipRect;\n if (series.chart.requireInvertedAxis) {\n rect.x = series.yAxis.rect.x;\n rect.y = series.xAxis.rect.y;\n rect.width = series.yAxis.rect.width;\n rect.height = series.xAxis.rect.height;\n }\n else {\n rect.x = series.xAxis.rect.x;\n rect.y = series.yAxis.rect.y;\n rect.width = series.xAxis.rect.width;\n rect.height = series.yAxis.rect.height;\n }\n}\n/** @private */\nexport function firstToLowerCase(str) {\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n}\n/** @private */\nexport function getMinPointsDelta(axis, seriesCollection) {\n var minDelta = Number.MAX_VALUE;\n var xValues;\n var minVal;\n var seriesMin;\n seriesCollection.forEach(function (series, index) {\n xValues = [];\n if (series.visible &&\n (axis.name === series.xAxisName || (axis.name === 'primaryXAxis' && series.xAxisName === null)\n || (axis.name === series.chart.primaryXAxis.name && !series.xAxisName))) {\n xValues = series.points.map(function (point, index) {\n return point.xValue;\n });\n xValues.sort(function (first, second) { return first - second; });\n if (xValues.length === 1) {\n seriesMin = (axis.valueType === 'DateTime' && series.xMin === series.xMax) ? (series.xMin - 2592000000) : series.xMin;\n minVal = xValues[0] - (!isNullOrUndefined(seriesMin) ?\n seriesMin : axis.visibleRange.min);\n if (minVal !== 0) {\n minDelta = Math.min(minDelta, minVal);\n }\n }\n else {\n xValues.forEach(function (value, index, xValues) {\n if (index > 0 && value) {\n minVal = value - xValues[index - 1];\n if (minVal !== 0) {\n minDelta = Math.min(minDelta, minVal);\n }\n }\n });\n }\n }\n });\n if (minDelta === Number.MAX_VALUE) {\n minDelta = 1;\n }\n return minDelta;\n}\n/** @private */\nexport function getAnimationFunction(effect) {\n var functionName;\n switch (effect) {\n case 'Linear':\n functionName = linear;\n break;\n }\n return functionName;\n}\n/**\n * Animation Effect Calculation Started Here\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function markerAnimate(element, delay, duration, series, pointIndex, point, isLabel) {\n var centerX = point.x;\n var centerY = point.y;\n var height = 0;\n element.style.visibility = 'hidden';\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n height = ((args.timeStamp - args.delay) / args.duration);\n element.setAttribute('transform', 'translate(' + centerX\n + ' ' + centerY + ') scale(' + height + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n },\n end: function (model) {\n element.style.visibility = '';\n element.removeAttribute('transform');\n if ((series.type === 'Scatter' || series.type === 'Bubble') && !isLabel && (pointIndex === series.points.length - 1)) {\n series.chart.trigger('animationComplete', { series: series });\n }\n }\n });\n}\n/**\n * Animation after legend click a path\n * @param element element to be animated\n * @param direction current direction of the path\n * @param previousDirection previous direction of the path\n */\nexport function pathAnimation(element, direction, redraw, previousDirection) {\n if (!redraw || (!previousDirection && !element)) {\n return null;\n }\n var startDirections = previousDirection || element.getAttribute('d');\n var splitDirections = startDirections.split(/(?=[LMCZAQ])/);\n var endDirections = direction.split(/(?=[LMCZAQ])/);\n var currentDireciton;\n var startPath = [];\n var endPath = [];\n var c;\n var end;\n element.setAttribute('d', startDirections);\n new Animation({}).animate(createElement('div'), {\n duration: 300,\n progress: function (args) {\n currentDireciton = '';\n splitDirections.map(function (directions, index) {\n startPath = directions.split(' ');\n endPath = endDirections[index].split(' ');\n if (startPath[0] === 'Z') {\n currentDireciton += 'Z' + ' ';\n }\n else {\n currentDireciton += startPath[0] + ' ' +\n linear(args.timeStamp, +startPath[1], (+endPath[1] - +startPath[1]), args.duration) + ' ' +\n linear(args.timeStamp, +startPath[2], (+endPath[2] - +startPath[2]), args.duration) + ' ';\n }\n if (startPath[0] === 'C' || startPath[0] === 'Q') {\n c = 3;\n end = startPath[0] === 'Q' ? 4 : 6;\n while (c < end) {\n currentDireciton += linear(args.timeStamp, +startPath[c], (+endPath[c] - +startPath[c]), args.duration) + ' ' +\n linear(args.timeStamp, +startPath[++c], (+endPath[c] - +startPath[c]), args.duration) + ' ';\n ++c;\n }\n }\n if (startPath[0] === 'A') {\n currentDireciton += 0 + ' ' + 0 + ' ' + 1 + ' ' +\n linear(args.timeStamp, +startPath[6], (+endPath[6] - +startPath[6]), args.duration) + ' ' +\n linear(args.timeStamp, +startPath[7], (+endPath[7] - +startPath[7]), args.duration) + ' ';\n }\n });\n element.setAttribute('d', currentDireciton);\n },\n end: function () {\n element.setAttribute('d', direction);\n }\n });\n}\n/**\n * To append the clip rect element\n * @param redraw\n * @param options\n * @param renderer\n * @param clipPath\n */\nexport function appendClipElement(redraw, options, renderer, clipPath) {\n if (clipPath === void 0) { clipPath = 'drawClipPath'; }\n var clipElement = redrawElement(redraw, options.id, options, renderer);\n if (clipElement) {\n var def = renderer.createDefs();\n def.appendChild(clipElement);\n return def;\n }\n else {\n return renderer[clipPath](options);\n }\n}\n/**\n * Triggers the event.\n * @return {void}\n * @private\n */\nexport function triggerLabelRender(chart, tempInterval, text, labelStyle, axis) {\n var argsData;\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: text, value: tempInterval, labelStyle: labelStyle\n };\n chart.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n var text_1 = (axis.enableTrim) ? textTrim(axis.maximumLabelWidth, argsData.text, axis.labelStyle) : argsData.text;\n axis.visibleLabels.push(new VisibleLabels(text_1, argsData.value, argsData.labelStyle, argsData.text));\n }\n}\n/**\n * The function used to find whether the range is set.\n * @return {boolean}\n * @private\n */\nexport function setRange(axis) {\n return (axis.minimum != null && axis.maximum != null);\n}\n/**\n * Calculate desired interval for the axis.\n * @return {void}\n * @private\n */\nexport function getActualDesiredIntervalsCount(availableSize, axis) {\n var size = axis.orientation === 'Horizontal' ? availableSize.width : availableSize.height;\n if (isNullOrUndefined(axis.desiredIntervals)) {\n var desiredIntervalsCount = (axis.orientation === 'Horizontal' ? 0.533 : 1) * axis.maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n }\n else {\n return axis.desiredIntervals;\n }\n}\n/**\n * Animation for template\n * @private\n */\nexport function templateAnimate(element, delay, duration, name, isRemove) {\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n name: name,\n progress: function (args) {\n args.element.style.visibility = 'visible';\n },\n end: function (args) {\n if (isRemove) {\n remove(args.element);\n }\n else {\n args.element.style.visibility = 'visible';\n }\n },\n });\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var functionName = 'Path';\n var renderer = new SvgRenderer('');\n var temp = calculateShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n htmlObject.setAttribute('aria-label', label);\n return htmlObject;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n case 'Hilo':\n case 'HiloOpenClose':\n case 'Candle':\n case 'Waterfall':\n case 'BoxAndWhisker':\n case 'StepArea':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pyramid':\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Funnel':\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n options = calculateLegendShapes(location, new Size(width, height), shape, options).renderOption;\n return { renderOption: options, functionName: functionName };\n}\n/** @private */\nexport function getRectLocation(startLocation, endLocation, outerRect) {\n var x;\n var y;\n x = (endLocation.x < outerRect.x) ? outerRect.x :\n (endLocation.x > (outerRect.x + outerRect.width)) ? outerRect.x + outerRect.width : endLocation.x;\n y = (endLocation.y < outerRect.y) ? outerRect.y :\n (endLocation.y > (outerRect.y + outerRect.height)) ? outerRect.y + outerRect.height : endLocation.y;\n return new Rect((x > startLocation.x ? startLocation.x : x), (y > startLocation.y ? startLocation.y : y), Math.abs(x - startLocation.x), Math.abs(y - startLocation.y));\n}\n/** @private */\nexport function minMax(value, min, max) {\n return value > max ? max : (value < min ? min : value);\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/** @private */\nexport function createTemplate(childElement, pointIndex, content, chart, point, series) {\n var templateFn;\n var templateElement;\n templateFn = getTemplateFunction(content);\n try {\n var elementData = templateFn ? templateFn({ chart: chart, series: series, point: point }) : [];\n if (elementData.length) {\n templateElement = Array.prototype.slice.call(elementData);\n var len = templateElement.length;\n for (var i = 0; i < len; i++) {\n childElement.appendChild(templateElement[i]);\n }\n }\n }\n catch (e) {\n return childElement;\n }\n return childElement;\n}\n/** @private */\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/** @private */\nexport function measureElementRect(element, redraw) {\n if (redraw === void 0) { redraw = false; }\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n if (redraw) {\n if (typeof element.remove === 'function') {\n element.remove();\n }\n else {\n element.parentNode.removeChild(element);\n }\n }\n else {\n removeElement(element.id);\n }\n return bounds;\n}\n/** @private */\nexport function findlElement(elements, id) {\n var element;\n for (var i = 0, length_1 = elements.length; i < length_1; i++) {\n if (elements[i].id.indexOf(id) > -1) {\n element = elements[i];\n continue;\n }\n }\n return element;\n}\n/** @private */\nexport function getPoint(x, y, xAxis, yAxis, isInverted, series) {\n x = ((xAxis.valueType === 'Logarithmic') ? logBase(((x > 1) ? x : 1), xAxis.logBase) : x);\n y = ((yAxis.valueType === 'Logarithmic') ? logBase(((y > 1) ? y : 1), yAxis.logBase) : y);\n x = valueToCoefficient(x, xAxis);\n y = valueToCoefficient(y, yAxis);\n var xLength = (isInverted ? xAxis.rect.height : xAxis.rect.width);\n var yLength = (isInverted ? yAxis.rect.width : yAxis.rect.height);\n var locationX = isInverted ? y * (yLength) : x * (xLength);\n var locationY = isInverted ? (1 - x) * (xLength) : (1 - y) * (yLength);\n return new ChartLocation(locationX, locationY);\n}\n/** @private */\nexport function appendElement(child, parent, redraw, animate, x, y) {\n if (redraw === void 0) { redraw = false; }\n if (animate === void 0) { animate = false; }\n if (x === void 0) { x = 'x'; }\n if (y === void 0) { y = 'y'; }\n if (child && child.hasChildNodes() && parent) {\n appendChildElement(parent, child, redraw, animate, x, y);\n }\n else {\n return null;\n }\n}\n/**\n * Method to append child element\n * @param parent\n * @param childElement\n * @param isReplace\n */\nexport function appendChildElement(parent, childElement, redraw, isAnimate, x, y, start, direction) {\n if (isAnimate === void 0) { isAnimate = false; }\n if (x === void 0) { x = 'x'; }\n if (y === void 0) { y = 'y'; }\n var existChild = parent.querySelector('#' + childElement.id);\n var element = (existChild || getElement(childElement.id));\n var child = childElement;\n if (redraw && isAnimate && element) {\n start = start || (element.tagName === 'DIV' ?\n new ChartLocation(+(element.style[x].split('px')[0]), +(element.style[y].split('px')[0])) :\n new ChartLocation(+element.getAttribute(x), +element.getAttribute(y)));\n if (direction && direction !== 'undefined') {\n pathAnimation(childElement, childElement.getAttribute('d'), redraw, direction);\n }\n else {\n var end = child.tagName === 'DIV' ?\n new ChartLocation(+(child.style[x].split('px')[0]), +(child.style[y].split('px')[0])) :\n new ChartLocation(+child.getAttribute(x), +child.getAttribute(y));\n animateRedrawElement(child, 300, start, end, x, y);\n }\n }\n if (existChild) {\n parent.replaceChild(child, element);\n }\n else {\n parent.appendChild(child);\n }\n}\n/** @private */\nexport function getDraggedRectLocation(x1, y1, x2, y2, outerRect) {\n var width = Math.abs(x1 - x2);\n var height = Math.abs(y1 - y2);\n var x = Math.max(checkBounds(Math.min(x1, x2), width, outerRect.x, outerRect.width), outerRect.x);\n var y = Math.max(checkBounds(Math.min(y1, y2), height, outerRect.y, outerRect.height), outerRect.y);\n return new Rect(x, y, Math.min(width, outerRect.width), Math.min(height, outerRect.height));\n}\n/** @private */\nexport function checkBounds(start, size, min, max) {\n if (start < min) {\n start = min;\n }\n else if ((start + size) > (max + min)) {\n start = (max + min) - size;\n }\n return start;\n}\n/** @private */\nexport function getLabelText(currentPoint, series, chart) {\n var labelFormat = series.yAxis.labelFormat;\n var text = [];\n var customLabelFormat = labelFormat.match('{value}') !== null;\n switch (series.seriesType) {\n case 'XY':\n text.push(currentPoint.text || currentPoint.yValue.toString());\n break;\n case 'HighLow':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n break;\n case 'HighLowOpenClose':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.max(currentPoint.open, currentPoint.close).toString());\n text.push(currentPoint.text || Math.min(currentPoint.open, currentPoint.close).toString());\n break;\n case 'BoxPlot':\n text.push(currentPoint.text || currentPoint.median.toString());\n text.push(currentPoint.text || currentPoint.maximum.toString());\n text.push(currentPoint.text || currentPoint.minimum.toString());\n text.push(currentPoint.text || currentPoint.upperQuartile.toString());\n text.push(currentPoint.text || currentPoint.lowerQuartile.toString());\n for (var _i = 0, _a = currentPoint.outliers; _i < _a.length; _i++) {\n var liers = _a[_i];\n text.push(currentPoint.text || liers.toString());\n }\n break;\n }\n if (labelFormat && !currentPoint.text) {\n for (var i = 0; i < text.length; i++) {\n text[i] = customLabelFormat ? labelFormat.replace('{value}', series.yAxis.format(parseFloat(text[i]))) :\n series.yAxis.format(parseFloat(text[i]));\n }\n }\n return text;\n}\n/** @private */\nexport function stopTimer(timer) {\n window.clearInterval(timer);\n}\n/** @private */\nexport function isCollide(rect, collections, clipRect) {\n var isCollide;\n var currentRect = new Rect(rect.x + clipRect.x, rect.y + clipRect.y, rect.width, rect.height);\n isCollide = collections.some(function (rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n });\n return isCollide;\n}\n/** @private */\nexport function isOverlap(currentRect, rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n}\n/** @private */\nexport function containsRect(currentRect, rect) {\n return (currentRect.x <= rect.x && currentRect.x + currentRect.width >= rect.x + rect.width &&\n currentRect.y <= rect.y && currentRect.height + currentRect.y >= rect.y + rect.height);\n}\n/** @private */\nexport function calculateRect(location, textSize, margin) {\n return new Rect((location.x - (textSize.width / 2) - margin.left), (location.y - (textSize.height / 2) - margin.top), textSize.width + margin.left + margin.right, textSize.height + margin.top + margin.bottom);\n}\n/** @private */\nexport function convertToHexCode(value) {\n return '#' + componentToHex(value.r) + componentToHex(value.g) + componentToHex(value.b);\n}\n/** @private */\nexport function componentToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/** @private */\nexport function convertHexToColor(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new ColorValue(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new ColorValue(255, 255, 255);\n}\n/** @private */\nexport function colorNameToHex(color) {\n var element;\n color = color === 'transparent' ? 'white' : color;\n document.body.appendChild(createElement('text', { id: 'chartmeasuretext' }));\n element = document.getElementById('chartmeasuretext');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n if (typeof element.remove === 'function') {\n element.remove();\n }\n else {\n element.parentNode.removeChild(element);\n }\n var exp = /^(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/;\n var isRGBValue = exp.exec(color);\n return convertToHexCode(new ColorValue(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\n}\n/** @private */\nexport function getSaturationColor(color, factor) {\n color = colorNameToHex(color);\n color = color.replace(/[^0-9a-f]/gi, '');\n if (color.length < 6) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n factor = factor || 0;\n // convert to decimal and change luminosity\n var rgb = '#';\n var colorCode;\n for (var i = 0; i < 3; i++) {\n colorCode = parseInt(color.substr(i * 2, 2), 16);\n colorCode = Math.round(Math.min(Math.max(0, colorCode + (colorCode * factor)), 255));\n rgb += ('00' + colorCode.toString(16)).substr(colorCode.toString(16).length);\n }\n return rgb;\n}\n/** @private */\nexport function getMedian(values) {\n var half = Math.floor(values.length / 2);\n return values.length % 2 ? values[half] : ((values[half - 1] + values[half]) / 2.0);\n}\n/** @private */\n// tslint:disable-next-line:max-func-body-length\nexport function calculateLegendShapes(location, size, shape, options) {\n var padding = 10;\n var path = '';\n var height = size.height;\n var width = size.width;\n var locX = location.x;\n var locY = location.y;\n switch (shape) {\n case 'MultiColoredLine':\n case 'Line':\n path = 'M' + ' ' + (locX + (-width / 2)) + ' ' + (locY) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY);\n merge(options, { 'd': path });\n break;\n case 'StepLine':\n options.fill = 'transparent';\n path = 'M' + ' ' + (locX + (-width / 2) - (padding / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX +\n (-width / 2) + (width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (-width / 2) + (width / 10))\n + ' ' + (locY) + ' ' + 'L' + ' ' + (locX + (-width / 10)) + ' ' + (locY) + ' ' + 'L' + ' ' + (locX + (-width / 10))\n + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'L' +\n ' ' + (locX + (width / 5)) + ' ' + (locY + (-height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY +\n (-height / 2)) + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + '' + (locX + (width / 2)\n + (padding / 4)) + ' ' + (locY + (height / 2));\n merge(options, { 'd': path });\n break;\n case 'RightArrow':\n var space = 2;\n path = 'M' + ' ' + (locX + (-width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY) + ' ' + 'L' + ' ' +\n (locX + (-width / 2)) + ' ' + (locY + (height / 2)) + ' L' + ' ' + (locX + (-width / 2)) + ' ' +\n (locY + (height / 2) - space) + ' ' + 'L' + ' ' + (locX + (width / 2) - (2 * space)) + ' ' + (locY) +\n ' L' + (locX + (-width / 2)) + ' ' + (locY - (height / 2) + space) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'LeftArrow':\n options.fill = options.stroke;\n options.stroke = 'transparent';\n space = 2;\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (-width / 2)) + ' ' + (locY) + ' ' + 'L' + ' ' +\n (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' +\n (locX + (width / 2)) + ' ' + (locY + (height / 2) - space) + ' L' + ' ' + (locX + (-width / 2) + (2 * space))\n + ' ' + (locY) + ' L' + (locX + (width / 2)) + ' ' + (locY - (height / 2) + space) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Column':\n case 'Pareto':\n case 'StackingColumn':\n case 'StackingColumn100':\n case 'RangeColumn':\n case 'Histogram':\n path = 'M' + ' ' + (locX - 3 * (width / 5)) + ' ' + (locY - (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (-width / 10)) + ' ' + (locY - (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (-width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX - 3 *\n (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' +\n (locX + (-width / 10) - (width / 20)) + ' ' + (locY - (height / 4) - (padding / 2))\n + ' ' + 'L' + ' ' + (locX + (width / 10) + (width / 20)) + ' ' + (locY - (height / 4) -\n (padding / 2)) + ' ' + 'L' + ' ' + (locX + (width / 10) + (width / 20)) + ' ' + (locY\n + (height / 2)) + ' ' + 'L' + ' ' + (locX + (-width / 10) - (width / 20)) + ' ' + (locY +\n (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' + (locX + 3 * (width / 10)) + ' ' + (locY) + ' ' +\n 'L' + ' ' + (locX + 3 * (width / 5)) + ' ' + (locY) + ' ' + 'L' + ' '\n + (locX + 3 * (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' '\n + (locX + 3 * (width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'Bar':\n case 'StackingBar':\n case 'StackingBar100':\n path = 'M' + ' ' + (locX + (-width / 2) + (-padding / 4)) + ' ' + (locY - 3 * (height / 5)) + ' '\n + 'L' + ' ' + (locX + 3 * (width / 10)) + ' ' + (locY - 3 * (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (width / 10)) + ' ' + (locY - 3 * (height / 10)) + ' ' + 'L' + ' ' +\n (locX - (width / 2) + (-padding / 4)) + ' ' + (locY - 3 * (height / 10)) + ' ' + 'Z' + ' '\n + 'M' + ' ' + (locX + (-width / 2) + (-padding / 4)) + ' ' + (locY - (height / 5)\n + (padding / 20)) + ' ' + 'L' + ' ' + (locX + (width / 2) + (padding / 4)) + ' ' + (locY\n - (height / 5) + (padding / 20)) + ' ' + 'L' + ' ' + (locX + (width / 2) + (padding / 4))\n + ' ' + (locY + (height / 10) + (padding / 20)) + ' ' + 'L' + ' ' + (locX - (width / 2)\n + (-padding / 4)) + ' ' + (locY + (height / 10) + (padding / 20)) + ' ' + 'Z' + ' ' + 'M'\n + ' ' + (locX - (width / 2) + (-padding / 4)) + ' ' + (locY + (height / 5)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX + (-width / 4)) + ' ' + (locY + (height / 5)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX + (-width / 4)) + ' ' + (locY + (height / 2)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX - (width / 2) + (-padding / 4))\n + ' ' + (locY + (height / 2) + (padding / 10)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'Spline':\n options.fill = 'transparent';\n path = 'M' + ' ' + (locX - (width / 2)) + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' '\n + locX + ' ' + (locY - height) + ' ' + locX + ' ' + (locY + (height / 5))\n + ' ' + 'M' + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + (locX\n + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + (locX + (width / 2)) + ' '\n + (locY - (height / 2));\n merge(options, { 'd': path });\n break;\n case 'Area':\n case 'MultiColoredArea':\n case 'RangeArea':\n case 'StackingArea':\n case 'StackingArea100':\n path = 'M' + ' ' + (locX - (width / 2) - (padding / 4)) + ' ' + (locY + (height / 2))\n + ' ' + 'L' + ' ' + (locX + (-width / 4) + (-padding / 8)) + ' ' + (locY - (height / 2))\n + ' ' + 'L' + ' ' + (locX) + ' ' + (locY + (height / 4)) + ' ' + 'L' + ' ' + (locX\n + (width / 4) + (padding / 8)) + ' ' + (locY + (-height / 2) + (height / 4)) + ' '\n + 'L' + ' ' + (locX + (height / 2) + (padding / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'SplineArea':\n path = 'M' + ' ' + (locX - (width / 2)) + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + locX\n + ' ' + (locY - height) + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Z' + ' ' + 'M'\n + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + (locX + (width / 2)) + ' '\n + (locY + (height / 2)) + ' ' + (locX + (width / 2)) + ' '\n + (locY - (height / 2)) + ' ' + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Pie':\n case 'Doughnut':\n options.stroke = 'transparent';\n var r = Math.min(height, width) / 2;\n path = getAccumulationLegend(locX, locY, r, height, width, shape);\n merge(options, { 'd': path });\n break;\n }\n return { renderOption: options };\n}\n/** @private */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth) {\n return label;\n }\n }\n }\n return label;\n}\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/** @private */\nexport function findDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY, tipRadius) {\n var direction = '';\n var startX = rect.x;\n var startY = rect.y;\n var width = rect.x + rect.width;\n var height = rect.y + rect.height;\n tipRadius = tipRadius ? tipRadius : 0;\n if (top) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + startY + ' ' + (startX + rX) + ' ' + startY + ' ' +\n ' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n + startY + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n if (arrowPadding !== 0) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX + tipRadius) + ' ' + (height + arrowPadding - tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (height + arrowPadding) + ' ' + (tipX - tipRadius) +\n ' ' + (height + arrowPadding - tipRadius);\n }\n if ((arrowLocation.x - arrowPadding / 2) > startX) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + height +\n ' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n if (arrowPadding === 0) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n }\n }\n }\n else if (bottom) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (tipX - tipRadius) + ' ' + (arrowLocation.y + tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (arrowLocation.y) + ' ' + (tipX + tipRadius) + ' ' + (arrowLocation.y + tipRadius);\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (startY) + ' L' + ' '\n + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height) +\n ' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else if (left) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n + (startY) + ' ' + (width) + ' ' + (startY + rY) + ' L' + ' ' + (width) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (width + arrowPadding) + ' ' + (tipY) + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n + (startY) + ' ' + (startX) + ' ' + (startY + rY) + ' L' + ' ' + (startX) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (startX - arrowPadding) + ' ' + (tipY) + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX + rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n + (height) + ' ' + (width) + ' ' + (height - rY) +\n ' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n }\n return direction;\n}\n/** @private */\nexport function redrawElement(redraw, id, options, renderer) {\n if (!redraw) {\n return null;\n }\n var element = getElement(id);\n if (element && options) {\n renderer.setElementAttributes(options, element.tagName === 'clipPath' ? element.childNodes[0] : element);\n }\n return element;\n}\n/** @private */\nexport function animateRedrawElement(element, duration, start, end, x, y) {\n if (x === void 0) { x = 'x'; }\n if (y === void 0) { y = 'y'; }\n var isDiv = element.tagName === 'DIV';\n var setStyle = function (xValue, yValue) {\n if (isDiv) {\n element.style[x] = xValue + 'px';\n element.style[y] = yValue + 'px';\n }\n else {\n element.setAttribute(x, xValue + '');\n element.setAttribute(y, yValue + '');\n }\n };\n setStyle(start.x, start.y);\n new Animation({}).animate(createElement('div'), {\n duration: duration,\n progress: function (args) {\n setStyle(linear(args.timeStamp, start.x, end.x - start.x, args.duration), linear(args.timeStamp, start.y, end.y - start.y, args.duration));\n },\n end: function () {\n setStyle(end.x, end.y);\n }\n });\n}\n/** @private */\nexport function textElement(options, font, color, parent, isMinus, redraw, isAnimate) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {};\n var htmlObject;\n var tspanElement;\n var renderer = new SvgRenderer('');\n var text;\n var height;\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n htmlObject = renderer.createText(renderOptions, text);\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + ((isMinus) ? -(i * height) : (i * height))\n }, isMinus ? options.text[options.text.length - (i + 1)] : options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n appendChildElement(parent, htmlObject, redraw, isAnimate);\n return htmlObject;\n}\n/**\n * Method to calculate the width and height of the chart\n */\nexport function calculateSize(chart) {\n var containerWidth = chart.element.clientWidth;\n var containerHeight = chart.element.clientHeight;\n var height = 450;\n var marginHeight;\n if (chart.getModuleName() === 'rangeNavigator') {\n var range = chart;\n var tooltipSpace = range.tooltip.enable ? 35 : 0;\n var periodHeight = range.periodSelectorSettings.periods.length ?\n range.periodSelectorSettings.height : 0;\n marginHeight = range.margin.top + range.margin.bottom + tooltipSpace;\n var labelSize = measureText('tempString', range.labelStyle).height;\n var labelPadding = 15;\n height = (chart.series.length ? (Browser.isDevice ? 80 : 120) : ((range.enableGrouping ? (40 + labelPadding + labelSize) : 40)\n + marginHeight)) + periodHeight;\n if (range.disableRangeSelector) {\n height = periodHeight;\n }\n }\n chart.availableSize = new Size(stringToNumber(chart.width, containerWidth) || containerWidth || 600, stringToNumber(chart.height, containerHeight) || containerHeight || height);\n}\nexport function createSvg(chart) {\n chart.renderer = new SvgRenderer(chart.element.id);\n calculateSize(chart);\n chart.svgObject = chart.renderer.createSvg({\n id: chart.element.id + '_svg',\n width: chart.availableSize.width,\n height: chart.availableSize.height\n });\n}\n/**\n * To calculate chart title and height\n * @param title\n * @param style\n * @param width\n */\nexport function getTitle(title, style, width) {\n var titleCollection = [];\n switch (style.textOverflow) {\n case 'Wrap':\n titleCollection = textWrap(title, width, style);\n break;\n case 'Trim':\n titleCollection.push(textTrim(width, title, style));\n break;\n default:\n titleCollection.push(title);\n break;\n }\n return titleCollection;\n}\n/**\n * Method to calculate x position of title\n */\nexport function titlePositionX(rect, titleStyle) {\n var positionX;\n if (titleStyle.textAlignment === 'Near') {\n positionX = rect.x;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionX = rect.x + rect.width / 2;\n }\n else {\n positionX = rect.x + rect.width;\n }\n return positionX;\n}\n/**\n * Method to find new text and element size based on textOverflow\n */\nexport function textWrap(currentLabel, maximumWidth, font) {\n var textCollection = currentLabel.split(' ');\n var label = '';\n var labelCollection = [];\n var text;\n for (var i = 0, len = textCollection.length; i < len; i++) {\n text = textCollection[i];\n if (measureText(label.concat(text), font).width < maximumWidth) {\n label = label.concat((label === '' ? '' : ' ') + text);\n }\n else {\n if (label !== '') {\n labelCollection.push(textTrim(maximumWidth, label, font));\n label = text;\n }\n else {\n labelCollection.push(textTrim(maximumWidth, text, font));\n text = '';\n }\n }\n if (label && i === len - 1) {\n labelCollection.push(textTrim(maximumWidth, label, font));\n }\n }\n return labelCollection;\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar StackValues = /** @class */ (function () {\n function StackValues(startValue, endValue) {\n this.startValues = startValue;\n this.endValues = endValue;\n }\n return StackValues;\n}());\nexport { StackValues };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/** @private */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/** @private */\nvar PolygonOption = /** @class */ (function () {\n function PolygonOption(id, points, fill) {\n this.id = id;\n this.points = points;\n this.fill = fill;\n }\n return PolygonOption;\n}());\nexport { PolygonOption };\n/** @private */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar ChartLocation = /** @class */ (function () {\n function ChartLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return ChartLocation;\n}());\nexport { ChartLocation };\n/** @private */\nvar Thickness = /** @class */ (function () {\n function Thickness(left, right, top, bottom) {\n this.left = left;\n this.right = right;\n this.top = top;\n this.bottom = bottom;\n }\n return Thickness;\n}());\nexport { Thickness };\n/** @private */\nvar ColorValue = /** @class */ (function () {\n function ColorValue(r, g, b) {\n this.r = r;\n this.g = g;\n this.b = b;\n }\n return ColorValue;\n}());\nexport { ColorValue };\n/** @private */\nvar PointData = /** @class */ (function () {\n function PointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n this.lierIndex = index;\n }\n return PointData;\n}());\nexport { PointData };\n/** @private */\nvar AccPointData = /** @class */ (function () {\n function AccPointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n }\n return AccPointData;\n}());\nexport { AccPointData };\n/** @private */\nvar ControlPoints = /** @class */ (function () {\n function ControlPoints(controlPoint1, controlPoint2) {\n this.controlPoint1 = controlPoint1;\n this.controlPoint2 = controlPoint2;\n }\n return ControlPoints;\n}());\nexport { ControlPoints };\n","/**\n * @private\n * @hidden\n */\nexport function defaultToString(item) {\n // if (item === null) {\n // return 'COLLECTION_NULL';\n // } else if (typeof item === 'undefined') {\n // return 'COLLECTION_UNDEFINED';\n // } else if (Object.prototype.toString.call(item) === '[object String]') {\n if (Object.prototype.toString.call(item) === '[object String]') {\n return '$s' + item;\n }\n else {\n return '$o' + item.toString();\n }\n}\n","/**\n * Encoding class: Contains the details about encoding type, whether to write a Unicode byte order mark (BOM).\n * ```typescript\n * let encoding : Encoding = new Encoding();\n * encoding.type = 'Utf8';\n * encoding.getBytes('Encoding', 0, 5);\n * ```\n */\nvar Encoding = /** @class */ (function () {\n /**\n * Initializes a new instance of the Encoding class. A parameter specifies whether to write a Unicode byte order mark\n * @param {boolean} includeBom?-true to specify that a Unicode byte order mark is written; otherwise, false.\n */\n function Encoding(includeBom) {\n this.emitBOM = true;\n this.encodingType = 'Ansi';\n this.initBOM(includeBom);\n }\n Object.defineProperty(Encoding.prototype, \"includeBom\", {\n /**\n * Gets a value indicating whether to write a Unicode byte order mark\n * @returns boolean- true to specify that a Unicode byte order mark is written; otherwise, false\n */\n get: function () {\n return this.emitBOM;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Encoding.prototype, \"type\", {\n /**\n * Gets the encoding type.\n * @returns EncodingType\n */\n get: function () {\n return this.encodingType;\n },\n /**\n * Sets the encoding type.\n * @param {EncodingType} value\n */\n set: function (value) {\n this.encodingType = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Initialize the includeBom to emit BOM or Not\n * @param {boolean} includeBom\n */\n Encoding.prototype.initBOM = function (includeBom) {\n if (includeBom === undefined || includeBom === null) {\n this.emitBOM = true;\n }\n else {\n this.emitBOM = includeBom;\n }\n };\n /**\n * Calculates the number of bytes produced by encoding the characters in the specified string\n * @param {string} chars - The string containing the set of characters to encode\n * @returns {number} - The number of bytes produced by encoding the specified characters\n */\n Encoding.prototype.getByteCount = function (chars) {\n var byteCount = 0;\n validateNullOrUndefined(chars, 'string');\n if (chars === '') {\n var byte = this.utf8Len(chars.charCodeAt(0));\n return byte;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n return this.getByteCountInternal(chars, 0, chars.length);\n };\n /**\n * Return the Byte of character\n * @param {number} codePoint\n * @returns {number}\n */\n Encoding.prototype.utf8Len = function (codePoint) {\n var bytes = codePoint <= 0x7F ? 1 :\n codePoint <= 0x7FF ? 2 :\n codePoint <= 0xFFFF ? 3 :\n codePoint <= 0x1FFFFF ? 4 : 0;\n return bytes;\n };\n /**\n * for 4 byte character return surrogate pair true, otherwise false\n * @param {number} codeUnit\n * @returns {boolean}\n */\n Encoding.prototype.isHighSurrogate = function (codeUnit) {\n return codeUnit >= 0xD800 && codeUnit <= 0xDBFF;\n };\n /**\n * for 4byte character generate the surrogate pair\n * @param {number} highCodeUnit\n * @param {number} lowCodeUnit\n */\n Encoding.prototype.toCodepoint = function (highCodeUnit, lowCodeUnit) {\n highCodeUnit = (0x3FF & highCodeUnit) << 10;\n var u = highCodeUnit | (0x3FF & lowCodeUnit);\n return u + 0x10000;\n };\n /**\n * private method to get the byte count for specific charindex and count\n * @param {string} chars\n * @param {number} charIndex\n * @param {number} charCount\n */\n Encoding.prototype.getByteCountInternal = function (chars, charIndex, charCount) {\n var byteCount = 0;\n if (this.encodingType === 'Utf8' || this.encodingType === 'Unicode') {\n var isUtf8 = this.encodingType === 'Utf8';\n for (var i = 0; i < charCount; i++) {\n var charCode = chars.charCodeAt(isUtf8 ? charIndex : charIndex++);\n if (this.isHighSurrogate(charCode)) {\n if (isUtf8) {\n var high = charCode;\n var low = chars.charCodeAt(++charIndex);\n byteCount += this.utf8Len(this.toCodepoint(high, low));\n }\n else {\n byteCount += 4;\n ++i;\n }\n }\n else {\n if (isUtf8) {\n byteCount += this.utf8Len(charCode);\n }\n else {\n byteCount += 2;\n }\n }\n if (isUtf8) {\n charIndex++;\n }\n }\n return byteCount;\n }\n else {\n byteCount = charCount;\n return byteCount;\n }\n };\n /**\n * Encodes a set of characters from the specified string into the ArrayBuffer.\n * @param {string} s- The string containing the set of characters to encode\n * @param {number} charIndex-The index of the first character to encode.\n * @param {number} charCount- The number of characters to encode.\n * @returns {ArrayBuffer} - The ArrayBuffer that contains the resulting sequence of bytes.\n */\n Encoding.prototype.getBytes = function (s, charIndex, charCount) {\n validateNullOrUndefined(s, 'string');\n validateNullOrUndefined(charIndex, 'charIndex');\n validateNullOrUndefined(charCount, 'charCount');\n if (charIndex < 0 || charCount < 0) {\n throw new RangeError('Argument Out Of Range Exception: charIndex or charCount is less than zero');\n }\n if (s.length - charIndex < charCount) {\n throw new RangeError('Argument Out Of Range Exception: charIndex and charCount do not denote a valid range in string');\n }\n var bytes;\n if (s === '') {\n bytes = new ArrayBuffer(0);\n return bytes;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var byteCount = this.getByteCountInternal(s, charIndex, charCount);\n switch (this.type) {\n case 'Utf8':\n bytes = this.getBytesOfUtf8Encoding(byteCount, s, charIndex, charCount);\n return bytes;\n case 'Unicode':\n bytes = this.getBytesOfUnicodeEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n default:\n bytes = this.getBytesOfAnsiEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n }\n };\n /**\n * Decodes a sequence of bytes from the specified ArrayBuffer into the string.\n * @param {ArrayBuffer} bytes- The ArrayBuffer containing the sequence of bytes to decode.\n * @param {number} index- The index of the first byte to decode.\n * @param {number} count- The number of bytes to decode.\n * @returns {string} - The string that contains the resulting set of characters.\n */\n Encoding.prototype.getString = function (bytes, index, count) {\n validateNullOrUndefined(bytes, 'bytes');\n validateNullOrUndefined(index, 'index');\n validateNullOrUndefined(count, 'count');\n if (index < 0 || count < 0) {\n throw new RangeError('Argument Out Of Range Exception: index or count is less than zero');\n }\n if (bytes.byteLength - index < count) {\n throw new RangeError('Argument Out Of Range Exception: index and count do not denote a valid range in bytes');\n }\n if (bytes.byteLength === 0 || count === 0) {\n return '';\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var out = '';\n var byteCal = new Uint8Array(bytes);\n switch (this.type) {\n case 'Utf8':\n var s = this.getStringOfUtf8Encoding(byteCal, index, count);\n return s;\n case 'Unicode':\n var byteUnicode = new Uint16Array(bytes);\n out = this.getStringofUnicodeEncoding(byteUnicode, index, count);\n return out;\n default:\n var j = index;\n for (var i = 0; i < count; i++) {\n var c = byteCal[j];\n out += String.fromCharCode(c); // 1 byte(ASCII) character \n j++;\n }\n return out;\n }\n };\n Encoding.prototype.getBytesOfAnsiEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var bufview = new Uint8Array(bytes);\n var k = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(charIndex++);\n if (charcode < 0x800) {\n bufview[k] = charcode;\n }\n else {\n bufview[k] = 63; //replacement character '?'\n }\n k++;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUtf8Encoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint = new Uint8Array(bytes);\n var index = charIndex;\n var j = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(index);\n if (charcode <= 0x7F) { // 1 byte character 2^7\n uint[j] = charcode;\n }\n else if (charcode < 0x800) { // 2 byte character 2^11\n uint[j] = 0xc0 | (charcode >> 6);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else if ((charcode < 0xd800 || charcode >= 0xe000)) { // 3 byte character 2^16 \n uint[j] = 0xe0 | (charcode >> 12);\n uint[++j] = 0x80 | ((charcode >> 6) & 0x3f);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else {\n uint[j] = 0xef;\n uint[++j] = 0xbf;\n uint[++j] = 0xbd; // U+FFFE \"replacement character\"\n }\n ++j;\n ++index;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUnicodeEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint16 = new Uint16Array(bytes);\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(i);\n uint16[i] = charcode;\n }\n return bytes;\n };\n Encoding.prototype.getStringOfUtf8Encoding = function (byteCal, index, count) {\n var j = 0;\n var i = index;\n var s = '';\n for (j; j < count; j++) {\n var c = byteCal[i++];\n while (i > byteCal.length) {\n return s;\n }\n if (c > 127) {\n if (c > 191 && c < 224 && i < count) {\n c = (c & 31) << 6 | byteCal[i] & 63;\n }\n else if (c > 223 && c < 240 && i < byteCal.byteLength) {\n c = (c & 15) << 12 | (byteCal[i] & 63) << 6 | byteCal[++i] & 63;\n }\n else if (c > 239 && c < 248 && i < byteCal.byteLength) {\n c = (c & 7) << 18 | (byteCal[i] & 63) << 12 | (byteCal[++i] & 63) << 6 | byteCal[++i] & 63;\n }\n ++i;\n }\n s += String.fromCharCode(c); // 1 byte(ASCII) character \n }\n return s;\n };\n Encoding.prototype.getStringofUnicodeEncoding = function (byteUni, index, count) {\n if (count > byteUni.length) {\n throw new RangeError('ArgumentOutOfRange_Count');\n }\n var byte16 = new Uint16Array(count);\n var out = '';\n for (var i = 0; i < count && i < byteUni.length; i++) {\n byte16[i] = byteUni[index++];\n }\n out = String.fromCharCode.apply(null, byte16);\n return out;\n };\n /**\n * To clear the encoding instance\n * @return {void}\n */\n Encoding.prototype.destroy = function () {\n this.emitBOM = undefined;\n this.encodingType = undefined;\n };\n return Encoding;\n}());\nexport { Encoding };\n/**\n * To check the object is null or undefined and throw error if it is null or undefined\n * @param {Object} value - object to check is null or undefined\n * @return {boolean}\n * @throws {ArgumentException} - if the value is null or undefined\n * @private\n */\nexport function validateNullOrUndefined(value, message) {\n if (value === null || value === undefined) {\n throw new Error('ArgumentException: ' + message + ' cannot be null or undefined');\n }\n}\n","/** @private */\nexport function getTooltipThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696'\n };\n break;\n default:\n style = {\n tooltipFill: 'rgba(0, 8, 22, 0.75)',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff'\n };\n break;\n }\n return style;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { createElement, remove, SvgRenderer, merge } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('chartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'chartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/** @private */\nexport function findDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY, tipRadius) {\n var direction = '';\n var startX = rect.x;\n var startY = rect.y;\n var width = rect.x + rect.width;\n var height = rect.y + rect.height;\n tipRadius = tipRadius ? tipRadius : 0;\n if (top) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + startY + ' ' + (startX + rX) + ' ' + startY + ' ' +\n ' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n + startY + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n if (arrowPadding !== 0) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX + tipRadius) + ' ' + (height + arrowPadding - tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (height + arrowPadding) + ' ' + (tipX - tipRadius) +\n ' ' + (height + arrowPadding - tipRadius);\n }\n if ((arrowLocation.x - arrowPadding / 2) > startX) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + height +\n ' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n if (arrowPadding === 0) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n }\n }\n }\n else if (bottom) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (tipX - tipRadius) + ' ' + (arrowLocation.y + tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (arrowLocation.y) + ' ' + (tipX + tipRadius) + ' ' + (arrowLocation.y + tipRadius);\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (startY) + ' L' + ' '\n + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height) +\n ' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else if (left) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n + (startY) + ' ' + (width) + ' ' + (startY + rY) + ' L' + ' ' + (width) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (width + arrowPadding) + ' ' + (tipY) + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n + (startY) + ' ' + (startX) + ' ' + (startY + rY) + ' L' + ' ' + (startX) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (startX - arrowPadding) + ' ' + (tipY) + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX + rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n + (height) + ' ' + (width) + ' ' + (height - rY) +\n ' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n }\n return direction;\n}\n/** @private */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\nvar Side = /** @class */ (function () {\n function Side(bottom, right) {\n this.isRight = right;\n this.isBottom = bottom;\n }\n return Side;\n}());\nexport { Side };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var functionName = 'Path';\n var renderer = new SvgRenderer('');\n var temp = calculateShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n htmlObject.setAttribute('aria-label', label);\n return htmlObject;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nexport function textElement(options, font, color, parent) {\n var renderOptions = {};\n var htmlObject;\n var tspanElement;\n var renderer = new SvgRenderer('');\n var text;\n var height;\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n text = typeof options.text === 'string' ? options.text : options.text[0];\n htmlObject = renderer.createText(renderOptions, text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nvar TooltipLocation = /** @class */ (function () {\n function TooltipLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return TooltipLocation;\n}());\nexport { TooltipLocation };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * AccumulationChart base file\n */\nimport { Property, ChildProperty, Complex, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Border, Font, Animation, EmptyPointSettings, Connector } from '../../common/model/base';\nimport { Rect, stringToNumber, PathOption, appendChildElement } from '../../common/utils/helper';\nimport { seriesRender, pointRender } from '../../common/model/constants';\nimport { getSeriesColor } from '../../common/model/theme';\nimport { getElement, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Annotation for accumulation series\n */\nvar AccumulationAnnotationSettings = /** @class */ (function (_super) {\n __extends(AccumulationAnnotationSettings, _super);\n function AccumulationAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property('Pixel')\n ], AccumulationAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], AccumulationAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], AccumulationAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], AccumulationAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"description\", void 0);\n return AccumulationAnnotationSettings;\n}(ChildProperty));\nexport { AccumulationAnnotationSettings };\n/**\n * Configures the dataLabel in accumulation chart.\n */\nvar AccumulationDataLabelSettings = /** @class */ (function (_super) {\n __extends(AccumulationDataLabelSettings, _super);\n function AccumulationDataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], AccumulationDataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], AccumulationDataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Inside')\n ], AccumulationDataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], AccumulationDataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '11px', color: null }, Font)\n ], AccumulationDataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Complex({}, Connector)\n ], AccumulationDataLabelSettings.prototype, \"connectorStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"template\", void 0);\n return AccumulationDataLabelSettings;\n}(ChildProperty));\nexport { AccumulationDataLabelSettings };\n/**\n * Points model for the series.\n */\nvar AccPoints = /** @class */ (function () {\n function AccPoints() {\n this.visible = true;\n this.symbolLocation = null;\n /** @private */\n this.region = null;\n /** @private */\n this.labelRegion = null;\n /** @private */\n this.labelVisible = true;\n this.regions = null;\n /** @private */\n this.isExplode = false;\n /** @private */\n this.isClubbed = false;\n /** @private */\n this.isSliced = false;\n }\n return AccPoints;\n}());\nexport { AccPoints };\n/**\n * Configures the series in accumulation chart.\n */\nvar AccumulationSeries = /** @class */ (function (_super) {\n __extends(AccumulationSeries, _super);\n function AccumulationSeries() {\n /**\n * Specifies the dataSource for the series. It can be an array of JSON objects or an instance of DataManager.\n * ```html\n *
\n * ```\n * ```typescript\n * let dataManager: DataManager = new DataManager({\n * url: 'http://mvc.syncfusion.com/Services/Northwnd.svc/Tasks/'\n * });\n * let query: Query = new Query().take(50).where('Estimate', 'greaterThan', 0, false);\n * let pie: AccumulationChart = new AccumulationChart({\n * ...\n * series: [{\n * dataSource: dataManager,\n * xName: 'Id',\n * yName: 'Estimate',\n * query: query\n * }],\n * ...\n * });\n * pie.appendTo('#Pie');\n * ```\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.points = [];\n /** @private */\n _this.clubbedPoints = [];\n /** @private */\n _this.sumOfPoints = 0;\n /** @private */\n _this.isRectSeries = true;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @private */\n _this.category = 'Series';\n return _this;\n }\n /** @private To refresh the Datamanager for series */\n AccumulationSeries.prototype.refreshDataManager = function (accumulation, render) {\n var _this = this;\n var dateSource = this.dataSource || accumulation.dataSource;\n if (isNullOrUndefined(this.query)) {\n this.dataManagerSuccess({ result: dateSource, count: dateSource.length }, accumulation, render);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, accumulation, render); });\n };\n /**\n * To get points on dataManager is success\n * @private\n */\n AccumulationSeries.prototype.dataManagerSuccess = function (e, accumulation, render) {\n var argsData = {\n name: seriesRender, series: this, data: e.result,\n };\n accumulation.trigger(seriesRender, argsData);\n this.resultData = e.result !== '' ? e.result : [];\n this.getPoints(this.resultData, accumulation);\n if (++accumulation.seriesCounts === accumulation.visibleSeries.length && render) {\n accumulation.refreshChart();\n }\n };\n /** @private To find points from result data */\n AccumulationSeries.prototype.getPoints = function (result, accumulation) {\n var length = Object.keys(result).length;\n this.sumOfPoints = 0;\n if (length === 0) {\n return null;\n }\n this.findSumOfPoints(result);\n this.points = [];\n this.clubbedPoints = [];\n this.sumOfClub = 0;\n var point;\n var colors = this.palettes.length ? this.palettes : getSeriesColor(accumulation.theme);\n var clubValue = stringToNumber(this.groupTo, this.sumOfPoints);\n for (var i = 0; i < length; i++) {\n point = this.setPoints(result, i, colors);\n var currentY = point.y;\n if (!this.isClub(point, clubValue, i)) {\n if (isNullOrUndefined(point.y)) {\n point.visible = false;\n }\n this.pushPoints(point, colors);\n }\n else {\n point.index = this.clubbedPoints.length;\n point.isExplode = true;\n this.clubbedPoints.push(point);\n point.isSliced = true;\n }\n }\n this.lastGroupTo = this.groupTo;\n if (this.sumOfClub > 0) {\n var clubPoint_1 = this.generateClubPoint();\n this.pushPoints(clubPoint_1, colors);\n var pointsLength_1 = this.points.length - 1;\n this.clubbedPoints.map(function (point) {\n point.index += pointsLength_1;\n point.color = clubPoint_1.color;\n });\n }\n if (this.clubbedPoints.length && this.explode && this.type === 'Pie'\n && (this.explodeAll || this.points[this.points.length - 1].index === this.explodeIndex)) {\n this.points.splice(this.points.length - 1, 1);\n this.points = this.points.concat(this.clubbedPoints);\n }\n };\n /**\n * Generate club point\n */\n AccumulationSeries.prototype.generateClubPoint = function () {\n var clubPoint = new AccPoints();\n clubPoint.isClubbed = true;\n clubPoint.x = 'Others';\n clubPoint.y = this.sumOfClub;\n clubPoint.text = clubPoint.originalText = clubPoint.x + ': ' + this.sumOfClub;\n return clubPoint;\n };\n /**\n * Method to set point index and color\n */\n AccumulationSeries.prototype.pushPoints = function (point, colors) {\n point.index = this.points.length;\n point.isExplode = this.explodeAll || (point.index === this.explodeIndex);\n point.color = point.color || colors[point.index % colors.length];\n this.points.push(point);\n };\n /**\n * Method to find club point\n */\n AccumulationSeries.prototype.isClub = function (point, clubValue, index) {\n if (!isNullOrUndefined(clubValue)) {\n if (this.groupMode === 'Value' && Math.abs(point.y) <= clubValue) {\n this.sumOfClub += Math.abs(point.y);\n return true;\n }\n else if (this.groupMode === 'Point' && index >= clubValue) {\n this.sumOfClub += Math.abs(point.y);\n return true;\n }\n }\n return false;\n };\n /**\n * Method to find sum of points in the series\n */\n AccumulationSeries.prototype.findSumOfPoints = function (result) {\n var length = Object.keys(result).length;\n for (var i = 0; i < length; i++) {\n if (!isNullOrUndefined(result[i][this.yName])) {\n this.sumOfPoints += Math.abs(result[i][this.yName]);\n }\n }\n };\n /**\n * Method to set points x, y and text from data source\n */\n AccumulationSeries.prototype.setPoints = function (data, i, colors) {\n var point = new AccPoints();\n point.x = getValue(this.xName, data[i]);\n point.y = getValue(this.yName, data[i]);\n point.percentage = (+(point.y / this.sumOfPoints * 100).toFixed(2));\n point.color = getValue(this.pointColorMapping, data[i]);\n point.text = point.originalText = getValue(this.dataLabel.name || '', data[i]);\n point.tooltip = getValue(this.tooltipMappingName || '', data[i]);\n this.setAccEmptyPoint(point, i, data, colors);\n return point;\n };\n /**\n * Method render the series elements for accumulation chart\n * @private\n */\n AccumulationSeries.prototype.renderSeries = function (accumulation, redraw) {\n var seriesGroup = redraw ? getElement(accumulation.element.id + '_Series_' + this.index) :\n accumulation.renderer.createGroup({ id: accumulation.element.id + '_Series_' + this.index });\n this.renderPoints(accumulation, seriesGroup, redraw);\n var datalabelGroup;\n if (accumulation.accumulationDataLabelModule && this.dataLabel.visible) {\n datalabelGroup = accumulation.renderer.createGroup({ id: accumulation.element.id + '_datalabel_Series_' + this.index });\n datalabelGroup.style.visibility =\n (this.animation.enable && accumulation.animateSeries && this.type === 'Pie') ? 'hidden' : 'visible';\n this.renderDataLabel(accumulation, datalabelGroup, redraw);\n }\n if (this.type === 'Pie') {\n this.findMaxBounds(this.labelBound, this.accumulationBound);\n accumulation.pieSeriesModule.animateSeries(accumulation, this.animation, this, seriesGroup);\n }\n if (accumulation.accumulationLegendModule) {\n this.labelBound.x -= accumulation.explodeDistance;\n this.labelBound.y -= accumulation.explodeDistance;\n this.labelBound.height += (accumulation.explodeDistance - this.labelBound.y);\n this.labelBound.width += (accumulation.explodeDistance - this.labelBound.x);\n }\n };\n /**\n * Method render the points elements for accumulation chart series.\n */\n AccumulationSeries.prototype.renderPoints = function (accumulation, seriesGroup, redraw) {\n var pointId = accumulation.element.id + '_Series_' + this.index + '_Point_';\n var option;\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var argsData = {\n cancel: false, name: pointRender, series: this, point: point, fill: point.color,\n border: this.isEmpty(point) ? { width: this.emptyPointSettings.border.width, color: this.emptyPointSettings.border.color } :\n { width: this.border.width, color: this.border.color }\n };\n accumulation.trigger(pointRender, argsData);\n point.color = argsData.fill;\n option = new PathOption(pointId + point.index, point.color, argsData.border.width || 1, argsData.border.color || point.color, this.opacity, '', '');\n accumulation[(firstToLowerCase(this.type) + 'SeriesModule')].\n renderPoint(point, this, accumulation, option, seriesGroup, redraw);\n }\n appendChildElement(accumulation.getSeriesElement(), seriesGroup, redraw);\n };\n /**\n * Method render the datalabel elements for accumulation chart.\n */\n AccumulationSeries.prototype.renderDataLabel = function (accumulation, datalabelGroup, redraw) {\n accumulation.accumulationDataLabelModule.findAreaRect();\n var element = createElement('div', {\n id: accumulation.element.id + '_Series_0' + '_DataLabelCollections'\n });\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.visible) {\n accumulation.accumulationDataLabelModule.renderDataLabel(point, this.dataLabel, datalabelGroup, this.points, this.index, element, redraw);\n }\n }\n if (this.dataLabel.template !== null && element.childElementCount) {\n appendChildElement(getElement(accumulation.element.id + '_Secondary_Element'), element, redraw);\n }\n appendChildElement(accumulation.getSeriesElement(), datalabelGroup, redraw);\n };\n /**\n * To find maximum bounds for smart legend placing\n * @private\n */\n AccumulationSeries.prototype.findMaxBounds = function (totalbound, bound) {\n totalbound.x = bound.x < totalbound.x ? bound.x : totalbound.x;\n totalbound.y = bound.y < totalbound.y ? bound.y : totalbound.y;\n totalbound.height = (bound.y + bound.height) > totalbound.height ? (bound.y + bound.height) : totalbound.height;\n totalbound.width = (bound.x + bound.width) > totalbound.width ? (bound.x + bound.width) : totalbound.width;\n };\n /**\n * To set empty point value for null points\n * @private\n */\n AccumulationSeries.prototype.setAccEmptyPoint = function (point, i, data, colors) {\n if (!isNullOrUndefined(point.y)) {\n return null;\n }\n point.color = this.emptyPointSettings.fill || point.color;\n switch (this.emptyPointSettings.mode) {\n case 'Zero':\n point.y = 0;\n point.visible = true;\n break;\n case 'Average':\n var previous = data[i - 1] ? (data[i - 1][this.yName] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][this.yName] || 0) : 0;\n point.y = (Math.abs(previous) + Math.abs(next)) / 2;\n this.sumOfPoints += point.y;\n point.visible = true;\n break;\n default:\n point.visible = false;\n break;\n }\n };\n /**\n * To find point is empty\n */\n AccumulationSeries.prototype.isEmpty = function (point) {\n return point.color === this.emptyPointSettings.fill;\n };\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], AccumulationSeries.prototype, \"query\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"tooltipMappingName\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"yName\", void 0);\n __decorate([\n Property(true)\n ], AccumulationSeries.prototype, \"visible\", void 0);\n __decorate([\n Complex({ color: null, width: 0 }, Border)\n ], AccumulationSeries.prototype, \"border\", void 0);\n __decorate([\n Complex(null, Animation)\n ], AccumulationSeries.prototype, \"animation\", void 0);\n __decorate([\n Property('SeriesType')\n ], AccumulationSeries.prototype, \"legendShape\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"groupTo\", void 0);\n __decorate([\n Property('Value')\n ], AccumulationSeries.prototype, \"groupMode\", void 0);\n __decorate([\n Complex({}, AccumulationDataLabelSettings)\n ], AccumulationSeries.prototype, \"dataLabel\", void 0);\n __decorate([\n Property([])\n ], AccumulationSeries.prototype, \"palettes\", void 0);\n __decorate([\n Property(0)\n ], AccumulationSeries.prototype, \"startAngle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"endAngle\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"radius\", void 0);\n __decorate([\n Property('0')\n ], AccumulationSeries.prototype, \"innerRadius\", void 0);\n __decorate([\n Property('Pie')\n ], AccumulationSeries.prototype, \"type\", void 0);\n __decorate([\n Property(true)\n ], AccumulationSeries.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(false)\n ], AccumulationSeries.prototype, \"explode\", void 0);\n __decorate([\n Property('30%')\n ], AccumulationSeries.prototype, \"explodeOffset\", void 0);\n __decorate([\n Property(false)\n ], AccumulationSeries.prototype, \"explodeAll\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"explodeIndex\", void 0);\n __decorate([\n Complex({ mode: 'Drop' }, EmptyPointSettings)\n ], AccumulationSeries.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(0)\n ], AccumulationSeries.prototype, \"gapRatio\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"width\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"height\", void 0);\n __decorate([\n Property('20%')\n ], AccumulationSeries.prototype, \"neckWidth\", void 0);\n __decorate([\n Property('20%')\n ], AccumulationSeries.prototype, \"neckHeight\", void 0);\n __decorate([\n Property('Linear')\n ], AccumulationSeries.prototype, \"pyramidMode\", void 0);\n __decorate([\n Property(1)\n ], AccumulationSeries.prototype, \"opacity\", void 0);\n return AccumulationSeries;\n}(ChildProperty));\nexport { AccumulationSeries };\n/**\n * method to get series from index\n * @private\n */\nexport function getSeriesFromIndex(index, visibleSeries) {\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (index === series.index) {\n return series;\n }\n }\n return visibleSeries[0];\n}\n/**\n * method to get point from index\n * @private\n */\nexport function pointByIndex(index, points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index === index) {\n return point;\n }\n }\n return null;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { SvgRenderer, createElement, remove } from '@syncfusion/ej2-base';\n/**\n * Sparkline control helper file\n */\n/**\n * sparkline internal use of `Size` type\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/**\n * To find number from string\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Method to calculate the width and height of the sparkline\n */\nexport function calculateSize(sparkline) {\n var containerWidth = sparkline.element.clientWidth;\n var containerHeight = sparkline.element.clientHeight;\n sparkline.availableSize = new Size(stringToNumber(sparkline.width, containerWidth) || containerWidth || 100, stringToNumber(sparkline.height, containerHeight) || containerHeight || (sparkline.isDevice ?\n Math.min(window.innerWidth, window.innerHeight) : 50));\n}\n/**\n * Method to create svg for sparkline.\n */\nexport function createSvg(sparkline) {\n sparkline.renderer = new SvgRenderer(sparkline.element.id);\n calculateSize(sparkline);\n sparkline.svgObject = sparkline.renderer.createSvg({\n id: sparkline.element.id + '_svg',\n width: sparkline.availableSize.width,\n height: sparkline.availableSize.height\n });\n}\n/**\n * Internal use of type rect\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Internal use of path options\n * @private\n */\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n this.id = id;\n this.fill = fill;\n this.opacity = opacity;\n this['stroke-width'] = width;\n this.stroke = color;\n this.d = d;\n this['stroke-dasharray'] = dashArray;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, tl, tr, bl, br) {\n if (tl === void 0) { tl = 0; }\n if (tr === void 0) { tr = 0; }\n if (bl === void 0) { bl = 0; }\n if (br === void 0) { br = 0; }\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.rect = rect;\n _this.topLeft = tl;\n _this.topRight = tr;\n _this.bottomLeft = bl;\n _this.bottomRight = br;\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Internal use of circle options\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/**\n * Internal use of append shape element\n * @private\n */\nexport function appendShape(shape, element) {\n if (element) {\n element.appendChild(shape);\n }\n return shape;\n}\n/**\n * Internal rendering of Circle\n * @private\n */\nexport function drawCircle(sparkline, options, element) {\n return appendShape(sparkline.renderer.drawCircle(options), element);\n}\n/**\n * To get rounded rect path direction\n */\nexport function calculateRoundedRectPath(r, topLeft, topRight, bottomLeft, bottomRight) {\n return 'M' + ' ' + r.x + ' ' + (topLeft + r.y) +\n ' Q ' + r.x + ' ' + r.y + ' ' + (r.x + topLeft) + ' ' +\n r.y + ' ' + 'L' + ' ' + (r.x + r.width - topRight) + ' ' + r.y +\n ' Q ' + (r.x + r.width) + ' ' + r.y + ' ' +\n (r.x + r.width) + ' ' + (r.y + topRight) + ' ' + 'L ' +\n (r.x + r.width) + ' ' + (r.y + r.height - bottomRight)\n + ' Q ' + (r.x + r.width) + ' ' + (r.y + r.height) + ' ' + (r.x + r.width - bottomRight) + ' ' +\n (r.y + r.height) + ' ' + 'L ' + (r.x + bottomLeft) + ' ' + (r.y + r.height) + ' Q ' + r.x + ' ' +\n (r.y + r.height) + ' ' + r.x + ' ' + (r.y + r.height - bottomLeft) + ' ' + 'L' + ' ' + r.x + ' ' +\n (topLeft + r.y) + ' ' + 'Z';\n}\n/**\n * Internal rendering of Rectangle\n * @private\n */\nexport function drawRectangle(sparkline, options, element) {\n options.d = calculateRoundedRectPath(options.rect, options.topLeft, options.topRight, options.bottomLeft, options.bottomRight);\n return appendShape(sparkline.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Path\n * @private\n */\nexport function drawPath(sparkline, options, element) {\n return appendShape(sparkline.renderer.drawPath(options), element);\n}\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {SparklineFontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('sparklinesmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'sparklinesmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text, baseLine, transform) {\n if (transform === void 0) { transform = ''; }\n this.transform = '';\n this.baseLine = 'auto';\n this.id = id;\n this.x = x;\n this.y = y;\n this.anchor = anchor;\n this.text = text;\n this.transform = transform;\n this.baseLine = baseLine;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent) {\n var textOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'fill': color,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'text-anchor': options.anchor,\n 'dominant-baseline': options.baseLine\n };\n var renderer = new SvgRenderer('');\n var htmlObject = renderer.createText(textOptions, options.text);\n htmlObject.style['user-select'] = 'none';\n htmlObject.style['-moz-user-select'] = 'none';\n htmlObject.style['-webkit-touch-callout'] = 'none';\n htmlObject.style['-webkit-user-select'] = 'none';\n htmlObject.style['-khtml-user-select'] = 'none';\n htmlObject.style['-ms-user-select'] = 'none';\n htmlObject.style['-o-user-select'] = 'none';\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * To remove element by id\n */\nexport function removeElement(id) {\n var element = document.getElementById(id);\n return element ? remove(element) : null;\n}\n/**\n * To find the element by id\n */\nexport function getIdElement(id) {\n return document.getElementById(id);\n}\n/**\n * To find point within the bounds.\n */\nexport function withInBounds(x, y, bounds) {\n return (x >= bounds.x && x <= bounds.x + bounds.width && y >= bounds.y && y <= bounds.y + bounds.height);\n}\n","/**\n * Methods for calculating coefficient.\n */\n/** @private */\nexport function rangeValueToCoefficient(value, range, inversed) {\n var result = (value - range.min) / (range.delta);\n return inversed ? (1 - result) : result;\n}\n/** @private */\nexport function getXLocation(x, range, size, inversed) {\n x = rangeValueToCoefficient(x, range, inversed);\n return x * size;\n}\n/** @private */\nexport function getRangeValueXByPoint(value, size, range, inversed) {\n var actualValue = !inversed ? value / size : (1 - (value / size));\n return actualValue * (range.delta) + range.min;\n}\n/** @private */\nexport function getExactData(points, start, end) {\n var selectedData = [];\n points.map(function (point) {\n if (point.xValue >= start && point.xValue <= end) {\n selectedData.push({\n 'x': point.x,\n 'y': point.y\n });\n }\n });\n return selectedData;\n}\n/** @private */\nexport function getNearestValue(values, point) {\n return values.reduce(function (prev, curr) {\n return (Math.abs(curr - point) < Math.abs(prev - point) ? curr : prev);\n });\n}\n/** @private */\nvar DataPoint = /** @class */ (function () {\n function DataPoint(x, y, xValue, yValue, visible) {\n if (visible === void 0) { visible = true; }\n this.x = x;\n this.y = y;\n this.xValue = xValue;\n this.visible = visible;\n }\n return DataPoint;\n}());\nexport { DataPoint };\n","import { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n *\n */\nexport var RangeNavigatorTheme;\n(function (RangeNavigatorTheme) {\n /** @private */\n RangeNavigatorTheme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n RangeNavigatorTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n})(RangeNavigatorTheme || (RangeNavigatorTheme = {}));\n/** @private */\nexport function getRangeThemeColor(theme, range) {\n var thumbSize = range.navigatorStyleSettings.thumb;\n var thumbWidth = isNullOrUndefined(thumbSize.width) ? (Browser.isDevice ? 15 : 20) : thumbSize.width;\n var thumbHeight = isNullOrUndefined(thumbSize.height) ? (Browser.isDevice ? 15 : 20) : thumbSize.height;\n var style = {\n gridLineColor: '#E0E0E0',\n axisLineColor: '#000000',\n labelFontColor: '#686868',\n unselectedRectColor: range.series.length ? 'rgba(255, 255, 255, 0.6)' : '#EEEEEE',\n thumpLineColor: 'rgba(189, 189, 189, 1)',\n thumbBackground: 'rgba(250, 250, 250, 1)',\n gripColor: '#757575',\n background: '#FFFFFF',\n thumbHoverColor: '#EEEEEE',\n selectedRegionColor: range.series.length ? 'transparent' : '#FF4081',\n tooltipBackground: 'rgb(0, 8, 22)',\n tooltipFontColor: '#dbdbdb',\n thumbWidth: thumbWidth,\n thumbHeight: thumbHeight\n };\n switch (theme) {\n case 'Fabric':\n style.selectedRegionColor = range.series.length ? 'transparent' : '#007897';\n break;\n case 'Bootstrap':\n style.selectedRegionColor = range.series.length ? 'transparent' : '#428BCA';\n break;\n case 'Highcontrast':\n style = {\n gridLineColor: '#bdbdbd',\n axisLineColor: '#969696',\n labelFontColor: '#ffffff',\n unselectedRectColor: range.series.length ? 'rgba(255, 255, 255, 0.3)' : '#EEEEEE',\n thumpLineColor: '#ffffff',\n thumbBackground: '#262626',\n gripColor: '#ffffff',\n background: '#000000',\n thumbHoverColor: '#BFBFBF',\n selectedRegionColor: range.series.length ? 'transparent' : '#FFD939',\n tooltipBackground: '#ffffff',\n tooltipFontColor: '#000000',\n thumbWidth: thumbWidth,\n thumbHeight: thumbHeight\n };\n break;\n default:\n style.selectedRegionColor = range.series.length ? 'transparent' : '#FF4081';\n break;\n }\n return style;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { createElement, SvgRenderer, compile as templateComplier, remove } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { SmithchartSize } from '../../smithchart/utils/utils';\nexport function createSvg(smithchart) {\n smithchart.renderer = new SvgRenderer(smithchart.element.id);\n calculateSize(smithchart);\n smithchart.svgObject = smithchart.renderer.createSvg({\n id: smithchart.element.id + '_svg',\n width: smithchart.availableSize.width,\n height: smithchart.availableSize.height\n });\n}\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * @private\n * Trim the title text\n */\nexport function textTrim(maxwidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxwidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxwidth || label.length < 4) {\n if (label.length < 4) {\n label = ' ';\n }\n return label;\n }\n }\n }\n return label;\n}\n/**\n * Function to compile the template function for maps.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(templateString) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(templateString).length) {\n templateFn = templateComplier(document.querySelector(templateString).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(templateString);\n }\n return templateFn;\n}\nexport function convertElementFromLabel(element, labelId, data, index, smithchart) {\n var labelEle = element[0];\n var templateHtml = labelEle.outerHTML;\n var properties = Object.keys(data);\n for (var i = 0; i < properties.length; i++) {\n templateHtml = templateHtml.replace(new RegExp('{{:' + properties[i] + '}}', 'g'), data[properties[i].toString()]);\n }\n return createElement('div', {\n id: labelId,\n innerHTML: templateHtml,\n styles: 'position: absolute'\n });\n}\nexport function _getEpsilonValue() {\n var e = 1.0;\n while ((1.0 + 0.5 * e) !== 1.0) {\n e *= 0.5;\n }\n return e;\n}\n/**\n * Method to calculate the width and height of the smithchart\n */\nexport function calculateSize(smithchart) {\n var containerWidth = smithchart.element.clientWidth;\n var containerHeight = smithchart.element.clientHeight;\n smithchart.availableSize = new SmithchartSize(stringToNumber(smithchart.width, containerWidth) || containerWidth || 600, stringToNumber(smithchart.height, containerHeight) || containerHeight || 450);\n}\n/**\n * Animation for template\n * @private\n */\nexport function templateAnimate(smithchart, element, delay, duration, name) {\n var opacity = 0;\n var delta;\n var value;\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n name: name,\n progress: function (args) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n value = opacity + (delta * 1);\n args.element.style.opacity = value.toString();\n },\n end: function (args) {\n var opacity = 1;\n args.element.style.opacity = opacity.toString();\n smithchart.trigger('animationComplete', event);\n },\n });\n}\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Internal use of path options\n * @private\n */\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n this.id = id;\n this.opacity = opacity;\n this.fill = fill;\n this.stroke = color;\n this['stroke-width'] = width;\n this['stroke-dasharray'] = dashArray;\n this.d = d;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Internal use of circle options\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('smithchartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'smithchartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.left = '0';\n htmlObject.style.top = '-100';\n htmlObject.style.whiteSpace = 'nowrap';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new SmithchartSize(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text) {\n this.id = id;\n this.x = x;\n this.y = y;\n this.anchor = anchor;\n this.text = text;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * To remove element by id\n */\nexport function removeElement(id) {\n var element = document.getElementById(id);\n return element ? remove(element) : null;\n}\n/**\n * Animation Effect Calculation Started Here\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\nexport function reverselinear(currentTime, startValue, endValue, duration) {\n return -startValue * Math.sin(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/** @private */\nexport function getAnimationFunction(effect) {\n var functionName;\n switch (effect) {\n case 'Linear':\n functionName = linear;\n break;\n case 'Reverse':\n functionName = reverselinear;\n break;\n }\n return functionName;\n}\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent) {\n var renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'opacity': font.opacity\n };\n var text = options.text;\n var renderer = new SvgRenderer('');\n var height;\n var htmlObject = renderer.createText(renderOptions, text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * Specifies Circular-Gauge Helper methods\n */\nimport { SvgRenderer, compile as templateComplier } from '@syncfusion/ej2-base';\nimport { merge } from '@syncfusion/ej2-base';\nimport { createElement, remove, setStyleAttribute } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns Size\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('gauge-measuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'gauge-measuretext' });\n document.body.appendChild(htmlObject);\n }\n var style = 'position: absolute; visibility: hidden;' +\n ';left: 0; top: -100; white-space: nowrap;' + getFontStyle(font);\n htmlObject.innerHTML = text;\n htmlObject.setAttribute('style', style);\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Function to find number from string\n * * @returns number\n * @private\n */\nexport function toPixel(value, maxDimension) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (maxDimension / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to get the style from FontModel.\n * @returns string\n * @private\n */\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/**\n * Function to set style to the element.\n * @private\n */\nexport function setStyles(element, fill, border) {\n setStyleAttribute(element, {\n 'stroke': border.color, 'stroke-width': border.width,\n 'fill': fill\n });\n}\n/**\n * Function to measure the element rect.\n * @returns ClientRect\n * @private\n */\nexport function measureElementRect(element) {\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n removeElement(element.id);\n return bounds;\n}\n/**\n * Function to convert the number from string.\n * @returns number\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to create the text element.\n * @returns Element\n * @private\n */\nexport function textElement(options, font, color, parent, styles) {\n var renderOptions = {};\n var htmlObject;\n var renderer = new SvgRenderer('');\n var style = styles + ' font-size:' + font.size + '; font-style:' + font.fontStyle +\n ' ; font-weight:' + font.fontWeight + '; font-family:' + font.fontFamily + ';';\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine,\n 'style': style\n };\n htmlObject = renderer.createText(renderOptions, options.text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Function to append the path to the element.\n * @returns Element\n * @private\n */\nexport function appendPath(options, element, gauge, functionName) {\n functionName = functionName ? functionName : 'Path';\n var htmlObject = gauge.renderer['draw' + functionName](options);\n htmlObject.setAttribute('transform', options.transform);\n htmlObject.setAttribute('style', options.style);\n element.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Function to calculate the sum of array values.\n * @returns number\n * @private\n */\nexport function calculateSum(from, to, values) {\n var sum = 0;\n var length = values.length;\n for (; from < length; from++) {\n sum += values[from];\n }\n return sum;\n}\n/**\n * Function to calculate the value for linear animation effect\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Function to get the angle from value for circular gauge.\n * @returns number\n * @private\n */\nexport function getAngleFromValue(value, maximumValue, minimumValue, startAngle, endAngle, isClockWise) {\n var angle;\n endAngle -= isCompleteAngle(startAngle, endAngle) ? 0.0001 : 0;\n startAngle -= 90;\n endAngle -= 90;\n if (isClockWise) {\n angle = ((value - minimumValue) * (getDegree(startAngle, endAngle) / (maximumValue - minimumValue))) + startAngle;\n }\n else {\n angle = endAngle - ((value - minimumValue) * (getDegree(startAngle, endAngle) / (maximumValue - minimumValue)));\n angle = angle < 0 ? 360 + angle : angle;\n }\n angle = Math.round(angle) >= 360 ? (angle - 360) : Math.round(angle) < 0 ? (360 + angle) : angle;\n return angle;\n}\n/**\n * Function to get the degree for circular gauge.\n * @returns number\n * @private\n */\nexport function getDegree(startAngle, endAngle) {\n var degree = endAngle - startAngle;\n return degree < 0 ? (degree + 360) : degree;\n}\n/**\n * Function to get the value from angle for circular gauge.\n * @returns number\n * @private\n */\nexport function getValueFromAngle(angle, maximumValue, minimumValue, startAngle, endAngle, isClockWise) {\n endAngle -= isCompleteAngle(startAngle, endAngle) ? 0.0001 : 0;\n angle = angle < startAngle ? (angle + 360) : angle;\n if (isClockWise) {\n return (((angle - startAngle) / getDegree(startAngle, endAngle)) * (maximumValue - minimumValue)) + minimumValue;\n }\n else {\n return maximumValue - ((((angle - startAngle) / getDegree(startAngle, endAngle)) * (maximumValue - minimumValue)) + minimumValue);\n }\n}\n/**\n * Function to check whether it's a complete circle for circular gauge.\n * @returns boolean\n * @private\n */\nexport function isCompleteAngle(startAngle, endAngle) {\n var totalAngle = endAngle - startAngle;\n totalAngle = totalAngle <= 0 ? (totalAngle + 360) : totalAngle;\n return Math.floor(totalAngle / 360) !== 0;\n}\n/**\n * Function to get angle from location for circular gauge.\n * @returns number\n * @private\n */\nexport function getAngleFromLocation(center, point) {\n var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n angle = Math.round((angle < 0 ? (6.283 + angle) : angle) * (180 / Math.PI)) - 270;\n angle += angle < 0 ? 360 : 0;\n return angle;\n}\n/**\n * Function to get the location from angle for circular gauge.\n * @returns GaugeLocation\n * @private\n */\nexport function getLocationFromAngle(degree, radius, center) {\n var radian = (degree * Math.PI) / 180;\n return new GaugeLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\n/**\n * Function to get the path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getPathArc(center, start, end, radius, startWidth, endWidth) {\n end -= isCompleteAngle(start, end) ? 0.0001 : 0;\n var degree = getDegree(start, end);\n var startRadius = radius - startWidth;\n var endRadius = radius - endWidth;\n var arcRadius = radius - ((startWidth + endWidth) / 2);\n if (startWidth !== undefined && endWidth !== undefined) {\n return getRangePath(getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), getLocationFromAngle(start, startRadius, center), getLocationFromAngle(end, endRadius, center), radius, arcRadius, arcRadius, (degree < 180) ? 0 : 1);\n }\n else {\n return getCirclePath(getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), radius, (degree < 180) ? 0 : 1);\n }\n}\n/**\n * Function to get the range path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getRangePath(start, end, innerStart, innerEnd, radius, startRadius, endRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y +\n ' A ' + radius + ' ' + radius + ' 0 ' +\n clockWise + ' 1 ' + end.x + ' ' + end.y +\n ' L ' + innerEnd.x + ' ' + innerEnd.y +\n ' A ' + endRadius + ' ' + startRadius + ' 0 ' +\n clockWise + ' 0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n}\n/**\n * Function to get the rounded path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getRoundedPathArc(center, actualStart, actualEnd, oldStart, oldEnd, radius, startWidth, endWidth) {\n actualEnd -= isCompleteAngle(actualStart, actualEnd) ? 0.0001 : 0;\n var degree = getDegree(actualStart, actualEnd);\n var startRadius = radius - startWidth;\n var endRadius = radius - endWidth;\n var arcRadius = radius - ((startWidth + endWidth) / 2);\n return getRoundedPath(getLocationFromAngle(actualStart, radius, center), getLocationFromAngle(actualEnd, radius, center), getLocationFromAngle(oldEnd, radius, center), getLocationFromAngle(oldEnd, endRadius, center), getLocationFromAngle(oldStart, radius, center), getLocationFromAngle(oldStart, startRadius, center), getLocationFromAngle(actualStart, startRadius, center), getLocationFromAngle(actualEnd, endRadius, center), radius, arcRadius, arcRadius, (degree < 180) ? 0 : 1);\n}\n/**\n * Function to get the rounded range path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getRoundedPath(start, end, outerOldEnd, innerOldEnd, outerOldStart, innerOldStart, innerStart, innerEnd, radius, startRadius, endRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y +\n ' A ' + radius + ' ' + radius + ' 0 ' +\n clockWise + ' 1 ' + end.x + ' ' + end.y +\n ' C ' + outerOldEnd.x + ' ' + outerOldEnd.y + ' ' + innerOldEnd.x + ' ' +\n innerOldEnd.y + ' ' + innerEnd.x + ' ' + innerEnd.y +\n ' A ' + endRadius + ' ' + startRadius + ' 0 ' +\n clockWise + ' 0 ' + innerStart.x + ' ' + innerStart.y +\n ' C ' + innerOldStart.x + ' ' + innerOldStart.y + ' ' + outerOldStart.x + ' ' +\n outerOldStart.y + ' ' + start.x + ' ' + start.y + ' Z';\n}\n/**\n * Function to calculate the complete path arc of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCompleteArc(center, start, end, radius, innerRadius) {\n end -= isCompleteAngle(start, end) ? 0.0001 : 0;\n var degree = getDegree(start, end);\n return getCompletePath(center, getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), radius, getLocationFromAngle(start, innerRadius, center), getLocationFromAngle(end, innerRadius, center), innerRadius, (degree < 180) ? 0 : 1);\n}\n/**\n * Function to get the circular path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCirclePath(start, end, radius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' +\n radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y;\n}\n/**\n * Function to get the complete path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCompletePath(center, start, end, radius, innerStart, innerEnd, innerRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise +\n ' 1 ' + end.x + ' ' + end.y + ' L ' + innerEnd.x + ' ' + innerEnd.y + ' A ' + innerRadius +\n ' ' + innerRadius + ' 0 ' + clockWise + ',0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n}\n/**\n * Function to get element from id.\n * @returns Element\n * @private\n */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * Function to compile the template function for circular gauge.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/**\n * Function to remove the element from id.\n * @private\n */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/**\n * Function to get current point for circular gauge using element id.\n * @returns IVisiblePointer\n * @private\n */\nexport function getPointer(targetId, gauge) {\n var tempString;\n tempString = targetId.split(gauge.element.id + '_Axis_')[1];\n return {\n axisIndex: +tempString[0],\n pointerIndex: +tempString[tempString.length - 1]\n };\n}\n/**\n * Function to convert the label using formar for cirular gauge.\n * @returns string\n * @private\n */\nexport function getLabelFormat(format) {\n var customLabelFormat = format && format.match('{value}') !== null;\n var skeleton = customLabelFormat ? '' : format;\n return skeleton;\n}\n/**\n * Function to calculate the marker shape for circular gauge.\n * @returns PathOption\n * @private\n */\nexport function calculateShapes(location, shape, size, url, options) {\n var path;\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX - height) + ' ' + (locY - (width / 2)) +\n 'L' + ' ' + (locX - height) + ' ' + (locY + (width / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + height) + ' ' + (locY - (width / 2)) +\n 'L' + ' ' + (locX + height) + ' ' + (locY + (width / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Image':\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return options;\n}\n/**\n * Function to get range color from value for circular gauge.\n * @returns string\n * @private\n */\nexport function getRangeColor(value, ranges, color) {\n var min = 0;\n var max = 0;\n var currentRange = ranges.filter(function (range) {\n min = Math.min(range.start, range.end);\n max = Math.max(range.start, range.end);\n return (value >= min && max >= value);\n });\n return currentRange.length ? currentRange[0].rangeColor : color;\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d, transform, style) {\n if (transform === void 0) { transform = ''; }\n if (style === void 0) { style = ''; }\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n _this.transform = transform;\n _this.style = style;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect) {\n var _this = _super.call(this, id) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = border.color;\n _this['stroke-width'] = border.width;\n return _this;\n }\n return RectOption;\n}(CustomizeOption));\nexport { RectOption };\n/**\n * Internal class size\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar GaugeLocation = /** @class */ (function () {\n function GaugeLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return GaugeLocation;\n}());\nexport { GaugeLocation };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, size) {\n this.text = text;\n this.value = value;\n this.size = size;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n","/**\n * These utility methods help to process the data and to convert it to desired dimensions\n */\n/** @private */\nexport function processPathData(data) {\n var collection = [];\n var j;\n var arrayCollection = parsePathData(data);\n if (arrayCollection.length > 0) {\n for (var i = 0; i < arrayCollection.length; i++) {\n var ob = arrayCollection[i];\n var char = '';\n char = ob[0];\n switch (char.toLowerCase()) {\n case 'm':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, x: ob[j], y: ob[j + 1] });\n j = j + 1;\n if (char === 'm') {\n char = 'l';\n }\n else if (char === 'M') {\n char = 'L';\n }\n }\n break;\n case 'l':\n case 't':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, x: ob[j], y: ob[j + 1] });\n j = j + 1;\n }\n break;\n case 'h':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, x: ob[j] });\n }\n break;\n case 'v':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, y: ob[j] });\n }\n break;\n case 'z':\n collection.push({ command: char });\n break;\n case 'c':\n for (j = 1; j < ob.length; j++) {\n collection.push({\n command: char, x1: ob[j], y1: ob[j + 1], x2: ob[j + 2], y2: ob[j + 3], x: ob[j + 4], y: ob[j + 5]\n });\n j = j + 5;\n }\n break;\n case 's':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, x2: ob[j], y2: ob[j + 1], x: ob[j + 2], y: ob[j + 3] });\n j = j + 3;\n }\n break;\n case 'q':\n for (j = 1; j < ob.length; j++) {\n collection.push({ command: char, x1: ob[j], y1: ob[j + 1], x: ob[j + 2], y: ob[j + 3] });\n j = j + 3;\n }\n break;\n case 'a':\n for (j = 1; j < ob.length; j++) {\n collection.push({\n command: char, r1: ob[j], r2: ob[j + 1], angle: ob[j + 2], largeArc: ob[j + 3],\n sweep: ob[j + 4], x: ob[j + 5], y: ob[j + 6]\n });\n j = j + 6;\n }\n break;\n }\n }\n }\n return collection;\n}\n/** @private */\nexport function parsePathData(data) {\n var tokenizer = /([a-z]+)|([+-]?(?:\\d+\\.?\\d*|\\.\\d+))/gi;\n var current = [];\n var commands = [];\n var match = {};\n tokenizer.lastIndex = 0;\n var isExponential = false;\n match = tokenizer.exec(data);\n while (match) {\n if (match[1] === 'e') {\n var s1 = '';\n isExponential = true;\n }\n else if (match[1]) {\n if (match[1].toLowerCase() === 'zm') {\n if (current.length) {\n commands.push(current);\n }\n commands.push(['Z']);\n current = [match[1].substring(1, 2)];\n }\n else {\n if (current.length) {\n commands.push(current);\n }\n current = [match[1]];\n }\n isExponential = false;\n }\n else {\n if (!current.length) {\n current = [];\n }\n if (!isExponential) {\n current.push(Number(match[2]));\n }\n isExponential = false;\n }\n match = tokenizer.exec(data);\n }\n if (current.length) {\n commands.push(current);\n }\n return commands;\n}\n/**\n * Used to find the path for rounded rect\n */\nexport function getRectanglePath(cornerRadius, height, width) {\n var x = 0;\n var y = 0;\n var path = '';\n var points = [{ x: x + cornerRadius, y: y }, { x: x + width - cornerRadius, y: y },\n { x: x + width, y: y + cornerRadius }, { x: x + width, y: y + height - cornerRadius },\n { x: x + width - cornerRadius, y: y + height }, { x: x + cornerRadius, y: y + height },\n { x: x, y: y + height - cornerRadius }, { x: x, y: y + cornerRadius }\n ];\n var corners = [{ x: x + width, y: y }, { x: x + width, y: y + height }, { x: x, y: y + height }, { x: x, y: y }];\n var corner = 0;\n var point2;\n var next;\n path = 'M' + points[0].x + ' ' + points[0].y;\n var i;\n for (i = 0; i < points.length; i = i + 2) {\n point2 = points[i + 1];\n path += 'L' + point2.x + ' ' + point2.y;\n next = points[i + 2] || points[0];\n path += 'Q' + corners[corner].x + ' ' + corners[corner].y + ' ' + next.x + ' ' + next.y;\n corner++;\n }\n return path;\n}\n/**\n * Used to find the path for polygon shapes\n */\nexport function getPolygonPath(collection) {\n var path = '';\n var seg;\n path = 'M' + collection[0].x + ' ' + collection[0].y;\n var i;\n for (i = 1; i < collection.length; i++) {\n seg = collection[i];\n path += 'L' + seg.x + ' ' + seg.y;\n }\n path += 'Z';\n return path;\n}\n/** @private */\nexport function pathSegmentCollection(collection) {\n var x0;\n var y0;\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n var initx;\n var inity;\n var segments = [];\n for (x = 0, y = 0, i = 0, length = collection.length; i < length; ++i) {\n var obj = collection[i];\n var seg = obj;\n var char = '';\n char = seg.command;\n if ('y1' in seg) {\n y1 = seg.y1;\n }\n if ('y2' in seg) {\n y2 = seg.y2;\n }\n if ('x1' in seg) {\n x1 = seg.x1;\n }\n if ('x2' in seg) {\n x2 = seg.x2;\n }\n if ('x' in seg) {\n x = seg.x;\n }\n if ('y' in seg) {\n y = seg.y;\n }\n var prev = segments[segments.length - 1];\n switch (char) {\n case 'M':\n segments.push({ command: 'M', x: x, y: y });\n break;\n case 'L':\n segments.push({ command: 'L', x0: x0, y0: y0, x: x, y: y });\n break;\n case 'H':\n segments.push({ command: 'L', x0: x0, y0: y0, x: x, y: y0 });\n break;\n case 'V':\n segments.push({ command: 'L', x0: x0, y0: y0, x: x0, y: y });\n break;\n case 'C':\n segments.push({ command: 'C', x0: x0, y0: y0, x1: x1, y1: y1, x2: x2, y2: y2, x: x, y: y });\n break;\n case 'S':\n if (prev) {\n var ctrl = void 0;\n if (prev.command === 'C' || prev.command === 'S') {\n ctrl = { x: prev.x2, y: prev.y2 };\n }\n else {\n ctrl = { x: x0, y: y0 };\n }\n var cpt2 = { x: 2 * x0 - ctrl.x, y: 2 * y0 - ctrl.y };\n segments.push({ command: 'C', x0: x0, y0: y0, x1: cpt2.x, y1: cpt2.y, x2: x2, y2: y2, x: x, y: y });\n }\n break;\n case 'Q':\n //ctx.quadraticCurveTo(x1, y1, x, y);\n segments.push({ command: 'Q', x0: x0, y0: y0, x1: x1, y1: y1, x: x, y: y });\n break;\n case 'T':\n if (prev) {\n var ctrl = void 0;\n if (prev.command === 'Q') {\n ctrl = { x: prev.x1, y: prev.y1 };\n }\n else {\n ctrl = { x: x0, y: y0 };\n }\n var cpt2 = { x: 2 * x0 - ctrl.x, y: 2 * y0 - ctrl.y };\n segments.push({ command: 'Q', x0: x0, y0: y0, x1: cpt2.x, y1: cpt2.y, x: x, y: y });\n }\n break;\n case 'A':\n var newSeg = seg;\n newSeg.command = 'A';\n segments.push(newSeg);\n break;\n case 'Z':\n case 'z':\n segments.push({ command: 'Z' });\n x = x0;\n y = y0;\n break;\n }\n if (char === 'M' || char === 'm') {\n initx = x;\n inity = y;\n }\n x0 = x;\n y0 = y;\n }\n return segments;\n}\n/** @private */\nexport function transformPath(arr, sX, sY, s, bX, bY, iX, iY) {\n var x0;\n var y0;\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n var newSeg;\n for (x = 0, y = 0, i = 0, length = arr.length; i < length; ++i) {\n var obj = arr[i];\n var seg = obj;\n var char = seg.command;\n if ('x' in seg) {\n x = seg.x;\n }\n if ('y' in seg) {\n y = seg.y;\n }\n if ('y1' in seg) {\n y1 = seg.y1;\n }\n if ('y2' in seg) {\n y2 = seg.y2;\n }\n if ('x1' in seg) {\n x1 = seg.x1;\n }\n if ('x2' in seg) {\n x2 = seg.x2;\n }\n if (s) {\n if (x !== undefined) {\n x = scalePathData(x, sX, bX, iX);\n }\n if (y !== undefined) {\n y = scalePathData(y, sY, bY, iY);\n }\n if (x1 !== undefined) {\n x1 = scalePathData(x1, sX, bX, iX);\n }\n if (y1 !== undefined) {\n y1 = scalePathData(y1, sY, bY, iY);\n }\n if (x2 !== undefined) {\n x2 = scalePathData(x2, sX, bX, iX);\n }\n if (y2 !== undefined) {\n y2 = scalePathData(y2, sY, bY, iY);\n }\n }\n else {\n if (x !== undefined) {\n x = Number((x + sX).toFixed(2));\n }\n if (y !== undefined) {\n y = Number((y + sY).toFixed(2));\n }\n if (x1 !== undefined) {\n x1 = Number((x1 + sX).toFixed(2));\n }\n if (y1 !== undefined) {\n y1 = Number((y1 + sY).toFixed(2));\n }\n if (x2 !== undefined) {\n x2 = Number((x2 + sX).toFixed(2));\n }\n if (y2 !== undefined) {\n y2 = Number((y2 + sY).toFixed(2));\n }\n }\n var scaledPath = { x: x, y: y, x1: x1, y1: y1, x2: x2, y2: y2, r1: seg.r1, r2: seg.r2 };\n newSeg = updatedSegment(seg, char, scaledPath, s, sX, sY);\n if (newSeg) {\n arr[i] = newSeg;\n }\n // Record the start of a subpath\n if (char === 'M' || char === 'm') {\n x0 = x;\n y0 = y;\n }\n }\n var pathData = getPathString(arr);\n return pathData;\n}\n/** @private */\nexport function updatedSegment(segment, char, obj, isScale, sX, sY) {\n switch (char) {\n case 'M':\n segment.x = obj.x;\n segment.y = obj.y;\n break;\n case 'L':\n segment.x = obj.x;\n segment.y = obj.y;\n break;\n case 'H':\n segment.x = obj.x;\n break;\n case 'V':\n segment.y = obj.y;\n break;\n case 'C':\n segment.x = obj.x;\n segment.y = obj.y;\n segment.x1 = obj.x1;\n segment.y1 = obj.y1;\n segment.x2 = obj.x2;\n segment.y2 = obj.y2;\n break;\n case 'S':\n segment.x = obj.x;\n segment.y = obj.y;\n segment.x2 = obj.x2;\n segment.y2 = obj.y2;\n break;\n case 'Q':\n segment.x = obj.x;\n segment.y = obj.y;\n segment.x1 = obj.x1;\n segment.y1 = obj.y1;\n break;\n case 'T':\n segment.x = obj.x;\n segment.y = obj.y;\n break;\n case 'A':\n var r1 = obj.r1;\n var r2 = obj.r2;\n if (isScale) {\n obj.r1 = r1 = (r1 * sX);\n obj.r2 = r2 = (r2 * sY);\n }\n segment.x = obj.x;\n segment.y = obj.y;\n segment.r1 = obj.r1;\n segment.r2 = obj.r2;\n break;\n case 'z':\n case 'Z':\n segment = { command: 'Z' };\n break;\n }\n return segment;\n}\n/** @private */\nexport function scalePathData(val, scaleFactor, oldOffset, newOffset) {\n if (val !== oldOffset) {\n if (newOffset !== oldOffset) {\n val = (((val * scaleFactor) - (Number(oldOffset) * scaleFactor - Number(oldOffset)))\n + (newOffset - Number(oldOffset)));\n }\n else {\n val = ((Number(val) * scaleFactor) - (Number(oldOffset) * scaleFactor - Number(oldOffset)));\n }\n }\n else {\n if (newOffset !== oldOffset) {\n val = newOffset;\n }\n }\n return Number(val.toFixed(2));\n}\n/** @private */\nexport function splitArrayCollection(arrayCollection) {\n var x0;\n var y0;\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n for (x = 0, y = 0, i = 0, length = arrayCollection.length; i < length; ++i) {\n var path = arrayCollection[i];\n var seg = path;\n var char = seg.command;\n if (/[MLHVCSQTA]/.test(char)) {\n if ('x' in seg) {\n seg.x = x = seg.x;\n }\n if ('y' in seg) {\n seg.y = y = seg.y;\n }\n }\n else {\n if ('x1' in seg) {\n seg.x1 = x1 = x + seg.x1;\n }\n if ('x2' in seg) {\n seg.x2 = x2 = x + seg.x2;\n }\n if ('y1' in seg) {\n seg.y1 = y1 = y + seg.y1;\n }\n if ('y2' in seg) {\n seg.y2 = y2 = y + seg.y2;\n }\n if ('x' in seg) {\n seg.x = x += seg.x;\n }\n if ('y' in seg) {\n seg.y = y += seg.y;\n }\n var newSeg = void 0;\n switch (char) {\n case 'm':\n case 'M':\n newSeg = { command: 'M', x: x, y: y };\n break;\n case 'l':\n case 'L':\n newSeg = { command: 'L', x: x, y: y };\n break;\n case 'h':\n case 'H':\n newSeg = { command: 'H', x: x };\n break;\n case 'v':\n case 'V':\n newSeg = { command: 'V', y: y };\n break;\n case 'c':\n case 'C':\n newSeg = { command: 'C', x: x, y: y, x1: x1, y1: y1, x2: x2, y2: y2 };\n break;\n case 's':\n case 'S':\n newSeg = { command: 'S', x: x, y: y, x2: x2, y2: y2 };\n break;\n case 'q':\n case 'Q':\n newSeg = { command: 'Q', x: x, y: y, x1: x1, y1: y1 };\n break;\n case 't':\n case 'T':\n newSeg = { command: 'T', x: x, y: y };\n break;\n case 'a':\n case 'A':\n newSeg = { command: 'A', x: x, y: y };\n newSeg.r1 = seg.r1;\n newSeg.r2 = seg.r2;\n newSeg.angle = seg.angle;\n newSeg.largeArc = seg.largeArc;\n newSeg.sweep = seg.sweep;\n break;\n case 'z':\n case 'Z':\n newSeg = { command: 'Z' };\n x = x0;\n y = y0;\n newSeg = arrayCollection[i];\n break;\n }\n if (newSeg) {\n arrayCollection[i] = newSeg;\n }\n }\n if (char === 'M' || char === 'm') {\n x0 = x;\n y0 = y;\n }\n }\n return arrayCollection;\n}\n/** @private */\nexport function getPathString(arrayCollection) {\n var getNewString = '';\n var i;\n for (i = 0; i < arrayCollection.length; i++) {\n if (i === 0) {\n getNewString += getString(arrayCollection[i]);\n }\n else {\n getNewString += ' ' + getString(arrayCollection[i]);\n }\n }\n return getNewString;\n}\n/** @private */\nexport function getString(obj) {\n var string = '';\n switch (obj.command) {\n case 'Z':\n case 'z':\n string = obj.command;\n break;\n case 'M':\n case 'm':\n case 'L':\n case 'l':\n string = obj.command + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'C':\n case 'c':\n string = obj.command + ' ' + obj.x1 + ' ' + obj.y1 + ' ' + obj.x2 + ' ' + obj.y2 + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'Q':\n case 'q':\n string = obj.command + ' ' + obj.x1 + ' ' + obj.y1 + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'A':\n case 'a':\n var cmd = obj.command;\n var ang = obj.angle;\n var l = (obj.largeArc ? '1' : '0');\n var s = (obj.sweep ? '1' : '0');\n string = cmd + ' ' + obj.r1 + ' ' + obj.r2 + ' ' + ang + ' ' + l + ' ' + s + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'H':\n case 'h':\n string = obj.command + ' ' + obj.x;\n break;\n case 'V':\n case 'v':\n string = obj.command + ' ' + obj.y;\n break;\n case 'S':\n case 's':\n string = obj.command + ' ' + obj.x2 + ' ' + obj.y2 + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'T':\n case 't':\n string = obj.command + ' ' + obj.x + ' ' + obj.y;\n }\n return string;\n}\n","/**\n * Matrix module is used to transform points based on offsets, angle\n */\n/** @private */\nexport var MatrixTypes;\n(function (MatrixTypes) {\n MatrixTypes[MatrixTypes[\"Identity\"] = 0] = \"Identity\";\n MatrixTypes[MatrixTypes[\"Translation\"] = 1] = \"Translation\";\n MatrixTypes[MatrixTypes[\"Scaling\"] = 2] = \"Scaling\";\n MatrixTypes[MatrixTypes[\"Unknown\"] = 4] = \"Unknown\";\n})(MatrixTypes || (MatrixTypes = {}));\n/** @private */\nvar Matrix = /** @class */ (function () {\n function Matrix(m11, m12, m21, m22, offsetX, offsetY, type) {\n this.m11 = m11;\n this.m12 = m12;\n this.m21 = m21;\n this.m22 = m22;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n // if (type === undefined) {\n // this.type = MatrixTypes.Unknown;\n // } else {\n // this.type = type;\n // }\n this.type = type;\n }\n return Matrix;\n}());\nexport { Matrix };\n/** @private */\nexport function identityMatrix() {\n return new Matrix(1, 0, 0, 1, 0, 0, MatrixTypes.Identity);\n}\n/** @private */\nexport function transformPointByMatrix(matrix, point) {\n var pt = multiplyPoint(matrix, point.x, point.y);\n return { x: Math.round(pt.x * 100) / 100, y: Math.round(pt.y * 100) / 100 };\n}\n/** @private */\nexport function transformPointsByMatrix(matrix, points) {\n var transformedPoints = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n transformedPoints.push(transformPointByMatrix(matrix, point));\n }\n return transformedPoints;\n}\n/** @private */\nexport function rotateMatrix(matrix, angle, centerX, centerY) {\n angle %= 360.0;\n multiplyMatrix(matrix, createRotationRadians(angle * 0.017453292519943295, centerX ? centerX : 0, centerY ? centerY : 0));\n}\n/** @private */\nexport function scaleMatrix(matrix, scaleX, scaleY, centerX, centerY) {\n if (centerX === void 0) { centerX = 0; }\n if (centerY === void 0) { centerY = 0; }\n multiplyMatrix(matrix, createScaling(scaleX, scaleY, centerX, centerY));\n}\n/** @private */\nexport function translateMatrix(matrix, offsetX, offsetY) {\n if (matrix.type & MatrixTypes.Identity) {\n matrix.type = MatrixTypes.Translation;\n setMatrix(matrix, 1.0, 0.0, 0.0, 1.0, offsetX, offsetY);\n return;\n }\n if (matrix.type & MatrixTypes.Unknown) {\n matrix.offsetX += offsetX;\n matrix.offsetY += offsetY;\n return;\n }\n matrix.offsetX += offsetX;\n matrix.offsetY += offsetY;\n matrix.type |= MatrixTypes.Translation;\n}\n/** @private */\nfunction createScaling(scaleX, scaleY, centerX, centerY) {\n var result = identityMatrix();\n result.type = !(centerX || centerY) ? MatrixTypes.Scaling : MatrixTypes.Scaling | MatrixTypes.Translation;\n setMatrix(result, scaleX, 0.0, 0.0, scaleY, centerX - scaleX * centerX, centerY - scaleY * centerY);\n return result;\n}\n/** @private */\nfunction createRotationRadians(angle, centerX, centerY) {\n var result = identityMatrix();\n var num = Math.sin(angle);\n var num2 = Math.cos(angle);\n var offsetX = centerX * (1.0 - num2) + centerY * num;\n var offsetY = centerY * (1.0 - num2) - centerX * num;\n result.type = MatrixTypes.Unknown;\n setMatrix(result, num2, num, -num, num2, offsetX, offsetY);\n return result;\n}\n/** @private */\nfunction multiplyPoint(matrix, x, y) {\n switch (matrix.type) {\n case MatrixTypes.Identity: break;\n case MatrixTypes.Translation:\n x += matrix.offsetX;\n y += matrix.offsetY;\n break;\n case MatrixTypes.Scaling:\n x *= matrix.m11;\n y *= matrix.m22;\n break;\n case MatrixTypes.Translation | MatrixTypes.Scaling:\n x *= matrix.m11;\n x += matrix.offsetX;\n y *= matrix.m22;\n y += matrix.offsetY;\n break;\n default:\n var num = y * matrix.m21 + matrix.offsetX;\n var num2 = x * matrix.m12 + matrix.offsetY;\n x *= matrix.m11;\n x += num;\n y *= matrix.m22;\n y += num2;\n break;\n }\n return { x: x, y: y };\n}\n/** @private */\nexport function multiplyMatrix(matrix1, matrix2) {\n var type = matrix1.type;\n var type2 = matrix2.type;\n if (type2 === MatrixTypes.Identity) {\n return;\n }\n if (type === MatrixTypes.Identity) {\n assignMatrix(matrix1, matrix2);\n matrix1.type = matrix2.type;\n return;\n }\n if (type2 === MatrixTypes.Translation) {\n matrix1.offsetX += matrix2.offsetX;\n matrix1.offsetY += matrix2.offsetY;\n if (type !== MatrixTypes.Unknown) {\n matrix1.type |= MatrixTypes.Translation;\n }\n return;\n }\n if (type !== MatrixTypes.Translation) {\n var num = type << 4 | type2;\n switch (num) {\n case 34:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n return;\n case 35:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n matrix1.offsetX = matrix2.offsetX;\n matrix1.offsetY = matrix2.offsetY;\n matrix1.type = (MatrixTypes.Translation | MatrixTypes.Scaling);\n return;\n case 36: break;\n default:\n {\n switch (num) {\n case 50:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n matrix1.offsetX *= matrix2.m11;\n matrix1.offsetY *= matrix2.m22;\n return;\n case 51:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n matrix1.offsetX = matrix2.m11 * matrix1.offsetX + matrix2.offsetX;\n matrix1.offsetY = matrix2.m22 * matrix1.offsetY + matrix2.offsetY;\n return;\n case 52: break;\n default:\n switch (num) {\n case 66:\n case 67:\n case 68: break;\n default: return;\n }\n break;\n }\n break;\n }\n }\n var result = identityMatrix();\n var m11New = matrix1.m11 * matrix2.m11 + matrix1.m12 * matrix2.m21;\n var m12New = matrix1.m11 * matrix2.m12 + matrix1.m12 * matrix2.m22;\n var m21New = matrix1.m21 * matrix2.m11 + matrix1.m22 * matrix2.m21;\n var m22New = matrix1.m21 * matrix2.m12 + matrix1.m22 * matrix2.m22;\n var offsetX_1 = matrix1.offsetX * matrix2.m11 + matrix1.offsetY * matrix2.m21 + matrix2.offsetX;\n var offsetY_1 = matrix1.offsetX * matrix2.m12 + matrix1.offsetY * matrix2.m22 + matrix2.offsetY;\n setMatrix(result, m11New, m12New, m21New, m22New, offsetX_1, offsetY_1);\n if (result.m21 || result.m12) {\n result.type = MatrixTypes.Unknown;\n }\n else {\n if (result.m11 && result.m11 !== 1.0 || result.m22 && result.m22 !== 1.0) {\n result.type = MatrixTypes.Scaling;\n }\n if (result.offsetX || result.offsetY) {\n result.type |= MatrixTypes.Translation;\n }\n if ((result.type & (MatrixTypes.Translation | MatrixTypes.Scaling)) === MatrixTypes.Identity) {\n result.type = MatrixTypes.Identity;\n }\n result.type = MatrixTypes.Scaling | MatrixTypes.Translation;\n }\n assignMatrix(matrix1, result);\n matrix1.type = result.type;\n return;\n }\n var offsetX = matrix1.offsetX;\n var offsetY = matrix1.offsetY;\n matrix1.offsetX = offsetX * matrix2.m11 + offsetY * matrix2.m21 + matrix2.offsetX;\n matrix1.offsetY = offsetX * matrix2.m12 + offsetY * matrix2.m22 + matrix2.offsetY;\n if (type2 === MatrixTypes.Unknown) {\n matrix1.type = MatrixTypes.Unknown;\n return;\n }\n matrix1.type = (MatrixTypes.Translation | MatrixTypes.Scaling);\n}\n/** @private */\nfunction setMatrix(mat, m11, m12, m21, m22, x, y) {\n mat.m11 = m11;\n mat.m12 = m12;\n mat.m21 = m21;\n mat.m22 = m22;\n mat.offsetX = x;\n mat.offsetY = y;\n}\n/** @private */\nfunction assignMatrix(matrix1, matrix2) {\n matrix1.m11 = matrix2.m11;\n matrix1.m12 = matrix2.m12;\n matrix1.m21 = matrix2.m21;\n matrix1.m22 = matrix2.m22;\n matrix1.offsetX = matrix2.offsetX;\n matrix1.offsetY = matrix2.offsetY;\n matrix1.type = matrix2.type;\n}\n","/**\n * BasicShapeDictionary defines the shape of the built-in basic shapes\n */\n/** @private */\nexport function getBasicShape(shape) {\n return basicShapes[shape.toString()];\n}\nvar basicShapes = {\n //Rectangle,\n 'Rectangle': 'M0,0 L50,0 L50,50 L0,50 z',\n //Ellipse,\n 'Ellipse': 'M80.5,12.5 C80.5,19.127417 62.59139,24.5 40.5,24.5 C18.40861,24.5 0.5,19.127417 0.5,12.5' +\n 'C0.5,5.872583 18.40861,0.5 40.5,0.5 C62.59139,0.5 80.5,5.872583 80.5,12.5 z',\n //Hexagon,\n 'Hexagon': 'M30,0 L60,0 L90,30 L60,60 L30,60 L0,30 L30,0 z',\n //Parallelogram,\n 'Parallelogram': 'M30,0 L60,0 L45,30 L15,30 z',\n //Triangle,\n 'Triangle': 'M45,0 L90,45 L0,45 L45,0 z',\n //Plus,\n 'Plus': 'M696.6084,158.2656 L674.8074,158.2656 L674.8074,136.4656 L658.4084,136.4656 L658.4084,158.2656 L636.6084,158.2656' +\n 'L636.6084,174.6646 L658.4084,174.6646 L658.4084,196.4656 L674.8074,196.4656 L674.8074,174.6646 L696.6084,174.6646' +\n 'L696.6084,158.2656 z',\n //Star,\n 'Star': 'M540.3643,137.9336 L546.7973,159.7016 L570.3633,159.7296 L550.7723,171.9366 L558.9053,194.9966 L540.3643,179.4996' +\n 'L521.8223,194.9966 L529.9553,171.9366 L510.3633,159.7296 L533.9313,159.7016 L540.3643,137.9336 z',\n //Pentagon,\n 'Pentagon': 'M30,0 L60,30 L50,70 L10,70 L0,30 L30,0 z',\n //Heptagon,\n 'Heptagon': 'M223.7783,195.7134 L207.1303,174.8364 L213.0713,148.8034 L237.1303,137.2174 L261.1883,148.8034 L267.1303,174.8364' +\n 'L250.4813,195.7134 L223.7783,195.7134 z',\n //Octagon,\n 'Octagon': 'M98.7319,196.4653 L81.1579,178.8923 L81.1579,154.0393 L98.7319,136.4653 L123.5849,136.4653' +\n 'L141.1579,154.0393 L141.1579,178.8923 L123.5849,196.4653 L98.7319,196.4653 z',\n //Trapezoid,\n 'Trapezoid': 'M127.2842,291.4492 L95.0322,291.4492 L81.1582,256.3152 L141.1582,256.3152 L127.2842,291.4492 z',\n //Decagon,\n 'Decagon': 'M657.3379,302.4141 L642.3369,291.5161 L636.6089,273.8821 L642.3369,256.2481 L657.3379,245.3511 L675.8789,245.3511' +\n 'L690.8789,256.2481 L696.6089,273.8821' +\n 'L690.8789,291.5161 L675.8789,302.4141 L657.3379,302.4141 z',\n //RightTriangle,\n 'RightTriangle': 'M836.293,292.9238 L776.293,292.9238 L776.293,254.8408 L836.293,292.9238 z',\n //Cylinder,\n 'Cylinder': 'M 542.802,362.009C 542.802,368.452 525.341,373.676 503.802,373.676C 482.263,373.676 464.802,368.452 464.802,362.009' +\n 'L 464.802,466.484C 464.802,472.928 482.263,478.151 503.802,478.151' +\n 'C 525.341,478.151 542.802,472.928 542.802,466.484L 542.802,362.016C 542.802,368.459 525.341,373.534 503.802,373.534' +\n 'C 482.263,373.534 464.802,368.31 464.802,361.867' +\n 'L 464.802,362.016C 464.802,355.572 482.263,350.349 503.802,350.349C 525.341,350.349 542.802,355.572 542.802,362.016',\n //Diamond,\n 'Diamond': 'M397.784,287.875 L369.5,316.159 L341.216,287.875 L369.5,259.591 L397.784,287.875 z'\n};\n","/**\n * ShapeDictionary defines the shape of the default nodes and ports\n */\n/** @private */\nexport function getPortShape(shape) {\n return portShapes[shape.toString()];\n}\n/** @private */\nexport function getDecoratorShape(shape, decorator) {\n if (shape === 'Custom') {\n return decorator.pathData;\n }\n return decoratorShapes[shape];\n}\n/**\n * @private\n * @param icon\n * sets the path data for different icon shapes\n */\nexport function getIconShape(icon) {\n var data;\n switch (icon.shape) {\n case 'Minus':\n data = 'M0,50 L100,50';\n break;\n case 'Plus':\n data = 'M0,-50 L0,50 M-50,0 L50,0';\n break;\n case 'ArrowUp':\n data = 'M0,100 L50,0 L100,100 Z';\n break;\n case 'ArrowDown':\n data = 'M0,0 L50,100 L100,0 Z';\n break;\n case 'Path':\n data = icon.pathData;\n break;\n }\n return data;\n}\nvar portShapes = {\n 'X': 'M14,14 L106,106 M106,14 L14,106',\n 'Circle': 'M0,50 A50,50,0 1 1 100,50 A50,50,0 1 1 0,50 Z',\n 'Square': 'M0,0 L10,0 L10,10 L0,10 z',\n};\nvar decoratorShapes = {\n 'OpenArrow': 'M15.9,23 L5,16 L15.9,9 L17,10.7 L8.7,16 L17,21.3Z',\n 'Square': 'M0,0 L10,0 L10,10 L0,10 z',\n 'Fletch': 'M14.8,10c0,0-3.5,6,0.2,12c0,0-2.5-6-10.9-6C4.1,16,11.3,16,14.8,10z',\n 'OpenFetch': 'M6,17c-0.6,0-1-0.4-1-1s0.4-1,1-1c10.9,0,11-5,11-5' +\n 'c0-0.6,0.4-1,1-1s1,0.4,1,1C19,10.3,18.9,17,6,17C6,17,6,17,6,17z ' +\n 'M18,23c-0.5,0-1-0.4-1-1c0-0.2-0.3-5-11-5c-0.6,0-1-0.5-1-1s0.4-1,1-1c0,0,0,0,0,0' +\n 'c12.9,0,13,6.7,13,7 C19,22.6,18.6,23,18,23z',\n 'IndentedArrow': 'M17,10c0,0-4.5,5.5,0,12L5,16L17,10z',\n 'OutdentedArrow': 'M14.6,10c0,0,5.4,6,0,12L5,16L14.6,10z',\n 'DoubleArrow': 'M19,10 L19,22 L13,16Z M12,10 L12,22 L6,16Z',\n 'Arrow': 'M15,10 L15,22 L5,16Z',\n 'Diamond': 'M12,23l-7-7l7-7l6.9,7L12,23z',\n 'Circle': 'M0,50 A50,50,0 1 1 100,50 A50,50,0 1 1 0,50 Z'\n};\n","/**\n * FlowShapeDictionary defines the shape of the built-in flow shapes\n */\n/** @private */\nexport function getFlowShape(shape) {\n return flowShapes[shape.toString()];\n}\nvar flowShapes = {\n // Process,\n 'Process': 'M419.511,76.687L359.511,76.687L359.511,43.086L419.511,43.086z',\n // Decision,\n 'Decision': 'M 253.005,115.687L 200.567,146.071L 148.097,115.687L 200.534,85.304L 253.005,115.687 Z',\n // Document,\n 'Document': 'M 60 31.9 c 0 0 -11 -7.7 -30 0 s -30 0 -30 0 V 0 h 60 V 31.9 Z',\n // PreDefinedProcess,\n 'PreDefinedProcess': 'M 0,0 L 50,0 L 50,50 L 0,50 Z M 8.334,0 L 8.334,50 M 41.667,0 L 41.667,50',\n // Terminator,\n 'Terminator': 'M 269.711,29.33C 269.71,44.061 257.77,56 243.04,56L 158.058,56C 143.33,56 131.39,44.061 131.39,29.33L 131.39,29.33' +\n 'C 131.391,14.6057 143.33,2.669 158.058,2.669L 243.044,2.669C 257.772,2.669 269.711,14.6057 269.711,29.333 Z',\n // PaperTap,\n 'PaperTap': 'M0.0009,17.2042 L0.0009,47.165 C0.001,47.165 14.403,53.5455 25.00,47.165 C35.599,40.7852 44.403,43.5087 50.00,47.165' +\n 'L50.001,17.2042 M50.001,32.7987 L50.001,2.8405 C50.001,2.8405 35.599,-3.5427 25.001,2.8405' +\n 'C14.403,9.2237 5.599,6.494 0.0009,2.8405 L0.0009,32.7987',\n // DirectData,\n 'DirectData': 'M 132.62 0 L 17.38 0 C 7.78 0 0 13.43 0 30 C 0 46.57 7.78 60 17.38 60 L 132.62 60 M 132.62 0' +\n 'C 123.02 0 115.24 13.43 115.24 30 C 115.24 46.57 123.02 60 132.62 60 C 142.22 60 150 46.57 150 30 C 150 13.43 142.22 0 132.62 0 z ',\n // SequentialData,\n 'SequentialData': 'M0.0029,24.999 C0.0029,11.1922 10.433,0.0021 23.295,0.0021 C36.159,0.00216 46.585,11.1922 46.585,24.999' +\n 'C46.585,38.8057 36.159,49.9979 23.295,49.9979 C10.433,49.9979 0.0029,38.8057 0.0029,24.999 z M23.294,49.999 L50.002,49.999',\n // Sort,\n 'Sort': 'M50.001,24.9971 L25.001,49.9971 L0.00097,24.9971 L25.001,-0.00286865 L50.001,24.9971 z' +\n ' M0.000976562,24.9971 L50.001,24.9971',\n // MultiDocument,\n 'MultiDocument': 'M43.6826,40 C44.8746,40.6183 45.8586,41.3502 46.8366,42.1122 L46.8366,4.74487 L3.09857,4.74487 L3.09857,10.9544' +\n ' M46.837,35.143 C48.027,35.765 49.025,36.604 50.003,37.369 L50.003,0.002 L6.264,0.002 L6.264,4.744 M43.682,47.113 L43.682,10.765' +\n ' L0.0025,10.7652 L0.0025,47.1132 C0.0025,47.1132 12.5846,53.6101 21.8426,47.1132 C31.1006,40.6163 38.792,43.393 43.6826,47.1132 z',\n // Collate,\n 'Collate': 'M50.001,0.0028 L25.001,25.0029 L0.00097,0.0028 L50.001,0.002 z M0.0009,50.002 L25.001,25.002' +\n 'L50.001,50.002 L0.0009,50.0029 z',\n // SummingJunction,\n 'SummingJunction': 'M7.3252,42.6768 L42.6772,7.3247 M42.6768,42.6768 L7.3248,7.3247 M0.0009,25.001 ' +\n 'C0.0009,11.193 11.197,0.0009 25.001,0.0009' +\n ' C38.809,0.0009 50.001,11.193 50.001,25.001 C50.001,38.809 38.809,50.001 25.001,50.001 C11.197,50.00 0.0009,38.809 0.0009,25.00 z',\n // Or,\n 'Or': 'M 0 50 L 100 50 M 50 100 L 50 0.0 M 0 50 C 0 22.384 22.392 0 50 0 C 77.616 0 100 22.384 100 50' +\n ' C 100 77.616 77.616 100 50 100 C 22.392 100 0 77.616 0 50 Z',\n // InternalStorage,\n 'InternalStorage': 'M 0 3.81946A 2.5,3.81946 0 0,1 2.5,0L 47.5 0A 2.5,3.81946 0 0,1 50,3.81946' +\n 'L 50 45.836A 2.5,3.819446 0 0,1 47.5,49.652778' +\n 'L 2.5 49.652778A 2.5,3.819446 0 0,1 0,45.8336L 0 3.819446ZM 0 11.45834L 50 11.4583334M 12.5 0L 12.5 49.652778',\n // Extract,\n 'Extract': 'M0,35 L30,0 L60,35 Z',\n // ManualOperation,\n 'ManualOperation': 'M46.4,28.8 L14.8,28.8 L0,0 L60,0 Z',\n // Merge,\n 'Merge': 'M60,0 L30,35 L0,0 Z',\n // OffPageReference,\n 'OffPageReference': 'M60,33.3 L30.1,39 L0,33.3 L0,0 L60,0 Z',\n // SequentialAccessStorage,\n 'SequentialAccessStorage': 'M 60 30 C 60 13.4 46.6 0 30 0 S 0 13.4 0 30 s 13.4 30 30 30 h 28.6 v -6.5 h -9.9' +\n 'C 55.5 48 60 39.5 60 30 Z',\n // Annotation,\n 'Annotation': 'M49.9984,50.0029 L-0.00271199,50.0029 L-0.00271199,0.00286865 L49.9984,0.00286865',\n // Annotation2,\n 'Annotation2': 'M49.9977,50.0029 L25.416,50.0029 L25.416,0.00286865 L49.9977,0.00286865 M25.4166,25.0029 L-0.00227869,25.0029',\n // Data,\n 'Data': 'M 10 0 L 40 0 L 30 40 L 0 40 Z',\n // Card,\n 'Card': 'M275,60 L400,60 L400,110 L260,110 L260,75 Z',\n // Delay,\n 'Delay': 'M0,0 L12.029,0 C14.212999,0 16,1.7869979 16,3.9709952 C16,6.1549926 14.212999,7.9409904 12.029,7.9409904 L0,7.9409904 z',\n // Preparation,\n 'Preparation': 'M 1048.17 572 C 1051.06 568.86 1055.17 567.05 1059.5 567 L 1094.51 567'\n + ' C 1098.84 567.05 1102.95 568.86 1105.84 572' +\n ' L 1126.43 595 C 1127.01 596.28 1127.01 597.72 1126.43 599 L 1105.84 622 C 1102.95 625.14 1098.84 626.95 1094.51 627' +\n ' L 1059.5 627 C 1055.17 626.95 1051.06 625.14 1048.17 622 L 1027.58 599 C 1027 597.72 1027 596.28 1027.58 595 L 1048.17 572 Z',\n // Display,\n 'Display': 'M47.8809,19.2914 L32.7968,-0.00594145 L11.3902,-0.00594145 C7.93166,-0.00594145 0.00124586,11.187 0.00124586,24.9968' +\n 'C0.00124586,38.8032 7.93166,49.9962 11.3902,49.9962 L32.7968,49.99 L47.615,31.038 C47.615,31.0388 52.798,24.9968 47.880,19.2914 z',\n // ManualInput,\n 'ManualInput': 'M 912 732 L 1006.85 707 C 1008.2 707 1009.5 707.53 1010.46 708.46 C 1011.41 709.4 1011.95 710.67 1011.95 712' +\n ' L 1011.95 762C 1012 764.41 1010.28 766.52 1007.87 767 L 917.1 767 C 915.75 767 914.45 766.47 913.49 765.54' +\n ' C 912.54 764.6 912 763.33 912 762 L 912 732 Z',\n // LoopLimit,\n 'LoopLimit': 'M 8 9 L 27 9 L 33 15 L 33 26 C 33 27 33 27 32 27 L 4 27 C 3 27 2 27 2 26 L 2 15 L 8 9 Z',\n // StoredData\n 'StoredData': 'M 5.55 0L 50 0A 1.5,30 0 0,1 50,0A 5.555,25 0 0,0 50,50A 1.5,30 0 0,1 50,50L 5.555 50A 5.55,25 0 0,1 5.555,0Z',\n};\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Defines the tooltip that should be shown when the mouse hovers over node.\n * An object that defines the description, appearance and alignments of tooltip\n */\nvar DiagramTooltip = /** @class */ (function (_super) {\n __extends(DiagramTooltip, _super);\n function DiagramTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], DiagramTooltip.prototype, \"content\", void 0);\n __decorate([\n Property('TopLeft')\n ], DiagramTooltip.prototype, \"position\", void 0);\n __decorate([\n Property('Mouse')\n ], DiagramTooltip.prototype, \"relativeMode\", void 0);\n __decorate([\n Property(true)\n ], DiagramTooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property('auto')\n ], DiagramTooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], DiagramTooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], DiagramTooltip.prototype, \"animation\", void 0);\n return DiagramTooltip;\n}(ChildProperty));\nexport { DiagramTooltip };\n/**\n * @private\n * defines the Tooltip.\n * @param diagram\n */\nexport function initTooltip(diagram) {\n var tooltipOption = new Tooltip;\n tooltipOption = updateTooltipContent(diagram.tooltip, tooltipOption);\n var tooltip = new Tooltip(tooltipOption);\n tooltip.beforeCollision = beforeCollision;\n tooltip.beforeOpen = beforeOpen;\n tooltip.cssClass = 'e-diagram-tooltip';\n tooltip.opensOn = 'custom';\n tooltip.appendTo('#' + diagram.element.id);\n tooltip.close();\n return tooltip;\n}\nfunction beforeOpen(args) {\n if ((this.content === '' || this.content === undefined)) {\n args.element.style.display = 'none';\n }\n}\nfunction beforeCollision(args) {\n if ((args.collidedPosition && args.collidedPosition !== this.position)) {\n args.element.style.display = 'none';\n }\n}\n/**\n * @private\n * updates the contents of the tooltip.\n * @param diagram\n * @param node\n */\nexport function updateTooltip(diagram, node) {\n var tooltip;\n var tooltipObject = diagram.tooltipObject;\n tooltip = node ? node.tooltip : diagram.tooltip;\n updateTooltipContent(tooltip, tooltipObject);\n return tooltipObject;\n}\nfunction updateTooltipContent(tooltip, tooltipObject) {\n if (tooltip.content) {\n tooltipObject.content = tooltip.content;\n tooltipObject.position = tooltip.position;\n tooltipObject.showTipPointer = tooltip.showTipPointer;\n tooltipObject.width = tooltip.width;\n tooltipObject.height = tooltip.height;\n if (!tooltip.animation) {\n tooltipObject.animation = { close: { effect: 'None' } };\n }\n else {\n tooltipObject.animation = tooltip.animation;\n }\n }\n else {\n tooltipObject.close();\n }\n return tooltipObject;\n}\n","import { Point } from './../primitives/point';\nimport { getPoints, intersect3 } from './diagram-util';\nimport { NoOfSegments } from '../enum/enum';\nimport { StraightSegment, BezierSegment, OrthogonalSegment } from './../objects/connector';\nimport { PathElement } from './../core/elements/path-element';\nimport { cornersPointsBeforeRotation, rotatePoint } from './base-util';\n/**\n * Connector modules are used to dock and update the connectors\n */\n/** @private */\nexport function findConnectorPoints(element, layoutOrientation) {\n var intermeditatePoints;\n var sourcePoint;\n if (element.type === 'Straight' || !element.sourceWrapper) {\n sourcePoint = getSourcePoint(element);\n }\n else {\n sourcePoint = element.sourceWrapper.corners.center;\n }\n intermeditatePoints = terminateConnection(element, sourcePoint, element.targetPoint, layoutOrientation);\n setLineEndPoint(element, intermeditatePoints[0], false);\n setLineEndPoint(element, intermeditatePoints[intermeditatePoints.length - 1], true);\n return intermeditatePoints;\n}\nfunction getSourcePoint(element) {\n var srcPoint;\n if (element.sourcePortWrapper) {\n var srcPort = element.sourcePortWrapper;\n var srcNode = element.sourceWrapper;\n var pt = { x: srcPort.offsetX, y: srcPort.offsetY };\n var direction = getPortDirection(pt, cornersPointsBeforeRotation(srcNode), srcNode.bounds, false);\n srcPoint = pt;\n }\n else if (element.sourceID && element.sourceWrapper) {\n if (element.targetWrapper) {\n var sPoint = element.sourceWrapper.corners.center;\n var tPoint = element.targetWrapper.corners.center;\n srcPoint = getIntersection(element, element.sourceWrapper, sPoint, tPoint, false);\n }\n else {\n srcPoint = element.sourcePoint;\n }\n }\n else {\n srcPoint = element.sourcePoint;\n }\n return srcPoint;\n}\nfunction getDirection(source, target, layoutOrientation) {\n if (layoutOrientation === 'LeftToRight') {\n source.direction = source.direction ? source.direction : 'Right';\n target.direction = target.direction ? target.direction : 'Left';\n }\n else if (layoutOrientation === 'RightToLeft') {\n source.direction = source.direction ? source.direction : 'Left';\n target.direction = target.direction ? target.direction : 'Right';\n }\n else if (layoutOrientation === 'TopToBottom') {\n source.direction = source.direction ? source.direction : 'Bottom';\n target.direction = target.direction ? target.direction : 'Top';\n }\n else if (layoutOrientation === 'BottomToTop') {\n source.direction = source.direction ? source.direction : 'Top';\n target.direction = target.direction ? target.direction : 'Bottom';\n }\n}\nfunction terminateConnection(element, srcPoint, tarPoint, layoutOrientation) {\n var sourceNode = element.sourceWrapper;\n var targetNode = element.targetWrapper;\n var sourcePort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var srcCorner;\n var tarCorner;\n var intermeditatePoints = [];\n var segPoint;\n var srcDir;\n var tarDir;\n var minSpace = 13;\n var sourceMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var targetMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var source = { corners: srcCorner, point: srcPoint, direction: srcDir, margin: sourceMargin };\n var target = { corners: tarCorner, point: tarPoint, direction: tarDir, margin: targetMargin };\n var sourceCorners;\n var targetCorners;\n if (sourceNode !== undefined && targetNode !== undefined) {\n sourceCorners = cornersPointsBeforeRotation(sourceNode);\n targetCorners = cornersPointsBeforeRotation(targetNode);\n source.corners = sourceNode.corners;\n target.corners = targetNode.corners;\n }\n if (sourcePort !== undefined) {\n var port = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n source.direction = getPortDirection(port, sourceCorners, sourceNode.bounds, false);\n }\n if (targetPort !== undefined) {\n var tarPortPt = { x: targetPort.offsetX, y: targetPort.offsetY };\n target.direction = getPortDirection(tarPortPt, targetCorners, targetNode.bounds, false);\n }\n if (sourceNode !== undefined && targetNode !== undefined) {\n if (source.direction === undefined || target.direction === undefined) {\n if (layoutOrientation) {\n getDirection(source, target, layoutOrientation);\n }\n else {\n if (source.corners.top > target.corners.bottom &&\n Math.abs(source.corners.top - target.corners.bottom) >\n (source.margin.top + source.margin.bottom)) {\n source.direction = source.direction ? source.direction : 'Top';\n target.direction = target.direction ? target.direction : 'Bottom';\n }\n else if (source.corners.bottom < target.corners.top &&\n Math.abs(source.corners.bottom - target.corners.top) >\n (source.margin.bottom + source.margin.top)) {\n source.direction = source.direction ? source.direction : 'Bottom';\n target.direction = target.direction ? target.direction : 'Top';\n }\n else if ((source.corners.right < target.corners.left &&\n Math.abs(source.corners.right - target.corners.left) >\n (source.margin.right + source.margin.left)) ||\n ((source.corners.right + minSpace < target.corners.left) ||\n (target.corners.right >= source.corners.left - minSpace && source.corners.left > target.corners.left))) {\n source.direction = source.direction ? source.direction : 'Right';\n target.direction = target.direction ? target.direction : 'Left';\n }\n else if ((source.corners.left > target.corners.right &&\n Math.abs(source.corners.left - target.corners.right) > (source.margin.left + source.margin.right)) ||\n ((target.corners.right + minSpace < source.corners.left ||\n (source.corners.right >= target.corners.left - minSpace\n && source.corners.left < target.corners.left)))) {\n source.direction = source.direction ? source.direction : 'Left';\n target.direction = target.direction ? target.direction : 'Right';\n }\n else {\n if (sourceNode.id !== targetNode.id && (!sourceCorners.equals(sourceCorners, targetCorners)) &&\n targetCorners.containsPoint(sourceCorners.topCenter, source.margin.top)) {\n source.direction = source.direction ? source.direction : 'Bottom';\n target.direction = target.direction ? target.direction : 'Top';\n }\n else {\n source.direction = source.direction ? source.direction : 'Top';\n target.direction = target.direction ? target.direction : 'Bottom';\n }\n }\n }\n }\n return defaultOrthoConnection(element, source.direction, target.direction, source.point, target.point);\n }\n //It will be called only when there is only one end node\n checkLastSegmentasTerminal(element);\n if (element.sourceWrapper || element.targetWrapper) {\n connectToOneEnd(element, source, target);\n }\n if (element.type === 'Straight' || element.type === 'Bezier') {\n intermeditatePoints = intermeditatePointsForStraight(element, source, target);\n }\n else {\n if (element.type === 'Orthogonal' && element.segments && element.segments.length > 0 &&\n element.segments[0].length !== null &&\n element.segments[0].direction !== null) {\n intermeditatePoints = findPointToPointOrtho(element, source, target, sourceNode, targetNode, sourcePort, targetPort);\n }\n else {\n var extra = void 0;\n if (!source.direction) {\n source.direction = (target.direction) ? ((element.targetPortWrapper !== undefined) ? target.direction : getOppositeDirection(target.direction)) :\n Point.direction(source.point, target.point);\n }\n else {\n extra = adjustSegmentLength(sourceNode.bounds, source, 20);\n }\n element.segments[0].points = intermeditatePoints = orthoConnection3Segment(element, source, target, extra);\n }\n }\n return intermeditatePoints;\n}\nfunction updateSegmentPoints(source, segment) {\n var segPoint;\n var angle;\n var extra;\n source.direction = segment.direction;\n segment.points = [];\n segment.points.push(source.point);\n extra = (segment.direction === 'Left' || segment.direction === 'Top') ? -(segment.length) : segment.length;\n angle = (segment.direction === 'Left' || segment.direction === 'Right') ? 0 : 90;\n segPoint = addLineSegment(source.point, extra, angle);\n segment.points.push(segPoint);\n return segPoint;\n}\nfunction pointToPoint(element, source, target) {\n var point;\n var direction;\n var portdirection;\n source.corners = (element.sourceWrapper) ? element.sourceWrapper.corners : undefined;\n if (element.sourcePortWrapper) {\n var port = { x: element.sourcePortWrapper.offsetX, y: element.sourcePortWrapper.offsetY };\n portdirection = getPortDirection(port, cornersPointsBeforeRotation(element.sourceWrapper), element.sourceWrapper.bounds, false);\n if (source.corners && (source.direction === 'Bottom' || source.direction === 'Top')) {\n if (target.point.x > source.corners.left && target.point.x < source.corners.right) {\n direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n }\n }\n else if (source.corners && (source.direction === 'Left' || source.direction === 'Right')) {\n if (target.point.y > source.corners.top && target.point.y < source.corners.bottom) {\n direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n }\n }\n }\n if (element.sourcePortWrapper && portdirection === getOppositeDirection(direction)) {\n var length_1;\n if ((portdirection === 'Left' || portdirection === 'Right') && (source.point.y >= source.corners.top\n && source.point.y <= source.corners.center.y) &&\n (target.point.y >= source.corners.top && target.point.y <= source.corners.center.y)) {\n source.direction = 'Top';\n length_1 = source.point.y - source.corners.top + 20;\n }\n else if ((portdirection === 'Left' || portdirection === 'Right') && (source.point.y > source.corners.center.y\n && source.point.y <= source.corners.bottom) &&\n (target.point.y > source.corners.center.y && target.point.y <= source.corners.bottom)) {\n source.direction = 'Bottom';\n length_1 = source.corners.bottom - source.point.y + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x >= source.corners.left\n && source.point.x <= source.corners.center.x) &&\n (target.point.x >= source.corners.left && target.point.x <= source.corners.center.x)) {\n source.direction = 'Left';\n length_1 = source.point.x - source.corners.left + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x <= source.corners.right\n && source.point.x > source.corners.center.x) &&\n (target.point.x <= source.corners.right && target.point.x < source.corners.center.x)) {\n source.direction = 'Right';\n length_1 = source.corners.right - source.point.x + 20;\n }\n if (source.direction && length_1) {\n point = orthoConnection3Segment(element, source, target, length_1, true);\n }\n }\n else {\n source.direction = (direction) ? direction : findSourceDirection(source.direction, source.point, target.point);\n point = orthoConnection2Segment(source, target);\n }\n return point;\n}\nfunction pointToNode(element, source, target) {\n var point;\n target.corners = element.targetWrapper.corners;\n findDirection(element.targetWrapper, source, target, element);\n var direction = findSourceDirection(target.direction, source.point, target.point);\n if (source.direction === target.direction && (source.direction === 'Left' || source.direction === 'Right')) {\n source.direction = direction;\n point = orthoConnection3Segment(element, source, target, element.targetWrapper.width / 2 + 20);\n var source1 = source;\n source1.point = point[1];\n findDirection(element.targetWrapper, source, target, element);\n point = orthoConnection3Segment(element, source, target);\n }\n else {\n source.direction = direction;\n point = orthoConnection2Segment(source, target);\n }\n return point;\n}\nfunction addPoints(element, source, target) {\n var refPoint;\n target.corners = element.targetWrapper.corners;\n var direction;\n var length;\n if (source.direction !== 'Left' && source.direction !== 'Right') {\n if (target.corners.center.y === source.point.y &&\n (!(target.corners.left <= source.point.x && source.point.x <= target.corners.right))) {\n direction = 'Top';\n length = target.corners.height / 2 + 20;\n }\n else if ((target.corners.center.y === source.point.y &&\n element.segments[element.segments.length - 2].direction === 'Bottom') ||\n (target.corners.center.y > source.point.y && source.point.y >= target.corners.top)) {\n direction = 'Top';\n length = (source.point.y - target.corners.top) + 20;\n }\n else if ((target.corners.center.y === source.point.y &&\n element.segments[element.segments.length - 2].direction === 'Top') ||\n (target.corners.center.y < source.point.y && source.point.y <= target.corners.bottom)) {\n direction = 'Bottom';\n length = (target.corners.bottom - source.point.y) + 20;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n source.corners.top <= source.point.y && source.point.y <= source.corners.bottom) {\n direction = source.direction;\n length = (source.point.y > target.point.y) ? (source.point.y - source.corners.top + 20) :\n (source.corners.bottom - source.point.y + 20);\n }\n }\n else {\n if (target.corners.center.x === source.point.x &&\n (!(target.corners.top < source.point.y && source.point.y <= target.corners.bottom))) {\n direction = 'Left';\n length = target.corners.width / 2 + 20;\n }\n else if ((target.corners.center.x === source.point.x &&\n element.segments[element.segments.length - 2].direction === 'Right')\n || (target.corners.center.x > source.point.x && source.point.x >= target.corners.left)) {\n direction = 'Left';\n length = (source.point.x - target.corners.left) + 20;\n }\n else if ((target.corners.center.x === source.point.x &&\n element.segments[element.segments.length - 2].direction === 'Left') ||\n (target.corners.center.x <= source.point.x && source.point.x <= target.corners.right)) {\n direction = 'Right';\n length = (target.corners.right - source.point.x) + 20;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n source.corners.left <= source.point.x && source.point.x <= source.corners.right) {\n direction = source.direction;\n length = (source.point.x > target.point.x) ? (source.point.x - source.corners.left + 20) :\n (source.corners.right - source.point.x + 20);\n }\n }\n var extra = (direction === 'Left' || direction === 'Top') ? -(length) : length;\n var angle = (direction === 'Left' || direction === 'Right') ? 0 : 90;\n refPoint = source.point;\n source.point = addLineSegment(source.point, extra, angle);\n source.direction = Point.direction(source.point, target.point);\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n (source.corners.center.x === target.corners.center.x || source.corners.center.y === target.corners.center.y)) {\n source.direction = target.direction;\n }\n var point = orthoConnection3Segment(element, source, target);\n point.splice(0, 0, refPoint);\n return point;\n}\nfunction findSegmentDirection(element, source, target, portDir) {\n var update = false;\n switch (target.direction) {\n case 'Left':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined && (portDir === 'Right' &&\n source.point.x > target.point.x && source.point.y >= source.corners.top &&\n source.point.y <= source.corners.bottom)\n || (((portDir === 'Bottom' && source.point.y > target.point.y) ||\n (portDir === 'Top' && source.point.y < target.point.y)) &&\n source.point.x >= source.corners.left && source.point.x <= source.corners.right)) {\n source.direction = (portDir === 'Right') ? ((source.point.y > target.point.y) ? 'Top' : 'Bottom') :\n (source.point.x < target.point.x ? 'Right' : 'Left');\n update = true;\n }\n else if (source.point.x > target.point.x && (source.point.y > target.point.y || source.point.y < target.point.y)\n && (!(target.corners.top > source.point.y && target.corners.bottom < source.point.y))) {\n source.direction = 'Left';\n }\n else if ((source.point.x < target.point.x && source.point.y > target.point.y) ||\n (source.point.x > target.point.x && (source.point.y <= target.point.y)\n && ((target.corners.top < source.point.y && target.corners.center.y >= source.point.y)))) {\n source.direction = 'Top';\n }\n else if ((source.point.x < target.point.x && source.point.y < target.point.y) ||\n (source.point.x > target.point.x && (source.point.y > target.point.y)\n && ((target.corners.bottom < source.point.y && target.corners.center.y > source.point.y)))) {\n source.direction = 'Bottom';\n }\n else if (source.point.y === target.point.y && source.point.x < target.point.x) {\n source.direction = 'Right';\n }\n break;\n case 'Right':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n ((portDir === 'Bottom' && source.point.y > target.point.y) ||\n (portDir === 'Top' && source.point.y < target.point.y)) && source.point.x > target.point.x &&\n (source.point.x >= source.corners.left && source.point.x <= source.corners.right)) {\n source.direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n update = true;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n portDir === 'Left' && source.point.x < target.point.x && (source.point.y >= source.corners.top &&\n source.point.y <= source.corners.bottom)) {\n source.direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n update = true;\n }\n else if (source.point.x < target.point.x && target.corners.top <= source.point.y\n && target.corners.bottom >= source.point.y && source.point.y === target.point.y) {\n source.direction = 'Top';\n }\n else if (source.point.y > target.point.y && source.point.x > target.point.x) {\n source.direction = 'Top';\n }\n else if (source.point.y < target.point.y && source.point.x > target.point.x) {\n source.direction = 'Bottom';\n }\n else if (source.point.x < target.point.x && (source.point.y > target.point.y ||\n source.point.y < target.point.y)) {\n source.direction = 'Right';\n }\n else if (source.point.y === target.point.y && source.point.x > target.point.x) {\n source.direction = 'Left';\n }\n break;\n case 'Top':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined && (portDir === 'Bottom' &&\n source.point.y > target.point.y && source.point.x >= source.corners.left &&\n source.point.x <= source.corners.right) || (((portDir === 'Right' && source.point.x > target.point.x) ||\n (portDir === 'Left' && target.point.y > source.point.y && target.point.x > source.point.x)) &&\n (source.point.y >= source.corners.top && source.point.y <= source.corners.bottom))) {\n source.direction = (portDir === 'Bottom') ? ((source.point.x > target.point.x) ? 'Left' : 'Right') :\n (source.point.y < target.point.y) ? 'Bottom' : 'Top';\n update = true;\n }\n else if (source.point.x === target.point.x && source.point.y < target.point.y) {\n source.direction = 'Bottom';\n }\n else if (source.point.y > target.point.y && source.point.x > target.corners.left &&\n source.point.x < target.corners.right) {\n source.direction = 'Left';\n }\n else if (source.point.y >= target.point.y) {\n source.direction = 'Top';\n }\n else if (source.point.y < target.point.y && source.point.x > target.point.x) {\n source.direction = 'Left';\n }\n else if (source.point.y < target.point.y && source.point.x < target.point.x) {\n source.direction = 'Right';\n }\n break;\n case 'Bottom':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined && ((((portDir === 'Right') ||\n (portDir === 'Left' && target.point.x > source.point.x)) && (source.point.y > target.point.y) &&\n source.point.y >= source.corners.top && source.point.y <= source.corners.bottom) ||\n (((portDir === 'Top' && source.point.y < target.point.y)) &&\n (source.point.x >= source.corners.left && source.point.x <= source.corners.right)))) {\n if (portDir === 'Right' || portDir === 'Left') {\n source.direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n }\n else {\n source.direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n }\n update = true;\n }\n else if (source.point.y < target.point.y && source.point.x > target.corners.left &&\n target.corners.right > source.point.x) {\n if (source.point.y < target.point.y && source.point.x > target.corners.left &&\n target.corners.center.x >= source.point.x) {\n source.direction = 'Left';\n }\n else if (source.point.y < target.point.y && source.point.x < target.corners.right &&\n target.corners.center.x < source.point.x) {\n source.direction = 'Right';\n }\n }\n else if (source.point.y > target.point.y && source.point.x > target.point.x) {\n source.direction = 'Left';\n }\n else if (source.point.y > target.point.y && source.point.x < target.point.x) {\n source.direction = 'Right';\n }\n else if (source.point.y <= target.point.y && (source.point.x > target.point.x || target.point.x > source.point.x)) {\n source.direction = 'Bottom';\n }\n break;\n }\n return update;\n}\nfunction pointToPort(element, source, target) {\n var point;\n target.corners = element.targetWrapper.corners;\n var portdirection;\n var length;\n if (element.sourcePortWrapper !== undefined) {\n var port = { x: element.sourcePortWrapper.offsetX, y: element.sourcePortWrapper.offsetY };\n portdirection = getPortDirection(port, cornersPointsBeforeRotation(element.sourceWrapper), element.sourceWrapper.bounds, false);\n }\n var update = findSegmentDirection(element, source, target, portdirection);\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n target.direction === getOppositeDirection(portdirection) &&\n ((((target.direction === 'Left' && source.point.x > target.point.x) || (target.direction === 'Right' &&\n source.point.x < target.point.x)) && source.point.y >= source.corners.top &&\n source.point.y <= source.corners.bottom) || (target.direction === 'Bottom' && source.point.y < target.point.y &&\n (source.point.x >= source.corners.left && source.point.x <= source.corners.right)))) {\n point = addPoints(element, source, target);\n }\n else if (source.direction === target.direction) {\n point = orthoConnection3Segment(element, source, target);\n }\n else if ((((target.direction === 'Left' && source.point.x > target.point.x) ||\n (target.direction === 'Right' && source.point.x < target.point.x)) && (source.direction === 'Top' || source.direction === 'Bottom')\n && ((source.point.y <= target.point.y) &&\n ((target.corners.top <= source.point.y && target.corners.bottom >= source.point.y)))) ||\n ((target.direction === 'Top' && source.point.y > target.point.y) ||\n (target.direction === 'Bottom' && source.point.y < target.point.y) &&\n ((target.corners.left <= source.point.x && target.corners.right >= source.point.x)))) {\n point = addPoints(element, source, target);\n }\n else {\n if (element.sourceWrapper !== undefined && element.targetWrapper !== undefined && element.targetPortWrapper !== undefined &&\n ((source.direction === 'Left' || source.direction === 'Right') &&\n (source.point.y >= source.corners.top && source.point.y <= source.corners.bottom)\n && (target.direction === 'Top' || target.direction === 'Bottom') &&\n (target.corners.center.x === source.corners.center.x))) {\n source.direction = (target.direction === 'Top') ? 'Bottom' : 'Top';\n length = (target.direction === 'Top') ? (source.corners.bottom - source.point.y + 20) :\n (source.point.y - source.corners.top + 20);\n point = orthoConnection3Segment(element, source, target, length);\n }\n else if (element.sourceWrapper !== undefined && element.targetWrapper !== undefined && element.targetPortWrapper !== undefined &&\n ((source.direction === 'Top' || source.direction === 'Bottom') &&\n (source.point.x >= source.corners.left && source.point.x <= source.corners.right) &&\n (target.direction === 'Left' || target.direction === 'Right') && (target.corners.center.y === source.corners.center.y))) {\n source.direction = (target.direction === 'Left') ? 'Right' : 'Left';\n length = (target.direction === 'Left') ? (source.corners.right - source.point.x + 20) :\n (source.point.x - source.corners.left + 20);\n point = orthoConnection3Segment(element, source, target, length);\n }\n else if (update) {\n if (source.direction === 'Left' || source.direction === 'Right') {\n length = (source.direction === 'Left') ? (source.point.x - source.corners.left + 20) :\n (source.corners.right - source.point.x + 20);\n }\n else {\n length = (source.direction === 'Top') ? (source.point.y - source.corners.top + 20) :\n (source.corners.bottom - source.point.y + 20);\n }\n point = orthoConnection3Segment(element, source, target, length);\n }\n else {\n point = orthoConnection2Segment(source, target);\n }\n }\n return point;\n}\nfunction findPointToPointOrtho(element, source, target, sourceNode, targetNode, sourcePort, targetPort) {\n var j;\n var point;\n var intermeditatePoints = [];\n var direction;\n var port;\n var seg;\n checkLastSegmentasTerminal(element);\n var removeSegment;\n if (element.segments.length > 0) {\n for (var i = 0; i < element.segments.length; i++) {\n var seg_1 = element.segments[i];\n if (i === 0 && element.sourcePortWrapper !== undefined) {\n port = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n direction = getPortDirection(port, cornersPointsBeforeRotation(sourceNode), sourceNode.bounds, false);\n if (seg_1.direction === getOppositeDirection(direction)) {\n seg_1.direction = direction;\n }\n }\n if (i > 0 && element.segments[i - 1].direction === seg_1.direction) {\n i = checkConsectiveSegmentAsSame(element, i, source);\n }\n else {\n var lastSegment = element.segments[i - 1];\n source.point = (seg_1.direction) ? updateSegmentPoints(source, seg_1) :\n lastSegment.points[lastSegment.points.length - 1];\n }\n if (i === element.segments.length - 1) {\n if (!targetPort && !targetNode) {\n point = pointToPoint(element, source, target);\n }\n else if (element.targetWrapper && element.targetPortWrapper === undefined) {\n checkSourcePointInTarget(element, source);\n point = pointToNode(element, source, target);\n }\n else {\n point = pointToPort(element, source, target);\n }\n checkPreviousSegment(point, element, source);\n seg_1.points = [];\n if (point.length >= 2) {\n for (j = 0; j < point.length; j++) {\n seg_1.points.push(point[j]);\n }\n }\n else {\n removeSegment = i;\n }\n }\n if (sourcePort && i === 0) {\n var sourcePoint = checkPortdirection(element, sourcePort, sourceNode);\n if (sourcePoint) {\n source.point = sourcePoint;\n }\n }\n }\n if (removeSegment !== undefined) {\n if (removeSegment === element.segments.length - 1) {\n element.segments[removeSegment - 1].direction = null;\n element.segments[removeSegment - 1].length = null;\n }\n element.segments.splice(removeSegment, 1);\n }\n intermeditatePoints = returnIntermeditatePoints(element, intermeditatePoints);\n }\n return intermeditatePoints;\n}\nfunction checkPortdirection(element, sourcePort, sourceNode) {\n var port = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n var point;\n var bounds = cornersPointsBeforeRotation(sourceNode);\n var direction = getPortDirection(port, bounds, sourceNode.bounds, false);\n var seg = element.segments[0];\n if (seg.direction !== direction) {\n pointsFromNodeToPoint(seg, direction, bounds, seg.points[0], seg.points[seg.points.length - 1], false);\n point = seg.points[seg.points.length - 1];\n seg.direction = Point.direction(seg.points[seg.points.length - 2], seg.points[seg.points.length - 1]);\n }\n return point;\n}\nfunction checkPreviousSegment(tPoints, connector, source) {\n var actualSegment = connector.segments[connector.segments.length - 2];\n var actualLastPoint = actualSegment.points[actualSegment.points.length - 1];\n var direction;\n if (((actualSegment.direction === 'Top' || actualSegment.direction === 'Bottom') && (actualLastPoint.x === tPoints[1].x)) ||\n ((actualSegment.direction === 'Left' || actualSegment.direction === 'Right') && (actualLastPoint.y === tPoints[1].y))) {\n actualSegment.points[actualSegment.points.length - 1] = tPoints[1];\n direction = Point.direction(actualSegment.points[0], actualSegment.points[actualSegment.points.length - 1]);\n if (connector.sourceWrapper !== undefined && connector.sourcePortWrapper === undefined &&\n direction === getOppositeDirection(actualSegment.direction)) {\n if (actualSegment.direction === 'Left' || actualSegment.direction === 'Right') {\n actualSegment.points[0].x = (actualSegment.direction === 'Right') ?\n actualSegment.points[0].x - connector.sourceWrapper.corners.width :\n actualSegment.points[0].x + connector.sourceWrapper.corners.width;\n }\n else {\n actualSegment.points[0].y = (actualSegment.direction === 'Bottom') ?\n actualSegment.points[0].y - connector.sourceWrapper.corners.height :\n actualSegment.points[0].y + connector.sourceWrapper.corners.height;\n }\n }\n actualSegment.direction = direction;\n actualSegment.length = Point.distancePoints(actualSegment.points[0], actualSegment.points[actualSegment.points.length - 1]);\n tPoints.splice(0, 1);\n }\n}\nfunction connectToOneEnd(element, source, target) {\n var sourcePort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var node = element.sourceWrapper;\n var fixedPoint = source.point;\n var nodeMargin = { left: 0, right: 0, top: 0, bottom: 0 };\n var nodeConnectingPoint = { x: 0, y: 0 };\n var refPoint;\n var nodeDirection = 'Top';\n if (!node) {\n node = element.targetWrapper;\n nodeMargin = target.margin;\n }\n else {\n fixedPoint = target.point;\n nodeMargin = source.margin;\n }\n if (element.type === 'Orthogonal') {\n if ((element.segments && element.segments.length > 0) && element.sourceWrapper &&\n element.segments[0].direction) {\n source.direction = element.segments[0].direction;\n nodeConnectingPoint = findPoint(node.corners, source.direction);\n refPoint = findPoint(node.corners, getOppositeDirection(source.direction));\n nodeConnectingPoint = getIntersection(element, node, nodeConnectingPoint, refPoint, false);\n }\n else {\n var source_1 = { corners: null, direction: null, point: fixedPoint, margin: nodeMargin };\n var target_1 = { corners: null, direction: null, point: null, margin: null };\n findDirection(node, source_1, target_1, element);\n nodeConnectingPoint = target_1.point;\n nodeDirection = target_1.direction;\n }\n }\n else {\n var segmentPoint = void 0;\n if (element.segments && element.segments.length > 1) {\n if (node === element.sourceWrapper) {\n segmentPoint = element.segments[0].point;\n }\n else {\n segmentPoint = element.segments[element.segments.length - 2].point;\n }\n }\n nodeConnectingPoint = getIntersection(element, node, node.bounds.center, (element.segments && element.segments.length > 1) ? segmentPoint : fixedPoint, node === element.targetWrapper);\n }\n if (node === element.sourceWrapper) {\n source.direction = source.direction || nodeDirection;\n source.point = nodeConnectingPoint;\n if (element.sourcePortWrapper) {\n source.point = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n }\n }\n else {\n target.direction = target.direction || nodeDirection;\n target.point = nodeConnectingPoint;\n if (element.targetPortWrapper) {\n target.point = { x: targetPort.offsetX, y: targetPort.offsetY };\n }\n }\n}\nfunction checkSourceAndTargetIntersect(sourceWrapper, targetWrapper) {\n var sourceSegment = createSegmentsCollection(sourceWrapper);\n var targetSegment = createSegmentsCollection(targetWrapper);\n for (var i = 0; i < sourceSegment.length - 1; i++) {\n var srcSegment = sourceSegment[i];\n for (var j = 0; j < targetSegment.length - 1; j++) {\n var tarSegmet = targetSegment[j];\n if (intersect3(srcSegment, tarSegmet).enabled) {\n return true;\n }\n }\n }\n return false;\n}\nfunction createSegmentsCollection(sourceWrapper) {\n var segments = [];\n var points = getPoints(sourceWrapper, sourceWrapper.corners);\n points.push(points[0]);\n for (var i = 0; i < points.length - 1; i++) {\n segments.push(createLineSegment(points[i], points[i + 1]));\n }\n return segments;\n}\nfunction createLineSegment(sPt, tPt) {\n var line = { x1: sPt.x, y1: sPt.y, x2: tPt.x, y2: tPt.y };\n return line;\n}\n/** @private */\nexport function swapBounds(object, bounds, outerBounds) {\n var rectBounds;\n var rotateAngle = object.rotateAngle + object.parentTransform;\n if (rotateAngle) {\n if (rotateAngle < 45) {\n return bounds;\n }\n else if (rotateAngle <= 135) {\n rectBounds = {\n width: bounds.width, height: bounds.height,\n topLeft: bounds.bottomLeft, topCenter: bounds.middleLeft, topRight: bounds.topLeft,\n middleLeft: bounds.bottomCenter, center: outerBounds.center, middleRight: bounds.topCenter,\n bottomLeft: bounds.bottomRight, bottomCenter: bounds.middleRight, bottomRight: bounds.topRight,\n left: outerBounds.left, right: outerBounds.right, top: outerBounds.top, bottom: outerBounds.bottom\n };\n }\n else if (rotateAngle <= 225) {\n rectBounds = {\n width: bounds.width, height: bounds.height,\n topLeft: bounds.bottomLeft, topCenter: bounds.bottomCenter, topRight: bounds.bottomRight,\n middleLeft: bounds.middleRight, center: outerBounds.center, middleRight: bounds.middleLeft,\n bottomLeft: bounds.topLeft, bottomCenter: bounds.topCenter, bottomRight: bounds.topRight,\n left: outerBounds.left, right: outerBounds.right, top: outerBounds.top,\n bottom: outerBounds.bottom\n };\n }\n else if (rotateAngle <= 315) {\n rectBounds = {\n width: bounds.width, height: bounds.height,\n topLeft: bounds.topRight, topCenter: bounds.middleRight, topRight: bounds.bottomRight,\n middleLeft: bounds.topCenter, center: outerBounds.center, middleRight: bounds.bottomCenter,\n bottomLeft: bounds.topLeft, bottomCenter: bounds.middleLeft, bottomRight: bounds.bottomLeft,\n left: outerBounds.left, right: outerBounds.right, top: outerBounds.top, bottom: outerBounds.bottom\n };\n }\n else {\n return bounds;\n }\n return rectBounds;\n }\n return bounds;\n}\n/* tslint:disable */\nfunction defaultOrthoConnection(ele, srcDir, tarDir, sPt, tPt) {\n var sourceEle = ele.sourceWrapper;\n var targetEle = ele.targetWrapper;\n var srcPort = ele.sourcePortWrapper;\n var tarPort = ele.targetPortWrapper;\n var intermeditatePoints = [];\n var refPoint;\n var seg;\n var srcCor = sourceEle.corners;\n var tarCor = targetEle.corners;\n var point = tarCor.center;\n var i;\n var sourceMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var targetMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var source = { corners: srcCor, point: sPt, direction: srcDir, margin: sourceMargin };\n var target = { corners: tarCor, point: tPt, direction: tarDir, margin: targetMargin };\n var srcBounds = swapBounds(sourceEle, srcCor, ele.sourceWrapper.bounds);\n var tarBounds = swapBounds(targetEle, tarCor, ele.targetWrapper.bounds);\n var isInterSect = false;\n if (ele.sourceWrapper && ele.targetWrapper) {\n isInterSect = checkSourceAndTargetIntersect(ele.sourceWrapper, ele.targetWrapper);\n }\n if (srcPort !== undefined) {\n source.point = { x: srcPort.offsetX, y: srcPort.offsetY };\n switch (source.direction) {\n case 'Bottom':\n case 'Top':\n source.point.y = source.point.y;\n break;\n case 'Left':\n case 'Right':\n source.point.x = source.point.x;\n break;\n }\n }\n else {\n if (ele.type === 'Orthogonal') {\n if (ele.segments && ele.segments.length > 0 && ele.segments[0].direction) {\n source.direction = ele.segments[0].direction;\n }\n source.point = findPoint(srcBounds, source.direction);\n refPoint = findPoint(srcBounds, getOppositeDirection(source.direction));\n source.point = getIntersection(ele, sourceEle, source.point, refPoint, false);\n }\n else {\n source.point = sourceEle.corners.center;\n }\n }\n if (tarPort !== undefined) {\n target.point = {\n x: tarPort.offsetX,\n y: tarPort.offsetY\n };\n switch (target.direction) {\n case 'Bottom':\n case 'Top':\n target.point.y = target.point.y;\n break;\n case 'Left':\n case 'Right':\n target.point.x = target.point.x;\n break;\n }\n }\n else {\n if (ele.type === 'Orthogonal') {\n target.point = findPoint(tarBounds, target.direction);\n refPoint = findPoint(tarBounds, getOppositeDirection(target.direction));\n target.point = getIntersection(ele, targetEle, target.point, refPoint, true);\n }\n else {\n target.point = targetEle.corners.center;\n }\n }\n if (ele.type !== 'Orthogonal') {\n var segment = void 0;\n var first = void 0;\n checkLastSegmentasTerminal(ele);\n if (ele.sourcePortWrapper === undefined) {\n source.point = source.corners.center;\n if (ele.segments && ele.segments.length > 0) {\n first = ele.segments[0];\n segment = (!Point.isEmptyPoint(first.point)) ? first : undefined;\n }\n var tarPoint = (segment !== undefined) ? segment.point : target.point;\n if (ele.type === 'Bezier' && ele.segments.length > 0 &&\n ele.segments[0].vector1.angle && ele.segments[0].vector1.distance) {\n var value = Math.max(source.corners.width, source.corners.height);\n tarPoint = Point.transform(source.point, ele.segments[0].vector1.angle, value / 2);\n }\n source.point = isInterSect ? ele.sourceWrapper.bounds.center : getIntersection(ele, sourceEle, source.point, tarPoint, false);\n }\n if (ele.targetPortWrapper === undefined) {\n target.point = target.corners.center;\n if (ele.segments && ele.segments.length > 1) {\n first = ele.segments[ele.segments.length - 2];\n segment = (!Point.isEmptyPoint(first.point)) ? first : undefined;\n }\n var srcPoint = (segment) ? segment.point : source.point;\n if (ele.type === 'Bezier' && ele.segments.length > 0 &&\n ele.segments[ele.segments.length - 1].vector2.angle &&\n ele.segments[ele.segments.length - 1].vector2.distance) {\n var value = Math.max(source.corners.width, source.corners.height);\n srcPoint = Point.transform(target.point, ele.segments[0].vector2.angle, value / 2);\n }\n target.point = isInterSect ? ele.targetWrapper.bounds.center : getIntersection(ele, targetEle, srcPoint, target.point, true);\n }\n intermeditatePoints = intermeditatePointsForStraight(ele, source, target);\n }\n else {\n if (ele.type === 'Orthogonal' && (ele.segments && ele.segments.length > 0) &&\n ele.segments[0].direction !== null) {\n intermeditatePoints = findIntermeditatePoints(ele, source, target, srcPort, tarPort, sourceEle, targetEle);\n }\n else {\n if (!ele.segments[0]) {\n var segment = new OrthogonalSegment(ele, 'segments', { type: 'Orthogonal' }, true);\n ele.segments.push(segment);\n }\n ele.segments[0].points = intermeditatePoints = findOrthoSegments(ele, source, target);\n }\n }\n return intermeditatePoints;\n}\n/* tslint:enable */\nfunction intermeditatePointsForStraight(element, source, target) {\n var intermeditatePoints = [];\n if (element.segments && element.segments.length > 0) {\n var i = void 0;\n var segPoint = [];\n var srcPoint = source.point;\n for (i = 0; i < element.segments.length; i++) {\n var seg = element.segments[i];\n segPoint = [];\n segPoint.push(srcPoint);\n if (i !== element.segments.length - 1) {\n segPoint.push(seg.point);\n srcPoint = seg.point;\n }\n else {\n segPoint.push(target.point);\n }\n element.segments[i].points = segPoint;\n if (element.segments.length > 1 && Point.equals(seg.points[0], seg.points[1])) {\n (element.segments).splice(i, 1);\n }\n if (seg) {\n for (var j = 0; j < seg.points.length; j++) {\n if (j > 0 || i === 0) {\n intermeditatePoints.push(seg.points[j]);\n }\n }\n }\n }\n }\n return intermeditatePoints;\n}\nfunction findSourceDirection(dir, srcPoint, tarPoint) {\n var direction = (dir === 'Top' || dir === 'Bottom') ?\n ((tarPoint.x > srcPoint.x) ? 'Right' : 'Left') :\n ((tarPoint.y > srcPoint.y) ? 'Bottom' : 'Top');\n return direction;\n}\nfunction checkLastSegmentasTerminal(ele) {\n if (ele.type === 'Straight' || ele.type === 'Bezier') {\n if ((ele.segments.length === 0 || (ele.segments.length > 0 &&\n (!Point.isEmptyPoint(ele.segments[ele.segments.length - 1].point))))) {\n var segment = void 0;\n segment = (ele.type === 'Bezier') ? new BezierSegment(ele, 'segments', { type: 'Bezier' }, true) :\n new StraightSegment(ele, 'segments', { type: 'Straight' }, true);\n (ele.segments).push(segment);\n }\n }\n else {\n if (ele.segments.length === 0 || ele.segments[ele.segments.length - 1].direction) {\n var segment = new OrthogonalSegment(ele, 'segments', { type: 'Orthogonal' }, true);\n ele.segments.push(segment);\n }\n }\n}\nfunction checkConsectiveSegmentAsSame(ele, i, source) {\n var seg = ele.segments[i];\n var extra = (seg.direction === 'Left' || seg.direction === 'Top') ? -(seg.length) : seg.length;\n var angle = (seg.direction === 'Left' || seg.direction === 'Right') ? 0 : 90;\n var segPoint = addLineSegment(source.point, extra, angle);\n ele.segments[i - 1].length += seg.length;\n ele.segments[i - 1].points[1] = source.point = segPoint;\n ele.segments.splice(i, 1);\n i--;\n return i;\n}\nfunction nodeOrPortToNode(ele, source, target) {\n var point;\n var portdirection;\n if (ele.sourcePortWrapper) {\n var port = { x: ele.sourcePortWrapper.offsetX, y: ele.sourcePortWrapper.offsetY };\n portdirection = getPortDirection(port, cornersPointsBeforeRotation(ele.sourceWrapper), ele.sourceWrapper.bounds, false);\n }\n findDirection(ele.targetWrapper, source, target, ele);\n var direction = findSourceDirection(target.direction, source.point, target.point);\n if (ele.sourcePortWrapper !== undefined && source.direction === target.direction &&\n ((source.direction === 'Top' || source.direction === 'Bottom') && (source.corners.center.x === target.corners.center.x)\n || (source.direction === 'Left' || source.direction === 'Right') && (source.corners.center.y === target.corners.center.y))) {\n source.direction = direction;\n point = (direction === 'Top' || direction === 'Bottom') ?\n orthoConnection3Segment(ele, source, target, ele.sourceWrapper.height / 2 + 20) :\n orthoConnection3Segment(ele, source, target, ele.sourceWrapper.width / 2 + 20);\n var source1 = source;\n source1.point = point[1];\n if (direction === 'Left' || direction === 'Right') {\n target.direction = direction;\n target.point = (direction === 'Left') ? target.corners.middleLeft : target.corners.middleRight;\n }\n else {\n findDirection(ele.targetWrapper, source, target, ele);\n }\n point = orthoConnection3Segment(ele, source, target);\n }\n else if (target.point.x >= source.corners.left && target.point.x <= source.corners.right &&\n source.point.y >= source.corners.top && source.point.y <= source.corners.bottom) {\n source.direction = (target.point.y > source.point.y) ? 'Bottom' : 'Top';\n var length_2 = (source.direction === 'Top') ? (source.point.y - source.corners.top + 20) :\n (source.corners.bottom - source.point.y + 20);\n point = orthoConnection3Segment(ele, source, target, length_2);\n }\n else if (ele.sourcePortWrapper && portdirection === getOppositeDirection(direction)) {\n var length_3;\n if ((portdirection === 'Left' || portdirection === 'Right') && (source.point.y >= source.corners.top\n && source.point.y <= source.corners.bottom)) {\n source.direction = (target.point.y > source.point.y) ? 'Bottom' : 'Top';\n length_3 = source.corners.height / 2 + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x >= source.corners.left\n && source.point.x <= source.corners.right)) {\n source.direction = (target.point.x > source.point.x) ? 'Right' : 'Left';\n length_3 = source.corners.width / 2 + 20;\n }\n if (source.direction && length_3) {\n point = orthoConnection3Segment(ele, source, target, length_3, true);\n }\n else {\n source.direction = direction;\n point = orthoConnection2Segment(source, target);\n }\n }\n else if (ele.sourcePortWrapper && portdirection === target.direction && (portdirection === 'Top' || portdirection === 'Bottom') &&\n (source.corners.center.x === target.corners.center.x)) {\n source.direction = (target.point.y > source.point.y) ? 'Bottom' : 'Top';\n var len = (source.direction === 'Bottom') ? (source.corners.bottom - source.point.y + 20) :\n (source.point.y - source.corners.top + 20);\n point = orthoConnection3Segment(ele, source, target, len);\n }\n else {\n source.direction = direction;\n point = orthoConnection2Segment(source, target);\n }\n return point;\n}\nfunction checkSourcePointInTarget(ele, source) {\n if (ele.targetWrapper !== undefined && ele.targetPortWrapper === undefined) {\n if (cornersPointsBeforeRotation(ele.targetWrapper).containsPoint(source.point)) {\n var target = ele.targetWrapper;\n var segment = ele.segments[ele.segments.length - 2];\n var lastPoint = segment.points[segment.points.length - 1];\n var direction = getOppositeDirection(segment.direction);\n if (direction === 'Bottom') {\n if (lastPoint.y < target.corners.bottom) {\n segment.points[segment.points.length - 1].y = target.corners.bottom + 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n else if (direction === 'Top') {\n if (lastPoint.y > target.corners.top) {\n segment.points[segment.points.length - 1].y = target.corners.top - 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n else if (direction === 'Left') {\n if (lastPoint.x > target.corners.left) {\n segment.points[segment.points.length - 1].x = target.corners.left - 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n else if (direction === 'Right') {\n if (lastPoint.x < target.corners.right) {\n segment.points[segment.points.length - 1].x = target.corners.right + 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n source.point = segment.points[segment.points.length - 1];\n }\n }\n}\nfunction findIntermeditatePoints(ele, source, target, srcPort, tarPort, sourceEle, targetEle) {\n var point;\n var intermeditatePoints = [];\n var seg;\n var j;\n var removeSegment;\n checkLastSegmentasTerminal(ele);\n for (var i = 0; i < ele.segments.length; i++) {\n seg = ele.segments[i];\n if (srcPort && source.direction === getOppositeDirection(seg.direction)) {\n seg.direction = source.direction;\n }\n if (i > 0 && ele.segments[i - 1].direction === seg.direction) {\n i = checkConsectiveSegmentAsSame(ele, i, source);\n }\n else {\n if (seg.direction) {\n source.point = updateSegmentPoints(source, ele.segments[i]);\n }\n else {\n var segment = ele.segments[i - 1];\n source.point = segment.points[segment.points.length - 1];\n }\n }\n if (i === ele.segments.length - 1) {\n checkSourcePointInTarget(ele, source);\n if (tarPort === undefined) {\n point = nodeOrPortToNode(ele, source, target);\n }\n else {\n point = pointToPort(ele, source, target);\n }\n checkPreviousSegment(point, ele, source);\n seg.points = [];\n if (point.length >= 2) {\n for (j = 0; j < point.length; j++) {\n seg.points.push(point[j]);\n }\n }\n else {\n removeSegment = i;\n }\n }\n if (removeSegment !== undefined) {\n if (removeSegment === ele.segments.length - 1) {\n ele.segments[removeSegment - 1].direction = null;\n ele.segments[removeSegment - 1].length = null;\n }\n ele.segments.splice(removeSegment, 1);\n }\n if (srcPort && i === 0) {\n var sourcePoint = checkPortdirection(ele, srcPort, sourceEle);\n if (sourcePoint) {\n source.point = sourcePoint;\n }\n }\n }\n return returnIntermeditatePoints(ele, intermeditatePoints);\n}\nfunction returnIntermeditatePoints(element, intermeditatePoints) {\n for (var i = 0; i < element.segments.length; i++) {\n var seg = element.segments[i];\n for (var j = 0; j < seg.points.length; j++) {\n if (j > 0 || i === 0) {\n intermeditatePoints.push(seg.points[j]);\n }\n }\n }\n return intermeditatePoints;\n}\nfunction findDirection(node, source, target, ele) {\n var nodeDirection;\n var nodeConnectingPoint = { x: 0, y: 0 };\n var nodeCorners = swapBounds(node, node.corners, node.bounds);\n var nodeMargin = source.margin;\n var fixedPoint = source.point;\n if (nodeCorners.bottomCenter.y + nodeMargin.bottom < fixedPoint.y) {\n nodeDirection = 'Bottom';\n nodeConnectingPoint = nodeCorners.bottomCenter;\n }\n else if (nodeCorners.topCenter.y - nodeMargin.top > fixedPoint.y) {\n nodeDirection = 'Top';\n nodeConnectingPoint = nodeCorners.topCenter;\n }\n else if (nodeCorners.middleLeft.x - nodeMargin.left > fixedPoint.x) {\n nodeDirection = 'Left';\n nodeConnectingPoint = nodeCorners.middleLeft;\n }\n else if (nodeCorners.middleRight.x + nodeMargin.right < fixedPoint.x) {\n nodeDirection = 'Right';\n nodeConnectingPoint = nodeCorners.middleRight;\n }\n else {\n var top_1 = Math.abs(fixedPoint.y - nodeCorners.topCenter.y);\n var right = Math.abs(fixedPoint.x - nodeCorners.middleRight.x);\n var bottom = Math.abs(fixedPoint.y - nodeCorners.bottomCenter.y);\n var left = Math.abs(fixedPoint.x - nodeCorners.middleLeft.x);\n var shortes = Number.MAX_VALUE;\n shortes = top_1;\n nodeDirection = 'Top';\n nodeConnectingPoint = nodeCorners.topCenter;\n if (shortes > right) {\n shortes = right;\n nodeDirection = 'Right';\n nodeConnectingPoint = nodeCorners.middleRight;\n }\n if (shortes > bottom) {\n shortes = bottom;\n nodeDirection = 'Bottom';\n nodeConnectingPoint = nodeCorners.bottomCenter;\n }\n if (shortes > left) {\n //shortes = left;\n nodeDirection = 'Left';\n nodeConnectingPoint = nodeCorners.middleLeft;\n }\n }\n target.point = nodeConnectingPoint;\n target.direction = nodeDirection;\n var refPoint = findPoint(nodeCorners, getOppositeDirection(target.direction));\n target.point = getIntersection(ele, node, target.point, refPoint, node === ele.targetWrapper);\n}\nfunction findOrthoSegments(ele, source, target, extra) {\n var swap = false;\n var intermeditatePoints = [];\n var seg;\n swap = getSwapping(source.direction, target.direction);\n if (swap) {\n swapPoints(source, target);\n }\n if (source.direction === 'Right' && target.direction === 'Left') {\n seg = getRightToLeftSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Right' && target.direction === 'Right') {\n seg = getRightToRightSegmentCount(ele, source, target);\n }\n else if (source.direction === 'Right' && target.direction === 'Top') {\n seg = getRightToTopSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Right' && target.direction === 'Bottom') {\n seg = getRightToBottomSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Bottom' && target.direction === 'Top') {\n seg = getBottomToTopSegmentCount(source, target);\n }\n else if (source.direction === 'Bottom' && target.direction === 'Bottom') {\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n seg = getBottomToBottomSegmentCount(ele, source, target);\n }\n else if (source.direction === 'Bottom' && target.direction === 'Left') {\n seg = getBottomToLeftSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Left' && target.direction === 'Left') {\n seg = getLeftToLeftSegmentCount(ele, source, target);\n }\n else if (source.direction === 'Left' && target.direction === 'Top') {\n seg = getLeftToTopSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Top' && target.direction === 'Top') {\n seg = getTopToTopSegmentCount(ele, source, target);\n }\n if (swap) {\n swapPoints(source, target);\n }\n intermeditatePoints = addOrthoSegments(ele, seg, source, target, extra);\n return intermeditatePoints;\n}\n/** @private */\nexport function findAngle(s, e) {\n var r = { x: e.x, y: s.y };\n var sr = Point.findLength(s, r);\n var re = Point.findLength(r, e);\n var es = Point.findLength(e, s);\n var ang = Math.asin(re / es);\n ang = ang * 180 / Math.PI;\n if (s.x < e.x) {\n if (s.y > e.y) {\n ang = 360 - ang;\n }\n }\n else {\n if (s.y < e.y) {\n ang = 180 - ang;\n }\n else {\n ang = 180 + ang;\n }\n }\n return ang;\n}\n/** @private */\nexport function findPoint(cor, direction) {\n var point;\n switch (direction) {\n case 'Left':\n point = cor.middleLeft;\n break;\n case 'Top':\n point = cor.topCenter;\n break;\n case 'Right':\n point = cor.middleRight;\n break;\n case 'Bottom':\n point = cor.bottomCenter;\n break;\n }\n return point;\n}\nfunction pointsFromNodeToPoint(seg, direction, bounds, point, endPoint, isTarget) {\n var minSpace = 13;\n var x;\n var points = [];\n var y;\n points.push(point);\n var straight;\n straight = (point.y === endPoint.y && (direction === 'Left' && endPoint.x < point.x ||\n direction === 'Right' && endPoint.x > point.x)) ||\n (point.x === endPoint.x && (direction === 'Top' && endPoint.y < point.y ||\n direction === 'Bottom' && endPoint.y > point.y));\n if (!straight) {\n if (direction === 'Top' || direction === 'Bottom') {\n if (direction === 'Top' && endPoint.y < point.y && endPoint.y > point.y - minSpace ||\n direction === 'Bottom' && endPoint.y > point.y && endPoint.y < point.y + minSpace) {\n y = direction === 'Top' ? bounds.top - minSpace : bounds.bottom + minSpace;\n points.push({ x: point.x, y: y });\n points.push({ x: point.x + (endPoint.x - point.x) / 2, y: y });\n points.push({ x: point.x + (endPoint.x - point.x) / 2, y: endPoint.y });\n }\n else if (Math.abs(point.x - endPoint.x) > minSpace &&\n (direction === 'Top' && endPoint.y < point.y || direction === 'Bottom' && endPoint.y > point.y)) {\n //twosegments\n points.push({ x: point.x, y: endPoint.y });\n }\n else {\n y = direction === 'Top' ? bounds.top - minSpace : bounds.bottom + minSpace;\n x = (endPoint.x < point.x) ? bounds.left - minSpace : bounds.right + minSpace;\n points.push({ x: point.x, y: y });\n points.push({ x: endPoint.x, y: y });\n }\n }\n else {\n if (direction === 'Left' && endPoint.x < point.x && endPoint.x > point.x - minSpace || direction === 'right' &&\n endPoint.x > point.x && endPoint.x < point.x + minSpace) {\n x = direction === 'Left' ? bounds.left - minSpace : bounds.right + minSpace;\n points.push({ x: x, y: point.y });\n points.push({ x: x, y: point.y + (endPoint.y - point.y) / 2 });\n points.push({ x: endPoint.x, y: point.y + (endPoint.y - point.y) / 2 });\n }\n else if (Math.abs(point.y - endPoint.y) > minSpace &&\n (direction === 'Left' && endPoint.x < point.x || direction === 'Right' && endPoint.x > point.x)) {\n points.push({ x: endPoint.x, y: point.y });\n //twosegments\n }\n else {\n x = direction === 'Left' ? bounds.left - minSpace : bounds.right + minSpace;\n points.push({ x: x, y: point.y });\n points.push({ x: x, y: endPoint.y });\n }\n }\n if (isTarget) {\n points.push(seg.points[0]);\n points.reverse();\n }\n seg.points = points;\n }\n}\nfunction addLineSegment(point, extra, angle) {\n var segEnd = Point.transform(point, angle, extra);\n return segEnd;\n}\n/** @private */\nexport function getIntersection(ele, bounds, sPt, tPt, isTar) {\n sPt = { x: sPt.x, y: sPt.y };\n tPt = { x: tPt.x, y: tPt.y };\n var angle = Point.findAngle(tPt, sPt);\n var child;\n var intersection;\n var wrapper = isTar ? ele.targetWrapper : ele.sourceWrapper;\n var segmentPoints;\n var point = isTar || ele.type === 'Orthogonal' ? sPt : tPt;\n var sourcePoint = Point.transform(sPt, angle, Math.max(wrapper.actualSize.height / 2, wrapper.actualSize.width / 2));\n child = wrapper;\n var sPt1 = rotatePoint(-wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY, sPt);\n var tPt1 = rotatePoint(-wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY, tPt);\n if (ele.type === 'Orthogonal') {\n var constValue = 5;\n if (sPt1.x === tPt1.x) {\n if (sPt1.y < tPt1.y) {\n sPt1.y -= constValue;\n }\n else {\n sPt1.y += constValue;\n }\n }\n if (sPt1.y === tPt1.y) {\n if (sPt1.x < tPt1.x) {\n sPt1.x -= constValue;\n }\n else {\n sPt1.x += constValue;\n }\n }\n sPt = rotatePoint(wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY, sPt1);\n }\n else {\n var angle_1 = isTar ? Point.findAngle(sPt, tPt) : Point.findAngle(tPt, sPt);\n if (isTar) {\n var angle_2 = Point.findAngle(sPt, tPt);\n tPt = Point.transform({ x: tPt.x, y: tPt.y }, angle_2, Math.max(wrapper.actualSize.width, wrapper.actualSize.height));\n }\n else {\n var angle_3 = Point.findAngle(tPt, sPt);\n sPt = Point.transform({ x: sPt.x, y: sPt.y }, angle_3, Math.max(wrapper.actualSize.width, wrapper.actualSize.height));\n }\n }\n if (wrapper instanceof PathElement && wrapper.data) {\n segmentPoints = child.getPoints();\n if (((child.data.split('m').length - 1) + (child.data.split('M').length - 1)) === 1) {\n segmentPoints[segmentPoints.length] = segmentPoints[0];\n }\n }\n else {\n segmentPoints = getPoints(wrapper, wrapper.corners);\n segmentPoints[segmentPoints.length] = segmentPoints[0];\n }\n var length = segmentPoints.length;\n var thisSegment = { x1: sPt.x, y1: sPt.y, x2: tPt.x, y2: tPt.y };\n return getIntersectionPoints(thisSegment, segmentPoints, true, point) || sPt;\n}\nfunction setLineEndPoint(element, point, isTarget) {\n point.x = Math.round(point.x * 100) / 100;\n point.y = Math.round(point.y * 100) / 100;\n if (isTarget) {\n element.targetPoint = point;\n }\n else {\n element.sourcePoint = point;\n }\n return point;\n}\n/** @private */\nexport function getIntersectionPoints(thisSegment, pts, minimal, point) {\n var length = pts.length;\n var min;\n var segment = {\n x1: pts[0].x, y1: pts[0].y, x2: pts[1].x,\n y2: pts[1].y\n };\n var intersection = intersectSegment(thisSegment, segment);\n if (intersection) {\n // if (!minimal) { return intersection; } //commented because minimal is always true\n min = Point.distancePoints(intersection, point);\n }\n if (isNaN(min) || min > 0) {\n for (var i = 1; i < length - 1; i++) {\n segment = {\n x1: pts[i].x, y1: pts[i].y,\n x2: pts[i + 1].x, y2: pts[i + 1].y\n };\n var intersect = intersectSegment(thisSegment, segment);\n if (intersect) {\n // if (!minimal) { return intersect; }//commented because minimal is always true\n var dist = Point.distancePoints(intersect, point);\n if (isNaN(min) || min > dist) {\n min = dist;\n intersection = intersect;\n }\n if (min >= 0 && min <= 1) {\n break;\n }\n }\n }\n }\n return intersection;\n}\nfunction intersectSegment(segment1, segment2) {\n var x1 = segment1.x1;\n var y1 = segment1.y1;\n var x2 = segment1.x2;\n var y2 = segment1.y2;\n var x3 = segment2.x1;\n var y3 = segment2.y1;\n var x4 = segment2.x2;\n var y4 = segment2.y2;\n var a1;\n var a2;\n var b1;\n var b2;\n var c1;\n var c2;\n var x;\n var y;\n var r1;\n var r2;\n var r3;\n var r4;\n var denom;\n var offset;\n var num;\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = (x2 * y1) - (x1 * y2);\n r3 = ((a1 * x3) + (b1 * y3) + c1);\n r4 = ((a1 * x4) + (b1 * y4) + c1);\n if ((r3 !== 0) && (r4 !== 0) && sameSign(r3, r4)) {\n return null;\n }\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = (x4 * y3) - (x3 * y4);\n r1 = (a2 * x1) + (b2 * y1) + c2;\n r2 = (a2 * x2) + (b2 * y2) + c2;\n if ((r1 !== 0) && (r2 !== 0) && (sameSign(r1, r2))) {\n return null;\n }\n denom = (a1 * b2) - (a2 * b1);\n if (denom === 0) {\n return null;\n }\n if (denom < 0) {\n offset = -denom / 2;\n }\n else {\n offset = denom / 2;\n }\n offset = 0;\n num = (b1 * c2) - (b2 * c1);\n if (num < 0) {\n x = (num - offset) / denom;\n }\n else {\n x = (num + offset) / denom;\n }\n num = (a2 * c1) - (a1 * c2);\n if (num < 0) {\n y = (num - offset) / denom;\n }\n else {\n y = (num + offset) / denom;\n }\n return { x: x, y: y };\n}\nfunction sameSign(a, b) {\n return ((a * b) >= 0);\n}\nfunction getRightToLeftSegmentCount(element, source, target, swap) {\n var srcPort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var pts;\n var diffY = Math.round(Math.abs(source.point.y - target.point.y));\n var diffX = Math.round(Math.abs(source.point.x - target.point.x));\n var right = { x: Math.max(source.point.x, source.corners.right), y: source.point.y };\n var left = { x: Math.min(target.point.x, target.corners.left), y: target.point.y };\n var margin = 10;\n if (swap) {\n var point = void 0;\n point = left;\n left = right;\n right = point;\n }\n if (!(source.corners.bottom + margin < target.corners.top - margin ||\n source.corners.top - margin > target.corners.bottom + margin)) {\n margin = 0;\n }\n source.margin = { left: margin, right: margin, top: margin, bottom: margin };\n target.margin = { left: margin, right: margin, top: margin, bottom: margin };\n if (diffY === 0 && (source.corners.right < target.corners.left\n || (swap && source.corners.right < target.corners.left))) {\n pts = NoOfSegments.One;\n }\n else if (source.point.x + source.margin.right < target.point.x - target.margin.left) {\n pts = NoOfSegments.Three;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (cornersPointsBeforeRotation(element.sourceWrapper).containsPoint(left) ||\n cornersPointsBeforeRotation(element.targetWrapper).containsPoint(right))) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottom <= target.corners.top) {\n pts = NoOfSegments.Five;\n }\n else if (source.corners.top >= target.corners.top) {\n pts = NoOfSegments.Five;\n }\n else if ((srcPort !== undefined && srcPort.offsetY <= target.corners.top) ||\n (srcPort === undefined && source.corners.right <= target.corners.top)) {\n pts = NoOfSegments.Five;\n }\n else if ((srcPort !== undefined && srcPort.offsetY >= target.corners.bottom) ||\n (srcPort === undefined && source.corners.right >= target.corners.bottom)) {\n pts = NoOfSegments.Five;\n }\n else {\n pts = NoOfSegments.Five;\n }\n return pts;\n}\nfunction getRightToRightSegmentCount(element, sourceObj, targetObj) {\n var sourcePort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var pts;\n var diffX = sourceObj.point.x - targetObj.point.x;\n var diffY = sourceObj.point.y - targetObj.point.y;\n targetObj.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n sourceObj.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n if (sourceObj.corners.right >= targetObj.corners.right) {\n if ((sourcePort !== undefined && (sourcePort.offsetY < targetObj.corners.top ||\n sourcePort.offsetY > targetObj.corners.bottom)) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y < targetObj.corners.top)) {\n pts = NoOfSegments.Three;\n }\n else if ((sourcePort !== undefined && sourcePort.offsetY > targetObj.corners.bottom + targetObj.margin.bottom\n && sourceObj.corners.top > targetObj.corners.bottom) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y > targetObj.corners.bottom)) {\n pts = NoOfSegments.Three;\n }\n else if ((sourcePort !== undefined && sourcePort.offsetY < targetObj.corners.top\n && sourceObj.corners.bottom > targetObj.corners.top) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y > targetObj.corners.bottom)) {\n pts = NoOfSegments.Three;\n }\n else if (sourceObj.corners.right < targetObj.corners.left ||\n targetObj.corners.right < sourceObj.corners.left) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((tarPort !== undefined && sourceObj.corners.bottom < tarPort.offsetY) ||\n (tarPort === undefined && sourceObj.corners.bottom < targetObj.corners.middleRight.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && sourceObj.corners.top > tarPort.offsetY) ||\n (tarPort === undefined && sourceObj.corners.top > targetObj.corners.middleRight.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && ((sourcePort !== undefined && sourcePort.offsetX < targetObj.corners.left &&\n sourcePort.offsetX !== tarPort.offsetX && sourcePort.offsetY !== tarPort.offsetY &&\n (Math.abs(sourceObj.corners.right - targetObj.corners.left) <= 20)) ||\n (sourcePort === undefined && sourceObj.corners.right < targetObj.corners.left &&\n sourceObj.corners.center.x !== targetObj.corners.center.x && sourceObj.corners.center.y !== targetObj.corners.center.y)))) {\n pts = NoOfSegments.Three;\n }\n else if (sourceObj.corners.right < targetObj.corners.left) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction getRightToTopSegmentCount(element, source, target, swap) {\n var tarPort = element.targetPortWrapper;\n var srcPort = element.sourcePortWrapper;\n var right = { x: Math.max(source.point.x, source.corners.right), y: source.point.y };\n var top = { x: target.point.x, y: Math.min(target.point.y, target.corners.top) };\n var pts;\n target.margin = { left: 5, right: 5, top: 5, bottom: 5 };\n source.margin = { top: 5, bottom: 5, left: 5, right: 5 };\n if (swap) {\n var port = void 0;\n port = srcPort;\n srcPort = tarPort;\n tarPort = port;\n }\n if ((srcPort !== undefined && srcPort.offsetY < target.corners.top - target.margin.top) ||\n (srcPort === undefined && source.corners.bottom < target.corners.top - target.margin.top)) {\n if (source.corners.bottom < target.corners.top) {\n if ((tarPort !== undefined && source.corners.right + source.margin.right < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.right + source.margin.right < target.corners.topCenter.x)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.left > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.left > target.corners.topCenter.x)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (srcPort !== undefined && Math.abs(source.corners.right - target.corners.left) <= 25 &&\n Math.abs(srcPort.offsetY - target.corners.top) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (tarPort !== undefined && Math.abs(tarPort.offsetX - source.corners.topCenter.x) >= 25 &&\n source.corners.middleRight.y < tarPort.offsetY) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.right < target.corners.left) {\n pts = NoOfSegments.Four;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (cornersPointsBeforeRotation(element.sourceWrapper).containsPoint(top) ||\n cornersPointsBeforeRotation(element.targetWrapper).containsPoint(right))) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getRightToBottomSegmentCount(element, source, target, swap) {\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n var pts;\n var srcPort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var right = { x: Math.max(source.point.x, source.corners.right), y: source.point.y };\n var bottom = { x: target.point.x, y: Math.max(target.point.y, target.corners.bottom) };\n if (swap) {\n var port = void 0;\n port = srcPort;\n srcPort = tarPort;\n tarPort = port;\n }\n if ((srcPort !== undefined && srcPort.offsetY > target.corners.bottom + target.margin.bottom) ||\n (srcPort === undefined && source.corners.middleRight.y > target.corners.bottom + target.margin.bottom)) {\n if (source.corners.top > target.corners.bottom) {\n if ((tarPort !== undefined && source.corners.right + source.margin.right < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.right + source.margin.right < target.corners.bottomCenter.x)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.left > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.left > target.corners.bottomCenter.x)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (srcPort !== undefined &&\n Math.abs(source.corners.right - target.corners.left) <= 25 &&\n Math.abs(srcPort.offsetY - target.corners.bottom) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.right < target.corners.left) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getBottomToTopSegmentCount(source, target) {\n var pts;\n var diffX = source.point.x - target.point.x;\n var diffY = source.point.y - target.point.y;\n var bottom = { x: source.point.x, y: Math.max(source.point.y, source.corners.bottom) };\n var top = { x: target.point.x, y: Math.min(target.point.y, target.corners.top) };\n var margin = 10;\n if (!(source.corners.right + margin < target.corners.left - margin ||\n source.corners.left - margin > target.corners.right + margin)) {\n margin = 0;\n }\n source.margin = { left: margin, right: margin, top: margin, bottom: margin };\n target.margin = { left: margin, right: margin, top: margin, bottom: margin };\n if (diffX === 0 && source.corners.bottom < target.corners.top) {\n pts = NoOfSegments.One;\n }\n else if (source.corners.bottom + source.margin.bottom < target.corners.top - target.margin.top) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.right + source.margin.right < target.corners.left - target.margin.left) {\n pts = NoOfSegments.Five;\n }\n else if (source.corners.left - source.margin.left > target.corners.right + target.margin.right) {\n pts = NoOfSegments.Five;\n }\n else {\n pts = NoOfSegments.Five;\n }\n return pts;\n}\nfunction getBottomToLeftSegmentCount(element, source, target, swap) {\n var srcPort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var bottom = { x: source.point.x, y: Math.max(source.point.y, source.corners.bottom) };\n var left = { x: Math.min(target.point.x, target.corners.left), y: target.point.y };\n var pts;\n if (swap) {\n var port = void 0;\n port = srcPort;\n srcPort = tarPort;\n tarPort = port;\n }\n if ((srcPort !== undefined && srcPort.offsetX < target.corners.left - target.margin.left) ||\n (srcPort === undefined && source.corners.bottomCenter.x < target.corners.bottomLeft.x - target.margin.left)) {\n if (source.corners.right < target.corners.left) {\n if ((tarPort !== undefined && source.corners.bottom + source.margin.bottom < tarPort.offsetY) ||\n (tarPort === undefined && source.corners.bottom + source.margin.bottom < target.corners.middleLeft.y)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.top > tarPort.offsetY) ||\n (tarPort === undefined && source.corners.top > target.corners.middleLeft.y)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (tarPort !== undefined &&\n Math.abs(source.corners.right - target.corners.left) <= 25 &&\n Math.abs(tarPort.offsetY - source.corners.bottom) <= 25) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getBottomToBottomSegmentCount(element, source, target) {\n var srcPort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var difX = Math.round(Math.abs(source.point.x - target.point.x));\n var diffY = Math.round(Math.abs(target.point.y - target.point.y));\n var pts;\n if (source.corners.bottom < target.corners.bottom) {\n if ((srcPort !== undefined && srcPort.offsetX < target.corners.left - target.margin.left) ||\n (srcPort === undefined && source.corners.bottomCenter.x < target.corners.left - target.margin.left)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetX > target.corners.right + target.margin.right) ||\n (srcPort === undefined && source.corners.bottomCenter.x > target.corners.right + target.margin.right)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottom < target.corners.top) {\n pts = NoOfSegments.Five;\n }\n else if (difX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((tarPort !== undefined && source.corners.left > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.left > target.corners.left)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && source.corners.right < tarPort.offsetX) ||\n (tarPort === undefined &&\n source.corners.right < target.corners.right)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.top > target.corners.bottom) {\n pts = NoOfSegments.Five;\n }\n else if (difX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction getLeftToTopSegmentCount(element, source, target, swap) {\n var pts;\n var sourcePort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var left = { x: Math.min(source.point.x, source.corners.left), y: source.point.y };\n var top = { x: target.point.x, y: Math.min(target.point.y, target.corners.top) };\n if (swap) {\n var port = void 0;\n port = sourcePort;\n sourcePort = tarPort;\n tarPort = port;\n }\n if ((sourcePort !== undefined && sourcePort.offsetY < target.corners.top - target.margin.top) ||\n (sourcePort === undefined && (source.corners.bottom < target.corners.top - target.margin.top ||\n source.corners.middleLeft.y < target.corners.top - target.margin.top))) {\n if (source.corners.bottom < target.corners.top) {\n if ((tarPort !== undefined && source.corners.left - source.margin.left > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.left - source.margin.left > target.corners.topCenter.x)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.right < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.right < target.corners.topCenter.x)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (sourcePort !== undefined &&\n Math.abs(source.corners.left - target.corners.right) <= 25 &&\n Math.abs(sourcePort.offsetY - target.corners.top) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (cornersPointsBeforeRotation(element.sourceWrapper).containsPoint(top) ||\n cornersPointsBeforeRotation(element.targetWrapper).containsPoint(left))) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.left > target.corners.right) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getLeftToLeftSegmentCount(element, source, target) {\n var srcPort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n var diffX = Math.round(Math.abs(source.point.x - target.point.x));\n var diffY = Math.round(Math.abs(source.point.y - target.point.y));\n var pts;\n if (source.corners.left < target.corners.left) {\n if ((targetPort !== undefined && source.corners.bottom + source.margin.bottom < targetPort.offsetY) ||\n (targetPort === undefined && source.corners.bottom + source.margin.bottom < target.corners.middleLeft.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((targetPort !== undefined && source.corners.top - source.margin.top > targetPort.offsetY) ||\n (targetPort === undefined && source.corners.top - source.margin.top > target.corners.middleLeft.y)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.right < target.corners.left ||\n target.corners.right < source.corners.left) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((srcPort !== undefined && srcPort.offsetY < target.corners.top - target.margin.top) ||\n (srcPort === undefined && source.corners.middleLeft.y < target.corners.top)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetY > target.corners.bottom + target.margin.bottom) ||\n (srcPort === undefined && source.corners.middleLeft.y > target.corners.bottom + target.margin.bottom)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.left > target.corners.right) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction getTopToTopSegmentCount(element, source, target) {\n var srcPort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var diffX = Math.round(Math.abs(source.point.x - target.point.x));\n var diffY = Math.round(Math.abs(source.point.y - target.point.y));\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n var pts;\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n if (source.corners.top < target.corners.top) {\n if ((targetPort !== undefined && source.corners.left > targetPort.offsetX) ||\n (targetPort === undefined && source.corners.left > target.corners.left)) {\n pts = NoOfSegments.Three;\n }\n else if ((targetPort !== undefined && source.corners.right < targetPort.offsetX) ||\n (targetPort === undefined && source.corners.right < target.corners.right)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottom < target.corners.top) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((srcPort !== undefined && srcPort.offsetX > target.corners.right) ||\n (srcPort === undefined && source.corners.left > target.corners.right)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetX < target.corners.left) ||\n (srcPort === undefined && source.corners.bottomRight.x < target.corners.left)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.top > target.corners.bottom) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction addOrthoSegments(element, seg, source, target, segLength) {\n var src = element.sourceWrapper;\n var tar = element.targetWrapper;\n var tarPort = element.targetPortWrapper;\n var intermeditatePoints;\n var srcCorner = src.corners;\n var tarCorner = tar.corners;\n var extra = 20;\n if (source.direction !== target.direction || seg === NoOfSegments.Five) {\n if (source.direction === getOppositeDirection(target.direction) || seg === NoOfSegments.Three) {\n switch (source.direction) {\n case 'Left':\n if (srcCorner.middleLeft.x > tarCorner.middleRight.x) {\n extra = Math.min(extra, (srcCorner.middleLeft.x - tarCorner.middleRight.x) / 2);\n }\n break;\n case 'Right':\n if (srcCorner.middleRight.x < tarCorner.middleLeft.x) {\n extra = Math.min(extra, (tarCorner.middleLeft.x - srcCorner.middleRight.x) / 2);\n }\n break;\n case 'Top':\n if (srcCorner.topCenter.y > tarCorner.bottomCenter.y) {\n extra = Math.min(extra, (srcCorner.topCenter.y - tarCorner.bottomCenter.y) / 2);\n }\n break;\n case 'Bottom':\n if (srcCorner.bottomCenter.y < tarCorner.topCenter.y) {\n extra = Math.min(extra, (tarCorner.topCenter.y - srcCorner.bottomCenter.y) / 2);\n }\n break;\n }\n }\n }\n extra = adjustSegmentLength(srcCorner, source, extra);\n if (segLength) {\n extra = Math.max(extra, segLength);\n }\n if (seg === NoOfSegments.One) {\n intermeditatePoints = [source.point, target.point];\n }\n if (seg === NoOfSegments.Two) {\n intermeditatePoints = orthoConnection2Segment(source, target);\n }\n if (seg === NoOfSegments.Three) {\n intermeditatePoints = orthoConnection3Segment(element, source, target, extra);\n }\n if (seg === NoOfSegments.Four) {\n var prevDir = undefined;\n intermeditatePoints = orthoConnection4Segment(source, target, prevDir, intermeditatePoints, extra);\n }\n if (seg === NoOfSegments.Five) {\n intermeditatePoints = orthoConnection5Segment(source, target, extra);\n }\n return intermeditatePoints;\n}\nfunction adjustSegmentLength(bounds, source, extra) {\n switch (source.direction) {\n case 'Left':\n if (source.point.x > bounds.left) {\n extra = (source.point.x - bounds.left) > extra ? ((source.point.x - bounds.left) + extra) : extra;\n }\n break;\n case 'Right':\n if (source.point.x < bounds.right) {\n extra = (bounds.right - source.point.x) > extra ? ((bounds.right - source.point.x) + extra) : extra;\n }\n break;\n case 'Top':\n if (source.point.y > bounds.top) {\n extra = (source.point.y - bounds.top) > extra ? ((source.point.y - bounds.top) + extra) : extra;\n }\n break;\n case 'Bottom':\n if (source.point.y < bounds.bottom) {\n extra = (bounds.bottom - source.point.y) > extra ? ((bounds.bottom - source.point.y) + extra) : extra;\n }\n break;\n }\n return extra;\n}\n/** @private */\nexport function orthoConnection2Segment(source, target) {\n var intermeditatePoints;\n switch (source.direction) {\n case 'Left':\n case 'Right':\n var point1 = { x: target.point.x, y: source.point.y };\n intermeditatePoints = (Point.equals(source.point, point1) || Point.equals(target.point, point1)) ?\n [source.point, target.point] : [source.point, point1, target.point];\n break;\n case 'Top':\n case 'Bottom':\n var point2 = { x: source.point.x, y: target.point.y };\n intermeditatePoints = (Point.equals(source.point, point2) || Point.equals(target.point, point2)) ?\n [source.point, target.point] : [source.point, point2, target.point];\n break;\n }\n return intermeditatePoints;\n}\nfunction orthoConnection3Segment(element, source, target, extra, allow) {\n if (!extra) {\n extra = 20;\n }\n var srcPort = element.sourcePortWrapper;\n var intermeditatePoints;\n var segmentValue;\n var next;\n var diffx = target.point.x - source.point.x;\n var diffy = target.point.y - source.point.y;\n var temp;\n if (!allow && (Math.abs(diffx) < 0.001 || Math.abs(diffy) < 0.001)) {\n if (target.direction === undefined) {\n intermeditatePoints = [source.point, target.point];\n return intermeditatePoints;\n }\n }\n if (element.targetWrapper === undefined && Math.abs(diffx) <= 31 && Math.abs(diffy) <= 31) {\n if ((source.direction === 'Left' || source.direction === 'Right')) {\n if (Math.abs(diffy) < 12) {\n source.direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n }\n }\n else {\n if (Math.abs(diffx) < 12) {\n source.direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n }\n }\n if (Math.abs(diffx) > 12 || Math.abs(diffy) > 12) {\n return orthoConnection2Segment(source, target);\n }\n else {\n extra += 5;\n }\n }\n if (source.direction === 'Left' || source.direction === 'Right') {\n if (source.direction === 'Right') {\n if (target.direction !== undefined && target.direction === 'Right') {\n extra = Math.max(source.point.x, target.point.x) - source.point.x + extra;\n }\n if (source.point.x > target.point.x && srcPort === undefined) {\n extra = -extra;\n }\n }\n else {\n if (target.direction !== undefined && target.direction === 'Left') {\n extra = source.point.x - Math.min(source.point.x, target.point.x) + extra;\n }\n if (source.point.x > target.point.x || srcPort !== undefined || source.direction === 'Left') {\n extra = -extra;\n }\n }\n temp = target.point.y - source.point.y;\n segmentValue = addLineSegment(source.point, extra, 0);\n temp = target.point.y - segmentValue.y;\n if (temp !== 0) {\n next = addLineSegment(segmentValue, target.point.y - segmentValue.y, 90);\n }\n }\n else if (source.direction === 'Top' || source.direction === 'Bottom') {\n if (source.direction === 'Bottom') {\n if (target.direction !== undefined && target.direction === 'Bottom') {\n extra = Math.max(source.point.y, target.point.y) - source.point.y + extra;\n }\n }\n else {\n if (target.direction !== undefined && target.direction === 'Top') {\n extra = source.point.y - Math.min(source.point.y, target.point.y) + extra;\n }\n if (source.point.y > target.point.y || (srcPort !== undefined) || source.direction === 'Top') {\n extra = -extra;\n }\n }\n temp = target.point.x - source.point.x;\n if (source.direction === 'Top') {\n segmentValue = addLineSegment(source.point, extra, 90);\n }\n else {\n segmentValue = addLineSegment(source.point, extra, 90);\n }\n temp = target.point.x - segmentValue.x;\n if (temp !== 0) {\n next = addLineSegment(segmentValue, target.point.x - segmentValue.x, 0);\n }\n }\n if (temp === 0) {\n return intermeditatePoints = [\n source.point,\n target.point\n ];\n }\n intermeditatePoints = [\n source.point,\n segmentValue,\n next,\n target.point\n ];\n return intermeditatePoints;\n}\nfunction orthoConnection5Segment(source, target, extra) {\n if (extra === void 0) { extra = 20; }\n var intermeditatePoints;\n var length = extra;\n var sLeft = source.corners.left - source.margin.left;\n var sRight = source.corners.right + source.margin.right;\n var sBottom = source.corners.bottom + source.margin.bottom;\n var sTop = source.corners.top - source.margin.top;\n var tLeft = target.corners.left - target.margin.left;\n var tRight = target.corners.right + target.margin.right;\n var tBottom = target.corners.bottom + target.margin.bottom;\n var tTop = target.corners.top - target.margin.top;\n var segmentValue;\n switch (source.direction) {\n case 'Left':\n if ((sTop > tTop && sTop < tBottom || sBottom < tBottom && sBottom > tTop) &&\n sLeft > tLeft && sLeft <= tRight && extra >= 20) {\n length = source.point.x - target.corners.left + length;\n }\n segmentValue = addLineSegment(source.point, length, 180);\n break;\n case 'Top':\n if ((sLeft > tLeft && sLeft < tRight || sRight < tRight && sRight > tLeft) &&\n sTop > tTop && sTop <= tBottom && extra >= 20) {\n length = source.point.y - target.corners.top + length;\n }\n segmentValue = addLineSegment(source.point, length, 270);\n break;\n case 'Right':\n if ((sTop > tTop && sTop < tBottom || sBottom < tBottom && sBottom > tTop) &&\n sRight < tRight && sRight >= tLeft && extra >= 20) {\n length = target.corners.right - source.point.x + length;\n }\n segmentValue = addLineSegment(source.point, length, 0);\n break;\n case 'Bottom':\n if ((sLeft > tLeft && sLeft < tRight || sRight < tRight && sRight > tLeft) &&\n sBottom < tBottom && sBottom >= tTop && extra >= 20) {\n length = target.corners.bottom - source.point.y + length;\n }\n segmentValue = addLineSegment(source.point, length, 90);\n break;\n }\n intermeditatePoints = [\n source.point,\n segmentValue\n ];\n if (source.direction === 'Top' || source.direction === 'Bottom') {\n var prevDir = source.direction;\n source.direction = segmentValue.x > target.point.x ? 'Left' : 'Right';\n source.point = segmentValue;\n intermeditatePoints = orthoConnection4Segment(source, target, prevDir, intermeditatePoints);\n }\n else {\n var prevDir = source.direction;\n source.direction = segmentValue.y > target.point.y ? 'Top' : 'Bottom';\n source.point = segmentValue;\n intermeditatePoints = orthoConnection4Segment(source, target, prevDir, intermeditatePoints);\n }\n return intermeditatePoints;\n}\nfunction orthoConnection4Segment(source, target, prevDir, interPt, e) {\n if (e === void 0) { e = 20; }\n var segmentValue;\n if (prevDir === undefined) {\n source.margin = { left: 2, right: 2, top: 2, bottom: 2 };\n target.margin = { left: 0, right: 5, top: 0, bottom: 5 };\n }\n else {\n if (source.direction === 'Bottom') {\n if (target.corners.top > source.corners.bottom && target.corners.top - source.corners.bottom < 20) {\n e = (target.corners.top - source.corners.bottom) / 2;\n }\n }\n else if (source.direction === 'Top') {\n if (target.corners.bottom < source.corners.top && source.corners.top - target.corners.bottom < 20) {\n e = (source.corners.top - target.corners.bottom) / 2;\n }\n }\n else if (source.direction === 'Right') {\n if (target.corners.left > source.corners.right && target.corners.left - source.corners.right < 20) {\n e = (target.corners.left - source.corners.right) / 2;\n }\n }\n else if (source.direction === 'Left') {\n if (target.corners.right < source.corners.left && source.corners.left - target.corners.right < 20) {\n e = (source.corners.left - target.corners.right) / 2;\n }\n }\n }\n switch (source.direction) {\n case 'Left':\n e = getLeftLength(source, target, prevDir, e);\n segmentValue = addLineSegment(source.point, e, 180);\n break;\n case 'Right':\n e = getRightLength(source, target, e, prevDir);\n segmentValue = addLineSegment(source.point, e, 0);\n break;\n case 'Top':\n e = getTopLength(source, target, prevDir, e);\n segmentValue = addLineSegment(source.point, e, 270);\n break;\n case 'Bottom':\n e = getBottomLength(source, target, e, prevDir);\n segmentValue = addLineSegment(source.point, e, 90);\n }\n if (interPt !== undefined) {\n interPt.push(segmentValue);\n }\n else {\n interPt = [\n source.point,\n segmentValue\n ];\n }\n if (source.direction === 'Top' || source.direction === 'Bottom') {\n getOrtho3Seg(segmentValue, 'horizontal', source, target, interPt);\n }\n else if (source.direction === 'Right' || source.direction === 'Left') {\n getOrtho3Seg(segmentValue, 'vertical', source, target, interPt);\n }\n return interPt;\n}\nfunction getOrtho3Seg(sPt, orientation, src, tar, points) {\n var point1;\n var point2;\n var point3;\n if (orientation === 'horizontal') {\n src.margin = { left: 0, right: 10, top: 0, bottom: 10 };\n tar.margin = { left: 0, right: 10, top: 0, bottom: 10 };\n }\n else if (orientation === 'vertical') {\n src.margin = { left: 10, right: 0, top: 10, bottom: 0 };\n tar.margin = { left: 10, right: 0, top: 10, bottom: 0 };\n }\n var extra = 20;\n if (orientation === 'horizontal') {\n switch (tar.direction) {\n case 'Left':\n if (src.corners.right + src.margin.right < tar.corners.left - tar.margin.left &&\n (tar.corners.left - src.corners.right > extra || (src.corners.top - src.margin.top <= tar.point.y &&\n src.corners.bottom + src.margin.bottom >= tar.point.y))) {\n var gap = Math.min(Math.abs(tar.corners.left - src.corners.right) / 2, 20);\n extra = src.corners.right - sPt.x + gap;\n }\n else {\n if ((src.direction === 'Top' && sPt.y > tar.point.y) || (src.direction === 'Bottom' && sPt.y < tar.point.y)) {\n extra = Math.min(tar.corners.left, sPt.x) - sPt.x - 20;\n }\n else if (sPt.x >= src.corners.left - src.margin.left && sPt.x <= src.corners.right + src.margin.right) {\n extra = Math.min(tar.corners.left, src.corners.left) - sPt.x - 20;\n }\n else {\n extra = tar.corners.left - sPt.x - 20;\n }\n }\n break;\n case 'Right':\n if (src.corners.left - src.margin.left > tar.corners.right + tar.margin.right &&\n (src.corners.left - tar.corners.right > extra || (src.corners.top - src.margin.top <= tar.point.y &&\n src.corners.bottom + src.margin.bottom >= tar.point.y))) {\n var gap = Math.min(Math.abs(src.corners.left - tar.corners.right) / 2, 20);\n extra = src.corners.left - sPt.x - gap;\n }\n else {\n if ((src.direction === 'Top' && sPt.y > tar.point.y) || (src.direction === 'Bottom' && sPt.y < tar.point.y)) {\n extra = Math.max(tar.corners.right, sPt.x) - sPt.x + 20;\n }\n else if (sPt.x >= src.corners.left - src.margin.left && sPt.x <= src.corners.right + src.margin.right) {\n extra = Math.max(tar.corners.right, src.corners.right) - sPt.x + 20;\n }\n else {\n extra = tar.corners.right - sPt.x + 20;\n }\n }\n break;\n }\n point1 = addLineSegment(sPt, extra, 0);\n point2 = addLineSegment(point1, tar.point.y - sPt.y, 90);\n point3 = tar.point;\n }\n else if (orientation === 'vertical') {\n switch (tar.direction) {\n case 'Top':\n if (src.corners.bottom + src.margin.bottom < tar.corners.top - tar.margin.top &&\n (tar.corners.top - src.corners.bottom > extra || (src.corners.left - src.margin.left <= tar.point.x &&\n src.corners.right + src.margin.right >= tar.point.x))) {\n var gap = Math.min(Math.abs(tar.corners.top - src.corners.bottom) / 2, 20);\n extra = src.corners.bottom - sPt.y + gap;\n }\n else {\n if ((src.direction === 'Left' && sPt.x > tar.point.x) || (src.direction === 'Right' && sPt.x < tar.point.x)) {\n extra = Math.min(tar.corners.top, sPt.y) - sPt.y - 20;\n }\n else if (sPt.y >= src.corners.top - src.margin.top && sPt.y <= src.corners.bottom + src.margin.bottom) {\n extra = Math.min(tar.corners.top, src.corners.top) - sPt.y - 20;\n }\n else {\n extra = tar.corners.top - sPt.y - 20;\n }\n }\n break;\n case 'Bottom':\n if (src.corners.top - src.margin.top > tar.corners.bottom + tar.margin.bottom &&\n (src.corners.top - tar.corners.bottom > extra || (src.corners.left - src.margin.left <= tar.point.x &&\n src.corners.right + src.margin.right >= tar.point.x))) {\n var gap = Math.min(Math.abs(src.corners.top - tar.corners.bottom) / 2, 20);\n extra = src.corners.top - sPt.y - gap;\n }\n else {\n if ((src.direction === 'Left' && sPt.x > tar.point.x) || (src.direction === 'Right' && sPt.x < tar.point.x)) {\n extra = Math.max(tar.corners.bottom, sPt.y) - sPt.y + 20;\n }\n else if (sPt.y >= src.corners.top - src.margin.top && sPt.y <= src.corners.bottom + src.margin.bottom) {\n extra = Math.max(tar.corners.bottom, src.corners.bottom) - sPt.y + 20;\n }\n else {\n extra = tar.corners.bottom - sPt.y + 20;\n }\n }\n break;\n }\n point1 = addLineSegment(sPt, extra, 90);\n point2 = addLineSegment(point1, tar.point.x - sPt.x, 0);\n point3 = tar.point;\n }\n points.push(point1);\n points.push(point2);\n points.push(point3);\n}\nfunction getTopLength(source, target, preDir, length) {\n if (source.corners.top - source.margin.top > target.corners.top + target.margin.top &&\n source.corners.top - source.margin.top <= target.corners.bottom + target.margin.bottom) {\n if (target.direction === 'Right' && source.point.x < target.point.x) {\n length += source.corners.top - target.corners.top;\n }\n else if (target.direction === 'Left' && source.point.x > target.point.x) {\n length += source.corners.top - target.corners.top;\n }\n length += source.point.y - source.corners.top;\n }\n else {\n if ((preDir !== undefined && preDir !== 'Left') && target.direction === 'Right' && source.point.x < target.point.x) {\n length += Math.abs(source.point.y - target.corners.bottom);\n }\n else if ((preDir !== undefined && preDir !== 'Right') && target.direction === 'Left'\n && target.point.x < source.point.x) {\n length += Math.abs(source.point.y - target.corners.bottom);\n }\n else {\n length += source.point.y - source.corners.top;\n }\n }\n return length;\n}\nfunction getLeftLength(source, target, prevDir, segLength) {\n if (source.corners.left - source.margin.left > target.corners.left - target.margin.left &&\n source.corners.left - source.margin.left <= target.corners.right + target.margin.right) {\n if (target.direction === 'Bottom' && source.point.y < target.point.y) {\n segLength += source.corners.left - target.corners.left;\n }\n else if (target.direction === 'Top' && source.point.y > target.point.y) {\n segLength += source.corners.left - target.corners.left;\n }\n segLength += source.point.x - source.corners.left;\n }\n else {\n if ((prevDir !== undefined && prevDir !== 'Top') && target.direction === 'Bottom' && source.point.y < target.point.y) {\n segLength += Math.abs(source.point.x - target.corners.right);\n }\n else if ((prevDir !== undefined && prevDir !== 'Bottom') &&\n target.direction === 'Top' && target.point.y < source.point.y) {\n segLength += Math.abs(source.point.x - target.corners.right);\n }\n else {\n segLength += source.point.x - source.corners.left;\n }\n }\n return segLength;\n}\nfunction getRightLength(source, target, length, prevDir) {\n if (source.corners.right + source.margin.right < target.corners.right + target.margin.right &&\n source.corners.right + source.margin.right >= target.corners.left - target.margin.left) {\n if (target.direction === 'Bottom' && source.point.y < target.point.y) {\n length += target.corners.right - source.corners.right;\n }\n else if (target.direction === 'Top' && source.point.y > target.point.y) {\n length += target.corners.right - source.corners.right;\n }\n length += source.corners.right - source.point.x;\n }\n else {\n if ((prevDir !== undefined && prevDir !== 'Top') && target.direction === 'Bottom' && source.point.y < target.point.y) {\n length += Math.abs(source.point.x - target.corners.right);\n }\n else if ((prevDir !== undefined && prevDir !== 'Bottom') && target.direction === 'Top' && target.point.y < source.point.y) {\n length += Math.abs(source.point.x - target.corners.right);\n }\n else {\n length += source.corners.right - source.point.x;\n }\n }\n return length;\n}\nfunction getBottomLength(source, target, segLength, prevDir) {\n if (source.corners.bottom + source.margin.bottom < target.corners.bottom + target.margin.bottom &&\n source.corners.bottom + source.margin.bottom >= target.corners.top - target.margin.top) {\n if (target.direction === 'Right' && source.point.x < target.point.x) {\n segLength += target.corners.bottom - source.corners.bottom;\n }\n else if (target.direction === 'Left' && source.point.x > target.point.x) {\n segLength += target.corners.bottom - source.corners.bottom;\n }\n segLength += source.corners.bottom - source.point.y;\n }\n else {\n if ((prevDir !== undefined && prevDir !== 'Left') &&\n target.direction === 'Right' && source.point.x < target.point.x) {\n segLength += Math.abs(source.point.y - target.corners.bottom);\n }\n else if ((prevDir !== undefined && prevDir !== 'Right') &&\n target.direction === 'Left' && target.point.x < source.point.x) {\n segLength += Math.abs(source.point.y - target.corners.bottom);\n }\n else {\n segLength += source.corners.bottom - source.point.y;\n }\n }\n return segLength;\n}\nfunction getSwapping(srcDir, tarDir) {\n var swap = false;\n switch (srcDir) {\n case 'Left':\n switch (tarDir) {\n case 'Right':\n case 'Bottom':\n swap = true;\n break;\n }\n break;\n case 'Top':\n switch (tarDir) {\n case 'Left':\n case 'Right':\n case 'Bottom':\n swap = true;\n break;\n }\n break;\n case 'Bottom':\n switch (tarDir) {\n case 'Right':\n swap = true;\n break;\n }\n break;\n }\n return swap;\n}\nfunction swapPoints(source, target) {\n var direction = source.direction;\n source.direction = target.direction;\n target.direction = direction;\n var point = source.point;\n source.point = target.point;\n target.point = point;\n var corner = source.corners;\n source.corners = target.corners;\n target.corners = corner;\n}\nexport function getPortDirection(point, corner, bounds, closeEdge) {\n var direction;\n var boundsValue = corner === undefined ? bounds : corner;\n var one = boundsValue.topLeft;\n var two = boundsValue.topRight;\n var three = boundsValue.bottomRight;\n var four = boundsValue.bottomLeft;\n var center = boundsValue.center;\n var angle = findAngle(center, point);\n var fourty5 = findAngle(center, three);\n var one35 = findAngle(center, four);\n var two25 = findAngle(center, one);\n var three15 = findAngle(center, two);\n if (angle > two25 && angle < three15) {\n direction = 'Top';\n // if (bounds.width < bounds.height && closeEdge) {\n // let height: number = (bounds.height - bounds.width) / 2;\n // let width: number = bounds.width;\n // if (Math.abs(point.x - one.x) < Math.abs(point.x - two.x)) {\n // direction = checkCloseEdge(direction, new Rect(one.x, one.y, width, height), point, 'Left');\n // } else {\n // direction = checkCloseEdge(direction, new Rect(two.x - bounds.width, two.y, width, height), point, 'Right');\n // }\n // }\n }\n else if (angle >= fourty5 && angle < one35) {\n direction = 'Bottom';\n // if (bounds.width < bounds.height && closeEdge) {\n // let height: number = (bounds.height - bounds.width) / 2;\n // let width: number = bounds.width;\n // if (Math.abs(point.x - four.x) < Math.abs(point.x - three.x)) {\n // direction = checkCloseEdge(direction, new Rect(four.x, four.y - height, width, height), point, 'Left');\n // } else {\n // let value: Rect = new Rect(three.x - bounds.width, three.y - bounds.height / 4, bounds.width, bounds.height / 4);\n // direction = checkCloseEdge(direction, value, point, 'Right');\n // }\n // }\n }\n else if (angle >= one35 && angle <= two25) {\n direction = 'Left';\n // if (bounds.width > bounds.height && closeEdge) {\n // let width: number = (bounds.width - bounds.height) / 2;\n // let height: number = bounds.height;\n // if (Math.abs(point.y - one.y) < Math.abs(point.y - four.y)) {\n // direction = checkCloseEdge(direction, new Rect(one.x, one.y, width, height), point, 'Top');\n // } else {\n // direction = checkCloseEdge(direction, new Rect(four.x, four.y - height, width, height), point, 'Bottom');\n // }\n // }\n }\n else if (angle >= three15 || angle < fourty5) {\n direction = 'Right';\n // if (bounds.width > bounds.height && closeEdge) {\n // let width: number = (bounds.width - bounds.height) / 2;\n // let height: number = bounds.height;\n // if (Math.abs(point.y - two.y) < Math.abs(point.y - three.y)) {\n // direction = checkCloseEdge(direction, new Rect(two.x - width, two.y, width, height), point, 'Top');\n // } else {\n // direction = checkCloseEdge(direction, \n //new Rect(three.x - width, three.y - height, width, height), point, 'Bottom');\n // }\n // }\n }\n else {\n direction = 'Right';\n }\n return direction;\n}\n// function checkCloseEdge(direction: string, threshold: Rect, port: PointModel, nearest: string): string {\n// if (threshold) {\n// switch (direction) {\n// case 'Bottom':\n// case 'Top':\n// let left: number = Math.abs(threshold.left - port.x);\n// let right: number = Math.abs(threshold.right - port.x);\n// let ver: number = direction === 'Top' ? Math.abs(threshold.top - port.y) : Math.abs(threshold.bottom - port.y);\n// if (left < right) {\n// if (left < ver) {\n// return 'Left';\n// }\n// } else {\n// if (right < ver) {\n// return 'Right';\n// }\n// }\n// break;\n// case 'Left':\n// case 'Right':\n// let top: number = Math.abs(threshold.top - port.y);\n// let bottom: number = Math.abs(threshold.bottom - port.y);\n// let hor: number = direction === 'Left' ? Math.abs(threshold.left - port.x) : Math.abs(threshold.right - port.x);\n// if (top < bottom) {\n// if (top < hor) {\n// return 'Top';\n// }\n// } else {\n// if (bottom < hor) {\n// return 'Bottom';\n// }\n// }\n// break;\n// }\n// }\n//Meant for dock port\n// return direction;\n// }\n/** @private */\nexport function getOuterBounds(obj) {\n var outerBounds;\n outerBounds = obj.wrapper.children[0].bounds;\n if (obj.sourceDecorator.shape !== 'None') {\n outerBounds.uniteRect(obj.wrapper.children[1].bounds);\n }\n if (obj.targetDecorator.shape !== 'None') {\n outerBounds.uniteRect(obj.wrapper.children[2].bounds);\n }\n return outerBounds;\n}\nexport function getOppositeDirection(direction) {\n switch (direction) {\n case 'Top':\n return 'Bottom';\n case 'Bottom':\n return 'Top';\n case 'Left':\n return 'Right';\n case 'Right':\n return 'Left';\n }\n return 'auto';\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, Complex, Collection, ChildProperty, ComplexFactory, CollectionFactory } from '@syncfusion/ej2-base';\nimport { ShapeStyle, StrokeStyle } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { TextElement } from '../core/elements/text-element';\nimport { Transform, ConnectorConstraints } from '../enum/enum';\nimport { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { findAngle, findConnectorPoints, getOuterBounds } from '../utility/connector';\nimport { getAnnotationPosition, alignLabelOnSegments, updateConnector } from '../utility/diagram-util';\nimport { randomId, getFunction } from './../utility/base-util';\nimport { PathElement } from '../core/elements/path-element';\nimport { PathAnnotation } from './annotation';\nimport { Canvas } from '../core/containers/canvas';\nimport { getDecoratorShape } from './dictionary/common';\nimport { NodeBase } from './node-base';\nimport { DiagramTooltip } from './tooltip';\nimport { identityMatrix, rotateMatrix, scaleMatrix, transformPointsByMatrix } from '../primitives/matrix';\nvar getConnectorType = function (obj) {\n switch (obj.type) {\n case 'Bpmn':\n return BpmnFlow;\n default:\n return ConnectorShape;\n }\n};\nvar getSegmentType = function (obj) {\n switch (obj.type) {\n case 'Straight':\n return StraightSegment;\n case 'Bezier':\n return BezierSegment;\n case 'Orthogonal':\n return OrthogonalSegment;\n default:\n return StraightSegment;\n }\n};\n/**\n * Decorators are used to decorate the end points of the connector with some predefined path geometry\n */\nvar Decorator = /** @class */ (function (_super) {\n __extends(Decorator, _super);\n function Decorator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Decorator.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], Decorator.prototype, \"height\", void 0);\n __decorate([\n Property('Arrow')\n ], Decorator.prototype, \"shape\", void 0);\n __decorate([\n Complex({ fill: 'black', strokeColor: 'black', strokeWidth: 1 }, ShapeStyle)\n ], Decorator.prototype, \"style\", void 0);\n __decorate([\n Complex({ x: 0, y: 0.5 }, Point)\n ], Decorator.prototype, \"pivot\", void 0);\n __decorate([\n Property('')\n ], Decorator.prototype, \"pathData\", void 0);\n return Decorator;\n}(ChildProperty));\nexport { Decorator };\n/**\n * Describes the length and angle between the control point and the start point of bezier segment\n */\nvar Vector = /** @class */ (function (_super) {\n __extends(Vector, _super);\n function Vector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Vector.prototype, \"angle\", void 0);\n __decorate([\n Property(0)\n ], Vector.prototype, \"distance\", void 0);\n return Vector;\n}(ChildProperty));\nexport { Vector };\n/**\n * Sets the type of the connector\n */\nvar ConnectorShape = /** @class */ (function (_super) {\n __extends(ConnectorShape, _super);\n function ConnectorShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], ConnectorShape.prototype, \"type\", void 0);\n return ConnectorShape;\n}(ChildProperty));\nexport { ConnectorShape };\n/**\n * Sets the type of the flow in a BPMN Process\n */\nvar BpmnFlow = /** @class */ (function (_super) {\n __extends(BpmnFlow, _super);\n function BpmnFlow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Sequence')\n ], BpmnFlow.prototype, \"flow\", void 0);\n __decorate([\n Property('Normal')\n ], BpmnFlow.prototype, \"sequence\", void 0);\n __decorate([\n Property('Default')\n ], BpmnFlow.prototype, \"message\", void 0);\n __decorate([\n Property('Default')\n ], BpmnFlow.prototype, \"association\", void 0);\n return BpmnFlow;\n}(ConnectorShape));\nexport { BpmnFlow };\n/**\n * Defines the behavior of connector segments\n */\nvar ConnectorSegment = /** @class */ (function (_super) {\n __extends(ConnectorSegment, _super);\n // tslint:disable-next-line:no-any\n function ConnectorSegment(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n _this.points = [];\n return _this;\n }\n __decorate([\n Property('Straight')\n ], ConnectorSegment.prototype, \"type\", void 0);\n return ConnectorSegment;\n}(ChildProperty));\nexport { ConnectorSegment };\n/**\n * Defines the behavior of straight segments\n */\nvar StraightSegment = /** @class */ (function (_super) {\n __extends(StraightSegment, _super);\n function StraightSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], StraightSegment.prototype, \"point\", void 0);\n return StraightSegment;\n}(ConnectorSegment));\nexport { StraightSegment };\n/**\n * Defines the behavior of bezier segments\n */\nvar BezierSegment = /** @class */ (function (_super) {\n __extends(BezierSegment, _super);\n function BezierSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], BezierSegment.prototype, \"point1\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], BezierSegment.prototype, \"point2\", void 0);\n __decorate([\n Complex({ angle: 0, distance: 0 }, Vector)\n ], BezierSegment.prototype, \"vector1\", void 0);\n __decorate([\n Complex({ angle: 0, distance: 0 }, Vector)\n ], BezierSegment.prototype, \"vector2\", void 0);\n return BezierSegment;\n}(StraightSegment));\nexport { BezierSegment };\n/**\n * Defines the behavior of orthogonal segments\n */\nvar OrthogonalSegment = /** @class */ (function (_super) {\n __extends(OrthogonalSegment, _super);\n function OrthogonalSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], OrthogonalSegment.prototype, \"length\", void 0);\n __decorate([\n Property(null)\n ], OrthogonalSegment.prototype, \"direction\", void 0);\n return OrthogonalSegment;\n}(ConnectorSegment));\nexport { OrthogonalSegment };\n/**\n * Get the direction of the control points while the bezier is connected to the node\n */\nexport function getDirection(bounds, points, excludeBounds) {\n var center = bounds.center;\n var direction;\n var part = excludeBounds ? 45 : (180 / (2 + 2 / (bounds.height / bounds.width)));\n var fourty5 = part;\n var one35 = (180 - part);\n var two25 = one35 + (2 * part);\n var three15 = 360 - part;\n var angle = findAngle(points, center);\n if (angle > fourty5 && angle < one35) {\n return direction = 'top';\n }\n else if (angle > one35 && angle < two25) {\n return direction = 'right';\n }\n else if (angle > two25 && angle < three15) {\n return direction = 'bottom';\n }\n else {\n return direction = 'left';\n }\n}\nexport function isEmptyVector(element) {\n if (!element.distance && !element.angle) {\n return true;\n }\n return false;\n}\n/**\n * Get the bezier points if control points are not given.\n */\nexport function getBezierPoints(sourcePoint, targetPoint, direction) {\n var distance = 60;\n var value = { x: 0, y: 0 };\n if (!direction) {\n if (Math.abs(targetPoint.x - sourcePoint.x) > Math.abs(targetPoint.y - sourcePoint.y)) {\n direction = sourcePoint.x < targetPoint.x ? 'right' : 'left';\n }\n else {\n direction = sourcePoint.y < targetPoint.y ? 'bottom' : 'top';\n }\n }\n switch (direction) {\n case 'bottom':\n case 'top':\n distance = Math.min(Math.abs(sourcePoint.y - targetPoint.y) * 0.45, distance);\n value = { x: sourcePoint.x, y: sourcePoint.y + (direction === 'bottom' ? distance : -distance) };\n break;\n case 'right':\n case 'left':\n distance = Math.min(Math.abs(sourcePoint.x - targetPoint.x) * 0.45, distance);\n value = { x: sourcePoint.x + (direction === 'right' ? distance : -distance), y: sourcePoint.y };\n break;\n }\n return value;\n}\n/**\n * Get the bezier curve bounds.\n */\nexport function getBezierBounds(startPoint, controlPoint1, controlPoint2, endPoint, connector) {\n var minx = 0;\n var miny = 0;\n var maxx = 0;\n var maxy = 0;\n var tolerancevalue = 3;\n var max = Number((connector.distance(controlPoint1, startPoint) +\n connector.distance(controlPoint2, controlPoint1) +\n connector.distance(endPoint, controlPoint2)) / tolerancevalue);\n if (max !== 0) {\n for (var i = 0; i <= max; i++) {\n var t = i / max;\n var x = (1 - t) * (1 - t) * (1 - t) * startPoint.x +\n 3 * t * (1 - t) * (1 - t) * controlPoint1.x +\n 3 * t * t * (1 - t) * controlPoint2.x +\n t * t * t * endPoint.x;\n var y = (1 - t) * (1 - t) * (1 - t) * startPoint.y +\n 3 * t * (1 - t) * (1 - t) * controlPoint1.y +\n 3 * t * t * (1 - t) * controlPoint2.y +\n t * t * t * endPoint.y;\n if (i === 0) {\n minx = maxx = x;\n miny = maxy = y;\n }\n else {\n minx = Math.min(x, minx);\n miny = Math.min(y, miny);\n maxx = Math.max(x, maxx);\n maxy = Math.max(y, maxy);\n }\n }\n }\n return {\n x: minx, y: miny, width: maxx - minx, height: maxy - miny,\n left: minx, top: miny, right: (minx + (maxx - minx)), bottom: (miny + (maxy - miny)),\n center: { x: (minx + (maxx - minx)) / 2, y: (miny + (maxy - miny)) / 2 },\n };\n}\n/**\n * Get the intermediate bezier curve for point over connector\n */\nexport function bezierPoints(connector, startPoint, point1, point2, endPoint, i, max) {\n var pt = { x: 0, y: 0 };\n var t = i / max;\n var x = (1 - t) * (1 - t) * (1 - t) * startPoint.x +\n 3 * t * (1 - t) * (1 - t) * point1.x +\n 3 * t * t * (1 - t) * point2.x +\n t * t * t * endPoint.x;\n pt.x = x;\n var y = (1 - t) * (1 - t) * (1 - t) * startPoint.y +\n 3 * t * (1 - t) * (1 - t) * point1.y +\n 3 * t * t * (1 - t) * point2.y +\n t * t * t * endPoint.y;\n pt.y = y;\n return pt;\n}\n/**\n * Connectors are used to create links between nodes\n */\nvar Connector = /** @class */ (function (_super) {\n __extends(Connector, _super);\n // tslint:disable-next-line:no-any\n function Connector(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.parentId = '';\n /** @private */\n _this.bridges = [];\n return _this;\n }\n /** @private */\n // tslint:disable-next-line:no-any\n Connector.prototype.init = function (diagram) {\n if (!this.id) {\n this.id = randomId();\n }\n var bpmnElement;\n var container = new Canvas();\n var segment = new PathElement();\n segment.id = this.id + '_path';\n var srcDecorator = new PathElement();\n var targetDecorator = new PathElement();\n segment = this.getSegmentElement(this, segment);\n var bounds;\n var points = [];\n points = this.getConnectorPoints(this.type);\n points = this.clipDecorators(this, points);\n bounds = Rect.toBounds(points);\n container.width = bounds.width;\n container.height = bounds.height;\n container.offsetX = bounds.x + container.pivot.x * bounds.width;\n container.offsetY = bounds.y + container.pivot.y * bounds.height;\n switch (this.shape.type) {\n case 'Bpmn':\n switch (this.shape.flow) {\n case 'Sequence':\n bpmnElement = this.getBpmnSequenceFlow();\n break;\n case 'Association':\n bpmnElement = new PathElement();\n bpmnElement.visible = false;\n this.getBpmnAssociationFlow();\n break;\n case 'Message':\n bpmnElement = this.getBpmnMessageFlow();\n segment = this.getSegmentElement(this, segment);\n this.updateShapePosition(this, bpmnElement);\n break;\n }\n break;\n }\n var anglePoints = this.intermediatePoints;\n if (this.type === 'Bezier') {\n var firstSegment = this.segments[0];\n var lastSegment = this.segments[this.segments.length - 1];\n anglePoints = [!Point.isEmptyPoint(lastSegment.point2) ? lastSegment.point2 : lastSegment.bezierPoint2,\n !Point.isEmptyPoint(firstSegment.point1) ? firstSegment.point1 : firstSegment.bezierPoint1];\n }\n var accessContent = 'getDescription';\n var getDescription = diagram[accessContent];\n var strokeWidth = this.sourceWrapper ? this.sourceWrapper.style.strokeWidth / 2 / 2 : 0;\n srcDecorator = this.getDecoratorElement(points[0], anglePoints[1], this.sourceDecorator, true, getDescription);\n targetDecorator = this.getDecoratorElement(points[points.length - 1], anglePoints[anglePoints.length - 2], this.targetDecorator, false, getDescription);\n srcDecorator.id = this.id + '_srcDec';\n targetDecorator.id = this.id + '_tarDec';\n segment.style = this.style;\n /* tslint:disable:no-string-literal */\n segment.style['fill'] = 'transparent';\n if (getDescription !== undefined) {\n // tslint:disable-next-line:no-any\n var wrapperContent = getDescription(this, diagram);\n segment.description = wrapperContent ? wrapperContent : this.id;\n }\n container.style.strokeColor = 'transparent';\n container.style.fill = 'transparent';\n container.style.strokeWidth = 0;\n container.children = [segment, srcDecorator, targetDecorator];\n container.id = this.id;\n if (bpmnElement !== undefined) {\n container.children.push(bpmnElement);\n }\n container.offsetX = segment.offsetX;\n container.offsetY = segment.offsetY;\n container.width = segment.width;\n container.height = segment.height;\n for (var i = 0; this.annotations !== undefined, i < this.annotations.length; i++) {\n container.children.push(this.getAnnotationElement(this.annotations[i], this.intermediatePoints, bounds, getDescription));\n }\n this.wrapper = container;\n return container;\n };\n Connector.prototype.getBpmnSequenceFlow = function () {\n var segment = new PathElement();\n var pathseq = new PathElement();\n var pathseqData;\n if ((this.shape.sequence) === 'Normal' && this.type !== 'Bezier') {\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n }\n if ((this.shape.sequence) === 'Default') {\n segment = this.getSegmentElement(this, segment);\n var anglePoints = this.intermediatePoints;\n for (var j = 0; j < anglePoints.length - 1; j++) {\n length = length + this.distance(anglePoints[j], anglePoints[j + 1]);\n pathseqData = this.findPath(anglePoints[j], anglePoints[j + 1]);\n pathseq.data = pathseqData[0];\n pathseq.id = this.id + '_' + (this.shape.sequence);\n pathseq.offsetX = pathseqData[1].x;\n pathseq.offsetY = pathseqData[1].y;\n pathseq.rotateAngle = 45;\n pathseq.transform = Transform.Self;\n }\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n }\n if ((this.shape.sequence) === 'Conditional') {\n this.targetDecorator.shape = 'Arrow';\n this.sourceDecorator.shape = 'Diamond';\n this.sourceDecorator.style.fill = 'white';\n this.targetDecorator.style.fill = 'black';\n this.sourceDecorator.width = 20;\n this.sourceDecorator.height = 10;\n }\n return pathseq;\n };\n Connector.prototype.getBpmnAssociationFlow = function () {\n if ((this.shape.association) === 'Default') {\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n }\n if ((this.shape.association) === 'Directional') {\n this.style.strokeDashArray = '2 2';\n this.targetDecorator.style.fill = 'black';\n this.targetDecorator.shape = 'Arrow';\n }\n if ((this.shape.association) === 'BiDirectional') {\n this.style.strokeDashArray = '2 2';\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n this.sourceDecorator.shape = 'Arrow';\n this.sourceDecorator.style.fill = 'white';\n this.sourceDecorator.width = 5;\n this.sourceDecorator.height = 10;\n }\n };\n Connector.prototype.getBpmnMessageFlow = function () {\n var segmentMessage = new PathElement();\n this.style.strokeDashArray = '4 4';\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.width = 5;\n this.targetDecorator.height = 10;\n this.sourceDecorator.shape = 'Circle';\n if (((this.shape.message) === 'InitiatingMessage') ||\n ((this.shape.message) === 'NonInitiatingMessage')) {\n segmentMessage.id = this.id + '_' + (this.shape.message);\n segmentMessage.width = 25;\n segmentMessage.height = 15;\n segmentMessage.data = 'M0,0 L19.8,12.8 L40,0 L0, 0 L0, 25.5 L40, 25.5 L 40, 0';\n segmentMessage.horizontalAlignment = 'Center';\n segmentMessage.verticalAlignment = 'Center';\n segmentMessage.transform = Transform.Self;\n segmentMessage.style.fill = (this.shape.message) === 'NonInitiatingMessage' ? 'lightgrey' : 'white';\n }\n return segmentMessage;\n };\n /** @private */\n Connector.prototype.distance = function (pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n };\n Connector.prototype.findPath = function (sourcePt, targetPt) {\n var beginningpoint = { x: sourcePt.x, y: sourcePt.y };\n var distance = this.distance(sourcePt, targetPt);\n distance = Math.min(30, distance / 2);\n var angle = findAngle(sourcePt, targetPt);\n var transferpoint = Point.transform({ x: beginningpoint.x, y: beginningpoint.y }, angle, distance);\n var startpoint1 = Point.transform({ x: transferpoint.x, y: transferpoint.y }, angle, -12);\n var endpoint1 = Point.transform({ x: startpoint1.x, y: startpoint1.y }, angle, 12 * 2);\n var path = 'M' + startpoint1.x + ' ' + startpoint1.y + ' L' + endpoint1.x + ' ' + endpoint1.y;\n return [path, transferpoint];\n };\n /** @private */\n Connector.prototype.getAnnotationElement = function (annotation, points, bounds, getDescription) {\n annotation.id = annotation.id || randomId();\n var textele = new TextElement();\n textele.constraints = annotation.constraints;\n textele.visible = annotation.visibility;\n textele.rotateAngle = annotation.rotateAngle;\n textele.horizontalAlignment = annotation.horizontalAlignment;\n textele.verticalAlignment = annotation.verticalAlignment;\n textele.width = annotation.width;\n textele.height = annotation.height;\n if (bounds.width !== undefined) {\n textele.width = (annotation.width || bounds.width) - annotation.margin.left - annotation.margin.right;\n }\n textele.margin = annotation.margin;\n textele.id = this.id + '_' + annotation.id;\n if (bounds.width === 0) {\n bounds.width = this.style.strokeWidth;\n }\n if (bounds.height === 0) {\n bounds.height = this.style.strokeWidth;\n }\n textele.content = annotation.content;\n textele.style = annotation.style;\n // tslint:disable-next-line:no-any\n var wrapperContent;\n var description = getFunction(getDescription);\n if (description) {\n wrapperContent = description(annotation, this);\n }\n textele.description = wrapperContent ? wrapperContent : textele.id;\n this.updateAnnotation(annotation, points, bounds, textele);\n textele.style.textOverflow = 'Wrap';\n return textele;\n };\n /** @private */\n Connector.prototype.updateAnnotation = function (annotation, points, bounds, textElement) {\n var getPointloop;\n var newPoint;\n var align;\n var hAlign;\n var vAlign;\n var offsetPoint;\n var pivotPoint = { x: 0, y: 0 };\n textElement.refreshTextElement();\n textElement.width = (annotation.width || bounds.width);\n getPointloop = getAnnotationPosition(points, annotation, bounds);\n newPoint = getPointloop.point;\n if (annotation.segmentAngle) {\n textElement.rotateAngle = annotation.rotateAngle + getPointloop.angle;\n textElement.rotateAngle = (textElement.rotateAngle + 360) % 360;\n }\n if (bounds.width === 0) {\n bounds.width = this.style.strokeWidth;\n }\n if (bounds.height === 0) {\n bounds.height = this.style.strokeWidth;\n }\n offsetPoint = { x: ((newPoint.x - bounds.x) / bounds.width), y: ((newPoint.y - bounds.y) / bounds.height) };\n pivotPoint.x = bounds.width * offsetPoint.x;\n pivotPoint.y = bounds.height * offsetPoint.y;\n align = alignLabelOnSegments(annotation, getPointloop.angle, points);\n hAlign = align.hAlign;\n vAlign = align.vAlign;\n var horizor;\n var verzor;\n if (hAlign === 'left') {\n horizor = 'Left';\n pivotPoint.x += annotation.displacement.x;\n }\n else if (hAlign === 'right') {\n horizor = 'Right';\n pivotPoint.x -= annotation.displacement.x;\n }\n else if (hAlign === 'center') {\n horizor = 'Center';\n }\n if (vAlign === 'top') {\n verzor = 'Top';\n pivotPoint.y += annotation.displacement.y;\n }\n else if (vAlign === 'bottom') {\n verzor = 'Bottom';\n pivotPoint.y -= annotation.displacement.y;\n }\n else if (vAlign === 'center') {\n verzor = 'Center';\n }\n textElement.horizontalAlignment = horizor;\n textElement.verticalAlignment = verzor;\n textElement.setOffsetWithRespectToBounds(pivotPoint.x, pivotPoint.y, 'Absolute');\n textElement.relativeMode = 'Point';\n };\n /** @private */\n Connector.prototype.getConnectorPoints = function (type, points, layoutOrientation) {\n var width = Math.abs(this.sourcePoint.x - this.targetPoint.x);\n var height = Math.abs(this.sourcePoint.y - this.targetPoint.y);\n points = findConnectorPoints(this, layoutOrientation);\n var newPoints = points.slice(0);\n if (newPoints && newPoints.length > 0) {\n this.sourcePoint = newPoints[0];\n this.targetPoint = newPoints[newPoints.length - 1];\n }\n return newPoints;\n };\n /** @private */\n Connector.prototype.clipDecorator = function (connector, points, isSource) {\n var point = { x: 0, y: 0 };\n var start = { x: 0, y: 0 };\n var end = { x: 0, y: 0 };\n var length = points.length;\n start = !isSource ? points[length - 1] : points[0];\n end = !isSource ? points[length - 2] : points[1];\n var len = Point.distancePoints(start, end);\n len = (len === 0) ? 1 : len;\n var width = connector.style.strokeWidth - 1;\n point.x = (Math.round(start.x + width * (end.x - start.x) / len));\n point.y = (Math.round(start.y + width * (end.y - start.y) / len));\n var strokeWidth = 1;\n var node = isSource ? connector.sourceWrapper : connector.targetWrapper;\n if (node) {\n strokeWidth = node.style.strokeWidth;\n }\n if ((isSource && connector.sourceDecorator.shape !== 'None') ||\n (!isSource && connector.targetDecorator.shape !== 'None')) {\n point = Point.adjustPoint(point, end, true, (strokeWidth / 2));\n }\n return point;\n };\n /** @private */\n Connector.prototype.clipDecorators = function (connector, pts) {\n if (connector.sourceDecorator.shape !== 'None') {\n pts[0] = this.clipDecorator(connector, pts, true);\n }\n if (connector.targetDecorator.shape !== 'None') {\n pts[pts.length - 1] = this.clipDecorator(connector, pts, false);\n }\n return pts;\n };\n /** @private */\n Connector.prototype.updateSegmentElement = function (connector, points, element) {\n var segmentPath;\n var bounds = new Rect();\n var point;\n segmentPath = this.getSegmentPath(connector, points);\n if (connector.type === 'Bezier') {\n if (this.segments.length > 0) {\n for (var i = 0; i < this.segments.length; i++) {\n var segment = this.segments[i];\n var connectorSegment = connector.segments[i];\n var point1 = !Point.isEmptyPoint(segment.point1) ? connectorSegment.point1 : connectorSegment.bezierPoint1;\n var point2 = !Point.isEmptyPoint(segment.point2) ? connectorSegment.point2 : connectorSegment.bezierPoint2;\n bounds.uniteRect(getBezierBounds(segment.points[0], point1, point2, segment.points[1], connector));\n }\n }\n }\n else {\n bounds = Rect.toBounds(points);\n }\n element.width = bounds.width;\n element.height = bounds.height;\n element.offsetX = bounds.x + element.width / 2;\n element.offsetY = bounds.y + element.height / 2;\n element.data = segmentPath;\n if (connector.wrapper) {\n connector.wrapper.offsetX = element.offsetX;\n connector.wrapper.offsetY = element.offsetY;\n connector.wrapper.width = bounds.width;\n connector.wrapper.height = bounds.height;\n }\n return element;\n };\n /** @private */\n Connector.prototype.getSegmentElement = function (connector, segmentElement) {\n var bounds;\n var segmentPath;\n var points = [];\n points = this.getConnectorPoints(connector.type);\n this.intermediatePoints = points;\n segmentElement.staticSize = true;\n segmentElement = this.updateSegmentElement(connector, points, segmentElement);\n return segmentElement;\n };\n /** @private */\n Connector.prototype.getDecoratorElement = function (offsetPoint, adjacentPoint, decorator, isSource, getDescription) {\n var decEle = new PathElement();\n var getPath;\n var angle;\n decEle.transform = Transform.Self;\n this.updateDecoratorElement(decEle, offsetPoint, adjacentPoint, decorator);\n if (getDescription !== undefined) {\n // tslint:disable-next-line:no-any\n var wrapperContent = getDescription(decorator, this);\n decEle.description = wrapperContent ? wrapperContent :\n ('Specifies the ' + isSource ? 'source' : 'target' + 'port element of the connector');\n }\n return decEle;\n };\n Connector.prototype.bridgePath = function (connector, path, pointIndex) {\n var pathData = path;\n if (connector.bridges.length > 0) {\n if (connector.type === 'Straight') {\n for (var n = 0; n < connector.bridges.length; n++) {\n var bridge = connector.bridges[n];\n if (!bridge.rendered) {\n pathData += ' L' + bridge.startPoint.x + ' ' + bridge.startPoint.y;\n pathData += bridge.path;\n bridge.rendered = true;\n }\n }\n }\n else if (connector.type === 'Orthogonal') {\n for (var n = 0; n < connector.bridges.length; n++) {\n var bridge = connector.bridges[n];\n if (bridge.segmentPointIndex === pointIndex) {\n if (!bridge.rendered) {\n if (bridge.segmentPointIndex === pointIndex) {\n pathData += ' L' + bridge.startPoint.x + ' ' + bridge.startPoint.y;\n pathData += bridge.path;\n bridge.rendered = true;\n }\n }\n }\n }\n }\n }\n return pathData;\n };\n /** @private */\n Connector.prototype.updateDecoratorElement = function (element, pt, adjacentPoint, decorator) {\n var getPath;\n var angle;\n element.offsetX = pt.x;\n element.offsetY = pt.y;\n angle = Point.findAngle(pt, adjacentPoint);\n getPath = getDecoratorShape(decorator.shape, decorator);\n var size = new Size(decorator.width, decorator.height);\n element.pivot.x = decorator.pivot.x;\n element.pivot.y = decorator.pivot.y;\n element.style = decorator.style;\n element.rotateAngle = angle;\n element.data = getPath;\n element.width = size.width;\n element.height = size.height;\n };\n /** @private */\n Connector.prototype.getSegmentPath = function (connector, points) {\n var path = '';\n var getPt;\n var end;\n var st;\n var pts = [];\n var j = 0;\n while (j < points.length) {\n pts.push({ x: points[j].x, y: points[j].y });\n j++;\n }\n for (var m = 0; m < connector.bridges.length; m++) {\n var bridge = connector.bridges[m];\n bridge.rendered = false;\n }\n pts = this.clipDecorators(connector, pts);\n if (this.cornerRadius > 0 && this.type !== 'Bezier') {\n for (var j_1 = 0; j_1 < pts.length - 1; j_1++) {\n getPt = pts[j_1];\n if (j_1 === 0) {\n path = 'M' + getPt.x + ' ' + getPt.y;\n }\n var segLength = Point.distancePoints(pts[j_1], pts[j_1 + 1]);\n if (segLength > 0) {\n if (j_1 < pts.length - 2) {\n if (segLength < this.cornerRadius * 2) {\n end = Point.adjustPoint(pts[j_1], pts[j_1 + 1], false, segLength / 2);\n }\n else {\n end = Point.adjustPoint(pts[j_1], pts[j_1 + 1], false, this.cornerRadius);\n }\n }\n else {\n end = pts[j_1 + 1];\n }\n if (j_1 > 0) {\n if (segLength < this.cornerRadius * 2) {\n st = Point.adjustPoint(pts[j_1], pts[j_1 + 1], true, segLength / 2);\n if (j_1 < pts.length - 2) {\n end = null;\n }\n }\n else {\n st = Point.adjustPoint(pts[j_1], pts[j_1 + 1], true, this.cornerRadius);\n }\n }\n if (st) {\n path += 'Q' + getPt.x + ' ' + getPt.y + ' ' + st.x + ' ' + st.y;\n }\n if (end) {\n if (connector.bridges.length > 0) {\n path = this.bridgePath(connector, path, j_1);\n if (connector.type === 'Orthogonal') {\n path = this.bridgePath(connector, path, j_1 + 1);\n }\n }\n path += ' L' + end.x + ' ' + end.y;\n }\n }\n }\n }\n else {\n if (this.type === 'Bezier') {\n var direction = void 0;\n var segments = this.segments;\n for (var j_2 = 0; j_2 < segments.length; j_2++) {\n if (pts.length > 2) {\n segments[j_2].bezierPoint1 = { x: 0, y: 0 };\n segments[j_2].bezierPoint2 = { x: 0, y: 0 };\n }\n if (Point.isEmptyPoint(segments[j_2].point1) && !segments[j_2].vector1.angle && !segments[j_2].vector1.distance) {\n if ((connector.sourceID || this.sourcePortID) && this.sourceWrapper) {\n direction = getDirection(this.sourceWrapper.bounds, pts[j_2], true);\n }\n segments[j_2].bezierPoint1 = getBezierPoints(pts[j_2], pts[j_2 + 1], direction);\n }\n else if (segments[j_2].vector1.angle || segments[j_2].vector1.distance) {\n segments[j_2].bezierPoint1 = Point.transform(pts[j_2], segments[j_2].vector1.angle, segments[j_2].vector1.distance);\n }\n else {\n segments[j_2].bezierPoint1 = {\n x: segments[j_2].point1.x || segments[j_2].bezierPoint1.x,\n y: segments[j_2].point1.y || segments[j_2].bezierPoint1.y\n };\n }\n if (Point.isEmptyPoint(segments[j_2].point2) && !segments[j_2].vector2.angle && !segments[j_2].vector2.distance) {\n if ((connector.targetID || this.targetPortID) && this.targetWrapper) {\n direction = getDirection(this.targetWrapper.bounds, pts[j_2 + 1], true);\n }\n segments[j_2].bezierPoint2 = getBezierPoints(pts[j_2 + 1], pts[j_2], direction);\n }\n else if (segments[j_2].vector2.angle || segments[j_2].vector2.distance) {\n segments[j_2].bezierPoint2 = Point.transform(pts[j_2 + 1], segments[j_2].vector2.angle, segments[j_2].vector2.distance);\n }\n else {\n segments[j_2].bezierPoint2 = {\n x: segments[j_2].point2.x || segments[j_2].bezierPoint2.x,\n y: segments[j_2].point2.y || segments[j_2].bezierPoint2.y\n };\n }\n }\n pts.splice(1, 0, { x: segments[0].bezierPoint1.x, y: segments[0].bezierPoint1.y });\n pts.splice(pts.length - 1, 0, {\n x: segments[segments.length - 1].bezierPoint2.x, y: segments[segments.length - 1].bezierPoint2.y\n });\n pts = this.clipDecorators(connector, pts);\n for (var j_3 = 0; j_3 < segments.length; j_3++) {\n if (j_3 === 0) {\n path = 'M' + pts[0].x + ' ' + pts[0].y;\n }\n var lastPoint = (j_3 === segments.length - 1) ? pts[pts.length - 1].x + ' ' + pts[pts.length - 1].y :\n segments[j_3].points[segments[j_3].points.length - 1].x + ' ' + segments[j_3].points[segments[j_3].points.length - 1].y;\n path += 'C' +\n segments[j_3].bezierPoint1.x + ' ' + segments[j_3].bezierPoint1.y + ' ' + segments[j_3].bezierPoint2.x + ' '\n + segments[j_3].bezierPoint2.y + ' ' + lastPoint;\n }\n }\n else {\n for (var k = 0; k < pts.length; k++) {\n getPt = pts[k];\n if (k === 0) {\n path = 'M' + getPt.x + ' ' + getPt.y;\n }\n if (k > 0) {\n path = this.bridgePath(connector, path, k);\n path += ' ' + 'L' + getPt.x + ' ' + getPt.y;\n }\n }\n }\n }\n return path;\n };\n /** @private */\n Connector.prototype.updateShapeElement = function (connector) {\n var element;\n switch (connector.shape.type) {\n case 'Bpmn':\n if (connector.wrapper.children[3] instanceof PathElement) {\n element = connector.wrapper.children[3];\n }\n if (connector.shape.flow === 'Message') {\n this.updateShapePosition(connector, element);\n }\n break;\n }\n };\n /** @private */\n Connector.prototype.updateShapePosition = function (connector, element) {\n var segmentOffset = 0.5;\n var angle;\n var pt;\n var length = 0;\n var anglePoints = this.intermediatePoints;\n for (var i = 0; i < anglePoints.length - 1; i++) {\n length = length + this.distance(anglePoints[i], anglePoints[i + 1]);\n var offsetLength = length * segmentOffset;\n if (length >= offsetLength) {\n angle = findAngle(anglePoints[i], anglePoints[i + 1]);\n pt = Point.transform(anglePoints[i], angle, offsetLength);\n }\n }\n element.offsetX = pt.x;\n element.offsetY = pt.y;\n };\n /** @hidden */\n Connector.prototype.scale = function (sw, sh, width, height, refObject) {\n var tx = 0;\n var ty = 0;\n if (this.wrapper && this.wrapper.outerBounds) {\n var outerBounds = getOuterBounds(this);\n var connWidth = (this.wrapper.bounds.width || this.style.strokeWidth || 1) - 2;\n var connHeight = (this.wrapper.bounds.height || this.style.strokeWidth || 1) - 2;\n tx = (outerBounds.width - connWidth);\n ty = (outerBounds.height - connHeight);\n sw = (width - (Math.max(tx, ty))) / connWidth;\n sh = (height - (Math.max(tx, ty))) / connHeight;\n tx = ty = Math.min(tx, ty);\n }\n sw = sh = Math.min(sw, sh);\n var matrix = identityMatrix();\n refObject = refObject || this.wrapper;\n rotateMatrix(matrix, -refObject.rotateAngle, refObject.offsetX, refObject.offsetY);\n scaleMatrix(matrix, sw, sh, refObject.offsetX, refObject.offsetY);\n rotateMatrix(matrix, refObject.rotateAngle, refObject.offsetX, refObject.offsetY);\n var points = transformPointsByMatrix(matrix, this.intermediatePoints);\n this.sourcePoint = points[0];\n this.targetPoint = points[points.length - 1];\n points = this.intermediatePoints = findConnectorPoints(this);\n updateConnector(this, points);\n return { x: tx, y: ty };\n };\n __decorate([\n ComplexFactory(getConnectorType)\n ], Connector.prototype, \"shape\", void 0);\n __decorate([\n Property(ConnectorConstraints.Default)\n ], Connector.prototype, \"constraints\", void 0);\n __decorate([\n Property(10)\n ], Connector.prototype, \"bridgeSpace\", void 0);\n __decorate([\n Collection([], PathAnnotation)\n ], Connector.prototype, \"annotations\", void 0);\n __decorate([\n Complex({}, Point)\n ], Connector.prototype, \"sourcePoint\", void 0);\n __decorate([\n Complex({}, Point)\n ], Connector.prototype, \"targetPoint\", void 0);\n __decorate([\n CollectionFactory(getSegmentType)\n ], Connector.prototype, \"segments\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"sourceID\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"targetID\", void 0);\n __decorate([\n Property(10)\n ], Connector.prototype, \"hitPadding\", void 0);\n __decorate([\n Property('Straight')\n ], Connector.prototype, \"type\", void 0);\n __decorate([\n Property(0)\n ], Connector.prototype, \"cornerRadius\", void 0);\n __decorate([\n Complex({ shape: 'None' }, Decorator)\n ], Connector.prototype, \"sourceDecorator\", void 0);\n __decorate([\n Complex({ shape: 'Arrow' }, Decorator)\n ], Connector.prototype, \"targetDecorator\", void 0);\n __decorate([\n Complex({}, DiagramTooltip)\n ], Connector.prototype, \"tooltip\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"sourcePortID\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"targetPortID\", void 0);\n __decorate([\n Complex({ strokeWidth: 1, strokeColor: 'black' }, StrokeStyle)\n ], Connector.prototype, \"style\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"wrapper\", void 0);\n return Connector;\n}(NodeBase));\nexport { Connector };\n","import { Node } from './../objects/node';\nimport { NodeConstraints, ConnectorConstraints, DiagramConstraints, DiagramTools, DiagramAction } from '../enum/enum';\nimport { AnnotationConstraints, PortConstraints } from '../enum/enum';\nimport { Connector } from './../objects/connector';\nimport { Selector } from './../interaction/selector';\nimport { ShapeAnnotation, PathAnnotation } from '../objects/annotation';\n/**\n * constraints-util module contains the common constraints\n */\n/** @private */\nexport function canSelect(node) {\n if (node) {\n var state = 0;\n if ((node instanceof ShapeAnnotation) || (node instanceof PathAnnotation)) {\n state = node.constraints & AnnotationConstraints.Select;\n }\n else if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.Select;\n }\n else {\n state = node.constraints & NodeConstraints.Select;\n }\n return state;\n }\n return 1;\n}\n/** @private */\nexport function canMove(node) {\n if (node) {\n var state = 0;\n if ((node instanceof ShapeAnnotation) || (node instanceof PathAnnotation)) {\n state = node.constraints & AnnotationConstraints.Drag;\n }\n else if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.Drag;\n }\n else if (node instanceof Selector) {\n state = 1;\n }\n else {\n state = node.constraints & NodeConstraints.Drag;\n }\n return state;\n }\n return 1;\n}\n/** @private */\nexport function canEnablePointerEvents(node, diagram) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.PointerEvents;\n }\n else {\n state = node.constraints & NodeConstraints.PointerEvents;\n }\n return state;\n}\n/** @private */\nexport function canDelete(node) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.Delete;\n }\n else {\n state = node.constraints & NodeConstraints.Delete;\n }\n return state;\n}\n/** @private */\nexport function canBridge(connector, diagram) {\n var state = 0;\n if (connector.constraints & ConnectorConstraints.Bridging) {\n state = connector.constraints & ConnectorConstraints.Bridging;\n }\n else if (connector.constraints & ConnectorConstraints.InheritBridging) {\n state = diagram.constraints & DiagramConstraints.Bridging;\n }\n else {\n state = 0;\n }\n return state;\n}\n/** @private */\nexport function canDragSourceEnd(connector) {\n return connector.constraints & ConnectorConstraints.DragSourceEnd;\n}\n/** @private */\nexport function canDragTargetEnd(connector) {\n return connector.constraints & ConnectorConstraints.DragTargetEnd;\n}\n/** @private */\nexport function canDragSegmentThumb(connector) {\n return connector.constraints & ConnectorConstraints.DragSegmentThumb;\n}\n/** @private */\nexport function canRotate(node) {\n if ((node instanceof ShapeAnnotation) || (node instanceof PathAnnotation)) {\n return node.constraints & AnnotationConstraints.Rotate;\n }\n else {\n return node.constraints & NodeConstraints.Rotate;\n }\n}\n/** @private */\nexport function canShadow(node) {\n return node.constraints & NodeConstraints.Shadow;\n}\n/** @private */\nexport function canInConnect(node) {\n if ((node instanceof Node) && (node.constraints & NodeConstraints.InConnect)) {\n return node.constraints & NodeConstraints.InConnect;\n }\n return 0;\n}\n/** @private */\nexport function canOutConnect(node) {\n if ((node instanceof Node) && (node.constraints & NodeConstraints.OutConnect)) {\n return node.constraints & NodeConstraints.OutConnect;\n }\n return 0;\n}\n/** @private */\nexport function canResize(node, direction) {\n var returnValue = 0;\n if (node instanceof ShapeAnnotation || node instanceof PathAnnotation) {\n returnValue = node.constraints & AnnotationConstraints.Resize;\n }\n else if (node) {\n if (direction === 'SouthEast') {\n returnValue = node.constraints & NodeConstraints.ResizeSouthEast;\n }\n else if (direction === 'East') {\n returnValue = node.constraints & NodeConstraints.ResizeEast;\n }\n else if (direction === 'NorthEast') {\n returnValue = node.constraints & NodeConstraints.ResizeNorthEast;\n }\n else if (direction === 'South') {\n returnValue = node.constraints & NodeConstraints.ResizeSouth;\n }\n else if (direction === 'North') {\n returnValue = node.constraints & NodeConstraints.ResizeNorth;\n }\n else if (direction === 'SouthWest') {\n returnValue = node.constraints & NodeConstraints.ResizeSouthWest;\n }\n else if (direction === 'West') {\n returnValue = node.constraints & NodeConstraints.ResizeWest;\n }\n else if (direction === 'NorthWest') {\n returnValue = node.constraints & NodeConstraints.ResizeNorthWest;\n }\n }\n return returnValue;\n}\n/** @private */\nexport function canAllowDrop(node) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.AllowDrop;\n }\n else {\n state = node.constraints & NodeConstraints.AllowDrop;\n }\n return state;\n}\n/** @private */\nexport function canVitualize(diagram) {\n return diagram.constraints & DiagramConstraints.Virtualization;\n}\n/** @private */\nexport function canEnableToolTip(node, diagram) {\n var state = 0;\n if (node instanceof Connector) {\n if (node.constraints & ConnectorConstraints.Tooltip) {\n state = node.constraints & ConnectorConstraints.Tooltip;\n }\n else if (node.constraints & ConnectorConstraints.InheritTooltip) {\n state = diagram.constraints & DiagramConstraints.Tooltip;\n }\n }\n else {\n if (node.constraints & NodeConstraints.Tooltip) {\n state = node.constraints & NodeConstraints.Tooltip;\n }\n else if (node.constraints & NodeConstraints.InheritTooltip) {\n state = diagram.constraints & DiagramConstraints.Tooltip;\n }\n }\n return state;\n}\n/** @private */\nexport function canSingleSelect(model) {\n return model.tool & DiagramTools.SingleSelect;\n}\n/** @private */\nexport function canMultiSelect(model) {\n return model.tool & DiagramTools.MultipleSelect;\n}\n/** @private */\nexport function canZoomPan(model) {\n return model.tool & DiagramTools.ZoomPan;\n}\n/** @private */\nexport function canContinuousDraw(model) {\n return model.tool & DiagramTools.ContinuousDraw;\n}\n/** @private */\nexport function canDrawOnce(model) {\n return model.tool & DiagramTools.DrawOnce;\n}\n/** @private */\nexport function defaultTool(model) {\n return (model.tool & DiagramTools.SingleSelect) || (model.tool & DiagramTools.MultipleSelect);\n}\n/** @private */\nexport function canZoom(model) {\n return model.constraints & DiagramConstraints.Zoom;\n}\n/** @private */\nexport function canPan(model) {\n return model.constraints & DiagramConstraints.Pan;\n}\n/** @private */\nexport function canUserInteract(model) {\n return model.constraints & DiagramConstraints.UserInteraction;\n}\n/** @private */\nexport function canApiInteract(model) {\n return model.constraints & DiagramConstraints.ApiUpdate;\n}\n/** @private */\nexport function canPanX(model) {\n return ((model.constraints & DiagramConstraints.PanX));\n}\n/** @private */\nexport function canPanY(model) {\n return ((model.constraints & DiagramConstraints.PanY));\n}\n/** @private */\nexport function canZoomTextEdit(diagram) {\n return ((diagram.constraints & DiagramConstraints.ZoomTextEdit));\n}\n/** @private */\nexport function canPageEditable(model) {\n return canApiInteract(model) || (model.diagramActions & DiagramAction.ToolAction);\n}\n/** @private */\nexport function enableReadOnly(annotation, node) {\n var enumValue = 0;\n enumValue = (node instanceof Connector) ? ConnectorConstraints.ReadOnly : NodeConstraints.ReadOnly;\n if (node.shape.type === 'Text') {\n return node.constraints & NodeConstraints.ReadOnly;\n }\n else if (node.constraints & enumValue) {\n if (annotation.constraints & AnnotationConstraints.InheritReadOnly) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (annotation.constraints & AnnotationConstraints.ReadOnly) {\n return 1;\n }\n return 0;\n}\n/** @private */\nexport function canDraw(port, diagram) {\n return port.constraints & PortConstraints.Draw;\n}\n/** @private */\nexport function canDrag(port, diagram) {\n return port.constraints & PortConstraints.Drag;\n}\n","import { createHtmlElement, removeElement } from '../utility/dom-util';\nimport { Ruler } from '../../ruler/index';\nimport { Size } from '../primitives/size';\nimport { getFunction } from '../utility/base-util';\n/**\n * defines the helper methods for the ruler\n */\n/**\n * @private\n */\nexport function renderOverlapElement(diagram) {\n var rulerSize = getRulerSize(diagram);\n var attributes = {\n 'id': diagram.element.id + '_overlapRuler',\n style: 'height:' + rulerSize.height + 'px;width:' + rulerSize.width + 'px;position:absolute;left:0;top:0',\n class: 'e-ruler-overlap'\n };\n var overlap = createHtmlElement('div', attributes);\n diagram.element.insertBefore(overlap, diagram.element.firstChild);\n}\n/**\n * @private\n */\nexport function renderRuler(diagram, isHorizontal) {\n var div = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n var rulerSize = getRulerSize(diagram);\n var rulerGeometry = getRulerGeometry(diagram);\n var margin = isHorizontal ? ('margin-left:' + rulerSize.width + 'px;') : ('margin-top:' + rulerSize.height + 'px;');\n if (!div) {\n var style = 'height:' + (isHorizontal ? rulerSize.height : (rulerGeometry.height + 100)) + 'px;overflow:hidden;width:' +\n (isHorizontal ? (rulerGeometry.width + 100) : rulerSize.width) + 'px;position:absolute;font-size:11px;' + margin;\n var attributes = {\n 'id': diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'),\n style: style\n };\n div = createHtmlElement('div', attributes);\n }\n diagram.element.insertBefore(div, diagram.element.firstChild);\n var diagramRuler = isHorizontal ? diagram.rulerSettings.horizontalRuler : diagram.rulerSettings.verticalRuler;\n var ruler = new Ruler(diagramRuler);\n ruler.orientation = isHorizontal ? 'Horizontal' : 'Vertical';\n ruler.length = (isHorizontal ? rulerGeometry.width : rulerGeometry.height) + diagramRuler.segmentWidth;\n ruler.appendTo('#' + diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n isHorizontal ? diagram.hRuler = ruler : diagram.vRuler = ruler;\n var rulerObj = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n isHorizontal ? diagram.hRuler.element = rulerObj : diagram.vRuler.element = rulerObj;\n}\n/**\n * @private\n */\nexport function updateRuler(diagram) {\n var hOffset = -diagram.scroller.horizontalOffset;\n var vOffset = -diagram.scroller.verticalOffset;\n if (diagram && diagram.rulerSettings.showRulers) {\n diagram.hRuler.length = 0;\n diagram.vRuler.length = 0;\n if (hOffset !== undefined && diagram.hRuler.element) {\n updateRulerDimension(diagram, diagram.hRuler, hOffset, true);\n }\n if (vOffset !== undefined && diagram.vRuler.element) {\n updateRulerDimension(diagram, diagram.vRuler, vOffset, false);\n }\n }\n else {\n removeRulerElements(diagram);\n }\n}\n/**\n * @private\n */\nexport function removeRulerElements(diagram) {\n removeElement(diagram.element.id + '_hRuler');\n removeElement(diagram.element.id + '_vRuler');\n removeElement(diagram.element.id + '_overlapRuler');\n}\n/** @private */\nexport function getRulerSize(diagram) {\n var top = 0;\n var left = 0;\n if (diagram.rulerSettings.showRulers) {\n top = diagram.rulerSettings.horizontalRuler.thickness;\n left = diagram.rulerSettings.verticalRuler.thickness;\n }\n return new Size(left, top);\n}\n/** @private */\nexport function getRulerGeometry(diagram) {\n var rulerSize = getRulerSize(diagram);\n var height = diagram.scroller.viewPortHeight;\n var width = diagram.scroller.viewPortWidth;\n if (width < diagram.element.clientWidth - rulerSize.width) {\n width = diagram.element.clientWidth - rulerSize.width;\n }\n if (height < diagram.element.clientHeight - rulerSize.height) {\n height = diagram.element.clientHeight - rulerSize.height;\n }\n if (diagram.hRuler && diagram.hRuler.length) {\n width = diagram.hRuler.length;\n }\n if (diagram.vRuler && diagram.vRuler.length) {\n height = diagram.vRuler.length;\n }\n return new Size(width, height);\n}\n/**\n * @private\n */\nexport function removeRulerMarkers() {\n var markers = document.getElementsByClassName('e-d-ruler-marker');\n var marker;\n var i;\n if (markers && markers.length > 0) {\n for (i = markers.length - 1; i >= 0; i--) {\n marker = markers[i];\n if (marker) {\n marker.parentNode.removeChild(marker);\n }\n }\n }\n}\nexport function drawRulerMarkers(diagram, currentPoint) {\n if (diagram.rulerSettings.showRulers) {\n diagram.hRuler.drawRulerMarker(diagram.hRuler.element, currentPoint, diagram.scroller.horizontalOffset);\n diagram.vRuler.drawRulerMarker(diagram.vRuler.element, currentPoint, diagram.scroller.verticalOffset);\n }\n}\nfunction updateRulerDimension(diagram, ruler, offset, isHorizontal) {\n var rulerSize = getRulerSize(diagram);\n var rulerGeometry = getRulerGeometry(diagram);\n var diagramRuler = isHorizontal ? diagram.rulerSettings.horizontalRuler : diagram.rulerSettings.verticalRuler;\n updateRulerDiv(diagram, rulerGeometry, isHorizontal);\n updateRulerSpace(diagram, rulerGeometry, isHorizontal);\n ruler.offset = offset;\n ruler.scale = diagram.scroller.currentZoom;\n ruler.length = rulerGeometry.width + 100;\n ruler.arrangeTick = getFunction(diagramRuler.arrangeTick);\n ruler.dataBind();\n var rulerObj = isHorizontal ? diagram.hRuler.element : diagram.vRuler.element;\n if (isHorizontal) {\n rulerObj.style.marginLeft = (rulerSize.width - ruler.hRulerOffset) + 'px';\n }\n else {\n rulerObj.style.marginTop = (rulerSize.height - ruler.vRulerOffset) + 'px';\n }\n}\nfunction updateRulerSpace(diagram, rulerGeometry, isHorizontal) {\n var div = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler_ruler_space' : '_vRuler_ruler_space'));\n var ruler = isHorizontal ? diagram.hRuler : diagram.vRuler;\n if (div && diagram && rulerGeometry) {\n div.style.width = (isHorizontal ? (rulerGeometry.width + (ruler.segmentWidth * 2)) : ruler.thickness) + 'px';\n div.style.height = (isHorizontal ? ruler.thickness : (rulerGeometry.height + (ruler.segmentWidth * 2))) + 'px';\n }\n}\nfunction updateRulerDiv(diagram, rulerGeometry, isHorizontal) {\n var div = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n var ruler = isHorizontal ? diagram.hRuler : diagram.vRuler;\n if (div && diagram && rulerGeometry) {\n div.style.width = (isHorizontal ? (rulerGeometry.width + ruler.segmentWidth) : ruler.thickness) + 'px';\n div.style.height = (isHorizontal ? ruler.thickness : (rulerGeometry.height + ruler.segmentWidth)) + 'px';\n div = document.getElementById(diagram.element.id + '_overlapRuler');\n if (div) {\n isHorizontal ? (div.style.height = ruler.thickness + 'px') : (div.style.width = ruler.thickness + 'px');\n }\n }\n}\n","import { Size } from './../primitives/size';\nimport { Rect } from './../primitives/rect';\nimport { identityMatrix, rotateMatrix, transformPointByMatrix, scaleMatrix } from './../primitives/matrix';\nimport { DiagramElement } from './../core/elements/diagram-element';\nimport { Container } from './../core/containers/container';\nimport { StrokeStyle } from './../core/appearance';\nimport { Point } from './../primitives/point';\nimport { ConnectorConstraints, NodeConstraints } from './../enum/enum';\nimport { SelectorConstraints, ThumbsConstraints } from './../enum/enum';\nimport { PathElement } from './../core/elements/path-element';\nimport { DiagramNativeElement } from './../core/elements/native-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { ImageElement } from '../core/elements/image-element';\nimport { Node } from './../objects/node';\nimport { Connector, bezierPoints } from './../objects/connector';\nimport { getBasicShape } from './../objects/dictionary/basic-shapes';\nimport { getFlowShape } from './../objects/dictionary/flow-shapes';\nimport { Diagram } from './../diagram';\nimport { getContent, removeElement, hasClass, getDiagramElement } from './dom-util';\nimport { getBounds, cloneObject, rotatePoint, getFunction } from './base-util';\nimport { getPolygonPath } from './../utility/path-util';\nimport { DiagramHtmlElement } from '../core/elements/html-element';\nimport { getRulerSize } from '../ruler/ruler';\nimport { canResize } from './constraints-util';\n/** @private */\nexport function completeRegion(region, selectedObjects) {\n var collection = [];\n for (var i = 0; i < selectedObjects.length; i++) {\n var obj = selectedObjects[i];\n if (region.containsRect(obj.wrapper.bounds)) {\n collection.push(obj);\n }\n }\n return collection;\n}\n/**\n * @private\n */\nexport function findObjectType(drawingObject) {\n var type;\n if (drawingObject) {\n if (drawingObject.type) {\n type = 'Connector';\n }\n else if (drawingObject.shape && !drawingObject.type) {\n type = 'Node';\n }\n }\n return type;\n}\n/** @private */\nexport function findNearestPoint(reference, start, end) {\n var shortestPoint;\n var shortest = Point.findLength(start, reference);\n var shortest1 = Point.findLength(end, reference);\n if (shortest > shortest1) {\n shortestPoint = end;\n }\n else {\n shortestPoint = start;\n }\n var angleBWStAndEnd = Point.findAngle(start, end);\n var angleBWStAndRef = Point.findAngle(shortestPoint, reference);\n var r = Point.findLength(shortestPoint, reference);\n var vaAngle = angleBWStAndRef + ((angleBWStAndEnd - angleBWStAndRef) * 2);\n return {\n x: (shortestPoint.x + r * Math.cos(vaAngle * Math.PI / 180)),\n y: (shortestPoint.y + r * Math.sin(vaAngle * Math.PI / 180))\n };\n}\nfunction pointsForBezier(connector) {\n var points = [];\n if (connector.type === 'Bezier') {\n var k = 0;\n for (var i = 0; i < connector.segments.length; i++) {\n var tolerance = 1.5;\n var segment = connector.segments[i];\n var pt = { x: 0, y: 0 };\n var point1 = !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1;\n var point2 = !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2;\n var max = Number((connector.distance(point1, segment.points[0]) +\n connector.distance(point2, point1) +\n connector.distance(segment.points[1], point2)) / tolerance);\n for (var j = 0; j < max - 1; j = j + 10) {\n points[k] =\n bezierPoints(connector, segment.points[0], !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1, !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2, segment.points[1], j, max);\n k++;\n }\n }\n }\n return points;\n}\nexport function isDiagramChild(htmlLayer) {\n var element = htmlLayer.parentElement;\n do {\n if (hasClass(element, 'e-diagram')) {\n return true;\n }\n element = element.parentElement;\n } while (element);\n return false;\n}\nexport function groupHasType(node, type, nameTable) {\n var contains = false;\n if (node && node.children && node.children.length > 0) {\n var child = void 0;\n var i = 0;\n for (; i < node.children.length; i++) {\n child = nameTable[node.children[i]];\n if (child.shape.type === type) {\n return true;\n }\n return groupHasType(child, type, nameTable);\n }\n }\n return contains;\n}\n/** @private */\nexport function isPointOverConnector(connector, reference) {\n var intermediatePoints;\n intermediatePoints = connector.type === 'Bezier' ? pointsForBezier(connector) :\n connector.intermediatePoints;\n for (var i = 0; i < intermediatePoints.length - 1; i++) {\n var start = intermediatePoints[i];\n var end = intermediatePoints[i + 1];\n var rect = Rect.toBounds([start, end]);\n rect.Inflate(connector.hitPadding);\n if (rect.containsPoint(reference)) {\n var intersectinPt = findNearestPoint(reference, start, end);\n var segment1 = { x1: start.x, x2: end.x, y1: start.y, y2: end.y };\n var segment2 = { x1: reference.x, x2: intersectinPt.x, y1: reference.y, y2: intersectinPt.y };\n var intersectDetails = intersect3(segment1, segment2);\n if (intersectDetails.enabled) {\n var distance = Point.findLength(reference, intersectDetails.intersectPt);\n if (Math.abs(distance) < connector.hitPadding) {\n return true;\n }\n }\n else {\n var rect_1 = Rect.toBounds([reference, reference]);\n rect_1.Inflate(3);\n if (rect_1.containsPoint(start) || rect_1.containsPoint(end)) {\n return true;\n }\n }\n if (Point.equals(reference, intersectinPt)) {\n return true;\n }\n }\n }\n if (connector.annotations.length > 0) {\n var container = connector.wrapper.children;\n for (var i = 3; i < container.length; i++) {\n var textElement = container[i];\n if (textElement.bounds.containsPoint(reference)) {\n return true;\n }\n }\n }\n return false;\n}\n/** @private */\nexport function intersect3(lineUtil1, lineUtil2) {\n var point = { x: 0, y: 0 };\n var l1 = lineUtil1;\n var l2 = lineUtil2;\n var d = (l2.y2 - l2.y1) * (l1.x2 - l1.x1) - (l2.x2 - l2.x1) * (l1.y2 - l1.y1);\n var na = (l2.x2 - l2.x1) * (l1.y1 - l2.y1) - (l2.y2 - l2.y1) * (l1.x1 - l2.x1);\n var nb = (l1.x2 - l1.x1) * (l1.y1 - l2.y1) - (l1.y2 - l1.y1) * (l1.x1 - l2.x1);\n if (d === 0) {\n return { enabled: false, intersectPt: point };\n }\n var ua = na / d;\n var ub = nb / d;\n if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n point.x = l1.x1 + (ua * (l1.x2 - l1.x1));\n point.y = l1.y1 + (ua * (l1.y2 - l1.y1));\n return { enabled: true, intersectPt: point };\n }\n return { enabled: false, intersectPt: point };\n}\n/** @private */\nexport function getPoints(element, corners) {\n var line = [];\n line.push(corners.topLeft);\n line.push(corners.topRight);\n line.push(corners.bottomRight);\n line.push(corners.bottomLeft);\n return line;\n}\n/**\n * @private\n * sets the offset of the tooltip.\n * @param diagram\n * @param mousePosition\n * @param node\n */\nexport function getTooltipOffset(diagram, mousePosition, node) {\n var offset;\n var inheritTooltip = (node instanceof Node) ? (node.constraints & NodeConstraints.InheritTooltip)\n : (node.constraints & ConnectorConstraints.InheritTooltip);\n var objectTooltip = (node instanceof Node) ? (node.constraints & NodeConstraints.Tooltip)\n : (node.constraints & ConnectorConstraints.Tooltip);\n var isMouseBased = ((!inheritTooltip && objectTooltip ? node.tooltip.relativeMode\n : diagram.tooltip.relativeMode) === 'Mouse') ? true : false;\n offset = tooltipOffset(node, mousePosition, diagram, isMouseBased);\n var rulerSize = getRulerSize(diagram);\n return { x: offset.x + rulerSize.width, y: offset.y + rulerSize.height };\n}\nfunction tooltipOffset(node, mousePosition, diagram, isMouseBased) {\n var point = {};\n var scale = diagram.scroller.transform.scale;\n var element = document.getElementById(diagram.element.id);\n var bounds = node.wrapper.bounds;\n var rect = element.getBoundingClientRect();\n var horizontalOffset = diagram.scroller.horizontalOffset;\n var verticalOffset = diagram.scroller.verticalOffset;\n switch (diagram.tooltipObject.position) {\n case 'BottomCenter':\n point = offsetPoint(mousePosition, bounds.bottomCenter, diagram, isMouseBased, (rect.width / 2), rect.height);\n break;\n case 'BottomLeft':\n case 'LeftBottom':\n point = offsetPoint(mousePosition, bounds.bottomLeft, diagram, isMouseBased, 0, rect.height);\n break;\n case 'BottomRight':\n case 'RightBottom':\n point = offsetPoint(mousePosition, bounds.bottomRight, diagram, isMouseBased, rect.width, rect.height);\n break;\n case 'LeftCenter':\n point = offsetPoint(mousePosition, bounds.middleLeft, diagram, isMouseBased, 0, (rect.height / 2));\n break;\n case 'LeftTop':\n case 'TopLeft':\n point = offsetPoint(mousePosition, bounds.topLeft, diagram, isMouseBased, 0, 0);\n break;\n case 'RightCenter':\n point = offsetPoint(mousePosition, bounds.middleRight, diagram, isMouseBased, rect.width, (rect.height / 2));\n break;\n case 'RightTop':\n case 'TopRight':\n point = offsetPoint(mousePosition, bounds.topRight, diagram, isMouseBased, rect.width, 0);\n break;\n case 'TopCenter':\n point = offsetPoint(mousePosition, bounds.topCenter, diagram, isMouseBased, (rect.width / 2), 0);\n break;\n }\n return point;\n}\nfunction offsetPoint(mousePosition, bound, diagram, isMouseBased, x, y) {\n var point = {};\n var scale = diagram.scroller.transform.scale;\n var horizontalOffset = diagram.scroller.horizontalOffset;\n var verticalOffset = diagram.scroller.verticalOffset;\n point.x = (isMouseBased ? mousePosition.x : bound.x) * scale + horizontalOffset - x;\n point.y = (isMouseBased ? mousePosition.y : bound.y) * scale + verticalOffset - y;\n return point;\n}\n/** @private */\nexport function sort(objects) {\n var i = 0;\n var j = 0;\n var temp;\n for (i = 0; i < objects.length; i++) {\n var b = getBounds(objects[i].wrapper);\n for (j = i; j < objects.length; j++) {\n var bounds = getBounds(objects[j].wrapper);\n if (b.center.x > bounds.center.x) {\n temp = objects[i];\n objects[i] = objects[j];\n objects[j] = temp;\n }\n }\n }\n return objects;\n}\n/** @private */\nexport function getAnnotationPosition(pts, annotation, bound) {\n var angle;\n var getloop;\n var point;\n getloop = getOffsetOfConnector(pts, annotation, bound);\n angle = Point.findAngle(pts[getloop.index], pts[getloop.index + 1]);\n var alignednumber = getAlignedPosition(annotation);\n point = Point.transform(getloop.point, angle + 45, alignednumber);\n getloop.point = point;\n getloop.angle = angle;\n return getloop;\n}\n/** @private */\nexport function getOffsetOfConnector(points, annotation, bounds) {\n var length = 0;\n var offset = annotation.offset;\n var point;\n var angle;\n var offsetLength;\n var lengths = [];\n var prevLength;\n var kCount;\n for (var j = 0; j < points.length - 1; j++) {\n length += Point.distancePoints(points[j], points[j + 1]);\n lengths.push(length);\n }\n offsetLength = offset * length;\n for (var k = 0; k < lengths.length; k++) {\n if (lengths[k] >= offsetLength) {\n angle = Point.findAngle(points[k], points[k + 1]);\n point = Point.transform(points[k], angle, offsetLength - (prevLength || 0));\n kCount = k;\n return { point: point, index: kCount };\n }\n prevLength = lengths[k];\n }\n return { point: point, index: kCount };\n}\n/** @private */\nexport function getAlignedPosition(annotation) {\n var cnst = annotation.content === undefined ? 10 : 0;\n var state = 0;\n switch (annotation.alignment) {\n case 'Center':\n state = 0;\n break;\n case 'Before':\n state = -((0) / 2 + cnst);\n break;\n case 'After':\n state = ((0) / 2 + cnst);\n break;\n }\n return state;\n}\n/** @private */\nexport function alignLabelOnSegments(obj, ang, pts) {\n var angle = ang % 360;\n ang %= 360;\n var fourty5 = 45;\n var one35 = 135;\n var two25 = 225;\n var three15 = 315;\n var vAlign;\n var hAlign;\n switch (obj.alignment) {\n case 'Before':\n if (ang >= fourty5 && ang <= one35) {\n hAlign = 'right';\n vAlign = obj.offset === 0.5 ? 'center' : 'top';\n }\n else if (ang >= two25 && ang <= three15) {\n hAlign = 'left';\n vAlign = obj.offset === 0.5 ? 'center' : 'bottom';\n }\n else if (ang > fourty5 && ang < two25) {\n vAlign = 'top';\n hAlign = obj.offset === 0.5 ? 'center' : 'right';\n }\n else {\n vAlign = 'bottom';\n hAlign = (obj.offset === 0.5) ? 'center' : 'left';\n }\n break;\n case 'After':\n if (ang >= fourty5 && ang <= one35) {\n hAlign = 'left';\n vAlign = obj.offset === 0.5 ? 'center' : 'top';\n }\n else if (ang >= two25 && ang <= three15) {\n hAlign = 'right';\n vAlign = obj.offset === 0.5 ? 'center' : 'bottom';\n }\n else if (ang > fourty5 && ang < two25) {\n vAlign = 'bottom';\n hAlign = obj.offset === 0.5 ? 'center' : 'right';\n }\n else {\n vAlign = 'top';\n hAlign = obj.offset === 0.5 ? 'center' : 'left';\n }\n break;\n case 'Center':\n hAlign = 'center';\n vAlign = 'center';\n break;\n }\n if (obj.offset === 0 || obj.offset === 1) {\n var direction = void 0;\n direction = getBezierDirection(pts[0], pts[1]);\n switch (direction) {\n case 'left':\n hAlign = obj.offset === 0 ? 'right' : 'left';\n break;\n case 'right':\n hAlign = obj.offset === 0 ? 'left' : 'right';\n break;\n case 'bottom':\n vAlign = obj.offset === 0 ? 'top' : 'bottom';\n break;\n case 'top':\n vAlign = obj.offset === 0 ? 'bottom' : 'top';\n break;\n }\n }\n return { hAlign: hAlign, vAlign: vAlign };\n}\n/** @private */\nexport function getBezierDirection(src, tar) {\n if (Math.abs(tar.x - src.x) > Math.abs(tar.y - src.y)) {\n return src.x < tar.x ? 'right' : 'left';\n }\n else {\n return src.y < tar.y ? 'bottom' : 'top';\n }\n}\n/** @private */\nexport function serialize(model) {\n var clonedObject = cloneObject(model, model.getCustomProperty);\n clonedObject.selectedItems.nodes = [];\n clonedObject.selectedItems.connectors = [];\n clonedObject.selectedItems.wrapper = null;\n return JSON.stringify(clonedObject);\n}\n/** @private */\nexport function deserialize(model, diagram) {\n diagram.clear();\n diagram.protectPropertyChange(true);\n var map = diagram.dataSourceSettings.doBinding;\n var nodeTemp = diagram.setNodeTemplate;\n var getDescription = diagram.getDescription;\n var getCustomProperty = diagram.getCustomProperty;\n var commands = {};\n for (var _i = 0, _a = diagram.commandManager.commands; _i < _a.length; _i++) {\n var command = _a[_i];\n commands[command.name] = { execute: command.execute, canExecute: command.canExecute };\n }\n var arrangeTickHorizontal = diagram.rulerSettings.horizontalRuler.arrangeTick;\n var arrangeTickVertical = diagram.rulerSettings.verticalRuler.arrangeTick;\n var getLayoutInfo = diagram.layout.getLayoutInfo;\n var getBranch = diagram.layout.getBranch;\n var nodeDefaults = diagram.getNodeDefaults;\n var connectorDefaults = diagram.getConnectorDefaults;\n var dataObj = JSON.parse(model);\n diagram.contextMenuSettings = dataObj.contextMenuSettings;\n diagram.constraints = dataObj.constraints;\n diagram.tool = dataObj.tool;\n diagram.bridgeDirection = dataObj.bridgeDirection;\n diagram.pageSettings = dataObj.pageSettings;\n diagram.drawingObject = dataObj.drawingObject;\n diagram.tooltip = dataObj.tooltip;\n diagram.addInfo = dataObj.addInfo;\n diagram.getDescription = getDescription;\n diagram.scrollSettings = dataObj.scrollSettings;\n diagram.commandManager = dataObj.commandManager;\n diagram.layers = dataObj.layers;\n diagram.rulerSettings.horizontalRuler.arrangeTick = arrangeTickHorizontal;\n diagram.rulerSettings.verticalRuler.arrangeTick = arrangeTickVertical;\n for (var _b = 0, _c = diagram.commandManager.commands; _b < _c.length; _b++) {\n var cmd = _c[_b];\n if (commands[cmd.name]) {\n cmd.execute = commands[cmd.name].execute;\n cmd.canExecute = commands[cmd.name].canExecute;\n }\n }\n diagram.backgroundColor = dataObj.backgroundColor;\n diagram.basicElements = dataObj.basicElements;\n diagram.connectors = dataObj.connectors;\n diagram.dataSourceSettings = dataObj.dataSourceSettings;\n diagram.dataSourceSettings.doBinding = map;\n diagram.height = dataObj.height;\n diagram.setNodeTemplate = nodeTemp;\n diagram.getConnectorDefaults = connectorDefaults;\n diagram.getNodeDefaults = nodeDefaults;\n diagram.getCustomProperty = getCustomProperty;\n diagram.mode = dataObj.mode;\n diagram.nodes = dataObj.nodes;\n diagram.rulerSettings = dataObj.rulerSettings;\n diagram.snapSettings = dataObj.snapSettings;\n diagram.width = dataObj.width;\n diagram.layout = dataObj.layout;\n diagram.layout.getLayoutInfo = getFunction(getLayoutInfo);\n diagram.layout.getBranch = getFunction(getBranch);\n diagram.diagramActions = 0;\n diagram.isLoading = true;\n diagram.protectPropertyChange(false);\n var key = 'refresh';\n var component;\n for (var i = 0; i < diagram.views.length; i++) {\n component = diagram.views[diagram.views[i]];\n component.refresh();\n if (component instanceof Diagram) {\n diagram.element.classList.add('e-diagram');\n }\n }\n dataObj.selectedItems.nodes = [];\n dataObj.selectedItems.connectors = [];\n diagram.selectedItems = dataObj.selectedItems;\n return dataObj;\n}\n/** @private */\nexport function updateStyle(changedObject, target) {\n //since text style model is the super set of shape style model, we used text style model\n var style = target.style;\n var textElement = target;\n for (var _i = 0, _a = Object.keys(changedObject); _i < _a.length; _i++) {\n var key = _a[_i];\n switch (key) {\n case 'fill':\n style.fill = changedObject.fill;\n if (style instanceof StrokeStyle) {\n /* tslint:disable:no-string-literal */\n style['fill'] = 'transparent';\n }\n break;\n case 'textOverflow':\n style.textOverflow = changedObject.textOverflow;\n break;\n case 'opacity':\n style.opacity = changedObject.opacity;\n break;\n case 'strokeColor':\n style.strokeColor = changedObject.strokeColor;\n break;\n case 'strokeDashArray':\n style.strokeDashArray = changedObject.strokeDashArray;\n break;\n case 'strokeWidth':\n style.strokeWidth = changedObject.strokeWidth;\n break;\n case 'bold':\n style.bold = changedObject.bold;\n break;\n case 'color':\n style.color = changedObject.color;\n break;\n case 'textWrapping':\n style.textWrapping = changedObject.textWrapping;\n break;\n case 'fontFamily':\n style.fontFamily = changedObject.fontFamily;\n break;\n case 'fontSize':\n style.fontSize = changedObject.fontSize;\n break;\n case 'italic':\n style.italic = changedObject.italic;\n break;\n case 'textAlign':\n style.textAlign = changedObject.textAlign;\n break;\n case 'whiteSpace':\n style.whiteSpace = changedObject.whiteSpace;\n break;\n case 'textDecoration':\n style.textDecoration = changedObject.textDecoration;\n break;\n case 'gradient':\n style.gradient = changedObject.gradient;\n break;\n }\n }\n if (target instanceof TextElement) {\n textElement.refreshTextElement();\n }\n}\n/** @private */\nexport function updateHyperlink(changedObject, target, actualAnnotation) {\n var textElement = target;\n var hyperlink = textElement.hyperlink;\n for (var _i = 0, _a = Object.keys(changedObject); _i < _a.length; _i++) {\n var key = _a[_i];\n switch (key) {\n case 'color':\n textElement.style.color = hyperlink.color = changedObject.color;\n break;\n case 'content':\n textElement.content = hyperlink.content = changedObject.content || hyperlink.link;\n break;\n case 'link':\n var labelStyle = actualAnnotation.style;\n textElement.style.color = changedObject.link ? hyperlink.color : labelStyle.color;\n textElement.style.textDecoration = changedObject.link ? hyperlink.textDecoration : actualAnnotation.style.textDecoration;\n textElement.content = changedObject.link ? hyperlink.content || changedObject.link : actualAnnotation.content;\n hyperlink.link = changedObject.link;\n break;\n case 'textDecoration':\n textElement.style.textDecoration = hyperlink.textDecoration = changedObject.textDecoration;\n break;\n }\n }\n}\nexport function updateShapeContent(content, actualObject, diagram) {\n content.width = actualObject.width;\n content.height = actualObject.height;\n content.minHeight = actualObject.minHeight;\n content.maxHeight = actualObject.maxHeight;\n content.minWidth = actualObject.minWidth;\n content.maxWidth = actualObject.maxWidth;\n content.horizontalAlignment = actualObject.wrapper.children[0].horizontalAlignment;\n content.verticalAlignment = actualObject.wrapper.children[0].verticalAlignment;\n content.relativeMode = actualObject.wrapper.children[0].relativeMode;\n content.visible = actualObject.wrapper.children[0].visible;\n if (actualObject.shape instanceof Text) {\n content.margin = actualObject.shape.margin;\n }\n content.id = actualObject.wrapper.children[0].id;\n content.style = actualObject.style;\n var view;\n for (var _i = 0, _a = diagram.views; _i < _a.length; _i++) {\n var elementId = _a[_i];\n removeElement(actualObject.id + '_groupElement', elementId);\n removeElement(actualObject.id + '_content_groupElement', elementId);\n removeElement(actualObject.id + '_content_html_element', elementId);\n }\n actualObject.wrapper.children.splice(0, 1);\n actualObject.wrapper.children.splice(0, 0, content);\n}\n/** @private */\nexport function updateShape(node, actualObject, oldObject, diagram) {\n var content = new DiagramElement();\n var i;\n var textStyle;\n var nodeStyle;\n switch (node.shape.type) {\n case 'Path':\n var pathContent = new PathElement();\n pathContent.data = actualObject.shape.data;\n content = pathContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Image':\n var imageContent = new ImageElement();\n imageContent.source = actualObject.shape.source;\n imageContent.imageAlign = actualObject.shape.align;\n imageContent.imageScale = actualObject.shape.scale;\n content = imageContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Text':\n //issue\n var textContent = new TextElement();\n // (textContent as TextElement).content = (node.shape as TextModel).content;\n content = textContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Basic':\n var element = void 0;\n element = actualObject.shape.shape === 'Rectangle' ? new DiagramElement() : new PathElement();\n if (actualObject.shape.shape === 'Polygon') {\n element.data = getPolygonPath(actualObject.shape.points);\n }\n else {\n element.data = getBasicShape(actualObject.shape.shape);\n }\n updateShapeContent(content, actualObject, diagram);\n if (actualObject.shape.shape === 'Rectangle') {\n element.cornerRadius = actualObject.shape.cornerRadius;\n }\n content = element;\n break;\n case 'Flow':\n var flowShapeElement = new PathElement();\n flowShapeElement.data = getFlowShape(actualObject.shape.shape);\n content = flowShapeElement;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Native':\n var nativeContent = new DiagramNativeElement(node.id, diagram.element.id);\n nativeContent.content = actualObject.shape.content;\n nativeContent.scale = actualObject.shape.scale;\n content = nativeContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'HTML':\n var htmlContent = new DiagramHtmlElement(node.id, diagram.element.id);\n htmlContent.content = actualObject.shape.content;\n content = htmlContent;\n updateShapeContent(content, actualObject, diagram);\n }\n if (node.shape.type === undefined || node.shape.type === oldObject.shape.type) {\n updateContent(node, actualObject, diagram);\n }\n else {\n content.width = actualObject.wrapper.children[0].width;\n content.height = actualObject.wrapper.children[0].height;\n if (actualObject.shape instanceof Text) {\n content.margin = actualObject.shape.margin;\n }\n content.style = actualObject.style;\n actualObject.wrapper.children[0] = content;\n }\n}\n/** @private */\nexport function updateContent(newValues, actualObject, diagram) {\n if (Object.keys(newValues.shape).length > 0) {\n if (actualObject.shape.type === 'Path' && newValues.shape.data !== undefined) {\n actualObject.wrapper.children[0].data = newValues.shape.data;\n }\n else if (actualObject.shape.type === 'Text' && newValues.shape.content !== undefined) {\n actualObject.wrapper.children[0].content = newValues.shape.content;\n }\n else if (actualObject.shape.type === 'Image' && newValues.shape.source !== undefined) {\n actualObject.wrapper.children[0].source = newValues.shape.source;\n }\n else if (actualObject.shape.type === 'Native') {\n var nativeElement = void 0;\n for (var i = 0; i < diagram.views.length; i++) {\n nativeElement = getDiagramElement(actualObject.wrapper.children[0].id + '_groupElement', diagram.views[i]);\n if (newValues.shape.content !== undefined && nativeElement) {\n nativeElement.removeChild(nativeElement.children[0]);\n actualObject.wrapper.children[0].content = newValues.shape.content;\n nativeElement.appendChild(getContent(actualObject.wrapper.children[0], false));\n }\n }\n actualObject.wrapper.children[0].scale = newValues.shape.scale ?\n newValues.shape.scale : actualObject.wrapper.children[0].scale;\n }\n else if (actualObject.shape.type === 'HTML') {\n var htmlElement = void 0;\n for (var i = 0; i < diagram.views.length; i++) {\n htmlElement = getDiagramElement(actualObject.wrapper.children[0].id + '_html_element', diagram.views[i]);\n if (htmlElement) {\n htmlElement.removeChild(htmlElement.children[0]);\n actualObject.wrapper.children[0].content = newValues.shape.content;\n htmlElement.appendChild(getContent(actualObject.wrapper.children[0], true));\n }\n }\n }\n else if (actualObject.shape.type === 'Flow' && newValues.shape.shape !== undefined) {\n actualObject.shape.shape = newValues.shape.shape;\n var shapes = actualObject.shape.shape;\n var flowshapedata = getFlowShape(shapes.toString());\n actualObject.wrapper.children[0].data = flowshapedata;\n }\n else if (newValues.shape.cornerRadius !== undefined) {\n actualObject.wrapper.children[0].cornerRadius = newValues.shape.cornerRadius;\n }\n else if (newValues.shape.shape !== undefined) {\n actualObject.shape.shape = newValues.shape.shape;\n var shapes = actualObject.shape.shape;\n var basicShapeData = getBasicShape(shapes.toString());\n actualObject.wrapper.children[0].data = basicShapeData;\n }\n }\n}\n/** @private */\nexport function removeItem(array, item) {\n var index = array.indexOf(item);\n if (index >= 0) {\n array.splice(index, 1);\n }\n}\n/** @private */\nexport function updateConnector(connector, points) {\n var srcPoint;\n var anglePoint;\n var srcDecorator;\n var tarDecorator;\n var targetPoint;\n connector.intermediatePoints = points;\n connector.updateSegmentElement(connector, points, connector.wrapper.children[0]);\n srcPoint = connector.sourcePoint;\n srcDecorator = connector.sourceDecorator;\n if (connector.type === 'Bezier') {\n var firstSegment = connector.segments[0];\n var lastSegment = connector.segments[connector.segments.length - 1];\n anglePoint = [!Point.isEmptyPoint(lastSegment.point2) ? lastSegment.point2 : lastSegment.bezierPoint2,\n !Point.isEmptyPoint(firstSegment.point1) ? firstSegment.point1 : firstSegment.bezierPoint1];\n }\n else {\n anglePoint = connector.intermediatePoints;\n }\n points = connector.clipDecorators(connector, points);\n var element = connector.wrapper.children[1];\n connector.updateDecoratorElement(element, points[0], anglePoint[1], srcDecorator);\n targetPoint = connector.targetPoint;\n tarDecorator = connector.targetDecorator;\n element = connector.wrapper.children[2];\n connector.updateDecoratorElement(element, points[points.length - 1], anglePoint[anglePoint.length - 2], tarDecorator);\n connector.updateShapeElement(connector);\n}\n/** @private */\nexport function getUserHandlePosition(selectorItem, handle, transform) {\n var wrapper = selectorItem.wrapper;\n var positionPoints;\n var bounds = wrapper.bounds;\n var offset = handle.offset;\n var size = handle.size / transform.scale;\n var margin = handle.margin;\n var point;\n var left = wrapper.offsetX - wrapper.actualSize.width * wrapper.pivot.x;\n var top = wrapper.offsetY - wrapper.actualSize.height * wrapper.pivot.y;\n point = { x: 0, y: 0 };\n if (selectorItem.nodes.length > 0) {\n switch (handle.side) {\n case 'Top':\n point.x += left + bounds.width * offset;\n point.y += top - size;\n break;\n case 'Bottom':\n point.x += left + offset * bounds.width;\n point.y += top + wrapper.actualSize.height + size;\n break;\n case 'Left':\n point.x += left - size;\n point.y += top + offset * bounds.height;\n break;\n case 'Right':\n point.x += left + wrapper.actualSize.width + size;\n point.y += top + offset * bounds.height;\n break;\n }\n point.x += (margin.left - margin.right) +\n (size / 2) * (handle.horizontalAlignment === 'Center' ? 0 : (handle.horizontalAlignment === 'Right' ? -1 : 1));\n point.y += (margin.top - margin.bottom) +\n (size / 2) * (handle.verticalAlignment === 'Center' ? 0 : (handle.verticalAlignment === 'Top' ? -1 : 1));\n }\n else if (selectorItem.connectors.length > 0) {\n var connector = selectorItem.connectors[0];\n var annotation = { offset: offset };\n var connectorOffset = getOffsetOfConnector(connector.intermediatePoints, annotation, bounds);\n var index = connectorOffset.index;\n point = connectorOffset.point;\n var getPointloop = getAnnotationPosition(connector.intermediatePoints, annotation, bounds);\n var points = connector.intermediatePoints;\n var offsetLength = void 0;\n var angle = getPointloop.angle;\n var matrix = identityMatrix();\n rotateMatrix(matrix, -angle, connector.intermediatePoints[index].x, connector.intermediatePoints[index].y);\n point = transformPointByMatrix(matrix, point);\n point.x += (margin.left - margin.right) +\n (size / 2) * (handle.horizontalAlignment === 'Center' ? 0 : (handle.horizontalAlignment === 'Right' ? -1 : 1));\n point.y += (margin.top - margin.bottom) +\n (size / 2) * (handle.verticalAlignment === 'Center' ? 0 : (handle.verticalAlignment === 'Top' ? -1 : 1));\n matrix = identityMatrix();\n rotateMatrix(matrix, angle, connector.intermediatePoints[index].x, connector.intermediatePoints[index].y);\n point = transformPointByMatrix(matrix, point);\n }\n if (wrapper.rotateAngle !== 0 || wrapper.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, wrapper.rotateAngle + wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY);\n point = transformPointByMatrix(matrix, point);\n }\n return point;\n}\n/** @private */\nexport function canResizeCorner(selectorConstraints, action, thumbsConstraints, selectedItems) {\n if (selectedItems.annotation) {\n if (canResize(selectedItems.annotation)) {\n return true;\n }\n }\n else if ((SelectorConstraints[action] & selectorConstraints) && (ThumbsConstraints[action] & thumbsConstraints)) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function canShowCorner(selectorConstraints, action) {\n if (SelectorConstraints[action] & selectorConstraints) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function checkPortRestriction(port, portVisibility) {\n return port.visibility & portVisibility;\n}\n/** @private */\nexport function findAnnotation(node, id) {\n var annotation;\n if (node.shape.type === 'Text') {\n annotation = (node.shape);\n }\n else {\n var annotationId = id.split('_');\n id = annotationId[annotationId.length - 1];\n for (var i = 0; i < node.annotations.length; i++) {\n if (id === node.annotations[i].id) {\n annotation = node.annotations[i];\n }\n }\n }\n return annotation;\n}\n/** @private */\nexport function findPort(node, id) {\n var port;\n var portId = id.split('_');\n id = portId[portId.length - 1];\n for (var i = 0; i < node.ports.length; i++) {\n if (id === node.ports[i].id) {\n return node.ports[i];\n }\n }\n return port;\n}\n/** @private */\nexport function findObjectIndex(node, id, annotation) {\n var index;\n var collection = (annotation) ? node.annotations : node.ports;\n for (var i = 0; i < collection.length; i++) {\n if (collection[i].id === id) {\n return (i).toString();\n }\n }\n return null;\n}\n/** @private */\nexport function getObjectFromCollection(obj, id) {\n var i;\n for (i = 0; i < obj.length; i++) {\n if (id === obj[i].id) {\n return true;\n }\n }\n return false;\n}\n/** @private */\nexport function scaleElement(element, sw, sh, refObject) {\n if (element.width !== undefined && element.height !== undefined) {\n element.width *= sw;\n element.height *= sh;\n }\n if (element instanceof Container) {\n var matrix = identityMatrix();\n var width = refObject.width || refObject.actualSize.width;\n var height = refObject.height || refObject.actualSize.height;\n if (width !== undefined && height !== undefined) {\n var x = refObject.offsetX - width * refObject.pivot.x;\n var y = refObject.offsetY - height * refObject.pivot.y;\n var refPoint = {\n x: x + width * refObject.pivot.x,\n y: y + height * refObject.pivot.y\n };\n refPoint = rotatePoint(refObject.rotateAngle, refObject.offsetX, refObject.offsetY, refPoint);\n rotateMatrix(matrix, -refObject.rotateAngle, refPoint.x, refPoint.y);\n scaleMatrix(matrix, sw, sh, refPoint.x, refPoint.y);\n rotateMatrix(matrix, refObject.rotateAngle, refPoint.x, refPoint.y);\n for (var _i = 0, _a = element.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.width !== undefined && child.height !== undefined) {\n var newPosition = transformPointByMatrix(matrix, { x: child.offsetX, y: child.offsetY });\n child.offsetX = newPosition.x;\n child.offsetY = newPosition.y;\n scaleElement(child, sw, sh, refObject);\n }\n }\n }\n }\n}\nexport function arrangeChild(obj, x, y, nameTable, drop, diagram) {\n var child = obj.children;\n var node;\n for (var i = 0; i < child.length; i++) {\n node = nameTable[child[i]];\n if (node) {\n if (node.children) {\n this.arrangeChild(node, x, y, nameTable, drop, diagram);\n }\n else {\n node.offsetX -= x;\n node.offsetY -= y;\n if (!drop) {\n var content = void 0;\n var container = void 0;\n nameTable[node.id] = node;\n container = node.initContainer();\n if (!container.children) {\n container.children = [];\n }\n content = node.init(diagram);\n container.children.push(content);\n container.measure(new Size(node.width, node.height));\n container.arrange(container.desiredSize);\n }\n }\n }\n }\n}\n/** @private */\nexport function insertObject(obj, key, collection) {\n if (collection.length === 0) {\n collection.push(obj);\n }\n else if (collection.length === 1) {\n if (collection[0][key] > obj[key]) {\n collection.splice(0, 0, obj);\n }\n else {\n collection.push(obj);\n }\n }\n else if (collection.length > 1) {\n var low = 0;\n var high = collection.length - 1;\n var mid = Math.floor((low + high) / 2);\n while (mid !== low) {\n if (collection[mid][key] < obj[key]) {\n low = mid;\n mid = Math.floor((low + high) / 2);\n }\n else if (collection[mid][key] > obj[key]) {\n high = mid;\n mid = Math.floor((low + high) / 2);\n }\n }\n if (collection[high][key] < obj[key]) {\n collection.push(obj);\n }\n else if (collection[low][key] > obj[key]) {\n collection.splice(low, 0, obj);\n }\n else if ((collection[low][key] < obj[key]) && collection[high][key] > obj[key]) {\n collection.splice(high, 0, obj);\n }\n }\n}\n/** @private */\nexport function getElement(element) {\n var diagramElement = document.getElementById(element.diagramId);\n var instance = 'ej2_instances';\n var node = {};\n var nodes = diagramElement[instance][0].nodes;\n if (nodes === undefined) {\n nodes = getPaletteSymbols(diagramElement[instance][0]);\n }\n var length = 'length';\n for (var i = 0; nodes && i < nodes[length]; i++) {\n if (nodes[i].id === element.nodeId) {\n return nodes[i];\n }\n }\n var enterObject = diagramElement[instance][0].enterObject;\n if (enterObject && (enterObject['id'] === element.nodeId || enterObject['children'])) {\n if (enterObject['children'] && groupHasType(enterObject, 'HTML', diagramElement[instance][0].enterTable)) {\n return diagramElement[instance][0].enterTable[element.nodeId];\n }\n else {\n return enterObject;\n }\n }\n return null;\n}\n/** @private */\nfunction getPaletteSymbols(symbolPalette) {\n var nodes = [];\n for (var i = 0; i < symbolPalette.palettes.length; i++) {\n var symbols = symbolPalette.palettes[i].symbols;\n for (var j = 0; j < symbols.length; j++) {\n if (symbols[j] instanceof Node) {\n nodes.push(symbols[j]);\n }\n }\n }\n return nodes;\n}\n/** @private */\nexport function getPoint(x, y, w, h, angle, offsetX, offsetY, cornerPoint) {\n var pivot = { x: 0, y: 0 };\n var trans = identityMatrix();\n rotateMatrix(trans, angle, offsetX, offsetY);\n switch (cornerPoint.x) {\n case 0:\n switch (cornerPoint.y) {\n case 0:\n pivot = transformPointByMatrix(trans, ({ x: x, y: y }));\n break;\n case 0.5:\n pivot = transformPointByMatrix(trans, ({ x: x, y: y + h / 2 }));\n break;\n case 1:\n pivot = transformPointByMatrix(trans, ({ x: x, y: y + h }));\n break;\n }\n break;\n case 0.5:\n switch (cornerPoint.y) {\n case 0:\n pivot = transformPointByMatrix(trans, ({ x: x + w / 2, y: y }));\n break;\n case 0.5:\n pivot = transformPointByMatrix(trans, ({ x: x + w / 2, y: y + h / 2 }));\n break;\n case 1:\n pivot = transformPointByMatrix(trans, ({ x: x + w / 2, y: y + h }));\n break;\n }\n break;\n case 1:\n switch (cornerPoint.y) {\n case 0:\n pivot = transformPointByMatrix(trans, ({ x: x + w, y: y }));\n break;\n case 0.5:\n pivot = transformPointByMatrix(trans, ({ x: x + w, y: y + h / 2 }));\n break;\n case 1:\n pivot = transformPointByMatrix(trans, ({ x: x + w, y: y + h }));\n break;\n }\n break;\n }\n return { x: pivot.x, y: pivot.y };\n}\n/**\n * Get the object as Node | Connector\n * @param obj\n */\nexport var getObjectType = function (obj) {\n if (obj) {\n if (obj.sourceID !== undefined || obj.sourcePoint !== undefined ||\n obj.targetID !== undefined || obj.targetPoint !== undefined ||\n obj.type !== undefined) {\n obj = Connector;\n }\n else {\n obj = Node;\n }\n }\n return obj;\n};\n","import { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { processPathData, splitArrayCollection, transformPath } from './path-util';\nimport { whiteSpaceToString, wordBreakToString, textAlignToString, bBoxText } from './base-util';\nimport { identityMatrix, transformPointByMatrix, rotateMatrix } from '../primitives/matrix';\nimport { compile, createElement, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from './diagram-util';\n/**\n * Defines the functionalities that need to access DOM\n */\n/** @private */\nexport function findSegmentPoints(element) {\n var pts = [];\n var sample;\n var sampleLength;\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var svg = window[measureElement].children[2];\n var pathNode = getChildNode(svg)[0];\n pathNode.setAttributeNS(null, 'd', element.data);\n var pathBounds = element.absoluteBounds; // || pathNode.getBBox();\n var pathData = updatePath(element, pathBounds, element);\n pathNode.setAttributeNS(null, 'd', pathData);\n var pathLength = pathNode.getTotalLength();\n for (sampleLength = 0; sampleLength <= pathLength; sampleLength += 10) {\n sample = pathNode.getPointAtLength(sampleLength);\n pts.push({ x: sample.x, y: sample.y });\n }\n window[measureElement].style.visibility = 'hidden';\n return pts;\n}\nexport function getChildNode(node) {\n var child;\n var collection = [];\n if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n for (var i = 0; i < node.childNodes.length; i++) {\n child = node.childNodes[i];\n if (child.nodeType === 1) {\n collection.push(child);\n }\n }\n }\n else {\n collection = node.children;\n }\n return collection;\n}\nexport function translatePoints(element, points) {\n var translatedPts = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n var pt1 = {\n x: element.offsetX - element.actualSize.width * element.pivot.x + point.x,\n y: element.offsetY - element.actualSize.height * element.pivot.y + point.y\n };\n var matrix = void 0;\n var angle = element.rotateAngle + element.parentTransform;\n if (angle) {\n matrix = identityMatrix();\n rotateMatrix(matrix, angle, element.offsetX, element.offsetY);\n }\n if (matrix) {\n pt1 = transformPointByMatrix(matrix, pt1);\n }\n translatedPts.push(pt1);\n }\n return translatedPts;\n}\n/** @private */\nexport function measurePath(data) {\n if (data) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var svg = window[measureElement].children[2];\n var element = getChildNode(svg)[0];\n element.setAttribute('d', data);\n var bounds = element.getBBox();\n var svgBounds = new Rect(bounds.x, bounds.y, bounds.width, bounds.height);\n window[measureElement].style.visibility = 'hidden';\n return svgBounds;\n }\n return new Rect(0, 0, 0, 0);\n}\nfunction getTextOptions(element, maxWidth) {\n var options = {\n fill: element.style.fill, stroke: element.style.strokeColor, angle: element.rotateAngle + element.parentTransform,\n pivotX: element.pivot.x, pivotY: element.pivot.y, strokeWidth: element.style.strokeWidth,\n dashArray: element.style.strokeDashArray, opacity: element.style.opacity, shadow: element.shadow,\n gradient: element.style.gradient, visible: element.visible, id: element.id, description: element.description,\n width: maxWidth || element.actualSize.width, height: element.actualSize.height,\n x: element.offsetX - element.actualSize.width * element.pivot.x + 0.5,\n y: element.offsetY - element.actualSize.height * element.pivot.y + 0.5\n };\n options.fontSize = element.style.fontSize;\n options.fontFamily = element.style.fontFamily;\n options.textOverflow = element.style.textOverflow;\n options.textDecoration = element.style.textDecoration;\n options.doWrap = element.doWrap;\n options.whiteSpace = whiteSpaceToString(element.style.whiteSpace, element.style.textWrapping);\n options.content = element.content;\n options.textWrapping = element.style.textWrapping;\n options.breakWord = wordBreakToString(element.style.textWrapping);\n options.textAlign = textAlignToString(element.style.textAlign);\n options.color = element.style.color;\n options.italic = element.style.italic;\n options.bold = element.style.bold;\n options.dashArray = '';\n options.strokeWidth = 0;\n options.fill = '';\n return options;\n}\nfunction wrapSvgText(text, textValue) {\n var childNodes = [];\n var k = 0;\n var txtValue;\n var bounds1;\n var content = textValue || text.content;\n if (text.whiteSpace !== 'nowrap' && text.whiteSpace !== 'pre') {\n if (text.breakWord === 'breakall') {\n txtValue = '';\n txtValue += content[0];\n for (k = 0; k < content.length; k++) {\n bounds1 = bBoxText(txtValue, text);\n if (bounds1 >= text.width && txtValue.length > 0) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: bounds1 };\n txtValue = '';\n }\n else {\n txtValue = txtValue + (content[k + 1] || '');\n if (txtValue.indexOf('\\n') > -1) {\n txtValue = txtValue.replace('\\n', '');\n }\n var width = bBoxText(txtValue, text);\n if (Math.ceil(width) + 2 >= text.width && txtValue.length > 0) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: width };\n txtValue = '';\n }\n if (k === content.length - 1 && txtValue.length > 0) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: width };\n txtValue = '';\n }\n }\n }\n }\n else {\n childNodes = wordWrapping(text, textValue);\n }\n }\n else {\n childNodes[childNodes.length] = { text: content, x: 0, dy: 0, width: bBoxText(content, text) };\n }\n return childNodes;\n}\nfunction wordWrapping(text, textValue) {\n var childNodes = [];\n var txtValue = '';\n var j = 0;\n var i = 0;\n var wrap = text.whiteSpace !== 'nowrap' ? true : false;\n var content = textValue || text.content;\n var eachLine = content.split('\\n');\n var txt;\n var words;\n var newText;\n var existingWidth;\n var existingText;\n for (j = 0; j < eachLine.length; j++) {\n txt = '';\n words = text.textWrapping !== 'NoWrap' ? eachLine[j].split(' ') : eachLine;\n for (i = 0; i < words.length; i++) {\n txtValue += (((i !== 0 || words.length === 1) && wrap && txtValue.length > 0) ? ' ' : '') + words[i];\n newText = txtValue + (words[i + 1] || '');\n var width = bBoxText(newText, text);\n if (Math.floor(width) > text.width - 2 && txtValue.length > 0) {\n childNodes[childNodes.length] = {\n text: txtValue, x: 0, dy: 0,\n width: newText === txtValue ? width : (txtValue === existingText) ? existingWidth : bBoxText(txtValue, text)\n };\n txtValue = '';\n }\n else {\n if (i === words.length - 1) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: width };\n txtValue = '';\n }\n }\n existingText = newText;\n existingWidth = width;\n }\n }\n return childNodes;\n}\nfunction wrapSvgTextAlign(text, childNodes) {\n var wrapBounds = { x: 0, width: 0 };\n var k = 0;\n var txtWidth;\n var width;\n for (k = 0; k < childNodes.length; k++) {\n txtWidth = childNodes[k].width;\n width = txtWidth;\n if (text.textAlign === 'left') {\n txtWidth = 0;\n }\n else if (text.textAlign === 'center') {\n if (txtWidth > text.width && (text.textOverflow === 'Ellipsis' || text.textOverflow === 'Clip')) {\n txtWidth = 0;\n }\n else {\n txtWidth = -txtWidth / 2;\n }\n }\n else if (text.textAlign === 'right') {\n txtWidth = -txtWidth;\n }\n else {\n txtWidth = childNodes.length > 1 ? 0 : -txtWidth / 2;\n }\n childNodes[k].dy = text.fontSize * 1.2;\n childNodes[k].x = txtWidth;\n if (!wrapBounds) {\n wrapBounds = {\n x: txtWidth,\n width: width\n };\n }\n else {\n wrapBounds.x = Math.min(wrapBounds.x, txtWidth);\n wrapBounds.width = Math.max(wrapBounds.width, width);\n }\n }\n return wrapBounds;\n}\nexport function measureHtmlText(style, content, width, height, maxWidth) {\n var bounds = new Size();\n var text = createHtmlElement('span', { 'style': 'display:inline-block; line-height: normal' });\n if (style.bold) {\n text.style.fontWeight = 'bold';\n }\n if (style.italic) {\n text.style.fontStyle = 'italic';\n }\n if (width !== undefined) {\n text.style.width = width.toString() + 'px';\n }\n if (height !== undefined) {\n text.style.height = height.toString() + 'px';\n }\n if (maxWidth !== undefined) {\n text.style.maxWidth = maxWidth.toString() + 'px';\n }\n text.style.fontFamily = style.fontFamily;\n text.style.fontSize = style.fontSize + 'px';\n text.style.color = style.color;\n text.textContent = content;\n text.style.whiteSpace = whiteSpaceToString(style.whiteSpace, style.textWrapping);\n if (maxWidth !== undefined) {\n text.style.wordBreak = 'break-word';\n }\n else {\n text.style.wordBreak = wordBreakToString(style.textWrapping);\n }\n document.body.appendChild(text);\n bounds.width = text.offsetWidth;\n bounds.height = text.offsetHeight;\n document.body.removeChild(text);\n return bounds;\n}\n/** @private */\nexport function measureText(text, style, content, maxWidth, textValue) {\n var bounds = new Size(0, 0);\n var childNodes;\n var wrapBounds;\n var options = getTextOptions(text, maxWidth);\n text.childNodes = childNodes = wrapSvgText(options, textValue);\n text.wrapBounds = wrapBounds = wrapSvgTextAlign(options, childNodes);\n bounds.width = wrapBounds.width;\n bounds.height = childNodes.length * text.style.fontSize;\n return bounds;\n}\n/** @private */\nexport function measureImage(source, contentSize) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var imageElement = window[measureElement].children[1];\n imageElement.setAttribute('src', source);\n var bounds = imageElement.getBoundingClientRect();\n var width = bounds.width;\n var height = bounds.height;\n contentSize = new Size(width, height);\n window[measureElement].style.visibility = 'hidden';\n return contentSize;\n}\n/** @private */\nexport function measureNativeContent(nativeContent) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var nativeSVG = window[measureElement].children[2];\n nativeSVG.appendChild(nativeContent);\n var bounds = nativeContent.getBoundingClientRect();\n var svgBounds = nativeSVG.getBoundingClientRect();\n var rect = bounds;\n rect.x = bounds.left - svgBounds.left;\n rect.y = bounds.top - svgBounds.top;\n nativeSVG.removeChild(nativeContent);\n window[measureElement].style.visibility = 'hidden';\n return rect;\n}\n/**\n * @private\n */\nexport function measureNativeSvg(nativeContent) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var nativeSVG = window[measureElement].children[2];\n nativeSVG.appendChild(nativeContent);\n var svgBounds = nativeSVG.getBoundingClientRect();\n nativeSVG.removeChild(nativeContent);\n window[measureElement].style.visibility = 'hidden';\n return svgBounds;\n}\n/** @private */\nexport function updatePath(element, bounds, child) {\n var initX = 0;\n var initY = 0;\n var scaleX = 0;\n var scaleY = 0;\n var isScale = false;\n var bBox;\n var isInit;\n var isResizing = true;\n var newPathString = '';\n var arrayCollection = [];\n bBox = bounds;\n if (initX !== bBox.x || initY !== bBox.y) {\n scaleX = initX - Number(bBox.x);\n scaleY = initY - Number(bBox.y);\n }\n if (element.actualSize.width !== bBox.width || element.actualSize.height !== bBox.height) {\n scaleX = element.actualSize.width / Number(bBox.width ? bBox.width : 1);\n scaleY = element.actualSize.height / Number(bBox.height ? bBox.height : 1);\n isScale = true;\n }\n arrayCollection = processPathData(element.data);\n arrayCollection = splitArrayCollection(arrayCollection);\n newPathString = transformPath(arrayCollection, scaleX, scaleY, isScale, bBox.x, bBox.y, initX, initY);\n isScale = false;\n return newPathString;\n}\n/** @private */\nexport function getDiagramLayerSvg(diagramId) {\n var diagramLayerSvg;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-diagram-layer');\n diagramLayerSvg = elementcoll[0];\n return diagramLayerSvg;\n}\n/** @private */\nexport function getDiagramElement(elementId, contentId) {\n var diagramElement;\n var element;\n if (contentId) {\n element = document.getElementById(contentId);\n }\n diagramElement = (element) ? element.querySelector('#' + elementId) : document.getElementById(elementId);\n return diagramElement;\n}\n/**\n * @private\n */\nexport function getAdornerLayerSvg(diagramId) {\n var adornerLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-adorner-layer');\n adornerLayerSvg = elementcoll[0];\n return adornerLayerSvg;\n}\n/** @private */\nexport function getSelectorElement(diagramId) {\n var adornerLayer = null;\n var adornerSvg = getAdornerLayerSvg(diagramId);\n adornerLayer = adornerSvg.getElementById(diagramId + '_SelectorElement');\n return adornerLayer;\n}\n/**\n * @private\n */\nexport function getAdornerLayer(diagramId) {\n var adornerLayer = null;\n var diagramAdornerSvg = getAdornerLayerSvg(diagramId);\n adornerLayer = diagramAdornerSvg.getElementById(diagramId + '_diagramAdorner');\n return adornerLayer;\n}\n// /** @private */\n// export function getDiagramLayer(diagramId: string): SVGElement {\n// let diagramLayer: SVGElement;\n// let diagramLayerSvg: SVGSVGElement = getDiagramLayerSvg(diagramId);\n// diagramLayer = diagramLayerSvg.getElementById(diagramId + '_diagramLayer') as SVGElement;\n// return diagramLayer;\n// }\n/** @private */\nexport function getPortLayerSvg(diagramId) {\n var adornerLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-ports-expand-layer');\n adornerLayerSvg = elementcoll[0];\n return adornerLayerSvg;\n}\n/** @private */\nexport function getNativeLayerSvg(diagramId) {\n var nativeLayerSvg;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-native-layer');\n nativeLayerSvg = elementcoll[0];\n return nativeLayerSvg;\n}\n/** @private */\nexport function getGridLayerSvg(diagramId) {\n var gridLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-grid-layer');\n gridLayerSvg = elementcoll[0];\n return gridLayerSvg;\n}\n/** @private */\nexport function getBackgroundLayerSvg(diagramId) {\n var gridLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll = diagramElement.getElementsByClassName('e-background-layer');\n return elementcoll[0].parentNode;\n}\n/** @private */\nexport function getBackgroundImageLayer(diagramId) {\n var imageLayer = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-background-image-layer');\n imageLayer = elementcoll[0];\n return imageLayer;\n}\n/** @private */\nexport function getBackgroundLayer(diagramId) {\n var imageLayer = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-background-layer');\n imageLayer = elementcoll[0];\n return imageLayer;\n}\n/** @private */\nexport function getGridLayer(diagramId) {\n var expandCollapse = null;\n var diagramGridSvg = getGridLayerSvg(diagramId);\n expandCollapse = diagramGridSvg.getElementById(diagramId + '_gridline');\n return expandCollapse;\n}\n// /** @private */\n// export function getExpandCollapseLayer(diagramId: string): SVGElement {\n// let expandCollapse: SVGElement = null;\n// let diagramPortSvg: SVGSVGElement = getPortLayerSvg(diagramId);\n// expandCollapse = diagramPortSvg.getElementById(diagramId + '_diagramExpander') as SVGElement;\n// return expandCollapse;\n// }\n// /** @private */\n// export function getPortsLayer(diagramId: string): SVGElement {\n// let expandCollapse: SVGElement = null;\n// let diagramPortSvg: SVGSVGElement = getPortLayerSvg(diagramId);\n// expandCollapse = diagramPortSvg.getElementById(diagramId + '_diagramPorts') as SVGElement;\n// return expandCollapse;\n// }\n/** @private */\nexport function getNativeLayer(diagramId) {\n var nativeLayer = null;\n var nativeLayerSvg = getNativeLayerSvg(diagramId);\n nativeLayer = nativeLayerSvg.getElementById(diagramId + '_nativeLayer');\n return nativeLayer;\n}\n/** @private */\nexport function getHTMLLayer(diagramId) {\n var htmlLayer = null;\n var element = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = element.getElementsByClassName('e-html-layer');\n htmlLayer = elementcoll[0];\n return htmlLayer;\n}\n/** @private */\nexport function createHtmlElement(elementType, attribute) {\n var element = createElement(elementType);\n setAttributeHtml(element, attribute);\n return element;\n}\n/** @private */\nexport function createSvgElement(elementType, attribute) {\n var element = document.createElementNS('http://www.w3.org/2000/svg', elementType);\n setAttributeSvg(element, attribute);\n return element;\n}\n/** @hidden */\nexport function parentsUntil(elem, selector, isID) {\n var parent = elem;\n while (parent) {\n if (isID ? parent.id === selector : hasClass(parent, selector)) {\n break;\n }\n parent = parent.parentNode;\n }\n return parent;\n}\nexport function hasClass(element, className) {\n var eClassName = (typeof element.className === 'object') ? element.className.animVal : element.className;\n return ((' ' + eClassName + ' ').indexOf(' ' + className + ' ') > -1) ? true : false;\n}\n/** @hidden */\nexport function getScrollerWidth() {\n var outer = createHtmlElement('div', { 'style': 'visibility:hidden; width: 100px' });\n document.body.appendChild(outer);\n var widthNoScroll = outer.getBoundingClientRect().width;\n // force scrollbars\n outer.style.overflow = 'scroll';\n // add innerdiv\n var inner = createHtmlElement('div', { 'style': 'width:100%' });\n outer.appendChild(inner);\n var widthWithScroll = inner.getBoundingClientRect().width;\n // remove divs\n outer.parentNode.removeChild(outer);\n return widthNoScroll - widthWithScroll;\n}\n/**\n * Handles the touch pointer.\n * @return {boolean}\n * @private\n */\nexport function addTouchPointer(touchList, e, touches) {\n touchList = [];\n for (var i = 0, length_1 = touches.length; i < length_1; i++) {\n touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n }\n return touchList;\n}\n/**\n * removes the element from dom\n * @param elementId\n */\nexport function removeElement(elementId, contentId) {\n var div = getDiagramElement(elementId, contentId);\n if (div) {\n div.parentNode.removeChild(div);\n }\n}\nexport function getContent(element, isHtml) {\n var div;\n if (isHtml) {\n var attr = { 'style': 'height: 100%; width: 100%' };\n div = createHtmlElement('div', attr);\n }\n else {\n div = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n }\n var node = getElement(element);\n var item;\n if (typeof element.content === 'string') {\n var compiledString = void 0;\n compiledString = compile(element.content);\n for (var _i = 0, _a = compiledString(node); _i < _a.length; _i++) {\n item = _a[_i];\n div.appendChild(item);\n }\n }\n else {\n div.appendChild(element.content);\n }\n return isHtml ? div.cloneNode(true) : div.cloneNode(true);\n}\n/** @private */\nexport function setAttributeSvg(svg, attributes) {\n var keys = Object.keys(attributes);\n for (var i = 0; i < keys.length; i++) {\n svg.setAttribute(keys[i], attributes[keys[i]]);\n }\n}\n/** @private */\nexport function setAttributeHtml(element, attributes) {\n var keys = Object.keys(attributes);\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], attributes[keys[i]]);\n }\n}\n/** @private */\nexport function createMeasureElements() {\n var measureElement = 'measureElement';\n if (!window[measureElement]) {\n var divElement = createHtmlElement('div', {\n id: 'measureElement',\n style: 'visibility:hidden ; height: 0px ; width: 0px; overflow: hidden;'\n });\n var text = createHtmlElement('span', { 'style': 'display:inline-block ; line-height: normal' });\n divElement.appendChild(text);\n var imageElement = void 0;\n imageElement = createHtmlElement('img', {});\n divElement.appendChild(imageElement);\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('xlink', 'http://www.w3.org/1999/xlink');\n divElement.appendChild(svg);\n var element = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n svg.appendChild(element);\n var data = document.createTextNode('');\n var tSpan = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n svg.appendChild(tSpan);\n window[measureElement] = divElement;\n window[measureElement].usageCount = 1;\n document.body.appendChild(divElement);\n }\n else {\n window[measureElement].usageCount += 1;\n }\n}\n","import { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { identityMatrix, transformPointByMatrix, rotateMatrix } from '../primitives/matrix';\nimport { getValue } from '@syncfusion/ej2-base';\nimport { getChildNode } from './dom-util';\n/**\n * Implements the basic functionalities\n */\n/** @private */\nexport function randomId() {\n var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz';\n var id = '';\n var num;\n for (var i = 0; i < 5; i++) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var count = new Uint16Array(1);\n // tslint:disable-next-line:no-any\n var intCrypto = window.msCrypto || window.crypto;\n num = intCrypto.getRandomValues(count)[0] % (chars.length - 1);\n }\n else {\n num = Math.floor(Math.random() * chars.length);\n }\n if (i === 0 && num < 10) {\n i--;\n continue;\n }\n id += chars.substring(num, num + 1);\n }\n return id;\n}\n/** @private */\nexport function cornersPointsBeforeRotation(ele) {\n var bounds = new Rect();\n var top = ele.offsetY - ele.actualSize.height * ele.pivot.y;\n var bottom = ele.offsetY + ele.actualSize.height * (1 - ele.pivot.y);\n var left = ele.offsetX - ele.actualSize.width * ele.pivot.x;\n var right = ele.offsetX + ele.actualSize.width * (1 - ele.pivot.x);\n var topLeft = { x: left, y: top };\n var topCenter = { x: (left + right) / 2, y: top };\n var topRight = { x: right, y: top };\n var middleLeft = { x: left, y: (top + bottom) / 2 };\n var middleRight = { x: right, y: (top + bottom) / 2 };\n var bottomLeft = { x: left, y: bottom };\n var bottomCenter = { x: (left + right) / 2, y: bottom };\n var bottomRight = { x: right, y: bottom };\n bounds = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n return bounds;\n}\n/** @private */\nexport function getBounds(element) {\n var bounds = new Rect();\n var corners;\n corners = cornersPointsBeforeRotation(element);\n var middleLeft = corners.middleLeft;\n var topCenter = corners.topCenter;\n var bottomCenter = corners.bottomCenter;\n var middleRight = corners.middleRight;\n var topLeft = corners.topLeft;\n var topRight = corners.topRight;\n var bottomLeft = corners.bottomLeft;\n var bottomRight = corners.bottomRight;\n element.corners = {\n topLeft: topLeft, topCenter: topCenter, topRight: topRight, middleLeft: middleLeft,\n middleRight: middleRight, bottomLeft: bottomLeft, bottomCenter: bottomCenter, bottomRight: bottomRight\n };\n if (element.rotateAngle !== 0 || element.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, element.rotateAngle + element.parentTransform, element.offsetX, element.offsetY);\n element.corners.topLeft = topLeft = transformPointByMatrix(matrix, topLeft);\n element.corners.topCenter = topCenter = transformPointByMatrix(matrix, topCenter);\n element.corners.topRight = topRight = transformPointByMatrix(matrix, topRight);\n element.corners.middleLeft = middleLeft = transformPointByMatrix(matrix, middleLeft);\n element.corners.middleRight = middleRight = transformPointByMatrix(matrix, middleRight);\n element.corners.bottomLeft = bottomLeft = transformPointByMatrix(matrix, bottomLeft);\n element.corners.bottomCenter = bottomCenter = transformPointByMatrix(matrix, bottomCenter);\n element.corners.bottomRight = bottomRight = transformPointByMatrix(matrix, bottomRight);\n //Set corners based on rotate angle\n }\n bounds = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n element.corners.left = bounds.left;\n element.corners.right = bounds.right;\n element.corners.top = bounds.top;\n element.corners.bottom = bounds.bottom;\n element.corners.center = bounds.center;\n element.corners.width = bounds.width;\n element.corners.height = bounds.height;\n return bounds;\n}\n/** @private */\nexport function cloneObject(obj, additionalProp, key) {\n var newObject = {};\n var keys = 'properties';\n var prop = 'propName';\n if (obj) {\n key = obj[prop];\n var sourceObject = obj[keys] || obj;\n var properties = [];\n properties = properties.concat(Object.keys(sourceObject));\n var customProperties = [];\n if (key) {\n var propAdditional = getFunction(additionalProp);\n if (propAdditional) {\n customProperties = propAdditional(key);\n }\n else {\n customProperties = [];\n }\n properties = properties.concat(customProperties);\n }\n var internalProp = getInternalProperties(key);\n properties = properties.concat(internalProp);\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var property = properties_1[_i];\n if (property !== 'wrapper') {\n var constructorId = 'constructor';\n var name_1 = 'name';\n var isEventEmmitter = obj[property] && obj.hasOwnProperty('observers') ? true : false;\n if (!isEventEmmitter) {\n if (obj[property] instanceof Array) {\n newObject[property] = cloneArray((internalProp.indexOf(property) === -1 && obj[keys]) ? obj[keys][property] : obj[property], additionalProp, property);\n }\n else if (obj[property] instanceof Array === false && obj[property] instanceof HTMLElement) {\n newObject[property] = obj[property].cloneNode(true).innerHtml;\n }\n else if (obj[property] instanceof Array === false && obj[property] instanceof Object) {\n newObject[property] = cloneObject((internalProp.indexOf(property) === -1 && obj[keys]) ? obj[keys][property] : obj[property]);\n }\n else {\n newObject[property] = obj[property];\n }\n }\n }\n else {\n if (obj[property]) {\n newObject[property] = {\n actualSize: {\n width: obj[property].actualSize.width, height: obj[property].actualSize.height\n }, offsetX: obj[property].offsetX, offsetY: obj[property].offsetY\n };\n }\n }\n }\n }\n return newObject;\n}\n/** @private */\nexport function getInternalProperties(propName) {\n switch (propName) {\n case 'nodes':\n return ['inEdges', 'outEdges', 'parentId', 'processId', 'nodeId'];\n case 'connectors':\n return ['parentId'];\n case 'annotation':\n return ['nodeId'];\n case 'annotations':\n return ['nodeId'];\n }\n return [];\n}\n/** @private */\nexport function cloneArray(sourceArray, additionalProp, key) {\n var clonedArray;\n if (sourceArray) {\n clonedArray = [];\n for (var i = 0; i < sourceArray.length; i++) {\n if (sourceArray[i] instanceof Array) {\n clonedArray.push(sourceArray[i]);\n }\n else if (sourceArray[i] instanceof Object) {\n clonedArray.push(cloneObject(sourceArray[i], additionalProp, key));\n }\n else {\n clonedArray.push(sourceArray[i]);\n }\n }\n }\n return clonedArray;\n}\n/** @private */\nexport function extendObject(options, childObject) {\n var properties = 'properties';\n if (options) {\n if (!childObject) {\n childObject = { properties: {} };\n }\n var target = childObject;\n for (var _i = 0, _a = Object.keys(options); _i < _a.length; _i++) {\n var property = _a[_i];\n if (options[property] instanceof Array) {\n var extendeArray = extendArray(options[property], childObject[properties][property]);\n if (!childObject[properties][property] || !childObject[properties][property].length) {\n childObject[property] = extendeArray;\n }\n }\n else if (options[property] instanceof Array === false && options[property] instanceof HTMLElement) {\n childObject[property] = options[property].cloneNode(true).innerHtml;\n }\n else if (options[property] instanceof Array === false && options[property] instanceof Object) {\n var extendedObject = extendObject(options[property], childObject[properties][property]);\n if (extendedObject[properties] && !Object.keys(extendedObject[properties]).length) {\n delete extendedObject[properties];\n }\n childObject[property] = extendedObject;\n }\n else {\n childObject[property] = childObject[properties][property] !== undefined ?\n childObject[property] : options[property];\n }\n }\n }\n return childObject;\n}\n/** @private */\nexport function extendArray(sourceArray, childArray) {\n var clonedArray = [];\n var reset = false;\n if (!childArray) {\n childArray = [];\n }\n if (!childArray.length) {\n reset = true;\n }\n for (var i = 0; i < sourceArray.length; i++) {\n if (sourceArray[i] instanceof Array) {\n var extendedArray = extendArray(sourceArray[i], childArray[i]);\n if (reset) {\n clonedArray.push(extendArray);\n }\n }\n else if (sourceArray[i] instanceof Object) {\n var extendedObject = extendObject(sourceArray[i], childArray[i]);\n if (reset) {\n clonedArray.push(extendedObject);\n }\n }\n else {\n clonedArray.push(sourceArray[i]);\n }\n }\n return clonedArray;\n}\n/** @private */\nexport function textAlignToString(value) {\n var state = '';\n switch (value) {\n case 'Center':\n state = 'center';\n break;\n case 'Left':\n state = 'left';\n break;\n case 'Right':\n state = 'right';\n break;\n }\n return state;\n}\n/** @private */\nexport function wordBreakToString(value) {\n var state = '';\n switch (value) {\n case 'Wrap':\n state = 'breakall';\n break;\n case 'NoWrap':\n state = 'keepall';\n break;\n case 'WrapWithOverflow':\n state = 'normal';\n break;\n case 'LineThrough':\n state = 'line-through';\n break;\n }\n return state;\n}\nexport function bBoxText(textContent, options) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var svg = window[measureElement].children[2];\n var text = getChildNode(svg)[1];\n text.textContent = textContent;\n text.setAttribute('style', 'font-size:' + options.fontSize + 'px; font-family:'\n + options.fontFamily + ';font-weight:' + (options.bold ? 'bold' : 'normal'));\n var bBox = text.getBBox().width;\n window[measureElement].style.visibility = 'hidden';\n return bBox;\n}\n/** @private */\nexport function middleElement(i, j) {\n var m = 0;\n m = (i + j) / 2;\n return m;\n}\n/** @private */\nexport function overFlow(text, options) {\n var i = 0;\n var j = 0;\n var middle = 0;\n var bounds = 0;\n var temp = '';\n j = text.length;\n var t = 0;\n do {\n if (bounds > 0) {\n i = middle;\n }\n middle = Math.floor(middleElement(i, j));\n temp += text.substr(i, middle);\n bounds = bBoxText(temp, options);\n } while (bounds <= options.width);\n temp = temp.substr(0, i);\n for (t = i; t < j; t++) {\n temp += text[t];\n bounds = bBoxText(temp, options);\n if (bounds >= options.width) {\n text = text.substr(0, temp.length - 1);\n break;\n }\n }\n if (options.textOverflow === 'Ellipsis') {\n text = text.substr(0, text.length - 3);\n text += '...';\n }\n else {\n text = text.substr(0, text.length);\n }\n return text;\n}\n/** @private */\nexport function whiteSpaceToString(value, wrap) {\n if (wrap === 'NoWrap' && value === 'PreserveAll') {\n return 'pre';\n }\n var state = '';\n switch (value) {\n case 'CollapseAll':\n state = 'nowrap';\n break;\n case 'CollapseSpace':\n state = 'pre-line';\n break;\n case 'PreserveAll':\n state = 'pre-wrap';\n break;\n }\n return state;\n}\n/** @private */\nexport function rotateSize(size, angle) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, 0, 0);\n var topLeft = transformPointByMatrix(matrix, { x: 0, y: 0 });\n var topRight = transformPointByMatrix(matrix, { x: size.width, y: 0 });\n var bottomLeft = transformPointByMatrix(matrix, { x: 0, y: size.height });\n var bottomRight = transformPointByMatrix(matrix, { x: size.width, y: size.height });\n var minX = Math.min(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);\n var minY = Math.min(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);\n var maxX = Math.max(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);\n var maxY = Math.max(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);\n return new Size(maxX - minX, maxY - minY);\n}\n/** @private */\nexport function rotatePoint(angle, pivotX, pivotY, point) {\n if (angle !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, pivotX, pivotY);\n return transformPointByMatrix(matrix, point);\n }\n return point;\n}\n/** @private */\nexport function getOffset(topLeft, obj) {\n var offX = topLeft.x + obj.desiredSize.width * obj.pivot.x;\n var offY = topLeft.y + obj.desiredSize.height * obj.pivot.y;\n return {\n x: offX, y: offY\n };\n}\n/**\n * Get function\n */\nexport function getFunction(value) {\n if (value !== undefined) {\n if (typeof value === 'string') {\n value = getValue(value, window);\n }\n }\n return value;\n}\n","import { Connector } from '../objects/connector';\nimport { Node } from '../objects/node';\nimport { Rect } from '../primitives/rect';\nimport { identityMatrix, transformPointByMatrix, rotateMatrix } from '../primitives/matrix';\nimport { getUserHandlePosition, checkPortRestriction } from '../utility/diagram-util';\nimport { canMove, canDragSourceEnd, canDragTargetEnd, canContinuousDraw, canDragSegmentThumb } from '../utility/constraints-util';\nimport { canZoomPan, defaultTool, canDrawOnce, canDrag, canDraw, canSelect, canRotate } from '../utility/constraints-util';\nimport { canShowCorner, canResizeCorner } from '../utility/diagram-util';\nimport { Point } from '../primitives/point';\nimport { TextElement } from '../core/elements/text-element';\nimport { PortConstraints, DiagramTools, PortVisibility, ThumbsConstraints } from '../enum/enum';\nimport { Selector } from './selector';\nimport { PointPort } from './../objects/port';\nimport { ShapeAnnotation, PathAnnotation } from '../objects/annotation';\n/**\n * Finds the action to be taken for the object under mouse\n *\n */\n/** @private */\nexport function findToolToActivate(obj, wrapper, position, diagram, touchStart, touchMove, target) {\n var conn = diagram.selectedItems.connectors[0];\n if (touchMove && touchMove.length > 1 && touchStart && touchStart.length > 1) {\n return 'PinchZoom';\n }\n if (diagram.currentSymbol) {\n return 'Drag';\n }\n var eventHandler = 'eventHandler';\n if (diagram[eventHandler].action === 'PortDraw') {\n diagram.tool &= ~DiagramTools.DrawOnce;\n }\n //Drawing Tools\n if ((canDrawOnce(diagram) || canContinuousDraw(diagram)) && diagram.drawingObject) {\n return 'Draw';\n }\n if (hasSelection(diagram)) {\n var handle = diagram.selectedItems;\n if (handle.wrapper && canShowCorner(handle.constraints, 'UserHandle')) {\n for (var _i = 0, _a = handle.userHandles; _i < _a.length; _i++) {\n var obj_1 = _a[_i];\n if (obj_1.visible) {\n var paddedBounds = getUserHandlePosition(handle, obj_1, diagram.scroller.transform);\n if (contains(position, paddedBounds, obj_1.size / 2)) {\n return obj_1.name;\n }\n }\n }\n }\n }\n //Panning\n if (canZoomPan(diagram) && !obj) {\n return 'Pan';\n }\n if (hasSelection(diagram)) {\n var element = (diagram.selectedItems.annotation) ?\n diagram.selectedItems.wrapper.children[0] : diagram.selectedItems.wrapper;\n var selectorBnds = element.bounds;\n var handle = diagram.selectedItems;\n var paddedBounds = new Rect(selectorBnds.x, selectorBnds.y, selectorBnds.width, selectorBnds.height);\n if (hasSingleConnection(diagram) && !diagram.selectedItems.annotation) {\n var conn_1 = diagram.selectedItems.connectors[0];\n var sourcePaddingValue = 10 / diagram.scrollSettings.currentZoom;\n var targetPaddingValue = 10 / diagram.scrollSettings.currentZoom;\n if (canShowCorner(handle.constraints, 'ResizeAll')) {\n if ((canShowCorner(handle.constraints, 'ConnectorSourceThumb'))\n && canDragSourceEnd(conn_1) && contains(position, conn_1.sourcePoint, sourcePaddingValue)) {\n return 'ConnectorSourceEnd';\n }\n if ((canShowCorner(handle.constraints, 'ConnectorTargetThumb'))\n && canDragTargetEnd(conn_1) && contains(position, conn_1.targetPoint, targetPaddingValue)) {\n return 'ConnectorTargetEnd';\n }\n var action = checkForConnectorSegment(conn_1, handle, position, diagram);\n if (action) {\n return action;\n }\n }\n }\n else {\n var ten = 10 / diagram.scroller.currentZoom;\n var matrix = identityMatrix();\n rotateMatrix(matrix, element.rotateAngle + element.parentTransform, element.offsetX, element.offsetY);\n //check for resizing tool\n var x = element.offsetX - element.pivot.x * element.actualSize.width;\n var y = element.offsetY - element.pivot.y * element.actualSize.height;\n var rotateThumb = {\n x: x + ((element.pivot.x === 0.5 ? element.pivot.x * 2 : element.pivot.x) * element.actualSize.width / 2),\n y: y - 30 / diagram.scroller.currentZoom\n };\n rotateThumb = transformPointByMatrix(matrix, rotateThumb);\n var labelSelection = diagram.selectedItems.annotation ? true : false;\n var labelRotate = (labelSelection && (canRotate(diagram.selectedItems.annotation))) ? true : false;\n if (canShowCorner(handle.constraints, 'Rotate') && contains(position, rotateThumb, ten) &&\n (diagram.selectedItems.thumbsConstraints & ThumbsConstraints.Rotate)) {\n if (labelSelection && labelRotate) {\n return 'LabelRotate';\n }\n else if (!labelSelection) {\n return 'Rotate';\n }\n }\n paddedBounds.Inflate(ten);\n if (paddedBounds.containsPoint(position)) {\n var action = checkForResizeHandles(diagram, element, position, matrix, x, y);\n if (action) {\n return action;\n }\n }\n }\n }\n if (target instanceof PointPort && (!canZoomPan(diagram))) {\n var action = findPortToolToActivate(diagram, target);\n if (action !== 'None') {\n return action;\n }\n }\n if ((target instanceof ShapeAnnotation || target instanceof PathAnnotation) && (!canZoomPan(diagram) && (canSelect(target)))) {\n if (isSelected(diagram, target, undefined, wrapper) && canMove(target)) {\n return 'LabelDrag';\n }\n return 'LabelSelect';\n }\n if (obj !== null) {\n if (obj instanceof Node || obj instanceof Connector) {\n if (wrapper && wrapper.id) {\n var id = wrapper.id.split(obj.id)[1];\n if (id && id.match('^_icon')) {\n return 'LayoutAnimation';\n }\n }\n if (canMove(obj) && wrapper instanceof TextElement && wrapper.hyperlink.link) {\n return 'Hyperlink';\n }\n if (canMove(obj) && isSelected(diagram, obj, false) && diagram.selectedItems.annotation === undefined) {\n if ((obj instanceof Connector && !(contains(position, obj.sourcePoint, obj.hitPadding) ||\n contains(position, obj.targetPoint, obj.hitPadding))) ||\n !(obj instanceof Connector)) {\n return 'Drag';\n }\n }\n else if (obj && canZoomPan(diagram) && !defaultTool(diagram)) {\n return 'Pan';\n }\n else {\n return 'Select';\n }\n }\n else {\n return 'Select';\n }\n }\n return 'Select';\n}\nfunction checkForConnectorSegment(conn, handle, position, diagram) {\n var targetPaddingValue = 10 / diagram.scrollSettings.currentZoom;\n var sourcePaddingValue = 10 / diagram.scrollSettings.currentZoom;\n if (conn.type === 'Bezier') {\n for (var i = 0; i < conn.segments.length; i++) {\n var segment = (conn.segments)[i];\n if (contains(position, !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1, sourcePaddingValue)) {\n return 'BezierSourceThumb';\n }\n if (contains(position, !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2, targetPaddingValue)) {\n return 'BezierTargetThumb';\n }\n }\n }\n if (diagram.connectorEditingToolModule && canDragSegmentThumb(conn)) {\n if (conn.type === 'Straight' || conn.type === 'Bezier') {\n for (var i = 0; i < conn.segments.length; i++) {\n var segment = void 0;\n segment = (conn.segments)[i];\n if (contains(position, segment.point, 10)) {\n return 'SegmentEnd';\n }\n }\n }\n else {\n for (var i = 0; i < conn.segments.length; i++) {\n var segment = void 0;\n var segPoint = { x: 0, y: 0 };\n segment = (conn.segments)[i];\n for (var j = 0; j < segment.points.length - 1; j++) {\n var length_1 = Point.distancePoints(segment.points[j], segment.points[j + 1]);\n if (length_1 >= 50) {\n segPoint.x = ((segment.points[j].x + segment.points[j + 1].x) / 2);\n segPoint.y = ((segment.points[j].y + segment.points[j + 1].y) / 2);\n if (contains(position, segPoint, 30)) {\n return 'OrthoThumb';\n }\n }\n }\n }\n }\n }\n return null;\n}\n/** @private */\nexport function findPortToolToActivate(diagram, target, touchStart, touchMove) {\n if (canDrag(target, diagram) && (checkPortRestriction(target, PortVisibility.Hover)\n || (checkPortRestriction(target, PortVisibility.Visible)))) {\n if ((target.constraints & PortConstraints.Drag)) {\n return 'PortDrag';\n }\n }\n else if (canDraw(target, diagram) && (checkPortRestriction(target, PortVisibility.Hover)\n || (checkPortRestriction(target, PortVisibility.Visible)))) {\n if (target.constraints & PortConstraints.Draw) {\n diagram.drawingObject = {};\n var connector = { type: 'Orthogonal', sourcePortID: target.id };\n diagram.drawingObject = connector;\n diagram.tool |= DiagramTools.DrawOnce;\n diagram.currentDrawingObject = connector;\n return 'PortDraw';\n }\n }\n return 'None';\n}\nfunction checkForResizeHandles(diagram, element, position, matrix, x, y) {\n var forty = 40 / diagram.scroller.currentZoom;\n var ten = 10 / diagram.scroller.currentZoom;\n var selectedItems = diagram.selectedItems;\n var labelSelection = (selectedItems.annotation) ? true : false;\n if (element.actualSize.width >= forty && element.actualSize.height >= forty) {\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouthEast', selectedItems.thumbsConstraints, selectedItems) && contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y + element.actualSize.height }), ten)) {\n return (labelSelection) ? 'LabelResizeSouthEast' : 'ResizeSouthEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouthWest', selectedItems.thumbsConstraints, selectedItems) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y + element.actualSize.height }), ten)) {\n return (labelSelection) ? 'LabelResizeSouthWest' : 'ResizeSouthWest';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorthEast', selectedItems.thumbsConstraints, selectedItems) &&\n contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y }), ten)) {\n return (labelSelection) ? 'LabelResizeNorthEast' : 'ResizeNorthEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorthWest', selectedItems.thumbsConstraints, selectedItems) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y }), ten)) {\n return (labelSelection) ? 'LabelResizeNorthWest' : 'ResizeNorthWest';\n }\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeEast', selectedItems.thumbsConstraints, selectedItems) && contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y + element.actualSize.height / 2 }), ten)) {\n return (labelSelection) ? 'LabelResizeEast' : 'ResizeEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeWest', selectedItems.thumbsConstraints, selectedItems) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y + element.actualSize.height / 2 }), ten)) {\n return (labelSelection) ? 'LabelResizeWest' : 'ResizeWest';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouth', selectedItems.thumbsConstraints, selectedItems) && contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width / 2, y: y + element.actualSize.height }), ten)) {\n return (labelSelection) ? 'LabelResizeSouth' : 'ResizeSouth';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorth', selectedItems.thumbsConstraints, selectedItems) &&\n contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width / 2, y: y }), ten)) {\n return (labelSelection) ? 'LabelResizeNorth' : 'ResizeNorth';\n }\n return null;\n}\n/** @private */\nexport function contains(mousePosition, corner, padding) {\n if (mousePosition.x >= corner.x - padding && mousePosition.x <= corner.x + padding) {\n if (mousePosition.y >= corner.y - padding && mousePosition.y <= corner.y + padding) {\n return true;\n }\n }\n return false;\n}\n/** @private */\nexport function hasSelection(diagram) {\n if (diagram.selectedItems.nodes.length > 0 || diagram.selectedItems.connectors.length > 0) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function hasSingleConnection(diagram) {\n if (diagram.selectedItems.connectors.length === 1 && !diagram.selectedItems.nodes.length) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function isSelected(diagram, element, firstLevel, wrapper) {\n if (firstLevel === void 0) { firstLevel = true; }\n if (element instanceof Selector) {\n return true;\n }\n if (element instanceof Node) {\n while (element) {\n if (diagram.selectedItems.nodes.indexOf(element) !== -1 && diagram.selectedItems.annotation === undefined) {\n return true;\n }\n if (!firstLevel) {\n element = diagram.nameTable[element.parentId];\n }\n else {\n break;\n }\n }\n }\n else if (element instanceof Connector) {\n if (diagram.selectedItems.connectors.indexOf(element) !== -1 && diagram.selectedItems.annotation === undefined) {\n return true;\n }\n }\n else if (element instanceof ShapeAnnotation || element instanceof PathAnnotation) {\n if (diagram.selectedItems.annotation && diagram.selectedItems.wrapper.children[0].id === wrapper.id) {\n return true;\n }\n }\n return false;\n}\n/** @private */\nexport function getCursor(cursor, angle) {\n //to avoid angles less than 0 & angles greater than 360\n angle += 360;\n angle %= 360;\n if (cursor.indexOf('Resize') === -1) {\n return cursors[cursor];\n }\n else {\n var dir = cursors[cursor];\n if ((angle >= 0 && angle < 25) || (angle >= 160 && angle <= 205) || (angle >= 340 && angle <= 360)) {\n return dir;\n }\n else if ((angle >= 25 && angle <= 70) || (angle >= 205 && angle <= 250)) {\n if (dir === 'n-resize' || dir === 's-resize') {\n return 'ne-resize';\n }\n else if (dir === 'nw-resize' || dir === 'se-resize') {\n return 'n-resize';\n }\n else if (dir === 'e-resize' || dir === 'w-resize') {\n return 'nw-resize';\n }\n else {\n return 'e-resize';\n }\n }\n else if ((angle >= 70 && angle <= 115) || (angle >= 250 && angle <= 295)) {\n if (dir === 'n-resize' || dir === 's-resize') {\n return 'e-resize';\n }\n else if (dir === 'nw-resize' || dir === 'se-resize') {\n return 'ne-resize';\n }\n else if (dir === 'e-resize' || dir === 'w-resize') {\n return 'n-resize';\n }\n else {\n return 'nw-resize';\n }\n }\n else if ((angle >= 115 && angle <= 155) || (angle >= 295 && angle <= 340)) {\n if (dir === 'n-resize' || dir === 's-resize') {\n return 'nw-resize';\n }\n else if (dir === 'nw-resize' || dir === 'se-resize') {\n return 'e-resize';\n }\n else if (dir === 'e-resize' || dir === 'w-resize') {\n return 'ne-resize';\n }\n }\n else {\n return 'n-resize';\n }\n }\n return cursors[cursor];\n}\nvar cursors = {\n 'None': 'default',\n 'Rotate': 'crosshair',\n 'Select': 'default',\n 'Drag': 'move',\n 'ResizeWest': 'w-resize',\n 'ResizeEast': 'e-resize',\n 'ResizeSouth': 's-resize',\n 'ResizeNorth': 'n-resize',\n 'Draw': 'crosshair',\n 'PortDraw': 'crosshair',\n 'ResizeNorthEast': 'ne-resize',\n 'ResizeNorthWest': 'nw-resize',\n 'ResizeSouthEast': 'se-resize',\n 'ResizeSouthWest': 'sw-resize',\n 'ConnectorSourceEnd': 'move',\n 'ConnectorTargetEnd': 'move',\n 'BezierSourceThumb': 'move',\n 'BezierTargetThumb': 'move',\n 'OrthoThumb': 'move',\n 'SegmentEnd': 'move',\n 'Pan': 'pointer',\n 'Hyperlink': 'pointer',\n 'PortDrag': 'pointer',\n 'LabelSelect': 'pointer',\n 'LabelDrag': 'move',\n 'LabelRotate': 'crosshair',\n 'LabelResizeWest': 'w-resize',\n 'LabelResizeEast': 'e-resize',\n 'LabelResizeSouth': 's-resize',\n 'LabelResizeNorth': 'n-resize',\n 'LabelResizeNorthEast': 'ne-resize',\n 'LabelResizeNorthWest': 'nw-resize',\n 'LabelResizeSouthEast': 'se-resize',\n 'LabelResizeSouthWest': 'sw-resize',\n};\n","import { Node } from './../objects/node';\nimport { DiagramElement } from './../core/elements/diagram-element';\nimport { Canvas } from './../core/containers/canvas';\nimport { Container } from './../core/containers/container';\nimport { PathElement } from './../core/elements/path-element';\nimport { TextElement } from './../core/elements/text-element';\nimport { updateStyle } from './../../diagram/utility/diagram-util';\nimport { randomId, cloneObject } from './../utility/base-util';\nimport { Connector } from './../objects/connector';\nimport { BpmnAnnotation } from './../objects/node';\nimport { Transform, DiagramAction } from '../enum/enum';\nimport { findAngle, getIntersectionPoints, getPortDirection } from '../utility/connector';\nimport { Point } from '../primitives/point';\nimport { NodeConstraints, ConnectorConstraints } from '../enum/enum';\nimport { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { getDiagramElement } from '../utility/dom-util';\n/**\n * BPMN Diagrams contains the BPMN functionalities\n */\nvar BpmnDiagrams = /** @class */ (function () {\n //End size region\n /**\n * Constructor for the BpmnDiagrams module\n * @private\n */\n function BpmnDiagrams() {\n //Code conversion for Bpmn Shapes\n //Start Region\n this.annotationObjects = {};\n //constructs the BpmnDiagrams module\n }\n Object.defineProperty(BpmnDiagrams.prototype, \"textAnnotationConnectors\", {\n get: function () {\n var connectors = [];\n for (var _i = 0, _a = Object.keys(this.annotationObjects); _i < _a.length; _i++) {\n var key = _a[_i];\n var entry = this.annotationObjects[key];\n for (var _b = 0, _c = Object.keys(entry); _b < _c.length; _b++) {\n var annotation = _c[_b];\n var key_1 = 'connector';\n connectors.push(entry[annotation][key_1]);\n }\n }\n return connectors;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n BpmnDiagrams.prototype.getTextAnnotationConn = function (obj) {\n var connectors = [];\n if (obj.shape.type === 'Bpmn' && obj.shape.annotations.length !== 0) {\n var entry = this.annotationObjects[obj.id];\n for (var _i = 0, _a = Object.keys(entry); _i < _a.length; _i++) {\n var annotation = _a[_i];\n var key = 'connector';\n connectors.push(entry[annotation][key]);\n }\n }\n return connectors;\n };\n BpmnDiagrams.prototype.getSize = function (node, content) {\n var size = new Size(node.width, node.height);\n if (size.width === undefined || size.height === undefined) {\n if (!(content instanceof PathElement)) {\n size.width = size.width || 50;\n size.height = size.height || 50;\n }\n if (content.actualSize.width && content.actualSize.height) {\n return content.actualSize;\n }\n else {\n content.measure(new Size());\n size.width = size.width || content.desiredSize.width;\n size.height = size.height || content.desiredSize.height;\n }\n if (node.maxWidth !== undefined) {\n size.width = Math.min(size.width, node.maxWidth);\n }\n if (node.maxHeight !== undefined) {\n size.height = Math.min(size.height, node.maxHeight);\n }\n if (node.minWidth !== undefined) {\n size.width = Math.max(size.width, node.minWidth);\n }\n if (node.minHeight !== undefined) {\n size.height = Math.max(size.height, node.minHeight);\n }\n }\n return size;\n };\n /** @private */\n BpmnDiagrams.prototype.initBPMNContent = function (content, node, diagram) {\n var shape = node.shape;\n if (shape.shape === 'Event') {\n content = this.getBPMNEventShape(node, shape.event);\n }\n if (shape.shape === 'Gateway') {\n content = this.getBPMNGatewayShape(node);\n }\n if (shape.shape === 'DataObject') {\n content = this.getBPMNDataObjectShape(node);\n }\n if (shape.shape === 'Message' || shape.shape === 'DataSource') {\n content = this.getBPMNShapes(node);\n }\n // if (shape.shape === 'Group') {\n // content = this.getBPMNGroup(node, diagram);\n // content.style.strokeDashArray = '2 2 6 2';\n // content.horizontalAlignment = 'Center';\n // content.verticalAlignment = 'Center';\n // }\n if (shape.shape === 'Activity') {\n content = this.getBPMNActivityShape(node);\n }\n if (shape.shape === 'TextAnnotation') {\n content = this.renderBPMNTextAnnotation(diagram, node, content);\n }\n var annotations = {};\n if (shape.annotations.length > 0) {\n for (var i = 0; i < shape.annotations.length && shape.annotations[i].text; i++) {\n content.children.push(this.getBPMNTextAnnotation(node, diagram, shape.annotations[i], content));\n }\n content.style.strokeDashArray = '2 2 6 2';\n }\n return content;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNShapes = function (node) {\n var bpmnShape = new PathElement();\n //set style\n this.setStyle(bpmnShape, node);\n if ((node.constraints & NodeConstraints.Shadow) !== 0) {\n bpmnShape.shadow = node.shadow;\n }\n var bpmnShapeData = getBpmnShapePathData(node.shape.shape);\n bpmnShape.data = bpmnShapeData;\n bpmnShape.id = node.id + '_' + node.shape.shape;\n if (node.width !== undefined && node.height !== undefined) {\n bpmnShape.width = node.width;\n bpmnShape.height = node.height;\n }\n return bpmnShape;\n };\n /** @private */\n // public getBPMNGroup(node: Node, diagram: Diagram): Container {\n // let group: Container = new Container();\n // group.id = node.id + '_group';\n // //group.style.strokeDashArray = '2 2 6 2';\n // if (!group.children) { group.children = []; }\n // let grp: BpmnGroup = ((node.shape as BpmnShape).group as BpmnGroup);\n // if ((node.shape as BpmnShape).group as BpmnGroup) {\n // for (let i: number = 0; i < grp.children.length; i++) {\n // let b: Node | Connector = diagram.nameTable[grp.children[i]];\n // group.children.push(b.wrapper);\n // }\n // }\n // return group;\n // }\n /** @private */\n BpmnDiagrams.prototype.getBPMNGatewayShape = function (node) {\n var gatewayshape = new Canvas();\n //childNode0\n var gatewayNode = new PathElement();\n gatewayNode.id = node.id + '_0_gateway';\n gatewayNode.offsetX = node.offsetX;\n gatewayNode.offsetY = node.offsetY;\n gatewayNode.data = 'M 40 20 L 20 40 L 0 20 L 20 0 L 40 20 Z';\n this.setStyle(gatewayNode, node);\n //childNode1\n var gatewayTypeNode = new PathElement();\n gatewayTypeNode.id = node.id + '_1_gatewayType';\n //set style - opacity\n gatewayTypeNode.style.opacity = node.style.opacity;\n gatewayTypeNode.horizontalAlignment = 'Center';\n gatewayTypeNode.verticalAlignment = 'Center';\n gatewayTypeNode.relativeMode = 'Object';\n var shapeType = node.shape.gateway;\n var gatewayTypeNodeShapeData;\n gatewayTypeNodeShapeData = getBpmnGatewayShapePathData(shapeType.type);\n if (shapeType.type === 'EventBased' || shapeType.type === 'ExclusiveEventBased' || shapeType.type === 'ParallelEventBased') {\n gatewayTypeNode.style.fill = 'white';\n }\n else {\n gatewayTypeNode.style.fill = 'black';\n }\n gatewayTypeNode.data = gatewayTypeNodeShapeData;\n // append child and set style\n gatewayshape.style.fill = 'transparent';\n gatewayshape.style.strokeColor = 'transparent';\n gatewayshape.style.strokeWidth = 0;\n gatewayshape.children = [gatewayNode, gatewayTypeNode];\n var size = this.getSize(node, gatewayNode);\n this.setSizeForBPMNGateway(node.shape.gateway, gatewayshape, size.width, size.height);\n return gatewayshape;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNDataObjectShape = function (node) {\n var dataObjectshape = new Canvas();\n var shape = node.shape.dataObject;\n //childNode0\n var dataobjNode = new PathElement();\n dataobjNode.id = node.id + '_0_dataobj';\n dataobjNode.data = 'M29.904,5 L7.853,5 L7.853,45 L42.147,45 L42.147,17.242,L29.932,5,L29.932,17.242,L42.147,17.242';\n var size = this.getSize(node, dataobjNode);\n dataobjNode.width = size.width;\n dataobjNode.height = size.height;\n this.setStyle(dataobjNode, node);\n //childNode1\n var dataobjTypeNode = new PathElement();\n dataobjTypeNode.id = node.id + '_1_type';\n dataobjTypeNode.width = 25;\n dataobjTypeNode.height = 20;\n dataobjTypeNode.margin.left = 5;\n dataobjTypeNode.margin.top = 5;\n dataobjTypeNode.data = 'M 3 9.4 l 6 0 v 2.4 l 3.6 -4 L 9 4 v 2.5 H 3 V 9.4 Z';\n //set style - opacity\n dataobjTypeNode.style.opacity = node.style.opacity;\n //childNode2\n var dataobjCollectionNode = new PathElement();\n dataobjCollectionNode.id = node.id + '_2_collection';\n dataobjCollectionNode.width = 7.5;\n dataobjCollectionNode.height = 15;\n dataobjCollectionNode.style.fill = 'black';\n dataobjCollectionNode.visible = true;\n dataobjCollectionNode.horizontalAlignment = 'Center';\n dataobjCollectionNode.verticalAlignment = 'Bottom';\n dataobjCollectionNode.relativeMode = 'Object';\n //set style - opacity\n dataobjCollectionNode.style.opacity = node.style.opacity;\n dataobjCollectionNode.data = 'M 0 0 L 0.1 0 L 0.1 2 L 0 2 Z M 0.4 0 L 0.6 0 L 0.6 2 L0.4 2 Z M 0.9 0 L 1 0 L 1 2 L 0.9 2 Z';\n switch (shape.type) {\n case 'None':\n dataobjTypeNode.visible = false;\n break;\n case 'Input':\n dataobjTypeNode.style.fill = 'white';\n break;\n case 'Output':\n dataobjTypeNode.style.fill = 'black';\n break;\n }\n if (shape.collection === false) {\n dataobjCollectionNode.visible = false;\n }\n //append child and set style\n dataObjectshape.style.fill = 'transparent';\n dataObjectshape.style.strokeColor = 'transparent';\n dataObjectshape.style.strokeWidth = 0;\n dataObjectshape.children = [dataobjNode, dataobjTypeNode, dataobjCollectionNode];\n return dataObjectshape;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNTaskShape = function (node) {\n var shape = node.shape.activity;\n var task = shape.task;\n var taskShapes = new Canvas();\n //childNode0\n var taskNode = new DiagramElement();\n taskNode.cornerRadius = 10;\n var size = this.getSize(node, taskNode);\n taskNode.id = node.id + '_0_task';\n taskNode.width = size.width;\n taskNode.height = size.height;\n this.setStyle(taskNode, node);\n // if task as call \n if ((task.call !== undefined) && task.call === true) {\n taskNode.style.strokeWidth = 4;\n }\n taskShapes.width = size.width;\n taskShapes.height = size.height;\n var childCount = this.getTaskChildCount(node);\n var x;\n var childSpace = childCount * 12;\n var area = size.width / 2 - childSpace;\n if (childCount === 1) {\n x = area + 8;\n }\n else {\n x = area + (childCount - 1) * 8;\n }\n //childNode1\n var taskTypeNode = new PathElement();\n var taskTypeNodeData;\n if (task.type === 'Receive' || task.type === 'Send') {\n taskTypeNode.width = 18;\n taskTypeNode.height = 16;\n }\n else {\n taskTypeNode.width = 20;\n taskTypeNode.height = 20;\n }\n taskTypeNode.id = node.id + '_1_tasktType';\n taskTypeNode.margin.left = 5;\n taskTypeNode.margin.top = 5;\n taskTypeNodeData = getBpmnTaskShapePathData(task.type);\n taskTypeNode.data = taskTypeNodeData;\n taskTypeNode.style.fill = 'transparent';\n taskTypeNode.style.opacity = node.style.opacity;\n // append child and set style\n taskShapes.style.fill = 'transparent';\n taskShapes.style.strokeColor = 'transparent';\n taskShapes.style.strokeWidth = 0;\n taskShapes.children = [taskNode, taskTypeNode];\n // if task as loop\n var loopType = task.loop;\n var taskLoopNode = new PathElement();\n var childNode2data;\n childNode2data = getBpmnLoopShapePathData(loopType);\n taskLoopNode.data = childNode2data;\n taskLoopNode.style.fill = 'black';\n if (loopType !== 'None') {\n taskLoopNode.visible = true;\n }\n else {\n taskLoopNode.visible = false;\n }\n if (childCount === 1) {\n x = area + 9;\n }\n taskLoopNode.margin.left = x;\n if (taskLoopNode.visible === true) {\n x += 12 + 8;\n }\n taskLoopNode.width = 12;\n taskLoopNode.height = 12;\n taskLoopNode.margin.bottom = 5;\n taskLoopNode.id = node.id + '_2_loop';\n taskLoopNode.horizontalAlignment = 'Left';\n taskLoopNode.verticalAlignment = 'Bottom';\n taskLoopNode.setOffsetWithRespectToBounds(0, 1, 'Fraction');\n taskLoopNode.relativeMode = 'Point';\n taskLoopNode.style.fill = 'transparent';\n taskTypeNode.style.opacity = node.style.opacity;\n taskShapes.children.push(taskLoopNode);\n //if task as compensation\n var taskCompNode = new PathElement();\n taskCompNode = this.getBPMNCompensationShape(node, taskCompNode);\n if (task.compensation === true) {\n taskCompNode.visible = true;\n }\n else {\n taskCompNode.visible = false;\n }\n if (childCount === 1) {\n x = area + 9;\n }\n taskCompNode.margin.left = x - 3;\n x += 12 + 6;\n taskShapes.children.push(taskCompNode);\n return taskShapes;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNEventShape = function (node, subEvent, sub, id) {\n var eventshape = new Canvas();\n var event;\n var trigger;\n var width;\n var height;\n id = id || node.id;\n var pathdata = 'M164.1884,84.6909000000001C156.2414,84.6909000000001,149.7764,78.2259000000001,149.7764,70.2769000000001' +\n 'C149.7764,62.3279000000001,156.2414,55.8629000000001,164.1884,55.8629000000001C172.1354,55.8629000000001,178.6024,' +\n '62.3279000000001,178.6024,70.2769000000001C178.6024,78.2259000000001,172.1354,84.6909000000001,164.1884,84.6909000000001';\n var shapeEvent = node.shape.event;\n if (node.shape.shape === 'Event') {\n event = shapeEvent.event;\n trigger = shapeEvent.trigger;\n }\n width = subEvent.width;\n height = subEvent.height;\n if (sub) {\n width = width || 20;\n height = height || 20;\n }\n else if (subEvent.width === undefined || subEvent.height === undefined) {\n var pathElement = new PathElement();\n pathElement.data = pathdata;\n var size = this.getSize(node, pathElement);\n width = size.width;\n height = size.height;\n }\n var shapeActivity = node.shape.activity;\n if (node.shape.shape === 'Activity') {\n var subProcess = shapeActivity.subProcess;\n event = subEvent.event;\n trigger = subEvent.trigger;\n }\n //childNode0\n var innerEvtNode = new PathElement();\n innerEvtNode.data = pathdata;\n innerEvtNode.id = id + '_0_event';\n innerEvtNode.width = width;\n innerEvtNode.height = height;\n innerEvtNode.horizontalAlignment = 'Center';\n innerEvtNode.verticalAlignment = 'Center';\n innerEvtNode.relativeMode = 'Object';\n this.setStyle(innerEvtNode, node);\n //childNode1\n var outerEvtNode = new PathElement();\n outerEvtNode.data = pathdata;\n outerEvtNode.id = id + '_1_event';\n outerEvtNode.style.gradient = node.style.gradient;\n outerEvtNode.horizontalAlignment = 'Center';\n outerEvtNode.verticalAlignment = 'Center';\n outerEvtNode.relativeMode = 'Object';\n // set style opacity & strokeColor\n outerEvtNode.style.strokeColor = node.style.strokeColor;\n outerEvtNode.style.opacity = node.style.opacity;\n //childNode2\n var triggerNode = new PathElement();\n var triggerNodeData = getBpmnTriggerShapePathData(trigger);\n triggerNode.data = triggerNodeData;\n triggerNode.id = id + '_2_trigger';\n triggerNode.horizontalAlignment = 'Center';\n triggerNode.verticalAlignment = 'Center';\n triggerNode.relativeMode = 'Object';\n // set style opacity & strokeColor\n triggerNode.style.strokeColor = node.style.strokeColor;\n triggerNode.style.opacity = node.style.opacity;\n switch (event) {\n case 'Start':\n outerEvtNode.visible = false;\n break;\n case 'NonInterruptingStart':\n innerEvtNode.style.strokeDashArray = '2 3';\n outerEvtNode.visible = false;\n break;\n case 'Intermediate':\n innerEvtNode.style.fill = 'white';\n innerEvtNode.style.gradient = null;\n break;\n case 'NonInterruptingIntermediate':\n innerEvtNode.style.fill = 'white';\n innerEvtNode.style.gradient = null;\n innerEvtNode.style.strokeDashArray = '2 3';\n outerEvtNode.style.strokeDashArray = '2 3';\n break;\n case 'ThrowingIntermediate':\n case 'End':\n innerEvtNode.style.fill = event !== 'End' ? 'white' : 'black';\n innerEvtNode.style.gradient = null;\n triggerNode.style.fill = 'black';\n triggerNode.style.strokeColor = node.style.fill;\n break;\n }\n //append child and set style\n eventshape.style.fill = 'transparent';\n eventshape.style.strokeColor = 'transparent';\n eventshape.style.strokeWidth = 0;\n eventshape.children = [innerEvtNode, outerEvtNode, triggerNode];\n this.setSizeForBPMNEvents(shapeEvent, eventshape, width, height);\n return eventshape;\n };\n BpmnDiagrams.prototype.setEventVisibility = function (node, canvas) {\n var event = node.shape.event.event;\n var innerEvtNode = canvas[0];\n var outerEvtNode = canvas[1];\n var triggerNode = canvas[2];\n switch (event) {\n case 'Start':\n outerEvtNode.visible = false;\n break;\n case 'NonInterruptingStart':\n innerEvtNode.style.strokeDashArray = '2 3';\n outerEvtNode.visible = false;\n break;\n }\n };\n BpmnDiagrams.prototype.setSubProcessVisibility = function (node) {\n var subProcess = node.shape.activity.subProcess;\n var eventLength = subProcess.events.length;\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 2 : 0;\n var elementWrapper = node.wrapper.children[0].children[0];\n if (subProcess.adhoc === false) {\n elementWrapper.children[3 + index + eventLength].visible = false;\n }\n if (subProcess.compensation === false) {\n elementWrapper.children[4 + index + eventLength].visible = false;\n }\n if (eventLength > 0) {\n for (var i = 0; i < eventLength; i++) {\n this.setEventVisibility(node, elementWrapper.children[2 + i].children);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNSubProcessShape = function (node) {\n var subProcessShapes = new Canvas();\n var loopType;\n var events;\n var event;\n var subprocessAdhoc = new PathElement();\n var subProcessEventsShapes = new Canvas();\n var subProcessLoopShapes = new PathElement();\n var shape = node.shape.activity;\n var subProcess = shape.subProcess;\n var subChildCount = this.getSubprocessChildCount(node);\n var x;\n var subprocessNode = new DiagramElement();\n subprocessNode.id = node.id + '_0_Subprocess';\n subprocessNode.style.fill = 'transparent';\n subprocessNode.cornerRadius = 10;\n var size = this.getSize(node, subprocessNode);\n subprocessNode.width = size.width;\n subprocessNode.height = size.height;\n subProcessShapes.children = [subprocessNode];\n if (shape.subProcess.type === 'Transaction') {\n this.getBPMNSubProcessTransaction(node, node.shape, subProcessShapes);\n }\n var iconSpace = 4;\n var subChildSpace = 12;\n var childSpace = subChildCount * subChildSpace;\n var area = size.width / 2;\n if (subChildCount === 1) {\n x = area - (subChildSpace * 0.5);\n }\n else {\n x = area - (childSpace / 2) - ((subChildCount - 1) * iconSpace) / 2;\n }\n //set style\n this.setStyle(subprocessNode, node);\n if ((node.constraints & NodeConstraints.Shadow) !== 0) {\n subProcessShapes.shadow = node.shadow;\n }\n var collapsedShape = new PathElement();\n collapsedShape.id = node.id + '_0_collapsed';\n collapsedShape.width = 12;\n collapsedShape.height = 12;\n collapsedShape.style.fill = 'black';\n collapsedShape.margin.bottom = 5;\n collapsedShape.horizontalAlignment = 'Left';\n collapsedShape.verticalAlignment = 'Bottom';\n collapsedShape.setOffsetWithRespectToBounds(0, 1, 'Fraction');\n collapsedShape.relativeMode = 'Point';\n collapsedShape.data = getBpmnShapePathData('collapsedShape');\n collapsedShape.margin.left = x;\n if (subProcess.collapsed === true && !subProcess.processes) {\n collapsedShape.visible = true;\n }\n else {\n collapsedShape.visible = false;\n }\n if (collapsedShape.visible === true) {\n x += 12 + 6;\n }\n subProcessShapes.children.push(collapsedShape);\n if (subProcess.type === 'Event') {\n subprocessNode.style.strokeWidth = 1;\n subprocessNode.style.strokeDashArray = '2 2';\n events = subProcess.events;\n for (var i = 0; i < events.length; i++) {\n event = events[i];\n this.getBPMNSubEvent(event, node, subProcessShapes);\n }\n }\n // set loop for subprocess\n subProcessLoopShapes = this.getBPMNSubProcessLoopShape(node);\n if (subChildCount === 1) {\n x = area + 8;\n }\n subProcessLoopShapes.margin.left = x;\n if (subProcessLoopShapes.visible === true) {\n x += subChildSpace + iconSpace;\n }\n subProcessShapes.children.push(subProcessLoopShapes);\n // set boundary for subprocess\n subprocessNode.id = node.id + '_boundary';\n if (subProcess.boundary === 'Default') {\n subprocessNode.style.strokeWidth = 1;\n subprocessNode.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Call') {\n subprocessNode.style.strokeWidth = 4;\n subprocessNode.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Event') {\n subprocessNode.style.strokeWidth = 1;\n subprocessNode.style.strokeDashArray = '2 2';\n }\n //set adhoc for subprocess\n subprocessAdhoc = this.getBPMNAdhocShape(node, subprocessAdhoc, subProcess);\n if (subChildCount === 1) {\n x = area + 8;\n }\n subprocessAdhoc.margin.left = x;\n if (subprocessAdhoc.visible === true) {\n x += subChildSpace + iconSpace;\n }\n subProcessShapes.children.push(subprocessAdhoc);\n //set compensation for subprocess\n var subprocessComp = new PathElement();\n if (subProcess.compensation === true) {\n subprocessComp.visible = true;\n }\n else {\n subprocessComp.visible = false;\n }\n subprocessComp = this.getBPMNCompensationShape(node, subprocessComp);\n if (subChildCount === 1) {\n x = area + 8;\n }\n subprocessComp.margin.left = x;\n if (subprocessComp.visible === true) {\n x += subChildSpace + iconSpace;\n }\n subProcessShapes.children.push(subprocessComp);\n //set style for subprocess\n subProcessShapes.style.strokeColor = 'transparent';\n subProcessShapes.style.strokeWidth = 0;\n subProcessShapes.style.fill = 'transparent';\n return subProcessShapes;\n };\n BpmnDiagrams.prototype.getBPMNSubEvent = function (event, node, container, id) {\n container.children = container.children || [];\n var eventContainer;\n eventContainer = this.getBPMNEventShape(node, event, true, id);\n this.getBPMNSubprocessEvent(node, eventContainer, event);\n eventContainer.id = id || (node.id + '_subprocessEvents');\n eventContainer.width = event.width || 20;\n eventContainer.height = event.height || 20;\n // set offset for subevents\n eventContainer.setOffsetWithRespectToBounds(event.offset.x, event.offset.y, 'Fraction');\n eventContainer.relativeMode = 'Point';\n //set margin for subevents\n eventContainer.margin = event.margin;\n //set alignment for subevents\n eventContainer.horizontalAlignment = event.horizontalAlignment;\n eventContainer.verticalAlignment = event.verticalAlignment;\n // set style for subevent\n eventContainer.style.fill = 'transparent';\n eventContainer.style.strokeColor = 'transparent';\n eventContainer.style.strokeWidth = 0;\n container.children.push(eventContainer);\n };\n BpmnDiagrams.prototype.getBPMNSubProcessTransaction = function (node, shape, container) {\n var shapeWidth = container.children[0].width;\n var shapeHeight = container.children[0].height;\n var innerRect = new DiagramElement();\n innerRect.margin = { left: 3, right: 0, top: 3, bottom: 0 };\n innerRect.id = node.id + '_0_Subprocess_innnerRect';\n innerRect.cornerRadius = 10;\n innerRect.width = shapeWidth - 6;\n innerRect.height = shapeHeight - 6;\n container.children.push(innerRect);\n var transactionEvents = new Canvas();\n transactionEvents.id = node.id + '_transaction_events';\n transactionEvents.style.gradient = node.style.gradient;\n var transaction = shape.activity.subProcess.transaction;\n this.getBPMNSubEvent(transaction.success, node, transactionEvents, node.id + '_success');\n this.getBPMNSubEvent(transaction.cancel, node, transactionEvents, node.id + '_cancel');\n this.getBPMNSubEvent(transaction.failure, node, transactionEvents, node.id + '_failure');\n this.updateDiagramContainerVisibility(transactionEvents.children[0], transaction.success.visible);\n this.updateDiagramContainerVisibility(transactionEvents.children[1], transaction.cancel.visible);\n this.updateDiagramContainerVisibility(transactionEvents.children[2], transaction.failure.visible);\n transactionEvents.float = true;\n transactionEvents.width = shapeWidth;\n transactionEvents.height = shapeHeight;\n transactionEvents.style.fill = transactionEvents.style.strokeColor = 'transparent';\n container.children.push(transactionEvents);\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNSubProcessLoopShape = function (node) {\n var shape = node.shape.activity;\n var loopType;\n var subprocessLoop = new PathElement();\n var subprocessLoopData;\n var subProcess = shape.subProcess;\n loopType = subProcess.loop;\n subprocessLoopData = getBpmnLoopShapePathData(loopType);\n if (loopType !== 'None') {\n subprocessLoop.visible = true;\n }\n else {\n subprocessLoop.visible = false;\n }\n subprocessLoop.id = node.id + '_loop';\n subprocessLoop.data = subprocessLoopData;\n subprocessLoop.style.fill = 'black';\n subprocessLoop.width = 12;\n subprocessLoop.height = 12;\n subprocessLoop.horizontalAlignment = 'Left';\n subprocessLoop.verticalAlignment = 'Bottom';\n subprocessLoop.setOffsetWithRespectToBounds(0, 1, 'Fraction');\n subprocessLoop.relativeMode = 'Point';\n subprocessLoop.margin.bottom = 5;\n subprocessLoop.style.fill = 'transparent';\n return subprocessLoop;\n };\n /** @private */\n BpmnDiagrams.prototype.drag = function (obj, tx, ty, diagram) {\n var node = diagram.nameTable[(obj).processId];\n if (obj.margin.top + ty >= 0) {\n diagram.nodePropertyChange(obj, {}, { margin: { top: obj.margin.top + ty } });\n }\n if (obj.margin.left + tx >= 0) {\n diagram.nodePropertyChange(obj, {}, { margin: { left: obj.margin.left + tx } });\n }\n var diffX = 0;\n var diffY = 0;\n var bound = this.getChildrenBound(node, obj.id, diagram);\n this.updateSubProcessess(bound, obj, diagram);\n node.wrapper.measure(new Size(undefined, undefined));\n node.wrapper.arrange(node.wrapper.desiredSize);\n diagram.refreshCanvasLayers();\n diagram.updateSelector();\n this.updateDocks(obj, diagram);\n };\n /** @private */\n BpmnDiagrams.prototype.dropBPMNchild = function (target, source, diagram) {\n if (source && source.shape.type === 'Bpmn' && source.shape.shape !== 'TextAnnotation') {\n var subProcess = diagram.nameTable[target.id].shape.activity.subProcess;\n if (diagram.currentSymbol && target.shape.type === 'Bpmn' && !subProcess.collapsed) {\n source.processId = target.id;\n return;\n }\n subProcess.processes = subProcess.processes || [];\n if (subProcess.processes && subProcess.processes.indexOf(source.id) === -1 && !subProcess.collapsed) {\n subProcess.processes.push(source.id);\n var redoElement = cloneObject(source);\n var sources = diagram.nameTable[source.id].wrapper;\n var targetWrapper = diagram.nameTable[target.id].wrapper;\n sources.margin.top = (sources.offsetY - (sources.actualSize.height / 2))\n - (target.offsetY - (target.actualSize.height / 2));\n sources.margin.left = (sources.offsetX - (sources.actualSize.width / 2))\n - (target.offsetX - (target.actualSize.width / 2));\n sources.margin.top = (sources.margin.top < 0) ? 0 : sources.margin.top;\n sources.margin.left = (sources.margin.left < 0) ? 0 : sources.margin.left;\n diagram.nameTable[source.id].processId = target.id;\n targetWrapper.children.push(diagram.nameTable[source.id].wrapper);\n var bound = this.getChildrenBound(target, source.id, diagram);\n this.updateSubProcessess(bound, source, diagram);\n targetWrapper.measure(new Size(undefined, undefined));\n targetWrapper.arrange(targetWrapper.desiredSize);\n diagram.refreshCanvasLayers();\n diagram.updateSelector();\n var edges = [];\n edges = edges.concat(source.outEdges, source.inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n if (diagram.bpmnModule.textAnnotationConnectors.indexOf(diagram.nameTable[edges[i]]) === -1) {\n diagram.remove(diagram.nameTable[edges[i]]);\n }\n }\n var obj = cloneObject(source);\n var entry = {\n type: 'PositionChanged', undoObject: { nodes: [redoElement] },\n redoObject: { nodes: [obj] }, category: 'Internal'\n };\n diagram.addHistoryEntry(entry);\n if (diagram.mode === 'SVG') {\n if (source.zIndex < target.zIndex) {\n diagram.updateProcesses(source);\n }\n }\n this.updateDocks(source, diagram);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateDocks = function (obj, diagram) {\n if (obj.shape.type === 'Bpmn' && obj.shape.activity.subProcess.processes &&\n !obj.shape.activity.subProcess.collapsed) {\n var processTable = obj.shape.activity.subProcess.processes;\n for (var _i = 0, processTable_1 = processTable; _i < processTable_1.length; _i++) {\n var i = processTable_1[_i];\n var actualObject = diagram.nameTable[i];\n if (actualObject) {\n diagram.updateConnectorEdges(actualObject);\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n if (actualObject.shape.activity.subProcess.processes\n && actualObject.shape.activity.subProcess.processes.length) {\n this.updateDocks(actualObject, diagram);\n }\n }\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.removeBpmnProcesses = function (currentObj, diagram) {\n var element = diagram.nameTable[currentObj.processId];\n if (currentObj.shape.type === 'Bpmn' && currentObj.shape.activity.subProcess.processes &&\n currentObj.shape.activity.subProcess.processes.length > 0) {\n var processes = currentObj.shape.activity.subProcess.processes;\n for (var j = processes.length - 1; j >= 0; j--) {\n diagram.remove(diagram.nameTable[processes[j]]);\n }\n }\n if (element) {\n diagram.removeDependentConnector(currentObj);\n var processes = element.shape.activity.subProcess.processes;\n this.removeChildFromBPMN(element.wrapper, currentObj.id);\n var processIndex = processes.indexOf(currentObj.id);\n processes.splice(processIndex, 1);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.removeChildFromBPMN = function (wrapper, name) {\n for (var _i = 0, _a = wrapper.children; _i < _a.length; _i++) {\n var i = _a[_i];\n if (i.id === name) {\n wrapper.children.splice(wrapper.children.indexOf(i), 1);\n }\n else if (i.children) {\n this.removeChildFromBPMN(i, name);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.removeProcess = function (id, diagram) {\n var node = diagram.nameTable[id];\n if (node) {\n var parent_1 = diagram.nameTable[node.processId];\n if (parent_1 && parent_1.shape.type === 'Bpmn') {\n var processes = parent_1.shape.activity.subProcess.processes;\n diagram.removeDependentConnector(node);\n this.removeChildFromBPMN(parent_1.wrapper, id);\n var processIndex = processes.indexOf(id);\n processes.splice(processIndex, 1);\n node.processId = '';\n diagram.refreshDiagramLayer();\n diagram.updateSelector();\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.addProcess = function (process, parentId, diagram) {\n var id;\n process.id = process.id || randomId();\n id = process.id;\n var node = diagram.nameTable[id];\n if (!node) {\n diagram.add(process);\n }\n process.processId = parentId;\n var parentNode = diagram.nameTable[parentId];\n var subProcess = parentNode.shape.activity.subProcess;\n if (node && parentNode && parentNode.shape.type === 'Bpmn' && node.shape.type === 'Bpmn' &&\n subProcess.processes) {\n node.processId = parentId;\n var processes = parentNode.shape.activity.subProcess.processes;\n if (processes.indexOf(id) < 0) {\n processes.push(id);\n }\n parentNode.wrapper.children.push(node.wrapper);\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n diagram.bpmnModule.updateDocks(parentNode, diagram);\n diagram.refreshDiagramLayer();\n if (diagram.mode === 'SVG' && (node.shape && node.shape.activity\n && !node.shape.activity.subProcess.processes)) {\n var child = getDiagramElement(parentId + '_groupElement');\n child.appendChild(getDiagramElement(process.id + '_groupElement'));\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getChildrenBound = function (node, excludeChild, diagram) {\n var processes = node.shape.activity.subProcess.processes;\n var bound;\n if (processes && processes.length) {\n for (var _i = 0, processes_1 = processes; _i < processes_1.length; _i++) {\n var i = processes_1[_i];\n if (excludeChild !== i) {\n if (!bound) {\n bound = diagram.nameTable[i].wrapper.bounds;\n }\n else {\n bound = diagram.nameTable[i].wrapper.bounds.uniteRect(bound);\n }\n }\n }\n }\n return bound || diagram.nameTable[excludeChild].wrapper.bounds;\n };\n /** @private */\n BpmnDiagrams.prototype.updateSubProcessess = function (bound, obj, diagram) {\n var diffX;\n var diffY;\n var node = diagram.nameTable[obj.processId];\n var right;\n var bottom;\n var pivot = { x: 0.5, y: 0.5 };\n if ((node.wrapper.bounds.left + obj.margin.left + obj.width) > (node.wrapper.bounds.right)) {\n right = true;\n }\n if ((node.wrapper.bounds.top + obj.margin.top + obj.height) > (node.wrapper.bounds.bottom)) {\n bottom = true;\n }\n if (right) {\n pivot.x = 0;\n }\n if (bottom) {\n pivot.y = 0;\n }\n var actualSize = node.wrapper.actualSize;\n if (right) {\n diffX = (obj.wrapper.margin.left + obj.wrapper.bounds.width) / actualSize.width;\n }\n if (bottom) {\n diffY = (obj.wrapper.margin.top + obj.wrapper.bounds.height) / actualSize.height;\n }\n if (diffX > 0 || diffY > 0) {\n diagram.commandHandler.scale(diagram.nameTable[obj.processId], diffX || 1, diffY || 1, pivot);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNCompensationShape = function (node, compensationNode) {\n compensationNode.id = node.id + '_0_compensation';\n compensationNode.width = 12;\n compensationNode.height = 12;\n compensationNode.margin.bottom = 5;\n compensationNode.style.fill = 'transparent';\n compensationNode.horizontalAlignment = 'Left';\n compensationNode.verticalAlignment = 'Bottom';\n compensationNode.relativeMode = 'Object';\n compensationNode.data = 'M 22.462 18.754 l -6.79 3.92 l 6.79 3.92 V 22.89 l 6.415 3.705 v -7.841 l -6.415 3.705 V 18.754 Z' +\n ' M 28.331 19.701 v 5.947 l -5.149 -2.973 L 28.331 19.701 Z M 21.916 25.647 l -5.15 -2.973 l 5.15 -2.973 V 25.647 Z' +\n ' M 22.275 12.674 c -5.513 0 -9.999 4.486 -9.999 9.999 c 0 5.514 4.486 10.001 9.999 10.001' +\n ' c 5.514 0 9.999 -4.486 9.999 -10.001 C 32.274 17.16 27.789 12.674 22.275 12.674 Z M 22.275 32.127 ' +\n ' c -5.212 0 -9.453 -4.241 -9.453 -9.454 c 0 -5.212 4.241 -9.453 9.453 -9.453 c 5.212 0 9.453 4.241 9.453 9.453' +\n ' C 31.728 27.887 27.487 32.127 22.275 32.127 Z';\n return compensationNode;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNActivityShape = function (node) {\n var eventshape = new Canvas();\n var content;\n var shape = node.shape.activity;\n var task = shape.activity;\n var subProcess = shape.subProcess;\n var activityType = shape.activity;\n if (task === 'Task') {\n content = this.getBPMNTaskShape(node);\n }\n if (task === 'SubProcess' && subProcess) {\n content = this.getBPMNSubProcessShape(node);\n }\n eventshape.children = [content];\n eventshape.style.fill = 'transparent';\n eventshape.style.strokeColor = 'transparent';\n eventshape.style.strokeWidth = 0;\n return eventshape;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNSubprocessEvent = function (node, subProcessEventsShapes, events) {\n var annotations;\n var ports;\n if (events.annotations.length !== 0) {\n for (var i = 0; i < events.annotations.length; i++) {\n var annot = events.annotations[i];\n annotations = node.initAnnotationWrapper(annot);\n annotations.width = events.width;\n annotations.height = events.height;\n subProcessEventsShapes.children.push(annotations);\n }\n }\n if (events.ports.length !== 0) {\n for (var i = 0; i < events.ports.length; i++) {\n var port = events.ports[i];\n ports = node.initPortWrapper(port);\n subProcessEventsShapes.children.push(ports);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNAdhocShape = function (node, adhocNode, subProcess) {\n adhocNode.id = node.id + '_0_adhoc';\n adhocNode.width = 12;\n adhocNode.height = 8;\n adhocNode.style.fill = 'black';\n adhocNode.margin.bottom = 5;\n adhocNode.horizontalAlignment = 'Left';\n adhocNode.verticalAlignment = 'Bottom';\n adhocNode.relativeMode = 'Object';\n adhocNode.data = 'M 49.832 76.811 v -2.906 c 0 0 0.466 -1.469 1.931 -1.5 c 1.465 -0.031 2.331 1.219 2.897 1.688 ' +\n 's 1.06 0.75 1.526 0.75 c 0.466 0 1.548 -0.521 1.682 -1.208 s 0.083 3.083 0.083 3.083 s -0.76 0.969 -1.859 0.969 ' +\n 'c -1.066 0 -1.865 -0.625 -2.464 -1.438 s -1.359 -0.998 -2.064 -0.906 C 50.598 75.467 49.832 76.811 49.832 76.811 Z';\n if (subProcess && subProcess.adhoc === true) {\n adhocNode.visible = true;\n }\n else {\n adhocNode.visible = false;\n }\n return adhocNode;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNTextAnnotation = function (node, diagram, annotation, content) {\n annotation.id = annotation.id || randomId();\n annotation.nodeId = node.id;\n var annotationContainer = new Canvas();\n var annotationPath = new PathElement();\n var textElement = new TextElement();\n var margin = 10;\n annotationPath.id = node.id + '_' + annotation.id + '_path';\n annotationPath.width = annotation.width;\n annotationPath.height = annotation.height;\n annotationPath.relativeMode = 'Object';\n textElement.id = node.id + '_' + annotation.id + '_text';\n textElement.content = annotation.text;\n var style = node.style;\n textElement.style = {\n fontSize: style.fontSize, italic: style.italic, gradient: null, opacity: style.opacity,\n bold: style.bold, textWrapping: style.textWrapping, color: style.color, fill: 'white',\n fontFamily: style.fontFamily, whiteSpace: style.whiteSpace, textOverflow: 'Wrap',\n strokeColor: 'none', strokeWidth: 0,\n strokeDashArray: style.strokeDashArray, textAlign: style.textAlign, textDecoration: style.textDecoration\n };\n textElement.horizontalAlignment = 'Center';\n textElement.verticalAlignment = 'Center';\n textElement.relativeMode = 'Object';\n textElement.margin = { left: 5, right: 5, top: 5, bottom: 5 };\n annotationContainer.offsetX = node.offsetX + annotation.length *\n Math.cos(annotation.angle * (Math.PI / 180));\n annotationContainer.offsetY = node.offsetY + annotation.length *\n Math.sin(annotation.angle * (Math.PI / 180));\n annotationContainer.float = true;\n annotationContainer.transform = Transform.Self;\n annotationContainer.id = node.id + '_textannotation_' + annotation.id;\n annotationContainer.style.strokeColor = 'transparent';\n annotationContainer.margin = { left: margin, right: margin, top: margin, bottom: margin };\n annotationContainer.relativeMode = 'Object';\n annotationContainer.rotateAngle = 0;\n annotationContainer.children = [annotationPath, textElement];\n var annotationNode = new Node(node.shape, 'annotations', { id: annotationContainer.id, shape: { type: 'Bpmn', shape: 'TextAnnotation' } }, true);\n annotationNode.ports = [\n {\n id: annotationPath.id + '_port', shape: 'Square',\n offset: { x: 0, y: 0.5 },\n }\n ];\n annotationNode.offsetX = annotationContainer.offsetX;\n annotationNode.offsetY = annotationContainer.offsetY;\n annotationNode.text = annotation.text;\n annotationNode.angle = annotation.angle;\n annotationNode.length = annotation.length;\n annotationNode.width = annotation.width;\n annotationNode.height = annotation.height;\n annotationNode.wrapper = annotationContainer;\n annotationContainer.children.push(annotationNode.initPortWrapper(annotationNode.ports[0]));\n var bounds = new Rect(0, 0, 0, 0);\n var width = node.width || node.minWidth || 0;\n var height = node.height || node.minHeight || 0;\n if (width !== undefined && height !== undefined) {\n bounds = new Rect(node.offsetX - width / 2, node.offsetY - height / 2, width, height);\n }\n this.setAnnotationPath(bounds, annotationContainer, { x: annotationNode.offsetX, y: annotationNode.offsetY }, annotationNode, annotation.length, annotation.angle);\n var connector = {\n id: node.id + '_' + annotation.id + '_connector',\n constraints: ConnectorConstraints.Default & ~(ConnectorConstraints.DragTargetEnd | ConnectorConstraints.Drag),\n sourceID: node.id, targetID: annotationContainer.id,\n targetDecorator: { shape: 'None' }\n };\n var annotationConnector = new Connector(node.shape, 'annotations', connector, true);\n annotationConnector.targetPortID = annotationNode.ports[0].id;\n annotationConnector.init(diagram);\n annotationConnector.wrapper.float = false;\n annotationConnector.wrapper.transform = Transform.Self;\n content.children.push(annotationConnector.wrapper);\n annotationConnector.zIndex = 10000;\n var entry = this.annotationObjects[node.id];\n if (!entry) {\n entry = {};\n }\n if (!entry[annotation.id]) {\n entry[annotation.id] = {};\n }\n var nodeKey = 'node';\n var connKey = 'connector';\n entry[annotation.id][nodeKey] = annotationNode;\n entry[annotation.id][connKey] = annotationConnector;\n this.annotationObjects[node.id] = entry;\n diagram.initObject(annotationNode, undefined, false);\n annotationNode.zIndex = 10000;\n return annotationContainer;\n };\n /** @private */\n BpmnDiagrams.prototype.renderBPMNTextAnnotation = function (diagram, annotation, content) {\n annotation.id = annotation.id || randomId();\n var annotationsContainer = new Canvas();\n var annotationPath = new PathElement();\n var textObject = new TextElement();\n var margin = 10;\n annotationPath.id = '_' + annotation.id + '_path';\n annotationPath.width = annotation.width;\n annotationPath.height = annotation.height;\n annotationPath.relativeMode = 'Object';\n textObject.id = annotation.id + '_text';\n textObject.content = annotation.shape.annotation.text;\n var textStyle = annotation.style;\n textObject.style = {\n fontSize: textStyle.fontSize, italic: textStyle.italic, gradient: null, opacity: textStyle.opacity,\n bold: textStyle.bold, textWrapping: textStyle.textWrapping, color: textStyle.color, fill: 'white',\n fontFamily: textStyle.fontFamily, whiteSpace: textStyle.whiteSpace, textOverflow: 'Wrap',\n strokeColor: 'none', strokeWidth: 0,\n strokeDashArray: textStyle.strokeDashArray, textAlign: textStyle.textAlign, textDecoration: textStyle.textDecoration\n };\n textObject.horizontalAlignment = 'Left';\n textObject.verticalAlignment = 'Center';\n textObject.relativeMode = 'Object';\n textObject.margin = { left: 5, right: 5, top: 5, bottom: 5 };\n annotationsContainer.offsetX = annotation.offsetX + annotation.shape.annotation.length *\n Math.cos(annotation.shape.annotation.angle * (Math.PI / 180));\n annotationsContainer.offsetY = annotation.offsetY + annotation.shape.annotation.length *\n Math.sin(annotation.shape.annotation.angle * (Math.PI / 180));\n annotationsContainer.float = true;\n // annotationContainer.transform = Transform.Self;\n annotationsContainer.id = annotation.id + '_textannotation_' + annotation.id;\n annotationsContainer.style.strokeColor = 'transparent';\n annotationsContainer.margin = { left: margin, right: margin, top: margin, bottom: margin };\n annotationsContainer.relativeMode = 'Object';\n annotationsContainer.rotateAngle = 0;\n annotationsContainer.children = [annotationPath, textObject];\n var annotationObject = new Node(annotation.shape, 'annotations', { id: annotationsContainer.id, shape: { type: 'Bpmn', shape: 'TextAnnotation' } }, true);\n annotationObject.ports = [\n {\n id: annotationPath.id + '_port', shape: 'Square',\n offset: { x: 0, y: 0.5 },\n }\n ];\n annotationObject.offsetX = annotationsContainer.offsetX;\n annotationObject.offsetY = annotationsContainer.offsetY;\n if (annotationObject.shape && annotationObject.shape.annotation) {\n annotationObject.text = annotation.shape.annotation.text;\n annotationObject.angle = annotation.shape.annotation.angle;\n annotationObject.length = annotation.shape.annotation.length;\n }\n annotationObject.width = annotation.width;\n annotationObject.height = annotation.height;\n annotationObject.wrapper = annotationsContainer;\n annotationsContainer.children.push(annotationObject.initPortWrapper(annotationObject.ports[0]));\n var bounds = new Rect(0, 0, 0, 0);\n var width = annotation.width || 0;\n var height = annotation.height || 0;\n if (width !== undefined && height !== undefined) {\n bounds = new Rect(annotation.offsetX - width / 2, annotation.offsetY - height / 2, width, height);\n }\n this.setAnnotationPath(bounds, annotationsContainer, { x: annotationObject.offsetX, y: annotationObject.offsetY }, annotationObject, annotation.length, annotation.angle);\n return annotationsContainer;\n };\n /** @private */\n BpmnDiagrams.prototype.getTextAnnotationWrapper = function (node, id) {\n if (node && node.shape.type === 'Bpmn') {\n var shape = node.shape;\n if (shape.shape === 'TextAnnotation') {\n return node.wrapper.children[1];\n }\n else if (this.annotationObjects[node.id] && this.annotationObjects[node.id][id]) {\n var annotationNode = this.annotationObjects[node.id][id].node;\n return this.getTextAnnotationWrapper(annotationNode, id);\n }\n }\n return null;\n };\n /** @private */\n BpmnDiagrams.prototype.addAnnotation = function (node, annotation, diagram) {\n var bpmnShapeContent = node.wrapper.children[0];\n var shape = node.shape;\n annotation.nodeId = node.id;\n var annotationObj = new BpmnAnnotation(shape, 'annotations', annotation, true);\n shape.annotations.push(annotationObj);\n bpmnShapeContent.children.push(this.getBPMNTextAnnotation(node, diagram, annotation, bpmnShapeContent));\n node.wrapper.measure(new Size());\n node.wrapper.arrange(node.wrapper.desiredSize);\n return this.annotationObjects[node.id][annotation.id].connector;\n };\n BpmnDiagrams.prototype.clearAnnotations = function (obj, diagram) {\n var bpmnShape = obj.shape;\n if (bpmnShape.annotations.length) {\n for (var _i = 0, _a = bpmnShape.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n this.removeAnnotationObjects(obj, annotation, diagram);\n }\n }\n delete this.annotationObjects[obj.id];\n };\n /** @private */\n BpmnDiagrams.prototype.checkAndRemoveAnnotations = function (node, diagram) {\n //remove connector path\n //remove annotation node wrapper\n //remove from a quad\n if (node.shape.type === 'Bpmn') {\n if (node.shape.shape === 'TextAnnotation') {\n var id = node.id.split('_');\n var annotationId = id[id.length - 1];\n var nodeId = id[id.length - 3] || id[0];\n var parentNode = diagram.nameTable[nodeId];\n var bpmnShape = parentNode.shape;\n for (var _i = 0, _a = bpmnShape.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n if (annotation.id === annotationId) {\n var index = bpmnShape.annotations.indexOf(annotation);\n if (index !== -1) {\n diagram.removeDependentConnector(node);\n this.removeAnnotationObjects(parentNode, annotation, diagram);\n return true;\n }\n }\n }\n }\n else if (node.shape.annotations && node.shape.annotations.length) {\n this.clearAnnotations(node, diagram);\n }\n }\n return false;\n };\n BpmnDiagrams.prototype.removeAnnotationObjects = function (parentNode, annotation, diagram) {\n var bpmnShape = parentNode.shape;\n var index = bpmnShape.annotations.indexOf(annotation);\n if (index !== -1) {\n if (!(diagram.diagramActions & DiagramAction.UndoRedo) && !(diagram.diagramActions & DiagramAction.Group)) {\n var entry_1 = {\n type: 'CollectionChanged', changeType: 'Remove', undoObject: cloneObject(annotation),\n redoObject: cloneObject(annotation), category: 'Internal'\n };\n diagram.addHistoryEntry(entry_1);\n }\n bpmnShape.annotations.splice(index, 1);\n var entry = this.annotationObjects[parentNode.id];\n if (entry && entry[annotation.id]) {\n var annotationNode = entry[annotation.id].node;\n var annotationConnector = entry[annotation.id].connector;\n diagram.removeElements(annotationNode);\n diagram.removeElements(annotationConnector);\n var nodeContent = parentNode.wrapper.children[0];\n index = nodeContent.children.indexOf(annotationNode.wrapper);\n nodeContent.children.splice(index, 1);\n index = nodeContent.children.indexOf(annotationConnector.wrapper);\n nodeContent.children.splice(index, 1);\n diagram.removeFromAQuad(annotationNode);\n diagram.removeFromAQuad(annotationConnector);\n delete diagram.nameTable[annotationNode.id];\n delete diagram.nameTable[annotationConnector.id];\n delete entry[annotation.id];\n }\n }\n };\n BpmnDiagrams.prototype.setAnnotationPath = function (parentBounds, wrapper, position, node, length, angle) {\n var rotateAngle = this.getAnnotationPathAngle(position, parentBounds);\n var data = '';\n var pathElement = wrapper.children[0];\n var portElement = wrapper.children[2];\n var textElement = wrapper.children[1];\n pathElement.horizontalAlignment = 'Stretch';\n pathElement.verticalAlignment = 'Stretch';\n textElement.margin.left = textElement.margin.right = 5;\n textElement.margin.top = textElement.margin.bottom = 5;\n var point;\n var segment;\n if (rotateAngle === 0) {\n data = 'M10,20 L0,20 L0,0 L10,0';\n pathElement.width = 10;\n pathElement.horizontalAlignment = 'Left';\n portElement.setOffsetWithRespectToBounds(0, 0.5, 'Fraction');\n textElement.margin.top = textElement.margin.bottom = 10;\n point = parentBounds.middleRight;\n segment = {\n x1: parentBounds.right, y1: parentBounds.top,\n x2: parentBounds.right, y2: parentBounds.bottom\n };\n }\n else if (rotateAngle === 180) {\n data = 'M0,0 L10,0 L10,20 L0,20';\n pathElement.width = 10;\n pathElement.horizontalAlignment = 'Right';\n portElement.setOffsetWithRespectToBounds(1, 0.5, 'Fraction');\n textElement.margin.top = textElement.margin.bottom = 10;\n point = parentBounds.middleLeft;\n segment = {\n x1: parentBounds.left, y1: parentBounds.top,\n x2: parentBounds.left, y2: parentBounds.bottom\n };\n }\n else if (rotateAngle === 90) {\n data = 'M20,10 L20,0 L0,0 L0,10';\n pathElement.height = 10;\n pathElement.verticalAlignment = 'Top';\n portElement.setOffsetWithRespectToBounds(0.5, 0, 'Fraction');\n textElement.margin.left = textElement.margin.right = 10;\n point = parentBounds.bottomCenter;\n segment = {\n x1: parentBounds.right, y1: parentBounds.bottom,\n x2: parentBounds.left, y2: parentBounds.bottom\n };\n }\n else {\n data = 'M0,0 L0,10 L20,10 L20,0';\n pathElement.height = 10;\n pathElement.verticalAlignment = 'Bottom';\n portElement.setOffsetWithRespectToBounds(0.5, 1, 'Fraction');\n textElement.margin.left = textElement.margin.right = 10;\n point = parentBounds.topCenter;\n segment = {\n x1: parentBounds.right, y1: parentBounds.top,\n x2: parentBounds.left, y2: parentBounds.top,\n };\n }\n var center = parentBounds.center;\n var endPoint = Point.transform(position, angle, Math.max(parentBounds.width, parentBounds.height));\n point = getIntersectionPoints(segment, [center, endPoint], false, center);\n pathElement.data = data;\n if (length !== undefined && angle !== undefined) {\n point = Point.transform(point, angle, length);\n wrapper.offsetX = node.offsetX = point.x;\n wrapper.offsetY = node.offsetY = point.y;\n }\n };\n BpmnDiagrams.prototype.isBpmnTextAnnotation = function (activeLabel, diagram) {\n if (this.annotationObjects) {\n var parentNodeId = activeLabel.parentId;\n var annotationId = activeLabel.id;\n var parentNode = diagram.nameTable[parentNodeId];\n if (parentNode && parentNode.shape.type === 'Bpmn' && this.annotationObjects[parentNodeId] &&\n this.annotationObjects[parentNodeId][annotationId]) {\n return parentNode;\n }\n return null;\n }\n return null;\n };\n /** @private */\n BpmnDiagrams.prototype.updateTextAnnotationContent = function (parentNode, activeLabel, text, diagram) {\n var parentNodeId = activeLabel.parentId;\n var annotationId = activeLabel.id;\n if (this.annotationObjects[parentNodeId] && this.annotationObjects[parentNodeId][annotationId]) {\n for (var _i = 0, _a = parentNode.shape.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n if (annotation.id === annotationId) {\n annotation.text = text;\n var wrapper = this.annotationObjects[parentNodeId][annotationId].node.wrapper.children[1];\n wrapper.content = text;\n wrapper.visible = true;\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n }\n }\n }\n };\n BpmnDiagrams.prototype.updateQuad = function (actualObject, diagram) {\n var annotation = actualObject.shape.annotations;\n var annotationNode;\n if (annotation && annotation.length > 0) {\n for (var i = 0; i < annotation.length; i++) {\n annotationNode = this.annotationObjects[actualObject.id][annotation[i].id].node;\n diagram.updateQuad(annotationNode);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateTextAnnotationProp = function (actualObject, oldObject, diagram) {\n if (actualObject.shape.type === 'Bpmn') {\n var annotation = actualObject.shape.annotations;\n if (annotation && annotation.length > 0) {\n for (var i = 0; i < actualObject.wrapper.children[0].children.length; i++) {\n for (var j = 0; j < annotation.length; j++) {\n var annotationId = actualObject.wrapper.children[0].children[i].id.split('_');\n var id = annotationId[annotationId.length - 1];\n if (id === annotation[j].id) {\n var annotationNode = this.annotationObjects[actualObject.id][annotation[j].id].node;\n var connector = this.annotationObjects[actualObject.id][annotation[j].id].connector;\n var direction = getPortDirection(connector.targetPoint, actualObject.wrapper.bounds, actualObject.wrapper.bounds, false);\n var position = connector.sourcePoint;\n position = {\n x: connector.sourcePoint.x + actualObject.offsetX - (oldObject.offsetX),\n y: connector.sourcePoint.y + actualObject.offsetY - (oldObject.offsetY)\n };\n position = Point.transform(position, annotation[j].angle, annotation[j].length);\n actualObject.wrapper.children[0].children[i].offsetX =\n annotationNode.offsetX = position.x;\n actualObject.wrapper.children[0].children[i].offsetY =\n annotationNode.offsetY = position.y;\n diagram.updateQuad(annotationNode);\n }\n }\n }\n }\n }\n };\n // /** @private */\n // public findInteractableObject(obj: ConnectorModel, diagram: Diagram): NodeModel | ConnectorModel {\n // if (obj.targetID) {\n // let targetNode: NodeModel = diagram.nameTable[obj.targetID];\n // if (targetNode.shape.type === 'Bpmn' && (targetNode.shape as BpmnShape).shape === 'TextAnnotation') {\n // return targetNode;\n // }\n // }\n // return obj;\n // }\n /** @private */\n BpmnDiagrams.prototype.getSubprocessChildCount = function (node) {\n var count = 0;\n var shape = node.shape.activity;\n var loopType;\n var subProcess = shape.subProcess;\n loopType = subProcess.loop;\n if (loopType !== undefined && loopType !== 'None') {\n count++;\n }\n if ((subProcess.compensation !== undefined) &&\n subProcess.compensation === true) {\n count++;\n }\n if ((subProcess.collapsed !== undefined) &&\n subProcess.collapsed === true) {\n count++;\n }\n if ((subProcess.adhoc !== undefined) &&\n subProcess.adhoc === true) {\n count++;\n }\n return count;\n };\n /** @private */\n BpmnDiagrams.prototype.getTaskChildCount = function (node) {\n var count = 0;\n var shape = node.shape.activity;\n var task = shape.task;\n var loopType;\n if ((task.compensation !== undefined) &&\n task.compensation === true) {\n count++;\n }\n if ((task.loop !== undefined) &&\n task.loop !== 'None') {\n count++;\n }\n return count;\n };\n /** @private */\n BpmnDiagrams.prototype.setStyle = function (child, node) {\n //set style\n child.style.fill = node.style.fill;\n child.style.strokeColor = node.style.strokeColor;\n child.style.strokeWidth = node.style.strokeWidth;\n child.style.strokeDashArray = node.style.strokeDashArray;\n child.style.opacity = node.style.opacity;\n child.style.gradient = node.style.gradient;\n if ((node.constraints & NodeConstraints.Shadow) !== 0) {\n child.shadow = node.shadow;\n }\n };\n //End code conversion region\n //Update BPMN Shapes on NodePropertyChange\n //Start region\n /** @private */\n BpmnDiagrams.prototype.updateBPMN = function (changedProp, oldObject, actualObject, diagram) {\n var newShape = changedProp.shape || {};\n var elementWrapper = actualObject.wrapper.children[0];\n var actualShape = actualObject.shape.shape;\n var sizeChanged = changedProp.width !== undefined || changedProp.height !== undefined;\n if (newShape.shape === 'Gateway' && newShape.gateway) {\n actualObject.wrapper.children[0] = this.getBPMNGatewayShape(actualObject);\n }\n else if (newShape.shape === 'DataObject' && newShape.dataObject) {\n actualObject.wrapper.children[0] = this.getBPMNDataObjectShape(actualObject);\n }\n else if (newShape.shape === 'Activity' && newShape.activity) {\n actualObject.wrapper.children[0] = this.getBPMNActivityShape(actualObject);\n }\n else if (newShape.shape === 'Event' && newShape.event) {\n var shapeEvent = newShape.event;\n actualObject.wrapper.children[0] = this.getBPMNEventShape(actualObject, shapeEvent);\n }\n else if (newShape.shape === 'Message' || newShape.shape === 'DataSource') {\n actualObject.wrapper.children[0] = this.getBPMNShapes(actualObject);\n //} \n // else if (newShape.shape === 'Group') {\n // actualObject.wrapper.children[0] = this.getBPMNGroup(actualObject, diagram);\n }\n else if (newShape.gateway !== undefined || (actualShape === 'Gateway' && sizeChanged)) {\n this.updateBPMNGateway(actualObject, changedProp);\n }\n else if (newShape.dataObject !== undefined || (actualShape === 'DataObject' && sizeChanged)) {\n this.updateBPMNDataObject(actualObject, changedProp, oldObject);\n }\n else if (newShape.activity !== undefined || (actualShape === 'Activity' && sizeChanged)) {\n this.updateBPMNActivity(actualObject, changedProp, oldObject, diagram);\n }\n else if (newShape.event !== undefined || (actualShape === 'Event' && sizeChanged)) {\n this.updateBPMNEvent(actualObject, changedProp, oldObject);\n }\n if (changedProp.style) {\n updateStyle(changedProp.style, elementWrapper instanceof Container ? (actualObject.shape.shape === 'Activity') ?\n elementWrapper.children[0].children[0] :\n elementWrapper.children[0] : elementWrapper);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNGateway = function (node, changedProp) {\n var bpmnShape = node.shape;\n var elementWrapper = node.wrapper.children[0];\n if (bpmnShape) {\n updateStyle(node.style, elementWrapper.children[0]);\n var bpmnshapeGatewaydata = getBpmnGatewayShapePathData(bpmnShape.gateway.type);\n elementWrapper.children[1].data = bpmnshapeGatewaydata;\n }\n if (changedProp.width !== undefined || changedProp.height !== undefined) {\n this.setSizeForBPMNGateway(node.shape.gateway, elementWrapper, changedProp.width || node.width, changedProp.height || node.height);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNDataObject = function (node, newObject, oldObject) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n if (bpmnShape) {\n var elementWrapperChild1 = elementWrapper.children[1];\n var elementWrapperChild2 = elementWrapper.children[2];\n if (newObject.style !== undefined) {\n updateStyle(newObject.style, elementWrapper.children[0]);\n elementWrapperChild1.style.opacity = node.style.opacity;\n elementWrapperChild2.style.opacity = node.style.opacity;\n }\n if (bpmnShape.dataObject) {\n switch (bpmnShape.dataObject.type) {\n case 'None':\n elementWrapperChild1.visible = false;\n break;\n case 'Input':\n elementWrapperChild1.style.fill = 'white';\n break;\n case 'Output':\n elementWrapperChild1.style.fill = 'black';\n break;\n }\n if (oldObject.shape.dataObject.type === 'None') {\n elementWrapperChild1.visible = true;\n }\n if (newObject.shape.dataObject.collection !== undefined) {\n elementWrapperChild2.visible = bpmnShape.dataObject.collection;\n }\n }\n }\n if (newObject.width !== undefined || newObject.height !== undefined) {\n this.setSizeForBPMNDataObjects(node.shape.dataObject, elementWrapper, newObject.width || node.width, newObject.height || node.height);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getEvent = function (node, oldObject, event, child0, child1, child2) {\n switch (event) {\n case 'Start':\n child1.visible = false;\n child0.style.strokeDashArray = '';\n child2.style.fill = 'white';\n child2.style.strokeColor = 'black';\n child0.style.fill = 'white';\n break;\n case 'NonInterruptingStart':\n child0.style.strokeDashArray = '2 3';\n child2.style.fill = 'white';\n child0.style.fill = 'white';\n child2.style.strokeColor = 'black';\n child1.visible = false;\n break;\n case 'Intermediate':\n child0.style.strokeDashArray = '';\n child0.style.fill = 'white';\n child1.style.strokeDashArray = '';\n child0.style.gradient = null;\n child2.style.fill = 'white';\n child2.style.strokeColor = 'black';\n this.updateEventVisibility(oldObject, child1);\n break;\n case 'NonInterruptingIntermediate':\n child0.style.fill = 'white';\n child0.style.gradient = null;\n child2.style.fill = 'white';\n child2.style.strokeColor = 'black';\n child0.style.strokeDashArray = '2 3';\n child1.style.strokeDashArray = '2 3';\n this.updateEventVisibility(oldObject, child1);\n break;\n case 'ThrowingIntermediate':\n case 'End':\n child0.style.fill = event !== 'End' ? 'white' : 'black';\n child0.style.strokeDashArray = '';\n child1.style.strokeDashArray = '';\n child0.style.gradient = null;\n child2.style.fill = 'black';\n this.updateEventVisibility(oldObject, child1);\n child2.style.strokeColor = node.style.fill;\n break;\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateEventVisibility = function (oldObject, child1) {\n if (oldObject.shape.activity && oldObject.shape.activity.subProcess &&\n oldObject.shape.activity.subProcess.events &&\n oldObject.shape.activity.subProcess.events[0] !== undefined &&\n oldObject.shape.activity.subProcess.events[0].event !== undefined) {\n if (oldObject.shape.activity.subProcess.events[0].event === 'NonInterruptingStart' ||\n oldObject.shape.activity.subProcess.events[0].event === 'Start') {\n child1.visible = true;\n }\n }\n else if (oldObject.shape.event !== undefined) {\n if (oldObject.shape.event.event === 'NonInterruptingStart' ||\n oldObject.shape.event.event === 'Start') {\n child1.visible = true;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNEvent = function (node, newObject, oldObject) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n if (bpmnShape) {\n var elementWrapperChild0 = elementWrapper.children[0];\n var elementWrapperChild1 = elementWrapper.children[1];\n var elementWrapperChild2 = elementWrapper.children[2];\n var event_1;\n var trigger = void 0;\n if (newObject.style !== undefined) {\n updateStyle(node.style, elementWrapper.children[0]);\n if (newObject.style.opacity !== undefined || newObject.style.strokeColor !== undefined) {\n elementWrapperChild1.style.opacity = node.style.opacity;\n elementWrapperChild1.style.strokeColor = node.style.strokeColor;\n }\n }\n event_1 = bpmnShape.event.event;\n trigger = bpmnShape.event.trigger;\n if (event_1 !== undefined) {\n this.getEvent(node, oldObject, event_1, elementWrapperChild0, elementWrapperChild1, elementWrapperChild2);\n }\n if (trigger !== undefined) {\n this.updateBPMNEventTrigger(node, newObject);\n }\n }\n if (newObject.width !== undefined || newObject.height !== undefined) {\n this.setSizeForBPMNEvents(node.shape.event, elementWrapper, newObject.width || node.width, newObject.height || node.height);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNEventTrigger = function (node, newObject) {\n var bpmnShape = node.shape;\n var elementWrapper = node.wrapper.children[0].children[2];\n if (newObject.style &&\n (newObject.style.strokeColor !== undefined || newObject.style.opacity !== undefined)) {\n updateStyle(node.style, elementWrapper);\n }\n var bpmnshapeTriggerdata = getBpmnTriggerShapePathData(bpmnShape.event.trigger);\n elementWrapper.data = bpmnshapeTriggerdata;\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivity = function (node, newObject, oldObject, diagram) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n var size = this.getSize(node, elementWrapper.children[0].children[0]);\n if (bpmnShape) {\n var oldProp = oldObject.shape.activity.activity;\n var actualObjectProp = node.shape.activity.activity;\n if ((oldProp === 'SubProcess' || oldProp === 'Task') && (actualObjectProp === 'SubProcess' || actualObjectProp === 'Task')) {\n diagram.removeElements(node);\n node.wrapper.children[0] = this.getBPMNActivityShape(node);\n }\n else {\n if (actualObjectProp === 'Task' && bpmnShape.activity.task !== undefined) {\n this.updateBPMNActivityTask(node, newObject);\n var subChildCount = this.getTaskChildCount(node);\n var x = void 0;\n var childSpace = subChildCount * 12;\n var area = size.width / 2 - childSpace;\n if (subChildCount === 1) {\n x = area + 8;\n }\n else {\n x = area + (subChildCount - 1) * 8;\n }\n if (bpmnShape.activity.task.loop !== undefined) {\n this.updateBPMNActivityTaskLoop(node, newObject, x, subChildCount, area, 2);\n }\n }\n if (actualObjectProp === 'SubProcess' && bpmnShape.activity.subProcess !== undefined) {\n this.updateBPMNActivitySubProcess(node, newObject, oldObject, diagram);\n }\n }\n this.setSizeForBPMNActivity(node.shape.activity, elementWrapper, newObject.width || size.width, newObject.height || size.height, node);\n }\n if (newObject.width !== undefined || newObject.height !== undefined) {\n this.setSizeForBPMNActivity(node.shape.activity, elementWrapper, newObject.width || size.width, newObject.height || size.height, node);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivityTask = function (node, newObject) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0].children[0];\n var task = bpmnShape.activity.task;\n if (task.type === 'Receive' || task.type === 'Send') {\n elementWrapper.children[1].height = 14;\n }\n else {\n elementWrapper.children[1].height = 20;\n }\n if (task.type !== undefined) {\n var bpmnshapeTaskdata = getBpmnTaskShapePathData(task.type);\n elementWrapper.children[1].data = bpmnshapeTaskdata;\n }\n if (bpmnShape.activity.task.call !== undefined) {\n if (bpmnShape.activity.task.call !== false) {\n elementWrapper.children[0].style.strokeWidth = 4;\n }\n else {\n elementWrapper.children[0].style.strokeWidth = 1;\n }\n }\n if (bpmnShape.activity.task.compensation !== undefined) {\n if (bpmnShape.activity.task.compensation === true) {\n elementWrapper.children[3].visible = true;\n }\n else {\n elementWrapper.children[3].visible = false;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivityTaskLoop = function (node, newObject, x, subChildCount, area, start) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0].children[0];\n var activity = bpmnShape.activity;\n var loop;\n var index = 0;\n var bpmnshapeLoopdata;\n if (activity.subProcess !== undefined) {\n var subProcess = activity.subProcess;\n index = (activity.subProcess.type === 'Transaction') ? 2 : 0;\n loop = subProcess.loop;\n bpmnshapeLoopdata = getBpmnLoopShapePathData(loop);\n elementWrapper.children[2 + index].data = bpmnshapeLoopdata;\n elementWrapper.children[2 + index].visible = (loop === 'None') ? false : true;\n }\n else if (activity.task !== undefined && activity.task.loop !== undefined) {\n bpmnshapeLoopdata = getBpmnLoopShapePathData(activity.task.loop);\n elementWrapper.children[2].data = bpmnshapeLoopdata;\n elementWrapper.children[2].visible = (activity.task.loop === 'None') ? false : true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, start + index);\n };\n /** @private */\n BpmnDiagrams.prototype.updateChildMargin = function (elementWrapper, subChildCount, area, x, start) {\n if (subChildCount === 1) {\n for (var i = start; i < elementWrapper.children.length; i++) {\n if (i !== 2 && elementWrapper.children[i].visible === true) {\n elementWrapper.children[i].margin.left = x;\n x = area + 8;\n }\n }\n }\n else {\n x = area + (subChildCount - 1) * 8;\n for (var i = start; i < elementWrapper.children.length; i++) {\n if (i !== 2 && elementWrapper.children[i].visible === true) {\n elementWrapper.children[i].margin.left = x;\n x += 12 + 8;\n }\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivitySubProcess = function (node, newObject, oldObject, diagram) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n var size = this.getSize(node, elementWrapper.children[0].children[0]);\n var subProcess = bpmnShape.activity.subProcess;\n var subChildCount = this.getSubprocessChildCount(node);\n var x;\n var childSpace = subChildCount * 12;\n var area = size.width / 2 - childSpace;\n if (subChildCount === 1) {\n x = area + 8;\n }\n else {\n x = area + (subChildCount - 1) * 8;\n }\n updateStyle(node.style, elementWrapper.children[0].children[0]);\n if (subProcess.events !== undefined) {\n this.updateBPMNSubProcessEvent(node, newObject, oldObject, diagram);\n }\n if (subProcess.adhoc !== undefined) {\n this.updateBPMNSubProcessAdhoc(node, oldObject, subProcess, x, subChildCount, area);\n }\n if (subProcess.boundary !== undefined) {\n this.updateBPMNSubProcessBoundary(node, subProcess);\n }\n if (subProcess.collapsed !== undefined) {\n this.updateBPMNSubProcessCollapsed(node, oldObject, subProcess, x, subChildCount, area, diagram);\n }\n if (subProcess.compensation !== undefined) {\n this.updateBPMNSubProcessCompensation(node, oldObject, subProcess, x, subChildCount, area);\n }\n if (subProcess.loop !== undefined) {\n this.updateBPMNSubProcessLoop(node, oldObject, subProcess, x, subChildCount, area);\n }\n if (subProcess.transaction !== undefined) {\n this.updateBPMNSubProcessTransaction(node, newObject, oldObject, diagram);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessEvent = function (node, newObject, oldObject, diagram) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n var nodeContent = elementWrapper.children[0];\n var index;\n var j = 0;\n var elementWrapperChildLen = elementWrapper.children[0].children.length;\n var subProcess = bpmnShape.activity.subProcess;\n var events;\n var start = 2;\n for (var _i = 0, _a = Object.keys(subProcess.events); _i < _a.length; _i++) {\n var key = _a[_i];\n var eventIndex = Number(key);\n var eventWrapper = nodeContent.children[eventIndex + start];\n var actualEvent = node.shape.activity.subProcess.events[eventIndex];\n this.updateBPMNSubEvent(node, subProcess.events[eventIndex], actualEvent, eventWrapper, newObject, oldObject, diagram);\n }\n };\n BpmnDiagrams.prototype.updateBPMNSubEvent = function (node, newEvent, actualEvent, eventWrapper, newObject, oldObject, diagram) {\n var elementWrapper = node.wrapper.children[0];\n var bpmnShape = newObject.shape;\n var child0 = eventWrapper.children[0];\n var child1 = eventWrapper.children[1];\n var child2 = eventWrapper.children[2];\n var eventType;\n var trigger;\n if (newObject.style) {\n if (newObject.style.strokeColor !== undefined || newObject.style.opacity !== undefined) {\n elementWrapper.children[0].children[1].style.strokeColor = newObject.style.strokeColor;\n elementWrapper.children[0].children[1].style.opacity = newObject.style.opacity;\n }\n }\n if (bpmnShape.activity.subProcess !== undefined) {\n eventType = newEvent.event;\n trigger = newEvent.trigger;\n }\n if (eventType !== undefined) {\n this.getEvent(newObject, oldObject, eventType, child0, child1, child2);\n }\n if (trigger !== undefined) {\n if (newObject.style) {\n updateStyle(newObject.style, elementWrapper.children[0]);\n }\n var bpmnshapeTriggerdata = getBpmnTriggerShapePathData(trigger);\n eventWrapper.children[2].data = bpmnshapeTriggerdata;\n }\n if (newEvent.height !== undefined || newEvent.width !== undefined) {\n this.getEventSize(newEvent, eventWrapper);\n }\n if (newEvent.id !== undefined) {\n eventWrapper.id = newEvent.id;\n }\n if (newEvent.margin !== undefined) {\n eventWrapper.margin = newEvent.margin;\n }\n if (newEvent.horizontalAlignment !== undefined) {\n eventWrapper.horizontalAlignment = newEvent.horizontalAlignment;\n }\n if (newEvent.verticalAlignment !== undefined) {\n eventWrapper.verticalAlignment = newEvent.verticalAlignment;\n }\n if (newEvent.offset !== undefined) {\n eventWrapper.setOffsetWithRespectToBounds(actualEvent.offset.x, actualEvent.offset.y, 'Fraction');\n eventWrapper.relativeMode = 'Point';\n }\n if (newEvent.annotations !== undefined) {\n var annotations = void 0;\n var annotation = elementWrapper.children[0].children[2];\n if (eventWrapper.children[3] && eventWrapper.children.length > 3) {\n annotations = eventWrapper.children[3];\n diagram.updateAnnotation(newEvent.annotations[0], annotations, annotation);\n }\n }\n if (newEvent.ports !== undefined) {\n var ports = void 0;\n var port = elementWrapper.children[0].children[2];\n if (eventWrapper.children[4] && eventWrapper.children.length > 4) {\n ports = eventWrapper.children[4];\n diagram.updatePort(newEvent.ports[0], ports, port);\n }\n }\n if (newEvent.visible !== undefined) {\n this.updateDiagramContainerVisibility(eventWrapper, newEvent.visible);\n }\n };\n BpmnDiagrams.prototype.updateBPMNSubProcessTransaction = function (node, newObject, oldObject, diagram) {\n var transaction = newObject.shape.activity.subProcess.transaction;\n var eventContainer = node.wrapper.children[0].children[0].children[2];\n var actualEvent;\n if (transaction.success !== undefined) {\n actualEvent = node.shape.activity.subProcess.transaction.success;\n this.updateBPMNSubEvent(node, transaction.success, actualEvent, eventContainer.children[0], newObject, oldObject, diagram);\n }\n if (transaction.cancel !== undefined) {\n actualEvent = node.shape.activity.subProcess.transaction.cancel;\n this.updateBPMNSubEvent(node, transaction.cancel, actualEvent, eventContainer.children[1], newObject, oldObject, diagram);\n }\n if (transaction.failure !== undefined) {\n actualEvent = node.shape.activity.subProcess.transaction.failure;\n this.updateBPMNSubEvent(node, transaction.failure, actualEvent, eventContainer.children[2], newObject, oldObject, diagram);\n }\n for (var _i = 0, _a = node.outEdges; _i < _a.length; _i++) {\n var edge = _a[_i];\n var connector = diagram.nameTable[edge];\n switch (connector.sourcePortID) {\n case 'success':\n if (transaction.success && transaction.success.visible !== undefined) {\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: 'success' });\n }\n break;\n case 'cancel':\n if (transaction.cancel && transaction.cancel.visible !== undefined) {\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: 'cancel' });\n }\n break;\n case 'failure':\n if (transaction.failure && transaction.failure.visible !== undefined) {\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: 'failure' });\n }\n break;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getEventSize = function (events, wrapperChild) {\n if (events.height !== undefined) {\n wrapperChild.height = events.height;\n wrapperChild.children[0].height = events.height;\n wrapperChild.children[1].height = events.height * 0.85;\n wrapperChild.children[2].height = events.height * 0.54;\n }\n if (events.width !== undefined) {\n wrapperChild.width = events.width;\n wrapperChild.children[0].width = events.width;\n wrapperChild.children[1].width = events.width * 0.85;\n wrapperChild.children[2].width = events.width * 0.54;\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessAdhoc = function (node, oldObject, subProcess, x, subChildCount, area) {\n var shape = node.shape;\n var elementWrapper = node.wrapper.children[0].children[0];\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 2 : 0;\n if (subProcess.adhoc === false) {\n elementWrapper.children[3 + index].visible = false;\n }\n else {\n elementWrapper.children[3 + index].visible = true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, 3 + index);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessBoundary = function (node, subProcess) {\n var shape = node.shape;\n var elementWrapper = (node.wrapper.children[0].children[0].children[0]);\n if (subProcess.boundary === 'Default') {\n elementWrapper.style.strokeWidth = 1;\n elementWrapper.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Call') {\n elementWrapper.style.strokeWidth = 4;\n elementWrapper.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Event') {\n elementWrapper.style.strokeWidth = 1;\n elementWrapper.style.strokeDashArray = '2 2';\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateElementVisibility = function (node, visible, diagram) {\n if (node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length > 0) {\n var processes = node.shape.activity.subProcess.processes;\n for (var j = processes.length - 1; j >= 0; j--) {\n var currentNode = diagram.nameTable[processes[j]];\n currentNode.visible = visible;\n diagram.updateElementVisibility(currentNode.wrapper, currentNode, visible);\n if (visible) {\n if (currentNode.shape.shape === 'Event') {\n this.setEventVisibility(currentNode, currentNode.wrapper.children[0].children);\n }\n if (currentNode.shape.activity.activity === 'SubProcess') {\n this.setSubProcessVisibility(currentNode);\n }\n }\n var connectors = currentNode.inEdges.concat(currentNode.outEdges);\n for (var i = connectors.length - 1; i >= 0; i--) {\n var connector = diagram.nameTable[connectors[i]];\n connector.visible = visible;\n diagram.updateElementVisibility(connector.wrapper, connector, visible);\n }\n }\n }\n if (visible) {\n if (node.shape.shape === 'Event') {\n this.setEventVisibility(node, node.wrapper.children[0].children);\n }\n if (node.shape.activity.activity === 'SubProcess') {\n this.setSubProcessVisibility(node);\n }\n if (node.shape.activity.activity === 'Task' &&\n node.shape.shape === 'Activity' && node.shape.activity.subProcess.loop === 'None') {\n node.wrapper.children[0].children[0].children[3].visible = false;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessCollapsed = function (node, oldObject, subProcess, x, subChildCount, area, diagram) {\n var eventLength = node.shape.activity.subProcess.events.length;\n var elementWrapper = node.wrapper.children[0].children[0];\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 3 : 1;\n if (subProcess.collapsed === false) {\n this.updateElementVisibility(node, true, diagram);\n elementWrapper.children[index + eventLength].visible = false;\n }\n else {\n this.updateElementVisibility(node, false, diagram);\n elementWrapper.children[index + eventLength].visible = true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, 3 + eventLength);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessCompensation = function (node, oldObject, subProcess, x, subChildCount, area) {\n var elementWrapper = node.wrapper.children[0].children[0];\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 2 : 0;\n if (subProcess.compensation === false) {\n elementWrapper.children[4 + index].visible = false;\n }\n else {\n elementWrapper.children[4 + index].visible = true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, 4 + index);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessLoop = function (node, oldObject, subProcess, x, subChildCount, area) {\n this.updateBPMNActivityTaskLoop(node, node, x, subChildCount, area, 1);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNConnector = function (actualObject, oldObject, connection, diagram) {\n var flowType = connection.shape;\n if (flowType.sequence !== undefined) {\n actualObject = this.getSequence(actualObject, oldObject, connection, diagram);\n }\n if (flowType.association !== undefined) {\n actualObject = this.getAssociation(actualObject, oldObject, connection, diagram);\n }\n if (flowType.message !== undefined) {\n actualObject = this.getMessage(actualObject, oldObject, connection, diagram);\n }\n return actualObject;\n };\n /** @private */\n BpmnDiagrams.prototype.getSequence = function (actualObject, oldObject, connection, diagram) {\n if ((connection.shape.sequence) === 'Normal') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight',\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } }\n });\n actualObject.wrapper.children[3].visible = false;\n }\n if ((connection.shape.sequence) === 'Default') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight',\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'None' }\n });\n var segment = new PathElement();\n var pathseq = new PathElement();\n var pathseqData = void 0;\n segment = actualObject.getSegmentElement(actualObject, segment);\n var anglePoints = actualObject.intermediatePoints;\n for (var j = 0; j < anglePoints.length - 1; j++) {\n length = length + actualObject.distance(anglePoints[j], anglePoints[j + 1]);\n pathseqData = actualObject.findPath(anglePoints[j], anglePoints[j + 1]);\n }\n actualObject.wrapper.children[3].data = pathseqData[0];\n actualObject.wrapper.children[3].id = actualObject.id + '_' + (connection.shape.sequence);\n actualObject.wrapper.children[3].offsetX = pathseqData[1].x;\n actualObject.wrapper.children[3].offsetY = pathseqData[1].y;\n actualObject.wrapper.children[3].rotateAngle = 45;\n actualObject.wrapper.children[3].transform = Transform.Self;\n }\n if ((connection.shape.sequence) === 'Conditional') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight',\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'Diamond', width: 20, height: 10, style: { fill: 'white' } }\n });\n actualObject.wrapper.children[3].visible = false;\n }\n return actualObject;\n };\n /** @private */\n BpmnDiagrams.prototype.getAssociation = function (actualObject, oldObject, connection, diagram) {\n if ((connection.shape.association) === 'Default') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight', style: { strokeDashArray: 'None' },\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'None' }\n });\n }\n if ((connection.shape.association) === 'Directional') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight', style: { strokeDashArray: '2 2' },\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'None' }\n });\n }\n if ((connection.shape.association) === 'BiDirectional') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight', style: { strokeDashArray: '2 2' },\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'Arrow', width: 5, height: 10, style: { fill: 'white' } }\n });\n }\n return actualObject;\n };\n /** @private */\n BpmnDiagrams.prototype.getMessage = function (actualObject, oldObject, connection, diagram) {\n var segmentOffset = 0.5;\n var angle;\n var pt;\n if ((oldObject.shape.message) === 'Default') {\n if ((connection.shape.message) !== undefined) {\n if (((connection.shape.message) === 'InitiatingMessage') ||\n ((connection.shape.message) === 'NonInitiatingMessage')) {\n var segment = new PathElement();\n segment = actualObject.getSegmentElement(actualObject, segment);\n var anglePoints = actualObject.intermediatePoints;\n for (var j = 0; j < anglePoints.length - 1; j++) {\n length = length + actualObject.distance(anglePoints[j], anglePoints[j + 1]);\n var offLength = length * segmentOffset;\n if (length >= offLength) {\n angle = findAngle(anglePoints[j], anglePoints[j + 1]);\n pt = Point.transform(anglePoints[j], angle, offLength);\n }\n }\n }\n actualObject.wrapper.children[3].id = actualObject.id + '_' + (connection.shape.message);\n actualObject.wrapper.children[3].width = 25;\n actualObject.wrapper.children[3].height = 15;\n actualObject.wrapper.children[3].data = 'M0,0 L19.8,12.8 L40,0 L0, 0 L0, 25.5 L40, 25.5 L 40, 0';\n actualObject.wrapper.children[3].horizontalAlignment = 'Center';\n actualObject.wrapper.children[3].verticalAlignment = 'Center';\n actualObject.wrapper.children[3].transform = Transform.Self;\n actualObject.wrapper.children[3].style.fill = (connection.shape.message) === 'NonInitiatingMessage' ?\n 'lightgrey' : 'white';\n actualObject.wrapper.children[3].offsetX = pt.x;\n actualObject.wrapper.children[3].offsetY = pt.y;\n }\n }\n else if ((oldObject.shape.message) !== 'NonInitiatingMessage' ||\n (oldObject.shape.message) !== 'InitiatingMessage') {\n if ((connection.shape.message) !== 'Default') {\n actualObject.wrapper.children[3].style.fill = (connection.shape.message) === 'NonInitiatingMessage' ?\n 'lightgrey' : 'white';\n }\n else {\n actualObject.wrapper.children[3].visible = false;\n }\n }\n return actualObject;\n };\n //End update Region\n //size updation\n BpmnDiagrams.prototype.setSizeForBPMNEvents = function (event, wrapper, width, height) {\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n //child node 1 - event node\n var eventNode = wrapper.children[1];\n eventNode.width = width * 0.85;\n eventNode.height = height * 0.85;\n var triggerNode = wrapper.children[2];\n if (event.trigger === 'Message') {\n triggerNode.width = width * 0.54;\n triggerNode.height = height * 0.4;\n }\n else {\n triggerNode.width = width * 0.5;\n triggerNode.height = height * 0.5;\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateAnnotationDrag = function (node, diagram, tx, ty) {\n var checkAnnotation = node.id.split('_');\n if (checkAnnotation[1] === 'textannotation') {\n var parentNode = void 0;\n for (var j = 0; j < node.inEdges.length; j++) {\n var connector = diagram.nameTable[node.inEdges[j]];\n if (connector) {\n parentNode = diagram.nameTable[connector.sourceID];\n }\n var start = { x: node.offsetX + tx, y: node.offsetY + ty };\n var end = connector.sourcePoint;\n var length_1 = Point.findLength(start, end);\n var angle = Point.findAngle(end, start);\n if (parentNode.shape.annotations) {\n for (var x = 0; x < (parentNode.shape.annotations).length; x++) {\n if ((parentNode.shape.annotations)[x].id === checkAnnotation[checkAnnotation.length - 1]) {\n (parentNode.shape.annotations[x]).length = length_1;\n (parentNode.shape.annotations[x]).angle = angle;\n this.setAnnotationPath(parentNode.wrapper.bounds, node.wrapper, start, node);\n return false;\n }\n }\n }\n }\n }\n if (node.processId) {\n this.drag(node, tx, ty, diagram);\n return true;\n }\n return false;\n };\n BpmnDiagrams.prototype.getAnnotationPathAngle = function (point, bounds) {\n var direction = getPortDirection(point, bounds, bounds, false);\n var rotateAngle = 0;\n switch (direction) {\n case 'Right':\n rotateAngle = 0;\n break;\n case 'Left':\n rotateAngle = 180;\n break;\n case 'Bottom':\n rotateAngle = 90;\n break;\n case 'Top':\n rotateAngle = 270;\n break;\n }\n return rotateAngle;\n };\n BpmnDiagrams.prototype.setSizeForBPMNGateway = function (event, wrapper, width, height) {\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n wrapper.children[1].width = width * 0.45;\n wrapper.children[1].height = height * 0.45;\n };\n BpmnDiagrams.prototype.setSizeForBPMNDataObjects = function (event, wrapper, width, height) {\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n };\n BpmnDiagrams.prototype.setSizeForBPMNActivity = function (activity, wrapper, width, height, node) {\n //child node 1 - event node\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n wrapper.children[0].children[0].width = width;\n wrapper.children[0].children[0].height = height;\n if (activity.subProcess.type === 'Transaction') {\n wrapper.children[0].children[1].width = Math.max(width - 6, 1);\n wrapper.children[0].children[1].height = Math.max(height - 6, 1);\n wrapper.children[0].children[2].width = width;\n wrapper.children[0].children[2].height = height;\n }\n var taskNode = new DiagramElement();\n var x;\n var size = this.getSize(node, taskNode);\n var childCount;\n var iconSpace = 4;\n if (activity.activity === 'Task') {\n childCount = this.getTaskChildCount(node);\n }\n else {\n childCount = this.getSubprocessChildCount(node);\n }\n var childSpace = childCount * 12;\n var area = (width || size.width) / 2;\n if (childCount === 1) {\n x = area - 6;\n }\n else {\n x = area - (childSpace / 2) - ((childCount - 1) * iconSpace) / 2;\n }\n for (var i = 0; i < wrapper.children[0].children.length; i++) {\n if (wrapper.children[0].children[i].visible &&\n (wrapper.children[0].children[i].id.indexOf('_loop') > -1 ||\n wrapper.children[0].children[i].id.indexOf('_0_compensation') > -1 ||\n wrapper.children[0].children[i].id.indexOf('_0_adhoc') > -1 ||\n wrapper.children[0].children[i].id.indexOf('_0_collapsed') > -1)) {\n wrapper.children[0].children[i].margin.left = x;\n x += wrapper.children[0].children[i].actualSize.width + iconSpace;\n }\n }\n };\n BpmnDiagrams.prototype.updateDiagramContainerVisibility = function (element, visible) {\n if (element instanceof Container) {\n for (var i = 0; i < element.children.length; i++) {\n this.updateDiagramContainerVisibility(element.children[i], visible);\n }\n }\n element.visible = visible;\n };\n /**\n * To destroy the BpmnDiagrams module\n * @return {void}\n * @private\n */\n BpmnDiagrams.prototype.destroy = function () {\n /**\n * Destroys the BpmnDiagrams module\n */\n };\n /**\n * Get module name.\n */\n BpmnDiagrams.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Bpmn';\n };\n return BpmnDiagrams;\n}());\nexport { BpmnDiagrams };\nexport function getBpmnShapePathData(shape) {\n return bpmnShapes[shape.toString()];\n}\nexport function getBpmnTriggerShapePathData(shape) {\n return bpmnTriggerShapes[shape.toString()];\n}\nexport function getBpmnGatewayShapePathData(shape) {\n return bpmnGatewayShapes[shape.toString()];\n}\nexport function getBpmnTaskShapePathData(shape) {\n return bpmnTaskShapes[shape.toString()];\n}\nexport function getBpmnLoopShapePathData(shape) {\n return bpmnLoopShapes[shape.toString()];\n}\nvar bpmnShapes = {\n 'Event': 'M80.5,12.5 C80.5,19.127417 62.59139,24.5 40.5,24.5 C18.40861,24.5 0.5,19.127417 0.5,12.5' +\n 'C0.5,5.872583 18.40861,0.5 40.5,0.5 C62.59139,0.5 80.5,5.872583 80.5,12.5 z',\n 'Message': 'M0,0L19.8,12.8L40,0L0,0L0,25.5L40,25.5L40,0z',\n 'DataSource': 'M 0 10.6 c 0 5.9 16.8 10.6 37.5 10.6 S 75 16.4 75 10.6 v 0 v 68.9 v -0.1 C 75 85.3 58.2 90 37.5 90 ' +\n 'S 0 85.3 0 79.4 l 0 0.1 V 56 V 40.6 L 0 10.6 C 0 4.7 16.8 0 37.5 0 S 75 4.7 75 10.6 S 58.2 21.2 37.5 21.2' +\n 'S 0 16.5 0 10.6 l 0 6.7 v -0.2 c 0 5.9 16.8 10.6 37.5 10.6 S 75 22.9 75 17.1 v 6.8 v -0.1 ' +\n 'c 0 5.9 -16.8 10.6 -37.5 10.6 S 0 29.6 0 23.8',\n 'SubProcess': 'M100,100 h200 a20,20 0 0 1 20,20 v200 a20,20 0 0 1 -20,20 h-200 ' +\n 'a20,20 0 0 1 -20,-20 v-200 a20,20 0 0 1 20,-20 z',\n 'collapsedShape': 'M 8.13789 15 H 0 V 0 H 8.13789 V 15 Z M 0.625991 13.75 H 7.51189 V 1.25 H 0.625991 V 13.75 Z ' +\n 'M 2.18095 7.03125 L 5.95631 7.03125 L 5.95631 7.46875 L 2.18095 7.46875 Z M 3.8342 3.73 ' +\n 'L 4.30369 3.73 L 4.30369 11.2687 L 3.8342 11.2687 Z',\n};\nvar bpmnTriggerShapes = {\n // 'None': '',\n 'Message': 'M0,0 L19.8,12.8 L40,0 L0, 0 L0, 25.5 L40, 25.5 L 40, 0',\n 'Timer': 'M40,20c0,8.654-5.496,16.024-13.189,18.81' +\n 'C24.685,39.58,22.392,40,20,40C8.954,40,0,31.046,0,20S8.954,0,20,0S40,8.954,40,20z M20,0 L20,2.583 L20,5.283 M10.027,2.681' +\n 'L11.659,5.507 L12.669,7.257 M2.731,9.989 L6.014,11.885 L7.307,12.631 M0.067,19.967 L2.667,19.967 L5.35,19.967' +\n 'M2.748,29.939 L5.731,28.217 L7.323,27.298 M10.056,37.236 L11.292,35.095 L12.698,32.66 M20.033,39.9 L20.033,36.417 L20.033,34.617' +\n 'M30.006,37.219 L28.893,35.292 L27.364,32.643 M37.302,29.911 L34.608,28.355 L32.727,27.269' +\n 'M39.967,19.933 L37.417,19.933 L34.683,19.933 M37.286,9.961 L34.583,11.521 L32.71,12.602 M29.977,2.664 L28.653,4.957 L27.336,' +\n '7.24 M22.104,8.5 L19.688,20 L24.75,20 L31.604,20 L24.75,20 L19.688,20z',\n 'Error': 'M 23.77 18.527 l -7.107 27.396 l 8.507 -17.247 L 36.94 40.073 l 6.394 -25.997 l -8.497 15.754 L 23.77 18.527 Z',\n 'Escalation': 'M 30.001 8.098 L 11.842 43.543 l 18.159 -18.882 l 18.162 18.882 L 30.001 8.098 Z ',\n 'Cancel': 'M 3.5 16 L 0 12.6 L 4.6 8 L 0 3.5 L 3.4 0 L 8 4.6 l 4.5 -4.5 L 16 3.5 L 11.5 8 l 4.5 4.5 l -3.4 3.5 L 8 11.4 L 3.5 16 Z',\n 'Compensation': 'M 25.7086 0 L 0 25 L 25.7086 50 V 26.3752 L 50 50 V 0 L 25.7086 23.6248 V 0 Z ',\n 'Conditional': 'M 0 0 H 16 V 16 H 0 z M 1.14 3.2 H 14.85 M 1.14 6.4 H 14.85 M 1.14 9.6 H 14.85 M 1.14 12.8 H 14.85',\n 'Link': 'M 32.014 19.258 v 5.992 H 9.373 v 9.504 h 22.641 v 5.988 L 50.622 30 L 32.014 19.258 Z',\n 'Signal': 'M 50 50 H 0 L 25.0025 0 L 50 50 Z',\n 'Terminate': 'M 25 50 C 11.21 50 0 38.79 0 25 C 0 11.21 11.21 0 25 0 C 38.78 0 50 11.21 50 25 C 50 38.79 38.78 50 25 50',\n 'Multiple': 'M 17.784 48.889 H 42.21 l 7.548 -23.23 L 29.997 11.303 L 10.236 25.658 L 17.784 48.889 Z',\n 'Parallel': 'M 27.276 49.986 h 5.58 v -17.15 h 17.146 V 27.17 h -17.15 l 0.004 -17.15 h -5.58 l -0.004 17.15 ' +\n 'H 9.994 v 5.666 h 17.278 L 27.276 49.986 Z',\n};\nvar bpmnGatewayShapes = {\n 'None': '',\n //exclusive\n 'Exclusive': 'M 11.196 29.009 l 6.36 -9.712 l -5.764 -8.899 h 4.393 l 3.732 5.979 l 3.656 -5.979 h 4.354 l -5.789 9.039' +\n 'l 6.36 9.572 h -4.532 l -4.126 -6.437 l -4.139 6.437 H 11.196 Z',\n //inclusive\n 'Inclusive': 'M 20.323 31.333 c -6.625 0 -12.015 -5.39 -12.015 -12.015 s 5.39 -12.015 12.015 -12.015 ' +\n 's 12.016 5.39 12.016 12.015 S 26.948 31.333 20.323 31.333 Z M 20.323 9.303 c -5.522 0 -10.015 4.493 -10.015 10.015 ' +\n 's 4.492 10.015 10.015 10.015 s 10.016 -4.493 10.016 -10.015 S 25.846 9.303 20.323 9.303 Z',\n //parallel\n 'Parallel': 'M 18.394 29.542 v -8.833 H 9.626 v -3.691 h 8.768 V 8.251 h 3.734 v 8.767 h 8.768 v 3.691 h -8.768 v 8.833 H 18.394 Z',\n //complex\n 'Complex': 'M29.198,19.063L23.089,19.063L27.794,14.358L26.38,12.944L21.223,18.101L21.223,10.443L19.223,10.443L19.223,17.976' +\n 'L14.022,12.776L12.608,14.19L17.48,19.063L10.365,19.063L10.365,21.063L18.261,21.063L12.392,26.932L13.806,28.346' +\n 'L19.223,22.929L19.223,30.225L21.223,30.225L21.223,22.805L25.925,27.507L27.339,26.093L22.309,21.063L29.198,21.063z',\n //eventbased\n 'EventBased': 'M 20.322 29.874 c -5.444 0 -9.873 -4.43 -9.873 -9.874 s 4.429 -9.874 9.873 -9.874 s 9.874 4.429 9.874 9.874 ' +\n 'S 25.767 29.874 20.322 29.874 Z M 20.322 32.891 c -7.107 0 -12.89 -5.783 -12.89 -12.891 c 0 -7.107 5.782 -12.89 12.89 -12.89 ' +\n 'c 7.108 0 12.891 5.783 12.891 12.89 C 33.213 27.108 27.431 32.891 20.322 32.891 Z M 24.191 25.386 ' +\n 'h -7.984 l -2.469 -7.595 l 6.461 -4.693 l 6.461 4.693 L 24.191 25.386 Z',\n //exclusive event based\n 'ExclusiveEventBased': 'M 30 15 C 30 23.28 23.28 30 15 30 S 0 23.28 0 15 S 6.72 0 15 0 S 30 6.72 30 15 z M 15 5 ' +\n 'L 5 12.5 L 8 22.5 H 22 L 25 12.5 z',\n //parallel event based\n 'ParallelEventBased': 'M 35 17.5 C 35 27.16 27.16 35 17.5 35 S 0 27.16 0 17.5 S 7.84 0 17.5 0 S 35 7.84 35 17.5 z M 14.58 5.83 ' +\n 'V 14.58 H 5.83 V 20.42 H 14.58 V 29.17 H 20.42 V 20.42 H 29.17 V 14.58 H 20.42 V 5.83 z',\n};\nvar bpmnTaskShapes = {\n 'None': '',\n 'Service': 'M 32.699 20.187 v -4.005 h -3.32 c -0.125 -0.43 -0.292 -0.83 -0.488 -1.21 l 2.373 -2.375 ' +\n 'l -2.833 -2.83 l -2.333 2.333 c -0.44 -0.253 -0.9 -0.448 -1.387 -0.595 v -3.32 h -4.003 v 3.32 c -0.46 0.137 -0.89' +\n '0.322 -1.3 0.537 l -2.285 -2.275 l -2.833 2.83 l 2.285 2.278 c -0.235 0.42 -0.41 0.847 -0.547 1.307 h -3.33 v 4.005 h 3.33 ' +\n 'c 0.148 0.488 0.343 0.955 0.588 1.395 l -2.325 2.325 l 2.822 2.832 l 2.373 -2.382 c 0.392 0.205 0.792 0.37 1.212 0.497 v 3.33 ' +\n 'h 4.003 v -3.33 c 0.46 -0.138 0.89 -0.323 1.3 -0.547 l 2.43 2.432 l 2.822 -2.832 l -2.42 -2.422 c 0.222 -0.41 0.4 -0.85 0.535' +\n '-1.297 H 32.699 Z M 22.699 21.987 c -2.1 0 -3.803 -1.703 -3.803 -3.803 c 0 -2.1 1.703 -3.803 3.803 -3.803 c 2.1 0 3.803 ' +\n '1.703 3.803 3.803 C 26.502 20.285 24.8 21.987 22.699 21.987 Z',\n 'Receive': 'M 12.217 12.134 v 13.334 h 20 V 12.134 H 12.217 Z M 30.44 13.007 l -8.223 5.35 l -8.223 -5.35 H 30.44 Z M 13.09' +\n ' 24.594 V 13.459 l 9.127 5.94 l 9.127 -5.94 v 11.135 H 13.09 Z',\n 'Send': 'M 45.7256 3.16055 L 25 23.4017 L 4.27442 3.16055 H 45.7256 Z M 47.8963 46.8413 H 2.10375 V 4.80813' +\n ' L 25 27.1709 L 47.8963 4.80813 V 46.8413 Z',\n 'InstantiatingReceive': 'M 16.306 17.39 v 8.79 h 13.198 v -8.79 H 16.306 Z M 28.375 17.946 l -5.47 3.558 l -5.47 -3.558 ' +\n 'H 28.375 Z M 28.948 25.625 H 16.861 v -7.389 l 6.043 3.931 l 6.043 -3.931 V 25.625 Z M 22.905 11.785' +\n 'c -5.514 0 -9.999 4.486 -9.999 10 c 0 5.514 4.485 10 9.999 10 s 9.999 -4.486 9.999 -10 ' +\n 'C 32.904 16.272 28.419 11.785 22.905 11.785 Z M 22.905 31.239 c -5.212 0 -9.453 -4.241 -9.453 -9.454' +\n 'c 0 -5.212 4.241 -9.453 9.453 -9.453 s 9.452 4.241 9.452 9.453 C 32.357 26.998 28.117 31.239 22.905 31.239 Z',\n 'Manual': 'M 13.183 15.325 h 2.911 c 0.105 0 0.207 -0.043 0.281 -0.117 c 0.078 -0.074 0.117 -0.176 0.117 -0.281' +\n 'c 0 -0.753 0.718 -1.362 1.596 -1.362 h 2.579 c -0.117 0.227 -0.191 0.48 -0.195 0.757 c 0 0.433 0.168 0.851 0.46 1.144 ' +\n 'c 0.008 0.004 0.015 0.011 0.019 0.015 c -0.289 0.285 -0.475 0.691 -0.479 1.148 c 0 0.433 0.168 0.846 0.46 1.139 ' +\n 'c 0.011 0.012 0.023 0.02 0.035 0.032 c -0.301 0.281 -0.491 0.694 -0.495 1.155 c 0 0.432 0.168 0.847 0.46 1.143' +\n 'c 0.265 0.266 0.612 0.414 0.975 0.414 h 0.839 c 0.027 0.004 0.051 0.012 0.074 0.012 h 8.443 ' +\n 'c 0.352 0 0.636 0.344 0.636 0.761 c 0 0.414 -0.285 0.753 -0.636 0.753 h -6.687 c -0.019 0 -0.035 -0.008 -0.051 -0.008' +\n 'h -2.27 c -0.121 -0.835 -0.667 -1.187 -1.795 -1.187 h -2.158 c -0.223 0 -0.402 0.18 -0.402 0.403' +\n 'c 0 0.219 0.179 0.398 0.402 0.398 h 2.158 c 0.972 0 1.019 0.203 1.019 0.784 c 0 0.219 0.179 0.399 0.402 0.399 ' +\n 'c 0.008 0 0.016 -0.004 0.027 -0.004 c 0.028 0.004 0.055 0.016 0.082 0.016 h 2.56 c 0.34 0.015 0.616 0.343 0.616 0.752' +\n 'c 0 0.418 -0.285 0.757 -0.636 0.761 h -0.004 h -6.442 c -0.878 0 -1.595 -0.639 -1.595 -1.427 v -0.683 ' +\n 'c 0 -0.109 -0.043 -0.211 -0.114 -0.285 c -0.078 -0.074 -0.179 -0.117 -0.285 -0.117 h -0.004 l -2.989 0.027 ' +\n 'c -0.223 0 -0.398 0.184 -0.398 0.402 c 0 0.219 0.179 0.395 0.398 0.395 h 0.004 l 2.591 -0.02 v 0.282 ' +\n 'c 0 1.229 1.073 2.223 2.391 2.223 h 3.895 c 0.004 0 0.007 0.004 0.011 0.004 h 2.536 c 0.792 0 1.436 -0.698 1.436 -1.561 ' +\n 'c 0 -0.273 -0.07 -0.53 -0.188 -0.752 h 5.49 c 0.792 0 1.436 -0.695 1.436 -1.553 c 0 -0.858 -0.644 -1.557 -1.436 -1.557' +\n 'h -3.566 c 0.121 -0.226 0.199 -0.487 0.199 -0.768 c 0 -0.468 -0.195 -0.882 -0.495 -1.167' +\n 'c 0.301 -0.285 0.495 -0.698 0.495 -1.163 c 0 -0.456 -0.191 -0.866 -0.483 -1.152 c 0.293 -0.285 0.483 -0.694 0.483 -1.151' +\n 'c 0 -0.858 -0.647 -1.557 -1.439 -1.557 h -8.373 c -1.167 0 -2.142 0.757 -2.352 1.76 l -2.548 -0.004 ' +\n 'c -0.219 0 -0.399 0.18 -0.399 0.403 C 12.784 15.145 12.964 15.325 13.183 15.325 L 13.183 15.325 Z M 21.907 19.707 ' +\n 'c -0.191 0 -0.328 -0.094 -0.41 -0.176 c -0.144 -0.145 -0.226 -0.355 -0.226 -0.577 c 0.003 -0.418 0.289 -0.753 0.643 -0.753 ' +\n 'h 4.468 c 0.008 0 0.015 -0.004 0.027 -0.008 h 0.051 c 0.351 0 0.636 0.344 0.636 0.761 c 0 0.414 -0.286 0.753 -0.636 0.753 ' +\n 'H 21.907 Z M 27.097 16.629 c 0 0.414 -0.286 0.753 -0.64 0.753 h -4.464 c -0.004 0 -0.004 0 -0.004 0 h -0.082' +\n 'c -0.191 0 -0.328 -0.098 -0.414 -0.18 c -0.14 -0.145 -0.222 -0.352 -0.222 -0.573 c 0 -0.413 0.285 -0.749 0.631 -0.753' +\n 'h 3.434 c 0 0 0 0 0.004 0 h 1.116 c 0.008 0 0.012 -0.004 0.02 -0.004 C 26.819 15.887 27.097 16.215 27.097 16.629' +\n 'L 27.097 16.629 Z M 27.097 14.322 c 0 0.41 -0.278 0.737 -0.62 0.749 c -0.008 0 -0.012 0 -0.016 0 h -3.637 ' +\n 'c -0.008 0 -0.015 0.004 -0.023 0.004 h -0.886 c -0.004 0 -0.008 0 -0.012 0 c -0.187 0 -0.324 -0.094 -0.406 -0.176' +\n 'c -0.144 -0.144 -0.226 -0.355 -0.226 -0.577 c 0.003 -0.414 0.293 -0.753 0.643 -0.753 h 4.468 ' +\n 'c 0.008 0 0.015 -0.004 0.027 -0.004 h 0.051 C 26.811 13.565 27.097 13.905 27.097 14.322 L 27.097 14.322 Z M 27.097 14.322',\n 'BusinessRule': 'M 32.844 13.245 h -0.089 v 0 H 13.764 v -0.015 h -1.009 v 16.989 h 0.095 v 0.011 h 19.716 v -0.011 h 0.278 ' +\n 'V 13.245 Z M 31.844 14.229 v 4.185 h -18.08 v -4.185 H 31.844 Z M 18.168 25.306 v 3.938 h -4.404 v -3.938 H 18.168 Z ' +\n 'M 13.764 24.322 v -4.923 h 4.404 v 4.923 H 13.764 Z M 19.177 25.306 h 12.667 v 3.938 H 19.177 V 25.306 Z M 19.177 24.322' +\n 'v -4.923 h 12.667 v 4.923 H 19.177 Z',\n 'User': 'M 21.762 21.935 c 2.584 0 4.687 -2.561 4.687 -5.703 c 0 -3.147 -2.103 -5.703 -4.687 -5.703 c -1.279 0 -2.475 0.61' +\n '-3.363 1.721 c -0.855 1.071 -1.327 2.484 -1.324 3.983 C 17.075 19.374 19.178 21.935 21.762 21.935 L 21.762 21.935 Z' +\n 'M 21.762 11.779 c 1.894 0 3.436 1.995 3.436 4.452 c 0 2.453 -1.541 4.452 -3.436 4.452 c -1.895 0 -3.44 -1.999 -3.44 -4.452' +\n 'C 18.323 13.774 19.864 11.779 21.762 11.779 L 21.762 11.779 Z M 25.699 21.309 c -0.348 0 -0.626 0.277 -0.626 0.626 ' +\n 'c 0 0.344 0.277 0.622 0.626 0.622 c 2.136 0 3.875 1.74 3.875 3.879 c 0 0.272 -0.227 0.498 -0.501 0.498 H 14.447 c -0.274 0 ' +\n '-0.497 -0.223 -0.497 -0.498 c 0 -2.139 1.736 -3.879 3.872 -3.879 c 0.344 0 0.625 -0.277 0.625 -0.622 c 0 -0.348 -0.28 -0.626' +\n '-0.625 -0.626 c -2.826 0 -5.124 2.297 -5.124 5.126 c 0 0.965 0.784 1.749 1.748 1.749 h 14.626 c 0.964 0 1.748 -0.784' +\n '1.748 -1.749 C 30.822 23.606 28.524 21.309 25.699 21.309 L 25.699 21.309 Z M 22.217 9.832 c 0.448 -0.263 0.924 -0.396 ' +\n '1.419 -0.396 c 1.895 0 3.436 1.995 3.436 4.452 c 0 0.439 -0.048 0.873 -0.143 1.284 c -0.08 0.336 0.128 0.672 0.464 0.751 ' +\n 'c 0.048 0.012 0.098 0.019 0.143 0.019 c 0.284 0 0.541 -0.195 0.608 -0.483 c 0.119 -0.506 0.18 -1.034 0.18 -1.571' +\n 'c 0 -3.147 -2.102 -5.703 -4.687 -5.703 c -0.711 0 -1.419 0.198 -2.054 0.573 c -0.296 0.174 -0.397 0.559 -0.219 0.855' +\n 'C 21.536 9.911 21.921 10.009 22.217 9.832 L 22.217 9.832 Z M 27.697 18.81 c -0.345 0 -0.626 0.277 -0.626 0.622 ' +\n 'c 0 0.348 0.281 0.626 0.626 0.626 c 2.137 0 3.75 1.782 3.75 3.918 c 0 0.07 -0.013 0.141 -0.043 0.205 c -0.14 0.314 0.003' +\n '0.684 0.318 0.823 c 0.082 0.037 0.167 0.055 0.253 0.055 c 0.241 0 0.466 -0.141 0.57 -0.373 c 0.101 -0.226 0.153 -0.464 0.153' +\n '-0.714 C 32.699 21.15 30.523 18.81 27.697 18.81 L 27.697 18.81 Z M 27.697 18.81',\n 'Script': 'M 22.453 15.04 c 0 0 -1.194 -3.741 2.548 -3.774 c 0 0 2.497 0.126 1.766 4.321 c -0.008 0.043 -0.015 0.086 -0.024 0.13' +\n 'c -0.806 4.323 -2.516 8.42 -3.193 10.581 h 3.904 c 0 0 0.983 4.581 -2.549 4.968 H 13.292 c 0 0 -3.097 -1.42 -1.517 -5.323 l ' +\n '3 -10.839 H 11.84 c 0 0 -1.129 -2.902 1.709 -3.806 l 11.425 -0.032 l -0.73 0.355 l -1.193 1.726 L 22.453 15.04 Z M 22.409 ' +\n '12.597 c 0 0 -0.242 0.483 -0.278 0.98 h -9.098 c 0 0 -0.06 -0.871 0.714 -1.041 L 22.409 12.597 Z M 26.341 27.734' +\n 'c 0 0 -0.13 2.678 -2.226 1.871 c 0 0 -0.823 -0.565 -0.758 -1.855 L 26.341 27.734 Z M 22.905 15.008 c 0 0 0.653 -0.258 0.709' +\n '-1.501 c 0 0 0.145 -1.144 1.483 -0.693 c 0 0 0.808 0.355 0.259 2.404 c 0 0 -2.226 8.5 -3.032 10.339 c 0 0 -1.064 2.646 ' +\n '0.096 4.226 h -8.581 c 0 0 -1.806 -0.452 -0.741 -3.613 c 0 0 2.935 -9.549 3.193 -11.162 L 22.905 15.008 Z',\n};\nvar bpmnLoopShapes = {\n 'None': '',\n 'Standard': 'M 52.002 73.379 c -2.494 -2.536 -6.55 -2.534 -9.043 0 c -1.208 1.228 -1.874 2.861 -1.874 4.598 ' +\n 'c 0 1.225 0.337 2.395 0.957 3.411 l -1.167 1.186 l 2.071 0.458 l 2.071 0.458 l -0.45 -2.106 l -0.45 -2.106 l -1.292 1.314' +\n 'c -1.119 -2.065 -0.842 -4.709 0.877 -6.458 c 2.084 -2.119 5.475 -2.117 7.557 0 c 2.083 2.119 2.083 5.565 0 7.685' +\n 'c -0.976 0.992 -2.272 1.557 -3.65 1.59 l 0.025 1.068 c 1.65 -0.041 3.2 -0.716 4.368 -1.903 ' +\n 'c 1.208 -1.228 1.874 -2.861 1.874 -4.597 C 53.875 76.24 53.209 74.607 52.002 73.379 Z',\n 'ParallelMultiInstance': 'M 51.5,69.5 L52.5,69.5 L52.5,84.5 L51.5 84.5 Z M 46.5,69.5 L47.5,69.5 L47.5,84.5 L46.5 84.5 Z' +\n ' M 41.5,69.5 L42.5,69.5 L42.5,84.5 L41.5 84.5 Z ',\n 'SequenceMultiInstance': 'M 40.375,71.5 L 55.375,71.5 L 55.375,72.5 L 40.375,72.5 Z M 40.375,76.5 L 55.375,76.5 ' +\n 'L 55.375,77.5 L 40.375,77.5 Z M 40.375,76.5 L 55.375,76.5 L 55.375,77.5 L 40.375,77.5 Z M 40.375,81.5 L 55.375,81.5' +\n 'L 55.375,82.5 L 40.375,82.5 Z'\n};\n","import { Rect } from '../primitives/rect';\nimport { cloneObject } from '../utility/base-util';\nvar GraphForceNode = /** @class */ (function () {\n function GraphForceNode(gnNode) {\n /**\n * @private\n */\n this.velocityX = 0;\n /**\n * @private\n */\n this.velocityY = 0;\n /**\n * @private\n */\n this.nodes = [];\n this.graphNode = gnNode;\n var nNode = this.graphNode;\n var bounds = getGraphBounds(nNode);\n this.location = bounds.center;\n this.nodes = [];\n if (!gnNode.treeInfo.parents) {\n gnNode.treeInfo.parents = [];\n }\n if (!gnNode.treeInfo.children) {\n gnNode.treeInfo.children = [];\n }\n this.nodes = (gnNode.treeInfo.parents).concat(gnNode.treeInfo.children);\n }\n /**\n * @private\n */\n GraphForceNode.prototype.applyChanges = function () {\n this.graphNode.treeInfo.center = this.location;\n };\n return GraphForceNode;\n}());\nexport { GraphForceNode };\n/**\n * SymmetricalLayout\n */\nvar SymmetricLayout = /** @class */ (function () {\n function SymmetricLayout() {\n this.cdCOEF = 0.442;\n this.cfMAXVELOCITY = 50;\n this.cnMAXITERACTION = 1000;\n this.cnSPRINGLENGTH = 100;\n this.mszMaxForceVelocity = { width: this.cfMAXVELOCITY, height: this.cfMAXVELOCITY };\n /**\n * @private\n */\n this.springLength = 0;\n /**\n * @private\n */\n this.springFactor = this.cdCOEF;\n /**\n * @private\n */\n this.maxIteration = this.cnMAXITERACTION;\n this.springLength = this.cnSPRINGLENGTH;\n }\n /**\n * @private\n */\n SymmetricLayout.prototype.destroy = function () {\n /**\n * Destroys symmetricLayout\n */\n };\n SymmetricLayout.prototype.getModuleName = function () {\n return 'SymmetricalLayout';\n };\n SymmetricLayout.prototype.doGraphLayout = function (graphLayoutManager) {\n var graph = this.selectedNode;\n graph.treeInfo.Bounds = graphLayoutManager.getModelBounds(graphLayoutManager.nodes);\n var lstGraphNodes = graph.treeInfo.GraphNodes;\n var lstNodes = this.convertGraphNodes(lstGraphNodes);\n var count = lstNodes.length;\n count = Math.min(this.maxIteration, count * count * count);\n this.preLayoutNodes(lstNodes, graph.treeInfo.Bounds);\n for (var i = 0, nLenght = count; i < nLenght; i++) {\n this.makeSymmetricLayout(lstNodes);\n this.appendForces(lstNodes);\n }\n this.resetGraphPosition(lstNodes, graph);\n };\n SymmetricLayout.prototype.preLayoutNodes = function (lstNodes, rcBounds) {\n var fMaxSize = Math.max(rcBounds ? rcBounds.width : 25, rcBounds ? rcBounds.height : 25);\n var ptCenter = { x: fMaxSize / 2, y: fMaxSize / 2 };\n var dRotateAngle = 2 * Math.PI / lstNodes.length;\n var dAngle = dRotateAngle;\n for (var i = 0; i < lstNodes.length; i++) {\n var gnNode = lstNodes[i];\n var forceNode = this.getForceNode(gnNode);\n forceNode.location = {\n x: ptCenter.x + fMaxSize * Number((Math.cos(dAngle)).toFixed(2)),\n y: ptCenter.y + fMaxSize * Number(Math.sin(dAngle).toFixed(2))\n };\n dAngle -= dRotateAngle;\n }\n };\n /**\n * @private\n */\n SymmetricLayout.prototype.doLayout = function (graphLayoutManager) {\n this.selectedNode = graphLayoutManager.selectedNode;\n this.doGraphLayout(graphLayoutManager);\n };\n SymmetricLayout.prototype.makeSymmetricLayout = function (lstNodes) {\n var forceNode;\n var force;\n for (var k = 0; k < lstNodes.length; k++) {\n var gnNode = lstNodes[k];\n forceNode = this.getForceNode(gnNode);\n var nodes = forceNode.nodes;\n for (var l = 0; l < nodes.length; l++) {\n var gnChild = nodes[l];\n if (collectionContains(gnChild.id, lstNodes)) {\n this.calcNodesForce(forceNode, this.getForceNode(gnChild));\n }\n }\n for (var i = 0, length_1 = nodes.length; i < length_1; i++) {\n if (length_1 < 2) {\n break;\n }\n var vtx1 = this.getForceNode(nodes[i]);\n var vtx2 = (i + 1 >= length_1) ? this.getForceNode(nodes[0]) : this.getForceNode((nodes[i + 1]));\n var angle = (360 / nodes.length / 2) * Math.PI / 180;\n var normalDistance = 2 * this.springLength * Math.sin(angle);\n this.calcRelatesForce(vtx1, vtx2, normalDistance);\n }\n for (var s = 0; s < lstNodes.length; s++) {\n var gnChild = lstNodes[s];\n if (!collectionContains(gnChild.id, nodes) && gnChild.id !== gnNode.id) {\n force = this.getForceNode(gnChild);\n this.updateNeigbour(forceNode, force);\n }\n }\n }\n };\n SymmetricLayout.prototype.appendForces = function (lstNodes) {\n var gfnNode = null;\n for (var k = 0; k < lstNodes.length; k++) {\n var gnNode = lstNodes[k];\n gfnNode = this.getForceNode(gnNode);\n var ptPoint = gfnNode.location;\n ptPoint.x += Math.min(gfnNode.velocityX, this.mszMaxForceVelocity.width);\n ptPoint.y += Math.min(gfnNode.velocityY, this.mszMaxForceVelocity.height);\n gfnNode.velocityX = 0;\n gfnNode.velocityY = 0;\n gfnNode.location = ptPoint;\n }\n };\n SymmetricLayout.prototype.resetGraphPosition = function (lstNodes, graph) {\n var szMin = { width: Number.MAX_VALUE, height: Number.MAX_VALUE };\n var gfnNode = null;\n var gnNode;\n for (var k = 0; k < lstNodes.length; k++) {\n gnNode = lstNodes[k];\n gfnNode = this.getForceNode(gnNode);\n var ptLocation = {\n x: gfnNode.location.x - gnNode.actualSize.width / 2,\n y: gfnNode.location.y - gnNode.actualSize.height / 2\n };\n szMin.width = Math.min(szMin.width, ptLocation.x);\n szMin.height = Math.min(szMin.height, ptLocation.y);\n }\n for (var k = 0; k < lstNodes.length; k++) {\n gnNode = lstNodes[k];\n gfnNode = this.getForceNode(gnNode);\n var ptLocation = gfnNode.location;\n ptLocation.x -= szMin.width - (graph.treeInfo.location ? graph.treeInfo.location.x : 0);\n ptLocation.y -= szMin.height - (graph.treeInfo.location ? graph.treeInfo.location.y : 0);\n gfnNode.location = ptLocation;\n gfnNode.applyChanges();\n }\n };\n SymmetricLayout.prototype.convertGraphNodes = function (lstNodes) {\n var lstToReturn = [];\n var keys = Object.keys(lstNodes);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var k = keys_1[_i];\n if (lstNodes[k]) {\n var gnNode = lstNodes[k];\n var forceNode = new GraphForceNode(gnNode);\n gnNode.treeInfo.tag = forceNode;\n lstToReturn.push(gnNode);\n }\n }\n return lstToReturn;\n };\n /**\n * @private\n */\n SymmetricLayout.prototype.getForceNode = function (gnNode) {\n return gnNode.treeInfo.tag;\n };\n SymmetricLayout.prototype.updateNeigbour = function (vtSource, vtTarget) {\n if (vtTarget == null || vtSource == null) {\n return;\n }\n var distance = this.pointDistance(vtSource.location, vtTarget.location);\n var angle = this.lineAngle(vtSource.location, vtTarget.location);\n var normalDistance = (this.springLength * 0.9);\n if (distance < normalDistance) {\n this.calcForce(distance, normalDistance, angle, vtTarget);\n }\n };\n SymmetricLayout.prototype.lineAngle = function (pt1, pt2) {\n var radians = 0;\n var vx = pt2.x - pt1.x;\n var vy = pt2.y - pt1.y;\n if (vx === 0) {\n if (vy <= 0) {\n radians = (3.0 * Math.PI) / 2.0;\n }\n else {\n radians = Math.PI / 2.0;\n }\n }\n else if (vy === 0) {\n if (vx < 0) {\n radians = Math.PI;\n }\n else {\n radians = 0;\n }\n }\n else {\n radians = Math.atan(vy / vx);\n if (vx < 0 && vy > 0) {\n radians = Math.PI + radians;\n }\n else if (vx < 0 && vy < 0) {\n radians = Math.PI + radians;\n }\n else if (vx > 0 && vy < 0) {\n radians = 2.0 * Math.PI + radians;\n }\n }\n return radians;\n };\n SymmetricLayout.prototype.pointDistance = function (pt1, pt2) {\n var d = 0;\n var dx = pt2.x - pt1.x;\n var dy = pt2.y - pt1.y;\n var t = (dx * dx) + (dy * dy);\n if (t > 0) {\n d = Math.sqrt(t);\n }\n return d;\n };\n SymmetricLayout.prototype.calcRelatesForce = function (vtSource, vtTarget, normalDistance) {\n var distance = this.pointDistance(vtSource.location, vtTarget.location);\n var angle = this.lineAngle(vtSource.location, vtTarget.location);\n if (distance < normalDistance) {\n this.calcForce(distance, normalDistance, angle, vtTarget);\n }\n };\n /**\n * @private\n */\n SymmetricLayout.prototype.updateLayout = function (nodeCollection, connectors, symmetricLayout, nameTable, layout, viewPort) {\n var layoutManager = new GraphLayoutManager();\n layoutManager.updateLayout(nodeCollection, connectors, symmetricLayout, nameTable, layout, viewPort);\n };\n SymmetricLayout.prototype.calcNodesForce = function (vtSource, vtTarget) {\n var distance = this.pointDistance(vtSource.location, vtTarget.location);\n var angle = this.lineAngle(vtSource.location, vtTarget.location);\n if (distance > this.springLength || distance < this.springLength) {\n this.calcForce(distance, this.springLength, angle, vtTarget);\n }\n };\n SymmetricLayout.prototype.calcForce = function (distance, minDist, angle, vtTarget) {\n var count = vtTarget.nodes.length;\n var length = distance - minDist;\n var factor = this.springFactor / (count * count) * Math.sqrt(count);\n if (length !== 0) {\n var fVelocity = length * factor;\n var fOffset = fVelocity;\n var offsetX = Math.cos(angle) * fOffset;\n var offsetY = Math.sin(angle) * fOffset;\n vtTarget.velocityX -= offsetX;\n vtTarget.velocityY -= offsetY;\n }\n };\n return SymmetricLayout;\n}());\nexport { SymmetricLayout };\nvar GraphLayoutManager = /** @class */ (function () {\n function GraphLayoutManager() {\n this.visitedStack = [];\n this.cycleEdgesCollection = [];\n this.graphObjects = [];\n this.passedNodes = [];\n }\n /**\n * @private\n */\n GraphLayoutManager.prototype.updateLayout = function (nodeCollection, connectors, symmetricLayout, nameTable, layout, viewPort) {\n this.nameTable = nameTable;\n this.nodes = nodeCollection;\n this.connectors = connectors;\n var selectionList = nodeCollection;\n if (selectionList.length > 0) {\n this.mhelperSelectedNode = cloneObject(selectionList[0]);\n }\n for (var _i = 0, nodeCollection_1 = nodeCollection; _i < nodeCollection_1.length; _i++) {\n var node = nodeCollection_1[_i];\n var nodeGraphObject = void 0;\n nodeGraphObject = node;\n nodeGraphObject.treeInfo = {};\n nodeGraphObject.treeInfo.graphType = 'Node';\n this.graphObjects.push(nodeGraphObject);\n }\n for (var _a = 0, connectors_1 = connectors; _a < connectors_1.length; _a++) {\n var connector = connectors_1[_a];\n var connectorGraphObject = void 0;\n connectorGraphObject = connector;\n connectorGraphObject.treeInfo = {};\n connectorGraphObject.treeInfo.graphType = 'Connector';\n this.graphObjects.push(connectorGraphObject);\n }\n this.updateLayout1(this.graphObjects, symmetricLayout);\n var modelBounds = this.getModelBounds(selectionList);\n for (var i = 0; i < selectionList.length; i++) {\n var node = selectionList[i];\n var trnsX = (viewPort.x - modelBounds.width) / 2;\n var margin = layout.margin || {};\n var marginX = void 0;\n var marginY = void 0;\n margin.left = margin.left || 0;\n margin.right = margin.right || 0;\n margin.top = margin.top || 0;\n margin.bottom = margin.bottom || 0;\n if (layout.margin.left) {\n margin.left = layout.margin.left;\n }\n if (layout.margin.top) {\n margin.top = layout.margin.top;\n }\n var dx = (node.treeInfo.tag.location.x - (node.offsetX - (node.actualSize.width / 2)) -\n modelBounds.x + trnsX + margin.left);\n var dy = (node.treeInfo.tag.location.y - (node.offsetY - (node.actualSize.height / 2)) - modelBounds.y + margin.top);\n node.offsetX += dx;\n node.offsetY += dy;\n delete node.treeInfo;\n }\n return true;\n };\n /**\n * @private\n */\n GraphLayoutManager.prototype.getModelBounds = function (lNodes) {\n lNodes = lNodes.slice();\n var rect = null;\n var rect1 = null;\n var node;\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n var bounds = getGraphBounds(node);\n rect = new Rect(node.treeInfo.tag ? node.treeInfo.tag.location.x : bounds.x, node.treeInfo.tag ? node.treeInfo.tag.location.y : bounds.y, node.actualSize.width, node.actualSize.height);\n if (rect1) {\n rect1 = rect1.uniteRect(rect);\n }\n else {\n rect1 = rect;\n }\n }\n return rect1;\n };\n GraphLayoutManager.prototype.updateLayout1 = function (nodesToLayout, symmetricLayout) {\n this.detectCyclesInGraph(nodesToLayout);\n var nodesCount = nodesToLayout.length;\n if (nodesCount > 0) {\n var cycleConnColln = [];\n var nodes = [];\n var nodeSymbols = [];\n for (var s = 0; s < nodesToLayout.length; s++) {\n var nd = nodesToLayout[s];\n if (nd.treeInfo.isCycleEdge === undefined) {\n nd.treeInfo.isCycleEdge = false;\n }\n if (nd.treeInfo.graphType === 'Connector' && !nd.treeInfo.isCycleEdge) {\n nodes.push(nd);\n }\n else if (nd.treeInfo.graphType === 'Connector') {\n cycleConnColln.push(nd);\n }\n else {\n nodeSymbols.push(nd);\n }\n }\n nodes = nodes.concat(nodeSymbols);\n nodes = cycleConnColln.concat(nodes);\n while (nodesCount > this.dictionaryLength(this.passedNodes)) {\n this.getNodesToPosition(nodes);\n if (this.selectedNode == null) {\n continue;\n }\n symmetricLayout.doLayout(this);\n this.selectedNode = null;\n this.visitedStack = [];\n for (var _i = 0, _a = this.cycleEdgesCollection; _i < _a.length; _i++) {\n var connector = _a[_i];\n connector.treeInfo.isCycleEdge = false;\n }\n }\n this.passedNodes = null;\n this.selectedNode = null;\n }\n return false;\n };\n GraphLayoutManager.prototype.getNodesToPosition = function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n if (!collectionContains(node.id, this.passedNodes)) {\n if (node) {\n this.selectNodes(node);\n }\n break;\n }\n }\n };\n GraphLayoutManager.prototype.selectNodes = function (node) {\n var nodeGraph = node;\n if (node.treeInfo.graphType === 'Connector') {\n this.exploreGraphEdge(node);\n }\n else if (nodeGraph != null) {\n if (this.addNode(node, 'passed')) {\n this.addNode(node, 'selected');\n if (this.isConnectedToAnotherNode(nodeGraph)) {\n this.selectedNode = { treeInfo: {} };\n this.selectedNode.treeInfo.LeftMargin = 10;\n this.selectedNode.treeInfo.TopMargin = 10;\n this.selectConnectedNodes(nodeGraph);\n }\n else {\n this.selectedNode = node;\n }\n }\n }\n };\n GraphLayoutManager.prototype.selectConnectedNodes = function (nodeGraph) {\n var graph = this.selectedNode;\n if (!graph.treeInfo.GraphNodes) {\n graph.treeInfo.GraphNodes = {};\n }\n var node = nodeGraph;\n if (node != null && this.addNode(node, 'passed')) {\n var nodeName = node.id;\n if (!this.dictionaryContains(graph.treeInfo.GraphNodes, node)) {\n var gnNode = this.addGraphNode(node);\n this.getConnectedRelatives(gnNode);\n this.exploreRelatives(nodeGraph);\n }\n else {\n var graphNode = graph.treeInfo.GraphNodes[nodeName];\n if (graphNode.treeInfo.Added) {\n graphNode.treeInfo.Added = false;\n this.getConnectedRelatives(graphNode);\n this.exploreRelatives(nodeGraph);\n }\n }\n }\n };\n GraphLayoutManager.prototype.exploreRelatives = function (nodeGraph) {\n this.exploreRelatives1(nodeGraph, 'Parents');\n this.exploreRelatives1(nodeGraph, 'Children');\n };\n GraphLayoutManager.prototype.exploreRelatives1 = function (nodeGraph, relativesToExplore) {\n var edges = [];\n if (relativesToExplore === 'Parents') {\n edges = nodeGraph.inEdges;\n }\n else if (relativesToExplore === 'Children') {\n edges = nodeGraph.outEdges;\n }\n for (var i = 0; i < edges.length; i++) {\n var edge = this.nameTable[edges[i]];\n if (this.addNode(edge, 'passed')) {\n var fromNode = this.nameTable[edge.sourceID];\n var toNode = this.nameTable[edge.targetID];\n if (relativesToExplore === 'Parents' && fromNode != null &&\n collectionContains(fromNode.id, this.nodes)) {\n this.selectConnectedNodes(this.nameTable[edge.sourceID]);\n }\n else if (relativesToExplore === 'Children' && toNode != null &&\n collectionContains(toNode.id, this.nodes)) {\n this.selectConnectedNodes(this.nameTable[edge.targetID]);\n }\n }\n }\n };\n GraphLayoutManager.prototype.getConnectedRelatives = function (graphNode) {\n this.getConnectedParents(graphNode);\n this.getConnectedChildren(graphNode);\n };\n GraphLayoutManager.prototype.dictionaryContains = function (obj, keyObj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] === keyObj.id) {\n return true;\n }\n }\n return false;\n };\n GraphLayoutManager.prototype.dictionaryLength = function (obj) {\n var keys = Object.keys(obj);\n return keys.length;\n };\n GraphLayoutManager.prototype.getConnectedChildren = function (graphNode) {\n var graph = this.selectedNode;\n var nodeGraph = graphNode;\n for (var s = 0; s < nodeGraph.outEdges.length; s++) {\n var edge = this.nameTable[nodeGraph.outEdges[s]];\n if (!edge.treeInfo.isCycleEdge) {\n var node = this.nameTable[edge.targetID];\n if (collectionContains(node.id, this.nodes) && node != null && node.visible) {\n var gnNodeChildren = void 0;\n if (!this.dictionaryContains(graph.treeInfo.GraphNodes, node)) {\n gnNodeChildren = this.addGraphNode(node);\n gnNodeChildren.treeInfo.Added = true;\n }\n else {\n gnNodeChildren = graph.treeInfo.GraphNodes[node.id];\n }\n if (!graphNode.treeInfo.children) {\n graphNode.treeInfo.children = [];\n }\n if (!gnNodeChildren.treeInfo.parents) {\n gnNodeChildren.treeInfo.parents = [];\n }\n this.setNode(gnNodeChildren.treeInfo.parents, graphNode);\n if (this.findNode(graphNode.treeInfo.children, gnNodeChildren.id) < 0) {\n graphNode.treeInfo.children.push(gnNodeChildren);\n }\n }\n }\n }\n };\n GraphLayoutManager.prototype.getConnectedParents = function (graphNode) {\n var graph = this.selectedNode;\n var nodeGraph = graphNode;\n for (var s = 0; s < nodeGraph.inEdges.length; s++) {\n var edge = this.nameTable[nodeGraph.inEdges[s]];\n if (!edge.treeInfo.isCycleEdge) {\n var node = this.nameTable[edge.sourceID];\n if (collectionContains(node.id, this.nodes) && node != null && node.visible) {\n var gnNode = void 0;\n if (!this.dictionaryContains(graph.treeInfo.GraphNodes, node)) {\n gnNode = this.addGraphNode(node);\n gnNode.treeInfo.Added = true;\n }\n else {\n gnNode = graph.treeInfo.GraphNodes[node.id];\n }\n if (!graphNode.treeInfo.parents) {\n graphNode.treeInfo.parents = [];\n }\n if (!gnNode.treeInfo.children) {\n gnNode.treeInfo.children = [];\n }\n this.setNode(gnNode.treeInfo.children, graphNode);\n if (this.findNode(graphNode.treeInfo.parents, gnNode.id) < 0) {\n graphNode.treeInfo.parents.push(gnNode);\n }\n }\n }\n }\n };\n GraphLayoutManager.prototype.setNode = function (list, node) {\n var nIndex = this.findNode(list, node.id);\n if (nIndex >= 0 && nIndex < list.length) {\n list[nIndex] = node;\n }\n else {\n list.push(node);\n }\n };\n GraphLayoutManager.prototype.findNode = function (list, fullName) {\n var nIndex = -1;\n if (list != null && fullName !== '') {\n for (var i = 0, nLength = list.length; i < nLength; i++) {\n var gnNode = list[i];\n if (typeof (gnNode) === 'string' && gnNode === fullName) {\n nIndex = i;\n break;\n }\n else if (gnNode != null && gnNode.id === fullName) {\n nIndex = i;\n break;\n }\n }\n }\n return nIndex;\n };\n GraphLayoutManager.prototype.addGraphNode = function (node) {\n var graph = this.selectedNode;\n if (!graph.treeInfo.GraphNodes) {\n graph.treeInfo.GraphNodes = {};\n }\n var gnNode = node;\n if (graph != null) {\n graph.treeInfo.GraphNodes[gnNode.id] = gnNode;\n var nodeHelper = this.mhelperSelectedNode;\n if (nodeHelper != null && node.id === nodeHelper.id) {\n this.mhelperSelectedNode = gnNode;\n }\n }\n return gnNode;\n };\n GraphLayoutManager.prototype.isConnectedToAnotherNode = function (gnNode) {\n var bFoundConnectedNode = false;\n var edges = (gnNode.inEdges).concat(gnNode.outEdges);\n if (edges.length > 0) {\n if ((gnNode.inEdges != null) && (gnNode.inEdges.length > 0)) {\n bFoundConnectedNode = this.searchEdgeCollection(gnNode.inEdges, 'FromNode');\n }\n if ((!bFoundConnectedNode) && (gnNode.outEdges != null) && (gnNode.outEdges.length > 0)) {\n bFoundConnectedNode = this.searchEdgeCollection(gnNode.outEdges, 'ToNode');\n }\n }\n return bFoundConnectedNode;\n };\n GraphLayoutManager.prototype.searchEdgeCollection = function (edgesToSearchThrough, connectionDirection) {\n var bFoundConnectedNode = false;\n for (var i = 0; i < edgesToSearchThrough.length - 1; i++) {\n var edge = this.nameTable[edgesToSearchThrough[i]];\n if (!this.addNode(edge, 'passed')) {\n continue;\n }\n if (!edge.treeInfo.isCycleEdge && ((connectionDirection === 'FromNode' && this.nameTable[edge.sourceID] != null)\n || (connectionDirection === 'ToNode' && this.nameTable[edge.targetID] != null))) {\n bFoundConnectedNode = true;\n break;\n }\n }\n return bFoundConnectedNode;\n };\n GraphLayoutManager.prototype.exploreGraphEdge = function (node) {\n var nodeLink = node;\n if (nodeLink != null && !nodeLink.treeInfo.isCycleEdge && this.addNode(node, 'passed')) {\n this.addNode(node, 'selected');\n var fromNode = this.nameTable[nodeLink.sourceID];\n var toNode = this.nameTable[nodeLink.targetID];\n if (fromNode != null) {\n this.selectNodes(fromNode);\n }\n else if (toNode != null) {\n this.selectNodes(toNode);\n }\n else {\n this.selectedNode = node;\n }\n }\n };\n GraphLayoutManager.prototype.addNode = function (nodeToAdd, collectionToAdd) {\n var bResult = true;\n var node = nodeToAdd;\n if (collectionToAdd === 'passed' || !node.visible) {\n if (!this.dictionaryContains(this.passedNodes, node)) {\n this.passedNodes[node.id] = node;\n }\n }\n if (!node.visible) {\n return false;\n }\n return bResult;\n };\n GraphLayoutManager.prototype.detectCyclesInGraph = function (nodes) {\n var vertex = [];\n var currentStack = [];\n for (var k = 0; k < nodes.length; k++) {\n if (!(nodes[k].treeInfo.graphType === 'Connector')) {\n vertex.push(nodes[k]);\n }\n }\n if (vertex.length > 0) {\n currentStack.push(vertex[0]);\n this.visitedStack.push(vertex[0]);\n while (currentStack.length > 0) {\n var top_1 = currentStack[currentStack.length - 1];\n var childNodes = this.getUnVisitedChildNodes(top_1);\n if (childNodes.length > 0) {\n var child = childNodes[0];\n var currentEdge = childNodes[childNodes.length - 1];\n if (collectionContains(child.id, this.visitedStack)) {\n currentEdge.treeInfo.isCycleEdge = true;\n this.cycleEdgesCollection.push(currentEdge);\n }\n else {\n currentStack.push(child);\n this.visitedStack.splice(0, 0, child);\n }\n }\n else {\n currentStack.pop();\n }\n }\n }\n };\n GraphLayoutManager.prototype.getUnVisitedChildNodes = function (top) {\n var childNodes = [];\n if (top.outEdges.length > 0) {\n for (var i = 0; i < top.outEdges.length; i++) {\n var con = this.nameTable[top.outEdges[i]];\n if (!collectionContains(con.id, this.visitedStack)) {\n var toNode = this.nameTable[con.targetID];\n if (toNode != null) {\n childNodes.push(toNode);\n }\n childNodes.push(con);\n this.visitedStack.splice(0, 0, con);\n return childNodes;\n }\n }\n return childNodes;\n }\n return childNodes;\n };\n return GraphLayoutManager;\n}());\nexport { GraphLayoutManager };\nfunction getGraphBounds(node) {\n var x = node.offsetX - node.actualSize.width * node.pivot.x;\n var y = node.offsetY - node.actualSize.height * node.pivot.y;\n return new Rect(x, y, node.actualSize.width, node.actualSize.height);\n}\nfunction collectionContains(id, coll) {\n for (var i = 0; i < coll.length; i++) {\n if (coll[i].id === id) {\n return true;\n }\n }\n return false;\n}\n","/**\n * IncrementalSearch module file\n */\nvar queryString = '';\nvar prevString = '';\nvar matches = [];\nvar activeClass = 'e-active';\n/**\n * Search and focus the list item based on key code matches with list text content\n * @param { number } keyCode - Specifies the key code which pressed on keyboard events.\n * @param { HTMLElement[]] } items - Specifies an array of HTMLElement, from which matches find has done.\n * @param { number } selectedIndex - Specifies the selected item in list item, so that search will happen\n * after selected item otherwise it will do from initial.\n * @param { boolean } ignoreCase - Specifies the case consideration when search has done.\n */\nexport function incrementalSearch(keyCode, items, selectedIndex, ignoreCase) {\n queryString += String.fromCharCode(keyCode);\n setTimeout(function () { queryString = ''; }, 1000);\n var index;\n queryString = ignoreCase ? queryString.toLowerCase() : queryString;\n if (prevString === queryString) {\n for (var i = 0; i < matches.length; i++) {\n if (matches[i].classList.contains(activeClass)) {\n index = i;\n break;\n }\n }\n index = index + 1;\n return matches[index];\n }\n else {\n var listItems = items;\n var strLength = queryString.length;\n var text = void 0;\n var item = void 0;\n selectedIndex = selectedIndex ? selectedIndex + 1 : 0;\n var i = selectedIndex;\n matches = [];\n do {\n if (i === listItems.length) {\n i = -1;\n }\n i === -1 ? index = 0 : index = i;\n item = listItems[index];\n text = ignoreCase ? item.innerText.toLowerCase() : item.innerText;\n if (text.substr(0, strLength) === queryString) {\n matches.push(listItems[index]);\n }\n i++;\n } while (i !== selectedIndex);\n prevString = queryString;\n return matches[0];\n }\n}\nexport function Search(inputVal, items, searchType, ignoreCase) {\n var listItems = items;\n ignoreCase = ignoreCase !== undefined && ignoreCase !== null ? ignoreCase : true;\n var itemData = { item: null, index: null };\n if (inputVal.length) {\n var strLength = inputVal.length;\n var queryStr = ignoreCase ? inputVal.toLocaleLowerCase() : inputVal;\n for (var i = 0, itemsData = listItems; i < itemsData.length; i++) {\n var item = itemsData[i];\n var text = (ignoreCase ? item.textContent.toLocaleLowerCase() : item.textContent).replace(/^\\s+|\\s+$/g, '');\n if ((searchType === 'Equal' && text === queryStr) || (searchType === 'StartsWith' && text.substr(0, strLength) === queryStr)) {\n itemData.item = item;\n itemData.index = i;\n return { item: item, index: i };\n }\n }\n return itemData;\n }\n return itemData;\n}\n","/**\n * Function helps to find which highlightSearch is to call based on your data.\n * @param {HTMLElement} element - Specifies an li element.\n * @param {string} query - Specifies the string to be highlighted.\n * @param {boolean} ignoreCase - Specifies the ignoreCase option.\n * @param {HightLightType} type - Specifies the type of highlight.\n */\nexport function highlightSearch(element, query, ignoreCase, type) {\n if (query === '') {\n return;\n }\n else {\n var ignoreRegex = ignoreCase ? 'gim' : 'gm';\n query = /^[a-zA-Z0-9- ]*$/.test(query) ? query : query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n var replaceQuery = type === 'StartsWith' ? '^(' + query + ')' : type === 'EndsWith' ? '(' + query + ')$' : '(' + query + ')';\n findTextNode(element, new RegExp(replaceQuery, ignoreRegex));\n }\n}\nfunction findTextNode(element, pattern) {\n for (var index = 0; element.childNodes && (index < element.childNodes.length); index++) {\n if (element.childNodes[index].nodeType === 3) {\n element.innerHTML = element.innerHTML.replace(pattern, '$1');\n break;\n }\n else {\n findTextNode(element.childNodes[index], pattern);\n }\n }\n}\n/**\n * Function helps to remove highlighted element based on your data.\n * @param {HTMLElement} content - Specifies an content element.\n */\nexport function revertHighlightSearch(content) {\n var contentElement = content.querySelectorAll('.e-highlight');\n for (var i = contentElement.length - 1; i >= 0; i--) {\n var parent_1 = contentElement[i].parentNode;\n var text = document.createTextNode(contentElement[i].textContent);\n parent_1.replaceChild(text, contentElement[i]);\n }\n}\n","/**\n * FloatLable Moduel\n * Specifies whether to display the floating label above the input element.\n */\nimport { removeClass, addClass, detach } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nvar FLOATLINE = 'e-float-line';\nvar FLOATTEXT = 'e-float-text';\nvar LABELTOP = 'e-label-top';\nvar LABELBOTTOM = 'e-label-bottom';\n/**\n * Function to create Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param element - the given html element.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function createFloatLabel(overAllWrapper, searchWrapper, element, inputElement, value, floatLabelType, placeholder) {\n var floatLinelement;\n var floatLabelElement;\n floatLinelement = createElement('span', { className: FLOATLINE });\n floatLabelElement = createElement('label', { className: FLOATTEXT });\n if (!isNullOrUndefined(element.id) && element.id !== '') {\n floatLabelElement.id = 'label_' + element.id.replace(/ /g, '_');\n attributes(element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(inputElement.placeholder) && inputElement.placeholder !== '') {\n floatLabelElement.innerHTML = inputElement.placeholder;\n inputElement.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n floatLabelElement.innerHTML = placeholder;\n }\n searchWrapper.appendChild(floatLinelement);\n searchWrapper.appendChild(floatLabelElement);\n overAllWrapper.classList.add('e-float-input');\n updateFloatLabelState(value, floatLabelElement);\n if (floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(LABELBOTTOM)) {\n removeClass([floatLabelElement], LABELBOTTOM);\n }\n addClass([floatLabelElement], LABELTOP);\n }\n}\n/**\n * Function to update status of the Float Label element.\n * @param value - Value of the MultiSelect.\n * @param label - float label element.\n */\nexport function updateFloatLabelState(value, label) {\n if (value && value.length > 0) {\n addClass([label], LABELTOP);\n removeClass([label], LABELBOTTOM);\n }\n else {\n removeClass([label], LABELTOP);\n addClass([label], LABELBOTTOM);\n }\n}\n/**\n * Function to remove Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param searchWrapper - search wrapper of multiselect.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function removeFloating(overAllWrapper, componentWrapper, searchWrapper, inputElement, value, floatLabelType, placeholder) {\n var placeholderElement = componentWrapper.querySelector('.' + FLOATTEXT);\n var floatLine = componentWrapper.querySelector('.' + FLOATLINE);\n var placeholderText;\n if (!isNullOrUndefined(placeholderElement)) {\n placeholderText = placeholderElement.innerText;\n detach(searchWrapper.querySelector('.' + FLOATTEXT));\n setPlaceHolder(value, inputElement, placeholderText);\n if (!isNullOrUndefined(floatLine)) {\n detach(searchWrapper.querySelector('.' + FLOATLINE));\n }\n }\n else {\n placeholderText = (placeholder !== null) ? placeholder : '';\n setPlaceHolder(value, inputElement, placeholderText);\n }\n overAllWrapper.classList.remove('e-float-input');\n}\n/**\n * Function to set the placeholder to the element.\n * @param value - Value of the MultiSelect.\n * @param inputElement - specify the input wrapper.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function setPlaceHolder(value, inputElement, placeholder) {\n if (value && value.length) {\n inputElement.placeholder = '';\n }\n else {\n inputElement.placeholder = placeholder;\n }\n}\n/**\n * Function for focusing the Float Element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n */\nexport function floatLabelFocus(overAllWrapper, componentWrapper) {\n overAllWrapper.classList.add('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (!isNullOrUndefined(label)) {\n addClass([label], LABELTOP);\n if (label.classList.contains(LABELBOTTOM)) {\n removeClass([label], LABELBOTTOM);\n }\n }\n}\n/**\n * Function to focus the Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function floatLabelBlur(overAllWrapper, componentWrapper, value, floatLabelType, placeholder) {\n overAllWrapper.classList.remove('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (value && value.length <= 0 && floatLabelType === 'Auto' && !isNullOrUndefined(label)) {\n if (label.classList.contains(LABELTOP)) {\n removeClass([label], LABELTOP);\n }\n addClass([label], LABELBOTTOM);\n }\n}\n","import { ChildProperty, compile as baseTemplateComplier, setValue, Internationalization } from '@syncfusion/ej2-base';\nimport { extend as baseExtend, isNullOrUndefined, getValue, classList } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, addClass, attributes, remove, createElement, removeClass } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Column } from '../models/column';\nimport { calculateRelativeBasedPosition, calculatePosition } from '@syncfusion/ej2-popups';\n//https://typescript.codeplex.com/discussions/401501\n/**\n * Function to check whether target object implement specific interface\n * @param {Object} target\n * @param {string} checkFor\n * @returns no\n * @hidden\n */\nexport function doesImplementInterface(target, checkFor) {\n /* tslint:disable:no-any */\n return target.prototype && checkFor in target.prototype;\n}\n/**\n * Function to get value from provided data\n * @param {string} field\n * @param {Object} data\n * @param {IColumn} column\n * @hidden\n */\nexport function valueAccessor(field, data, column) {\n field = isNullOrUndefined(field) ? '' : field;\n return DataUtil.getObject(field, data);\n}\n/**\n * The function used to update Dom using requestAnimationFrame.\n * @param {Function} fn - Function that contains the actual action\n * @return {Promise}\n * @hidden\n */\nexport function getUpdateUsingRaf(updateFunction, callBack) {\n requestAnimationFrame(function () {\n try {\n callBack(null, updateFunction());\n }\n catch (e) {\n callBack(e);\n }\n });\n}\n/**\n * @hidden\n */\nexport function iterateArrayOrObject(collection, predicate) {\n var result = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n var pred = predicate(collection[i], i);\n if (!isNullOrUndefined(pred)) {\n result.push(pred);\n }\n }\n return result;\n}\n/** @hidden */\nexport function iterateExtend(array) {\n var obj = [];\n for (var i = 0; i < array.length; i++) {\n obj.push(baseExtend({}, getActualProperties(array[i]), {}, true));\n }\n return obj;\n}\n/** @hidden */\nexport function templateCompiler(template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return baseTemplateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return baseTemplateComplier(template);\n }\n }\n return undefined;\n}\n/** @hidden */\nexport function setStyleAndAttributes(node, customAttributes) {\n var copyAttr = {};\n var literals = ['style', 'class'];\n //Dont touch the original object - make a copy\n baseExtend(copyAttr, customAttributes, {});\n if ('style' in copyAttr) {\n setStyleAttribute(node, copyAttr[literals[0]]);\n delete copyAttr[literals[0]];\n }\n if ('class' in copyAttr) {\n addClass([node], copyAttr[literals[1]]);\n delete copyAttr[literals[1]];\n }\n attributes(node, copyAttr);\n}\n/** @hidden */\nexport function extend(copied, first, second, exclude) {\n var moved = baseExtend(copied, first, second);\n Object.keys(moved).forEach(function (value, index) {\n if (exclude.indexOf(value) !== -1) {\n delete moved[value];\n }\n });\n return moved;\n}\n/** @hidden */\nexport function prepareColumns(columns, autoWidth) {\n for (var c = 0, len = columns.length; c < len; c++) {\n var column = void 0;\n if (typeof columns[c] === 'string') {\n column = new Column({ field: columns[c] });\n }\n else if (!(columns[c] instanceof Column)) {\n if (!columns[c].columns) {\n column = new Column(columns[c]);\n }\n else {\n column = new Column(columns[c]);\n columns[c].columns = prepareColumns(columns[c].columns);\n }\n }\n else {\n column = columns[c];\n }\n column.headerText = isNullOrUndefined(column.headerText) ? column.foreignKeyValue || column.field || '' : column.headerText;\n column.foreignKeyField = column.foreignKeyField || column.field;\n column.valueAccessor = (typeof column.valueAccessor === 'string' ? getValue(column.valueAccessor, window)\n : column.valueAccessor) || valueAccessor;\n column.width = autoWidth && isNullOrUndefined(column.width) ? 200 : column.width;\n if (isNullOrUndefined(column.visible)) {\n column.visible = true;\n }\n columns[c] = column;\n }\n return columns;\n}\n/** @hidden */\nexport function setCssInGridPopUp(popUp, e, className) {\n var popUpSpan = popUp.querySelector('span');\n var position = popUp.parentElement.getBoundingClientRect();\n var targetPosition = e.target.getBoundingClientRect();\n var isBottomTail;\n popUpSpan.className = className;\n popUp.style.display = '';\n isBottomTail = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY) > popUp.offsetHeight + 10;\n popUp.style.top = targetPosition.top - position.top +\n (isBottomTail ? -(popUp.offsetHeight + 10) : popUp.offsetHeight + 10) + 'px'; //10px for tail element\n popUp.style.left = getPopupLeftPosition(popUp, e, targetPosition, position.left) + 'px';\n if (isBottomTail) {\n popUp.querySelector('.e-downtail').style.display = '';\n popUp.querySelector('.e-uptail').style.display = 'none';\n }\n else {\n popUp.querySelector('.e-downtail').style.display = 'none';\n popUp.querySelector('.e-uptail').style.display = '';\n }\n}\n/** @hidden */\nfunction getPopupLeftPosition(popup, e, targetPosition, left) {\n var width = popup.offsetWidth / 2;\n var x = getPosition(e).x;\n if (x - targetPosition.left < width) {\n return targetPosition.left - left;\n }\n else if (targetPosition.right - x < width) {\n return targetPosition.right - left - width * 2;\n }\n else {\n return x - left - width;\n }\n}\n/** @hidden */\nexport function getActualProperties(obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n}\n/** @hidden */\nexport function parentsUntil(elem, selector, isID) {\n var parent = elem;\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n break;\n }\n parent = parent.parentElement;\n }\n return parent;\n}\n/** @hidden */\nexport function getElementIndex(element, elements) {\n var index = -1;\n for (var i = 0, len = elements.length; i < len; i++) {\n if (elements[i].isEqualNode(element)) {\n index = i;\n break;\n }\n }\n return index;\n}\n/** @hidden */\nexport function inArray(value, collection) {\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[i] === value) {\n return i;\n }\n }\n return -1;\n}\n/** @hidden */\nexport function getActualPropFromColl(collection) {\n var coll = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[i].hasOwnProperty('properties')) {\n coll.push(collection[i].properties);\n }\n else {\n coll.push(collection[i]);\n }\n }\n return coll;\n}\n/** @hidden */\nexport function removeElement(target, selector) {\n var elements = [].slice.call(target.querySelectorAll(selector));\n for (var i = 0; i < elements.length; i++) {\n remove(elements[i]);\n }\n}\n/** @hidden */\nexport function getPosition(e) {\n var position = {};\n position.x = (isNullOrUndefined(e.clientX) ? e.changedTouches[0].clientX :\n e.clientX);\n position.y = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY);\n return position;\n}\nvar uid = 0;\n/** @hidden */\nexport function getUid(prefix) {\n return prefix + uid++;\n}\n/** @hidden */\nexport function appendChildren(elem, children) {\n for (var i = 0, len = children.length; i < len; i++) {\n if (len === children.length) {\n elem.appendChild(children[i]);\n }\n else {\n elem.appendChild(children[0]);\n }\n }\n return elem;\n}\n/** @hidden */\nexport function parents(elem, selector, isID) {\n var parent = elem;\n var parents = [];\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\n/** @hidden */\nexport function calculateAggregate(type, data, column, context) {\n if (type === 'Custom') {\n var temp = column.customAggregate;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n return temp ? temp.call(context, data, column) : '';\n }\n return (column.field in data || data instanceof Array) ? DataUtil.aggregates[type.toLowerCase()](data, column.field) : null;\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\n }\n var divNode = document.createElement('div');\n var value = 0;\n divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n document.body.appendChild(divNode);\n value = (divNode.offsetWidth - divNode.clientWidth) | 0;\n document.body.removeChild(divNode);\n return scrollWidth = value;\n}\n/** @hidden */\nvar rowHeight;\n/** @hidden */\nexport function getRowHeight(element) {\n if (rowHeight !== undefined) {\n return rowHeight;\n }\n var table = createElement('table', { className: 'e-table', styles: 'visibility: hidden' });\n table.innerHTML = 'A';\n element.appendChild(table);\n var rect = table.querySelector('td').getBoundingClientRect();\n element.removeChild(table);\n rowHeight = Math.ceil(rect.height);\n return rowHeight;\n}\n/** @hidden */\nexport function isComplexField(field) {\n return field.split('.').length > 1;\n}\n/** @hidden */\nexport function getComplexFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/\\./g, '_');\n}\n/** @hidden */\nexport function setComplexFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/_/g, '.');\n}\n/** @hidden */\nexport function isEditable(col, type, elem) {\n var row = parentsUntil(elem, 'e-row');\n var isOldRow = !row ? true : row && !row.classList.contains('e-insertedrow');\n if (type === 'beginEdit' && isOldRow) {\n if (col.isIdentity || col.isPrimaryKey || !col.allowEditing) {\n return false;\n }\n return true;\n }\n else if (type === 'add' && col.isIdentity && col.isPrimaryKey) {\n return false;\n }\n else {\n if (isOldRow && !col.allowEditing && !col.isIdentity && !col.isPrimaryKey) {\n return false;\n }\n return true;\n }\n}\n/** @hidden */\nexport function isActionPrevent(inst) {\n var dlg = inst.element.querySelector('#' + inst.element.id + 'EditConfirm');\n return inst.editSettings.mode === 'Batch' &&\n (inst.element.querySelectorAll('.e-updatedtd').length) && inst.editSettings.showConfirmDialog &&\n (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/** @hidden */\nexport function wrap(elem, action) {\n var clName = 'e-wrap';\n elem = elem instanceof Array ? elem : [elem];\n for (var i = 0; i < elem.length; i++) {\n action ? elem[i].classList.add(clName) : elem[i].classList.remove(clName);\n }\n}\n/** @hidden */\nexport function setFormatter(serviceLocator, column) {\n var fmtr = serviceLocator.getService('valueFormatter');\n switch (column.type) {\n case 'date':\n column.setFormatter(fmtr.getFormatFunction({ type: 'date', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'date', skeleton: column.format }));\n break;\n case 'datetime':\n column.setFormatter(fmtr.getFormatFunction({ type: 'dateTime', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'dateTime', skeleton: column.format }));\n break;\n case 'number':\n column.setFormatter(fmtr.getFormatFunction({ format: column.format }));\n column.setParser(fmtr.getParserFunction({ format: column.format }));\n break;\n }\n}\n/** @hidden */\nexport function addRemoveActiveClasses(cells, add) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n classList(cells[i], args.slice(), []);\n cells[i].setAttribute('aria-selected', 'true');\n }\n else {\n classList(cells[i], [], args.slice());\n cells[i].removeAttribute('aria-selected');\n }\n }\n}\n/** @hidden */\nexport function distinctStringValues(result) {\n var temp = {};\n var res = [];\n for (var i = 0; i < result.length; i++) {\n if (!(result[i] in temp)) {\n res.push(result[i].toString());\n temp[result[i]] = 1;\n }\n }\n return res;\n}\n/** @hidden */\nexport function getFilterMenuPostion(target, dialogObj, grid) {\n var elementVisible = dialogObj.element.style.display;\n dialogObj.element.style.display = 'block';\n var dlgWidth = dialogObj.width;\n var newpos;\n if (!grid.enableRtl) {\n newpos = calculateRelativeBasedPosition(target, dialogObj.element);\n dialogObj.element.style.display = elementVisible;\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 5 + 'px';\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) - 16 + 'px'; // right calculation\n }\n else {\n dialogObj.element.style.left = leftPos + -4 + 'px';\n }\n }\n else {\n newpos = calculatePosition(target, 'left', 'bottom');\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 35 + 'px';\n dialogObj.element.style.display = elementVisible;\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) + -16 + 'px';\n }\n else {\n dialogObj.element.style.left = leftPos - 16 + 'px';\n }\n }\n}\n/** @hidden */\nexport function getZIndexCalcualtion(args, dialogObj) {\n args.popup.element.style.zIndex = (dialogObj.zIndex + 1).toString();\n}\n/** @hidden */\nexport function toogleCheckbox(elem) {\n var span = elem.querySelector('.e-frame');\n span.classList.contains('e-check') ? classList(span, ['e-uncheck'], ['e-check']) :\n classList(span, ['e-check'], ['e-uncheck']);\n}\n/** @hidden */\nexport function createCboxWithWrap(uid, elem, className) {\n var div = createElement('div', { className: className });\n div.appendChild(elem);\n div.setAttribute('uid', uid);\n return div;\n}\n/** @hidden */\nexport function removeAddCboxClasses(elem, checked) {\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n if (checked) {\n elem.classList.add('e-check');\n }\n else {\n elem.classList.add('e-uncheck');\n }\n}\n/**\n * Refresh the Row model's foreign data.\n * @param row - Grid Row model object.\n * @param columns - Foreign columns array.\n * @param data - Updated Row data.\n * @hidden\n */\nexport function refreshForeignData(row, columns, data) {\n columns.forEach(function (col) {\n setValue(col.field, getForeignData(col, data), row.foreignKeyData);\n });\n row.cells.forEach(function (cell) {\n if (cell.isForeignKey) {\n setValue('foreignKeyData', getValue(cell.column.field, row.foreignKeyData), cell);\n }\n });\n}\n/**\n * Get the foreign data for the corresponding cell value.\n * @param column - Foreign Key column\n * @param data - Row data.\n * @param lValue - cell value.\n * @param foreignData - foreign data source.\n * @hidden\n */\nexport function getForeignData(column, data, lValue, foreignKeyData) {\n var fField = column.foreignKeyField;\n var key = (lValue || valueAccessor(column.field, data, column));\n key = isNullOrUndefined(key) ? '' : key;\n var query = new Query();\n var fdata = foreignKeyData || ((column.dataSource instanceof DataManager) && column.dataSource.dataSource.json.length ?\n column.dataSource.dataSource.json : column.columnData);\n if (key.getDay) {\n query.where(getDatePredicate({ field: fField, operator: 'equal', value: key, matchCase: false }));\n }\n else {\n query.where(fField, '==', key, false);\n }\n return new DataManager(fdata).executeLocal(query);\n}\n/**\n * To use to get the column's object by the foreign key value.\n * @param foreignKeyValue - Defines ForeignKeyValue.\n * @param columns - Array of column object.\n * @hidden\n */\nexport function getColumnByForeignKeyValue(foreignKeyValue, columns) {\n var column;\n return columns.some(function (col) {\n column = col;\n return col.foreignKeyValue === foreignKeyValue;\n }) && column;\n}\n/**\n * @hidden\n * @param filterObject - Defines predicate model object\n */\nexport function getDatePredicate(filterObject, type) {\n var datePredicate;\n var prevDate;\n var nextDate;\n var prevObj = baseExtend({}, getActualProperties(filterObject));\n var nextObj = baseExtend({}, getActualProperties(filterObject));\n var value = new Date(filterObject.value);\n if (filterObject.operator === 'equal' || filterObject.operator === 'notequal') {\n if (type === 'datetime') {\n prevDate = new Date(value.setSeconds(value.getSeconds() - 1));\n nextDate = new Date(value.setSeconds(value.getSeconds() + 2));\n filterObject.value = new Date(value.setSeconds(nextDate.getSeconds() - 1));\n }\n else {\n prevDate = new Date(value.setHours(0) - 1);\n nextDate = new Date(value.setHours(24));\n }\n prevObj.value = prevDate;\n nextObj.value = nextDate;\n if (filterObject.operator === 'equal') {\n prevObj.operator = 'greaterthan';\n nextObj.operator = 'lessthan';\n }\n else if (filterObject.operator === 'notequal') {\n prevObj.operator = 'lessthanorequal';\n nextObj.operator = 'greaterthanorequal';\n }\n var predicateSt = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n var predicateEnd = new Predicate(nextObj.field, nextObj.operator, nextObj.value, false);\n datePredicate = filterObject.operator === 'equal' ? predicateSt.and(predicateEnd) : predicateSt.or(predicateEnd);\n }\n else {\n if (typeof (prevObj.value) === 'string') {\n prevObj.value = new Date(prevObj.value);\n }\n var predicates = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n datePredicate = predicates;\n }\n if (filterObject.setProperties) {\n filterObject.setProperties({ ejpredicate: datePredicate }, true);\n }\n else {\n filterObject.ejpredicate = datePredicate;\n }\n return datePredicate;\n}\n/**\n * @hidden\n */\nexport function renderMovable(ele, frzCols) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < frzCols; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = frzCols, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n}\nexport function getObject(field, object) {\n if (field === void 0) { field = ''; }\n if (field) {\n var value = object;\n var splits = field.split('.');\n for (var i = 0; i < splits.length && !isNullOrUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n }\n}\nexport function getCustomDateFormat(format, colType) {\n var intl = new Internationalization();\n var formatvalue;\n var formatter = 'format';\n var type = 'type';\n if (colType === 'date') {\n formatvalue = typeof (format) === 'object' ?\n intl.getDatePattern({ type: format[type] ? format[type] : 'date', format: format[formatter] }, false) :\n intl.getDatePattern({ type: 'date', skeleton: format }, false);\n }\n else {\n formatvalue = typeof (format) === 'object' ?\n intl.getDatePattern({ type: format[type] ? format[type] : 'dateTime', format: format[formatter] }, false) :\n intl.getDatePattern({ type: 'dateTime', skeleton: format }, false);\n }\n return formatvalue;\n}\n","/**\n * AriaService\n * @hidden\n */\nvar AriaService = /** @class */ (function () {\n function AriaService() {\n }\n AriaService.prototype.setOptions = function (target, options) {\n var props = Object.keys(options);\n props.forEach(function (name) { return setStateAndProperties(target, config[name], options[name]); });\n };\n AriaService.prototype.setExpand = function (target, expand) {\n setStateAndProperties(target, config.expand, expand);\n };\n AriaService.prototype.setSort = function (target, direction) {\n setStateAndProperties(target, config.sort, direction, typeof direction === 'boolean');\n };\n AriaService.prototype.setBusy = function (target, isBusy) {\n setStateAndProperties(target, config.busy, isBusy);\n setStateAndProperties(target, config.invalid, null, true);\n };\n AriaService.prototype.setGrabbed = function (target, isGrabbed, remove) {\n setStateAndProperties(target, config.grabbed, isGrabbed, remove);\n };\n AriaService.prototype.setDropTarget = function (target, isTarget) {\n setStateAndProperties(target, config.dropeffect, 'copy', !isTarget);\n };\n return AriaService;\n}());\nexport { AriaService };\n/**\n * @hidden\n */\nfunction setStateAndProperties(target, attribute, value, remove) {\n if (remove) {\n target.removeAttribute(attribute);\n return;\n }\n if (target) {\n target.setAttribute(attribute, value);\n }\n}\nvar config = {\n expand: 'aria-expanded',\n role: 'role',\n selected: 'aria-selected',\n multiselectable: 'aria-multiselectable',\n sort: 'aria-sort',\n busy: 'aria-busy',\n invalid: 'aria-invalid',\n grabbed: 'aria-grabbed',\n dropeffect: 'aria-dropeffect',\n haspopup: 'aria-haspopup',\n level: 'aria-level',\n colcount: 'aria-colcount'\n};\n","import { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { uiUpdate, initialEnd, dataReady, modelChanged, refreshAggregates, refreshFooterRenderer, groupAggregates } from '../base/constant';\nimport { FooterRenderer } from '../renderer/footer-renderer';\nimport { SummaryCellRenderer } from '../renderer/summary-cell-renderer';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\n/**\n * Summary Action controller.\n */\nvar Aggregate = /** @class */ (function () {\n function Aggregate(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n Aggregate.prototype.getModuleName = function () {\n return 'aggregate';\n };\n Aggregate.prototype.initiateRender = function () {\n var _this = this;\n var cellFac = this.locator.getService('cellRendererFactory');\n var instance = new SummaryCellRenderer(this.parent, this.locator);\n [CellType.Summary, CellType.CaptionSummary, CellType.GroupSummary].forEach(function (type) {\n return cellFac.addCellRenderer(type, instance);\n });\n this.footerRenderer = new FooterRenderer(this.parent, this.locator);\n this.footerRenderer.renderPanel();\n this.footerRenderer.renderTable();\n this.locator.register('footerRenderer', this.footerRenderer);\n var fn = function () {\n _this.prepareSummaryInfo();\n _this.parent.off(dataReady, fn);\n };\n this.parent.on(dataReady, fn, this);\n this.parent.on(dataReady, this.footerRenderer.refresh, this.footerRenderer);\n };\n Aggregate.prototype.prepareSummaryInfo = function () {\n var _this = this;\n summaryIterator(this.parent.aggregates, function (column) {\n var dataColumn = _this.parent.getColumnByField(column.field) || {};\n var type = dataColumn.type;\n column.setPropertiesSilent({ format: _this.getFormatFromType(column.format, type) });\n column.setFormatter(_this.parent.locale);\n column.setPropertiesSilent({ columnName: column.columnName || column.field });\n });\n };\n Aggregate.prototype.getFormatFromType = function (format, type) {\n if (isNullOrUndefined(type) || typeof format !== 'string') {\n return format;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: format };\n break;\n case 'date':\n obj = { type: type, skeleton: format };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: format };\n break;\n }\n return obj;\n };\n Aggregate.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (isNullOrUndefined(this.footerRenderer)) {\n this.initiateRender();\n }\n this.prepareSummaryInfo();\n this.footerRenderer.refresh();\n var cModel = new CaptionSummaryModelGenerator(this.parent);\n var gModel = new GroupSummaryModelGenerator(this.parent);\n if (gModel.getData().length !== 0 || !cModel.isEmpty()) {\n this.parent.notify(modelChanged, {});\n }\n };\n Aggregate.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initialEnd, this.initiateRender, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n this.parent.on(refreshAggregates, this.refresh, this);\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.footerRenderer.removeEventListener();\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(dataReady, this.footerRenderer.refresh);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n this.parent.off(refreshAggregates, this.refresh);\n };\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n remove(this.parent.element.querySelector('.e-gridfooter'));\n };\n Aggregate.prototype.refresh = function (data) {\n var editedData = data instanceof Array ? data : [data];\n this.parent.notify(refreshFooterRenderer, editedData);\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(groupAggregates, editedData);\n }\n };\n return Aggregate;\n}());\nexport { Aggregate };\n/**\n * @private\n */\nexport function summaryIterator(aggregates, callback) {\n aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n callback(column, row);\n });\n });\n}\n","import { extend } from '@syncfusion/ej2-base';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { isEditable, getComplexFieldID, getObject, getCustomDateFormat } from '../base/util';\n/**\n * `DatePickerEditCell` is used to handle datepicker cell type editing.\n * @hidden\n */\nvar DatePickerEditCell = /** @class */ (function () {\n function DatePickerEditCell(parent) {\n this.parent = parent;\n }\n DatePickerEditCell.prototype.create = function (args) {\n /* tslint:disable-next-line:no-any */\n var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName, type: 'text', 'e-mappinguid': args.column.uid\n }\n });\n };\n DatePickerEditCell.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DatePickerEditCell.prototype.write = function (args) {\n if (args.column.editType === 'datepickeredit') {\n this.obj = new DatePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl), args.column.edit.params));\n }\n else if (args.column.editType === 'datetimepickeredit') {\n this.obj = new DateTimePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl), args.column.edit.params));\n }\n this.obj.appendTo(args.element);\n };\n DatePickerEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return DatePickerEditCell;\n}());\nexport { DatePickerEditCell };\nfunction dateanddatetimerender(args, mode, rtl) {\n var isInline = mode !== 'Dialog';\n var format = getCustomDateFormat(args.column.format, args.column.type);\n var value = getObject(args.column.field, args.rowData);\n value = value ? new Date(value) : null;\n return {\n floatLabelType: isInline ? 'Never' : 'Always',\n value: value,\n format: format,\n placeholder: isInline ?\n '' : args.column.headerText, enableRtl: rtl,\n enabled: isEditable(args.column, args.type, args.element),\n };\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { SvgRenderer, remove, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { RgbColor } from '../utils/colorMapping';\n/**\n * Helper method for heatmap\n */\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to measure the height and width of the text.\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('heatmapmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'heatmapmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.fontSize = (font.size).indexOf('px') !== -1 ? font.size : font.size + 'px';\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/** @private */\nvar TextElement = /** @class */ (function () {\n function TextElement(fontModel, fontColor) {\n this['font-size'] = fontModel.size;\n this['font-style'] = fontModel.fontStyle;\n this['font-family'] = fontModel.fontFamily;\n this['font-weight'] = fontModel.fontWeight;\n this.fill = fontColor ? fontColor : '';\n }\n return TextElement;\n}());\nexport { TextElement };\nexport function titlePositionX(width, leftPadding, rightPadding, titleStyle) {\n var positionX;\n if (titleStyle.textAlignment === 'Near') {\n positionX = leftPadding;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionX = leftPadding + width / 2;\n }\n else {\n positionX = width + leftPadding;\n }\n return positionX;\n}\n/**\n * Internal class size for height and width\n * @private\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color ? color : '';\n _this['stroke-width'] = parseFloat(width.toString());\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/**\n * Class to define currentRect private property.\n * @private\n */\nvar CurrentRect = /** @class */ (function () {\n function CurrentRect(x, y, width, height, value, id) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.value = value;\n this.id = id;\n }\n return CurrentRect;\n}());\nexport { CurrentRect };\n/**\n * Class to define property to draw rectangle.\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, borderColor, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, borderColor, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height > 0 ? rect.height : 0;\n _this.width = rect.width > 0 ? rect.width : 0;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Class to define property to draw circle.\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, borderColor, cx, cy, r) {\n var _this = _super.call(this, id, fill, border.width, borderColor, opacity) || this;\n _this.cx = cx ? cx : 0;\n _this.cy = cy ? cy : 0;\n _this.r = r ? r : 0;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/**\n * Helper Class to define property to draw rectangle.\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Class to define property to draw text.\n * @private\n */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, basic, element, fontColor) {\n var _this = _super.call(this, element, fontColor) || this;\n _this.transform = '';\n _this['dominant-baseline'] = 'auto';\n _this.labelRotation = 0;\n _this.baseline = 'auto';\n _this.id = id;\n _this.x = basic.x;\n _this.y = basic.y;\n _this['text-anchor'] = basic['text-anchor'];\n _this.text = basic.text;\n _this.transform = basic.transform;\n _this.labelRotation = basic.labelRotation;\n _this['dominant-baseline'] = basic['dominant-baseline'];\n _this.baseline = basic.baseline;\n _this.dy = basic.dy;\n return _this;\n }\n return TextOption;\n}(TextElement));\nexport { TextOption };\n/**\n * Helper Class to define property to draw text.\n * @private\n */\nvar TextBasic = /** @class */ (function () {\n function TextBasic(x, y, anchor, text, labelRotation, transform, baseLine, dy) {\n this.transform = '';\n this['dominant-baseline'] = 'auto';\n this.labelRotation = 0;\n this.baseline = 'auto';\n this.x = x ? x : 0;\n this.y = y ? y : 0;\n this['text-anchor'] = anchor ? anchor : '';\n this.text = text ? text : '';\n this.transform = transform ? transform : '';\n this.labelRotation = labelRotation;\n this['dominant-baseline'] = baseLine ? baseLine : '';\n this.baseline = baseLine ? baseLine : '';\n this.dy = dy ? dy : '';\n }\n return TextBasic;\n}());\nexport { TextBasic };\n/**\n * Class to define property to draw line.\n * @private\n */\nvar Line = /** @class */ (function () {\n function Line(x1, y1, x2, y2) {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n return Line;\n}());\nexport { Line };\n/**\n * Class to define property to draw line.\n * @private\n */\nvar LineOption = /** @class */ (function (_super) {\n __extends(LineOption, _super);\n function LineOption(id, line, stroke, strokewidth, opacity, dasharray) {\n var _this = _super.call(this, id, null, strokewidth, stroke, opacity, dasharray, null) || this;\n _this.x1 = line.x1;\n _this.y1 = line.y1;\n _this.x2 = line.x2;\n _this.y2 = line.y2;\n return _this;\n }\n return LineOption;\n}(PathOption));\nexport { LineOption };\n/**\n * Properties required to render path.\n * @private\n */\nvar PathAttributes = /** @class */ (function (_super) {\n __extends(PathAttributes, _super);\n function PathAttributes(id, path, fill, border, borderWidth, opacity, borderColor) {\n var _this = _super.call(this, id, fill, borderWidth, borderColor, opacity, null) || this;\n _this.d = path.d;\n _this.x = path.x;\n _this.y = path.y;\n return _this;\n }\n return PathAttributes;\n}(PathOption));\nexport { PathAttributes };\n/**\n * Helper Class to define property to path.\n * @private\n */\nvar Path = /** @class */ (function () {\n function Path(d, innerR, x, y, x1, y1, cx, cy, start, end, radius, counterClockWise) {\n this.d = d;\n this.innerR = innerR;\n this.cx = cx;\n this.cy = cy;\n this.x = x;\n this.y = y;\n this.x1 = x1;\n this.y1 = y1;\n this.start = start;\n this.end = end;\n this.radius = radius;\n this.counterClockWise = counterClockWise;\n }\n return Path;\n}());\nexport { Path };\n/** @private */\nexport function sum(values) {\n var sum = 0;\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n sum += value;\n }\n return sum;\n}\n/** @private */\nexport function titlePositionY(heatmapSize, topPadding, bottomPadding, titleStyle) {\n var positionY;\n if (titleStyle.textAlignment === 'Near') {\n positionY = heatmapSize.height - bottomPadding;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionY = heatmapSize.height / 2;\n }\n else {\n positionY = topPadding;\n }\n return positionY;\n}\n/** @private */\nexport function rotateTextSize(font, text, angle) {\n var renderer = new SvgRenderer('heatmapMeasureRotateText');\n var svgObject = renderer.createSvg({ id: 'heatmapMeasureRotateText_svg', width: 100, height: 100 });\n var box;\n var options;\n var htmlObject;\n options = {\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'transform': 'rotate(' + angle + ', 0, 0)',\n 'text-anchor': 'middle'\n };\n htmlObject = renderer.createText(options, text);\n svgObject.appendChild(htmlObject);\n document.body.appendChild(svgObject);\n box = htmlObject.getBoundingClientRect();\n remove(svgObject);\n return new Size((box.right - box.left), (box.bottom - box.top));\n}\n/**\n * Class to draw SVG and Canvas Rectangle & Text.\n * @private\n */\nvar DrawSvgCanvas = /** @class */ (function () {\n function DrawSvgCanvas(heatmap) {\n this.heatMap = heatmap;\n }\n //Svg & Canvas Rectangle Part\n DrawSvgCanvas.prototype.drawRectangle = function (properties, parentElement, isFromSeries) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawRectangle(properties));\n }\n else {\n this.drawCanvasRectangle(this.heatMap.canvasRenderer, properties, isFromSeries);\n }\n };\n //Svg & Canvas Bubble Part\n DrawSvgCanvas.prototype.drawCircle = function (properties, parentElement) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawCircle(properties));\n }\n else {\n this.drawCanvasCircle(this.heatMap.canvasRenderer, properties);\n }\n };\n //Svg & Canvas Pie Part\n DrawSvgCanvas.prototype.drawPath = function (properties, options, parentElement) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawPath(properties));\n }\n else {\n this.drawCanvasPath(this.heatMap.canvasRenderer, properties, options);\n }\n };\n //Svg & Canvas Text Part\n DrawSvgCanvas.prototype.createText = function (properties, parentElement, text) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.createText(properties, text));\n }\n else {\n this.canvasDrawText(properties, text);\n }\n };\n //Draw the wrapped text for both SVG & canvas\n DrawSvgCanvas.prototype.createWrapText = function (options, font, parentElement) {\n var renderOptions = {};\n var htmlObject;\n var tspanElement;\n var text;\n var height;\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': options.fill,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options['text-anchor'],\n 'transform': options.transform,\n 'dominant-baseline': options['dominant-baseline']\n };\n text = options.text[0];\n if (!this.heatMap.enableCanvasRendering) {\n htmlObject = this.heatMap.renderer.createText(renderOptions, text);\n }\n else {\n this.heatMap.canvasRenderer.drawText(options, text);\n }\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n if (!this.heatMap.enableCanvasRendering) {\n tspanElement = this.heatMap.renderer.createTSpan({\n 'x': options.x, 'id': options.id + i,\n 'y': (options.y) + (i * height)\n }, options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n else {\n options.id = options.id + i;\n options.y += height;\n this.heatMap.canvasRenderer.drawText(options, options.text[i]);\n }\n }\n }\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(htmlObject);\n }\n };\n DrawSvgCanvas.prototype.drawLine = function (properties, parentElement) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawLine(properties));\n }\n else {\n this.heatMap.canvasRenderer.drawLine(properties);\n }\n };\n //Canvas Text Part\n DrawSvgCanvas.prototype.canvasDrawText = function (options, label, translateX, translateY) {\n var ctx = this.heatMap.canvasRenderer.ctx;\n if (!translateX) {\n translateX = options.x;\n }\n if (!translateY) {\n translateY = options.y;\n }\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontSize = (options['font-size'].toString()).indexOf('px') === -1 ? options['font-size'] + 'px' : options['font-size'];\n var anchor = this.getOptionValue(options, 'text-anchor');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n if (anchor === 'middle') {\n anchor = 'center';\n }\n ctx.save();\n ctx.fillStyle = options.fill;\n ctx.font = font;\n ctx.textAlign = anchor;\n if (options.baseline) {\n ctx.textBaseline = options.baseline;\n }\n ctx.translate(translateX, translateY);\n ctx.rotate(options.labelRotation * Math.PI / 180);\n ctx.fillText(label, options.x - translateX, options.y - translateY);\n ctx.restore();\n };\n // method to get the attributes value\n /* tslint:disable */\n DrawSvgCanvas.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n DrawSvgCanvas.prototype.setAttributes = function (canvas, options) {\n canvas.ctx.lineWidth = options['stroke-width'];\n var dashArray = options['stroke-dasharray'];\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n canvas.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n canvas.ctx.strokeStyle = options['stroke'];\n };\n ;\n DrawSvgCanvas.prototype.drawCanvasRectangle = function (canvas, options, isFromSeries) {\n var canvasCtx = canvas.ctx;\n var cornerRadius = options.rx;\n canvas.ctx.save();\n canvas.ctx.beginPath();\n canvas.ctx.globalAlpha = options['opacity'];\n this.setAttributes(canvas, options);\n this.drawCornerRadius(canvas, options);\n if ((options['stroke-width'] && options['stroke-width'] != 0) || isFromSeries) {\n canvas.ctx.stroke();\n }\n canvas.ctx.restore();\n canvas.ctx = canvasCtx;\n };\n ;\n // To draw the corner of a rectangle\n DrawSvgCanvas.prototype.drawCornerRadius = function (canvas, options) {\n var cornerRadius = options.rx;\n var x = options.x;\n var y = options.y;\n var width = options.width;\n var height = options.height;\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n canvas.ctx.fillStyle = options.fill;\n if (width < 2 * cornerRadius) {\n cornerRadius = width / 2;\n }\n if (height < 2 * cornerRadius) {\n cornerRadius = height / 2;\n }\n canvas.ctx.beginPath();\n canvas.ctx.moveTo(x + width - cornerRadius, y);\n canvas.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n canvas.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n canvas.ctx.arcTo(x, y + height, x, y, cornerRadius);\n canvas.ctx.arcTo(x, y, x + width, y, cornerRadius);\n canvas.ctx.closePath();\n canvas.ctx.fill();\n };\n ;\n DrawSvgCanvas.prototype.drawCanvasCircle = function (canvas, options) {\n canvas.ctx.save();\n canvas.ctx.beginPath();\n canvas.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n canvas.ctx.fillStyle = options.fill;\n canvas.ctx.globalAlpha = options.opacity;\n canvas.ctx.fill();\n this.setAttributes(canvas, options);\n if (options['stroke-width'] && options['stroke-width'] !== 0) {\n canvas.ctx.stroke();\n }\n canvas.ctx.restore();\n };\n ;\n DrawSvgCanvas.prototype.drawCanvasPath = function (canvas, properties, options) {\n var path = properties.d;\n var dataSplit = path.split(' ');\n var borderWidth = this.getOptionValue(options, 'stroke-width');\n canvas.ctx.save();\n canvas.ctx.beginPath();\n canvas.ctx.globalAlpha = properties.opacity;\n canvas.ctx.fillStyle = properties.fill;\n this.setAttributes(canvas, properties);\n for (var i = 0; i < dataSplit.length; i = i + 3) {\n var x1 = parseFloat(dataSplit[i + 1]);\n var y1 = parseFloat(dataSplit[i + 2]);\n switch (dataSplit[i]) {\n case 'M':\n canvas.ctx.moveTo(x1, y1);\n break;\n case 'L':\n canvas.ctx.lineTo(x1, y1);\n break;\n case 'A':\n case 'a':\n canvas.ctx.arc(options.x, options.y, options.radius, (options.start * 0.0174533), (options.end * 0.0174533), false);\n i = dataSplit[i] === 'a' ? i + 13 : i + 5;\n break;\n case 'Z':\n canvas.ctx.closePath();\n break;\n }\n }\n canvas.ctx.fill();\n if (properties['stroke-width'] && properties['stroke-width'] !== 0) {\n canvas.ctx.stroke();\n }\n canvas.ctx.restore();\n };\n ;\n return DrawSvgCanvas;\n}());\nexport { DrawSvgCanvas };\nexport function getTitle(title, style, width) {\n var titleCollection = [];\n switch (style.textOverflow) {\n case 'Wrap':\n titleCollection = textWrap(title, width, style);\n break;\n case 'Trim':\n titleCollection.push(textTrim(width, title, style));\n break;\n default:\n titleCollection.push(textNone(width, title, style));\n break;\n }\n return titleCollection;\n}\nexport function textWrap(currentLabel, maximumWidth, font) {\n var textCollection = currentLabel.split(' ');\n var label = '';\n var labelCollection = [];\n var text;\n for (var i = 0, len = textCollection.length; i < len; i++) {\n text = textCollection[i];\n if (measureText(label.concat(text), font).width < maximumWidth) {\n label = label.concat((label === '' ? '' : ' ') + text);\n }\n else {\n if (label !== '') {\n labelCollection.push(textTrim(maximumWidth, label, font));\n label = text;\n }\n else {\n labelCollection.push(textTrim(maximumWidth, text, font));\n text = '';\n }\n }\n if (label && i === len - 1) {\n labelCollection.push(textTrim(maximumWidth, label, font));\n }\n }\n return labelCollection;\n}\n/** @private */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var index = textLength - 1; index >= 0; --index) {\n label = text.substring(0, index) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth) {\n return label;\n }\n }\n }\n return label;\n}\n/** @private */\nexport function textNone(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i);\n size = measureText(label, font).width;\n if (size <= maxWidth) {\n return label;\n }\n }\n }\n return label;\n}\n/** @private */\nvar Gradient = /** @class */ (function () {\n function Gradient(x, x1, x2, y1, y2) {\n this.id = x;\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n }\n return Gradient;\n}());\nexport { Gradient };\nvar GradientColor = /** @class */ (function () {\n function GradientColor(color, colorStop) {\n this.color = color;\n this.colorStop = colorStop;\n }\n return GradientColor;\n}());\nexport { GradientColor };\n/** @private */\nexport function showTooltip(text, x, y, areaWidth, id, element, isTouch, heatmap) {\n var tooltip = document.getElementById(id);\n var initialClip = heatmap.initialClipRect;\n var size = measureText(text, {\n fontFamily: 'Segoe UI', size: '12px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n });\n var width = size.width + 5;\n x = (x + width > areaWidth) ? x - width : x;\n x = x < 0 ? 5 : x;\n if (!tooltip) {\n tooltip = createElement('div', {\n innerHTML: text,\n id: id,\n styles: 'top:' + (y + 15).toString() + 'px;left:' + (x + 15).toString() +\n 'px;background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(112, 112, 112); padding-left : 3px; padding-right : 2px;' +\n 'padding-bottom : 2px; padding-top : 2px; font-size:12px; font-family: Segoe UI'\n });\n element.appendChild(tooltip);\n }\n else {\n tooltip.innerHTML = text;\n tooltip.style.top = (y + 15).toString() + 'px';\n tooltip.style.left = (x + 15).toString() + 'px';\n }\n if (text === heatmap.titleSettings.text) {\n tooltip.style.width = (x + 15) + size.width + 7 > heatmap.availableSize.width ?\n (heatmap.availableSize.width - (x + 15)).toString() + 'px' : '';\n }\n else {\n tooltip.style.left = (x + 15) + size.width + 7 > heatmap.availableSize.width ?\n (heatmap.availableSize.width - (size.width + 7)).toString() + 'px' : x.toString() + 'px';\n tooltip.style.top = (y + 15) + size.height + 6 > heatmap.availableSize.height ?\n (initialClip.height + initialClip.y - (size.height + 6) + 5).toString() + 'px' : tooltip.style.top; // 6 and 7 are padding and border width\n }\n if (isTouch) {\n setTimeout(function () { removeElement(id); }, 1500);\n }\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function increaseDateTimeInterval(value, interval, intervalType, increment) {\n var result = new Date(value);\n interval = Math.ceil(interval * increment);\n switch (intervalType) {\n case 'Years':\n result.setFullYear(result.getFullYear() + interval);\n break;\n case 'Months':\n result.setMonth(result.getMonth() + interval);\n break;\n case 'Days':\n result.setDate(result.getDate() + interval);\n break;\n case 'Hours':\n result.setHours(result.getHours() + interval);\n break;\n case 'Minutes':\n result.setMinutes(result.getMinutes() + interval);\n break;\n }\n return result;\n}\n/* private */\nvar CanvasTooltip = /** @class */ (function () {\n function CanvasTooltip(text, rect) {\n this.region = new Rect(0, 0, 0, 0);\n this.text = text;\n this.region = rect;\n }\n return CanvasTooltip;\n}());\nexport { CanvasTooltip };\n/* private*/\n/* Method to get the tool tip text in canvas based on region. */\nexport function getTooltipText(tooltipCollection, xPosition, yPosition) {\n var length = tooltipCollection.length;\n var tooltip;\n var region;\n var text;\n for (var i = 0; i < length; i++) {\n tooltip = tooltipCollection[i];\n region = tooltip.region;\n if (xPosition >= region.x && xPosition <= (region.x + region.width) && yPosition >= region.y && yPosition <= (region.y + region.height)) {\n text = tooltip.text;\n break;\n }\n }\n return text;\n}\n/**\n * @private\n */\nvar PaletterColor = /** @class */ (function () {\n function PaletterColor() {\n }\n return PaletterColor;\n}());\nexport { PaletterColor };\n/**\n * @private\n */\nvar GradientPointer = /** @class */ (function () {\n function GradientPointer(pathX1, pathY1, pathX2, pathY2, pathX3, pathY3) {\n this.pathX1 = pathX1;\n this.pathY1 = pathY1;\n this.pathX2 = pathX2;\n this.pathY2 = pathY2;\n this.pathX3 = pathX3;\n this.pathY3 = pathY3;\n }\n return GradientPointer;\n}());\nexport { GradientPointer };\n/**\n * Class to define currentRect private property.\n * @private\n */\nvar CurrentLegendRect = /** @class */ (function () {\n function CurrentLegendRect(x, y, width, height, label, id) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.label = label;\n this.id = id;\n }\n return CurrentLegendRect;\n}());\nexport { CurrentLegendRect };\n/** @private */\nexport function colorNameToHex(color) {\n var element;\n color = color === 'transparent' ? 'white' : color;\n element = document.getElementById('heatmapmeasuretext');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n var exp = /^(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/;\n var isRGBValue = exp.exec(color);\n return convertToHexCode(new RgbColor(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\n}\n/** @private */\nexport function convertToHexCode(value) {\n return '#' + componentToHex(value.R) + componentToHex(value.G) + componentToHex(value.B);\n}\n/** @private */\nexport function componentToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/** @private */\nexport function convertHexToColor(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new RgbColor(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new RgbColor(255, 255, 255);\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { SvgRenderer, compile as templateComplier, remove, merge, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Specifies Linear-Gauge Helper methods\n */\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('gauge-measuretext');\n var size;\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'gauge-measuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n size = new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n //remove(htmlObject);\n return size;\n}\n/** @private */\nexport function withInRange(value, start, end, max, min, type) {\n var withIn;\n if (type === 'pointer') {\n withIn = (((value <= max) && (value >= min)));\n }\n else {\n withIn = (start != null && (start <= max) && (start >= min)) && (end != null && (end <= max) && (end >= min));\n }\n return withIn;\n}\nexport function convertPixelToValue(parentElement, pointerElement, orientation, axis, type, location) {\n var elementRect = parentElement.getBoundingClientRect();\n var pointerRect = pointerElement.getBoundingClientRect();\n var height = (pointerElement.id.indexOf('MarkerPointer') > -1) ? (pointerRect.height / 2) :\n (!axis.isInversed) ? 0 : pointerRect.height;\n var width = (pointerElement.id.indexOf('MarkerPointer') > -1) ? (pointerRect.width / 2) :\n (!axis.isInversed) ? pointerRect.width : 0;\n var size = new Size(axis.lineBounds.width, axis.lineBounds.height);\n var y = (type === 'drag') ? (location.y - axis.lineBounds.y) :\n ((pointerRect.top + height) - elementRect.top - axis.lineBounds.y);\n var x = (type === 'drag') ? (location.x - axis.lineBounds.x) :\n ((pointerRect.left + width) - elementRect.left - axis.lineBounds.x);\n var newSize = (orientation === 'Vertical') ? size.height : size.width;\n var divideVal = (orientation === 'Vertical') ? y : x;\n var value = (orientation === 'Vertical') ? (axis.isInversed) ? (divideVal / newSize) :\n (1 - (divideVal / newSize)) : (axis.isInversed) ? (1 - (divideVal / newSize)) : (divideVal / newSize);\n value = value * (axis.visibleRange.delta) + axis.visibleRange.min;\n return value;\n}\nexport function getPathToRect(path, size, parentElement) {\n var tempDiv = document.getElementById('gauge_path');\n if (tempDiv === null) {\n tempDiv = createElement('text', { id: 'gauge_path' });\n tempDiv.style.position = 'absolute';\n tempDiv.style.top = '0px';\n tempDiv.style.left = '0px';\n parentElement.appendChild(tempDiv);\n }\n var render = new SvgRenderer('id');\n var svg = render.createSvg({ id: 'box_path', width: size.width, height: size.height });\n svg.appendChild(path);\n tempDiv.appendChild(svg);\n var svgRect = path.getBBox();\n remove(tempDiv);\n return svgRect;\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function isPointerDrag(axes) {\n var pointerEnable = false;\n axes.map(function (axis, index) {\n axis.pointers.map(function (pointer, index) {\n if (pointer.enableDrag) {\n pointerEnable = true;\n }\n });\n });\n return pointerEnable;\n}\n/** @private */\nexport function valueToCoefficient(value, axis, orientation, range) {\n var result = (value - range.min) / range.delta;\n result = (orientation === 'Vertical') ? (!axis.isInversed) ? (1 - result) : result : (!axis.isInversed) ? result : (1 - result);\n return result;\n}\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\nexport function textFormatter(format, data, gauge) {\n if (isNullOrUndefined(format)) {\n return null;\n }\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n format = format.split('${' + key + '}').join(formatValue(data[key], gauge).toString());\n }\n return format;\n}\nexport function formatValue(value, gauge) {\n var formatValue;\n var formatFunction;\n if (gauge.format && !isNaN(Number(value))) {\n formatFunction = gauge.intl.getNumberFormat({ format: gauge.format, useGrouping: gauge.useGroupingSeparator });\n formatValue = formatFunction(Number(value));\n }\n else {\n formatValue = value;\n }\n return formatValue ? formatValue : '';\n}\n/** @private */\nexport function getLabelFormat(format) {\n var customLabelFormat = format && format.match('{value}') !== null;\n var skeleton = customLabelFormat ? '' : format;\n return skeleton;\n}\n/** @private */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/** @private */\nexport function getElementOffset(childElement, parentElement) {\n var width;\n var height;\n parentElement.appendChild(childElement);\n width = childElement.offsetWidth;\n height = childElement.offsetHeight;\n parentElement.removeChild(childElement);\n return new Size(width, height);\n}\n/** @private */\nvar VisibleRange = /** @class */ (function () {\n function VisibleRange(min, max, interval, delta) {\n this.min = min;\n this.max = max;\n this.interval = interval;\n this.delta = delta;\n }\n return VisibleRange;\n}());\nexport { VisibleRange };\n/** @private */\nvar GaugeLocation = /** @class */ (function () {\n function GaugeLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return GaugeLocation;\n}());\nexport { GaugeLocation };\n/**\n * Internal class size for height and width\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d, transform) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n _this.transform = transform;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function () {\n function RectOption(id, fill, border, opacity, rect, transform, dashArray) {\n this.opacity = opacity;\n this.id = id;\n this.y = rect.y;\n this.x = rect.x;\n this.fill = fill;\n this.stroke = border.color;\n this['stroke-width'] = border.width;\n this.height = rect.height;\n this.width = rect.width;\n }\n return RectOption;\n}());\nexport { RectOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, size) {\n this.text = text;\n this.value = value;\n this.size = size;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n/** @private */\nvar Align = /** @class */ (function () {\n function Align(axisIndex, align) {\n this.align = align;\n this.axisIndex = axisIndex;\n }\n return Align;\n}());\nexport { Align };\n/** @private */\nexport function textElement(options, font, color, parent) {\n var renderOptions = {};\n var htmlObject;\n var renderer = new SvgRenderer('');\n var style = 'fill:' + color + '; font-size:' + font.size +\n '; font-style:' + font.fontStyle + ' ; font-weight:' + font.fontWeight + '; font-family:' +\n font.fontFamily + '; text-anchor:' + options.anchor + '; transform:' + options.transform +\n '; opacity:' + font.opacity + '; dominant-baseline:' + options.baseLine + ';';\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'style': style\n };\n htmlObject = renderer.createText(renderOptions, options.text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nexport function calculateNiceInterval(min, max, size, orientation) {\n var delta = max - min;\n var currentInterval;\n var intervalDivs = [10, 5, 2, 1];\n var desiredIntervalsCount = getActualDesiredIntervalsCount(size, orientation);\n var niceInterval = delta / desiredIntervalsCount;\n var minInterval = Math.pow(10, Math.floor(Math.log(niceInterval) / Math.log(10)));\n for (var _i = 0, intervalDivs_1 = intervalDivs; _i < intervalDivs_1.length; _i++) {\n var interval = intervalDivs_1[_i];\n currentInterval = minInterval * interval;\n if (desiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n}\nexport function getActualDesiredIntervalsCount(size, orientation) {\n var maximumLabels = 5;\n var desiredIntervalsCount = (orientation === 'Horizontal' ? 0.533 : 1) * maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n}\n/** @private */\nexport function getPointer(target, gauge) {\n var split = [];\n var axisIndex;\n var radix = 10;\n var pointIndex;\n var axis;\n var pointer;\n split = target.id.split('_');\n axisIndex = parseInt(split[2], radix);\n pointIndex = parseInt(split[4], radix);\n axis = gauge.axes[axisIndex];\n pointer = gauge.axes[axisIndex].pointers[pointIndex];\n return { axis: axis, axisIndex: axisIndex, pointer: pointer, pointerIndex: pointIndex };\n}\n/** @private */\nexport function getRangeColor(value, ranges) {\n var rangeColor = null;\n ranges.forEach(function (range, index) {\n if (value >= range.start && range.end >= value) {\n rangeColor = range.interior;\n }\n });\n return rangeColor;\n}\n/** @private */\nexport function getRangePalette() {\n var palette = ['#ff5985', '#ffb133', '#fcde0b', '#27d5ff', '#50c917'];\n return palette;\n}\n/** @private */\nexport function calculateShapes(location, shape, size, url, options, orientation, axis, pointer) {\n var path;\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var radius;\n switch (shape) {\n case 'Circle':\n radius = ((width + height) / 4);\n locX = (orientation === 'Vertical') ? (!axis.opposedPosition) ? (pointer.placement !== 'Far') ? locX - radius : locX + radius :\n pointer.placement === 'Near' ? locX - radius : locX + radius : locX;\n locY = (orientation === 'Vertical') ? locY : (!axis.opposedPosition) ? (pointer.placement === 'Far') ?\n locY + radius : locY - radius : (pointer.placement === 'Near') ? locY - radius : locY + radius;\n merge(options, { 'r': radius, 'cx': locX, 'cy': locY });\n break;\n case 'Diamond':\n case 'Rectangle':\n locX = (orientation === 'Horizontal') ? ((locX - (width / 2))) : ((!axis.opposedPosition && pointer.placement !== 'Far') ||\n (axis.opposedPosition && pointer.placement === 'Near')) ? locX - width : locX;\n locY = (orientation === 'Vertical') ? locY : (!axis.opposedPosition) ?\n (pointer.placement === 'Far') ? locY + (height / 2) : locY - (height / 2) :\n (pointer.placement === 'Near') ? locY - (height / 2) : locY + (height / 2);\n if (shape === 'Diamond') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + locY + ' z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY - (height / 2)) + ' z';\n }\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX - width) + ' ' + (locY - (height / 2)) +\n 'L' + (locX - width) + ' ' + (locY + (height / 2)) + ' Z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY - height) +\n 'L' + (locX - (width / 2)) + ' ' + (locY - height) + ' Z';\n }\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + width) + ' ' + (locY - (height / 2)) +\n 'L' + (locX + width) + ' ' + (locY + (height / 2)) + ' Z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY + height) +\n 'L' + (locX - (width / 2)) + ' ' + (locY + height) + ' Z';\n }\n merge(options, { 'd': path });\n break;\n case 'Arrow':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX - width) + ' '\n + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX - width) + ' ' + ((locY + (height / 2)) -\n (height / 4)) + ' ' + 'L' + (locX - (width / 2)) + ' ' + ((locY + (height / 2)) - (height / 4)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + (locY + height / 2) + 'z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ((locX + (width / 2)) - (width / 4)) + ' ' + (locY - (height / 2)) + ' ' + 'L' + ((locX + (width / 2)) -\n (width / 4)) + ' ' + (locY - height) + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY - height) +\n ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY - (height / 2)) + ' ' + 'L' + (locX - (width / 2))\n + ' ' + (locY - (height / 2)) + 'z';\n }\n merge(options, { 'd': path });\n break;\n case 'InvertedArrow':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + 'L' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX + width) + ' '\n + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX + width) + ' ' + ((locY + (height / 2)) - (height / 4))\n + ' ' + 'L' + (locX + (width / 2)) + ' ' + ((locY + (height / 2)) - (height / 4)) + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY + height / 2) + 'z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ((locX + (width / 2)) - (width / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ((locX + (width / 2)) -\n (width / 4)) + ' ' + (locY + height) + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY + height)\n + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + (locY + (height / 2)) + 'z';\n }\n merge(options, { 'd': path });\n break;\n case 'Image':\n merge(options, { 'href': url, 'height': height, 'width': width, x: locX - (width / 2), y: locY - (height / 2) });\n break;\n }\n return options;\n}\n/** @private */\nexport function getBox(location, boxName, orientation, size, type, containerWidth, axis, cornerRadius) {\n var path = ' ';\n var radius = cornerRadius;\n var x1;\n var y1;\n var rectWidth;\n var rectHeight;\n var bottomRadius;\n var topRadius;\n switch (boxName) {\n case 'RoundedRectangle':\n x1 = location.x;\n y1 = location.y;\n rectWidth = location.width;\n rectHeight = location.height;\n path = 'M' + ' ' + x1 + ' ' + (radius + y1) + ' Q ' + x1 + ' ' + y1 + ' ' + (x1 + radius) + ' ' + y1 + ' ';\n path += 'L' + ' ' + (x1 + rectWidth - radius) + ' ' + y1 + ' Q ' + (x1 + rectWidth) + ' ' + y1 + ' '\n + (x1 + rectWidth) + ' ' + (y1 + radius) + ' ';\n path += 'L ' + (x1 + rectWidth) + ' ' + (y1 + rectHeight - radius) + ' Q ' + (x1 + rectWidth) + ' ' + (y1 + rectHeight)\n + ' ' + (x1 + rectWidth - radius) + ' ' + (y1 + rectHeight) + ' ';\n path += ' L ' + (x1 + radius) + ' ' + (y1 + rectHeight) + ' Q ' + x1 + ' ' + (y1 + rectHeight)\n + ' ' + x1 + ' ' + (y1 + rectHeight - radius) + ' ';\n path += 'L' + ' ' + x1 + ' ' + (radius + y1) + ' ' + 'z';\n break;\n case 'Thermometer':\n var width = (orientation === 'Vertical') ? location.width : location.height;\n bottomRadius = width + ((width / 2) / Math.PI);\n topRadius = width / 2;\n if (orientation === 'Vertical') {\n var addValue = ((containerWidth + ((containerWidth / 2) / Math.PI)) - bottomRadius);\n var y1_1 = (type === 'bar') ? location.y + addValue : location.y;\n var locY = (type === 'bar') ? location.y + (topRadius - (topRadius / Math.PI)) : location.y;\n var locHeight = location.height;\n path = 'M' + location.x + ' ' + (y1_1 + locHeight) +\n ' A ' + bottomRadius + ' ' + bottomRadius + ', 0, 1, 0, ' + (location.x + location.width) + ' ' + (y1_1 + locHeight) +\n ' L ' + (location.x + location.width) + ' ' + locY +\n ' A ' + topRadius + ' ' + topRadius + ', 0, 1, 0, ' + location.x + ' ' + locY + ' z ';\n }\n else {\n var x1_1 = (type === 'bar' && !axis.isInversed) ?\n location.x - ((containerWidth + ((containerWidth / 2) / Math.PI)) - bottomRadius) : location.x;\n var locWidth = (type === 'bar') ? (location.width - (topRadius - ((topRadius / Math.PI)))) : location.width;\n path = 'M' + x1_1 + ' ' + (location.y) +\n ' A ' + bottomRadius + ' ' + bottomRadius + ', 0, 1, 0, ' + x1_1 + ' ' + (location.y + location.height) +\n ' L ' + ((type === 'bar' ? location.x : x1_1) + locWidth) + ' ' + (location.y + location.height) +\n ' A ' + topRadius + ' ' + topRadius + ', 0, 1, 0, ' +\n ((type === 'bar' ? location.x : x1_1) + locWidth) + ' ' + (location.y) + ' z ';\n }\n break;\n }\n return path;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * Helper functions for maps control\n */\nimport { SvgRenderer, createElement, isNullOrUndefined, remove, compile as templateComplier, merge } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../index';\n/**\n * Maps internal use of `Size` type\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/**\n * To find number from string\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Method to calculate the width and height of the maps\n */\nexport function calculateSize(maps) {\n var containerWidth = maps.element.clientWidth;\n var containerHeight = maps.element.clientHeight;\n maps.availableSize = new Size(stringToNumber(maps.width, containerWidth) || containerWidth || 600, stringToNumber(maps.height, containerHeight) || containerHeight || (maps.isDevice ?\n Math.min(window.innerWidth, window.innerHeight) : 450));\n}\n/**\n * Method to create svg for maps.\n */\nexport function createSvg(maps) {\n maps.renderer = new SvgRenderer(maps.element.id);\n calculateSize(maps);\n maps.svgObject = maps.renderer.createSvg({\n id: maps.element.id + '_svg',\n width: maps.availableSize.width,\n height: maps.availableSize.height\n });\n}\nexport function getMousePosition(pageX, pageY, element) {\n var elementRect = element.getBoundingClientRect();\n var pageXOffset = element.ownerDocument.defaultView.pageXOffset;\n var pageYOffset = element.ownerDocument.defaultView.pageYOffset;\n var clientTop = element.ownerDocument.documentElement.clientTop;\n var clientLeft = element.ownerDocument.documentElement.clientLeft;\n var positionX = elementRect.left + pageXOffset - clientLeft;\n var positionY = elementRect.top + pageYOffset - clientTop;\n return new MapLocation((pageX - positionX), (pageY - positionY));\n}\n/**\n * Method to convert degrees to radians\n */\nexport function degreesToRadians(deg) {\n return deg * (Math.PI / 180);\n}\n/**\n * Convert radians to degrees method\n */\nexport function radiansToDegrees(radian) {\n return radian * (180 / Math.PI);\n}\n/**\n * Method for converting from latitude and longitude values to points\n */\nexport function convertGeoToPoint(latitude, longitude, factor, layer, mapModel) {\n var mapSize = new Size(mapModel.mapAreaRect.width, mapModel.mapAreaRect.height);\n var x;\n var y;\n var value;\n var lat;\n var lng;\n var temp;\n var longitudeMinMax = mapModel.baseMapBounds.longitude;\n var latitudeMinMax = mapModel.baseMapBounds.latitude;\n var latRadian = degreesToRadians(latitude);\n var lngRadian = degreesToRadians(longitude);\n var type = mapModel.projectionType;\n var size = (mapModel.isTileMap) ? Math.pow(2, 1) * 256 : (isNullOrUndefined(factor)) ? Math.min(mapSize.width, mapSize.height) :\n (Math.min(mapSize.width, mapSize.height) * factor);\n if (layer.geometryType === 'Normal') {\n x = isNullOrUndefined(factor) ? longitude : Math.abs((longitude - longitudeMinMax.min) * factor);\n y = isNullOrUndefined(factor) ? latitude : Math.abs((latitudeMinMax.max - latitude) * factor);\n }\n else if (layer.geometryType === 'Geographic') {\n switch (type) {\n case 'Mercator':\n var pixelOrigin = new Point(size / 2, size / 2);\n x = pixelOrigin.x + longitude * (size / 360);\n var sinY = calculateBound(Math.sin(degreesToRadians(latitude)), -0.9999, 0.9999);\n y = pixelOrigin.y + 0.5 * (Math.log((1 + sinY) / (1 - sinY))) * (-(size / (2 * Math.PI)));\n break;\n case 'Winkel3':\n value = aitoff(lngRadian, latRadian);\n lng = (value.x + lngRadian / (Math.PI / 2)) / 2;\n lat = (value.y + latRadian) / 2;\n break;\n case 'Miller':\n lng = lngRadian;\n lat = (1.25 * Math.log(Math.tan((Math.PI / 4) + (.4 * latRadian))));\n break;\n case 'Eckert3':\n temp = Math.sqrt(Math.PI * (4 + Math.PI));\n lng = 2 / temp * lngRadian * (1 + Math.sqrt(1 - 4 * latRadian * latRadian / (Math.PI * Math.PI)));\n lat = 4 / temp * latRadian;\n break;\n case 'AitOff':\n value = aitoff(lngRadian, latRadian);\n lng = value.x;\n lat = value.y;\n break;\n case 'Eckert5':\n lng = lngRadian * (1 + Math.cos(latRadian)) / Math.sqrt(2 + Math.PI);\n lat = 2 * latRadian / Math.sqrt(2 + Math.PI);\n break;\n case 'Equirectangular':\n lng = lngRadian;\n lat = latRadian;\n break;\n case 'Eckert6':\n var epsilon = 1e-6;\n temp = (1 + (Math.PI / 2)) * Math.sin(latRadian);\n var delta = Infinity;\n for (var i = 0; i < 10 && Math.abs(delta) > epsilon; i++) {\n delta = (latRadian + (Math.sin(latRadian)) - temp) / (1 + Math.cos(latRadian));\n latRadian = latRadian - delta;\n }\n temp = Math.sqrt(2 + Math.PI);\n lng = lngRadian * (1 + Math.cos(latRadian)) / temp;\n lat = 2 * latRadian / temp;\n break;\n }\n x = (type === 'Mercator') ? x : roundTo(xToCoordinate(mapModel, radiansToDegrees(lng)), 3);\n y = (type === 'Mercator') ? y : (-(roundTo(yToCoordinate(mapModel, radiansToDegrees(lat)), 3)));\n }\n return new Point(x, y);\n}\n/**\n * Converting tile latitude and longitude to point\n */\nexport function convertTileLatLongToPoint(center, zoomLevel, tileTranslatePoint, isMapCoordinates) {\n var size = Math.pow(2, zoomLevel) * 256;\n var x = (center.x + 180) / 360;\n var sinLatitude = Math.sin(center.y * Math.PI / 180);\n var y = 0.5 - Math.log((1 + sinLatitude) / (1 - sinLatitude)) / (4 * Math.PI);\n var pixelX = center.x;\n var pixelY = center.y;\n if (isMapCoordinates) {\n pixelX = (x * size + 0.5) + tileTranslatePoint.x;\n pixelY = (y * size + 0.5) + tileTranslatePoint.y;\n }\n return { x: pixelX, y: pixelY };\n}\n/**\n * Method for calculate x point\n */\nexport function xToCoordinate(mapObject, val) {\n var longitudeMinMax = mapObject.baseMapBounds.longitude;\n var totalSize = isNullOrUndefined(mapObject.baseSize) ? mapObject.mapAreaRect.width : mapObject.mapAreaRect.width +\n (Math.abs(mapObject.baseSize.width - mapObject.mapAreaRect.width) / 2);\n return Math.round(totalSize * (val - longitudeMinMax.min) / (longitudeMinMax.max - longitudeMinMax.min) * 100) / 100;\n}\n/**\n * Method for calculate y point\n */\nexport function yToCoordinate(mapObject, val) {\n var latitudeMinMax = mapObject.baseMapBounds.latitude;\n return Math.round(mapObject.mapAreaRect.height * (val - latitudeMinMax.min) / (latitudeMinMax.max - latitudeMinMax.min) * 100) / 100;\n}\n/**\n * Method for calculate aitoff projection\n */\nexport function aitoff(x, y) {\n var cosy = Math.cos(y);\n var sincia = sinci(acos(cosy * Math.cos(x /= 2)));\n return new Point(2 * cosy * Math.sin(x) * sincia, Math.sin(y) * sincia);\n}\n/**\n * Method to round the number\n */\nexport function roundTo(a, b) {\n var c = Math.pow(10, b);\n return (Math.round(a * c) / c);\n}\nexport function sinci(x) {\n return x / Math.sin(x);\n}\nexport function acos(a) {\n return Math.acos(a);\n}\n/**\n * Method to calculate bound\n */\nexport function calculateBound(value, min, max) {\n if (!isNullOrUndefined(min)) {\n value = Math.max(value, min);\n }\n if (!(isNullOrUndefined(max))) {\n value = Math.min(value, max);\n }\n return value;\n}\n/**\n * Map internal class for point\n */\nvar Point = /** @class */ (function () {\n function Point(x, y) {\n this.x = x;\n this.y = y;\n }\n return Point;\n}());\nexport { Point };\n/**\n * Map internal class for min and max\n *\n */\nvar MinMax = /** @class */ (function () {\n function MinMax(min, max) {\n this.min = min;\n this.max = max;\n }\n return MinMax;\n}());\nexport { MinMax };\n/**\n * Map internal class locations\n */\nvar GeoLocation = /** @class */ (function () {\n function GeoLocation(latitude, longitude) {\n this.latitude = new MinMax(latitude.min, latitude.max);\n this.longitude = new MinMax(longitude.min, longitude.max);\n }\n return GeoLocation;\n}());\nexport { GeoLocation };\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('mapsmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'mapsmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n this.transform = '';\n this.baseLine = 'auto';\n this.id = id;\n this.x = x;\n this.y = y;\n this.anchor = anchor;\n this.text = text;\n this.transform = transform;\n this.baseLine = baseLine;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * Internal use of path options\n * @private\n */\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n this.id = id;\n this.opacity = opacity;\n this.fill = fill;\n this.stroke = color;\n this['stroke-width'] = width;\n this['stroke-dasharray'] = dashArray;\n this.d = d;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Internal use of circle options\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/**\n * Internal use of polygon options\n * @private\n */\nvar PolygonOption = /** @class */ (function (_super) {\n __extends(PolygonOption, _super);\n function PolygonOption(id, points, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n var _this = _super.call(this, id, fill, width, color, opacity, dashArray) || this;\n _this.points = points;\n return _this;\n }\n return PolygonOption;\n}(PathOption));\nexport { PolygonOption };\n/**\n * Internal use of polyline options\n * @private\n */\nvar PolylineOption = /** @class */ (function (_super) {\n __extends(PolylineOption, _super);\n function PolylineOption(id, points, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n return _super.call(this, id, points, fill, width, color, opacity, dashArray) || this;\n }\n return PolylineOption;\n}(PolygonOption));\nexport { PolylineOption };\n/**\n * Internal use of line options\n * @private\n */\nvar LineOption = /** @class */ (function (_super) {\n __extends(LineOption, _super);\n function LineOption(id, line, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n var _this = _super.call(this, id, fill, width, color, opacity, dashArray) || this;\n _this.x1 = line.x1;\n _this.y1 = line.y1;\n _this.x2 = line.x2;\n _this.y2 = line.y2;\n return _this;\n }\n return LineOption;\n}(PathOption));\nexport { LineOption };\n/**\n * Internal use of line\n * @property\n */\nvar Line = /** @class */ (function () {\n function Line(x1, y1, x2, y2) {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n return Line;\n}());\nexport { Line };\n/**\n * Internal use of map location type\n */\nvar MapLocation = /** @class */ (function () {\n function MapLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return MapLocation;\n}());\nexport { MapLocation };\n/**\n * Internal use of type rect\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Internal use for pattern creation.\n * @property\n */\nvar PatternOptions = /** @class */ (function () {\n function PatternOptions(id, x, y, width, height, patternUnits, patternContentUnits, patternTransform, href) {\n if (patternUnits === void 0) { patternUnits = 'userSpaceOnUse'; }\n if (patternContentUnits === void 0) { patternContentUnits = 'userSpaceOnUse'; }\n if (patternTransform === void 0) { patternTransform = ''; }\n if (href === void 0) { href = ''; }\n this.id = id;\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.patternUnits = patternUnits;\n this.patternContentUnits = patternContentUnits;\n this.patternTransform = patternTransform;\n this.href = href;\n }\n return PatternOptions;\n}());\nexport { PatternOptions };\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n var text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n var tspanElement;\n var renderer = new SvgRenderer('');\n var height;\n var htmlObject = renderer.createText(renderOptions, text);\n htmlObject.style['user-select'] = 'none';\n htmlObject.style['-moz-user-select'] = 'none';\n htmlObject.style['-webkit-touch-callout'] = 'none';\n htmlObject.style['-webkit-user-select'] = 'none';\n htmlObject.style['-khtml-user-select'] = 'none';\n htmlObject.style['-ms-user-select'] = 'none';\n htmlObject.style['-o-user-select'] = 'none';\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + ((isMinus) ? -(i * height) : (i * height))\n }, isMinus ? options.text[options.text.length - (i + 1)] : options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * @private\n */\nexport function convertElement(element, markerId, data, index, mapObj) {\n var childElement = createElement('div', {\n id: markerId,\n styles: 'position: absolute;pointer-events: auto;'\n });\n while (element.length > 0) {\n childElement.appendChild(element[0]);\n }\n var templateHtml = childElement.innerHTML;\n var properties = Object.keys(data);\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].toLowerCase() !== 'latitude' && properties[i].toLowerCase() !== 'longitude') {\n templateHtml = templateHtml.replace(new RegExp('{{:' + properties[i] + '}}', 'g'), data[properties[i].toString()]);\n }\n }\n childElement.innerHTML = templateHtml;\n return childElement;\n}\nexport function convertElementFromLabel(element, labelId, data, index, mapObj) {\n var labelEle = isNullOrUndefined(element.childElementCount) ? element[0] : element;\n var templateHtml = labelEle.outerHTML;\n var properties = Object.keys(data);\n for (var i = 0; i < properties.length; i++) {\n templateHtml = templateHtml.replace(new RegExp('{{:' + properties[i] + '}}', 'g'), data[properties[i].toString()]);\n }\n return createElement('div', {\n id: labelId,\n innerHTML: templateHtml,\n styles: 'position: absolute'\n });\n}\n/**\n * Internal use of append shape element\n * @private\n */\nexport function appendShape(shape, element) {\n if (element) {\n element.appendChild(shape);\n }\n return shape;\n}\n/**\n * Internal rendering of Circle\n * @private\n */\nexport function drawCircle(maps, options, element) {\n return appendShape(maps.renderer.drawCircle(options), element);\n}\n/**\n * Internal rendering of Rectangle\n * @private\n */\nexport function drawRectangle(maps, options, element) {\n return appendShape(maps.renderer.drawRectangle(options), element);\n}\n/**\n * Internal rendering of Path\n * @private\n */\nexport function drawPath(maps, options, element) {\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Polygon\n * @private\n */\nexport function drawPolygon(maps, options, element) {\n return appendShape(maps.renderer.drawPolygon(options), element);\n}\n/**\n * Internal rendering of Polyline\n * @private\n */\nexport function drawPolyline(maps, options, element) {\n return appendShape(maps.renderer.drawPolyline(options), element);\n}\n/**\n * Internal rendering of Line\n * @private\n */\nexport function drawLine(maps, options, element) {\n return appendShape(maps.renderer.drawLine(options), element);\n}\n/**\n * @private\n * Calculate marker shapes\n */\nexport function calculateShapes(maps, shape, options, size, location, markerEle) {\n var tempGroup;\n switch (shape) {\n case 'Balloon':\n tempGroup = drawBalloon(maps, options, size, location, markerEle);\n break;\n case 'Cross':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height\n / 2) + ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n break;\n case 'Diamond':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' '\n + location.y + ' L ' + location.x + ' ' + (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + location.y + ' Z';\n break;\n case 'Star':\n options.d = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6)\n + ' L ' + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n break;\n case 'Triangle':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + (location.y + size.height / 2) + ' Z';\n break;\n case 'HorizontalLine':\n options.d = ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' '\n + location.y;\n break;\n case 'VerticalLine':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2);\n break;\n }\n return shape === 'Balloon' ? tempGroup : maps.renderer.drawPath(options);\n}\n/**\n * Internal rendering of Diamond\n * @private\n */\nexport function drawDiamond(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' + location.y +\n ' L ' + location.x + ' ' + (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + location.y + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Triangle\n * @private\n */\nexport function drawTriangle(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + (location.y + size.height / 2) + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Cross\n * @private\n */\nexport function drawCross(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2) +\n ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of HorizontalLine\n * @private\n */\nexport function drawHorizontalLine(maps, options, size, location, element) {\n options.d = ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of VerticalLine\n * @private\n */\nexport function drawVerticalLine(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2);\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Star\n * @private\n */\nexport function drawStar(maps, options, size, location, element) {\n options.d = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6) + ' L '\n + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2)\n + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Balloon\n * @private\n */\nexport function drawBalloon(maps, options, size, location, element) {\n var width = size.width;\n var height = size.height;\n var padding = 5;\n location.x -= width / 2;\n location.y -= height;\n options.d = 'M15,0C8.8,0,3.8,5,3.8,11.2C3.8,17.5,9.4,24.4,15,30c5.6-5.6,11.2-12.5,11.2-18.8C26.2,5,21.2,0,15,0z M15,16' +\n 'c-2.8,0-5-2.2-5-5s2.2-5,5-5s5,2.2,5,5S17.8,16,15,16z';\n var balloon = maps.renderer.drawPath(options);\n var x = size.width / 22.5;\n var y = size.height / 30;\n balloon.setAttribute('transform', 'translate(' + location.x + ', ' + location.y + ') scale(' + x + ', ' + y + ')');\n var g = maps.renderer.createGroup({ id: options.id });\n appendShape(balloon, g);\n return appendShape(g, element);\n}\n/**\n * Internal rendering of Pattern\n * @private\n */\nexport function drawPattern(maps, options, elements, element) {\n var pattern = maps.renderer.createPattern(options, 'pattern');\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var ele = elements_1[_i];\n appendShape(ele, pattern);\n }\n return appendShape(pattern, element);\n}\n/**\n * Method to get specific field and vaues from data.\n * @private\n */\n// tslint:disable:no-any\nexport function getFieldData(dataSource, fields) {\n var newData = [];\n var data;\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var temp = dataSource_1[_i];\n data = {};\n for (var _a = 0, fields_1 = fields; _a < fields_1.length; _a++) {\n var field = fields_1[_a];\n if (temp[field]) {\n data[field] = temp[field];\n }\n }\n newData.push(data);\n }\n return newData;\n}\n/**\n * To find the index of dataSource from shape properties\n */\n// tslint:disable:no-string-literal\nexport function checkShapeDataFields(dataSource, properties, dataPath, propertyPath) {\n if (!(isNullOrUndefined(properties))) {\n for (var i = 0; i < dataSource.length; i++) {\n if (dataSource[i][dataPath] === properties[propertyPath]) {\n return i;\n }\n }\n }\n return null;\n}\nexport function filter(points, start, end) {\n var pointObject = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (start <= point.y && end >= point.y) {\n pointObject.push(point);\n }\n }\n return pointObject;\n}\n/**\n * To find the midpoint of the polygon from points\n */\nexport function findMidPointOfPolygon(points) {\n if (!points.length) {\n return null;\n }\n var min = 0;\n var max = points.length;\n var startX;\n var startY;\n var startX1;\n var startY1;\n var sum = 0;\n var xSum = 0;\n var ySum = 0;\n for (var i = min; i <= max - 1; i++) {\n startX = points[i].x;\n startY = points[i].y;\n if (i === max - 1) {\n startX1 = points[0].x;\n startY1 = points[0].y;\n }\n else {\n startX1 = points[i + 1].x;\n startY1 = points[i + 1].y;\n }\n sum = sum + Math.abs(((startX * startY1)) - (startX1 * startY));\n xSum = xSum + Math.abs(((startX + startX1) * (((startX * startY1) - (startX1 * startY)))));\n ySum = ySum + Math.abs(((startY + startY1) * (((startX * startY1) - (startX1 * startY)))));\n }\n sum = 0.5 * sum;\n xSum = (1 / (4 * sum)) * xSum;\n ySum = (1 / (4 * sum)) * ySum;\n /* Code for finding nearest points in polygon related to midPoint*/\n var rightMinPoint = { x: 0, y: 0 };\n var rightMaxPoint = { x: 0, y: 0 };\n var leftMinPoint = { x: 0, y: 0 };\n var leftMaxPoint = { x: 0, y: 0 };\n var bottomMinPoint = { x: 0, y: 0 };\n var bottomMaxPoint = { x: 0, y: 0 };\n var topMinPoint = { x: 0, y: 0 };\n var topMaxPoint = { x: 0, y: 0 };\n var height = 0;\n for (var i = min; i <= max - 1; i++) {\n var point = points[i];\n if (point.y > ySum) {\n if (point.x < xSum && xSum - point.x < xSum - bottomMinPoint.x) {\n bottomMinPoint = { x: point.x, y: point.y };\n }\n else if (point.x > xSum && (bottomMaxPoint.x === 0 || point.x - xSum < bottomMaxPoint.x - xSum)) {\n bottomMaxPoint = { x: point.x, y: point.y };\n }\n }\n else {\n if (point.x < xSum && xSum - point.x < xSum - topMinPoint.x) {\n topMinPoint = { x: point.x, y: point.y };\n }\n else if (point.x > xSum && (topMaxPoint.x === 0 || point.x - xSum < topMaxPoint.x - xSum)) {\n topMaxPoint = { x: point.x, y: point.y };\n }\n }\n height = (bottomMaxPoint.y - topMaxPoint.y) + ((bottomMaxPoint.y - topMaxPoint.y) / 4);\n if (point.x > xSum) {\n if (point.y < ySum && ySum - point.y < ySum - rightMinPoint.y) {\n rightMinPoint = { x: point.x, y: point.y };\n }\n else if (point.y > ySum && (rightMaxPoint.y === 0 || point.y - ySum < rightMaxPoint.y - ySum)) {\n rightMaxPoint = { x: point.x, y: point.y };\n }\n }\n else {\n if (point.y < ySum && ySum - point.y < ySum - leftMinPoint.y) {\n leftMinPoint = { x: point.x, y: point.y };\n }\n else if (point.y > ySum && (leftMaxPoint.y === 0 || point.y - ySum < leftMaxPoint.y - ySum)) {\n leftMaxPoint = { x: point.x, y: point.y };\n }\n }\n }\n return {\n x: xSum, y: ySum, rightMin: rightMinPoint, rightMax: rightMaxPoint,\n leftMin: leftMinPoint, leftMax: leftMaxPoint, points: points, topMax: topMaxPoint, topMin: topMinPoint,\n bottomMax: bottomMaxPoint, bottomMin: bottomMinPoint, height: height\n };\n}\n/**\n * @private\n * Check custom path\n */\n/* tslint:disable:no-string-literal */\nexport function isCustomPath(layerData) {\n var customPath = false;\n if (Object.prototype.toString.call(layerData) === '[object Array]') {\n layerData.forEach(function (layer, index) {\n if (!isNullOrUndefined(layer['geometry']) && layer['geometry']['type'] === 'Path') {\n customPath = true;\n }\n });\n }\n return customPath;\n}\n/**\n * @private\n * Trim the title text\n */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth || label.length < 4) {\n if (label.length < 4) {\n label = ' ';\n }\n return label;\n }\n }\n }\n return label;\n}\n/**\n * Method to calculate x position of title\n */\nexport function findPosition(location, alignment, textSize, type) {\n var x;\n var y;\n switch (alignment) {\n case 'Near':\n x = location.x;\n break;\n case 'Center':\n x = (type === 'title') ? (location.width / 2 - textSize.width / 2) :\n ((location.x + (location.width / 2)) - textSize.width / 2);\n break;\n case 'Far':\n x = (type === 'title') ? (location.width - location.y - textSize.width) :\n ((location.x + location.width) - textSize.width);\n break;\n }\n y = (type === 'title') ? location.y + (textSize.height / 2) : ((location.y + location.height / 2) + textSize.height / 2);\n return new Point(x, y);\n}\n/**\n * To remove element by id\n */\nexport function removeElement(id) {\n var element = document.getElementById(id);\n return element ? remove(element) : null;\n}\n/**\n * @private\n */\nexport function getTranslate(mapObject, layer, animate) {\n var zoomFactor = animate ? 1 : mapObject.zoomSettings.zoomFactor;\n var min = mapObject.baseMapRectBounds['min'];\n var max = mapObject.baseMapRectBounds['max'];\n var size = mapObject.mapAreaRect;\n var availSize = mapObject.availableSize;\n var x;\n var y;\n var mapWidth = Math.abs(max['x'] - min['x']);\n var mapHeight = Math.abs(min['y'] - max['y']);\n var factor = animate ? 1 : mapObject.zoomSettings.zoomFactor;\n var scaleFactor;\n var scaleX;\n var scaleY;\n var center = mapObject.centerPosition;\n if (!isNullOrUndefined(center.longitude) && !isNullOrUndefined(center.latitude)) {\n var leftPosition = ((mapWidth + Math.abs(mapObject.mapAreaRect.width - mapWidth)) / 2) / factor;\n var topPosition = ((mapHeight + Math.abs(mapObject.mapAreaRect.height - mapHeight)) / 2) / factor;\n var point = convertGeoToPoint(center.latitude, center.longitude, mapObject.mapLayerPanel.calculateFactor(layer), layer, mapObject);\n x = -point.x + leftPosition;\n y = -point.y + topPosition;\n scaleFactor = zoomFactor;\n }\n else {\n scaleFactor = parseFloat(Math.min(size.width / mapWidth, size.height / mapHeight).toFixed(2));\n mapWidth *= scaleFactor;\n mapHeight *= scaleFactor;\n x = size.x + ((-(min['x'])) + ((size.width / 2) - (mapWidth / 2)));\n y = size.y + ((-(min['y'])) + ((size.height / 2) - (mapHeight / 2)));\n }\n return { scale: scaleFactor, location: new Point(x, y) };\n}\n/**\n * To get the html element by specified id\n */\nexport function getElementByID(id) {\n return document.getElementById(id);\n}\n/**\n * To apply internalization\n */\nexport function Internalize(maps, value) {\n maps.formatFunction =\n maps.intl.getNumberFormat({ format: maps.format, useGrouping: maps.useGroupingSeparator });\n return maps.formatFunction(value);\n}\n/**\n * Function to compile the template function for maps.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/**\n * Function to get element from id.\n * @returns Element\n * @private\n */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * Function to get shape data using target id\n */\nexport function getShapeData(targetId, map) {\n var layerIndex = parseInt(targetId.split('_LayerIndex_')[1].split('_')[0], 10);\n var shapeIndex = parseInt(targetId.split('_ShapeIndex_')[1].split('_')[0], 10);\n var layer = map.layers[layerIndex];\n var shapeData = layer.layerData[shapeIndex]['property'];\n var data;\n if (layer.dataSource) {\n data = layer.dataSource[checkShapeDataFields(layer.dataSource, shapeData, layer.shapeDataPath, layer.shapePropertyPath)];\n }\n return { shapeData: shapeData, data: data };\n}\n/**\n * Function to trigger shapeSelected event\n * @private\n */\nexport function triggerShapeEvent(targetId, selection, maps, eventName) {\n var shape = getShapeData(targetId, maps);\n var eventArgs = {\n cancel: false,\n name: eventName,\n fill: selection.fill,\n opacity: selection.opacity,\n border: selection.border,\n shapeData: shape.shapeData,\n data: shape.data,\n target: targetId\n };\n maps.trigger(eventName, eventArgs);\n return eventArgs;\n}\n/**\n * Function to get elements using class name\n */\nexport function getElementsByClassName(className) {\n return document.getElementsByClassName(className);\n}\n/**\n * Function to get elements using querySelectorAll\n */\n// export function querySelectorAll(args: string, element: Element): NodeListOf {\n// return element.querySelectorAll('.' + args);\n// }\n/**\n * Function to get elements using querySelector\n */\nexport function querySelector(args, elementSelector) {\n var targetEle = null;\n if (document.getElementById(elementSelector)) {\n targetEle = document.getElementById(elementSelector).querySelector('#' + args);\n }\n return targetEle;\n}\n/**\n * Function to get the element for selection and highlight using public method\n */\nexport function getTargetElement(layerIndex, name, enable, map) {\n var shapeIndex;\n var targetId;\n var targetEle;\n var shapeData = map.layers[layerIndex].shapeData['features'];\n for (var i = 0; i < shapeData.length; i++) {\n if (shapeData[i]['properties'].name === name) {\n targetId = map.element.id + '_' + 'LayerIndex_' + layerIndex + '_ShapeIndex_' + i + '_dataIndex_undefined';\n break;\n }\n }\n targetEle = getElement(targetId);\n return targetEle;\n}\n/**\n * Function to create style element for highlight and selection\n */\nexport function createStyle(id, className, eventArgs) {\n return createElement('style', {\n id: id, innerHTML: '.' + className + '{fill:'\n + eventArgs.fill + ';' + 'opacity:' + eventArgs.opacity.toString() + ';' +\n '}'\n });\n}\n/**\n * Function to customize the style for highlight and selection\n */\nexport function customizeStyle(id, className, eventArgs) {\n var styleEle = getElement(id);\n styleEle.innerHTML = '.' + className + '{fill:'\n + eventArgs.fill + ';' + 'opacity:' + eventArgs.opacity.toString() + ';' +\n 'stroke-width:' + eventArgs.border.width.toString() +\n 'stroke-color:' + eventArgs.border.color + '}';\n}\n/**\n * Function to remove class from element\n */\nexport function removeClass(element) {\n element.removeAttribute('class');\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function elementAnimate(element, delay, duration, point, maps, ele, radius) {\n if (radius === void 0) { radius = 0; }\n var centerX = point.x;\n var centerY = point.y;\n var height = 0;\n var transform = element.getAttribute('transform') || '';\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n height = ((args.timeStamp - args.delay) / args.duration);\n element.setAttribute('transform', 'translate( ' + (centerX - (radius * height)) + ' ' + (centerY - (radius * height)) +\n ' ) scale(' + height + ')');\n }\n },\n end: function (model) {\n element.setAttribute('transform', transform);\n if (!ele) {\n return;\n }\n var event = {\n cancel: false, name: animationComplete, element: ele, maps: maps\n };\n maps.trigger(animationComplete, event);\n }\n });\n}\nexport function timeout(id) {\n removeElement(id);\n}\nexport function showTooltip(text, size, x, y, areaWidth, areaHeight, id, element, isTouch) {\n var tooltip = document.getElementById(id);\n var width = measureText(text, {\n fontFamily: 'Segoe UI', size: '8px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n }).width;\n var str = text.split(' ');\n var demo = str[0].length;\n for (var i = 1; i < str.length; i++) {\n if (demo < str[i].length) {\n demo = str[i].length;\n }\n }\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id,\n styles: 'background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(0, 0, 0); padding-left:5px;' +\n 'font-size:12px; font-family: \"Segoe UI\"; text-align:center'\n });\n }\n if (x < (areaWidth - width)) {\n x = x;\n }\n else if (x > (areaWidth - width) && x < areaWidth - (demo * 8)) {\n width = (areaWidth - x);\n }\n else if (x >= areaWidth - demo * 8) {\n if (x > width) {\n x = x - width;\n }\n else {\n width = x;\n x = 0;\n }\n }\n var size1 = size.split('px');\n wordWrap(tooltip, text, x, y, size1, width, areaWidth, element);\n var height = tooltip.clientHeight;\n if ((height + parseInt(size1[0], 10) * 2) > areaHeight) {\n width = x;\n x = 0;\n }\n wordWrap(tooltip, text, x, y, size1, width, areaWidth, element);\n if (isTouch) {\n setTimeout(timeout, 5000, id);\n }\n}\nexport function wordWrap(tooltip, text, x, y, size1, width, areaWidth, element) {\n tooltip.innerHTML = text;\n tooltip.style.top = (parseInt(size1[0], 10) * 2).toString() + 'px';\n tooltip.style.left = (x).toString() + 'px';\n tooltip.style.width = width.toString() + 'px';\n tooltip.style.maxWidth = (areaWidth).toString() + 'px';\n tooltip.style.wordWrap = 'break-word';\n element.appendChild(tooltip);\n}\n// /**\n// * \n// * @param touchList \n// * @param e \n// * @param touches \n// */\n// export function addTouchPointer(touchList: ITouches[], e: PointerEvent, touches: TouchList): ITouches[] {\n// if (touches) {\n// touchList = [];\n// for (let i: number = 0, length: number = touches.length; i < length; i++) {\n// touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n// }\n// } else {\n// touchList = touchList ? touchList : [];\n// if (touchList.length === 0) {\n// touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n// } else {\n// for (let i: number = 0, length: number = touchList.length; i < length; i++) {\n// if (touchList[i].pointerId === e.pointerId) {\n// touchList[i] = { pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId };\n// } else {\n// touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n// }\n// }\n// }\n// }\n// return touchList;\n// }\n/** @private */\nexport function createTooltip(id, text, top, left, fontSize) {\n var tooltip = getElement(id);\n var style = 'top:' + top.toString() + 'px;' +\n 'left:' + left.toString() + 'px;' +\n 'color: #000000; ' +\n 'background:' + '#FFFFFF' + ';' +\n 'position:absolute;border:1px solid #707070;font-size:' + fontSize + ';border-radius:2px;';\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id, innerHTML: ' ' + text + ' ', styles: style\n });\n document.body.appendChild(tooltip);\n }\n else {\n tooltip.setAttribute('innerHTML', ' ' + text + ' ');\n tooltip.setAttribute('styles', style);\n }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options) {\n var functionName = 'Path';\n var renderer = new SvgRenderer('');\n var temp = calculateLegendShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n return htmlObject;\n}\n/** @private */\nexport function calculateLegendShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Star':\n path = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6)\n + ' L ' + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\n// export function markerTemplateAnimate(element: Element, delay: number, duration: number, point: MapLocation): void {\n// let delta: number = 0;\n// let top: string = (element as HTMLElement).style.top;\n// let y: number = parseInt(top, 10);\n// new Animation({}).animate(element, {\n// duration: duration,\n// delay: delay,\n// progress: (args: AnimationOptions): void => {\n// if (args.timeStamp > args.delay) {\n// delta = ((args.timeStamp - args.delay) / args.duration);\n// (element as HTMLElement).style.top = y - 100 + (delta * 100) + 'px';\n// }\n// },\n// end: (model: AnimationOptions) => {\n// (element as HTMLElement).style.top = top;\n// }\n// });\n// }\n/** @private */\nexport function getElementOffset(childElement, parentElement) {\n var width;\n var height;\n parentElement.appendChild(childElement);\n width = childElement.offsetWidth;\n height = childElement.offsetHeight;\n parentElement.removeChild(childElement);\n return new Size(width, height);\n}\n/** @private */\nexport function changeBorderWidth(element, index, scale, maps) {\n var childNode;\n for (var l = 0; l < element.childElementCount; l++) {\n childNode = element.childNodes[l];\n if (childNode.id.indexOf('_NavigationGroup') > -1) {\n changeNavaigationLineWidth(childNode, index, scale, maps);\n }\n else {\n var currentStroke = (maps.layersCollection[index].shapeSettings.border.width);\n childNode.setAttribute('stroke-width', (currentStroke / scale).toString());\n }\n }\n}\n/** @private */\nexport function changeNavaigationLineWidth(element, index, scale, maps) {\n var node;\n for (var m = 0; m < element.childElementCount; m++) {\n node = element.childNodes[m];\n if (node.tagName === 'path') {\n var currentStroke = (maps.layersCollection[index]\n .navigationLineSettings[parseFloat(node.id.split('_')[2])].width);\n node.setAttribute('stroke-width', (currentStroke / scale).toString());\n }\n }\n}\n// /** Pinch zoom helper methods */\n/** @private */\nexport function targetTouches(event) {\n var targetTouches = [];\n var touches = event.touches;\n for (var i = 0; i < touches.length; i++) {\n targetTouches.push({ pageX: touches[i].pageX, pageY: touches[i].pageY });\n }\n return targetTouches;\n}\n/** @private */\nexport function calculateScale(startTouches, endTouches) {\n var startDistance = getDistance(startTouches[0], startTouches[1]);\n var endDistance = getDistance(endTouches[0], endTouches[1]);\n return (endDistance / startDistance);\n}\n/** @private */\nexport function getDistance(a, b) {\n var x = a.pageX - b.pageX;\n var y = a.pageY - b.pageY;\n return Math.sqrt(x * x + y * y);\n}\n/** @private */\nexport function getTouches(touches, maps) {\n var rect = maps.element.getBoundingClientRect();\n var posTop = rect.top + document.defaultView.pageXOffset;\n var posLeft = rect.left + document.defaultView.pageYOffset;\n return Array.prototype.slice.call(touches).map(function (touch) {\n return {\n x: touch.pageX - posLeft,\n y: touch.pageY - posTop,\n };\n });\n}\n/** @private */\nexport function getTouchCenter(touches) {\n return {\n x: touches.map(function (e) { return e['x']; }).reduce(sum) / touches.length,\n y: touches.map(function (e) { return e['y']; }).reduce(sum) / touches.length\n };\n}\n/** @private */\nexport function sum(a, b) {\n return a + b;\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function zoomAnimate(element, delay, duration, point, scale, size, maps) {\n var delta = 0;\n var previousLocation = maps.previousPoint;\n var preScale = maps.previousScale;\n var diffScale = scale - preScale;\n var currentLocation = new MapLocation(0, 0);\n var currentScale = 1;\n if (scale === preScale) {\n element.setAttribute('transform', 'scale( ' + (scale) + ' ) translate( ' + point.x + ' ' + point.y + ' )');\n return;\n }\n var slope = function (previousLocation, point) {\n if (previousLocation.x === point.x) {\n return null;\n }\n return (point.y - previousLocation.y) / (point.x - previousLocation.x);\n };\n var intercept = function (point, slopeValue) {\n if (slopeValue === null) {\n return point.x;\n }\n return point.y - slopeValue * point.x;\n };\n var slopeFactor = slope(previousLocation, point);\n var slopeIntersection = intercept(previousLocation, slopeFactor);\n var horizontalDifference = point.x - previousLocation.x;\n var verticalDifference = point.y - previousLocation.y;\n animate(element, delay, duration, function (args) {\n if (args.timeStamp > args.delay) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n currentScale = preScale + (delta * diffScale);\n currentLocation.x = previousLocation.x + (delta * horizontalDifference) / (currentScale / scale);\n if (slopeFactor == null) {\n currentLocation.y = previousLocation.y + (delta * verticalDifference);\n }\n else {\n currentLocation.y = ((slopeFactor * currentLocation.x) + slopeIntersection);\n }\n args.element.setAttribute('transform', 'scale( ' + currentScale + ' ) ' +\n 'translate( ' + currentLocation.x + ' ' + currentLocation.y + ' )');\n maps.translatePoint = currentLocation;\n maps.scale = currentScale;\n maps.zoomModule.processTemplate(point.x, point.y, currentScale, maps);\n }\n }, function () {\n maps.translatePoint = point;\n maps.scale = scale;\n element.setAttribute('transform', 'scale( ' + (scale) + ' ) translate( ' + point.x + ' ' + point.y + ' )');\n maps.zoomModule.processTemplate(point.x, point.y, scale, maps);\n });\n}\n/**\n * To process custom animation\n */\nexport function animate(element, delay, duration, process, end) {\n var _this = this;\n var start = null;\n var clearAnimation;\n var startAnimation = function (timestamp) {\n if (!start) {\n start = timestamp;\n }\n var progress = timestamp - start;\n if (progress < duration) {\n process.call(_this, { element: element, delay: 0, timeStamp: progress, duration: duration });\n window.requestAnimationFrame(startAnimation);\n }\n else {\n window.cancelAnimationFrame(clearAnimation);\n end.call(_this, { element: element });\n }\n };\n clearAnimation = window.requestAnimationFrame(startAnimation);\n}\n/**\n * To get shape data file using Ajax.\n */\nvar MapAjax = /** @class */ (function () {\n function MapAjax(options, type, async, contentType, sendData) {\n this.dataOptions = options;\n this.type = type || 'GET';\n this.async = async || true;\n this.contentType = contentType;\n this.sendData = sendData;\n }\n return MapAjax;\n}());\nexport { MapAjax };\n/**\n * Animation Translate\n * @private\n */\nexport function smoothTranslate(element, delay, duration, point) {\n var delta = 0;\n var transform = element.getAttribute('transform').split(' ');\n if (transform.length === 2) {\n transform[2] = transform[1].split(')')[0];\n transform[1] = transform[0].split('(')[1];\n }\n var previousLocation = new MapLocation(parseInt(transform[1], 10), parseInt(transform[2], 10));\n var diffx = point.x - previousLocation.x;\n var diffy = point.y - previousLocation.y;\n var currentLocation = new MapLocation(0, 0);\n animate(element, delay, duration, function (args) {\n if (args.timeStamp > args.delay) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n currentLocation.x = previousLocation.x + (delta * diffx);\n currentLocation.y = previousLocation.y + (delta * diffy);\n args.element.setAttribute('transform', 'translate( ' + currentLocation.x + ' ' + currentLocation.y + ' )');\n }\n }, function () {\n element.setAttribute('transform', 'translate( ' + point.x + ' ' + point.y + ' )');\n });\n}\n","/**\n * Exports util methods used by RichTextEditor.\n */\nimport { isNullOrUndefined as isNOU, addClass, removeClass, selectAll } from '@syncfusion/ej2-base';\nimport * as classes from '../base/classes';\nimport * as model from '../models/items';\nimport { toolsLocale } from '../models/default-locale';\nvar undoRedoItems = ['Undo', 'Redo'];\nexport function getIndex(val, items) {\n var index = -1;\n items.some(function (item, i) {\n if (typeof item === 'string' && val === item.toLocaleLowerCase()) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n}\nexport function hasClass(element, className) {\n var hasClass = false;\n if (element.classList.contains(className)) {\n hasClass = true;\n }\n return hasClass;\n}\nexport function getDropDownValue(items, value, type, returnType) {\n var data;\n var result;\n for (var k = 0; k < items.length; k++) {\n if (type === 'value' && items[k].value.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'text' && items[k].text.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'subCommand' && items[k].subCommand.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n }\n if (!isNOU(data)) {\n switch (returnType) {\n case 'text':\n result = data.text;\n break;\n case 'value':\n result = data.value;\n break;\n case 'iconCss':\n result = data.iconCss;\n break;\n }\n }\n return result;\n}\nexport function isIDevice() {\n var result = false;\n var iosDevices = ['iphone', 'ipad', 'ipod'];\n for (var i = 0; i < iosDevices.length; i++) {\n if (navigator.platform.toLocaleLowerCase().indexOf(iosDevices[i]) > -1) {\n result = true;\n break;\n }\n }\n return result;\n}\nexport function getFormattedFontSize(value) {\n if (isNOU(value)) {\n return '';\n }\n var result = value.split('pt');\n return result[0] + ' pt';\n}\nexport function pageYOffset(e, parentElement, isIFrame) {\n var y = 0;\n if (isIFrame) {\n y = window.pageYOffset + parentElement.getBoundingClientRect().top + e.clientY;\n }\n else {\n y = e.pageY;\n }\n return y;\n}\nexport function getTooltipText(item, serviceLocator) {\n var i10n = serviceLocator.getService('rteLocale');\n var itemLocale = toolsLocale[item];\n var tooltipText = i10n.getConstant(itemLocale);\n return tooltipText;\n}\nexport function setToolbarStatus(e, isPopToolbar) {\n var dropDown = e.dropDownModule;\n var data = e.args;\n var keys = Object.keys(e.args);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n for (var j = 0; j < e.tbItems.length; j++) {\n var item = e.tbItems[j].subCommand;\n var itemStr = item && item.toLocaleLowerCase();\n if (item && (itemStr === key) || (item === 'UL' && key === 'unorderedlist') || (item === 'OL' && key === 'orderedlist')) {\n if (typeof data[key] === 'boolean') {\n if (data[key] === true) {\n addClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n else {\n removeClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n }\n else if ((typeof data[key] === 'string' || data[key] === null) &&\n getIndex(key, e.parent.toolbarSettings.items) > -1) {\n var value = ((data[key]) ? data[key] : '');\n var result = '';\n switch (key) {\n case 'formats':\n if (isNOU(dropDown.formatDropDown) || isPopToolbar) {\n return;\n }\n var formatItems = e.parent.format.types;\n result = getDropDownValue(formatItems, value, 'subCommand', 'text');\n dropDown.formatDropDown.content = ('' +\n ''\n + (isNOU(result) ? 'Paragraph' : result) +\n '');\n dropDown.formatDropDown.dataBind();\n break;\n case 'alignments':\n if (isNOU(dropDown.alignDropDown)) {\n return;\n }\n var alignItems = model.alignmentItems;\n result = getDropDownValue(alignItems, value, 'subCommand', 'iconCss');\n dropDown.alignDropDown.iconCss = isNOU(result) ? 'e-icons e-justify-left' : result;\n dropDown.alignDropDown.dataBind();\n break;\n case 'fontname':\n if (isNOU(dropDown.fontNameDropDown) || isPopToolbar) {\n return;\n }\n var fontNameItems = e.parent.fontFamily.items;\n result = getDropDownValue(fontNameItems, value, 'value', 'text');\n var name_1 = (isNOU(result) ? 'Segoe UI' : result);\n e.tbElements[j].title = name_1;\n dropDown.fontNameDropDown.content = ('' +\n ''\n + name_1 + '');\n dropDown.fontNameDropDown.dataBind();\n break;\n case 'fontsize':\n if (isNOU(dropDown.fontSizeDropDown)) {\n return;\n }\n var fontSizeItems = e.parent.fontSize.items;\n result = getDropDownValue(fontSizeItems, value, 'value', 'value');\n dropDown.fontSizeDropDown.content = ('' +\n ''\n + (isNOU(result) ? '10 pt' : getFormattedFontSize(result)) +\n '');\n dropDown.fontSizeDropDown.dataBind();\n break;\n }\n }\n }\n }\n }\n}\nexport function getCollection(items) {\n if (typeof items === 'object') {\n return items;\n }\n else {\n return [items];\n }\n}\nexport function getTBarItemsIndex(items, toolbarItems) {\n var itemsIndex = [];\n for (var i = 0; i < items.length; i++) {\n for (var j = 0; j < toolbarItems.length; j++) {\n if (toolbarItems[j].type === 'Separator') {\n continue;\n }\n else {\n if (items[i] === 'OrderedList' && toolbarItems[j].subCommand === 'OL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'UnorderedList' && toolbarItems[j].subCommand === 'UL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === toolbarItems[j].subCommand) {\n itemsIndex.push(j);\n break;\n }\n }\n }\n }\n return itemsIndex;\n}\nexport function updateUndoRedoStatus(baseToolbar, undoRedoStatus) {\n var i = 0;\n var trgItems = getTBarItemsIndex(getCollection(undoRedoItems), baseToolbar.toolbarObj.items);\n var tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n var keys = Object.keys(undoRedoStatus);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var target = tbItems[trgItems[i]];\n if (target) {\n baseToolbar.toolbarObj.enableItems(target, undoRedoStatus[key]);\n }\n i++;\n }\n}\n/**\n * To dispatch the event manually\n */\nexport function dispatchEvent(element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n}\n","export function setAttributes(htmlAttributes, rte, isFrame) {\n var target;\n if (isFrame) {\n var iFrame = rte.contentModule.getDocument();\n target = iFrame.querySelector('body');\n }\n else {\n target = rte.element;\n }\n if (Object.keys(htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n target.classList.add(htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && htmlAttributes[htmlAttr] === 'disabled') {\n rte.enabled = false;\n rte.setEnable();\n }\n else if (htmlAttr === 'readonly' && htmlAttributes[htmlAttr] === 'readonly') {\n rte.readonly = true;\n rte.setReadOnly();\n }\n else if (htmlAttr === 'style') {\n target.setAttribute('style', htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'placeholder') {\n rte.placeholder = htmlAttributes[htmlAttr];\n rte.setPlaceHolder();\n }\n else {\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n rte.valueContainer.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n else {\n target.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n}\n","import { createElement, remove } from '@syncfusion/ej2-base';\n/**\n * Schedule common utilities\n */\nexport var WEEK_LENGTH = 7;\nexport var MS_PER_DAY = 86400000;\nexport var MS_PER_MINUTE = 60000;\nexport function getElementHeightFromClass(container, elementClass) {\n var height = 0;\n var el = createElement('div', { className: elementClass }).cloneNode();\n el.style.visibility = 'hidden';\n el.style.position = 'absolute';\n container.appendChild(el);\n height = getOuterHeight(el);\n remove(el);\n return height;\n}\nexport function getWeekFirstDate(date1, firstDayOfWeek) {\n var date = new Date(date1.getTime());\n firstDayOfWeek = (firstDayOfWeek - date.getDay() + 7 * (-1)) % 7;\n return new Date(date.setDate(date.getDate() + firstDayOfWeek));\n}\nexport function firstDateOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth());\n}\nexport function lastDateOfMonth(dt) {\n return new Date(dt.getFullYear(), dt.getMonth() + 1, 0);\n}\nexport function getWeekNumber(dt) {\n var currentDate = new Date('' + dt).valueOf();\n var date = new Date(dt.getFullYear(), 0, 1).valueOf();\n var a = (currentDate - date);\n return Math.ceil((((a) / MS_PER_DAY) + new Date(date).getDay() + 1) / 7);\n}\nexport function setTime(date, time) {\n var tzOffsetBefore = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(d.getTime() + tzOffsetDiff * MS_PER_DAY);\n return date;\n}\nexport function resetTime(date) {\n date.setHours(0, 0, 0, 0);\n return date;\n}\nexport function getDateInMs(date) {\n return date.getTime() - new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0).getTime();\n}\nexport function addDays(date, i) {\n date = new Date('' + date);\n return new Date(date.setDate(date.getDate() + i));\n}\nexport function addMonths(date, i) {\n date = new Date('' + date);\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, getMaxDays(date)));\n return date;\n}\nexport function addYears(date, i) {\n date = new Date('' + date);\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, getMaxDays(date)));\n return date;\n}\nexport function getStartEndHours(date, startHour, endHour) {\n var date1 = new Date(date.getTime());\n date1.setHours(startHour.getHours());\n date1.setMinutes(startHour.getMinutes());\n date1.setSeconds(startHour.getSeconds());\n var date2 = new Date(date.getTime());\n if (endHour.getHours() === 0) {\n date2 = addDays(date2, 1);\n }\n else {\n date2.setHours(endHour.getHours());\n date2.setMinutes(endHour.getMinutes());\n date2.setSeconds(endHour.getSeconds());\n }\n return { startHour: date1, endHour: date2 };\n}\nexport function getMaxDays(d) {\n var date = new Date(d.getFullYear(), d.getMonth() + 1, 0);\n return date.getDate();\n}\nexport function getDaysCount(startDate, endDate) {\n var strTime = resetTime(new Date(startDate));\n var endTime = resetTime(new Date(endDate));\n return (endTime.getTime() - strTime.getTime()) / MS_PER_DAY;\n}\nexport function getDateFromString(date) {\n return date.indexOf('Date') !== -1 ? new Date(parseInt(date.match(/\\d+/g).toString(), 10)) :\n date.indexOf('T') !== -1 ? new Date(date) : new Date(date.replace(/-/g, '/'));\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\n }\n var divNode = createElement('div');\n var value = 0;\n divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n document.body.appendChild(divNode);\n value = (divNode.offsetWidth - divNode.clientWidth) | 0;\n document.body.removeChild(divNode);\n return scrollWidth = value;\n}\nexport function findIndexInData(data, property, value) {\n for (var i = 0, length_1 = data.length; i < length_1; i++) {\n if (data[i][property] === value) {\n return i;\n }\n }\n return -1;\n}\nexport function getOuterHeight(element) {\n var style = getComputedStyle(element);\n return element.offsetHeight + (parseInt(style.marginTop, 10) || 0) + (parseInt(style.marginBottom, 10) || 0);\n}\n","import { isNullOrUndefined, getDefaultDateObject, getValue, cldrData } from '@syncfusion/ej2-base';\nimport { MS_PER_DAY } from '../schedule/base/util';\n/**\n * Date Generator from Recurrence Rule\n */\nexport function generateSummary(rule, localeObject, locale) {\n var ruleObject = extractObjectFromRule(rule);\n var summary = localeObject.getConstant(EVERY) + ' ';\n var cldrObj;\n var cldrObj1;\n if (locale === 'en' || locale === 'en-US') {\n cldrObj1 = (getValue('months.stand-alone.abbreviated', getDefaultDateObject()));\n cldrObj = (getValue('days.stand-alone.abbreviated', getDefaultDateObject()));\n }\n else {\n cldrObj1 = (getValue('main.' + '' + locale + '.dates.calendars.gregorian.months.stand-alone.abbreviated', cldrData));\n cldrObj = (getValue('main.' + '' + locale + '.dates.calendars.gregorian.days.stand-alone.abbreviated', cldrData));\n }\n if (ruleObject.interval > 1) {\n summary += ruleObject.interval + ' ';\n }\n switch (ruleObject.freq) {\n case 'DAILY':\n summary += localeObject.getConstant(DAYS);\n break;\n case 'WEEKLY':\n summary += localeObject.getConstant(WEEKS) + ' ' + localeObject.getConstant(ON) + ' ';\n ruleObject.day.forEach(function (day, index) {\n summary += getValue(DAYINDEXOBJECT[day], cldrObj);\n summary += (((ruleObject.day.length - 1) === index) ? '' : ', ');\n });\n break;\n case 'MONTHLY':\n summary += localeObject.getConstant(MONTHS) + ' ' + localeObject.getConstant(ON) + ' ';\n summary += getMonthSummary(ruleObject, cldrObj, localeObject);\n break;\n case 'YEARLY':\n summary += localeObject.getConstant(YEARS) + ' ' + localeObject.getConstant(ON) + ' ';\n summary += getValue((ruleObject.month[0]).toString(), cldrObj1) + ' ';\n summary += getMonthSummary(ruleObject, cldrObj, localeObject);\n break;\n }\n if (ruleObject.count) {\n summary += ', ' + (ruleObject.count) + ' ' + localeObject.getConstant(TIMES);\n }\n else if (ruleObject.until) {\n var tempDate = ruleObject.until;\n summary += ', ' + localeObject.getConstant(UNTIL)\n + ' ' + tempDate.getDate()\n + ' ' + getValue((tempDate.getMonth() + 1).toString(), cldrObj1)\n + ' ' + tempDate.getFullYear();\n }\n return summary;\n}\nfunction getMonthSummary(ruleObject, cldrObj, localeObj) {\n var summary = '';\n if (ruleObject.monthDay.length) {\n summary += ruleObject.monthDay[0];\n }\n else if (ruleObject.day) {\n var pos = ruleObject.setPosition - 1;\n summary += localeObj.getConstant(WEEKPOS[pos > -1 ? pos : (WEEKPOS.length - 1)])\n + ' ' + getValue(DAYINDEXOBJECT[ruleObject.day[0]], cldrObj);\n }\n return summary;\n}\nexport function generate(startDate, rule, excludeDate, startDayOfWeek, maximumCount, viewDate) {\n if (maximumCount === void 0) { maximumCount = MAXOCCURRENCE; }\n if (viewDate === void 0) { viewDate = null; }\n var ruleObject = extractObjectFromRule(rule);\n var cacheDate;\n var data = [];\n var modifiedDate = new Date(startDate.getTime());\n if (viewDate && viewDate > startDate && !ruleObject.count) {\n tempViewDate = new Date(new Date(viewDate.getTime()).setHours(0, 0, 0));\n }\n else {\n tempViewDate = null;\n }\n if (!ruleObject.until && tempViewDate) {\n cacheDate = new Date(tempViewDate.getTime());\n cacheDate.setDate(tempViewDate.getDate() + 42 * (ruleObject.interval));\n ruleObject.until = cacheDate;\n }\n if (ruleObject.until && startDate > ruleObject.until) {\n return data;\n }\n maxOccurrence = maximumCount;\n setFirstDayOfWeek(DAYINDEX[startDayOfWeek]);\n tempExcludeDate = [];\n var tempDate = isNullOrUndefined(excludeDate) ? [] : excludeDate.split(',');\n tempDate.forEach(function (content) {\n var parsedDate = getDateFromRecurrenceDateString(content);\n tempExcludeDate.push(new Date(parsedDate.getTime()).setHours(0, 0, 0, 0));\n });\n switch (ruleObject.freq) {\n case 'DAILY':\n dailyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'WEEKLY':\n weeklyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'MONTHLY':\n monthlyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'YEARLY':\n yearlyType(modifiedDate, ruleObject.until, data, ruleObject);\n }\n return data;\n}\nfunction getDateFromRecurrenceDateString(recDateString) {\n return new Date(recDateString.substr(0, 4) +\n '-' + recDateString.substr(4, 2) +\n '-' + recDateString.substr(6, 5) +\n ':' + recDateString.substr(11, 2) +\n ':' + recDateString.substr(13));\n}\nfunction excludeDateHandler(data, date) {\n var zeroIndex = new Date(date).setHours(0, 0, 0, 0);\n if (tempExcludeDate.indexOf(zeroIndex) === -1 && (!tempViewDate || zeroIndex >= tempViewDate.getTime())) {\n data.push(date);\n }\n}\nfunction dailyType(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var interval = ruleObject.interval;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n while (compareDates(tempDate, endDate)) {\n state = true;\n state = validateRules(tempDate, ruleObject);\n if (state) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n break;\n }\n }\n tempDate.setDate(tempDate.getDate() + interval);\n }\n}\nfunction weeklyType(startDate, endDate, data, ruleObject) {\n var tempDate = getStartDateForWeek(startDate, ruleObject.day);\n var interval = ruleObject.interval;\n var expectedDays = ruleObject.day;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var dayCycleData = processWeekDays(expectedDays);\n while (compareDates(tempDate, endDate)) {\n state = true;\n state = validateRules(tempDate, ruleObject);\n if (state) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n break;\n }\n }\n if (expectedDays.length > 1) {\n tempDate.setDate(tempDate.getDate()\n + dayCycleData[DAYINDEX[tempDate.getDay()]]\n + ((expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === expectedDays.length - 1) ?\n ((interval - 1) * 7) : 0));\n }\n else {\n tempDate.setDate(tempDate.getDate()\n + (interval * 7));\n }\n }\n}\nfunction monthlyType(startDate, endDate, data, ruleObject) {\n var ruleType = validateMonthlyRuleType(ruleObject);\n switch (ruleType) {\n case 'day':\n monthlyDayTypeProcess(startDate, endDate, data, ruleObject);\n break;\n case 'both':\n case 'date':\n monthlyDateTypeProcess(startDate, endDate, data, ruleObject);\n break;\n }\n}\nfunction yearlyType(startDate, endDate, data, ruleObject) {\n var typeValue = checkYearlyType(ruleObject);\n switch (typeValue) {\n case 'MONTH':\n monthlyType(startDate, endDate, data, ruleObject);\n break;\n case 'WEEKNO':\n processWeekNo(startDate, endDate, data, ruleObject);\n break;\n case 'YEARDAY':\n processYearDay(startDate, endDate, data, ruleObject);\n break;\n }\n}\nfunction processWeekNo(startDate, endDate, data, ruleObject) {\n var stDate = new Date(startDate.getFullYear(), 0, 0);\n var tempDate;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var startDay;\n var firstWeekSpan;\n var weekNos = ruleObject.weekNo;\n var weekNo;\n var maxDate;\n var minDate;\n while (compareDates(stDate, endDate)) {\n startDay = dayIndex.indexOf(DAYINDEX[stDate.getDay()]);\n firstWeekSpan = (6 - startDay) + 1;\n for (var index = 0; index < weekNos.length; index++) {\n weekNo = weekNos[index];\n weekNo = (weekNo > 0) ? weekNo : 53 + weekNo + 1;\n maxDate = (weekNo === 1) ? firstWeekSpan : firstWeekSpan + ((weekNo - 1) * 7);\n minDate = (weekNo === 1) ? firstWeekSpan - 7 : firstWeekSpan + ((weekNo - 2) * 7);\n while (minDate < maxDate) {\n tempDate = new Date(stDate.getTime() + (MS_PER_DAY * minDate));\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n minDate++;\n }\n }\n stDate = new Date(tempDate.getFullYear() + ruleObject.interval, 0, 0);\n }\n}\nfunction processYearDay(startDate, endDate, data, ruleObject) {\n var stDate = new Date(startDate.getFullYear(), 0, 0);\n var tempDate;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var date;\n while (compareDates(stDate, endDate)) {\n for (var index = 0; index < ruleObject.yearDay.length; index++) {\n date = ruleObject.yearDay[index];\n tempDate = new Date(stDate.getTime());\n if ((date === LEAPYEAR || date === -LEAPYEAR) && ((tempDate.getFullYear() + 1) % 4 !== 0)) {\n tempDate.setDate(tempDate.getDate() + 1);\n continue;\n }\n tempDate.setDate(tempDate.getDate() + ((date < 0) ? getMaxYearDay(tempDate.getFullYear() + 1) + 1 + date : date));\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n stDate = new Date(tempDate.getFullYear() + ruleObject.interval, 0, 0);\n }\n}\nfunction getMaxYearDay(date) {\n return (date % 4 === 0) ? LEAPYEAR : NORMALYEAR;\n}\nfunction checkYearlyType(ruleObject) {\n if (ruleObject.yearDay.length) {\n return 'YEARDAY';\n }\n else if (ruleObject.weekNo.length) {\n return 'WEEKNO';\n }\n return 'MONTH';\n}\nfunction monthlyDateTypeProcess(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var mainDate = new Date(startDate.getTime());\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var interval = ruleObject.interval;\n var monthInit = 0;\n var date;\n var state;\n tempDate.setDate(1);\n mainDate.setDate(1);\n if (ruleObject.month.length) {\n tempDate.setMonth(ruleObject.month[0] - 1);\n }\n while (compareDates(tempDate, endDate)) {\n for (var index = 0; index < ruleObject.monthDay.length; index++) {\n date = ruleObject.monthDay[index];\n var maxDate = (tempDate.getMonth() === 1) ?\n (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n date = date > 0 ? date : (maxDate + date + 1);\n if ((date > 0) && validateProperDate(tempDate, date, mainDate)) {\n tempDate.setDate(date);\n if (endDate && tempDate > endDate) {\n return;\n }\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, interval);\n }\n}\nfunction setNextValidDate(tempDate, ruleObject, monthInit, interval, beginDate) {\n if (beginDate === void 0) { beginDate = null; }\n var monthData = beginDate ? beginDate.getMonth() : 0;\n tempDate.setDate(1);\n if (ruleObject.month.length) {\n monthInit++;\n monthInit = monthInit % ruleObject.month.length;\n tempDate.setMonth(ruleObject.month[monthInit] - 1);\n if (monthInit === 0) {\n tempDate.setFullYear(tempDate.getFullYear() + interval);\n }\n }\n else {\n if (beginDate && (beginDate.getFullYear() < tempDate.getFullYear())) {\n monthData = tempDate.getMonth() - 1;\n }\n tempDate.setMonth((beginDate ?\n monthData :\n tempDate.getMonth()) + interval);\n }\n return monthInit;\n}\nfunction monthlyDayTypeProcess(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var expectedDays = ruleObject.day;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var dayCycleData = processWeekDays(expectedDays);\n var interval = ruleObject.interval;\n var state;\n var monthCollection = [];\n var weekCollection = [];\n var month;\n var index;\n var beginDate;\n var monthInit = 0;\n tempDate.setDate(1);\n if (ruleObject.month.length) {\n tempDate.setMonth(ruleObject.month[0] - 1);\n }\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n while (compareDates(tempDate, endDate)) {\n month = tempDate.getMonth();\n beginDate = new Date(tempDate.getTime());\n if (expectedDays.length > 1) {\n while (tempDate.getMonth() === month) {\n weekCollection.push(tempDate.getTime());\n if (DAYINDEX[tempDate.getDay()] === expectedDays[expectedDays.length - 1]) {\n monthCollection.push(weekCollection);\n weekCollection = [];\n }\n tempDate.setDate(tempDate.getDate()\n + dayCycleData[DAYINDEX[tempDate.getDay()]]);\n }\n }\n else {\n var currentMonthDate = new Date(tempDate.getTime());\n while (currentMonthDate.getMonth() === month) {\n monthCollection.push([currentMonthDate.getTime()]);\n currentMonthDate.setDate(currentMonthDate.getDate() + (7));\n }\n }\n index = ((ruleObject.setPosition < 1) ? (monthCollection.length + ruleObject.setPosition) : ruleObject.setPosition - 1);\n if (ruleObject.setPosition === null) {\n index = 0;\n var datas = [];\n for (var week = 0; week < monthCollection.length; week++) {\n for (var row = 0; row < monthCollection[week].length; row++) {\n datas.push(monthCollection[week][row]);\n }\n }\n monthCollection = [datas];\n }\n for (var week = 0; week < monthCollection[index].length; week++) {\n var dayData = monthCollection[index][week];\n var chDate = new Date(dayData);\n state = validateRules(chDate, ruleObject);\n if ((chDate >= startDate) && compareDates(chDate, endDate) && state) {\n excludeDateHandler(data, dayData);\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, interval, beginDate);\n monthCollection = [];\n weekCollection = [];\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n }\n}\nfunction compareDates(startDate, endDate) {\n return endDate ? (startDate <= endDate) : true;\n}\nfunction checkDayIndex(day, expectedDays) {\n return (expectedDays.indexOf(DAYINDEX[day]) === -1);\n}\nfunction getStartDateForWeek(startDate, expectedDays) {\n var tempDate = new Date(startDate.getTime());\n if (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === -1) {\n do {\n tempDate.setDate(tempDate.getDate() + 1);\n } while (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === -1);\n }\n return tempDate;\n}\nexport function extractObjectFromRule(rules) {\n var ruleObject = {\n freq: null,\n interval: 1,\n count: null,\n until: null,\n day: [],\n month: [],\n weekNo: [],\n monthDay: [],\n yearDay: [],\n setPosition: null,\n validRules: []\n };\n var rulesList = rules.split(';');\n var splitData = [];\n var temp;\n rulesList.forEach(function (data) {\n splitData = data.split('=');\n switch (splitData[0]) {\n case 'UNTIL':\n temp = splitData[1];\n ruleObject.until = getDateFromRecurrenceDateString(temp);\n break;\n case 'BYDAY':\n ruleObject.day = splitData[1].split(',');\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYMONTHDAY':\n ruleObject.monthDay = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYMONTH':\n ruleObject.month = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYYEARDAY':\n ruleObject.yearDay = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYWEEKNO':\n ruleObject.weekNo = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'INTERVAL':\n ruleObject.interval = parseInt(splitData[1], 10);\n break;\n case 'COUNT':\n ruleObject.count = parseInt(splitData[1], 10);\n break;\n case 'BYSETPOS':\n ruleObject.setPosition = parseInt(splitData[1], 10);\n break;\n case 'FREQ':\n ruleObject.freq = splitData[1];\n break;\n }\n });\n if ((ruleObject.freq === 'MONTHLY') && (ruleObject.monthDay.length === 0)) {\n var index = ruleObject.validRules.indexOf('BYDAY');\n ruleObject.validRules.splice(index, 1);\n }\n return ruleObject;\n}\nfunction validateProperDate(tempDate, data, startDate) {\n var maxDate = (tempDate.getMonth() === 1) ? (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n return (data <= maxDate) && (tempDate >= startDate);\n}\nfunction processWeekDays(expectedDays) {\n var dayCycle = {};\n expectedDays.forEach(function (element, index) {\n if (index === expectedDays.length - 1) {\n var startIndex = dayIndex.indexOf(element);\n var temp = startIndex;\n while (temp % 7 !== dayIndex.indexOf(expectedDays[0])) {\n temp++;\n }\n dayCycle[element] = temp - startIndex;\n }\n else {\n dayCycle[element] = dayIndex.indexOf(expectedDays[(index + 1)]) - dayIndex.indexOf(element);\n }\n });\n return dayCycle;\n}\nfunction checkMonth(tempDate, expectedMonth) {\n return (expectedMonth.indexOf(tempDate.getMonth() + 1) === -1);\n}\nfunction checkDate(tempDate, expectedDate) {\n var temp = expectedDate.slice(0);\n var data;\n var maxDate = (tempDate.getMonth() === 1) ?\n (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n data = temp.shift();\n while (data) {\n if (data < 0) {\n data = data + maxDate + 1;\n }\n if (data === tempDate.getDate()) {\n return false;\n }\n data = temp.shift();\n }\n return true;\n}\nfunction checkYear(tempDate, expectedyearDay) {\n var temp = expectedyearDay.slice(0);\n var data;\n var yearDay = getYearDay(tempDate);\n data = temp.shift();\n while (data) {\n if (data < 0) {\n data = data + getMaxYearDay(tempDate.getFullYear()) + 1;\n }\n if (data === yearDay) {\n return false;\n }\n data = temp.shift();\n }\n return true;\n}\nfunction getYearDay(currentDate) {\n if (!startDateCollection[currentDate.getFullYear()]) {\n startDateCollection[currentDate.getFullYear()] = new Date(currentDate.getFullYear(), 0, 0);\n }\n var tempDate = startDateCollection[currentDate.getFullYear()];\n var diff = currentDate.getTime() - tempDate.getTime();\n return Math.ceil(diff / MS_PER_DAY);\n}\nfunction validateMonthlyRuleType(ruleObject) {\n if (ruleObject.monthDay.length && !ruleObject.day.length) {\n return 'date';\n }\n else if (!ruleObject.monthDay.length && ruleObject.day.length) {\n return 'day';\n }\n return 'both';\n}\nfunction rotate(days) {\n var data = days.shift();\n days.push(data);\n}\nfunction setFirstDayOfWeek(day) {\n while (dayIndex[0] !== day) {\n rotate(dayIndex);\n }\n}\nfunction validateRules(tempDate, ruleObject) {\n var state = true;\n var expectedDays = ruleObject.day;\n var expectedMonth = ruleObject.month;\n var expectedDate = ruleObject.monthDay;\n var expectedyearDay = ruleObject.yearDay;\n ruleObject.validRules.forEach(function (rule) {\n switch (rule) {\n case 'BYDAY':\n if (checkDayIndex(tempDate.getDay(), expectedDays)) {\n state = false;\n }\n break;\n case 'BYMONTH':\n if (checkMonth(tempDate, expectedMonth)) {\n state = false;\n }\n break;\n case 'BYMONTHDAY':\n if (checkDate(tempDate, expectedDate)) {\n state = false;\n }\n break;\n case 'BYYEARDAY':\n if (checkYear(tempDate, expectedyearDay)) {\n state = false;\n }\n break;\n }\n });\n return state;\n}\nvar startDateCollection = {};\nvar tempExcludeDate;\nvar dayIndex = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nvar maxOccurrence;\nvar tempViewDate;\nvar monthDay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYINDEX = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nvar MAXOCCURRENCE = 43;\nvar LEAPYEAR = 366;\nvar NORMALYEAR = 365;\nvar WEEKPOS = ['first', 'second', 'third', 'fourth', 'last'];\nvar TIMES = 'summaryTimes';\nvar ON = 'summaryOn';\nvar EVERY = 'every';\nvar UNTIL = 'summaryUntil';\nvar DAYS = 'summaryDay';\nvar WEEKS = 'summaryWeek';\nvar MONTHS = 'summaryMonth';\nvar YEARS = 'summaryYear';\nvar DAYINDEXOBJECT = {\n SU: 'sun',\n MO: 'mon',\n TU: 'tue',\n WE: 'wed',\n TH: 'thu',\n FR: 'fri',\n SA: 'sat'\n};\nexport function getRecurrenceStringFromDate(date) {\n return [date.getUTCFullYear(),\n roundDateValues(date.getUTCMonth() + 1),\n roundDateValues(date.getUTCDate()),\n 'T',\n roundDateValues(date.getUTCHours()),\n roundDateValues(date.getUTCMinutes()),\n roundDateValues(date.getUTCSeconds()),\n 'Z'].join('');\n}\nfunction roundDateValues(date) {\n return ('0' + date).slice(-2);\n}\n","import { createElement, SvgRenderer, compile, merge, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Create the class for size\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Internal use of type rect\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function () {\n function RectOption(id, fill, border, opacity, rect, dashArray) {\n this.y = rect.y;\n this.x = rect.x;\n this.height = rect.height;\n this.width = rect.width;\n this.id = id;\n this.fill = fill;\n this.opacity = opacity;\n this.stroke = border.color;\n this['stroke-width'] = border.width;\n this['stroke-dasharray'] = dashArray;\n }\n return RectOption;\n}());\nexport { RectOption };\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n this.id = id;\n this.opacity = opacity;\n this.fill = fill;\n this.stroke = color;\n this['stroke-width'] = width;\n this['stroke-dasharray'] = dashArray;\n this.d = d;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var measureObject = document.getElementById('treeMapMeasureText');\n if (measureObject === null) {\n measureObject = createElement('text', { id: 'treeMapMeasureText' });\n document.body.appendChild(measureObject);\n }\n measureObject.innerHTML = text;\n measureObject.style.position = 'absolute';\n measureObject.style.fontSize = font.size;\n measureObject.style.fontWeight = font.fontWeight;\n measureObject.style.fontStyle = font.fontStyle;\n measureObject.style.fontFamily = font.fontFamily;\n measureObject.style.visibility = 'hidden';\n measureObject.style.top = '-100';\n measureObject.style.left = '0';\n measureObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n measureObject.style.lineHeight = 'normal';\n return new Size(measureObject.clientWidth, measureObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n this.transform = '';\n this.baseLine = 'auto';\n this.id = id;\n this.text = text;\n this.transform = transform;\n this.anchor = anchor;\n this.x = x;\n this.y = y;\n this.baseLine = baseLine;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * @private\n * Trim the title text\n */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth || label.length < 4) {\n if (label.length < 4) {\n label = ' ';\n }\n return label;\n }\n }\n }\n return label;\n}\n/**\n * Map internal class for Point\n */\nvar Location = /** @class */ (function () {\n function Location(x, y) {\n this.x = x;\n this.y = y;\n }\n return Location;\n}());\nexport { Location };\n/**\n * Method to calculate x position of title\n */\nexport function findPosition(location, alignment, textSize, type) {\n var x;\n var y;\n switch (alignment) {\n case 'Near':\n x = location.x;\n break;\n case 'Center':\n x = (type === 'title') ? (location.width / 2 - textSize.width / 2) :\n ((location.x + (location.width / 2)) - textSize.width / 2);\n break;\n case 'Far':\n x = (type === 'title') ? (location.width - location.y - textSize.width) :\n ((location.x + location.width) - textSize.width);\n break;\n }\n y = (type === 'title') ? location.y + (textSize.height / 2) : ((location.y + location.height / 2) + textSize.height / 2);\n return new Location(x, y);\n}\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine,\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color\n };\n var text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n var tspanElement;\n var renderer = new SvgRenderer('');\n var height;\n var htmlObject = renderer.createText(renderOptions, text);\n htmlObject.style['user-select'] = 'none';\n htmlObject.style['-moz-user-select'] = 'none';\n htmlObject.style['-webkit-touch-callout'] = 'none';\n htmlObject.style['-webkit-user-select'] = 'none';\n htmlObject.style['-khtml-user-select'] = 'none';\n htmlObject.style['-ms-user-select'] = 'none';\n htmlObject.style['-o-user-select'] = 'none';\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + (i * height)\n }, options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/* tslint:disable:no-string-literal */\nexport function itemsToOrder(a, b) {\n return a['weight'] === b['weight'] ? 0 : a['weight'] < b['weight'] ? 1 : -1;\n}\nexport function isContainsData(source, pathName, processData, treemap) {\n var isExist = false;\n var name = '';\n var path;\n var leaf = treemap.leafItemSettings;\n for (var i = 0; i < source.length; i++) {\n path = treemap.levels[i] ? treemap.levels[i].groupPath : leaf.labelPath ? leaf.labelPath : treemap.weightValuePath;\n if (source[i] === processData[path]) {\n name += (processData[path]) + (i === source.length - 1 ? '' : '_');\n if (name === pathName) {\n isExist = true;\n break;\n }\n }\n }\n return isExist;\n}\nexport function findChildren(data) {\n var children;\n if (data) {\n var keys = Object.keys(data);\n children = new Object();\n for (var i = 0; i < keys.length; i++) {\n if (data[keys[i]] instanceof Array) {\n children['values'] = data[keys[i]];\n children['key'] = keys[i];\n break;\n }\n }\n }\n return children;\n}\nexport function findHightLightItems(data, items, mode, treeMap) {\n if (mode === 'Child') {\n items.push(data['levelOrderName']);\n var children = findChildren(data)['values'];\n if (children && children.length > 0) {\n for (var i = 0; i < children.length; i++) {\n if (items.indexOf(children[i]['levelOrderName']) === -1) {\n items.push(children[i]['levelOrderName']);\n }\n }\n for (var j = 0; j < children.length; j++) {\n findHightLightItems(children[j], items, mode, treeMap);\n }\n }\n }\n else if (mode === 'Parent') {\n if (typeof data['levelOrderName'] === 'string' && items.indexOf(data['levelOrderName']) === -1) {\n items.push(data['levelOrderName']);\n findHightLightItems(data['parent'], items, mode, treeMap);\n }\n }\n else if (mode === 'All') {\n var parentName = data['levelOrderName'].split('_')[0];\n var currentItem = void 0;\n for (var i = 0; i < treeMap.layout.renderItems.length; i++) {\n currentItem = treeMap.layout.renderItems[i];\n if ((currentItem['levelOrderName']).indexOf(parentName) > -1 && items.indexOf(currentItem['levelOrderName']) === -1) {\n items.push(currentItem['levelOrderName']);\n }\n }\n }\n else {\n items.push(data['levelOrderName']);\n }\n return items;\n}\n/**\n * Function to compile the template function for maps.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = compile(template);\n }\n return templateFn;\n}\n/**\n * @private\n */\nexport function convertElement(element, labelId, data) {\n var childElement = createElement('div', {\n id: labelId,\n styles: 'position: absolute;pointer-events: auto;'\n });\n while (element.length > 0) {\n childElement.appendChild(element[0]);\n }\n var templateHtml = childElement.innerHTML;\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n templateHtml = templateHtml.replace(new RegExp('{{:' + keys[i] + '}}', 'g'), data[keys[i].toString()]);\n }\n childElement.innerHTML = templateHtml;\n return childElement;\n}\nexport function findLabelLocation(rect, position, labelSize, type, treemap) {\n var location = new Location(0, 0);\n var padding = 5;\n var paddings = 2;\n var elementRect = treemap.element.getBoundingClientRect();\n var x = (type === 'Template') ? treemap.areaRect.x : 0;\n var y = (type === 'Template') ? treemap.areaRect.y : 0;\n location.x = (Math.abs(x - ((position.indexOf('Left') > -1) ? rect.x + padding : !(position.indexOf('Right') > -1) ?\n rect.x + ((rect.width / 2) - (labelSize.width / 2)) : (rect.x + rect.width) - labelSize.width))) - paddings;\n location.y = Math.abs(y - ((position.indexOf('Top') > -1) ? (type === 'Template' ? rect.y : rect.y + labelSize.height) :\n !(position.indexOf('Bottom') > -1) ? type === 'Template' ? (rect.y + ((rect.height / 2) - (labelSize.height / 2))) :\n (rect.y + (rect.height / 2) + labelSize.height / 4) : (rect.y + rect.height) - labelSize.height));\n return location;\n}\nexport function measureElement(element, parentElement) {\n var size = new Size(0, 0);\n parentElement.appendChild(element);\n size.height = element.offsetHeight;\n size.width = element.offsetWidth;\n document.getElementById(element.id).remove();\n return size;\n}\nexport function getArea(rect) {\n return (rect.width - rect.x) * (rect.height - rect.y);\n}\nexport function getShortestEdge(input) {\n var container = convertToContainer(input);\n var width = container.width;\n var height = container.height;\n var result = Math.min(width, height);\n return result;\n}\nexport function convertToContainer(rect) {\n var x = rect.x;\n var y = rect.y;\n var width = rect.width;\n var height = rect.height;\n return {\n x: x,\n y: y,\n width: width - x,\n height: height - y\n };\n}\nexport function convertToRect(container) {\n var xOffset = container.x;\n var yOffset = container.y;\n var width = container.width;\n var height = container.height;\n return {\n x: xOffset,\n y: yOffset,\n width: xOffset + width,\n height: yOffset + height,\n };\n}\nexport function getMousePosition(pageX, pageY, element) {\n var elementRect = element.getBoundingClientRect();\n var pageXOffset = element.ownerDocument.defaultView.pageXOffset;\n var pageYOffset = element.ownerDocument.defaultView.pageYOffset;\n var clientTop = element.ownerDocument.documentElement.clientTop;\n var clientLeft = element.ownerDocument.documentElement.clientLeft;\n var positionX = elementRect.left + pageXOffset - clientLeft;\n var positionY = elementRect.top + pageYOffset - clientTop;\n return new Location((pageX - positionX), (pageY - positionY));\n}\nexport function colorMap(colorMapping, equalValue, value, weightValuePath) {\n var fill;\n var paths = [];\n var opacity;\n if (isNullOrUndefined(equalValue) && (isNullOrUndefined(value) && isNaN(value))) {\n return null;\n }\n for (var i = 0; i < colorMapping.length; i++) {\n var color = null;\n if (colorMapping[i].from && colorMapping[i].to && colorMapping[i].value) {\n if ((value >= colorMapping[i].from && colorMapping[i].to >= value) && (colorMapping[i].value === equalValue)) {\n color = colorMapping[i].color;\n }\n }\n else if ((colorMapping[i].from && colorMapping[i].to) || (colorMapping[i].value)) {\n colorMapping[i].value = !isNullOrUndefined(colorMapping[i].value) ? colorMapping[i].value.toString() : colorMapping[i].value;\n if ((value >= colorMapping[i].from && colorMapping[i].to >= value) || (colorMapping[i].value === equalValue)) {\n color = colorMapping[i].color;\n }\n }\n if (colorMapping[i].minOpacity && colorMapping[i].maxOpacity && color) {\n opacity = deSaturationColor(weightValuePath, colorMapping[i], color, value);\n }\n fill = color;\n opacity = (colorMapping[i].minOpacity) ? opacity : '1';\n paths.push(fill);\n }\n for (var j = paths.length - 1; j >= 0; j--) {\n fill = paths[j];\n j = (fill) ? -1 : j;\n }\n return { fill: fill, opacity: opacity };\n}\nexport function deSaturationColor(weightValuePath, colorMapping, color, rangeValue) {\n var opacity = 0;\n if ((rangeValue >= colorMapping.from && rangeValue <= colorMapping.to)) {\n var ratio = (rangeValue - colorMapping.from) / (colorMapping.to - colorMapping.from);\n opacity = (ratio * (colorMapping.maxOpacity - colorMapping.minOpacity)) + colorMapping.minOpacity;\n }\n return opacity.toString();\n}\nexport function wordWrap(maximumWidth, dataLabel, font) {\n var textCollection = dataLabel.split(' ');\n var label = '';\n var labelCollection = [];\n var text;\n for (var i = 0, len = textCollection.length; i < len; i++) {\n text = textCollection[i];\n if (measureText(label.concat(text), font).width < maximumWidth) {\n label = label.concat((label === '' ? '' : ' ') + text);\n }\n else {\n if (label !== '') {\n labelCollection.push(textTrim(maximumWidth, label, font));\n label = text;\n }\n else {\n labelCollection.push(textTrim(maximumWidth, text, font));\n text = '';\n }\n }\n if (label && i === len - 1) {\n labelCollection.push(textTrim(maximumWidth, label, font));\n }\n }\n return labelCollection;\n}\nexport function textWrap(maxWidth, label, font) {\n var text = label;\n var resultText = [];\n var currentLength = 0;\n var totalWidth = measureText(label, font).width;\n var totalLength = label.length;\n if (maxWidth >= totalWidth) {\n resultText.push(label);\n return resultText;\n }\n else {\n for (var i = label.length; i > currentLength; i--) {\n var sliceString = label.slice(currentLength, i);\n totalWidth = measureText(sliceString, font).width;\n if (totalWidth <= maxWidth) {\n resultText.push(sliceString);\n currentLength += sliceString.length;\n if (totalLength === currentLength) {\n return resultText;\n }\n i = totalLength + 1;\n }\n }\n }\n return resultText;\n}\n/**\n * hide function\n */\nexport function hide(maxWidth, maxHeight, text, font) {\n var hideText = text;\n var textSize = measureText(text, font);\n hideText = (textSize.width > maxWidth || textSize.height > maxHeight) ? ' ' : text;\n return hideText;\n}\nexport function orderByArea(a, b) {\n if (a['itemArea'] === b['itemArea']) {\n return 0;\n }\n else if (a['itemArea'] < b['itemArea']) {\n return 1;\n }\n return -1;\n}\nexport function removeClassNames(elements, type, treemap) {\n var opacity;\n var process = true;\n var element;\n var stroke;\n var strokeWidth;\n var fill;\n var options = {};\n for (var j = 0; j < elements.length; j++) {\n element = elements[j].childNodes[0];\n options = treemap.layout.renderItems[element.id.split('_')[6]]['options'];\n applyOptions(element, options);\n elements[j].classList.remove(type);\n j -= 1;\n }\n}\nexport function applyOptions(element, options) {\n element.setAttribute('opacity', options['opacity']);\n element.setAttribute('fill', options['fill']);\n element.setAttribute('stroke', options['border']['color']);\n element.setAttribute('stroke-width', options['border']['width']);\n}\nexport function textFormatter(format, data, treemap) {\n if (isNullOrUndefined(format)) {\n return null;\n }\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n format = format.split('${' + key + '}').join(formatValue(data[key], treemap).toString());\n }\n return format;\n}\nexport function formatValue(value, treemap) {\n var formatValue;\n var formatFunction;\n if (treemap.format && !isNaN(Number(value))) {\n formatFunction = treemap.intl.getNumberFormat({ format: treemap.format, useGrouping: treemap.useGroupingSeparator });\n formatValue = formatFunction(Number(value));\n }\n else {\n formatValue = value;\n }\n return formatValue ? formatValue : '';\n}\n/** @private */\nvar ColorValue = /** @class */ (function () {\n function ColorValue(r, g, b) {\n this.r = r;\n this.g = g;\n this.b = b;\n }\n return ColorValue;\n}());\nexport { ColorValue };\n/** @private */\nexport function convertToHexCode(value) {\n return '#' + componentToHex(value.r) + componentToHex(value.g) + componentToHex(value.b);\n}\n/** @private */\nexport function componentToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/** @private */\nexport function convertHexToColor(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new ColorValue(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new ColorValue(255, 255, 255);\n}\n/** @private */\nexport function colorNameToHex(color) {\n var element;\n color = color === 'transparent' ? 'white' : color;\n element = document.getElementById('treeMapMeasureText');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n var exp = /^(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/;\n var isRGBValue = exp.exec(color);\n return convertToHexCode(new ColorValue(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var functionName = 'Path';\n var svgRenderer = new SvgRenderer('');\n var temp = renderLegendShape(location, size, shape, options, url);\n var htmlElement = svgRenderer['draw' + temp.functionName](temp.renderOption);\n htmlElement.setAttribute('aria-label', label);\n return htmlElement;\n}\n/** @private */\nexport function renderLegendShape(location, size, shape, options, url) {\n var renderPath;\n var functionName = 'Path';\n var shapeWidth = size.width;\n var shapeHeight = size.height;\n var shapeX = location.x;\n var shapeY = location.y;\n var x = location.x + (-shapeWidth / 2);\n var y = location.y + (-shapeHeight / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': shapeWidth / 2, 'ry': shapeHeight / 2, 'cx': shapeX, 'cy': shapeY });\n break;\n case 'VerticalLine':\n renderPath = 'M' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' + 'L' + ' ' + shapeX + ' '\n + (shapeY + (-shapeHeight / 2));\n merge(options, { 'd': renderPath });\n break;\n case 'Diamond':\n renderPath = 'M' + ' ' + x + ' ' + shapeY + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + shapeY + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + shapeY + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'Rectangle':\n renderPath = 'M' + ' ' + x + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (shapeY + (-shapeHeight / 2)) + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'Triangle':\n renderPath = 'M' + ' ' + x + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (shapeY + (shapeHeight / 2)) + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'InvertedTriangle':\n renderPath = 'M' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY - (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX - (shapeWidth / 2)) + ' ' + (shapeY - (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY - (shapeHeight / 2)) + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (shapeWidth / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (shapeWidth / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n renderPath = 'M' + ' ' + (shapeX + xValue) + ' ' + (shapeY + yValue) + ' ';\n }\n else {\n renderPath = renderPath.concat('L' + ' ' + (shapeX + xValue) + ' ' + (shapeY + yValue) + ' ');\n }\n }\n renderPath = renderPath.concat('Z');\n merge(options, { 'd': renderPath });\n break;\n case 'Star':\n renderPath = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6)\n + ' L ' + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n merge(options, { 'd': renderPath });\n break;\n case 'Cross':\n renderPath = 'M' + ' ' + x + ' ' + shapeY + ' ' + 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + shapeY + ' ' +\n 'M' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' + 'L' + ' ' + shapeX + ' ' +\n (shapeY + (-shapeHeight / 2));\n merge(options, { 'd': renderPath });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': shapeHeight, 'width': shapeWidth, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\nexport function isParentItem(data, item) {\n var isParentItem = false;\n for (var j = 0; j < data.length; j++) {\n if (item['levelOrderName'] === data[j]['levelOrderName']) {\n isParentItem = true;\n break;\n }\n }\n return isParentItem;\n}\n/**\n * Ajax support for treemap\n */\nvar TreeMapAjax = /** @class */ (function () {\n function TreeMapAjax(options, type, async, contentType, sendData) {\n this.dataOptions = options;\n this.type = type || 'GET';\n this.async = async || true;\n this.contentType = contentType;\n this.sendData = sendData;\n }\n return TreeMapAjax;\n}());\nexport { TreeMapAjax };\n","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n * var ajax = new Ajax(\"index.html\", \"GET\", true);\n * ajax.send().then(\n * function (value) {\n * console.log(value);\n * },\n * function (reason) {\n * console.log(reason);\n * });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n /**\n * Constructor for Ajax class\n * @param {string|Object} options?\n * @param {string} type?\n * @param {boolean} async?\n * @returns defaultType\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n * Send the request to server.\n * @param {any} data - To send the user data\n * @return {Promise}\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false\n };\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n if (!isNullOrUndefined(_this.onLoad)) {\n _this.httpRequest.onload = _this.onLoad;\n }\n if (!isNullOrUndefined(_this.onProgress)) {\n _this.httpRequest.onprogress = _this.onProgress;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onAbort)) {\n _this.httpRequest.onabort = _this.onAbort;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onError)) {\n _this.httpRequest.onerror = _this.onError;\n }\n //** Upload Events **/\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onUploadProgress)) {\n _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n }\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n _this.beforeSend(eventArgs);\n }\n if (!eventArgs.cancel) {\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n }\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n //success range should be 200 to 299\n if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n if (this.emitError) {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n else {\n resolve();\n }\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n * @param {string} key Key to search in the response header\n * @returns {string}\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { debounce, extend } from './util';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * @private\n * ```html\n *
\n * \n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} debounce - Specifies at what interval given event listener should be triggered.\n * @return {Function}\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[i],\n listener: listener,\n debounce: debounceListener\n });\n element.addEventListener(event[i], debounceListener);\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[j] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[j], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n * @param {any} element - Specifies the target html element to clear the events\n * @return {void}\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n eventData = EventHandler.addOrGetEventData(element);\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[i].name, copyData[i].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n var fn = null;\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","import { isNullOrUndefined, getValue } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n ;\n /**\n * To attach handler for given property in current context.\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n this.boundedEvents[property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n * @param {string} eventName - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n if (curObject[i].id === id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n }\n else if (handler === curObject[i].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} args - Additional parameters to pass while calling the handler.\n * @return {void}\n */\n Observer.prototype.notify = function (property, argument) {\n if (this.notExist(property)) {\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var curObject = getValue(property, this.boundedEvents).slice(0);\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n };\n /**\n * To destroy handlers in the event\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n */\n Observer.prototype.notExist = function (prop) {\n return this.boundedEvents.hasOwnProperty(prop) === false;\n };\n /**\n * Returns if the handler is present.\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, getValue } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp('\\]');\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n */\n function Base(options, element) {\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.refreshing = false;\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange? - Specifies to true when we set properties.\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n ;\n /**\n * Calls for child element data bind\n * @param {Object} obj\n * @param {Object} parent\n * @returns {void}\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[key] instanceof Array) {\n for (var _a = 0, _b = parent[key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n ;\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n ;\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} listener - Specifies the call to run when the event occurs.\n * @return {void}\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n Base.prototype.trigger = function (eventName, eventProp) {\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n this.modelObserver.notify(eventName, eventProp);\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n handler.call(this, eventProp);\n }\n }\n this.isProtectedOnChange = prevDetection;\n }\n };\n /**\n * To maintain instance in base class\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-control', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n */\n Base.prototype.destroy = function () {\n var _this = this;\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-control']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n * @param elem Specifies the HTMLElement or element id string.\n * @param comp Specifies the component module name or Component.\n */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < elem.ej2_instances.length; i++) {\n instance = elem.ej2_instances[i];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n // tslint:disable-next-line:no-any\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ \\/]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ \\/]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ \\/]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ \\/]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ \\/]([\\w.]+)/i,\n SAFARI: /(safari)[ \\/]([\\w.]+)/i,\n WEBKIT: /(webkit)[ \\/]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n * @param {string} event - type of event triggered.\n * @returns {Boolean}\n */\n Browser.getEvent = function (event) {\n // tslint:disable-next-line:no-any\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer ? events[event].isPointer :\n (Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '')\n : events[event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * To get the value based on provided key and regX\n * @param {string} key\n * @param {RegExp} regX\n * @returns {Object}\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = window.browserDetails;\n if ('undefined' === typeof browserDetails[key]) {\n return browserDetails[key] = regX.test(Browser.userAgent);\n }\n return browserDetails[key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties \n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n * @returns BrowserInfo\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return window.browserDetails.isTouch = ('ontouchstart' in window);\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\n/**\n * Date base common constants and function for date parser and formatter.\n */\nexport var IntlBase;\n(function (IntlBase) {\n // tslint:disable-next-line:max-line-length\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n var defaultFirstDay = 'sun';\n var firstDayMapper = {\n 'sun': 0,\n 'mon': 1,\n 'tue': 2,\n 'wed': 3,\n 'thu': 4,\n 'fri': 5,\n 'sat': 6\n };\n IntlBase.formatRegex = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.currencyFormatRegex = /(^[ca]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n \"1-alt-variant\": \"Common Era\"\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': \"{1} 'at' {0}\",\n 'long': \"{1} 'at' {0}\",\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y',\n },\n }\n }\n },\n 'timeZoneNames': {\n \"hourFormat\": \"+HH:mm;-HH:mm\",\n \"gmtFormat\": \"GMT{0}\",\n \"gmtZeroFormat\": \"GMT\",\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n },\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###',\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n * @private\n * @param {string} skeleton\n * @param {Object} dateObject\n * @param {string} type\n * @returns {string}\n */\n function getResultantPattern(skeleton, dateObject, type) {\n var resPattern;\n var iType = type || 'date';\n if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n if (iType === 'dateTime') {\n var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n }\n }\n else {\n resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n * @private\n * @param {Object} cldr\n * @param {string} culture\n * @param {boolean} isNumber\n * @returns {Dependables}\n */\n function getDependables(cldr, culture, isNumber) {\n var ret = {};\n ret.parserObject = parser.getMainObject(cldr, culture) || IntlBase.defaultObject;\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n ret.dateObject = getValue('dates.calendars.gregorian', ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n * @private\n * @param {string} type\n * @param {string} numSystem\n * @param {Object} obj\n * @param {boolean} isAccount\n * @returns {string}\n */\n function getSymbolPattern(type, numSystem, obj, isAccount) {\n return getValue(type + 'Formats-numberSystem-' +\n numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n numSystem + '.standard', obj) : '');\n }\n IntlBase.getSymbolPattern = getSymbolPattern;\n /**\n * Returns proper numeric skeleton\n * @private\n * @param {string} skeleton\n * @returns {NumericSkeleton}\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n /* tslint:disable no-any */\n ret.type = IntlBase.patternMatcher[pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n * @private\n * @param {string} pattern\n * @param {boolean} needFraction\n * @param {string} cSymbol\n * @param {boolean} fractionOnly\n * @returns {NegativeData}\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n * @private\n * @param {string} val\n * @param {string} sym\n * @returns {string}\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n return val.replace(IntlBase.defaultCurrency, sym);\n }\n return '';\n }\n /**\n * Returns currency symbol based on currency code\n * @private\n * @param {Object} numericObject\n * @param {string} currencyCode\n * @returns {string}\n */\n function getCurrencySymbol(numericObject, currencyCode) {\n return getValue('currencies.' + currencyCode + '.symbol', numericObject) || '$';\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Dependables} obj\n * @returns {GenericFormatOptions}\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Object} numObject\n * @returns {NegativeData}\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n cOptions.useGrouping = integerPart.indexOf(',') !== -1;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n cOptions.groupSeparator = dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/\\'/g, '');\n cOptions.nend = cOptions.nend.replace(/\\'/g, '');\n }\n return cOptions;\n }\n /**\n * Returns formatting options for currency or percent type\n * @private\n * @param {string[]} parts\n * @param {string} actual\n * @param {string} symbol\n * @returns {NegativeData}\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[i];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n * @private\n * @param {Object} dateObj\n * @returns {string}\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[d‏M‏]([^d‏M])[d‏M‏]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n * @private\n * @param {string} culture\n * @param {DateFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture);\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n /**\n * Returns Native Number pattern\n * @private\n * @param {string} culture\n * @param {NumberFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualNumberFormat(culture, options, cldr) {\n var dependable = getDependables(cldr, culture, true);\n var parseOptions = { custom: true };\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n if (curMatch) {\n var dOptions = {};\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = (split.length > 1);\n curObj.nData = getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency') {\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent') {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/\\'/g, '\"');\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n function getWeekData(culture, cldr) {\n var firstDay = defaultFirstDay;\n var mapper = getValue('supplemental.weekData.firstDay', cldr);\n var iCulture = culture;\n if ((/en-/).test(iCulture)) {\n iCulture = iCulture.slice(3);\n }\n iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n if (mapper) {\n firstDay = mapper[iCulture] || defaultFirstDay;\n }\n return firstDayMapper[firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n})(IntlBase || (IntlBase = {}));\n","/**\n * To import utils\n */\nimport { isNullOrUndefined } from './util';\n/**\n * @private\n */\nvar CanvasRenderer = /** @class */ (function () {\n /* End-Properties */\n function CanvasRenderer(rootID) {\n this.rootId = rootID;\n }\n // method to get the attributes value\n /* tslint:disable */\n CanvasRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n /* tslint:enable */\n /**\n * To create a Html5 canvas element\n * @param {BaseAttibutes} options - Options to create canvas\n * @return {HTMLCanvasElement}\n */\n CanvasRenderer.prototype.createCanvas = function (options) {\n var canvasObj = document.createElement('canvas');\n canvasObj.setAttribute('id', this.rootId + '_canvas');\n this.ctx = canvasObj.getContext('2d');\n this.canvasObj = canvasObj;\n this.setCanvasSize(options.width, options.height);\n return this.canvasObj;\n };\n /**\n * To set the width and height for the Html5 canvas element\n * @param {number} width - width of the canvas\n * @param {number} height - height of the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.setCanvasSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width)) {\n this.canvasObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.canvasObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height)) {\n this.canvasObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.canvasObj.setAttribute('height', this.height.toString());\n }\n };\n // To set the values to the attributes\n CanvasRenderer.prototype.setAttributes = function (options) {\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n var dashArray = this.getOptionValue(options, 'stroke-dasharray');\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n this.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n this.ctx.strokeStyle = this.getOptionValue(options, 'stroke');\n };\n /**\n * To draw a line\n * @param {LineAttributes} options - required options to draw a line on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawLine = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.moveTo(options.x1, options.y1);\n this.ctx.lineTo(options.x2, options.y2);\n this.ctx.stroke();\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a rectangle\n * @param {RectAttributes} options - required options to draw a rectangle on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawRectangle = function (options) {\n var canvasCtx = this.ctx;\n var cornerRadius = options.rx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.globalAlpha = this.getOptionValue(options, 'opacity');\n this.setAttributes(options);\n this.ctx.rect(options.x, options.y, options.width, options.height);\n if (cornerRadius !== null && cornerRadius >= 0) {\n this.drawCornerRadius(options);\n }\n else {\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n this.ctx.fillRect(options.x, options.y, options.width, options.height);\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n // To draw the corner of a rectangle\n CanvasRenderer.prototype.drawCornerRadius = function (options) {\n var cornerRadius = options.rx;\n var x = options.x;\n var y = options.y;\n var width = options.width;\n var height = options.height;\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n if (width < 2 * cornerRadius) {\n cornerRadius = width / 2;\n }\n if (height < 2 * cornerRadius) {\n cornerRadius = height / 2;\n }\n this.ctx.beginPath();\n this.ctx.moveTo(x + width - cornerRadius, y);\n this.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n this.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n this.ctx.arcTo(x, y + height, x, y, cornerRadius);\n this.ctx.arcTo(x, y, x + width, y, cornerRadius);\n this.ctx.closePath();\n this.ctx.fill();\n this.ctx.stroke();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a path on the canvas\n * @param {PathAttributes} options - options needed to draw path\n * @param {Int32Array} canvasTranslate - Array of numbers to translate the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawPath = function (options, canvasTranslate) {\n var path = options.d;\n var dataSplit = path.split(' ');\n var borderWidth = this.getOptionValue(options, 'stroke-width');\n var canvasCtx = this.ctx;\n var flag = true;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = options.opacity ? options.opacity : this.getOptionValue(options, 'fill-opacity');\n this.setAttributes(options);\n for (var i = 0; i < dataSplit.length; i = i + 3) {\n var x1 = parseFloat(dataSplit[i + 1]);\n var y1 = parseFloat(dataSplit[i + 2]);\n switch (dataSplit[i]) {\n case 'M':\n if (!options.innerR && !options.cx) {\n this.ctx.moveTo(x1, y1);\n }\n break;\n case 'L':\n if (!options.innerR) {\n this.ctx.lineTo(x1, y1);\n }\n break;\n case 'C':\n var c1 = parseFloat(dataSplit[i + 3]);\n var c2 = parseFloat(dataSplit[i + 4]);\n var c3 = parseFloat(dataSplit[i + 5]);\n var c4 = parseFloat(dataSplit[i + 6]);\n this.ctx.bezierCurveTo(x1, y1, c1, c2, c3, c4);\n i = i + 4;\n break;\n case 'A':\n if (!options.innerR) {\n if (options.cx) {\n this.ctx.arc(options.cx, options.cy, options.radius, 0, 2 * Math.PI, options.counterClockWise);\n }\n else {\n this.ctx.moveTo(options.x, options.y);\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.lineTo(options.x, options.y);\n }\n }\n else if (flag) {\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.arc(options.x, options.y, options.innerR, options.end, options.start, !options.counterClockWise);\n flag = false;\n }\n i = i + 5;\n break;\n case 'z':\n this.ctx.closePath();\n break;\n }\n }\n if (options.fill !== 'none' && options.fill !== undefined) {\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n }\n if (borderWidth > 0) {\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a text\n * @param {TextAttributes} options - options required to draw text\n * @param {string} label - Specifies the text which has to be drawn on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawText = function (options, label) {\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontSize = this.getOptionValue(options, 'font-size');\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n var anchor = this.getOptionValue(options, 'text-anchor');\n var opacity = options.opacity !== undefined ? options.opacity : 1;\n if (anchor === 'middle') {\n anchor = 'center';\n }\n this.ctx.save();\n this.ctx.fillStyle = options.fill;\n this.ctx.font = font;\n this.ctx.textAlign = anchor;\n this.ctx.globalAlpha = opacity;\n if (options.baseline) {\n this.ctx.textBaseline = options.baseline;\n }\n var txtlngth = 0;\n this.ctx.translate(options.x + (txtlngth / 2), options.y);\n this.ctx.rotate(options.labelRotation * Math.PI / 180);\n this.ctx.fillText(label, 0, 0);\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw circle on the canvas\n * @param {CircleAttributes} options - required options to draw the circle\n * @return {void}\n */\n CanvasRenderer.prototype.drawCircle = function (options) {\n var canvasCtx = this.ctx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n this.ctx.fillStyle = options.fill;\n this.ctx.globalAlpha = options.opacity;\n this.ctx.fill();\n this.setAttributes(options);\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw polyline\n * @param {PolylineAttributes} options - options needed to draw polyline\n * @return {void}\n */\n CanvasRenderer.prototype.drawPolyline = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n var points = options.points.split(' ');\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i].split(',');\n var x = parseFloat(point[0]);\n var y = parseFloat(point[1]);\n if (i === 0) {\n this.ctx.moveTo(x, y);\n }\n else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an ellipse on the canvas\n * @param {EllipseAttributes} options - options needed to draw ellipse\n * @return {void}\n */\n CanvasRenderer.prototype.drawEllipse = function (options) {\n var canvasCtx = this.ctx;\n var circumference = Math.max(options.rx, options.ry);\n var scaleX = options.rx / circumference;\n var scaleY = options.ry / circumference;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.translate(options.cx, options.cy);\n this.ctx.save();\n this.ctx.scale(scaleX, scaleY);\n this.ctx.arc(0, 0, circumference, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n this.ctx.restore();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an image\n * @param {ImageAttributes} options - options required to draw an image on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawImage = function (options) {\n this.ctx.save();\n var imageObj = new Image();\n if (!isNullOrUndefined(options.href)) {\n imageObj.src = options.href;\n this.ctx.drawImage(imageObj, options.x, options.y, options.width, options.height);\n }\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To create a linear gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\n */\n CanvasRenderer.prototype.createLinearGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createLinearGradient(0, 0, 0, this.canvasObj.height);\n }\n var color = this.setGradientValues(colors, myGradient);\n return color;\n };\n /**\n * To create a radial gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\n */\n CanvasRenderer.prototype.createRadialGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createRadialGradient(0, 0, 0, 0, 0, this.canvasObj.height);\n }\n var colorName = this.setGradientValues(colors, myGradient);\n return colorName;\n };\n // To set the gradient values\n CanvasRenderer.prototype.setGradientValues = function (colors, myGradient) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n for (var i = 0; i <= colors.length - 1; i++) {\n var color = colors[i].color;\n var newColorStop = (colors[i].colorStop).slice(0, -1);\n var stopColor = parseInt(newColorStop, 10) / 100;\n myGradient.addColorStop(stopColor, color);\n }\n colorName = myGradient.toString();\n }\n else {\n colorName = colors[0].color.toString();\n }\n this.dataUrl = this.canvasObj.toDataURL();\n return colorName;\n };\n /**\n * To set the attributes to the element\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {HTMLElement} element - The element to which the attributes need to be set\n * @return {HTMLElement}\n */\n CanvasRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n var values = Object.keys(options).map(function (key) { return options[key]; });\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], values[i]);\n }\n return element;\n };\n /**\n * To update the values of the canvas element attributes\n * @param {SVGCanvasAttributes} options - Specifies the colors required to create gradient\n * @return {void}\n */\n CanvasRenderer.prototype.updateCanvasAttributes = function (options) {\n this.setElementAttributes(options, this.canvasObj);\n var ctx = this.ctx;\n if (!isNullOrUndefined(this.dataUrl)) {\n var img_1 = new Image;\n img_1.onload = function () {\n ctx.drawImage(img_1, 0, 0);\n };\n img_1.src = this.dataUrl;\n }\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n ;\n /**\n * Inject required modules in component library\n * @return {void}\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[i];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n * @return {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n * @param {ModuleDeclaration[]} moduleList\n * @returns {void}\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n * @param {string} name\n * @returns {string}\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n * @param {string} modName\n * @returns {boolean}\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { getValue, setValue, merge } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.setProperties(defaultValue, true);\n this.isParentArray = isArray;\n }\n /**\n * Updates the property changes\n * @param {boolean} val\n * @param {string} propName\n * @returns {void}\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n * @param {Object} prop\n * @param {boolean} muteOnChange\n * {void}\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n * @param {string} key\n * @param {Object} newValue\n * @param {Object} oldValue\n * @returns {void}\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue } from '../util';\nvar latnRegex = /^[0-9]*$/;\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object}\n */\n ParserBase.getMainObject = function (obj, cName) {\n return getValue('main.' + cName, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object}\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object}\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n /* tslint:disable no-any */\n if (!res.hasOwnProperty(prop[key])) {\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp}\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n }).join('|');\n return new RegExp(regexStr, 'g');\n };\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n * @param {string} val\n * @returns {string}\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[i] + '|';\n }\n else {\n ret += val[i];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string}\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n * @param {Object} obj\n * @returns {NumericObject}\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n ret.numberParseRegex = new RegExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n * @param {Object} curObj\n * @param {Object} numberSystem\n * @param {boolean} isNumber\n * @returns {NumberMapper}\n */\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n","import { isUndefined, throwError, isNullOrUndefined, extend } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits',\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} object- Specifies the global cldr data collection.\n * @return Function.\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, true);\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode);\n /* tslint:disable no-any */\n dOptions.percentSymbol = dOptions.numberMapper.numberSymbols[percentSign];\n dOptions.minusSymbol = dOptions.numberMapper.numberSymbols[minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n * @param {string} pattern\n * @returns {GroupDetails}\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n * @param {number} val1\n * @param {number} val2\n * @param {boolean} checkbothExist\n * @param {boolean} isFraction\n * @returns {boolean}\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n * @param {number} val\n * @param {string} text\n * @param {boolean} isFraction\n * @returns {void}\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n * @param {number} value\n * @param {base.GenericFormatOptions} fOptions\n * @param {CommonOptions} dOptions\n * @returns {string}\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n * @param {string} val\n * @param {number} level1\n * @param {string} sep\n * @param {string} decimalSymbol\n * @param {number} level2\n * @returns {string}\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n * @param {string} value\n * @param {number} min\n * @returns {string}\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|K|ccc|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n m: 'getMinutes',\n h: 'getHours',\n H: 'getHours',\n s: 'getSeconds',\n d: 'getDate',\n};\nexport var datePartMatcher = {\n 'M': 'month',\n 'd': 'day',\n 'E': 'weekday',\n 'c': 'weekday',\n 'y': 'year',\n 'm': 'minute',\n 'h': 'hour',\n 'H': 'hour',\n 's': 'second',\n 'L': 'month',\n 'a': 'designator',\n 'z': 'timeZone',\n 'Z': 'timeZone',\n 'G': 'era'\n};\nvar timeSeparator = 'timeSeparator';\n/**\n * Date Format is a framework provides support for date formatting.\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which date will format.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture);\n var formatOptions = {};\n var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type);\n formatOptions.dateSeperator = base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n var str = patternMatch_1[_i];\n var len = str.length;\n var char = str[0];\n if (char === 'K') {\n char = 'h';\n }\n /* tslint:disable no-any */\n var charKey = datePartMatcher[char];\n switch (char) {\n case 'E':\n case 'c':\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n break;\n case 'M':\n case 'L':\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n break;\n case 'a':\n formatOptions.designator = getValue('dayPeriods.format.wide', dependable.dateObject);\n break;\n case 'G':\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = getValue('eras.' + eText, dependable.dateObject);\n break;\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n * @param {Date} value\n * @param {FormatOptions} options\n */\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = value.getMonth() + 1;\n if (length_1 > 2) {\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n ret += options.weekday[weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n isNumber = true;\n curval = value[timeSetter[char]]();\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += value.getFullYear();\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a':\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n ret += options.designator[desig];\n break;\n case 'G':\n var dec = value.getFullYear() < 0 ? 0 : 1;\n ret += options.era[dec];\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/\\'/g, '');\n break;\n case 'z':\n var timezone = value.getTimezoneOffset();\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n ret += options.numMapper.numberSymbols[timeSeparator];\n /* tslint:enable no-any */\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n default:\n ret += match;\n }\n if (isNumber) {\n processNumber = true;\n curstr = this.checkTwodigitNumber(curval, length_1);\n }\n if (processNumber) {\n ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n }\n }\n return ret;\n };\n /**\n * Returns two digit numbers for given value and length\n */\n DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n * @param {number} tVal\n * @param {string} pattern\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nimport { createElement } from './dom';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n _this.needsID = false;\n /**\n * This is a instance method to create an element.\n * @private\n */\n _this.createElement = createElement;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n _this.detectFunction = new Function('args', 'var prop = Object.keys(args); if(prop.length){this[prop[0]] = args[prop[0]];}');\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n ;\n /**\n * Destroys the sub modules while destroying the widget\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n /**\n * Appends the control within the given HTML element\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = document.querySelector(selector);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n this.render();\n this.trigger('created');\n }\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n ;\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @return {void}\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @return {void}\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @return {void}\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n ;\n /**\n * Dynamically injects the required modules to the component.\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {\n this.prototype.injectedModules.push(moduleList[i]);\n }\n }\n };\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.mergePersistData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n };\n Component.prototype.clearTemplate = function (templateName) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // tslint:disable-next-line:no-any\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n return new RegExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection \n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined } from '../util';\nimport { datePartMatcher } from './date-formatter';\nvar number = 'numbers';\nvar defNoSystem = 'defaultNumberingSystem';\nvar noSystem = 'numberingSystem';\nvar standalone = 'stand-alone';\nvar curWeekDay = 'curWeekDay';\nvar latnRegex = /^[0-9]*$/;\nvar abbreviateRegex = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|ccc/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth'\n};\nvar month = 'months';\n/* tslint:disable no-any */\n/**\n * Date Parser.\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which string date will be parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n // tslint:disable-next-line:max-func-body-length\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr));\n var parseOptions = {};\n var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type);\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n parseOptions = { pattern: resPattern, evalposition: {} };\n var patternMatch = resPattern.match(base.dateParseRegex) || [];\n var length_1 = patternMatch.length;\n var gmtCorrection = 0;\n var zCorrectTemp = 0;\n var isgmtTraversed = false;\n var nRegx = numOptions.numericRegex;\n var numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[i];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // tslint:disable-next-line\n var weekObject = parser.reverseObject(dependable.dateObject[base.days][standalone][base.monthIndex[len]]);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n // tslint:disable-next-line\n parseOptions[charKey] = parser.reverseObject(dependable.dateObject[month][standalone][base.monthIndex[len]]);\n /* tslint:disable no-any */\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n parseOptions[charKey] = parser.reverseObject(getValue('dayPeriods.format.wide', dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[charKey] = parser.reverseObject(getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n var iString = str.replace(/\\'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n parseOptions.parserRegex = new RegExp('^' + regexString + '$');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /**\n * Returns date object for provided date options\n * @param {DateParts} options\n * @param {Date} value\n * @returns {Date}\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n var tValue = options[key];\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n res[timeSetter[key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n res[timeSetter[key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n * @param {string} value\n * @param {ParseOptions} parseOptions\n * @param {NumericOptions} num\n * @returns {DateParts}\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n var nRegx = num.numericRegex;\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n retOptions[prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[prop] = val;\n }\n }\n else {\n retOptions[prop] = parseOptions[prop][matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n * @param {string} value\n * @param {NumericOptions} option\n * @returns {number}\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n * @param {string} hourFormat\n * @param {base.TimeZoneOptions} tZone\n * @param {string} nRegex\n * @returns {string}\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var result;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n * @param {boolean} flag\n * @param {string} val1\n * @param {string} val2\n * @param {NumericOptions} num\n * @returns {number}\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n","import { extend, isNullOrUndefined } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar formatRegex = /(^[ncpa]{1})([0-1]?[0-9]|20)?$/i;\nvar parseRegex = /^([^0-9]*)(([0-9,]*[0-9]+)(\\.[0-9]+)?)([Ee][+-]?[0-9]+)?([^0-9]*)$/;\nvar groupRegex = /,/g;\nvar latnDecimalRegex = /^[0-9]*(\\.[0-9]+)?$/;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} - Specific the format in which number will parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, true);\n var parseOptions = { custom: true };\n var numOptions;\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // tslint:disable-next-line:no-any\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n if (symbolpattern) {\n symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n var split = symbolpattern.split(';');\n parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n parseOptions.pData = base.getFormatData(split[0], true, '');\n }\n return function (value) {\n return _this.getParsedNumber(value, parseOptions, numOptions);\n };\n };\n /**\n * Returns parsed number for the provided formatting options\n * @param {string} value\n * @param {NumericParts} options\n * @param {NumericOptions} numOptions\n * @returns {number}\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n __extends(Position, _super);\n function Position() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Position.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Position.prototype, \"top\", void 0);\n return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n *
Draggable
\n * \n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.dragLimit = Draggable_1.getDefaultPosition();\n _this.borderWidth = Draggable_1.getDefaultPosition();\n _this.padding = Draggable_1.getDefaultPosition();\n _this.diffX = 0;\n _this.prevLeft = 0;\n _this.prevTop = 0;\n _this.dragProcessStarted = false;\n /* tslint:disable no-any */\n _this.tapHoldTimer = 0;\n _this.externalInitialize = false;\n _this.diffY = 0;\n _this.droppables = {};\n _this.bind();\n return _this;\n }\n Draggable_1 = Draggable;\n Draggable.prototype.bind = function () {\n this.toggleEvents();\n if (Browser.isIE) {\n addClass([this.element], 'e-block-touch');\n }\n this.droppables[this.scope] = {};\n };\n Draggable.getDefaultPosition = function () {\n return extend({}, defaultPosition);\n };\n Draggable.prototype.toggleEvents = function (isUnWire) {\n var ele;\n if (!isUndefined(this.handle)) {\n ele = select(this.handle, this.element);\n }\n var handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;\n if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.touchStartEvent, handler);\n }\n else {\n EventHandler.add(ele || this.element, Browser.touchStartEvent, handler, this);\n }\n };\n /* istanbul ignore next */\n Draggable.prototype.mobileInitialize = function (evt) {\n var _this = this;\n var target = evt.currentTarget;\n this.tapHoldTimer = setTimeout(function () {\n _this.externalInitialize = true;\n _this.removeTapholdTimer();\n _this.initialize(evt, target);\n }, this.tapHoldThreshold);\n EventHandler.add(document, Browser.touchMoveEvent, this.removeTapholdTimer, this);\n };\n /* istanbul ignore next */\n Draggable.prototype.removeTapholdTimer = function () {\n clearTimeout(this.tapHoldTimer);\n EventHandler.remove(document, Browser.touchMoveEvent, this.removeTapholdTimer);\n };\n Draggable.prototype.initialize = function (evt, curTarget) {\n this.target = (evt.currentTarget || curTarget);\n this.dragProcessStarted = false;\n if (this.abort) {\n if (!isNullOrUndefined(closest(evt.target, this.abort))) {\n return;\n }\n }\n if (this.preventDefault && !isUndefined(evt.changedTouches)) {\n evt.preventDefault();\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.relativeXPosition = intCoord.pageX - pos.left;\n this.relativeYPosition = intCoord.pageY - pos.top;\n }\n if (this.externalInitialize) {\n this.intDragStart(evt);\n }\n else {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDestroy, this);\n }\n this.toggleEvents(true);\n document.body.classList.add('e-prevent-select');\n this.externalInitialize = false;\n EventHandler.trigger(document.documentElement, Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n this.removeTapholdTimer();\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n if (isChangeTouch) {\n evt.preventDefault();\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10),\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if ((distance >= this.distance || this.externalInitialize)) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStart', { event: evt, element: element, target: curTarget });\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n }\n };\n Draggable.prototype.elementInViewport = function (el) {\n this.top = el.offsetTop;\n this.left = el.offsetLeft;\n this.width = el.offsetWidth;\n this.height = el.offsetHeight;\n while (el.offsetParent) {\n el = el.offsetParent;\n this.top += el.offsetTop;\n this.left += el.offsetLeft;\n }\n return (this.top >= window.pageYOffset &&\n this.left >= window.pageXOffset &&\n (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n /* tslint:disable no-any */\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n else if (this.hoverObject) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n if (this.dragArea) {\n var styles = getComputedStyle(helperElement);\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right < dLeft + helperWidth) {\n left = this.dragLimit.right - helperWidth;\n }\n else {\n left = dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top > dTop) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom < dTop + helperHeight) {\n top = this.dragLimit.bottom - helperHeight;\n }\n else {\n top = dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n if (this.dragProcessStarted) {\n if (isNullOrUndefined(top)) {\n top = this.prevTop;\n }\n if (isNullOrUndefined(left)) {\n left = this.prevLeft;\n }\n }\n var dragValue = this.getProcessedPositionValue({ top: (top - iTop) + 'px', left: (left - iLeft) + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll) {\n this.helperElement.scrollIntoView();\n }\n this.dragProcessStarted = true;\n this.prevLeft = left;\n this.prevTop = top;\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n Draggable.prototype.getDragPosition = function (dragValue) {\n var temp = extend({}, dragValue);\n if (this.axis) {\n if (this.axis === 'x') {\n delete temp.top;\n }\n else if (this.axis === 'y') {\n delete temp.left;\n }\n }\n return temp;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n this.dragProcessStarted = false;\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var type = ['touchend', 'pointerup', 'mouseup'];\n if (type.indexOf(evt.type) !== -1) {\n if (this.dragStop) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n }\n this.intDestroy(evt);\n }\n else {\n this.element.setAttribute('aria-grabbed', 'false');\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.dragStopCalled = true;\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intDrop(evt, eleObj.target);\n }\n this.setGlobalDroppables(true);\n document.body.classList.remove('e-prevent-select');\n };\n Draggable.prototype.intDestroy = function (evt) {\n this.dragProcessStarted = false;\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n this.element.setAttribute('aria-grabbed', 'false');\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDrag);\n };\n // triggers when property changed\n Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Draggable.prototype.getModuleName = function () {\n return 'draggable';\n };\n Draggable.prototype.setDragArea = function () {\n var eleWidthBound;\n var eleHeightBound;\n var top = 0;\n var left = 0;\n var ele;\n var type = typeof this.dragArea;\n if (type === 'string') {\n ele = select(this.dragArea);\n }\n else {\n ele = this.dragArea;\n }\n if (ele) {\n var elementArea = ele.getBoundingClientRect();\n eleWidthBound = elementArea.width ? elementArea.width : elementArea.right - elementArea.left;\n eleHeightBound = elementArea.height ? elementArea.height : elementArea.bottom - elementArea.top;\n var keys = ['Top', 'Left', 'Bottom', 'Right'];\n var styles = getComputedStyle(ele);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n top = elementArea.top;\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = top + this.borderWidth.top + this.padding.top;\n this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n }\n };\n Draggable.prototype.getProperTargetElement = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var ele;\n var prevStyle = this.helperElement.style.display || '';\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1) {\n this.helperElement.style.display = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.display = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n Draggable.prototype.getMousePosition = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var pageX = this.clone ? intCoord.pageX : intCoord.pageX - this.relativeXPosition;\n var pageY = this.clone ? intCoord.pageY : intCoord.pageY - this.relativeYPosition;\n return {\n left: pageX - (this.margin.left + this.cursorAt.left),\n top: pageY - (this.margin.top + this.cursorAt.top)\n };\n };\n Draggable.prototype.getCoordinates = function (evt) {\n if (evt.type.indexOf('touch') > -1) {\n return evt.changedTouches[0];\n }\n return evt;\n };\n Draggable.prototype.getHelperElement = function (evt) {\n var element;\n if (this.clone) {\n if (this.helper) {\n element = this.helper({ sender: evt, element: this.target });\n }\n else {\n element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n document.body.appendChild(element);\n }\n }\n else {\n element = this.element;\n }\n return element;\n };\n Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n this.droppables[this.scope] = reset ? null : {\n draggable: drag,\n helper: helper,\n draggedElement: this.element\n };\n };\n Draggable.prototype.checkTargetElement = function (evt) {\n var target = this.getProperTargetElement(evt);\n var dropIns = this.getDropInstance(target);\n if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n if (parent_1) {\n dropIns = this.getDropInstance(parent_1);\n }\n }\n return { target: target, instance: dropIns };\n };\n Draggable.prototype.getDropInstance = function (ele) {\n var name = 'getModuleName';\n var drop;\n var eleInst = ele && ele.ej2_instances;\n if (eleInst) {\n for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n var inst = eleInst_1[_i];\n if (inst[name]() === 'droppable') {\n drop = inst;\n break;\n }\n }\n }\n return drop;\n };\n Draggable.prototype.destroy = function () {\n this.toggleEvents(true);\n _super.prototype.destroy.call(this);\n };\n var Draggable_1;\n __decorate([\n Complex({}, Position)\n ], Draggable.prototype, \"cursorAt\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"clone\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"dragArea\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStop\", void 0);\n __decorate([\n Property(1)\n ], Draggable.prototype, \"distance\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"handle\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"abort\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"helper\", void 0);\n __decorate([\n Property('default')\n ], Draggable.prototype, \"scope\", void 0);\n __decorate([\n Property('')\n ], Draggable.prototype, \"dragTarget\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"axis\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"queryPositionInfo\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTailMode\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"preventDefault\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableAutoScroll\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTapHold\", void 0);\n __decorate([\n Property(750)\n ], Draggable.prototype, \"tapHoldThreshold\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n}(Base));\nexport { Draggable };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, Collection, L10n, Browser, Complex, compile, createElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, detach, attributes, prepend, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, append } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { Draggable } from '@syncfusion/ej2-base';\nimport { Popup, PositionData, getZindexPartial } from '../popup/popup';\nimport { Button } from '@syncfusion/ej2-buttons';\nvar ButtonProps = /** @class */ (function (_super) {\n __extends(ButtonProps, _super);\n function ButtonProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ButtonProps.prototype, \"buttonModel\", void 0);\n __decorate([\n Property('Button')\n ], ButtonProps.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], ButtonProps.prototype, \"click\", void 0);\n return ButtonProps;\n}(ChildProperty));\nexport { ButtonProps };\n/**\n * Configures the animation properties for both open and close the dialog.\n */\nvar AnimationSettings = /** @class */ (function (_super) {\n __extends(AnimationSettings, _super);\n function AnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Fade')\n ], AnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], AnimationSettings.prototype, \"delay\", void 0);\n return AnimationSettings;\n}(ChildProperty));\nexport { AnimationSettings };\nvar ROOT = 'e-dialog';\nvar RTL = 'e-rtl';\nvar DLG_HEADER_CONTENT = 'e-dlg-header-content';\nvar DLG_HEADER = 'e-dlg-header';\nvar DLG_FOOTER_CONTENT = 'e-footer-content';\nvar MODAL_DLG = 'e-dlg-modal';\nvar DLG_CONTENT = 'e-dlg-content';\nvar DLG_CLOSE_ICON = 'e-icon-dlg-close';\nvar DLG_OVERLAY = 'e-dlg-overlay';\nvar DLG_CONTAINER = 'e-dlg-container';\nvar SCROLL_DISABLED = 'e-scroll-disabled';\nvar DLG_PRIMARY_BUTTON = 'e-primary';\nvar ICON = 'e-icons';\nvar POPUP_ROOT = 'e-popup';\nvar DEVICE = 'e-device';\nvar FULLSCREEN = 'e-dlg-fullscreen';\nvar DLG_CLOSE_ICON_BTN = 'e-dlg-closeicon-btn';\nvar DLG_HIDE = 'e-popup-close';\nvar DLG_SHOW = 'e-popup-open';\nvar DLG_UTIL_DEFAULT_TITLE = 'Information';\nvar DLG_UTIL_ROOT = 'e-scroll-disabled';\nvar DLG_UTIL_ALERT = 'e-alert-dialog';\nvar DLG_UTIL_CONFIRM = 'e-confirm-dialog';\n/**\n * Represents the dialog component that displays the information and get input from the user.\n * Two types of dialog components are `Modal and Modeless (non-modal)` depending on its interaction with parent application.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Dialog = /** @class */ (function (_super) {\n __extends(Dialog, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Dialog(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n if (this.width === '100%') {\n this.element.style.width = '';\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Dialog.prototype.preRender = function () {\n var _this = this;\n this.headerContent = null;\n var classArray = [];\n for (var j = 0; j < this.element.classList.length; j++) {\n if (!isNullOrUndefined(this.element.classList[j].match('e-control')) ||\n !isNullOrUndefined(this.element.classList[j].match(ROOT))) {\n classArray.push(this.element.classList[j]);\n }\n }\n removeClass([this.element], classArray);\n this.clonedEle = this.element.cloneNode(true);\n this.closeIconClickEventHandler = function (event) {\n _this.hide(event);\n };\n this.dlgOverlayClickEventHandler = function (event) {\n _this.trigger('overlayClick', event);\n };\n var localeText = { close: 'Close' };\n this.l10n = new L10n('dialog', localeText, this.locale);\n if (isNullOrUndefined(this.target)) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.target = document.body;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n ;\n /* istanbul ignore next */\n Dialog.prototype.keyDown = function (event) {\n var _this = this;\n if (event.keyCode === 9) {\n if (this.isModal) {\n var buttonObj = void 0;\n if (!isNullOrUndefined(this.btnObj)) {\n buttonObj = this.btnObj[this.btnObj.length - 1];\n }\n if (!isNullOrUndefined(buttonObj) && document.activeElement === buttonObj.element && !event.shiftKey) {\n event.preventDefault();\n this.focusableElements(this.element).focus();\n }\n if (document.activeElement === this.focusableElements(this.element) && event.shiftKey) {\n event.preventDefault();\n if (!isNullOrUndefined(buttonObj)) {\n buttonObj.element.focus();\n }\n }\n }\n }\n var element = document.activeElement;\n var isTagName = (['input', 'textarea'].indexOf(element.tagName.toLowerCase()) > -1);\n var isContentEdit = false;\n if (!isTagName) {\n isContentEdit = element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') === 'true';\n }\n if (event.keyCode === 27 && this.closeOnEscape) {\n this.hide(event);\n }\n if ((event.keyCode === 13 && !event.ctrlKey && element.tagName.toLowerCase() !== 'textarea' &&\n isTagName && !isNullOrUndefined(this.primaryButtonEle)) ||\n (event.keyCode === 13 && event.ctrlKey && (element.tagName.toLowerCase() === 'textarea' ||\n isContentEdit)) && !isNullOrUndefined(this.primaryButtonEle)) {\n var buttonIndex_1;\n var firstPrimary = this.buttons.some(function (data, index) {\n buttonIndex_1 = index;\n var buttonModel = data.buttonModel;\n return !isNullOrUndefined(buttonModel) && buttonModel.isPrimary === true;\n });\n if (firstPrimary && typeof (this.buttons[buttonIndex_1].click) === 'function') {\n setTimeout(function () {\n _this.buttons[buttonIndex_1].click.call(_this, event);\n });\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.initialize = function () {\n if (!isNullOrUndefined(this.target)) {\n this.targetEle = ((typeof this.target) === 'string') ?\n document.querySelector(this.target) : this.target;\n }\n addClass([this.element], ROOT);\n if (Browser.isDevice) {\n addClass([this.element], DEVICE);\n }\n this.setCSSClass();\n this.setMaxHeight();\n };\n /**\n * Initialize the rendering\n * @private\n */\n Dialog.prototype.initRender = function () {\n var _this = this;\n this.initialRender = true;\n attributes(this.element, { role: 'dialog' });\n if (this.zIndex === 1000) {\n this.setzIndex(this.element, false);\n this.calculatezIndex = true;\n }\n else {\n this.calculatezIndex = false;\n }\n this.setTargetContent();\n if (this.header !== '' && !isNullOrUndefined(this.header)) {\n this.setHeader();\n }\n if (this.showCloseIcon) {\n this.renderCloseIcon();\n }\n this.setContent();\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setFooterTemplate();\n }\n else if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n this.setButton();\n }\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n attributes(this.element, { 'aria-modal': (this.isModal ? 'true' : 'false') });\n if (this.isModal) {\n this.setIsModal();\n }\n if (!isNullOrUndefined(this.targetEle)) {\n this.isModal ? this.targetEle.appendChild(this.dlgContainer) : this.targetEle.appendChild(this.element);\n }\n this.popupObj = new Popup(this.element, {\n height: this.height,\n width: this.width,\n zIndex: this.zIndex,\n relateTo: this.target,\n actionOnScroll: 'none',\n open: function (event) {\n _this.focusContent();\n var eventArgs = {\n container: _this.isModal ? _this.dlgContainer : _this.element,\n element: _this.element,\n target: _this.target\n };\n _this.trigger('open', eventArgs);\n },\n close: function (event) {\n if (_this.isModal) {\n addClass([_this.dlgOverlay], 'e-fade');\n }\n _this.unBindEvent(_this.element);\n if (_this.isModal) {\n _this.dlgContainer.style.display = 'none';\n }\n _this.trigger('close', _this.closeArgs);\n if (!isNullOrUndefined(_this.storeActiveElement)) {\n _this.storeActiveElement.focus();\n }\n }\n });\n this.positionChange();\n this.setEnableRTL();\n addClass([this.element], DLG_HIDE);\n if (this.isModal) {\n this.setOverlayZindex();\n }\n if (this.visible) {\n this.show();\n }\n else {\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n }\n }\n this.initialRender = false;\n };\n Dialog.prototype.setOverlayZindex = function (zIndexValue) {\n var zIndex;\n if (isNullOrUndefined(zIndexValue)) {\n zIndex = parseInt(this.element.style.zIndex, 10) ? parseInt(this.element.style.zIndex, 10) : this.zIndex;\n }\n else {\n zIndex = zIndexValue;\n }\n this.dlgOverlay.style.zIndex = (zIndex - 1).toString();\n this.dlgContainer.style.zIndex = zIndex.toString();\n };\n Dialog.prototype.positionChange = function () {\n if (this.isModal) {\n if (typeof (this.position.X) === 'number' && typeof (this.position.Y) === 'number') {\n this.setPopupPosition();\n }\n else if ((typeof this.position.X === 'string' && typeof this.position.Y === 'number') ||\n (typeof this.position.X === 'number' && typeof this.position.Y === 'string')) {\n this.setPopupPosition();\n }\n else {\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\n }\n }\n else {\n this.setPopupPosition();\n }\n };\n Dialog.prototype.setPopupPosition = function () {\n this.popupObj.setProperties({\n position: {\n X: this.position.X, Y: this.position.Y\n }\n });\n };\n Dialog.prototype.setAllowDragging = function () {\n var _this = this;\n var handleContent = '.' + DLG_HEADER_CONTENT;\n this.dragObj = new Draggable(this.element, {\n clone: false,\n abort: '.e-dlg-closeicon-btn',\n handle: handleContent,\n dragStart: function (event) {\n _this.trigger('dragStart', event);\n },\n dragStop: function (event) {\n if (_this.isModal) {\n if (!isNullOrUndefined(_this.position)) {\n _this.dlgContainer.classList.remove('e-dlg-' + _this.position.X + '-' + _this.position.Y);\n }\n // Reset the dialog position after drag completion.\n _this.element.style.position = 'relative';\n }\n _this.trigger('dragStop', event);\n },\n drag: function (event) {\n _this.trigger('drag', event);\n }\n });\n if (!isNullOrUndefined(this.targetEle)) {\n this.dragObj.dragArea = this.targetEle;\n }\n };\n Dialog.prototype.setButton = function () {\n this.buttonContent = [];\n this.btnObj = [];\n var primaryBtnFlag = true;\n for (var i = 0; i < this.buttons.length; i++) {\n var buttonType = !isNullOrUndefined(this.buttons[i].type) ? this.buttons[i].type.toLowerCase() : 'button';\n var btn = this.createElement('button', { attrs: { type: buttonType } });\n this.buttonContent.push(btn.outerHTML);\n }\n this.setFooterTemplate();\n for (var i = 0; i < this.buttons.length; i++) {\n this.btnObj[i] = new Button(this.buttons[i].buttonModel);\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.add(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click, this);\n }\n this.btnObj[i].appendTo(this.ftrTemplateContent.children[i]);\n this.btnObj[i].element.classList.add('e-flat');\n this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n }\n };\n Dialog.prototype.setContent = function () {\n attributes(this.element, { 'aria-describedby': this.element.id + '_dialog-content' });\n this.contentEle = this.createElement('div', { className: DLG_CONTENT, id: this.element.id + '_dialog-content' });\n if (this.innerContentElement) {\n this.contentEle.appendChild(this.innerContentElement);\n }\n else if (!isNullOrUndefined(this.content) && this.content !== '' || !this.initialRender) {\n if (typeof (this.content) === 'string') {\n this.contentEle.innerHTML = this.content;\n }\n else if (this.content instanceof HTMLElement) {\n this.contentEle.appendChild(this.content);\n }\n else {\n this.setTemplate(this.content, this.contentEle);\n }\n }\n if (!isNullOrUndefined(this.headerContent)) {\n this.element.insertBefore(this.contentEle, this.element.children[1]);\n }\n else {\n this.element.insertBefore(this.contentEle, this.element.children[0]);\n }\n if (this.height === 'auto') {\n this.setMaxHeight();\n }\n };\n Dialog.prototype.setTemplate = function (template, toElement) {\n var templateFn = compile(template);\n var fromElements = [];\n for (var _i = 0, _a = templateFn({}); _i < _a.length; _i++) {\n var item = _a[_i];\n fromElements.push(item);\n }\n append([].slice.call(fromElements), toElement);\n };\n Dialog.prototype.setMaxHeight = function () {\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight - 20) + 'px' : (window.innerHeight - 20) + 'px';\n this.element.style.display = display;\n };\n Dialog.prototype.setEnableRTL = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n Dialog.prototype.setTargetContent = function () {\n if (isNullOrUndefined(this.content) || this.content === '') {\n var isContent = this.element.innerHTML.replace(/\\s/g, '') !== '';\n if (this.element.children.length > 0 || isContent) {\n this.innerContentElement = document.createDocumentFragment();\n while (this.element.childNodes.length !== 0) {\n this.innerContentElement.appendChild(this.element.childNodes[0]);\n }\n }\n }\n };\n Dialog.prototype.setHeader = function () {\n if (this.headerEle) {\n this.headerEle.innerHTML = '';\n }\n else {\n this.headerEle = this.createElement('div', { id: this.element.id + '_title', className: DLG_HEADER });\n }\n this.createHeaderContent();\n this.headerContent.appendChild(this.headerEle);\n this.setTemplate(this.header, this.headerEle);\n attributes(this.element, { 'aria-labelledby': this.element.id + '_title' });\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n };\n Dialog.prototype.setFooterTemplate = function () {\n if (this.ftrTemplateContent) {\n this.ftrTemplateContent.innerHTML = '';\n }\n else {\n this.ftrTemplateContent = this.createElement('div', {\n className: DLG_FOOTER_CONTENT\n });\n }\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setTemplate(this.footerTemplate, this.ftrTemplateContent);\n }\n else {\n this.ftrTemplateContent.innerHTML = this.buttonContent.join('');\n }\n this.element.appendChild(this.ftrTemplateContent);\n };\n Dialog.prototype.createHeaderContent = function () {\n if (isNullOrUndefined(this.headerContent)) {\n this.headerContent = this.createElement('div', { className: DLG_HEADER_CONTENT });\n }\n };\n Dialog.prototype.renderCloseIcon = function () {\n this.closeIcon = this.createElement('button', { className: DLG_CLOSE_ICON_BTN, attrs: { type: 'button' } });\n this.closeIconBtnObj = new Button({ cssClass: 'e-flat', iconCss: DLG_CLOSE_ICON + ' ' + ICON });\n this.closeIconTitle();\n if (!isNullOrUndefined(this.headerContent)) {\n prepend([this.closeIcon], this.headerContent);\n }\n else {\n this.createHeaderContent();\n prepend([this.closeIcon], this.headerContent);\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n }\n this.closeIconBtnObj.appendTo(this.closeIcon);\n };\n Dialog.prototype.closeIconTitle = function () {\n this.l10n.setLocale(this.locale);\n var closeIconTitle = this.l10n.getConstant('close');\n this.closeIcon.setAttribute('title', closeIconTitle);\n };\n Dialog.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n };\n Dialog.prototype.setIsModal = function () {\n this.dlgContainer = this.createElement('div', { className: DLG_CONTAINER });\n this.element.classList.remove(DLG_SHOW);\n this.element.parentNode.insertBefore(this.dlgContainer, this.element);\n this.dlgContainer.appendChild(this.element);\n addClass([this.element], MODAL_DLG);\n this.dlgOverlay = this.createElement('div', { className: DLG_OVERLAY });\n this.dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.dlgContainer.appendChild(this.dlgOverlay);\n };\n Dialog.prototype.getValidFocusNode = function (items) {\n var node;\n for (var u = 0; u < items.length; u++) {\n node = items[u];\n if ((node.clientHeight > 0 || (node.tagName.toLowerCase() === 'a' && node.hasAttribute('href'))) && node.tabIndex > -1 &&\n !node.disabled && !this.disableElement(node, '[disabled],[aria-disabled=\"true\"],[type=\"hidden\"]')) {\n return node;\n }\n }\n return node;\n };\n Dialog.prototype.focusableElements = function (content) {\n if (!isNullOrUndefined(content)) {\n var value = 'input,select,textarea,button,a,[contenteditable=\"true\"],[tabindex]';\n var items = content.querySelectorAll(value);\n return this.getValidFocusNode(items);\n }\n return null;\n };\n Dialog.prototype.getAutoFocusNode = function (container) {\n var node = container.querySelector('.' + DLG_CLOSE_ICON_BTN);\n var value = '[autofocus]';\n var items = container.querySelectorAll(value);\n var validNode = this.getValidFocusNode(items);\n if (!isNullOrUndefined(validNode)) {\n node = validNode;\n }\n else {\n validNode = this.focusableElements(this.contentEle);\n if (!isNullOrUndefined(validNode)) {\n return node = validNode;\n }\n else if (!isNullOrUndefined(this.primaryButtonEle)) {\n return this.element.querySelector('.' + DLG_PRIMARY_BUTTON);\n }\n }\n return node;\n };\n Dialog.prototype.disableElement = function (element, t) {\n var elementMatch = element ? element.matches || element.webkitMatchesSelector || element.msMatchesSelector : null;\n if (elementMatch) {\n for (; element; element = element.parentNode) {\n if (element instanceof Element && elementMatch.call(element, t)) {\n /* istanbul ignore next */\n return element;\n }\n }\n }\n return null;\n };\n Dialog.prototype.focusContent = function () {\n var element = this.getAutoFocusNode(this.element);\n var node = !isNullOrUndefined(element) ? element : this.element;\n node.focus();\n this.bindEvent(this.element);\n };\n Dialog.prototype.bindEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyDown, this);\n };\n Dialog.prototype.unBindEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyDown);\n };\n /**\n * Module required function\n * @private\n */\n Dialog.prototype.getModuleName = function () {\n return 'dialog';\n };\n /**\n * Called internally if any of the property value changed\n * @private\n */\n Dialog.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!isNullOrUndefined(this.content) && this.content !== '') {\n if (!isNullOrUndefined(this.contentEle) && this.contentEle.getAttribute('role') !== 'dialog') {\n this.contentEle.innerHTML = '';\n typeof (this.content) === 'string' ?\n this.contentEle.innerHTML = this.content : this.contentEle.appendChild(this.content);\n this.setMaxHeight();\n }\n else {\n this.setContent();\n }\n }\n else if (!isNullOrUndefined(this.contentEle)) {\n detach(this.contentEle);\n this.contentEle = null;\n }\n break;\n case 'header':\n if (this.header === '' || isNullOrUndefined(this.header)) {\n if (this.headerEle) {\n detach(this.headerEle);\n this.headerEle = null;\n }\n }\n else {\n this.setHeader();\n }\n break;\n case 'footerTemplate':\n if (this.footerTemplate === '' || isNullOrUndefined(this.footerTemplate)) {\n if (!this.ftrTemplateContent) {\n return;\n }\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n this.buttons = [{}];\n }\n else {\n this.setFooterTemplate();\n this.buttons = [{}];\n }\n break;\n case 'showCloseIcon':\n if (this.element.getElementsByClassName(DLG_CLOSE_ICON).length > 0) {\n if (!this.showCloseIcon && (this.header === '' || isNullOrUndefined(this.header))) {\n detach(this.headerContent);\n this.headerContent = null;\n }\n else if (!this.showCloseIcon) {\n detach(this.closeIcon);\n }\n }\n else {\n this.renderCloseIcon();\n this.wireEvents();\n }\n break;\n case 'locale':\n if (this.showCloseIcon) {\n this.closeIconTitle();\n }\n break;\n case 'visible':\n this.visible ? this.show() : this.hide();\n break;\n case 'isModal':\n this.updateIsModal();\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'zIndex':\n this.popupObj.zIndex = this.zIndex;\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n this.calculatezIndex = false;\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'buttons':\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n if (!isNullOrUndefined(this.ftrTemplateContent)) {\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n }\n this.footerTemplate = '';\n this.setButton();\n }\n break;\n case 'allowDragging':\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n else {\n this.dragObj.destroy();\n }\n break;\n case 'target':\n this.popupObj.relateTo = newProp.target;\n break;\n case 'position':\n if (this.isModal) {\n var positionX = isNullOrUndefined(oldProp.position.X) ? this.position.X : oldProp.position.X;\n var positionY = isNullOrUndefined(oldProp.position.Y) ? this.position.Y : oldProp.position.Y;\n if (this.dlgContainer.classList.contains('e-dlg-' + positionX + '-' + positionY)) {\n this.dlgContainer.classList.remove('e-dlg-' + positionX + '-' + positionY);\n }\n }\n this.positionChange();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n }\n }\n };\n Dialog.prototype.updateIsModal = function () {\n this.element.setAttribute('aria-modal', this.isModal ? 'true' : 'false');\n if (this.isModal) {\n this.setIsModal();\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n if (!isNullOrUndefined(this.targetEle)) {\n this.targetEle.appendChild(this.dlgContainer);\n }\n }\n else {\n removeClass([this.element], MODAL_DLG);\n removeClass([document.body], SCROLL_DISABLED);\n detach(this.dlgOverlay);\n while (this.dlgContainer.firstChild) {\n this.dlgContainer.parentElement.insertBefore(this.dlgContainer.firstChild, this.dlgContainer);\n }\n this.dlgContainer.parentElement.removeChild(this.dlgContainer);\n }\n if (this.visible) {\n this.show();\n }\n this.positionChange();\n };\n Dialog.prototype.setzIndex = function (zIndexElement, setPopupZindex) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.zIndex = getZindexPartial(zIndexElement);\n this.isProtectedOnChange = prevOnChange;\n if (setPopupZindex) {\n this.popupObj.zIndex = this.zIndex;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Dialog.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @memberof dialog\n */\n Dialog.prototype.destroy = function () {\n if (this.element.classList.contains(ROOT)) {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n var classArray = [\n ROOT, RTL, MODAL_DLG\n ];\n removeClass([this.element, this.element], classArray);\n if (this.popupObj.element.classList.contains(POPUP_ROOT)) {\n this.popupObj.destroy();\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.btnObj)) {\n for (var i = void 0; i < this.btnObj.length; i++) {\n this.btnObj[i].destroy();\n }\n }\n if (this.isModal) {\n detach(this.dlgOverlay);\n this.dlgContainer.parentNode.insertBefore(this.element, this.dlgContainer);\n detach(this.dlgContainer);\n }\n this.element.innerHTML = '';\n while (this.element.attributes.length > 0) {\n this.element.removeAttribute(this.element.attributes[0].name);\n }\n for (var k = 0; k < this.clonedEle.attributes.length; k++) {\n this.element.setAttribute(this.clonedEle.attributes[k].name, this.clonedEle.attributes[k].value);\n }\n }\n };\n /**\n * Binding event to the element while widget creation\n * @hidden\n */\n Dialog.prototype.wireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.add(this.closeIcon, 'click', this.closeIconClickEventHandler, this);\n }\n if (this.isModal) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n /**\n * Unbinding event to the element while widget destroy\n * @hidden\n */\n Dialog.prototype.unWireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.remove(this.closeIcon, 'click', this.closeIconClickEventHandler);\n }\n if (this.isModal) {\n EventHandler.remove(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler);\n }\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n for (var i = 0; i < this.buttons.length; i++) {\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.remove(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click);\n }\n }\n }\n };\n /**\n * Refreshes the dialog's position when the user changes its header and footer height/width dynamically.\n * @return {void}\n */\n Dialog.prototype.refreshPosition = function () {\n this.popupObj.refreshPosition();\n };\n /**\n * Opens the dialog if it is in hidden state.\n * To open the dialog with full screen width, set the parameter to true.\n * @param { boolean } isFullScreen - Enable the fullScreen Dialog.\n * @return {void}\n */\n Dialog.prototype.show = function (isFullScreen) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n if (!this.element.classList.contains(DLG_SHOW) || (!isNullOrUndefined(isFullScreen))) {\n if (!isNullOrUndefined(isFullScreen)) {\n this.fullScreen(isFullScreen);\n }\n var eventArgs = {\n cancel: false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n target: this.target\n };\n this.trigger('beforeOpen', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.storeActiveElement = document.activeElement;\n this.element.tabIndex = -1;\n if (this.isModal && (!isNullOrUndefined(this.dlgOverlay))) {\n this.dlgOverlay.style.display = 'block';\n this.dlgContainer.style.display = 'flex';\n removeClass([this.dlgOverlay], 'e-fade');\n if (!isNullOrUndefined(this.targetEle)) {\n if (this.targetEle === document.body) {\n this.dlgContainer.style.position = 'fixed';\n }\n else {\n this.dlgContainer.style.position = 'absolute';\n }\n this.dlgOverlay.style.position = 'absolute';\n this.element.style.position = 'relative';\n addClass([this.targetEle], SCROLL_DISABLED);\n }\n else {\n addClass([document.body], SCROLL_DISABLED);\n }\n }\n var openAnimation = {\n name: this.animationSettings.effect + 'In',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n var zIndexElement = (this.isModal) ? this.element.parentElement : this.element;\n if (this.calculatezIndex) {\n this.setzIndex(zIndexElement, true);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n }\n this.animationSettings.effect === 'None' ? this.popupObj.show() : this.popupObj.show(openAnimation);\n this.dialogOpen = true;\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.visible = true;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n /**\n * Closes the dialog if it is in visible state.\n * @return {void}\n */\n Dialog.prototype.hide = function (event) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n var eventArgs = {\n cancel: false,\n isInteraction: event ? true : false,\n element: this.element,\n target: this.target,\n container: this.isModal ? this.dlgContainer : this.element,\n event: event\n };\n this.trigger('beforeClose', eventArgs);\n this.closeArgs = eventArgs;\n if (eventArgs.cancel) {\n return;\n }\n if (this.isModal) {\n !isNullOrUndefined(this.targetEle) ? removeClass([this.targetEle], SCROLL_DISABLED) :\n removeClass([document.body], SCROLL_DISABLED);\n }\n var closeAnimation = {\n name: this.animationSettings.effect + 'Out',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n this.animationSettings.effect === 'None' ? this.popupObj.hide() : this.popupObj.hide(closeAnimation);\n this.dialogOpen = false;\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.visible = false;\n this.isProtectedOnChange = prevOnChange;\n };\n /**\n * Specifies to view the Full screen Dialog.\n * @private\n */\n Dialog.prototype.fullScreen = function (args) {\n var top = this.element.offsetTop;\n var left = this.element.offsetLeft;\n if (args) {\n addClass([this.element], FULLSCREEN);\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight) + 'px' : (window.innerHeight) + 'px';\n this.element.style.display = display;\n addClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && !isNullOrUndefined(this.dragObj)) {\n this.dragObj.destroy();\n }\n }\n else {\n removeClass([this.element], FULLSCREEN);\n removeClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n }\n return args;\n };\n /**\n * Returns the dialog button instances.\n * Based on that, you can dynamically change the button states.\n * @param { number } index - Index of the button.\n * @return {Button}\n */\n Dialog.prototype.getButtons = function (index) {\n if (!isNullOrUndefined(index)) {\n return this.btnObj[index];\n }\n return this.btnObj;\n };\n __decorate([\n Property('')\n ], Dialog.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"showCloseIcon\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"isModal\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"header\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"visible\", void 0);\n __decorate([\n Property('auto')\n ], Dialog.prototype, \"height\", void 0);\n __decorate([\n Property('100%')\n ], Dialog.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"cssClass\", void 0);\n __decorate([\n Property(1000)\n ], Dialog.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], Dialog.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"allowDragging\", void 0);\n __decorate([\n Collection([{}], ButtonProps)\n ], Dialog.prototype, \"buttons\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"closeOnEscape\", void 0);\n __decorate([\n Complex({}, AnimationSettings)\n ], Dialog.prototype, \"animationSettings\", void 0);\n __decorate([\n Complex({ X: 'center', Y: 'center' }, PositionData)\n ], Dialog.prototype, \"position\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"overlayClick\", void 0);\n Dialog = __decorate([\n NotifyPropertyChanges\n ], Dialog);\n return Dialog;\n}(Component));\nexport { Dialog };\n/**\n * Base for creating Alert and Confirmation Dialog through util method.\n */\nexport var DialogUtility;\n(function (DialogUtility) {\n /**\n * An alert dialog box is used to display warning like messages to the users.\n * ```\n * Eg : DialogUtility.alert('Alert message');\n *\n * ```\n */\n /* istanbul ignore next */\n function alert(args) {\n var dialogComponent;\n var dialogElement = createElement('div', { 'className': DLG_UTIL_ALERT });\n document.body.appendChild(dialogElement);\n var alertDialogObj;\n var okButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n alertDialogObj = createDialog({ content: args,\n position: { X: 'center', Y: 'top' },\n isModal: true, header: DLG_UTIL_DEFAULT_TITLE,\n buttons: okButtonModel }, dialogElement);\n }\n else {\n alertDialogObj = createDialog(alertOptions(args), dialogElement);\n }\n alertDialogObj.close = function () {\n alertDialogObj.destroy();\n if (alertDialogObj.element.classList.contains('e-dlg-modal')) {\n alertDialogObj.element.parentElement.remove();\n alertDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n alertDialogObj.element.remove();\n }\n };\n return alertDialogObj;\n }\n DialogUtility.alert = alert;\n /**\n * A confirm dialog displays a specified message along with ‘OK’ and ‘Cancel’ button.\n * ```\n * Eg : DialogUtility.confirm('Confirm dialog message');\n *\n * ```\n */\n /* istanbul ignore next */\n function confirm(args) {\n var dialogComponent;\n var dialogElement = createElement('div', { 'className': DLG_UTIL_CONFIRM });\n document.body.appendChild(dialogElement);\n var confirmDialogObj;\n var okCancelButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }, {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n confirmDialogObj = createDialog({ position: { X: 'center', Y: 'top' }, content: args, isModal: true,\n header: DLG_UTIL_DEFAULT_TITLE, buttons: okCancelButtonModel\n }, dialogElement);\n }\n else {\n confirmDialogObj = createDialog(confirmOptions(args), dialogElement);\n }\n confirmDialogObj.close = function () {\n confirmDialogObj.destroy();\n if (confirmDialogObj.element.classList.contains('e-dlg-modal')) {\n confirmDialogObj.element.parentElement.remove();\n confirmDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n confirmDialogObj.element.remove();\n }\n };\n return confirmDialogObj;\n }\n DialogUtility.confirm = confirm;\n function createDialog(options, element) {\n var dialogObject = new Dialog(options);\n dialogObject.appendTo(element);\n return dialogObject;\n }\n function alertOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setAlertButtonModel(options, option);\n return options;\n }\n function confirmOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setConfirmButtonModel(options, option);\n return options;\n }\n function formOptions(options, option) {\n options.header = !isNullOrUndefined(option.title) ? option.title : DLG_UTIL_DEFAULT_TITLE;\n options.content = !isNullOrUndefined(option.content) ? option.content : '';\n options.isModal = !isNullOrUndefined(option.isModal) ? option.isModal : true;\n options.showCloseIcon = !isNullOrUndefined(option.showCloseIcon) ? option.showCloseIcon : false;\n options.allowDragging = !isNullOrUndefined(option.isDraggable) ? option.isDraggable : false;\n options.closeOnEscape = !isNullOrUndefined(option.closeOnEscape) ? option.closeOnEscape : false;\n options.position = !isNullOrUndefined(option.position) ? option.position : { X: 'center', Y: 'top' };\n return options;\n }\n function setAlertButtonModel(options, option) {\n var alertButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, alertButtonModel[0]);\n }\n else {\n options.buttons = alertButtonModel;\n }\n return options;\n }\n function setConfirmButtonModel(options, option) {\n var okButtonModel = {\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n };\n var cancelButtonModel = {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n };\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, okButtonModel);\n }\n else {\n options.buttons[0] = okButtonModel;\n }\n if (!isNullOrUndefined(option.cancelButton)) {\n options.buttons[1] = formButtonModel(options.buttons[1], option.cancelButton, cancelButtonModel);\n }\n else {\n options.buttons[1] = cancelButtonModel;\n }\n return options;\n }\n function formButtonModel(buttonModel, option, buttonPropModel) {\n var buttonProps = buttonPropModel;\n if (!isNullOrUndefined(option.text)) {\n buttonProps.buttonModel.content = option.text;\n }\n if (!isNullOrUndefined(option.icon)) {\n buttonProps.buttonModel.iconCss = option.icon;\n }\n if (!isNullOrUndefined(option.cssClass)) {\n buttonProps.buttonModel.cssClass = option.cssClass;\n }\n if (!isNullOrUndefined(option.click)) {\n buttonProps.click = option.click;\n }\n return buttonProps;\n }\n})(DialogUtility || (DialogUtility = {}));\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n *
Droppable
\n * \n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { extend } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n * 'fr-BE': {\n * 'button': {\n * 'check': 'vérifié'\n * }\n * }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n * check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n /**\n * Constructor\n */\n function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n * @param {string} locale\n * @returns {void}\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n * @param {string} propertyName - specifies the property for which localize text to be returned.\n * @return string\n */\n L10n.prototype.getConstant = function (prop) {\n /* tslint:disable no-any */\n return this.currentLocale[prop] || this.localeStrings[prop] || '';\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n * @param {Object} curObject\n * @param {string} locale\n * @returns {Object}\n */\n L10n.prototype.intGetControlConstant = function (curObject, locale) {\n if (curObject[locale]) {\n return curObject[locale][this.controlName];\n }\n return null;\n };\n L10n.locale = {};\n return L10n;\n}());\nexport { L10n };\n","/**\n * To import utils\n */\nimport { isNullOrUndefined, } from './util';\nvar SvgRenderer = /** @class */ (function () {\n /* End-Properties */\n function SvgRenderer(rootID) {\n //Internal Variables \n this.svgLink = 'http://www.w3.org/2000/svg';\n this.rootId = rootID;\n }\n // method to get the attributes value\n /* tslint:disable */\n SvgRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n }; /* tslint:enable */\n /**\n * To create a Html5 SVG element\n * @param {SVGAttributes} options - Options to create SVG\n * @return {Element}\n */\n SvgRenderer.prototype.createSvg = function (options) {\n if (isNullOrUndefined(options.id)) {\n options.id = this.rootId + '_svg';\n }\n this.svgObj = document.getElementById(options.id);\n if (isNullOrUndefined(document.getElementById(options.id))) {\n this.svgObj = document.createElementNS(this.svgLink, 'svg');\n }\n this.svgObj = this.setElementAttributes(options, this.svgObj);\n this.setSVGSize(options.width, options.height);\n return this.svgObj;\n };\n // method to set the height and width for the SVG element\n SvgRenderer.prototype.setSVGSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width) || this.width <= 0) {\n this.svgObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.svgObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height) || this.height <= 0) {\n this.svgObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.svgObj.setAttribute('height', this.height.toString());\n }\n };\n /**\n * To draw a path\n * @param {PathAttributes} options - Options to draw a path in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawPath = function (options) {\n var path = document.getElementById(options.id);\n if (path === null) {\n path = document.createElementNS(this.svgLink, 'path');\n }\n path = this.setElementAttributes(options, path);\n return path;\n };\n /**\n * To draw a line\n * @param {LineAttributes} options - Options to draw a line in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawLine = function (options) {\n var line = document.getElementById(options.id);\n if (line === null) {\n line = document.createElementNS(this.svgLink, 'line');\n }\n line = this.setElementAttributes(options, line);\n return line;\n };\n /**\n * To draw a rectangle\n * @param {BaseAttibutes} options - Required options to draw a rectangle in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawRectangle = function (options) {\n var rectangle = document.getElementById(options.id);\n if (rectangle === null) {\n rectangle = document.createElementNS(this.svgLink, 'rect');\n }\n rectangle = this.setElementAttributes(options, rectangle);\n return rectangle;\n };\n /**\n * To draw a circle\n * @param {CircleAttributes} options - Required options to draw a circle in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawCircle = function (options) {\n var circle = document.getElementById(options.id);\n if (circle === null) {\n circle = document.createElementNS(this.svgLink, 'circle');\n }\n circle = this.setElementAttributes(options, circle);\n return circle;\n };\n /**\n * To draw a polyline\n * @param {PolylineAttributes} options - Options required to draw a polyline\n * @return {Element}\n */\n SvgRenderer.prototype.drawPolyline = function (options) {\n var polyline = document.getElementById(options.id);\n if (polyline === null) {\n polyline = document.createElementNS(this.svgLink, 'polyline');\n }\n polyline = this.setElementAttributes(options, polyline);\n return polyline;\n };\n /**\n * To draw an ellipse\n * @param {EllipseAttributes} options - Options required to draw an ellipse\n * @return {Element}\n */\n SvgRenderer.prototype.drawEllipse = function (options) {\n var ellipse = document.getElementById(options.id);\n if (ellipse === null) {\n ellipse = document.createElementNS(this.svgLink, 'ellipse');\n }\n ellipse = this.setElementAttributes(options, ellipse);\n return ellipse;\n };\n /**\n * To draw a polygon\n * @param {PolylineAttributes} options - Options needed to draw a polygon in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawPolygon = function (options) {\n var polygon = document.getElementById(options.id);\n if (polygon === null) {\n polygon = document.createElementNS(this.svgLink, 'polygon');\n }\n polygon = this.setElementAttributes(options, polygon);\n return polygon;\n };\n /**\n * To draw an image\n * @param {ImageAttributes} options - Required options to draw an image in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawImage = function (options) {\n var img = document.createElementNS(this.svgLink, 'image');\n img.setAttributeNS(null, 'height', options.height.toString());\n img.setAttributeNS(null, 'width', options.width.toString());\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', options.href);\n img.setAttributeNS(null, 'x', options.x.toString());\n img.setAttributeNS(null, 'y', options.y.toString());\n img.setAttributeNS(null, 'id', options.id);\n img.setAttributeNS(null, 'visibility', options.visibility);\n if (!isNullOrUndefined(this.getOptionValue(options, 'clip-path'))) {\n img.setAttributeNS(null, 'clip-path', this.getOptionValue(options, 'clip-path'));\n }\n if (!isNullOrUndefined(options.preserveAspectRatio)) {\n img.setAttributeNS(null, 'preserveAspectRatio', options.preserveAspectRatio);\n }\n return img;\n };\n /**\n * To draw a text\n * @param {TextAttributes} options - Options needed to draw a text in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.createText = function (options, label) {\n var text = document.createElementNS(this.svgLink, 'text');\n text = this.setElementAttributes(options, text);\n if (!isNullOrUndefined(label)) {\n text.textContent = label;\n }\n return text;\n };\n /**\n * To create a tSpan\n * @param {TextAttributes} options - Options to create tSpan\n * @param {string} label - The text content which is to be rendered in the tSpan\n * @return {Element}\n */\n SvgRenderer.prototype.createTSpan = function (options, label) {\n var tSpan = document.createElementNS(this.svgLink, 'tspan');\n tSpan = this.setElementAttributes(options, tSpan);\n if (!isNullOrUndefined(label)) {\n tSpan.textContent = label;\n }\n return tSpan;\n };\n /**\n * To create a title\n * @param {string} text - The text content which is to be rendered in the title\n * @return {Element}\n */\n SvgRenderer.prototype.createTitle = function (text) {\n var title = document.createElementNS(this.svgLink, 'title');\n title.textContent = text;\n return title;\n };\n /**\n * To create defs element in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.createDefs = function () {\n var defs = document.createElementNS(this.svgLink, 'defs');\n return defs;\n };\n /**\n * To create clip path in SVG\n * @param {BaseAttibutes} options - Options needed to create clip path\n * @return {Element}\n */\n SvgRenderer.prototype.createClipPath = function (options) {\n var clipPath = document.createElementNS(this.svgLink, 'clipPath');\n clipPath = this.setElementAttributes(options, clipPath);\n return clipPath;\n };\n /**\n * To create foreign object in SVG\n * @param {BaseAttibutes} options - Options needed to create foreign object\n * @return {Element}\n */\n SvgRenderer.prototype.createForeignObject = function (options) {\n var foreignObject = document.createElementNS(this.svgLink, 'foreignObject');\n foreignObject = this.setElementAttributes(options, foreignObject);\n return foreignObject;\n };\n /**\n * To create group element in SVG\n * @param {BaseAttibutes} options - Options needed to create group\n * @return {Element}\n */\n SvgRenderer.prototype.createGroup = function (options) {\n var group = document.createElementNS(this.svgLink, 'g');\n group = this.setElementAttributes(options, group);\n return group;\n };\n /**\n * To create pattern in SVG\n * @param {PatternAttributes} options - Required options to create pattern in SVG\n * @param {string} type - Specifies the name of the pattern\n * @return {Element}\n */\n SvgRenderer.prototype.createPattern = function (options, element) {\n var pattern = document.createElementNS(this.svgLink, element);\n pattern = this.setElementAttributes(options, pattern);\n return pattern;\n };\n /**\n * To create radial gradient in SVG\n * @param {string[]} colors - Specifies the colors required to create radial gradient\n * @param {string[]} colorStop - Specifies the colorstop required to create radial gradient\n * @param {string} name - Specifies the name of the gradient\n * @param {RadialGradient} options - value for radial gradient\n * @return {string}\n */\n SvgRenderer.prototype.createRadialGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'radialGradient',\n 'cx': options.cx + '%',\n 'cy': options.cy + '%',\n 'r': options.r + '%',\n 'fx': options.fx + '%',\n 'fy': options.fy + '%'\n };\n this.drawGradient('radialGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'radialGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To create linear gradient in SVG\n * @param {string[]} colors - Array of string specifies the values for color\n * @param {string[]} colors - Array of string specifies the values for colorStop\n * @param {string} name - Specifies the name of the gradient\n * @param {LinearGradient} options - Specifies the options for gradient\n * @return {string}\n */\n SvgRenderer.prototype.createLinearGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'linearGradient',\n 'x1': options.x1 + '%',\n 'y1': options.y1 + '%',\n 'x2': options.x2 + '%',\n 'y2': options.y2 + '%'\n };\n this.drawGradient('linearGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'linearGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To render the gradient element in SVG\n * @param {string} gradientType - Specifies the type of the gradient\n * @param {RadialGradient | LinearGradient} options - Options required to render a gradient\n * @param {string[]} colors - Array of string specifies the values for color\n * @param {string[]} colorStop - Array of string specifies the values for colorStop\n * @return {Element}\n */\n SvgRenderer.prototype.drawGradient = function (gradientType, options, colors) {\n var defs = this.createDefs();\n var gradient = document.createElementNS(this.svgLink, gradientType);\n gradient = this.setElementAttributes(options, gradient);\n for (var i = 0; i < colors.length; i++) {\n var stop_1 = document.createElementNS(this.svgLink, 'stop');\n stop_1.setAttribute('offset', colors[i].colorStop);\n stop_1.setAttribute('stop-color', colors[i].color);\n stop_1.setAttribute('stop-opacity', '1');\n gradient.appendChild(stop_1);\n }\n defs.appendChild(gradient);\n return defs;\n };\n /**\n * To render a clip path\n * @param {BaseAttibutes} options - Options required to render a clip path\n * @return {Element}\n */\n SvgRenderer.prototype.drawClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n var rect = this.drawRectangle(options);\n clipPath.appendChild(rect);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To create circular clip path in SVG\n * @param {CircleAttributes} options - Options required to create circular clip path\n * @return {Element}\n */\n SvgRenderer.prototype.drawCircularClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n var circle = this.drawCircle(options);\n clipPath.appendChild(circle);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To set the attributes to the element\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {Element} element - The element to which the attributes need to be set\n * @return {Element}\n */\n SvgRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], options[keys[i]]);\n }\n return element;\n };\n return SvgRenderer;\n}());\nexport { SvgRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n * @private\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n __extends(SwipeSettings, _super);\n function SwipeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(50)\n ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n * let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n * element: node,\n * tap: function (e) {\n * // tap handler function code\n * }\n * tapHold: function (e) {\n * // tap hold handler function code\n * }\n * scroll: function (e) {\n * // scroll handler function code\n * }\n * swipe: function (e) {\n * // swipe handler function code\n * }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n __extends(Touch, _super);\n /* End-Properties */\n function Touch(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.touchAction = true;\n _this.tapCount = 0;\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = (evt.changedTouches ? evt.changedTouches[0] : evt);\n if (evt.changedTouches !== undefined) {\n _this.touchAction = false;\n }\n _this.isTouchMoved = false;\n _this.movedDirection = '';\n _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n _this.startEventData = point;\n _this.hScrollLocked = _this.vScrollLocked = false;\n _this.tStampStart = Date.now();\n _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n }\n };\n _this.moveEvent = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = evt;\n if (evt.changedTouches) {\n point = evt.changedTouches[0];\n }\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var eSwipeArgs = void 0;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed \n /**\n * @private\n * @param newProp\n * @param oldProp\n */\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n * @return {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n * @returns {string}\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean}\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n // tslint:disable-next-line:no-any\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Component } from '@syncfusion/ej2-base';\nimport { addClass, Event, detach, removeClass, rippleEffect, EventHandler } from '@syncfusion/ej2-base';\nimport { getTextNode } from '../common/common';\nvar cssClassName = {\n RTL: 'e-rtl',\n BUTTON: 'e-btn',\n PRIMARY: 'e-primary',\n ICONBTN: 'e-icon-btn'\n};\n/**\n * The Button is a graphical user interface element that triggers an event on its click action. It can contain a text, an image, or both.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n * @param {ButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function Button(options, element) {\n return _super.call(this, options, element) || this;\n }\n Button.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n Button.prototype.render = function () {\n this.initialize();\n };\n Button.prototype.initialize = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n if (this.content) {\n this.element.innerHTML = this.content;\n }\n this.setIconCss();\n if (this.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n if (this.disabled) {\n this.controlStatus(this.disabled);\n }\n else {\n this.wireEvents();\n }\n this.removeRippleEffect = rippleEffect(this.element, { selector: '.' + cssClassName.BUTTON });\n };\n Button.prototype.controlStatus = function (disabled) {\n this.element.disabled = disabled;\n };\n Button.prototype.setIconCss = function () {\n if (this.iconCss) {\n var span = this.createElement('span', { className: 'e-btn-icon ' + this.iconCss });\n if (!this.element.textContent.trim()) {\n this.element.classList.add(cssClassName.ICONBTN);\n }\n else {\n span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n if (this.iconPosition === 'Top' || this.iconPosition === 'Bottom') {\n this.element.classList.add('e-' + this.iconPosition.toLowerCase() + '-icon-btn');\n }\n }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Button.prototype.destroy = function () {\n var span;\n var classList = [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success', 'e-info', 'e-danger',\n 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round',\n 'e-top-icon-btn', 'e-bottom-icon-btn'];\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n _super.prototype.destroy.call(this);\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n if (this.disabled) {\n this.element.removeAttribute('disabled');\n }\n if (this.content) {\n this.element.innerHTML = this.element.innerHTML.replace(this.content, '');\n }\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\n this.removeRippleEffect();\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n Button.prototype.getModuleName = function () {\n return 'btn';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n * @private\n */\n Button.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Dynamically injects the required modules to the component.\n * @private\n */\n Button.Inject = function () {\n // Inject code snippets\n };\n /**\n * Called internally if any of the property value changed.\n * @param {Button} newProp\n * @param {Button} oldProp\n * @returns void\n * @private\n */\n Button.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isPrimary':\n if (newProp.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n else {\n this.element.classList.remove(cssClassName.PRIMARY);\n }\n break;\n case 'disabled':\n this.controlStatus(newProp.disabled);\n this.unWireEvents();\n break;\n case 'iconCss':\n var span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n span.className = 'e-btn-icon ' + newProp.iconCss;\n if (this.element.textContent.trim()) {\n if (this.iconPosition === 'Left') {\n span.classList.add('e-icon-left');\n }\n else {\n span.classList.add('e-icon-right');\n }\n }\n }\n else {\n this.setIconCss();\n }\n break;\n case 'iconPosition':\n removeClass([this.element], ['e-top-icon-btn', 'e-bottom-icon-btn']);\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content':\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n break;\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n __decorate([\n Property()\n ], Button.prototype, \"locale\", void 0);\n __decorate([\n Event()\n ], Button.prototype, \"created\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, detach, getUniqueID, isRippleEnabled, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-checkbox-disabled';\nvar FRAME = 'e-frame';\nvar INDETERMINATE = 'e-stop';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLECHECK = 'e-ripple-check';\nvar RIPPLEINDETERMINATE = 'e-ripple-stop';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-checkbox-wrapper';\n/**\n * The CheckBox is a graphical user interface element that allows you to select one or more options from the choices.\n * It contains checked, unchecked, and indeterminate states.\n * ```html\n * \n * \n * ```\n */\nvar CheckBox = /** @class */ (function (_super) {\n __extends(CheckBox, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function CheckBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n CheckBox.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n if (isRippleEnabled) {\n rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n }\n if (state === 'check') {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLEINDETERMINATE);\n rippleSpan.classList.add(RIPPLECHECK);\n }\n ariaState = 'true';\n this.element.checked = true;\n }\n else if (state === 'uncheck') {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLECHECK, RIPPLEINDETERMINATE]);\n }\n ariaState = 'false';\n this.element.checked = false;\n }\n else {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLECHECK);\n rippleSpan.classList.add(RIPPLEINDETERMINATE);\n }\n ariaState = 'mixed';\n this.element.indeterminate = true;\n }\n this.getWrapper().setAttribute('aria-checked', ariaState);\n };\n CheckBox.prototype.clickHandler = function (event) {\n this.focusOutHandler();\n if (this.indeterminate) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n this.indeterminate = false;\n this.element.indeterminate = false;\n }\n else if (this.checked) {\n this.changeState('uncheck');\n this.checked = false;\n }\n else {\n this.changeState('check');\n this.checked = true;\n }\n var changeEventArgs = { checked: this.element.checked, event: event };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n CheckBox.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(this.element, wrapper);\n detach(wrapper);\n this.element.checked = false;\n if (this.indeterminate) {\n this.element.indeterminate = false;\n }\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n }\n };\n CheckBox.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n CheckBox.prototype.focusOutHandler = function () {\n this.getWrapper().classList.remove('e-focus');\n };\n /**\n * Gets the module name.\n * @private\n */\n CheckBox.prototype.getModuleName = function () {\n return 'checkbox';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n CheckBox.prototype.getPersistData = function () {\n return this.addOnPersist(['checked', 'indeterminate']);\n };\n CheckBox.prototype.getWrapper = function () {\n return this.element.parentElement.parentElement;\n };\n CheckBox.prototype.initialize = function () {\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.changeState('check');\n }\n if (this.indeterminate) {\n this.changeState();\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n CheckBox.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', {\n className: WRAPPER, attrs: { 'role': 'checkbox', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n var frameSpan = this.createElement('span', { className: 'e-icons ' + FRAME });\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n wrapper.appendChild(label);\n label.appendChild(this.element);\n label.appendChild(frameSpan);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n if (this.labelPosition === 'Before') {\n label.appendChild(rippleSpan);\n }\n else {\n label.insertBefore(rippleSpan, frameSpan);\n }\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n CheckBox.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n CheckBox.prototype.labelMouseHandler = function (e) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n CheckBox.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n CheckBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.indeterminate = false;\n this.element.indeterminate = false;\n this.changeState(newProp.checked ? 'check' : 'uncheck');\n break;\n case 'indeterminate':\n if (newProp.indeterminate) {\n this.changeState();\n }\n else {\n this.element.indeterminate = false;\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n wrapper.classList.remove(oldProp.cssClass);\n }\n wrapper.classList.add(newProp.cssClass);\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n var label = wrapper.getElementsByClassName(LABEL)[0];\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n detach(label);\n if (newProp.labelPosition === 'After') {\n labelWrap.appendChild(label);\n }\n else {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n * @private\n */\n CheckBox.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-CHECKBOX', 'checkbox', element, WRAPPER, 'checkbox');\n this.element = element;\n if (this.element.getAttribute('type') !== 'checkbox') {\n this.element.setAttribute('type', 'checkbox');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n CheckBox.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n CheckBox.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n CheckBox.prototype.setText = function (text) {\n var label = this.getWrapper().getElementsByClassName(LABEL)[0];\n if (label) {\n label.textContent = text;\n }\n else {\n label = this.createElement('span', { className: LABEL, innerHTML: text });\n var labelWrap = this.getWrapper().getElementsByTagName('label')[0];\n if (this.labelPosition === 'Before') {\n labelWrap.insertBefore(label, this.getWrapper().getElementsByClassName(FRAME)[0]);\n }\n else {\n labelWrap.appendChild(label);\n }\n }\n };\n CheckBox.prototype.changeHandler = function (e) {\n e.stopPropagation();\n };\n CheckBox.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(document, 'keydown', this.keyDownHandler);\n EventHandler.remove(wrapper, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.remove(label, 'mousedown', this.labelMouseHandler);\n EventHandler.remove(label, 'mouseup', this.labelMouseHandler);\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.remove(this.element, 'change', this.changeHandler);\n }\n };\n CheckBox.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(document, 'keydown', this.keyDownHandler, this);\n EventHandler.add(wrapper, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.add(label, 'mousedown', this.labelMouseHandler, this);\n EventHandler.add(label, 'mouseup', this.labelMouseHandler, this);\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n }\n };\n __decorate([\n Event()\n ], CheckBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], CheckBox.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"indeterminate\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], CheckBox.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"value\", void 0);\n CheckBox = __decorate([\n NotifyPropertyChanges\n ], CheckBox);\n return CheckBox;\n}(Component));\nexport { CheckBox };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, rippleEffect, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { addClass, getInstance, getUniqueID, isRippleEnabled, removeClass } from '@syncfusion/ej2-base';\nimport { detach, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-radio-wrapper';\n/**\n * The RadioButton is a graphical user interface element that allows you to select one option from the choices.\n * It contains checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar RadioButton = /** @class */ (function (_super) {\n __extends(RadioButton, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function RadioButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n RadioButton_1 = RadioButton;\n RadioButton.prototype.changeHandler = function (event) {\n this.checked = true;\n this.dataBind();\n var changeEventArgs = { value: this.value, event: event };\n this.trigger('change', changeEventArgs);\n if (this.tagName === 'EJS-RADIOBUTTON') {\n event.stopPropagation();\n }\n };\n RadioButton.prototype.updateChange = function (state) {\n var input;\n var name = this.element.getAttribute('name');\n var radioGrp = document.querySelectorAll('input.e-radio[name=\"' + name + '\"]');\n for (var i = 0; i < radioGrp.length; i++) {\n input = radioGrp[i];\n if (input !== this.element) {\n getInstance(input, RadioButton_1).checked = false;\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n RadioButton.prototype.destroy = function () {\n var _this = this;\n var radioWrap = this.element.parentElement;\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n radioWrap.parentNode.insertBefore(this.element, radioWrap);\n detach(radioWrap);\n this.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n radioWrap.removeAttribute(key);\n });\n radioWrap.innerHTML = '';\n }\n };\n RadioButton.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getLabel().classList.add('e-focus');\n }\n };\n RadioButton.prototype.focusOutHandler = function () {\n this.getLabel().classList.remove('e-focus');\n };\n RadioButton.prototype.getModuleName = function () {\n return 'radio';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n RadioButton.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n RadioButton.prototype.getLabel = function () {\n return this.element.nextElementSibling;\n };\n RadioButton.prototype.initialize = function () {\n this.initWrapper();\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.element.checked = true;\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n RadioButton.prototype.initWrapper = function () {\n var rippleSpan;\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', { className: WRAPPER });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n wrapper.appendChild(this.element);\n wrapper.appendChild(label);\n if (isRippleEnabled) {\n rippleSpan = this.createElement('span', { className: (RIPPLE) });\n label.appendChild(rippleSpan);\n rippleEffect(rippleSpan, {\n duration: 400,\n isCenterRipple: true\n });\n }\n if (this.enableRtl) {\n label.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([label], this.cssClass.split(' '));\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n RadioButton.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n RadioButton.prototype.labelRippleHandler = function (e) {\n var ripple = this.getLabel().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, ripple);\n };\n RadioButton.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n RadioButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var label = this.getLabel();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n if (newProp.checked) {\n this.updateChange(newProp.checked);\n }\n this.element.checked = newProp.checked;\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([label], oldProp.cssClass.split(' '));\n }\n addClass([label], newProp.cssClass.split(' '));\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n label.classList.add(RTL);\n }\n else {\n label.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n if (newProp.labelPosition === 'Before') {\n label.classList.add('e-right');\n }\n else {\n label.classList.remove('e-right');\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n }\n }\n };\n /**\n * Initialize checked Property, Angular and React and Unique ID support.\n * @private\n */\n RadioButton.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-RADIOBUTTON', 'radio', element, WRAPPER, 'radio');\n this.element = element;\n if (this.element.getAttribute('type') !== 'radio') {\n this.element.setAttribute('type', 'radio');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n RadioButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n RadioButton.prototype.setDisabled = function () {\n this.element.disabled = true;\n };\n RadioButton.prototype.setText = function (text) {\n var label = this.getLabel();\n var textLabel = label.getElementsByClassName(LABEL)[0];\n if (textLabel) {\n textLabel.textContent = text;\n }\n else {\n textLabel = this.createElement('span', { className: LABEL, innerHTML: text });\n label.appendChild(textLabel);\n }\n if (this.labelPosition === 'Before') {\n this.getLabel().classList.add('e-right');\n }\n else {\n this.getLabel().classList.remove('e-right');\n }\n };\n RadioButton.prototype.unWireEvents = function () {\n var label = this.getLabel();\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(document, 'keydown', this.keyDownHandler);\n EventHandler.remove(label, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.remove(rippleLabel, 'mousedown', this.labelRippleHandler);\n EventHandler.remove(rippleLabel, 'mouseup', this.labelRippleHandler);\n }\n };\n RadioButton.prototype.wireEvents = function () {\n var label = this.getLabel();\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(document, 'keydown', this.keyDownHandler, this);\n EventHandler.add(label, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.add(rippleLabel, 'mousedown', this.labelRippleHandler, this);\n EventHandler.add(rippleLabel, 'mouseup', this.labelRippleHandler, this);\n }\n };\n var RadioButton_1;\n __decorate([\n Event()\n ], RadioButton.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RadioButton.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RadioButton.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"value\", void 0);\n RadioButton = RadioButton_1 = __decorate([\n NotifyPropertyChanges\n ], RadioButton);\n return RadioButton;\n}(Component));\nexport { RadioButton };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, isRippleEnabled, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { rippleMouseHandler, destroy, preRender } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-switch-disabled';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLE_CHECK = 'e-ripple-check';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-switch-wrapper';\nvar ACTIVE = 'e-switch-active';\n/**\n * The Switch is a graphical user interface element that allows you to toggle between checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar Switch = /** @class */ (function (_super) {\n __extends(Switch, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function Switch(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n _this.isDrag = false;\n return _this;\n }\n Switch.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var wrapper = this.getWrapper();\n var bar = wrapper.querySelector('.e-switch-inner');\n var handle = wrapper.querySelector('.e-switch-handle');\n if (isRippleEnabled) {\n rippleSpan = wrapper.getElementsByClassName(RIPPLE)[0];\n }\n if (state) {\n addClass([bar, handle], ACTIVE);\n ariaState = 'true';\n this.element.checked = true;\n this.checked = true;\n if (rippleSpan) {\n addClass([rippleSpan], [RIPPLE_CHECK]);\n }\n }\n else {\n removeClass([bar, handle], ACTIVE);\n ariaState = 'false';\n this.element.checked = false;\n this.checked = false;\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLE_CHECK]);\n }\n }\n wrapper.setAttribute('aria-checked', ariaState);\n };\n Switch.prototype.clickHandler = function (evt) {\n this.isDrag = false;\n this.focusOutHandler();\n this.changeState(!this.checked);\n this.element.focus();\n var changeEventArgs = { checked: this.element.checked, event: evt };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the Switch widget.\n * @returns void\n */\n Switch.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n destroy(this, this.getWrapper(), this.tagName);\n };\n Switch.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n Switch.prototype.focusOutHandler = function () {\n this.getWrapper().classList.remove('e-focus');\n };\n /**\n * Gets the module name.\n * @private\n */\n Switch.prototype.getModuleName = function () {\n return 'switch';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n Switch.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n Switch.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n Switch.prototype.initialize = function () {\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.changeState(true);\n }\n if (this.disabled) {\n this.setDisabled();\n }\n if (this.onLabel || this.offLabel) {\n this.setLabel(this.onLabel, this.offLabel);\n }\n };\n Switch.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', {\n className: WRAPPER, attrs: { 'role': 'switch', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var switchInner = this.createElement('span', { className: 'e-switch-inner' });\n var onLabel = this.createElement('span', { className: 'e-switch-on' });\n var offLabel = this.createElement('span', { className: 'e-switch-off' });\n var handle = this.createElement('span', { className: 'e-switch-handle' });\n wrapper.appendChild(this.element);\n switchInner.appendChild(onLabel);\n switchInner.appendChild(offLabel);\n wrapper.appendChild(switchInner);\n wrapper.appendChild(handle);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n handle.appendChild(rippleSpan);\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n Switch.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.changeState(newProp.checked);\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'onLabel':\n case 'offLabel':\n this.setLabel(newProp.onLabel, newProp.offLabel);\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n wrapper.classList.remove(oldProp.cssClass);\n }\n wrapper.classList.add(newProp.cssClass);\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n * @private\n */\n Switch.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n preRender(this, 'EJS-SWITCH', WRAPPER, element, this.getModuleName());\n };\n /**\n * Initialize control rendering.\n * @private\n */\n Switch.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n Switch.prototype.rippleHandler = function (e) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n if (e.type === 'mousedown' && e.currentTarget.classList.contains('e-switch-wrapper') && e.which === 1) {\n this.isDrag = true;\n this.isKeyPressed = false;\n }\n };\n Switch.prototype.rippleTouchHandler = function (eventType) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(eventType, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n };\n Switch.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n Switch.prototype.setLabel = function (onText, offText) {\n var wrapper = this.getWrapper();\n if (onText) {\n wrapper.querySelector('.e-switch-on').textContent = onText;\n }\n if (offText) {\n wrapper.querySelector('.e-switch-off').textContent = offText;\n }\n };\n Switch.prototype.switchFocusHandler = function () {\n this.isKeyPressed = true;\n };\n Switch.prototype.switchMouseUp = function (e) {\n var target = e.target;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (e.type === 'touchmove') {\n e.preventDefault();\n }\n if (e.type === 'touchstart') {\n this.isDrag = true;\n this.rippleTouchHandler('mousedown');\n }\n if (this.isDrag) {\n if ((e.type === 'mouseup' && target.className.indexOf('e-switch') < 0) || e.type === 'touchend') {\n this.clickHandler(e);\n this.rippleTouchHandler('mouseup');\n e.preventDefault();\n }\n }\n };\n /**\n * Toggle the Switch component state into checked/unchecked.\n * @returns void\n */\n Switch.prototype.toggle = function () {\n this.clickHandler();\n };\n Switch.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n var handle = wrapper.querySelector('.e-switch-handle');\n EventHandler.add(wrapper, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(document, 'mouseup', this.switchMouseUp, this);\n EventHandler.add(document, 'keydown', this.switchFocusHandler, this);\n EventHandler.add(wrapper, 'mousedown mouseup', this.rippleHandler, this);\n EventHandler.add(wrapper, 'touchstart touchmove touchend', this.switchMouseUp, this);\n };\n Switch.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n var handle = wrapper.querySelector('.e-switch-handle');\n EventHandler.remove(wrapper, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(document, 'mouseup', this.switchMouseUp);\n EventHandler.remove(document, 'keydown', this.switchFocusHandler);\n EventHandler.remove(wrapper, 'mousedown mouseup', this.rippleHandler);\n EventHandler.remove(wrapper, 'touchstart touchmove touchend', this.switchMouseUp);\n };\n __decorate([\n Event()\n ], Switch.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Switch.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], Switch.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Switch.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"onLabel\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"offLabel\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"value\", void 0);\n Switch = __decorate([\n NotifyPropertyChanges\n ], Switch);\n return Switch;\n}(Component));\nexport { Switch };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Internationalization, } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n __extends(CalendarBase, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n * @param {CalendarModel} options?\n * @param {string|HTMLElement} element?\n */\n function CalendarBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.keyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n altUpArrow: 'alt+uparrow',\n spacebar: 'space',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @returns void\n * @private\n */\n CalendarBase.prototype.render = function () {\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n }\n else {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'role': 'calendar'\n });\n }\n this.createHeader();\n this.createContent();\n this.wireEvents();\n };\n CalendarBase.prototype.validateDate = function (value) {\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n this.currentDate = new Date('' + value);\n }\n };\n CalendarBase.prototype.minMaxUpdate = function (value) {\n if (!(+this.min <= +this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n this.currentDate = new Date('' + value);\n }\n else {\n if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n this.currentDate = new Date('' + this.max);\n }\n else {\n if (+this.currentDate < +this.min) {\n this.currentDate = new Date('' + this.min);\n }\n }\n }\n };\n CalendarBase.prototype.createHeader = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n this.headerElement = this.createElement('div', { className: HEADER });\n var iconContainer = this.createElement('div', { className: ICONCONTAINER });\n this.previousIcon = this.createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n this.nextIcon = this.createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n attributes(this.nextIcon, ariaNextAttrs);\n this.headerTitleElement = this.createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(this.createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(this.createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n };\n CalendarBase.prototype.createContent = function () {\n this.contentElement = this.createElement('div', { className: CONTENT });\n this.table = this.createElement('table', { attrs: { tabIndex: '0', 'role': 'grid', 'aria-activedescendant': '' } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.createContentHeader();\n this.createContentBody();\n if (this.showTodayButton) {\n this.createContentFooter();\n }\n };\n CalendarBase.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.short', getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n return culShortNames;\n };\n CalendarBase.prototype.createContentHeader = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n var shortNames;\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = this.createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '';\n if (this.getModuleName() === 'calendar') {\n addClass([this.element], '' + WEEKNUMBER);\n }\n else {\n addClass([this.calendarElement], '' + WEEKNUMBER);\n }\n }\n shortNames = this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek);\n for (var days = 0; days <= daysCount; days++) {\n html += '' + shortNames[days] + '';\n }\n html = '' + html + '';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n CalendarBase.prototype.createContentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n CalendarBase.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n };\n CalendarBase.prototype.createContentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(+this.min);\n var maximum = new Date(+this.max);\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = this.createElement('button');\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = this.createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n CalendarBase.prototype.wireEvents = function () {\n EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n };\n CalendarBase.prototype.todayButtonClick = function (value) {\n if (this.showTodayButton) {\n if (this.currentView() === this.depth) {\n this.effect = '';\n }\n else {\n this.effect = 'e-zoomin';\n }\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date('' + value));\n }\n else {\n this.navigateTo('Month', new Date('' + value));\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n CalendarBase.prototype.keyActionHandle = function (e, value, multiSelection) {\n var view = this.getViewNumber(this.currentView());\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate;\n if (multiSelection) {\n if (!isNullOrUndefined(focusedDate) && +value === parseInt(focusedDate.getAttribute('id').split('_')[0], 10)) {\n selectedDate = focusedDate;\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n this.KeyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveRight':\n this.KeyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveUp':\n if (view === 0) {\n this.KeyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.KeyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n break;\n case 'moveDown':\n if (view === 0) {\n this.KeyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.KeyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n break;\n case 'select':\n if (e.target === this.todayElement) {\n this.todayButtonClick(value);\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element));\n }\n else {\n this.contentClick(null, --view, (element), value);\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n detach(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.KeyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date('' + this.currentDate);\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n CalendarBase.prototype.preRender = function (value) {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n ;\n CalendarBase.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n CalendarBase.prototype.renderMonths = function (e, value) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles = this.renderDays(this.currentDate, e, value);\n this.createContentHeader();\n this.renderTemplate(tdEles, numCells, MONTH, e, value);\n };\n // tslint:disable-next-line:max-func-body-length\n CalendarBase.prototype.renderDays = function (currentDate, e, value, multiSelection, values) {\n var tdEles = [];\n var cellsCount = 42;\n var localDate = new Date('' + currentDate);\n var minMaxDate;\n var numCells = this.weekNumber ? 8 : 7;\n // 8 and 7 denotes the number of columns to be specified.\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.createElement('td', { className: CELL });\n var weekAnchor = this.createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n weekAnchor.textContent = '' + this.getWeek(localDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.renderDayCellArgs;\n this.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n if (multiSelection) {\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd' }));\n var tempDateString = +new Date(this.globalize.formatDate(values[index], { type: 'date', skeleton: 'yMd' }));\n if (localDateString === tempDateString) {\n values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (value && +value === +argument.date) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.renderDayCellArgs.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n // if (args.isDisabled && +this.value === +args.date) {\n // this.setProperties({ value: null }, true);\n // }\n if (multiSelection && !isNullOrUndefined(values) && !otherMnthBool && !disabledCls) {\n for (var tempValue = 0; tempValue < values.length; tempValue++) {\n var localDateString = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'short' });\n var tempDateString = this.globalize.formatDate(values[tempValue], { type: 'date', skeleton: 'short' });\n if (localDateString === tempDateString && this.getDateVal(localDate, values[tempValue])) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (values.length <= 0) {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!otherMnthBool && !disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n if (date.getMonth() === new Date().getMonth() && date.getDate() === new Date().getDate()) {\n if (date.getFullYear() === new Date().getFullYear()) {\n addClass([tdEle], TODAY);\n }\n }\n tdEles.push(this.renderDayCellArgs.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n CalendarBase.prototype.updateFocus = function (otherMonth, disabled, localDate, tableElement, currentDate) {\n if (currentDate.getDate() === localDate.getDate() && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n else {\n if (currentDate >= this.max && parseInt(tableElement.id, 0) === +this.max && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n if (currentDate <= this.min && parseInt(tableElement.id, 0) === +this.min && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n }\n };\n CalendarBase.prototype.renderYears = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var days;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date('' + this.currentDate);\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date('' + this.min).getFullYear();\n var minMonth = new Date('' + this.min).getMonth();\n var maxYr = new Date('' + this.max).getFullYear();\n var maxMonth = new Date('' + this.max).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n var disabled = (this.min > localDate) || (this.max < localDate);\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n var localMonth = (value && (value).getMonth() === localDate.getMonth());\n var select = (value && (value).getFullYear() === yr && localMonth);\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'dateTime', skeleton: 'MMM' });\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e, value);\n };\n CalendarBase.prototype.renderDecades = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date('' + this.currentDate);\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date('' + (localYr - localYr % 10));\n var endYr = new Date('' + (localYr - localYr % 10 + (10 - 1)));\n var startHdrYr = this.globalize.formatDate(startYr, { type: 'dateTime', skeleton: 'y' });\n var endHdrYr = this.globalize.formatDate(endYr, { type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n attributes(tdEle, { 'role': 'gridcell' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'dateTime', skeleton: 'y' });\n if (year < new Date('' + this.min).getFullYear() || year > new Date('' + this.max).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n CalendarBase.prototype.dayCell = function (localDate) {\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var value = date.valueOf();\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false', 'role': 'gridcell' }\n };\n return this.createElement('td', attrs);\n };\n CalendarBase.prototype.firstDay = function (date) {\n var collection = this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.lastDay = function (date, view) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n if (view !== 2) {\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n }\n else {\n return this.findLastDay(this.firstDay(lastDate));\n }\n };\n ;\n CalendarBase.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n CalendarBase.prototype.findLastDay = function (date) {\n var collection = this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.removeTableHeadElement = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = this.createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = this.createElement('tr', { attrs: { 'role': 'row' } });\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (this.weekNumber && rowIterator === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n this.iconHandler();\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActiveDescendant();\n };\n CalendarBase.prototype.clickHandler = function (e, value) {\n this.clickEventEmitter(e);\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.contentClick(e, 0, null, value);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null, value);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null, value);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null);\n }\n else {\n this.contentClick(e, 0, eve, value);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n // Content click event handler required for extended components\n CalendarBase.prototype.clickEventEmitter = function (e) {\n e.preventDefault();\n };\n CalendarBase.prototype.contentClick = function (e, view, element, value) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, element);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n this.currentDate.setMonth(d.getMonth());\n if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n this.currentDate.setDate(0);\n }\n this.currentDate.setFullYear(d.getFullYear());\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n break;\n case 1:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.selectDate(e, d, null);\n }\n else {\n this.currentDate.setFullYear(d.getFullYear());\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n CalendarBase.prototype.switchView = function (view, e, multiSelection) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e);\n if (multiSelection && !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0])) {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n * @private\n */\n CalendarBase.prototype.getModuleName = function () {\n return 'calendar';\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n CalendarBase.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp, multiSelection, values) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'min':\n case 'max':\n prop === 'min' ? this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true) :\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.setProperties({ start: this.currentView() }, true);\n detach(this.tableBodyElement);\n this.minMaxUpdate();\n if (multiSelection) {\n this.validateValues(multiSelection, values);\n }\n this.createContentBody();\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n else {\n if (this.todayElement.classList.contains('e-disabled') && (this.footer) && (this.todayElement)) {\n removeClass([this.todayElement], DISABLED);\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n }\n break;\n case 'start':\n case 'weekNumber':\n case 'firstDayOfWeek':\n this.createContentHeader();\n this.createContentBody();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.createContentHeader();\n this.createContentBody();\n this.l10.setLocale(this.locale);\n this.updateFooter();\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.createContentFooter();\n }\n else {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n /**\n * values property updated with considered disabled dates of the calendar.\n */\n CalendarBase.prototype.validateValues = function (multiSelection, values) {\n if (multiSelection && !isNullOrUndefined(values) && values.length > 0) {\n var copyValues = this.copyValues(values);\n for (var skipIndex = 0; skipIndex < copyValues.length; skipIndex++) {\n var tempValue = copyValues[skipIndex];\n var tempValueString = this.globalize.formatDate(tempValue, { type: 'date', skeleton: 'yMd' });\n var minString = this.globalize.formatDate(this.min, { type: 'date', skeleton: 'yMd' });\n var maxString = this.globalize.formatDate(this.max, { type: 'date', skeleton: 'yMd' });\n if (+new Date(tempValueString) < +new Date(minString) || +new Date(tempValueString) > +new Date(maxString)) {\n copyValues.splice(skipIndex, 1);\n skipIndex = -1;\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n };\n CalendarBase.prototype.setValueUpdate = function () {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\n };\n CalendarBase.prototype.copyValues = function (values) {\n var copyValues = [];\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n copyValues.push(new Date(+values[index]));\n }\n }\n return copyValues;\n };\n CalendarBase.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM' });\n break;\n case 'months':\n this.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', skeleton: 'y' });\n }\n };\n CalendarBase.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full' });\n if (selectedEle || focusedEle) {\n (focusedEle || selectedEle).setAttribute('aria-selected', 'true');\n (focusedEle || selectedEle).setAttribute('aria-label', 'The current focused date is ' + '' + title);\n id = (focusedEle || selectedEle).getAttribute('id');\n }\n return id;\n };\n CalendarBase.prototype.iconHandler = function () {\n new Date('' + this.currentDate).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date('' + this.currentDate), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date('' + this.currentDate), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date('' + this.currentDate), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n CalendarBase.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar') {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar') {\n EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n }\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n CalendarBase.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n CalendarBase.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n CalendarBase.prototype.navigateTitle = function (e) {\n e.preventDefault();\n this.title(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigatePrevious = function (e) {\n e.preventDefault();\n this.previous();\n this.triggerNavigate(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigateNext = function (eve) {\n eve.preventDefault();\n this.next();\n this.triggerNavigate(eve);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n CalendarBase.prototype.navigateTo = function (view, date) {\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date('' + this.min);\n }\n if (+date >= +this.max) {\n this.currentDate = new Date('' + this.max);\n }\n if (this.getModuleName() === 'daterangepicker') {\n this.currentDate = date;\n }\n if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n view = this.depth;\n }\n }\n this.switchView(this.getViewNumber(view));\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n */\n CalendarBase.prototype.currentView = function () {\n if (this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n CalendarBase.prototype.getDateVal = function (date, value) {\n return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n };\n CalendarBase.prototype.getCultureObjects = function (ld, c) {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.short', ld);\n };\n ;\n CalendarBase.prototype.getWeek = function (d) {\n var currentDate = new Date('' + d).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n var a = (currentDate - date);\n return Math.ceil((((a) / dayMilliSeconds) + new Date(date).getDay() + 1) / 7);\n };\n CalendarBase.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n CalendarBase.prototype.addMonths = function (date, i) {\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n };\n CalendarBase.prototype.addYears = function (date, i) {\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n };\n CalendarBase.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n var date = this.globalize.parseDate(dateString, dateFormatOptions);\n var value = date.valueOf() - date.valueOf() % 1000;\n return new Date(value);\n //return this.globalize.parseDate(dateString, dateFormatOptions);\n };\n CalendarBase.prototype.selectDate = function (e, date, node, multiSelection, values) {\n var element = node || e.currentTarget;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n if (multiSelection && !this.checkPresentDate(date, values)) {\n var copyValues = this.copyValues(values);\n if (!isNullOrUndefined(values) && copyValues.length > 0) {\n copyValues.push(new Date('' + date));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: values[values.length - 1] }, true);\n }\n else {\n this.setProperties({ values: [new Date('' + date)] }, true);\n }\n }\n else {\n this.setProperties({ value: new Date('' + date) }, true);\n }\n this.currentDate = new Date('' + date);\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n if (multiSelection) {\n var copyValues = this.copyValues(values);\n var collection = Array.prototype.slice.call(this.tableBodyElement.querySelectorAll('td'));\n for (var index = 0; index < collection.length; index++) {\n var tempElement = tableBodyElement.querySelectorAll('td' + '.' + FOCUSEDDATE)[0];\n var selectedElement = tableBodyElement.querySelectorAll('td' + '.' + SELECTED)[0];\n if (collection[index] === tempElement) {\n removeClass([collection[index]], FOCUSEDDATE);\n }\n if (collection[index] === selectedElement &&\n !this.checkPresentDate(new Date(parseInt(selectedElement.getAttribute('id').split('_')[0], 10)), values)) {\n removeClass([collection[index]], SELECTED);\n }\n }\n if (element.classList.contains(SELECTED)) {\n removeClass([element], SELECTED);\n for (var i = 0; i < copyValues.length; i++) {\n var localDateString = this.globalize.formatDate(date, { type: 'date', skeleton: 'short' });\n var tempDateString = this.globalize.formatDate(copyValues[i], { type: 'date', skeleton: 'short' });\n if (localDateString === tempDateString) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n addClass([element], FOCUSEDDATE);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n addClass([element], SELECTED);\n }\n }\n else {\n addClass([element], SELECTED);\n }\n };\n CalendarBase.prototype.checkPresentDate = function (dates, values) {\n var previousValue = false;\n if (!isNullOrUndefined(values)) {\n for (var checkPrevious = 0; checkPrevious < values.length; checkPrevious++) {\n var localDateString = this.globalize.formatDate(dates, { type: 'date', skeleton: 'short' });\n var tempDateString = this.globalize.formatDate(values[checkPrevious], { type: 'date', skeleton: 'short' });\n if (localDateString === tempDateString) {\n previousValue = true;\n }\n }\n }\n return previousValue;\n };\n CalendarBase.prototype.setAriaActiveDescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n CalendarBase.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n CalendarBase.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n CalendarBase.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n CalendarBase.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n CalendarBase.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n CalendarBase.prototype.isMonthYearRange = function (date) {\n return date.getMonth() >= this.min.getMonth()\n && date.getFullYear() >= this.min.getFullYear()\n && date.getMonth() <= this.max.getMonth()\n && date.getFullYear() <= this.max.getFullYear();\n };\n CalendarBase.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n CalendarBase.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n CalendarBase.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = this.renderDays(value, null);\n collection = tdEles.filter(function (element) {\n return element.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n CalendarBase.prototype.getMaxDays = function (d) {\n var date;\n var month;\n var tmpDate = new Date('' + d);\n date = 28;\n month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n CalendarBase.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date('' + date) }, true);\n };\n ;\n CalendarBase.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n }\n this.setProperties({ value: new Date('' + date) }, true);\n this.currentDate = new Date('' + value);\n };\n CalendarBase.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n __decorate([\n Property(new Date(1900, 0, 1))\n ], CalendarBase.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], CalendarBase.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"renderDayCell\", void 0);\n CalendarBase = __decorate([\n NotifyPropertyChanges\n ], CalendarBase);\n return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n * @param {CalendarModel} options?\n * @param {string|HTMLElement} element?\n */\n function Calendar(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To Initialize the control rendering.\n * @returns void\n * @private\n */\n Calendar.prototype.render = function () {\n if (this.isMultiSelection && typeof this.values === 'object' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var tempValues = [];\n var copyValues = [];\n for (var limit = 0; limit < this.values.length; limit++) {\n if (tempValues.indexOf(+this.values[limit]) === -1) {\n tempValues.push(+this.values[limit]);\n copyValues.push(this.values[limit]);\n }\n }\n this.setProperties({ values: copyValues }, true);\n for (var index = 0; index < this.values.length; index++) {\n if (!this.checkDateValue(this.values[index])) {\n if (typeof (this.values[index]) === 'string' && this.checkDateValue(new Date('' + this.values[index]))) {\n var copyDate = new Date('' + this.values[index]);\n this.values.splice(index, 1);\n this.values.splice(index, 0, copyDate);\n }\n else {\n this.values.splice(index, 1);\n }\n }\n }\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n this.previousValues = this.values.length;\n }\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.render.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n Calendar.prototype.formResetHandler = function () {\n this.value = null;\n };\n Calendar.prototype.validateDate = function () {\n if (typeof this.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true); // persist the value property.\n }\n _super.prototype.validateDate.call(this, this.value);\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date('' + this.value);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n }\n if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.min);\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.max);\n }\n }\n }\n else {\n _super.prototype.minMaxUpdate.call(this, this.value);\n }\n };\n Calendar.prototype.todayButtonClick = function () {\n if (this.showTodayButton) {\n var tempValue = new Date();\n if (this.value) {\n tempValue.setHours(this.value.getHours());\n tempValue.setMinutes(this.value.getMinutes());\n tempValue.setSeconds(this.value.getSeconds());\n tempValue.setMilliseconds(this.value.getMilliseconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n }\n this.setProperties({ value: tempValue }, true);\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (!_super.prototype.checkPresentDate.call(this, tempValue, this.values)) {\n copyValues.push(tempValue);\n this.setProperties({ values: copyValues });\n }\n }\n _super.prototype.todayButtonClick.call(this, new Date(+this.value));\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n _super.prototype.keyActionHandle.call(this, e, this.value, this.isMultiSelection);\n };\n /**\n * Initialize the event handler\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n _super.prototype.preRender.call(this, this.value);\n };\n ;\n Calendar.prototype.createContent = function () {\n this.previousDate = this.value;\n _super.prototype.createContent.call(this);\n };\n Calendar.prototype.minMaxDate = function (localDate) {\n return _super.prototype.minMaxDate.call(this, localDate);\n };\n Calendar.prototype.renderMonths = function (e) {\n _super.prototype.renderMonths.call(this, e, this.value);\n };\n Calendar.prototype.renderDays = function (currentDate, e) {\n var tempDays = _super.prototype.renderDays.call(this, currentDate, e, this.value, this.isMultiSelection, this.values);\n if (this.isMultiSelection) {\n _super.prototype.validateValues.call(this, this.isMultiSelection, this.values);\n }\n return tempDays;\n };\n Calendar.prototype.renderYears = function (e) {\n _super.prototype.renderYears.call(this, e, this.value);\n };\n Calendar.prototype.renderDecades = function (e) {\n _super.prototype.renderDecades.call(this, e, this.value);\n };\n Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n if (eve.classList.contains(OTHERMONTH)) {\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n copyValues.push(this.getIdValue(e, null));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n else {\n this.setProperties({ value: this.getIdValue(e, null) }, true);\n }\n }\n var storeView = this.currentView();\n _super.prototype.clickHandler.call(this, e, this.value);\n if (this.isMultiSelection && this.currentDate !== this.value &&\n !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0]) && storeView === 'Year') {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n };\n Calendar.prototype.switchView = function (view, e) {\n _super.prototype.switchView.call(this, view, e, this.isMultiSelection);\n };\n /**\n * To get component name\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n _super.prototype.getModuleName.call(this);\n return 'calendar';\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n Calendar.prototype.getPersistData = function () {\n _super.prototype.getPersistData.call(this);\n var keyEntity = ['value', 'values'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: new Date('' + newProp.value) }, true);\n }\n else {\n newProp.value = new Date('' + newProp.value);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.update();\n break;\n case 'values':\n if (typeof newProp.values === 'string' || typeof newProp.values === 'number') {\n this.setProperties({ values: null }, true);\n }\n else {\n var copyValues = this.copyValues(this.values);\n for (var index = 0; index < copyValues.length; index++) {\n var tempDate = copyValues[index];\n if (this.checkDateValue(tempDate) && !_super.prototype.checkPresentDate.call(this, tempDate, copyValues)) {\n copyValues.push(tempDate);\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.values.length > 0) {\n this.setProperties({ value: newProp.values[newProp.values.length - 1] }, true);\n }\n }\n this.validateValues(this.isMultiSelection, this.values);\n this.update();\n break;\n case 'isMultiSelection':\n this.setProperties({ isMultiSelection: newProp.isMultiSelection }, true);\n this.update();\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp, this.isMultiSelection, this.values);\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Calendar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n Calendar.prototype.navigateTo = function (view, date) {\n this.minMaxUpdate();\n _super.prototype.navigateTo.call(this, view, date);\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n */\n Calendar.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /**\n * This method is used to add the single or multiple dates to the values property of the Calendar.\n * @param {Date || Date[]} dates - Specifies the date or dates to be added to the values property of the Calendar.\n * @returns void\n */\n Calendar.prototype.addDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number') {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && (dates).length > 0) {\n var tempDates = dates;\n for (var i = 0; i < tempDates.length; i++) {\n if (this.checkDateValue(tempDates[i]) && !_super.prototype.checkPresentDate.call(this, tempDates[i], copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push(tempDates[i]);\n }\n else {\n copyValues = [new Date(+tempDates[i])];\n }\n }\n }\n }\n else {\n if (this.checkDateValue(dates) && !_super.prototype.checkPresentDate.call(this, dates, copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push((dates));\n }\n else {\n copyValues = [new Date(+dates)];\n }\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.validateValues(this.isMultiSelection, copyValues);\n this.update();\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * This method is used to remove the single or multiple dates from the values property of the Calendar.\n * @param {Date || Date[]} dates - Specifies the date or dates which need to be removed from the values property of the Calendar.\n * @returns void\n */\n Calendar.prototype.removeDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && ((dates).length > 0)) {\n var tempDates = dates;\n for (var index = 0; index < tempDates.length; index++) {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +tempDates[index]) {\n copyValues.splice(i, 1);\n }\n }\n }\n }\n else {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +dates) {\n copyValues.splice(i, 1);\n }\n }\n }\n this.setProperties({ values: copyValues }, false);\n this.update();\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n Calendar.prototype.update = function () {\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.isMultiSelection, this.values);\n if (this.isMultiSelection && !isNullOrUndefined(this.values) && this.values.length > 0) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler(e);\n };\n Calendar.prototype.changeEvent = function (e) {\n this.trigger('change', this.changedArgs);\n this.previousDate = new Date(+this.value);\n };\n Calendar.prototype.triggerChange = function (e) {\n this.changedArgs.event = e || null;\n this.changedArgs.isInteracted = !isNullOrUndefined(e);\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n if (!this.isMultiSelection && +this.value !== Number.NaN && +this.value !== +this.previousDate) {\n this.changeEvent(e);\n }\n else if (!isNullOrUndefined(this.values) && this.previousValues !== this.values.length) {\n this.changeEvent(e);\n this.previousValues = this.values.length;\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Calendar.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(CalendarBase));\nexport { Calendar };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, Event, append, compile } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n ], Animation.prototype, \"open\", void 0);\n __decorate([\n Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n ], Animation.prototype, \"close\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n *
Show Tooltip
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the Tooltip Component\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n Tooltip.prototype.initialize = function () {\n this.formatPosition();\n addClass([this.element], ROOT);\n };\n Tooltip.prototype.formatPosition = function () {\n var _a, _b;\n if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n }\n else {\n _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n }\n };\n Tooltip.prototype.renderArrow = function () {\n this.setTipClass(this.position);\n var tip = this.createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n this.tooltipEle.appendChild(tip);\n };\n Tooltip.prototype.setTipClass = function (position) {\n if (position.indexOf('Right') === 0) {\n this.tipClass = TIP_LEFT;\n }\n else if (position.indexOf('Bottom') === 0) {\n this.tipClass = TIP_TOP;\n }\n else if (position.indexOf('Left') === 0) {\n this.tipClass = TIP_RIGHT;\n }\n else {\n this.tipClass = TIP_BOTTOM;\n }\n };\n Tooltip.prototype.renderPopup = function (target) {\n var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n this.popupObj = new Popup(this.tooltipEle, {\n height: this.height,\n width: this.width,\n position: {\n X: elePos.left,\n Y: elePos.top\n },\n enableRtl: this.enableRtl,\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this)\n });\n };\n Tooltip.prototype.getTooltipPosition = function (target) {\n this.tooltipEle.style.display = 'none';\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\n this.tooltipEle.style.display = '';\n var offsetPos = this.calculateTooltipOffset(this.position);\n var elePos = this.collisionFlipFit(target, pos.left + offsetPos.left, pos.top + offsetPos.top);\n return elePos;\n };\n Tooltip.prototype.reposition = function (target) {\n var elePos = this.getTooltipPosition(target);\n this.popupObj.position = { X: elePos.left, Y: elePos.top };\n this.popupObj.dataBind();\n };\n Tooltip.prototype.openPopupHandler = function () {\n this.trigger('afterOpen', this.tooltipEventArgs);\n };\n Tooltip.prototype.closePopupHandler = function () {\n this.clear();\n this.trigger('afterClose', this.tooltipEventArgs);\n };\n Tooltip.prototype.calculateTooltipOffset = function (position) {\n var pos = { top: 0, left: 0 };\n var tooltipEleWidth = this.tooltipEle.offsetWidth;\n var tooltipEleHeight = this.tooltipEle.offsetHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n var tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n var tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n var tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n var tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n if (this.mouseTrail) {\n tipAdjust += MOUSE_TRAIL_GAP;\n }\n switch (position) {\n case 'RightTop':\n pos.left += tipWidth + tipAdjust;\n pos.top -= tooltipEleHeight - tipHeightAdjust;\n break;\n case 'RightCenter':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'RightBottom':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tipHeightAdjust);\n break;\n case 'BottomRight':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n case 'BottomCenter':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n case 'BottomLeft':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'LeftBottom':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tipHeightAdjust);\n break;\n case 'LeftCenter':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'LeftTop':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight - tipHeightAdjust);\n break;\n case 'TopLeft':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'TopRight':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n default:\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n }\n pos.left += this.offsetX;\n pos.top += this.offsetY;\n return pos;\n };\n Tooltip.prototype.updateTipPosition = function (position) {\n var selEle = this.tooltipEle.querySelectorAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER);\n var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n removeClass(selEle, removeList);\n this.setTipClass(position);\n addClass(selEle, this.tipClass);\n };\n Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n if (this.showTipPointer === false) {\n return;\n }\n this.updateTipPosition(position);\n var leftValue;\n var topValue;\n var tooltipWidth = this.tooltipEle.clientWidth;\n var tooltipHeight = this.tooltipEle.clientHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n var tipWidth = arrowEle.offsetWidth;\n var tipHeight = arrowEle.offsetHeight;\n if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n if (this.tipClass === TIP_BOTTOM) {\n topValue = '99.9%';\n // Arrow icon aligned -2px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n }\n else {\n topValue = -(tipHeight - 1) + 'px';\n // Arrow icon aligned -6px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n }\n var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n leftValue = POINTER_ADJUST + 'px';\n }\n else {\n leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n }\n }\n else {\n if (this.tipClass === TIP_RIGHT) {\n leftValue = '99.9%';\n // Arrow icon aligned -2px left from ArrowOuterTip div\n arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n }\n else {\n leftValue = -(tipWidth - 1) + 'px';\n // Arrow icon aligned -2px from ArrowOuterTip width\n arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n }\n var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n topValue = POINTER_ADJUST + 'px';\n }\n else {\n topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n }\n }\n arrowEle.style.top = topValue;\n arrowEle.style.left = leftValue;\n };\n Tooltip.prototype.renderContent = function (target) {\n var tooltipContent = this.tooltipEle.querySelector('.' + CONTENT);\n if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n target.setAttribute('data-content', target.getAttribute('title'));\n target.removeAttribute('title');\n }\n if (!isNullOrUndefined(this.content)) {\n tooltipContent.innerHTML = '';\n if (this.content instanceof HTMLElement) {\n tooltipContent.appendChild(this.content);\n }\n else if (typeof this.content === 'string') {\n tooltipContent.innerHTML = this.content;\n }\n else {\n var templateFunction = compile(this.content);\n append(templateFunction(), tooltipContent);\n }\n }\n else {\n if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n tooltipContent.innerHTML = target.getAttribute('data-content');\n }\n }\n };\n Tooltip.prototype.renderCloseIcon = function () {\n if (!this.isSticky) {\n return;\n }\n var tipClose = this.createElement('div', { className: ICON + ' ' + CLOSE });\n this.tooltipEle.appendChild(tipClose);\n EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n };\n Tooltip.prototype.addDescribedBy = function (target, id) {\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n if (describedby.indexOf(id) < 0) {\n describedby.push(id);\n }\n attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\n };\n Tooltip.prototype.removeDescribedBy = function (target) {\n var id = target.getAttribute('data-tooltip-id');\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n var index = describedby.indexOf(id);\n if (index !== -1) {\n describedby.splice(index, 1);\n }\n target.removeAttribute('data-tooltip-id');\n var orgdescribedby = describedby.join(' ').trim();\n if (orgdescribedby) {\n target.setAttribute('aria-describedby', orgdescribedby);\n }\n else {\n target.removeAttribute('aria-describedby');\n }\n };\n Tooltip.prototype.tapHoldHandler = function (evt) {\n clearTimeout(this.autoCloseTimer);\n this.targetHover(evt.originalEvent);\n };\n Tooltip.prototype.touchEndHandler = function (e) {\n var _this = this;\n if (this.isSticky) {\n return;\n }\n var close = function () {\n _this.close();\n };\n this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n };\n Tooltip.prototype.targetClick = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n if (target.getAttribute('data-tooltip-id') === null) {\n this.targetHover(e);\n }\n else if (!this.isSticky) {\n this.hideTooltip(this.animation.close, e, target);\n }\n };\n Tooltip.prototype.targetHover = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target) || target.getAttribute('data-tooltip-id') !== null) {\n return;\n }\n var targetList = [].slice.call(document.querySelectorAll('[data-tooltip-id= ' + this.ctrlId + '_content]'));\n for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n var target_1 = targetList_1[_i];\n this.restoreElement(target_1);\n }\n this.showTooltip(target, this.animation.open, e);\n this.wireMouseEvents(e, target);\n };\n Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n var _this = this;\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeRender', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n this.isHidden = false;\n if (isNullOrUndefined(this.tooltipEle)) {\n this.ctrlId = this.element.getAttribute('id') ? getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n this.tooltipEle = this.createElement('div', {\n className: TOOLTIP_WRAP + ' ' + POPUP_ROOT, attrs: {\n role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n }, styles: 'width:' + formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n });\n if (this.cssClass) {\n addClass([this.tooltipEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n addClass([this.tooltipEle], DEVICE);\n }\n if (this.width !== 'auto') {\n this.tooltipEle.style.maxWidth = formatUnit(this.width);\n }\n this.tooltipEle.appendChild(this.createElement('div', { className: CONTENT }));\n document.body.appendChild(this.tooltipEle);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n addClass([this.tooltipEle], POPUP_OPEN);\n if (this.showTipPointer) {\n this.renderArrow();\n }\n this.renderCloseIcon();\n this.renderPopup(target);\n }\n else {\n this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n PopupAnimation.stop(this.tooltipEle);\n this.reposition(target);\n }\n removeClass([this.tooltipEle], POPUP_OPEN);\n addClass([this.tooltipEle], POPUP_CLOSE);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeOpen', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n var openAnimation = {\n name: showAnimation.effect, duration: showAnimation.duration, delay: showAnimation.delay, timingFunction: 'easeOut'\n };\n if (showAnimation.effect === 'None') {\n openAnimation = undefined;\n }\n if (this.openDelay > 0) {\n var show = function () {\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation, target);\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n this.popupObj.show(openAnimation, target);\n }\n };\n Tooltip.prototype.checkCollision = function (target, x, y) {\n var elePos = {\n left: x, top: y, position: this.position,\n horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n };\n var affectedPos = isCollide(this.tooltipEle, (this.target ? this.element : null), x, y);\n if (affectedPos.length > 0) {\n elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n this.tooltipPositionX;\n elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n this.tooltipPositionY;\n }\n return elePos;\n };\n Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n var elePos = this.checkCollision(target, x, y);\n var newpos = elePos.position;\n if (this.tooltipPositionY !== elePos.vertical) {\n newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n }\n if (this.tooltipPositionX !== elePos.horizontal) {\n if (newpos.indexOf('Left') === 0) {\n elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Left');\n }\n if (newpos.indexOf('Right') === 0) {\n elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Right');\n }\n elePos.horizontal = this.tooltipPositionX;\n }\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null,\n element: this.tooltipEle, collidedPosition: newpos\n };\n this.trigger('beforeCollision', this.tooltipEventArgs);\n if (elePos.position !== newpos) {\n var pos = calculatePosition(target, this.tooltipPositionX, elePos.vertical);\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n var offsetPos = this.calculateTooltipOffset(newpos);\n elePos.position = newpos;\n elePos.left = pos.left + offsetPos.left;\n elePos.top = pos.top + offsetPos.top;\n }\n else {\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n }\n var eleOffset = { left: elePos.left, top: elePos.top };\n var left = fit(this.tooltipEle, (this.target ? this.element : null), { X: true, Y: false }, eleOffset).left;\n if (this.showTipPointer && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowleft = parseInt(arrowEle.style.left, 10) - (left - elePos.left);\n if (arrowleft < 0) {\n arrowleft = 0;\n }\n else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n }\n arrowEle.style.left = arrowleft.toString() + 'px';\n }\n eleOffset.left = left;\n return eleOffset;\n };\n Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n var _this = this;\n var target;\n if (e) {\n target = this.target ? (targetElement || e.target) : this.element;\n this.tooltipEventArgs = {\n type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle\n };\n }\n else {\n target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null, element: this.tooltipEle\n };\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n this.trigger('beforeClose', this.tooltipEventArgs);\n if (!this.tooltipEventArgs.cancel) {\n this.restoreElement(target);\n this.isHidden = true;\n var closeAnimation_1 = {\n name: hideAnimation.effect, duration: hideAnimation.duration, delay: hideAnimation.delay, timingFunction: 'easeIn'\n };\n if (hideAnimation.effect === 'None') {\n closeAnimation_1 = undefined;\n }\n if (this.closeDelay > 0) {\n var hide = function () {\n if (_this.popupObj) {\n _this.popupObj.hide(closeAnimation_1);\n }\n };\n this.hideTimer = setTimeout(hide, this.closeDelay);\n }\n else {\n this.popupObj.hide(closeAnimation_1);\n }\n }\n else {\n this.isHidden = false;\n }\n };\n Tooltip.prototype.restoreElement = function (target) {\n this.unwireMouseEvents(target);\n if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n target.setAttribute('title', target.getAttribute('data-content'));\n target.removeAttribute('data-content');\n }\n this.removeDescribedBy(target);\n };\n Tooltip.prototype.clear = function () {\n if (this.tooltipEle) {\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n }\n if (this.isHidden) {\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n }\n };\n Tooltip.prototype.onMouseOut = function (e) {\n this.hideTooltip(this.animation.close, e);\n };\n Tooltip.prototype.onStickyClose = function (e) {\n this.close();\n };\n Tooltip.prototype.onMouseMove = function (event) {\n var eventPageX = 0;\n var eventPageY = 0;\n if (event.type.indexOf('touch') > -1) {\n event.preventDefault();\n eventPageX = event.touches[0].pageX;\n eventPageY = event.touches[0].pageY;\n }\n else {\n eventPageX = event.pageX;\n eventPageY = event.pageY;\n }\n PopupAnimation.stop(this.tooltipEle);\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n var pos = this.calculateTooltipOffset(this.position);\n var x = eventPageX + pos.left + this.offsetX;\n var y = eventPageY + pos.top + this.offsetY;\n var elePos = this.checkCollision(event.target, x, y);\n if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n elePos.position = newpos;\n this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n var colpos = this.calculateTooltipOffset(elePos.position);\n elePos.left = eventPageX + colpos.left - this.offsetX;\n elePos.top = eventPageY + colpos.top - this.offsetY;\n }\n this.tooltipEle.style.left = elePos.left + 'px';\n this.tooltipEle.style.top = elePos.top + 'px';\n };\n Tooltip.prototype.keyDown = function (event) {\n if (this.tooltipEle && event.keyCode === 27) {\n this.close();\n }\n };\n Tooltip.prototype.touchEnd = function (e) {\n if (this.tooltipEle && closest(e.target, '.' + ROOT) === null) {\n this.close();\n }\n };\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle) {\n this.close();\n }\n };\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Tooltip.prototype.render = function () {\n this.initialize();\n this.wireEvents(this.opensOn);\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Tooltip.prototype.preRender = function () {\n this.tipClass = TIP_BOTTOM;\n this.tooltipPositionX = 'Center';\n this.tooltipPositionY = 'Top';\n this.isHidden = true;\n };\n /**\n * Binding events to the Tooltip element.\n * @hidden\n */\n Tooltip.prototype.wireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n var opensOn = triggerList_1[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.wireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n this.touchModule = new Touch(this.element, {\n tapHoldThreshold: TAPHOLD_THRESHOLD,\n tapHold: this.tapHoldHandler.bind(this)\n });\n EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n }\n else {\n EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n }\n }\n }\n EventHandler.add(document, 'touchend', this.touchEnd, this);\n EventHandler.add(document, 'scroll', this.scrollHandler, this);\n EventHandler.add(document, 'keydown', this.keyDown, this);\n };\n Tooltip.prototype.getTriggerList = function (trigger) {\n if (trigger === 'Auto') {\n trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n }\n return trigger.split(' ');\n };\n Tooltip.prototype.wireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n var target = targetList_2[_i];\n EventHandler.add(target, 'focus', this.targetHover, this);\n }\n }\n else {\n EventHandler.add(this.element, 'focus', this.targetHover, this);\n }\n };\n Tooltip.prototype.wireMouseEvents = function (e, target) {\n if (this.tooltipEle) {\n if (!this.isSticky) {\n if (e.type === 'focus') {\n EventHandler.add(target, 'blur', this.onMouseOut, this);\n }\n if (e.type === 'mouseover') {\n EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n }\n if (this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Tooltip.prototype.unwireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n var opensOn = triggerList_2[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.unwireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n if (this.touchModule) {\n this.touchModule.destroy();\n }\n EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n }\n else {\n EventHandler.remove(this.element, 'mouseover', this.targetHover);\n }\n }\n }\n EventHandler.remove(document, 'touchend', this.touchEnd);\n EventHandler.remove(document, 'scroll', this.scrollHandler);\n EventHandler.remove(document, 'keydown', this.keyDown);\n };\n Tooltip.prototype.unwireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n var target = targetList_3[_i];\n EventHandler.remove(target, 'focus', this.targetHover);\n }\n }\n else {\n EventHandler.remove(this.element, 'focus', this.targetHover);\n }\n };\n Tooltip.prototype.unwireMouseEvents = function (target) {\n if (!this.isSticky) {\n var triggerList = this.getTriggerList(this.opensOn);\n for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n var opensOn = triggerList_3[_i];\n if (opensOn === 'Focus') {\n EventHandler.remove(target, 'blur', this.onMouseOut);\n }\n if (opensOn === 'Hover' && !Browser.isDevice) {\n EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\n }\n }\n if (this.mouseTrail) {\n EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n }\n };\n Tooltip.prototype.findTarget = function () {\n var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n return target;\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n var targetElement = this.findTarget();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.width = formatUnit(newProp.width);\n this.reposition(targetElement);\n }\n break;\n case 'height':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n this.reposition(targetElement);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n this.renderContent();\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n if (this.tooltipEle && targetElement) {\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n this.reposition(targetElement);\n }\n break;\n case 'tipPointerPosition':\n if (this.tooltipEle && targetElement) {\n this.reposition(targetElement);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n * @param element Target element where the Tooltip is to be displayed.\n * @param animation Sets the specific animation, while showing the Tooltip on the screen.\n * @return {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (animation === void 0) { animation = this.animation.open; }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n * @param animation Sets the specific animation when hiding Tooltip from the screen.\n * @return {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (animation === void 0) { animation = this.animation.close; }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n * @param target Target element where the Tooltip content or position needs to be refreshed.\n * @return {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n };\n /**\n * It is used to destroy the Tooltip component.\n * @method destroy\n * @return {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","import { createElement, attributes, addClass, removeClass, detach, classList, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n * @param args\n */\n function createInput(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group')) {\n parent.classList.remove('e-input-focus');\n }\n });\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) && args.properties.showClearButton) {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons)) {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n inputObject = setPropertyValue(args, inputObject);\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if (parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputElement;\n var floatLinelement;\n var floatLabelElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerHTML = args.element.placeholder;\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerHTML = args.properties.placeholder;\n }\n if (!floatLabelElement.innerHTML) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = element.parentNode;\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n function wireClearBtnEvents(element, button, container) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('blur', function (event) {\n setTimeout(function () { addClass([button], CLASSNAMES.CLEARICONHIDE); }, 200);\n });\n }\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n * @param value - Specify the value of the input element.\n * @param element - The element on which the specified value is updated.\n * @param floatLabelType - Specify the float label type of the input element.\n * @param clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (element.value && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n * @param cssClass - Css class names which are needed to add.\n * @param elements - The elements which are needed to add / remove classes.\n * @param oldClass - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n * @param placeholder - Placeholder value which is need to add.\n * @param element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n var parentElement;\n parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n * @param isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n * @param isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n * @param isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n inputObject.clearButton.remove();\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n * @param attrs\n * - Array of attributes which are need to removed from the element.\n * @param element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n * @param attrs\n * - Array of attributes which is added to element.\n * @param element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton) {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type, customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n if (isNullOrUndefined(iconEle)) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n container.insertBefore(input, iconEle);\n container.insertBefore(floatLine, iconEle);\n container.insertBefore(floatText, iconEle);\n }\n }\n }\n Input.addFloating = addFloating;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n * @param isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param inputObject\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[i].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n var ele = this;\n setTimeout(function () { ele.classList.remove('e-input-btn-ripple'); }, 500);\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n * @param iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n container.appendChild(button);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n})(Input || (Input = {}));\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n function NumericTextBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT]);\n this.angularTagName = null;\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off', 'aria-live': 'assertive' });\n var localeText = { incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: '' };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.checkAttributes();\n this.prevValue = this.value;\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n if (!isNullOrUndefined(this.width)) {\n setStyleAttribute(this.container, { 'width': formatUnit(this.width) });\n }\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ? null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n }\n };\n NumericTextBox.prototype.checkAttributes = function () {\n var attributes = ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'readonly':\n var readonly = this.element.getAttribute(prop) === 'readonly'\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'hidden', 'validateHidden': 'true' } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide'))) {\n this.clear(e);\n }\n };\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var ignoreKeyCode = void 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function (event) {\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n };\n ;\n NumericTextBox.prototype.inputHandler = function (event) {\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n };\n ;\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n ;\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n ;\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var valueText = value.toString();\n var stepText = step.toString();\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n ;\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n ;\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = void 0;\n var decimalPart = value.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n ;\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = value;\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n ;\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals;\n var currentValue = this.value;\n var decimalPart = currentValue.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n ;\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n ;\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n ;\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n return true;\n }\n };\n ;\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n ;\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusIn = function (event) {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n ;\n NumericTextBox.prototype.focusOut = function (event) {\n var _this = this;\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n ;\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () { _this.isCalled = true; _this.action(action, event); }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target = document.elementFromPoint(event.clientX, event.clientY);\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n this.container.parentElement.appendChild(this.cloneElement);\n detach(this.container);\n _super.prototype.destroy.call(this);\n };\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var elementVal;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.container, { 'width': formatUnit(newProp.width) });\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.container], oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.updateValue(newProp.value);\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n break;\n case 'currencyCode':\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { selectAll, select, createElement, Base } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// tslint:disable-next-line:no-any\nexport var regex = {\n EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,5}' +\n '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n URL: new RegExp('^((ftp|http|https):\\/\\/)?www\\.([A-z]{2,})\\.([A-z]{2,})$'),\n DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n DIGITS: new RegExp('^[0-9]*$'),\n PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n CREDITCARD: new RegExp('^\\\\d{13,16}$')\n};\n/**\n * ErrorOption values\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n *
\n * \n * \n *
\n * \n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n // Initializes the FormValidator \n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n /**\n * Specifies the default messages for validation rules.\n * @default : { List of validation message };\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text',\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @return {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[name], rules, {});\n }\n else {\n this.rules[name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @return {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[name] && !rules) {\n delete this.rules[name];\n }\n else if (!isNullOrUndefined(this.rules[name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[name][rules[i]];\n }\n }\n else {\n return;\n }\n };\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n * @param {string} selected - Optional parameter to validate specified element.\n * @return {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n this.errorRules = [];\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /**\n * Reset the value of all the fields in form.\n * @return {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /**\n * Get input element by name.\n * @param {string} name - Input element name attribute value.\n * @return {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=' + name + ']', this.element));\n return this.inputElement;\n };\n /**\n * Destroy the form validator object and error elements.\n * @return {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n element.remove();\n }\n _super.prototype.destroy.call(this);\n };\n /**\n * @private\n */\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n /**\n * @private\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules \n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n break;\n case 'equalto':\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n ruleCon[ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[name]) {\n return;\n }\n var rules = Object.keys(this.rules[name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[name][rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[name][rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[name][rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=' + name + ']:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[rule](args);\n }\n };\n // Return default error message or custom error message \n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] : this.defaultMessages[rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[i] : ruleValue;\n message = message.replace(formats[i], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = this.element.querySelector('#' + containerId);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element);\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[i];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n var FormValidator_1;\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return option.value.length > 0;\n },\n email: function (option) {\n return regex.EMAIL.test(option.value);\n },\n url: function (option) {\n return regex.URL.test(option.value);\n },\n dateIso: function (option) {\n return regex.DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return regex.PHONE.test(option.value);\n },\n creditcard: function (option) {\n return regex.CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return regex.DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n return !isNaN(new Date(option.value).getTime());\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n regex: function (option) {\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n },\n };\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n}(Base));\nexport { FormValidator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Event, Property, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, setValue, addClass, detach } from '@syncfusion/ej2-base';\nimport { removeClass, Browser } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nimport { regularExpressions, createMask, applyMask, wireEvents, unwireEvents, unstrippedValue, strippedValue } from '../base/index';\nimport { setMaskValue, setElementValue, bindClearEvent } from '../base/index';\nimport { maskInputBlurHandler } from '../base/mask-base';\nvar ROOT = 'e-widget e-control-wrapper e-mask';\nvar INPUT = 'e-input';\nvar COMPONENT = 'e-maskedtextbox';\nvar CONTROL = 'e-control';\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n function MaskedTextBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Gets the component name\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\n * @private\n */\n MaskedTextBox.prototype.preRender = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.regExpCollec = regularExpressions;\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n this.changeEventArgs = {};\n this.focusEventArgs = {};\n this.maskKeyPress = false;\n this.isFocus = false;\n this.isInitial = false;\n this.isIosInvalid = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT]);\n this.angularTagName = null;\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n for (var i = 0; i < this.element.attributes.length; i++) {\n input.setAttribute(this.element.attributes[i].nodeName, this.element.attributes[i].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-maskedtextbox');\n this.element.classList.add('e-mask-container');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initializes the component rendering.\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n if (this.floatLabelType === 'Never') {\n addClass([this.element], INPUT);\n }\n this.createWrapper();\n if (this.element.name === '') {\n this.element.setAttribute('name', this.element.id);\n }\n this.isInitial = true;\n this.resetMaskedTextBox();\n this.isInitial = false;\n this.setMaskPlaceholder(true, false);\n this.setWidth(this.width);\n this.preEleVal = this.element.value;\n if (!Browser.isDevice && (Browser.info.version === '11.0' || Browser.info.name === 'edge')) {\n this.element.blur();\n }\n }\n };\n MaskedTextBox.prototype.resetMaskedTextBox = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n if (this.promptChar.length > 1) {\n this.promptChar = this.promptChar[0];\n }\n createMask.call(this);\n applyMask.call(this);\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (!this.isInitial) {\n unwireEvents.call(this);\n }\n wireEvents.call(this);\n };\n MaskedTextBox.prototype.setMaskPlaceholder = function (setVal, dynamicPlaceholder) {\n if (dynamicPlaceholder || this.placeholder) {\n Input.setPlaceholder(this.placeholder, this.element);\n if (this.element.value === this.promptMask && setVal && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n }\n if (this.floatLabelType === 'Never') {\n maskInputBlurHandler.call(this);\n }\n }\n };\n MaskedTextBox.prototype.setCssClass = function (cssClass, element) {\n if (cssClass) {\n addClass(element, cssClass);\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n this.element.style.width = formatUnit(width);\n this.inputObj.container.style.width = formatUnit(width);\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n this.inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n cssClass: this.cssClass,\n enabled: this.enabled,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('class', ROOT + ' ' + this.inputObj.container.getAttribute('class'));\n };\n /**\n * Calls internally if any of the property value is changed.\n * @hidden\n */\n MaskedTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n setMaskValue.call(this, this.value);\n if (this.placeholder) {\n this.setMaskPlaceholder(false, false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'cssClass':\n this.setCssClass(newProp.cssClass, [this.inputObj.container]);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.inputObj.container]);\n break;\n case 'customCharacters':\n this.customCharacters = newProp.customCharacters;\n this.resetMaskedTextBox();\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputObj, undefined, this.createElement);\n bindClearEvent.call(this);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputObj);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'mask':\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\n break;\n case 'promptChar':\n if (newProp.promptChar.length > 1) {\n newProp.promptChar = newProp.promptChar[0];\n }\n if (newProp.promptChar) {\n this.promptChar = newProp.promptChar;\n }\n else {\n this.promptChar = '_';\n }\n var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\n this.promptMask = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n this.undoCollec = this.redoCollec = [];\n setElementValue.call(this, value);\n break;\n }\n }\n };\n MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n * @return {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n this.inputObj.container.parentElement.appendChild(this.cloneElement);\n detach(this.inputObj.container);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], MaskedTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(true)\n ], MaskedTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"mask\", void 0);\n __decorate([\n Property('_')\n ], MaskedTextBox.prototype, \"promptChar\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"customCharacters\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"focus\", void 0);\n MaskedTextBox = __decorate([\n NotifyPropertyChanges\n ], MaskedTextBox);\n return MaskedTextBox;\n}(Component));\nexport { MaskedTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the limit data in slider.\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n ;\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n ;\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n ;\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Slider.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Always') {\n tooltipElement.forEach(function (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderDisabled);\n });\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Always') {\n tooltipElement.forEach(function (tooltipElement) {\n tooltipElement.classList.remove(classNames.sliderDisabled);\n });\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.element.tabIndex = -1;\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap';\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', 'aria-labelledby': this.element.id + '_title', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.secondMaterialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.secondMaterialHandle);\n }\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', 'aria-labelledby': this.element.id + '_title', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.firstMaterialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.firstMaterialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (pos === 0 && this.type !== 'Range') {\n this.getHandle().classList.add(classNames.sliderHandleStart);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.firstMaterialHandle.classList.add(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n this.handleStart();\n this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.tooltip.isVisible) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (!this.isMaterial) {\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.tooltipAnimation();\n }\n else {\n if (!tooltipElement.classList.contains(classNames.materialTooltipOpen) && e.propertyName !== 'transform') {\n this.openMaterialTooltip();\n }\n else {\n if (this.type === 'Default') {\n tooltipElement.style.transition = this.transition.handle;\n }\n this.refreshTooltip();\n }\n }\n }\n if (this.tooltip.showOn !== 'Always') {\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n }\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipValue();\n var tooltipObj = e.currentTarget === this.firstHandle ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n if (e.currentTarget === this.firstHandle) {\n this.firstTooltipObj.open(this.firstHandle);\n }\n else {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.tooltipValue();\n var tooltipObj = e.currentTarget === this.firstHandle ? this.firstTooltipObj : this.secondTooltipObj;\n if (e.currentTarget === this.firstHandle) {\n this.firstTooltipObj.close();\n }\n else {\n this.secondTooltipObj.close();\n }\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n }\n };\n Slider.prototype.setHandler = function () {\n if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n };\n Slider.prototype.tooltipValue = function () {\n var text;\n var value1;\n var value2;\n var args = {\n value: this.value,\n text: ''\n };\n this.setTooltipContent();\n args.text = text = this.firstTooltipObj.content;\n this.trigger('tooltipChange', args);\n this.addTooltipClass(args.text);\n if (text !== args.text) {\n this.customAriaText = args.text;\n this.firstTooltipObj.content = args.text;\n this.setAriaAttrValue(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.content = args.text;\n this.setAriaAttrValue(this.secondHandle);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n if (this.type === 'Range') {\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content;\n this.secondTooltipObj.content = content;\n }\n else {\n if (!isNullOrUndefined(this.handleVal1)) {\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content;\n }\n }\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n var _this = this;\n if (this.isMaterial && this.tooltip.isVisible) {\n var count_1 = content.toString().length;\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n tooltipElement.forEach(function (element, index) {\n if (!element) {\n var cssClass = count_1 > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n !index ? _this.firstTooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass :\n _this.secondTooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n if (count_1 > 4) {\n element.classList.remove(classNames.sliderMaterialDefault);\n if (!element.classList.contains(classNames.sliderMaterialRange)) {\n element.classList.add(classNames.sliderMaterialRange);\n element.style.transform = 'scale(1)';\n }\n }\n else {\n element.classList.remove(classNames.sliderMaterialRange);\n if (!element.classList.contains(classNames.sliderMaterialDefault)) {\n element.classList.add(classNames.sliderMaterialDefault);\n element.style.transform = _this.getTooltipTransformProperties(_this.previousTooltipClass).rotate;\n }\n }\n }\n });\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n var tooltipPosition;\n if (this.orientation === 'Horizontal') {\n this.tooltip.placement === 'Before' ? tooltipPosition = 'TopCenter' : tooltipPosition = 'BottomCenter';\n }\n else {\n this.tooltip.placement === 'Before' ? tooltipPosition = 'LeftCenter' : tooltipPosition = 'RightCenter';\n }\n this.firstTooltipObj.position = tooltipPosition;\n if (this.type === 'Range') {\n this.secondTooltipObj.position = tooltipPosition;\n }\n if (this.isMaterial) {\n this.firstTooltipObj.showTipPointer = true;\n this.setProperties({ tooltip: { showOn: 'Always' } }, true);\n this.firstTooltipObj.height = 30;\n if (this.type === 'Range') {\n this.secondTooltipObj.showTipPointer = true;\n this.secondTooltipObj.height = 30;\n }\n }\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n var tooltipElement = args.target === this.firstHandle ? this.firstTooltipElement = args.element :\n this.secondTooltipElement = args.element;\n if (this.tooltip.cssClass !== '') {\n addClass([tooltipElement], this.tooltip.cssClass.split(' '));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterial && this.tooltip.isVisible) {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n tooltipElement.firstChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n }\n if (this.isBootstrap) {\n switch (this.bootstrapCollisionArgs.collidedPosition) {\n case 'TopCenter':\n this.firstTooltipObj.setProperties({ 'offsetY': -(bootstrapTooltipOffset) }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetY': -(bootstrapTooltipOffset) }, false);\n }\n break;\n case 'BottomCenter':\n this.firstTooltipObj.setProperties({ 'offsetY': bootstrapTooltipOffset }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetY': bootstrapTooltipOffset }, false);\n }\n break;\n case 'LeftCenter':\n this.firstTooltipObj.setProperties({ 'offsetX': -(bootstrapTooltipOffset) }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetX': -(bootstrapTooltipOffset) }, false);\n }\n break;\n case 'RightCenter':\n this.firstTooltipObj.setProperties({ 'offsetX': bootstrapTooltipOffset }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetX': bootstrapTooltipOffset }, false);\n }\n break;\n default:\n break;\n }\n }\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterial && this.tooltip.isVisible) {\n if (!destroy) {\n EventHandler.add(this.firstTooltipElement, 'mousedown touchstart', this.sliderDown, this);\n if (this.type === 'Range') {\n EventHandler.add(this.secondTooltipElement, 'mousedown touchstart', this.sliderDown, this);\n }\n }\n else {\n EventHandler.remove(this.firstTooltipElement, 'mousedown touchstart', this.sliderDown);\n if (this.type === 'Range') {\n EventHandler.remove(this.secondTooltipElement, 'mousedown touchstart', this.sliderDown);\n }\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n if (this.firstTooltipElement) {\n var position = void 0;\n if (this.orientation === 'Horizontal') {\n position = (this.firstTooltipElement.clientHeight + 14) - (this.firstTooltipElement.clientHeight / 2);\n }\n else {\n position = (this.firstTooltipElement.clientWidth + 14) - (this.firstTooltipElement.clientWidth / 2);\n }\n var transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n return transformProperties;\n }\n return undefined;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n this.refreshTooltip();\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n var handle = this.activeHandle === 1 ? this.firstMaterialHandle : this.secondMaterialHandle;\n if (tooltipElement.firstChild.classList.contains(classNames.materialTooltipHide)) {\n tooltipElement.firstChild.classList.remove(classNames.materialTooltipHide);\n }\n tooltipElement.firstChild.classList.add(classNames.materialTooltipShow);\n this.getHandle().style.cursor = 'default';\n tooltipElement.style.transition = this.scaleTransform;\n tooltipElement.classList.add(classNames.materialTooltipOpen);\n handle.style.transform = 'scale(0)';\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = 'scale(1)';\n }\n else {\n tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipPosition = args.target === this.firstHandle ? this.firstHandleTooltipPosition :\n this.secondHandleTooltipPosition;\n if (this.isMaterial && (tooltipPosition === undefined || tooltipPosition !== args.collidedPosition)) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length < 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (args.target === this.firstHandle) {\n this.firstHandleTooltipPosition = args.collidedPosition;\n }\n else {\n this.secondHandleTooltipPosition = args.collidedPosition;\n }\n }\n this.bootstrapCollisionArgs = args;\n };\n Slider.prototype.renderTooltip = function () {\n if (this.tooltip.showOn === 'Auto') {\n this.setProperties({ tooltip: { showOn: 'Hover' } }, true);\n }\n var tooltipPointer = this.isBootstrap ? true : false;\n this.firstTooltipObj = new Tooltip({\n showTipPointer: tooltipPointer,\n cssClass: classNames.sliderTooltip,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n afterClose: this.tooltipAfterClose.bind(this)\n });\n this.firstTooltipObj.appendTo(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj = new Tooltip({\n showTipPointer: tooltipPointer,\n cssClass: classNames.sliderTooltip,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n afterClose: this.tooltipAfterClose.bind(this)\n });\n this.secondTooltipObj.appendTo(this.secondHandle);\n }\n this.tooltipPlacement();\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n if (this.isMaterial) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.firstTooltipObj.open(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n };\n Slider.prototype.tooltipAfterClose = function (args) {\n if (args.element === this.firstTooltipElement) {\n this.firstTooltipElement = undefined;\n }\n else {\n this.secondTooltipElement = undefined;\n }\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var buttonElement = args.target.parentElement;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (!tooltipElement && this.tooltip.isVisible) {\n this.openTooltip();\n }\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.refreshTooltipOnMove();\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed');\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n Slider.prototype.renderScale = function () {\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.tickesAlignment(orien, tickWidth);\n };\n Slider.prototype.tickesAlignment = function (orien, tickWidth) {\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n this.trigger('renderedTicks', eventArgs);\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n span.innerHTML = isNullOrUndefined(this.customValues) ? this.formatTicksValue(li, start) : start;\n };\n Slider.prototype.formatTicksValue = function (li, start) {\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs);\n li.setAttribute('title', eventArgs.text.toString());\n return eventArgs.text.toString();\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n var otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipAnimation();\n this.getHandle().focus();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipAnimation = function () {\n if (this.tooltip.isVisible) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (this.isMaterial) {\n !tooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() : this.refreshTooltip();\n }\n else {\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.openTooltip();\n }\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (this.tooltip.isVisible) {\n if (!this.isMaterial) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'None' } };\n }\n }\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal') {\n if (this.type === 'MinRange') {\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition();\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed');\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement && this.secondTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n this.secondTooltipElement.style.zIndex = (this.zIndex + 3) + '';\n }\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement && this.secondTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 3) + '';\n this.secondTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n }\n else if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setHandlePosition = function () {\n var _this = this;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n var val = (this.activeHandle === 1) ? this.handleVal1 : this.handleVal2;\n var handle;\n var tooltipElement;\n if (this.isMaterial && this.tooltip.isVisible) {\n tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n handle = [this.getHandle(), (this.activeHandle === 1 ? this.firstMaterialHandle : this.secondMaterialHandle)];\n }\n else {\n handle = [this.getHandle()];\n }\n if (this.tooltip.isVisible && pos === 0 && this.type !== 'Range') {\n handle[0].classList.add(classNames.sliderHandleStart);\n if (this.isMaterial) {\n handle[1].classList.add(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderTooltipStart);\n }\n }\n }\n else {\n handle[0].classList.remove(classNames.sliderHandleStart);\n if (this.tooltip.isVisible && this.isMaterial) {\n handle[1].classList.remove(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.remove(classNames.sliderTooltipStart);\n }\n }\n }\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change');\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n var temp = this.activeHandle;\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition();\n this.activeHandle = 2;\n this.setHandlePosition();\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value) {\n this.trigger(eventName, this.changeEventArgs(eventName));\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.trigger(eventName, this.changeEventArgs(eventName));\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName) {\n var eventArgs;\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.firstTooltipObj.content\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString))\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min > this.max) {\n this.min = this.max;\n }\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n Slider.prototype.onResize = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.firstMaterialHandle) {\n this.enableRtl ? this.firstMaterialHandle.style.right =\n this.handlePos1 + \"px\" : this.firstMaterialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.secondMaterialHandle) {\n this.enableRtl ? this.secondMaterialHandle.style.right =\n this.handlePos2 + \"px\" : this.secondMaterialHandle.style.left = this.handlePos2 + \"px\";\n }\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.firstMaterialHandle) {\n this.firstMaterialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.secondMaterialHandle) {\n this.secondMaterialHandle.style.bottom = this.handlePos2 + \"px\";\n }\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.renderScale();\n }\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition();\n }\n };\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.round = function (a) {\n var f = this.step.toString().split('.');\n return f[1] ? parseFloat(a.toFixed(f[1].length)) : Math.round(a);\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterial && this.tooltip.isVisible) {\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipAnimation();\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition();\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.refreshTooltipOnMove = function () {\n if (this.tooltip.isVisible) {\n this.tooltipValue();\n this.activeHandle === 1 ? this.firstTooltipObj.refresh(this.firstHandle) :\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n };\n Slider.prototype.sliderDown = function (event) {\n var _a, _b;\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.getHandle().focus();\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n else {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n }\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n var _a, _b;\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === this.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, this.min, 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition();\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !this.firstTooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !this.firstTooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n this.activeHandle = 2;\n this.setHandlePosition();\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !this.secondTooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !this.secondTooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function () {\n this.changeEvent('changed');\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n if (this.tooltip.isVisible) {\n if (this.tooltip.showOn !== 'Always') {\n this.closeTooltip();\n }\n if (!this.isMaterial) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'None' } };\n }\n }\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.tooltip.isVisible) {\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition();\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !tooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !tooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n this.changeEvent('changed');\n if (this.tooltip.isVisible) {\n if (this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.activeHandle = 1;\n this.firstTooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.closeTooltip();\n this.activeHandle = 2;\n this.secondTooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.closeTooltip();\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function () {\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n this.firstTooltipObj.refresh(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n }\n };\n Slider.prototype.openTooltip = function () {\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n if (this.isMaterial) {\n this.openMaterialTooltip();\n }\n else {\n if (this.activeHandle === 1) {\n this.firstTooltipObj.open(this.firstHandle);\n }\n else {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.onResize.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'mousedown touchstart', this.sliderDown, this);\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'mousedown touchstart', this.sliderDown);\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.getHandle().focus();\n this.tooltipAnimation();\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n }\n }\n this.changeEvent('changed');\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n var _this = this;\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n if (this.isMaterial && this.tooltip.isVisible) {\n var transformProperties_1 = this.getTooltipTransformProperties(this.previousTooltipClass);\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n var hiddenHandle_1 = this.type !== 'Range' ? [this.firstHandle] : [this.firstHandle, this.secondHandle];\n var handle_1 = this.type !== 'Range' ? [this.firstMaterialHandle] :\n [this.firstMaterialHandle, this.secondMaterialHandle];\n tooltipElement.forEach(function (tooltipElement, index) {\n if (tooltipElement) {\n tooltipElement.style.transition = _this.scaleTransform;\n tooltipElement.firstChild.classList.remove(classNames.materialTooltipShow);\n tooltipElement.firstChild.classList.add(classNames.materialTooltipHide);\n hiddenHandle_1[index].style.cursor = '-webkit-grab';\n hiddenHandle_1[index].style.cursor = 'grab';\n handle_1[index].style.transform = 'scale(1)';\n tooltipElement.classList.remove(classNames.materialTooltipOpen);\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = transformProperties_1.translate + ' ' + 'scale(0.01)';\n }\n else {\n tooltipElement.style.transform = transformProperties_1.translate + ' ' +\n transformProperties_1.rotate + ' ' + 'scale(0.01)';\n }\n setTimeout(function () { tooltipElement.style.transition = 'none'; }, 2500);\n }\n });\n }\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible) {\n this.tooltipValue();\n if (this.activeHandle === 1) {\n this.firstTooltipObj.close();\n }\n else {\n this.secondTooltipObj.close();\n }\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type) {\n if (this.isMaterial && this.firstMaterialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.firstMaterialHandle);\n this.firstTooltipElement = undefined;\n this.firstHandleTooltipPosition = undefined;\n if (this.secondMaterialHandle) {\n this.removeElement(this.secondMaterialHandle);\n this.secondTooltipElement = undefined;\n this.secondHandleTooltipPosition = undefined;\n }\n }\n if (this.tooltip.isVisible && this.isMaterial) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n this.removeElement(this.firstHandle);\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n }\n this.removeElement(this.rangeBar);\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.firstTooltipObj)) {\n this.firstTooltipObj.destroy();\n if (type === 'Range' && !isNullOrUndefined(this.secondTooltipObj)) {\n this.secondTooltipObj.destroy();\n }\n }\n if (this.limits.enabled && type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n }\n }\n if (type === 'Range') {\n if (this.limits.enabled) {\n if (!isNullOrUndefined(this.limitBarFirst) && !isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarFirst);\n this.removeElement(this.limitBarSecond);\n }\n }\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.updateConfig();\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.firstTooltipObj.refresh(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type);\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip();\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Prepares the slider for safe removal from the DOM.\n * Detaches all event handlers, attributes, and classes to avoid memory leaks.\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.firstTooltipObj.destroy();\n if (this.type === 'Range' && !isNullOrUndefined(this.secondTooltipObj)) {\n this.secondTooltipObj.destroy();\n }\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip();\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip();\n }\n break;\n case 'type':\n this.changeSliderType(oldProp.type);\n this.setZindex();\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.onResize();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValue':\n this.setValue();\n this.onResize();\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip();\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function () {\n this.changeSliderType(this.type);\n };\n /**\n * Gets the component name\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableRtl\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-uploader';\nvar CONTROL_WRAPPER = 'e-upload';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.fileList = [];\n _this.filesData = [];\n _this.uploadedFilesData = [];\n _this.isForm = false;\n _this.allTypes = false;\n _this.pausedData = [];\n _this.uploadMetaData = [];\n _this.tabIndex = '0';\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.setDropArea();\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'template':\n case 'autoUpload':\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n /* istanbul ignore next */\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (this.fileList[i].querySelector('.e-file-play-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('resume'));\n }\n if (this.fileList[i].querySelector('.e-file-remove-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n if (this.fileList[i].querySelector('.e-file-reload-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('retry'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.localizedTexts('Upload'));\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.localizedTexts('Clear'));\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createFileList(this.filesData);\n if (this.actionButtons) {\n this.removeActionButtons();\n this.renderActionButtons();\n this.checkActionButtonStatus();\n }\n }\n };\n Uploader.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n this.localeText = { Browse: 'Browse...', Clear: 'Clear', Upload: 'Upload',\n dropFilesHint: 'Or drop files here', invalidMaxFileSize: 'File size is too large',\n invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'Unable to remove file', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', abort: 'Abort', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file',\n pauseUpload: 'File upload paused', pause: 'Pause', resume: 'Resume', retry: 'Retry',\n fileUploadCancel: 'File upload canceled'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.checkHTMLAttributes();\n if (this.asyncSettings.saveUrl === '' && this.asyncSettings.removeUrl === '' && !this.autoUpload) {\n var parentEle = this.element.parentElement;\n for (; parentEle && parentEle !== document.documentElement; parentEle = parentEle.parentElement) {\n if (parentEle.tagName === 'FORM') {\n this.isForm = true;\n this.formElement = parentEle;\n parentEle.setAttribute('enctype', 'multipart/form-data');\n parentEle.setAttribute('encoding', 'multipart/form-data');\n }\n }\n }\n // tslint:disable-next-line\n var ejInstance = getValue('ej2_instances', this.element);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-UPLOADER') {\n var inputElement = this.createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n /* istanbul ignore next */\n if (ejInstance[0].isPureReactComponent) {\n if (!isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.name);\n }\n else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.id);\n }\n else {\n this.element.setAttribute('name', 'UploadFiles');\n }\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.updateDirectoryAttributes();\n this.keyConfigs = {\n previous: 'shift+tab',\n enter: 'enter',\n next: 'tab'\n };\n if (this.element.hasAttribute('tabindex')) {\n this.tabIndex = this.element.getAttribute('tabindex');\n }\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Return the module name of the component.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n Uploader.prototype.updateDirectoryAttributes = function () {\n if (this.directoryUpload) {\n this.element.setAttribute('directory', 'true');\n this.element.setAttribute('webkitdirectory', 'true');\n }\n else {\n this.element.removeAttribute('directory');\n this.element.removeAttribute('webkitdirectory');\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = this.createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n this.browseButton.setAttribute('tabindex', this.tabIndex);\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n this.actionButtons = this.createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = this.createElement('button', { className: UPLOAD_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.clearButton = this.createElement('button', { className: CLEAR_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.actionButtons.appendChild(this.clearButton);\n this.actionButtons.appendChild(this.uploadButton);\n this.renderButtonTemplates();\n this.uploadWrapper.appendChild(this.actionButtons);\n this.browseButton.blur();\n this.uploadButton.focus();\n this.wireActionButtonEvents();\n };\n Uploader.prototype.wireActionButtonEvents = function () {\n EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n };\n Uploader.prototype.unwireActionButtonEvents = function () {\n EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n };\n Uploader.prototype.removeActionButtons = function () {\n if (this.actionButtons) {\n this.unwireActionButtonEvents();\n detach(this.actionButtons);\n this.actionButtons = null;\n }\n };\n Uploader.prototype.renderButtonTemplates = function () {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.innerHTML = '';\n this.browseButton.appendChild(this.buttons.browse);\n }\n if (this.uploadButton) {\n var uploadText = void 0;\n uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.innerText);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = void 0;\n clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.innerText);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n var fileDropArea = this.createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n this.uploadWrapper = this.createElement('div', { className: CONTROL_WRAPPER, attrs: { 'aria-activedescendant': 'li-focused' } });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (isNullOrUndefined(this.files[0].size) || !isNullOrUndefined(this.template)) {\n return;\n }\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && !this.isForm && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n document.querySelector(this.dropArea);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n }\n if (!enableDropText) {\n dropTextArea.textContent = '';\n }\n }\n else {\n this.dropZoneElement = this.uploadWrapper;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n this.bindDropEvents();\n };\n Uploader.prototype.setMultipleSelection = function () {\n if (this.multiple && !this.element.hasAttribute('multiple')) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n else if (!this.multiple) {\n this.element.removeAttribute('multiple');\n }\n };\n Uploader.prototype.checkAutoUpload = function (fileData) {\n if (this.autoUpload) {\n this.upload(fileData);\n this.removeActionButtons();\n }\n else if (!this.actionButtons) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.wireEvents = function () {\n EventHandler.add(this.browseButton, 'click', this.browseButtonClick, this);\n EventHandler.add(this.element, 'change', this.onSelectFiles, this);\n EventHandler.add(document, 'click', this.removeFocus, this);\n this.keyboardModule = new KeyboardEvents(this.uploadWrapper, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n };\n Uploader.prototype.unWireEvents = function () {\n EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n EventHandler.remove(this.element, 'change', this.onSelectFiles);\n EventHandler.remove(document, 'click', this.removeFocus);\n this.keyboardModule.destroy();\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n };\n Uploader.prototype.keyActionHandler = function (e) {\n var targetElement = e.target;\n switch (e.action) {\n case 'next':\n if (e.target === this.browseButton && isNullOrUndefined(this.listParent)) {\n this.browseButton.blur();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButton.blur();\n }\n else {\n this.setTabFocus(e);\n e.preventDefault();\n e.stopPropagation();\n if (e.target === this.clearButton && this.uploadButton.hasAttribute('disabled')) {\n this.clearButton.blur();\n }\n }\n break;\n case 'previous':\n if (e.target === this.browseButton) {\n this.browseButton.blur();\n }\n else {\n this.setReverseFocus(e);\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pauseUpload');\n this.abortUpload(metaData, false);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(this.getCurrentMetaData(null, e), e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n else {\n this.removeFiles(e);\n if (!targetElement.classList.contains(ABORT_ICON)) {\n this.browseButton.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n var fileData;\n var targetMetaData;\n if (isNullOrUndefined(fileInfo)) {\n var target = this.uploadWrapper.querySelector('.' + ICON_FOCUSED).parentElement;\n fileData = this.filesData[this.fileList.indexOf(target)];\n }\n else {\n fileData = fileInfo;\n }\n for (var i = 0; i < this.uploadMetaData.length; i++) {\n if (this.uploadMetaData[i].file.name === fileData.name) {\n targetMetaData = this.uploadMetaData[i];\n }\n }\n return targetMetaData;\n };\n Uploader.prototype.setReverseFocus = function (e) {\n var target = e.target;\n if (target === this.uploadButton) {\n this.uploadButton.blur();\n this.clearButton.focus();\n }\n else if (target === this.clearButton && this.listParent && this.listParent.querySelector('.e-icons')) {\n this.clearButton.blur();\n var items = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n items[items.length - 1].classList.add(ICON_FOCUSED);\n items[items.length - 1].focus();\n }\n else {\n var iconElements = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n var index = iconElements.indexOf(target);\n if (index > 0) {\n this.removeFocus();\n iconElements[index - 1].classList.add(ICON_FOCUSED);\n iconElements[index - 1].focus();\n }\n else {\n this.removeFocus();\n this.browseButton.focus();\n }\n }\n };\n Uploader.prototype.setTabFocus = function (e) {\n var target = e.target;\n if (target === this.clearButton) {\n this.removeFocus();\n if (this.uploadButton.hasAttribute('disabled')) {\n return;\n }\n this.uploadButton.focus();\n }\n else if (target.classList.contains('e-icons')) {\n var iconElements = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n var index = iconElements.indexOf(target);\n if (index < (iconElements.length - 1)) {\n this.removeFocus();\n iconElements[index + 1].classList.add(ICON_FOCUSED);\n iconElements[index + 1].focus();\n }\n else {\n this.removeFocus();\n this.clearButton.focus();\n }\n }\n else {\n this.browseButton.blur();\n var iconElement = this.listParent.querySelectorAll('span.e-icons')[0];\n iconElement.focus();\n iconElement.classList.add(ICON_FOCUSED);\n }\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n this.upload(this.filesData);\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\n };\n Uploader.prototype.bindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n EventHandler.add(this.dropZoneElement, 'paste', this.onPasteFile, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n }\n };\n Uploader.prototype.onDragLeave = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.dropElement = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.onPasteFile = function (event) {\n var item = event.clipboardData.items;\n if (item.length !== 1) {\n return;\n }\n var pasteFile = [].slice.call(item)[0];\n if ((pasteFile.kind === 'file') && pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\n }\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var liElement = this.fileList[index];\n var fileData = this.filesData[index];\n if (args.target.classList.contains(ABORT_ICON)) {\n fileData.statusCode = '5';\n if (!isNullOrUndefined(liElement)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n }\n else {\n this.remove(fileData, false, false, args);\n }\n this.element.value = '';\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n var index;\n if (customTemplate) {\n if (!this.showFileList) {\n index = this.filesData.indexOf(file);\n this.filesData.splice(index, 1);\n }\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n detach(selectedElement);\n index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, eventArgs, removeDirectly, custom) {\n var _this = this;\n var selectedFiles = file;\n var name = this.element.getAttribute('name');\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n var formData = new FormData();\n var liElement = this.getLiElement(file);\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs);\n }\n if (eventArgs.cancel) {\n e.cancel = true;\n return;\n }\n if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n var spinnerTarget = void 0;\n spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ? liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name, selectedFiles.rawFile);\n }\n else {\n formData.append(name, selectedFiles.name);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n };\n ajax.onLoad = function (e) { _this.removeCompleted(e, selectedFiles, custom); return {}; };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.removeFailed(e, selectedFiles, custom); return {}; };\n ajax.send(formData);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n var _loop_1 = function (i) {\n var data = customData[i];\n // tslint:disable-next-line\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n formData.append(Object.keys(data)[0], value);\n };\n for (var i = 0; i < customData.length; i++) {\n _loop_1(i);\n }\n }\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var args = {\n e: e, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.removeFilesData(files, customTemplate);\n var index = this.uploadedFilesData.indexOf(files);\n this.uploadedFilesData.splice(index, 1);\n this.trigger('change', { files: this.uploadedFilesData });\n };\n Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n var args = {\n e: e, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n };\n if (!customTemplate) {\n var index = this.filesData.indexOf(files);\n var rootElement = this.fileList[index];\n if (rootElement) {\n var statusElement = rootElement.querySelector('.' + STATUS);\n rootElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getFilesFromFolder = function (event) {\n this.filesEntries = [];\n var items;\n items = this.multiple ? event.dataTransfer.items : [event.dataTransfer.items[0]];\n var validDirectoryUpload = this.checkDirectoryUpload(items);\n if (!validDirectoryUpload) {\n return;\n }\n var _loop_2 = function (i) {\n // tslint:disable-next-line\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n // tslint:disable-next-line\n (item).file(function (fileObj) {\n var path = item.fullPath;\n files_2.push({ 'path': path, 'file': fileObj });\n });\n this_1.renderSelectedFiles(event, files_2, true);\n }\n else if (item.isDirectory) {\n this_1.traverseFileTree(item, event);\n }\n };\n var this_1 = this;\n for (var i = 0; i < items.length; i++) {\n _loop_2(i);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.checkDirectoryUpload = function (items) {\n for (var i = 0; i < items.length; i++) {\n // tslint:disable-next-line\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n // tslint:disable\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n var _this = this;\n if (typeof (item) === 'boolean') {\n var files_3 = [];\n var _loop_3 = function (i) {\n this_2.filesEntries[i].file(function (fileObj) {\n var path = _this.filesEntries[i].fullPath;\n files_3.push({ 'path': path, 'file': fileObj });\n });\n };\n var this_2 = this;\n for (var i = 0; i < this.filesEntries.length; i++) {\n _loop_3(i);\n }\n this.renderSelectedFiles(event, files_3, true);\n }\n else if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n // tslint:disable-next-line\n var directoryReader = item.createReader();\n // tslint:disable-next-line\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i]);\n // tslint:disable-next-line\n }\n ;\n _this.traverseFileTree(true);\n _this.filesEntries = [];\n });\n }\n };\n // tslint:enable\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var targetFiles;\n if (args.type === 'drop') {\n /* istanbul ignore next */\n if (this.directoryUpload) {\n this.getFilesFromFolder(args);\n }\n else {\n var files = args.dataTransfer.files;\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n this.renderSelectedFiles(args, targetFiles);\n }\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n this.renderSelectedFiles(args, targetFiles);\n }\n };\n Uploader.prototype.renderSelectedFiles = function (args, \n // tslint:disable-next-line\n targetFiles, directory, paste) {\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n isModified: false,\n modifiedFilesData: [],\n progressInterval: '',\n isCanceled: false\n };\n if (targetFiles.length < 1) {\n eventArgs.isCanceled = true;\n this.trigger('selected', eventArgs);\n return;\n }\n var fileData = [];\n if (!this.multiple) {\n this.clearData(true);\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = directory ? targetFiles[i].file : targetFiles[i];\n var fileName = directory ? targetFiles[i].path.substring(1, targetFiles[i].path.length) : paste ?\n getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name) :\n this.directoryUpload ? targetFiles[i].webkitRelativePath : file.name;\n var fileDetails = {\n name: fileName,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1'\n };\n if (paste) {\n fileDetails.fileSource = 'paste';\n }\n fileDetails.status = fileDetails.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n fileDetails.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : fileDetails.status;\n if (fileDetails.validationMessages.minSize !== '' || fileDetails.validationMessages.maxSize !== '') {\n fileDetails.statusCode = '0';\n }\n fileData.push(fileDetails);\n }\n eventArgs.filesData = fileData;\n if (this.allowedExtensions.indexOf('*') > -1) {\n this.allTypes = true;\n }\n if (!this.allTypes) {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (this.showFileList) {\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n var dataFiles = this.allTypes ? eventArgs.modifiedFilesData :\n this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n this.filesData = dataFiles;\n if (!this.isForm) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.createFileList(fileData);\n this.filesData = this.filesData.concat(fileData);\n if (!this.isForm) {\n this.checkAutoUpload(fileData);\n }\n }\n if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n this.progressInterval = eventArgs.progressInterval;\n }\n }\n else {\n this.filesData = this.filesData.concat(fileData);\n if (this.autoUpload) {\n this.upload(this.filesData, true);\n }\n }\n };\n Uploader.prototype.clearData = function (singleUpload) {\n if (!isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n }\n if (Browser.info.name !== 'msie' && !singleUpload) {\n this.element.value = '';\n }\n this.fileList = [];\n this.filesData = [];\n this.removeActionButtons();\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = this.createElement('div', { id: 'clonewrapper' });\n var added = -1;\n var removedList;\n if (this.listParent) {\n for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n var liElement = this.listParent.querySelectorAll('li')[i];\n previousListClone.appendChild(liElement.cloneNode(true));\n }\n removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createParentUL();\n for (var index = 0; index < filesData.length; index++) {\n for (var j = 0; j < this.filesData.length; j++) {\n if (this.filesData[j].name === filesData[index].name) {\n this.listParent.appendChild(oldList[j]);\n EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n this.fileList.push(oldList[j]);\n added = index;\n }\n }\n if (added !== index) {\n this.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(filesData);\n }\n };\n Uploader.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n Uploader.prototype.checkExtension = function (files) {\n var dropFiles = files;\n if (!this.isBlank(this.allowedExtensions)) {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var liElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n this.listParent.appendChild(liElement);\n var fromElements = [].slice.call(this.uploadTemplateFn(listItem));\n append(fromElements, liElement);\n this.fileList.push(liElement);\n }\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = this.createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n }\n };\n Uploader.prototype.createFileList = function (fileData) {\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n this.createCustomfileList(fileData);\n }\n else {\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var liElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n var textContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var textElement = this.createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = this.createElement('span', { className: FILE_TYPE });\n fileExtension.innerHTML = '.' + this.getFileType(listItem.name);\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = this.createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = this.createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = this.createElement('span', { className: ' e-icons', attrs: { 'tabindex': '-1' } });\n /* istanbul ignore next */\n if (Browser.info.name === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(DELETE_ICON)) {\n iconElement.classList.add(REMOVE_ICON);\n }\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n }\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n var text;\n if (nameElement.offsetWidth < nameElement.scrollWidth) {\n text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode) {\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n files.status = status;\n files.statusCode = statusCode;\n }\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var index;\n for (var i = 0; i < this.filesData.length; i++) {\n if (this.filesData[i].name === files.name) {\n index = i;\n }\n }\n return this.fileList[index];\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = this.createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = this.createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = this.createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = this.createElement('span', { className: PROGRESSBAR_TEXT });\n progressbarText.textContent = '0%';\n progressbarInnerWrapper.appendChild(progressBar);\n progressbarWrapper.appendChild(progressbarInnerWrapper);\n progressbarWrapper.appendChild(progressbarText);\n liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateProgressbar = function (e, li) {\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n if (value === 0 || value === 100) {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n else {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n };\n Uploader.prototype.changeProgressValue = function (li, progressValue) {\n li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n };\n Uploader.prototype.uploadInProgress = function (e, files, customUI, request) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI)) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n /* istanbul ignore next */\n if (files.statusCode === '5') {\n this.cancelUploadingFile(files, e, request, li);\n }\n if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n this.createProgressBar(li);\n this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n this.updateProgressbar(e, li);\n var iconEle = li.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n iconEle.setAttribute('title', this.localizedTexts('abort'));\n iconEle.classList.remove(REMOVE_ICON);\n }\n }\n else {\n this.cancelUploadingFile(files, e, request);\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\n };\n /* istanbul ignore next */\n Uploader.prototype.cancelUploadingFile = function (files, e, request, li) {\n var _this = this;\n if (files.statusCode === '5') {\n var eventArgs = {\n event: e,\n fileData: files,\n cancel: false\n };\n this.trigger('canceling', eventArgs);\n if (eventArgs.cancel) {\n files.statusCode = '3';\n if (!isNullOrUndefined(li)) {\n var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(li.querySelector('.e-spinner-pane'));\n }\n }\n return;\n }\n request.emitError = false;\n request.httpRequest.abort();\n var formData = new FormData();\n if (files.statusCode === '5') {\n var name_1 = this.element.getAttribute('name');\n formData.append(name_1, files.name);\n formData.append('cancel-uploading', files.name);\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.onLoad = function (e) { _this.removecanceledFile(e, files); return {}; };\n ajax.send(formData);\n }\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n var args = { event: e, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': '-1' } });\n liElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) { _this.reloadcanceledFile(e, file, liElement, false); }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n if (!custom) {\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n detach(liElement.querySelector('.' + RETRY_ICON));\n }\n this.pauseButton = null;\n }\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(DELETE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.raiseSuccessEvent = function (e, file) {\n var args = { e: e, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadSuccessMessage'), '2') };\n this.trigger('success', args);\n this.uploadedFilesData.push(file);\n this.trigger('change', { file: this.uploadedFilesData });\n this.checkActionButtonStatus();\n };\n Uploader.prototype.uploadFailed = function (e, file) {\n var li = this.getLiElement(file);\n var args = { e: e, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadFailedMessage'), '0') };\n if (!isNullOrUndefined(li)) {\n this.renderFailureState(e, file, li);\n }\n this.trigger('failure', args);\n this.checkActionButtonStatus();\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () { _this.animateProgressBar(li, callType); }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n this.element.setAttribute('accept', extensions);\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n var exception = void 0;\n try {\n if (document.querySelectorAll(uploadTemplate).length) {\n return compile(document.querySelector(uploadTemplate).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n this.enableRtl ? addClass([this.uploadWrapper], RTL) : removeClass([this.uploadWrapper], RTL);\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function () {\n if (this.element.hasAttribute('accept')) {\n this.allowedExtensions = this.element.getAttribute('accept');\n this.initialAttr.accept = this.allowedExtensions;\n }\n if (this.element.hasAttribute('multiple')) {\n this.multiple = true;\n this.initialAttr.multiple = true;\n }\n if (this.element.hasAttribute('disabled')) {\n this.enabled = false;\n this.initialAttr.disabled = true;\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom) {\n var start = 0;\n var end = Math.min(this.asyncSettings.chunkSize, file.size);\n var index = 0;\n var blob = file.rawFile.slice(start, end);\n var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n this.sendRequest(file, metaData, custom);\n };\n Uploader.prototype.sendRequest = function (file, metaData, custom) {\n var _this = this;\n var formData = new FormData();\n var blob = file.rawFile.slice(metaData.start, metaData.end);\n formData.append('chunkFile', blob, file.name);\n formData.append('chunk-index', metaData.chunkIndex.toString());\n formData.append('chunkIndex', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n formData.append('totalChunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.onLoad = function (e) { _this.chunkUploadComplete(e, metaData, custom); return {}; };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n if (metaData.chunkIndex !== 0) {\n return;\n }\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs);\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n _this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.chunkUploadFailed(e, metaData, custom); return {}; };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n var liElement = this.getLiElement(eventArgs.fileData);\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': '-1' } });\n liElement.insertBefore(this.pauseButton, liElement.querySelector('.' + REMOVE_ICON));\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) { _this.reloadcanceledFile(e, file, liElement); }, false);\n this.checkActionButtonStatus();\n };\n Uploader.prototype.checkChunkUpload = function () {\n return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n };\n Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n var _this = this;\n var response = e.target;\n var liElement;\n if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: totalChunk,\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('chunkSuccess', eventArgs);\n if (isNullOrUndefined(custom) || !custom) {\n liElement = this.getLiElement(metaData.file);\n }\n this.updateMetaData(metaData);\n if (metaData.end === metaData.file.size) {\n metaData.file.statusCode = '3';\n }\n if (metaData.file.statusCode === '5') {\n var eventArgs_1 = { event: e, fileData: metaData.file, cancel: false };\n this.trigger('canceling', eventArgs_1);\n if (eventArgs_1.cancel) {\n metaData.file.statusCode = '3';\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n this.sendNextRequest(metaData);\n return;\n }\n metaData.request.emitError = false;\n response.abort();\n var formData = new FormData();\n var name_2 = this.element.getAttribute('name');\n formData.append(name_2, metaData.file.name);\n formData.append('cancel-uploading', metaData.file.name);\n formData.append('cancelUploading', metaData.file.name);\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.onLoad = function (e) { _this.removeChunkFile(e, metaData, custom); return {}; };\n ajax.send(formData);\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n this.sendNextRequest(metaData);\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon.classList.add(RETRY_ICON);\n pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n targetElement.nextElementSibling.classList.add(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(DELETE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize,\n cancel: false\n };\n this.trigger('chunkFailure', eventArgs);\n /* tslint:disable */\n var eventArgsData = eventArgs;\n var values = Object.keys(eventArgsData).map(function (e) {\n return eventArgsData[e];\n });\n /* tslint:enable */\n // To prevent triggering of failure event\n if (!values[values.length - 2]) {\n if (metaData.retryCount < this.asyncSettings.retryCount) {\n setTimeout(function () { _this.retryRequest(liElement, metaData, custom); }, this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON);\n iconElement.classList.remove(ABORT_ICON);\n if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n if (metaData.start > 0) {\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n }\n }\n metaData.retryCount = 0;\n var file = metaData.file;\n var args = { e: e, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadFailedMessage'), '0') };\n this.trigger('failure', args);\n }\n }\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n this.pauseUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n };\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var target;\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n liElement.querySelector('.' + DELETE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(REMOVE_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var loadedSize = (metaData.chunkIndex * this.asyncSettings.chunkSize);\n var value = Math.min((((loadedSize + e.loaded) / metaData.file.size) * 100), 100);\n this.changeProgressValue(liElement, Math.round(value).toString() + '%');\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)) {\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': '-1' } });\n if (Browser.info.name === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n liElement.insertBefore(this.pauseButton, liElement.querySelector('.' + ABORT_ICON));\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) { _this.checkPausePlayAction(e); }, false);\n }\n };\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n * @param { number } bytes - specifies the file size in bytes.\n * @returns string\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n var size;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns File[]\n */\n Uploader.prototype.sortFileList = function (filesData) {\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n var index = 0;\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_3 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_3 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearAll();\n this.unWireEvents();\n this.unBindDropEvents();\n if (this.multiple) {\n this.element.removeAttribute('multiple');\n }\n if (!this.enabled) {\n this.element.removeAttribute('disabled');\n }\n this.element.removeAttribute('accept');\n this.setInitialAttributes();\n this.uploadWrapper.parentElement.appendChild(this.cloneElement);\n this.cloneElement.classList.remove('e-control', ROOT);\n detach(this.uploadWrapper);\n this.uploadWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Allows you to call the upload process manually by calling save URL action.\n * To process the selected files (added in upload queue), pass an empty argument otherwise\n * upload the specific file based on its argument.\n * @param { FileInfo | FileInfo[] } files - specifies the files data for upload.\n * @returns void\n */\n Uploader.prototype.upload = function (files, custom) {\n var uploadFiles = this.validateFileType(files);\n this.uploadFiles(uploadFiles, custom);\n };\n Uploader.prototype.validateFileType = function (files) {\n var uploadFiles = [];\n if (files instanceof Array) {\n uploadFiles = files;\n }\n else {\n uploadFiles.push(files);\n }\n return uploadFiles;\n };\n Uploader.prototype.uploadFiles = function (files, custom) {\n var _this = this;\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n return;\n }\n if (!custom || isNullOrUndefined(custom)) {\n if (!this.multiple) {\n var file = [];\n file.push(files[0]);\n selectedFiles = this.filterfileList(file);\n }\n else {\n selectedFiles = this.filterfileList(files);\n }\n }\n else {\n selectedFiles = files;\n }\n var chunkEnabled = this.checkChunkUpload();\n var _loop_4 = function (i) {\n var ajax = new Ajax(this_3.asyncSettings.saveUrl, 'POST', true, null);\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs);\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n };\n if (selectedFiles[i].statusCode === '1') {\n var name_4 = this_3.element.getAttribute('name');\n formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this_3.asyncSettings.chunkSize) {\n this_3.chunkUpload(selectedFiles[i], custom);\n }\n else {\n ajax.onLoad = function (e) { _this.uploadComplete(e, selectedFiles[i], custom); return {}; };\n ajax.onUploadProgress = function (e) {\n _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.uploadFailed(e, selectedFiles[i]); return {}; };\n ajax.send(formData);\n }\n }\n };\n var this_3 = this;\n for (var i = 0; i < selectedFiles.length; i++) {\n _loop_4(i);\n }\n };\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @returns void\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, args) {\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n customFormData: [],\n postRawFile: true\n };\n if (this.isForm) {\n eventArgs.filesData = this.getFilesData();\n this.trigger('removing', eventArgs);\n if (!eventArgs.cancel) {\n this.clearAll();\n }\n return;\n }\n var removeFiles = [];\n fileData = !isNullOrUndefined(fileData) ? fileData : this.filesData;\n if (fileData instanceof Array) {\n removeFiles = fileData;\n }\n else {\n removeFiles.push(fileData);\n }\n eventArgs.filesData = removeFiles;\n var removeUrl = this.asyncSettings.removeUrl;\n var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n if ((files.statusCode === '2' || files.statusCode === '4') && validUrl) {\n this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n }\n else {\n if (!removeDirectly) {\n this.trigger('removing', eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n this.removeFilesData(files, customTemplate);\n }\n }\n };\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n * @returns void\n */\n Uploader.prototype.clearAll = function () {\n if (isNullOrUndefined(this.listParent)) {\n if (Browser.info.name !== 'msie') {\n this.element.value = '';\n }\n this.filesData = [];\n return;\n }\n var eventArgs = {\n cancel: false,\n filesData: this.filesData\n };\n this.trigger('clearing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.clearData();\n };\n /**\n * Get the data of files which are shown in file list.\n * @returns FileInfo[]\n */\n Uploader.prototype.getFilesData = function () {\n return this.filesData;\n };\n /**\n * Pauses the in-progress chunked upload based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns void\n */\n Uploader.prototype.pause = function (fileData, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns void\n */\n Uploader.prototype.resume = function (fileData, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @returns void\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = void 0;\n if (!custom) {\n liElement = this.fileList[this.filesData.indexOf(files[i])];\n }\n this.reloadcanceledFile(null, files[i], liElement, custom);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns void\n */\n Uploader.prototype.cancel = function (fileData) {\n var cancelingFiles = this.validateFileType(fileData);\n this.cancelUpload(cancelingFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\n if (this.asyncSettings.chunkSize > 0) {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n var metaData = this.getCurrentMetaData(files[i], null);\n metaData.file.statusCode = '5';\n metaData.file.status = this.localizedTexts('fileUploadCancel');\n this.updateMetaData(metaData);\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n else {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n files[i].statusCode = '5';\n files[i].status = this.localizedTexts('fileUploadCancel');\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n };\n Uploader.prototype.showHideUploadSpinner = function (files) {\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"directoryUpload\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkSuccess\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkFailure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"canceling\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"pausing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"resuming\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Event, NotifyPropertyChanges, detach, Property, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, getUniqueID, rippleEffect } from '@syncfusion/ej2-base';\nimport { attributes, Component, closest, select } from '@syncfusion/ej2-base';\nimport { classList, removeClass } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { getModel, Item } from './../common/common';\nvar classNames = {\n DISABLED: 'e-disabled',\n FOCUS: 'e-focused',\n ICON: 'e-menu-icon',\n ITEM: 'e-item',\n POPUP: 'e-dropdown-popup',\n RTL: 'e-rtl',\n SEPARATOR: 'e-separator',\n VERTICAL: 'e-vertical'\n};\n/**\n * DropDownButton component is used to toggle contextual overlays for displaying list of action items.\n * It can contain both text and images.\n * ``````html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DropDownButton = /** @class */ (function (_super) {\n __extends(DropDownButton, _super);\n /**\n * Constructor for creating the widget\n * @param {DropDownButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function DropDownButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n DropDownButton.prototype.preRender = function () {\n /** */\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n DropDownButton.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n * @returns void\n */\n DropDownButton.prototype.toggle = function () {\n this.canOpen() ? this.openPopUp() : this.closePopup();\n };\n /**\n * Initialize the Component rendering\n * @returns void\n * @private\n */\n DropDownButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n DropDownButton.prototype.createPopup = function () {\n var _a;\n var div = this.createElement('div', {\n className: classNames.POPUP,\n id: this.element.id + '-popup'\n });\n document.body.appendChild(div);\n this.dropDown = new Popup(div, {\n relateTo: this.element,\n collision: { X: 'fit', Y: 'flip' },\n position: { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n content: this.target ? this.getTargetElement() : '',\n enableRtl: this.enableRtl\n });\n if (this.dropDown.element.style.position === 'fixed') {\n this.dropDown.refreshPosition(this.element);\n }\n this.dropDown.hide();\n attributes(this.element, (_a = {},\n _a['role'] = 'menu',\n _a['aria-haspopup'] = this.items.length || this.target ? 'true' : 'false',\n _a['aria-expanded'] = 'false',\n _a['aria-owns'] = this.getPopUpElement().id,\n _a['type'] = 'button',\n _a));\n if (this.cssClass) {\n addClass([div], this.cssClass.split(' '));\n }\n };\n DropDownButton.prototype.getTargetElement = function () {\n return typeof (this.target) === 'string' ? select(this.target) : this.target;\n };\n DropDownButton.prototype.createItems = function (items) {\n var showIcon = this.hasIcon(items, 'iconCss');\n var span;\n var item;\n var li;\n var eventArgs;\n var ul = this.createElement('ul', {\n attrs: { 'tabindex': '0' }\n });\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n li = this.createElement('li', {\n innerHTML: item.url ? '' : item.text,\n className: item.separator ? classNames.ITEM + ' ' + classNames.SEPARATOR : classNames.ITEM,\n attrs: { 'role': 'menuItem', 'tabindex': '-1' },\n id: item.id ? item.id : getUniqueID('e-' + this.getModuleName() + '-item')\n });\n if (item.iconCss) {\n span = this.createElement('span', { className: classNames.ICON + ' ' + item.iconCss });\n li.insertBefore(span, li.childNodes[0]);\n }\n else {\n if (showIcon && !item.separator) {\n li.classList.add('e-blank-icon');\n }\n }\n if (item.url) {\n li.appendChild(this.createAnchor(item));\n }\n eventArgs = { item: item, element: li };\n this.trigger('beforeItemRender', eventArgs);\n ul.appendChild(li);\n }\n return ul;\n };\n DropDownButton.prototype.hasIcon = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][field]) {\n return true;\n }\n }\n return false;\n };\n DropDownButton.prototype.createAnchor = function (item) {\n return this.createElement('a', { className: 'e-menu-text e-menu-url', innerHTML: item.text, attrs: { 'href': item.url } });\n };\n DropDownButton.prototype.initialize = function () {\n this.button = new Button({\n iconCss: this.iconCss, iconPosition: this.iconPosition, cssClass: this.cssClass, content: this.content,\n disabled: this.disabled, enableRtl: this.enableRtl, enablePersistence: this.enablePersistence\n });\n this.button.createElement = this.createElement;\n this.button.appendTo(this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n this.appendArrowSpan();\n this.createPopup();\n this.setActiveElem([this.element]);\n };\n DropDownButton.prototype.appendArrowSpan = function () {\n this.element.appendChild(this.createElement('span', {\n className: 'e-btn-icon e-icons ' + 'e-icon-' + (this.cssClass.indexOf(classNames.VERTICAL) > -1\n ? 'bottom' : 'right') + ' e-caret'\n }));\n };\n DropDownButton.prototype.setActiveElem = function (elem) {\n this.activeElem = elem;\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n DropDownButton.prototype.getModuleName = function () {\n return 'dropdown-btn';\n };\n DropDownButton.prototype.canOpen = function () {\n return this.getPopUpElement().classList.contains('e-popup-close');\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n DropDownButton.prototype.destroy = function () {\n var _this = this;\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'dropdown-btn') {\n var attrList = void 0;\n var classList_1;\n if (this.element.querySelector('span.e-caret')) {\n detach(this.element.querySelector('span.e-caret'));\n }\n if (this.cssClass) {\n classList_1 = this.cssClass.split(' ');\n }\n this.button.destroy();\n if (classList_1) {\n removeClass([this.element], classList_1);\n }\n removeClass(this.activeElem, ['e-active']);\n attrList = this.element.getAttribute('class') ? ['role', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type']\n : ['role', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type', 'class'];\n attrList.forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.dropDown.destroy();\n var popupEle = document.getElementById(this.getPopUpElement().id);\n if (popupEle) {\n removeClass([popupEle], ['e-popup-open', 'e-popup-close']);\n detach(popupEle);\n }\n if (!this.disabled) {\n this.unWireEvents();\n }\n }\n };\n DropDownButton.prototype.getPopUpElement = function () {\n return this.dropDown.element;\n };\n DropDownButton.prototype.getULElement = function () {\n return this.getPopUpElement().children[0];\n };\n DropDownButton.prototype.wireEvents = function () {\n var popupElement = this.getPopUpElement();\n this.delegateMousedownHandler = this.mousedownHandler.bind(this);\n EventHandler.add(document, 'mousedown touchstart', this.delegateMousedownHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(popupElement, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n EventHandler.add(popupElement, 'keydown', this.keyBoardHandler, this);\n this.rippleFn = rippleEffect(popupElement, { selector: '.' + classNames.ITEM });\n };\n DropDownButton.prototype.keyBoardHandler = function (e) {\n if (e.target === this.element && (e.keyCode === 9 || (!e.altKey && e.keyCode === 40) || e.keyCode === 38)) {\n return;\n }\n switch (e.keyCode) {\n case 38:\n case 40:\n if (e.altKey && (e.keyCode === 38 || e.keyCode === 40)) {\n this.keyEventHandler(e);\n }\n else {\n this.upDownKeyHandler(e);\n }\n break;\n case 9:\n case 13:\n case 27:\n case 32:\n this.keyEventHandler(e);\n break;\n }\n };\n DropDownButton.prototype.upDownKeyHandler = function (e) {\n if (this.target && (e.keyCode === 38 || e.keyCode === 40)) {\n return;\n }\n e.preventDefault();\n var ul = this.getULElement();\n var defaultIdx = e.keyCode === 40 ? 0 : ul.childElementCount - 1;\n var liIdx = defaultIdx;\n var li = null;\n this.removeCustomSelection();\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classNames.FOCUS)) {\n li = ul.children[i];\n liIdx = i;\n li.classList.remove(classNames.FOCUS);\n e.keyCode === 40 ? liIdx++ : liIdx--;\n if (liIdx === (e.keyCode === 40 ? ul.childElementCount : -1)) {\n liIdx = defaultIdx;\n }\n }\n }\n li = ul.children[liIdx];\n liIdx = this.isValidLI(li, liIdx, e.keyCode);\n if (liIdx !== -1) {\n addClass([ul.children[liIdx]], classNames.FOCUS);\n ul.children[liIdx].focus();\n }\n };\n DropDownButton.prototype.removeCustomSelection = function () {\n var selectedLi = this.getULElement().querySelector('.e-selected');\n if (selectedLi) {\n selectedLi.classList.remove('e-selected');\n }\n };\n DropDownButton.prototype.isValidLI = function (li, index, keyCode, count) {\n if (count === void 0) { count = 0; }\n if (li.classList.contains(classNames.SEPARATOR) || li.classList.contains(classNames.DISABLED)) {\n if (index === (keyCode === 40 ? this.items.length - 1 : 0)) {\n index = keyCode === 40 ? 0 : this.items.length - 1;\n }\n else {\n keyCode === 40 ? index++ : index--;\n }\n }\n li = this.getULElement().children[index];\n if (li.classList.contains(classNames.SEPARATOR) || li.classList.contains(classNames.DISABLED)) {\n count++;\n if (count === this.items.length) {\n return index = -1;\n }\n index = this.isValidLI(li, index, keyCode, count);\n }\n return index;\n };\n DropDownButton.prototype.keyEventHandler = function (e) {\n if (this.target && (e.keyCode === 13 || e.keyCode === 9)) {\n return;\n }\n if (e.keyCode !== 9) {\n e.preventDefault();\n }\n if (e.keyCode === 27 || e.keyCode === 38 || e.keyCode === 9) {\n if (!this.canOpen()) {\n this.closePopup(e, this.element);\n }\n }\n else {\n this.clickHandler(e);\n }\n };\n DropDownButton.prototype.getLI = function (elem) {\n return elem.tagName === 'LI' ? elem : closest(elem, 'li');\n };\n DropDownButton.prototype.mousedownHandler = function (e) {\n var trgt = e.target;\n if (!this.canOpen() && !(closest(trgt, '#' + this.getPopUpElement().id) || closest(trgt, '#' + this.element.id))) {\n this.closePopup(e);\n }\n };\n DropDownButton.prototype.clickHandler = function (e) {\n var trgt = e.target;\n var canOpen = this.canOpen();\n if (closest(trgt, '#' + this.element.id)) {\n if (canOpen) {\n this.openPopUp(e);\n }\n else {\n this.closePopup(e, this.activeElem[0]);\n }\n }\n else {\n if (closest(trgt, '#' + this.getPopUpElement().id)) {\n var eventArgs = void 0;\n var liIdx = void 0;\n var item = void 0;\n var li = this.getLI(trgt);\n if (li) {\n liIdx = Array.prototype.indexOf.call(this.getULElement().children, li);\n item = this.items[liIdx];\n if (item) {\n eventArgs = { element: li, item: item };\n this.trigger('select', eventArgs);\n }\n this.closePopup(e, this.activeElem[0]);\n }\n }\n }\n };\n DropDownButton.prototype.openPopUp = function (e) {\n if (e === void 0) { e = null; }\n if (!this.target) {\n this.getPopUpElement().appendChild(this.createItems(this.items));\n }\n var ul = this.getULElement();\n var beforeOpenArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs);\n if (!beforeOpenArgs.cancel) {\n this.dropDown.show(null, this.element);\n addClass([this.element], 'e-active');\n this.element.setAttribute('aria-expanded', 'true');\n ul.focus();\n var openArgs = { element: ul, items: this.items };\n this.trigger('open', openArgs);\n }\n };\n DropDownButton.prototype.closePopup = function (e, focusEle) {\n if (e === void 0) { e = null; }\n var ul = this.getULElement();\n var beforeCloseArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.removeCustomSelection();\n this.dropDown.hide();\n removeClass(this.activeElem, 'e-active');\n this.element.setAttribute('aria-expanded', 'false');\n if (focusEle) {\n focusEle.focus();\n }\n var closeArgs = { element: ul, items: this.items };\n this.trigger('close', closeArgs);\n if (!this.target && ul) {\n detach(ul);\n }\n }\n };\n DropDownButton.prototype.unWireEvents = function () {\n EventHandler.remove(document, 'mousedown touchstart', this.delegateMousedownHandler);\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.getPopUpElement(), 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n this.rippleFn();\n };\n /**\n * Called internally if any of the property value changed.\n * @param {DropDownButtonModel} newProp\n * @param {DropDownButtonModel} oldProp\n * @returns void\n * @private\n */\n DropDownButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var btnModel = ['content', 'cssClass', 'iconCss', 'iconPosition', 'disabled', 'enableRtl'];\n this.button.setProperties(getModel(newProp, btnModel));\n var popupElement = this.getPopUpElement();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!this.element.querySelector('span.e-caret')) {\n this.appendArrowSpan();\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.unWireEvents();\n if (!this.canOpen()) {\n this.closePopup();\n }\n }\n else {\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (newProp.cssClass.indexOf(classNames.VERTICAL) > -1) {\n var arrowSpan = this.element.querySelector('span.e-caret');\n classList(arrowSpan, ['e-icon-bottom'], ['e-icon-right']);\n }\n if (oldProp.cssClass) {\n removeClass([popupElement], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([popupElement], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n popupElement.classList.toggle(classNames.RTL);\n break;\n case 'target':\n this.target = newProp.target;\n detach(this.getULElement());\n popupElement.appendChild(this.getTargetElement());\n this.dropDown.content = this.getTargetElement();\n break;\n case 'items':\n this.dropDown.refresh();\n if (popupElement.classList.contains('e-popup-open')) {\n classList(popupElement, ['e-popup-close'], ['e-popup-open']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DropDownButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], DropDownButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Collection([], Item)\n ], DropDownButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"created\", void 0);\n DropDownButton = __decorate([\n NotifyPropertyChanges\n ], DropDownButton);\n return DropDownButton;\n}(Component));\nexport { DropDownButton };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Event, remove, addClass, removeClass, detach, getValue, setValue } from '@syncfusion/ej2-base';\nimport { EventHandler, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { attributes, getUniqueID, getInstance, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getModel, Item } from './../common/common';\nimport { DropDownButton } from '../drop-down-button/drop-down-button';\nvar RTL = 'e-rtl';\nvar TAGNAME = 'EJS-SPLITBUTTON';\n/**\n * SplitButton component has primary and secondary button. Primary button is used to select\n * default action and secondary button is used to toggle contextual overlays for displaying list of\n * action items. It can contain both text and images.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar SplitButton = /** @class */ (function (_super) {\n __extends(SplitButton, _super);\n /**\n * Constructor for creating the widget\n * @param {SplitButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function SplitButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize Angular support.\n * @private\n */\n SplitButton.prototype.preRender = function () {\n var ele = this.element;\n if (ele.tagName === TAGNAME) {\n var ejInstance = getValue('ej2_instances', ele);\n var btn = this.createElement('button', { attrs: { 'type': 'button' } });\n var wrapper = this.createElement(TAGNAME, { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n btn.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = btn;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.wrapper = wrapper;\n this.element = ele;\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n SplitButton.prototype.render = function () {\n this.initWrapper();\n this.createPrimaryButton();\n this.createSecondaryButton();\n this.setActiveElem([this.element, this.secondaryBtnObj.element]);\n this.setAria();\n this.wireEvents();\n };\n SplitButton.prototype.initWrapper = function () {\n if (!this.wrapper) {\n this.wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(this.wrapper, this.element);\n }\n this.element.classList.remove('e-' + this.getModuleName());\n if (this.enableRtl) {\n this.wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([this.wrapper], this.cssClass.split(' '));\n }\n };\n SplitButton.prototype.createPrimaryButton = function () {\n var btnModel = {\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n iconCss: this.iconCss,\n iconPosition: this.iconPosition,\n content: this.content,\n disabled: this.disabled\n };\n this.primaryBtnObj = new Button(btnModel);\n this.primaryBtnObj.createElement = this.createElement;\n this.primaryBtnObj.appendTo(this.element);\n this.element.classList.add('e-' + this.getModuleName());\n this.element.type = 'button';\n this.wrapper.appendChild(this.element);\n };\n SplitButton.prototype.createSecondaryButton = function () {\n var _this = this;\n var btnElem = this.createElement('button', {\n className: 'e-icon-btn',\n attrs: { 'tabindex': '-1' },\n id: this.element.id + '_dropdownbtn'\n });\n this.wrapper.appendChild(btnElem);\n var dropDownBtnModel = {\n cssClass: this.cssClass,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n items: this.items,\n target: this.target,\n beforeItemRender: function (args) {\n _this.trigger('beforeItemRender', args);\n },\n beforeOpen: function (args) {\n _this.trigger('beforeOpen', args);\n },\n beforeClose: function (args) {\n _this.trigger('beforeClose', args);\n },\n open: function (args) {\n _this.trigger('open', args);\n },\n close: function (args) {\n _this.trigger('close', args);\n },\n select: function (args) {\n _this.trigger('select', args);\n }\n };\n this.secondaryBtnObj = new DropDownButton(dropDownBtnModel);\n this.secondaryBtnObj.createElement = this.createElement;\n this.secondaryBtnObj.appendTo(btnElem);\n this.secondaryBtnObj.dropDown.relateTo = this.wrapper;\n this.dropDown = this.secondaryBtnObj.dropDown;\n this.secondaryBtnObj.activeElem = [this.element, this.secondaryBtnObj.element];\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.secondaryBtnObj.keyBoardHandler);\n this.secondaryBtnObj.element.querySelector('.e-btn-icon').classList.remove('e-icon-right');\n };\n SplitButton.prototype.setAria = function () {\n attributes(this.element, {\n 'role': 'listbox', 'aria-expanded': 'false', 'aria-haspopup': 'true',\n 'aria-label': this.element.textContent + ' splitbutton', 'aria-owns': this.secondaryBtnObj.dropDown.element.id\n });\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n SplitButton.prototype.getModuleName = function () {\n return 'split-btn';\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n * @returns void\n */\n SplitButton.prototype.toggle = function () {\n this.secondaryBtnObj.toggle();\n };\n SplitButton.prototype.destroy = function () {\n var _this = this;\n var classList = [RTL];\n var element = document.getElementById(this.element.id);\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n if (element && element.parentElement === this.wrapper) {\n if (this.wrapper.tagName === TAGNAME) {\n this.wrapper.innerHTML = '';\n removeClass([this.wrapper], ['e-rtl', 'e-' + this.getModuleName() + '-wrapper']);\n removeClass([this.wrapper], this.cssClass.split(' '));\n }\n else {\n removeClass([this.element], classList);\n ['role', 'aria-label', 'aria-haspopup', 'aria-expanded',\n 'aria-owns', 'type'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.wrapper.parentNode.insertBefore(this.element, this.wrapper);\n remove(this.wrapper);\n }\n this.unWireEvents();\n }\n this.primaryBtnObj.destroy();\n this.secondaryBtnObj.destroy();\n _super.prototype.destroy.call(this);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n };\n SplitButton.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.primaryBtnClickHandler, this);\n EventHandler.add(this.getPopUpElement(), 'keydown', this.keyBoardHandler, this);\n new KeyboardEvents(this.element, {\n keyAction: this.btnKeyBoardHandler.bind(this),\n keyConfigs: {\n altdownarrow: 'alt+downarrow'\n }\n });\n };\n SplitButton.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.primaryBtnClickHandler);\n getInstance(this.element, KeyboardEvents).destroy();\n };\n SplitButton.prototype.primaryBtnClickHandler = function () {\n this.trigger('click', { element: this.element });\n };\n SplitButton.prototype.btnKeyBoardHandler = function (e) {\n switch (e.action) {\n case 'altdownarrow':\n this.clickHandler(e);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {SplitButtonModel} newProp\n * @param {SplitButtonModel} oldProp\n * @returns void\n */\n SplitButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var model = ['content', 'iconCss', 'iconPosition', 'cssClass', 'disabled', 'enableRtl'];\n this.primaryBtnObj.setProperties(getModel(newProp, model));\n model = ['items', 'beforeOpen', 'beforeItemRender', 'select', 'open',\n 'close', 'cssClass', 'disabled', 'enableRtl'];\n this.secondaryBtnObj.setProperties(getModel(newProp, model));\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.wrapper], oldProp.cssClass.split(' '));\n }\n addClass([this.wrapper], newProp.cssClass.split(' '));\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.wrapper], RTL);\n }\n else {\n removeClass([this.wrapper], RTL);\n }\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], SplitButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], SplitButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Collection([], Item)\n ], SplitButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"created\", void 0);\n SplitButton = __decorate([\n NotifyPropertyChanges\n ], SplitButton);\n return SplitButton;\n}(DropDownButton));\nexport { SplitButton };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { EventHandler, Property, NotifyPropertyChanges, Animation, attributes } from '@syncfusion/ej2-base';\nimport { Event, remove, removeClass } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar HIDESPINNER = 'e-hide-spinner';\nvar PROGRESS = 'e-progress';\nvar PROGRESSACTIVE = 'e-progress-active';\nvar CONTENTCLS = 'e-btn-content';\n/**\n * The ProgressButton visualizes the progression of an operation to indicate the user\n * that a process is happening in the background with visual representation.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ProgressButton = /** @class */ (function (_super) {\n __extends(ProgressButton, _super);\n /**\n * Constructor for creating the widget\n * @param {ProgressButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function ProgressButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.step = 1;\n return _this;\n }\n ProgressButton.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n /**\n * Initialize the Component rendering\n * @returns void\n * @private\n */\n ProgressButton.prototype.render = function () {\n _super.prototype.render.call(this);\n this.init();\n this.wireEvents();\n this.setAria();\n };\n /**\n * Starts the button progress at the specified percent.\n * @param percent Starts the button progress at this percent.\n * @returns void\n */\n ProgressButton.prototype.start = function (percent) {\n this.isPaused = false;\n this.startProgress(percent ? percent : this.percent, this.progressTime);\n };\n /**\n * Stops the button progress.\n * @returns void\n */\n ProgressButton.prototype.stop = function () {\n this.isPaused = true;\n cancelAnimationFrame(this.timerId);\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n ProgressButton.prototype.getModuleName = function () {\n return 'progress-btn';\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n ProgressButton.prototype.destroy = function () {\n var _this = this;\n var classList = [HIDESPINNER, PROGRESSACTIVE, 'e-round-corner', 'e-' + _super.prototype.getModuleName.call(this),\n 'e-spin-' + this.spinSettings.position.toLowerCase()];\n var css;\n _super.prototype.destroy.call(this);\n this.unWireEvents();\n this.element.innerHTML = '';\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], classList);\n css = this.element.getAttribute('class') ? ['aria-label', 'aria-valuemin', 'aria-valuemax', 'aria-valuenow']\n : ['aria-label', 'aria-valuemin', 'aria-valuemax', 'aria-valuenow', 'class'];\n css.forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n if (this.disabled) {\n this.element.removeAttribute('disabled');\n }\n };\n ProgressButton.prototype.init = function () {\n this.element.classList.add('e-' + _super.prototype.getModuleName.call(this));\n this.setContent();\n this.createSpinner();\n if (this.enableProgress) {\n this.createProgress();\n }\n };\n ProgressButton.prototype.createSpinner = function () {\n var spinner = this.createElement('span', { className: 'e-spinner' });\n this.setSpinPosition(spinner);\n createSpinner({\n target: spinner, width: this.spinSettings.width || 16, template: this.spinSettings.template\n }, this.createElement);\n };\n ProgressButton.prototype.setSpinPosition = function (ele) {\n var position = this.spinSettings.position || 'Left';\n if (position === 'Left' || position === 'Top') {\n this.element.insertBefore(ele, this.element.getElementsByClassName(CONTENTCLS)[0]);\n }\n else {\n this.element.appendChild(ele);\n }\n this.element.classList.add('e-spin-' + position.toLowerCase());\n };\n ProgressButton.prototype.createProgress = function () {\n this.element.appendChild(this.createElement('span', { className: PROGRESS }));\n };\n ProgressButton.prototype.setContent = function () {\n var cont = this.element.innerHTML;\n this.element.innerHTML = '';\n this.element.appendChild(this.createElement('span', { className: CONTENTCLS, innerHTML: cont }));\n };\n ProgressButton.prototype.clickHandler = function () {\n if (this.element.classList.contains(PROGRESSACTIVE)) {\n return;\n }\n this.startProgress();\n };\n ProgressButton.prototype.startProgress = function (percent, progressTime) {\n var _this = this;\n var clsList = this.element.classList;\n var isVertical = clsList.contains('e-vertical');\n clsList.add(PROGRESSACTIVE);\n if (!(clsList.contains(HIDESPINNER))) {\n showSpinner(this.element);\n if (!this.enableProgress) {\n setTimeout(function () {\n _this.hideSpin();\n // tslint:disable-next-line\n }, this.duration);\n }\n }\n if (this.enableProgress) {\n this.startAnimate(Date.now(), progressTime ? progressTime : 0, progressTime ? Date.now() - (this.duration * 1 / 100) : Date.now(), percent ? percent : 0, 0, this.step, 0, isVertical);\n }\n this.startContAnimate();\n };\n ProgressButton.prototype.startAnimate = function (timestamp, progressTime, prevTime, percent, prevPercent, step, prevProgressTime, isVertical) {\n var _this = this;\n try {\n var args_1;\n var timeDiff = timestamp - prevTime;\n var stepTime = this.duration * step / 100;\n var timeDiffBuffer = timeDiff ? (timeDiff < stepTime ? timeDiff - stepTime : timeDiff % stepTime) : 0;\n this.progressTime = progressTime = progressTime + timeDiff - timeDiffBuffer;\n prevTime = timestamp - timeDiffBuffer;\n percent = percent + (timeDiff - timeDiffBuffer) / this.duration * 100;\n prevPercent = ((progressTime - prevProgressTime) % stepTime === 0 || percent === 100) ? percent : prevPercent;\n args_1 = { percent: prevPercent, currentDuration: progressTime, step: step };\n if (percent === 0) {\n this.trigger('begin', args_1);\n }\n else if (percent === 100 || progressTime === this.duration) {\n this.trigger('end', args_1);\n }\n else {\n this.trigger('progress', args_1);\n }\n if (percent !== args_1.percent && args_1.percent !== prevPercent) {\n percent = args_1.percent;\n }\n this.percent = percent;\n this.step = args_1.step;\n if ((progressTime - prevProgressTime) % (this.duration * args_1.step / 100) === 0 || percent === 100) {\n this.timerId = requestAnimationFrame(function () {\n _this.element.getElementsByClassName(PROGRESS)[0]\n .style[isVertical ? 'height' : 'width'] = percent + '%';\n _this.element.setAttribute('aria-valuenow', percent.toString());\n });\n prevPercent = percent;\n prevProgressTime = progressTime;\n }\n if (!this.isPaused) {\n if (progressTime < this.duration && percent < 100) {\n setTimeout(function () {\n _this.startAnimate(Date.now(), progressTime, prevTime, percent, prevPercent, args_1.step, prevProgressTime, isVertical);\n // tslint:disable-next-line\n }, (this.duration / 100) - timeDiffBuffer);\n }\n else {\n setTimeout(function () {\n _this.progressTime = _this.percent = 0;\n _this.element.getElementsByClassName(PROGRESS)[0].style[isVertical ? 'height' : 'width'] = '0%';\n _this.element.setAttribute('aria-valuenow', '0');\n _this.hideSpin();\n // tslint:disable-next-line\n }, 100);\n }\n }\n }\n catch (e) {\n cancelAnimationFrame(this.timerId);\n this.trigger('fail', e);\n }\n };\n ProgressButton.prototype.startContAnimate = function () {\n var _this = this;\n var ele = this.element.getElementsByClassName(CONTENTCLS)[0];\n if (this.animationSettings.effect !== 'None') {\n (new Animation({})).animate(ele, {\n duration: this.animationSettings.duration,\n name: 'Progress' + this.animationSettings.effect,\n timingFunction: this.animationSettings.easing,\n begin: function () {\n if (_this.spinSettings.position === 'Center') {\n _this.setSpinnerSize();\n }\n },\n end: function () {\n ele.classList.add('e-animate-end');\n }\n });\n }\n else if (this.spinSettings.position === 'Center') {\n this.setSpinnerSize();\n }\n };\n ProgressButton.prototype.setSpinnerSize = function () {\n var ele = this.element.getElementsByClassName(CONTENTCLS)[0];\n var spinner = this.element.getElementsByClassName('e-spinner')[0];\n spinner.style.width = Math.max(spinner.offsetWidth, ele.offsetWidth) + 'px';\n spinner.style.height = Math.max(spinner.offsetHeight, ele.offsetHeight) + 'px';\n ele.classList.add('e-cont-animate');\n };\n ProgressButton.prototype.hideSpin = function () {\n var cont = this.element.getElementsByClassName(CONTENTCLS)[0];\n if (!(this.element.classList.contains(HIDESPINNER))) {\n hideSpinner(this.element);\n }\n this.element.classList.remove(PROGRESSACTIVE);\n if (this.animationSettings.effect !== 'None') {\n cont.classList.remove('e-animate-end');\n }\n if (this.spinSettings.position === 'Center') {\n var ele = this.element.getElementsByClassName('e-spinner')[0];\n cont.classList.remove('e-cont-animate');\n ele.style.width = 'auto';\n ele.style.height = 'auto';\n }\n };\n ProgressButton.prototype.setIconSpan = function () {\n var cont = this.element.getElementsByClassName(CONTENTCLS)[0];\n var iconSpan = this.element.getElementsByClassName('e-btn-icon')[0];\n if (cont.childNodes[0] && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n cont.insertBefore(iconSpan, cont.childNodes[0]);\n }\n else {\n cont.appendChild(iconSpan);\n }\n };\n ProgressButton.prototype.setAria = function () {\n attributes(this.element, {\n 'aria-label': this.element.textContent + ' progress', 'aria-valuemin': '0', 'aria-valuemax': '100', 'aria-valuenow': '0'\n });\n };\n ProgressButton.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n };\n ProgressButton.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n };\n /**\n * Called internally if any of the property value changed.\n * @param {ProgressButton} newProp\n * @param {ProgressButton} oldProp\n * @returns void\n * @private\n */\n ProgressButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n this.setContent();\n this.createSpinner();\n if (this.enableProgress) {\n this.createProgress();\n }\n this.element.setAttribute('aria-label', this.element.textContent + ' progress');\n break;\n case 'iconCss':\n if (!oldProp.iconCss) {\n this.setIconSpan();\n }\n break;\n case 'iconPosition':\n this.setIconSpan();\n break;\n case 'enableProgress':\n if (newProp.enableProgress) {\n this.createProgress();\n }\n else {\n remove(this.element.getElementsByClassName(PROGRESS)[0]);\n }\n break;\n }\n }\n };\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"enableProgress\", void 0);\n __decorate([\n Property(2000)\n ], ProgressButton.prototype, \"duration\", void 0);\n __decorate([\n Property('Left')\n ], ProgressButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], ProgressButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], ProgressButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], ProgressButton.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"isToggle\", void 0);\n __decorate([\n Property({ template: null, width: 16, position: 'Left' })\n ], ProgressButton.prototype, \"spinSettings\", void 0);\n __decorate([\n Property({ duration: 400, effect: 'None', easing: 'ease' })\n ], ProgressButton.prototype, \"animationSettings\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"fail\", void 0);\n ProgressButton = __decorate([\n NotifyPropertyChanges\n ], ProgressButton);\n return ProgressButton;\n}(Button));\nexport { ProgressButton };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HIDEHEX = 'e-hide-hex-value';\nvar HIDEOPACITY = 'e-hide-opacity';\nvar HIDERGBA = 'e-hide-switchable-value';\nvar HIDEVALUE = 'e-hide-value';\nvar HIDEVALUESWITCH = 'e-hide-valueswitcher';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar OPACITY = 'e-opacity-value';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SHOWVALUE = 'e-show-value';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n };\n /**\n * To Initialize the component rendering\n * @private\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n if (!this.enableOpacity) {\n addClass([this.container.parentElement], HIDEOPACITY);\n }\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false' });\n this.container = this.createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value ? this.roundValue(this.value).toLowerCase() : '#008000ff';\n this.element.value = value.slice(0, 7);\n this.setProperties({ 'value': value }, true);\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n this.isRgb = true;\n this.createInput();\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = this.createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n beforeOpen: this.beforeOpenFn.bind(this),\n open: this.onOpen.bind(this),\n beforeClose: this.beforePopupClose.bind(this),\n click: function (args) {\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }\n });\n }\n });\n this.splitBtn.createElement = this.createElement;\n this.splitBtn.appendTo(splitButton);\n var preview = this.createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();\n }\n };\n ColorPicker.prototype.onOpen = function (args) {\n this.trigger('open', { element: this.container });\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.beforeOpenFn = function (args) {\n var beforeOpenArgs = { element: this.container, event: args.event, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs);\n args.cancel = beforeOpenArgs.cancel;\n if (!args.cancel) {\n var popupEle = this.getPopupEle();\n popupEle.style.top = formatUnit(0 + pageYOffset);\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.display = 'block';\n this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n this.modal = this.createElement('div');\n this.modal.className = 'e-' + this.getModuleName() + ' e-modal';\n this.modal.style.display = 'none';\n document.body.insertBefore(this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n this.modal.style.display = 'block';\n this.modal.style.zIndex = (Number(popupEle.style.zIndex) - 1).toString();\n }\n }\n };\n ColorPicker.prototype.beforePopupClose = function (args) {\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: this.container, event: args.event, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (Browser.isDevice && args.event.target === this.modal) {\n beforeCloseArgs.cancel = true;\n }\n args.cancel = beforeCloseArgs.cancel;\n if (!args.cancel) {\n this.onPopupClose();\n }\n }\n };\n ColorPicker.prototype.onPopupClose = function () {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = this.createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = this.createElement('div', { className: PALETTES, attrs: { 'tabindex': '0' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n var roundedColor;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = this.createElement('div', {\n className: 'e-row', attrs: { 'role': 'row' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value === roundedColor) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = this.convertToRgbString(this.hexToRgb(roundedColor));\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = selectAll('.e-row')[0].children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n refEle ? this.container.insertBefore(ele, refEle) : this.container.appendChild(ele);\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = this.createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(this.createElement('div', { className: HSVAREA }));\n var dragHandler = this.createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = this.createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = this.createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = this.createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n });\n this.hueSlider.createElement = this.createElement;\n this.hueSlider.appendTo(slider);\n if (this.enableOpacity) {\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.createOpacitySlider(slider);\n }\n };\n ColorPicker.prototype.createOpacitySlider = function (slider) {\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n });\n this.opacitySlider.createElement = this.createElement;\n this.opacitySlider.appendTo(slider);\n var opacityBgTrack = this.createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n select('.e-slider-track', this.opacitySlider.element).style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n getInstance(select('.' + OPACITY, this.container), NumericTextBox).value = value;\n }\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = this.createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = this.createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = this.createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.createNumericInput = function (element, value, label, max) {\n var _this = this;\n var numericInput = new NumericTextBox({\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n });\n numericInput.createElement = this.createElement;\n numericInput.appendTo(element);\n };\n ColorPicker.prototype.createInput = function () {\n var isPicker = this.isPicker();\n var wrapper = this.getWrapper();\n if ((isPicker && !wrapper.classList.contains(HIDEVALUE)) || (!isPicker && wrapper.classList.contains(SHOWVALUE))) {\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n isPicker ? this.appendElement(inputWrap, 2) : this.appendElement(inputWrap, 1);\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n if (!wrapper.classList.contains(HIDEVALUESWITCH)) {\n this.appendValueSwitchBtn(inputWrap);\n }\n if (!wrapper.classList.contains(HIDEHEX)) {\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false' }\n });\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true\n }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n hexInput.addEventListener('input', this.inputHandler.bind(this));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n var label = void 0;\n var value = void 0;\n if (this.isRgb) {\n label = 'RGB';\n value = this.rgb;\n }\n else {\n label = 'HSV';\n value = this.hsv;\n }\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })), value[i], label[i], 255);\n }\n if (this.enableOpacity) {\n this.appendOpacityValue(container);\n }\n }\n }\n };\n ColorPicker.prototype.appendOpacityValue = function (container) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: OPACITY })), this.rgb[3] * 100, 'A', 100);\n };\n ColorPicker.prototype.appendValueSwitchBtn = function (targetEle) {\n var valueSwitchBtn = this.createElement('button', { className: 'e-icons e-btn e-flat e-icon-btn ' + FORMATSWITCH });\n targetEle.appendChild(valueSwitchBtn);\n if (this.isPicker() && !this.getWrapper().classList.contains(HIDERGBA)) {\n valueSwitchBtn.addEventListener('click', this.formatSwitchHandler.bind(this));\n }\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = this.createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = this.createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = this.createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.createElement = this.createElement;\n tooltip.appendTo(this.container);\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n select('.e-tip-content', this.tooltipEle).appendChild(this.createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n enable ? this.getWrapper().classList.add(DISABLED) : this.getWrapper().classList.remove(DISABLED);\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n enable ? attributes(ele, { 'disabled': '' }) : ele.removeAttribute('disabled');\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey);\n };\n ColorPicker.prototype.updateInput = function (value) {\n var wrapper = this.getWrapper();\n if (!wrapper.classList.contains(HIDEVALUE)) {\n if (!wrapper.classList.contains(HIDEHEX)) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n if (this.isRgb) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n if (this.enableOpacity) {\n this.updateOpacitySliderBg();\n }\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n * @param value - Specify the color value.\n * @param type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @return {string}\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n * @method toggle\n * @return {void}\n */\n ColorPicker.prototype.toggle = function () {\n this.splitBtn.toggle();\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n EventHandler.add(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler, this);\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13:\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue, e);\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.toggle();\n this.onPopupClose();\n }\n };\n ColorPicker.prototype.triggerChangeEvent = function (value) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }\n });\n this.setProperties({ 'value': value }, true);\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n e.preventDefault();\n var x;\n var y;\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat();\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n var left = parseInt(dragHandler.style.left, 10);\n var top = parseInt(dragHandler.style.top, 10);\n this.updateHsv();\n this.convertToOtherFormat();\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function (e) {\n var target = e.target.parentElement;\n if (this.isRgb) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n this.isRgb = false;\n }\n else {\n this.updateValue(this.rgb, true, 2);\n this.isRgb = true;\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (this.enableOpacity && hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n this.updateOpacitySliderBg();\n }\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n else {\n if (this.getWrapper().classList.contains(SHOWVALUE) && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler(e);\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains(SHOWVALUE)) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele, e) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '', e);\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n idx < 0 ? idx += n + emptyCount : idx %= n + emptyCount;\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX':\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value);\n }\n else {\n return;\n }\n break;\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n var eventArgs = {\n currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n };\n if (!this.showButtons && !isKey) {\n eventArgs.previousValue = { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) };\n this.trigger('change', eventArgs);\n this.setProperties({ 'value': cValue }, true);\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', eventArgs);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n detach(this.element.nextElementSibling);\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n this.container = null;\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n this.hueSlider.destroy();\n if (this.enableOpacity) {\n this.opacitySlider.destroy();\n this.opacitySlider = null;\n }\n this.hueSlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var wrapper = this.getWrapper();\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n i = Math.floor(h);\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 r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateInput(newProp);\n }\n else {\n this.removeTileSelection();\n this.addTileSelection(select('span[aria-label=\"' + this.roundValue(newProp) + '\"]', this.container));\n }\n this.element.value = newProp.slice(0, 7);\n };\n ColorPicker.prototype.setInputEleProps = function (prop) {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps(newProp);\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n ColorPicker.prototype.changeOpacityProps = function (newProp) {\n var wrapper = this.getWrapper();\n if (newProp) {\n removeClass([this.container.parentElement], HIDEOPACITY);\n this.createOpacitySlider(select('.e-colorpicker-slider', this.container).appendChild(this.createElement('div', { className: 'e-opacity-slider' })));\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n this.appendOpacityValue(select('.e-input-container', this.container));\n }\n }\n else {\n addClass([this.container.parentElement], HIDEOPACITY);\n this.opacitySlider.destroy();\n remove(this.opacitySlider.element);\n this.opacitySlider = null;\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n remove(select('.' + OPACITY, this.container).parentElement);\n }\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {ColorPickerModel} newProp\n * @param {ColorPickerModel} oldProp\n * @returns void\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var wrapper = this.getWrapper();\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n if (newProp.value) {\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor = newProp.value;\n }\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this_1.getWrapper().appendChild(this_1.container);\n this_1.splitBtn.destroy();\n detach(this_1.element.nextElementSibling);\n if (!this_1.container.children.length) {\n this_1.createWidget();\n }\n }\n else {\n this_1.destroyOtherComp();\n this_1.unWireEvents();\n this_1.container.innerHTML = '';\n this_1.createSplitBtn();\n }\n break;\n case 'cssClass':\n this_1.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n var props = newProp.cssClass.split(' ').concat(oldProp.cssClass.split(' '));\n props = props.reduce(function (a, b) { if (a.indexOf(b) < 0) {\n a.push(b);\n } return a; }, []);\n var count_1 = 0;\n props.forEach(function (cls) {\n if (count_1 === 0 &&\n (cls === HIDEVALUE || cls === HIDEVALUESWITCH || cls === SHOWVALUE || cls === HIDEHEX || cls === HIDERGBA)) {\n var inputWrap = select('.' + INPUTWRAPPER, _this.container);\n if (inputWrap) {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n _this.createInput();\n count_1++;\n }\n });\n break;\n case 'enableRtl':\n if (this_1.isPicker()) {\n this_1.hueSlider.enableRtl = newProp.enableRtl;\n if (this_1.enableOpacity) {\n this_1.opacitySlider.enableRtl = newProp.enableRtl;\n }\n this_1.setInputEleProps(newProp.enableRtl);\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n this_1.changeValueProp(newProp.value);\n break;\n case 'showButtons':\n this_1.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this_1.switchToPicker();\n }\n else {\n this_1.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this_1.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this_1.isPicker()) {\n this_1.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this_1.mode === 'Palette' && !this_1.modeSwitcher) {\n this_1.setNoColor();\n }\n }\n else {\n this_1.changePaletteProps();\n }\n break;\n case 'enableOpacity':\n this_1.changeOpacityProps(newProp.enableOpacity);\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n __decorate([\n Property('#008000ff')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"enableOpacity\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"created\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, setValue, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-textbox';\nvar CONTROL = 'e-control';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n __extends(TextBox, _super);\n function TextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n TextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'floatLabelType':\n Input.removeFloating(this.textboxWrapper);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textboxWrapper.container);\n break;\n case 'value':\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n if (!this.isBlank(this.value)) {\n this.value = this.value.toString();\n }\n this.isProtectedOnChange = prevOnChange;\n Input.setValue(this.value, this.element, this.floatLabelType, this.showClearButton);\n this.raiseChangeEvent();\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.element);\n break;\n case 'type':\n this.element.setAttribute('type', this.type);\n this.raiseChangeEvent();\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.element, this.textboxWrapper);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.textboxWrapper.container]);\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.element);\n break;\n case 'cssClass':\n Input.setCssClass(this.cssClass, [this.textboxWrapper.container]);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n break;\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n TextBox.prototype.getModuleName = function () {\n return 'textbox';\n };\n TextBox.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n TextBox.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-TEXTBOX') {\n var ejInstance = getValue('ej2_instances', this.element);\n var inputElement = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n var attributes = this.element.attributes;\n this.checkAttributes(attributes);\n this.element.setAttribute('type', this.type);\n this.globalize = new Internationalization(this.locale);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('textbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('textbox'));\n }\n if (!this.element.hasAttribute('name')) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n };\n TextBox.prototype.checkAttributes = function (attrs) {\n for (var i = 0; i < attrs.length; i++) {\n var key = attrs[i].nodeName;\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attrs[i].nodeValue }, true);\n }\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TextBox.prototype.render = function () {\n this.textboxWrapper = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n cssClass: this.cssClass,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.wireEvents();\n if (this.element.value !== '') {\n this.value = this.element.value;\n }\n if (!isNullOrUndefined(this.value)) {\n Input.setValue(this.value, this.element, this.floatLabelType, this.showClearButton);\n }\n };\n TextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n }\n };\n TextBox.prototype.focusHandler = function (args) {\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n };\n TextBox.prototype.focusOutHandler = function (args) {\n if (!(this.previousValue === null && this.value === null && this.element.value === '') &&\n (this.previousValue !== this.element.value)) {\n this.raiseChangeEvent(args, true);\n }\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n };\n TextBox.prototype.inputHandler = function (args) {\n var eventArgs = {\n event: args,\n value: this.element.value,\n previousValue: this.value,\n container: this.textboxWrapper.container\n };\n this.trigger('input', eventArgs);\n };\n TextBox.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.element.value }, true);\n this.raiseChangeEvent(args, true);\n };\n TextBox.prototype.raiseChangeEvent = function (event, interaction) {\n var eventArgs = {\n event: event,\n value: this.value,\n previousValue: this.previousValue,\n container: this.textboxWrapper.container,\n isInteraction: interaction ? interaction : false\n };\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n };\n TextBox.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR))) {\n Input.setValue('', this.element, this.floatLabelType, this.showClearButton);\n }\n };\n TextBox.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also, it maintains the initial TextBox element from the DOM.\n * @method destroy\n * @return {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n this.textboxWrapper.container.parentElement.appendChild(this.cloneElement);\n detach(this.textboxWrapper.container);\n this.textboxWrapper = null;\n this.cloneElement.classList.remove(ROOT, CONTROL);\n _super.prototype.destroy.call(this);\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n * @param { { [key: string]: string } } attributes - Specifies the attributes to be add to TextBox element.\n * @return {void}\n */\n TextBox.prototype.addAttributes = function (attributes) {\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.element);\n }\n else if (key === 'class') {\n this.element.classList.add(attributes[key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[key] }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n }\n else {\n this.element.setAttribute(key, attributes[key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextBox element.\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @return {void}\n */\n TextBox.prototype.removeAttributes = function (attributes) {\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.element);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n }\n else {\n this.element.removeAttribute(key);\n }\n }\n };\n __decorate([\n Property('text')\n ], TextBox.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"value\", void 0);\n __decorate([\n Property('Never')\n ], TextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property('')\n ], TextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], TextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"input\", void 0);\n TextBox = __decorate([\n NotifyPropertyChanges\n ], TextBox);\n return TextBox;\n}(Component));\nexport { TextBox };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { detach, addClass, removeClass, closest, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar RTL = 'e-rtl';\nvar LINK = 'e-day';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar CLOSEDURATION = 200;\nvar OFFSETVALUE = 4;\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousElementValue = '';\n _this.isDateIconClicked = false;\n _this.keyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n tab: 'tab'\n };\n _this.calendarKeyConfigs = {\n escape: 'escape',\n enter: 'enter',\n tab: 'tab'\n };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n };\n DatePicker.prototype.setAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n };\n DatePicker.prototype.initialize = function () {\n this.createInput();\n this.setAllowEdit();\n this.updateInput();\n this.previousElementValue = this.inputElement.value;\n this.previousDate = new Date(+this.value);\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: null };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n }, this.createElement);\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function () {\n if (this.value && !this.isCalendar()) {\n this.disabledDates();\n }\n if (+new Date('' + this.value)) { // persis the value property. \n if (typeof this.value === 'string') {\n this.value = this.checkDateValue(new Date('' + this.value));\n var dateOptions = void 0;\n if (this.getModuleName() === 'datetimepicker') {\n dateOptions = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n var dateString = this.globalize.formatDate(this.value, dateOptions);\n this.setProperties({ value: this.globalize.parseDate(dateString, dateOptions) }, true);\n }\n }\n else {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.validateDate.call(this);\n this.minMaxUpdates();\n _super.prototype.minMaxUpdate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n dateString = this.globalize.formatDate(this.value, { format: tempFormat, type: 'dateTime', skeleton: 'yMd' });\n }\n else {\n dateString = this.globalize.formatDate(this.value, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\n }\n if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n if (!this.strictMode && value) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n }\n if (isNullOrUndefined(this.value) && this.strictMode) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.changedArgs = { value: this.value };\n this.errorClass();\n };\n ;\n DatePicker.prototype.minMaxUpdates = function () {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n };\n DatePicker.prototype.bindEvents = function () {\n if (this.enabled) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n // To prevent the twice triggering.\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.resetFormHandler, this);\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n }\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n };\n DatePicker.prototype.resetFormHandler = function () {\n if (this.inputElement.getAttribute('value')) {\n this.value = this.checkDateValue(new Date('' + this.element.getAttribute('value')));\n }\n else {\n this.value = null;\n if (this.inputElement) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n removeClass([this.inputWrapper.container], ERROR);\n }\n }\n };\n DatePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n this.changeEvent(event);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.isDateIconClicked = true;\n this.show(null, e);\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n };\n DatePicker.prototype.CalendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show(null, e);\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n case 'tab':\n this.hide(e);\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n var focusArguments = {\n model: this\n };\n this.isDateIconClicked = false;\n this.trigger('focus', focusArguments);\n };\n DatePicker.prototype.inputBlurHandler = function (e) {\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.getModuleName() === 'datepicker') {\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n if (this.isCalendar()) {\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.CalendarKeyActionHandle.bind(this),\n keyConfigs: this.calendarKeyConfigs\n });\n }\n };\n DatePicker.prototype.documentHandler = function (e) {\n if (e.type !== 'touchstart') {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper'))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))) {\n this.hide(e);\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n switch (e.action) {\n case 'altUpArrow':\n this.hide(e);\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n if (this.getModuleName() === 'datepicker') {\n this.show(null, e);\n }\n break;\n case 'escape':\n this.hide(e);\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.isCalendar()) {\n e.preventDefault();\n }\n break;\n case 'tab':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n this.hide(e);\n break;\n default:\n this.previousDate = ((!isNullOrUndefined(this.value) && new Date(+this.value)) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n if (this.getModuleName() === 'datetimepicker') {\n format = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n }\n else {\n format = isNullOrUndefined(this.format) ? this.format : this.format.replace('dd', 'd');\n }\n if (!isNullOrUndefined(format)) {\n var len = format.split('M').length - 1;\n if (len < 3) {\n format = format.replace('MM', 'M');\n }\n }\n var dateOptions;\n if (this.getModuleName() === 'datetimepicker') {\n dateOptions = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n var date;\n if ((this.getModuleName() === 'datetimepicker')) {\n if (this.checkDateValue(this.globalize.parseDate(this.inputElement.value, dateOptions))) {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, { type: 'dateTime', skeleton: 'yMd' });\n }\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n }\n if (this.strictMode && date) {\n Input.setValue(this.globalize.formatDate(date, dateOptions), this.inputElement, this.floatLabelType, this.showClearButton);\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === '') {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = this.createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n open: function () {\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement) {\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.CalendarKeyActionHandle.bind(_this),\n keyConfigs: _this.calendarKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.CalendarKeyActionHandle.bind(_this),\n keyConfigs: _this.calendarKeyConfigs\n });\n }\n }\n }, close: function () {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n if (_this.value) {\n _this.disabledDates();\n }\n if (_this.popupObj) {\n _this.popupObj.destroy();\n }\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.setAriaAttributes();\n }\n });\n this.popupObj.element.className += ' ' + this.cssClass;\n this.setAriaAttributes();\n };\n DatePicker.prototype.modelHeader = function () {\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var yearHeading = this.createElement('h1', { className: 'e-model-year' });\n var h2 = this.createElement('div');\n var daySpan = this.createElement('span', { className: 'e-model-day' });\n var monthSpan = this.createElement('span', { className: 'e-model-month' });\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'y', skeleton: 'dateTime' });\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'E', skeleton: 'dateTime' }) + ', ';\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'MMM d', skeleton: 'dateTime' });\n modelHeader.appendChild(yearHeading);\n h2.appendChild(daySpan);\n h2.appendChild(monthSpan);\n modelHeader.appendChild(h2);\n this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n };\n DatePicker.prototype.changeTrigger = function (event) {\n if (this.inputElement.value !== this.previousElementValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.value = this.value;\n this.changedArgs.event = event || null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n this.trigger('change', this.changedArgs);\n this.previousElementValue = this.inputElement.value;\n this.previousDate = new Date('' + this.value);\n }\n }\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.changeEvent = function (event) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.selectCalendar(event);\n this.changedArgs.event = event ? event : null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n this.trigger('change', this.changedArgs);\n this.previousDate = this.value && new Date(+this.value);\n this.hide(event);\n this.previousElementValue = this.inputElement.value;\n this.errorClass();\n }\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\n if (this.getModuleName() === 'datetimepicker') {\n tempFormat = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n }\n else {\n tempFormat = this.format;\n }\n if (this.value) {\n if (this.getModuleName() === 'datetimepicker') {\n date = this.globalize.formatDate(this.changedArgs.value, { format: tempFormat, type: 'dateTime', skeleton: 'yMd' });\n }\n else {\n date = this.globalize.formatDate(this.changedArgs.value, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\n }\n }\n if (!isNullOrUndefined(date)) {\n Input.setValue(date, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /**\n * Shows the Calendar.\n * @returns void\n */\n DatePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n var prevent_1 = true;\n var outOfRange = void 0;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +this.min && +this.value <= +this.max)) {\n outOfRange = new Date('' + this.value);\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent_1 = false;\n },\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n appendTo: document.body\n };\n this.trigger('open', this.preventArgs);\n if (prevent_1 && !this.preventArgs.cancel) {\n addClass(this.inputWrapper.buttons, ACTIVE);\n this.preventArgs.appendTo.appendChild(this.popupWrapper);\n this.popupObj.refreshPosition(this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION,\n };\n if (this.zIndex === 1000) {\n this.popupObj.show(new Animation(openAnimation), this.element);\n }\n else {\n this.popupObj.show(new Animation(openAnimation), null);\n }\n this.setAriaAttributes();\n }\n else {\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n }\n };\n /**\n * Hide the Calendar.\n * @returns void\n */\n DatePicker.prototype.hide = function (event) {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var prevent_2 = true;\n this.preventArgs = {\n preventDefault: function () {\n prevent_2 = false;\n },\n popup: this.popupObj,\n event: event || null,\n cancel: false\n };\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n if (this.isCalendar()) {\n this.trigger('close', this.preventArgs);\n }\n if (this.isCalendar() && (prevent_2 && !this.preventArgs.cancel)) {\n var closeAnimation = {\n name: 'FadeOut',\n duration: CLOSEDURATION,\n };\n this.popupObj.hide();\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n this.previousElementValue = this.inputElement.value;\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n }\n if (Browser.isDevice) {\n this.element.removeAttribute('readonly');\n }\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DatePicker.prototype.focusIn = function (triggerEvent) {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DatePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n /**\n * Gets the current view of the DatePicker.\n * @returns string\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /**\n * Navigates to specified month or year or decade view of the DatePicker.\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DatePicker.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.keyboardModules.destroy();\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttrs, this.inputElement);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n if (this.ngTag === null) {\n if (this.inputElement) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n removeClass([this.inputElement], [INPUTROOT]);\n }\n removeClass([this.element], [ROOT]);\n detach(this.inputWrapper.container);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.inputEleCopy.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.inputEleCopy.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputEleCopy = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.formElement = closest(this.inputElement, 'form');\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n if (this.ngTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes();\n _super.prototype.preRender.call(this);\n };\n ;\n DatePicker.prototype.validationAttribute = function (target, inputElement) {\n var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n inputElement.setAttribute('name', nameAttribute);\n target.removeAttribute('name');\n var attribute = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attribute.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n continue;\n }\n var attr = target.getAttribute(attribute[i]);\n inputElement.setAttribute(attribute[i], attr);\n target.removeAttribute(attribute[i]);\n }\n };\n DatePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes = ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n options = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ enabled: !enabled }, true);\n break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (this.placeholder === null) {\n var placeholder = this.inputElement.getAttribute(prop);\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (!this.value) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), true);\n }\n break;\n case 'min':\n if (+this.min === +new Date(1900, 0, 1)) {\n this.setProperties(setValue(prop, this.globalize.parseDate(this.inputElement.getAttribute(prop)), {}), true);\n }\n break;\n case 'max':\n if (+this.max === +new Date(2099, 11, 31)) {\n this.setProperties(setValue(prop, this.globalize.parseDate(this.inputElement.getAttribute(prop)), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function () {\n var valueCopy;\n valueCopy = this.checkDateValue(this.value) ? new Date(+this.value) : new Date('' + this.value);\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n this.minMaxUpdates();\n _super.prototype.render.call(this);\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n this.setProperties({ value: valueCopy }, true);\n }\n }\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n inputVal = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n inputVal = this.globalize.formatDate(valueCopy, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\n }\n Input.setValue(inputVal, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DatePicker.prototype.setAriaAttributes = function () {\n if (this.isCalendar()) {\n Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n attributes(this.inputElement, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n }\n else {\n Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n attributes(this.inputElement, {\n 'aria-activedescendant': 'null'\n });\n }\n };\n DatePicker.prototype.errorClass = function () {\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n var isDisabledDate = this.calendarElement &&\n this.calendarElement.querySelectorAll(dateIdString)[0] &&\n this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n if ((!isNullOrUndefined(this.value) && !(+new Date(+this.value).setMilliseconds(0) >= +this.min\n && +new Date(+this.value).setMilliseconds(0) <= +this.max))\n || (!this.strictMode && this.inputElement.value !== '' && isNullOrUndefined(this.value) || isDisabledDate)) {\n addClass([this.inputWrapper.container], ERROR);\n }\n else {\n removeClass([this.inputWrapper.container], ERROR);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var options = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (typeof newProp.value === 'string') {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n this.setProperties({ value: newProp.value }, true);\n }\n this.previousElementValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput();\n this.changeTrigger(null);\n break;\n case 'format':\n this.updateInput();\n break;\n case 'allowEdit':\n this.setAllowEdit();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n this.bindEvents();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupWrapper) {\n this.popupWrapper.className += ' ' + newProp.cssClass;\n }\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'strictMode':\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n default:\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n this.hide(null);\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","import { DataUtil } from './util';\n/**\n * Query class is used to build query which is used by the DataManager to communicate with datasource.\n */\nvar Query = /** @class */ (function () {\n /**\n * Constructor for Query class.\n * @param {string|string[]} from?\n * @hidden\n */\n function Query(from) {\n /** @hidden */\n this.subQuery = null;\n /** @hidden */\n this.isChild = false;\n /** @hidden */\n this.distincts = [];\n this.queries = [];\n this.key = '';\n this.fKey = '';\n if (typeof from === 'string') {\n this.fromTable = from;\n }\n else if (from && from instanceof Array) {\n this.lookups = from;\n }\n this.expands = [];\n this.sortedColumns = [];\n this.groupedColumns = [];\n this.subQuery = null;\n this.isChild = false;\n this.params = [];\n return this;\n }\n /**\n * Sets the primary key.\n * @param {string} field - Defines the column field.\n */\n Query.prototype.setKey = function (field) {\n this.key = field;\n return this;\n };\n /**\n * Sets default DataManager to execute query.\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.using = function (dataManager) {\n this.dataManager = dataManager;\n return this;\n };\n /**\n * Executes query with the given DataManager.\n * @param {DataManager} dataManager - Defines the DataManager.\n * @param {Function} done - Defines the success callback.\n * @param {Function} fail - Defines the failure callback.\n * @param {Function} always - Defines the callback which will be invoked on either success or failure.\n *\n *
\n     * let dataManager: DataManager = new DataManager([{ ID: '10' }, { ID: '2' }, { ID: '1' }, { ID: '20' }]);\n     * let query: Query = new Query();\n     * query.sortBy('ID', (x: string, y: string): number => { return parseInt(x, 10) - parseInt(y, 10) });\n     * let promise: Promise< Object > = query.execute(dataManager);\n     * promise.then((e: { result: Object }) => { });\n     * 
\n */\n Query.prototype.execute = function (dataManager, done, fail, always) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeQuery(this, done, fail, always);\n }\n return DataUtil.throwError('Query - execute() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Executes query with the local datasource.\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.executeLocal = function (dataManager) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeLocal(this);\n }\n return DataUtil.throwError('Query - executeLocal() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Creates deep copy of the Query object.\n */\n Query.prototype.clone = function () {\n var cloned = new Query();\n cloned.queries = this.queries.slice(0);\n cloned.key = this.key;\n cloned.isChild = this.isChild;\n cloned.dataManager = this.dataManager;\n cloned.fromTable = this.fromTable;\n cloned.params = this.params.slice(0);\n cloned.expands = this.expands.slice(0);\n cloned.sortedColumns = this.sortedColumns.slice(0);\n cloned.groupedColumns = this.groupedColumns.slice(0);\n cloned.subQuerySelector = this.subQuerySelector;\n cloned.subQuery = this.subQuery;\n cloned.fKey = this.fKey;\n cloned.isCountRequired = this.isCountRequired;\n cloned.distincts = this.distincts.slice(0);\n return cloned;\n };\n /**\n * Specifies the name of table to retrieve data in query execution.\n * @param {string} tableName - Defines the table name.\n */\n Query.prototype.from = function (tableName) {\n this.fromTable = tableName;\n return this;\n };\n /**\n * Adds additional parameter which will be sent along with the request which will be generated while DataManager execute.\n * @param {string} key - Defines the key of additional parameter.\n * @param {Function|string} value - Defines the value for the key.\n */\n Query.prototype.addParams = function (key, value) {\n if (typeof value === 'function') {\n this.params.push({ key: key, fn: value });\n }\n else {\n this.params.push({ key: key, value: value });\n }\n return this;\n };\n /**\n * @hidden\n */\n Query.prototype.distinct = function (fields) {\n if (typeof fields === 'string') {\n this.distincts = [].slice.call([fields], 0);\n }\n else {\n this.distincts = fields.slice(0);\n }\n return this;\n };\n /**\n * Expands the related table.\n * @param {string|Object[]} tables\n */\n Query.prototype.expand = function (tables) {\n if (typeof tables === 'string') {\n this.expands = [].slice.call([tables], 0);\n }\n else {\n this.expands = tables.slice(0);\n }\n return this;\n };\n /**\n * Filter data with given filter criteria.\n * @param {string|Predicate} fieldName - Defines the column field or Predicate.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string|number|boolean} value - Defines the values to match with data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Query.prototype.where = function (fieldName, operator, value, ignoreCase, ignoreAccent) {\n operator = operator ? (operator).toLowerCase() : null;\n var predicate = null;\n if (typeof fieldName === 'string') {\n predicate = new Predicate(fieldName, operator, value, ignoreCase, ignoreAccent);\n }\n else if (fieldName instanceof Predicate) {\n predicate = fieldName;\n }\n this.queries.push({\n fn: 'onWhere',\n e: predicate\n });\n return this;\n };\n /**\n * Search data with given search criteria.\n * @param {string|number|boolean} searchKey - Defines the search key.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n * @param {string} operator - Defines the operator how to search data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Query.prototype.search = function (searchKey, fieldNames, operator, ignoreCase, ignoreAccent) {\n if (typeof fieldNames === 'string') {\n fieldNames = [fieldNames];\n }\n operator = operator || 'contains';\n var comparer = DataUtil.fnOperators[operator];\n this.queries.push({\n fn: 'onSearch',\n e: {\n fieldNames: fieldNames,\n operator: operator,\n searchKey: searchKey,\n ignoreCase: ignoreCase,\n ignoreAccent: ignoreAccent,\n comparer: comparer\n }\n });\n return this;\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n */\n Query.prototype.sortBy = function (fieldName, comparer, isFromGroup) {\n var order = 'ascending';\n var sorts;\n var temp;\n if (typeof fieldName === 'string' && DataUtil.endsWith(fieldName.toLowerCase(), ' desc')) {\n fieldName = fieldName.replace(/ desc$/i, '');\n comparer = 'descending';\n }\n if (!comparer || typeof comparer === 'string') {\n order = comparer ? comparer.toLowerCase() : 'ascending';\n comparer = DataUtil.fnSort(comparer);\n }\n if (isFromGroup) {\n sorts = Query.filterQueries(this.queries, 'onSortBy');\n for (var i = 0; i < sorts.length; i++) {\n temp = sorts[i].e.fieldName;\n if (typeof temp === 'string') {\n if (temp === fieldName) {\n return this;\n }\n }\n else if (temp instanceof Array) {\n for (var j = 0; j < temp.length; j++) {\n if (temp[j] === fieldName || fieldName.toLowerCase() === temp[j] + ' desc') {\n return this;\n }\n }\n }\n }\n }\n this.queries.push({\n fn: 'onSortBy',\n e: {\n fieldName: fieldName,\n comparer: comparer,\n direction: order\n }\n });\n return this;\n };\n /**\n * Sorts data in descending order.\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.sortByDesc = function (fieldName) {\n return this.sortBy(fieldName, 'descending');\n };\n /**\n * Groups data with the given field name.\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.group = function (fieldName, fn, format) {\n this.sortBy(fieldName, null, true);\n this.queries.push({\n fn: 'onGroup',\n e: {\n fieldName: fieldName,\n comparer: fn ? fn : null,\n format: format ? format : null\n }\n });\n return this;\n };\n /**\n * Gets data based on the given page index and size.\n * @param {number} pageIndex - Defines the current page index.\n * @param {number} pageSize - Defines the no of records per page.\n */\n Query.prototype.page = function (pageIndex, pageSize) {\n this.queries.push({\n fn: 'onPage',\n e: {\n pageIndex: pageIndex,\n pageSize: pageSize\n }\n });\n return this;\n };\n /**\n * Gets data based on the given start and end index.\n * @param {number} start - Defines the start index of the datasource.\n * @param {number} end - Defines the end index of the datasource.\n */\n Query.prototype.range = function (start, end) {\n this.queries.push({\n fn: 'onRange',\n e: {\n start: start,\n end: end\n }\n });\n return this;\n };\n /**\n * Gets data from the top of the data source based on given number of records count.\n * @param {number} nos - Defines the no of records to retrieve from datasource.\n */\n Query.prototype.take = function (nos) {\n this.queries.push({\n fn: 'onTake',\n e: {\n nos: nos\n }\n });\n return this;\n };\n /**\n * Skips data with given number of records count from the top of the data source.\n * @param {number} nos - Defines the no of records skip in the datasource.\n */\n Query.prototype.skip = function (nos) {\n this.queries.push({\n fn: 'onSkip',\n e: { nos: nos }\n });\n return this;\n };\n /**\n * Selects specified columns from the data source.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n */\n Query.prototype.select = function (fieldNames) {\n if (typeof fieldNames === 'string') {\n fieldNames = [].slice.call([fieldNames], 0);\n }\n this.queries.push({\n fn: 'onSelect',\n e: { fieldNames: fieldNames }\n });\n return this;\n };\n /**\n * Gets the records in hierarchical relationship from two tables. It requires the foreign key to relate two tables.\n * @param {Query} query - Defines the query to relate two tables.\n * @param {Function} selectorFn - Defines the custom function to select records.\n */\n Query.prototype.hierarchy = function (query, selectorFn) {\n this.subQuerySelector = selectorFn;\n this.subQuery = query;\n return this;\n };\n /**\n * Sets the foreign key which is used to get data from the related table.\n * @param {string} key - Defines the foreign key.\n */\n Query.prototype.foreignKey = function (key) {\n this.fKey = key;\n return this;\n };\n /**\n * It is used to get total number of records in the DataManager execution result.\n */\n Query.prototype.requiresCount = function () {\n this.isCountRequired = true;\n return this;\n };\n //type - sum, avg, min, max\n /**\n * Aggregate the data with given type and field name.\n * @param {string} type - Defines the aggregate type.\n * @param {string} field - Defines the column field to aggregate.\n */\n Query.prototype.aggregate = function (type, field) {\n this.queries.push({\n fn: 'onAggregates',\n e: { field: field, type: type }\n });\n return this;\n };\n /**\n * Pass array of filterColumn query for performing filter operation.\n * @param {QueryOptions[]} queries\n * @param {string} name\n * @hidden\n */\n Query.filterQueries = function (queries, name) {\n return queries.filter(function (q) {\n return q.fn === name;\n });\n };\n /**\n * To get the list of queries which is already filtered in current data source.\n * @param {Object[]} queries\n * @param {string[]} singles\n * @hidden\n */\n Query.filterQueryLists = function (queries, singles) {\n var filtered = queries.filter(function (q) {\n return singles.indexOf(q.fn) !== -1;\n });\n var res = {};\n for (var i = 0; i < filtered.length; i++) {\n if (!res[filtered[i].fn]) {\n res[filtered[i].fn] = filtered[i].e;\n }\n }\n return res;\n };\n return Query;\n}());\nexport { Query };\n/**\n * Predicate class is used to generate complex filter criteria.\n * This will be used by DataManager to perform multiple filtering operation.\n */\nvar Predicate = /** @class */ (function () {\n /**\n * Constructor for Predicate class.\n * @param {string|Predicate} field\n * @param {string} operator\n * @param {string|number|boolean|Predicate|Predicate[]} value\n * @param {boolean=false} ignoreCase\n * @hidden\n */\n function Predicate(field, operator, value, ignoreCase, ignoreAccent) {\n if (ignoreCase === void 0) { ignoreCase = false; }\n /** @hidden */\n this.ignoreAccent = false;\n /** @hidden */\n this.isComplex = false;\n if (typeof field === 'string') {\n this.field = field;\n this.operator = operator.toLowerCase();\n this.value = value;\n this.ignoreCase = ignoreCase;\n this.ignoreAccent = ignoreAccent;\n this.isComplex = false;\n this.comparer = DataUtil.fnOperators.processOperator(this.operator);\n }\n else if (field instanceof Predicate && value instanceof Predicate || value instanceof Array) {\n this.isComplex = true;\n this.condition = operator.toLowerCase();\n this.predicates = [field];\n if (value instanceof Array) {\n [].push.apply(this.predicates, value);\n }\n else {\n this.predicates.push(value);\n }\n }\n return this;\n }\n /**\n * Adds n-number of new predicates on existing predicate with “and” condition.\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and');\n };\n /**\n * Adds new predicate on existing predicate with “and” condition.\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Predicate.prototype.and = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'and', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “or” condition.\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or');\n };\n /**\n * Adds new predicate on existing predicate with “or” condition.\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Predicate.prototype.or = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'or', ignoreCase, ignoreAccent);\n };\n /**\n * Converts plain JavaScript object to Predicate object.\n * @param {Predicate[]|Predicate} json - Defines single or collection of Predicate.\n */\n Predicate.fromJson = function (json) {\n if (json instanceof Array) {\n var res = [];\n for (var i = 0, len = json.length; i < len; i++) {\n res.push(this.fromJSONData(json[i]));\n }\n return res;\n }\n var pred = json;\n return this.fromJSONData(pred);\n };\n /**\n * Validate the record based on the predicates.\n * @param {Object} record - Defines the datasource record.\n */\n Predicate.prototype.validate = function (record) {\n var predicate = this.predicates ? this.predicates : [];\n var isAnd;\n var ret;\n if (!this.isComplex && this.comparer) {\n return this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n isAnd = this.condition === 'and';\n for (var i = 0; i < predicate.length; i++) {\n ret = predicate[i].validate(record);\n if (isAnd) {\n if (!ret) {\n return false;\n }\n }\n else {\n if (ret) {\n return true;\n }\n }\n }\n return isAnd;\n };\n /**\n * Converts predicates to plain JavaScript.\n * This method is uses Json stringify when serializing Predicate object.\n */\n Predicate.prototype.toJson = function () {\n var predicates;\n var p;\n if (this.isComplex) {\n predicates = [];\n p = this.predicates;\n for (var i = 0; i < p.length; i++) {\n predicates.push(p[i].toJson());\n }\n }\n return {\n isComplex: this.isComplex,\n field: this.field,\n operator: this.operator,\n value: this.value,\n ignoreCase: this.ignoreCase,\n ignoreAccent: this.ignoreAccent,\n condition: this.condition,\n predicates: predicates\n };\n };\n Predicate.combinePredicates = function (predicates, operator) {\n if (predicates.length === 1) {\n if (!(predicates[0] instanceof Array)) {\n return predicates[0];\n }\n predicates = predicates[0];\n }\n return new Predicate(predicates[0], operator, predicates.slice(1));\n };\n Predicate.combine = function (pred, field, operator, value, condition, ignoreCase, ignoreAccent) {\n if (field instanceof Predicate) {\n return Predicate[condition](pred, field);\n }\n if (typeof field === 'string') {\n return Predicate[condition](pred, new Predicate(field, operator, value, ignoreCase, ignoreAccent));\n }\n return DataUtil.throwError('Predicate - ' + condition + ' : invalid arguments');\n };\n Predicate.fromJSONData = function (json) {\n var preds = json.predicates || [];\n var len = preds.length;\n var predicates = [];\n var result;\n for (var i = 0; i < len; i++) {\n predicates.push(this.fromJSONData(preds[i]));\n }\n if (!json.isComplex) {\n result = new Predicate(json.field, json.operator, json.value, json.ignoreCase, json.ignoreAccent);\n }\n else {\n result = new Predicate(predicates[0], json.condition, predicates.slice(1));\n }\n return result;\n };\n return Predicate;\n}());\nexport { Predicate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from './manager';\nimport { Query } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Data manager common utility methods.\n * @hidden\n */\nvar DataUtil = /** @class */ (function () {\n function DataUtil() {\n }\n /**\n * Returns the value by invoking the provided parameter function.\n * If the paramater is not of type function then it will be returned as it is.\n * @param {Function|string|string[]|number} value\n * @param {Object} inst?\n * @hidden\n */\n DataUtil.getValue = function (value, inst) {\n if (typeof value === 'function') {\n return value.call(inst || {});\n }\n return value;\n };\n /**\n * Returns true if the input string ends with given string.\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.endsWith = function (input, substr) {\n return input.slice(-substr.length) === substr;\n };\n /**\n * Returns true if the input string starts with given string.\n * @param {string} str\n * @param {string} startstr\n */\n DataUtil.startsWith = function (input, start) {\n return input.slice(0, start.length) === start;\n };\n /**\n * To return the sorting function based on the string.\n * @param {string} order\n * @hidden\n */\n DataUtil.fnSort = function (order) {\n order = order ? DataUtil.toLowerCase(order) : 'ascending';\n if (order === 'ascending') {\n return this.fnAscending;\n }\n return this.fnDescending;\n };\n /**\n * Comparer function which is used to sort the data in ascending order.\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnAscending = function (x, y) {\n if (y === null || y === undefined) {\n return -1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y);\n }\n if (x === null || x === undefined) {\n return 1;\n }\n return x - y;\n };\n /**\n * Comparer function which is used to sort the data in descending order.\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnDescending = function (x, y) {\n if (y === null || y === undefined) {\n return 1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y) * -1;\n }\n if (x === null || x === undefined) {\n return -1;\n }\n return y - x;\n };\n DataUtil.extractFields = function (obj, fields) {\n var newObj = {};\n for (var i = 0; i < fields.length; i++) {\n newObj = this.setValue(fields[i], this.getObject(fields[i], obj), newObj);\n }\n return newObj;\n };\n /**\n * Select objects by given fields from jsonArray.\n * @param {Object[]} jsonArray\n * @param {string[]} fields\n */\n DataUtil.select = function (jsonArray, fields) {\n var newData = [];\n for (var i = 0; i < jsonArray.length; i++) {\n newData.push(this.extractFields(jsonArray[i], fields));\n }\n return newData;\n };\n /**\n * Group the input data based on the field name.\n * It also performs aggregation of the grouped records based on the aggregates paramater.\n * @param {Object[]} jsonArray\n * @param {string} field?\n * @param {Object[]} agg?\n * @param {number} level?\n * @param {Object[]} groupDs?\n */\n DataUtil.group = function (jsonArray, field, aggregates, level, groupDs, format) {\n level = level || 1;\n var jsonData = jsonArray;\n var guid = 'GroupGuid';\n if (jsonData.GroupGuid === consts[guid]) {\n var _loop_1 = function (j) {\n if (!isNullOrUndefined(groupDs)) {\n var indx = -1;\n var temp = groupDs.filter(function (e) { return e.key === jsonData[j].key; });\n indx = groupDs.indexOf(temp[0]);\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, groupDs[indx].items, format);\n jsonData[j].count = groupDs[indx].count;\n }\n else {\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, null, format);\n jsonData[j].count = jsonData[j].items.length;\n }\n };\n var this_1 = this;\n for (var j = 0; j < jsonData.length; j++) {\n _loop_1(j);\n }\n jsonData.childLevels += 1;\n return jsonData;\n }\n var grouped = {};\n var groupedArray = [];\n groupedArray.GroupGuid = consts[guid];\n groupedArray.level = level;\n groupedArray.childLevels = 0;\n groupedArray.records = jsonData;\n var _loop_2 = function (i) {\n var val = this_2.getVal(jsonData, i, field);\n if (!isNullOrUndefined(format)) {\n val = format(val, field);\n }\n if (!grouped[val]) {\n grouped[val] = {\n key: val,\n count: 0,\n items: [],\n aggregates: {},\n field: field\n };\n groupedArray.push(grouped[val]);\n if (!isNullOrUndefined(groupDs)) {\n var tempObj = groupDs.filter(function (e) { return e.key === grouped[val].key; });\n grouped[val].count = tempObj[0].count;\n }\n }\n grouped[val].count = !isNullOrUndefined(groupDs) ? grouped[val].count : grouped[val].count += 1;\n grouped[val].items.push(jsonData[i]);\n };\n var this_2 = this;\n for (var i = 0; i < jsonData.length; i++) {\n _loop_2(i);\n }\n if (aggregates && aggregates.length) {\n var _loop_3 = function (i) {\n var res = {};\n var fn = void 0;\n var aggs = aggregates;\n for (var j = 0; j < aggregates.length; j++) {\n fn = DataUtil.aggregates[aggregates[j].type];\n if (!isNullOrUndefined(groupDs)) {\n var temp = groupDs.filter(function (e) { return e.key === groupedArray[i].key; });\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(temp[0].items, aggs[j].field);\n }\n }\n else {\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(groupedArray[i].items, aggs[j].field);\n }\n }\n }\n groupedArray[i].aggregates = res;\n };\n for (var i = 0; i < groupedArray.length; i++) {\n _loop_3(i);\n }\n }\n return jsonData.length && groupedArray || jsonData;\n };\n /**\n * It is used to categorize the multiple items based on a specific field in jsonArray.\n * The hierarchical queries are commonly required when you use foreign key binding.\n * @param {string} fKey\n * @param {string} from\n * @param {Object[]} source\n * @param {Group} lookup?\n * @param {string} pKey?\n * @hidden\n */\n DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n var i;\n var grp = {};\n var temp;\n if (lookup.result) {\n lookup = lookup.result;\n }\n if (lookup.GroupGuid) {\n this.throwError('DataManager: Do not have support Grouping in hierarchy');\n }\n for (i = 0; i < lookup.length; i++) {\n var fKeyData = this.getObject(fKey, lookup[i]);\n temp = grp[fKeyData] || (grp[fKeyData] = []);\n temp.push(lookup[i]);\n }\n for (i = 0; i < source.length; i++) {\n var fKeyData = this.getObject(pKey || fKey, source[i]);\n source[i][from] = grp[fKeyData];\n }\n };\n /**\n * The method used to get the field names which started with specified characters.\n * @param {Object} obj\n * @param {string[]} fields?\n * @param {string} prefix?\n * @hidden\n */\n DataUtil.getFieldList = function (obj, fields, prefix) {\n if (prefix === undefined) {\n prefix = '';\n }\n if (fields === undefined || fields === null) {\n return this.getFieldList(obj, [], prefix);\n }\n var copyObj = obj;\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n }\n else {\n fields.push(prefix + prop);\n }\n }\n return fields;\n };\n /**\n * Gets the value of the property in the given object.\n * The complex object can be accessed by providing the field names concatenated with dot(.).\n * @param {string} nameSpace - The name of the property to be accessed.\n * @param {Object} from - Defines the source object.\n */\n DataUtil.getObject = function (nameSpace, from) {\n if (!nameSpace) {\n return from;\n }\n if (!from) {\n return undefined;\n }\n if (nameSpace.indexOf('.') === -1) {\n return from[nameSpace];\n }\n var value = from;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length; i++) {\n if (value == null) {\n break;\n }\n value = value[splits[i]];\n }\n return value;\n };\n /**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object.\n * @param {Object} value - Value that you need to set.\n * @param {Object} obj - Object to get the inner object value.\n * @return { [key: string]: Object; } | Object\n * @hidden\n */\n DataUtil.setValue = function (nameSpace, value, obj) {\n var keys = nameSpace.toString().split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? undefined : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n };\n /**\n * Sort the given data based on the field and comparer.\n * @param {Object[]} ds - Defines the input data.\n * @param {string} field - Defines the field to be sorted.\n * @param {Function} comparer - Defines the comparer function used to sort the records.\n */\n DataUtil.sort = function (ds, field, comparer) {\n if (ds.length <= 1) {\n return ds;\n }\n var middle = parseInt((ds.length / 2).toString(), 10);\n var left = ds.slice(0, middle);\n var right = ds.slice(middle);\n left = this.sort(left, field, comparer);\n right = this.sort(right, field, comparer);\n return this.merge(left, right, field, comparer);\n };\n DataUtil.ignoreDiacritics = function (value) {\n if (typeof value !== 'string') {\n return value;\n }\n var result = value.split('');\n var newValue = result.map(function (temp) { return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp; });\n return newValue.join('');\n };\n DataUtil.merge = function (left, right, fieldName, comparer) {\n var result = [];\n var current;\n while (left.length > 0 || right.length > 0) {\n if (left.length > 0 && right.length > 0) {\n if (comparer) {\n current = comparer(this.getVal(left, 0, fieldName), this.getVal(right, 0, fieldName)) <= 0 ? left : right;\n }\n else {\n current = left[0][fieldName] < left[0][fieldName] ? left : right;\n }\n }\n else {\n current = left.length > 0 ? left : right;\n }\n result.push(current.shift());\n }\n return result;\n };\n DataUtil.getVal = function (array, index, field) {\n return field ? this.getObject(field, array[index]) : array[index];\n };\n DataUtil.toLowerCase = function (val) {\n return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';\n };\n /**\n * To perform the filter operation with specified adaptor and returns the result.\n * @param {Object} adaptor\n * @param {string} fnName\n * @param {Object} param1?\n * @param {Object} param2?\n * @hidden\n */\n DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n if (fnName in adaptor) {\n var res = adaptor[fnName](param1, param2);\n if (!isNullOrUndefined(res)) {\n param1 = res;\n }\n }\n return param1;\n };\n DataUtil.getAddParams = function (adp, dm, query) {\n var req = {};\n DataUtil.callAdaptorFunction(adp, 'addParams', {\n dm: dm,\n query: query,\n params: query.params,\n reqParams: req\n });\n return req;\n };\n /**\n * Checks wheather the given input is a plain object or not.\n * @param {Object|Object[]} obj\n */\n DataUtil.isPlainObject = function (obj) {\n return (!!obj) && (obj.constructor === Object);\n };\n /**\n * Returns true when the browser cross origin request.\n */\n DataUtil.isCors = function () {\n var xhr = null;\n var request = 'XMLHttpRequest';\n try {\n xhr = new window[request]();\n }\n catch (e) {\n // No exception handling\n }\n return !!xhr && ('withCredentials' in xhr);\n };\n /**\n * Generate random GUID value which will be prefixed with the given value.\n * @param {string} prefix\n */\n DataUtil.getGuid = function (prefix) {\n var hexs = '0123456789abcdef';\n var rand;\n return (prefix || '') + '00000000-0000-4000-0000-000000000000'.replace(/0/g, function (val, i) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var arr = new Uint8Array(1);\n window.crypto.getRandomValues(arr);\n rand = arr[0] % 16 | 0;\n }\n else {\n rand = Math.random() * 16 | 0;\n }\n return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n });\n };\n /**\n * Checks wheather the given value is null or not.\n * @param {string|Object} val\n * @returns boolean\n */\n DataUtil.isNull = function (val) {\n return val === undefined || val === null;\n };\n /**\n * To get the required items from collection of objects.\n * @param {Object[]} array\n * @param {string} field\n * @param {Function} comparer\n * @returns Object\n * @hidden\n */\n DataUtil.getItemFromComparer = function (array, field, comparer) {\n var keyVal;\n var current;\n var key;\n var i = 0;\n var castRequired = typeof DataUtil.getVal(array, 0, field) === 'string';\n if (array.length) {\n while (isNullOrUndefined(keyVal) && i < array.length) {\n keyVal = DataUtil.getVal(array, i, field);\n key = array[i++];\n }\n }\n for (; i < array.length; i++) {\n current = DataUtil.getVal(array, i, field);\n if (isNullOrUndefined(current)) {\n continue;\n }\n if (castRequired) {\n keyVal = +keyVal;\n current = +current;\n }\n if (comparer(keyVal, current) > 0) {\n keyVal = current;\n key = array[i];\n }\n }\n return key;\n };\n /**\n * To get distinct values of Array or Array of Objects.\n * @param {Object[]} json\n * @param {string} field\n * @param {boolean} requiresCompleteRecord\n * @returns Object[]\n * * distinct array of objects is return when requiresCompleteRecord set as true.\n * @hidden\n */\n DataUtil.distinct = function (json, fieldName, requiresCompleteRecord) {\n requiresCompleteRecord = isNullOrUndefined(requiresCompleteRecord) ? false : requiresCompleteRecord;\n var result = [];\n var val;\n var tmp = {};\n json.forEach(function (data, index) {\n val = DataUtil.getVal(json, index, fieldName);\n if (!(val in tmp)) {\n result.push(!requiresCompleteRecord ? val : json[index]);\n tmp[val] = 1;\n }\n });\n return result;\n };\n /**\n * Specifies the value which will be used to adjust the date value to server timezone.\n * @default null\n */\n DataUtil.serverTimezoneOffset = null;\n /**\n * Throw error with the given string as message.\n * @param {string} er\n */\n DataUtil.throwError = function (error) {\n try {\n throw new Error(error);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n };\n DataUtil.aggregates = {\n /**\n * Calculate sum of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n sum: function (ds, field) {\n var result = 0;\n var val;\n var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n for (var i = 0; i < ds.length; i++) {\n val = DataUtil.getVal(ds, i, field);\n if (!isNaN(val) && val !== null) {\n if (castRequired) {\n val = +val;\n }\n result += val;\n }\n }\n return result;\n },\n /**\n * Calculate average value of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n average: function (ds, field) {\n return DataUtil.aggregates.sum(ds, field) / ds.length;\n },\n /**\n * Returns the min value of the data based on the field.\n * @param {Object[]} ds\n * @param {string|Function} field\n */\n min: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n },\n /**\n * Returns the max value of the data based on the field.\n * @param {Object[]} ds\n * @param {string} field\n * @returns number\n */\n max: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n },\n /**\n * Returns the total number of true value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n truecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n },\n /**\n * Returns the total number of false value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n falsecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n },\n /**\n * Returns the length of the given data.\n * @param {Object[]} ds\n * @param {string} field?\n * @returns number\n */\n count: function (ds, field) {\n return ds.length;\n }\n };\n /**\n * Specifies the Object with filter operators.\n */\n DataUtil.operatorSymbols = {\n '<': 'lessthan',\n '>': 'greaterthan',\n '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal',\n '==': 'equal',\n '!=': 'notequal',\n '*=': 'contains',\n '$=': 'endswith',\n '^=': 'startswith'\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * * It will be used for date/number type filter query.\n */\n DataUtil.odBiOperator = {\n '<': ' lt ',\n '>': ' gt ',\n '<=': ' le ',\n '>=': ' ge ',\n '==': ' eq ',\n '!=': ' ne ',\n 'lessthan': ' lt ',\n 'lessthanorequal': ' le ',\n 'greaterthan': ' gt ',\n 'greaterthanorequal': ' ge ',\n 'equal': ' eq ',\n 'notequal': ' ne '\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odUniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'substringof',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'substringof'\n };\n /**\n * Specifies the Object with filter operators which will be used for ODataV4 filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odv4UniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'contains',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'contains'\n };\n DataUtil.diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n DataUtil.fnOperators = {\n /**\n * Returns true when the actual input is equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param {boolean} ignoreAccent?\n */\n equal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n }\n return actual === expected;\n },\n /**\n * Returns true when the actual input is not equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n notequal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n },\n /**\n * Returns true when the actual input is less than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n }\n return actual < expected;\n },\n /**\n * Returns true when the actual input is greater than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n }\n return actual > expected;\n },\n /**\n * Returns true when the actual input is less than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n }\n return actual <= expected;\n },\n /**\n * Returns true when the actual input is greater than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n }\n return actual >= expected;\n },\n /**\n * Returns true when the actual input contains the given string.\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n */\n contains: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) !== -1;\n },\n /**\n * Returns true when the given input value is not null.\n * @param {string|number} actual\n * @returns boolean\n */\n notnull: function (actual) {\n return actual !== null;\n },\n /**\n * Returns true when the given input value is null.\n * @param {string|number} actual\n * @returns boolean\n */\n isnull: function (actual) {\n return actual === null;\n },\n /**\n * Returns true when the actual input starts with the given string\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n startswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.startsWith(actual, expected);\n },\n /**\n * Returns true when the actual input ends with the given string.\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n endswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.endsWith(actual, expected);\n },\n /**\n * It will return the filter operator based on the filter symbol.\n * @param {string} operator\n * @hidden\n */\n processSymbols: function (operator) {\n var fnName = DataUtil.operatorSymbols[operator];\n if (fnName) {\n var fn = DataUtil.fnOperators[fnName];\n return fn;\n }\n return DataUtil.throwError('Query - Process Operator : Invalid operator');\n },\n /**\n * It will return the valid filter operator based on the specified operators.\n * @param {string} operator\n * @hidden\n */\n processOperator: function (operator) {\n var fn = DataUtil.fnOperators[operator];\n if (fn) {\n return fn;\n }\n return DataUtil.fnOperators.processSymbols(operator);\n }\n };\n /**\n * To perform the parse operation on JSON data, like convert to string from JSON or convert to JSON from string.\n */\n DataUtil.parse = {\n /**\n * Parse the given string to the plain JavaScript object.\n * @param {string|Object|Object[]} jsonText\n */\n parseJson: function (jsonText) {\n if (typeof jsonText === 'string') {\n jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n }\n else if (jsonText instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(jsonText);\n }\n else if (typeof jsonText === 'object' && jsonText !== null) {\n DataUtil.parse.iterateAndReviveJson(jsonText);\n }\n return jsonText;\n },\n /**\n * It will perform on array of values.\n * @param {string[]|Object[]} array\n * @hidden\n */\n iterateAndReviveArray: function (array) {\n for (var i = 0; i < array.length; i++) {\n if (typeof array[i] === 'object' && array[i] !== null) {\n DataUtil.parse.iterateAndReviveJson(array[i]);\n }\n else if (typeof array[i] === 'string' && !/^[\\s]*\\[|^[\\s]*\\{(.)+:|\\\"/g.test(array[i])) {\n array[i] = DataUtil.parse.jsonReviver('', array[i]);\n }\n else {\n array[i] = DataUtil.parse.parseJson(array[i]);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {JSON} json\n * @hidden\n */\n iterateAndReviveJson: function (json) {\n var value;\n var keys = Object.keys(json);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.startsWith(prop, '__')) {\n continue;\n }\n value = json[prop];\n if (typeof value === 'object') {\n if (value instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(value);\n }\n else if (value) {\n DataUtil.parse.iterateAndReviveJson(value);\n }\n }\n else {\n json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {string} field\n * @param {string|Date} value\n * @hidden\n */\n jsonReviver: function (field, value) {\n var dupValue = value;\n if (typeof value === 'string') {\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n if (ms) {\n return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), DataUtil.serverTimezoneOffset, true);\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var arr = dupValue.split(/[^0-9]/);\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), DataUtil.serverTimezoneOffset, true);\n }\n }\n return value;\n },\n /**\n * Check wheather the given value is JSON or not.\n * @param {Object[]} jsonData\n */\n isJson: function (jsonData) {\n if (typeof jsonData[0] === 'string') {\n return jsonData;\n }\n return DataUtil.parse.parseJson(jsonData);\n },\n /**\n * Checks wheather the given value is GUID or not.\n * @param {string} value\n */\n isGuid: function (value) {\n var regex = /[A-Fa-f0-9]{8}(?:-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}/i;\n var match = regex.exec(value);\n return match != null;\n },\n /**\n * The method used to replace the value based on the type.\n * @param {Object} value\n * @param {boolean} stringify\n * @hidden\n */\n replacer: function (value, stringify) {\n if (DataUtil.isPlainObject(value)) {\n return DataUtil.parse.jsonReplacer(value, stringify);\n }\n if (value instanceof Array) {\n return DataUtil.parse.arrayReplacer(value);\n }\n if (value instanceof Date) {\n return DataUtil.parse.jsonReplacer({ val: value }, stringify).val;\n }\n return value;\n },\n /**\n * It will replace the JSON value.\n * @param {string} key\n * @param {Object} val\n * @hidden\n */\n jsonReplacer: function (val, stringify) {\n var value;\n var keys = Object.keys(val);\n for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n var prop = keys_3[_i];\n value = val[prop];\n if (!(value instanceof Date)) {\n continue;\n }\n var d = value;\n val[prop] = DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(d), DataUtil.serverTimezoneOffset).toJSON();\n }\n return val;\n },\n /**\n * It will replace the Array of value.\n * @param {string} key\n * @param {Object[]} val\n * @hidden\n */\n arrayReplacer: function (val) {\n for (var i = 0; i < val.length; i++) {\n if (DataUtil.isPlainObject(val[i])) {\n val[i] = DataUtil.parse.jsonReplacer(val[i]);\n }\n else if (val[i] instanceof Date) {\n val[i] = DataUtil.parse.jsonReplacer({ date: val[i] }).date;\n }\n }\n return val;\n }\n };\n /**\n * @hidden\n */\n DataUtil.dateParse = {\n addSelfOffset: function (input) {\n return new Date(+input - (input.getTimezoneOffset() * 60000));\n },\n toUTC: function (input) {\n return new Date(+input + (input.getTimezoneOffset() * 60000));\n },\n toTimeZone: function (input, offset, utc) {\n if (offset === null) {\n return input;\n }\n var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n return new Date(+unix - (offset * 3600000));\n },\n toLocalTime: function (input) {\n var datefn = input;\n var timeZone = -datefn.getTimezoneOffset();\n var differenceString = timeZone >= 0 ? '+' : '-';\n var localtimefn = function (num) {\n var norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n };\n var val = datefn.getFullYear() + '-' + localtimefn(datefn.getMonth() + 1) + '-' + localtimefn(datefn.getDate()) +\n 'T' + localtimefn(datefn.getHours()) +\n ':' + localtimefn(datefn.getMinutes()) +\n ':' + localtimefn(datefn.getSeconds()) +\n differenceString + localtimefn(timeZone / 60) +\n ':' + localtimefn(timeZone % 60);\n return val;\n }\n };\n return DataUtil;\n}());\nexport { DataUtil };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { merge, extend, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query, Predicate } from './query';\n/**\n * Adaptors are specific data source type aware interfaces that are used by DataManager to communicate with DataSource.\n * This is the base adaptor class that other adaptors can extend.\n * @hidden\n */\nvar Adaptor = /** @class */ (function () {\n /**\n * Constructor for Adaptor class\n * @param {DataOptions} ds?\n * @hidden\n * @returns aggregates\n */\n function Adaptor(ds) {\n // common options for all the adaptors \n this.options = {\n from: 'table',\n requestType: 'json',\n sortBy: 'sorted',\n select: 'select',\n skip: 'skip',\n group: 'group',\n take: 'take',\n search: 'search',\n count: 'requiresCounts',\n where: 'where',\n aggregates: 'aggregates'\n };\n /**\n * Specifies the type of adaptor.\n * @default Adaptor\n */\n this.type = Adaptor;\n this.dataSource = ds;\n this.pvt = {};\n }\n /**\n * Returns the data from the query processing.\n * @param {Object} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @returns Object\n */\n Adaptor.prototype.processResponse = function (data, ds, query, xhr) {\n return data;\n };\n return Adaptor;\n}());\nexport { Adaptor };\n/**\n * JsonAdaptor is used to process JSON data. It contains methods to process the given JSON data based on the queries.\n * @hidden\n */\nvar JsonAdaptor = /** @class */ (function (_super) {\n __extends(JsonAdaptor, _super);\n function JsonAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the JSON data based on the provided queries.\n * @param {DataManager} dataManager\n * @param {Query} query\n * @returns Object\n */\n JsonAdaptor.prototype.processQuery = function (dataManager, query) {\n var result = dataManager.dataSource.json.slice(0);\n var count = result.length;\n var countFlg = true;\n var ret;\n var key;\n var agg = {};\n for (var i = 0; i < query.queries.length; i++) {\n key = query.queries[i];\n ret = this[key.fn].call(this, result, key.e, query);\n if (key.fn === 'onAggregates') {\n agg[key.e.field + ' - ' + key.e.type] = ret;\n }\n else {\n result = ret !== undefined ? ret : result;\n }\n if (key.fn === 'onPage' || key.fn === 'onSkip' || key.fn === 'onTake' || key.fn === 'onRange') {\n countFlg = false;\n }\n if (countFlg) {\n count = result.length;\n }\n }\n if (query.isCountRequired) {\n result = {\n result: result,\n count: count,\n aggregates: agg\n };\n }\n return result;\n };\n /**\n * Performs batch update in the JSON array which add, remove and update records.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n JsonAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var i;\n var deletedRecordsLen = changes.deletedRecords.length;\n for (i = 0; i < changes.addedRecords.length; i++) {\n this.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n this.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < deletedRecordsLen; i++) {\n this.remove(dm, e.key, changes.deletedRecords[i]);\n }\n return changes;\n };\n /**\n * Performs filter operation with the given data and where query.\n * @param {Object[]} ds\n * @param {{validate:Function}} e\n */\n JsonAdaptor.prototype.onWhere = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.filter(function (obj) {\n if (e) {\n return e.validate(obj);\n }\n });\n };\n /**\n * Returns aggregate function based on the aggregate type.\n * @param {Object[]} ds\n * @param {{field:string} e\n * @param {string}} type\n */\n JsonAdaptor.prototype.onAggregates = function (ds, e) {\n var fn = DataUtil.aggregates[e.type];\n if (!ds || !fn || ds.length === 0) {\n return null;\n }\n return fn(ds, e.field);\n };\n /**\n * Performs search operation based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n */\n JsonAdaptor.prototype.onSearch = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n if (e.fieldNames.length === 0) {\n DataUtil.getFieldList(ds[0], e.fieldNames);\n }\n return ds.filter(function (obj) {\n for (var j = 0; j < e.fieldNames.length; j++) {\n if (e.comparer.call(obj, DataUtil.getObject(e.fieldNames[j], obj), e.searchKey, e.ignoreCase, e.ignoreAccent)) {\n return true;\n }\n }\n return false;\n });\n };\n /**\n * Sort the data with given direction and field.\n * @param {Object[]} ds\n * @param {{comparer:(a:Object} e\n * @param {Object} b\n */\n JsonAdaptor.prototype.onSortBy = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var fnCompare;\n var field = DataUtil.getValue(e.fieldName, query);\n if (!field) {\n return ds.sort(e.comparer);\n }\n if (field instanceof Array) {\n field = field.slice(0);\n for (var i = field.length - 1; i >= 0; i--) {\n if (!field[i]) {\n continue;\n }\n fnCompare = e.comparer;\n if (DataUtil.endsWith(field[i], ' desc')) {\n fnCompare = DataUtil.fnSort('descending');\n field[i] = field[i].replace(' desc', '');\n }\n ds = DataUtil.sort(ds, field[i], fnCompare);\n }\n return ds;\n }\n return DataUtil.sort(ds, field, e.comparer);\n };\n /**\n * Group the data based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n * @param {Query} query\n */\n JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n var agg = [];\n if (aggQuery.length) {\n var tmp = void 0;\n for (var i = 0; i < aggQuery.length; i++) {\n tmp = aggQuery[i].e;\n agg.push({ type: tmp.type, field: DataUtil.getValue(tmp.field, query) });\n }\n }\n return DataUtil.group(ds, DataUtil.getValue(e.fieldName, query), agg, null, null, e.comparer);\n };\n /**\n * Retrieves records based on the given page index and size.\n * @param {Object[]} ds\n * @param {{pageSize:number} e\n * @param {number}} pageIndex\n * @param {Query} query\n */\n JsonAdaptor.prototype.onPage = function (ds, e, query) {\n var size = DataUtil.getValue(e.pageSize, query);\n var start = (DataUtil.getValue(e.pageIndex, query) - 1) * size;\n var end = start + size;\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(start, end);\n };\n /**\n * Retrieves records based on the given start and end index from query.\n * @param {Object[]} ds\n * @param {{start:number} e\n * @param {number}} end\n */\n JsonAdaptor.prototype.onRange = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.start), DataUtil.getValue(e.end));\n };\n /**\n * Picks the given count of records from the top of the datasource.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onTake = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(0, DataUtil.getValue(e.nos));\n };\n /**\n * Skips the given count of records from the data source.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onSkip = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.nos));\n };\n /**\n * Selects specified columns from the data source.\n * @param {Object[]} ds\n * @param {{fieldNames:string}} e\n */\n JsonAdaptor.prototype.onSelect = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n };\n /**\n * Inserts new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {number} position\n */\n JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n if (isNullOrUndefined(position)) {\n return dm.dataSource.json.push(data);\n }\n else {\n return dm.dataSource.json.splice(position, 0, data);\n }\n };\n /**\n * Remove the data from the dataSource based on the key field value.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n if (typeof value === 'object') {\n value = value[keyField];\n }\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === value) {\n break;\n }\n }\n return i !== ds.length ? ds.splice(i, 1) : null;\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n var key = value[keyField];\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === key) {\n break;\n }\n }\n return i < ds.length ? merge(ds[i], value) : null;\n };\n return JsonAdaptor;\n}(Adaptor));\nexport { JsonAdaptor };\n/**\n * URL Adaptor of DataManager can be used when you are required to use remote service to retrieve data.\n * It interacts with server-side for all DataManager Queries and CRUD operations.\n * @hidden\n */\nvar UrlAdaptor = /** @class */ (function (_super) {\n __extends(UrlAdaptor, _super);\n function UrlAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the query to generate request body.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns p\n */\n UrlAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var params = query.params;\n var url = dm.dataSource.url;\n var temp;\n var skip;\n var take = null;\n var options = this.options;\n var request = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n // calc Paging & Range\n if ('onPage' in singles) {\n temp = singles.onPage;\n skip = DataUtil.getValue(temp.pageIndex, query);\n take = DataUtil.getValue(temp.pageSize, query);\n skip = (skip - 1) * take;\n }\n else if ('onRange' in singles) {\n temp = singles.onRange;\n skip = temp.start;\n take = temp.end - temp.start;\n }\n // Sorting\n for (var i = 0; i < queries.sorts.length; i++) {\n temp = DataUtil.getValue(queries.sorts[i].e.fieldName, query);\n request.sorts.push(DataUtil.callAdaptorFunction(this, 'onEachSort', { name: temp, direction: queries.sorts[i].e.direction }, query));\n }\n // hierarchy\n if (hierarchyFilters) {\n temp = this.getFiltersFrom(hierarchyFilters, query);\n if (temp) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n }\n }\n // Filters\n for (var i = 0; i < queries.filters.length; i++) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query));\n var keys_3 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n for (var _i = 0, keys_1 = keys_3; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (DataUtil.isNull((request)[prop])) {\n delete request[prop];\n }\n }\n }\n // Searches\n for (var i = 0; i < queries.searches.length; i++) {\n temp = queries.searches[i].e;\n request.searches.push(DataUtil.callAdaptorFunction(this, 'onEachSearch', {\n fields: temp.fieldNames,\n operator: temp.operator,\n key: temp.searchKey,\n ignoreCase: temp.ignoreCase\n }, query));\n }\n // Grouping\n for (var i = 0; i < queries.groups.length; i++) {\n request.groups.push(DataUtil.getValue(queries.groups[i].e.fieldName, query));\n }\n // aggregates\n for (var i = 0; i < queries.aggregates.length; i++) {\n temp = queries.aggregates[i].e;\n request.aggregates.push({ type: temp.type, field: DataUtil.getValue(temp.field, query) });\n }\n var req = {};\n this.getRequestQuery(options, query, singles, request, req);\n // Params\n DataUtil.callAdaptorFunction(this, 'addParams', { dm: dm, query: query, params: params, reqParams: req });\n // cleanup\n var keys = Object.keys(req);\n for (var _a = 0, keys_2 = keys; _a < keys_2.length; _a++) {\n var prop = keys_2[_a];\n if (DataUtil.isNull(req[prop]) || req[prop] === '' || req[prop].length === 0) {\n delete req[prop];\n }\n }\n if (!(options.skip in req && options.take in req) && take !== null) {\n req[options.skip] = DataUtil.callAdaptorFunction(this, 'onSkip', skip, query);\n req[options.take] = DataUtil.callAdaptorFunction(this, 'onTake', take, query);\n }\n var p = this.pvt;\n this.pvt = {};\n if (this.options.requestType === 'json') {\n return {\n data: JSON.stringify(req),\n url: url,\n pvtData: p,\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n }\n temp = this.convertToQueryString(req, query, dm);\n temp = (dm.dataSource.url.indexOf('?') !== -1 ? '&' : '/') + temp;\n return {\n type: 'GET', url: temp.length ? url.replace(/\\/*$/, temp) : url, pvtData: p\n };\n };\n UrlAdaptor.prototype.getRequestQuery = function (options, query, singles, request, request1) {\n var param = 'param';\n var req = request1;\n req[options.from] = query.fromTable;\n if (options.apply && query.distincts.length) {\n req[options.apply] = 'onDistinct' in this ? DataUtil.callAdaptorFunction(this, 'onDistinct', query.distincts) : '';\n }\n if (!query.distincts.length && options.expand) {\n req[options.expand] = 'onExpand' in this && 'onSelect' in singles ?\n DataUtil.callAdaptorFunction(this, 'onExpand', { selects: DataUtil.getValue(singles.onSelect.fieldNames, query), expands: query.expands }, query) : query.expands;\n }\n req[options.select] = 'onSelect' in singles && !query.distincts.length ?\n DataUtil.callAdaptorFunction(this, 'onSelect', DataUtil.getValue(singles.onSelect.fieldNames, query), query) : '';\n req[options.count] = query.isCountRequired ? DataUtil.callAdaptorFunction(this, 'onCount', query.isCountRequired, query) : '';\n req[options.search] = request.searches.length ? DataUtil.callAdaptorFunction(this, 'onSearch', request.searches, query) : '';\n req[options.skip] = 'onSkip' in singles ?\n DataUtil.callAdaptorFunction(this, 'onSkip', DataUtil.getValue(singles.onSkip.nos, query), query) : '';\n req[options.take] = 'onTake' in singles ?\n DataUtil.callAdaptorFunction(this, 'onTake', DataUtil.getValue(singles.onTake.nos, query), query) : '';\n req[options.where] = request.filters.length || request.searches.length ?\n DataUtil.callAdaptorFunction(this, 'onWhere', request.filters, query) : '';\n req[options.sortBy] = request.sorts.length ? DataUtil.callAdaptorFunction(this, 'onSortBy', request.sorts, query) : '';\n req[options.group] = request.groups.length ? DataUtil.callAdaptorFunction(this, 'onGroup', request.groups, query) : '';\n req[options.aggregates] = request.aggregates.length ?\n DataUtil.callAdaptorFunction(this, 'onAggregates', request.aggregates, query) : '';\n req[param] = [];\n };\n /**\n * Convert the object from processQuery to string which can be added query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n */\n UrlAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n return '';\n // this needs to be overridden\n };\n /**\n * Return the data from the data manager processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Object} request?\n * @param {CrudOptions} changes?\n */\n UrlAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var requests = request;\n var pvt = requests.pvtData || {};\n var groupDs = data.groupDs;\n if (xhr && xhr.getResponseHeader('Content-Type') &&\n xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n var d = JSON.parse(requests.data);\n if (d && d.action === 'batch' && data.addedRecords) {\n changes.addedRecords = data.addedRecords;\n return changes;\n }\n if (data.d) {\n data = data.d;\n }\n var args = {};\n if ('count' in data) {\n args.count = data.count;\n }\n args.result = data.result ? data.result : data;\n this.getAggregateResult(pvt, data, args, groupDs, query);\n return DataUtil.isNull(args.count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Add the group query to the adaptor`s option.\n * @param {Object[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return e;\n };\n /**\n * Add the aggregate query to the adaptor`s option.\n * @param {Aggregates[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n */\n UrlAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var url;\n var key;\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.removeUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify(extend({}, {\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e[url],\n key: e[key]\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @returns void\n */\n UrlAdaptor.prototype.beforeSend = function (dm, request) {\n // need to extend this method\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName\n */\n UrlAdaptor.prototype.insert = function (dm, data, tableName, query) {\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: data,\n table: tableName,\n action: 'insert'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number|string} value\n * @param {string} tableName\n */\n UrlAdaptor.prototype.remove = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n UrlAdaptor.prototype.update = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: value[keyField],\n table: tableName\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * To generate the predicate based on the filtered query.\n * @param {Object[]|string[]|number[]} data\n * @param {Query} query\n * @hidden\n */\n UrlAdaptor.prototype.getFiltersFrom = function (data, query) {\n var key = query.fKey;\n var value;\n var prop = key;\n var pKey = query.key;\n var predicats = [];\n if (typeof data[0] !== 'object') {\n prop = null;\n }\n for (var i = 0; i < data.length; i++) {\n if (typeof data[0] === 'object') {\n value = DataUtil.getObject(pKey || prop, data[i]);\n }\n else {\n value = data[i];\n }\n predicats.push(new Predicate(key, 'equal', value));\n }\n return Predicate.or(predicats);\n };\n UrlAdaptor.prototype.getAggregateResult = function (pvt, data, args, groupDs, query) {\n var pData = data;\n if (data && data.result) {\n pData = data.result;\n }\n if (pvt && pvt.aggregates && pvt.aggregates.length) {\n var agg = pvt.aggregates;\n var fn = void 0;\n var aggregateData = pData;\n var res = {};\n if (data.aggregate) {\n aggregateData = data.aggregate;\n }\n for (var i = 0; i < agg.length; i++) {\n fn = DataUtil.aggregates[agg[i].type];\n if (fn) {\n res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n }\n }\n args.aggregates = res;\n }\n if (pvt && pvt.groups && pvt.groups.length) {\n var groups = pvt.groups;\n for (var i = 0; i < groups.length; i++) {\n var level = null;\n if (!isNullOrUndefined(groupDs)) {\n groupDs = DataUtil.group(groupDs, groups[i]);\n }\n var groupQuery = Query.filterQueries(query.queries, 'onGroup')[i].e;\n pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs, groupQuery.comparer);\n }\n args.result = pData;\n }\n return args;\n };\n UrlAdaptor.prototype.getQueryRequest = function (query) {\n var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n req.sorts = Query.filterQueries(query.queries, 'onSortBy');\n req.groups = Query.filterQueries(query.queries, 'onGroup');\n req.filters = Query.filterQueries(query.queries, 'onWhere');\n req.searches = Query.filterQueries(query.queries, 'onSearch');\n req.aggregates = Query.filterQueries(query.queries, 'onAggregates');\n return req;\n };\n UrlAdaptor.prototype.addParams = function (options) {\n var req = options.reqParams;\n for (var _i = 0, _a = options.params; _i < _a.length; _i++) {\n var tmp = _a[_i];\n if (req[tmp.key]) {\n throw new Error('Query() - addParams: Custom Param is conflicting other request arguments');\n }\n req[tmp.key] = tmp.value;\n if (tmp.fn) {\n req[tmp.key] = tmp.fn.call(options.query, tmp.key, options.query, options.dm);\n }\n }\n };\n return UrlAdaptor;\n}(Adaptor));\nexport { UrlAdaptor };\n/**\n * OData Adaptor that is extended from URL Adaptor, is used for consuming data through OData Service.\n * @hidden\n */\nvar ODataAdaptor = /** @class */ (function (_super) {\n __extends(ODataAdaptor, _super);\n function ODataAdaptor(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json;odata=light;q=1,application/json;odata=verbose;q=0.5',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$inlinecount',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PUT'\n });\n _this.getModuleName = getValue('getModulename', _this);\n extend(_this.options, props || {});\n return _this;\n }\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var operator;\n var guid;\n var val = predicate.value;\n var type = typeof val;\n var field = predicate.field ? ODataAdaptor.getField(predicate.field) : null;\n if (val instanceof Date) {\n val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n }\n if (type === 'string') {\n val = '\\'' + val + '\\'';\n if (requiresCast) {\n field = 'cast(' + field + ', \\'Edm.String\\')';\n }\n if (DataUtil.parse.isGuid(val)) {\n guid = 'guid';\n }\n if (predicate.ignoreCase) {\n if (!guid) {\n field = 'tolower(' + field + ')';\n }\n val = val.toLowerCase();\n }\n }\n operator = DataUtil.odBiOperator[predicate.operator];\n if (operator) {\n returnValue += field;\n returnValue += operator;\n if (guid) {\n returnValue += guid;\n }\n return returnValue + val;\n }\n if (!isNullOrUndefined(this.getModuleName)) {\n if (this.getModuleName() === 'ODataV4Adaptor') {\n operator = DataUtil.odv4UniOperator[predicate.operator];\n }\n }\n else {\n operator = DataUtil.odUniOperator[predicate.operator];\n }\n if (operator === 'substringof') {\n var temp = val;\n val = field;\n field = temp;\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += val + ')';\n return returnValue;\n };\n ODataAdaptor.prototype.addParams = function (options) {\n _super.prototype.addParams.call(this, options);\n delete options.reqParams.params;\n };\n /**\n * Generate request string based on the multiple filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n var res = [];\n for (var i = 0; i < predicate.predicates.length; i++) {\n res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n }\n return res.join(' ' + predicate.condition + ' ');\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {Predicate} filter\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onEachWhere = function (filter, query, requiresCast) {\n return filter.isComplex ? this.onComplexPredicate(filter, query, requiresCast) : this.onPredicate(filter, query, requiresCast);\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {string[]} filters\n */\n ODataAdaptor.prototype.onWhere = function (filters) {\n if (this.pvt.search) {\n filters.push(this.onEachWhere(this.pvt.search, null, true));\n }\n return filters.join(' and ');\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataAdaptor.prototype.onEachSearch = function (e) {\n if (e.fields && e.fields.length === 0) {\n DataUtil.throwError('Query() - Search : oData search requires list of field names to search');\n }\n var filter = this.pvt.search || [];\n for (var i = 0; i < e.fields.length; i++) {\n filter.push(new Predicate(e.fields[i], e.operator, e.key, e.ignoreCase));\n }\n this.pvt.search = filter;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataAdaptor.prototype.onSearch = function (e) {\n this.pvt.search = Predicate.or(this.pvt.search);\n return '';\n };\n /**\n * Generate query string based on multiple sort criteria from query.\n * @param {QueryOptions} e\n */\n ODataAdaptor.prototype.onEachSort = function (e) {\n var res = [];\n if (e.name instanceof Array) {\n for (var i = 0; i < e.name.length; i++) {\n res.push(ODataAdaptor.getField(e.name[i]) + (e.direction === 'descending' ? ' desc' : ''));\n }\n }\n else {\n res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n }\n return res.join(',');\n };\n /**\n * Returns sort query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSortBy = function (e) {\n return e.reverse().join(',');\n };\n /**\n * Adds the group query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return [];\n };\n /**\n * Returns the select query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSelect = function (e) {\n for (var i = 0; i < e.length; i++) {\n e[i] = ODataAdaptor.getField(e[i]);\n }\n return e.join(',');\n };\n /**\n * Add the aggregate query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n return '';\n };\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataAdaptor.prototype.onCount = function (e) {\n return e === true ? 'allpages' : '';\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n ODataAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.options.multipartAccept);\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.overrideMimeType('text/plain; charset=x-user-defined');\n }\n else {\n request.setRequestHeader('Accept', this.options.accept);\n }\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.setRequestHeader('MaxDataServiceVersion', '2.0');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n if (!isNullOrUndefined(data.d)) {\n var dataCopy = ((query && query.isCountRequired) ? data.d.results : data.d);\n var metaData = '__metadata';\n if (!isNullOrUndefined(dataCopy)) {\n for (var i = 0; i < dataCopy.length; i++) {\n if (!isNullOrUndefined(dataCopy[i][metaData])) {\n delete dataCopy[i][metaData];\n }\n }\n }\n }\n var pvt = request && request[pvtData];\n var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var count = null;\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n var oDataCount = '__count';\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n if (data.d) {\n data = data.d;\n }\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n }\n if (version === 3 && data.value) {\n data = data.value;\n }\n if (data.d) {\n data = data.d;\n }\n if (version < 3 && data.results) {\n data = data.results;\n }\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Converts the request object to query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n * @returns tableName\n */\n ODataAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n var res = [];\n var table = 'table';\n var tableName = request[table] || '';\n var format = '$format';\n delete request[table];\n if (dm.dataSource.requiresFormat) {\n request[format] = 'json';\n }\n var keys = Object.keys(request);\n for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\n var prop = keys_4[_i];\n res.push(prop + '=' + request[prop]);\n }\n res = res.join('&');\n if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n return res;\n }\n return res.length ? tableName + '?' + res : tableName || '';\n };\n ODataAdaptor.prototype.localTimeReplacer = function (key, convertObj) {\n for (var _i = 0, _a = !isNullOrUndefined(convertObj) ? Object.keys(convertObj) : []; _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((convertObj[prop] instanceof Date)) {\n convertObj[prop] = DataUtil.dateParse.toLocalTime(convertObj[prop]);\n }\n }\n return convertObj;\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : ''),\n data: JSON.stringify(data, this.options.localTime ? this.localTimeReplacer : null)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var url;\n if (typeof value === 'string' && !DataUtil.parse.isGuid(value)) {\n url = \"('\" + value + \"')\";\n }\n else {\n url = \"(\" + value + \")\";\n }\n return {\n type: 'DELETE',\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + url\n };\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns this\n */\n ODataAdaptor.prototype.update = function (dm, keyField, value, tableName, query, original) {\n if (this.options.updateType === 'PATCH' && !isNullOrUndefined(original)) {\n value = this.compareAndRemove(value, original, keyField);\n }\n var url;\n if (typeof value[keyField] === 'string' && !DataUtil.parse.isGuid(value[keyField])) {\n url = \"('\" + value[keyField] + \"')\";\n }\n else {\n url = \"(\" + value[keyField] + \")\";\n }\n return {\n type: this.options.updateType,\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + url,\n data: JSON.stringify(value, this.options.localTime ? this.localTimeReplacer : null),\n accept: this.options.accept\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @returns {Object}\n */\n ODataAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n var args = {\n url: e.url,\n key: e.key,\n cid: 1,\n cSet: DataUtil.getGuid(this.options.changeSet)\n };\n var req = '--' + initialGuid + '\\n';\n req += 'Content-Type: multipart/mixed; boundary=' + args.cSet.replace('--', '') + '\\n';\n this.pvt.changeSet = 0;\n req += this.generateInsertRequest(changes.addedRecords, args);\n req += this.generateUpdateRequest(changes.changedRecords, args, original ? original.changedRecords : []);\n req += this.generateDeleteRequest(changes.deletedRecords, args);\n req += args.cSet + '--\\n';\n req += '--' + initialGuid + '--';\n return {\n type: 'POST',\n url: url,\n dataType: 'json',\n contentType: 'multipart/mixed; charset=UTF-8;boundary=' + initialGuid,\n data: req\n };\n };\n /**\n * Generate the string content from the removed records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @returns this\n */\n ODataAdaptor.prototype.generateDeleteRequest = function (arr, e) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'DELETE ',\n 'url': function (data, i, key) { return '(' + data[i][key] + ')'; },\n 'data': function (data, i) { return ''; }\n };\n req = this.generateBodyContent(arr, e, stat);\n return req + '\\n';\n };\n /**\n * Generate the string content from the inserted records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n */\n ODataAdaptor.prototype.generateInsertRequest = function (arr, e) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat);\n return req;\n };\n /**\n * Generate the string content from the updated records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n */\n ODataAdaptor.prototype.generateUpdateRequest = function (arr, e, org) {\n var _this = this;\n if (!arr) {\n return '';\n }\n var req = '';\n arr.forEach(function (change) { return change = _this.compareAndRemove(change, org.filter(function (o) { return DataUtil.getObject(e.key, o) === DataUtil.getObject(e.key, change); })[0], e.key); });\n var stat = {\n 'method': this.options.updateType + ' ',\n 'url': function (data, i, key) { return '(' + data[i][key] + ')'; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat);\n return req;\n };\n ODataAdaptor.getField = function (prop) {\n return prop.replace(/\\./g, '/');\n };\n ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat) {\n var req = '';\n for (var i = 0; i < arr.length; i++) {\n req += '\\n' + e.cSet + '\\n';\n req += this.options.changeSetContent + '\\n\\n';\n req += stat.method;\n req += e.url + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n req += 'Accept: ' + this.options.accept + '\\n';\n req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n req += this.options.batchChangeSetContentType + '\\n';\n if (!isNullOrUndefined(arr[i]['@odata.etag'])) {\n req += 'If-Match: ' + arr[i]['@odata.etag'] + '\\n\\n';\n delete arr[i]['@odata.etag'];\n }\n else {\n req += '\\n';\n }\n req += stat.data(arr, i);\n }\n return req;\n };\n ODataAdaptor.prototype.processBatchResponse = function (data, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n if (request && this.options.batch && DataUtil.endsWith(request.url, this.options.batch) && request.type.toLowerCase() === 'post') {\n var guid = xhr.getResponseHeader('Content-Type');\n var cIdx = void 0;\n var jsonObj = void 0;\n var d = data + '';\n guid = guid.substring(guid.indexOf('=batchresponse') + 1);\n d = d.split(guid);\n if (d.length < 2) {\n return {};\n }\n d = d[1];\n var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n if (exVal) {\n d.replace(exVal[0], '');\n }\n var changeGuid = exVal ? exVal[1] : '';\n d = d.split(changeGuid);\n for (var i = d.length; i > -1; i--) {\n if (!/\\bContent-ID:/i.test(d[i]) || !/\\bHTTP.+201/.test(d[i])) {\n continue;\n }\n cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n if (changes.addedRecords[cIdx]) {\n jsonObj = DataUtil.parse.parseJson(/^\\{.+\\}/m.exec(d[i])[0]);\n extend({}, changes.addedRecords[cIdx], this.processResponse(jsonObj));\n }\n }\n return changes;\n }\n return null;\n };\n ODataAdaptor.prototype.compareAndRemove = function (data, original, key) {\n var _this = this;\n if (isNullOrUndefined(original)) {\n return data;\n }\n Object.keys(data).forEach(function (prop) {\n if (prop !== key && prop !== '@odata.etag') {\n if (DataUtil.isPlainObject(data[prop])) {\n _this.compareAndRemove(data[prop], original[prop]);\n var final = Object.keys(data[prop]).filter(function (data) { return data !== '@odata.etag'; });\n if (final.length === 0) {\n delete data[prop];\n }\n }\n else if (data[prop] === original[prop]) {\n delete data[prop];\n }\n else if (data[prop] && original[prop] && data[prop].valueOf() === original[prop].valueOf()) {\n delete data[prop];\n }\n }\n });\n return data;\n };\n return ODataAdaptor;\n}(UrlAdaptor));\nexport { ODataAdaptor };\n/**\n * The OData v4 is an improved version of OData protocols.\n * The DataManager uses the ODataV4Adaptor to consume OData v4 services.\n * @hidden\n */\nvar ODataV4Adaptor = /** @class */ (function (_super) {\n __extends(ODataV4Adaptor, _super);\n function ODataV4Adaptor(props) {\n var _this = _super.call(this, props) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json, text/javascript, */*; q=0.01',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$count',\n search: '$search',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PATCH',\n localTime: false,\n apply: '$apply'\n });\n getValue('getModulename', _this.getModulename());\n extend(_this.options, props || {});\n return _this;\n }\n /**\n * @hidden\n */\n ODataV4Adaptor.prototype.getModulename = function () {\n return 'ODataV4Adaptor';\n };\n ;\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataV4Adaptor.prototype.onCount = function (e) {\n return e === true ? 'true' : '';\n };\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var val = predicate.value;\n var isDate = val instanceof Date;\n returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n if (isDate) {\n returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n }\n return returnValue;\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataV4Adaptor.prototype.onEachSearch = function (e) {\n var search = this.pvt.searches || [];\n search.push(e.key);\n this.pvt.searches = search;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataV4Adaptor.prototype.onSearch = function (e) {\n return this.pvt.searches.join(' OR ');\n };\n /**\n * Returns the expand query string.\n * @param {string} e\n */\n ODataV4Adaptor.prototype.onExpand = function (e) {\n var _this = this;\n var selected = {};\n var expanded = {};\n var expands = e.expands.slice();\n var exArr = [];\n var selects = e.selects.filter(function (item) { return item.indexOf('.') > -1; });\n selects.forEach(function (select) {\n var splits = select.split('.');\n if (!(splits[0] in selected)) {\n selected[splits[0]] = [];\n }\n selected[splits[0]].push(splits[1]);\n });\n //Auto expand from select query\n Object.keys(selected).forEach(function (expand) {\n if ((expands.indexOf(expand) === -1)) {\n expands.push(expand);\n }\n });\n expands.forEach(function (expand) {\n expanded[expand] = expand in selected ? expand + \"(\" + _this.options.select + \"=\" + selected[expand].join(',') + \")\" : expand;\n });\n Object.keys(expanded).forEach(function (ex) { return exArr.push(expanded[ex]); });\n return exArr.join(',');\n };\n /**\n * Returns the groupby query string.\n * @param {string} e\n */\n ODataV4Adaptor.prototype.onDistinct = function (distinctFields) {\n var fields = distinctFields.map(function (field) { return ODataAdaptor.getField(field); }).join(',');\n return \"groupby((\" + fields + \"))\";\n };\n /**\n * Returns the select query string.\n * @param {string[]} e\n */\n ODataV4Adaptor.prototype.onSelect = function (e) {\n return _super.prototype.onSelect.call(this, e.filter(function (item) { return item.indexOf('.') === -1; }));\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n ODataV4Adaptor.prototype.beforeSend = function (dm, request, settings) {\n if (settings.type === 'POST' || settings.type === 'PUT' || settings.type === 'PATCH') {\n request.setRequestHeader('Prefer', 'return=representation');\n }\n request.setRequestHeader('Accept', this.options.accept);\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var count = null;\n var dataCount = '@odata.count';\n if (query && query.isCountRequired) {\n if (dataCount in data) {\n count = data[dataCount];\n }\n }\n data = !isNullOrUndefined(data.value) ? data.value : data;\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: count, aggregates: args.aggregates };\n };\n return ODataV4Adaptor;\n}(ODataAdaptor));\nexport { ODataV4Adaptor };\n/**\n * The Web API is a programmatic interface to define the request and response messages system that is mostly exposed in JSON or XML.\n * The DataManager uses the WebApiAdaptor to consume Web API.\n * Since this adaptor is targeted to interact with Web API created using OData endpoint, it is extended from ODataAdaptor\n * @hidden\n */\nvar WebApiAdaptor = /** @class */ (function (_super) {\n __extends(WebApiAdaptor, _super);\n function WebApiAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.url,\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url + '/' + value,\n data: JSON.stringify(value)\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url,\n data: JSON.stringify(value)\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n WebApiAdaptor.prototype.beforeSend = function (dm, request, settings) {\n request.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n WebApiAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var count = null;\n var args = {};\n if (request && request.type.toLowerCase() !== 'post') {\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n if (!DataUtil.isNull(data.Count)) {\n count = data.Count;\n }\n }\n if (version < 3 && data.Items) {\n data = data.Items;\n }\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n }\n args.result = args.result || data;\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n return WebApiAdaptor;\n}(ODataAdaptor));\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n * @hidden\n */\nvar WebMethodAdaptor = /** @class */ (function (_super) {\n __extends(WebMethodAdaptor, _super);\n function WebMethodAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare the request body based on the query.\n * The query information can be accessed at the WebMethod using variable named `value`.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns application\n */\n WebMethodAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var obj = new UrlAdaptor().processQuery(dm, query, hierarchyFilters);\n var getData = 'data';\n var data = DataUtil.parse.parseJson(obj[getData]);\n var result = {};\n var value = 'value';\n if (data.param) {\n for (var i = 0; i < data.param.length; i++) {\n var param = data.param[i];\n var key = Object.keys(param)[0];\n result[key] = param[key];\n }\n }\n result[value] = data;\n var pvtData = 'pvtData';\n var url = 'url';\n return {\n data: JSON.stringify(result),\n url: obj[url],\n pvtData: obj[pvtData],\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n };\n return WebMethodAdaptor;\n}(UrlAdaptor));\nexport { WebMethodAdaptor };\n/**\n * RemoteSaveAdaptor, extended from JsonAdaptor and it is used for binding local data and performs all DataManager queries in client-side.\n * It interacts with server-side only for CRUD operations.\n * @hidden\n */\nvar RemoteSaveAdaptor = /** @class */ (function (_super) {\n __extends(RemoteSaveAdaptor, _super);\n /**\n * @hidden\n */\n function RemoteSaveAdaptor() {\n var _this = _super.call(this) || this;\n setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n return _this;\n }\n RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName) {\n this.updateType = 'add';\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: data,\n table: tableName,\n action: 'insert'\n })\n };\n };\n RemoteSaveAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n _super.prototype.remove.call(this, dm, keyField, value);\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n })\n };\n };\n RemoteSaveAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.updateType = 'update';\n this.updateKey = keyField;\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: value[keyField],\n table: tableName\n })\n };\n };\n RemoteSaveAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes, e) {\n var i;\n if (this.updateType === 'add') {\n _super.prototype.insert.call(this, ds, data);\n }\n if (this.updateType === 'update') {\n _super.prototype.update.call(this, ds, this.updateKey, data);\n }\n if (data.added) {\n for (i = 0; i < data.added.length; i++) {\n _super.prototype.insert.call(this, ds, data.added[i]);\n }\n }\n if (data.changed) {\n for (i = 0; i < data.changed.length; i++) {\n _super.prototype.update.call(this, ds, e.key, data.changed[i]);\n }\n }\n if (data.deleted) {\n for (i = 0; i < data.deleted.length; i++) {\n _super.prototype.remove.call(this, ds, e.key, data.deleted[i]);\n }\n }\n return data;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * Also perform the changes in the locally cached data to sync with the remote data.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n RemoteSaveAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify({\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e.url,\n key: e.key\n })\n };\n };\n return RemoteSaveAdaptor;\n}(JsonAdaptor));\nexport { RemoteSaveAdaptor };\n/**\n * Cache Adaptor is used to cache the data of the visited pages. It prevents new requests for the previously visited pages.\n * You can configure cache page size and duration of caching by using cachingPageSize and timeTillExpiration properties of the DataManager\n * @hidden\n */\nvar CacheAdaptor = /** @class */ (function (_super) {\n __extends(CacheAdaptor, _super);\n /**\n * Constructor for CacheAdaptor class.\n * @param {CacheAdaptor} adaptor?\n * @param {number} timeStamp?\n * @param {number} pageSize?\n * @hidden\n */\n function CacheAdaptor(adaptor, timeStamp, pageSize) {\n var _this = _super.call(this) || this;\n _this.isCrudAction = false;\n _this.isInsertAction = false;\n if (!isNullOrUndefined(adaptor)) {\n _this.cacheAdaptor = adaptor;\n }\n _this.pageSize = pageSize;\n _this.guidId = DataUtil.getGuid('cacheAdaptor');\n var obj = { keys: [], results: [] };\n window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n var guid = _this.guidId;\n if (!isNullOrUndefined(timeStamp)) {\n setInterval(function () {\n var data;\n data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n var forDel = [];\n for (var i = 0; i < data.results.length; i++) {\n var currentTime = +new Date();\n var requestTime = +new Date(data.results[i].timeStamp);\n data.results[i].timeStamp = currentTime - requestTime;\n if (currentTime - requestTime > timeStamp) {\n forDel.push(i);\n }\n }\n for (var i = 0; i < forDel.length; i++) {\n data.results.splice(forDel[i], 1);\n data.keys.splice(forDel[i], 1);\n }\n window.localStorage.removeItem(guid);\n window.localStorage.setItem(guid, JSON.stringify(data));\n }, timeStamp);\n }\n return _this;\n }\n /**\n * It will generate the key based on the URL when we send a request to server.\n * @param {string} url\n * @param {Query} query?\n * @hidden\n */\n CacheAdaptor.prototype.generateKey = function (url, query) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var key = url;\n var page = 'onPage';\n if (page in singles) {\n key += singles[page].pageIndex;\n }\n queries.sorts.forEach(function (obj) {\n key += obj.e.direction + obj.e.fieldName;\n });\n queries.groups.forEach(function (obj) {\n key += obj.e.fieldName;\n });\n queries.searches.forEach(function (obj) {\n key += obj.e.searchKey;\n });\n for (var filter = 0; filter < queries.filters.length; filter++) {\n var currentFilter = queries.filters[filter];\n if (currentFilter.e.isComplex) {\n var newQuery = query.clone();\n newQuery.queries = [];\n for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter });\n }\n key += currentFilter.e.condition + this.generateKey(url, newQuery);\n }\n else {\n key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n }\n }\n return key;\n };\n /**\n * Process the query to generate request body.\n * If the data is already cached, it will return the cached data.\n * @param {DataManager} dm\n * @param {Query} query?\n * @param {Object[]} hierarchyFilters?\n */\n CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var key = this.generateKey(dm.dataSource.url, query);\n var cachedItems;\n cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n if (data != null && !this.isCrudAction && !this.isInsertAction) {\n return data;\n }\n this.isCrudAction = null;\n this.isInsertAction = null;\n return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n */\n CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (this.isInsertAction || (request && this.cacheAdaptor.options.batch &&\n DataUtil.endsWith(request.url, this.cacheAdaptor.options.batch) && request.type.toLowerCase() === 'post')) {\n return this.cacheAdaptor.processResponse(data, ds, query, xhr, request, changes);\n }\n data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n var key = query ? this.generateKey(ds.dataSource.url, query) : ds.dataSource.url;\n var obj = {};\n obj = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var index = obj.keys.indexOf(key);\n if (index !== -1) {\n obj.results.splice(index, 1);\n obj.keys.splice(index, 1);\n }\n obj.results[obj.keys.push(key) - 1] = { keys: key, result: data.result, timeStamp: new Date(), count: data.count };\n while (obj.results.length > this.pageSize) {\n obj.results.splice(0, 1);\n obj.keys.splice(0, 1);\n }\n window.localStorage.setItem(this.guidId, JSON.stringify(obj));\n return data;\n };\n /**\n * Method will trigger before send the request to server side. Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.multipartAccept);\n }\n if (!dm.dataSource.crossDomain) {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.accept);\n }\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n CacheAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.update(dm, keyField, value, tableName);\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.insert = function (dm, data, tableName) {\n this.isInsertAction = true;\n return this.cacheAdaptor.insert(dm, data, tableName);\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.remove(dm, keyField, value, tableName);\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return this.cacheAdaptor.batchRequest(dm, changes, e);\n };\n return CacheAdaptor;\n}(UrlAdaptor));\nexport { CacheAdaptor };\n","import { Ajax } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\nvar DataManager = /** @class */ (function () {\n /**\n * Constructor for DataManager class\n * @param {DataOptions|JSON[]} dataSource?\n * @param {Query} query?\n * @param {AdaptorOptions|string} adaptor?\n * @hidden\n */\n function DataManager(dataSource, query, adaptor) {\n var _this = this;\n /** @hidden */\n this.dateParse = true;\n this.requests = [];\n if (!dataSource && !this.dataSource) {\n dataSource = [];\n }\n adaptor = adaptor || dataSource.adaptor;\n var data;\n if (dataSource instanceof Array) {\n data = {\n json: dataSource,\n offline: true\n };\n }\n else if (typeof dataSource === 'object') {\n if (!dataSource.json) {\n dataSource.json = [];\n }\n data = {\n url: dataSource.url,\n insertUrl: dataSource.insertUrl,\n removeUrl: dataSource.removeUrl,\n updateUrl: dataSource.updateUrl,\n crudUrl: dataSource.crudUrl,\n batchUrl: dataSource.batchUrl,\n json: dataSource.json,\n headers: dataSource.headers,\n accept: dataSource.accept,\n data: dataSource.data,\n timeTillExpiration: dataSource.timeTillExpiration,\n cachingPageSize: dataSource.cachingPageSize,\n enableCaching: dataSource.enableCaching,\n requestType: dataSource.requestType,\n key: dataSource.key,\n crossDomain: dataSource.crossDomain,\n jsonp: dataSource.jsonp,\n dataType: dataSource.dataType,\n offline: dataSource.offline !== undefined ? dataSource.offline\n : dataSource.adaptor instanceof RemoteSaveAdaptor ? false : dataSource.url ? false : true,\n requiresFormat: dataSource.requiresFormat\n };\n }\n else {\n DataUtil.throwError('DataManager: Invalid arguments');\n }\n if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n }\n if (data.dataType === undefined) {\n data.dataType = 'json';\n }\n this.dataSource = data;\n this.defaultQuery = query;\n if (data.url && data.offline && !data.json.length) {\n this.isDataAvailable = false;\n this.adaptor = adaptor || new ODataAdaptor();\n this.dataSource.offline = false;\n this.ready = this.executeQuery(query || new Query());\n this.ready.then(function (e) {\n _this.dataSource.offline = true;\n _this.isDataAvailable = true;\n data.json = e.result;\n _this.adaptor = new JsonAdaptor();\n });\n }\n else {\n this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n }\n if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n data.jsonp = 'callback';\n }\n this.adaptor = adaptor || this.adaptor;\n if (data.enableCaching) {\n this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n }\n return this;\n }\n /**\n * Overrides DataManager's default query with given query.\n * @param {Query} query - Defines the new default query.\n */\n DataManager.prototype.setDefaultQuery = function (query) {\n this.defaultQuery = query;\n return this;\n };\n /**\n * Executes the given query with local data source.\n * @param {Query} query - Defines the query to retrieve data.\n */\n DataManager.prototype.executeLocal = function (query) {\n if (!this.defaultQuery && !(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeLocal() : A query is required to execute');\n }\n if (!this.dataSource.json) {\n DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n }\n query = query || this.defaultQuery;\n var result = this.adaptor.processQuery(this, query);\n if (query.subQuery) {\n var from = query.subQuery.fromTable;\n var lookup = query.subQuery.lookups;\n var res = query.isCountRequired ? result.result :\n result;\n if (lookup && lookup instanceof Array) {\n DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n }\n for (var j = 0; j < res.length; j++) {\n if (res[j][from] instanceof Array) {\n res[j] = extend({}, {}, res[j]);\n res[j][from] = this.adaptor.processResponse(query.subQuery.using(new DataManager(res[j][from].slice(0))).executeLocal(), this, query);\n }\n }\n }\n return this.adaptor.processResponse(result, this, query);\n };\n /**\n * Executes the given query with either local or remote data source.\n * It will be executed as asynchronously and returns Promise object which will be resolved or rejected after action completed.\n * @param {Query|Function} query - Defines the query to retrieve data.\n * @param {Function} done - Defines the callback function and triggers when the Promise is resolved.\n * @param {Function} fail - Defines the callback function and triggers when the Promise is rejected.\n * @param {Function} always - Defines the callback function and triggers when the Promise is resolved or rejected.\n */\n DataManager.prototype.executeQuery = function (query, done, fail, always) {\n var _this = this;\n if (typeof query === 'function') {\n always = fail;\n fail = done;\n done = query;\n query = null;\n }\n if (!query) {\n query = this.defaultQuery;\n }\n if (!(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n }\n var deffered = new Deferred();\n var args = { query: query };\n if (!this.dataSource.offline && (this.dataSource.url !== undefined && this.dataSource.url !== '')) {\n var result = this.adaptor.processQuery(this, query);\n this.makeRequest(result, deffered, args, query);\n }\n else {\n DataManager.nextTick(function () {\n var res = _this.executeLocal(query);\n args = DataManager.getDeferedArgs(query, res, args);\n deffered.resolve(args);\n });\n }\n if (done || fail) {\n deffered.promise.then(done, fail);\n }\n if (always) {\n deffered.promise.then(always, always);\n }\n return deffered.promise;\n };\n DataManager.getDeferedArgs = function (query, result, args) {\n if (query.isCountRequired) {\n args.result = result.result;\n args.count = result.count;\n args.aggregates = result.aggregates;\n }\n else {\n args.result = result;\n }\n return args;\n };\n DataManager.nextTick = function (fn) {\n (window.setImmediate || window.setTimeout)(fn, 0);\n };\n DataManager.prototype.extendRequest = function (url, fnSuccess, fnFail) {\n return extend({}, {\n type: 'GET',\n dataType: this.dataSource.dataType,\n crossDomain: this.dataSource.crossDomain,\n jsonp: this.dataSource.jsonp,\n cache: true,\n processData: false,\n onSuccess: fnSuccess,\n onFailure: fnFail\n }, url);\n };\n DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n var _this = this;\n var isSelector = !!query.subQuerySelector;\n var fnFail = function (e) {\n args.error = e;\n deffered.reject(args);\n };\n var process = function (data, count, xhr, request, actual, aggregates, virtualSelectRecords) {\n args.xhr = xhr;\n args.count = count ? parseInt(count.toString(), 10) : 0;\n args.result = data;\n args.request = request;\n args.aggregates = aggregates;\n args.actual = actual;\n args.virtualSelectRecords = virtualSelectRecords;\n deffered.resolve(args);\n };\n var fnQueryChild = function (data, selector) {\n var subDeffer = new Deferred();\n var childArgs = { parent: args };\n query.subQuery.isChild = true;\n var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n if (!isSelector) {\n subDeffer.then(function (subData) {\n if (data) {\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, data, subData, query.subQuery.key);\n process(data, subData.count, subData.xhr);\n }\n }, fnFail);\n }\n return childReq;\n };\n var fnSuccess = function (data, request) {\n if (request.httpRequest.getResponseHeader('Content-Type').indexOf('xml') === -1 && _this.dateParse) {\n data = DataUtil.parse.parseJson(data);\n }\n var result = _this.adaptor.processResponse(data, _this, query, request.httpRequest, request);\n var count = 0;\n var aggregates = null;\n var virtualSelectRecords = 'virtualSelectRecords';\n var virtualRecords = data[virtualSelectRecords];\n if (query.isCountRequired) {\n count = result.count;\n aggregates = result.aggregates;\n result = result.result;\n }\n if (!query.subQuery) {\n process(result, count, request.httpRequest, request.type, data, aggregates, virtualRecords);\n return;\n }\n if (!isSelector) {\n fnQueryChild(result, request);\n }\n };\n var req = this.extendRequest(url, fnSuccess, fnFail);\n var ajax = new Ajax(req);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n req = ajax.send();\n req.catch(function (e) { return true; }); // to handle failure remote requests. \n this.requests.push(ajax);\n if (isSelector) {\n var promise = void 0;\n var res = query.subQuerySelector.call(this, { query: query.subQuery, parent: query });\n if (res && res.length) {\n promise = Promise.all([req, fnQueryChild(null, res)]);\n promise.then(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = args[0];\n var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].httpRequest, _this.requests[0]);\n var count = 0;\n if (query.isCountRequired) {\n count = pResult.count;\n pResult = pResult.result;\n }\n var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].httpRequest, _this.requests[1]);\n count = 0;\n if (query.subQuery.isCountRequired) {\n count = cResult.count;\n cResult = cResult.result;\n }\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, pResult, cResult, query.subQuery.key);\n isSelector = false;\n process(pResult, count, _this.requests[0].httpRequest);\n });\n }\n else {\n isSelector = false;\n }\n }\n return req;\n };\n DataManager.prototype.beforeSend = function (request, settings) {\n this.adaptor.beforeSend(this, request, settings);\n var headers = this.dataSource.headers;\n var props;\n for (var i = 0; headers && i < headers.length; i++) {\n props = [];\n var keys = Object.keys(headers[i]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n props.push(prop);\n request.setRequestHeader(prop, headers[i][prop]);\n }\n }\n };\n /**\n * Save bulk changes to the given table name.\n * User can add a new record, edit an existing record, and delete a record at the same time.\n * If the datasource from remote, then updated in a single post.\n * @param {Object} changes - Defines the CrudOptions.\n * @param {string} key - Defines the column field.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.saveChanges = function (changes, key, tableName, query, original) {\n var _this = this;\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var args = {\n url: tableName,\n key: key || this.dataSource.key\n };\n var req = this.adaptor.batchRequest(this, changes, args, query, original);\n if (this.dataSource.offline) {\n return req;\n }\n var deff = new Deferred();\n var ajax = new Ajax(req);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n ajax.onSuccess = function (data, request) {\n deff.resolve(_this.adaptor.processResponse(data, _this, null, request.httpRequest, request, changes, args));\n };\n ajax.onFailure = function (e) {\n deff.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests. \n return deff.promise;\n };\n /**\n * Inserts new record in the given table.\n * @param {Object} data - Defines the data to insert.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.insert = function (data, tableName, query, position) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var req = this.adaptor.insert(this, data, tableName, query, position);\n if (this.dataSource.offline) {\n return req;\n }\n return this.doAjaxRequest(req);\n };\n /**\n * Removes data from the table with the given key.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.remove = function (keyField, value, tableName, query) {\n if (typeof value === 'object') {\n value = value[keyField];\n }\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.remove(this, keyField, value, tableName, query);\n if (this.dataSource.offline) {\n return res;\n }\n return this.doAjaxRequest(res);\n };\n /**\n * Updates existing record in the given table.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.update = function (keyField, value, tableName, query, original) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.update(this, keyField, value, tableName, query, original);\n if (this.dataSource.offline) {\n return res;\n }\n return this.doAjaxRequest(res);\n };\n DataManager.prototype.doAjaxRequest = function (res) {\n var _this = this;\n var defer = new Deferred();\n res = extend({}, {\n type: 'POST',\n contentType: 'application/json; charset=utf-8',\n processData: false\n }, res);\n var ajax = new Ajax(res);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n ajax.onSuccess = function (record, request) {\n try {\n DataUtil.parse.parseJson(record);\n }\n catch (e) {\n record = [];\n }\n record = _this.adaptor.processResponse(DataUtil.parse.parseJson(record), _this, null, request.httpRequest, request);\n defer.resolve(record);\n };\n ajax.onFailure = function (e) {\n defer.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests.\n return defer.promise;\n };\n return DataManager;\n}());\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined, append, detach } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n content: 'e-content',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist'\n};\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n *
\n *
    \n *
  • Favourite
  • \n *
  • Documents
  • \n *
  • Downloads
  • \n *
\n *
\n * ```\n * ```typescript\n * var lvObj = new ListView({});\n * lvObj.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n */\n function ListView(options, element) {\n return _super.call(this, options, element) || this;\n }\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false);\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false);\n break;\n case 'enableVirtualization':\n detach(this.contentContainer);\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.getBoundingClientRect().height ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n //Suport Component Functions\n ListView.prototype.header = function (text, showBack) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText, innerHTML: this.headerTitle });\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' e-but-back',\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n append(compiledString({}), headerTemplateEle);\n append([headerTemplateEle], this.headerEle);\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'group', wrapperRole: 'presentation'\n },\n fields: this.fields.properties, sortOrder: this.sortOrder, showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this)\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = [];\n this.aniObj = new Animation(this.animateOptions);\n };\n ListView.prototype.renderCheckbox = function (args) {\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData = void 0;\n checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData = getFieldValues(args.curData, this.listBaseOption.fields);\n if (fieldData[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n args.item.setAttribute('aria-selected', 'true');\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * It is used to check the checkbox of an item.\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n checked ? liElement.classList.add(classNames.selected) : liElement.classList.remove(classNames.selected);\n liElement.setAttribute('aria-selected', checked ? 'true' : 'false');\n checked ? checkboxIcon.classList.add(classNames.checked) : checkboxIcon.classList.remove(classNames.checked);\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n }\n };\n /**\n * It is used to uncheck the checkbox of an item.\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.uncheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * It is used to check all the items in ListView.\n */\n ListView.prototype.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * It is used to un-check all the items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n }\n };\n ListView.prototype.setCheckbox = function () {\n var _this = this;\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args_1 = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n liCollection.forEach(function (element) {\n args_1.item = element;\n args_1.curData = _this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n _this.renderCheckbox(args_1);\n if (args_1.item.classList.contains(classNames.selected)) {\n _this.checkInternally(args_1, args_1.item.querySelector('.' + classNames.checkboxWrapper));\n }\n });\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n liCollection.forEach(function (element) {\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n });\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n ListView.prototype.clickHandler = function (e) {\n var target = e.target;\n var classList = target.classList;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n li.classList.add(classNames.focused);\n }\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n var checkIcon = li.querySelector('.' + classNames.checkboxIcon);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n ListView.prototype.leaveHandler = function (e) {\n this.removeHover();\n };\n ;\n ListView.prototype.homeKeyHandler = function (e, end) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelectorAll('.' + classNames.listItem);\n var focusedElement = this.curUL.querySelector('.' + classNames.focused) ||\n this.curUL.querySelector('.' + classNames.selected);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n focusedElement.classList.remove(classNames.selected);\n }\n }\n var index = !end ? 0 : li.length - 1;\n if (li[index].classList.contains(classNames.hasChild) || this.showCheckBox) {\n li[index].classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(li[index], e);\n }\n }\n };\n ListView.prototype.onArrowKeyDown = function (e, prev) {\n var siblingLI;\n var li;\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n if (hasChild || this.showCheckBox) {\n li = this.curUL.querySelector('.' + classNames.focused) || this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n if (!isNullOrUndefined(siblingLI)) {\n if (li) {\n li.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n li.classList.remove(classNames.selected);\n }\n }\n if (siblingLI.classList.contains(classNames.hasChild) || this.showCheckBox) {\n siblingLI.classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(siblingLI, e);\n }\n }\n }\n else {\n li = this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n this.setSelectLI(siblingLI, e);\n }\n return siblingLI;\n };\n ListView.prototype.arrowKeyHandler = function (e, prev) {\n var _this = this;\n if (Object.keys(this.dataSource).length && this.curUL) {\n var siblingLI = this.onArrowKeyDown(e, prev);\n var elementTop = this.element.getBoundingClientRect().top;\n var elementHeight = this.element.getBoundingClientRect().height;\n var firstItemBounds = this.curUL.querySelector('.' + classNames.listItem).getBoundingClientRect();\n var heightDiff = void 0;\n var groupItemBounds = void 0;\n if (this.fields.groupBy) {\n groupItemBounds = this.curUL.querySelector('.' + classNames.groupListItem).getBoundingClientRect();\n }\n if (siblingLI) {\n var siblingTop = siblingLI.getBoundingClientRect().top;\n var siblingHeight = siblingLI.getBoundingClientRect().height;\n if (!prev) {\n var height = this.isWindow ? window.innerHeight : elementHeight;\n heightDiff = this.isWindow ? (siblingTop + siblingHeight) :\n ((siblingTop - elementTop) + siblingHeight);\n if (heightDiff > height) {\n this.isWindow ? window.scrollTo(0, pageYOffset + (heightDiff - height)) :\n this.element.scrollTo(0, this.element.scrollTop + (heightDiff - height));\n }\n }\n else {\n heightDiff = this.isWindow ? siblingTop : (siblingTop - elementTop);\n if (heightDiff < 0) {\n this.isWindow ? window.scrollTo(0, pageYOffset + heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop + heightDiff);\n }\n }\n }\n else if (this.enableVirtualization && prev && this.virtualizationModule.uiFirstIndex) {\n this.onUIScrolled = function () {\n _this.onArrowKeyDown(e, prev);\n _this.onUIScrolled = undefined;\n };\n heightDiff = this.virtualizationModule.listItemHeight;\n this.isWindow ? window.scrollTo(0, pageYOffset - heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop - heightDiff);\n }\n else if (prev) {\n if (this.showHeader && this.headerEle) {\n var topHeight = groupItemBounds ? groupItemBounds.top : firstItemBounds.top;\n var headerBounds = this.headerEle.getBoundingClientRect();\n heightDiff = headerBounds.top < 0 ? (headerBounds.height - topHeight) : 0;\n this.isWindow ? window.scrollTo(0, pageYOffset - heightDiff)\n : this.element.scrollTo(0, 0);\n }\n else if (this.fields.groupBy) {\n heightDiff = this.isWindow ? (groupItemBounds.top < 0 ? groupItemBounds.top : 0) :\n (elementTop - firstItemBounds.top) + groupItemBounds.height;\n this.isWindow ? window.scrollTo(0, pageYOffset + heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop - heightDiff);\n }\n }\n }\n };\n ListView.prototype.enterKeyHandler = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (hasChild && li) {\n li.classList.remove(classNames.focused);\n if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n }\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n e.preventDefault();\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 9:\n this.tabFocus(e);\n break;\n case 32:\n this.spaceKeyHandler(e);\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n var activeElement = this.curUL.querySelector('[aria-selected = true]');\n if (focusedElement && !this.showCheckBox) {\n focusedElement.classList.remove(classNames.focused);\n if (activeElement) {\n activeElement.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n if (!this.enableVirtualization) {\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n }\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n if (!this.enableVirtualization) {\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n }\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n this.touchModule.destroy();\n };\n ListView.prototype.tabFocus = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var selectedList = this.curUL.querySelector('.' + classNames.selected);\n if ((!selectedList && this.curUL) || this.showCheckBox) {\n var li = this.curUL.querySelector('.' + classNames.listItem);\n if (li.classList.contains(classNames.hasChild) || this.showCheckBox) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (isNullOrUndefined(focusedElement)) {\n li.classList.add(classNames.focused);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n }\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.setAttribute('aria-selected', 'false');\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n li.classList.add(classNames.focused);\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n li.setAttribute('aria-selected', 'true');\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (!isNullOrUndefined(data)\n && typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li && li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem = { item: li, text: fieldData && fieldData[this.listBaseOption.fields.text], data: data };\n }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, { isInteracted: true, event: e, index: Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n li.setAttribute('aria-selected', 'true');\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs);\n this.selectedLI = li;\n this.renderSubList(li);\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[column]) &&\n this.fields[column] !==\n ListBase.defaultMappedFields[column]\n && columns.indexOf(this.fields[column]) === -1) {\n columns.push(this.fields[column]);\n }\n }\n query.select(columns);\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n if (dataSource && this.fields.groupBy) {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.fields, this.sortOrder);\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, this.fields.sortBy));\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n if (this.dataSource instanceof DataManager) {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n if (_this.isDestroyed) {\n return;\n }\n _this.localData = e.result;\n _this.renderList();\n _this.trigger('actionComplete', e);\n }).catch(function (e) {\n if (_this.isDestroyed) {\n return;\n }\n _this.trigger('actionFailure', e);\n });\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.element.innerHTML = '';\n this.headerEle = this.ulElement = this.liCollection = undefined;\n this.setLocalData();\n this.header();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.createElement, this.curViewDS, this.listBaseOption);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n };\n ListView.prototype.renderSubList = function (li) {\n var uID = li.getAttribute('data-uid');\n if (li.classList.contains(classNames.hasChild) && uID) {\n var ul = closest(li.parentNode, '.' + classNames.parentItem);\n var ele = this.element.querySelector('[pid=\\'' + uID + '\\']');\n this.curDSLevel.push(uID);\n this.setViewDataSource(this.getSubDS());\n if (!ele) {\n var data = this.curViewDS;\n ele = ListBase.createListFromJson(this.createElement, data, this.listBaseOption, this.curDSLevel.length);\n ele.setAttribute('pID', uID);\n ele.style.display = 'none';\n this.renderIntoDom(ele);\n }\n this.switchView(ul, ele);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.selectedItems) {\n var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);\n this.header((fieldData[this.listBaseOption.fields.text]), true);\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization && Object.keys(this.dataSource).length) {\n if ((this.template || this.groupTemplate) && !this.virtualizationModule.isNgTemplate()) {\n this.listBaseOption.template = null;\n this.listBaseOption.groupTemplate = null;\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = this.createElement('div', { className: classNames.content });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * It is used to Initialize the control rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { role: 'list', tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n this.unWireEvents();\n var classAr = [classNames.root, classNames.disable, 'e-rtl',\n 'e-has-header', 'e-control'].concat(this.cssClass.split(' ').filter(function (css) { return css; }));\n removeClass([this.element], classAr);\n this.rippleFn();\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.element.innerHTML = '';\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * It helps to switch back from navigated sub list.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.add(classNames.focused);\n if (this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked)) {\n li.setAttribute('aria-selected', 'true');\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false));\n };\n /**\n * It is used to select the list item from the ListView.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (obj) {\n if (this.enableVirtualization) {\n this.virtualizationModule.selectItem(obj);\n }\n else if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(obj));\n }\n else {\n isNullOrUndefined(obj) ? this.removeSelect() : this.setSelectLI(this.getLiFromObjOrElement(obj));\n }\n };\n ListView.prototype.getLiFromObjOrElement = function (obj) {\n var li;\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (!isNullOrUndefined(obj)) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n if (obj instanceof Element) {\n var uid = obj.getAttribute('data-uid').toString();\n for (var i = 0; i < this.liCollection.length; i++) {\n if (this.liCollection[i].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[i];\n break;\n }\n }\n }\n else {\n Array.prototype.some.call(this.curUL.querySelectorAll('.' + classNames.listItem), function (item) {\n if (item.innerText.trim() === obj.toString()) {\n li = item;\n return true;\n }\n else {\n return false;\n }\n });\n }\n }\n else {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n li = this.element.querySelector('[data-uid=\"'\n + fieldData[this.fields.id] + '\"]');\n if (!this.enableVirtualization && isNullOrUndefined(li)) {\n var curLi = this.element.querySelectorAll('.' + classNames.listItem);\n for (var i = 0; i < curLi.length; i++) {\n if (curLi[i].innerText.trim() === fieldData[this.fields.text]) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\n };\n /**\n * It is used to select multiple list item from the ListView.\n * @param {Fields[] | HTMLElement[] | Element[]} obj - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.selectMultipleItems = function (obj) {\n if (!isNullOrUndefined(obj)) {\n for (var i = 0; i < obj.length; i++) {\n if (!isNullOrUndefined(obj[i])) {\n this.selectItem(obj[i]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n /**\n * It is used to get the currently [here](./api-selectedItem.html)\n * item details from the list items.\n */\n ListView.prototype.getSelectedItems = function () {\n this.selectedId = [];\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (this.enableVirtualization) {\n return this.virtualizationModule.getSelectedItems();\n }\n else if (this.showCheckBox) {\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[i]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n if (fieldData) {\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n else {\n liTextCollection.push(undefined);\n this.selectedId.push(undefined);\n }\n }\n }\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n return { item: liCollection, data: dataSource, text: liTextCollection };\n }\n if (this.isNestedList) {\n return { item: liCollection, data: dataParent, text: liTextCollection };\n }\n else {\n return { item: liCollection, data: liDataCollection, text: liTextCollection };\n }\n }\n else {\n var liElement = this.element.getElementsByClassName(classNames.selected)[0];\n var fieldData = getFieldValues(this.getItemData(liElement), this.listBaseOption.fields);\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n return (!isNullOrUndefined(liElement)) ? {\n item: liElement, data: dataSource,\n text: liElement.innerText.trim()\n } : undefined;\n }\n else {\n if (isNullOrUndefined(fieldData) || isNullOrUndefined(liElement)) {\n return undefined;\n }\n else {\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n return {\n text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement)\n };\n }\n }\n }\n };\n /**\n * It is used to find out an item details from the current list.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (obj) {\n return this.getItemData(obj);\n };\n /**\n * A function that used to enable the disabled list items based on passed element.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.enableItem = function (obj) {\n this.setItemState(obj, true);\n if (this.enableVirtualization) {\n this.virtualizationModule.enableItem(obj);\n }\n };\n /**\n * It is used to disable the list items based on passed element.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.disableItem = function (obj) {\n this.setItemState(obj, false);\n if (this.enableVirtualization) {\n this.virtualizationModule.disableItem(obj);\n }\n };\n //A function that used to set state of the list item like enable, disable.\n ListView.prototype.setItemState = function (obj, isEnable) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (isEnable) {\n if (li) {\n li.classList.remove(classNames.disable);\n }\n delete resultJSON[this.fields.enabled];\n }\n else if (!isEnable) {\n if (li) {\n li.classList.add(classNames.disable);\n }\n resultJSON[this.fields.enabled] = false;\n }\n }\n };\n /**\n * It is used to show an list item from the ListView.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.showItem = function (obj) {\n this.showHideItem(obj, false, '');\n if (this.enableVirtualization) {\n this.virtualizationModule.showItem(obj);\n }\n };\n /**\n * It is used to hide an item from the ListView.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.hideItem = function (obj) {\n this.showHideItem(obj, true, 'none');\n if (this.enableVirtualization) {\n this.virtualizationModule.hideItem(obj);\n }\n };\n ListView.prototype.showHideItem = function (obj, isHide, display) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (li) {\n li.style.display = display;\n }\n if (isHide) {\n resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * It adds new item to current ListView.\n * To add a new item in the list view, we need to pass ‘data’ as array or object and ‘fields’ as object.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n * @param {{[key:string]:Object}[]} data - Array JSON Data that need to add.\n * @param {Fields} fields - Fields as an Object with ID and Text fields.\n */\n ListView.prototype.addItem = function (data, fields) {\n var _this = this;\n if (fields === void 0) { fields = undefined; }\n if (!(this.dataSource instanceof DataManager)) {\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields);\n }\n else {\n var ds = this.findItemFromDS(this.dataSource, fields);\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n var child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n if (ds instanceof Array) {\n data.forEach(function (dataSource) {\n _this.dataSource.push(dataSource);\n _this.setViewDataSource(_this.dataSource);\n if (_this.ulElement) {\n var index = _this.curViewDS.indexOf(dataSource);\n _this.addListItem(dataSource, index);\n var curViewDS = _this.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n _this.addListItem(curViewDS, (index - 1));\n }\n }\n else {\n _this.reRender();\n }\n });\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n ds[this.fields.child] = child;\n this.reRender();\n }\n }\n }\n }\n };\n ListView.prototype.addListItem = function (dataSource, index) {\n var target = this.getLiFromObjOrElement(this.curViewDS[index + 1]) ||\n this.getLiFromObjOrElement(this.curViewDS[index + 2]) || null;\n var li = ListBase.createListItemFromJson(this.createElement, [dataSource], this.listBaseOption);\n this.ulElement.insertBefore(li[0], target);\n };\n /**\n * A function that removes the item from data source based on passed element like fields: { text: 'Name', tooltip: 'Name', id:'id'}\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (obj) {\n if (!(this.dataSource instanceof DataManager)) {\n if (this.enableVirtualization) {\n this.virtualizationModule.removeItem(obj);\n }\n else {\n this.removeItemFromList(obj);\n }\n }\n };\n ListView.prototype.removeItemFromList = function (obj) {\n var fields = obj instanceof Element ? this.getElementUID(obj) : obj;\n var dataSource;\n dataSource = this.findItemFromDS(this.dataSource, fields, true);\n if (dataSource) {\n var data = void 0;\n data = this.findItemFromDS(dataSource, fields);\n var index = this.curViewDS.indexOf(data);\n var li = this.getLiFromObjOrElement(obj);\n var groupLi = void 0;\n if (this.fields.groupBy && this.curViewDS[index - 1] &&\n this.curViewDS[index - 1].isHeader &&\n (this.curViewDS[index - 1])\n .items.length === 1) {\n if (li && li.previousElementSibling.classList.contains(classNames.groupListItem) &&\n (isNullOrUndefined(li.nextElementSibling) || (li.nextElementSibling &&\n li.nextElementSibling.classList.contains(classNames.groupListItem)))) {\n groupLi = li.previousElementSibling;\n }\n }\n if (li) {\n detach(li);\n }\n if (groupLi) {\n detach(groupLi);\n }\n var dsIndex = dataSource.indexOf(data);\n dataSource.splice(dsIndex, 1);\n this.setViewDataSource(this.dataSource);\n this.liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n }\n };\n /**\n * A function that removes multiple item from list view based on given input.\n * @param {Fields[] | HTMLElement[] | Element[]} obj - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.removeMultipleItems = function (obj) {\n if (!(this.dataSource instanceof DataManager)) {\n if (obj.length) {\n for (var i = 0; i < obj.length; i++) {\n if (this.enableVirtualization) {\n this.removeItem(obj[i]);\n }\n else {\n this.removeItemFromList(obj[i]);\n }\n }\n }\n }\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\n };\n ListView.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualization' });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition']);\n };\n __decorate([\n Property('')\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n ListView = __decorate([\n NotifyPropertyChanges\n ], ListView);\n return ListView;\n}(Component));\nexport { ListView };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { remove, addClass, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar FOCUS = 'e-input-focus';\nvar DEVICE = 'e-device';\nvar LISTCLASS = ListBaseClasses.li;\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nexport var TimePickerBase;\n(function (TimePickerBase) {\n // tslint:disable-next-line\n function createListItems(createdEl, min, max, globalize, timeFormat, step) {\n var start;\n var end;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(createdEl, listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * \n * \n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n return _this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.setTimeAllowEdit();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setValue(this.getFormattedValue(this.value));\n };\n TimePicker.prototype.setTimeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n this.popupCreation();\n this.popupObj.hide();\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.validationAttribute = function (target, input) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n input.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true);\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkAttributes(); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n }, this.createElement);\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n }\n if (this.inputWrapper.container) {\n remove(this.inputWrapper.container);\n }\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n _super.prototype.destroy.call(this);\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = this.createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.generateList();\n append([this.listWrapper], this.popupWrapper);\n }\n document.body.appendChild(this.popupWrapper);\n this.addSelection();\n this.renderPopup();\n this.setScrollPosition();\n };\n TimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n TimePicker.prototype.generateList = function () {\n this.createListItems();\n this.wireListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n TimePicker.prototype.popupCalculation = function () {\n var left = 0;\n if (Browser.isDevice) {\n var firstItem = this.isEmptyList() ? this.listTag : this.liCollections[0];\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n (this.enableRtl ? parseInt(getComputedStyle(this.inputElement).paddingRight, 10) :\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10)));\n }\n return left;\n };\n TimePicker.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0 ||\n isNullOrUndefined(this.liCollections);\n };\n TimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n var offset = Browser.isDevice ? this.setPopupPosition() : 2;\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n collision: { X: 'flip', Y: 'flip' },\n relateTo: this.inputWrapper.container,\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n offsetX: this.popupCalculation(),\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.setAttribute('aria-activedescendant', 'null');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.removeErrorClass = function () {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if (this.validateState(value)) {\n this.removeErrorClass();\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n meridian = getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.dayPeriods.format.abbreviated', cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice) {\n var firstItem = this.isEmptyList() ? this.listTag : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).textIndent, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var listHeight = this.getPopupHeight();\n var element;\n element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.format)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.compareFormatChange(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.compareFormatChange = function (value) {\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.popupHandler = function (e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n e.preventDefault();\n if (this.isPopupOpen()) {\n this.closePopup(0, e);\n }\n else {\n this.show(e);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.readonly) {\n var curPos = this.getCursorSelection();\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n this.keyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n addClass([this.inputWrapper.container], FOCUS);\n this.isNavigate = false;\n break;\n case 'open':\n this.show(event);\n break;\n case 'escape':\n Input.setValue(this.objToString(this.value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n addClass([this.inputWrapper.container], FOCUS);\n }\n };\n TimePicker.prototype.closePopup = function (delay, e) {\n if (this.isPopupOpen() && this.popupWrapper) {\n var args = {\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n name: 'open'\n };\n this.trigger('close', args);\n if (!args.cancel) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n this.popupObj.hide(new Animation(animModel));\n removeClass([this.inputWrapper.container], [ICONANIMATION]);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n }\n if (Browser.isDevice) {\n this.element.removeAttribute('readonly');\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.initValue = this.valueWithMinutes = this.compareFormatChange(this.inputElement.value);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(SELECTED)) {\n this.checkValue(li.getAttribute('data-value'));\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n //protected function\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n Input.setValue(this.getValue(this.initValue), this.inputElement, this.floatLabelType, this.showClearButton);\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n if (!Browser.isDevice) {\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n if (this.showClearButton) {\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n }\n }\n };\n TimePicker.prototype.formResetHandler = function () {\n if (!this.inputElement.getAttribute('value')) {\n this.value = null;\n if (this.inputElement) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.removeErrorClass();\n }\n }\n else {\n this.value = this.checkDateValue(new Date('' + this.element.getAttribute('value')));\n }\n };\n TimePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n };\n TimePicker.prototype.unBindEvents = function () {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n };\n TimePicker.prototype.clearHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n if (this.popupWrapper) {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function () {\n var attributes = ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, true);\n }\n break;\n case 'value':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n Input.setValue(inputVal, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.prevValue;\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, false);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n Input.setValue(value_1, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(time, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(this.timeCollections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ? this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n this.selectInputText();\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.setPopupPosition = function () {\n var offsetValue;\n var padding = 1;\n var popupHeight = this.getPopupHeight();\n var element = this.getActiveElement();\n var liHeight = this.liCollections[0].getBoundingClientRect().height;\n var listHeight = popupHeight / HALFPOSITION;\n var height = element.length === 0 ? this.liCollections[0].offsetTop : element[0].offsetTop;\n var lastItemOffsetValue = this.liCollections[this.liCollections.length - 1].offsetTop;\n var ulPadding = (parseInt(getComputedStyle(this.listTag).paddingTop, 10));\n if (lastItemOffsetValue - listHeight < height) {\n var count = popupHeight / liHeight;\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - ulPadding - HALFPOSITION;\n }\n else if ((height + liHeight) > listHeight) {\n offsetValue = listHeight - liHeight / HALFPOSITION;\n }\n else {\n offsetValue = height;\n }\n offsetValue = offsetValue + HALFPOSITION + ((liHeight - this.containerStyle.height) / HALFPOSITION);\n return -offsetValue;\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (e) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n event: (e || null),\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.trigger('change', eventArgs);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(date);\n }\n this.prevDate = this.valueWithMinutes = date;\n this.setProperties({ value: date }, true);\n };\n TimePicker.prototype.setActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement)) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n attributes(this.inputElement, { 'aria-activedescendant': 'null' });\n }\n };\n TimePicker.prototype.removeSelection = function () {\n this.removeHover(HOVER);\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n if (items.length) {\n removeClass(items, SELECTED);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.removeHover = function (className) {\n var hoveredItem = this.getHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n if (className === NAVIGATION) {\n hoveredItem[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.getHoverItem = function (className) {\n var hoveredItem;\n if (!isNullOrUndefined(this.popupWrapper)) {\n hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n TimePicker.prototype.setActiveClass = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n };\n TimePicker.prototype.addSelection = function () {\n this.selectedElement = null;\n this.removeSelection();\n this.setActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n TimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n TimePicker.prototype.createDateObj = function (val) {\n var today = this.globalize.formatDate(new Date(), { skeleton: 'short', type: 'date' });\n var value = null;\n if (typeof val === 'string') {\n if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n today = this.defaultCulture.formatDate(new Date(), { skeleton: 'short', type: 'date' });\n value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n if (isNullOrUndefined(value)) {\n value = this.TimeParse(today, val);\n }\n }\n else {\n value = this.TimeParse(today, val);\n }\n }\n else if (val instanceof Date) {\n value = val;\n }\n return value;\n };\n TimePicker.prototype.TimeParse = function (today, val) {\n var value;\n value = this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n });\n value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n }) : value;\n value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n return value;\n };\n TimePicker.prototype.createListItems = function () {\n var _this = this;\n this.listWrapper = this.createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var start;\n var end;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs);\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n }\n };\n this.listTag = ListBase.createList(this.createElement, listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n event.preventDefault();\n var target = event.target;\n if (!(closest(target, '#' + this.popupObj.element.id)) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n target !== (this.inputWrapper && this.inputWrapper.container)) {\n if (this.isPopupOpen()) {\n this.hide();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n event.preventDefault();\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date('' + date.min));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date('' + date.max));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n TimePicker.prototype.inputBlurHandler = function (e) {\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup(0, e);\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, e);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n };\n /**\n * Focuses out the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n TimePicker.prototype.inputFocusHandler = function () {\n var focusArguments = {\n model: this\n };\n if (!this.readonly && !Browser.isDevice) {\n this.selectInputText();\n }\n this.trigger('focus', focusArguments);\n };\n /**\n * Focused the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Hides the TimePicker popup.\n * @returns void\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100, null);\n };\n /**\n * Opens the popup to show the list items.\n * @returns void\n */\n TimePicker.prototype.show = function (event) {\n if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n return;\n }\n else {\n var args = {\n popup: this.popupObj || null,\n cancel: false,\n event: event || null,\n name: 'open'\n };\n this.trigger('open', args);\n if (!args.cancel && !this.isPopupOpen() && !this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n this.inputElement.focus();\n this.popupCreation();\n if (!args.cancel) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n this.popupObj.refreshPosition(this.inputElement);\n if (this.zIndex === 1000) {\n this.popupObj.show(new Animation(openAnimation), this.element);\n }\n else {\n this.popupObj.show(new Animation(openAnimation), null);\n }\n this.setActiveDescendant();\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n addClass([this.inputWrapper.container], FOCUS);\n }\n EventHandler.add(document, 'mousedown', this.documentClickHandler, this);\n }\n }\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To get component name\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.inputElement.setAttribute('aria-placeholder', newProp.placeholder);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n break;\n case 'cssClass':\n this.inputWrapper.container.className += ' ' + newProp.cssClass;\n if (this.popupWrapper) {\n this.popupWrapper.className += ' ' + newProp.cssClass;\n }\n this.setProperties({ cssClass: newProp.cssClass }, true);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n this.setEnable();\n break;\n case 'allowEdit':\n this.setTimeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.updatePlaceHolder();\n this.setValue(this.value);\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.setValue(this.value);\n break;\n case 'value':\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n newProp.value = this.value;\n }\n else {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n this.initValue = newProp.value;\n newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n this.checkValueChange(null, false);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n case 'strictMode':\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date('' + newProp.scrollTo))) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: newProp.scrollTo }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\n","import { classNames } from './list-view';\nimport { EventHandler, append, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { ListBase } from '../common/list-base';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.listViewInstance = instance;\n }\n Virtualization.prototype.isNgTemplate = function () {\n return !isNullOrUndefined(this.listViewInstance.templateRef) && typeof this.listViewInstance.templateRef !== 'string'\n && isNullOrUndefined(this.listViewInstance.fields.groupBy);\n };\n Virtualization.prototype.uiVirtualization = function () {\n var curViewDS = this.listViewInstance.curViewDS;\n var firstDs = curViewDS.slice(0, 1);\n this.listViewInstance.ulElement = this.listViewInstance.curUL = ListBase.createList(this.listViewInstance.createElement, firstDs, this.listViewInstance.listBaseOption);\n this.listViewInstance.contentContainer = this.listViewInstance.createElement('div', { className: classNames.content });\n this.listViewInstance.element.appendChild(this.listViewInstance.contentContainer);\n this.listViewInstance.contentContainer.appendChild(this.listViewInstance.ulElement);\n this.listItemHeight = this.listViewInstance.ulElement.firstElementChild.getBoundingClientRect().height;\n this.expectedDomItemCount = this.ValidateItemCount(10000);\n this.domItemCount = this.ValidateItemCount(Object.keys(this.listViewInstance.curViewDS).length);\n this.uiFirstIndex = 0;\n this.uiLastIndex = this.domItemCount - 1;\n this.wireScrollEvent(false);\n var otherDs = curViewDS.slice(1, this.domItemCount);\n var listItems = ListBase.createListItemFromJson(this.listViewInstance.createElement, otherDs, this.listViewInstance.listBaseOption);\n append(listItems, this.listViewInstance.ulElement);\n this.listViewInstance.liCollection = this.listViewInstance.curUL.querySelectorAll('li');\n this.topElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.topElement, this.listViewInstance.ulElement.firstElementChild);\n this.bottomElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.bottomElement, null);\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n this.listDiff = 0;\n this.uiIndicesInitialization();\n };\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n if (this.listViewInstance.isWindow) {\n this.onVirtualScroll = this.onVirtualUiScroll.bind(this);\n window.addEventListener('scroll', this.onVirtualScroll);\n }\n else {\n EventHandler.add(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll, this);\n }\n }\n else {\n this.listViewInstance.isWindow ? window.removeEventListener('scroll', this.onVirtualScroll) :\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll);\n }\n };\n Virtualization.prototype.ValidateItemCount = function (dataSourceLength) {\n var itemCount = this.listViewInstance.isWindow ? Math.round((window.innerHeight / this.listItemHeight) * 3) :\n Math.round((this.listViewInstance.height / this.listItemHeight) * 1.5);\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n Virtualization.prototype.uiIndicesInitialization = function () {\n var _this = this;\n this.uiIndices = { 'activeIndices': [], 'disabledItemIndices': [], 'hiddenItemIndices': [] };\n this.listViewInstance.curViewDS.forEach(function (ds, index) {\n if (_this.listViewInstance.showCheckBox && ds[_this.listViewInstance.fields.isChecked]) {\n _this.uiIndices.activeIndices.push(index);\n }\n if (!isNullOrUndefined(ds[_this.listViewInstance.fields.enabled]) && !ds[_this.listViewInstance.fields.enabled]) {\n _this.uiIndices.disabledItemIndices.push(index);\n }\n });\n if (this.isNgTemplate()) {\n Array.prototype.forEach.call(this.listViewInstance.element.querySelectorAll('.' + classNames.listItem), function (item, index) {\n item.context = _this.listViewInstance.viewContainerRef._embeddedViews[index].context;\n });\n }\n };\n Virtualization.prototype.getscrollerHeight = function () {\n return this.listViewInstance.isWindow ? (((pageYOffset - this.startingHeight) <= 0) ? 0 :\n (pageYOffset - this.startingHeight)) : ((this.listViewInstance.element.scrollTop - this.startingHeight) <= 0) ? 0 :\n (this.listViewInstance.element.scrollTop - this.startingHeight);\n };\n Virtualization.prototype.onVirtualUiScroll = function () {\n var _a;\n if (isNullOrUndefined(this.startingHeight)) {\n if (this.listViewInstance.isWindow) {\n this.startingHeight = document.documentElement.getBoundingClientRect().height -\n this.listViewInstance.ulElement.getBoundingClientRect().height;\n }\n else {\n this.startingHeight = this.listViewInstance.headerEle ? this.listViewInstance.headerEle.getBoundingClientRect().height : 0;\n }\n this.scrollPosition = 0;\n }\n var scroll = this.getscrollerHeight();\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n if (scroll > this.scrollPosition) {\n var listDiff = ((this.topElementHeight / this.listItemHeight) - this.listDiff);\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, true);\n }\n else {\n this.onNormalScroll(listDiff, true);\n }\n }\n else {\n var listDiff = (this.listDiff - (this.topElementHeight / this.listItemHeight));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, false);\n }\n else {\n this.onNormalScroll(listDiff, false);\n }\n }\n this.listDiff = this.topElementHeight / this.listItemHeight;\n if (typeof this.listViewInstance.onUIScrolled === 'function') {\n this.listViewInstance.onUIScrolled();\n }\n }\n this.scrollPosition = scroll;\n };\n Virtualization.prototype.onLongScroll = function (listDiff, isScrollingDown) {\n var _this = this;\n var index = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n Array.prototype.forEach.call(this.listViewInstance.ulElement.querySelectorAll('li'), function (element) {\n _this.updateUI(element, index);\n index++;\n });\n this.uiLastIndex = isScrollingDown ? (this.uiLastIndex + listDiff) : (this.uiLastIndex - listDiff);\n this.uiFirstIndex = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n };\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n if (isScrollingDown) {\n for (var i = 0; i < listDiff; i++) {\n var index = ++this.uiLastIndex;\n this.updateUI(this.topElement.nextElementSibling, index, this.bottomElement);\n this.uiFirstIndex++;\n }\n }\n else {\n for (var i = 0; i < listDiff; i++) {\n var index = --this.uiFirstIndex;\n var target = this.topElement.nextSibling;\n this.updateUI(this.bottomElement.previousElementSibling, index, target);\n this.uiLastIndex--;\n }\n }\n };\n Virtualization.prototype.updateUiContent = function (element, index) {\n var curViewDs = this.listViewInstance.curViewDS;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n element.dataset.uid = ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n this.listViewInstance.curViewDS[index].toString();\n }\n else {\n element.dataset.uid = curViewDs[index][this.listViewInstance.fields.id] ?\n curViewDs[index][this.listViewInstance.fields.id].toString() : ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n curViewDs[index][this.listViewInstance.fields.text].toString();\n }\n if (this.listViewInstance.showIcon) {\n if (element.querySelector('.' + classNames.listIcon)) {\n detach(element.querySelector('.' + classNames.listIcon));\n }\n if (this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]) {\n var textContent = element.querySelector('.' + classNames.textContent);\n var target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' +\n this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]\n });\n textContent.insertBefore(target, element.querySelector('.' + classNames.listItemText));\n }\n }\n if (this.listViewInstance.showCheckBox && this.listViewInstance.fields.groupBy) {\n if (!this.checkListWrapper) {\n this.checkListWrapper = this.listViewInstance.curUL.querySelector('.' + classNames.checkboxWrapper).cloneNode(true);\n }\n var textContent = element.querySelector('.' + classNames.textContent);\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.remove(classNames.checklist);\n textContent.classList.remove(classNames.checkbox);\n detach(element.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n else {\n if (!element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.add(classNames.checklist);\n textContent.classList.add(classNames.checkbox);\n textContent.insertBefore(this.checkListWrapper.cloneNode(true), element.querySelector('.' + classNames.listItemText));\n }\n }\n }\n };\n Virtualization.prototype.changeElementAttributes = function (element, index) {\n element.classList.remove(classNames.disable);\n if (this.uiIndices.disabledItemIndices.length && this.uiIndices.disabledItemIndices.indexOf(index) !== -1) {\n element.classList.add(classNames.disable);\n }\n element.style.display = '';\n if (this.uiIndices.hiddenItemIndices.length && this.uiIndices.hiddenItemIndices.indexOf(index) !== -1) {\n element.style.display = 'none';\n }\n if (this.listViewInstance.showCheckBox) {\n var checklistElement = element.querySelector('.' + classNames.checkboxWrapper);\n element.classList.remove(classNames.selected);\n element.classList.remove(classNames.focused);\n if (checklistElement) {\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n }\n if (this.uiIndices.activeIndices.length && this.uiIndices.activeIndices.indexOf(index) !== -1 &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n checklistElement.firstElementChild.classList.add(classNames.checked);\n checklistElement.setAttribute('aria-checked', 'true');\n if (this.activeIndex === index) {\n element.classList.add(classNames.focused);\n }\n }\n }\n else {\n element.classList.remove(classNames.selected);\n element.removeAttribute('aria-selected');\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex === index &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n element.setAttribute('aria-selected', 'true');\n }\n }\n if (this.listViewInstance.fields.groupBy) {\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.classList.contains(classNames.listItem)) {\n element.classList.remove(classNames.listItem);\n element.setAttribute('role', 'group');\n element.classList.add(classNames.groupListItem);\n }\n }\n else {\n if (element.classList.contains(classNames.groupListItem)) {\n element.classList.remove(classNames.groupListItem);\n element.setAttribute('role', 'listitem');\n element.classList.add(classNames.listItem);\n }\n }\n }\n };\n Virtualization.prototype.findDSAndIndexFromId = function (ds, fields) {\n var _this = this;\n var resultJSON = {};\n fields = this.listViewInstance.getElementUID(fields);\n if (!isNullOrUndefined(fields)) {\n ds.some(function (data, index) {\n if ((fields[_this.listViewInstance.fields.id] &&\n fields[_this.listViewInstance.fields.id].toString()\n === (data[_this.listViewInstance.fields.id] && data[_this.listViewInstance.fields.id].toString())) || fields === data) {\n resultJSON.index = index;\n resultJSON.data = data;\n return true;\n }\n else {\n return false;\n }\n });\n }\n return resultJSON;\n };\n Virtualization.prototype.getSelectedItems = function () {\n var _this = this;\n if (!isNullOrUndefined(this.activeIndex) || (this.listViewInstance.showCheckBox && this.uiIndices.activeIndices.length)) {\n var dataCollection_1 = [];\n var textCollection_1 = [];\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n var curViewDS_1 = this.listViewInstance.curViewDS;\n if (this.listViewInstance.showCheckBox) {\n this.uiIndices.activeIndices.forEach(function (index) {\n dataCollection_1.push(curViewDS_1[index]);\n });\n return {\n text: dataCollection_1,\n data: dataCollection_1,\n index: this.uiIndices.activeIndices.map(function (index) {\n return _this.listViewInstance.dataSource.indexOf(curViewDS_1[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_1[this.activeIndex],\n data: curViewDS_1[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_1[this.activeIndex])\n };\n }\n }\n else {\n var curViewDS_2 = this.listViewInstance.curViewDS;\n var text_1 = this.listViewInstance.fields.text;\n if (this.listViewInstance.showCheckBox) {\n this.uiIndices.activeIndices.forEach(function (index) {\n textCollection_1.push(curViewDS_2[index][text_1]);\n dataCollection_1.push(curViewDS_2[index]);\n });\n return {\n text: textCollection_1,\n data: dataCollection_1,\n index: this.uiIndices.activeIndices.map(function (index) {\n return (_this.listViewInstance.dataSource).indexOf(curViewDS_2[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_2[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS_2[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_2[this.activeIndex])\n };\n }\n }\n }\n else {\n return undefined;\n }\n };\n Virtualization.prototype.selectItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n var isSelected = this.activeIndex === resutJSON.index;\n var isChecked = void 0;\n this.activeIndex = resutJSON.index;\n if (this.listViewInstance.showCheckBox) {\n if (this.uiIndices.activeIndices.indexOf(resutJSON.index) === -1) {\n isChecked = true;\n this.uiIndices.activeIndices.push(resutJSON.index);\n }\n else {\n isChecked = false;\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(resutJSON.index), 1);\n }\n if (this.listViewInstance.curUL.querySelector('.' + classNames.focused)) {\n this.listViewInstance.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n }\n if (this.listViewInstance.getLiFromObjOrElement(obj)) {\n if (this.listViewInstance.showCheckBox) {\n this.listViewInstance.setCheckboxLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n else {\n this.listViewInstance.setSelectLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n }\n else {\n var eventArgs = void 0;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n eventArgs = {\n text: this.listViewInstance.curViewDS[this.activeIndex],\n data: this.listViewInstance.curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n else {\n var curViewDS = this.listViewInstance.curViewDS;\n eventArgs = {\n text: curViewDS[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n if (this.listViewInstance.showCheckBox) {\n eventArgs.isChecked = isChecked;\n this.listViewInstance.trigger('select', eventArgs);\n }\n else if (!isSelected) {\n this.listViewInstance.trigger('select', eventArgs);\n }\n }\n }\n else if (isNullOrUndefined(obj) && !this.listViewInstance.showCheckBox) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n };\n Virtualization.prototype.enableItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.disableItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.disabledItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.disabledItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.showItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.hideItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.hiddenItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.removeItem = function (obj) {\n var dataSource;\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n dataSource = resutJSON.data;\n if (this.listViewInstance.curViewDS[resutJSON.index - 1] &&\n this.listViewInstance.curViewDS[resutJSON.index - 1].isHeader &&\n (this.listViewInstance.curViewDS[resutJSON.index - 1])\n .items.length === 1) {\n this.removeUiItem(resutJSON.index - 1);\n this.removeUiItem(resutJSON.index - 1);\n }\n else {\n this.removeUiItem(resutJSON.index);\n }\n }\n var index = this.listViewInstance.dataSource.indexOf(dataSource);\n if (index !== -1) {\n this.listViewInstance.dataSource.splice(index, 1);\n this.listViewInstance.setViewDataSource(this.listViewInstance.dataSource);\n }\n };\n Virtualization.prototype.setCheckboxLI = function (li, e) {\n var index = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n if (li.classList.contains(classNames.selected)) {\n if (this.uiIndices.activeIndices.indexOf(index) === -1) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n else {\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n }\n };\n Virtualization.prototype.setSelectLI = function (li, e) {\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n };\n Virtualization.prototype.checkedItem = function (checked) {\n var _this = this;\n if (checked) {\n this.uiIndices.activeIndices = [];\n this.activeIndex = undefined;\n this.listViewInstance.curViewDS.forEach(function (ds, index) {\n if (!ds.isHeader) {\n _this.uiIndices.activeIndices.push(index);\n }\n });\n }\n else {\n this.activeIndex = undefined;\n this.uiIndices.activeIndices = [];\n }\n };\n Virtualization.prototype.addUiItem = function (index) {\n var curViewDs = this.listViewInstance.curViewDS;\n this.changeUiIndices(index, true);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex++;\n }\n if (this.listViewInstance.showCheckBox &&\n curViewDs[index][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(index);\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n }\n if (parseFloat(this.bottomElement.style.height)) {\n var liItem = this.listViewInstance.curUL.lastElementChild.previousSibling;\n var target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n if (target) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n this.updateUI(liItem, index, target);\n }\n }\n else {\n var liItem = this.listViewInstance.curUL.firstElementChild.nextSibling;\n var target = void 0;\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n }\n this.topElement.style.height = parseFloat(this.topElement.style.height) + this.listItemHeight + 'px';\n this.uiFirstIndex++;\n this.uiLastIndex++;\n if (target) {\n this.updateUI(liItem, index, target);\n this.listViewInstance.isWindow ? window.scrollTo(0, (pageYOffset + this.listItemHeight)) :\n this.listViewInstance.element.scrollTop += this.listItemHeight;\n }\n }\n this.totalHeight += this.listItemHeight;\n this.listDiff = parseFloat(this.topElement.style.height) / this.listItemHeight;\n };\n Virtualization.prototype.removeUiItem = function (index) {\n this.totalHeight -= this.listItemHeight;\n var curViewDS = this.listViewInstance.curViewDS[index];\n var liItem = this.listViewInstance.getLiFromObjOrElement(curViewDS);\n this.listViewInstance.curViewDS.splice(index, 1);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex--;\n }\n if (liItem) {\n if (this.domItemCount > Object.keys(this.listViewInstance.curViewDS).length) {\n detach(liItem);\n this.domItemCount--;\n this.uiLastIndex--;\n this.totalHeight = 0;\n }\n else {\n if (liItem.classList.contains(classNames.disable)) {\n liItem.classList.remove(classNames.disable);\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(index), 1);\n }\n if (liItem.style.display === 'none') {\n liItem.style.display = '';\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(index), 1);\n }\n if (this.listViewInstance.showCheckBox && liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n var checklistElement = liItem.querySelector('.' + classNames.checkboxWrapper);\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n if (liItem.classList.contains(classNames.focused)) {\n liItem.classList.remove(classNames.focused);\n this.activeIndex = undefined;\n }\n }\n else if (liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else if (parseFloat(this.bottomElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else {\n this.topElement.style.height = parseFloat(this.topElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, (this.uiFirstIndex - 1), this.topElement.nextSibling);\n this.uiLastIndex--;\n this.uiFirstIndex--;\n }\n }\n }\n this.changeUiIndices(index, false);\n this.listDiff = parseFloat(this.topElement.style.height) / this.listItemHeight;\n };\n Virtualization.prototype.changeUiIndices = function (index, increment) {\n var _this = this;\n Object.keys(this.uiIndices).forEach(function (key) {\n _this.uiIndices[key] = _this.uiIndices[key].map(function (i) {\n if (i >= index) {\n return increment ? ++i : --i;\n }\n else {\n return i;\n }\n });\n });\n };\n Virtualization.prototype.addItem = function (data, fields) {\n var _this = this;\n data.forEach(function (dataSource) {\n _this.listViewInstance.dataSource.push(dataSource);\n _this.listViewInstance.setViewDataSource(_this.listViewInstance.dataSource);\n if (!_this.domItemCount) {\n _this.uiVirtualization();\n }\n else if (_this.domItemCount < _this.expectedDomItemCount) {\n _this.wireScrollEvent(true);\n detach(_this.listViewInstance.contentContainer);\n _this.uiVirtualization();\n }\n else {\n var index = _this.listViewInstance.curViewDS.indexOf(dataSource);\n _this.addUiItem(index);\n var curViewDS = _this.listViewInstance.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n _this.addUiItem(index - 1);\n }\n }\n });\n };\n Virtualization.prototype.createUIItem = function (args) {\n var template = this.listViewInstance.createElement('div');\n var commonTemplate = '
' +\n ' ${' + this.listViewInstance.fields.text + '}
';\n template.innerHTML = this.listViewInstance.template || commonTemplate;\n var templateElements = template.getElementsByTagName('*');\n var groupTemplate = this.listViewInstance.createElement('div');\n if (this.listViewInstance.fields.groupBy) {\n groupTemplate.innerHTML = this.listViewInstance.groupTemplate || commonTemplate;\n }\n var groupTemplateElements = groupTemplate.getElementsByTagName('*');\n if (args.curData.isHeader) {\n this.headerData = args.curData;\n }\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\n args.item.innerHTML = '';\n args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };\n for (var i = 0; i < templateElements.length; i++) {\n this.compileTemplate(templateElements[i], args.item, false);\n }\n for (var i = 0; i < groupTemplateElements.length; i++) {\n this.compileTemplate(groupTemplateElements[i], args.item, true);\n }\n args.item.context.template = args.curData.isHeader ? template.firstElementChild :\n groupTemplate.firstElementChild;\n args.item.context.type = args.curData.isHeader ? 'flatList' : 'groupList';\n var element = args.curData.isHeader ? groupTemplate : template;\n args.item.insertBefore(element.firstElementChild, null);\n };\n Virtualization.prototype.compileTemplate = function (element, item, isHeader) {\n this.textProperty(element, item, isHeader);\n this.classProperty(element, item, isHeader);\n this.attributeProperty(element, item, isHeader);\n };\n Virtualization.prototype.onChange = function (newData, listElement) {\n listElement.context.data = newData;\n var groupTemplateNodes = listElement.context.nodes.groupTemplateNodes;\n var flatTemplateNodes = listElement.context.nodes.flatTemplateNodes;\n if (!isNullOrUndefined(newData.isHeader) && newData.isHeader && listElement.context.type === 'groupList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'flatList';\n groupTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else if (!newData.isHeader && listElement.context.type === 'flatList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'groupList';\n flatTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else if (!newData.isHeader) {\n flatTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else {\n groupTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n };\n Virtualization.prototype.updateContextData = function (listElement, node, isHeader) {\n if (isHeader) {\n listElement.context.nodes.groupTemplateNodes.push(node);\n }\n else {\n listElement.context.nodes.flatTemplateNodes.push(node);\n }\n };\n Virtualization.prototype.classProperty = function (element, listElement, isHeader) {\n var _this = this;\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.className);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n if (resultantOutput && resultantOutput.length) {\n resultantOutput.forEach(function (classNameMatch) {\n var classFunction;\n if (classNameMatch[1].indexOf('?') !== -1 && classNameMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + classNameMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + 'data.' + classNameMatch[1]);\n }\n var subNode = {};\n if (isHeader) {\n subNode.bindedvalue = classFunction(_this.headerData);\n }\n else {\n subNode.bindedvalue = classFunction(_this.templateData);\n }\n subNode.onChange = function (value) {\n element.classList.remove(subNode.bindedvalue);\n element.classList.add(classFunction(value));\n subNode.bindedvalue = classFunction(value);\n };\n classNameMatch[0].split(' ').forEach(function (className) {\n element.classList.remove(className);\n });\n element.classList.add(subNode.bindedvalue);\n _this.updateContextData(listElement, subNode, isHeader);\n });\n }\n };\n Virtualization.prototype.attributeProperty = function (element, listElement, isHeader) {\n var _this = this;\n var attributeNames = [];\n for (var i = 0; i < element.attributes.length; i++) {\n attributeNames.push(element.attributes[i].nodeName);\n }\n if (attributeNames.indexOf('class') !== -1) {\n attributeNames.splice(attributeNames.indexOf('class'), 1);\n }\n attributeNames.forEach(function (attributeName) {\n var attrNameMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(attributeName) || [];\n var attrValueMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(element.getAttribute(attributeName))\n || [];\n var attributeNameFunction;\n var attributeValueFunction;\n if (attrNameMatch.length || attrValueMatch.length) {\n if (attrNameMatch[1]) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeNameFunction = new Function('data', 'return ' + 'data.' + attrNameMatch[1]);\n }\n if (attrValueMatch[1]) {\n if (attrValueMatch[1].indexOf('?') !== -1 && attrValueMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + attrValueMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + 'data.' + attrValueMatch[1]);\n }\n }\n var subNode_1 = {};\n if (isHeader) {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(_this.headerData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(_this.headerData)];\n }\n else {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(_this.templateData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(_this.templateData)];\n }\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ?\n attributeName : subNode_1.bindedvalue[0];\n subNode_1.onChange = function (value) {\n var bindedvalue = subNode_1.bindedvalue[1] === undefined ?\n element.getAttribute(subNode_1.attrName) : attributeValueFunction(value);\n element.removeAttribute(subNode_1.attrName);\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ? subNode_1.attrName : attributeNameFunction(value);\n element.setAttribute(subNode_1.attrName, bindedvalue);\n subNode_1.bindedvalue = [subNode_1.bindedvalue[0] === undefined ? undefined : attributeNameFunction(value),\n subNode_1.bindedvalue[1] === undefined ? undefined : attributeValueFunction(value)];\n };\n var attributeValue = subNode_1.bindedvalue[1] === undefined ? element.getAttribute(attributeName) :\n subNode_1.bindedvalue[1];\n element.removeAttribute(attributeName);\n element.setAttribute(subNode_1.attrName, attributeValue);\n _this.updateContextData(listElement, subNode_1, isHeader);\n }\n });\n };\n Virtualization.prototype.textProperty = function (element, listElement, isHeader) {\n var _this = this;\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.innerText);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n var isChildHasTextContent = Array.prototype.some.call(element.children, function (element) {\n if (new RegExp('\\\\${([^}]*)}', 'g').exec(element.innerText)) {\n return true;\n }\n else {\n return false;\n }\n });\n if (resultantOutput && resultantOutput.length && !isChildHasTextContent) {\n resultantOutput.forEach(function (textPropertyMatch) {\n var subNode = {};\n var textFunction;\n if (textPropertyMatch[1].indexOf('?') !== -1 && textPropertyMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + textPropertyMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + 'data.' + textPropertyMatch[1]);\n }\n if (isHeader) {\n subNode.bindedvalue = textFunction(_this.headerData);\n }\n else {\n subNode.bindedvalue = textFunction(_this.templateData);\n }\n subNode.onChange = function (value) {\n element.innerText = element.innerText.replace(subNode.bindedvalue, textFunction(value));\n subNode.bindedvalue = textFunction(value);\n };\n element.innerText = element.innerText.replace(textPropertyMatch[0], subNode.bindedvalue);\n _this.updateContextData(listElement, subNode, isHeader);\n });\n }\n };\n Virtualization.prototype.reRenderUiVirtualization = function () {\n this.wireScrollEvent(true);\n if (this.listViewInstance.contentContainer) {\n detach(this.listViewInstance.contentContainer);\n }\n this.listViewInstance.preRender();\n this.listViewInstance.localData = this.listViewInstance.dataSource;\n this.listViewInstance.renderList();\n };\n Virtualization.prototype.updateUI = function (element, index, targetElement) {\n var onChange = this.isNgTemplate() ? this.onNgChange : this.onChange;\n if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {\n var curViewDS = this.listViewInstance.curViewDS[index];\n element.dataset.uid = curViewDS[this.listViewInstance.fields.id] ?\n curViewDS[this.listViewInstance.fields.id].toString() : ListBase.generateId();\n onChange(curViewDS, element);\n }\n else {\n this.updateUiContent(element, index);\n }\n this.changeElementAttributes(element, index);\n if (targetElement) {\n this.listViewInstance.ulElement.insertBefore(element, targetElement);\n }\n };\n Virtualization.prototype.onNgChange = function (newData, listElement) {\n listElement.context.$implicit = newData;\n };\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n Virtualization.prototype.destroy = function () {\n this.wireScrollEvent(true);\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, EventHandler, Internationalization, NotifyPropertyChanges, detach, getUniqueID } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Event, Browser, L10n, ChildProperty } from '@syncfusion/ej2-base';\nimport { addClass, createElement, remove, closest, select, prepend, removeClass, attributes, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, formatUnit, setValue, rippleEffect, merge, extend } from '@syncfusion/ej2-base';\nimport { CalendarBase } from '../calendar/calendar';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar DATERANGEWRAPPER = 'e-date-range-wrapper';\nvar INPUTCONTAINER = 'e-input-group';\nvar DATERANGEICON = 'e-input-group-icon e-range-icon e-icons';\nvar POPUP = 'e-popup';\nvar LEFTCALENDER = 'e-left-calendar';\nvar RIGHTCALENDER = 'e-right-calendar';\nvar LEFTCONTAINER = 'e-left-container';\nvar RIGHTCONTAINER = 'e-right-container';\nvar ROOT = 'e-daterangepicker';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar STARTENDCONTAINER = 'e-start-end';\nvar STARTDATE = 'e-start-date';\nvar ENDDATE = 'e-end-date';\nvar STARTBUTTON = 'e-start-btn';\nvar INPUTFOCUS = 'e-input-focus';\nvar ENDBUTTON = 'e-end-btn';\nvar RANGEHOVER = 'e-range-hover';\nvar OTHERMONTH = 'e-other-month';\nvar STARTLABEL = 'e-start-label';\nvar ENDLABEL = 'e-end-label';\nvar DISABLED = 'e-disabled';\nvar SELECTED = 'e-selected';\nvar CALENDAR = 'e-calendar';\nvar NEXTICON = 'e-next';\nvar PREVICON = 'e-prev';\nvar HEADER = 'e-header';\nvar TITLE = 'e-title';\nvar ICONCONTAINER = 'e-icon-container';\nvar RANGECONTAINER = 'e-date-range-container';\nvar RANGEHEADER = 'e-range-header';\nvar PRESETS = 'e-presets';\nvar FOOTER = 'e-footer';\nvar RANGEBORDER = 'e-range-border';\nvar TODAY = 'e-today';\nvar FOCUSDATE = 'e-focused-date';\nvar CONTENT = 'e-content';\nvar DAYSPAN = 'e-day-span';\nvar WEEKNUMBER = 'e-week-number';\nvar DATEDISABLED = 'e-date-disabled';\nvar ICONDISABLED = 'e-icon-disabled';\nvar CALENDARCONTAINER = 'e-calendar-container';\nvar SEPARATOR = 'e-separator';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar DEVICE = 'e-device';\nvar OVERLAY = 'e-overlay';\nvar CHANGEICON = 'e-change-icon e-icons';\nvar LISTCLASS = ListBaseClasses.li;\nvar RTL = 'e-rtl';\nvar HOVER = 'e-hover';\nvar OVERFLOW = 'e-range-overflow';\nvar OFFSETVALUE = 4;\nvar PRIMARY = 'e-primary';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar Presets = /** @class */ (function (_super) {\n __extends(Presets, _super);\n function Presets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Presets.prototype, \"label\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"start\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"end\", void 0);\n return Presets;\n}(ChildProperty));\nexport { Presets };\n/**\n * Represents the DateRangePicker component that allows user to select the date range from the calendar\n * or entering the range through the input element.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateRangePicker = /** @class */ (function (_super) {\n __extends(DateRangePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function DateRangePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isCustomRange = false;\n _this.isCustomWindow = false;\n _this.presetsItem = [];\n _this.liCollections = [];\n _this.previousEleValue = '';\n _this.isKeyPopup = false;\n _this.dateDisabled = false;\n _this.isRangeIconClicked = false;\n _this.isMaxDaysClicked = false;\n _this.disabledDays = [];\n _this.preventBlur = false;\n _this.preventFocus = false;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateRangePicker.prototype.render = function () {\n this.initialize();\n this.setProperties({ startDate: this.startValue }, true);\n this.setProperties({ endDate: this.endValue }, true);\n this.setModelValue();\n };\n /**\n * Initialize the event handler\n * @returns void\n * @private\n */\n DateRangePicker.prototype.preRender = function () {\n this.presetKeyConfig = {\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n enter: 'enter',\n tab: 'tab',\n spacebar: 'space'\n };\n this.keyInputConfigs = {\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n tab: 'tab',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n this.defaultConstant = {\n placeholder: '',\n startLabel: 'Start Date',\n endLabel: 'End Date',\n customRange: 'Custom Range',\n applyText: 'Apply',\n cancelText: 'Cancel',\n selectedDays: 'Selected Days',\n days: 'days'\n };\n /**\n * Mobile View\n */\n this.isMobile = window.matchMedia('(max-width:550px)').matches;\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.cloneElement = this.element.cloneNode(true);\n if (this.element.getAttribute('id')) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n this.initProperty();\n _super.prototype.preRender.call(this);\n this.navNextFunction = this.navNextMonth.bind(this);\n this.navPrevFunction = this.navPrevMonth.bind(this);\n this.deviceNavNextFunction = this.deviceNavNext.bind(this);\n this.deviceNavPrevFunction = this.deviceNavPrevious.bind(this);\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n this.formElement = closest(this.element, 'form');\n };\n ;\n DateRangePicker.prototype.updateValue = function () {\n if (this.value && this.value.length > 0) {\n if (this.value[0] instanceof Date && !isNaN(+this.value[0])) {\n this.setProperties({ startDate: this.value[0] }, true);\n this.startValue = this.value[0];\n }\n else if (typeof this.value[0] === 'string') {\n if (+this.value[0] === 0 || isNaN(+(new Date('' + this.value[0])))) {\n this.startValue = null;\n this.setValue();\n }\n else {\n this.setProperties({ startDate: new Date('' + this.value[0]) }, true);\n this.startValue = new Date('' + this.value[0]);\n }\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value[1] instanceof Date && !isNaN(+this.value[1])) {\n this.setProperties({ endDate: this.value[1] }, true);\n this.endValue = this.value[1];\n }\n else if (typeof this.value[1] === 'string') {\n if (+this.value[0] === 0 || isNaN(+(new Date('' + this.value[0])))) {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n else {\n this.setProperties({ endDate: new Date('' + this.value[1]) }, true);\n this.endValue = new Date('' + this.value[1]);\n this.setValue();\n }\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (this.value && this.value.start) {\n if (this.value.start instanceof Date && !isNaN(+this.value.start)) {\n this.setProperties({ startDate: this.value.start }, true);\n this.startValue = this.value.start;\n }\n else if (typeof this.value.start === 'string') {\n this.setProperties({ startDate: new Date('' + this.value.start) }, true);\n this.startValue = new Date('' + this.value.start);\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value.end instanceof Date && !isNaN(+this.value.end)) {\n this.setProperties({ endDate: this.value.end }, true);\n this.endValue = this.value.end;\n }\n else if (typeof this.value.end === 'string') {\n this.setProperties({ endDate: new Date('' + this.value.end) }, true);\n this.endValue = new Date('' + this.value.end);\n this.setValue();\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (isNullOrUndefined(this.value)) {\n this.endValue = this.checkDateValue(new Date('' + this.endDate));\n this.startValue = this.checkDateValue(new Date('' + this.startDate));\n this.setValue();\n }\n };\n DateRangePicker.prototype.initProperty = function () {\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.updateValue();\n };\n DateRangePicker.prototype.initialize = function () {\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes();\n merge(this.keyConfigs, { shiftTab: 'shift+tab' });\n this.setProperties({ startDate: this.checkDateValue(new Date('' + this.startValue)) }, true); // persist the value propeerty.\n this.setProperties({ endValue: this.checkDateValue(new Date('' + this.endValue)) }, true);\n this.setValue();\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.l10n = new L10n('daterangepicker', this.defaultConstant, this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.processPresets();\n this.createInput();\n this.setRangeAllowEdit();\n this.bindEvents();\n };\n DateRangePicker.prototype.setRangeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n };\n DateRangePicker.prototype.validationAttribute = function (element, input) {\n var name = element.getAttribute('name') ? element.getAttribute('name') : element.getAttribute('id');\n input.setAttribute('name', name);\n element.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(element.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = element.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n element.removeAttribute(attributes[i]);\n }\n };\n DateRangePicker.prototype.processPresets = function () {\n this.presetsItem = [];\n var i = 0;\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {\n var range = _a[_i];\n var id = range.label.replace(/\\s+/g, '') + '_' + (++i);\n if (typeof range.end === 'string') {\n this.presetsItem.push({\n id: id, text: range.label, end: new Date('' + range.end), start: new Date('' + range.start)\n });\n }\n else {\n this.presetsItem.push({ id: id, text: range.label, start: range.start, end: range.end });\n }\n }\n var startDate = isNullOrUndefined(this.startValue) ? null : new Date(+this.startValue);\n var endDate = isNullOrUndefined(this.endValue) ? null : new Date(+this.endValue);\n this.presetsItem.push({ id: 'custom_range', text: this.l10n.getConstant('customRange'), start: startDate, end: endDate });\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.isCustomRange = true;\n this.activeIndex = this.presetsItem.length - 1;\n }\n }\n };\n DateRangePicker.prototype.bindEvents = function () {\n if (this.enabled) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n if (!this.isMobile) {\n this.inputKeyboardModule = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown', keyAction: this.inputHandler.bind(this), keyConfigs: this.keyInputConfigs\n });\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.inputKeyboardModule)) {\n this.inputKeyboardModule.destroy();\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n }\n };\n DateRangePicker.prototype.updateHiddenInput = function () {\n if (this.firstHiddenChild && this.secondHiddenChild) {\n var format = { type: 'datetime', skeleton: 'yMd' };\n if (typeof this.startDate === 'string') {\n this.startDate = this.globalize.parseDate(this.startDate, format);\n }\n if (typeof this.endDate === 'string') {\n this.endDate = this.globalize.parseDate(this.endDate, format);\n }\n this.firstHiddenChild.value = (this.startDate && this.globalize.formatDate(this.startDate, format))\n || (this.inputElement.value);\n this.secondHiddenChild.value = (this.endDate && this.globalize.formatDate(this.endDate, format)) ||\n (this.inputElement.value);\n this.dispatchEvent(this.firstHiddenChild, 'focusout');\n this.dispatchEvent(this.firstHiddenChild, 'change');\n }\n };\n DateRangePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DateRangePicker.prototype.resetHandler = function (e) {\n this.valueType = this.value;\n e.preventDefault();\n this.clear();\n this.changeTrigger(e);\n this.clearRange();\n this.hide(e);\n };\n DateRangePicker.prototype.formResetHandler = function () {\n this.value = null;\n if (this.inputElement) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n removeClass([this.inputWrapper.container], ERROR);\n }\n };\n DateRangePicker.prototype.clear = function () {\n if (this.startValue !== null) {\n this.startValue = null;\n }\n if (this.endValue !== null) {\n this.endValue = null;\n }\n if (this.value && this.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n if (this.value !== null && this.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n if (!(isNullOrUndefined(this.applyButton))) {\n this.applyButton.disabled = this.applyButton.element.disabled = true;\n }\n this.removeSelection();\n };\n DateRangePicker.prototype.rangeIconHandler = function (e) {\n if (this.isMobile) {\n this.element.setAttribute('readonly', 'readonly');\n }\n e.preventDefault();\n this.targetElement = null;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n }\n else {\n this.isRangeIconClicked = true;\n this.inputWrapper.container.children[0].focus();\n this.show(null, e);\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.isRangeIconClicked = false;\n this.calendarFocus();\n this.isRangeIconClicked = true;\n }\n }\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateRangePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes;\n attributes = ['startDate', 'endDate', 'minDays', 'maxDays', 'min', 'max', 'disabled',\n 'readonly', 'style', 'name', 'placeholder', 'type'];\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var disabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ enabled: !disabled }, true);\n break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (isNullOrUndefined(this.placeholder) || this.placeholder.trim() === '') {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'min':\n if (isNullOrUndefined(this.min) || +this.min === +new Date(1900, 0, 1)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'max':\n if (isNullOrUndefined(this.max) || +this.max === +new Date(2099, 11, 31)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'startDate':\n if (isNullOrUndefined(this.startDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.startValue = dateValue;\n this.setValue();\n }\n break;\n case 'endDate':\n if (isNullOrUndefined(this.endDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.endValue = dateValue;\n this.setValue();\n }\n break;\n case 'minDays':\n if (isNullOrUndefined(this.minDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'maxDays':\n if (isNullOrUndefined(this.maxDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n DateRangePicker.prototype.createPopup = function () {\n for (var i = 0; i < this.presetsItem.length; i++) {\n if ((i !== (this.presetsItem.length - 1)) && this.presetsItem[i].id === 'custom_range') {\n this.presetsItem.splice(i, 1);\n }\n }\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n for (var i = 0; i <= this.presetsItem.length - 2; i++) {\n var startDate = this.presetsItem[i].start;\n var endDate = this.presetsItem[i].end;\n if (this.startValue && this.endValue) {\n if ((+startDate.setMilliseconds(0) === +this.startValue.setMilliseconds(0)) &&\n (+endDate.setMilliseconds(0) === +this.endValue.setMilliseconds(0))) {\n this.activeIndex = i;\n this.isCustomRange = false;\n }\n }\n }\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n var isPreset = (!this.isCustomRange || this.isMobile);\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.isCustomWindow = false;\n this.createPresets();\n this.listRippleEffect();\n this.renderPopup();\n }\n else {\n this.isCustomWindow = true;\n this.renderControl();\n }\n };\n DateRangePicker.prototype.renderControl = function () {\n this.createControl();\n this.bindCalendarEvents();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.disabledDateRender();\n }\n this.updateHeader();\n };\n DateRangePicker.prototype.clearCalendarEvents = function () {\n EventHandler.clearEvents(this.leftCalPrevIcon);\n EventHandler.clearEvents(this.leftCalNextIcon);\n EventHandler.clearEvents(this.rightCalPrevIcon);\n EventHandler.clearEvents(this.rightCalNextIcon);\n };\n DateRangePicker.prototype.updateNavIcons = function () {\n if (this.currentView() === 'Year' || this.currentView() === 'Decade') {\n return;\n }\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n this.nextIconHandler(this.compareMonths(new Date('' + this.leftCalCurrentDate), this.rightCalCurrentDate) < 1);\n this.previousIconHandler(this.compareMonths(new Date('' + this.leftCalCurrentDate), this.rightCalCurrentDate) < 1);\n };\n DateRangePicker.prototype.calendarIconEvent = function () {\n this.clearCalendarEvents();\n if (this.leftCalPrevIcon && !this.leftCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.leftCalNextIcon && !this.leftCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalNextIcon, 'mousedown', this.navNextFunction);\n }\n if (this.rightCalPrevIcon && !this.rightCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.rightCalNextIcon && !this.rightCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalNextIcon, 'mousedown', this.navNextFunction);\n }\n };\n DateRangePicker.prototype.bindCalendarEvents = function () {\n if (!this.isMobile) {\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.headerTitleElement = this.popupObj.element.querySelector('.' + RIGHTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.headerTitleElement = this.popupObj.element.querySelector('.' + LEFTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.leftKeyboardModule = new KeyboardEvents(this.leftCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n this.rightKeyboardModule = new KeyboardEvents(this.rightCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n else {\n this.deviceCalendarEvent();\n EventHandler.add(this.startButton.element, 'click', this.deviceHeaderClick, this);\n EventHandler.add(this.endButton.element, 'click', this.deviceHeaderClick, this);\n }\n this.bindCalendarCellEvents();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.calendarIconRipple = function () {\n rippleEffect(this.leftCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.leftCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n };\n DateRangePicker.prototype.deviceCalendarEvent = function () {\n EventHandler.clearEvents(this.nextIcon);\n EventHandler.clearEvents(this.previousIcon);\n rippleEffect(this.nextIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.previousIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n if (this.nextIcon && !this.nextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.nextIcon, 'mousedown', this.deviceNavNextFunction);\n }\n if (this.previousIcon && !this.previousIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.previousIcon, 'mousedown', this.deviceNavPrevFunction);\n }\n };\n DateRangePicker.prototype.deviceNavNext = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigateNext(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.deviceNavPrevious = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigatePrevious(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.updateDeviceCalendar = function (calendar) {\n if (calendar) {\n this.previousIcon = calendar.querySelector('.' + PREVICON);\n this.nextIcon = calendar.querySelector('.' + NEXTICON);\n this.calendarElement = calendar;\n this.deviceCalendar = calendar;\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n }\n };\n DateRangePicker.prototype.deviceHeaderClick = function (event) {\n var element = event.currentTarget;\n if (element.classList.contains(STARTBUTTON) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.classList.remove(ACTIVE);\n this.startButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + STARTDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.startValue);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.removeClassDisabled();\n }\n else if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + ENDDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.endValue);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n this.selectableDates();\n }\n };\n DateRangePicker.prototype.inputFocusHandler = function () {\n this.preventBlur = false;\n var focusArguments = {\n model: this\n };\n if (!this.preventFocus) {\n this.preventFocus = true;\n this.trigger('focus', focusArguments);\n }\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.inputBlurHandler = function (e) {\n if (!this.preventBlur) {\n var value = this.inputElement.value;\n if (!isNullOrUndefined(this.presetsItem)) {\n if (this.presetsItem.length > 0 && this.previousEleValue !== this.inputElement.value) {\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n }\n }\n if (!isNullOrUndefined(value) && value.trim() !== '') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length > 1) {\n var dateOptions = { format: this.format, type: 'date', skeleton: 'yMd' };\n var startDate = this.globalize.parseDate(range[0].trim(), dateOptions);\n var endDate = this.globalize.parseDate(range[1].trim(), dateOptions);\n if (!isNullOrUndefined(startDate) && !isNaN(+startDate) && !isNullOrUndefined(endDate) && !isNaN(+endDate)) {\n this.startValue = startDate;\n this.endValue = endDate;\n this.setValue();\n this.refreshControl();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n this.updateHiddenInput();\n return;\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n if (!this.strictMode) {\n this.clearRange();\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n else {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n }\n this.errorClass();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n }\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.clearRange = function () {\n this.previousStartValue = this.previousEndValue = null;\n this.currentDate = null;\n };\n DateRangePicker.prototype.errorClass = function () {\n var inputStr = this.inputElement.value.trim();\n if (((isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue) && inputStr !== '') ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max))\n || ((this.startValue && this.isDateDisabled(this.startValue))\n || (this.endValue && this.isDateDisabled(this.endValue)))) && inputStr !== '') {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else {\n if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n }\n };\n DateRangePicker.prototype.keyCalendarUpdate = function (isLeftCalendar, ele) {\n this.removeFocusedDate();\n if (isLeftCalendar) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n ele = this.leftCalendar;\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n ele = this.rightCalendar;\n }\n this.updateCalendarElement(ele);\n this.table.focus();\n return ele;\n };\n DateRangePicker.prototype.navInCalendar = function (e, isLeftCalendar, leftLimit, rightLimit, ele) {\n var view = this.getViewNumber(this.currentView());\n var date;\n var min = this.min;\n var max;\n if (!isNullOrUndefined(this.maxDays) && this.isMaxDaysClicked && !isNullOrUndefined(this.startValue)) {\n max = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n }\n else {\n max = this.max;\n }\n switch (e.action) {\n case 'moveRight':\n date = new Date(+this.currentDate);\n this.addDay(date, 1, e, max, min);\n if (isLeftCalendar && +date === +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveLeft':\n date = new Date(+this.currentDate);\n this.addDay(date, -1, e, max, min);\n if (!isLeftCalendar) {\n if (+date === +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n }\n this.KeyboardNavigate(-1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveUp':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, -7, e, max, min);\n if (+date <= +leftLimit && !isLeftCalendar) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-7, view, e, max, min);\n }\n else {\n this.KeyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n this.keyNavigation(ele, e);\n break;\n case 'moveDown':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, 7, e, max, min);\n if (isLeftCalendar && +date >= +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(7, view, e, max, min);\n }\n else {\n this.KeyboardNavigate(4, view, e, this.max, this.min);\n }\n this.keyNavigation(ele, e);\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n remove(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n this.keyNavigation(ele, e);\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n remove(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n this.keyNavigation(ele, e);\n break;\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.keyInputHandler = function (e, value) {\n var date;\n var view = this.getViewNumber(this.currentView());\n var rightDateLimit = new Date(this.rightCalCurrentDate.getFullYear(), this.rightCalCurrentDate.getMonth(), 1);\n var leftDateLimit = new Date(this.leftCalCurrentDate.getFullYear(), this.leftCalCurrentDate.getMonth() + 1, 0);\n var ele = closest(e.target, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n var isLeftCalendar = ele.classList.contains(LEFTCALENDER);\n this.updateCalendarElement(ele);\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n var focusedDate = ele.querySelector('tr td.' + FOCUSDATE);\n var startDate = ele.querySelector('tr td.' + STARTDATE);\n var endDate = ele.querySelector('tr td.' + ENDDATE);\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n var leftCalendar = closest(e.target, '.' + LEFTCALENDER);\n var rightCalendar = closest(e.target, '.' + RIGHTCALENDER);\n var presetElement = closest(e.target, '.' + PRESETS);\n if (!isNullOrUndefined(focusedDate)) {\n this.currentDate = this.currentDate;\n }\n else if (!isNullOrUndefined(endDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.endValue);\n }\n else if (!isNullOrUndefined(startDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.startValue);\n }\n else if (!this.dateDisabled) {\n this.currentDate.setDate(1);\n }\n this.effect = '';\n switch (e.action) {\n case 'altUpArrow':\n if (this.isPopupOpen()) {\n this.hide(e);\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n break;\n case 'select':\n if (view === 0) {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : startDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n this.selectRange(null, (element));\n }\n }\n else {\n if (!isNullOrUndefined(selectedDate) && !levelRestrict || !isNullOrUndefined(focusedDate)) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n }\n e.preventDefault();\n break;\n case 'controlHome':\n var yearDate = new Date(this.currentDate.getFullYear(), 0, 1);\n if (!isLeftCalendar && +yearDate < +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n this.keyNavigation(ele, e);\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else if (!isNullOrUndefined(rightCalendar)) {\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n if (this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(rightCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'controlUp':\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n this.calendarNavigation(e, this.calendarElement);\n }\n else {\n this.calendarNavigation(e, this.calendarElement);\n }\n e.preventDefault();\n break;\n case 'controlDown':\n if ((!isNullOrUndefined(selectedDate) && !levelRestrict) || !isNullOrUndefined(focusedDate)) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (selectedDate || focusedDate), value);\n }\n e.preventDefault();\n break;\n case 'controlEnd':\n yearDate = new Date(this.currentDate.getFullYear(), 11, 31);\n if (isLeftCalendar && +yearDate > +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n this.keyNavigation(ele, e);\n break;\n case 'pageUp':\n date = new Date(+this.currentDate);\n this.addMonths(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'pageDown':\n date = new Date(+this.currentDate);\n this.addMonths(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageUp':\n date = new Date(+this.currentDate);\n this.addYears(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageDown':\n date = new Date(+this.currentDate);\n this.addYears(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftTab':\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.setAttribute('tabindex', '0');\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n e.preventDefault();\n break;\n case 'spacebar':\n if (this.applyButton && !this.applyButton.disabled) {\n this.applyFunction(e);\n }\n break;\n default:\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n this.checkMinMaxDays();\n }\n this.presetHeight();\n };\n DateRangePicker.prototype.keyNavigation = function (calendar, e) {\n this.bindCalendarCellEvents(calendar);\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n this.updateRange([calendar]);\n this.dateDisabled = this.isDateDisabled(this.currentDate);\n e.preventDefault();\n };\n DateRangePicker.prototype.inputHandler = function (e) {\n switch (e.action) {\n case 'altDownArrow':\n if (!this.isPopupOpen()) {\n if (this.inputElement.value === '') {\n this.clear();\n this.changeTrigger(e);\n this.clearRange();\n }\n this.show(null, e);\n this.isRangeIconClicked = false;\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.calendarFocus();\n }\n }\n this.isKeyPopup = true;\n }\n break;\n case 'escape':\n if (this.isPopupOpen()) {\n this.hide(e);\n }\n break;\n case 'enter':\n if (document.activeElement === this.inputElement) {\n this.inputBlurHandler(e);\n this.hide(e);\n }\n break;\n case 'tab':\n if (document.activeElement === this.inputElement && this.isPopupOpen()) {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.bindCalendarCellEvents = function (calendar) {\n var tdCells;\n if (calendar) {\n tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n }\n else {\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n }\n for (var _i = 0, tdCells_1 = tdCells; _i < tdCells_1.length; _i++) {\n var cell = tdCells_1[_i];\n EventHandler.clearEvents(cell);\n var disabledCell = void 0;\n disabledCell = cell.classList.contains(DISABLED) || cell.classList.contains(DATEDISABLED);\n if (!disabledCell && !cell.classList.contains(WEEKNUMBER)) {\n if (!this.isMobile) {\n EventHandler.add(cell, 'mouseover', this.hoverSelection, this);\n }\n EventHandler.add(cell, 'mousedown', this.selectRange, this);\n }\n }\n };\n DateRangePicker.prototype.removeFocusedDate = function () {\n var isDate = !isNullOrUndefined(this.startValue) || !isNullOrUndefined(this.endValue);\n var focusedDate;\n focusedDate = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' .' + FOCUSDATE);\n if ((this.leftCalendar && this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar && this.rightCalendar.querySelector('.e-content').classList.contains('e-month')) ||\n this.calendarElement && this.calendarElement.querySelector('.e-content').classList.contains('e-month')) {\n for (var _i = 0, focusedDate_1 = focusedDate; _i < focusedDate_1.length; _i++) {\n var ele = focusedDate_1[_i];\n if (!ele.classList.contains(TODAY) || (ele.classList.contains(TODAY) && (isDate))) {\n ele.classList.remove(FOCUSDATE);\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(ENDDATE)) {\n ele.removeAttribute('aria-label');\n }\n }\n }\n }\n };\n DateRangePicker.prototype.hoverSelection = function (event, element) {\n var currentElement = element || event.currentTarget;\n var currentDate = this.getIdValue(null, currentElement);\n if (!isNullOrUndefined(this.startValue) && +this.startValue >= +this.min && +this.startValue <= +this.max) {\n if ((!this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)\n && isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue))\n || (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))) {\n var tdCells = void 0;\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n for (var _i = 0, tdCells_2 = tdCells; _i < tdCells_2.length; _i++) {\n var ele = tdCells_2[_i];\n var isDisabledCell = (!ele.classList.contains(DISABLED) || ele.classList.contains(DATEDISABLED));\n if (!ele.classList.contains(WEEKNUMBER) && isDisabledCell) {\n var eleDate = this.getIdValue(null, ele);\n var startDateValue = new Date(+this.startValue);\n var eleDateValue = new Date(+eleDate);\n if (eleDateValue.setHours(0, 0, 0, 0) >= startDateValue.setHours(0, 0, 0, 0) && +eleDate <= +currentDate) {\n addClass([ele], RANGEHOVER);\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.updateRange = function (elementCollection) {\n if (!isNullOrUndefined(this.startValue)) {\n for (var _i = 0, elementCollection_1 = elementCollection; _i < elementCollection_1.length; _i++) {\n var calendar = elementCollection_1[_i];\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n for (var _a = 0, tdCells_3 = tdCells; _a < tdCells_3.length; _a++) {\n var ele = tdCells_3[_a];\n if (!ele.classList.contains(WEEKNUMBER) && !ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n var eleDateValue = this.getIdValue(null, ele);\n if (!isNullOrUndefined(this.endValue)) {\n if (this.currentView() === 'Month' &&\n +eleDateValue.setHours(0, 0, 0, 0) >= +new Date(+this.startValue).setHours(0, 0, 0, 0)\n && +eleDateValue.setHours(0, 0, 0, 0) <= +new Date(+this.endValue).setHours(0, 0, 0, 0) &&\n +new Date(+this.startValue).setHours(0, 0, 0, 0) !== +new Date(+this.endValue).setHours(0, 0, 0, 0) &&\n +new Date(+this.startValue).setHours(0, 0, 0, 0) >= +this.min\n && +new Date(+this.endValue).setHours(0, 0, 0, 0) <= +this.max\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], RANGEHOVER);\n }\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n if (!ele.classList.contains(OTHERMONTH)) {\n var startDateValue = new Date(+this.startValue);\n var eleDateValue_1 = new Date(+eleDate);\n if (this.currentView() === 'Month' &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +startDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) >= +startDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, true);\n }\n var endDateValue = new Date(+this.endValue);\n if (this.currentView() === 'Month' &&\n !isNullOrUndefined(this.endValue) &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +endDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) <= +endDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, false);\n }\n if (+eleDate === +this.startValue && !isNullOrUndefined(this.endValue) && +eleDate === +this.endValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.checkMinMaxDays = function () {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n if (!this.isMobile) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + LEFTCALENDER));\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + RIGHTCALENDER));\n }\n else {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n }\n };\n DateRangePicker.prototype.rangeArgs = function (e) {\n var inputValue;\n var range;\n var startDate = !isNullOrUndefined(this.startValue) ?\n this.globalize.formatDate(this.startValue, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n var endDate = !isNullOrUndefined(this.endValue) ?\n this.globalize.formatDate(this.endValue, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n inputValue = startDate + ' ' + this.separator + ' ' + endDate;\n range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n }\n else {\n inputValue = '';\n range = 0;\n }\n var args = {\n value: this.value,\n startDate: this.startValue,\n endDate: this.endValue,\n daySpan: range,\n event: e || null,\n element: this.element,\n isInteracted: !isNullOrUndefined(e),\n text: inputValue\n };\n return args;\n };\n DateRangePicker.prototype.otherMonthSelect = function (ele, isStartDate, sameDate) {\n var value = +this.getIdValue(null, ele);\n var dateIdString = '*[id^=\"/id\"]:not(.e-other-month)'.replace('/id', '' + value);\n var tdCell = this.popupObj && this.popupObj.element.querySelector(dateIdString);\n if (!isNullOrUndefined(tdCell)) {\n if (isStartDate) {\n addClass([tdCell], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.startValue, true);\n }\n else {\n addClass([tdCell], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.endValue, true);\n }\n if (sameDate) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.selectRange = function (event, element) {\n var leftCalendar;\n var rightCalendar;\n if (event) {\n event.preventDefault();\n }\n var date;\n date = isNullOrUndefined(event) ? this.getIdValue(null, element)\n : this.getIdValue(event, null);\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n if (!this.isMobile || this.isMobile && !this.endButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n }\n else if (this.isMobile && this.startButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n var ele = element || event.currentTarget;\n if (isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.previousStartValue)) {\n date.setHours(this.previousStartValue.getHours());\n date.setMinutes(this.previousStartValue.getMinutes());\n date.setSeconds(this.previousStartValue.getSeconds());\n }\n this.startValue = new Date('' + date);\n this.endValue = null;\n this.setValue();\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n this.applyButton.disabled = true;\n this.applyButton.element.disabled = true;\n if (this.isMobile) {\n this.endButton.element.classList.add(ACTIVE);\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.removeAttribute('disabled');\n this.selectableDates();\n }\n this.trigger('select', this.rangeArgs(event));\n }\n else {\n if (+date === +this.startValue || +date > +this.startValue) {\n if (+date === +this.startValue && !isNullOrUndefined(this.minDays) && this.minDays > 1) {\n return;\n }\n this.endValue = null;\n this.setValue();\n if (this.isMobile || element) {\n this.hoverSelection(event, element);\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n date.setHours(this.previousEndValue.getHours());\n date.setMinutes(this.previousEndValue.getMinutes());\n date.setSeconds(this.previousEndValue.getSeconds());\n }\n this.endValue = new Date('' + date);\n this.setValue();\n var endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n if (this.isMobile) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n for (var _i = 0, endEle_1 = endEle; _i < endEle_1.length; _i++) {\n var ele_1 = endEle_1[_i];\n ele_1.removeAttribute('aria-label');\n if (!ele_1.classList.contains(STARTDATE)) {\n ele_1.setAttribute('aria-selected', 'false');\n removeClass([ele_1], [ENDDATE, SELECTED]);\n }\n else {\n this.addSelectedAttributes(ele_1, this.startValue, true);\n removeClass([ele_1], [ENDDATE]);\n }\n }\n }\n addClass([ele], ENDDATE);\n if (+this.endValue === +this.startValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n else {\n this.addSelectedAttributes(ele, this.endValue, false);\n }\n if (ele.classList.contains(OTHERMONTH)) {\n if (+this.endValue === +this.startValue) {\n this.otherMonthSelect(ele, false, true);\n }\n else {\n this.otherMonthSelect(ele, false);\n }\n }\n endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, endEle_2 = endEle; _a < endEle_2.length; _a++) {\n var ele_2 = endEle_2[_a];\n if (ele_2.classList.contains(STARTDATE)) {\n removeClass([ele_2], [RANGEHOVER]);\n }\n }\n this.applyButton.disabled = false;\n this.applyButton.element.disabled = false;\n if (!this.isMobile) {\n this.removeClassDisabled();\n }\n this.disabledDateRender();\n this.trigger('select', this.rangeArgs(event));\n }\n else if (+date < +this.startValue) {\n this.removeClassDisabled();\n this.startValue = new Date('' + date);\n this.setValue();\n this.removeSelectedAttributes();\n removeClass(this.popupObj.element.querySelectorAll('.' + STARTDATE), [STARTDATE, SELECTED]);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n }\n }\n if (event) {\n leftCalendar = closest(event.target, '.' + LEFTCALENDER);\n }\n if (!isNullOrUndefined(leftCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (event) {\n rightCalendar = event && closest(event.target, '.' + RIGHTCALENDER);\n }\n if (!isNullOrUndefined(rightCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n addClass([ele], SELECTED);\n this.updateHeader();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.selectableDates = function () {\n if (!isNullOrUndefined(this.startValue)) {\n var tdCells = this.calendarElement.querySelectorAll('.' + CALENDAR + ' td');\n var isStartDate = false;\n if (this.currentView() === 'Month') {\n for (var _i = 0, tdCells_4 = tdCells; _i < tdCells_4.length; _i++) {\n var ele = tdCells_4[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n if (!ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n if (+eleDate < +this.startValue) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n continue;\n }\n else {\n break;\n }\n }\n }\n if (ele.classList.contains(STARTDATE) && !ele.classList.contains(OTHERMONTH)) {\n isStartDate = true;\n break;\n }\n }\n if (isStartDate) {\n if (!this.previousIcon.classList.contains(DISABLED)) {\n addClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n else {\n for (var _a = 0, tdCells_5 = tdCells; _a < tdCells_5.length; _a++) {\n var ele = tdCells_5[_a];\n var startMonth = this.startValue.getMonth();\n var startYear = this.startValue.getFullYear();\n var element = this.getIdValue(null, ele);\n if (!this.startButton.element.classList.contains(ACTIVE) && ((this.currentView() === 'Year' &&\n (element.getMonth() < startMonth) && (element.getFullYear() <= startYear))\n || (this.currentView() === 'Decade' && (element.getMonth() <= startMonth) &&\n (element.getFullYear() < startYear)))) {\n addClass([ele], [DISABLED]);\n }\n else {\n break;\n }\n }\n if (tdCells[0].classList.contains(DISABLED)) {\n this.previousIconHandler(true);\n }\n else if (tdCells[tdCells.length - 1].classList.contains(DISABLED)) {\n this.nextIconHandler(true);\n }\n }\n }\n };\n DateRangePicker.prototype.updateMinMaxDays = function (calendar) {\n if (!isNullOrUndefined(this.startValue) && (isNullOrUndefined(this.endValue) || this.isMobile)) {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n var minDate = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.minDays - 1)));\n var maxDate = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n minDate = (!isNullOrUndefined(this.minDays) && this.minDays > 0) ? minDate : null;\n maxDate = (!isNullOrUndefined(this.maxDays) && this.maxDays > 0) ? maxDate : null;\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n var maxEle = void 0;\n for (var _i = 0, tdCells_6 = tdCells; _i < tdCells_6.length; _i++) {\n var ele = tdCells_6[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n var eleDate = this.getIdValue(null, ele);\n if (!isNullOrUndefined(minDate) && +eleDate === +minDate && ele.classList.contains(DISABLED)) {\n minDate.setDate(minDate.getDate() + 1);\n }\n if (!ele.classList.contains(DISABLED)) {\n if (+eleDate <= +this.startValue) {\n continue;\n }\n if (!isNullOrUndefined(minDate) && +eleDate < +minDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n }\n if (!isNullOrUndefined(maxDate) && +eleDate > +maxDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n this.isMaxDaysClicked = true;\n EventHandler.clearEvents(ele);\n if (isNullOrUndefined(maxEle) && !ele.classList.contains(OTHERMONTH)) {\n maxEle = ele;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(maxEle)) {\n if (this.isMobile) {\n if (!this.nextIcon.classList.contains(DISABLED)) {\n addClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n var calendar_1 = closest(maxEle, '.' + RIGHTCALENDER);\n calendar_1 = isNullOrUndefined(calendar_1) ? this.leftCalendar : calendar_1;\n var isLeftCalendar = calendar_1.classList.contains(LEFTCALENDER);\n if (!isLeftCalendar) {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.leftCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.rightCalPrevIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n }\n }\n }\n else {\n this.isMaxDaysClicked = false;\n }\n };\n DateRangePicker.prototype.removeClassDisabled = function () {\n var tdCells;\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td' + '.' + DATEDISABLED);\n for (var _i = 0, tdCells_7 = tdCells; _i < tdCells_7.length; _i++) {\n var ele = tdCells_7[_i];\n if (ele.classList.contains(DATEDISABLED)) {\n removeClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.add(ele, 'click', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(ele, 'mouseover', this.hoverSelection, this);\n }\n }\n }\n if (this.isMobile) {\n if (this.nextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.previousIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (this.rightCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.rightCalPrevIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.leftCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n };\n DateRangePicker.prototype.updateHeader = function () {\n var format = { type: 'date', skeleton: 'yMMMd' };\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = range.toString() + ' ' + this.l10n.getConstant('days');\n }\n else {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n if (!isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n }\n }\n if ((this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue)) ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue))\n && +this.startValue > +this.endValue))) {\n if (!this.isMobile) {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n }\n if (this.popupObj.element.querySelector('#custom_range')) {\n this.popupObj.element.querySelector('#custom_range').textContent =\n this.l10.getConstant('customRange') !== '' ? this.l10.getConstant('customRange') : 'Custom Range';\n }\n };\n DateRangePicker.prototype.removeSelection = function () {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.removeSelectedAttributes();\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [STARTDATE, ENDDATE, SELECTED]);\n }\n if (this.popupObj.element.querySelectorAll('.' + FOCUSDATE).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + FOCUSDATE), FOCUSDATE);\n }\n if (this.popupObj.element.querySelectorAll('.' + RANGEHOVER).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + RANGEHOVER), [RANGEHOVER]);\n }\n }\n };\n DateRangePicker.prototype.addSelectedAttributes = function (ele, date, isStartDate, sameDate) {\n if (ele) {\n var title = this.globalize.formatDate(date, { type: 'date', skeleton: 'full' });\n if (!isNullOrUndefined(sameDate) && sameDate) {\n ele.setAttribute('aria-label', 'The current start and end date is ' + '' + title);\n }\n else {\n ele.setAttribute('aria-label', 'The current ' + (isStartDate ? 'start' : 'end') + ' date is ' + '' + title);\n }\n ele.setAttribute('aria-selected', 'true');\n }\n };\n DateRangePicker.prototype.removeSelectedAttributes = function () {\n if (this.popupObj) {\n var start = this.popupObj.element.querySelectorAll('.' + STARTDATE);\n for (var _i = 0, start_1 = start; _i < start_1.length; _i++) {\n var ele = start_1[_i];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n var end = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, end_1 = end; _a < end_1.length; _a++) {\n var ele = end_1[_a];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n }\n };\n DateRangePicker.prototype.updateCalendarElement = function (calendar) {\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.calendarElement = this.leftCalendar;\n this.currentDate = this.leftCalCurrentDate;\n this.previousIcon = this.leftCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.currentDate = this.rightCalCurrentDate;\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.rightCalNextIcon;\n }\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n };\n DateRangePicker.prototype.navPrevMonth = function (e) {\n e.preventDefault();\n var ele = closest(e.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(e.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigatePrevious(e);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.deviceNavigation = function (ele) {\n this.deviceCalendarEvent();\n this.updateRange([this.popupObj.element.querySelector('.' + CALENDAR)]);\n if ((!isNullOrUndefined(this.endValue) && this.endButton.element.classList.contains(ACTIVE))) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.selectableDates();\n }\n if (this.currentView() === 'Month') {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.updateControl = function (calendar) {\n if (calendar.classList.contains(RIGHTCALENDER)) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n if ((this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-month'))\n || this.isMobile) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.updateRange([calendar]);\n };\n DateRangePicker.prototype.navNextMonth = function (event) {\n event.preventDefault();\n var ele = closest(event.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(event.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigateNext(event);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.compareMonths = function (start, end) {\n var result;\n if (start.getFullYear() === end.getFullYear() &&\n (this.currentView() === 'Year' || this.currentView() === 'Decade')) {\n result = -1;\n }\n else if (start.getFullYear() > end.getFullYear()) {\n result = -1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n if (start.getFullYear() + 1 === end.getFullYear() && start.getMonth() === 11 && end.getMonth() === 0) {\n result = -1;\n }\n else {\n result = 1;\n }\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() + 1 === end.getMonth() ? -1 : 1;\n }\n return result;\n };\n DateRangePicker.prototype.isPopupOpen = function () {\n if (!isNullOrUndefined(this.popupObj) && this.popupObj.element.classList.contains(POPUP)) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.createRangeHeader = function () {\n var labelContainer = this.createElement('div', { className: STARTENDCONTAINER });\n if (!this.isMobile) {\n var startLabel = this.createElement('a', { className: STARTLABEL });\n var endLabel = this.createElement('a', { className: ENDLABEL });\n var changeIcon = this.createElement('span', { className: CHANGEICON });\n attributes(startLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'Start Date', 'role': 'button' });\n attributes(endLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'End Date', 'role': 'button' });\n labelContainer.appendChild(startLabel);\n labelContainer.appendChild(changeIcon);\n labelContainer.appendChild(endLabel);\n startLabel.textContent = this.l10n.getConstant('startLabel');\n endLabel.textContent = this.l10n.getConstant('endLabel');\n }\n else {\n var endBtn = this.createElement('button', { className: ENDBUTTON });\n var startBtn = this.createElement('button', { className: STARTBUTTON });\n this.startButton = new Button({ content: this.l10n.getConstant('startLabel') }, startBtn);\n this.endButton = new Button({ content: this.l10n.getConstant('endLabel') }, endBtn);\n labelContainer.appendChild(startBtn);\n labelContainer.appendChild(endBtn);\n }\n return labelContainer;\n };\n DateRangePicker.prototype.disableInput = function () {\n if (this.strictMode) {\n if (!isNullOrUndefined(this.previousStartValue) && !isNullOrUndefined(this.previousEndValue)) {\n this.startValue = this.previousStartValue;\n this.endValue = this.previousEndValue;\n this.setValue();\n this.updateInput();\n }\n }\n else {\n this.updateInput();\n this.clearRange();\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.errorClass();\n }\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n };\n DateRangePicker.prototype.validateMinMax = function () {\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (!(this.min <= this.max)) {\n this.disableInput();\n return;\n }\n if (!isNullOrUndefined(this.minDays) && !isNullOrUndefined(this.maxDays)) {\n if (this.maxDays > 0 && this.minDays > 0 && (this.minDays > this.maxDays)) {\n this.maxDays = null;\n }\n }\n if (!isNullOrUndefined(this.minDays) && this.minDays < 0) {\n this.minDays = null;\n }\n if (!isNullOrUndefined(this.maxDays) && this.maxDays < 0) {\n this.maxDays = null;\n }\n };\n DateRangePicker.prototype.validateRangeStrict = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (+this.startValue <= +this.min) {\n this.startValue = this.min;\n this.setValue();\n }\n else if (+this.startValue >= +this.min && +this.startValue >= +this.max) {\n this.startValue = this.max;\n }\n }\n if (!isNullOrUndefined(this.endValue)) {\n if (+this.endValue > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else if (+this.endValue < +this.min) {\n this.endValue = this.min;\n this.setValue();\n }\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateRange = function () {\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateMinMaxDays = function () {\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n var range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) && !(range >= this.minDays)) {\n if (this.strictMode) {\n var date = new Date(+this.startValue);\n date.setDate(date.getDate() + (this.minDays - 1));\n if (+date > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else {\n this.endValue = date;\n this.setValue();\n }\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n if ((!isNullOrUndefined(this.maxDays) && this.maxDays > 0) && !(range <= this.maxDays)) {\n if (this.strictMode) {\n this.endValue = new Date(+this.startValue);\n this.endValue.setDate(this.endValue.getDate() + (this.maxDays - 1));\n this.setValue();\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n };\n DateRangePicker.prototype.renderCalendar = function () {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(CALENDAR);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n attributes(this.calendarElement, { 'role': 'calendar' });\n _super.prototype.createHeader.call(this);\n _super.prototype.createContent.call(this);\n };\n DateRangePicker.prototype.isSameMonth = function (start, end) {\n if (start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.startMonthCurrentDate = function () {\n if (this.isSameMonth(this.min, this.max) || +this.currentDate > +this.max || this.isSameMonth(this.currentDate, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (this.currentDate < this.min) {\n this.currentDate = new Date('' + this.min);\n }\n };\n DateRangePicker.prototype.selectNextMonth = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameMonth(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n return;\n }\n if ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n }\n };\n DateRangePicker.prototype.selectStartMonth = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.max) && this.isSameMonth(this.startValue, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (!(this.startValue >= this.min && this.startValue <= this.max)\n || this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n else {\n this.currentDate = new Date(+this.startValue);\n }\n }\n else {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.startMonthCurrentDate();\n }\n if ((!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.startMonthCurrentDate();\n };\n DateRangePicker.prototype.createCalendar = function () {\n var calendarContainer = this.createElement('div', { className: CALENDARCONTAINER });\n if (!this.isMobile) {\n this.selectStartMonth();\n this.renderCalendar();\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.calendarElement.classList.add(LEFTCALENDER);\n this.leftCalPrevIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + PREVICON);\n this.leftCalNextIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + NEXTICON);\n this.leftTitle = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalNextIcon);\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalPrevIcon);\n prepend([this.leftCalPrevIcon], this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER));\n this.leftCalendar = this.calendarElement;\n var leftContainer = this.createElement('div', { className: LEFTCONTAINER });\n var rightContainer = this.createElement('div', { className: RIGHTCONTAINER });\n leftContainer.appendChild(this.leftCalendar);\n calendarContainer.appendChild(leftContainer);\n if (!this.isMobile) {\n EventHandler.add(this.leftTitle, 'click', this.leftNavTitle, this);\n }\n this.selectNextMonth();\n this.renderCalendar();\n this.rightCalCurrentDate = new Date(+this.currentDate);\n addClass([this.calendarElement], RIGHTCALENDER);\n this.rightCalendar = this.calendarElement;\n removeClass([this.leftCalendar && this.leftCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n removeClass([this.rightCalendar && this.rightCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n this.rightCalPrevIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + PREVICON);\n this.rightCalNextIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + NEXTICON);\n this.rightTitle = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('table').setAttribute('tabindex', '-1');\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalNextIcon);\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalPrevIcon);\n prepend([this.rightCalPrevIcon], this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER));\n rightContainer.appendChild(this.rightCalendar);\n calendarContainer.appendChild(rightContainer);\n if (!this.isMobile) {\n EventHandler.add(this.rightTitle, 'click', this.rightNavTitle, this);\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.currentDate = new Date(+this.startValue);\n }\n _super.prototype.validateDate.call(this);\n _super.prototype.minMaxUpdate.call(this);\n _super.prototype.render.call(this);\n var prevIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + PREVICON);\n var nextIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + NEXTICON);\n remove(this.calendarElement.querySelector('.' + CALENDAR + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(nextIcon);\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(prevIcon);\n prepend([prevIcon], this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER));\n this.deviceCalendar = this.calendarElement;\n calendarContainer.appendChild(this.calendarElement);\n this.headerTitleElement = this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER + ' .' + TITLE);\n }\n return calendarContainer;\n };\n DateRangePicker.prototype.leftNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.leftCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.calendarNavigation = function (e, element) {\n this.table = element.querySelector('table');\n this.headerTitleElement = element.querySelector('.e-title');\n this.tableBodyElement = element.querySelector('tbody');\n this.tableHeadElement = element.querySelector('thead');\n this.contentElement = element.querySelector('.e-content');\n this.updateCalendarElement(element);\n _super.prototype.navigateTitle.call(this, e);\n this.updateNavIcons();\n };\n DateRangePicker.prototype.rightNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.rightCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.clickEventEmitter = function (e) {\n if (!this.isMobile) {\n if (closest(e.target, '.e-calendar.e-left-calendar')) {\n this.calendarElement = this.leftCalendar;\n this.updateCalendarElement(this.leftCalendar);\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.updateCalendarElement(this.rightCalendar);\n }\n }\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n * @private\n * @hidden\n */\n DateRangePicker.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n DateRangePicker.prototype.navigatedEvent = function (e) {\n var element;\n if (this.isMobile && this.currentView() === 'Month') {\n this.bindCalendarCellEvents();\n this.deviceNavigation();\n this.removeFocusedDate();\n }\n else if (this.isMobile && (this.currentView() === 'Decade' || this.currentView() === 'Year')) {\n this.selectableDates();\n }\n else {\n if (!this.isMobile && this.currentView() === 'Month') {\n element = this.calendarElement.classList.contains('e-left-calendar') ? this.leftCalendar : this.rightCalendar;\n if (element === this.leftCalendar && ((e && !e.currentTarget.children[0].classList.contains('e-icons'))\n || (!isNullOrUndefined(this.controlDown)))) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.rightCalCurrentDate = new Date(new Date(+this.currentDate).setMonth(new Date(+this.currentDate).getMonth() + 1));\n this.currentDate = this.leftCalCurrentDate;\n this.updateCalendarElement(this.leftCalendar);\n this.updateControl(this.leftCalendar);\n this.updateCalendarElement(this.rightCalendar);\n this.navigateTo('Month', this.rightCalCurrentDate);\n this.updateControl(this.rightCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n }\n else if (e && !e.currentTarget.children[0].classList.contains('e-icons')\n || (!isNullOrUndefined(this.controlDown))) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n this.leftCalCurrentDate = new Date(this.currentDate.setMonth(this.currentDate.getMonth() - 1));\n this.currentDate = this.rightCalCurrentDate;\n this.updateCalendarElement(this.rightCalendar);\n this.updateControl(this.rightCalendar);\n this.updateCalendarElement(this.leftCalendar);\n if (this.startValue && (this.startValue.getMonth() < this.rightCalCurrentDate.getMonth() &&\n this.startValue.getFullYear() <= this.rightCalCurrentDate.getFullYear())) {\n if (isNullOrUndefined(this.endValue)) {\n this.effect = '';\n this.navigateTo('Month', new Date(+this.startValue));\n }\n else {\n this.navigateTo('Month', this.leftCalCurrentDate);\n }\n }\n else {\n this.navigateTo('Month', this.leftCalCurrentDate);\n }\n this.updateControl(this.leftCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n }\n }\n else if (!this.isMobile && (this.currentView() === 'Decade' || this.currentView() === 'Year')) {\n this.updateNavIcons();\n this.calendarIconEvent();\n }\n }\n };\n DateRangePicker.prototype.createControl = function () {\n var controlContainer = this.createElement('div', { className: RANGECONTAINER });\n var headerContainer = this.createElement('div', { className: RANGEHEADER });\n var labelContainer = this.createRangeHeader();\n headerContainer.appendChild(labelContainer);\n var daySpan = this.createElement('div', { className: DAYSPAN });\n attributes(daySpan, { 'aria-label': 'Selected Days' });\n daySpan.textContent = this.l10n.getConstant('selectedDays');\n headerContainer.appendChild(daySpan);\n var separator = this.createElement('div', { className: SEPARATOR });\n var calendarContainer = this.createCalendar();\n controlContainer.appendChild(headerContainer);\n controlContainer.appendChild(separator);\n controlContainer.appendChild(calendarContainer);\n var footerSection = this.createElement('div', { className: FOOTER });\n var cancelBtn = this.createElement('button', { className: CANCEL + ' ' + FLAT + ' ' + CSS });\n var applyBtn = this.createElement('button');\n addClass([applyBtn], [APPLY, FLAT, PRIMARY, CSS]);\n footerSection.appendChild(applyBtn);\n footerSection.appendChild(cancelBtn);\n var enable = !isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue);\n this.cancelButton = new Button({ content: this.l10n.getConstant('cancelText') }, cancelBtn);\n this.applyButton = new Button({ content: this.l10n.getConstant('applyText'), disabled: !enable }, applyBtn);\n EventHandler.add(applyBtn, 'click', this.applyFunction, this);\n EventHandler.add(cancelBtn, 'click', this.cancelFunction, this);\n this.popupWrapper.appendChild(controlContainer);\n if (!this.isMobile) {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.createPresets();\n this.listRippleEffect();\n addClass([controlContainer], RANGEBORDER);\n addClass([this.popupWrapper], 'e-preset-wrapper');\n var presets = this.popupWrapper.querySelector('.' + PRESETS);\n presets.style.height = this.popupWrapper.querySelector('.' + RANGECONTAINER).getBoundingClientRect().height + 'px';\n }\n }\n this.popupWrapper.appendChild(footerSection);\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n this.renderPopup();\n };\n DateRangePicker.prototype.cancelFunction = function (eve) {\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n eve.preventDefault();\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.startValue = null;\n this.endValue = null;\n this.removeSelection();\n this.hide(eve);\n };\n DateRangePicker.prototype.deviceHeaderUpdate = function () {\n if (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.endButton.element.setAttribute('disabled', '');\n this.startButton.element.classList.add(ACTIVE);\n }\n else if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.classList.add(ACTIVE);\n }\n };\n DateRangePicker.prototype.applyFunction = function (eve) {\n eve.preventDefault();\n if (this.closeEventArgs && this.closeEventArgs.cancel) {\n this.startValue = this.popupWrapper.querySelector('.e-start-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-start-date'));\n this.endValue = this.popupWrapper.querySelector('.e-end-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-end-date'));\n this.setValue();\n }\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n if (eve.type !== 'touchstart' &&\n this.closeEventArgs && !this.closeEventArgs.cancel) {\n eve.preventDefault();\n }\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n this.previousEleValue = this.inputElement.value;\n Input.setValue(this.rangeArgs(eve).text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.changeTrigger(eve);\n this.hide(eve ? eve : null);\n this.errorClass();\n }\n else {\n this.hide(eve ? eve : null);\n }\n if (!this.isMobile) {\n this.isKeyPopup = false;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.children[1].focus();\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n }\n }\n };\n DateRangePicker.prototype.onMouseClick = function (event, item) {\n if (event.type === 'touchstart') {\n return;\n }\n var target = item || event.target;\n var li = closest(target, '.' + LISTCLASS);\n var isClick = li && li.classList.contains(ACTIVE);\n if (li && li.classList.contains(LISTCLASS)) {\n this.setListSelection(li, event);\n }\n this.inputElement.focus();\n if (!this.isMobile) {\n this.preventFocus = true;\n if (li && li.classList.contains(LISTCLASS) && li.getAttribute('id') === 'custom_range') {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (!isClick && event.type === 'keydown') {\n this.inputElement.focus();\n }\n }\n }\n };\n DateRangePicker.prototype.onMouseOver = function (event) {\n var li = closest(event.target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS) && !li.classList.contains(HOVER)) {\n addClass([li], HOVER);\n }\n };\n DateRangePicker.prototype.onMouseLeave = function (event) {\n var item = closest(event.target, '.' + HOVER);\n if (!isNullOrUndefined(item)) {\n removeClass([item], HOVER);\n }\n };\n DateRangePicker.prototype.setListSelection = function (li, event) {\n if (li && (!li.classList.contains(ACTIVE) || (this.isMobile && li.classList.contains(ACTIVE)))) {\n if (this.isMobile && li.classList.contains(ACTIVE)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n var values_1 = this.presetsItem[this.activeIndex];\n if (values_1.id === 'custom_range') {\n this.renderCustomPopup();\n return;\n }\n return;\n }\n this.removeListSelection();\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n addClass([li], ACTIVE);\n li.setAttribute('aria-selected', 'true');\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.renderCustomPopup();\n }\n else {\n this.applyPresetRange(values);\n }\n }\n };\n DateRangePicker.prototype.removeListSelection = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n if (!isNullOrUndefined(item)) {\n removeClass([item], ACTIVE);\n item.removeAttribute('aria-selected');\n }\n };\n DateRangePicker.prototype.setValue = function () {\n this.modelValue = [this.startValue, this.endValue];\n };\n DateRangePicker.prototype.applyPresetRange = function (values) {\n this.hide(null);\n this.presetsItem[this.presetsItem.length - 1].start = null;\n this.presetsItem[this.presetsItem.length - 1].end = null;\n this.startValue = values.start;\n this.endValue = values.end;\n this.setValue();\n this.refreshControl();\n this.trigger('select', this.rangeArgs(null));\n this.changeTrigger();\n this.previousEleValue = this.inputElement.value;\n this.isCustomRange = false;\n this.leftCalendar = this.rightCalendar = null;\n if (this.isKeyPopup) {\n this.isRangeIconClicked = false;\n this.inputElement.focus();\n }\n };\n DateRangePicker.prototype.showPopup = function (element, event) {\n this.presetHeight();\n if (this.zIndex === 1000) {\n this.popupObj.show(null, this.element);\n }\n else {\n this.popupObj.show(null, null);\n }\n if (this.isMobile) {\n this.popupObj.refreshPosition();\n }\n };\n DateRangePicker.prototype.renderCustomPopup = function () {\n this.isCustomWindow = true;\n this.popupObj.hide();\n this.popupWrapper = this.createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.renderControl();\n this.openEventArgs.appendTo.appendChild(this.popupWrapper);\n this.showPopup();\n this.isCustomRange = true;\n if (!this.isMobile) {\n this.calendarFocus();\n }\n };\n DateRangePicker.prototype.listRippleEffect = function () {\n for (var _i = 0, _a = this.liCollections; _i < _a.length; _i++) {\n var li = _a[_i];\n rippleEffect(li);\n }\n };\n DateRangePicker.prototype.createPresets = function () {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.presetElement = this.createElement('div', { className: PRESETS, attrs: { 'tabindex': '0' } });\n var listTag = ListBase.createList(this.createElement, this.presetsItem, null, true);\n attributes(listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n this.presetElement.appendChild(listTag);\n this.popupWrapper.appendChild(this.presetElement);\n this.liCollections = this.presetElement.querySelectorAll('.' + LISTCLASS);\n this.wireListEvents();\n if (this.isMobile) {\n this.presetElement.style.width = this.inputWrapper.container.getBoundingClientRect().width + 'px';\n }\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex > -1) {\n addClass([this.liCollections[this.activeIndex]], ACTIVE);\n }\n }\n };\n DateRangePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.presetElement, 'click', this.onMouseClick, this);\n if (!this.isMobile) {\n EventHandler.add(this.presetElement, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.presetElement, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateRangePicker.prototype.unWireListEvents = function () {\n if (!isNullOrUndefined(this.presetElement)) {\n EventHandler.remove(this.presetElement, 'click touchstart', this.onMouseClick);\n if (!this.isMobile) {\n EventHandler.remove(this.presetElement, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.presetElement, 'mouseout', this.onMouseLeave);\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.renderPopup = function () {\n var _this = this;\n this.popupWrapper.classList.add('e-control');\n var popupWidth = this.popupWrapper.getBoundingClientRect().width;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass.trim() !== '') {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (this.isMobile && this.isCustomWindow) {\n this.modal = this.createElement('div');\n document.body.appendChild(this.modal);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n relateTo: this.isMobile && this.isCustomWindow ? document.body :\n (!isNullOrUndefined(this.targetElement) ? this.targetElement : this.inputWrapper.container),\n position: (this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'left', Y: 'bottom' } : { X: 'center', Y: 'center' }) :\n this.enableRtl ? { X: 'left', Y: 'bottom' } : { X: 'right', Y: 'bottom' }),\n offsetX: this.isMobile || this.enableRtl ? 0 : -popupWidth,\n offsetY: OFFSETVALUE,\n collision: this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'fit' } : { X: 'fit', Y: 'fit' }) : { X: 'fit', Y: 'flip' },\n targetType: this.isMobile && this.isCustomWindow ? 'container' : 'relative',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n open: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n addClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.cancelButton) {\n _this.btnKeyboardModule = new KeyboardEvents(_this.cancelButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { tab: 'tab', altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n _this.btnKeyboardModule = new KeyboardEvents(_this.applyButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n }\n if (!isNullOrUndefined(_this.leftCalendar)) {\n if (!_this.isRangeIconClicked) {\n _this.calendarFocus();\n }\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.presetKeyActionHandler.bind(_this),\n keyConfigs: _this.presetKeyConfig\n });\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n if (isNullOrUndefined(_this.leftCalendar)) {\n _this.preventBlur = true;\n _this.presetElement.focus();\n }\n else {\n _this.presetElement.setAttribute('tabindex', '-1');\n }\n }\n _this.popupKeyBoardHandler();\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.add(document, 'keydown', _this.popupCloseHandler, _this);\n }\n },\n close: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (_this.isRangeIconClicked) {\n _this.inputWrapper.container.children[1].focus();\n }\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label)) {\n _this.unWireListEvents();\n }\n if (!isNullOrUndefined(_this.popupObj)) {\n detach(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupObj = null;\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.remove(document, 'keydown', _this.popupCloseHandler);\n }\n }\n });\n if (this.isMobile) {\n this.popupObj.element.classList.add(DEVICE);\n if (!this.isMobile) {\n this.popupObj.element.classList.add('e-bigger');\n }\n }\n if (this.isMobile && this.isCustomWindow) {\n addClass([this.modal], [DEVICE, ROOT, 'e-range-modal']);\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n }\n EventHandler.add(document, 'mousedown', this.documentHandler, this);\n };\n DateRangePicker.prototype.popupCloseHandler = function (e) {\n switch (e.keyCode) {\n case 27:\n this.hide(e);\n break;\n }\n };\n DateRangePicker.prototype.calendarFocus = function () {\n var startDate = this.popupObj && this.popupObj.element.querySelector('.' + STARTDATE);\n if (startDate) {\n var ele = closest(startDate, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n ele.children[1].firstElementChild.focus();\n }\n addClass([startDate], FOCUSDATE);\n }\n else {\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n };\n DateRangePicker.prototype.presetHeight = function () {\n var presets = this.popupObj && this.popupObj.element.querySelector('.' + PRESETS);\n var rangeContainer = this.popupObj && this.popupObj.element.querySelector('.' + RANGECONTAINER);\n if (!isNullOrUndefined(presets) && !isNullOrUndefined(rangeContainer)) {\n presets.style.height = rangeContainer.getBoundingClientRect().height + 'px';\n }\n };\n DateRangePicker.prototype.presetKeyActionHandler = function (e) {\n switch (e.action) {\n case 'moveDown':\n this.listMoveDown(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'moveUp':\n this.listMoveUp(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'enter':\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(this.leftCalendar) && !isNullOrUndefined(actItem)) {\n if (isNullOrUndefined(hvrItem) || (!isNullOrUndefined(actItem) && actItem === hvrItem)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(actItem);\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.calendarFocus();\n actItem.classList.remove(HOVER);\n e.preventDefault();\n return;\n }\n }\n }\n if (!isNullOrUndefined(hvrItem) || !isNullOrUndefined(actItem)) {\n this.onMouseClick(e, hvrItem || actItem);\n }\n e.preventDefault();\n break;\n case 'tab':\n if (this.leftCalendar) {\n var item = this.getHoverLI();\n if (!isNullOrUndefined(item)) {\n item.classList.remove(HOVER);\n }\n }\n else {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.listMoveDown = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n else {\n addClass([this.liCollections[0]], HOVER);\n }\n };\n DateRangePicker.prototype.listMoveUp = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n };\n DateRangePicker.prototype.getHoverLI = function () {\n var item = this.presetElement.querySelector('.' + HOVER);\n return item;\n };\n DateRangePicker.prototype.getActiveLI = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n return item;\n };\n DateRangePicker.prototype.popupKeyBoardHandler = function () {\n this.popupKeyboardModule = new KeyboardEvents(this.popupWrapper, {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: { escape: 'escape' }\n });\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n };\n DateRangePicker.prototype.setScrollPosition = function () {\n var listHeight = this.presetElement.getBoundingClientRect().height;\n var hover = this.presetElement.querySelector('.' + HOVER);\n var active = this.presetElement.querySelector('.' + ACTIVE);\n var element = !isNullOrUndefined(hover) ? hover : active;\n if (!isNullOrUndefined(element)) {\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.presetElement.scrollTop = nextEle ? (height - (listHeight / 2 + liHeight / 2)) : height;\n }\n else {\n this.presetElement.scrollTop = 0;\n }\n }\n };\n DateRangePicker.prototype.popupKeyActionHandle = function (e) {\n var presetElement = closest(e.target, '.' + PRESETS);\n switch (e.action) {\n case 'escape':\n if (this.isPopupOpen()) {\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[1].blur();\n }\n break;\n case 'enter':\n if (!this.isPopupOpen()) {\n this.show(null, e);\n }\n else {\n this.inputWrapper.container.children[1].focus();\n }\n break;\n case 'tab':\n this.hide(e);\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n else {\n if (document.activeElement === this.cancelButton.element && this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (document.activeElement === this.applyButton.element && this.applyButton.element.disabled !== true) {\n this.cancelButton.element.focus();\n }\n else {\n if (!isNullOrUndefined(this.presetElement) && (document.activeElement === this.cancelButton.element)) {\n this.presetElement.focus();\n }\n else {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n }\n e.preventDefault();\n break;\n }\n };\n DateRangePicker.prototype.documentHandler = function (e) {\n if (isNullOrUndefined(this.popupObj)) {\n return;\n }\n var target = e.target;\n if (!this.inputWrapper.container.contains(target) ||\n (!isNullOrUndefined(this.popupObj) && !closest(target, this.popupWrapper.id))) {\n if ((e.type === 'touchstart' || e.type === 'mousedown') ||\n this.closeEventArgs && !this.closeEventArgs.cancel) {\n e.preventDefault();\n }\n }\n if ((isNullOrUndefined(this.targetElement) ||\n (!isNullOrUndefined(this.targetElement) && !(target === this.targetElement))) &&\n !(closest(target, '#' + this.popupObj.element.id))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && !(closest(target, '.e-daterangepicker.e-popup') && (!target.classList.contains('e-day')))) {\n this.preventBlur = false;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n if (!this.isMobile) {\n this.isRangeIconClicked = false;\n }\n }\n }\n };\n DateRangePicker.prototype.createInput = function () {\n this.inputWrapper = Input.createInput({\n floatLabelType: this.floatLabelType,\n element: this.inputElement,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [DATERANGEICON]\n }, this.createElement);\n attributes(this.inputElement, {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '1', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.element.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n });\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n if (!isNullOrUndefined(this.placeholder) && this.placeholder.trim() !== '') {\n Input.addAttributes({ 'aria-placeholder': this.placeholder }, this.inputElement);\n }\n this.setEleWidth(this.width);\n addClass([this.inputWrapper.container], DATERANGEWRAPPER);\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.inputElement.type === 'hidden') {\n this.inputWrapper.container.style.display = 'none';\n }\n this.refreshControl();\n this.previousEleValue = this.inputElement.value;\n };\n DateRangePicker.prototype.setEleWidth = function (width) {\n if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (this.width);\n }\n else if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n DateRangePicker.prototype.refreshControl = function () {\n this.validateMinMax();\n if (this.strictMode) {\n this.validateRangeStrict();\n }\n var isDisabled = this.disabledDates();\n if (this.strictMode && (isDisabled)) {\n this.startValue = this.previousStartValue;\n this.setProperties({ startDate: this.startValue }, true);\n this.endValue = this.previousEndValue;\n this.setProperties({ endDate: this.endValue }, true);\n this.setValue();\n }\n this.updateInput();\n if (!this.strictMode) {\n this.validateRange();\n }\n if (!this.strictMode && (isDisabled)) {\n this.clearRange();\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !isDisabled) {\n this.disabledDateRender();\n }\n this.errorClass();\n this.previousStartValue = isNullOrUndefined(this.startValue) || isNaN(+this.startValue) ? null : new Date(+this.startValue);\n this.previousEndValue = isNullOrUndefined(this.endValue) || isNaN(+this.endValue) ? null : new Date(+this.endValue);\n };\n DateRangePicker.prototype.updateInput = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var startDate = this.globalize.formatDate(this.startValue, { format: this.format, type: 'date', skeleton: 'yMd' });\n var endDate = this.globalize.formatDate(this.endValue, { format: this.format, type: 'date', skeleton: 'yMd' });\n Input.setValue(startDate + ' ' + this.separator + ' ' + endDate, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n }\n };\n DateRangePicker.prototype.isDateDisabled = function (date) {\n if (isNullOrUndefined(date)) {\n return false;\n }\n var value = new Date(+date);\n if (+value < +this.min || +value > +this.max) {\n return true;\n }\n this.virtualRenderCellArgs = {\n date: value,\n isDisabled: false,\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.disabledDateRender = function () {\n this.disabledDays = [];\n this.disabledDayCnt = null;\n var localDate = new Date(+this.startValue);\n var count = 0;\n while (+localDate <= +this.endValue) {\n this.virtualRenderCellArgs = {\n date: localDate,\n isDisabled: false,\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n this.disabledDays.push(new Date(+args.date));\n if (+localDate > +this.startValue && +localDate < +this.endValue) {\n count++;\n }\n }\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n this.disabledDayCnt = count;\n };\n DateRangePicker.prototype.virtualRenderCellEvent = function (args) {\n extend(this.virtualRenderCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n DateRangePicker.prototype.disabledDates = function () {\n var isStartDisabled = false;\n var isEndDisabled = false;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n isStartDisabled = this.isDateDisabled(this.startValue);\n isEndDisabled = this.isDateDisabled(this.endValue);\n this.currentDate = null;\n this.setValue();\n }\n return (isStartDisabled || isEndDisabled);\n };\n DateRangePicker.prototype.setModelValue = function () {\n if (!this.value && this.startDate === null && this.endDate === null) {\n this.setProperties({ value: null }, true);\n }\n else if (this.value === null || this.value.start === null) {\n if (this.value === null) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n else if (this.value.start === null) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n else {\n if ((this.value && this.value.length > 0) ||\n this.valueType && this.valueType.length > 0) {\n if (+this.startDate !== +this.value[0] || +this.endDate !== +this.value[1]) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n if (this.value && this.value[0] == null && this.value[1] == null) {\n this.setProperties({ value: null }, true);\n }\n }\n else {\n if ((this.value && this.value.start)) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n }\n this.createHiddenInput();\n };\n /**\n * To dispatch the event manually\n */\n DateRangePicker.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n this.firstHiddenChild.dispatchEvent(evt);\n };\n DateRangePicker.prototype.changeTrigger = function (e) {\n if (+this.initStartDate !== +this.startValue || +this.initEndDate !== +this.endValue) {\n this.setProperties({ endDate: this.checkDateValue(this.endValue) }, true);\n this.setProperties({ startDate: this.checkDateValue(this.startValue) }, true);\n this.setModelValue();\n this.trigger('change', this.rangeArgs(e));\n }\n this.previousEleValue = this.inputElement.value;\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n * @hidden\n */\n DateRangePicker.prototype.navigateTo = function (view, value) {\n _super.prototype.navigateTo.call(this, view, value);\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateRangePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.focus();\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateRangePicker.prototype.focusOut = function () {\n var isBlur = this.preventBlur;\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.preventBlur = false;\n this.inputElement.blur();\n this.preventBlur = isBlur;\n }\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateRangePicker.prototype.destroy = function () {\n this.hide(null);\n var ariaAttrs = {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '1', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.element.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'aria-invalid': 'false', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n removeClass([this.inputElement], [ROOT]);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n Input.removeAttributes(ariaAttrs, this.inputElement);\n this.ensureInputAttribute();\n this.inputElement.classList.remove('e-input');\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n detach(this.inputWrapper.container);\n }\n }\n if (!isNullOrUndefined(this.inputKeyboardModule) && !this.isMobile) {\n this.inputKeyboardModule.destroy();\n }\n if (this.popupObj) {\n if (!this.isMobile) {\n this.clearCalendarEvents();\n }\n }\n _super.prototype.destroy.call(this);\n this.inputWrapper = this.popupWrapper = this.popupObj = this.cloneElement = this.presetElement = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n if ((!isNullOrUndefined(this.firstHiddenChild))\n && (!isNullOrUndefined(this.secondHiddenChild))) {\n detach(this.firstHiddenChild);\n detach(this.secondHiddenChild);\n this.firstHiddenChild = this.secondHiddenChild = null;\n this.inputElement.setAttribute('name', this.element.getAttribute('data-name'));\n this.inputElement.removeAttribute('data-name');\n }\n };\n DateRangePicker.prototype.ensureInputAttribute = function () {\n for (var attr = 0; attr < this.inputElement.attributes.length; attr++) {\n var prop = this.inputElement.attributes[attr].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * To get component name\n * @returns string\n * @private\n */\n DateRangePicker.prototype.getModuleName = function () {\n return 'daterangepicker';\n };\n /**\n * Return the properties that are maintained upon browser refresh.\n * @returns string\n */\n DateRangePicker.prototype.getPersistData = function () {\n var keyEntity = ['startDate', 'endDate', 'value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Return the selected range and day span in the DateRangePicker.\n * @returns Object\n */\n DateRangePicker.prototype.getSelectedRange = function () {\n var range;\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n this.disabledDateRender();\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n }\n else {\n range = 0;\n }\n return { startDate: this.startValue, endDate: this.endValue, daySpan: range };\n };\n /**\n * To open the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.show = function (element, event) {\n if (this.isMobile && this.popupObj) {\n this.popupObj.refreshPosition();\n }\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n if (!this.isPopupOpen()) {\n if (element) {\n this.targetElement = element;\n }\n this.createPopup();\n this.openEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null,\n appendTo: document.body\n };\n this.trigger('open', this.openEventArgs);\n if (!this.openEventArgs.cancel) {\n this.openEventArgs.appendTo.appendChild(this.popupWrapper);\n this.showPopup(element, event);\n var isPreset = (!this.isCustomRange || (this.isMobile && this.isCustomRange));\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.setScrollPosition();\n }\n }\n }\n }\n };\n /**\n * To close the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.hide = function (event) {\n if (this.popupObj) {\n if (isNullOrUndefined(this.previousEndValue) && isNullOrUndefined(this.previousStartValue)) {\n this.clearRange();\n }\n else {\n if (!isNullOrUndefined(this.previousStartValue)) {\n this.startValue = new Date('' + this.previousStartValue);\n this.setValue();\n this.currentDate = new Date('' + this.startValue);\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n this.endValue = new Date('' + this.previousEndValue);\n this.setValue();\n }\n else {\n this.endValue = null;\n this.setValue();\n }\n }\n if (this.isPopupOpen()) {\n this.closeEventArgs = {\n cancel: false,\n popup: this.popupObj,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null\n };\n this.trigger('close', this.closeEventArgs);\n if (!this.closeEventArgs.cancel) {\n if (this.isMobile) {\n if (!isNullOrUndefined(this.startButton) && !isNullOrUndefined(this.endButton)) {\n EventHandler.remove(this.startButton.element, 'click touchstart', this.deviceHeaderClick);\n EventHandler.remove(this.endButton.element, 'click touchstart', this.deviceHeaderClick);\n }\n }\n if (this.popupObj) {\n this.popupObj.hide();\n if (this.preventBlur) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftKeyboardModule) && !isNullOrUndefined(this.rightKeyboardModule)) {\n this.leftKeyboardModule.destroy();\n this.rightKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.cancelButton)) {\n this.btnKeyboardModule.destroy();\n }\n }\n this.targetElement = null;\n removeClass([document.body], OVERFLOW);\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (this.isMobile && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n this.isKeyPopup = this.dateDisabled = false;\n }\n else {\n removeClass([this.inputWrapper.buttons[0]], ACTIVE);\n }\n }\n }\n this.updateHiddenInput();\n if (this.isMobile) {\n this.element.removeAttribute('readonly');\n }\n };\n DateRangePicker.prototype.setLocale = function () {\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n this.changeTrigger();\n };\n DateRangePicker.prototype.refreshChange = function () {\n this.refreshControl();\n this.changeTrigger();\n };\n DateRangePicker.prototype.setDate = function () {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.refreshChange();\n };\n DateRangePicker.prototype.enableInput = function () {\n if (+this.min <= +this.max) {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.element.hasAttribute('disabled')) {\n this.bindEvents();\n }\n }\n };\n DateRangePicker.prototype.clearModelvalue = function (newProp, oldProp) {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n if (oldProp.value && oldProp.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n else if (oldProp.value && oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n else if (oldProp.value && !oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n this.updateValue();\n this.setDate();\n };\n DateRangePicker.prototype.createHiddenInput = function () {\n if (isNullOrUndefined(this.firstHiddenChild) && isNullOrUndefined(this.secondHiddenChild)) {\n this.firstHiddenChild = this.createElement('input');\n this.secondHiddenChild = this.createElement('input');\n }\n if (!isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n this.inputElement.setAttribute('data-name', this.inputElement.getAttribute('name'));\n this.inputElement.removeAttribute('name');\n }\n attributes(this.firstHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name')\n });\n attributes(this.secondHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name'),\n });\n var format = { type: 'datetime', skeleton: 'yMd' };\n this.firstHiddenChild.value = this.startDate && this.globalize.formatDate(this.startDate, format);\n this.secondHiddenChild.value = this.endDate && this.globalize.formatDate(this.endDate, format);\n this.inputElement.parentElement.appendChild(this.firstHiddenChild);\n this.inputElement.parentElement.appendChild(this.secondHiddenChild);\n this.firstHiddenChild.style.display = 'none';\n this.secondHiddenChild.style.display = 'none';\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.hide(null);\n switch (prop) {\n case 'width':\n this.setEleWidth(this.width);\n break;\n case 'separator':\n this.previousEleValue = this.inputElement.value;\n this.setProperties({ separator: newProp.separator }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.setProperties({ placeholder: newProp.placeholder }, true);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n this.inputElement.setAttribute('aria-readonly', '' + this.readonly);\n break;\n case 'cssClass':\n if (this.popupWrapper) {\n this.popupWrapper.className += ' ' + newProp.cssClass;\n }\n this.inputWrapper.container.className += ' ' + newProp.cssClass;\n this.setProperties({ cssClass: newProp.cssClass }, true);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n break;\n case 'allowEdit':\n this.setRangeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.setLocale();\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'startDate':\n if (typeof newProp.startDate === 'string') {\n newProp.startDate = this.globalize.parseDate(newProp.startDate, format);\n }\n if (+this.initStartDate !== +newProp.startDate) {\n this.startValue = this.checkDateValue(new Date('' + newProp.startDate));\n this.setDate();\n this.setValue();\n }\n break;\n case 'endDate':\n if (typeof newProp.endDate === 'string') {\n newProp.endDate = this.globalize.parseDate(newProp.endDate, format);\n }\n if (+this.initEndDate !== +newProp.endDate) {\n this.endValue = this.checkDateValue(new Date('' + newProp.endDate));\n this.setDate();\n this.setValue();\n }\n break;\n case 'value':\n if ((!isNullOrUndefined(newProp.value) && newProp.value.length > 0)\n || !isNullOrUndefined(newProp.value) && newProp.value.start) {\n this.valueType = newProp.value;\n if (newProp.value[0] === null || (newProp.value.start === null)) {\n if (newProp.value.length === 1 || (newProp.value.start)) {\n this.clearModelvalue(newProp, oldProp);\n }\n else if (newProp.value[1] === null ||\n (newProp.value.start === null)) {\n this.clearModelvalue(newProp, oldProp);\n }\n }\n else if ((+this.initStartDate !== +newProp.value[0]\n || +this.initEndDate !== +newProp.value[1]) ||\n (+this.initStartDate !== +(newProp.value.start\n || +this.initEndDate !== +newProp.value.start))) {\n if (newProp.value.length === 1) {\n this.modelValue = newProp.value;\n }\n else if (newProp.value.start) {\n this.modelValue = newProp.value;\n }\n this.updateValue();\n this.setDate();\n }\n }\n else {\n if (isNullOrUndefined(this.value)\n || newProp.value.start == null) {\n this.valueType = newProp.value;\n this.startValue = null;\n this.endValue = null;\n this.clearModelvalue(newProp, oldProp);\n }\n }\n break;\n case 'minDays':\n this.setProperties({ minDays: newProp.minDays }, true);\n this.refreshChange();\n break;\n case 'maxDays':\n this.setProperties({ maxDays: newProp.maxDays }, true);\n this.refreshChange();\n break;\n case 'min':\n this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true);\n this.previousEleValue = this.inputElement.value;\n this.enableInput();\n this.refreshChange();\n break;\n case 'max':\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.enableInput();\n this.refreshChange();\n break;\n case 'strictMode':\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.refreshChange();\n break;\n case 'presets':\n this.setProperties({ presets: newProp.presets }, true);\n this.processPresets();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateRangePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateRangePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"locale\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"renderDayCell\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"startDate\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"endDate\", void 0);\n __decorate([\n Collection([{}], Presets)\n ], DateRangePicker.prototype, \"presets\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], DateRangePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"depth\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property('-')\n ], DateRangePicker.prototype, \"separator\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"minDays\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"maxDays\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property('Never')\n ], DateRangePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"blur\", void 0);\n DateRangePicker = __decorate([\n NotifyPropertyChanges\n ], DateRangePicker);\n return DateRangePicker;\n}(CalendarBase));\nexport { DateRangePicker };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n///\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\nimport { cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar RTL = 'e-rtl';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = ListBaseClasses.li;\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.previousDateTime = null;\n return _this;\n }\n DateTimePicker.prototype.focusHandler = function () {\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateTimePicker.prototype.focusIn = function () {\n _super.prototype.focusIn.call(this);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateTimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateTimePicker.prototype.blurHandler = function (e) {\n // IE popup closing issue when click over the scrollbar\n if (this.isTimePopupOpen() && this.isPreventBlur) {\n this.inputElement.focus();\n return;\n }\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n var blurArguments = {\n model: this\n };\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n this.trigger('blur', blurArguments);\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n this.inputElement.removeAttribute('aria-placeholder');\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.isPreventBlur = false;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n this.checkAttributes();\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n this.bindInputEvents();\n this.setValue();\n this.previousDateTime = this.value && new Date(+this.value);\n };\n DateTimePicker.prototype.setValue = function () {\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n if (!isNullOrUndefined(value)) {\n var dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n return this.globalize.formatDate(value, dateOptions);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.isDateObject = function (value) {\n return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n };\n DateTimePicker.prototype.createInputElement = function () {\n removeClass([this.inputElement], DATEPICKERROOT);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n addClass([this.inputElement], ROOT);\n this.renderTimeIcon();\n };\n DateTimePicker.prototype.renderTimeIcon = function () {\n this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n };\n DateTimePicker.prototype.bindInputEvents = function () {\n EventHandler.add(this.timeIcon, 'mousedown', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.blurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.keyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n }\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.format)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n else {\n this.inputElement.focus();\n this.popupCreation('time', e);\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled) {\n return;\n }\n else {\n if (type === 'time' && !this.dateTimeWrapper) {\n if (this.isDatePopupOpen()) {\n this.hide(e);\n }\n this.popupCreation('time', e);\n }\n else if (!this.popupObj) {\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n _super.prototype.show.call(this);\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.toggle = function (e) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n this.show('time', null);\n }\n else if (this.isTimePopupOpen()) {\n this.hide(e);\n _super.prototype.show.call(this, null, e);\n this.popupCreation('date', null);\n }\n else {\n this.show(null, e);\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n this.globalize.parseDate(this.inputElement.value, { format: this.cldrDateTimeFormat(), type: 'datetime' }) :\n new Date() : this.value;\n this.valueWithMinutes = value;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var min = this.startTime(value);\n var max = this.endTime(value);\n var listDetails = TimePickerBase.createListItems(this.createElement, min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type, e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (type === 'date') {\n if (!this.readonly && this.popupWrapper) {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_datepopup' });\n }\n }\n else {\n if (!this.readonly) {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.listCreation();\n append([this.listWrapper], this.dateTimeWrapper);\n }\n document.body.appendChild(this.dateTimeWrapper);\n this.addTimeSelection();\n this.renderPopup();\n this.setTimeScrollPosition();\n this.openPopup(e);\n this.popupObject.refreshPosition(this.inputElement);\n }\n }\n };\n DateTimePicker.prototype.openPopup = function (e) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObject,\n event: e || null\n };\n this.trigger('open', this.preventArgs);\n if (!this.preventArgs.cancel && !this.readonly) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n if (this.zIndex === 1000) {\n this.popupObject.show(new Animation(openAnimation), this.element);\n }\n else {\n this.popupObject.show(new Animation(openAnimation), null);\n }\n addClass([this.inputWrapper.container], [ICONANIMATION]);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n EventHandler.add(document, 'mousedown', this.documentClickHandler, this);\n }\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n event.preventDefault();\n var target = event.target;\n if (!(closest(target, '#' + (this.popupObject && this.popupObject.element.id))) && target !== this.inputElement\n && target !== this.timeIcon && target !== this.inputWrapper.container) {\n if (this.isTimePopupOpen()) {\n this.hide(event);\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n event.preventDefault();\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.TimeKeyActionHandle.bind(_this), keyConfigs: _this.timekeyConfigure, eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.setAttribute('aria-activedescendant', 'null');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = undefined;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }\n });\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n DateTimePicker.prototype.changeEvent = function (e) {\n if (+this.previousDateTime !== +this.value) {\n _super.prototype.changeEvent.call(this, e);\n this.inputElement.focus();\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n this.previousDateTime = this.value && new Date(+this.value);\n }\n };\n DateTimePicker.prototype.updateValue = function (e) {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs = {\n value: this.value, event: e || null,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupHeight = this.getPopupHeight();\n var popupElement;\n popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n var nextEle = popupElement.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : popupElement.offsetTop;\n var liHeight = popupElement.getBoundingClientRect().height;\n if ((height + popupElement.offsetTop) > popupHeight) {\n this.dateTimeWrapper.scrollTop = nextEle ? (height - (popupHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousElementValue = this.inputElement.value;\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n }\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide(event);\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n var value = li.getAttribute('data-value');\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue(event);\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement)) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n attributes(this.inputElement, { 'aria-activedescendant': 'null' });\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value;\n value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value;\n value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function (e) {\n if (this.popupObj || this.dateTimeWrapper) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObj || this.popupObject,\n event: e || null\n };\n if (isNullOrUndefined(this.popupObj)) {\n this.trigger('close', this.preventArgs);\n }\n if (!this.preventArgs.cancel) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup(e);\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n }\n }\n if (Browser.isDevice) {\n this.element.removeAttribute('readonly');\n }\n };\n DateTimePicker.prototype.closePopup = function (e) {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ;\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function () {\n var attributes = ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, true);\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.getTimeActiveElement = function () {\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.createDateObj = function (val) {\n return val instanceof Date ? val : null;\n };\n DateTimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = this.valueWithMinutes;\n var status_1 = !isNullOrUndefined(value);\n if (this.checkDateValue(dateValue)) {\n var date = status_1 ? value.getDate() : DAY;\n var month = status_1 ? value.getMonth() : MONTH;\n var year = status_1 ? value.getFullYear() : YEAR;\n var hour = status_1 ? value.getHours() : HOUR;\n var minute = status_1 ? value.getMinutes() : MINUTE;\n var second = status_1 ? value.getSeconds() : SECOND;\n var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n return new Date(year, month, date, hour, minute, second, millisecond);\n }\n }\n return null;\n };\n DateTimePicker.prototype.findNextTimeElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var dateTimeVal = null;\n var listCount = this.liCollections.length;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n this.activeIndex = 0;\n }\n else if (event.action === 'end') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n this.activeIndex = this.timeCollections.length - 1;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < listCount; i++) {\n if (+value < this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = listCount - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n }\n };\n DateTimePicker.prototype.setTimeValue = function (date, value) {\n var time;\n var val = this.validateMinMaxRange(value);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = new Date(+this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = new Date(+this.valueWithMinutes);\n }\n var dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.format) ? this.format : this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd'\n });\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ? this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.TimeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.previousDateTime = this.value;\n }\n }\n else {\n this.updateValue(event);\n }\n this.hide(event);\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n break;\n case 'escape':\n this.hide(event);\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle(event);\n break;\n }\n };\n DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n var options = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date('' + newProp.value)) }, true);\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n newProp.value = this.validateValue(newProp.value);\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger(null);\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.dateTimeWrapper) {\n this.dateTimeWrapper.className += ' ' + newProp.cssClass;\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.updateInput.call(this);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.setValue();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.inputElement.setAttribute('aria-placeholder', newProp.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n break;\n case 'strictMode':\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n this.hide(null);\n }\n };\n /**\n * To get component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Theme } from '../model/theme';\n/**\n * Defines the appearance of the connectors\n */\nvar Connector = /** @class */ (function (_super) {\n __extends(Connector, _super);\n function Connector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Line')\n ], Connector.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Connector.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"length\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"dashArray\", void 0);\n return Connector;\n}(ChildProperty));\nexport { Connector };\n/**\n * Configures the fonts in charts.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n __decorate([\n Property('Center')\n ], Font.prototype, \"textAlignment\", void 0);\n __decorate([\n Property('Trim')\n ], Font.prototype, \"textOverflow\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the borders in the chart.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the chart area.\n */\nvar ChartArea = /** @class */ (function (_super) {\n __extends(ChartArea, _super);\n function ChartArea() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Border)\n ], ChartArea.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], ChartArea.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], ChartArea.prototype, \"opacity\", void 0);\n return ChartArea;\n}(ChildProperty));\nexport { ChartArea };\n/**\n * Configures the chart margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the animation behavior for chart series.\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Animation.prototype, \"enable\", void 0);\n __decorate([\n Property(1000)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Selection Option for series and point indexes.\n */\nvar Indexes = /** @class */ (function (_super) {\n __extends(Indexes, _super);\n function Indexes() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Indexes.prototype, \"series\", void 0);\n __decorate([\n Property(0)\n ], Indexes.prototype, \"point\", void 0);\n return Indexes;\n}(ChildProperty));\nexport { Indexes };\n/**\n * Column series rounded corner options\n */\nvar CornerRadius = /** @class */ (function (_super) {\n __extends(CornerRadius, _super);\n function CornerRadius() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"topLeft\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"topRight\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"bottomLeft\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"bottomRight\", void 0);\n return CornerRadius;\n}(ChildProperty));\nexport { CornerRadius };\n/**\n * @private\n */\nvar Index = /** @class */ (function () {\n function Index(seriesIndex, pointIndex) {\n this.series = seriesIndex;\n this.point = pointIndex;\n }\n return Index;\n}());\nexport { Index };\n/**\n * Configures the Empty Points of series\n */\nvar EmptyPointSettings = /** @class */ (function (_super) {\n __extends(EmptyPointSettings, _super);\n function EmptyPointSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], EmptyPointSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], EmptyPointSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Gap')\n ], EmptyPointSettings.prototype, \"mode\", void 0);\n return EmptyPointSettings;\n}(ChildProperty));\nexport { EmptyPointSettings };\n/**\n * Configures the ToolTips in the chart.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"shared\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], TooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex(Theme.tooltipLabelFont, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","/**\n * Numeric Range.\n * @private\n */\nvar DoubleRange = /** @class */ (function () {\n function DoubleRange(start, end) {\n /*\n if (!isNaN(start) && !isNaN(end)) {\n this.mIsEmpty = true;\n } else {\n this.mIsEmpty = false;\n }*/\n if (start < end) {\n this.mStart = start;\n this.mEnd = end;\n }\n else {\n this.mStart = end;\n this.mEnd = start;\n }\n }\n Object.defineProperty(DoubleRange.prototype, \"start\", {\n //private mIsEmpty: boolean;\n /** @private */\n get: function () {\n return this.mStart;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"end\", {\n /** @private */\n get: function () {\n return this.mEnd;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"delta\", {\n /*\n get isEmpty(): boolean {\n return this.mIsEmpty;\n }*/\n /** @private */\n get: function () {\n return (this.mEnd - this.mStart);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"median\", {\n /** @private */\n get: function () {\n return this.mStart + (this.mEnd - this.mStart) / 2;\n },\n enumerable: true,\n configurable: true\n });\n return DoubleRange;\n}());\nexport { DoubleRange };\n","import { getMinPointsDelta, getActualDesiredIntervalsCount, setRange, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, logBase } from '../../common/utils/helper';\nimport { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\n/**\n * Numeric module is used to render numeric axis.\n */\nvar Double = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function Double(chart) {\n this.chart = chart;\n }\n /**\n * Numeric Nice Interval for the axis.\n * @private\n */\n Double.prototype.calculateNumericNiceInterval = function (axis, delta, size) {\n var actualDesiredIntervalsCount = getActualDesiredIntervalsCount(size, axis);\n var niceInterval = delta / actualDesiredIntervalsCount;\n if (!isNullOrUndefined(axis.desiredIntervals)) {\n return niceInterval;\n }\n var minInterval = Math.pow(10, Math.floor(logBase(niceInterval, 10)));\n for (var _i = 0, _a = axis.intervalDivs; _i < _a.length; _i++) {\n var interval = _a[_i];\n var currentInterval = minInterval * interval;\n if (actualDesiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n Double.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n axis.actualRange.interval = axis.interval || this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n };\n /**\n * Range for the axis.\n * @private\n */\n Double.prototype.initializeDoubleRange = function (axis) {\n //Axis Min\n if (axis.minimum !== null) {\n this.min = axis.minimum;\n }\n else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n this.min = 0;\n }\n // Axis Max\n if (axis.maximum !== null) {\n this.max = axis.maximum;\n }\n else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n this.max = 5;\n }\n if (this.min === this.max) {\n this.max = axis.valueType.indexOf('Category') > -1 ? this.max : this.min + 1;\n }\n axis.doubleRange = new DoubleRange(this.min, this.max);\n axis.actualRange = {};\n };\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n * @private\n */\n Double.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Calculate Range for the axis.\n * @private\n */\n Double.prototype.calculateRange = function (axis, size) {\n /*! Generate axis range */\n var series;\n this.min = null;\n this.max = null;\n if (!setRange(axis)) {\n for (var _i = 0, _a = axis.series; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (!series_1.visible) {\n continue;\n }\n this.paddingInterval = 0;\n if (((series_1.type.indexOf('Column') > -1 || series_1.type.indexOf('Histogram') > -1) && axis.orientation === 'Horizontal')\n || (series_1.type.indexOf('Bar') > -1 && axis.orientation === 'Vertical')) {\n if ((series_1.xAxis.valueType === 'Double' || series_1.xAxis.valueType === 'DateTime')\n && series_1.xAxis.rangePadding === 'Auto') {\n this.paddingInterval = getMinPointsDelta(series_1.xAxis, axis.series) / 2;\n }\n }\n //For xRange\n if (axis.orientation === 'Horizontal') {\n if (this.chart.requireInvertedAxis) {\n this.findMinMax(series_1.yMin, series_1.yMax);\n }\n else {\n this.findMinMax(series_1.xMin - this.paddingInterval, series_1.xMax + this.paddingInterval);\n }\n }\n // For yRange\n if (axis.orientation === 'Vertical') {\n if (this.chart.requireInvertedAxis) {\n this.findMinMax(series_1.xMin - this.paddingInterval, series_1.xMax + this.paddingInterval);\n }\n else {\n this.findMinMax(series_1.yMin, series_1.yMax);\n }\n }\n }\n }\n };\n Double.prototype.findMinMax = function (min, max) {\n if (this.min === null || this.min > min) {\n this.min = min;\n }\n if (this.max === null || this.max < max) {\n this.max = max;\n }\n };\n /**\n * Apply padding for the range.\n * @private\n */\n Double.prototype.applyRangePadding = function (axis, size) {\n var range;\n var start = axis.actualRange.min;\n var end = axis.actualRange.max;\n if (!setRange(axis)) {\n var interval = axis.actualRange.interval;\n var padding = axis.getRangePadding(this.chart);\n if (padding === 'Additional' || padding === 'Round') {\n this.findAdditional(axis, start, end, interval);\n }\n else if (padding === 'Normal') {\n this.findNormal(axis, start, end, interval, size);\n }\n else {\n this.updateActualRange(axis, start, end, interval);\n }\n }\n axis.actualRange.delta = axis.actualRange.max - axis.actualRange.min;\n this.calculateVisibleRange(size, axis);\n };\n Double.prototype.updateActualRange = function (axis, minimum, maximum, interval) {\n axis.actualRange.min = axis.minimum != null ? axis.minimum : minimum;\n axis.actualRange.max = axis.maximum != null ? axis.maximum : maximum;\n axis.actualRange.interval = axis.interval != null ? axis.interval : interval;\n };\n Double.prototype.findAdditional = function (axis, start, end, interval) {\n var minimum;\n var maximum;\n minimum = Math.floor(start / interval) * interval;\n maximum = Math.ceil(end / interval) * interval;\n if (axis.rangePadding === 'Additional') {\n minimum -= interval;\n maximum += interval;\n }\n this.updateActualRange(axis, minimum, maximum, interval);\n };\n Double.prototype.findNormal = function (axis, start, end, interval, size) {\n var remaining;\n var minimum;\n var maximum;\n var startValue = start;\n if (start < 0) {\n startValue = 0;\n minimum = start + (start / 20);\n remaining = interval + (minimum % interval);\n if ((0.365 * interval) >= remaining) {\n minimum -= interval;\n }\n if (minimum % interval < 0) {\n minimum = (minimum - interval) - (minimum % interval);\n }\n }\n else {\n minimum = start < ((5.0 / 6.0) * end) ? 0 : (start - (end - start) / 2);\n if (minimum % interval > 0) {\n minimum -= (minimum % interval);\n }\n }\n maximum = (end > 0) ? (end + (end - startValue) / 20) : (end - (end - startValue) / 20);\n remaining = interval - (maximum % interval);\n if ((0.365 * interval) >= remaining) {\n maximum += interval;\n }\n if (maximum % interval > 0) {\n maximum = (maximum + interval) - (maximum % interval);\n }\n axis.doubleRange = new DoubleRange(minimum, maximum);\n if (minimum === 0) {\n interval = this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n maximum = Math.ceil(maximum / interval) * interval;\n }\n this.updateActualRange(axis, minimum, maximum, interval);\n };\n /**\n * Calculate visible range for axis.\n * @private\n */\n Double.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n max: axis.actualRange.max, min: axis.actualRange.min,\n delta: axis.actualRange.delta, interval: axis.actualRange.interval\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming && axis.valueType !== 'Category') ?\n this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size)\n : axis.visibleRange.interval;\n }\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n Double.prototype.calculateVisibleLabels = function (axis, chart) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n var labelStyle;\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0 || this.paddingInterval) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var format = this.getFormat(axis);\n var isCustom = format.match('{value}') !== null;\n axis.format = chart.intl.getNumberFormat({\n format: isCustom ? '' : format,\n useGrouping: chart.useGroupingSeparator\n });\n axis.startLabel = axis.format(axis.visibleRange.min);\n axis.endLabel = axis.format(axis.visibleRange.max);\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n if (withIn(tempInterval, axis.visibleRange)) {\n triggerLabelRender(chart, tempInterval, this.formatValue(axis, isCustom, format, tempInterval), labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * Format of the axis label.\n * @private\n */\n Double.prototype.getFormat = function (axis) {\n if (axis.labelFormat) {\n return axis.labelFormat;\n }\n return axis.isStack100 ? '{value}%' : '';\n };\n /**\n * Formatted the axis label.\n * @private\n */\n Double.prototype.formatValue = function (axis, isCustom, format, tempInterval) {\n return isCustom ? format.replace('{value}', axis.format(tempInterval))\n : axis.format(tempInterval);\n };\n return Double;\n}());\nexport { Double };\n","/**\n * Specifies the chart constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var legendRender = 'legendRender';\n/** @private */\nexport var textRender = 'textRender';\n/** @private */\nexport var pointRender = 'pointRender';\n/** @private */\nexport var seriesRender = 'seriesRender';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var axisRangeCalculated = 'axisRangeCalculated';\n/** @private */\nexport var axisMultiLabelRender = 'axisMultiLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var chartMouseMove = 'chartMouseMove';\n/** @private */\nexport var chartMouseClick = 'chartMouseClick';\n/** @private */\nexport var pointClick = 'pointClick';\n/** @private */\nexport var pointMove = 'pointMove';\n/** @private */\nexport var chartMouseLeave = 'chartMouseLeave';\n/** @private */\nexport var chartMouseDown = 'chartMouseDown';\n/** @private */\nexport var chartMouseUp = 'chartMouseUp';\n/** @private */\nexport var zoomComplete = 'zoomComplete';\n/** @private */\nexport var dragComplete = 'dragComplete';\n/** @private */\nexport var resized = 'resized';\n/** @private */\nexport var beforePrint = 'beforePrint';\n/** @private */\nexport var annotationRender = 'annotationRender';\n/** @private */\nexport var scrollStart = 'scrollStart';\n/** @private */\nexport var scrollEnd = 'scrollEnd';\n/** @private */\nexport var scrollChanged = 'scrollChanged';\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Theme } from '../../common/model/theme';\nimport { Font, Border } from '../../common/model/base';\n/**\n * Configures the Annotation for chart.\n */\nvar ChartAnnotationSettings = /** @class */ (function (_super) {\n __extends(ChartAnnotationSettings, _super);\n function ChartAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('Center')\n ], ChartAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Pixel')\n ], ChartAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], ChartAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], ChartAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"yAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"description\", void 0);\n return ChartAnnotationSettings;\n}(ChildProperty));\nexport { ChartAnnotationSettings };\n/**\n * label border properties.\n */\nvar LabelBorder = /** @class */ (function (_super) {\n __extends(LabelBorder, _super);\n function LabelBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], LabelBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], LabelBorder.prototype, \"width\", void 0);\n __decorate([\n Property('Rectangle')\n ], LabelBorder.prototype, \"type\", void 0);\n return LabelBorder;\n}(ChildProperty));\nexport { LabelBorder };\n/**\n * categories for multi level labels\n */\nvar MultiLevelCategories = /** @class */ (function (_super) {\n __extends(MultiLevelCategories, _super);\n function MultiLevelCategories() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"end\", void 0);\n __decorate([\n Property('')\n ], MultiLevelCategories.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"maximumTextWidth\", void 0);\n return MultiLevelCategories;\n}(ChildProperty));\nexport { MultiLevelCategories };\n/**\n * Strip line properties\n */\nvar StripLineSettings = /** @class */ (function (_super) {\n __extends(StripLineSettings, _super);\n function StripLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], StripLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"startFromAxis\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"size\", void 0);\n __decorate([\n Property('#808080')\n ], StripLineSettings.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property('Auto')\n ], StripLineSettings.prototype, \"sizeType\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"isRepeat\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"repeatEvery\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"repeatUntil\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"isSegmented\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"segmentStart\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"segmentEnd\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"segmentAxisName\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], StripLineSettings.prototype, \"border\", void 0);\n __decorate([\n Property('')\n ], StripLineSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"rotation\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex(Theme.stripLineLabelFont, Font)\n ], StripLineSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Behind')\n ], StripLineSettings.prototype, \"zIndex\", void 0);\n __decorate([\n Property(1)\n ], StripLineSettings.prototype, \"opacity\", void 0);\n return StripLineSettings;\n}(ChildProperty));\nexport { StripLineSettings };\n/**\n * MultiLevelLabels properties\n */\nvar MultiLevelLabels = /** @class */ (function (_super) {\n __extends(MultiLevelLabels, _super);\n function MultiLevelLabels() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Center')\n ], MultiLevelLabels.prototype, \"alignment\", void 0);\n __decorate([\n Property('Wrap')\n ], MultiLevelLabels.prototype, \"overflow\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], MultiLevelLabels.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({ color: null, width: 1, type: 'Rectangle' }, LabelBorder)\n ], MultiLevelLabels.prototype, \"border\", void 0);\n __decorate([\n Collection([], MultiLevelCategories)\n ], MultiLevelLabels.prototype, \"categories\", void 0);\n return MultiLevelLabels;\n}(ChildProperty));\nexport { MultiLevelLabels };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection, extend } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../../common/model/base';\nimport { Size, Rect, measureText, rotateTextSize, firstToLowerCase, valueToCoefficient, inside } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { Double } from '../axis/double-axis';\nimport { Theme } from '../../common/model/theme';\nimport { axisRangeCalculated } from '../../common/model/constants';\nimport { StripLineSettings, MultiLevelLabels, LabelBorder } from '../model/chart-base';\nimport { textWrap } from '../../common/utils/helper';\nvar axisPadding = 10;\n/**\n * Configures the `rows` of the chart.\n */\nvar Row = /** @class */ (function (_super) {\n __extends(Row, _super);\n function Row() {\n /**\n * The height of the row as a string accept input both as '100px' and '100%'.\n * If specified as '100%, row renders to the full height of its chart.\n * @default '100%'\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.axes = [];\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n return _this;\n }\n /**\n * Measure the row size\n * @return {void}\n * @private\n */\n Row.prototype.computeSize = function (axis, clipRect, scrollBarHeight) {\n var width = 0;\n var innerPadding = 5;\n if (axis.visible) {\n width += (axis.findTickSize(axis.crossInAxis) + scrollBarHeight +\n axis.findLabelSize(axis.crossInAxis, innerPadding) + axis.lineStyle.width / 2);\n }\n if (axis.opposedPosition) {\n this.farSizes.push(width);\n }\n else {\n this.nearSizes.push(width);\n }\n };\n __decorate([\n Property('100%')\n ], Row.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Border)\n ], Row.prototype, \"border\", void 0);\n return Row;\n}(ChildProperty));\nexport { Row };\n/**\n * Configures the `columns` of the chart.\n */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n /**\n * The width of the column as a string accepts input both as like '100px' or '100%'.\n * If specified as '100%, column renders to the full width of its chart.\n * @default '100%'\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.axes = [];\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n /** @private */\n _this.padding = 0;\n return _this;\n }\n /**\n * Measure the column size\n * @return {void}\n * @private\n */\n Column.prototype.computeSize = function (axis, clipRect, scrollBarHeight) {\n var height = 0;\n var innerPadding = 5;\n if (axis.visible) {\n height += (axis.findTickSize(axis.crossInAxis) + scrollBarHeight +\n axis.findLabelSize(axis.crossInAxis, innerPadding) + axis.lineStyle.width / 2);\n }\n if (axis.opposedPosition) {\n this.farSizes.push(height);\n }\n else {\n this.nearSizes.push(height);\n }\n };\n __decorate([\n Property('100%')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Complex({}, Border)\n ], Column.prototype, \"border\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n/**\n * Configures the major grid lines in the `axis`.\n */\nvar MajorGridLines = /** @class */ (function (_super) {\n __extends(MajorGridLines, _super);\n function MajorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], MajorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], MajorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], MajorGridLines.prototype, \"color\", void 0);\n return MajorGridLines;\n}(ChildProperty));\nexport { MajorGridLines };\n/**\n * Configures the minor grid lines in the `axis`.\n */\nvar MinorGridLines = /** @class */ (function (_super) {\n __extends(MinorGridLines, _super);\n function MinorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.7)\n ], MinorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], MinorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], MinorGridLines.prototype, \"color\", void 0);\n return MinorGridLines;\n}(ChildProperty));\nexport { MinorGridLines };\n/**\n * Configures the axis line of a chart.\n */\nvar AxisLine = /** @class */ (function (_super) {\n __extends(AxisLine, _super);\n function AxisLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], AxisLine.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], AxisLine.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], AxisLine.prototype, \"color\", void 0);\n return AxisLine;\n}(ChildProperty));\nexport { AxisLine };\n/**\n * Configures the major tick lines.\n */\nvar MajorTickLines = /** @class */ (function (_super) {\n __extends(MajorTickLines, _super);\n function MajorTickLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], MajorTickLines.prototype, \"width\", void 0);\n __decorate([\n Property(5)\n ], MajorTickLines.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], MajorTickLines.prototype, \"color\", void 0);\n return MajorTickLines;\n}(ChildProperty));\nexport { MajorTickLines };\n/**\n * Configures the minor tick lines.\n */\nvar MinorTickLines = /** @class */ (function (_super) {\n __extends(MinorTickLines, _super);\n function MinorTickLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.7)\n ], MinorTickLines.prototype, \"width\", void 0);\n __decorate([\n Property(5)\n ], MinorTickLines.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], MinorTickLines.prototype, \"color\", void 0);\n return MinorTickLines;\n}(ChildProperty));\nexport { MinorTickLines };\n/**\n * Configures the crosshair ToolTip.\n */\nvar CrosshairTooltip = /** @class */ (function (_super) {\n __extends(CrosshairTooltip, _super);\n function CrosshairTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], CrosshairTooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], CrosshairTooltip.prototype, \"fill\", void 0);\n __decorate([\n Complex(Theme.crosshairLabelFont, Font)\n ], CrosshairTooltip.prototype, \"textStyle\", void 0);\n return CrosshairTooltip;\n}(ChildProperty));\nexport { CrosshairTooltip };\n/**\n * Configures the axes in the chart.\n */\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n // tslint:disable-next-line:no-any\n function Axis(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.visibleLabels = [];\n /** @private */\n _this.series = [];\n /** @private */\n _this.rect = new Rect(undefined, undefined, 0, 0);\n /** @private */\n _this.axisBottomLine = null;\n /** @private */\n _this.intervalDivs = [10, 5, 2, 1];\n /** @private */\n _this.angle = _this.labelRotation;\n /** @private */\n _this.isStack100 = false;\n /** @private */\n _this.crossAt = null;\n /** @private */\n _this.updatedRect = null;\n /** @private */\n _this.multiLevelLabelHeight = 0;\n /** @private */\n _this.isChart = true;\n return _this;\n }\n /**\n * The function used to find tick size.\n * @return {number}\n * @private\n */\n Axis.prototype.findTickSize = function (crossAxis) {\n if (this.tickPosition === 'Inside') {\n return 0;\n }\n if (crossAxis && (!crossAxis.visibleRange || this.isInside(crossAxis.visibleRange))) {\n return 0;\n }\n return this.majorTickLines.height;\n };\n /**\n * The function used to find axis position.\n * @return {number}\n * @private\n */\n Axis.prototype.isInside = function (range) {\n return (inside(this.crossAt, range) ||\n (!this.opposedPosition && this.crossAt >= range.max) || (this.opposedPosition && this.crossAt <= range.min));\n };\n /**\n * The function used to find label Size.\n * @return {number}\n * @private\n */\n Axis.prototype.findLabelSize = function (crossAxis, innerPadding) {\n var titleSize = 0;\n if (this.title) {\n titleSize = measureText(this.title, this.titleStyle).height + innerPadding;\n }\n if (this.labelPosition === 'Inside') {\n return titleSize + innerPadding;\n }\n var diff;\n var value;\n var labelSize = titleSize + innerPadding + axisPadding +\n ((this.orientation === 'Vertical') ? this.maxLabelSize.width : this.maxLabelSize.height) + this.multiLevelLabelHeight;\n if (crossAxis && this.placeNextToAxisLine) {\n var range = crossAxis.visibleRange;\n var size = (crossAxis.orientation === 'Horizontal') ? crossAxis.rect.width : crossAxis.rect.height;\n if (!range || !size) {\n return 0;\n }\n else if (this.isInside(range)) {\n value = this.findDifference(crossAxis);\n diff = (value) * (size / range.delta);\n diff = (value) * ((size - (diff < labelSize ? (labelSize - diff) : 0)) / range.delta);\n labelSize = (diff < labelSize) ? (labelSize - diff) : 0;\n }\n }\n return labelSize;\n };\n /**\n * The function used to find axis position.\n * @return {number}\n * @private\n */\n Axis.prototype.updateCrossValue = function (chart) {\n var value = this.crossAt;\n if (value === null || !this.isInside(this.crossInAxis.visibleRange)) {\n this.updatedRect = this.rect;\n return null;\n }\n var range = this.crossInAxis.visibleRange;\n if (!this.opposedPosition) {\n if (this.crossAt > range.max) {\n value = range.max;\n }\n }\n else {\n if (this.crossAt < range.min) {\n value = range.min;\n }\n }\n this.updatedRect = extend({}, this.rect, null, true);\n if (this.orientation === 'Horizontal') {\n value = this.crossInAxis.rect.height - (valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.height);\n this.updatedRect.y = this.crossInAxis.rect.y + value;\n }\n else {\n value = valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.width;\n this.updatedRect.x = this.crossInAxis.rect.x + value;\n }\n };\n Axis.prototype.findDifference = function (crossAxis) {\n var value = 0;\n if (this.opposedPosition) {\n value = crossAxis.isInversed ? crossAxis.visibleRange.min : crossAxis.visibleRange.max;\n }\n else {\n value = crossAxis.isInversed ? crossAxis.visibleRange.max : crossAxis.visibleRange.min;\n }\n return Math.abs(this.crossAt - value);\n };\n /**\n * Calculate visible range for axis.\n * @return {void}\n * @private\n */\n Axis.prototype.calculateVisibleRange = function (size) {\n if (this.zoomFactor < 1 || this.zoomPosition > 0) {\n var baseRange = this.actualRange;\n var start = void 0;\n var end = void 0;\n if (!this.isInversed) {\n start = this.actualRange.min + this.zoomPosition * this.actualRange.delta;\n end = start + this.zoomFactor * this.actualRange.delta;\n }\n else {\n start = this.actualRange.max - (this.zoomPosition * this.actualRange.delta);\n end = start - (this.zoomFactor * this.actualRange.delta);\n }\n if (start < baseRange.min) {\n end = end + (baseRange.min - start);\n start = baseRange.min;\n }\n if (end > baseRange.max) {\n start = start - (end - baseRange.max);\n end = baseRange.max;\n }\n this.doubleRange = new DoubleRange(start, end);\n this.visibleRange.min = this.doubleRange.start;\n this.visibleRange.max = this.doubleRange.end;\n this.visibleRange.delta = this.doubleRange.delta;\n }\n };\n /**\n * Triggers the event.\n * @return {void}\n * @private\n */\n Axis.prototype.triggerRangeRender = function (chart, minimum, maximum, interval) {\n var argsData;\n argsData = {\n cancel: false, name: axisRangeCalculated, axis: this,\n minimum: minimum, maximum: maximum, interval: interval\n };\n chart.trigger(axisRangeCalculated, argsData);\n if (!argsData.cancel) {\n this.visibleRange.min = argsData.minimum;\n this.visibleRange.max = argsData.maximum;\n this.visibleRange.interval = argsData.interval;\n this.visibleRange.delta = argsData.maximum - argsData.minimum;\n }\n };\n /**\n * Calculate padding for the axis.\n * @return {string}\n * @private\n */\n Axis.prototype.getRangePadding = function (chart) {\n var padding = this.rangePadding;\n if (padding !== 'Auto') {\n return padding;\n }\n switch (this.orientation) {\n case 'Horizontal':\n if (chart.requireInvertedAxis) {\n padding = (this.isStack100 ? 'Round' : 'Normal');\n }\n else {\n padding = 'None';\n }\n break;\n case 'Vertical':\n if (!chart.requireInvertedAxis) {\n padding = (this.isStack100 ? 'Round' : 'Normal');\n }\n else {\n padding = 'None';\n }\n break;\n }\n return padding;\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n * @private\n */\n Axis.prototype.getMaxLabelWidth = function (chart) {\n var prevSize = new Size(0, 0);\n var rotatedLabel;\n var pointX;\n var previousEnd = 0;\n var isIntersect = false;\n this.angle = this.labelRotation;\n this.maxLabelSize = new Size(0, 0);\n var action = this.labelIntersectAction;\n var label;\n for (var i = 0; i < this.visibleLabels.length; i++) {\n label = this.visibleLabels[i];\n label.size = measureText(label.text, this.labelStyle);\n if (label.size.width > this.maxLabelSize.width) {\n this.maxLabelSize.width = label.size.width;\n this.rotatedLabel = label.text;\n }\n if (label.size.height > this.maxLabelSize.height) {\n this.maxLabelSize.height = label.size.height;\n }\n if (action === 'None' || action === 'Hide' || action === 'Trim') {\n continue;\n }\n if ((action !== 'None' || this.angle % 360 === 0) && this.orientation === 'Horizontal' &&\n this.rect.width > 0 && !isIntersect) {\n pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n pointX -= label.size.width / 2;\n if (this.edgeLabelPlacement === 'Shift') {\n if (i === 0 && pointX < this.rect.x) {\n pointX = this.rect.x;\n }\n if (i === this.visibleLabels.length - 1 && ((pointX + label.size.width) > (this.rect.x + this.rect.width))) {\n pointX = this.rect.x + this.rect.width - label.size.width;\n }\n }\n switch (action) {\n case 'MultipleRows':\n if (i > 0) {\n this.findMultiRows(i, pointX, label);\n }\n break;\n case 'Rotate45':\n case 'Rotate90':\n if (i > 0 && (!this.isInversed ? pointX <= previousEnd : pointX + label.size.width >= previousEnd)) {\n this.angle = (action === 'Rotate45') ? 45 : 90;\n isIntersect = true;\n }\n break;\n default:\n label.text = textWrap(label.text, this.rect.width / this.visibleLabels.length, this.labelStyle);\n var height = (label.size.height * label.text.length);\n if (height > this.maxLabelSize.height) {\n this.maxLabelSize.height = height;\n }\n break;\n }\n previousEnd = this.isInversed ? pointX : pointX + label.size.width;\n }\n }\n if (this.angle !== 0 && this.orientation === 'Horizontal') {\n this.maxLabelSize = rotateTextSize(this.labelStyle, this.rotatedLabel, this.angle, chart);\n }\n if (chart.multiLevelLabelModule && this.multiLevelLabels.length > 0) {\n chart.multiLevelLabelModule.getMultilevelLabelsHeight(this);\n }\n };\n /**\n * Finds the multiple rows for axis.\n * @return {void}\n */\n Axis.prototype.findMultiRows = function (length, currentX, currentLabel) {\n var label;\n var pointX;\n var store = [];\n var isMultiRows;\n for (var i = length - 1; i >= 0; i--) {\n label = this.visibleLabels[i];\n pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n isMultiRows = !this.isInversed ? currentX < (pointX + label.size.width / 2) :\n currentX + currentLabel.size.width > (pointX - label.size.width / 2);\n if (isMultiRows) {\n store.push(label.index);\n currentLabel.index = (currentLabel.index > label.index) ? currentLabel.index : label.index + 1;\n }\n else {\n currentLabel.index = store.indexOf(label.index) > -1 ? currentLabel.index : label.index;\n }\n }\n var height = (currentLabel.size.height * currentLabel.index) + (5 * (currentLabel.index - 1));\n if (height > this.maxLabelSize.height) {\n this.maxLabelSize.height = height;\n }\n };\n /**\n * Finds the default module for axis.\n * @return {void}\n * @private\n */\n Axis.prototype.getModule = function (chart) {\n if (this.valueType === 'Double') {\n this.baseModule = new Double(chart);\n }\n else {\n this.baseModule = chart[firstToLowerCase(this.valueType) + 'Module'];\n }\n };\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Axis.prototype, \"labelStyle\", void 0);\n __decorate([\n Complex({}, CrosshairTooltip)\n ], Axis.prototype, \"crosshairTooltip\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"title\", void 0);\n __decorate([\n Complex(Theme.axisTitleFont, Font)\n ], Axis.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"skeleton\", void 0);\n __decorate([\n Property('DateTime')\n ], Axis.prototype, \"skeletonType\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"plotOffset\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isIndexed\", void 0);\n __decorate([\n Property(10)\n ], Axis.prototype, \"logBase\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"columnIndex\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"rowIndex\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"span\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"desiredIntervals\", void 0);\n __decorate([\n Property(3)\n ], Axis.prototype, \"maximumLabels\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"zoomPosition\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"enableAutoIntervalOnZooming\", void 0);\n __decorate([\n Property('Auto')\n ], Axis.prototype, \"rangePadding\", void 0);\n __decorate([\n Property('Double')\n ], Axis.prototype, \"valueType\", void 0);\n __decorate([\n Property('None')\n ], Axis.prototype, \"edgeLabelPlacement\", void 0);\n __decorate([\n Property('Auto')\n ], Axis.prototype, \"intervalType\", void 0);\n __decorate([\n Property('BetweenTicks')\n ], Axis.prototype, \"labelPlacement\", void 0);\n __decorate([\n Property('Outside')\n ], Axis.prototype, \"tickPosition\", void 0);\n __decorate([\n Property('Outside')\n ], Axis.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"name\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"visible\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"minorTicksPerInterval\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"labelRotation\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"crossesAt\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"placeNextToAxisLine\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"crossesInAxis\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"interval\", void 0);\n __decorate([\n Property(34)\n ], Axis.prototype, \"maximumLabelWidth\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"enableTrim\", void 0);\n __decorate([\n Complex({}, MajorTickLines)\n ], Axis.prototype, \"majorTickLines\", void 0);\n __decorate([\n Complex({}, MinorTickLines)\n ], Axis.prototype, \"minorTickLines\", void 0);\n __decorate([\n Complex({}, MajorGridLines)\n ], Axis.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, MinorGridLines)\n ], Axis.prototype, \"minorGridLines\", void 0);\n __decorate([\n Complex({}, AxisLine)\n ], Axis.prototype, \"lineStyle\", void 0);\n __decorate([\n Property('Trim')\n ], Axis.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property(100)\n ], Axis.prototype, \"coefficient\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"startAngle\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"description\", void 0);\n __decorate([\n Property(2)\n ], Axis.prototype, \"tabIndex\", void 0);\n __decorate([\n Collection([], StripLineSettings)\n ], Axis.prototype, \"stripLines\", void 0);\n __decorate([\n Collection([], MultiLevelLabels)\n ], Axis.prototype, \"multiLevelLabels\", void 0);\n __decorate([\n Complex({ color: null, width: 0, type: 'Rectangle' }, LabelBorder)\n ], Axis.prototype, \"border\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, labelStyle, originalText, size, index) {\n if (size === void 0) { size = new Size(0, 0); }\n if (index === void 0) { index = 1; }\n this.text = text;\n this.originalText = originalText;\n this.value = value;\n this.labelStyle = labelStyle;\n this.size = size;\n this.index = 1;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { subtractThickness, valueToCoefficient, sum, redrawElement } from '../../common/utils/helper';\nimport { subArray, TextOption, inside, measureText, appendChildElement } from '../../common/utils/helper';\nimport { Size, Rect, Thickness, PathOption, logBase, createZoomingLabels, getElement, rotateTextSize } from '../../common/utils/helper';\nimport { textElement, textTrim } from '../../common/utils/helper';\n/**\n * Specifies the Cartesian Axis Layout.\n */\nvar axisPadding = 10;\nvar CartesianAxisLayoutPanel = /** @class */ (function () {\n /** @private */\n function CartesianAxisLayoutPanel(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * Measure the axis size.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.crossAt(chart);\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n this.initialClipRect = rect;\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with initial Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n this.calculateAxisSize(this.initialClipRect);\n }\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with series Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n chart.refreshAxis();\n this.calculateAxisSize(this.seriesClipRect);\n }\n };\n CartesianAxisLayoutPanel.prototype.measureRowAxis = function (chart, rect) {\n var row;\n this.calculateRowSize(rect);\n for (var _i = 0, _a = chart.rows; _i < _a.length; _i++) {\n var item = _a[_i];\n row = item;\n row.nearSizes = [];\n row.farSizes = [];\n this.arrangeAxis(row);\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight), rect);\n if (this.leftSize < sum(row.nearSizes)) {\n this.leftSize = sum(row.nearSizes);\n }\n if (this.rightSize < sum(row.farSizes)) {\n this.rightSize = sum(row.farSizes);\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.measureColumnAxis = function (chart, rect) {\n var column;\n this.calculateColumnSize(rect);\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var item = _a[_i];\n column = item;\n column.farSizes = [];\n column.nearSizes = [];\n this.arrangeAxis(column);\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height), rect);\n if (this.bottomSize < sum(column.nearSizes)) {\n this.bottomSize = sum(column.nearSizes);\n }\n if (this.topSize < sum(column.farSizes)) {\n this.topSize = sum(column.farSizes);\n }\n }\n };\n /**\n * Measure the column and row in chart.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureDefinition = function (definition, chart, size, clipRect) {\n var axis;\n var axisType;\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis_1 = _a[_i];\n axis_1.scrollBarHeight = chart.scrollBarModule && chart.zoomSettings.enableScrollbar && chart.zoomModule.isZoomed\n && (axis_1.zoomFactor < 1 || axis_1.zoomPosition > 0) ? 16 : 0;\n axis_1.scrollBarHeight = chart.delayRedraw ? (axis_1.zoomingScrollBar && axis_1.zoomingScrollBar.svgObject &&\n axis_1.zoomingScrollBar.svgObject.childElementCount) ? 16 : 0 : axis_1.scrollBarHeight;\n axis_1.getModule(chart);\n axis_1.baseModule.calculateRangeAndInterval(size, axis_1);\n definition.computeSize(axis_1, clipRect, axis_1.scrollBarHeight);\n }\n if (definition.farSizes.length > 0) {\n definition.farSizes[definition.farSizes.length - 1] -= axisPadding;\n }\n if (definition.nearSizes.length > 0) {\n definition.nearSizes[definition.nearSizes.length - 1] -= axisPadding;\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.calculateAxisSize = function (rect) {\n var chart = this.chart;\n var row;\n var column;\n var definition;\n var axis;\n var nearCount = 0;\n var farCount = 0;\n var size = 0;\n var x;\n var y;\n this.calculateRowSize(rect);\n for (var i = 0, len = chart.rows.length; i < len; i++) {\n row = chart.rows[i];\n nearCount = 0;\n farCount = 0;\n for (var j = 0, len_1 = row.axes.length; j < len_1; j++) {\n axis = row.axes[j];\n if (axis.rect.height === 0) {\n axis.rect.height = row.computedHeight;\n size = 0;\n for (var k = i + 1, len_2 = i + axis.span; k < len_2; k++) {\n definition = chart.rows[k];\n size += definition.computedHeight;\n }\n axis.rect.y = (row.computedTop - size) + axis.plotOffset;\n axis.rect.height = (axis.rect.height + size) - (2 * axis.plotOffset);\n axis.rect.width = 0;\n }\n if (axis.opposedPosition) {\n x = rect.x + rect.width + sum(subArray(row.farSizes, farCount));\n axis.rect.x = axis.rect.x >= x ? axis.rect.x : x;\n farCount++;\n }\n else {\n x = rect.x - sum(subArray(row.nearSizes, nearCount));\n axis.rect.x = axis.rect.x <= x ? axis.rect.x : x;\n nearCount++;\n }\n }\n }\n this.calculateColumnSize(rect);\n for (var i = 0, len = chart.columns.length; i < len; i++) {\n column = chart.columns[i];\n nearCount = 0;\n farCount = 0;\n for (var j = 0, len_3 = column.axes.length; j < len_3; j++) {\n axis = column.axes[j];\n if (axis.rect.width === 0) {\n for (var k = i, len_4 = (i + axis.span); k < len_4; k++) {\n definition = chart.columns[k];\n axis.rect.width += definition.computedWidth;\n }\n axis.rect.x = column.computedLeft + axis.plotOffset;\n axis.rect.width -= (2 * axis.plotOffset);\n axis.rect.height = 0;\n }\n if (axis.opposedPosition) {\n y = rect.y - sum(subArray(column.farSizes, farCount));\n axis.rect.y = axis.rect.y <= y ? axis.rect.y : y;\n farCount++;\n }\n else {\n y = rect.y + rect.height + sum(subArray(column.nearSizes, nearCount));\n axis.rect.y = axis.rect.y >= y ? axis.rect.y : y;\n nearCount++;\n }\n }\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measure = function () {\n var chart = this.chart;\n var row;\n var column;\n var definition;\n var axis;\n var actualIndex;\n var span;\n var axisLength;\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis_2 = _a[_i];\n //definition.Axes = axis;\n if (axis_2.orientation === 'Vertical') {\n chart.verticalAxes.push(axis_2);\n actualIndex = this.getActualRow(axis_2);\n row = chart.rows[actualIndex];\n this.pushAxis(row, axis_2);\n span = ((actualIndex + axis_2.span) > chart.rows.length ? chart.rows.length : (actualIndex + axis_2.span));\n for (var j = actualIndex + 1; j < span; j++) {\n definition = chart.rows[j];\n definition.axes[row.axes.length - 1] = axis_2;\n chart.rows[j] = definition;\n }\n chart.rows[actualIndex] = row;\n }\n else {\n chart.horizontalAxes.push(axis_2);\n actualIndex = this.getActualColumn(axis_2);\n column = chart.columns[actualIndex];\n this.pushAxis(column, axis_2);\n span = ((actualIndex + axis_2.span) > chart.columns.length ? chart.columns.length : (actualIndex + axis_2.span));\n for (var j = actualIndex + 1; j < span; j++) {\n definition = chart.columns[j];\n definition.axes[column.axes.length - 1] = axis_2;\n chart.columns[j] = definition;\n }\n chart.columns[actualIndex] = column;\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.crossAt = function (chart) {\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n if (axis.crossesAt === null) {\n continue;\n }\n var isTransposed = chart.isTransposed;\n if (!axis.crossesInAxis) {\n if (chart.requireInvertedAxis) {\n axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryXAxis : chart.primaryYAxis;\n }\n else {\n axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryYAxis : chart.primaryXAxis;\n }\n axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n continue;\n }\n else {\n for (var i = 2, len = chart.axisCollections.length; i < len; i++) {\n if (axis.crossesInAxis === chart.axisCollections[i].name) {\n axis.crossInAxis = chart.axisCollections[i];\n axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n continue;\n }\n }\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.updateCrossAt = function (axis, crossAt) {\n switch (axis.valueType) {\n case 'DateTime':\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n return Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: crossAt }).val))));\n case 'Category':\n return parseFloat(crossAt) ? parseFloat(crossAt) : axis.labels.indexOf(crossAt);\n case 'Logarithmic':\n return logBase(crossAt, axis.logBase);\n default:\n return crossAt;\n }\n };\n CartesianAxisLayoutPanel.prototype.pushAxis = function (definition, axis) {\n for (var i = 0, len = definition.axes.length; i <= len; i++) {\n if (!definition.axes[i]) {\n definition.axes[i] = axis;\n break;\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.arrangeAxis = function (definition) {\n var axisCollection = [];\n for (var i = 0, len = definition.axes.length; i <= len; i++) {\n if (definition.axes[i]) {\n axisCollection.push(definition.axes[i]);\n }\n }\n definition.axes = axisCollection;\n };\n CartesianAxisLayoutPanel.prototype.getActualColumn = function (axis) {\n var actualLength = this.chart.columns.length;\n var pos = axis.columnIndex;\n var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n return result;\n };\n CartesianAxisLayoutPanel.prototype.getActualRow = function (axis) {\n var actualLength = this.chart.rows.length;\n var pos = axis.rowIndex;\n var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n return result;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n CartesianAxisLayoutPanel.prototype.calculateRowSize = function (rect) {\n /*! Calculate row size */\n var chart = this.chart;\n var row;\n var rowTop = rect.y + rect.height;\n var height = 0;\n var remainingHeight = Math.max(0, rect.height);\n for (var i = 0, len = chart.rows.length; i < len; i++) {\n row = chart.rows[i];\n if (row.height.indexOf('%') !== -1) {\n height = Math.min(remainingHeight, (rect.height * parseInt(row.height, 10) / 100));\n }\n else {\n height = Math.min(remainingHeight, parseInt(row.height, 10));\n }\n height = (i !== (len - 1)) ? height : remainingHeight;\n row.computedHeight = height;\n rowTop -= height;\n row.computedTop = rowTop;\n remainingHeight -= height;\n }\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n CartesianAxisLayoutPanel.prototype.calculateColumnSize = function (rect) {\n /*! Calculate column size */\n var chart = this.chart;\n var column;\n var columnLeft = rect.x;\n var width = 0;\n var remainingWidth = Math.max(0, rect.width);\n for (var i = 0, len = chart.columns.length; i < len; i++) {\n column = chart.columns[i];\n if (column.width.indexOf('%') !== -1) {\n width = Math.min(remainingWidth, (rect.width * parseInt(column.width, 10) / 100));\n }\n else {\n width = Math.min(remainingWidth, parseInt(column.width, 10));\n }\n width = (i !== (len - 1)) ? width : remainingWidth;\n column.computedWidth = width;\n column.computedLeft = columnLeft;\n columnLeft += width;\n remainingWidth -= width;\n }\n };\n /**\n * To render the axis element.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.renderAxes = function () {\n var chart = this.chart;\n var axis;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisInsideCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n var outsideElement;\n var isInside;\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n axis = chart.axisCollections[i];\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Inside' });\n outsideElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Outside' });\n isInside = this.findAxisPosition(axis);\n if (axis.orientation === 'Horizontal') {\n axis.updateCrossValue(chart);\n if (axis.visible && axis.lineStyle.width > 0) {\n this.drawAxisLine(axis, i, axis.plotOffset, 0, isInside ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawXAxisGridLine(axis, i, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.visible) {\n this.drawXAxisLabels(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawXAxisBorder(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawXAxisTitle(axis, i, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n }\n else {\n axis.updateCrossValue(chart);\n if (axis.visible && axis.lineStyle.width > 0) {\n this.drawAxisLine(axis, i, 0, axis.plotOffset, isInside ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawYAxisGridLine(axis, i, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.visible) {\n this.drawYAxisLabels(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawYAxisBorder(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawYAxisTitle(axis, i, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n }\n axisElement.appendChild(this.element);\n if (outsideElement && outsideElement.childNodes.length > 0) {\n axisLineElement.appendChild(outsideElement);\n }\n if (chart.scrollBarModule && chart.zoomSettings.enableScrollbar) {\n this.renderScrollbar(chart, axis);\n }\n }\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'DefinitionLine' });\n for (var j = 0, len = chart.rows.length; j < len; j++) {\n var row = chart.rows[j];\n if (row.border.color) {\n this.drawBottomLine(row, j, true);\n }\n }\n for (var j = 0, len = chart.columns.length; j < len; j++) {\n var column = chart.columns[j];\n if (column.border.color) {\n this.drawBottomLine(column, j, false);\n }\n }\n axisElement.appendChild(this.element);\n appendChildElement(chart.svgObject, axisElement, chart.redraw);\n return axisLineElement;\n };\n /**\n * To render scrollbar\n * @param chart\n * @param axis\n */\n CartesianAxisLayoutPanel.prototype.renderScrollbar = function (chart, axis) {\n if (chart.zoomModule.isZoomed && (axis.zoomFactor < 1 || axis.zoomPosition > 0) && !axis.zoomingScrollBar.isScrollUI) {\n if (!chart.scrollElement) {\n chart.scrollElement = redrawElement(chart.redraw, chart.element.id + '_scrollElement') || createElement('div', { id: chart.element.id + '_scrollElement' });\n }\n appendChildElement(chart.scrollElement, axis.zoomingScrollBar.render(), true);\n }\n else if (axis.zoomFactor === 1 && axis.zoomPosition === 0 && axis.zoomingScrollBar.svgObject) {\n axis.zoomingScrollBar.destroy();\n }\n if (axis.zoomingScrollBar.isScrollUI) {\n axis.zoomingScrollBar.isScrollUI = false;\n }\n };\n CartesianAxisLayoutPanel.prototype.findAxisPosition = function (axis) {\n return axis.crossAt !== null && axis.isInside(axis.crossInAxis.visibleRange);\n };\n CartesianAxisLayoutPanel.prototype.drawBottomLine = function (definition, index, isRow) {\n var chart = this.chart;\n var optionsLine = {};\n var x1;\n var x2;\n var y1;\n var y2;\n var definitionName;\n if (isRow) {\n definition = definition;\n y1 = y2 = definition.computedTop + definition.computedHeight;\n x1 = this.seriesClipRect.x;\n x2 = x1 + this.seriesClipRect.width;\n definitionName = 'Row';\n }\n else {\n definition = definition;\n x1 = x2 = definition.computedLeft;\n y1 = this.seriesClipRect.y;\n y2 = y1 + this.seriesClipRect.height;\n definitionName = 'Column';\n }\n optionsLine = {\n 'id': chart.element.id + '_AxisBottom_' + definitionName + index,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n 'stroke-width': definition.border.width,\n 'stroke': definition.border.color,\n };\n this.htmlObject = chart.renderer.drawLine(optionsLine);\n this.element.appendChild(this.htmlObject);\n };\n CartesianAxisLayoutPanel.prototype.drawAxisLine = function (axis, index, plotX, plotY, parent, rect) {\n var chart = this.chart;\n var optionsLine = {};\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n x1: rect.x - plotX,\n y1: rect.y - plotY,\n x2: rect.x + rect.width + plotX,\n y2: rect.y + rect.height + plotY,\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n this.htmlObject = chart.renderer.drawLine(optionsLine);\n parent.appendChild(this.htmlObject);\n };\n CartesianAxisLayoutPanel.prototype.drawYAxisGridLine = function (axis, index, parent, rect) {\n var chart = this.chart;\n var tempInterval;\n var pointY = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorGird = '';\n var minorTick = '';\n var minorDirection;\n var tickSize = axis.opposedPosition ? axis.majorTickLines.height : -axis.majorTickLines.height;\n var axisLineSize = (axis.opposedPosition) ? axis.lineStyle.width / 2 : -axis.lineStyle.width / 2;\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ?\n 0.5 : 0;\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.opposedPosition ? axis.scrollBarHeight :\n -axis.scrollBarHeight : 0;\n var isTickInside = axis.tickPosition === 'Inside';\n var ticks = isTickInside ? (rect.x - tickSize - axisLineSize) : (rect.x + tickSize + axisLineSize + scrollBarHeight);\n var length = axis.visibleLabels.length;\n if (axis.valueType.indexOf('Category') && axis.labelPlacement === 'BetweenTicks' && length > 0) {\n length += 1;\n }\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = !axis.visibleLabels[i] ? (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel\n : axis.visibleLabels[i].value - ticksbwtLabel;\n pointY = valueToCoefficient(tempInterval, axis) * rect.height;\n pointY = (pointY * -1) + (rect.y + rect.height);\n if (pointY >= rect.y && (rect.y + rect.height) >= pointY) {\n if ((inside(tempInterval, axis.visibleRange)) || this.isBorder(axis, i, pointY)) {\n majorGrid = majorGrid.concat('M ' + this.seriesClipRect.x + ' ' + (pointY) +\n ' L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + pointY + ' ');\n }\n majorTick = majorTick.concat('M ' + (rect.x + axisLineSize + (isTickInside ? scrollBarHeight : 0)) + ' ' + pointY +\n ' L ' + (ticks) + ' ' + pointY + ' ');\n }\n if ((axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0) && axis.minorTicksPerInterval > 0) {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGird, minorTick, rect, i);\n minorGird = minorDirection[0];\n minorTick = minorDirection[1];\n }\n }\n this.renderGridLine(axis, index, majorGrid, minorGird);\n this.renderTickLine(axis, index, majorTick, minorTick, parent);\n };\n CartesianAxisLayoutPanel.prototype.isBorder = function (axis, index, value) {\n var chart = this.chart;\n var border = chart.chartArea.border;\n var rect = this.seriesClipRect;\n var orientation = axis.orientation;\n var start = (orientation === 'Horizontal') ? rect.x : rect.y;\n var size = (orientation === 'Horizontal') ? rect.width : rect.height;\n var startIndex = (orientation === 'Horizontal') ? 0 : axis.visibleLabels.length - 1;\n var endIndex = (orientation === 'Horizontal') ? axis.visibleLabels.length - 1 : 0;\n if (axis.plotOffset > 0) {\n return true;\n }\n else if ((value === start || value === (start + size)) && (border.width <= 0 || border.color === 'transparent')) {\n return true;\n }\n else if ((value !== start && index === startIndex) || (value !== (start + size) && index === endIndex)) {\n return true;\n }\n return false;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var elementSize;\n var options;\n var isLabelInside = axis.labelPosition === 'Inside';\n var isTickInside = axis.tickPosition === 'Inside';\n var isOpposed = axis.opposedPosition;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var padding = tickSpace + this.padding + axis.lineStyle.width / 2;\n padding = (axis.opposedPosition) ? padding : -padding;\n var anchor = ((isOpposed && isLabelInside) || (!isOpposed && !isLabelInside)) ? 'end' : 'start';\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight * (isOpposed ? 1 : -1) : 0;\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n pointX = isLabelInside ? (rect.x - padding) : (rect.x + padding + scrollBarHeight);\n elementSize = axis.visibleLabels[i].size;\n pointY = valueToCoefficient(axis.visibleLabels[i].value, axis) * rect.height;\n pointY = Math.floor((pointY * -1) + (rect.y + rect.height));\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY + (elementSize.height / 4), anchor, axis.visibleLabels[i].text);\n if (axis.edgeLabelPlacement) {\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (axis.isInversed && i === len - 1)) && options.y > rect.y + rect.height) ||\n (((i === len - 1) || (axis.isInversed && i === 0)) && options.y - elementSize.height / 2 < rect.y)) {\n options.text = '';\n }\n break;\n case 'Shift':\n if ((i === 0 || (axis.isInversed && i === len - 1)) && options.y > rect.y + rect.height) {\n options.y = pointY = rect.y + rect.height;\n }\n else if (((i === len - 1) || (axis.isInversed && i === 0)) && (options.y - elementSize.height / 2 < rect.y)) {\n options.y = pointY = rect.y + elementSize.height / 2;\n }\n break;\n }\n }\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement, false, false).setAttribute('text-content', options.text);\n }\n if (!chart.delayRedraw) {\n parent.appendChild(labelElement);\n }\n else if (axis.visible) {\n this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n }\n };\n /**\n * To render the axis label border.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisBorder = function (axis, index, parent, rect) {\n if (axis.border.width > 0) {\n var startY = void 0;\n var pointY = void 0;\n var scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n scrollBarHeight = (axis.opposedPosition ? 1 : -1) * scrollBarHeight;\n var gap = (rect.height / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n : axis.visibleRange.interval);\n var endY = void 0;\n var length_1 = axis.maxLabelSize.width + 10 + ((axis.tickPosition === axis.labelPosition) ?\n axis.majorTickLines.height : 0);\n var labelBorder = '';\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n var endX = ((axis.opposedPosition && axis.labelPosition === 'Inside') || (!axis.opposedPosition\n && axis.labelPosition === 'Outside')) ? rect.x - length_1 + scrollBarHeight : rect.x + length_1 + scrollBarHeight;\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n pointY = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n pointY = (axis.isInversed ? (1 - pointY) : pointY) * rect.height;\n if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n startY = Math.floor((pointY * -1) + (rect.y + rect.height));\n endY = Math.floor((pointY * -1) - (gap) + (rect.y + rect.height));\n }\n else {\n startY = Math.floor((pointY * -1) + gap / 2 + (rect.y + rect.height));\n endY = Math.floor((pointY * -1) - gap / 2 + (rect.y + rect.height));\n }\n switch (axis.border.type) {\n case 'Rectangle':\n case 'WithoutTopBorder':\n if (startY > (rect.y + rect.height)) {\n labelBorder += ('M' + ' ' + endX + ' ' + (rect.y + rect.height) + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n }\n else if (Math.floor(rect.y) > (endY)) {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX\n + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + (rect.y) + ' ');\n }\n else {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + endY + ' ' + 'L' + ' ' +\n endX + ' ' + endY + ' ');\n }\n }\n break;\n case 'WithoutTopandBottomBorder':\n if (!(startY > rect.y + rect.height) && !((endY) < Math.floor(rect.y))) {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'M' + ' ' + endX + ' ' + endY + ' ' +\n 'L' + ' ' + (rect.x + scrollBarHeight) + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle') ? ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + rect.y + ' ' + 'L' + ' ' +\n (rect.x + scrollBarHeight) + ' ' + (rect.y + rect.height) + ' ') : '';\n if (labelBorder !== '') {\n this.createAxisBorderElement(axis, index, labelBorder, parent);\n }\n }\n if (axis.multiLevelLabels.length > 0 && this.chart.multiLevelLabelModule) {\n this.chart.multiLevelLabelModule.renderYAxisMultiLevelLabels(axis, index, parent, rect);\n }\n };\n CartesianAxisLayoutPanel.prototype.drawYAxisTitle = function (axis, index, parent, rect) {\n var chart = this.chart;\n var labelRotation = (axis.opposedPosition) ? 90 : -90;\n var elementSize = measureText(axis.title, axis.titleStyle);\n var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + this.padding) +\n (axis.labelPosition === 'Inside' ? 0 :\n (axis.maxLabelSize.width + axis.multiLevelLabelHeight + this.padding));\n padding = axis.opposedPosition ? padding + axis.scrollBarHeight : -padding - axis.scrollBarHeight;\n var x = rect.x + padding;\n var y = rect.y + rect.height / 2;\n var options = new TextOption(chart.element.id + '_AxisTitle_' + index, x, y - this.padding, 'middle', axis.title, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')');\n var element = textElement(options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitle, parent);\n element.setAttribute('tabindex', axis.tabIndex.toString());\n element.setAttribute('aria-label', axis.description || axis.title);\n };\n CartesianAxisLayoutPanel.prototype.drawXAxisGridLine = function (axis, index, parent, rect) {\n var chart = this.chart;\n var tempInterval;\n var pointX = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorGird = '';\n var minorTick = '';\n var minorDirection;\n var tickSize = (axis.opposedPosition) ? -axis.majorTickLines.height : axis.majorTickLines.height;\n var axisLineSize = (axis.opposedPosition) ? -axis.lineStyle.width / 2 : axis.lineStyle.width / 2;\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.opposedPosition ? -axis.scrollBarHeight :\n axis.scrollBarHeight : 0;\n var ticksbwtLabel = (axis.valueType.indexOf('Category') > -1 && axis.labelPlacement === 'BetweenTicks') ?\n 0.5 : 0;\n var length = axis.visibleLabels.length;\n var isTickInside = axis.tickPosition === 'Inside';\n var ticks = isTickInside ? (rect.y - tickSize - axisLineSize) : (rect.y + tickSize + axisLineSize + scrollBarHeight);\n if (axis.valueType.indexOf('Category') > -1 && length > 0 && axis.labelPlacement === 'BetweenTicks') {\n length += 1;\n }\n //Gridlines\n for (var i = 0; i < length; i++) {\n if (axis.valueType !== 'DateTimeCategory') {\n tempInterval = axis.visibleLabels[i] ? axis.visibleLabels[i].value - ticksbwtLabel\n : (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel;\n }\n else {\n tempInterval = axis.visibleLabels[i] ?\n axis.visibleLabels[i].value - ticksbwtLabel : axis.visibleRange.max;\n }\n pointX = (valueToCoefficient(tempInterval, axis) * rect.width) + rect.x;\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n if (inside(tempInterval, axis.visibleRange) || this.isBorder(axis, i, pointX)) {\n majorGrid = majorGrid.concat('M ' + pointX + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height) +\n ' L ' + pointX + ' ' + this.seriesClipRect.y + ' ');\n }\n majorTick = majorTick.concat('M ' + (pointX) + ' ' + (rect.y + axisLineSize + (isTickInside ? scrollBarHeight : 0))\n + ' L ' + (pointX) + ' ' + ticks + ' ');\n }\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)) {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGird, minorTick, rect, i);\n minorTick = minorDirection[1];\n minorGird = minorDirection[0];\n }\n }\n this.renderGridLine(axis, index, majorGrid, minorGird);\n this.renderTickLine(axis, index, majorTick, minorTick, parent);\n };\n CartesianAxisLayoutPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick, rect, labelIndex) {\n var value = tempInterval;\n var coor = 0;\n var position = 0;\n var range = axis.visibleRange;\n var isTickInside = axis.tickPosition === 'Inside';\n var direction = [];\n var tickSize = axis.opposedPosition ? -axis.minorTickLines.height : axis.minorTickLines.height;\n var logStart;\n var logEnd;\n var logInterval = 1;\n var logPosition = 1;\n var ticksX = isTickInside ? (rect.y - tickSize) : (rect.y + tickSize);\n var ticksY = isTickInside ? (rect.x + tickSize) : (rect.x - tickSize);\n if (axis.valueType === 'Logarithmic') {\n logStart = Math.pow(axis.logBase, value - range.interval);\n logEnd = Math.pow(axis.logBase, value);\n logInterval = (logEnd - logStart) / (axis.minorTicksPerInterval + 1);\n logPosition = logStart + logInterval;\n }\n if (axis.orientation === 'Horizontal') {\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, logInterval, value, labelIndex);\n logPosition += logInterval;\n if (inside(value, range)) {\n position = ((value - range.min) / (range.max - range.min));\n position = Math.ceil((axis.isInversed ? (1 - position) : position) * rect.width);\n coor = (Math.floor(position + rect.x));\n minorGird = minorGird.concat('M' + ' ' + coor + ' ' + (this.seriesClipRect.y)\n + 'L ' + coor + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height));\n coor = (Math.floor(position + rect.x));\n minorTick = minorTick.concat('M' + ' ' + coor + ' ' + (rect.y)\n + 'L ' + coor + ' ' + ticksX);\n }\n }\n }\n else {\n tickSize = axis.opposedPosition ? axis.minorTickLines.height : -axis.minorTickLines.height;\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, logInterval, value, labelIndex);\n if (inside(value, range)) {\n position = Math.ceil(((value - range.min) / (range.max - range.min)) * rect.height) * -1;\n coor = (Math.floor(position + rect.y + rect.height));\n minorGird = minorGird.concat('M' + ' ' + (this.seriesClipRect.x) + ' ' + coor\n + 'L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + coor);\n coor = (Math.floor(position + rect.y + rect.height));\n minorTick = minorTick.concat('M' + ' ' + rect.x + ' ' + coor + 'L ' + ticksY + ' ' + coor);\n }\n logPosition += logInterval;\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n CartesianAxisLayoutPanel.prototype.findLogNumeric = function (axis, logPosition, logInterval, value, labelIndex) {\n var range = axis.visibleRange;\n if (axis.valueType === 'Logarithmic') {\n value = logBase(logPosition, axis.logBase);\n }\n else if (axis.valueType === 'DateTime') {\n value += axis.dateTimeInterval / (axis.minorTicksPerInterval + 1);\n }\n else if (axis.valueType === 'DateTimeCategory') {\n var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n value += ((axis.visibleLabels[labelIndex + 1] ?\n axis.visibleLabels[labelIndex + 1].value - padding : axis.visibleRange.max) -\n (axis.visibleLabels[labelIndex] ?\n axis.visibleLabels[labelIndex].value - padding : axis.visibleRange.min)) /\n (axis.minorTicksPerInterval + 1);\n }\n else {\n value += range.interval / (axis.minorTicksPerInterval + 1);\n }\n return value;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var elementSize;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var labelPosition = axis.labelPosition;\n var islabelInside = axis.labelPosition === 'Inside';\n var isTickInside = axis.tickPosition === 'Inside';\n var isOpposed = axis.opposedPosition;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var labelPadding;\n var padding = tickSpace + this.padding + axis.lineStyle.width / 2;\n var rotateSize;\n var diffHeight;\n var angle = axis.angle % 360;\n var anglePadding = ((angle === 90 || angle === -90)) ? -2 : 0;\n var options;\n var yLocation;\n var previousEnd = axis.isInversed ? (rect.x + rect.width) : rect.x;\n var width = 0;\n var length = axis.visibleLabels.length;\n var intervalLength;\n var label;\n var scrollBarHeight = !islabelInside && isNullOrUndefined(axis.crossesAt) && (axis.zoomFactor < 1 || axis.zoomPosition > 0)\n ? axis.scrollBarHeight : 0;\n for (var i = 0, len = length; i < len; i++) {\n label = axis.visibleLabels[i];\n pointX = (valueToCoefficient(label.value, axis) * rect.width) + rect.x;\n elementSize = label.size;\n intervalLength = rect.width / length;\n width = ((axis.labelIntersectAction === 'Trim' || axis.labelIntersectAction === 'Wrap') && angle === 0\n && elementSize.width > intervalLength) ? intervalLength : elementSize.width;\n pointX -= width / 2;\n if (islabelInside && angle) {\n pointY = isOpposed ? (rect.y + padding) : (rect.y - padding);\n }\n else {\n labelPadding = ((isOpposed && !islabelInside) || (!isOpposed && islabelInside)) ?\n -(padding + scrollBarHeight + (angle ? ((elementSize.height / 2) + (2 * axis.maxLabelSize.height / 5)) :\n (label.index > 1 ? (2 * (elementSize.height / 4)) : 0))) :\n padding + scrollBarHeight + (angle ? (axis.maxLabelSize.height / 2) : (3 * (elementSize.height / 4)));\n pointY = (rect.y + (labelPadding * label.index));\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, '');\n if (axis.edgeLabelPlacement) {\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (axis.isInversed && i === len - 1)) && options.x < rect.x) ||\n ((i === len - 1 || (axis.isInversed && i === 0)) && (options.x + width > rect.x + rect.width))) {\n continue;\n }\n break;\n case 'Shift':\n if ((i === 0 || (axis.isInversed && i === len - 1)) && options.x < rect.x) {\n intervalLength -= (rect.x - options.x);\n options.x = pointX = rect.x;\n }\n else if ((i === len - 1 || (axis.isInversed && i === 0)) && ((options.x + width) > rect.x + rect.width)) {\n if (elementSize.width > intervalLength && axis.labelIntersectAction === 'Trim') {\n intervalLength -= (options.x + width - (rect.x + rect.width));\n }\n else {\n intervalLength = width;\n }\n options.x = pointX = rect.x + rect.width - intervalLength;\n }\n break;\n }\n }\n options.text = this.findAxisLabel(axis, label.text, intervalLength);\n if (angle === 0 && axis.labelIntersectAction === 'Hide' && i !== 0 &&\n (!axis.isInversed ? options.x <= previousEnd : options.x + width >= previousEnd)) {\n continue;\n }\n previousEnd = axis.isInversed ? options.x : options.x + width;\n if (angle !== 0) {\n rotateSize = rotateTextSize(axis.labelStyle, label.text, angle, chart);\n diffHeight = islabelInside ? rotateSize.height :\n axis.maxLabelSize.height - Math.ceil(rotateSize.height);\n yLocation = axis.opposedPosition ? diffHeight / 2 : -diffHeight / 2;\n options.transform = 'rotate(' + angle + ',' + (pointX + width / 2 + anglePadding) + ','\n + (pointY + yLocation) + ')';\n options.y += yLocation;\n }\n textElement(options, label.labelStyle, label.labelStyle.color || chart.themeStyle.axisLabel, labelElement, (axis.opposedPosition !== (axis.labelPosition === 'Inside'))).setAttribute('style', 'cursor: default');\n }\n if (!chart.delayRedraw) {\n parent.appendChild(labelElement);\n }\n else if (axis.visible) {\n this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n }\n };\n /**\n * To render the axis label border.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisBorder = function (axis, index, parent, axisRect) {\n if (axis.border.width > 0) {\n var scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n var startX = void 0;\n var startY = axisRect.y + ((axis.opposedPosition ? -1 : 1) * scrollBarHeight);\n var padding = 10;\n var pointX = void 0;\n var gap = (axisRect.width / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n : axis.visibleRange.interval);\n var endX = void 0;\n var length_2 = axis.maxLabelSize.height +\n ((axis.tickPosition === axis.labelPosition) ? axis.majorTickLines.height : 0);\n var labelBorder = '';\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n var endY = ((axis.opposedPosition && axis.labelPosition === 'Inside') ||\n (!axis.opposedPosition && axis.labelPosition === 'Outside')) ?\n (axisRect.y + length_2 + padding + scrollBarHeight) : (axisRect.y - length_2 - padding - scrollBarHeight);\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n pointX = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n pointX = (axis.isInversed ? (1 - pointX) : pointX) * axisRect.width;\n if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n startX = pointX + axisRect.x;\n endX = pointX + (gap) + axisRect.x;\n }\n else {\n startX = pointX - gap / 2 + axisRect.x;\n endX = pointX + gap / 2 + axisRect.x;\n }\n switch (axis.border.type) {\n case 'Rectangle':\n case 'WithoutTopBorder':\n if (startX < axisRect.x) {\n labelBorder += ('M' + ' ' + axisRect.x + ' ' + endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n }\n else if (Math.floor(endX) > axisRect.width + axisRect.x) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'L' + ' ' + (axisRect.width + axisRect.x) + ' ' + endY + ' ');\n }\n else {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' +\n endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + endX + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ' +\n 'M ' + endX + ' ' + endY + ' L ' + (axisRect.width + axisRect.x) + ' ' + endY);\n }\n }\n break;\n case 'WithoutTopandBottomBorder':\n if (!(startX < axisRect.x) && !(Math.floor(endX) > axisRect.width + axisRect.x)) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'M ' + endX + ' ' + startY + ' L ' + endX + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle' ? ('M ' + ' ' + axisRect.x + ' ' + startY + 'L' + ' ' +\n (axisRect.x + axisRect.width) + ' ' + startY) : '');\n if (labelBorder !== '') {\n this.createAxisBorderElement(axis, index, labelBorder, parent);\n }\n }\n if (this.chart.multiLevelLabelModule && axis.multiLevelLabels.length > 0) {\n this.chart.multiLevelLabelModule.renderXAxisMultiLevelLabels(axis, index, parent, axisRect);\n }\n };\n /**\n * To create border element for axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.createAxisBorderElement = function (axis, index, labelBorder, parent) {\n var borderElement = this.chart.renderer.drawPath(new PathOption(this.chart.element.id + '_BorderLine_' + index, 'transparent', axis.border.width, axis.border.color || this.chart.themeStyle.axisLine, 1, '', labelBorder));\n borderElement.setAttribute('style', 'pointer-events: none');\n parent.appendChild(borderElement);\n };\n CartesianAxisLayoutPanel.prototype.findAxisLabel = function (axis, label, width) {\n switch (axis.labelIntersectAction) {\n case 'Trim':\n return (axis.angle === 0 && !axis.enableTrim) ? textTrim(width, label, axis.labelStyle) : label;\n default:\n return label;\n }\n };\n CartesianAxisLayoutPanel.prototype.drawXAxisTitle = function (axis, index, parent, rect) {\n var chart = this.chart;\n var elementSize = measureText(axis.title, axis.titleStyle);\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + this.padding) +\n (axis.labelPosition === 'Inside' ? 0 :\n axis.maxLabelSize.height + axis.multiLevelLabelHeight + this.padding);\n padding = axis.opposedPosition ? -(padding + elementSize.height / 4 + scrollBarHeight) : (padding + (3 *\n elementSize.height / 4) + scrollBarHeight);\n var options = new TextOption(chart.element.id + '_AxisTitle_' + index, rect.x + rect.width / 2, rect.y + padding, 'middle', axis.title);\n var element = textElement(options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitle, parent);\n element.setAttribute('aria-label', axis.description || axis.title);\n element.setAttribute('tabindex', axis.tabIndex.toString());\n };\n CartesianAxisLayoutPanel.prototype.renderTickLine = function (axis, index, majorTick, minorTick, parent) {\n var options;\n var chart = this.chart;\n if (axis.majorTickLines.width > 0 && axis.visible) {\n options = new PathOption(chart.element.id + '_MajorTickLine_' + index, 'transparent', axis.majorTickLines.width, axis.majorTickLines.color || chart.themeStyle.majorTickLine, null, null, majorTick);\n this.htmlObject = chart.renderer.drawPath(options);\n parent.appendChild(this.htmlObject);\n }\n if (axis.minorTickLines.width > 0 && axis.visible) {\n options = new PathOption(chart.element.id + '_MinorTickLine_' + index, 'transparent', axis.minorTickLines.width, axis.minorTickLines.color || chart.themeStyle.minorTickLine, null, null, minorTick);\n this.htmlObject = chart.renderer.drawPath(options);\n parent.appendChild(this.htmlObject);\n }\n };\n CartesianAxisLayoutPanel.prototype.renderGridLine = function (axis, index, majorGrid, minorGird) {\n var chart = this.chart;\n var options;\n if (axis.majorGridLines.width > 0) {\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, axis.majorGridLines.dashArray, majorGrid);\n this.htmlObject = chart.renderer.drawPath(options);\n this.element.appendChild(this.htmlObject);\n }\n if (axis.minorGridLines.width > 0) {\n options = new PathOption(chart.element.id + '_MinorGridLine_' + index, 'transparent', axis.minorGridLines.width, axis.minorGridLines.color || chart.themeStyle.minorGridLine, null, axis.minorGridLines.dashArray, minorGird);\n this.htmlObject = chart.renderer.drawPath(options);\n this.element.appendChild(this.htmlObject);\n }\n };\n CartesianAxisLayoutPanel.prototype.findParentNode = function (chart, label, axis, index) {\n if (axis.crossAt === null) {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside');\n }\n if (document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside').contains(document.getElementById(label.id))) {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside');\n }\n else {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Outside');\n }\n };\n CartesianAxisLayoutPanel.prototype.createZoomingLabel = function (chart, labelElement, axis, index, rect) {\n var parentNode = this.findParentNode(chart, labelElement, axis, index);\n labelElement.setAttribute('opacity', '0.3');\n var zoomElement = chart.renderer.createGroup({\n id: chart.element.id + 'AxisLabels_Zoom' + index\n });\n zoomElement = createZoomingLabels(chart, axis, zoomElement, index, axis.orientation === 'Vertical', rect);\n parentNode.replaceChild(labelElement, document.getElementById(labelElement.id));\n if (getElement(chart.element.id + 'AxisLabels_Zoom' + index)) {\n parentNode.replaceChild(zoomElement, document.getElementById(zoomElement.id));\n }\n else {\n parentNode.appendChild(zoomElement);\n }\n };\n return CartesianAxisLayoutPanel;\n}());\nexport { CartesianAxisLayoutPanel };\n","import { withInBounds, PointData, Rect, getValueXByPoint, getValueYByPoint } from '../../common/utils/helper';\n/**\n * To get the data on mouse move.\n * @private\n */\nvar ChartData = /** @class */ (function () {\n /**\n * Constructor for the data.\n * @private\n */\n function ChartData(chart) {\n /** @private */\n this.currentPoints = [];\n /** @private */\n this.previousPoints = [];\n this.chart = chart;\n this.lierIndex = 0;\n }\n /**\n * Method to get the Data.\n * @private\n */\n ChartData.prototype.getData = function () {\n var chart = this.chart;\n var point = null;\n var series = null;\n var width;\n var height;\n for (var len = chart.visibleSeries.length, i = len - 1; i >= 0; i--) {\n series = chart.visibleSeries[i];\n width = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))\n ? (series.marker.height + 5) / 2 : 0;\n height = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))\n ? (series.marker.width + 5) / 2 : 0;\n if (series.visible && withInBounds(chart.mouseX, chart.mouseY, series.clipRect, width, height)) {\n point = this.getRectPoint(series, series.clipRect, chart.mouseX, chart.mouseY);\n }\n if (point) {\n return new PointData(point, series);\n }\n }\n return new PointData(point, series);\n };\n ChartData.prototype.isSelected = function (chart) {\n return (chart.selectionMode.indexOf('Drag') > -1 && chart.selectionModule && chart.selectionModule.rectPoints !== null);\n };\n ChartData.prototype.getRectPoint = function (series, rect, x, y) {\n var currentRect;\n var fromCenterX;\n var fromCenterY;\n var clickAngle;\n var arcAngle = 0;\n var startAngle;\n var endAngle;\n var distanceFromCenter;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.regionData) {\n if (!point.regions || !point.regions.length) {\n continue;\n }\n }\n if (point.regionData && this.chart.chartAreaType === 'PolarRadar' && series.drawType.indexOf('Column') > -1) {\n fromCenterX = x - (series.clipRect.width / 2 + series.clipRect.x);\n fromCenterY = y - (series.clipRect.height / 2 + series.clipRect.y);\n arcAngle = 2 * Math.PI * (point.regionData.currentXPosition < 0 ? 1 + point.regionData.currentXPosition\n : point.regionData.currentXPosition);\n clickAngle = (Math.atan2(fromCenterY, fromCenterX) + 0.5 * Math.PI - arcAngle) % (2 * Math.PI);\n clickAngle = clickAngle < 0 ? 2 * Math.PI + clickAngle : clickAngle;\n clickAngle = clickAngle + 2 * Math.PI * series.chart.primaryXAxis.startAngle;\n startAngle = point.regionData.startAngle;\n startAngle -= arcAngle;\n startAngle = startAngle < 0 ? 2 * Math.PI + startAngle : startAngle;\n endAngle = point.regionData.endAngle;\n endAngle -= arcAngle;\n endAngle = endAngle < 0 ? 2 * Math.PI + endAngle : endAngle;\n distanceFromCenter = Math.sqrt(Math.pow(Math.abs(fromCenterX), 2) + Math.pow(Math.abs(fromCenterY), 2));\n if (clickAngle >= startAngle && clickAngle <= endAngle &&\n (((distanceFromCenter >= point.regionData.innerRadius && distanceFromCenter <= point.regionData.radius) ||\n (distanceFromCenter <= point.regionData.innerRadius && distanceFromCenter >= point.regionData.radius))\n && distanceFromCenter <= series.chart.radius)) {\n return point;\n }\n }\n else if (this.checkRegionContainsPoint(point.regions, rect, x, y)) {\n return point;\n }\n }\n return null;\n };\n /**\n * Checks whether the region contains a point\n */\n ChartData.prototype.checkRegionContainsPoint = function (regionRect, rect, x, y) {\n var _this = this;\n return regionRect.some(function (region, index) {\n _this.lierIndex = index;\n return withInBounds(x, y, new Rect((_this.chart.chartAreaType === 'Cartesian' ? rect.x : 0) + region.x, (_this.chart.chartAreaType === 'Cartesian' ? rect.y : 0) + region.y, region.width, region.height));\n });\n };\n ChartData.prototype.getClosest = function (series, value) {\n var xData = series.xData;\n var closest;\n if (value >= series.xMin - 0.5 && value <= series.xMax + 0.5) {\n for (var _i = 0, xData_1 = xData; _i < xData_1.length; _i++) {\n var data = xData_1[_i];\n if (closest == null || Math.abs(data - value) < Math.abs(closest - value)) {\n closest = data;\n }\n }\n }\n return closest;\n };\n ChartData.prototype.getClosestX = function (chart, series) {\n var value;\n var rect = series.clipRect;\n if (!chart.requireInvertedAxis) {\n value = getValueXByPoint(chart.mouseX - rect.x, rect.width, series.xAxis);\n }\n else {\n value = getValueYByPoint(chart.mouseY - rect.y, rect.height, series.xAxis);\n }\n var closest = this.getClosest(series, value);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (closest === point.xValue && point.visible) {\n return new PointData(point, series);\n }\n }\n return null;\n };\n return ChartData;\n}());\nexport { ChartData };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { StackValues, RectOption, appendChildElement, appendClipElement } from '../../common/utils/helper';\nimport { firstToLowerCase, Rect, CircleOption } from '../../common/utils/helper';\nimport { Border, Font, Margin, Animation, EmptyPointSettings, CornerRadius, Connector } from '../../common/model/base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { seriesRender } from '../../common/model/constants';\nimport { sort } from '../../common/utils/helper';\n/**\n * Configures the data label in the series.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n __extends(DataLabelSettings, _super);\n function DataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], DataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], DataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('Auto')\n ], DataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Property('Center')\n ], DataLabelSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], DataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ left: 5, right: 5, top: 5, bottom: 5 }, Margin)\n ], DataLabelSettings.prototype, \"margin\", void 0);\n __decorate([\n Complex({ size: '11px', color: null }, Font)\n ], DataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"template\", void 0);\n return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n * Configures the marker in the series.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n __extends(MarkerSettings, _super);\n function MarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Circle')\n ], MarkerSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"height\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ width: 2, color: null }, Border)\n ], MarkerSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], MarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, DataLabelSettings)\n ], MarkerSettings.prototype, \"dataLabel\", void 0);\n return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n * Points model for the series.\n * @private\n */\nvar Points = /** @class */ (function () {\n function Points() {\n this.symbolLocations = null;\n this.regions = null;\n this.percentage = null;\n this.regionData = null;\n this.marker = {\n visible: false\n };\n }\n return Points;\n}());\nexport { Points };\n/**\n * Defines the behavior of the Trendlines\n */\nvar Trendline = /** @class */ (function (_super) {\n __extends(Trendline, _super);\n function Trendline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private */\n Trendline.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.points = series.points;\n }\n var type = firstToLowerCase(this.type);\n chart.trendLineModule.initDataSource(this, chart);\n chart.visibleSeriesCount++;\n };\n __decorate([\n Property('')\n ], Trendline.prototype, \"name\", void 0);\n __decorate([\n Property('Linear')\n ], Trendline.prototype, \"type\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"period\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"polynomialOrder\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"backwardForecast\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"forwardForecast\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Trendline.prototype, \"animation\", void 0);\n __decorate([\n Complex({}, MarkerSettings)\n ], Trendline.prototype, \"marker\", void 0);\n __decorate([\n Property(true)\n ], Trendline.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(null)\n ], Trendline.prototype, \"intercept\", void 0);\n __decorate([\n Property('')\n ], Trendline.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], Trendline.prototype, \"width\", void 0);\n __decorate([\n Property('SeriesType')\n ], Trendline.prototype, \"legendShape\", void 0);\n return Trendline;\n}(ChildProperty));\nexport { Trendline };\n/**\n * Configures Error bar in series.\n */\nvar ErrorBarCapSettings = /** @class */ (function (_super) {\n __extends(ErrorBarCapSettings, _super);\n function ErrorBarCapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], ErrorBarCapSettings.prototype, \"length\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarCapSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"opacity\", void 0);\n return ErrorBarCapSettings;\n}(ChildProperty));\nexport { ErrorBarCapSettings };\nvar ChartSegment = /** @class */ (function (_super) {\n __extends(ChartSegment, _super);\n function ChartSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"color\", void 0);\n __decorate([\n Property('0')\n ], ChartSegment.prototype, \"dashArray\", void 0);\n return ChartSegment;\n}(ChildProperty));\nexport { ChartSegment };\nvar ErrorBarSettings = /** @class */ (function (_super) {\n __extends(ErrorBarSettings, _super);\n function ErrorBarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ErrorBarSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Fixed')\n ], ErrorBarSettings.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ErrorBarSettings.prototype, \"direction\", void 0);\n __decorate([\n Property('Vertical')\n ], ErrorBarSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"verticalError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalPositiveError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalNegativeError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalPositiveError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalNegativeError\", void 0);\n __decorate([\n Complex(null, ErrorBarCapSettings)\n ], ErrorBarSettings.prototype, \"errorBarCap\", void 0);\n return ErrorBarSettings;\n}(ChildProperty));\nexport { ErrorBarSettings };\n/**\n * Defines the common behavior of Series and Technical Indicators\n */\nvar SeriesBase = /** @class */ (function (_super) {\n __extends(SeriesBase, _super);\n function SeriesBase() {\n /**\n * The DataSource field that contains the x value.\n * It is applicable for series and technical indicators\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.currentViewData = [];\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @private */\n _this.seriesType = 'XY';\n return _this;\n }\n /**\n * Process data for the series.\n * @hidden\n */\n SeriesBase.prototype.processJsonData = function () {\n var i = 0;\n var point = new Points();\n var xName = (this instanceof Series && this.type === 'Histogram') ? 'x' : this.xName;\n var textMappingName = this instanceof Series && this.marker.dataLabel.name ?\n this.marker.dataLabel.name : '';\n if (this instanceof Series) {\n if ((this.type === 'Waterfall' || this.type === 'Histogram')) {\n this.currentViewData = this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n processInternalData(this.currentViewData, this);\n }\n if (this.category === 'Pareto') {\n this.currentViewData = sort(this.currentViewData, [this.yName], true);\n if (this.type === 'Line') {\n this.currentViewData = this.chart.paretoSeriesModule.performCumulativeCalculation(this.currentViewData, this);\n }\n }\n }\n var len = Object.keys(this.currentViewData).length;\n this.points = [];\n this.xMin = Infinity;\n this.xMax = -Infinity;\n this.yMin = Infinity;\n this.yMax = -Infinity;\n this.sizeMax = -Infinity;\n this.getSeriesType();\n if (this.xAxis.valueType === 'Category') {\n while (i < len) {\n point = this.dataPoint(i, textMappingName, xName);\n this.pushCategoryData(point, i, point.x);\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n else if (this.xAxis.valueType.indexOf('DateTime') > -1) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n while (i < len) {\n point = this.dataPoint(i, textMappingName, xName);\n point.x = new Date(DataUtil.parse.parseJson({ val: point.x }).val);\n if (this.xAxis.valueType === 'DateTime') {\n point.xValue = Date.parse(dateParser(dateFormatter(point.x)));\n }\n else {\n this.pushCategoryData(point, i, Date.parse(dateParser(dateFormatter(point.x))).toString());\n }\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n else {\n while (i < len) {\n point = this.dataPoint(i, textMappingName, xName);\n point.xValue = point.x;\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n if (this instanceof Series) {\n if (this.type.indexOf('Spline') > -1 || (this.drawType.indexOf('Spline') > -1 && this.chart.chartAreaType === 'PolarRadar')) {\n var isArea = (this.type.indexOf('Area') > -1 || this.drawType === 'Area');\n this.chart['spline' + (isArea ? 'Area' : '') + 'SeriesModule'].findSplinePoint(this);\n }\n }\n };\n SeriesBase.prototype.pushData = function (point, i) {\n point.index = i;\n point.yValue = point.y;\n // To find the min, max for the axis range.\n this.xMin = Math.min(this.xMin, point.xValue);\n this.xMax = Math.max(this.xMax, point.xValue);\n this.xData.push(point.xValue);\n };\n /** @private */\n SeriesBase.prototype.dataPoint = function (i, textMappingName, xName) {\n var point;\n this.points[i] = new Points();\n point = this.points[i];\n var currentViewData = this.currentViewData;\n point.x = getValue(xName, currentViewData[i]);\n point.high = getValue(this.high, currentViewData[i]);\n point.low = getValue(this.low, currentViewData[i]);\n point.open = getValue(this.open, currentViewData[i]);\n point.close = getValue(this.close, currentViewData[i]);\n point.volume = getValue(this.volume, currentViewData[i]);\n point.interior = getValue(this.pointColorMapping, currentViewData[i]);\n if (this instanceof Series) {\n point.y = getValue(this.yName, currentViewData[i]);\n point.size = getValue(this.size, currentViewData[i]);\n point.text = getValue(textMappingName, currentViewData[i]);\n point.tooltip = getValue(this.tooltipMappingName, currentViewData[i]);\n }\n return point;\n };\n /**\n * To set empty point value based on empty point mode\n * @private\n */\n SeriesBase.prototype.setEmptyPoint = function (point, i) {\n if (!this.findVisibility(point)) {\n point.visible = true;\n return null;\n }\n point.isEmpty = true;\n var mode = this instanceof Series ? this.emptyPointSettings.mode : 'Drop';\n switch (mode) {\n case 'Zero':\n point.visible = true;\n if (this instanceof Series && this.seriesType.indexOf('HighLow') > -1) {\n point.high = point.low = 0;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = point.close = 0;\n }\n }\n else {\n point.y = point.yValue = this.yData[i] = 0;\n }\n break;\n case 'Average':\n if (this instanceof Series) {\n if (this.seriesType.indexOf('HighLow') > -1) {\n point.high = (isNullOrUndefined(point.high) || isNaN(+point.high)) ? this.getAverage(this.high, i) : point.high;\n point.low = (isNullOrUndefined(point.low) || isNaN(+point.low)) ? this.getAverage(this.low, i) : point.low;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = (isNullOrUndefined(point.open) || isNaN(+point.open)) ? this.getAverage(this.open, i) : point.open;\n point.close = (isNullOrUndefined(point.close) || isNaN(+point.close)) ? this.getAverage(this.close, i) :\n point.close;\n }\n }\n else {\n point.y = point.yValue = this.yData[i] = this.getAverage(this.yName, i);\n }\n }\n point.visible = true;\n break;\n case 'Drop':\n case 'Gap':\n this.yData[i] = null;\n point.visible = false;\n break;\n }\n };\n SeriesBase.prototype.findVisibility = function (point) {\n var type = this instanceof Series ? this.seriesType : 'HighLowOpenClose';\n var yValues;\n switch (type) {\n case 'XY':\n this.setXYMinMax(point.yValue);\n this.yData.push(point.yValue);\n if (this instanceof Series && this.type === 'Bubble') {\n this.sizeMax = Math.max(this.sizeMax, (isNullOrUndefined(point.size) || isNaN(+point.size)) ? this.sizeMax\n : point.size);\n }\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.y) || isNaN(+point.y));\n case 'HighLow':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n (isNullOrUndefined(point.high) || isNaN(+point.high));\n case 'HighLowOpenClose':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n (isNullOrUndefined(point.open) || isNaN(+point.open)) || (isNullOrUndefined(point.close) || isNaN(+point.close))\n || (isNullOrUndefined(point.high) || isNaN(+point.high));\n case 'BoxPlot':\n yValues = (point.y || [null]).filter(function (value) {\n return !isNullOrUndefined(value) && !isNaN(value);\n }).sort(function (a, b) {\n return a - b;\n });\n point.y = yValues;\n this.yMin = Math.min(this.yMin, Math.min.apply(Math, yValues));\n this.yMax = Math.max(this.yMax, Math.max.apply(Math, yValues));\n return !yValues.length;\n }\n };\n /**\n * To get Y min max for the provided point seriesType XY\n */\n SeriesBase.prototype.setXYMinMax = function (yValue) {\n this.yMin = Math.min(this.yMin, (isNullOrUndefined(yValue) || isNaN(yValue)) ? this.yMin : yValue);\n this.yMax = Math.max(this.yMax, (isNullOrUndefined(yValue) || isNaN(yValue)) ? this.yMax : yValue);\n };\n /**\n * To get Y min max for the provided point seriesType XY\n */\n SeriesBase.prototype.setHiloMinMax = function (high, low) {\n this.yMin = Math.min(this.yMin, Math.min((isNullOrUndefined(low) || isNaN(low)) ? this.yMin : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMin : high));\n this.yMax = Math.max(this.yMax, Math.max((isNullOrUndefined(low) || isNaN(low)) ? this.yMax : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMax : high));\n };\n /**\n * Finds the type of the series\n * @private\n */\n SeriesBase.prototype.getSeriesType = function () {\n var type;\n if (this instanceof Series) {\n var seriesType = this.chart.chartAreaType === 'PolarRadar' ? this.drawType : this.type;\n if (seriesType) {\n switch (seriesType) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'Hilo':\n type = 'HighLow';\n break;\n case 'HiloOpenClose':\n case 'Candle':\n type = 'HighLowOpenClose';\n break;\n case 'BoxAndWhisker':\n type = 'BoxPlot';\n break;\n default:\n type = 'XY';\n }\n }\n }\n this.seriesType = type;\n };\n /** @private */\n SeriesBase.prototype.pushCategoryData = function (point, index, pointX) {\n if (!this.xAxis.isIndexed) {\n if (this.xAxis.labels.indexOf(pointX) < 0) {\n this.xAxis.labels.push(pointX);\n }\n point.xValue = this.xAxis.labels.indexOf(pointX);\n }\n else {\n this.xAxis.labels[index] ? this.xAxis.labels[index] += ', ' + pointX :\n this.xAxis.labels.push(pointX);\n point.xValue = index;\n }\n };\n /**\n * To find average of given property\n */\n SeriesBase.prototype.getAverage = function (member, i, data) {\n if (data === void 0) { data = this.currentViewData; }\n var previous = data[i - 1] ? (data[i - 1][member] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][member] || 0) : 0;\n return (previous + next) / 2;\n };\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SeriesBase.prototype.refreshDataManager = function (chart) {\n var _this = this;\n this.chart = chart;\n var dateSource = this.dataSource || chart.dataSource;\n if (isNullOrUndefined(this.query) && !isNullOrUndefined(dateSource)) {\n this.dataManagerSuccess({ result: dateSource, count: dateSource.length }, chart, false);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, chart); });\n };\n SeriesBase.prototype.dataManagerSuccess = function (e, chart, isRemoteData) {\n if (isRemoteData === void 0) { isRemoteData = true; }\n this.currentViewData = e.result !== '' ? extend([], e.result, null, true) : [];\n if (this instanceof Series) {\n var argsData = {\n name: seriesRender, series: this, data: this.currentViewData, fill: this.interior\n };\n this.chart.trigger(seriesRender, argsData);\n this.interior = argsData.fill;\n this.currentViewData = argsData.data;\n }\n this.processJsonData();\n this.recordsCount = e.count;\n this.refreshChart(isRemoteData);\n };\n SeriesBase.prototype.refreshChart = function (isRemoteData) {\n var chart = this.chart;\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 1 : 0;\n }\n chart.refreshTechnicalIndicator(this);\n if (this instanceof Series && this.category !== 'TrendLine') {\n for (var _i = 0, _a = this.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n trendline.setDataSource(this, chart);\n }\n }\n //if (chart.visibleSeries.length === (chart.visibleSeriesCount - chart.indicators.length)) {\n if (chart.visibleSeries.length === (chart.visibleSeriesCount)) {\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart });\n }\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 0 : 1;\n }\n };\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"high\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"low\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"open\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"close\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"volume\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"yAxisName\", void 0);\n __decorate([\n Complex(null, Animation)\n ], SeriesBase.prototype, \"animation\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesBase.prototype, \"width\", void 0);\n __decorate([\n Property('0')\n ], SeriesBase.prototype, \"dashArray\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], SeriesBase.prototype, \"query\", void 0);\n __decorate([\n Collection([], ChartSegment)\n ], SeriesBase.prototype, \"segments\", void 0);\n __decorate([\n Property('X')\n ], SeriesBase.prototype, \"segmentAxis\", void 0);\n return SeriesBase;\n}(ChildProperty));\nexport { SeriesBase };\n/**\n * Configures the series in charts.\n */\nvar Series = /** @class */ (function (_super) {\n __extends(Series, _super);\n // tslint:disable-next-line:no-any\n function Series(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n _this.visibleSeriesCount = 0;\n /** @private */\n _this.category = 'Series';\n /** @private */\n _this.isRectSeries = false;\n /** @private */\n _this.drawPoints = [];\n /** @private */\n _this.delayedAnimation = false;\n return _this;\n }\n /**\n * Refresh the axis label.\n * @return {boolean}\n * @private\n */\n Series.prototype.refreshAxisLabel = function () {\n if (this.xAxis.valueType !== 'Category') {\n return null;\n }\n this.xAxis.labels = [];\n for (var _i = 0, _a = this.xAxis.series; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible) {\n item.xMin = Infinity;\n item.xMax = -Infinity;\n for (var _b = 0, _c = item.points; _b < _c.length; _b++) {\n var point = _c[_b];\n item.pushCategoryData(point, point.index, point.x);\n item.xMin = Math.min(item.xMin, point.xValue);\n item.xMax = Math.max(item.xMax, point.xValue);\n }\n }\n }\n };\n /**\n * To get the series collection.\n * @return {void}\n * @private\n */\n Series.prototype.findSeriesCollection = function (column, row, isStack) {\n var seriesCollection = [];\n for (var _i = 0, _a = row.axes; _i < _a.length; _i++) {\n var rowAxis = _a[_i];\n for (var _b = 0, _c = rowAxis.series; _b < _c.length; _b++) {\n var rowSeries = _c[_b];\n for (var _d = 0, _e = column.axes; _d < _e.length; _d++) {\n var axis = _e[_d];\n for (var _f = 0, _g = axis.series; _f < _g.length; _f++) {\n var series = _g[_f];\n if (series === rowSeries && series.visible && this.rectSeriesInChart(series, isStack)) {\n seriesCollection.push(series);\n }\n }\n }\n }\n }\n return seriesCollection;\n };\n /**\n * To get the column type series.\n * @return {void}\n * @private\n */\n Series.prototype.rectSeriesInChart = function (series, isStack) {\n var type = (series.type).toLowerCase();\n return (type.indexOf('column') !== -1 || type.indexOf('bar') !== -1 || type.indexOf('histogram') !== -1 ||\n type.indexOf('hiloopenclose') !== -1 || type.indexOf('candle') !== -1 || type.indexOf('pareto') !== -1 ||\n type.indexOf('hilo') !== -1 || series.drawType.indexOf('Column') !== -1 ||\n type.indexOf('waterfall') !== -1 || type.indexOf('boxandwhisker') !== -1 || isStack);\n };\n /**\n * To calculate the stacked values.\n * @return {void}\n * @private\n */\n Series.prototype.calculateStackedValue = function (isStacking100, chart) {\n var axisSeries;\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.calculateStackingValues(this.findSeriesCollection(columnItem, item, true), isStacking100);\n }\n }\n };\n Series.prototype.calculateStackingValues = function (seriesCollection, isStacking100) {\n var startValues;\n var endValues;\n var yValues = [];\n var lastPositive = [];\n var lastNegative = [];\n var stackingGroup;\n var lastValue;\n var value;\n var frequencies = [];\n if (isStacking100) {\n frequencies = this.findFrequencies(seriesCollection);\n }\n var stackingSeies = [];\n var stackedValues = [];\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n if (series.type.indexOf('Stacking') !== -1 || (series.drawType.indexOf('Stacking') !== -1 &&\n (series.chart.chartAreaType === 'PolarRadar'))) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' : series.stackingGroup;\n if (!lastPositive[stackingGroup]) {\n lastPositive[stackingGroup] = [];\n lastNegative[stackingGroup] = [];\n }\n yValues = series.yData;\n startValues = [];\n endValues = [];\n stackingSeies.push(series);\n for (var j = 0, pointsLength = series.points.length; j < pointsLength; j++) {\n lastValue = 0;\n value = yValues[j];\n if (lastPositive[stackingGroup][series.points[j].xValue] === undefined) {\n lastPositive[stackingGroup][series.points[j].xValue] = 0;\n }\n if (lastNegative[stackingGroup][series.points[j].xValue] === undefined) {\n lastNegative[stackingGroup][series.points[j].xValue] = 0;\n }\n if (isStacking100) {\n value = value / frequencies[stackingGroup][series.points[j].xValue] * 100;\n value = !isNaN(value) ? value : 0;\n series.points[j].percentage = +(value.toFixed(2));\n }\n else {\n stackedValues[j] = stackedValues[j] ? stackedValues[j] + Math.abs(value) : Math.abs(value);\n }\n if (value >= 0) {\n lastValue = lastPositive[stackingGroup][series.points[j].xValue];\n lastPositive[stackingGroup][series.points[j].xValue] += value;\n }\n else {\n lastValue = lastNegative[stackingGroup][series.points[j].xValue];\n lastNegative[stackingGroup][series.points[j].xValue] += value;\n }\n startValues.push(lastValue);\n endValues.push(value + lastValue);\n if (isStacking100 && (endValues[j] > 100)) {\n endValues[j] = 100;\n }\n }\n series.stackedValues = new StackValues(startValues, endValues);\n series.yMin = Math.min.apply(0, startValues);\n series.yMax = Math.max.apply(0, endValues);\n if (series.yMin > Math.min.apply(0, endValues)) {\n series.yMin = (isStacking100) ? -100 : Math.min.apply(0, endValues);\n }\n if (series.yMax < Math.max.apply(0, startValues)) {\n series.yMax = 0;\n }\n }\n }\n this.findPercentageOfStacking(stackingSeies, stackedValues, isStacking100);\n };\n Series.prototype.findPercentageOfStacking = function (stackingSeies, values, isStacking100) {\n for (var _i = 0, stackingSeies_1 = stackingSeies; _i < stackingSeies_1.length; _i++) {\n var item = stackingSeies_1[_i];\n if (isStacking100) {\n return null;\n }\n for (var _a = 0, _b = item.points; _a < _b.length; _a++) {\n var point = _b[_a];\n point.percentage = Math.abs(+(point.y / values[point.index] * 100).toFixed(2));\n }\n }\n };\n Series.prototype.findFrequencies = function (seriesCollection) {\n var frequencies = [];\n var stackingGroup;\n for (var _i = 0, seriesCollection_2 = seriesCollection; _i < seriesCollection_2.length; _i++) {\n var series = seriesCollection_2[_i];\n series.yAxis.isStack100 = series.type.indexOf('100') !== -1 ? true : false;\n if (series.type.indexOf('Stacking') !== -1) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' : series.stackingGroup;\n if (!frequencies[stackingGroup]) {\n frequencies[stackingGroup] = [];\n }\n for (var j = 0, pointsLength = series.points.length; j < pointsLength; j++) {\n if (frequencies[stackingGroup][series.points[j].xValue] === undefined) {\n frequencies[stackingGroup][series.points[j].xValue] = 0;\n }\n if (series.yData[j] > 0) {\n frequencies[stackingGroup][series.points[j].xValue] += series.yData[j];\n }\n else {\n frequencies[stackingGroup][series.points[j].xValue] -= series.yData[j];\n }\n }\n }\n }\n return frequencies;\n };\n /* private dataManagerFailure(e: { result: Object[] }): void {\n this.currentViewData = [];\n this.refreshChart();\n }*/\n /** @private */\n Series.prototype.renderSeries = function (chart) {\n var seriesType = firstToLowerCase(this.type);\n if (seriesType.indexOf('100') !== -1) {\n seriesType = seriesType.replace('100', '');\n }\n if (chart[seriesType + 'SeriesModule']) {\n if (this.category !== 'Indicator' && this.category !== 'TrendLine') {\n this.createSeriesElements(chart);\n }\n chart[seriesType + 'SeriesModule'].render(this, this.xAxis, this.yAxis, chart.requireInvertedAxis);\n if (this.category !== 'Indicator') {\n if (this.errorBar.visible) {\n this.chart.errorBarModule.render(this);\n }\n if (this.marker.dataLabel.visible) {\n chart.dataLabelModule.render(this, this.chart, this.marker.dataLabel);\n }\n this.appendSeriesElement(chart.seriesElements, chart);\n }\n this.performAnimation(chart, seriesType, this.errorBar, this.marker, this.marker.dataLabel);\n }\n };\n /**\n * To create seris element.\n * @return {void}\n * @private\n */\n Series.prototype.createSeriesElements = function (chart) {\n if (this.category !== 'Indicator') {\n var elementId = chart.element.id;\n var xAxisRect = this.xAxis.rect;\n // 8 for extend border value 5 for extend size value\n var explodeValue = this.marker.border.width + 8 + 5;\n var render = chart.renderer;\n var index = this.index === undefined ? this.category : this.index;\n var markerHeight = (this.type === 'Scatter') ? (this.marker.height + explodeValue) / 2 : 0;\n var markerWidth = (this.type === 'Scatter') ? (this.marker.width + explodeValue) / 2 : 0;\n var options = void 0;\n if (chart.chartAreaType === 'PolarRadar') {\n options = new CircleOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, this.clipRect.width / 2 + this.clipRect.x, this.clipRect.height / 2 + this.clipRect.y, chart.radius);\n this.clipRectElement = appendClipElement(chart.redraw, options, render, 'drawCircularClipPath');\n }\n else {\n options = new RectOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: this.clipRect.width + markerWidth * 2,\n height: this.clipRect.height + markerHeight * 2\n });\n this.clipRectElement = appendClipElement(chart.redraw, options, render);\n }\n var transform = void 0;\n transform = chart.chartAreaType === 'Cartesian' ? 'translate(' + this.clipRect.x + ',' + (this.clipRect.y) + ')' : '';\n this.symbolElement = null;\n this.seriesElement = render.createGroup({\n 'id': elementId + 'SeriesGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + elementId + '_ChartSeriesClipRect_' + index + ')'\n });\n this.seriesElement.appendChild(this.clipRectElement);\n }\n };\n /**\n * To append the series.\n * @return {void}\n * @private\n */\n Series.prototype.appendSeriesElement = function (element, chart) {\n var marker = this.marker;\n var dataLabel = marker.dataLabel;\n var redraw = chart.redraw;\n if (this.category !== 'TrendLine') {\n appendChildElement(chart.seriesElements, this.seriesElement, redraw);\n var errorBar = this.errorBar;\n if (errorBar.visible) {\n if (chart.chartAreaType === 'PolarRadar') {\n appendChildElement(chart.seriesElements, this.seriesElement, redraw);\n }\n else {\n appendChildElement(chart.seriesElements, this.errorBarElement, redraw);\n }\n }\n if (this.type === 'Scatter' || this.type === 'Bubble') {\n appendChildElement(chart.seriesElements, this.seriesElement, redraw);\n }\n }\n if (marker.visible && (chart.chartAreaType === 'Cartesian' ||\n ((this.drawType !== 'Scatter') && chart.chartAreaType === 'PolarRadar')) && this.type !== 'Scatter' &&\n this.type !== 'Bubble' && this.type !== 'Candle' && this.type !== 'Hilo' && this.type !== 'HiloOpenClose') {\n appendChildElement(chart.seriesElements, this.symbolElement, redraw);\n }\n if (dataLabel.visible) {\n appendChildElement(chart.dataLabelElements, this.shapeElement, redraw);\n appendChildElement(chart.dataLabelElements, this.textElement, redraw);\n }\n if (chart.dataLabelElements.hasChildNodes()) {\n chart.seriesElements.appendChild(chart.dataLabelElements);\n }\n };\n /**\n * To perform animation for chart series.\n * @return {void}\n * @private\n */\n Series.prototype.performAnimation = function (chart, type, errorBar, marker, dataLabel) {\n if (this.animation.enable && chart.animateSeries) {\n chart[type + 'SeriesModule'].doAnimation(this);\n if (errorBar.visible) {\n chart.errorBarModule.doErrorBarAnimation(this);\n }\n if (marker.visible) {\n chart.markerRender.doMarkerAnimation(this);\n }\n if (dataLabel.visible) {\n chart.dataLabelModule.doDataLabelAnimation(this);\n }\n }\n };\n /**\n * To set border color for empty point\n * @private\n */\n Series.prototype.setPointColor = function (point, color) {\n color = point.interior || color;\n return point.isEmpty ? (this.emptyPointSettings.fill || color) : color;\n };\n /**\n * To set border color for empty point\n * @private\n */\n Series.prototype.setBorderColor = function (point, border) {\n border.width = point.isEmpty ? (this.emptyPointSettings.border.width || border.width) : border.width;\n border.color = point.isEmpty ? (this.emptyPointSettings.border.color || border.color) : border.color;\n return border;\n };\n __decorate([\n Property('')\n ], Series.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"yName\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"drawType\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"isClosed\", void 0);\n __decorate([\n Property('#2ecd71')\n ], Series.prototype, \"bearFillColor\", void 0);\n __decorate([\n Property('#e74c3d')\n ], Series.prototype, \"bullFillColor\", void 0);\n __decorate([\n Property(false)\n ], Series.prototype, \"enableSolidCandles\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"binInterval\", void 0);\n __decorate([\n Property(false)\n ], Series.prototype, \"showNormalDistribution\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"stackingGroup\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"visible\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], Series.prototype, \"border\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"opacity\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"type\", void 0);\n __decorate([\n Complex(null, ErrorBarSettings)\n ], Series.prototype, \"errorBar\", void 0);\n __decorate([\n Complex(null, MarkerSettings)\n ], Series.prototype, \"marker\", void 0);\n __decorate([\n Collection([], Trendline)\n ], Series.prototype, \"trendlines\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"tooltipMappingName\", void 0);\n __decorate([\n Property('SeriesType')\n ], Series.prototype, \"legendShape\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"minRadius\", void 0);\n __decorate([\n Property(3)\n ], Series.prototype, \"maxRadius\", void 0);\n __decorate([\n Property('Natural')\n ], Series.prototype, \"splineType\", void 0);\n __decorate([\n Property(0.5)\n ], Series.prototype, \"cardinalSplineTension\", void 0);\n __decorate([\n Complex(null, EmptyPointSettings)\n ], Series.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"showMean\", void 0);\n __decorate([\n Property('Normal')\n ], Series.prototype, \"boxPlotMode\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"columnWidth\", void 0);\n __decorate([\n Property(0)\n ], Series.prototype, \"columnSpacing\", void 0);\n __decorate([\n Property('#C64E4A')\n ], Series.prototype, \"negativeFillColor\", void 0);\n __decorate([\n Property('#4E81BC')\n ], Series.prototype, \"summaryFillColor\", void 0);\n __decorate([\n Property()\n ], Series.prototype, \"intermediateSumIndexes\", void 0);\n __decorate([\n Property()\n ], Series.prototype, \"sumIndexes\", void 0);\n __decorate([\n Complex({ color: 'black', width: 2 }, Connector)\n ], Series.prototype, \"connector\", void 0);\n __decorate([\n Complex(null, CornerRadius)\n ], Series.prototype, \"cornerRadius\", void 0);\n return Series;\n}(SeriesBase));\nexport { Series };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and dataSource\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n * @private\n */\n function Data(dataSource, query) {\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n * @return {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from chart model\n * @return {void}\n * @private\n */\n Data.prototype.generateQuery = function () {\n var query = this.query.clone();\n return query;\n };\n /**\n * The function used to get dataSource by executing given Query\n * @param {Query} query - A Query that specifies to generate dataSource\n * @return {void}\n * @private\n */\n Data.prototype.getData = function (query) {\n return this.dataManager.executeQuery(query);\n };\n return Data;\n}());\nexport { Data };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { drawSymbol, PathOption, Size } from '../../common/utils/helper';\nimport { Browser, extend, remove } from '@syncfusion/ej2-base';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { withInBounds, PointData, stopTimer } from '../../common/utils/helper';\nimport { colorNameToHex, convertHexToColor } from '../../common/utils/helper';\n/**\n * Marker Module used to render the marker for line type series.\n */\nvar MarkerExplode = /** @class */ (function (_super) {\n __extends(MarkerExplode, _super);\n /**\n * Constructor for the marker module.\n * @private\n */\n function MarkerExplode(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n _this.elementId = chart.element.id;\n return _this;\n }\n /**\n * @hidden\n */\n MarkerExplode.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * @hidden\n */\n /* public removeEventListener(): void {\n if (this.chart.isDestroyed) { return; }\n this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n }*/\n /**\n * @hidden\n */\n MarkerExplode.prototype.mouseUpHandler = function () {\n var chart = this.chart;\n if (chart.isTouch && !chart.crosshair.enable && !this.isSelected(chart)) {\n this.markerMove(true);\n }\n };\n /**\n * @hidden\n */\n MarkerExplode.prototype.mouseMoveHandler = function () {\n var chart = this.chart;\n if ((!chart.crosshair.enable || (chart.tooltip.enable)) && (!chart.isTouch || chart.startMove) && !this.isSelected(chart)) {\n this.markerMove(false);\n }\n };\n MarkerExplode.prototype.markerMove = function (remove) {\n var _this = this;\n var chart = this.chart;\n this.currentPoints = [];\n var data;\n var previous;\n var explodeSeries;\n var series;\n if (!chart.tooltip.shared || !chart.tooltip.enable) {\n data = this.getData();\n series = data.series;\n previous = this.previousPoints[0];\n explodeSeries = series && ((series.type === 'Bubble' || series.drawType === 'Scatter' || series.type === 'Scatter') ||\n (((series.type !== 'Candle') && (series.type !== 'Hilo') && (series.type !== 'HiloOpenClose')) &&\n (series.marker.visible && series.marker.width !== 0 && series.marker.height !== 0)));\n data.lierIndex = this.lierIndex;\n if (data.point && explodeSeries && ((!previous || (previous.point !== data.point)) ||\n (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex))) {\n this.currentPoints.push(data);\n }\n }\n else {\n if (!withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n return null;\n }\n if (chart.tooltip.enable) {\n var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var chartSeries = _a[_i];\n if (!chartSeries.enableTooltip || chartSeries.category === 'Indicator') {\n continue;\n }\n if (chart.chartAreaType === 'Cartesian' && chartSeries.visible) {\n data = this.getClosestX(chart, chartSeries);\n }\n else if (chart.chartAreaType === 'PolarRadar' && chartSeries.visible && pointData.point !== null) {\n data = new PointData(chartSeries.points[pointData.point.index], chartSeries);\n }\n if (data) {\n this.currentPoints.push(data);\n data = null;\n }\n }\n }\n }\n var length = this.previousPoints.length;\n if (this.currentPoints.length > 0) {\n if (length === 0 || (length > 0 && this.previousPoints[0].point !== this.currentPoints[0].point)) {\n if (this.previousPoints.length > 0) {\n this.removeHighlightedMarker();\n }\n var _loop_1 = function (data_1) {\n if ((data_1 && data_1.point) || ((series.type !== 'Candle') &&\n (series.type !== 'Hilo') && (series.type !== 'HiloOpenClose'))) {\n stopTimer(this_1.markerExplode);\n this_1.isRemove = true;\n data_1.point.symbolLocations.map(function (location, index) {\n if (!data_1.series.isRectSeries || data_1.point.marker.visible) {\n _this.drawTrackBall(data_1.series, data_1.point, location, index);\n }\n });\n }\n };\n var this_1 = this;\n for (var _b = 0, _c = this.currentPoints; _b < _c.length; _b++) {\n var data_1 = _c[_b];\n _loop_1(data_1);\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n }\n }\n if (!chart.tooltip.enable && ((this.currentPoints.length === 0 && this.isRemove) || (remove && this.isRemove) ||\n !withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect))) {\n this.isRemove = false;\n this.markerExplode = setTimeout(function () {\n _this.removeHighlightedMarker();\n }, 2000);\n }\n this.currentPoints = [];\n };\n MarkerExplode.prototype.drawTrackBall = function (series, point, location, index) {\n var marker = point.marker;\n var seriesMarker = series.marker;\n var shape = marker.shape || seriesMarker.shape;\n var element = series.symbolElement || series.seriesElement;\n var symbolId = this.elementId + '_Series_' + series.index + '_Point_' + point.index + '_Trackball' +\n (index ? index : '');\n var size = new Size((marker.width || seriesMarker.width) + 5, (marker.height || seriesMarker.height) + 5);\n var border = (marker.border || series.border);\n var explodeSeries = (series.type === 'BoxAndWhisker' || series.type === 'Bubble' || series.type === 'Scatter');\n var borderColor = (border.color && border.color !== 'transparent') ? border.color :\n marker.fill || point.interior || (explodeSeries ? point.color : series.interior);\n var colorValue = convertHexToColor(colorNameToHex(borderColor));\n var borderWidth = marker.border ? marker.border.width : seriesMarker.border.width;\n var markerShadow = series.chart.themeStyle.markerShadow ||\n 'rgba(' + colorValue.r + ',' + colorValue.g + ',' + colorValue.b + ',0.2)';\n for (var i = 0; i < 2; i++) {\n var options = new PathOption(symbolId + '_' + i, i ? (marker.fill || point.color || (explodeSeries ? series.interior : '#ffffff')) : 'transparent', borderWidth + (i ? 0 : 8), i ? borderColor : markerShadow, (marker.opacity || seriesMarker.opacity), null, null);\n var symbol = drawSymbol(location, shape, size, seriesMarker.imageUrl, options, '');\n symbol.setAttribute('style', 'pointer-events:none');\n symbol.setAttribute('class', 'EJ2-Trackball');\n element.appendChild(symbol);\n }\n };\n /**\n * @hidden\n */\n MarkerExplode.prototype.removeHighlightedMarker = function () {\n var elements = document.getElementsByClassName('EJ2-Trackball');\n for (var i = 0, len = elements.length; i < len; i++) {\n remove(elements[0]);\n }\n this.previousPoints = [];\n };\n return MarkerExplode;\n}(ChartData));\nexport { MarkerExplode };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { RectOption, appendChildElement, getElement, appendClipElement } from '../../common/utils/helper';\nimport { findlElement, drawSymbol, PathOption, Size, markerAnimate, CircleOption, } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointRender } from '../../common/model/constants';\nimport { MarkerExplode } from './marker-explode';\nimport { getSaturationColor } from '../../common/utils/helper';\n/**\n * Marker module used to render the marker for line type series.\n */\nvar Marker = /** @class */ (function (_super) {\n __extends(Marker, _super);\n /**\n * Constructor for the marker module.\n * @private\n */\n function Marker(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Render the marker for series.\n * @return {void}\n * @private\n */\n Marker.prototype.render = function (series) {\n var _this = this;\n var redraw = series.chart.redraw;\n this.createElement(series, redraw);\n var _loop_1 = function (point) {\n if (point.visible && point.symbolLocations.length) {\n point.symbolLocations.map(function (location, index) {\n _this.renderMarker(series, point, location, index, redraw);\n });\n }\n };\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n _loop_1(point);\n }\n };\n Marker.prototype.renderMarker = function (series, point, location, index, redraw) {\n var seriesIndex = series.index === undefined ? series.category : series.index;\n var marker = series.marker;\n var border = {\n color: marker.border.color,\n width: marker.border.width\n };\n var borderColor = marker.border.color;\n var symbolId;\n var previousLocation;\n var previousPath;\n var circlePath;\n var shapeOption;\n var isBoxPlot = series.type === 'BoxAndWhisker';\n var fill = marker.fill || (isBoxPlot ? point.interior || series.interior : '#ffffff');\n var argsData;\n var markerElement;\n var parentElement = isBoxPlot ?\n findlElement(series.seriesElement.childNodes, 'Series_' + series.index + '_Point_' + point.index)\n : series.symbolElement;\n border.color = borderColor || series.setPointColor(point, series.interior);\n symbolId = this.elementId + '_Series_' + seriesIndex + '_Point_' + point.index + '_Symbol' +\n (index ? index : '');\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: point.isEmpty ? (series.emptyPointSettings.fill || fill) : fill,\n border: {\n color: series.type === 'BoxAndWhisker' ?\n (!isNullOrUndefined(borderColor) && borderColor !== 'transparent') ? borderColor :\n getSaturationColor(fill, -0.6)\n : border.color,\n width: border.width\n },\n height: marker.height,\n width: marker.width,\n shape: marker.shape\n };\n argsData.border = series.setBorderColor(point, { width: argsData.border.width, color: argsData.border.color });\n if (!series.isRectSeries || series.type === 'BoxAndWhisker') {\n this.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n }\n point.color = argsData.fill;\n if (!argsData.cancel) {\n var y = void 0;\n if (series.type === 'RangeArea' || series.type === 'RangeColumn') {\n y = index ? point.low : point.high;\n }\n else if (isBoxPlot) {\n y = point.outliers[index];\n }\n else {\n y = point.y;\n }\n shapeOption = new PathOption(symbolId, argsData.fill, argsData.border.width, argsData.border.color, marker.opacity, null);\n if (parentElement !== undefined && parentElement !== null) {\n if (redraw && getElement(shapeOption.id)) {\n markerElement = getElement(shapeOption.id);\n circlePath = argsData.shape === 'Circle' ? 'c' : '';\n previousLocation = {\n x: +markerElement.getAttribute(circlePath + 'x'), y: +markerElement.getAttribute(circlePath + 'y')\n };\n previousPath = markerElement.getAttribute('d');\n }\n markerElement = drawSymbol(location, argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + y.toString());\n appendChildElement(parentElement, markerElement, redraw, true, circlePath + 'x', circlePath + 'y', previousLocation, previousPath);\n }\n point.marker = {\n border: argsData.border,\n fill: argsData.fill,\n height: argsData.height,\n visible: true,\n shape: argsData.shape,\n width: argsData.width\n };\n }\n else {\n location = null;\n point.marker = {\n visible: false\n };\n }\n };\n Marker.prototype.createElement = function (series, redraw) {\n var markerClipRect;\n var marker = series.marker;\n // 8 for extend border value 5 for extend size value\n var explodeValue = marker.border.width + 8 + 5;\n var render = series.chart.renderer;\n var transform;\n var index = series.index === undefined ? series.category : series.index;\n var options;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.visible) {\n var markerHeight = (marker.height + explodeValue) / 2;\n var markerWidth = (marker.width + explodeValue) / 2;\n if (series.chart.chartAreaType === 'Cartesian') {\n options = new RectOption(this.elementId + '_ChartMarkerClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2,\n height: series.clipRect.height + markerHeight * 2\n });\n markerClipRect = appendClipElement(redraw, options, render);\n }\n else {\n options = new CircleOption(this.elementId + '_ChartMarkerClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, series.clipRect.width / 2 + series.clipRect.x, series.clipRect.height / 2 + series.clipRect.y, series.chart.radius + Math.max(markerHeight, markerWidth));\n markerClipRect = appendClipElement(redraw, options, render, 'drawCircularClipPath');\n }\n options = {\n 'id': this.elementId + 'SymbolGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.elementId + '_ChartMarkerClipRect_' + index + ')'\n };\n series.symbolElement = render.createGroup(options);\n series.symbolElement.appendChild(markerClipRect);\n }\n };\n Marker.prototype.getRangeLowPoint = function (region, series) {\n var x = region.x;\n var y = region.y;\n if (series.chart.requireInvertedAxis) {\n y += region.height / 2;\n x += series.yAxis.isInversed ? region.width : 0;\n }\n else {\n y += series.yAxis.isInversed ? 0 : region.height;\n x += region.width / 2;\n }\n return { x: x, y: y };\n };\n /**\n * Animates the marker.\n * @return {void}.\n * @private\n */\n Marker.prototype.doMarkerAnimation = function (series) {\n if (!(series.type === 'Scatter' || series.type === 'Bubble' || series.type === 'Candle' || series.type === 'Hilo' ||\n series.type === 'HiloOpenClose' || (series.chart.chartAreaType === 'PolarRadar' && (series.drawType === 'Scatter')))) {\n var markerElements = series.symbolElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var j = 1;\n var incFactor = (series.type === 'RangeArea' || series.type === 'RangeColumn') ? 2 : 1;\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations.length || !markerElements[j]) {\n continue;\n }\n markerAnimate(markerElements[j], delay, 200, series, i, series.points[i].symbolLocations[0], false);\n if (incFactor === 2) {\n var lowPoint = this.getRangeLowPoint(series.points[i].regions[0], series);\n markerAnimate(markerElements[j + 1], delay, 200, series, i, lowPoint, false);\n }\n j += incFactor;\n }\n }\n };\n return Marker;\n}(MarkerExplode));\nexport { Marker };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\nimport { Theme } from '../model/theme';\nimport { Size, Rect, subtractThickness, Thickness, drawSymbol, measureText, ChartLocation, PathOption } from '../utils/helper';\nimport { RectOption, TextOption, textElement, stringToNumber } from '../utils/helper';\nimport { removeElement, showTooltip, getElement, appendChildElement } from '../utils/helper';\n/**\n * Configures the location for the legend.\n */\nvar Location = /** @class */ (function (_super) {\n __extends(Location, _super);\n function Location() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Location.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Location.prototype, \"y\", void 0);\n return Location;\n}(ChildProperty));\nexport { Location };\n/**\n * Configures the legends in charts.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Location)\n ], LegendSettings.prototype, \"location\", void 0);\n __decorate([\n Property('Auto')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property(8)\n ], LegendSettings.prototype, \"padding\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Complex({}, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Property(5)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], LegendSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"description\", void 0);\n __decorate([\n Property(3)\n ], LegendSettings.prototype, \"tabIndex\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Legend base class for Chart and Accumulation chart.\n * @private\n */\nvar BaseLegend = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function BaseLegend(chart) {\n this.rowCount = 0; // legend row counts per page \n this.columnCount = 0; // legend column counts per page \n this.pageButtonSize = 8;\n this.pageXCollections = []; // pages of x locations\n this.maxColumns = 0;\n this.isTrimmed = false;\n this.maxWidth = 0;\n this.currentPage = 1;\n this.chart = chart;\n this.legend = chart.legendSettings;\n this.legendID = chart.element.id + '_chart_legend';\n this.isChartControl = (chart.getModuleName() === 'chart');\n }\n /**\n * Calculate the bounds for the legends.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.calculateLegendBounds = function (rect, availableSize) {\n var legend = this.legend;\n this.getPosition(legend.position, availableSize);\n this.legendBounds = new Rect(rect.x, rect.y, 0, 0);\n this.isVertical = (this.position === 'Left' || this.position === 'Right');\n if (this.isVertical) {\n this.legendBounds.height = stringToNumber(legend.height, availableSize.height - (rect.y - this.chart.margin.top)) || rect.height;\n this.legendBounds.width = stringToNumber(legend.width || '20%', availableSize.width);\n }\n else {\n this.legendBounds.width = stringToNumber(legend.width, availableSize.width) || rect.width;\n this.legendBounds.height = stringToNumber(legend.height || '20%', availableSize.height);\n }\n this.library.getLegendBounds(availableSize, this.legendBounds, legend);\n this.getLocation(this.position, legend.alignment, this.legendBounds, rect, availableSize);\n };\n /**\n * To find legend position based on available size for chart and accumulation chart\n */\n BaseLegend.prototype.getPosition = function (position, availableSize) {\n if (this.isChartControl) {\n this.position = (position !== 'Auto') ? position : 'Bottom';\n }\n else {\n if (position === 'Auto' && this.chart.visibleSeries &&\n (this.chart.visibleSeries[0].type === 'Funnel' || this.chart.visibleSeries[0].type === 'Pyramid')) {\n position = 'Top';\n }\n this.position = (position !== 'Auto') ? position :\n (availableSize.width > availableSize.height ? 'Right' : 'Bottom');\n }\n };\n /**\n * To set bounds for chart and accumulation chart\n */\n BaseLegend.prototype.setBounds = function (computedWidth, computedHeight, legend, legendBounds) {\n computedWidth = computedWidth < legendBounds.width ? computedWidth : legendBounds.width;\n computedHeight = computedHeight < legendBounds.height ? computedHeight : legendBounds.height;\n legendBounds.width = !legend.width ? computedWidth : legendBounds.width;\n legendBounds.height = !legend.height ? computedHeight : legendBounds.height;\n this.rowCount = Math.max(1, Math.ceil((legendBounds.height - legend.padding) / (this.maxItemHeight + legend.padding)));\n };\n /**\n * To find legend location based on position, alignment for chart and accumulation chart\n */\n BaseLegend.prototype.getLocation = function (position, alignment, legendBounds, rect, availableSize) {\n var padding = this.legend.border.width;\n var legendHeight = legendBounds.height + padding;\n var legendWidth = legendBounds.width + padding;\n var marginBottom = this.chart.margin.bottom;\n if (position === 'Bottom') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + (rect.height - legendHeight) + padding;\n subtractThickness(rect, new Thickness(0, 0, 0, legendHeight));\n }\n else if (position === 'Top') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + padding;\n subtractThickness(rect, new Thickness(0, 0, legendHeight, 0));\n }\n else if (position === 'Right') {\n legendBounds.x = rect.x + (rect.width - legendBounds.width);\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n subtractThickness(rect, new Thickness(0, legendWidth, 0, 0));\n }\n else if (position === 'Left') {\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n subtractThickness(rect, new Thickness(legendWidth, 0, 0, 0));\n }\n else {\n legendBounds.x = this.legend.location.x;\n legendBounds.y = this.legend.location.y;\n subtractThickness(rect, new Thickness(0, 0, 0, 0));\n }\n };\n /**\n * To find legend alignment for chart and accumulation chart\n */\n BaseLegend.prototype.alignLegend = function (start, size, legendSize, alignment) {\n switch (alignment) {\n case 'Far':\n start = (size - legendSize) - start;\n break;\n case 'Center':\n start = ((size - legendSize) / 2);\n break;\n }\n return start;\n };\n /**\n * Renders the legend.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.renderLegend = function (chart, legend, legendBounds, redraw) {\n var firstLegend = this.findFirstLegendPosition(this.legendCollections);\n var padding = legend.padding;\n this.maxItemHeight = Math.max(this.legendCollections[0].textSize.height, legend.shapeHeight);\n var legendGroup = chart.renderer.createGroup({ id: this.legendID + '_g' });\n var legendTranslateGroup = this.createLegendElements(chart, legendBounds, legendGroup, legend, this.legendID, redraw);\n if (firstLegend !== this.legendCollections.length) {\n var legendSeriesGroup = void 0; // legendItem group for each series group element\n var start = void 0; // starting shape center x,y position && to resolve lint error used new line for declaration\n start = new ChartLocation(legendBounds.x + padding + (legend.shapeWidth / 2), legendBounds.y + padding + this.maxItemHeight / 2);\n var textOptions = new TextOption('', start.x, start.y, 'start');\n // initialization for totalPages legend click totalpage again calculate\n this.totalPages = this.isChartControl ? this.totalPages : 0;\n var textPadding = legend.shapePadding + padding + legend.shapeWidth;\n var count = 0;\n this.pageXCollections = [];\n this.legendCollections[firstLegend].location = start;\n var previousLegend = this.legendCollections[firstLegend];\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n if (legendOption.render && legendOption.text !== '') {\n legendSeriesGroup = chart.renderer.createGroup({\n id: this.legendID + this.generateId(legendOption, '_g_', count)\n });\n legendSeriesGroup.setAttribute('tabindex', legend.tabIndex.toString());\n legendSeriesGroup.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + legendOption.text + ' series');\n this.library.getRenderPoint(legendOption, start, textPadding, previousLegend, legendBounds, count, firstLegend);\n this.renderSymbol(legendOption, legendSeriesGroup, count);\n this.renderText(chart, legendOption, legendSeriesGroup, textOptions, count);\n legendSeriesGroup.setAttribute('style', 'cursor: ' + ((!legend.toggleVisibility && chart.selectionMode === 'None') ? 'auto' : 'pointer'));\n legendTranslateGroup.appendChild(legendSeriesGroup);\n previousLegend = legendOption;\n }\n count++;\n }\n if (this.isPaging) {\n this.renderPagingElements(chart, legendBounds, textOptions, legendGroup);\n }\n else {\n this.totalPages = 1;\n }\n }\n appendChildElement(chart.svgObject, legendGroup, redraw);\n };\n /**\n * To find first valid legend text index for chart and accumulation chart\n */\n BaseLegend.prototype.findFirstLegendPosition = function (legendCollection) {\n var count = 0;\n for (var _i = 0, legendCollection_1 = legendCollection; _i < legendCollection_1.length; _i++) {\n var legend = legendCollection_1[_i];\n if (legend.render && legend.text !== '') {\n break;\n }\n count++;\n }\n return count;\n };\n /**\n * To create legend rendering elements for chart and accumulation chart\n */\n BaseLegend.prototype.createLegendElements = function (chart, legendBounds, legendGroup, legend, id, redraw) {\n var padding = legend.padding;\n var options = new RectOption(id + '_element', legend.background, legend.border, legend.opacity, legendBounds);\n legendGroup.appendChild(chart.renderer.drawRectangle(options));\n var legendItemsGroup = chart.renderer.createGroup({ id: id + '_collections' });\n legendGroup.appendChild(legendItemsGroup);\n this.legendTranslateGroup = chart.renderer.createGroup({ id: id + '_translate_g' });\n legendItemsGroup.appendChild(this.legendTranslateGroup);\n var clippath = chart.renderer.createClipPath({ id: id + '_clipPath' });\n options.y += padding;\n options.id += '_clipPath_rect';\n options.width = (!this.isChartControl && this.isVertical) ? this.maxWidth - padding : legendBounds.width;\n this.clipRect = chart.renderer.drawRectangle(options);\n clippath.appendChild(this.clipRect);\n appendChildElement(chart.svgObject, clippath, redraw);\n legendItemsGroup.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n return this.legendTranslateGroup;\n };\n /**\n * To render legend symbols for chart and accumulation chart\n */\n BaseLegend.prototype.renderSymbol = function (legendOption, group, i) {\n var symbolColor = legendOption.visible ? legendOption.fill : '#D3D3D3';\n var shape = (legendOption.shape === 'SeriesType') ? legendOption.type : legendOption.shape;\n shape = shape === 'Scatter' ? legendOption.markerShape : shape;\n var strokewidth = (legendOption.shape === 'HorizontalLine') ? (this.legend.shapeHeight / 10) :\n ((legendOption.shape === 'VerticalLine') ? (this.legend.shapeWidth / 10) : 1);\n var symbolOption = new PathOption(this.legendID + this.generateId(legendOption, '_shape_', i), symbolColor, strokewidth, symbolColor, 1, '', '');\n group.appendChild(drawSymbol(legendOption.location, shape, new Size(this.legend.shapeWidth, this.legend.shapeHeight), '', symbolOption, 'Click to show or hide the ' + legendOption.text + ' series'));\n if (shape === 'Line' && legendOption.markerVisibility && legendOption.markerShape !== 'Image' ||\n legendOption.type === 'Doughnut') {\n symbolOption.id = this.legendID + this.generateId(legendOption, '_shape_marker_', i);\n shape = legendOption.type === 'Doughnut' ? 'Circle' : legendOption.markerShape;\n symbolOption.fill = legendOption.type === 'Doughnut' ? '#FFFFFF' : symbolOption.fill;\n group.appendChild(drawSymbol(legendOption.location, shape, new Size(this.legend.shapeWidth / 2, this.legend.shapeHeight / 2), '', symbolOption, 'Click to show or hide the ' + legendOption.text + ' series'));\n }\n };\n /**\n * To render legend text for chart and accumulation chart\n */\n BaseLegend.prototype.renderText = function (chart, legendOption, group, textOptions, i) {\n var legend = chart.legendSettings;\n var hiddenColor = '#D3D3D3';\n textOptions.id = this.legendID + this.generateId(legendOption, '_text_', i);\n var fontcolor = legendOption.visible ? legend.textStyle.color || chart.themeStyle.legendLabel : hiddenColor;\n textOptions.text = legendOption.text;\n textOptions.x = legendOption.location.x + (legend.shapeWidth / 2) + legend.shapePadding;\n textOptions.y = legendOption.location.y + this.maxItemHeight / 4;\n var element = textElement(textOptions, legend.textStyle, fontcolor, group);\n element.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + legendOption.text + ' series');\n };\n /**\n * To render legend paging elements for chart and accumulation chart\n */\n BaseLegend.prototype.renderPagingElements = function (chart, bounds, textOption, legendGroup) {\n var paginggroup = chart.renderer.createGroup({ id: this.legendID + '_navigation' });\n legendGroup.appendChild(paginggroup);\n var grayColor = '#545454';\n var legend = chart.legendSettings; // to solve parameter lint error, legend declaration is here\n var padding = 8; // const padding for paging elements\n if (this.isChartControl || !this.isVertical) {\n this.totalPages = Math.ceil(this.totalPages / Math.max(1, this.rowCount - 1));\n }\n else {\n this.totalPages = Math.ceil(this.totalPages / this.maxColumns);\n }\n var symbolOption = new PathOption(this.legendID + '_pageup', 'transparent', 5, grayColor, 1, '', '');\n var iconSize = this.pageButtonSize;\n paginggroup.setAttribute('style', 'cursor: pointer');\n // Page left arrow drawing calculation started here\n this.clipPathHeight = (this.rowCount - 1) * (this.maxItemHeight + legend.padding);\n this.clipRect.setAttribute('height', this.clipPathHeight.toString());\n var x = bounds.x + iconSize / 2;\n var y = bounds.y + this.clipPathHeight + ((bounds.height - this.clipPathHeight) / 2);\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'LeftArrow', new Size(iconSize, iconSize), '', symbolOption, 'LeftArrow'));\n // Page numbering rendering calculation started here\n textOption.x = x + (iconSize / 2) + padding;\n var size = measureText(this.totalPages + '/' + this.totalPages, legend.textStyle);\n textOption.y = y + (size.height / 4);\n textOption.id = this.legendID + '_pagenumber';\n textOption.text = '1/' + this.totalPages;\n var pageTextElement = textElement(textOption, legend.textStyle, legend.textStyle.color, paginggroup);\n // Page right arrow rendering calculation started here\n x = (textOption.x + padding + (iconSize / 2) + size.width);\n symbolOption.id = this.legendID + '_pagedown';\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'RightArrow', new Size(iconSize, iconSize), '', symbolOption, 'RightArrow'));\n // placing the navigation buttons and page numbering in legend right corner\n paginggroup.setAttribute('transform', 'translate(' + (bounds.width - (2 * (iconSize + padding) +\n padding + size.width)) + ', ' + 0 + ')');\n this.translatePage(pageTextElement, this.currentPage - 1, this.currentPage);\n };\n /**\n * To translate legend pages for chart and accumulation chart\n */\n BaseLegend.prototype.translatePage = function (pagingText, page, pageNumber) {\n var size = (this.clipPathHeight) * page;\n var translate = 'translate(0,-' + size + ')';\n if (!this.isChartControl && this.isVertical) {\n var pageLength = page * this.maxColumns;\n size = this.pageXCollections[page * this.maxColumns] - this.legendBounds.x;\n size = size < 0 ? 0 : size; // to avoid small pixel variation\n translate = 'translate(-' + size + ',0)';\n }\n this.legendTranslateGroup.setAttribute('transform', translate);\n pagingText.textContent = (pageNumber) + '/' + this.totalPages;\n this.currentPage = pageNumber;\n };\n /**\n * To change legend pages for chart and accumulation chart\n */\n BaseLegend.prototype.changePage = function (event, pageUp) {\n var pageText = document.getElementById(this.legendID + '_pagenumber');\n var page = parseInt(pageText.textContent.split('/')[0], 10);\n if (pageUp && page > 1) {\n this.translatePage(pageText, (page - 2), (page - 1));\n }\n else if (!pageUp && page < this.totalPages) {\n this.translatePage(pageText, page, (page + 1));\n }\n };\n /**\n * To find legend elements id based on chart or accumulation chart\n * @private\n */\n BaseLegend.prototype.generateId = function (option, prefix, count) {\n if (this.isChartControl) {\n return prefix + count;\n }\n else {\n return prefix + option.pointIndex;\n }\n };\n /**\n * To show or hide trimmed text tooltip for legend.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.move = function (event) {\n var _this = this;\n var x = this.chart.mouseX;\n var y = this.chart.mouseY;\n if (event.target.textContent.indexOf('...') > -1) {\n var targetId = event.target.id.split(this.legendID + '_text_');\n if (targetId.length === 2) {\n var index = parseInt(targetId[1], 10);\n var element = this.chart.element;\n if (!isNaN(index)) {\n if (this.chart.isTouch) {\n removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n }\n if (this.isChartControl) {\n showTooltip(this.chart.series[index].name, x, y, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n }\n else {\n showTooltip(this.chart.visibleSeries[0].points[index].x.toString(), x + 10, y + 10, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n }\n }\n }\n }\n else {\n removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n }\n if (this.chart.isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(function () { removeElement(_this.chart.element.id + '_EJ2_Legend_Tooltip'); }, 1000);\n }\n };\n return BaseLegend;\n}());\nexport { BaseLegend };\n/**\n * Class for legend options\n * @private\n */\nvar LegendOptions = /** @class */ (function () {\n function LegendOptions(text, fill, shape, visible, type, markerShape, markerVisibility, pointIndex, seriesIndex) {\n this.location = { x: 0, y: 0 };\n this.text = text;\n this.fill = fill;\n this.shape = shape;\n this.visible = visible;\n this.type = type;\n this.markerVisibility = markerVisibility;\n this.markerShape = markerShape;\n this.pointIndex = pointIndex;\n this.seriesIndex = seriesIndex;\n }\n return LegendOptions;\n}());\nexport { LegendOptions };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, Complex } from '@syncfusion/ej2-base';\nimport { Connector } from '../../common/model/base';\nimport { SeriesBase } from '../series/chart-series';\nimport { Rect, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Defines how to represent the market trend using technical indicators\n */\nvar TechnicalIndicator = /** @class */ (function (_super) {\n __extends(TechnicalIndicator, _super);\n function TechnicalIndicator() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private */\n TechnicalIndicator.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.xData = series.xData;\n this.yData = series.yData;\n this.points = series.points;\n }\n var type = firstToLowerCase(this.type);\n chart[type + 'IndicatorModule'].initDataSource(this, chart);\n chart.visibleSeriesCount += this.targetSeries.length;\n };\n __decorate([\n Property('Sma')\n ], TechnicalIndicator.prototype, \"type\", void 0);\n __decorate([\n Property(14)\n ], TechnicalIndicator.prototype, \"period\", void 0);\n __decorate([\n Property(14)\n ], TechnicalIndicator.prototype, \"kPeriod\", void 0);\n __decorate([\n Property(3)\n ], TechnicalIndicator.prototype, \"dPeriod\", void 0);\n __decorate([\n Property(80)\n ], TechnicalIndicator.prototype, \"overBought\", void 0);\n __decorate([\n Property(20)\n ], TechnicalIndicator.prototype, \"overSold\", void 0);\n __decorate([\n Property(2)\n ], TechnicalIndicator.prototype, \"standardDeviation\", void 0);\n __decorate([\n Property('Close')\n ], TechnicalIndicator.prototype, \"field\", void 0);\n __decorate([\n Property(12)\n ], TechnicalIndicator.prototype, \"slowPeriod\", void 0);\n __decorate([\n Property(26)\n ], TechnicalIndicator.prototype, \"fastPeriod\", void 0);\n __decorate([\n Property(true)\n ], TechnicalIndicator.prototype, \"showZones\", void 0);\n __decorate([\n Complex({ color: '#ff9933', width: 2 }, Connector)\n ], TechnicalIndicator.prototype, \"macdLine\", void 0);\n __decorate([\n Property('Both')\n ], TechnicalIndicator.prototype, \"macdType\", void 0);\n __decorate([\n Property('#2ecd71')\n ], TechnicalIndicator.prototype, \"macdPositiveColor\", void 0);\n __decorate([\n Property('#e74c3d')\n ], TechnicalIndicator.prototype, \"macdNegativeColor\", void 0);\n __decorate([\n Property('rgba(211,211,211,0.25)')\n ], TechnicalIndicator.prototype, \"bandColor\", void 0);\n __decorate([\n Complex({ color: '#ffb735', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"upperLine\", void 0);\n __decorate([\n Complex({ color: '#f2ec2f', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"lowerLine\", void 0);\n __decorate([\n Complex({ color: '#f2ec2f', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"periodLine\", void 0);\n __decorate([\n Property('')\n ], TechnicalIndicator.prototype, \"seriesName\", void 0);\n return TechnicalIndicator;\n}(SeriesBase));\nexport { TechnicalIndicator };\n","/**\n * Dictionary.ts class for EJ2-PDF\n * @private\n * @hidden\n */\nimport { defaultToString } from './utils';\n/**\n * @private\n * @hidden\n */\nvar Dictionary = /** @class */ (function () {\n /**\n * @private\n * @hidden\n */\n function Dictionary(toStringFunction) {\n this.table = {};\n this.nElements = 0;\n this.toStr = toStringFunction || defaultToString;\n }\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.getValue = function (key) {\n var pair = this.table['$' + this.toStr(key)];\n if (typeof pair === 'undefined') {\n return undefined;\n }\n return pair.value;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.setValue = function (key, value) {\n // if (typeof key === 'undefined' || typeof value === 'undefined') {\n // return undefined;\n // }\n var ret;\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement === 'undefined') {\n this.nElements++;\n ret = undefined;\n // }\n this.table[k] = {\n key: key,\n value: value\n };\n return ret;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.remove = function (key) {\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement !== 'undefined') {\n delete this.table[k];\n this.nElements--;\n return previousElement.value;\n // }\n // return undefined;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.keys = function () {\n var keysArray = [];\n var namesOfKeys = Object.keys(this.table);\n for (var index1 = 0; index1 < namesOfKeys.length; index1++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfKeys[index1])) {\n var pair1 = this.table[namesOfKeys[index1]];\n keysArray.push(pair1.key);\n // }\n }\n return keysArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.values = function () {\n var valuesArray = [];\n var namesOfValues = Object.keys(this.table);\n for (var index2 = 0; index2 < namesOfValues.length; index2++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfValues[index2])) {\n var pair2 = this.table[namesOfValues[index2]];\n valuesArray.push(pair2.value);\n // }\n }\n return valuesArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.containsKey = function (key) {\n var retutnValue = true;\n if (typeof this.getValue(key) === 'undefined') {\n retutnValue = true;\n }\n else {\n retutnValue = false;\n }\n return !retutnValue;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.clear = function () {\n this.table = {};\n this.nElements = 0;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.size = function () {\n return this.nElements;\n };\n return Dictionary;\n}()); // End of dictionary\nexport { Dictionary };\n","/**\n * `PdfName` class is used to perform name (element names) related primitive operations.\n * @private\n */\nvar PdfName = /** @class */ (function () {\n function PdfName(value) {\n /**\n * `Start symbol` of the name object.\n * @default /\n * @private\n */\n this.stringStartMark = '/';\n /**\n * `Value` of the element.\n * @private\n */\n this.internalValue = '';\n /**\n * Indicates if the object is currently in `saving state or not`.\n * @default false\n * @private\n */\n this.isSaving6 = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position6 = -1;\n this.internalValue = this.normalizeValue(value);\n }\n Object.defineProperty(PdfName.prototype, \"status\", {\n //property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status6;\n },\n set: function (value) {\n this.status6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving6;\n },\n set: function (value) {\n this.isSaving6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index6;\n },\n set: function (value) {\n this.index6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position6;\n },\n set: function (value) {\n this.position6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the object.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n set: function (value) {\n // if (value !== this.value) {\n var val = value;\n if (value !== null && value.length > 0) {\n // val = (value.substring(0, 1) === this.stringStartMark) ? value.substring(1) : value;\n val = value;\n this.internalValue = this.normalizeValue(val);\n }\n else {\n this.internalValue = val;\n }\n // }\n },\n enumerable: true,\n configurable: true\n });\n //public methods\n /**\n * `Saves` the name using the specified writer.\n * @private\n */\n PdfName.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.toString());\n };\n /**\n * Gets `string` representation of the primitive.\n * @private\n */\n PdfName.prototype.toString = function () {\n return (this.stringStartMark + this.escapeString(this.value));\n };\n /**\n * Creates a `copy of PdfName`.\n * @private\n */\n PdfName.prototype.clone = function (crossTable) {\n var newName = new PdfName();\n newName.value = this.internalValue;\n return newName;\n };\n /**\n * Replace some characters with its `escape sequences`.\n * @private\n */\n PdfName.prototype.escapeString = function (stringValue) {\n // if (str === null) {\n // throw new Error('ArgumentNullException : str');\n // }\n // if (str === '') {\n // return str;\n // }\n var result = '';\n var len = 0;\n for (var i = 0, len_1 = stringValue.length; i < len_1; i++) {\n var ch = stringValue[i];\n var index = PdfName.delimiters.indexOf(ch);\n // switch (ch) {\n // case '\\r' :\n // result = result + '\\\\r';\n // break;\n // case '\\n' :\n // result = result + '\\n';\n // break;\n // case '(' :\n // case ')' :\n // case '\\\\' :\n // //result.Append( '\\\\' ).Append( ch );\n // result = result + ch;\n // break;\n // default :\n // result = result + ch;\n // break;\n // }\n result = result + ch;\n }\n return result;\n };\n //methiods\n /**\n * Replace a symbol with its code with the precedence of the `sharp sign`.\n * @private\n */\n PdfName.prototype.normalizeValue = function (value, c) {\n // if (typeof c === undefined) {\n // let str : string = value;\n // for (let i : number = 0; i < PdfName.replacements.length; i++) {\n // str = this.normalizeValue(str, c);\n // }\n // return str;\n // } else {\n var strFormat = '#{0:X}';\n //return value.replace(c.toString(),String.format(strFormat,c));\n return value;\n // }\n };\n /**\n * PDF `special characters`.\n * @private\n */\n PdfName.delimiters = '()<>[]{}/%}';\n /**\n * The symbols that are not allowed in PDF names and `should be replaced`.\n * @private\n */\n PdfName.replacements = [' ', '\\t', '\\n', '\\r'];\n return PdfName;\n}());\nexport { PdfName };\n","/**\n * PdfOperators.ts class for EJ2-PDF\n * Class of string PDF common operators.\n * @private\n */\nvar Operators = /** @class */ (function () {\n /**\n * Create an instance of `PdfOperator` class.\n * @private\n */\n function Operators() {\n /**\n * Specifies the value of `test`.\n * @private\n */\n this.forTest = 'test';\n this.forTest = Operators.obj;\n }\n /**\n * Specifies the value of `obj`.\n * @private\n */\n Operators.obj = 'obj';\n /**\n * Specifies the value of `endObj`.\n * @private\n */\n Operators.endObj = 'endobj';\n /**\n * Specifies the value of `R`.\n * @private\n */\n Operators.r = 'R';\n /**\n * Specifies the value of ` `.\n * @private\n */\n Operators.whiteSpace = ' ';\n /**\n * Specifies the value of `/`.\n * @private\n */\n Operators.slash = '/';\n /**\n * Specifies the value of `\\r\\n`.\n * @private\n */\n Operators.newLine = '\\r\\n';\n /**\n * Specifies the value of `stream`.\n * @private\n */\n Operators.stream = 'stream';\n /**\n * Specifies the value of `endStream`.\n * @private\n */\n Operators.endStream = 'endstream';\n /**\n * Specifies the value of `xref`.\n * @private\n */\n Operators.xref = 'xref';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.f = 'f';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.n = 'n';\n /**\n * Specifies the value of `trailer`.\n * @private\n */\n Operators.trailer = 'trailer';\n /**\n * Specifies the value of `startxref`.\n * @private\n */\n Operators.startxref = 'startxref';\n /**\n * Specifies the value of `eof`.\n * @private\n */\n Operators.eof = '%%EOF';\n /**\n * Specifies the value of `header`.\n * @private\n */\n Operators.header = '%PDF-1.5';\n /**\n * Specifies the value of `beginText`.\n * @private\n */\n Operators.beginText = 'BT';\n /**\n * Specifies the value of `endText`.\n * @private\n */\n Operators.endText = 'ET';\n /**\n * Specifies the value of `m`.\n * @private\n */\n Operators.beginPath = 'm';\n /**\n * Specifies the value of `l`.\n * @private\n */\n Operators.appendLineSegment = 'l';\n /**\n * Specifies the value of `S`.\n * @private\n */\n Operators.stroke = 'S';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.fill = 'f';\n /**\n * Specifies the value of `f*`.\n * @private\n */\n Operators.fillEvenOdd = 'f*';\n /**\n * Specifies the value of `B`.\n * @private\n */\n Operators.fillStroke = 'B';\n /**\n * Specifies the value of `B*`.\n * @private\n */\n Operators.fillStrokeEvenOdd = 'B*';\n /**\n * Specifies the value of `c`.\n * @private\n */\n Operators.appendbeziercurve = 'c';\n /**\n * Specifies the value of `re`.\n * @private\n */\n Operators.appendRectangle = 're';\n /**\n * Specifies the value of `q`.\n * @private\n */\n Operators.saveState = 'q';\n /**\n * Specifies the value of `Q`.\n * @private\n */\n Operators.restoreState = 'Q';\n /**\n * Specifies the value of `Do`.\n * @private\n */\n Operators.paintXObject = 'Do';\n /**\n * Specifies the value of `cm`.\n * @private\n */\n Operators.modifyCtm = 'cm';\n /**\n * Specifies the value of `Tm`.\n * @private\n */\n Operators.modifyTM = 'Tm';\n /**\n * Specifies the value of `w`.\n * @private\n */\n Operators.setLineWidth = 'w';\n /**\n * Specifies the value of `J`.\n * @private\n */\n Operators.setLineCapStyle = 'J';\n /**\n * Specifies the value of `j`.\n * @private\n */\n Operators.setLineJoinStyle = 'j';\n /**\n * Specifies the value of `d`.\n * @private\n */\n Operators.setDashPattern = 'd';\n /**\n * Specifies the value of `i`.\n * @private\n */\n Operators.setFlatnessTolerance = 'i';\n /**\n * Specifies the value of `h`.\n * @private\n */\n Operators.closePath = 'h';\n /**\n * Specifies the value of `s`.\n * @private\n */\n Operators.closeStrokePath = 's';\n /**\n * Specifies the value of `b`.\n * @private\n */\n Operators.closeFillStrokePath = 'b';\n /**\n * Specifies the value of `setCharacterSpace`.\n * @private\n */\n Operators.setCharacterSpace = 'Tc';\n /**\n * Specifies the value of `setWordSpace`.\n * @private\n */\n Operators.setWordSpace = 'Tw';\n /**\n * Specifies the value of `setHorizontalScaling`.\n * @private\n */\n Operators.setHorizontalScaling = 'Tz';\n /**\n * Specifies the value of `setTextLeading`.\n * @private\n */\n Operators.setTextLeading = 'TL';\n /**\n * Specifies the value of `setFont`.\n * @private\n */\n Operators.setFont = 'Tf';\n /**\n * Specifies the value of `setRenderingMode`.\n * @private\n */\n Operators.setRenderingMode = 'Tr';\n /**\n * Specifies the value of `setTextRise`.\n * @private\n */\n Operators.setTextRise = 'Ts';\n /**\n * Specifies the value of `setTextScaling`.\n * @private\n */\n Operators.setTextScaling = 'Tz';\n /**\n * Specifies the value of `setCoords`.\n * @private\n */\n Operators.setCoords = 'Td';\n /**\n * Specifies the value of `goToNextLine`.\n * @private\n */\n Operators.goToNextLine = 'T*';\n /**\n * Specifies the value of `setText`.\n * @private\n */\n Operators.setText = 'Tj';\n /**\n * Specifies the value of `setTextWithFormatting`.\n * @private\n */\n Operators.setTextWithFormatting = 'TJ';\n /**\n * Specifies the value of `setTextOnNewLine`.\n * @private\n */\n Operators.setTextOnNewLine = '\\'';\n /**\n * Specifies the value of `selectcolorspaceforstroking`.\n * @private\n */\n Operators.selectcolorspaceforstroking = 'CS';\n /**\n * Specifies the value of `selectcolorspacefornonstroking`.\n * @private\n */\n Operators.selectcolorspacefornonstroking = 'cs';\n /**\n * Specifies the value of `setrbgcolorforstroking`.\n * @private\n */\n Operators.setrbgcolorforstroking = 'RG';\n /**\n * Specifies the value of `setrbgcolorfornonstroking`.\n * @private\n */\n Operators.setrbgcolorfornonstroking = 'rg';\n /**\n * Specifies the value of `K`.\n * @private\n */\n Operators.setcmykcolorforstroking = 'K';\n /**\n * Specifies the value of `k`.\n * @private\n */\n Operators.setcmykcolorfornonstroking = 'k';\n /**\n * Specifies the value of `G`.\n * @private\n */\n Operators.setgraycolorforstroking = 'G';\n /**\n * Specifies the value of `g`.\n * @private\n */\n Operators.setgraycolorfornonstroking = 'g';\n /**\n * Specifies the value of `W`.\n * @private\n */\n Operators.clipPath = 'W';\n /**\n * Specifies the value of `clipPathEvenOdd`.\n * @private\n */\n Operators.clipPathEvenOdd = 'W*';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.endPath = 'n';\n /**\n * Specifies the value of `setGraphicsState`.\n * @private\n */\n Operators.setGraphicsState = 'gs';\n /**\n * Specifies the value of `%`.\n * @private\n */\n Operators.comment = '%';\n /**\n * Specifies the value of `*`.\n * @private\n */\n Operators.evenOdd = '*';\n /**\n * Specifies the value of `M`.\n * @private\n */\n Operators.setMiterLimit = 'M';\n return Operators;\n}());\nexport { Operators };\n","/**\n * dictionaryProperties.ts class for EJ2-PDF\n * PDF dictionary properties.\n * @private\n */\nvar DictionaryProperties = /** @class */ (function () {\n /**\n * Initialize an instance for `PdfDictionaryProperties` class.\n * @private\n */\n function DictionaryProperties() {\n /**\n * Specifies the value of `Pages`.\n * @private\n */\n this.pages = 'Pages';\n /**\n * Specifies the value of `Kids`.\n * @private\n */\n this.kids = 'Kids';\n /**\n * Specifies the value of `Count`.\n * @private\n */\n this.count = 'Count';\n /**\n * Specifies the value of `Resources`.\n * @private\n */\n this.resources = 'Resources';\n /**\n * Specifies the value of `Type`.\n * @private\n */\n this.type = 'Type';\n /**\n * Specifies the value of `Size`.\n * @private\n */\n this.size = 'Size';\n /**\n * Specifies the value of `MediaBox`.\n * @private\n */\n this.mediaBox = 'MediaBox';\n /**\n * Specifies the value of `Parent`.\n * @private\n */\n this.parent = 'Parent';\n /**\n * Specifies the value of `Root`.\n * @private\n */\n this.root = 'Root';\n /**\n * Specifies the value of `DecodeParms`.\n * @private\n */\n this.decodeParms = 'DecodeParms';\n /**\n * Specifies the value of `Filter`.\n * @private\n */\n this.filter = 'Filter';\n /**\n * Specifies the value of `Font`.\n * @private\n */\n this.font = 'Font';\n /**\n * Specifies the value of `Type1`.\n * @private\n */\n this.type1 = 'Type1';\n /**\n * Specifies the value of `BaseFont`.\n * @private\n */\n this.baseFont = 'BaseFont';\n /**\n * Specifies the value of `Encoding`.\n * @private\n */\n this.encoding = 'Encoding';\n /**\n * Specifies the value of `Subtype`.\n * @private\n */\n this.subtype = 'Subtype';\n /**\n * Specifies the value of `Contents`.\n * @private\n */\n this.contents = 'Contents';\n /**\n * Specifies the value of `ProcSet`.\n * @private\n */\n this.procset = 'ProcSet';\n /**\n * Specifies the value of `ColorSpace`.\n * @private\n */\n this.colorSpace = 'ColorSpace';\n /**\n * Specifies the value of `ExtGState`.\n * @private\n */\n this.extGState = 'ExtGState';\n /**\n * Specifies the value of `Pattern`.\n * @private\n */\n this.pattern = 'Pattern';\n /**\n * Specifies the value of `XObject`.\n * @private\n */\n this.xObject = 'XObject';\n /**\n * Specifies the value of `Length`.\n * @private\n */\n this.length = 'Length';\n /**\n * Specifies the value of `Width`.\n * @private\n */\n this.width = 'Width';\n /**\n * Specifies the value of `Height`.\n * @private\n */\n this.height = 'Height';\n /**\n * Specifies the value of `BitsPerComponent`.\n * @private\n */\n this.bitsPerComponent = 'BitsPerComponent';\n /**\n * Specifies the value of `Image`.\n * @private\n */\n this.image = 'Image';\n /**\n * Specifies the value of `dctdecode`.\n * @private\n */\n this.dctdecode = 'DCTDecode';\n /**\n * Specifies the value of `Columns`.\n * @private\n */\n this.columns = 'Columns';\n /**\n * Specifies the value of `BlackIs1`.\n * @private\n */\n this.blackIs1 = 'BlackIs1';\n /**\n * Specifies the value of `K`.\n * @private\n */\n this.k = 'K';\n /**\n * Specifies the value of `S`.\n * @private\n */\n this.s = 'S';\n /**\n * Specifies the value of `Predictor`.\n * @private\n */\n this.predictor = 'Predictor';\n /**\n * Specifies the value of `DeviceRGB`.\n * @private\n */\n this.deviceRgb = 'DeviceRGB';\n /**\n * Specifies the value of `Next`.\n * @private\n */\n this.next = 'Next';\n /**\n * Specifies the value of `Action`.\n * @private\n */\n this.action = 'Action';\n /**\n * Specifies the value of `Link`.\n * @private\n */\n this.link = 'Link';\n /**\n *\n * Specifies the value of `A`.\n * @private\n */\n this.a = 'A';\n /**\n * Specifies the value of `Annot`.\n * @private\n */\n this.annot = 'Annot';\n /**\n * Specifies the value of `P`.\n * @private\n */\n this.p = 'P';\n /**\n * Specifies the value of `C`.\n * @private\n */\n this.c = 'C';\n /**\n * Specifies the value of `Rect`.\n * @private\n */\n this.rect = 'Rect';\n /**\n * Specifies the value of `URI`.\n * @private\n */\n this.uri = 'URI';\n /**\n * Specifies the value of `Annots`.\n * @private\n */\n this.annots = 'Annots';\n /**\n * Specifies the value of `ca`.\n * @private\n */\n this.ca = 'ca';\n /**\n * Specifies the value of `CA`.\n * @private\n */\n this.CA = 'CA';\n /**\n * Specifies the value of `XYZ`.\n * @private\n */\n this.xyz = 'XYZ';\n /**\n * Specifies the value of `Fit`.\n * @private\n */\n this.fit = 'Fit';\n /**\n * Specifies the value of `Dest`.\n * @private\n */\n this.dest = 'Dest';\n /**\n * Specifies the value of `BM`.\n * @private\n */\n this.BM = 'BM';\n /**\n * Specifies the value of `flatedecode`.\n * @private\n */\n this.flatedecode = 'FlateDecode';\n /**\n * Specifies the value of `Rotate`.\n * @private\n */\n this.rotate = 'Rotate';\n /**\n * Specifies the value of 'bBox'.\n * @private\n */\n this.bBox = 'BBox';\n /**\n * Specifies the value of 'form'.\n * @private\n */\n this.form = 'Form';\n /**\n * Specifies the value of 'w'.\n * @private\n */\n this.w = 'W';\n /**\n * Specifies the value of 'cIDFontType2'.\n * @private\n */\n this.cIDFontType2 = 'CIDFontType2';\n /**\n * Specifies the value of 'cIDToGIDMap'.\n * @private\n */\n this.cIDToGIDMap = 'CIDToGIDMap';\n /**\n * Specifies the value of 'identity'.\n * @private\n */\n this.identity = 'Identity';\n /**\n * Specifies the value of 'dw'.\n * @private\n */\n this.dw = 'DW';\n /**\n * Specifies the value of 'fontDescriptor'.\n * @private\n */\n this.fontDescriptor = 'FontDescriptor';\n /**\n * Specifies the value of 'cIDSystemInfo'.\n * @private\n */\n this.cIDSystemInfo = 'CIDSystemInfo';\n /**\n * Specifies the value of 'fontName'.\n * @private\n */\n this.fontName = 'FontName';\n /**\n * Specifies the value of 'flags'.\n * @private\n */\n this.flags = 'Flags';\n /**\n * Specifies the value of 'fontBBox'.\n * @private\n */\n this.fontBBox = 'FontBBox';\n /**\n * Specifies the value of 'missingWidth'.\n * @private\n */\n this.missingWidth = 'MissingWidth';\n /**\n * Specifies the value of 'stemV'.\n * @private\n */\n this.stemV = 'StemV';\n /**\n * Specifies the value of 'italicAngle'.\n * @private\n */\n this.italicAngle = 'ItalicAngle';\n /**\n * Specifies the value of 'capHeight'.\n * @private\n */\n this.capHeight = 'CapHeight';\n /**\n * Specifies the value of 'ascent'.\n * @private\n */\n this.ascent = 'Ascent';\n /**\n * Specifies the value of 'descent'.\n * @private\n */\n this.descent = 'Descent';\n /**\n * Specifies the value of 'leading'.\n * @private\n */\n this.leading = 'Leading';\n /**\n * Specifies the value of 'avgWidth'.\n * @private\n */\n this.avgWidth = 'AvgWidth';\n /**\n * Specifies the value of 'fontFile2'.\n * @private\n */\n this.fontFile2 = 'FontFile2';\n /**\n * Specifies the value of 'maxWidth'.\n * @private\n */\n this.maxWidth = 'MaxWidth';\n /**\n * Specifies the value of 'xHeight'.\n * @private\n */\n this.xHeight = 'XHeight';\n /**\n * Specifies the value of 'stemH'.\n * @private\n */\n this.stemH = 'StemH';\n /**\n * Specifies the value of 'registry'.\n * @private\n */\n this.registry = 'Registry';\n /**\n * Specifies the value of 'ordering'.\n * @private\n */\n this.ordering = 'Ordering';\n /**\n * Specifies the value of 'supplement'.\n * @private\n */\n this.supplement = 'Supplement';\n /**\n * Specifies the value of 'type0'.\n * @private\n */\n this.type0 = 'Type0';\n /**\n * Specifies the value of 'identityH'.\n * @private\n */\n this.identityH = 'Identity-H';\n /**\n * Specifies the value of 'toUnicode'.\n * @private\n */\n this.toUnicode = 'ToUnicode';\n /**\n * Specifies the value of 'descendantFonts'.\n * @private\n */\n this.descendantFonts = 'DescendantFonts';\n //\n }\n return DictionaryProperties;\n}());\nexport { DictionaryProperties };\n","import { Dictionary } from './../collections/dictionary';\nimport { PdfName } from './pdf-name';\nimport { Operators } from './../input-output/pdf-operators';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDictionary` class is used to perform primitive operations.\n * @private\n */\nvar PdfDictionary = /** @class */ (function () {\n function PdfDictionary(dictionary) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position7 = -1;\n /**\n * The `IPdfSavable` with the specified key.\n * @private\n */\n this.primitiveItems = new Dictionary();\n /**\n * `Start marker` for dictionary.\n * @private\n */\n this.prefix = '<<';\n /**\n * `End marker` for dictionary.\n * @private\n */\n this.suffix = '>>';\n /**\n * @hidden\n * @private\n */\n this.resources = [];\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.object = null;\n /**\n * Flag for PDF file formar 1.5 is dictionary `archiving` needed.\n * @default true\n * @private\n */\n this.archive = true;\n /**\n * Represents the Font dictionary.\n * @hidden\n * @private\n */\n this.isFont = false;\n if (typeof dictionary === 'undefined') {\n this.primitiveItems = new Dictionary();\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n else {\n this.primitiveItems = new Dictionary();\n var keys = dictionary.items.keys();\n var values = dictionary.items.values();\n for (var index = 0; index < dictionary.items.size(); index++) {\n this.primitiveItems.setValue(keys[index], values[index]);\n }\n this.status = dictionary.status;\n this.freezeChanges(this);\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n }\n Object.defineProperty(PdfDictionary.prototype, \"items\", {\n //Properties\n /**\n * Gets or sets the `IPdfSavable` with the specified key.\n * @private\n */\n get: function () {\n return this.primitiveItems;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status7;\n },\n set: function (value) {\n this.status7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving7;\n },\n set: function (value) {\n this.isSaving7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index7;\n },\n set: function (value) {\n this.index7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position7;\n },\n set: function (value) {\n this.position7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.primitiveItems.size();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Dictionary\", {\n /**\n * Collection of `items` in the object.\n * @private\n */\n get: function () {\n return this;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.getArchive = function () {\n return this.archive;\n };\n /**\n * Set flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.setArchive = function (value) {\n this.archive = value;\n };\n /**\n * Sets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.setEncrypt = function (value) {\n this.encrypt = value;\n this.modify();\n };\n /**\n * Gets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.getEncrypt = function () {\n return this.encrypt;\n };\n /**\n * `Freezes` the changes.\n * @private\n */\n PdfDictionary.prototype.freezeChanges = function (freezer) {\n this.bChanged = false;\n };\n /**\n * Creates a `copy of PdfDictionary`.\n * @private\n */\n PdfDictionary.prototype.clone = function (crossTable) {\n //Need to add more codings\n var newDict = new PdfDictionary();\n return newDict;\n };\n /**\n * `Mark` this instance modified.\n * @private\n */\n PdfDictionary.prototype.modify = function () {\n this.bChanged = true;\n };\n /**\n * `Removes` the specified key.\n * @private\n */\n PdfDictionary.prototype.remove = function (key) {\n if (typeof key !== 'string') {\n this.primitiveItems.remove(key.value);\n this.modify();\n }\n else {\n this.remove(new PdfName(key));\n }\n };\n /**\n * `Determines` whether the dictionary contains the key.\n * @private\n */\n PdfDictionary.prototype.containsKey = function (key) {\n var returnValue = false;\n returnValue = this.primitiveItems.containsKey(key.toString());\n return returnValue;\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginSave = function () {\n this.beginSave.sender.beginSave();\n };\n /**\n * Raises event `Font Dictionary BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onFontDictionaryBeginSave = function () {\n this.fontDictionaryBeginSave.sender.fontDictionaryBeginSave();\n };\n /**\n * Raises event `Descendant Font BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onDescendantFontBeginSave = function () {\n this.descendantFontBeginSave.sender.descendantFontBeginSave();\n };\n /**\n * Raises event 'BeginSave'.\n * @private\n */\n PdfDictionary.prototype.onTemplateBeginSave = function () {\n this.pageBeginDrawTemplate.sender.pageBeginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginAnnotationSave = function () {\n this.annotationBeginSave.sender.beginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onSectionBeginSave = function (writer) {\n var saveEvent = this.sectionBeginSave;\n saveEvent.sender.beginSave(saveEvent.state, writer);\n };\n PdfDictionary.prototype.save = function (writer, bRaiseEvent) {\n if (typeof bRaiseEvent === 'undefined') {\n this.save(writer, true);\n }\n else {\n writer.write(this.prefix);\n if (typeof this.beginSave !== 'undefined') {\n this.onBeginSave();\n }\n if (typeof this.descendantFontBeginSave !== 'undefined') {\n this.onDescendantFontBeginSave();\n }\n if (typeof this.fontDictionaryBeginSave !== 'undefined') {\n this.onFontDictionaryBeginSave();\n }\n if (typeof this.annotationBeginSave !== 'undefined') {\n this.onBeginAnnotationSave();\n }\n if (typeof this.sectionBeginSave !== 'undefined') {\n this.onSectionBeginSave(writer);\n }\n if (typeof this.pageBeginDrawTemplate !== 'undefined') {\n this.onTemplateBeginSave();\n }\n // }\n if (this.Count > 0) {\n this.saveItems(writer);\n }\n writer.write(this.suffix);\n writer.write(Operators.newLine);\n }\n };\n /**\n * `Save dictionary items`.\n * @private\n */\n PdfDictionary.prototype.saveItems = function (writer) {\n writer.write(Operators.newLine);\n var keys = this.primitiveItems.keys();\n var values = this.primitiveItems.values();\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n var name_1 = new PdfName(key);\n name_1.save(writer);\n writer.write(Operators.whiteSpace);\n var resources = values[index];\n resources.save(writer);\n writer.write(Operators.newLine);\n }\n };\n return PdfDictionary;\n}());\nexport { PdfDictionary };\nvar SaveSectionCollectionEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveSectionCollectionEventHandler(sender) {\n this.sender = sender;\n }\n return SaveSectionCollectionEventHandler;\n}());\nexport { SaveSectionCollectionEventHandler };\nvar SaveDescendantFontEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveDescendantFontEventHandler(sender) {\n this.sender = sender;\n }\n return SaveDescendantFontEventHandler;\n}());\nexport { SaveDescendantFontEventHandler };\nvar SaveFontDictionaryEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveFontDictionaryEventHandler(sender) {\n this.sender = sender;\n }\n return SaveFontDictionaryEventHandler;\n}());\nexport { SaveFontDictionaryEventHandler };\nvar SaveAnnotationEventHandler = /** @class */ (function () {\n /**\n * New instance for `save annotation event handler` class.\n * @private\n */\n function SaveAnnotationEventHandler(sender) {\n this.sender = sender;\n }\n return SaveAnnotationEventHandler;\n}());\nexport { SaveAnnotationEventHandler };\nvar SaveSectionEventHandler = /** @class */ (function () {\n // constructors\n /**\n * New instance for `save section event handler` class.\n * @private\n */\n function SaveSectionEventHandler(sender, state) {\n this.sender = sender;\n this.state = state;\n }\n return SaveSectionEventHandler;\n}());\nexport { SaveSectionEventHandler };\n/**\n * SaveTemplateEventHandler class used to store information about template elements.\n * @private\n * @hidden\n */\nvar SaveTemplateEventHandler = /** @class */ (function () {\n /**\n * New instance for save section collection event handler class.\n * @public\n */\n function SaveTemplateEventHandler(sender) {\n this.sender = sender;\n }\n return SaveTemplateEventHandler;\n}());\nexport { SaveTemplateEventHandler };\n","/**\n * `PdfNumber` class is used to perform number related primitive operations.\n * @private\n */\nvar PdfNumber = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfNumber` class.\n * @private\n */\n function PdfNumber(value) {\n /**\n * Sotres the `position`.\n * @default -1\n * @private\n */\n this.position5 = -1;\n this.value = value;\n }\n Object.defineProperty(PdfNumber.prototype, \"intValue\", {\n /**\n * Gets or sets the `integer` value.\n * @private\n */\n get: function () {\n return this.value;\n },\n set: function (value) {\n this.value = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isInteger\", {\n /**\n * Gets or sets a value indicating whether this instance `is integer`.\n * @private\n */\n get: function () {\n return this.integer;\n },\n set: function (value) {\n this.integer = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status5;\n },\n set: function (value) {\n this.status5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving5;\n },\n set: function (value) {\n this.isSaving5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index5;\n },\n set: function (value) {\n this.index5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position5;\n },\n set: function (value) {\n this.position5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves the object`.\n * @private\n */\n PdfNumber.prototype.save = function (writer) {\n writer.write(this.intValue.toString()); //tostring(CultureInfo.InletiantCulture)\n };\n /**\n * Creates a `copy of PdfNumber`.\n * @private\n */\n PdfNumber.prototype.clone = function (crossTable) {\n var newNumber = new PdfNumber(this.value);\n return newNumber;\n };\n /**\n * Converts a `float value to a string` using Adobe PDF rules.\n * @private\n */\n PdfNumber.floatToString = function (number) {\n // let tempString1 : string = number.toString();\n // let tempString2 : string = tempString1.indexOf('.') != -1 ? tempString1.substring(0, tempString1.indexOf('.')) : tempString1;\n var returnString = number.toFixed(2);\n if (returnString === '0.00') {\n returnString = '.00';\n }\n // let prefixLength : number = (22 - tempString2.length) >= 0 ? (22 - tempString2.length) : 0;\n // for (let index : number = 0; index < prefixLength; index++) {\n // returnString += '0';\n // }\n // returnString += tempString2 + '.00';\n // returnString += (tempString3.length > 6) ? tempString3.substring(0,6) : tempString3;\n // let suffixLength : number = (6 - tempString3.length) >= 0 ? (6 - tempString3.length) : 0;\n // for (let index : number = 0; index < suffixLength; index++) {\n // returnString += '0';\n // }\n return returnString;\n };\n /**\n * Determines the `minimum of the three values`.\n * @private\n */\n PdfNumber.min = function (x, y, z) {\n var r = Math.min(x, y);\n return Math.min(z, r);\n };\n return PdfNumber;\n}());\nexport { PdfNumber };\n","import { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\n/**\n * `PdfArray` class is used to perform array related primitive operations.\n * @private\n */\nvar PdfArray = /** @class */ (function () {\n function PdfArray(array) {\n //Fields\n /**\n * `startMark` - '['\n * @private\n */\n this.startMark = '[';\n /**\n * `endMark` - ']'.\n * @private\n */\n this.endMark = ']';\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position9 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject9 = null;\n /**\n * Represents the Font dictionary.\n * @hidden\n * @private\n */\n this.isFont = false;\n if (typeof array === 'undefined') {\n this.internalElements = [];\n }\n else {\n if (typeof array !== 'undefined' && !(array instanceof PdfArray)) {\n var tempNumberArray = array;\n for (var index = 0; index < tempNumberArray.length; index++) {\n var pdfNumber = new PdfNumber(tempNumberArray[index]);\n this.add(pdfNumber);\n }\n // } else if (typeof array !== 'undefined' && (array instanceof PdfArray)) {\n }\n else {\n var tempArray = array;\n // if (tempArray.Elements.length > 0) {\n this.internalElements = [];\n for (var index = 0; index < tempArray.elements.length; index++) {\n this.internalElements.push(tempArray.elements[index]);\n }\n // }\n }\n }\n }\n //property\n /**\n * Gets the `IPdfSavable` at the specified index.\n * @private\n */\n PdfArray.prototype.items = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index, The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n Object.defineProperty(PdfArray.prototype, \"count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.internalElements.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status9;\n },\n set: function (value) {\n this.status9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving9;\n },\n set: function (value) {\n this.isSaving9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject9;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position9;\n },\n set: function (value) {\n this.position9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index9;\n },\n set: function (value) {\n this.index9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"elements\", {\n /**\n * Gets the `elements` of the Pdf Array.\n * @private\n */\n get: function () {\n return this.internalElements;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element to the PDF array.\n * @private\n */\n PdfArray.prototype.add = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n if (typeof this.internalElements === 'undefined') {\n this.internalElements = [];\n }\n this.internalElements.push(element);\n this.markedChange();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markedChange = function () {\n this.bChanged = true;\n };\n /**\n * `Determines` whether the specified element is within the array.\n * @private\n */\n PdfArray.prototype.contains = function (element) {\n var returnValue = false;\n for (var index = 0; index < this.internalElements.length; index++) {\n var tempElement = this.internalElements[index];\n var inputElement = element;\n if (tempElement != null && typeof tempElement !== 'undefined' && inputElement != null && typeof inputElement !== 'undefined') {\n if (tempElement.value === inputElement.value) {\n return true;\n }\n }\n // if (this.internalElements[index] === element) {\n // returnValue = true;\n // }\n }\n return returnValue;\n };\n /**\n * Returns the `primitive object` of input index.\n * @private\n */\n PdfArray.prototype.getItems = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index , The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfArray.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.startMark);\n for (var i = 0, len = this.count; i < len; i++) {\n this.getItems(i).save(writer);\n if (i + 1 !== len) {\n writer.write(Operators.whiteSpace);\n }\n }\n writer.write(this.endMark);\n };\n /**\n * Creates a `copy of PdfArray`.\n * @private\n */\n PdfArray.prototype.clone = function (crossTable) {\n // if (this.clonedObject9 !== null && this.clonedObject9.CrossTable === crossTable) {\n // return this.clonedObject9;\n // } else {\n this.clonedObject9 = null;\n // Else clone the object.\n var newArray = new PdfArray();\n for (var index = 0; index < this.internalElements.length; index++) {\n var obj = this.internalElements[index];\n newArray.add(obj.clone(crossTable));\n }\n newArray.pdfCrossTable = crossTable;\n this.clonedObject9 = newArray;\n return newArray;\n };\n /**\n * Creates filled PDF array `from the rectangle`.\n * @private\n */\n PdfArray.fromRectangle = function (bounds) {\n var values = [bounds.x, bounds.y, bounds.width, bounds.height];\n var array = new PdfArray(values);\n return array;\n };\n // /**\n // * Creates the rectangle from filled PDF array.\n // * @private\n // */\n // public ToRectangle() : RectangleF {\n // if (this.Count < 4) {\n // throw Error('InvalidOperationException-Can not convert to rectangle.');\n // }\n // let x1 : number;\n // let x2 : number;\n // let y1 : number;\n // let y2 : number;\n // let num : PdfNumber = this.getItems(0) as PdfNumber;\n // x1 = num.IntValue;\n // num = this.getItems(1) as PdfNumber;\n // y1 = num.IntValue;\n // num = this.getItems(2) as PdfNumber;\n // x2 = num.IntValue;\n // num = this.getItems(3) as PdfNumber;\n // y2 = num.IntValue;\n // let x : number = Math.min(x1, x2);\n // let y : number = Math.min(y1, y2);\n // let width : number = Math.abs(x1 - x2);\n // let height : number = Math.abs(y1 - y2);\n // let rect : RectangleF = new RectangleF(new PointF(x, y), new SizeF(width, height));\n // return rect;\n // }\n /**\n * `Inserts` the element into the array.\n * @private\n */\n PdfArray.prototype.insert = function (index, element) {\n if (index < this.internalElements.length && index > 0) {\n var tempElements = [];\n for (var i = 0; i < index; i++) {\n tempElements.push(this.internalElements[i]);\n }\n tempElements.push(element);\n for (var i = index; i < this.internalElements.length; i++) {\n tempElements.push(this.internalElements[i]);\n }\n this.internalElements = tempElements;\n }\n else {\n this.internalElements.push(element);\n }\n this.markChanged();\n };\n /**\n * `Checks whether array contains the element`.\n * @private\n */\n PdfArray.prototype.indexOf = function (element) {\n return this.internalElements.indexOf(element);\n };\n /**\n * `Removes` element from the array.\n * @private\n */\n PdfArray.prototype.remove = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : element');\n // }\n var index = this.internalElements.indexOf(element);\n // if (index >= 0 && index < this.internalElements.length) {\n this.internalElements[index] = null;\n // }\n this.markChanged();\n };\n /**\n * `Remove` the element from the array by its index.\n * @private\n */\n PdfArray.prototype.removeAt = function (index) {\n // this.internalElements.RemoveAt(index);\n if (this.internalElements.length > index) {\n var tempArray = [];\n for (var i = 0; i < index; i++) {\n tempArray.push(this.internalElements[i]);\n }\n for (var i = index + 1; i < this.internalElements.length; i++) {\n tempArray.push(this.internalElements[i]);\n }\n this.internalElements = tempArray;\n }\n this.markChanged();\n };\n /**\n * `Clear` the array.\n * @private\n */\n PdfArray.prototype.clear = function () {\n this.internalElements = [];\n this.markChanged();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markChanged = function () {\n this.bChanged = true;\n };\n return PdfArray;\n}());\nexport { PdfArray };\n","/**\n * Save class provide method to save file\n * ```typescript\n * let blob : Blob = new Blob([''], { type: 'text/plain' });\n * Save.save('fileName.txt',blob);\n */\nvar Save = /** @class */ (function () {\n /**\n * Initialize new instance of {save}\n */\n function Save() {\n // tslint:disable\n }\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n * @param {boolean} isMicrosoftBrowser- specify whether microsoft browser or not\n * @returns {void}\n */\n Save.save = function (fileName, buffer) {\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('ArgumentException: fileName cannot be undefined, null or empty');\n }\n var extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length);\n var mimeType = this.getMimeType(extension);\n if (mimeType !== '') {\n buffer = new Blob([buffer], { type: mimeType });\n }\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(buffer, fileName);\n }\n else {\n var downloadLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n this.saveInternal(fileName, extension, buffer, downloadLink, 'download' in downloadLink);\n }\n };\n Save.saveInternal = function (fileName, extension, buffer, downloadLink, hasDownloadAttribute) {\n if (hasDownloadAttribute) {\n downloadLink.download = fileName;\n var dataUrl_1 = window.URL.createObjectURL(buffer);\n downloadLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n downloadLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n dataUrl_1 = undefined;\n });\n }\n else {\n if (extension !== 'docx' && extension !== 'xlsx') {\n var url = window.URL.createObjectURL(buffer);\n var isPopupBlocked = window.open(url, '_blank');\n if (!isPopupBlocked) {\n window.location.href = url;\n }\n }\n else {\n var reader_1 = new FileReader();\n reader_1.onloadend = function () {\n var isPopupBlocked = window.open(reader_1.result, '_blank');\n if (!isPopupBlocked) {\n window.location.href = reader_1.result;\n }\n };\n reader_1.readAsDataURL(buffer);\n }\n }\n };\n /**\n *\n * @param {string} extension - get mime type of the specified extension\n * @private\n */\n Save.getMimeType = function (extension) {\n var mimeType = '';\n switch (extension) {\n case 'html':\n mimeType = 'text/html';\n break;\n case 'pdf':\n mimeType = 'application/pdf';\n break;\n case 'docx':\n mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n break;\n case 'xlsx':\n mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n break;\n case 'txt':\n mimeType = 'text/plain';\n break;\n }\n return mimeType;\n };\n return Save;\n}());\nexport { Save };\n","import { Save } from './save';\n/**\n * XmlWriter class provide method to create XML data\n */\nvar XmlWriter = /** @class */ (function () {\n /**\n * Initialize new instance of {XmlWriter}\n */\n function XmlWriter() {\n this.contentPos = 0;\n this.bufferText = '';\n this.bufferBlob = new Blob([''], { type: 'text/plain' });\n this.currentState = 'Initial';\n this.namespaceStack = [];\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[0].set('xmlns', 'http://www.w3.org/2000/xmlns/', 'Special');\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[1].set('xml', 'http://www.w3.org/XML/1998/namespace', 'Special');\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[2].set('', '', 'Implied');\n this.elementStack = [];\n this.elementStack.push(new XmlElement());\n this.elementStack[0].set('', '', '', this.namespaceStack.length - 1);\n this.attributeStack = [];\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(XmlWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the {XmlWriter} as Blob.\n * @returns {Blob}\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Writes processing instruction with a space between the name and text\n * @param {string} name - name of the processing instruction\n * @param {string} text - text to write in the processing instruction\n * @throws ArgumentException\n * @throws InvalidArgumentException\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeProcessingInstruction = function (name, text) {\n if (name === undefined || name === null || name.length === 0) {\n throw new Error('ArgumentException: name should not be undefined, null or empty');\n }\n this.checkName(name);\n if (text === undefined || text === null) {\n text = '';\n }\n if (name.length === 3 && name === 'xml') {\n if (this.currentState !== 'Initial') {\n // tslint:disable-next-line:max-line-length\n throw new Error('InvalidArgumentException: Cannot write XML declaration.WriteStartDocument method has already written it');\n }\n }\n if (this.currentState !== 'Initial' || this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n else {\n this.writeStartDocument();\n this.writeProcessingInstructionInternal(name, text);\n }\n };\n /**\n * Writes Xml declaration with version and standalone attribute\n * @param {boolean} standalone - if true it write standalone=yes else standalone=no\n * @throws InvalidOperation\n */\n XmlWriter.prototype.writeStartDocument = function (standalone) {\n if (this.currentState !== 'Initial' || this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n this.currentState = 'StartDocument';\n this.rawText('');\n };\n /**\n * Closes any open tag or attribute and write the state back to start\n */\n XmlWriter.prototype.writeEndDocument = function () {\n while (this.elementStack.length - 1 > 0) {\n this.writeEndElement();\n }\n this.currentState = 'EndDocument';\n this.flush();\n };\n /**\n * Writes the specified start tag and associates it with the given namespace and prefix.\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName -localName of element\n * @param {string} namespace - namespace URI associate with element\n * @throws ArgumentException\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeStartElement = function (prefix, localName, namespace) {\n if (this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n if (localName === undefined || localName === null || localName.length === 0) {\n throw new Error('ArgumentException: localName cannot be undefined, null or empty');\n }\n this.checkName(localName);\n if (this.currentState === 'Initial') {\n this.writeStartDocument();\n }\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n }\n this.currentState = 'StartElement';\n if (prefix === undefined || prefix === null) {\n if (namespace !== undefined && namespace !== null) {\n prefix = this.lookupPrefix(namespace);\n }\n if (prefix === undefined || prefix === null) {\n prefix = '';\n }\n }\n else if (prefix.length > 0) {\n if (namespace === undefined || namespace === null) {\n namespace = this.lookupNamespace(prefix);\n }\n if (namespace === undefined || namespace === null || (namespace !== undefined && namespace.length === 0)) {\n throw new Error('ArgumentException: Cannot use a prefix with an empty namespace');\n }\n }\n if (namespace === undefined || namespace === null) {\n namespace = this.lookupNamespace(prefix);\n }\n this.writeStartElementInternal(prefix, localName, namespace);\n };\n /**\n * Closes one element and pop corresponding namespace scope\n */\n XmlWriter.prototype.writeEndElement = function () {\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n this.currentState = 'ElementContent';\n }\n else if (this.currentState === 'ElementContent') {\n this.currentState = 'ElementContent';\n }\n this.currentState = 'EndElement';\n var top = this.elementStack.length - 1;\n this.writeEndElementInternal(this.elementStack[top].prefix, this.elementStack[top].localName);\n this.namespaceStack.splice(this.elementStack[top].previousTop + 1);\n this.elementStack.splice(top);\n if (this.bufferText.length > 10240) {\n this.flush();\n }\n };\n /**\n * Writes an element with the specified prefix, local name, namespace URI, and value.\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName - localName of element\n * @param {string} namespace - namespace URI associate with element\n * @param {string} value - value of element\n */\n XmlWriter.prototype.writeElementString = function (prefix, localName, namespace, value) {\n this.writeStartElement(prefix, localName, namespace);\n if (value !== undefined && value !== null && value.length !== 0) {\n this.writeString(value);\n }\n this.writeEndElement();\n };\n /**\n * Writes out the attribute with the specified prefix, local name, namespace URI, and value\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName - localName of element\n * @param {string} namespace - namespace URI associate with element\n * @param {string} value - value of element\n */\n XmlWriter.prototype.writeAttributeString = function (prefix, localName, namespace, value) {\n this.writeStartAttribute(prefix, localName, namespace, value);\n this.writeStringInternal(value, true);\n this.writeEndAttribute();\n };\n /**\n * Writes the given text content\n * @param {string} text - text to write\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeString = function (text) {\n this.writeInternal(text, false);\n };\n /**\n * Write given text as raw data\n * @param {string} text - text to write\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeRaw = function (text) {\n this.writeInternal(text, true);\n };\n XmlWriter.prototype.writeInternal = function (text, isRawString) {\n if (text === undefined || text === null) {\n return;\n }\n else {\n if (this.currentState !== 'StartElement' && this.currentState !== 'ElementContent') {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n }\n this.currentState = 'ElementContent';\n if (isRawString) {\n this.rawText(text);\n }\n else {\n this.writeStringInternal(text, false);\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - file name\n */\n XmlWriter.prototype.save = function (fileName) {\n while (this.elementStack.length - 1 > 0) {\n this.writeEndElement();\n }\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Releases the resources used by XmlWriter.\n */\n XmlWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n for (var i = 0; i < this.namespaceStack.length; i++) {\n this.namespaceStack[i].destroy();\n }\n this.namespaceStack = [];\n for (var i = 0; i < this.elementStack.length; i++) {\n this.elementStack[i].destroy();\n }\n this.elementStack = [];\n this.bufferText = '';\n this.contentPos = 0;\n };\n XmlWriter.prototype.flush = function () {\n if (this.bufferBlob === undefined) {\n return;\n }\n this.bufferBlob = new Blob([this.bufferBlob, this.bufferText], { type: 'text/plain' });\n this.bufferText = '';\n };\n XmlWriter.prototype.writeProcessingInstructionInternal = function (name, text) {\n this.bufferText += ' 0) {\n this.bufferText += ' ';\n text = text.replace(/\\?\\>/g, '? >');\n this.bufferText += text;\n }\n this.bufferText += '?';\n this.bufferText += '>';\n };\n XmlWriter.prototype.writeStartAttribute = function (prefix, localName, namespace, value) {\n if (localName === undefined || localName === null || localName.length === 0) {\n if (prefix === 'xmlns') {\n localName = 'xmlns';\n prefix = '';\n }\n else {\n throw new Error('ArgumentException: localName cannot be undefined, null or empty');\n }\n }\n if (this.currentState !== 'StartElement') {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n this.checkName(localName);\n this.writeStartAttributePrefixAndNameSpace(prefix, localName, namespace, value);\n };\n XmlWriter.prototype.writeStartAttributePrefixAndNameSpace = function (prefix, localName, namespace, value) {\n if (prefix === undefined || prefix === null) {\n if (namespace !== undefined && namespace !== null) {\n if (!(localName === 'xmlns' && namespace === 'http://www.w3.org/2000/xmlns/')) {\n prefix = this.lookupPrefix(namespace);\n }\n }\n if (prefix === undefined || prefix === null) {\n prefix = '';\n }\n }\n if (namespace === undefined || namespace === null) {\n if (prefix !== undefined && prefix !== null && prefix.length > 0) {\n namespace = this.lookupNamespace(prefix);\n }\n if (namespace === undefined || namespace === null) {\n namespace = '';\n }\n }\n this.writeStartAttributeSpecialAttribute(prefix, localName, namespace, value);\n };\n XmlWriter.prototype.writeStartAttributeSpecialAttribute = function (prefix, localName, namespace, value) {\n if (prefix.length === 0) {\n if (localName[0] === 'x' && localName === 'xmlns') {\n this.skipPushAndWrite(prefix, localName, namespace);\n this.pushNamespaceExplicit('', value);\n return;\n }\n else if (namespace.length > 0) {\n prefix = this.lookupPrefix(namespace);\n }\n }\n else {\n if (prefix[0] === 'x') {\n if (prefix === 'xmlns') {\n this.skipPushAndWrite(prefix, localName, namespace);\n this.pushNamespaceExplicit(localName, value);\n return;\n }\n else if (prefix === 'xml') {\n if (localName === 'space' || localName === 'lang') {\n this.skipPushAndWrite(prefix, localName, namespace);\n return;\n }\n }\n }\n if (namespace.length === 0) {\n prefix = '';\n }\n }\n if (prefix !== undefined && prefix !== null && prefix.length !== 0) {\n this.pushNamespaceImplicit(prefix, namespace);\n }\n this.skipPushAndWrite(prefix, localName, namespace);\n };\n XmlWriter.prototype.writeEndAttribute = function () {\n this.currentState = 'StartElement';\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeStartElementInternal = function (prefix, localName, namespace) {\n this.bufferText += '<';\n if (prefix.length > 0) {\n this.rawText(prefix);\n this.bufferText += ':';\n }\n this.rawText(localName);\n var top = this.elementStack.length;\n this.elementStack.push(new XmlElement());\n this.elementStack[top].set(prefix, localName, namespace, this.namespaceStack.length - 1);\n this.pushNamespaceImplicit(prefix, namespace);\n for (var i = 0; i < this.attributeStack.length; i++) {\n this.attributeStack[i].destroy();\n }\n this.attributeStack = [];\n };\n XmlWriter.prototype.writeEndElementInternal = function (prefix, localName) {\n if (this.contentPos !== this.bufferText.length + 1) {\n this.bufferText += '';\n }\n else {\n this.bufferText = this.bufferText.substring(0, this.bufferText.length - 1);\n this.bufferText += ' />';\n }\n };\n XmlWriter.prototype.writeStartAttributeInternal = function (prefix, localName, namespaceName) {\n this.bufferText += ' ';\n if (prefix !== undefined && prefix !== null && prefix.length > 0) {\n this.rawText(prefix);\n this.bufferText += ':';\n }\n this.rawText(localName);\n this.bufferText += '=';\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeNamespaceDeclaration = function (prefix, namespaceUri) {\n this.writeStartNamespaceDeclaration(prefix);\n this.writeStringInternal(namespaceUri, true);\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeStartNamespaceDeclaration = function (prefix) {\n if (prefix === undefined || prefix === null || prefix.length === 0) {\n this.rawText(' xmlns=\\\"');\n }\n else {\n this.rawText(' xmlns:');\n this.rawText(prefix);\n this.bufferText += '=';\n this.bufferText += '\"';\n }\n };\n XmlWriter.prototype.writeStringInternal = function (text, inAttributeValue) {\n if (text === null || text === undefined) {\n text = '';\n }\n var tempText = '';\n text = text.replace(/\\&/g, '&');\n text = text.replace(/\\/g, '>');\n if (inAttributeValue) {\n text = text.replace(/\\\"/g, '"');\n }\n this.bufferText += text;\n if (!inAttributeValue) {\n this.contentPos = 0;\n }\n };\n XmlWriter.prototype.startElementContent = function () {\n var start = this.elementStack[this.elementStack.length - 1].previousTop;\n for (var i = this.namespaceStack.length - 1; i > start; i--) {\n if (this.namespaceStack[i].kind === 'NeedToWrite') {\n this.writeNamespaceDeclaration(this.namespaceStack[i].prefix, this.namespaceStack[i].namespaceUri);\n }\n }\n this.bufferText += '>';\n this.contentPos = this.bufferText.length + 1;\n };\n XmlWriter.prototype.rawText = function (text) {\n this.bufferText += text;\n };\n XmlWriter.prototype.addNamespace = function (prefix, ns, kind) {\n var top = this.namespaceStack.length;\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[top].set(prefix, ns, kind);\n };\n XmlWriter.prototype.lookupPrefix = function (namespace) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].namespaceUri === namespace) {\n return this.namespaceStack[i].prefix;\n }\n }\n return undefined;\n };\n XmlWriter.prototype.lookupNamespace = function (prefix) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].prefix === prefix) {\n return this.namespaceStack[i].namespaceUri;\n }\n }\n return undefined;\n };\n XmlWriter.prototype.lookupNamespaceIndex = function (prefix) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].prefix === prefix) {\n return i;\n }\n }\n return -1;\n };\n XmlWriter.prototype.pushNamespaceImplicit = function (prefix, ns) {\n var kind;\n var existingNsIndex = this.lookupNamespaceIndex(prefix);\n if (existingNsIndex !== -1) {\n if (existingNsIndex > this.elementStack[this.elementStack.length - 1].previousTop) {\n if (this.namespaceStack[existingNsIndex].namespaceUri !== ns) {\n throw new Error('XmlException namespace Uri needs to be the same as the one that is already declared');\n }\n return;\n }\n else {\n if (this.namespaceStack[existingNsIndex].kind === 'Special') {\n if (prefix === 'xml') {\n if (ns !== this.namespaceStack[existingNsIndex].namespaceUri) {\n throw new Error('InvalidArgumentException: Xml String');\n }\n else {\n kind = 'Implied';\n }\n }\n else {\n throw new Error('InvalidArgumentException: Prefix \"xmlns\" is reserved for use by XML.');\n }\n }\n else {\n kind = (this.namespaceStack[existingNsIndex].namespaceUri === ns) ? 'Implied' : 'NeedToWrite';\n }\n }\n }\n else {\n if ((ns === 'http://www.w3.org/XML/1998/namespace' && prefix !== 'xml') ||\n (ns === 'http://www.w3.org/2000/xmlns/' && prefix !== 'xmlns')) {\n throw new Error('InvalidArgumentException');\n }\n kind = 'NeedToWrite';\n }\n this.addNamespace(prefix, ns, kind);\n };\n XmlWriter.prototype.pushNamespaceExplicit = function (prefix, ns) {\n var existingNsIndex = this.lookupNamespaceIndex(prefix);\n if (existingNsIndex !== -1) {\n if (existingNsIndex > this.elementStack[this.elementStack.length - 1].previousTop) {\n this.namespaceStack[existingNsIndex].kind = 'Written';\n return;\n }\n }\n this.addNamespace(prefix, ns, 'Written');\n return;\n };\n XmlWriter.prototype.addAttribute = function (prefix, localName, namespaceName) {\n var top = this.attributeStack.length;\n this.attributeStack.push(new XmlAttribute());\n this.attributeStack[top].set(prefix, localName, namespaceName);\n for (var i = 0; i < top; i++) {\n if (this.attributeStack[i].isDuplicate(prefix, localName, namespaceName)) {\n throw new Error('XmlException: duplicate attribute name');\n }\n }\n };\n XmlWriter.prototype.skipPushAndWrite = function (prefix, localName, namespace) {\n this.addAttribute(prefix, localName, namespace);\n this.writeStartAttributeInternal(prefix, localName, namespace);\n };\n XmlWriter.prototype.checkName = function (text) {\n var format = /[ !@#$%^&*()+\\=\\[\\]{};':\"\\\\|,<>\\/?]/;\n if (format.test(text)) {\n throw new Error('InvalidArgumentException: invalid name character');\n }\n };\n return XmlWriter;\n}());\nexport { XmlWriter };\n/**\n * class for managing namespace collection\n */\nvar Namespace = /** @class */ (function () {\n function Namespace() {\n }\n /**\n * set value for current namespace instance\n * @param {string} prefix namespace's prefix\n * @param {string} namespaceUri namespace URI\n * @param {string} kind namespace kind\n */\n Namespace.prototype.set = function (prefix, namespaceUri, kind) {\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.kind = kind;\n };\n /**\n * Releases the resources used by Namespace\n */\n Namespace.prototype.destroy = function () {\n this.prefix = undefined;\n this.namespaceUri = undefined;\n this.kind = undefined;\n };\n return Namespace;\n}());\nexport { Namespace };\n/**\n * class for managing element collection\n */\nvar XmlElement = /** @class */ (function () {\n function XmlElement() {\n }\n /**\n * set value of current element\n * @param {string} prefix - element prefix\n * @param {string} localName - element local name\n * @param {string} namespaceUri -namespace URI\n * @param {string} previousTop - previous namespace top\n */\n XmlElement.prototype.set = function (prefix, localName, namespaceUri, previousTop) {\n this.previousTop = previousTop;\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.localName = localName;\n };\n /**\n * Releases the resources used by XmlElement\n */\n XmlElement.prototype.destroy = function () {\n this.previousTop = undefined;\n this.prefix = undefined;\n this.localName = undefined;\n this.namespaceUri = undefined;\n };\n return XmlElement;\n}());\nexport { XmlElement };\n/**\n * class for managing attribute collection\n */\nvar XmlAttribute = /** @class */ (function () {\n function XmlAttribute() {\n }\n /**\n * set value of current attribute\n * @param {string} prefix - namespace's prefix\n * @param {string} namespaceUri - namespace URI\n * @param {string} localName - attribute localName\n */\n XmlAttribute.prototype.set = function (prefix, localName, namespaceUri) {\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.localName = localName;\n };\n /**\n * get whether the attribute is duplicate or not\n * @param {string} prefix - namespace's prefix\n * @param {string} namespaceUri - namespace URI\n * @param {string} localName - attribute localName\n */\n XmlAttribute.prototype.isDuplicate = function (prefix, localName, namespaceUri) {\n return ((this.localName === localName) && ((this.prefix === prefix) || (this.namespaceUri === namespaceUri)));\n };\n /**\n * Releases the resources used by XmlAttribute\n */\n XmlAttribute.prototype.destroy = function () {\n this.prefix = undefined;\n this.namespaceUri = undefined;\n this.localName = undefined;\n };\n return XmlAttribute;\n}());\nexport { XmlAttribute };\n","import { Encoding, validateNullOrUndefined } from './encoding';\nimport { Save } from './save';\n/**\n * StreamWriter class contains the implementation for writing characters to a file in a particular encoding\n * ```typescript\n * let writer = new StreamWriter();\n * writer.write('Hello World');\n * writer.save('Sample.txt');\n * writer.dispose();\n * ```\n */\nvar StreamWriter = /** @class */ (function () {\n /**\n * Initializes a new instance of the StreamWriter class by using the specified encoding.\n * @param {Encoding} encoding?- The character encoding to use.\n */\n function StreamWriter(encoding) {\n this.bufferBlob = new Blob(['']);\n this.bufferText = '';\n this.init(encoding);\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(StreamWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the StreamWriter as Blob.\n * @returns Blob\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StreamWriter.prototype, \"encoding\", {\n /**\n * Gets the encoding.\n * @returns Encoding\n */\n get: function () {\n return this.enc;\n },\n enumerable: true,\n configurable: true\n });\n StreamWriter.prototype.init = function (encoding) {\n if (encoding === null || encoding === undefined) {\n this.enc = new Encoding(false);\n this.enc.type = 'Utf8';\n }\n else {\n this.enc = encoding;\n this.setBomByte();\n }\n };\n /**\n * Private method to set Byte Order Mark(BOM) value based on EncodingType\n */\n StreamWriter.prototype.setBomByte = function () {\n if (this.encoding.includeBom) {\n switch (this.encoding.type) {\n case 'Unicode':\n var arrayUnicode = new ArrayBuffer(2);\n var uint8 = new Uint8Array(arrayUnicode);\n uint8[0] = 255;\n uint8[1] = 254;\n this.bufferBlob = new Blob([arrayUnicode]);\n break;\n case 'Utf8':\n var arrayUtf8 = new ArrayBuffer(3);\n var utf8 = new Uint8Array(arrayUtf8);\n utf8[0] = 239;\n utf8[1] = 187;\n utf8[2] = 191;\n this.bufferBlob = new Blob([arrayUtf8]);\n break;\n default:\n this.bufferBlob = new Blob(['']);\n break;\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - The file name to save\n * @returns {void}\n */\n StreamWriter.prototype.save = function (fileName) {\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Writes the specified string.\n * @param {string} value - The string to write. If value is null or undefined, nothing is written.\n * @returns {void}\n */\n StreamWriter.prototype.write = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText += value;\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n StreamWriter.prototype.flush = function () {\n if (this.bufferText === undefined || this.bufferText === null || this.bufferText.length === 0) {\n return;\n }\n var bufferArray = this.encoding.getBytes(this.bufferText, 0, this.bufferText.length);\n this.bufferText = '';\n this.bufferBlob = new Blob([this.bufferBlob, bufferArray]);\n };\n /**\n * Writes the specified string followed by a line terminator\n * @param {string} value - The string to write. If value is null or undefined, nothing is written\n * @returns {void}\n */\n StreamWriter.prototype.writeLine = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText = this.bufferText + value + '\\r\\n';\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n /**\n * Releases the resources used by the StreamWriter\n * @returns {void}\n */\n StreamWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n this.bufferText = undefined;\n if (this.enc instanceof Encoding) {\n this.enc.destroy();\n }\n this.enc = undefined;\n };\n return StreamWriter;\n}());\nexport { StreamWriter };\n","import { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * array literal codes\n */\nvar arrLiteralCodes = new Int16Array(286);\nvar arrLiteralLengths = new Uint8Array(286);\nvar arrDistanceCodes = new Int16Array(30);\nvar arrDistanceLengths = new Uint8Array(30);\n/**\n * represent compression stream writer\n * ```typescript\n * let compressedWriter = new CompressedStreamWriter();\n * let text: string = 'Hello world!!!';\n * compressedWriter.write(text, 0, text.length);\n * compressedWriter.close();\n * ```\n */\nvar CompressedStreamWriter = /** @class */ (function () {\n /**\n * Initializes compressor and writes ZLib header if needed.\n * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n */\n function CompressedStreamWriter(noWrap) {\n this.pendingBuffer = new Uint8Array(1 << 16);\n this.pendingBufLength = 0;\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.currentHash = 0;\n this.matchStart = 0;\n this.matchLength = 0;\n this.matchPrevAvail = false;\n this.blockStart = 0;\n this.stringStart = 0;\n this.lookAhead = 0;\n this.totalBytesIn = 0;\n this.inputOffset = 0;\n this.inputEnd = 0;\n this.windowSize = 1 << 15;\n this.windowMask = this.windowSize - 1;\n this.hashSize = 1 << 15;\n this.hashMask = this.hashSize - 1;\n this.hashShift = Math.floor((15 + 3 - 1) / 3);\n this.maxDist = this.windowSize - 262;\n this.checkSum = 1;\n this.noWrap = false;\n this.treeLiteral = new CompressorHuffmanTree(this, 286, 257, 15);\n this.treeDistances = new CompressorHuffmanTree(this, 30, 1, 15);\n this.treeCodeLengths = new CompressorHuffmanTree(this, 19, 4, 7);\n this.arrDistances = new Uint16Array((1 << 14));\n this.arrLiterals = new Uint8Array((1 << 14));\n this.stream = [];\n this.dataWindow = new Uint8Array(2 * this.windowSize);\n this.hashHead = new Int16Array(this.hashSize);\n this.hashPrevious = new Int16Array(this.windowSize);\n this.blockStart = this.stringStart = 1;\n this.noWrap = noWrap;\n if (!noWrap) {\n this.writeZLibHeader();\n }\n }\n Object.defineProperty(CompressedStreamWriter.prototype, \"compressedData\", {\n /**\n * get compressed data\n */\n get: function () {\n return this.stream;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressedStreamWriter.prototype, \"getCompressedString\", {\n get: function () {\n var compressedString = '';\n if (this.stream !== undefined) {\n for (var i = 0; i < this.stream.length; i++) {\n compressedString += String.fromCharCode.apply(null, this.stream[i]);\n }\n }\n return compressedString;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Compresses data and writes it to the stream.\n * @param {Uint8Array} data - data to compress\n * @param {number} offset - offset in data\n * @param {number} length - length of the data\n * @returns {void}\n */\n CompressedStreamWriter.prototype.write = function (data, offset, length) {\n if (data === undefined || data === null) {\n throw new Error('ArgumentException: data cannot null or undefined');\n }\n var end = offset + length;\n if (0 > offset || offset > end || end > data.length) {\n throw new Error('ArgumentOutOfRangeException: Offset or length is incorrect');\n }\n if (typeof data === 'string') {\n var encode = new Encoding(false);\n encode.type = 'Utf8';\n data = new Uint8Array(encode.getBytes(data, 0, data.length));\n end = offset + data.length;\n }\n this.inputBuffer = data;\n this.inputOffset = offset;\n this.inputEnd = end;\n if (!this.noWrap) {\n this.checkSum = ChecksumCalculator.checksumUpdate(this.checkSum, this.inputBuffer, this.inputOffset, end);\n }\n while (!(this.inputEnd === this.inputOffset) || !(this.pendingBufLength === 0)) {\n this.pendingBufferFlush();\n this.compressData(false);\n }\n };\n /**\n * write ZLib header to the compressed data\n * @return {void}\n */\n CompressedStreamWriter.prototype.writeZLibHeader = function () {\n /* Initialize header.*/\n var headerDate = (8 + (7 << 4)) << 8;\n /* Save compression level.*/\n headerDate |= ((5 >> 2) & 3) << 6;\n /* Align header.*/\n headerDate += 31 - (headerDate % 31);\n /* Write header to stream.*/\n this.pendingBufferWriteShortBytes(headerDate);\n };\n /**\n * Write Most Significant Bytes in to stream\n * @param {number} s - check sum value\n */\n CompressedStreamWriter.prototype.pendingBufferWriteShortBytes = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s >> 8;\n this.pendingBuffer[this.pendingBufLength++] = s;\n };\n CompressedStreamWriter.prototype.compressData = function (finish) {\n var success;\n do {\n this.fillWindow();\n var canFlush = (finish && this.inputEnd === this.inputOffset);\n success = this.compressSlow(canFlush, finish);\n } while (this.pendingBufLength === 0 && success);\n return success;\n };\n CompressedStreamWriter.prototype.compressSlow = function (flush, finish) {\n if (this.lookAhead < 262 && !flush) {\n return false;\n }\n while (this.lookAhead >= 262 || flush) {\n if (this.lookAhead === 0) {\n return this.lookAheadCompleted(finish);\n }\n if (this.stringStart >= 2 * this.windowSize - 262) {\n this.slideWindow();\n }\n var prevMatch = this.matchStart;\n var prevLen = this.matchLength;\n if (this.lookAhead >= 3) {\n this.discardMatch();\n }\n if (prevLen >= 3 && this.matchLength <= prevLen) {\n prevLen = this.matchPreviousBest(prevMatch, prevLen);\n }\n else {\n this.matchPreviousAvailable();\n }\n if (this.bufferPosition >= (1 << 14)) {\n return this.huffmanIsFull(finish);\n }\n }\n return true;\n };\n CompressedStreamWriter.prototype.discardMatch = function () {\n var hashHead = this.insertString();\n if (hashHead !== 0 && this.stringStart - hashHead <= this.maxDist && this.findLongestMatch(hashHead)) {\n if (this.matchLength <= 5 && (this.matchLength === 3 && this.stringStart - this.matchStart > 4096)) {\n this.matchLength = 3 - 1;\n }\n }\n };\n CompressedStreamWriter.prototype.matchPreviousAvailable = function () {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = true;\n this.stringStart++;\n this.lookAhead--;\n };\n CompressedStreamWriter.prototype.matchPreviousBest = function (prevMatch, prevLen) {\n this.huffmanTallyDist(this.stringStart - 1 - prevMatch, prevLen);\n prevLen -= 2;\n do {\n this.stringStart++;\n this.lookAhead--;\n if (this.lookAhead >= 3) {\n this.insertString();\n }\n } while (--prevLen > 0);\n this.stringStart++;\n this.lookAhead--;\n this.matchPrevAvail = false;\n this.matchLength = 3 - 1;\n return prevLen;\n };\n CompressedStreamWriter.prototype.lookAheadCompleted = function (finish) {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = false;\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, this.stringStart - this.blockStart, finish);\n this.blockStart = this.stringStart;\n return false;\n };\n CompressedStreamWriter.prototype.huffmanIsFull = function (finish) {\n var len = this.stringStart - this.blockStart;\n if (this.matchPrevAvail) {\n len--;\n }\n var lastBlock = (finish && this.lookAhead === 0 && !this.matchPrevAvail);\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, len, lastBlock);\n this.blockStart += len;\n return !lastBlock;\n };\n CompressedStreamWriter.prototype.fillWindow = function () {\n if (this.stringStart >= this.windowSize + this.maxDist) {\n this.slideWindow();\n }\n while (this.lookAhead < 262 && this.inputOffset < this.inputEnd) {\n var more = 2 * this.windowSize - this.lookAhead - this.stringStart;\n if (more > this.inputEnd - this.inputOffset) {\n more = this.inputEnd - this.inputOffset;\n }\n this.dataWindow.set(this.inputBuffer.subarray(this.inputOffset, this.inputOffset + more), this.stringStart + this.lookAhead);\n this.inputOffset += more;\n this.totalBytesIn += more;\n this.lookAhead += more;\n }\n if (this.lookAhead >= 3) {\n this.updateHash();\n }\n };\n CompressedStreamWriter.prototype.slideWindow = function () {\n this.dataWindow.set(this.dataWindow.subarray(this.windowSize, this.windowSize + this.windowSize), 0);\n this.matchStart -= this.windowSize;\n this.stringStart -= this.windowSize;\n this.blockStart -= this.windowSize;\n for (var i = 0; i < this.hashSize; ++i) {\n var m = this.hashHead[i] & 0xffff;\n this.hashHead[i] = (((m >= this.windowSize) ? (m - this.windowSize) : 0));\n }\n for (var i = 0; i < this.windowSize; i++) {\n var m = this.hashPrevious[i] & 0xffff;\n this.hashPrevious[i] = ((m >= this.windowSize) ? (m - this.windowSize) : 0);\n }\n };\n CompressedStreamWriter.prototype.insertString = function () {\n var match;\n var hash = ((this.currentHash << this.hashShift) ^ this.dataWindow[this.stringStart + (3 - 1)]) & this.hashMask;\n this.hashPrevious[this.stringStart & this.windowMask] = match = this.hashHead[hash];\n this.hashHead[hash] = this.stringStart;\n this.currentHash = hash;\n return match & 0xffff;\n };\n CompressedStreamWriter.prototype.findLongestMatch = function (curMatch) {\n var chainLen = 4096;\n var niceLen = 258;\n var scan = this.stringStart;\n var match;\n var bestEnd = this.stringStart + this.matchLength;\n var bestLength = Math.max(this.matchLength, 3 - 1);\n var limit = Math.max(this.stringStart - this.maxDist, 0);\n var stringEnd = this.stringStart + 258 - 1;\n var scanEnd1 = this.dataWindow[bestEnd - 1];\n var scanEnd = this.dataWindow[bestEnd];\n var data = this.dataWindow;\n if (bestLength >= 32) {\n chainLen >>= 2;\n }\n if (niceLen > this.lookAhead) {\n niceLen = this.lookAhead;\n }\n do {\n if (data[curMatch + bestLength] !== scanEnd ||\n data[curMatch + bestLength - 1] !== scanEnd1 ||\n data[curMatch] !== data[scan] ||\n data[curMatch + 1] !== data[scan + 1]) {\n continue;\n }\n match = curMatch + 2;\n scan += 2;\n /* tslint:disable */\n while (data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] && scan < stringEnd) {\n /* tslint:disable */\n }\n if (scan > bestEnd) {\n this.matchStart = curMatch;\n bestEnd = scan;\n bestLength = scan - this.stringStart;\n if (bestLength >= niceLen) {\n break;\n }\n scanEnd1 = data[bestEnd - 1];\n scanEnd = data[bestEnd];\n }\n scan = this.stringStart;\n } while ((curMatch = (this.hashPrevious[curMatch & this.windowMask] & 0xffff)) > limit && --chainLen !== 0);\n this.matchLength = Math.min(bestLength, this.lookAhead);\n return this.matchLength >= 3;\n };\n CompressedStreamWriter.prototype.updateHash = function () {\n this.currentHash = (this.dataWindow[this.stringStart] << this.hashShift) ^ this.dataWindow[this.stringStart + 1];\n };\n CompressedStreamWriter.prototype.huffmanTallyLit = function (literal) {\n this.arrDistances[this.bufferPosition] = 0;\n this.arrLiterals[this.bufferPosition++] = literal;\n this.treeLiteral.codeFrequencies[literal]++;\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanTallyDist = function (dist, len) {\n this.arrDistances[this.bufferPosition] = dist;\n this.arrLiterals[this.bufferPosition++] = (len - 3);\n var lc = this.huffmanLengthCode(len - 3);\n this.treeLiteral.codeFrequencies[lc]++;\n if (lc >= 265 && lc < 285) {\n this.extraBits += Math.floor((lc - 261) / 4);\n }\n var dc = this.huffmanDistanceCode(dist - 1);\n this.treeDistances.codeFrequencies[dc]++;\n if (dc >= 4) {\n this.extraBits += Math.floor((dc / 2 - 1));\n }\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanFlushBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.treeLiteral.codeFrequencies[256]++;\n this.treeLiteral.buildTree();\n this.treeDistances.buildTree();\n this.treeLiteral.calculateBLFreq(this.treeCodeLengths);\n this.treeDistances.calculateBLFreq(this.treeCodeLengths);\n this.treeCodeLengths.buildTree();\n var blTreeCodes = 4;\n for (var i = 18; i > blTreeCodes; i--) {\n if (this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[i]] > 0) {\n blTreeCodes = i + 1;\n }\n }\n var opt_len = 14 + blTreeCodes * 3 + this.treeCodeLengths.getEncodedLength() +\n this.treeLiteral.getEncodedLength() + this.treeDistances.getEncodedLength() + this.extraBits;\n var static_len = this.extraBits;\n for (var i = 0; i < 286; i++) {\n static_len += this.treeLiteral.codeFrequencies[i] * arrLiteralLengths[i];\n }\n for (var i = 0; i < 30; i++) {\n static_len += this.treeDistances.codeFrequencies[i] * arrDistanceLengths[i];\n }\n if (opt_len >= static_len) {\n // Force static trees.\n opt_len = static_len;\n }\n if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) {\n this.huffmanFlushStoredBlock(stored, storedOffset, storedLength, lastBlock);\n }\n else if (opt_len == static_len) {\n // Encode with static tree.\n this.pendingBufferWriteBits((1 << 1) + (lastBlock ? 1 : 0), 3);\n this.treeLiteral.setStaticCodes(arrLiteralCodes, arrLiteralLengths);\n this.treeDistances.setStaticCodes(arrDistanceCodes, arrDistanceLengths);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n else {\n this.pendingBufferWriteBits((2 << 1) + (lastBlock ? 1 : 0), 3);\n this.huffmanSendAllTrees(blTreeCodes);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n };\n CompressedStreamWriter.prototype.huffmanFlushStoredBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.pendingBufferWriteBits((0 << 1) + (lastBlock ? 1 : 0), 3);\n this.pendingBufferAlignToByte();\n this.pendingBufferWriteShort(storedLength);\n this.pendingBufferWriteShort(~storedLength);\n this.pendingBufferWriteByteBlock(stored, storedOffset, storedLength);\n this.huffmanReset();\n };\n CompressedStreamWriter.prototype.huffmanLengthCode = function (len) {\n if (len === 255) {\n return 285;\n }\n var code = 257;\n while (len >= 8) {\n code += 4;\n len >>= 1;\n }\n return code + len;\n };\n CompressedStreamWriter.prototype.huffmanDistanceCode = function (distance) {\n var code = 0;\n while (distance >= 4) {\n code += 2;\n distance >>= 1;\n }\n return code + distance;\n };\n CompressedStreamWriter.prototype.huffmanSendAllTrees = function (blTreeCodes) {\n this.treeCodeLengths.buildCodes();\n this.treeLiteral.buildCodes();\n this.treeDistances.buildCodes();\n this.pendingBufferWriteBits(this.treeLiteral.treeLength - 257, 5);\n this.pendingBufferWriteBits(this.treeDistances.treeLength - 1, 5);\n this.pendingBufferWriteBits(blTreeCodes - 4, 4);\n for (var rank = 0; rank < blTreeCodes; rank++) {\n this.pendingBufferWriteBits(this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[rank]], 3);\n }\n this.treeLiteral.writeTree(this.treeCodeLengths);\n this.treeDistances.writeTree(this.treeCodeLengths);\n };\n CompressedStreamWriter.prototype.huffmanReset = function () {\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.treeLiteral.reset();\n this.treeDistances.reset();\n this.treeCodeLengths.reset();\n };\n CompressedStreamWriter.prototype.huffmanCompressBlock = function () {\n for (var i = 0; i < this.bufferPosition; i++) {\n var literalLen = this.arrLiterals[i] & 255;\n var dist = this.arrDistances[i];\n if (dist-- !== 0) {\n var lc = this.huffmanLengthCode(literalLen);\n this.treeLiteral.writeCodeToStream(lc);\n var bits = Math.floor((lc - 261) / 4);\n if (bits > 0 && bits <= 5) {\n this.pendingBufferWriteBits(literalLen & ((1 << bits) - 1), bits);\n }\n var dc = this.huffmanDistanceCode(dist);\n this.treeDistances.writeCodeToStream(dc);\n bits = Math.floor(dc / 2 - 1);\n if (bits > 0) {\n this.pendingBufferWriteBits(dist & ((1 << bits) - 1), bits);\n }\n }\n else {\n this.treeLiteral.writeCodeToStream(literalLen);\n }\n }\n this.treeLiteral.writeCodeToStream(256);\n };\n /**\n * write bits in to internal buffer\n * @param {number} b - source of bits\n * @param {number} count - count of bits to write\n */\n CompressedStreamWriter.prototype.pendingBufferWriteBits = function (b, count) {\n var uint = new Uint32Array(1);\n uint[0] = this.pendingBufCache | (b << this.pendingBufBitsInCache);\n this.pendingBufCache = uint[0];\n this.pendingBufBitsInCache += count;\n this.pendingBufferFlushBits();\n };\n CompressedStreamWriter.prototype.pendingBufferFlush = function (isClose) {\n this.pendingBufferFlushBits();\n if (this.pendingBufLength > 0) {\n var array = new Uint8Array(this.pendingBufLength);\n array.set(this.pendingBuffer.subarray(0, this.pendingBufLength), 0);\n this.stream.push(array);\n }\n this.pendingBufLength = 0;\n };\n CompressedStreamWriter.prototype.pendingBufferFlushBits = function () {\n var result = 0;\n while (this.pendingBufBitsInCache >= 8 && this.pendingBufLength < (1 << 16)) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n this.pendingBufCache >>= 8;\n this.pendingBufBitsInCache -= 8;\n result++;\n }\n return result;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteByteBlock = function (data, offset, length) {\n var array = data.subarray(offset, offset + length);\n this.pendingBuffer.set(array, this.pendingBufLength);\n this.pendingBufLength += length;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteShort = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s;\n this.pendingBuffer[this.pendingBufLength++] = (s >> 8);\n };\n CompressedStreamWriter.prototype.pendingBufferAlignToByte = function () {\n if (this.pendingBufBitsInCache > 0) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n }\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n };\n /**\n * close the stream and write all pending buffer in to stream\n * @returns {void}\n */\n CompressedStreamWriter.prototype.close = function () {\n do {\n this.pendingBufferFlush(true);\n if (!this.compressData(true)) {\n this.pendingBufferFlush(true);\n this.pendingBufferAlignToByte();\n if (!this.noWrap) {\n this.pendingBufferWriteShortBytes(this.checkSum >> 16);\n this.pendingBufferWriteShortBytes(this.checkSum & 0xffff);\n }\n this.pendingBufferFlush(true);\n }\n } while (!(this.inputEnd === this.inputOffset) ||\n !(this.pendingBufLength === 0));\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n CompressedStreamWriter.prototype.destroy = function () {\n this.stream = [];\n this.stream = undefined;\n this.pendingBuffer = undefined;\n this.treeLiteral = undefined;\n this.treeDistances = undefined;\n this.treeCodeLengths = undefined;\n this.arrLiterals = undefined;\n this.arrDistances = undefined;\n this.hashHead = undefined;\n this.hashPrevious = undefined;\n this.dataWindow = undefined;\n this.inputBuffer = undefined;\n this.pendingBufLength = undefined;\n this.pendingBufCache = undefined;\n this.pendingBufBitsInCache = undefined;\n this.bufferPosition = undefined;\n this.extraBits = undefined;\n this.currentHash = undefined;\n this.matchStart = undefined;\n this.matchLength = undefined;\n this.matchPrevAvail = undefined;\n this.blockStart = undefined;\n this.stringStart = undefined;\n this.lookAhead = undefined;\n this.totalBytesIn = undefined;\n this.inputOffset = undefined;\n this.inputEnd = undefined;\n this.windowSize = undefined;\n this.windowMask = undefined;\n this.hashSize = undefined;\n this.hashMask = undefined;\n this.hashShift = undefined;\n this.maxDist = undefined;\n this.checkSum = undefined;\n this.noWrap = undefined;\n };\n return CompressedStreamWriter;\n}());\nexport { CompressedStreamWriter };\n/**\n * represent the Huffman Tree\n */\nvar CompressorHuffmanTree = /** @class */ (function () {\n /**\n * Create new Huffman Tree\n * @param {CompressedStreamWriter} writer instance\n * @param {number} elementCount - element count\n * @param {number} minCodes - minimum count\n * @param {number} maxLength - maximum count\n */\n function CompressorHuffmanTree(writer, elementCount, minCodes, maxLength) {\n this.writer = writer;\n this.codeMinCount = minCodes;\n this.maxLength = maxLength;\n this.codeFrequency = new Uint16Array(elementCount);\n this.lengthCount = new Int32Array(maxLength);\n }\n Object.defineProperty(CompressorHuffmanTree.prototype, \"treeLength\", {\n get: function () {\n return this.codeCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeLengths\", {\n get: function () {\n return this.codeLength;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeFrequencies\", {\n get: function () {\n return this.codeFrequency;\n },\n enumerable: true,\n configurable: true\n });\n CompressorHuffmanTree.prototype.setStaticCodes = function (codes, lengths) {\n var temp = new Int16Array(codes.length);\n temp.set(codes, 0);\n this.codes = temp;\n var lengthTemp = new Uint8Array(lengths.length);\n lengthTemp.set(lengths, 0);\n this.codeLength = lengthTemp;\n };\n /**\n * reset all code data in tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.reset = function () {\n for (var i = 0; i < this.codeFrequency.length; i++) {\n this.codeFrequency[i] = 0;\n }\n this.codes = undefined;\n this.codeLength = undefined;\n };\n /**\n * write code to the compressor output stream\n * @param {number} code - code to be written\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeCodeToStream = function (code) {\n this.writer.pendingBufferWriteBits(this.codes[code] & 0xffff, this.codeLength[code]);\n };\n /**\n * calculate code from their frequencies\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildCodes = function () {\n var nextCode = new Int32Array(this.maxLength);\n this.codes = new Int16Array(this.codeCount);\n var code = 0;\n for (var bitsCount = 0; bitsCount < this.maxLength; bitsCount++) {\n nextCode[bitsCount] = code;\n code += this.lengthCount[bitsCount] << (15 - bitsCount);\n }\n for (var i = 0; i < this.codeCount; i++) {\n var bits = this.codeLength[i];\n if (bits > 0) {\n this.codes[i] = CompressorHuffmanTree.bitReverse(nextCode[bits - 1]);\n nextCode[bits - 1] += 1 << (16 - bits);\n }\n }\n };\n CompressorHuffmanTree.bitReverse = function (value) {\n return (CompressorHuffmanTree.reverseBits[value & 15] << 12\n | CompressorHuffmanTree.reverseBits[(value >> 4) & 15] << 8\n | CompressorHuffmanTree.reverseBits[(value >> 8) & 15] << 4\n | CompressorHuffmanTree.reverseBits[value >> 12]);\n };\n /**\n * calculate length of compressed data\n * @returns {number}\n */\n CompressorHuffmanTree.prototype.getEncodedLength = function () {\n var len = 0;\n for (var i = 0; i < this.codeFrequency.length; i++) {\n len += this.codeFrequency[i] * this.codeLength[i];\n }\n return len;\n };\n /**\n * calculate code frequencies\n * @param {CompressorHuffmanTree} blTree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.calculateBLFreq = function (blTree) {\n var maxCount;\n var minCount;\n var count;\n var curLen = -1;\n var i = 0;\n while (i < this.codeCount) {\n count = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxCount = 138;\n minCount = 3;\n }\n else {\n maxCount = 6;\n minCount = 3;\n if (curLen !== nextLen) {\n blTree.codeFrequency[nextLen]++;\n count = 0;\n }\n }\n curLen = nextLen;\n i++;\n while (i < this.codeCount && curLen === this.codeLength[i]) {\n i++;\n if (++count >= maxCount) {\n break;\n }\n }\n if (count < minCount) {\n blTree.codeFrequency[curLen] += count;\n }\n else if (curLen !== 0) {\n blTree.codeFrequency[16]++;\n }\n else if (count <= 10) {\n blTree.codeFrequency[17]++;\n }\n else {\n blTree.codeFrequency[18]++;\n }\n }\n };\n /**\n * @param {CompressorHuffmanTree} blTree - write tree to output stream\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeTree = function (blTree) {\n var maxRepeatCount;\n var minRepeatCount;\n var currentRepeatCount;\n var currentCodeLength = -1;\n var i = 0;\n while (i < this.codeCount) {\n currentRepeatCount = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxRepeatCount = 138;\n minRepeatCount = 3;\n }\n else {\n maxRepeatCount = 6;\n minRepeatCount = 3;\n if (currentCodeLength !== nextLen) {\n blTree.writeCodeToStream(nextLen);\n currentRepeatCount = 0;\n }\n }\n currentCodeLength = nextLen;\n i++;\n while (i < this.codeCount && currentCodeLength === this.codeLength[i]) {\n i++;\n if (++currentRepeatCount >= maxRepeatCount) {\n break;\n }\n }\n if (currentRepeatCount < minRepeatCount) {\n while (currentRepeatCount-- > 0) {\n blTree.writeCodeToStream(currentCodeLength);\n }\n }\n else if (currentCodeLength !== 0) {\n blTree.writeCodeToStream(16);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 2);\n }\n else if (currentRepeatCount <= 10) {\n blTree.writeCodeToStream(17);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 3);\n }\n else {\n blTree.writeCodeToStream(18);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 11, 7);\n }\n }\n };\n /**\n * Build huffman tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildTree = function () {\n var codesCount = this.codeFrequency.length;\n var arrTree = new Int32Array(codesCount);\n var treeLength = 0;\n var maxCount = 0;\n for (var n = 0; n < codesCount; n++) {\n var freq = this.codeFrequency[n];\n if (freq !== 0) {\n var pos = treeLength++;\n var pPos = 0;\n while (pos > 0 && this.codeFrequency[arrTree[pPos = Math.floor((pos - 1) / 2)]] > freq) {\n arrTree[pos] = arrTree[pPos];\n pos = pPos;\n }\n arrTree[pos] = n;\n maxCount = n;\n }\n }\n while (treeLength < 2) {\n arrTree[treeLength++] =\n (maxCount < 2) ? ++maxCount : 0;\n }\n this.codeCount = Math.max(maxCount + 1, this.codeMinCount);\n var leafsCount = treeLength;\n var nodesCount = leafsCount;\n var child = new Int32Array(4 * treeLength - 2);\n var values = new Int32Array(2 * treeLength - 1);\n for (var i = 0; i < treeLength; i++) {\n var node = arrTree[i];\n var iIndex = 2 * i;\n child[iIndex] = node;\n child[iIndex + 1] = -1;\n values[i] = (this.codeFrequency[node] << 8);\n arrTree[i] = i;\n }\n this.constructHuffmanTree(arrTree, treeLength, values, nodesCount, child);\n this.buildLength(child);\n };\n CompressorHuffmanTree.prototype.constructHuffmanTree = function (arrTree, treeLength, values, nodesCount, child) {\n do {\n var first = arrTree[0];\n var last = arrTree[--treeLength];\n var lastVal = values[last];\n var pPos = 0;\n var path = 1;\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n }\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n var second = arrTree[0];\n last = nodesCount++;\n child[2 * last] = first;\n child[2 * last + 1] = second;\n var minDepth = Math.min(values[first] & 0xff, values[second] & 0xff);\n values[last] = lastVal = values[first] + values[second] - minDepth + 1;\n pPos = 0;\n path = 1;\n /* tslint:disable */\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n } /* tslint:disable */\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n } while (treeLength > 1);\n };\n CompressorHuffmanTree.prototype.buildLength = function (child) {\n this.codeLength = new Uint8Array(this.codeFrequency.length);\n var numNodes = Math.floor(child.length / 2);\n var numLeafs = Math.floor((numNodes + 1) / 2);\n var overflow = 0;\n for (var i = 0; i < this.maxLength; i++) {\n this.lengthCount[i] = 0;\n }\n overflow = this.calculateOptimalCodeLength(child, overflow, numNodes);\n if (overflow === 0) {\n return;\n }\n var iIncreasableLength = this.maxLength - 1;\n do {\n while (this.lengthCount[--iIncreasableLength] === 0) {\n /* tslint:disable */\n }\n do {\n this.lengthCount[iIncreasableLength]--;\n this.lengthCount[++iIncreasableLength]++;\n overflow -= (1 << (this.maxLength - 1 - iIncreasableLength));\n } while (overflow > 0 && iIncreasableLength < this.maxLength - 1);\n } while (overflow > 0);\n this.recreateTree(child, overflow, numLeafs);\n };\n CompressorHuffmanTree.prototype.recreateTree = function (child, overflow, numLeafs) {\n this.lengthCount[this.maxLength - 1] += overflow;\n this.lengthCount[this.maxLength - 2] -= overflow;\n var nodePtr = 2 * numLeafs;\n for (var bits = this.maxLength; bits !== 0; bits--) {\n var n = this.lengthCount[bits - 1];\n while (n > 0) {\n var childPtr = 2 * child[nodePtr++];\n if (child[childPtr + 1] === -1) {\n this.codeLength[child[childPtr]] = bits;\n n--;\n }\n }\n }\n };\n CompressorHuffmanTree.prototype.calculateOptimalCodeLength = function (child, overflow, numNodes) {\n var lengths = new Int32Array(numNodes);\n lengths[numNodes - 1] = 0;\n for (var i = numNodes - 1; i >= 0; i--) {\n var childIndex = 2 * i + 1;\n if (child[childIndex] !== -1) {\n var bitLength = lengths[i] + 1;\n if (bitLength > this.maxLength) {\n bitLength = this.maxLength;\n overflow++;\n }\n lengths[child[childIndex - 1]] = lengths[child[childIndex]] = bitLength;\n }\n else {\n var bitLength = lengths[i];\n this.lengthCount[bitLength - 1]++;\n this.codeLength[child[childIndex - 1]] = lengths[i];\n }\n }\n return overflow;\n };\n CompressorHuffmanTree.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n CompressorHuffmanTree.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n return CompressorHuffmanTree;\n}());\nexport { CompressorHuffmanTree };\n/**\n * Checksum calculator, based on Adler32 algorithm.\n */\nvar ChecksumCalculator = /** @class */ (function () {\n function ChecksumCalculator() {\n }\n /**\n * Updates checksum by calculating checksum of the\n * given buffer and adding it to current value.\n * @param {number} checksum - current checksum.\n * @param {Uint8Array} buffer - data byte array.\n * @param {number} offset - offset in the buffer.\n * @param {number} length - length of data to be used from the stream.\n * @returns {number}\n */\n ChecksumCalculator.checksumUpdate = function (checksum, buffer, offset, length) {\n var uint = new Uint32Array(1);\n uint[0] = checksum;\n var checksum_uint = uint[0];\n var s1 = uint[0] = checksum_uint & 65535;\n var s2 = uint[0] = checksum_uint >> ChecksumCalculator.checkSumBitOffset;\n while (length > 0) {\n var steps = Math.min(length, ChecksumCalculator.checksumIterationCount);\n length -= steps;\n while (--steps >= 0) {\n s1 = s1 + (uint[0] = (buffer[offset++] & 255));\n s2 = s2 + s1;\n }\n s1 %= ChecksumCalculator.checksumBase;\n s2 %= ChecksumCalculator.checksumBase;\n }\n checksum_uint = (s2 << ChecksumCalculator.checkSumBitOffset) | s1;\n return checksum_uint;\n };\n ChecksumCalculator.checkSumBitOffset = 16;\n ChecksumCalculator.checksumBase = 65521;\n ChecksumCalculator.checksumIterationCount = 3800;\n return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/**\n * Huffman Tree literal calculation\n */\n(function () {\n var i = 0;\n while (i < 144) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x030 + i) << 8);\n arrLiteralLengths[i++] = 8;\n }\n while (i < 256) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x190 - 144 + i) << 7);\n arrLiteralLengths[i++] = 9;\n }\n while (i < 280) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x000 - 256 + i) << 9);\n arrLiteralLengths[i++] = 7;\n }\n while (i < 286) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x0c0 - 280 + i) << 8);\n arrLiteralLengths[i++] = 8;\n }\n for (i = 0; i < 30; i++) {\n arrDistanceCodes[i] = CompressorHuffmanTree.bitReverse(i << 11);\n arrDistanceLengths[i] = 5;\n }\n})();\n","import { CompressedStreamWriter } from './compression-writer';\nimport { Save } from '@syncfusion/ej2-file-utils';\nvar crc32Table = [];\n/**\n * class provide compression library\n * ```typescript\n * let archive = new ZipArchive();\n * archive.compressionLevel = 'Normal';\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * archive.addItem(archiveItem);\n * archive.save(fileName.zip);\n * ```\n */\nvar ZipArchive = /** @class */ (function () {\n /**\n * constructor for creating ZipArchive instance\n */\n function ZipArchive() {\n this.files = [];\n this.level = 'Normal';\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(ZipArchive.prototype, \"compressionLevel\", {\n /**\n * gets compression level\n */\n get: function () {\n return this.level;\n },\n /**\n * sets compression level\n */\n set: function (level) {\n this.level = level;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchive.prototype, \"length\", {\n /**\n * gets items count\n */\n get: function () {\n if (this.files === undefined) {\n return 0;\n }\n return this.files.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * add new item to archive\n * @param {ZipArchiveItem} item - item to be added\n * @returns {void}\n */\n ZipArchive.prototype.addItem = function (item) {\n if (item === null || item === undefined) {\n throw new Error('ArgumentException: item cannot be null or undefined');\n }\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n if (file.name === item.name) {\n throw new Error('item with same name already exist');\n }\n }\n }\n this.files.push(item);\n };\n /**\n * add new directory to archive\n * @param directoryName directoryName to be created\n * @returns {void}\n */\n ZipArchive.prototype.addDirectory = function (directoryName) {\n if (directoryName === null || directoryName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (directoryName.length === 0) {\n throw new Error('ArgumentException: string cannot be empty');\n }\n if (directoryName.slice(-1) !== '/') {\n directoryName += '/';\n }\n if (this.files.indexOf(directoryName) !== -1) {\n throw new Error('item with same name already exist');\n }\n this.files.push(directoryName);\n };\n /**\n * gets item at specified index\n * @param {number} index - item index\n * @returns {ZipArchiveItem}\n */\n ZipArchive.prototype.getItem = function (index) {\n if (index >= 0 && index < this.files.length) {\n return this.files[index];\n }\n return undefined;\n };\n /**\n * determines whether an element is in the collection\n * @param {string | ZipArchiveItem} item - item to search\n * @returns {boolean}\n */\n ZipArchive.prototype.contains = function (item) {\n return this.files.indexOf(item) !== -1 ? true : false;\n };\n /**\n * save archive with specified file name\n * @param {string} fileName save archive with specified file name\n * @returns {Promise}\n */\n ZipArchive.prototype.save = function (fileName) {\n if (fileName === null || fileName === undefined || fileName.length === 0) {\n throw new Error('ArgumentException: fileName cannot be null or undefined');\n }\n if (this.files.length === 0) {\n throw new Error('InvalidOperation');\n }\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal(fileName, false).then(function () {\n resolve(zipArchive);\n });\n });\n };\n /**\n * Save archive as blob\n * @return {Promise}\n */\n ZipArchive.prototype.saveAsBlob = function () {\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal('', true).then(function (blob) {\n resolve(blob);\n });\n });\n };\n ZipArchive.prototype.saveInternal = function (fileName, skipFileSave) {\n var _this = this;\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n var zipData = [];\n var dirLength = 0;\n for (var i = 0; i < zipArchive.files.length; i++) {\n var compressedObject = _this.getCompressedData(_this.files[i]);\n compressedObject.then(function (data) {\n dirLength = zipArchive.constructZippedObject(zipData, data, dirLength, data.isDirectory);\n if (zipData.length === zipArchive.files.length) {\n var blob = zipArchive.writeZippedContent(fileName, zipData, dirLength, skipFileSave);\n resolve(blob);\n }\n });\n }\n });\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchive.prototype.destroy = function () {\n if (this.files !== undefined && this.files.length > 0) {\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n file.destroy();\n }\n file = undefined;\n }\n this.files = [];\n }\n this.files = undefined;\n this.level = undefined;\n };\n ZipArchive.prototype.getCompressedData = function (item) {\n var zipArchive = this;\n var promise = new Promise(function (resolve, reject) {\n if (item instanceof ZipArchiveItem) {\n var reader_1 = new FileReader();\n reader_1.onload = function () {\n var input = new Uint8Array(reader_1.result);\n var data = {\n fileName: item.name, crc32Value: 0, compressedData: [],\n compressedSize: undefined, uncompressedDataSize: input.length, compressionType: undefined,\n isDirectory: false\n };\n if (zipArchive.level === 'Normal') {\n zipArchive.compressData(input, data, crc32Table);\n var length_1 = 0;\n for (var i = 0; i < data.compressedData.length; i++) {\n length_1 += data.compressedData[i].length;\n }\n data.compressedSize = length_1;\n data.compressionType = '\\x08\\x00'; //Deflated = 8\n }\n else {\n data.compressedSize = input.length;\n data.crc32Value = zipArchive.calculateCrc32Value(0, input, crc32Table);\n data.compressionType = '\\x00\\x00'; // Stored = 0\n data.compressedData.push(input);\n }\n resolve(data);\n };\n reader_1.readAsArrayBuffer(item.data);\n }\n else {\n var data = {\n fileName: item, crc32Value: 0, compressedData: '', compressedSize: 0, uncompressedDataSize: 0,\n compressionType: '\\x00\\x00', isDirectory: true\n };\n resolve(data);\n }\n });\n return promise;\n };\n ZipArchive.prototype.compressData = function (input, data, crc32Table) {\n var compressor = new CompressedStreamWriter(true);\n var currentIndex = 0;\n var nextIndex = 0;\n do {\n if (currentIndex >= input.length) {\n compressor.close();\n break;\n }\n nextIndex = Math.min(input.length, currentIndex + 16384);\n var subArray = input.subarray(currentIndex, nextIndex);\n data.crc32Value = this.calculateCrc32Value(data.crc32Value, subArray, crc32Table);\n compressor.write(subArray, 0, nextIndex - currentIndex);\n currentIndex = nextIndex;\n } while (currentIndex <= input.length);\n data.compressedData = compressor.compressedData;\n compressor.destroy();\n };\n ZipArchive.prototype.constructZippedObject = function (zipParts, data, dirLength, isDirectory) {\n var extFileAttr = 0;\n var date = new Date();\n if (isDirectory) {\n extFileAttr = extFileAttr | 0x00010; // directory flag\n }\n extFileAttr = extFileAttr | (0 & 0x3F);\n var header = this.writeHeader(data, date);\n var localHeader = 'PK\\x03\\x04' + header + data.fileName;\n var centralDir = this.writeCentralDirectory(data, header, dirLength, extFileAttr);\n zipParts.push({ localHeader: localHeader, centralDir: centralDir, compressedData: data });\n return dirLength + localHeader.length + data.compressedSize;\n };\n ZipArchive.prototype.writeHeader = function (data, date) {\n var zipHeader = '';\n zipHeader += '\\x0A\\x00' + '\\x00\\x00'; // version needed to extract & general purpose bit flag\n zipHeader += data.compressionType; // compression method Deflate=8,Stored=0\n zipHeader += this.getBytes(this.getModifiedTime(date), 2); // last modified Time\n zipHeader += this.getBytes(this.getModifiedDate(date), 2); // last modified date\n zipHeader += this.getBytes(data.crc32Value, 4); // crc-32 value\n zipHeader += this.getBytes(data.compressedSize, 4); // compressed file size\n zipHeader += this.getBytes(data.uncompressedDataSize, 4); // uncompressed file size\n zipHeader += this.getBytes(data.fileName.length, 2); // file name length\n zipHeader += this.getBytes(0, 2); // extra field length\n return zipHeader;\n };\n ZipArchive.prototype.writeZippedContent = function (fileName, zipData, localDirLen, skipFileSave) {\n var cenDirLen = 0;\n var buffer = [];\n for (var i = 0; i < zipData.length; i++) {\n var item = zipData[i];\n cenDirLen += item.centralDir.length;\n buffer.push(this.getArrayBuffer(item.localHeader));\n while (item.compressedData.compressedData.length) {\n buffer.push(item.compressedData.compressedData.shift().buffer);\n }\n }\n for (var i = 0; i < zipData.length; i++) {\n buffer.push(this.getArrayBuffer(zipData[i].centralDir));\n }\n buffer.push(this.getArrayBuffer(this.writeFooter(zipData, cenDirLen, localDirLen)));\n var blob = new Blob(buffer, { type: 'application/zip' });\n if (!skipFileSave) {\n Save.save(fileName, blob);\n }\n return blob;\n };\n ZipArchive.prototype.writeCentralDirectory = function (data, localHeader, offset, externalFileAttribute) {\n var directoryHeader = 'PK\\x01\\x02' +\n this.getBytes(0x0014, 2) + localHeader + // inherit from file header\n this.getBytes(0, 2) + // comment length\n '\\x00\\x00' + '\\x00\\x00' + // internal file attributes \n this.getBytes(externalFileAttribute, 4) + // external file attributes\n this.getBytes(offset, 4) + // local fileHeader relative offset\n data.fileName;\n return directoryHeader;\n };\n ZipArchive.prototype.writeFooter = function (zipData, centralLength, localLength) {\n var dirEnd = 'PK\\x05\\x06' + '\\x00\\x00' + '\\x00\\x00' +\n this.getBytes(zipData.length, 2) + this.getBytes(zipData.length, 2) +\n this.getBytes(centralLength, 4) + this.getBytes(localLength, 4) +\n this.getBytes(0, 2);\n return dirEnd;\n };\n ZipArchive.prototype.getArrayBuffer = function (input) {\n var a = new Uint8Array(input.length);\n for (var j = 0; j < input.length; ++j) {\n a[j] = input.charCodeAt(j) & 0xFF;\n }\n return a.buffer;\n };\n ZipArchive.prototype.getBytes = function (value, offset) {\n var bytes = '';\n for (var i = 0; i < offset; i++) {\n bytes += String.fromCharCode(value & 0xff);\n value = value >>> 8;\n }\n return bytes;\n };\n ZipArchive.prototype.getModifiedTime = function (date) {\n var modTime = date.getHours();\n modTime = modTime << 6;\n modTime = modTime | date.getMinutes();\n modTime = modTime << 5;\n return modTime = modTime | date.getSeconds() / 2;\n };\n ZipArchive.prototype.getModifiedDate = function (date) {\n var modiDate = date.getFullYear() - 1980;\n modiDate = modiDate << 4;\n modiDate = modiDate | (date.getMonth() + 1);\n modiDate = modiDate << 5;\n return modiDate = modiDate | date.getDate();\n };\n ZipArchive.prototype.calculateCrc32Value = function (crc32Value, input, crc32Table) {\n crc32Value ^= -1;\n for (var i = 0; i < input.length; i++) {\n crc32Value = (crc32Value >>> 8) ^ crc32Table[(crc32Value ^ input[i]) & 0xFF];\n }\n return (crc32Value ^ (-1));\n };\n return ZipArchive;\n}());\nexport { ZipArchive };\n/**\n * Class represent unique ZipArchive item\n * ```typescript\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * ```\n */\nvar ZipArchiveItem = /** @class */ (function () {\n /**\n * constructor for creating {ZipArchiveItem} instance\n * @param {Blob|ArrayBuffer} data file data\n * @param {itemName} itemName absolute file path\n */\n function ZipArchiveItem(data, itemName) {\n if (data === null || data === undefined) {\n throw new Error('ArgumentException: data cannot be null or undefined');\n }\n if (itemName === null || itemName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (itemName.length === 0) {\n throw new Error('string cannot be empty');\n }\n this.data = data;\n this.name = itemName;\n }\n Object.defineProperty(ZipArchiveItem.prototype, \"name\", {\n /**\n * Get the name of archive item\n * @returns string\n */\n get: function () {\n return this.fileName;\n },\n /**\n * Set the name of archive item\n * @param {string} value\n */\n set: function (value) {\n this.fileName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchiveItem.prototype.destroy = function () {\n this.fileName = undefined;\n this.data = undefined;\n };\n return ZipArchiveItem;\n}());\nexport { ZipArchiveItem };\n/**\n * construct cyclic redundancy code table\n */\n(function () {\n var i;\n for (var j = 0; j < 256; j++) {\n i = j;\n for (var k = 0; k < 8; k++) {\n i = ((i & 1) ? (0xEDB88320 ^ (i >>> 1)) : (i >>> 1));\n }\n crc32Table[j] = i;\n }\n})();\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfDictionary } from './pdf-dictionary';\nimport { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\nimport { PdfName } from './pdf-name';\nimport { PdfArray } from './pdf-array';\nimport { PdfReferenceHolder } from './pdf-reference';\nimport { CompressedStreamWriter } from '@syncfusion/ej2-compression';\n/**\n * `PdfStream` class is used to perform stream related primitive operations.\n * @private\n */\nvar PdfStream = /** @class */ (function (_super) {\n __extends(PdfStream, _super);\n function PdfStream(dictionary, data) {\n var _this = _super.call(this, dictionary) || this;\n //Constants\n /**\n * @hidden\n * @private\n */\n _this.dicPrefix = 'stream';\n /**\n * @hidden\n * @private\n */\n _this.dicSuffix = 'endstream';\n /**\n * Internal variable to hold `cloned object`.\n * @private\n */\n _this.clonedObject2 = null;\n /**\n * @hidden\n * @private\n */\n _this.bCompress = true;\n /**\n * @hidden\n * @private\n */\n _this.isImageStream = false;\n /**\n * @hidden\n * @private\n */\n _this.isFontStream = false;\n if (typeof dictionary !== 'undefined' || typeof data !== 'undefined') {\n _this.dataStream2 = [];\n _this.dataStream2 = data;\n _this.bCompress2 = false;\n }\n else {\n _this.dataStream2 = [];\n _this.bCompress2 = true;\n //Pending\n }\n return _this;\n }\n Object.defineProperty(PdfStream.prototype, \"internalStream\", {\n /**\n * Gets the `internal` stream.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"isImage\", {\n /**\n * Gets or sets 'is image' flag.\n * @private\n */\n get: function () {\n return this.isImageStream;\n },\n set: function (value) {\n this.isImageStream = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"isFont\", {\n /**\n * Gets or sets 'is font' flag.\n * @private\n */\n get: function () {\n return this.isFontStream;\n },\n set: function (value) {\n this.isFontStream = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"compress\", {\n /**\n * Gets or sets `compression` flag.\n * @private\n */\n get: function () {\n return this.bCompress;\n },\n set: function (value) {\n this.bCompress = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"data\", {\n /**\n * Gets or sets the `data`.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clear` the internal stream.\n * @private\n */\n PdfStream.prototype.clearStream = function () {\n this.internalStream = [];\n if (this.items.containsKey(this.dictionaryProperties.filter)) {\n this.remove(this.dictionaryProperties.filter);\n }\n this.bCompress = true;\n this.modify();\n };\n /**\n * `Writes` the specified string.\n * @private\n */\n PdfStream.prototype.write = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (text.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty string, text');\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * `Writes` the specified bytes.\n * @private\n */\n PdfStream.prototype.writeBytes = function (data) {\n if (data === null) {\n throw new Error('ArgumentNullException:data');\n }\n if (data.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty bytes, data');\n }\n var text = '';\n for (var i = 0; i < data.length; i++) {\n text += String.fromCharCode(data[i]);\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * Raises event `Cmap BeginSave`.\n * @private\n */\n PdfStream.prototype.onCmapBeginSave = function () {\n this.cmapBeginSave.sender.cmapBeginSave();\n };\n /**\n * Raises event `Font Program BeginSave`.\n * @private\n */\n PdfStream.prototype.onFontProgramBeginSave = function () {\n this.fontProgramBeginSave.sender.fontProgramBeginSave();\n };\n /**\n * `Compresses the content` if it's required.\n * @private\n */\n PdfStream.prototype.compressContent = function (data, writer) {\n if (this.bCompress) {\n var byteArray = [];\n for (var i = 0; i < data.length; i++) {\n byteArray.push(data.charCodeAt(i));\n }\n var dataArray = new Uint8Array(byteArray);\n var sw = new CompressedStreamWriter();\n // data = 'Hello World!!!';\n sw.write(dataArray, 0, dataArray.length);\n sw.close();\n data = sw.getCompressedString;\n this.addFilter(this.dictionaryProperties.flatedecode);\n }\n return data;\n };\n /**\n * `Adds a filter` to the filter array.\n * @private\n */\n PdfStream.prototype.addFilter = function (filterName) {\n var obj = this.items.getValue(this.dictionaryProperties.filter);\n if (obj instanceof PdfReferenceHolder) {\n var rh = obj;\n obj = rh.object;\n }\n var array = obj;\n var name = obj;\n if (name != null) {\n array = new PdfArray();\n array.insert(0, name);\n this.items.setValue(this.dictionaryProperties.filter, array);\n }\n name = new PdfName(filterName);\n if (array == null) {\n this.items.setValue(this.dictionaryProperties.filter, name);\n }\n else {\n array.insert(0, name);\n }\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfStream.prototype.save = function (writer) {\n if (typeof this.cmapBeginSave !== 'undefined') {\n this.onCmapBeginSave();\n }\n if (typeof this.fontProgramBeginSave !== 'undefined') {\n this.onFontProgramBeginSave();\n }\n var data = '';\n for (var i = 0; i < this.data.length; i++) {\n data = data + this.data[i];\n }\n if (data.length > 1 && !this.isImage && !this.isFont) {\n data = 'q\\r\\n' + data + 'Q\\r\\n';\n }\n data = this.compressContent(data, writer);\n var length = data.length;\n this.items.setValue(this.dictionaryProperties.length, new PdfNumber(length));\n _super.prototype.save.call(this, writer, false);\n writer.write(this.dicPrefix);\n writer.write(Operators.newLine);\n if (data.length > 0) {\n writer.write(data);\n }\n writer.write(Operators.newLine);\n writer.write(this.dicSuffix);\n writer.write(Operators.newLine);\n };\n /**\n * Converts `bytes to string`.\n * @private\n */\n PdfStream.bytesToString = function (byteArray) {\n var output = '';\n for (var i = 0; i < byteArray.length; i++) {\n output = output + String.fromCharCode(byteArray[i]);\n }\n return output;\n };\n return PdfStream;\n}(PdfDictionary));\nexport { PdfStream };\nvar SaveCmapEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveCmapEventHandler(sender) {\n this.sender = sender;\n }\n return SaveCmapEventHandler;\n}());\nexport { SaveCmapEventHandler };\nvar SaveFontProgramEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveFontProgramEventHandler(sender) {\n this.sender = sender;\n }\n return SaveFontProgramEventHandler;\n}());\nexport { SaveFontProgramEventHandler };\n","/**\n * `PdfString` class is used to perform string related primitive operations.\n * @private\n */\nexport var InternalEnum;\n(function (InternalEnum) {\n //Internals\n /**\n * public Enum for `ForceEncoding`.\n * @private\n */\n var ForceEncoding;\n (function (ForceEncoding) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Ascii`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Ascii\"] = 1] = \"Ascii\";\n /**\n * Specifies the type of `Unicode`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Unicode\"] = 2] = \"Unicode\";\n })(ForceEncoding = InternalEnum.ForceEncoding || (InternalEnum.ForceEncoding = {}));\n /**\n * public Enum for `SourceType`.\n * @private\n */\n var SourceType;\n (function (SourceType) {\n /**\n * Specifies the type of `StringValue`.\n * @private\n */\n SourceType[SourceType[\"StringValue\"] = 0] = \"StringValue\";\n /**\n * Specifies the type of `ByteBuffer`.\n * @private\n */\n SourceType[SourceType[\"ByteBuffer\"] = 1] = \"ByteBuffer\";\n })(SourceType || (SourceType = {}));\n})(InternalEnum || (InternalEnum = {}));\nvar PdfString = /** @class */ (function () {\n function PdfString(value) {\n /**\n * Value indicating whether the string was converted to hex.\n * @default false\n * @private\n */\n this.bHex = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position1 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject1 = null;\n /**\n * `Shows` if the data of the stream was decrypted.\n * @default false\n * @private\n */\n this.bDecrypted = false;\n /**\n * Shows if the data of the stream `was decrypted`.\n * @default false\n * @private\n */\n this.isParentDecrypted = false;\n /**\n * Gets a value indicating whether the object is `packed or not`.\n * @default false\n * @private\n */\n this.isPacked = false;\n /**\n * @hidden\n * @private\n */\n this.isFormField = false;\n /**\n * @hidden\n * @private\n */\n this.isColorSpace = false;\n /**\n * @hidden\n * @private\n */\n this.isHexString = true;\n if (typeof value === 'undefined') {\n this.bHex = false;\n }\n else {\n if (!(value.length > 0 && value[0] === '0xfeff')) {\n this.stringValue = value;\n this.data = [];\n for (var i = 0; i < value.length; ++i) {\n this.data.push(value.charCodeAt(i));\n }\n }\n }\n }\n Object.defineProperty(PdfString.prototype, \"hex\", {\n //Property\n /**\n * Gets a value indicating whether string is in `hex`.\n * @private\n */\n get: function () {\n return this.bHex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"value\", {\n /**\n * Gets or sets string `value` of the object.\n * @private\n */\n get: function () {\n return this.stringValue;\n },\n set: function (value) {\n this.stringValue = value;\n this.data = null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status1;\n },\n set: function (value) {\n this.status1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving1;\n },\n set: function (value) {\n this.isSaving1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index1;\n },\n set: function (value) {\n this.index1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position1;\n },\n set: function (value) {\n this.position1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"converted\", {\n /**\n * Gets a value indicating whether to check if the value has unicode characters.\n * @private\n */\n get: function () {\n return this.bConverted;\n },\n /**\n * sets a value indicating whether to check if the value has unicode characters.\n * @private\n */\n set: function (value) {\n this.bConverted = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"encode\", {\n /**\n * Gets value indicating whether we should convert data to Unicode.\n */\n get: function () {\n return this.bForceEncoding;\n },\n set: function (value) {\n this.bForceEncoding = value;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * Converts `bytes to string using hex format` for representing string.\n * @private\n */\n PdfString.bytesToHex = function (bytes) {\n if (bytes == null) {\n return '';\n }\n var builder = '';\n return builder;\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfString.prototype.save = function (writer) {\n if (writer === null) {\n throw new Error('ArgumentNullException : writer');\n }\n if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {\n writer.write(this.pdfEncode());\n }\n else {\n writer.write(PdfString.stringMark[0] + this.value + PdfString.stringMark[1]);\n }\n };\n PdfString.prototype.pdfEncode = function () {\n var result = '';\n if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {\n var data = this.escapeSymbols(this.value);\n for (var i = 0; i < data.length; i++) {\n result += String.fromCharCode(data[i]);\n }\n result = PdfString.stringMark[0] + result + PdfString.stringMark[1];\n }\n else {\n result = this.value;\n }\n return result;\n };\n PdfString.prototype.escapeSymbols = function (value) {\n var data = [];\n for (var i = 0; i < value.length; i++) {\n var currentData = value.charCodeAt(i);\n switch (currentData) {\n case 40:\n case 41:\n data.push(92);\n data.push(currentData);\n break;\n case 13:\n data.push(92);\n data.push(114);\n break;\n case 92:\n data.push(92);\n data.push(currentData);\n break;\n default:\n data.push(currentData);\n break;\n }\n }\n return data;\n };\n /**\n * Creates a `copy of PdfString`.\n * @private\n */\n PdfString.prototype.clone = function (crossTable) {\n if (this.clonedObject1 !== null && this.clonedObject1.CrossTable === crossTable) {\n return this.clonedObject1;\n }\n else {\n this.clonedObject1 = null;\n }\n var newString = new PdfString(this.stringValue);\n newString.bHex = this.bHex;\n newString.crossTable = crossTable;\n newString.isColorSpace = this.isColorSpace;\n this.clonedObject1 = newString;\n return newString;\n };\n /**\n * Converts string to array of unicode symbols.\n */\n PdfString.toUnicodeArray = function (value, bAddPrefix) {\n if (value == null) {\n throw new Error('Argument Null Exception : value');\n }\n var startIndex = 0;\n var output = [];\n for (var i = 0; i < value.length; i++) {\n var code = value.charCodeAt(i);\n output.push(code / 256 >>> 0);\n output.push(code & 0xff);\n }\n return output;\n };\n /**\n * Converts byte data to string.\n */\n PdfString.byteToString = function (data) {\n if (data == null) {\n throw new Error('Argument Null Exception : stream');\n }\n var result = '';\n for (var i = 0; i < data.length; ++i) {\n result += String.fromCharCode(data[i]);\n }\n return result;\n };\n //constants = ;\n /**\n * `General markers` for string.\n * @private\n */\n PdfString.stringMark = '()';\n /**\n * `Hex markers` for string.\n * @private\n */\n PdfString.hexStringMark = '<>';\n /**\n * Format of password data.\n * @private\n */\n PdfString.hexFormatPattern = '{0:X2}';\n return PdfString;\n}());\nexport { PdfString };\n","/**\n * public Enum for `PdfHorizontalAlignment`.\n * @private\n */\nexport var PdfHorizontalAlignment;\n(function (PdfHorizontalAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Right\"] = 2] = \"Right\";\n})(PdfHorizontalAlignment || (PdfHorizontalAlignment = {}));\n/**\n * public Enum for `PdfVerticalAlignment`.\n * @private\n */\nexport var PdfVerticalAlignment;\n(function (PdfVerticalAlignment) {\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Top\"] = 0] = \"Top\";\n /**\n * Specifies the type of `Middle`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Middle\"] = 1] = \"Middle\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Bottom\"] = 2] = \"Bottom\";\n})(PdfVerticalAlignment || (PdfVerticalAlignment = {}));\n/**\n * public Enum for `public`.\n * @private\n */\nexport var PdfTextAlignment;\n(function (PdfTextAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Right\"] = 2] = \"Right\";\n /**\n * Specifies the type of `Justify`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Justify\"] = 3] = \"Justify\";\n})(PdfTextAlignment || (PdfTextAlignment = {}));\n/**\n * public Enum for `TextRenderingMode`.\n * @private\n */\nexport var TextRenderingMode;\n(function (TextRenderingMode) {\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Fill\"] = 0] = \"Fill\";\n /**\n * Specifies the type of `Stroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Stroke\"] = 1] = \"Stroke\";\n /**\n * Specifies the type of `FillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"FillStroke\"] = 2] = \"FillStroke\";\n /**\n * Specifies the type of `None`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"None\"] = 3] = \"None\";\n /**\n * Specifies the type of `ClipFlag`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFlag\"] = 4] = \"ClipFlag\";\n /**\n * Specifies the type of `ClipFill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFill\"] = 4] = \"ClipFill\";\n /**\n * Specifies the type of `ClipStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipStroke\"] = 5] = \"ClipStroke\";\n /**\n * Specifies the type of `ClipFillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFillStroke\"] = 6] = \"ClipFillStroke\";\n /**\n * Specifies the type of `Clip`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Clip\"] = 7] = \"Clip\";\n})(TextRenderingMode || (TextRenderingMode = {}));\n/**\n * public Enum for `PdfLineJoin`.\n * @private\n */\nexport var PdfLineJoin;\n(function (PdfLineJoin) {\n /**\n * Specifies the type of `Miter`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Miter\"] = 0] = \"Miter\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Bevel`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Bevel\"] = 2] = \"Bevel\";\n})(PdfLineJoin || (PdfLineJoin = {}));\n/**\n * public Enum for `PdfLineCap`.\n * @private\n */\nexport var PdfLineCap;\n(function (PdfLineCap) {\n /**\n * Specifies the type of `Flat`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Flat\"] = 0] = \"Flat\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Square`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Square\"] = 2] = \"Square\";\n})(PdfLineCap || (PdfLineCap = {}));\n/**\n * public Enum for `PdfDashStyle`.\n * @private\n */\nexport var PdfDashStyle;\n(function (PdfDashStyle) {\n /**\n * Specifies the type of `Solid`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Solid\"] = 0] = \"Solid\";\n /**\n * Specifies the type of `Dash`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dash\"] = 1] = \"Dash\";\n /**\n * Specifies the type of `Dot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dot\"] = 2] = \"Dot\";\n /**\n * Specifies the type of `DashDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDot\"] = 3] = \"DashDot\";\n /**\n * Specifies the type of `DashDotDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDotDot\"] = 4] = \"DashDotDot\";\n /**\n * Specifies the type of `Custom`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Custom\"] = 5] = \"Custom\";\n})(PdfDashStyle || (PdfDashStyle = {}));\n/**\n * public Enum for `PdfFillMode`.\n * @private\n */\nexport var PdfFillMode;\n(function (PdfFillMode) {\n /**\n * Specifies the type of `Winding`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Winding\"] = 0] = \"Winding\";\n /**\n * Specifies the type of `Alternate`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Alternate\"] = 1] = \"Alternate\";\n})(PdfFillMode || (PdfFillMode = {}));\n/**\n * public Enum for `PdfColorSpace`.\n * @private\n */\nexport var PdfColorSpace;\n(function (PdfColorSpace) {\n /**\n * Specifies the type of `Rgb`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Rgb\"] = 0] = \"Rgb\";\n /**\n * Specifies the type of `Cmyk`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Cmyk\"] = 1] = \"Cmyk\";\n /**\n * Specifies the type of `GrayScale`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"GrayScale\"] = 2] = \"GrayScale\";\n /**\n * Specifies the type of `Indexed`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Indexed\"] = 3] = \"Indexed\";\n})(PdfColorSpace || (PdfColorSpace = {}));\n/**\n * public Enum for `PdfBlendMode`.\n * @private\n */\nexport var PdfBlendMode;\n(function (PdfBlendMode) {\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Normal\"] = 0] = \"Normal\";\n /**\n * Specifies the type of `Multiply`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Multiply\"] = 1] = \"Multiply\";\n /**\n * Specifies the type of `Screen`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Screen\"] = 2] = \"Screen\";\n /**\n * Specifies the type of `Overlay`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Overlay\"] = 3] = \"Overlay\";\n /**\n * Specifies the type of `Darken`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Darken\"] = 4] = \"Darken\";\n /**\n * Specifies the type of `Lighten`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Lighten\"] = 5] = \"Lighten\";\n /**\n * Specifies the type of `ColorDodge`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorDodge\"] = 6] = \"ColorDodge\";\n /**\n * Specifies the type of `ColorBurn`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorBurn\"] = 7] = \"ColorBurn\";\n /**\n * Specifies the type of `HardLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"HardLight\"] = 8] = \"HardLight\";\n /**\n * Specifies the type of `SoftLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"SoftLight\"] = 9] = \"SoftLight\";\n /**\n * Specifies the type of `Difference`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Difference\"] = 10] = \"Difference\";\n /**\n * Specifies the type of `Exclusion`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Exclusion\"] = 11] = \"Exclusion\";\n /**\n * Specifies the type of `Hue`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Hue\"] = 12] = \"Hue\";\n /**\n * Specifies the type of `Saturation`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Saturation\"] = 13] = \"Saturation\";\n /**\n * Specifies the type of `Color`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Color\"] = 14] = \"Color\";\n /**\n * Specifies the type of `Luminosity`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Luminosity\"] = 15] = \"Luminosity\";\n})(PdfBlendMode || (PdfBlendMode = {}));\n/**\n * public Enum for `PdfGraphicsUnit`.\n * @private\n */\nexport var PdfGraphicsUnit;\n(function (PdfGraphicsUnit) {\n /**\n * Specifies the type of `Centimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Centimeter\"] = 0] = \"Centimeter\";\n /**\n * Specifies the type of `Pica`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pica\"] = 1] = \"Pica\";\n /**\n * Specifies the type of `Pixel`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pixel\"] = 2] = \"Pixel\";\n /**\n * Specifies the type of `Point`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Point\"] = 3] = \"Point\";\n /**\n * Specifies the type of `Inch`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Inch\"] = 4] = \"Inch\";\n /**\n * Specifies the type of `Document`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Document\"] = 5] = \"Document\";\n /**\n * Specifies the type of `Millimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Millimeter\"] = 6] = \"Millimeter\";\n})(PdfGraphicsUnit || (PdfGraphicsUnit = {}));\n/**\n * public Enum for `PdfGridImagePosition`.\n * @private\n */\nexport var PdfGridImagePosition;\n(function (PdfGridImagePosition) {\n /**\n * Specifies the type of `Fit`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Fit\"] = 0] = \"Fit\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Stretch`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Stretch\"] = 2] = \"Stretch\";\n /**\n * Specifies the type of `Tile`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Tile\"] = 3] = \"Tile\";\n})(PdfGridImagePosition || (PdfGridImagePosition = {}));\n/**\n * public Enum for `the text rendering direction`.\n * @private\n */\nexport var PdfTextDirection;\n(function (PdfTextDirection) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `LeftToRight`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"LeftToRight\"] = 1] = \"LeftToRight\";\n /**\n * Specifies the type of `RightToLeft`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"RightToLeft\"] = 2] = \"RightToLeft\";\n})(PdfTextDirection || (PdfTextDirection = {}));\n","import { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfString } from './../primitives/pdf-string';\n/**\n * `PdfReference` class is used to perform reference related primitive operations.\n * @private\n */\nvar PdfReference = /** @class */ (function () {\n function PdfReference(objNumber, genNumber) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index3 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position3 = -1;\n /**\n * Holds the `object number`.\n * @default 0\n * @private\n */\n this.objNumber = 0;\n /**\n * Holds the `generation number` of the object.\n * @default 0\n * @private\n */\n this.genNumber = 0;\n if (typeof objNumber === 'number' && typeof genNumber === 'number') {\n this.objNumber = objNumber;\n this.genNumber = genNumber;\n // } else if (typeof objNum === 'string' && typeof genNum === 'string') {\n }\n else {\n this.objNumber = Number(objNumber);\n this.genNumber = Number(genNumber);\n }\n }\n Object.defineProperty(PdfReference.prototype, \"status\", {\n //Property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status3;\n },\n set: function (value) {\n this.status3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving3;\n },\n set: function (value) {\n this.isSaving3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index3;\n },\n set: function (value) {\n this.index3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position3;\n },\n set: function (value) {\n this.position3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var returnObject3 = null;\n return returnObject3;\n },\n enumerable: true,\n configurable: true\n });\n //IPdfPrimitives methods\n /**\n * `Saves` the object.\n * @private\n */\n PdfReference.prototype.save = function (writer) {\n writer.write(this.toString());\n };\n /**\n * Returns a `string` representing the object.\n * @private\n */\n PdfReference.prototype.toString = function () {\n return this.objNumber.toString() + ' ' + this.genNumber.toString() + ' R';\n };\n /**\n * Creates a `deep copy` of the IPdfPrimitive object.\n * @private\n */\n PdfReference.prototype.clone = function (crossTable) {\n return null;\n };\n return PdfReference;\n}());\nexport { PdfReference };\n/**\n * `PdfReferenceHolder` class is used to perform reference holder related primitive operations.\n * @private\n */\nvar PdfReferenceHolder = /** @class */ (function () {\n function PdfReferenceHolder(obj1, obj2) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index4 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position4 = -1;\n /**\n * The `index` of the object within the object collection.\n * @default -1\n * @private\n */\n this.objectIndex = -1;\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (typeof obj2 === 'undefined') {\n if (obj1 instanceof PdfArray\n || obj1 instanceof PdfDictionary\n || obj1 instanceof PdfName\n || obj1 instanceof PdfNumber\n || obj1 instanceof PdfStream\n || obj1 instanceof PdfReference\n || obj1 instanceof PdfString) {\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n this.primitiveObject = obj1;\n // } else if (obj1 instanceof PdfPageBase\n // || obj1 instanceof PdfPage\n // || obj1 instanceof PdfSection\n // || obj1 instanceof PdfSectionCollection) {\n }\n else {\n var tempObj = obj1;\n this.constructor(tempObj.element);\n }\n // }\n // else {\n // if (obj2 === null) {\n // throw new Error('ArgumentNullException : crossTable');\n // }\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : reference');\n // }\n // this.crossTable = obj2;\n // let tempObj1 : PdfReference = obj1;\n // this.reference = tempObj1;\n // }\n }\n Object.defineProperty(PdfReferenceHolder.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status4;\n },\n set: function (value) {\n this.status4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving4;\n },\n set: function (value) {\n this.isSaving4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index4;\n },\n set: function (value) {\n this.index4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position4;\n },\n set: function (value) {\n this.position4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"object\", {\n /**\n * Gets the `object` the reference is of.\n * @private\n */\n get: function () {\n // if ((this.reference != null) || (this.object == null)) {\n // this.object = this.GetterObject();\n // }\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"index\", {\n /**\n * Gets the `index` of the object.\n * @private\n */\n get: function () {\n // let items : PdfMainObjectCollection = this.crossTable.PdfObjects;\n // this.objectIndex = items.GetObjectIndex(this.reference);\n // if (this.objectIndex < 0) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.reference);\n // this.objectIndex = items.Count - 1;\n // }\n return this.objectIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"element\", {\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Writes` a reference into a PDF document.\n * @private\n */\n PdfReferenceHolder.prototype.save = function (writer) {\n // if (writer == null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n var position = writer.position;\n var cTable = writer.document.crossTable;\n // if (cTable.Document instanceof PdfDocument) {\n this.object.isSaving = true;\n // }\n var reference = null;\n // if (writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true) {\n // if (this.reference === null) {\n // reference = cTable.GetReference(this.Object);\n // } else {\n // reference = this.reference;\n // }\n // } else {\n // reference = cTable.GetReference(this.Object);\n // }\n // if (!(writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true)) {\n reference = cTable.getReference(this.object);\n // }\n // if (writer.Position !== position) {\n // writer.Position = position;\n // }\n reference.save(writer);\n };\n /**\n * Creates a `copy of PdfReferenceHolder`.\n * @private\n */\n PdfReferenceHolder.prototype.clone = function (crossTable) {\n var refHolder = null;\n var temp = null;\n var refNum = '';\n var reference = null;\n // Restricts addition of same object multiple time.\n /* if (this.Reference != null && this.crossTable != null && this.crossTable.PageCorrespondance.containsKey(this.Reference)) {\n refHolder = new PdfReferenceHolder(this.crossTable.PageCorrespondance.getValue(this.Reference) as PdfReference, crossTable);\n return refHolder;\n }\n if (Object instanceof PdfNumber) {\n return new PdfNumber((Object as PdfNumber).IntValue);\n }\n */\n // if (Object instanceof PdfDictionary) {\n // // Meaning the referenced page is not available for import.\n // let type : PdfName = new PdfName(this.dictionaryProperties.type);\n // let dict : PdfDictionary = Object as PdfDictionary;\n // if (dict.ContainsKey(type)) {\n // let pageName : PdfName = dict.Items.getValue(type.Value) as PdfName;\n // if (pageName !== null) {\n // if (pageName.Value === 'Page') {\n // return new PdfNull();\n // }\n // }\n // }\n // }\n /* if (Object instanceof PdfName) {\n return new PdfName ((Object as PdfName ).Value);\n }\n */\n // Resolves circular references.\n // if (crossTable.PrevReference !== null && (crossTable.PrevReference.indexOf(this.Reference) !== -1)) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.Reference).ClonedObject;\n // if (obj !== null) {\n // reference = crossTable.GetReference(obj);\n // return new PdfReferenceHolder(reference, crossTable);\n // } else {\n // return new PdfNull();\n // }\n // }\n /*if (this.Reference !== null) {\n crossTable.PrevReference.push(this.Reference);\n }\n reference = crossTable.GetReference(temp);\n refHolder = new PdfReferenceHolder(reference, crossTable);\n return refHolder;\n */\n return null;\n };\n return PdfReferenceHolder;\n}());\nexport { PdfReferenceHolder };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfAction` class represents base class for all action types.\n * @private\n */\nvar PdfAction = /** @class */ (function () {\n // Constructors\n /**\n * Initialize instance for `Action` class.\n * @private\n */\n function PdfAction() {\n /**\n * Specifies the Next `action` to perform.\n * @private\n */\n this.action = null;\n /**\n * Specifies the Internal variable to store `dictionary properties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // super(); -> Object()\n this.initialize();\n }\n Object.defineProperty(PdfAction.prototype, \"next\", {\n // Properties\n /**\n * Gets and Sets the `Next` action to perform.\n * @private\n */\n get: function () {\n return this.action;\n },\n set: function (value) {\n // if (this.action !== value) {\n this.action = value;\n this.dictionary.items.setValue(this.dictionaryProperties.next, new PdfReferenceHolder(this.action));\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAction.prototype, \"dictionary\", {\n /**\n * Gets and Sets the instance of PdfDictionary class for `Dictionary`.\n * @private\n */\n get: function () {\n if (typeof this.pdfDictionary === 'undefined') {\n this.pdfDictionary = new PdfDictionary();\n }\n return this.pdfDictionary;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the action type.\n * @private\n */\n PdfAction.prototype.initialize = function () {\n this.dictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.action));\n };\n Object.defineProperty(PdfAction.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the `Element` as IPdfPrimitive class.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAction;\n}());\nexport { PdfAction };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfAction } from './action';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * `PdfUriAction` class for initialize the uri related internals.\n * @private\n */\nvar PdfUriAction = /** @class */ (function (_super) {\n __extends(PdfUriAction, _super);\n function PdfUriAction(uri) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Specifies the `uri` string.\n * @default ''.\n * @private\n */\n _this.uniformResourceIdentifier = '';\n return _this;\n }\n Object.defineProperty(PdfUriAction.prototype, \"uri\", {\n // Properties\n /**\n * Gets and Sets the value of `Uri`.\n * @private\n */\n get: function () {\n return this.uniformResourceIdentifier;\n },\n set: function (value) {\n this.uniformResourceIdentifier = value;\n this.dictionary.items.setValue(this.dictionaryProperties.uri, new PdfString(this.uniformResourceIdentifier));\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the internals.\n * @private\n */\n PdfUriAction.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.s, new PdfName(this.dictionaryProperties.uri));\n };\n return PdfUriAction;\n}(PdfAction));\nexport { PdfUriAction };\n","import { PdfColorSpace } from './enum';\nimport { Operators } from './../input-output/pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfArray } from './../primitives/pdf-array';\n/**\n * Implements structures and routines working with `color`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // set color\n * let brushColor : PdfColor = new PdfColor(0, 0, 0);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(brushColor);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @default black color\n */\nvar PdfColor = /** @class */ (function () {\n function PdfColor(color1, color2, color3, color4) {\n if (color1 instanceof PdfColor) {\n this.redColor = color1.r;\n this.greenColor = color1.g;\n this.blueColor = color1.b;\n this.grayColor = color1.gray;\n this.alpha = color1.alpha;\n this.filled = (this.alpha !== 0);\n }\n else if (typeof color1 === 'number' && typeof color2 === 'number' && typeof color3 === 'number' &&\n typeof color4 === 'undefined') {\n this.constructor(PdfColor.maxColourChannelValue, color1, color2, color3); //doubt-byte/float\n }\n else if (typeof color1 === 'number' && typeof color2 === 'number' && typeof color3 === 'number' && typeof color4 === 'number') {\n this.redColor = color2;\n this.cyanColor = 0;\n this.greenColor = color3;\n this.magentaColor = 0;\n this.blueColor = color4;\n this.yellowColor = 0;\n this.blackColor = 0;\n this.grayColor = 0;\n this.alpha = color1;\n this.filled = true;\n this.assignCMYK(color2, color3, color4);\n }\n }\n /**\n * `Calculate and assign` cyan, megenta, yellow colors from rgb values..\n * @private\n */\n PdfColor.prototype.assignCMYK = function (r, g, b) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n var black = PdfNumber.min(1 - red, 1 - green, 1 - blue);\n var cyan = (black === 1.0) ? 0 : (1 - red - black) / (1 - black);\n var magenta = (black === 1.0) ? 0 : (1 - green - black) / (1 - black);\n var yellow = (black === 1.0) ? 0 : (1 - blue - black) / (1 - black);\n this.blackColor = black;\n this.cyanColor = cyan;\n this.magentaColor = magenta;\n this.yellowColor = yellow;\n };\n Object.defineProperty(PdfColor.prototype, \"r\", {\n //Properties\n // public static get Empty():PdfColor\n // {\n // return this.s_emptyColor\n // }\n /**\n * Gets or sets `Red` channel value.\n * @private\n */\n get: function () {\n return this.redColor;\n },\n set: function (value) {\n this.redColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"red\", {\n /**\n * Gets the `Red` color\n * @private\n */\n get: function () {\n return (this.r / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"b\", {\n /**\n * Gets or sets `Blue` channel value.\n * @private\n */\n get: function () {\n return this.blueColor;\n },\n set: function (value) {\n this.blueColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"blue\", {\n /**\n * Gets the `blue` color.\n * @private\n */\n get: function () {\n return (this.b / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"g\", {\n /**\n * Gets or sets `Green` channel value.\n * @private\n */\n get: function () {\n return this.greenColor;\n },\n set: function (value) {\n this.greenColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"green\", {\n /**\n * Gets the `Green` color.\n * @private\n */\n get: function () {\n return (this.g / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"gray\", {\n /**\n * Gets or sets `Gray` channel value.\n * @private\n */\n get: function () {\n return ((((this.redColor + this.greenColor) + this.blueColor)) / (PdfColor.maxColourChannelValue * 3));\n },\n set: function (value) {\n if (value < 0) {\n this.grayColor = 0;\n }\n else if (value > 1) {\n this.grayColor = 1;\n }\n else {\n this.grayColor = value;\n }\n this.r = (this.grayColor * PdfColor.maxColourChannelValue);\n this.g = (this.grayColor * PdfColor.maxColourChannelValue);\n this.b = (this.grayColor * PdfColor.maxColourChannelValue);\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"isEmpty\", {\n /**\n * Gets whether the PDFColor `is Empty` or not.\n * @private\n */\n get: function () {\n return !this.filled;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"a\", {\n /**\n * Gets or sets `Alpha` channel value.\n * @private\n */\n get: function () {\n return this.alpha;\n },\n set: function (value) {\n if (value < 0) {\n this.alpha = 0;\n }\n else {\n // if (this.alpha !== value) {\n this.alpha = value;\n // }\n }\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Converts `PDFColor to PDF string` representation.\n * @private\n */\n PdfColor.prototype.toString = function (colorSpace, stroke) {\n if (this.isEmpty) {\n return '';\n }\n return this.rgbToString(stroke);\n };\n /**\n * Sets `RGB` color.\n * @private\n */\n PdfColor.prototype.rgbToString = function (ifStroking) {\n var r = this.r;\n var g = this.g;\n var b = this.b;\n var key = (r << 16) + (g << 8) + b;\n if (ifStroking) {\n key += 1 << 24;\n }\n var colour = '';\n var obj = null;\n if (PdfColor.rgbStrings.containsKey(key)) {\n obj = PdfColor.rgbStrings.getValue(key);\n }\n if (obj == null) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n if (ifStroking) {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' RG';\n }\n else {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' rg';\n }\n PdfColor.rgbStrings.setValue(key, colour);\n }\n else {\n colour = obj.toString();\n }\n return colour + Operators.newLine;\n };\n /**\n * Converts `colour to a PDF array`.\n * @private\n */\n PdfColor.prototype.toArray = function (colorSpace) {\n var array = new PdfArray();\n switch (colorSpace) {\n case PdfColorSpace.Rgb:\n array.add(new PdfNumber(this.red));\n array.add(new PdfNumber(this.green));\n array.add(new PdfNumber(this.blue));\n break;\n default:\n throw new Error('NotSupportedException : Unsupported colour space.');\n }\n return array;\n };\n //Fields\n /**\n * Holds `RGB colors` converted into strings.\n * @private\n */\n PdfColor.rgbStrings = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `stroking`.\n * @private\n */\n PdfColor.grayStringsSroke = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `filling`.\n * @private\n */\n PdfColor.grayStringsFill = new Dictionary();\n /**\n * `Max value` of color channel.\n * @private\n */\n PdfColor.maxColourChannelValue = 255.0;\n return PdfColor;\n}());\nexport { PdfColor };\n","/**\n * public Enum for `PdfFontStyle`.\n * @private\n */\nexport var PdfFontStyle;\n(function (PdfFontStyle) {\n /**\n * Specifies the type of `Regular`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Regular\"] = 0] = \"Regular\";\n /**\n * Specifies the type of `Bold`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Bold\"] = 1] = \"Bold\";\n /**\n * Specifies the type of `Italic`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Italic\"] = 2] = \"Italic\";\n /**\n * Specifies the type of `Underline`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Underline\"] = 4] = \"Underline\";\n /**\n * Specifies the type of `Strikeout`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Strikeout\"] = 8] = \"Strikeout\";\n})(PdfFontStyle || (PdfFontStyle = {}));\n/**\n * Specifies the font family from the standard font.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * ```\n */\nexport var PdfFontFamily;\n(function (PdfFontFamily) {\n /**\n * Specifies the `Helvetica` font.\n */\n PdfFontFamily[PdfFontFamily[\"Helvetica\"] = 0] = \"Helvetica\";\n /**\n * Specifies the `Courier` font.\n */\n PdfFontFamily[PdfFontFamily[\"Courier\"] = 1] = \"Courier\";\n /**\n * Specifies the `TimesRoman` font.\n */\n PdfFontFamily[PdfFontFamily[\"TimesRoman\"] = 2] = \"TimesRoman\";\n /**\n * Specifies the `Symbol` font.\n */\n PdfFontFamily[PdfFontFamily[\"Symbol\"] = 3] = \"Symbol\";\n /**\n * Specifies the `ZapfDingbats` font.\n */\n PdfFontFamily[PdfFontFamily[\"ZapfDingbats\"] = 4] = \"ZapfDingbats\";\n})(PdfFontFamily || (PdfFontFamily = {}));\n/**\n * public Enum for `PdfFontType`.\n * @private\n */\nexport var PdfFontType;\n(function (PdfFontType) {\n /**\n * Specifies the type of `Standard`.\n * @private\n */\n PdfFontType[PdfFontType[\"Standard\"] = 0] = \"Standard\";\n /**\n * Specifies the type of `TrueType`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueType\"] = 1] = \"TrueType\";\n /**\n * Specifies the type of `TrueTypeEmbedded`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueTypeEmbedded\"] = 2] = \"TrueTypeEmbedded\";\n})(PdfFontType || (PdfFontType = {}));\n/**\n * public Enum for `PdfWordWrapType`.\n * @private\n */\nexport var PdfWordWrapType;\n(function (PdfWordWrapType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Word`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Word\"] = 1] = \"Word\";\n /**\n * Specifies the type of `WordOnly`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"WordOnly\"] = 2] = \"WordOnly\";\n /**\n * Specifies the type of `Character`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Character\"] = 3] = \"Character\";\n})(PdfWordWrapType || (PdfWordWrapType = {}));\n/**\n * public Enum for `PdfSubSuperScript`.\n * @private\n */\nexport var PdfSubSuperScript;\n(function (PdfSubSuperScript) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `SuperScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SuperScript\"] = 1] = \"SuperScript\";\n /**\n * Specifies the type of `SubScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SubScript\"] = 2] = \"SubScript\";\n})(PdfSubSuperScript || (PdfSubSuperScript = {}));\n/**\n * public Enum for `FontEncoding`.\n * @private\n */\nexport var FontEncoding;\n(function (FontEncoding) {\n /**\n * Specifies the type of `Unknown`.\n * @private\n */\n FontEncoding[FontEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `StandardEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"StandardEncoding\"] = 1] = \"StandardEncoding\";\n /**\n * Specifies the type of `MacRomanEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacRomanEncoding\"] = 2] = \"MacRomanEncoding\";\n /**\n * Specifies the type of `MacExpertEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacExpertEncoding\"] = 3] = \"MacExpertEncoding\";\n /**\n * Specifies the type of `WinAnsiEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"WinAnsiEncoding\"] = 4] = \"WinAnsiEncoding\";\n /**\n * Specifies the type of `PdfDocEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"PdfDocEncoding\"] = 5] = \"PdfDocEncoding\";\n /**\n * Specifies the type of `IdentityH`.\n * @private\n */\n FontEncoding[FontEncoding[\"IdentityH\"] = 6] = \"IdentityH\";\n})(FontEncoding || (FontEncoding = {}));\n/**\n * public Enum for `TtfCmapFormat`.\n * @private\n */\nexport var TtfCmapFormat;\n(function (TtfCmapFormat) {\n /**\n * This is the Apple standard character to glyph index mapping table.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Apple\"] = 0] = \"Apple\";\n /**\n * This is the Microsoft standard character to glyph index mapping table.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Microsoft\"] = 4] = \"Microsoft\";\n /**\n * Format 6: Trimmed table mapping.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Trimmed\"] = 6] = \"Trimmed\";\n})(TtfCmapFormat || (TtfCmapFormat = {}));\n/**\n * Enumerator that implements CMAP encodings.\n * @private\n */\nexport var TtfCmapEncoding;\n(function (TtfCmapEncoding) {\n /**\n * Unknown encoding.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * When building a symbol font for Windows.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Symbol\"] = 1] = \"Symbol\";\n /**\n * When building a Unicode font for Windows.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Unicode\"] = 2] = \"Unicode\";\n /**\n * For font that will be used on a Macintosh.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Macintosh\"] = 3] = \"Macintosh\";\n})(TtfCmapEncoding || (TtfCmapEncoding = {}));\n/**\n * Ttf platform ID.\n * @private\n */\nexport var TtfPlatformID;\n(function (TtfPlatformID) {\n /**\n * Apple platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"AppleUnicode\"] = 0] = \"AppleUnicode\";\n /**\n * Macintosh platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Macintosh\"] = 1] = \"Macintosh\";\n /**\n * Iso platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Iso\"] = 2] = \"Iso\";\n /**\n * Microsoft platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Microsoft\"] = 3] = \"Microsoft\";\n})(TtfPlatformID || (TtfPlatformID = {}));\n/**\n * Microsoft encoding ID.\n * @private\n */\nexport var TtfMicrosoftEncodingID;\n(function (TtfMicrosoftEncodingID) {\n /**\n * Undefined encoding.\n * @private\n */\n TtfMicrosoftEncodingID[TtfMicrosoftEncodingID[\"Undefined\"] = 0] = \"Undefined\";\n /**\n * Unicode encoding.\n * @private\n */\n TtfMicrosoftEncodingID[TtfMicrosoftEncodingID[\"Unicode\"] = 1] = \"Unicode\";\n})(TtfMicrosoftEncodingID || (TtfMicrosoftEncodingID = {}));\n/**\n * Macintosh encoding ID.\n * @private\n */\nexport var TtfMacintoshEncodingID;\n(function (TtfMacintoshEncodingID) {\n /**\n * Roman encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Roman\"] = 0] = \"Roman\";\n /**\n * Japanese encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Japanese\"] = 1] = \"Japanese\";\n /**\n * Chinese encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Chinese\"] = 2] = \"Chinese\";\n})(TtfMacintoshEncodingID || (TtfMacintoshEncodingID = {}));\n/**\n * Enumerator that implements font descriptor flags.\n * @private\n */\nexport var FontDescriptorFlags;\n(function (FontDescriptorFlags) {\n /**\n * All glyphs have the same width (as opposed to proportional or variable-pitch fonts, which have different widths).\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"FixedPitch\"] = 1] = \"FixedPitch\";\n /**\n * Glyphs have serifs, which are short strokes drawn at an angle on the top and\n * bottom of glyph stems (as opposed to sans serif fonts, which do not).\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Serif\"] = 2] = \"Serif\";\n /**\n * Font contains glyphs outside the Adobe standard Latin character set. The\n * flag and the nonsymbolic flag cannot both be set or both be clear.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Symbolic\"] = 4] = \"Symbolic\";\n /**\n * Glyphs resemble cursive handwriting.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Script\"] = 8] = \"Script\";\n /**\n * Font uses the Adobe standard Latin character set or a subset of it.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Nonsymbolic\"] = 32] = \"Nonsymbolic\";\n /**\n * Glyphs have dominant vertical strokes that are slanted.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Italic\"] = 64] = \"Italic\";\n /**\n * Bold font.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"ForceBold\"] = 262144] = \"ForceBold\";\n})(FontDescriptorFlags || (FontDescriptorFlags = {}));\n/**\n * true type font composite glyph flags.\n * @private\n */\nexport var TtfCompositeGlyphFlags;\n(function (TtfCompositeGlyphFlags) {\n /**\n * The Arg1And2AreWords.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"Arg1And2AreWords\"] = 1] = \"Arg1And2AreWords\";\n /**\n * The ArgsAreXyValues.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"ArgsAreXyValues\"] = 2] = \"ArgsAreXyValues\";\n /**\n * The RoundXyToGrid.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"RoundXyToGrid\"] = 4] = \"RoundXyToGrid\";\n /**\n * The WeHaveScale.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveScale\"] = 8] = \"WeHaveScale\";\n /**\n * The Reserved.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"Reserved\"] = 16] = \"Reserved\";\n /**\n * The MoreComponents.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"MoreComponents\"] = 32] = \"MoreComponents\";\n /**\n * The WeHaveAnXyScale.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveAnXyScale\"] = 64] = \"WeHaveAnXyScale\";\n /**\n * The WeHaveTwoByTwo\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveTwoByTwo\"] = 128] = \"WeHaveTwoByTwo\";\n /**\n * The WeHaveInstructions.\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveInstructions\"] = 256] = \"WeHaveInstructions\";\n /**\n * The UseMyMetrics.\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"UseMyMetrics\"] = 512] = \"UseMyMetrics\";\n})(TtfCompositeGlyphFlags || (TtfCompositeGlyphFlags = {}));\n","/**\n * Coordinates of Position for `PointF`.\n * @private\n */\nvar PointF = /** @class */ (function () {\n function PointF(x, y) {\n if (typeof x === 'undefined') {\n this.x = 0;\n this.y = 0;\n }\n else {\n if (x !== null) {\n this.x = x;\n }\n else {\n this.x = 0;\n }\n if (y !== null) {\n this.y = y;\n }\n else {\n this.y = 0;\n }\n }\n }\n return PointF;\n}());\nexport { PointF };\n/**\n * Width and Height as `Size`.\n * @private\n */\nvar SizeF = /** @class */ (function () {\n function SizeF(width, height) {\n if (typeof height === 'undefined') {\n this.height = 0;\n this.width = 0;\n }\n else {\n if (height !== null) {\n this.height = height;\n }\n else {\n this.height = 0;\n }\n if (width !== null) {\n this.width = width;\n }\n else {\n this.width = 0;\n }\n }\n }\n return SizeF;\n}());\nexport { SizeF };\n/**\n * `RectangleF` with Position and size.\n * @private\n */\nvar RectangleF = /** @class */ (function () {\n function RectangleF(arg1, arg2, arg3, arg4) {\n if (typeof arg1 === typeof arg1 && typeof arg1 === 'undefined') {\n this.x = 0;\n this.y = 0;\n this.height = 0;\n this.width = 0;\n }\n else {\n if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n var pointf = arg1;\n this.x = pointf.x;\n this.y = pointf.y;\n var sizef = arg2;\n this.height = sizef.height;\n this.width = sizef.width;\n }\n else {\n var x = arg1;\n var y = arg2;\n var width = arg3;\n var height = arg4;\n this.x = x;\n this.y = y;\n this.height = height;\n this.width = width;\n }\n }\n }\n return RectangleF;\n}());\nexport { RectangleF };\n/**\n * `Rectangle` with left, right, top and bottom.\n * @private\n */\nvar Rectangle = /** @class */ (function () {\n /**\n * Instance of `RectangleF` class with X, Y, Width and Height.\n * @private\n */\n function Rectangle(left, top, right, bottom) {\n this.left = left;\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n }\n Object.defineProperty(Rectangle.prototype, \"width\", {\n /**\n * Gets a value of width\n */\n get: function () {\n return this.right - this.left;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"height\", {\n /**\n * Gets a value of height\n */\n get: function () {\n return this.bottom - this.top;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"topLeft\", {\n /**\n * Gets a value of Top and Left\n */\n get: function () {\n return new PointF(this.left, this.top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"size\", {\n /**\n * Gets a value of size\n */\n get: function () {\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Rectangle.prototype.toString = function () {\n return this.topLeft + 'x' + this.size;\n };\n return Rectangle;\n}());\nexport { Rectangle };\n","/**\n * `PdfBrush` class provides objects used to fill the interiors of graphical shapes such as rectangles,\n * ellipses, pies, polygons, and paths.\n * @private\n */\nvar PdfBrush = /** @class */ (function () {\n /**\n * Creates instanceof `PdfBrush` class.\n * @hidden\n * @private\n */\n function PdfBrush() {\n //\n }\n return PdfBrush;\n}());\nexport { PdfBrush };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfColor } from './../pdf-color';\nimport { PdfColorSpace } from './../enum';\nimport { PdfBrush } from './pdf-brush';\n/**\n * Represents a brush that fills any object with a solid color.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfSolidBrush = /** @class */ (function (_super) {\n __extends(PdfSolidBrush, _super);\n //Constructors\n /**\n * Initializes a new instance of the `PdfSolidBrush` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param color color of the brush\n */\n function PdfSolidBrush(color) {\n var _this = _super.call(this) || this;\n _this.pdfColor = color;\n return _this;\n }\n Object.defineProperty(PdfSolidBrush.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color` of the brush.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Monitors` the changes of the brush and modify PDF state respectively.\n * @private\n */\n PdfSolidBrush.prototype.monitorChanges = function (brush, streamWriter, getResources, saveChanges, currentColorSpace) {\n if (streamWriter == null) {\n throw new Error('ArgumentNullException:streamWriter');\n }\n var diff = false;\n if (brush == null) {\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n else {\n var sBrush = brush;\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n };\n /**\n * `Resets` the changes, which were made by the brush.\n * @private\n */\n PdfSolidBrush.prototype.resetChanges = function (streamWriter) {\n streamWriter.setColorAndSpace(new PdfColor(0, 0, 0), PdfColorSpace.Rgb, false);\n };\n return PdfSolidBrush;\n}(PdfBrush));\nexport { PdfSolidBrush };\n","/**\n * PdfStringFormat.ts class for EJ2-PDF\n */\nimport { PdfVerticalAlignment } from './../../graphics/enum';\nimport { PdfSubSuperScript, PdfWordWrapType } from './../../graphics/fonts/enum';\n/**\n * `PdfStringFormat` class represents the text layout information on PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStringFormat = /** @class */ (function () {\n function PdfStringFormat(arg1, arg2) {\n /**\n * The `scaling factor` of the text being drawn.\n * @private\n */\n this.scalingFactor = 100.0;\n /**\n * Indicates text `wrapping` type.\n * @private\n */\n this.wordWrapType = PdfWordWrapType.Word;\n if (typeof arg1 === 'undefined') {\n this.internalLineLimit = true;\n this.wordWrapType = PdfWordWrapType.Word;\n }\n else if (typeof arg1 === 'string') {\n this.constructor();\n }\n else {\n if (typeof arg2 === 'undefined') {\n this.constructor();\n this.textAlignment = arg1;\n }\n else {\n this.constructor(arg1);\n this.verticalAlignment = arg2;\n }\n }\n }\n Object.defineProperty(PdfStringFormat.prototype, \"alignment\", {\n //Properties\n /**\n * Gets or sets the `horizontal` text alignment\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.textAlignment;\n },\n set: function (value) {\n this.textAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"textDirection\", {\n get: function () {\n return this.direction;\n },\n set: function (value) {\n this.direction = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineAlignment\", {\n /**\n * Gets or sets the `vertical` text alignment.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.verticalAlignment === 'undefined' || this.verticalAlignment == null) {\n return PdfVerticalAlignment.Top;\n }\n else {\n return this.verticalAlignment;\n }\n },\n set: function (value) {\n this.verticalAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"rightToLeft\", {\n /**\n * Gets or sets the value that indicates text `direction` mode.\n * @private\n */\n get: function () {\n if (typeof this.isRightToLeft === 'undefined' || this.isRightToLeft == null) {\n return false;\n }\n else {\n return this.isRightToLeft;\n }\n },\n set: function (value) {\n this.isRightToLeft = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"characterSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the characters in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set character spacing\n * stringFormat.characterSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalCharacterSpacing === 'undefined' || this.internalCharacterSpacing == null) {\n return 0;\n }\n else {\n return this.internalCharacterSpacing;\n }\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the words in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set word spacing\n * stringFormat.wordSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalWordSpacing === 'undefined' || this.internalWordSpacing == null) {\n return 0;\n }\n else {\n return this.internalWordSpacing;\n }\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or sets value that indicates the `vertical distance` between the baselines of adjacent lines of text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set string\n * let text : string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n * incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitati';\n * // set rectangle bounds\n * let rectangle : RectangleF = new RectangleF({x : 0, y : 0}, {width : 300, height : 100})\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set line spacing\n * stringFormat.lineSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString(text, font, blackBrush, rectangle, stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.leading === 'undefined' || this.leading == null) {\n return 0;\n }\n else {\n return this.leading;\n }\n },\n set: function (value) {\n this.leading = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"clipPath\", {\n /**\n * Gets or sets a value indicating whether the text is `clipped` or not.\n * @private\n */\n get: function () {\n if (typeof this.clip === 'undefined' || this.clip == null) {\n return false;\n }\n else {\n return this.clip;\n }\n },\n set: function (value) {\n this.clip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"subSuperScript\", {\n /**\n * Gets or sets value indicating whether the text is in `subscript or superscript` mode.\n * @private\n */\n get: function () {\n if (typeof this.pdfSubSuperScript === 'undefined' || this.pdfSubSuperScript == null) {\n return PdfSubSuperScript.None;\n }\n else {\n return this.pdfSubSuperScript;\n }\n },\n set: function (value) {\n this.pdfSubSuperScript = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"paragraphIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the paragraph.\n * @private\n */\n get: function () {\n if (typeof this.internalParagraphIndent === 'undefined' || this.internalParagraphIndent == null) {\n return 0;\n }\n else {\n return this.internalParagraphIndent;\n }\n },\n set: function (value) {\n this.internalParagraphIndent = value;\n this.firstLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineLimit\", {\n /**\n * Gets or sets a value indicating whether [`line limit`].\n * @private\n */\n get: function () {\n return this.internalLineLimit;\n },\n set: function (value) {\n this.internalLineLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"measureTrailingSpaces\", {\n /**\n * Gets or sets a value indicating whether [`measure trailing spaces`].\n * @private\n */\n get: function () {\n if (typeof this.trailingSpaces === 'undefined' || this.trailingSpaces == null) {\n return false;\n }\n else {\n return this.trailingSpaces;\n }\n },\n set: function (value) {\n this.trailingSpaces = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"noClip\", {\n /**\n * Gets or sets a value indicating whether [`no clip`].\n * @private\n */\n get: function () {\n if (typeof this.isNoClip === 'undefined' || this.isNoClip == null) {\n return false;\n }\n else {\n return this.isNoClip;\n }\n },\n set: function (value) {\n this.isNoClip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordWrap\", {\n /**\n * Gets or sets value indicating type of the text `wrapping`.\n * @private\n */\n get: function () {\n // if (typeof this.wrapType === 'undefined' || this.wrapType == null) {\n // return PdfWordWrapType.Word;\n // } else {\n return this.wordWrapType;\n // }\n },\n set: function (value) {\n this.wordWrapType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"horizontalScalingFactor\", {\n /**\n * Gets or sets the `scaling factor`.\n * @private\n */\n get: function () {\n // if (typeof this.scalingFactor === 'undefined' || this.scalingFactor == null) {\n // return 100;\n // } else {\n return this.scalingFactor;\n // }\n },\n set: function (value) {\n if (value <= 0) {\n throw new Error('ArgumentOutOfRangeException:The scaling factor cant be less of equal to zero, ScalingFactor');\n }\n this.scalingFactor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the text.\n * @private\n */\n get: function () {\n if (typeof this.initialLineIndent === 'undefined' || this.initialLineIndent == null) {\n return 0;\n }\n else {\n return this.initialLineIndent;\n }\n },\n set: function (value) {\n this.initialLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clones` the object.\n * @private\n */\n //IClonable implementation\n PdfStringFormat.prototype.clone = function () {\n var format = this;\n return format;\n };\n return PdfStringFormat;\n}());\nexport { PdfStringFormat };\n","import { SizeF, RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfWordWrapType } from './enum';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Class `lay outing the text`.\n */\nvar PdfStringLayouter = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringLayouter` class.\n * @private\n */\n function PdfStringLayouter() {\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n //\n }\n PdfStringLayouter.prototype.layout = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n if (arg4 instanceof RectangleF) {\n this.initialize(arg1, arg2, arg3, arg4, arg5);\n this.isOverloadWithPosition = arg6;\n this.clientSize = arg7;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n else {\n this.initialize(arg1, arg2, arg3, arg4);\n this.isOverloadWithPosition = arg5;\n this.clientSize = arg6;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n };\n PdfStringLayouter.prototype.initialize = function (text, font, format, rectSize, pageHeight) {\n if (typeof pageHeight === 'number') {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.text = text;\n this.font = font;\n this.format = format;\n this.size = new SizeF(rectSize.width, rectSize.height);\n this.rectangle = rectSize;\n this.pageHeight = pageHeight;\n this.reader = new StringTokenizer(text);\n }\n else {\n this.initialize(text, font, format, new RectangleF(new PointF(0, 0), rectSize), 0);\n }\n };\n /**\n * `Clear` all resources.\n * @private\n */\n PdfStringLayouter.prototype.clear = function () {\n this.font = null;\n this.format = null;\n this.reader.close();\n this.reader = null;\n this.text = null;\n };\n /**\n * `Layouts` the text.\n * @private\n */\n PdfStringLayouter.prototype.doLayout = function () {\n var result = new PdfStringLayoutResult();\n var lineResult = new PdfStringLayoutResult();\n var lines = [];\n var line = this.reader.peekLine();\n var lineIndent = this.getLineIndent(true);\n while (line != null) {\n lineResult = this.layoutLine(line, lineIndent);\n if (lineResult !== null || typeof lineResult !== 'undefined') {\n var numSymbolsInserted = 0;\n /* tslint:disable */\n var returnedValue = this.copyToResult(result, lineResult, lines, /*out*/ numSymbolsInserted);\n /* tslint:enable */\n var success = returnedValue.success;\n numSymbolsInserted = returnedValue.numInserted;\n if (!success) {\n this.reader.read(numSymbolsInserted);\n break;\n }\n }\n // if (lineResult.textRemainder != null && lineResult.textRemainder.length > 0 ) {\n // break;\n // }\n this.reader.readLine();\n line = this.reader.peekLine();\n lineIndent = this.getLineIndent(false);\n }\n this.finalizeResult(result, lines);\n return result;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineIndent = function (firstLine) {\n var lineIndent = 0;\n if (this.format != null) {\n lineIndent = (firstLine) ? this.format.firstLineIndent : this.format.paragraphIndent;\n lineIndent = (this.size.width > 0) ? Math.min(this.size.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates `height` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineHeight = function () {\n var height = this.font.height;\n if (this.format != null && this.format.lineSpacing !== 0) {\n height = this.format.lineSpacing + this.font.height;\n }\n return height;\n };\n /**\n * Calculates `width` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineWidth = function (line) {\n var width = this.font.getLineWidth(line, this.format);\n return width;\n };\n // tslint:disable\n /**\n * `Layouts` line.\n * @private\n */\n PdfStringLayouter.prototype.layoutLine = function (line, lineIndent) {\n var lineResult = new PdfStringLayoutResult();\n lineResult.layoutLineHeight = this.getLineHeight();\n var lines = [];\n var maxWidth = this.size.width;\n var lineWidth = this.getLineWidth(line) + lineIndent;\n var lineType = LineType.FirstParagraphLine;\n var readWord = true;\n // line is in bounds.\n if (maxWidth <= 0 || Math.round(lineWidth) <= Math.round(maxWidth)) {\n this.addToLineResult(lineResult, lines, line, lineWidth, LineType.NewLineBreak | lineType);\n }\n else {\n var builder = '';\n var curLine = '';\n lineWidth = lineIndent;\n var curIndent = lineIndent;\n var reader = new StringTokenizer(line);\n var word = reader.peekWord();\n var isSingleWord = false;\n if (word.length !== reader.length) {\n if (word === ' ') {\n curLine = curLine + word;\n builder = builder + word;\n reader.position += 1;\n word = reader.peekWord();\n }\n }\n while (word != null) {\n curLine = curLine + word;\n var curLineWidth = this.getLineWidth(curLine.toString()) + curIndent /*)*/;\n if (curLine.toString() === ' ') {\n curLine = '';\n curLineWidth = 0;\n }\n if (curLineWidth > maxWidth) {\n if (this.getWrapType() === PdfWordWrapType.None) {\n break;\n }\n if (curLine.length === word.length) {\n // Character wrap is disabled or one symbol is greater than bounds.\n if (this.getWrapType() === PdfWordWrapType.WordOnly) {\n lineResult.textRemainder = line.substring(reader.position);\n break;\n }\n else if (curLine.length === 1) {\n builder = builder + word;\n break;\n }\n else {\n readWord = false;\n curLine = '';\n word = reader.peek().toString();\n continue;\n }\n }\n else {\n if (this.getLineWidth(word.toString()) > maxWidth) {\n this.format.wordWrap = PdfWordWrapType.Character;\n }\n else {\n if (typeof this.format !== 'undefined' && this.format !== null) {\n this.format.wordWrap = PdfWordWrapType.Word;\n }\n }\n if (this.getWrapType() !== PdfWordWrapType.Character || !readWord) {\n var ln = builder.toString();\n // if (ln.indexOf(' ') === -1) {\n // isSingleWord = true;\n // this.addToLineResult(lineResult, lines, curLine, lineWidth, LineType.LayoutBreak | lineType);\n // } else {\n // this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n // } \n if (ln !== ' ') {\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n }\n if (this.isOverloadWithPosition) {\n maxWidth = this.clientSize.width;\n }\n curLine = '';\n builder = '';\n lineWidth = 0;\n curIndent = 0;\n curLineWidth = 0;\n lineType = LineType.None;\n // if (isSingleWord) {\n // reader.readWord();\n // readWord = false;\n // }\n word = (readWord) ? word : reader.peekWord();\n //isSingleWord = false;\n readWord = true;\n }\n else {\n readWord = false;\n curLine = '';\n curLine = curLine + builder.toString();\n word = reader.peek().toString();\n }\n continue;\n }\n }\n /*tslint:disable:max-func-body-length */\n builder = builder + word;\n lineWidth = curLineWidth;\n if (readWord) {\n reader.readWord();\n word = reader.peekWord();\n //isSingleWord = false;\n }\n else {\n reader.read();\n word = reader.peek().toString();\n }\n }\n if (builder.length > 0) {\n var ln = builder.toString();\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.NewLineBreak | LineType.LastParagraphLine);\n }\n reader.close();\n }\n lineResult.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n lineResult.layoutLines.push(lines[index]);\n }\n lines = [];\n return lineResult;\n };\n /**\n * `Adds` line to line result.\n * @private\n */\n PdfStringLayouter.prototype.addToLineResult = function (lineResult, lines, line, lineWidth, breakType) {\n var info = new LineInfo();\n info.text = line;\n info.width = lineWidth;\n info.lineType = breakType;\n lines.push(info);\n var size = lineResult.actualSize;\n size.height += this.getLineHeight();\n size.width = Math.max(size.width, lineWidth);\n lineResult.size = size;\n };\n /**\n * `Copies` layout result from line result to entire result. Checks whether we can proceed lay outing or not.\n * @private\n */\n PdfStringLayouter.prototype.copyToResult = function (result, lineResult, lines, \n /*out*/ numInserted) {\n var success = true;\n var allowPartialLines = (this.format != null && !this.format.lineLimit);\n var height = result.actualSize.height;\n var maxHeight = this.size.height;\n if ((this.pageHeight > 0) && (maxHeight + this.rectangle.y > this.pageHeight)) {\n maxHeight = this.rectangle.y - this.pageHeight;\n maxHeight = Math.max(maxHeight, -maxHeight);\n }\n numInserted = 0;\n if (lineResult.lines != null) {\n for (var i = 0, len = lineResult.lines.length; i < len; i++) {\n var expHeight = height + lineResult.lineHeight;\n if (expHeight <= maxHeight || maxHeight <= 0 || allowPartialLines) {\n var info = lineResult.lines[i];\n numInserted += info.text.length;\n info = this.trimLine(info, (lines.length === 0));\n lines.push(info);\n // Update width.\n var size = result.actualSize;\n size.width = Math.max(size.width, info.width);\n result.size = size;\n // The part of the line fits only and it's allowed to use partial lines.\n // if (expHeight >= maxHeight && maxHeight > 0 && allowPartialLines)\n // {\n // let shouldClip : boolean = (this.format == null || !this.format.noClip);\n // if (shouldClip)\n // {\n // let exceededHeight : number = expHeight - maxHeight;\n // let fitHeight : number = /*Utils.Round(*/ lineResult.lineHeight - exceededHeight /*)*/;\n // height = /*Utils.Round(*/ height + fitHeight /*)*/;\n // }\n // else\n // {\n // height = expHeight;\n // }\n // success = false;\n // break;\n // } else {\n height = expHeight;\n // }\n }\n else {\n success = false;\n break;\n }\n }\n }\n if (height != result.size.height) {\n var size1 = result.actualSize;\n size1.height = height;\n result.size = size1;\n }\n return { success: success, numInserted: numInserted };\n };\n /**\n * `Finalizes` final result.\n * @private\n */\n PdfStringLayouter.prototype.finalizeResult = function (result, lines) {\n result.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n result.layoutLines.push(lines[index]);\n }\n result.layoutLineHeight = this.getLineHeight();\n if (!this.reader.end) {\n result.textRemainder = this.reader.readToEnd();\n }\n lines = [];\n };\n /**\n * `Trims` whitespaces at the line.\n * @private\n */\n PdfStringLayouter.prototype.trimLine = function (info, firstLine) {\n var line = info.text;\n var lineWidth = info.width;\n // Trim start whitespaces if the line is not a start of the paragraph only.\n var trimStartSpaces = ((info.lineType & LineType.FirstParagraphLine) === 0);\n var start = (this.format == null || !this.format.rightToLeft);\n var spaces = StringTokenizer.spaces;\n line = (start) ? line.trim() : line.trim();\n // Recalculate line width.\n if (line.length !== info.text.length) {\n lineWidth = this.getLineWidth(line);\n if ((info.lineType & LineType.FirstParagraphLine) > 0) {\n lineWidth += this.getLineIndent(firstLine);\n }\n }\n info.text = line;\n info.width = lineWidth;\n return info;\n };\n /**\n * Returns `wrap` type.\n * @private\n */\n PdfStringLayouter.prototype.getWrapType = function () {\n var wrapType = (this.format != null) ? this.format.wordWrap : PdfWordWrapType.Word;\n return wrapType;\n };\n return PdfStringLayouter;\n}());\nexport { PdfStringLayouter };\n//Internal declaration\nvar PdfStringLayoutResult = /** @class */ (function () {\n function PdfStringLayoutResult() {\n }\n Object.defineProperty(PdfStringLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets the `text` which is not lay outed.\n * @private\n */\n get: function () {\n return this.textRemainder;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"actualSize\", {\n /**\n * Gets the actual layout text `bounds`.\n * @private\n */\n get: function () {\n if (typeof this.size === 'undefined') {\n this.size = new SizeF(0, 0);\n }\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lines\", {\n /**\n * Gets layout `lines` information.\n * @private\n */\n get: function () {\n return this.layoutLines;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineHeight\", {\n /**\n * Gets the `height` of the line.\n * @private\n */\n get: function () {\n return this.layoutLineHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"empty\", {\n /**\n * Gets value that indicates whether any layout text [`empty`].\n * @private\n */\n get: function () {\n return (this.layoutLines == null || this.layoutLines.length === 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineCount\", {\n /**\n * Gets `number of` the layout lines.\n * @private\n */\n get: function () {\n var count = (!this.empty) ? this.layoutLines.length : 0;\n return count;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStringLayoutResult;\n}());\nexport { PdfStringLayoutResult };\nvar LineInfo = /** @class */ (function () {\n function LineInfo() {\n }\n Object.defineProperty(LineInfo.prototype, \"lineType\", {\n //Properties\n /**\n * Gets the `type` of the line text.\n * @private\n */\n get: function () {\n return this.type;\n },\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"text\", {\n /**\n * Gets the line `text`.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"width\", {\n /**\n * Gets `width` of the line text.\n * @private\n */\n get: function () {\n return this.lineWidth;\n },\n set: function (value) {\n this.lineWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n return LineInfo;\n}());\nexport { LineInfo };\n/**\n* Break type of the `line`.\n* @private\n*/\nexport var LineType;\n(function (LineType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n LineType[LineType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `NewLineBreak`.\n * @private\n */\n LineType[LineType[\"NewLineBreak\"] = 1] = \"NewLineBreak\";\n /**\n * Specifies the type of `LayoutBreak`.\n * @private\n */\n LineType[LineType[\"LayoutBreak\"] = 2] = \"LayoutBreak\";\n /**\n * Specifies the type of `FirstParagraphLine`.\n * @private\n */\n LineType[LineType[\"FirstParagraphLine\"] = 4] = \"FirstParagraphLine\";\n /**\n * Specifies the type of `LastParagraphLine`.\n * @private\n */\n LineType[LineType[\"LastParagraphLine\"] = 8] = \"LastParagraphLine\";\n})(LineType || (LineType = {}));\n","/**\n * StringTokenizer.ts class for EJ2-PDF\n * Utility class for working with strings.\n * @private\n */\nvar StringTokenizer = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringTokenizer` class.\n * @private\n */\n function StringTokenizer(textValue) {\n /**\n * Current `position`.\n * @private\n */\n this.currentPosition = 0;\n if (textValue == null) {\n throw new Error('ArgumentNullException:text');\n }\n this.text = textValue;\n }\n Object.defineProperty(StringTokenizer.prototype, \"length\", {\n // Properties\n /**\n * Gets text `length`.\n * @private\n */\n get: function () {\n return this.text.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"end\", {\n get: function () {\n return (this.currentPosition === this.text.length);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"position\", {\n /**\n * Gets or sets the position.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n StringTokenizer.getCharsCount = function (text, symbols) {\n if (typeof symbols === 'string') {\n if (text == null) {\n throw new Error('ArgumentNullException:wholeText');\n }\n var numSymbols = 0;\n var curIndex = 0;\n for (;;) {\n curIndex = text.indexOf(symbols, curIndex);\n if (curIndex === -1) {\n break;\n }\n else {\n numSymbols++;\n curIndex++;\n }\n }\n return numSymbols;\n }\n else {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (symbols == null) {\n throw new Error('ArgumentNullException:symbols');\n }\n var count = 0;\n for (var i = 0, len = text.length; i < len; i++) {\n var ch = text[i];\n if (this.contains(symbols, ch)) {\n count++;\n }\n }\n return count;\n }\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.readLine = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n': {\n var text = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n this.currentPosition++;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.peekLine = function () {\n var pos = this.currentPosition;\n var line = this.readLine();\n this.currentPosition = pos;\n return line;\n };\n /**\n * Reads a word from the text.\n * @private\n */\n StringTokenizer.prototype.readWord = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n':\n var textValue = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n if (((ch === '\\r') && (this.currentPosition < this.length)) && (this.text[this.currentPosition] === '\\n')) {\n this.currentPosition++;\n }\n return textValue;\n case ' ':\n case '\\t': {\n if (pos === this.currentPosition) {\n pos++;\n }\n var text = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Peeks a word from the text.\n * @private\n */\n StringTokenizer.prototype.peekWord = function () {\n var pos = this.currentPosition;\n var word = this.readWord();\n this.currentPosition = pos;\n return word;\n };\n StringTokenizer.prototype.read = function (count) {\n if (typeof count === 'undefined') {\n var ch = '0';\n if (!this.end) {\n ch = this.text[this.currentPosition];\n this.currentPosition++;\n }\n return ch;\n }\n else {\n var num = 0;\n var builder = '';\n while (!this.end && num < count) {\n var ch = this.read();\n builder = builder + ch;\n num++;\n }\n return builder;\n }\n };\n /**\n * Peeks char form the data.\n * @private\n */\n StringTokenizer.prototype.peek = function () {\n var ch = '0';\n if (!this.end) {\n ch = this.text[this.currentPosition];\n }\n return ch;\n };\n /**\n * Closes a reader.\n * @private\n */\n StringTokenizer.prototype.close = function () {\n this.text = null;\n };\n StringTokenizer.prototype.readToEnd = function () {\n var text;\n if (this.currentPosition === 0) {\n text = this.text;\n }\n else {\n text = this.text.substring(this.length, this.currentPosition);\n }\n this.currentPosition = this.length;\n return text;\n };\n //Implementation\n /**\n * Checks whether array contains a symbol.\n * @private\n */\n StringTokenizer.contains = function (array, symbol) {\n var contains = false;\n for (var i = 0; i < array.length; i++) {\n if (array[i] === symbol) {\n contains = true;\n break;\n }\n }\n return contains;\n };\n // Constants\n /**\n * `Whitespace` symbol.\n * @private\n */\n StringTokenizer.whiteSpace = ' ';\n /**\n * `tab` symbol.\n * @private\n */\n StringTokenizer.tab = '\\t';\n /**\n * Array of `spaces`.\n * @private\n */\n StringTokenizer.spaces = [StringTokenizer.whiteSpace, StringTokenizer.tab];\n /**\n * `Pattern` for WhiteSpace.\n * @private\n */\n StringTokenizer.whiteSpacePattern = '^[ \\t]+$';\n return StringTokenizer;\n}());\nexport { StringTokenizer };\n","/**\n * PdfFont.ts class for EJ2-PDF\n */\nimport { PdfFontStyle } from './enum';\nimport { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfStringFormat } from './pdf-string-format';\nimport { PdfStringLayouter } from './string-layouter';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Defines a particular format for text, including font face, size, and style attributes.\n * @private\n */\nvar PdfFont = /** @class */ (function () {\n function PdfFont(size, style) {\n /**\n * `Style` of the font.\n * @private\n */\n this.fontStyle = PdfFontStyle.Regular;\n if (typeof size === 'number' && typeof style === 'undefined') {\n this.fontSize = size;\n }\n else {\n this.fontSize = size;\n this.setStyle(style);\n }\n }\n Object.defineProperty(PdfFont.prototype, \"name\", {\n //Properties\n /**\n * Gets the face name of this Font.\n * @private\n */\n get: function () {\n return this.metrics.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"size\", {\n /**\n * Gets the size of this font.\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"height\", {\n /**\n * Gets the height of the font in points.\n * @private\n */\n get: function () {\n return this.metrics.getHeight(null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"style\", {\n /**\n * Gets the style information for this font.\n * @private\n */\n get: function () {\n return this.fontStyle;\n },\n set: function (value) {\n this.fontStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"bold\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `bold`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Bold) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"italic\", {\n /**\n * Gets a value indicating whether this `PdfFont` has the `italic` style applied.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Italic) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"strikeout\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `strikeout`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Strikeout) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"underline\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `underline`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Underline) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"metrics\", {\n /**\n * Gets or sets the `metrics` for this font.\n * @private\n */\n get: function () {\n return this.fontMetrics;\n },\n set: function (value) {\n this.fontMetrics = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"element\", {\n // /**\n // * Gets and Sets the font `internals`.\n // * @private\n // */\n // public get fontInternal() : IPdfPrimitive {\n // return this.pdfFontInternals;\n // }\n // public set fontInternal(value : IPdfPrimitive) {\n // this.pdfFontInternals = value;\n // }\n //IPdfWrapper Members\n /**\n * Gets the `element` representing the font.\n * @private\n */\n get: function () {\n return this.pdfFontInternals;\n },\n enumerable: true,\n configurable: true\n });\n PdfFont.prototype.measureString = function (text, arg2, arg3, arg4, arg5) {\n if (typeof text === 'string' && typeof arg2 === 'undefined') {\n return this.measureString(text, null);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'undefined' && typeof arg4 === 'undefined') {\n var temparg2 = arg2;\n var charactersFitted = 0;\n var linesFilled = 0;\n return this.measureString(text, temparg2, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'number' && typeof arg4 === 'number') {\n var temparg2 = arg2;\n return this.measureString(text, 0, temparg2, arg3, arg4);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'number' && typeof arg5 === 'number') {\n var layoutArea = new SizeF(arg2, 0);\n var temparg3 = arg3;\n return this.measureString(text, layoutArea, temparg3, arg4, arg5);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else {\n if (text == null) {\n throw Error(\"ArgumentNullException(\\\"text\\\")\");\n }\n var temparg2 = arg2;\n var temparg3 = arg3;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(text, this, temparg3, temparg2, false, new SizeF(0, 0));\n // arg4 = (result.Remainder == null) ? text.length : text.length - result.Remainder.length;\n arg4 = text.length;\n arg5 = (result.empty) ? 0 : result.lines.length;\n return result.actualSize;\n }\n };\n /* tslint:enable */\n //IPdfCache Members\n /**\n * `Checks` whether the object is similar to another object.\n * @private\n */\n PdfFont.prototype.equalsTo = function (obj) {\n var result = this.equalsToFont(obj);\n return result;\n };\n /**\n * Returns `internals` of the object.\n * @private\n */\n PdfFont.prototype.getInternals = function () {\n return this.pdfFontInternals;\n };\n /**\n * Sets `internals` to the object.\n * @private\n */\n PdfFont.prototype.setInternals = function (internals) {\n if (internals == null) {\n throw new Error('ArgumentNullException:internals');\n }\n this.pdfFontInternals = internals;\n };\n /**\n * Sets the `style` of the font.\n * @private\n */\n PdfFont.prototype.setStyle = function (style) {\n this.fontStyle = style;\n };\n /**\n * Applies `settings` to the default line width.\n * @private\n */\n PdfFont.prototype.applyFormatSettings = function (line, format, width) {\n // if (line == null) {\n // throw new Error(`ArgumentNullException:line`);\n // }\n var realWidth = width;\n if (format != null && width > 0) {\n // Space among characters is not default.\n if (format.characterSpacing !== 0) {\n realWidth += (line.length - 1) * format.characterSpacing;\n }\n // Space among words is not default.\n if (format.wordSpacing !== 0) {\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n realWidth += whitespacesCount * format.wordSpacing;\n }\n }\n return realWidth;\n };\n //Constants\n /**\n * `Multiplier` of the symbol width.\n * @default 0.001\n * @private\n */\n PdfFont.charSizeMultiplier = 0.001;\n /**\n * `Synchronization` object.\n * @private\n */\n PdfFont.syncObject = new Object();\n return PdfFont;\n}());\nexport { PdfFont };\n","/**\n * public Enum for `CompositeFontType`.\n * @private\n */\nexport var ObjectStatus;\n(function (ObjectStatus) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Registered`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"Registered\"] = 1] = \"Registered\";\n})(ObjectStatus || (ObjectStatus = {}));\n","/**\n * Used to `write a string` into output file.\n * @private\n */\nvar PdfWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfWriter` class.\n * @private\n */\n function PdfWriter(stream) {\n this.streamWriter = stream;\n }\n Object.defineProperty(PdfWriter.prototype, \"document\", {\n //properties\n /**\n * Gets and Sets the `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"position\", {\n /**\n * Gets the `position`.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"length\", {\n /**\n * Gets the `length` of the stream'.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"stream\", {\n /**\n * Gets the `stream`.\n * @private\n */\n get: function () {\n var result = this.streamWriter;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n //public Methods\n /**\n * `Writes the specified data`.\n * @private\n */\n PdfWriter.prototype.write = function (overload) {\n var data = [];\n var tempOverload = overload;\n this.streamWriter.write(tempOverload);\n };\n return PdfWriter;\n}());\nexport { PdfWriter };\n","/**\n * PdfMainObjectCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\nimport { ObjectStatus } from './enum';\n/**\n * The collection of all `objects` within a PDF document.\n * @private\n */\nvar PdfMainObjectCollection = /** @class */ (function () {\n function PdfMainObjectCollection() {\n //Fields\n /**\n * The collection of the `indirect objects`.\n * @default []\n * @private\n */\n this.objectCollections = [];\n /**\n * The collection of the `Indirect objects`.\n * @default new Dictionary()\n * @private\n */\n this.mainObjectCollection = new Dictionary();\n /**\n * The collection of `primitive objects`.\n * @private\n */\n this.primitiveObjectCollection = new Dictionary();\n }\n Object.defineProperty(PdfMainObjectCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.objectCollections.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the value of `ObjectInfo` from object collection.\n * @private\n */\n PdfMainObjectCollection.prototype.items = function (index) {\n return this.objectCollections[index];\n };\n Object.defineProperty(PdfMainObjectCollection.prototype, \"outIsNew\", {\n //Methods\n /**\n * Specifies the value of `IsNew`.\n * @private\n */\n get: function () {\n return this.isNew;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element.\n * @private\n */\n PdfMainObjectCollection.prototype.add = function (element) {\n var objInfo = new ObjectInfo(element);\n this.objectCollections.push(objInfo);\n if (!this.primitiveObjectCollection.containsKey(element)) {\n this.primitiveObjectCollection.setValue(element, this.objectCollections.length - 1);\n }\n element.position = this.index = this.objectCollections.length - 1;\n element.status = ObjectStatus.Registered;\n };\n /**\n * `Looks` through the collection for the object specified.\n * @private\n */\n PdfMainObjectCollection.prototype.lookFor = function (obj) {\n var index = -1;\n if (obj.position !== -1) {\n return obj.position;\n }\n if (this.primitiveObjectCollection.containsKey(obj) && this.count === this.primitiveObjectCollection.size()) {\n index = this.primitiveObjectCollection.getValue(obj);\n }\n else {\n for (var i = this.count - 1; i >= 0; i--) {\n var oi = this.objectCollections[i];\n if (oi.object === obj) {\n index = i;\n break;\n }\n }\n }\n return index;\n };\n /**\n * Gets the `reference of the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.getReference = function (index, isNew) {\n this.index = this.lookFor(index);\n var reference;\n this.isNew = false;\n var oi = this.objectCollections[this.index];\n reference = oi.reference;\n var obj = { reference: reference, wasNew: isNew };\n return obj;\n };\n /**\n * Tries to set the `reference to the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.trySetReference = function (obj, reference, found) {\n var result = true;\n found = true;\n this.index = this.lookFor(obj);\n var oi = this.objectCollections[this.index];\n oi.setReference(reference);\n return result;\n };\n PdfMainObjectCollection.prototype.destroy = function () {\n for (var _i = 0, _a = this.objectCollections; _i < _a.length; _i++) {\n var obj = _a[_i];\n if (obj !== undefined) {\n obj.pdfObject.position = -1;\n obj.pdfObject.isSaving = undefined;\n obj.pdfObject.objectCollectionIndex = undefined;\n obj.pdfObject.position = undefined;\n }\n }\n this.objectCollections = [];\n this.mainObjectCollection = new Dictionary();\n this.primitiveObjectCollection = new Dictionary();\n };\n return PdfMainObjectCollection;\n}());\nexport { PdfMainObjectCollection };\nvar ObjectInfo = /** @class */ (function () {\n function ObjectInfo(obj, reference) {\n this.pdfObject = obj;\n this.pdfReference = reference;\n }\n Object.defineProperty(ObjectInfo.prototype, \"object\", {\n //Properties\n /**\n * Gets the `object`.\n * @private\n */\n get: function () {\n return this.pdfObject;\n },\n set: function (value) {\n this.pdfObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ObjectInfo.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `reference`.\n * @private\n */\n ObjectInfo.prototype.setReference = function (reference) {\n this.pdfReference = reference;\n };\n return ObjectInfo;\n}());\nexport { ObjectInfo };\n","/**\n * public Enum for `ObjectType`.\n * @private\n */\nexport var ObjectType;\n(function (ObjectType) {\n /**\n * Specifies the type of `Free`.\n * @private\n */\n ObjectType[ObjectType[\"Free\"] = 0] = \"Free\";\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n ObjectType[ObjectType[\"Normal\"] = 1] = \"Normal\";\n /**\n * Specifies the type of `Packed`.\n * @private\n */\n ObjectType[ObjectType[\"Packed\"] = 2] = \"Packed\";\n})(ObjectType || (ObjectType = {}));\n","import { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { Encoding } from '@syncfusion/ej2-file-utils';\nimport { PdfDocument } from './pdf-document';\n/**\n * `PdfDocumentBase` class represent common properties of PdfDocument classes.\n * @private\n */\nvar PdfDocumentBase = /** @class */ (function () {\n function PdfDocumentBase(document) {\n /**\n * If the stream is copied, then it specifies true.\n * @private\n */\n this.isStreamCopied = false;\n if (document instanceof PdfDocument) {\n this.document = document;\n }\n }\n Object.defineProperty(PdfDocumentBase.prototype, \"pdfObjects\", {\n //Prpperties\n /**\n * Gets the `PDF objects` collection, which stores all objects and references to it..\n * @private\n */\n get: function () {\n return this.objects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"crossTable\", {\n /**\n * Gets the `cross-reference` table.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"currentSavingObj\", {\n /**\n * Gets or sets the current saving `object number`.\n * @private\n */\n get: function () {\n return this.currentSavingObject;\n },\n set: function (value) {\n this.currentSavingObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"catalog\", {\n /**\n * Gets the PDF document `catalog`.\n * @private\n */\n get: function () {\n return this.pdfCatalog;\n },\n set: function (value) {\n this.pdfCatalog = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Sets the `main object collection`.\n * @private\n */\n PdfDocumentBase.prototype.setMainObjectCollection = function (mainObjectCollection) {\n this.objects = mainObjectCollection;\n };\n /**\n * Sets the `cross table`.\n * @private\n */\n PdfDocumentBase.prototype.setCrossTable = function (cTable) {\n this.pdfCrossTable = cTable;\n };\n /**\n * Sets the `catalog`.\n * @private\n */\n PdfDocumentBase.prototype.setCatalog = function (catalog) {\n this.pdfCatalog = catalog;\n };\n PdfDocumentBase.prototype.save = function (filename) {\n var _this = this;\n var encoding = new Encoding(true);\n var SW = new StreamWriter(encoding);\n if (typeof filename === 'undefined') {\n var encoding_1 = new Encoding(true);\n var SW_1 = new StreamWriter(encoding_1);\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */\n var obj = {};\n obj.blobData = new Blob([_this.document.docSave(SW_1, true)], { type: 'application/pdf' });\n resolve(obj);\n });\n }\n else {\n this.document.docSave(SW, filename, true);\n }\n };\n /**\n * `Clone` of parent object - PdfDocument.\n * @private\n */\n PdfDocumentBase.prototype.clone = function () {\n return this.document;\n };\n return PdfDocumentBase;\n}());\nexport { PdfDocumentBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfCatalog.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\n/**\n * `PdfCatalog` class represents internal catalog of the Pdf document.\n * @private\n */\nvar PdfCatalog = /** @class */ (function (_super) {\n __extends(PdfCatalog, _super);\n //constructor\n /**\n * Initializes a new instance of the `PdfCatalog` class.\n * @private\n */\n function PdfCatalog() {\n var _this = _super.call(this) || this;\n //fields\n /**\n * Internal variable to store collection of `sections`.\n * @default null\n * @private\n */\n _this.sections = null;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n _this.tempDictionaryProperties = new DictionaryProperties();\n _this.items.setValue(new DictionaryProperties().type, new PdfName('Catalog'));\n return _this;\n }\n Object.defineProperty(PdfCatalog.prototype, \"pages\", {\n //Properties\n /**\n * Gets or sets the sections, which contain `pages`.\n * @private\n */\n get: function () {\n return this.sections;\n },\n set: function (value) {\n var dictionary = value.element;\n // if (this.sections !== value) {\n // this.sections = value;\n // this.Items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n // }\n this.sections = value;\n this.items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n return PdfCatalog;\n}(PdfDictionary));\nexport { PdfCatalog };\n","/**\n * public Enum for `PdfPageOrientation`.\n * @private\n */\nexport var PdfPageOrientation;\n(function (PdfPageOrientation) {\n /**\n * Specifies the type of `Portrait`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Portrait\"] = 0] = \"Portrait\";\n /**\n * Specifies the type of `Landscape`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Landscape\"] = 1] = \"Landscape\";\n})(PdfPageOrientation || (PdfPageOrientation = {}));\n/**\n * public Enum for `PdfPageRotateAngle`.\n * @private\n */\nexport var PdfPageRotateAngle;\n(function (PdfPageRotateAngle) {\n /**\n * Specifies the type of `RotateAngle0`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle0\"] = 0] = \"RotateAngle0\";\n /**\n * Specifies the type of `RotateAngle90`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle90\"] = 1] = \"RotateAngle90\";\n /**\n * Specifies the type of `RotateAngle180`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle180\"] = 2] = \"RotateAngle180\";\n /**\n * Specifies the type of `RotateAngle270`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle270\"] = 3] = \"RotateAngle270\";\n})(PdfPageRotateAngle || (PdfPageRotateAngle = {}));\n/**\n * public Enum for `PdfNumberStyle`.\n * @private\n */\nexport var PdfNumberStyle;\n(function (PdfNumberStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Numeric`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"Numeric\"] = 1] = \"Numeric\";\n /**\n * Specifies the type of `LowerLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerLatin\"] = 2] = \"LowerLatin\";\n /**\n * Specifies the type of `LowerRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerRoman\"] = 3] = \"LowerRoman\";\n /**\n * Specifies the type of `UpperLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperLatin\"] = 4] = \"UpperLatin\";\n /**\n * Specifies the type of `UpperRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperRoman\"] = 5] = \"UpperRoman\";\n})(PdfNumberStyle || (PdfNumberStyle = {}));\n/**\n * public Enum for `PdfDockStyle`.\n * @private\n */\nexport var PdfDockStyle;\n(function (PdfDockStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Bottom\"] = 1] = \"Bottom\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Top\"] = 2] = \"Top\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Right\"] = 4] = \"Right\";\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Fill\"] = 5] = \"Fill\";\n})(PdfDockStyle || (PdfDockStyle = {}));\n/**\n * public Enum for `PdfAlignmentStyle`.\n * @private\n */\nexport var PdfAlignmentStyle;\n(function (PdfAlignmentStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `TopLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopLeft\"] = 1] = \"TopLeft\";\n /**\n * Specifies the type of `TopCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopCenter\"] = 2] = \"TopCenter\";\n /**\n * Specifies the type of `TopRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopRight\"] = 3] = \"TopRight\";\n /**\n * Specifies the type of `MiddleLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleLeft\"] = 4] = \"MiddleLeft\";\n /**\n * Specifies the type of `MiddleCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleCenter\"] = 5] = \"MiddleCenter\";\n /**\n * Specifies the type of `MiddleRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleRight\"] = 6] = \"MiddleRight\";\n /**\n * Specifies the type of `BottomLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomLeft\"] = 7] = \"BottomLeft\";\n /**\n * Specifies the type of `BottomCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomCenter\"] = 8] = \"BottomCenter\";\n /**\n * Specifies the type of `BottomRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomRight\"] = 9] = \"BottomRight\";\n})(PdfAlignmentStyle || (PdfAlignmentStyle = {}));\n/**\n * public Enum for `TemplateType`.\n * @private\n */\nexport var TemplateType;\n(function (TemplateType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n TemplateType[TemplateType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n TemplateType[TemplateType[\"Top\"] = 1] = \"Top\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n TemplateType[TemplateType[\"Bottom\"] = 2] = \"Bottom\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n TemplateType[TemplateType[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n TemplateType[TemplateType[\"Right\"] = 4] = \"Right\";\n})(TemplateType || (TemplateType = {}));\n","import { ObjectStatus } from './../input-output/enum';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './pdf-dictionary-properties';\nimport { Operators } from './pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfReference } from './../primitives/pdf-reference';\nimport { ObjectType } from './cross-table';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfCatalog } from './../document/pdf-catalog';\n/**\n * `PdfCrossTable` is responsible for intermediate level parsing\n * and savingof a PDF document.\n * @private\n */\nvar PdfCrossTable = /** @class */ (function () {\n function PdfCrossTable() {\n /**\n * The modified `objects` that should be saved.\n * @private\n */\n this.objects = new Dictionary();\n /**\n * Holds `maximal generation number` or offset to object.\n * @default 0\n * @private\n */\n this.maxGenNumIndex = 0;\n /**\n * The `number of the objects`.\n * @default 0\n * @private\n */\n this.objectCount = 0;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new PdfDictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n }\n Object.defineProperty(PdfCrossTable.prototype, \"isMerging\", {\n //Properties\n /**\n * Gets or sets if the document `is merged`.\n * @private\n */\n get: function () {\n return this.merging;\n },\n set: function (value) {\n this.merging = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"trailer\", {\n /**\n * Gets the `trailer`.\n * @private\n */\n get: function () {\n if (this.internalTrailer == null) {\n this.internalTrailer = new PdfStream();\n }\n return this.internalTrailer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"document\", {\n /**\n * Gets or sets the main `PdfDocument` class instance.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n this.items = this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"pdfObjects\", {\n /**\n * Gets the catched `PDF object` main collection.\n * @private\n */\n get: function () {\n return this.items;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"objectCollection\", {\n /**\n * Gets the `object collection`.\n * @private\n */\n get: function () {\n return this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"count\", {\n /**\n * Gets or sets the `number of the objects` within the document.\n * @private\n */\n get: function () {\n return this.objectCount;\n },\n set: function (value) {\n this.objectCount = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"nextObjNumber\", {\n /**\n * Returns `next available object number`.\n * @private\n */\n get: function () {\n this.count = this.count + 1;\n return this.count;\n },\n enumerable: true,\n configurable: true\n });\n PdfCrossTable.prototype.save = function (writer, filename) {\n this.saveHead(writer);\n var state = false;\n this.mappedReferences = null;\n this.objects.clear();\n this.markTrailerReferences();\n this.saveObjects(writer);\n var saveCount = this.count;\n var xrefPos = writer.position;\n this.registerObject(0, new PdfReference(0, -1), true);\n var prevXRef = 0;\n writer.write(Operators.xref);\n writer.write(Operators.newLine);\n this.saveSections(writer);\n this.saveTrailer(writer, this.count, prevXRef);\n this.saveTheEndess(writer, xrefPos);\n this.count = saveCount;\n for (var i = 0; i < this.objectCollection.count; ++i) {\n var oi = this.objectCollection.items(i);\n oi.object.isSaving = false;\n }\n if (typeof filename === 'undefined') {\n return writer.stream.buffer;\n }\n else {\n writer.stream.save(filename);\n }\n };\n /**\n * `Saves the endess` of the file.\n * @private\n */\n PdfCrossTable.prototype.saveTheEndess = function (writer, xrefPos) {\n writer.write(Operators.newLine + Operators.startxref + Operators.newLine);\n writer.write(xrefPos.toString() + Operators.newLine);\n writer.write(Operators.eof + Operators.newLine);\n };\n /**\n * `Saves the new trailer` dictionary.\n * @private\n */\n PdfCrossTable.prototype.saveTrailer = function (writer, count, prevXRef) {\n writer.write(Operators.trailer + Operators.newLine);\n // Save the dictionary.\n var trailer = this.trailer;\n trailer.items.setValue(this.dictionaryProperties.size, new PdfNumber(this.objectCount + 1));\n trailer = new PdfDictionary(trailer); // Make it real dictionary.\n trailer.setEncrypt(false);\n trailer.save(writer);\n };\n /**\n * `Saves the xref section`.\n * @private\n */\n PdfCrossTable.prototype.saveSections = function (writer) {\n var objectNum = 0;\n var count = 0;\n do {\n count = this.prepareSubsection(objectNum);\n this.saveSubsection(writer, objectNum, count);\n objectNum += count;\n } while (count !== 0);\n };\n /**\n * `Saves a subsection`.\n * @private\n */\n PdfCrossTable.prototype.saveSubsection = function (writer, objectNum, count) {\n if (count <= 0 || objectNum >= this.count) {\n return;\n }\n var subsectionHead = '{0} {1}{2}';\n writer.write(objectNum + ' ' + (count + 1) + Operators.newLine);\n for (var i = objectNum; i <= objectNum + count; ++i) {\n var obj = this.objects.getValue(i);\n var str = '';\n if (obj.type === ObjectType.Free) {\n str = this.getItem(obj.offset, 65535, true);\n }\n else {\n str = this.getItem(obj.offset, obj.generation, false);\n }\n writer.write(str);\n }\n };\n /**\n * Generates string for `xref table item`.\n * @private\n */\n PdfCrossTable.prototype.getItem = function (offset, genNumber, isFree) {\n var returnString = '';\n var addOffsetLength = 10 - offset.toString().length;\n if (genNumber <= 0) {\n genNumber = 0;\n }\n var addGenNumberLength = (5 - genNumber.toString().length) <= 0 ? 0 : (5 - genNumber.toString().length);\n for (var index = 0; index < addOffsetLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + offset.toString() + ' ';\n for (var index = 0; index < addGenNumberLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + genNumber.toString() + ' ';\n returnString = returnString + ((isFree) ? Operators.f : Operators.n) + Operators.newLine;\n return returnString;\n };\n /**\n * `Prepares a subsection` of the current section within the cross-reference table.\n * @private\n */\n PdfCrossTable.prototype.prepareSubsection = function (objectNum) {\n var count = 0;\n var i;\n var total = this.count;\n for (var k = 0; k < this.document.pdfObjects.count; k++) {\n var reference = this.document.pdfObjects.items(k).reference;\n var refString = reference.toString();\n var refArray = refString.split(' ');\n }\n if (objectNum >= total) {\n return count;\n }\n // search for first changed indirect object.\n for (i = objectNum; i < total; ++i) {\n break;\n }\n objectNum = i;\n // look up for all indirect objects in one subsection.\n for (; i < total; ++i) {\n ++count;\n }\n return count;\n };\n /**\n * `Marks the trailer references` being saved.\n * @private\n */\n PdfCrossTable.prototype.markTrailerReferences = function () {\n var tempArray;\n var keys = this.trailer.items.keys();\n var values = this.trailer.items.values();\n };\n /**\n * `Saves the head`.\n * @private\n */\n PdfCrossTable.prototype.saveHead = function (writer) {\n var version = this.generateFileVersion(writer.document);\n writer.write('%PDF-' + version);\n writer.write(Operators.newLine);\n };\n /**\n * Generates the `version` of the file.\n * @private\n */\n PdfCrossTable.prototype.generateFileVersion = function (document) {\n var iVersion = 4;\n var version = '1.' + iVersion.toString();\n return version;\n };\n PdfCrossTable.prototype.getReference = function (obj, bNew) {\n if (typeof bNew === 'undefined') {\n var wasNew = false;\n return this.getReference(obj, wasNew);\n }\n else {\n //code splitted for reducing lines of code exceeds 100.\n return this.getSubReference(obj, bNew);\n }\n };\n /**\n * Retrieves the `reference` of the object given.\n * @private\n */\n PdfCrossTable.prototype.getSubReference = function (obj, bNew) {\n var isNew = false;\n var wasNew;\n var reference = null;\n // if (obj.IsSaving) {\n if (this.items.count > 0 && obj.objectCollectionIndex > 0 && this.items.count > obj.objectCollectionIndex - 1) {\n var tempObj = this.document.pdfObjects.getReference(obj, wasNew);\n reference = tempObj.reference;\n wasNew = tempObj.wasNew;\n }\n if (reference == null) {\n if (obj.status === ObjectStatus.Registered) {\n wasNew = false;\n }\n else {\n wasNew = true;\n }\n }\n else {\n wasNew = false;\n }\n // need to add mapped reference code\n if (reference == null) {\n var objnumber = this.nextObjNumber;\n reference = new PdfReference(objnumber, 0);\n var found = void 0;\n if (wasNew) {\n this.document.pdfObjects.add(obj);\n this.document.pdfObjects.trySetReference(obj, reference, found);\n var tempIndex = this.document.pdfObjects.count - 1;\n var tempkey = this.document.pdfObjects.objectCollections[tempIndex].reference.objNumber;\n var tempvalue = this.document.pdfObjects.objectCollections[this.document.pdfObjects.count - 1];\n this.document.pdfObjects.mainObjectCollection.setValue(tempkey, tempvalue);\n obj.position = -1;\n }\n else {\n this.document.pdfObjects.trySetReference(obj, reference, found);\n }\n obj.objectCollectionIndex = reference.objNumber;\n obj.status = ObjectStatus.None;\n isNew = true;\n }\n bNew = isNew || this.bForceNew;\n return reference;\n };\n /**\n * `Saves all objects` in the collection.\n * @private\n */\n PdfCrossTable.prototype.saveObjects = function (writer) {\n var objectCollection = this.objectCollection;\n for (var i = 0; i < objectCollection.count; ++i) {\n var oi = objectCollection.items(i);\n var obj = oi.object;\n obj.isSaving = true;\n this.saveIndirectObject(obj, writer);\n }\n };\n /**\n * `Saves indirect object`.\n * @private\n */\n PdfCrossTable.prototype.saveIndirectObject = function (obj, writer) {\n var reference = this.getReference(obj);\n if (obj instanceof PdfCatalog) {\n this.trailer.items.setValue(this.dictionaryProperties.root, reference);\n }\n // NOTE : This is needed for correct string objects encryption.\n this.pdfDocument.currentSavingObj = reference;\n var tempArchive = false;\n tempArchive = obj.getArchive();\n var allowedType = !((obj instanceof PdfStream) || !tempArchive || (obj instanceof PdfCatalog));\n var sigFlag = false;\n this.registerObject(writer.position, reference);\n this.doSaveObject(obj, reference, writer);\n };\n /**\n * Performs `real saving` of the save object.\n * @private\n */\n PdfCrossTable.prototype.doSaveObject = function (obj, reference, writer) {\n var correctPosition = writer.length;\n writer.write(reference.objNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(reference.genNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(Operators.obj);\n writer.write(Operators.newLine);\n obj.save(writer);\n var stream = writer.stream;\n writer.write(Operators.endObj);\n writer.write(Operators.newLine);\n };\n PdfCrossTable.prototype.registerObject = function (offset, reference, free) {\n if (typeof free === 'boolean') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference, free));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n else if (typeof free === 'undefined') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n };\n /**\n * `Dereferences` the specified primitive object.\n * @private\n */\n PdfCrossTable.dereference = function (obj) {\n var rh = obj;\n if (rh != null) {\n obj = rh.object;\n }\n return obj;\n };\n return PdfCrossTable;\n}());\nexport { PdfCrossTable };\nvar RegisteredObject = /** @class */ (function () {\n function RegisteredObject(offset, reference, free) {\n if (typeof free === 'undefined') {\n var tempOffset = offset;\n this.offsetNumber = tempOffset;\n var tempReference = reference;\n this.generation = tempReference.genNumber;\n this.object = tempReference.objNumber;\n this.type = ObjectType.Normal;\n }\n else {\n var tempOffset = offset;\n var tempReference = reference;\n this.constructor(tempOffset, tempReference);\n var tempFree = free;\n this.type = ObjectType.Free;\n }\n }\n Object.defineProperty(RegisteredObject.prototype, \"objectNumber\", {\n //Properties\n /**\n * Gets the `object number`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RegisteredObject.prototype, \"offset\", {\n /**\n * Gets the `offset`.\n * @private\n */\n get: function () {\n var result;\n result = this.offsetNumber;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n return RegisteredObject;\n}());\nexport { RegisteredObject };\n","/**\n * PdfPageSize.ts class for EJ2-PDF\n */\nimport { SizeF } from './../drawing/pdf-drawing';\n/**\n * Represents information about various predefined `page sizes`.\n */\nvar PdfPageSize = /** @class */ (function () {\n //constructor\n /**\n * Initialize an instance for `PdfPageSize` class.\n * @private\n */\n function PdfPageSize() {\n // \n }\n /**\n * Specifies the size of `letter`.\n * @private\n */\n PdfPageSize.letter = new SizeF(612, 792);\n /**\n * Specifies the size of `note`.\n * @private\n */\n PdfPageSize.note = new SizeF(540, 720);\n /**\n * Specifies the size of `legal`.\n * @private\n */\n PdfPageSize.legal = new SizeF(612, 1008);\n /**\n * Specifies the size of `a0`.\n * @private\n */\n PdfPageSize.a0 = new SizeF(2380, 3368);\n /**\n * Specifies the size of `a1`.\n * @private\n */\n PdfPageSize.a1 = new SizeF(1684, 2380);\n /**\n * Specifies the size of `a2`.\n * @private\n */\n PdfPageSize.a2 = new SizeF(1190, 1684);\n /**\n * Specifies the size of `a3`.\n * @private\n */\n PdfPageSize.a3 = new SizeF(842, 1190);\n /**\n * Specifies the size of `a4`.\n * @private\n */\n PdfPageSize.a4 = new SizeF(595, 842);\n /**\n * Specifies the size of `a5`.\n * @private\n */\n PdfPageSize.a5 = new SizeF(421, 595);\n /**\n * Specifies the size of `a6`.\n * @private\n */\n PdfPageSize.a6 = new SizeF(297, 421);\n /**\n * Specifies the size of `a7`.\n * @private\n */\n PdfPageSize.a7 = new SizeF(210, 297);\n /**\n * Specifies the size of `a8`.\n * @private\n */\n PdfPageSize.a8 = new SizeF(148, 210);\n /**\n * Specifies the size of `a9`.\n * @private\n */\n PdfPageSize.a9 = new SizeF(105, 148);\n /**\n * Specifies the size of `a10`.\n * @private\n */\n PdfPageSize.a10 = new SizeF(74, 105);\n /**\n * Specifies the size of `b0`.\n * @private\n */\n PdfPageSize.b0 = new SizeF(2836, 4008);\n /**\n * Specifies the size of `b1`.\n * @private\n */\n PdfPageSize.b1 = new SizeF(2004, 2836);\n /**\n * Specifies the size of `b2`.\n * @private\n */\n PdfPageSize.b2 = new SizeF(1418, 2004);\n /**\n * Specifies the size of `b3`.\n * @private\n */\n PdfPageSize.b3 = new SizeF(1002, 1418);\n /**\n * Specifies the size of `b4`.\n * @private\n */\n PdfPageSize.b4 = new SizeF(709, 1002);\n /**\n * Specifies the size of `b5`.\n * @private\n */\n PdfPageSize.b5 = new SizeF(501, 709);\n /**\n * Specifies the size of `archE`.\n * @private\n */\n PdfPageSize.archE = new SizeF(2592, 3456);\n /**\n * Specifies the size of `archD`.\n * @private\n */\n PdfPageSize.archD = new SizeF(1728, 2592);\n /**\n * Specifies the size of `archC`.\n * @private\n */\n PdfPageSize.archC = new SizeF(1296, 1728);\n /**\n * Specifies the size of `archB`.\n * @private\n */\n PdfPageSize.archB = new SizeF(864, 1296);\n /**\n * Specifies the size of `archA`.\n * @private\n */\n PdfPageSize.archA = new SizeF(648, 864);\n /**\n * Specifies the size of `flsa`.\n * @private\n */\n PdfPageSize.flsa = new SizeF(612, 936);\n /**\n * Specifies the size of `halfLetter`.\n * @private\n */\n PdfPageSize.halfLetter = new SizeF(396, 612);\n /**\n * Specifies the size of `letter11x17`.\n * @private\n */\n PdfPageSize.letter11x17 = new SizeF(792, 1224);\n /**\n * Specifies the size of `ledger`.\n * @private\n */\n PdfPageSize.ledger = new SizeF(1224, 792);\n return PdfPageSize;\n}());\nexport { PdfPageSize };\n","/**\n * PdfMargins.ts class for EJ2-PDF\n * A class representing PDF page margins.\n */\nvar PdfMargins = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfMargins` class.\n * @private\n */\n function PdfMargins() {\n /**\n * Represents the `Default Page Margin` value.\n * @default 0.0\n * @private\n */\n this.pdfMargin = 40.0;\n this.setMargins(this.pdfMargin);\n }\n Object.defineProperty(PdfMargins.prototype, \"left\", {\n //Properties\n /**\n * Gets or sets the `left margin` size.\n * @private\n */\n get: function () {\n return this.leftMargin;\n },\n set: function (value) {\n this.leftMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"top\", {\n /**\n * Gets or sets the `top margin` size.\n * @private\n */\n get: function () {\n return this.topMargin;\n },\n set: function (value) {\n this.topMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"right\", {\n /**\n * Gets or sets the `right margin` size.\n * @private\n */\n get: function () {\n return this.rightMargin;\n },\n set: function (value) {\n this.rightMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom margin` size.\n * @private\n */\n get: function () {\n return this.bottomMargin;\n },\n set: function (value) {\n this.bottomMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"all\", {\n /**\n * Sets the `margins`.\n * @private\n */\n set: function (value) {\n this.setMargins(value);\n },\n enumerable: true,\n configurable: true\n });\n PdfMargins.prototype.setMargins = function (margin1, margin2, margin3, margin4) {\n if (typeof margin2 === 'undefined') {\n this.leftMargin = this.topMargin = this.rightMargin = this.bottomMargin = margin1;\n }\n else {\n if (typeof margin3 === 'undefined') {\n this.leftMargin = this.rightMargin = margin1;\n this.bottomMargin = this.topMargin = margin2;\n }\n else {\n this.leftMargin = margin1;\n this.topMargin = margin2;\n this.rightMargin = margin3;\n this.bottomMargin = margin4;\n }\n }\n };\n /**\n * `Clones` the object.\n * @private\n */\n PdfMargins.prototype.clone = function () {\n return this;\n };\n return PdfMargins;\n}());\nexport { PdfMargins };\n","/**\n * ImageDecoder class\n */\nimport { ByteArray } from './byte-array';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfBoolean } from './../../primitives/pdf-boolean';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\n/**\n * Specifies the image `format`.\n * @private\n */\nexport var ImageFormat;\n(function (ImageFormat) {\n /**\n * Specifies the type of `Unknown`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `Bmp`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Bmp\"] = 1] = \"Bmp\";\n /**\n * Specifies the type of `Emf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Emf\"] = 2] = \"Emf\";\n /**\n * Specifies the type of `Gif`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Gif\"] = 3] = \"Gif\";\n /**\n * Specifies the type of `Jpeg`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Jpeg\"] = 4] = \"Jpeg\";\n /**\n * Specifies the type of `Png`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Png\"] = 5] = \"Png\";\n /**\n * Specifies the type of `Wmf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Wmf\"] = 6] = \"Wmf\";\n /**\n * Specifies the type of `Icon`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Icon\"] = 7] = \"Icon\";\n})(ImageFormat || (ImageFormat = {}));\n/**\n * `Decode the image stream`.\n * @private\n */\nvar ImageDecoder = /** @class */ (function () {\n /**\n * Initialize the new instance for `image-decoder` class.\n * @private\n */\n function ImageDecoder(stream) {\n /**\n * Specifies `format` of image.\n * @hidden\n * @private\n */\n this.mFormat = ImageFormat.Unknown;\n /**\n * `Bits per component`.\n * @default 8\n * @hidden\n * @private\n */\n this.mbitsPerComponent = 8;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.mStream = stream;\n this.initialize();\n }\n Object.defineProperty(ImageDecoder.prototype, \"height\", {\n /**\n * Gets the `height` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"width\", {\n /**\n * Gets the `width` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"bitsPerComponent\", {\n /**\n * Gets `bits per component`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mbitsPerComponent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"size\", {\n /**\n * Gets the `size` of an image data.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageData\", {\n /**\n * Gets the value of an `image data`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageDataAsNumberArray\", {\n /**\n * Gets the value of an `image data as number array`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.internalBuffer.buffer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Initialize` image data and image stream.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.initialize = function () {\n if (this.mFormat === ImageFormat.Unknown && this.checkIfJpeg()) {\n this.mFormat = ImageFormat.Jpeg;\n this.parseJpegImage();\n }\n this.reset();\n this.mImageData = new ByteArray(this.mStream.count);\n this.mStream.read(this.mImageData, 0, this.mImageData.count);\n };\n /**\n * `Reset` stream position into 0.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.reset = function () {\n this.mStream.position = 0;\n };\n /**\n * `Parse` Jpeg image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.parseJpegImage = function () {\n this.reset();\n var imgData = new ByteArray(this.mStream.count);\n this.mStream.read(imgData, 0, imgData.count);\n var i = 4;\n /* tslint:disable */\n if (String.fromCharCode(imgData.getBuffer(i + 2)) === 'J' && String.fromCharCode(imgData.getBuffer(i + 3)) === 'F' && String.fromCharCode(imgData.getBuffer(i + 4)) === 'I' && String.fromCharCode(imgData.getBuffer(i + 5)) === 'F' && imgData.getBuffer(i + 6) === 0) {\n var length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n while (i + length_1 < imgData.count) {\n i += length_1;\n if (imgData.getBuffer(i + 1) === 192) {\n this.mHeight = imgData.getBuffer(i + 5) * 256 + imgData.getBuffer(i + 6);\n this.mWidth = imgData.getBuffer(i + 7) * 256 + imgData.getBuffer(i + 8);\n return;\n }\n else {\n i += 2;\n length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n }\n }\n }\n /* tslint:enable */\n };\n Object.defineProperty(ImageDecoder.prototype, \"format\", {\n /**\n * Gets the image `format`.\n * @private\n * @hidden\n */\n get: function () {\n return this.mFormat;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Checks if JPG`.\n * @private\n * @hidden\n */\n ImageDecoder.prototype.checkIfJpeg = function () {\n this.reset();\n for (var i = 0; i < ImageDecoder.mJpegHeader.length; i++) {\n if (ImageDecoder.mJpegHeader[i] !== this.mStream.readByte(i)) {\n return false;\n }\n this.mStream.position++;\n }\n return true;\n };\n /**\n * Return image `dictionary`.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getImageDictionary = function () {\n if (this.mFormat === ImageFormat.Jpeg) {\n var tempArrayBuffer = this.imageData.internalBuffer.length;\n this.imageStream = new PdfStream();\n this.imageStream.isImage = true;\n var tempString = '';\n var decodedString = '';\n for (var i = 0; i < this.imageDataAsNumberArray.byteLength; i++) {\n tempString += String.fromCharCode(null, this.mStream.readByte(i));\n }\n for (var i = 0; i < tempString.length; i++) {\n if (i % 2 !== 0) {\n decodedString += tempString[i];\n }\n }\n this.imageStream.data = [decodedString];\n this.imageStream.compress = false;\n this.imageStream.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.xObject));\n this.imageStream.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.image));\n this.imageStream.items.setValue(this.dictionaryProperties.width, new PdfNumber(this.width));\n this.imageStream.items.setValue(this.dictionaryProperties.height, new PdfNumber(this.height));\n this.imageStream.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n this.imageStream.items.setValue(this.dictionaryProperties.filter, new PdfName(this.dictionaryProperties.dctdecode));\n this.imageStream.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(this.getColorSpace()));\n this.imageStream.items.setValue(this.dictionaryProperties.decodeParms, this.getDecodeParams());\n return this.imageStream;\n }\n else {\n return this.imageStream;\n }\n };\n /**\n * Return `colorSpace` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getColorSpace = function () {\n return this.dictionaryProperties.deviceRgb;\n };\n /**\n * Return `decode parameters` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getDecodeParams = function () {\n var decodeParams = new PdfDictionary();\n decodeParams.items.setValue(this.dictionaryProperties.columns, new PdfNumber(this.width));\n decodeParams.items.setValue(this.dictionaryProperties.blackIs1, new PdfBoolean(true));\n decodeParams.items.setValue(this.dictionaryProperties.k, new PdfNumber(-1));\n decodeParams.items.setValue(this.dictionaryProperties.predictor, new PdfNumber(15));\n decodeParams.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n return decodeParams;\n };\n /**\n * Number array for `png header`.\n * @hidden\n * @private\n */\n ImageDecoder.mPngHeader = [137, 80, 78, 71, 13, 10, 26, 10];\n /**\n * Number Array for `jpeg header`.\n * @hidden\n * @private\n */\n ImageDecoder.mJpegHeader = [255, 216];\n /**\n * Number array for `gif header`.\n * @hidden\n * @private\n */\n ImageDecoder.GIF_HEADER = 'G,I,F,8';\n /**\n * Number array for `bmp header.`\n * @hidden\n * @private\n */\n ImageDecoder.BMP_HEADER = 'B,M';\n return ImageDecoder;\n}());\nexport { ImageDecoder };\n","/**\n * PdfPageSettings.ts class for EJ2-PDF\n */\nimport { SizeF, PointF } from './../drawing/pdf-drawing';\nimport { PdfPageSize } from './pdf-page-size';\nimport { PdfPageRotateAngle, PdfPageOrientation } from './enum';\nimport { PdfMargins } from './../graphics/pdf-margins';\n/**\n * The class provides various `setting` related with PDF pages.\n */\nvar PdfPageSettings = /** @class */ (function () {\n function PdfPageSettings(margins) {\n //Fields\n /**\n * The page `margins`.\n * @private\n */\n this.pageMargins = new PdfMargins();\n /**\n * The page `size`.\n * @default a4\n * @private\n */\n this.pageSize = PdfPageSize.a4;\n /**\n * The page `rotation angle`.\n * @default PdfPageRotateAngle.RotateAngle0\n * @private\n */\n this.rotateAngle = PdfPageRotateAngle.RotateAngle0;\n /**\n * The page `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.pageOrientation = PdfPageOrientation.Portrait;\n /**\n * The page `origin`.\n * @default 0,0\n * @private\n */\n this.pageOrigin = new PointF(0, 0);\n /**\n * Checks the Whether the `rotation` is applied or not.\n * @default false\n * @private\n */\n this.isRotation = false;\n if (typeof margins === 'number') {\n this.pageMargins.setMargins(margins);\n }\n }\n Object.defineProperty(PdfPageSettings.prototype, \"size\", {\n //Properties\n /**\n * Gets or sets the `size` of the page.\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.setSize(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"orientation\", {\n /**\n * Gets or sets the page `orientation`.\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (orientation) {\n if (this.pageOrientation !== orientation) {\n this.pageOrientation = orientation;\n this.updateSize(orientation);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"margins\", {\n /**\n * Gets or sets the `margins` of the page.\n * @private\n */\n get: function () {\n return this.pageMargins;\n },\n set: function (value) {\n this.pageMargins = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.width;\n },\n set: function (value) {\n this.pageSize.width = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.height;\n },\n set: function (value) {\n this.pageSize.height = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"origin\", {\n /**\n * Gets or sets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"rotate\", {\n /**\n * Gets or sets the number of degrees by which the page should be `rotated` clockwise when displayed or printed.\n * @private\n */\n get: function () {\n return this.rotateAngle;\n },\n set: function (value) {\n this.rotateAngle = value;\n this.isRotation = true;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Update page size` depending on orientation.\n * @private\n */\n PdfPageSettings.prototype.updateSize = function (orientation) {\n var min = Math.min(this.pageSize.width, this.pageSize.height);\n var max = Math.max(this.pageSize.width, this.pageSize.height);\n switch (orientation) {\n case PdfPageOrientation.Portrait:\n this.pageSize = new SizeF(min, max);\n break;\n case PdfPageOrientation.Landscape:\n this.pageSize = new SizeF(max, min);\n break;\n }\n };\n /**\n * Creates a `clone` of the object.\n * @private\n */\n PdfPageSettings.prototype.clone = function () {\n var settings = this;\n settings.pageMargins = this.pageMargins.clone();\n // if (GetTransition() != null)\n // {\n // settings.Transition = (PdfPageTransition)Transition.clone();\n // }\n return settings;\n };\n /**\n * Returns `size`, shrinked by the margins.\n * @private\n */\n PdfPageSettings.prototype.getActualSize = function () {\n var width = this.width - (this.margins.left + this.margins.right);\n var height = this.height - (this.margins.top + this.margins.bottom);\n var size = new SizeF(width, height);\n return size;\n };\n /**\n * Sets `size` to the page aaccording to the orientation.\n * @private\n */\n PdfPageSettings.prototype.setSize = function (size) {\n var min = Math.min(size.width, size.height);\n var max = Math.max(size.width, size.height);\n if (this.orientation === PdfPageOrientation.Portrait) {\n this.pageSize = new SizeF(min, max);\n }\n else {\n this.pageSize = new SizeF(max, min);\n }\n };\n return PdfPageSettings;\n}());\nexport { PdfPageSettings };\n","import { Operators } from './pdf-operators';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * Helper class to `write PDF graphic streams` easily.\n * @private\n */\nvar PdfStreamWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfStreamWriter` class.\n * @private\n */\n function PdfStreamWriter(stream) {\n if (stream == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.stream = stream;\n }\n //Implementation\n /**\n * `Clear` the stream.\n * @public\n */\n PdfStreamWriter.prototype.clear = function () {\n this.stream.clearStream();\n };\n PdfStreamWriter.prototype.setGraphicsState = function (dictionaryName) {\n if (dictionaryName instanceof PdfName) {\n this.stream.write(dictionaryName.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n else {\n this.stream.write(Operators.slash);\n this.stream.write(dictionaryName);\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n };\n /**\n * `Executes the XObject`.\n * @private\n */\n PdfStreamWriter.prototype.executeObject = function (name) {\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.paintXObject);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes path object`.\n * @private\n */\n PdfStreamWriter.prototype.closePath = function () {\n this.writeOperator(Operators.closePath);\n };\n /**\n * `Clips the path`.\n * @private\n */\n PdfStreamWriter.prototype.clipPath = function (useEvenOddRule) {\n this.stream.write(Operators.clipPath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n }\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.endPath);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes, then fills and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.closeFillStrokePath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills and strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.fillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.fillStroke);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills path`.\n * @private\n */\n PdfStreamWriter.prototype.fillPath = function (useEvenOddRule) {\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Ends the path`.\n * @private\n */\n PdfStreamWriter.prototype.endPath = function () {\n this.writeOperator(Operators.n);\n };\n /**\n * `Closes and fills the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillPath = function (useEvenOddRule) {\n this.writeOperator(Operators.closePath);\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Closes and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeStrokePath = function () {\n this.writeOperator(Operators.closeStrokePath);\n };\n /**\n * `Sets the text scaling`.\n * @private\n */\n PdfStreamWriter.prototype.setTextScaling = function (textScaling) {\n this.stream.write(PdfNumber.floatToString(textScaling));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextScaling);\n };\n /**\n * `Strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.strokePath = function () {\n this.writeOperator(Operators.stroke);\n };\n /**\n * `Restores` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.restoreGraphicsState = function () {\n this.writeOperator(Operators.restoreState);\n };\n /**\n * `Saves` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.saveGraphicsState = function () {\n this.writeOperator(Operators.saveState);\n };\n PdfStreamWriter.prototype.startNextLine = function (arg1, arg2) {\n if (typeof arg1 === 'undefined') {\n this.writeOperator(Operators.goToNextLine);\n }\n else if (arg1 instanceof PointF) {\n this.writePoint(arg1);\n this.writeOperator(Operators.setCoords);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.setCoords);\n }\n };\n /**\n * Shows the `text`.\n * @private\n */\n PdfStreamWriter.prototype.showText = function (text) {\n this.checkTextParam(text);\n this.writeText(text);\n this.writeOperator(Operators.setText);\n };\n /**\n * Sets `text leading`.\n * @private\n */\n PdfStreamWriter.prototype.setLeading = function (leading) {\n this.stream.write(PdfNumber.floatToString(leading));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextLeading);\n };\n /**\n * `Begins the path`.\n * @private\n */\n PdfStreamWriter.prototype.beginPath = function (x, y) {\n this.writePoint(x, y);\n this.writeOperator(Operators.beginPath);\n };\n /**\n * `Begins text`.\n * @private\n */\n PdfStreamWriter.prototype.beginText = function () {\n this.writeOperator(Operators.beginText);\n };\n /**\n * `Ends text`.\n * @private\n */\n PdfStreamWriter.prototype.endText = function () {\n this.writeOperator(Operators.endText);\n };\n PdfStreamWriter.prototype.appendRectangle = function (arg1, arg2, arg3, arg4) {\n if (arg1 instanceof RectangleF) {\n this.appendRectangle(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writePoint(arg3, arg4);\n this.writeOperator(Operators.appendRectangle);\n }\n };\n PdfStreamWriter.prototype.appendLineSegment = function (arg1, arg2) {\n if (arg1 instanceof PointF) {\n this.appendLineSegment(arg1.x, arg1.y);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.appendLineSegment);\n }\n };\n /**\n * Sets the `text rendering mode`.\n * @private\n */\n PdfStreamWriter.prototype.setTextRenderingMode = function (renderingMode) {\n this.stream.write(renderingMode.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setRenderingMode);\n };\n /**\n * Sets the `character spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setCharacterSpacing = function (charSpacing) {\n this.stream.write(PdfNumber.floatToString(charSpacing));\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.setCharacterSpace);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `word spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setWordSpacing = function (wordSpacing) {\n this.stream.write(PdfNumber.floatToString(wordSpacing));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setWordSpace);\n };\n PdfStreamWriter.prototype.showNextLineText = function (arg1, arg2) {\n if (arg1 instanceof PdfString) {\n this.checkTextParam(arg1);\n this.writeText(arg1);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n else {\n this.checkTextParam(arg1);\n this.writeText(arg1, arg2);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n };\n PdfStreamWriter.prototype.setColorSpace = function (arg1, arg2) {\n if (arg1 instanceof PdfName && typeof arg2 === 'boolean') {\n var temparg1 = arg1;\n var temparg2 = arg2;\n // if (temparg1 == null) {\n // throw new Error('ArgumentNullException:name');\n // }\n var op = (temparg2) ? Operators.selectcolorspaceforstroking : Operators.selectcolorspacefornonstroking;\n this.stream.write(temparg1.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(op);\n this.stream.write(Operators.newLine);\n }\n else {\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.setColorSpace(new PdfName(temparg1), temparg2);\n }\n };\n /**\n * Modifies current `transformation matrix`.\n * @private\n */\n PdfStreamWriter.prototype.modifyCtm = function (matrix) {\n if (matrix == null) {\n throw new Error('ArgumentNullException:matrix');\n }\n this.stream.write(matrix.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.modifyCtm);\n };\n PdfStreamWriter.prototype.setFont = function (font, name, size) {\n if (typeof name === 'string') {\n this.setFont(font, new PdfName(name), size);\n }\n else {\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(PdfNumber.floatToString(size));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setFont);\n }\n };\n /**\n * `Writes the operator`.\n * @private\n */\n PdfStreamWriter.prototype.writeOperator = function (opcode) {\n this.stream.write(opcode);\n this.stream.write(Operators.newLine);\n };\n PdfStreamWriter.prototype.checkTextParam = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (typeof text === 'string' && text === '') {\n throw new Error('ArgumentException:The text can not be an empty string, text');\n }\n };\n PdfStreamWriter.prototype.writeText = function (arg1, arg2) {\n if ((arg1 instanceof PdfString) && (typeof arg2 === 'undefined')) {\n this.stream.write(arg1.pdfEncode());\n }\n else {\n var start = void 0;\n var end = void 0;\n if (arg2) {\n start = PdfString.hexStringMark[0];\n end = PdfString.hexStringMark[1];\n }\n else {\n start = PdfString.stringMark[0];\n end = PdfString.stringMark[1];\n }\n this.stream.write(start);\n this.stream.write(arg1);\n this.stream.write(end);\n }\n };\n PdfStreamWriter.prototype.writePoint = function (arg1, arg2) {\n if ((arg1 instanceof PointF) && (typeof arg2 === 'undefined')) {\n this.writePoint(arg1.x, arg1.y);\n }\n else {\n var temparg1 = arg1;\n this.stream.write(PdfNumber.floatToString(temparg1));\n this.stream.write(Operators.whiteSpace);\n // NOTE: Change Y co-ordinate because we shifted co-ordinate system only.\n arg2 = this.updateY(arg2);\n this.stream.write(PdfNumber.floatToString(arg2));\n this.stream.write(Operators.whiteSpace);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfStreamWriter.prototype.updateY = function (arg) {\n return -arg;\n };\n /**\n * `Writes string` to the file.\n * @private\n */\n PdfStreamWriter.prototype.write = function (string) {\n var builder = '';\n builder += string;\n builder += Operators.newLine;\n this.writeOperator(builder);\n };\n /**\n * `Writes comment` to the file.\n * @private\n */\n PdfStreamWriter.prototype.writeComment = function (comment) {\n if (comment != null && comment.length > 0) {\n var builder = '';\n builder += Operators.comment;\n builder += Operators.whiteSpace;\n builder += comment;\n //builder.Append( Operators.NewLine );\n this.writeOperator(builder);\n }\n else {\n throw new Error('Invalid comment');\n }\n };\n /**\n * Sets the `color and space`.\n * @private\n */\n PdfStreamWriter.prototype.setColorAndSpace = function (color, colorSpace, forStroking) {\n if (!color.isEmpty) {\n // bool test = color is PdfExtendedColor;\n this.stream.write(color.toString(colorSpace, forStroking));\n this.stream.write(Operators.newLine);\n }\n };\n // public setLineDashPattern(pattern : number[], patternOffset : number) : void\n // {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n // }\n // private setLineDashPatternHelper(pattern : PdfArray, patternOffset : PdfNumber) : void\n // {\n // pattern.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // patternOffset.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // this.writeOperator(Operators.setDashPattern);\n // }\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPattern = function (pattern, patternOffset) {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n this.setLineDashPatternHelper(pattern, patternOffset);\n };\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPatternHelper = function (pattern, patternOffset) {\n var tempPattern = '[';\n if (pattern.length > 1) {\n for (var index = 0; index < pattern.length; index++) {\n if (index === pattern.length - 1) {\n tempPattern += pattern[index].toString();\n }\n else {\n tempPattern += pattern[index].toString() + ' ';\n }\n }\n }\n tempPattern += '] ';\n tempPattern += patternOffset.toString();\n tempPattern += ' ' + Operators.setDashPattern;\n this.stream.write(tempPattern);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `miter limit`.\n * @private\n */\n PdfStreamWriter.prototype.setMiterLimit = function (miterLimit) {\n this.stream.write(PdfNumber.floatToString(miterLimit));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setMiterLimit);\n };\n /**\n * Sets the `width of the line`.\n * @private\n */\n PdfStreamWriter.prototype.setLineWidth = function (width) {\n this.stream.write(PdfNumber.floatToString(width));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineWidth);\n };\n /**\n * Sets the `line cap`.\n * @private\n */\n PdfStreamWriter.prototype.setLineCap = function (lineCapStyle) {\n this.stream.write((lineCapStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineCapStyle);\n };\n /**\n * Sets the `line join`.\n * @private\n */\n PdfStreamWriter.prototype.setLineJoin = function (lineJoinStyle) {\n this.stream.write((lineJoinStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineJoinStyle);\n };\n Object.defineProperty(PdfStreamWriter.prototype, \"position\", {\n //IPdfWriter members\n /**\n * Gets or sets the current `position` within the stream.\n * @private\n */\n get: function () {\n return this.stream.position;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"length\", {\n /**\n * Gets `stream length`.\n * @private\n */\n get: function () {\n var returnValue = 0;\n if (this.stream.data.length !== 0 && this.stream.data.length !== -1) {\n for (var index = 0; index < this.stream.data.length; index++) {\n returnValue += this.stream.data[index].length;\n }\n }\n return returnValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"document\", {\n /**\n * Gets and Sets the `current document`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStreamWriter;\n}());\nexport { PdfStreamWriter };\n","/**\n * PdfPen.ts class for EJ2-PDF\n */\nimport { PdfColor } from './pdf-color';\nimport { PdfDashStyle, PdfColorSpace } from './enum';\nimport { PdfBrush } from './brushes/pdf-brush';\n/**\n * `PdfPen` class defining settings for drawing operations, that determines the color,\n * width, and style of the drawing elements.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPen = /** @class */ (function () {\n function PdfPen(arg1, arg2) {\n //Fields\n /**\n * Specifies the `color of the pen`.\n * @default new PdfColor()\n * @private\n */\n this.pdfColor = new PdfColor(0, 0, 0);\n /**\n * Specifies the `dash offset of the pen`.\n * @default 0\n * @private\n */\n this.dashOffsetValue = 0;\n /**\n * Specifies the `dash pattern of the pen`.\n * @default [0]\n * @private\n */\n this.penDashPattern = [0];\n /**\n * Specifies the `dash style of the pen`.\n * @default Solid\n * @private\n */\n this.pdfDashStyle = PdfDashStyle.Solid;\n /**\n * Specifies the `line cap of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineCap = 0;\n /**\n * Specifies the `line join of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineJoin = 0;\n /**\n * Specifies the `width of the pen`.\n * @default 1.0\n * @private\n */\n this.penWidth = 1.0;\n /**\n * Specifies the `mitter limit of the pen`.\n * @default 0.0\n * @private\n */\n this.internalMiterLimit = 0.0;\n /**\n * Stores the `colorspace` value.\n * @default Rgb\n * @private\n */\n this.colorSpace = PdfColorSpace.Rgb;\n if (typeof arg2 === 'number') {\n this.constructor(arg1);\n this.width = arg2;\n }\n else if (typeof arg2 === 'undefined' && arg1 instanceof PdfBrush) {\n this.setBrush(arg1);\n }\n else if (typeof arg2 === 'undefined' && arg1 instanceof PdfColor) {\n this.color = arg1;\n }\n }\n Object.defineProperty(PdfPen.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color of the pen`.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashOffset\", {\n /**\n * Gets or sets the `dash offset of the pen`.\n * @private\n */\n get: function () {\n if (typeof this.dashOffsetValue === 'undefined' || this.dashOffsetValue == null) {\n return 0;\n }\n else {\n return this.dashOffsetValue;\n }\n },\n set: function (value) {\n this.dashOffsetValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashPattern\", {\n /**\n * Gets or sets the `dash pattern of the pen`.\n * @private\n */\n get: function () {\n return this.penDashPattern;\n },\n set: function (value) {\n this.penDashPattern = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashStyle\", {\n /**\n * Gets or sets the `dash style of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen style\n * pen.dashStyle = PdfDashStyle.DashDot;\n * // get pen style\n * let style : PdfDashStyle = pen.dashStyle;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfDashStyle;\n },\n set: function (value) {\n if (this.pdfDashStyle !== value) {\n this.pdfDashStyle = value;\n switch (this.pdfDashStyle) {\n case PdfDashStyle.Custom:\n break;\n case PdfDashStyle.Dash:\n this.penDashPattern = [3, 1];\n break;\n case PdfDashStyle.Dot:\n this.penDashPattern = [1, 1];\n break;\n case PdfDashStyle.DashDot:\n this.penDashPattern = [3, 1, 1, 1];\n break;\n case PdfDashStyle.DashDotDot:\n this.penDashPattern = [3, 1, 1, 1, 1, 1];\n break;\n case PdfDashStyle.Solid:\n break;\n default:\n this.pdfDashStyle = PdfDashStyle.Solid;\n this.penDashPattern = [0];\n break;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineCap\", {\n /**\n * Gets or sets the `line cap of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineCap;\n },\n set: function (value) {\n this.pdfLineCap = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineJoin\", {\n /**\n * Gets or sets the `line join style of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineJoin;\n },\n set: function (value) {\n this.pdfLineJoin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"miterLimit\", {\n /**\n * Gets or sets the `miter limit`.\n * @private\n */\n get: function () {\n return this.internalMiterLimit;\n },\n set: function (value) {\n this.internalMiterLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"width\", {\n /**\n * Gets or sets the `width of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen width\n * pen.width = 2;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.penWidth;\n },\n set: function (value) {\n this.penWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Helper\n /**\n * `Clones` this instance of PdfPen class.\n * @private\n */\n PdfPen.prototype.clone = function () {\n var pen = this;\n return pen;\n };\n /**\n * `Sets the brush`.\n * @private\n */\n PdfPen.prototype.setBrush = function (brush) {\n var sBrush = brush;\n this.color = sBrush.color;\n this.pdfBrush = sBrush;\n };\n /**\n * `Monitors the changes`.\n * @private\n */\n PdfPen.prototype.monitorChanges = function (currentPen, streamWriter, getResources, saveState, currentColorSpace, matrix) {\n var diff = false;\n saveState = true;\n if (currentPen == null) {\n diff = true;\n }\n diff = this.dashControl(currentPen, saveState, streamWriter);\n streamWriter.setLineWidth(this.width);\n streamWriter.setLineJoin(this.lineJoin);\n streamWriter.setLineCap(this.lineCap);\n var miterLimit = this.miterLimit;\n if (miterLimit > 0) {\n streamWriter.setMiterLimit(miterLimit);\n diff = true;\n }\n var brush = this.pdfBrush;\n streamWriter.setColorAndSpace(this.color, currentColorSpace, true);\n diff = true;\n return diff;\n };\n /**\n * `Controls the dash style` and behaviour of each line.\n * @private\n */\n PdfPen.prototype.dashControl = function (pen, saveState, streamWriter) {\n saveState = true;\n var lineWidth = this.width;\n var pattern = this.getPattern();\n streamWriter.setLineDashPattern(pattern, this.dashOffset * lineWidth);\n return saveState;\n };\n /**\n * `Gets the pattern` of PdfPen.\n * @private\n */\n PdfPen.prototype.getPattern = function () {\n var pattern = this.dashPattern;\n for (var i = 0; i < pattern.length; ++i) {\n pattern[i] *= this.width;\n }\n return pattern;\n };\n return PdfPen;\n}());\nexport { PdfPen };\n","/**\n * PdfTransformationMatrix.ts class for EJ2-PDF\n */\nimport { PointF } from './../drawing/pdf-drawing';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * Class for representing Root `transformation matrix`.\n */\nvar PdfTransformationMatrix = /** @class */ (function () {\n function PdfTransformationMatrix(value) {\n /**\n * Value for `angle converting`.\n * @default 180.0 / Math.PI\n * @private\n */\n this.radDegFactor = 180.0 / Math.PI;\n if (typeof value === 'undefined') {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, 1.00, 0.00, 0.00);\n }\n else {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, -1.00, 0.00, 0.00);\n }\n }\n Object.defineProperty(PdfTransformationMatrix.prototype, \"matrix\", {\n // Properties\n /**\n * Gets or sets the `internal matrix object`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n set: function (value) {\n this.transformationMatrix = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.translate = function (offsetX, offsetY) {\n this.transformationMatrix.translate(offsetX, offsetY);\n };\n /**\n * `Scales` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.scale = function (scaleX, scaleY) {\n this.transformationMatrix.elements[0] = scaleX;\n this.transformationMatrix.elements[3] = scaleY;\n };\n /**\n * `Rotates` coordinate system in counterclockwise direction.\n * @private\n */\n PdfTransformationMatrix.prototype.rotate = function (angle) {\n //Convert from degree to radian \n angle = (angle * Math.PI) / 180;\n //Rotation \n this.transformationMatrix.elements[0] = Math.cos(angle);\n this.transformationMatrix.elements[1] = Math.sin(angle);\n this.transformationMatrix.elements[2] = -Math.sin(angle);\n this.transformationMatrix.elements[3] = Math.cos(angle);\n };\n // Overrides\n /**\n * Gets `PDF representation`.\n * @private\n */\n PdfTransformationMatrix.prototype.toString = function () {\n var builder = '';\n var whitespace = ' ';\n for (var i = 0, len = this.transformationMatrix.elements.length; i < len; i++) {\n var temp = this.matrix.elements[i];\n builder += PdfNumber.floatToString(this.transformationMatrix.elements[i]);\n builder += whitespace;\n }\n return builder;\n };\n // Implementation\n /**\n * `Multiplies` matrices (changes coordinate system.)\n * @private\n */\n PdfTransformationMatrix.prototype.multiply = function (matrix) {\n this.transformationMatrix.multiply(matrix.matrix);\n };\n /**\n * Converts `degrees to radians`.\n * @private\n */\n PdfTransformationMatrix.degreesToRadians = function (degreesX) {\n return this.degRadFactor * degreesX;\n };\n /**\n * Converts `radians to degrees`.\n * @private\n */\n PdfTransformationMatrix.prototype.radiansToDegrees = function (radians) {\n return this.radDegFactor * radians;\n };\n /**\n * `Clones` this instance of PdfTransformationMatrix.\n * @private\n */\n PdfTransformationMatrix.prototype.clone = function () {\n return this;\n };\n // Constants\n /**\n * Value for `angle converting`.\n * @default Math.PI / 180.0\n * @private\n */\n PdfTransformationMatrix.degRadFactor = Math.PI / 180.0;\n return PdfTransformationMatrix;\n}());\nexport { PdfTransformationMatrix };\nvar Matrix = /** @class */ (function () {\n function Matrix(arg1, arg2, arg3, arg4, arg5, arg6) {\n if (typeof arg1 === 'undefined') {\n this.metrixElements = [];\n }\n else if (typeof arg1 === 'number') {\n this.constructor();\n this.metrixElements.push(arg1);\n this.metrixElements.push(arg2);\n this.metrixElements.push(arg3);\n this.metrixElements.push(arg4);\n this.metrixElements.push(arg5);\n this.metrixElements.push(arg6);\n }\n else {\n this.metrixElements = arg1;\n }\n }\n Object.defineProperty(Matrix.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `elements`.\n * @private\n */\n get: function () {\n return this.metrixElements;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetX\", {\n /**\n * Gets the off set `X`.\n * @private\n */\n get: function () {\n return this.metrixElements[4];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetY\", {\n /**\n * Gets the off set `Y`.\n * @private\n */\n get: function () {\n return this.metrixElements[5];\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n Matrix.prototype.translate = function (offsetX, offsetY) {\n this.metrixElements[4] = offsetX;\n this.metrixElements[5] = offsetY;\n };\n /**\n * `Translates` the specified offset X.\n * @private\n */\n Matrix.prototype.transform = function (point) {\n var x = point.x;\n var y = point.y;\n var x2 = x * this.elements[0] + y * this.elements[2] + this.offsetX;\n var y2 = x * this.elements[1] + y * this.elements[3] + this.offsetY;\n return new PointF(x2, y2);\n };\n /**\n * `Multiplies matrices` (changes coordinate system.)\n * @private\n */\n Matrix.prototype.multiply = function (matrix) {\n var tempMatrix = [];\n tempMatrix.push(this.elements[0] * matrix.elements[0] + this.elements[1] * matrix.elements[2]);\n tempMatrix[1] = (this.elements[0] * matrix.elements[1] + this.elements[1] * matrix.elements[3]);\n tempMatrix[2] = (this.elements[2] * matrix.elements[0] + this.elements[3] * matrix.elements[2]);\n tempMatrix[3] = (this.elements[2] * matrix.elements[1] + this.elements[3] * matrix.elements[3]);\n tempMatrix[4] = (this.offsetX * matrix.elements[0] + this.offsetY * matrix.elements[2] + matrix.offsetX);\n tempMatrix[5] = (this.offsetX * matrix.elements[1] + this.offsetY * matrix.elements[3] + matrix.offsetY);\n for (var i = 0; i < tempMatrix.length; i++) {\n this.elements[i] = tempMatrix[i];\n }\n };\n // IDisposable Members\n /**\n * `Dispose` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.dispose = function () {\n this.metrixElements = null;\n };\n // ICloneable Members\n /**\n * `Clones` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.clone = function () {\n var m = new Matrix(this.metrixElements);\n return m;\n };\n return Matrix;\n}());\nexport { Matrix };\n","/**\n * `constants.ts` class for EJ2-PDF\n * @private\n */\nvar ProcedureSets = /** @class */ (function () {\n function ProcedureSets() {\n /**\n * Specifies the `PDF` procedure set.\n * @private\n */\n this.pdf = 'PDF';\n /**\n * Specifies the `Text` procedure set.\n * @private\n */\n this.text = 'Text';\n /**\n * Specifies the `ImageB` procedure set.\n * @private\n */\n this.imageB = 'ImageB';\n /**\n * Specifies the `ImageC` procedure set.\n * @private\n */\n this.imageC = 'ImageC';\n /**\n * Specifies the `ImageI` procedure set.\n * @private\n */\n this.imageI = 'ImageI';\n }\n return ProcedureSets;\n}());\nexport { ProcedureSets };\n","/**\n * Dictionary class\n * @private\n * @hidden\n */\nvar TemporaryDictionary = /** @class */ (function () {\n function TemporaryDictionary() {\n /**\n * @hidden\n * @private\n */\n this.mKeys = [];\n /**\n * @hidden\n * @private\n */\n this.mValues = [];\n }\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.size = function () {\n return this.mKeys.length;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.add = function (key, value) {\n if (key === undefined || key === null || value === undefined || value === null) {\n throw new ReferenceError('Provided key or value is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n return 1;\n }\n else {\n throw new RangeError('An item with the same key has already been added.');\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.keys = function () {\n return this.mKeys;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.values = function () {\n return this.mValues;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.getValue = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n return this.mValues[index];\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.setValue = function (key, value) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n }\n else {\n this.mValues[index] = value;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.remove = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.mKeys.splice(index, 1);\n this.mValues.splice(index, 1);\n return true;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.containsKey = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n return false;\n }\n return true;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.clear = function () {\n this.mKeys = [];\n this.mValues = [];\n };\n return TemporaryDictionary;\n}());\nexport { TemporaryDictionary };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents a simple `transparency`.\n * @private\n */\nvar PdfTransparency = /** @class */ (function () {\n // Properties\n // /**\n // * Gets the `stroke` operation alpha value.\n // * @private\n // */\n // public get stroke() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.CA);\n // return result;\n // }\n // /**\n // * Gets the `fill` operation alpha value.\n // * @private\n // */\n // public get fill() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.ca);\n // return result;\n // }\n // /**\n // * Gets the `blend mode`.\n // * @private\n // */\n // public get mode() : PdfBlendMode {\n // let result : string = this.getName(this.dictionaryProperties.ca);\n // return PdfBlendMode.Normal;\n // }\n // Constructors\n /**\n * Initializes a new instance of the `Transparency` class.\n * @private\n */\n function PdfTransparency(stroke, fill, mode) {\n // Fields\n /**\n * Internal variable to store `dictionary`.\n * @default new PdfDictionary()\n * @private\n */\n this.dictionary = new PdfDictionary();\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new DictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.dictionary.items.setValue(this.dictionaryProperties.CA, new PdfNumber(stroke));\n this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(fill));\n this.dictionary.items.setValue(this.dictionaryProperties.BM, new PdfName(mode.toString()));\n }\n Object.defineProperty(PdfTransparency.prototype, \"element\", {\n // // Implementation\n // /**\n // * Gets the `number value`.\n // * @private\n // */\n // private getNumber(keyName : string) : number {\n // let result : number = 0.0;\n // let numb : PdfNumber = this.dictionary.items.getValue(keyName) as PdfNumber;\n // result = numb.intValue;\n // return result;\n // }\n // /**\n // * Gets the `name value`.\n // * @private\n // */\n // private getName(keyName : string) : string {\n // let result : string = null;\n // let name : PdfName = this.dictionary.items.getValue(keyName) as PdfName;\n // result = name.value;\n // return result;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTransparency;\n}());\nexport { PdfTransparency };\n","/**\n * Represent a `collection of automatic fields information`.\n * @private\n */\nvar PdfAutomaticFieldInfoCollection = /** @class */ (function () {\n /**\n * Initializes a new instance of the 'PdfPageNumberFieldInfoCollection' class.\n * @private\n */\n function PdfAutomaticFieldInfoCollection() {\n /**\n * Internal variable to store instance of `pageNumberFields` class.\n * @private\n */\n this.automaticFieldsInformation = [];\n //\n }\n Object.defineProperty(PdfAutomaticFieldInfoCollection.prototype, \"automaticFields\", {\n /**\n * Gets the `page number fields collection`.\n * @private\n */\n get: function () {\n return this.automaticFieldsInformation;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /// Adds the specified field info.\n /**\n * Add page number field into collection.\n * @private\n */\n PdfAutomaticFieldInfoCollection.prototype.add = function (fieldInfo) {\n return this.automaticFields.push(fieldInfo);\n };\n return PdfAutomaticFieldInfoCollection;\n}());\nexport { PdfAutomaticFieldInfoCollection };\n","/**\n * Represents a base class for all page graphics elements.\n */\nvar PdfGraphicsElement = /** @class */ (function () {\n // Constructors\n function PdfGraphicsElement() {\n //\n }\n /**\n * `Draws` the page number field.\n * @public\n */\n PdfGraphicsElement.prototype.drawHelper = function (graphics, x, y) {\n var bNeedSave = (x !== 0 || y !== 0);\n var gState = null;\n // Translate co-ordinates.\n if (bNeedSave) {\n // Save state.\n gState = graphics.save();\n graphics.translateTransform(x, y);\n }\n this.drawInternal(graphics);\n if (bNeedSave) {\n // Restore state.\n graphics.restore(gState);\n }\n };\n return PdfGraphicsElement;\n}());\nexport { PdfGraphicsElement };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfDocument } from './../pdf-document';\nimport { PdfGraphicsElement } from './../../graphics/figures/base/graphics-element';\nimport { PdfAutomaticFieldInfo } from './automatic-field-info';\n/**\n * Represents a fields which is calculated before the document saves.\n */\nvar PdfAutomaticField = /** @class */ (function (_super) {\n __extends(PdfAutomaticField, _super);\n // Constructors\n function PdfAutomaticField() {\n var _this = _super.call(this) || this;\n // Fields\n _this.internalBounds = new RectangleF(0, 0, 0, 0);\n _this.internalTemplateSize = new SizeF(0, 0);\n return _this;\n }\n Object.defineProperty(PdfAutomaticField.prototype, \"bounds\", {\n // Properties\n get: function () {\n return this.internalBounds;\n },\n set: function (value) {\n this.internalBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"size\", {\n get: function () {\n return new SizeF(this.bounds.width, this.bounds.height);\n },\n set: function (value) {\n this.bounds.width = value.width;\n this.bounds.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"location\", {\n get: function () {\n return new PointF(this.bounds.x, this.bounds.y);\n },\n set: function (value) {\n this.bounds.x = value.x;\n this.bounds.y = value.y;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"font\", {\n get: function () {\n return this.internalFont;\n },\n set: function (value) {\n this.internalFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"brush\", {\n get: function () {\n return this.internalBrush;\n },\n set: function (value) {\n this.internalBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"pen\", {\n get: function () {\n return this.internalPen;\n },\n set: function (value) {\n this.internalPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"stringFormat\", {\n get: function () {\n return this.internalStringFormat;\n },\n set: function (value) {\n this.internalStringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfAutomaticField.prototype.performDrawHelper = function (graphics, location, scalingX, scalingY) {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n var text = this.getValue(graphics);\n this.internalTemplateSize = this.getFont().measureString(text, this.size, this.stringFormat);\n }\n };\n PdfAutomaticField.prototype.draw = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n var location_1 = new PointF(0, 0);\n this.draw(arg1, location_1);\n }\n else if (arg2 instanceof PointF) {\n this.draw(arg1, arg2.x, arg2.y);\n }\n else {\n this.drawHelper(arg1, arg2, arg3);\n var info = new PdfAutomaticFieldInfo(this, new PointF(arg2, arg3));\n arg1.automaticFields.add(info);\n }\n };\n PdfAutomaticField.prototype.getSize = function () {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n return this.internalTemplateSize;\n }\n else {\n return this.size;\n }\n };\n PdfAutomaticField.prototype.drawInternal = function (graphics) {\n //\n };\n /* tslint:disable */\n PdfAutomaticField.prototype.getBrush = function () {\n return (typeof this.internalBrush === 'undefined' || this.internalBrush == null) ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.internalBrush;\n };\n PdfAutomaticField.prototype.getFont = function () {\n return (typeof this.internalFont === 'undefined' || this.internalFont == null) ? PdfDocument.defaultFont : this.internalFont;\n };\n /* tslint:enable */\n PdfAutomaticField.prototype.getPageFromGraphics = function (graphics) {\n if (typeof graphics.page !== 'undefined' && graphics.page !== null) {\n var page = graphics.page;\n return page;\n }\n else {\n var page = graphics.currentPage;\n return page;\n }\n };\n return PdfAutomaticField;\n}(PdfGraphicsElement));\nexport { PdfAutomaticField };\n","/**\n * PdfAutomaticFieldInfo.ts class for EJ2-PDF\n * @private\n */\nimport { PointF } from './../../drawing/pdf-drawing';\nimport { PdfAutomaticField } from './automatic-field';\n/**\n * Represents information about the automatic field.\n * @private\n */\nvar PdfAutomaticFieldInfo = /** @class */ (function () {\n function PdfAutomaticFieldInfo(field, location, scaleX, scaleY) {\n // Fields\n /**\n * Internal variable to store location of the field.\n * @private\n */\n this.pageNumberFieldLocation = new PointF();\n /**\n * Internal variable to store field.\n * @private\n */\n this.pageNumberField = null;\n /**\n * Internal variable to store x scaling factor.\n * @private\n */\n this.scaleX = 1;\n /**\n * Internal variable to store y scaling factor.\n * @private\n */\n this.scaleY = 1;\n if (typeof location === 'undefined' && field instanceof PdfAutomaticFieldInfo) {\n this.pageNumberField = field.field;\n this.pageNumberFieldLocation = field.location;\n this.scaleX = field.scalingX;\n this.scaleY = field.scalingY;\n }\n else if (typeof scaleX === 'undefined' && location instanceof PointF && field instanceof PdfAutomaticField) {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n }\n else {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n this.scaleX = scaleX;\n this.scaleY = scaleY;\n }\n }\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"location\", {\n /* tslint:enable */\n // Properties\n /**\n * Gets or sets the location.\n * @private\n */\n get: function () {\n return this.pageNumberFieldLocation;\n },\n set: function (value) {\n this.pageNumberFieldLocation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"field\", {\n /**\n * Gets or sets the field.\n * @private\n */\n get: function () {\n return this.pageNumberField;\n },\n set: function (value) {\n this.pageNumberField = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingX\", {\n /**\n * Gets or sets the scaling X factor.\n * @private\n */\n get: function () {\n return this.scaleX;\n },\n set: function (value) {\n this.scaleX = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingY\", {\n /**\n * Gets or sets the scaling Y factor.\n * @private\n */\n get: function () {\n return this.scaleY;\n },\n set: function (value) {\n this.scaleY = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAutomaticFieldInfo;\n}());\nexport { PdfAutomaticFieldInfo };\n","/**\n * ByteArray class\n * Used to keep information about image stream as byte array.\n * @private\n */\nvar ByteArray = /** @class */ (function () {\n /**\n * Initialize the new instance for `byte-array` class\n * @hidden\n * @private\n */\n function ByteArray(length) {\n /**\n * Current stream `position`.\n * @default 0\n * @private\n */\n this.mPosition = 0;\n this.buffer = new Uint8Array(length);\n this.dataView = new DataView(this.buffer.buffer);\n }\n Object.defineProperty(ByteArray.prototype, \"position\", {\n /**\n * Gets and Sets a current `position` of byte array.\n * @hidden\n * @private\n */\n get: function () {\n return this.mPosition;\n },\n set: function (value) {\n this.mPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Read` from current stream position.\n * @default 0\n * @hidden\n * @private\n */\n ByteArray.prototype.read = function (buffer, offset, count) {\n for (var index = offset; index < count; index++) {\n var position = this.position;\n buffer.buffer[index] = this.readByte(position);\n this.position++;\n }\n };\n /**\n * @hidden\n */\n ByteArray.prototype.getBuffer = function (index) {\n return this.buffer[index];\n };\n /**\n * @hidden\n */\n ByteArray.prototype.writeFromBase64String = function (base64) {\n var arr = this.encodedString(base64);\n this.buffer = arr;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n var dataUrlPrefix = 'data:';\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = keyStr.indexOf(input.charAt(i++));\n enc2 = keyStr.indexOf(input.charAt(i++));\n enc3 = keyStr.indexOf(input.charAt(i++));\n enc4 = keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n output[resultIndex++] = chr2;\n output[resultIndex++] = chr3;\n }\n return output;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.readByte = function (offset) {\n return (this.buffer[offset]);\n };\n Object.defineProperty(ByteArray.prototype, \"internalBuffer\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ByteArray.prototype, \"count\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer.byteLength;\n },\n enumerable: true,\n configurable: true\n });\n return ByteArray;\n}());\nexport { ByteArray };\n","/**\n * `PdfBoolean` class is used to perform boolean related primitive operations.\n * @private\n */\nvar PdfBoolean = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfBoolean` class.\n * @private\n */\n function PdfBoolean(value) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.currentPosition = -1;\n this.value = value;\n }\n Object.defineProperty(PdfBoolean.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.objectStatus;\n },\n set: function (value) {\n this.objectStatus = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.saving;\n },\n set: function (value) {\n this.saving = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index;\n },\n set: function (value) {\n this.index = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfBoolean.prototype.save = function (writer) {\n writer.write(this.boolToStr(this.value));\n };\n /**\n * Creates a `copy of PdfBoolean`.\n * @private\n */\n PdfBoolean.prototype.clone = function (crossTable) {\n var newNumber = new PdfBoolean(this.value);\n return newNumber;\n };\n // Implementation\n /**\n * Converts `boolean to string` - 0/1 'true'/'false'.\n * @private\n */\n PdfBoolean.prototype.boolToStr = function (value) {\n return value ? 'true' : 'false';\n };\n return PdfBoolean;\n}());\nexport { PdfBoolean };\n","/**\n * public Enum for `PdfLayoutType`.\n * @private\n */\nexport var PdfLayoutType;\n(function (PdfLayoutType) {\n /**\n * Specifies the type of `Paginate`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"Paginate\"] = 0] = \"Paginate\";\n /**\n * Specifies the type of `OnePage`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"OnePage\"] = 1] = \"OnePage\";\n})(PdfLayoutType || (PdfLayoutType = {}));\n/**\n * public Enum for `PdfLayoutBreakType`.\n * @private\n */\nexport var PdfLayoutBreakType;\n(function (PdfLayoutBreakType) {\n /**\n * Specifies the type of `FitPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitPage\"] = 0] = \"FitPage\";\n /**\n * Specifies the type of `FitElement`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitElement\"] = 1] = \"FitElement\";\n /**\n * Specifies the type of `FitColumnsToPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitColumnsToPage\"] = 2] = \"FitColumnsToPage\";\n})(PdfLayoutBreakType || (PdfLayoutBreakType = {}));\n","/**\n * Used to perform `convertion between pixels and points`.\n * @private\n */\nvar PdfUnitConverter = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `UnitConvertor` class with DPI value.\n * @private\n */\n function PdfUnitConverter(dpi) {\n this.updateProportionsHelper(dpi);\n }\n /**\n * `Converts` the value, from one graphics unit to another graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertUnits = function (value, from, to) {\n return this.convertFromPixels(this.convertToPixels(value, from), to);\n };\n /**\n * Converts the value `to pixel` from specified graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertToPixels = function (value, from) {\n var index = from;\n var result = (value * this.proportions[index]);\n return result;\n };\n /**\n * Converts value, to specified graphics unit `from Pixel`.\n * @private\n */\n PdfUnitConverter.prototype.convertFromPixels = function (value, to) {\n var index = to;\n var result = (value / this.proportions[index]);\n return result;\n };\n /**\n * `Update proportions` matrix according to Graphics settings.\n * @private\n */\n PdfUnitConverter.prototype.updateProportionsHelper = function (pixelPerInch) {\n this.proportions = [\n pixelPerInch / 2.54,\n pixelPerInch / 6.0,\n 1,\n pixelPerInch / 72.0,\n pixelPerInch,\n pixelPerInch / 300.0,\n pixelPerInch / 25.4 // Millimeter\n ];\n };\n //Fields\n /**\n * Indicates default `horizontal resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.horizontalResolution = 96;\n /**\n * Indicates default `vertical resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.verticalResolution = 96;\n return PdfUnitConverter;\n}());\nexport { PdfUnitConverter };\n","import { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfGraphicsUnit } from './../enum';\nimport { PdfUnitConverter } from './../unit-convertor';\n/**\n * `PdfImage` class represents the base class for images and provides functionality for the 'PdfBitmap' class.\n * @private\n */\nvar PdfImage = /** @class */ (function () {\n function PdfImage() {\n }\n Object.defineProperty(PdfImage.prototype, \"width\", {\n /**\n * Gets and Sets the `width` of an image.\n * @private\n */\n get: function () {\n return this.imageWidth;\n },\n set: function (value) {\n this.imageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"height\", {\n /**\n * Gets and Sets the `height` of an image.\n * @private\n */\n get: function () {\n return this.imageHeight;\n },\n set: function (value) {\n this.imageHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"size\", {\n /**\n * Gets or sets the size of the image.\n * @private\n */\n set: function (value) {\n this.width = value.width;\n this.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"physicalDimension\", {\n /**\n * Gets the `physical dimension` of an image.\n * @private\n */\n get: function () {\n this.imagePhysicalDimension = this.getPointSize(this.width, this.height, this.horizontalResolution, this.verticalResolution);\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"element\", {\n // /**\n // * Gets the `image stream as string`.\n // * @private\n // */\n // public static fromString(string : string) : PdfImage {\n // let image : PdfImage = new PdfBitmap(string);\n // return image;\n // }\n /**\n * Gets the `element` image stream.\n * @private\n */\n get: function () {\n return this.imageStream;\n },\n enumerable: true,\n configurable: true\n });\n PdfImage.prototype.getPointSize = function (width, height, horizontalResolution, verticalResolution) {\n if (typeof horizontalResolution === 'undefined') {\n var dpiX = PdfUnitConverter.horizontalResolution;\n var dpiY = PdfUnitConverter.verticalResolution;\n var size = this.getPointSize(width, height, dpiX, dpiY);\n return size;\n }\n else {\n var ucX = new PdfUnitConverter(horizontalResolution);\n var ucY = new PdfUnitConverter(verticalResolution);\n var ptWidth = ucX.convertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var ptHeight = ucY.convertUnits(height, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var size = new SizeF(ptWidth, ptHeight);\n return size;\n }\n };\n return PdfImage;\n}());\nexport { PdfImage };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfBitmap.ts class for EJ2-PDF\n */\nimport { ImageDecoder } from './../../graphics/images/image-decoder';\nimport { ByteArray } from './../../graphics/images/byte-array';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfImage } from './pdf-image';\n/**\n * The 'PdfBitmap' contains methods and properties to handle the Bitmap images.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfBitmap = /** @class */ (function (_super) {\n __extends(PdfBitmap, _super);\n /**\n * Create an instance for `PdfBitmap` class.\n * @param encodedString Base64 string of an image.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * //\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * //\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n function PdfBitmap(encodedString) {\n var _this = _super.call(this) || this;\n //Fields\n /**\n * Specifies the `status` of an image.\n * @default true.\n * @hidden\n * @private\n */\n _this.imageStatus = true;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n _this.loadImage(encodedString);\n return _this;\n }\n /**\n * `Load image`.\n * @hidden\n * @private\n */\n PdfBitmap.prototype.loadImage = function (encodedString) {\n var task = this.initializeAsync(encodedString);\n };\n /**\n * `Initialize` image parameters.\n * @private\n */\n PdfBitmap.prototype.initializeAsync = function (encodedString) {\n var byteArray = new ByteArray(encodedString.length);\n byteArray.writeFromBase64String(encodedString);\n this.decoder = new ImageDecoder(byteArray);\n this.height = this.decoder.height;\n this.width = this.decoder.width;\n // FrameCount = BitmapImageDecoder.FrameCount;\n this.bitsPerComponent = this.decoder.bitsPerComponent;\n };\n /**\n * `Saves` the image into stream.\n * @private\n */\n PdfBitmap.prototype.save = function () {\n this.imageStatus = true;\n this.imageStream = this.decoder.getImageDictionary();\n };\n return PdfBitmap;\n}(PdfImage));\nexport { PdfBitmap };\n","/**\n * TtfTableInfo.ts class for EJ2-PDF\n */\nvar TtfTableInfo = /** @class */ (function () {\n function TtfTableInfo() {\n }\n Object.defineProperty(TtfTableInfo.prototype, \"empty\", {\n //Properties\n /**\n * Gets a value indicating whether this table is empty.\n * @private\n */\n get: function () {\n var empty = (this.offset === this.length && this.length === this.checksum && this.checksum === 0);\n return empty;\n },\n enumerable: true,\n configurable: true\n });\n return TtfTableInfo;\n}());\nexport { TtfTableInfo };\n","var TtfNameTable = /** @class */ (function () {\n function TtfNameTable() {\n }\n return TtfNameTable;\n}());\nexport { TtfNameTable };\n","/**\n * TtfNameRecord.ts class for EJ2-PDF\n */\nvar TtfNameRecord = /** @class */ (function () {\n function TtfNameRecord() {\n }\n return TtfNameRecord;\n}());\nexport { TtfNameRecord };\n","/**\n * TtfHeadTable.ts class for EJ2-PDF\n */\nvar TtfHeadTable = /** @class */ (function () {\n function TtfHeadTable() {\n }\n return TtfHeadTable;\n}());\nexport { TtfHeadTable };\n","var TtfMetrics = /** @class */ (function () {\n function TtfMetrics() {\n }\n Object.defineProperty(TtfMetrics.prototype, \"isItalic\", {\n //Properties\n /**\n * Gets a value indicating whether this instance is italic.\n */\n get: function () {\n return ((this.macStyle & 2) !== 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfMetrics.prototype, \"isBold\", {\n /**\n * Gets a value indicating whether this instance is bold.\n */\n get: function () {\n return ((this.macStyle & 1) !== 0);\n },\n enumerable: true,\n configurable: true\n });\n return TtfMetrics;\n}());\nexport { TtfMetrics };\n","/**\n * TtfHorizontalHeaderTable.ts class for EJ2-PDF\n */\nvar TtfHorizontalHeaderTable = /** @class */ (function () {\n function TtfHorizontalHeaderTable() {\n }\n return TtfHorizontalHeaderTable;\n}());\nexport { TtfHorizontalHeaderTable };\n","/**\n * TtfOS2Table.ts class for EJ2-PDF\n * The OS/2 table consists of a set of metrics that are required by Windows and OS/2.\n */\nvar TtfOS2Table = /** @class */ (function () {\n function TtfOS2Table() {\n }\n return TtfOS2Table;\n}());\nexport { TtfOS2Table };\n","/**\n * TtfPostTable.ts class for EJ2-PDF\n */\nvar TtfPostTable = /** @class */ (function () {\n function TtfPostTable() {\n }\n return TtfPostTable;\n}());\nexport { TtfPostTable };\n","/**\n * TtfLongHorMetric.ts class for EJ2-PDF\n */\nvar TtfLongHorMetric = /** @class */ (function () {\n function TtfLongHorMetric() {\n }\n return TtfLongHorMetric;\n}());\nexport { TtfLongHorMetric };\n","/**\n * TtfCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfCmapSubTable = /** @class */ (function () {\n function TtfCmapSubTable() {\n }\n return TtfCmapSubTable;\n}());\nexport { TtfCmapSubTable };\n","/**\n * TtfCmapTable.ts class for EJ2-PDF\n */\nvar TtfCmapTable = /** @class */ (function () {\n function TtfCmapTable() {\n }\n return TtfCmapTable;\n}());\nexport { TtfCmapTable };\n","/**\n * TtfGlyphInfo.ts class for EJ2-PDF\n */\nvar TtfGlyphInfo = /** @class */ (function () {\n function TtfGlyphInfo() {\n }\n Object.defineProperty(TtfGlyphInfo.prototype, \"empty\", {\n //Properties\n /**\n * Gets a value indicating whether this TtfGlyphInfo is empty.\n */\n get: function () {\n var empty = (this.index === this.width && this.width === this.charCode && this.charCode === 0);\n return empty;\n },\n enumerable: true,\n configurable: true\n });\n //IComparable implementation\n /**\n * Compares two WidthDescriptor objects.\n */\n TtfGlyphInfo.prototype.compareTo = function (obj) {\n var glyph = obj;\n return this.index - glyph.index;\n };\n return TtfGlyphInfo;\n}());\nexport { TtfGlyphInfo };\n","/**\n * TtfLocaTable.ts class for EJ2-PDF\n */\nvar TtfLocaTable = /** @class */ (function () {\n function TtfLocaTable() {\n }\n return TtfLocaTable;\n}());\nexport { TtfLocaTable };\n","/**\n * TtfAppleCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfAppleCmapSubTable = /** @class */ (function () {\n function TtfAppleCmapSubTable() {\n }\n return TtfAppleCmapSubTable;\n}());\nexport { TtfAppleCmapSubTable };\n","/**\n * TtfMicrosoftCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfMicrosoftCmapSubTable = /** @class */ (function () {\n function TtfMicrosoftCmapSubTable() {\n }\n return TtfMicrosoftCmapSubTable;\n}());\nexport { TtfMicrosoftCmapSubTable };\n","/**\n * TtfTrimmedCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfTrimmedCmapSubTable = /** @class */ (function () {\n function TtfTrimmedCmapSubTable() {\n }\n return TtfTrimmedCmapSubTable;\n}());\nexport { TtfTrimmedCmapSubTable };\n","/**\n * TtfLocaTable.ts class for EJ2-PDF\n */\nvar TtfGlyphHeader = /** @class */ (function () {\n function TtfGlyphHeader() {\n }\n return TtfGlyphHeader;\n}());\nexport { TtfGlyphHeader };\n","/**\n * Writes data in BigEndian order.\n */\nvar BigEndianWriter = /** @class */ (function () {\n //Constructors\n /**\n * Creates a new writer.\n */\n function BigEndianWriter(capacity) {\n //Constants\n /**\n * Size of Int32 type.\n */\n this.int32Size = 4;\n /**\n * Size of Int16 type.\n */\n this.int16Size = 2;\n /**\n * Size of long type.\n */\n this.int64Size = 8;\n this.bufferLength = capacity;\n this.buffer = [];\n }\n Object.defineProperty(BigEndianWriter.prototype, \"data\", {\n //Properties\n /**\n * Gets data written to the writer.\n */\n get: function () {\n if (this.buffer.length < this.bufferLength) {\n var length_1 = this.bufferLength - this.buffer.length;\n for (var i = 0; i < length_1; i++) {\n this.buffer.push(0);\n }\n }\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BigEndianWriter.prototype, \"position\", {\n /// \n /// Gets position of the internal buffer.\n /// \n get: function () {\n if (this.internalPosition === undefined || this.internalPosition === null) {\n this.internalPosition = 0;\n }\n return this.internalPosition;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Writes short value.\n */\n BigEndianWriter.prototype.writeShort = function (value) {\n var bytes = [((value & 0x0000ff00) >> 8), value & 0x000000ff];\n this.flush(bytes);\n };\n /**\n * Writes int value.\n */\n BigEndianWriter.prototype.writeInt = function (value) {\n var i1 = (value & 0xff000000) >> 24;\n i1 = i1 < 0 ? 256 + i1 : i1;\n var i2 = (value & 0x00ff0000) >> 16;\n i2 = i2 < 0 ? 256 + i2 : i2;\n var i3 = (value & 0x0000ff00) >> 8;\n i3 = i3 < 0 ? 256 + i3 : i3;\n var i4 = value & 0x000000ff;\n i4 = i4 < 0 ? 256 + i4 : i4;\n var bytes = [(value & 0xff000000) >> 24, (value & 0x00ff0000) >> 16, (value & 0x0000ff00) >> 8, value & 0x000000ff];\n this.flush(bytes);\n };\n /**\n * Writes u int value.\n */\n BigEndianWriter.prototype.writeUInt = function (value) {\n var buff = [(value & 0xff000000) >> 24, (value & 0x00ff0000) >> 16, (value & 0x0000ff00) >> 8, value & 0x000000ff];\n this.flush(buff);\n };\n /**\n * Writes string value.\n */\n BigEndianWriter.prototype.writeString = function (value) {\n if (value == null) {\n throw new Error('Argument Null Exception : value');\n }\n var bytes = [];\n for (var i = 0; i < value.length; i++) {\n bytes.push(value.charCodeAt(i));\n }\n this.flush(bytes);\n };\n /**\n * Writes byte[] value.\n */\n BigEndianWriter.prototype.writeBytes = function (value) {\n this.flush(value);\n };\n // //Implementation\n BigEndianWriter.prototype.flush = function (buff) {\n if (buff === null) {\n throw new Error('Argument Null Exception : buff');\n }\n var result = [];\n for (var i = 0; i < this.position; i++) {\n result.push(this.buffer[i]);\n }\n for (var i = 0; i < buff.length; i++) {\n result.push(buff[i]);\n }\n for (var i = this.position; i < this.buffer.length; i++) {\n result.push(this.buffer[i]);\n }\n this.buffer = result;\n this.internalPosition += buff.length;\n };\n return BigEndianWriter;\n}());\nexport { BigEndianWriter };\n","/**\n * TtfReader.ts class for EJ2-PDF\n */\nimport { TtfTableInfo } from './ttf-table-info';\nimport { Dictionary } from './../../collections/dictionary';\nimport { TtfNameTable } from './ttf-name-table';\nimport { TtfNameRecord } from './ttf-name-record';\nimport { TtfHeadTable } from './ttf-head-table';\nimport { TtfMetrics } from './ttf-metrics';\nimport { TtfHorizontalHeaderTable } from './ttf-horizontal-header-table';\nimport { TtfOS2Table } from './ttf-OS2-Table';\nimport { TtfPostTable } from './ttf-post-table';\nimport { TtfLongHorMetric } from './ttf-long-hor-metric';\nimport { TtfCmapSubTable } from './ttf-cmap-sub-table';\nimport { TtfCmapTable } from './ttf-cmap-table';\nimport { TtfGlyphInfo } from './ttf-glyph-info';\nimport { TtfLocaTable } from './ttf-loca-table';\nimport { TtfAppleCmapSubTable } from './ttf-apple-cmap-sub-table';\nimport { TtfMicrosoftCmapSubTable } from './ttf-microsoft-cmap-sub-table';\nimport { TtfTrimmedCmapSubTable } from './ttf-trimmed-cmap-sub-table';\nimport { TtfGlyphHeader } from './ttf-glyph-header';\nimport { Rectangle } from './../../drawing/pdf-drawing';\nimport { StringTokenizer } from './string-tokenizer';\nimport { TtfCmapFormat, TtfCmapEncoding, TtfPlatformID } from './enum';\nimport { TtfMicrosoftEncodingID, TtfMacintoshEncodingID, TtfCompositeGlyphFlags } from './enum';\nimport { BigEndianWriter } from './../../input-output/big-endian-writer';\nvar TtfReader = /** @class */ (function () {\n //Constructors\n function TtfReader(fontData) {\n this.int32Size = 4;\n this.isTtcFont = false;\n this.isMacTtf = false;\n this.metricsName = '';\n this.isMacTTF = false;\n this.missedGlyphs = 0;\n this.tableNames = ['cvt ', 'fpgm', 'glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp', 'prep'];\n this.entrySelectors = [0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4];\n this.fontData = fontData;\n this.initialize();\n }\n Object.defineProperty(TtfReader.prototype, \"macintosh\", {\n //Properties\n /**\n * Gets glyphs for Macintosh or Symbol fonts (char - key, glyph - value).\n */\n get: function () {\n if (this.macintoshDictionary === null || this.macintoshDictionary === undefined) {\n this.macintoshDictionary = new Dictionary();\n }\n return this.macintoshDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"microsoft\", {\n /**\n * Gets glyphs for Microsoft or Symbol fonts (char - key, glyph - value).\n */\n get: function () {\n if (this.microsoftDictionary === null || this.microsoftDictionary === undefined) {\n this.microsoftDictionary = new Dictionary();\n }\n return this.microsoftDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"macintoshGlyphs\", {\n /**\n * Gets glyphs for Macintosh or Symbol fonts (glyph index - key, glyph - value).\n */\n get: function () {\n if (this.internalMacintoshGlyphs === null || this.internalMacintoshGlyphs === undefined) {\n this.internalMacintoshGlyphs = new Dictionary();\n }\n return this.internalMacintoshGlyphs;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"microsoftGlyphs\", {\n /**\n * Gets glyphs for Microsoft Unicode fonts (glyph index - key, glyph - value).\n */\n get: function () {\n if (this.internalMicrosoftGlyphs === null || this.internalMicrosoftGlyphs === undefined) {\n this.internalMicrosoftGlyphs = new Dictionary();\n }\n return this.internalMicrosoftGlyphs;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n TtfReader.prototype.initialize = function () {\n if (this.metrics === undefined) {\n this.metrics = new TtfMetrics();\n }\n this.readFontDictionary();\n var nameTable = this.readNameTable();\n var headTable = this.readHeadTable();\n this.initializeFontName(nameTable);\n this.metrics.macStyle = headTable.macStyle;\n };\n TtfReader.prototype.readFontDictionary = function () {\n this.offset = 0;\n var version = this.checkPreambula();\n //this.offset += 4;\n var numTables = this.readInt16(this.offset);\n var searchRange = this.readInt16(this.offset);\n var entrySelector = this.readInt16(this.offset);\n var rangeShift = this.readInt16(this.offset);\n if (this.tableDirectory === undefined) {\n this.tableDirectory = new Dictionary();\n }\n for (var i = 0; i < numTables; ++i) {\n var table = new TtfTableInfo();\n var tableKey = this.readString(this.int32Size);\n table.checksum = this.readInt32(this.offset);\n table.offset = this.readInt32(this.offset);\n table.length = this.readInt32(this.offset);\n this.tableDirectory.setValue(tableKey, table);\n }\n this.lowestPosition = this.offset;\n if (!this.isTtcFont) {\n this.fixOffsets();\n }\n };\n TtfReader.prototype.fixOffsets = function () {\n var minOffset = Number.MAX_VALUE;\n // Search for a smallest offset and compare it with the lowest position found.\n var tableKeys = this.tableDirectory.keys();\n for (var i = 0; i < tableKeys.length; i++) {\n var value = this.tableDirectory.getValue(tableKeys[i]);\n var offset = value.offset;\n if (minOffset > offset) {\n minOffset = offset;\n if (minOffset <= this.lowestPosition) {\n break;\n }\n }\n }\n var shift = minOffset - this.lowestPosition;\n if (shift !== 0) {\n var table = new Dictionary();\n for (var i = 0; i < tableKeys.length; i++) {\n var value = this.tableDirectory.getValue(tableKeys[i]);\n value.offset -= shift;\n table.setValue(tableKeys[i], value);\n }\n this.tableDirectory = table;\n }\n };\n TtfReader.prototype.checkPreambula = function () {\n var version = this.readInt32(this.offset);\n this.isMacTtf = (version === 0x74727565) ? true : false;\n if (version !== 0x10000 && version !== 0x74727565 && version !== 0x4f54544f) {\n this.isTtcFont = true;\n this.offset = 0;\n var fontTag = this.readString(4);\n if (fontTag !== 'ttcf') {\n throw new Error('Can not read TTF font data');\n }\n //skip 4\n this.offset += 4;\n var ttcIdentificationNumber = this.readInt32(this.offset);\n if (ttcIdentificationNumber < 0) {\n throw new Error('Can not read TTF font data');\n }\n this.offset = this.readInt32(this.offset);\n version = this.readInt32(this.offset);\n }\n return version;\n };\n TtfReader.prototype.readNameTable = function () {\n var tableInfo = this.getTable('name');\n this.offset = tableInfo.offset;\n var table = new TtfNameTable();\n table.formatSelector = this.readUInt16(this.offset);\n table.recordsCount = this.readUInt16(this.offset);\n table.offset = this.readUInt16(this.offset);\n table.nameRecords = [];\n var recordSize = 12;\n var position = this.offset;\n for (var i = 0; i < table.recordsCount; i++) {\n this.offset = position;\n var record = new TtfNameRecord();\n record.platformID = this.readUInt16(this.offset);\n record.encodingID = this.readUInt16(this.offset);\n record.languageID = this.readUInt16(this.offset);\n record.nameID = this.readUInt16(this.offset);\n record.length = this.readUInt16(this.offset);\n record.offset = this.readUInt16(this.offset);\n this.offset = tableInfo.offset + table.offset + record.offset;\n var unicode = (record.platformID === 0 || record.platformID === 3);\n record.name = this.readString(record.length, unicode);\n table.nameRecords[i] = record;\n position += recordSize;\n }\n return table;\n };\n TtfReader.prototype.readHeadTable = function () {\n var tableInfo = this.getTable('head');\n this.offset = tableInfo.offset;\n var table = new TtfHeadTable();\n table.version = this.readFixed(this.offset);\n table.fontRevision = this.readFixed(this.offset);\n table.checkSumAdjustment = this.readUInt32(this.offset);\n table.magicNumber = this.readUInt32(this.offset);\n table.flags = this.readUInt16(this.offset);\n table.unitsPerEm = this.readUInt16(this.offset);\n table.created = this.readInt64(this.offset);\n table.modified = this.readInt64(this.offset);\n table.xMin = this.readInt16(this.offset);\n table.yMin = this.readInt16(this.offset);\n table.xMax = this.readInt16(this.offset);\n table.yMax = this.readInt16(this.offset);\n table.macStyle = this.readUInt16(this.offset);\n table.lowestReadableSize = this.readUInt16(this.offset);\n table.fontDirectionHint = this.readInt16(this.offset);\n table.indexToLocalFormat = this.readInt16(this.offset);\n table.glyphDataFormat = this.readInt16(this.offset);\n return table;\n };\n TtfReader.prototype.readHorizontalHeaderTable = function () {\n var tableInfo = this.getTable('hhea');\n this.offset = tableInfo.offset;\n var table = new TtfHorizontalHeaderTable();\n table.version = this.readFixed(this.offset);\n table.ascender = this.readInt16(this.offset);\n table.descender = this.readInt16(this.offset);\n table.lineGap = this.readInt16(this.offset);\n table.advanceWidthMax = this.readUInt16(this.offset);\n table.minLeftSideBearing = this.readInt16(this.offset);\n table.minRightSideBearing = this.readInt16(this.offset);\n table.xMaxExtent = this.readInt16(this.offset);\n table.caretSlopeRise = this.readInt16(this.offset);\n table.caretSlopeRun = this.readInt16(this.offset);\n //skip 2 * 5\n this.offset += 10;\n table.metricDataFormat = this.readInt16(this.offset);\n table.numberOfHMetrics = this.readUInt16(this.offset);\n return table;\n };\n TtfReader.prototype.readOS2Table = function () {\n var tableInfo = this.getTable('OS/2');\n this.offset = tableInfo.offset;\n var table = new TtfOS2Table();\n table.version = this.readUInt16(this.offset);\n table.xAvgCharWidth = this.readInt16(this.offset);\n table.usWeightClass = this.readUInt16(this.offset);\n table.usWidthClass = this.readUInt16(this.offset);\n table.fsType = this.readInt16(this.offset);\n table.ySubscriptXSize = this.readInt16(this.offset);\n table.ySubscriptYSize = this.readInt16(this.offset);\n table.ySubscriptXOffset = this.readInt16(this.offset);\n table.ySubscriptYOffset = this.readInt16(this.offset);\n table.ySuperscriptXSize = this.readInt16(this.offset);\n table.ySuperscriptYSize = this.readInt16(this.offset);\n table.ySuperscriptXOffset = this.readInt16(this.offset);\n table.ySuperscriptYOffset = this.readInt16(this.offset);\n table.yStrikeoutSize = this.readInt16(this.offset);\n table.yStrikeoutPosition = this.readInt16(this.offset);\n table.sFamilyClass = this.readInt16(this.offset);\n table.panose = this.readBytes(10);\n table.ulUnicodeRange1 = this.readUInt32(this.offset);\n table.ulUnicodeRange2 = this.readUInt32(this.offset);\n table.ulUnicodeRange3 = this.readUInt32(this.offset);\n table.ulUnicodeRange4 = this.readUInt32(this.offset);\n table.vendorIdentifier = this.readBytes(4);\n table.fsSelection = this.readUInt16(this.offset);\n table.usFirstCharIndex = this.readUInt16(this.offset);\n table.usLastCharIndex = this.readUInt16(this.offset);\n table.sTypoAscender = this.readInt16(this.offset);\n table.sTypoDescender = this.readInt16(this.offset);\n table.sTypoLineGap = this.readInt16(this.offset);\n table.usWinAscent = this.readUInt16(this.offset);\n table.usWinDescent = this.readUInt16(this.offset);\n table.ulCodePageRange1 = this.readUInt32(this.offset);\n table.ulCodePageRange2 = this.readUInt32(this.offset);\n if (table.version > 1) {\n table.sxHeight = this.readInt16(this.offset);\n table.sCapHeight = this.readInt16(this.offset);\n table.usDefaultChar = this.readUInt16(this.offset);\n table.usBreakChar = this.readUInt16(this.offset);\n table.usMaxContext = this.readUInt16(this.offset);\n }\n else {\n table.sxHeight = 0;\n table.sCapHeight = 0;\n table.usDefaultChar = 0;\n table.usBreakChar = 0;\n table.usMaxContext = 0;\n }\n return table;\n };\n TtfReader.prototype.readPostTable = function () {\n var tableInfo = this.getTable('post');\n this.offset = tableInfo.offset;\n var table = new TtfPostTable();\n table.formatType = this.readFixed(this.offset);\n table.italicAngle = this.readFixed(this.offset);\n table.underlinePosition = this.readInt16(this.offset);\n table.underlineThickness = this.readInt16(this.offset);\n table.isFixedPitch = this.readUInt32(this.offset);\n table.minType42 = this.readUInt32(this.offset);\n table.maxType42 = this.readUInt32(this.offset);\n table.minType1 = this.readUInt32(this.offset);\n table.maxType1 = this.readUInt32(this.offset);\n return table;\n };\n /**\n * Reads Width of the glyphs.\n */\n TtfReader.prototype.readWidthTable = function (glyphCount, unitsPerEm) {\n var tableInfo = this.getTable('hmtx');\n this.offset = tableInfo.offset;\n var width = [];\n for (var i = 0; i < glyphCount; i++) {\n var glyph = new TtfLongHorMetric();\n glyph.advanceWidth = this.readUInt16(this.offset);\n glyph.lsb = this.readInt16(this.offset);\n var glyphWidth = glyph.advanceWidth * 1000 / unitsPerEm;\n width.push(Math.floor(glyphWidth));\n }\n return width;\n };\n /**\n * Reads the cmap table.\n */\n TtfReader.prototype.readCmapTable = function () {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset;\n var table = new TtfCmapTable();\n table.version = this.readUInt16(this.offset);\n table.tablesCount = this.readUInt16(this.offset);\n var position = this.offset;\n var subTables = [];\n for (var i = 0; i < table.tablesCount; i++) {\n this.offset = position;\n var subTable = new TtfCmapSubTable();\n subTable.platformID = this.readUInt16(this.offset);\n subTable.encodingID = this.readUInt16(this.offset);\n subTable.offset = this.readUInt32(this.offset);\n position = this.offset;\n this.readCmapSubTable(subTable);\n subTables[i] = subTable;\n }\n return subTables;\n };\n /**\n * Reads the cmap sub table.\n */\n TtfReader.prototype.readCmapSubTable = function (subTable) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var format = this.readUInt16(this.offset);\n var encoding = this.getCmapEncoding(subTable.platformID, subTable.encodingID);\n var platform = (encoding === TtfCmapEncoding.Macintosh) ? TtfPlatformID.Macintosh : TtfPlatformID.Microsoft;\n if (encoding !== TtfCmapEncoding.Unknown) {\n switch (format) {\n case TtfCmapFormat.Apple:\n this.readAppleCmapTable(subTable, encoding);\n break;\n case TtfCmapFormat.Microsoft:\n this.readMicrosoftCmapTable(subTable, encoding);\n break;\n case TtfCmapFormat.Trimmed:\n this.readTrimmedCmapTable(subTable, encoding);\n break;\n }\n }\n };\n /**\n * Reads Symbol cmap table.\n */\n TtfReader.prototype.readAppleCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var table = new TtfAppleCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n if (this.maxMacIndex === null || this.maxMacIndex === undefined) {\n this.maxMacIndex = 0;\n }\n for (var i = 0; i < 256; ++i) {\n var glyphInfo = new TtfGlyphInfo();\n glyphInfo.index = this.readByte(this.offset);\n glyphInfo.width = this.getWidth(glyphInfo.index);\n glyphInfo.charCode = i;\n this.macintosh.setValue(i, glyphInfo);\n this.addGlyph(glyphInfo, encoding);\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n this.maxMacIndex = Math.max(i, this.maxMacIndex);\n }\n };\n /**\n * Reads Symbol cmap table.\n */\n TtfReader.prototype.readMicrosoftCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var collection = (encoding === TtfCmapEncoding.Unicode) ? this.microsoft : this.macintosh;\n var table = new TtfMicrosoftCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n table.segCountX2 = this.readUInt16(this.offset);\n table.searchRange = this.readUInt16(this.offset);\n table.entrySelector = this.readUInt16(this.offset);\n table.rangeShift = this.readUInt16(this.offset);\n var segCount = table.segCountX2 / 2;\n table.endCount = this.readUshortArray(segCount);\n table.reservedPad = this.readUInt16(this.offset);\n table.startCount = this.readUshortArray(segCount);\n table.idDelta = this.readUshortArray(segCount);\n table.idRangeOffset = this.readUshortArray(segCount);\n var length = (table.length / 2 - 8) - (segCount * 4);\n table.glyphID = this.readUshortArray(length);\n // Process glyphIdArray array.\n var codeOffset = 0;\n var index = 0;\n for (var j = 0; j < segCount; j++) {\n for (var k = table.startCount[j]; k <= table.endCount[j] && k !== 65535; k++) {\n if (table.idRangeOffset[j] === 0) {\n codeOffset = (k + table.idDelta[j]) & 65535;\n }\n else {\n index = j + table.idRangeOffset[j] / 2 - segCount + k - table.startCount[j];\n if (index >= table.glyphID.length) {\n continue;\n }\n codeOffset = (table.glyphID[index] + table.idDelta[j]) & 65535;\n }\n var glyph = new TtfGlyphInfo();\n glyph.index = codeOffset;\n glyph.width = this.getWidth(glyph.index);\n var id = (encoding === TtfCmapEncoding.Symbol) ? ((k & 0xff00) === 0xf000 ? k & 0xff : k) : k;\n glyph.charCode = id;\n collection.setValue(id, glyph);\n this.addGlyph(glyph, encoding);\n }\n }\n };\n /**\n * Reads Trimed cmap table.\n */\n TtfReader.prototype.readTrimmedCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var table = new TtfTrimmedCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n table.firstCode = this.readUInt16(this.offset);\n table.entryCount = this.readUInt16(this.offset);\n for (var i = 0; i < table.entryCount; ++i) {\n var glyphInfo = new TtfGlyphInfo();\n glyphInfo.index = this.readUInt16(this.offset);\n glyphInfo.width = this.getWidth(glyphInfo.index);\n glyphInfo.charCode = i + table.firstCode;\n this.macintosh.setValue(i, glyphInfo);\n this.addGlyph(glyphInfo, encoding);\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n this.maxMacIndex = Math.max(i, this.maxMacIndex);\n }\n };\n TtfReader.prototype.initializeFontName = function (nameTable) {\n for (var i = 0; i < nameTable.recordsCount; i++) {\n var record = nameTable.nameRecords[i];\n if (record.nameID === 1) {\n //font family\n this.metrics.fontFamily = record.name;\n }\n else if (record.nameID === 6) {\n //post script name\n this.metrics.postScriptName = record.name;\n }\n /* tslint:disable */\n if (this.metrics.fontFamily !== null && this.metrics.fontFamily !== undefined && this.metrics.postScriptName !== null && this.metrics.postScriptName !== undefined) {\n break;\n }\n /* tslint:disable */\n }\n };\n TtfReader.prototype.getTable = function (name) {\n // if (name === null) {\n // throw new Error('Argument Null Exception : name');\n // }\n var table = new TtfTableInfo();\n var obj;\n if (this.tableDirectory.containsKey(name)) {\n obj = this.tableDirectory.getValue(name);\n }\n if (obj !== null && obj !== undefined) {\n table = obj;\n }\n return table;\n };\n /**\n * Returns width of the glyph.\n */\n TtfReader.prototype.getWidth = function (glyphCode) {\n glyphCode = (glyphCode < this.width.length) ? glyphCode : this.width.length - 1;\n return this.width[glyphCode];\n };\n /**\n * Gets CMAP encoding based on platform ID and encoding ID.\n */\n /* tslint:disable */\n TtfReader.prototype.getCmapEncoding = function (platformID, encodingID) {\n var format = TtfCmapEncoding.Unknown;\n if (platformID == TtfPlatformID.Microsoft && encodingID == TtfMicrosoftEncodingID.Undefined) {\n // When building a symbol font for Windows,\n // the platform ID should be 3 and the encoding ID should be 0.\n format = TtfCmapEncoding.Symbol;\n }\n else if (platformID == TtfPlatformID.Microsoft && encodingID == TtfMicrosoftEncodingID.Unicode) {\n // When building a Unicode font for Windows,\n // the platform ID should be 3 and the encoding ID should be 1.\n format = TtfCmapEncoding.Unicode;\n }\n else if (platformID == TtfPlatformID.Macintosh && encodingID == TtfMacintoshEncodingID.Roman) {\n // When building a font that will be used on the Macintosh,\n // the platform ID should be 1 and the encoding ID should be 0.\n format = TtfCmapEncoding.Macintosh;\n }\n return format;\n };\n /* tslint:enable */\n /**\n * Adds glyph to the collection.\n */\n TtfReader.prototype.addGlyph = function (glyph, encoding) {\n var collection = null;\n switch (encoding) {\n case TtfCmapEncoding.Unicode:\n collection = this.microsoftGlyphs;\n break;\n case TtfCmapEncoding.Macintosh:\n case TtfCmapEncoding.Symbol:\n collection = this.macintoshGlyphs;\n break;\n }\n collection.setValue(glyph.index, glyph);\n };\n /**\n * Initializes metrics.\n */\n /* tslint:disable */\n TtfReader.prototype.initializeMetrics = function (nameTable, headTable, horizontalHeadTable, os2Table, postTable, cmapTables) {\n /* tslint:enable */\n // if (cmapTables === null) {\n // throw new Error('ArgumentNullException : cmapTables');\n // }\n this.initializeFontName(nameTable);\n // Get font encoding.\n var bSymbol = false;\n for (var i = 0; i < cmapTables.length; i++) {\n var subTable = cmapTables[i];\n var encoding = this.getCmapEncoding(subTable.platformID, subTable.encodingID);\n if (encoding === TtfCmapEncoding.Symbol) {\n bSymbol = true;\n break;\n }\n }\n this.metrics.isSymbol = bSymbol;\n this.metrics.macStyle = headTable.macStyle;\n this.metrics.isFixedPitch = (postTable.isFixedPitch !== 0);\n this.metrics.italicAngle = postTable.italicAngle;\n var factor = 1000 / headTable.unitsPerEm;\n this.metrics.winAscent = os2Table.sTypoAscender * factor;\n this.metrics.macAscent = horizontalHeadTable.ascender * factor;\n //m_metrics.MacAscent = os2Table.UsWinAscent * factor;\n // NOTE: This is stange workaround. The value is good if os2Table.SCapHeight != 0, otherwise it should be properly computed.\n this.metrics.capHeight = (os2Table.sCapHeight !== 0) ? os2Table.sCapHeight : 0.7 * headTable.unitsPerEm * factor;\n this.metrics.winDescent = os2Table.sTypoDescender * factor;\n this.metrics.macDescent = horizontalHeadTable.descender * factor;\n //m_metrics.MacDescent = -os2Table.UsWinDescent * factor;\n this.metrics.leading = (os2Table.sTypoAscender - os2Table.sTypoDescender + os2Table.sTypoLineGap) * factor;\n this.metrics.lineGap = Math.ceil(horizontalHeadTable.lineGap * factor);\n var left = headTable.xMin * factor;\n var top = Math.ceil(this.metrics.macAscent + this.metrics.lineGap);\n var right = headTable.xMax * factor;\n var bottom = this.metrics.macDescent;\n this.metrics.fontBox = new Rectangle(left, top, right, bottom);\n // NOTE: Strange!\n this.metrics.stemV = 80;\n this.metrics.widthTable = this.updateWidth();\n this.metrics.contains = this.tableDirectory.containsKey('CFF');\n this.metrics.subScriptSizeFactor = headTable.unitsPerEm / os2Table.ySubscriptYSize;\n this.metrics.superscriptSizeFactor = headTable.unitsPerEm / os2Table.ySuperscriptYSize;\n };\n /**\n * Updates chars structure which is used in the case of ansi encoding (256 bytes).\n */\n TtfReader.prototype.updateWidth = function () {\n var count = 256;\n var bytes = [];\n if (this.metrics.isSymbol) {\n for (var i = 0; i < count; i++) {\n var glyphInfo = this.getGlyph(String.fromCharCode(i));\n bytes[i] = (glyphInfo.empty) ? 0 : glyphInfo.width;\n }\n }\n else {\n var byteToProcess = [];\n var unknown = '?';\n var space = String.fromCharCode(32);\n for (var i = 0; i < count; i++) {\n byteToProcess[0] = i;\n var text = this.getString(byteToProcess, 0, byteToProcess.length);\n var ch = (text.length > 0) ? text[0] : unknown;\n var glyphInfo = this.getGlyph(ch);\n if (!glyphInfo.empty) {\n bytes[i] = glyphInfo.width;\n }\n else {\n glyphInfo = this.getGlyph(space);\n bytes[i] = (glyphInfo.empty) ? 0 : glyphInfo.width;\n }\n }\n }\n return bytes;\n };\n /**\n * Returns default glyph.\n */\n TtfReader.prototype.getDefaultGlyph = function () {\n var glyph = this.getGlyph(StringTokenizer.whiteSpace);\n return glyph;\n };\n /**\n * Reads unicode string from byte array.\n */\n TtfReader.prototype.getString = function (byteToProcess, start, length) {\n var result = '';\n for (var index = 0; index < length; index++) {\n result += String.fromCharCode(byteToProcess[index + start]);\n }\n return result;\n };\n /**\n * Reads loca table.\n */\n TtfReader.prototype.readLocaTable = function (bShort) {\n var tableInfo = this.getTable('loca');\n this.offset = tableInfo.offset;\n var table = new TtfLocaTable();\n var buffer = null;\n if (bShort) {\n var len = tableInfo.length / 2;\n buffer = [];\n for (var i = 0; i < len; i++) {\n buffer[i] = this.readUInt16(this.offset) * 2;\n }\n }\n else {\n var len = tableInfo.length / 4;\n buffer = [];\n for (var i = 0; i < len; i++) {\n buffer[i] = this.readUInt32(this.offset);\n }\n }\n table.offsets = buffer;\n return table;\n };\n /**\n * Updates hash table of used glyphs.\n */\n TtfReader.prototype.updateGlyphChars = function (glyphChars, locaTable) {\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n // Add zero key.\n if (!glyphChars.containsKey(0)) {\n glyphChars.setValue(0, 0);\n }\n var clone = new Dictionary();\n var glyphCharKeys = glyphChars.keys();\n for (var i = 0; i < glyphCharKeys.length; i++) {\n clone.setValue(glyphCharKeys[i], glyphChars.getValue(glyphCharKeys[i]));\n }\n for (var i = 0; i < glyphCharKeys.length; i++) {\n var nextKey = glyphCharKeys[i];\n this.processCompositeGlyph(glyphChars, nextKey, locaTable);\n }\n };\n /**\n * Checks if glyph is composite or not.\n */\n TtfReader.prototype.processCompositeGlyph = function (glyphChars, glyph, locaTable) {\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n // Is in range.\n if (glyph < locaTable.offsets.length - 1) {\n var glyphOffset = locaTable.offsets[glyph];\n if (glyphOffset !== locaTable.offsets[glyph + 1]) {\n var tableInfo = this.getTable('glyf');\n this.offset = tableInfo.offset + glyphOffset;\n var glyphHeader = new TtfGlyphHeader();\n glyphHeader.numberOfContours = this.readInt16(this.offset);\n glyphHeader.xMin = this.readInt16(this.offset);\n glyphHeader.yMin = this.readInt16(this.offset);\n glyphHeader.xMax = this.readInt16(this.offset);\n glyphHeader.yMax = this.readInt16(this.offset);\n // Glyph is composite.\n if (glyphHeader.numberOfContours < 0) {\n var skipBytes = 0;\n var entry = true;\n while (entry) {\n var flags = this.readUInt16(this.offset);\n var glyphIndex = this.readUInt16(this.offset);\n if (!glyphChars.containsKey(glyphIndex)) {\n glyphChars.setValue(glyphIndex, 0);\n }\n if ((flags & TtfCompositeGlyphFlags.MoreComponents) === 0) {\n break;\n }\n skipBytes = ((flags & TtfCompositeGlyphFlags.Arg1And2AreWords) !== 0) ? 4 : 2;\n if ((flags & TtfCompositeGlyphFlags.WeHaveScale) !== 0) {\n skipBytes += 2;\n }\n else if ((flags & TtfCompositeGlyphFlags.WeHaveAnXyScale) !== 0) {\n skipBytes += 4;\n }\n else if ((flags & TtfCompositeGlyphFlags.WeHaveTwoByTwo) !== 0) {\n skipBytes += 2 * 4;\n }\n this.offset += skipBytes;\n }\n }\n }\n }\n };\n /**\n * Creates new glyph tables based on chars that are used for output.\n */\n /* tslint:disable */\n TtfReader.prototype.generateGlyphTable = function (glyphChars, locaTable, newLocaTable, newGlyphTable) {\n /* tslint:enable */\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n newLocaTable = [];\n // Sorting used glyphs keys.\n var activeGlyphs = glyphChars.keys();\n activeGlyphs.sort(function (a, b) { return a - b; });\n var glyphSize = 0;\n for (var i = 0; i < activeGlyphs.length; i++) {\n var glyphIndex = activeGlyphs[i];\n if (locaTable.offsets.length > 0) {\n glyphSize += locaTable.offsets[glyphIndex + 1] - locaTable.offsets[glyphIndex];\n }\n }\n var glyphSizeAligned = this.align(glyphSize);\n newGlyphTable = [];\n for (var i = 0; i < glyphSizeAligned; i++) {\n newGlyphTable.push(0);\n }\n var nextGlyphOffset = 0;\n var nextGlyphIndex = 0;\n var table = this.getTable('glyf');\n // Creating NewLocaTable - that would hold offsets for filtered glyphs.\n for (var i = 0; i < locaTable.offsets.length; i++) {\n newLocaTable.push(nextGlyphOffset);\n if (nextGlyphIndex < activeGlyphs.length && activeGlyphs[nextGlyphIndex] === i) {\n ++nextGlyphIndex;\n newLocaTable[i] = nextGlyphOffset;\n var oldGlyphOffset = locaTable.offsets[i];\n var oldNextGlyphOffset = locaTable.offsets[i + 1] - oldGlyphOffset;\n if (oldNextGlyphOffset > 0) {\n this.offset = table.offset + oldGlyphOffset;\n var result = this.read(newGlyphTable, nextGlyphOffset, oldNextGlyphOffset);\n newGlyphTable = result.buffer;\n nextGlyphOffset += oldNextGlyphOffset;\n }\n }\n }\n return { glyphTableSize: glyphSize, newLocaTable: newLocaTable, newGlyphTable: newGlyphTable };\n };\n /**\n * Updates new Loca table.\n */\n /* tslint:disable */\n TtfReader.prototype.updateLocaTable = function (newLocaTable, bLocaIsShort, newLocaTableOut) {\n /* tslint:enable */\n if (newLocaTable === null) {\n throw new Error('Argument Null Exception : newLocaTable');\n }\n var size = (bLocaIsShort) ? newLocaTable.length * 2 : newLocaTable.length * 4;\n var count = this.align(size);\n //BigEndianWiter\n var writer = new BigEndianWriter(count);\n for (var i = 0; i < newLocaTable.length; i++) {\n var value = newLocaTable[i];\n if (bLocaIsShort) {\n value /= 2;\n writer.writeShort(value);\n }\n else {\n writer.writeInt(value);\n }\n }\n return { newLocaUpdated: writer.data, newLocaSize: size };\n };\n /**\n * Aligns number to be divisible on 4.\n */\n TtfReader.prototype.align = function (value) {\n return (value + 3) & (~3);\n };\n /**\n * Returns font program data.\n */\n /* tslint:disable */\n TtfReader.prototype.getFontProgram = function (newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize) {\n /* tslint:enable */\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n var result = this.getFontProgramLength(newLocaTableOut, newGlyphTable, 0);\n var fontProgramLength = result.fontProgramLength;\n var numTables = result.numTables;\n var writer = new BigEndianWriter(fontProgramLength);\n writer.writeInt(0x10000);\n writer.writeShort(numTables);\n var entrySelector = this.entrySelectors[numTables];\n writer.writeShort((1 << (entrySelector & 31)) * 16);\n writer.writeShort(entrySelector);\n writer.writeShort((numTables - (1 << (entrySelector & 31))) * 16);\n // Writing to destination buffer - checksums && sizes of used tables.\n this.writeCheckSums(writer, numTables, newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize);\n // // Writing to destination buffer - used glyphs.\n this.writeGlyphs(writer, newLocaTableOut, newGlyphTable);\n return writer.data;\n };\n /* tslint:disable */\n TtfReader.prototype.getFontProgramLength = function (newLocaTableOut, newGlyphTable, numTables) {\n /* tslint:enable */\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n // glyf and loca are used by default;\n numTables = 2;\n var tableNames = this.tableNames;\n var fontProgramLength = 0;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n if (tableName !== 'glyf' && tableName !== 'loca') {\n var table = this.getTable(tableName);\n if (!table.empty) {\n ++numTables;\n fontProgramLength += this.align(table.length);\n }\n }\n }\n fontProgramLength += newLocaTableOut.length;\n fontProgramLength += newGlyphTable.length;\n var usedTablesSize = numTables * 16 + (3 * 4);\n fontProgramLength += usedTablesSize;\n return { fontProgramLength: fontProgramLength, numTables: numTables };\n };\n /**\n * Writing to destination buffer - checksums and sizes of used tables.\n */\n /* tslint:disable */\n TtfReader.prototype.writeCheckSums = function (writer, numTables, newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize) {\n /* tslint:enable */\n if (writer === null) {\n throw new Error('Argument Null Exception : writer');\n }\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n var usedTablesSize = numTables * 16 + (3 * 4);\n var nextTableSize = 0;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n var tableInfo = this.getTable(tableName);\n if (tableInfo.empty) {\n continue;\n }\n writer.writeString(tableName);\n if (tableName === 'glyf') {\n var checksum = this.calculateCheckSum(newGlyphTable);\n writer.writeInt(checksum);\n nextTableSize = glyphTableSize;\n }\n else if (tableName === 'loca') {\n var checksum = this.calculateCheckSum(newLocaTableOut);\n writer.writeInt(checksum);\n nextTableSize = locaTableSize;\n }\n else {\n writer.writeInt(tableInfo.checksum);\n nextTableSize = tableInfo.length;\n }\n writer.writeUInt(usedTablesSize);\n writer.writeUInt(nextTableSize);\n usedTablesSize += this.align(nextTableSize);\n }\n };\n /**\n * Gets checksum from source buffer.\n */\n TtfReader.prototype.calculateCheckSum = function (bytes) {\n if (bytes === null) {\n throw new Error('Argument Null Exception : bytes');\n }\n var pos = 0;\n var byte1 = 0;\n var byte2 = 0;\n var byte3 = 0;\n var byte4 = 0;\n for (var i = 0; i < (bytes.length + 1) / 4; i++) {\n byte4 += (bytes[pos++] & 255);\n byte3 += (bytes[pos++] & 255);\n byte2 += (bytes[pos++] & 255);\n byte1 += (bytes[pos++] & 255);\n }\n var result = byte1;\n result += (byte2 << 8);\n result += (byte3 << 16);\n result += (byte4 << 24);\n return result;\n };\n /**\n * Writing to destination buffer - used glyphs.\n */\n TtfReader.prototype.writeGlyphs = function (writer, newLocaTable, newGlyphTable) {\n if (writer === null) {\n throw new Error('Argument Null Exception : writer');\n }\n if (newLocaTable === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n var tableInfo = this.getTable(tableName);\n if (tableInfo.empty) {\n continue;\n }\n if (tableName === 'glyf') {\n writer.writeBytes(newGlyphTable);\n }\n else if (tableName === 'loca') {\n writer.writeBytes(newLocaTable);\n }\n else {\n var count = this.align(tableInfo.length);\n var buff = [];\n for (var i_1 = 0; i_1 < count; i_1++) {\n buff.push(0);\n }\n this.offset = tableInfo.offset;\n var result = this.read(buff, 0, tableInfo.length);\n writer.writeBytes(result.buffer);\n }\n }\n };\n //public methods\n /**\n * Sets position value of font data.\n */\n TtfReader.prototype.setOffset = function (offset) {\n this.offset = offset;\n };\n /**\n * Creates font Internals\n * @private\n */\n TtfReader.prototype.createInternals = function () {\n this.metrics = new TtfMetrics();\n var nameTable = this.readNameTable();\n var headTable = this.readHeadTable();\n this.bIsLocaShort = (headTable.indexToLocalFormat === 0);\n var horizontalHeadTable = this.readHorizontalHeaderTable();\n var os2Table = this.readOS2Table();\n var postTable = this.readPostTable();\n this.width = this.readWidthTable(horizontalHeadTable.numberOfHMetrics, headTable.unitsPerEm);\n var subTables = this.readCmapTable();\n this.initializeMetrics(nameTable, headTable, horizontalHeadTable, os2Table, postTable, subTables);\n };\n TtfReader.prototype.getGlyph = function (charCode) {\n if (typeof charCode === 'number') {\n var obj1 = null;\n if (!this.metrics.isSymbol && this.microsoftGlyphs != null) {\n if (this.microsoftGlyphs.containsKey(charCode)) {\n obj1 = this.microsoftGlyphs.getValue(charCode);\n }\n }\n else if (this.metrics.isSymbol && this.macintoshGlyphs != null) {\n if (this.macintoshGlyphs.containsKey(charCode)) {\n obj1 = this.macintoshGlyphs.getValue(charCode);\n }\n }\n var glyph = (obj1 != null) ? obj1 : this.getDefaultGlyph();\n return glyph;\n }\n else {\n var obj = null;\n var code = charCode.charCodeAt(0);\n if (!this.metrics.isSymbol && this.microsoft !== null) {\n if (this.microsoft.containsKey(code)) {\n obj = this.microsoft.getValue(code);\n if (code !== StringTokenizer.whiteSpace.charCodeAt(0)) {\n this.isFontPresent = true;\n }\n }\n else if (code !== StringTokenizer.whiteSpace.charCodeAt(0)) {\n this.isFontPresent = false;\n }\n }\n else if (this.metrics.isSymbol && this.macintosh !== null || this.isMacTTF) {\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n if (this.maxMacIndex !== 0) {\n code %= this.maxMacIndex + 1;\n }\n else {\n code = ((code & 0xff00) === 0xf000 ? code & 0xff : code);\n }\n if (this.macintosh.containsKey(code)) {\n obj = this.macintosh.getValue(code);\n this.isFontPresent = true;\n }\n }\n // Fix for StackOverFlow exception in XPS to PDF converter\n if (charCode === StringTokenizer.whiteSpace && obj === null) {\n obj = new TtfGlyphInfo();\n }\n var glyph = (obj !== null) ? obj : this.getDefaultGlyph();\n return glyph;\n }\n };\n /**\n * Gets hash table with chars indexed by glyph index.\n */\n TtfReader.prototype.getGlyphChars = function (chars) {\n if (chars === null || chars === undefined) {\n throw new Error('Argument Null Exception : chars');\n }\n var dictionary = new Dictionary();\n var charKeys = chars.keys();\n for (var i = 0; i < charKeys.length; i++) {\n var ch = charKeys[i];\n var glyph = this.getGlyph(ch);\n if (!glyph.empty) {\n dictionary.setValue(glyph.index, ch.charCodeAt(0));\n }\n }\n return dictionary;\n };\n /**\n * Gets all glyphs.\n */\n TtfReader.prototype.getAllGlyphs = function () {\n var allGlyphInfo = [];\n var info = new TtfGlyphInfo();\n var index = 0;\n for (var i = 0; i < this.width.length; i++) {\n var width = this.width[i];\n info.index = index;\n info.width = width;\n allGlyphInfo.push(info);\n index++;\n }\n return allGlyphInfo;\n };\n /**\n * Reads a font's program.\n * @private\n */\n TtfReader.prototype.readFontProgram = function (chars) {\n var glyphChars = this.getGlyphChars(chars);\n var locaTable = this.readLocaTable(this.bIsLocaShort);\n if (glyphChars.size() < chars.size()) {\n this.missedGlyphs = chars.size() - glyphChars.size();\n }\n this.updateGlyphChars(glyphChars, locaTable);\n /* tslint:disable */\n var result1 = this.generateGlyphTable(glyphChars, locaTable, null, null);\n /* tslint:enable */\n var glyphTableSize = result1.glyphTableSize;\n var newLocaTable = result1.newLocaTable;\n var newGlyphTable = result1.newGlyphTable;\n var result2 = this.updateLocaTable(newLocaTable, this.bIsLocaShort, null);\n var newLocaSize = result2.newLocaSize;\n var newLocaUpdated = result2.newLocaUpdated;\n var fontProgram = this.getFontProgram(newLocaUpdated, newGlyphTable, glyphTableSize, newLocaSize);\n return fontProgram;\n };\n /**\n * Reconverts string to be in proper format saved into PDF file.\n */\n TtfReader.prototype.convertString = function (text) {\n if (text === null) {\n throw new Error('Argument Null Exception : text');\n }\n var glyph = '';\n var i = 0;\n for (var k = 0; k < text.length; k++) {\n var ch = text[k];\n var glyphInfo = this.getGlyph(ch);\n if (!glyphInfo.empty) {\n glyph += String.fromCharCode(glyphInfo.index);\n i++;\n }\n }\n return glyph;\n };\n /**\n * Gets char width.\n */\n TtfReader.prototype.getCharWidth = function (code) {\n var glyphInfo = this.getGlyph(code);\n glyphInfo = (!glyphInfo.empty) ? glyphInfo : this.getDefaultGlyph();\n var codeWidth = (!glyphInfo.empty) ? glyphInfo.width : 0;\n return codeWidth;\n };\n TtfReader.prototype.readString = function (length, isUnicode) {\n if (isUnicode === undefined) {\n return this.readString(length, false);\n }\n else {\n //let buffer : number[] = this.readBytes(length);\n var result = '';\n if (isUnicode) {\n for (var i = 0; i < length; i++) {\n if (i % 2 !== 0) {\n result += String.fromCharCode(this.fontData[this.offset]);\n }\n this.offset += 1;\n }\n }\n else {\n for (var i = 0; i < length; i++) {\n result += String.fromCharCode(this.fontData[this.offset]);\n this.offset += 1;\n }\n }\n return result;\n }\n };\n TtfReader.prototype.readFixed = function (offset) {\n var integer = this.readInt16(offset);\n var sFraction = this.readInt16(offset + 2);\n var fraction = sFraction / 16384;\n return integer + fraction;\n };\n TtfReader.prototype.readInt32 = function (offset) {\n var i1 = this.fontData[offset + 3];\n var i2 = this.fontData[offset + 2];\n var i3 = this.fontData[offset + 1];\n var i4 = this.fontData[offset];\n this.offset += 4;\n return i1 + (i2 << 8) + (i3 << 16) + (i4 << 24);\n };\n TtfReader.prototype.readUInt32 = function (offset) {\n var i1 = this.fontData[offset + 3];\n var i2 = this.fontData[offset + 2];\n var i3 = this.fontData[offset + 1];\n var i4 = this.fontData[offset];\n this.offset += 4;\n return (i1 | i2 << 8 | i3 << 16 | i4 << 24);\n };\n // private readInt16(offset : number) : number {\n // let result : number = (this.fontData[offset] << 8) + this.fontData[offset + 1];\n // this.offset += 2;\n // return result;\n // }\n TtfReader.prototype.readInt16 = function (offset) {\n var result = (this.fontData[offset] << 8) + this.fontData[offset + 1];\n result = result & (1 << 15) ? result - 0x10000 : result;\n this.offset += 2;\n return result;\n };\n TtfReader.prototype.readInt64 = function (offset) {\n var low = this.readInt32(offset + 4);\n var n = this.readInt32(offset) * 4294967296.0 + low;\n if (low < 0) {\n n += 4294967296;\n }\n return n;\n };\n TtfReader.prototype.readUInt16 = function (offset) {\n var result = (this.fontData[offset] << 8) | this.fontData[offset + 1];\n this.offset += 2;\n return result;\n };\n /**\n * Reads ushort array.\n */\n TtfReader.prototype.readUshortArray = function (length) {\n var buffer = [];\n for (var i = 0; i < length; i++) {\n buffer[i] = this.readUInt16(this.offset);\n }\n return buffer;\n };\n TtfReader.prototype.readBytes = function (length) {\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(this.fontData[this.offset]);\n this.offset += 1;\n }\n return result;\n };\n TtfReader.prototype.readByte = function (offset) {\n var result = this.fontData[offset];\n this.offset += 1;\n return result;\n };\n /**\n * Reads bytes to array in BigEndian order.\n * @private\n */\n TtfReader.prototype.read = function (buffer, index, count) {\n if (buffer === null) {\n throw new Error('Argument Null Exception : buffer');\n }\n var written = 0;\n var read = 0;\n do {\n for (var i = 0; (i < count - written) && (this.offset + i < this.fontData.length); i++) {\n buffer[index + i] = this.fontData[this.offset + i];\n }\n read = count - written;\n this.offset += read;\n written += read;\n } while (written < count);\n return { buffer: buffer, written: written };\n };\n return TtfReader;\n}());\nexport { TtfReader };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfFont } from './pdf-font';\nimport { PdfSubSuperScript } from './enum';\nimport { PdfArray } from './../../primitives/pdf-array';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar PdfFontMetrics = /** @class */ (function () {\n function PdfFontMetrics() {\n /**\n * `Line gap`.\n * @private\n */\n this.lineGap = 0;\n }\n // Public methods\n /**\n * Returns `ascent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getAscent = function (format) {\n var returnValue = this.ascent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `descent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getDescent = function (format) {\n var returnValue = this.descent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `Line gap` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getLineGap = function (format) {\n var returnValue = this.lineGap * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `height` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getHeight = function (format) {\n var height;\n var clearTypeFonts = ['cambria', 'candara', 'constantia', 'corbel', 'cariadings'];\n var clearTypeFontCollection = [];\n for (var index = 0; index < clearTypeFonts.length; index++) {\n var font = clearTypeFonts[index];\n clearTypeFontCollection.push(font);\n }\n if (this.getDescent(format) < 0) {\n // if ((clearTypeFontCollection.indexOf(this.name.toLowerCase()) !== -1) && !this.isUnicodeFont) {\n // height = (this.GetAscent(format) - this.GetDescent(format) - this.GetLineGap(format));\n // } else {\n height = (this.getAscent(format) - this.getDescent(format) + this.getLineGap(format));\n // }\n }\n else {\n height = (this.getAscent(format) + this.getDescent(format) + this.getLineGap(format));\n }\n return height;\n };\n /**\n * Calculates `size` of the font depending on the subscript/superscript value.\n * @private\n */\n PdfFontMetrics.prototype.getSize = function (format) {\n var size = this.size;\n if (format != null) {\n switch (format.subSuperScript) {\n case PdfSubSuperScript.SubScript:\n size /= this.subScriptSizeFactor;\n break;\n case PdfSubSuperScript.SuperScript:\n size /= this.superscriptSizeFactor;\n break;\n }\n }\n return size;\n };\n /**\n * `Clones` the metrics.\n * @private\n */\n PdfFontMetrics.prototype.clone = function () {\n var metrics = this;\n metrics.widthTable = WidthTable.clone();\n return metrics;\n };\n Object.defineProperty(PdfFontMetrics.prototype, \"widthTable\", {\n // Properies\n /**\n * Gets or sets the `width table`.\n * @private\n */\n get: function () {\n return this.internalWidthTable;\n },\n set: function (value) {\n this.internalWidthTable = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfFontMetrics;\n}());\nexport { PdfFontMetrics };\nvar WidthTable = /** @class */ (function () {\n function WidthTable() {\n }\n /**\n * Static `clones` this instance of the WidthTable class.\n * @private\n */\n WidthTable.clone = function () {\n return null;\n };\n return WidthTable;\n}());\nexport { WidthTable };\nvar StandardWidthTable = /** @class */ (function (_super) {\n __extends(StandardWidthTable, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StandardWidthTable` class.\n * @private\n */\n function StandardWidthTable(widths) {\n var _this = _super.call(this) || this;\n if (widths == null) {\n throw new Error('ArgumentNullException:widths');\n }\n _this.widths = widths;\n return _this;\n }\n //Properties\n /**\n * Gets the `32 bit number` at the specified index.\n * @private\n */\n StandardWidthTable.prototype.items = function (index) {\n if (index < 0 || index >= this.widths.length) {\n throw new Error('ArgumentOutOfRangeException:index, The character is not supported by the font.');\n }\n var result = this.widths[index];\n return result;\n };\n Object.defineProperty(StandardWidthTable.prototype, \"length\", {\n /**\n * Gets the `length` of the internal array.\n * @private\n */\n get: function () {\n return this.widths.length;\n },\n enumerable: true,\n configurable: true\n });\n //Overrides\n /**\n * `Clones` this instance of the WidthTable class.\n * @private\n */\n StandardWidthTable.prototype.clone = function () {\n var swt = this;\n swt.widths = this.widths;\n return swt;\n };\n /**\n * Converts width table to a `PDF array`.\n * @private\n */\n StandardWidthTable.prototype.toArray = function () {\n var arr = new PdfArray(this.widths);\n return arr;\n };\n return StandardWidthTable;\n}(WidthTable));\nexport { StandardWidthTable };\n","/**\n * TrueTypeFont.ts class for EJ2-PDF\n */\nimport { ByteArray } from './../../graphics/images/index';\nimport { TtfReader } from './ttf-reader';\nimport { PdfDictionary, SaveDescendantFontEventHandler, SaveFontDictionaryEventHandler } from './../../primitives/pdf-dictionary';\nimport { SaveFontProgramEventHandler, SaveCmapEventHandler } from './../../primitives/pdf-stream';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfString } from './../../primitives/pdf-string';\nimport { PdfReferenceHolder } from './../../primitives/pdf-reference';\nimport { PdfFontMetrics } from './pdf-font-metrics';\nimport { StandardWidthTable } from './pdf-font-metrics';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { Dictionary } from './../../collections/dictionary';\nimport { FontDescriptorFlags } from './enum';\nimport { RectangleF } from './../../drawing/pdf-drawing';\nimport { Operators } from './../../input-output/pdf-operators';\nvar UnicodeTrueTypeFont = /** @class */ (function () {\n /* tslint:enable */\n //Constructors\n /**\n * Initializes a new instance of the `PdfTrueTypeFont` class.\n * @private\n */\n function UnicodeTrueTypeFont(base64String, size) {\n // Fields\n this.nameString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Indicates whether the font program is compressed or not.\n * @private\n */\n this.isCompress = false;\n /**\n * Indicates whether the font is embedded or not.\n */\n this.isEmbedFont = false;\n /**\n * Cmap table's start prefix.\n */\n /* tslint:disable */\n this.cmapPrefix = '/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap' + Operators.newLine + '/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0>> def\\n/CMapName ' + '/Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange' + Operators.newLine;\n /* tslint:enable */\n /**\n * Cmap table's start suffix.\n */\n this.cmapEndCodespaceRange = 'endcodespacerange' + Operators.newLine;\n /**\n * Cmap's begin range marker.\n */\n this.cmapBeginRange = 'beginbfrange' + Operators.newLine;\n /**\n * Cmap's end range marker.\n */\n this.cmapEndRange = 'endbfrange' + Operators.newLine;\n /**\n * Cmap table's end\n */\n /* tslint:disable */\n this.cmapSuffix = 'endbfrange\\nendcmap\\nCMapName currentdict ' + '/CMap defineresource pop\\nend end' + Operators.newLine;\n if (base64String === null || base64String === undefined) {\n throw new Error('ArgumentNullException:base64String');\n }\n this.fontSize = size;\n this.fontString = base64String;\n this.Initialize();\n }\n //Implementation\n /**\n * Returns width of the char symbol.\n */\n UnicodeTrueTypeFont.prototype.getCharWidth = function (charCode) {\n var codeWidth = this.ttfReader.getCharWidth(charCode);\n return codeWidth;\n };\n /**\n * Returns width of the text line.\n */\n UnicodeTrueTypeFont.prototype.getLineWidth = function (line) {\n // if (line == null) {\n // throw new Error('ArgumentNullException : line');\n // }\n var width = 0;\n for (var i = 0, len = line.length; i < len; i++) {\n var ch = line[i];\n var charWidth = this.getCharWidth(ch);\n width += charWidth;\n }\n return width;\n };\n /**\n * Initializes a new instance of the `PdfTrueTypeFont` class.\n * @private\n */\n UnicodeTrueTypeFont.prototype.Initialize = function () {\n var byteArray = new ByteArray(this.fontString.length);\n byteArray.writeFromBase64String(this.fontString);\n this.fontData = byteArray.internalBuffer;\n this.ttfReader = new TtfReader(this.fontData);\n this.ttfMetrics = this.ttfReader.metrics;\n };\n UnicodeTrueTypeFont.prototype.createInternals = function () {\n this.fontDictionary = new PdfDictionary();\n this.fontProgram = new PdfStream();\n this.cmap = new PdfStream();\n this.descendantFont = new PdfDictionary();\n this.metrics = new PdfFontMetrics();\n this.ttfReader.createInternals();\n this.ttfMetrics = this.ttfReader.metrics;\n this.initializeMetrics();\n // Create all the dictionaries of the font.\n this.subsetName = this.getFontName();\n this.createDescendantFont();\n this.createCmap();\n this.createFontDictionary();\n this.createFontProgram();\n };\n UnicodeTrueTypeFont.prototype.getInternals = function () {\n return this.fontDictionary;\n };\n /**\n * Initializes metrics.\n */\n UnicodeTrueTypeFont.prototype.initializeMetrics = function () {\n var ttfMetrics = this.ttfReader.metrics;\n this.metrics.ascent = ttfMetrics.macAscent;\n this.metrics.descent = ttfMetrics.macDescent;\n this.metrics.height = ttfMetrics.macAscent - ttfMetrics.macDescent + ttfMetrics.lineGap;\n this.metrics.name = ttfMetrics.fontFamily;\n this.metrics.postScriptName = ttfMetrics.postScriptName;\n this.metrics.size = this.fontSize;\n this.metrics.widthTable = new StandardWidthTable(ttfMetrics.widthTable);\n this.metrics.lineGap = ttfMetrics.lineGap;\n this.metrics.subScriptSizeFactor = ttfMetrics.subScriptSizeFactor;\n this.metrics.superscriptSizeFactor = ttfMetrics.superscriptSizeFactor;\n this.metrics.isBold = ttfMetrics.isBold;\n };\n /**\n * Gets random string.\n */\n UnicodeTrueTypeFont.prototype.getFontName = function () {\n var builder = '';\n var name;\n // if (this.isEmbed === false) {\n for (var i = 0; i < 6; i++) {\n var index = Math.floor(Math.random() * (25 - 0 + 1)) + 0;\n builder += this.nameString[index];\n }\n builder += '+';\n // }\n builder += this.ttfReader.metrics.postScriptName;\n name = builder.toString();\n // if (name === '') {\n // name = this.ttfReader.metrics.fontFamily;\n // }\n name = this.formatName(name);\n return name;\n };\n /**\n * Generates name of the font.\n */\n UnicodeTrueTypeFont.prototype.formatName = function (fontName) {\n // if (fontName === null) {\n // throw new Error('ArgumentNullException : fontName');\n // }\n // if (fontName === '') {\n // throw new Error('ArgumentOutOfRangeException : fontName, Parameter can not be empty');\n // }\n var ret = fontName.replace('(', '#28');\n ret = ret.replace(')', '#29');\n ret = ret.replace('[', '#5B');\n ret = ret.replace(']', '#5D');\n ret = ret.replace('<', '#3C');\n ret = ret.replace('>', '#3E');\n ret = ret.replace('{', '#7B');\n ret = ret.replace('}', '#7D');\n ret = ret.replace('/', '#2F');\n ret = ret.replace('%', '#25');\n return ret.replace(' ', '#20');\n };\n /**\n * Creates descendant font.\n */\n UnicodeTrueTypeFont.prototype.createDescendantFont = function () {\n // Set property used to clone Font every time\n this.descendantFont.isFont = true;\n this.descendantFont.descendantFontBeginSave = new SaveDescendantFontEventHandler(this);\n this.descendantFont.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n this.descendantFont.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.cIDFontType2));\n this.descendantFont.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.subsetName));\n this.descendantFont.items.setValue(this.dictionaryProperties.cIDToGIDMap, new PdfName(this.dictionaryProperties.identity));\n this.descendantFont.items.setValue(this.dictionaryProperties.dw, new PdfNumber(1000));\n this.fontDescriptor = this.createFontDescriptor();\n this.descendantFont.items.setValue(this.dictionaryProperties.fontDescriptor, new PdfReferenceHolder(this.fontDescriptor));\n var systemInfo = this.createSystemInfo();\n this.descendantFont.items.setValue(this.dictionaryProperties.cIDSystemInfo, systemInfo);\n };\n /**\n * Creates font descriptor.\n */\n UnicodeTrueTypeFont.prototype.createFontDescriptor = function () {\n var descriptor = new PdfDictionary();\n var metrics = this.ttfReader.metrics;\n // Set property used to clone Font every time\n descriptor.isFont = true;\n descriptor.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.fontDescriptor));\n descriptor.items.setValue(this.dictionaryProperties.fontName, new PdfName(this.subsetName));\n descriptor.items.setValue(this.dictionaryProperties.flags, new PdfNumber(this.getDescriptorFlags()));\n descriptor.items.setValue(this.dictionaryProperties.fontBBox, PdfArray.fromRectangle(this.getBoundBox()));\n descriptor.items.setValue(this.dictionaryProperties.missingWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.stemV, new PdfNumber(metrics.stemV));\n descriptor.items.setValue(this.dictionaryProperties.italicAngle, new PdfNumber(metrics.italicAngle));\n descriptor.items.setValue(this.dictionaryProperties.capHeight, new PdfNumber(metrics.capHeight));\n descriptor.items.setValue(this.dictionaryProperties.ascent, new PdfNumber(metrics.winAscent));\n descriptor.items.setValue(this.dictionaryProperties.descent, new PdfNumber(metrics.winDescent));\n descriptor.items.setValue(this.dictionaryProperties.leading, new PdfNumber(metrics.leading));\n descriptor.items.setValue(this.dictionaryProperties.avgWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.fontFile2, new PdfReferenceHolder(this.fontProgram));\n descriptor.items.setValue(this.dictionaryProperties.maxWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.xHeight, new PdfNumber(0));\n descriptor.items.setValue(this.dictionaryProperties.stemH, new PdfNumber(0));\n return descriptor;\n };\n /**\n * Generates cmap.\n * @private\n */\n UnicodeTrueTypeFont.prototype.createCmap = function () {\n this.cmap.cmapBeginSave = new SaveCmapEventHandler(this);\n };\n /**\n * Generates font dictionary.\n */\n UnicodeTrueTypeFont.prototype.createFontDictionary = function () {\n // Set property used to clone Font every time\n this.fontDictionary.isFont = true;\n this.fontDictionary.fontDictionaryBeginSave = new SaveFontDictionaryEventHandler(this);\n this.fontDictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n this.fontDictionary.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.subsetName));\n this.fontDictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.type0));\n this.fontDictionary.items.setValue(this.dictionaryProperties.encoding, new PdfName(this.dictionaryProperties.identityH));\n var descFonts = new PdfArray();\n var reference = new PdfReferenceHolder(this.descendantFont);\n // Set property used to clone Font every time\n descFonts.isFont = true;\n descFonts.add(reference);\n this.fontDictionary.items.setValue(this.dictionaryProperties.descendantFonts, descFonts);\n };\n /**\n * Creates font program.\n */\n UnicodeTrueTypeFont.prototype.createFontProgram = function () {\n this.fontProgram.fontProgramBeginSave = new SaveFontProgramEventHandler(this);\n };\n /**\n * Creates system info dictionary for CID font.\n * @private\n */\n UnicodeTrueTypeFont.prototype.createSystemInfo = function () {\n var systemInfo = new PdfDictionary();\n systemInfo.items.setValue(this.dictionaryProperties.registry, new PdfString('Adobe'));\n systemInfo.items.setValue(this.dictionaryProperties.ordering, new PdfString(this.dictionaryProperties.identity));\n systemInfo.items.setValue(this.dictionaryProperties.supplement, new PdfNumber(0));\n return systemInfo;\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n UnicodeTrueTypeFont.prototype.descendantFontBeginSave = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var width = this.getDescendantWidth();\n if (width !== null) {\n this.descendantFont.items.setValue(this.dictionaryProperties.w, width);\n }\n }\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n UnicodeTrueTypeFont.prototype.cmapBeginSave = function () {\n this.generateCmap();\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n /* tslint:disable */\n UnicodeTrueTypeFont.prototype.fontDictionaryBeginSave = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0 && !this.fontDictionary.containsKey(this.dictionaryProperties.toUnicode)) {\n this.fontDictionary.items.setValue(this.dictionaryProperties.toUnicode, new PdfReferenceHolder(this.cmap));\n }\n };\n /* tslint:enable */\n /**\n * Runs before font program stream save.\n */\n UnicodeTrueTypeFont.prototype.fontProgramBeginSave = function () {\n this.isCompress = true;\n this.generateFontProgram();\n };\n /**\n * Gets width description pad array for c i d font.\n */\n UnicodeTrueTypeFont.prototype.getDescendantWidth = function () {\n var array = new PdfArray();\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var glyphInfo = [];\n // if (!this.isEmbedFont) {\n var keys = this.usedChars.keys();\n for (var i = 0; i < keys.length; i++) {\n var chLen = keys[i];\n var glyph = this.ttfReader.getGlyph(chLen);\n if (glyph.empty) {\n continue;\n }\n glyphInfo.push(glyph);\n }\n // } else {\n // glyphInfo = this.ttfReader.getAllGlyphs();\n // }\n glyphInfo.sort(function (a, b) { return a.index - b.index; });\n var firstGlyphIndex = 0;\n var lastGlyphIndex = 0;\n var firstGlyphIndexWasSet = false;\n var widthDetails = new PdfArray();\n // if (!this.isEmbedFont) {\n for (var i = 0; i < glyphInfo.length; i++) {\n var glyph = glyphInfo[i];\n if (!firstGlyphIndexWasSet) {\n firstGlyphIndexWasSet = true;\n firstGlyphIndex = glyph.index;\n lastGlyphIndex = glyph.index - 1;\n }\n if ((lastGlyphIndex + 1 !== glyph.index || (i + 1 === glyphInfo.length)) && glyphInfo.length > 1) {\n // Add glyph index / width.\n array.add(new PdfNumber(firstGlyphIndex));\n if (i !== 0) {\n array.add(widthDetails);\n }\n firstGlyphIndex = glyph.index;\n widthDetails = new PdfArray();\n }\n widthDetails.add(new PdfNumber(glyph.width));\n if (i + 1 === glyphInfo.length) {\n array.add(new PdfNumber(firstGlyphIndex));\n array.add(widthDetails);\n }\n lastGlyphIndex = glyph.index;\n }\n // } else {\n // for (let i : number = 0; i < glyphInfo.length; i++) {\n // let glyph : TtfGlyphInfo = glyphInfo[i];\n // if (!firstGlyphIndexWasSet) {\n // firstGlyphIndexWasSet = true;\n // lastGlyphIndex = glyph.index - 1;\n // }\n // firstGlyphIndex = glyph.index;\n // if ((lastGlyphIndex + 1 === glyph.index || (i + 1 === glyphInfo.length)) && glyphInfo.length > 1) {\n // // Add glyph index / width.\n // widthDetails.add(new PdfNumber(glyph.width));\n // array.add(new PdfNumber(firstGlyphIndex));\n // array.add(widthDetails);\n // widthDetails = new PdfArray();\n // }\n // lastGlyphIndex = glyph.index;\n // }\n // }\n }\n return array;\n };\n /**\n * Creates cmap.\n */\n UnicodeTrueTypeFont.prototype.generateCmap = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var glyphChars = this.ttfReader.getGlyphChars(this.usedChars);\n if (glyphChars.size() > 0) {\n var keys = glyphChars.keys().sort();\n // add first and last glyph indexes\n var first = keys[0];\n var last = keys[keys.length - 1];\n var middlePart = this.toHexString(first, false) + this.toHexString(last, false) + Operators.newLine;\n var builder = '';\n builder += this.cmapPrefix;\n builder += middlePart;\n builder += this.cmapEndCodespaceRange;\n var nextRange = 0;\n for (var i = 0; i < keys.length; i++) {\n if (nextRange === 0) {\n if (i !== 0) {\n builder += this.cmapEndRange;\n }\n nextRange = Math.min(100, keys.length - i);\n builder += nextRange;\n builder += Operators.whiteSpace;\n builder += this.cmapBeginRange;\n }\n nextRange -= 1;\n var key = keys[i];\n /* tslint:disable */\n builder += this.toHexString(key, true) + this.toHexString(key, true) + this.toHexString(glyphChars.getValue(key), true) + '\\n';\n /* tslint:enable */\n }\n builder += this.cmapSuffix;\n this.cmap.clearStream();\n this.cmap.isFont = true;\n this.cmap.write(builder);\n }\n }\n };\n /**\n * Generates font program.\n */\n UnicodeTrueTypeFont.prototype.generateFontProgram = function () {\n var fontProgram = null;\n this.usedChars = (this.usedChars === null || this.usedChars === undefined) ? new Dictionary() : this.usedChars;\n this.ttfReader.setOffset(0);\n fontProgram = this.ttfReader.readFontProgram(this.usedChars);\n this.fontProgram.clearStream();\n this.fontProgram.isFont = true;\n this.fontProgram.writeBytes(fontProgram);\n };\n /**\n * Calculates flags for the font descriptor.\n * @private\n */\n UnicodeTrueTypeFont.prototype.getDescriptorFlags = function () {\n var flags = 0;\n var metrics = this.ttfReader.metrics;\n if (metrics.isFixedPitch) {\n flags |= FontDescriptorFlags.FixedPitch;\n }\n if (metrics.isSymbol) {\n flags |= FontDescriptorFlags.Symbolic;\n }\n else {\n flags |= FontDescriptorFlags.Nonsymbolic;\n }\n if (metrics.isItalic) {\n flags |= FontDescriptorFlags.Italic;\n }\n if (metrics.isBold) {\n flags |= FontDescriptorFlags.ForceBold;\n }\n return flags;\n };\n /**\n * Calculates BoundBox of the descriptor.\n * @private\n */\n UnicodeTrueTypeFont.prototype.getBoundBox = function () {\n var rect = this.ttfReader.metrics.fontBox;\n var width = Math.abs(rect.right - rect.left);\n var height = Math.abs(rect.top - rect.bottom);\n var rectangle = new RectangleF(rect.left, rect.bottom, width, height);\n return rectangle;\n };\n /**\n * Converts integer of decimal system to hex integer.\n */\n UnicodeTrueTypeFont.prototype.toHexString = function (n, isCaseChange) {\n var s = n.toString(16);\n if (isCaseChange) {\n s = s.toUpperCase();\n }\n return '<0000'.substring(0, 5 - s.length) + s + '>';\n };\n /**\n * Stores used symbols.\n */\n UnicodeTrueTypeFont.prototype.setSymbols = function (text) {\n if (text === null) {\n throw new Error('Argument Null Exception : text');\n }\n if (this.usedChars === null || this.usedChars === undefined) {\n this.usedChars = new Dictionary();\n }\n for (var i = 0; i < text.length; i++) {\n var ch = text[i];\n this.usedChars.setValue(ch, String.fromCharCode(0));\n }\n // else {\n // if (text === null) {\n // throw new Error('Argument Null Exception : glyphs');\n // }\n // if (this.usedChars === null || this.usedChars === undefined) {\n // this.usedChars = new Dictionary();\n // }\n // for (let i : number = 0; i < text.length; i++) {\n // let glyphIndex : number = text[i];\n // let glyph : TtfGlyphInfo = this.ttfReader.getGlyph(glyphIndex);\n // if (!glyph == null) {\n // let c : string = glyph.charCode.toLocaleString();\n // this.usedChars.setValue(c, String.fromCharCode(0));\n // }\n // }\n // }\n if (this.isEmbedFont === false) {\n this.getDescendantWidth();\n }\n };\n return UnicodeTrueTypeFont;\n}());\nexport { UnicodeTrueTypeFont };\n","/**\n * ArabicShapeRenderer.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../../../collections/dictionary';\nvar ArabicShapeRenderer = /** @class */ (function () {\n //#endregion\n //#region Constructor\n function ArabicShapeRenderer() {\n //#region Constants\n this.arabicCharTable = [['\\u0621', '\\uFE80'], ['\\u0622', '\\uFE81', '\\uFE82'],\n ['\\u0623', '\\uFE83', '\\uFE84'],\n ['\\u0624', '\\uFE85', '\\uFE86'],\n ['\\u0625', '\\uFE87', '\\uFE88'],\n ['\\u0626', '\\uFE89', '\\uFE8A', '\\uFE8B', '\\uFE8C'],\n ['\\u0627', '\\uFE8D', '\\uFE8E'],\n ['\\u0628', '\\uFE8F', '\\uFE90', '\\uFE91', '\\uFE92'],\n ['\\u0629', '\\uFE93', '\\uFE94'],\n ['\\u062A', '\\uFE95', '\\uFE96', '\\uFE97', '\\uFE98'],\n ['\\u062B', '\\uFE99', '\\uFE9A', '\\uFE9B', '\\uFE9C'],\n ['\\u062C', '\\uFE9D', '\\uFE9E', '\\uFE9F', '\\uFEA0'],\n ['\\u062D', '\\uFEA1', '\\uFEA2', '\\uFEA3', '\\uFEA4'],\n ['\\u062E', '\\uFEA5', '\\uFEA6', '\\uFEA7', '\\uFEA8'],\n ['\\u062F', '\\uFEA9', '\\uFEAA'],\n ['\\u0630', '\\uFEAB', '\\uFEAC'],\n ['\\u0631', '\\uFEAD', '\\uFEAE'],\n ['\\u0632', '\\uFEAF', '\\uFEB0'],\n ['\\u0633', '\\uFEB1', '\\uFEB2', '\\uFEB3', '\\uFEB4'],\n ['\\u0634', '\\uFEB5', '\\uFEB6', '\\uFEB7', '\\uFEB8'],\n ['\\u0635', '\\uFEB9', '\\uFEBA', '\\uFEBB', '\\uFEBC'],\n ['\\u0636', '\\uFEBD', '\\uFEBE', '\\uFEBF', '\\uFEC0'],\n ['\\u0637', '\\uFEC1', '\\uFEC2', '\\uFEC3', '\\uFEC4'],\n ['\\u0638', '\\uFEC5', '\\uFEC6', '\\uFEC7', '\\uFEC8'],\n ['\\u0639', '\\uFEC9', '\\uFECA', '\\uFECB', '\\uFECC'],\n ['\\u063A', '\\uFECD', '\\uFECE', '\\uFECF', '\\uFED0'],\n ['\\u0640', '\\u0640', '\\u0640', '\\u0640', '\\u0640'],\n ['\\u0641', '\\uFED1', '\\uFED2', '\\uFED3', '\\uFED4'],\n ['\\u0642', '\\uFED5', '\\uFED6', '\\uFED7', '\\uFED8'],\n ['\\u0643', '\\uFED9', '\\uFEDA', '\\uFEDB', '\\uFEDC'],\n ['\\u0644', '\\uFEDD', '\\uFEDE', '\\uFEDF', '\\uFEE0'],\n ['\\u0645', '\\uFEE1', '\\uFEE2', '\\uFEE3', '\\uFEE4'],\n ['\\u0646', '\\uFEE5', '\\uFEE6', '\\uFEE7', '\\uFEE8'],\n ['\\u0647', '\\uFEE9', '\\uFEEA', '\\uFEEB', '\\uFEEC'],\n ['\\u0648', '\\uFEED', '\\uFEEE'],\n ['\\u0649', '\\uFEEF', '\\uFEF0', '\\uFBE8', '\\uFBE9'],\n ['\\u064A', '\\uFEF1', '\\uFEF2', '\\uFEF3', '\\uFEF4'],\n ['\\u0671', '\\uFB50', '\\uFB51'],\n ['\\u0679', '\\uFB66', '\\uFB67', '\\uFB68', '\\uFB69'],\n ['\\u067A', '\\uFB5E', '\\uFB5F', '\\uFB60', '\\uFB61'],\n ['\\u067B', '\\uFB52', '\\uFB53', '\\uFB54', '\\uFB55'],\n ['\\u067E', '\\uFB56', '\\uFB57', '\\uFB58', '\\uFB59'],\n ['\\u067F', '\\uFB62', '\\uFB63', '\\uFB64', '\\uFB65'],\n ['\\u0680', '\\uFB5A', '\\uFB5B', '\\uFB5C', '\\uFB5D'],\n ['\\u0683', '\\uFB76', '\\uFB77', '\\uFB78', '\\uFB79'],\n ['\\u0684', '\\uFB72', '\\uFB73', '\\uFB74', '\\uFB75'],\n ['\\u0686', '\\uFB7A', '\\uFB7B', '\\uFB7C', '\\uFB7D'],\n ['\\u0687', '\\uFB7E', '\\uFB7F', '\\uFB80', '\\uFB81'],\n ['\\u0688', '\\uFB88', '\\uFB89'],\n ['\\u068C', '\\uFB84', '\\uFB85'],\n ['\\u068D', '\\uFB82', '\\uFB83'],\n ['\\u068E', '\\uFB86', '\\uFB87'],\n ['\\u0691', '\\uFB8C', '\\uFB8D'],\n ['\\u0698', '\\uFB8A', '\\uFB8B'],\n ['\\u06A4', '\\uFB6A', '\\uFB6B', '\\uFB6C', '\\uFB6D'],\n ['\\u06A6', '\\uFB6E', '\\uFB6F', '\\uFB70', '\\uFB71'],\n ['\\u06A9', '\\uFB8E', '\\uFB8F', '\\uFB90', '\\uFB91'],\n ['\\u06AD', '\\uFBD3', '\\uFBD4', '\\uFBD5', '\\uFBD6'],\n ['\\u06AF', '\\uFB92', '\\uFB93', '\\uFB94', '\\uFB95'],\n ['\\u06B1', '\\uFB9A', '\\uFB9B', '\\uFB9C', '\\uFB9D'],\n ['\\u06B3', '\\uFB96', '\\uFB97', '\\uFB98', '\\uFB99'],\n ['\\u06BA', '\\uFB9E', '\\uFB9F'],\n ['\\u06BB', '\\uFBA0', '\\uFBA1', '\\uFBA2', '\\uFBA3'],\n ['\\u06BE', '\\uFBAA', '\\uFBAB', '\\uFBAC', '\\uFBAD'],\n ['\\u06C0', '\\uFBA4', '\\uFBA5'],\n ['\\u06C1', '\\uFBA6', '\\uFBA7', '\\uFBA8', '\\uFBA9'],\n ['\\u06C5', '\\uFBE0', '\\uFBE1'],\n ['\\u06C6', '\\uFBD9', '\\uFBDA'],\n ['\\u06C7', '\\uFBD7', '\\uFBD8'],\n ['\\u06C8', '\\uFBDB', '\\uFBDC'],\n ['\\u06C9', '\\uFBE2', '\\uFBE3'],\n ['\\u06CB', '\\uFBDE', '\\uFBDF'],\n ['\\u06CC', '\\uFBFC', '\\uFBFD', '\\uFBFE', '\\uFBFF'],\n ['\\u06D0', '\\uFBE4', '\\uFBE5', '\\uFBE6', '\\uFBE7'],\n ['\\u06D2', '\\uFBAE', '\\uFBAF'],\n ['\\u06D3', '\\uFBB0', '\\uFBB1']\n ];\n this.alef = '\\u0627';\n this.alefHamza = '\\u0623';\n this.alefHamzaBelow = '\\u0625';\n this.alefMadda = '\\u0622';\n this.lam = '\\u0644';\n this.hamza = '\\u0621';\n this.zeroWidthJoiner = '\\u200D';\n this.hamzaAbove = '\\u0654';\n this.hamzaBelow = '\\u0655';\n this.wawHamza = '\\u0624';\n this.yehHamza = '\\u0626';\n this.waw = '\\u0648';\n this.alefMaksura = '\\u0649';\n this.yeh = '\\u064A';\n this.farsiYeh = '\\u06CC';\n this.shadda = '\\u0651';\n this.madda = '\\u0653';\n this.lwa = '\\uFEFB';\n this.lwawh = '\\uFEF7';\n this.lwawhb = '\\uFEF9';\n this.lwawm = '\\uFEF5';\n this.bwhb = '\\u06D3';\n this.fathatan = '\\u064B';\n this.superScriptalef = '\\u0670';\n this.vowel = 0x1;\n // #endregion\n //#region Fields\n this.arabicMapTable = new Dictionary();\n for (var i = 0; i < this.arabicCharTable.length; i++) {\n this.arabicMapTable.setValue(this.arabicCharTable[i][0], this.arabicCharTable[i]);\n }\n }\n //#endregion\n //#region implementation\n ArabicShapeRenderer.prototype.getCharacterShape = function (input, index) {\n if ((input >= this.hamza) && (input <= this.bwhb)) {\n var value = [];\n if (this.arabicMapTable.getValue(input)) {\n value = this.arabicMapTable.getValue(input);\n return value[index + 1];\n }\n }\n else if (input >= this.lwawm && input <= this.lwa) {\n return (input);\n }\n return input;\n };\n ArabicShapeRenderer.prototype.shape = function (text, level) {\n var builder = '';\n var str2 = '';\n for (var i = 0; i < text.length; i++) {\n var c = text[i];\n if (c >= '؀' && c <= 'ۿ') {\n //if(c>= 0x0600.toString() && c<= 0x06FF.toString()) {\n str2 = str2 + c;\n }\n else {\n if (str2.length > 0) {\n var st = this.doShape(str2.toString(), 0);\n builder = builder + st;\n str2 = '';\n }\n builder = builder + c;\n }\n }\n if (str2.length > 0) {\n var st = this.doShape(str2.toString(), 0);\n builder = builder + st;\n }\n return builder.toString();\n };\n ArabicShapeRenderer.prototype.doShape = function (input, level) {\n var str = '';\n var ligature = 0;\n var len = 0;\n var i = 0;\n var next = '';\n var previous = new ArabicShape();\n var present = new ArabicShape();\n while (i < input.length) {\n next = input[i++];\n ligature = this.ligature(next, present);\n if (ligature === 0) {\n var shapeCount = this.getShapeCount(next);\n len = (shapeCount === 1) ? 0 : 2;\n if (previous.Shapes > 2) {\n len += 1;\n }\n len = len % (present.Shapes);\n present.Value = this.getCharacterShape(present.Value, len);\n str = this.append(str, previous, level);\n previous = present;\n present = new ArabicShape();\n present.Value = next;\n present.Shapes = shapeCount;\n present.Ligature++;\n }\n }\n len = (previous.Shapes > 2) ? 1 : 0;\n len = len % (present.Shapes);\n present.Value = this.getCharacterShape(present.Value, len);\n str = this.append(str, previous, level);\n str = this.append(str, present, level);\n return str.toString();\n };\n ArabicShapeRenderer.prototype.append = function (builder, shape, level) {\n if (shape.Value !== '') {\n builder = builder + shape.Value;\n shape.Ligature -= 1;\n if (shape.Type !== '') {\n if ((level & this.vowel) === 0) {\n builder = builder + shape.Type;\n shape.Ligature -= 1;\n }\n else {\n shape.Ligature -= 1;\n }\n }\n if (shape.vowel !== '') {\n if ((level & this.vowel) === 0) {\n builder = builder + shape.vowel;\n shape.Ligature -= 1;\n }\n else {\n shape.Ligature -= 1;\n }\n }\n }\n return builder;\n };\n ArabicShapeRenderer.prototype.ligature = function (value, shape) {\n if (shape.Value !== '') {\n var result = 0;\n if ((value >= this.fathatan && value <= this.hamzaBelow) || value === this.superScriptalef) {\n result = 1;\n if ((shape.vowel !== '') && (value !== this.shadda)) {\n result = 2;\n }\n if (value === this.shadda) {\n if (shape.Type == null) {\n shape.Type = this.shadda;\n }\n else {\n return 0;\n }\n }\n else if (value === this.hamzaBelow) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefHamzaBelow;\n result = 2;\n }\n else if (value === this.lwa) {\n shape.Value = this.lwawhb;\n result = 2;\n }\n else {\n shape.Type = this.hamzaBelow;\n }\n }\n else if (value === this.hamzaAbove) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefHamza;\n result = 2;\n }\n else if (shape.Value === this.lwa) {\n shape.Value = this.lwawh;\n result = 2;\n }\n else if (shape.Value === this.waw) {\n shape.Value = this.wawHamza;\n result = 2;\n }\n else if (shape.Value === this.yeh || shape.Value === this.alefMaksura || shape.Value === this.farsiYeh) {\n shape.Value = this.yehHamza;\n result = 2;\n }\n else {\n shape.Type = this.hamzaAbove;\n }\n }\n else if (value === this.madda) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefMadda;\n result = 2;\n }\n }\n else {\n shape.vowel = value;\n }\n if (result === 1) {\n shape.Ligature++;\n }\n return result;\n }\n if (shape.vowel !== '') {\n return 0;\n }\n if (shape.Value === this.lam) {\n if (value === this.alef) {\n shape.Value = this.lwa;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefHamza) {\n shape.Value = this.lwawh;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefHamzaBelow) {\n shape.Value = this.lwawhb;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefMadda) {\n shape.Value = this.lwawm;\n shape.Shapes = 2;\n result = 3;\n }\n }\n // else if (shape.Value === '') {\n // shape.Value = value;\n // shape.Shapes = this.getShapeCount(value);\n // result = 1;\n // }\n return result;\n }\n else {\n return 0;\n }\n };\n ArabicShapeRenderer.prototype.getShapeCount = function (shape) {\n if ((shape >= this.hamza) && (shape <= this.bwhb) && !((shape >= this.fathatan && shape <= this.hamzaBelow)\n || shape === this.superScriptalef)) {\n var c = [];\n if (this.arabicMapTable.getValue(shape)) {\n c = this.arabicMapTable.getValue(shape);\n return c.length - 1;\n }\n }\n else if (shape === this.zeroWidthJoiner) {\n return 4;\n }\n return 1;\n };\n return ArabicShapeRenderer;\n}());\nexport { ArabicShapeRenderer };\n//#endregion\n//#region Internals\nvar ArabicShape = /** @class */ (function () {\n function ArabicShape() {\n //#region Fields\n this.shapeValue = '';\n this.shapeType = '';\n this.shapeVowel = '';\n this.shapeLigature = 0;\n this.shapeShapes = 1;\n //#endregion\n }\n Object.defineProperty(ArabicShape.prototype, \"Value\", {\n //#endregion\n //#region Properties \n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeValue;\n },\n set: function (value) {\n this.shapeValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Type\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeType;\n },\n set: function (value) {\n this.shapeType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"vowel\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeVowel;\n },\n set: function (value) {\n this.shapeVowel = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Ligature\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeLigature;\n },\n set: function (value) {\n this.shapeLigature = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Shapes\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeShapes;\n },\n set: function (value) {\n this.shapeShapes = value;\n },\n enumerable: true,\n configurable: true\n });\n return ArabicShape;\n}());\nexport { ArabicShape };\n//#endregion\n","/**\n * Bidi.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../../../collections/dictionary';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar Bidi = /** @class */ (function () {\n //#endregion\n //#region Constructor\n function Bidi() {\n //#region Fields\n this.indexes = [];\n this.indexLevels = [];\n this.mirroringShapeCharacters = new Dictionary();\n this.update();\n }\n //#endregion\n //#region implementation\n Bidi.prototype.doMirrorShaping = function (text) {\n var result = [];\n for (var i = 0; i < text.length; i++) {\n if (((this.indexLevels[i] & 1) === 1) && this.mirroringShapeCharacters.containsKey(text[i].charCodeAt(0))) {\n result[i] = String.fromCharCode(this.mirroringShapeCharacters.getValue(text[i].charCodeAt(0)));\n }\n else {\n result[i] = text[i].toString();\n }\n }\n var res = '';\n for (var j = 0; j < result.length; j++) {\n res = res + result[j];\n }\n return res;\n };\n Bidi.prototype.getLogicalToVisualString = function (inputText, isRtl) {\n var rtlCharacters = new RtlCharacters();\n this.indexLevels = rtlCharacters.getVisualOrder(inputText, isRtl);\n this.setDefaultIndexLevel();\n this.doOrder(0, this.indexLevels.length - 1);\n var text = this.doMirrorShaping(inputText);\n //let text : string = inputText;\n var resultBuilder = '';\n for (var i = 0; i < this.indexes.length; i++) {\n var index = this.indexes[i];\n resultBuilder += text[index];\n }\n return resultBuilder.toString();\n };\n Bidi.prototype.setDefaultIndexLevel = function () {\n for (var i = 0; i < this.indexLevels.length; i++) {\n this.indexes[i] = i;\n }\n };\n Bidi.prototype.doOrder = function (sIndex, eIndex) {\n var max = this.indexLevels[sIndex];\n var min = max;\n var odd = max;\n var even = max;\n for (var i = sIndex + 1; i <= eIndex; ++i) {\n var data = this.indexLevels[i];\n if (data > max) {\n max = data;\n }\n else if (data < min) {\n min = data;\n }\n odd &= data;\n even |= data;\n }\n if ((even & 1) === 0) {\n return;\n }\n if ((odd & 1) === 1) {\n this.reArrange(sIndex, eIndex + 1);\n return;\n }\n min |= 1;\n while (max >= min) {\n var pstart = sIndex;\n /*tslint:disable:no-constant-condition */\n while (true) {\n while (pstart <= eIndex) {\n if (this.indexLevels[pstart] >= max) {\n break;\n }\n pstart += 1;\n }\n if (pstart > eIndex) {\n break;\n }\n var pend = pstart + 1;\n while (pend <= eIndex) {\n if (this.indexLevels[pend] < max) {\n break;\n }\n pend += 1;\n }\n this.reArrange(pstart, pend);\n pstart = pend + 1;\n }\n max -= 1;\n }\n };\n Bidi.prototype.reArrange = function (i, j) {\n var length = (i + j) / 2;\n --j;\n for (; i < length; ++i, --j) {\n var temp = this.indexes[i];\n this.indexes[i] = this.indexes[j];\n this.indexes[j] = temp;\n }\n };\n Bidi.prototype.update = function () {\n this.mirroringShapeCharacters.setValue(40, 41);\n this.mirroringShapeCharacters.setValue(41, 40);\n this.mirroringShapeCharacters.setValue(60, 62);\n this.mirroringShapeCharacters.setValue(62, 60);\n this.mirroringShapeCharacters.setValue(91, 93);\n this.mirroringShapeCharacters.setValue(93, 91);\n this.mirroringShapeCharacters.setValue(123, 125);\n this.mirroringShapeCharacters.setValue(125, 123);\n this.mirroringShapeCharacters.setValue(171, 187);\n this.mirroringShapeCharacters.setValue(187, 171);\n this.mirroringShapeCharacters.setValue(8249, 8250);\n this.mirroringShapeCharacters.setValue(8250, 8249);\n this.mirroringShapeCharacters.setValue(8261, 8262);\n this.mirroringShapeCharacters.setValue(8262, 8261);\n this.mirroringShapeCharacters.setValue(8317, 8318);\n this.mirroringShapeCharacters.setValue(8318, 8317);\n this.mirroringShapeCharacters.setValue(8333, 8334);\n this.mirroringShapeCharacters.setValue(8334, 8333);\n this.mirroringShapeCharacters.setValue(8712, 8715);\n this.mirroringShapeCharacters.setValue(8713, 8716);\n this.mirroringShapeCharacters.setValue(8714, 8717);\n this.mirroringShapeCharacters.setValue(8715, 8712);\n this.mirroringShapeCharacters.setValue(8716, 8713);\n this.mirroringShapeCharacters.setValue(8717, 8714);\n this.mirroringShapeCharacters.setValue(8725, 10741);\n this.mirroringShapeCharacters.setValue(8764, 8765);\n this.mirroringShapeCharacters.setValue(8765, 8764);\n this.mirroringShapeCharacters.setValue(8771, 8909);\n this.mirroringShapeCharacters.setValue(8786, 8787);\n this.mirroringShapeCharacters.setValue(8787, 8786);\n this.mirroringShapeCharacters.setValue(8788, 8789);\n this.mirroringShapeCharacters.setValue(8789, 8788);\n this.mirroringShapeCharacters.setValue(8804, 8805);\n this.mirroringShapeCharacters.setValue(8805, 8804);\n this.mirroringShapeCharacters.setValue(8806, 8807);\n this.mirroringShapeCharacters.setValue(8807, 8806);\n this.mirroringShapeCharacters.setValue(8808, 8809);\n this.mirroringShapeCharacters.setValue(8809, 8808);\n this.mirroringShapeCharacters.setValue(8810, 8811);\n this.mirroringShapeCharacters.setValue(8811, 8810);\n this.mirroringShapeCharacters.setValue(8814, 8815);\n this.mirroringShapeCharacters.setValue(8815, 8814);\n this.mirroringShapeCharacters.setValue(8816, 8817);\n this.mirroringShapeCharacters.setValue(8817, 8816);\n this.mirroringShapeCharacters.setValue(8818, 8819);\n this.mirroringShapeCharacters.setValue(8819, 8818);\n this.mirroringShapeCharacters.setValue(8820, 8821);\n this.mirroringShapeCharacters.setValue(8821, 8820);\n this.mirroringShapeCharacters.setValue(8822, 8823);\n this.mirroringShapeCharacters.setValue(8823, 8822);\n this.mirroringShapeCharacters.setValue(8824, 8825);\n this.mirroringShapeCharacters.setValue(8825, 8824);\n this.mirroringShapeCharacters.setValue(8826, 8827);\n this.mirroringShapeCharacters.setValue(8827, 8826);\n this.mirroringShapeCharacters.setValue(8828, 8829);\n this.mirroringShapeCharacters.setValue(8829, 8828);\n this.mirroringShapeCharacters.setValue(8830, 8831);\n this.mirroringShapeCharacters.setValue(8831, 8830);\n this.mirroringShapeCharacters.setValue(8832, 8833);\n this.mirroringShapeCharacters.setValue(8833, 8832);\n this.mirroringShapeCharacters.setValue(8834, 8835);\n this.mirroringShapeCharacters.setValue(8835, 8834);\n this.mirroringShapeCharacters.setValue(8836, 8837);\n this.mirroringShapeCharacters.setValue(8837, 8836);\n this.mirroringShapeCharacters.setValue(8838, 8839);\n this.mirroringShapeCharacters.setValue(8839, 8838);\n this.mirroringShapeCharacters.setValue(8840, 8841);\n this.mirroringShapeCharacters.setValue(8841, 8840);\n this.mirroringShapeCharacters.setValue(8842, 8843);\n this.mirroringShapeCharacters.setValue(8843, 8842);\n this.mirroringShapeCharacters.setValue(8847, 8848);\n this.mirroringShapeCharacters.setValue(8848, 8847);\n this.mirroringShapeCharacters.setValue(8849, 8850);\n this.mirroringShapeCharacters.setValue(8850, 8849);\n this.mirroringShapeCharacters.setValue(8856, 10680);\n this.mirroringShapeCharacters.setValue(8866, 8867);\n this.mirroringShapeCharacters.setValue(8867, 8866);\n this.mirroringShapeCharacters.setValue(8870, 10974);\n this.mirroringShapeCharacters.setValue(8872, 10980);\n this.mirroringShapeCharacters.setValue(8873, 10979);\n this.mirroringShapeCharacters.setValue(8875, 10981);\n this.mirroringShapeCharacters.setValue(8880, 8881);\n this.mirroringShapeCharacters.setValue(8881, 8880);\n this.mirroringShapeCharacters.setValue(8882, 8883);\n this.mirroringShapeCharacters.setValue(8883, 8882);\n this.mirroringShapeCharacters.setValue(8884, 8885);\n this.mirroringShapeCharacters.setValue(8885, 8884);\n /*tslint:disable:max-func-body-length */\n this.mirroringShapeCharacters.setValue(8886, 8887);\n this.mirroringShapeCharacters.setValue(8887, 8886);\n this.mirroringShapeCharacters.setValue(8905, 8906);\n this.mirroringShapeCharacters.setValue(8906, 8905);\n this.mirroringShapeCharacters.setValue(8907, 8908);\n this.mirroringShapeCharacters.setValue(8908, 8907);\n this.mirroringShapeCharacters.setValue(8909, 8771);\n this.mirroringShapeCharacters.setValue(8912, 8913);\n this.mirroringShapeCharacters.setValue(8913, 8912);\n this.mirroringShapeCharacters.setValue(8918, 8919);\n this.mirroringShapeCharacters.setValue(8919, 8918);\n this.mirroringShapeCharacters.setValue(8920, 8921);\n this.mirroringShapeCharacters.setValue(8921, 8920);\n this.mirroringShapeCharacters.setValue(8922, 8923);\n this.mirroringShapeCharacters.setValue(8923, 8922);\n this.mirroringShapeCharacters.setValue(8924, 8925);\n this.mirroringShapeCharacters.setValue(8925, 8924);\n this.mirroringShapeCharacters.setValue(8926, 8927);\n this.mirroringShapeCharacters.setValue(8927, 8926);\n this.mirroringShapeCharacters.setValue(8928, 8929);\n this.mirroringShapeCharacters.setValue(8929, 8928);\n this.mirroringShapeCharacters.setValue(8930, 8931);\n this.mirroringShapeCharacters.setValue(8931, 8930);\n this.mirroringShapeCharacters.setValue(8932, 8933);\n this.mirroringShapeCharacters.setValue(8933, 8932);\n this.mirroringShapeCharacters.setValue(8934, 8935);\n this.mirroringShapeCharacters.setValue(8935, 8934);\n this.mirroringShapeCharacters.setValue(8936, 8937);\n this.mirroringShapeCharacters.setValue(8937, 8936);\n this.mirroringShapeCharacters.setValue(8938, 8939);\n this.mirroringShapeCharacters.setValue(8939, 8938);\n this.mirroringShapeCharacters.setValue(8940, 8941);\n this.mirroringShapeCharacters.setValue(8941, 8940);\n this.mirroringShapeCharacters.setValue(8944, 8945);\n this.mirroringShapeCharacters.setValue(8945, 8944);\n this.mirroringShapeCharacters.setValue(8946, 8954);\n this.mirroringShapeCharacters.setValue(8947, 8955);\n this.mirroringShapeCharacters.setValue(8948, 8956);\n this.mirroringShapeCharacters.setValue(8950, 8957);\n this.mirroringShapeCharacters.setValue(8951, 8958);\n this.mirroringShapeCharacters.setValue(8954, 8946);\n this.mirroringShapeCharacters.setValue(8955, 8947);\n this.mirroringShapeCharacters.setValue(8956, 8948);\n this.mirroringShapeCharacters.setValue(8957, 8950);\n this.mirroringShapeCharacters.setValue(8958, 8951);\n this.mirroringShapeCharacters.setValue(8968, 8969);\n this.mirroringShapeCharacters.setValue(8969, 8968);\n this.mirroringShapeCharacters.setValue(8970, 8971);\n this.mirroringShapeCharacters.setValue(8971, 8970);\n this.mirroringShapeCharacters.setValue(9001, 9002);\n this.mirroringShapeCharacters.setValue(9002, 9001);\n this.mirroringShapeCharacters.setValue(10088, 10089);\n this.mirroringShapeCharacters.setValue(10089, 10088);\n this.mirroringShapeCharacters.setValue(10090, 10091);\n this.mirroringShapeCharacters.setValue(10091, 10090);\n this.mirroringShapeCharacters.setValue(10092, 10093);\n this.mirroringShapeCharacters.setValue(10093, 10092);\n this.mirroringShapeCharacters.setValue(10094, 10095);\n this.mirroringShapeCharacters.setValue(10095, 10094);\n this.mirroringShapeCharacters.setValue(10096, 10097);\n this.mirroringShapeCharacters.setValue(10097, 10096);\n this.mirroringShapeCharacters.setValue(10098, 10099);\n this.mirroringShapeCharacters.setValue(10099, 10098);\n this.mirroringShapeCharacters.setValue(10100, 10101);\n this.mirroringShapeCharacters.setValue(10101, 10100);\n this.mirroringShapeCharacters.setValue(10197, 10198);\n this.mirroringShapeCharacters.setValue(10198, 10197);\n this.mirroringShapeCharacters.setValue(10205, 10206);\n this.mirroringShapeCharacters.setValue(10206, 10205);\n this.mirroringShapeCharacters.setValue(10210, 10211);\n this.mirroringShapeCharacters.setValue(10211, 10210);\n this.mirroringShapeCharacters.setValue(10212, 10213);\n this.mirroringShapeCharacters.setValue(10213, 10212);\n this.mirroringShapeCharacters.setValue(10214, 10215);\n this.mirroringShapeCharacters.setValue(10215, 10214);\n this.mirroringShapeCharacters.setValue(10216, 10217);\n this.mirroringShapeCharacters.setValue(10217, 10216);\n this.mirroringShapeCharacters.setValue(10218, 10219);\n this.mirroringShapeCharacters.setValue(10219, 10218);\n this.mirroringShapeCharacters.setValue(10627, 10628);\n this.mirroringShapeCharacters.setValue(10628, 10627);\n this.mirroringShapeCharacters.setValue(10629, 10630);\n this.mirroringShapeCharacters.setValue(10630, 10629);\n this.mirroringShapeCharacters.setValue(10631, 10632);\n this.mirroringShapeCharacters.setValue(10632, 10631);\n this.mirroringShapeCharacters.setValue(10633, 10634);\n this.mirroringShapeCharacters.setValue(10634, 10633);\n this.mirroringShapeCharacters.setValue(10635, 10636);\n this.mirroringShapeCharacters.setValue(10636, 10635);\n this.mirroringShapeCharacters.setValue(10637, 10640);\n this.mirroringShapeCharacters.setValue(10638, 10639);\n this.mirroringShapeCharacters.setValue(10639, 10638);\n this.mirroringShapeCharacters.setValue(10640, 10637);\n this.mirroringShapeCharacters.setValue(10641, 10642);\n this.mirroringShapeCharacters.setValue(10642, 10641);\n this.mirroringShapeCharacters.setValue(10643, 10644);\n this.mirroringShapeCharacters.setValue(10644, 10643);\n this.mirroringShapeCharacters.setValue(10645, 10646);\n this.mirroringShapeCharacters.setValue(10646, 10645);\n this.mirroringShapeCharacters.setValue(10647, 10648);\n this.mirroringShapeCharacters.setValue(10648, 10647);\n this.mirroringShapeCharacters.setValue(10680, 8856);\n this.mirroringShapeCharacters.setValue(10688, 10689);\n this.mirroringShapeCharacters.setValue(10689, 10688);\n this.mirroringShapeCharacters.setValue(10692, 10693);\n this.mirroringShapeCharacters.setValue(10693, 10692);\n this.mirroringShapeCharacters.setValue(10703, 10704);\n this.mirroringShapeCharacters.setValue(10704, 10703);\n this.mirroringShapeCharacters.setValue(10705, 10706);\n this.mirroringShapeCharacters.setValue(10706, 10705);\n this.mirroringShapeCharacters.setValue(10708, 10709);\n this.mirroringShapeCharacters.setValue(10709, 10708);\n this.mirroringShapeCharacters.setValue(10712, 10713);\n this.mirroringShapeCharacters.setValue(10713, 10712);\n this.mirroringShapeCharacters.setValue(10714, 10715);\n this.mirroringShapeCharacters.setValue(10715, 10714);\n this.mirroringShapeCharacters.setValue(10741, 8725);\n this.mirroringShapeCharacters.setValue(10744, 10745);\n this.mirroringShapeCharacters.setValue(10745, 10744);\n this.mirroringShapeCharacters.setValue(10748, 10749);\n this.mirroringShapeCharacters.setValue(10749, 10748);\n this.mirroringShapeCharacters.setValue(10795, 10796);\n this.mirroringShapeCharacters.setValue(10796, 10795);\n this.mirroringShapeCharacters.setValue(10797, 10796);\n this.mirroringShapeCharacters.setValue(10798, 10797);\n this.mirroringShapeCharacters.setValue(10804, 10805);\n this.mirroringShapeCharacters.setValue(10805, 10804);\n this.mirroringShapeCharacters.setValue(10812, 10813);\n this.mirroringShapeCharacters.setValue(10813, 10812);\n this.mirroringShapeCharacters.setValue(10852, 10853);\n this.mirroringShapeCharacters.setValue(10853, 10852);\n this.mirroringShapeCharacters.setValue(10873, 10874);\n this.mirroringShapeCharacters.setValue(10874, 10873);\n this.mirroringShapeCharacters.setValue(10877, 10878);\n this.mirroringShapeCharacters.setValue(10878, 10877);\n this.mirroringShapeCharacters.setValue(10879, 10880);\n this.mirroringShapeCharacters.setValue(10880, 10879);\n this.mirroringShapeCharacters.setValue(10881, 10882);\n this.mirroringShapeCharacters.setValue(10882, 10881);\n this.mirroringShapeCharacters.setValue(10883, 10884);\n this.mirroringShapeCharacters.setValue(10884, 10883);\n this.mirroringShapeCharacters.setValue(10891, 10892);\n this.mirroringShapeCharacters.setValue(10892, 10891);\n this.mirroringShapeCharacters.setValue(10897, 10898);\n this.mirroringShapeCharacters.setValue(10898, 10897);\n this.mirroringShapeCharacters.setValue(10899, 10900);\n this.mirroringShapeCharacters.setValue(10900, 10899);\n this.mirroringShapeCharacters.setValue(10901, 10902);\n this.mirroringShapeCharacters.setValue(10902, 10901);\n this.mirroringShapeCharacters.setValue(10903, 10904);\n this.mirroringShapeCharacters.setValue(10904, 10903);\n this.mirroringShapeCharacters.setValue(10905, 10906);\n this.mirroringShapeCharacters.setValue(10906, 10905);\n this.mirroringShapeCharacters.setValue(10907, 10908);\n this.mirroringShapeCharacters.setValue(10908, 10907);\n this.mirroringShapeCharacters.setValue(10913, 10914);\n this.mirroringShapeCharacters.setValue(10914, 10913);\n this.mirroringShapeCharacters.setValue(10918, 10919);\n this.mirroringShapeCharacters.setValue(10919, 10918);\n this.mirroringShapeCharacters.setValue(10920, 10921);\n this.mirroringShapeCharacters.setValue(10921, 10920);\n this.mirroringShapeCharacters.setValue(10922, 10923);\n this.mirroringShapeCharacters.setValue(10923, 10922);\n this.mirroringShapeCharacters.setValue(10924, 10925);\n this.mirroringShapeCharacters.setValue(10925, 10924);\n this.mirroringShapeCharacters.setValue(10927, 10928);\n this.mirroringShapeCharacters.setValue(10928, 10927);\n this.mirroringShapeCharacters.setValue(10931, 10932);\n this.mirroringShapeCharacters.setValue(10932, 10931);\n this.mirroringShapeCharacters.setValue(10939, 10940);\n this.mirroringShapeCharacters.setValue(10940, 10939);\n this.mirroringShapeCharacters.setValue(10941, 10942);\n this.mirroringShapeCharacters.setValue(10942, 10941);\n this.mirroringShapeCharacters.setValue(10943, 10944);\n this.mirroringShapeCharacters.setValue(10944, 10943);\n this.mirroringShapeCharacters.setValue(10945, 10946);\n this.mirroringShapeCharacters.setValue(10946, 10945);\n this.mirroringShapeCharacters.setValue(10947, 10948);\n this.mirroringShapeCharacters.setValue(10948, 10947);\n this.mirroringShapeCharacters.setValue(10949, 10950);\n this.mirroringShapeCharacters.setValue(10950, 10949);\n this.mirroringShapeCharacters.setValue(10957, 10958);\n this.mirroringShapeCharacters.setValue(10958, 10957);\n this.mirroringShapeCharacters.setValue(10959, 10960);\n this.mirroringShapeCharacters.setValue(10960, 10959);\n this.mirroringShapeCharacters.setValue(10961, 10962);\n this.mirroringShapeCharacters.setValue(10962, 10961);\n this.mirroringShapeCharacters.setValue(10963, 10964);\n this.mirroringShapeCharacters.setValue(10964, 10963);\n this.mirroringShapeCharacters.setValue(10965, 10966);\n this.mirroringShapeCharacters.setValue(10966, 10965);\n this.mirroringShapeCharacters.setValue(10974, 8870);\n this.mirroringShapeCharacters.setValue(10979, 8873);\n this.mirroringShapeCharacters.setValue(10980, 8872);\n this.mirroringShapeCharacters.setValue(10981, 8875);\n this.mirroringShapeCharacters.setValue(10988, 10989);\n this.mirroringShapeCharacters.setValue(10989, 10988);\n this.mirroringShapeCharacters.setValue(10999, 11000);\n this.mirroringShapeCharacters.setValue(11000, 10999);\n this.mirroringShapeCharacters.setValue(11001, 11002);\n this.mirroringShapeCharacters.setValue(11002, 11001);\n this.mirroringShapeCharacters.setValue(12296, 12297);\n this.mirroringShapeCharacters.setValue(12297, 12296);\n this.mirroringShapeCharacters.setValue(12298, 12299);\n this.mirroringShapeCharacters.setValue(12299, 12298);\n this.mirroringShapeCharacters.setValue(12300, 12301);\n this.mirroringShapeCharacters.setValue(12301, 12300);\n this.mirroringShapeCharacters.setValue(12302, 12303);\n this.mirroringShapeCharacters.setValue(12303, 12302);\n this.mirroringShapeCharacters.setValue(12304, 12305);\n this.mirroringShapeCharacters.setValue(12305, 12304);\n this.mirroringShapeCharacters.setValue(12308, 12309);\n this.mirroringShapeCharacters.setValue(12309, 12308);\n this.mirroringShapeCharacters.setValue(12310, 12311);\n this.mirroringShapeCharacters.setValue(12311, 12310);\n this.mirroringShapeCharacters.setValue(12312, 12313);\n this.mirroringShapeCharacters.setValue(12313, 12312);\n this.mirroringShapeCharacters.setValue(12314, 12315);\n this.mirroringShapeCharacters.setValue(12315, 12314);\n this.mirroringShapeCharacters.setValue(65288, 65289);\n this.mirroringShapeCharacters.setValue(65289, 65288);\n this.mirroringShapeCharacters.setValue(65308, 65310);\n this.mirroringShapeCharacters.setValue(65310, 65308);\n this.mirroringShapeCharacters.setValue(65339, 65341);\n this.mirroringShapeCharacters.setValue(65341, 65339);\n this.mirroringShapeCharacters.setValue(65371, 65373);\n this.mirroringShapeCharacters.setValue(65373, 65371);\n this.mirroringShapeCharacters.setValue(65375, 65376);\n this.mirroringShapeCharacters.setValue(65376, 65375);\n this.mirroringShapeCharacters.setValue(65378, 65379);\n this.mirroringShapeCharacters.setValue(65379, 65378);\n };\n return Bidi;\n}());\nexport { Bidi };\nvar RtlCharacters = /** @class */ (function () {\n //#endregion\n //#region constructors\n function RtlCharacters() {\n //#region fields\n /// \n /// Specifies the character types.\n /// \n this.types = [];\n /// \n /// Specifies the text order (RTL or LTR).\n /// \n this.textOrder = -1;\n /// \n /// Specifies the RTL character types.\n /// \n /* tslint:disable-next-line:prefer-array-literal */\n this.rtlCharacterTypes = new Array(65536);\n //#endregion\n //#region constants\n /// \n /// Left-to-Right (Non-European or non-Arabic digits).\n /// \n this.L = 0;\n /// \n /// Left-to-Right Embedding\n /// \n this.LRE = 1;\n /// \n /// Left-to-Right Override\n /// \n this.LRO = 2;\n /// \n /// Right-to-Left (Hebrew alphabet, and related punctuation).\n /// \n this.R = 3;\n /// \n /// Right-to-Left Arabic \n /// \n this.AL = 4;\n /// \n /// Right-to-Left Embedding.\n /// \n this.RLE = 5;\n /// \n /// Right-to-Left Override\n /// \n this.RLO = 6;\n /// \n /// Pop Directional Format\n /// \n this.PDF = 7;\n /// \n /// European Number (European digits, Eastern Arabic-Indic digits).\n /// \n this.EN = 8;\n /// \n /// European Number Separator (Plus sign, Minus sign).\n /// \n this.ES = 9;\n /// \n /// European Number Terminator (Degree sign, currency symbols).\n /// \n this.ET = 10;\n /// \n /// Arabic Number (Arabic-Indic digits, Arabic decimal and thousands separators).\n /// \n this.AN = 11;\n /// \n /// Common Number Separator (Colon, Comma, Full Stop, No-Break Space.\n /// \n this.CS = 12;\n /// \n /// Nonspacing Mark (Characters with the General_Category values).\n /// \n this.NSM = 13;\n /// \n /// Boundary Neutral (Default ignorables, non-characters, and control characters, other than those explicitly given other types.)\n /// \n this.BN = 14;\n /// \n /// Paragraph Separator (Paragraph separator, appropriate Newline Functions, higher-level protocol paragraph determination).\n /// \n this.B = 15;\n /// \n /// \tSegment Separator (tab).\n /// \n this.S = 16;\n /// \n /// Whitespace (Space, Figure space, Line separator, Form feed, General Punctuation spaces).\n /// \n this.WS = 17;\n /// \n /// Other Neutrals (All other characters, including object replacement character).\n /// \n this.ON = 18;\n /// \n /// RTL character types.\n /// \n this.charTypes = [\n this.L, this.EN, this.BN, this.ES, this.ES, this.S, this.ET, this.ET, this.B, this.AN, this.AN, this.S, this.CS, this.CS,\n this.WS, this.NSM, this.NSM, this.B, this.BN, 27, this.BN, 28, 30, this.B, 31, 31, this.S, 32, 32, this.WS, 33, 34,\n this.ON, 35, 37, this.ET, 38, 42, this.ON, 43, 43, this.ET, 44, 44, this.CS, 45, 45, this.ET, 46, 46, this.CS,\n 47, 47, this.CS, 48, 57, this.EN, 58, 58, this.CS, 59, 64, this.ON, 65, 90, this.L, 91, 96, this.ON, 97, 122, this.L,\n 123, 126, this.ON, 127, 132, this.BN, 133, 133, this.B, 134, 159, this.BN, 160, 160, this.CS,\n 161, 161, this.ON, 162, 165, this.ET, 166, 169, this.ON, 170, 170, this.L, 171, 175, this.ON,\n 176, 177, this.ET, 178, 179, this.EN, 180, 180, this.ON, 181, 181, this.L, 182, 184, this.ON,\n 185, 185, this.EN, 186, 186, this.L, 187, 191, this.ON, 192, 214, this.L, 215, 215, this.ON,\n 216, 246, this.L, 247, 247, this.ON, 248, 696, this.L, 697, 698, this.ON, 699, 705, this.L,\n 706, 719, this.ON, 720, 721, this.L, 722, 735, this.ON, 736, 740, this.L, 741, 749, this.ON,\n 750, 750, this.L, 751, 767, this.ON, 768, 855, this.NSM, 856, 860, this.L, 861, 879, this.NSM,\n 880, 883, this.L, 884, 885, this.ON, 886, 893, this.L, 894, 894, this.ON, 895, 899, this.L,\n 900, 901, this.ON, 902, 902, this.L, 903, 903, this.ON, 904, 1013, this.L, 1014, 1014, this.ON,\n 1015, 1154, this.L, 1155, 1158, this.NSM, 1159, 1159, this.L, 1160, 1161, this.NSM,\n 1162, 1417, this.L, 1418, 1418, this.ON, 1419, 1424, this.L, 1425, 1441, this.NSM,\n 1442, 1442, this.L, 1443, 1465, this.NSM, 1466, 1466, this.L, 1467, 1469, this.NSM,\n 1470, 1470, this.R, 1471, 1471, this.NSM, 1472, 1472, this.R, 1473, 1474, this.NSM,\n 1475, 1475, this.R, 1476, 1476, this.NSM, 1477, 1487, this.L, 1488, 1514, this.R,\n 1515, 1519, this.L, 1520, 1524, this.R, 1525, 1535, this.L, 1536, 1539, this.AL,\n 1540, 1547, this.L, 1548, 1548, this.CS, 1549, 1549, this.AL, 1550, 1551, this.ON,\n 1552, 1557, this.NSM, 1558, 1562, this.L, 1563, 1563, this.AL, 1564, 1566, this.L,\n 1567, 1567, this.AL, 1568, 1568, this.L, 1569, 1594, this.AL, 1595, 1599, this.L,\n 1600, 1610, this.AL, 1611, 1624, this.NSM, 1625, 1631, this.L, 1632, 1641, this.AN,\n 1642, 1642, this.ET, 1643, 1644, this.AN, 1645, 1647, this.AL, 1648, 1648, this.NSM,\n 1649, 1749, this.AL, 1750, 1756, this.NSM, 1757, 1757, this.AL, 1758, 1764, this.NSM,\n 1765, 1766, this.AL, 1767, 1768, this.NSM, 1769, 1769, this.ON, 1770, 1773, this.NSM,\n 1774, 1775, this.AL, 1776, 1785, this.EN, 1786, 1805, this.AL, 1806, 1806, this.L,\n 1807, 1807, this.BN, 1808, 1808, this.AL, 1809, 1809, this.NSM, 1810, 1839, this.AL,\n 1840, 1866, this.NSM, 1867, 1868, this.L, 1869, 1871, this.AL, 1872, 1919, this.L,\n 1920, 1957, this.AL, 1958, 1968, this.NSM, 1969, 1969, this.AL, 1970, 2304, this.L,\n 2305, 2306, this.NSM, 2307, 2363, this.L, 2364, 2364, this.NSM, 2365, 2368, this.L,\n 2369, 2376, this.NSM, 2377, 2380, this.L, 2381, 2381, this.NSM, 2382, 2384, this.L,\n 2385, 2388, this.NSM, 2389, 2401, this.L, 2402, 2403, this.NSM, 2404, 2432, this.L,\n 2433, 2433, this.NSM, 2434, 2491, this.L, 2492, 2492, this.NSM, 2493, 2496, this.L,\n 2497, 2500, this.NSM, 2501, 2508, this.L, 2509, 2509, this.NSM, 2510, 2529, this.L,\n 2530, 2531, this.NSM, 2532, 2545, this.L, 2546, 2547, this.ET, 2548, 2560, this.L,\n 2561, 2562, this.NSM, 2563, 2619, this.L, 2620, 2620, this.NSM, 2621, 2624, this.L,\n 2625, 2626, this.NSM, 2627, 2630, this.L, 2631, 2632, this.NSM, 2633, 2634, this.L,\n 2635, 2637, this.NSM, 2638, 2671, this.L, 2672, 2673, this.NSM, 2674, 2688, this.L,\n 2689, 2690, this.NSM, 2691, 2747, this.L, 2748, 2748, this.NSM, 2749, 2752, this.L,\n 2753, 2757, this.NSM, 2758, 2758, this.L, 2759, 2760, this.NSM, 2761, 2764, this.L,\n 2765, 2765, this.NSM, 2766, 2785, this.L, 2786, 2787, this.NSM, 2788, 2800, this.L,\n 2801, 2801, this.ET, 2802, 2816, this.L, 2817, 2817, this.NSM, 2818, 2875, this.L,\n 2876, 2876, this.NSM, 2877, 2878, this.L, 2879, 2879, this.NSM, 2880, 2880, this.L,\n 2881, 2883, this.NSM, 2884, 2892, this.L, 2893, 2893, this.NSM, 2894, 2901, this.L,\n 2902, 2902, this.NSM, 2903, 2945, this.L, 2946, 2946, this.NSM, 2947, 3007, this.L,\n 3008, 3008, this.NSM, 3009, 3020, this.L, 3021, 3021, this.NSM, 3022, 3058, this.L,\n 3059, 3064, this.ON, 3065, 3065, this.ET, 3066, 3066, this.ON, 3067, 3133, this.L,\n 3134, 3136, this.NSM, 3137, 3141, this.L, 3142, 3144, this.NSM, 3145, 3145, this.L,\n 3146, 3149, this.NSM, 3150, 3156, this.L, 3157, 3158, this.NSM, 3159, 3259, this.L,\n 3260, 3260, this.NSM, 3261, 3275, this.L, 3276, 3277, this.NSM, 3278, 3392, this.L,\n 3393, 3395, this.NSM, 3396, 3404, this.L, 3405, 3405, this.NSM, 3406, 3529, this.L,\n 3530, 3530, this.NSM, 3531, 3537, this.L, 3538, 3540, this.NSM, 3541, 3541, this.L,\n 3542, 3542, this.NSM, 3543, 3632, this.L, 3633, 3633, this.NSM, 3634, 3635, this.L,\n 3636, 3642, this.NSM, 3643, 3646, this.L, 3647, 3647, this.ET, 3648, 3654, this.L,\n 3655, 3662, this.NSM, 3663, 3760, this.L, 3761, 3761, this.NSM, 3762, 3763, this.L,\n 3764, 3769, this.NSM, 3770, 3770, this.L, 3771, 3772, this.NSM, 3773, 3783, this.L,\n 3784, 3789, this.NSM, 3790, 3863, this.L, 3864, 3865, this.NSM, 3866, 3892, this.L,\n 3893, 3893, this.NSM, 3894, 3894, this.L, 3895, 3895, this.NSM, 3896, 3896, this.L,\n 3897, 3897, this.NSM, 3898, 3901, this.ON, 3902, 3952, this.L, 3953, 3966, this.NSM,\n 3967, 3967, this.L, 3968, 3972, this.NSM, 3973, 3973, this.L, 3974, 3975, this.NSM,\n 3976, 3983, this.L, 3984, 3991, this.NSM, 3992, 3992, this.L, 3993, 4028, this.NSM,\n 4029, 4037, this.L, 4038, 4038, this.NSM, 4039, 4140, this.L, 4141, 4144, this.NSM,\n 4145, 4145, this.L, 4146, 4146, this.NSM, 4147, 4149, this.L, 4150, 4151, this.NSM,\n 4152, 4152, this.L, 4153, 4153, this.NSM, 4154, 4183, this.L, 4184, 4185, this.NSM,\n 4186, 5759, this.L, 5760, 5760, this.WS, 5761, 5786, this.L, 5787, 5788, this.ON,\n 5789, 5905, this.L, 5906, 5908, this.NSM, 5909, 5937, this.L, 5938, 5940, this.NSM,\n 5941, 5969, this.L, 5970, 5971, this.NSM, 5972, 6001, this.L, 6002, 6003, this.NSM,\n 6004, 6070, this.L, 6071, 6077, this.NSM, 6078, 6085, this.L, 6086, 6086, this.NSM,\n 6087, 6088, this.L, 6089, 6099, this.NSM, 6100, 6106, this.L, 6107, 6107, this.ET,\n 6108, 6108, this.L, 6109, 6109, this.NSM, 6110, 6127, this.L, 6128, 6137, this.ON,\n 6138, 6143, this.L, 6144, 6154, this.ON, 6155, 6157, this.NSM, 6158, 6158, this.WS,\n 6159, 6312, this.L, 6313, 6313, this.NSM, 6314, 6431, this.L, 6432, 6434, this.NSM,\n 6435, 6438, this.L, 6439, 6443, this.NSM, 6444, 6449, this.L, 6450, 6450, this.NSM,\n 6451, 6456, this.L, 6457, 6459, this.NSM, 6460, 6463, this.L, 6464, 6464, this.ON,\n 6465, 6467, this.L, 6468, 6469, this.ON, 6470, 6623, this.L, 6624, 6655, this.ON,\n 6656, 8124, this.L, 8125, 8125, this.ON, 8126, 8126, this.L, 8127, 8129, this.ON,\n 8130, 8140, this.L, 8141, 8143, this.ON, 8144, 8156, this.L, 8157, 8159, this.ON,\n 8160, 8172, this.L, 8173, 8175, this.ON, 8176, 8188, this.L, 8189, 8190, this.ON,\n 8191, 8191, this.L, 8192, 8202, this.WS, 8203, 8205, this.BN, 8206, 8206, this.L,\n 8207, 8207, this.R, 8208, 8231, this.ON, 8232, 8232, this.WS, 8233, 8233, this.B,\n 8234, 8234, this.LRE, 8235, 8235, this.RLE, 8236, 8236, this.PDF, 8237, 8237, this.LRO,\n 8238, 8238, this.RLO, 8239, 8239, this.WS, 8240, 8244, this.ET, 8245, 8276, this.ON,\n 8277, 8278, this.L, 8279, 8279, this.ON, 8280, 8286, this.L, 8287, 8287, this.WS,\n 8288, 8291, this.BN, 8292, 8297, this.L, 8298, 8303, this.BN, 8304, 8304, this.EN,\n 8305, 8307, this.L, 8308, 8313, this.EN, 8314, 8315, this.ET, 8316, 8318, this.ON,\n 8319, 8319, this.L, 8320, 8329, this.EN, 8330, 8331, this.ET, 8332, 8334, this.ON,\n 8335, 8351, this.L, 8352, 8369, this.ET, 8370, 8399, this.L, 8400, 8426, this.NSM,\n 8427, 8447, this.L, 8448, 8449, this.ON, 8450, 8450, this.L, 8451, 8454, this.ON,\n 8455, 8455, this.L, 8456, 8457, this.ON, 8458, 8467, this.L, 8468, 8468, this.ON,\n 8469, 8469, this.L, 8470, 8472, this.ON, 8473, 8477, this.L, 8478, 8483, this.ON,\n 8484, 8484, this.L, 8485, 8485, this.ON, 8486, 8486, this.L, 8487, 8487, this.ON,\n 8488, 8488, this.L, 8489, 8489, this.ON, 8490, 8493, this.L, 8494, 8494, this.ET,\n 8495, 8497, this.L, 8498, 8498, this.ON, 8499, 8505, this.L, 8506, 8507, this.ON,\n 8508, 8511, this.L, 8512, 8516, this.ON, 8517, 8521, this.L, 8522, 8523, this.ON,\n 8524, 8530, this.L, 8531, 8543, this.ON, 8544, 8591, this.L, 8592, 8721, this.ON,\n 8722, 8723, this.ET, 8724, 9013, this.ON, 9014, 9082, this.L, 9083, 9108, this.ON,\n 9109, 9109, this.L, 9110, 9168, this.ON, 9169, 9215, this.L, 9216, 9254, this.ON,\n 9255, 9279, this.L, 9280, 9290, this.ON, 9291, 9311, this.L, 9312, 9371, this.EN,\n 9372, 9449, this.L, 9450, 9450, this.EN, 9451, 9751, this.ON, 9752, 9752, this.L,\n 9753, 9853, this.ON, 9854, 9855, this.L, 9856, 9873, this.ON, 9874, 9887, this.L,\n 9888, 9889, this.ON, 9890, 9984, this.L, 9985, 9988, this.ON, 9989, 9989, this.L,\n 9990, 9993, this.ON, 9994, 9995, this.L, 9996, 10023, this.ON, 10024, 10024, this.L,\n 10025, 10059, this.ON, 10060, 10060, this.L, 10061, 10061, this.ON, 10062, 10062, this.L,\n 10063, 10066, this.ON, 10067, 10069, this.L, 10070, 10070, this.ON, 10071, 10071, this.L,\n 10072, 10078, this.ON, 10079, 10080, this.L, 10081, 10132, this.ON, 10133, 10135, this.L,\n 10136, 10159, this.ON, 10160, 10160, this.L, 10161, 10174, this.ON, 10175, 10191, this.L,\n 10192, 10219, this.ON, 10220, 10223, this.L, 10224, 11021, this.ON, 11022, 11903, this.L,\n 11904, 11929, this.ON, 11930, 11930, this.L, 11931, 12019, this.ON, 12020, 12031, this.L,\n 12032, 12245, this.ON, 12246, 12271, this.L, 12272, 12283, this.ON, 12284, 12287, this.L,\n 12288, 12288, this.WS, 12289, 12292, this.ON, 12293, 12295, this.L, 12296, 12320, this.ON,\n 12321, 12329, this.L, 12330, 12335, this.NSM, 12336, 12336, this.ON, 12337, 12341, this.L,\n 12342, 12343, this.ON, 12344, 12348, this.L, 12349, 12351, this.ON, 12352, 12440, this.L,\n 12441, 12442, this.NSM, 12443, 12444, this.ON, 12445, 12447, this.L, 12448, 12448, this.ON,\n 12449, 12538, this.L, 12539, 12539, this.ON, 12540, 12828, this.L, 12829, 12830, this.ON,\n 12831, 12879, this.L, 12880, 12895, this.ON, 12896, 12923, this.L, 12924, 12925, this.ON,\n 12926, 12976, this.L, 12977, 12991, this.ON, 12992, 13003, this.L, 13004, 13007, this.ON,\n 13008, 13174, this.L, 13175, 13178, this.ON, 13179, 13277, this.L, 13278, 13279, this.ON,\n 13280, 13310, this.L, 13311, 13311, this.ON, 13312, 19903, this.L, 19904, 19967, this.ON,\n 19968, 42127, this.L, 42128, 42182, this.ON, 42183, 64284, this.L, 64285, 64285, this.R,\n 64286, 64286, this.NSM, 64287, 64296, this.R, 64297, 64297, this.ET, 64298, 64310, this.R,\n 64311, 64311, this.L, 64312, 64316, this.R, 64317, 64317, this.L, 64318, 64318, this.R,\n 64319, 64319, this.L, 64320, 64321, this.R, 64322, 64322, this.L, 64323, 64324, this.R,\n 64325, 64325, this.L, 64326, 64335, this.R, 64336, 64433, this.AL, 64434, 64466, this.L,\n 64467, 64829, this.AL, 64830, 64831, this.ON, 64832, 64847, this.L, 64848, 64911, this.AL,\n 64912, 64913, this.L, 64914, 64967, this.AL, 64968, 65007, this.L, 65008, 65020, this.AL,\n 65021, 65021, this.ON, 65022, 65023, this.L, 65024, 65039, this.NSM, 65040, 65055, this.L,\n 65056, 65059, this.NSM, 65060, 65071, this.L, 65072, 65103, this.ON, 65104, 65104, this.CS,\n 65105, 65105, this.ON, 65106, 65106, this.CS, 65107, 65107, this.L, 65108, 65108, this.ON,\n 65109, 65109, this.CS, 65110, 65118, this.ON, 65119, 65119, this.ET, 65120, 65121, this.ON,\n 65122, 65123, this.ET, 65124, 65126, this.ON, 65127, 65127, this.L, 65128, 65128, this.ON,\n 65129, 65130, this.ET, 65131, 65131, this.ON, 65132, 65135, this.L, 65136, 65140, this.AL,\n 65141, 65141, this.L, 65142, 65276, this.AL, 65277, 65278, this.L, 65279, 65279, this.BN,\n 65280, 65280, this.L, 65281, 65282, this.ON, 65283, 65285, this.ET, 65286, 65290, this.ON,\n 65291, 65291, this.ET, 65292, 65292, this.CS, 65293, 65293, this.ET, 65294, 65294, this.CS,\n 65295, 65295, this.ES, 65296, 65305, this.EN, 65306, 65306, this.CS, 65307, 65312, this.ON,\n 65313, 65338, this.L, 65339, 65344, this.ON, 65345, 65370, this.L, 65371, 65381, this.ON,\n 65382, 65503, this.L, 65504, 65505, this.ET, 65506, 65508, this.ON, 65509, 65510, this.ET,\n 65511, 65511, this.L, 65512, 65518, this.ON, 65519, 65528, this.L, 65529, 65531, this.BN,\n 65532, 65533, this.ON, 65534, 65535, this.L\n ];\n for (var i = 0; i < this.charTypes.length; ++i) {\n var start = this.charTypes[i];\n var end = this.charTypes[++i];\n var b = this.charTypes[++i];\n while (start <= end) {\n this.rtlCharacterTypes[start++] = b;\n }\n }\n }\n //#endregion\n //#region implementation\n RtlCharacters.prototype.getVisualOrder = function (inputText, isRtl) {\n this.types = this.getCharacterCode(inputText);\n this.textOrder = isRtl ? this.LRE : this.L;\n this.doVisualOrder();\n var result = [];\n for (var i = 0; i < this.levels.length; i++) {\n result[i] = this.levels[i];\n }\n return result;\n };\n RtlCharacters.prototype.getCharacterCode = function (text) {\n var characterCodes = [];\n for (var i = 0; i < text.length; i++) {\n characterCodes[i] = this.rtlCharacterTypes[text[i].charCodeAt(0)];\n }\n return characterCodes;\n };\n RtlCharacters.prototype.setDefaultLevels = function () {\n for (var i = 0; i < this.length; i++) {\n this.levels[i] = this.textOrder;\n }\n };\n RtlCharacters.prototype.setLevels = function () {\n this.setDefaultLevels();\n for (var n = 0; n < this.length; ++n) {\n var level = this.levels[n];\n if ((level & 0x80) !== 0) {\n level &= 0x7f;\n this.result[n] = ((level & 0x1) === 0) ? this.L : this.R;\n }\n this.levels[n] = level;\n }\n };\n RtlCharacters.prototype.updateLevels = function (index, level, length) {\n if ((level & 1) === 0) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.R) {\n this.levels[i] += 1;\n }\n else if (this.result[i] !== this.L) {\n this.levels[i] += 2;\n }\n }\n }\n else {\n for (var i = index; i < length; ++i) {\n if (this.result[i] !== this.R) {\n this.levels[i] += 1;\n }\n }\n }\n };\n RtlCharacters.prototype.doVisualOrder = function () {\n this.length = this.types.length;\n this.result = this.types;\n this.levels = [];\n this.setLevels();\n this.length = this.getEmbeddedCharactersLength();\n var preview = this.textOrder;\n var i = 0;\n while (i < this.length) {\n var level = this.levels[i];\n var preType = ((Math.max(preview, level) & 0x1) === 0) ? this.L : this.R;\n var length_1 = i + 1;\n while (length_1 < this.length && this.levels[length_1] === level) {\n ++length_1;\n }\n var success = length_1 < this.length ? this.levels[length_1] : this.textOrder;\n var type = ((Math.max(success, level) & 0x1) === 0) ? this.L : this.R;\n this.checkNSM(i, length_1, level, preType, type);\n this.updateLevels(i, level, length_1);\n preview = level;\n i = length_1;\n }\n this.checkEmbeddedCharacters(this.length);\n };\n RtlCharacters.prototype.getEmbeddedCharactersLength = function () {\n var index = 0;\n for (var i = 0; i < this.length; ++i) {\n if (!(this.types[i] === this.LRE || this.types[i] === this.RLE || this.types[i] === this.LRO ||\n this.types[i] === this.RLO || this.types[i] === this.PDF || this.types[i] === this.BN)) {\n this.result[index] = this.result[i];\n this.levels[index] = this.levels[i];\n index++;\n }\n }\n return index;\n };\n RtlCharacters.prototype.checkEmbeddedCharacters = function (length) {\n for (var i = this.types.length - 1; i >= 0; --i) {\n if (this.types[i] === this.LRE || this.types[i] === this.RLE || this.types[i] === this.LRO ||\n this.types[i] === this.RLO || this.types[i] === this.PDF || this.types[i] === this.BN) {\n this.result[i] = this.types[i];\n this.levels[i] = -1;\n }\n else {\n length -= 1;\n this.result[i] = this.result[length];\n this.levels[i] = this.levels[length];\n }\n }\n for (var i = 0; i < this.types.length; i++) {\n if (this.levels[i] === -1) {\n if (i === 0) {\n this.levels[i] = this.textOrder;\n }\n else {\n this.levels[i] = this.levels[i - 1];\n }\n }\n }\n };\n RtlCharacters.prototype.checkNSM = function (index, length, level, startType, endType) {\n var charType = startType;\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.NSM) {\n this.result[i] = charType;\n }\n else {\n charType = this.result[i];\n }\n }\n this.checkEuropeanDigits(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanDigits = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.EN) {\n for (var j = i - 1; j >= index; --j) {\n if (this.result[j] === this.L || this.result[j] === this.R || this.result[j] === this.AL) {\n if (this.result[j] === this.AL) {\n this.result[i] = this.AN;\n }\n break;\n }\n }\n }\n }\n this.checkArabicCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkArabicCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.AL) {\n this.result[i] = this.R;\n }\n }\n this.checkEuropeanNumberSeparator(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanNumberSeparator = function (index, length, level, startType, endType) {\n for (var i = index + 1; i < length - 1; ++i) {\n if (this.result[i] === this.ES || this.result[i] === this.CS) {\n var preview = this.result[i - 1];\n var success = this.result[i + 1];\n if (preview === this.EN && success === this.EN) {\n this.result[i] = this.EN;\n }\n else if (this.result[i] === this.CS && preview === this.AN && success === this.AN) {\n this.result[i] = this.AN;\n }\n }\n }\n this.checkEuropeanNumberTerminator(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanNumberTerminator = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.ET) {\n var s = i;\n var b = [];\n b.push(this.ET);\n var l = this.getLength(s, length, b);\n var data = s === index ? startType : this.result[s - 1];\n if (data !== this.EN) {\n data = (l === length) ? endType : this.result[l];\n }\n if (data === this.EN) {\n for (var j = s; j < l; ++j) {\n this.result[j] = this.EN;\n }\n }\n i = l;\n }\n }\n this.checkOtherNeutrals(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkOtherNeutrals = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.ES || this.result[i] === this.ET || this.result[i] === this.CS) {\n this.result[i] = this.ON;\n }\n }\n this.checkOtherCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkOtherCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.EN) {\n var pst = startType;\n for (var j = i - 1; j >= index; --j) {\n if (this.result[j] === this.L || this.result[j] === this.R) {\n pst = this.result[j];\n break;\n }\n }\n if (pst === this.L) {\n this.result[i] = this.L;\n }\n }\n }\n this.checkCommanCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.getLength = function (index, length, validSet) {\n --index;\n while (++index < length) {\n var t = this.result[index];\n for (var i = 0; i < validSet.length; ++i) {\n if (t === validSet[i]) {\n index = this.getLength(++index, length, validSet);\n }\n }\n return index;\n }\n return length;\n };\n RtlCharacters.prototype.checkCommanCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.WS || this.result[i] === this.ON || this.result[i] === this.B ||\n this.result[i] === this.S) {\n var s = i;\n var byte = [this.B, this.S, this.WS, this.ON];\n var l = this.getLength(s, length, byte);\n var lt = 0;\n var tt = 0;\n var rt = 0;\n if (s === index) {\n lt = startType;\n }\n else {\n lt = this.result[s - 1];\n if (lt === this.AN) {\n lt = this.R;\n }\n else if (lt === this.EN) {\n lt = this.R;\n }\n }\n if (l === length) {\n tt = endType;\n }\n else {\n tt = this.result[l];\n if (tt === this.AN) {\n tt = this.R;\n }\n else if (tt === this.EN) {\n tt = this.R;\n }\n }\n if (lt === tt) {\n rt = lt;\n }\n else {\n rt = ((level & 0x1) === 0) ? this.L : this.R;\n }\n for (var j = s; j < l; ++j) {\n this.result[j] = rt;\n }\n i = l;\n }\n }\n };\n return RtlCharacters;\n}());\nexport { RtlCharacters };\n","import { PdfString } from './../../primitives/pdf-string';\nimport { ArabicShapeRenderer } from './rtl/rtl-text-shape';\nimport { PdfTextDirection } from './../enum';\nimport { Bidi } from './rtl/rtl-bidirectional';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar RtlRenderer = /** @class */ (function () {\n function RtlRenderer() {\n //region Constants\n /// Open bracket symbol.\n /// \n this.openBracket = '(';\n /// \n /// Close bracket symbol.\n /// \n this.closeBracket = ')';\n //#endregion\n }\n //#region Constructors\n /// \n /// Initializes a new instance of the class.\n /// \n // public constructor() {\n // }\n //#region Public Methods\n /// \n /// Layouts text. Changes blocks position in the RTL text.\n /// Ligates the text if needed.\n /// \n /// Line of the text.\n /// Font to be used for string printing.\n /// Font alignment.\n /// Indicates whether Word Spacing used or not.\n /// Layout string.\n RtlRenderer.prototype.layout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var result = [];\n if (font.Unicode) {\n result = this.customLayout(line, rtl, format, font, wordSpace);\n }\n else {\n result = [];\n result[0] = line;\n }\n return result;\n };\n /// \n /// Layouts a string and splits it by the words and using correct lay outing.\n /// \n /// Text line.\n /// Font object.\n /// Indicates whether RTL should be applied.\n /// Indicates whether word spacing is used.\n /// Array of words if converted, null otherwise.\n RtlRenderer.prototype.splitLayout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var words = [];\n var system = false;\n if (!system || words == null) {\n words = this.customSplitLayout(line, font, rtl, wordSpace, format);\n }\n return words;\n };\n //#endregion\n //#region Implementation\n // private isEnglish( word : string) : boolean\n // {\n // let c : string = (word.length > 0) ? word[0] : '';\n // return (c >= '0' && c < 'ÿ');\n // }\n // private keepOrder( words : string, startIndex : number, count: number, result : string[], resultIndex : number) : void\n // {\n // for (let i : number = 0, ri = resultIndex - count + 1; i < count; ++i, ++ri) {\n // result[ri] = words[i + startIndex];\n // }\n // }\n /// \n /// Uses system API to layout the text.\n /// \n /// Line of the text to be layouted.\n /// Font which is used for text printing.\n /// Indicates whether we use RTL or RTL lay outing of the text container.\n /// Layout string.\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.getGlyphIndex = function (line, font, rtl, /*out*/ glyphs, custom) {\n var success = true;\n var fail = false;\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n glyphs = null;\n if (line.length === 0) {\n return { success: fail, glyphs: glyphs };\n }\n var renderer = new ArabicShapeRenderer();\n var text = renderer.shape(line, 0);\n var internalFont = font.fontInternal;\n var ttfReader = internalFont.ttfReader;\n glyphs = new Uint16Array(text.length);\n var i = 0;\n for (var k = 0, len = text.length; k < len; k++) {\n var ch = text[k];\n var glyphInfo = ttfReader.getGlyph(ch);\n if (glyphInfo !== null && typeof glyphInfo !== 'undefined') {\n glyphs[i++] = (glyphInfo).index;\n }\n }\n return { success: success, glyphs: glyphs };\n };\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.customLayout = function (line, rtl, format, font, wordSpace) {\n if (wordSpace === null || typeof wordSpace === 'undefined') {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n var result = null;\n //bidirectional order.\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n var bidi = new Bidi();\n result = bidi.getLogicalToVisualString(line, rtl);\n }\n return result;\n }\n else {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var layouted = null;\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n var renderer = new ArabicShapeRenderer();\n var txt = renderer.shape(line, 0);\n layouted = this.customLayout(txt, rtl, format);\n }\n // else {\n // layouted = this.customLayout(line, rtl, format);\n // }\n // We have unicode font, but from the file. \n var result = [];\n // Split the text by words if word spacing is not default.\n if (wordSpace) {\n var words = layouted.split('');\n var count = words.length;\n for (var i = 0; i < count; i++) {\n words[i] = this.addChars(font, words[i]);\n }\n result = words;\n }\n else {\n result = [];\n result[0] = this.addChars(font, layouted);\n }\n return result;\n }\n };\n /// \n /// Add information about used glyphs to the font.\n /// \n /// Font used for text rendering.\n /// Array of used glyphs.\n /// String in the form to be written to the file.\n RtlRenderer.prototype.addChars = function (font, glyphs) {\n var line = glyphs;\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n var text = line;\n var internalFont = font.fontInternal;\n var ttfReader = internalFont.ttfReader;\n font.setSymbols(text);\n // Reconvert string according to unicode standard.\n text = ttfReader.convertString(text);\n var bytes = PdfString.toUnicodeArray(text, false);\n text = PdfString.byteToString(bytes);\n return text;\n // else {\n // if (font == null) {\n // throw new Error('ArgumentNullException : font');\n // }\n // if (glyphs == null) {\n // throw new Error('ArgumentNullException : glyphs');\n // }\n // // Mark the chars as used.\n // let text : string = '';\n // font.setSymbols(glyphs);\n // // Create string from the glyphs.\n // \n // let chars : string[] = [];\n // for (let i : number = 0; i < glyphs.length; i++) {\n // chars[i] = glyphs[i].toString();\n // }\n // for (let j : number = 0 ; j < chars.length; j++) {\n // text = text + chars[j];\n // }\n // let bytes : number[] = PdfString.toUnicodeArray(text, false);\n // text = PdfString.byteToString(bytes);\n // return text;\n // }\n };\n /// \n /// Layouts a string and splits it by the words by using custom lay outing.\n /// \n /// Text line.\n /// Font object.\n /// Indicates whether RTL should be applied.\n /// Indicates whether word spacing is used.\n /// Array of words if converted, null otherwise.\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.customSplitLayout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var reversedLine = this.customLayout(line, rtl, format);\n var words = reversedLine.split('');\n return words;\n };\n return RtlRenderer;\n}());\nexport { RtlRenderer };\n","/**\n * PdfGraphics.ts class for EJ2-PDF\n */\nimport { PdfColorSpace, TextRenderingMode, PdfFillMode, PdfTextAlignment } from './enum';\nimport { PdfVerticalAlignment, PdfBlendMode } from './enum';\nimport { PdfSubSuperScript } from './fonts/enum';\nimport { PdfStreamWriter } from './../input-output/pdf-stream-writer';\nimport { PdfPen } from './pdf-pen';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfSolidBrush } from './brushes/pdf-solid-brush';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTransformationMatrix } from './pdf-transformation-matrix';\nimport { PointF, SizeF, RectangleF } from './../drawing/pdf-drawing';\nimport { ProcedureSets } from './constants';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfStringFormat } from './fonts/pdf-string-format';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfStringLayouter, LineType } from './fonts/string-layouter';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { StringTokenizer } from './fonts/string-tokenizer';\nimport { PdfAutomaticFieldInfoCollection } from './../document/automatic-fields/automatic-field-info-collection';\nimport { PdfAutomaticFieldInfo } from './../document/automatic-fields/automatic-field-info';\nimport { Operators } from './../input-output/pdf-operators';\nimport { UnicodeTrueTypeFont } from './fonts/unicode-true-type-font';\nimport { InternalEnum } from './../primitives/pdf-string';\nimport { RtlRenderer } from './fonts/rtl-renderer';\nimport { PdfTextDirection } from './enum';\n/**\n * `PdfGraphics` class represents a graphics context of the objects.\n * It's used for performing all the graphics operations.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * //graphics of the page\n * let page1Graphics : PdfGraphics = page1.graphics;\n * // draw the text on the page1 graphics\n * page1Graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfGraphics = /** @class */ (function () {\n function PdfGraphics(arg1, arg2, arg3) {\n /**\n * Represents the `Current color space`.\n * @private\n */\n this.currentColorSpace = PdfColorSpace.Rgb;\n /**\n * Stores `previous rendering mode`.\n * @private\n */\n this.previousTextRenderingMode = TextRenderingMode.Fill;\n /**\n * Previous `character spacing` value or 0.\n * @private\n */\n this.previousCharacterSpacing = 0.0;\n /**\n * Previous `word spacing` value or 0.\n * @private\n */\n this.previousWordSpacing = 0.0;\n /**\n * The `previously used text scaling` value.\n * @private\n */\n this.previousTextScaling = 100.0;\n /**\n * Instance of `ProcedureSets` class.\n * @private\n */\n this.procedureSets = new ProcedureSets();\n /**\n * To check wihether it is a `direct text rendering`.\n * @default true\n * @private\n */\n this.isNormalRender = true;\n /**\n * check whether to `use font size` to calculate the shift.\n * @default false\n * @private\n */\n this.isUseFontSize = false;\n /**\n * check whether the font is in `italic type`.\n * @default false\n * @private\n */\n this.isItalic = false;\n /**\n * Check whether it is an `emf Text Matrix`.\n * @default false\n * @private\n */\n this.isEmfTextScaled = false;\n /**\n * Check whether it is an `emf` call.\n * @default false\n * @private\n */\n this.isEmf = false;\n /**\n * Check whether it is an `emf plus` call.\n * @default false\n * @private\n */\n this.isEmfPlus = false;\n /**\n * Check whether it is in `base line format`.\n * @default true\n * @private\n */\n this.isBaselineFormat = true;\n /**\n * Emf Text `Scaling Factor`.\n * @private\n */\n this.emfScalingFactor = new SizeF(0, 0);\n /**\n * To check whether the `last color space` of document and garphics is saved.\n * @private\n */\n this.colorSpaceChanged = false;\n /**\n * Stores an instance of `DictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isPointOverload = false;\n /**\n * Current colorspaces.\n * @hidden\n * @private\n */\n this.currentColorSpaces = ['RGB', 'CMYK', 'GrayScale', 'Indexed'];\n /**\n * Checks the current image `is optimized` or not.\n * @default false.\n * @private\n */\n this.isImageOptimized = false;\n /**\n * Stores the `graphics states`.\n * @private\n */\n this.graphicsState = [];\n /**\n * Indicates whether the object `had trasparency`.\n * @default false\n * @private\n */\n this.istransparencySet = false;\n /**\n * Stores the instance of `PdfAutomaticFieldInfoCollection` class .\n * @default null\n * @private\n */\n this.internalAutomaticFields = null;\n /**\n * Stores the index of the start line that should draw with in the next page.\n * @private\n */\n this.startCutIndex = -1;\n if (arg3 instanceof PdfStreamWriter) {\n this.pdfStreamWriter = arg3;\n this.getResources = arg2;\n this.canvasSize = arg1;\n this.initialize();\n }\n else {\n this.constructor(arg1, arg2, new PdfStreamWriter(arg3));\n }\n }\n Object.defineProperty(PdfGraphics.prototype, \"stringLayoutResult\", {\n // Properties\n /**\n * Returns the `result` after drawing string.\n * @private\n */\n get: function () {\n return this.pdfStringLayoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"size\", {\n /**\n * Gets the `size` of the canvas.\n * @private\n */\n get: function () {\n return this.canvasSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"mediaBoxUpperRightBound\", {\n /**\n * Gets and Sets the value of `MediaBox upper right bound`.\n * @private\n */\n get: function () {\n if (typeof this.internalMediaBoxUpperRightBound === 'undefined') {\n this.internalMediaBoxUpperRightBound = 0;\n }\n return this.internalMediaBoxUpperRightBound;\n },\n set: function (value) {\n this.internalMediaBoxUpperRightBound = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"clientSize\", {\n /**\n * Gets the `size` of the canvas reduced by margins and page templates.\n * @private\n */\n get: function () {\n return new SizeF(this.clipBounds.width, this.clipBounds.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"colorSpace\", {\n /**\n * Gets or sets the current `color space` of the document\n * @private\n */\n get: function () {\n return this.currentColorSpace;\n },\n set: function (value) {\n this.currentColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"streamWriter\", {\n /**\n * Gets the `stream writer`.\n * @private\n */\n get: function () {\n return this.pdfStreamWriter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"matrix\", {\n /**\n * Gets the `transformation matrix` reflecting current transformation.\n * @private\n */\n get: function () {\n if (this.transformationMatrix == null) {\n this.transformationMatrix = new PdfTransformationMatrix();\n }\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"layer\", {\n /**\n * Gets the `layer` for the graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"page\", {\n /**\n * Gets the `page` for this graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer.page;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"automaticFields\", {\n get: function () {\n if (this.internalAutomaticFields == null || typeof this.internalAutomaticFields === 'undefined') {\n this.internalAutomaticFields = new PdfAutomaticFieldInfoCollection();\n }\n return this.internalAutomaticFields;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` this instance.\n * @private\n */\n PdfGraphics.prototype.initialize = function () {\n this.bStateSaved = false;\n this.currentPen = null;\n this.currentBrush = null;\n this.currentFont = null;\n this.currentColorSpace = PdfColorSpace.Rgb;\n this.bCSInitialized = false;\n this.transformationMatrix = null;\n this.previousTextRenderingMode = (-1); //.Fill;\n this.previousCharacterSpacing = -1.0;\n this.previousWordSpacing = -1.0;\n this.previousTextScaling = -100.0;\n // this.m_trasparencies = null;\n this.currentStringFormat = null;\n this.clipBounds = new RectangleF(new PointF(0, 0), this.size);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n };\n PdfGraphics.prototype.drawPdfTemplate = function (template, location, size) {\n if (typeof size === 'undefined') {\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n this.drawPdfTemplate(template, location, template.size);\n }\n else {\n // let crossTable : PdfCrossTable = null;\n // if (this.pageLayer != null) {\n // crossTable = (this.page as PdfPage).section.parentDocument.crossTable;\n // }\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n var scaleX = (template.width > 0) ? size.width / template.width : 1;\n var scaleY = (template.height > 0) ? size.height / template.height : 1;\n var bNeedScale = !(scaleX === 1 && scaleY === 1);\n // Save state.\n var state = this.save();\n // Take into consideration that rect location is bottom/left.\n var matrix = new PdfTransformationMatrix();\n if (this.pageLayer != null) {\n this.getTranslateTransform(location.x, location.y + size.height, matrix);\n }\n if (bNeedScale) {\n this.getScaleTransform(scaleX, scaleY, matrix);\n }\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n var name_1 = resources.getName(template);\n this.pdfStreamWriter.executeObject(name_1);\n // Restore state.\n this.restore(state);\n //Transfer automatic fields from template.\n var g = template.graphics;\n if (g != null) {\n for (var index = 0; index < g.automaticFields.automaticFields.length; index++) {\n var fieldInfo = g.automaticFields.automaticFields[index];\n var newLocation = new PointF(fieldInfo.location.x + location.x, fieldInfo.location.y + location.y);\n var scalingX = template.size.width == 0 ? 0 : size.width / template.size.width;\n var scalingY = template.size.height == 0 ? 0 : size.height / template.size.height;\n this.automaticFields.add(new PdfAutomaticFieldInfo(fieldInfo.field, newLocation, scalingX, scalingY));\n this.page.dictionary.modify();\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageB);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageC);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageI);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n }\n };\n /* tslint:disable */\n /**\n * @public\n */\n PdfGraphics.prototype.drawString = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {\n if (typeof arg1 === 'string' && arg2 instanceof PdfFont && (arg3 instanceof PdfPen || arg3 === null) && (arg4 instanceof PdfBrush || arg4 === null) && typeof arg5 === 'number' && typeof arg6 === 'number' && (arg7 instanceof PdfStringFormat || arg7 === null) && typeof arg8 === 'undefined') {\n this.isOverloadWithPosition = true;\n this.drawString(arg1, arg2, arg3, arg4, arg5, arg6, (this.clientSize.width - arg5), 0, arg7);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n var temparg7 = arg7;\n var temparg8 = arg8;\n var temparg9 = arg9;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(arg1, arg2, temparg9, new SizeF(temparg7, temparg8), this.isOverloadWithPosition, this.clientSize);\n if (!result.empty) {\n var rect = this.checkCorrectLayoutRectangle(result.actualSize, temparg5, temparg6, temparg9);\n if (temparg7 <= 0) {\n temparg5 = rect.x;\n temparg7 = rect.width;\n }\n if (temparg8 <= 0) {\n temparg6 = rect.y;\n temparg8 = rect.height;\n }\n this.drawStringLayoutResult(result, arg2, temparg3, temparg4, new RectangleF(temparg5, temparg6, temparg7, temparg8), temparg9);\n this.isEmfTextScaled = false;\n this.emfScalingFactor = new SizeF(0, 0);\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n this.isNormalRender = true;\n this.pdfStringLayoutResult = result;\n this.isUseFontSize = false;\n }\n }; /* tslint:enable */\n PdfGraphics.prototype.drawLine = function (arg1, arg2, arg3, arg4, arg5) {\n if (arg2 instanceof PointF) {\n var temparg2 = arg2;\n var temparg3 = arg3;\n this.drawLine(arg1, temparg2.x, temparg2.y, temparg3.x, temparg3.y);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n this.stateControl(arg1, null, null);\n var sw = this.streamWriter;\n sw.beginPath(temparg2, temparg3);\n sw.appendLineSegment(temparg4, temparg5);\n sw.strokePath();\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawRectangle = function (arg1, arg2, arg3, arg4, arg5, arg6) {\n if (arg1 instanceof PdfPen && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(arg1, null, arg2, temparg3, arg4, arg5);\n }\n else if (arg1 instanceof PdfBrush && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(null, arg1, arg2, temparg3, arg4, arg5);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n if (arg2 instanceof PdfSolidBrush && arg2.color.isEmpty) {\n arg2 = null;\n }\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.stateControl(temparg1, temparg2, null);\n this.streamWriter.appendRectangle(temparg3, temparg4, temparg5, temparg6);\n this.drawPath(temparg1, temparg2, false);\n }\n };\n PdfGraphics.prototype.drawPath = function (arg1, arg2, arg3, arg4) {\n if (typeof arg3 === 'boolean') {\n var temparg3 = arg3;\n this.drawPath(arg1, arg2, PdfFillMode.Winding, temparg3);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var isPen = arg1 != null;\n var isBrush = arg2 != null;\n var isEvenOdd = (temparg3 === PdfFillMode.Alternate);\n if (isPen && isBrush) {\n this.streamWriter.fillStrokePath(isEvenOdd);\n }\n else if (!isPen && !isBrush) {\n this.streamWriter.endPath();\n }\n else if (isPen) {\n this.streamWriter.strokePath();\n }\n else {\n this.streamWriter.fillPath(isEvenOdd);\n }\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawImage = function (arg1, arg2, arg3, arg4, arg5) {\n if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n var size = arg1.physicalDimension;\n this.drawImage(arg1, arg2, arg3, size.width, size.height);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n arg1.save();\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(temparg2, (temparg3 + temparg5), matrix);\n this.getScaleTransform(arg4, arg5, matrix);\n this.pdfStreamWriter.write('q');\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n if (typeof this.pageLayer !== 'undefined' && this.page != null) {\n resources.document = this.page.document;\n }\n var name_2 = resources.getName(arg1);\n if (typeof this.pageLayer !== 'undefined') {\n this.page.setResources(resources);\n }\n this.pdfStreamWriter.executeObject(name_2);\n this.pdfStreamWriter.write(Operators.restoreState);\n this.pdfStreamWriter.write(Operators.newLine);\n var resource = this.getResources.getResources();\n resource.requireProcedureSet(this.procedureSets.imageB);\n resource.requireProcedureSet(this.procedureSets.imageC);\n resource.requireProcedureSet(this.procedureSets.imageI);\n resource.requireProcedureSet(this.procedureSets.text);\n }\n };\n //Implementation\n /* tslint:disable */\n /**\n * Returns `bounds` of the line info.\n * @private\n */\n PdfGraphics.prototype.getLineBounds = function (lineIndex, result, font, layoutRectangle, format) {\n var bounds;\n if (!result.empty && lineIndex < result.lineCount && lineIndex >= 0) {\n var line = result.lines[lineIndex];\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var y = vShift + layoutRectangle.y + (result.lineHeight * lineIndex);\n var lineWidth = line.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(line, format, layoutRectangle, (lineIndex === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x = layoutRectangle.x + hShift;\n /* tslint:disable */\n var width = (!this.shouldJustify(line, layoutRectangle.width, format)) ? lineWidth - lineIndent : layoutRectangle.width - lineIndent; /* tslint:enable */\n var height = result.lineHeight;\n bounds = new RectangleF(x, y, width, height);\n }\n else {\n bounds = new RectangleF(0, 0, 0, 0);\n }\n return bounds;\n };\n /**\n * Creates `lay outed rectangle` depending on the text settings.\n * @private\n */\n PdfGraphics.prototype.checkCorrectLayoutRectangle = function (textSize, x, y, format) {\n var layoutedRectangle = new RectangleF(x, y, textSize.width, textSize.width);\n if (format != null) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n layoutedRectangle.x -= layoutedRectangle.width / 2;\n break;\n case PdfTextAlignment.Right:\n layoutedRectangle.x -= layoutedRectangle.width;\n break;\n }\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n layoutedRectangle.y -= layoutedRectangle.height / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n layoutedRectangle.y -= layoutedRectangle.height;\n break;\n }\n }\n return layoutedRectangle;\n };\n /**\n * Sets the `layer` for the graphics.\n * @private\n */\n PdfGraphics.prototype.setLayer = function (layer) {\n this.pageLayer = layer;\n var page = layer.page;\n if (page != null && typeof page !== 'undefined') {\n page.beginSave = this.pageSave;\n }\n };\n /**\n * Adding page number field before page saving.\n * @private\n */\n /* tslint:disable */\n PdfGraphics.prototype.pageSave = function (page) {\n if (page.graphics.automaticFields != null) {\n for (var i = 0; i < page.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = page.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(page.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n };\n /**\n * `Draws a layout result`.\n * @private\n */\n PdfGraphics.prototype.drawStringLayoutResult = function (result, font, pen, brush, layoutRectangle, format) {\n if (!result.empty) {\n this.applyStringSettings(font, pen, brush, format, layoutRectangle);\n // Set text scaling\n var textScaling = (format != null) ? format.horizontalScalingFactor : 100.0;\n if (textScaling !== this.previousTextScaling && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setTextScaling(textScaling);\n this.previousTextScaling = textScaling;\n }\n var height = (format == null || format.lineSpacing === 0) ? font.height : format.lineSpacing + font.height;\n var subScript = (format != null && format.subSuperScript === PdfSubSuperScript.SubScript);\n var shift = 0;\n shift = (subScript) ? height - (font.height + font.metrics.getDescent(format)) : (height - font.metrics.getAscent(format));\n this.shift = shift;\n this.pdfStreamWriter.startNextLine(layoutRectangle.x, layoutRectangle.y - shift);\n this.pdfStreamWriter.setLeading(+height);\n var resultHeight = 0;\n var remainingString = '';\n for (var i = 0; i < result.lines.length; i++) {\n resultHeight += result.lineHeight;\n if ((layoutRectangle.y + resultHeight) > this.clientSize.height) {\n this.startCutIndex = i;\n break;\n }\n }\n for (var j = this.startCutIndex; (j < result.lines.length && j >= 0); j++) {\n remainingString += result.lines[j].text;\n }\n var bounds = new RectangleF(layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height);\n this.drawLayoutResult(result, font, format, layoutRectangle);\n this.underlineStrikeoutText(pen, brush, result, font, bounds, format);\n this.isEmfPlus = false;\n this.isUseFontSize = false;\n if (this.startCutIndex !== -1) {\n var page = this.getNextPage();\n page.graphics.drawString(remainingString, font, pen, brush, layoutRectangle.x, 0, layoutRectangle.width, 0, format);\n }\n }\n else {\n throw new Error('ArgumentNullException:result');\n }\n };\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGraphics.prototype.getNextPage = function () {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n return nextPage;\n };\n PdfGraphics.prototype.setClip = function (rectangle, mode) {\n if (typeof mode === 'undefined') {\n this.setClip(rectangle, PdfFillMode.Winding);\n }\n else {\n this.pdfStreamWriter.appendRectangle(rectangle);\n this.pdfStreamWriter.clipPath((mode === PdfFillMode.Alternate));\n }\n };\n /**\n * Applies all the `text settings`.\n * @private\n */\n PdfGraphics.prototype.applyStringSettings = function (font, pen, brush, format, bounds) {\n var setLineWidth = false;\n var tm = this.getTextRenderingMode(pen, brush, format);\n this.stateControl(pen, brush, font, format);\n this.pdfStreamWriter.beginText();\n if ((tm) !== this.previousTextRenderingMode) {\n this.pdfStreamWriter.setTextRenderingMode(tm);\n this.previousTextRenderingMode = tm;\n }\n // Set character spacing.\n var cs = (format != null) ? format.characterSpacing : 0;\n if (cs !== this.previousCharacterSpacing && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setCharacterSpacing(cs);\n this.previousCharacterSpacing = cs;\n }\n // Set word spacing.\n // NOTE: it works only if the space code is equal to 32 (0x20).\n var ws = (format != null) ? format.wordSpacing : 0;\n if (ws !== this.previousWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(ws);\n this.previousWordSpacing = ws;\n }\n };\n /**\n * Calculates `shift value` if the text is vertically aligned.\n * @private\n */\n PdfGraphics.prototype.getTextVerticalAlignShift = function (textHeight, boundsHeight, format) {\n var shift = 0;\n if (boundsHeight >= 0 && format != null && format.lineAlignment !== PdfVerticalAlignment.Top) {\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n shift = (boundsHeight - textHeight) / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n shift = boundsHeight - textHeight;\n break;\n }\n }\n return shift;\n };\n /* tslint:disable */\n /**\n * `Draws layout result`.\n * @private\n */\n PdfGraphics.prototype.drawLayoutResult = function (result, font, format, layoutRectangle) {\n var vAlignShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, vAlignShift);\n }\n var ttfFont = font;\n var unicode = (ttfFont != null && ttfFont.isUnicode);\n var embed = (ttfFont != null && ttfFont.isEmbedFont);\n var lines = result.lines;\n for (var i = 0, len = lines.length; (i < len && i !== this.startCutIndex); i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hAlignShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hAlignShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(hAlignShift, 0);\n }\n if (unicode) {\n this.drawUnicodeLine(lineInfo, layoutRectangle, font, format);\n }\n else {\n this.drawAsciiLine(lineInfo, layoutRectangle, font, format);\n }\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(-hAlignShift, 0);\n }\n if (this.isOverloadWithPosition && lines.length > 1) {\n this.pdfStreamWriter.startNextLine(-(layoutRectangle.x), 0);\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n this.isOverloadWithPosition = false;\n this.isPointOverload = true;\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, -(vAlignShift - result.lineHeight));\n }\n this.pdfStreamWriter.endText();\n };\n /**\n * `Draws Ascii line`.\n * @private\n */\n PdfGraphics.prototype.drawAsciiLine = function (lineInfo, layoutRectangle, font, format) {\n this.justifyLine(lineInfo, layoutRectangle.width, format);\n var value = '';\n if (lineInfo.text.indexOf('(') !== -1 || lineInfo.text.indexOf(')') !== -1) {\n for (var i = 0; i < lineInfo.text.length; i++) {\n if (lineInfo.text[i] === '(') {\n value += '\\\\\\(';\n }\n else if (lineInfo.text[i] === ')') {\n value += '\\\\\\)';\n }\n else {\n value += lineInfo.text[i];\n }\n }\n }\n if (value === '') {\n value = lineInfo.text;\n }\n var line = '(' + value + ')';\n this.pdfStreamWriter.showNextLineText(new PdfString(line));\n };\n /**\n * Draws unicode line.\n * @private\n */\n PdfGraphics.prototype.drawUnicodeLine = function (lineInfo, layoutRectangle, font, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var rtl = (format !== null && format.rightToLeft);\n var useWordSpace = (format !== null && (format.wordSpacing !== 0 || format.alignment === PdfTextAlignment.Justify));\n var ttfFont = font;\n var wordSpacing = this.justifyLine(lineInfo, layoutRectangle.width, format);\n var rtlRender = new RtlRenderer();\n if (rtl || (format !== null && format.textDirection !== PdfTextDirection.None)) {\n var blocks = null;\n var rightAlign = (format !== null && format.alignment === PdfTextAlignment.Right);\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n /* tslint:disable-next-line:max-line-length */\n blocks = rtlRender.layout(line, ttfFont, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, useWordSpace, format);\n }\n else {\n blocks = rtlRender.layout(line, ttfFont, rightAlign, useWordSpace, format);\n }\n var words = null;\n if (blocks.length > 1) {\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n /* tslint:disable-next-line:max-line-length */\n words = rtlRender.splitLayout(line, ttfFont, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, useWordSpace, format);\n }\n else {\n words = rtlRender.splitLayout(line, ttfFont, rightAlign, useWordSpace, format);\n }\n }\n else {\n words = [line];\n }\n this.drawUnicodeBlocks(blocks, words, ttfFont, format, wordSpacing);\n }\n else {\n if (useWordSpace) {\n var result = this.breakUnicodeLine(line, ttfFont, null);\n var blocks = result.tokens;\n var words = result.words;\n this.drawUnicodeBlocks(blocks, words, ttfFont, format, wordSpacing);\n }\n else {\n var token = this.convertToUnicode(line, ttfFont);\n var value = this.getUnicodeString(token);\n this.streamWriter.showNextLineText(value);\n }\n }\n };\n /**\n * Draws array of unicode tokens.\n */\n /* tslint:disable */\n PdfGraphics.prototype.drawUnicodeBlocks = function (blocks, words, font, format, wordSpacing) {\n /* tslint:enable */\n if (blocks == null) {\n throw new Error('Argument Null Exception : blocks');\n }\n if (words == null) {\n throw new Error('Argument Null Exception : words');\n }\n if (font == null) {\n throw new Error('Argument Null Exception : font');\n }\n this.streamWriter.startNextLine();\n var x = 0;\n var xShift = 0;\n var firstLineIndent = 0;\n var paragraphIndent = 0;\n try {\n if (format !== null) {\n firstLineIndent = format.firstLineIndent;\n paragraphIndent = format.paragraphIndent;\n format.firstLineIndent = 0;\n format.paragraphIndent = 0;\n }\n var spaceWidth = font.getCharWidth(StringTokenizer.whiteSpace, format) + wordSpacing;\n var characterSpacing = (format != null) ? format.characterSpacing : 0;\n var wordSpace = (format !== null && wordSpacing === 0) ? format.wordSpacing : 0;\n spaceWidth += characterSpacing + wordSpace;\n for (var i = 0; i < blocks.length; i++) {\n var token = blocks[i];\n var word = words[i];\n var tokenWidth = 0;\n if (x !== 0) {\n this.streamWriter.startNextLine(x, 0);\n }\n if (word.length > 0) {\n tokenWidth += /*Utils.Round(*/ font.measureString(word, format).width /*)*/;\n tokenWidth += characterSpacing;\n var val = this.getUnicodeString(token);\n this.streamWriter.showText(val);\n }\n if (i !== blocks.length - 1) {\n x = tokenWidth + spaceWidth;\n xShift += x;\n }\n }\n // Rolback current line position.\n if (xShift > 0) {\n this.streamWriter.startNextLine(-xShift, 0);\n }\n }\n finally {\n if (format !== null) {\n format.firstLineIndent = firstLineIndent;\n format.paragraphIndent = paragraphIndent;\n }\n }\n };\n /**\n * Breakes the unicode line to the words and converts symbols to glyphs.\n */\n PdfGraphics.prototype.breakUnicodeLine = function (line, ttfFont, words) {\n if (line === null) {\n throw new Error('Argument Null Exception : line');\n }\n words = line.split(null);\n var tokens = [];\n for (var i = 0; i < words.length; i++) {\n // Reconvert string according to unicode standard.\n var word = words[i];\n var token = this.convertToUnicode(word, ttfFont);\n tokens[i] = token;\n }\n return { tokens: tokens, words: words };\n };\n /**\n * Creates PdfString from the unicode text.\n */\n PdfGraphics.prototype.getUnicodeString = function (token) {\n if (token === null) {\n throw new Error('Argument Null Exception : token');\n }\n var val = new PdfString(token);\n val.converted = true;\n val.encode = InternalEnum.ForceEncoding.Ascii;\n return val;\n };\n /**\n * Converts to unicode format.\n */\n PdfGraphics.prototype.convertToUnicode = function (text, ttfFont) {\n var token = null;\n if (text == null) {\n throw new Error('Argument Null Exception : text');\n }\n if (ttfFont == null) {\n throw new Error('Argument Null Exception : ttfFont');\n }\n if (ttfFont.fontInternal instanceof UnicodeTrueTypeFont) {\n var ttfReader = ttfFont.fontInternal.ttfReader;\n ttfFont.setSymbols(text);\n token = ttfReader.convertString(text);\n var bytes = PdfString.toUnicodeArray(token, false);\n token = PdfString.byteToString(bytes);\n }\n return token;\n };\n /**\n * `Justifies` the line if needed.\n * @private\n */\n PdfGraphics.prototype.justifyLine = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var shouldJustify = this.shouldJustify(lineInfo, boundsWidth, format);\n var hasWordSpacing = (format != null && format.wordSpacing !== 0);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var wordSpace = 0;\n if (shouldJustify) {\n // Correct line width.\n if (hasWordSpacing) {\n lineWidth -= (whitespacesCount * format.wordSpacing);\n }\n var difference = boundsWidth - lineWidth;\n wordSpace = difference / whitespacesCount;\n this.pdfStreamWriter.setWordSpacing(wordSpace);\n }\n else {\n // If there is justifying, but the line shouldn't be justified, restore default word spacing.\n if (hasWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(format.wordSpacing);\n }\n else {\n this.pdfStreamWriter.setWordSpacing(0);\n }\n }\n return wordSpace;\n };\n /**\n * `Reset` or reinitialize the current graphic value.\n * @private\n */\n PdfGraphics.prototype.reset = function (size) {\n this.canvasSize = size;\n this.streamWriter.clear();\n this.initialize();\n this.initializeCoordinates();\n };\n /**\n * Checks whether the line should be `justified`.\n * @private\n */\n PdfGraphics.prototype.shouldJustify = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var justifyStyle = (format != null && format.alignment === PdfTextAlignment.Justify);\n var goodWidth = (boundsWidth >= 0 && lineWidth < boundsWidth);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var hasSpaces = (whitespacesCount > 0 && line[0] !== StringTokenizer.whiteSpace);\n var goodLineBreakStyle = ((lineInfo.lineType & LineType.LayoutBreak) > 0);\n /* tslint:disable */\n var shouldJustify = (justifyStyle && goodWidth && hasSpaces && (goodLineBreakStyle || format.alignment === PdfTextAlignment.Justify)); /* tslint:enable */\n return shouldJustify;\n };\n /* tslint:disable */\n /**\n * Emulates `Underline, Strikeout` of the text if needed.\n * @private\n */\n PdfGraphics.prototype.underlineStrikeoutText = function (pen, brush, result, font, layoutRectangle, format) {\n if (font.underline || font.strikeout) {\n // Calculate line width.\n var linePen = this.createUnderlineStikeoutPen(pen, brush, font, format);\n if (linePen != null) {\n // Approximate line positions.\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var underlineYOffset = 0;\n underlineYOffset = layoutRectangle.y + vShift + font.metrics.getAscent(format) + 1.5 * linePen.width;\n var strikeoutYOffset = layoutRectangle.y + vShift + font.metrics.getHeight(format) / 2 + 1.5 * linePen.width;\n var lines = result.lines;\n // Run through the text and draw lines.\n for (var i = 0, len = result.lineCount; i < len; i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x1 = layoutRectangle.x + hShift;\n /* tslint:disable */\n var x2 = (!this.shouldJustify(lineInfo, layoutRectangle.width, format)) ? x1 + lineWidth - lineIndent : x1 + layoutRectangle.width - lineIndent;\n /* tslint:enable */\n if (font.underline) {\n var y = underlineYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n underlineYOffset += result.lineHeight;\n }\n if (font.strikeout) {\n var y = strikeoutYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n strikeoutYOffset += result.lineHeight;\n }\n if (this.isPointOverload && lines.length > 1) {\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n }\n }\n this.isPointOverload = false;\n }\n }\n };\n /**\n * `Creates a pen` for drawing lines in the text.\n * @private\n */\n PdfGraphics.prototype.createUnderlineStikeoutPen = function (pen, brush, font, format) {\n // Calculate line width.\n var lineWidth = font.metrics.getSize(format) / 20;\n var linePen = null;\n // Create a pen fo the lines.\n if (pen != null) {\n linePen = new PdfPen(pen.color, lineWidth);\n }\n else if (brush != null) {\n linePen = new PdfPen(brush, lineWidth);\n }\n return linePen;\n };\n /**\n * Return `text rendering mode`.\n * @private\n */\n PdfGraphics.prototype.getTextRenderingMode = function (pen, brush, format) {\n var tm = TextRenderingMode.None;\n if (pen != null && brush != null) {\n tm = TextRenderingMode.FillStroke;\n }\n else if (pen != null) {\n tm = TextRenderingMode.Stroke;\n }\n else {\n tm = TextRenderingMode.Fill;\n }\n if (format != null && format.clipPath) {\n tm |= TextRenderingMode.ClipFlag;\n }\n return tm;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfGraphics.prototype.getLineIndent = function (lineInfo, format, layoutBounds, firstLine) {\n var lineIndent = 0;\n var firstParagraphLine = ((lineInfo.lineType & LineType.FirstParagraphLine) > 0);\n if (format != null && firstParagraphLine) {\n lineIndent = (firstLine) ? format.firstLineIndent : format.paragraphIndent;\n lineIndent = (layoutBounds.width > 0) ? Math.min(layoutBounds.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates shift value if the line is `horizontaly aligned`.\n * @private\n */\n PdfGraphics.prototype.getHorizontalAlignShift = function (lineWidth, boundsWidth, format) {\n var shift = 0;\n if (boundsWidth >= 0 && format != null && format.alignment !== PdfTextAlignment.Left) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n shift = (boundsWidth - lineWidth) / 2;\n break;\n case PdfTextAlignment.Right:\n shift = boundsWidth - lineWidth;\n break;\n }\n }\n return shift;\n };\n /**\n * Gets or sets the value that indicates `text direction` mode.\n * @private\n */\n PdfGraphics.prototype.rightToLeft = function (format) {\n var rtl = (format != null && format.rightToLeft);\n if (format !== null && typeof format !== 'undefined') {\n if (format.textDirection !== PdfTextDirection.None && typeof format.textDirection !== 'undefined') {\n rtl = true;\n }\n }\n return rtl;\n };\n PdfGraphics.prototype.stateControl = function (pen, brush, font, format) {\n if (typeof format === 'undefined') {\n this.stateControl(pen, brush, font, null);\n }\n else {\n var saveState = false;\n if (brush !== null) {\n var solidBrush = brush;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n if (this.colorSpaceChanged === false) {\n this.lastDocumentCS = this.pageLayer.page.document.colorSpace;\n this.lastGraphicsCS = this.pageLayer.page.graphics.colorSpace;\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n this.colorSpaceChanged = true;\n }\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n else if (pen != null) {\n var pdfPen = pen;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n /* tslint:disable */\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n this.penControl(pen, saveState);\n this.brushControl(brush, saveState);\n this.fontControl(font, format, saveState);\n }\n };\n /**\n * Initializes the `current color space`.\n * @private\n */\n PdfGraphics.prototype.initCurrentColorSpace = function (colorspace) {\n var re = this.getResources.getResources();\n if (!this.bCSInitialized) {\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], true);\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], false);\n this.bCSInitialized = true;\n }\n };\n /**\n * Controls the `pen state`.\n * @private\n */\n PdfGraphics.prototype.penControl = function (pen, saveState) {\n if (pen != null) {\n this.currentPen = pen;\n this.colorSpace = PdfColorSpace.Rgb;\n /* tslint:disable */\n pen.monitorChanges(this.currentPen, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace, this.matrix.clone());\n /* tslint:enable */\n this.currentPen = pen.clone();\n }\n };\n /**\n * Controls the `brush state`.\n * @private\n */\n PdfGraphics.prototype.brushControl = function (brush, saveState) {\n if (brush != null) {\n this.currentBrush = brush;\n /* tslint:disable */\n brush.monitorChanges(this.currentBrush, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace);\n /* tslint:enable */\n this.currentBrush = brush;\n brush = null;\n }\n };\n /**\n * Saves the font and other `font settings`.\n * @private\n */\n PdfGraphics.prototype.fontControl = function (font, format, saveState) {\n if (font != null) {\n var curSubSuper = (format != null) ? format.subSuperScript : PdfSubSuperScript.None;\n /* tslint:disable */\n var prevSubSuper = (this.currentStringFormat != null) ? this.currentStringFormat.subSuperScript : PdfSubSuperScript.None; /* tslint:enable */\n if (saveState || font !== this.currentFont || curSubSuper !== prevSubSuper) {\n var resources = this.getResources.getResources();\n this.currentFont = font;\n this.currentStringFormat = format;\n var size = font.metrics.getSize(format);\n /* tslint:disable */\n this.isEmfTextScaled = false;\n var fontName = resources.getName(font);\n this.pdfStreamWriter.setFont(font, fontName, size);\n }\n }\n };\n PdfGraphics.prototype.setTransparency = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n this.istransparencySet = true;\n this.setTransparency(arg1, arg1, PdfBlendMode.Normal);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.setTransparency(arg1, arg2, PdfBlendMode.Normal);\n }\n else {\n if (this.trasparencies == null) {\n this.trasparencies = new TemporaryDictionary();\n }\n var transp = null;\n var td = new TransparencyData(arg1, arg2, arg3);\n if (this.trasparencies.containsKey(td)) {\n transp = this.trasparencies.getValue(td);\n }\n if (transp == null) {\n transp = new PdfTransparency(arg1, arg2, arg3);\n this.trasparencies.setValue(td, transp);\n }\n var resources = this.getResources.getResources();\n var name_3 = resources.getName(transp);\n var sw = this.streamWriter;\n sw.setGraphicsState(name_3);\n }\n };\n PdfGraphics.prototype.clipTranslateMargins = function (x, y, left, top, right, bottom) {\n if (x instanceof RectangleF && typeof y === 'undefined') {\n this.clipBounds = x;\n this.pdfStreamWriter.writeComment('Clip margins.');\n this.pdfStreamWriter.appendRectangle(x);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment('Translate co-ordinate system.');\n this.translateTransform(x.x, x.y);\n }\n else if (typeof x === 'number') {\n var clipArea = new RectangleF(left, top, this.size.width - left - right, this.size.height - top - bottom);\n this.clipBounds = clipArea;\n this.pdfStreamWriter.writeComment(\"Clip margins.\");\n this.pdfStreamWriter.appendRectangle(clipArea);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment(\"Translate co-ordinate system.\");\n this.translateTransform(x, y);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfGraphics.prototype.updateY = function (y) {\n return -y;\n };\n /**\n * Used to `translate the transformation`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set translate transform\n * page1.graphics.translateTransform(100, 100);\n * //\n * // draw the rectangle after applying translate transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param offsetX The x-coordinate of the translation.\n * @param offsetY The y-coordinate of the translation.\n */\n PdfGraphics.prototype.translateTransform = function (offsetX, offsetY) {\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(offsetX, offsetY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Translates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getTranslateTransform = function (x, y, input) {\n input.translate(x, this.updateY(y));\n return input;\n };\n /* tslint:disable */\n /**\n * Applies the specified `scaling operation` to the transformation matrix of this Graphics by prepending it to the object's transformation matrix.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // apply scaling trasformation\n * page1.graphics.scaleTransform(1.5, 2);\n * //\n * // draw the rectangle after applying scaling transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param scaleX Scale factor in the x direction.\n * @param scaleY Scale factor in the y direction.\n */\n /* tslint:enable */\n PdfGraphics.prototype.scaleTransform = function (scaleX, scaleY) {\n var matrix = new PdfTransformationMatrix();\n this.getScaleTransform(scaleX, scaleY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Scales` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getScaleTransform = function (x, y, input) {\n if (input == null) {\n input = new PdfTransformationMatrix();\n }\n input.scale(x, y);\n return input;\n };\n /**\n * Applies the specified `rotation` to the transformation matrix of this Graphics.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set RotateTransform with 25 degree of angle\n * page1.graphics.rotateTransform(25);\n * //\n * // draw the rectangle after RotateTransformation\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param angle Angle of rotation in degrees.\n */\n PdfGraphics.prototype.rotateTransform = function (angle) {\n var matrix = new PdfTransformationMatrix();\n this.getRotateTransform(angle, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Initializes coordinate system`.\n * @private\n */\n PdfGraphics.prototype.initializeCoordinates = function () {\n // Matrix equation: TM(T-1)=M', where T=[1 0 0 -1 0 h]\n this.pdfStreamWriter.writeComment('Change co-ordinate system to left/top.');\n // Translate co-ordinates only, don't flip.\n if (this.mediaBoxUpperRightBound !== -(this.size.height)) {\n if (this.cropBox == null) {\n if (this.mediaBoxUpperRightBound === this.size.height || this.mediaBoxUpperRightBound === 0) {\n this.translateTransform(0, this.updateY(this.size.height));\n }\n else {\n this.translateTransform(0, this.updateY(this.mediaBoxUpperRightBound));\n }\n }\n }\n };\n /**\n * `Rotates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getRotateTransform = function (angle, input) {\n if (input == null || typeof input === 'undefined') {\n input = new PdfTransformationMatrix();\n }\n input.rotate(this.updateY(angle));\n return input;\n };\n /**\n * `Saves` the current state of this Graphics and identifies the saved state with a GraphicsState.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // save the graphics state\n * let state1 : PdfGraphicsState = page1.graphics.save();\n * //\n * page1.graphics.scaleTransform(1.5, 2);\n * // draw the rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // restore the graphics state\n * page1.graphics.restore(state1);\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfGraphics.prototype.save = function () {\n var state = new PdfGraphicsState(this, this.matrix.clone());\n state.brush = this.currentBrush;\n state.pen = this.currentPen;\n state.font = this.currentFont;\n state.colorSpace = this.currentColorSpace;\n state.characterSpacing = this.previousCharacterSpacing;\n state.wordSpacing = this.previousWordSpacing;\n state.textScaling = this.previousTextScaling;\n state.textRenderingMode = this.previousTextRenderingMode;\n this.graphicsState.push(state);\n this.pdfStreamWriter.saveGraphicsState();\n return state;\n };\n PdfGraphics.prototype.restore = function (state) {\n if (typeof state === 'undefined') {\n if (this.graphicsState.length > 0) {\n this.doRestoreState();\n }\n }\n else {\n if (this.graphicsState.indexOf(state) !== -1) {\n for (;;) {\n if (this.graphicsState.length === 0) {\n break;\n }\n var popState = this.doRestoreState();\n if (popState === state) {\n break;\n }\n }\n }\n }\n };\n /**\n * `Restores graphics state`.\n * @private\n */\n PdfGraphics.prototype.doRestoreState = function () {\n var state = this.graphicsState.pop();\n this.transformationMatrix = state.matrix;\n this.currentBrush = state.brush;\n this.currentPen = state.pen;\n this.currentFont = state.font;\n this.currentColorSpace = state.colorSpace;\n this.previousCharacterSpacing = state.characterSpacing;\n this.previousWordSpacing = state.wordSpacing;\n this.previousTextScaling = state.textScaling;\n this.previousTextRenderingMode = state.textRenderingMode;\n this.pdfStreamWriter.restoreGraphicsState();\n return state;\n };\n // Constants\n /**\n * Specifies the mask of `path type values`.\n * @private\n */\n PdfGraphics.pathTypesValuesMask = 0xf;\n /**\n * Checks whether the object is `transparencyObject`.\n * @hidden\n * @private\n */\n PdfGraphics.transparencyObject = false;\n return PdfGraphics;\n}());\nexport { PdfGraphics };\n/**\n * `GetResourceEventHandler` class is alternate for event handlers and delegates.\n * @private\n * @hidden\n */\nvar GetResourceEventHandler = /** @class */ (function () {\n /**\n * Initialize instance of `GetResourceEventHandler` class.\n * Alternate for event handlers and delegates.\n * @private\n */\n function GetResourceEventHandler(sender) {\n this.sender = sender;\n }\n /**\n * Return the instance of `PdfResources` class.\n * @private\n */\n GetResourceEventHandler.prototype.getResources = function () {\n return this.sender.getResources();\n };\n return GetResourceEventHandler;\n}());\nexport { GetResourceEventHandler };\nvar PdfGraphicsState = /** @class */ (function () {\n function PdfGraphicsState(graphics, matrix) {\n /**\n * Stores `previous rendering mode`.\n * @default TextRenderingMode.Fill\n * @private\n */\n this.internalTextRenderingMode = TextRenderingMode.Fill;\n /**\n * `Previous character spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalCharacterSpacing = 0.0;\n /**\n * `Previous word spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalWordSpacing = 0.0;\n /**\n * The previously used `text scaling value`.\n * @default 100.0\n * @private\n */\n this.internalTextScaling = 100.0;\n /**\n * `Current color space`.\n * @default PdfColorSpace.Rgb\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n if (typeof graphics !== 'undefined') {\n this.pdfGraphics = graphics;\n this.transformationMatrix = matrix;\n }\n }\n Object.defineProperty(PdfGraphicsState.prototype, \"graphics\", {\n // Properties\n /**\n * Gets the parent `graphics object`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"matrix\", {\n /**\n * Gets the `current matrix`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"characterSpacing\", {\n /**\n * Gets or sets the `current character spacing`.\n * @private\n */\n get: function () {\n return this.internalCharacterSpacing;\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"wordSpacing\", {\n /**\n * Gets or sets the `word spacing` value.\n * @private\n */\n get: function () {\n return this.internalWordSpacing;\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textScaling\", {\n /**\n * Gets or sets the `text scaling` value.\n * @private\n */\n get: function () {\n return this.internalTextScaling;\n },\n set: function (value) {\n this.internalTextScaling = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"pen\", {\n /**\n * Gets or sets the `current pen` object.\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"brush\", {\n /**\n * Gets or sets the `brush`.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"font\", {\n /**\n * Gets or sets the `current font` object.\n * @private\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"colorSpace\", {\n /**\n * Gets or sets the `current color space` value.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textRenderingMode\", {\n /**\n * Gets or sets the `text rendering mode`.\n * @private\n */\n get: function () {\n return this.internalTextRenderingMode;\n },\n set: function (value) {\n this.internalTextRenderingMode = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGraphicsState;\n}());\nexport { PdfGraphicsState };\nvar TransparencyData = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `TransparencyData` class.\n * @private\n */\n function TransparencyData(alphaPen, alphaBrush, blendMode) {\n this.alphaPen = alphaPen;\n this.alphaBrush = alphaBrush;\n this.blendMode = blendMode;\n }\n return TransparencyData;\n}());\n","import { PdfStream } from './../primitives/pdf-stream';\nimport { PdfGraphics, GetResourceEventHandler } from './../graphics/pdf-graphics';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * The `PdfPageLayer` used to create layers in PDF document.\n * @private\n */\nvar PdfPageLayer = /** @class */ (function () {\n function PdfPageLayer(page, streamClipPageTemplates) {\n // private bSaved : boolean;\n /**\n * Local Variable to store the `color space` of the document.\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n /**\n * Local Variable to set `visibility`.\n * @default true\n * @private\n */\n this.isVisible = true;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n this.sublayer = false;\n /**\n * Local variable to store `length` of the graphics.\n * @default 0\n * @private\n */\n this.contentLength = 0;\n /**\n * Instance for `PdfDictionaryProperties` Class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (typeof streamClipPageTemplates === 'undefined') {\n this.pdfPage = page;\n this.clipPageTemplates = true;\n this.content = new PdfStream();\n }\n else if (streamClipPageTemplates instanceof PdfStream || streamClipPageTemplates === null) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n if (streamClipPageTemplates == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.pdfPage = page;\n this.content = streamClipPageTemplates;\n }\n else {\n this.constructor(page);\n this.clipPageTemplates = streamClipPageTemplates;\n }\n }\n Object.defineProperty(PdfPageLayer.prototype, \"colorSpace\", {\n // Properties\n /**\n * Get or set the `color space`.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"page\", {\n /**\n * Gets parent `page` of the layer.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layerId\", {\n /**\n * Gets and Sets the `id of the layer`.\n * @private\n */\n get: function () {\n return this.layerid;\n },\n set: function (value) {\n this.layerid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"name\", {\n /**\n * Gets or sets the `name` of the layer.\n * @private\n */\n get: function () {\n return this.layerName;\n },\n set: function (value) {\n this.layerName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"visible\", {\n /**\n * Gets or sets the `visibility` of the layer.\n * @private\n */\n get: function () {\n return this.isVisible;\n },\n set: function (value) {\n this.isVisible = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"graphics\", {\n /**\n * Gets `Graphics` context of the layer, used to draw various graphical content on layer.\n * @private\n */\n get: function () {\n if ((this.pdfGraphics == null)) {\n this.initializeGraphics(this.page);\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layers\", {\n /**\n * Gets the collection of `PdfPageLayer`, this collection handle by the class 'PdfPageLayerCollection'.\n * @private\n */\n get: function () {\n if (this.layer == null) {\n this.layer = new PdfPageLayerCollection(this.page);\n this.layer.sublayer = true;\n return this.layer;\n }\n else {\n return this.layer;\n }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Adds` a new PDF Page layer.\n * @private\n */\n PdfPageLayer.prototype.add = function () {\n var layer = new PdfPageLayer(this.pdfPage);\n layer.name = '';\n return layer;\n };\n /**\n * Returns a value indicating the `sign` of a single-precision floating-point number.\n * @private\n */\n PdfPageLayer.prototype.sign = function (number) {\n if (number === 0) {\n return 0;\n }\n else if (number > 0) {\n return 1;\n }\n else {\n return -1;\n }\n };\n /**\n * `Initializes Graphics context` of the layer.\n * @private\n */\n PdfPageLayer.prototype.initializeGraphics = function (page) {\n var oPage = page;\n var gr = new GetResourceEventHandler(this.page);\n var cropBox = null;\n this.pdfGraphics = new PdfGraphics(page.size, gr, this.content);\n this.pdfGraphics.mediaBoxUpperRightBound = 0;\n if (oPage != null) {\n var sc = oPage.section.parent;\n if (sc != null) {\n this.pdfGraphics.colorSpace = sc.document.colorSpace;\n this.colorSpace = sc.document.colorSpace;\n }\n }\n // Transform coordinates to the left/top and activate margins.\n var isSame = (this.sign(page.origin.y) === this.sign(page.origin.x));\n // if (page != null) {\n if (page.origin.x >= 0 && page.origin.y >= 0 || !(isSame)) {\n this.pdfGraphics.initializeCoordinates();\n }\n else {\n // this.m_graphics.InitializeCoordinates(page);\n }\n var clipRect = oPage.section.getActualBounds(oPage, true);\n var margins = oPage.section.pageSettings.margins;\n if (this.clipPageTemplates) {\n if (page.origin.x >= 0 && page.origin.y >= 0) {\n this.pdfGraphics.clipTranslateMargins(clipRect);\n }\n }\n else {\n this.graphics.clipTranslateMargins(clipRect.x, clipRect.y, margins.left, margins.top, margins.right, margins.bottom);\n }\n this.pdfGraphics.setLayer(this);\n // this.bSaved = false;\n };\n Object.defineProperty(PdfPageLayer.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPageLayer;\n}());\nexport { PdfPageLayer };\n","/**\n * PdfCollection.ts class for EJ2-PDF\n * The class used to handle the collection of PdF objects.\n */\nvar PdfCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `Collection` class.\n * @private\n */\n function PdfCollection() {\n //\n }\n Object.defineProperty(PdfCollection.prototype, \"count\", {\n // Properties\n /**\n * Gets the `Count` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCollection.prototype, \"list\", {\n /**\n * Gets the `list` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCollection;\n}());\nexport { PdfCollection };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfPageLayerCollection.ts class for EJ2-PDF\n */\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfPageLayer } from './pdf-page-layer';\nimport { PdfCollection } from './../general/pdf-collection';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfStream } from './../primitives/pdf-stream';\n/**\n * The class provides methods and properties to handle the collections of `PdfPageLayer`.\n */\nvar PdfPageLayerCollection = /** @class */ (function (_super) {\n __extends(PdfPageLayerCollection, _super);\n function PdfPageLayerCollection(page) {\n var _this = _super.call(this) || this;\n /**\n * Stores the `number of first level layers` in the document.\n * @default 0\n * @private\n */\n _this.parentLayerCount = 0;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n _this.sublayer = false;\n /**\n * Stores the `optional content dictionary`.\n * @private\n */\n _this.optionalContent = new PdfDictionary();\n if (page instanceof PdfPageBase) {\n // if (page == null) {\n // throw new Error('ArgumentNullException:page');\n // }\n _this.page = page;\n var lPage = page;\n // if (lPage != null) {\n _this.parseLayers(lPage);\n // }\n }\n return _this;\n }\n PdfPageLayerCollection.prototype.items = function (index, value) {\n if (typeof index === 'number' && typeof value === 'undefined') {\n var obj = this.list[index];\n return obj;\n }\n else {\n if (value == null) {\n throw new Error('ArgumentNullException: layer');\n }\n if (value.page !== this.page) {\n throw new Error('ArgumentException: The layer belongs to another page');\n }\n // // Add/remove the layer.\n // let layer : PdfPageLayer = this.items(index);\n // if (layer != null) {\n // this.RemoveLayer(layer);\n // }\n // this.List[index] = value;\n // this.InsertLayer(index, value);\n }\n };\n PdfPageLayerCollection.prototype.add = function (firstArgument, secondArgument) {\n if (typeof firstArgument === 'undefined') {\n var layer = new PdfPageLayer(this.page);\n layer.name = '';\n this.add(layer);\n return layer;\n }\n else if (firstArgument instanceof PdfPageLayer) {\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var index = this.list.push(firstArgument);\n // Register layer.\n this.addLayer(index, firstArgument);\n return index;\n }\n else {\n return 0;\n }\n };\n /**\n * Registers `layer` at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.addLayer = function (index, layer) {\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.add(reference);\n };\n // private RemoveLayer(layer : PdfPageLayer) : void {\n // if (layer == null) {\n // throw new Error('ArgumentNullException:layer');\n // }\n // let reference : PdfReferenceHolder = new PdfReferenceHolder(layer);\n // if (this.page != null) {\n // this.page.Contents.Remove(reference);\n // }\n // }\n /**\n * Inserts `PdfPageLayer` into the collection at specified index.\n * @private\n */\n PdfPageLayerCollection.prototype.insert = function (index, layer) {\n // if (index < 0)\n // throw new ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\");\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var list = [];\n var length = this.list.length;\n for (var i = index; i < length; i++) {\n list.push(this.list.pop());\n }\n this.list.push(layer);\n for (var i = 0; i < list.length; i++) {\n this.list.push(list[i]);\n }\n // Register layer.\n this.insertLayer(index, layer);\n };\n /**\n * Registers layer at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.insertLayer = function (index, layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException:layer');\n }\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.insert(index, reference);\n };\n // tslint:disable\n /**\n * `Parses the layers`.\n * @private\n */\n PdfPageLayerCollection.prototype.parseLayers = function (loadedPage) {\n // if (loadedPage == null) {\n // throw new Error('ArgumentNullException:loadedPage');\n // }\n var contents = this.page.contents;\n var resource = this.page.getResources();\n var crossTable = null;\n var ocproperties = null;\n var propertie = null;\n var isLayerAdded = false;\n // if (loadedPage instanceof PdfPage) {\n crossTable = loadedPage.crossTable;\n // } else {\n // crossTable = (loadedPage as PdfLoadedPage).CrossTable;\n // Propertie = PdfCrossTable.Dereference(Resource[DictionaryProperties.Properties]) as PdfDictionary;\n // ocproperties = PdfCrossTable.Dereference((loadedPage as PdfLoadedPage).\n // Document.Catalog[DictionaryProperties.OCProperties]) as PdfDictionary;\n // }\n var saveStream = new PdfStream();\n var restoreStream = new PdfStream();\n var saveState = 'q';\n var newLine = '\\n';\n var restoreState = 'Q';\n // for (let index : number = 0; index < contents.Items.length; index++) {\n // let obj : IPdfPrimitive = contents[index];\n // let stream : PdfStream = crossTable.GetObject(obj) as PdfStream;\n // if (stream == null)\n // throw new PdfDocumentException(\"Invalid contents array.\");\n // // if (stream.Compress)\n // {\n // if (!loadedPage.Imported)\n // stream.Decompress();\n // }\n // byte[] contentId = stream.Data;\n // string str = PdfString.ByteToString(contentId);\n // if (!loadedPage.Imported && (contents.Count == 1) && ((stream.Data[stream.Data.Length - 2] ==\n // RestoreState) || (stream.Data[stream.Data.Length - 1] == RestoreState)))\n // {\n // byte[] content = stream.Data;\n // byte[] data = new byte[content.Length + 4];\n // data[0] = SaveState;\n // data[1] = NewLine;\n // content.CopyTo(data, 2);\n // data[data.Length - 2] = NewLine;\n // data[data.Length - 1] = RestoreState;\n // stream.Data = data;\n // }\n // if (ocproperties != null)\n // {\n // if (Propertie != null)\n // {\n // foreach (KeyValuePair prop in Propertie.Items)\n // {\n // String Key = prop.Key.ToString();\n // PdfReferenceHolder refh = prop.Value as PdfReferenceHolder;\n // PdfDictionary Dict = null;\n // if (refh != null)\n // {\n // Dict = refh.Object as PdfDictionary;\n // }\n // else\n // {\n // Dict = prop.Value as PdfDictionary;\n // }\n // PdfDictionary m_usage = PdfCrossTable.Dereference(Dict[DictionaryProperties.Usage]) as PdfDictionary;\n // if (m_usage != null)\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // PdfDictionary printoption = PdfCrossTable.Dereference(m_usage[DictionaryProperties.Print])\n // as PdfDictionary;\n // if (printoption != null)\n // {\n // layer.m_printOption = printoption;\n // foreach (KeyValuePair value in printoption.Items)\n // {\n // if (value.Key.Value.Equals(DictionaryProperties.PrintState))\n // {\n // string printState = (value.Value as PdfName).Value;\n // if (printState.Equals(DictionaryProperties.OCGON))\n // {\n // layer.PrintState = PdfPrintState.AlwaysPrint;\n // break;\n // }\n // else\n // {\n // layer.PrintState = PdfPrintState.NeverPrint;\n // break;\n // }\n // }\n // }\n // }\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // List.add(layer);\n // isLayerAdded = true;\n // if(!str.Contains(\"EMC\"))\n // break;\n // }\n // }\n // else\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // if(Dict.ContainsKey(DictionaryProperties.Name))\n // {\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // }\n // isLayerAdded = true;\n // break;\n // }\n // }\n // }\n // }\n // }\n // if (!isLayerAdded)\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // }\n // else\n // isLayerAdded = false;\n // }\n var saveData = [];\n saveData.push(saveState);\n saveStream.data = saveData;\n contents.insert(0, new PdfReferenceHolder(saveStream));\n saveData = [];\n saveData.push(restoreState);\n restoreStream.data = saveData;\n contents.insert(contents.count, new PdfReferenceHolder(restoreStream));\n };\n /**\n * Returns `index of` the `PdfPageLayer` in the collection if exists, -1 otherwise.\n * @private\n */\n PdfPageLayerCollection.prototype.indexOf = function (layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException: layer');\n }\n var index = this.list.indexOf(layer);\n return index;\n };\n return PdfPageLayerCollection;\n}(PdfCollection));\nexport { PdfPageLayerCollection };\n","/**\n * PdfTemplate.ts class for EJ2-PDF\n */\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfGraphics } from './../pdf-graphics';\nimport { PdfResources } from './../pdf-resources';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PointF, SizeF, RectangleF } from './../../drawing/pdf-drawing';\nimport { GetResourceEventHandler } from './../pdf-graphics';\n/**\n * Represents `Pdf Template` object.\n * @private\n */\nvar PdfTemplate = /** @class */ (function () {\n function PdfTemplate(arg1, arg2) {\n /**\n * Initialize an instance for `DictionaryProperties` class.\n * @private\n * @hidden\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the transformation 'is performed'.\n * @default true\n * @private\n */\n this.writeTransformation = true;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.content = new PdfStream();\n var tempSize = new SizeF(arg1.width, arg1.height);\n this.setSize(tempSize);\n this.initialize();\n }\n else {\n this.content = new PdfStream();\n this.setSize(new SizeF(arg1, arg2));\n this.initialize();\n }\n }\n Object.defineProperty(PdfTemplate.prototype, \"size\", {\n //Properties\n /**\n * Gets the size of the 'PdfTemplate'.\n */\n get: function () {\n return this.templateSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"width\", {\n /**\n * Gets the width of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"height\", {\n /**\n * Gets the height of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"graphics\", {\n /**\n * Gets the `graphics` of the 'PdfTemplate'.\n */\n get: function () {\n if (this.pdfGraphics == null || typeof this.pdfGraphics === 'undefined') {\n var gr = new GetResourceEventHandler(this);\n var g = new PdfGraphics(this.size, gr, this.content);\n this.pdfGraphics = g;\n // if(this.writeTransformation) {\n // Transform co-ordinates to Top/Left.\n this.pdfGraphics.initializeCoordinates();\n // }\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the resources and modifies the template dictionary.\n * @private\n */\n PdfTemplate.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.content.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n // Public methods\n /**\n * `Initialize` the type and subtype of the template.\n * @private\n */\n PdfTemplate.prototype.initialize = function () {\n this.addType();\n this.addSubType();\n };\n /**\n * `Adds type key`.\n * @private\n */\n PdfTemplate.prototype.addType = function () {\n var value = new PdfName(this.dictionaryProperties.xObject);\n this.content.items.setValue(this.dictionaryProperties.type, value);\n };\n /**\n * `Adds SubType key`.\n * @private\n */\n PdfTemplate.prototype.addSubType = function () {\n var value = new PdfName(this.dictionaryProperties.form);\n this.content.items.setValue(this.dictionaryProperties.subtype, value);\n };\n PdfTemplate.prototype.reset = function (size) {\n if (typeof size === 'undefined') {\n if (this.resources != null) {\n this.resources = null;\n this.content.remove(this.dictionaryProperties.resources);\n }\n if (this.graphics != null) {\n this.graphics.reset(this.size);\n }\n }\n else {\n this.setSize(size);\n this.reset();\n }\n };\n /**\n * `Set the size` of the 'PdfTemplate'.\n * @private\n */\n PdfTemplate.prototype.setSize = function (size) {\n var rect = new RectangleF(new PointF(0, 0), size);\n var val = PdfArray.fromRectangle(rect);\n this.content.items.setValue(this.dictionaryProperties.bBox, val);\n this.templateSize = size;\n };\n Object.defineProperty(PdfTemplate.prototype, \"element\", {\n // /**\n // * Returns the value of current graphics.\n // * @private\n // */\n // public GetGraphics(g : PdfGraphics) : PdfGraphics {\n // if (this.graphics == null || typeof this.graphics === 'undefined') {\n // this.graphics = g;\n // this.graphics.Size = this.Size;\n // this.graphics.StreamWriter = new PdfStreamWriter(this.content)\n // this.graphics.Initialize();\n // if(this.writeTransformation) {\n // this.graphics.InitializeCoordinates();\n // }\n // }\n // return this.graphics;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `content stream` of 'PdfTemplate' class.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplate;\n}());\nexport { PdfTemplate };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfResources.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTemplate } from './figures/pdf-template';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfBitmap } from './../graphics/images/pdf-bitmap';\nimport { PdfImage } from './../graphics/images/pdf-image';\n/**\n * `PdfResources` class used to set resource contents like font, image.\n * @private\n */\nvar PdfResources = /** @class */ (function (_super) {\n __extends(PdfResources, _super);\n function PdfResources(baseDictionary) {\n var _this = _super.call(this) || this;\n /**\n * Dictionary for the `properties names`.\n * @private\n */\n _this.properties = new PdfDictionary();\n if (baseDictionary instanceof PdfDictionary) {\n _this = _super.call(this, baseDictionary) || this;\n }\n return _this;\n }\n Object.defineProperty(PdfResources.prototype, \"names\", {\n //Properties\n /**\n * Gets the `font names`.\n * @private\n */\n get: function () {\n return this.getNames();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfResources.prototype, \"document\", {\n /**\n * Get or set the `page document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public Methods\n /**\n * `Generates name` for the object and adds to the resource if the object is new.\n * @private\n */\n PdfResources.prototype.getName = function (obj) {\n var primitive = obj.element;\n var name = null;\n if (this.names.containsKey(primitive)) {\n name = this.names.getValue(primitive);\n }\n // Object is new.\n if (name == null) {\n var sName = this.generateName();\n name = new PdfName(sName);\n this.names.setValue(primitive, name);\n if (obj instanceof PdfFont) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfTemplate) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfTransparency) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfImage || obj instanceof PdfBitmap) {\n this.add(obj, name);\n }\n }\n return name;\n };\n /**\n * Gets `resource names` to font dictionaries.\n * @private\n */\n PdfResources.prototype.getNames = function () {\n if (this.pdfNames == null) {\n this.pdfNames = new TemporaryDictionary();\n }\n var fonts = this.items.getValue(this.dictionaryProperties.font);\n if (fonts != null) {\n var reference = fonts;\n var dictionary = fonts;\n dictionary = PdfCrossTable.dereference(fonts);\n }\n return this.pdfNames;\n };\n /**\n * Add `RequireProcedureSet` into procset array.\n * @private\n */\n PdfResources.prototype.requireProcedureSet = function (procedureSetName) {\n if (procedureSetName == null) {\n throw new Error('ArgumentNullException:procedureSetName');\n }\n var procSets = this.items.getValue(this.dictionaryProperties.procset);\n if (procSets == null) {\n procSets = new PdfArray();\n this.items.setValue(this.dictionaryProperties.procset, procSets);\n }\n var name = new PdfName(procedureSetName);\n if (!procSets.contains(name)) {\n procSets.add(name);\n }\n };\n //Helper Methods\n /**\n * `Remove font` from array.\n * @private\n */\n PdfResources.prototype.removeFont = function (name) {\n var key = null;\n var keys = this.pdfNames.keys();\n for (var index = 0; index < this.pdfNames.size(); index++) {\n if (this.pdfNames.getValue(keys[index]) === new PdfName(name)) {\n key = keys[index];\n break;\n }\n }\n if (key != null) {\n this.pdfNames.remove(key);\n }\n };\n /**\n * Generates `Unique string name`.\n * @private\n */\n PdfResources.prototype.generateName = function () {\n var name = Guid.getNewGuidString();\n return name;\n };\n PdfResources.prototype.add = function (arg1, arg2) {\n if (arg1 instanceof PdfFont) {\n var dictionary = null;\n var fonts = this.items.getValue(this.dictionaryProperties.font);\n if (fonts != null) {\n var reference = fonts;\n dictionary = fonts;\n dictionary = fonts;\n }\n else {\n dictionary = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.font, dictionary);\n }\n dictionary.items.setValue(arg2.value, new PdfReferenceHolder(arg1.element));\n }\n else if (arg1 instanceof PdfTemplate) {\n var xobjects = void 0;\n xobjects = this.items.getValue(this.dictionaryProperties.xObject);\n // Create fonts dictionary.\n if (xobjects == null) {\n xobjects = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.xObject, xobjects);\n }\n xobjects.items.setValue(arg2.value, new PdfReferenceHolder(arg1.element));\n }\n else if (arg1 instanceof PdfBrush) {\n // let savable : IPdfPrimitive = (arg1 as IPdfWrapper).Element;\n // if (savable != null)\n // {\n // let pattern : PdfDictionary = this.Items.getValue(this.dictionaryProperties.pattern) as PdfDictionary;\n // // Create a new pattern dictionary.\n // if (pattern == null) {\n // pattern = new PdfDictionary();\n // this.Items.setValue(this.dictionaryProperties.pattern, pattern);\n // }\n // pattern.Items.setValue(name, new PdfReferenceHolder(savable));\n // }\n }\n else if (arg1 instanceof PdfTransparency) {\n var savable = arg1.element;\n var transDic = null;\n transDic = this.items.getValue(this.dictionaryProperties.extGState);\n // Create a new pattern dictionary.\n if (transDic == null) {\n transDic = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.extGState, transDic);\n }\n transDic.items.setValue(arg2.value, new PdfReferenceHolder(savable));\n }\n else {\n /* tslint:disable */\n var xobjects = this.Dictionary.items.getValue(this.dictionaryProperties.xObject);\n var parentXObjects = void 0;\n if (typeof this.pdfDocument !== 'undefined') {\n parentXObjects = this.pdfDocument.sections.element.items.getValue(this.dictionaryProperties.resources).items.getValue(this.dictionaryProperties.xObject);\n }\n var values = this.Dictionary.items.values();\n var hasSameImageStream = false;\n var oldReference = void 0;\n if (typeof this.pdfDocument !== 'undefined' && (typeof parentXObjects === undefined || parentXObjects == null)) {\n parentXObjects = new PdfDictionary();\n this.pdfDocument.sections.element.items.getValue(this.dictionaryProperties.resources).items.setValue(this.dictionaryProperties.xObject, parentXObjects);\n }\n else if (typeof this.pdfDocument !== 'undefined') {\n var values_1 = parentXObjects.items.values();\n for (var i = 0; i < values_1.length; i++) {\n if (typeof values_1[i] !== 'undefined' && typeof values_1[i].element !== 'undefined') {\n if (values_1[i].element.data[0] === arg1.element.data[0]) {\n oldReference = values_1[i];\n hasSameImageStream = true;\n }\n }\n }\n }\n if (xobjects == null) {\n xobjects = new PdfDictionary();\n this.Dictionary.items.setValue(this.dictionaryProperties.xObject, xobjects);\n }\n if (hasSameImageStream && typeof oldReference !== 'undefined') {\n xobjects.items.setValue(arg2.value, oldReference);\n }\n else {\n var reference = new PdfReferenceHolder(arg1.element);\n xobjects.items.setValue(arg2.value, reference);\n if (typeof this.pdfDocument !== 'undefined') {\n parentXObjects.items.setValue(arg2.value, reference);\n }\n }\n /* tslint:enable */\n }\n };\n return PdfResources;\n}(PdfDictionary));\nexport { PdfResources };\n/**\n * Used to create new guid for resources.\n * @private\n */\nvar Guid = /** @class */ (function () {\n /**\n * Initialize an `instance of GUID` class.\n * @private\n */\n function Guid(stringValue) {\n this.stringValue = stringValue || Guid.getNewGuidString();\n }\n Object.defineProperty(Guid, \"randomNumber\", {\n /**\n * Generate `Random number` for GUID.\n * @private\n */\n get: function () {\n Guid.guid = Guid.guid + 1;\n Guid.guid = Guid.guid > 999999999999 ? 0 : Guid.guid;\n return Guid.guid;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return the value of `GUID as string`.\n * @private\n */\n Guid.prototype.toString = function () {\n return this.stringValue;\n };\n /**\n * Generate `new GUID`.\n * @private\n */\n Guid.getNewGuidString = function () {\n var guid = 'abc7def4-ghi9-jkl2-m6n3-';\n var temproaryString = 'opqrstuvwxyz';\n var randomString = Guid.randomNumber.toString();\n randomString = guid + temproaryString.substr(0, (12 - randomString.length)) + randomString;\n return randomString;\n };\n /**\n * static field to store `endding value of current GUID`.\n * @private\n */\n Guid.guid = 0;\n return Guid;\n}());\nexport { Guid };\n","import { PdfArray } from './../primitives/pdf-array';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfResources } from './../graphics/pdf-resources';\n/**\n * The abstract base class for all pages,\n * `PdfPageBase` class provides methods and properties to create PDF pages and its elements.\n * @private\n */\nvar PdfPageBase = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `PdfPageBase` class.\n * @private\n */\n function PdfPageBase(dictionary) {\n /**\n * `Index` of the default layer.\n * @default -1.\n * @private\n */\n this.defLayerIndex = -1;\n /**\n * Local variable to store if page `updated`.\n * @default false.\n * @private\n */\n this.modified = false;\n /**\n * Instance of `DictionaryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.pageDictionary = dictionary;\n }\n Object.defineProperty(PdfPageBase.prototype, \"section\", {\n //Properties\n /**\n * Gets the `section` of a page.\n * @private\n */\n get: function () {\n // if (this.pdfSection === null) {\n // throw new Error('PdfException : Page must be added to some section before using.');\n // }\n return this.pdfSection;\n },\n set: function (value) {\n this.pdfSection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"dictionary\", {\n /**\n * Gets the page `dictionary`.\n * @private\n */\n get: function () {\n return this.pageDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.pageDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"defaultLayer\", {\n /**\n * Gets the `default layer` of the page (Read only).\n * @private\n */\n get: function () {\n var layer = this.layers;\n var index = this.defaultLayerIndex;\n var returnlayer = layer.items(index);\n return returnlayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"defaultLayerIndex\", {\n /**\n * Gets or sets `index of the default layer`.\n * @private\n */\n get: function () {\n if (this.layerCollection.count === 0 || this.defLayerIndex === -1) {\n var layer = this.layerCollection.add();\n this.defLayerIndex = this.layerCollection.indexOf(layer);\n }\n return this.defLayerIndex;\n },\n /**\n * Gets or sets` index of the default layer`.\n * @private\n */\n set: function (value) {\n if (value < 0 || value > this.layers.count - 1) {\n throw new Error('ArgumentOutOfRangeException : value, Index can not be less 0 and greater Layers.Count - 1');\n }\n else {\n this.defLayerIndex = value;\n this.modified = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"layers\", {\n /**\n * Gets the collection of the page's `layers` (Read only).\n * @private\n */\n get: function () {\n if (this.layerCollection == null || typeof this.layerCollection === 'undefined') {\n this.layerCollection = new PdfPageLayerCollection(this);\n }\n return this.layerCollection;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return an instance of `PdfResources` class.\n * @private\n */\n PdfPageBase.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.dictionary.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n Object.defineProperty(PdfPageBase.prototype, \"contents\", {\n /**\n * Gets `array of page's content`.\n * @private\n */\n get: function () {\n var obj = this.pageDictionary.items.getValue(this.dictionaryProperties.contents);\n var contents = obj;\n var rh = obj;\n if (contents == null) {\n contents = new PdfArray();\n this.pageDictionary.items.setValue(this.dictionaryProperties.contents, contents);\n }\n return contents;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `resources`.\n * @private\n */\n PdfPageBase.prototype.setResources = function (res) {\n this.resources = res;\n this.dictionary.items.setValue(this.dictionaryProperties.resources, this.resources);\n this.modified = true;\n };\n return PdfPageBase;\n}());\nexport { PdfPageBase };\n","import { PdfArray } from './../primitives/pdf-array';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { SizeF, RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfStringLayouter } from './../graphics/fonts/string-layouter';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * `PdfAnnotationCollection` class represents the collection of 'PdfAnnotation' objects.\n * @private\n */\nvar PdfAnnotationCollection = /** @class */ (function () {\n function PdfAnnotationCollection(page) {\n // Constants\n /**\n * `Error` constant message.\n * @private\n */\n this.alreadyExistsAnnotationError = 'This annotatation had been already added to page';\n /**\n * `Error` constant message.\n * @private\n */\n this.missingAnnotationException = 'Annotation is not contained in collection.';\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Array of the `annotations`.\n * @private\n */\n this.internalAnnotations = new PdfArray();\n /**\n * privte `list` for the annotations.\n * @private\n */\n this.lists = [];\n if (typeof page !== 'undefined') {\n this.page = page;\n }\n }\n Object.defineProperty(PdfAnnotationCollection.prototype, \"annotations\", {\n /**\n * Gets the `PdfAnnotation` object at the specified index. Read-Only.\n * @private\n */\n get: function () {\n return this.internalAnnotations;\n },\n set: function (value) {\n this.internalAnnotations = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Adds` a new annotation to the collection.\n * @private\n */\n PdfAnnotationCollection.prototype.add = function (annotation) {\n // this.SetPrint(annotation);\n this.doAdd(annotation);\n };\n /**\n * `Adds` a Annotation to collection.\n * @private\n */\n /* tslint:disable */\n PdfAnnotationCollection.prototype.doAdd = function (annotation) {\n if (typeof annotation.destination !== 'undefined') {\n var layout = new PdfStringLayouter();\n var layoutResult = layout.layout(annotation.text, annotation.font, annotation.stringFormat, new SizeF((annotation.bounds.width), 0), false, new SizeF(0, 0));\n var lastPosition = annotation.bounds.y;\n if (layoutResult.lines.length === 1) {\n var size = annotation.font.measureString(layoutResult.lines[0].text);\n annotation.bounds = new RectangleF(new PointF(annotation.bounds.x, lastPosition), size);\n annotation.text = layoutResult.lines[0].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annotation.text, annotation.font, null, annotation.brush, annotation.bounds.x, annotation.bounds.y, annotation.bounds.width, annotation.bounds.height, null);\n //Add annotation to dictionary.\n annotation.setPage(this.page);\n this.setColor(annotation);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n this.lists.push(annotation);\n }\n else {\n for (var i = 0; i < layoutResult.lines.length; i++) {\n var size = annotation.font.measureString(layoutResult.lines[i].text);\n if (i === 0) {\n annotation.bounds = new RectangleF(annotation.bounds.x, lastPosition, size.width, size.height);\n annotation.text = layoutResult.lines[i].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annotation.text, annotation.font, null, annotation.brush, annotation.bounds.x, lastPosition, size.width, size.height, null);\n //Add annotation to dictionary.\n annotation.setPage(this.page);\n this.setColor(annotation);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n this.lists.push(annotation);\n //Update y for drawing next line of the text.\n lastPosition += annotation.bounds.height;\n }\n else {\n var annot = annotation.clone();\n annot.bounds = new RectangleF(new PointF(annotation.bounds.x, lastPosition), size);\n annot.text = layoutResult.lines[i].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annot.text, annot.font, null, annot.brush, annot.bounds.x, annot.bounds.y, annot.bounds.width, annot.bounds.height, null);\n //Add annotation to dictionary.\n annot.setPage(this.page);\n this.setColor(annot);\n this.internalAnnotations.add(new PdfReferenceHolder(annot));\n this.lists.push(annot);\n //Update y for drawing next line of the text.\n lastPosition += annot.bounds.height;\n }\n }\n }\n }\n else {\n annotation.setPage(this.page);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n return this.lists.push(annotation);\n }\n };\n /* tslint:enable */\n /**\n * `Set a color of an annotation`.\n * @private\n */\n PdfAnnotationCollection.prototype.setColor = function (annotation) {\n var cs = PdfColorSpace.Rgb;\n var colours = annotation.color.toArray(cs);\n annotation.dictionary.items.setValue(this.dictionaryProperties.c, colours);\n };\n Object.defineProperty(PdfAnnotationCollection.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the `Element` representing this object.\n * @private\n */\n get: function () {\n return this.internalAnnotations;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAnnotationCollection;\n}());\nexport { PdfAnnotationCollection };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary, SaveTemplateEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { SizeF } from './../drawing/pdf-drawing';\nimport { PdfAnnotationCollection } from './../annotations/annotation-collection';\nimport { PdfPageLayer } from './pdf-page-layer';\n/**\n * Provides methods and properties to create pages and its elements.\n * `PdfPage` class inherited from the `PdfPageBase` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPage = /** @class */ (function (_super) {\n __extends(PdfPage, _super);\n //constructors\n /**\n * Initialize the new instance for `PdfPage` class.\n * @private\n */\n function PdfPage() {\n var _this = _super.call(this, new PdfDictionary()) || this;\n /**\n * Stores the instance of `PdfAnnotationCollection` class.\n * @hidden\n * @default null\n * @private\n */\n _this.annotationCollection = null;\n /**\n * Stores the instance of `PageBeginSave` event for Page Number Field.\n * @default null\n * @private\n */\n _this.beginSave = null;\n _this.initialize();\n return _this;\n }\n Object.defineProperty(PdfPage.prototype, \"document\", {\n //Properties\n /**\n * Gets current `document`.\n * @private\n */\n get: function () {\n if (this.section !== null && this.section.parent !== null) {\n return this.section.parent.document;\n }\n else {\n return null;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"graphics\", {\n /**\n * Get the current `graphics`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // get graphics\n * let graphics : PdfGraphics = page1.graphics;\n * //\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n var result = this.defaultLayer.graphics;\n result.currentPage = this;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"crossTable\", {\n /**\n * Gets the `cross table`.\n * @private\n */\n get: function () {\n if (this.section === null) {\n throw new Error('PdfDocumentException : Page is not created');\n }\n return this.section.parent === null ? this.section.parentDocument.crossTable : this.section.parent.document.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"size\", {\n /**\n * Gets the size of the PDF page- Read only.\n * @public\n */\n get: function () {\n return this.section.pageSettings.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"origin\", {\n /**\n * Gets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.section.pageSettings.origin;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"annotations\", {\n /**\n * Gets a collection of the `annotations` of the page- Read only.\n * @private\n */\n get: function () {\n if (this.annotationCollection == null) {\n this.annotationCollection = new PdfAnnotationCollection(this);\n // if (!this.Dictionary.ContainsKey(this.dictionaryProperties.annots)) {\n this.dictionary.items.setValue(this.dictionaryProperties.annots, this.annotationCollection.element);\n // }\n this.annotationCollection.annotations = this.dictionary.items.getValue(this.dictionaryProperties.annots);\n }\n return this.annotationCollection;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` a page.\n * @private\n */\n PdfPage.prototype.initialize = function () {\n this.dictionary.items.setValue(this.dictionaryProperties.type, new PdfName('Page'));\n this.dictionary.pageBeginDrawTemplate = new SaveTemplateEventHandler(this);\n };\n /**\n * Sets parent `section` to the page.\n * @private\n */\n PdfPage.prototype.setSection = function (section) {\n this.section = section;\n this.dictionary.items.setValue(this.dictionaryProperties.parent, new PdfReferenceHolder(section));\n };\n /**\n * `Resets the progress`.\n * @private\n */\n PdfPage.prototype.resetProgress = function () {\n this.isProgressOn = false;\n };\n /**\n * Get the page size reduced by page margins and page template dimensions.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the specified point using `getClientSize` method\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfPage.prototype.getClientSize = function () {\n var returnValue = this.section.getActualBounds(this, true);\n return new SizeF(returnValue.width, returnValue.height);\n };\n /**\n * Helper method to retrive the instance of `PageBeginSave` event for header and footer elements.\n * @private\n */\n PdfPage.prototype.pageBeginSave = function () {\n var doc = this.document;\n if (typeof doc !== undefined && doc != null) {\n this.drawPageTemplates(doc);\n }\n if (this.beginSave != null && typeof this.beginSave !== 'undefined') {\n this.beginSave(this);\n }\n };\n /**\n * Helper method to draw template elements.\n * @private\n */\n PdfPage.prototype.drawPageTemplates = function (document) {\n // Draw Background templates.\n var hasBackTemplates = this.section.containsTemplates(document, this, false);\n if (hasBackTemplates) {\n var backLayer = new PdfPageLayer(this, false);\n this.layers.insert(0, backLayer);\n this.section.drawTemplates(this, backLayer, document, false);\n if (backLayer.graphics !== null && typeof backLayer.graphics !== 'undefined') {\n for (var i = 0; i < backLayer.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = backLayer.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(backLayer.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n }\n // Draw Foreground templates.\n var hasFrontTemplates = this.section.containsTemplates(document, this, true);\n if (hasFrontTemplates) {\n var frontLayer = new PdfPageLayer(this, false);\n this.layers.add(frontLayer);\n this.section.drawTemplates(this, frontLayer, document, true);\n }\n };\n return PdfPage;\n}(PdfPageBase));\nexport { PdfPage };\n","/**\n * Provides data for `PageAddedEventHandler` event.\n * This event raises when adding the new PDF page to the PDF document.\n */\nvar PageAddedEventArgs = /** @class */ (function () {\n function PageAddedEventArgs(page) {\n if (typeof page !== 'undefined') {\n this.pdfPage = page;\n }\n else {\n this.pdfPage = null;\n }\n }\n Object.defineProperty(PageAddedEventArgs.prototype, \"page\", {\n /**\n * Gets the `newly added page`.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return PageAddedEventArgs;\n}());\nexport { PageAddedEventArgs };\n","/**\n * Represents the `collection of pages in a section`.\n * @private\n */\nvar PdfSectionPageCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfSectionPageCollection` class.\n * @private\n */\n function PdfSectionPageCollection(section) {\n // Fields\n /**\n * @hidden\n * @private\n */\n this.pdfSection = null;\n if (section == null) {\n throw Error('ArgumentNullException(\"section\")');\n }\n this.section = section;\n }\n Object.defineProperty(PdfSectionPageCollection.prototype, \"section\", {\n // Properties\n /**\n * Gets the `PdfPage` at the specified index.\n * @private\n */\n get: function () {\n return this.pdfSection;\n },\n set: function (value) {\n this.pdfSection = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public Methods\n /**\n * `Determines` whether the specified page is within the collection.\n * @private\n */\n PdfSectionPageCollection.prototype.contains = function (page) {\n return this.section.contains(page);\n };\n /**\n * `Removes` the specified page from collection.\n * @private\n */\n PdfSectionPageCollection.prototype.remove = function (page) {\n this.section.remove(page);\n };\n /**\n * `Adds` a new page from collection.\n * @private\n */\n PdfSectionPageCollection.prototype.add = function () {\n return this.section.add();\n };\n return PdfSectionPageCollection;\n}());\nexport { PdfSectionPageCollection };\n","import { TemplateType } from './../pages/enum';\n// import { PdfStampCollection } from `./../Pages/PdfStampCollection`;\n/**\n * `PdfDocumentTemplate` class encapsulates a page template for all the pages in the document.\n * @private\n */\nvar PdfDocumentTemplate = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfDocumentTemplate` class.\n * @public\n */\n function PdfDocumentTemplate() {\n //\n }\n Object.defineProperty(PdfDocumentTemplate.prototype, \"left\", {\n // private m_stamps : PdfStampCollection;\n // Properties\n /**\n * `Left` page template object.\n * @public\n */\n get: function () {\n return this.leftTemplate;\n },\n set: function (value) {\n this.leftTemplate = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"top\", {\n /**\n * `Top` page template object.\n * @public\n */\n get: function () {\n return this.topTemplate;\n },\n set: function (value) {\n this.topTemplate = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"right\", {\n /**\n * `Right` page template object.\n * @public\n */\n get: function () {\n return this.rightTemplate;\n },\n set: function (value) {\n this.rightTemplate = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"bottom\", {\n /**\n * `Bottom` page template object.\n * @public\n */\n get: function () {\n return this.bottomTemplate;\n },\n set: function (value) {\n this.bottomTemplate = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenLeft\", {\n /**\n * `EvenLeft` page template object.\n * @public\n */\n get: function () {\n return this.evenLeft;\n },\n set: function (value) {\n this.evenLeft = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenTop\", {\n /**\n * `EvenTop` page template object.\n * @public\n */\n get: function () {\n return this.evenTop;\n },\n set: function (value) {\n this.evenTop = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenRight\", {\n /**\n * `EvenRight` page template object.\n * @public\n */\n get: function () {\n return this.evenRight;\n },\n set: function (value) {\n this.evenRight = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenBottom\", {\n /**\n * `EvenBottom` page template object.\n * @public\n */\n get: function () {\n return this.evenBottom;\n },\n set: function (value) {\n this.evenBottom = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddLeft\", {\n /**\n * `OddLeft` page template object.\n * @public\n */\n get: function () {\n return this.oddLeft;\n },\n set: function (value) {\n this.oddLeft = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddTop\", {\n /**\n * `OddTop` page template object.\n * @public\n */\n get: function () {\n return this.oddTop;\n },\n set: function (value) {\n this.oddTop = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddRight\", {\n /**\n * `OddRight` page template object.\n * @public\n */\n get: function () {\n return this.oddRight;\n },\n set: function (value) {\n this.oddRight = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddBottom\", {\n /**\n * `OddBottom` page template object.\n * @public\n */\n get: function () {\n return this.oddBottom;\n },\n set: function (value) {\n this.oddBottom = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Returns `left` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getLeft = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenLeft != null) ? this.EvenLeft : this.left;\n }\n else {\n template = (this.OddLeft != null) ? this.OddLeft : this.left;\n }\n // }\n return template;\n };\n /**\n * Returns `top` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getTop = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenTop != null) ? this.EvenTop : this.top;\n }\n else {\n template = (this.OddTop != null) ? this.OddTop : this.top;\n }\n // }\n return template;\n };\n /**\n * Returns `right` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getRight = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenRight != null) ? this.EvenRight : this.right;\n }\n else {\n template = (this.OddRight != null) ? this.OddRight : this.right;\n }\n // }\n return template;\n };\n /**\n * Returns `bottom` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getBottom = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenBottom != null) ? this.EvenBottom : this.bottom;\n }\n else {\n template = (this.OddBottom != null) ? this.OddBottom : this.bottom;\n }\n // }\n return template;\n };\n /**\n * Checks whether the page `is even`.\n * @private\n */\n PdfDocumentTemplate.prototype.isEven = function (page) {\n var pages = page.section.document.pages;\n var index = 0;\n if (pages.pageCollectionIndex.containsKey(page)) {\n index = pages.pageCollectionIndex.getValue(page) + 1;\n }\n else {\n index = pages.indexOf(page) + 1;\n }\n var even = ((index % 2) === 0);\n return even;\n };\n /**\n * Checks a `template element`.\n * @private\n */\n PdfDocumentTemplate.prototype.checkElement = function (templateElement, type) {\n if (templateElement != null) {\n if ((typeof templateElement.type !== 'undefined') && (templateElement.type !== TemplateType.None)) {\n throw new Error('NotSupportedException:Can not reassign the template element. Please, create new one.');\n }\n templateElement.type = type;\n }\n return templateElement;\n };\n return PdfDocumentTemplate;\n}());\nexport { PdfDocumentTemplate };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfSectionTemplate.ts class for EJ2-PDF\n */\nimport { PdfDocumentTemplate } from './../document/pdf-document-template';\n/**\n * Represents a `page template` for all the pages in the section.\n */\nvar PdfSectionTemplate = /** @class */ (function (_super) {\n __extends(PdfSectionTemplate, _super);\n // Constructors\n /**\n * `Creates a new object`.\n * @private\n */\n function PdfSectionTemplate() {\n var _this = _super.call(this) || this;\n _this.leftValue = _this.topValue = _this.rightValue = _this.bottomValue = _this.stampValue = true;\n return _this;\n }\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentLeftTemplate\", {\n // Properties\n /**\n * Gets or sets value indicating whether parent `Left page template should be used or not`.\n * @private\n */\n get: function () {\n return this.leftValue;\n },\n set: function (value) {\n this.leftValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentTopTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Top page template should be used or not`.\n * @private\n */\n get: function () {\n return this.topValue;\n },\n set: function (value) {\n this.topValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentRightTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Right page template should be used or not`.\n * @private\n */\n get: function () {\n return this.rightValue;\n },\n set: function (value) {\n this.rightValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentBottomTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Bottom page template should be used or not`.\n * @private\n */\n get: function () {\n return this.bottomValue;\n },\n set: function (value) {\n this.bottomValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentStamps\", {\n /**\n * Gets or sets value indicating whether the `stamp value` is true or not.\n * @private\n */\n get: function () {\n return this.stampValue;\n },\n set: function (value) {\n this.stampValue = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfSectionTemplate;\n}(PdfDocumentTemplate));\nexport { PdfSectionTemplate };\n","import { PdfPage } from './pdf-page';\nimport { PageAddedEventArgs } from './page-added-event-arguments';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { SaveSectionEventHandler } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfSectionCollection } from './pdf-section-collection';\nimport { PdfSectionPageCollection } from './pdf-section-page-collection';\nimport { RectangleF } from './../drawing/pdf-drawing';\nimport { PdfSectionTemplate } from './pdf-section-templates';\n/**\n * Represents a `section` entity. A section it's a set of the pages with similar page settings.\n */\nvar PdfSection = /** @class */ (function () {\n function PdfSection(document, pageSettings) {\n //Fields\n //public PageAdded() : PageAddedEventArgs.PageAddedEventHandler = new PageAddedEventArgs.PageAddedEventHandler(Object,args)\n /**\n * @hidden\n * @private\n */\n this.pageAdded = new PageAddedEventArgs();\n /**\n * @hidden\n * @private\n */\n this.pdfPages = [];\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (typeof pageSettings === 'undefined') {\n this.constructor(document, document.pageSettings);\n }\n else {\n this.pdfDocument = document;\n this.settings = pageSettings.clone();\n this.initialSettings = this.settings.clone();\n this.initialize();\n }\n }\n Object.defineProperty(PdfSection.prototype, \"parent\", {\n //Property\n /**\n * Gets or sets the `parent`.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n set: function (value) {\n this.sectionCollection = value;\n this.section.items.setValue(this.dictionaryProperties.parent, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"parentDocument\", {\n /**\n * Gets the `parent document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"pageSettings\", {\n /**\n * Gets or sets the `page settings` of the section.\n * @private\n */\n get: function () {\n return this.settings;\n },\n set: function (value) {\n if (value != null) {\n this.settings = value;\n }\n else {\n throw Error('Value can not be null.');\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.section;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"count\", {\n /**\n * Gets the `count` of the pages in the section.\n * @private\n */\n get: function () {\n return this.pagesReferences.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"template\", {\n /**\n * Gets or sets a `template` for the pages in the section.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfSectionTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"document\", {\n /**\n * Gets the `document`.\n * @private\n */\n get: function () {\n return this.sectionCollection.document;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"pages\", {\n /**\n * Gets the collection of `pages` in a section (Read only)\n * @private\n */\n get: function () {\n if (this.pagesCollection == null || typeof this.pagesCollection === 'undefined') {\n this.pagesCollection = new PdfSectionPageCollection(this);\n }\n return this.pagesCollection;\n },\n enumerable: true,\n configurable: true\n });\n //methods\n /**\n * `Return the page collection` of current section.\n * @private\n */\n PdfSection.prototype.getPages = function () {\n return this.pdfPages;\n };\n /**\n * `Translates` point into native coordinates of the page.\n * @private\n */\n PdfSection.prototype.pointToNativePdf = function (page, point) {\n var bounds = this.getActualBounds(page, true);\n point.x += bounds.x;\n point.y = this.pageSettings.height - (point.y);\n return point;\n };\n /**\n * Sets the page setting of the current section.\n * @public\n * @param settings Instance of `PdfPageSettings`\n */\n PdfSection.prototype.setPageSettings = function (settings) {\n this.settings = settings;\n this.state.orientation = settings.orientation;\n this.state.rotate = settings.rotate;\n this.state.size = settings.size;\n this.state.origin = settings.origin;\n };\n /**\n * `Initializes` the object.\n * @private\n */\n PdfSection.prototype.initialize = function () {\n this.pagesReferences = new PdfArray();\n this.section = new PdfDictionary();\n this.state = new PageSettingsState(this.pdfDocument);\n this.section.sectionBeginSave = new SaveSectionEventHandler(this, this.state);\n this.pageCount = new PdfNumber(0);\n this.section.items.setValue(this.dictionaryProperties.count, this.pageCount);\n this.section.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.pages));\n this.section.items.setValue(this.dictionaryProperties.kids, this.pagesReferences);\n };\n /**\n * Checks whether any template should be printed on this layer.\n * @private\n * @param document The parent document.\n * @param page The parent page.\n * @param foreground Layer z-order.\n * @returns True - if some content should be printed on the layer, False otherwise.\n */\n PdfSection.prototype.containsTemplates = function (document, page, foreground) {\n var documentHeaders = this.getDocumentTemplates(document, page, true, foreground);\n var documentTemplates = this.getDocumentTemplates(document, page, false, foreground);\n var contains = (documentHeaders.length > 0 || documentTemplates.length > 0);\n return contains;\n };\n /**\n * Returns array of the document templates.\n * @private\n * @param document The parent document.\n * @param page The parent page.\n * @param headers If true - return headers/footers, if false - return simple templates.\n * @param foreground If true - return foreground templates, if false - return background templates.\n * @returns Returns array of the document templates.\n */\n /* tslint:disable */\n PdfSection.prototype.getDocumentTemplates = function (document, page, headers, foreground) {\n var templates = [];\n if (headers) {\n if (this.template.applyDocumentTopTemplate && document.template.getTop(page) != null) {\n if ((!(document.template.getTop(page).foreground || foreground)) || (document.template.getTop(page).foreground && foreground)) {\n templates.push(document.template.getTop(page));\n }\n }\n if (this.template.applyDocumentBottomTemplate && document.template.getBottom(page) != null) {\n if ((!(document.template.getBottom(page).foreground || foreground)) || (document.template.getBottom(page).foreground && foreground)) {\n templates.push(document.template.getBottom(page));\n }\n }\n if (this.template.applyDocumentLeftTemplate && document.template.getLeft(page) != null) {\n if ((!(document.template.getLeft(page).foreground || foreground)) || (document.template.getLeft(page).foreground && foreground)) {\n templates.push(document.template.getLeft(page));\n }\n }\n if (this.template.applyDocumentRightTemplate && document.template.getRight(page) != null) {\n if ((!(document.template.getRight(page).foreground || foreground)) || (document.template.getRight(page).foreground && foreground)) {\n templates.push(document.template.getRight(page));\n }\n }\n }\n return templates;\n };\n /* tslint:enable */\n /**\n * `Adds` the specified page.\n * @private\n */\n PdfSection.prototype.add = function (page) {\n if (typeof page === 'undefined') {\n var page_1 = new PdfPage();\n this.add(page_1);\n return page_1;\n }\n else {\n var r = this.checkPresence(page);\n this.pdfPages.push(page);\n this.pagesReferences.add(r);\n page.setSection(this);\n page.resetProgress();\n this.pageAddedMethod(page);\n }\n };\n /**\n * `Checks the presence`.\n * @private\n */\n PdfSection.prototype.checkPresence = function (page) {\n var rh = new PdfReferenceHolder(page);\n var contains = false;\n var sc = this.parent;\n for (var index = 0; index < sc.section.length; index++) {\n var section = sc.section[index];\n contains = contains || section.contains(page);\n }\n return rh;\n };\n /**\n * `Determines` whether the page in within the section.\n * @private\n */\n PdfSection.prototype.contains = function (page) {\n var index = this.indexOf(page);\n return (0 <= index);\n };\n /**\n * Get the `index of` the page.\n * @private\n */\n PdfSection.prototype.indexOf = function (page) {\n for (var index = 0; index < this.pdfPages.length; index++) {\n if (this.pdfPages[index] === page) {\n return this.pdfPages.indexOf(page);\n }\n }\n var r = new PdfReferenceHolder(page);\n return this.pagesReferences.indexOf(r);\n };\n /**\n * Call two event's methods.\n * @hidden\n * @private\n */\n PdfSection.prototype.pageAddedMethod = function (page) {\n //Create event's arguments\n var args = new PageAddedEventArgs(page);\n this.onPageAdded(args);\n var parent = this.parent;\n parent.document.pages.onPageAdded(args);\n this.pageCount.intValue = this.count;\n };\n /**\n * Called when the page has been added.\n * @hidden\n * @private\n */\n PdfSection.prototype.onPageAdded = function (args) {\n //\n };\n PdfSection.prototype.getActualBounds = function (arg1, arg2, arg3) {\n if (arg1 instanceof PdfPage && typeof arg2 === 'boolean') {\n var result = void 0;\n var document_1 = this.parent.document;\n result = this.getActualBounds(document_1, arg1, arg2);\n return result;\n }\n else {\n arg1 = arg1;\n arg2 = arg2;\n arg3 = arg3;\n var bounds = new RectangleF(0, 0, 0, 0);\n bounds.height = (arg3) ? this.pageSettings.size.height : this.pageSettings.getActualSize().height;\n bounds.width = (arg3) ? this.pageSettings.size.width : this.pageSettings.getActualSize().width;\n var left = this.getLeftIndentWidth(arg1, arg2, arg3);\n var top_1 = this.getTopIndentHeight(arg1, arg2, arg3);\n var right = this.getRightIndentWidth(arg1, arg2, arg3);\n var bottom = this.getBottomIndentHeight(arg1, arg2, arg3);\n bounds.x += left;\n bounds.y += top_1;\n bounds.width -= (left + right);\n bounds.height -= (top_1 + bottom);\n return bounds;\n }\n };\n /**\n * Calculates width of the `left indent`.\n * @private\n */\n PdfSection.prototype.getLeftIndentWidth = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.left : 0;\n var templateWidth = (this.template.getLeft(page) != null) ? this.template.getLeft(page).width : 0;\n var docTemplateWidth = (document.template.getLeft(page) != null) ? document.template.getLeft(page).width : 0;\n value += (this.template.applyDocumentLeftTemplate) ? Math.max(templateWidth, docTemplateWidth) : templateWidth;\n return value;\n };\n /**\n * Calculates `Height` of the top indent.\n * @private\n */\n PdfSection.prototype.getTopIndentHeight = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.top : 0;\n var templateHeight = (this.template.getTop(page) != null) ? this.template.getTop(page).height : 0;\n var docTemplateHeight = (document.template.getTop(page) != null) ? document.template.getTop(page).height : 0;\n value += (this.template.applyDocumentTopTemplate) ? Math.max(templateHeight, docTemplateHeight) : templateHeight;\n return value;\n };\n /**\n * Calculates `width` of the right indent.\n * @private\n */\n PdfSection.prototype.getRightIndentWidth = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.right : 0;\n var templateWidth = (this.template.getRight(page) != null) ? this.template.getRight(page).width : 0;\n var docTemplateWidth = (document.template.getRight(page) != null) ? document.template.getRight(page).width : 0;\n value += (this.template.applyDocumentRightTemplate) ? Math.max(templateWidth, docTemplateWidth) : templateWidth;\n return value;\n };\n /**\n * Calculates `Height` of the bottom indent.\n * @private\n */\n PdfSection.prototype.getBottomIndentHeight = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.bottom : 0;\n var templateHeight = (this.template.getBottom(page) != null) ? this.template.getBottom(page).height : 0;\n var docTemplateHeight = (document.template.getBottom(page) != null) ? document.template.getBottom(page).height : 0;\n value += (this.template.applyDocumentBottomTemplate) ? Math.max(templateHeight, docTemplateHeight) : templateHeight;\n return value;\n };\n /**\n * `Removes` the page from the section.\n * @private\n */\n PdfSection.prototype.remove = function (page) {\n if (page == null) {\n throw Error('ArgumentNullException(\"page\")');\n }\n var index = this.pdfPages.indexOf(page);\n this.pagesReferences.removeAt(index);\n var temproaryPages = [];\n for (var j = 0; j < index; j++) {\n temproaryPages.push(this.pdfPages[j]);\n }\n for (var j = index + 1; j < this.pdfPages.length; j++) {\n temproaryPages.push(this.pdfPages[j]);\n }\n this.pdfPages = temproaryPages;\n };\n /**\n * In fills dictionary by the data from `Page settings`.\n * @private\n */\n PdfSection.prototype.applyPageSettings = function (container, parentSettings, state) {\n var bounds = new RectangleF(state.origin, state.size);\n container.items.setValue(this.dictionaryProperties.mediaBox, PdfArray.fromRectangle(bounds));\n var rotate = 0;\n rotate = PdfSectionCollection.rotateFactor * state.rotate;\n var angle = new PdfNumber(rotate);\n container.items.setValue(this.dictionaryProperties.rotate, angle);\n };\n /**\n * Catches the Save event of the dictionary.\n * @hidden\n * @private\n */\n PdfSection.prototype.beginSave = function (state, writer) {\n var doc = writer.document;\n this.applyPageSettings(this.section, doc.pageSettings, state);\n };\n /**\n * Draws page templates on the page.\n * @private\n */\n PdfSection.prototype.drawTemplates = function (page, layer, document, foreground) {\n var documentHeaders = this.getDocumentTemplates(document, page, true, foreground);\n var documentTemplates = this.getDocumentTemplates(document, page, false, foreground);\n if (foreground) {\n this.drawTemplatesHelper(layer, document, documentHeaders);\n this.drawTemplatesHelper(layer, document, documentTemplates);\n }\n else {\n this.drawTemplatesHelper(layer, document, documentHeaders);\n this.drawTemplatesHelper(layer, document, documentTemplates);\n }\n };\n /**\n * Draws page templates on the page.\n * @private\n */\n PdfSection.prototype.drawTemplatesHelper = function (layer, document, templates) {\n if (templates != null && templates.length > 0) {\n var len = templates.length;\n for (var i = 0; i < len; i++) {\n var template = templates[i];\n template.draw(layer, document);\n }\n }\n };\n return PdfSection;\n}());\nexport { PdfSection };\nvar PageSettingsState = /** @class */ (function () {\n //Public Constructor\n /**\n * New instance to store the `PageSettings`.\n * @private\n */\n function PageSettingsState(document) {\n this.pageOrientation = document.pageSettings.orientation;\n this.pageRotate = document.pageSettings.rotate;\n this.pageSize = document.pageSettings.size;\n this.pageOrigin = document.pageSettings.origin;\n }\n Object.defineProperty(PageSettingsState.prototype, \"orientation\", {\n //public Properties\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (value) {\n this.pageOrientation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"rotate\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageRotate;\n },\n set: function (value) {\n this.pageRotate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"size\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.pageSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"origin\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n return PageSettingsState;\n}());\nexport { PageSettingsState };\n","import { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfDictionary, SaveSectionCollectionEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfSection } from './pdf-section';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents the `collection of the sections`.\n * @private\n */\nvar PdfSectionCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfSectionCollection` class.\n * @private\n */\n function PdfSectionCollection(document) {\n /**\n * @hidden\n * @private\n */\n this.sections = [];\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (document === null) {\n // throw new Error('ArgumentNullException : document');\n // }\n this.pdfDocument = document.clone();\n this.initialize();\n }\n Object.defineProperty(PdfSectionCollection.prototype, \"section\", {\n //Properties\n /**\n * Gets the `Section` collection.\n */\n get: function () {\n return this.sections;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"document\", {\n /**\n * Gets a parent `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"count\", {\n /**\n * Gets the `number of sections` in a document.\n * @private\n */\n get: function () {\n return this.sections.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.pages;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Initializes the object`.\n * @private\n */\n PdfSectionCollection.prototype.initialize = function () {\n this.sectionCount = new PdfNumber(0);\n this.sectionCollection = new PdfArray();\n this.pages = new PdfDictionary();\n this.pages.beginSave = new SaveSectionCollectionEventHandler(this);\n this.pages.items.setValue(this.dictionaryProperties.type, new PdfName('Pages'));\n this.pages.items.setValue(this.dictionaryProperties.kids, this.sectionCollection);\n this.pages.items.setValue(this.dictionaryProperties.count, this.sectionCount);\n this.pages.items.setValue(this.dictionaryProperties.resources, new PdfDictionary());\n this.setPageSettings(this.pages, this.pdfDocument.pageSettings);\n };\n /**\n * Initializes a new instance of the `PdfSectionCollection` class.\n * @private\n */\n PdfSectionCollection.prototype.pdfSectionCollection = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException()');\n }\n return this.sections[index];\n };\n /**\n * In fills dictionary by the data from `Page settings`.\n * @private\n */\n PdfSectionCollection.prototype.setPageSettings = function (container, pageSettings) {\n // if (container === null) {\n // throw new Error('ArgumentNullException : container');\n // }\n // if (pageSettings === null) {\n // throw new Error('ArgumentNullException : pageSettings');\n // }\n var bounds = new RectangleF(new PointF(), pageSettings.size);\n container.items.setValue(this.dictionaryProperties.mediaBox, PdfArray.fromRectangle(bounds));\n };\n /**\n * `Adds` the specified section.\n * @private\n */\n PdfSectionCollection.prototype.add = function (section) {\n if (typeof section === 'undefined') {\n var section_1 = new PdfSection(this.pdfDocument);\n this.add(section_1);\n return section_1;\n }\n else {\n // if (section === null) {\n // throw new Error('ArgumentNullException : section');\n // }\n var r = this.checkSection(section);\n this.sections.push(section);\n section.parent = this;\n this.sectionCollection.add(r);\n return this.sections.indexOf(section);\n }\n };\n /**\n * `Checks` if the section is within the collection.\n * @private\n */\n PdfSectionCollection.prototype.checkSection = function (section) {\n var r = new PdfReferenceHolder(section);\n var contains = this.sectionCollection.contains(r);\n // if (contains) {\n // throw new Error('ArgumentException : The object can not be added twice to the collection,section');\n // }\n return r;\n };\n /**\n * Catches the Save event of the dictionary to `count the pages`.\n * @private\n */\n PdfSectionCollection.prototype.countPages = function () {\n var count = 0;\n this.sections.forEach(function (n) { return (count += n.count); });\n return count;\n };\n /**\n * Catches the Save event of the dictionary to `count the pages`.\n * @hidden\n * @private\n */\n PdfSectionCollection.prototype.beginSave = function () {\n this.sectionCount.intValue = this.countPages();\n };\n //Fields\n /**\n * Rotate factor for page `rotation`.\n * @default 90\n * @private\n */\n PdfSectionCollection.rotateFactor = 90;\n return PdfSectionCollection;\n}());\nexport { PdfSectionCollection };\n","import { PdfPage } from './pdf-page';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfPageOrientation } from './enum';\n/**\n * Represents a virtual collection of all the pages in the document.\n * @private\n */\nvar PdfDocumentPageCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfPageCollection` class.\n * @private\n */\n function PdfDocumentPageCollection(document) {\n /**\n * It holds the page collection with the `index`.\n * @private\n */\n this.pdfPageCollectionIndex = new Dictionary();\n /**\n * Stores the previous pages's `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.previousPageOrientation = PdfPageOrientation.Portrait;\n this.document = document;\n }\n Object.defineProperty(PdfDocumentPageCollection.prototype, \"count\", {\n //Property\n /**\n * Gets the total `number of the pages`.\n * @private\n */\n get: function () {\n return this.countPages();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentPageCollection.prototype, \"pageCollectionIndex\", {\n /**\n * Gets a `page index` from the document.\n * @private\n */\n get: function () {\n return this.pdfPageCollectionIndex;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocumentPageCollection.prototype.add = function (page) {\n if (typeof page === 'undefined') {\n var page_1 = new PdfPage();\n this.add(page_1);\n return page_1;\n }\n else {\n var section = this.getLastSection();\n if (section.pageSettings.orientation !== this.previousPageOrientation) {\n section = this.document.sections.add();\n section.pageSettings.orientation = this.document.pageSettings.orientation;\n }\n section.add(page);\n }\n };\n /**\n * Returns `last section` in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.getLastSection = function () {\n var sc = this.document.sections;\n if (sc.section.length === 0) {\n sc.add();\n }\n var section = sc.section[sc.section.length - 1];\n return section;\n };\n /**\n * Called when `new page has been added`.\n * @private\n */\n PdfDocumentPageCollection.prototype.onPageAdded = function (args) {\n // if (PageAdded !== null)\n // {\n // PageAdded(this, args);\n // }\n };\n /**\n * Gets the `total number of pages`.\n * @private\n */\n PdfDocumentPageCollection.prototype.countPages = function () {\n var sc = this.document.sections;\n var count = 0;\n for (var index = 0; index < sc.section.length; index++) {\n count += sc.section[index].count;\n }\n return count;\n };\n /**\n * Gets the `page object` from page index.\n * @private\n */\n PdfDocumentPageCollection.prototype.getPageByIndex = function (index) {\n return this.getPage(index);\n };\n /**\n * Gets a page by its `index` in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.getPage = function (index) {\n if ((index < 0) || (index >= this.count)) {\n throw Error('ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\")');\n }\n var page = null;\n var sectionStartIndex = 0;\n var sectionCount = 0;\n var pageIndex = 0;\n var length = this.document.sections.count;\n for (var i = 0; i < length; i++) {\n var section = this.document.sections.section[i];\n sectionCount = section.count;\n pageIndex = index - sectionStartIndex;\n // We found a section containing the page.\n if ((index >= sectionStartIndex && pageIndex < sectionCount)) {\n page = section.getPages()[pageIndex];\n break;\n }\n sectionStartIndex += sectionCount;\n }\n return page;\n };\n /**\n * Gets the `index of` the page in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.indexOf = function (page) {\n var index = -1;\n if (page == null) {\n throw new Error('ArgumentNullException: page');\n }\n else {\n var numPages = 0;\n for (var i = 0, len = this.document.sections.count; i < len; i++) {\n var section = this.document.sections.pdfSectionCollection(i);\n index = section.indexOf(page);\n if (index >= 0) {\n index += numPages;\n break;\n }\n else {\n index = -1;\n }\n numPages += section.count;\n }\n }\n return index;\n };\n /**\n * `Removes` the specified page.\n * @private\n */\n PdfDocumentPageCollection.prototype.remove = function (page) {\n if (page == null) {\n throw Error('ArgumentNullException(\"page\")');\n }\n var section = null;\n var len;\n for (var i = 0, len_1 = this.document.sections.count; i < len_1; i++) {\n section = this.document.sections.pdfSectionCollection(i);\n if (section.pages.contains(page)) {\n section.pages.remove(page);\n break;\n }\n }\n return section;\n };\n return PdfDocumentPageCollection;\n}());\nexport { PdfDocumentPageCollection };\n","/**\n * PdfCacheCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\n/**\n * `Collection of the cached objects`.\n * @private\n */\nvar PdfCacheCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfCacheCollection` class.\n * @private\n */\n function PdfCacheCollection() {\n this.referenceObjects = [];\n this.pdfFontCollection = new Dictionary();\n }\n // Public methods\n /**\n * `Searches` for the similar cached object. If is not found - adds the object to the cache.\n * @private\n */\n PdfCacheCollection.prototype.search = function (obj) {\n var result = null;\n var group = this.getGroup(obj);\n if (group == null) {\n group = this.createNewGroup();\n }\n else if (group.length > 0) {\n result = group[0];\n }\n group.push(obj);\n return result;\n };\n // Implementation\n /**\n * `Creates` a new group.\n * @private\n */\n PdfCacheCollection.prototype.createNewGroup = function () {\n var group = [];\n this.referenceObjects.push(group);\n return group;\n };\n /**\n * `Find and Return` a group.\n * @private\n */\n PdfCacheCollection.prototype.getGroup = function (result) {\n var group = null;\n if (result !== null) {\n var len = this.referenceObjects.length;\n for (var i = 0; i < len; i++) {\n if (this.referenceObjects.length > 0) {\n var tGroup = this.referenceObjects[i];\n if (tGroup.length > 0) {\n var representative = tGroup[0];\n if (result.equalsTo(representative)) {\n group = tGroup;\n break;\n }\n }\n else {\n this.removeGroup(tGroup);\n }\n }\n len = this.referenceObjects.length;\n }\n }\n return group;\n };\n /**\n * Remove a group from the storage.\n */\n PdfCacheCollection.prototype.removeGroup = function (group) {\n if (group !== null) {\n var index = this.referenceObjects.indexOf(group);\n this.referenceObjects.slice(index, index + 1);\n }\n };\n PdfCacheCollection.prototype.destroy = function () {\n this.pdfFontCollection = undefined;\n this.referenceObjects = undefined;\n };\n return PdfCacheCollection;\n}());\nexport { PdfCacheCollection };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfWriter } from './../input-output/pdf-writer';\nimport { PdfMainObjectCollection } from './../input-output/pdf-main-object-collection';\nimport { PdfDocumentBase } from './pdf-document-base';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfCatalog } from './pdf-catalog';\nimport { PdfPageSettings } from './../pages/pdf-page-settings';\nimport { PdfSectionCollection } from './../pages/pdf-section-collection';\nimport { PdfDocumentPageCollection } from './../pages/pdf-document-page-collection';\nimport { PdfCacheCollection } from './../general/pdf-cache-collection';\nimport { PdfColorSpace } from './../graphics/enum';\nimport { PdfDocumentTemplate } from './pdf-document-template';\nimport { PdfFontFamily } from './../graphics/fonts/enum';\nimport { PdfStandardFont } from './../graphics/fonts/pdf-standard-font';\n/**\n * Represents a PDF document and can be used to create a new PDF document from the scratch.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfDocument = /** @class */ (function (_super) {\n __extends(PdfDocument, _super);\n function PdfDocument(isMerging) {\n var _this = _super.call(this) || this;\n /**\n * Default `margin` value.\n * @default 40.0\n * @private\n */\n _this.defaultMargin = 40.0;\n /**\n * Internal variable to store instance of `StreamWriter` classes..\n * @default null\n * @private\n */\n _this.streamWriter = null;\n _this = _super.call(this, _this) || this;\n if (isMerging === true || isMerging === false || typeof isMerging !== 'undefined') {\n var objects = new PdfMainObjectCollection();\n _this.setMainObjectCollection(objects);\n var crossTable = new PdfCrossTable();\n crossTable.isMerging = isMerging;\n crossTable.document = _this;\n _this.setCrossTable(crossTable);\n var catalog = new PdfCatalog();\n _this.setCatalog(catalog);\n objects.add(catalog);\n catalog.position = -1;\n _this.sectionCollection = new PdfSectionCollection(_this);\n _this.documentPageCollection = new PdfDocumentPageCollection(_this);\n catalog.pages = _this.sectionCollection;\n }\n else {\n PdfDocument.cacheCollection = new PdfCacheCollection();\n _this.constructor(false);\n }\n return _this;\n }\n Object.defineProperty(PdfDocument, \"defaultFont\", {\n //Properties\n /**\n * Gets the `default font`. It is used for complex objects when font is not explicitly defined.\n * @private\n */\n get: function () {\n if (this.defaultStandardFont == null) {\n this.defaultStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 8);\n }\n return this.defaultStandardFont;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"sections\", {\n /**\n * Gets the collection of the `sections` in the document.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pageSettings\", {\n /**\n * Gets the document's page setting.\n * @public\n */\n get: function () {\n if (this.settings == null) {\n this.settings = new PdfPageSettings(this.defaultMargin);\n }\n return this.settings;\n },\n /**\n * Sets the document's page setting.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n *\n * // sets the right margin of the page\n * document.pageSettings.margins.right = 0;\n * // set the page size.\n * document.pageSettings.size = new SizeF(500, 500);\n * // change the page orientation to landscape\n * document.pageSettings.orientation = PdfPageOrientation.Landscape;\n * // apply 90 degree rotation on the page\n * document.pageSettings.rotate = PdfPageRotateAngle.RotateAngle90;\n *\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set the specified Point\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this.settings = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pages\", {\n /**\n * Represents the collection of pages in the PDF document.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // get the collection of pages in the document\n * let pageCollection : PdfDocumentPageCollection = document.pages;\n * //\n * // add pages\n * let page1 : PdfPage = pageCollection.add();\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.documentPageCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"cache\", {\n /**\n * Gets collection of the `cached objects`.\n * @private\n */\n get: function () {\n if (typeof PdfDocument.cacheCollection === 'undefined' || PdfDocument.cacheCollection == null) {\n return new PdfCacheCollection();\n }\n return PdfDocument.cacheCollection;\n },\n /**\n * Sets collection of the `cached objects`.\n * @private\n */\n set: function (value) {\n this.cacheCollection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"enableCache\", {\n /**\n * Gets the value of enable cache.\n * @private\n */\n get: function () {\n return this.isCacheEnabled;\n },\n /**\n * Sets thie value of enable cache.\n * @private\n */\n set: function (value) {\n this.isCacheEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"colorSpace\", {\n /* tslint:disable */\n /**\n * Gets or sets the `color space` of the document. This property can be used to create PDF document in RGB, Gray scale or CMYK color spaces.\n * @private\n */\n get: function () {\n if ((this.pdfColorSpace === PdfColorSpace.Rgb) || ((this.pdfColorSpace === PdfColorSpace.Cmyk)\n || (this.pdfColorSpace === PdfColorSpace.GrayScale))) {\n return this.pdfColorSpace;\n }\n else {\n return PdfColorSpace.Rgb;\n }\n },\n set: function (value) {\n if ((value === PdfColorSpace.Rgb) || ((value === PdfColorSpace.Cmyk) ||\n (value === PdfColorSpace.GrayScale))) {\n this.pdfColorSpace = value;\n }\n else {\n this.pdfColorSpace = PdfColorSpace.Rgb;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"template\", {\n /* tslint:enable */\n /**\n * Gets or sets a `template` to all pages in the document.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfDocumentTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocument.prototype.docSave = function (stream, arg2, arg3) {\n this.checkPagesPresence();\n if (stream === null) {\n throw new Error('ArgumentNullException : stream');\n }\n this.streamWriter = stream;\n var writer = new PdfWriter(stream);\n writer.document = this;\n if (typeof arg2 === 'boolean' && typeof arg3 === 'undefined') {\n return this.crossTable.save(writer);\n }\n else {\n this.crossTable.save(writer, arg2);\n }\n };\n /**\n * Checks the pages `presence`.\n * @private\n */\n PdfDocument.prototype.checkPagesPresence = function () {\n if (this.pages.count === 0) {\n this.pages.add();\n }\n };\n /**\n * disposes the current instance of `PdfDocument` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfDocument.prototype.destroy = function () {\n this.catalog = undefined;\n this.colorSpace = undefined;\n this.currentSavingObj = undefined;\n this.documentPageCollection = undefined;\n this.isStreamCopied = undefined;\n this.pageSettings = undefined;\n this.pageTemplate = undefined;\n this.pdfColorSpace = undefined;\n this.sectionCollection = undefined;\n PdfDocument.cache.destroy();\n this.crossTable.pdfObjects.destroy();\n PdfDocument.cache = undefined;\n this.streamWriter.destroy();\n };\n /**\n * `Font` used in complex objects to draw strings and text when it is not defined explicitly.\n * @default null\n * @private\n */\n PdfDocument.defaultStandardFont = null;\n /**\n * Indicates whether enable cache or not\n * @default true\n * @private\n */\n PdfDocument.isCacheEnabled = true;\n return PdfDocument;\n}(PdfDocumentBase));\nexport { PdfDocument };\n","/**\n * PdfStandardFontMetricsFactory.ts class for EJ2-PDF\n */\nimport { PdfFontStyle, PdfFontFamily } from './enum';\nimport { PdfFontMetrics, StandardWidthTable } from './pdf-font-metrics';\n/**\n * @private\n * `Factory of the standard fonts metrics`.\n */\nvar PdfStandardFontMetricsFactory = /** @class */ (function () {\n function PdfStandardFontMetricsFactory() {\n }\n /**\n * Returns `metrics` of the font.\n * @private\n */\n PdfStandardFontMetricsFactory.getMetrics = function (fontFamily, fontStyle, size) {\n var metrics = null;\n switch (fontFamily) {\n case PdfFontFamily.Helvetica:\n metrics = this.getHelveticaMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Courier:\n metrics = this.getCourierMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.TimesRoman:\n metrics = this.getTimesMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Symbol:\n metrics = this.getSymbolMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.ZapfDingbats:\n metrics = this.getZapfDingbatsMetrics(fontFamily, fontStyle, size);\n break;\n default:\n metrics = this.getHelveticaMetrics(PdfFontFamily.Helvetica, fontStyle, size);\n break;\n }\n metrics.name = fontFamily.toString();\n metrics.subScriptSizeFactor = this.subSuperScriptFactor;\n metrics.superscriptSizeFactor = this.subSuperScriptFactor;\n return metrics;\n };\n // Implementation\n /**\n * Creates `Helvetica font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getHelveticaMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaBoldItalicAscent;\n metrics.descent = this.helveticaBoldItalicDescent;\n metrics.postScriptName = this.helveticaBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.helveticaBoldAscent;\n metrics.descent = this.helveticaBoldDescent;\n metrics.postScriptName = this.helveticaBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaItalicAscent;\n metrics.descent = this.helveticaItalicDescent;\n metrics.postScriptName = this.helveticaItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.helveticaAscent;\n metrics.descent = this.helveticaDescent;\n metrics.postScriptName = this.helveticaName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Courier font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getCourierMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierBoldItalicAscent;\n metrics.descent = this.courierBoldItalicDescent;\n metrics.postScriptName = this.courierBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.courierBoldAscent;\n metrics.descent = this.courierBoldDescent;\n metrics.postScriptName = this.courierBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierItalicAscent;\n metrics.descent = this.courierItalicDescent;\n metrics.postScriptName = this.courierItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.courierAscent;\n metrics.descent = this.courierDescent;\n metrics.postScriptName = this.courierName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Times font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getTimesMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesBoldItalicAscent;\n metrics.descent = this.timesBoldItalicDescent;\n metrics.postScriptName = this.timesBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldItalicWidths);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.timesBoldAscent;\n metrics.descent = this.timesBoldDescent;\n metrics.postScriptName = this.timesBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesItalicAscent;\n metrics.descent = this.timesItalicDescent;\n metrics.postScriptName = this.timesItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanItalicWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.timesAscent;\n metrics.descent = this.timesDescent;\n metrics.postScriptName = this.timesName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Symbol font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getSymbolMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.symbolAscent;\n metrics.descent = this.symbolDescent;\n metrics.postScriptName = this.symbolName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.symbolWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * Creates `ZapfDingbats font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getZapfDingbatsMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.zapfDingbatsAscent;\n metrics.descent = this.zapfDingbatsDescent;\n metrics.postScriptName = this.zapfDingbatsName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.zapfDingbatsWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * `Multiplier` os subscript superscript.\n * @private\n */\n PdfStandardFontMetricsFactory.subSuperScriptFactor = 1.52;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaName = 'Helvetica';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldName = 'Helvetica-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicName = 'Helvetica-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicName = 'Helvetica-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierName = 'Courier';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldName = 'Courier-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicName = 'Courier-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicName = 'Courier-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesAscent = 898;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesName = 'Times-Roman';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldAscent = 935;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldName = 'Times-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicAscent = 883;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicDescent = -217;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicName = 'Times-Italic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicAscent = 921;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicName = 'Times-BoldItalic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolAscent = 1010;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolDescent = -293;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolName = 'Symbol';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsAscent = 820;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsDescent = -143;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsName = 'ZapfDingbats';\n /**\n * `Arial` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialWidth = [\n 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584,\n 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278,\n 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833,\n 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334,\n 584, 0, 556, 0, 222, 556, 333, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 222, 222, 333, 333, 350, 556, 1000, 333, 1000, 500, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 556, 537, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 584, 611, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Arial bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialBoldWidth = [\n 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584,\n 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333,\n 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889,\n 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389,\n 584, 0, 556, 0, 278, 556, 500, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 278, 278, 500, 500, 350, 556, 1000, 333, 1000, 556, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 611, 556, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278,\n 278, 278, 611, 611, 611, 611, 611, 611, 611, 584, 611, 611, 611, 611, 611, 556,\n 611, 556\n ];\n /**\n * `Fixed` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.fixedWidth = [\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600\n ];\n /**\n * `Times` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanWidth = [\n 250, 333, 408, 500, 500, 833, 778, 180, 333, 333, 500, 564, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278, 564, 564,\n 564, 444, 921, 722, 667, 667, 722, 611, 556, 722, 722, 333, 389, 722, 611, 889,\n 722, 722, 556, 722, 667, 556, 611, 722, 722, 944, 722, 722, 611, 333, 278, 333,\n 469, 500, 333, 444, 500, 444, 500, 444, 333, 500, 500, 278, 278, 500, 278, 778,\n 500, 500, 500, 500, 333, 389, 278, 500, 500, 722, 500, 500, 444, 480, 200, 480,\n 541, 0, 500, 0, 333, 500, 444, 1000, 500, 500, 333, 1000, 556, 333, 889, 0,\n 611, 0, 0, 333, 333, 444, 444, 350, 500, 1000, 333, 980, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 200, 500, 333, 760, 276, 500, 564, 0,\n 760, 333, 400, 564, 300, 300, 333, 500, 453, 250, 333, 300, 310, 500, 750, 750,\n 750, 444, 722, 722, 722, 722, 722, 722, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 722, 722, 722, 722, 722, 722, 564, 722, 722, 722, 722, 722, 722,\n 556, 500, 444, 444, 444, 444, 444, 444, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 564, 500, 500, 500, 500, 500, 500,\n 500, 500\n ];\n /**\n * `Times bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldWidth = [\n 250, 333, 555, 500, 500, 1000, 833, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 930, 722, 667, 722, 722, 667, 611, 778, 778, 389, 500, 778, 667, 944,\n 722, 778, 611, 778, 722, 556, 667, 722, 722, 1000, 722, 722, 667, 333, 278, 333,\n 581, 500, 333, 500, 556, 444, 556, 444, 333, 500, 556, 278, 333, 556, 278, 833,\n 556, 500, 556, 556, 444, 389, 333, 556, 500, 722, 500, 500, 444, 394, 220, 394,\n 520, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 1000, 0,\n 667, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 220, 500, 333, 747, 300, 500, 570, 0,\n 747, 333, 400, 570, 300, 300, 333, 556, 540, 250, 333, 300, 330, 500, 750, 750,\n 750, 500, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 778, 778, 778, 778, 778, 570, 778, 722, 722, 722, 722, 722,\n 611, 556, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Times italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanItalicWidth = [\n 250, 333, 420, 500, 500, 833, 778, 214, 333, 333, 500, 675, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 675, 675,\n 675, 500, 920, 611, 611, 667, 722, 611, 611, 722, 722, 333, 444, 667, 556, 833,\n 667, 722, 611, 722, 611, 500, 556, 722, 611, 833, 611, 556, 556, 389, 278, 389,\n 422, 500, 333, 500, 500, 444, 500, 444, 278, 500, 500, 278, 278, 444, 278, 722,\n 500, 500, 500, 500, 389, 389, 278, 500, 444, 667, 444, 444, 389, 400, 275, 400,\n 541, 0, 500, 0, 333, 500, 556, 889, 500, 500, 333, 1000, 500, 333, 944, 0,\n 556, 0, 0, 333, 333, 556, 556, 350, 500, 889, 333, 980, 389, 333, 667, 0,\n 389, 556, 0, 389, 500, 500, 500, 500, 275, 500, 333, 760, 276, 500, 675, 0,\n 760, 333, 400, 675, 300, 300, 333, 500, 523, 250, 333, 300, 310, 500, 750, 750,\n 750, 500, 611, 611, 611, 611, 611, 611, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 667, 722, 722, 722, 722, 722, 675, 722, 722, 722, 722, 722, 556,\n 611, 500, 500, 500, 500, 500, 500, 500, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 675, 500, 500, 500, 500, 500, 444,\n 500, 444\n ];\n /**\n * `Times bold italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldItalicWidths = [\n 250, 389, 555, 500, 500, 833, 778, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 832, 667, 667, 667, 722, 667, 667, 722, 778, 389, 500, 667, 611, 889,\n 722, 722, 611, 722, 667, 556, 611, 722, 667, 889, 667, 611, 611, 333, 278, 333,\n 570, 500, 333, 500, 500, 444, 500, 444, 333, 500, 556, 278, 278, 500, 278, 778,\n 556, 500, 500, 500, 389, 389, 278, 556, 444, 667, 500, 444, 389, 348, 220, 348,\n 570, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 944, 0,\n 611, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 389, 611, 0, 389, 500, 500, 500, 500, 220, 500, 333, 747, 266, 500, 606, 0,\n 747, 333, 400, 570, 300, 300, 333, 576, 500, 250, 333, 300, 300, 500, 750, 750,\n 750, 500, 667, 667, 667, 667, 667, 667, 944, 667, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 722, 722, 722, 722, 722, 570, 722, 722, 722, 722, 722, 611,\n 611, 500, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 444,\n 500, 444\n ];\n /**\n * `Symbol` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolWidth = [\n 250, 333, 713, 500, 549, 833, 778, 439, 333, 333, 500, 549, 250, 549,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278,\n 549, 549, 549, 444, 549, 722, 667, 722, 612, 611, 763, 603, 722, 333,\n 631, 722, 686, 889, 722, 722, 768, 741, 556, 592, 611, 690, 439, 768,\n 645, 795, 611, 333, 863, 333, 658, 500, 500, 631, 549, 549, 494, 439,\n 521, 411, 603, 329, 603, 549, 549, 576, 521, 549, 549, 521, 549, 603,\n 439, 576, 713, 686, 493, 686, 494, 480, 200, 480, 549, 750, 620, 247,\n 549, 167, 713, 500, 753, 753, 753, 753, 1042, 987, 603, 987, 603, 400,\n 549, 411, 549, 549, 713, 494, 460, 549, 549, 549, 549, 1000, 603, 1000,\n 658, 823, 686, 795, 987, 768, 768, 823, 768, 768, 713, 713, 713, 713,\n 713, 713, 713, 768, 713, 790, 790, 890, 823, 549, 250, 713, 603, 603,\n 1042, 987, 603, 987, 603, 494, 329, 790, 790, 786, 713, 384, 384, 384,\n 384, 384, 384, 494, 494, 494, 494, 329, 274, 686, 686, 686, 384, 384,\n 384, 384, 384, 384, 494, 494, 494, -1\n ];\n /**\n * `Zip dingbats` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsWidth = [\n 278, 974, 961, 974, 980, 719, 789, 790, 791, 690, 960, 939, 549, 855,\n 911, 933, 911, 945, 974, 755, 846, 762, 761, 571, 677, 763, 760, 759,\n 754, 494, 552, 537, 577, 692, 786, 788, 788, 790, 793, 794, 816, 823,\n 789, 841, 823, 833, 816, 831, 923, 744, 723, 749, 790, 792, 695, 776,\n 768, 792, 759, 707, 708, 682, 701, 826, 815, 789, 789, 707, 687, 696,\n 689, 786, 787, 713, 791, 785, 791, 873, 761, 762, 762, 759, 759, 892,\n 892, 788, 784, 438, 138, 277, 415, 392, 392, 668, 668, 390, 390, 317,\n 317, 276, 276, 509, 509, 410, 410, 234, 234, 334, 334, 732, 544, 544,\n 910, 667, 760, 760, 776, 595, 694, 626, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 894, 838, 1016, 458, 748, 924, 748, 918,\n 927, 928, 928, 834, 873, 828, 924, 924, 917, 930, 931, 463, 883, 836,\n 836, 867, 867, 696, 696, 874, 874, 760, 946, 771, 865, 771, 888, 967,\n 888, 831, 873, 927, 970, 918\n ];\n return PdfStandardFontMetricsFactory;\n}());\nexport { PdfStandardFontMetricsFactory };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfFontFamily, PdfFontStyle, FontEncoding } from './enum';\nimport { PdfFont } from './pdf-font';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStandardFontMetricsFactory } from './pdf-standard-font-metrics-factory';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\n/**\n * Represents one of the 14 standard fonts.\n * It's used to create a standard PDF font to draw the text in to the PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStandardFont = /** @class */ (function (_super) {\n __extends(PdfStandardFont, _super);\n function PdfStandardFont(fontFamilyPrototype, size, style) {\n var _this = _super.call(this, size, style) || this;\n /**\n * Gets `ascent` of the font.\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n /**\n * Gets `encodings` for internal class use.\n * @hidden\n * @private\n */\n _this.encodings = ['Unknown', 'StandardEncoding', 'MacRomanEncoding', 'MacExpertEncoding',\n 'WinAnsiEncoding', 'PDFDocEncoding', 'IdentityH'];\n if ((typeof fontFamilyPrototype === 'number') && (typeof style === 'undefined')) {\n _this.constructor(fontFamilyPrototype, size, PdfFontStyle.Regular);\n }\n else if ((typeof fontFamilyPrototype === 'number') && (typeof style !== 'undefined')) {\n _this = _super.call(this, size, style) || this;\n _this.pdfFontFamily = fontFamilyPrototype;\n _this.checkStyle();\n _this.initializeInternals();\n }\n else if ((fontFamilyPrototype instanceof PdfStandardFont) && (typeof style === 'undefined')) {\n _this.constructor(fontFamilyPrototype.fontFamily, size, fontFamilyPrototype.style);\n }\n else if ((fontFamilyPrototype instanceof PdfStandardFont) && (typeof style !== 'undefined')) {\n _this.constructor(fontFamilyPrototype.fontFamily, size, style);\n }\n return _this;\n }\n Object.defineProperty(PdfStandardFont.prototype, \"fontFamily\", {\n //Properties\n /**\n * Gets the `FontFamily`.\n * @private\n */\n get: function () {\n return this.pdfFontFamily;\n },\n enumerable: true,\n configurable: true\n });\n //methods\n /**\n * Checks font `style` of the font.\n * @private\n */\n PdfStandardFont.prototype.checkStyle = function () {\n if (this.fontFamily === PdfFontFamily.Symbol || this.fontFamily === PdfFontFamily.ZapfDingbats) {\n var style = this.style;\n style &= ~(PdfFontStyle.Bold | PdfFontStyle.Italic);\n this.setStyle(style);\n }\n };\n /**\n * Returns `width` of the line.\n * @public\n */\n PdfStandardFont.prototype.getLineWidth = function (line, format) {\n if (line == null) {\n throw new Error('ArgumentNullException:line');\n }\n var width = 0;\n var name = this.name;\n line = PdfStandardFont.convert(line);\n for (var i = 0, len = line.length; i < len; i++) {\n var ch = line[i];\n var charWidth = this.getCharWidthInternal(ch, format);\n width += charWidth;\n }\n var size = this.metrics.getSize(format);\n width *= (PdfFont.charSizeMultiplier * size);\n width = this.applyFormatSettings(line, format, width);\n return width;\n };\n /**\n * Checks whether fonts are `equals`.\n * @private\n */\n PdfStandardFont.prototype.equalsToFont = function (font) {\n var equal = false;\n var stFont = font;\n if (stFont != null) {\n var fontFamilyEqual = (this.fontFamily === stFont.fontFamily);\n var lineReducer = (~(PdfFontStyle.Underline | PdfFontStyle.Strikeout));\n var styleEqual = (this.style & lineReducer) === (stFont.style & lineReducer);\n equal = (fontFamilyEqual && styleEqual);\n }\n return equal;\n };\n /**\n * `Initializes` font internals..\n * @private\n */\n PdfStandardFont.prototype.initializeInternals = function () {\n var equalFont = null;\n // if (PdfDocument.EnableCache) {\n equalFont = PdfDocument.cache.search(this);\n // }\n var internals = null;\n // if (equalFont == null) {\n // Create font metrics.\n var metrics = PdfStandardFontMetricsFactory.getMetrics(this.pdfFontFamily, this.style, this.size);\n this.metrics = metrics;\n internals = this.createInternals();\n this.setInternals(internals);\n };\n /**\n * `Creates` font`s dictionary.\n * @private\n */\n PdfStandardFont.prototype.createInternals = function () {\n var dictionary = new PdfDictionary();\n dictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.type1));\n dictionary.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.metrics.postScriptName));\n if (this.fontFamily !== PdfFontFamily.Symbol && this.fontFamily !== PdfFontFamily.ZapfDingbats) {\n var encoding = this.encodings[FontEncoding.WinAnsiEncoding];\n dictionary.items.setValue(this.dictionaryProperties.encoding, new PdfName(encoding));\n }\n return dictionary;\n };\n /**\n * Returns `width` of the char. This methods doesn`t takes into consideration font`s size.\n * @private\n */\n PdfStandardFont.prototype.getCharWidthInternal = function (charCode, format) {\n var width = 0;\n var code = 0;\n code = charCode.charCodeAt(0);\n if (this.name === '0' || this.name === '1' || this.name === '2' ||\n this.name === '3' || this.name === '4') {\n code = code - PdfStandardFont.charOffset;\n }\n code = (code >= 0 && code !== 128) ? code : 0;\n var metrics = this.metrics;\n var widthTable = metrics.widthTable;\n width = widthTable.items(code);\n return width;\n };\n /**\n * `Converts` the specified text.\n * @private\n */\n PdfStandardFont.convert = function (text) {\n return text;\n };\n //Constants\n /**\n * First character `position`.\n * @private\n */\n PdfStandardFont.charOffset = 32;\n return PdfStandardFont;\n}(PdfFont));\nexport { PdfStandardFont };\n","import { PdfColor } from './../graphics/pdf-color';\nimport { RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfDictionary, SaveAnnotationEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfString } from './../primitives/pdf-string';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfSolidBrush } from './../graphics/brushes/pdf-solid-brush';\nimport { PdfStandardFont } from './../graphics/fonts/pdf-standard-font';\nimport { PdfFontFamily } from './../graphics/fonts/enum';\nimport { PdfStringFormat } from './../graphics/fonts/pdf-string-format';\nimport { PdfTextAlignment } from './../graphics/enum';\n/**\n * `PdfAnnotation` class represents the base class for annotation objects.\n * @private\n */\nvar PdfAnnotation = /** @class */ (function () {\n function PdfAnnotation(arg1) {\n // Fields\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * `Color` of the annotation\n * @private\n */\n this.pdfColor = new PdfColor(255, 255, 255);\n /**\n * `Bounds` of the annotation.\n * @private\n */\n this.rectangle = new RectangleF(0, 0, 0, 0);\n /**\n * Parent `page` of the annotation.\n * @private\n */\n this.pdfPage = null;\n /**\n * `Brush of the text` of the annotation.\n * @default new PdfSolidBrush(new PdfColor(0, 0, 0))\n * @private\n */\n this.textBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n /**\n * `Font of the text` of the annotation.\n * @default new PdfStandardFont(PdfFontFamily.TimesRoman, 10)\n * @private\n */\n this.textFont = new PdfStandardFont(PdfFontFamily.TimesRoman, 10);\n /**\n * `StringFormat of the text` of the annotation.\n * @default new PdfStringFormat(PdfTextAlignment.Left)\n * @private\n */\n this.format = new PdfStringFormat(PdfTextAlignment.Left);\n /**\n * `Text` of the annotation.\n * @private\n */\n this.content = '';\n /**\n * Internal variable to store `dictionary`.\n * @private\n */\n this.pdfDictionary = new PdfDictionary();\n /**\n * To specifying the `Inner color` with which to fill the annotation\n * @private\n */\n this.internalColor = new PdfColor();\n /**\n * `opacity or darkness` of the annotation.\n * @private\n * @default 1.0\n */\n this.darkness = 1.0;\n if (typeof arg1 === 'undefined') {\n this.initialize();\n }\n else {\n this.initialize();\n this.bounds = arg1;\n }\n }\n Object.defineProperty(PdfAnnotation.prototype, \"color\", {\n // Properties\n /**\n * `Color` of the annotation\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"innerColor\", {\n /**\n * To specifying the `Inner color` with which to fill the annotation\n * @private\n */\n get: function () {\n return this.internalColor;\n },\n set: function (value) {\n this.internalColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"bounds\", {\n /**\n * `bounds` of the annotation.\n * @private\n */\n get: function () {\n return this.rectangle;\n },\n set: function (value) {\n this.rectangle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"page\", {\n /**\n * Parent `page` of the annotation.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"font\", {\n /**\n * To specifying the `Font of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.textFont;\n },\n set: function (value) {\n this.textFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"stringFormat\", {\n /**\n * To specifying the `StringFormat of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"brush\", {\n /**\n * To specifying the `Brush of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.textBrush;\n },\n set: function (value) {\n this.textBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"text\", {\n /**\n * `Text` of the annotation.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n this.dictionary.items.setValue(this.dictionaryProperties.contents, new PdfString(this.content));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"dictionary\", {\n /**\n * Internal variable to store `dictionary`.\n * @hidden\n */\n get: function () {\n return this.pdfDictionary;\n },\n set: function (value) {\n this.pdfDictionary = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the annotation event handler and specifies the type of the annotation.\n * @private\n */\n PdfAnnotation.prototype.initialize = function () {\n this.pdfDictionary.annotationBeginSave = new SaveAnnotationEventHandler(this);\n this.pdfDictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.annot));\n };\n /**\n * Sets related `page` of the annotation.\n * @private\n */\n PdfAnnotation.prototype.setPage = function (page) {\n this.pdfPage = page;\n this.pdfDictionary.items.setValue(this.dictionaryProperties.p, new PdfReferenceHolder(this.pdfPage));\n };\n /**\n * Handles the `BeginSave` event of the Dictionary.\n * @private\n */\n PdfAnnotation.prototype.beginSave = function () {\n this.save();\n };\n /**\n * `Saves` an annotation.\n * @private\n */\n /* tslint:disable */\n PdfAnnotation.prototype.save = function () {\n var nativeRectangle = new RectangleF(this.rectangle.x, this.rectangle.y, this.rectangle.width, this.rectangle.height);\n var section = this.pdfPage.section;\n var initialHeight = nativeRectangle.height;\n var tempLoacation = section.pointToNativePdf(this.page, new PointF(nativeRectangle.x, nativeRectangle.y));\n nativeRectangle.x = tempLoacation.x;\n nativeRectangle.width = tempLoacation.x + nativeRectangle.width;\n nativeRectangle.y = (tempLoacation.y - this.page.document.pageSettings.margins.top);\n nativeRectangle.height = nativeRectangle.y - initialHeight;\n this.pdfDictionary.items.setValue(this.dictionaryProperties.rect, PdfArray.fromRectangle(nativeRectangle));\n this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(this.darkness));\n };\n Object.defineProperty(PdfAnnotation.prototype, \"element\", {\n /* tslint:enable */\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.pdfDictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAnnotation;\n}());\nexport { PdfAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfAnnotation } from './annotation';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * `PdfLinkAnnotation` class represents the ink annotation class.\n * @private\n */\nvar PdfLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfLinkAnnotation, _super);\n function PdfLinkAnnotation(rectangle) {\n var _this = this;\n if (typeof rectangle === 'undefined') {\n _this = _super.call(this) || this;\n }\n else {\n _this = _super.call(this, rectangle) || this;\n }\n return _this;\n }\n // Implementation\n /**\n * `Initializes` annotation object.\n * @private\n */\n PdfLinkAnnotation.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.link));\n };\n return PdfLinkAnnotation;\n}(PdfAnnotation));\nexport { PdfLinkAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfLinkAnnotation } from './link-annotation';\n/**\n * Represents base class for `link annotations` with associated action.\n * @private\n */\nvar PdfActionLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfActionLinkAnnotation, _super);\n // Constructors\n /**\n * Specifies the constructor for `ActionLinkAnnotation`.\n * @private\n */\n function PdfActionLinkAnnotation(rectangle) {\n var _this = _super.call(this, rectangle) || this;\n // Fields\n /**\n * Internal variable to store annotation's `action`.\n * @default null\n * @private\n */\n _this.pdfAction = null;\n return _this;\n }\n //Public method\n /**\n * get and set the `action`.\n * @hidden\n */\n PdfActionLinkAnnotation.prototype.getSetAction = function (value) {\n if (typeof value === 'undefined') {\n return this.pdfAction;\n }\n else {\n this.pdfAction = value;\n }\n };\n return PdfActionLinkAnnotation;\n}(PdfLinkAnnotation));\nexport { PdfActionLinkAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfLinkAnnotation } from './link-annotation';\n/**\n * `PdfDocumentLinkAnnotation` class represents an annotation object with holds link on another location within a document.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create new pages\n * let page1 : PdfPage = document.pages.add();\n * let page2 : PdfPage = document.pages.add();\n * // create a new rectangle\n * let bounds : RectangleF = new RectangleF({x : 10, y : 200}, {width : 300, height : 25});\n * //\n * // create a new document link annotation\n * let documentLinkAnnotation : PdfDocumentLinkAnnotation = new PdfDocumentLinkAnnotation(bounds);\n * // set the annotation text\n * documentLinkAnnotation.text = 'Document link annotation';\n * // set the destination\n * documentLinkAnnotation.destination = new PdfDestination(page2);\n * // set the documentlink annotation location\n * documentLinkAnnotation.destination.location = new PointF(10, 0);\n * // add this annotation to a new page\n * page1.annotations.add(documentLinkAnnotation);\n * //\n * // save the document to disk\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfDocumentLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfDocumentLinkAnnotation, _super);\n function PdfDocumentLinkAnnotation(rectangle, destination) {\n var _this = _super.call(this, rectangle) || this;\n // Fields\n /**\n * `Destination` of the annotation.\n * @default null\n * @private\n */\n _this.pdfDestination = null;\n if (typeof destination !== 'undefined') {\n _this.destination = destination;\n }\n return _this;\n }\n Object.defineProperty(PdfDocumentLinkAnnotation.prototype, \"destination\", {\n // Properties\n /**\n * Gets or sets the `destination` of the annotation.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create new pages\n * let page1 : PdfPage = document.pages.add();\n * let page2 : PdfPage = document.pages.add();\n * // create a new rectangle\n * let bounds : RectangleF = new RectangleF({x : 10, y : 200}, {width : 300, height : 25});\n * //\n * // create a new document link annotation\n * let documentLinkAnnotation : PdfDocumentLinkAnnotation = new PdfDocumentLinkAnnotation(bounds);\n * // set the annotation text\n * documentLinkAnnotation.text = 'Document link annotation';\n * // set the destination\n * documentLinkAnnotation.destination = new PdfDestination(page2);\n * // set the documentlink annotation location\n * documentLinkAnnotation.destination.location = new PointF(10, 0);\n * // add this annotation to a new page\n * page1.annotations.add(documentLinkAnnotation);\n * //\n * // save the document to disk\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @default null\n */\n get: function () {\n return this.pdfDestination;\n },\n set: function (value) {\n // if (this.pdfDestination !== value) {\n this.pdfDestination = value;\n // }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Saves` annotation object.\n * @private\n */\n PdfDocumentLinkAnnotation.prototype.save = function () {\n _super.prototype.save.call(this);\n if (this.pdfDestination != null) {\n this.dictionary.items.setValue(this.dictionaryProperties.dest, this.pdfDestination.element);\n }\n };\n /**\n * `Clone` the document link annotation.\n * @private\n */\n PdfDocumentLinkAnnotation.prototype.clone = function () {\n var annot = new PdfDocumentLinkAnnotation(this.bounds, this.destination);\n annot.color = this.color;\n annot.brush = this.brush;\n annot.destination = this.destination;\n annot.font = this.font;\n return annot;\n };\n return PdfDocumentLinkAnnotation;\n}(PdfLinkAnnotation));\nexport { PdfDocumentLinkAnnotation };\n","/**\n * ElementLayouter.ts class for EJ2-PDF\n */\nimport { RectangleF } from './../../../drawing/pdf-drawing';\n/**\n * Base class for `elements lay outing`.\n * @private\n */\nvar ElementLayouter = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `ElementLayouter` class.\n * @private\n */\n function ElementLayouter(element) {\n this.layoutElement = element;\n }\n Object.defineProperty(ElementLayouter.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.layoutElement;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `element`.\n * @private\n */\n ElementLayouter.prototype.getElement = function () {\n return this.layoutElement;\n };\n // Implementation\n /**\n * `Layouts` the element.\n * @private\n */\n ElementLayouter.prototype.layout = function (param) {\n return this.layoutInternal(param);\n };\n ElementLayouter.prototype.Layouter = function (param) {\n return this.layoutInternal(param);\n };\n /**\n * Returns the `next page`.\n * @private\n */\n ElementLayouter.prototype.getNextPage = function (currentPage) {\n var section = currentPage.section;\n var nextPage = section.add();\n return nextPage;\n };\n return ElementLayouter;\n}());\nexport { ElementLayouter };\nvar PdfLayoutFormat = /** @class */ (function () {\n function PdfLayoutFormat(baseFormat) {\n if (typeof baseFormat === 'undefined') {\n //\n }\n else {\n this.break = baseFormat.break;\n this.layout = baseFormat.layout;\n this.paginateBounds = baseFormat.paginateBounds;\n this.boundsSet = baseFormat.usePaginateBounds;\n }\n }\n Object.defineProperty(PdfLayoutFormat.prototype, \"layout\", {\n // Properties\n /**\n * Gets or sets `layout` type of the element.\n * @private\n */\n get: function () {\n // if (typeof this.layoutType === 'undefined' || this.layoutType == null) {\n // this.layoutType = PdfLayoutType.Paginate;\n // }\n return this.layoutType;\n },\n set: function (value) {\n this.layoutType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"break\", {\n /**\n * Gets or sets `break` type of the element.\n * @private\n */\n get: function () {\n // if (typeof this.breakType === 'undefined' || this.boundsSet == null) {\n // this.breakType = PdfLayoutBreakType.FitPage;\n // }\n return this.breakType;\n },\n set: function (value) {\n this.breakType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"paginateBounds\", {\n /**\n * Gets or sets the `bounds` on the next page.\n * @private\n */\n get: function () {\n if (typeof this.layoutPaginateBounds === 'undefined' && this.layoutPaginateBounds == null) {\n this.layoutPaginateBounds = new RectangleF(0, 0, 0, 0);\n }\n return this.layoutPaginateBounds;\n },\n set: function (value) {\n this.layoutPaginateBounds = value;\n this.boundsSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"usePaginateBounds\", {\n /**\n * Gets a value indicating whether [`use paginate bounds`].\n * @private\n */\n get: function () {\n // if (typeof this.boundsSet === 'undefined' || this.boundsSet == null) {\n // this.boundsSet = false;\n // }\n return this.boundsSet;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutFormat;\n}());\nexport { PdfLayoutFormat };\nvar PdfLayoutParams = /** @class */ (function () {\n function PdfLayoutParams() {\n }\n Object.defineProperty(PdfLayoutParams.prototype, \"page\", {\n // Properties\n /**\n * Gets or sets the layout `page` for the element.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"bounds\", {\n /**\n * Gets or sets layout `bounds` for the element.\n * @private\n */\n get: function () {\n return new RectangleF(this.layoutBounds.x, this.layoutBounds.y, this.layoutBounds.width, this.layoutBounds.height);\n },\n set: function (value) {\n this.layoutBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"format\", {\n /**\n * Gets or sets `layout settings` for the element.\n * @private\n */\n get: function () {\n return this.layoutFormat;\n },\n set: function (value) {\n this.layoutFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutParams;\n}());\nexport { PdfLayoutParams };\nvar PdfLayoutResult = /** @class */ (function () {\n // Constructors\n /**\n * Initializes the new instance of `PdfLayoutResult` class.\n * @private\n */\n function PdfLayoutResult(page, bounds) {\n this.pdfPage = page;\n this.layoutBounds = bounds;\n }\n Object.defineProperty(PdfLayoutResult.prototype, \"page\", {\n // Properties\n /**\n * Gets the last `page` where the element was drawn.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutResult.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of the element on the last page where it was drawn.\n * @private\n */\n get: function () {\n return this.layoutBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutResult;\n}());\nexport { PdfLayoutResult };\n","import { RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutParams, PdfLayoutFormat } from './base/element-layouter';\n/**\n * `PdfLayoutElement` class represents the base class for all elements that can be layout on the pages.\n * @private\n */\nvar PdfLayoutElement = /** @class */ (function () {\n function PdfLayoutElement() {\n }\n Object.defineProperty(PdfLayoutElement.prototype, \"raiseBeginPageLayout\", {\n // Property\n /**\n * Gets a value indicating whether the `start page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutElement.prototype, \"raiseEndPageLayout\", {\n /**\n * Gets a value indicating whether the `ending page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n //Event Handlers\n PdfLayoutElement.prototype.onBeginPageLayout = function (args) {\n if (this.beginPageLayout) {\n this.beginPageLayout(this, args);\n }\n };\n PdfLayoutElement.prototype.onEndPageLayout = function (args) {\n if (this.endPageLayout) {\n this.endPageLayout(this, args);\n }\n };\n PdfLayoutElement.prototype.drawHelper = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg2, arg3.x, arg3.y);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n return this.drawHelper(arg2, arg3, arg4, null);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg2, arg3, null);\n }\n else if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && arg4 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg2, arg3.x, arg3.y, arg4);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && (arg5 instanceof PdfLayoutFormat || arg5 == null)) {\n var width = (arg2.graphics.clientSize.width - arg3);\n var layoutRectangle = new RectangleF(arg3, arg4, width, 0);\n return this.drawHelper(arg2, layoutRectangle, arg5);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'boolean') {\n this.bEmbedFonts = arg4;\n return this.drawHelper(arg2, arg3, null);\n }\n else {\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n var result = this.layout(param);\n return result;\n }\n };\n return PdfLayoutElement;\n}());\nexport { PdfLayoutElement };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * TextLayouter.ts class for EJ2-PDF\n */\nimport { ElementLayouter, PdfLayoutResult } from './element-layouter';\nimport { RectangleF, SizeF } from './../../../drawing/pdf-drawing';\nimport { PdfStringLayouter } from './../../fonts/string-layouter';\nimport { PdfLayoutBreakType } from './../../figures/enum';\nimport { PdfColor } from './../../pdf-color';\nimport { PdfTextWebLink } from './../../../annotations/pdf-text-web-link';\n/**\n * Class that `layouts the text`.\n * @private\n */\nvar TextLayouter = /** @class */ (function (_super) {\n __extends(TextLayouter, _super);\n // Constructors\n /**\n * Initializes a new instance of the `TextLayouter` class.\n * @private\n */\n function TextLayouter(element) {\n return _super.call(this, element) || this;\n }\n Object.defineProperty(TextLayouter.prototype, \"element\", {\n /**\n * Gets the layout `element`.\n * @private\n */\n get: function () {\n return _super.prototype.getElement.call(this);\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Layouts` the element.\n * @private\n */\n TextLayouter.prototype.layoutInternal = function (param) {\n /* tslint:disable */\n this.format = (this.element.stringFormat !== null && typeof this.element.stringFormat !== 'undefined') ? this.element.stringFormat : null;\n var currentPage = param.page;\n var currentBounds = param.bounds;\n var text = this.element.value;\n var result = null;\n var pageResult = new TextPageLayoutResult();\n pageResult.page = currentPage;\n pageResult.remainder = text;\n for (;;) {\n pageResult = this.layoutOnPage(text, currentPage, currentBounds, param);\n result = this.getLayoutResult(pageResult);\n break;\n }\n /* tslint:enable */\n return result;\n };\n /**\n * Raises `PageLayout` event if needed.\n * @private\n */\n TextLayouter.prototype.getLayoutResult = function (pageResult) {\n var result = new PdfTextLayoutResult(pageResult.page, pageResult.bounds, pageResult.remainder, pageResult.lastLineBounds);\n return result;\n };\n /* tslint:disable */\n /**\n * `Layouts` the text on the page.\n * @private\n */\n TextLayouter.prototype.layoutOnPage = function (text, currentPage, currentBounds, param) {\n var result = new TextPageLayoutResult();\n result.remainder = text;\n result.page = currentPage;\n currentBounds = this.checkCorrectBounds(currentPage, currentBounds);\n var layouter = new PdfStringLayouter();\n var stringResult = layouter.layout(text, this.element.font, this.format, currentBounds, currentPage.getClientSize().height, false, new SizeF(0, 0));\n var textFinished = (stringResult.remainder == null);\n var doesntFit = (param.format.break === PdfLayoutBreakType.FitElement);\n var canDraw = !(doesntFit || stringResult.empty);\n // Draw the text.\n var graphics = currentPage.graphics;\n var brush = this.element.getBrush();\n if (this.element instanceof PdfTextWebLink) {\n brush.color = new PdfColor(0, 0, 255);\n }\n graphics.drawStringLayoutResult(stringResult, this.element.font, this.element.pen, brush, currentBounds, this.format);\n var lineInfo = stringResult.lines[stringResult.lineCount - 1];\n result.lastLineBounds = graphics.getLineBounds(stringResult.lineCount - 1, stringResult, this.element.font, currentBounds, this.format);\n result.bounds = this.getTextPageBounds(currentPage, currentBounds, stringResult);\n result.remainder = stringResult.remainder;\n result.end = (textFinished);\n return result;\n };\n /* tslint:enable */\n /**\n * `Corrects current bounds` on the page.\n * @private\n */\n TextLayouter.prototype.checkCorrectBounds = function (currentPage, currentBounds) {\n var pageSize = currentPage.graphics.clientSize;\n currentBounds.height = (currentBounds.height > 0) ? currentBounds.height : pageSize.height - currentBounds.y;\n return currentBounds;\n };\n /**\n * Returns a `rectangle` where the text was printed on the page.\n * @private\n */\n /* tslint:disable */\n TextLayouter.prototype.getTextPageBounds = function (currentPage, currentBounds, stringResult) {\n var textSize = stringResult.actualSize;\n var x = currentBounds.x;\n var y = currentBounds.y;\n var width = (currentBounds.width > 0) ? currentBounds.width : textSize.width;\n var height = textSize.height;\n var shiftedRect = currentPage.graphics.checkCorrectLayoutRectangle(textSize, currentBounds.x, currentBounds.y, this.format);\n // if (currentBounds.width <= 0) {\n x = shiftedRect.x;\n // }\n var verticalShift = currentPage.graphics.getTextVerticalAlignShift(textSize.height, currentBounds.height, this.format);\n y += verticalShift;\n var bounds = new RectangleF(x, y, width, height);\n return bounds;\n };\n return TextLayouter;\n}(ElementLayouter));\nexport { TextLayouter };\nvar TextPageLayoutResult = /** @class */ (function () {\n function TextPageLayoutResult() {\n }\n return TextPageLayoutResult;\n}());\nexport { TextPageLayoutResult };\nvar PdfTextLayoutResult = /** @class */ (function (_super) {\n __extends(PdfTextLayoutResult, _super);\n // Constructors\n /**\n * Initializes the new instance of `PdfTextLayoutResult` class.\n * @private\n */\n function PdfTextLayoutResult(page, bounds, remainder, lastLineBounds) {\n var _this = _super.call(this, page, bounds) || this;\n _this.remainderText = remainder;\n _this.lastLineTextBounds = lastLineBounds;\n return _this;\n }\n Object.defineProperty(PdfTextLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets a value that contains the `text` that was not printed.\n * @private\n */\n get: function () {\n return this.remainderText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextLayoutResult.prototype, \"lastLineBounds\", {\n /**\n * Gets a value that indicates the `bounds` of the last line that was printed on the page.\n * @private\n */\n get: function () {\n return this.lastLineTextBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTextLayoutResult;\n}(PdfLayoutResult));\nexport { PdfTextLayoutResult };\n","/**\n * public Enum for `PdfDestinationMode`.\n * @private\n */\nexport var PdfDestinationMode;\n(function (PdfDestinationMode) {\n /**\n * Specifies the type of `Location`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"Location\"] = 0] = \"Location\";\n /**\n * Specifies the type of `FitToPage`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitToPage\"] = 1] = \"FitToPage\";\n /**\n * Specifies the type of `FitR`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitR\"] = 2] = \"FitR\";\n})(PdfDestinationMode || (PdfDestinationMode = {}));\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfTextElement.ts class for EJ2-PDF\n */\nimport { PdfLayoutElement } from './../figures/layout-element';\nimport { PdfBrush } from './../brushes/pdf-brush';\nimport { PdfFont } from './../fonts/pdf-font';\nimport { PdfStandardFont } from './../fonts/pdf-standard-font';\nimport { PdfPen } from './../pdf-pen';\nimport { PdfLayoutParams } from './../figures/base/element-layouter';\nimport { TextLayouter } from './base/text-layouter';\nimport { PdfSolidBrush } from './../brushes/pdf-solid-brush';\nimport { PdfColor } from './../pdf-color';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutFormat } from './base/element-layouter';\nimport { PdfStringLayouter } from './../fonts/string-layouter';\nimport { PdfTextAlignment } from './../enum';\n/**\n * `PdfTextElement` class represents the text area with the ability to span several pages\n * and inherited from the 'PdfLayoutElement' class.\n * @private\n */\nvar PdfTextElement = /** @class */ (function (_super) {\n __extends(PdfTextElement, _super);\n function PdfTextElement(arg1, arg2, arg3, arg4, arg5) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * `Text` data.\n * @private\n */\n _this.content = '';\n /**\n * `Value` of text data.\n * @private\n */\n _this.elementValue = '';\n /**\n * indicate whether the drawText with PointF overload is called or not.\n * @default false\n * @private\n */\n _this.hasPointOverload = false;\n /**\n * indicate whether the PdfGridCell value is `PdfTextElement`\n * @default false\n * @private\n */\n _this.isPdfTextElement = false;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (typeof arg1 === 'string' && typeof arg2 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && typeof arg3 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && arg3 instanceof PdfPen && typeof arg4 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfPen = arg3;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && arg3 instanceof PdfBrush && typeof arg4 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfBrush = arg3;\n }\n else {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfPen = arg3;\n _this.pdfBrush = arg4;\n _this.format = arg5;\n }\n return _this;\n }\n Object.defineProperty(PdfTextElement.prototype, \"text\", {\n // Properties\n /**\n * Gets or sets a value indicating the `text` that should be printed.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * //\n * // set the link text\n * textLink.text = 'Google';\n * //\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.elementValue = value;\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"value\", {\n //get value\n /**\n * Gets or sets a `value` indicating the text that should be printed.\n * @private\n */\n get: function () {\n return this.elementValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"pen\", {\n //get pen\n /**\n * Gets or sets a `PdfPen` that determines the color, width, and style of the text\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n //Set pen value\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"brush\", {\n //get brush\n /**\n * Gets or sets the `PdfBrush` that will be used to draw the text with color and texture.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n //Set brush value\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"font\", {\n //get font\n /**\n * Gets or sets a `PdfFont` that defines the text format.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * // set the link text\n * textLink.text = 'Google';\n * //\n * // set the font\n * textLink.font = font;\n * //\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n if (this.pdfFont instanceof PdfStandardFont && this.content != null) {\n this.elementValue = PdfStandardFont.convert(this.content);\n }\n else {\n this.elementValue = this.content;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `PdfStringFormat` that will be used to set the string format\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Gets a `brush` for drawing.\n * @private\n */\n PdfTextElement.prototype.getBrush = function () {\n return (this.pdfBrush == null || typeof this.pdfBrush === 'undefined') ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.pdfBrush;\n };\n // /**\n // * `Draws` an element on the Graphics.\n // * @private\n // */\n // public drawInternal(graphics : PdfGraphics) : void {\n // graphics.drawString(this.elementValue, this.pdfFont, this.pdfPen, this.getBrush(), 0, 0, this.stringFormat);\n // }\n /**\n * `Layouts` the element.\n * @private\n */\n PdfTextElement.prototype.layout = function (param) {\n var layouter = new TextLayouter(this);\n var result = layouter.layout(param);\n return result;\n };\n PdfTextElement.prototype.drawText = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg4 === 'undefined') {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3.x, arg3.y);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3, arg4, null);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'undefined') {\n return this.drawText(arg2, arg3, null);\n }\n else if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && arg4 instanceof PdfLayoutFormat) {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3.x, arg3.y, arg4);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && (arg5 instanceof PdfLayoutFormat || arg5 == null)) {\n this.hasPointOverload = true;\n var width = (arg2.graphics.clientSize.width - arg3);\n var layoutRectangle = new RectangleF(arg3, arg4, width, 0);\n return this.drawText(arg2, layoutRectangle, arg5);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'boolean') {\n return this.drawText(arg2, arg3, null);\n }\n else {\n var layout = new PdfStringLayouter();\n if (this.hasPointOverload) {\n var stringLayoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF((arg2.graphics.clientSize.width - arg3.x), 0), true, arg2.graphics.clientSize);\n var layoutResult = void 0;\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n var previousPage = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n if (stringLayoutResult.lines.length > 1) {\n this.text = stringLayoutResult.layoutLines[0].text;\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n var previousPosition = new PointF(param.bounds.x, param.bounds.y);\n layoutResult = this.layout(param);\n var bounds = new RectangleF(0, layoutResult.bounds.y + stringLayoutResult.lineHeight, arg2.graphics.clientSize.width, stringLayoutResult.lineHeight);\n var isPaginate = false;\n for (var i = 1; i < stringLayoutResult.lines.length; i++) {\n param.page = layoutResult.page;\n param.bounds = new RectangleF(new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n this.text = stringLayoutResult.layoutLines[i].text;\n if (bounds.y + stringLayoutResult.lineHeight > layoutResult.page.graphics.clientSize.height) {\n isPaginate = true;\n param.page = param.page.graphics.getNextPage();\n if (previousPosition.y > (layoutResult.page.graphics.clientSize.height - layoutResult.bounds.height)) {\n bounds = new RectangleF(0, layoutResult.bounds.height, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n else {\n bounds = new RectangleF(0, 0, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n param.bounds = bounds;\n }\n layoutResult = this.layout(param);\n if (i !== (stringLayoutResult.lines.length - 1)) {\n bounds = new RectangleF(0, layoutResult.bounds.y + stringLayoutResult.lineHeight, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n else {\n var lineWidth = this.font.measureString(this.text, this.format).width;\n layoutResult = this.calculateResultBounds(layoutResult, lineWidth, layoutResult.page.graphics.clientSize.width, 0);\n }\n }\n }\n return layoutResult;\n }\n else {\n var lineSize = this.font.measureString(this.text, this.format);\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n layoutResult = this.layout(param);\n layoutResult = this.calculateResultBounds(layoutResult, lineSize.width, layoutResult.page.graphics.clientSize.width, 0);\n }\n return layoutResult;\n }\n }\n else {\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF(arg3.width, 0), false, arg2.graphics.clientSize);\n var result = void 0;\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n if (layoutResult.lines.length > 1) {\n this.text = layoutResult.layoutLines[0].text;\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n var previousPosition = new PointF(param.bounds.x, param.bounds.y);\n result = this.layout(param);\n var bounds = new RectangleF(temparg3.x, result.bounds.y + layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n var isPaginate = false;\n for (var i = 1; i < layoutResult.lines.length; i++) {\n param.page = result.page;\n param.bounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n this.text = layoutResult.layoutLines[i].text;\n if (bounds.y + layoutResult.lineHeight > result.page.graphics.clientSize.height) {\n isPaginate = true;\n param.page = param.page.graphics.getNextPage();\n if (previousPosition.y > (result.page.graphics.clientSize.height - result.bounds.height)) {\n bounds = new RectangleF(temparg3.x, layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n }\n else {\n bounds = new RectangleF(temparg3.x, 0, temparg3.width, layoutResult.lineHeight);\n }\n param.bounds = bounds;\n }\n result = this.layout(param);\n if (i !== (layoutResult.lines.length - 1)) {\n bounds = new RectangleF(temparg3.x, result.bounds.y + layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n }\n else {\n var lineWidth = this.font.measureString(this.text, this.format).width;\n result = this.calculateResultBounds(result, lineWidth, temparg3.width, temparg3.x);\n }\n }\n }\n return result;\n }\n else {\n var lineSize = this.font.measureString(this.text, this.format);\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n result = this.layout(param);\n result = this.calculateResultBounds(result, lineSize.width, temparg3.width, temparg3.x);\n }\n return result;\n }\n }\n }\n };\n PdfTextElement.prototype.calculateResultBounds = function (result, lineWidth, maximumWidth, startPosition) {\n var shift = 0;\n if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Center) {\n result.bounds.x = startPosition + (maximumWidth - lineWidth) / 2;\n result.bounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Right) {\n result.bounds.x = startPosition + (maximumWidth - lineWidth);\n result.bounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Justify) {\n result.bounds.x = startPosition;\n result.bounds.width = maximumWidth;\n }\n else {\n result.bounds.width = startPosition;\n result.bounds.width = lineWidth;\n }\n return result;\n };\n return PdfTextElement;\n}(PdfLayoutElement));\nexport { PdfTextElement };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfActionLinkAnnotation } from './action-link-annotation';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfUriAction } from './../actions/uri-action';\n/**\n * `PdfUriAnnotation` class represents the Uri annotation.\n * @private\n */\nvar PdfUriAnnotation = /** @class */ (function (_super) {\n __extends(PdfUriAnnotation, _super);\n function PdfUriAnnotation(rectangle, uri) {\n var _this = _super.call(this, rectangle) || this;\n if (typeof uri !== 'undefined') {\n _this.uri = uri;\n }\n return _this;\n }\n Object.defineProperty(PdfUriAnnotation.prototype, \"uriAction\", {\n /**\n * Get `action` of the annotation.\n * @private\n */\n get: function () {\n if (typeof this.pdfUriAction === 'undefined') {\n this.pdfUriAction = new PdfUriAction();\n }\n return this.pdfUriAction;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfUriAnnotation.prototype, \"uri\", {\n // Properties\n /**\n * Gets or sets the `Uri` address.\n * @private\n */\n get: function () {\n return this.uriAction.uri;\n },\n set: function (value) {\n if (this.uriAction.uri !== value) {\n this.uriAction.uri = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfUriAnnotation.prototype, \"action\", {\n /**\n * Gets or sets the `action`.\n * @private\n */\n get: function () {\n return this.getSetAction();\n },\n set: function (value) {\n this.getSetAction(value);\n this.uriAction.next = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initializes` annotation object.\n * @private\n */\n PdfUriAnnotation.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.link));\n var tempPrimitive = this.uriAction.element;\n this.dictionary.items.setValue(this.dictionaryProperties.a, this.uriAction.element);\n };\n return PdfUriAnnotation;\n}(PdfActionLinkAnnotation));\nexport { PdfUriAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfPage } from './../pages/pdf-page';\nimport { PointF, RectangleF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTextElement } from './../graphics/figures/text-element';\nimport { PdfUriAnnotation } from './uri-annotation';\nimport { PdfStringLayouter } from './../graphics/fonts/string-layouter';\nimport { PdfFontStyle } from './../graphics/fonts/enum';\nimport { PdfTextAlignment } from './../graphics/enum';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * `PdfTextWebLink` class represents the class for text web link annotation.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * //\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * // set the link text\n * textLink.text = 'Google';\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * //\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfTextWebLink = /** @class */ (function (_super) {\n __extends(PdfTextWebLink, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfTextWebLink` class.\n * @private\n */\n function PdfTextWebLink() {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Internal variable to store `Url`.\n * @default ''\n * @private\n */\n _this.uniformResourceLocator = '';\n /**\n * Internal variable to store `Uri Annotation` object.\n * @default null\n * @private\n */\n _this.uriAnnotation = null;\n /**\n * Checks whether the drawTextWebLink method with `PointF` overload is called or not.\n * If it set as true, then the start position of each lines excluding firest line is changed as (0, Y).\n * @private\n * @hidden\n */\n _this.recalculateBounds = false;\n _this.defaultBorder = new PdfArray();\n for (var i = 0; i < 3; i++) {\n _this.defaultBorder.add(new PdfNumber(0));\n }\n return _this;\n }\n Object.defineProperty(PdfTextWebLink.prototype, \"url\", {\n // Properties\n /**\n * Gets or sets the `Uri address`.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * //\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * //\n * // set the link text\n * textLink.text = 'Google';\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.uniformResourceLocator;\n },\n set: function (value) {\n if (value.length === 0) {\n throw new Error('ArgumentException : Url - string can not be empty');\n }\n this.uniformResourceLocator = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfTextWebLink.prototype.draw = function (arg1, arg2) {\n if (arg1 instanceof PdfPage) {\n var layout = new PdfStringLayouter();\n var previousFontStyle = this.font.style;\n if (arg2 instanceof PointF) {\n this.recalculateBounds = true;\n this.font.style = PdfFontStyle.Underline;\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF((arg1.graphics.clientSize.width - arg2.x), 0), true, arg1.graphics.clientSize);\n if (layoutResult.lines.length === 1) {\n var textSize = this.font.measureString(this.value);\n var rect = new RectangleF(arg2, textSize);\n rect = this.calculateBounds(rect, textSize.width, arg1.graphics.clientSize.width, arg2.x);\n this.uriAnnotation = new PdfUriAnnotation(rect, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n arg1.annotations.add(this.uriAnnotation);\n var result = this.drawText(arg1, arg2);\n this.font.style = previousFontStyle;\n return result;\n }\n else {\n var result = this.drawMultipleLineWithPoint(layoutResult, arg1, arg2);\n this.font.style = previousFontStyle;\n return result;\n }\n }\n else {\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF(arg2.width, 0), false, new SizeF(0, 0));\n this.font.style = PdfFontStyle.Underline;\n if (layoutResult.lines.length === 1) {\n var textSize = this.font.measureString(this.value);\n var rect = new RectangleF(new PointF(arg2.x, arg2.y), textSize);\n rect = this.calculateBounds(rect, textSize.width, arg2.width, arg2.x);\n this.uriAnnotation = new PdfUriAnnotation(rect, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n arg1.annotations.add(this.uriAnnotation);\n var returnValue = this.drawText(arg1, arg2);\n this.font.style = previousFontStyle;\n return returnValue;\n }\n else {\n var returnValue = this.drawMultipleLineWithBounds(layoutResult, arg1, arg2);\n this.font.style = previousFontStyle;\n return returnValue;\n }\n }\n }\n else {\n var page = new PdfPage();\n page = arg1.page;\n return this.draw(page, arg2);\n }\n };\n /* tslint:enable */\n //Private methods\n /**\n * Helper method `Draw` a Multiple Line Text Web Link on the Graphics with the specified location.\n * @private\n */\n PdfTextWebLink.prototype.drawMultipleLineWithPoint = function (result, page, location) {\n var layoutResult;\n for (var i = 0; i < result.layoutLines.length; i++) {\n var size = this.font.measureString(result.lines[i].text);\n var bounds = new RectangleF(location, size);\n if (i !== 0) {\n bounds.x = 0;\n }\n this.text = result.lines[i].text;\n if (bounds.y + size.height > page.graphics.clientSize.height) {\n if (i !== 0) {\n page = page.graphics.getNextPage();\n bounds = new RectangleF(0, 0, page.graphics.clientSize.width, size.height);\n location.y = 0;\n }\n else {\n break;\n }\n }\n bounds = this.calculateBounds(bounds, size.width, page.graphics.clientSize.width, bounds.x);\n this.uriAnnotation = new PdfUriAnnotation(bounds, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n page.annotations.add(this.uriAnnotation);\n if (i !== 0) {\n layoutResult = this.drawText(page, new PointF(0, bounds.y));\n }\n else {\n layoutResult = this.drawText(page, bounds.x, bounds.y);\n }\n location.y += size.height;\n }\n return layoutResult;\n };\n /**\n * Helper method `Draw` a Multiple Line Text Web Link on the Graphics with the specified bounds.\n * @private\n */\n PdfTextWebLink.prototype.drawMultipleLineWithBounds = function (result, page, bounds) {\n var layoutResult;\n for (var i = 0; i < result.layoutLines.length; i++) {\n var size = this.font.measureString(result.lines[i].text);\n var internalBounds = new RectangleF(new PointF(bounds.x, bounds.y), size);\n internalBounds = this.calculateBounds(internalBounds, size.width, bounds.width, bounds.x);\n this.text = result.lines[i].text;\n if (bounds.y + size.height > page.graphics.clientSize.height) {\n if (i !== 0) {\n page = page.graphics.getNextPage();\n bounds = new RectangleF(bounds.x, 0, bounds.width, size.height);\n internalBounds.y = 0;\n }\n else {\n break;\n }\n }\n this.uriAnnotation = new PdfUriAnnotation(internalBounds, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n page.annotations.add(this.uriAnnotation);\n layoutResult = this.drawText(page, bounds);\n bounds.y += size.height;\n }\n return layoutResult;\n };\n /* tslint:disable */\n PdfTextWebLink.prototype.calculateBounds = function (currentBounds, lineWidth, maximumWidth, startPosition) {\n var shift = 0;\n if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Center) {\n currentBounds.x = startPosition + (maximumWidth - lineWidth) / 2;\n currentBounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Right) {\n currentBounds.x = startPosition + (maximumWidth - lineWidth);\n currentBounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Justify) {\n currentBounds.x = startPosition;\n currentBounds.width = maximumWidth;\n }\n else {\n currentBounds.width = startPosition;\n currentBounds.width = lineWidth;\n }\n return currentBounds;\n };\n return PdfTextWebLink;\n}(PdfTextElement));\nexport { PdfTextWebLink };\n","/**\n * PdfNumbersConvertor.ts class for EJ2-PDF\n * @private\n */\nimport { PdfNumberStyle } from './../../pages/enum';\n/**\n * `PdfNumbersConvertor` for convert page number into numbers, roman letters, etc.,\n * @private\n */\nvar PdfNumbersConvertor = /** @class */ (function () {\n function PdfNumbersConvertor() {\n }\n // Static methods\n /**\n * Convert string value from page number with correct format.\n * @private\n */\n PdfNumbersConvertor.convert = function (intArabic, numberStyle) {\n var result = '';\n switch (numberStyle) {\n case PdfNumberStyle.None:\n result = '';\n break;\n case PdfNumberStyle.Numeric:\n result = intArabic.toString();\n break;\n case PdfNumberStyle.LowerLatin:\n result = this.arabicToLetter(intArabic).toLowerCase();\n break;\n case PdfNumberStyle.LowerRoman:\n result = this.arabicToRoman(intArabic).toLowerCase();\n break;\n case PdfNumberStyle.UpperLatin:\n result = this.arabicToLetter(intArabic);\n break;\n case PdfNumberStyle.UpperRoman:\n result = this.arabicToRoman(intArabic);\n break;\n }\n return result;\n };\n /**\n * Converts `arabic to roman` letters.\n * @private\n */\n PdfNumbersConvertor.arabicToRoman = function (intArabic) {\n var retval = '';\n retval += this.generateNumber(intArabic, 1000, 'M');\n retval += this.generateNumber(intArabic, 900, 'CM');\n retval += this.generateNumber(intArabic, 500, 'D');\n retval += this.generateNumber(intArabic, 400, 'CD');\n retval += this.generateNumber(intArabic, 100, 'C');\n retval += this.generateNumber(intArabic, 90, 'XC');\n retval += this.generateNumber(intArabic, 50, 'L');\n retval += this.generateNumber(intArabic, 40, 'XL');\n retval += this.generateNumber(intArabic, 10, 'X');\n retval += this.generateNumber(intArabic, 9, 'IX');\n retval += this.generateNumber(intArabic, 5, 'V');\n retval += this.generateNumber(intArabic, 4, 'IV');\n retval += this.generateNumber(intArabic, 1, 'I');\n return retval.toString();\n };\n /**\n * Converts `arabic to normal letters`.\n * @private\n */\n PdfNumbersConvertor.arabicToLetter = function (arabic) {\n var stack = this.convertToLetter(arabic);\n var result = '';\n while (stack.length > 0) {\n var num = stack.pop();\n result = this.appendChar(result, num);\n }\n return result.toString();\n };\n /**\n * Generate a string value of an input number.\n * @private\n */\n PdfNumbersConvertor.generateNumber = function (value, magnitude, letter) {\n var numberstring = '';\n while (value >= magnitude) {\n value -= magnitude;\n numberstring += letter;\n }\n return numberstring.toString();\n };\n /**\n * Convert a input number into letters.\n * @private\n */\n PdfNumbersConvertor.convertToLetter = function (arabic) {\n if (arabic <= 0) {\n throw Error('ArgumentOutOfRangeException-arabic, Value can not be less 0');\n }\n var stack = [];\n while (arabic > this.letterLimit) {\n var remainder = arabic % this.letterLimit;\n if (remainder === 0.0) {\n arabic = arabic / this.letterLimit - 1;\n remainder = this.letterLimit;\n }\n else {\n arabic /= this.letterLimit;\n }\n stack.push(remainder);\n }\n stack.push(arabic);\n return stack;\n };\n /**\n * Convert number to actual string value.\n * @private\n */\n PdfNumbersConvertor.appendChar = function (builder, value) {\n var letter = String.fromCharCode(PdfNumbersConvertor.acsiiStartIndex + value);\n builder += letter;\n return builder;\n };\n // Fields\n /**\n * numbers of letters in english [readonly].\n * @default = 26.0\n * @private\n */\n PdfNumbersConvertor.letterLimit = 26.0;\n /**\n * Resturns `acsii start index` value.\n * @default 64\n * @private\n */\n PdfNumbersConvertor.acsiiStartIndex = (65 - 1);\n return PdfNumbersConvertor;\n}());\nexport { PdfNumbersConvertor };\n","/**\n * Represent class to store information about `template and value pairs`.\n * @private\n */\nvar PdfTemplateValuePair = /** @class */ (function () {\n function PdfTemplateValuePair(template, value) {\n // Fields\n /**\n * Internal variable to store template.\n * @default null\n * @private\n */\n this.pdfTemplate = null;\n /**\n * Intenal variable to store value.\n * @private\n */\n this.content = '';\n if (typeof template === 'undefined') {\n //\n }\n else {\n this.template = template;\n this.value = value;\n }\n }\n Object.defineProperty(PdfTemplateValuePair.prototype, \"template\", {\n // Properties\n /**\n * Gets or sets the template.\n * @private\n */\n get: function () {\n return this.pdfTemplate;\n },\n set: function (value) {\n this.pdfTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplateValuePair.prototype, \"value\", {\n /**\n * Gets or sets the value.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplateValuePair;\n}());\nexport { PdfTemplateValuePair };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { PdfAutomaticField } from './automatic-field';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfTemplateValuePair } from './pdf-template-value-pair';\nimport { SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfTemplate } from './../../graphics/figures/pdf-template';\n/**\n * Represents automatic field which has the same value within the `PdfGraphics`.\n */\nvar PdfMultipleValueField = /** @class */ (function (_super) {\n __extends(PdfMultipleValueField, _super);\n function PdfMultipleValueField() {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the instance of dictionary values of `graphics and template value pair`.\n * @private\n */\n _this.list = new TemporaryDictionary();\n return _this;\n }\n // Implementation\n /* tslint:disable */\n PdfMultipleValueField.prototype.performDraw = function (graphics, location, scalingX, scalingY) {\n _super.prototype.performDrawHelper.call(this, graphics, location, scalingX, scalingY);\n var value = this.getValue(graphics);\n var template = new PdfTemplate(this.getSize());\n this.list.setValue(graphics, new PdfTemplateValuePair(template, value));\n var g = template.graphics;\n var size = this.getSize();\n template.graphics.drawString(value, this.getFont(), this.pen, this.getBrush(), 0, 0, size.width, size.height, this.stringFormat);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(template, drawLocation, new SizeF(template.width * scalingX, template.height * scalingY));\n };\n return PdfMultipleValueField;\n}(PdfAutomaticField));\nexport { PdfMultipleValueField };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfBrush } from './../../graphics/brushes/pdf-brush';\nimport { PdfNumberStyle } from './../../pages/enum';\nimport { PdfNumbersConvertor } from './pdf-numbers-convertor';\nimport { PdfMultipleValueField } from './multiple-value-field';\n/**\n * Represents PDF document `page number field`.\n * @public\n */\nvar PdfPageNumberField = /** @class */ (function (_super) {\n __extends(PdfPageNumberField, _super);\n function PdfPageNumberField(font, arg2) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the number style of the page number field.\n * @private\n */\n _this.internalNumberStyle = PdfNumberStyle.Numeric;\n if (typeof arg2 === 'undefined') {\n _this.font = font;\n }\n else if (arg2 instanceof PdfBrush) {\n _this.font = font;\n _this.brush = arg2;\n }\n else {\n _this.font = font;\n _this.bounds = arg2;\n }\n return _this;\n }\n Object.defineProperty(PdfPageNumberField.prototype, \"numberStyle\", {\n // Properties\n /**\n * Gets and sets the number style of the page number field.\n * @private\n */\n get: function () {\n return this.internalNumberStyle;\n },\n set: function (value) {\n this.internalNumberStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return the `string` value of page number field.\n * @public\n */\n PdfPageNumberField.prototype.getValue = function (graphics) {\n var result = null;\n var page = this.getPageFromGraphics(graphics);\n result = this.internalGetValue(page);\n return result;\n };\n /**\n * Internal method to `get actual value of page number`.\n * @private\n */\n PdfPageNumberField.prototype.internalGetValue = function (page) {\n var document = page.document;\n var pageIndex = document.pages.indexOf(page) + 1;\n return PdfNumbersConvertor.convert(pageIndex, this.numberStyle);\n };\n return PdfPageNumberField;\n}(PdfMultipleValueField));\nexport { PdfPageNumberField };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfCompositeField.ts class for EJ2-PDF\n */\nimport { PdfMultipleValueField } from './multiple-value-field';\n/**\n * Represents class which can concatenate multiple automatic fields into single string.\n */\nvar PdfCompositeField = /** @class */ (function (_super) {\n __extends(PdfCompositeField, _super);\n // Constructor\n /**\n * Initialize a new instance of `PdfCompositeField` class.\n * @param font Font of the field.\n * @param brush Color of the field.\n * @param text Content of the field.\n * @param list List of the automatic fields in specific order based on the text content.\n */\n function PdfCompositeField(font, brush, text) {\n var list = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n list[_i - 3] = arguments[_i];\n }\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the array of automatic fields.\n * @private\n */\n _this.internalAutomaticFields = null;\n /**\n * Stores the text value of the field.\n * @private\n */\n _this.internalText = '';\n _this.font = font;\n _this.brush = brush;\n _this.text = text;\n _this.automaticFields = list;\n return _this;\n }\n Object.defineProperty(PdfCompositeField.prototype, \"text\", {\n // Properties\n /**\n * Gets and sets the content of the field.\n * @public\n */\n get: function () {\n return this.internalText;\n },\n set: function (value) {\n this.internalText = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCompositeField.prototype, \"automaticFields\", {\n /**\n * Gets and sets the list of the field to drawn.\n * @public\n */\n get: function () {\n return this.internalAutomaticFields;\n },\n set: function (value) {\n this.internalAutomaticFields = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Return the actual value generated from the list of automatic fields.\n * @public\n */\n PdfCompositeField.prototype.getValue = function (graphics) {\n var values = [];\n var text = this.text.toString();\n if (typeof this.automaticFields !== 'undefined' && this.automaticFields != null && this.automaticFields.length > 0) {\n for (var i = 0; i < this.automaticFields.length; i++) {\n var automaticField = this.automaticFields[i];\n text = text.replace('{' + i + '}', automaticField.getValue(graphics));\n }\n }\n return text;\n };\n return PdfCompositeField;\n}(PdfMultipleValueField));\nexport { PdfCompositeField };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfSingleValueField.ts class for EJ2-PDF\n */\nimport { PdfAutomaticField } from './automatic-field';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfTemplateValuePair } from './pdf-template-value-pair';\nimport { PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfTemplate } from './../../graphics/figures/pdf-template';\n/**\n * Represents automatic field which has the same value in the whole document.\n */\nvar PdfSingleValueField = /** @class */ (function (_super) {\n __extends(PdfSingleValueField, _super);\n // Constructors\n function PdfSingleValueField() {\n var _this = _super.call(this) || this;\n // Fields\n /* tslint:disable */\n _this.list = new TemporaryDictionary();\n /* tslint:enable */\n _this.painterGraphics = [];\n return _this;\n }\n PdfSingleValueField.prototype.performDraw = function (graphics, location, scalingX, scalingY) {\n _super.prototype.performDrawHelper.call(this, graphics, location, scalingX, scalingY);\n var page = this.getPageFromGraphics(graphics);\n var document = page.document;\n var textValue = this.getValue(graphics);\n /* tslint:disable */\n if (this.list.containsKey(document)) {\n var pair = this.list.getValue(document);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(pair.template, drawLocation, new SizeF(pair.template.width * scalingX, pair.template.height * scalingY));\n this.painterGraphics.push(graphics);\n }\n else {\n var size = this.getSize();\n var template = new PdfTemplate(size);\n this.list.setValue(document, new PdfTemplateValuePair(template, textValue));\n template.graphics.drawString(textValue, this.getFont(), this.pen, this.getBrush(), 0, 0, size.width, size.height, this.stringFormat);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(template, drawLocation, new SizeF(template.width * scalingX, template.height * scalingY));\n this.painterGraphics.push(graphics);\n }\n /* tslint:enable */\n };\n return PdfSingleValueField;\n}(PdfAutomaticField));\nexport { PdfSingleValueField };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfPageCountField.ts class for EJ2-PDF\n */\nimport { PdfSingleValueField } from './single-value-field';\nimport { PdfNumberStyle } from './../../pages/enum';\nimport { PdfBrush } from './../../graphics/brushes/pdf-brush';\nimport { PdfNumbersConvertor } from './pdf-numbers-convertor';\n/**\n * Represents total PDF document page count automatic field.\n */\nvar PdfPageCountField = /** @class */ (function (_super) {\n __extends(PdfPageCountField, _super);\n function PdfPageCountField(font, arg2) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the number style of the field.\n * @private\n */\n _this.internalNumberStyle = PdfNumberStyle.Numeric;\n if (typeof arg2 === 'undefined') {\n _this.font = font;\n }\n else if (arg2 instanceof PdfBrush) {\n _this.font = font;\n _this.brush = arg2;\n }\n else {\n _this.font = font;\n _this.bounds = arg2;\n }\n return _this;\n }\n Object.defineProperty(PdfPageCountField.prototype, \"numberStyle\", {\n // Properties\n /**\n * Gets and sets the number style of the field.\n * @public\n */\n get: function () {\n return this.internalNumberStyle;\n },\n set: function (value) {\n this.internalNumberStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Return the actual value of the content to drawn.\n * @public\n */\n PdfPageCountField.prototype.getValue = function (graphics) {\n var result = null;\n var page = this.getPageFromGraphics(graphics);\n var document = page.section.parent.document;\n var count = document.pages.count;\n result = PdfNumbersConvertor.convert(count, this.numberStyle);\n return result;\n };\n return PdfPageCountField;\n}(PdfSingleValueField));\nexport { PdfPageCountField };\n","import { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfPageRotateAngle } from './../pages/enum';\nimport { PdfDestinationMode } from './../general/enum';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDestination` class represents an anchor in the document\n * where bookmarks or annotations can direct when clicked.\n */\nvar PdfDestination = /** @class */ (function () {\n function PdfDestination(arg1, arg2) {\n // Fields\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Type of the `destination`.\n * @private\n */\n this.destinationMode = PdfDestinationMode.Location;\n /**\n * `Zoom` factor.\n * @private\n * @default 0\n */\n this.zoomFactor = 0;\n /**\n * `Location` of the destination.\n * @default new PointF() with 0 ,0 as co-ordinates\n * @private\n */\n this.destinationLocation = new PointF(0, 0);\n /**\n * `Bounds` of the destination as RectangleF.\n * @default RectangleF.Empty\n * @private\n */\n this.bounds = new RectangleF();\n /**\n * Pdf primitive representing `this` object.\n * @private\n */\n this.array = new PdfArray();\n if (typeof arg2 === 'undefined') {\n var angle = PdfPageRotateAngle.RotateAngle0;\n this.destinationLocation = new PointF(0, this.destinationLocation.y);\n this.pdfPage = arg1;\n }\n else if (arg2 instanceof PointF) {\n this.constructor(arg1);\n this.destinationLocation = arg2;\n }\n else {\n this.constructor(arg1);\n this.bounds = arg2;\n }\n }\n Object.defineProperty(PdfDestination.prototype, \"zoom\", {\n // Properties\n /**\n * Gets and Sets the `zoom` factor.\n * @private\n */\n get: function () {\n return this.zoomFactor;\n },\n set: function (value) {\n this.zoomFactor = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"page\", {\n /**\n * Gets and Sets the `page` object.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"mode\", {\n /**\n * Gets and Sets the destination `mode`.\n * @private\n */\n get: function () {\n return this.destinationMode;\n },\n set: function (value) {\n this.destinationMode = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"location\", {\n /**\n * Gets and Sets the `location`.\n * @private\n */\n get: function () {\n return this.destinationLocation;\n },\n set: function (value) {\n this.destinationLocation = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Translates` co-ordinates to PDF co-ordinate system (lower/left).\n * @private\n */\n PdfDestination.prototype.pointToNativePdf = function (page, point) {\n var section = page.section;\n return section.pointToNativePdf(page, point);\n };\n /**\n * `In fills` array by correct values.\n * @private\n */\n PdfDestination.prototype.initializePrimitive = function () {\n this.array.clear();\n this.array.add(new PdfReferenceHolder(this.pdfPage));\n switch (this.destinationMode) {\n case PdfDestinationMode.Location:\n var simplePage = this.pdfPage;\n var point = new PointF();\n point = this.pointToNativePdf(simplePage, this.destinationLocation);\n this.array.add(new PdfName(this.dictionaryProperties.xyz));\n this.array.add(new PdfNumber(point.x));\n this.array.add(new PdfNumber(point.y));\n this.array.add(new PdfNumber(this.zoomFactor));\n break;\n case PdfDestinationMode.FitToPage:\n this.array.add(new PdfName(this.dictionaryProperties.fit));\n break;\n }\n };\n Object.defineProperty(PdfDestination.prototype, \"element\", {\n /**\n * Gets the `element` representing this object.\n * @private\n */\n get: function () {\n this.initializePrimitive();\n return this.array;\n },\n enumerable: true,\n configurable: true\n });\n return PdfDestination;\n}());\nexport { PdfDestination };\n","/**\n * public Enum for `PdfBorderOverlapStyle`.\n * @private\n */\nexport var PdfBorderOverlapStyle;\n(function (PdfBorderOverlapStyle) {\n /**\n * Specifies the type of `Overlap`.\n * @private\n */\n PdfBorderOverlapStyle[PdfBorderOverlapStyle[\"Overlap\"] = 0] = \"Overlap\";\n /**\n * Specifies the type of `Inside`.\n * @private\n */\n PdfBorderOverlapStyle[PdfBorderOverlapStyle[\"Inside\"] = 1] = \"Inside\";\n})(PdfBorderOverlapStyle || (PdfBorderOverlapStyle = {}));\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfTrueTypeFont.ts class for EJ2-PDF\n */\nimport { UnicodeTrueTypeFont } from './unicode-true-type-font';\nimport { PdfFont } from './pdf-font';\nimport { PdfFontStyle } from './enum';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfTextDirection } from './../enum';\nimport { RtlRenderer } from './rtl-renderer';\n//https://www.giftofspeed.com/base64-encoder/\nvar PdfTrueTypeFont = /** @class */ (function (_super) {\n __extends(PdfTrueTypeFont, _super);\n function PdfTrueTypeFont(base64String, size, style) {\n var _this = _super.call(this, size) || this;\n /**\n * Indicates whether the font is embedded or not.\n * @private\n */\n _this.isEmbedFont = false;\n /**\n * Indicates whether the font is unicoded or not.\n * @private\n */\n _this.isUnicode = true;\n if (style !== undefined) {\n _this.createFontInternal(base64String, style);\n }\n else {\n _this.createFontInternal(base64String, PdfFontStyle.Regular);\n }\n return _this;\n }\n PdfTrueTypeFont.prototype.equalsToFont = function (font) {\n var result = false;\n //let result : boolean = this.fontInternal.equalsToFont(font);\n return result;\n };\n PdfTrueTypeFont.prototype.getLineWidth = function (line, format) {\n var width = 0;\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n var returnValue = this.getUnicodeLineWidth(line, /*out*/ width, format);\n width = returnValue.width;\n }\n else {\n width = this.fontInternal.getLineWidth(line);\n }\n var size = this.metrics.getSize(format);\n width *= (PdfFont.charSizeMultiplier * size);\n width = this.applyFormatSettings(line, format, width);\n return width;\n };\n /**\n * Returns width of the char.\n */\n PdfTrueTypeFont.prototype.getCharWidth = function (charCode, format) {\n var codeWidth = this.fontInternal.getCharWidth(charCode);\n var size = this.metrics.getSize(format);\n codeWidth *= (0.001 * size);\n return codeWidth;\n };\n //Implementation\n PdfTrueTypeFont.prototype.createFontInternal = function (base64String, style) {\n this.fontInternal = new UnicodeTrueTypeFont(base64String, this.size);\n this.calculateStyle(style);\n this.initializeInternals();\n };\n PdfTrueTypeFont.prototype.calculateStyle = function (style) {\n var iStyle = this.fontInternal.ttfMetrics.macStyle;\n if ((style & PdfFontStyle.Underline) !== 0) {\n iStyle |= PdfFontStyle.Underline;\n }\n if ((style & PdfFontStyle.Strikeout) !== 0) {\n iStyle |= PdfFontStyle.Strikeout;\n }\n this.setStyle(iStyle);\n };\n PdfTrueTypeFont.prototype.initializeInternals = function () {\n var equalFont = null;\n if (PdfDocument.enableCache) {\n // Search for the similar fonts.\n equalFont = PdfDocument.cache.search(this);\n }\n var internals = null;\n // There is not equal font in the cache.\n if (equalFont !== null && equalFont !== undefined) {\n // Get the settings from the cached font.\n internals = equalFont.getInternals();\n var metrics = equalFont.metrics;\n metrics = metrics.clone();\n metrics.size = this.size;\n this.metrics = metrics;\n this.fontInternal = equalFont.fontInternal;\n }\n else {\n if (equalFont == null) {\n if (this.fontInternal instanceof UnicodeTrueTypeFont) {\n this.fontInternal.isEmbed = this.isEmbedFont;\n }\n this.fontInternal.createInternals();\n internals = this.fontInternal.getInternals();\n this.metrics = this.fontInternal.metrics;\n }\n }\n this.metrics.isUnicodeFont = true;\n this.setInternals(internals);\n //this.ttfReader = (this.fontInternal as UnicodeTrueTypeFont).ttfReader;\n };\n /**\n * Stores used symbols.\n */\n PdfTrueTypeFont.prototype.setSymbols = function (text) {\n var internalFont = this.fontInternal;\n if (internalFont != null) {\n internalFont.setSymbols(text);\n }\n };\n Object.defineProperty(PdfTrueTypeFont.prototype, \"Unicode\", {\n /**\n * Property\n *\n */\n get: function () {\n return this.isUnicode;\n },\n enumerable: true,\n configurable: true\n });\n // public get Font() : UnicodeTrueTypeFont {\n // return this.fontInternal as UnicodeTrueTypeFont;\n // }\n PdfTrueTypeFont.prototype.getUnicodeLineWidth = function (line, /*out*/ width, format) {\n // if (line == null) {\n // throw new Error('ArgumentNullException : line');\n // }\n width = 0;\n var glyphIndices = null;\n var rtlRender = new RtlRenderer();\n /* tslint:disable-next-line:max-line-length */\n var result = rtlRender.getGlyphIndex(line, this, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, /*out*/ glyphIndices, true);\n var resultGlyph = result.success;\n glyphIndices = result.glyphs;\n if (resultGlyph && glyphIndices !== null) {\n var ttfReader = this.fontInternal.ttfReader;\n for (var i = 0, len = glyphIndices.length; i < len; i++) {\n var glyphIndex = glyphIndices[i];\n var glyph = ttfReader.getGlyph(glyphIndex);\n if (glyph !== null && typeof glyph !== 'undefined') {\n width += glyph.width;\n }\n }\n }\n return { success: resultGlyph, width: width };\n };\n return PdfTrueTypeFont;\n}(PdfFont));\nexport { PdfTrueTypeFont };\n","/**\n * PdfPageTemplateElement.ts class for EJ2-Pdf\n */\nimport { PdfDockStyle, PdfAlignmentStyle, TemplateType } from './enum';\nimport { PointF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTemplate } from './../graphics/figures/pdf-template';\nimport { PdfPage } from './pdf-page';\nimport { RectangleF } from './../drawing/pdf-drawing';\n/**\n * Describes a `page template` object that can be used as header/footer, watermark or stamp.\n */\nvar PdfPageTemplateElement = /** @class */ (function () {\n /* tslint:disable */\n function PdfPageTemplateElement(arg1, arg2, arg3, arg4, arg5) {\n if (arg1 instanceof RectangleF && typeof arg2 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else if (arg1 instanceof RectangleF && arg2 instanceof PdfPage && typeof arg3 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg1.width, arg1.height, arg2);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg2.width, arg2.height);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg2.width, arg2.height, arg3);\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.constructor(arg1.width, arg1.height);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.constructor(0, 0, arg1, arg2);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.constructor(0, 0, arg1, arg2, arg3);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n }\n else {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n // this.graphics.colorSpace = this.page.document.colorSpace;\n }\n /* tslint:enable */\n }\n Object.defineProperty(PdfPageTemplateElement.prototype, \"dock\", {\n // Properties\n /**\n * Gets or sets the `dock style` of the page template element.\n * @private\n */\n get: function () {\n return this.dockStyle;\n },\n set: function (value) {\n // if (this.dockStyle !== value && this.Type === TemplateType.None) {\n this.dockStyle = value;\n // Reset alignment.\n this.resetAlignment();\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"alignment\", {\n /**\n * Gets or sets `alignment` of the page template element.\n * @private\n */\n get: function () {\n return this.alignmentStyle;\n },\n set: function (value) {\n // if (this.alignmentStyle !== value) {\n this.setAlignment(value);\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"foreground\", {\n /**\n * Indicates whether the page template is located `in front of the page layers or behind of it`.\n * @private\n */\n get: function () {\n return this.isForeground;\n },\n set: function (value) {\n // if (this.foreground !== value) {\n this.isForeground = value;\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"background\", {\n /**\n * Indicates whether the page template is located `behind of the page layers or in front of it`.\n * @private\n */\n get: function () {\n return !this.isForeground;\n },\n set: function (value) {\n this.isForeground = !value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"location\", {\n /**\n * Gets or sets `location` of the page template element.\n * @private\n */\n get: function () {\n return this.currentLocation;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"x\", {\n /**\n * Gets or sets `X` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.x : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.x = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"y\", {\n /**\n * Gets or sets `Y` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.y : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.y = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"size\", {\n /**\n * Gets or sets `size` of the page template element.\n * @private\n */\n get: function () {\n return this.template.size;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.template.reset(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"width\", {\n /**\n * Gets or sets `width` of the page template element.\n * @private\n */\n get: function () {\n return this.template.width;\n },\n set: function (value) {\n if (this.template.width !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.width = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"height\", {\n /**\n * Gets or sets `height` of the page template element.\n * @private\n */\n get: function () {\n return this.template.height;\n },\n set: function (value) {\n if (this.template.height !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.height = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"graphics\", {\n /**\n * Gets `graphics` context of the page template element.\n * @private\n */\n get: function () {\n return this.template.graphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"template\", {\n /**\n * Gets Pdf `template` object.\n * @private\n */\n get: function () {\n // if (typeof this.pdfTemplate === 'undefined' || this.pdfTemplate == null) {\n // this.pdfTemplate = new PdfTemplate(this.size);\n // }\n return this.pdfTemplate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"type\", {\n /**\n * Gets or sets `type` of the usage of this page template.\n * @private\n */\n get: function () {\n return this.templateType;\n },\n set: function (value) {\n this.updateDocking(value);\n this.templateType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"bounds\", {\n /**\n * Gets or sets `bounds` of the page template.\n * @public\n */\n get: function () {\n return new RectangleF(new PointF(this.x, this.y), this.size);\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.location = new PointF(value.x, value.y);\n this.size = new SizeF(value.width, value.height);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Updates Dock` property if template is used as header/footer.\n * @private\n */\n PdfPageTemplateElement.prototype.updateDocking = function (type) {\n if (type !== TemplateType.None) {\n switch (type) {\n case TemplateType.Top:\n this.dock = PdfDockStyle.Top;\n break;\n case TemplateType.Bottom:\n this.dock = PdfDockStyle.Bottom;\n break;\n case TemplateType.Left:\n this.dock = PdfDockStyle.Left;\n break;\n case TemplateType.Right:\n this.dock = PdfDockStyle.Right;\n break;\n }\n this.resetAlignment();\n }\n };\n /**\n * `Resets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.resetAlignment = function () {\n this.alignment = PdfAlignmentStyle.None;\n };\n /**\n * `Sets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.setAlignment = function (alignment) {\n if (this.dock === PdfDockStyle.None) {\n this.alignmentStyle = alignment;\n }\n else {\n // Template is docked and alignment has been changed.\n var canBeSet = false;\n switch (this.dock) {\n case PdfDockStyle.Left:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.MiddleLeft ||\n alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Top:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.TopCenter ||\n alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Right:\n canBeSet = (alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.MiddleRight ||\n alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Bottom:\n canBeSet = (alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.BottomCenter\n || alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Fill:\n canBeSet = (alignment === PdfAlignmentStyle.MiddleCenter || alignment === PdfAlignmentStyle.None);\n break;\n }\n if (canBeSet) {\n this.alignmentStyle = alignment;\n }\n }\n };\n /**\n * Draws the template.\n * @private\n */\n PdfPageTemplateElement.prototype.draw = function (layer, document) {\n var page = layer.page;\n var bounds = this.calculateBounds(page, document);\n if (bounds.x === -0) {\n bounds.x = 0;\n }\n layer.graphics.drawPdfTemplate(this.template, new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n };\n /**\n * Calculates bounds of the page template.\n * @private\n */\n PdfPageTemplateElement.prototype.calculateBounds = function (page, document) {\n var result = this.bounds;\n if (this.alignmentStyle !== PdfAlignmentStyle.None) {\n result = this.getAlignmentBounds(page, document);\n }\n else if (this.dockStyle !== PdfDockStyle.None) {\n result = this.getDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getAlignmentBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleAlignmentBounds(page, document);\n }\n else {\n result = this.getTemplateAlignmentBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleAlignmentBounds = function (page, document) {\n var bounds = this.bounds;\n var pdfSection = page.section;\n var actualBounds = pdfSection.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n x = 0;\n y = 0;\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = 0;\n break;\n case PdfAlignmentStyle.TopRight:\n x = actualBounds.width - this.width;\n y = 0;\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = 0;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n x = 0;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n x = actualBounds.width - this.width;\n y = actualBounds.height - this.height;\n break;\n }\n bounds.x = x;\n bounds.y = y;\n return bounds;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateAlignmentBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n if (this.type === TemplateType.Left) {\n x = -actualBounds.x;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = -actualBounds.x;\n y = -actualBounds.y;\n }\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = -actualBounds.y;\n break;\n case PdfAlignmentStyle.TopRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = -actualBounds.y;\n }\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = -actualBounds.x;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n if (this.type === TemplateType.Left) {\n x = -actualBounds.x;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = -actualBounds.x;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n }\n result.x = x;\n result.y = y;\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getDockBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleDockBounds(page, document);\n }\n else {\n result = this.getTemplateDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = 0;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = 0;\n y = 0;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = 0;\n y = actualBounds.height - this.height;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n /**\n * Calculates template bounds basing on docking if template is a page template.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var actualSize = section.pageSettings.getActualSize();\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = -actualBounds.x;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = -actualBounds.x;\n y = -actualBounds.y;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y = -actualBounds.y + actualSize.height;\n }\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = -actualBounds.x;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y -= actualSize.height;\n }\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n return PdfPageTemplateElement;\n}());\nexport { PdfPageTemplateElement };\n","/**\n * PdfBorders.ts class for EJ2-PDF\n */\nimport { PdfPen } from './../../../graphics/pdf-pen';\nimport { PdfDashStyle } from './../../../graphics/enum';\nimport { PdfColor } from './../../../graphics/pdf-color';\n/**\n * `PdfBorders` class used represents the cell border of the PDF grid.\n */\nvar PdfBorders = /** @class */ (function () {\n // Constructor\n /**\n * Create a new instance for `PdfBorders` class.\n * @private\n */\n function PdfBorders() {\n var defaultBorderPenLeft = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenLeft.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenRight = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenRight.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenTop = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenTop.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenBottom = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenBottom.dashStyle = PdfDashStyle.Solid;\n this.leftPen = defaultBorderPenLeft;\n this.rightPen = defaultBorderPenRight;\n this.topPen = defaultBorderPenTop;\n this.bottomPen = defaultBorderPenBottom;\n }\n Object.defineProperty(PdfBorders.prototype, \"left\", {\n // Properties\n /**\n * Gets or sets the `Left`.\n * @private\n */\n get: function () {\n return this.leftPen;\n },\n set: function (value) {\n this.leftPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"right\", {\n /**\n * Gets or sets the `Right`.\n * @private\n */\n get: function () {\n return this.rightPen;\n },\n set: function (value) {\n this.rightPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"top\", {\n /**\n * Gets or sets the `Top`.\n * @private\n */\n get: function () {\n return this.topPen;\n },\n set: function (value) {\n this.topPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"bottom\", {\n /**\n * Gets or sets the `Bottom`.\n * @private\n */\n get: function () {\n return this.bottomPen;\n },\n set: function (value) {\n this.bottomPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"all\", {\n /**\n * sets the `All`.\n * @private\n */\n set: function (value) {\n this.leftPen = this.rightPen = this.topPen = this.bottomPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"isAll\", {\n /**\n * Gets a value indicating whether this instance `is all`.\n * @private\n */\n get: function () {\n return ((this.leftPen === this.rightPen) && (this.leftPen === this.topPen) && (this.leftPen === this.bottomPen));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders, \"default\", {\n /**\n * Gets the `default`.\n * @private\n */\n get: function () {\n return new PdfBorders();\n },\n enumerable: true,\n configurable: true\n });\n return PdfBorders;\n}());\nexport { PdfBorders };\nvar PdfPaddings = /** @class */ (function () {\n function PdfPaddings(left, right, top, bottom) {\n if (typeof left === 'undefined') {\n //5.76 and 0 are taken from ms-word default table margins.\n this.leftPad = this.rightPad = 5.76;\n //0.5 is set for top and bottom by default.\n this.bottom = this.topPad = 0.5;\n }\n else {\n this.leftPad = left;\n this.rightPad = right;\n this.topPad = top;\n this.bottomPad = bottom;\n }\n }\n Object.defineProperty(PdfPaddings.prototype, \"left\", {\n // Properties\n /**\n * Gets or sets the `left` value of the edge\n * @private\n */\n get: function () {\n return this.leftPad;\n },\n set: function (value) {\n this.leftPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"right\", {\n /**\n * Gets or sets the `right` value of the edge.\n * @private\n */\n get: function () {\n return this.rightPad;\n },\n set: function (value) {\n this.rightPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"top\", {\n /**\n * Gets or sets the `top` value of the edge\n * @private\n */\n get: function () {\n return this.topPad;\n },\n set: function (value) {\n this.topPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom` value of the edge.\n * @private\n */\n get: function () {\n return this.bottomPad;\n },\n set: function (value) {\n this.bottomPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"all\", {\n /**\n * Sets value to all sides `left,right,top and bottom`.s\n * @private\n */\n set: function (value) {\n this.leftPad = this.rightPad = this.topPad = this.bottomPad = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPaddings;\n}());\nexport { PdfPaddings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfBorders, PdfPaddings } from './pdf-borders';\nimport { PdfBorderOverlapStyle } from './../../tables/light-tables/enum';\n/**\n * Base class for the `grid style`,\n */\nvar PdfGridStyleBase = /** @class */ (function () {\n function PdfGridStyleBase() {\n }\n Object.defineProperty(PdfGridStyleBase.prototype, \"backgroundBrush\", {\n // Properties\n /**\n * Gets or sets the `background brush`.\n * @private\n */\n get: function () {\n return this.gridBackgroundBrush;\n },\n set: function (value) {\n this.gridBackgroundBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"textBrush\", {\n /**\n * Gets or sets the `text brush`.\n * @private\n */\n get: function () {\n return this.gridTextBrush;\n },\n set: function (value) {\n this.gridTextBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"textPen\", {\n /**\n * Gets or sets the `text pen`.\n * @private\n */\n get: function () {\n return this.gridTextPen;\n },\n set: function (value) {\n this.gridTextPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"font\", {\n /**\n * Gets or sets the `font`.\n * @private\n */\n get: function () {\n return this.gridFont;\n },\n set: function (value) {\n this.gridFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"backgroundImage\", {\n /**\n * Gets or sets the `background Image`.\n * @private\n */\n get: function () {\n return this.gridBackgroundImage;\n },\n set: function (value) {\n this.gridBackgroundImage = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyleBase;\n}());\nexport { PdfGridStyleBase };\n/**\n * `PdfGridStyle` class provides customization of the appearance for the 'PdfGrid'.\n */\nvar PdfGridStyle = /** @class */ (function (_super) {\n __extends(PdfGridStyle, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGridStyle` class.\n * @private\n */\n function PdfGridStyle() {\n var _this = _super.call(this) || this;\n _this.gridBorderOverlapStyle = PdfBorderOverlapStyle.Overlap;\n _this.bAllowHorizontalOverflow = false;\n _this.gridHorizontalOverflowType = PdfHorizontalOverflowType.LastPage;\n return _this;\n }\n Object.defineProperty(PdfGridStyle.prototype, \"cellSpacing\", {\n //Properties\n /**\n * Gets or sets the `cell spacing` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n if (typeof this.gridCellSpacing === 'undefined') {\n this.gridCellSpacing = 0;\n }\n return this.gridCellSpacing;\n },\n set: function (value) {\n this.gridCellSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"horizontalOverflowType\", {\n /**\n * Gets or sets the type of the `horizontal overflow` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridHorizontalOverflowType;\n },\n set: function (value) {\n this.gridHorizontalOverflowType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"allowHorizontalOverflow\", {\n /**\n * Gets or sets a value indicating whether to `allow horizontal overflow`.\n * @private\n */\n get: function () {\n return this.bAllowHorizontalOverflow;\n },\n set: function (value) {\n this.bAllowHorizontalOverflow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n return this.gridCellPadding;\n },\n set: function (value) {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n this.gridCellPadding = value;\n }\n else {\n this.gridCellPadding = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"borderOverlapStyle\", {\n /**\n * Gets or sets the `border overlap style` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridBorderOverlapStyle;\n },\n set: function (value) {\n this.gridBorderOverlapStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyle;\n}(PdfGridStyleBase));\nexport { PdfGridStyle };\n/**\n * `PdfGridCellStyle` class provides customization of the appearance for the 'PdfGridCell'.\n */\nvar PdfGridCellStyle = /** @class */ (function (_super) {\n __extends(PdfGridCellStyle, _super);\n /**\n * Initializes a new instance of the `PdfGridCellStyle` class.\n * @private\n */\n function PdfGridCellStyle() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridCellBorders = PdfBorders.default;\n return _this;\n }\n Object.defineProperty(PdfGridCellStyle.prototype, \"stringFormat\", {\n //Properties\n /**\n * Gets the `string format` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"borders\", {\n /**\n * Gets or sets the `border` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.gridCellBorders;\n },\n set: function (value) {\n this.gridCellBorders = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n return this.gridCellPadding;\n },\n set: function (value) {\n if (this.gridCellPadding == null || typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n this.gridCellPadding = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridCellStyle;\n}(PdfGridStyleBase));\nexport { PdfGridCellStyle };\n/**\n * `PdfGridRowStyle` class provides customization of the appearance for the `PdfGridRow`.\n */\nvar PdfGridRowStyle = /** @class */ (function () {\n // public setBackgroundImage(value : PdfImage) : void {\n // this.gridRowBackgroundImage = value;\n // if (typeof this.parent !== 'undefined') {\n // for (let i : number = 0; i < this.parent.cells.count; i++) {\n // this.parent.cells.getCell(i).style.backgroundImage = value;\n // }\n // }\n // }\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowStyle` class.\n * @private\n */\n function PdfGridRowStyle() {\n //\n }\n Object.defineProperty(PdfGridRowStyle.prototype, \"backgroundBrush\", {\n // Properties\n /**\n * Gets or sets the `background brush`.\n * @private\n */\n get: function () {\n return this.gridRowBackgroundBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBackgroundBrush = function (value) {\n this.gridRowBackgroundBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.backgroundBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textBrush\", {\n /**\n * Gets or sets the `text brush`.\n * @private\n */\n get: function () {\n return this.gridRowTextBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextBrush = function (value) {\n this.gridRowTextBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textPen\", {\n /**\n * Gets or sets the `text pen`.\n * @private\n */\n get: function () {\n return this.gridRowTextPen;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextPen = function (value) {\n this.gridRowTextPen = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textPen = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"font\", {\n /**\n * Gets or sets the `font`.\n * @private\n */\n get: function () {\n return this.gridRowFont;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setFont = function (value) {\n this.gridRowFont = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.font = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"border\", {\n /**\n * Gets or sets the `border` of the current row.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBorder === 'undefined') {\n this.setBorder(new PdfBorders());\n }\n return this.gridRowBorder;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBorder = function (value) {\n this.gridRowBorder = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.borders = value;\n }\n }\n };\n /**\n * sets the `parent row` of the current object.\n * @private\n */\n PdfGridRowStyle.prototype.setParent = function (parent) {\n this.parent = parent;\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"backgroundImage\", {\n /**\n * Gets or sets the `backgroundImage` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.gridRowBackgroundImage;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridRowStyle;\n}());\nexport { PdfGridRowStyle };\n/**\n * public Enum for `PdfHorizontalOverflowType`.\n * @private\n */\nexport var PdfHorizontalOverflowType;\n(function (PdfHorizontalOverflowType) {\n /**\n * Specifies the type of `NextPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"NextPage\"] = 0] = \"NextPage\";\n /**\n * Specifies the type of `LastPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"LastPage\"] = 1] = \"LastPage\";\n})(PdfHorizontalOverflowType || (PdfHorizontalOverflowType = {}));\n","import { PdfGrid } from './pdf-grid';\nimport { PdfGridCellStyle } from './styles/style';\nimport { PdfStringLayouter } from './../../graphics/fonts/string-layouter';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\nimport { RectangleF, PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfDashStyle, PdfLineCap } from './../../graphics/enum';\nimport { PdfBorderOverlapStyle } from './../tables/light-tables/enum';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfImage } from './../../graphics/images/pdf-image';\nimport { PdfBitmap } from './../../graphics/images/pdf-bitmap';\nimport { PdfTextWebLink } from './../../annotations/pdf-text-web-link';\nimport { PdfLayoutType } from './../../graphics/figures/enum';\nimport { PdfGridLayouter, PdfGridLayoutFormat } from './../../structured-elements/grid/layout/grid-layouter';\nimport { PdfLayoutParams } from '../../../implementation/graphics/figures/base/element-layouter';\n/**\n * `PdfGridCell` class represents the schema of a cell in a 'PdfGrid'.\n */\nvar PdfGridCell = /** @class */ (function () {\n function PdfGridCell(row) {\n /**\n * `Width` of the cell.\n * @default 0\n * @private\n */\n this.cellWidth = 0;\n /**\n * `Height` of the cell.\n * @default 0\n * @private\n */\n this.cellHeight = 0;\n /**\n * `tempval`to stores current width .\n * @default 0\n * @private\n */\n this.tempval = 0;\n this.fontSpilt = false;\n /**\n * Specifies weather the `cell is drawn`.\n * @default true\n * @private\n */\n this.finsh = true;\n /**\n * The `remaining height` of row span.\n * @default 0\n * @private\n */\n this.rowSpanRemainingHeight = 0;\n this.hasRowSpan = false;\n this.hasColSpan = false;\n /**\n * the 'isFinish' is set to page finish\n */\n this.isFinish = true;\n /**\n * The `present' to store the current cell.\n * @default false\n * @private\n */\n this.present = false;\n if (typeof row === 'undefined') {\n this.gridRowSpan = 1;\n this.colSpan = 1;\n }\n else {\n this.constructor();\n this.gridRow = row;\n }\n }\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeContinue\", {\n //Properties\n get: function () {\n return this.internalIsCellMergeContinue;\n },\n set: function (value) {\n this.internalIsCellMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeContinue\", {\n get: function () {\n return this.internalIsRowMergeContinue;\n },\n set: function (value) {\n this.internalIsRowMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeStart\", {\n get: function () {\n return this.internalIsCellMergeStart;\n },\n set: function (value) {\n this.internalIsCellMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeStart\", {\n get: function () {\n return this.internalIsRowMergeStart;\n },\n set: function (value) {\n this.internalIsRowMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"remainingString\", {\n /**\n * Gets or sets the `remaining string` after the row split between pages.\n * @private\n */\n get: function () {\n return this.remaining;\n },\n set: function (value) {\n this.remaining = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"FinishedDrawingCell\", {\n /**\n * Gets or sets the `FinishedDrawingCell` .\n * @private\n */\n get: function () {\n return this.isFinish;\n },\n set: function (value) {\n this.isFinish = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `string format`.\n * @private\n */\n get: function () {\n if (this.format == null) {\n this.format = new PdfStringFormat();\n }\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"row\", {\n /**\n * Gets or sets the parent `row`.\n * @private\n */\n get: function () {\n return this.gridRow;\n },\n set: function (value) {\n this.gridRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the cell.\n * @private\n */\n get: function () {\n return this.objectValue;\n },\n set: function (value) {\n this.objectValue = value;\n if (this.objectValue instanceof PdfGrid) {\n this.row.grid.isSingleGrid = false;\n var grid = this.objectValue;\n grid.ParentCell = this;\n this.objectValue.isChildGrid = true;\n var rowCount = this.row.grid.rows.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.row.grid.rows.getRow(i);\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n cell.parent = this;\n }\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"rowSpan\", {\n /**\n * Gets or sets a value that indicates the total number of rows that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.gridRowSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw new Error('ArgumentException : Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.gridRowSpan = value;\n this.row.rowSpanExists = true;\n this.row.grid.hasRowSpanSpan = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"style\", {\n /**\n * Gets or sets the cell `style`.\n * @private\n */\n get: function () {\n if (this.cellStyle == null) {\n this.cellStyle = new PdfGridCellStyle();\n }\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"height\", {\n /**\n * Gets the `height` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellHeight === 0) {\n this.cellHeight = this.measureHeight();\n }\n return this.cellHeight;\n },\n set: function (value) {\n this.cellHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"columnSpan\", {\n /**\n * Gets or sets a value that indicates the total number of columns that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.colSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw Error('Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.colSpan = value;\n this.row.columnSpanExists = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"width\", {\n /**\n * Gets the `width` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellWidth === 0 || this.row.grid.isComplete) {\n this.cellWidth = this.measureWidth();\n }\n return Math.round(this.cellWidth);\n },\n set: function (value) {\n this.cellWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the width`.\n * @private\n */\n PdfGridCell.prototype.measureWidth = function () {\n // .. Calculate the cell text width.\n // .....Add border widths, cell spacings and paddings to the width.\n var width = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string') {\n /* tslint:disable */\n var slr = layouter.layout(this.objectValue, this.getTextFont(), this.stringFormat, new SizeF(Number.MAX_VALUE, Number.MAX_VALUE), false, new SizeF(0, 0));\n width += slr.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n else if (this.objectValue instanceof PdfGrid) {\n width = this.objectValue.size.width;\n //width += this.objectValue.style.cellSpacing;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n width += this.objectValue.width;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n var result = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(0, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n width += result.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n if (this.style.cellPadding != null) {\n width += (this.style.cellPadding.left + this.style.cellPadding.right);\n }\n else {\n width += (this.row.grid.style.cellPadding.left + this.row.grid.style.cellPadding.right);\n }\n width += this.row.grid.style.cellSpacing;\n return width;\n };\n /**\n * Draw the `cell background`.\n * @private\n */\n PdfGridCell.prototype.drawCellBackground = function (graphics, bounds) {\n var backgroundBrush = this.getBackgroundBrush();\n //graphics.isTemplateGraphics = true;\n if (backgroundBrush != null) {\n graphics.save();\n graphics.drawRectangle(backgroundBrush, bounds.x, bounds.y, bounds.width, bounds.height);\n graphics.restore();\n }\n if (this.style.backgroundImage != null) {\n var image = this.getBackgroundImage();\n graphics.drawImage(this.style.backgroundImage, bounds.x, bounds.y, bounds.width, bounds.height);\n }\n };\n /**\n * `Adjusts the text layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustContentLayoutArea = function (bounds) {\n //Add Padding value to its Cell Bounds\n var returnBounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n if (typeof this.style.cellPadding === 'undefined' || this.style.cellPadding == null) {\n returnBounds.x += this.gridRow.grid.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.y += this.gridRow.grid.style.cellPadding.top + this.cellStyle.borders.top.width;\n // if(this.gridRow.grid.style.cellSpacing == 0){\n returnBounds.width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n //}\n // else {\n // returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n // } \n returnBounds.height -= (this.gridRow.grid.style.cellPadding.bottom + this.gridRow.grid.style.cellPadding.top);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n // if (this.rowSpan === 1) {\n // //returnBounds.width -= (this.style.borders.left.width);\n // }\n }\n else {\n returnBounds.x += this.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.y += this.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n returnBounds.height -= (this.style.cellPadding.bottom + this.style.cellPadding.top);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n if (this.rowSpan === 1) {\n returnBounds.width -= (this.style.borders.left.width);\n }\n }\n return returnBounds;\n };\n /**\n * `Draws` the specified graphics.\n * @private\n */\n PdfGridCell.prototype.draw = function (graphics, bounds, cancelSubsequentSpans) {\n var isrowbreak = false;\n /*if (!this.row.grid.isSingleGrid)\n {\n //Check whether the Grid Span to Nextpage\n if ((this.remainingString != null) || (PdfGridLayouter.repeatRowIndex != -1))\n {\n this.DrawParentCells(graphics, bounds, true);\n }\n else if (this.row.grid.rows.count > 1)\n {\n for (let i : number = 0; i < this.row.grid.rows.count; i++)\n {\n if (this.row == this.row.grid.rows.getRow(i))\n {\n if (this.row.grid.rows.getRow(i).rowBreakHeight > 0)\n isrowbreak = true;\n if ((i > 0) && (isrowbreak))\n this.DrawParentCells(graphics, bounds, false);\n }\n }\n }\n } */\n var result = null;\n /*if (cancelSubsequentSpans)\n {\n //..Cancel all subsequent cell spans, if no space exists.\n let currentCellIndex : number = this.row.cells.indexOf(this);\n for (let i : number = currentCellIndex + 1; i <= currentCellIndex + this.colSpan; i++)\n {\n this.row.cells.getCell(i).isCellMergeContinue = false;\n this.row.cells.getCell(i).isRowMergeContinue = false;\n }\n this.colSpan = 1;\n }*/\n //..Skip cells which were already covered by spanmap.\n if (this.internalIsCellMergeContinue || this.internalIsRowMergeContinue) {\n if (this.internalIsCellMergeContinue && this.row.grid.style.allowHorizontalOverflow) {\n if ((this.row.rowOverflowIndex > 0 && (this.row.cells.indexOf(this) != this.row.rowOverflowIndex + 1)) || (this.row.rowOverflowIndex == 0 && this.internalIsCellMergeContinue)) {\n return result;\n }\n }\n else {\n return result;\n }\n }\n //Adjust bounds with Row and Column Spacing\n bounds = this.adjustOuterLayoutArea(bounds, graphics);\n this.drawCellBackground(graphics, bounds);\n var textPen = this.getTextPen();\n var textBrush = this.getTextBrush();\n if (typeof textPen === 'undefined' && typeof textBrush === 'undefined') {\n textBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var font = this.getTextFont();\n var strFormat = this.getStringFormat();\n var innerLayoutArea = bounds;\n if (innerLayoutArea.height >= graphics.clientSize.height) {\n // If to break row to next page.\n if (this.row.grid.allowRowBreakAcrossPages) {\n innerLayoutArea.height -= innerLayoutArea.y;\n //bounds.height -= bounds.y;\n // if(this.row.grid.isChildGrid)\n // {\n // innerLayoutArea.height -= this.row.grid.ParentCell.row.grid.style.cellPadding.bottom;\n // }\n }\n // if user choose to cut the row whose height is more than page height.\n // else\n // {\n // innerLayoutArea.height = graphics.clientSize.height;\n // bounds.height = graphics.clientSize.height;\n // }\n }\n innerLayoutArea = this.adjustContentLayoutArea(innerLayoutArea);\n if (typeof this.objectValue === 'string' || typeof this.remaining === 'string') {\n var temp = void 0;\n var layoutRectangle = void 0;\n if (innerLayoutArea.height < font.height)\n layoutRectangle = new RectangleF(innerLayoutArea.x, innerLayoutArea.y, innerLayoutArea.width, font.height);\n else\n layoutRectangle = innerLayoutArea;\n if (innerLayoutArea.height < font.height && this.row.grid.isChildGrid && this.row.grid.ParentCell != null) {\n var height = layoutRectangle.height - this.row.grid.ParentCell.row.grid.style.cellPadding.bottom - this.row.grid.style.cellPadding.bottom;\n if (this.row.grid.splitChildRowIndex != -1) {\n this.fontSpilt = true;\n this.row.rowFontSplit = true;\n }\n if (height > 0 && height < font.height)\n layoutRectangle.height = height;\n // else if (height + this.row.grid.style.cellPadding.bottom > 0 && height + this.row.grid.style.cellPadding.bottom < font.height)\n // layoutRectangle.height = height + this.row.grid.style.cellPadding.bottom;\n // else if (bounds.height < font.height)\n // layoutRectangle.height = bounds.height;\n // else if (bounds.height - this.row.grid.ParentCell.row.grid.style.cellPadding.bottom < font.height)\n // layoutRectangle.height = bounds.height - this.row.grid.ParentCell.row.grid.style.cellPadding.bottom; \n }\n if (this.gridRow.grid.style.cellSpacing != 0) {\n layoutRectangle.width -= this.gridRow.grid.style.cellSpacing;\n bounds.width -= this.gridRow.grid.style.cellSpacing;\n }\n if (this.isFinish) {\n // if (this.row.grid.splitChildRowIndex != -1 && !this.row.grid.isChildGrid && typeof this.remaining === 'undefined'){\n // this.remaining = '';\n // graphics.drawString(this.remaining, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n // } else {\n temp = this.remaining === '' ? this.remaining : this.objectValue;\n graphics.drawString(temp, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n if (this.row.grid.splitChildRowIndex != -1 && !this.row.grid.isChildGrid && typeof this.remaining === 'undefined') {\n this.remaining = '';\n //graphics.drawString(this.remaining, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n }\n }\n else {\n if (typeof this.remaining == 'undefined' || this.remaining === null) {\n this.remaining = '';\n }\n if (this.row.repeatFlag) {\n graphics.drawString(this.remaining, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n }\n // else {\n // if(this.row.grid.ParentCell.row.repeatFlag) {\n // graphics.drawString((this.remaining as string), font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat); \n // } else {\n // layoutRectangle.height = this.row.height;\n // graphics.drawString((this.objectValue as string), font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n // bounds.height = this.row.height;\n // }\n // }\n this.isFinish = true;\n //graphics.drawString((this.remaining as string), font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n }\n result = graphics.stringLayoutResult;\n // if(this.row.grid.isChildGrid && this.row.rowBreakHeight > 0 && result !=null) {\n // bounds.height -= this.row.grid.ParentCell.row.grid.style.cellPadding.bottom;\n // }\n }\n else if (this.objectValue instanceof PdfGrid) {\n var childGrid = this.objectValue;\n childGrid.isChildGrid = true;\n childGrid.ParentCell = this;\n var layoutRect = void 0;\n layoutRect = innerLayoutArea;\n if (this.gridRow.grid.style.cellSpacing != 0) {\n bounds.width -= this.gridRow.grid.style.cellSpacing;\n }\n if (this.gridRow.grid.style.cellSpacing != 0 || this.objectValue.style.cellSpacing != 0) {\n layoutRect.x -= this.gridRow.grid.style.cellPadding.left + this.cellStyle.borders.left.width;\n layoutRect.y -= this.gridRow.grid.style.cellPadding.top + this.cellStyle.borders.top.width;\n }\n if ((this.objectValue.style.cellPadding != null) && (this.gridRow.grid.style.cellPadding.bottom === 0.5) &&\n (this.gridRow.grid.style.cellPadding.top === 0.5) && (this.row.grid.style.cellPadding.left === 5.76)\n && (this.gridRow.grid.style.cellPadding.right === 5.76)\n && (this.gridRow.grid.style.cellSpacing === 0) && (childGrid.style.cellSpacing === 0)) {\n layoutRect = bounds;\n }\n if ((this.gridRow.grid.style.cellPadding.right != 5.76 || this.gridRow.grid.style.cellPadding.left != 5.76 ||\n this.gridRow.grid.style.cellPadding.bottom != 0.5 || this.gridRow.grid.style.cellPadding.top != 0.5)\n && (childGrid.style.cellPadding.bottom === 0.5) && (childGrid.style.cellPadding.top === 0.5)\n && (childGrid.style.cellPadding.left === 5.76) && (childGrid.style.cellPadding.right === 5.76)\n && (this.gridRow.grid.style.cellSpacing === 0) && (childGrid.style.cellSpacing != 0)) {\n layoutRect.x += this.gridRow.grid.style.cellPadding.left + this.cellStyle.borders.left.width;\n layoutRect.y += this.gridRow.grid.style.cellPadding.top + this.cellStyle.borders.top.width;\n }\n // layoutRect = bounds;\n // if (this.style.cellPadding != null){\n // layoutRect = bounds; \n // } else if((this.row.grid.style.cellPadding != null) && (childGrid.style.cellPadding.bottom === 0.5) && (childGrid.style.cellPadding.top === 0.5)\n // && (childGrid.style.cellPadding.left === 5.76) && (childGrid.style.cellPadding.right === 5.76)\n // && (this.gridRow.grid.style.cellSpacing === 0) && (childGrid.style.cellSpacing === 0)) {\n // layoutRect = innerLayoutArea;\n // }\n // if(this.objectValue.style.cellPadding != null && typeof this.objectValue.style.cellPadding != 'undefined'){\n // layoutRect = bounds;\n // } \n var layouter = new PdfGridLayouter(childGrid);\n var format = new PdfGridLayoutFormat();\n if (this.row.grid.LayoutFormat != null)\n format = this.row.grid.LayoutFormat;\n else\n format.layout = PdfLayoutType.Paginate;\n var param = new PdfLayoutParams();\n if (graphics.layer != null) {\n // Define layout parameters.\n param.page = graphics.page;\n param.bounds = layoutRect;\n param.format = format;\n //Set the span \n childGrid.setSpan();\n childGrid.checkSpan();\n // Draw the child grid.\n var childGridResult = layouter.Layouter(param);\n //let childGridResult : PdfLayoutResult = layouter.innerLayout(param);\n this.value = childGrid;\n if (this.row.grid.splitChildRowIndex !== -1) {\n this.height = this.row.rowBreakHeightValue;\n }\n if (param.page != childGridResult.page) //&& (isWidthGreaterthanParent != true))\n {\n childGridResult.bounds.height = this.row.rowBreakHeightValue;\n if (this.row.rowBreakHeight == 0)\n this.row.NestedGridLayoutResult = childGridResult;\n else\n this.row.rowBreakHeight = this.row.rowBreakHeightValue;\n //bounds.height = this.row.rowBreakHeight;\n //After drawing paginated nested grid, the bounds of the parent grid in start page should be corrected for borders.\n //bounds.height = graphics.clientSize.height - bounds.y;\n }\n }\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n var imageBounds = void 0;\n if (this.objectValue.width <= innerLayoutArea.width) {\n imageBounds = new RectangleF(innerLayoutArea.x, innerLayoutArea.y, this.objectValue.width, innerLayoutArea.height);\n }\n else {\n imageBounds = innerLayoutArea;\n }\n graphics.drawImage(this.objectValue, imageBounds.x, imageBounds.y, imageBounds.width, imageBounds.height);\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n this.objectValue.draw(graphics.currentPage, innerLayoutArea);\n }\n else if (typeof this.objectValue === 'undefined') {\n this.objectValue = \"\";\n graphics.drawString(this.objectValue, font, textPen, textBrush, innerLayoutArea.x, innerLayoutArea.y, innerLayoutArea.width, innerLayoutArea.height, strFormat);\n if (this.style.cellPadding != null && this.style.cellPadding.bottom == 0 && this.style.cellPadding.left == 0 && this.style.cellPadding.right == 0 && this.style.cellPadding.top == 0) {\n bounds.width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n if (this.gridRow.grid.style.cellSpacing != 0) {\n bounds.width -= this.gridRow.grid.style.cellSpacing;\n }\n }\n if (this.style.borders != null) {\n if (!this.fontSpilt)\n this.drawCellBorders(graphics, bounds);\n else {\n if (this.row.grid.ParentCell.row.grid.splitChildRowIndex != -1) {\n this.row.rowFontSplit = false;\n this.drawCellBorders(graphics, bounds);\n }\n }\n }\n return result;\n };\n /* tslint:enable */\n /**\n * Draws the `cell border` constructed by drawing lines.\n * @private\n */\n PdfGridCell.prototype.drawCellBorders = function (graphics, bounds) {\n if (this.row.grid.style.borderOverlapStyle === PdfBorderOverlapStyle.Inside) {\n bounds.x += this.style.borders.left.width;\n bounds.y += this.style.borders.top.width;\n bounds.width -= this.style.borders.right.width;\n bounds.height -= this.style.borders.bottom.width;\n }\n var p1 = new PointF(bounds.x, bounds.y + bounds.height);\n var p2 = new PointF(bounds.x, bounds.y);\n var pen = this.cellStyle.borders.left;\n if (this.cellStyle.borders.left.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n // SetTransparency(ref graphics, pen);\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n pen = this.cellStyle.borders.right;\n if ((bounds.x + bounds.width) > (graphics.clientSize.width - (pen.width / 2))) {\n p1 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y);\n p2 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y + bounds.height);\n }\n if (this.cellStyle.borders.right.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y);\n pen = this.cellStyle.borders.top;\n if (this.cellStyle.borders.top.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n p2 = new PointF(bounds.x, bounds.y + bounds.height);\n pen = this.cellStyle.borders.bottom;\n // if ((bounds.y + bounds.height) > (graphics.clientSize.height - (pen.width / 2))) {\n // p1 = new PointF((bounds.x + bounds.width), (graphics.clientSize.height - (pen.width / 2)));\n // p2 = new PointF(bounds.x, (graphics.clientSize.height - (pen.width / 2)));\n // }\n if (this.cellStyle.borders.bottom.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n };\n // private setTransparency(graphics : PdfGraphics, pen : PdfPen) : void {\n // let alpha : number = (pen.color.a / 255)as number;\n // graphics.save();\n // graphics.setTransparency(alpha);\n // }\n /**\n * `Adjusts the outer layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustOuterLayoutArea = function (bounds, g) {\n var isHeader = false;\n var cellSpacing = this.row.grid.style.cellSpacing;\n if (cellSpacing > 0) {\n bounds = new RectangleF(bounds.x + cellSpacing, bounds.y + cellSpacing, bounds.width - cellSpacing, bounds.height - cellSpacing);\n }\n var currentColIndex = this.row.cells.indexOf(this);\n if (this.columnSpan > 1 || (this.row.rowOverflowIndex > 0 && (currentColIndex == this.row.rowOverflowIndex + 1) && this.isCellMergeContinue)) {\n var span = this.columnSpan;\n if (span == 1 && this.isCellMergeContinue) {\n for (var j = currentColIndex + 1; j < this.row.grid.columns.count; j++) {\n if (this.row.cells.getCell(j).isCellMergeContinue)\n span++;\n else\n break;\n }\n }\n var totalWidth = 0;\n for (var i = currentColIndex; i < currentColIndex + span; i++) {\n if (this.row.grid.style.allowHorizontalOverflow) {\n var width = void 0;\n var compWidth = this.row.grid.size.width < g.clientSize.width ? this.row.grid.size.width : g.clientSize.width;\n if (this.row.grid.size.width > g.clientSize.width) {\n width = bounds.x + totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n else {\n width = totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n if (width > compWidth) {\n break;\n }\n }\n totalWidth += this.row.grid.columns.getColumn(i).width;\n }\n totalWidth -= this.row.grid.style.cellSpacing;\n bounds.width = totalWidth;\n }\n if (this.rowSpan > 1 || this.row.rowSpanExists) {\n var span = this.rowSpan;\n var currentRowIndex = this.row.grid.rows.rowCollection.indexOf(this.row);\n if (currentRowIndex == -1) {\n currentRowIndex = this.row.grid.headers.indexOf(this.row);\n if (currentRowIndex != -1) {\n isHeader = true;\n }\n }\n // if (span == 1 && this.isCellMergeContinue) {\n // for (let j : number = currentRowIndex + 1; j < this.row.grid.rows.count; j++)\n // {\n // let flag : boolean = (isHeader ? this.row.grid.headers.getHeader(j).cells.getCell(currentColIndex).isCellMergeContinue : this.row.grid.rows.getRow(j).cells.getCell(currentColIndex).isCellMergeContinue);\n // if (flag)\n // span++;\n // else\n // break;\n // }\n // }\n var totalHeight = 0;\n var max = 0;\n for (var i = currentRowIndex; i < currentRowIndex + span; i++) {\n totalHeight += (isHeader ? this.row.grid.headers.getHeader(i).height : this.row.grid.rows.getRow(i).height);\n var row = this.row.grid.rows.getRow(i);\n var rowIndex = this.row.grid.rows.rowCollection.indexOf(row);\n /*if (this.rowSpan > 1)\n {\n for (let k : number = 0; k < this.row.cells.count; k++) {\n let cell : PdfGridCell = this.row.cells.getCell(k);\n if(cell.rowSpan>1)\n {\n let tempHeight : number =0;\n \n for (let j :number = i; j < i +cell.rowSpan; j++)\n {\n if (!this.row.grid.rows.getRow(j).isRowSpanRowHeightSet)\n this.row.grid.rows.getRow(j).isRowHeightSet = false;\n tempHeight += this.row.grid.rows.getRow(j).height;\n if (!this.row.grid.rows.getRow(j).isRowSpanRowHeightSet)\n this.row.grid.rows.getRow(j).isRowHeightSet = true;\n }\n //To check the Row spanned cell height is greater than the total spanned row height.\n if(cell.height>tempHeight)\n {\n if (max < (cell.height - tempHeight))\n {\n max = cell.height - tempHeight;\n if (this.rowSpanRemainingHeight != 0 && max > this.rowSpanRemainingHeight)\n {\n max += this.rowSpanRemainingHeight;\n }\n let index :number = row.cells.indexOf(cell);\n //set the m_rowspanRemainingHeight to last rowspanned row.\n this.row.grid.rows.getRow((rowIndex +cell.rowSpan) - 1).cells.getCell(index).rowSpanRemainingHeight = max;\n this.rowSpanRemainingHeight = this.row.grid.rows.getRow((rowIndex + cell.rowSpan) - 1).cells.getCell(index).rowSpanRemainingHeight;\n }\n }\n }\n }\n }\n if (!this.row.grid.rows.getRow(i).isRowSpanRowHeightSet)\n this.row.grid.rows.getRow(i).isRowHeightSet = true;*/\n }\n var cellIndex = this.row.cells.indexOf(this);\n totalHeight -= this.row.grid.style.cellSpacing;\n // if (this.row.cells.getCell(cellIndex).height > totalHeight && (!this.row.grid.rows.getRow((currentRowIndex + span) - 1).isRowHeightSet)) {\n // this.row.grid.rows.getRow((currentRowIndex + span) - 1).cells.getCell(cellIndex).rowSpanRemainingHeight = this.row.cells.getCell(cellIndex).height - totalHeight;\n // totalHeight = this.row.cells.getCell(cellIndex).height;\n // bounds.height = totalHeight;\n // } else {\n bounds.height = totalHeight;\n // }\n if (!this.row.rowMergeComplete) {\n bounds.height = totalHeight;\n }\n }\n return bounds;\n };\n /* tslint:enable */\n /**\n * Gets the `text font`.\n * @private\n */\n PdfGridCell.prototype.getTextFont = function () {\n if (typeof this.style.font !== 'undefined' && this.style.font != null) {\n return this.style.font;\n }\n else if (typeof this.row.style.font !== 'undefined' && this.row.style.font != null) {\n return this.row.style.font;\n }\n else if (typeof this.row.grid.style.font !== 'undefined' && this.row.grid.style.font != null) {\n return this.row.grid.style.font;\n }\n else {\n return PdfDocument.defaultFont;\n }\n };\n /**\n * Gets the `text brush`.\n * @private\n */\n PdfGridCell.prototype.getTextBrush = function () {\n if (typeof this.style.textBrush !== 'undefined' && this.style.textBrush != null) {\n return this.style.textBrush;\n }\n else if (typeof this.row.style.textBrush !== 'undefined' && this.row.style.textBrush != null) {\n return this.row.style.textBrush;\n }\n else {\n return this.row.grid.style.textBrush;\n }\n };\n /**\n * Gets the `text pen`.\n * @private\n */\n PdfGridCell.prototype.getTextPen = function () {\n if (typeof this.style.textPen !== 'undefined' && this.style.textPen != null) {\n return this.style.textPen;\n }\n else if (typeof this.row.style.textPen !== 'undefined' && this.row.style.textPen != null) {\n return this.row.style.textPen;\n }\n else {\n return this.row.grid.style.textPen;\n }\n };\n /**\n * Gets the `background brush`.\n * @private\n */\n PdfGridCell.prototype.getBackgroundBrush = function () {\n if (typeof this.style.backgroundBrush !== 'undefined' && this.style.backgroundBrush != null) {\n return this.style.backgroundBrush;\n }\n else if (typeof this.row.style.backgroundBrush !== 'undefined' && this.row.style.backgroundBrush != null) {\n return this.row.style.backgroundBrush;\n }\n else {\n return this.row.grid.style.backgroundBrush;\n }\n };\n /**\n * Gets the `background image`.\n * @private\n */\n PdfGridCell.prototype.getBackgroundImage = function () {\n if (typeof this.style.backgroundImage !== 'undefined' && this.style.backgroundImage != null) {\n return this.style.backgroundImage;\n }\n else if (typeof this.row.style.backgroundImage !== 'undefined' && this.row.style.backgroundImage != null) {\n return this.row.style.backgroundImage;\n }\n else {\n return this.row.grid.style.backgroundImage;\n }\n };\n /**\n * Gets the current `StringFormat`.\n * @private\n */\n PdfGridCell.prototype.getStringFormat = function () {\n if (typeof this.style.stringFormat !== 'undefined' && this.style.stringFormat != null) {\n return this.style.stringFormat;\n }\n else {\n return this.stringFormat;\n }\n };\n /**\n * Calculates the `height`.\n * @private\n */\n PdfGridCell.prototype.measureHeight = function () {\n // .. Calculate the cell text height.\n // .....Add border widths, cell spacings and paddings to the height.\n var width = this.calculateWidth();\n // //check whether the Current PdfGridCell has padding\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n //width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n else {\n width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n var height = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string' || typeof this.remaining === 'string') {\n var currentValue = this.objectValue;\n /* tslint:disable */\n if (!this.isFinish)\n currentValue = !(this.remaining === null || this.remaining === '' ||\n typeof this.remaining === 'undefined') ? this.remaining : this.objectValue;\n var slr = null;\n var cellIndex = this.row.cells.indexOf(this);\n if (this.gridRow.grid.style.cellSpacing != 0) {\n width -= this.gridRow.grid.style.cellSpacing * 2;\n }\n if (!this.row.cells.getCell(cellIndex).hasColSpan && !this.row.cells.getCell(cellIndex).hasRowSpan) {\n if (this.gridRow.grid.isChildGrid) {\n if (width < 0) {\n this.tempval = width;\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n this.tempval += (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n }\n else {\n this.tempval += (this.style.cellPadding.right + this.style.cellPadding.left);\n this.tempval += (this.style.borders.left.width + this.style.borders.right.width);\n }\n }\n else {\n this.tempval = width;\n }\n slr = layouter.layout(currentValue, this.getTextFont(), this.stringFormat, new SizeF(this.tempval, 0), false, new SizeF(0, 0));\n height += slr.actualSize.height;\n }\n else {\n slr = layouter.layout(currentValue, this.getTextFont(), this.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n height += slr.actualSize.height;\n }\n }\n /* tslint:enable */\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n else if (this.objectValue instanceof PdfGrid) {\n var cellIndex = this.row.cells.indexOf(this);\n this.objectValue.tempWidth = this.calculateWidth();\n if (!this.row.cells.getCell(cellIndex).hasColSpan && !this.row.cells.getCell(cellIndex).hasRowSpan) {\n height = this.objectValue.size.height;\n }\n else {\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n if (this.gridRow.grid.style.cellSpacing !== 0) {\n width -= this.gridRow.grid.style.cellSpacing * 2;\n //height += (this.row.grid.style.cellPadding.top + this.row.grid.style.cellPadding.bottom);\n }\n if (this.gridRow.grid.style.cellPadding.right === 5.76 && this.gridRow.grid.style.cellPadding.left === 5.76 &&\n this.gridRow.grid.style.cellPadding.top === 0.5 && this.gridRow.grid.style.cellPadding.top === 0.5) {\n height -= (this.row.grid.style.cellPadding.top + this.row.grid.style.cellPadding.bottom);\n }\n height += this.objectValue.style.cellSpacing;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n height += this.objectValue.height;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n /* tslint:disable */\n var slr = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n height += slr.actualSize.height;\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n else if (typeof this.objectValue === 'undefined') {\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n }\n else {\n width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n //Add padding top and bottom value to height\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n height += (this.row.grid.style.cellPadding.top + this.row.grid.style.cellPadding.bottom);\n }\n else {\n height += (this.style.cellPadding.top + this.style.cellPadding.bottom);\n }\n height += this.row.grid.style.cellSpacing;\n return height;\n };\n /**\n * return the calculated `width` of the cell.\n * @private\n */\n PdfGridCell.prototype.calculateWidth = function () {\n var cellIndex = this.row.cells.indexOf(this);\n var rowindex = this.row.grid.rows.rowCollection.indexOf(this.row);\n var columnSpan = this.columnSpan;\n var width = 0;\n if (columnSpan === 1) {\n for (var i = 0; i < columnSpan; i++) {\n width += this.row.grid.columns.getColumn(cellIndex + i).width;\n }\n }\n else if (columnSpan > 1) {\n for (var i = 0; i < columnSpan; i++) {\n width += this.row.grid.columns.getColumn(cellIndex + i).width;\n if ((i + 1) < columnSpan) {\n this.row.cells.getCell(cellIndex + i + 1).hasColSpan = true;\n }\n }\n }\n if (this.parent != null && this.parent.row.width > 0) {\n if ((this.row.grid.isChildGrid) && this.parent != null && (this.row.width > this.parent.row.width)) {\n width = 0;\n for (var j = 0; j < this.parent.columnSpan; j++) {\n width += this.parent.row.grid.columns.getColumn(j).width;\n }\n width = width / this.row.cells.count;\n }\n }\n return width;\n };\n return PdfGridCell;\n}());\nexport { PdfGridCell };\n/**\n * `PdfGridCellCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridCell' objects.\n * @private\n */\nvar PdfGridCellCollection = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridCellCollection` class with the row.\n * @private\n */\n function PdfGridCellCollection(row) {\n /**\n * @hidden\n * @private\n */\n this.cells = [];\n this.gridRow = row;\n }\n //Properties\n /**\n * Gets the current `cell`.\n * @private\n */\n PdfGridCellCollection.prototype.getCell = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException');\n }\n return this.cells[index];\n };\n Object.defineProperty(PdfGridCellCollection.prototype, \"count\", {\n /**\n * Gets the cells `count`.[Read-Only].\n * @private\n */\n get: function () {\n return this.cells.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridCellCollection.prototype.add = function (cell) {\n if (typeof cell === 'undefined') {\n var tempcell = new PdfGridCell();\n this.add(tempcell);\n return cell;\n }\n else {\n cell.row = this.gridRow;\n this.cells.push(cell);\n }\n };\n /**\n * Returns the `index of` a particular cell in the collection.\n * @private\n */\n PdfGridCellCollection.prototype.indexOf = function (cell) {\n return this.cells.indexOf(cell);\n };\n return PdfGridCellCollection;\n}());\nexport { PdfGridCellCollection };\n","import { PdfGridCell } from './pdf-grid-cell';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\n/**\n * `PdfGridColumn` class represents the schema of a column in a 'PdfGrid'.\n */\nvar PdfGridColumn = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumn` class with the parent grid.\n * @private\n */\n function PdfGridColumn(grid) {\n /**\n * The `width` of the column.\n * @default 0\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n }\n Object.defineProperty(PdfGridColumn.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the 'PdfGridColumn'.\n * @private\n */\n get: function () {\n return this.columnWidth;\n },\n set: function (value) {\n this.isCustomWidth = true;\n this.columnWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumn.prototype, \"format\", {\n /**\n * Gets or sets the information about the text `formatting`.\n * @private\n */\n get: function () {\n if (this.stringFormat == null) {\n this.stringFormat = new PdfStringFormat(); //GetDefaultFormat();\n }\n return this.stringFormat;\n },\n set: function (value) {\n this.stringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridColumn;\n}());\nexport { PdfGridColumn };\n/**\n * `PdfGridColumnCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridColumn' objects.\n * @private\n */\nvar PdfGridColumnCollection = /** @class */ (function () {\n //properties\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumnCollection` class with the parent grid.\n * @private\n */\n function PdfGridColumnCollection(grid) {\n /**\n * @hidden\n * @private\n */\n this.internalColumns = [];\n /**\n * @hidden\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n this.internalColumns = [];\n }\n //Iplementation\n /**\n * `Add` a new column to the 'PdfGrid'.\n * @private\n */\n PdfGridColumnCollection.prototype.add = function (count) {\n // public add(column : PdfGridColumn) : void\n // public add(arg : number|PdfGridColumn) : void {\n // if (typeof arg === 'number') {\n for (var i = 0; i < count; i++) {\n this.internalColumns.push(new PdfGridColumn(this.grid));\n for (var index = 0; index < this.grid.rows.count; index++) {\n var row = this.grid.rows.getRow(index);\n var cell = new PdfGridCell();\n cell.value = '';\n row.cells.add(cell);\n }\n }\n // } else {\n // let column : PdfGridColumn = new PdfGridColumn(this.grid);\n // this.columns.push(column);\n // return column;\n // }\n };\n Object.defineProperty(PdfGridColumnCollection.prototype, \"count\", {\n /**\n * Gets the `number of columns` in the 'PdfGrid'.[Read-Only].\n * @private\n */\n get: function () {\n return this.internalColumns.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"width\", {\n /**\n * Gets the `widths`.\n * @private\n */\n get: function () {\n if (this.columnWidth === 0) {\n this.columnWidth = this.measureColumnsWidth();\n }\n if (this.grid.initialWidth !== 0 && this.columnWidth !== this.grid.initialWidth && !this.grid.style.allowHorizontalOverflow) {\n this.columnWidth = this.grid.initialWidth;\n this.grid.isPageWidth = true;\n }\n return this.columnWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"columns\", {\n /**\n * Gets the `array of PdfGridColumn`.[Read-Only]\n * @private\n */\n get: function () {\n return this.internalColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `PdfGridColumn` from the specified index.[Read-Only]\n * @private\n */\n PdfGridColumnCollection.prototype.getColumn = function (index) {\n if (index >= 0 && index <= this.columns.length) {\n return this.columns[index];\n }\n else {\n throw Error('can not get the column from the index: ' + index);\n }\n };\n //Implementation\n /**\n * `Calculates the column widths`.\n * @private\n */\n PdfGridColumnCollection.prototype.measureColumnsWidth = function () {\n var totalWidth = 0;\n this.grid.measureColumnsWidth();\n for (var i = 0, count = this.internalColumns.length; i < count; i++) {\n totalWidth += this.internalColumns[i].width;\n }\n return totalWidth;\n };\n /**\n * Gets the `widths of the columns`.\n * @private\n */\n PdfGridColumnCollection.prototype.getDefaultWidths = function (totalWidth) {\n var widths = [];\n var summ = 0.0;\n var subFactor = this.count;\n for (var i = 0; i < this.count; i++) {\n if (this.grid.isPageWidth && totalWidth >= 0 && !this.internalColumns[i].isCustomWidth) {\n this.internalColumns[i].width = 0;\n }\n else {\n widths[i] = this.internalColumns[i].width;\n if (this.internalColumns[i].width > 0 && this.internalColumns[i].isCustomWidth) {\n totalWidth -= this.internalColumns[i].width;\n subFactor--;\n }\n else {\n widths[i] = 0;\n }\n }\n }\n for (var i = 0; i < this.count; i++) {\n var width = totalWidth / subFactor;\n if (widths[i] <= 0) {\n widths[i] = width;\n }\n }\n return widths;\n };\n return PdfGridColumnCollection;\n}());\nexport { PdfGridColumnCollection };\n","import { PdfGridCell, PdfGridCellCollection } from './pdf-grid-cell';\nimport { PdfGridRowStyle } from './styles/style';\n/**\n * `PdfGridRow` class provides customization of the settings for the particular row.\n */\nvar PdfGridRow = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridRow` class with the parent grid.\n * @private\n */\n function PdfGridRow(grid) {\n /**\n * Stores the index of the overflowing row.\n * @private\n */\n this.gridRowOverflowIndex = 0;\n /**\n * The `height` of the row.\n * @private\n */\n this.rowHeight = 0;\n /**\n * The `width` of the row.\n * @private\n */\n this.rowWidth = 0;\n /**\n * The `isFinish` of the row.\n * @private\n */\n this.isrowFinish = false;\n /**\n * Check whether the Row span row height `is set explicitly`.\n * @default false\n * @public\n */\n this.isRowSpanRowHeightSet = false;\n /**\n * The `page count` of the row.\n * @public\n */\n this.noOfPageCount = 0;\n /**\n * Check whether the row height `is set explicitly`.\n * @default false\n * @private\n */\n this.isRowHeightSet = false;\n this.isPageBreakRowSpanApplied = false;\n /**\n * Check weather the row merge `is completed` or not.\n * @default true\n * @private\n */\n this.isRowMergeComplete = true;\n this.repeatFlag = false;\n this.rowFontSplit = false;\n this.pdfGrid = grid;\n }\n Object.defineProperty(PdfGridRow.prototype, \"rowSpanExists\", {\n //Properties\n /**\n * Gets or sets a value indicating [`row span exists`].\n * @private\n */\n get: function () {\n return this.bRowSpanExists;\n },\n set: function (value) {\n this.bRowSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"cells\", {\n /**\n * Gets the `cells` from the selected row.[Read-Only].\n * @private\n */\n get: function () {\n if (this.gridCells == null) {\n this.gridCells = new PdfGridCellCollection(this);\n }\n return this.gridCells;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"grid\", {\n /**\n * Gets or sets the parent `grid`.\n * @private\n */\n get: function () {\n return this.pdfGrid;\n },\n set: function (value) {\n this.pdfGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"style\", {\n /**\n * Gets or sets the row `style`.\n * @private\n */\n get: function () {\n if (typeof this.rowStyle === 'undefined') {\n this.rowStyle = new PdfGridRowStyle();\n this.rowStyle.setParent(this);\n }\n return this.rowStyle;\n },\n set: function (value) {\n this.rowStyle = value;\n for (var i = 0; i < this.cells.count; i++) {\n this.cells.getCell(i).style.borders = value.border;\n if (typeof value.font !== 'undefined') {\n this.cells.getCell(i).style.font = value.font;\n }\n if (typeof value.backgroundBrush !== 'undefined') {\n this.cells.getCell(i).style.backgroundBrush = value.backgroundBrush;\n }\n if (typeof value.backgroundImage !== 'undefined') {\n this.cells.getCell(i).style.backgroundImage = value.backgroundImage;\n }\n if (typeof value.textBrush !== 'undefined') {\n this.cells.getCell(i).style.textBrush = value.textBrush;\n }\n if (typeof value.textPen !== 'undefined') {\n this.cells.getCell(i).style.textPen = value.textPen;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowBreakHeight\", {\n /**\n * `Height` of the row yet to be drawn after split.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBreakHeight === 'undefined') {\n this.gridRowBreakHeight = 0;\n }\n return this.gridRowBreakHeight;\n },\n set: function (value) {\n this.gridRowBreakHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowOverflowIndex\", {\n /**\n * `over flow index` of the row.\n * @private\n */\n get: function () {\n return this.gridRowOverflowIndex;\n },\n set: function (value) {\n this.gridRowOverflowIndex = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the row.\n * @private\n */\n get: function () {\n if (!this.isRowHeightSet) {\n this.rowHeight = this.measureHeight();\n }\n return this.rowHeight;\n },\n set: function (value) {\n this.rowHeight = value;\n this.isRowHeightSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the row.\n * @private\n */\n get: function () {\n if (this.rowWidth === 0 || typeof this.rowWidth === 'undefined') {\n this.rowWidth = this.measureWidth();\n }\n return this.rowWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"NestedGridLayoutResult\", {\n /**\n * Gets or sets the row `Nested grid Layout Result`.\n * @private\n */\n get: function () {\n return this.gridResult;\n },\n set: function (value) {\n this.gridResult = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"columnSpanExists\", {\n /**\n * Gets or sets a value indicating [`column span exists`].\n * @private\n */\n get: function () {\n return this.bColumnSpanExists;\n },\n set: function (value) {\n this.bColumnSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowMergeComplete\", {\n /**\n * Check whether the Row `has row span or row merge continue`.\n * @private\n */\n get: function () {\n return this.isRowMergeComplete;\n },\n set: function (value) {\n this.isRowMergeComplete = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowIndex\", {\n /**\n * Returns `index` of the row.\n * @private\n */\n get: function () {\n return this.grid.rows.rowCollection.indexOf(this);\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the height`.\n * @private\n */\n PdfGridRow.prototype.measureHeight = function () {\n var rowSpanRemainingHeight = 0;\n var rowHeight;\n var maxHeight = 0;\n if (this.cells.getCell(0).rowSpan > 1) {\n rowHeight = 0;\n }\n else {\n rowHeight = this.cells.getCell(0).height;\n }\n for (var i = 0; i < this.cells.count; i++) {\n var cell = this.cells.getCell(i);\n //get the maximum rowspan remaining height.\n if (cell.rowSpanRemainingHeight > rowSpanRemainingHeight) {\n rowSpanRemainingHeight = cell.rowSpanRemainingHeight;\n }\n //skip the cell if row spanned.\n // if (cell.isRowMergeContinue) {\n // continue;\n // }\n // if (!cell.isRowMergeContinue) {\n // this.rowMergeComplete = false;\n // }\n this.rowMergeComplete = false;\n if (cell.rowSpan > 1) {\n var cellIn = i;\n var rowin = this.grid.rows.rowCollection.indexOf(this);\n for (var j = 0; j < cell.rowSpan; j++) {\n if ((j + 1) < cell.rowSpan) {\n this.grid.rows.getRow(rowin + j + 1).cells.getCell(cellIn).hasRowSpan = true;\n }\n }\n if (maxHeight < cell.height) {\n maxHeight = cell.height;\n }\n continue;\n }\n rowHeight = Math.max(rowHeight, cell.height);\n }\n if (maxHeight > rowHeight) {\n rowHeight = maxHeight;\n }\n if (rowHeight === 0) {\n rowHeight = maxHeight;\n }\n else if (rowSpanRemainingHeight > 0) {\n rowHeight += rowSpanRemainingHeight;\n }\n return rowHeight;\n };\n PdfGridRow.prototype.measureWidth = function () {\n var rowWid = 0;\n for (var i = 0; i < this.grid.columns.count; i++) {\n var column = this.grid.columns.getColumn(i);\n rowWid += column.width;\n }\n return rowWid;\n };\n return PdfGridRow;\n}());\nexport { PdfGridRow };\n/**\n * `PdfGridRowCollection` class provides access to an ordered, strongly typed collection of 'PdfGridRow' objects.\n * @private\n */\nvar PdfGridRowCollection = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowCollection` class with the parent grid.\n * @private\n */\n function PdfGridRowCollection(grid) {\n this.rows = [];\n this.grid = grid;\n }\n Object.defineProperty(PdfGridRowCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the number of header in the `PdfGrid`.[Read-Only].\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRowCollection.prototype, \"rowCollection\", {\n //Implementation\n /**\n * Return the row collection of the `grid`.\n * @private\n */\n get: function () {\n return this.rows;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowCollection.prototype.addRow = function (arg) {\n if (typeof arg === 'undefined') {\n var temprow = new PdfGridRow(this.grid);\n this.addRow(temprow);\n return temprow;\n }\n else {\n arg.style.setBackgroundBrush(this.grid.style.backgroundBrush);\n arg.style.setFont(this.grid.style.font);\n arg.style.setTextBrush(this.grid.style.textBrush);\n arg.style.setTextPen(this.grid.style.textPen);\n if (arg.cells.count === 0) {\n for (var i = 0; i < this.grid.columns.count; i++) {\n arg.cells.add(new PdfGridCell());\n }\n }\n this.rows.push(arg);\n }\n };\n /**\n * Return the row by index.\n * @private\n */\n PdfGridRowCollection.prototype.getRow = function (index) {\n return this.rows[index];\n };\n return PdfGridRowCollection;\n}());\nexport { PdfGridRowCollection };\n/**\n * `PdfGridHeaderCollection` class provides customization of the settings for the header.\n * @private\n */\nvar PdfGridHeaderCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfGridHeaderCollection` class with the parent grid.\n * @private\n */\n function PdfGridHeaderCollection(grid) {\n /**\n * The array to store the `rows` of the grid header.\n * @private\n */\n this.rows = [];\n this.grid = grid;\n this.rows = [];\n }\n //Properties\n /**\n * Gets a 'PdfGridRow' object that represents the `header` row in a 'PdfGridHeaderCollection' control.[Read-Only].\n * @private\n */\n PdfGridHeaderCollection.prototype.getHeader = function (index) {\n // if (index < 0 || index >= Count) {\n // throw new IndexOutOfRangeException();\n // }\n return (this.rows[index]);\n };\n Object.defineProperty(PdfGridHeaderCollection.prototype, \"count\", {\n /**\n * Gets the `number of header` in the 'PdfGrid'.[Read-Only]\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridHeaderCollection.prototype.add = function (arg) {\n if (typeof arg === 'number') {\n var row = void 0;\n for (var i = 0; i < arg; i++) {\n row = new PdfGridRow(this.grid);\n for (var j = 0; j < this.grid.columns.count; j++) {\n row.cells.add(new PdfGridCell());\n }\n this.rows.push(row);\n }\n return this.rows;\n }\n else {\n this.rows.push(arg);\n }\n };\n PdfGridHeaderCollection.prototype.indexOf = function (row) {\n return this.rows.indexOf(row);\n };\n return PdfGridHeaderCollection;\n}());\nexport { PdfGridHeaderCollection };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * PdfGrid.ts class for EJ2-PDF\n */\nimport { PdfGridColumnCollection } from './pdf-grid-column';\nimport { PdfGridRowCollection, PdfGridHeaderCollection } from './pdf-grid-row';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutElement } from './../../graphics/figures/layout-element';\nimport { PdfLayoutFormat } from './../../graphics/figures/base/element-layouter';\nimport { PdfGridStyle } from './styles/style';\nimport { PdfGridLayouter } from './../../structured-elements/grid/layout/grid-layouter';\nimport { PdfTextAlignment } from '../../graphics/enum';\nvar PdfGrid = /** @class */ (function (_super) {\n __extends(PdfGrid, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGrid` class.\n * @private\n */\n function PdfGrid() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridSize = new SizeF(0, 0);\n /**\n * Check the child grid is ' split or not'\n */\n _this.isGridSplit = false;\n /**\n * @hidden\n * @private\n */\n _this.isRearranged = false;\n /**\n * @hidden\n * @private\n */\n _this.pageBounds = new RectangleF();\n /**\n * @hidden\n * @private\n */\n _this.listOfNavigatePages = [];\n /**\n * @hidden\n * @private\n */\n _this.parentCellIndex = 0;\n _this.tempWidth = 0;\n /**\n * @hidden\n * @private\n */\n _this.breakRow = true;\n _this.splitChildRowIndex = -1;\n /**\n * The event raised on `begin cell lay outing`.\n * @event\n * @private\n */\n //public beginPageLayout : Function;\n /**\n * The event raised on `end cell lay outing`.\n * @event\n * @private\n */\n //public endPageLayout : Function;\n _this.hasRowSpanSpan = false;\n _this.hasColumnSpan = false;\n _this.isSingleGrid = true;\n return _this;\n }\n Object.defineProperty(PdfGrid.prototype, \"raiseBeginCellDraw\", {\n //Properties\n /**\n * Gets a value indicating whether the `start cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginCellDraw !== 'undefined' && typeof this.beginCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseEndCellDraw\", {\n /**\n * Gets a value indicating whether the `end cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endCellDraw !== 'undefined' && typeof this.endCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"repeatHeader\", {\n /**\n * Gets or sets a value indicating whether to `repeat header`.\n * @private\n */\n get: function () {\n if (this.bRepeatHeader == null || typeof this.bRepeatHeader === 'undefined') {\n this.bRepeatHeader = false;\n }\n return this.bRepeatHeader;\n },\n set: function (value) {\n this.bRepeatHeader = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"allowRowBreakAcrossPages\", {\n /**\n * Gets or sets a value indicating whether to split or cut rows that `overflow a page`.\n * @private\n */\n get: function () {\n return this.breakRow;\n },\n set: function (value) {\n this.breakRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"columns\", {\n /**\n * Gets the `column` collection of the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridColumns == null || typeof this.gridColumns === 'undefined') {\n this.gridColumns = new PdfGridColumnCollection(this);\n }\n return this.gridColumns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"rows\", {\n /**\n * Gets the `row` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridRows == null) {\n this.gridRows = new PdfGridRowCollection(this);\n }\n return this.gridRows;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"headers\", {\n /**\n * Gets the `headers` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridHeaders == null || typeof this.gridHeaders === 'undefined') {\n this.gridHeaders = new PdfGridHeaderCollection(this);\n }\n return this.gridHeaders;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"initialWidth\", {\n /**\n * Indicating `initial width` of the page.\n * @private\n */\n get: function () {\n return this.gridInitialWidth;\n },\n set: function (value) {\n this.gridInitialWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"style\", {\n /**\n * Gets or sets the `grid style`.\n * @private\n */\n get: function () {\n if (this.gridStyle == null) {\n this.gridStyle = new PdfGridStyle();\n }\n return this.gridStyle;\n },\n set: function (value) {\n if (this.gridStyle == null) {\n this.gridStyle = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isPageWidth\", {\n /**\n * Gets a value indicating whether the grid column width is considered to be `page width`.\n * @private\n */\n get: function () {\n return this.ispageWidth;\n },\n set: function (value) {\n this.ispageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isChildGrid\", {\n /**\n * Gets or set if grid `is nested grid`.\n * @private\n */\n get: function () {\n return this.ischildGrid;\n },\n set: function (value) {\n this.ischildGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"size\", {\n /**\n * Gets or set if grid ' is split or not'\n * @public\n */\n // public get isGridSplit() : boolean {\n // return this.isgridSplit;\n // }\n // public set isGridSplit(value : boolean) {\n // this.isgridSplit = value;\n // }public get isGridSplit() : boolean {\n // return this.isgridSplit;\n // }\n // public set isGridSplit(value : boolean) {\n // this.isgridSplit = value;\n // }\n /**\n * Gets the `size`.\n * @private\n */\n get: function () {\n if ((this.gridSize.width === 0 || typeof this.gridSize.width === 'undefined') && this.gridSize.height === 0) {\n this.gridSize = this.measure();\n }\n return this.gridSize;\n // } else {\n // return this.gridSize;\n // }\n },\n set: function (value) {\n this.gridSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"ParentCell\", {\n get: function () {\n return this.parentCell;\n },\n set: function (value) {\n this.parentCell = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"LayoutFormat\", {\n get: function () {\n return this.layoutFormat;\n },\n enumerable: true,\n configurable: true\n });\n PdfGrid.prototype.draw = function (arg1, arg2, arg3, arg4) {\n if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2.x, arg2.y);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg1, arg2, arg3, null);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2, null);\n }\n else if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && arg3 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg1, arg2.x, arg2.y, arg3);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && (arg4 instanceof PdfLayoutFormat || arg4 == null)) {\n var width = (arg1.graphics.clientSize.width - arg2);\n var layoutRectangle = new RectangleF(arg2, arg3, width, 0);\n return this.drawHelper(arg1, layoutRectangle, arg4);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'boolean') {\n return this.drawHelper(arg1, arg2, null);\n }\n else {\n return this.drawHelper(arg1, arg2, arg3);\n }\n };\n /**\n * `measures` this instance.\n * @private\n */\n PdfGrid.prototype.measure = function () {\n var height = 0;\n var width = this.columns.width;\n for (var i = 0; i < this.headers.count; i++) {\n var row = this.headers.getHeader(i);\n height += row.height;\n }\n for (var i = 0; i < this.rows.count; i++) {\n var row = this.rows.getRow(i);\n height += row.height;\n }\n return new SizeF(width, height);\n };\n PdfGrid.prototype.onBeginCellDraw = function (args) {\n if (this.raiseBeginCellDraw) {\n this.beginCellDraw(this, args);\n }\n };\n PdfGrid.prototype.onEndCellDraw = function (args) {\n if (this.raiseEndCellDraw) {\n this.endCellDraw(this, args);\n }\n };\n /**\n * `Layouts` the specified graphics.\n * @private\n */\n PdfGrid.prototype.layout = function (param) {\n // if (this.rows.count !== 0) {\n // if (this.rows.getRow(0).cells.getCell(0).style.borders.left.width !== 1) {\n // let x : number = this.rows.getRow(0).cells.getCell(0).style.borders.left.width / 2;\n // let y : number = this.rows.getRow(0).cells.getCell(0).style.borders.top.width / 2;\n // if (param.bounds.x === PdfBorders.default.right.width / 2 && param.bounds.y === PdfBorders.default.right.width / 2) {\n // let newBound : RectangleF = new RectangleF(x, y, this.gridSize.width, this.gridSize.height);\n // param.bounds = newBound;\n // }\n // }\n // }\n this.setSpan();\n this.checkSpan();\n this.layoutFormat = param.format;\n this.gridLocation = param.bounds;\n var layouter = new PdfGridLayouter(this);\n var result = (layouter.Layouter(param));\n return result;\n };\n PdfGrid.prototype.setSpan = function () {\n var colSpan = 1;\n var rowSpan = 1;\n var currentCellIndex = 0;\n var currentRowIndex = 0;\n var maxSpan = 0;\n var rowCount = this.headers.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.headers.getHeader(i);\n maxSpan = 0;\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n maxSpan = Math.max(maxSpan, cell.rowSpan);\n //Skip setting span map for already coverted rows/columns.\n if (!cell.isCellMergeContinue && !cell.isRowMergeContinue && (cell.columnSpan > 1 || cell.rowSpan > 1)) {\n if (cell.columnSpan + j > row.cells.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.rowSpan + i > this.headers.count) {\n throw new Error('Invalid span specified at Header ' + j.toString() + ' column ' + i.toString());\n }\n // if (this.rows.count !== 0 && cell.rowSpan + i > this.rows.count) {\n // throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n // }\n if (cell.columnSpan > 1 && cell.rowSpan > 1) {\n colSpan = cell.columnSpan;\n rowSpan = cell.rowSpan;\n currentCellIndex = j;\n currentRowIndex = i;\n cell.isCellMergeStart = true;\n cell.isRowMergeStart = true;\n //Set Column merges for first row\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n row.cells.getCell(currentCellIndex).isRowMergeContinue = true;\n row.cells.getCell(currentCellIndex).rowSpan = rowSpan;\n colSpan--;\n }\n currentCellIndex = j;\n colSpan = cell.columnSpan;\n //Set Row Merges and column merges foreach subsequent rows.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n rowSpan--;\n while (colSpan > 1) {\n currentCellIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isCellMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n colSpan--;\n }\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n }\n }\n else if (cell.columnSpan > 1 && cell.rowSpan === 1) {\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n cell.isCellMergeStart = true;\n //Set Column merges.\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n colSpan--;\n }\n }\n else if (cell.columnSpan === 1 && cell.rowSpan > 1) {\n rowSpan = cell.rowSpan;\n currentRowIndex = i;\n //Set row Merges.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n rowSpan--;\n }\n }\n }\n }\n row.maximumRowSpan = maxSpan;\n }\n };\n PdfGrid.prototype.checkSpan = function () {\n var cellcolSpan;\n var cellrowSpan = 1;\n var cellmaxSpan = 0;\n var currentCellIndex;\n var currentRowIndex = 0;\n cellcolSpan = cellrowSpan = 1;\n currentCellIndex = currentRowIndex = 0;\n if (this.hasRowSpanSpan || this.hasColumnSpan) {\n var rowCount = this.rows.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.rows.getRow(i);\n cellmaxSpan = 0;\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n cellmaxSpan = Math.max(cellmaxSpan, cell.rowSpan);\n //Skip setting span map for already coverted rows/columns.\n if (!cell.isCellMergeContinue && !cell.isRowMergeContinue\n && (cell.columnSpan > 1 || cell.rowSpan > 1)) {\n if (cell.columnSpan + j > row.cells.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.rowSpan + i > this.rows.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.columnSpan > 1 && cell.rowSpan > 1) {\n cellcolSpan = cell.columnSpan;\n cellrowSpan = cell.rowSpan;\n currentCellIndex = j;\n currentRowIndex = i;\n cell.isCellMergeStart = true;\n cell.isRowMergeStart = true;\n //Set Column merges for first row\n while (cellcolSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n row.cells.getCell(currentCellIndex).isRowMergeContinue = true;\n cellcolSpan--;\n }\n currentCellIndex = j;\n cellcolSpan = cell.columnSpan;\n //Set Row Merges and column merges foreach subsequent rows.\n while (cellrowSpan > 1) {\n currentRowIndex++;\n this.rows.getRow(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n this.rows.getRow(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n cellrowSpan--;\n while (cellcolSpan > 1) {\n currentCellIndex++;\n this.rows.getRow(currentRowIndex).cells.getCell(currentCellIndex).isCellMergeContinue = true;\n this.rows.getRow(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n cellcolSpan--;\n }\n cellcolSpan = cell.columnSpan;\n currentCellIndex = j;\n }\n }\n else if (cell.columnSpan > 1 && cell.rowSpan === 1) {\n cellcolSpan = cell.columnSpan;\n currentCellIndex = j;\n cell.isCellMergeStart = true;\n //Set Column merges.\n while (cellcolSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n cellcolSpan--;\n }\n }\n else if (cell.columnSpan === 1 && cell.rowSpan > 1) {\n cellrowSpan = cell.rowSpan;\n currentRowIndex = i;\n //Set row Merges.\n while (cellrowSpan > 1) {\n currentRowIndex++;\n this.rows.getRow(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n cellrowSpan--;\n }\n }\n }\n }\n row.maximumRowSpan = cellmaxSpan;\n }\n }\n };\n PdfGrid.prototype.measureColumnsWidth = function (bounds) {\n if (typeof bounds !== 'undefined') {\n this.isPageWidth = false;\n var widths = this.columns.getDefaultWidths(bounds.width - bounds.x);\n //let tempWidth : number = this.columns.getColumn(0).width;\n for (var i = 0, count = this.columns.count; i < count; i++) {\n // if (this.columns.getColumn(i).width < 0)\n // this.columns.getColumn(i).columnWidth = widths[i];\n // else if (this.columns.getColumn(i).width > 0 && !this.columns.getColumn(i).isCustomWidth && widths[i]>0 && this.isComplete)\n this.columns.getColumn(i).columnWidth = widths[i];\n this.tempWidth = widths[i];\n }\n if (this.ParentCell != null && this.style.allowHorizontalOverflow == false && this.ParentCell.row.grid.style.allowHorizontalOverflow == false) {\n var padding = 0;\n var columnWidth = 0;\n var columnCount = this.columns.count;\n var childGridColumnWidth = 0;\n if ((this.ParentCell.row.grid.style.cellPadding != null)) {\n padding += (this.ParentCell.row.grid.style.cellPadding.top + this.ParentCell.row.grid.style.cellPadding.bottom);\n }\n for (var i = 0; i < this.ParentCell.columnSpan; i++) {\n columnWidth += this.ParentCell.row.grid.columns.getColumn(this.parentCellIndex + i).width;\n }\n for (var j = 0; j < this.columns.count; j++) {\n if (this.gridColumns.getColumn(j).width > 0 && this.gridColumns.getColumn(j).isCustomWidth) {\n columnWidth -= this.gridColumns.getColumn(j).width;\n columnCount--;\n }\n }\n // if((this.ParentCell.row.grid.style.cellPadding != null))\n // {\n // padding += (this.ParentCell.style.cellPadding.top + this.ParentCell.style.cellPadding.bottom);\n // }\n if (this.ParentCell.row.grid.style.cellSpacing != 0) {\n columnWidth -= this.ParentCell.row.grid.style.cellSpacing * 2;\n }\n if (columnWidth > padding) {\n if (padding != 1) {\n childGridColumnWidth = (columnWidth - padding) / columnCount;\n }\n else {\n childGridColumnWidth = (columnWidth) / columnCount;\n }\n this.tempWidth = childGridColumnWidth;\n if (this.ParentCell != null && this.ParentCell.stringFormat.alignment != PdfTextAlignment.Right) {\n for (var j = 0; j < this.columns.count; j++) {\n if (!this.columns.getColumn(j).isCustomWidth)\n this.columns.getColumn(j).columnWidth = childGridColumnWidth;\n }\n }\n }\n }\n // if (this.ParentCell != null && this.ParentCell.row.width > 0)\n // {\n // if (this.isChildGrid && this.gridSize.width > this.ParentCell.row.width)\n // {\n // widths = this.columns.getDefaultWidths(bounds.width);\n // for (let i : number = 0; i < this.columns.count; i++)\n // {\n // this.columns.getColumn(i).width = widths[i];\n // }\n // }\n // } \n }\n else {\n var widths = [this.columns.count];\n for (var n = 0; n < this.columns.count; n++) {\n widths[n] = 0;\n }\n var cellWidth = 0;\n var cellWidths = 0;\n if ((typeof this.isChildGrid === 'undefined' && typeof this.gridLocation !== 'undefined') || (this.isChildGrid === null && typeof this.gridLocation !== 'undefined')) {\n this.initialWidth = this.gridLocation.width;\n }\n if (this.headers.count > 0) {\n var colCount_1 = this.headers.getHeader(0).cells.count;\n var rowCount = this.headers.count;\n for (var i = 0; i < colCount_1; i++) {\n cellWidth = 0;\n for (var j = 0; j < rowCount; j++) {\n var rowWidth = Math.min(this.initialWidth, this.headers.getHeader(j).cells.getCell(i).width);\n cellWidth = Math.max(cellWidth, rowWidth);\n }\n widths[i] = cellWidth;\n }\n }\n // else {\n // let colCount : number = this.rows.getRow(0).cells.count;\n // let rowCount : number = this.rows.count;\n // for (let i : number = 0; i < colCount; i++) {\n // cellWidth = 0;\n // for (let j : number = 0; j < rowCount; j++) {\n // let rowWidth : number = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n // cellWidth = Math.max(cellWidth, rowWidth);\n // }\n // widths[i] = cellWidth;\n // }\n // }\n cellWidth = 0;\n for (var i = 0, colCount_2 = this.columns.count; i < colCount_2; i++) {\n for (var j = 0, rowCount = this.rows.count; j < rowCount; j++) {\n if ((this.rows.getRow(j).cells.getCell(i).columnSpan == 1 && !this.rows.getRow(j).cells.getCell(i).isCellMergeContinue) || this.rows.getRow(j).cells.getCell(i).value != null) {\n if (this.rows.getRow(j).cells.getCell(i).value != null && !this.rows.getRow(j).grid.style.allowHorizontalOverflow) {\n var value = this.rows.getRow(j).grid.style.cellPadding.right +\n this.rows.getRow(j).grid.style.cellPadding.left\n + this.rows.getRow(j).cells.getCell(i).style.borders.left.width / 2;\n // if (this.initialWidth != 0 )\n // (this.rows.getRow(j).cells.getCell(i).value as PdfGrid).initialWidth = this.initialWidth - value;\n }\n var rowWidth = 0;\n rowWidth = this.initialWidth > 0.0 ? Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width) : this.rows.getRow(j).cells.getCell(i).width;\n // let internalWidth : number = this.rows.getRow(j).cells.getCell(i).width;\n // internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.left.width;\n // internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.right.width;\n // let internalHeight : number = this.rows.getRow(j).cells.getCell(i).height;\n // internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.top.width);\n // internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.bottom.width);\n // let isCorrectWidth : boolean = (internalWidth + this.gridLocation.x) > this.currentGraphics.clientSize.width;\n // let isCorrectHeight : boolean = (internalHeight + this.gridLocation.y) > this.currentGraphics.clientSize.height;\n // if (isCorrectWidth || isCorrectHeight) {\n // throw Error('Image size exceeds client size of the page. Can not insert this image');\n // }\n // rowWidth = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n cellWidth = Math.max(widths[i], Math.max(cellWidth, rowWidth));\n cellWidth = Math.max(this.columns.getColumn(i).width, cellWidth);\n }\n }\n if (this.rows.count != 0)\n widths[i] = cellWidth;\n cellWidth = 0;\n }\n for (var i = 0, RowCount = this.rows.count; i < RowCount; i++) {\n for (var j = 0, ColCount = this.columns.count; j < ColCount; j++) {\n if (this.rows.getRow(i).cells.getCell(j).columnSpan > 1) {\n var total = widths[j];\n for (var k = 1; k < this.rows.getRow(i).cells.getCell(j).columnSpan; k++) {\n total += widths[j + k];\n }\n // if (this.rows.getRow(i).cells.getCell(j).width > total)\n // {\n // let extendedWidth : number = this.rows.getRow(i).cells.getCell(j).width - total;\n // extendedWidth = extendedWidth / this.rows.getRow(i).cells.getCell(j).columnSpan;\n // for (let k : number = j; k < j + this.rows.getRow(i).cells.getCell(j).columnSpan; k++)\n // widths[k] += extendedWidth;\n // }\n }\n }\n }\n // if (this.isChildGrid && this.initialWidth != 0)\n // {\n // widths = this.columns.getDefaultWidths(this.initialWidth);\n // }\n for (var i = 0, count = this.columns.count; i < count; i++) {\n if (this.columns.getColumn(i).width <= 0)\n this.columns.getColumn(i).columnWidth = widths[i];\n else if (this.columns.getColumn(i).width > 0 && !this.columns.getColumn(i).isCustomWidth)\n this.columns.getColumn(i).columnWidth = widths[i];\n }\n var padding = 0;\n var colWidth = 0;\n var colCount = this.columns.count;\n var childGridColWidth = 0;\n colWidth = this.tempWidth;\n for (var j = 0; j < this.columns.count; j++) {\n if (this.gridColumns.getColumn(j).width > 0 && this.gridColumns.getColumn(j).isCustomWidth) {\n colWidth -= this.gridColumns.getColumn(j).width;\n colCount--;\n }\n }\n if (this.style.cellPadding != null) {\n padding += (this.style.cellPadding.top + this.style.cellPadding.bottom);\n }\n // else if((this.gridStyle.cellPadding != null))\n // {\n // padding += (this.gridStyle.cellPadding.top + this.gridStyle.cellPadding.bottom);\n // }\n // if (this.style.cellSpacing != 0){\n // colWidth -= this.style.cellSpacing * 2;\n // }\n if (colWidth > 0) {\n if ((this.ParentCell.row.grid.style.cellPadding != null)) {\n padding += (this.ParentCell.row.grid.style.cellPadding.top + this.ParentCell.row.grid.style.cellPadding.bottom);\n }\n if (this.ParentCell.row.grid.style.cellSpacing != 0) {\n colWidth -= this.ParentCell.row.grid.style.cellSpacing * 2;\n }\n }\n if (colWidth > padding) {\n if (padding != 1) {\n childGridColWidth = (colWidth - padding) / colCount;\n }\n else {\n childGridColWidth = (colWidth) / colCount;\n }\n if (this.ParentCell != null && this.ParentCell.stringFormat.alignment != PdfTextAlignment.Right) {\n for (var j = 0; j < this.columns.count; j++) {\n if (!this.columns.getColumn(j).isCustomWidth)\n this.columns.getColumn(j).columnWidth = childGridColWidth;\n }\n }\n }\n }\n };\n return PdfGrid;\n}(PdfLayoutElement));\nexport { PdfGrid };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PdfGrid } from '../pdf-grid';\nimport { PdfStringFormat } from './../../../graphics/fonts/pdf-string-format';\nimport { SizeF, RectangleF, PointF } from './../../../drawing/pdf-drawing';\nimport { PdfBorders } from '../styles/pdf-borders';\nimport { PdfLayoutType, PdfLayoutBreakType } from './../../../graphics/figures/enum';\nimport { PdfLayoutResult, PdfLayoutFormat, ElementLayouter } from './../../../graphics/figures/base/element-layouter';\nimport { PdfHorizontalOverflowType } from '../styles/style';\nimport { TemporaryDictionary } from './../../../collections/object-object-pair/dictionary';\n/**\n * Class `lay outing the text`.\n *\n */\nvar PdfGridLayouter = /** @class */ (function (_super) {\n __extends(PdfGridLayouter, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGrid` class.\n * @private\n */\n function PdfGridLayouter(baseFormat) {\n var _this = _super.call(this, baseFormat) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridInitialWidth = 0;\n /**\n * @hidden\n * @private\n */\n _this.gridSize = new SizeF(0, 0);\n _this.parentCellIndex = 0;\n _this.tempWidth = 0;\n _this.childheight = 0;\n /**\n * Check weather it is `child grid or not`.\n * @private\n */\n _this.isChildGrid = false;\n /**\n * @hidden\n * @private\n */\n _this.hasRowSpanSpan = false;\n /**\n * @hidden\n * @private\n */\n _this.isRearranged = false;\n /**\n * @hidden\n * @private\n */\n _this.pageBounds = new RectangleF();\n /**\n * @hidden\n * @private\n */\n _this.listOfNavigatePages = [];\n /**\n * @hidden\n * @private\n */\n _this.flag = true;\n /**\n * @hidden\n * @private\n */\n _this.columnRanges = [];\n /**\n * @hidden\n * @private\n */\n _this.currentLocation = new PointF(0, 0);\n /**\n * @hidden\n * @private\n */\n _this.breakRow = true;\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n _this.isOverloadWithPosition = false;\n return _this;\n }\n Object.defineProperty(PdfGridLayouter.prototype, \"Grid\", {\n //Properties\n get: function () {\n return this.elements;\n },\n enumerable: true,\n configurable: true\n });\n // Constructors\n /**\n * Initializes a new instance of the `StringLayouter` class.\n * @private\n */\n //Public methods\n /**\n * `Layouts` the text.\n * @private\n */\n /**\n * `Layouts` the specified graphics.\n * @private\n */\n /**\n * `Layouts` the specified graphics.\n * @private\n */\n /*public layout(graphics : PdfLayoutParams) : PdfLayoutResult\n public layout(graphics : PdfGraphics, bounds : RectangleF) : void\n public layout(graphics : PdfGraphics, bounds : PointF) : void\n public layout(graphics ?: PdfGraphics | PdfLayoutParams, bounds ?: PointF | RectangleF) : void | PdfLayoutResult {\n if (graphics instanceof PdfGraphics) {\n if (bounds instanceof PointF) {\n if (bounds.x === 0) {\n bounds.x = PdfBorders.default.right.width / 2;\n }\n if (bounds.y === 0) {\n bounds.y = PdfBorders.default.top.width / 2;\n }\n let boundaries : RectangleF = new RectangleF(bounds, new SizeF(0, 0));\n this.layout(graphics, boundaries);\n } else {\n let width : number = graphics.clientSize.width;\n let parameter : PdfLayoutParams = new PdfLayoutParams();\n parameter.bounds = bounds;\n this.currentGraphics = graphics;\n if (graphics.layer != null) {\n let index : number = 0;\n if (this.currentGraphics.page instanceof PdfPage) {\n index = (this.currentGraphics.page as PdfPage).section.indexOf(this.currentGraphics.page as PdfPage);\n } else {\n index = (this.currentGraphics.page as PdfPageBase).defaultLayerIndex;\n }\n } else {\n this.layoutInternal(parameter);\n }\n }\n }\n }*/\n /**\n * Gets the `format`.\n * @private\n */\n PdfGridLayouter.prototype.getFormat = function (format) {\n var f = format;\n return f;\n };\n /**\n * `Layouts` the element.\n * @private\n */\n PdfGridLayouter.prototype.layoutInternal = function (param) {\n var format = this.getFormat(param.format);\n this.gridLayoutFormat = this.getFormat(param.format);\n this.currentPage = param.page;\n if (this.currentPage !== null) {\n var pageHeight = this.currentPage.getClientSize().height;\n var pageWidth = this.currentPage.getClientSize().width;\n //if (pageHeight > pageWidth) {\n this.currentPageBounds = this.currentPage.getClientSize();\n //}\n }\n else {\n throw Error('Can not set page as null');\n //this.currentPageBounds = this.currentGraphics.clientSize;\n }\n this.currentGraphics = this.currentPage.graphics;\n //this.currentGraphics = (this.currentPage != null ) ? this.currentPage.graphics : this.currentGraphics;\n // if (this.currentGraphics.layer !== null) {\n // let index : number = 0;\n // if (this.currentGraphics.page instanceof PdfPage) {\n // index = (this.currentGraphics.page as PdfPage).section.indexOf(this.currentGraphics.page as PdfPage);\n // } else {\n // index = (this.currentGraphics.page as PdfPageBase).defaultLayerIndex;\n // }\n // this.listOfNavigatePages.push(index);\n // }\n var index = 0;\n index = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n this.listOfNavigatePages.push(index);\n if (format != null && format.break === PdfLayoutBreakType.FitColumnsToPage) {\n this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), new SizeF(this.Grid.columns.width, this.currentGraphics.clientSize.height));\n }\n else {\n this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), this.currentGraphics.clientSize);\n }\n //this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), this.currentGraphics.clientSize);\n if (this.Grid.rows.count !== 0) {\n this.currentBounds.width = (param.bounds.width > 0) ? param.bounds.width :\n (this.currentBounds.width - this.Grid.rows.getRow(0).cells.getCell(0).style.borders.left.width / 2);\n }\n else if (this.Grid.headers.count !== 0) {\n // this.currentBounds.width = (param.bounds.width > 0) ? param.bounds.width : (this.currentBounds.width -\n // this.Grid.headers.getHeader(0).cells.getCell(0).style.borders.left.width / 2);\n this.currentBounds.width = param.bounds.width;\n }\n else {\n throw Error('Please add row or header into grid');\n }\n this.startLocation = new PointF(param.bounds.x, param.bounds.y);\n // if (this.Grid.style.allowHorizontalOverflow && this.currentBounds.width > this.currentGraphics.clientSize.width) {\n // this.currentBounds.width = this.currentGraphics.clientSize.width;\n // this.currentBounds.width -= this.currentBounds.x;\n // }\n // if (this.Grid.isChildGrid) {\n // this.childheight = param.bounds.height;\n // }\n // if (param.format !== null && param.format.usePaginateBounds) {\n // if (param.format.paginateBounds.height > 0) {\n // this.currentBounds.height = param.format.paginateBounds.height;\n // }\n //} else \n if (param.bounds.height > 0 && !this.Grid.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n if (!this.Grid.isChildGrid) {\n this.hType = this.Grid.style.horizontalOverflowType;\n }\n if (!this.Grid.style.allowHorizontalOverflow) {\n this.columnRanges = [];\n this.Grid.measureColumnsWidth(this.currentBounds);\n this.columnRanges.push([0, this.Grid.columns.count - 1]);\n }\n else {\n this.Grid.measureColumnsWidth();\n this.determineColumnDrawRanges();\n }\n if (this.Grid.hasRowSpanSpan) {\n for (var i = 0; i < this.Grid.rows.count; i++) {\n var height = this.Grid.rows.getRow(i).height;\n if (!this.Grid.rows.getRow(i).isRowHeightSet) {\n this.Grid.rows.getRow(i).isRowHeightSet = true;\n }\n }\n }\n var result = this.layoutOnPage(param);\n return result;\n };\n // /* tslint:enable */\n /**\n * `Determines the column draw ranges`.\n * @private\n */\n PdfGridLayouter.prototype.determineColumnDrawRanges = function () {\n var startColumn = 0;\n var endColumn = 0;\n var cellWidths = 0;\n var availableWidth = this.currentGraphics.clientSize.width - this.currentBounds.x;\n for (var i = 0; i < this.Grid.columns.count; i++) {\n cellWidths += this.Grid.columns.getColumn(i).width;\n if (cellWidths >= availableWidth) {\n var subWidths = 0;\n for (var j = startColumn; j <= i; j++) {\n subWidths += this.Grid.columns.getColumn(j).width;\n if (subWidths > availableWidth) {\n break;\n }\n endColumn = j;\n }\n this.columnRanges.push([startColumn, endColumn]);\n startColumn = endColumn + 1;\n endColumn = startColumn;\n cellWidths = (endColumn <= i) ? this.Grid.columns.getColumn(i).width : 0;\n }\n }\n // if (startColumn !== this.columns.Count) {\n this.columnRanges.push([startColumn, this.Grid.columns.count - 1]);\n // }\n };\n /**\n * `Layouts the on page`.\n * @private\n */\n PdfGridLayouter.prototype.layoutOnPage = function (param) {\n /* tslint:disable */\n this.pageBounds.x = param.bounds.x;\n this.pageBounds.y = param.bounds.y;\n this.pageBounds.height = param.bounds.height;\n var format = this.getFormat(param.format);\n var endArgs = null;\n var result = null;\n var layoutedPages = new TemporaryDictionary();\n var startPage = param.page;\n var isParentCell = false;\n var cellBounds = [];\n for (var index = 0; index < this.columnRanges.length; index++) {\n var range = this.columnRanges[index];\n this.cellStartIndex = range[0];\n this.cellEndIndex = range[1];\n var returnObject = this.raiseBeforePageLayout(this.currentPage, this.currentBounds, this.currentRowIndex);\n this.currentBounds = returnObject.currentBounds;\n this.currentRowIndex = returnObject.currentRowIndex;\n // if (returnObject.returnValue) {\n // result = new PdfGridLayoutResult(this.currentPage, this.currentBounds);\n // break;\n // }\n //Draw Headers.\n var drawHeader = void 0;\n for (var i_1 = 0; i_1 < this.Grid.headers.count; i_1++) {\n var row = this.Grid.headers.getHeader(i_1);\n var headerHeight = this.currentBounds.y;\n // RowLayoutResult\n var headerResult = this.drawRow(row);\n // if (headerHeight === this.currentBounds.y) {\n // drawHeader = true;\n // if (PdfGrid.repeatRowIndex === -1) {\n // PdfGrid.repeatRowIndex = this.rows.getRow.indexOf(row);\n // }\n // } else {\n drawHeader = false;\n // }\n }\n var i = 0;\n var length_1 = this.Grid.rows.count;\n var repeatRow = void 0;\n var startingHeight = 0;\n var flag = true;\n //Here is to draw parent Grid and Cells\n cellBounds = [];\n //Draw row by row with the specified cell range.\n for (var j = 0; j < this.Grid.rows.count; j++) {\n var row = this.Grid.rows.getRow(j);\n i++;\n this.currentRowIndex = i - 1;\n var originalHeight = this.currentBounds.y;\n startPage = this.currentPage;\n PdfGridLayouter.repeatRowIndex = -1;\n if (flag && row.grid.isChildGrid) {\n startingHeight = originalHeight;\n flag = false;\n }\n var rowResult = null;\n ///rowResult = this.drawRow(row);\n /*if(!row.isrowFinish) {\n if(!row.grid.isgridSplit){\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n row.isrowDraw = true;\n } else {\n if(!row.isrowDraw){\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n row.isrowDraw = true;\n row.grid.isgridSplit = false;\n } else {\n rowResult = null;\n break;\n }\n }\n }\n else {\n //row.isrowFinish = false;\n //rowResult = this.drawRow(row);\n rowResult = null;\n break;\n \n } */\n if (this.Grid.splitChildRowIndex == -1) {\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n }\n else {\n if (row.grid.ParentCell.row.grid.isGridSplit && this.Grid.splitChildRowIndex <= row.rowIndex) {\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n }\n else if (row.isrowFinish) {\n continue;\n }\n else {\n break;\n }\n }\n //rowResult = this.drawRow(row);\n cellBounds.push(rowResult.bounds.width);\n /*if (row.isRowBreaksNextPage)\n {\n let x : number = 0;\n for (let l : number = 0; l < row.cells.count; l++)\n {\n let isNestedRowBreak : boolean = false;\n if (row.height == row.cells.getCell(l).height)\n {\n let n : number;\n let grid : PdfGrid = row.cells.getCell(l).value as PdfGrid;\n for (let m : number = grid.rows.count; 0 < m; m--)\n {\n if ((grid.rows.getRow(m - 1).rowBreakHeight > 0))\n {\n isNestedRowBreak = true;\n break;\n }\n if (grid.rows.getRow(m - 1).isRowBreaksNextPage)\n {\n row.rowBreakHeightValue = grid.rows.getRow(m - 1).rowBreakHeightValue;\n break;\n }\n row.rowBreakHeightValue += grid.rows.getRow(m - 1).height;\n }\n }\n if (isNestedRowBreak)\n break;\n }\n for (let j : number = 0; j < row.cells.count; j++)\n {\n\n if (row.height > row.cells.getCell(j).height)\n {\n row.cells.getCell(j).value = \" \";\n let rect : RectangleF ;\n let page : PdfPage = this.getNextPage(this.currentPage);\n let section : PdfSection = this.currentPage.section;\n let index : number = section.indexOf(page);\n for (let k : number = 0; k < (section.count - 1) - index; k++)\n {\n rect = new RectangleF(x, 0, row.grid.columns.getColumn(j).width, page.getClientSize().height);\n PdfGridLayouter.repeatRowIndex = -1;\n row.cells.getCell(j).draw(page.graphics, rect, false);\n page = this.getNextPage(page);\n }\n rect = new RectangleF(x, 0, row.grid.columns.getColumn(j).width, row.rowBreakHeightValue);\n\n row.cells.getCell(j).draw(page.graphics, rect, false);\n }\n x += row.grid.columns.getColumn(j).width;\n }\n }*/\n //if height remains same, it is understood that row is not drawn in the page\n if (originalHeight === this.currentBounds.y) {\n repeatRow = true;\n PdfGridLayouter.repeatRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n }\n else {\n repeatRow = false;\n PdfGridLayouter.repeatRowIndex = -1;\n }\n while (!rowResult.isFinish && startPage != null) {\n var tempResult = this.getLayoutResult();\n /*if (startPage != this.currentPage)\n {\n if (row.grid.isChildGrid && row.grid.ParentCell != null)\n {\n let bounds : RectangleF= new RectangleF(new PointF(format.paginateBounds.x,format.paginateBounds.y), new SizeF(param.bounds.width, tempResult.bounds.height));\n bounds.x += param.bounds.x;\n if (row.grid.ParentCell.row.grid.style.cellPadding != null)\n {\n bounds.y += row.grid.ParentCell.row.grid.style.cellPadding.top;\n if (bounds.height > this.currentPageBounds.height)\n {\n bounds.height = this.currentPageBounds.height - bounds.y;\n bounds.height -= (row.grid.ParentCell.row.grid.style.cellPadding.bottom);\n }\n }\n // Draw border for cells in the nested grid cell's row.\n for (let c : number = 0; c < row.cells.count; c++)\n {\n let cell : PdfGridCell = row.cells.getCell(c);\n let cellWidth : number= 0;\n if (cell.columnSpan > 1)\n {\n for (; c < cell.columnSpan; c++)\n cellWidth += row.grid.columns.getColumn(c).width;\n }\n else\n cellWidth = Math.max(cell.width, row.grid.columns.getColumn(c).width);\n cell.drawCellBorders(this.currentGraphics, new RectangleF(new PointF(bounds.x,bounds.y), new SizeF(cellWidth, bounds.height)));\n bounds.x += cellWidth;\n c += (cell.columnSpan - 1);\n }\n }\n }\n */\n endArgs = this.raisePageLayouted(tempResult);\n if (endArgs.cancel || repeatRow)\n break;\n else if (this.Grid.allowRowBreakAcrossPages) {\n //If there is no space in the current page, add new page and then draw the remaining row.\n this.currentPage = this.getNextPageformat(format);\n originalHeight = this.currentBounds.y;\n var location_1 = new PointF(PdfBorders.default.right.width / 2, PdfBorders.default.top.width / 2);\n // if (format.paginateBounds == new RectangleF(0,0,0,0) && this.startLocation == location)\n // {\n // this.currentBounds.x += this.startLocation.x;\n // this.currentBounds.y += this.startLocation.y;\n // }\n if (this.Grid.isChildGrid && row.grid.ParentCell != null) {\n if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n if (row.rowBreakHeight + this.Grid.ParentCell.row.grid.style.cellPadding.top < this.currentBounds.height) {\n this.currentBounds.y = this.Grid.ParentCell.row.grid.style.cellPadding.top;\n }\n }\n }\n if (row.grid.ParentCell != null) {\n row.grid.ParentCell.row.isRowBreaksNextPage = true;\n row.grid.ParentCell.row.rowBreakHeightValue = row.rowBreakHeight + this.Grid.ParentCell.row.grid.style.cellPadding.top + this.Grid.ParentCell.row.grid.style.cellPadding.bottom;\n for (var i_2 = row.rowIndex + 1; i_2 < row.grid.rows.count; i_2++) {\n row.grid.ParentCell.row.rowBreakHeightValue += row.grid.rows.getRow(i_2).height;\n }\n //row.rowBreakHeight = row.grid.ParentCell.row.rowBreakHeightValue;\n }\n /*if (row.noOfPageCount > 1)\n {\n let temp : number = row.rowBreakHeightValue;\n for (let j : number = 1; j < row.noOfPageCount; j++)\n {\n row.rowBreakHeightValue = 0;\n row.height = ((row.noOfPageCount - 1) * this.currentPage.getClientSize().height);\n this.drawRow(row);\n this.currentPage = this.getNextPageformat(format);\n startPage = this.currentPage;\n }\n row.rowBreakHeightValue = temp;\n row.noOfPageCount = 1;\n rowResult = this.drawRow(row);\n } else {\n rowResult = this.drawRow(row);\n }\n /*if(row.grid.isChildGrid){\n row.isrowFinish = false;\n row.isrowDraw = false;\n row.grid.isgridSplit = true;\n row.grid.ParentCell.row.grid.isgridSplit = true;\n //rowResult.isFinish = false;\n break;\n }*/\n if (row.grid.isChildGrid) {\n //row.grid.isgridSplit = true;\n row.isrowFinish = false;\n //row.grid.ParentCell.row.grid.isgridSplit = true;\n row.grid.splitChildRowIndex = row.rowIndex;\n row.grid.ParentCell.row.grid.splitChildRowIndex = row.grid.ParentCell.row.rowIndex;\n if (row.grid.ParentCell.row.grid.isGridSplit) {\n row.grid.ParentCell.row.noOfPageCount += 1;\n row.grid.ParentCell.row.grid.isGridSplit = false;\n }\n break;\n }\n if (row.noOfPageCount < 1) {\n if (row.grid.splitChildRowIndex != -1) {\n row.grid.isGridSplit = true;\n }\n this.currentBounds.y = 0.50;\n if (this.Grid.repeatHeader) {\n for (var j_1 = 0; j_1 < this.Grid.headers.count; j_1++) {\n var headerRepeat = this.Grid.headers.getHeader(j_1);\n this.drawRow(headerRepeat);\n }\n }\n rowResult = this.drawRow(row);\n if (row.noOfPageCount >= 1) {\n var temp = row.rowBreakHeightValue;\n for (var j_2 = 0; j_2 < row.noOfPageCount; j_2++) {\n //this.currentPage.section.add();\n var tempResult1 = this.getLayoutResult();\n endArgs = this.raisePageLayouted(tempResult1);\n this.currentPage = this.getNextPageformat(format);\n originalHeight = this.currentBounds.y;\n //row.rowBreakHeightValue = 0;\n if (row.grid.splitChildRowIndex != -1) {\n row.grid.isGridSplit = true;\n }\n this.currentBounds.y = 0.5;\n if (this.Grid.repeatHeader) {\n for (var i_3 = 0; i_3 < this.Grid.headers.count; i_3++) {\n var header = this.Grid.headers.getHeader(i_3);\n this.drawRow(header);\n }\n }\n //row.height = ((row.noOfPageCount - 1) * this.currentPage.getClientSize().height);\n this.drawRow(row);\n }\n // row.rowBreakHeight = temp;\n // row.noOfPageCount = 1;\n // rowResult = this.drawRow(row);\n }\n row.grid.splitChildRowIndex = -1;\n row.grid.isGridSplit = false;\n rowResult.isFinish = true;\n //row.NestedGridLayoutResult.bounds.height = row.rowBreakHeightValue;\n //this.currentBounds.y = rowResult.bounds.y;\n for (var i_4 = 0; i_4 < row.cells.count; i_4++) {\n if (row.cells.getCell(i_4).value instanceof PdfGrid) {\n row.cells.getCell(i_4).value.splitChildRowIndex = -1;\n }\n }\n }\n }\n // else if (!this.Grid.allowRowBreakAcrossPages && i < length)\n // {\n // this.currentPage = this.getNextPageformat(format);\n // break;\n // }\n // else if (i >= length)\n // break;\n }\n if (!rowResult.isFinish && startPage !== null && format.layout !== PdfLayoutType.OnePage && repeatRow) {\n // During pagination, cell position is maintained here.\n this.startLocation.x = this.currentBounds.x;\n var isAddNextPage = false;\n this.currentPage = this.getNextPageformat(format);\n /*if (!this.Grid.isSingleGrid)\n {\n for ( let j : number= 0; j < this.Grid.rows.count; j++)\n {\n let isWidthGreaterthanParent : boolean = false;\n for (let k : number = 0; k < this.Grid.rows.getRow(j).cells.count; k++)\n {\n if (this.Grid.rows.getRow(j).cells.getCell(k).width > this.currentPageBounds.width)\n isWidthGreaterthanParent = true;\n }\n if (isWidthGreaterthanParent && this.Grid.rows.getRow(j).cells.getCell(this.rowBreakPageHeightCellIndex).pageCount > 0)\n {\n isAddNextPage = true;\n }\n }\n }\n if (!this.Grid.isRearranged && isAddNextPage)\n {\n let section : PdfSection = this.currentPage.section;\n \n //this.currentPage = section.add();\n \n this.currentGraphics = this.currentPage.graphics;\n this.currentBounds = new RectangleF(new PointF(0,0), this.currentPage.getClientSize());\n \n let pageindex : number = (this.currentGraphics.page as PdfPage).section.indexOf(this.currentGraphics.page as PdfPage);\n }\n else\n {\n this.currentPage = this.getNextPageformat(format);\n }\n if (format.paginateBounds.y == 0)\n this.currentBounds.y = PdfBorders.default.top.width/2;\n else\n {\n this.currentBounds.y = format == null ? 0 : format.paginateBounds.y;\n \n }\n if (this.raiseBeforePageLayout(this.currentPage, this.currentBounds, this.currentRowIndex))\n break;*/\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.height > 0 && !this.Grid.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.y > 0 && !this.Grid.isChildGrid) {\n this.currentBounds.y = param.bounds.y;\n }\n this.startLocation.y = this.currentBounds.y;\n if ((format.paginateBounds.x === format.paginateBounds.y) &&\n (format.paginateBounds.y === format.paginateBounds.height) &&\n (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n }\n if (this.currentBounds.x === PdfBorders.default.left.width / 2) {\n this.currentBounds.y += this.startLocation.x;\n }\n if (this.Grid.repeatHeader) {\n for (var i_5 = 0; i_5 < this.Grid.headers.count; i_5++) {\n var header = this.Grid.headers.getHeader(i_5);\n this.drawRow(header);\n }\n }\n this.drawRow(row);\n if (this.currentPage !== null && !layoutedPages.containsKey(this.currentPage)) {\n layoutedPages.add(this.currentPage, range);\n }\n }\n if (row.NestedGridLayoutResult != null) {\n // Position for next row in the grid.\n this.currentPage = row.NestedGridLayoutResult.page;\n this.currentGraphics = this.currentPage.graphics; //If not, next row will not be drawn in the layouted page.\n this.startLocation = new PointF(row.NestedGridLayoutResult.bounds.x, row.NestedGridLayoutResult.bounds.y);\n var recalHeight = this.ReCalculateHeight(row, row.NestedGridLayoutResult.bounds.height);\n this.currentBounds.y = recalHeight;\n //this.currentBounds.y = row.NestedGridLayoutResult.bounds.height;\n if (startPage != this.currentPage) {\n var secion = this.currentPage.section;\n var startIndex = secion.indexOf(startPage) + 1;\n var endIndex = secion.indexOf(this.currentPage);\n for (var page = startIndex; page < endIndex + 1; page++) {\n var pageGraphics = this.currentPage.graphics;\n var location_2 = new PointF(format.paginateBounds.x, format.paginateBounds.y);\n var height = page == endIndex ? (row.NestedGridLayoutResult.bounds.height - param.bounds.y) :\n (this.currentBounds.height - location_2.y);\n if (height <= pageGraphics.clientSize.height)\n height += param.bounds.y;\n // if (row.grid.isChildGrid && row.grid.ParentCell != null)\n // location.x += param.bounds.x;\n location_2.y = format == null ? 0.5 : format.paginateBounds.y;\n // Draw border for last paginated row containing nested grid.\n for (var c = 0; c < row.cells.count; c++) {\n var cell = row.cells.getCell(c);\n var cellWidth = 0;\n var totalwidth = 0;\n if (cell.value instanceof PdfGrid) {\n for (var i_6 = 0; i_6 < cell.value.columns.count; i_6++) {\n totalwidth += cell.value.columns.getColumn(i_6).columnWidth;\n }\n }\n else {\n totalwidth = cell.width;\n }\n // if (cell.columnSpan > 1)\n // {\n // for (; c < cell.columnSpan; c++)\n // cellWidth += row.grid.columns.getColumn(c).width;\n // }\n // else\n cellWidth = Math.max(totalwidth, row.grid.columns.getColumn(c).width);\n cell.drawCellBorders(pageGraphics, new RectangleF(location_2, new SizeF(cellWidth, height)));\n location_2.x += cellWidth;\n c += (cell.columnSpan - 1);\n }\n }\n // So, nested grid drawing is completed for the current row. Update page.\n // Otherwise, the next nested grid of the parent will draw borders from start.\n startPage = this.currentPage;\n }\n }\n }\n var isPdfGrid = false;\n var maximumCellBoundsWidth = 0;\n if (cellBounds.length > 0) {\n maximumCellBoundsWidth = cellBounds[0];\n }\n var largeNavigatePage = [[1, 2]];\n for (var c = 0; c < this.Grid.rows.count; c++) {\n if (this.cellEndIndex != -1 && this.Grid.rows.getRow(c).cells.getCell(this.cellEndIndex).value instanceof PdfGrid) {\n var grid = this.Grid.rows.getRow(c).cells.getCell(this.cellEndIndex).value;\n this.rowLayoutBoundsWidth = grid.rowLayoutBoundsWidth;\n isPdfGrid = true;\n // if (largeNavigatePage[0][0] < grid.listOfNavigatePages.length)\n // {\n // largeNavigatePage[0][0] = grid.listOfNavigatePages.length;\n // largeNavigatePage[0][1] = cellBounds[c];\n // }\n // else if ((largeNavigatePage[0][0] == grid.listOfNavigatePages.length) && (largeNavigatePage[0][1] < cellBounds[c]))\n // {\n // largeNavigatePage[0][1] = cellBounds[c];\n // }\n }\n }\n if (!isPdfGrid && cellBounds.length > 0) {\n for (var c = 0; c < i - 1; c++) {\n if (maximumCellBoundsWidth < cellBounds[c]) {\n maximumCellBoundsWidth = cellBounds[c];\n }\n }\n this.rowLayoutBoundsWidth = maximumCellBoundsWidth;\n }\n else {\n this.rowLayoutBoundsWidth = largeNavigatePage[0][1];\n }\n if (this.columnRanges.indexOf(range) < this.columnRanges.length - 1\n && startPage != null && format.layout != PdfLayoutType.OnePage) {\n isParentCell = this.Grid.isChildGrid;\n if (largeNavigatePage[0][0] != 0) {\n var section = this.currentPage.section;\n var pageIndex = section.indexOf(this.currentPage);\n this.currentGraphics = this.currentPage.graphics;\n this.currentBounds = new RectangleF(new PointF(0, 0), this.currentPage.getClientSize());\n var pageindex = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n }\n else {\n this.currentPage = this.getNextPageformat(format);\n }\n // let locationGrid : PointF= new PointF(PdfBorders.default.right.width / 2, PdfBorders.default.top.width / 2);\n // if (format.paginateBounds == new RectangleF(0,0,0,0) && this.startLocation == locationGrid)\n // {\n // this.currentBounds.x += this.startLocation.x;\n // this.currentBounds.y += this.startLocation.y;\n // }\n }\n if (this.columnRanges.length - 1 !== index && this.columnRanges.length > 1 && format.layout !== PdfLayoutType.OnePage) {\n this.currentPage = this.getNextPageformat(format);\n if ((format.paginateBounds.x === format.paginateBounds.y) && (format.paginateBounds.y === format.paginateBounds.height)\n && (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n this.currentBounds.y += this.startLocation.y;\n //this.currentBounds.height = this.pageBounds.height;\n }\n }\n }\n result = this.getLayoutResult();\n if (this.Grid.style.allowHorizontalOverflow && this.Grid.style.horizontalOverflowType == PdfHorizontalOverflowType.NextPage) {\n this.reArrangePages(layoutedPages);\n }\n this.raisePageLayouted(result);\n return result;\n };\n /* tslint:enable */\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGridLayouter.prototype.getNextPageformat = function (format) {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n this.flag = false;\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n this.currentGraphics = nextPage.graphics;\n var pageindex = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n if (!(this.listOfNavigatePages.indexOf(pageindex) !== -1)) {\n this.listOfNavigatePages.push(pageindex);\n }\n this.currentBounds = new RectangleF(new PointF(0, 0), nextPage.getClientSize());\n // if ((format.paginateBounds.x !== format.paginateBounds.y) && (format.paginateBounds.y !== format.paginateBounds.height)\n // && (format.paginateBounds.height !== format.paginateBounds.width) && (format.paginateBounds.width !== 0)) {\n // this.currentBounds.x = format.paginateBounds.x;\n // this.currentBounds.y = format.paginateBounds.y;\n // this.currentBounds.height = format.paginateBounds.height;\n // }\n return nextPage;\n };\n PdfGridLayouter.prototype.CheckIfDefaultFormat = function (format) {\n var defaultFormat = new PdfStringFormat();\n return (format.alignment === defaultFormat.alignment && format.characterSpacing === defaultFormat.characterSpacing &&\n format.clipPath === defaultFormat.clipPath && format.firstLineIndent === defaultFormat.firstLineIndent &&\n format.horizontalScalingFactor === defaultFormat.horizontalScalingFactor &&\n format.lineAlignment === defaultFormat.lineAlignment\n && format.lineLimit === defaultFormat.lineLimit && format.lineSpacing === defaultFormat.lineSpacing &&\n format.measureTrailingSpaces === defaultFormat.measureTrailingSpaces && format.noClip === defaultFormat.noClip &&\n format.paragraphIndent === defaultFormat.paragraphIndent && format.rightToLeft === defaultFormat.rightToLeft &&\n format.subSuperScript === defaultFormat.subSuperScript && format.wordSpacing === defaultFormat.wordSpacing &&\n format.wordWrap === defaultFormat.wordWrap);\n };\n /**\n * `Raises BeforeCellDraw event`.\n * @private\n */\n PdfGridLayouter.prototype.RaiseBeforeCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, style) {\n var args = null;\n if (this.Grid.raiseBeginCellDraw) {\n args = new PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style);\n this.Grid.onBeginCellDraw(args);\n style = args.style;\n }\n return style;\n };\n /**\n * `Raises AfterCellDraw event`.\n * @private\n */\n PdfGridLayouter.prototype.raiseAfterCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, cellstyle) {\n var args = null;\n if (this.Grid.raiseEndCellDraw) {\n args = new PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, cellstyle);\n this.Grid.onEndCellDraw(args);\n }\n };\n PdfGridLayouter.prototype.reArrangePages = function (layoutedPages) {\n var document = this.currentPage.document;\n var pages = [];\n var keys = layoutedPages.keys();\n var values = layoutedPages.values();\n for (var i = 0; i < keys.length; i++) {\n var page = keys[i];\n page.section = null;\n pages.push(page);\n document.pages.remove(page);\n }\n /* tslint:disable */\n for (var i = 0; i < layoutedPages.size(); i++) {\n var count = 0;\n for (var j = i, count_1 = (layoutedPages.size() / this.columnRanges.length); j < layoutedPages.size(); j += count_1) {\n var page = pages[j];\n if (document.pages.indexOf(page) === -1) {\n document.pages.add(page);\n }\n }\n }\n /* tslint:enable */\n };\n /**\n * Gets the `layout result`.\n * @private\n */\n PdfGridLayouter.prototype.getLayoutResult = function () {\n if (this.Grid.isChildGrid && this.Grid.allowRowBreakAcrossPages) {\n for (var i = 0; i < this.Grid.rows.count; i++) {\n var row = this.Grid.rows.getRow(i);\n if (row.rowBreakHeight > 0 && row.repeatFlag) {\n this.startLocation.y = this.currentPage.origin.y;\n }\n }\n }\n var bounds;\n if (!this.isChanged) {\n bounds = new RectangleF(this.startLocation, new SizeF(this.currentBounds.width, this.currentBounds.y -\n this.startLocation.y));\n }\n // else {\n // bounds = new RectangleF(this.currentLocation, new SizeF(this.currentBounds.width, this.currentBounds.y -\n // this.currentLocation.y));\n // }\n /* tslint:enable */\n return new PdfGridLayoutResult(this.currentPage, bounds);\n };\n /**\n * `Recalculate row height` for the split cell to be drawn.\n * @private\n */\n PdfGridLayouter.prototype.ReCalculateHeight = function (row, height) {\n var newHeight = 0.0;\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n if (!(row.cells.getCell(i).remainingString === null || row.cells.getCell(i).remainingString === '' ||\n typeof row.cells.getCell(i).remainingString === 'undefined')) {\n newHeight = Math.max(newHeight, row.cells.getCell(i).measureHeight());\n }\n }\n return Math.max(height, newHeight);\n };\n /**\n * `Raises BeforePageLayout event`.\n * @private\n */\n PdfGridLayouter.prototype.raiseBeforePageLayout = function (currentPage, currentBounds, currentRow) {\n var cancel = false;\n if (this.Grid.raiseBeginPageLayout) {\n var args = new PdfGridBeginPageLayoutEventArgs(currentBounds, currentPage, currentRow);\n this.Grid.onBeginPageLayout(args);\n // if (currentBounds !== args.Bounds) {\n // this.isChanged = true;\n // this.currentLocation = new PointF(args.Bounds.x, args.Bounds.y);\n // this.measureColumnsWidth(new RectangleF(new PointF(args.Bounds.x, args.Bounds.y) ,\n // new SizeF(args.Bounds.width + args.Bounds.x ,\n // args.Bounds.height)));\n // }\n cancel = args.cancel;\n currentBounds = args.bounds;\n currentRow = args.startRowIndex;\n }\n return { returnValue: cancel, currentBounds: currentBounds, currentRowIndex: currentRow };\n };\n /**\n * `Raises PageLayout event` if needed.\n * @private\n */\n PdfGridLayouter.prototype.raisePageLayouted = function (result) {\n var args = new PdfGridEndPageLayoutEventArgs(result);\n if (this.Grid.raiseEndPageLayout) {\n this.Grid.onEndPageLayout(args);\n }\n return args;\n };\n PdfGridLayouter.prototype.drawRow = function (row, result, height) {\n if (typeof result === 'undefined') {\n //.. Check if required space available.\n //.....If the row conains spans which falls through more than one page, then draw the row to next page. \n var result_1 = new RowLayoutResult();\n var rowHeightWithSpan = 0;\n var location_3 = new PointF(0, 0);\n var size = new SizeF(0, 0);\n var isHeader = false;\n if (row.rowSpanExists) {\n var maxSpan = 0;\n var currRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n if (currRowIndex === -1) {\n currRowIndex = this.Grid.headers.indexOf(row);\n if (currRowIndex !== -1) {\n isHeader = true;\n }\n }\n for (var i = 0; i < row.cells.count; i++) {\n var cell = row.cells.getCell(i);\n maxSpan = Math.max(maxSpan, cell.rowSpan);\n }\n for (var i = currRowIndex; i < currRowIndex + maxSpan; i++) {\n rowHeightWithSpan += (isHeader ? this.Grid.headers.getHeader(i).height : this.Grid.rows.getRow(i).height);\n }\n // let rowMaxHeight : number = rowHeightWithSpan;\n // for (let i : number = 0; i < row.cells.count; i++ ) {\n // rowMaxHeight = rowMaxHeight > row.cells.getCell(i).height ? rowMaxHeight : row.cells.getCell(i).height;\n // }\n // let flag : boolean = true;\n // let nextRow : PdfGridRow = this.Grid.headers.getHeader(this.Grid.headers.indexOf(row) + 1);\n // for (let i : number = 0; i < nextRow.cells.count; i++ ) {\n // if (nextRow.cells.getCell(i).value !== '' && nextRow.cells.getCell(i).value !== undefined) {\n // flag = false;\n // break;\n // }\n // }\n // if ((rowMaxHeight > rowHeightWithSpan) && flag) {\n // row.height += (rowMaxHeight - rowHeightWithSpan);\n // } \n }\n var calculatedHeight = row.rowBreakHeight > 0.0 ? row.rowBreakHeight : row.height;\n if (this.Grid.isChildGrid && this.Grid.ParentCell != null) {\n //Split row only if row height exceeds page height and AllowRowBreakAcrossPages is true.\n // if (calculatedHeight + this.Grid.ParentCell.row.grid.style.cellPadding.bottom +\n // this.Grid.ParentCell.row.grid.style.cellPadding.top > this.currentPageBounds.height) {\n // if (this.Grid.allowRowBreakAcrossPages) {\n // result.isFinish = true;\n // if ( this.Grid.isChildGrid && row.rowBreakHeight > 0 ) {\n // if (this.Grid.ParentCell.row.grid.style.cellPadding !== null) {\n // this.currentBounds.y += this.Grid.ParentCell.row.grid.style.cellPadding.top;\n // }\n // this.currentBounds.x = this.startLocation.x;\n // }\n // result.bounds = this.currentBounds ;\n // this.drawRowWithBreak(result, row, calculatedHeight);\n // } else {\n // //If AllowRowBreakAcrossPages is not true, draw the row till it fits the page. \n // if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n // this.currentBounds.y += this.Grid.ParentCell.row.grid.style.cellPadding.top;\n // calculatedHeight = this.currentBounds.height - this.currentBounds.y -\n // this.Grid.ParentCell.row.grid.style.cellPadding.bottom;\n // }\n // result.isFinish = false;\n // this.drawRow( row, result, calculatedHeight);\n // }\n // } else\n if (this.currentBounds.y + this.Grid.ParentCell.row.grid.style.cellPadding.bottom + calculatedHeight >\n this.currentPageBounds.height || this.currentBounds.y + this.Grid.ParentCell.row.grid.style.cellPadding.bottom\n + calculatedHeight > this.currentBounds.height || this.currentBounds.y +\n this.Grid.ParentCell.row.grid.style.cellPadding.bottom + rowHeightWithSpan > this.currentPageBounds.height) {\n //If a row is repeated and still cannot fit in page, proceed draw.\n if (this.Grid.ParentCell.row.grid.LayoutFormat.break === PdfLayoutBreakType.FitPage) {\n PdfGridLayouter.repeatRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n this.Grid.splitChildRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n }\n if (PdfGridLayouter.repeatRowIndex > -1 && PdfGridLayouter.repeatRowIndex === row.rowIndex) {\n if (this.Grid.allowRowBreakAcrossPages) {\n result_1.isFinish = true;\n // if (this.Grid.isChildGrid && row.rowBreakHeightValue > 0) {\n // // if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n // // this.currentBounds.y += this.Grid.ParentCell.row.grid.style.cellPadding.top;\n // // }\n // this.currentBounds.x = this.startLocation.x;\n // }\n result_1.bounds = this.currentBounds;\n this.drawRowWithBreak(result_1, row, calculatedHeight);\n row.repeatFlag = true;\n row.repeatRowNumber = PdfGridLayouter.repeatRowIndex;\n }\n // else {\n // result.isFinish = false;\n // row.repeatFlag = false;\n // this.drawRow( row, result, calculatedHeight);\n // }\n }\n // else {\n // result.isFinish = false;\n // }\n }\n else {\n result_1.isFinish = true;\n if (row.grid.ParentCell.row.rowBreakHeightValue > 0) {\n row.repeatFlag = true;\n }\n else {\n row.repeatFlag = false;\n calculatedHeight = row.height;\n }\n if (this.Grid.isChildGrid && row.rowBreakHeight > 0) {\n if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n calculatedHeight += this.Grid.ParentCell.row.grid.style.cellPadding.bottom;\n }\n }\n this.drawRow(row, result_1, calculatedHeight);\n }\n }\n else {\n //Split row only if row height exceeds page height and AllowRowBreakAcrossPages is true.\n if (calculatedHeight > this.currentPageBounds.height) {\n if (this.Grid.allowRowBreakAcrossPages) {\n result_1.isFinish = true;\n //result.bounds = this.currentBounds;\n this.drawRowWithBreak(result_1, row, calculatedHeight);\n row.isrowFinish = true;\n row.repeatFlag = true;\n if (row.grid.splitChildRowIndex !== -1) {\n result_1.isFinish = false;\n }\n }\n // else {\n // //If AllowRowBreakAcrossPages is not true, draw the row till it fits the page.\n // result.isFinish = false;\n // this.drawRow( row, result, calculatedHeight);\n // }\n }\n else if (this.currentBounds.y + calculatedHeight > this.currentPageBounds.height ||\n this.currentBounds.y + calculatedHeight > (this.currentBounds.height + this.startLocation.y) ||\n this.currentBounds.y + rowHeightWithSpan > this.currentPageBounds.height) {\n // If a row is repeated and still cannot fit in page, proceed draw.\n if (this.Grid.LayoutFormat.break === PdfLayoutBreakType.FitPage) {\n PdfGridLayouter.repeatRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n }\n if (PdfGridLayouter.repeatRowIndex > -1 && PdfGridLayouter.repeatRowIndex === row.rowIndex) {\n if (this.Grid.allowRowBreakAcrossPages) {\n result_1.isFinish = true;\n this.drawRowWithBreak(result_1, row, calculatedHeight);\n row.repeatFlag = true;\n row.repeatRowNumber = PdfGridLayouter.repeatRowIndex;\n if (row.grid.splitChildRowIndex !== -1) {\n result_1.isFinish = false;\n }\n }\n // else {\n // result.isFinish = false;\n // this.drawRow(row, result, calculatedHeight);\n // }\n }\n else {\n result_1.isFinish = false;\n }\n }\n else {\n result_1.isFinish = true;\n this.drawRow(row, result_1, calculatedHeight);\n row.repeatFlag = false;\n }\n }\n return result_1;\n }\n else {\n var skipcell = false;\n var location_4 = new PointF(this.currentBounds.x, this.currentBounds.y);\n // if (row.grid.isChildGrid && row.grid.allowRowBreakAcrossPages && this.startLocation.x !== this.currentBounds.x && row.width <\n // this.currentPage.getClientSize().width) {\n // location.x = this.startLocation.x;\n // }\n result.bounds = new RectangleF(location_4, new SizeF(0, 0));\n height = this.ReCalculateHeight(row, height);\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n var cancelSpans = ((i > this.cellEndIndex + 1) && (row.cells.getCell(i).columnSpan > 1));\n // let cancelSpans : boolean = false;\n if (!cancelSpans) {\n for (var j = 1; j < row.cells.getCell(i).columnSpan; j++) {\n row.cells.getCell(i + j).isCellMergeContinue = true;\n }\n }\n var size = new SizeF(this.Grid.columns.getColumn(i).width, height);\n // if (size.width > this.currentGraphics.clientSize.width) {\n // size.width = this.currentGraphics.clientSize.width;\n // }\n // if (this.Grid.isChildGrid && this.Grid.style.allowHorizontalOverflow) {\n // if (size.width >= this.currentGraphics.clientSize.width) {\n // size.width -= 2 * this.currentBounds.x;\n // }\n // }\n /* tslint:disable */\n if (!this.CheckIfDefaultFormat(this.Grid.columns.getColumn(i).format) &&\n this.CheckIfDefaultFormat(row.cells.getCell(i).stringFormat)) {\n row.cells.getCell(i).stringFormat = this.Grid.columns.getColumn(i).format;\n }\n var cellstyle = row.cells.getCell(i).style;\n var tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n row.cells.getCell(i).style = this.RaiseBeforeCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_4, size), tempValue, cellstyle);\n //row.cells.getCell(i).style = cellstyle;\n if (!skipcell) {\n if (row.cells.getCell(i).value instanceof PdfGrid) {\n var grid = row.cells.getCell(i).value;\n grid.parentCellIndex = i;\n }\n var stringResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location_4, size), cancelSpans);\n if (row.grid.style.allowHorizontalOverflow && (row.cells.getCell(i).columnSpan > this.cellEndIndex ||\n i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1) && this.cellEndIndex < row.cells.count - 1) {\n row.rowOverflowIndex = this.cellEndIndex;\n }\n if (row.grid.style.allowHorizontalOverflow && (row.rowOverflowIndex > 0 && (row.cells.getCell(i).columnSpan >\n this.cellEndIndex || i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1)) &&\n row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1 > 0) {\n row.cells.getCell(row.rowOverflowIndex + 1).value = stringResult !== null ? (stringResult.remainder !== undefined) ?\n stringResult.remainder : '' : '';\n row.cells.getCell(row.rowOverflowIndex + 1).stringFormat = row.cells.getCell(i).stringFormat;\n row.cells.getCell(row.rowOverflowIndex + 1).style = row.cells.getCell(i).style;\n row.cells.getCell(row.rowOverflowIndex + 1).columnSpan = row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1;\n }\n }\n /* tslint:enable */\n tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n if (!cancelSpans) {\n this.raiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_4, size), tempValue, row.cells.getCell(i).style);\n }\n if (row.cells.getCell(i).value instanceof PdfGrid) {\n var grid = row.cells.getCell(i).value;\n if (this.Grid.columns.getColumn(i).width >= this.currentGraphics.clientSize.width) {\n location_4.x = grid.rowLayoutBoundsWidth;\n location_4.x += grid.style.cellSpacing;\n }\n else {\n location_4.x += this.Grid.columns.getColumn(i).width;\n }\n }\n else {\n location_4.x += this.Grid.columns.getColumn(i).width;\n }\n }\n if (!row.rowMergeComplete || row.isRowHeightSet) {\n this.currentBounds.y += height;\n }\n result.bounds = new RectangleF(new PointF(result.bounds.x, result.bounds.y), new SizeF(location_4.x, location_4.y));\n }\n };\n PdfGridLayouter.prototype.drawRowWithBreak = function (result, row, calculateHeight) {\n var location = new PointF(this.currentBounds.x, this.currentBounds.y);\n if (row.grid.isChildGrid && row.grid.allowRowBreakAcrossPages && this.startLocation.x !== this.currentBounds.x) {\n location.x = this.startLocation.x;\n }\n result.bounds = new RectangleF(location, new SizeF(0, 0));\n this.gridHeight = row.rowBreakHeight > 0 ? this.currentPageBounds.height : 0;\n // Calculate the remaining height.\n if (row.grid.style.cellPadding.top + this.currentBounds.y + row.grid.style.cellPadding.bottom < this.currentPageBounds.height) {\n row.rowBreakHeight = this.currentBounds.y + calculateHeight - this.currentPageBounds.height;\n }\n // else {\n // row.rowBreakHeight = calculateHeight;\n // result.isFinish = false;\n // return;\n // }\n // No need to explicit break if the row height is equal to grid height.\n for (var i = 0; i < row.cells.count; i++) {\n var cell = row.cells.getCell(i);\n var cellHeight = cell.measureHeight();\n if (cellHeight === calculateHeight && cell.value instanceof PdfGrid) {\n row.rowBreakHeight = 0;\n }\n // else if (cellHeight === calculateHeight && (cell.value as PdfGrid) === null) {\n // row.rowBreakHeight = this.currentBounds.y + calculateHeight - this.currentPageBounds.height;\n // }\n }\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n var cancelSpans = ((row.cells.getCell(i).columnSpan + i > this.cellEndIndex + 1) &&\n (row.cells.getCell(i).columnSpan > 1));\n // if (!cancelSpans) {\n // for (let k : number = 1; k < row.cells.getCell(i).columnSpan; k++) {\n // row.cells.getCell(i + k).isCellMergeContinue = true;\n // }\n //}\n var size = new SizeF(this.Grid.columns.getColumn(i).width, this.gridHeight > 0.0 ? this.gridHeight :\n this.currentPageBounds.height);\n // if (size.width === 0) {\n // size = new SizeF(row.cells.getCell(i).width, size.height);\n // }\n // if (!this.CheckIfDefaultFormat(this.Grid.columns.getColumn(i).format) &&\n // this.CheckIfDefaultFormat((row.cells.getCell(i).stringFormat))) {\n // row.cells.getCell(i).stringFormat = this.Grid.columns.getColumn(i).format;\n // }\n var cellstyle1 = row.cells.getCell(i).style;\n row.cells.getCell(i).style = cellstyle1;\n var skipcell = false;\n var stringResult = null;\n if (!skipcell) {\n stringResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location, size), cancelSpans);\n }\n //If still row is to be drawn, set cell finished drawing cell as false and update the text to be drawn.\n if (row.rowBreakHeight > 0.0) {\n if (stringResult != null) {\n row.cells.getCell(i).FinishedDrawingCell = false;\n row.cells.getCell(i).remainingString = stringResult.remainder == null ? ' ' : stringResult.remainder;\n if (row.grid.isChildGrid) {\n row.rowBreakHeight = calculateHeight - stringResult.actualSize.height;\n }\n }\n }\n result.isFinish = (!result.isFinish) ? result.isFinish : row.cells.getCell(i).FinishedDrawingCell;\n // let tempValue : string = ((typeof row.cells.getCell(i).value === 'string' &&\n //row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '') as string;\n // if (!cancelSpans) {\n // // this.raiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i,\n // // new RectangleF(location, size), tempValue, row.cells.getCell(i).style); \n // this.raiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location, size),\n // (row.cells.getCell(i).value as string) ? row.cells.getCell(i).value.toString() : ' ',\n // row.cells.getCell(i).style);\n // } \n if (row.cells.getCell(i).value instanceof PdfGrid) {\n var grid = row.cells.getCell(i).value;\n this.rowBreakPageHeightCellIndex = i;\n // row.cells.getCell(i).pageCount = grid.listOfNavigatePages.length;\n // for (let j : number = 0;j= this.currentGraphics.clientSize.width) {\n location.x = this.rowLayoutBoundsWidth;\n location.x += grid.style.cellSpacing;\n }\n else {\n location.x += this.Grid.columns.getColumn(i).width;\n }\n }\n else {\n location.x += this.Grid.columns.getColumn(i).width;\n }\n }\n this.currentBounds.y += this.gridHeight > 0.0 ? this.gridHeight : calculateHeight;\n result.bounds = new RectangleF(new PointF(result.bounds.x, result.bounds.y), new SizeF(location.x, location.y));\n };\n /**\n * @hidden\n * @private\n */\n PdfGridLayouter.repeatRowIndex = -1;\n return PdfGridLayouter;\n}(ElementLayouter));\nexport { PdfGridLayouter };\n// recalculateBounds : boolean, clientSize : SizeF\n//Implementation\n/**\n * `Initializes` internal data.\n * @private\n */\n//Internal declaration\nvar PdfGridLayoutResult = /** @class */ (function (_super) {\n __extends(PdfGridLayoutResult, _super);\n /**\n * Constructor\n * @private\n */\n function PdfGridLayoutResult(page, bounds) {\n return _super.call(this, page, bounds) || this;\n }\n return PdfGridLayoutResult;\n}(PdfLayoutResult));\nexport { PdfGridLayoutResult };\n/**\n * `PdfGridLayoutFormat` class represents a flexible grid that consists of columns and rows.\n */\nvar PdfGridLayoutFormat = /** @class */ (function (_super) {\n __extends(PdfGridLayoutFormat, _super);\n /**\n * Initializes a new instance of the `PdfGridLayoutFormat` class.\n * @private\n */\n function PdfGridLayoutFormat(baseFormat) {\n var _this = this;\n if (typeof baseFormat === 'undefined') {\n _this = _super.call(this) || this;\n }\n else {\n _this = _super.call(this, baseFormat) || this;\n }\n return _this;\n }\n return PdfGridLayoutFormat;\n}(PdfLayoutFormat));\nexport { PdfGridLayoutFormat };\nvar GridCellEventArgs = /** @class */ (function () {\n // Constructors\n /**\n * Initialize a new instance for `GridCellEventArgs` class.\n * @private\n */\n function GridCellEventArgs(graphics, rowIndex, cellIndex, bounds, value) {\n this.gridRowIndex = rowIndex;\n this.gridCellIndex = cellIndex;\n this.internalValue = value;\n this.gridBounds = bounds;\n this.pdfGraphics = graphics;\n }\n Object.defineProperty(GridCellEventArgs.prototype, \"rowIndex\", {\n // Properties\n /**\n * Gets the value of current `row index`.\n * @private\n */\n get: function () {\n return this.gridRowIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"cellIndex\", {\n /**\n * Gets the value of current `cell index`.\n * @private\n */\n get: function () {\n return this.gridCellIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"value\", {\n /**\n * Gets the actual `value` of current cell.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of current cell.\n * @private\n */\n get: function () {\n return this.gridBounds;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"graphics\", {\n /**\n * Gets the instance of `current graphics`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n return GridCellEventArgs;\n}());\nexport { GridCellEventArgs };\nvar PdfGridBeginCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StartCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.style = style;\n return _this;\n }\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"skip\", {\n // Properties\n /**\n * Gets or sets a value indicating whether the value of this cell should be `skipped`.\n * @private\n */\n get: function () {\n return this.bSkip;\n },\n set: function (value) {\n this.bSkip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"style\", {\n /**\n * Gets or sets a `style` value of the cell.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridBeginCellDrawEventArgs };\nvar PdfGridEndCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfGridEndCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.cellStyle = style;\n return _this;\n }\n Object.defineProperty(PdfGridEndCellDrawEventArgs.prototype, \"style\", {\n // Propertise\n /**\n * Get the `PdfGridCellStyle`.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridEndCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridEndCellDrawEventArgs };\nvar PdfCancelEventArgs = /** @class */ (function () {\n function PdfCancelEventArgs() {\n }\n Object.defineProperty(PdfCancelEventArgs.prototype, \"cancel\", {\n // Properties\n /**\n * Gets and Sets the value of `cancel`.\n * @private\n */\n get: function () {\n return this.isCancel;\n },\n set: function (value) {\n this.isCancel = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCancelEventArgs;\n}());\nexport { PdfCancelEventArgs };\nvar BeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(BeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `BeginPageLayoutEventArgs` class with the specified rectangle and page.\n * @private\n */\n function BeginPageLayoutEventArgs(bounds, page) {\n var _this = _super.call(this) || this;\n _this.bounds = bounds;\n _this.pdfPage = page;\n return _this;\n }\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"bounds\", {\n // Properties\n /**\n * Gets or sets value that indicates the lay outing `bounds` on the page.\n * @private\n */\n get: function () {\n return this.cellBounds;\n },\n set: function (value) {\n this.cellBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"page\", {\n /**\n * Gets the `page` where the lay outing should start.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return BeginPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { BeginPageLayoutEventArgs };\n/**\n * `EndPageLayoutEventArgs` class is alternate for end page layout events.\n */\nvar EndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(EndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `EndPageLayoutEventArgs` class. with the specified 'PdfLayoutResult'.\n * @private\n */\n function EndPageLayoutEventArgs(result) {\n var _this = _super.call(this) || this;\n _this.layoutResult = result;\n return _this;\n }\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"result\", {\n // Properties\n /**\n * Gets the lay outing `result` of the page.\n * @private\n */\n get: function () {\n return this.layoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"nextPage\", {\n /**\n * Gets or sets a value indicating the `next page` where the element should be layout.\n * @private\n */\n get: function () {\n return this.nextPdfPage;\n },\n set: function (value) {\n this.nextPdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n return EndPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { EndPageLayoutEventArgs };\n/**\n * `PdfGridBeginPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridBeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridBeginPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginPageLayoutEventArgs(bounds, page, startRow) {\n var _this = _super.call(this, bounds, page) || this;\n _this.startRow = startRow;\n return _this;\n }\n Object.defineProperty(PdfGridBeginPageLayoutEventArgs.prototype, \"startRowIndex\", {\n // Properties\n /**\n * Gets the `start row index`.\n * @private\n */\n get: function () {\n return this.startRow;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginPageLayoutEventArgs;\n}(BeginPageLayoutEventArgs));\nexport { PdfGridBeginPageLayoutEventArgs };\n/**\n * `PdfGridEndPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridEndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridEndPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndPageLayoutEventArgs(result) {\n return _super.call(this, result) || this;\n }\n return PdfGridEndPageLayoutEventArgs;\n}(EndPageLayoutEventArgs));\nexport { PdfGridEndPageLayoutEventArgs };\nvar RowLayoutResult = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `RowLayoutResult` class.\n * @private\n */\n function RowLayoutResult() {\n this.layoutedBounds = new RectangleF(0, 0, 0, 0);\n }\n Object.defineProperty(RowLayoutResult.prototype, \"isFinish\", {\n /**\n * Gets or sets a value indicating whether this instance `is finish`.\n * @private\n */\n get: function () {\n return this.bIsFinished;\n },\n set: function (value) {\n this.bIsFinished = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RowLayoutResult.prototype, \"bounds\", {\n /**\n * Gets or sets the `bounds`.\n * @private\n */\n get: function () {\n return this.layoutedBounds;\n },\n set: function (value) {\n this.layoutedBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n return RowLayoutResult;\n}());\nexport { RowLayoutResult };\n","import { print as printWindow, createElement, isNullOrUndefined, Browser, SvgRenderer } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap, SizeF } from '@syncfusion/ej2-pdf-export';\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the accumulation and chart elements\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWindow.moveTo(0, 0);\n this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n };\n this.control.trigger(beforePrint, argsData);\n if (!argsData.cancel) {\n printWindow(argsData.htmlContent, this.printWindow);\n }\n };\n /**\n * To get the html string of the chart and accumulation\n * @param elements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (elements) {\n var div = createElement('div');\n if (elements) {\n if (elements instanceof Array) {\n elements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (elements instanceof Element) {\n div.appendChild(elements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(elements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (type, fileName, orientation, controls, width, height) {\n var _this = this;\n var controlValue = this.getControlsValue(controls);\n width = width ? width : controlValue.width;\n height = height ? height : controlValue.height;\n var element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': width.toString(),\n 'height': height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n controlValue.svg.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(controlValue.svg)], { type: 'image/svg+xml' }));\n if (type === 'SVG') {\n this.triggerDownload(fileName, type, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = element.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (type === 'PDF') {\n var document_1 = new PdfDocument();\n var margin = document_1.pageSettings.margins;\n var pdfDefaultWidth = document_1.pageSettings.width;\n var pdfDefaultHeight = document_1.pageSettings.height;\n var exactWidth = void 0;\n var exactHeight = void 0;\n var imageString = element.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n exactWidth = (pdfDefaultWidth < width) ? (width + margin.left + margin.right) : pdfDefaultWidth;\n exactHeight = (pdfDefaultHeight < height) ? (height + margin.top + margin.bottom) : pdfDefaultHeight;\n document_1.pageSettings.size = new SizeF(exactWidth, exactHeight);\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, width, height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n if (window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(element.msToBlob(), fileName + '.' + type.toLocaleLowerCase());\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, type, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + type.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n /**\n * To get the maximum size value\n * @param controls\n * @param name\n */\n ExportUtils.prototype.getControlsValue = function (controls) {\n var width = 0;\n var height = 0;\n var content = '';\n var svgObject = new SvgRenderer('').createSvg({\n id: 'Svg_Export_Element',\n width: 200, height: 200\n });\n controls.map(function (control) {\n var svg = control.svgObject.cloneNode(true);\n var groupEle = control.renderer.createGroup({\n style: 'transform: translateY(' + height + 'px)'\n });\n groupEle.appendChild(svg);\n width = Math.max(control.availableSize.width, width);\n height += control.availableSize.height;\n content += control.svgObject.outerHTML;\n svgObject.appendChild(groupEle);\n });\n svgObject.setAttribute('width', width + '');\n svgObject.setAttribute('height', height + '');\n return {\n 'width': width,\n 'height': height,\n 'svg': svgObject\n };\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { L10n } from '@syncfusion/ej2-base';\nimport { ChildProperty } from '@syncfusion/ej2-base';\nimport { remove, extend } from '@syncfusion/ej2-base';\nimport { Browser, Touch } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection } from '@syncfusion/ej2-base';\nimport { findClipRect, measureText, TextOption, showTooltip, removeElement, appendChildElement } from '../common/utils/helper';\nimport { textElement, RectOption, createSvg, firstToLowerCase, titlePositionX, redrawElement } from '../common/utils/helper';\nimport { appendClipElement } from '../common/utils/helper';\nimport { getSeriesColor, Theme, getThemeColor } from '../common/model/theme';\nimport { Margin, Border, ChartArea, Font, Indexes, TooltipSettings } from '../common/model/base';\nimport { Row, Column, Axis } from './axis/axis';\nimport { CartesianAxisLayoutPanel } from './axis/cartesian-panel';\nimport { Size, Rect } from '../common/utils/helper';\nimport { ChartData } from './utils/get-data';\nimport { Series } from './series/chart-series';\nimport { Data } from '../common/model/data';\nimport { Marker } from './series/marker';\nimport { LegendSettings } from '../common/legend/legend';\nimport { TechnicalIndicator } from './technical-indicators/technical-indicator';\nimport { chartMouseClick, pointClick, pointMove, chartMouseLeave, resized } from '../common/model/constants';\nimport { chartMouseDown, chartMouseMove, chartMouseUp, load } from '../common/model/constants';\nimport { ExportUtils } from '../common/utils/export';\nimport { ChartAnnotationSettings } from './model/chart-base';\nimport { getElement, getTitle } from '../common/utils/helper';\n/**\n * Configures the crosshair in the chart.\n */\nvar CrosshairSettings = /** @class */ (function (_super) {\n __extends(CrosshairSettings, _super);\n function CrosshairSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], CrosshairSettings.prototype, \"enable\", void 0);\n __decorate([\n Complex({ color: null, width: 1 }, Border)\n ], CrosshairSettings.prototype, \"line\", void 0);\n __decorate([\n Property('Both')\n ], CrosshairSettings.prototype, \"lineType\", void 0);\n return CrosshairSettings;\n}(ChildProperty));\nexport { CrosshairSettings };\n/**\n * Configures the zooming behavior for the chart.\n */\nvar ZoomSettings = /** @class */ (function (_super) {\n __extends(ZoomSettings, _super);\n function ZoomSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableSelectionZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enablePinchZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableMouseWheelZooming\", void 0);\n __decorate([\n Property(true)\n ], ZoomSettings.prototype, \"enableDeferredZooming\", void 0);\n __decorate([\n Property('XY')\n ], ZoomSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(['Zoom', 'ZoomIn', 'ZoomOut', 'Pan', 'Reset'])\n ], ZoomSettings.prototype, \"toolbarItems\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enablePan\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableScrollbar\", void 0);\n return ZoomSettings;\n}(ChildProperty));\nexport { ZoomSettings };\n/**\n * Represents the Chart control.\n * ```html\n *
\n * \n * ```\n */\nvar Chart = /** @class */ (function (_super) {\n __extends(Chart, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Chart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.chartAreaType = 'Cartesian';\n _this.chartid = 57723;\n return _this;\n }\n /**\n * Initialize the event handler.\n */\n Chart.prototype.preRender = function () {\n this.unWireEvents();\n this.initPrivateVariable();\n this.setCulture();\n this.wireEvents();\n };\n Chart.prototype.initPrivateVariable = function () {\n this.animateSeries = true;\n this.delayRedraw = false;\n this.horizontalAxes = [];\n this.verticalAxes = [];\n this.refreshAxis();\n this.refreshDefinition(this.rows);\n this.refreshDefinition(this.columns);\n if (this.tooltipModule) {\n this.tooltipModule.previousPoints = [];\n }\n if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-chart').length;\n this.element.id = 'chart_' + this.chartid + '_' + collection;\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Chart.prototype.render = function () {\n this.trigger(load, { chart: this });\n this.createChartSvg();\n this.setTheme();\n this.markerRender = new Marker(this);\n this.calculateAreaType();\n this.calculateVisibleSeries();\n this.initTechnicalIndicators();\n this.initTrendLines();\n this.calculateVisibleAxis();\n this.processData();\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Chart.prototype.getLocalizedLabel = function (key) {\n return this.localeObject.getConstant(key);\n };\n /**\n * Refresh the chart bounds.\n * @private\n */\n Chart.prototype.refreshBound = function () {\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.getLegendOptions(this.visibleSeries, this);\n }\n this.calculateStackValues();\n this.calculateBounds();\n this.renderElements();\n removeElement('chartmeasuretext');\n };\n /**\n * To calcualte the stack values\n */\n Chart.prototype.calculateStackValues = function () {\n var series;\n var isCalculateStacking = false;\n for (var i = 0, len = this.visibleSeries.length; i < len; i++) {\n series = this.visibleSeries[i];\n series.position = series.rectCount = undefined;\n if (((series.type.indexOf('Stacking') !== -1) || (series.drawType.indexOf('Stacking') !== -1\n && this.chartAreaType === 'PolarRadar')) && !isCalculateStacking) {\n series.calculateStackedValue(series.type.indexOf('100') > -1, this);\n isCalculateStacking = true;\n }\n }\n };\n Chart.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.renderAreaBorder();\n var axisElement = this.renderAxes();\n this.renderSeriesElements(axisElement);\n this.renderLegend();\n this.applyZoomkit();\n this.performSelection();\n this.setSecondaryElementPosition();\n this.renderAnnotation();\n };\n /**\n * To render the legend\n * @private\n */\n Chart.prototype.renderAxes = function () {\n this.yAxisElements = this.renderer.createGroup({ id: this.element.id + 'yAxisCollection' });\n var axisElement;\n if (this.rows.length > 0 && this.columns.length > 0) {\n axisElement = this.chartAxisLayoutPanel.renderAxes();\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Behind', this.axisCollections);\n }\n return axisElement;\n };\n /**\n * To render the legend\n */\n Chart.prototype.renderLegend = function () {\n if (this.legendModule && this.legendModule.legendCollections.length) {\n this.legendModule.renderLegend(this, this.legendSettings, this.legendModule.legendBounds);\n }\n if (!this.redraw) {\n this.element.appendChild(this.svgObject);\n }\n };\n /**\n * To set the left and top position for data label template for center aligned chart\n */\n Chart.prototype.setSecondaryElementPosition = function () {\n var element = getElement(this.element.id + '_Secondary_Element');\n if (!element) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n element.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n element.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n Chart.prototype.initializeModuleElements = function () {\n this.dataLabelCollections = [];\n this.seriesElements = this.renderer.createGroup({ id: this.element.id + 'SeriesCollection' });\n if (this.indicators.length) {\n this.indicatorElements = this.renderer.createGroup({ id: this.element.id + 'IndicatorCollection' });\n }\n if (this.hasTrendlines()) {\n this.trendLineElements = this.renderer.createGroup({ id: this.element.id + 'TrendLineCollection' });\n }\n this.dataLabelElements = this.renderer.createGroup({ id: this.element.id + 'DataLabelCollection' });\n };\n Chart.prototype.hasTrendlines = function () {\n var isTrendline;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n isTrendline = series.trendlines.length ? true : false;\n if (isTrendline) {\n break;\n }\n }\n return isTrendline;\n };\n Chart.prototype.renderSeriesElements = function (axisElement) {\n // Initialize the series elements values\n this.initializeModuleElements();\n var tooltipDiv = redrawElement(this.redraw, this.element.id + '_Secondary_Element') ||\n this.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n appendChildElement(this.element, tooltipDiv, this.redraw);\n // For userInteraction\n if (this.tooltip.enable) {\n appendChildElement(this.svgObject, this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }), this.redraw);\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.initializeIndicator();\n this.initializeTrendLine();\n this.renderSeries();\n this.appendElementsAfterSeries(axisElement);\n }\n };\n /**\n * @private\n */\n Chart.prototype.renderSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible) {\n findClipRect(item);\n item.renderSeries(this);\n }\n }\n var options = {\n 'id': this.element.id + '_ChartAreaClipRect_',\n 'x': this.chartAxisLayoutPanel.seriesClipRect.x,\n 'y': this.chartAxisLayoutPanel.seriesClipRect.y,\n 'width': this.chartAxisLayoutPanel.seriesClipRect.width,\n 'height': this.chartAxisLayoutPanel.seriesClipRect.height,\n 'fill': 'transparent',\n 'stroke-width': 1,\n 'stroke': 'Gray'\n };\n this.seriesElements.appendChild(appendClipElement(this.redraw, options, this.renderer));\n appendChildElement(this.svgObject, this.seriesElements, this.redraw);\n };\n Chart.prototype.initializeIndicator = function () {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (this[firstToLowerCase(indicator.type) + 'IndicatorModule']) {\n this[firstToLowerCase(indicator.type) + 'IndicatorModule'].createIndicatorElements(this, indicator, indicator.index);\n }\n }\n if (this.indicatorElements) {\n appendChildElement(this.svgObject, this.indicatorElements, this.redraw);\n }\n };\n Chart.prototype.initializeTrendLine = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.trendlines.length) {\n this.trendLineModule.getTrendLineElements(series, this);\n }\n }\n if (this.trendLineElements) {\n appendChildElement(this.svgObject, this.trendLineElements, this.redraw);\n }\n };\n Chart.prototype.appendElementsAfterSeries = function (axisElement) {\n if (this.chartAreaType === 'PolarRadar') {\n appendChildElement(this.svgObject, this.yAxisElements, this.redraw);\n }\n appendChildElement(this.svgObject, axisElement, this.redraw);\n if (this.zoomModule && this.zoomSettings.enableScrollbar && this.scrollElement.childElementCount) {\n appendChildElement(getElement(this.element.id + '_Secondary_Element'), this.scrollElement, this.redraw);\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Over', this.axisCollections);\n }\n if (!this.tooltip.enable) {\n appendChildElement(this.svgObject, this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }), this.redraw);\n }\n };\n Chart.prototype.applyZoomkit = function () {\n if (!this.redraw && this.zoomModule && this.zoomModule.isZoomed &&\n (!this.zoomSettings.enablePan || this.zoomModule.performedUI)) {\n this.zoomModule.applyZoomToolkit(this, this.axisCollections);\n }\n };\n /**\n * Render annotation perform here\n * @param redraw\n * @private\n */\n Chart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n Chart.prototype.performSelection = function () {\n var selectedDataIndexes = [];\n if (this.selectionModule) {\n selectedDataIndexes = extend([], this.selectionModule.selectedDataIndexes, null, true);\n this.selectionModule.invokeSelection(this);\n }\n if (selectedDataIndexes.length > 0) {\n this.selectionModule.selectedDataIndexes = selectedDataIndexes;\n this.selectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n Chart.prototype.processData = function (render) {\n if (render === void 0) { render = true; }\n var series;\n this.visibleSeriesCount = 0;\n var check = true;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (!series_1.visible && !this.legendSettings.visible) {\n this.visibleSeriesCount++;\n continue;\n }\n if (series_1.category !== 'Indicator' && series_1.category !== 'TrendLine') {\n this.initializeDataModule(series_1);\n }\n }\n for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n var indicator = _c[_b];\n if (indicator.dataSource) {\n var techIndicator = indicator;\n this.initializeDataModule(techIndicator);\n check = false;\n }\n }\n if (render && (!this.visibleSeries.length || this.visibleSeriesCount === this.visibleSeries.length && check)) {\n this.refreshBound();\n this.trigger('loaded', { chart: this });\n }\n };\n Chart.prototype.initializeDataModule = function (series) {\n series.xData = [];\n series.yData = [];\n series.dataModule = new Data(series.dataSource || this.dataSource, series.query);\n series.points = [];\n series.refreshDataManager(this);\n };\n Chart.prototype.calculateBounds = function () {\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n var subTitleHeight = 0;\n var titleWidth = 0;\n var padding = 15;\n var left = margin.left;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n this.titleCollection = [];\n this.subTitleCollection = [];\n if (this.title) {\n this.titleCollection = getTitle(this.title, this.titleStyle, width);\n titleHeight = (measureText(this.title, this.titleStyle).height * this.titleCollection.length) + padding;\n if (this.subTitle) {\n var maxWidth = 0;\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n this.subTitleCollection = getTitle(this.subTitle, this.subTitleStyle, maxWidth);\n subTitleHeight = (measureText(this.subTitle, this.subTitleStyle).height * this.subTitleCollection.length) +\n padding;\n }\n }\n var top = margin.top + subTitleHeight + titleHeight + this.chartArea.border.width / 2;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n this.initialClipRect = new Rect(left, top, width, height);\n if (this.legendModule) {\n this.legendModule.calculateLegendBounds(this.initialClipRect, this.availableSize);\n }\n this.chartAxisLayoutPanel.measureAxis(this.initialClipRect);\n };\n /**\n * Handles the print method for chart control.\n */\n Chart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n Chart.prototype.export = function (type, fileName, orientation, controls, width, height) {\n var exportChart = new ExportUtils(this);\n controls = controls ? controls : [this];\n exportChart.export(type, fileName, orientation, controls, width, height);\n };\n /**\n * Defines the trendline initialization\n */\n Chart.prototype.initTrendLines = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n var trendIndex = 0;\n for (var _b = 0, _c = series.trendlines; _b < _c.length; _b++) {\n var trendline = _c[_b];\n var trendLine = trendline;\n var type = firstToLowerCase(trendLine.type);\n if (this.trendLineModule) {\n trendLine.index = trendIndex;\n trendLine.sourceIndex = series.index;\n this.trendLineModule.initSeriesCollection(trendLine, this);\n if (trendLine.targetSeries) {\n trendLine.targetSeries.xAxisName = series.xAxisName;\n trendLine.targetSeries.yAxisName = series.yAxisName;\n this.visibleSeries.push(trendLine.targetSeries);\n }\n }\n trendIndex++;\n }\n }\n };\n Chart.prototype.calculateAreaType = function () {\n var series = this.series[0];\n if (series) {\n this.requireInvertedAxis = ((series.type.indexOf('Bar') !== -1) && !this.isTransposed) ||\n ((series.type.indexOf('Bar') === -1) && this.isTransposed && this.chartAreaType !== 'PolarRadar');\n }\n this.chartAxisLayoutPanel = this.chartAreaType === 'PolarRadar' ? (this.polarSeriesModule || this.radarSeriesModule)\n : new CartesianAxisLayoutPanel(this);\n };\n /**\n * Calculate the visible axis\n * @private\n */\n Chart.prototype.calculateVisibleAxis = function () {\n var axis;\n var series;\n var axes = [this.primaryXAxis, this.primaryYAxis];\n axes = this.chartAreaType === 'Cartesian' ? axes.concat(this.axes) : axes;\n if (this.paretoSeriesModule) {\n axes = axes.concat(this.paretoSeriesModule.paretoAxes);\n }\n this.axisCollections = [];\n if (this.zoomModule) {\n this.zoomModule.isPanning = this.zoomModule.isAxisZoomed(axes) && this.zoomSettings.enablePan;\n this.svgObject.setAttribute('cursor', this.zoomModule.isPanning ? 'pointer' : 'auto');\n if (this.scrollBarModule) {\n this.scrollBarModule.axes = axes;\n }\n }\n for (var i = 0, len = axes.length; i < len; i++) {\n axis = axes[i];\n axis.series = [];\n axis.labels = [];\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series_2 = _a[_i];\n this.initAxis(series_2, axis, true);\n }\n for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n var indicator = _c[_b];\n this.initAxis(indicator, axis, false);\n }\n if (this.scrollBarModule) {\n this.scrollBarModule.injectTo(axis, this);\n }\n if (axis.orientation != null) {\n this.axisCollections.push(axis);\n }\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.chartAxisLayoutPanel.measure();\n }\n };\n Chart.prototype.initAxis = function (series, axis, isSeries) {\n if (series.xAxisName === axis.name || (series.xAxisName == null && axis.name === 'primaryXAxis')) {\n axis.orientation = this.requireInvertedAxis ? 'Vertical' : 'Horizontal';\n series.xAxis = axis;\n if (isSeries) {\n axis.series.push(series);\n }\n }\n else if (series.yAxisName === axis.name || (series.yAxisName == null && axis.name === 'primaryYAxis')) {\n axis.orientation = this.requireInvertedAxis ? 'Horizontal' : 'Vertical';\n series.yAxis = axis;\n if (isSeries) {\n axis.series.push(series);\n }\n }\n };\n Chart.prototype.initTechnicalIndicators = function () {\n var i = 0;\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n var techIndicator = indicator;\n var type = firstToLowerCase(techIndicator.type);\n if (this[type + 'IndicatorModule']) {\n techIndicator.index = i;\n this[type + 'IndicatorModule'].initSeriesCollection(techIndicator, this);\n for (var _b = 0, _c = techIndicator.targetSeries; _b < _c.length; _b++) {\n var targetSeries = _c[_b];\n if (indicator.seriesName || indicator.dataSource) {\n this.visibleSeries.push(targetSeries);\n }\n }\n }\n i++;\n }\n };\n /** @private */\n Chart.prototype.refreshTechnicalIndicator = function (series) {\n if (this.indicators.length) {\n var targetIndicator = null;\n if (series instanceof Series && series.category !== 'Indicator') {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (indicator.seriesName === series.name && !indicator.dataSource) {\n targetIndicator = indicator;\n targetIndicator.setDataSource(series, this);\n }\n }\n }\n else if (series instanceof TechnicalIndicator) {\n targetIndicator = series;\n targetIndicator.setDataSource(series instanceof Series ? series : null, this);\n }\n }\n };\n Chart.prototype.calculateVisibleSeries = function () {\n var series;\n this.visibleSeries = [];\n var colors = this.palettes.length ? this.palettes : getSeriesColor(this.theme);\n var count = colors.length;\n for (var i = 0, len = this.series.length; i < len; i++) {\n series = this.series[i];\n series.index = i;\n series.interior = series.fill || colors[i % count];\n switch (series.type) {\n case 'Bar':\n case 'StackingBar':\n case 'StackingBar100':\n if (this.series[0].type.indexOf('Bar') === -1) {\n continue;\n }\n break;\n case 'Polar':\n case 'Radar':\n if (this.chartAreaType !== 'PolarRadar') {\n continue;\n }\n if (this.chartAreaType === 'PolarRadar' && ((series.xAxisName === null && series.yAxisName !== null) ||\n (series.xAxisName !== null && series.yAxisName === null) ||\n (series.xAxisName !== null && series.yAxisName !== null))) {\n continue;\n }\n break;\n case 'Pareto':\n this.visibleSeries.push(series);\n this.paretoSeriesModule.initSeries(series, this);\n continue;\n default:\n if (this.chartAreaType === 'PolarRadar' || this.series[0].type.indexOf('Bar') > -1) {\n continue;\n }\n break;\n }\n this.visibleSeries.push(series);\n this.series[i] = series;\n }\n };\n Chart.prototype.renderTitle = function () {\n var rect;\n var margin = this.margin;\n if (this.title) {\n var alignment = this.titleStyle.textAlignment;\n var getAnchor = alignment === 'Near' ? 'start' : alignment === 'Far' ? 'end' : 'middle';\n this.elementSize = measureText(this.title, this.titleStyle);\n rect = new Rect(margin.left, 0, this.availableSize.width - margin.left - margin.right, 0);\n var options = new TextOption(this.element.id + '_ChartTitle', titlePositionX(rect, this.titleStyle), this.margin.top + ((this.elementSize.height) * 3 / 4), getAnchor, this.titleCollection, '', 'auto');\n var element = redrawElement(this.redraw, this.element.id + '_ChartTitle', options, this.renderer) ||\n textElement(options, this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n if (this.subTitle) {\n this.renderSubTitle(options);\n }\n }\n };\n Chart.prototype.renderSubTitle = function (options) {\n var maxWidth = 0;\n var titleWidth = 0;\n var padding = 10;\n var rect;\n var anchor = function (alignment) {\n return alignment === 'Near' ? 'start' : alignment === 'Far' ? 'end' : 'middle';\n };\n var alignment = this.titleStyle.textAlignment;\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n var subTitleElementSize = measureText(this.subTitle, this.subTitleStyle);\n rect = new Rect(alignment === 'Center' ? (options.x - maxWidth / 2) : alignment === 'Far' ? options.x - maxWidth : options.x, 0, maxWidth, 0);\n var subTitleOptions = new TextOption(this.element.id + '_ChartSubTitle', titlePositionX(rect, this.subTitleStyle), options.y * options.text.length + ((subTitleElementSize.height) * 3 / 4) + padding, anchor(this.subTitleStyle.textAlignment), this.subTitleCollection, '', 'auto');\n var element = redrawElement(this.redraw, this.element.id + '_ChartSubTitle', subTitleOptions, this.renderer) ||\n textElement(subTitleOptions, this.subTitleStyle, this.subTitleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n element.setAttribute('aria-label', this.description || this.subTitle);\n element.setAttribute('tabindex', this.tabIndex.toString());\n };\n Chart.prototype.renderBorder = function () {\n var width = this.border.width;\n var rect = new RectOption(this.element.id + '_ChartBorder', this.background || this.themeStyle.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.htmlObject = redrawElement(this.redraw, this.element.id + '_ChartBorder', rect, this.renderer)\n || this.renderer.drawRectangle(rect);\n appendChildElement(this.svgObject, this.htmlObject, this.redraw);\n };\n /**\n * @private\n */\n Chart.prototype.renderAreaBorder = function () {\n if (this.chartAreaType === 'PolarRadar') {\n return null;\n }\n else {\n var rect = new RectOption(this.element.id + '_ChartAreaBorder', this.chartArea.background, { width: this.chartArea.border.width, color: this.chartArea.border.color || this.themeStyle.areaBorder }, this.chartArea.opacity, this.chartAxisLayoutPanel.seriesClipRect);\n this.htmlObject = this.renderer.drawRectangle(rect);\n appendChildElement(this.svgObject, this.htmlObject, this.redraw);\n }\n };\n /**\n * To add series for the chart\n * @param {SeriesModel[]} seriesCollection - Defines the series collection to be added in chart.\n * @return {void}.\n */\n Chart.prototype.addSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series = new Series(this, 'series', series);\n this.series.push(series);\n }\n this.refresh();\n };\n /**\n * To Remove series for the chart\n * @param index - Defines the series index to be remove in chart series\n * @return {void}\n */\n Chart.prototype.removeSeries = function (index) {\n this.series.splice(index, 1);\n this.refresh();\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of Chart\n */\n Chart.prototype.destroy = function () {\n if (this.scrollBarModule) {\n this.scrollBarModule.destroy();\n }\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-chart');\n };\n /**\n * Get component name\n */\n Chart.prototype.getModuleName = function () {\n return 'chart';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Chart.prototype.getPersistData = function () {\n var keyEntity = ['loaded', 'animationComplete'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Method to create SVG element.\n */\n Chart.prototype.createChartSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * Method to bind events for chart\n */\n Chart.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var startEvent = Browser.touchStartEvent;\n var moveEvent = Browser.touchMoveEvent;\n var stopEvent = Browser.touchEndEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, startEvent, this.chartOnMouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'click', this.chartOnMouseClick);\n EventHandler.remove(this.element, 'contextmenu', this.chartRightClick);\n EventHandler.remove(this.element, cancelEvent, this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.chartResize);\n };\n Chart.prototype.wireEvents = function () {\n /*! Find the Events type */\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.chartOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'click', this.chartOnMouseClick, this);\n EventHandler.add(this.element, 'contextmenu', this.chartRightClick, this);\n EventHandler.add(this.element, cancelEvent, this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.chartResize.bind(this));\n this.longPress = this.longPress.bind(this);\n new Touch(this.element, { tapHold: this.longPress, tapHoldThreshold: 500 });\n /*! Apply the style for chart */\n this.setStyle(this.element);\n };\n Chart.prototype.chartRightClick = function (event) {\n if (this.crosshair.enable && this.crosshairModule &&\n (event.buttons === 2 || event.which === 0 || event.pointerType === 'touch')) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n Chart.prototype.setStyle = function (element) {\n var zooming = this.zoomSettings;\n var disableScroll = zooming.enableSelectionZooming || zooming.enablePinchZooming ||\n this.selectionMode !== 'None' || this.crosshair.enable;\n element.style.touchAction = disableScroll ? 'none' : 'element';\n element.style.msTouchAction = disableScroll ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n element.style.display = 'block';\n };\n /**\n * Finds the orientation.\n * @return {boolean}\n * @private\n */\n Chart.prototype.isOrientation = function () {\n return ('orientation' in window && 'onorientationchange' in window);\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.longPress = function (e) {\n this.mouseX = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientX) : 0;\n this.mouseY = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientY) : 0;\n this.startMove = true;\n this.setMouseXY(this.mouseX, this.mouseY);\n this.notify('tapHold', e);\n return false;\n };\n /**\n * To find mouse x, y for aligned chart element svg position\n */\n Chart.prototype.setMouseXY = function (pageX, pageY) {\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n var rect = this.element.getBoundingClientRect();\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n };\n /**\n * Handles the chart resize.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n var arg = {\n chart: this,\n name: resized,\n currentSize: new Size(0, 0),\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n _this.createChartSvg();\n arg.currentSize = _this.availableSize;\n _this.trigger(resized, arg);\n _this.refreshAxis();\n _this.refreshBound();\n _this.trigger('loaded', { chart: _this });\n }, 500);\n return false;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseMove = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type === 'touchmove') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2' || this.isTouch;\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseMove(e);\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseLeave = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type === 'touchleave') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseLeave(e);\n return false;\n };\n /**\n * Handles the mouse leave on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseLeave = function (e) {\n var element = e.target;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.trigger(chartMouseLeave, { target: element.id, x: this.mouseX, y: this.mouseY });\n this.isChartDrag = false;\n this.notify(cancelEvent, e);\n return false;\n };\n /**\n * Handles the mouse click on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseClick = function (e) {\n var element = e.target;\n this.trigger(chartMouseClick, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (this.pointClick) {\n this.triggerPointEvent(pointClick);\n }\n this.notify('click', e);\n return false;\n };\n Chart.prototype.triggerPointEvent = function (event) {\n var data = new ChartData(this);\n var pointData = data.getData();\n if (pointData.series && pointData.point) {\n this.trigger(event, {\n series: pointData.series,\n point: pointData.point,\n seriesIndex: pointData.series.index, pointIndex: pointData.point.index,\n x: this.mouseX, y: this.mouseY\n });\n }\n };\n /**\n * Handles the mouse move on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseMove = function (e) {\n var element = e.target;\n this.trigger(chartMouseMove, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (this.pointMove) {\n this.triggerPointEvent(pointMove);\n }\n // Tooltip for chart series.\n if (!this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY);\n this.axisTooltip(e, this.mouseX, this.mouseY);\n }\n this.notify(Browser.touchMoveEvent, e);\n this.isTouch = false;\n return false;\n };\n Chart.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n var id = (targetId === (this.element.id + '_ChartTitle') || targetId === (this.element.id + '_ChartSubTitle'));\n if (id && (event.target.textContent.indexOf('...') > -1)) {\n var title = (targetId === (this.element.id + '_ChartTitle')) ? this.title : this.subTitle;\n showTooltip(title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n Chart.prototype.axisTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if (((targetId.indexOf('AxisLabel') > -1) || targetId.indexOf('Axis_MultiLevelLabel') > -1) &&\n (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.findAxisLabel(targetId), x, y, this.element.offsetWidth, this.element.id + '_EJ2_AxisLabel_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_AxisLabel_Tooltip');\n }\n };\n Chart.prototype.findAxisLabel = function (text) {\n var texts;\n if (text.indexOf('AxisLabel') > -1) {\n texts = ((text.replace(this.element.id, '')).replace('AxisLabel_', '')).split('_');\n return this.axisCollections[parseInt(texts[0], 10)].visibleLabels[parseInt(texts[1], 10)].originalText;\n }\n else {\n texts = ((text.replace(this.element.id, '')).replace('Axis_MultiLevelLabel_Level_', '').replace('Text_', '')).split('_');\n return (this.axisCollections[parseInt(texts[0], 10)].multiLevelLabels[parseInt(texts[1], 10)]\n .categories[parseInt(texts[2], 10)].text);\n }\n };\n /**\n * Handles the mouse down on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var offset = Browser.isDevice ? 20 : 30;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n this.trigger(chartMouseDown, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.clientX;\n pageY = e.clientY;\n target = e.target;\n }\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseDownX = this.previousMouseMoveX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseDownY = this.previousMouseMoveY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n if (this.isTouch) {\n this.isDoubleTap = (new Date().getTime() < this.threshold && target.id.indexOf(this.element.id + '_Zooming_') === -1 &&\n (this.mouseDownX - offset >= this.mouseX || this.mouseDownX + offset >= this.mouseX) &&\n (this.mouseDownY - offset >= this.mouseY || this.mouseDownY + offset >= this.mouseY) &&\n (this.mouseX - offset >= this.mouseDownX || this.mouseX + offset >= this.mouseDownX) &&\n (this.mouseY - offset >= this.mouseDownY || this.mouseY + offset >= this.mouseDownY));\n }\n this.notify(Browser.touchStartEvent, e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseEnd = function (e) {\n var pageY;\n var pageX;\n var touchArg;\n if (e.type === 'touchend') {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n this.isTouch = true;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n pageY = e.clientY;\n pageX = e.clientX;\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseUp(e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseUp = function (e) {\n var element = e.target;\n this.trigger(chartMouseUp, { target: element.id, x: this.mouseX, y: this.mouseY });\n this.isChartDrag = false;\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.axisTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.threshold = new Date().getTime() + 300;\n }\n this.seriesElements.removeAttribute('clip-path');\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n * Method to set culture for chart\n */\n Chart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.setLocaleConstants();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * Method to set the annotation content dynamically for chart.\n */\n Chart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n var annotation = this.annotations[annotationIndex];\n var element;\n if (content !== null) {\n annotation.content = content;\n if (parentNode) {\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n element = this.createElement('div');\n this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n parentNode.appendChild(element.children[0]);\n }\n else {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n }\n };\n /**\n * Method to set locale constants\n */\n Chart.prototype.setLocaleConstants = function () {\n this.defaultLocalConstants = {\n ZoomIn: 'ZoomIn',\n Zoom: 'Zoom',\n ZoomOut: 'ZoomOut',\n Pan: 'Pan',\n Reset: 'Reset',\n ResetZoom: 'Reset Zoom'\n };\n };\n /**\n * Theming for chart\n */\n Chart.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getThemeColor(this.theme);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Chart.prototype.requiredModules = function () {\n var _this = this;\n var modules = [];\n var series = this.series;\n var enableAnnotation = false;\n var moduleName;\n var errorBarVisible = false;\n var dataLabelEnable = false;\n var zooming = this.zoomSettings;\n this.chartAreaType = (series.length > 0 && (series[0].type === 'Polar' || series[0].type === 'Radar')) ? 'PolarRadar' : 'Cartesian';\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this]\n });\n }\n series.map(function (value) {\n _this.isLegend = (_this.legendSettings.visible && ((value.name !== '') || !!_this.isLegend));\n moduleName = value.type.indexOf('100') !== -1 ? value.type.replace('100', '') + 'Series' : value.type + 'Series';\n errorBarVisible = value.errorBar.visible || errorBarVisible;\n dataLabelEnable = value.marker.dataLabel.visible || dataLabelEnable;\n if (!modules.some(function (currentModule) {\n return currentModule.member === moduleName;\n })) {\n modules.push({\n member: moduleName,\n args: [_this, series]\n });\n }\n if (_this.chartAreaType === 'PolarRadar') {\n modules.push({\n member: value.drawType + 'Series',\n args: [_this, series]\n });\n }\n if (value.type === 'Pareto') {\n modules.push({\n member: 'ColumnSeries',\n args: [_this, series]\n });\n modules.push({\n member: 'LineSeries',\n args: [_this, series]\n });\n }\n });\n this.findIndicatorModules(modules);\n this.findTrendLineModules(modules);\n modules = this.findAxisModule(modules);\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (errorBarVisible) {\n modules.push({\n member: 'ErrorBar',\n args: [this, series]\n });\n }\n if (this.isLegend) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.chartAreaType !== 'PolarRadar' && (zooming.enableSelectionZooming\n || zooming.enableMouseWheelZooming || zooming.enablePinchZooming || zooming.enablePan)) {\n modules.push({\n member: 'Zoom',\n args: [this, this.zoomSettings]\n });\n if (zooming.enableScrollbar) {\n modules.push({\n member: 'ScrollBar',\n args: [this]\n });\n }\n }\n if (this.selectionMode !== 'None' && !(this.chartAreaType === 'PolarRadar' &&\n this.selectionMode.indexOf('Drag') > -1)) {\n modules.push({\n member: 'Selection',\n args: [this]\n });\n }\n if (dataLabelEnable) {\n modules.push({\n member: 'DataLabel',\n args: [this, series]\n });\n }\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this]\n });\n }\n if (this.chartAreaType !== 'PolarRadar' && this.crosshair.enable) {\n modules.push({\n member: 'Crosshair',\n args: [this]\n });\n }\n return modules;\n };\n Chart.prototype.findAxisModule = function (modules) {\n var axisCollections = [];\n axisCollections.push(this.primaryXAxis);\n axisCollections.push(this.primaryYAxis);\n axisCollections = axisCollections.concat(this.axes);\n var datetimeEnabled = false;\n var categoryEnabled = false;\n var logarithmicEnabled = false;\n var striplineEnabled = false;\n var dateTimeCategoryEnabled = false;\n var multiLevelEnabled = false;\n for (var _i = 0, axisCollections_1 = axisCollections; _i < axisCollections_1.length; _i++) {\n var axis = axisCollections_1[_i];\n datetimeEnabled = axis.valueType === 'DateTime' || datetimeEnabled;\n categoryEnabled = axis.valueType === 'Category' || categoryEnabled;\n logarithmicEnabled = axis.valueType === 'Logarithmic' || logarithmicEnabled;\n dateTimeCategoryEnabled = axis.valueType === 'DateTimeCategory' || dateTimeCategoryEnabled;\n striplineEnabled = this.findStriplineVisibility(axis.stripLines) || striplineEnabled;\n multiLevelEnabled = axis.multiLevelLabels.length > 0 || multiLevelEnabled;\n }\n if (datetimeEnabled) {\n modules.push({\n member: 'DateTime',\n args: [this]\n });\n }\n if (categoryEnabled) {\n modules.push({\n member: 'Category',\n args: [this]\n });\n }\n if (logarithmicEnabled) {\n modules.push({\n member: 'Logarithmic',\n args: [this]\n });\n }\n if (striplineEnabled) {\n modules.push({\n member: 'StripLine',\n args: [this]\n });\n }\n if (multiLevelEnabled) {\n modules.push({\n member: 'MultiLevelLabel',\n args: [this]\n });\n }\n if (dateTimeCategoryEnabled) {\n modules.push({\n member: 'DateTimeCategory',\n args: [this]\n });\n }\n return modules;\n };\n Chart.prototype.findIndicatorModules = function (modules) {\n var macdEnable;\n var bandEnable;\n var indicators = this.indicators;\n if (this.indicators.length) {\n modules.push({\n member: 'LineSeries',\n args: [this]\n });\n indicators.map(function (indicator) {\n macdEnable = macdEnable || indicator.type === 'Macd';\n bandEnable = bandEnable || indicator.type === 'BollingerBands';\n });\n if (macdEnable) {\n modules.push({\n member: 'ColumnSeries',\n args: [this]\n });\n }\n if (bandEnable) {\n modules.push({\n member: 'RangeAreaSeries',\n args: [this]\n });\n }\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n modules.push({\n member: indicator.type + 'Indicator',\n args: [this]\n });\n }\n }\n };\n Chart.prototype.findTrendLineModules = function (modules) {\n var isLine;\n var isSpline;\n var _loop_1 = function (series) {\n var markerEnable;\n series.trendlines.map(function (trendline) {\n markerEnable = markerEnable || trendline.marker.visible;\n isLine = isLine || (trendline.type === 'Linear' || trendline.type === 'MovingAverage') ? true : false;\n isSpline = isSpline || !isLine ? true : false;\n });\n if (markerEnable) {\n modules.push({\n member: 'Marker',\n args: [this_1, series]\n });\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n _loop_1(series);\n }\n if (isLine || isSpline) {\n modules.push({\n member: 'TrendLine',\n args: [this]\n });\n }\n if (isLine) {\n modules.push({\n member: 'LineSeries',\n args: [this]\n });\n }\n if (isSpline) {\n modules.push({\n member: 'SplineSeries',\n args: [this]\n });\n }\n };\n Chart.prototype.findStriplineVisibility = function (striplines) {\n var visible = false;\n for (var _i = 0, striplines_1 = striplines; _i < striplines_1.length; _i++) {\n var stripline = striplines_1[_i];\n if (stripline.visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n Chart.prototype.removeSvg = function () {\n if (this.redraw) {\n return null;\n }\n if (document.getElementById(this.element.id + '_Secondary_Element')) {\n remove(document.getElementById(this.element.id + '_Secondary_Element'));\n }\n var removeLength = 0;\n if (this.zoomModule && this.zoomModule.pinchTarget) {\n this.zoomModule.pinchTarget.id = '';\n this.zoomModule.pinchTarget.setAttribute('opacity', '0');\n this.svgObject.appendChild(this.zoomModule.pinchTarget);\n removeLength = 1;\n }\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > removeLength) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n Chart.prototype.refreshDefinition = function (definitions) {\n for (var _i = 0, definitions_1 = definitions; _i < definitions_1.length; _i++) {\n var item = definitions_1[_i];\n item.axes = [];\n }\n };\n /**\n * Refresh the axis default value.\n * @return {boolean}\n * @private\n */\n Chart.prototype.refreshAxis = function () {\n var axis = this.primaryXAxis;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis = this.primaryYAxis;\n axis.isStack100 = false;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var item = _a[_i];\n axis = item;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis.isStack100 = false;\n }\n if (this.paretoSeriesModule) {\n for (var _b = 0, _c = this.paretoSeriesModule.paretoAxes; _b < _c.length; _b++) {\n var item = _c[_b];\n axis = item;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis.isStack100 = false;\n }\n }\n };\n Chart.prototype.axisChange = function (axis) {\n if (!axis.name && !axis.valueType) {\n return false;\n }\n this.refreshDefinition(this.columns);\n this.refreshDefinition(this.rows);\n this.calculateVisibleAxis();\n this.processData();\n return true;\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n Chart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n if (Object.keys(newProp).length === 1 && Object.keys(newProp)[0] === 'indicators') {\n //add valid check,it should happen only when property change is triggered for target series\n return;\n }\n this.animateSeries = false;\n if (!this.delayRedraw) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'primaryXAxis':\n refreshBounds = this.axisChange(newProp.primaryXAxis);\n if (newProp.primaryXAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryXAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n break;\n case 'primaryYAxis':\n refreshBounds = this.axisChange(newProp.primaryYAxis);\n if (newProp.primaryYAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryYAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n break;\n case 'axes':\n for (var _b = 0, _c = Object.keys(newProp.axes); _b < _c.length; _b++) {\n var index = _c[_b];\n refreshBounds = refreshBounds || this.axisChange(newProp.axes[index]);\n if (!newProp.axes[index].crosshairTooltip) {\n refreshBounds = true;\n }\n }\n break;\n case 'height':\n case 'width':\n this.createChartSvg();\n refreshBounds = true;\n break;\n case 'subTitle':\n case 'title':\n refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'subTitleStyle':\n if (newProp.subTitleStyle && (newProp.subTitleStyle.size || newProp.subTitleStyle.textOverflow)) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'dataSource':\n this.processData(false);\n refreshBounds = true;\n break;\n case 'series':\n var len = this.series.length;\n var seriesRefresh = false;\n var series = void 0;\n for (var i = 0; i < len; i++) {\n series = newProp.series[i];\n if (series && (series.dataSource || series.xName || series.yName || series.size ||\n series.high || series.low || series.open || series.close)) {\n seriesRefresh = true;\n }\n }\n if (seriesRefresh) {\n this.processData(false);\n refreshBounds = true;\n }\n break;\n case 'zoomSettings':\n if (newProp.zoomSettings.enableScrollbar || oldProp.zoomSettings.enableScrollbar) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'chartArea':\n if (newProp.chartArea.border && newProp.chartArea.border.width) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'legendSettings':\n if (!newProp.legendSettings.background || !newProp.legendSettings.opacity) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'palettes':\n this.calculateVisibleSeries();\n renderer = true;\n break;\n case 'selectedDataIndexes':\n case 'selectionMode':\n if (this.selectionModule && newProp.selectionMode && newProp.selectionMode.indexOf('Drag') === -1) {\n this.selectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n break;\n case 'isMultiSelect':\n if (this.selectionModule && !newProp.isMultiSelect && this.selectionModule.selectedDataIndexes.length > 1) {\n this.selectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n break;\n case 'theme':\n this.animateSeries = true;\n break;\n case 'locale':\n case 'currencyCode':\n _super.prototype.refresh.call(this);\n break;\n case 'tooltip':\n this.tooltipModule.previousPoints = [];\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderElements();\n this.trigger('loaded', { chart: this });\n }\n if (refreshBounds) {\n this.removeSvg();\n this.refreshAxis();\n this.refreshBound();\n this.trigger('loaded', { chart: this });\n }\n }\n };\n __decorate([\n Property(null)\n ], Chart.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"title\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"dataSource\", void 0);\n __decorate([\n Complex(Theme.chartTitleFont, Font)\n ], Chart.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"subTitle\", void 0);\n __decorate([\n Complex(Theme.chartSubTitleFont, Font)\n ], Chart.prototype, \"subTitleStyle\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Chart.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Chart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"background\", void 0);\n __decorate([\n Complex({ border: { color: null, width: 0.5 }, background: 'transparent' }, ChartArea)\n ], Chart.prototype, \"chartArea\", void 0);\n __decorate([\n Complex({ name: 'primaryXAxis' }, Axis)\n ], Chart.prototype, \"primaryXAxis\", void 0);\n __decorate([\n Complex({ name: 'primaryYAxis' }, Axis)\n ], Chart.prototype, \"primaryYAxis\", void 0);\n __decorate([\n Collection([{}], Row)\n ], Chart.prototype, \"rows\", void 0);\n __decorate([\n Collection([{}], Column)\n ], Chart.prototype, \"columns\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], Chart.prototype, \"axes\", void 0);\n __decorate([\n Collection([{}], Series)\n ], Chart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], ChartAnnotationSettings)\n ], Chart.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], Chart.prototype, \"palettes\", void 0);\n __decorate([\n Property('Material')\n ], Chart.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], Chart.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, CrosshairSettings)\n ], Chart.prototype, \"crosshair\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], Chart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, ZoomSettings)\n ], Chart.prototype, \"zoomSettings\", void 0);\n __decorate([\n Property('None')\n ], Chart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Collection([], Indexes)\n ], Chart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isTransposed\", void 0);\n __decorate([\n Collection([], TechnicalIndicator)\n ], Chart.prototype, \"indicators\", void 0);\n __decorate([\n Property(true)\n ], Chart.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], Chart.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(true)\n ], Chart.prototype, \"enableSideBySidePlacement\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"resized\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisRangeCalculated\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisMultiLabelRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"dragComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"zoomComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"scrollStart\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"scrollEnd\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"scrollChanged\", void 0);\n __decorate([\n Property('USD')\n ], Chart.prototype, \"currencyCode\", void 0);\n Chart = __decorate([\n NotifyPropertyChanges\n ], Chart);\n return Chart;\n}(Component));\nexport { Chart };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Double } from '../axis/double-axis';\n/**\n * Common axis classes\n * @private\n */\nvar NiceInterval = /** @class */ (function (_super) {\n __extends(NiceInterval, _super);\n function NiceInterval() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Method to calculate numeric datetime interval\n */\n NiceInterval.prototype.calculateDateTimeNiceInterval = function (axis, size, start, end, isChart) {\n if (isChart === void 0) { isChart = true; }\n var oneDay = 24 * 60 * 60 * 1000;\n var startDate = new Date(start);\n var endDate = new Date(end);\n //var axisInterval ;\n var totalDays = (Math.abs((startDate.getTime() - endDate.getTime()) / (oneDay)));\n var interval;\n axis.actualIntervalType = axis.intervalType;\n var type = axis.intervalType;\n switch (type) {\n case 'Years':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n break;\n case 'Quarter':\n interval = this.calculateNumericNiceInterval(axis, (totalDays / 365) * 4, size);\n break;\n case 'Months':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n break;\n case 'Weeks':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 7, size);\n break;\n case 'Days':\n interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n break;\n case 'Hours':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n break;\n case 'Minutes':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n break;\n case 'Seconds':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n break;\n case 'Auto':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Years';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, (totalDays / 365) * 4, size);\n if (interval >= 1 && !isChart) {\n axis.actualIntervalType = 'Quarter';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Months';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays / 7, size);\n if (interval >= 1 && !isChart) {\n axis.actualIntervalType = 'Weeks';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Days';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Hours';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Minutes';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n axis.actualIntervalType = 'Seconds';\n return interval;\n }\n return interval;\n };\n /**\n * To get the skeleton for the DateTime axis.\n * @return {string}\n * @private\n */\n NiceInterval.prototype.getSkeleton = function (axis, currentValue, previousValue) {\n var skeleton;\n var intervalType = axis.actualIntervalType;\n if (axis.skeleton) {\n return axis.skeleton;\n }\n if (intervalType === 'Years') {\n skeleton = axis.isChart ? (axis.valueType === 'DateTime' ? 'y' : 'yMMM') : 'y';\n }\n else if (intervalType === 'Quarter') {\n skeleton = 'yMMM';\n }\n else if (intervalType === 'Months') {\n skeleton = axis.isChart ? 'MMMd' : 'MMM';\n }\n else if (intervalType === 'Weeks') {\n skeleton = 'MEd';\n }\n else if (intervalType === 'Days') {\n skeleton = axis.isChart ? this.getDayFormat(axis, currentValue, previousValue) : 'MMMd';\n }\n else if (intervalType === 'Hours') {\n skeleton = axis.isChart ? (axis.valueType === 'DateTime' ? 'Hm' : 'EHm') : 'h';\n }\n else if (intervalType === 'Minutes') {\n skeleton = axis.isChart ? 'Hms' : 'hm';\n }\n else {\n skeleton = axis.isChart ? 'Hms' : 'hms';\n }\n return skeleton;\n };\n /**\n * Get intervalType month format\n * @param currentValue\n * @param previousValue\n */\n NiceInterval.prototype.getMonthFormat = function (currentValue, previousValue) {\n return ((new Date(currentValue).getFullYear() === new Date(previousValue).getFullYear()) ? 'MMM' : 'y MMM');\n };\n /**\n * Get intervalType day label format for the axis\n * @param axis\n * @param currentValue\n * @param previousValue\n */\n NiceInterval.prototype.getDayFormat = function (axis, currentValue, previousValue) {\n return (axis.valueType === 'DateTime' ?\n ((new Date(currentValue).getMonth() !== new Date(previousValue).getMonth()) ? 'MMMd' : 'd') : 'yMd');\n };\n /**\n * Find label format for axis\n * @param axis\n * @param currentValue\n * @param previousValue\n * @private\n */\n NiceInterval.prototype.findCustomFormats = function (axis, currentValue, previousValue) {\n var labelFormat = axis.labelFormat ? axis.labelFormat : '';\n if (axis.isChart && !axis.skeleton && axis.actualIntervalType === 'Months' && !labelFormat) {\n labelFormat = axis.valueType === 'DateTime' ? this.getMonthFormat(currentValue, previousValue) : 'yMMM';\n }\n return labelFormat;\n };\n return NiceInterval;\n}(Double));\nexport { NiceInterval };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { setRange, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { NiceInterval } from '../axis/axis-helper';\nimport { extend, getValue } from '@syncfusion/ej2-base';\n/**\n * `DateTime` module is used to render datetime axis.\n */\nvar DateTime = /** @class */ (function (_super) {\n __extends(DateTime, _super);\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function DateTime(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n */\n DateTime.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n DateTime.prototype.getActualRange = function (axis, size) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n // Axis min\n if ((axis.minimum) !== null) {\n this.min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.minimum }).val))));\n }\n else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n this.min = Date.parse(dateParser(dateFormatter(new Date(1970, 1, 1))));\n }\n // Axis Max\n if ((axis.maximum) !== null) {\n this.max = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.maximum }).val))));\n }\n else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n this.max = Date.parse(dateParser(dateFormatter(new Date(1970, 5, 1))));\n }\n if (this.min === this.max) {\n this.max = this.max + 2592000000;\n this.min = this.min - 2592000000;\n }\n axis.actualRange = {};\n axis.doubleRange = new DoubleRange(this.min, this.max);\n var datetimeInterval = this.calculateDateTimeNiceInterval(axis, size, axis.doubleRange.start, axis.doubleRange.end);\n if (!axis.interval) {\n axis.actualRange.interval = datetimeInterval;\n }\n else {\n axis.actualRange.interval = axis.interval;\n }\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n };\n /**\n * Apply padding for the range.\n * @private\n */\n DateTime.prototype.applyRangePadding = function (axis, size) {\n this.min = (axis.actualRange.min);\n this.max = (axis.actualRange.max);\n var minimum;\n var maximum;\n var interval = axis.actualRange.interval;\n if (!setRange(axis)) {\n var rangePadding = axis.getRangePadding(this.chart);\n minimum = new Date(this.min);\n maximum = new Date(this.max);\n var intervalType = axis.actualIntervalType;\n if (rangePadding === 'None') {\n this.min = minimum.getTime();\n this.max = maximum.getTime();\n }\n else if (rangePadding === 'Additional' || rangePadding === 'Round') {\n switch (intervalType) {\n case 'Years':\n this.getYear(minimum, maximum, rangePadding, interval);\n break;\n case 'Months':\n this.getMonth(minimum, maximum, rangePadding, interval);\n break;\n case 'Days':\n this.getDay(minimum, maximum, rangePadding, interval);\n break;\n case 'Hours':\n this.getHour(minimum, maximum, rangePadding, interval);\n break;\n case 'Minutes':\n var minute = (minimum.getMinutes() / interval) * interval;\n var endMinute = maximum.getMinutes() + (minimum.getMinutes() - minute);\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minute, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), maximum.getMonth(), minimum.getDate(), minimum.getHours(), minute + (-interval), 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute + (interval), 0)).getTime();\n }\n break;\n case 'Seconds':\n var second = (minimum.getSeconds() / interval) * interval;\n var endSecond = maximum.getSeconds() + (minimum.getSeconds() - second);\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond, 0)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second + (-interval), 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond + (interval), 0)).getTime();\n }\n break;\n }\n }\n }\n axis.actualRange.min = (axis.minimum != null) ? this.min : this.min;\n axis.actualRange.max = (axis.maximum != null) ? this.max : this.max;\n axis.actualRange.delta = (axis.actualRange.max - axis.actualRange.min);\n axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n this.calculateVisibleRange(size, axis);\n };\n DateTime.prototype.getYear = function (minimum, maximum, rangePadding, interval) {\n var startYear = minimum.getFullYear();\n var endYear = maximum.getFullYear();\n if (rangePadding === 'Additional') {\n this.min = (new Date(startYear - interval, 1, 1, 0, 0, 0)).getTime();\n this.max = (new Date(endYear + interval, 1, 1, 0, 0, 0)).getTime();\n }\n else {\n this.min = new Date(startYear, 0, 0, 0, 0, 0).getTime();\n this.max = new Date(endYear, 11, 30, 23, 59, 59).getTime();\n }\n };\n DateTime.prototype.getMonth = function (minimum, maximum, rangePadding, interval) {\n var month = minimum.getMonth();\n var endMonth = maximum.getMonth();\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), month, 0, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), endMonth, new Date(maximum.getFullYear(), maximum.getMonth(), 0).getDate(), 23, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), month + (-interval), 1, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), endMonth + (interval), endMonth === 2 ? 28 : 30, 0, 0, 0)).getTime();\n }\n };\n DateTime.prototype.getDay = function (minimum, maximum, rangePadding, interval) {\n var day = minimum.getDate();\n var endDay = maximum.getDate();\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), day, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay, 23, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), day + (-interval), 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay + (interval), 0, 0, 0)).getTime();\n }\n };\n DateTime.prototype.getHour = function (minimum, maximum, rangePadding, interval) {\n var hour = (minimum.getHours() / interval) * interval;\n var endHour = maximum.getHours() + (minimum.getHours() - hour);\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour + (-interval), 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour + (interval), 0, 0)).getTime();\n }\n };\n /**\n * Calculate visible range for axis.\n * @private\n */\n DateTime.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n min: axis.actualRange.min,\n max: axis.actualRange.max,\n interval: axis.actualRange.interval,\n delta: axis.actualRange.delta,\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n this.calculateDateTimeNiceInterval(axis, size, axis.visibleRange.min, axis.visibleRange.max)\n : axis.visibleRange.interval;\n }\n axis.dateTimeInterval = this.increaseDateTimeInterval(axis, axis.visibleRange.min, axis.visibleRange.interval).getTime()\n - axis.visibleRange.min;\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n };\n /**\n * Calculate visible labels for the axis.\n * @param axis\n * @param chart\n * @private\n */\n DateTime.prototype.calculateVisibleLabels = function (axis, chart) {\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n var labelStyle;\n var previousValue;\n var axisLabels = axis.visibleLabels;\n if (!setRange(axis)) {\n tempInterval = this.alignRangeStart(axis, tempInterval, axis.visibleRange.interval, axis.actualIntervalType).getTime();\n }\n while (tempInterval <= axis.visibleRange.max) {\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n previousValue = axisLabels.length ? axis.visibleLabels[axisLabels.length - 1].value : tempInterval;\n axis.format = chart.intl.getDateFormat({\n format: this.findCustomFormats(axis, tempInterval, previousValue),\n type: firstToLowerCase(axis.skeletonType),\n skeleton: this.getSkeleton(axis, tempInterval, previousValue)\n });\n axis.startLabel = axis.format(new Date(axis.visibleRange.min));\n axis.endLabel = axis.format(new Date(axis.visibleRange.max));\n if (withIn(tempInterval, axis.visibleRange)) {\n triggerLabelRender(chart, tempInterval, axis.format(new Date(tempInterval)), labelStyle, axis);\n }\n tempInterval = this.increaseDateTimeInterval(axis, tempInterval, axis.visibleRange.interval).getTime();\n }\n //tooltip and crosshair formats for 'Months' and 'Days' interval types\n if ((axis.actualIntervalType === 'Months' || axis.actualIntervalType === 'Days') && axis.isChart) {\n axis.format = chart.intl.getDateFormat({\n format: axis.labelFormat || (axis.actualIntervalType === 'Months' && !axis.skeleton ? 'y MMM' : ''),\n type: firstToLowerCase(axis.skeletonType), skeleton: axis.skeleton || (axis.actualIntervalType === 'Days' ? 'MMMd' : '')\n });\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /** @private */\n DateTime.prototype.increaseDateTimeInterval = function (axis, value, interval) {\n var result = new Date(value);\n interval = Math.ceil(interval);\n axis.visibleRange.interval = interval;\n var intervalType = axis.actualIntervalType;\n switch (intervalType) {\n case 'Years':\n result.setFullYear(result.getFullYear() + interval);\n return result;\n case 'Quarter':\n result.setMonth(result.getMonth() + (3 * interval));\n return result;\n case 'Months':\n result.setMonth(result.getMonth() + interval);\n return result;\n case 'Weeks':\n result.setDate(result.getDate() + (interval * 7));\n return result;\n case 'Days':\n result.setDate(result.getDate() + interval);\n return result;\n case 'Hours':\n result.setHours(result.getHours() + interval);\n return result;\n case 'Minutes':\n result.setMinutes(result.getMinutes() + interval);\n return result;\n case 'Seconds':\n result.setSeconds(result.getSeconds() + interval);\n return result;\n }\n return result;\n };\n DateTime.prototype.alignRangeStart = function (axis, sDate, intervalSize, intervalType) {\n var sResult = new Date(sDate);\n switch (axis.actualIntervalType) {\n case 'Years':\n var year = Math.floor(Math.floor(sResult.getFullYear() / intervalSize) * intervalSize);\n sResult = new Date(year, sResult.getMonth(), sResult.getDate(), 0, 0, 0);\n return sResult;\n case 'Months':\n var month = Math.floor(Math.floor((sResult.getMonth()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), month, sResult.getDate(), 0, 0, 0);\n return sResult;\n case 'Days':\n var day = Math.floor(Math.floor((sResult.getDate()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), day, 0, 0, 0);\n return sResult;\n case 'Hours':\n var hour = Math.floor(Math.floor((sResult.getHours()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), hour, 0, 0);\n return sResult;\n case 'Minutes':\n var minutes = Math.floor(Math.floor((sResult.getMinutes()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), minutes, 0, 0);\n return sResult;\n case 'Seconds':\n var seconds = Math.floor(Math.floor((sResult.getSeconds()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), sResult.getMinutes(), seconds, 0);\n return sResult;\n }\n return sResult;\n };\n /**\n * Get module name\n */\n DateTime.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DateTime';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n DateTime.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return DateTime;\n}(NiceInterval));\nexport { DateTime };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { getActualDesiredIntervalsCount, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn } from '../../common/utils/helper';\nimport { extend, getValue } from '@syncfusion/ej2-base';\nimport { NiceInterval } from '../axis/axis-helper';\n/**\n * `Category` module is used to render category axis.\n */\nvar Category = /** @class */ (function (_super) {\n __extends(Category, _super);\n /**\n * Constructor for the category module.\n * @private\n */\n function Category(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n */\n Category.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n Category.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n // axis.doubleRange = new DoubleRange(this.min, this.max);\n axis.actualRange = {};\n if (!axis.interval) {\n axis.actualRange.interval = Math.max(1, Math.floor(axis.doubleRange.delta / getActualDesiredIntervalsCount(size, axis)));\n }\n else {\n axis.actualRange.interval = Math.ceil(axis.interval);\n }\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n axis.actualRange.delta = axis.doubleRange.delta;\n };\n /**\n * Padding for the axis.\n * @private\n */\n Category.prototype.applyRangePadding = function (axis, size) {\n var ticks = (axis.labelPlacement === 'BetweenTicks' && this.chart.chartAreaType !== 'PolarRadar') ? 0.5 : 0;\n if (ticks > 0) {\n axis.actualRange.min -= ticks;\n axis.actualRange.max += ticks;\n }\n else {\n axis.actualRange.max += axis.actualRange.max ? 0 : 0.5;\n }\n axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n axis.actualRange.delta = axis.doubleRange.delta;\n this.calculateVisibleRange(size, axis);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n Category.prototype.calculateVisibleLabels = function (axis) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var tempInterval = Math.ceil(axis.visibleRange.min);\n var labelStyle;\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var position;\n axis.startLabel = axis.labels[Math.round(axis.visibleRange.min)];\n axis.endLabel = axis.labels[Math.floor(axis.visibleRange.max)];\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n if (withIn(tempInterval, axis.visibleRange) && axis.labels.length > 0) {\n position = Math.round(tempInterval);\n triggerLabelRender(this.chart, position, axis.labels[position] ? axis.labels[position].toString() : position.toString(), labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * Get module name\n */\n Category.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Category';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n Category.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Category;\n}(NiceInterval));\nexport { Category };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Double } from '../axis/double-axis';\nimport { getActualDesiredIntervalsCount, triggerLabelRender } from '../../common/utils/helper';\nimport { logBase, withIn } from '../../common/utils/helper';\nimport { extend, getValue } from '@syncfusion/ej2-base';\n/**\n * `Logarithmic` module is used to render log axis.\n */\nvar Logarithmic = /** @class */ (function (_super) {\n __extends(Logarithmic, _super);\n /**\n * Constructor for the logerithmic module.\n * @private\n */\n function Logarithmic(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The method to calculate the range and labels for the axis.\n * @return {void}\n */\n Logarithmic.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.calculateVisibleRange(size, axis);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Calculates actual range for the axis.\n * @private\n */\n Logarithmic.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n this.min = this.min < 0 ? 0 : this.min;\n var logStart = logBase(this.min, axis.logBase);\n logStart = isFinite(logStart) ? logStart : this.min;\n var logEnd = logBase(this.max, axis.logBase);\n logEnd = isFinite(logStart) ? logEnd : this.max;\n this.min = Math.floor(logStart / 1);\n this.max = Math.ceil(logEnd / 1);\n axis.actualRange.interval = axis.interval || this.calculateLogNiceInterval(this.max - this.min, size, axis);\n axis.actualRange.min = this.min;\n axis.actualRange.max = this.max;\n axis.actualRange.delta = this.max - this.min;\n };\n /**\n * Calculates visible range for the axis.\n * @private\n */\n Logarithmic.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n interval: axis.actualRange.interval, max: axis.actualRange.max,\n min: axis.actualRange.min, delta: axis.actualRange.delta\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n this.calculateLogNiceInterval(axis.doubleRange.delta, size, axis)\n : axis.visibleRange.interval;\n axis.visibleRange.interval = Math.floor(axis.visibleRange.interval) === 0 ? 1 : Math.floor(axis.visibleRange.interval);\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n }\n };\n /**\n * Calculates log iInteval for the axis.\n * @private\n */\n Logarithmic.prototype.calculateLogNiceInterval = function (delta, size, axis) {\n var actualDesiredIntervalsCount = getActualDesiredIntervalsCount(size, axis);\n var niceInterval = delta;\n var minInterval = Math.pow(10, Math.floor(logBase(niceInterval, 10)));\n for (var j = 0, len = axis.intervalDivs.length; j < len; j++) {\n var currentInterval = minInterval * axis.intervalDivs[j];\n if (actualDesiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Calculates labels for the axis.\n * @private\n */\n Logarithmic.prototype.calculateVisibleLabels = function (axis, chart) {\n /*! Generate axis labels */\n var tempInterval = axis.visibleRange.min;\n axis.visibleLabels = [];\n var labelStyle;\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var axisFormat = this.getFormat(axis);\n var isCustomFormat = axisFormat.match('{value}') !== null;\n axis.format = chart.intl.getNumberFormat({\n format: isCustomFormat ? '' : axisFormat,\n useGrouping: chart.useGroupingSeparator\n });\n axis.startLabel = axis.format(Math.pow(axis.logBase, axis.visibleRange.min));\n axis.endLabel = axis.format(Math.pow(axis.logBase, axis.visibleRange.max));\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n if (withIn(tempInterval, axis.visibleRange)) {\n triggerLabelRender(this.chart, tempInterval, this.formatValue(axis, isCustomFormat, axisFormat, Math.pow(axis.logBase, tempInterval)), labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * Get module name\n */\n Logarithmic.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Logarithmic';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n Logarithmic.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Logarithmic;\n}(Double));\nexport { Logarithmic };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Category } from '../axis/category-axis';\nimport { triggerLabelRender } from '../../common/utils/helper';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\nimport { extend, getValue } from '@syncfusion/ej2-base';\n/**\n * Category module is used to render category axis.\n */\nvar DateTimeCategory = /** @class */ (function (_super) {\n __extends(DateTimeCategory, _super);\n /**\n * Constructor for the category module.\n * @private\n */\n function DateTimeCategory(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n * @private\n */\n DateTimeCategory.prototype.calculateRangeAndInterval = function (size, axis) {\n this.axisSize = size;\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n DateTimeCategory.prototype.calculateVisibleLabels = function (axis) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var labelStyle;\n var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n if (axis.intervalType === 'Auto') {\n this.calculateDateTimeNiceInterval(axis, this.axisSize, parseInt(axis.labels[0], 10), parseInt(axis.labels[axis.labels.length - 1], 10));\n }\n else {\n axis.actualIntervalType = axis.intervalType;\n }\n axis.format = this.chart.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis, null, null)\n });\n for (var i = 0; i < axis.labels.length; i++) {\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n if (!this.sameInterval(axis.labels.map(Number)[i], axis.labels.map(Number)[i - 1], axis.actualIntervalType, i)) {\n if (withIn(i - padding, axis.visibleRange)) {\n triggerLabelRender(this.chart, i, axis.format(new Date(axis.labels.map(Number)[i])), labelStyle, axis);\n }\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * get same interval\n */\n DateTimeCategory.prototype.sameInterval = function (currentDate, previousDate, type, index) {\n var sameValue;\n if (index === 0) {\n sameValue = false;\n }\n else {\n switch (type) {\n case 'Years':\n sameValue = new Date(currentDate).getFullYear() === new Date(previousDate).getFullYear();\n break;\n case 'Months':\n sameValue = new Date(currentDate).getFullYear() === new Date(previousDate).getFullYear() &&\n new Date(currentDate).getMonth() === new Date(previousDate).getMonth();\n break;\n case 'Days':\n sameValue = (Math.abs(currentDate - previousDate) < 24 * 60 * 60 * 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n case 'Hours':\n sameValue = (Math.abs(currentDate - previousDate) < 60 * 60 * 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n case 'Minutes':\n sameValue = (Math.abs(currentDate - previousDate) < 60 * 1000 &&\n new Date(currentDate).getMinutes() === new Date(previousDate).getMinutes());\n break;\n case 'Seconds':\n sameValue = (Math.abs(currentDate - previousDate) < 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n }\n }\n return sameValue;\n };\n /**\n * Get module name\n */\n DateTimeCategory.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DateTimeCategory';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n DateTimeCategory.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return DateTimeCategory;\n}(Category));\nexport { DateTimeCategory };\n","/**\n * StripLine src\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Rect, TextOption, measureText, valueToCoefficient, textElement, RectOption, PathOption, appendChildElement, appendClipElement, withIn } from '../../common/utils/helper';\n/**\n * `StripLine` module is used to render the stripLine in chart.\n */\nvar StripLine = /** @class */ (function () {\n function StripLine() {\n }\n /**\n * Finding x, y, width and height of the strip line\n * @param axis\n * @param strip line\n * @param seriesClipRect\n * @param startValue\n * @param segmentAxis\n */\n StripLine.prototype.measureStripLine = function (axis, stripline, seriesClipRect, startValue, segmentAxis) {\n var actualStart;\n var actualEnd;\n var orientation = axis.orientation;\n if (stripline.isRepeat && stripline.size !== null) {\n actualStart = startValue;\n actualEnd = null;\n }\n else {\n if (axis.valueType === 'DateTimeCategory') {\n var start = stripline.start;\n var end = stripline.end;\n actualStart = (start != null && typeof start !== 'number') ? axis.labels.indexOf((start).getTime().toString()) :\n start;\n actualEnd = (end != null && typeof end !== 'number') ? axis.labels.indexOf((end).getTime().toString()) : end;\n }\n else {\n actualStart = stripline.start === null ? null : +stripline.start;\n actualEnd = stripline.end === null ? null : +stripline.end;\n }\n }\n var rect = this.getFromTovalue(actualStart, actualEnd, stripline.size, stripline.startFromAxis, axis, stripline);\n var height = (orientation === 'Vertical') ? (rect.to - rect.from) * axis.rect.height : seriesClipRect.height;\n var width = (orientation === 'Horizontal') ? (rect.to - rect.from) * axis.rect.width : seriesClipRect.width;\n var x = (orientation === 'Vertical') ? seriesClipRect.x : ((rect.from * axis.rect.width) + axis.rect.x);\n var y = (orientation === 'Horizontal') ? seriesClipRect.y : (axis.rect.y + axis.rect.height -\n ((stripline.sizeType === 'Pixel' ? rect.from : rect.to) * axis.rect.height));\n if (stripline.isSegmented && stripline.segmentStart != null && stripline.segmentEnd != null && stripline.sizeType !== 'Pixel') {\n var segRect = this.getFromTovalue(+stripline.segmentStart, +stripline.segmentEnd, null, null, segmentAxis, stripline);\n if (segmentAxis.orientation === 'Vertical') {\n y = (segmentAxis.rect.y + segmentAxis.rect.height -\n (segRect.to * segmentAxis.rect.height));\n height = (segRect.to - segRect.from) * segmentAxis.rect.height;\n }\n else {\n x = ((segRect.from * segmentAxis.rect.width) + segmentAxis.rect.x);\n width = (segRect.to - segRect.from) * segmentAxis.rect.width;\n }\n }\n if ((height !== 0 && width !== 0) || (stripline.sizeType === 'Pixel' && (stripline.start !== null || stripline.startFromAxis))) {\n return new Rect(x, y, width, height);\n }\n return new Rect(0, 0, 0, 0);\n };\n /**\n * To get from to value from start, end, size, start from axis\n * @param start\n * @param end\n * @param size\n * @param startFromAxis\n * @param axis\n * @param strip line\n */\n StripLine.prototype.getFromTovalue = function (start, end, size, startFromAxis, axis, stripline) {\n var from = (!stripline.isRepeat && startFromAxis) ? axis.visibleRange.min : start;\n var to = this.getToValue(Math.max(start, isNullOrUndefined(end) ? start : end), from, size, axis, end, stripline);\n from = this.findValue(from, axis);\n to = this.findValue(to, axis);\n return { from: valueToCoefficient(axis.isInversed ? to : from, axis), to: valueToCoefficient(axis.isInversed ? from : to, axis) };\n };\n /**\n * Finding end value of the strip line\n * @param to\n * @param from\n * @param size\n * @param axis\n * @param end\n * @param strip line\n */\n StripLine.prototype.getToValue = function (to, from, size, axis, end, stripline) {\n var sizeType = stripline.sizeType;\n var isEnd = (end === null);\n if (axis.valueType === 'DateTime') {\n var fromValue = new Date(from);\n if (sizeType === 'Auto') {\n sizeType = axis.actualIntervalType;\n size *= axis.visibleRange.interval;\n }\n switch (sizeType) {\n case 'Years':\n return (isEnd ? new Date(fromValue.setFullYear(fromValue.getFullYear() + size)) : to);\n case 'Months':\n return (isEnd ? new Date(fromValue.setMonth(fromValue.getMonth() + size)) : to);\n case 'Days':\n return (isEnd ? new Date(fromValue.setDate(fromValue.getDate() + size)) : to);\n case 'Hours':\n return (isEnd ? new Date(fromValue.setHours(fromValue.getHours() + size)) : to);\n case 'Minutes':\n return (isEnd ? new Date(fromValue.setMinutes(fromValue.getMinutes() + size)) : to);\n case 'Seconds':\n return (isEnd ? new Date(fromValue.setSeconds(fromValue.getSeconds() + size)) : to);\n default:\n return from;\n }\n }\n else {\n return stripline.sizeType === 'Pixel' ? from : (isEnd ? (from + size) : to);\n }\n };\n /**\n * To check the strip line values within range\n * @param value\n * @param axis\n */\n StripLine.prototype.findValue = function (value, axis) {\n if (value < axis.visibleRange.min) {\n value = axis.visibleRange.min;\n }\n else if (value > axis.visibleRange.max) {\n value = axis.visibleRange.max;\n }\n return value;\n };\n /**\n * To render strip lines based start and end.\n * @private\n * @param chart\n * @param position\n * @param axes\n */\n StripLine.prototype.renderStripLine = function (chart, position, axes) {\n var id = chart.element.id + '_stripline_' + position + '_';\n var seriesClipRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var count = 0;\n var end = 0;\n var limit = 0;\n var startValue = 0;\n var segmentAxis = null;\n var range;\n var options = new RectOption(id + 'ClipRect', 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: chart.initialClipRect.x, y: chart.initialClipRect.y,\n width: chart.initialClipRect.width,\n height: chart.initialClipRect.height\n });\n var striplineGroup = chart.renderer.createGroup({\n id: id + 'collections',\n 'clip-path': 'url(#' + id + 'ClipRect' + ')'\n });\n striplineGroup.appendChild(appendClipElement(chart.redraw, options, chart.renderer));\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n for (var _a = 0, _b = axis.stripLines; _a < _b.length; _a++) {\n var stripline = _b[_a];\n if (stripline.visible && stripline.zIndex === position) {\n if (stripline.isSegmented && stripline.segmentStart != null && stripline.segmentEnd != null &&\n stripline.sizeType !== 'Pixel') {\n segmentAxis = this.getSegmentAxis(axes, axis, stripline);\n }\n if (stripline.isRepeat && stripline.repeatEvery != null && stripline.size !== null && stripline.sizeType !== 'Pixel') {\n limit = (stripline.repeatUntil != null) ? ((axis.valueType === 'DateTime') ?\n stripline.repeatUntil.getTime() : +stripline.repeatUntil) : axis.actualRange.max;\n startValue = stripline.start;\n if ((stripline.startFromAxis && axis.valueType === 'DateTime' && stripline.sizeType === 'Auto') ||\n (stripline.start < axis.visibleRange.min)) {\n startValue = axis.visibleLabels[0].value === axis.visibleRange.min ? axis.visibleRange.min :\n axis.visibleLabels[0].value - (axis.valueType === 'DateTime' ? axis.dateTimeInterval :\n axis.visibleRange.interval);\n }\n startValue = stripline.startFromAxis && axis.valueType !== 'DateTime' ? axis.visibleRange.min : startValue;\n while (startValue < limit) {\n end = (startValue + (axis.valueType === 'DateTime' ? axis.dateTimeInterval * +stripline.size : stripline.size));\n range = withIn(end, axis.visibleRange);\n if ((startValue >= axis.visibleRange.min && startValue < axis.visibleRange.max) || range) {\n this.renderStripLineElement(axis, stripline, seriesClipRect, id, striplineGroup, chart, startValue, segmentAxis, count);\n }\n count++;\n startValue = this.getStartValue(axis, stripline, startValue);\n }\n }\n else {\n this.renderStripLineElement(axis, stripline, seriesClipRect, id, striplineGroup, chart, null, segmentAxis, count);\n count++;\n }\n }\n }\n }\n appendChildElement(chart.svgObject, striplineGroup, chart.redraw);\n };\n /**\n * To draw the single line strip line\n * @param strip line\n * @param rect\n * @param id\n * @param parent\n * @param chart\n * @param axis\n */\n StripLine.prototype.renderPath = function (stripline, rect, id, parent, chart, axis) {\n var d = (axis.orientation === 'Vertical') ? ('M' + rect.x + ' ' + rect.y + ' ' + 'L' + (rect.x + rect.width)\n + ' ' + rect.y) :\n ('M' + rect.x + ' ' + rect.y + ' ' + 'L' + rect.x + ' ' + (rect.y + rect.height));\n parent.appendChild(chart.renderer.drawPath(new PathOption(id, '', stripline.size, stripline.color, stripline.opacity, stripline.dashArray, d)));\n };\n ;\n /**\n * To draw the rectangle\n * @param strip line\n * @param rect\n * @param id\n * @param parent\n * @param chart\n */\n StripLine.prototype.renderRectangle = function (stripline, rect, id, parent, chart) {\n parent.appendChild(chart.renderer.drawRectangle(new RectOption(id, stripline.color, stripline.border, stripline.opacity, rect, 0, 0, '', stripline.dashArray)));\n };\n /**\n * To create the text on strip line\n * @param strip line\n * @param rect\n * @param id\n * @param parent\n * @param chart\n * @param axis\n */\n StripLine.prototype.renderText = function (stripline, rect, id, parent, chart, axis) {\n var textSize = measureText(stripline.text, stripline.textStyle);\n var textMid = 3 * (textSize.height / 8);\n var ty = rect.y + (rect.height / 2) + textMid;\n var rotation = (stripline.rotation === null) ? ((axis.orientation === 'Vertical') ? 0 : -90) : stripline.rotation;\n var tx = rect.x + (rect.width / 2);\n var anchor;\n var padding = 5;\n if (axis.orientation === 'Horizontal') {\n tx = this.getTextStart(tx + (textMid * this.factor(stripline.horizontalAlignment)), rect.width, stripline.horizontalAlignment);\n ty = this.getTextStart(ty - textMid, rect.height, stripline.verticalAlignment);\n anchor = stripline.horizontalAlignment;\n }\n else {\n tx = this.getTextStart(tx, rect.width, stripline.horizontalAlignment);\n ty = this.getTextStart(ty + (textMid * this.factor(stripline.verticalAlignment)) - padding, rect.height, stripline.verticalAlignment);\n anchor = stripline.verticalAlignment;\n }\n textElement(new TextOption(id, tx, ty, anchor, stripline.text, 'rotate(' + rotation + ' ' + tx + ',' + ty + ')', 'middle'), stripline.textStyle, stripline.textStyle.color, parent);\n };\n /**\n * To find the next value of the recurrence strip line\n * @param axis\n * @param stripline\n * @param startValue\n */\n StripLine.prototype.getStartValue = function (axis, stripline, startValue) {\n if (axis.valueType === 'DateTime') {\n return this.getToValue(null, startValue, +stripline.repeatEvery, axis, null, stripline);\n }\n else {\n return startValue + (+stripline.repeatEvery);\n }\n };\n /**\n * Finding segment axis for segmented strip line\n * @param axes\n * @param axis\n * @param strip line\n */\n StripLine.prototype.getSegmentAxis = function (axes, axis, stripline) {\n var segment;\n if (stripline.segmentAxisName == null) {\n return (axis.orientation === 'Horizontal') ? axes[1] : axes[0];\n }\n else {\n for (var i = 0; i < axes.length; i++) {\n if (stripline.segmentAxisName === axes[i].name) {\n segment = axes[i];\n }\n }\n return segment;\n }\n };\n /**\n * To render strip line on chart\n * @param axis\n * @param stripline\n * @param seriesClipRect\n * @param id\n * @param striplineGroup\n * @param chart\n * @param startValue\n * @param segmentAxis\n * @param count\n */\n StripLine.prototype.renderStripLineElement = function (axis, stripline, seriesClipRect, id, striplineGroup, chart, startValue, segmentAxis, count) {\n var rect = this.measureStripLine(axis, stripline, seriesClipRect, startValue, segmentAxis);\n if (stripline.sizeType === 'Pixel') {\n this.renderPath(stripline, rect, id + 'path_' + count, striplineGroup, chart, axis);\n }\n else {\n if (rect.height !== 0 && rect.width !== 0) {\n this.renderRectangle(stripline, rect, id + 'rect_' + count, striplineGroup, chart);\n }\n }\n if (stripline.text !== '') {\n this.renderText(stripline, rect, id + 'text_' + count, striplineGroup, chart, axis);\n }\n };\n /**\n * To find the factor of the text\n * @param anchor\n */\n StripLine.prototype.factor = function (anchor) {\n var factor = 0;\n switch (anchor) {\n case 'Start':\n factor = 1;\n break;\n case 'End':\n factor = -1;\n break;\n }\n return factor;\n };\n /**\n * To find the start value of the text\n * @param xy\n * @param size\n * @param textAlignment\n */\n StripLine.prototype.getTextStart = function (xy, size, textAlignment) {\n var padding = 5;\n switch (textAlignment) {\n case 'Start':\n xy = xy - (size / 2) + padding;\n break;\n case 'End':\n xy = xy + (size / 2) - padding;\n break;\n }\n return xy;\n };\n /**\n * To get the module name for `StripLine`.\n */\n StripLine.prototype.getModuleName = function () {\n return 'StripLine';\n };\n /**\n * To destroy the `StripLine` module.\n */\n StripLine.prototype.destroy = function () {\n // destroy peform here\n };\n return StripLine;\n}());\nexport { StripLine };\n","import { Rect, getAnimationFunction, pathAnimation, getElement } from '../../common/utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * Base for line type series.\n */\nvar LineBase = /** @class */ (function () {\n /** @private */\n function LineBase(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * To improve the chart performance.\n * @return {void}\n * @private\n */\n LineBase.prototype.improveChartPerformance = function (series) {\n var tempPoints = [];\n var xVisibleRange = series.xAxis.visibleRange;\n var yVisibleRange = series.yAxis.visibleRange;\n var seriesPoints = series.points;\n var areaBounds = series.clipRect;\n var xTolerance = Math.abs(xVisibleRange.delta / areaBounds.width);\n var yTolerance = Math.abs(yVisibleRange.delta / areaBounds.height);\n var prevXValue = (seriesPoints[0] && seriesPoints[0].x > xTolerance) ? 0 : xTolerance;\n var prevYValue = (seriesPoints[0] && seriesPoints[0].y > yTolerance) ? 0 : yTolerance;\n var xVal = 0;\n var yVal = 0;\n var currentPoint;\n for (var _i = 0, seriesPoints_1 = seriesPoints; _i < seriesPoints_1.length; _i++) {\n var currentPoint_1 = seriesPoints_1[_i];\n currentPoint_1.symbolLocations = [];\n xVal = currentPoint_1.xValue ? currentPoint_1.xValue : xVisibleRange.min;\n yVal = currentPoint_1.yValue ? currentPoint_1.yValue : yVisibleRange.min;\n if (Math.abs(prevXValue - xVal) >= xTolerance || Math.abs(prevYValue - yVal) >= yTolerance) {\n tempPoints.push(currentPoint_1);\n prevXValue = xVal;\n prevYValue = yVal;\n }\n }\n return tempPoints;\n };\n /**\n * To generate the line path direction\n * @param firstPoint\n * @param secondPoint\n * @param series\n * @param isInverted\n * @param getPointLocation\n * @param startPoint\n */\n LineBase.prototype.getLineDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation, startPoint) {\n var direction = '';\n if (firstPoint != null) {\n var point1 = getPointLocation(firstPoint.xValue, firstPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n var point2 = getPointLocation(secondPoint.xValue, secondPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n direction = startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' +\n 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ';\n }\n return direction;\n };\n /**\n * To append the line path.\n * @return {void}\n * @private\n */\n LineBase.prototype.appendLinePath = function (options, series, clipRect) {\n var element = getElement(options.id);\n var previousDirection = element ? element.getAttribute('d') : null;\n var htmlObject = series.chart.renderer.drawPath(options);\n htmlObject.setAttribute('clip-path', clipRect);\n series.pathElement = htmlObject;\n series.seriesElement.appendChild(htmlObject);\n series.isRectSeries = false;\n pathAnimation(element, options.d, series.chart.redraw, previousDirection);\n };\n /**\n * To render the marker for the series.\n * @return {void}\n * @private\n */\n LineBase.prototype.renderMarker = function (series) {\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * To do the progressive animation.\n * @return {void}\n * @private\n */\n LineBase.prototype.doProgressiveAnimation = function (series, option) {\n var animation = new Animation({});\n var path = series.pathElement;\n var strokeDashArray = path.getAttribute('stroke-dasharray');\n var pathLength = series.pathElement.getTotalLength();\n var currentTime;\n path.style.visibility = 'hidden';\n animation.animate(path, {\n duration: option.duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n path.style.visibility = 'visible';\n currentTime = Math.abs(Math.round(((args.timeStamp - args.delay) * pathLength) / args.duration));\n path.setAttribute('stroke-dasharray', currentTime + ',' + pathLength);\n }\n },\n end: function (model) {\n path.setAttribute('stroke-dasharray', strokeDashArray);\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n /**\n * To store the symbol location and region\n * @param point\n * @param series\n * @param isInverted\n * @param getLocation\n */\n LineBase.prototype.storePointLocation = function (point, series, isInverted, getLocation) {\n var markerWidth = (series.marker && series.marker.width) ? series.marker.width : 0;\n var markerHeight = (series.marker && series.marker.height) ? series.marker.height : 0;\n point.symbolLocations.push(getLocation(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted, series));\n point.regions.push(new Rect(point.symbolLocations[0].x - markerWidth, point.symbolLocations[0].y - markerHeight, 2 * markerWidth, 2 * markerHeight));\n };\n /**\n * To do the linear animation.\n * @return {void}\n * @private\n */\n LineBase.prototype.doLinearAnimation = function (series, animation) {\n var clipRect = series.clipRectElement.childNodes[0].childNodes[0];\n var effect = getAnimationFunction('Linear');\n var elementHeight = +clipRect.getAttribute('height');\n var elementWidth = +clipRect.getAttribute('width');\n var xCenter = +clipRect.getAttribute('x');\n var yCenter = series.chart.requireInvertedAxis ? +clipRect.getAttribute('height') + +clipRect.getAttribute('y') :\n +clipRect.getAttribute('y');\n var value;\n clipRect.style.visibility = 'hidden';\n new Animation({}).animate(clipRect, {\n duration: animation.duration,\n delay: animation.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n clipRect.style.visibility = 'visible';\n if (series.chart.requireInvertedAxis) {\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n }\n else {\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n }\n }\n },\n end: function (model) {\n clipRect.setAttribute('transform', 'translate(0,0)');\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n return LineBase;\n}());\nexport { LineBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange, getPoint, PathOption, TransformToVisible } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `LineSeries` module used to render the line series.\n */\nvar LineSeries = /** @class */ (function (_super) {\n __extends(LineSeries, _super);\n function LineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Line Series.\n * @return {void}.\n * @private\n */\n LineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var point1;\n var point2;\n var direction = '';\n var prevPoint = null;\n var startPoint = 'M';\n var options;\n var isPolar = (series.chart && series.chart.chartAreaType === 'PolarRadar');\n var isDrop = (series.emptyPointSettings && series.emptyPointSettings.mode === 'Drop');\n var getCoordinate = isPolar ? TransformToVisible : getPoint;\n var visiblePoints = this.improveChartPerformance(series);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction += this.getLineDirection(prevPoint, point, series, isInverted, getCoordinate, startPoint);\n startPoint = prevPoint ? 'L' : startPoint;\n prevPoint = point;\n this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n else {\n prevPoint = isDrop ? prevPoint : null;\n startPoint = isDrop ? startPoint : 'M';\n point.symbolLocations = [];\n }\n }\n if (isPolar) {\n if (series.isClosed) {\n point2 = getCoordinate(visiblePoints[visiblePoints.length - 1].xValue, visiblePoints[visiblePoints.length - 1].yValue, xAxis, yAxis, isInverted, series);\n point1 = getCoordinate(visiblePoints[0].xValue, visiblePoints[0].yValue, xAxis, yAxis, isInverted, series);\n direction = direction.concat(startPoint + ' ' + point2.x + ' ' + point2.y + ' ' + 'L' + ' ' + point1.x + ' ' + point1.y);\n }\n }\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index);\n options = new PathOption(name, 'none', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n LineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doProgressiveAnimation(series, option);\n };\n /**\n * Get module name.\n */\n LineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'LineSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n LineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return LineSeries;\n}(LineBase));\nexport { LineSeries };\n","import { Animation } from '@syncfusion/ej2-base';\nimport { DoubleRange } from '../utils/double-range';\nimport { PathOption, appendChildElement, redrawElement, pathAnimation, valueToCoefficient } from '../../common/utils/helper';\nimport { getAnimationFunction, getPoint, Rect, getMinPointsDelta } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * Column Series Base\n */\nvar ColumnBase = /** @class */ (function () {\n function ColumnBase() {\n }\n /**\n * To get the position of the column series.\n * @return {DoubleRange}\n * @private\n */\n ColumnBase.prototype.getSideBySideInfo = function (series) {\n if (series.chart.enableSideBySidePlacement && !series.position) {\n this.getSideBySidePositions(series);\n }\n var position = !series.chart.enableSideBySidePlacement ? 0 : series.position;\n var rectCount = !series.chart.enableSideBySidePlacement ? 1 : series.rectCount;\n series.isRectSeries = true;\n var visibleSeries = series.chart.visibleSeries;\n var seriesSpacing = series.chart.enableSideBySidePlacement ? series.columnSpacing : 0; // Column Spacing\n var pointSpacing = (series.columnWidth === null) ? ((series.type === 'Histogram') ? 1 : 0.7) :\n series.columnWidth; // Column width\n var minimumPointDelta = getMinPointsDelta(series.xAxis, visibleSeries);\n var width = minimumPointDelta * pointSpacing;\n var radius;\n var location = (position) / rectCount - 0.5;\n var doubleRange = new DoubleRange(location, location + (1 / rectCount));\n if (!(isNaN(doubleRange.start) || isNaN(doubleRange.end))) {\n doubleRange = new DoubleRange(doubleRange.start * width, doubleRange.end * width);\n radius = seriesSpacing * doubleRange.delta;\n doubleRange = new DoubleRange(doubleRange.start + radius / 2, doubleRange.end - radius / 2);\n }\n return doubleRange;\n };\n /**\n * To get the rect values.\n * @return {Rect}\n * @private\n */\n ColumnBase.prototype.getRectangle = function (x1, y1, x2, y2, series) {\n var point1 = getPoint(x1, y1, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n var point2 = getPoint(x2, y2, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n return new Rect(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y), Math.abs(point2.x - point1.x), Math.abs(point2.y - point1.y));\n };\n /**\n * To get the position of each series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.getSideBySidePositions = function (series) {\n var chart = series.chart;\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.findRectPosition(series.findSeriesCollection(columnItem, item, false));\n }\n }\n };\n ColumnBase.prototype.findRectPosition = function (seriesCollection) {\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n seriesCollection.forEach(function (value) {\n if (value.type.indexOf('Stacking') !== -1) {\n if (value.stackingGroup) {\n if (stackingGroup[value.stackingGroup] === undefined) {\n value.position = vSeries.rectCount;\n stackingGroup[value.stackingGroup] = vSeries.rectCount++;\n }\n else {\n value.position = stackingGroup[value.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n value.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n value.position = vSeries.position;\n }\n }\n }\n else {\n value.position = vSeries.rectCount++;\n }\n });\n seriesCollection.forEach(function (value) {\n value.rectCount = vSeries.rectCount;\n });\n };\n /**\n * Updates the symbollocation for points\n * @return void\n * @private\n */\n ColumnBase.prototype.updateSymbolLocation = function (point, rect, series) {\n if (!series.chart.requireInvertedAxis) {\n this.updateXRegion(point, rect, series);\n }\n else {\n this.updateYRegion(point, rect, series);\n }\n if (series.type === 'Histogram') {\n point.minimum = +point.x - series.histogramValues.binWidth / 2;\n point.maximum = +point.x + series.histogramValues.binWidth / 2;\n }\n };\n /**\n * Update the region for the point.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.updateXRegion = function (point, rect, series) {\n point.regions.push(rect);\n point.symbolLocations.push({\n x: rect.x + (rect.width) / 2,\n y: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isInversed)) ? rect.y : (rect.y + rect.height)\n });\n if (series.type === 'RangeColumn') {\n point.symbolLocations.push({\n x: rect.x + (rect.width) / 2,\n y: rect.y + rect.height\n });\n }\n };\n /**\n * Update the region for the point in bar series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.updateYRegion = function (point, rect, series) {\n point.regions.push(rect);\n point.symbolLocations.push({\n x: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isInversed)) ? rect.x + rect.width : rect.x,\n y: rect.y + rect.height / 2\n });\n if (series.type === 'RangeColumn') {\n point.symbolLocations.push({\n x: rect.x,\n y: rect.y + rect.height / 2\n });\n }\n };\n /**\n * To render the marker for the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.renderMarker = function (series) {\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.triggerEvent = function (series, point, fill, border) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, fill),\n border: series.setBorderColor(point, border)\n };\n series.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /**\n * To draw the rectangle for points.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.drawRectangle = function (series, point, rect, argsData) {\n var chart = series.chart;\n var check = chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var direction = this.calculateRoundedRectPath(rect, series.cornerRadius.topLeft, series.cornerRadius.topRight, series.cornerRadius.bottomLeft, series.cornerRadius.bottomRight);\n var name = series.category === 'Indicator' ? chart.element.id + '_Indicator_' + series.index + '_' + series.name +\n '_Point_' + point.index : chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n var previousElement = redrawElement(chart.redraw, name);\n var previousDirection = previousElement ? previousElement.getAttribute('d') : '';\n var options = new PathOption(name, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var element = chart.renderer.drawPath(options);\n switch (series.seriesType) {\n case 'XY':\n element.setAttribute('aria-label', point.x.toString() + ':' + point.yValue.toString());\n break;\n case 'HighLow':\n element.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString() + ':' + point.low.toString());\n break;\n }\n appendChildElement(series.seriesElement, element, chart.redraw);\n pathAnimation(element, direction, chart.redraw, previousDirection);\n };\n /**\n * To animate the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.animate = function (series) {\n var rectElements = series.seriesElement.childNodes;\n var count = series.category === 'Indicator' ? 0 : 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length && !(series.type === 'BoxAndWhisker' && point.regions.length)) {\n continue;\n }\n this.animateRect(rectElements[count], series, point);\n count++;\n }\n };\n /**\n * To animate the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.animateRect = function (element, series, point) {\n var option = series.animation;\n var effect = getAnimationFunction('Linear');\n var isPlot = point.yValue < 0;\n var x;\n var y;\n var elementHeight = +point.regions[0].height;\n var elementWidth = +point.regions[0].width;\n var centerX;\n var centerY;\n if (!series.chart.requireInvertedAxis) {\n x = +point.regions[0].x;\n if (series.type.indexOf('Stacking') > -1) {\n y = (1 - valueToCoefficient(0, series.yAxis)) * (series.yAxis.rect.height);\n centerX = x;\n centerY = y;\n }\n else {\n y = +point.regions[0].y;\n centerY = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? y + elementHeight / 2 :\n (isPlot !== series.yAxis.isInversed) ? y : y + elementHeight;\n centerX = isPlot ? x : x + elementWidth;\n }\n }\n else {\n y = +point.regions[0].y;\n if (series.type.indexOf('Stacking') > -1) {\n x = (valueToCoefficient(0, series.yAxis)) * series.yAxis.rect.width;\n centerX = x;\n centerY = y;\n }\n else {\n x = +point.regions[0].x;\n centerY = isPlot ? y : y + elementHeight;\n centerX = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? x + elementWidth / 2 :\n (isPlot !== series.yAxis.isInversed) ? x + elementWidth : x;\n }\n }\n var value;\n element.style.visibility = 'hidden';\n new Animation({}).animate(element, {\n duration: option.duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n element.style.visibility = 'visible';\n if (!series.chart.requireInvertedAxis) {\n elementHeight = elementHeight ? elementHeight : 1;\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n else {\n elementWidth = elementWidth ? elementWidth : 1;\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n }\n },\n end: function (model) {\n element.setAttribute('transform', 'translate(0,0)');\n var seriesElement = series.seriesElement;\n if (element === seriesElement.lastElementChild || point.index === series.points.length - 1 ||\n (series.type === 'Waterfall' && element === seriesElement.children[seriesElement.childElementCount - 2])) {\n series.chart.trigger('animationComplete', { series: series });\n if (series.type === 'Waterfall') {\n var rectElements = seriesElement.childNodes;\n for (var i = 0; i < rectElements.length; i++) {\n if (rectElements[i].id.indexOf('Connector') !== -1) {\n rectElements[i].style.visibility = 'visible';\n rectElements[i].setAttribute('transform', 'translate(0,0)');\n }\n }\n }\n }\n }\n });\n };\n /**\n * To get rounded rect path direction\n */\n ColumnBase.prototype.calculateRoundedRectPath = function (rect, topLeft, topRight, bottomLeft, bottomRight) {\n return 'M' + ' ' + rect.x + ' ' + (topLeft + rect.y) +\n ' Q ' + rect.x + ' ' + rect.y + ' ' + (rect.x + topLeft) + ' ' +\n rect.y + ' ' + 'L' + ' ' + (rect.x + rect.width - topRight) + ' ' + rect.y +\n ' Q ' + (rect.x + rect.width) + ' ' + rect.y + ' ' +\n (rect.x + rect.width) + ' ' + (rect.y + topRight) + ' ' + 'L ' +\n (rect.x + rect.width) + ' ' + (rect.y + rect.height - bottomRight)\n + ' Q ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height) + ' ' + (rect.x + rect.width - bottomRight) + ' ' +\n (rect.y + rect.height) + ' ' + 'L ' + (rect.x + bottomLeft) + ' ' + (rect.y + rect.height) + ' Q ' + rect.x + ' ' +\n (rect.y + rect.height) + ' ' + rect.x + ' ' + (rect.y + rect.height - bottomLeft) + ' ' + 'L' + ' ' + rect.x + ' ' +\n (topLeft + rect.y) + ' ' + 'Z';\n };\n return ColumnBase;\n}());\nexport { ColumnBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `ColumnSeries` Module used to render the column series.\n */\nvar ColumnSeries = /** @class */ (function (_super) {\n __extends(ColumnSeries, _super);\n function ColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Column series.\n * @return {void}\n * @private\n */\n ColumnSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointColumn = _a[_i];\n pointColumn.symbolLocations = [];\n pointColumn.regions = [];\n if (pointColumn.visible && withInRange(series.points[pointColumn.index - 1], pointColumn, series.points[pointColumn.index + 1], series)) {\n rect = this.getRectangle(pointColumn.xValue + sideBySideInfo.start, pointColumn.yValue, pointColumn.xValue + sideBySideInfo.end, origin, series);\n var color = series.category === 'Indicator' ? pointColumn.color : series.interior;\n argsData = this.triggerEvent(series, pointColumn, color, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointColumn, rect, series);\n this.drawRectangle(series, pointColumn, rect, argsData);\n }\n }\n }\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n ColumnSeries.prototype.getModuleName = function () {\n return 'ColumnSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the column series.\n * @return {void}\n * @private\n */\n ColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return ColumnSeries;\n}(ColumnBase));\nexport { ColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { getPoint, appendClipElement, pathAnimation } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\nimport { RectOption, getElement } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Base class for multi colored series\n */\nvar MultiColoredSeries = /** @class */ (function (_super) {\n __extends(MultiColoredSeries, _super);\n function MultiColoredSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To Generate the area path direction\n * @param xValue\n * @param yValue\n * @param series\n * @param isInverted\n * @param getPointLocation\n * @param startPoint\n * @param startPath\n */\n MultiColoredSeries.prototype.getAreaPathDirection = function (xValue, yValue, series, isInverted, getPointLocation, startPoint, startPath) {\n var direction = '';\n var firstPoint;\n if (startPoint === null) {\n firstPoint = getPointLocation(xValue, yValue, series.xAxis, series.yAxis, isInverted, series);\n direction += (startPath + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n }\n return direction;\n };\n /**\n * To Generate the empty point direction\n * @param firstPoint\n * @param secondPoint\n * @param series\n * @param isInverted\n * @param getPointLocation\n */\n MultiColoredSeries.prototype.getAreaEmptyDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation) {\n var direction = '';\n direction += this.getAreaPathDirection(firstPoint.x, firstPoint.y, series, isInverted, getPointLocation, null, 'L');\n direction += this.getAreaPathDirection(secondPoint.x, secondPoint.y, series, isInverted, getPointLocation, null, 'L');\n return direction;\n };\n /**\n * To set point color\n * @param points\n */\n MultiColoredSeries.prototype.setPointColor = function (currentPoint, previous, series, isXSegment, segments) {\n if (series.pointColorMapping === '') {\n var segment = void 0;\n var value = void 0;\n for (var i = 0; i < segments.length; i++) {\n segment = segments[i];\n value = isXSegment ? currentPoint.xValue : currentPoint.yValue;\n if (value <= this.getAxisValue(segment.value, isXSegment ? series.xAxis : series.yAxis, series.chart) || !segment.value) {\n currentPoint.interior = segment.color;\n break;\n }\n }\n if (currentPoint.interior == null) {\n currentPoint.interior = series.interior;\n }\n return false;\n }\n else {\n if (previous) {\n return series.setPointColor(currentPoint, series.interior) !== series.setPointColor(previous, series.interior);\n }\n else {\n return false;\n }\n }\n };\n MultiColoredSeries.prototype.sortSegments = function (series, chartSegments) {\n var axis = series.segmentAxis === 'X' ? series.xAxis : series.yAxis;\n var segments = [].concat(chartSegments);\n var access = this;\n return segments.sort(function (a, b) {\n return access.getAxisValue(a.value, axis, series.chart) - access.getAxisValue(b.value, axis, series.chart);\n });\n };\n /**\n * Segment calculation performed here\n * @param series\n * @param options\n * @param chartSegments\n */\n MultiColoredSeries.prototype.applySegmentAxis = function (series, options, segments) {\n var _this = this;\n if (series.pointColorMapping !== '') {\n options.map(function (option) {\n _this.appendLinePath(option, series, '');\n });\n return null;\n }\n var isXSegment = series.segmentAxis === 'X';\n var axis = isXSegment ? series.xAxis : series.yAxis;\n var chart = series.chart;\n var segment;\n this.includeSegment(segments, axis, series, segments.length);\n var length = segments.length;\n var value;\n var clipPath;\n var attributeOptions;\n var _loop_1 = function (index) {\n segment = segments[index];\n value = this_1.getAxisValue(segment.value, axis, series.chart);\n clipPath = this_1.createClipRect(index ? this_1.getAxisValue(segments[index - 1].value, axis, series.chart)\n : axis.visibleRange.min, value, series, index, isXSegment);\n if (clipPath) {\n options.map(function (option) {\n attributeOptions = {\n 'clip-path': clipPath,\n 'stroke-dasharray': segment.dashArray,\n 'opacity': option.opacity,\n 'stroke': series.type.indexOf('Line') > -1 ? segment.color || series.interior : series.border.color,\n 'stroke-width': option['stroke-width'],\n 'fill': series.type.indexOf('Line') > -1 ? 'none' : segment.color || series.interior,\n 'id': option.id + '_Segment_' + index,\n 'd': option.d\n };\n pathAnimation(getElement(attributeOptions.id), attributeOptions.d, chart.redraw);\n series.seriesElement.appendChild(chart.renderer.drawPath(attributeOptions));\n });\n }\n };\n var this_1 = this;\n for (var index = 0; index < length; index++) {\n _loop_1(index);\n }\n };\n MultiColoredSeries.prototype.includeSegment = function (segments, axis, series, length) {\n if (length <= 0) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n return null;\n }\n if (this.getAxisValue(segments[length - 1].value, axis, series.chart) < axis.visibleRange.max) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n }\n };\n /**\n * To create clip rect for segment axis\n * @param startValue\n * @param endValue\n * @param series\n * @param index\n * @param isX\n * @param chart\n */\n MultiColoredSeries.prototype.createClipRect = function (startValue, endValue, series, index, isX) {\n var isRequired = series.chart.requireInvertedAxis;\n var startPointLocation = getPoint(isX ? startValue : series.xAxis.visibleRange.min, isX ? series.yAxis.visibleRange.max : endValue, series.xAxis, series.yAxis, isRequired);\n var endPointLocation = getPoint(isX ? endValue : series.xAxis.visibleRange.max, isX ? series.yAxis.visibleRange.min : startValue, series.xAxis, series.yAxis, isRequired);\n endPointLocation = isRequired ?\n [startPointLocation, startPointLocation = endPointLocation][0] : endPointLocation;\n var options;\n if ((endPointLocation.x - startPointLocation.x > 0) && (endPointLocation.y - startPointLocation.y > 0)) {\n options = new RectOption(series.chart.element.id + '_ChartSegmentClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: startPointLocation.x,\n y: startPointLocation.y,\n width: endPointLocation.x - startPointLocation.x,\n height: endPointLocation.y - startPointLocation.y\n });\n series.seriesElement.appendChild(appendClipElement(series.chart.redraw, options, series.chart.renderer));\n return 'url(#' + series.chart.element.id + '_ChartSegmentClipRect_' + index + ')';\n }\n return null;\n };\n /**\n * To get exact value from segment value\n * @param segmentValue\n * @param axis\n * @param chart\n */\n MultiColoredSeries.prototype.getAxisValue = function (segmentValue, axis, chart) {\n if (segmentValue === null) {\n segmentValue = axis.visibleRange.max;\n }\n if (axis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n return Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: segmentValue }).val))));\n }\n else if (axis.valueType.indexOf('Category') > -1) {\n var xValue = axis.valueType === 'DateTimeCategory' ?\n (segmentValue.getTime()).toString() :\n segmentValue;\n return (axis.labels.indexOf(xValue) < 0) ? +segmentValue : axis.labels.indexOf(xValue);\n }\n else {\n return +segmentValue;\n }\n };\n return MultiColoredSeries;\n}(LineBase));\nexport { MultiColoredSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { getPoint, withInRange, ChartLocation, PathOption, TransformToVisible } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `AreaSeries` module is used to render the area series.\n */\nvar AreaSeries = /** @class */ (function (_super) {\n __extends(AreaSeries, _super);\n function AreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Area series.\n * @return {void}\n * @private\n */\n AreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var _this = this;\n var startPoint = null;\n var direction = '';\n var origin = series.chart.chartAreaType === 'PolarRadar' ? series.points[0].yValue :\n Math.max(series.yAxis.visibleRange.min, 0);\n var currentXValue;\n var isDropMode = (series.emptyPointSettings && series.emptyPointSettings.mode === 'Drop');\n var borderWidth = series.border ? series.border.width : 0;\n var borderColor = series.border ? series.border.color : 'transparent';\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n series.points.map(function (point, i, seriesPoints) {\n currentXValue = point.xValue;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(seriesPoints[i - 1], point, seriesPoints[i + 1], series)) {\n direction += _this.getAreaPathDirection(currentXValue, origin, series, isInverted, getCoordinate, startPoint, 'M');\n startPoint = startPoint || new ChartLocation(currentXValue, origin);\n // First Point to draw the area path\n direction += _this.getAreaPathDirection(currentXValue, point.yValue, series, isInverted, getCoordinate, null, 'L');\n if (seriesPoints[i + 1] && !seriesPoints[i + 1].visible && !isDropMode) {\n direction += _this.getAreaEmptyDirection({ 'x': currentXValue, 'y': origin }, startPoint, series, isInverted, getCoordinate);\n startPoint = null;\n }\n _this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n });\n this.appendLinePath(new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, borderWidth, borderColor, series.opacity, series.dashArray, (series.points.length > 1 ? (direction + this.getAreaPathDirection(series.points[series.points.length - 1].xValue, series.chart.chartAreaType === 'PolarRadar' ?\n series.points[series.points.length - 1].yValue : origin, series, isInverted, getCoordinate, null, 'L')) : '')), series, '');\n this.renderMarker(series);\n };\n /**\n * To destroy the area series.\n * @return {void}\n * @private\n */\n AreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name\n */\n AreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'AreaSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n AreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return AreaSeries;\n}(MultiColoredSeries));\nexport { AreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `BarSeries` module is used to render the bar series.\n */\nvar BarSeries = /** @class */ (function (_super) {\n __extends(BarSeries, _super);\n function BarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Bar series.\n * @return {void}\n * @private\n */\n BarSeries.prototype.render = function (series) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var rect;\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointBar = _a[_i];\n pointBar.symbolLocations = [];\n pointBar.regions = [];\n if (pointBar.visible && withInRange(series.points[pointBar.index - 1], pointBar, series.points[pointBar.index + 1], series)) {\n rect = this.getRectangle(pointBar.xValue + sideBySideInfo.start, pointBar.yValue, pointBar.xValue + sideBySideInfo.end, origin, series);\n argsData = this.triggerEvent(series, pointBar, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointBar, rect, series);\n this.drawRectangle(series, pointBar, rect, argsData);\n }\n }\n }\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the bar series.\n * @return {void}\n * @private\n */\n BarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name\n */\n BarSeries.prototype.getModuleName = function () {\n return 'BarSeries';\n };\n return BarSeries;\n}(ColumnBase));\nexport { BarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { valueToCoefficient, TextOption, inside } from '../../common/utils/helper';\nimport { measureText, appendChildElement } from '../../common/utils/helper';\nimport { Size, Rect, PathOption, CircleOption } from '../../common/utils/helper';\nimport { LineBase } from '../series/line-base';\nimport { textElement, valueToPolarCoefficient, CoefficientToVector } from '../../common/utils/helper';\n/**\n * Specifies the Polar Axis Layout.\n */\nvar axisPadding = 10;\nvar PolarRadarPanel = /** @class */ (function (_super) {\n __extends(PolarRadarPanel, _super);\n function PolarRadarPanel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Measure the polar radar axis size.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.initialClipRect = rect;\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n //Measure axis size calculation\n this.measureRowAxis(chart, this.initialClipRect);\n this.measureColumnAxis(chart, this.initialClipRect);\n this.calculateAxisSize();\n };\n PolarRadarPanel.prototype.measureRowAxis = function (chart, rect) {\n this.calculateRowSize(rect);\n var row = chart.rows[0];\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight), rect);\n };\n PolarRadarPanel.prototype.measureColumnAxis = function (chart, rect) {\n this.calculateColumnSize(rect);\n var column = chart.columns[0];\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height), rect);\n };\n /**\n * Measure the column and row in chart.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measureDefinition = function (definition, chart, size, clipRect) {\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.getModule(chart);\n axis.baseModule.calculateRangeAndInterval(size, axis);\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.calculateAxisSize = function () {\n var chart = this.chart;\n var axis;\n var padding = 5;\n this.centerX = this.initialClipRect.width * 0.5 + this.initialClipRect.x;\n this.centerY = this.initialClipRect.height * 0.5 + this.initialClipRect.y;\n chart.radius = Math.min(this.initialClipRect.width, this.initialClipRect.height) / 2 - padding -\n chart.primaryXAxis.majorTickLines.height - chart.primaryXAxis.maxLabelSize.height;\n chart.radius = (chart.primaryXAxis.coefficient * chart.radius) / 100;\n this.seriesClipRect.y = this.centerY - chart.radius;\n this.seriesClipRect.x = this.centerX - chart.radius;\n this.seriesClipRect.height = 2 * chart.radius;\n this.seriesClipRect.width = 2 * chart.radius;\n this.calculateRowSize(this.seriesClipRect);\n axis = chart.primaryYAxis;\n axis.rect = this.seriesClipRect;\n this.calculateColumnSize(this.seriesClipRect);\n axis = chart.primaryXAxis;\n axis.rect = this.seriesClipRect;\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measure = function () {\n var chart = this.chart;\n chart.verticalAxes.push(chart.primaryYAxis);\n var row = chart.rows[0];\n row.axes[0] = chart.primaryYAxis;\n chart.rows[0] = row;\n chart.horizontalAxes.push(chart.primaryXAxis);\n var column = chart.columns[0];\n column.axes[0] = chart.primaryXAxis;\n chart.columns[0] = column;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n PolarRadarPanel.prototype.calculateRowSize = function (rect) {\n /*! Calculate row size */\n var chart = this.chart;\n var row = chart.rows[0];\n row.computedHeight = rect.height / 2;\n row.computedTop = rect.y;\n chart.rows[0] = row;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n PolarRadarPanel.prototype.calculateColumnSize = function (rect) {\n /*! Calculate column size */\n var chart = this.chart;\n var column = chart.columns[0];\n column.computedLeft = rect.x;\n column.computedWidth = rect.width;\n chart.columns[0] = column;\n };\n /**\n * To render the axis element.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.renderAxes = function () {\n var axis;\n var chart = this.chart;\n this.startAngle = chart.primaryXAxis.startAngle;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i });\n axis = chart.axisCollections[i];\n if (axis.orientation === 'Horizontal') {\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawXAxisGridLine(axis, i);\n }\n if (axis.visible) {\n this.drawXAxisLabels(axis, i);\n }\n }\n else {\n this.drawYAxisGridLine(axis, i);\n if (axis.lineStyle.width > 0) {\n this.drawYAxisLine(axis, i, axis.plotOffset, 0);\n }\n if (axis.visible) {\n this.drawYAxisLabels(axis, i);\n }\n }\n axisElement.appendChild(this.element);\n }\n axisElement.appendChild(this.element);\n appendChildElement(chart.svgObject, axisElement, chart.redraw);\n return axisLineElement;\n };\n PolarRadarPanel.prototype.drawYAxisLine = function (axis, index, plotX, plotY) {\n var chart = this.chart;\n var optionsLine = {};\n var vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n var axisLine = 'M ' + this.centerX + ' ' + this.centerY + 'L ' +\n (this.centerX + chart.radius * vector.x) + ' ' + (this.centerY + chart.radius * vector.y);\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n 'd': axisLine,\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n chart.yAxisElements.appendChild(chart.renderer.drawPath(optionsLine));\n };\n PolarRadarPanel.prototype.drawYAxisLabels = function (axis, index) {\n var chart = this.chart;\n var elementSize;\n var options;\n var pointX = 0;\n var pointY = 0;\n var vector;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var anchor = 'middle';\n var radius;\n var padding = 5;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n elementSize = axis.visibleLabels[i].size;\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n pointX = (this.centerX + radius * vector.x) + ((axis.majorTickLines.height + elementSize.width / 2 + padding / 2)\n * (Math.cos(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' ? 1 : -1));\n pointY = (this.centerY + radius * vector.y) + ((axis.majorTickLines.height + elementSize.height / 2)\n * (Math.sin(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' ? 1 : -1));\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY + (elementSize.height / 4), anchor, axis.visibleLabels[i].text);\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n chart.yAxisElements.appendChild(labelElement);\n };\n PolarRadarPanel.prototype.drawYAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var options;\n var radius;\n var majorTick = '';\n var majorGrid = '';\n var vector;\n var vector2;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var rect = axis.rect;\n var x1;\n var y1;\n var x2;\n var y2;\n var border = {\n color: axis.majorGridLines.color || chart.themeStyle.majorGridLine,\n width: axis.majorGridLines.width\n };\n if (axis.majorGridLines.width > 0) {\n if (chart.visibleSeries[0].type === 'Polar') {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n options = new CircleOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', border, axis.majorGridLines.width, this.centerX, this.centerY, radius);\n this.element.appendChild(chart.renderer.drawCircle(options));\n }\n }\n else {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n for (var i = 0, len = chart.primaryXAxis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i].value, chart.primaryXAxis), this.startAngle);\n if (i + 1 < len) {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i + 1].value, chart.primaryXAxis), this.startAngle);\n }\n else {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[0].value, chart.primaryXAxis), this.startAngle);\n }\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = this.centerX + radius * vector2.x;\n y2 = this.centerY + radius * vector2.y;\n majorGrid = majorGrid.concat('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ');\n }\n }\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, null, majorGrid);\n this.element.appendChild(chart.renderer.drawPath(options));\n }\n }\n if (axis.majorTickLines.width > 0) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = x1 + (axis.majorTickLines.height * (Math.cos(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' ? 1 : -1));\n y2 = y1 + (axis.majorTickLines.height * (Math.sin(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' ? 1 : -1));\n majorTick = majorTick.concat('M ' + x1 + ' ' + y1 +\n ' L ' + x2 + ' ' + y2 + ' ');\n }\n }\n this.renderTickLine(axis, index, majorTick, '');\n };\n PolarRadarPanel.prototype.drawXAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var tempInterval;\n var vector;\n var majorGrid = '';\n var majorTick = '';\n var minorGirdLine = '';\n var minorTickLine = '';\n var x1 = this.centerX;\n var x2;\n var y1 = this.centerY;\n var y2;\n var minorDirection;\n var tickSize = axis.majorTickLines.height;\n var rect = axis.rect;\n var length = axis.visibleLabels.length;\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = axis.visibleLabels[i].value;\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value, axis), this.startAngle);\n x2 = this.centerX + chart.radius * vector.x;\n y2 = this.centerY + chart.radius * vector.y;\n var xLoc = x2 + (axis.majorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var yLoc = y2 + (axis.majorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n majorGrid = majorGrid.concat('M ' + x1 + ' ' + y1 + ' ' + 'L' + x2 + ' ' + y2);\n majorTick = majorTick.concat('M ' + x2 + ' ' + y2 +\n ' L ' + xLoc + ' ' + yLoc + ' ');\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)\n && axis.valueType !== 'Category' && chart.visibleSeries[0].type !== 'Radar') {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGirdLine, minorTickLine);\n minorGirdLine = minorDirection[0];\n minorTickLine = minorDirection[1];\n }\n }\n this.renderTickLine(axis, index, majorTick, minorTickLine);\n this.renderGridLine(axis, index, majorGrid, minorGirdLine);\n };\n PolarRadarPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick) {\n var value = tempInterval;\n var x;\n var y;\n var vector;\n var range = axis.visibleRange;\n var direction = [];\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value += (axis.valueType === 'DateTime' ? axis.dateTimeInterval : axis.visibleRange.interval) /\n (axis.minorTicksPerInterval + 1);\n if (inside(value, range)) {\n vector = CoefficientToVector(valueToPolarCoefficient(value, axis), this.startAngle);\n x = this.centerX + this.chart.radius * vector.x;\n y = this.centerY + this.chart.radius * vector.y;\n var tickXSize = x + (axis.minorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var tickYSize = y + (axis.minorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n minorGird = minorGird.concat('M' + ' ' + this.centerX + ' ' + this.centerY\n + 'L ' + x + ' ' + y);\n minorTick = minorTick.concat('M' + ' ' + x + ' ' + y + 'L' + ' ' + (tickXSize) + ' ' +\n (tickYSize));\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.drawXAxisLabels = function (axis, index) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var options;\n var vector;\n var labelText;\n var firstLabelX;\n var islabelInside = axis.labelPosition === 'Inside';\n var padding = 5;\n var lastLabelX;\n var textAnchor = '';\n var ticksbwtLabel = axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks'\n && chart.visibleSeries[0].type !== 'Radar' ? 0.5 : 0;\n var radius = chart.radius + axis.majorTickLines.height;\n radius = (islabelInside) ? -radius : radius;\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis), this.startAngle);\n if (!isNaN(vector.x) && !isNaN(vector.y)) {\n pointX = this.centerX + (radius + axis.majorTickLines.height + padding) * vector.x;\n pointY = this.centerY + (radius + axis.majorTickLines.height + padding) * vector.y;\n textAnchor = parseFloat(pointX.toFixed(1)) === parseFloat(this.centerX.toFixed(1)) ? 'middle' :\n ((pointX < this.centerX && !islabelInside) || (pointX > this.centerX && islabelInside)) ? 'end' : 'start';\n }\n labelText = axis.visibleLabels[i].text;\n if (i === 0) {\n firstLabelX = pointX;\n }\n else if (i === axis.visibleLabels.length - 1 && axis.valueType !== 'Category') {\n lastLabelX = measureText(labelText, axis.labelStyle).height;\n lastLabelX += pointX;\n labelText = (lastLabelX > firstLabelX) ? '' : labelText;\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, textAnchor, labelText, '', 'central');\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n this.element.appendChild(labelElement);\n };\n PolarRadarPanel.prototype.renderTickLine = function (axis, index, majorTickLine, minorTickLine) {\n var tickOptions;\n var chart = this.chart;\n if (axis.majorTickLines.width > 0) {\n tickOptions = new PathOption(chart.element.id + '_MajorTickLine_' + index, 'transparent', axis.majorTickLines.width, axis.majorTickLines.color || chart.themeStyle.majorTickLine, null, null, majorTickLine);\n chart.yAxisElements.appendChild(chart.renderer.drawPath(tickOptions));\n }\n if (axis.minorTickLines.width > 0) {\n tickOptions = new PathOption(chart.element.id + '_MinorTickLine_' + index, 'transparent', axis.minorTickLines.width, axis.minorTickLines.color || chart.themeStyle.minorTickLine, null, null, minorTickLine);\n chart.yAxisElements.appendChild(chart.renderer.drawPath(tickOptions));\n }\n };\n PolarRadarPanel.prototype.renderGridLine = function (axis, index, majorGrid, minorGird) {\n var chart = this.chart;\n var gridOptions;\n if (axis.majorGridLines.width > 0) {\n gridOptions = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, axis.majorGridLines.dashArray, majorGrid);\n this.element.appendChild(chart.renderer.drawPath(gridOptions));\n }\n if (axis.minorGridLines.width > 0) {\n gridOptions = new PathOption(chart.element.id + '_MinorGridLine_' + index, 'transparent', axis.minorGridLines.width, axis.minorGridLines.color || chart.themeStyle.minorGridLine, null, axis.minorGridLines.dashArray, minorGird);\n this.element.appendChild(chart.renderer.drawPath(gridOptions));\n }\n };\n return PolarRadarPanel;\n}(LineBase));\nexport { PolarRadarPanel };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange, PathOption, logBase, markerAnimate, PolarArc, valueToCoefficient, firstToLowerCase } from '../../common/utils/helper';\nimport { PolarRadarPanel } from '../axis/polar-radar-panel';\nimport { pointRender } from '../../common/model/constants';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * `PolarSeries` module is used to render the polar series.\n */\nvar PolarSeries = /** @class */ (function (_super) {\n __extends(PolarSeries, _super);\n function PolarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Polar Series.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.render = function (series, xAxis, yAxis, inverted) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') > -1) {\n this.columnDrawTypeRender(series, xAxis, yAxis);\n }\n else {\n series.chart[seriesType + 'SeriesModule'].render(series, xAxis, yAxis, inverted);\n }\n };\n /**\n * Render Column DrawType.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.columnDrawTypeRender = function (series, xAxis, yAxis) {\n var options;\n var argsData;\n var startAngle;\n var endAngle;\n var itemCurrentXPos;\n var radius;\n var inversedValue;\n var pointStartAngle;\n var pointEndAngle;\n var x1;\n var x2;\n var y1;\n var y2;\n var startValue;\n var endValue;\n var innerRadius;\n var min = xAxis.actualRange.min;\n var centerX = (series.clipRect.width / 2) + series.clipRect.x;\n var dStartX;\n var dStartY;\n var centerY = (series.clipRect.height / 2) + series.clipRect.y;\n var dEndX;\n var dEndY;\n var isRangeColumn = series.drawType === 'RangeColumn';\n var isPolar = series.type === 'Polar';\n var isLogAxis = yAxis.valueType === 'Logarithmic';\n var isStacking = series.drawType === 'StackingColumn';\n var direction = '';\n var sumofYValues = 0;\n var interval = (series.points[1] ? series.points[1].xValue : 2 * series.points[0].xValue) - series.points[0].xValue;\n var ticks = xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks' ? 0 : interval / 2;\n var rangeInterval = xAxis.valueType === 'DateTime' ? xAxis.dateTimeInterval : 1;\n this.getSeriesPosition(series);\n var position = xAxis.isInversed ? (series.rectCount - 1 - series.position) : series.position;\n do {\n sumofYValues += rangeInterval;\n min += rangeInterval;\n } while (min <= xAxis.actualRange.max - (xAxis.valueType === 'Category' ? 0 : 1));\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n inversedValue = xAxis.isInversed ? (xAxis.visibleRange.max - point.xValue) :\n point.xValue - xAxis.visibleRange.min;\n itemCurrentXPos = (inversedValue) +\n ((interval / series.rectCount) * position - ticks) + (sumofYValues / 360 * xAxis.startAngle);\n itemCurrentXPos = (((itemCurrentXPos) / (sumofYValues)));\n startAngle = 2 * Math.PI * (itemCurrentXPos + xAxis.startAngle);\n endAngle = 2 * Math.PI * ((itemCurrentXPos + xAxis.startAngle) + (interval / series.rectCount) / (sumofYValues));\n pointStartAngle = startAngle;\n pointEndAngle = endAngle;\n startAngle = (startAngle - 0.5 * Math.PI);\n endAngle = (endAngle - 0.5 * Math.PI) - 0.000001;\n if (isStacking || isRangeColumn) {\n startValue = isRangeColumn ? point.low : series.stackedValues.startValues[point.index];\n endValue = isRangeColumn ? point.high : series.stackedValues.endValues[point.index];\n endValue = (isLogAxis ? logBase(endValue === 0 ? 1 : endValue, yAxis.logBase) : endValue);\n endValue = endValue > yAxis.actualRange.max ? yAxis.actualRange.max : endValue;\n radius = startValue === endValue ? 0 : series.chart.radius * valueToCoefficient(endValue, yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n innerRadius = series.chart.radius * valueToCoefficient((startValue === 0 && yAxis.visibleRange.min !== 0) ? yAxis.visibleRange.min : startValue, yAxis);\n dStartX = centerX + innerRadius * Math.cos(startAngle);\n dStartY = centerY + innerRadius * Math.sin(startAngle);\n dEndX = centerX + innerRadius * Math.cos(endAngle);\n dEndY = centerY + innerRadius * Math.sin(endAngle);\n if (isPolar) {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' '\n + '0' + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + dEndX + ' ' + dEndY + ' ' +\n 'A' + ' ' + innerRadius + ' ' + innerRadius + ' ' + '1' + ' ' + '0' + ' ' + '0' + ' '\n + dStartX + ' ' + dStartY + ' ' + 'Z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L '\n + dEndX + ' ' + dEndY + ' ' + 'L' + ' ' + dStartX + ' ' + dStartY + ' ' + 'Z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, innerRadius, radius, itemCurrentXPos);\n }\n else {\n endValue = point.yValue > yAxis.actualRange.max ? yAxis.actualRange.max : point.yValue;\n radius = series.chart.radius *\n valueToCoefficient((isLogAxis ? logBase(endValue, yAxis.logBase) : endValue), yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n if (isPolar) {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' ' +\n '0' + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + centerX + ' ' +\n centerY + ' ' + 'Z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' '\n + centerX + ' ' + centerY + ' ' + 'Z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, 0, radius, itemCurrentXPos);\n }\n argsData = this.triggerEvent(series.chart, series, point);\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n if (!argsData.cancel) {\n this.appendLinePath(options, series, '');\n if (isPolar) {\n point.symbolLocations.push({\n x: centerX + radius * Math.cos((startAngle + (endAngle - startAngle) / 2)),\n y: centerY + radius * Math.sin((startAngle + (endAngle - startAngle) / 2))\n });\n if (isRangeColumn) {\n point.symbolLocations.push({\n x: centerX + innerRadius * Math.cos((startAngle + (endAngle - startAngle) / 2)),\n y: centerY + innerRadius * Math.sin((startAngle + (endAngle - startAngle) / 2))\n });\n }\n }\n else {\n point.symbolLocations.push({ x: (x1 + x2) / 2, y: (y1 + y2) / 2 });\n if (isRangeColumn) {\n point.symbolLocations.push({ x: (dEndX + dStartX) / 2, y: (dEndY + dStartY) / 2 });\n }\n }\n }\n }\n }\n this.renderMarker(series);\n series.isRectSeries = true;\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.triggerEvent = function (chart, series, point) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color })\n };\n chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /** get position for column drawtypes\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.getSeriesPosition = function (series) {\n var chart = series.chart;\n var seriesCollection = [];\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (series_1.visible && (series_1.type === 'Polar' || series_1.type === 'Radar') && series_1.drawType.indexOf('Column') !== -1) {\n seriesCollection.push(series_1);\n }\n }\n seriesCollection.forEach(function (series) {\n if (series.drawType.indexOf('Stacking') !== -1) {\n if (series.stackingGroup) {\n if (stackingGroup[series.stackingGroup] === undefined) {\n series.position = vSeries.rectCount;\n stackingGroup[series.stackingGroup] = vSeries.rectCount++;\n }\n else {\n series.position = stackingGroup[series.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n series.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n series.position = vSeries.position;\n }\n }\n }\n else {\n series.position = vSeries.rectCount++;\n }\n });\n seriesCollection.forEach(function (value) {\n value.rectCount = vSeries.rectCount;\n });\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n PolarSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n if (series.drawType === 'Scatter') {\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n }\n else {\n for (count = 1; count < rectElements.length; count++) {\n this.doPolarRadarAnimation(rectElements[count], delay, duration, series);\n }\n }\n };\n /**\n * To do the Polar Radar draw type column animation.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.doPolarRadarAnimation = function (animateElement, delay, duration, series) {\n var chartcenterX = series.clipRect.width / 2 + series.clipRect.x;\n var chartcenterY = series.clipRect.height / 2 + series.clipRect.y;\n var elementHeight = 0;\n animateElement.style.visibility = 'hidden';\n new Animation({}).animate(animateElement, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n elementHeight = ((args.timeStamp - args.delay) / args.duration);\n animateElement.setAttribute('transform', 'translate(' + chartcenterX\n + ' ' + chartcenterY + ') scale(' + elementHeight + ') translate(' + (-chartcenterX) + ' ' + (-chartcenterY) + ')');\n }\n },\n end: function (model) {\n animateElement.style.visibility = 'visible';\n animateElement.removeAttribute('transform');\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n /**\n * Get module name.\n */\n PolarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'PolarSeries';\n };\n /**\n * To destroy the polar series.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return PolarSeries;\n}(PolarRadarPanel));\nexport { PolarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { PolarSeries } from '../series/polar-series';\n/**\n * `RadarSeries` module is used to render the radar series.\n */\nvar RadarSeries = /** @class */ (function (_super) {\n __extends(RadarSeries, _super);\n function RadarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render radar Series.\n * @return {void}.\n * @private\n */\n RadarSeries.prototype.render = function (series, xAxis, yAxis, inverted) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') === -1) {\n series.chart[seriesType + 'SeriesModule'].render(series, xAxis, yAxis, inverted);\n }\n else {\n this.columnDrawTypeRender(series, xAxis, yAxis);\n }\n };\n /**\n * Get module name.\n */\n RadarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'RadarSeries';\n };\n /**\n * To destroy the radar series.\n * @return {void}\n * @private\n */\n RadarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return RadarSeries;\n}(PolarSeries));\nexport { RadarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingBarSeries` module is used to render the stacking bar series.\n */\nvar StackingBarSeries = /** @class */ (function (_super) {\n __extends(StackingBarSeries, _super);\n function StackingBarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking bar series.\n * @return {void}\n * @private\n */\n StackingBarSeries.prototype.render = function (series) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var stackedValue = series.stackedValues;\n var rect;\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointStack = _a[_i];\n pointStack.symbolLocations = [];\n pointStack.regions = [];\n if (pointStack.visible && withInRange(series.points[pointStack.index - 1], pointStack, series.points[pointStack.index + 1], series)) {\n rect = this.getRectangle(pointStack.xValue + sideBySideInfo.start, stackedValue.endValues[pointStack.index], pointStack.xValue + sideBySideInfo.end, stackedValue.startValues[pointStack.index], series);\n argsData = this.triggerEvent(series, pointStack, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.drawRectangle(series, pointStack, rect, argsData);\n this.updateSymbolLocation(pointStack, rect, series);\n }\n }\n }\n this.renderMarker(series);\n };\n /**\n * To destroy the stacking bar.\n * @return {void}\n * @private\n */\n StackingBarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n StackingBarSeries.prototype.getModuleName = function () {\n return 'StackingBarSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingBarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n return StackingBarSeries;\n}(ColumnBase));\nexport { StackingBarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange, PathOption, pathAnimation, getElement } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `CandleSeries` module is used to render the candle series.\n */\nvar CandleSeries = /** @class */ (function (_super) {\n __extends(CandleSeries, _super);\n function CandleSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Candle series.\n * @return {void}\n * @private\n */\n CandleSeries.prototype.render = function (series) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var borderWidth = Math.max(series.border.width, 1);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var direction = '';\n var centerRegion = void 0;\n var tickRegion = void 0;\n var midPoint = void 0;\n midPoint = (sideBySideInfo.start + sideBySideInfo.end) / 2;\n //initializing after zooming and also normal initialization\n point.regions = [];\n point.symbolLocations = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //region to cover the top and bottom ticks\n tickRegion = this.getRectangle((point.xValue + sideBySideInfo.median), Math.max(point.high, point.low), (point.xValue + sideBySideInfo.median), Math.min(point.high, point.low), series);\n if (!series.chart.requireInvertedAxis) {\n tickRegion.x -= borderWidth / 2;\n tickRegion.width = borderWidth;\n }\n else {\n tickRegion.y -= borderWidth / 2;\n tickRegion.height = borderWidth;\n }\n //get middleRect\n centerRegion = this.getRectangle((point.xValue + sideBySideInfo.start), Math.max(point.open, point.close), (point.xValue + sideBySideInfo.end), Math.min(point.open, point.close), series);\n direction = this.getPathString(tickRegion, centerRegion, series);\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n this.drawCandle(series, point, centerRegion, argsData, direction);\n this.updateSymbolLocation(point, tickRegion, series);\n this.updateSymbolLocation(point, centerRegion, series);\n }\n }\n }\n };\n /**\n * Trigger point rendering event\n */\n CandleSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var fill;\n fill = this.getCandleColor(point, series);\n var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n return this.triggerEvent(series, point, fill, border);\n };\n /**\n * Find the color of the candle\n * @param series\n * @private\n */\n CandleSeries.prototype.getCandleColor = function (point, series) {\n var currentPoint = point;\n var previousPoint = series.points[point.index - 1];\n if (series.enableSolidCandles === false) {\n if (!previousPoint) {\n return series.bearFillColor;\n }\n else {\n return previousPoint.close > point.close ? series.bullFillColor :\n series.bearFillColor;\n }\n }\n else {\n return point.open > point.close ? series.bullFillColor :\n series.bearFillColor;\n }\n };\n /**\n * Finds the path of the candle shape\n * @param Series\n * @private\n */\n CandleSeries.prototype.getPathString = function (topRect, midRect, series) {\n var direction = '';\n var width = series.chart.requireInvertedAxis ? topRect.height : topRect.width;\n var center = series.chart.requireInvertedAxis ? topRect.y + topRect.height / 2 :\n topRect.x + topRect.width / 2;\n //tick 1 segment\n direction += !series.chart.requireInvertedAxis ?\n 'M' + ' ' + (center) + ' ' + (topRect.y) + ' ' + 'L' + ' ' + (center) + ' ' + midRect.y :\n 'M' + ' ' + (topRect.x) + ' ' + (center) + ' ' + 'L' + ' ' + (midRect.x) + ' ' + center;\n direction = direction.concat(' M' + ' ' + (midRect.x) + ' ' + (midRect.y) + ' ' +\n 'L' + ' ' + (midRect.x + midRect.width) + ' ' + (midRect.y) + ' ' +\n 'L' + ' ' + (midRect.x + midRect.width) + ' ' +\n (midRect.y + midRect.height) + ' ' +\n 'L' + ' ' + (midRect.x) + ' ' + (midRect.y + midRect.height) +\n ' ' + 'Z');\n direction += !series.chart.requireInvertedAxis ?\n ' M' + ' ' + (center) + ' ' + (midRect.y + midRect.height) + ' ' + 'L' + ' ' + (center) + ' ' + (topRect.y +\n topRect.height) :\n ' M' + ' ' + (midRect.x + midRect.width) + ' ' + (center) + ' ' + 'L' + ' ' +\n (topRect.x + topRect.width) + ' ' + center;\n return direction;\n };\n /**\n * Draws the candle shape\n * @param series\n * @private\n */\n CandleSeries.prototype.drawCandle = function (series, point, rect, argsData, direction) {\n var check = series.chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var fill = !series.enableSolidCandles ?\n (point.open > point.close ? argsData.fill : 'transparent') : argsData.fill;\n argsData.border.color = argsData.fill;\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var element = getElement(options.id);\n var previousDirection = element ? element.getAttribute('d') : null;\n var candleElement = series.chart.renderer.drawPath(options);\n candleElement.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n series.seriesElement.appendChild(candleElement);\n pathAnimation(element, direction, series.chart.redraw, previousDirection);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n CandleSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n CandleSeries.prototype.getModuleName = function () {\n return 'CandleSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the candle series.\n * @return {void}\n * @private\n */\n CandleSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the candle series.\n */\n };\n return CandleSeries;\n}(ColumnBase));\nexport { CandleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingColumnSeries` module used to render the stacking column series.\n */\nvar StackingColumnSeries = /** @class */ (function (_super) {\n __extends(StackingColumnSeries, _super);\n function StackingColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking column series.\n * @return {void}\n * @private\n */\n StackingColumnSeries.prototype.render = function (series) {\n series.isRectSeries = true;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var rect;\n var argsData;\n var stackedValue = series.stackedValues;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n rect = this.getRectangle(point.xValue + sideBySideInfo.start, stackedValue.endValues[point.index], point.xValue + sideBySideInfo.end, stackedValue.startValues[point.index], series);\n argsData = this.triggerEvent(series, point, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.drawRectangle(series, point, rect, argsData);\n this.updateSymbolLocation(point, rect, series);\n }\n }\n }\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the stacking column.\n * @return {void}\n * @private\n */\n StackingColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n StackingColumnSeries.prototype.getModuleName = function () {\n return 'StackingColumnSeries';\n };\n return StackingColumnSeries;\n}(ColumnBase));\nexport { StackingColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PathOption, getPoint, withInRange } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StepLineSeries` module is used to render the step line series.\n */\nvar StepLineSeries = /** @class */ (function (_super) {\n __extends(StepLineSeries, _super);\n function StepLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Step line series.\n * @return {void}\n * @private\n */\n StepLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var direction = '';\n var startPoint = 'M';\n var prevPoint = null;\n var pathOptions;\n var lineLength;\n var point1;\n var point2;\n var visiblePoints = this.improveChartPerformance(series);\n if (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') {\n lineLength = 0.5;\n }\n else {\n lineLength = 0;\n }\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n if (prevPoint != null) {\n point2 = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n point1 = getPoint(prevPoint.xValue, prevPoint.yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' + 'L' + ' ' +\n (point2.x) + ' ' + (point1.y) + 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n startPoint = 'L';\n }\n else {\n point1 = getPoint(point.xValue - lineLength, point.yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n startPoint = 'L';\n }\n this.storePointLocation(point, series, isInverted, getPoint);\n prevPoint = point;\n }\n else {\n prevPoint = series.emptyPointSettings.mode === 'Drop' ? prevPoint : null;\n startPoint = series.emptyPointSettings.mode === 'Drop' ? startPoint : 'M';\n }\n }\n point1 = getPoint(visiblePoints[visiblePoints.length - 1].xValue + lineLength, visiblePoints[visiblePoints.length - 1].yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n pathOptions = new PathOption(series.chart.element.id + '_Series_' + series.index, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(pathOptions, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StepLineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the step line series.\n * @return {void}\n * @private\n */\n StepLineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StepLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StepLineSeries';\n };\n return StepLineSeries;\n}(LineBase));\nexport { StepLineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { getPoint, withInRange, ChartLocation, PathOption } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StepAreaSeries` Module used to render the step area series.\n */\nvar StepAreaSeries = /** @class */ (function (_super) {\n __extends(StepAreaSeries, _super);\n function StepAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render StepArea series.\n * @return {void}\n * @private\n */\n StepAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var currentPoint;\n var secondPoint;\n var start = null;\n var direction = '';\n var pointsLength = series.points.length;\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var options;\n var point;\n var xValue;\n var lineLength;\n var prevPoint = null;\n if (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') {\n lineLength = 0.5;\n }\n else {\n lineLength = 0;\n }\n for (var i = 0; i < pointsLength; i++) {\n point = series.points[i];\n xValue = point.xValue;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[i - 1], point, series.points[i + 1], series)) {\n if (start === null) {\n start = new ChartLocation(xValue, 0);\n // Start point for the current path\n currentPoint = getPoint(xValue - lineLength, origin, xAxis, yAxis, isInverted);\n direction += ('M' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n currentPoint = getPoint(xValue - lineLength, point.yValue, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n // First Point to draw the Steparea path\n if (prevPoint != null) {\n currentPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n secondPoint = getPoint(prevPoint.xValue, prevPoint.yValue, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' +\n (currentPoint.x) + ' ' + (secondPoint.y) + 'L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n else if (series.emptyPointSettings.mode === 'Gap') {\n currentPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n direction += 'L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ';\n }\n this.storePointLocation(point, series, isInverted, getPoint);\n prevPoint = point;\n }\n if (series.points[i + 1] && !series.points[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n // current start point\n currentPoint = getPoint(xValue + lineLength, origin, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y));\n start = null;\n prevPoint = null;\n }\n }\n if (pointsLength > 1) {\n start = { 'x': series.points[pointsLength - 1].xValue + lineLength, 'y': series.points[pointsLength - 1].yValue };\n secondPoint = getPoint(start.x, start.y, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (secondPoint.x) + ' ' + (secondPoint.y) + ' ');\n start = { 'x': series.points[pointsLength - 1].xValue + lineLength, 'y': origin };\n secondPoint = getPoint(start.x, start.y, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (secondPoint.x) + ' ' + (secondPoint.y) + ' ');\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StepAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the step Area series.\n * @return {void}\n * @private\n */\n StepAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StepAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StepAreaSeries';\n };\n return StepAreaSeries;\n}(LineBase));\nexport { StepAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PathOption, getPoint, withInRange, Rect, TransformToVisible } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StackingAreaSeries` module used to render the Stacking Area series.\n */\nvar StackingAreaSeries = /** @class */ (function (_super) {\n __extends(StackingAreaSeries, _super);\n function StackingAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking area series.\n * @return {void}\n * @private\n */\n StackingAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var polarAreaType = series.chart.chartAreaType === 'PolarRadar';\n var getCoordinate = polarAreaType ? TransformToVisible : getPoint;\n var lineDirection = '';\n var visiblePoints = series.points;\n var pointsLength = visiblePoints.length;\n var stackedvalue = series.stackedValues;\n var origin = polarAreaType ?\n Math.max(series.yAxis.visibleRange.min, stackedvalue.endValues[0]) :\n Math.max(series.yAxis.visibleRange.min, stackedvalue.startValues[0]);\n var border = series.border;\n var options;\n var startPoint = 0;\n var point1 = getCoordinate(visiblePoints[0].xValue, origin, xAxis, yAxis, isInverted, series);\n var point2;\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n for (var i = 0; i < pointsLength; i++) {\n visiblePoints[i].symbolLocations = [];\n visiblePoints[i].regions = [];\n if (visiblePoints[i].visible && withInRange(visiblePoints[i - 1], visiblePoints[i], visiblePoints[i + 1], series)) {\n point1 = getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[i], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n visiblePoints[i].symbolLocations.push(getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[i], xAxis, yAxis, isInverted, series));\n visiblePoints[i].regions.push(new Rect(visiblePoints[i].symbolLocations[0].x - series.marker.width, visiblePoints[i].symbolLocations[0].y - series.marker.height, 2 * series.marker.width, 2 * series.marker.height));\n }\n else {\n if (series.emptyPointSettings.mode !== 'Drop') {\n for (var j = i - 1; j >= startPoint; j--) {\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[j], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n if (visiblePoints[i + 1] && visiblePoints[i + 1].visible) {\n point1 = getCoordinate(visiblePoints[i + 1].xValue, stackedvalue.startValues[i + 1], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n }\n startPoint = i + 1;\n }\n }\n }\n if (series.chart.chartAreaType === 'PolarRadar' && visiblePoints.length > 1) {\n point1 = { 'x': series.points[0].xValue, 'y': stackedvalue.endValues[0] };\n point2 = getCoordinate(point1.x, point1.y, xAxis, yAxis, isInverted, series);\n lineDirection += ('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n for (var j = pointsLength - 1; j >= startPoint; j--) {\n var previousSeries = this.getPreviousSeries(series);\n if (previousSeries.emptyPointSettings.mode !== 'Drop' || !previousSeries.points[j].isEmpty) {\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[j], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat(((j === (pointsLength - 1) && polarAreaType) ? 'M' : 'L')\n + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, lineDirection);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the stacking area.\n * @return {void}\n * @private\n */\n StackingAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StackingAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StackingAreaSeries';\n };\n /**\n * To find previous visible series\n */\n StackingAreaSeries.prototype.getPreviousSeries = function (series) {\n var seriesCollection = series.chart.visibleSeries;\n for (var i = 0, length_1 = seriesCollection.length; i < length_1; i++) {\n if (series.index === seriesCollection[i].index && i !== 0) {\n return seriesCollection[i - 1];\n }\n }\n return seriesCollection[0];\n };\n return StackingAreaSeries;\n}(LineBase));\nexport { StackingAreaSeries };\n","import { withInRange, getPoint, PathOption, drawSymbol, Size, getElement } from '../../common/utils/helper';\nimport { Rect, markerAnimate, TransformToVisible, appendChildElement } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `ScatterSeries` module is used to render the scatter series.\n */\nvar ScatterSeries = /** @class */ (function () {\n function ScatterSeries() {\n }\n /**\n * Render the scatter series.\n * @return {void}\n * @private\n */\n ScatterSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var marker = series.marker;\n var visiblePoints = series.points;\n var argsData;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var startLocation;\n var redraw = series.chart.redraw;\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n startLocation = (redraw && point.symbolLocations) ? point.symbolLocations[0] : null;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color }),\n height: marker.height, width: marker.width, shape: marker.shape\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n point.symbolLocations.push(getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series));\n point.color = argsData.fill;\n this.refresh(series, point, argsData, startLocation);\n }\n else {\n point.marker = { visible: true };\n }\n }\n }\n };\n /**\n * To append scatter element\n * @param series\n * @param point\n * @param argsData\n * @param startLocation\n */\n ScatterSeries.prototype.refresh = function (series, point, argsData, startLocation) {\n var chart = series.chart;\n var circlePath;\n var previousPath;\n var marker = series.marker;\n var shapeOption = new PathOption(chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n if (chart.redraw && getElement(shapeOption.id)) {\n circlePath = argsData.shape === 'Circle' ? 'c' : '';\n previousPath = getElement(shapeOption.id).getAttribute('d');\n }\n appendChildElement(series.seriesElement, drawSymbol(point.symbolLocations[0], argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + point.yValue.toString()), chart.redraw, true, circlePath + 'x', circlePath + 'y', startLocation, previousPath);\n point.regions.push(new Rect(point.symbolLocations[0].x - marker.width, point.symbolLocations[0].y - marker.height, 2 * marker.width, 2 * marker.height));\n point.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n width: argsData.width, shape: argsData.shape\n };\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ScatterSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n };\n /**\n * Get module name.\n */\n ScatterSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'ScatterSeries';\n };\n /**\n * To destroy the scatter.\n * @return {void}\n */\n ScatterSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return ScatterSeries;\n}());\nexport { ScatterSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `RangeColumnSeries` module is used to render the range column series.\n */\nvar RangeColumnSeries = /** @class */ (function (_super) {\n __extends(RangeColumnSeries, _super);\n function RangeColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Range Column series.\n * @return {void}\n * @private\n */\n RangeColumnSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n //let origin: number = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var rangePoint = _a[_i];\n rangePoint.symbolLocations = [];\n rangePoint.regions = [];\n if (rangePoint.visible && withInRange(series.points[rangePoint.index - 1], rangePoint, series.points[rangePoint.index + 1], series)) {\n rect = this.getRectangle(rangePoint.xValue + sideBySideInfo.start, rangePoint.high, rangePoint.xValue + sideBySideInfo.end, rangePoint.low, series);\n argsData = this.triggerEvent(series, rangePoint, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(rangePoint, rect, series);\n this.drawRectangle(series, rangePoint, rect, argsData);\n }\n }\n }\n this.renderMarker(series);\n };\n /**\n * Get module name.\n */\n RangeColumnSeries.prototype.getModuleName = function () {\n return 'RangeColumnSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n RangeColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the range column series.\n * @return {void}\n * @private\n */\n RangeColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return RangeColumnSeries;\n}(ColumnBase));\nexport { RangeColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PathOption, withInRange } from '../../common/utils/helper';\nimport { subArraySum, getElement, appendChildElement, redrawElement } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `WaterfallSeries` module is used to render the waterfall series.\n */\nvar WaterfallSeries = /** @class */ (function (_super) {\n __extends(WaterfallSeries, _super);\n function WaterfallSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render waterfall series.\n * @return {void}\n * @private\n */\n WaterfallSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n var prevEndValue = 0;\n var direction = '';\n var currentEndValue = 0;\n var originValue;\n var prevRegion = null;\n var y;\n var isInversed = series.chart.requireInvertedAxis;\n var intermediateOrigin = 0;\n var redraw = series.chart.redraw;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //Calcute the current point value to render waterfall series.\n var isSum = this.isIntermediateSum(series, point.index);\n var totalSum = this.isSumIndex(series, point.index);\n currentEndValue += isSum || totalSum === true ? 0 : point.yValue;\n //Calcute the origin value for points\n originValue = (isSum === true ? intermediateOrigin : ((prevEndValue !== null && !totalSum) ? prevEndValue : origin));\n rect = this.getRectangle(point.xValue + sideBySideInfo.start, currentEndValue, point.xValue + sideBySideInfo.end, originValue, series);\n argsData = this.triggerPointRenderEvent(series, point);\n //intermediateOrigin is used only for imtermediate data \n if (isSum) {\n intermediateOrigin = currentEndValue;\n }\n prevEndValue = currentEndValue;\n if (!argsData.cancel) {\n this.updateSymbolLocation(point, rect, series);\n this.drawRectangle(series, point, rect, argsData);\n }\n var currentRegion = point.regions[0];\n if (prevRegion !== null) {\n var prevLeft = isInversed ? prevRegion.x : prevRegion.y;\n var currentLeft = isInversed ? currentRegion.x : currentRegion.y;\n var prevBottom = isInversed ? prevRegion.x + prevRegion.width : prevRegion.y + prevRegion.height;\n var currentBottom = isInversed ?\n currentRegion.x + currentRegion.width : currentRegion.y + currentRegion.height;\n if (Math.round(prevLeft) === Math.round(currentLeft) ||\n Math.round(prevBottom) === Math.round(currentLeft)) {\n y = isInversed ? currentRegion.x : currentRegion.y;\n }\n else {\n y = currentBottom;\n }\n if (isInversed) {\n direction = direction.concat('M' + ' ' + y + ' ' + (prevRegion.y + prevRegion.height) + ' ' +\n 'L' + ' ' + y + ' ' + currentRegion.y + ' ');\n }\n else {\n direction = direction.concat('M' + ' ' + prevRegion.x + ' ' + y + ' ' +\n 'L' + ' ' + (currentRegion.x + currentRegion.width) + ' ' + y + ' ');\n }\n }\n prevRegion = point.regions[0];\n }\n }\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Connector_', 'none', series.connector.width, series.connector.color, series.opacity, series.connector.dashArray, direction);\n if (redraw && getElement(options.id)) {\n direction = getElement(options.id).getAttribute('d');\n }\n var element = (redrawElement(redraw, options.id, options, series.chart.renderer) ||\n series.chart.renderer.drawPath(options));\n element.style.visibility = (series.animation.enable && series.chart.animateSeries) ? 'hidden' : 'visible';\n appendChildElement(series.seriesElement, element, redraw, true, null, null, null, direction);\n this.renderMarker(series);\n };\n /**\n * To check intermediateSumIndex in waterfall series.\n * @return boolean\n * @private\n */\n WaterfallSeries.prototype.isIntermediateSum = function (series, index) {\n if (series.intermediateSumIndexes !== undefined && series.intermediateSumIndexes.indexOf(index) !== -1) {\n return true;\n }\n return false;\n };\n /**\n * To check sumIndex in waterfall series.\n * @return boolean\n * @private\n */\n WaterfallSeries.prototype.isSumIndex = function (series, index) {\n if (series.sumIndexes !== undefined && series.sumIndexes.indexOf(index) !== -1) {\n return true;\n }\n return false;\n };\n /**\n * To trigger the point rendering event for waterfall series.\n * @return IPointRenderEventArgs\n * @private\n */\n WaterfallSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var color;\n var isSum = this.isIntermediateSum(series, point.index);\n var totalSum = this.isSumIndex(series, point.index);\n if (isSum || totalSum) {\n color = series.summaryFillColor;\n }\n else if (point.y < 0) {\n color = series.negativeFillColor;\n }\n else {\n color = series.interior;\n }\n return this.triggerEvent(series, point, color, { color: series.border.color, width: series.border.width });\n };\n /**\n * Add sumIndex and intermediateSumIndex data.\n * @return {object[]}\n * @private\n */\n WaterfallSeries.prototype.processInternalData = function (json, series) {\n var data = json;\n var length = json.length;\n var index;\n var intermediateSum = series.intermediateSumIndexes;\n var sumIndex = series.sumIndexes;\n if (intermediateSum !== undefined && intermediateSum.length > 0) {\n for (var i = 0; i < intermediateSum.length; i++) {\n for (var j = 0; j < data.length; j++) {\n if (j === intermediateSum[i]) {\n if (i === 0) {\n index = subArraySum(data, -1, intermediateSum[i], null, series);\n }\n else {\n index = subArraySum(data, intermediateSum[i - 1], intermediateSum[i], null, series);\n }\n data[j][series.yName] = index;\n }\n }\n }\n }\n if (sumIndex !== undefined && sumIndex.length > 0) {\n for (var k = 0; k < sumIndex.length; k++) {\n for (var j = 0; j < data.length; j++) {\n if (j === sumIndex[k]) {\n if (intermediateSum !== undefined) {\n index = subArraySum(data, -1, sumIndex[k], sumIndex, series);\n }\n else {\n index = subArraySum(data, -1, sumIndex[k], null, series);\n }\n data[j][series.yName] = index;\n }\n }\n }\n }\n return data;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n WaterfallSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n WaterfallSeries.prototype.getModuleName = function () {\n return 'WaterfallSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the waterfall series.\n * @return {void}\n * @private\n */\n WaterfallSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the waterfall series.\n */\n };\n return WaterfallSeries;\n}(ColumnBase));\nexport { WaterfallSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `HiloSeries` module is used to render the hilo series.\n */\nvar HiloSeries = /** @class */ (function (_super) {\n __extends(HiloSeries, _super);\n function HiloSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Hiloseries.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.render = function (series) {\n var region;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible &&\n withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n region = this.getRectangle(point.xValue + sideBySideInfo.median, point.high, point.xValue + sideBySideInfo.median, point.low, series);\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n if (!series.chart.requireInvertedAxis) {\n region.width = argsData.border.width;\n region.x = region.x - (region.width / 2);\n }\n else {\n region.height = argsData.border.width;\n region.y = region.y - (region.height / 2);\n }\n argsData.border.width = 0;\n this.updateSymbolLocation(point, region, series);\n this.drawRectangle(series, point, region, argsData);\n }\n }\n }\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var border = { color: series.fill, width: Math.max(series.border.width, 2) };\n return _super.prototype.triggerEvent.call(this, series, point, series.interior, border);\n };\n /**\n * Get module name.\n */\n HiloSeries.prototype.getModuleName = function () {\n return 'HiloSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HiloSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the Hilo series.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the Hilo Series\n */\n };\n return HiloSeries;\n}(ColumnBase));\nexport { HiloSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange, PathOption, pathAnimation, getElement } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `HiloOpenCloseSeries` module is used to render the hiloOpenClose series.\n */\nvar HiloOpenCloseSeries = /** @class */ (function (_super) {\n __extends(HiloOpenCloseSeries, _super);\n function HiloOpenCloseSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render HiloOpenCloseSeries series.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.render = function (series) {\n var highLowRect;\n var open;\n var close;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var borderWidth = Math.max(series.border.width, 2);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible &&\n withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //highlow\n highLowRect = this.getRectangle(point.xValue + sideBySideInfo.start, Math.max(point.high, point.low), point.xValue + sideBySideInfo.end, Math.min(point.high, point.low), series);\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.median, Math.max(point.high, point.low), point.xValue + sideBySideInfo.median, Math.min(point.high, point.low), series));\n this.updateTickRegion(!series.chart.requireInvertedAxis, point.regions[0], borderWidth);\n //open\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.start, Math.max(point.open, point.close), point.xValue + sideBySideInfo.median, Math.max(point.open, point.close), series));\n //close\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.median, Math.min(point.open, point.close), point.xValue + sideBySideInfo.end, Math.min(point.open, point.close), series));\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n this.updateSymbolLocation(point, point.regions[0], series);\n var open_1 = { x: point.regions[1].x, y: point.regions[1].y };\n var close_1 = { x: point.regions[2].x, y: point.regions[2].y };\n this.drawHiloOpenClosePath(series, point, open_1, close_1, highLowRect, argsData);\n }\n this.updateTickRegion(series.chart.requireInvertedAxis, point.regions[1], borderWidth);\n this.updateTickRegion(series.chart.requireInvertedAxis, point.regions[2], borderWidth);\n }\n }\n };\n /**\n * Updates the tick region\n */\n HiloOpenCloseSeries.prototype.updateTickRegion = function (horizontal, region, borderWidth) {\n if (horizontal) {\n region.x -= borderWidth / 2;\n region.width = borderWidth;\n }\n else {\n region.y -= borderWidth / 2;\n region.height = borderWidth;\n }\n };\n /**\n * Trigger point rendering event\n */\n HiloOpenCloseSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var fill = (point.open <= point.close) ? series.bearFillColor : series.bullFillColor;\n var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n return this.triggerEvent(series, point, fill, border);\n };\n /**\n * To draw the rectangle for points.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.drawHiloOpenClosePath = function (series, point, open, close, rect, argsData) {\n // region highlow\n var direction;\n var options;\n if (series.chart.requireInvertedAxis) {\n direction = ('M' + ' ' + (rect.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height / 2) + ' ');\n direction += ('M' + ' ' + (open.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (open.x) + ' ' + (rect.y + rect.height) + ' ');\n direction += ('M' + ' ' + (close.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (close.x) + ' ' + (rect.y) + ' ');\n }\n else {\n direction = ('M' + ' ' + (rect.x + rect.width / 2) + ' ' + (rect.y + rect.height) + ' ' +\n 'L' + ' ' + (rect.x + rect.width / 2) + ' ' + (rect.y) + ' ');\n //region opentick\n direction += ('M' + ' ' + (rect.x) + ' ' + (open.y) + ' ' +\n 'L' + ' ' + (rect.x + rect.width / 2) + ' ' + (open.y) + ' ');\n //region closetick\n direction += ('M' + ' ' + (rect.x + rect.width / 2) + ' ' + (close.y) + ' ' +\n 'L' + ' ' + (rect.x + rect.width) + ' ' + (close.y) + ' ');\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.fill, series.opacity, series.dashArray, direction);\n pathAnimation(getElement(options.id), direction, series.chart.redraw);\n var element = series.chart.renderer.drawPath(options);\n element.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n series.seriesElement.appendChild(element);\n };\n /**\n * Get module name.\n */\n HiloOpenCloseSeries.prototype.getModuleName = function () {\n return 'HiloOpenCloseSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HiloOpenCloseSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the column series.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return HiloOpenCloseSeries;\n}(ColumnBase));\nexport { HiloOpenCloseSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange, getPoint, PathOption, Rect } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `RangeAreaSeries` module is used to render the range area series.\n */\nvar RangeAreaSeries = /** @class */ (function (_super) {\n __extends(RangeAreaSeries, _super);\n function RangeAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render RangeArea Series.\n * @return {void}.\n * @private\n */\n RangeAreaSeries.prototype.render = function (series, xAxis, yAxis, inverted) {\n var point;\n var direction = '';\n var command = 'M';\n var closed = undefined;\n var visiblePoints = this.improveChartPerformance(series);\n for (var i = 0, length_1 = visiblePoints.length; i < length_1; i++) {\n point = visiblePoints[i];\n point.symbolLocations = [];\n point.regions = [];\n var low = Math.min(point.low, point.high);\n var high = Math.max(point.low, point.high);\n if (yAxis.isInversed) {\n var temp = low;\n low = high;\n high = temp;\n }\n var lowPoint = getPoint(point.xValue, low, xAxis, yAxis, inverted);\n var highPoint = getPoint(point.xValue, high, xAxis, yAxis, inverted);\n point.symbolLocations.push(highPoint);\n point.symbolLocations.push(lowPoint);\n var rect = new Rect(Math.min(lowPoint.x, highPoint.x), Math.min(lowPoint.y, highPoint.y), Math.max(Math.abs(highPoint.x - lowPoint.x), series.marker.width), Math.max(Math.abs(highPoint.y - lowPoint.y), series.marker.width));\n if (!inverted) {\n rect.x -= series.marker.width / 2;\n }\n else {\n rect.y -= series.marker.width / 2;\n }\n point.regions.push(rect);\n //Path to connect the high points\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction = direction.concat(command + ' ' + (lowPoint.x) + ' ' + (lowPoint.y) + ' ');\n closed = false;\n if ((i + 1 < visiblePoints.length && !visiblePoints[i + 1].visible)\n || i === visiblePoints.length - 1) {\n // Path to connect the low points\n direction = this.closeRangeAreaPath(visiblePoints, point, series, direction, i);\n command = 'M';\n direction = direction.concat(' ' + 'Z');\n closed = true;\n }\n command = 'L';\n }\n else {\n if (closed === false && i !== 0) {\n direction = this.closeRangeAreaPath(visiblePoints, point, series, direction, i);\n closed = true;\n }\n command = 'M';\n point.symbolLocations = [];\n }\n }\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n series.chart.element.id + '_Series_' + series.index;\n var options = new PathOption(name, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * path for rendering the low points\n * @return {void}.\n * @private\n */\n RangeAreaSeries.prototype.closeRangeAreaPath = function (visiblePoints, point, series, direction, i) {\n for (var j = i; j >= 0; j--) {\n if (visiblePoints[j].visible && visiblePoints[j].symbolLocations[0]) {\n point = visiblePoints[j];\n direction += 'L' + ' ' + (point.symbolLocations[0].x) + ' ' + ((point.symbolLocations[0].y)) + ' ';\n }\n else {\n break;\n }\n }\n return direction;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n RangeAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * Get module name.\n */\n RangeAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'RangeAreaSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n RangeAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroys range area series\n */\n };\n return RangeAreaSeries;\n}(LineBase));\nexport { RangeAreaSeries };\n","import { withInRange, getPoint, PathOption, drawSymbol, Size, Rect } from '../../common/utils/helper';\nimport { markerAnimate, appendChildElement, animateRedrawElement } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `BubbleSeries` module is used to render the bubble series.\n */\nvar BubbleSeries = /** @class */ (function () {\n function BubbleSeries() {\n }\n /**\n * Render the Bubble series.\n * @return {void}\n * @private\n */\n BubbleSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var marker = series.marker;\n var visiblePoints = series.points;\n var shapeOption;\n var argsData;\n //let bubbleMode: RadiusMode = bubbleOptions.radiusMode;\n var segmentRadius;\n var radius;\n var value = Math.max(series.chart.initialClipRect.height, series.chart.initialClipRect.width);\n var percentChange = value / 100;\n var maxRadius = series.maxRadius * percentChange;\n var minRadius = series.minRadius * percentChange;\n var maximumSize = null;\n var maxValue = null;\n var element;\n var startLocation;\n var redraw = series.chart.redraw;\n if ((series.maxRadius === null || series.minRadius === null)) {\n for (var _i = 0, _a = series.chart.visibleSeries; _i < _a.length; _i++) {\n var value_1 = _a[_i];\n if (value_1.type === 'Bubble' && value_1.visible === true && (value_1.maxRadius === null || value_1.minRadius === null)) {\n maximumSize = value_1.sizeMax > maximumSize ? value_1.sizeMax : maximumSize;\n }\n }\n maxValue = (value / 5) / 2;\n minRadius = maxRadius = 1;\n radius = maxValue * maxRadius;\n }\n else {\n maximumSize = series.sizeMax;\n radius = maxRadius - minRadius;\n }\n for (var _b = 0, visiblePoints_1 = visiblePoints; _b < visiblePoints_1.length; _b++) {\n var bubblePoint = visiblePoints_1[_b];\n startLocation = redraw ? bubblePoint.symbolLocations[0] : null;\n bubblePoint.symbolLocations = [];\n bubblePoint.regions = [];\n if (bubblePoint.visible &&\n withInRange(visiblePoints[bubblePoint.index - 1], bubblePoint, visiblePoints[bubblePoint.index + 1], series)) {\n if ((series.maxRadius === null || series.minRadius === null)) {\n segmentRadius = radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n else {\n segmentRadius = minRadius + radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n segmentRadius = segmentRadius || minRadius;\n argsData = {\n cancel: false, name: pointRender, series: series, point: bubblePoint,\n fill: series.setPointColor(bubblePoint, series.interior),\n border: series.setBorderColor(bubblePoint, { width: series.border.width, color: series.border.color }),\n height: 2 * segmentRadius, width: 2 * segmentRadius\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n bubblePoint.symbolLocations.push(getPoint(bubblePoint.xValue, bubblePoint.yValue, xAxis, yAxis, isInverted));\n bubblePoint.color = argsData.fill;\n shapeOption = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + bubblePoint.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n element = drawSymbol(bubblePoint.symbolLocations[0], 'Circle', new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, bubblePoint.x.toString() + ':' + bubblePoint.yValue.toString());\n appendChildElement(series.seriesElement, element, redraw);\n bubblePoint.regions.push(new Rect(bubblePoint.symbolLocations[0].x - segmentRadius, bubblePoint.symbolLocations[0].y - segmentRadius, 2 * segmentRadius, 2 * segmentRadius));\n bubblePoint.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n shape: 'Circle', width: argsData.width\n };\n if (redraw) {\n animateRedrawElement(element, 300, startLocation, bubblePoint.symbolLocations[0], 'cx', 'cy');\n }\n }\n else {\n bubblePoint.marker = { visible: false };\n }\n }\n }\n };\n /**\n * To destroy the Bubble.\n * @return {void}\n * @private\n */\n BubbleSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n BubbleSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'BubbleSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BubbleSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var bubblePoint = _a[_i];\n if (!bubblePoint.symbolLocations.length) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, bubblePoint.index, bubblePoint.symbolLocations[0], false);\n count++;\n }\n };\n return BubbleSeries;\n}());\nexport { BubbleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { ChartLocation, ControlPoints } from '../../common/utils/helper';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { LineBase } from './line-base';\n/**\n * render Line series\n */\nvar SplineBase = /** @class */ (function (_super) {\n __extends(SplineBase, _super);\n /** @private */\n function SplineBase(chartModule) {\n var _this = _super.call(this, chartModule) || this;\n _this.splinePoints = [];\n return _this;\n }\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.findSplinePoint = function (series) {\n var value;\n var points = this.filterEmptyPoints(series);\n this.splinePoints = this.findSplineCoefficients(points, series);\n if (points.length > 1) {\n series.drawPoints = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index !== 0) {\n var previous = this.getPreviousIndex(points, point.index - 1, series);\n value = this.getControlPoints(points[previous], point, this.splinePoints[previous], this.splinePoints[point.index], series);\n series.drawPoints.push(value);\n if (point.yValue && value.controlPoint1.y && value.controlPoint2.y) {\n series.yMin = Math.floor(Math.min(series.yMin, point.yValue, value.controlPoint1.y, value.controlPoint2.y));\n series.yMax = Math.ceil(Math.max(series.yMax, point.yValue, value.controlPoint1.y, value.controlPoint2.y));\n }\n }\n }\n }\n };\n SplineBase.prototype.getPreviousIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i > -1) {\n i = i - 1;\n }\n return i;\n };\n SplineBase.prototype.getNextIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i < points.length) {\n i = i + 1;\n }\n return i;\n };\n SplineBase.prototype.filterEmptyPoints = function (series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return series.points;\n }\n var points = extend([], series.points, null, true);\n for (var i = 0; i < points.length; i++) {\n points[i].index = i;\n if (points[i].isEmpty) {\n points[i].symbolLocations = [];\n points[i].regions = [];\n points.splice(i, 1);\n i--;\n }\n }\n return points;\n };\n /**\n * To find the natural spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.findSplineCoefficients = function (points, series) {\n var count = points.length;\n var ySpline = [];\n var ySplineDuplicate = [];\n var coefficient1;\n var coefficient2;\n var coefficient3;\n var dy1;\n var dy2;\n var dx = [];\n var dy = [];\n var slope = [];\n var interPoint;\n var slopeLength;\n var cardinalSplineTension = series.cardinalSplineTension ? series.cardinalSplineTension : 0.5;\n cardinalSplineTension = cardinalSplineTension < 0 ? 0 : cardinalSplineTension > 1 ? 1 : cardinalSplineTension;\n switch (series.splineType) {\n case 'Monotonic':\n for (var i = 0; i < count - 1; i++) {\n dx[i] = points[i + 1].xValue - points[i].xValue;\n dy[i] = points[i + 1].yValue - points[i].yValue;\n slope[i] = dy[i] / dx[i];\n }\n //interpolant points\n slopeLength = slope.length;\n // to find the first and last co-efficient value\n ySpline[0] = slope[0];\n ySpline[count - 1] = slope[slopeLength - 1];\n //to find the other co-efficient values\n for (var j = 0; j < dx.length; j++) {\n if (slopeLength > j + 1) {\n if (slope[j] * slope[j + 1] <= 0) {\n ySpline[j + 1] = 0;\n }\n else {\n interPoint = dx[j] + dx[j + 1];\n ySpline[j + 1] = 3 * interPoint / ((interPoint + dx[j + 1]) / slope[j] + (interPoint + dx[j]) / slope[j + 1]);\n }\n }\n }\n break;\n case 'Cardinal':\n for (var i = 0; i < count; i++) {\n if (i === 0) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[i + 2].xValue - points[i].xValue)) : 0;\n }\n else if (i === (count - 1)) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[count - 1].xValue - points[count - 3].xValue)) : 0;\n }\n else {\n ySpline[i] = (cardinalSplineTension * (points[i + 1].xValue - points[i - 1].xValue));\n }\n }\n break;\n default:\n if (series.splineType === 'Clamped') {\n var firstIndex = (points[1].yValue - points[0].yValue) / (points[1].xValue - points[0].xValue);\n var lastIndex = (points[count - 1].xValue - points[count - 2].xValue) /\n (points[count - 1].yValue - points[count - 2].yValue);\n ySpline[0] = (3 * (points[1].yValue - points[0].yValue)) / (points[1].xValue - points[0].xValue) - 3;\n ySplineDuplicate[0] = 0.5;\n ySpline[points.length - 1] = (3 * (points[points.length - 1].yValue - points[points.length - 2].yValue)) /\n (points[points.length - 1].xValue - points[points.length - 2].xValue);\n ySpline[0] = ySplineDuplicate[0] = Math.abs(ySpline[0]) === Infinity ? 0 : ySpline[0];\n ySpline[points.length - 1] = ySplineDuplicate[points.length - 1] = Math.abs(ySpline[points.length - 1]) === Infinity ?\n 0 : ySpline[points.length - 1];\n }\n else {\n // assigning the first and last value as zero\n ySpline[0] = ySplineDuplicate[0] = 0;\n ySpline[points.length - 1] = 0;\n }\n for (var i = 1; i < count - 1; i++) {\n coefficient1 = points[i].xValue - points[i - 1].xValue;\n coefficient2 = points[i + 1].xValue - points[i - 1].xValue;\n coefficient3 = points[i + 1].xValue - points[i].xValue;\n dy1 = points[i + 1].yValue - points[i].yValue || null;\n dy2 = points[i].yValue - points[i - 1].yValue || null;\n if (coefficient1 === 0 || coefficient2 === 0 || coefficient3 === 0) {\n ySpline[i] = 0;\n ySplineDuplicate[i] = 0;\n }\n else {\n var p = 1 / (coefficient1 * ySpline[i - 1] + 2 * coefficient2);\n ySpline[i] = -p * coefficient3;\n ySplineDuplicate[i] = p * (6 * (dy1 / coefficient3 - dy2 / coefficient1) - coefficient1 * ySplineDuplicate[i - 1]);\n }\n }\n for (var k = count - 2; k >= 0; k--) {\n ySpline[k] = ySpline[k] * ySpline[k + 1] + ySplineDuplicate[k];\n }\n break;\n }\n return ySpline;\n };\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.getControlPoints = function (point1, point2, ySpline1, ySpline2, series) {\n var controlPoint1;\n var controlPoint2;\n var point;\n var ySplineDuplicate1 = ySpline1;\n var ySplineDuplicate2 = ySpline2;\n switch (series.splineType) {\n case 'Cardinal':\n if (series.xAxis.valueType === 'DateTime') {\n ySplineDuplicate1 = ySpline1 / this.dateTimeInterval(series);\n ySplineDuplicate2 = ySpline2 / this.dateTimeInterval(series);\n }\n controlPoint1 = new ChartLocation(point1.xValue + ySpline1 / 3, point1.yValue + ySplineDuplicate1 / 3);\n controlPoint2 = new ChartLocation(point2.xValue - ySpline2 / 3, point2.yValue - ySplineDuplicate2 / 3);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n case 'Monotonic':\n var value = (point2.xValue - point1.xValue) / 3;\n controlPoint1 = new ChartLocation(point1.xValue + value, point1.yValue + ySpline1 * value);\n controlPoint2 = new ChartLocation(point2.xValue - value, point2.yValue - ySpline2 * value);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n default:\n var one3 = 1 / 3.0;\n var deltaX2 = (point2.xValue - point1.xValue);\n deltaX2 = deltaX2 * deltaX2;\n var y1 = one3 * (((2 * point1.yValue) + point2.yValue) - one3 * deltaX2 * (ySpline1 + 0.5 * ySpline2));\n var y2 = one3 * ((point1.yValue + (2 * point2.yValue)) - one3 * deltaX2 * (0.5 * ySpline1 + ySpline2));\n controlPoint1 = new ChartLocation((2 * (point1.xValue) + (point2.xValue)) * one3, y1);\n controlPoint2 = new ChartLocation(((point1.xValue) + 2 * (point2.xValue)) * one3, y2);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n }\n return point;\n };\n /**\n * calculate datetime interval in hours\n *\n */\n SplineBase.prototype.dateTimeInterval = function (series) {\n var interval = series.xAxis.actualIntervalType;\n var intervalInMilliseconds;\n if (interval === 'Years') {\n intervalInMilliseconds = 365 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Months') {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Days') {\n intervalInMilliseconds = 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Hours') {\n intervalInMilliseconds = 60 * 60 * 1000;\n }\n else if (interval === 'Minutes') {\n intervalInMilliseconds = 60 * 1000;\n }\n else if (interval === 'Seconds') {\n intervalInMilliseconds = 1000;\n }\n else {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n return intervalInMilliseconds;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n SplineBase.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return SplineBase;\n}(LineBase));\nexport { SplineBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PathOption, getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { SplineBase } from './spline-base';\n/**\n * `SplineSeries` module is used to render the spline series.\n */\nvar SplineSeries = /** @class */ (function (_super) {\n __extends(SplineSeries, _super);\n function SplineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the spline series.\n * @return {void}\n * @private\n */\n SplineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var chart = series.chart;\n var marker = series.marker;\n var ySpline;\n var options;\n var firstPoint = null;\n var secondPoint = null;\n var direction = '';\n var pt1;\n var pt2;\n var bpt1;\n var bpt2;\n var data;\n var controlPointCount = 0;\n var controlPoint1;\n var controlPoint2;\n var startPoint = 'M';\n var points = this.filterEmptyPoints(series);\n var previous;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n previous = this.getPreviousIndex(points, point.index - 1, series);\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(points[previous], point, points[this.getNextIndex(points, point.index - 1, series)], series)) {\n if (firstPoint !== null) {\n data = series.drawPoints[previous];\n controlPoint1 = data.controlPoint1;\n controlPoint2 = data.controlPoint2;\n pt1 = getCoordinate(firstPoint.xValue, firstPoint.yValue, xAxis, yAxis, isInverted, series);\n pt2 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n bpt1 = getCoordinate(controlPoint1.x, controlPoint1.y, xAxis, yAxis, isInverted, series);\n bpt2 = getCoordinate(controlPoint2.x, controlPoint2.y, xAxis, yAxis, isInverted, series);\n direction = direction.concat((startPoint + ' ' + (pt1.x) + ' ' + (pt1.y) + ' ' + 'C' + ' ' + (bpt1.x) + ' '\n + (bpt1.y) + ' ' + (bpt2.x) + ' ' + (bpt2.y) + ' ' + (pt2.x) + ' ' + (pt2.y) + ' '));\n startPoint = 'L';\n }\n firstPoint = point;\n this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n else {\n startPoint = 'M';\n firstPoint = null;\n point.symbolLocations = [];\n }\n }\n var name = series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + series.index;\n options = new PathOption(name, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Get module name.\n */\n SplineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SplineSeries';\n };\n /**\n * To destroy the spline.\n * @return {void}\n * @private\n */\n SplineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return SplineSeries;\n}(SplineBase));\nexport { SplineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { sum, PathOption, getPoint, templateAnimate } from '../../common/utils/helper';\nimport { ColumnSeries } from './column-series';\n/**\n * `HistogramSeries` Module used to render the histogram series.\n */\nvar HistogramSeries = /** @class */ (function (_super) {\n __extends(HistogramSeries, _super);\n function HistogramSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Histogram series.\n * @return {void}\n * @private\n */\n HistogramSeries.prototype.render = function (series) {\n _super.prototype.render.call(this, series);\n if (series.showNormalDistribution) {\n this.renderNormalDistribution(series);\n }\n };\n /**\n * To calculate bin interval for Histogram series.\n * @return number\n * @private\n */\n HistogramSeries.prototype.calculateBinInterval = function (yValues, series) {\n var mean = sum(yValues) / yValues.length;\n var sumValue = 0;\n for (var _i = 0, yValues_1 = yValues; _i < yValues_1.length; _i++) {\n var value = yValues_1[_i];\n sumValue += (value - mean) * (value - mean);\n }\n series.histogramValues.mean = mean;\n series.histogramValues.sDValue = Math.round(Math.sqrt(sumValue / yValues.length - 1));\n series.histogramValues.binWidth = series.binInterval ||\n Math.round((3.5 * series.histogramValues.sDValue) / Math.pow(yValues.length, 1 / 3));\n };\n /**\n * Add data points for Histogram series.\n * @return {object[]}\n * @private\n */\n HistogramSeries.prototype.processInternalData = function (data, series) {\n var _a;\n var updatedData = [];\n var yValues = [];\n var binWidth;\n Object.keys(data).forEach(function (key) {\n yValues.push(data[key][series.yName]);\n });\n series.histogramValues = {\n yValues: yValues\n };\n var min = Math.min.apply(Math, series.histogramValues.yValues);\n this.calculateBinInterval(series.histogramValues.yValues, series);\n binWidth = series.histogramValues.binWidth;\n var yCount;\n for (var j = 0; j < data.length;) {\n yCount = yValues.filter(function (y) { return y >= min && y < (min + (binWidth)); }).length;\n updatedData.push((_a = {\n 'x': min + binWidth / 2\n },\n _a[series.yName] = yCount,\n _a));\n min = min + binWidth;\n j += yCount;\n }\n return updatedData;\n };\n /**\n * Render Normal Distribution for Histogram series.\n * @return {void}\n * @private\n */\n HistogramSeries.prototype.renderNormalDistribution = function (series) {\n var min = series.xAxis.actualRange.min;\n var max = series.xAxis.actualRange.max;\n var xValue;\n var pointLocation;\n var yValue;\n var direction = '';\n var startPoint = 'M';\n var yValuesCount = series.histogramValues.yValues.length;\n var binWidth = series.histogramValues.binWidth;\n var mean = series.histogramValues.mean;\n var sDValue = series.histogramValues.sDValue;\n var pointsCount = 500;\n var del = (max - min) / (pointsCount - 1);\n var distributionLine;\n for (var i = 0; i < pointsCount; i++) {\n xValue = min + i * del;\n yValue = Math.exp(-(xValue - mean) * (xValue - mean) / (2 * sDValue * sDValue)) /\n (sDValue * Math.sqrt(2 * Math.PI));\n pointLocation = getPoint(xValue, yValue * binWidth * yValuesCount, series.xAxis, series.yAxis, series.chart.requireInvertedAxis, series);\n direction += startPoint + ' ' + (pointLocation.x) + ' ' + (pointLocation.y) + ' ';\n startPoint = 'L';\n }\n distributionLine = series.chart.renderer.drawPath(new PathOption(series.chart.element.id + '_Series_' + series.index + '_NDLine', 'transparent', 2, series.chart.themeStyle.errorBar, series.opacity, series.dashArray, direction));\n distributionLine.style.visibility = (series.animation.enable && series.chart.animateSeries) ?\n 'hidden' : 'visible';\n series.seriesElement.appendChild(distributionLine);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HistogramSeries.prototype.doAnimation = function (series) {\n _super.prototype.doAnimation.call(this, series);\n if (series.showNormalDistribution) {\n templateAnimate(series.seriesElement.lastElementChild, series.animation.duration, 500, 'FadeIn');\n }\n };\n /**\n * Get module name.\n */\n HistogramSeries.prototype.getModuleName = function () {\n return 'HistogramSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the histogram series.\n * @return {void}\n * @private\n */\n HistogramSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return HistogramSeries;\n}(ColumnSeries));\nexport { HistogramSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PathOption, getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { SplineBase } from './spline-base';\n/**\n * `SplineAreaSeries` module used to render the spline area series.\n */\nvar SplineAreaSeries = /** @class */ (function (_super) {\n __extends(SplineAreaSeries, _super);\n function SplineAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the splineArea series.\n * @return {void}\n * @private\n */\n SplineAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var firstPoint = null;\n var direction = '';\n var startPoint = null;\n var startPoint1 = null;\n var pt1;\n var pt2;\n var bpt1;\n var bpt2;\n var controlPt1;\n var controlPt2;\n var points = this.filterEmptyPoints(series);\n var pointsLength = series.points.length;\n var point;\n var previous;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var origin = series.chart.chartAreaType === 'PolarRadar' ? series.points[0].yValue :\n Math.max(series.yAxis.visibleRange.min, 0);\n for (var i = 0; i < pointsLength; i++) {\n point = series.points[i];\n point.symbolLocations = [];\n point.regions = [];\n previous = this.getPreviousIndex(points, point.index - 1, series);\n if (point.visible &&\n withInRange(points[previous], point, points[this.getNextIndex(points, point.index - 1, series)], series)) {\n if (firstPoint) {\n controlPt1 = series.drawPoints[previous].controlPoint1;\n controlPt2 = series.drawPoints[previous].controlPoint2;\n pt1 = getCoordinate(firstPoint.xValue, firstPoint.yValue, xAxis, yAxis, isInverted, series);\n pt2 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n bpt1 = getCoordinate(controlPt1.x, controlPt1.y, xAxis, yAxis, isInverted, series);\n bpt2 = getCoordinate(controlPt2.x, controlPt2.y, xAxis, yAxis, isInverted, series);\n direction = direction.concat(' C ' + bpt1.x + ' '\n + bpt1.y + ' ' + bpt2.x + ' ' + bpt2.y + ' ' + pt2.x + ' ' + pt2.y + ' ');\n }\n else {\n // Start point for the current path\n startPoint = getCoordinate(point.xValue, origin, xAxis, yAxis, isInverted, series);\n direction += ('M ' + startPoint.x + ' ' + startPoint.y + ' ');\n // First Point to draw the area path\n startPoint1 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n direction += ('L ' + startPoint1.x + ' ' + startPoint1.y + ' ');\n }\n this.storePointLocation(point, series, isInverted, getCoordinate);\n firstPoint = point;\n }\n else {\n firstPoint = null;\n point.symbolLocations = [];\n }\n if (((i + 1 < pointsLength && !series.points[i + 1].visible) || i === pointsLength - 1)\n && pt2 && startPoint) {\n startPoint = getCoordinate(point.xValue, origin, xAxis, yAxis, isInverted, series);\n direction = direction.concat('L ' + (startPoint.x) + ' ' + (startPoint.y));\n }\n }\n this.appendLinePath(new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction), series, '');\n this.renderMarker(series);\n };\n /**\n * Get module name.\n */\n SplineAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SplineAreaSeries';\n };\n /**\n * To destroy the spline.\n * @return {void}\n * @private\n */\n SplineAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return SplineAreaSeries;\n}(SplineBase));\nexport { SplineAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { LineBase } from '../series/line-base';\nimport { Series, Points } from '../series/chart-series';\nimport { RectOption, Rect, appendClipElement } from '../../common/utils/helper';\nimport { findClipRect } from '../../common/utils/helper';\n/**\n * Technical Analysis module helps to predict the market trend\n */\nvar TechnicalAnalysis = /** @class */ (function (_super) {\n __extends(TechnicalAnalysis, _super);\n function TechnicalAnalysis() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series, that are used to represent the given technical indicator\n * @private\n */\n TechnicalAnalysis.prototype.initSeriesCollection = function (indicator, chart) {\n indicator.targetSeries = [];\n var signalLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(signalLine, indicator, 'SignalLine', indicator.fill, indicator.width, chart);\n };\n /**\n * Initializes the properties of the given series\n * @private\n */\n TechnicalAnalysis.prototype.setSeriesProperties = function (series, indicator, name, fill, width, chart) {\n series.name = name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || '#606eff';\n series.dashArray = indicator.dashArray;\n series.width = width;\n series.xAxisName = indicator.xAxisName;\n series.animation = indicator.animation;\n series.yAxisName = indicator.yAxisName;\n series.clipRectElement = indicator.clipRectElement;\n series.points = [];\n series.enableTooltip = true;\n series.interior = series.fill;\n series.category = 'Indicator';\n series.index = indicator.index;\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n series.marker.visible = false;\n indicator.targetSeries.push(series);\n };\n /**\n * Creates the elements of a technical indicator\n * @private\n */\n TechnicalAnalysis.prototype.createIndicatorElements = function (chart, indicator, index) {\n if (indicator.seriesName || indicator.dataSource) {\n findClipRect(indicator.targetSeries[0]);\n }\n var clipRect = new Rect(0, 0, 0, 0);\n if (indicator.seriesName || indicator.dataSource) {\n clipRect = indicator.targetSeries[0].clipRect;\n }\n var options = new RectOption(chart.element.id + '_ChartIndicatorClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height,\n });\n var clipRectElement = appendClipElement(chart.redraw, options, chart.renderer);\n //defines the clip rect element\n //creates the group for an indicator\n indicator.indicatorElement = chart.renderer.createGroup({\n 'id': chart.element.id + 'IndicatorGroup' + index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartIndicatorClipRect_' + index + ')'\n });\n indicator.indicatorElement.appendChild(clipRectElement);\n //Defines a group for each series in a technical indicator\n for (var _i = 0, _a = indicator.targetSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n series.clipRectElement = clipRectElement;\n var element = series.chart.renderer.createGroup({\n 'id': series.chart.element.id + '_Indicator_' +\n indicator.index + '_' + series.name + '_Group'\n });\n indicator.indicatorElement.appendChild(element);\n series.seriesElement = element;\n }\n chart.indicatorElements.appendChild(indicator.indicatorElement);\n };\n TechnicalAnalysis.prototype.getDataPoint = function (x, y, sourcePoint, series, index, indicator) {\n if (indicator === void 0) { indicator = null; }\n var point = new Points();\n point.x = x;\n point.y = y;\n point.xValue = sourcePoint.xValue;\n point.color = series.fill;\n point.index = index;\n point.yValue = y;\n point.visible = true;\n series.xMin = Math.min(series.xMin, point.xValue);\n series.yMin = Math.min(series.yMin, point.yValue);\n series.xMax = Math.max(series.xMax, point.xValue);\n series.yMax = Math.max(series.yMax, point.yValue);\n series.xData.push(point.xValue);\n if (indicator && indicator.type === 'Macd' && series.type === 'Column') {\n if (point.y >= 0) {\n point.color = indicator.macdPositiveColor;\n }\n else {\n point.color = indicator.macdNegativeColor;\n }\n }\n return point;\n };\n TechnicalAnalysis.prototype.getRangePoint = function (x, high, low, sourcePoint, series, index, indicator) {\n if (indicator === void 0) { indicator = null; }\n var point = new Points();\n point.x = x;\n point.high = high;\n point.low = low;\n point.xValue = sourcePoint.xValue;\n point.color = series.fill;\n point.index = index;\n point.visible = true;\n series.xData.push(point.xValue);\n return point;\n };\n TechnicalAnalysis.prototype.setSeriesRange = function (points, indicator, series) {\n if (series === void 0) { series = null; }\n if (!series) {\n indicator.targetSeries[0].points = points;\n }\n else {\n series.points = points;\n }\n };\n return TechnicalAnalysis;\n}(LineBase));\nexport { TechnicalAnalysis };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `SmaIndicator` module is used to render SMA indicator.\n */\nvar SmaIndicator = /** @class */ (function (_super) {\n __extends(SmaIndicator, _super);\n function SmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on SMA approach\n * @private\n */\n SmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var smaPoints = [];\n var points = indicator.points;\n if (points && points.length) {\n //prepare data\n var validData = points;\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var signalSeries = indicator.targetSeries[0];\n if (validData && validData.length && validData.length >= indicator.period) {\n //find initial average\n var average = 0;\n var sum = 0;\n for (var i = 0; i < indicator.period; i++) {\n sum += validData[i][field];\n }\n average = sum / indicator.period;\n smaPoints.push(this.getDataPoint(validData[indicator.period - 1][xField], average, validData[indicator.period - 1], signalSeries, smaPoints.length));\n var index = indicator.period;\n while (index < validData.length) {\n sum -= validData[index - indicator.period][field];\n sum += validData[index][field];\n average = sum / indicator.period;\n smaPoints.push(this.getDataPoint(validData[index][xField], average, validData[index], signalSeries, smaPoints.length));\n index++;\n }\n }\n this.setSeriesRange(smaPoints, indicator);\n }\n };\n /**\n * To destroy the SMA indicator\n * @return {void}\n * @private\n */\n SmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the SMA indicator\n */\n };\n /**\n * Get module name.\n */\n SmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SmaIndicator';\n };\n return SmaIndicator;\n}(TechnicalAnalysis));\nexport { SmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `EmaIndicator` module is used to render EMA indicator.\n */\nvar EmaIndicator = /** @class */ (function (_super) {\n __extends(EmaIndicator, _super);\n function EmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on EMA approach\n * @private\n */\n EmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var emaPoints = [];\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData && validData.length && validData.length >= indicator.period) {\n //find initial average\n var sum = 0;\n var average = 0;\n //smoothing factor\n var k = (2 / (indicator.period + 1));\n for (var i = 0; i < indicator.period; i++) {\n sum += validData[i][field];\n }\n average = sum / indicator.period;\n emaPoints.push(this.getDataPoint(validData[indicator.period - 1][xField], average, validData[indicator.period - 1], signalSeries, emaPoints.length));\n var index = indicator.period;\n while (index < validData.length) {\n //previous average\n var prevAverage = emaPoints[index - indicator.period][signalSeries.yName];\n var yValue = (validData[index][field] - prevAverage) * k + prevAverage;\n emaPoints.push(this.getDataPoint(validData[index][xField], yValue, validData[index], signalSeries, emaPoints.length));\n index++;\n }\n }\n this.setSeriesRange(emaPoints, indicator);\n };\n /**\n * To destroy the EMA Indicator\n * @return {void}\n * @private\n */\n EmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the EMA Indicator\n */\n };\n /**\n * Get module name.\n */\n EmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'EmaIndicator';\n };\n return EmaIndicator;\n}(TechnicalAnalysis));\nexport { EmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `TmaIndicator` module is used to render TMA indicator.\n */\nvar TmaIndicator = /** @class */ (function (_super) {\n __extends(TmaIndicator, _super);\n function TmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on TMA approach\n * @private\n */\n TmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var tmaPoints = [];\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData && validData.length && validData.length >= indicator.period) {\n var signalSeries_1 = indicator.targetSeries[0];\n //prepare data\n var validData_1 = indicator.points;\n if (validData_1.length && validData_1.length >= indicator.period) {\n //smoothing factor\n var k = (2 / (indicator.period + 1));\n //find initial average\n var average = 0;\n var sum = 0;\n var sumOfSMA = 0;\n var averageSMA = 0;\n var smaValues = [];\n //sma values\n var index = 0;\n var length_1 = validData_1.length;\n var period = indicator.period;\n while (length_1 >= period) {\n sum = 0;\n index = validData_1.length - length_1;\n for (var j = index; j < index + period; j++) {\n sum = sum + validData_1[j][field];\n }\n sum = sum / period;\n smaValues.push(sum);\n length_1--;\n }\n //initial values\n for (var k_1 = 0; k_1 < period - 1; k_1++) {\n sum = 0;\n for (var j = 0; j < k_1 + 1; j++) {\n sum = sum + validData_1[j][field];\n }\n sum = sum / (k_1 + 1);\n smaValues.splice(k_1, 0, sum);\n }\n index = indicator.period;\n while (index <= smaValues.length) {\n sum = 0;\n for (var j = index - indicator.period; j < index; j++) {\n sum = sum + smaValues[j];\n }\n sum = sum / indicator.period;\n tmaPoints.push(this.getDataPoint(validData_1[index - 1][xField], sum, validData_1[index - 1], signalSeries_1, tmaPoints.length));\n index++;\n }\n }\n }\n this.setSeriesRange(tmaPoints, indicator);\n };\n /**\n * To destroy the TMA indicator.\n * @return {void}\n * @private\n */\n TmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the TMA Indicator\n */\n };\n /**\n * Get module name.\n */\n TmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'TmaIndicator';\n };\n return TmaIndicator;\n}(TechnicalAnalysis));\nexport { TmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `AccumulationDistributionIndicator` module is used to render accumulation distribution indicator.\n */\nvar AccumulationDistributionIndicator = /** @class */ (function (_super) {\n __extends(AccumulationDistributionIndicator, _super);\n function AccumulationDistributionIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions using accumulation distribution approach\n * @private\n */\n AccumulationDistributionIndicator.prototype.initDataSource = function (indicator, chart) {\n var sourceSeries = indicator.sourceSeries;\n var adPoints = [];\n var validData = indicator.points;\n if (validData.length > 0 && validData.length > indicator.period) {\n adPoints = this.calculateADPoints(indicator, validData);\n }\n this.setSeriesRange(adPoints, indicator);\n };\n /**\n * Calculates the Accumulation Distribution values\n * @private\n */\n AccumulationDistributionIndicator.prototype.calculateADPoints = function (indicator, validData) {\n var temp = [];\n var sum = 0;\n var i = 0;\n var value = 0;\n var high = 0;\n var low = 0;\n var close = 0;\n var signalSeries = indicator.targetSeries[0];\n for (i = 0; i < validData.length; i++) {\n high = Number(validData[i].high);\n low = Number(validData[i].low);\n close = Number(validData[i].close);\n /**\n * Money Flow Multiplier = [(Close - Low) - (High - Close)] /(High - Low)\n * Money Flow Volume = Money Flow Multiplier x Volume for the Period\n * ADL = Previous ADL + Current Period's Money Flow Volume\n */\n value = ((close - low) - (high - close)) / (high - low);\n /**\n * Sum is to calculate the Y values of the Accumulation distribution indicator\n */\n sum = sum + value * Number(validData[i].volume);\n /**\n * To calculate the x and y values for the Accumulation distribution indicator\n */\n temp[i] = this.getDataPoint(validData[i].x, sum, validData[i], signalSeries, temp.length);\n }\n return temp;\n };\n /**\n * To destroy the Accumulation Distribution Technical Indicator.\n * @return {void}\n * @private\n */\n AccumulationDistributionIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the Accumulation Distribution Technical indicator\n */\n };\n /**\n * Get module name.\n */\n AccumulationDistributionIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the Indicator\n */\n return 'AccumulationDistributionIndicator';\n };\n return AccumulationDistributionIndicator;\n}(TechnicalAnalysis));\nexport { AccumulationDistributionIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `AtrIndicator` module is used to render ATR indicator.\n */\nvar AtrIndicator = /** @class */ (function (_super) {\n __extends(AtrIndicator, _super);\n function AtrIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions using Average True Range approach\n * @private\n */\n AtrIndicator.prototype.initDataSource = function (indicator, chart) {\n var validData = indicator.points;\n if (validData.length > 0 && validData.length > indicator.period) {\n this.calculateATRPoints(indicator, validData);\n }\n };\n /**\n * To calculate Average True Range indicator points\n * @private\n */\n AtrIndicator.prototype.calculateATRPoints = function (indicator, validData) {\n var average = 0;\n var highLow = 0;\n var highClose = 0;\n var lowClose = 0;\n var trueRange = 0;\n var points = [];\n var temp = [];\n var period = indicator.period;\n var sum = 0;\n var y = 'y';\n var signalSeries = indicator.targetSeries[0];\n for (var i = 0; i < validData.length; i++) {\n /**\n * Current High less the current Low\n * Current High less the previous Close (absolute value)\n * Current Low less the previous Close (absolute value)\n */\n highLow = Number(validData[i].high) - Number(validData[i].low);\n if (i > 0) {\n //\n highClose = Math.abs(Number(validData[i].high) - Number(validData[i - 1].close));\n lowClose = Math.abs(Number(validData[i].low) - Number(validData[i - 1].close));\n }\n /**\n * To find the maximum of highLow, highClose, lowClose\n */\n trueRange = Math.max(highLow, highClose, lowClose);\n sum = sum + trueRange;\n /**\n * Push the x and y values for the Average true range indicator\n */\n if (i >= period) {\n average = (Number(temp[i - 1][y]) * (period - 1) + trueRange) / period;\n points.push(this.getDataPoint(validData[i].x, average, validData[i], signalSeries, points.length));\n }\n else {\n average = sum / period;\n if (i === period - 1) {\n points.push(this.getDataPoint(validData[i].x, average, validData[i], signalSeries, points.length));\n }\n }\n temp[i] = { x: validData[i].x, y: average };\n }\n this.setSeriesRange(points, indicator);\n };\n /**\n * To destroy the Average true range indicator.\n * @return {void}\n * @private\n */\n AtrIndicator.prototype.destroy = function (chart) {\n /**\n * Destroy the Average true range indicator\n */\n };\n /**\n * Get module name.\n */\n AtrIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the Indicator\n */\n return 'AtrIndicator';\n };\n return AtrIndicator;\n}(TechnicalAnalysis));\nexport { AtrIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `MomentumIndicator` module is used to render Momentum indicator.\n */\nvar MomentumIndicator = /** @class */ (function (_super) {\n __extends(MomentumIndicator, _super);\n function MomentumIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series to represent a momentum indicator\n * @private\n */\n MomentumIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n };\n /**\n * Defines the predictions using momentum approach\n * @private\n */\n MomentumIndicator.prototype.initDataSource = function (indicator, chart) {\n var upperCollection = [];\n var signalCollection = [];\n var validData = indicator.points;\n if (validData && validData.length) {\n var upperSeries = indicator.targetSeries[1];\n var signalSeries = indicator.targetSeries[0];\n var length_1 = indicator.period;\n if (validData.length >= indicator.period) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, 100, validData[i], upperSeries, upperCollection.length));\n if (!(i < length_1)) {\n signalCollection.push(this.getDataPoint(validData[i].x, (Number(validData[i].close) / Number(validData[i - length_1].close) * 100), validData[i], signalSeries, signalCollection.length));\n }\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[1]);\n }\n };\n /**\n * To destroy the momentum indicator\n * @return {void}\n * @private\n */\n MomentumIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the momentum indicator\n */\n };\n /**\n * Get module name.\n */\n MomentumIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MomentumIndicator';\n };\n return MomentumIndicator;\n}(TechnicalAnalysis));\nexport { MomentumIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `RsiIndicator` module is used to render RSI indicator.\n */\nvar RsiIndicator = /** @class */ (function (_super) {\n __extends(RsiIndicator, _super);\n function RsiIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the series collection to represent the RSI Indicator\n * @private\n */\n RsiIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n if (indicator.showZones) {\n var lowerLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, lowerLine, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n }\n };\n /**\n * Defines the predictions using RSI approach\n * @private\n */\n RsiIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var lowerCollection = [];\n var upperCollection = [];\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n //Find upper band and lower band values\n if (indicator.showZones) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, indicator.overBought, validData[i], indicator.targetSeries[1], upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[i].x, indicator.overSold, validData[i], indicator.targetSeries[2], lowerCollection.length));\n }\n }\n //Find signal line value\n var prevClose = Number(validData[0].close);\n var gain = 0;\n var loss = 0;\n for (var i = 1; i <= indicator.period; i++) {\n var close_1 = Number(validData[i].close);\n if (close_1 > prevClose) {\n gain += close_1 - prevClose;\n }\n else {\n loss += prevClose - close_1;\n }\n prevClose = close_1;\n }\n gain = gain / indicator.period;\n loss = loss / indicator.period;\n signalCollection.push(this.getDataPoint(validData[indicator.period].x, 100 - (100 / (1 + gain / loss)), validData[indicator.period], signalSeries, signalCollection.length));\n for (var j = indicator.period + 1; j < validData.length; j++) {\n var close_2 = Number(validData[j].close);\n if (close_2 > prevClose) {\n gain = (gain * (indicator.period - 1) + (close_2 - prevClose)) / indicator.period;\n loss = (loss * (indicator.period - 1)) / indicator.period;\n }\n else if (close_2 < prevClose) {\n loss = (loss * (indicator.period - 1) + (prevClose - close_2)) / indicator.period;\n gain = (gain * (indicator.period - 1)) / indicator.period;\n }\n prevClose = close_2;\n signalCollection.push(this.getDataPoint(validData[j].x, 100 - (100 / (1 + gain / loss)), validData[j], signalSeries, signalCollection.length));\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n if (indicator.showZones) {\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[1]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[2]);\n }\n };\n /**\n * To destroy the RSI Indicator.\n * @return {void}\n * @private\n */\n RsiIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the RSI Indicator\n */\n };\n /**\n * Get module name.\n */\n RsiIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the indicator.\n */\n return 'RsiIndicator';\n };\n return RsiIndicator;\n}(TechnicalAnalysis));\nexport { RsiIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `StochasticIndicator` module is used to render stochastic indicator.\n */\nvar StochasticIndicator = /** @class */ (function (_super) {\n __extends(StochasticIndicator, _super);\n function StochasticIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series that represents the stochastic indicator\n * @private\n */\n StochasticIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n var periodLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(periodLine, indicator, 'PeriodLine', indicator.periodLine.color, indicator.periodLine.width, chart);\n if (indicator.showZones) {\n var upperSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(upperSeries, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n var lowerSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(lowerSeries, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n }\n };\n /**\n * Defines the predictions based on stochastic approach\n * @private\n */\n StochasticIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var upperCollection = [];\n var lowerCollection = [];\n var periodCollection = [];\n var source = [];\n var sourceSeries = indicator.sourceSeries;\n var point = {};\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n if (indicator.showZones) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, indicator.overBought, validData[i], indicator.targetSeries[2], upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[i].x, indicator.overSold, validData[i], indicator.targetSeries[3], lowerCollection.length));\n }\n }\n source = this.calculatePeriod(indicator.period, indicator.kPeriod, validData, indicator.targetSeries[1]);\n periodCollection = this.smaCalculation(indicator.period, indicator.kPeriod, source, indicator.targetSeries[1]);\n signalCollection = this.smaCalculation(indicator.period + indicator.kPeriod - 1, indicator.dPeriod, source, indicator.targetSeries[0]);\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n this.setSeriesRange(periodCollection, indicator, indicator.targetSeries[1]);\n if (indicator.showZones) {\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[2]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[3]);\n }\n };\n /**\n * Calculates the SMA Values\n * @private\n */\n StochasticIndicator.prototype.smaCalculation = function (period, kPeriod, data, sourceSeries) {\n var pointCollection = [];\n if (data.length >= period + kPeriod) {\n var count = period + (kPeriod - 1);\n var temp = [];\n var values = [];\n for (var i = 0; i < data.length; i++) {\n var value = Number(data[i].y);\n temp.push(value);\n }\n var length_1 = temp.length;\n while (length_1 >= count) {\n var sum = 0;\n for (var i = period - 1; i < (period + kPeriod - 1); i++) {\n sum = sum + temp[i];\n }\n sum = sum / kPeriod;\n values.push(sum.toFixed(2));\n temp.splice(0, 1);\n length_1 = temp.length;\n }\n var len = count - 1;\n for (var i = 0; i < data.length; i++) {\n if (!(i < len)) {\n pointCollection.push(this.getDataPoint(data[i].x, Number(values[i - len]), data[i], sourceSeries, pointCollection.length));\n data[i].y = Number((values[i - len]));\n }\n }\n }\n return pointCollection;\n };\n /**\n * Calculates the period line values.\n * @private\n */\n StochasticIndicator.prototype.calculatePeriod = function (period, kPeriod, data, series) {\n var lowValues = [];\n var highValues = [];\n var closeValues = [];\n var modifiedSource = [];\n for (var j = 0; j < data.length; j++) {\n lowValues[j] = data[j].low;\n highValues[j] = data[j].high;\n closeValues[j] = data[j].close;\n }\n if (data.length > period) {\n var totalPeriod = period + kPeriod;\n var mins = [];\n var maxs = [];\n for (var i = 0; i < period - 1; ++i) {\n maxs.push(0);\n mins.push(0);\n modifiedSource.push(this.getDataPoint(data[i].x, data[i].close, data[i], series, modifiedSource.length));\n }\n for (var i = period - 1; i < data.length; ++i) {\n var min = Number.MAX_VALUE;\n var max = Number.MIN_VALUE;\n for (var j = 0; j < period; ++j) {\n min = Math.min(min, lowValues[i - j]);\n max = Math.max(max, highValues[i - j]);\n }\n maxs.push(max);\n mins.push(min);\n }\n for (var i = period - 1; i < data.length; ++i) {\n var top_1 = 0;\n var bottom = 0;\n top_1 += closeValues[i] - mins[i];\n bottom += maxs[i] - mins[i];\n modifiedSource.push(this.getDataPoint(data[i].x, (top_1 / bottom) * 100, data[i], series, modifiedSource.length));\n }\n }\n return modifiedSource;\n };\n /**\n * To destroy the Stocastic Indicator.\n * @return {void}\n * @private\n */\n StochasticIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the stochastic indicator\n */\n };\n /**\n * Get module name.\n */\n StochasticIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the indicator.\n */\n return 'StochasticIndicator';\n };\n return StochasticIndicator;\n}(TechnicalAnalysis));\nexport { StochasticIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `BollingerBands` module is used to render bollinger band indicator.\n */\nvar BollingerBands = /** @class */ (function (_super) {\n __extends(BollingerBands, _super);\n function BollingerBands() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the series collection to represent bollinger band\n */\n BollingerBands.prototype.initSeriesCollection = function (indicator, chart) {\n indicator.targetSeries = [];\n var rangeArea = new Series(indicator, 'targetSeries', {}, true);\n rangeArea.type = 'RangeArea';\n if (indicator.bandColor !== 'transparent' && indicator.bandColor !== 'none') {\n this.setSeriesProperties(rangeArea, indicator, 'BollingerBand', indicator.bandColor, 0, chart);\n }\n var signalLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(signalLine, indicator, 'SignalLine', indicator.fill, indicator.width, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n var lowerLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(lowerLine, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n };\n /**\n * Defines the predictions using Bollinger Band Approach\n * @private\n */\n BollingerBands.prototype.initDataSource = function (indicator, chart) {\n var enableBand = indicator.bandColor !== 'transparent' && indicator.bandColor !== 'none';\n var start = enableBand ? 1 : 0;\n var signalCollection = [];\n var upperCollection = [];\n var lowerCollection = [];\n var bandCollection = [];\n var upperSeries = indicator.targetSeries[start + 1];\n var lowerSeries = indicator.targetSeries[start + 2];\n var signalSeries = indicator.targetSeries[start];\n var rangeAreaSeries = enableBand ? indicator.targetSeries[0] : null;\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n var sum = 0;\n var deviationSum = 0;\n var multiplier = indicator.standardDeviation;\n var limit = validData.length;\n var length_1 = Math.round(indicator.period);\n var smaPoints = [];\n var deviations = [];\n var bollingerPoints = [];\n for (var i_1 = 0; i_1 < length_1; i_1++) {\n sum += Number(validData[i_1].close);\n }\n var sma = sum / indicator.period;\n for (var i_2 = 0; i_2 < limit; i_2++) {\n var y = Number(validData[i_2].close);\n if (i_2 >= length_1 - 1 && i_2 < limit) {\n if (i_2 - indicator.period >= 0) {\n var diff = y - Number(validData[i_2 - length_1].close);\n sum = sum + diff;\n sma = sum / (indicator.period);\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2] - deviations[i_2 - length_1];\n }\n else {\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2];\n }\n var range = Math.sqrt(deviationSum / (indicator.period));\n var lowerBand = smaPoints[i_2] - (multiplier * range);\n var upperBand = smaPoints[i_2] + (multiplier * range);\n if (i_2 + 1 === length_1) {\n for (var j_1 = 0; j_1 < length_1 - 1; j_1++) {\n bollingerPoints[j_1] = {\n 'X': validData[j_1].x, 'mb': smaPoints[i_2],\n 'lb': lowerBand, 'ub': upperBand, visible: true\n };\n }\n }\n bollingerPoints[i_2] = {\n 'X': validData[i_2].x, 'mb': smaPoints[i_2],\n 'lb': lowerBand, 'ub': upperBand, visible: true\n };\n }\n else {\n if (i_2 < indicator.period - 1) {\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2];\n }\n }\n }\n var i = -1;\n var j = -1;\n for (var k = 0; k < limit; k++) {\n if (k >= (length_1 - 1)) {\n var ub = 'ub';\n var lb = 'lb';\n var mb = 'mb';\n upperCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][ub], validData[k], upperSeries, upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][lb], validData[k], lowerSeries, lowerCollection.length));\n signalCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][mb], validData[k], signalSeries, signalCollection.length));\n if (enableBand) {\n bandCollection.push(this.getRangePoint(validData[k].x, upperCollection[++i].y, lowerCollection[++j].y, validData[k], rangeAreaSeries, bandCollection.length));\n }\n }\n }\n }\n if (enableBand) {\n this.setSeriesRange(bandCollection, indicator, indicator.targetSeries[0]);\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[start]);\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[start + 1]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[start + 2]);\n };\n /**\n * To destroy the Bollinger Band.\n * @return {void}\n * @private\n */\n BollingerBands.prototype.destroy = function (chart) {\n /**\n * Destroys the bollinger band\n */\n };\n /**\n * Get module name.\n */\n BollingerBands.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'BollingerBandsIndicator';\n };\n return BollingerBands;\n}(TechnicalAnalysis));\nexport { BollingerBands };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `MacdIndicator` module is used to render MACD indicator.\n */\nvar MacdIndicator = /** @class */ (function (_super) {\n __extends(MacdIndicator, _super);\n function MacdIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series to represent the MACD indicator\n * @private\n */\n MacdIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n if (indicator.macdType === 'Line' || indicator.macdType === 'Both') {\n var macdSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(macdSeries, indicator, 'MacdLine', indicator.macdLine.color, indicator.macdLine.width, chart);\n }\n if (indicator.macdType === 'Histogram' || indicator.macdType === 'Both') {\n var histogramSeries = new Series(indicator, 'targetSeries', {}, true);\n histogramSeries.type = 'Column';\n this.setSeriesProperties(histogramSeries, indicator, 'Histogram', indicator.macdPositiveColor, indicator.width, chart);\n }\n };\n /**\n * Defines the predictions using MACD approach\n * @private\n */\n MacdIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var fastPeriod = indicator.fastPeriod;\n var slowPeriod = indicator.slowPeriod;\n var trigger = indicator.period;\n var length = fastPeriod + trigger;\n var macdCollection = [];\n var histogramCollection = [];\n var validData = indicator.points;\n var signalSeries = indicator.targetSeries[0];\n var histogramSeries;\n var macdLineSeries;\n if (indicator.macdType === 'Histogram') {\n histogramSeries = indicator.targetSeries[1];\n }\n else {\n macdLineSeries = indicator.targetSeries[1];\n if (indicator.macdType === 'Both') {\n histogramSeries = indicator.targetSeries[2];\n }\n }\n if (validData && length < validData.length && slowPeriod <= fastPeriod &&\n slowPeriod > 0 && (length - 2) >= 0) {\n var shortEMA = this.calculateEMAValues(slowPeriod, validData, 'close');\n var longEMA = this.calculateEMAValues(fastPeriod, validData, 'close');\n var macdValues = this.getMACDVales(indicator, shortEMA, longEMA);\n macdCollection = this.getMACDPoints(indicator, macdValues, validData, macdLineSeries || signalSeries);\n var signalEMA = this.calculateEMAValues(trigger, macdCollection, 'y');\n signalCollection = this.getSignalPoints(indicator, signalEMA, validData, signalSeries);\n if (histogramSeries) {\n histogramCollection = this.getHistogramPoints(indicator, macdValues, signalEMA, validData, histogramSeries);\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n if (histogramSeries) {\n this.setSeriesRange(histogramCollection, indicator, histogramSeries);\n }\n if (macdLineSeries) {\n this.setSeriesRange(macdCollection, indicator, macdLineSeries);\n }\n };\n /**\n * Calculates the EMA values for the given period\n */\n MacdIndicator.prototype.calculateEMAValues = function (period, validData, field) {\n var sum = 0;\n var initialEMA = 0;\n var emaValues = [];\n var emaPercent = (2 / (period + 1));\n for (var i = 0; i < period; i++) {\n sum += Number(validData[i][field]);\n }\n initialEMA = (sum / period);\n emaValues.push(initialEMA);\n var emaAvg = initialEMA;\n for (var j = period; j < validData.length; j++) {\n emaAvg = (Number(validData[j][field]) - emaAvg) * emaPercent + emaAvg;\n emaValues.push(emaAvg);\n }\n return emaValues;\n };\n /**\n * Defines the MACD Points\n */\n MacdIndicator.prototype.getMACDPoints = function (indicator, macdPoints, validData, series) {\n var macdCollection = [];\n var dataMACDIndex = indicator.fastPeriod - 1;\n var macdIndex = 0;\n while (dataMACDIndex < validData.length) {\n macdCollection.push(this.getDataPoint(validData[dataMACDIndex].x, macdPoints[macdIndex], validData[dataMACDIndex], series, macdCollection.length));\n dataMACDIndex++;\n macdIndex++;\n }\n return macdCollection;\n };\n /**\n * Calculates the signal points\n */\n MacdIndicator.prototype.getSignalPoints = function (indicator, signalEma, validData, series) {\n var dataSignalIndex = indicator.fastPeriod + indicator.period - 2;\n var signalIndex = 0;\n var signalCollection = [];\n while (dataSignalIndex < validData.length) {\n signalCollection.push(this.getDataPoint(validData[dataSignalIndex].x, signalEma[signalIndex], validData[dataSignalIndex], series, signalCollection.length));\n dataSignalIndex++;\n signalIndex++;\n }\n return signalCollection;\n };\n /**\n * Calculates the MACD values\n */\n MacdIndicator.prototype.getMACDVales = function (indicator, shortEma, longEma) {\n var macdPoints = [];\n var diff = indicator.fastPeriod - indicator.slowPeriod;\n for (var i = 0; i < longEma.length; i++) {\n macdPoints.push((shortEma[i + diff] - longEma[i]));\n }\n return macdPoints;\n };\n /**\n * Calculates the Histogram Points\n */\n MacdIndicator.prototype.getHistogramPoints = function (indicator, macdPoints, signalEma, validData, series) {\n var dataHistogramIndex = indicator.fastPeriod + indicator.period - 2;\n var histogramIndex = 0;\n var histogramCollection = [];\n while (dataHistogramIndex < validData.length) {\n histogramCollection.push(this.getDataPoint(validData[dataHistogramIndex].x, macdPoints[histogramIndex + (indicator.period - 1)] - signalEma[histogramIndex], validData[dataHistogramIndex], series, histogramCollection.length, indicator));\n dataHistogramIndex++;\n histogramIndex++;\n }\n return histogramCollection;\n };\n /**\n * To destroy the MACD Indicator.\n * @return {void}\n * @private\n */\n MacdIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the MACD indicator\n */\n };\n /**\n * Get module name.\n */\n MacdIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MacdIndicator';\n };\n return MacdIndicator;\n}(TechnicalAnalysis));\nexport { MacdIndicator };\n","import { Series, Points } from '../series/chart-series';\nimport { findClipRect, RectOption } from '../../common/utils/helper';\n/**\n * `Trendline` module is used to render 6 types of trendlines in chart.\n */\nvar Trendlines = /** @class */ (function () {\n function Trendlines() {\n }\n /**\n * Defines the collection of series, that are used to represent a trendline\n * @private\n */\n Trendlines.prototype.initSeriesCollection = function (trendline, chart) {\n var trendLineSeries = new Series(trendline, 'targetSeries', {}, true);\n if (trendline.type === 'Linear' || trendline.type === 'MovingAverage') {\n trendLineSeries.type = 'Line';\n }\n else {\n trendLineSeries.type = 'Spline';\n }\n this.setSeriesProperties(trendLineSeries, trendline, trendline.type, trendline.fill, trendline.width, chart);\n };\n /**\n * Initializes the properties of the trendline series\n */\n Trendlines.prototype.setSeriesProperties = function (series, trendline, name, fill, width, chart) {\n series.name = trendline.name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || 'blue';\n series.width = width;\n series.clipRectElement = trendline.clipRectElement;\n series.points = [];\n series.enableTooltip = trendline.enableTooltip;\n series.index = trendline.index;\n series.sourceIndex = trendline.sourceIndex;\n series.interior = series.fill;\n series.animation = trendline.animation;\n series.legendShape = 'HorizontalLine';\n series.marker = trendline.marker;\n series.category = 'TrendLine';\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n trendline.targetSeries = series;\n };\n /**\n * Creates the elements of a trendline\n */\n Trendlines.prototype.createTrendLineElements = function (chart, trendline, index, element, clipRectElement) {\n trendline.trendLineElement = element;\n trendline.targetSeries.clipRectElement = clipRectElement;\n trendline.targetSeries.seriesElement = element;\n chart.trendLineElements.appendChild(trendline.trendLineElement);\n };\n /**\n * Defines the data point of trendline\n */\n Trendlines.prototype.getDataPoint = function (x, y, sourcePoint, series, index) {\n var trendPoint = new Points();\n trendPoint.x = x;\n trendPoint.y = y;\n trendPoint.xValue = Number(x);\n trendPoint.color = series.fill;\n trendPoint.index = index;\n trendPoint.yValue = Number(y);\n trendPoint.visible = true;\n series.xMin = Math.min(series.xMin, trendPoint.xValue);\n series.yMin = Math.min(series.yMin, trendPoint.yValue);\n series.xMax = Math.max(series.xMax, trendPoint.xValue);\n series.yMax = Math.max(series.yMax, trendPoint.yValue);\n series.xData.push(trendPoint.xValue);\n return trendPoint;\n };\n /**\n * Finds the slope and intercept of trendline\n */\n Trendlines.prototype.findSlopeIntercept = function (xValues, yValues, trendline, points) {\n var xAvg = 0;\n var yAvg = 0;\n var xyAvg = 0;\n var xxAvg = 0;\n var yyAvg = 0;\n var index = 0;\n var slope = 0;\n var intercept = 0;\n while (index < points.length) {\n xAvg += xValues[index];\n yAvg += yValues[index];\n xyAvg += xValues[index] * yValues[index];\n xxAvg += xValues[index] * xValues[index];\n yyAvg += yValues[index] * yValues[index];\n index++;\n }\n var type = trendline.type;\n if (trendline.intercept && (type === 'Linear' || type === 'Exponential')) {\n intercept = trendline.intercept;\n switch (type) {\n case 'Linear':\n slope = ((xyAvg) - (trendline.intercept * xAvg)) / xxAvg;\n break;\n case 'Exponential':\n slope = ((xyAvg) - (Math.log(Math.abs(trendline.intercept)) * xAvg)) / xxAvg;\n break;\n }\n }\n else {\n slope = ((points.length * xyAvg) - (xAvg * yAvg)) / ((points.length * xxAvg) - (xAvg * xAvg));\n if (type === 'Exponential' || type === 'Power') {\n intercept = Math.exp((yAvg - (slope * xAvg)) / points.length);\n }\n else {\n intercept = (yAvg - (slope * xAvg)) / points.length;\n }\n }\n return { slope: slope, intercept: intercept };\n };\n /**\n * Defines the points to draw the trendlines\n */\n Trendlines.prototype.initDataSource = function (trendline, chart) {\n var points = trendline.points;\n if (points && points.length) {\n //prepare data\n var trendlineSeries = trendline.targetSeries;\n switch (trendline.type) {\n case 'Linear':\n this.setLinearRange(points, trendline, trendlineSeries);\n break;\n case 'Exponential':\n this.setExponentialRange(points, trendline, trendlineSeries);\n break;\n case 'MovingAverage':\n this.setMovingAverageRange(points, trendline, trendlineSeries);\n break;\n case 'Polynomial':\n this.setPolynomialRange(points, trendline, trendlineSeries);\n break;\n case 'Power':\n this.setPowerRange(points, trendline, trendlineSeries);\n break;\n case 'Logarithmic':\n this.setLogarithmicRange(points, trendline, trendlineSeries);\n break;\n }\n if (trendline.type !== 'Linear' && trendline.type !== 'MovingAverage') {\n trendlineSeries.chart.splineSeriesModule.findSplinePoint(trendlineSeries);\n }\n }\n };\n /**\n * Calculation of exponential points\n */\n Trendlines.prototype.setExponentialRange = function (points, trendline, series) {\n var xValue = [];\n var yValue = [];\n var index = 0;\n var slopeIntercept;\n while (index < points.length) {\n var point = points[index];\n xValue.push(point.xValue);\n yValue.push(Math.log(point.yValue));\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValue, yValue, trendline, points);\n series.points = this.getExponentialPoints(trendline, points, xValue, yValue, series, slopeIntercept);\n };\n /**\n * Calculation of logarithmic points\n */\n Trendlines.prototype.setLogarithmicRange = function (points, trendline, series) {\n var xLogValue = [];\n var yLogValue = [];\n var xPointsLgr = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPointsLgr.push(point.xValue);\n xLogValue.push(Math.log(point.xValue));\n yLogValue.push(point.yValue);\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xLogValue, yLogValue, trendline, points);\n series.points = this.getLogarithmicPoints(trendline, points, xPointsLgr, yLogValue, series, slopeIntercept);\n };\n /**\n * Calculation of polynomial points\n */\n Trendlines.prototype.setPolynomialRange = function (points, trendline, series) {\n var xPolyValues = [];\n var yPolyValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPolyValues.push(point.xValue);\n yPolyValues.push(point.yValue);\n index++;\n }\n series.points = this.getPolynomialPoints(trendline, points, xPolyValues, yPolyValues, series);\n };\n /**\n * Calculation of power points\n */\n Trendlines.prototype.setPowerRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var powerPoints = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n powerPoints.push(point.xValue);\n xValues.push(Math.log(point.xValue));\n yValues.push(Math.log(point.yValue));\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getPowerPoints(trendline, points, powerPoints, yValues, series, slopeIntercept);\n };\n /**\n * Calculation of linear points\n */\n Trendlines.prototype.setLinearRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xValues.push(point.xValue);\n yValues.push(point.yValue);\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getLinearPoints(trendline, points, xValues, yValues, series, slopeIntercept);\n };\n /**\n * Calculation of moving average points\n */\n Trendlines.prototype.setMovingAverageRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var xAvgValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xAvgValues.push(point.xValue);\n xValues.push(index + 1);\n yValues.push(point.yValue);\n index++;\n }\n series.points = this.getMovingAveragePoints(trendline, points, xAvgValues, yValues, series);\n };\n /**\n * Calculation of logarithmic points\n */\n Trendlines.prototype.getLogarithmicPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLog) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1Log = xValues[0] - trendline.backwardForecast;\n var y1Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x1Log));\n var x2Log = xValues[midPoint - 1];\n var y2Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x2Log));\n var x3Log = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x3Log));\n pts.push(this.getDataPoint(x1Log, y1Log, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2Log, y2Log, points[midPoint - 1], series, pts.length));\n pts.push(this.getDataPoint(x3Log, y3Log, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Defines the points based on data point\n */\n Trendlines.prototype.getPowerPoints = function (trendline, points, xValues, yValues, series, slopeInterceptPower) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n x1 = x1 > -1 ? x1 : 0;\n var y1 = slopeInterceptPower.intercept * Math.pow(x1, slopeInterceptPower.slope);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptPower.intercept * Math.pow(x2, slopeInterceptPower.slope);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptPower.intercept * Math.pow(x3, slopeInterceptPower.slope);\n pts.push(this.getDataPoint(x1, y1, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2, y2, points[midPoint - 1], series, pts.length));\n pts.push(this.getDataPoint(x3, y3, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Get the polynomial points based on polynomial slopes\n */\n Trendlines.prototype.getPolynomialPoints = function (trendline, points, xValues, yValues, series) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var polynomialOrder = points.length <= trendline.polynomialOrder ? points.length : trendline.polynomialOrder;\n polynomialOrder = Math.max(2, polynomialOrder);\n polynomialOrder = Math.min(6, polynomialOrder);\n trendline.polynomialOrder = polynomialOrder;\n trendline.polynomialSlopes = [];\n trendline.polynomialSlopes.length = trendline.polynomialOrder + 1;\n var index = 0;\n while (index < xValues.length) {\n var xVal = xValues[index];\n var yVal = yValues[index];\n var subIndex = 0;\n while (subIndex <= trendline.polynomialOrder) {\n if (!trendline.polynomialSlopes[subIndex]) {\n trendline.polynomialSlopes[subIndex] = 0;\n }\n trendline.polynomialSlopes[subIndex] += Math.pow(xVal, subIndex) * yVal;\n ++subIndex;\n }\n index++;\n }\n var numArray = [];\n numArray.length = 1 + 2 * trendline.polynomialOrder;\n var matrix = [];\n matrix.length = trendline.polynomialOrder + 1;\n var newIndex = 0;\n while (newIndex < (trendline.polynomialOrder + 1)) {\n matrix[newIndex] = [];\n matrix[newIndex].length = 3;\n newIndex++;\n }\n var nIndex = 0;\n var num1 = 0;\n while (nIndex < xValues.length) {\n var d = xValues[nIndex];\n var num2 = 1.0;\n var nIndex2 = 0;\n while (nIndex2 < numArray.length) {\n if (!numArray[nIndex2]) {\n numArray[nIndex2] = 0;\n }\n numArray[nIndex2] += num2;\n num2 *= d;\n ++num1;\n ++nIndex2;\n }\n ++nIndex;\n }\n var nnIndex = 0;\n while (nnIndex <= trendline.polynomialOrder) {\n var nnIndex2 = 0;\n while (nnIndex2 <= trendline.polynomialOrder) {\n matrix[nnIndex][nnIndex2] = numArray[nnIndex + nnIndex2];\n ++nnIndex2;\n }\n ++nnIndex;\n }\n if (!this.gaussJordanElimination(matrix, trendline.polynomialSlopes)) {\n trendline.polynomialSlopes = null;\n }\n pts = this.getPoints(trendline, points, xValues, yValues, series);\n return pts;\n };\n /**\n * Defines the moving average points\n */\n Trendlines.prototype.getMovingAveragePoints = function (trendline, points, xValues, yValues, series) {\n var pts = [];\n var period = trendline.period >= points.length ? points.length - 1 : trendline.period;\n period = Math.max(2, period);\n var index = 0;\n var y;\n var x;\n var count;\n var nullCount;\n while (index < points.length - 1) {\n y = count = nullCount = 0;\n for (var j = index; count < period; j++) {\n count++;\n if (!yValues[j]) {\n nullCount++;\n }\n y += yValues[j];\n }\n y = period - nullCount <= 0 ? null : y / (period - nullCount);\n if (y && !isNaN(y)) {\n x = xValues[period - 1 + index];\n pts.push(this.getDataPoint(x, y, points[period - 1 + index], series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Defines the linear points\n */\n Trendlines.prototype.getLinearPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLinear) {\n var pts = [];\n var x1Linear = xValues[0] - trendline.backwardForecast;\n var y1Linear = slopeInterceptLinear.slope * x1Linear + slopeInterceptLinear.intercept;\n var x2Linear = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y2Linear = slopeInterceptLinear.slope * x2Linear + slopeInterceptLinear.intercept;\n pts.push(this.getDataPoint(x1Linear, y1Linear, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2Linear, y2Linear, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Defines the exponential points\n */\n Trendlines.prototype.getExponentialPoints = function (trendline, points, xValues, yValues, series, slopeInterceptExp) {\n var midPoint = Math.round((points.length / 2));\n var ptsExp = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n var y1 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x1);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x2);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x3);\n ptsExp.push(this.getDataPoint(x1, y1, points[0], series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x2, y2, points[midPoint - 1], series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x3, y3, points[points.length - 1], series, ptsExp.length));\n return ptsExp;\n };\n /**\n * Defines the points based on data point\n */\n Trendlines.prototype.getPoints = function (trendline, points, xValues, yValues, series) {\n var midPoint = Math.round((points.length / 2));\n var polynomialSlopes = trendline.polynomialSlopes;\n var pts = [];\n var x1 = 1;\n var index = 1;\n var xValue;\n var yValue;\n while (index <= polynomialSlopes.length) {\n if (index === 1) {\n xValue = xValues[0] - trendline.backwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[0], series, pts.length));\n }\n else if (index === polynomialSlopes.length) {\n xValue = xValues[points.length - 1] + trendline.forwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[points.length - 1], series, pts.length));\n }\n else {\n x1 += (points.length + trendline.forwardForecast) / polynomialSlopes.length;\n xValue = xValues[parseInt(x1.toString(), 10) - 1];\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[parseInt(x1.toString(), 10) - 1], series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Defines the polynomial value of y\n */\n Trendlines.prototype.getPolynomialYValue = function (slopes, x) {\n var sum = 0;\n var index = 0;\n while (index < slopes.length) {\n sum += slopes[index] * Math.pow(x, index);\n index++;\n }\n return sum;\n };\n /**\n * Defines the gauss jordan elimination\n */\n Trendlines.prototype.gaussJordanElimination = function (matrix, polynomialSlopes) {\n var length = matrix.length;\n var numArray1 = [];\n var numArray2 = [];\n var numArray3 = [];\n numArray1.length = length;\n numArray2.length = length;\n numArray3.length = length;\n var index = 0;\n while (index < length) {\n numArray3[index] = 0;\n ++index;\n }\n var index1 = 0;\n while (index1 < length) {\n var num1 = 0;\n var index2 = 0;\n var index3 = 0;\n var index4 = 0;\n while (index4 < length) {\n if (numArray3[index4] !== 1) {\n var index5 = 0;\n while (index5 < length) {\n if (numArray3[index5] === 0 && Math.abs(matrix[index4][index5]) >= num1) {\n num1 = Math.abs(matrix[index4][index5]);\n index2 = index4;\n index3 = index5;\n }\n ++index5;\n }\n }\n ++index4;\n }\n ++numArray3[index3];\n if (index2 !== index3) {\n var index4_1 = 0;\n while (index4_1 < length) {\n var num2 = matrix[index2][index4_1];\n matrix[index2][index4_1] = matrix[index3][index4_1];\n matrix[index3][index4_1] = num2;\n ++index4_1;\n }\n var num3 = polynomialSlopes[index2];\n polynomialSlopes[index2] = polynomialSlopes[index3];\n polynomialSlopes[index3] = num3;\n }\n numArray2[index1] = index2;\n numArray1[index1] = index3;\n if (matrix[index3][index3] === 0.0) {\n return false;\n }\n var num4 = 1.0 / matrix[index3][index3];\n matrix[index3][index3] = 1.0;\n var iindex4 = 0;\n while (iindex4 < length) {\n matrix[index3][iindex4] *= num4;\n ++iindex4;\n }\n polynomialSlopes[index3] *= num4;\n var iandex4 = 0;\n while (iandex4 < length) {\n if (iandex4 !== index3) {\n var num2 = matrix[iandex4][index3];\n matrix[iandex4][index3] = 0.0;\n var index5 = 0;\n while (index5 < length) {\n matrix[iandex4][index5] -= matrix[index3][index5] * num2;\n ++index5;\n }\n polynomialSlopes[iandex4] -= polynomialSlopes[index3] * num2;\n }\n ++iandex4;\n }\n ++index1;\n }\n var iindex1 = length - 1;\n while (iindex1 >= 0) {\n if (numArray2[iindex1] !== numArray1[iindex1]) {\n var iindex2 = 0;\n while (iindex2 < length) {\n var num = matrix[iindex2][numArray2[iindex1]];\n matrix[iindex2][numArray2[iindex1]] = matrix[iindex2][numArray1[iindex1]];\n matrix[iindex2][numArray1[iindex1]] = num;\n ++iindex2;\n }\n }\n --iindex1;\n }\n return true;\n };\n /**\n * Defines the trendline elements\n */\n Trendlines.prototype.getTrendLineElements = function (series, chart) {\n findClipRect(series);\n var clipRect = series.clipRect;\n var clipRectElement = chart.renderer.drawClipPath(new RectOption(chart.element.id + '_ChartTrendlineClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height,\n }));\n var element;\n element = chart.renderer.createGroup({\n 'id': chart.element.id + 'TrendlineSeriesGroup' + series.index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartTrendlineClipRect_' + series.index + ')'\n });\n //defines the clip rect element\n element.appendChild(clipRectElement);\n for (var _i = 0, _a = series.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n this.createTrendLineElements(chart, trendline, trendline.index, element, clipRectElement);\n }\n };\n /**\n * To destroy the trendline\n */\n Trendlines.prototype.destroy = function (chart) {\n /**\n * Destroys the Linear Trendline\n */\n };\n /**\n * Get module name\n */\n Trendlines.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'TrendLine';\n };\n return Trendlines;\n}());\nexport { Trendlines };\n","import { Animation, Browser } from '@syncfusion/ej2-base';\nimport { measureText, findDirection, textElement, getValueXByPoint, stopTimer, getValueYByPoint, TextOption, Rect, ChartLocation, PathOption, withInBounds, removeElement } from '../../common/utils/helper';\n/**\n * `Crosshair` module is used to render the crosshair for chart.\n */\nvar Crosshair = /** @class */ (function () {\n /**\n * Constructor for crosshair module.\n * @private\n */\n function Crosshair(chart) {\n this.arrowLocation = new ChartLocation(0, 0);\n this.rx = 2;\n this.ry = 2;\n this.chart = chart;\n this.elementID = this.chart.element.id;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n Crosshair.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n this.chart.on('tapHold', this.longPress, this);\n };\n Crosshair.prototype.mouseUpHandler = function () {\n if (this.chart.startMove) {\n this.removeCrosshair(2000);\n }\n };\n Crosshair.prototype.mouseLeaveHandler = function () {\n this.removeCrosshair(1000);\n };\n Crosshair.prototype.mouseMoveHandler = function (event) {\n var chart = this.chart;\n if (event.type === 'touchmove' && (Browser.isIos || Browser.isIos7) && chart.startMove && event.preventDefault) {\n event.preventDefault();\n }\n // Tooltip for chart series.\n if (!chart.disableTrackTooltip) {\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n if (chart.startMove || !chart.isTouch) {\n this.crosshair();\n }\n }\n else {\n this.removeCrosshair(1000);\n }\n }\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Crosshair.prototype.longPress = function () {\n var chart = this.chart;\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n this.crosshair();\n }\n return false;\n };\n /**\n * Renders the crosshair.\n * @return {void}\n */\n Crosshair.prototype.crosshair = function () {\n var chart = this.chart;\n var horizontalCross = '';\n var verticalCross = '';\n var options;\n var crosshair = chart.crosshair;\n var chartRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var crossGroup = document.getElementById(this.elementID + '_UserInteraction');\n this.stopAnimation();\n if (chart.tooltip.enable && !withInBounds(chart.tooltipModule.valueX, chart.tooltipModule.valueY, chartRect)) {\n return null;\n }\n this.valueX = chart.tooltip.enable ? chart.tooltipModule.valueX : chart.mouseX;\n this.valueY = chart.tooltip.enable ? chart.tooltipModule.valueY : chart.mouseY;\n crossGroup.setAttribute('opacity', '1');\n if (crosshair.lineType === 'Both' || crosshair.lineType === 'Horizontal') {\n horizontalCross += 'M ' + chartRect.x + ' ' + this.valueY +\n ' L ' + (chartRect.x + chartRect.width) + ' ' + this.valueY;\n }\n if (crosshair.lineType === 'Both' || crosshair.lineType === 'Vertical') {\n verticalCross += 'M ' + this.valueX + ' ' + chartRect.y +\n ' L ' + this.valueX + ' ' + (chartRect.y + chartRect.height);\n }\n if (crossGroup.childNodes.length === 0) {\n var axisTooltipGroup = chart.renderer.createGroup({ 'id': this.elementID + '_crosshair_axis' });\n options = new PathOption(this.elementID + '_HorizontalLine', 'none', crosshair.line.width, crosshair.line.color || chart.themeStyle.crosshairLine, 1, null, horizontalCross);\n this.renderCrosshairLine(options, crossGroup);\n options.d = verticalCross;\n options.id = this.elementID + '_VerticalLine';\n this.renderCrosshairLine(options, crossGroup);\n crossGroup.appendChild(axisTooltipGroup);\n this.renderAxisTooltip(chart, chartRect, crossGroup.lastChild);\n }\n else {\n document.getElementById(this.elementID + '_HorizontalLine').setAttribute('d', horizontalCross);\n document.getElementById(this.elementID + '_VerticalLine').setAttribute('d', verticalCross);\n this.renderAxisTooltip(chart, chartRect, crossGroup.lastChild);\n }\n };\n Crosshair.prototype.renderCrosshairLine = function (options, crossGroup) {\n var htmlObject = this.chart.renderer.drawPath(options);\n crossGroup.appendChild(htmlObject);\n };\n Crosshair.prototype.renderAxisTooltip = function (chart, chartRect, axisGroup) {\n var axis;\n var text;\n var rect;\n var pathElement;\n var textElem;\n var options;\n var padding = 5;\n var direction;\n var axisRect;\n for (var k = 0, length_1 = chart.axisCollections.length; k < length_1; k++) {\n axis = chart.axisCollections[k];\n axisRect = !axis.placeNextToAxisLine ? axis.rect : axis.updatedRect;\n if (axis.crosshairTooltip.enable) {\n if ((this.valueX <= (axisRect.x + axisRect.width) && axisRect.x <= this.valueX) ||\n (this.valueY <= (axisRect.y + axisRect.height) && axisRect.y <= this.valueY)) {\n pathElement = document.getElementById(this.elementID + '_axis_tooltip_' + k);\n textElem = document.getElementById(this.elementID + '_axis_tooltip_text_' + k);\n text = this.getAxisText(axis);\n if (!text) {\n continue;\n }\n rect = this.tooltipLocation(text, axis, chartRect, axisRect);\n if (pathElement === null) {\n pathElement = chart.renderer.drawPath({\n 'id': this.elementID + '_axis_tooltip_' + k,\n 'fill': axis.crosshairTooltip.fill || chart.themeStyle.crosshairFill\n });\n axisGroup.appendChild(pathElement);\n options = new TextOption(this.elementID + '_axis_tooltip_text_' + k, 0, 0, 'start', text);\n textElem = textElement(options, axis.crosshairTooltip.textStyle, axis.crosshairTooltip.textStyle.color || chart.themeStyle.crosshairLabel, axisGroup);\n }\n direction = findDirection(this.rx, this.ry, rect, this.arrowLocation, 10, this.isTop, this.isBottom, this.isLeft, this.valueX, this.valueY);\n pathElement.setAttribute('d', direction);\n textElem.textContent = text;\n textElem.setAttribute('x', (rect.x + padding).toString());\n textElem.setAttribute('y', (rect.y + padding + 3 * this.elementSize.height / 4).toString());\n }\n else {\n removeElement(this.elementID + '_axis_tooltip_' + k);\n removeElement(this.elementID + '_axis_tooltip_text_' + k);\n }\n }\n }\n };\n Crosshair.prototype.getAxisText = function (axis) {\n var value;\n this.isBottom = false;\n this.isTop = false;\n this.isLeft = false;\n this.isRight = false;\n var labelValue = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks')\n ? 0.5 : 0;\n if (axis.orientation === 'Horizontal') {\n value = getValueXByPoint(Math.abs(this.valueX - axis.rect.x), axis.rect.width, axis) + labelValue;\n this.isBottom = !axis.opposedPosition;\n this.isTop = axis.opposedPosition;\n }\n else {\n value = getValueYByPoint(Math.abs(this.valueY - axis.rect.y), axis.rect.height, axis) + labelValue;\n this.isRight = axis.opposedPosition;\n this.isLeft = !axis.opposedPosition;\n }\n if (axis.valueType === 'DateTime') {\n return axis.format(new Date(value));\n }\n else if (axis.valueType === 'Category') {\n return axis.labels[Math.floor(value)];\n }\n else if (axis.valueType === 'Logarithmic') {\n return value = axis.format(Math.pow(axis.logBase, value));\n }\n else {\n var customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n return customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(value)) : axis.format(value);\n }\n };\n Crosshair.prototype.tooltipLocation = function (text, axis, bounds, axisRect) {\n var isBottom = false;\n var isLeft = false;\n var padding = 5;\n var arrowPadding = 10;\n var tooltipRect;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n var islabelInside = axis.labelPosition === 'Inside';\n var scrollBarHeight = axis.zoomingScrollBar && axis.zoomingScrollBar.svgObject ? axis.scrollBarHeight : 0;\n this.elementSize = measureText(text, axis.crosshairTooltip.textStyle);\n if (axis.orientation === 'Horizontal') {\n var yLocation = islabelInside ? axisRect.y - this.elementSize.height - (padding * 2 + arrowPadding) :\n axisRect.y + scrollBarHeight;\n var height = islabelInside ? axisRect.y - this.elementSize.height - arrowPadding : axisRect.y + arrowPadding;\n this.arrowLocation = new ChartLocation(this.valueX, yLocation);\n tooltipRect = new Rect((this.valueX - (this.elementSize.width / 2) - padding), height + (!islabelInside ? scrollBarHeight : 0), this.elementSize.width + padding * 2, this.elementSize.height + padding * 2);\n if (axis.opposedPosition) {\n tooltipRect.y = islabelInside ? axisRect.y : axisRect.y -\n (this.elementSize.height + padding * 2 + arrowPadding) - scrollBarHeight;\n }\n if (tooltipRect.x < boundsX) {\n tooltipRect.x = boundsX;\n }\n if (tooltipRect.x + tooltipRect.width > boundsX + bounds.width) {\n tooltipRect.x -= ((tooltipRect.x + tooltipRect.width) - (boundsX + bounds.width));\n }\n if (this.arrowLocation.x + arrowPadding / 2 > tooltipRect.x + tooltipRect.width - this.rx) {\n this.arrowLocation.x = tooltipRect.x + tooltipRect.width - this.rx - arrowPadding / 2;\n }\n if (this.arrowLocation.x - arrowPadding / 2 < tooltipRect.x + this.rx) {\n this.arrowLocation.x = tooltipRect.x + this.rx + arrowPadding / 2;\n }\n }\n else {\n scrollBarHeight = scrollBarHeight * (axis.opposedPosition ? 1 : -1);\n this.arrowLocation = new ChartLocation(axisRect.x, this.valueY);\n var width = islabelInside ? axisRect.x - scrollBarHeight :\n axisRect.x - (this.elementSize.width) - (padding * 2 + arrowPadding);\n tooltipRect = new Rect(width + scrollBarHeight, this.valueY - (this.elementSize.height / 2) - padding, this.elementSize.width + (padding * 2), this.elementSize.height + padding * 2);\n if (axis.opposedPosition) {\n tooltipRect.x = islabelInside ? axisRect.x - this.elementSize.width - arrowPadding :\n axisRect.x + arrowPadding + scrollBarHeight;\n if ((tooltipRect.x + tooltipRect.width) > this.chart.availableSize.width) {\n this.arrowLocation.x -= ((tooltipRect.x + tooltipRect.width) - this.chart.availableSize.width);\n tooltipRect.x -= ((tooltipRect.x + tooltipRect.width) - this.chart.availableSize.width);\n }\n }\n else {\n if (tooltipRect.x < 0) {\n this.arrowLocation.x -= tooltipRect.x;\n tooltipRect.x = 0;\n }\n }\n if (tooltipRect.y < boundsY) {\n tooltipRect.y = boundsY;\n }\n if (tooltipRect.y + tooltipRect.height >= boundsY + bounds.height) {\n tooltipRect.y -= ((tooltipRect.y + tooltipRect.height) - (boundsY + bounds.height));\n }\n if (this.arrowLocation.y + arrowPadding / 2 > tooltipRect.y + tooltipRect.height - this.ry) {\n this.arrowLocation.y = tooltipRect.y + tooltipRect.height - this.ry - arrowPadding / 2;\n }\n if (this.arrowLocation.y - arrowPadding / 2 < tooltipRect.y + this.ry) {\n this.arrowLocation.y = tooltipRect.y + this.ry + arrowPadding / 2;\n }\n }\n return tooltipRect;\n };\n Crosshair.prototype.stopAnimation = function () {\n stopTimer(this.crosshairInterval);\n };\n /**\n * Removes the crosshair on mouse leave.\n * @return {void}\n * @private\n */\n Crosshair.prototype.removeCrosshair = function (duration) {\n var chart = this.chart;\n var crosshair = document.getElementById(this.elementID + '_UserInteraction');\n this.stopAnimation();\n if (crosshair && crosshair.getAttribute('opacity') !== '0') {\n this.crosshairInterval = setTimeout(function () {\n new Animation({}).animate(crosshair, {\n duration: 200,\n progress: function (args) {\n // crosshair.removeAttribute('e-animate');\n crosshair.style.animation = '';\n crosshair.setAttribute('opacity', (1 - (args.timeStamp / args.duration)).toString());\n },\n end: function (model) {\n crosshair.setAttribute('opacity', '0');\n chart.startMove = false;\n if (chart.tooltipModule) {\n chart.tooltipModule.valueX = null;\n chart.tooltipModule.valueY = null;\n }\n }\n });\n }, duration);\n }\n };\n /**\n * Get module name.\n */\n Crosshair.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Crosshair';\n };\n /**\n * To destroy the crosshair.\n * @return {void}\n * @private\n */\n Crosshair.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Crosshair;\n}());\nexport { Crosshair };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NotifyPropertyChanges, Property, Event, Complex } from '@syncfusion/ej2-base';\nimport { SvgRenderer, extend, compile as templateComplier, Component } from '@syncfusion/ej2-base';\nimport { ChildProperty, remove, Browser, Animation } from '@syncfusion/ej2-base';\nimport { getTooltipThemeColor } from './interface';\nimport { Size, Rect, Side, measureText, getElement, findDirection, drawSymbol, textElement } from './helper';\nimport { removeElement, TextOption, TooltipLocation, PathOption } from './helper';\n/**\n * Configures the fonts in charts.\n * @private\n */\nvar TextStyle = /** @class */ (function (_super) {\n __extends(TextStyle, _super);\n function TextStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], TextStyle.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], TextStyle.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], TextStyle.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], TextStyle.prototype, \"opacity\", void 0);\n return TextStyle;\n}(ChildProperty));\nexport { TextStyle };\n/**\n * Configures the borders in the chart.\n * @private\n */\nvar TooltipBorder = /** @class */ (function (_super) {\n __extends(TooltipBorder, _super);\n function TooltipBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], TooltipBorder.prototype, \"width\", void 0);\n return TooltipBorder;\n}(ChildProperty));\nexport { TooltipBorder };\n/**\n * Configures the borders in the chart.\n * @private\n */\nvar AreaBounds = /** @class */ (function (_super) {\n __extends(AreaBounds, _super);\n function AreaBounds() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"y\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"height\", void 0);\n return AreaBounds;\n}(ChildProperty));\nexport { AreaBounds };\n/**\n * Configures the borders in the chart.\n * @private\n */\nvar ToolLocation = /** @class */ (function (_super) {\n __extends(ToolLocation, _super);\n function ToolLocation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"y\", void 0);\n return ToolLocation;\n}(ChildProperty));\nexport { ToolLocation };\n/**\n * Represents the Tooltip control.\n * ```html\n *
\n * \n * ```\n * @private\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler.\n * @private.\n */\n Tooltip.prototype.preRender = function () {\n this.initPrivateVariable();\n this.removeSVG();\n this.createTooltipElement();\n };\n Tooltip.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.themeStyle = getTooltipThemeColor(this.theme);\n this.formattedText = [];\n this.padding = 5;\n this.isFirst = true;\n this.markerPoint = [];\n };\n Tooltip.prototype.removeSVG = function () {\n var svgObject = document.getElementById(this.element.id + '_svg');\n var templateObject = document.getElementById(this.element.id + 'parent_template');\n if (svgObject && svgObject.parentNode) {\n remove(svgObject);\n }\n if (templateObject && templateObject.parentNode) {\n remove(templateObject);\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Tooltip.prototype.render = function () {\n this.fadeOuted = false;\n if (!this.template) {\n this.renderText(this.isFirst);\n var argsData = {\n cancel: false, name: 'tooltipRender', tooltip: this\n };\n this.trigger('tooltipRender', argsData);\n var markerSide = this.renderTooltipElement(this.areaBounds, this.location);\n this.drawMarker(markerSide.isBottom, markerSide.isRight, this.markerSize);\n }\n else {\n this.updateTemplateFn();\n this.createTemplate(this.areaBounds, this.location);\n }\n this.trigger('loaded', { tooltip: this });\n var element = document.getElementById('chartmeasuretext');\n if (element) {\n if (typeof element.remove === 'function') {\n element.remove();\n }\n else {\n element.parentNode.removeChild(element);\n }\n }\n };\n Tooltip.prototype.createTooltipElement = function () {\n this.textElements = [];\n if (!this.template || this.shared) {\n // SVG element for tooltip\n var svgObject = this.renderer.createSvg({ id: this.element.id + '_svg' });\n this.element.appendChild(svgObject);\n // Group to hold text and path.\n var groupElement = this.renderer.createGroup({ id: this.element.id + '_group' });\n svgObject.appendChild(groupElement);\n var pathElement = this.renderer.drawPath({\n 'id': this.element.id + '_path', 'stroke-width': this.border.width,\n 'fill': this.fill || this.themeStyle.tooltipFill, 'opacity': this.opacity,\n 'stroke': this.border.color\n });\n groupElement.appendChild(pathElement);\n }\n };\n Tooltip.prototype.drawMarker = function (isBottom, isRight, size) {\n if (this.shapes.length <= 0) {\n return null;\n }\n var shapeOption;\n var count = 0;\n var markerGroup = this.renderer.createGroup({ id: this.element.id + '_trackball_group' });\n var groupElement = getElement(this.element.id + '_group');\n var x = (this.marginX * 2) + (size / 2) + (isRight ? this.arrowPadding : 0);\n for (var _i = 0, _a = this.shapes; _i < _a.length; _i++) {\n var shape = _a[_i];\n shapeOption = new PathOption(this.element.id + '_Trackball_' + count, this.palette[count], 1, '#cccccc', 1, null);\n markerGroup.appendChild(drawSymbol(new TooltipLocation(x, this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : 0)), shape, new Size(size, size), '', shapeOption, null));\n count++;\n }\n groupElement.appendChild(markerGroup);\n };\n Tooltip.prototype.renderTooltipElement = function (areaBounds, location) {\n var tooltipDiv = getElement(this.element.id);\n var arrowLocation = new TooltipLocation(0, 0);\n var tipLocation = new TooltipLocation(0, 0);\n var textHeights;\n var svgObject = getElement(this.element.id + '_svg');\n var groupElement = getElement(this.element.id + '_group');\n var pathElement = getElement(this.element.id + '_path');\n var rect;\n var isTop = false;\n var isLeft = false;\n var isBottom = false;\n var x = 0;\n var y = 0;\n this.tipRadius = 1;\n if (this.header !== '') {\n this.elementSize.height += this.marginY;\n }\n if (this.content.length > 1) {\n rect = this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y);\n isTop = true;\n }\n else {\n rect = this.tooltipLocation(areaBounds, location, arrowLocation, tipLocation);\n if (!this.inverted) {\n isTop = (rect.y < (location.y + this.clipBounds.y));\n isBottom = !isTop;\n y = (isTop ? 0 : this.arrowPadding);\n }\n else {\n isLeft = (rect.x < (location.x + this.clipBounds.x));\n x = (isLeft ? 0 : this.arrowPadding);\n }\n }\n if (this.header !== '') {\n var headerSize = measureText(this.header, this.textStyle).height + (this.marginY * 2) +\n (isBottom ? this.arrowPadding : 0); //header padding;\n var xLength = (this.marginX * 3) + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0);\n var direction = 'M ' + xLength + ' ' + headerSize +\n 'L ' + (rect.width + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0) - (this.marginX * 2)) +\n ' ' + headerSize;\n var pathElement_1 = this.renderer.drawPath({\n 'id': this.element.id + '_header_path', 'stroke-width': 1,\n 'fill': null, 'opacity': 0.8, 'stroke': this.themeStyle.tooltipHeaderLine, 'd': direction\n });\n groupElement.appendChild(pathElement_1);\n }\n var start = this.border.width / 2;\n var pointRect = new Rect(start + x, start + y, rect.width - start, rect.height - start);\n groupElement.setAttribute('opacity', '1');\n if (this.enableAnimation && !this.shared && !this.isFirst) {\n this.animateTooltipDiv(tooltipDiv, rect);\n }\n else {\n this.updateDiv(tooltipDiv, rect.x, rect.y);\n }\n svgObject.setAttribute('height', (rect.height + this.border.width + (!((!this.inverted)) ? 0 : this.arrowPadding)).toString());\n svgObject.setAttribute('width', (rect.width + this.border.width + (((!this.inverted)) ? 0 : this.arrowPadding)).toString());\n svgObject.setAttribute('opacity', '1');\n pathElement.setAttribute('d', findDirection(this.rx, this.ry, pointRect, arrowLocation, this.arrowPadding, isTop, isBottom, isLeft, tipLocation.x, tipLocation.y, this.tipRadius));\n if (this.enableShadow) {\n pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#chart_shadow_tooltip)');\n var shadow = '';\n shadow += '';\n shadow += '';\n var defElement = this.renderer.createDefs();\n defElement.setAttribute('id', 'SVG_tooltip_definition');\n groupElement.appendChild(defElement);\n defElement.innerHTML = shadow;\n }\n pathElement.setAttribute('stroke', this.border.color);\n this.changeText(new TooltipLocation(x, y), isBottom, !isLeft && !isTop && !isBottom, rect);\n return new Side(isBottom, !isLeft && !isTop && !isBottom);\n };\n Tooltip.prototype.changeText = function (point, isBottom, isRight, rect) {\n var element = document.getElementById(this.element.id + '_text');\n if (isBottom) {\n element.setAttribute('transform', 'translate(0,' + this.arrowPadding + ')');\n }\n if (isRight) {\n element.setAttribute('transform', 'translate(' + this.arrowPadding + ' 0)');\n }\n };\n Tooltip.prototype.findFormattedText = function () {\n this.formattedText = [];\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n this.formattedText = this.formattedText.concat(this.header);\n }\n this.formattedText = this.formattedText.concat(this.content);\n };\n Tooltip.prototype.renderText = function (isRender) {\n var height = 0;\n var width = 0; // Padding for text;\n var subWidth = 0;\n var size;\n var lines;\n var key = 'properties';\n var font = extend({}, this.textStyle, null, true)[key];\n var groupElement = getElement(this.element.id + '_group');\n var tspanElement;\n var tspanStyle = '';\n var line;\n var tspanOption;\n this.findFormattedText();\n var headerContent = this.header.replace(//g, '').replace(/<\\/b>/g, '').trim();\n var headerSpace = (headerContent !== '') ? this.marginY : 0;\n var isRow = true;\n var isColumn = true;\n this.markerPoint = [];\n var markerSize = (this.shapes.length > 0) ? 10 : 0;\n var markerPadding = (this.shapes.length > 0) ? 5 : 0;\n var spaceWidth = 4;\n var fontSize = '13px';\n var dy = (22 / parseFloat(fontSize)) * (parseFloat(font.size));\n if (!isRender) {\n removeElement(this.element.id + '_text');\n removeElement(this.element.id + '_header_path');\n removeElement(this.element.id + '_trackball_group');\n removeElement('SVG_tooltip_definition');\n }\n var options = new TextOption(this.element.id + '_text', this.marginX * 2, (this.marginY * 2 + this.padding * 2 + (this.marginY === 2 ? 3 : 0)), 'start', '');\n var parentElement = textElement(options, font, null, groupElement);\n for (var k = 0, pointsLength = this.formattedText.length; k < pointsLength; k++) {\n var textCollection = this.formattedText[k].replace(/<(b|strong)>/g, '')\n .replace(/<\\/(b|strong)>/g, '')\n .split(//g);\n size = measureText(this.formattedText[k], font);\n if ((k !== 0) || (headerContent === '')) {\n this.markerPoint.push((headerContent !== '' ? (this.marginY) : 0) + options.y + height);\n }\n for (var i = 0, len = textCollection.length; i < len; i++) {\n lines = textCollection[i].replace(//g, '
').replace(/<\\/b>/g, '
').split('
');\n subWidth = 0;\n isColumn = true;\n height += dy;\n for (var k_1 = 0, len_1 = lines.length; k_1 < len_1; k_1++) {\n line = lines[k_1];\n if (line.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n subWidth += spaceWidth;\n if (isColumn && !isRow) {\n tspanOption = { x: (this.marginX * 2) + (markerSize + markerPadding),\n dy: dy + ((isColumn) ? headerSpace : 0), fill: '' };\n headerSpace = null;\n }\n else {\n if (isRow && isColumn) {\n tspanOption = { x: (headerContent === '') ? ((this.marginX * 2) + (markerSize + markerPadding))\n : (this.marginX * 2) };\n }\n else {\n tspanOption = {};\n }\n }\n isColumn = false;\n tspanElement = this.renderer.createTSpan(tspanOption, '');\n parentElement.appendChild(tspanElement);\n if (line.indexOf('') > -1) {\n tspanStyle = 'font-weight:bold';\n font.fontWeight = 'bold';\n (tspanElement).setAttribute('fill', this.textStyle.color || this.themeStyle.tooltipBoldLabel);\n }\n else {\n tspanStyle = '';\n font.fontWeight = 'Normal';\n (tspanElement).setAttribute('fill', this.textStyle.color || this.themeStyle.tooltipLightLabel);\n }\n (tspanElement).textContent = line = line.replace(/<[a-zA-Z\\/](.|\\n)*?>/g, '');\n subWidth += measureText(line, font).width;\n if (tspanStyle !== '') {\n tspanElement.setAttribute('style', tspanStyle);\n }\n isRow = false;\n }\n }\n subWidth -= spaceWidth;\n width = Math.max(width, subWidth);\n }\n }\n this.elementSize = new Size(width + (width > 0 ? (2 * this.marginX) : 0), height);\n this.elementSize.width += (markerSize + markerPadding); // marker size + marker Spacing\n var element = (parentElement.childNodes[0]);\n if (headerContent !== '' && element) {\n font.fontWeight = 'bold';\n var width_1 = (this.elementSize.width + (2 * this.padding)) / 2 - measureText(headerContent, font).width / 2;\n element.setAttribute('x', width_1.toString());\n }\n };\n Tooltip.prototype.createTemplate = function (areaBounds, location) {\n var argsData = { cancel: false, name: 'tooltipRender', tooltip: this };\n this.trigger('tooltipRender', argsData);\n var parent = document.getElementById(this.element.id);\n var firstElement = parent.firstElementChild;\n if (firstElement) {\n if (typeof firstElement.remove === 'function') {\n firstElement.remove();\n }\n else {\n firstElement.parentNode.removeChild(firstElement);\n }\n }\n if (!argsData.cancel) {\n var elem = this.createElement('div', { id: this.element.id + 'parent_template' });\n var templateElement = Array.prototype.slice.call(this.templateFn(this.data));\n var len = templateElement.length;\n for (var i = 0; i < len; i++) {\n elem.appendChild(templateElement[i]);\n }\n parent.appendChild(elem);\n var rect = this.element.getBoundingClientRect();\n this.padding = 0;\n this.elementSize = new Size(rect.width, rect.height);\n var tooltipRect = this.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n if (this.enableAnimation && !this.shared && !this.isFirst) {\n this.animateTooltipDiv(this.element, tooltipRect);\n }\n else {\n this.updateDiv(this.element, tooltipRect.x, tooltipRect.y);\n }\n }\n else {\n getElement(this.element.id + '_tooltip').remove();\n }\n };\n Tooltip.prototype.sharedTooltipLocation = function (bounds, x, y) {\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var tooltipRect = new Rect(x + 2 * this.padding, y - height - this.padding, width, height);\n if (tooltipRect.y < bounds.y) {\n tooltipRect.y += (tooltipRect.height + 2 * this.padding);\n }\n if (tooltipRect.x + tooltipRect.width > bounds.x + bounds.width) {\n tooltipRect.x -= (tooltipRect.width + 4 * this.padding);\n }\n return tooltipRect;\n };\n Tooltip.prototype.tooltipLocation = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var markerHeight = this.offset;\n var clipX = this.clipBounds.x;\n var clipY = this.clipBounds.y;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n if (!this.inverted) {\n location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if (location.y < boundsY || (this.isNegative)) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n }\n if (location.y + height + this.arrowPadding > boundsY + bounds.height) {\n location.y = (symbolLocation.y > bounds.height ? bounds.height : symbolLocation.y)\n + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight;\n }\n tipLocation.x = width / 2;\n if (location.x < boundsX) {\n arrowLocation.x -= (boundsX - location.x);\n tipLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (location.x + width > boundsX + bounds.width) {\n arrowLocation.x += ((location.x + width) - (boundsX + bounds.width));\n tipLocation.x += ((location.x + width) - (boundsX + bounds.width));\n location.x -= ((location.x + width) - (boundsX + bounds.width));\n }\n if (arrowLocation.x + this.arrowPadding / 2 > width - this.rx) {\n arrowLocation.x = width - this.rx - this.arrowPadding / 2;\n tipLocation.x = width;\n this.tipRadius = 0;\n }\n if (arrowLocation.x - this.arrowPadding / 2 < this.rx) {\n arrowLocation.x = this.rx + this.arrowPadding / 2;\n tipLocation.x = 0;\n this.tipRadius = 0;\n }\n }\n else {\n location = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if ((location.x + width + this.arrowPadding > boundsX + bounds.width) || (this.isNegative)) {\n location.x = (symbolLocation.x > bounds.width ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (location.x < boundsX) {\n location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + clipX + markerHeight;\n }\n if (location.y <= boundsY) {\n arrowLocation.y -= (boundsY - location.y);\n tipLocation.y -= (boundsY - location.y);\n location.y = boundsY;\n }\n if (location.y + height >= boundsY + bounds.height) {\n arrowLocation.y += ((location.y + height) - (boundsY + bounds.height));\n tipLocation.y += ((location.y + height) - (boundsY + bounds.height));\n location.y -= ((location.y + height) - (boundsY + bounds.height));\n }\n if (arrowLocation.y + this.arrowPadding / 2 > height - this.ry) {\n arrowLocation.y = height - this.ry - this.arrowPadding / 2;\n tipLocation.y = height;\n this.tipRadius = 0;\n }\n if (arrowLocation.y - this.arrowPadding / 2 < this.ry) {\n arrowLocation.y = this.ry + this.arrowPadding / 2;\n tipLocation.y = 0;\n this.tipRadius = 0;\n }\n }\n return new Rect(location.x, location.y, width, height);\n };\n Tooltip.prototype.animateTooltipDiv = function (tooltipDiv, rect) {\n var _this = this;\n var x = parseFloat(tooltipDiv.style.left);\n var y = parseFloat(tooltipDiv.style.top);\n var currenDiff;\n new Animation({}).animate(tooltipDiv, {\n duration: 300,\n progress: function (args) {\n currenDiff = (args.timeStamp / args.duration);\n tooltipDiv.style.animation = null;\n tooltipDiv.style.left = (x + currenDiff * (rect.x - x)) + 'px';\n tooltipDiv.style.top = (y + currenDiff * (rect.y - y)) + 'px';\n },\n end: function (model) {\n _this.updateDiv(tooltipDiv, rect.x, rect.y);\n _this.trigger('animationComplete', { tooltip: _this });\n }\n });\n };\n Tooltip.prototype.updateDiv = function (tooltipDiv, x, y) {\n tooltipDiv.style.left = x + 'px';\n tooltipDiv.style.top = y + 'px';\n };\n Tooltip.prototype.updateTemplateFn = function () {\n if (this.template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(this.template).length) {\n this.templateFn = templateComplier(document.querySelector(this.template).innerHTML.trim());\n }\n }\n catch (e) {\n this.templateFn = templateComplier(this.template);\n }\n }\n };\n /** @private */\n Tooltip.prototype.fadeOut = function () {\n var _this = this;\n var tooltipElement = getElement(this.element.id);\n if (tooltipElement) {\n var tooltipGroup_1 = tooltipElement.firstChild;\n var opacity_1 = parseFloat(tooltipGroup_1.getAttribute('opacity')) || 1;\n new Animation({}).animate(tooltipGroup_1, {\n duration: 200,\n progress: function (args) {\n // tooltipGroup.removeAttribute('e-animate');\n _this.progressAnimation(tooltipGroup_1, opacity_1, (args.timeStamp / args.duration));\n },\n end: function (model) {\n _this.fadeOuted = true;\n _this.endAnimation(tooltipGroup_1);\n }\n });\n }\n };\n Tooltip.prototype.progressAnimation = function (tooltipGroup, opacity, timeStamp) {\n tooltipGroup.style.animation = '';\n tooltipGroup.setAttribute('opacity', (opacity - timeStamp).toString());\n };\n /*\n * @hidden\n */\n Tooltip.prototype.endAnimation = function (tooltipGroup) {\n tooltipGroup.setAttribute('opacity', '0');\n if (this.template && !this.shared) {\n tooltipGroup.style.display = 'none';\n }\n this.trigger('animationComplete', { tooltip: this });\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n var keyEntity = [];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * To destroy the accumulationcharts\n * @private\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-tooltip');\n };\n /**\n * Called internally if any of the property value changed.\n * @return {void}\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.isFirst = false;\n this.render();\n };\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"shared\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableShadow\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], Tooltip.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ size: '13px', fontWeight: 'Normal', color: null, fontStyle: 'Normal', fontFamily: 'Segoe UI' }, TextStyle)\n ], Tooltip.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"inverted\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isNegative\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, TooltipBorder)\n ], Tooltip.prototype, \"border\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property(10)\n ], Tooltip.prototype, \"markerSize\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"clipBounds\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"palette\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"shapes\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"location\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offset\", void 0);\n __decorate([\n Property(2)\n ], Tooltip.prototype, \"rx\", void 0);\n __decorate([\n Property(2)\n ], Tooltip.prototype, \"ry\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginX\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginY\", void 0);\n __decorate([\n Property(12)\n ], Tooltip.prototype, \"arrowPadding\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"data\", void 0);\n __decorate([\n Property('Material')\n ], Tooltip.prototype, \"theme\", void 0);\n __decorate([\n Complex({ x: 0, y: 0, width: 0, height: 0 }, AreaBounds)\n ], Tooltip.prototype, \"areaBounds\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"animationComplete\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { extend } from '@syncfusion/ej2-base';\nimport { ChartLocation } from '../../common/utils/helper';\nimport { stopTimer, removeElement } from '../../common/utils/helper';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { tooltipRender } from '../../common/model/constants';\nimport { Tooltip as SVGTooltip } from '@syncfusion/ej2-svg-base';\n/**\n * Tooltip Module used to render the tooltip for series.\n */\nvar BaseTooltip = /** @class */ (function (_super) {\n __extends(BaseTooltip, _super);\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function BaseTooltip(chart) {\n var _this = _super.call(this, chart) || this;\n _this.element = _this.chart.element;\n _this.textStyle = chart.tooltip.textStyle;\n _this.control = chart;\n return _this;\n }\n BaseTooltip.prototype.getElement = function (id) {\n return document.getElementById(id);\n };\n /**\n * Renders the tooltip.\n * @return {void}\n * @private\n */\n BaseTooltip.prototype.getTooltipElement = function (isTooltip) {\n this.inverted = this.chart.requireInvertedAxis;\n this.header = (this.control.tooltip.header === null) ?\n ((this.control.tooltip.shared) ? '${point.x}' : '${series.name}')\n : (this.control.tooltip.header);\n this.formattedText = [];\n if (!isTooltip) {\n return this.createElement();\n }\n return null;\n };\n BaseTooltip.prototype.createElement = function () {\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_tooltip';\n tooltipDiv.className = 'ejSVGTooltip';\n tooltipDiv.setAttribute('style', 'pointer-events:none; position:absolute;z-index: 1');\n return tooltipDiv;\n };\n BaseTooltip.prototype.pushData = function (data, isFirst, tooltipDiv, isChart) {\n if (data.series.enableTooltip) {\n if (isChart) {\n this.currentPoints.push(data);\n }\n else {\n this.currentPoints.push(data);\n }\n this.stopAnimation();\n if (tooltipDiv && !document.getElementById(tooltipDiv.id)) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n return true;\n }\n return false;\n };\n BaseTooltip.prototype.removeHighlight = function (chart) {\n var item;\n var series;\n for (var i = 0, len = this.previousPoints.length; i < len; i++) {\n item = this.previousPoints[i];\n if (item.series.isRectSeries) {\n if (item.series.visible) {\n this.highlightPoint(item.series, item.point.index, false);\n }\n continue;\n }\n series = item.series;\n if (!series.marker.visible && item.series.type !== 'Scatter' && item.series.type !== 'Bubble') {\n this.previousPoints.shift();\n len -= 1;\n }\n }\n };\n BaseTooltip.prototype.highlightPoint = function (series, pointIndex, highlight) {\n var element = this.getElement(this.element.id + '_Series_' + series.index + '_Point_' + pointIndex);\n if (element) {\n element.setAttribute('opacity', (highlight ? series.opacity / 2 : series.opacity).toString());\n }\n };\n BaseTooltip.prototype.highlightPoints = function () {\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.series.isRectSeries && item.series.category === 'Series') {\n this.highlightPoint(item.series, item.point.index, true);\n }\n }\n };\n BaseTooltip.prototype.createTooltip = function (chart, isFirst, location, clipLocation, point, shapes, offset, bounds, extraPoints, templatePoint) {\n if (extraPoints === void 0) { extraPoints = null; }\n if (templatePoint === void 0) { templatePoint = null; }\n var series = this.currentPoints[0].series;\n var module = chart.tooltipModule || chart.accumulationTooltipModule;\n if (isFirst) {\n this.svgTooltip = new SVGTooltip({\n opacity: chart.tooltip.opacity,\n header: this.headerText, content: this.text, fill: chart.tooltip.fill, border: chart.tooltip.border,\n enableAnimation: chart.tooltip.enableAnimation, location: location, shared: chart.tooltip.shared,\n shapes: shapes, clipBounds: this.chart.chartAreaType === 'PolarRadar' ? new ChartLocation(0, 0) : clipLocation,\n areaBounds: bounds, palette: this.findPalette(), template: chart.tooltip.template, data: templatePoint,\n theme: chart.theme, offset: offset, textStyle: chart.tooltip.textStyle,\n isNegative: (series.isRectSeries && series.type !== 'Waterfall' && point && point.y < 0),\n inverted: this.chart.requireInvertedAxis && series.isRectSeries,\n arrowPadding: this.text.length > 1 ? 0 : 12,\n tooltipRender: function () {\n module.removeHighlight(module.control);\n module.highlightPoints();\n module.updatePreviousPoint(extraPoints);\n },\n animationComplete: function (args) {\n if (args.tooltip.fadeOuted) {\n module.fadeOut(module.previousPoints, chart);\n }\n }\n }, '#' + this.element.id + '_tooltip');\n }\n else {\n this.svgTooltip.location = location;\n this.svgTooltip.content = this.text;\n this.svgTooltip.header = this.headerText;\n this.svgTooltip.offset = offset;\n this.svgTooltip.palette = this.findPalette();\n this.svgTooltip.shapes = shapes;\n this.svgTooltip.data = templatePoint;\n this.svgTooltip.template = chart.tooltip.template;\n this.svgTooltip.textStyle = chart.tooltip.textStyle;\n this.svgTooltip.isNegative = (series.isRectSeries && series.type !== 'Waterfall' && point && point.y < 0);\n this.svgTooltip.clipBounds = this.chart.chartAreaType === 'PolarRadar' ? new ChartLocation(0, 0) : clipLocation;\n this.svgTooltip.arrowPadding = this.text.length > 1 ? 0 : 12;\n this.svgTooltip.dataBind();\n }\n };\n BaseTooltip.prototype.findPalette = function () {\n var colors = [];\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n colors.push(this.findColor(data, data.series));\n }\n return colors;\n };\n BaseTooltip.prototype.findColor = function (data, series) {\n if (series.isRectSeries && (series.type === 'Candle' || series.type === 'Hilo' || series.type === 'HiloOpenClose')) {\n return data.point.color;\n }\n else {\n return (data.point.color && data.point.color !== '#ffffff' ? data.point.color\n : data.point.interior) ||\n series.marker.fill || series.interior;\n }\n };\n BaseTooltip.prototype.updatePreviousPoint = function (extraPoints) {\n if (extraPoints) {\n this.currentPoints = this.currentPoints.concat(extraPoints);\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n };\n BaseTooltip.prototype.fadeOut = function (data, chart) {\n var svgElement = this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = (svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0);\n if (!isTooltip) {\n this.valueX = null;\n this.valueY = null;\n this.currentPoints = [];\n this.removeHighlight(chart);\n this.removeHighlightedMarker(data);\n this.svgTooltip = null;\n this.control.trigger('animationComplete', {});\n }\n };\n /*\n * @hidden\n */\n BaseTooltip.prototype.removeHighlightedMarker = function (data) {\n if (this.chart.markerRender) {\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var item = data_1[_i];\n removeElement(this.element.id + '_Series_' + item.series.index +\n '_Point_' + item.point.index + '_Trackball');\n }\n this.chart.markerRender.removeHighlightedMarker();\n }\n this.previousPoints = [];\n };\n BaseTooltip.prototype.triggerEvent = function (point, isFirst, textCollection, headerText, firstText) {\n if (firstText === void 0) { firstText = true; }\n var argsData = {\n cancel: false, name: tooltipRender, text: textCollection,\n point: point.point, series: point.series, textStyle: this.textStyle, headerText: headerText\n };\n this.chart.trigger(tooltipRender, argsData);\n if (!argsData.cancel) {\n if (point.series.type === 'BoxAndWhisker') {\n this.removeText();\n isFirst = true;\n }\n this.formattedText = this.formattedText.concat(argsData.text);\n this.text = this.formattedText;\n this.headerText = argsData.headerText;\n }\n return !argsData.cancel;\n };\n BaseTooltip.prototype.removeText = function () {\n this.textElements = [];\n var element = this.getElement(this.element.id + '_tooltip_group');\n if (element && element.childNodes.length > 0) {\n while (element.lastChild && element.childNodes.length !== 1) {\n element.removeChild(element.lastChild);\n }\n }\n };\n BaseTooltip.prototype.stopAnimation = function () {\n stopTimer(this.toolTipInterval);\n };\n /**\n * Removes the tooltip on mouse leave.\n * @return {void}\n * @private\n */\n BaseTooltip.prototype.removeTooltip = function (duration) {\n var _this = this;\n var tooltipElement = this.getElement(this.element.id + '_tooltip');\n this.stopAnimation();\n if (tooltipElement && this.previousPoints.length > 0) {\n this.toolTipInterval = setTimeout(function () {\n if (_this.svgTooltip) {\n _this.svgTooltip.fadeOut();\n }\n }, duration);\n }\n };\n return BaseTooltip;\n}(ChartData));\nexport { BaseTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { extend, Browser } from '@syncfusion/ej2-base';\nimport { PointData, ChartLocation } from '../../common/utils/helper';\nimport { valueToCoefficient, removeElement, valueToPolarCoefficient, withInBounds } from '../../common/utils/helper';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\n/**\n * `Tooltip` module is used to render the tooltip for chart series.\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function Tooltip(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * @hidden\n */\n Tooltip.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n this.chart.on('tapHold', this.longPress, this);\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n Tooltip.prototype.mouseUpHandler = function () {\n var chart = this.control;\n if (chart.isTouch && !this.isSelected(chart) &&\n ((withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect) && chart.tooltip.shared)\n || !chart.tooltip.shared)) {\n if (!chart.crosshair.enable) {\n this.tooltip();\n this.removeTooltip(2000);\n }\n else if (chart.startMove) {\n this.removeTooltip(2000);\n }\n }\n };\n Tooltip.prototype.mouseLeaveHandler = function () {\n this.removeTooltip(1000);\n };\n Tooltip.prototype.mouseMoveHandler = function () {\n var chart = this.chart;\n // Tooltip for chart series.\n if (!chart.disableTrackTooltip && !this.isSelected(chart)) {\n if (!chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n this.tooltip();\n }\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n if (chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n this.tooltip();\n }\n }\n else {\n if (chart.tooltip.shared) {\n this.removeTooltip(1000);\n }\n }\n }\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Tooltip.prototype.longPress = function () {\n var chart = this.chart;\n if (chart.crosshair.enable && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n this.tooltip();\n }\n return false;\n };\n /**\n * Renders the tooltip.\n * @return {void}\n */\n Tooltip.prototype.tooltip = function () {\n var svgElement = this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = (svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0);\n var tooltipDiv = this.getTooltipElement(isTooltip);\n if (!this.chart.tooltip.shared) {\n this.renderSeriesTooltip(this.chart, !isTooltip, tooltipDiv);\n }\n else {\n this.renderGroupedTooltip(this.chart, !isTooltip, tooltipDiv);\n }\n };\n Tooltip.prototype.findHeader = function (data) {\n if (this.header === '') {\n return '';\n }\n this.header = this.parseTemplate(data.point, data.series, this.header, data.series.xAxis, data.series.yAxis);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n return this.header;\n }\n return '';\n };\n Tooltip.prototype.findShapes = function () {\n var marker = [];\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n marker.push(data.point.marker.shape || data.series.marker.shape);\n }\n return marker;\n };\n Tooltip.prototype.renderSeriesTooltip = function (chart, isFirst, tooltipDiv) {\n var data = this.getData();\n data.lierIndex = this.lierIndex;\n var rect = chart.chartAxisLayoutPanel.seriesClipRect;\n this.currentPoints = [];\n var tool;\n if (this.findData(data, this.previousPoints[0])) {\n if (this.pushData(data, isFirst, tooltipDiv, true)) {\n if (this.triggerEvent(data, isFirst, this.getTooltipText(data), this.findHeader(data))) {\n this.createTooltip(chart, isFirst, this.getSymbolLocation(data), data.series.clipRect, data.point, this.findShapes(), this.findMarkerHeight(this.currentPoints[0]), chart.chartAxisLayoutPanel.seriesClipRect, null, this.getTemplateText(data));\n }\n else {\n this.removeHighlight(this.control);\n this.getElement(this.element.id + '_tooltip').remove();\n }\n this.isRemove = true;\n }\n }\n else {\n if (!data.point && this.isRemove) {\n this.removeTooltip(1000);\n this.isRemove = false;\n }\n else {\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible) {\n data = this.getClosestX(chart, series) || data;\n }\n }\n }\n }\n if (data && data.point) {\n this.findMouseValue(data, chart);\n }\n };\n Tooltip.prototype.findMarkerHeight = function (pointData) {\n var markerHeight = 0;\n var series = pointData.series;\n markerHeight = ((series.marker.visible || (this.chart.tooltip.shared &&\n (!series.isRectSeries || series.marker.visible)) || series.type === 'Scatter' || series.drawType === 'Scatter')\n && !(series.type === 'Candle' || series.type === 'Hilo' || series.type === 'HiloOpenClose')) ?\n ((series.marker.height + 2) / 2 + (2 * series.marker.border.width)) : 0;\n return markerHeight;\n };\n Tooltip.prototype.findData = function (data, previous) {\n return data.point && ((!previous || (previous.point !== data.point)) ||\n (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex));\n };\n Tooltip.prototype.getSymbolLocation = function (data) {\n var location;\n if (data.series.type !== 'BoxAndWhisker') {\n if (!data.point.symbolLocations[0]) {\n return null;\n }\n location = new ChartLocation(data.point.symbolLocations[0].x, data.point.symbolLocations[0].y);\n }\n switch (data.series.type) {\n case 'BoxAndWhisker':\n return this.getBoxLocation(data);\n case 'Waterfall':\n return this.getWaterfallRegion(data, location);\n case 'RangeArea':\n return this.getRangeArea(data, location);\n default:\n return location;\n }\n };\n Tooltip.prototype.getRangeArea = function (data, location) {\n if (data.point.regions[0]) {\n if (!this.inverted) {\n location.y = data.point.regions[0].y + data.point.regions[0].height / 2;\n }\n else {\n location.x = data.point.regions[0].x + data.point.regions[0].width / 2;\n }\n }\n return location;\n };\n Tooltip.prototype.getWaterfallRegion = function (data, location) {\n if (!this.inverted) {\n location.y = (data.point.y < 0) ?\n location.y - data.point.regions[0].height : location.y;\n }\n else {\n location.x = (data.point.y < 0) ?\n location.x + data.point.regions[0].width : location.x;\n }\n return location;\n };\n Tooltip.prototype.getTooltipText = function (pointData) {\n var series = pointData.series;\n return this.parseTemplate(pointData.point, series, this.getFormat(this.chart, series), series.xAxis, series.yAxis);\n };\n Tooltip.prototype.getTemplateText = function (data) {\n if (this.chart.tooltip.template) {\n var point = extend({}, data.point);\n point.x = this.formatPointValue(data.point, data.series.xAxis, 'x', true, false);\n if ((data.series.seriesType === 'XY')) {\n point.y = this.formatPointValue(data.point, data.series.yAxis, 'y', false, true);\n }\n else {\n point.low = this.formatPointValue(data.point, data.series.yAxis, 'low', false, true);\n point.high = this.formatPointValue(data.point, data.series.yAxis, 'high', false, true);\n }\n return point;\n }\n else {\n return data.point;\n }\n };\n Tooltip.prototype.findMouseValue = function (data, chart) {\n if (!chart.requireInvertedAxis) {\n if (chart.chartAreaType === 'PolarRadar') {\n this.valueX = valueToPolarCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n + data.series.xAxis.rect.x;\n }\n else {\n this.valueX = valueToCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n + data.series.xAxis.rect.x;\n }\n this.valueY = chart.mouseY;\n }\n else {\n this.valueY = (1 - valueToCoefficient(data.point.xValue, data.series.xAxis)) * data.series.xAxis.rect.height\n + data.series.xAxis.rect.y;\n this.valueX = chart.mouseX;\n }\n };\n Tooltip.prototype.renderGroupedTooltip = function (chart, isFirst, tooltipDiv) {\n var data;\n var height = 0;\n var width = 0;\n var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n this.stopAnimation();\n this.removeHighlight(chart);\n this.currentPoints = [];\n var extraPoints = [];\n var headerContent = '';\n if (isFirst) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n this.removeText();\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (!series.enableTooltip) {\n continue;\n }\n if (chart.chartAreaType === 'Cartesian' && series.visible) {\n data = this.getClosestX(chart, series);\n }\n else if (chart.chartAreaType === 'PolarRadar' && series.visible && pointData.point !== null) {\n data = new PointData(series.points[pointData.point.index], series);\n }\n if (data && this.header !== '' && this.currentPoints.length === 0) {\n headerContent = this.findHeader(data);\n }\n if (data && this.triggerEvent(data, isFirst, this.getTooltipText(data), headerContent)) {\n this.findMouseValue(data, chart);\n this.currentPoints.push(data);\n data = null;\n }\n else if (data) {\n extraPoints.push(data);\n }\n }\n if (this.currentPoints.length > 0) {\n this.createTooltip(chart, isFirst, this.findSharedLocation(), this.currentPoints.length === 1 ? this.currentPoints[0].series.clipRect : null, null, this.findShapes(), this.findMarkerHeight(this.currentPoints[0]), chart.chartAxisLayoutPanel.seriesClipRect, extraPoints);\n }\n else if (this.getElement(this.element.id + '_tooltip_path')) {\n this.getElement(this.element.id + '_tooltip_path').setAttribute('d', '');\n }\n };\n Tooltip.prototype.findSharedLocation = function () {\n if (this.currentPoints.length > 1) {\n return new ChartLocation(this.valueX, this.valueY);\n }\n else {\n return this.getSymbolLocation(this.currentPoints[0]);\n }\n };\n Tooltip.prototype.getBoxLocation = function (data) {\n var location;\n location = this.lierIndex > 3 ? data.point.symbolLocations[this.lierIndex - 4] :\n {\n x: data.point.regions[0].x + (data.point.regions[0].width / 2),\n y: data.point.regions[0].y + (data.point.regions[0].height / 2)\n };\n return location;\n };\n Tooltip.prototype.parseTemplate = function (point, series, format, xAxis, yAxis) {\n var val;\n var textValue;\n var xFormat;\n var customLabelFormat;\n var chart = this.chart;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n val = new RegExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(val.source, this.formatPointValue(point, val.source === '${point.x}' ? xAxis : yAxis, dataValue, val.source === '${point.x}', (val.source === '${point.high}' ||\n val.source === '${point.open}' ||\n val.source === '${point.close}' ||\n val.source === '${point.low}' ||\n val.source === '${point.y}' ||\n val.source === '${point.minimum}' ||\n val.source === '${point.maximum}' ||\n val.source === '${point.outliers}' ||\n val.source === '${point.upperQuartile}' ||\n val.source === '${point.lowerQuartile}' ||\n val.source === '${point.median}')));\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n val = new RegExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(val.source, textValue);\n }\n return format;\n };\n Tooltip.prototype.formatPointValue = function (point, axis, dataValue, isXPoint, isYPoint) {\n var textValue;\n var customLabelFormat;\n var value;\n if (axis.valueType !== 'Category' && isXPoint) {\n customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n textValue = customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(point[dataValue])) :\n axis.format(point[dataValue]);\n }\n else if (isYPoint) {\n customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n value = dataValue === 'outliers' ? axis.format(point[dataValue][this.lierIndex - 4]) :\n axis.format(point[dataValue]);\n textValue = customLabelFormat ? axis.labelFormat.replace('{value}', value) : value;\n }\n else {\n textValue = point[dataValue];\n }\n return textValue;\n };\n Tooltip.prototype.getFormat = function (chart, series) {\n if (chart.tooltip.format) {\n if (series.seriesType === 'XY' && series.category === 'Indicator') {\n return this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return chart.tooltip.format;\n }\n var textX = (series.type === 'Histogram') ? '${point.minimum}' + '-' + '${point.maximum}' : '${point.x}';\n var format = !chart.tooltip.shared ? textX : '${series.name}';\n switch (series.seriesType) {\n case 'XY':\n if (series.category === 'Indicator') {\n this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return format + ' : ' + ((series.type === 'Bubble') ? '${point.y} Size : ${point.size}'\n : '${point.y}');\n case 'HighLow':\n return format + ('
High : ${point.high}
Low : ${point.low}');\n case 'HighLowOpenClose':\n return format + ('
High : ${point.high}
Low : ${point.low}
' +\n 'Open : ${point.open}
Close : ${point.close}');\n case 'BoxPlot': {\n return format + '
' + (this.lierIndex > 3 ? 'Outliers : ${point.outliers}' :\n 'Maximum : ${point.maximum}
Q1 : ${point.upperQuartile}
' +\n 'Median : ${point.median}
Q3 : ${point.lowerQuartile}
Minimum : ${point.minimum}');\n }\n }\n return '';\n };\n Tooltip.prototype.getIndicatorTooltipFormat = function (series, chart, format) {\n var toolTip;\n var points = [];\n if (series.seriesType === 'XY') {\n toolTip = series.name + ' : ${point.y}';\n }\n else {\n toolTip = format;\n }\n return toolTip;\n };\n /*\n * @hidden\n */\n Tooltip.prototype.removeHighlightedMarker = function (data) {\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var item = data_1[_i];\n removeElement(this.element.id + '_Series_' + item.series.index +\n '_Point_' + item.point.index + '_Trackball');\n }\n if (this.chart.markerRender) {\n this.chart.markerRender.removeHighlightedMarker();\n }\n this.previousPoints = [];\n };\n /**\n * Get module name.\n */\n Tooltip.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n Tooltip.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Tooltip;\n}(BaseTooltip));\nexport { Tooltip };\n","import { EventHandler } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { removeElement, measureText, RectOption, Rect, PolygonOption, PathOption, createTooltip, minMax } from '../../common/utils/helper';\nimport { textElement, TextOption } from '../../common/utils/helper';\n/**\n * Zooming Toolkit created here\n * @private\n */\nvar Toolkit = /** @class */ (function () {\n /** @private */\n function Toolkit(chart) {\n this.chart = chart;\n this.elementId = chart.element.id;\n this.selectionColor = '#ff4081';\n this.fillColor = '#737373';\n }\n /**\n * To create the pan button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createPanButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.chart.zoomModule.isPanning ? this.selectionColor : this.fillColor;\n var direction = 'M5,3h2.3L7.275,5.875h1.4L8.65,3H11L8,0L5,3z M3,11V8.7l2.875,0.025v-1.4L3,7.35V5L0,8L3,';\n direction += '11z M11,13H8.7l0.025-2.875h-1.4L7.35,13H5l3,3L11,13z M13,5v2.3l-2.875-0.025v1.4L13,8.65V11l3-3L13,5z';\n childElement.id = this.elementId + '_Zooming_Pan';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Pan'));\n this.panElements = childElement;\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Pan_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Pan_2', fillColor, null, null, 1, null, direction)));\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.pan);\n };\n /**\n * To create the zoom button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.chart.zoomModule.isPanning ? this.fillColor : this.selectionColor;\n var direction = 'M0.001,14.629L1.372,16l4.571-4.571v-0.685l0.228-0.274c1.051,0.868,2.423,1.417,3.885,1.417c3.291,0,';\n direction += '5.943-2.651,5.943-5.943S13.395,0,10.103,0S4.16,2.651,4.16,5.943c0,1.508,0.503,2.834,1.417,3.885l-0.274,0.228H4.571';\n direction = direction + 'L0.001,14.629L0.001,14.629z M5.943,5.943c0-2.285,1.828-4.114,4.114-4.114s4.114,1.828,4.114,';\n childElement.id = this.elementId + '_Zooming_Zoom';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Zoom'));\n this.zoomElements = childElement;\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Zoom_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Zoom_3', fillColor, null, null, 1, null, direction + '4.114s-1.828,4.114-4.114,4.114S5.943,8.229,5.943,5.943z')));\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoom);\n };\n /**\n * To create the ZoomIn button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomInButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var direction = 'M10.103,0C6.812,0,4.16,2.651,4.16,5.943c0,1.509,0.503,2.834,1.417,3.885l-0.274,0.229H4.571L0,';\n direction += '14.628l0,0L1.372,16l4.571-4.572v-0.685l0.228-0.275c1.052,0.868,2.423,1.417,3.885,1.417c3.291,0,5.943-2.651,';\n direction += '5.943-5.943C16,2.651,13.395,0,10.103,0z M10.058,10.058c-2.286,0-4.114-1.828-4.114-4.114c0-2.286,1.828-4.114,';\n childElement.id = this.elementId + '_Zooming_ZoomIn';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('ZoomIn'));\n var polygonDirection = '12.749,5.466 10.749,5.466 10.749,3.466 9.749,3.466 9.749,5.466 7.749,5.466 7.749,6.466';\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_ZoomIn_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_ZoomIn_2', fillColor, null, null, 1, null, direction + '4.114-4.114c2.286,0,4.114,1.828,4.114,4.114C14.172,8.229,12.344,10.058,10.058,10.058z')));\n childElement.appendChild(render.drawPolygon(new PolygonOption(this.elementId + '_Zooming_ZoomIn_3', polygonDirection + ' 9.749,6.466 9.749,8.466 10.749,8.466 10.749,6.466 12.749,6.466', fillColor)));\n this.zoomInElements = childElement;\n this.elementOpacity = chart.zoomModule.isPanning ? '0.2' : '1';\n childElement.setAttribute('opacity', this.elementOpacity);\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoomIn);\n };\n /**\n * To create the ZoomOut button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomOutButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var direction = 'M0,14.622L1.378,16l4.533-4.533v-0.711l0.266-0.266c1.022,0.889,2.4,1.422,3.866,';\n direction += '1.422c3.289,0,5.955-2.666,5.955-5.955S13.333,0,10.044,0S4.089,2.667,4.134,5.911c0,1.466,0.533,2.844,';\n direction += '1.422,3.866l-0.266,0.266H4.578L0,14.622L0,14.622z M5.911,5.911c0-2.311,1.822-4.133,4.133-4.133s4.133,1.822,4.133,';\n childElement.id = this.elementId + '_Zooming_ZoomOut';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('ZoomOut'));\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_ZoomOut_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_ZoomOut_2', fillColor, null, null, 1, null, direction + '4.133s-1.866,4.133-4.133,4.133S5.911,8.222,5.911,5.911z M12.567,6.466h-5v-1h5V6.466z')));\n this.zoomOutElements = childElement;\n this.elementOpacity = chart.zoomModule.isPanning ? '0.2' : '1';\n childElement.setAttribute('opacity', this.elementOpacity);\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoomOut);\n };\n /**\n * To create the Reset button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createResetButton = function (childElement, parentElement, chart, isDevice) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var size;\n var direction = 'M12.364,8h-2.182l2.909,3.25L16,8h-2.182c0-3.575-2.618-6.5-5.818-6.5c-1.128,0-2.218,0.366-3.091,';\n direction += '1.016l1.055,1.178C6.581,3.328,7.272,3.125,8,3.125C10.4,3.125,12.363,5.319,12.364,8L12.364,8z M11.091,';\n direction += '13.484l-1.055-1.178C9.419,12.672,8.728,12.875,8,12.875c-2.4,0-4.364-2.194-4.364-4.875h2.182L2.909,4.75L0,8h2.182c0,';\n childElement.id = this.elementId + '_Zooming_Reset';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Reset'));\n if (!isDevice) {\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Reset_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Reset_2', fillColor, null, null, 1, null, direction + '3.575,2.618,6.5,5.818,6.5C9.128,14.5,10.219,14.134,11.091,13.484L11.091,13.484z')));\n }\n else {\n size = measureText(this.chart.getLocalizedLabel('ResetZoom'), { size: '12px' });\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Reset_1', 'transparent', {}, 1, new Rect(0, 0, size.width, size.height))));\n textElement(new TextOption(this.elementId + '_Zooming_Reset_2', 0 + size.width / 2, 0 + size.height * 3 / 4, 'middle', this.chart.getLocalizedLabel('ResetZoom'), 'rotate(0,' + (0) + ',' + (0) + ')', 'auto'), { size: '12px' }, 'black', childElement);\n }\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.reset);\n };\n /**\n * To bind events.\n * @return {void}\n * @private\n */\n Toolkit.prototype.wireEvents = function (element, process) {\n EventHandler.add(element, 'mousedown touchstart', process, this);\n EventHandler.add(element, 'mouseover', this.showTooltip, this);\n EventHandler.add(element, 'mouseout', this.removeTooltip, this);\n };\n /**\n * To show tooltip.\n * @return {void}\n * @private\n */\n Toolkit.prototype.showTooltip = function (event) {\n var text = event.currentTarget.id.split('_Zooming_')[1];\n var left = (event.pageX - (measureText(text, { size: '10px' }).width + 5));\n if (!this.chart.isTouch) {\n createTooltip('EJ2_Chart_ZoomTip', this.chart.getLocalizedLabel(text), (event.pageY + 10), left, '10px');\n }\n };\n /** @private */\n Toolkit.prototype.removeTooltip = function () {\n removeElement('EJ2_Chart_ZoomTip');\n };\n // Toolkit events function calculation here.\n /** @private */\n Toolkit.prototype.reset = function () {\n var chart = this.chart;\n if (!chart.zoomModule.isDevice) {\n remove(chart.zoomModule.toolkitElements);\n }\n this.removeTooltip();\n chart.svgObject.setAttribute('cursor', 'auto');\n chart.axisCollections.forEach(function (axis) {\n axis.zoomFactor = 1;\n axis.zoomPosition = 0;\n if (axis.zoomingScrollBar) {\n axis.zoomingScrollBar.isScrollUI = false;\n }\n });\n chart.disableTrackTooltip = false;\n chart.zoomModule.isZoomed = chart.zoomModule.isPanning = chart.isChartDrag = chart.delayRedraw = false;\n chart.zoomModule.touchMoveList = chart.zoomModule.touchStartList = [];\n chart.zoomModule.pinchTarget = null;\n chart.removeSvg();\n chart.refreshAxis();\n chart.refreshBound();\n this.elementOpacity = '1';\n return false;\n };\n Toolkit.prototype.zoomIn = function (e) {\n this.zoomInOutCalculation(1, this.chart, this.chart.axisCollections, this.chart.zoomSettings.mode);\n return false;\n };\n Toolkit.prototype.zoomOut = function (e) {\n this.zoomInOutCalculation(-1, this.chart, this.chart.axisCollections, this.chart.zoomSettings.mode);\n return false;\n };\n Toolkit.prototype.zoom = function (e) {\n this.chart.zoomModule.isPanning = false;\n var zoomModule = this.chart.zoomModule;\n this.elementOpacity = '1';\n this.chart.svgObject.setAttribute('cursor', 'auto');\n this.zoomInElements.setAttribute('opacity', this.elementOpacity);\n this.zoomOutElements.setAttribute('opacity', this.elementOpacity);\n this.applySelection(this.zoomElements.childNodes, this.selectionColor);\n this.applySelection(this.panElements.childNodes, '#737373');\n return false;\n };\n /** @private */\n Toolkit.prototype.pan = function () {\n var element;\n this.chart.zoomModule.isPanning = true;\n this.chart.svgObject.setAttribute('cursor', 'pointer');\n this.elementOpacity = '0.2';\n element = this.zoomInElements ? this.zoomInElements.setAttribute('opacity', this.elementOpacity) : null;\n element = this.zoomOutElements ? this.zoomOutElements.setAttribute('opacity', this.elementOpacity) : null;\n element = this.panElements ? this.applySelection(this.panElements.childNodes, this.selectionColor) : null;\n element = this.zoomElements ? this.applySelection(this.zoomElements.childNodes, '#737373') : null;\n return false;\n };\n Toolkit.prototype.zoomInOutCalculation = function (scale, chart, axes, mode) {\n if (!chart.zoomModule.isPanning && this.elementOpacity !== '0.2') {\n var zoomFactor_1;\n var zoomPosition_1;\n var cumulative_1;\n chart.disableTrackTooltip = true;\n chart.delayRedraw = true;\n axes.forEach(function (axis) {\n if ((axis.orientation === 'Horizontal' && mode !== 'Y') ||\n (axis.orientation === 'Vertical' && mode !== 'X')) {\n cumulative_1 = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * scale), 1);\n zoomFactor_1 = (cumulative_1 === 1) ? 1 : minMax(1 / cumulative_1, 0, 1);\n zoomPosition_1 = (cumulative_1 === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - zoomFactor_1) * 0.5);\n if (axis.zoomPosition !== zoomPosition_1 || axis.zoomFactor !== zoomFactor_1) {\n zoomFactor_1 = (zoomPosition_1 + zoomFactor_1) > 1 ? (1 - zoomPosition_1) : zoomFactor_1;\n }\n axis.zoomFactor = zoomFactor_1;\n axis.zoomPosition = zoomPosition_1;\n }\n });\n }\n };\n Toolkit.prototype.applySelection = function (elements, color) {\n for (var i = 1, length_1 = elements.length; i < length_1; i++) {\n elements[i].setAttribute('fill', color);\n }\n };\n return Toolkit;\n}());\nexport { Toolkit };\n","import { EventHandler, Browser, createElement } from '@syncfusion/ej2-base';\nimport { getRectLocation, minMax, getElement, ChartLocation, Rect, RectOption, measureText } from '../../common/utils/helper';\nimport { Toolkit } from './zooming-toolkit';\nimport { zoomComplete } from '../../common/model/constants';\nimport { withInBounds } from '../../common/utils/helper';\n/**\n * `Zooming` module handles the zooming for chart.\n */\nvar Zoom = /** @class */ (function () {\n /**\n * Constructor for Zooming module.\n * @private.\n */\n function Zoom(chart) {\n this.chart = chart;\n this.isPointer = Browser.isPointer;\n this.browserName = Browser.info.name;\n this.wheelEvent = this.browserName === 'mozilla' ? (this.isPointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n this.cancelEvent = this.isPointer ? 'pointerleave' : 'mouseleave';\n this.addEventListener();\n this.isDevice = Browser.isDevice;\n var zooming = chart.zoomSettings;\n this.toolkit = new Toolkit(chart);\n this.zooming = zooming;\n this.elementId = chart.element.id;\n this.zoomingRect = new Rect(0, 0, 0, 0);\n this.zoomAxes = [];\n this.zoomkitOpacity = 0.3;\n this.isIOS = Browser.isIos || Browser.isIos7;\n this.isZoomed = this.performedUI = this.zooming.enablePan && this.zooming.enableSelectionZooming;\n if (zooming.enableScrollbar) {\n chart.scrollElement = createElement('div', { id: chart.element.id + '_scrollElement' });\n }\n }\n /**\n * Function that handles the Rectangular zooming.\n * @return {void}\n */\n Zoom.prototype.renderZooming = function (e, chart, isTouch) {\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n if (this.zooming.enableSelectionZooming && (!isTouch\n || (chart.isDoubleTap && this.touchStartList.length === 1)) && (!this.isPanning || chart.isDoubleTap)) {\n this.isPanning = this.isDevice ? true : this.isPanning;\n this.performedUI = true;\n this.drawZoomingRectangle(chart);\n }\n else if (this.isPanning && chart.isChartDrag) {\n if (!isTouch || (isTouch && this.touchStartList.length === 1)) {\n this.pinchTarget = isTouch ? e.target : null;\n this.doPan(chart, chart.axisCollections);\n }\n }\n };\n // Zooming rectangle drawn here\n Zoom.prototype.drawZoomingRectangle = function (chart) {\n var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n var startLocation = new ChartLocation(chart.previousMouseMoveX, chart.previousMouseMoveY);\n var endLocation = new ChartLocation(chart.mouseX, chart.mouseY);\n var rect = this.zoomingRect = getRectLocation(startLocation, endLocation, areaBounds);\n if (rect.width > 0 && rect.height > 0) {\n this.isZoomed = true;\n chart.disableTrackTooltip = true;\n chart.svgObject.setAttribute('cursor', 'crosshair');\n if (this.zooming.mode === 'X') {\n rect.height = areaBounds.height;\n rect.y = areaBounds.y;\n }\n else if (this.zooming.mode === 'Y') {\n rect.width = areaBounds.width;\n rect.x = areaBounds.x;\n }\n chart.svgObject.appendChild(chart.renderer.drawRectangle(new RectOption(this.elementId + '_ZoomArea', chart.themeStyle.selectionRectFill, { color: chart.themeStyle.selectionRectStroke, width: 1 }, 1, rect, 0, 0, '', '3')));\n }\n };\n // Panning performed here\n Zoom.prototype.doPan = function (chart, axes) {\n if (chart.startMove && chart.crosshair.enable) {\n return null;\n }\n var currentScale;\n var offset;\n this.isZoomed = true;\n var translateX;\n var translateY;\n this.offset = !chart.delayRedraw ? chart.chartAxisLayoutPanel.seriesClipRect : this.offset;\n chart.delayRedraw = true;\n chart.disableTrackTooltip = true;\n axes.forEach(function (axis) {\n currentScale = Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1);\n if (axis.orientation === 'Horizontal') {\n offset = (chart.previousMouseMoveX - chart.mouseX) / axis.rect.width / currentScale;\n axis.zoomPosition = minMax(axis.zoomPosition + offset, 0, (1 - axis.zoomFactor));\n }\n else {\n offset = (chart.previousMouseMoveY - chart.mouseY) / axis.rect.height / currentScale;\n axis.zoomPosition = minMax(axis.zoomPosition - offset, 0, (1 - axis.zoomFactor));\n }\n });\n if (this.zooming.enableDeferredZooming) {\n translateX = chart.mouseX - chart.mouseDownX;\n translateY = chart.mouseY - chart.mouseDownY;\n switch (this.zooming.mode) {\n case 'X':\n translateY = 0;\n break;\n case 'Y':\n translateX = 0;\n break;\n }\n this.setTransform(translateX, translateY, null, null, chart, false);\n this.refreshAxis(chart.chartAxisLayoutPanel, chart, chart.axisCollections);\n }\n else {\n this.performZoomRedraw(chart);\n }\n chart.previousMouseMoveX = chart.mouseX;\n chart.previousMouseMoveY = chart.mouseY;\n };\n /**\n * Redraw the chart on zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performZoomRedraw = function (chart) {\n var rect = this.zoomingRect;\n chart.animateSeries = false;\n if (this.isZoomed) {\n if (rect.width > 0 && rect.height > 0) {\n this.performedUI = true;\n chart.svgObject.setAttribute('cursor', 'auto');\n this.doZoom(chart, chart.axisCollections, chart.chartAxisLayoutPanel.seriesClipRect);\n chart.isDoubleTap = false;\n }\n else if (chart.disableTrackTooltip) {\n chart.disableTrackTooltip = false;\n chart.delayRedraw = false;\n chart.removeSvg();\n chart.refreshAxis();\n chart.refreshBound();\n }\n }\n };\n Zoom.prototype.refreshAxis = function (layout, chart, axes) {\n var mode = chart.zoomSettings.mode;\n layout.measureAxis(new Rect(chart.initialClipRect.x, chart.initialClipRect.y, chart.initialClipRect.width, chart.initialClipRect.height));\n axes.map(function (axis, index) {\n if (axis.orientation === 'Horizontal' && mode !== 'Y') {\n layout.drawXAxisLabels(axis, index, null, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n if (axis.orientation === 'Vertical' && mode !== 'X') {\n layout.drawYAxisLabels(axis, index, null, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n });\n };\n // Rectangular zoom calculated here performed here\n Zoom.prototype.doZoom = function (chart, axes, bounds) {\n var zoomRect = this.zoomingRect;\n var mode = this.zooming.mode;\n var argsData;\n var previousZF;\n var previousZP;\n var currentZF;\n var currentZP;\n this.isPanning = chart.zoomSettings.enablePan || this.isPanning;\n axes.forEach(function (axis) {\n previousZF = currentZF = axis.zoomFactor;\n previousZP = currentZP = axis.zoomPosition;\n argsData = {\n cancel: false, name: zoomComplete, axis: axis, previousZoomFactor: previousZF, previousZoomPosition: previousZP,\n currentZoomFactor: currentZF, currentZoomPosition: currentZP\n };\n if (axis.orientation === 'Horizontal') {\n if (mode !== 'Y') {\n currentZP += Math.abs((zoomRect.x - bounds.x) / (bounds.width)) * axis.zoomFactor;\n currentZF *= (zoomRect.width / bounds.width);\n argsData.currentZoomPosition = currentZP;\n argsData.currentZoomFactor = currentZF;\n chart.trigger(zoomComplete, argsData);\n }\n }\n else {\n if (mode !== 'X') {\n currentZP += (1 - Math.abs((zoomRect.height + (zoomRect.y - bounds.y)) / (bounds.height))) * axis.zoomFactor;\n currentZF *= (zoomRect.height / bounds.height);\n argsData.currentZoomFactor = currentZF;\n argsData.currentZoomPosition = currentZP;\n chart.trigger(zoomComplete, argsData);\n }\n }\n if (!argsData.cancel) {\n axis.zoomFactor = argsData.currentZoomFactor;\n axis.zoomPosition = argsData.currentZoomPosition;\n }\n });\n this.zoomingRect = new Rect(0, 0, 0, 0);\n this.performZoomRedraw(chart);\n };\n /**\n * Function that handles the Mouse wheel zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performMouseWheelZooming = function (e, mouseX, mouseY, chart, axes) {\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 1 : -1 : (e.wheelDelta / 120) > 0 ? 1 : -1;\n var mode = this.zooming.mode;\n var origin = 0.5;\n var cumulative;\n var zoomFactor;\n var zoomPosition;\n this.isZoomed = true;\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n chart.disableTrackTooltip = true;\n this.performedUI = true;\n this.isPanning = chart.zoomSettings.enablePan || this.isPanning;\n axes.forEach(function (axis) {\n if ((axis.orientation === 'Vertical' && mode !== 'X') ||\n (axis.orientation === 'Horizontal' && mode !== 'Y')) {\n cumulative = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * direction), 1);\n if (cumulative >= 1) {\n origin = axis.orientation === 'Horizontal' ? mouseX / axis.rect.width : 1 - (mouseY / axis.rect.height);\n origin = origin > 1 ? 1 : origin < 0 ? 0 : origin;\n zoomFactor = (cumulative === 1) ? 1 : minMax(1 / cumulative, 0, 1);\n zoomPosition = (cumulative === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - zoomFactor) * origin);\n if (axis.zoomPosition !== zoomPosition || axis.zoomFactor !== zoomFactor) {\n zoomFactor = (zoomPosition + zoomFactor) > 1 ? (1 - zoomPosition) : zoomFactor;\n }\n }\n axis.zoomFactor = zoomFactor;\n axis.zoomPosition = zoomPosition;\n }\n });\n this.performZoomRedraw(chart);\n };\n /**\n * Function that handles the Pinch zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performPinchZooming = function (e, chart) {\n if ((this.zoomingRect.width > 0 && this.zoomingRect.height > 0) || (chart.startMove && chart.crosshair.enable)) {\n return false;\n }\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n this.isZoomed = true;\n this.isPanning = true;\n this.performedUI = true;\n this.offset = !chart.delayRedraw ? chart.chartAxisLayoutPanel.seriesClipRect : this.offset;\n chart.delayRedraw = true;\n chart.disableTrackTooltip = true;\n var elementOffset = chart.element.getBoundingClientRect();\n var touchDown = this.touchStartList;\n var touchMove = this.touchMoveList;\n var touch0StartX = touchDown[0].pageX - elementOffset.left;\n var touch0StartY = touchDown[0].pageY - elementOffset.top;\n var touch0EndX = touchMove[0].pageX - elementOffset.left;\n var touch0EndY = touchMove[0].pageY - elementOffset.top;\n var touch1StartX = touchDown[1].pageX - elementOffset.left;\n var touch1StartY = touchDown[1].pageY - elementOffset.top;\n var touch1EndX = touchMove[1].pageX - elementOffset.left;\n var touch1EndY = touchMove[1].pageY - elementOffset.top;\n var scaleX;\n var scaleY;\n var translateXValue;\n var translateYValue;\n var pinchRect;\n var clipX;\n var clipY;\n scaleX = Math.abs(touch0EndX - touch1EndX) / Math.abs(touch0StartX - touch1StartX);\n scaleY = Math.abs(touch0EndY - touch1EndY) / Math.abs(touch0StartY - touch1StartY);\n clipX = ((this.offset.x - touch0EndX) / scaleX) + touch0StartX;\n clipY = ((this.offset.y - touch0EndY) / scaleY) + touch0StartY;\n pinchRect = new Rect(clipX, clipY, this.offset.width / scaleX, this.offset.height / scaleY);\n translateXValue = (touch0EndX - (scaleX * touch0StartX));\n translateYValue = (touch0EndY - (scaleY * touch0StartY));\n if (!isNaN(scaleX - scaleX) && !isNaN(scaleY - scaleY)) {\n switch (this.zooming.mode) {\n case 'XY':\n this.setTransform(translateXValue, translateYValue, scaleX, scaleY, chart, true);\n break;\n case 'X':\n this.setTransform(translateXValue, 0, scaleX, 1, chart, true);\n break;\n case 'Y':\n this.setTransform(0, translateYValue, 1, scaleY, chart, true);\n break;\n }\n }\n this.calculatePinchZoomFactor(chart, pinchRect);\n this.refreshAxis(chart.chartAxisLayoutPanel, chart, chart.axisCollections);\n return true;\n };\n Zoom.prototype.calculatePinchZoomFactor = function (chart, pinchRect) {\n var _this = this;\n var mode = this.zooming.mode;\n var selectionMin;\n var selectionMax;\n var rangeMin;\n var rangeMax;\n var value;\n var axisTrans;\n chart.axisCollections.forEach(function (axis, index) {\n if ((axis.orientation === 'Horizontal' && mode !== 'Y') ||\n (axis.orientation === 'Vertical' && mode !== 'X')) {\n if (axis.orientation === 'Horizontal') {\n value = pinchRect.x - _this.offset.x;\n axisTrans = axis.rect.width / _this.zoomAxes[index].delta;\n rangeMin = value / axisTrans + _this.zoomAxes[index].min;\n value = pinchRect.x + pinchRect.width - _this.offset.x;\n rangeMax = value / axisTrans + _this.zoomAxes[index].min;\n }\n else {\n value = pinchRect.y - _this.offset.y;\n axisTrans = axis.rect.height / _this.zoomAxes[index].delta;\n rangeMin = (value * -1 + axis.rect.height) / axisTrans + _this.zoomAxes[index].min;\n value = pinchRect.y + pinchRect.height - _this.offset.y;\n rangeMax = (value * -1 + axis.rect.height) / axisTrans + _this.zoomAxes[index].min;\n }\n selectionMin = Math.min(rangeMin, rangeMax);\n selectionMax = Math.max(rangeMin, rangeMax);\n axis.zoomPosition = (selectionMin - _this.zoomAxes[index].actualMin) / _this.zoomAxes[index].actualDelta;\n axis.zoomFactor = (selectionMax - selectionMin) / _this.zoomAxes[index].actualDelta;\n axis.zoomPosition = axis.zoomPosition < 0 ? 0 : axis.zoomPosition;\n axis.zoomFactor = axis.zoomFactor > 1 ? 1 : axis.zoomFactor;\n }\n });\n };\n // Series transformation style applied here.\n Zoom.prototype.setTransform = function (transX, transY, scaleX, scaleY, chart, isPinch) {\n chart.seriesElements.setAttribute('clip-path', 'url(#' + this.elementId + '_ChartAreaClipRect_)');\n if (chart.indicatorElements) {\n chart.indicatorElements.setAttribute('clip-path', 'url(#' + this.elementId + '_ChartAreaClipRect_)');\n }\n var translate;\n var xAxisLoc;\n var yAxisLoc;\n var element;\n if (transX !== null && transY !== null) {\n chart.visibleSeries.forEach(function (value) {\n xAxisLoc = chart.requireInvertedAxis ? value.yAxis.rect.x : value.xAxis.rect.x;\n yAxisLoc = chart.requireInvertedAxis ? value.xAxis.rect.y : value.yAxis.rect.y;\n translate = 'translate(' + (transX + (isPinch ? (scaleX * xAxisLoc) : xAxisLoc)) +\n ',' + (transY + (isPinch ? (scaleY * yAxisLoc) : yAxisLoc)) + ')';\n translate = (scaleX || scaleY) ? translate + ' scale(' + scaleX + ' ' + scaleY + ')' : translate;\n if (value.visible) {\n if (value.category === 'Indicator') {\n value.seriesElement.parentNode.setAttribute('transform', translate);\n }\n else {\n value.seriesElement.setAttribute('transform', translate);\n }\n element = getElement(chart.element.id + '_Series_' + value.index + '_DataLabelCollections');\n if (value.errorBarElement) {\n value.errorBarElement.setAttribute('transform', translate);\n }\n if (value.symbolElement) {\n value.symbolElement.setAttribute('transform', translate);\n }\n if (value.textElement) {\n value.textElement.setAttribute('visibility', 'hidden');\n value.shapeElement.setAttribute('visibility', 'hidden');\n }\n if (element) {\n element.style.visibility = 'hidden';\n }\n }\n });\n }\n };\n Zoom.prototype.calculateZoomAxesRange = function (chart, axes) {\n var _this = this;\n var range;\n var axisRange;\n chart.axisCollections.forEach(function (axis, index) {\n axisRange = axis.visibleRange;\n if (_this.zoomAxes[index]) {\n if (!chart.delayRedraw) {\n _this.zoomAxes[index].min = axisRange.min;\n _this.zoomAxes[index].delta = axisRange.delta;\n }\n }\n else {\n range = {\n actualMin: axis.actualRange.min,\n actualDelta: axis.actualRange.delta,\n min: axisRange.min,\n delta: axisRange.delta\n };\n _this.zoomAxes[index] = range;\n }\n });\n };\n // Zooming Toolkit created here\n Zoom.prototype.showZoomingToolkit = function (chart) {\n var toolboxItems = this.zooming.toolbarItems;\n var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n var spacing = 5;\n var render = chart.renderer;\n var length = this.isDevice ? 1 : toolboxItems.length;\n var iconSize = this.isDevice ? measureText('Reset Zoom', { size: '12px' }).width : 16;\n var height = this.isDevice ? measureText('Reset Zoom', { size: '12px' }).height : 22;\n var width = (length * iconSize) + ((length + 1) * spacing) + ((length - 1) * spacing);\n var transX = areaBounds.x + areaBounds.width - width - spacing;\n var transY = (areaBounds.y + spacing);\n var xPosition = spacing;\n var outerElement;\n var toolkit = this.toolkit;\n var element;\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n if (length === 0 || getElement(this.elementId + '_Zooming_KitCollection')) {\n return false;\n }\n var defElement = render.createDefs();\n toolboxItems = this.isDevice ? ['Reset'] : toolboxItems;\n defElement.innerHTML = shadowElement;\n this.toolkitElements = render.createGroup({\n id: this.elementId + '_Zooming_KitCollection',\n transform: 'translate(' + transX + ',' + transY + ')'\n });\n this.toolkitElements.appendChild(defElement);\n this.toolkitElements.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', '#fafafa', { color: 'transparent', width: 1 }, 1, new Rect(0, 0, width, (height + (spacing * 2))), 0, 0)));\n outerElement = render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', '#fafafa', { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, width, (height + (spacing * 2))), 0, 0));\n outerElement.setAttribute('filter', 'url(#chart_shadow)');\n this.toolkitElements.appendChild(outerElement);\n var currentItem;\n for (var i = 1; i <= length; i++) {\n currentItem = toolboxItems[i - 1];\n element = render.createGroup({\n transform: 'translate(' + xPosition + ',' + (this.isDevice ? spacing : (spacing + 3)) + ')'\n });\n // for desktop toolkit hight is 32 and top padding is 8 icon size 16\n switch (currentItem) {\n case 'Pan':\n toolkit.createPanButton(element, this.toolkitElements, chart);\n break;\n case 'Zoom':\n toolkit.createZoomButton(element, this.toolkitElements, chart);\n break;\n case 'ZoomIn':\n toolkit.createZoomInButton(element, this.toolkitElements, chart);\n break;\n case 'ZoomOut':\n toolkit.createZoomOutButton(element, this.toolkitElements, chart);\n break;\n case 'Reset':\n toolkit.createResetButton(element, this.toolkitElements, chart, this.isDevice);\n break;\n }\n xPosition += iconSize + (spacing * 2);\n }\n this.toolkitElements.setAttribute('opacity', this.isDevice ? '1' : '' + this.zoomkitOpacity);\n this.toolkitElements.setAttribute('cursor', 'auto');\n chart.svgObject.appendChild(this.toolkitElements);\n if (!this.isDevice) {\n EventHandler.add(this.toolkitElements, 'mousemove touchstart', this.zoomToolkitMove, this);\n EventHandler.add(this.toolkitElements, 'mouseleave touchend', this.zoomToolkitLeave, this);\n if (this.isPanning) {\n toolkit.pan();\n }\n }\n return true;\n };\n /**\n * To the show the zooming toolkit.\n * @return {void}\n * @private\n */\n Zoom.prototype.applyZoomToolkit = function (chart, axes) {\n var showToolkit = this.isAxisZoomed(axes);\n if (showToolkit) {\n this.showZoomingToolkit(chart);\n this.isZoomed = true;\n }\n else {\n this.toolkit.removeTooltip();\n this.isPanning = false;\n this.isZoomed = false;\n chart.svgObject.setAttribute('cursor', 'auto');\n }\n };\n /**\n * Return boolean property to show zooming toolkit.\n * @return {void}\n * @private\n */\n Zoom.prototype.isAxisZoomed = function (axes) {\n var showToolkit = false;\n axes.forEach(function (axis) {\n showToolkit = (showToolkit || (axis.zoomFactor !== 1 || axis.zoomPosition !== 0));\n });\n return showToolkit;\n };\n Zoom.prototype.zoomToolkitMove = function (e) {\n var element = this.toolkitElements;\n var opacity = +element.getAttribute('opacity');\n this.zoomkitOpacity = 1;\n element.setAttribute('opacity', '' + this.zoomkitOpacity);\n return false;\n };\n Zoom.prototype.zoomToolkitLeave = function (e) {\n var element = this.toolkitElements;\n this.zoomkitOpacity = 0.3;\n element.setAttribute('opacity', '' + this.zoomkitOpacity);\n return false;\n };\n /**\n * @hidden\n */\n Zoom.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n EventHandler.add(this.chart.element, this.wheelEvent, this.chartMouseWheel, this);\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.chart.on(this.cancelEvent, this.mouseCancelHandler, this);\n };\n /**\n * @hidden\n */\n Zoom.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n EventHandler.remove(this.chart.element, this.wheelEvent, this.chartMouseWheel);\n this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.chart.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.chart.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.chart.off(this.cancelEvent, this.mouseCancelHandler);\n };\n /**\n * Handles the mouse wheel on chart.\n * @return {boolean}\n * @private\n */\n Zoom.prototype.chartMouseWheel = function (e) {\n var chart = this.chart;\n var offset = chart.element.getBoundingClientRect();\n var svgRect = getElement(chart.element.id + '_svg').getBoundingClientRect();\n var mouseX = (e.clientX - offset.left) - Math.max(svgRect.left - offset.left, 0);\n var mouseY = (e.clientY - offset.top) - Math.max(svgRect.top - offset.top, 0);\n if (this.zooming.enableMouseWheelZooming &&\n withInBounds(mouseX, mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n e.preventDefault();\n this.performMouseWheelZooming(e, mouseX, mouseY, chart, chart.axisCollections);\n }\n return false;\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseMoveHandler = function (e) {\n //Zooming for chart\n var chart = this.chart;\n var touches = null;\n if (e.type === 'touchmove') {\n if (e.preventDefault && this.isIOS &&\n (this.isPanning || (chart.isDoubleTap)\n || (this.zooming.enablePinchZooming && this.touchStartList.length > 1))) {\n e.preventDefault();\n }\n touches = e.touches;\n }\n if (chart.isChartDrag) {\n if (chart.isTouch) {\n this.touchMoveList = this.addTouchPointer(this.touchMoveList, e, touches);\n if (this.zooming.enablePinchZooming && this.touchMoveList.length > 1\n && this.touchStartList.length > 1) {\n this.performPinchZooming(e, chart);\n }\n }\n this.renderZooming(e, chart, chart.isTouch);\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseDownHandler = function (e) {\n //Zooming for chart\n var chart = this.chart;\n var touches = null;\n var target;\n if (e.type === 'touchstart') {\n touches = e.touches;\n target = e.target;\n }\n else {\n target = e.target;\n }\n if (target.id.indexOf(chart.element.id + '_Zooming_') === -1 &&\n withInBounds(chart.previousMouseMoveX, chart.previousMouseMoveY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n chart.isChartDrag = true;\n }\n if (chart.isTouch) {\n this.touchStartList = this.addTouchPointer(this.touchStartList, e, touches);\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseUpHandler = function (e) {\n var chart = this.chart;\n var performZoomRedraw = e.target.id.indexOf(chart.element.id + '_ZoomOut_') === -1 ||\n e.target.id.indexOf(chart.element.id + '_ZoomIn_') === -1;\n if (chart.isChartDrag || performZoomRedraw) {\n this.performZoomRedraw(chart);\n }\n if (chart.isTouch) {\n if (chart.isDoubleTap && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)\n && this.touchStartList.length === 1 && this.isZoomed) {\n this.toolkit.reset();\n }\n this.touchStartList = [];\n chart.isDoubleTap = false;\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseCancelHandler = function (e) {\n if (this.isZoomed) {\n this.performZoomRedraw(this.chart);\n }\n this.pinchTarget = null;\n this.touchStartList = [];\n this.touchMoveList = [];\n };\n /**\n * Handles the touch pointer.\n * @return {boolean}\n * @private\n */\n Zoom.prototype.addTouchPointer = function (touchList, e, touches) {\n if (touches) {\n touchList = [];\n for (var i = 0, length_1 = touches.length; i < length_1; i++) {\n touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n }\n }\n else {\n touchList = touchList ? touchList : [];\n if (touchList.length === 0) {\n touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n }\n else {\n for (var i = 0, length_2 = touchList.length; i < length_2; i++) {\n if (touchList[i].pointerId === e.pointerId) {\n touchList[i] = { pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId };\n }\n else {\n touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n }\n }\n }\n }\n return touchList;\n };\n /**\n * Get module name.\n */\n Zoom.prototype.getModuleName = function () {\n // Returns te module name\n return 'Zoom';\n };\n /**\n * To destroy the zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.destroy = function (chart) {\n // Destroy method performed here\n this.removeEventListener();\n };\n return Zoom;\n}());\nexport { Zoom };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Selection Module handles the selection for chart.\n * @private\n */\nvar BaseSelection = /** @class */ (function () {\n function BaseSelection(control) {\n this.control = control;\n }\n /**\n * To create selection styles for series\n */\n BaseSelection.prototype.seriesStyles = function () {\n var seriesclass;\n var style = document.getElementById(this.styleId);\n if (isNullOrUndefined(style)) {\n style = document.createElement('style');\n style.setAttribute('id', this.styleId);\n for (var _i = 0, _a = this.control.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n seriesclass = series.selectionStyle || this.styleId + '_series_' + series.index;\n style.innerHTML += series.selectionStyle ? '' : '.' + seriesclass + ' { } ';\n }\n style.innerHTML += '.' + this.unselected + ' { opacity:' + (0.3) + ';} ';\n document.body.appendChild(style);\n }\n };\n /**\n * To concat indexes\n */\n BaseSelection.prototype.concatIndexes = function (userIndexes, localIndexes) {\n return userIndexes.concat(localIndexes);\n };\n /**\n * Selected points series visibility checking on legend click\n */\n BaseSelection.prototype.checkVisibility = function (selectedIndexes) {\n var visible = false;\n var uniqueSeries = [];\n for (var _i = 0, selectedIndexes_1 = selectedIndexes; _i < selectedIndexes_1.length; _i++) {\n var index = selectedIndexes_1[_i];\n if (uniqueSeries.indexOf(index.series) === -1) {\n uniqueSeries.push(index.series);\n }\n }\n for (var _a = 0, uniqueSeries_1 = uniqueSeries; _a < uniqueSeries_1.length; _a++) {\n var index = uniqueSeries_1[_a];\n if (this.control.series[index].visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * To add svg element style class\n * @private\n */\n BaseSelection.prototype.addSvgClass = function (element, className) {\n var elementClassName = element.getAttribute('class') || '';\n elementClassName += ((elementClassName !== '') ? ' ' : '');\n if (elementClassName.indexOf(className) === -1) {\n element.setAttribute('class', elementClassName + className);\n }\n };\n /**\n * To remove svg element style class\n * @private\n */\n BaseSelection.prototype.removeSvgClass = function (element, className) {\n var elementClassName = element.getAttribute('class') || '';\n if (elementClassName.indexOf(className) > -1) {\n element.setAttribute('class', elementClassName.replace(className, ''));\n }\n };\n /**\n * To get children from parent element\n */\n BaseSelection.prototype.getChildren = function (parent) {\n var children = [];\n for (var i = 0; i < parent.childNodes.length; i++) {\n if (parent.childNodes[i].tagName !== 'defs') {\n children.push(parent.childNodes[i]);\n }\n }\n return children;\n };\n return BaseSelection;\n}());\nexport { BaseSelection };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * Selection src file\n */\nimport { Browser } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ChartLocation, Rect, RectOption, CircleOption, withInBounds, getDraggedRectLocation, removeElement, getElement } from '../../common/utils/helper';\nimport { Index } from '../../common/model/base';\nimport { dragComplete } from '../../common/model/constants';\nimport { BaseSelection } from '../../common/user-interaction/selection';\n/**\n * `Selection` module handles the selection for chart.\n */\nvar Selection = /** @class */ (function (_super) {\n __extends(Selection, _super);\n /**\n * Constructor for selection module.\n * @private.\n */\n function Selection(chart) {\n var _this = _super.call(this, chart) || this;\n _this.chart = chart;\n _this.renderer = chart.renderer;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for selection module.\n */\n Selection.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on(cancelEvent, this.completeSelection, this);\n this.chart.on('click', this.calculateSelectedElements, this);\n this.chart.on(Browser.touchStartEvent, this.mousedown, this);\n this.chart.on(Browser.touchEndEvent, this.completeSelection, this);\n };\n /**\n * Chart mouse down\n */\n Selection.prototype.mousedown = function (e) {\n var chart = this.chart;\n if (chart.selectionMode === 'None' || chart.isChartDrag) {\n return;\n }\n if (chart.isDoubleTap || !chart.isTouch || this.rectPoints) {\n this.dragStart(chart, chart.chartAxisLayoutPanel.seriesClipRect, chart.mouseDownX, chart.mouseDownY, e);\n }\n };\n /**\n * UnBinding events for selection module.\n */\n Selection.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('pointerleave' || 'mouseleave', this.completeSelection);\n this.chart.off('click', this.calculateSelectedElements);\n this.chart.off(Browser.touchStartEvent, this.mousedown);\n this.chart.off(Browser.touchEndEvent, this.completeSelection);\n };\n /**\n * To find private variable values\n */\n Selection.prototype.initPrivateVariables = function (chart) {\n this.styleId = chart.element.id + '_ej2_chart_selection';\n this.unselected = chart.element.id + '_ej2_deselected';\n this.closeIconId = chart.element.id + '_ej2_drag_close';\n this.draggedRectGroup = chart.element.id + '_ej2_drag_group';\n this.draggedRect = chart.element.id + '_ej2_drag_rect';\n this.selectedDataIndexes = [];\n this.rectPoints = null;\n this.isSeriesMode = chart.selectionMode === 'Series';\n };\n /**\n * Method to select the point and series.\n * @return {void}\n */\n Selection.prototype.invokeSelection = function (chart) {\n this.initPrivateVariables(chart);\n this.series = extend({}, chart.visibleSeries, null, true);\n this.seriesStyles();\n if (!(chart.selectionMode.indexOf('Drag') > -1)) {\n this.selectDataIndex(chart, this.concatIndexes(chart.selectedDataIndexes, this.selectedDataIndexes));\n }\n };\n Selection.prototype.generateStyle = function (series) {\n if (series) {\n return (series.selectionStyle || this.styleId + '_series_' + series.index);\n }\n return 'undefined';\n };\n Selection.prototype.selectDataIndex = function (chart, indexes) {\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\n var index = indexes_1[_i];\n this.performSelection(index, chart, this.getElementByIndex(chart, index)[0]);\n }\n };\n Selection.prototype.getElementByIndex = function (chart, index, suffix) {\n if (suffix === void 0) { suffix = ''; }\n var elementId = chart.element.id + '_Series_' + index.series + '_Point' + '_' + index.point;\n var series = chart.series[index.series];\n elementId = (!series.isRectSeries && series.type !== 'Scatter' && series.type !== 'Bubble' &&\n series.marker.visible) ? (elementId + '_Symbol' + suffix) : elementId;\n return [getElement(elementId), (series.type === 'RangeArea' && series.marker.visible) ? getElement(elementId + '1') : null];\n };\n Selection.prototype.getClusterElements = function (chart, index) {\n var clusters = [];\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n index = new Index(series.index, index.point);\n clusters.push(this.getElementByIndex(chart, index)[0]);\n }\n return clusters;\n };\n Selection.prototype.findElements = function (chart, series, index, suffix) {\n if (suffix === void 0) { suffix = ''; }\n if (this.isSeriesMode) {\n return this.getSeriesElements(series);\n }\n else if (chart.selectionMode === 'Cluster') {\n return this.getClusterElements(chart, index);\n }\n else {\n return this.getElementByIndex(chart, index, suffix);\n }\n };\n /**\n * To find the selected element.\n * @return {void}\n * @private\n */\n Selection.prototype.calculateSelectedElements = function (event) {\n if (this.chart.selectionMode === 'None' || event.target.id.indexOf(this.chart.element.id + '_') === -1) {\n return;\n }\n if (event.target.id.indexOf('_Series_') > -1) {\n this.performSelection(this.indexFinder(event.target.id), this.chart, event.target);\n }\n };\n Selection.prototype.performSelection = function (index, chart, element) {\n this.isSeriesMode = chart.selectionMode === 'Series';\n if (chart.series[index.series].type === 'BoxAndWhisker' &&\n element.id === chart.element.id + '_Series_' + index.series + '_Point_' + index.point + '_BoxPath') {\n element = element.parentElement;\n }\n switch (chart.selectionMode) {\n case 'Series':\n this.selection(chart, index, this.getSeriesElements(chart.series[index.series]));\n this.blurEffect(chart.element.id, chart.visibleSeries);\n break;\n case 'Point':\n if (!isNaN(index.point)) {\n this.selection(chart, index, [element]);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n break;\n case 'Cluster':\n if (!isNaN(index.point)) {\n this.clusterSelection(chart, chart.series, index);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n break;\n }\n };\n Selection.prototype.selection = function (chart, index, selectedElements) {\n if (!chart.isMultiSelect && (chart.selectionMode.indexOf('Drag') === -1)) {\n this.removeMultiSelectEelments(chart, this.selectedDataIndexes, index, chart.series);\n }\n var className = selectedElements[0] && (selectedElements[0].getAttribute('class') || '');\n if (selectedElements[0] && className.indexOf(this.getSelectionClass(selectedElements[0].id)) > -1) {\n this.removeStyles(selectedElements);\n this.addOrRemoveIndex(this.selectedDataIndexes, index);\n }\n else {\n this.applyStyles(selectedElements);\n this.addOrRemoveIndex(this.selectedDataIndexes, index, true);\n }\n };\n Selection.prototype.clusterSelection = function (chart, series, index) {\n this.selection(chart, index, this.getClusterElements(chart, new Index(index.series, index.point)));\n };\n Selection.prototype.removeMultiSelectEelments = function (chart, index, currentIndex, seriesCollection) {\n var series;\n for (var i = 0; i < index.length; i++) {\n series = seriesCollection[index[i].series];\n if ((this.isSeriesMode && !this.toEquals(index[i], currentIndex, this.isSeriesMode)) ||\n (this.control.selectionMode === 'Cluster' && !this.toEquals(index[i], currentIndex, false)) ||\n (!this.isSeriesMode && this.toEquals(index[i], currentIndex, true) && !this.toEquals(index[i], currentIndex, false))) {\n this.removeStyles(this.findElements(chart, series, index[i]));\n index.splice(i, 1);\n i--;\n }\n }\n };\n Selection.prototype.blurEffect = function (chartId, visibleSeries) {\n var visibility = this.checkVisibility(this.selectedDataIndexes); // legend click scenario\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (series.visible) {\n this.checkSelectionElements(getElement(chartId + 'SeriesGroup' + series.index), this.generateStyle(series), visibility);\n if (!isNullOrUndefined(getElement(chartId + 'SymbolGroup' + series.index))) {\n this.checkSelectionElements(getElement(chartId + 'SymbolGroup' + series.index), this.generateStyle(series), visibility);\n }\n }\n }\n };\n Selection.prototype.checkSelectionElements = function (element, className, visibility) {\n var children = (this.isSeriesMode ? [element] : element.childNodes);\n var elementClassName;\n var parentClassName;\n var legendShape;\n var selectElement = element;\n for (var i = 0; i < children.length; i++) {\n elementClassName = children[i].getAttribute('class') || '';\n parentClassName = children[i].parentNode.getAttribute('class') || '';\n if (elementClassName.indexOf(className) === -1 &&\n parentClassName.indexOf(className) === -1 && visibility) {\n this.addSvgClass(children[i], this.unselected);\n }\n else {\n selectElement = children[i];\n this.removeSvgClass(children[i], this.unselected);\n }\n }\n if (this.control.legendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + className.split('_series_')[1]);\n if (legendShape) {\n elementClassName = selectElement.getAttribute('class') || '';\n parentClassName = selectElement.parentNode.getAttribute('class') || '';\n if (elementClassName.indexOf(className) === -1 && parentClassName.indexOf(className) === -1 && visibility) {\n this.addSvgClass(legendShape, this.unselected);\n }\n else {\n this.removeSvgClass(legendShape, this.unselected);\n }\n }\n }\n };\n Selection.prototype.applyStyles = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n if (element) {\n this.removeSvgClass(element.parentNode, this.unselected);\n this.removeSvgClass(element, this.unselected);\n this.addSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n Selection.prototype.getSelectionClass = function (id) {\n return this.generateStyle(this.control.series[this.indexFinder(id).series]);\n };\n Selection.prototype.removeStyles = function (elements) {\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n if (element) {\n this.removeSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n Selection.prototype.addOrRemoveIndex = function (indexes, index, add) {\n for (var i = 0; i < indexes.length; i++) {\n if (this.toEquals(indexes[i], index, this.isSeriesMode)) {\n indexes.splice(i, 1);\n i--;\n }\n }\n if (add) {\n indexes.push(index);\n }\n };\n Selection.prototype.toEquals = function (first, second, checkSeriesOnly) {\n return ((first.series === second.series || (this.control.selectionMode === 'Cluster' && !checkSeriesOnly))\n && (checkSeriesOnly || (first.point === second.point)));\n };\n /**\n * To redraw the selected points.\n * @return {void}\n * @private\n */\n Selection.prototype.redrawSelection = function (chart, oldMode) {\n this.isSeriesMode = oldMode === 'Series';\n var selectedDataIndexes = extend([], this.selectedDataIndexes, null, true);\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n this.selectDataIndex(chart, selectedDataIndexes);\n };\n /** @private */\n Selection.prototype.legendSelection = function (chart, series) {\n var seriesStyle = this.generateStyle(chart.visibleSeries[series]);\n var selectedElements = document.getElementsByClassName(seriesStyle);\n this.isSeriesMode = chart.selectionMode === 'Series';\n var isBlurEffectNeeded = true;\n if (selectedElements.length > 0) {\n var elements = [];\n for (var i = 0; i < selectedElements.length; i++) {\n elements.push(selectedElements[i]);\n }\n this.removeStyles(elements);\n this.isSeriesMode = true;\n this.addOrRemoveIndex(this.selectedDataIndexes, new Index(series, NaN));\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n seriesStyle = this.generateStyle(series_1);\n if (document.getElementsByClassName(seriesStyle).length > 0) {\n for (var _b = 0, elements_3 = elements; _b < elements_3.length; _b++) {\n var element = elements_3[_b];\n this.checkSelectionElements(element, seriesStyle, true);\n }\n isBlurEffectNeeded = false;\n break;\n }\n }\n if (isBlurEffectNeeded) {\n this.isSeriesMode = chart.selectionMode === 'Series';\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n }\n else {\n var seriesElements = this.getSeriesElements(chart.visibleSeries[series]);\n for (var _c = 0, seriesElements_1 = seriesElements; _c < seriesElements_1.length; _c++) {\n var seriesElement = seriesElements_1[_c];\n this.checkSelectionElements(seriesElement, seriesStyle, false);\n }\n this.isSeriesMode = true;\n this.selection(chart, new Index(series, NaN), seriesElements);\n this.isSeriesMode = chart.selectionMode === 'Series';\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n };\n Selection.prototype.getSeriesElements = function (series) {\n var seriesElements = [series.seriesElement];\n if (series.marker.visible && series.type !== 'Scatter' && series.type !== 'Bubble' && !series.isRectSeries) {\n seriesElements.push(series.symbolElement);\n }\n return seriesElements;\n };\n Selection.prototype.indexFinder = function (id) {\n var ids = ['NaN', 'NaN'];\n if (id.indexOf('SeriesGroup') > -1) {\n ids = id.split('SeriesGroup');\n ids[0] = ids[1];\n }\n else if (id.indexOf('SymbolGroup') > -1) {\n ids = id.split('SymbolGroup');\n ids[0] = ids[1];\n }\n else if (id.indexOf('_Point_') > -1) {\n ids = id.split('_Series_')[1].split('_Point_');\n }\n else if (id.indexOf('_Series_') > -1) {\n ids[0] = id.split('_Series_')[1];\n }\n return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n };\n /**\n * Drag selection that returns the selected data.\n * @return {void}\n * @private\n */\n Selection.prototype.calculateDragSelectedElements = function (chart, dragRect) {\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n var rect = new Rect(dragRect.x, dragRect.y, dragRect.width, dragRect.height);\n var axisOffset = new ChartLocation(chart.chartAxisLayoutPanel.seriesClipRect.x, chart.chartAxisLayoutPanel.seriesClipRect.y);\n this.removeOffset(rect, axisOffset);\n var points;\n var index;\n var selectedPointValues = [];\n var selectedSeriesValues = [];\n this.isSeriesMode = false;\n var symbolLocation;\n var _loop_1 = function (series) {\n if (series.visible) {\n points = series.points;\n selectedPointValues = [];\n var xAxisOffset_1;\n var yAxisOffset_1;\n if ((chart.isTransposed || series.type.indexOf('Bar') !== -1) &&\n !(chart.isTransposed && series.type.indexOf('Bar') !== -1)) {\n xAxisOffset_1 = series.xAxis.rect.y - axisOffset.y;\n yAxisOffset_1 = series.yAxis.rect.x - axisOffset.x;\n }\n else {\n xAxisOffset_1 = series.xAxis.rect.x - axisOffset.x;\n yAxisOffset_1 = series.yAxis.rect.y - axisOffset.y;\n }\n for (var j = 0; j < points.length; j++) {\n var yValue = series.type !== 'RangeArea' ? points[j].yValue :\n points[j].regions[0].y;\n var isCurrentPoint = void 0;\n if (series.type === 'BoxAndWhisker') {\n isCurrentPoint = points[j].regions.some(function (region) {\n return withInBounds(region.x + xAxisOffset_1, region.y + yAxisOffset_1, rect);\n });\n }\n else {\n isCurrentPoint = points[j].symbolLocations.some(function (location) {\n return location && withInBounds(location.x + xAxisOffset_1, location.y + yAxisOffset_1, rect);\n });\n }\n if (isCurrentPoint && series.category !== 'Indicator') {\n index = new Index(series.index, points[j].index);\n this_1.selection(chart, index, this_1.findElements(chart, series, index));\n selectedPointValues.push({ x: points[j].xValue.toString(), y: yValue });\n }\n if (isCurrentPoint && series.type === 'RangeArea') {\n selectedPointValues.push({ x: points[j].xValue.toString(), y: points[j].regions[0].y });\n }\n }\n selectedSeriesValues.push(selectedPointValues);\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n _loop_1(series);\n }\n this.blurEffect(chart.element.id, chart.visibleSeries);\n this.rectPoints = new Rect(dragRect.x, dragRect.y, dragRect.width, dragRect.height);\n this.createCloseButton((dragRect.x + dragRect.width), dragRect.y);\n var args = {\n name: dragComplete,\n selectedDataValues: selectedSeriesValues,\n cancel: false\n };\n chart.trigger(dragComplete, args);\n };\n Selection.prototype.removeOffset = function (rect, clip) {\n rect.x -= clip.x;\n rect.y -= clip.y;\n };\n /**\n * Method to draw dragging rect.\n * @return {void}\n * @private\n */\n Selection.prototype.drawDraggingRect = function (chart, dragRect) {\n var cartesianLayout = chart.chartAxisLayoutPanel.seriesClipRect;\n switch (chart.selectionMode) {\n case 'DragX':\n dragRect.y = cartesianLayout.y;\n dragRect.height = cartesianLayout.height;\n break;\n case 'DragY':\n dragRect.x = cartesianLayout.x;\n dragRect.width = cartesianLayout.width;\n break;\n }\n if (dragRect.width < 5 || dragRect.height < 5) {\n return null;\n }\n var element = getElement(this.draggedRect);\n if (this.closeIcon) {\n removeElement(this.closeIconId);\n }\n if (element) {\n this.setAttributes(element, dragRect);\n }\n else {\n var dragGroup = chart.renderer.createGroup({ id: this.draggedRectGroup });\n chart.svgObject.appendChild(dragGroup);\n element = chart.renderer.drawRectangle(new RectOption(this.draggedRect, chart.themeStyle.selectionRectFill, { color: chart.themeStyle.selectionRectStroke, width: 1 }, 1, dragRect));\n element.setAttribute('style', 'cursor:move;');\n dragGroup.appendChild(element);\n }\n };\n Selection.prototype.createCloseButton = function (x, y) {\n var closeIcon = this.chart.renderer.createGroup({\n id: this.closeIconId,\n style: 'cursor:pointer; visibility: visible;'\n });\n closeIcon.appendChild(this.chart.renderer.drawCircle(new CircleOption(this.closeIconId + '_circle', '#FFFFFF', { color: this.chart.themeStyle.selectionCircleStroke, width: 1 }, 1, x, y, 10)));\n var direction = 'M ' + (x - 4) + ' ' + (y - 4) + ' L ' + (x + 4) + ' ' + (y + 4) + ' M ' + (x - 4) + ' ' + (y + 4) +\n ' L ' + (x + 4) + ' ' + (y - 4);\n closeIcon.appendChild(this.chart.renderer.drawPath({\n id: this.closeIconId + '_cross', d: direction,\n stroke: this.chart.themeStyle.selectionCircleStroke,\n 'stroke-width': 2, fill: this.chart.themeStyle.selectionCircleStroke\n }));\n this.closeIcon = closeIcon;\n getElement(this.draggedRectGroup).appendChild(closeIcon);\n };\n /**\n * Method to remove dragged element.\n * @return {void}\n * @private\n */\n Selection.prototype.removeDraggedElements = function (chart, event) {\n if ((event.target.id.indexOf(this.closeIconId) > -1) && (event.type.indexOf('move') === -1)) {\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n remove(getElement(this.draggedRectGroup));\n this.changeCursorStyle(false, chart.svgObject, 'auto');\n this.rectPoints = null;\n }\n };\n /**\n * Method to resize the drag rect.\n * @return {void}\n * @private\n */\n Selection.prototype.resizingSelectionRect = function (chart, location, tapped) {\n var rect = new Rect(this.rectPoints.x, this.rectPoints.y, this.rectPoints.width, this.rectPoints.height);\n var resize = this.findResizeMode(chart.svgObject, rect, location);\n if (this.resizing) {\n rect = getDraggedRectLocation(rect.x, rect.y, (rect.x + rect.width), (rect.y + rect.height), chart.chartAxisLayoutPanel.seriesClipRect);\n this.drawDraggingRect(chart, rect);\n this.dragRect = rect;\n }\n if (tapped) {\n this.resizing = resize;\n }\n };\n Selection.prototype.findResizeMode = function (chartSvgObject, rect, location) {\n var cursorStyle = 'se-resize';\n var resize = false;\n if (!this.resizing) {\n var resizeEdges = [new Rect(rect.x, (rect.y - 10), rect.width - 5, 20),\n new Rect((rect.x - 10), rect.y, 20, rect.height),\n new Rect(rect.x, (rect.y + rect.height - 10), rect.width - 10, 20),\n new Rect((rect.x + rect.width - 10), rect.y + 5, 20, rect.height - 15),\n new Rect((rect.x + rect.width - 10), (rect.y + rect.height - 10), 20, 20)]; //corner\n for (var i = 0; i < resizeEdges.length; i++) {\n if (withInBounds(location.x, location.y, resizeEdges[i])) {\n cursorStyle = (i === 4) ? cursorStyle : (i % 2 === 0) ? 'ns-resize' : 'ew-resize';\n resize = true;\n this.resizeMode = i;\n break;\n }\n }\n }\n else {\n var x = rect.x;\n var y = rect.y;\n var width = (location.x - x);\n var height = (location.y - y);\n switch (this.resizeMode) {\n case 0:\n height = Math.abs((rect.height + rect.y) - location.y);\n rect.y = Math.min((rect.height + rect.y), location.y);\n rect.height = height;\n break;\n case 1:\n width = Math.abs((rect.width + rect.x) - location.x);\n rect.x = Math.min((rect.width + rect.x), location.x);\n rect.width = width;\n break;\n case 2:\n rect.height = Math.abs(height);\n rect.y = Math.min(location.y, y);\n break;\n case 3:\n rect.width = Math.abs(width);\n rect.x = Math.min(location.x, x);\n break;\n case 4:\n rect.width = Math.abs(width);\n rect.height = Math.abs(height);\n rect.x = Math.min(location.x, x);\n rect.y = Math.min(location.y, y);\n break;\n }\n }\n this.changeCursorStyle(resize, getElement(this.draggedRect), cursorStyle);\n this.changeCursorStyle(resize, chartSvgObject, cursorStyle);\n return resize;\n };\n Selection.prototype.changeCursorStyle = function (isResize, rectelement, cursorStyle) {\n cursorStyle = isResize ? cursorStyle : (this.control.svgObject === rectelement) ? 'auto' : 'move';\n rectelement.setAttribute('style', 'cursor:' + cursorStyle + ';');\n };\n Selection.prototype.removeSelectedElements = function (chart, index, seriesCollection) {\n index.splice(0, index.length);\n var seriesElements;\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n seriesElements = this.getSeriesElements(series);\n this.removeStyles(seriesElements);\n for (var _a = 0, seriesElements_2 = seriesElements; _a < seriesElements_2.length; _a++) {\n var seriesElement = seriesElements_2[_a];\n this.removeStyles(this.getChildren(seriesElement));\n }\n }\n };\n Selection.prototype.setAttributes = function (ele, object) {\n var keys = Object.keys(object);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, object[key]);\n }\n };\n /**\n * Method to move the dragged rect.\n * @return {void}\n * @private\n */\n Selection.prototype.draggedRectMoved = function (chart, grabbedPoint, doDrawing) {\n var rect = new Rect(this.rectPoints.x, this.rectPoints.y, this.rectPoints.width, this.rectPoints.height);\n rect.x -= (grabbedPoint.x - chart.mouseX);\n rect.y -= (grabbedPoint.y - chart.mouseY);\n rect = getDraggedRectLocation(rect.x, rect.y, rect.x + rect.width, rect.height + rect.y, chart.chartAxisLayoutPanel.seriesClipRect);\n if (doDrawing) {\n this.drawDraggingRect(chart, rect);\n }\n else {\n this.calculateDragSelectedElements(chart, rect);\n }\n };\n /**\n * To complete the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.completeSelection = function (e) {\n var chart = this.chart;\n if (chart.selectionMode === 'None') {\n return;\n }\n if ((this.dragging || this.resizing) && this.dragRect.width > 5 && this.dragRect.height > 5) {\n this.calculateDragSelectedElements(chart, this.dragRect);\n }\n else if (this.rectGrabbing && this.rectPoints.width && this.rectPoints.height) {\n this.draggedRectMoved(chart, this.dragRect);\n }\n this.dragging = false;\n this.rectGrabbing = false;\n this.resizing = false;\n this.removeDraggedElements(chart, e);\n };\n Selection.prototype.getDragRect = function (chart, seriesClipRect) {\n return getDraggedRectLocation(chart.mouseDownX, chart.mouseDownY, chart.mouseX, chart.mouseY, seriesClipRect);\n };\n /** @private */\n Selection.prototype.dragStart = function (chart, seriesClipRect, mouseDownX, mouseDownY, event) {\n this.dragging = (chart.selectionMode.indexOf('Drag') > -1) && (chart.isDoubleTap || !chart.isTouch) &&\n chart.chartAreaType !== 'PolarRadar';\n if (this.dragging) {\n this.dragRect = new Rect(chart.mouseDownX, chart.mouseDownY, 0, 0);\n if (chart.mouseDownX < seriesClipRect.x || chart.mouseDownX > (seriesClipRect.x + seriesClipRect.width) ||\n chart.mouseDownY < seriesClipRect.y || chart.mouseDownY > (seriesClipRect.y + seriesClipRect.height)) {\n this.dragging = false;\n }\n }\n if (this.rectPoints) {\n this.dragRect = new Rect(chart.mouseDownX, chart.mouseDownY, 0, 0);\n this.resizingSelectionRect(chart, new ChartLocation(mouseDownX, mouseDownY), true);\n this.rectGrabbing = withInBounds(mouseDownX, mouseDownY, this.rectPoints);\n }\n };\n /** @private */\n Selection.prototype.mouseMove = function (event) {\n var chart = this.chart;\n if (chart.selectionMode === 'None') {\n return;\n }\n if (event.type === 'touchmove' && (Browser.isIos || Browser.isIos7) && this.dragging && event.preventDefault) {\n event.preventDefault();\n }\n var insideMoving = withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect);\n if (insideMoving) {\n if (this.rectGrabbing && !this.resizing) {\n this.draggedRectMoved(chart, this.dragRect, true);\n }\n else if (this.dragging && !this.resizing) {\n this.dragRect = this.getDragRect(chart, chart.chartAxisLayoutPanel.seriesClipRect);\n this.drawDraggingRect(chart, this.dragRect);\n }\n if (this.rectPoints) {\n this.resizingSelectionRect(chart, new ChartLocation(chart.mouseX, chart.mouseY));\n }\n }\n else {\n this.completeSelection(event);\n }\n };\n /**\n * Get module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.destroy = function (chart) {\n this.removeEventListener();\n // Destroy method performed here\n };\n return Selection;\n}(BaseSelection));\nexport { Selection };\n","import { ChartLocation, Rect, TextOption, RectOption, isCollide } from '../../common/utils/helper';\nimport { markerAnimate, appendChildElement } from '../../common/utils/helper';\nimport { getLabelText, measureText, convertHexToColor, calculateRect, textElement, colorNameToHex } from '../../common/utils/helper';\nimport { textRender } from '../../common/model/constants';\nimport { createTemplate, getFontStyle, getElement, measureElementRect, templateAnimate, withIn } from '../../common/utils/helper';\nimport { createElement, getValue, extend } from '@syncfusion/ej2-base';\nimport { getPoint } from '../../common/utils/helper';\n/**\n * `DataLabel` module is used to render data label for the data point.\n */\nvar DataLabel = /** @class */ (function () {\n /**\n * Constructor for the data label module.\n * @private\n */\n function DataLabel(chart) {\n this.errorHeight = 0;\n this.chart = chart;\n }\n DataLabel.prototype.initPrivateVariables = function (series, marker) {\n var transform;\n var render = series.chart.renderer;\n var index = (series.index === undefined) ? series.category : series.index;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.dataLabel.visible) {\n series.shapeElement = render.createGroup({\n 'id': this.chart.element.id + 'ShapeGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + index + ')'\n });\n series.textElement = render.createGroup({\n 'id': this.chart.element.id + 'TextGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + index + ')'\n });\n }\n this.markerHeight = ((series.type === 'Scatter' || marker.visible)) ? (marker.height / 2) : 0;\n this.commonId = this.chart.element.id + '_Series_' + index + '_Point_';\n this.calculateErrorHeight(series, series.marker.dataLabel.position);\n this.chartBackground = this.chart.chartArea.background === 'trasparent' ?\n this.chart.background || this.chart.themeStyle.background : this.chart.chartArea.background;\n };\n DataLabel.prototype.calculateErrorHeight = function (series, position) {\n if (!series.errorBar.visible) {\n return null;\n }\n else if (series.errorBar.visible && this.chart.chartAreaType !== 'PolarRadar') {\n var direction = series.errorBar.direction;\n var positiveHeight = this.chart.errorBarModule.positiveHeight;\n var negativeHeight = this.chart.errorBarModule.negativeHeight;\n if (this.isRectSeries(series)) {\n if (position === 'Top' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Outer' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Plus') {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n else {\n if (position === 'Top' || position === 'Outer' || position === 'Auto') {\n if ((direction === 'Both' || direction === 'Plus') && (!series.chart.isTransposed)) {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Bottom' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n }\n else {\n this.errorHeight = 0;\n }\n };\n DataLabel.prototype.isRectSeries = function (series) {\n return series.isRectSeries || series.type === 'RangeArea';\n };\n /**\n * Render the data label for series.\n * @return {void}\n */\n DataLabel.prototype.render = function (series, chart, dataLabel) {\n var _this = this;\n // initialize the private variable\n this.initPrivateVariables(series, series.marker);\n var rect;\n var rgbValue;\n var contrast;\n var argsData;\n var border;\n var textSize;\n this.inverted = chart.requireInvertedAxis;\n this.yAxisInversed = series.yAxis.isInversed;\n var redraw = chart.redraw;\n var templateId = chart.element.id + '_Series_' +\n (series.index === undefined ? series.category : series.index) + '_DataLabelCollections';\n var element = createElement('div', {\n id: templateId\n });\n // Data label point iteration started\n series.points.map(function (point, index) {\n _this.margin = dataLabel.margin;\n var labelText = [];\n var labelLength;\n var clip = series.clipRect;\n border = { width: dataLabel.border.width, color: dataLabel.border.color };\n var argsFont = (extend({}, getValue('properties', dataLabel.font), null, true));\n if ((point.symbolLocations.length && point.symbolLocations[0]) ||\n (series.type === 'BoxAndWhisker' && point.regions.length)) {\n labelText = getLabelText(point, series, chart);\n labelLength = labelText.length;\n for (var i = 0; i < labelLength; i++) {\n argsData = {\n cancel: false, name: textRender, series: series,\n point: point, text: labelText[i], border: border,\n color: dataLabel.fill, template: dataLabel.template, font: argsFont\n };\n chart.trigger(textRender, argsData);\n if (!argsData.cancel) {\n _this.fontBackground = argsData.color;\n _this.isDataLabelShape(argsData);\n _this.markerHeight = series.type === 'Bubble' ? (point.regions[0].height / 2) : _this.markerHeight;\n if (argsData.template !== null) {\n _this.createDataLabelTemplate(element, series, dataLabel, point, argsData, i, redraw);\n }\n else {\n textSize = measureText(argsData.text, dataLabel.font);\n rect = _this.calculateTextPosition(point, series, textSize, dataLabel, i);\n if (!isCollide(rect, chart.dataLabelCollections, clip)) {\n chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n if (_this.isShape) {\n series.shapeElement.appendChild(chart.renderer.drawRectangle(new RectOption(_this.commonId + index + '_TextShape_' + i, argsData.color, argsData.border, dataLabel.opacity, rect, dataLabel.rx, dataLabel.ry)));\n }\n // Checking the font color\n rgbValue = convertHexToColor(colorNameToHex(_this.fontBackground));\n contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n textElement(new TextOption(_this.commonId + index + '_Text_' + i, rect.x + _this.margin.left + textSize.width / 2, rect.y + _this.margin.top + textSize.height * 3 / 4, 'middle', argsData.text, 'rotate(0,' + (rect.x) + ',' + (rect.y) + ')', 'auto'), argsData.font, argsData.font.color ||\n ((contrast >= 128 || series.type === 'Hilo') ? 'black' : 'white'), series.textElement, false, redraw, true);\n }\n }\n }\n }\n }\n });\n if (element.childElementCount) {\n appendChildElement(getElement(chart.element.id + '_Secondary_Element'), element, chart.redraw);\n }\n };\n /**\n * Render the data label template.\n * @return {void}\n * @private\n */\n DataLabel.prototype.createDataLabelTemplate = function (parentElement, series, dataLabel, point, data, labelIndex, redraw) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n var clip = series.clipRect;\n var childElement = createTemplate(createElement('div', {\n id: this.chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index) + '_DataLabel_'\n + point.index + (labelIndex ? ('_' + labelIndex) : ''),\n styles: 'position: absolute;background-color:' + data.color + ';' +\n getFontStyle(dataLabel.font) + ';border:' + data.border.width + 'px solid ' + data.border.color + ';'\n }), point.index, data.template, this.chart, point, series);\n var elementRect = measureElementRect(childElement, redraw);\n var rect = this.calculateTextPosition(point, series, { width: elementRect.width, height: elementRect.height }, dataLabel, labelIndex);\n childElement.style.left = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.x) + rect.x) + 'px';\n childElement.style.top = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.y) + rect.y) + 'px';\n var rgbValue = convertHexToColor(colorNameToHex(this.fontBackground));\n var vAxis = series.chart.requireInvertedAxis ? series.xAxis : series.yAxis;\n var hAxis = series.chart.requireInvertedAxis ? series.yAxis : series.xAxis;\n childElement.style.color = dataLabel.font.color ||\n ((Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000)) >= 128 ? 'black' : 'white');\n if (childElement.childElementCount && !isCollide(rect, this.chart.dataLabelCollections, clip)\n && (series.seriesType !== 'XY' || point.yValue === undefined || withIn(point.yValue, series.yAxis.visibleRange) ||\n (series.type.indexOf('100') > -1 && withIn(series.stackedValues.endValues[point.index], series.yAxis.visibleRange)))\n && withIn(point.xValue, series.xAxis.visibleRange) && parseFloat(childElement.style.top) >= vAxis.rect.y &&\n parseFloat(childElement.style.left) >= hAxis.rect.x && parseFloat(childElement.style.top) <= vAxis.rect.y + vAxis.rect.height &&\n parseFloat(childElement.style.left) <= hAxis.rect.x + hAxis.rect.width) {\n this.chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n appendChildElement(parentElement, childElement, redraw, true, 'left', 'top');\n if (series.animation.enable && this.chart.animateSeries) {\n this.doDataLabelAnimation(series, childElement);\n }\n }\n };\n DataLabel.prototype.calculateTextPosition = function (point, series, textSize, dataLabel, labelIndex) {\n var labelRegion = labelIndex > 1 ? (series.type === 'Candle') ? point.regions[1] : point.regions[0] : point.regions[0];\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var location;\n location = this.getLabelLocation(point, series, textSize, labelIndex);\n var padding = 5;\n var clipRect = series.clipRect;\n var rect;\n // calculating alignment\n if (!this.chart.requireInvertedAxis || !this.isRectSeries(series) || series.type === 'BoxAndWhisker') {\n this.locationX = location.x;\n var alignmentValue = textSize.height + (this.borderWidth * 2) + this.markerHeight +\n this.margin.bottom + this.margin.top + padding;\n location.y = (dataLabel.position === 'Auto') ? location.y :\n this.calculateAlignment(alignmentValue, location.y, dataLabel.alignment, this.isRectSeries(series) ? point.yValue < 0 : false);\n // calculating position\n location.y = (!this.isRectSeries(series) || series.type === 'BoxAndWhisker') ?\n this.calculatePathPosition(location.y, dataLabel.position, series, point, textSize, labelIndex) :\n this.calculateRectPosition(location.y, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n if (this.isRectSeries(series) && this.chart.chartAreaType === 'PolarRadar') {\n location = this.calculatePolarRectPosition(location, dataLabel.position, series, point, textSize, labelIndex);\n }\n }\n else {\n this.locationY = location.y;\n var alignmentValue = textSize.width + this.borderWidth + this.margin.left + this.margin.right - padding;\n location.x = dataLabel.position === 'Auto' ? location.x :\n this.calculateAlignment(alignmentValue, location.x, dataLabel.alignment, point.yValue < 0);\n location.x = this.calculateRectPosition(location.x, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n }\n rect = calculateRect(location, textSize, this.margin);\n // Checking the condition whether data Label has been exist the clip rect\n if (!((rect.y > clipRect.height) || (rect.x > clipRect.width) ||\n (rect.x + rect.width < 0) || (rect.y + rect.height < 0))) {\n rect.x = rect.x < 0 ? padding : rect.x;\n rect.y = rect.y < 0 ? padding : rect.y;\n rect.x -= (rect.x + rect.width) > clipRect.width ? (rect.x + rect.width) - clipRect.width + padding : 0;\n rect.y -= (rect.y + rect.height) > clipRect.height ? (rect.y + rect.height) - clipRect.height + padding : 0;\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n }\n return rect;\n };\n // Calculation label location for polar column draw types\n DataLabel.prototype.calculatePolarRectPosition = function (location, position, series, point, size, labelIndex) {\n var padding = 5;\n var columnRadius;\n var angle = (point.regionData.startAngle - 0.5 * Math.PI) + (point.regionData.endAngle - point.regionData.startAngle) / 2;\n if (labelIndex === 0) {\n columnRadius = point.regionData.radius < point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n else {\n columnRadius = point.regionData.radius > point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n if (series.drawType.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.drawType.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n if (position === 'Outer') {\n columnRadius = labelIndex === 0 ? columnRadius + 2 * padding + this.markerHeight :\n columnRadius - 2 * padding - this.markerHeight;\n }\n else if (position === 'Middle') {\n columnRadius = columnRadius / 2 + padding;\n }\n else if (position === 'Top') {\n columnRadius = labelIndex === 0 ? columnRadius - 2 * padding - this.markerHeight :\n columnRadius + 2 * padding + this.markerHeight;\n }\n else if (position === 'Bottom') {\n columnRadius = padding;\n }\n else {\n if (labelIndex === 0) {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius - padding :\n series.drawType === 'StackingColumn' ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n }\n else {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius + padding : columnRadius - 2 * padding;\n }\n }\n location.x = series.clipRect.width / 2 + series.clipRect.x + columnRadius * Math.cos(angle);\n location.y = series.clipRect.height / 2 + series.clipRect.y + columnRadius * Math.sin(angle);\n return location;\n };\n /**\n * Get the label location\n */\n DataLabel.prototype.getLabelLocation = function (point, series, textSize, labelIndex) {\n var location = new ChartLocation(0, 0);\n var labelRegion = (series.type === 'Candle' && labelIndex > 1) ? point.regions[1] : point.regions[0];\n if (series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var xAxis = series.xAxis;\n var yAxis = series.yAxis;\n var isInverted = series.chart.requireInvertedAxis;\n if (series.type === 'BoxAndWhisker') {\n this.markerHeight = 0;\n switch (labelIndex) {\n case 0:\n location = getPoint(point.xValue, point.median, xAxis, yAxis, isInverted);\n break;\n case 1:\n location = getPoint(point.xValue, point.maximum, xAxis, yAxis, isInverted);\n break;\n case 2:\n location = getPoint(point.xValue, point.minimum, xAxis, yAxis, isInverted);\n break;\n case 3:\n location = getPoint(point.xValue, point.upperQuartile, xAxis, yAxis, isInverted);\n break;\n case 4:\n location = getPoint(point.xValue, point.lowerQuartile, xAxis, yAxis, isInverted);\n break;\n default: {\n location = getPoint(point.xValue, point.outliers[labelIndex - 5], xAxis, yAxis, isInverted);\n this.markerHeight = series.marker.height / 2;\n break;\n }\n }\n if (isInverted) {\n location.y = point.regions[0].y + (point.regions[0].height / 2);\n }\n else {\n location.x = point.regions[0].x + (point.regions[0].width / 2);\n }\n }\n else if (labelIndex === 0 || labelIndex === 1) {\n location = new ChartLocation(point.symbolLocations[0].x, point.symbolLocations[0].y);\n }\n else if ((labelIndex === 2 || labelIndex === 3) && series.type === 'Candle') {\n location = new ChartLocation(point.symbolLocations[1].x, point.symbolLocations[1].y);\n }\n else if (isInverted) {\n location = { x: labelRegion.x + (labelRegion.width) / 2, y: labelRegion.y };\n }\n else {\n location = { x: labelRegion.x + labelRegion.width, y: labelRegion.y + (labelRegion.height) / 2 };\n }\n //Aligning the label at the beginning of the tick, when tick size is less than text size\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n if (series.chart.requireInvertedAxis) {\n var height = labelRegion.height;\n location.y = labelRegion.y + height / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n else {\n var width = labelRegion.width;\n location.x = labelRegion.x + width / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n }\n return location;\n };\n DataLabel.prototype.calculateRectPosition = function (labelLocation, rect, isMinus, position, series, textSize, labelIndex, point) {\n if (series.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n var padding = 5;\n var margin = this.margin;\n var textLength = !this.inverted ? textSize.height : textSize.width;\n var extraSpace = this.borderWidth + textLength / 2 + padding;\n if (series.type.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.type.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n else if (series.type === 'Waterfall') {\n position = position === 'Auto' ? 'Middle' : position;\n }\n switch (position) {\n case 'Bottom':\n labelLocation = !this.inverted ?\n isMinus ? (labelLocation - rect.height + extraSpace + margin.top) :\n (labelLocation + rect.height - extraSpace - margin.bottom) :\n isMinus ? (labelLocation + rect.width - extraSpace - margin.left) :\n (labelLocation - rect.width + extraSpace + margin.right);\n break;\n case 'Middle':\n labelLocation = labelLocation = !this.inverted ?\n (isMinus ? labelLocation - (rect.height / 2) : labelLocation + (rect.height / 2)) :\n (isMinus ? labelLocation + (rect.width / 2) : labelLocation - (rect.width / 2));\n break;\n case 'Auto':\n labelLocation = this.calculateRectActualPosition(labelLocation, rect, isMinus, series, textSize, labelIndex, point);\n break;\n default:\n extraSpace += this.errorHeight;\n labelLocation = this.calculateTopAndOuterPosition(labelLocation, rect, position, series, labelIndex, extraSpace, isMinus);\n break;\n }\n var check = !this.inverted ? (labelLocation < rect.y || labelLocation > rect.y + rect.height) :\n (labelLocation < rect.x || labelLocation > rect.x + rect.width);\n this.fontBackground = check ?\n (this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground)\n : this.fontBackground === 'transparent' ? (point.color || series.interior) : this.fontBackground;\n return labelLocation;\n };\n DataLabel.prototype.calculatePathPosition = function (labelLocation, position, series, point, size, labelIndex) {\n var padding = 5;\n if ((series.type.indexOf('Area') > -1 && series.type !== 'RangeArea')\n && this.yAxisInversed && series.marker.dataLabel.position !== 'Auto') {\n position = position === 'Top' ? 'Bottom' : position === 'Bottom' ? 'Top' : position;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n switch (position) {\n case 'Top':\n case 'Outer':\n labelLocation = labelLocation - this.markerHeight - this.borderWidth - size.height / 2 - this.margin.bottom - padding -\n this.errorHeight;\n break;\n case 'Bottom':\n labelLocation = labelLocation + this.markerHeight + this.borderWidth + size.height / 2 + this.margin.top + padding +\n this.errorHeight;\n break;\n case 'Auto':\n labelLocation = this.calculatePathActualPosition(labelLocation, this.markerHeight, series, point, size, labelIndex);\n break;\n }\n return labelLocation;\n };\n DataLabel.prototype.isDataLabelShape = function (style) {\n this.isShape = (style.color !== 'transparent' || style.border.width > 0);\n this.borderWidth = style.border.width;\n if (!this.isShape) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n }\n };\n DataLabel.prototype.calculateRectActualPosition = function (labelLocation, rect, isMinus, series, size, labelIndex, point) {\n var location;\n var labelRect;\n var isOverLap = true;\n var position = 0;\n var collection = this.chart.dataLabelCollections;\n var finalPosition = series.type.indexOf('Range') !== -1 || series.type === 'Hilo' ? 2 : 4;\n while (isOverLap && position < finalPosition) {\n location = this.calculateRectPosition(labelLocation, rect, isMinus, this.getPosition(position), series, size, labelIndex, point);\n if (!this.inverted) {\n labelRect = calculateRect(new ChartLocation(this.locationX, location), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect) || labelRect.y > series.clipRect.height;\n }\n else {\n labelRect = calculateRect(new ChartLocation(location, this.locationY), size, this.margin);\n isOverLap = labelRect.x < 0 || isCollide(labelRect, collection, series.clipRect) ||\n labelRect.x + labelRect.width > series.clipRect.width;\n }\n position++;\n }\n return location;\n };\n // alignment calculation assigned here\n DataLabel.prototype.calculateAlignment = function (value, labelLocation, alignment, isMinus) {\n switch (alignment) {\n case 'Far':\n labelLocation = !this.inverted ? (isMinus ? labelLocation + value : labelLocation - value) :\n (isMinus ? labelLocation - value : labelLocation + value);\n break;\n case 'Near':\n labelLocation = !this.inverted ? (isMinus ? labelLocation - value : labelLocation + value) :\n (isMinus ? labelLocation + value : labelLocation - value);\n break;\n case 'Center':\n labelLocation = labelLocation;\n break;\n }\n return labelLocation;\n };\n //calculation for top and outer position of datalabel for rect series\n DataLabel.prototype.calculateTopAndOuterPosition = function (location, rect, position, series, index, extraSpace, isMinus) {\n var margin = this.margin;\n var top;\n switch (series.type) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'Hilo':\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n break;\n case 'Candle':\n top = (index === 0 || index === 2) && !this.yAxisInversed\n || (index === 1 || index === 3) && this.yAxisInversed;\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top, index > 1);\n break;\n case 'HiloOpenClose':\n if (index <= 1) {\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n }\n else {\n if (this.yAxisInversed) {\n location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n }\n else {\n location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n }\n }\n break;\n default:\n if ((isMinus && position === 'Top') || (!isMinus && position === 'Outer')) {\n location = !this.inverted ? location - extraSpace - margin.bottom - this.markerHeight :\n location + extraSpace + margin.left + this.markerHeight;\n }\n else {\n location = !this.inverted ? location + extraSpace + margin.top + this.markerHeight :\n location - extraSpace - margin.right - this.markerHeight;\n }\n break;\n }\n return location;\n };\n /**\n * Updates the label location\n */\n DataLabel.prototype.updateLabelLocation = function (position, location, extraSpace, margin, rect, top, inside) {\n if (inside === void 0) { inside = false; }\n if (!this.inverted) {\n if (top) {\n location = (position === 'Outer' && !inside) ? location - extraSpace - margin.bottom - this.markerHeight :\n location + extraSpace + margin.top + this.markerHeight;\n }\n else {\n location = (position === 'Outer' && !inside) ? location + rect.height + extraSpace + margin.top + this.markerHeight :\n location + rect.height - extraSpace - margin.bottom - this.markerHeight;\n }\n }\n else {\n if (top) {\n location = (position === 'Outer' && !inside) ? location + extraSpace + margin.left + this.markerHeight :\n location - extraSpace - margin.right - this.markerHeight;\n }\n else {\n location = (position === 'Outer' && !inside) ? location - rect.width - extraSpace - margin.right - this.markerHeight :\n location - rect.width + extraSpace + margin.left + this.markerHeight;\n }\n }\n return location;\n };\n DataLabel.prototype.calculatePathActualPosition = function (y, markerSize, series, point, size, labelIndex) {\n var points = series.points;\n var index = point.index;\n var yValue = points[index].yValue;\n var position;\n var nextPoint = points.length - 1 > index ? points[index + 1] : null;\n var previousPoint = index > 0 ? points[index - 1] : null;\n var yLocation;\n var isOverLap = true;\n var labelRect;\n var isBottom;\n var positionIndex;\n var collection = this.chart.dataLabelCollections;\n if (series.type === 'Bubble') {\n position = 'Top';\n }\n else if (series.type.indexOf('Step') > -1) {\n position = 'Top';\n if (index) {\n position = (!previousPoint || !previousPoint.visible || (yValue > previousPoint.yValue !== this.yAxisInversed)\n || yValue === previousPoint.yValue) ? 'Top' : 'Bottom';\n }\n }\n else if (series.type === 'BoxAndWhisker') {\n if (labelIndex === 1 || labelIndex === 3 || labelIndex > 4) {\n position = series.yAxis.isInversed ? 'Bottom' : 'Top';\n }\n else if (labelIndex === 2 || labelIndex === 4) {\n position = series.yAxis.isInversed ? 'Top' : 'Bottom';\n }\n else {\n isOverLap = false;\n position = 'Middle';\n yLocation = this.calculatePathPosition(y, position, series, point, size, labelIndex);\n }\n }\n else {\n if (index === 0) {\n position = (!nextPoint || !nextPoint.visible || yValue > nextPoint.yValue ||\n (yValue < nextPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else if (index === points.length - 1) {\n position = (!previousPoint || !previousPoint.visible || yValue > previousPoint.yValue ||\n (yValue < previousPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else {\n if (!nextPoint.visible && !(previousPoint && previousPoint.visible)) {\n position = 'Top';\n }\n else if (!nextPoint.visible || !previousPoint) {\n position = (nextPoint.yValue > yValue || (previousPoint && previousPoint.yValue > yValue)) ?\n 'Bottom' : 'Top';\n }\n else {\n var slope = (nextPoint.yValue - previousPoint.yValue) / 2;\n var intersectY = (slope * index) + (nextPoint.yValue - (slope * (index + 1)));\n position = !this.yAxisInversed ? intersectY < yValue ? 'Top' : 'Bottom' :\n intersectY < yValue ? 'Bottom' : 'Top';\n }\n }\n }\n isBottom = position === 'Bottom';\n positionIndex = ['Outer', 'Top', 'Bottom', 'Middle', 'Auto'].indexOf(position);\n while (isOverLap && positionIndex < 4) {\n yLocation = this.calculatePathPosition(y, this.getPosition(positionIndex), series, point, size, labelIndex);\n labelRect = calculateRect(new ChartLocation(this.locationX, yLocation), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect)\n || (labelRect.y + labelRect.height) > series.clipRect.height;\n positionIndex = isBottom ? positionIndex - 1 : positionIndex + 1;\n isBottom = false;\n }\n return yLocation;\n };\n /**\n * Animates the data label.\n * @param {Series} series - Data label of the series gets animated.\n * @return {void}\n */\n DataLabel.prototype.doDataLabelAnimation = function (series, element) {\n var shapeElements = series.shapeElement.childNodes;\n var textNode = series.textElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var location;\n var length = element ? 1 : textNode.length;\n var tempElement;\n for (var i = 0; i < length; i++) {\n tempElement = textNode[i];\n if (element) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n else {\n location = new ChartLocation((+tempElement.getAttribute('x')) + ((+tempElement.getAttribute('width')) / 2), (+tempElement.getAttribute('y')) + ((+tempElement.getAttribute('height')) / 2));\n markerAnimate(tempElement, delay, 200, series, null, location, true);\n if (shapeElements[i]) {\n tempElement = shapeElements[i];\n location = new ChartLocation((+tempElement.getAttribute('x')) + ((+tempElement.getAttribute('width')) / 2), (+tempElement.getAttribute('y')) + ((+tempElement.getAttribute('height')) / 2));\n markerAnimate(tempElement, delay, 200, series, null, location, true);\n }\n }\n }\n };\n DataLabel.prototype.getPosition = function (index) {\n return (['Outer', 'Top', 'Bottom', 'Middle', 'Auto'][index]);\n };\n /**\n * Get module name.\n */\n DataLabel.prototype.getModuleName = function () {\n // Returns the module name\n return 'DataLabel';\n };\n /**\n * To destroy the dataLabel for series.\n * @return {void}\n * @private\n */\n DataLabel.prototype.destroy = function (chart) {\n // Destroy method performed here\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { Mean, RectOption, pathAnimation, getElement, appendChildElement, appendClipElement } from '../../common/utils/helper';\nimport { getPoint, PathOption, sum, templateAnimate } from '../../common/utils/helper';\n/**\n * `ErrorBar` module is used to render the error bar for series.\n */\nvar ErrorBar = /** @class */ (function () {\n /**\n * Constructor for the error bar module.\n * @private\n */\n function ErrorBar(chart) {\n this.chart = chart;\n }\n /**\n * Render the error bar for series.\n * @return {void}\n */\n ErrorBar.prototype.render = function (series) {\n if (this.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n this.createElement(series, this.chart);\n this.renderErrorBar(series);\n };\n ErrorBar.prototype.renderErrorBar = function (series) {\n var seriesIndex = series.index;\n var symbolId;\n var capId;\n var errorbar = series.errorBar;\n var errorBarCap = series.errorBar.errorBarCap;\n var errorDirection = ['', ''];\n var redraw = series.chart.redraw;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.visible && point.symbolLocations[0]) {\n var errorX = 0;\n var errorY = 0;\n switch (errorbar.mode) {\n case 'Vertical':\n errorY = errorbar.verticalError;\n break;\n case 'Horizontal':\n errorX = errorbar.horizontalError;\n break;\n case 'Both':\n errorX = errorbar.horizontalError;\n errorY = errorbar.verticalError;\n break;\n }\n errorDirection = this['calculate' + errorbar.type + 'Value'](point, series, this.chart.requireInvertedAxis, errorX, errorY);\n symbolId = this.chart.element.id + '_Series_' + '_ErrorBarGroup_' + seriesIndex + '_Point_' + point.index;\n capId = this.chart.element.id + '_Series_' + '_ErrorBarCap_' + seriesIndex + '_Point_' + point.index;\n var shapeOption = new PathOption(symbolId, '', errorbar.width, errorbar.color || this.chart.themeStyle.errorBar, null, '', errorDirection[0]);\n var element = getElement(shapeOption.id);\n var previousDirection = element ? element.getAttribute('d') : null;\n series.errorBarElement.appendChild(this.chart.renderer.drawPath(shapeOption));\n pathAnimation(element, errorDirection[0], redraw, previousDirection);\n var capOption = new PathOption(capId, '', errorBarCap.width, errorBarCap.color || this.chart.themeStyle.errorBar, null, '', errorDirection[1]);\n element = getElement(capOption.id);\n previousDirection = element ? element.getAttribute('d') : null;\n appendChildElement(series.errorBarElement, this.chart.renderer.drawPath(capOption), redraw);\n pathAnimation(element, errorDirection[1], redraw, previousDirection);\n }\n }\n };\n // path calculation for error bar\n ErrorBar.prototype.findLocation = function (point, series, isInverted, x1, y1) {\n var errorbar = series.errorBar;\n var direction = errorbar.direction;\n var location = [];\n var stackedValue = series.stackedValues;\n var yValue = series.type.indexOf('Stacking') > -1 ? series.stackedValues.endValues[point.index] :\n (series.seriesType === 'HighLow' || series.seriesType === 'HighLowOpenClose') ? (series.points[point.index].high) :\n point.yValue;\n var startPoint = getPoint(point.xValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = errorbar.horizontalPositiveError : x1 : 0), yValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = errorbar.verticalPositiveError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(startPoint);\n if (series.isRectSeries) {\n var midPoint = point.symbolLocations[0];\n location.push(midPoint);\n }\n else {\n var midPoint = getPoint(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted);\n location.push(midPoint);\n }\n var endPoint = getPoint(point.xValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = errorbar.horizontalNegativeError : x1 : 0), yValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = errorbar.verticalNegativeError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(endPoint);\n // calculate error height for datalabel position alignment\n point.error = (errorbar.mode === 'Vertical') ? errorbar.verticalError : errorbar.horizontalError;\n this.negativeHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[1].x - location[2].x) :\n (location[2].y - location[1].y)) : 0;\n this.positiveHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[0].x - location[1].x) :\n (location[1].y - location[0].y)) : 0;\n return this.getErrorDirection(location[0], location[1], location[2], series, isInverted);\n };\n // calculations for eror bar types\n ErrorBar.prototype.calculateFixedValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var errorbar = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculatePercentageValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n errorX = (errorX / 100) * point.xValue;\n errorY = (errorY / 100) * point.yValue;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardDeviationValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = errorX * (getMean.horizontalSquareRoot + getMean.horizontalMean);\n errorY = errorY * (getMean.verticalSquareRoot + getMean.verticalMean);\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardErrorValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var length = series.points.length;\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = ((errorX * getMean.horizontalSquareRoot) / Math.sqrt(length));\n errorY = ((errorY * getMean.verticalSquareRoot) / Math.sqrt(length));\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateCustomValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var errorbar = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.getHorizontalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += 'M ' + start.x + ' ' + mid.y + ' L ' + end.x + ' ' + mid.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? 'M ' + (start.x) + ' ' + (mid.y - capLength) + ' L '\n + (start.x) + ' ' + (mid.y + capLength) : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? 'M ' + (end.x) + ' ' + (mid.y - capLength) + ' L '\n + (end.x) + ' ' + (mid.y + capLength) : ' ';\n return [path, capDirection];\n };\n ErrorBar.prototype.getVerticalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += 'M ' + mid.x + ' ' + start.y + ' L ' + mid.x + ' ' + end.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? 'M ' + (mid.x - capLength) + ' ' + start.y + ' L '\n + (mid.x + capLength) + ' ' + start.y : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? 'M ' + (mid.x - capLength) + ' ' + end.y + ' L '\n + (mid.x + capLength) + ' ' + end.y : '';\n return [path, capDirection];\n };\n ErrorBar.prototype.getBothDirection = function (start, mid, end, direction, errorMode, capLength) {\n var capDirection = '';\n var path = '';\n var pathH = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n var pathV = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n path = pathH[0].concat(pathV[0]);\n capDirection = pathH[1].concat(pathV[1]);\n return [path, capDirection];\n };\n ErrorBar.prototype.getErrorDirection = function (start, mid, end, series, isInverted) {\n var direction = series.errorBar.direction;\n var mode = series.errorBar.mode;\n var capLength = series.errorBar.errorBarCap.length;\n var path = '';\n var paths;\n var capDirection = '';\n var errorMode = mode;\n switch (mode) {\n case 'Both':\n errorMode = mode;\n break;\n case 'Horizontal':\n errorMode = (isInverted) ? 'Vertical' : mode;\n break;\n case 'Vertical':\n errorMode = (isInverted) ? 'Horizontal' : mode;\n break;\n }\n switch (errorMode) {\n case 'Horizontal':\n paths = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Vertical':\n paths = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Both':\n paths = this.getBothDirection(start, mid, end, direction, errorMode, capLength);\n break;\n }\n return [paths[0], paths[1]];\n };\n // mean calculation for standard deviation and standard error\n ErrorBar.prototype.meanCalculation = function (series, mode) {\n var sumOfX = 0;\n var sumOfY = 0;\n var verticalMean = 0;\n var horizontalMean = 0;\n var verStandardMean;\n var horStandardMean;\n var verSquareRoot;\n var horSquareRoot;\n var length = series.points.length;\n switch (mode) {\n case 'Vertical':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n break;\n case 'Horizontal':\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n break;\n case 'Both':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n }\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (mode === 'Vertical') {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n }\n else if (mode === 'Horizontal') {\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n else {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n }\n verStandardMean = sumOfY / (length - 1);\n verSquareRoot = Math.sqrt(sumOfY / (length - 1));\n horStandardMean = sumOfX / (length - 1);\n horSquareRoot = Math.sqrt(sumOfX / (length - 1));\n return new Mean(verStandardMean, verSquareRoot, horStandardMean, horSquareRoot, verticalMean, horizontalMean);\n };\n ErrorBar.prototype.createElement = function (series, chart) {\n var explodeValue = 5;\n var transform = chart.chartAreaType === 'Cartesian' ?\n 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n var markerHeight = (series.marker.height + explodeValue) / 2;\n var markerWidth = (series.marker.width + explodeValue) / 2;\n if (chart.chartAreaType === 'Cartesian') {\n var options = new RectOption(chart.element.id + '_ChartErrorBarClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2, height: series.clipRect.height + markerHeight * 2\n });\n series.errorBarElement = chart.renderer.createGroup({\n 'id': chart.element.id + 'ErrorBarGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + chart.element.id + '_ChartErrorBarClipRect_' + series.index + ')'\n });\n series.errorBarElement.appendChild(appendClipElement(chart.redraw, options, chart.renderer));\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ErrorBar.prototype.doErrorBarAnimation = function (series) {\n var errorBarElements = series.errorBarElement.childNodes;\n if (!errorBarElements) {\n return null;\n }\n var delay = series.animation.delay + series.animation.duration;\n var j = 1;\n while (j < errorBarElements.length) {\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations[0]) {\n continue;\n }\n errorBarElements[j].style.visibility = 'hidden';\n templateAnimate(errorBarElements[j], delay, 350, series.chart.requireInvertedAxis ? 'SlideLeftIn' : 'SlideBottomIn', false);\n }\n j++;\n }\n };\n /**\n * Get module name.\n */\n ErrorBar.prototype.getModuleName = function () {\n // Returns the module name\n return 'ErrorBar';\n };\n /**\n * To destroy the errorBar for series.\n * @return {void}\n * @private\n */\n ErrorBar.prototype.destroy = function (chart) {\n // Destroy method performed here\n };\n return ErrorBar;\n}());\nexport { ErrorBar };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * Chart legend\n */\nimport { remove, Browser } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { LegendOptions, BaseLegend } from '../../common/legend/legend';\nimport { measureText, textTrim, removeElement, getElement } from '../../common/utils/helper';\nimport { legendRender } from '../../common/model/constants';\n/**\n * `Legend` module is used to render legend for the chart.\n */\nvar Legend = /** @class */ (function (_super) {\n __extends(Legend, _super);\n function Legend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for legend module.\n */\n Legend.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on('click', this.click, this);\n this.chart.on(Browser.touchEndEvent, this.mouseEnd, this);\n };\n /**\n * UnBinding events for legend module.\n */\n Legend.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('click', this.click);\n this.chart.off(Browser.touchEndEvent, this.mouseEnd);\n };\n /**\n * To handle mosue move for legend module\n */\n Legend.prototype.mouseMove = function (e) {\n if (this.chart.legendSettings.visible && !this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * To handle mosue end for legend module\n */\n Legend.prototype.mouseEnd = function (e) {\n if (this.chart.legendSettings.visible && this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * Get the legend options.\n * @return {void}\n * @private\n */\n Legend.prototype.getLegendOptions = function (visibleSeriesCollection, chart) {\n this.legendCollections = [];\n var seriesType;\n for (var _i = 0, visibleSeriesCollection_1 = visibleSeriesCollection; _i < visibleSeriesCollection_1.length; _i++) {\n var series = visibleSeriesCollection_1[_i];\n if (series.category !== 'Indicator') {\n seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n series.type;\n this.legendCollections.push(new LegendOptions(series.name, series.interior, series.legendShape, series.visible, seriesType, series.marker.shape, series.marker.visible));\n }\n }\n };\n /** @private */\n Legend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n var padding = legend.padding;\n var extraHeight = 0;\n var extraWidth = 0;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.height += extraHeight;\n legendBounds.width += extraWidth;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var rowWidth = 0;\n var legendWidth = 0;\n var columnHeight = 0;\n var rowCount = 0;\n var legendEventArgs;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle).height, legend.shapeHeight);\n var render = false;\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n legendEventArgs = {\n fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n markerShape: legendOption.markerShape, name: legendRender, cancel: false\n };\n this.chart.trigger(legendRender, legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.markerShape = legendEventArgs.markerShape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + legendOption.textSize.width + padding;\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth) || this.isVertical) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding - (this.isVertical ? 0 : legendWidth)));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = this.isVertical ? 0 : legendWidth;\n rowCount++;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n }\n }\n }\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding);\n this.isPaging = legendBounds.height < columnHeight;\n this.totalPages = rowCount;\n if (render) {\n this.setBounds(Math.max((rowWidth + padding), maximumWidth), columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /** @private */\n Legend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n var previousBound = (prevLegend.location.x + textPadding + prevLegend.textSize.width);\n if ((previousBound + (legendOption.textSize.width + textPadding)) > (rect.x + rect.width + this.legend.shapeWidth / 2) ||\n this.isVertical) {\n legendOption.location.x = start.x;\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.maxItemHeight + padding;\n }\n else {\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n legendOption.location.y = prevLegend.location.y;\n }\n var availwidth = (this.legendBounds.x + this.legendBounds.width) - (legendOption.location.x +\n textPadding - this.legend.shapeWidth / 2);\n legendOption.text = textTrim(+availwidth.toFixed(4), legendOption.text, this.legend.textStyle);\n };\n /** @private */\n Legend.prototype.LegendClick = function (seriesIndex) {\n var chart = this.chart;\n var series = chart.visibleSeries[seriesIndex];\n var legend = this.legendCollections[seriesIndex];\n var selectedDataIndexes = [];\n if (chart.selectionModule) {\n selectedDataIndexes = extend([], chart.selectionModule.selectedDataIndexes, null, true);\n }\n if (chart.legendSettings.toggleVisibility) {\n if (!series.visible) {\n series.visible = true;\n }\n else {\n series.visible = false;\n }\n legend.visible = (series.visible);\n if (chart.svgObject.childNodes.length > 0 && !chart.enableAnimation) {\n while (chart.svgObject.lastChild) {\n chart.svgObject.removeChild(chart.svgObject.lastChild);\n }\n remove(chart.svgObject);\n }\n chart.animateSeries = false;\n chart.redraw = chart.enableAnimation;\n removeElement(getElement(chart.element.id + '_Secondary_Element').querySelectorAll('.ejSVGTooltip')[0]);\n this.redrawSeriesElements(series, chart);\n chart.removeSvg();\n chart.refreshAxis();\n series.refreshAxisLabel();\n this.refreshSeries(chart.visibleSeries);\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart });\n if (selectedDataIndexes.length > 0) {\n chart.selectionModule.selectedDataIndexes = selectedDataIndexes;\n chart.selectionModule.redrawSelection(chart, chart.selectionMode);\n }\n chart.redraw = false;\n }\n else if (chart.selectionModule) {\n chart.selectionModule.legendSelection(chart, seriesIndex);\n }\n };\n Legend.prototype.redrawSeriesElements = function (series, chart) {\n if (!chart.redraw) {\n return null;\n }\n removeElement(chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index) +\n '_DataLabelCollections');\n };\n Legend.prototype.refreshSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series.position = undefined;\n }\n };\n /**\n * To show the tooltip for the trimmed text in legend.\n * @return {void}\n */\n Legend.prototype.click = function (event) {\n if (!this.chart.legendSettings.visible) {\n return;\n }\n var targetId = event.target.id;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_marker_',\n this.legendID + '_shape_'];\n var seriesIndex;\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n seriesIndex = parseInt(targetId.split(id)[1], 10);\n this.LegendClick(seriesIndex);\n break;\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n };\n /**\n * Get module name\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (chart) {\n this.removeEventListener();\n };\n return Legend;\n}(BaseLegend));\nexport { Legend };\n","import { createTemplate, measureElementRect, logBase, removeElement } from '../utils/helper';\nimport { ChartLocation, stringToNumber, appendElement, withIn, Rect } from '../utils/helper';\nimport { getPoint } from '../utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { annotationRender } from '../model/constants';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Annotation Module handles the Annotation for chart and accumulation series.\n */\nvar AnnotationBase = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n * @param control\n */\n function AnnotationBase(control) {\n this.control = control;\n }\n /**\n * Method to render the annotation for chart and accumulation series.\n * @private\n * @param annotation\n * @param index\n */\n AnnotationBase.prototype.render = function (annotation, index) {\n this.isChart = this.control.getModuleName() === 'chart';\n this.annotation = annotation;\n var childElement = createTemplate(createElement('div', {\n id: this.control.element.id + '_Annotation_' + index,\n styles: 'position: absolute;'\n }), index, annotation.content, this.control);\n return childElement;\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as pixel.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAnnotationPixelValue = function (location) {\n var rect;\n rect = this.annotation.region === 'Chart' ?\n new Rect(0, 0, this.control.availableSize.width, this.control.availableSize.height) :\n this.isChart ?\n this.control.chartAxisLayoutPanel.seriesClipRect :\n this.control.series[0].accumulationBound;\n location.x = ((typeof this.annotation.x !== 'string') ?\n ((typeof this.annotation.x === 'number') ? this.annotation.x : 0) :\n stringToNumber(this.annotation.x, rect.width)) + rect.x;\n location.y = ((typeof this.annotation.y === 'number') ? this.annotation.y :\n stringToNumber(this.annotation.y, rect.height)) + rect.y;\n return true;\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as point.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAnnotationPointValue = function (location) {\n var symbolLocation = new ChartLocation(0, 0);\n if (this.isChart) {\n var xAxis = void 0;\n var yAxis = void 0;\n var chart = this.control;\n var annotation = this.annotation;\n var xValue = void 0;\n var isLog = false;\n var xAxisName = annotation.xAxisName;\n var yAxisName = annotation.yAxisName;\n var isInverted = chart.requireInvertedAxis;\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n if (xAxisName === axis.name || (xAxisName == null && axis.name === 'primaryXAxis')) {\n xAxis = axis;\n if (xAxis.valueType.indexOf('Category') > -1) {\n var xAnnotation = xAxis.valueType === 'DateTimeCategory' ? (annotation.x.getTime()).toString() :\n annotation.x;\n if (xAxis.labels.indexOf(xAnnotation) < 0) {\n return false;\n }\n else {\n xValue = xAxis.labels.indexOf(xAnnotation);\n }\n }\n else if (xAxis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n xValue = (typeof this.annotation.x === 'object') ?\n Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: annotation.x }).val)))) : 0;\n }\n else {\n xValue = +annotation.x;\n }\n }\n else if (yAxisName === axis.name || (yAxisName == null && axis.name === 'primaryYAxis')) {\n yAxis = axis;\n isLog = yAxis.valueType === 'Logarithmic';\n }\n }\n if (xAxis && yAxis && withIn(xAxis.valueType === 'Logarithmic' ? logBase(xValue, xAxis.logBase) : xValue, xAxis.visibleRange) && withIn(yAxis.valueType === 'Logarithmic' ? logBase(+annotation.y, yAxis.logBase) : +annotation.y, yAxis.visibleRange)) {\n symbolLocation = getPoint(xValue, +annotation.y, xAxis, yAxis, isInverted);\n location.x = symbolLocation.x + (isInverted ? yAxis.rect.x : xAxis.rect.x);\n location.y = symbolLocation.y + (isInverted ? xAxis.rect.y : yAxis.rect.y);\n }\n else {\n return false;\n }\n return true;\n }\n else {\n return this.setAccumulationPointValue(location);\n }\n };\n /**\n * To process the annotation for accumulation chart\n * @param annotation\n * @param index\n * @param parentElement\n */\n AnnotationBase.prototype.processAnnotation = function (annotation, index, parentElement) {\n var annotationElement;\n var location;\n location = new ChartLocation(0, 0);\n annotationElement = this.render(annotation, index);\n if (this['setAnnotation' + annotation.coordinateUnits + 'Value'](location)) {\n this.setElementStyle(location, annotationElement, parentElement);\n }\n else if (this.control.redraw) {\n removeElement(annotationElement.id);\n }\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as point in accumulation chart.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAccumulationPointValue = function (location) {\n var accumulation = this.control;\n var point;\n for (var _i = 0, _a = accumulation.visibleSeries[0].points; _i < _a.length; _i++) {\n var accPoint = _a[_i];\n if (typeof accPoint.x === 'object') {\n if (Date.parse(accPoint.x) === Date.parse(this.annotation.x) &&\n // tslint:disable-next-line \n accPoint.y == this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n else {\n // tslint:disable-next-line\n if (accPoint.x == this.annotation.x && accPoint.y == this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n }\n if (point && point.visible) {\n location.x = point.symbolLocation.x;\n location.y = point.symbolLocation.y;\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Method to set the element style for accumulation / chart annotation.\n * @private\n * @param location\n * @param element\n * @param parentElement\n */\n AnnotationBase.prototype.setElementStyle = function (location, element, parentElement) {\n var elementRect = measureElementRect(element, this.control.redraw);\n var argsData = {\n cancel: false, name: annotationRender, content: element,\n location: location\n };\n this.control.trigger(annotationRender, argsData);\n if (!argsData.cancel) {\n argsData.content.style.left = this.setAlignmentValue(this.annotation.horizontalAlignment, elementRect.width, argsData.location.x) + 'px';\n argsData.content.style.top = this.setAlignmentValue(this.annotation.verticalAlignment, elementRect.height, argsData.location.y) + 'px';\n argsData.content.setAttribute('aria-label', this.annotation.description || 'Annotation');\n appendElement(argsData.content, parentElement, this.control.redraw, true, 'left', 'top');\n }\n };\n /**\n * Method to calculate the alignment value for annotation.\n * @private\n * @param alignment\n * @param size\n * @param value\n */\n AnnotationBase.prototype.setAlignmentValue = function (alignment, size, value) {\n switch (alignment) {\n case 'Top':\n case 'Near':\n value -= size;\n break;\n case 'Bottom':\n case 'Far':\n value += 0;\n break;\n case 'Middle':\n case 'Center':\n value -= (size / 2);\n break;\n }\n return value;\n };\n return AnnotationBase;\n}());\nexport { AnnotationBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement, redrawElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `ChartAnnotation` module handles the annotation for chart.\n */\nvar ChartAnnotation = /** @class */ (function (_super) {\n __extends(ChartAnnotation, _super);\n /**\n * Constructor for chart annotation.\n * @private.\n */\n function ChartAnnotation(control, annotations) {\n var _this = _super.call(this, control) || this;\n _this.chart = control;\n _this.annotations = annotations;\n return _this;\n }\n /**\n * Method to render the annotation for chart\n * @param element\n * @private\n */\n ChartAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.annotations = this.chart.annotations;\n this.parentElement = redrawElement(this.chart.redraw, this.chart.element.id + '_Annotation_Collections') ||\n createElement('div', {\n id: this.chart.element.id + '_Annotation_Collections'\n });\n this.annotations.map(function (annotation, index) {\n _this.processAnnotation(annotation, index, _this.parentElement);\n });\n appendElement(this.parentElement, element, this.chart.redraw);\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n ChartAnnotation.prototype.destroy = function (control) {\n // Destroy method performed here\n };\n /**\n * Get module name.\n */\n ChartAnnotation.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotation';\n };\n return ChartAnnotation;\n}(AnnotationBase));\nexport { ChartAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange, PathOption, sum } from '../../common/utils/helper';\nimport { Size, getSaturationColor, getPoint } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ColumnBase } from './column-base';\nimport { getMedian } from '../../common/utils/helper';\n/**\n * `BoxAndWhiskerSeries` module is used to render the box and whisker series.\n */\nvar BoxAndWhiskerSeries = /** @class */ (function (_super) {\n __extends(BoxAndWhiskerSeries, _super);\n function BoxAndWhiskerSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render BoxAndWhisker series.\n * @return {void}\n * @private\n */\n BoxAndWhiskerSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n var centerRegion = void 0;\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n this.findBoxPlotValues(point.y, point, series.boxPlotMode);\n //region to cover the top and bottom ticks\n this.updateTipRegion(series, point, sideBySideInfo);\n //get middle rect\n centerRegion = this.getRectangle((point.xValue + sideBySideInfo.start), point.upperQuartile, (point.xValue + sideBySideInfo.end), point.lowerQuartile, series);\n point.regions.push(centerRegion);\n argsData = this.triggerEvent(series, point, series.interior, {\n color: (!isNullOrUndefined(series.border.color) && series.border.color !== 'transparent') ? series.border.color :\n getSaturationColor(series.interior, -0.6),\n width: series.border.width ? series.border.width : 1\n });\n if (!argsData.cancel) {\n this.renderBoxAndWhisker(series, point, centerRegion, argsData, this.getPathString(point, series, getPoint(point.xValue, point.median, xAxis, yAxis, isInverted), getPoint(point.xValue + sideBySideInfo.median, point.average, xAxis, yAxis, isInverted)), sideBySideInfo.median);\n }\n }\n }\n if (series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * update the tip region fo box plot\n * @param series\n * @param point\n * @param sideBySideInfo\n */\n BoxAndWhiskerSeries.prototype.updateTipRegion = function (series, point, sideBySideInfo) {\n var tipRegion = this.getRectangle((point.xValue + sideBySideInfo.median), point.maximum, (point.xValue + sideBySideInfo.median), point.minimum, series);\n this.updateTipSize(series, point, tipRegion, series.chart.requireInvertedAxis);\n };\n /**\n * Update tip size to tip regions\n * @param series\n * @param point\n * @param region\n * @param isInverted\n */\n BoxAndWhiskerSeries.prototype.updateTipSize = function (series, point, region, isInverted) {\n var borderWidth = series.border.width || 1;\n if (!isInverted) {\n region.x -= borderWidth / 2;\n region.width = region.width || borderWidth;\n }\n else {\n region.y -= borderWidth / 2;\n region.height = region.height || borderWidth;\n }\n point.regions.push(region);\n };\n /**\n * Calculation for path direction performed here\n * @param point\n * @param series\n * @param median\n * @param average\n */\n BoxAndWhiskerSeries.prototype.getPathString = function (point, series, median, average) {\n var topRect = point.regions[0];\n var midRect = point.regions[1];\n var direction = '';\n var width = series.chart.requireInvertedAxis ? topRect.height : topRect.width;\n var center = series.chart.requireInvertedAxis ? topRect.y + topRect.height / 2 :\n topRect.x + topRect.width / 2;\n var midWidth = midRect.x + midRect.width;\n var midHeight = midRect.y + midRect.height;\n var topWidth = topRect.x + topRect.width;\n var topHeight = topRect.y + topRect.height;\n if (!series.chart.requireInvertedAxis) {\n this.updateTipSize(series, point, { x: midRect.x, y: topRect.y, width: midWidth - midRect.x, height: 0 }, true);\n this.updateTipSize(series, point, { x: midRect.x, y: topHeight, width: midWidth - midRect.x, height: 0 }, true);\n direction += 'M ' + midRect.x + ' ' + topRect.y + ' ' + ' L ' + midWidth + ' ' + topRect.y;\n direction += ' M ' + center + ' ' + topRect.y + ' ' + ' L ' + center + ' ' + midRect.y;\n direction += ' M ' + midRect.x + ' ' + midRect.y + ' ' + ' L ' + midWidth + ' ' + midRect.y +\n ' L ' + midWidth + ' ' + midHeight + ' L ' + midRect.x + ' ' + midHeight + ' Z';\n direction += ' M ' + center + ' ' + midHeight + ' L ' + center + ' ' + topHeight;\n direction += ' M ' + midRect.x + ' ' + topHeight + ' L ' + midWidth + ' ' + topHeight;\n direction += ' M ' + midRect.x + ' ' + median.y + ' L ' + midWidth + ' ' + median.y;\n direction += series.showMean ?\n ' M ' + (average.x - 5) + ' ' + (average.y - 5) + ' L ' + (average.x + 5) + ' ' + (average.y + 5) +\n ' M ' + (average.x + 5) + ' ' + (average.y - 5) + ' L ' + (average.x - 5) + ' ' + (average.y + 5) : '';\n }\n else {\n this.updateTipSize(series, point, { x: topRect.x, y: midRect.y, width: 0, height: midHeight - midRect.y }, false);\n this.updateTipSize(series, point, { x: topWidth, y: midRect.y, width: 0, height: midHeight - midRect.y }, true);\n direction += 'M ' + topRect.x + ' ' + midRect.y + ' L ' + topRect.x + ' ' + midHeight;\n direction += 'M ' + topRect.x + ' ' + center + ' ' + ' L ' + midRect.x + ' ' + center;\n direction += ' M ' + midRect.x + ' ' + midRect.y + ' ' + ' L ' + midWidth + ' ' + midRect.y +\n ' L ' + midWidth + ' ' + midHeight + ' L ' + midRect.x + ' ' + midHeight + ' Z';\n direction += ' M ' + midWidth + ' ' + center + ' L ' + topWidth + ' ' + center;\n direction += ' M ' + topWidth + ' ' + midRect.y + ' L ' + topWidth + ' ' + midHeight;\n direction += ' M ' + median.x + ' ' + midRect.y + ' ' + ' L ' + median.x + ' ' + midHeight;\n direction += series.showMean ?\n 'M ' + (average.x + 5) + ' ' + (average.y - 5) + ' L ' + (average.x - 5) + ' ' + (average.y + 5) +\n 'M ' + (average.x - 5) + ' ' + (average.y - 5) + ' L ' + (average.x + 5) + ' ' + (average.y + 5) : '';\n }\n return direction;\n };\n /**\n * Rendering for box and whisker append here.\n * @param series\n * @param point\n * @param rect\n * @param argsData\n * @param direction\n */\n BoxAndWhiskerSeries.prototype.renderBoxAndWhisker = function (series, point, rect, argsData, direction, median) {\n var location;\n var size;\n var symbolId = series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n var element = series.chart.renderer.drawPath(new PathOption(symbolId + '_BoxPath', argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction));\n element.setAttribute('aria-label', point.x.toString() + ':' + point.maximum.toString()\n + ':' + point.minimum.toString() + ':' + point.lowerQuartile.toString() + ':' + point.upperQuartile.toString());\n var parentElement = series.chart.renderer.createGroup({\n 'id': symbolId\n });\n parentElement.appendChild(element);\n for (var i = 0; i < point.outliers.length; i++) {\n location = getPoint((point.xValue + median), point.outliers[i], series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n size = new Size(series.marker.width, series.marker.height);\n point.symbolLocations.push(location);\n this.updateTipSize(series, point, {\n x: location.x - (size.width / 2), y: location.y - (size.height / 2),\n width: size.width, height: size.height\n }, true);\n }\n series.seriesElement.appendChild(parentElement);\n };\n /**\n * To find the box plot values\n * @param yValues\n * @param point\n * @param mode\n */\n BoxAndWhiskerSeries.prototype.findBoxPlotValues = function (yValues, point, mode) {\n var yCount = yValues.length;\n var quartile = {\n average: sum(yValues) / yCount,\n lowerQuartile: 0, upperQuartile: 0,\n maximum: 0, minimum: 0,\n median: 0, outliers: []\n };\n if (mode === 'Exclusive') {\n quartile.lowerQuartile = this.getExclusiveQuartileValue(yValues, yCount, 0.25);\n quartile.upperQuartile = this.getExclusiveQuartileValue(yValues, yCount, 0.75);\n quartile.median = this.getExclusiveQuartileValue(yValues, yCount, 0.5);\n }\n else if (mode === 'Inclusive') {\n quartile.lowerQuartile = this.getInclusiveQuartileValue(yValues, yCount, 0.25);\n quartile.upperQuartile = this.getInclusiveQuartileValue(yValues, yCount, 0.75);\n quartile.median = this.getInclusiveQuartileValue(yValues, yCount, 0.5);\n }\n else {\n quartile.median = getMedian(yValues);\n this.getQuartileValues(yValues, yCount, quartile);\n }\n this.getMinMaxOutlier(yValues, yCount, quartile);\n point.minimum = quartile.minimum;\n point.maximum = quartile.maximum;\n point.lowerQuartile = quartile.lowerQuartile;\n point.upperQuartile = quartile.upperQuartile;\n point.median = quartile.median;\n point.outliers = quartile.outliers;\n point.average = quartile.average;\n };\n /**\n * to find the exclusive quartile values\n * @param yValues\n * @param count\n * @param percentile\n */\n BoxAndWhiskerSeries.prototype.getExclusiveQuartileValue = function (yValues, count, percentile) {\n if (count === 0) {\n return 0;\n }\n else if (count === 1) {\n return yValues[0];\n }\n var value = 0;\n var rank = percentile * (count + 1);\n var integerRank = Math.floor(Math.abs(rank));\n var fractionRank = rank - integerRank;\n if (integerRank === 0) {\n value = yValues[0];\n }\n else if (integerRank > count - 1) {\n value = yValues[count - 1];\n }\n else {\n value = fractionRank * (yValues[integerRank] - yValues[integerRank - 1]) + yValues[integerRank - 1];\n }\n return value;\n };\n /**\n * to find the inclusive quartile values\n * @param yValues\n * @param count\n * @param percentile\n */\n BoxAndWhiskerSeries.prototype.getInclusiveQuartileValue = function (yValues, count, percentile) {\n if (count === 0) {\n return 0;\n }\n else if (count === 1) {\n return yValues[0];\n }\n var value = 0;\n var rank = percentile * (count - 1);\n var integerRank = Math.floor(Math.abs(rank));\n var fractionRank = rank - integerRank;\n value = fractionRank * (yValues[integerRank + 1] - yValues[integerRank]) + yValues[integerRank];\n return value;\n };\n /**\n * To find the quartile values\n * @param yValues\n * @param count\n * @param lowerQuartile\n * @param upperQuartile\n */\n BoxAndWhiskerSeries.prototype.getQuartileValues = function (yValues, count, quartile) {\n if (count === 1) {\n quartile.lowerQuartile = yValues[0];\n quartile.upperQuartile = yValues[0];\n return null;\n }\n var isEvenList = count % 2 === 0;\n var halfLength = count / 2;\n var lowerQuartileArray = yValues.slice(0, halfLength);\n var upperQuartileArray = yValues.slice(isEvenList ? halfLength : halfLength + 1, count);\n quartile.lowerQuartile = getMedian(lowerQuartileArray);\n quartile.upperQuartile = getMedian(upperQuartileArray);\n };\n /**\n * To find the min, max and outlier values\n * @param yValues\n * @param lowerQuartile\n * @param upperQuartile\n * @param minimum\n * @param maximum\n * @param outliers\n */\n BoxAndWhiskerSeries.prototype.getMinMaxOutlier = function (yValues, count, quartile) {\n var interquartile = quartile.upperQuartile - quartile.lowerQuartile;\n var rangeIQR = 1.5 * interquartile;\n for (var i = 0; i < count; i++) {\n if (yValues[i] < quartile.lowerQuartile - rangeIQR) {\n quartile.outliers.push(yValues[i]);\n }\n else {\n quartile.minimum = yValues[i];\n break;\n }\n }\n for (var i = count - 1; i >= 0; i--) {\n if (yValues[i] > quartile.upperQuartile + rangeIQR) {\n quartile.outliers.push(yValues[i]);\n }\n else {\n quartile.maximum = yValues[i];\n break;\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BoxAndWhiskerSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n BoxAndWhiskerSeries.prototype.getModuleName = function () {\n return 'BoxAndWhiskerSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the candle series.\n * @return {void}\n * @private\n */\n BoxAndWhiskerSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the candle series.\n */\n };\n return BoxAndWhiskerSeries;\n}(ColumnBase));\nexport { BoxAndWhiskerSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { getPoint, withInRange, ChartLocation, PathOption } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `MultiColoredAreaSeries` module used to render the area series with multi color.\n */\nvar MultiColoredAreaSeries = /** @class */ (function (_super) {\n __extends(MultiColoredAreaSeries, _super);\n function MultiColoredAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Area series.\n * @return {void}\n * @private\n */\n MultiColoredAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var _this = this;\n var firstPoint;\n var startPoint = null;\n var direction = '';\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var options = [];\n var startRegion;\n var previous;\n var rendered;\n var segments = this.sortSegments(series, series.segments);\n series.points.map(function (point, i, seriesPoints) {\n point.symbolLocations = [];\n point.regions = [];\n rendered = false;\n if (point.visible && withInRange(seriesPoints[i - 1], point, seriesPoints[i + 1], series)) {\n direction += _this.getAreaPathDirection(point.xValue, origin, series, isInverted, getPoint, startPoint, 'M');\n startPoint = startPoint || new ChartLocation(point.xValue, origin);\n firstPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n if (previous && _this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n rendered = true;\n startRegion = getPoint(startPoint.x, origin, xAxis, yAxis, isInverted, series);\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (startRegion.y) + ' ');\n _this.generatePathOption(options, series, previous, direction, '_Point_' + previous.index);\n direction = 'M' + ' ' + (firstPoint.x) + ' ' + (startRegion.y) + ' ' + 'L' + ' ' +\n (firstPoint.x) + ' ' + (firstPoint.y) + ' ';\n }\n else {\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n _this.setPointColor(point, null, series, series.segmentAxis === 'X', segments);\n }\n if (seriesPoints[i + 1] && !seriesPoints[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n direction += _this.getAreaEmptyDirection({ 'x': point.xValue, 'y': origin }, startPoint, series, isInverted, getPoint);\n startPoint = null;\n }\n previous = point;\n _this.storePointLocation(point, series, isInverted, getPoint);\n }\n });\n if (!rendered) {\n direction = series.points.length > 1 ?\n (direction + this.getAreaPathDirection(previous.xValue, origin, series, isInverted, getPoint, null, 'L')) : '';\n this.generatePathOption(options, series, previous, direction, '');\n }\n this.applySegmentAxis(series, options, segments);\n this.renderMarker(series);\n };\n /**\n * To Store the path directions of the area\n */\n MultiColoredAreaSeries.prototype.generatePathOption = function (options, series, point, direction, id) {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + id, series.setPointColor(point, series.interior), series.border.width, series.border.color, series.opacity, series.dashArray, direction));\n };\n /**\n * To destroy the area series.\n * @return {void}\n * @private\n */\n MultiColoredAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name\n */\n MultiColoredAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MultiColoredAreaSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n MultiColoredAreaSeries.prototype.doAnimation = function (series) {\n this.doLinearAnimation(series, series.animation);\n };\n return MultiColoredAreaSeries;\n}(MultiColoredSeries));\nexport { MultiColoredAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { withInRange, getPoint, PathOption } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `MultiColoredLineSeries` used to render the line series with multi color.\n */\nvar MultiColoredLineSeries = /** @class */ (function (_super) {\n __extends(MultiColoredLineSeries, _super);\n function MultiColoredLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Line Series.\n * @return {void}.\n * @private\n */\n MultiColoredLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var previous = null;\n var startPoint = 'M';\n var visiblePoints = this.improveChartPerformance(series);\n var options = [];\n var direction = '';\n var segments = this.sortSegments(series, series.segments);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction += this.getLineDirection(previous, point, series, isInverted, getPoint, startPoint);\n if (previous != null) {\n if (this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + previous.index, 'none', series.width, series.setPointColor(previous, series.interior), series.opacity, series.dashArray, direction));\n startPoint = 'M';\n direction = '';\n }\n else {\n startPoint = 'L';\n }\n }\n else {\n this.setPointColor(point, null, series, series.segmentAxis === 'X', segments);\n }\n previous = point;\n this.storePointLocation(point, series, isInverted, getPoint);\n }\n else {\n previous = (series.emptyPointSettings.mode === 'Drop') ? previous : null;\n startPoint = (series.emptyPointSettings.mode === 'Drop') ? startPoint : 'M';\n point.symbolLocations = [];\n }\n }\n if (direction !== '') {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index, 'none', series.width, series.setPointColor(visiblePoints[visiblePoints.length - 1], series.interior), series.opacity, series.dashArray, direction));\n }\n this.applySegmentAxis(series, options, segments);\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n MultiColoredLineSeries.prototype.doAnimation = function (series) {\n this.doLinearAnimation(series, series.animation);\n };\n /**\n * Get module name.\n */\n MultiColoredLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MultiColoredLineSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n MultiColoredLineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return MultiColoredLineSeries;\n}(MultiColoredSeries));\nexport { MultiColoredLineSeries };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { textWrap, TextOption, PathOption } from '../../common/utils/helper';\nimport { valueToCoefficient, measureText, textTrim, textElement } from '../../common/utils/helper';\nimport { axisMultiLabelRender } from '../../common/model/constants';\n/**\n * `MultiLevelLabel` module is used to render the multi level label in chart.\n */\nvar MultiLevelLabel = /** @class */ (function () {\n /**\n * Constructor for the logerithmic module.\n * @private\n */\n function MultiLevelLabel(chart) {\n /** @private */\n this.xAxisPrevHeight = [];\n /** @private */\n this.xAxisMultiLabelHeight = [];\n /** @private */\n this.yAxisPrevHeight = [];\n /** @private */\n this.yAxisMultiLabelHeight = [];\n this.chart = chart;\n }\n /**\n * Finds multilevel label height\n * @return {void}\n */\n MultiLevelLabel.prototype.getMultilevelLabelsHeight = function (axis) {\n var value = 0;\n var multiLevelLabelsHeight = [];\n var prevHeight = [];\n var isVertical = axis.orientation === 'Vertical';\n var axisValue = isVertical ? axis.rect.height : axis.rect.width;\n var labelSize;\n var height;\n var padding = 10;\n var gap;\n axis.multiLevelLabels.map(function (multiLevel, index) {\n multiLevel.categories.map(function (categoryLabel) {\n if (categoryLabel.text !== '' && categoryLabel.start !== null && categoryLabel.end !== null) {\n labelSize = measureText(categoryLabel.text, multiLevel.textStyle);\n height = isVertical ? labelSize.width : labelSize.height;\n height += 2 * multiLevel.border.width +\n (multiLevel.border.type === 'CurlyBrace' ? padding : 0);\n gap = (categoryLabel.maximumTextWidth !== null) ? categoryLabel.maximumTextWidth :\n (valueToCoefficient(typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) :\n categoryLabel.end, axis) * axisValue) -\n (valueToCoefficient(typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) :\n categoryLabel.start, axis) * axisValue);\n if ((labelSize.width > gap - padding) && gap > 0 && (multiLevel.overflow === 'Wrap') && !isVertical) {\n height = (height * (textWrap(categoryLabel.text, gap - padding, multiLevel.textStyle).length));\n }\n multiLevelLabelsHeight[index] = !multiLevelLabelsHeight[index] ? height :\n ((multiLevelLabelsHeight[index] < height) ? height : multiLevelLabelsHeight[index]);\n }\n });\n prevHeight[index] = value;\n value += multiLevelLabelsHeight[index] ? (multiLevelLabelsHeight[index] + padding) : 0;\n });\n axis.multiLevelLabelHeight = value + ((axis.title !== '' || (this.chart.legendModule && this.chart.legendSettings.visible))\n ? padding / 2 : 0);\n if (isVertical) {\n this.yAxisMultiLabelHeight = multiLevelLabelsHeight;\n this.yAxisPrevHeight = prevHeight;\n }\n else {\n this.xAxisMultiLabelHeight = multiLevelLabelsHeight;\n this.xAxisPrevHeight = prevHeight;\n }\n };\n /**\n * render x axis multi level labels\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderXAxisMultiLevelLabels = function (axis, index, parent, axisRect) {\n var _this = this;\n var x;\n var y;\n var padding = 10;\n var startX;\n var startY = (axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0) +\n (axis.maxLabelSize.height) + padding;\n var endX;\n var endY;\n var pathRect = '';\n var start;\n var end;\n var labelSize;\n var clipY;\n var isOutside = axis.labelPosition === 'Outside';\n var gap;\n var anchor;\n var isInversed = axis.isInversed;\n var argsData;\n var labelElement;\n var opposedPosition = axis.opposedPosition;\n var scrollBarHeight = isOutside && isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n scrollBarHeight = scrollBarHeight * (opposedPosition ? -1 : 1);\n clipY = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ?\n (axisRect.y + startY - axis.majorTickLines.width) : (axisRect.y - startY - axis.multiLevelLabelHeight);\n this.createClipRect(axisRect.x - axis.majorTickLines.width, clipY + scrollBarHeight, axis.multiLevelLabelHeight + padding, axisRect.width + 2 * axis.majorTickLines.width, this.chart.element.id + '_XAxis_Clippath_' + index, this.chart.element.id + 'XAxisMultiLevelLabel' + index);\n axis.multiLevelLabels.map(function (multiLevel, level) {\n pathRect = '';\n multiLevel.categories.map(function (categoryLabel, i) {\n labelElement = _this.chart.renderer.createGroup({ id: _this.chart.element.id + index + '_MultiLevelLabel' + level });\n start = typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) : categoryLabel.start;\n end = typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) : categoryLabel.end;\n if (((start >= axis.visibleRange.min && start <= axis.visibleRange.max)\n || (end >= axis.visibleRange.min && end <= axis.visibleRange.max))) {\n argsData = _this.triggerMultiLabelRender(axis, categoryLabel.text, axis.multiLevelLabels[level].textStyle, axis.multiLevelLabels[level].alignment);\n if (!argsData.cancel) {\n startX = valueToCoefficient(start, axis) * axisRect.width;\n endX = valueToCoefficient(end, axis) * axisRect.width;\n endX = isInversed ? [startX, startX = endX][0] : endX;\n labelSize = measureText(argsData.text, argsData.textStyle);\n gap = ((categoryLabel.maximumTextWidth === null) ? endX - startX : categoryLabel.maximumTextWidth) - padding;\n x = startX + axisRect.x + padding;\n y = (((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ? (startY + axisRect.y +\n labelSize.height / 2 + padding + _this.xAxisPrevHeight[level]) : (axisRect.y - startY + labelSize.height / 2 -\n _this.xAxisMultiLabelHeight[level] - _this.xAxisPrevHeight[level])) + scrollBarHeight;\n if (argsData.alignment === 'Center') {\n x += (endX - startX - padding) / 2;\n anchor = 'middle';\n }\n else if (argsData.alignment === 'Far') {\n x = x + (endX - startX - padding) - multiLevel.border.width / 2;\n anchor = 'end';\n }\n else {\n anchor = 'start';\n x += multiLevel.border.width / 2;\n }\n y = multiLevel.border.type === 'CurlyBrace' ?\n (((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? y + padding : y - padding / 2) : y;\n var options = new TextOption(_this.chart.element.id + index + '_Axis_MultiLevelLabel_Level_' + level + '_Text_' + i, x, y, anchor, argsData.text);\n if (multiLevel.overflow !== 'None') {\n options.text = (multiLevel.overflow === 'Wrap') ?\n textWrap(argsData.text, gap, argsData.textStyle) : textTrim(gap, argsData.text, argsData.textStyle);\n options.x = options.x - padding / 2;\n }\n textElement(options, argsData.textStyle, argsData.textStyle.color || _this.chart.themeStyle.axisLabel, labelElement);\n if (multiLevel.border.width > 0 && multiLevel.border.type !== 'WithoutBorder') {\n pathRect = _this.renderXAxisLabelBorder(level, endX - startX - padding, axis, startX, startY, labelSize, options, axisRect, argsData.alignment, pathRect, isOutside, opposedPosition);\n }\n _this.multiElements.appendChild(labelElement);\n }\n }\n });\n if (pathRect !== '') {\n _this.createBorderElement(level, index, axis, pathRect);\n }\n });\n parent.appendChild(this.multiElements);\n };\n /**\n * render x axis multi level labels border\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderXAxisLabelBorder = function (labelIndex, gap, axis, startX, startY, labelSize, textOptions, axisRect, alignment, path, isOutside, opposedPosition) {\n var padding = 10;\n var padding1;\n var padding2;\n var value;\n var value1;\n var groupLabel = axis.multiLevelLabels[labelIndex];\n var width = gap + padding;\n var height = this.xAxisMultiLabelHeight[labelIndex] + padding;\n var scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n var x = startX + axisRect.x;\n var y = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? (startY + axisRect.y +\n this.xAxisPrevHeight[labelIndex] + scrollBarHeight) : (axisRect.y - startY -\n this.xAxisPrevHeight[labelIndex] - scrollBarHeight);\n switch (groupLabel.border.type) {\n case 'WithoutTopandBottomBorder':\n case 'Rectangle':\n case 'WithoutTopBorder':\n height = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? height : -height;\n path += 'M' + x + ' ' + y + 'L' + x + ' ' + (y + height) +\n 'M' + (x + width) + ' ' + y + 'L' + (x + width) + ' ' + (y + height);\n path += (groupLabel.border.type !== 'WithoutTopandBottomBorder') ? ('L' + ' ' + (x) + ' ' + (y + height) + ' ') : ' ';\n path += groupLabel.border.type === 'Rectangle' ? ('M' + x + ' ' + y + 'L' + (x + width) + ' ' + y) : ' ';\n break;\n case 'Brace':\n if (alignment === 'Near') {\n value = textOptions.x;\n value1 = textOptions.x + labelSize.width + 2;\n }\n else if (alignment === 'Center') {\n value = textOptions.x - labelSize.width / 2 - 2;\n value1 = textOptions.x + labelSize.width / 2 + 2;\n }\n else {\n value = textOptions.x - labelSize.width - 2;\n value1 = textOptions.x;\n }\n height = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? height : -height;\n path += 'M' + x + ' ' + y + 'L' + x + ' ' + (y + height / 2) +\n 'M' + x + ' ' + (y + height / 2) + 'L' + (value - 2) + ' ' + (y + height / 2) +\n 'M' + (value1) + ' ' + (y + height / 2) + 'L' + (x + width) + ' ' + (y + height / 2) +\n 'M' + (x + width) + ' ' + (y + height / 2) + 'L' + (x + width) + ' ' + (y);\n break;\n case 'CurlyBrace':\n if ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) {\n padding = 10;\n padding1 = 15;\n padding2 = 5;\n }\n else {\n padding = -10;\n padding1 = -15;\n padding2 = -5;\n }\n if (alignment === 'Center') {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + width / 2 - 5) + ' ' + (y + padding) + 'L' + (x + width / 2) + ' ' + (y + padding1) +\n 'L' + (x + width / 2 + 5) + ' ' + (y + padding) + 'L' + (x + width - 10) + ' ' + (y + padding) + ' C ' +\n (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' ' + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n else if (alignment === 'Near') {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + 15) + ' ' + (y + padding1) + 'L' + (x + 20) + ' ' + (y + padding) + 'L' +\n (x + width - 10) + ' ' + (y + padding) + ' C ' + (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' '\n + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n else {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + width - 20) + ' ' + (y + padding) + 'L' + (x + width - 15) + ' ' + (y + padding1) +\n 'L' + (x + width - 10) + ' ' + (y + padding) + 'L' + (x + width - 10) + ' ' + (y + padding) + ' C '\n + (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' ' + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n break;\n }\n return path;\n };\n /**\n * render y axis multi level labels\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderYAxisMultiLevelLabels = function (axis, index, parent, rect) {\n var _this = this;\n var labelSize;\n var clipX;\n var isOutside = axis.labelPosition === 'Outside';\n var x;\n var y;\n var padding = 10;\n var startX = (axis.tickPosition === axis.labelPosition ? axis.majorTickLines.height : 0) +\n (axis.maxLabelSize.width) + padding;\n var startY;\n var path = '';\n var labelElement;\n var endY;\n var argsData;\n var isInversed = axis.isInversed;\n var start;\n var end;\n var gap;\n var anchor = 'middle';\n var opposedPosition = axis.opposedPosition;\n var scrollBarHeight = isOutside && isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n scrollBarHeight = scrollBarHeight * (opposedPosition ? 1 : -1);\n clipX = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ?\n (rect.x - axis.multiLevelLabelHeight - startX - padding) : (rect.x + startX);\n this.createClipRect(clipX + scrollBarHeight, rect.y - axis.majorTickLines.width, rect.height + 2 * axis.majorTickLines.width, axis.multiLevelLabelHeight + padding, this.chart.element.id + '_YAxis_Clippath_' + index, this.chart.element.id\n + 'YAxisMultiLevelLabel' + index);\n axis.multiLevelLabels.map(function (multiLevel, level) {\n path = '';\n multiLevel.categories.map(function (categoryLabel, i) {\n labelElement = _this.chart.renderer.createGroup({ id: _this.chart.element.id + index + '_MultiLevelLabel' + level });\n end = typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) : categoryLabel.end;\n start = typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) : categoryLabel.start;\n if (((start >= axis.visibleRange.min && start <= axis.visibleRange.max)\n || (end >= axis.visibleRange.min && end <= axis.visibleRange.max))) {\n startY = valueToCoefficient((start), axis) * (rect.height);\n endY = valueToCoefficient((end), axis) * (rect.height);\n endY = isInversed ? [startY, startY = endY][0] : endY;\n argsData = _this.triggerMultiLabelRender(axis, categoryLabel.text, multiLevel.textStyle, multiLevel.alignment);\n if (!argsData.cancel) {\n labelSize = measureText(argsData.text, argsData.textStyle);\n gap = endY - startY;\n x = rect.x - startX - _this.yAxisPrevHeight[level] -\n (_this.yAxisMultiLabelHeight[level] / 2) - padding / 2;\n y = rect.height + rect.y - startY - (gap / 2);\n if (opposedPosition) {\n x = isOutside ? rect.x + startX + padding / 2 + (_this.yAxisMultiLabelHeight[level] / 2) +\n _this.yAxisPrevHeight[level] + scrollBarHeight : rect.x - startX - (_this.yAxisMultiLabelHeight[level] / 2) -\n _this.yAxisPrevHeight[level] - padding / 2;\n }\n else {\n x = isOutside ? x + scrollBarHeight : rect.x + startX + padding / 2 + (_this.yAxisMultiLabelHeight[level] / 2) +\n _this.yAxisPrevHeight[level];\n }\n if (argsData.alignment === 'Center') {\n y += labelSize.height / 4;\n }\n else if (argsData.alignment === 'Far') {\n y += gap / 2 - labelSize.height / 2;\n }\n else {\n y = y - gap / 2 + labelSize.height;\n }\n x = multiLevel.border.type === 'CurlyBrace' ? (((!opposedPosition && isOutside) ||\n (opposedPosition && !isOutside)) ? x - padding : x + padding) : x;\n var options = new TextOption(_this.chart.element.id + index + '_Axis_MultiLevelLabel_Level_' + level + '_Text_' + i, x, y, anchor, argsData.text);\n options.text = (multiLevel.overflow === 'Trim') ?\n textTrim((categoryLabel.maximumTextWidth === null ? _this.yAxisMultiLabelHeight[level] :\n categoryLabel.maximumTextWidth), argsData.text, argsData.textStyle) : options.text;\n textElement(options, argsData.textStyle, argsData.textStyle.color || _this.chart.themeStyle.axisLabel, labelElement);\n if (multiLevel.border.width > 0 && multiLevel.border.type !== 'WithoutBorder') {\n path = _this.renderYAxisLabelBorder(level, gap, axis, endY, startX, startY, labelSize, options, rect, argsData.alignment, path, isOutside, opposedPosition);\n }\n _this.multiElements.appendChild(labelElement);\n }\n }\n });\n if (path !== '') {\n _this.createBorderElement(level, index, axis, path);\n }\n });\n parent.appendChild(this.multiElements);\n };\n /**\n * render y axis multi level labels border\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderYAxisLabelBorder = function (labelIndex, gap, axis, endY, startX, startY, labelSize, textOptions, rect, alignment, path, isOutside, opposedPosition) {\n var height = endY - startY;\n var padding = 10;\n var padding1;\n var padding2;\n var groupLabel = axis.multiLevelLabels[labelIndex];\n var y = rect.y + rect.height - endY;\n var scrollBarHeight = isOutside && isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n scrollBarHeight = scrollBarHeight * (opposedPosition ? 1 : -1);\n var width = this.yAxisMultiLabelHeight[labelIndex] + padding;\n var x = (((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? rect.x - startX -\n this.yAxisPrevHeight[labelIndex] : rect.x + startX + this.yAxisPrevHeight[labelIndex]) + scrollBarHeight;\n switch (groupLabel.border.type) {\n case 'WithoutTopandBottomBorder':\n case 'Rectangle':\n case 'WithoutTopBorder':\n width = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? -width : width;\n path += 'M' + x + ' ' + y + 'L' + (x + width) + ' ' + y +\n 'M' + x + ' ' + (y + height) + 'L' + (x + width) + ' ' + (y + height);\n path += (groupLabel.border.type !== 'WithoutTopandBottomBorder') ? ('L' + ' ' + (x + width) + ' ' + y + ' ') : ' ';\n path += (groupLabel.border.type === 'Rectangle') ? ('M' + (x) + ' ' + (y + height) + 'L' + ' ' + (x) + ' ' + y + ' ') : ' ';\n break;\n case 'Brace':\n width = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? width : -width;\n path += 'M ' + (x) + ' ' + y + ' L ' + (x - width / 2) + ' ' + y + ' L ' + (x - width / 2) + ' ' +\n (textOptions.y - labelSize.height / 2 - 4) + ' M ' + (x - width / 2) + ' ' +\n (textOptions.y + labelSize.height / 4 + 2) +\n ' L ' + (x - width / 2) + ' ' + (y + height) + ' L ' + (x) + ' ' + (y + height);\n break;\n case 'CurlyBrace':\n if ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) {\n padding = -10;\n padding1 = -15;\n padding2 = -5;\n }\n else {\n padding = 10;\n padding1 = 15;\n padding2 = 5;\n }\n if (alignment === 'Center') {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding) + ' ' + (y + (height - 10) / 2) + ' L ' + (x + padding1) + ' ' + (y + (height - 10) / 2 + 5)\n + ' L ' + (x + padding) + ' ' + (y + (height - 10) / 2 + 10) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C ' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding2) + ' ' + (y + height) + ' '\n + x + ' ' + (y + height);\n }\n else if (alignment === 'Far') {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding) + ' ' + (y + height - 20) + ' ' + ' L ' + (x + padding1) + ' ' + (y + (height - 15)) +\n ' L ' + (x + padding) + ' ' + (y + (height - 10)) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding) + ' ' + (y + height) + ' ' + x + ' '\n + (y + height);\n }\n else {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding1) + ' ' + (y + 15) +\n ' L ' + (x + padding) + ' ' + (y + 20) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding2) + ' ' + (y + height) + ' ' + x +\n ' ' + (y + height);\n }\n break;\n }\n return path;\n };\n /**\n * create cliprect\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.createClipRect = function (x, y, height, width, clipId, axisId) {\n this.multiElements = this.chart.renderer.createGroup({\n 'id': axisId,\n 'clip-path': 'url(#' + clipId + ')'\n });\n this.multiElements.appendChild(this.chart.renderer.drawClipPath({\n 'id': clipId,\n 'x': x,\n 'y': y,\n 'width': width,\n 'height': height,\n 'fill': 'white',\n 'stroke-width': 1, 'stroke': 'Gray'\n }));\n };\n /**\n * create borer element\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.createBorderElement = function (borderIndex, axisIndex, axis, path) {\n var borderElement = this.chart.renderer.drawPath(new PathOption(this.chart.element.id + axisIndex + '_Axis_MultiLevelLabel_Rect_' + borderIndex, 'Transparent', axis.multiLevelLabels[borderIndex].border.width, axis.multiLevelLabels[borderIndex].border.color || this.chart.themeStyle.axisLine, 1, '', path));\n borderElement.setAttribute('style', 'pointer-events: none');\n this.multiElements.appendChild(borderElement);\n };\n /**\n * Triggers the event.\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.triggerMultiLabelRender = function (axis, text, textStyle, textAlignment) {\n var argsData;\n argsData = {\n cancel: false, name: axisMultiLabelRender, axis: axis,\n text: text, textStyle: textStyle, alignment: textAlignment\n };\n this.chart.trigger(axisMultiLabelRender, argsData);\n return argsData;\n };\n /**\n * To get the module name for `MultiLevelLabel`.\n * @private\n */\n MultiLevelLabel.prototype.getModuleName = function () {\n return 'MultiLevelLabel';\n };\n /**\n * To destroy the `MultiLevelLabel` module.\n * @private\n */\n MultiLevelLabel.prototype.destroy = function () {\n // destroy peform here\n };\n return MultiLevelLabel;\n}());\nexport { MultiLevelLabel };\n","import { Rect, PathOption, RectOption, CircleOption } from '../utils/helper';\n/**\n * Create scrollbar svg.\n * @return {void}\n */\nexport function createScrollSvg(scrollbar, renderer) {\n var rect = scrollbar.axis.rect;\n var isHorizontalAxis = scrollbar.axis.orientation === 'Horizontal';\n scrollbar.svgObject = renderer.createSvg({\n id: 'scrollBar_svg' + scrollbar.axis.name,\n width: scrollbar.isVertical ? scrollbar.height : scrollbar.width,\n height: scrollbar.isVertical ? scrollbar.width : scrollbar.height,\n style: 'position: absolute;top: ' + ((scrollbar.axis.opposedPosition && isHorizontalAxis ? -16 : 0) + rect.y) + 'px;left: ' +\n (((scrollbar.axis.opposedPosition && !isHorizontalAxis ? 16 : 0) + rect.x) - (scrollbar.isVertical ? scrollbar.height : 0))\n + 'px;cursor:auto;'\n });\n scrollbar.elements.push(scrollbar.svgObject);\n}\n/**\n * Scrollbar elements renderer\n */\nvar ScrollElements = /** @class */ (function () {\n /**\n * Constructor for scroll elements\n * @param scrollObj\n */\n function ScrollElements() {\n // Constructor Called here\n }\n /**\n * Render scrollbar elements.\n * @return {void}\n * @private\n */\n ScrollElements.prototype.renderElements = function (scroll, renderer) {\n var scrollGroup = renderer.createGroup({\n id: 'scrollBar_' + scroll.axis.name,\n transform: 'translate(' + (scroll.isVertical ? scroll.height : '0') +\n ',0) rotate(' + (scroll.isVertical ? '90' : '0') + ')'\n });\n var backRectGroup = renderer.createGroup({\n id: 'scrollBar_backRect_' + scroll.axis.name\n });\n var thumbGroup = renderer.createGroup({\n id: 'scrollBar_thumb_' + scroll.axis.name,\n transform: 'translate(0,0)'\n });\n this.backRect(scroll, renderer, backRectGroup);\n this.thumb(scroll, renderer, thumbGroup);\n this.renderCircle(scroll, renderer, thumbGroup);\n this.arrows(scroll, renderer, thumbGroup);\n this.thumbGrip(scroll, renderer, thumbGroup);\n scrollGroup.appendChild(backRectGroup);\n scrollGroup.appendChild(thumbGroup);\n return scrollGroup;\n };\n /**\n * Method to render back rectangle of scrollbar\n * @param scroll\n */\n ScrollElements.prototype.backRect = function (scroll, renderer, parent) {\n var style = scroll.scrollbarThemeStyle;\n var backRectEle = renderer.drawRectangle(new RectOption('scrollBarBackRect_' + scroll.axis.name, style.backRect, { width: 1, color: style.backRect }, 1, new Rect(0, 0, scroll.width, scroll.height), 0, 0));\n parent.appendChild(backRectEle);\n };\n /**\n * Method to render arrows\n * @param scroll\n */\n ScrollElements.prototype.arrows = function (scroll, renderer, parent) {\n var style = scroll.scrollbarThemeStyle;\n var option = new PathOption('scrollBar_leftArrow_' + scroll.axis.name, style.arrow, 1, style.arrow, 1, '', '');\n this.leftArrowEle = renderer.drawPath(option);\n option.id = 'scrollBar_rightArrow_' + scroll.axis.name;\n this.rightArrowEle = renderer.drawPath(option);\n this.setArrowDirection(this.thumbRectX, this.thumbRectWidth, scroll.height);\n parent.appendChild(this.leftArrowEle);\n parent.appendChild(this.rightArrowEle);\n };\n /**\n * Methods to set the arrow width\n * @param thumbRectX\n * @param thumbRectWidth\n * @param height\n */\n ScrollElements.prototype.setArrowDirection = function (thumbRectX, thumbRectWidth, height) {\n var circleRadius = 8;\n var leftDirection = 'M ' + ((thumbRectX - circleRadius / 2) + 1) + ' ' + (height / 2) + ' ' + 'L ' +\n (thumbRectX - circleRadius / 2 + 6) + ' ' + 11 + ' ' + 'L ' + (thumbRectX - circleRadius / 2 + 6) + ' ' + 5 + ' Z';\n var rightDirection = 'M ' + ((thumbRectX + thumbRectWidth + circleRadius / 2) - 0.5) + ' ' + (height / 2)\n + ' ' + 'L ' + (thumbRectX + thumbRectWidth + circleRadius / 2 - 6) + ' ' + 11.5 + ' ' + 'L ' + (thumbRectX +\n thumbRectWidth + circleRadius / 2 - 6) + ' ' + 4.5 + ' Z';\n this.leftArrowEle.setAttribute('d', leftDirection);\n this.rightArrowEle.setAttribute('d', rightDirection);\n };\n /**\n * Method to render thumb\n * @param scroll\n * @param renderer\n * @param parent\n */\n ScrollElements.prototype.thumb = function (scroll, renderer, parent) {\n scroll.startX = this.thumbRectX;\n var style = scroll.scrollbarThemeStyle;\n this.slider = renderer.drawRectangle(new RectOption('scrollBarThumb_' + scroll.axis.name, style.thumb, { width: 1, color: '' }, 1, new Rect(this.thumbRectX, 0, this.thumbRectWidth, scroll.height)));\n parent.appendChild(this.slider);\n };\n /**\n * Method to render circles\n * @param scroll\n * @param renderer\n * @param parent\n */\n ScrollElements.prototype.renderCircle = function (scroll, renderer, parent) {\n var style = scroll.scrollbarThemeStyle;\n var option = new CircleOption('scrollBar_leftCircle_' + scroll.axis.name, style.circle, { width: 1, color: style.circle }, 1, this.thumbRectX, scroll.height / 2, 8);\n var scrollShadowEle = '' +\n '' +\n '' +\n '' +\n '';\n var defElement = renderer.createDefs();\n defElement.innerHTML = scrollShadowEle;\n var shadowGroup = renderer.createGroup({\n id: scroll.axis.name + '_thumb_shadow'\n });\n shadowGroup.innerHTML = '';\n this.leftCircleEle = renderer.drawCircle(option);\n option.id = 'scrollBar_rightCircle_' + scroll.axis.name;\n option.cx = this.thumbRectX + this.thumbRectWidth;\n this.rightCircleEle = renderer.drawCircle(option);\n parent.appendChild(defElement);\n parent.appendChild(this.leftCircleEle);\n parent.appendChild(this.rightCircleEle);\n parent.appendChild(shadowGroup);\n };\n /**\n * Method to render grip elements\n * @param scroll\n * @param renderer\n * @param parent\n */\n ScrollElements.prototype.thumbGrip = function (scroll, renderer, parent) {\n var sidePadding = 0;\n var topPadding = 0;\n var gripWidth = 14;\n var gripCircleDiameter = 2;\n var padding = gripWidth / 2 - gripCircleDiameter;\n var style = scroll.scrollbarThemeStyle;\n var option = new CircleOption('scrollBar_gripCircle0' + '_' + scroll.axis.name, style.grip, { width: 1, color: style.grip }, 1, 0, 0, 1);\n this.gripCircle = renderer.createGroup({\n id: 'scrollBar_gripCircle_' + scroll.axis.name,\n transform: 'translate(' + ((this.thumbRectX + this.thumbRectWidth / 2) + ((scroll.isVertical ? 1 : -1) * padding)) +\n ',' + (scroll.isVertical ? '10' : '5') + ') rotate(' + (scroll.isVertical ? '180' : '0') + ')'\n });\n for (var i = 1; i <= 6; i++) {\n option.id = 'scrollBar_gripCircle' + i + '_' + scroll.axis.name;\n option.cx = sidePadding;\n option.cy = topPadding;\n this.gripCircle.appendChild(renderer.drawCircle(option));\n sidePadding = i === 3 ? 0 : (sidePadding + 5);\n topPadding = i >= 3 ? 5 : 0;\n }\n parent.appendChild(this.gripCircle);\n };\n return ScrollElements;\n}());\nexport { ScrollElements };\n","import { EventHandler, Browser, remove } from '@syncfusion/ej2-base';\nimport { Animation, createElement } from '@syncfusion/ej2-base';\nimport { ScrollElements, createScrollSvg } from './scrollbar-elements';\nimport { getElement, minMax } from '../utils/helper';\nimport { linear } from '../../chart/index';\nimport { getScrollbarThemeColor } from '../model/theme';\nimport { scrollChanged, scrollEnd, scrollStart } from '../model/constants';\n/**\n * Scrollbar Base\n */\nvar ScrollBar = /** @class */ (function () {\n /**\n * Constructor for creating scrollbar\n * @param component\n * @param axis\n */\n function ScrollBar(component, axis) {\n this.component = component;\n this.elements = [];\n this.scrollElements = new ScrollElements();\n this.axis = axis;\n this.mouseMoveListener = this.scrollMouseMove.bind(this);\n this.mouseUpListener = this.scrollMouseUp.bind(this);\n this.animateDuration = 500;\n this.isPointer = Browser.isPointer;\n this.browserName = Browser.info.name;\n }\n /**\n * To Mouse x and y position\n * @param e\n */\n ScrollBar.prototype.getMouseXY = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type.indexOf('touch') > -1) {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n pageX = e.clientX;\n pageY = e.clientY;\n }\n var svgRect = getElement('scrollBar_svg' + this.axis.name).getBoundingClientRect();\n this.mouseX = pageX - Math.max(svgRect.left, 0);\n this.mouseY = pageY - Math.max(svgRect.top, 0);\n };\n /**\n * Method to bind events for scrollbar svg object\n * @param element\n */\n ScrollBar.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.scrollMouseDown, this);\n EventHandler.add(element, Browser.touchMoveEvent, this.scrollMouseMove, this);\n EventHandler.add(element, Browser.touchEndEvent, this.scrollMouseUp, this);\n EventHandler.add(element, 'mousewheel', this.scrollMouseWheel, this);\n window.addEventListener('mousemove', this.mouseMoveListener, false);\n window.addEventListener('mouseup', this.mouseUpListener, false);\n };\n /**\n * Method to remove events for srcollbar svg object\n * @param element\n */\n ScrollBar.prototype.unWireEvents = function (element) {\n EventHandler.remove(element, Browser.touchStartEvent, this.scrollMouseDown);\n EventHandler.remove(element, Browser.touchMoveEvent, this.scrollMouseMove);\n EventHandler.remove(element, Browser.touchEndEvent, this.scrollMouseUp);\n EventHandler.remove(element, 'mousewheel', this.scrollMouseWheel);\n window.removeEventListener('mousemove', this.mouseMoveListener, false);\n window.removeEventListener('mouseup', this.mouseUpListener, false);\n };\n /**\n * Handles the mouse down on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseDown = function (e) {\n var id = e.target.id;\n var elem = this.scrollElements;\n this.getMouseXY(e);\n this.isResizeLeft = this.isExist(id, '_leftCircle_') || this.isExist(id, '_leftArrow_');\n this.isResizeRight = this.isExist(id, '_rightCircle_') || this.isExist(id, '_rightArrow_');\n this.previousXY = this.isVertical ? this.mouseY : this.mouseX;\n this.previousWidth = elem.thumbRectWidth;\n this.previousRectX = elem.thumbRectX;\n this.startZoomPosition = this.axis.zoomPosition;\n this.startZoomFactor = this.axis.zoomFactor;\n this.startRange = this.axis.visibleRange;\n this.scrollStarted = true;\n this.component.trigger(scrollStart, this.getArgs(scrollStart));\n if (this.isExist(id, 'scrollBarThumb_')) {\n this.isThumbDrag = true;\n this.svgObject.style.cursor = '-webkit-grabbing';\n }\n else if (this.isExist(id, 'scrollBarBackRect_')) {\n var currentX = this.moveLength(this.previousXY, this.previousRectX, 8);\n if (this.animateDuration) {\n currentX = this.isWithIn(currentX) ? currentX : elem.thumbRectX;\n this.performAnimation(elem.thumbRectX, currentX);\n }\n else {\n elem.thumbRectX = this.isWithIn(currentX) ? currentX : elem.thumbRectX;\n this.positionThumb(elem.thumbRectX, elem.thumbRectWidth);\n this.setZoomFactorPosition(elem.thumbRectX, elem.thumbRectWidth);\n }\n }\n };\n /**\n * To check the matched string\n * @param id\n * @param match\n */\n ScrollBar.prototype.isExist = function (id, match) {\n return id.indexOf(match) > -1;\n };\n /**\n * To check current poisition is within scrollbar region\n * @param currentX\n */\n ScrollBar.prototype.isWithIn = function (currentX) {\n var circleRadius = 8;\n return (currentX - circleRadius >= 0 &&\n currentX + this.scrollElements.thumbRectWidth + circleRadius <= this.width);\n };\n /**\n * Method to find move length of thumb\n * @param mouseXY\n * @param thumbX\n * @param circleRadius\n */\n ScrollBar.prototype.moveLength = function (mouseXY, thumbX, circleRadius) {\n var moveLength = (10 / 100) * (this.width - circleRadius * 2);\n if (mouseXY < thumbX) {\n moveLength = thumbX - (thumbX - moveLength > circleRadius ? moveLength : circleRadius);\n }\n else {\n moveLength = thumbX + (thumbX + this.scrollElements.thumbRectWidth + moveLength < this.width - circleRadius ?\n moveLength : circleRadius);\n }\n return moveLength;\n };\n /**\n * Method to calculate zoom factor and position\n * @param currentX\n * @param currentWidth\n */\n ScrollBar.prototype.setZoomFactorPosition = function (currentX, currentWidth) {\n var axis = this.axis;\n this.isScrollUI = true;\n var circleRadius = 8;\n var circleWidth = 1;\n var currentScrollWidth = currentX + currentWidth + circleRadius + circleWidth;\n var currentZPWidth = circleRadius + (circleWidth / 2);\n this.zoomPosition = (currentX - (currentX - currentZPWidth <= 0 ? currentZPWidth : 0)) / (this.isVertical\n ? axis.rect.height : this.width);\n this.zoomFactor = (currentWidth + (currentScrollWidth === this.width ? circleRadius + circleWidth : 0)) / (this.isVertical\n ? axis.rect.height : this.width);\n axis.zoomPosition = this.zoomPosition;\n axis.zoomFactor = this.zoomFactor;\n };\n /**\n * Handles the mouse move on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseMove = function (e) {\n var target = e.target;\n var elem = this.scrollElements;\n this.getMouseXY(e);\n this.setCursor(target);\n this.setTheme(target);\n var mouseXY = this.isVertical ? this.mouseY : this.mouseX;\n var range = this.axis.visibleRange;\n var zoomPosition = this.zoomPosition;\n var zoomFactor = this.zoomFactor;\n if (this.isThumbDrag) {\n this.svgObject.style.cursor = '-webkit-grabbing';\n var currentX = elem.thumbRectX + (mouseXY - this.previousXY);\n if (mouseXY >= 0 && mouseXY <= currentX + elem.thumbRectWidth) {\n elem.thumbRectX = this.isWithIn(currentX) ? currentX : elem.thumbRectX;\n this.positionThumb(elem.thumbRectX, elem.thumbRectWidth);\n this.previousXY = mouseXY;\n this.setZoomFactorPosition(currentX, elem.thumbRectWidth);\n }\n this.component.trigger(scrollChanged, this.getArgs(scrollChanged, range, zoomPosition, zoomFactor));\n }\n else if (this.isResizeLeft || this.isResizeRight) {\n this.resizeThumb(e);\n this.component.trigger(scrollChanged, this.getArgs(scrollChanged, range, zoomPosition, zoomFactor));\n }\n };\n /**\n * Handles the mouse wheel on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseWheel = function (e) {\n var svgRect = getElement('scrollBar_svg' + this.axis.name).getBoundingClientRect();\n this.mouseX = e.clientX - Math.max(svgRect.left, 0);\n this.mouseY = e.clientY - Math.max(svgRect.top, 0);\n var origin = 0.5;\n var elem = this.scrollElements;\n var axis = this.axis;\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 1 : -1 : (e.wheelDelta / 120) > 0 ? 1 : -1;\n var cumulative;\n cumulative = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * direction), 1);\n var range = this.axis.visibleRange;\n var zoomPosition = this.zoomPosition;\n var zoomFactor = this.zoomFactor;\n if (cumulative >= 1) {\n origin = axis.orientation === 'Horizontal' ? this.mouseX / axis.rect.width : 1 - (this.mouseY / axis.rect.height);\n origin = origin > 1 ? 1 : origin < 0 ? 0 : origin;\n this.zoomFactor = (cumulative === 1) ? 1 : minMax(1 / cumulative, 0, 1);\n this.zoomPosition = (cumulative === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - this.zoomFactor) * origin);\n }\n elem.thumbRectX = this.isWithIn(this.zoomPosition * this.width) ? this.zoomPosition * this.width : elem.thumbRectX;\n this.isScrollUI = true;\n this.positionThumb(elem.thumbRectX, elem.thumbRectWidth);\n axis.zoomFactor = this.zoomFactor;\n axis.zoomPosition = this.zoomPosition;\n this.component.trigger(scrollChanged, this.getArgs(scrollChanged, range, zoomPosition, zoomFactor));\n };\n /**\n * Handles the mouse up on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseUp = function (e) {\n var circleRadius = 8;\n var circleWidth = 1;\n this.startX = this.scrollElements.thumbRectX;\n var currentScrollWidth = this.startX + this.scrollElements.thumbRectWidth + circleRadius + circleWidth;\n var currentZPWidth = circleRadius + (circleWidth / 2);\n if (this.isResizeLeft || this.isResizeRight) {\n this.axis.zoomFactor = (currentScrollWidth >= this.width - 1 && (this.startX - currentZPWidth) <= 0) ? 1 : this.zoomFactor;\n }\n this.isThumbDrag = false;\n this.isResizeLeft = false;\n this.isResizeRight = false;\n if (this.scrollStarted) {\n this.component.trigger(scrollEnd, this.getArgs(scrollChanged, this.startRange, this.startZoomPosition, this.startZoomFactor));\n this.scrollStarted = false;\n }\n };\n /**\n * To render scroll bar\n * @private\n */\n ScrollBar.prototype.render = function () {\n this.getDefaults();\n this.getTheme();\n this.removeScrollSvg();\n createScrollSvg(this, this.component.renderer);\n this.wireEvents(this.svgObject);\n this.svgObject.appendChild(this.scrollElements.renderElements(this, this.component.renderer));\n return this.svgObject;\n };\n /**\n * Theming for scrollabr\n */\n ScrollBar.prototype.getTheme = function () {\n this.scrollbarThemeStyle = getScrollbarThemeColor(this.component.theme);\n };\n /**\n * Method to remove existing scrollbar\n */\n ScrollBar.prototype.removeScrollSvg = function () {\n if (document.getElementById('scrollBar_svg' + this.axis.name)) {\n remove(document.getElementById('scrollBar_svg' + this.axis.name));\n }\n };\n /**\n * Method to set cursor fpr scrollbar\n * @param target\n */\n ScrollBar.prototype.setCursor = function (target) {\n var id = target.id;\n this.svgObject.style.cursor = id.indexOf('scrollBarThumb_') > -1 || id.indexOf('_gripCircle') > -1 ?\n '-webkit-grab' : (id.indexOf('Circle_') > -1 || id.indexOf('Arrow_') > -1) ? this.isVertical ? 'ns-resize' :\n 'ew-resize' : 'auto';\n };\n /**\n * Method to set theme for sollbar\n * @param target\n */\n ScrollBar.prototype.setTheme = function (target) {\n var id = target.id;\n var isLeftHover = id.indexOf('_leftCircle_') > -1 || id.indexOf('_leftArrow_') > -1;\n var isRightHover = id.indexOf('_rightCircle_') > -1 || id.indexOf('_rightArrow_') > -1;\n var style = this.scrollbarThemeStyle;\n var leftArrowEle = this.scrollElements.leftArrowEle;\n var rightArrowEle = this.scrollElements.rightArrowEle;\n var leftCircleEle = this.scrollElements.leftCircleEle;\n var rightCircleEle = this.scrollElements.rightCircleEle;\n var isAxis = this.isCurrentAxis(target, leftArrowEle);\n leftCircleEle.style.fill = isLeftHover && isAxis ? style.circleHover : style.circle;\n rightCircleEle.style.fill = isRightHover && isAxis ? style.circleHover : style.circle;\n leftCircleEle.style.stroke = isLeftHover && isAxis ? style.circleHover : style.circle;\n rightCircleEle.style.stroke = isRightHover && isAxis ? style.circleHover : style.circle;\n if (this.component.theme === 'Highcontrast') {\n leftArrowEle.style.fill = isLeftHover && isAxis ? style.arrowHover : style.arrow;\n leftArrowEle.style.stroke = isLeftHover && isAxis ? style.arrowHover : style.arrow;\n rightArrowEle.style.fill = isRightHover && isAxis ? style.arrowHover : style.arrow;\n rightArrowEle.style.stroke = isRightHover && isAxis ? style.arrowHover : style.arrow;\n leftCircleEle.style.stroke = isLeftHover && isAxis ? style.circleHover : style.circle;\n rightCircleEle.style.stroke = isRightHover && isAxis ? style.circleHover : style.circle;\n }\n };\n /**\n * To check current axis\n * @param target\n * @param ele\n */\n ScrollBar.prototype.isCurrentAxis = function (target, ele) {\n return (target.id.split('_')[2] === ele.id.split('_')[2]);\n };\n /**\n * Method to resize thumb\n * @param e\n */\n ScrollBar.prototype.resizeThumb = function (e) {\n var currentWidth;\n var circleRadius = 8;\n var padding = 5;\n var gripWidth = 14;\n var minThumbWidth = circleRadius * 2 + padding * 2 + gripWidth;\n var thumbX = this.previousRectX;\n var mouseXY = this.isVertical ? this.mouseY : this.mouseX;\n var diff = Math.abs(this.previousXY - mouseXY);\n if (this.isResizeLeft && mouseXY >= 0) {\n var currentX = thumbX + (mouseXY > this.previousXY ? diff : -diff);\n currentWidth = currentX - circleRadius >= 0 ? this.previousWidth + (mouseXY > this.previousXY ? -diff : diff) :\n this.previousWidth;\n currentX = currentX - circleRadius >= 0 ? currentX : thumbX;\n if (currentWidth >= minThumbWidth && mouseXY < currentX + currentWidth) {\n this.scrollElements.thumbRectX = this.previousRectX = currentX;\n this.scrollElements.thumbRectWidth = this.previousWidth = currentWidth;\n this.previousXY = mouseXY;\n this.positionThumb(currentX, currentWidth);\n this.setZoomFactorPosition(currentX, currentWidth);\n }\n }\n else if (this.isResizeRight) {\n currentWidth = mouseXY >= minThumbWidth + this.scrollElements.thumbRectX && mouseXY <= this.width - circleRadius ?\n mouseXY - this.scrollElements.thumbRectX : this.previousWidth;\n this.scrollElements.thumbRectWidth = this.previousWidth = currentWidth;\n this.previousXY = mouseXY;\n this.positionThumb(this.startX, currentWidth);\n this.setZoomFactorPosition(this.startX, currentWidth);\n }\n };\n /**\n * Method to position the scrollbar thumb\n * @param currentX\n * @param currentWidth\n */\n ScrollBar.prototype.positionThumb = function (currentX, currentWidth) {\n var circlePadding = 3;\n var elem = this.scrollElements;\n var gripWidth = 14;\n var gripCircleDiameter = 2;\n var padding = gripWidth / 2 - gripCircleDiameter;\n elem.slider.setAttribute('x', currentX.toString());\n elem.slider.setAttribute('width', currentWidth.toString());\n elem.leftCircleEle.setAttribute('cx', currentX.toString());\n elem.rightCircleEle.setAttribute('cx', (currentX + currentWidth).toString());\n elem.setArrowDirection(currentX, currentWidth, this.height);\n elem.gripCircle.setAttribute('transform', 'translate(' + (currentX + currentWidth / 2 + ((this.isVertical ? 1 : -1) * padding)) +\n ',' + (this.isVertical ? '10' : '5') + ') rotate(' + (this.isVertical ? '180' : '0') + ')');\n };\n /**\n * Method to get default values\n */\n ScrollBar.prototype.getDefaults = function () {\n var circleRadius = 8;\n var padding = 5;\n var gripWidth = 14;\n var minThumbWidth = circleRadius * 2 + padding * 2 + gripWidth;\n var axis = this.axis;\n this.isVertical = axis.orientation === 'Vertical';\n var currentWidth = axis.zoomFactor * (this.isVertical ? axis.rect.height : axis.rect.width);\n currentWidth = currentWidth > minThumbWidth ? currentWidth : minThumbWidth;\n this.scrollX = axis.rect.x;\n this.scrollY = axis.rect.y;\n this.width = this.isVertical ? axis.rect.height : axis.rect.width;\n this.height = 16;\n var currentX = axis.zoomPosition * (this.isVertical ? axis.rect.height : this.width);\n this.scrollElements.thumbRectX = currentX > circleRadius ? currentX : circleRadius;\n this.scrollElements.thumbRectWidth = ((currentWidth + this.scrollElements.thumbRectX) < this.width - (circleRadius * 2))\n ? currentWidth : this.width - this.scrollElements.thumbRectX - circleRadius;\n };\n /**\n * Method for injecting scrollbar module\n * @param axis\n * @param component\n */\n ScrollBar.prototype.injectTo = function (axis, component) {\n axis.zoomingScrollBar = new ScrollBar(component, axis);\n };\n /**\n * Animation Calculation for scrollbar\n * @param previous\n * @param current\n */\n ScrollBar.prototype.performAnimation = function (previous, current) {\n var _this = this;\n var currentX;\n var width = this.scrollElements.thumbRectWidth;\n var range = this.axis.visibleRange;\n var zoomPosition = this.zoomPosition;\n var zoomFactor = this.zoomFactor;\n new Animation({}).animate(createElement('div'), {\n duration: this.animateDuration,\n progress: function (args) {\n currentX = linear(args.timeStamp, 0, current - previous, args.duration) + previous;\n _this.positionThumb(currentX, width);\n range = _this.axis.visibleRange;\n zoomPosition = _this.zoomPosition;\n zoomFactor = _this.zoomFactor;\n _this.setZoomFactorPosition(currentX, width);\n _this.component.trigger(scrollChanged, _this.getArgs(scrollChanged, range, zoomPosition, zoomFactor));\n },\n end: function () {\n _this.scrollElements.thumbRectX = current;\n _this.startX = current;\n _this.positionThumb(current, width);\n _this.setZoomFactorPosition(current, width);\n _this.component.trigger(scrollEnd, _this.getArgs(scrollEnd, range, zoomPosition, zoomFactor));\n }\n });\n };\n /**\n * Method to destroy scrollbar\n */\n ScrollBar.prototype.destroy = function () {\n var _this = this;\n if (this.axes) {\n this.axes.map(function (axis) {\n axis.zoomingScrollBar.destroy();\n });\n }\n else {\n this.elements.map(function (element) {\n _this.unWireEvents(element);\n remove(element.firstChild);\n });\n this.elements = [];\n }\n };\n /**\n * Method to get scrollbar module name\n */\n ScrollBar.prototype.getModuleName = function () {\n return 'ScrollBar';\n };\n ScrollBar.prototype.getArgs = function (eventName, range, zoomPosition, zoomFactor) {\n var scrollArgs = {\n axis: this.axis,\n name: eventName,\n range: this.axis.visibleRange,\n zoomFactor: this.axis.zoomFactor,\n zoomPosition: this.axis.zoomPosition,\n previousRange: range,\n previousZoomFactor: zoomFactor,\n previousZoomPosition: zoomPosition\n };\n return scrollArgs;\n };\n return ScrollBar;\n}());\nexport { ScrollBar };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Series } from '../series/chart-series';\nimport { ColumnBase } from './column-base';\nimport { Axis } from '../axis/axis';\n/**\n * `Pareto series` module used to render the Pareto series.\n */\nvar ParetoSeries = /** @class */ (function (_super) {\n __extends(ParetoSeries, _super);\n function ParetoSeries() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.paretoAxes = [];\n return _this;\n }\n /**\n * Defines the Line initialization\n */\n ParetoSeries.prototype.initSeries = function (targetSeries, chart) {\n var series = new Series(chart, 'series', targetSeries.properties, true);\n series.name = 'Pareto';\n series.yAxisName = targetSeries.yAxisName + '_CumulativeAxis';\n series.category = 'Pareto';\n targetSeries.category = 'Pareto';\n series.type = 'Line';\n series.interior = chart.themeStyle.errorBar;\n chart.visibleSeries.push(series);\n this.initAxis(targetSeries, series, chart);\n };\n /**\n * Defines the Axis initialization for Line\n */\n ParetoSeries.prototype.initAxis = function (paretoSeries, targetSeries, chart) {\n var isExist = this.paretoAxes.some(function (currentAxis) {\n return currentAxis.name === targetSeries.yAxisName;\n });\n if (!isExist) {\n var secondaryAxis = (paretoSeries.yAxisName ? chart.axes.filter(function (axis) {\n return axis.name === paretoSeries.yAxisName;\n })[0] : chart.primaryYAxis);\n var newAxis = new Axis(chart, 'axis', {\n name: targetSeries.yAxisName,\n majorGridLines: {\n width: 0\n },\n majorTickLines: secondaryAxis.majorTickLines,\n lineStyle: secondaryAxis.lineStyle,\n minimum: 0,\n maximum: 100,\n rowIndex: secondaryAxis.rowIndex,\n opposedPosition: true,\n labelFormat: '{value}%'\n });\n this.paretoAxes.push(newAxis);\n }\n };\n /**\n * Render Pareto series.\n * @return {void}\n * @private\n */\n ParetoSeries.prototype.render = function (series) {\n series.chart.columnSeriesModule.render(series);\n };\n /**\n * To perform the cumulative calculation for pareto series.\n */\n ParetoSeries.prototype.performCumulativeCalculation = function (json, series) {\n var data = json;\n var sum = 0;\n var count = 0;\n var max = 0;\n var length = data.length;\n for (var i = 0; i < length; i++) {\n sum += data[i][series.yName];\n }\n for (var i = 0; i < length; i++) {\n count = count + data[i][series.yName];\n data[i][series.yName] = Math.round((count / sum) * 100);\n }\n return data;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ParetoSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n ParetoSeries.prototype.getModuleName = function () {\n return 'ParetoSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the pareto series.\n * @return {void}\n * @private\n */\n ParetoSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return ParetoSeries;\n}(ColumnBase));\nexport { ParetoSeries };\n","/**\n * Defines the common functionalities of accumulation series\n */\nimport { isNullOrUndefined, Animation, createElement } from '@syncfusion/ej2-base';\nimport { degreeToLocation, getElement, indexFinder, linear } from '../../common/utils/helper';\nimport { pointByIndex } from '../model/acc-base';\n/**\n * Accumulation Base used to do some base calculation for accumulation chart.\n */\nvar AccumulationBase = /** @class */ (function () {\n /** @private */\n function AccumulationBase(accumulation) {\n this.accumulation = accumulation;\n }\n Object.defineProperty(AccumulationBase.prototype, \"center\", {\n /**\n * Gets the center of the pie\n * @private\n */\n get: function () {\n return this.pieCenter || (this.accumulation.visibleSeries[0].type === 'Pie' ?\n this.accumulation.pieSeriesModule.center : null);\n },\n /**\n * Sets the center of the pie\n * @private\n */\n set: function (value) {\n this.pieCenter = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"radius\", {\n /**\n * Gets the radius of the pie\n * @private\n */\n get: function () {\n return this.pieRadius !== undefined ? this.pieRadius :\n this.accumulation.pieSeriesModule.radius;\n },\n /**\n * Sets the radius of the pie\n * @private\n */\n set: function (value) {\n this.pieRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"labelRadius\", {\n /**\n * Gets the label radius of the pie\n * @private\n */\n get: function () {\n return this.pieLabelRadius !== undefined ? this.pieLabelRadius :\n this.accumulation.pieSeriesModule.labelRadius;\n },\n /**\n * Sets the label radius of the pie\n * @private\n */\n set: function (value) {\n this.pieLabelRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Checks whether the series is circular or not\n * @private\n */\n AccumulationBase.prototype.isCircular = function () {\n return this.accumulation.type === 'Pie';\n };\n /**\n * To process the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.processExplode = function (event) {\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n var pointIndex = indexFinder(event.target.id).point;\n if (isNaN(pointIndex) || (event.target.id.indexOf('_datalabel_') > -1 &&\n this.accumulation.visibleSeries[0].points[pointIndex].labelPosition === 'Outside')) {\n return null;\n }\n this.explodePoints(pointIndex, this.accumulation);\n this.deExplodeAll(pointIndex, this.accumulation.enableAnimation ? 300 : 0);\n }\n };\n /**\n * To invoke the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.invokeExplode = function () {\n var series = this.accumulation.visibleSeries[0];\n var duration = this.accumulation.enableAnimation ? 300 : 0;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.isExplode) {\n this.pointExplode(point.index, point, duration);\n }\n }\n if (this.accumulation.accumulationSelectionModule && this.accumulation.selectionMode !== 'None' &&\n this.accumulation.accumulationSelectionModule.selectedDataIndexes.length) {\n for (var _b = 0, _c = this.accumulation.accumulationSelectionModule.selectedDataIndexes; _b < _c.length; _b++) {\n var index = _c[_b];\n this.explodePoints(index.point, this.accumulation, true);\n this.deExplodeAll(index.point, duration);\n }\n }\n };\n /**\n * To deExplode all points in the series\n * @private\n */\n AccumulationBase.prototype.deExplodeAll = function (index, animationDuration) {\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var points = this.accumulation.visibleSeries[0].points;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var currentPoint = points_1[_i];\n if ((index !== currentPoint.index && !currentPoint.isSliced) || currentPoint.isClubbed) {\n currentPoint.isExplode = false;\n this.deExplodeSlice(currentPoint.index, pointId, animationDuration);\n }\n }\n };\n /**\n * To explode point by index\n * @private\n */\n AccumulationBase.prototype.explodePoints = function (index, chart, explode) {\n if (explode === void 0) { explode = false; }\n var series = chart.visibleSeries[0];\n var points = series.points;\n var point = pointByIndex(index, points);\n var explodePoints = true;\n var duration = this.accumulation.enableAnimation ? 300 : 0;\n if (isNullOrUndefined(point)) {\n return null;\n }\n var clubPointsExploded = !explode &&\n (point.isSliced || (series.clubbedPoints.length &&\n points[points.length - 1].index === series.clubbedPoints[series.clubbedPoints.length - 1].index));\n if (series.type === 'Pie' && (clubPointsExploded || point.isClubbed)) {\n explodePoints = this.clubPointExplode(index, point, series, points, chart, duration, explode, clubPointsExploded);\n }\n if (explodePoints) {\n this.pointExplode(index, point, duration, explode);\n }\n };\n AccumulationBase.prototype.getSum = function (points) {\n var total = 0;\n points.map(function (point) {\n total += point.visible ? point.y : 0;\n });\n return total;\n };\n ;\n AccumulationBase.prototype.clubPointExplode = function (index, point, series, points, chart, duration, explode, clubPointsExploded) {\n if (explode === void 0) { explode = false; }\n if (clubPointsExploded === void 0) { clubPointsExploded = false; }\n if (point.isClubbed) {\n chart.animateSeries = false;\n points.splice(points.length - 1, 1);\n series.clubbedPoints.map(function (point) {\n point.visible = true;\n point.isExplode = true;\n });\n chart.visibleSeries[0].points = points.concat(series.clubbedPoints);\n this.deExplodeAll(index, duration);\n series.sumOfPoints = this.getSum(chart.visibleSeries[0].points);\n chart.refreshChart();\n return false;\n }\n else if (clubPointsExploded || point.isSliced) {\n chart.animateSeries = false;\n points.splice(points.length - series.clubbedPoints.length, series.clubbedPoints.length);\n var clubPoint = series.generateClubPoint();\n clubPoint.index = points.length;\n clubPoint.color = series.clubbedPoints[0].color;\n points.push(clubPoint);\n series.sumOfPoints = this.getSum(points);\n this.deExplodeAll(index, duration);\n clubPoint.isExplode = false;\n chart.visibleSeries[0].points = points;\n chart.refreshChart();\n this.pointExplode(clubPoint.index, points[clubPoint.index], 0, true);\n clubPoint.isExplode = false;\n this.deExplodeSlice(clubPoint.index, chart.element.id + '_Series_0_Point_', duration);\n if (point.isSliced) {\n return false;\n }\n }\n return true;\n };\n /**\n * To Explode points\n * @param index\n * @param point\n * @param explode\n */\n AccumulationBase.prototype.pointExplode = function (index, point, duration, explode) {\n var translate;\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var chart = this.accumulation;\n if (!this.isCircular()) {\n translate = { x: chart.explodeDistance, y: 0 };\n }\n else {\n translate = degreeToLocation(point.midAngle, chart.explodeDistance, this.center);\n }\n if (this.isExplode(pointId + index) || explode) {\n point.isExplode = true;\n this.explodeSlice(index, translate, pointId, this.center || { x: 0, y: 0 }, duration);\n }\n else {\n point.isExplode = false;\n this.deExplodeSlice(index, pointId, duration);\n }\n };\n /**\n * To check point is exploded by id\n */\n AccumulationBase.prototype.isExplode = function (id) {\n var element = getElement(id);\n var transform = element ? element.getAttribute('transform') : null;\n return (element && (transform === 'translate(0, 0)' || transform === null || transform === 'translate(0)'));\n };\n /**\n * To deExplode the point by index\n */\n AccumulationBase.prototype.deExplodeSlice = function (index, sliceId, animationDuration) {\n var element = getElement(sliceId + index);\n var transform = element ? element.getAttribute('transform') : null;\n if (this.accumulation.enableAnimation && element && transform &&\n transform !== 'translate(0, 0)' && transform !== 'translate(0)') {\n var result = /translate\\((-?\\d+\\.?\\d*),?\\s*(-?\\d+[.]?\\d*)?\\)/.exec(transform);\n this.performAnimation(index, sliceId, 0, 0, +result[1], +result[2] || 0, animationDuration, true);\n }\n else {\n this.performAnimation(index, sliceId, 0, 0, 0, 0, animationDuration, true);\n }\n };\n /**\n * To translate the point elements by index and position\n */\n AccumulationBase.prototype.setTranslate = function (index, sliceId, position) {\n this.setElementTransform(sliceId + index, position);\n if (this.accumulation.visibleSeries[0].dataLabel.visible) {\n sliceId = this.accumulation.element.id + '_datalabel_Series_0_';\n this.setElementTransform(sliceId + 'shape_' + index, position);\n this.setElementTransform(sliceId + 'text_' + index, position);\n this.setElementTransform(sliceId + 'connector_' + index, position);\n }\n };\n /**\n * To translate the point element by id and position\n */\n AccumulationBase.prototype.setElementTransform = function (id, position) {\n var element = getElement(id);\n if (element) {\n element.setAttribute('transform', position);\n }\n };\n /**\n * To translate the point elements by index position\n */\n AccumulationBase.prototype.explodeSlice = function (index, translate, sliceId, center, animationDuration) {\n this.performAnimation(index, sliceId, 0, 0, translate.x - center.x, translate.y - center.y, animationDuration);\n };\n /**\n * To Perform animation point explode\n * @param index\n * @param sliceId\n * @param start\n * @param endX\n * @param endY\n */\n AccumulationBase.prototype.performAnimation = function (index, sliceId, startX, startY, endX, endY, duration, isReverse) {\n var _this = this;\n if (duration <= 0) {\n this.setTranslate(index, sliceId, 'translate(' + (endX) + ', ' + (endY) + ')');\n return null;\n }\n var xValue;\n var yValue;\n new Animation({}).animate(createElement('div'), {\n duration: duration,\n progress: function (args) {\n xValue = linear(args.timeStamp, startX, endX, args.duration);\n yValue = linear(args.timeStamp, startY, endY, args.duration);\n _this.setTranslate(index, sliceId, 'translate(' + (isReverse ? endX - xValue : xValue) + ', ' + (isReverse ? endY - yValue : yValue) + ')');\n },\n end: function (model) {\n _this.setTranslate(index, sliceId, 'translate(' + (isReverse ? startX : endX) + ', ' + (isReverse ? startX : endY) + ')');\n }\n });\n };\n return AccumulationBase;\n}());\nexport { AccumulationBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * Accumulation charts base file\n */\nimport { Animation, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { stringToNumber, ChartLocation, degreeToLocation, Rect, getAnimationFunction, getElement } from '../../common/utils/helper';\nimport { animationComplete } from '../../common/model/constants';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * PieBase class used to do pie base calculations.\n */\nvar PieBase = /** @class */ (function (_super) {\n __extends(PieBase, _super);\n function PieBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To initialize the property values.\n * @private\n */\n PieBase.prototype.initProperties = function (chart, series) {\n this.accumulation = chart;\n var size = Math.min(chart.initialClipRect.width, chart.initialClipRect.height);\n this.initAngles(series);\n this.radius = stringToNumber(series.radius, size / 2);\n this.innerRadius = stringToNumber(series.innerRadius, this.radius);\n this.labelRadius = series.dataLabel.position === 'Inside' ? (((this.radius - this.innerRadius) / 2) + this.innerRadius) :\n (this.radius + stringToNumber(series.dataLabel.connectorStyle.length || '4%', size / 2));\n chart.explodeDistance = series.explode ? stringToNumber(series.explodeOffset, this.radius) : 0;\n this.findCenter(chart, series);\n this.defaultLabelBound(series, series.dataLabel.visible, series.dataLabel.position);\n this.totalAngle -= 0.001;\n };\n /**\n * To find the center of the accumulation.\n * @private\n */\n PieBase.prototype.findCenter = function (accumulation, series) {\n this.accumulation = accumulation;\n this.center = {\n x: stringToNumber('50%', accumulation.initialClipRect.width) + (accumulation.initialClipRect.x),\n y: stringToNumber('50%', accumulation.initialClipRect.height) + (accumulation.initialClipRect.y)\n };\n var accumulationRect = this.getSeriesBound(series);\n var accumulationRectCenter = new ChartLocation(accumulationRect.x + accumulationRect.width / 2, accumulationRect.y + accumulationRect.height / 2);\n this.center.x += (this.center.x - accumulationRectCenter.x);\n this.center.y += (this.center.y - accumulationRectCenter.y);\n this.accumulation.center = this.center;\n };\n /**\n * To find angles from series.\n */\n PieBase.prototype.initAngles = function (series) {\n var endAngle = isNullOrUndefined(series.endAngle) ? series.startAngle : series.endAngle;\n this.totalAngle = (endAngle - series.startAngle) % 360;\n this.startAngle = series.startAngle - 90;\n this.totalAngle = this.totalAngle <= 0 ? (360 + this.totalAngle) : this.totalAngle;\n this.startAngle = (this.startAngle < 0 ? (this.startAngle + 360) : this.startAngle) % 360;\n };\n /**\n * To calculate data-label bound\n * @private\n */\n PieBase.prototype.defaultLabelBound = function (series, visible, position) {\n var accumulationBound = this.getSeriesBound(series);\n series.accumulationBound = accumulationBound;\n series.labelBound = new Rect(accumulationBound.x, accumulationBound.y, accumulationBound.width + accumulationBound.x, accumulationBound.height + accumulationBound.y);\n if (visible && position === 'Outside') {\n series.labelBound = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n }\n };\n /**\n * To calculate series bound\n * @private\n */\n PieBase.prototype.getSeriesBound = function (series) {\n var rect = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n this.initAngles(series);\n var start = this.startAngle;\n var total = this.totalAngle;\n var end = (this.startAngle + total) % 360;\n end = (end === 0) ? 360 : end;\n series.findMaxBounds(rect, this.getRectFromAngle(start));\n series.findMaxBounds(rect, this.getRectFromAngle(end));\n series.findMaxBounds(rect, new Rect(this.center.x, this.center.y, 0, 0));\n var nextQuandrant = (Math.floor(start / 90) * 90 + 90) % 360;\n var lastQuadrant = (Math.floor(end / 90) * 90) % 360;\n lastQuadrant = (lastQuadrant === 0) ? 360 : lastQuadrant;\n if (total >= 90 || lastQuadrant === nextQuandrant) {\n series.findMaxBounds(rect, this.getRectFromAngle(nextQuandrant));\n series.findMaxBounds(rect, this.getRectFromAngle(lastQuadrant));\n }\n if (start === 0 || (start + total >= 360)) {\n series.findMaxBounds(rect, this.getRectFromAngle(0));\n }\n var length = nextQuandrant === lastQuadrant ? 0 : Math.floor(total / 90);\n for (var i = 1; i < length; i++) {\n nextQuandrant = nextQuandrant + 90;\n if ((nextQuandrant < lastQuadrant || end < start) || total === 360) {\n series.findMaxBounds(rect, this.getRectFromAngle(nextQuandrant));\n }\n }\n rect.width -= rect.x;\n rect.height -= rect.y;\n return rect;\n };\n /**\n * To get rect location size from angle\n */\n PieBase.prototype.getRectFromAngle = function (angle) {\n var location = degreeToLocation(angle, this.radius, this.center);\n return new Rect(location.x, location.y, 0, 0);\n };\n /**\n * To get path arc direction\n */\n PieBase.prototype.getPathArc = function (center, start, end, radius, innerRadius) {\n var degree = end - start;\n degree = degree < 0 ? (degree + 360) : degree;\n var flag = (degree < 180) ? 0 : 1;\n if (!innerRadius && innerRadius === 0) {\n return this.getPiePath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, flag);\n }\n else {\n return this.getDoughnutPath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, degreeToLocation(start, innerRadius, center), degreeToLocation(end, innerRadius, center), innerRadius, flag);\n }\n };\n /**\n * To get pie direction\n */\n PieBase.prototype.getPiePath = function (center, start, end, radius, clockWise) {\n return 'M ' + center.x + ' ' + center.y + ' L ' + start.x + ' ' + start.y + ' A ' + radius + ' ' +\n radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y + ' Z';\n };\n /**\n * To get doughnut direction\n */\n PieBase.prototype.getDoughnutPath = function (center, start, end, radius, innerStart, innerEnd, innerRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise +\n ' 1 ' + end.x + ' ' + end.y + ' L ' + innerEnd.x + ' ' + innerEnd.y + ' A ' + innerRadius +\n ' ' + innerRadius + ' 0 ' + clockWise + ',0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n };\n /**\n * Method to start animation for pie series.\n */\n PieBase.prototype.doAnimation = function (slice, series) {\n var _this = this;\n var startAngle = series.startAngle - 85;\n var value;\n var radius = Math.max(this.accumulation.availableSize.height, this.accumulation.availableSize.width) * 0.75;\n radius += radius * (0.414); // formula r + r / 2 * (1.414 -1)\n var effect = getAnimationFunction('Linear'); // need to check animation type\n new Animation({}).animate(slice, {\n duration: series.animation.duration,\n delay: series.animation.delay,\n progress: function (args) {\n value = effect(args.timeStamp, startAngle, _this.totalAngle, args.duration);\n slice.setAttribute('d', _this.getPathArc(_this.center, startAngle, value, radius, 0));\n },\n end: function (args) {\n slice.setAttribute('d', _this.getPathArc(_this.center, 0, 359.99999, radius, 0));\n _this.accumulation.trigger(animationComplete, { series: series, accumulation: _this.accumulation, chart: _this.accumulation });\n var datalabelGroup = getElement(_this.accumulation.element.id + '_datalabel_Series_' + series.index);\n datalabelGroup.style.visibility = _this.accumulation.isDestroyed ? 'hidden' : 'visible';\n }\n });\n };\n return PieBase;\n}(AccumulationBase));\nexport { PieBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { PathOption, degreeToLocation, getElement, linear } from '../../common/utils/helper';\nimport { PieBase } from '../renderer/pie-base';\nimport { Animation, createElement } from '@syncfusion/ej2-base';\n/**\n * PieSeries module used to render `Pie` Series.\n */\nvar PieSeries = /** @class */ (function (_super) {\n __extends(PieSeries, _super);\n function PieSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To get path option, degree, symbolLocation from the point.\n * @private\n */\n PieSeries.prototype.renderPoint = function (point, series, chart, option, seriesGroup, redraw) {\n var sum = series.sumOfPoints;\n var yValue = point.visible ? point.y : 0;\n var degree = (sum) ? ((Math.abs(yValue) / sum) * (this.totalAngle)) : null;\n var start = Math.PI / 180 * ((90 - (360 - this.startAngle)) - 90);\n option.d = this.getPathOption(point, degree, this.startAngle % 360, yValue);\n point.midAngle = (this.startAngle - (degree / 2)) % 360;\n point.endAngle = this.startAngle % 360;\n point.symbolLocation = degreeToLocation(point.midAngle, (this.radius + this.innerRadius) / 2, this.center);\n if (!redraw) {\n seriesGroup.appendChild(chart.renderer.drawPath(option));\n point.degree = degree;\n point.start = start;\n }\n else {\n this.refresh(point, degree, start, chart, option, seriesGroup);\n }\n };\n PieSeries.prototype.refresh = function (point, degree, start, chart, option, seriesGroup) {\n var _this = this;\n var seriesElement = getElement(option.id);\n var currentStartAngle;\n var curentDegree;\n new Animation({}).animate(createElement('div'), {\n duration: 300,\n delay: 0,\n progress: function (args) {\n curentDegree = linear(args.timeStamp, point.degree, (degree - point.degree), args.duration);\n currentStartAngle = linear(args.timeStamp, point.start, start - point.start, args.duration);\n currentStartAngle = ((currentStartAngle / (Math.PI / 180)) + 360) % 360;\n seriesElement.setAttribute('d', _this.getPathOption(point, curentDegree, currentStartAngle, point.y));\n if (point.isExplode) {\n chart.accBaseModule.explodePoints(point.index, chart, true);\n }\n seriesElement.style.visibility = 'visible';\n },\n end: function (args) {\n seriesElement.style.visibility = point.visible ? 'visible' : 'hidden';\n seriesElement.setAttribute('d', option.d);\n point.degree = degree;\n point.start = start;\n }\n });\n };\n /**\n * To get path option from the point.\n */\n PieSeries.prototype.getPathOption = function (point, degree, startAngle, yValue) {\n if (!degree) {\n return '';\n }\n var path = this.getPathArc(this.center, startAngle % 360, (startAngle + degree) % 360, this.radius, this.innerRadius);\n this.startAngle += degree;\n return path;\n };\n /**\n * To animate the pie series.\n * @private\n */\n PieSeries.prototype.animateSeries = function (accumulation, option, series, slice) {\n var groupId = accumulation.element.id + 'SeriesGroup' + series.index;\n if (series.animation.enable && accumulation.animateSeries) {\n var clippath = accumulation.renderer.createClipPath({ id: groupId + '_clipPath' });\n var path = new PathOption(groupId + '_slice', 'transparent', 1, 'transparent', 1, '', '');\n var clipslice = accumulation.renderer.drawPath(path);\n clippath.appendChild(clipslice);\n accumulation.svgObject.appendChild(clippath);\n slice.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n this.doAnimation(clipslice, series);\n }\n };\n /**\n * To get the module name of the Pie series.\n */\n PieSeries.prototype.getModuleName = function () {\n return 'PieSeries';\n };\n /**\n * To destroy the pie series.\n * @return {void}\n * @private\n */\n PieSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroy method calling here\n */\n };\n return PieSeries;\n}(PieBase));\nexport { PieSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * AccumulationChart file\n */\nimport { Property, Component, Complex, Collection, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { Internationalization, Event, Browser, EventHandler, Touch } from '@syncfusion/ej2-base';\nimport { remove, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Font, Margin, Border, TooltipSettings, Indexes } from '../common/model/base';\nimport { AccumulationSeries } from './model/acc-base';\nimport { Theme, getThemeColor } from '../common/model/theme';\nimport { load, pointClick } from '../common/model/constants';\nimport { pointMove, chartMouseClick, chartMouseDown } from '../common/model/constants';\nimport { chartMouseLeave, chartMouseMove, chartMouseUp, resized } from '../common/model/constants';\nimport { LegendSettings } from '../common/legend/legend';\nimport { Rect, Size, subtractRect, indexFinder, appendChildElement, redrawElement } from '../common/utils/helper';\nimport { measureText, RectOption, showTooltip } from '../common/utils/helper';\nimport { textElement, TextOption, createSvg, calculateSize, removeElement, firstToLowerCase } from '../common/utils/helper';\nimport { getElement, titlePositionX } from '../common/utils/helper';\nimport { Data } from '../common/model/data';\nimport { AccumulationBase } from './renderer/accumulation-base';\nimport { PieSeries } from './renderer/pie-series';\nimport { AccumulationAnnotationSettings } from './model/acc-base';\nimport { ExportUtils } from '../common/utils/export';\nimport { getTitle } from '../common/utils/helper';\n/**\n * Represents the AccumulationChart control.\n * ```html\n *
\n * \n * ```\n */\nvar AccumulationChart = /** @class */ (function (_super) {\n __extends(AccumulationChart, _super);\n /**\n * Constructor for creating the AccumulationChart widget\n * @private\n */\n function AccumulationChart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private explode radius internal property */\n _this.explodeDistance = 0;\n _this.chartid = 57724;\n return _this;\n }\n Object.defineProperty(AccumulationChart.prototype, \"type\", {\n /** @private */\n get: function () {\n if (this.series && this.series.length) {\n return this.series[0].type;\n }\n return 'Pie';\n },\n enumerable: true,\n configurable: true\n });\n // accumulation chart methods\n /**\n * To create svg object, renderer and binding events for the container.\n */\n AccumulationChart.prototype.preRender = function () {\n this.unWireEvents();\n this.setCulture();\n this.animateSeries = true;\n if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-accumulationchart').length;\n this.element.id = 'acc_chart_' + this.chartid + '_' + collection;\n }\n calculateSize(this);\n this.wireEvents();\n };\n /**\n * Themeing for chart goes here\n */\n AccumulationChart.prototype.setTheme = function () {\n /*! Set theme for accumulation chart */\n this.themeStyle = getThemeColor(this.theme);\n };\n /**\n * To render the accumulation chart elements\n */\n AccumulationChart.prototype.render = function () {\n this.trigger(load, { accumulation: this, chart: this });\n this.setTheme();\n this.accBaseModule = new AccumulationBase(this);\n this.pieSeriesModule = new PieSeries(this);\n this.calculateVisibleSeries();\n this.processData();\n };\n /**\n * Method to unbind events for accumulation chart\n */\n AccumulationChart.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var move = Browser.touchMoveEvent;\n var stop = Browser.touchEndEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, move, this.accumulationMouseMove);\n EventHandler.remove(this.element, stop, this.accumulationMouseEnd);\n EventHandler.remove(this.element, start, this.accumulationMouseStart);\n EventHandler.remove(this.element, 'click', this.accumulationOnMouseClick);\n EventHandler.remove(this.element, 'contextmenu', this.accumulationRightClick);\n EventHandler.remove(this.element, cancel, this.accumulationMouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.accumulationResize);\n };\n /**\n * Method to bind events for the accumulation chart\n */\n AccumulationChart.prototype.wireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, move, this.accumulationMouseMove, this);\n EventHandler.add(this.element, stop, this.accumulationMouseEnd, this);\n EventHandler.add(this.element, start, this.accumulationMouseStart, this);\n EventHandler.add(this.element, 'click', this.accumulationOnMouseClick, this);\n EventHandler.add(this.element, 'contextmenu', this.accumulationRightClick, this);\n EventHandler.add(this.element, cancel, this.accumulationMouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.accumulationResize.bind(this));\n new Touch(this.element); // To avoid geasture blocking for browser\n /*! Apply the style for chart */\n this.setStyle(this.element);\n };\n /**\n * Method to set mouse x, y from events\n */\n AccumulationChart.prototype.setMouseXY = function (e) {\n var pageX;\n var pageY;\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n var rect = this.element.getBoundingClientRect();\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseEnd = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseUp, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n if (this.accumulationDataLabelModule && this.visibleSeries[0].dataLabel.visible) {\n this.accumulationDataLabelModule.move(e, this.mouseX, this.mouseY, this.isTouch);\n }\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.move(e);\n }\n }\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /*public removeSvgOffset(x: number, y: number): ChartLocation {\n let rect: ClientRect = this.element.getBoundingClientRect();\n let svgRect: ClientRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n return { x: (x - rect.left) - Math.max(svgRect.left - rect.left, 0), y: (y - rect.top) - Math.max(svgRect.top - rect.top, 0)};\n }*/\n /**\n * Handles the mouse start.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseStart = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseDown, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n return false;\n };\n /**\n * Handles the accumulation chart resize.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n var args = {\n accumulation: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0),\n chart: this,\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n calculateSize(_this);\n args.currentSize = _this.availableSize;\n _this.trigger(resized, args);\n _this.refreshSeries();\n _this.refreshChart();\n }, 500);\n return false;\n };\n /**\n * Handles the export method for accumulation control.\n */\n AccumulationChart.prototype.export = function (type, fileName, orientation, controls, width, height) {\n var exportChart = new ExportUtils(this);\n exportChart.export(type, fileName, orientation, (controls ? controls : [this]), width, height);\n };\n /**\n * Handles the print method for accumulation chart control.\n */\n AccumulationChart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Applying styles for accumulation chart element\n */\n AccumulationChart.prototype.setStyle = function (element) {\n element.style.touchAction = 'element';\n element.style.msTouchAction = 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Method to set the annotation content dynamically for accumulation.\n */\n AccumulationChart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var annotation = this.annotations[annotationIndex];\n var element;\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n if (content) {\n annotation.content = content;\n if (parentNode) {\n element = this.createElement('div');\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n parentNode.appendChild(element.children[0]);\n }\n else {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n }\n };\n /**\n * Handles the mouse move on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseMove = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseMove, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointMove) {\n this.triggerPointEvent(pointMove, e.target);\n }\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.move(e);\n }\n if (this.accumulationDataLabelModule && this.visibleSeries[0] && this.visibleSeries[0].dataLabel.visible) {\n this.accumulationDataLabelModule.move(e, this.mouseX, this.mouseY);\n }\n if (!this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY);\n }\n this.notify(Browser.touchMoveEvent, e);\n return false;\n };\n AccumulationChart.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n var id = (targetId === (this.element.id + '_title') || targetId === (this.element.id + '_subTitle'));\n if ((event.target.textContent.indexOf('...') > -1) && id) {\n var title = (targetId === (this.element.id + '_title')) ? this.title : this.subTitle;\n showTooltip(title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n /**\n * Handles the mouse click on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationOnMouseClick = function (e) {\n this.setMouseXY(e);\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.click(e);\n }\n if (this.selectionMode !== 'None' && this.accumulationSelectionModule) {\n this.accumulationSelectionModule.calculateSelectedElements(this, e);\n }\n if (this.visibleSeries[0].explode) {\n this.accBaseModule.processExplode(e);\n }\n this.trigger(chartMouseClick, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointClick) {\n this.triggerPointEvent(pointClick, e.target);\n }\n return false;\n };\n AccumulationChart.prototype.triggerPointEvent = function (event, element) {\n var indexes = indexFinder(element.id, true);\n if (indexes.series >= 0 && indexes.point >= 0) {\n this.trigger(event, { series: this.series[indexes.series],\n point: this.series[indexes.series].points[indexes.point],\n seriesIndex: indexes.series, pointIndex: indexes.point,\n x: this.mouseX, y: this.mouseY });\n }\n };\n /**\n * Handles the mouse right click on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseLeave = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseLeave, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n this.notify(Browser.isPointer ? 'pointerleave' : 'mouseleave', e);\n return false;\n };\n /**\n * Method to set culture for chart\n */\n AccumulationChart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Method to create SVG element for accumulation chart.\n */\n AccumulationChart.prototype.createPieSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the SVG from accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.removeSvg = function () {\n if (this.redraw) {\n return null;\n }\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n removeElement('EJ2_legend_tooltip');\n removeElement('EJ2_datalabel_tooltip');\n };\n /**\n * Method to create the secondary element for tooltip, datalabel and annotaitons.\n */\n AccumulationChart.prototype.createSecondaryElement = function () {\n var element = redrawElement(this.redraw, this.element.id + '_Secondary_Element') ||\n this.createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: relative'\n });\n appendChildElement(this.element, element, this.redraw);\n };\n /**\n * Method to find visible series based on series types\n */\n AccumulationChart.prototype.calculateVisibleSeries = function () {\n this.visibleSeries = [];\n for (var i = 0, length_1 = this.series.length; i < length_1; i++) {\n this.series[i].index = i;\n if (this.series[i].type === this.type && this.visibleSeries.length === 0) {\n this.visibleSeries.push(this.series[i]);\n break;\n }\n }\n };\n /**\n * To find points from dataSource\n */\n AccumulationChart.prototype.processData = function (render) {\n if (render === void 0) { render = true; }\n this.seriesCounts = 0;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n series.dataModule = new Data(series.dataSource || this.dataSource, series.query);\n series.refreshDataManager(this, render);\n }\n };\n /**\n * To refresh the accumulation chart\n * @private\n */\n AccumulationChart.prototype.refreshChart = function () {\n this.doGrouppingProcess();\n this.createPieSvg();\n this.calculateBounds();\n this.renderElements();\n removeElement('chartmeasuretext');\n };\n /**\n * Method to find groupped points\n */\n AccumulationChart.prototype.doGrouppingProcess = function () {\n var series = this.visibleSeries[0];\n if (!isNullOrUndefined(series.resultData) && ((!isNullOrUndefined(series.lastGroupTo) &&\n series.lastGroupTo !== series.groupTo))) {\n series.getPoints(series.resultData, this);\n }\n };\n /**\n * Method to calculate bounds for accumulation chart\n */\n AccumulationChart.prototype.calculateBounds = function () {\n this.initialClipRect = new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height);\n this.titleCollection = [];\n this.subTitleCollection = [];\n var titleHeight = 0;\n var subTitleHeight = 0;\n var maxWidth = 0;\n var titleWidth = 0;\n this.titleCollection = getTitle(this.title, this.titleStyle, this.initialClipRect.width);\n titleHeight = measureText(this.title, this.titleStyle).height * this.titleCollection.length;\n if (this.subTitle) {\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n this.subTitleCollection = getTitle(this.subTitle, this.subTitleStyle, maxWidth);\n subTitleHeight = (measureText(this.subTitle, this.subTitleStyle).height * this.subTitleCollection.length);\n }\n subtractRect(this.initialClipRect, new Rect(0, (subTitleHeight + titleHeight), this.margin.right + this.margin.left, this.margin.bottom + this.margin.top));\n this.calculateLegendBounds();\n };\n /*\n * Method to calculate legend bounds for accumulation chart\n */\n AccumulationChart.prototype.calculateLegendBounds = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n this.accumulationLegendModule.getLegendOptions(this, this.visibleSeries);\n this.accumulationLegendModule.calculateLegendBounds(this.initialClipRect, this.availableSize);\n };\n /**\n * To render elements for accumulation chart\n * @private\n */\n AccumulationChart.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.createSecondaryElement();\n this.renderSeries();\n this.renderLegend();\n appendChildElement(this.element, this.svgObject, this.redraw);\n this.processSelection();\n this.processExplode();\n this.renderAnnotation();\n this.setSecondaryElementPosition();\n this.trigger('loaded', { accumulation: this, chart: this });\n this.animateSeries = false;\n };\n /**\n * To set the left and top position for data label template for center aligned chart\n * @private\n */\n AccumulationChart.prototype.setSecondaryElementPosition = function () {\n var tooltipParent = getElement(this.element.id + '_Secondary_Element');\n if (!tooltipParent) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n tooltipParent.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n tooltipParent.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n /**\n * To render the annotaitions for accumulation series.\n * @private\n */\n AccumulationChart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n /**\n * Method to process the explode in accumulation chart\n * @private\n */\n AccumulationChart.prototype.processExplode = function () {\n if (this.redraw) {\n return null;\n }\n if (!this.visibleSeries[0].explode) {\n return null;\n }\n this.accBaseModule.invokeExplode();\n };\n /**\n * Method to render series for accumulation chart\n */\n AccumulationChart.prototype.renderSeries = function () {\n if (!this.redraw) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_SeriesCollection' }));\n }\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible && this[(firstToLowerCase(series.type) + 'SeriesModule')]) {\n this[(firstToLowerCase(series.type) + 'SeriesModule')].initProperties(this, series);\n series.renderSeries(this, this.redraw);\n }\n }\n };\n /**\n * Method to render border for accumulation chart\n */\n AccumulationChart.prototype.renderBorder = function () {\n var padding = this.border.width;\n appendChildElement(this.svgObject, this.renderer.drawRectangle(new RectOption(this.element.id + '_border', this.background || this.themeStyle.background, this.border, 1, new Rect(padding / 2, padding / 2, this.availableSize.width - padding, this.availableSize.height - padding))), this.redraw);\n };\n /**\n * Method to render legend for accumulation chart\n */\n AccumulationChart.prototype.renderLegend = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n if (this.accumulationLegendModule.legendCollections.length) {\n if (this.visibleSeries[0].type === 'Pie') {\n this.accumulationLegendModule.getSmartLegendLocation(this.visibleSeries[0].labelBound, this.accumulationLegendModule.legendBounds, this.margin);\n }\n this.accumulationLegendModule.renderLegend(this, this.legendSettings, this.accumulationLegendModule.legendBounds, this.redraw);\n }\n };\n /**\n * To process the selection in accumulation chart\n * @private\n */\n AccumulationChart.prototype.processSelection = function () {\n if (!this.accumulationSelectionModule || this.selectionMode === 'None') {\n return null;\n }\n var selectedDataIndexes = extend([], this.accumulationSelectionModule.selectedDataIndexes, null, true);\n this.accumulationSelectionModule.invokeSelection(this);\n if (selectedDataIndexes.length > 0) {\n this.accumulationSelectionModule.selectedDataIndexes = selectedDataIndexes;\n this.accumulationSelectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n /**\n * To render title for accumulation chart\n */\n AccumulationChart.prototype.renderTitle = function () {\n var rect;\n var margin = this.margin;\n if (!this.title) {\n return null;\n }\n var alignment = this.titleStyle.textAlignment;\n var getAnchor = alignment === 'Near' ? 'start' : alignment === 'Far' ? 'end' : 'middle';\n var titleSize = measureText(this.title, this.titleStyle);\n rect = new Rect(margin.left, 0, this.availableSize.width - margin.left - margin.right, 0);\n var options = new TextOption(this.element.id + '_title', titlePositionX(rect, this.titleStyle), this.margin.top + (titleSize.height * 3 / 4), getAnchor, this.titleCollection, '', 'auto');\n var element = textElement(options, this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject, false, this.redraw);\n if (this.subTitle) {\n this.renderSubTitle(options);\n }\n };\n AccumulationChart.prototype.renderSubTitle = function (options) {\n var maxWidth = 0;\n var titleWidth = 0;\n var padding = 10;\n var rect;\n var alignment = this.titleStyle.textAlignment;\n var getAnchor = function (alignment) {\n return alignment === 'Near' ? 'start' : alignment === 'Far' ? 'end' : 'middle';\n };\n var subTitleElementSize = measureText(this.subTitle, this.subTitleStyle);\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n rect = new Rect(alignment === 'Center' ? (options.x - maxWidth / 2) : alignment === 'Far' ? options.x - maxWidth : options.x, 0, maxWidth, 0);\n var subTitleOption = new TextOption(this.element.id + '_subTitle', titlePositionX(rect, this.subTitleStyle), options.y * options.text.length + ((subTitleElementSize.height) * 3 / 4) + padding, getAnchor(this.subTitleStyle.textAlignment), this.subTitleCollection, '', 'auto');\n var element = textElement(subTitleOption, this.subTitleStyle, this.subTitleStyle.color || this.themeStyle.chartTitle, this.svgObject, false, this.redraw);\n };\n /**\n * To get the series parent element\n * @private\n */\n AccumulationChart.prototype.getSeriesElement = function () {\n return this.svgObject.getElementsByTagName('g')[0];\n };\n /**\n * To refresh the all visible series points\n * @private\n */\n AccumulationChart.prototype.refreshSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n this.refreshPoints(series.points);\n }\n };\n /**\n * To refresh points label region and visible\n * @private\n */\n AccumulationChart.prototype.refreshPoints = function (points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n point.labelPosition = null;\n point.labelRegion = null;\n point.labelVisible = true;\n }\n };\n /**\n * To get Module name\n * @private\n */\n AccumulationChart.prototype.getModuleName = function () {\n return 'accumulationchart';\n };\n /**\n * To destroy the accumulationcharts\n * @private\n */\n AccumulationChart.prototype.destroy = function () {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-accumulationchart');\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n AccumulationChart.prototype.requiredModules = function () {\n var modules = [];\n var enableAnnotation = false;\n modules.push({\n member: this.type + 'Series',\n args: [this]\n });\n if (this.legendSettings.visible) {\n modules.push({\n member: 'AccumulationLegend',\n args: [this]\n });\n }\n if (this.findDatalabelVisibility()) {\n modules.push({\n member: 'AccumulationDataLabel',\n args: [this]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'AccumulationTooltip',\n args: [this]\n });\n }\n if (this.selectionMode !== 'None') {\n modules.push({\n member: 'AccumulationSelection',\n args: [this]\n });\n }\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To find datalabel visibility in series\n */\n AccumulationChart.prototype.findDatalabelVisibility = function () {\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.dataLabel.visible) {\n return true;\n }\n }\n return false;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n AccumulationChart.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n AccumulationChart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var update = {\n refreshElements: false, refreshBounds: false\n };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'theme':\n this.animateSeries = true;\n break;\n case 'title':\n case 'subTitle':\n case 'height':\n case 'width':\n case 'margin':\n update.refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n update.refreshBounds = true;\n }\n else {\n update.refreshElements = true;\n }\n break;\n case 'subTitleStyle':\n if (newProp.subTitleStyle && (newProp.subTitleStyle.size || newProp.subTitleStyle.textOverflow)) {\n update.refreshBounds = true;\n }\n else {\n update.refreshElements = true;\n }\n break;\n case 'legendSettings':\n update.refreshBounds = true;\n update.refreshElements = true;\n break;\n case 'dataSource':\n this.processData(false);\n update.refreshBounds = true;\n break;\n case 'series':\n var len = this.series.length;\n var seriesRefresh = false;\n for (var i = 0; i < len; i++) {\n if (newProp.series[i] && (newProp.series[i].dataSource || newProp.series[i].yName || newProp.series[i].xName)) {\n seriesRefresh = true;\n }\n if (newProp.series[i] && newProp.series[i].explodeIndex !== oldProp.series[i].explodeIndex) {\n this.accBaseModule.explodePoints(newProp.series[i].explodeIndex, this);\n this.accBaseModule.deExplodeAll(newProp.series[i].explodeIndex, this.enableAnimation ? 300 : 0);\n }\n }\n if (seriesRefresh) {\n this.processData(false);\n update.refreshBounds = true;\n }\n break;\n case 'locale':\n case 'currencyCode':\n _super.prototype.refresh.call(this);\n break;\n case 'background':\n case 'border':\n case 'annotations':\n case 'enableSmartLabels':\n update.refreshElements = true;\n break;\n case 'isMultiSelect':\n case 'selectedDataIndexes':\n case 'selectionMode':\n if (this.accumulationSelectionModule) {\n if (isNullOrUndefined(this.accumulationSelectionModule.selectedDataIndexes)) {\n this.accumulationSelectionModule.invokeSelection(this);\n }\n else {\n this.accumulationSelectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n }\n break;\n }\n }\n if (!update.refreshBounds && update.refreshElements) {\n this.createPieSvg();\n this.renderElements();\n }\n else if (update.refreshBounds) {\n this.refreshSeries();\n this.createPieSvg();\n this.calculateBounds();\n this.renderElements();\n }\n };\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"title\", void 0);\n __decorate([\n Property('')\n ], AccumulationChart.prototype, \"dataSource\", void 0);\n __decorate([\n Complex(Theme.chartTitleFont, Font)\n ], AccumulationChart.prototype, \"titleStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"subTitle\", void 0);\n __decorate([\n Complex(Theme.chartSubTitleFont, Font)\n ], AccumulationChart.prototype, \"subTitleStyle\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], AccumulationChart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], AccumulationChart.prototype, \"tooltip\", void 0);\n __decorate([\n Property('None')\n ], AccumulationChart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property(false)\n ], AccumulationChart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Property(true)\n ], AccumulationChart.prototype, \"enableAnimation\", void 0);\n __decorate([\n Collection([], Indexes)\n ], AccumulationChart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Complex({}, Margin)\n ], AccumulationChart.prototype, \"margin\", void 0);\n __decorate([\n Property(true)\n ], AccumulationChart.prototype, \"enableSmartLabels\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], AccumulationChart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"background\", void 0);\n __decorate([\n Collection([{}], AccumulationSeries)\n ], AccumulationChart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], AccumulationAnnotationSettings)\n ], AccumulationChart.prototype, \"annotations\", void 0);\n __decorate([\n Property('Material')\n ], AccumulationChart.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"resized\", void 0);\n __decorate([\n Property('USD')\n ], AccumulationChart.prototype, \"currencyCode\", void 0);\n AccumulationChart = __decorate([\n NotifyPropertyChanges\n ], AccumulationChart);\n return AccumulationChart;\n}(Component));\nexport { AccumulationChart };\n","/**\n * Defines the common behavior of funnel and pyramid series\n */\nvar __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Size, stringToNumber, Rect } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * TriangularBase is used to calculate base functions for funnel/pyramid series.\n */\nvar TriangularBase = /** @class */ (function (_super) {\n __extends(TriangularBase, _super);\n function TriangularBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the properties of funnel/pyramid series\n * @private\n */\n TriangularBase.prototype.initProperties = function (chart, series) {\n var actualChartArea = chart.initialClipRect;\n series.triangleSize = new Size(stringToNumber(series.width, actualChartArea.width), stringToNumber(series.height, actualChartArea.height));\n series.neckSize = new Size(stringToNumber(series.neckWidth, actualChartArea.width), stringToNumber(series.neckHeight, actualChartArea.height));\n this.defaultLabelBound(series, series.dataLabel.visible, series.dataLabel.position, chart);\n if (series.explodeOffset === '30%') {\n series.explodeOffset = '25px';\n }\n chart.explodeDistance = stringToNumber(series.explodeOffset, actualChartArea.width);\n var points = series.points;\n this.initializeSizeRatio(points, series);\n };\n /**\n * Initializes the size of the pyramid/funnel segments\n * @private\n */\n TriangularBase.prototype.initializeSizeRatio = function (points, series, reverse) {\n if (reverse === void 0) { reverse = false; }\n var sumOfPoints = series.sumOfPoints;\n //Limiting the ratio within the range of 0 to 1\n var gapRatio = Math.min(Math.max(series.gapRatio, 0), 1);\n //% equivalence of a value 1\n var coEff = 1 / (sumOfPoints * (1 + gapRatio / (1 - gapRatio)));\n var spacing = gapRatio / (points.length - 1);\n var y = 0;\n //starting from bottom\n for (var i = points.length - 1; i >= 0; i--) {\n var index = reverse ? points.length - 1 - i : i;\n if (points[index].visible) {\n var height = coEff * points[index].y;\n points[index].yRatio = y;\n points[index].heightRatio = height;\n y += height + spacing;\n }\n }\n };\n /**\n * Marks the label location from the set of points that forms a pyramid/funnel segment\n * @private\n */\n TriangularBase.prototype.setLabelLocation = function (series, point, points) {\n var last = points.length - 1;\n var bottom = series.type === 'Funnel' ? points.length - 2 : points.length - 1;\n var x = (points[0].x + points[bottom].x) / 2;\n var right = (points[1].x + points[bottom - 1].x) / 2;\n point.region = new Rect(x, points[0].y, right - x, points[bottom].y - points[0].y);\n point.symbolLocation = {\n x: point.region.x + point.region.width / 2,\n y: point.region.y + point.region.height / 2\n };\n point.labelOffset = {\n x: point.symbolLocation.x - (points[0].x + points[last].x) / 2,\n y: point.symbolLocation.y - (points[0].y + points[last].y) / 2\n };\n };\n /**\n * Finds the path to connect the list of points\n * @private\n */\n TriangularBase.prototype.findPath = function (locations) {\n var path = 'M';\n for (var i = 0; i < locations.length; i++) {\n path += locations[i].x + ' ' + locations[i].y;\n if (i !== locations.length - 1) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * To calculate data-label bounds\n * @private\n */\n TriangularBase.prototype.defaultLabelBound = function (series, visible, position, chart) {\n var x = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var y = (chart.initialClipRect.height - series.triangleSize.height) / 2;\n var accumulationBound = new Rect(x, y, series.triangleSize.width, series.triangleSize.height);\n series.labelBound = new Rect(accumulationBound.x, accumulationBound.y, accumulationBound.width + accumulationBound.x, accumulationBound.height + accumulationBound.y);\n series.accumulationBound = accumulationBound;\n if (visible && position === 'Outside') {\n series.labelBound = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n }\n };\n return TriangularBase;\n}(AccumulationBase));\nexport { TriangularBase };\n","/**\n * Defines the behavior of a funnel series\n */\nvar __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { appendChildElement, removeElement } from '../../common/utils/helper';\nimport { TriangularBase } from './triangular-base';\n/**\n * FunnelSeries module used to render `Funnel` Series.\n */\nvar FunnelSeries = /** @class */ (function (_super) {\n __extends(FunnelSeries, _super);\n function FunnelSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the path of a funnel segment\n */\n FunnelSeries.prototype.getSegmentData = function (point, series, chart) {\n var lineWidth;\n var topRadius;\n var bottomRadius;\n var endTop;\n var endBottom;\n var minRadius;\n var endMin;\n var bottomY;\n var area = series.triangleSize;\n var offset = 0;\n var extraSpace = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var emptySpaceAtLeft = extraSpace + chart.initialClipRect.x;\n var seriesTop = chart.initialClipRect.y + (chart.initialClipRect.height - area.height) / 2;\n //defines the top and bottom of a segment\n var top = point.yRatio * area.height;\n var bottom = top + point.heightRatio * area.height;\n var neckSize = series.neckSize;\n lineWidth = neckSize.width + (area.width - neckSize.width) * ((area.height - neckSize.height - top) /\n (area.height - neckSize.height));\n topRadius = (area.width / 2) - lineWidth / 2;\n //Calculating the middle slope change and bottom\n endTop = topRadius + lineWidth;\n if (bottom > area.height - neckSize.height || area.height === neckSize.height) {\n lineWidth = neckSize.width;\n }\n else {\n lineWidth = neckSize.width + (area.width - neckSize.width) *\n ((area.height - neckSize.height - bottom) / (area.height - neckSize.height));\n }\n bottomRadius = (area.width / 2) - (lineWidth / 2);\n endBottom = bottomRadius + lineWidth;\n if (top >= area.height - neckSize.height) {\n topRadius = bottomRadius = minRadius = (area.width / 2) - neckSize.width / 2;\n endTop = endBottom = endMin = (area.width / 2) + neckSize.width / 2;\n }\n else if (bottom > (area.height - neckSize.height)) {\n minRadius = bottomRadius = (area.width / 2) - lineWidth / 2;\n endMin = endBottom = minRadius + lineWidth;\n bottomY = area.height - neckSize.height;\n }\n top += seriesTop;\n bottom += seriesTop;\n bottomY += seriesTop;\n var line1 = { x: emptySpaceAtLeft + offset + topRadius, y: top };\n var line2 = { x: emptySpaceAtLeft + offset + endTop, y: top };\n var line4 = { x: emptySpaceAtLeft + offset + endBottom, y: bottom };\n var line5 = { x: emptySpaceAtLeft + offset + bottomRadius, y: bottom };\n var line3 = { x: emptySpaceAtLeft + offset + endBottom, y: bottom };\n var line6 = { x: emptySpaceAtLeft + offset + bottomRadius, y: bottom };\n if (bottomY) {\n line3 = { x: emptySpaceAtLeft + offset + endMin, y: bottomY };\n line6 = { x: emptySpaceAtLeft + offset + minRadius, y: bottomY };\n }\n var polygon = [line1, line2, line3, line4, line5, line6];\n this.setLabelLocation(series, point, polygon);\n var direction = this.findPath(polygon);\n return direction;\n };\n /**\n * Renders a funnel segment\n * @private\n */\n FunnelSeries.prototype.renderPoint = function (point, series, chart, options, seriesGroup, redraw) {\n if (!point.visible) {\n removeElement(options.id);\n return null;\n }\n var direction = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n options.d = direction;\n appendChildElement(seriesGroup, chart.renderer.drawPath(options), redraw);\n if (point.isExplode) {\n chart.accBaseModule.explodePoints(point.index, chart, true);\n }\n };\n /**\n * To get the module name of the funnel series.\n */\n FunnelSeries.prototype.getModuleName = function () {\n return 'FunnelSeries';\n };\n /**\n * To destroy the funnel series.\n * @return {void}\n * @private\n */\n FunnelSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroys the funnel series\n */\n };\n return FunnelSeries;\n}(TriangularBase));\nexport { FunnelSeries };\n","/**\n * Defines the behavior of a pyramid series\n */\nvar __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { appendChildElement } from '../../common/utils/helper';\nimport { TriangularBase } from './triangular-base';\nimport { removeElement } from '../../sparkline/utils/helper';\n/**\n * PyramidSeries module used to render `Pyramid` Series.\n */\nvar PyramidSeries = /** @class */ (function (_super) {\n __extends(PyramidSeries, _super);\n function PyramidSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the path of a pyramid segment\n */\n PyramidSeries.prototype.getSegmentData = function (point, series, chart) {\n var area = series.triangleSize;\n //top of th series\n var seriesTop = chart.initialClipRect.y + (chart.initialClipRect.height - area.height) / 2;\n var points = [];\n //consider, if the point is exploded\n var offset = 0;\n var extraSpace = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var emptySpaceAtLeft = extraSpace + chart.initialClipRect.x;\n //top and bottom\n var top = point.yRatio;\n var bottom = point.yRatio + point.heightRatio;\n //width of the top and bottom edge\n var topRadius = 0.5 * (1 - point.yRatio);\n var bottomRadius = 0.5 * (1 - bottom);\n top += seriesTop / area.height;\n bottom += seriesTop / area.height;\n var line1 = {\n x: emptySpaceAtLeft + offset + topRadius * area.width,\n y: top * area.height\n };\n var line2 = {\n x: emptySpaceAtLeft + offset + (1 - topRadius) * area.width,\n y: top * area.height\n };\n var line3 = {\n x: emptySpaceAtLeft + offset + (1 - bottomRadius) * area.width,\n y: bottom * area.height\n };\n var line4 = {\n x: emptySpaceAtLeft + offset + bottomRadius * area.width,\n y: bottom * area.height\n };\n var polygon = [line1, line2, line3, line4];\n this.setLabelLocation(series, point, polygon);\n var direction = this.findPath(polygon);\n return direction;\n };\n /**\n * Initializes the size of the pyramid segments\n * @private\n */\n PyramidSeries.prototype.initializeSizeRatio = function (points, series) {\n if (series.pyramidMode === 'Linear') {\n _super.prototype.initializeSizeRatio.call(this, points, series, true);\n }\n else {\n this.calculateSurfaceSegments(series);\n }\n };\n /**\n * Defines the size of the pyramid segments, the surface of that will reflect the values\n */\n PyramidSeries.prototype.calculateSurfaceSegments = function (series) {\n var count = series.points.length;\n var sumOfValues = series.sumOfPoints;\n var yRatio = 0;\n var y = [];\n var height = [];\n var gapRatio = Math.min(0, Math.max(series.gapRatio, 1));\n var gapHeight = gapRatio / (count - 1);\n var preSum = this.getSurfaceHeight(0, sumOfValues);\n var currY = 0;\n for (var i = 0; i < count; i++) {\n if (series.points[i].visible) {\n y[i] = currY;\n height[i] = this.getSurfaceHeight(currY, Math.abs(series.points[i].y));\n currY += height[i] + gapHeight * preSum;\n }\n }\n var coef = 1 / (currY - gapHeight * preSum);\n for (var i = 0; i < count; i++) {\n if (series.points[i].visible) {\n series.points[i].yRatio = coef * y[i];\n series.points[i].heightRatio = coef * height[i];\n }\n }\n };\n /**\n * Finds the height of pyramid segment\n */\n PyramidSeries.prototype.getSurfaceHeight = function (y, surface) {\n var result = this.solveQuadraticEquation(1, 2 * y, -surface);\n return result;\n };\n /**\n * Solves quadratic equation\n */\n PyramidSeries.prototype.solveQuadraticEquation = function (a, b, c) {\n var root1;\n var root2;\n var d = b * b - 4 * a * c;\n if (d >= 0) {\n var sd = Math.sqrt(d);\n root1 = (-b - sd) / (2 * a);\n root2 = (-b + sd) / (2 * a);\n return Math.max(root1, root2);\n }\n return 0;\n };\n /**\n * Renders a pyramid segment\n */\n PyramidSeries.prototype.renderPoint = function (point, series, chart, options, seriesGroup, redraw) {\n if (!point.visible) {\n removeElement(options.id);\n return null;\n }\n options.d = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n appendChildElement(seriesGroup, chart.renderer.drawPath(options), redraw);\n if (point.isExplode) {\n chart.accBaseModule.explodePoints(point.index, chart, true);\n }\n };\n /**\n * To get the module name of the Pyramid series.\n */\n PyramidSeries.prototype.getModuleName = function () {\n return 'PyramidSeries';\n };\n /**\n * To destroy the pyramid series\n * @return {void}\n * @private\n */\n PyramidSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroys the pyramid series\n */\n };\n return PyramidSeries;\n}(TriangularBase));\nexport { PyramidSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * AccumulationChart legend\n */\nimport { extend, isNullOrUndefined, Animation } from '@syncfusion/ej2-base';\nimport { pointByIndex } from '../model/acc-base';\nimport { BaseLegend, LegendOptions } from '../../common/legend/legend';\nimport { Rect, measureText, textTrim, getElement } from '../../common/utils/helper';\n/**\n * AccumulationLegend module used to render `Legend` for Accumulation chart.\n */\nvar AccumulationLegend = /** @class */ (function (_super) {\n __extends(AccumulationLegend, _super);\n /**\n * Constructor for Accumulation Legend.\n * @param chart\n */\n function AccumulationLegend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.titleRect = new Rect(0, chart.margin.top, 0, 0);\n return _this;\n }\n /**\n * Get the legend options.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.getLegendOptions = function (chart, series) {\n this.legendCollections = [];\n for (var i = 0; i < 1; i++) {\n var seriesType = series[i].type;\n if (seriesType === 'Pie' || seriesType === 'Doughnut') {\n seriesType = (series[i].innerRadius !== '0' && series[i].innerRadius !== '0%') ?\n 'Doughnut' : 'Pie';\n }\n for (var _i = 0, _a = series[i].points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!isNullOrUndefined(point.x) && !isNullOrUndefined(point.y)) {\n this.legendCollections.push(new LegendOptions(point.x.toString(), point.color, series[i].legendShape, point.visible, seriesType, null, null, point.index, series[i].index));\n }\n }\n }\n };\n /**\n * To find legend bounds for accumulation chart.\n * @private\n */\n AccumulationLegend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n var extraWidth = 0;\n var extraHeight = 0;\n var padding = legend.padding;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.width += extraWidth;\n legendBounds.height += extraHeight;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var shapeWidth = legend.shapeWidth;\n var rowWidth = 0;\n var rowCount = 0;\n var columnWidth = [];\n var columnHeight = 0;\n var legendWidth = 0;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle).height, legend.shapeHeight);\n var legendEventArgs;\n var render = false;\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n legendEventArgs = { fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n name: 'legendRender', cancel: false };\n this.chart.trigger('legendRender', legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + legendOption.textSize.width + padding;\n if (this.isVertical) {\n ++rowCount;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n if ((rowCount * (this.maxItemHeight + padding)) + padding > legendBounds.height) {\n columnHeight = Math.max(columnHeight, (rowCount * (this.maxItemHeight + padding)) + padding);\n rowWidth = rowWidth + maximumWidth;\n columnWidth.push(maximumWidth);\n this.totalPages = Math.max(rowCount, this.totalPages || 1);\n maximumWidth = 0;\n rowCount = 1;\n }\n maximumWidth = Math.max(legendWidth, maximumWidth);\n }\n else {\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth)) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding - legendWidth));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = legendWidth;\n rowCount++;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n }\n }\n }\n }\n if (this.isVertical) {\n rowWidth = rowWidth + maximumWidth;\n this.isPaging = legendBounds.width < (rowWidth + padding);\n columnHeight = Math.max(columnHeight, ((this.totalPages || 1) * (this.maxItemHeight + padding)) + padding);\n this.isPaging = this.isPaging && (this.totalPages > 1);\n if (columnWidth[columnWidth.length - 1] !== maximumWidth) {\n columnWidth.push(maximumWidth);\n }\n }\n else {\n this.isPaging = legendBounds.height < columnHeight;\n this.totalPages = this.totalRowCount = rowCount;\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding);\n }\n this.maxColumns = 0; // initialization for max columns\n var width = this.isVertical ? this.getMaxColumn(columnWidth, legendBounds.width, padding, rowWidth + padding) :\n Math.max(rowWidth + padding, maximumWidth);\n if (render) { // if any legends not skipped in event check\n this.setBounds(width, columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /**\n * To find maximum column size for legend\n */\n AccumulationLegend.prototype.getMaxColumn = function (columns, width, padding, rowWidth) {\n var maxPageColumn = padding;\n this.maxColumnWidth = Math.max.apply(null, columns);\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n maxPageColumn += this.maxColumnWidth;\n this.maxColumns++;\n if (maxPageColumn + padding > width) {\n maxPageColumn -= this.maxColumnWidth;\n this.maxColumns--;\n break;\n }\n }\n this.isPaging = (maxPageColumn < rowWidth) && (this.totalPages > 1);\n if (maxPageColumn === padding) {\n maxPageColumn = width;\n }\n this.maxColumns = Math.max(1, this.maxColumns);\n this.maxWidth = maxPageColumn;\n return maxPageColumn;\n };\n /**\n * To find available width from legend x position.\n */\n AccumulationLegend.prototype.getAvailWidth = function (tx, width, legendX) {\n if (this.isVertical) {\n width = this.maxWidth;\n }\n return width - ((this.legend.padding * 2) + this.legend.shapeWidth + this.legend.shapePadding);\n };\n /**\n * To find legend rendering locations from legend options.\n * @private\n */\n AccumulationLegend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n if (this.isVertical) {\n if (count === firstLegend || (prevLegend.location.y + (this.maxItemHeight * 1.5) + (padding * 2) > rect.y + rect.height)) {\n legendOption.location.x = prevLegend.location.x + ((count === firstLegend) ? 0 : this.maxColumnWidth);\n legendOption.location.y = start.y;\n this.pageXCollections.push(legendOption.location.x - (this.legend.shapeWidth / 2) - padding);\n this.totalPages++;\n }\n else {\n legendOption.location.x = prevLegend.location.x;\n legendOption.location.y = prevLegend.location.y + this.maxItemHeight + padding;\n }\n }\n else {\n var previousBound = (prevLegend.location.x + textPadding + prevLegend.textSize.width);\n if ((previousBound + (legendOption.textSize.width + textPadding)) > (rect.x + rect.width + this.legend.shapeWidth / 2)) {\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.maxItemHeight + padding;\n legendOption.location.x = start.x;\n }\n else {\n legendOption.location.y = prevLegend.location.y;\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n }\n this.totalPages = this.totalRowCount;\n }\n var availablewidth = this.getAvailWidth(legendOption.location.x, this.legendBounds.width, this.legendBounds.x);\n legendOption.text = textTrim(+availablewidth.toFixed(4), legendOption.text, this.legend.textStyle);\n };\n /**\n * finding the smart legend place according to positions.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.getSmartLegendLocation = function (labelBound, legendBound, margin) {\n var space;\n switch (this.position) {\n case 'Left':\n space = ((labelBound.x - legendBound.width) - margin.left) / 2;\n legendBound.x = (labelBound.x - legendBound.width) < margin.left ? legendBound.x :\n (labelBound.x - legendBound.width) - space;\n break;\n case 'Right':\n space = ((this.chart.availableSize.width - margin.right) - (labelBound.x + labelBound.width + legendBound.width)) / 2;\n legendBound.x = (labelBound.x + labelBound.width + legendBound.width) > (this.chart.availableSize.width - margin.right) ?\n legendBound.x : (labelBound.x + labelBound.width + space);\n break;\n case 'Top':\n this.getTitleRect(this.chart);\n space = ((labelBound.y - legendBound.height) - (this.titleRect.y + this.titleRect.height)) / 2;\n legendBound.y = (labelBound.y - legendBound.height) < margin.top ? legendBound.y :\n (labelBound.y - legendBound.height) - space;\n break;\n case 'Bottom':\n space = ((this.chart.availableSize.height - margin.bottom) - (labelBound.y + labelBound.height + legendBound.height)) / 2;\n legendBound.y = labelBound.y + labelBound.height + legendBound.height > (this.chart.availableSize.height - margin.bottom) ?\n legendBound.y : (labelBound.y + labelBound.height) + space;\n break;\n }\n };\n /**\n * To get title rect.\n */\n AccumulationLegend.prototype.getTitleRect = function (accumulation) {\n if (!accumulation.title) {\n return null;\n }\n var titleSize = measureText(accumulation.title, accumulation.titleStyle);\n this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n };\n /**\n * To get legend by index\n */\n AccumulationLegend.prototype.legendByIndex = function (index, legendCollections) {\n for (var _i = 0, legendCollections_1 = legendCollections; _i < legendCollections_1.length; _i++) {\n var legend = legendCollections_1[_i];\n if (legend.pointIndex === index) {\n return legend;\n }\n }\n return null;\n };\n /**\n * To show or hide the legend on clicking the legend.\n * @return {void}\n */\n AccumulationLegend.prototype.click = function (event) {\n var targetId = event.target.id;\n var chart = this.chart;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_',\n this.legendID + '_shape_marker_'];\n var selectedDataIndexes = [];\n if (this.chart.accumulationSelectionModule) {\n selectedDataIndexes = extend([], this.chart.accumulationSelectionModule.selectedDataIndexes, null, true);\n }\n this.chart.animateSeries = false;\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n var pointIndex = parseInt(targetId.split(id)[1], 10);\n if (this.chart.legendSettings.toggleVisibility) {\n var currentSeries = this.chart.visibleSeries[0];\n var point = pointByIndex(pointIndex, currentSeries.points);\n var legendOption = this.legendByIndex(pointIndex, this.legendCollections);\n point.visible = !point.visible;\n legendOption.visible = point.visible;\n currentSeries.sumOfPoints += point.visible ? point.y : -point.y;\n chart.redraw = chart.enableAnimation;\n this.sliceVisibility(pointIndex, point.visible);\n chart.removeSvg();\n this.chart.refreshPoints(currentSeries.points);\n this.chart.renderElements();\n }\n else if (this.chart.accumulationSelectionModule) {\n this.chart.accumulationSelectionModule.legendSelection(this.chart, 0, pointIndex);\n }\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n chart.redraw = false;\n };\n /**\n * To translate the point elements by index and position\n */\n AccumulationLegend.prototype.sliceVisibility = function (index, isVisible) {\n var sliceId = this.chart.element.id + '_Series_0_Point_';\n if (this.chart.visibleSeries[0].dataLabel.visible) {\n sliceId = this.chart.element.id + '_datalabel_Series_0_';\n this.sliceAnimate(getElement(sliceId + 'g_' + index), isVisible);\n }\n };\n /**\n * Slice animation\n * @param element\n * @param name\n * @param isVisible\n */\n AccumulationLegend.prototype.sliceAnimate = function (element, isVisible) {\n if (!element) {\n return null;\n }\n new Animation({}).animate(element, {\n duration: 300,\n delay: 0,\n name: isVisible ? 'FadeIn' : 'FadeOut',\n end: function (args) {\n args.element.style.visibility = isVisible ? 'visible' : 'hidden';\n },\n });\n };\n /**\n * Get module name\n */\n AccumulationLegend.prototype.getModuleName = function () {\n return 'AccumulationLegend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return AccumulationLegend;\n}(BaseLegend));\nexport { AccumulationLegend };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * AccumulationChart DataLabel module file\n */\nimport { extend, createElement, getValue } from '@syncfusion/ej2-base';\nimport { ChartLocation, degreeToLocation, Rect, isOverlap, stringToNumber, getAngle, TextOption, appendChildElement } from '../../common/utils/helper';\nimport { textTrim, subtractThickness, Thickness, getElement } from '../../common/utils/helper';\nimport { removeElement, measureText, RectOption, textElement, showTooltip } from '../../common/utils/helper';\nimport { PathOption, colorNameToHex, convertHexToColor, containsRect } from '../../common/utils/helper';\nimport { getSeriesFromIndex } from '../model/acc-base';\nimport { textRender } from '../../common/model/constants';\nimport { getFontStyle, createTemplate, measureElementRect, templateAnimate } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * AccumulationDataLabel module used to render `dataLabel`.\n */\nvar AccumulationDataLabel = /** @class */ (function (_super) {\n __extends(AccumulationDataLabel, _super);\n function AccumulationDataLabel(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.id = accumulation.element.id + '_datalabel_Series_';\n if (accumulation.title) {\n var titleSize = measureText(accumulation.title, accumulation.titleStyle);\n _this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n }\n return _this;\n }\n /**\n * Method to get datalabel text location.\n * @private\n */\n AccumulationDataLabel.prototype.getDataLabelPosition = function (point, dataLabel, textSize, points, parent, id) {\n var radius = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n this.getLabelRegion(point, dataLabel.position, textSize, radius, this.marginValue);\n point.labelAngle = point.midAngle;\n point.labelPosition = dataLabel.position;\n if (this.accumulation.enableSmartLabels) {\n this.getSmartLabel(point, dataLabel, textSize, points, parent, id);\n }\n };\n /**\n * Method to get datalabel bound.\n */\n AccumulationDataLabel.prototype.getLabelRegion = function (point, position, textSize, labelRadius, margin, endAngle) {\n if (endAngle === void 0) { endAngle = 0; }\n var labelAngle = endAngle || point.midAngle;\n var space = 10;\n var location = degreeToLocation(labelAngle, labelRadius, this.isCircular() ? this.center :\n this.getLabelLocation(point, position));\n location.y = (position === 'Inside') ? (location.y - textSize.height / 2) : location.y;\n location.x = (position === 'Inside') ? (location.x - textSize.width / 2) : location.x;\n point.labelRegion = new Rect(location.x, location.y, textSize.width + (margin * 2), textSize.height + (margin * 2));\n if (position === 'Outside') {\n point.labelRegion.y -= point.labelRegion.height / 2;\n if (labelAngle >= 90 && labelAngle <= 270) {\n point.labelRegion.x -= (point.labelRegion.width + space);\n }\n else {\n point.labelRegion.x += space;\n }\n }\n };\n /**\n * Method to get datalabel smart position.\n */\n AccumulationDataLabel.prototype.getSmartLabel = function (point, dataLabel, textSize, points, parent, id) {\n var circular = this.isCircular();\n var labelRadius = circular ? this.radius : this.getLabelDistance(point, dataLabel);\n var connectorLength = circular ? (dataLabel.connectorStyle.length || '4%') :\n '0px';\n labelRadius += stringToNumber(connectorLength, labelRadius);\n var previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (dataLabel.position === 'Inside') {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points)) || !circular && !containsRect(point.region, point.labelRegion)) {\n point.labelPosition = 'Outside';\n if (!circular) {\n labelRadius = this.getLabelDistance(point, dataLabel);\n }\n this.getLabelRegion(point, point.labelPosition, textSize, labelRadius, this.marginValue);\n previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (previousPoint && (isOverlap(point.labelRegion, previousPoint.labelRegion) ||\n this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n }\n else {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points) || this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n if (this.isOverlapping(point, points) || (this.titleRect && point.labelRegion && isOverlap(point.labelRegion, this.titleRect))) {\n this.setPointVisibileFalse(point);\n }\n if (this.accumulation.accumulationLegendModule && point.labelVisible && point.labelRegion) {\n var rect = this.accumulation.accumulationLegendModule.legendBounds;\n var padding = this.accumulation.legendSettings.border.width / 2;\n this.textTrimming(point, new Rect(rect.x - padding, rect.y - padding, rect.width + (2 * padding), rect.height + (2 * padding)), dataLabel.font, this.accumulation.accumulationLegendModule.position);\n }\n if (point.labelVisible && point.labelRegion) {\n var position = this.isCircular() ? (point.labelRegion.x >= this.center.x) ? 'InsideRight' : 'InsideLeft' :\n 'InsideRight';\n this.textTrimming(point, this.areaRect, dataLabel.font, position);\n }\n if (point.labelVisible && point.labelRegion && ((point.labelRegion.y + point.labelRegion.height >\n this.areaRect.y + this.areaRect.height || point.labelRegion.y < this.areaRect.y) || (point.labelRegion.x < this.areaRect.x ||\n point.labelRegion.x + point.labelRegion.width > this.areaRect.x + this.areaRect.width))) {\n this.setPointVisibileFalse(point);\n }\n };\n /**\n * To find trimmed datalabel tooltip needed.\n * @return {void}\n * @private\n */\n AccumulationDataLabel.prototype.move = function (e, x, y, isTouch) {\n var _this = this;\n if (e.target.textContent.indexOf('...') > -1) {\n var targetId = e.target.id.split(this.id);\n if (targetId.length === 2) {\n var seriesIndex = parseInt(targetId[1].split('_text_')[0], 10);\n var pointIndex = parseInt(targetId[1].split('_text_')[1], 10);\n if (!isNaN(seriesIndex) && !isNaN(pointIndex)) {\n if (isTouch) {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n var point = getSeriesFromIndex(seriesIndex, (this.accumulation).visibleSeries).points[pointIndex];\n showTooltip(point.text || point.y.toString(), x, y, this.areaRect.width, this.accumulation.element.id + '_EJ2_Datalabel_Tooltip', getElement(this.accumulation.element.id + '_Secondary_Element'));\n }\n }\n }\n else {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n if (isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(function () { removeElement(_this.accumulation.element.id + '_EJ2_Datalabel_Tooltip'); }, 1000);\n }\n };\n /**\n * To find previous valid label point\n */\n AccumulationDataLabel.prototype.findPreviousPoint = function (points, index, position) {\n var point = points[0];\n for (var i = index - 1; i >= 0; i--) {\n point = points[i];\n if (point.visible && point.labelVisible && point.labelRegion && point.labelPosition === position) {\n return point;\n }\n }\n return null;\n };\n /**\n * To find current point datalabel is overlapping with other points\n */\n AccumulationDataLabel.prototype.isOverlapping = function (currentPoint, points) {\n for (var i = currentPoint.index - 1; i >= 0; i--) {\n if (points[i].visible && points[i].labelVisible && points[i].labelRegion && currentPoint.labelRegion &&\n currentPoint.labelVisible && isOverlap(currentPoint.labelRegion, points[i].labelRegion)) {\n return true;\n }\n }\n return false;\n };\n /**\n * To get text trimmed while exceeds the accumulation chart area.\n */\n AccumulationDataLabel.prototype.textTrimming = function (point, rect, font, position) {\n if (isOverlap(point.labelRegion, rect)) {\n var size = point.labelRegion.width;\n if (position === 'Right') {\n size = rect.x - point.labelRegion.x;\n }\n else if (position === 'Left') {\n size = point.labelRegion.x - (rect.x + rect.width);\n if (size < 0) {\n size += point.labelRegion.width;\n point.labelRegion.x = rect.x + rect.width;\n }\n }\n else if (position === 'InsideRight') {\n size = (rect.x + rect.width) - point.labelRegion.x;\n }\n else if (position === 'InsideLeft') {\n size = (point.labelRegion.x + point.labelRegion.width) - rect.x;\n if (size < point.labelRegion.width) {\n point.labelRegion.x = rect.x;\n }\n }\n else {\n this.setPointVisibileFalse(point);\n }\n if (point.labelVisible && point.labelRegion) {\n if (size < point.labelRegion.width) {\n point.label = textTrim(size - (this.marginValue * 2), point.label, font);\n point.labelRegion.width = size;\n }\n if (point.label.length === 3 && point.label.indexOf('...') > -1) {\n this.setPointVisibileFalse(point);\n }\n }\n }\n };\n /**\n * To set point label visible and region to disable.\n */\n AccumulationDataLabel.prototype.setPointVisibileFalse = function (point) {\n point.labelVisible = false;\n point.labelRegion = null;\n };\n /**\n * To set datalabel angle position for outside labels\n */\n AccumulationDataLabel.prototype.setOuterSmartLabel = function (previousPoint, point, border, labelRadius, textsize, margin) {\n if (!this.isCircular()) {\n this.setSmartLabelForSegments(point, previousPoint, labelRadius, textsize, margin);\n }\n else {\n var labelAngle = this.getOverlappedAngle(previousPoint.labelRegion, point.labelRegion, point.midAngle, border * 2);\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n if (labelAngle > point.endAngle) {\n this.setPointVisibileFalse(point);\n }\n point.labelAngle = labelAngle;\n while (point.labelVisible && (isOverlap(previousPoint.labelRegion, point.labelRegion) || labelAngle <= previousPoint.labelAngle\n || this.isConnectorLineOverlapping(point, previousPoint))) {\n if (labelAngle > point.endAngle) {\n this.setPointVisibileFalse(point);\n break;\n }\n point.labelAngle = labelAngle;\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n labelAngle += 0.1;\n }\n }\n };\n /**\n * Sets smart label positions for funnel and pyramid series\n */\n AccumulationDataLabel.prototype.setSmartLabelForSegments = function (point, prevPoint, distance, textSize, margin) {\n var textRegion = point.labelRegion;\n //let overlapWidth: number = prevPoint.labelRegion.x + prevPoint.labelRegion.width - textRegion.x;\n var overlapHeight = this.accumulation.type === 'Funnel' ?\n prevPoint.labelRegion.y - (textRegion.y + textRegion.height) :\n point.labelRegion.y - (prevPoint.labelRegion.y + prevPoint.labelRegion.height);\n if (overlapHeight < 0) {\n point.labelRegion.y += this.accumulation.type === 'Funnel' ? overlapHeight : -overlapHeight;\n }\n };\n /**\n * To find connector line overlapping.\n */\n AccumulationDataLabel.prototype.isConnectorLineOverlapping = function (point, previous) {\n var start = this.getLabelLocation(point);\n var end = new ChartLocation(0, 0);\n this.getEdgeOfLabel(point.labelRegion, point.labelAngle, end);\n var previousstart = this.getLabelLocation(previous);\n var previousend = new ChartLocation(0, 0);\n this.getEdgeOfLabel(previous.labelRegion, previous.labelAngle, previousend);\n return this.isLineRectangleIntersect(start, end, point.labelRegion) ||\n this.isLineRectangleIntersect(start, end, previous.labelRegion) ||\n this.isLineRectangleIntersect(previousstart, previousend, point.labelRegion);\n };\n /**\n * To find two rectangle intersect\n */\n AccumulationDataLabel.prototype.isLineRectangleIntersect = function (line1, line2, rect) {\n var rectPoints = [\n new ChartLocation(Math.round(rect.x), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round((rect.y + rect.height))),\n new ChartLocation(Math.round(rect.x), Math.round((rect.y + rect.height)))\n ];\n line1.x = Math.round(line1.x);\n line1.y = Math.round(line1.y);\n line2.x = Math.round(line2.x);\n line2.y = Math.round(line2.y);\n for (var i = 0; i < rectPoints.length; i++) {\n if (this.isLinesIntersect(line1, line2, rectPoints[i], rectPoints[(i + 1) % rectPoints.length])) {\n return true;\n }\n }\n return false;\n };\n /**\n * To find two line intersect\n */\n AccumulationDataLabel.prototype.isLinesIntersect = function (point1, point2, point11, point12) {\n var a1 = point2.y - point1.y;\n var b1 = point1.x - point2.x;\n var c1 = a1 * point1.x + b1 * point1.y;\n var a2 = point12.y - point11.y;\n var b2 = point11.x - point12.x;\n var c2 = a2 * point11.x + b2 * point11.y;\n var delta = a1 * b2 - a2 * b1;\n if (delta !== 0) {\n var x = (b2 * c1 - b1 * c2) / delta;\n var y = (a1 * c2 - a2 * c1) / delta;\n var lies = Math.min(point1.x, point2.x) <= x && x <= Math.max(point1.x, point2.x);\n lies = lies && Math.min(point1.y, point2.y) <= y && y <= Math.max(point1.y, point2.y);\n lies = lies && Math.min(point11.x, point12.x) <= x && x <= Math.max(point11.x, point12.x);\n lies = lies && Math.min(point11.y, point12.y) <= y && y <= Math.max(point11.y, point12.y);\n return lies;\n }\n return false;\n };\n /**\n * To get two rectangle overlapping angles.\n */\n AccumulationDataLabel.prototype.getOverlappedAngle = function (first, second, angle, padding) {\n var x = first.x;\n if (angle >= 90 && angle <= 270) {\n second.y = first.y - (padding + second.height / 2);\n x = first.x + first.width;\n }\n else {\n second.y = first.y + first.height + padding;\n }\n return getAngle(this.center, new ChartLocation(x, second.y));\n };\n /**\n * To get connector line path\n */\n AccumulationDataLabel.prototype.getConnectorPath = function (label, point, dataLabel, end) {\n if (end === void 0) { end = 0; }\n var connector = dataLabel.connectorStyle;\n var labelRadius = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n var start = this.getConnectorStartPoint(point, connector);\n var labelAngle = end || point.midAngle;\n var middle = new ChartLocation(0, 0);\n var endPoint = this.getEdgeOfLabel(label, labelAngle, middle, connector.width);\n if (connector.type === 'Curve') {\n if (this.isCircular()) {\n var r = labelRadius - this.radius;\n middle = degreeToLocation(labelAngle, labelRadius - (r / 2), this.center);\n return 'M ' + start.x + ' ' + start.y + ' Q ' + middle.x + ' ' + middle.y + ' ' + endPoint.x + ' ' + endPoint.y;\n }\n else {\n return this.getPolyLinePath(start, endPoint);\n }\n }\n else {\n return 'M ' + start.x + ' ' + start.y + ' L ' + middle.x + ' ' + middle.y + ' L ' + endPoint.x + ' ' + endPoint.y;\n }\n };\n /**\n * Finds the curved path for funnel/pyramid data label connectors\n */\n AccumulationDataLabel.prototype.getPolyLinePath = function (start, end) {\n var controlPoints = [start, end];\n if (start.y === end.y) {\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y;\n }\n var path = 'M';\n for (var i = 0; i <= 16; i++) {\n var t = i / 16;\n var points = this.getBezierPoint(t, controlPoints, 0, 2);\n path += points.x + ',' + points.y;\n if (i !== 16) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * Finds the bezier point for funnel/pyramid data label connectors\n */\n AccumulationDataLabel.prototype.getBezierPoint = function (t, controlPoints, index, count) {\n if (count === 1) {\n return controlPoints[index];\n }\n var p0 = this.getBezierPoint(t, controlPoints, index, count - 1);\n var p1 = this.getBezierPoint(t, controlPoints, index + 1, count - 1);\n var x = (p0.x) ? p0.x : p0.x;\n var y = (p0.y) ? p0.y : p0.y;\n var x1 = (p1.x) ? p1.x : p1.x;\n var y1 = (p1.y) ? p1.y : p1.y;\n var x2 = (1 - t) * x + t * x1;\n var y2 = (1 - t) * y + t * y1;\n if (p0.x) {\n return { x: x2, y: y2 };\n }\n else {\n return { x: x2, y: y2 };\n }\n };\n /**\n * To get label edges based on the center and label rect position.\n */\n AccumulationDataLabel.prototype.getEdgeOfLabel = function (labelshape, angle, middle, border) {\n if (border === void 0) { border = 1; }\n var edge = new ChartLocation(labelshape.x, labelshape.y);\n if (angle >= 90 && angle <= 270) {\n edge.x += labelshape.width + border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x + 10;\n middle.y = edge.y;\n }\n else {\n edge.x -= border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x - 10;\n middle.y = edge.y;\n }\n return edge;\n };\n /**\n * Finds the distance between the label position and the edge/center of the funnel/pyramid\n */\n AccumulationDataLabel.prototype.getLabelDistance = function (point, dataLabel) {\n if (point.labelPosition && dataLabel.position !== point.labelPosition || dataLabel.connectorStyle.length) {\n var length_1 = stringToNumber(dataLabel.connectorStyle.length || '70px', this.accumulation.initialClipRect.width);\n if (length_1 < this.accumulation.initialClipRect.width) {\n return length_1;\n }\n }\n var position = point.labelPosition || dataLabel.position;\n var series = this.accumulation.visibleSeries[0];\n var extraSpace = (this.accumulation.initialClipRect.width - series.triangleSize.width) / 2;\n var labelLocation;\n switch (position) {\n case 'Inside':\n return 0;\n case 'Outside':\n labelLocation = point.symbolLocation.x + point.labelOffset.x;\n return this.accumulation.initialClipRect.width - labelLocation - extraSpace;\n }\n };\n /**\n * Finds the label position / beginning of the connector(ouside funnel labels)\n */\n AccumulationDataLabel.prototype.getLabelLocation = function (point, position) {\n if (position === void 0) { position = 'Outside'; }\n if (this.accumulation.type !== 'Pie') {\n position = point.labelPosition || position;\n var location_1 = {\n x: point.symbolLocation.x,\n y: point.symbolLocation.y - point.labelOffset.y\n };\n switch (position) {\n case 'Inside':\n location_1.y = point.region.y + point.region.height / 2;\n break;\n case 'Outside':\n location_1.x += point.labelOffset.x;\n }\n return location_1;\n }\n else {\n return degreeToLocation(point.midAngle, this.radius, this.center);\n }\n };\n /**\n * Finds the beginning of connector line\n */\n AccumulationDataLabel.prototype.getConnectorStartPoint = function (point, connector) {\n return this.isCircular() ? degreeToLocation(point.midAngle, this.radius - connector.width, this.center) :\n this.getLabelLocation(point);\n };\n /**\n * To find area rect based on margin, available size.\n * @private\n */\n AccumulationDataLabel.prototype.findAreaRect = function () {\n this.areaRect = new Rect(0, 0, this.accumulation.availableSize.width, this.accumulation.availableSize.height);\n var margin = this.accumulation.margin;\n subtractThickness(this.areaRect, new Thickness(margin.left, margin.right, margin.top, margin.bottom));\n };\n /**\n * To render the data labels from series points.\n */\n AccumulationDataLabel.prototype.renderDataLabel = function (point, dataLabel, parent, points, series, templateElement, redraw) {\n var id = this.accumulation.element.id + '_datalabel_Series_' + series + '_';\n var datalabelGroup = this.accumulation.renderer.createGroup({ id: id + 'g_' + point.index });\n point.label = point.originalText || point.y.toString();\n var border = { width: dataLabel.border.width, color: dataLabel.border.color };\n var argsFont = (extend({}, getValue('properties', dataLabel.font), null, true));\n var argsData = {\n cancel: false, name: textRender, series: this.accumulation.visibleSeries[0], point: point,\n text: point.label, border: border, color: dataLabel.fill, template: dataLabel.template, font: argsFont\n };\n this.accumulation.trigger(textRender, argsData);\n var isTemplate = argsData.template !== null;\n point.labelVisible = !argsData.cancel;\n point.text = point.label = argsData.text;\n this.marginValue = argsData.border.width ? (5 + argsData.border.width) : 1;\n // Template element\n var childElement = createElement('div', {\n id: this.accumulation.element.id + '_Series_' + 0 + '_DataLabel_' + point.index,\n styles: 'position: absolute;background-color:' + argsData.color + ';' +\n getFontStyle(dataLabel.font) + ';border:' + argsData.border.width + 'px solid ' + argsData.border.color + ';'\n });\n var textSize = isTemplate ? this.getTemplateSize(childElement, point, argsData, redraw) :\n measureText(point.label, dataLabel.font);\n textSize.height += 4; // 4 for calculation with padding for smart label shape\n textSize.width += 4;\n this.getDataLabelPosition(point, dataLabel, textSize, points, datalabelGroup, id);\n var dataLabelElement;\n var location;\n var element;\n if (point.labelVisible) {\n this.correctLabelRegion(point.labelRegion, textSize);\n if (isTemplate) {\n this.setTemplateStyle(childElement, point, templateElement, dataLabel.font.color, argsData.color, redraw);\n }\n else {\n location = new ChartLocation(point.labelRegion.x + this.marginValue, point.labelRegion.y + (textSize.height * 3 / 4) + this.marginValue);\n element = getElement(id + 'shape_' + point.index);\n var startLocation = element ? new ChartLocation(+element.getAttribute('x'), +element.getAttribute('y')) : null;\n dataLabelElement = this.accumulation.renderer.drawRectangle(new RectOption(id + 'shape_' + point.index, argsData.color, argsData.border, 1, point.labelRegion, dataLabel.rx, dataLabel.ry));\n appendChildElement(datalabelGroup, dataLabelElement, redraw, true, 'x', 'y', startLocation);\n textElement(new TextOption(id + 'text_' + point.index, location.x, location.y, 'start', point.label, '', 'auto'), argsData.font, argsData.font.color || this.getSaturatedColor(point, argsData.color), datalabelGroup, false, redraw, true);\n element = null;\n }\n if (this.accumulation.accumulationLegendModule && (dataLabel.position === 'Outside' || this.accumulation.enableSmartLabels)) {\n this.accumulation.visibleSeries[0].findMaxBounds(this.accumulation.visibleSeries[0].labelBound, point.labelRegion);\n }\n if (point.labelPosition === 'Outside') {\n var element_1 = getElement(id + 'connector_' + point.index);\n var previousDirection = element_1 ? element_1.getAttribute('d') : '';\n var pathElement = this.accumulation.renderer.drawPath(new PathOption(id + 'connector_' + point.index, 'transparent', dataLabel.connectorStyle.width, dataLabel.connectorStyle.color || point.color, 1, dataLabel.connectorStyle.dashArray, this.getConnectorPath(extend({}, point.labelRegion, null, true), point, dataLabel, point.labelAngle)));\n appendChildElement(datalabelGroup, pathElement, redraw, true, null, null, null, previousDirection);\n }\n appendChildElement(parent, datalabelGroup, redraw);\n }\n };\n /**\n * To find the template element size\n * @param element\n * @param point\n * @param argsData\n */\n AccumulationDataLabel.prototype.getTemplateSize = function (element, point, argsData, redraw) {\n var clientRect;\n element = createTemplate(element, point.index, argsData.template, this.accumulation, point, this.accumulation.visibleSeries[0]);\n clientRect = measureElementRect(element, redraw);\n return { width: clientRect.width, height: clientRect.height };\n };\n /**\n * To set the template element style\n * @param childElement\n * @param point\n * @param parent\n * @param labelColor\n * @param fill\n */\n AccumulationDataLabel.prototype.setTemplateStyle = function (childElement, point, parent, labelColor, fill, redraw) {\n childElement.style.left = (point.labelRegion.x) + 'px';\n childElement.style.top = (point.labelRegion.y) + 'px';\n childElement.style.color = labelColor ||\n this.getSaturatedColor(point, fill);\n if (childElement.childElementCount) {\n appendChildElement(parent, childElement, redraw, true, 'left', 'top');\n this.doTemplateAnimation(this.accumulation, childElement);\n }\n };\n /**\n * To find saturated color for datalabel\n */\n AccumulationDataLabel.prototype.getSaturatedColor = function (point, color) {\n var saturatedColor;\n if (this.marginValue >= 1) {\n saturatedColor = color === 'transparent' ? this.getLabelBackground(point) : color;\n }\n else {\n saturatedColor = this.getLabelBackground(point);\n }\n saturatedColor = (saturatedColor === 'transparent') ? window.getComputedStyle(document.body, null).backgroundColor : saturatedColor;\n var rgbValue = convertHexToColor(colorNameToHex(saturatedColor));\n var contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n return contrast >= 128 ? 'black' : 'white';\n };\n /**\n * Animates the data label template.\n * @return {void}.\n * @private\n */\n AccumulationDataLabel.prototype.doTemplateAnimation = function (accumulation, element) {\n var series = accumulation.visibleSeries[0];\n var delay = series.animation.delay + series.animation.duration;\n if (series.animation.enable && accumulation.animateSeries) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n };\n /**\n * To find background color for the datalabel\n */\n AccumulationDataLabel.prototype.getLabelBackground = function (point) {\n return point.labelPosition === 'Outside' ?\n this.accumulation.background || this.accumulation.themeStyle.background : point.color;\n };\n /**\n * To correct the padding between datalabel regions.\n */\n AccumulationDataLabel.prototype.correctLabelRegion = function (labelRegion, textSize, padding) {\n if (padding === void 0) { padding = 4; }\n labelRegion.height -= padding;\n labelRegion.width -= padding;\n labelRegion.x += padding / 2;\n labelRegion.y += padding / 2;\n textSize.height -= padding;\n textSize.width -= padding;\n };\n /**\n * To get the dataLabel module name\n */\n AccumulationDataLabel.prototype.getModuleName = function () {\n return 'AccumulationDataLabel';\n };\n /**\n * To destroy the data label.\n * @return {void}\n * @private\n */\n AccumulationDataLabel.prototype.destroy = function (accumulation) {\n /**\n * Destroy method performed here\n */\n };\n return AccumulationDataLabel;\n}(AccumulationBase));\nexport { AccumulationDataLabel };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * AccumulationChart Tooltip file\n */\nimport { Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { AccPointData, withInBounds, indexFinder } from '../../common/utils/helper';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\n/**\n * `AccumulationTooltip` module is used to render tooltip for accumulation chart.\n */\nvar AccumulationTooltip = /** @class */ (function (_super) {\n __extends(AccumulationTooltip, _super);\n function AccumulationTooltip(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.accumulation = accumulation;\n _this.addEventListener();\n return _this;\n }\n /**\n * @hidden\n */\n AccumulationTooltip.prototype.addEventListener = function () {\n if (this.accumulation.isDestroyed) {\n return;\n }\n this.accumulation.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseLeaveHandler, this);\n this.accumulation.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.accumulation.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n AccumulationTooltip.prototype.mouseLeaveHandler = function (e) {\n this.removeTooltip(1000);\n };\n AccumulationTooltip.prototype.mouseUpHandler = function (e) {\n var control = this.accumulation;\n if (control.tooltip.enable && control.isTouch && withInBounds(control.mouseX, control.mouseY, control.initialClipRect)) {\n this.tooltip(e);\n this.removeTooltip(2000);\n }\n };\n AccumulationTooltip.prototype.mouseMoveHandler = function (e) {\n var control = this.accumulation;\n // Tooltip for chart series. \n if (control.tooltip.enable && withInBounds(control.mouseX, control.mouseY, control.initialClipRect)) {\n this.tooltip(e);\n }\n };\n /**\n * Renders the tooltip.\n * @param {PointerEvent} event - Mouse move event.\n * @return {void}\n */\n AccumulationTooltip.prototype.tooltip = function (event) {\n var svgElement = this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0;\n var tooltipDiv = this.getTooltipElement(isTooltip);\n this.renderSeriesTooltip(event, this.accumulation, !isTooltip, tooltipDiv);\n };\n AccumulationTooltip.prototype.renderSeriesTooltip = function (e, chart, isFirst, tooltipDiv) {\n var data = this.getPieData(e, chart, chart.mouseX, chart.mouseY);\n var rect = chart.initialClipRect;\n this.currentPoints = [];\n if (data.point && (!this.previousPoints[0] || (this.previousPoints[0].point !== data.point))) {\n if (this.pushData(data, isFirst, tooltipDiv, false)) {\n if (this.triggerEvent(data, isFirst, this.getTooltipText(data, chart.tooltip), this.findHeader(data))) {\n this.createTooltip(chart, isFirst, data.point.symbolLocation, data.series.clipRect, data.point, ['Circle'], 0, rect, null, data.point);\n }\n else {\n this.removeHighlight(this.control);\n this.getElement(this.element.id + '_tooltip').remove();\n }\n this.isRemove = true;\n }\n }\n else {\n if (!data.point && this.isRemove) {\n this.removeTooltip(1000);\n this.isRemove = false;\n }\n }\n };\n AccumulationTooltip.prototype.getPieData = function (e, chart, x, y) {\n var target = e.target;\n var id = indexFinder(target.id, true);\n if (!isNaN(id.series)) {\n var seriesIndex = id.series;\n var pointIndex = id.point;\n if (!isNullOrUndefined(seriesIndex) && !isNaN(seriesIndex) && !isNullOrUndefined(pointIndex) && !isNaN(pointIndex)) {\n var series = this.getSeriesFromIndex(seriesIndex, chart.visibleSeries);\n if (series.enableTooltip) {\n return new AccPointData(series.points[pointIndex], series);\n }\n }\n }\n return new AccPointData(null, null);\n };\n /**\n * To get series from index\n */\n AccumulationTooltip.prototype.getSeriesFromIndex = function (index, visibleSeries) {\n return visibleSeries[0];\n };\n AccumulationTooltip.prototype.getTooltipText = function (data, tooltip) {\n var series = data.series;\n var format = tooltip.format ? tooltip.format : '${point.x} : ${point.y}';\n return this.parseTemplate(data.point, series, format);\n };\n AccumulationTooltip.prototype.findHeader = function (data) {\n if (this.header === '') {\n return '';\n }\n this.header = this.parseTemplate(data.point, data.series, this.header);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n return this.header;\n }\n return '';\n };\n AccumulationTooltip.prototype.parseTemplate = function (point, series, format) {\n var value;\n var textValue;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n value = new RegExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(value.source, point[dataValue]);\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n value = new RegExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(value.source, textValue);\n }\n return format;\n };\n /**\n * Get module name\n */\n AccumulationTooltip.prototype.getModuleName = function () {\n return 'AccumulationTooltip';\n };\n /**\n * To destroy the Tooltip.\n * @return {void}\n * @private\n */\n AccumulationTooltip.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return AccumulationTooltip;\n}(BaseTooltip));\nexport { AccumulationTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { extend } from '@syncfusion/ej2-base';\nimport { indexFinder } from '../../common/utils/helper';\nimport { pointByIndex } from '../model/acc-base';\nimport { Index } from '../../common/model/base';\nimport { BaseSelection } from '../../common/user-interaction/selection';\n/**\n * `AccumulationSelection` module handles the selection for accumulation chart.\n */\nvar AccumulationSelection = /** @class */ (function (_super) {\n __extends(AccumulationSelection, _super);\n function AccumulationSelection(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.renderer = accumulation.renderer;\n return _this;\n }\n /**\n * To initialize the private variables\n */\n AccumulationSelection.prototype.initPrivateVariables = function (accumulation) {\n this.styleId = accumulation.element.id + '_ej2_chart_selection';\n this.unselected = accumulation.element.id + '_ej2_deselected';\n this.selectedDataIndexes = [];\n this.rectPoints = null;\n };\n /**\n * Invoke selection for rendered chart.\n * @param {AccumulationChart} chart - Define the chart to invoke the selection.\n * @return {void}\n */\n AccumulationSelection.prototype.invokeSelection = function (accumulation) {\n this.initPrivateVariables(accumulation);\n this.series = extend({}, accumulation.visibleSeries, null, true);\n this.seriesStyles();\n this.selectDataIndex(this.concatIndexes(accumulation.selectedDataIndexes, this.selectedDataIndexes), accumulation);\n };\n /**\n * To get series selection style by series.\n */\n AccumulationSelection.prototype.generateStyle = function (series) {\n return (series.selectionStyle || this.styleId + '_series_' + series.index);\n };\n /**\n * To get elements by index, series\n */\n AccumulationSelection.prototype.findElements = function (accumulation, series, index) {\n return [this.getElementByIndex(index)];\n };\n /**\n * To get series point element by index\n */\n AccumulationSelection.prototype.getElementByIndex = function (index) {\n var elementId = this.control.element.id + '_Series_' + index.series + '_Point_' + index.point;\n return document.getElementById(elementId);\n };\n /**\n * To calculate selected elements on mouse click or touch\n * @private\n */\n AccumulationSelection.prototype.calculateSelectedElements = function (accumulation, event) {\n if (event.target.id.indexOf(accumulation.element.id + '_') === -1) {\n return;\n }\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n this.performSelection(indexFinder(event.target.id), accumulation, event.target);\n }\n };\n /**\n * To perform the selection process based on index and element.\n */\n AccumulationSelection.prototype.performSelection = function (index, accumulation, element) {\n element = element.id.indexOf('datalabel') > -1 ?\n accumulation.getSeriesElement().childNodes[index.series].childNodes[index.point]\n : element;\n switch (accumulation.selectionMode) {\n case 'Point':\n if (!isNaN(index.point)) {\n this.selection(accumulation, index, [element]);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n }\n break;\n }\n };\n /**\n * To select the element by index. Adding or removing selection style class name.\n */\n AccumulationSelection.prototype.selection = function (accumulation, index, selectedElements) {\n if (!accumulation.isMultiSelect) {\n this.removeMultiSelectEelments(accumulation, this.selectedDataIndexes, index, accumulation.series);\n }\n var className = selectedElements[0] && (selectedElements[0].getAttribute('class') || '');\n if (selectedElements[0] && className.indexOf(this.getSelectionClass(selectedElements[0].id)) > -1) {\n this.removeStyles(selectedElements, index);\n this.addOrRemoveIndex(this.selectedDataIndexes, index);\n }\n else {\n this.applyStyles(selectedElements, index);\n this.addOrRemoveIndex(this.selectedDataIndexes, index, true);\n }\n };\n /**\n * To redraw the selection process on accumulation chart refresh.\n * @private\n */\n AccumulationSelection.prototype.redrawSelection = function (accumulation, oldMode) {\n var selectedDataIndexes = extend([], this.selectedDataIndexes, null, true);\n this.removeSelectedElements(accumulation, this.selectedDataIndexes);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n this.selectDataIndex(selectedDataIndexes, accumulation);\n };\n /**\n * To remove the selected elements style classes by indexes.\n */\n AccumulationSelection.prototype.removeSelectedElements = function (accumulation, indexes) {\n var seriesgroup = accumulation.getSeriesElement();\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\n var index = indexes_1[_i];\n this.removeStyles([this.getElementByIndex(index)], index);\n }\n };\n /**\n * To perform the selection for legend elements.\n * @private\n */\n AccumulationSelection.prototype.legendSelection = function (accumulation, series, pointIndex) {\n var element = accumulation.getSeriesElement().childNodes[series].childNodes[pointIndex];\n var seriesStyle = this.generateStyle(accumulation.visibleSeries[series]);\n var seriesElements = accumulation.getSeriesElement().childNodes[series].childNodes[pointIndex];\n this.selection(accumulation, new Index(series, pointIndex), [seriesElements]);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n };\n /**\n * To select the element by selected data indexes.\n */\n AccumulationSelection.prototype.selectDataIndex = function (indexes, accumulation) {\n var element;\n for (var _i = 0, indexes_2 = indexes; _i < indexes_2.length; _i++) {\n var index = indexes_2[_i];\n element = this.getElementByIndex(index);\n if (element) {\n this.performSelection(index, accumulation, element);\n }\n }\n };\n /**\n * To remove the selection styles for multi selection process.\n */\n AccumulationSelection.prototype.removeMultiSelectEelments = function (accumulation, index, currentIndex, seriesCollection) {\n var series;\n for (var i = 0; i < index.length; i++) {\n series = seriesCollection[index[i].series];\n if (!this.checkEquals(index[i], currentIndex)) {\n this.removeStyles(this.findElements(accumulation, series, index[i]), index[i]);\n index.splice(i, 1);\n i--;\n }\n }\n };\n /**\n * To apply the opacity effect for accumulation chart series elements.\n */\n AccumulationSelection.prototype.blurEffect = function (pieId, visibleSeries) {\n var visibility = this.checkPointVisibility(this.selectedDataIndexes); // legend click scenario\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (series.visible) {\n this.checkSelectionElements(document.getElementById(pieId + '_SeriesCollection'), this.generateStyle(series), visibility);\n }\n }\n };\n /**\n * To check selection elements by style class name.\n */\n AccumulationSelection.prototype.checkSelectionElements = function (element, className, visibility) {\n var children = element.childNodes[0].childNodes;\n var legendShape;\n var elementClass;\n var parentClass;\n for (var i = 0; i < children.length; i++) {\n elementClass = children[i].getAttribute('class') || '';\n parentClass = children[i].parentNode.getAttribute('class') || '';\n if (elementClass.indexOf(className) === -1 && parentClass.indexOf(className) === -1 && visibility) {\n this.addSvgClass(children[i], this.unselected);\n }\n else {\n this.removeSvgClass(children[i], this.unselected);\n }\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + i);\n if (legendShape) {\n if (elementClass.indexOf(className) === -1 && parentClass.indexOf(className) === -1 && visibility) {\n this.addSvgClass(legendShape, this.unselected);\n }\n else {\n this.removeSvgClass(legendShape, this.unselected);\n }\n }\n }\n }\n };\n /**\n * To apply selection style for elements.\n */\n AccumulationSelection.prototype.applyStyles = function (elements, index) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n var legendShape = void 0;\n if (element) {\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);\n this.removeSvgClass(legendShape, this.unselected);\n this.addSvgClass(legendShape, this.getSelectionClass(legendShape.id));\n }\n this.removeSvgClass(element.parentNode, this.unselected);\n this.removeSvgClass(element, this.unselected);\n this.addSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n /**\n * To get selection style class name by id\n */\n AccumulationSelection.prototype.getSelectionClass = function (id) {\n return this.generateStyle(this.control.series[indexFinder(id).series]);\n };\n /**\n * To remove selection style for elements.\n */\n AccumulationSelection.prototype.removeStyles = function (elements, index) {\n var legendShape;\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n if (element) {\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);\n this.removeSvgClass(legendShape, this.getSelectionClass(legendShape.id));\n }\n this.removeSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n /**\n * To apply or remove selected elements index.\n */\n AccumulationSelection.prototype.addOrRemoveIndex = function (indexes, index, add) {\n for (var i = 0; i < indexes.length; i++) {\n if (this.checkEquals(indexes[i], index)) {\n indexes.splice(i, 1);\n i--;\n }\n }\n if (add) {\n indexes.push(index);\n }\n };\n /**\n * To check two index, point and series are equal\n */\n AccumulationSelection.prototype.checkEquals = function (first, second) {\n return ((first.point === second.point) && (first.series === second.series));\n };\n /**\n * To check selected points are visibility\n */\n AccumulationSelection.prototype.checkPointVisibility = function (selectedDataIndexes) {\n var visible = false;\n for (var _i = 0, selectedDataIndexes_1 = selectedDataIndexes; _i < selectedDataIndexes_1.length; _i++) {\n var data = selectedDataIndexes_1[_i];\n if (pointByIndex(data.point, this.control.visibleSeries[0].points).visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * Get module name.\n */\n AccumulationSelection.prototype.getModuleName = function () {\n return 'AccumulationSelection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n AccumulationSelection.prototype.destroy = function (accumulation) {\n // Destroy method performed here\n };\n return AccumulationSelection;\n}(BaseSelection));\nexport { AccumulationSelection };\n","/**\n * AccumulationChart annotation properties\n */\nvar __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement, redrawElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `AccumulationAnnotation` module handles the annotation for accumulation chart.\n */\nvar AccumulationAnnotation = /** @class */ (function (_super) {\n __extends(AccumulationAnnotation, _super);\n /**\n * Constructor for accumulation chart annotation.\n * @private.\n */\n function AccumulationAnnotation(control) {\n var _this = _super.call(this, control) || this;\n _this.pie = control;\n return _this;\n }\n /**\n * Method to render the annotation for accumulation chart\n * @param element\n */\n AccumulationAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.annotations = this.pie.annotations;\n var redraw = this.pie.redraw;\n this.parentElement = (redrawElement(redraw, this.pie.element.id + '_Annotation_Collections') ||\n createElement('div', {\n id: this.pie.element.id + '_Annotation_Collections'\n }));\n this.annotations.map(function (annotation, index) {\n _this.processAnnotation(annotation, index, _this.parentElement);\n });\n appendElement(this.parentElement, element, redraw);\n };\n /**\n * Get module name.\n */\n AccumulationAnnotation.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotation';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n AccumulationAnnotation.prototype.destroy = function (control) {\n // Destroy method performed here\n };\n return AccumulationAnnotation;\n}(AnnotationBase));\nexport { AccumulationAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { firstToLowerCase, RectOption, Rect, measureText } from '../../chart/index';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { DataPoint } from '../utils/helper';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getSeriesColor } from '../../common/model/theme';\nimport { NiceInterval, Size, PathOption } from '../../chart/index';\nimport { Data } from '../../common/model/data';\n/**\n * To render Chart series\n */\nvar RangeSeries = /** @class */ (function (_super) {\n __extends(RangeSeries, _super);\n function RangeSeries(range) {\n var _this = _super.call(this) || this;\n _this.dataSource = range.dataSource;\n _this.xName = range.xName;\n _this.yName = range.yName;\n _this.query = range.query;\n _this.xMin = Infinity;\n _this.xMax = -Infinity;\n _this.yMin = Infinity;\n _this.yMax = -Infinity;\n return _this;\n }\n /**\n * To render light weight and data manager process\n * @param control\n */\n RangeSeries.prototype.renderChart = function (control) {\n var _this = this;\n var dataSource;\n var query;\n this.seriesLength = 0;\n control.rangeSlider.points = [];\n if (control.series.length) {\n control.series.map(function (series) {\n dataSource = series.dataSource || control.dataSource;\n query = series.query || control.query;\n series.points = [];\n _this.processDataSource(dataSource, query, control, series);\n });\n }\n else {\n this.processDataSource(control.dataSource, control.query, control);\n }\n };\n RangeSeries.prototype.processDataSource = function (dataSource, query, control, series) {\n var _this = this;\n if (isNullOrUndefined(query) && !isNullOrUndefined(dataSource)) {\n this.dataManagerSuccess({ result: dataSource, count: dataSource.length }, control, series);\n return;\n }\n control.dataModule = new Data(dataSource, query);\n var dataManager = control.dataModule.getData(control.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, control, series); });\n };\n /**\n * data manager process calculated here\n * @param e\n */\n RangeSeries.prototype.dataManagerSuccess = function (e, control, series) {\n var viewData = e.result !== '' ? e.result : [];\n this.processJsonData(viewData, control, Object.keys(viewData).length, series);\n this.seriesLength += series ? 1 : this.seriesLength;\n if (!series || this.seriesLength === control.series.length) {\n this.processXAxis(control);\n this.calculateGroupingBounds(control);\n this.processYAxis(control);\n control.renderChart();\n }\n };\n /**\n * Process JSON data from data source\n * @param control\n * @param len\n */\n RangeSeries.prototype.processJsonData = function (viewData, control, len, series) {\n var i = 0;\n var point;\n var xName = (series && series.xName) || control.xName;\n var yName = (series && series.yName) || control.yName;\n while (i < len) {\n point = new DataPoint(getValue(xName, viewData[i]), getValue(yName, viewData[i]));\n point.yValue = +point.y;\n if (control.valueType === 'DateTime') {\n var dateParser = control.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n var dateFormatter = control.intl.getDateFormat({ skeleton: 'full', type: 'dateTime' });\n point.x = new Date(DataUtil.parse.parseJson({ val: point.x }).val);\n point.xValue = Date.parse(dateParser(dateFormatter(point.x)));\n }\n else {\n point.xValue = +point.x;\n }\n if (series) {\n series.points.push(point);\n }\n this.xMin = Math.min(this.xMin, point.xValue);\n this.yMin = Math.min(this.yMin, point.yValue);\n this.xMax = Math.max(this.xMax, point.xValue);\n this.yMax = Math.max(this.yMax, point.yValue);\n control.rangeSlider.points.push(point);\n i++;\n }\n };\n RangeSeries.prototype.processXAxis = function (control) {\n var axisModule;\n var axis = {\n minimum: control.minimum, maximum: control.maximum,\n interval: control.interval, valueType: control.valueType,\n isInversed: control.enableRtl, labelFormat: control.labelFormat,\n logBase: control.logBase, skeleton: control.skeleton, skeletonType: control.skeletonType\n };\n this.xAxis = axis;\n this.xAxis.intervalType = control.intervalType;\n this.xAxis.maximumLabels = 3;\n this.xAxis.skeleton = control.skeleton;\n this.xAxis.intervalDivs = [10, 5, 2, 1];\n this.xAxis.rect = control.bounds;\n this.xAxis.visibleLabels = [];\n this.xAxis.orientation = 'Horizontal';\n axisModule = control[firstToLowerCase(control.valueType) + 'Module'];\n axisModule.min = this.xMin;\n axisModule.max = this.xMax;\n axisModule.getActualRange(this.xAxis, control.bounds);\n if (this.xAxis.valueType !== 'Logarithmic') {\n axisModule.updateActualRange(this.xAxis, this.xAxis.actualRange.min, this.xAxis.actualRange.max, this.xAxis.actualRange.interval);\n }\n this.xAxis.actualRange.delta = this.xAxis.actualRange.max - this.xAxis.actualRange.min;\n this.xAxis.visibleRange = this.xAxis.actualRange;\n axisModule.calculateVisibleLabels(this.xAxis, control);\n };\n /**\n * Process yAxis for range navigator\n * @param control\n */\n RangeSeries.prototype.processYAxis = function (control) {\n var axis = {\n majorGridLines: { width: 0 }, rangePadding: 'None',\n majorTickLines: { width: 0 }, labelStyle: { size: '0' },\n visible: false, valueType: 'Double', minimum: null, maximum: null,\n interval: null\n };\n this.yAxis = axis;\n this.yAxis.rect = control.bounds;\n this.yAxis.maximumLabels = 3;\n this.yAxis.intervalDivs = [10, 5, 2, 1];\n this.yAxis.orientation = 'Vertical';\n control.doubleModule.min = this.yMin;\n control.doubleModule.max = this.yMax;\n control.doubleModule.getActualRange(this.yAxis, control.bounds);\n control.doubleModule.updateActualRange(this.yAxis, this.yAxis.actualRange.min, this.yAxis.actualRange.max, this.yAxis.actualRange.interval);\n this.yAxis.actualRange.delta = this.yAxis.actualRange.max - this.yAxis.actualRange.min;\n this.yAxis.visibleRange = this.yAxis.actualRange;\n };\n /**\n * Process Light weight control\n * @param control\n * @private\n */\n RangeSeries.prototype.renderSeries = function (control) {\n var _this = this;\n var chartGroup = control.renderer.createGroup({ id: control.element.id + '_chart' });\n var colors = getSeriesColor(control.theme);\n control.series.map(function (series, index) {\n series.xAxis = _this.xAxis;\n series.yAxis = _this.yAxis;\n series.chart = control;\n series.index = index;\n series.xAxis.isInversed = control.enableRtl;\n series.interior = series.fill || colors[index % colors.length];\n _this.createSeriesElement(control, series, index);\n control[firstToLowerCase(series.type) + 'SeriesModule'].render(series, _this.xAxis, _this.yAxis, false);\n chartGroup.appendChild(series.seriesElement);\n if (series.animation.enable && control.animateSeries) {\n control[firstToLowerCase(series.type) + 'SeriesModule'].doAnimation(series);\n }\n });\n control.svgObject.appendChild(chartGroup);\n if (control.series.length) {\n this.drawSeriesBorder(control, chartGroup);\n }\n };\n RangeSeries.prototype.createSeriesElement = function (control, series, index) {\n var elementId = control.element.id;\n series.clipRect = new Rect(this.xAxis.rect.x, this.yAxis.rect.y, this.xAxis.rect.width, this.yAxis.rect.height);\n series.clipRectElement = control.renderer.drawClipPath(new RectOption(elementId + '_RangeSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0,\n width: series.clipRect.width,\n height: series.clipRect.height\n }));\n series.seriesElement = control.renderer.createGroup({\n 'id': elementId + 'SeriesGroup' + index,\n 'transform': 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')',\n 'clip-path': 'url(#' + elementId + '_RangeSeriesClipRect_' + index + ')'\n });\n series.seriesElement.appendChild(series.clipRectElement);\n };\n RangeSeries.prototype.calculateGroupingBounds = function (control) {\n var padding = control.margin.bottom;\n var labelHeight = measureText('string', control.labelStyle).height;\n this.calculateDateTimeNiceInterval(this.xAxis, new Size(control.bounds.width, control.bounds.height), this.xMin, this.xMax, false);\n if (control.enableGrouping && control.valueType === 'DateTime'\n && (this.xAxis.actualIntervalType !== 'Years' || !control.series.length)) {\n control.bounds.height -= (control.labelPosition === 'Outside' || control.series.length === 0) ? padding + labelHeight :\n (labelHeight + 2 * padding);\n }\n if (!control.series.length) {\n control.bounds.y += control.bounds.height / 4;\n control.bounds.height = control.bounds.height / 2;\n }\n };\n RangeSeries.prototype.drawSeriesBorder = function (control, chartElement) {\n var options = new PathOption(control.element.id + '_SeriesBorder', 'transparent', control.navigatorBorder.width, control.navigatorBorder.color, 1, '', ('M ' + (control.bounds.x) + ' ' + (control.bounds.y) +\n ' L ' + (control.bounds.x + control.bounds.width) + ' ' + control.bounds.y +\n ' L ' + (control.bounds.x + control.bounds.width) + ' ' + (control.bounds.y + control.bounds.height) +\n ' L ' + (control.bounds.x) + ' ' + (control.bounds.y + control.bounds.height) + 'Z'));\n var htmlObject = control.renderer.drawPath(options);\n control.svgObject.appendChild(htmlObject);\n };\n return RangeSeries;\n}(NiceInterval));\nexport { RangeSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { measureText, TextOption, Rect, valueToCoefficient, textElement, PathOption, firstToLowerCase, } from '../../common/utils/helper';\nimport { DateTime } from '../../chart/index';\nimport { VisibleLabels } from '../../chart/index';\n/**\n * class for axis\n */\nvar RangeNavigatorAxis = /** @class */ (function (_super) {\n __extends(RangeNavigatorAxis, _super);\n function RangeNavigatorAxis(range) {\n var _this = _super.call(this) || this;\n _this.firstLevelLabels = [];\n _this.secondLevelLabels = [];\n _this.rangeNavigator = range;\n return _this;\n }\n /**\n * To render grid lines of axis\n */\n RangeNavigatorAxis.prototype.renderGridLines = function () {\n var pointX = 0;\n var control = this.rangeNavigator;\n var majorGridLines = control.majorGridLines;\n var majorTickLines = control.majorTickLines;\n var majorGrid = '';\n var majorTick = '';\n var rect = control.bounds;\n var chartAxis = control.chartSeries.xAxis;\n var labelLength;\n var range = chartAxis.visibleRange;\n var disabledColor = (control.disableRangeSelector) ? 'transparent' : null;\n this.gridLines = control.renderer.createGroup({ id: control.element.id + '_GridLines' });\n var tick = (control.tickPosition === 'Outside' || control.series.length === 0) ?\n rect.y + rect.height + majorTickLines.height : rect.y + rect.height - majorTickLines.height;\n //Gridlines\n this.firstLevelLabels = [];\n chartAxis.labelStyle = control.labelStyle;\n chartAxis.skeleton = control.skeleton;\n chartAxis.skeletonType = control.skeletonType;\n chartAxis.isChart = false;\n if (control.valueType === 'DateTime') {\n this.calculateDateTimeNiceInterval(chartAxis, rect, chartAxis.doubleRange.start, chartAxis.doubleRange.end, chartAxis.isChart);\n this.actualIntervalType = chartAxis.actualIntervalType;\n this.findAxisLabels(chartAxis);\n }\n this.firstLevelLabels = chartAxis.visibleLabels;\n this.lowerValues = [];\n labelLength = chartAxis.visibleLabels.length;\n for (var i = 0; i < labelLength; i++) {\n this.lowerValues.push(this.firstLevelLabels[i].value);\n pointX = (valueToCoefficient(this.firstLevelLabels[i].value, chartAxis) * rect.width) + rect.x;\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n majorGrid = majorGrid.concat('M ' + pointX + ' ' + (control.bounds.y + control.bounds.height) +\n ' L ' + pointX + ' ' + control.bounds.y + ' ');\n majorTick = majorTick.concat('M ' + (pointX) + ' ' + (rect.y + rect.height) +\n ' L ' + (pointX) + ' ' + tick + ' ');\n }\n }\n var options = new PathOption(control.element.id + '_MajorGridLine', 'transparent', majorGridLines.width, control.series.length ? disabledColor || majorGridLines.color || control.themeStyle.gridLineColor : 'transparent', 1, majorGridLines.dashArray, majorGrid);\n this.gridLines.appendChild(control.renderer.drawPath(options));\n options = new PathOption(control.element.id + '_MajorTickLine', 'transparent', majorTickLines.width, disabledColor || majorTickLines.color || control.themeStyle.gridLineColor, 1, majorGridLines.dashArray, majorTick);\n this.gridLines.appendChild(control.renderer.drawPath(options));\n };\n /**\n * To render of axis labels\n */\n RangeNavigatorAxis.prototype.renderAxisLabels = function () {\n var axis = this.rangeNavigator.chartSeries.xAxis;\n var control = this.rangeNavigator;\n var pointY;\n var rect = control.bounds;\n var labelElement = control.renderer.createGroup({ id: control.element.id + '_AxisLabels' });\n var firstLevelElement = control.renderer.createGroup({ id: control.element.id + '_FirstLevelAxisLabels' });\n var secondLevelElement = control.renderer.createGroup({ id: control.element.id + '_SecondLevelAxisLabels' });\n var secondaryAxis = axis;\n pointY = this.findLabelY(control, false);\n this.placeAxisLabels(axis, pointY, '_AxisLabel_', control, firstLevelElement);\n secondaryAxis.intervalType = secondaryAxis.actualIntervalType = (control.groupBy ||\n this.getSecondaryLabelType(axis.actualIntervalType));\n if (control.enableGrouping && control.valueType === 'DateTime' && this.actualIntervalType !== 'Years') {\n secondaryAxis.visibleRange.interval = 1;\n secondaryAxis.visibleLabels = [];\n this.findAxisLabels(secondaryAxis);\n this.secondLevelLabels = secondaryAxis.visibleLabels;\n pointY = this.findLabelY(control, true);\n var border = this.placeAxisLabels(secondaryAxis, pointY, '_SecondaryLabel_', control, secondLevelElement);\n var path = new PathOption(control.element.id + '_SecondaryMajorLines', 'transparent', control.majorTickLines.width, control.majorTickLines.color || control.themeStyle.gridLineColor, 1, control.majorGridLines.dashArray, border);\n this.gridLines.appendChild(control.renderer.drawPath(path));\n }\n control.chartSeries.xAxis.visibleLabels = control.chartSeries.xAxis.visibleLabels.concat(secondaryAxis.visibleLabels);\n labelElement.appendChild(firstLevelElement);\n labelElement.appendChild(secondLevelElement);\n //gridlines and axis label append to element\n control.svgObject.appendChild(this.gridLines);\n control.svgObject.appendChild(labelElement);\n };\n /**\n * To find secondary level label type\n * @param type\n */\n RangeNavigatorAxis.prototype.getSecondaryLabelType = function (type) {\n var types = ['Years', 'Quarter', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'];\n return (type === 'Years' ? 'Years' : types[types.indexOf(type) - 1]);\n };\n /**\n * To find labels for date time axis\n * @param axis\n */\n RangeNavigatorAxis.prototype.findAxisLabels = function (axis) {\n axis.visibleLabels = [];\n var start = new Date(axis.visibleRange.min);\n var nextInterval;\n var text;\n var interval = this.rangeNavigator.interval ? this.rangeNavigator.interval : 1;\n switch (axis.actualIntervalType) {\n case 'Years':\n start = new Date(start.getFullYear().toString());\n break;\n case 'Quarter':\n if (start.getMonth() <= 2) {\n start = new Date(start.getFullYear(), 0, 1);\n }\n else if (start.getMonth() <= 5) {\n start = new Date(start.getFullYear(), 3, 1);\n }\n else if (start.getMonth() <= 8) {\n start = new Date(start.getFullYear(), 6, 1);\n }\n else {\n start = new Date(start.getFullYear(), 9, 1);\n }\n break;\n case 'Months':\n start = new Date(start.getFullYear(), start.getMonth());\n break;\n case 'Weeks':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate() - start.getDay());\n break;\n case 'Days':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n break;\n case 'Hours':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours());\n break;\n case 'Minutes':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours(), start.getMinutes());\n break;\n case 'Seconds':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours(), start.getMinutes(), start.getSeconds());\n break;\n }\n nextInterval = start.getTime();\n this.rangeNavigator.format = this.rangeNavigator.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis, null, null)\n });\n while (nextInterval < axis.visibleRange.max) {\n text = this.dateFormats(this.rangeNavigator.format(new Date(nextInterval)), axis, axis.visibleLabels.length);\n axis.visibleLabels.push(new VisibleLabels(text, nextInterval, this.rangeNavigator.labelStyle, text));\n nextInterval = this.increaseDateTimeInterval(axis, nextInterval, interval).getTime();\n }\n };\n /**\n * To find date time formats for Quarter and week interval type\n * @param text\n * @param axis\n * @param index\n */\n RangeNavigatorAxis.prototype.dateFormats = function (text, axis, index) {\n var changedText = text;\n var isFirstLevel = this.rangeNavigator.enableGrouping && this.firstLevelLabels.length === 0;\n switch (axis.actualIntervalType) {\n case 'Quarter':\n if (text.indexOf('Jan') > -1) {\n changedText = !isFirstLevel ? text.replace('Jan', 'Quarter1') : 'Quarter1';\n }\n else if (text.indexOf('Apr') > -1) {\n changedText = !isFirstLevel ? text.replace('Apr', 'Quarter2') : 'Quarter2';\n }\n else if (text.indexOf('Jul') > -1) {\n changedText = !isFirstLevel ? text.replace('Jul', 'Quarter3') : 'Quarter3';\n }\n else if (text.indexOf('Oct') > -1) {\n changedText = !isFirstLevel ? text.replace('Oct', 'Quarter4') : 'Quarter4';\n }\n break;\n case 'Weeks':\n changedText = 'Week' + ++index;\n break;\n default:\n changedText = text;\n break;\n }\n return changedText;\n };\n /**\n * To find the y co-ordinate for axis labels\n * @param control - rangeNavigator\n * @param isSecondary sets true if the axis is secondary axis\n */\n RangeNavigatorAxis.prototype.findLabelY = function (control, isSecondary) {\n var pointY;\n var reference = control.bounds.y + control.bounds.height;\n var tickHeight = control.majorTickLines.height;\n var textHeight = measureText('Quarter1 2011', control.labelStyle).height;\n var padding = 8;\n if ((control.labelPosition === 'Outside' && control.tickPosition === 'Outside') || control.series.length === 0) {\n pointY = reference + tickHeight + padding + textHeight * 0.75;\n }\n else if (control.labelPosition === 'Inside' && control.tickPosition === 'Inside') {\n pointY = reference - tickHeight - padding;\n }\n else if (control.labelPosition === 'Inside' && control.tickPosition === 'Outside') {\n pointY = reference - padding;\n }\n else {\n pointY = reference + padding + (textHeight * 0.75);\n }\n if (isSecondary) {\n padding = 15;\n if (control.labelPosition === 'Outside' || control.series.length === 0) {\n pointY += padding + textHeight * 0.75;\n }\n else {\n pointY = (control.tickPosition === 'Outside' || control.series.length === 0) ?\n reference + tickHeight + padding + textHeight * 0.75 : reference + padding + textHeight * 0.75;\n }\n }\n return pointY;\n };\n /**\n * It places the axis labels and returns border for secondary axis labels\n * @param axis axis for the lables placed\n * @param pointY y co-ordinate for axis labels\n * @param id id for the axis elements\n * @param control range navigator\n * @param labelElement parent element in which axis labels appended\n */\n RangeNavigatorAxis.prototype.placeAxisLabels = function (axis, pointY, id, control, labelElement) {\n var maxLabels = axis.visibleLabels.length;\n var label;\n var prevLabel;\n var pointX;\n var rect = control.bounds;\n var border = '';\n var pointXGrid;\n var disabledColor = (control.disableRangeSelector) ? 'transparent' : null;\n var prevX = control.enableRtl ? (rect.x + rect.width) : rect.x;\n var intervalType = axis.actualIntervalType;\n var intervalInTime = control.valueType === 'DateTime' ?\n maxLabels > 1 ? (axis.visibleLabels[1].value - axis.visibleLabels[0].value) :\n (axis.visibleRange.max - axis.visibleLabels[0].value) / 2 : 0;\n if (control.valueType === 'DateTime' && (intervalType === 'Quarter' || intervalType === 'Weeks')) {\n this.findSuitableFormat(axis, control);\n }\n for (var i = 0, len = maxLabels; i < len; i++) {\n label = axis.visibleLabels[i];\n label.size = measureText(label.text, axis.labelStyle);\n if (control.secondaryLabelAlignment === 'Middle') {\n pointX = (valueToCoefficient((label.value + intervalInTime / 2), axis) * rect.width) + rect.x;\n }\n else if ((id.indexOf('Secondary') > -1)) {\n pointX = this.findAlignment(axis, i);\n }\n pointXGrid = (valueToCoefficient((label.value), axis) * rect.width) + rect.x;\n //edgelabelPlacements\n if ((i === 0 || (i === axis.visibleLabels.length - 1 && control.enableRtl)) && pointX < rect.x) {\n pointX = rect.x + label.size.width / 2;\n }\n if ((i === axis.visibleLabels.length - 1 || (i === 0 && control.enableRtl)) &&\n ((pointX + label.size.width) > (rect.x + rect.width))) {\n pointX = rect.x + rect.width - label.size.width / 2;\n }\n //secondary axis grid lines\n if (id.indexOf('_SecondaryLabel_') > -1) {\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n border = border.concat('M ' + pointXGrid + ' ' + pointY +\n ' L ' + pointXGrid + ' ' + (pointY - label.size.height));\n }\n }\n //smart axis label position,\n if (control.labelIntersectAction === 'Hide' &&\n i !== 0 && this.isIntersect(axis, pointX, label.size.width, prevX, prevLabel.size.width)) {\n continue;\n }\n //labelrender event\n var argsData = void 0;\n var labelStyle = control.labelStyle;\n var style = {\n size: labelStyle.size, color: disabledColor || labelStyle.color || control.themeStyle.labelFontColor,\n fontFamily: labelStyle.fontFamily,\n fontStyle: labelStyle.fontStyle || control.labelStyle.fontStyle,\n fontWeight: labelStyle.fontWeight || control.labelStyle.fontWeight,\n opacity: labelStyle.opacity || control.labelStyle.opacity,\n textAlignment: labelStyle.textAlignment || control.labelStyle.textAlignment,\n textOverflow: labelStyle.textOverflow || control.labelStyle.textOverflow\n };\n argsData = {\n cancel: false, name: 'labelRender',\n text: label.text, value: label.value, labelStyle: style,\n region: new Rect(pointX, pointY, label.size.width, label.size.height)\n };\n control.trigger('labelRender', argsData);\n if (!argsData.cancel) {\n control.labels.push(argsData);\n }\n else {\n continue;\n }\n textElement(new TextOption(this.rangeNavigator.element.id + id + i, pointX, pointY, 'middle', argsData.text), argsData.labelStyle, argsData.labelStyle.color || control.themeStyle.labelFontColor, labelElement).setAttribute('style', axis.valueType === 'DateTime' ? 'cursor: pointer' : 'cursor: default');\n prevX = pointX;\n prevLabel = label;\n }\n return border;\n };\n /**\n * To check label is intersected with successive label or not\n */\n RangeNavigatorAxis.prototype.isIntersect = function (axis, currentX, currentWidth, prevX, prevWidth) {\n return (axis.isInversed) ? (currentX + currentWidth / 2 > prevX - prevWidth / 2) :\n (currentX - currentWidth / 2 < prevX + prevWidth / 2);\n };\n /**\n * To find suitable label format for Quarter and week Interval types\n * @param axis\n * @param control\n */\n RangeNavigatorAxis.prototype.findSuitableFormat = function (axis, control) {\n var labels = axis.visibleLabels;\n var labelLength = labels.length;\n var bounds = control.bounds;\n var prevX;\n var currentX;\n var interval = control.valueType === 'DateTime' ?\n labelLength > 1 ? (labels[1].value - labels[0].value) : axis.visibleRange.interval\n : 0;\n for (var i = 0; i < labelLength; i++) {\n currentX = (valueToCoefficient((labels[i].value + interval / 2), axis) * bounds.width) + bounds.x;\n labels[i].size = measureText(labels[i].text, axis.labelStyle);\n //edgelabelPlacements\n if (i === 0 && currentX < bounds.x) {\n currentX = bounds.x + labels[i].size.width / 2;\n }\n if (axis.actualIntervalType === 'Quarter') {\n if (i !== 0) {\n if ((labels[i].text.indexOf('Quarter') > -1) &&\n (this.isIntersect(axis, currentX, labels[i].size.width, prevX, labels[i - 1].size.width))) {\n labels.every(function (label) {\n label.text = label.text.toString().replace('Quarter', 'QTR');\n return true;\n });\n axis.visibleLabels = labels;\n this.findSuitableFormat(axis, control);\n }\n else {\n if (this.isIntersect(axis, currentX, labels[i].size.width, prevX, labels[i - 1].size.width)) {\n labels.every(function (label) {\n label.text = label.text.toString().replace('QTR', 'Q');\n return true;\n });\n axis.visibleLabels = labels;\n }\n }\n }\n }\n else if (axis.actualIntervalType === 'Weeks') {\n if ((i !== 0) && ((labels[i].text.indexOf('Week') > -1) &&\n (this.isIntersect(axis, currentX, labels[i].size.width, prevX, labels[i - 1].size.width)))) {\n labels.every(function (label) {\n label.text = label.text.toString().replace('Week', 'W');\n return true;\n });\n axis.visibleLabels = labels;\n }\n }\n prevX = currentX;\n }\n };\n /**\n * Alignment position for secondary level labels in date time axis\n * @param axis\n * @param index\n */\n RangeNavigatorAxis.prototype.findAlignment = function (axis, index) {\n var label = axis.visibleLabels[index];\n var nextLabel = axis.visibleLabels[index + 1];\n var bounds = this.rangeNavigator.bounds;\n return (this.rangeNavigator.secondaryLabelAlignment === 'Near' ?\n (valueToCoefficient((label.value), axis) * bounds.width) + bounds.x + label.size.width / 2 :\n (valueToCoefficient((nextLabel ? nextLabel.value : axis.visibleRange.max), axis) * bounds.width) + bounds.x - label.size.width);\n };\n return RangeNavigatorAxis;\n}(DateTime));\nexport { RangeNavigatorAxis };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Border, Animation, Font } from '../../common/model/base';\nimport { Rect } from '../../index';\nimport { RangeNavigatorTheme } from '../utils/theme';\n/**\n * Series class for the range navigator\n */\nvar RangeNavigatorSeries = /** @class */ (function (_super) {\n __extends(RangeNavigatorSeries, _super);\n function RangeNavigatorSeries() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"xName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"yName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"query\", void 0);\n __decorate([\n Property('Line')\n ], RangeNavigatorSeries.prototype, \"type\", void 0);\n __decorate([\n Complex({ enable: false }, Animation)\n ], RangeNavigatorSeries.prototype, \"animation\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 2 }, Border)\n ], RangeNavigatorSeries.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], RangeNavigatorSeries.prototype, \"width\", void 0);\n __decorate([\n Property('0')\n ], RangeNavigatorSeries.prototype, \"dashArray\", void 0);\n return RangeNavigatorSeries;\n}(ChildProperty));\nexport { RangeNavigatorSeries };\n/**\n * Thumb settings\n */\nvar ThumbSettings = /** @class */ (function (_super) {\n __extends(ThumbSettings, _super);\n function ThumbSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ThumbSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ThumbSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({ width: 1, color: null }, Border)\n ], ThumbSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], ThumbSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Circle')\n ], ThumbSettings.prototype, \"type\", void 0);\n return ThumbSettings;\n}(ChildProperty));\nexport { ThumbSettings };\n/**\n * Style settings\n */\nvar StyleSettings = /** @class */ (function (_super) {\n __extends(StyleSettings, _super);\n function StyleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, ThumbSettings)\n ], StyleSettings.prototype, \"thumb\", void 0);\n __decorate([\n Property(null)\n ], StyleSettings.prototype, \"selectedRegionColor\", void 0);\n __decorate([\n Property(null)\n ], StyleSettings.prototype, \"unselectedRegionColor\", void 0);\n return StyleSettings;\n}(ChildProperty));\nexport { StyleSettings };\n/**\n * button settings in period selector\n */\nvar Periods = /** @class */ (function (_super) {\n __extends(Periods, _super);\n function Periods() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Years')\n ], Periods.prototype, \"intervalType\", void 0);\n __decorate([\n Property(1)\n ], Periods.prototype, \"interval\", void 0);\n __decorate([\n Property(null)\n ], Periods.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], Periods.prototype, \"selected\", void 0);\n return Periods;\n}(ChildProperty));\nexport { Periods };\n/**\n * Period Selector Settings\n */\nvar PeriodSelectorSettings = /** @class */ (function (_super) {\n __extends(PeriodSelectorSettings, _super);\n function PeriodSelectorSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(43)\n ], PeriodSelectorSettings.prototype, \"height\", void 0);\n __decorate([\n Property('Bottom')\n ], PeriodSelectorSettings.prototype, \"position\", void 0);\n __decorate([\n Collection([], Periods)\n ], PeriodSelectorSettings.prototype, \"periods\", void 0);\n return PeriodSelectorSettings;\n}(ChildProperty));\nexport { PeriodSelectorSettings };\n/*\n * Configures the ToolTips in the chart.\n */\nvar RangeTooltipSettings = /** @class */ (function (_super) {\n __extends(RangeTooltipSettings, _super);\n function RangeTooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], RangeTooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(0.85)\n ], RangeTooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], RangeTooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(null)\n ], RangeTooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Complex(RangeNavigatorTheme.tooltipLabelFont, Font)\n ], RangeTooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], RangeTooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, Border)\n ], RangeTooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Property('OnDemand')\n ], RangeTooltipSettings.prototype, \"displayMode\", void 0);\n return RangeTooltipSettings;\n}(ChildProperty));\nexport { RangeTooltipSettings };\n","export var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.smithchartTitleFont = {\n size: '15px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.smithchartSubtitleFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getSeriesColor(theme) {\n var palette;\n switch (theme) {\n case 'Highcontrast':\n palette = ['#79ECE4', '#E98272', '#DFE6B6', '#C6E773', '#BA98FF',\n '#FA83C3', '#00C27A', '#43ACEF', '#D681EF', '#D8BC6E'];\n break;\n case 'Fabric':\n palette = ['#4472c4', '#ed7d31', '#ffc000', '#70ad47', '#5b9bd5',\n '#c1c1c1', '#6f6fe2', '#e269ae', '#9e480e', '#997300'];\n break;\n case 'Bootstrap':\n palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n break;\n default:\n palette = ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n break;\n }\n return palette;\n}\n/** @private */\nexport function getThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n axisLabel: '#ffffff',\n axisLine: '#ffffff',\n majorGridLine: '#BFBFBF',\n minorGridLine: '#969696',\n chartTitle: '#ffffff',\n legendLabel: '#ffffff',\n background: '#000000',\n areaBorder: '#ffffff',\n tooltipFill: '#ffffff',\n dataLabel: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696',\n };\n break;\n default:\n style = {\n axisLabel: '#686868',\n axisLine: '#b5b5b5',\n majorGridLine: '#dbdbdb',\n minorGridLine: '#eaeaea',\n chartTitle: '#424242',\n legendLabel: '#353535',\n background: '#FFFFFF',\n areaBorder: 'Gray',\n tooltipFill: 'rgba(0, 8, 22, 0.75)',\n dataLabel: '#424242',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff'\n };\n break;\n }\n return style;\n}\n","import { Browser, createElement } from '@syncfusion/ej2-base';\nimport { RectOption } from '../../common/utils/helper';\nimport { getXLocation, getExactData, getRangeValueXByPoint, getNearestValue } from '../utils/helper';\nimport { drawSymbol, PathOption, linear } from '../../chart/index';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * Class for slider\n */\nvar RangeSlider = /** @class */ (function () {\n function RangeSlider(range) {\n this.control = range;\n this.points = [];\n this.isIOS = Browser.isIos || Browser.isIos7;\n var thumb = range.navigatorStyleSettings.thumb;\n this.thumbVisible = (range.themeStyle.thumbWidth !== 0 && range.themeStyle.thumbHeight !== 0);\n this.elementId = range.element.id;\n this.thumpPadding = range.themeStyle.thumbWidth / 2;\n this.addEventListener();\n this.thumbColor = range.disableRangeSelector ? 'transparent' :\n (thumb.fill || range.themeStyle.thumbBackground);\n }\n /**\n * Render Slider elements for range navigator\n * @param range\n */\n RangeSlider.prototype.render = function (range) {\n var renderer = range.renderer;\n var style = range.navigatorStyleSettings;\n var disabledColor = (range.disableRangeSelector) ? 'transparent' : null;\n var sliderGroup = renderer.createGroup({\n 'id': this.elementId + '_sliders',\n style: (range.disableRangeSelector) ? 'pointer-events:none;' : ''\n });\n var option = new RectOption(this.elementId + '_leftUnSelectedArea', disabledColor || style.unselectedRegionColor || range.themeStyle.unselectedRectColor, { width: 0 }, 1, {\n x: range.bounds.x, y: range.bounds.y,\n width: range.bounds.width / 3,\n height: range.bounds.height\n });\n this.leftUnSelectedElement = renderer.drawRectangle(option);\n option.id = this.elementId + '_rightUnSelectedArea';\n this.rightUnSelectedElement = renderer.drawRectangle(option);\n option.id = this.elementId + '_SelectedArea';\n option.fill = disabledColor || style.selectedRegionColor || range.themeStyle.selectedRegionColor;\n this.selectedElement = renderer.drawRectangle(option);\n this.selectedElement.setAttribute('style', 'cursor: -webkit-grab');\n this.leftSlider = renderer.createGroup({\n 'id': this.elementId + '_LeftSlider', 'style': 'cursor: ew-resize'\n });\n this.rightSlider = renderer.createGroup({\n 'id': this.elementId + '_RightSlider', 'style': 'cursor: ew-resize'\n });\n this.createThump(renderer, range.bounds, this.leftSlider, this.elementId + '_LeftSlider', sliderGroup);\n this.createThump(renderer, range.bounds, this.rightSlider, this.elementId + '_RightSlider');\n sliderGroup.appendChild(this.leftUnSelectedElement);\n sliderGroup.appendChild(this.rightUnSelectedElement);\n sliderGroup.appendChild(this.selectedElement);\n sliderGroup.appendChild(this.leftSlider);\n sliderGroup.appendChild(this.rightSlider);\n range.svgObject.appendChild(sliderGroup);\n };\n /**\n * Thumb creation performed\n * @param render\n * @param bounds\n * @param parent\n * @param id\n */\n RangeSlider.prototype.createThump = function (render, bounds, parent, id, sliderGroup) {\n var control = this.control;\n var thump = control.navigatorStyleSettings.thumb;\n var style = control.themeStyle;\n var y = bounds.y + bounds.height / 2;\n var x = this.thumpPadding;\n var tickLength = (control.themeStyle.thumbHeight / 2) - 5;\n var disabledColor = control.disableRangeSelector ? 'transparent' : null;\n var lineColor = disabledColor || thump.border.color || style.thumpLineColor;\n var shadowElement;\n parent.appendChild(render.drawPath(new PathOption(id + '_ThumpLine', 'transparent', thump.border.width, control.series.length ? lineColor : 'transparent', 1, null, 'M' + ' ' + (x) + ' ' + (bounds.y) + ' ' + 'L' + ' ' + (x) + ' ' + (bounds.y + bounds.height) + ' ')));\n this.thumpY = y - (control.themeStyle.thumbHeight / 2);\n this.sliderY = bounds.y > this.thumpY ? this.thumpY : bounds.y;\n if (sliderGroup && !control.disableRangeSelector) {\n shadowElement = render.createDefs();\n shadowElement.innerHTML = '' +\n '' +\n '' +\n '' +\n '';\n sliderGroup.appendChild(shadowElement);\n }\n parent.innerHTML += '';\n if (thump.type === 'Circle') {\n parent.appendChild(drawSymbol({ x: x, y: y }, 'Circle', { width: control.themeStyle.thumbWidth, height: control.themeStyle.thumbHeight }, '', new PathOption(id + '_ThumpSymbol', disabledColor || this.thumbColor, thump.border.width, lineColor, 1, null), 'Thumb'));\n }\n else {\n parent.appendChild(render.drawRectangle(new RectOption(id + '_ThumpSymbol', disabledColor || this.thumbColor, { width: thump.border.width, color: lineColor }, 1, {\n x: x - (control.themeStyle.thumbWidth / 2), y: y - (control.themeStyle.thumbHeight / 2),\n width: control.themeStyle.thumbWidth,\n height: control.themeStyle.thumbHeight\n }, 2, 2)));\n }\n if (this.thumbVisible) {\n parent.appendChild(render.drawPath(new PathOption(id + '_ThumpGrip', 'transparent', 1, disabledColor || control.themeStyle.gripColor, 1, null, 'M' + ' ' + (x + 2) + ' ' + (y + tickLength) + ' ' + 'L' + ' ' + (x + 2) + ' ' + (y - tickLength) + ' ' +\n 'M' + ' ' + (x) + ' ' + (y + tickLength) + ' ' + 'L' + ' ' + (x) + ' ' + (y - tickLength) + ' ' +\n 'M' + ' ' + (x - 2) + ' ' + (y + tickLength) + ' ' + 'L' + ' ' + (x - 2) + ' ' + (y - tickLength) + ' ')));\n }\n };\n /**\n * Set slider value for range navigator\n * @param start\n * @param end\n */\n RangeSlider.prototype.setSlider = function (start, end, trigger, showTooltip) {\n var range = this.control;\n var padding = range.bounds.x;\n var axisRange = range.chartSeries.xAxis.actualRange;\n var isLeightWeight = range.series.length === 0;\n if (!(end >= start)) {\n start = [end, end = start][0];\n }\n start = end >= start ? start : [end, end = start][0];\n start = Math.max(start, axisRange.min);\n end = Math.min(end, axisRange.max);\n this.startX = padding + getXLocation(start, axisRange, range.bounds.width, range.enableRtl);\n this.endX = padding + getXLocation(end, axisRange, range.bounds.width, range.enableRtl);\n var selectedX = range.enableRtl ? this.endX : this.startX;\n var rightPadding = range.enableRtl ? this.startX : this.endX;\n this.sliderWidth = Math.abs(this.endX - this.startX);\n this.selectedElement.setAttribute('x', (selectedX) + '');\n this.selectedElement.setAttribute('width', this.sliderWidth + '');\n this.leftUnSelectedElement.setAttribute('width', (selectedX - padding) + '');\n this.rightUnSelectedElement.setAttribute('x', rightPadding + '');\n this.rightUnSelectedElement.setAttribute('width', (range.bounds.width - (rightPadding - padding)) + '');\n this.leftSlider.setAttribute('transform', 'translate(' + (this.startX - this.thumpPadding) + ', 0)');\n this.rightSlider.setAttribute('transform', 'translate(' + (this.endX - this.thumpPadding) + ', 0)');\n var left = this.control.svgObject.getBoundingClientRect().left -\n this.control.element.getBoundingClientRect().left;\n var leftX = this.control.enableRtl ? this.endX : this.startX;\n var rightX = this.control.enableRtl ? this.startX : this.endX;\n this.leftRect = {\n x: isLeightWeight ? left + padding : padding,\n y: isLeightWeight ? 0 : range.bounds.y,\n width: isLeightWeight ? leftX - padding : leftX,\n height: isLeightWeight ? this.thumpY : range.bounds.height\n };\n this.rightRect = {\n x: isLeightWeight ? left + rightX : rightX,\n y: isLeightWeight ? 0 : range.bounds.y,\n width: (range.bounds.width - (rightPadding - padding)),\n height: isLeightWeight ? this.thumpY : range.bounds.height\n };\n this.midRect = {\n x: isLeightWeight ? leftX + left : 0,\n y: isLeightWeight ? 0 : range.bounds.y,\n width: isLeightWeight ? Math.abs(this.endX - this.startX) : rightX,\n height: isLeightWeight ? this.thumpY : range.bounds.height\n };\n this.currentStart = start;\n this.currentEnd = end;\n if (showTooltip) {\n this.control.rangeTooltipModule.renderLeftTooltip(this);\n this.control.rangeTooltipModule.renderRightTooltip(this);\n }\n if (trigger) {\n this.triggerEvent(axisRange);\n }\n };\n /**\n * Trigger changed event\n * @param range\n */\n RangeSlider.prototype.triggerEvent = function (range) {\n var argsData;\n var xAxis = this.control.chartSeries.xAxis;\n var valueType = xAxis.valueType;\n argsData = {\n cancel: false,\n start: valueType === 'DateTime' ? new Date(this.currentStart) :\n (valueType === 'Logarithmic' ? Math.pow(xAxis.logBase, this.currentStart) : this.currentStart),\n end: valueType === 'DateTime' ? new Date(this.currentEnd) :\n (valueType === 'Logarithmic' ? Math.pow(xAxis.logBase, this.currentEnd) : this.currentEnd),\n name: 'changed',\n selectedData: getExactData(this.points, this.currentStart, this.currentEnd),\n zoomPosition: (this.control.enableRtl ? range.max - this.currentEnd :\n this.currentStart - range.min) / range.delta,\n zoomFactor: (this.currentEnd - this.currentStart) / range.delta\n };\n this.control.trigger('changed', argsData);\n };\n /**\n * @hidden\n */\n RangeSlider.prototype.addEventListener = function () {\n if (this.control.isDestroyed) {\n return;\n }\n this.control.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.control.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.control.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.control.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseCancelHandler, this);\n };\n /**\n * @hidden\n */\n RangeSlider.prototype.removeEventListener = function () {\n if (this.control.isDestroyed) {\n return;\n }\n this.control.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.control.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.control.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.control.off(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseCancelHandler);\n };\n /**\n * Move move handler perfomed here\n * @hidden\n * @param e\n */\n RangeSlider.prototype.mouseMoveHandler = function (e) {\n var control = this.control;\n var axisRange = control.chartSeries.xAxis.actualRange;\n var bounds = control.bounds;\n var start;\n var end;\n this.getCurrentSlider(e.target.id);\n if (this.isDrag && control.mouseX >= bounds.x) {\n switch (this.currentSlider) {\n case 'Left':\n control.startValue = this.getRangeValue(Math.abs(control.mouseX - bounds.x));\n break;\n case 'Right':\n control.endValue = this.getRangeValue(Math.abs(control.mouseX - bounds.x));\n break;\n case 'Middle':\n start = Math.max(this.getRangeValue(Math.abs(this.startX - (this.previousMoveX - control.mouseX) - bounds.x)), axisRange.min);\n end = Math.min(this.getRangeValue(Math.abs(this.endX - (this.previousMoveX - control.mouseX) - bounds.x)), axisRange.max);\n var currentWidth = Math.floor(Math.abs(getXLocation(end, axisRange, control.bounds.width, control.enableRtl) -\n getXLocation(start, axisRange, control.bounds.width, control.enableRtl)));\n if (currentWidth === Math.floor(this.sliderWidth)) {\n control.startValue = start;\n control.endValue = end;\n }\n break;\n }\n if (e.preventDefault && this.isIOS) {\n e.preventDefault();\n }\n this.setSlider(control.startValue, control.endValue, !control.enableDeferredUpdate, (control.rangeTooltipModule && control.tooltip.enable));\n this.previousMoveX = control.mouseX;\n }\n };\n /**\n * To get the range value\n * @param x\n */\n RangeSlider.prototype.getRangeValue = function (x) {\n var control = this.control;\n var axisRange = control.chartSeries.xAxis.actualRange;\n var bounds = control.bounds;\n return getRangeValueXByPoint(x, bounds.width, axisRange, control.enableRtl);\n };\n /**\n * Moused down handler for slider perform here\n * @param e\n */\n RangeSlider.prototype.mouseDownHandler = function (e) {\n this.currentSlider = this.getCurrentSlider(e.target.id);\n this.selectedElement.setAttribute('style', 'cursor: -webkit-grabbing');\n this.isDrag = !(this.currentSlider === 'UnSelectedArea' || !this.currentSlider);\n this.previousMoveX = this.control.mouseDownX;\n };\n /**\n * To get the current slider element\n * @param id\n */\n RangeSlider.prototype.getCurrentSlider = function (id) {\n var hoverColor = this.control.themeStyle.thumbHoverColor;\n if (id.indexOf(this.elementId + '_LeftSlider') > -1) {\n this.leftSlider.childNodes[2].setAttribute('fill', hoverColor);\n return 'Left';\n }\n else if (id.indexOf(this.elementId + '_RightSlider') > -1) {\n this.rightSlider.childNodes[2].setAttribute('fill', hoverColor);\n return 'Right';\n }\n else if (id.indexOf(this.elementId + '_SelectedArea') > -1) {\n return 'Middle';\n }\n else if (id.indexOf('UnSelectedArea') > -1) {\n this.leftSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n this.rightSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n return 'UnSelectedArea';\n }\n else if (id.indexOf(this.elementId + '_AxisLabel_') > -1 && this.control.valueType === 'DateTime') {\n this.labelIndex = +id.split('_')[2];\n return 'firstLevelLabels';\n }\n else if (id.indexOf(this.elementId + '_SecondaryLabel') > -1 && this.control.valueType === 'DateTime') {\n this.labelIndex = +id.split('_')[2];\n return 'secondLevelLabels';\n }\n else {\n this.leftSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n this.rightSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n if (this.control.periodSelectorModule) {\n this.control.periodSelectorModule.triggerChange = true;\n }\n return null;\n }\n };\n /**\n * Mouse up handler performed here\n * @param e\n */\n RangeSlider.prototype.mouseUpHandler = function (e) {\n var control = this.control;\n var range = control.chartSeries.xAxis.actualRange;\n var trigger = control.enableDeferredUpdate;\n var endbledTooltip = control.tooltip.enable;\n if (this.currentSlider === 'UnSelectedArea') {\n var value = void 0;\n var start = void 0;\n var end = void 0;\n var isRtl = control.enableRtl;\n var difference = control.endValue - control.startValue;\n if (control.mouseDownX < this.startX) {\n value = Math.max(this.getRangeValue((control.mouseDownX - (this.sliderWidth / 2) - control.bounds.x)), range.min);\n end = isRtl ? value : (value + difference);\n start = isRtl ? (value - difference) : value;\n }\n else {\n value = Math.min(this.getRangeValue((control.mouseDownX + (this.sliderWidth / 2) - control.bounds.x)), range.max);\n start = isRtl ? value : (value - difference);\n end = isRtl ? (value + difference) : value;\n }\n this.performAnimation(start, end, control);\n trigger = false;\n }\n else if (this.currentSlider === 'firstLevelLabels' || this.currentSlider === 'secondLevelLabels') {\n var secondLabel = control.rangeAxis[this.currentSlider][this.labelIndex + 1];\n this.performAnimation(control.rangeAxis[this.currentSlider][this.labelIndex].value, (secondLabel ? secondLabel.value : range.max), control);\n trigger = false;\n }\n if (this.isDrag && control.allowSnapping) {\n this.setAllowSnapping(control, this.currentStart, this.currentEnd, trigger, endbledTooltip);\n trigger = false;\n }\n if (trigger) {\n this.setSlider(this.currentStart, this.currentEnd, true, endbledTooltip);\n }\n if (this.currentSlider !== null) {\n if (this.control.periodSelectorSettings.periods.length > 0) {\n this.control.periodSelectorModule.triggerChange = false;\n this.control.periodSelectorModule.datePicker.startDate = new Date(this.currentStart);\n this.control.periodSelectorModule.datePicker.endDate = new Date(this.currentEnd);\n }\n }\n this.selectedElement.setAttribute('style', 'cursor: -webkit-grab');\n control.startValue = this.currentStart;\n control.endValue = this.currentEnd;\n this.isDrag = false;\n this.labelIndex = null;\n this.currentSlider = null;\n };\n /**\n * Allow Snapping perfomed here\n * @param control\n * @param start\n * @param end\n */\n RangeSlider.prototype.setAllowSnapping = function (control, start, end, trigger, tooltip) {\n var values = control.rangeAxis.lowerValues;\n values.push(control.chartSeries.xAxis.actualRange.max);\n this.setSlider(getNearestValue(values, start), getNearestValue(values, end), trigger, tooltip);\n control.startValue = this.currentStart;\n control.endValue = this.currentEnd;\n };\n /**\n * Animation Calculation for slider navigation\n * @param start\n * @param end\n */\n RangeSlider.prototype.performAnimation = function (start, end, control) {\n var _this = this;\n var currentStart = this.currentStart;\n var currentEnd = this.currentEnd;\n var isDeffered = control.enableDeferredUpdate;\n var enableTooltip = control.tooltip.enable;\n new Animation({}).animate(createElement('div'), {\n duration: this.control.animationDuration,\n progress: function (args) {\n _this.setSlider(linear(args.timeStamp, 0, start - currentStart, args.duration) + currentStart, linear(args.timeStamp, 0, end - currentEnd, args.duration) + currentEnd, !isDeffered, enableTooltip);\n },\n end: function (model) {\n if (control.allowSnapping) {\n _this.setAllowSnapping(control, start, end, true, enableTooltip);\n }\n else {\n _this.setSlider(start, end, true, enableTooltip);\n }\n _this.control.startValue = _this.currentStart;\n _this.control.endValue = _this.currentEnd;\n if (_this.control.periodSelectorSettings.periods.length > 0) {\n _this.control.periodSelectorModule.triggerChange = false;\n _this.control.periodSelectorModule.datePicker.startDate = new Date(_this.currentStart);\n _this.control.periodSelectorModule.datePicker.endDate = new Date(_this.currentEnd);\n }\n }\n });\n };\n /**\n * Mouse Cancel Handler\n */\n RangeSlider.prototype.mouseCancelHandler = function () {\n this.isDrag = false;\n this.currentSlider = null;\n this.control.startValue = this.currentStart;\n this.control.endValue = this.currentEnd;\n };\n /**\n * Destroy Method Calling here\n */\n RangeSlider.prototype.destroy = function () {\n this.removeEventListener();\n };\n return RangeSlider;\n}());\nexport { RangeSlider };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Complex, Collection, Browser } from '@syncfusion/ej2-base';\nimport { EventHandler, remove, Internationalization } from '@syncfusion/ej2-base';\nimport { Event } from '@syncfusion/ej2-base';\nimport { createSvg, Size, Rect, measureText, removeElement } from '../common/utils/helper';\nimport { Border, Margin } from '../common/model/base';\nimport { RangeSeries } from './renderer/chart-render';\nimport { RangeNavigatorAxis } from './renderer/range-axis';\nimport { RangeNavigatorSeries, StyleSettings, RangeTooltipSettings, PeriodSelectorSettings } from './model/range-base';\nimport { RangeSlider } from './renderer/slider';\nimport { RectOption } from '../chart/index';\nimport { getElement, LineSeries } from '../chart/index';\nimport { getRangeThemeColor } from './utils/theme';\nimport { Font } from '../common/model/base';\nimport { MajorGridLines, MajorTickLines } from '../chart/axis/axis';\nimport { RangeNavigatorTheme } from './utils/theme';\nimport { Double } from '../chart/axis/double-axis';\nimport { ExportUtils } from '../common/utils/export';\n/**\n * Range Navigator\n */\nvar RangeNavigator = /** @class */ (function (_super) {\n __extends(RangeNavigator, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function RangeNavigator(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.animateSeries = true;\n _this.chartid = 57725;\n return _this;\n }\n /**\n * Starting point of the control initialization\n */\n RangeNavigator.prototype.preRender = function () {\n this.unWireEvents();\n this.setCulture();\n if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-rangenavigator').length;\n this.element.id = 'rangenavigator_' + this.chartid + '_' + collection;\n }\n this.wireEvents();\n };\n /**\n * To initialize the private variables\n */\n RangeNavigator.prototype.initPrivateVariables = function () {\n this.doubleModule = new Double();\n this.labels = [];\n this.rangeSlider = new RangeSlider(this);\n this.chartSeries = new RangeSeries(this);\n this.lineSeriesModule = new LineSeries();\n this.rangeAxis = new RangeNavigatorAxis(this);\n };\n /**\n * Method to set culture for chart\n */\n RangeNavigator.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * to initialize the slider\n */\n RangeNavigator.prototype.setSliderValue = function () {\n var isDateTime = this.valueType === 'DateTime';\n var range = this.chartSeries.xAxis.actualRange;\n this.startValue = this.startValue ? this.startValue : (!this.value[0] ? range.min :\n (isDateTime ? this.value[0].getTime() : +this.value[0]));\n this.endValue = this.endValue ? this.endValue : (!this.value[1] ? range.max :\n (isDateTime ? this.value[1].getTime() : +this.value[1]));\n };\n /**\n * To render the range navigator\n */\n RangeNavigator.prototype.render = function () {\n this.trigger('load', { rangeNavigator: this });\n this.setTheme();\n this.initPrivateVariables();\n this.createRangeSvg();\n this.calculateBounds();\n this.chartSeries.renderChart(this);\n removeElement('chartmeasuretext');\n };\n /**\n * Theming for rangeNavigator\n */\n RangeNavigator.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getRangeThemeColor(this.theme, this);\n };\n /**\n * Method to create SVG for Range Navigator\n */\n RangeNavigator.prototype.createRangeSvg = function () {\n this.removeSvg();\n createSvg(this);\n this.renderChartBackground();\n };\n /**\n * Bounds calculation for widget performed.\n */\n RangeNavigator.prototype.calculateBounds = function () {\n var labelPadding = this.enableGrouping ? 15 : 8;\n var thumb = this.navigatorStyleSettings.thumb;\n var labelSize = measureText('tempString', this.labelStyle).height;\n var margin = this.margin;\n var isLeightWeight = !this.series.length;\n var tooltipSpace = (!this.disableRangeSelector) &&\n isLeightWeight && this.tooltip.enable ? 35 : 0;\n var selector = this.periodSelectorModule;\n if (this.periodSelectorModule && this.periodSelectorSettings.periods.length > 0) {\n selector.periodSelectorSize = { x: 0, y: 0, height: 0, width: 0 };\n selector.periodSelectorSize.width = this.availableSize.width;\n selector.periodSelectorSize.height = this.periodSelectorSettings.height;\n selector.periodSelectorSize.y = this.periodSelectorSettings.position === 'Bottom' ?\n this.availableSize.height - selector.periodSelectorSize.height : 0;\n }\n var periodSelectorY = this.periodSelectorSettings.position === 'Top' && selector ?\n selector.periodSelectorSize.y + selector.periodSelectorSize.height : 0;\n this.bounds = new Rect((this.themeStyle.thumbWidth / 2 + thumb.border.width + margin.left), margin.top + tooltipSpace + periodSelectorY, this.availableSize.width - this.themeStyle.thumbWidth - (thumb.border.width * 2) - margin.left - margin.right, this.availableSize.height - margin.top - margin.bottom - tooltipSpace - (selector ? selector.periodSelectorSize.height : 0));\n var deductHeight = ((this.labelPosition === 'Outside' || isLeightWeight) ?\n (labelSize + labelPadding) : 0) + ((this.tickPosition === 'Outside' || isLeightWeight) ?\n (this.majorTickLines.height) : 0);\n this.bounds.height -= deductHeight;\n if (isLeightWeight) {\n var height = this.enableGrouping ? this.bounds.height - ((labelSize) + labelPadding) : this.bounds.height;\n this.bounds.y += (this.themeStyle.thumbHeight > height ? (this.themeStyle.thumbHeight - height) / 2 : 0);\n }\n if (this.disableRangeSelector) {\n this.bounds.y = 0;\n this.bounds.height = this.periodSelectorSettings.height;\n }\n };\n /**\n * Creating Chart for range navigator\n */\n RangeNavigator.prototype.renderChart = function () {\n this.chartSeries.renderSeries(this);\n this.rangeAxis.renderGridLines();\n this.rangeAxis.renderAxisLabels();\n this.createSecondaryElement();\n this.setSliderValue();\n this.renderPeriodSelector();\n this.renderSlider();\n this.element.appendChild(this.svgObject);\n this.trigger('loaded', { rangeNavigator: this });\n this.rangeSlider.setSlider(this.startValue, this.endValue, false, this.tooltip.enable && this.tooltip.displayMode === 'Always');\n };\n /**\n * To render period selector value\n */\n RangeNavigator.prototype.renderPeriodSelector = function () {\n if (this.periodSelectorModule) {\n this.periodSelectorModule.renderSelectorElement(this);\n this.periodSelectorModule.renderSelector();\n }\n };\n /**\n * Creating secondary range navigator\n */\n RangeNavigator.prototype.createSecondaryElement = function () {\n // For userInteraction\n if (this.tooltip.enable) {\n var tooltipDiv = this.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n }\n };\n /**\n * Slider Calculation ane rendering performed here\n */\n RangeNavigator.prototype.renderSlider = function () {\n this.rangeSlider.render(this);\n this.rangeSlider.setSlider(this.startValue, this.endValue, true, this.tooltip.enable && this.tooltip.displayMode === 'Always');\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.removeSvg = function () {\n if (getElement(this.element.id + '_Secondary_Element')) {\n remove(getElement(this.element.id + '_Secondary_Element'));\n }\n var removeLength = 0;\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > removeLength) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /** Wire, UnWire and Event releated calculation Started here */\n /**\n * Method to un-bind events for range navigator\n */\n RangeNavigator.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var startEvent = Browser.touchStartEvent;\n var moveEvent = Browser.touchMoveEvent;\n var stopEvent = Browser.touchEndEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, startEvent, this.rangeOnMouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'click', this.rangeOnMouseClick);\n //EventHandler.remove(this.element, 'contextmenu', this.rangeRightClick);\n EventHandler.remove(this.element, cancelEvent, this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.rangeResize);\n };\n /**\n * Method to bind events for range navigator\n */\n RangeNavigator.prototype.wireEvents = function () {\n /*! Find the Events type */\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.rangeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'click', this.rangeOnMouseClick, this);\n //EventHandler.add(this.element, 'contextmenu', this.rangeRightClick, this);\n EventHandler.add(this.element, cancelEvent, this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.rangeResize.bind(this));\n var element = this.element;\n element.style.touchAction = 'none';\n element.style.msTouchAction = 'none';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n element.style.display = 'block';\n };\n /**\n * Handles the widget resize.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.rangeResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n var arg = {\n rangeNavigator: this,\n name: 'resized',\n currentSize: new Size(0, 0),\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n };\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n _this.createRangeSvg();\n arg.currentSize = _this.availableSize;\n _this.trigger('resized', arg);\n _this.calculateBounds();\n _this.chartSeries.renderChart(_this);\n }, 500);\n return false;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.mouseMove = function (e) {\n this.mouseX = this.setMouseX(e);\n this.notify(Browser.touchMoveEvent, e);\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.mouseLeave = function (e) {\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.mouseX = this.setMouseX(e);\n this.notify(cancelEvent, e);\n return false;\n };\n /**\n * Handles the mouse click on range navigator.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.rangeOnMouseClick = function (e) {\n this.notify('click', e);\n return false;\n };\n /**\n * Handles the print method for range navigator control.\n */\n RangeNavigator.prototype.print = function (id) {\n new ExportUtils(this).print(id);\n };\n /**\n * Handles the export method for range navigator control.\n * @param type\n * @param fileName\n */\n RangeNavigator.prototype.export = function (type, fileName, orientation, controls, width, height) {\n controls = controls ? controls : [this];\n new ExportUtils(this).export(type, fileName, orientation, controls, width, height);\n };\n /**\n * Creating a background element to the svg object\n */\n RangeNavigator.prototype.renderChartBackground = function () {\n var rect = new RectOption(this.element.id + '_ChartBorder', this.themeStyle.background, { width: 0, color: 'transparent' }, 1, new Rect(0, 0, this.availableSize.width, this.availableSize.height));\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n };\n /**\n * Handles the mouse down on range navigator.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.rangeOnMouseDown = function (e) {\n this.mouseDownX = this.setMouseX(e);\n this.notify(Browser.touchStartEvent, e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.mouseEnd = function (e) {\n this.mouseX = this.setMouseX(e);\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n // private rangeRightClick(event: MouseEvent | PointerEvent): boolean {\n // if (event.buttons === 2 || event.which === 0 || (event).pointerType === 'touch') {\n // event.preventDefault();\n // event.stopPropagation();\n // return false;\n // }\n // return true;\n // }\n /**\n * To find mouse x, y for aligned range navigator element svg position\n */\n RangeNavigator.prototype.setMouseX = function (e) {\n var pageX = e.type.indexOf('touch') > -1 ?\n e.changedTouches[0].clientX : e.clientX;\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n return (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n };\n /** Wire, UnWire and Event releated calculation End here */\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n RangeNavigator.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * OnProperty change method calling here\n * @param newProp\n * @param oldProp\n */\n RangeNavigator.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n var refreshRange = false;\n this.animateSeries = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n case 'height':\n case 'navigatorBorder':\n case 'enableGrouping':\n case 'labelPosition':\n case 'tickPosition':\n case 'labelStyle':\n refreshBounds = true;\n break;\n case 'series':\n case 'enableRtl':\n case 'dataSource':\n case 'xName':\n case 'yName':\n case 'query':\n case 'minimum':\n case 'maximum':\n case 'interval':\n case 'intervalType':\n case 'logBase':\n case 'valueType':\n case 'majorGridLines':\n case 'minorGridLines':\n case 'navigatorStyleSettings':\n case 'labelFormat':\n case 'skeleton':\n case 'skeletonType':\n case 'secondaryLabelAlignment':\n renderer = true;\n break;\n case 'theme':\n this.animateSeries = true;\n break;\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'value':\n refreshRange = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.chartSeries.renderChart(this);\n }\n if (refreshBounds) {\n this.removeSvg();\n this.calculateBounds();\n this.chartSeries.renderChart(this);\n }\n if (!refreshBounds && !renderer && refreshRange) {\n this.setSliderValue();\n this.rangeSlider.setSlider(this.startValue, this.endValue, true, this.tooltip.enable && this.tooltip.displayMode === 'Always');\n }\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n RangeNavigator.prototype.requiredModules = function () {\n var _this = this;\n var modules = [];\n this.series.map(function (series) {\n modules.push({\n member: series.type + 'Series',\n args: [_this]\n });\n });\n if (this.periodSelectorSettings.periods.length > 0) {\n modules.push({\n member: 'PeriodSelector',\n args: [this]\n });\n }\n if (this.valueType !== 'Double') {\n modules.push({\n member: this.valueType,\n args: [this]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'RangeTooltip',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To get the module name of the widget\n */\n RangeNavigator.prototype.getModuleName = function () {\n return 'rangeNavigator';\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of rangeNavigator\n */\n RangeNavigator.prototype.destroy = function () {\n this.unWireEvents();\n this.rangeSlider.destroy();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-rangenavigator');\n };\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"xName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"yName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"query\", void 0);\n __decorate([\n Collection([], RangeNavigatorSeries)\n ], RangeNavigator.prototype, \"series\", void 0);\n __decorate([\n Complex({}, RangeTooltipSettings)\n ], RangeNavigator.prototype, \"tooltip\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"interval\", void 0);\n __decorate([\n Property('Auto')\n ], RangeNavigator.prototype, \"intervalType\", void 0);\n __decorate([\n Property('Hide')\n ], RangeNavigator.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Property(10)\n ], RangeNavigator.prototype, \"logBase\", void 0);\n __decorate([\n Property('Double')\n ], RangeNavigator.prototype, \"valueType\", void 0);\n __decorate([\n Property('Outside')\n ], RangeNavigator.prototype, \"labelPosition\", void 0);\n __decorate([\n Property(500)\n ], RangeNavigator.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"enableGrouping\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"enableDeferredUpdate\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"disableRangeSelector\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"allowSnapping\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property()\n ], RangeNavigator.prototype, \"groupBy\", void 0);\n __decorate([\n Property('Outside')\n ], RangeNavigator.prototype, \"tickPosition\", void 0);\n __decorate([\n Complex(RangeNavigatorTheme.axisLabelFont, Font)\n ], RangeNavigator.prototype, \"labelStyle\", void 0);\n __decorate([\n Complex({}, MajorGridLines)\n ], RangeNavigator.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, MajorTickLines)\n ], RangeNavigator.prototype, \"majorTickLines\", void 0);\n __decorate([\n Complex({}, StyleSettings)\n ], RangeNavigator.prototype, \"navigatorStyleSettings\", void 0);\n __decorate([\n Complex({}, PeriodSelectorSettings)\n ], RangeNavigator.prototype, \"periodSelectorSettings\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 1 }, Border)\n ], RangeNavigator.prototype, \"navigatorBorder\", void 0);\n __decorate([\n Property('Material')\n ], RangeNavigator.prototype, \"theme\", void 0);\n __decorate([\n Property([])\n ], RangeNavigator.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], RangeNavigator.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('')\n ], RangeNavigator.prototype, \"skeleton\", void 0);\n __decorate([\n Property('DateTime')\n ], RangeNavigator.prototype, \"skeletonType\", void 0);\n __decorate([\n Property('Middle')\n ], RangeNavigator.prototype, \"secondaryLabelAlignment\", void 0);\n __decorate([\n Complex({ top: 5, bottom: 5, right: 5, left: 5 }, Margin)\n ], RangeNavigator.prototype, \"margin\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"resized\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"labelRender\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"selectorRender\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"beforePrint\", void 0);\n RangeNavigator = __decorate([\n NotifyPropertyChanges\n ], RangeNavigator);\n return RangeNavigator;\n}(Component));\nexport { RangeNavigator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_RIGHTOVERLAY = 'e-scroll-right-overlay';\nvar CLS_LEFTOVERLAY = 'e-scroll-left-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n __extends(HScroll, _super);\n /**\n * Initializes a new instance of the HScroll class.\n * @param options - Specifies HScroll model properties as options.\n * @param element - Specifies the element for which horizontal scrolling applies.\n */\n function HScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n HScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var element = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (element.id === '') {\n element.id = getUniqueID('hscroll');\n this.uniqueId = true;\n }\n element.style.display = 'block';\n if (this.enableRtl) {\n element.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlay(this.element);\n }\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetWidth;\n this.customStep = false;\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = this.createElement('div', { className: CLS_HSCROLLCON });\n var scrollDiv = this.createElement('div', { className: CLS_HSCROLLBAR });\n scrollDiv.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollEle.appendChild(ele_1);\n }\n scrollDiv.appendChild(scrollEle);\n ele.appendChild(scrollDiv);\n scrollDiv.style.overflowX = 'hidden';\n this.scrollEle = scrollDiv;\n this.scrollItems = scrollEle;\n };\n HScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n HScroll.prototype.getModuleName = function () {\n return 'hScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n HScroll.prototype.destroy = function () {\n var ele = this.element;\n ele.style.display = '';\n ele.classList.remove(CLS_ROOT);\n ele.classList.remove(CLS_DEVICE);\n var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n var overlay = selectAll('.' + CLS_OVERLAY, ele);\n overlay.forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n ele.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (nav.length > 0) {\n detach(nav[0]);\n if (!isNullOrUndefined(nav[1])) {\n detach(nav[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the HScroll component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, HScroll will be enabled (false) or disabled (true).\n * @returns void.\n */\n HScroll.prototype.disable = function (value) {\n var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n value ? this.element.classList.add(CLS_DISABLE) : this.element.classList.remove(CLS_DISABLE);\n navEles.forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n HScroll.prototype.createOverlay = function (element) {\n var id = element.id.concat('_nav');\n var rightOverlayEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_RIGHTOVERLAY });\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var rightEle = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n rightEle.appendChild(navItem);\n var leftEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_LEFTOVERLAY });\n if (this.ieCheck) {\n rightEle.classList.add('e-ie-align');\n }\n element.appendChild(rightOverlayEle);\n element.appendChild(rightEle);\n element.insertBefore(leftEle, element.firstChild);\n this.eventBinding([rightEle]);\n };\n HScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var nav = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n var navEle = this.createElement('div', { id: id.concat('_left'), className: clsLeft + ' ' + CLS_DISABLE });\n navEle.setAttribute('aria-disabled', 'true');\n var navLeftItem = this.createElement('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navEle.appendChild(navLeftItem);\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n element.insertBefore(navEle, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navEle.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navEle]);\n };\n HScroll.prototype.onKeyPress = function (e) {\n var _this = this;\n if (e.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, e.target, true);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n HScroll.prototype.onKeyUp = function (e) {\n if (e.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n e.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n HScroll.prototype.eventBinding = function (ele) {\n var _this = this;\n ele.forEach(function (el) {\n new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n el.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n });\n };\n HScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n HScroll.prototype.tabHoldHandler = function (e) {\n var _this = this;\n var trgt = e.originalEvent.target;\n trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDis = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDis, trgt, true);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n HScroll.prototype.contains = function (ele, className) {\n return ele.classList.contains(className);\n };\n HScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var element = this.scrollEle;\n var rootEle = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_HSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n scrollDis = -scrollDis;\n }\n var scrlLeft = element.scrollLeft;\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n if (classList.contains(CLS_NAVRIGHTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target, false);\n };\n HScroll.prototype.swipeHandler = function (e) {\n var swipeEle = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceX / (e.velocity * 10);\n }\n else {\n distance = e.distanceX / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Left') {\n swipeEle.scrollLeft += distance * step;\n }\n else if (e.swipeDirection === 'Right') {\n swipeEle.scrollLeft -= distance * step;\n }\n start -= 0.02;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollLeft += scrollVal;\n }\n else {\n this.scrollEle.scrollLeft -= scrollVal;\n }\n };\n HScroll.prototype.frameScrollRequest = function (scrollVal, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollVal, action);\n return;\n }\n if (!this.customStep) {\n selectAll('.' + CLS_OVERLAY, this.element).forEach(function (el) {\n scrollVal -= el.offsetWidth;\n });\n }\n var animate = function () {\n if (scrollVal < step) {\n window.cancelAnimationFrame(step);\n }\n else {\n _this.scrollUpdating(step, action);\n scrollVal -= step;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.touchHandler = function (e) {\n var ele = this.scrollEle;\n var distance;\n distance = e.distanceX;\n if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n distance = -distance;\n }\n if (e.scrollDirection === 'Left') {\n ele.scrollLeft = ele.scrollLeft + distance;\n }\n else if (e.scrollDirection === 'Right') {\n ele.scrollLeft = ele.scrollLeft - distance;\n }\n };\n HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisable) ? removeDisable : addDisable;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisable)) {\n classList(arrowIcon, [CLS_NAVRIGHTARROW], [CLS_NAVLEFTARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVLEFTARROW], [CLS_NAVRIGHTARROW]);\n }\n }\n else {\n addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n HScroll.prototype.scrollHandler = function (e) {\n var target = e.target;\n var width = target.offsetWidth;\n var rootEle = this.element;\n var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n var leftOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n var rightOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n var scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\n }\n if (this.isDevice) {\n if (this.enableRtl && !(this.browserCheck || this.ieCheck)) {\n leftOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n rightOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n }\n if (scrollLeft < OVERLAY_MAXWID) {\n leftOverlay.style.width = scrollLeft + 'px';\n }\n else {\n leftOverlay.style.width = '40px';\n }\n if ((target.scrollWidth - Math.ceil(width + scrollLeft)) < OVERLAY_MAXWID) {\n rightOverlay.style.width = (target.scrollWidth - Math.ceil(width + scrollLeft)) + 'px';\n }\n else {\n rightOverlay.style.width = '40px';\n }\n }\n if (scrollLeft === 0) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n else {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n }\n else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n else {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n * @param {HScrollModel} newProp\n * @param {HScrollModel} oldProp\n * @returns void\n * @private\n */\n HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], HScroll.prototype, \"scrollStep\", void 0);\n HScroll = __decorate([\n NotifyPropertyChanges\n ], HScroll);\n return HScroll;\n}(Component));\nexport { HScroll };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isVisible, closest, attributes, detach, classList, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { selectAll, setStyleAttribute as setStyle } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, getUniqueID, formatUnit, Collection, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Browser } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { HScroll } from '../common/h-scroll';\nvar CLS_ITEMS = 'e-toolbar-items';\nvar CLS_ITEM = 'e-toolbar-item';\nvar CLS_RTL = 'e-rtl';\nvar CLS_SEPARATOR = 'e-separator';\nvar CLS_POPUPICON = 'e-popup-up-icon';\nvar CLS_POPUPDOWN = 'e-popup-down-icon';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_POPUPTEXT = 'e-toolbar-text';\nvar CLS_TBARTEXT = 'e-popup-text';\nvar CLS_TBAROVERFLOW = 'e-overflow-show';\nvar CLS_POPOVERFLOW = 'e-overflow-hide';\nvar CLS_TBARBTN = 'e-tbar-btn';\nvar CLS_TBARNAV = 'e-hor-nav';\nvar CLS_TBARSCRLNAV = 'e-scroll-nav';\nvar CLS_TBARRIGHT = 'e-toolbar-right';\nvar CLS_TBARLEFT = 'e-toolbar-left';\nvar CLS_TBARCENTER = 'e-toolbar-center';\nvar CLS_TBARPOS = 'e-tbar-pos';\nvar CLS_TBARSCROLL = 'e-hscroll-content';\nvar CLS_POPUPNAV = 'e-hor-nav';\nvar CLS_POPUPCLASS = 'e-toolbar-pop';\nvar CLS_POPUP = 'e-toolbar-popup';\nvar CLS_TBARBTNTEXT = 'e-tbar-btn-text';\nvar CLS_TBARNAVACT = 'e-nav-active';\nvar CLS_TBARIGNORE = 'e-ignore';\nvar CLS_POPPRI = 'e-popup-alone';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_MULTIROW = 'e-toolbar-multirow';\nvar CLS_MULTIROW_SEPARATOR = 'e-multirow-separator';\nvar CLS_EXTENDABLE_ITEM = 'e-extended-item';\nvar CLS_EXTENDABLE_SEPARATOR = 'e-extended-separator';\nvar CLS_EXTEANDABLE_TOOLBAR = 'e-extended-toolbar';\nvar CLS_EXTENDABLECLASS = 'e-toolbar-extended';\nvar CLS_EXTENDPOPUP = 'e-expended-nav';\nvar CLS_EXTENDEDPOPOPEN = 'e-tbar-extended';\n/**\n * An item object that is used to configure Toolbar commands.\n */\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], Item.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property('None')\n ], Item.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], Item.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], Item.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], Item.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], Item.prototype, \"align\", void 0);\n __decorate([\n Event()\n ], Item.prototype, \"click\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n/**\n * The Toolbar control contains a group of commands that are aligned horizontally.\n * ```html\n *
\n * \n * ```\n */\nvar Toolbar = /** @class */ (function (_super) {\n __extends(Toolbar, _super);\n /**\n * Initializes a new instance of the Toolbar class.\n * @param options - Specifies Toolbar model properties as options.\n * @param element - Specifies the element that is rendered as a Toolbar.\n */\n function Toolbar(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Contains the keyboard configuration of the Toolbar.\n */\n _this.keyConfigs = {\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n popupOpen: 'enter',\n popupClose: 'escape',\n tab: 'tab',\n home: 'home',\n end: 'end',\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void.\n */\n Toolbar.prototype.destroy = function () {\n var _this = this;\n var ele = this.element;\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n this.tempId.forEach(function (ele) {\n if (!isNOU(_this.element.querySelector(ele))) {\n document.body.appendChild(_this.element.querySelector(ele)).style.display = 'none';\n }\n });\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n if (this.trgtEle) {\n ele.appendChild(this.ctrlTem);\n }\n this.clearProperty();\n this.popObj = null;\n this.tbarAlign = null;\n this.remove(this.element, 'e-toolpop');\n ele.removeAttribute('style');\n ['aria-disabled', 'aria-orientation', 'aria-haspopup', 'role'].forEach(function (attrb) {\n _this.element.removeAttribute(attrb);\n });\n };\n /**\n * Initialize the event handler\n * @private\n */\n Toolbar.prototype.preRender = function () {\n var eventArgs = { enableCollision: true, scrollStep: this.scrollStep };\n this.trigger('beforeCreate', eventArgs);\n this.enableCollision = eventArgs.enableCollision;\n this.scrollStep = eventArgs.scrollStep;\n this.scrollModule = null;\n this.popObj = null;\n this.tempId = [];\n this.tbarItemsCol = this.items;\n this.popupPriCount = 0;\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n window.addEventListener('resize', this.resize.bind(this));\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n EventHandler.add(this.element, 'keydown', this.docKeyDown, this);\n this.element.setAttribute('tabIndex', '0');\n };\n Toolbar.prototype.docKeyDown = function (e) {\n if (e.target.tagName === 'INPUT') {\n return;\n }\n var popCheck = !isNOU(this.popObj) && isVisible(this.popObj.element) && this.overflowMode !== 'Extended';\n if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && popCheck) {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n var keyCheck = (e.keyCode === 40 || e.keyCode === 38 || e.keyCode === 35 || e.keyCode === 36);\n if (keyCheck) {\n e.preventDefault();\n }\n };\n Toolbar.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n this.destroyHScroll();\n this.keyModule.destroy();\n EventHandler.remove(document, 'scroll', this.docEvent);\n EventHandler.remove(this.element, 'keydown', this.docKeyDown);\n EventHandler.remove(document, 'click', this.docEvent);\n };\n Toolbar.prototype.clearProperty = function () {\n this.tbarEle = [];\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n };\n Toolbar.prototype.docEvent = function (e) {\n var popEle = closest(e.target, '.e-popup');\n if (this.popObj && isVisible(this.popObj.element) && !popEle && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n };\n Toolbar.prototype.destroyHScroll = function () {\n if (this.scrollModule) {\n if (this.tbarAlign) {\n this.add(this.scrollModule.element, CLS_TBARPOS);\n }\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Toolbar.prototype.destroyItems = function () {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) {\n detach(el);\n });\n var tbarItems = this.element.querySelector('.' + CLS_ITEMS);\n if (this.tbarAlign) {\n [].slice.call(tbarItems.children).forEach(function (el) {\n detach(el);\n });\n this.tbarAlign = false;\n this.remove(tbarItems, CLS_TBARPOS);\n }\n this.clearProperty();\n };\n Toolbar.prototype.destroyMode = function () {\n if (this.scrollModule) {\n this.remove(this.scrollModule.element, CLS_RTL);\n this.destroyHScroll();\n }\n this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n if (this.popObj) {\n this.popupRefresh(this.popObj.element, true);\n }\n };\n Toolbar.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Toolbar.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n Toolbar.prototype.elementFocus = function (ele) {\n var fChild = ele.firstElementChild;\n if (fChild) {\n fChild.focus();\n this.activeEleSwitch(ele);\n }\n else {\n ele.focus();\n }\n };\n Toolbar.prototype.clstElement = function (tbrNavChk, trgt) {\n var clst;\n if (tbrNavChk && this.popObj && isVisible(this.popObj.element)) {\n clst = this.popObj.element.querySelector('.' + CLS_ITEM);\n }\n else if (this.element === trgt || tbrNavChk) {\n clst = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' )');\n }\n else {\n clst = closest(trgt, '.' + CLS_ITEM);\n }\n return clst;\n };\n Toolbar.prototype.keyHandling = function (clst, e, trgt, navChk, scrollChk) {\n var popObj = this.popObj;\n var rootEle = this.element;\n var popAnimate = { name: 'FadeOut', duration: 100 };\n switch (e.action) {\n case 'moveRight':\n if (rootEle === trgt) {\n this.elementFocus(clst);\n }\n else if (!navChk) {\n this.eleFocus(clst, 'next');\n }\n break;\n case 'moveLeft':\n if (!navChk) {\n this.eleFocus(clst, 'previous');\n }\n break;\n case 'home':\n case 'end':\n var ele = void 0;\n var nodes = void 0;\n if (clst) {\n var popupCheck = closest(clst, '.e-popup');\n if (popupCheck) {\n if (isVisible(this.popObj.element)) {\n nodes = [].slice.call(popupCheck.children);\n if (e.action === 'home') {\n ele = nodes[0];\n }\n else {\n ele = nodes[nodes.length - 1];\n }\n }\n }\n else {\n nodes = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM);\n if (e.action === 'home') {\n ele = nodes[0];\n }\n else {\n ele = nodes[nodes.length - 1];\n }\n }\n if (ele) {\n this.elementFocus(ele);\n }\n }\n break;\n case 'moveUp':\n case 'moveDown':\n var value = e.action === 'moveUp' ? 'previous' : 'next';\n if (popObj && closest(trgt, '.e-popup')) {\n var popEle = popObj.element;\n var popFrstEle = popEle.firstElementChild;\n if ((value === 'previous' && popFrstEle === clst) || (value === 'next' && popEle.lastElementChild === clst)) {\n return;\n }\n else {\n this.eleFocus(clst, value);\n }\n }\n else if (e.action === 'moveDown' && popObj && isVisible(popObj.element)) {\n this.elementFocus(clst);\n }\n break;\n case 'tab':\n if (!scrollChk && !navChk) {\n var ele_1 = clst.firstElementChild;\n if (rootEle === trgt) {\n if (this.activeEle) {\n this.activeEle.focus();\n }\n else {\n this.activeEleRemove(ele_1);\n ele_1.focus();\n }\n this.element.removeAttribute('tabindex');\n }\n }\n break;\n case 'popupClose':\n if (popObj && this.overflowMode !== 'Extended') {\n popObj.hide(popAnimate);\n }\n break;\n case 'popupOpen':\n if (!navChk) {\n return;\n }\n if (popObj && !isVisible(popObj.element)) {\n popObj.element.style.top = rootEle.offsetHeight + 'px';\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n else {\n popObj.hide(popAnimate);\n }\n break;\n }\n };\n Toolbar.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n if (trgt.tagName === 'INPUT' || trgt.tagName === 'TEXTAREA' || this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n e.preventDefault();\n var clst;\n var tbrNavChk = trgt.classList.contains(CLS_TBARNAV);\n var tbarScrollChk = trgt.classList.contains(CLS_TBARSCRLNAV);\n clst = this.clstElement(tbrNavChk, trgt);\n if (clst || tbarScrollChk) {\n this.keyHandling(clst, e, trgt, tbrNavChk, tbarScrollChk);\n }\n };\n /**\n * Specifies the value to disable/enable the Toolbar component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, Toolbar will be enabled (false) or disabled (true).\n * @returns void.\n */\n Toolbar.prototype.disable = function (value) {\n var rootEle = this.element;\n value ? rootEle.classList.add(CLS_DISABLE) : rootEle.classList.remove(CLS_DISABLE);\n rootEle.setAttribute('tabindex', !value ? '0' : '-1');\n if (this.activeEle) {\n this.activeEle.setAttribute('tabindex', !value ? '0' : '-1');\n }\n if (this.scrollModule) {\n this.scrollModule.disable(value);\n }\n if (this.popObj) {\n if (isVisible(this.popObj.element) && this.overflowMode !== 'Extended') {\n this.popObj.hide();\n }\n rootEle.querySelector('#' + rootEle.id + '_nav').setAttribute('tabindex', !value ? '0' : '-1');\n }\n };\n Toolbar.prototype.eleFocus = function (closest, pos) {\n var sib = Object(closest)[pos + 'ElementSibling'];\n var contains = function (el) {\n return el.classList.contains(CLS_SEPARATOR) || el.classList.contains(CLS_DISABLE);\n };\n if (sib) {\n var skipEle = contains(sib);\n if (skipEle) {\n if (Object(sib)[pos + 'ElementSibling']) {\n sib = Object(sib)[pos + 'ElementSibling'];\n skipEle = contains(sib);\n if (skipEle) {\n this.eleFocus(sib, pos);\n return;\n }\n }\n else {\n return;\n }\n }\n this.elementFocus(sib);\n }\n else if (this.tbarAlign) {\n var elem = Object(closest.parentElement)[pos + 'ElementSibling'];\n if (!isNOU(elem) && elem.children.length === 0) {\n elem = Object(elem)[pos + 'ElementSibling'];\n }\n if (!isNOU(elem) && elem.children.length > 0) {\n if (pos === 'next') {\n var el = elem.querySelector('.' + CLS_ITEM);\n if (contains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n el.firstElementChild.focus();\n this.activeEleSwitch(el);\n }\n }\n else {\n var el = elem.lastElementChild;\n if (contains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n this.elementFocus(el);\n }\n }\n }\n }\n };\n Toolbar.prototype.clickHandler = function (e) {\n var trgt = e.target;\n var clsList = trgt.classList;\n var ele = this.element;\n var isPopupElement = !isNOU(closest(trgt, '.' + CLS_POPUPCLASS));\n var popupNav = closest(trgt, ('.' + CLS_TBARNAV));\n if (!popupNav) {\n popupNav = trgt;\n }\n if (!ele.children[0].classList.contains('e-hscroll') && (clsList.contains(CLS_TBARNAV))) {\n clsList = trgt.querySelector('.e-icons').classList;\n }\n if (clsList.contains(CLS_POPUPICON) || clsList.contains(CLS_POPUPDOWN)) {\n this.popupClickHandler(ele, popupNav, CLS_RTL);\n }\n var itemObj;\n var clst = closest(e.target, '.' + CLS_ITEM);\n if ((isNOU(clst) || clst.classList.contains(CLS_DISABLE)) && !popupNav.classList.contains(CLS_TBARNAV)) {\n return;\n }\n if (clst) {\n itemObj = this.items[this.tbarEle.indexOf(clst)];\n }\n var eventArgs = { originalEvent: e, item: itemObj };\n if (itemObj && !isNOU(itemObj.click)) {\n this.trigger('items[' + this.tbarEle.indexOf(clst) + '].click', eventArgs);\n }\n if (!eventArgs.cancel) {\n this.trigger('clicked', eventArgs);\n }\n if (!isNOU(this.popObj) && isPopupElement && !eventArgs.cancel && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n };\n ;\n Toolbar.prototype.popupClickHandler = function (ele, popupNav, CLS_RTL) {\n var popObj = this.popObj;\n if (isVisible(popObj.element)) {\n popupNav.classList.remove(CLS_TBARNAVACT);\n popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n else {\n if (ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = true;\n popObj.position = { X: 'left', Y: 'top' };\n }\n if (popObj.offsetX === 0 && !ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = false;\n popObj.position = { X: 'right', Y: 'top' };\n }\n popObj.dataBind();\n popObj.refreshPosition();\n popObj.element.style.top = this.getElementOffsetY() + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '0px';\n }\n popupNav.classList.add(CLS_TBARNAVACT);\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Toolbar.prototype.render = function () {\n this.initialize();\n this.renderControl();\n this.separator();\n this.wireEvents();\n };\n Toolbar.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n if (Browser.info.name !== 'msie' || this.height !== 'auto' || this.overflowMode === 'MultiRow') {\n setStyle(this.element, { 'height': height });\n }\n setStyle(this.element, { 'width': width });\n var ariaAttr = {\n 'role': 'toolbar', 'aria-disabled': 'false', 'aria-haspopup': 'false', 'aria-orientation': 'horizontal',\n };\n attributes(this.element, ariaAttr);\n };\n Toolbar.prototype.renderControl = function () {\n this.trgtEle = (this.element.children.length > 0) ? this.element.querySelector('div') : null;\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n this.renderItems();\n this.renderOverflowMode();\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.popObj.element.childElementCount > 1 && this.checkPopupRefresh(this.element, this.popObj.element)) {\n this.popupRefresh(this.popObj.element, false);\n }\n };\n Toolbar.prototype.initHScroll = function (element, innerItems) {\n if (!this.scrollModule && this.checkOverflow(element, innerItems[0])) {\n if (this.tbarAlign) {\n this.element.querySelector('.' + CLS_ITEMS + ' .' + CLS_TBARCENTER).removeAttribute('style');\n }\n this.scrollModule = new HScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl });\n this.scrollModule.createElement = this.createElement;\n this.scrollModule.appendTo(innerItems[0]);\n this.remove(this.scrollModule.element, CLS_TBARPOS);\n setStyle(this.element, { overflow: 'hidden' });\n }\n };\n Toolbar.prototype.itemWidthCal = function (items) {\n var width = 0;\n var style;\n [].slice.call(selectAll('.' + CLS_ITEM, items)).forEach(function (el) {\n if (isVisible(el)) {\n style = window.getComputedStyle(el);\n width += (el.offsetWidth + parseFloat(style.marginRight) + parseFloat(style.marginLeft));\n }\n });\n return width;\n };\n Toolbar.prototype.checkOverflow = function (element, innerItem) {\n if (isNOU(element) || isNOU(innerItem) || !isVisible(element)) {\n return false;\n }\n var eleWidth = element.offsetWidth;\n var itemWidth = innerItem.offsetWidth;\n if (this.tbarAlign || this.scrollModule || (eleWidth === itemWidth)) {\n itemWidth = this.itemWidthCal(this.scrollModule ? innerItem.querySelector('.e-hscroll-content') : innerItem);\n }\n var popNav = element.querySelector('.' + CLS_TBARNAV);\n var scrollNav = element.querySelector('.' + CLS_TBARSCRLNAV);\n if (itemWidth > eleWidth - (popNav ? popNav.offsetWidth : (scrollNav ? scrollNav.offsetWidth * 2 : 0))) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Refresh the whole Toolbar component without re-rendering.\n * @returns void.\n */\n Toolbar.prototype.refreshOverflow = function () {\n this.resize();\n };\n Toolbar.prototype.renderOverflowMode = function () {\n var ele = this.element;\n var innerItems = ele.querySelector('.' + CLS_ITEMS);\n var priorityCheck = this.popupPriCount > 0;\n if (ele && ele.children.length > 0) {\n this.offsetWid = ele.offsetWidth;\n this.remove(this.element, 'e-toolpop');\n if (Browser.info.name === 'msie' && this.height === 'auto') {\n ele.style.height = '';\n }\n switch (this.overflowMode) {\n case 'Scrollable':\n if (isNOU(this.scrollModule)) {\n this.initHScroll(ele, ele.getElementsByClassName(CLS_ITEMS));\n }\n break;\n case 'Popup':\n this.add(this.element, 'e-toolpop');\n if (this.tbarAlign) {\n this.removePositioning();\n }\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n this.element.querySelector('.' + CLS_TBARNAV).setAttribute('tabIndex', '0');\n }\n if (this.tbarAlign) {\n this.add(innerItems, CLS_TBARPOS);\n this.itemPositioning();\n }\n break;\n case 'MultiRow':\n this.add(innerItems, CLS_MULTIROW);\n if (ele.style.overflow === 'hidden') {\n ele.style.overflow = '';\n }\n if (Browser.info.name === 'msie' || ele.style.height !== 'auto') {\n ele.style.height = 'auto';\n }\n break;\n case 'Extended':\n this.add(this.element, CLS_EXTEANDABLE_TOOLBAR);\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n this.element.querySelector('.' + CLS_TBARNAV).setAttribute('tabIndex', '0');\n }\n }\n }\n };\n Toolbar.prototype.separator = function () {\n var element = this.element;\n var eleItem = [].slice.call(element.querySelectorAll('.' + CLS_SEPARATOR));\n var eleInlineItem;\n var multiVar = element.querySelector('.' + CLS_MULTIROW_SEPARATOR);\n var extendVar = element.querySelector('.' + CLS_EXTENDABLE_SEPARATOR);\n eleInlineItem = this.overflowMode === 'MultiRow' ? multiVar : extendVar;\n if (eleInlineItem !== null) {\n if (this.overflowMode === 'MultiRow') {\n eleInlineItem.classList.remove(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleInlineItem.classList.remove(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n for (var i = 0; i <= eleItem.length - 1; i++) {\n if (eleItem[i].offsetLeft < 30 && eleItem[i].offsetLeft !== 0) {\n if (this.overflowMode === 'MultiRow') {\n eleItem[i].classList.add(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleItem[i].classList.add(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n }\n };\n Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n if (!innerNav) {\n this.createPopupIcon(ele);\n }\n innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var eleWidth = (ele.offsetWidth - (innerNav.offsetWidth));\n this.element.classList.remove('e-rtl');\n setStyle(this.element, { direction: 'initial' });\n this.checkPriority(ele, innerEle, eleWidth, true);\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n this.element.style.removeProperty('direction');\n this.createPopup();\n };\n Toolbar.prototype.pushingPoppedEle = function (tbarObj, popupPri, ele, eleHeight, sepHeight) {\n var element = tbarObj.element;\n var nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n var nodeIndex = 0;\n var poppedEle = [].slice.call(selectAll('.' + CLS_POPUP, element.querySelector('.' + CLS_ITEMS)));\n var nodePri = 0;\n poppedEle.forEach(function (el, index) {\n nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n if (el.classList.contains(CLS_TBAROVERFLOW) && nodes.length > 0) {\n if (tbarObj.tbResize && nodes.length > index) {\n ele.insertBefore(el, nodes[index]);\n ++nodePri;\n }\n else {\n ele.insertBefore(el, ele.children[nodes.length]);\n ++nodePri;\n }\n }\n else if (el.classList.contains(CLS_TBAROVERFLOW)) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (tbarObj.tbResize && el.classList.contains(CLS_POPOVERFLOW) && ele.children.length > 0 && nodes.length === 0) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (el.classList.contains(CLS_POPOVERFLOW)) {\n popupPri.push(el);\n }\n else if (tbarObj.tbResize) {\n ele.insertBefore(el, ele.childNodes[nodeIndex + nodePri]);\n ++nodeIndex;\n }\n else {\n ele.appendChild(el);\n }\n if (el.classList.contains(CLS_SEPARATOR)) {\n setStyle(el, { display: '', height: sepHeight + 'px' });\n }\n else {\n setStyle(el, { display: '', height: eleHeight + 'px' });\n }\n });\n popupPri.forEach(function (el) {\n ele.appendChild(el);\n });\n var tbarEle = selectAll('.' + CLS_ITEM, element.querySelector('.' + CLS_ITEMS));\n for (var i = tbarEle.length - 1; i >= 0; i--) {\n var tbarElement = tbarEle[i];\n if (tbarElement.classList.contains(CLS_SEPARATOR) && this.overflowMode !== 'Extended') {\n setStyle(tbarElement, { display: 'none' });\n }\n else {\n break;\n }\n }\n };\n Toolbar.prototype.createPopup = function () {\n var element = this.element;\n var eleHeight;\n var eleItem;\n var sepHeight;\n var sepItem;\n if (this.overflowMode === 'Extended') {\n sepItem = element.querySelector('.' + CLS_SEPARATOR + ':not(.' + CLS_POPUP + ' )');\n sepHeight = (element.style.height === 'auto' || element.style.height === '') ? null : sepItem.offsetHeight;\n }\n eleItem = element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_POPUP + ' )');\n eleHeight = (element.style.height === 'auto' || element.style.height === '') ? null : eleItem.offsetHeight;\n var ele;\n var popupPri = [];\n if (element.querySelector('#' + element.id + '_popup.' + CLS_POPUPCLASS)) {\n ele = element.querySelector('#' + element.id + '_popup.' + CLS_POPUPCLASS);\n }\n else {\n var extendEle = this.createElement('div', {\n id: element.id + '_popup', className: CLS_POPUPCLASS + ' ' + CLS_EXTENDABLECLASS\n });\n var popupEle = this.createElement('div', { id: element.id + '_popup', className: CLS_POPUPCLASS });\n ele = this.overflowMode === 'Extended' ? extendEle : popupEle;\n }\n this.pushingPoppedEle(this, popupPri, ele, eleHeight, sepHeight);\n this.popupInit(element, ele);\n };\n Toolbar.prototype.getElementOffsetY = function () {\n return (this.overflowMode === 'Extended' && window.getComputedStyle(this.element).getPropertyValue('box-sizing') === 'border-box' ?\n this.element.clientHeight : this.element.offsetHeight);\n };\n Toolbar.prototype.popupInit = function (element, ele) {\n if (!this.popObj) {\n element.appendChild(ele);\n setStyle(this.element, { overflow: '' });\n var eleStyles = window.getComputedStyle(this.element);\n var popup = new Popup(null, {\n relateTo: this.element,\n offsetY: this.getElementOffsetY(),\n enableRtl: this.enableRtl,\n open: this.popupOpen.bind(this),\n close: this.popupClose.bind(this),\n collision: { Y: this.enableCollision ? 'flip' : 'none' },\n position: this.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }\n });\n popup.appendTo(ele);\n if (this.overflowMode === 'Extended') {\n popup.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n popup.offsetX = 0;\n }\n EventHandler.add(document, 'scroll', this.docEvent.bind(this));\n EventHandler.add(document, 'click ', this.docEvent.bind(this));\n popup.element.style.maxHeight = popup.element.offsetHeight + 'px';\n popup.hide();\n this.popObj = popup;\n this.element.setAttribute('aria-haspopup', 'true');\n }\n else {\n var popupEle = this.popObj.element;\n setStyle(popupEle, { maxHeight: '', display: 'block' });\n setStyle(popupEle, { maxHeight: popupEle.offsetHeight + 'px', display: '' });\n }\n };\n Toolbar.prototype.tbarPopupHandler = function (isOpen) {\n if (this.overflowMode === 'Extended') {\n isOpen ? this.add(this.element, CLS_EXTENDEDPOPOPEN) : this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n }\n };\n Toolbar.prototype.popupOpen = function (e) {\n var popObj = this.popObj;\n popObj.offsetY = this.getElementOffsetY();\n popObj.dataBind();\n var popupEle = this.popObj.element;\n var toolEle = this.popObj.element.parentElement;\n var popupNav = toolEle.querySelector('.' + CLS_TBARNAV);\n setStyle(popObj.element, { height: 'auto', maxHeight: '' });\n popObj.element.style.maxHeight = popObj.element.offsetHeight + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '';\n }\n var popupElePos = popupEle.offsetTop + popupEle.offsetHeight + calculatePosition(toolEle).top;\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n this.tbarPopupHandler(true);\n var scrollVal = isNOU(window.scrollY) ? 0 : window.scrollY;\n if (((window.innerHeight + scrollVal) < popupElePos) && (this.element.offsetTop < popupEle.offsetHeight)) {\n var overflowHeight = (popupEle.offsetHeight - ((popupElePos - window.innerHeight - scrollVal) + 5));\n popObj.height = overflowHeight + 'px';\n for (var i = 0; i <= popupEle.childElementCount; i++) {\n var ele = popupEle.children[i];\n if (ele.offsetTop + ele.offsetHeight > overflowHeight) {\n overflowHeight = ele.offsetTop;\n break;\n }\n }\n setStyle(popObj.element, { maxHeight: overflowHeight + 'px' });\n }\n };\n Toolbar.prototype.popupClose = function (e) {\n var element = this.element;\n var popupNav = element.querySelector('.' + CLS_TBARNAV);\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.remove(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPDOWN], [CLS_POPUPICON]);\n this.tbarPopupHandler(false);\n };\n Toolbar.prototype.checkPriority = function (ele, inEle, eleWidth, pre) {\n var popPriority = this.popupPriCount > 0;\n var len = inEle.length;\n var eleWid = eleWidth;\n var sepCheck = 0;\n var itemCount = 0;\n var itemPopCount = 0;\n var checkClass = function (ele, val) {\n var rVal = false;\n val.forEach(function (cls) {\n if (ele.classList.contains(cls)) {\n rVal = true;\n }\n });\n return rVal;\n };\n for (var i = len - 1; i >= 0; i--) {\n var mrgn = parseFloat((window.getComputedStyle(inEle[i])).marginRight);\n mrgn += parseFloat((window.getComputedStyle(inEle[i])).marginLeft);\n var fstEleCheck = inEle[i] === this.tbarEle[0];\n if (fstEleCheck) {\n this.tbarEleMrgn = mrgn;\n }\n var eleWid_1 = fstEleCheck ? (inEle[i].offsetWidth + mrgn) : inEle[i].offsetWidth;\n if (checkClass(inEle[i], [CLS_POPPRI]) && popPriority) {\n inEle[i].classList.add(CLS_POPUP);\n setStyle(inEle[i], { display: 'none', minWidth: eleWid_1 + 'px' });\n itemPopCount++;\n }\n if ((inEle[i].offsetLeft + inEle[i].offsetWidth + mrgn) > eleWidth) {\n if (inEle[i].classList.contains(CLS_SEPARATOR)) {\n if (this.overflowMode === 'Extended') {\n if (itemCount === itemPopCount) {\n var sepEle = inEle[i];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[i].classList.add(CLS_POPUP);\n itemPopCount++;\n }\n }\n itemCount++;\n }\n else if (this.overflowMode === 'Popup') {\n if (sepCheck > 0 && itemCount === itemPopCount) {\n var sepEle = inEle[i + itemCount + (sepCheck - 1)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n setStyle(sepEle, { display: 'none' });\n }\n }\n sepCheck++;\n itemCount = 0;\n itemPopCount = 0;\n }\n }\n else {\n itemCount++;\n }\n if (inEle[i].classList.contains(CLS_TBAROVERFLOW) && pre) {\n eleWidth -= (inEle[i].offsetWidth + (mrgn));\n }\n else if (!checkClass(inEle[i], [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[i].classList.add(CLS_POPUP);\n setStyle(inEle[i], { display: 'none', minWidth: eleWid_1 + 'px' });\n itemPopCount++;\n }\n else {\n eleWidth -= (inEle[i].offsetWidth + (mrgn));\n }\n }\n }\n if (pre) {\n var popedEle = selectAll('.' + CLS_ITEM + ':not(.' + CLS_POPUP + ')', this.element);\n this.checkPriority(ele, popedEle, eleWid, false);\n }\n };\n Toolbar.prototype.createPopupIcon = function (element) {\n var id = element.id.concat('_nav');\n var className = 'e-' + element.id.concat('_nav ' + CLS_POPUPNAV);\n className = this.overflowMode === 'Extended' ? className + ' ' + CLS_EXTENDPOPUP : className;\n var nav = this.createElement('div', { id: id, className: className });\n if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n nav.classList.add('e-ie-align');\n }\n var navItem = this.createElement('div', { className: CLS_POPUPDOWN + ' e-icons' });\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n };\n Toolbar.prototype.tbarPriRef = function (inEle, indx, sepPri, el, des, elWid, wid, ig) {\n var ignoreCount = ig;\n var popEle = this.popObj.element;\n var query = '.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_TBAROVERFLOW + ')';\n var priEleCnt = selectAll('.' + CLS_POPUP + ':not(.' + CLS_TBAROVERFLOW + ')', popEle).length;\n var checkClass = function (ele, val) {\n return ele.classList.contains(val);\n };\n if (selectAll(query, inEle).length === 0) {\n var eleSep = inEle.children[indx - (indx - sepPri) - 1];\n var ignoreCheck = (!isNOU(eleSep) && checkClass(eleSep, CLS_TBARIGNORE));\n if ((!isNOU(eleSep) && checkClass(eleSep, CLS_SEPARATOR) && !isVisible(eleSep)) || ignoreCheck) {\n var sepDisplay = 'none';\n eleSep.style.display = 'inherit';\n var eleSepWidth = eleSep.offsetWidth + (parseFloat(window.getComputedStyle(eleSep).marginRight) * 2);\n var prevSep = eleSep.previousElementSibling;\n if ((elWid + eleSepWidth) < wid || des) {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n if (!isNOU(prevSep)) {\n prevSep.style.display = '';\n }\n }\n else {\n if (prevSep.classList.contains(CLS_SEPARATOR)) {\n prevSep.style.display = sepDisplay;\n }\n }\n eleSep.style.display = '';\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n }\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - priEleCnt]);\n }\n };\n Toolbar.prototype.popupRefresh = function (popupEle, destroy) {\n var _this = this;\n var ele = this.element;\n var popNav = ele.querySelector('.' + CLS_TBARNAV);\n var innerEle = ele.querySelector('.' + CLS_ITEMS);\n if (isNOU(popNav)) {\n return;\n }\n innerEle.removeAttribute('style');\n popupEle.style.display = 'block';\n var width = ele.offsetWidth - (popNav.offsetWidth + innerEle.offsetWidth);\n var popupEleWidth = 0;\n [].slice.call(popupEle.children).forEach(function (el) {\n popupEleWidth += _this.popupEleWidth(el);\n setStyle(el, { 'position': '' });\n });\n if ((width + popNav.offsetWidth) > (popupEleWidth) && this.popupPriCount === 0) {\n destroy = true;\n }\n this.popupEleRefresh(width, popupEle, destroy);\n popupEle.style.display = '';\n if (popupEle.children.length === 0 && popNav && this.popObj) {\n detach(popNav);\n popNav = null;\n this.popObj.destroy();\n detach(this.popObj.element);\n this.popObj = null;\n ele.setAttribute('aria-haspopup', 'false');\n ele.classList.remove('e-toolpop');\n }\n };\n Toolbar.prototype.ignoreEleFetch = function (index, innerEle) {\n var ignoreEle = [].slice.call(innerEle.querySelectorAll('.' + CLS_TBARIGNORE));\n var ignoreInx = [];\n var count = 0;\n if (ignoreEle.length > 0) {\n ignoreEle.forEach(function (ele) {\n ignoreInx.push([].slice.call(innerEle.children).indexOf(ele));\n });\n }\n else {\n return 0;\n }\n ignoreInx.forEach(function (val) {\n if (val <= index) {\n count++;\n }\n });\n return count;\n };\n Toolbar.prototype.checkPopupRefresh = function (root, popEle) {\n popEle.style.display = 'block';\n var elWid = this.popupEleWidth(popEle.firstElementChild);\n popEle.firstElementChild.style.removeProperty('Position');\n var tbarWidth = root.offsetWidth - root.querySelector('.' + CLS_TBARNAV).offsetWidth;\n var tbarItemsWid = root.querySelector('.' + CLS_ITEMS).offsetWidth;\n popEle.style.removeProperty('display');\n if (tbarWidth > (elWid + tbarItemsWid)) {\n return true;\n }\n return false;\n };\n Toolbar.prototype.popupEleWidth = function (el) {\n el.style.position = 'absolute';\n var elWidth = el.offsetWidth;\n var btnText = el.querySelector('.' + CLS_TBARBTNTEXT);\n if (el.classList.contains('e-tbtn-align') || el.classList.contains(CLS_TBARTEXT)) {\n var btn = el.children[0];\n if (!isNOU(btnText) && el.classList.contains(CLS_TBARTEXT)) {\n btnText.style.display = 'none';\n }\n else if (!isNOU(btnText) && el.classList.contains(CLS_POPUPTEXT)) {\n btnText.style.display = 'block';\n }\n btn.style.minWidth = '0%';\n elWidth = parseFloat(el.style.minWidth);\n btn.style.minWidth = '';\n if (!isNOU(btnText)) {\n btnText.style.display = '';\n }\n }\n return elWidth;\n };\n Toolbar.prototype.popupEleRefresh = function (width, popupEle, destroy) {\n var popPriority = this.popupPriCount > 0;\n var eleSplice = this.tbarEle;\n var priEleCnt;\n var index;\n var checkOverflow;\n var innerEle = this.element.querySelector('.' + CLS_ITEMS);\n var ignoreCount = 0;\n var _loop_1 = function (el) {\n if (el.classList.contains(CLS_POPPRI) && popPriority && !destroy) {\n return \"continue\";\n }\n var elWidth = this_1.popupEleWidth(el);\n if (el === this_1.tbarEle[0]) {\n elWidth += this_1.tbarEleMrgn;\n }\n el.style.position = '';\n if (elWidth < width || destroy) {\n el.style.minWidth = '';\n if (!el.classList.contains(CLS_POPOVERFLOW)) {\n el.classList.remove(CLS_POPUP);\n }\n index = this_1.tbarEle.indexOf(el);\n if (this_1.tbarAlign) {\n var pos = this_1.items[index].align;\n index = this_1.tbarAlgEle[(pos + 's').toLowerCase()].indexOf(el);\n eleSplice = this_1.tbarAlgEle[(pos + 's').toLowerCase()];\n innerEle = this_1.element.querySelector('.' + CLS_ITEMS + ' .' + 'e-toolbar-' + pos.toLowerCase());\n }\n var sepBeforePri_1 = 0;\n if (this_1.overflowMode !== 'Extended') {\n eleSplice.slice(0, index).forEach(function (el) {\n if (el.classList.contains(CLS_TBAROVERFLOW) || el.classList.contains(CLS_SEPARATOR)) {\n if (el.classList.contains(CLS_SEPARATOR)) {\n el.style.display = '';\n width -= el.offsetWidth;\n }\n sepBeforePri_1++;\n }\n });\n }\n ignoreCount = this_1.ignoreEleFetch(index, innerEle);\n if (el.classList.contains(CLS_TBAROVERFLOW)) {\n this_1.tbarPriRef(innerEle, index, sepBeforePri_1, el, destroy, elWidth, width, ignoreCount);\n width -= el.offsetWidth;\n }\n else if (index === 0) {\n innerEle.insertBefore(el, innerEle.firstChild);\n width -= el.offsetWidth;\n }\n else {\n priEleCnt = selectAll('.' + CLS_TBAROVERFLOW, this_1.popObj.element).length;\n innerEle.insertBefore(el, innerEle.children[(index + ignoreCount) - priEleCnt]);\n width -= el.offsetWidth;\n }\n el.style.height = '';\n }\n else {\n return \"break\";\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = [].slice.call(popupEle.children); _i < _a.length; _i++) {\n var el = _a[_i];\n var state_1 = _loop_1(el);\n if (state_1 === \"break\")\n break;\n }\n checkOverflow = this.checkOverflow(this.element, this.element.getElementsByClassName(CLS_ITEMS)[0]);\n if (checkOverflow && !destroy) {\n this.renderOverflowMode();\n }\n };\n Toolbar.prototype.removePositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n this.remove(item, CLS_TBARPOS);\n var innerItem = [].slice.call(item.childNodes);\n innerItem[1].removeAttribute('style');\n innerItem[2].removeAttribute('style');\n };\n Toolbar.prototype.refreshPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n this.add(item, CLS_TBARPOS);\n this.itemPositioning();\n };\n Toolbar.prototype.itemPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n var innerItem;\n if (this.scrollModule) {\n innerItem = [].slice.call(item.querySelector('.' + CLS_TBARSCROLL).children);\n }\n else {\n innerItem = [].slice.call(item.childNodes);\n }\n var margin = innerItem[0].offsetWidth + innerItem[2].offsetWidth;\n var tbarWid = this.element.offsetWidth;\n if (popupNav) {\n tbarWid -= popupNav.offsetWidth;\n var popWid = popupNav.offsetWidth + 'px';\n innerItem[2].removeAttribute('style');\n this.enableRtl ? innerItem[2].style.left = popWid : innerItem[2].style.right = popWid;\n }\n if (tbarWid <= margin) {\n return;\n }\n var value = (((tbarWid - margin)) - innerItem[1].offsetWidth) / 2;\n innerItem[1].removeAttribute('style');\n var mrgn = (innerItem[0].offsetWidth + value) + 'px';\n this.enableRtl ? innerItem[1].style.marginRight = mrgn : innerItem[1].style.marginLeft = mrgn;\n };\n Toolbar.prototype.tbarItemAlign = function (item, itemEle, pos) {\n var _this = this;\n if (item.showAlwaysInPopup && item.overflow !== 'Show') {\n return;\n }\n var alignDiv = [];\n alignDiv.push(this.createElement('div', { className: CLS_TBARLEFT }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARCENTER }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARRIGHT }));\n if (pos === 0 && item.align !== 'Left') {\n alignDiv.forEach(function (ele) {\n itemEle.appendChild(ele);\n });\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n else if (item.align !== 'Left') {\n var alignEle = itemEle.childNodes;\n var leftAlign_1 = alignDiv[0];\n [].slice.call(alignEle).forEach(function (el) {\n _this.tbarAlgEle.lefts.push(el);\n leftAlign_1.appendChild(el);\n });\n itemEle.appendChild(leftAlign_1);\n itemEle.appendChild(alignDiv[1]);\n itemEle.appendChild(alignDiv[2]);\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n };\n Toolbar.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.trgtEle.cloneNode(true);\n this.add(this.trgtEle, CLS_ITEMS);\n this.tbarEle = [];\n var innerEle = [].slice.call(this.trgtEle.children);\n innerEle.forEach(function (ele) {\n if (ele.tagName === 'DIV') {\n _this.tbarEle.push(ele);\n ele.setAttribute('aria-disabled', 'false');\n _this.add(ele, CLS_ITEM);\n }\n });\n };\n Toolbar.prototype.renderItems = function () {\n var ele = this.element;\n var itemEleDom;\n var innerItem;\n var innerPos;\n var items = this.items;\n if (ele && ele.children.length > 0) {\n itemEleDom = ele.querySelector('.' + CLS_ITEMS);\n }\n if (this.trgtEle != null) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n if (!itemEleDom) {\n itemEleDom = this.createElement('div', { className: CLS_ITEMS });\n }\n for (var i = 0; i < items.length; i++) {\n innerItem = this.renderSubComponent(items[i], i);\n if (this.tbarEle.indexOf(innerItem) === -1) {\n this.tbarEle.push(innerItem);\n }\n if (!this.tbarAlign) {\n this.tbarItemAlign(items[i], itemEleDom, i);\n }\n innerPos = itemEleDom.querySelector('.e-toolbar-' + items[i].align.toLowerCase());\n if (innerPos) {\n if (!(items[i].showAlwaysInPopup && items[i].overflow !== 'Show')) {\n this.tbarAlgEle[(items[i].align + 's').toLowerCase()].push(innerItem);\n }\n innerPos.appendChild(innerItem);\n }\n else {\n itemEleDom.appendChild(innerItem);\n }\n }\n ele.appendChild(itemEleDom);\n }\n };\n Toolbar.prototype.setAttr = function (attr, element) {\n var key = Object.keys(attr);\n var keyVal;\n for (var i = 0; i < key.length; i++) {\n keyVal = key[i];\n keyVal === 'class' ? this.add(element, attr[keyVal]) : element.setAttribute(keyVal, attr[keyVal]);\n }\n };\n /**\n * Enables or disables the specified Toolbar item.\n * @param {HTMLElement|NodeList} items - DOM element or an array of items to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the command should be enabled or disabled.\n * By default, `isEnable` is set to true.\n * @returns void.\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n var elements = items;\n var len = elements.length;\n if (isNOU(isEnable)) {\n isEnable = true;\n }\n var enable = function (isEnable, ele) {\n if (isEnable) {\n ele.classList.remove(CLS_DISABLE);\n ele.setAttribute('aria-disabled', 'false');\n }\n else {\n ele.classList.add(CLS_DISABLE);\n ele.setAttribute('aria-disabled', 'true');\n }\n };\n if (len && len > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n enable(isEnable, ele);\n }\n isEnable ? removeClass(elements, CLS_DISABLE) : addClass(elements, CLS_DISABLE);\n }\n else {\n var ele = void 0;\n ele = (len && len === 1) ? elements[0] : items;\n enable(isEnable, ele);\n }\n };\n /**\n * Adds new items to the Toolbar that accepts an array as Toolbar items.\n * @param {ItemsModel[]} items - DOM element or an array of items to be added to the Toolbar.\n * @param {number} index - Number value that determines where the command is to be added. By default, index is 0.\n * @returns void.\n */\n Toolbar.prototype.addItems = function (items, index) {\n var innerItems;\n var itemsDiv = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(itemsDiv)) {\n this.itemsRerender(items);\n return;\n }\n var innerEle;\n var itemAgn = 'Left';\n if (isNOU(index)) {\n index = 0;\n }\n items.forEach(function (e) {\n if (!isNOU(e.align) && e.align !== 'Left' && itemAgn === 'Left') {\n itemAgn = e.align;\n }\n });\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (isNOU(item.type)) {\n item.type = 'Button';\n }\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n item.align = itemAgn;\n innerEle = this.renderSubComponent(item, index);\n if (this.tbarEle.length >= index && innerItems.length >= 0) {\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var algIndex = item.align[0] === 'L' ? 0 : item.align[0] === 'C' ? 1 : 2;\n var ele = void 0;\n if (!this.tbarAlign && itemAgn !== 'Left') {\n this.tbarItemAlign(item, itemsDiv, 1);\n this.tbarAlign = true;\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n ele.appendChild(innerEle);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].push(innerEle);\n this.refreshPositioning();\n }\n else if (this.tbarAlign) {\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n ele.insertBefore(innerEle, ele.children[index]);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].splice(index, 0, innerEle);\n this.refreshPositioning();\n }\n else if (innerItems.length === 0) {\n innerItems = selectAll('.' + CLS_ITEMS, this.element);\n innerItems[0].appendChild(innerEle);\n }\n else {\n innerItems[0].parentNode.insertBefore(innerEle, innerItems[index]);\n }\n this.items.splice(index, 0, item);\n this.tbarEle.splice(index, 0, innerEle);\n index++;\n this.offsetWid = itemsDiv.offsetWidth;\n }\n }\n itemsDiv.style.width = '';\n this.renderOverflowMode();\n };\n /**\n * Removes the items from the Toolbar. Acceptable arguments are index of item/HTMLElement/node list.\n * @param {number|HTMLElement|NodeList|HTMLElement[]} args\n * Index or DOM element or an Array of item which is to be removed from the Toolbar.\n * @returns void.\n */\n Toolbar.prototype.removeItems = function (args) {\n var elements = args;\n var index;\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (typeof (elements) === 'number') {\n index = parseInt(args.toString(), 10);\n this.removeItemByIndex(index, innerItems);\n }\n else {\n if (elements && elements.length > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n index = this.tbarEle.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n }\n }\n else {\n var ele = (elements && elements.length && elements.length === 1) ? elements[0] : args;\n index = innerItems.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n }\n }\n this.resize();\n };\n Toolbar.prototype.removeItemByIndex = function (index, innerItems) {\n if (this.tbarEle[index] && innerItems[index]) {\n var eleIdx = this.tbarEle.indexOf(innerItems[index]);\n if (this.tbarAlign) {\n var indexAgn = void 0;\n indexAgn = this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].indexOf(this.tbarEle[eleIdx]);\n this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].splice(indexAgn, 1);\n }\n detach(innerItems[index]);\n this.items.splice(eleIdx, 1);\n this.tbarEle.splice(eleIdx, 1);\n }\n };\n Toolbar.prototype.templateRender = function (templateProp, innerEle, item, index) {\n var itemType = item.type;\n var eleObj = templateProp;\n var isComponent;\n if (typeof (templateProp) === 'object') {\n isComponent = typeof (eleObj.appendTo) === 'function';\n }\n if (typeof (templateProp) === 'string' || !isComponent) {\n var templateFn = void 0;\n var val = templateProp;\n val = (typeof (templateProp) === 'string') ? templateProp.trim() : templateProp;\n var e = void 0;\n try {\n if (typeof (templateProp) === 'object' && !isNOU(templateProp.tagName)) {\n innerEle.appendChild(templateProp);\n }\n else if (document.querySelectorAll(val).length) {\n var ele = document.querySelector(val);\n var tempStr = ele.outerHTML.trim();\n innerEle.appendChild(ele);\n ele.style.display = '';\n if (!isNOU(tempStr)) {\n this.tempId.push(val);\n }\n }\n }\n catch (e) {\n templateFn = templateCompiler(val);\n }\n var tempArray = void 0;\n if (!isNOU(templateFn)) {\n tempArray = templateFn({}, this, 'template');\n }\n if (!isNOU(tempArray) && tempArray.length > 0) {\n [].slice.call(tempArray).forEach(function (ele) {\n if (!isNOU(ele.tagName)) {\n ele.style.display = '';\n }\n innerEle.appendChild(ele);\n });\n }\n }\n else if (itemType === 'Input') {\n var ele = this.createElement('input');\n item.id ? (ele.id = item.id) : (ele.id = getUniqueID('tbr-ipt'));\n innerEle.appendChild(ele);\n eleObj.appendTo(ele);\n }\n this.add(innerEle, CLS_TEMPLATE);\n this.tbarEle.push(innerEle);\n };\n Toolbar.prototype.buttonRendering = function (item, innerEle) {\n var dom = this.createElement('button', { className: CLS_TBARBTN });\n dom.setAttribute('type', 'button');\n var textStr = item.text;\n var iconCss;\n var iconPos;\n item.id ? (dom.id = item.id) : dom.id = getUniqueID('e-tbr-btn');\n var btnTxt = this.createElement('div', { className: 'e-tbar-btn-text' });\n if (textStr) {\n btnTxt.innerHTML = textStr;\n dom.appendChild(btnTxt);\n dom.classList.add('e-tbtn-txt');\n }\n else {\n this.add(innerEle, 'e-tbtn-align');\n }\n if (item.prefixIcon || item.suffixIcon) {\n if ((item.prefixIcon && item.suffixIcon) || item.prefixIcon) {\n iconCss = item.prefixIcon + ' e-icons';\n iconPos = 'Left';\n }\n else {\n iconCss = item.suffixIcon + ' e-icons';\n iconPos = 'Right';\n }\n }\n var btnObj = new Button({ iconCss: iconCss, iconPosition: iconPos });\n btnObj.createElement = this.createElement;\n btnObj.appendTo(dom);\n if (item.width) {\n setStyle(dom, { 'width': formatUnit(item.width) });\n }\n return dom;\n };\n Toolbar.prototype.renderSubComponent = function (item, index) {\n var innerEle;\n var dom;\n innerEle = this.createElement('div', { className: CLS_ITEM });\n innerEle.setAttribute('aria-disabled', 'false');\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n if (item.htmlAttributes) {\n this.setAttr(item.htmlAttributes, innerEle);\n }\n if (item.tooltipText) {\n var tempDom = this.createElement('div', { innerHTML: item.tooltipText });\n innerEle.setAttribute('title', tempDom.textContent);\n }\n if (item.cssClass) {\n innerEle.className = innerEle.className + ' ' + item.cssClass;\n }\n if (item.template) {\n this.templateRender(item.template, innerEle, item, index);\n }\n else {\n switch (item.type) {\n case 'Button':\n dom = this.buttonRendering(item, innerEle);\n dom.setAttribute('tabindex', '-1');\n innerEle.appendChild(dom);\n innerEle.addEventListener('click', this.itemClick.bind(this));\n break;\n case 'Separator':\n this.add(innerEle, CLS_SEPARATOR);\n break;\n }\n }\n if (item.showTextOn) {\n var sTxt = item.showTextOn;\n if (sTxt === 'Toolbar') {\n this.add(innerEle, CLS_POPUPTEXT);\n this.add(innerEle, 'e-tbtn-align');\n }\n else if (sTxt === 'Overflow') {\n this.add(innerEle, CLS_TBARTEXT);\n }\n }\n if (item.overflow) {\n var overflow = item.overflow;\n if (overflow === 'Show') {\n this.add(innerEle, CLS_TBAROVERFLOW);\n }\n else if (overflow === 'Hide') {\n if (!innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPOVERFLOW);\n }\n }\n }\n if (item.overflow !== 'Show' && item.showAlwaysInPopup && !innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPPRI);\n this.popupPriCount++;\n }\n return innerEle;\n };\n Toolbar.prototype.itemClick = function (e) {\n this.activeEleSwitch(e.currentTarget);\n };\n Toolbar.prototype.activeEleSwitch = function (ele) {\n this.activeEleRemove(ele.firstElementChild);\n this.activeEle.focus();\n };\n Toolbar.prototype.activeEleRemove = function (curEle) {\n if (!isNOU(this.activeEle)) {\n this.activeEle.setAttribute('tabindex', '-1');\n }\n this.activeEle = curEle;\n if (isNOU(this.trgtEle) && !curEle.parentElement.classList.contains(CLS_TEMPLATE)) {\n curEle.removeAttribute('tabindex');\n }\n else {\n this.activeEle.setAttribute('tabindex', '0');\n }\n };\n Toolbar.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.itemsRerender = function (newProp) {\n this.items = this.tbarItemsCol;\n this.destroyMode();\n this.destroyItems();\n this.items = newProp;\n this.tbarItemsCol = this.items;\n this.renderItems();\n this.renderOverflowMode();\n };\n Toolbar.prototype.resize = function () {\n var ele = this.element;\n this.tbResize = true;\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.overflowMode === 'Popup') {\n this.popObj.hide();\n }\n var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n if (!checkOverflow) {\n this.destroyHScroll();\n }\n if (checkOverflow && this.scrollModule && (this.offsetWid === ele.offsetWidth)) {\n return;\n }\n if (this.offsetWid > ele.offsetWidth || checkOverflow) {\n this.renderOverflowMode();\n }\n if (this.popObj) {\n if (this.overflowMode === 'Extended') {\n var eleStyles = window.getComputedStyle(this.element);\n this.popObj.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n }\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.popupRefresh(this.popObj.element, false);\n if (this.tbarAlign) {\n this.refreshPositioning();\n }\n }\n this.offsetWid = ele.offsetWidth;\n this.tbResize = false;\n this.separator();\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {ToolbarModel} newProp\n * @param {ToolbarModel} oldProp\n * @returns void\n * @private\n */\n Toolbar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var tEle = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProb = Object.keys(newProp.items);\n for (var i = 0; i < changedProb.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var property = Object.keys(newProp.items[index])[0];\n var oldProperty = Object(oldProp.items[index])[property];\n var newProperty = Object(newProp.items[index])[property];\n if (this.tbarAlign || property === 'align') {\n this.refresh();\n break;\n }\n var popupPriCheck = property === 'showAlwaysInPopup' && !newProperty;\n var booleanCheck = property === 'overflow' && this.popupPriCount !== 0;\n if ((popupPriCheck) || (this.items[index].showAlwaysInPopup) && booleanCheck) {\n --this.popupPriCount;\n }\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var itemCol = [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, tEle));\n detach(itemCol[index]);\n this.tbarEle.splice(index, 1);\n this.addItems([this.items[index]], index);\n this.items.splice(index, 1);\n if (this.items[index].template) {\n this.tbarEle.splice(this.items.length, 1);\n }\n }\n }\n else {\n this.itemsRerender(newProp.items);\n }\n break;\n case 'width':\n var wid = tEle.offsetWidth;\n setStyle(tEle, { 'width': formatUnit(newProp.width) });\n this.renderOverflowMode();\n if (this.popObj && wid < tEle.offsetWidth) {\n this.popupRefresh(this.popObj.element, false);\n }\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'overflowMode':\n this.destroyMode();\n this.renderOverflowMode();\n if (this.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n this.refreshOverflow();\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.add(tEle, CLS_RTL) : this.remove(tEle, CLS_RTL);\n if (!isNOU(this.scrollModule)) {\n newProp.enableRtl ? this.add(this.scrollModule.element, CLS_RTL) : this.remove(this.scrollModule.element, CLS_RTL);\n }\n if (!isNOU(this.popObj)) {\n newProp.enableRtl ? this.add(this.popObj.element, CLS_RTL) : this.remove(this.popObj.element, CLS_RTL);\n }\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n break;\n }\n }\n };\n /**\n * Shows or hides the Toolbar item that is in the specified index.\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (true) or show (false). By default, value is false.\n * @returns void.\n */\n Toolbar.prototype.hideItem = function (index, value) {\n if (this.tbarEle[index]) {\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (value === true) {\n innerItems[index].classList.add(CLS_HIDDEN);\n }\n else {\n innerItems[index].classList.remove(CLS_HIDDEN);\n }\n this.refreshOverflow();\n }\n };\n __decorate([\n Collection([], Item)\n ], Toolbar.prototype, \"items\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"height\", void 0);\n __decorate([\n Property('Scrollable')\n ], Toolbar.prototype, \"overflowMode\", void 0);\n __decorate([\n Property(false)\n ], Toolbar.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"beforeCreate\", void 0);\n Toolbar = __decorate([\n NotifyPropertyChanges\n ], Toolbar);\n return Toolbar;\n}(Component));\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, KeyboardEvents, rippleEffect } from '@syncfusion/ej2-base';\nimport { getUniqueID, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { addClass, isVisible, closest, attributes, classList, detach, select } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Collection, Animation } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, selectAll } from '@syncfusion/ej2-base';\nvar CLS_ACRDN_ROOT = 'e-acrdn-root';\nvar CLS_ROOT = 'e-accordion';\nvar CLS_ITEM = 'e-acrdn-item';\nvar CLS_ITEMFOCUS = 'e-item-focus';\nvar CLS_ITEMHIDE = 'e-hide';\nvar CLS_HEADER = 'e-acrdn-header';\nvar CLS_HEADERICN = 'e-acrdn-header-icon';\nvar CLS_HEADERCTN = 'e-acrdn-header-content';\nvar CLS_CONTENT = 'e-acrdn-panel';\nvar CLS_CTENT = 'e-acrdn-content';\nvar CLS_TOOGLEICN = 'e-toggle-icon';\nvar CLS_COLLAPSEICN = 'e-tgl-collapse-icon e-icons';\nvar CLS_EXPANDICN = 'e-expand-icon';\nvar CLS_RTL = 'e-rtl';\nvar CLS_CTNHIDE = 'e-content-hide';\nvar CLS_SLCT = 'e-select';\nvar CLS_SLCTED = 'e-selected';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_ANIMATE = 'e-animate';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_TOGANIMATE = 'e-toggle-animation';\nvar CLS_NEST = 'e-nested';\nvar CLS_EXPANDSTATE = 'e-expand-state';\nvar AccordionActionSettings = /** @class */ (function (_super) {\n __extends(AccordionActionSettings, _super);\n function AccordionActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], AccordionActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AccordionActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], AccordionActionSettings.prototype, \"easing\", void 0);\n return AccordionActionSettings;\n}(ChildProperty));\nexport { AccordionActionSettings };\nvar AccordionAnimationSettings = /** @class */ (function (_super) {\n __extends(AccordionAnimationSettings, _super);\n function AccordionAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, AccordionActionSettings)\n ], AccordionAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, AccordionActionSettings)\n ], AccordionAnimationSettings.prototype, \"expand\", void 0);\n return AccordionAnimationSettings;\n}(ChildProperty));\nexport { AccordionAnimationSettings };\n/**\n * An item object that is used to configure Accordion items.\n */\nvar AccordionItem = /** @class */ (function (_super) {\n __extends(AccordionItem, _super);\n function AccordionItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"content\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"header\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], AccordionItem.prototype, \"expanded\", void 0);\n return AccordionItem;\n}(ChildProperty));\nexport { AccordionItem };\n/**\n * The Accordion is a vertically collapsible content panel that displays one or more panels at a time within the available space.\n * ```html\n *
\n * \n * ```\n */\nvar Accordion = /** @class */ (function (_super) {\n __extends(Accordion, _super);\n /**\n * Initializes a new instance of the Accordion class.\n * @param options - Specifies Accordion model properties as options.\n * @param element - Specifies the element that is rendered as an Accordion.\n */\n function Accordion(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Contains the keyboard configuration of the Accordion.\n */\n _this.keyConfigs = {\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n enter: 'enter',\n space: 'space',\n home: 'home',\n end: 'end',\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n Accordion.prototype.destroy = function () {\n var _this = this;\n var ele = this.element;\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n this.isDestroy = true;\n this.templateEle.forEach(function (eleStr) {\n if (!isNOU(_this.element.querySelector(eleStr))) {\n document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n }\n });\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n if (this.trgtEle) {\n while (this.ctrlTem.firstChild) {\n ele.appendChild(this.ctrlTem.firstChild);\n }\n }\n ele.removeAttribute('style');\n ['aria-disabled', 'aria-multiselectable', 'role'].forEach(function (attrb) {\n _this.element.removeAttribute(attrb);\n });\n };\n Accordion.prototype.preRender = function () {\n var nested = closest(this.element, '.' + CLS_CONTENT);\n this.isNested = false;\n this.templateEle = [];\n if (!this.isDestroy) {\n this.isDestroy = false;\n }\n if (!isNOU(nested)) {\n nested.classList.add(CLS_NEST);\n this.isNested = true;\n }\n else {\n this.element.classList.add(CLS_ACRDN_ROOT);\n }\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n if (!this.enablePersistence || isNOU(this.expandedItems)) {\n this.expandedItems = [];\n }\n };\n Accordion.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Accordion.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n /**\n * To initialize the control rendering\n * @private\n */\n Accordion.prototype.render = function () {\n this.initialize();\n this.renderControl();\n this.wireEvents();\n };\n Accordion.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n setStyle(this.element, { 'width': width, 'height': height });\n var ariaAttr = {\n 'aria-disabled': 'false', 'role': 'presentation', 'aria-multiselectable': 'true'\n };\n if (this.expandedItems.length > 0) {\n this.initExpand = this.expandedItems;\n }\n attributes(this.element, ariaAttr);\n if (this.expandMode === 'Single') {\n this.element.setAttribute('aria-multiselectable', 'false');\n }\n };\n Accordion.prototype.renderControl = function () {\n this.trgtEle = (this.element.children.length > 0) ? select('div', this.element) : null;\n this.renderItems();\n this.initItemExpand();\n };\n Accordion.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n if (!isNOU(this.keyModule)) {\n this.keyModule.destroy();\n }\n };\n Accordion.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n if (!this.isNested && !this.isDestroy) {\n rippleEffect(this.element, { selector: '.' + CLS_HEADER });\n }\n if (!this.isNested) {\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n }\n };\n Accordion.prototype.focusIn = function (e) {\n e.target.parentElement.classList.add(CLS_ITEMFOCUS);\n };\n Accordion.prototype.focusOut = function (e) {\n e.target.parentElement.classList.remove(CLS_ITEMFOCUS);\n };\n Accordion.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.element.cloneNode(true);\n var innerEles = this.element.children;\n var content;\n addClass([].slice.call(innerEles), [CLS_ITEM]);\n [].slice.call(innerEles).forEach(function (el) {\n el.id = getUniqueID('acrdn_item');\n if (el.children.length > 0) {\n _this.add(el.children[0], CLS_HEADER);\n var header = el.children[0];\n attributes(header, { 'tabindex': '0', 'role': 'heading', 'aria-level': innerEles.length.toString() });\n header.id = getUniqueID('acrdn_header');\n EventHandler.add(header, 'focus', _this.focusIn, _this);\n EventHandler.add(header, 'blur', _this.focusOut, _this);\n var headerEle = header.firstElementChild;\n if (headerEle) {\n headerEle.classList.add(CLS_HEADERCTN);\n }\n content = el.children[1];\n if (content) {\n content.id = getUniqueID('acrdn_panel');\n header.setAttribute('aria-controls', content.id);\n content.style.display = '';\n el.classList.add(CLS_SLCT);\n el.children[0].appendChild(_this.toggleIconGenerate());\n classList(content, [CLS_CONTENT, CLS_CTNHIDE], []);\n attributes(content, { 'aria-labelledby': header.id, 'aria-hidden': 'true' });\n content = content.firstElementChild;\n if (content) {\n content.classList.add(CLS_CTENT);\n content.style.display = '';\n }\n }\n }\n });\n };\n Accordion.prototype.toggleIconGenerate = function () {\n var tglIcon = this.createElement('div', { className: CLS_TOOGLEICN });\n var hdrColIcon = this.createElement('span', { className: CLS_COLLAPSEICN });\n tglIcon.appendChild(hdrColIcon);\n return tglIcon;\n };\n Accordion.prototype.initItemExpand = function () {\n var len = this.initExpand.length;\n if (len === 0) {\n return;\n }\n if (this.expandMode === 'Single') {\n this.expandItem(true, this.initExpand[len - 1]);\n }\n else {\n for (var i = 0; i < len; i++) {\n this.expandItem(true, this.initExpand[i]);\n }\n }\n };\n Accordion.prototype.renderItems = function () {\n var _this = this;\n var ele = this.element;\n var innerItem;\n if (isNOU(this.initExpand)) {\n this.initExpand = [];\n }\n var items = this.items;\n if (!isNOU(this.trgtEle)) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n items.forEach(function (item, index) {\n innerItem = _this.renderInnerItem(item, index);\n ele.appendChild(innerItem);\n if (innerItem.childElementCount > 0) {\n EventHandler.add(innerItem.querySelector('.' + CLS_HEADER), 'focus', _this.focusIn, _this);\n EventHandler.add(innerItem.querySelector('.' + CLS_HEADER), 'blur', _this.focusOut, _this);\n }\n });\n }\n };\n Accordion.prototype.clickHandler = function (e) {\n var _this = this;\n var trgt = e.target;\n var eventArgs = {};\n var index;\n var tglIcon;\n var acrdEle = closest(trgt, '.' + CLS_ROOT);\n if (acrdEle !== this.element) {\n return;\n }\n trgt.classList.add('e-target');\n var acrdnItem = closest(trgt, '.' + CLS_ITEM);\n var acrdnHdr = closest(trgt, '.' + CLS_HEADER);\n var acrdnCtn = closest(trgt, '.' + CLS_CONTENT);\n if (acrdnItem && (isNOU(acrdnHdr) || isNOU(acrdnCtn))) {\n acrdnHdr = acrdnItem.children[0];\n acrdnCtn = acrdnItem.children[1];\n }\n if (acrdnHdr) {\n tglIcon = select('.' + CLS_TOOGLEICN, acrdnHdr);\n }\n var acrdnCtnItem;\n if (acrdnCtn) {\n acrdnCtnItem = closest(acrdnCtn, '.' + CLS_ITEM);\n }\n var acrdActive = [];\n index = this.getIndexByItem(acrdnItem);\n if (acrdnCtnItem) {\n eventArgs.item = this.items[this.getIndexByItem(acrdnCtnItem)];\n }\n eventArgs.originalEvent = e;\n var ctnCheck = !isNOU(tglIcon) && isNOU(this.trgtEle) && acrdnItem.childElementCount <= 1;\n if (ctnCheck && (isNOU(acrdnCtn) || !isNOU(select('.' + CLS_HEADER + ' .' + CLS_TOOGLEICN, acrdnCtnItem)))) {\n acrdnItem.appendChild(this.contentRendering(index));\n this.ariaAttrUpdate(acrdnItem);\n }\n this.trigger('clicked', eventArgs);\n var cntclkCheck = (acrdnCtn && !isNOU(select('.e-target', acrdnCtn)));\n cntclkCheck = cntclkCheck && (isNOU(select('.' + CLS_ROOT, acrdnCtn)) || !(closest(trgt, '.' + CLS_ROOT) === this.element));\n trgt.classList.remove('e-target');\n if (trgt.classList.contains(CLS_CONTENT) || trgt.classList.contains(CLS_CTENT) || cntclkCheck) {\n return;\n }\n [].slice.call(this.element.children).forEach(function (el) {\n if (el.classList.contains(CLS_ACTIVE)) {\n acrdActive.push(el);\n }\n });\n var acrdAniEle = [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM + ' [' + CLS_ANIMATE + ']'));\n if (acrdAniEle.length > 0) {\n for (var _i = 0, acrdAniEle_1 = acrdAniEle; _i < acrdAniEle_1.length; _i++) {\n var el = acrdAniEle_1[_i];\n acrdActive.push(el.parentElement);\n }\n }\n var sameContentCheck = acrdActive.indexOf(acrdnCtnItem) !== -1 && acrdnCtn.getAttribute('e-animate') === 'true';\n var sameHeader = false;\n if (!isNOU(acrdnItem) && !isNOU(acrdnHdr)) {\n var acrdnCtn_1 = select('.' + CLS_CONTENT, acrdnItem);\n var acrdnRoot = closest(acrdnItem, '.' + CLS_ACRDN_ROOT);\n var expandState = acrdnRoot.querySelector('.' + CLS_EXPANDSTATE);\n if (isNOU(acrdnCtn_1)) {\n return;\n }\n sameHeader = (expandState === acrdnItem);\n if (isVisible(acrdnCtn_1) && (!sameContentCheck || acrdnCtnItem.classList.contains(CLS_SLCTED))) {\n this.collapse(acrdnCtn_1);\n }\n else {\n if ((acrdActive.length > 0) && this.expandMode === 'Single' && !sameContentCheck) {\n acrdActive.forEach(function (el) {\n _this.collapse(select('.' + CLS_CONTENT, el));\n el.classList.remove(CLS_EXPANDSTATE);\n });\n }\n this.expand(acrdnCtn_1);\n }\n if (!isNOU(expandState) && !sameHeader) {\n expandState.classList.remove(CLS_EXPANDSTATE);\n }\n }\n };\n Accordion.prototype.eleMoveFocus = function (action, root, trgt) {\n var clst;\n var clstItem = closest(trgt, '.' + CLS_ITEM);\n if (trgt === root) {\n clst = ((action === 'moveUp' ? trgt.lastElementChild : trgt).querySelector('.' + CLS_HEADER));\n }\n else if (trgt.classList.contains(CLS_HEADER)) {\n clstItem = (action === 'moveUp' ? clstItem.previousElementSibling : clstItem.nextElementSibling);\n if (clstItem) {\n clst = select('.' + CLS_HEADER, clstItem);\n }\n }\n if (clst) {\n clst.focus();\n }\n };\n Accordion.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n var header = closest(e.target, CLS_HEADER);\n if (isNOU(header) && !trgt.classList.contains(CLS_ROOT) && !trgt.classList.contains(CLS_HEADER)) {\n return;\n }\n var clst;\n var root = this.element;\n var content;\n switch (e.action) {\n case 'moveUp':\n this.eleMoveFocus(e.action, root, trgt);\n break;\n case 'moveDown':\n this.eleMoveFocus(e.action, root, trgt);\n break;\n case 'space':\n case 'enter':\n content = trgt.nextElementSibling;\n if (!isNOU(content) && content.classList.contains(CLS_CONTENT)) {\n if (content.getAttribute('e-animate') !== 'true') {\n trgt.click();\n }\n }\n else {\n trgt.click();\n }\n break;\n case 'home':\n case 'end':\n clst = e.action === 'home' ? root.firstElementChild.children[0] : root.lastElementChild.children[0];\n clst.focus();\n break;\n }\n };\n Accordion.prototype.headerEleGenerate = function () {\n var header = this.createElement('div', { className: CLS_HEADER, id: getUniqueID('acrdn_header') });\n var ariaAttr = {\n 'tabindex': '0', 'role': 'heading', 'aria-expanded': 'false', 'aria-selected': 'false',\n 'aria-disabled': 'false', 'aria-level': this.items.length.toString()\n };\n attributes(header, ariaAttr);\n return header;\n };\n Accordion.prototype.renderInnerItem = function (item, index) {\n var innerEle;\n innerEle = this.createElement('div', { className: CLS_ITEM });\n innerEle.id = getUniqueID('acrdn_item');\n if (item.header) {\n var ctnEle = this.headerEleGenerate();\n var hdrEle = this.createElement('div', { className: CLS_HEADERCTN });\n ctnEle.appendChild(hdrEle);\n ctnEle.appendChild(this.fetchElement(hdrEle, item.header, index, true));\n innerEle.appendChild(ctnEle);\n }\n var hdr = select('.' + CLS_HEADER, innerEle);\n if (item.expanded && !isNOU(index) && (!this.enablePersistence)) {\n if (this.initExpand.indexOf(index) === -1) {\n this.initExpand.push(index);\n }\n }\n if (item.cssClass) {\n innerEle.classList.add(item.cssClass);\n }\n if (item.iconCss) {\n var hdrIcnEle = this.createElement('div', { className: CLS_HEADERICN });\n var icon = this.createElement('span', { className: item.iconCss + ' e-icons' });\n hdrIcnEle.appendChild(icon);\n if (isNOU(hdr)) {\n hdr = this.headerEleGenerate();\n hdr.appendChild(hdrIcnEle);\n innerEle.appendChild(hdr);\n }\n else {\n hdr.insertBefore(hdrIcnEle, hdr.childNodes[0]);\n }\n }\n if (item.content) {\n var hdrIcon = this.toggleIconGenerate();\n if (isNOU(hdr)) {\n hdr = this.headerEleGenerate();\n innerEle.appendChild(hdr);\n }\n hdr.appendChild(hdrIcon);\n this.add(innerEle, CLS_SLCT);\n }\n return innerEle;\n };\n Accordion.prototype.fetchElement = function (ele, value, index, isHeader) {\n var templateFn;\n var temString;\n try {\n if (document.querySelectorAll(value).length) {\n var eleVal = document.querySelector(value);\n temString = eleVal.outerHTML.trim();\n ele.appendChild(eleVal);\n eleVal.style.display = '';\n }\n }\n catch (e) {\n templateFn = templateCompiler(value);\n }\n var tempArray;\n if (!isNOU(templateFn)) {\n tempArray = templateFn();\n }\n if (!isNOU(tempArray) && tempArray.length > 0 && !(isNOU(tempArray[0].tagName) && tempArray.length === 1)) {\n [].slice.call(tempArray).forEach(function (el) {\n if (!isNOU(el.tagName)) {\n el.style.display = '';\n }\n ele.appendChild(el);\n });\n }\n else if (ele.childElementCount === 0) {\n ele.innerHTML = value;\n }\n if (!isNOU(temString)) {\n this.templateEle.push(value);\n }\n return ele;\n };\n Accordion.prototype.ariaAttrUpdate = function (itemEle) {\n var header = select('.' + CLS_HEADER, itemEle);\n var content = select('.' + CLS_CONTENT, itemEle);\n header.setAttribute('aria-controls', content.id);\n content.setAttribute('aria-labelledby', header.id);\n };\n Accordion.prototype.contentRendering = function (index) {\n var content = this.items[index].content;\n var itemcnt = this.createElement('div', { className: CLS_CONTENT + ' ' + CLS_CTNHIDE, id: getUniqueID('acrdn_panel') });\n attributes(itemcnt, { 'aria-hidden': 'true' });\n var ctn = this.createElement('div', { className: CLS_CTENT });\n itemcnt.appendChild(this.fetchElement(ctn, content, index, false));\n return itemcnt;\n };\n Accordion.prototype.expand = function (trgt) {\n var eventArgs;\n var trgtItemEle = closest(trgt, '.' + CLS_ITEM);\n if (isNOU(trgt) || (isVisible(trgt) && trgt.getAttribute('e-animate') !== 'true') || trgtItemEle.classList.contains(CLS_DISABLE)) {\n return;\n }\n var acrdnRoot = closest(trgtItemEle, '.' + CLS_ACRDN_ROOT);\n var expandState = acrdnRoot.querySelector('.' + CLS_EXPANDSTATE);\n var animation = {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing\n };\n var icon = select('.' + CLS_TOOGLEICN, trgtItemEle).firstElementChild;\n eventArgs = { element: trgtItemEle,\n item: this.items[this.getIndexByItem(trgtItemEle)],\n isExpanded: true };\n var eff = animation.name;\n this.trigger('expanding', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n icon.classList.add(CLS_TOGANIMATE);\n this.expandedItemsPush(trgtItemEle);\n if (!isNOU(expandState)) {\n expandState.classList.remove(CLS_EXPANDSTATE);\n }\n trgtItemEle.classList.add(CLS_EXPANDSTATE);\n if ((animation.name === 'None')) {\n this.expandProgress('begin', icon, trgt, trgtItemEle, eventArgs);\n this.expandProgress('end', icon, trgt, trgtItemEle, eventArgs);\n return;\n }\n this.expandAnimation(eff, icon, trgt, trgtItemEle, animation, eventArgs);\n };\n Accordion.prototype.expandAnimation = function (ef, icn, trgt, trgtItemEle, animate, args) {\n var _this = this;\n var height;\n var trgtHgt;\n this.lastActiveItemId = trgtItemEle.id;\n if (ef === 'SlideDown') {\n animate.begin = function () {\n _this.expandProgress('begin', icn, trgt, trgtItemEle, args);\n trgt.style.position = 'absolute';\n height = trgtItemEle.offsetHeight;\n trgtHgt = trgt.offsetHeight;\n trgt.style.maxHeight = (trgt.offsetHeight) + 'px';\n trgtItemEle.style.maxHeight = '';\n };\n animate.progress = function () {\n trgtItemEle.style.minHeight = (height + trgt.offsetHeight) + 'px';\n };\n animate.end = function () {\n setStyle(trgt, { 'position': '', 'maxHeight': '' });\n trgtItemEle.style.minHeight = '';\n _this.expandProgress('end', icn, trgt, trgtItemEle, args);\n };\n }\n else {\n animate.begin = function () {\n _this.expandProgress('begin', icn, trgt, trgtItemEle, args);\n };\n animate.end = function () {\n _this.expandProgress('end', icn, trgt, trgtItemEle, args);\n };\n }\n new Animation(animate).animate(trgt);\n };\n Accordion.prototype.expandProgress = function (progress, icon, trgt, trgtItemEle, eventArgs) {\n this.remove(trgt, CLS_CTNHIDE);\n this.add(trgtItemEle, CLS_SLCTED);\n this.add(icon, CLS_EXPANDICN);\n if (progress === 'end') {\n this.add(trgtItemEle, CLS_ACTIVE);\n trgt.setAttribute('aria-hidden', 'false');\n attributes(trgt.previousElementSibling, { 'aria-selected': 'true', 'aria-expanded': 'true' });\n icon.classList.remove(CLS_TOGANIMATE);\n this.trigger('expanded', eventArgs);\n }\n };\n Accordion.prototype.expandedItemsPush = function (item) {\n var index = this.getIndexByItem(item);\n if (this.expandedItems.indexOf(index) === -1) {\n this.expandedItems.push(index);\n }\n };\n Accordion.prototype.getIndexByItem = function (item) {\n return [].slice.call(this.element.children).indexOf(item);\n };\n Accordion.prototype.expandedItemsPop = function (item) {\n var index = this.getIndexByItem(item);\n this.expandedItems.splice(this.expandedItems.indexOf(index), 1);\n };\n Accordion.prototype.collapse = function (trgt) {\n var eventArgs;\n var trgtItemEle = closest(trgt, '.' + CLS_ITEM);\n if (isNOU(trgt) || !isVisible(trgt) || trgtItemEle.classList.contains(CLS_DISABLE)) {\n return;\n }\n var animation = {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n };\n var icon = select('.' + CLS_TOOGLEICN, trgtItemEle).firstElementChild;\n eventArgs = { element: trgtItemEle,\n item: this.items[this.getIndexByItem(trgtItemEle)],\n isExpanded: false };\n var eff = animation.name;\n this.trigger('expanding', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.expandedItemsPop(trgtItemEle);\n trgtItemEle.classList.add(CLS_EXPANDSTATE);\n icon.classList.add(CLS_TOGANIMATE);\n if ((animation.name === 'None')) {\n this.collapseProgress('begin', icon, trgt, trgtItemEle, eventArgs);\n this.collapseProgress('end', icon, trgt, trgtItemEle, eventArgs);\n return;\n }\n this.collapseAnimation(eff, trgt, trgtItemEle, icon, animation, eventArgs);\n };\n Accordion.prototype.collapseAnimation = function (ef, trgt, trgtItEl, icn, animate, args) {\n var _this = this;\n var height;\n var trgtHeight;\n var itemHeight;\n var remain;\n this.lastActiveItemId = trgtItEl.id;\n if (ef === 'SlideUp') {\n animate.begin = function () {\n itemHeight = trgtItEl.offsetHeight;\n trgtItEl.style.minHeight = itemHeight + 'px';\n trgt.style.position = 'absolute';\n height = trgtItEl.offsetHeight;\n trgtHeight = trgt.offsetHeight;\n trgt.style.maxHeight = trgtHeight + 'px';\n _this.collapseProgress('begin', icn, trgt, trgtItEl, args);\n };\n animate.progress = function () {\n remain = ((height - (trgtHeight - trgt.offsetHeight)));\n if (remain < itemHeight) {\n trgtItEl.style.minHeight = remain + 'px';\n }\n };\n animate.end = function () {\n trgt.style.display = 'none';\n _this.collapseProgress('end', icn, trgt, trgtItEl, args);\n trgtItEl.style.minHeight = '';\n setStyle(trgt, { 'position': '', 'maxHeight': '', 'display': '' });\n };\n }\n else {\n animate.begin = function () {\n _this.collapseProgress('begin', icn, trgt, trgtItEl, args);\n };\n animate.end = function () {\n _this.collapseProgress('end', icn, trgt, trgtItEl, args);\n };\n }\n new Animation(animate).animate(trgt);\n };\n Accordion.prototype.collapseProgress = function (progress, icon, trgt, trgtItemEle, eventArgs) {\n this.remove(icon, CLS_EXPANDICN);\n this.remove(trgtItemEle, CLS_SLCTED);\n if (progress === 'end') {\n this.add(trgt, CLS_CTNHIDE);\n icon.classList.remove(CLS_TOGANIMATE);\n this.remove(trgtItemEle, CLS_ACTIVE);\n trgt.setAttribute('aria-hidden', 'true');\n attributes(trgt.previousElementSibling, { 'aria-selected': 'false', 'aria-expanded': 'false' });\n this.trigger('expanded', eventArgs);\n }\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Accordion.prototype.getModuleName = function () {\n return 'accordion';\n };\n Accordion.prototype.itemAttribUpdate = function () {\n var itemEle = [].slice.call(this.element.children);\n var itemLen = this.items.length;\n itemEle.forEach(function (ele) {\n select('.' + CLS_HEADER, ele).setAttribute('aria-level', '' + itemLen);\n });\n };\n /**\n * Adds new item to the Accordion with the specified index of the Accordion.\n * @param {AccordionItemModel} item - Item array that is to be added to the Accordion.\n * @param {number} index - Number value that determines where the item should be added.\n * By default, item is added at the last index if the index is not specified.\n * @returns void\n */\n Accordion.prototype.addItem = function (item, index) {\n var ele = this.element;\n if (isNOU(index)) {\n index = this.items.length;\n }\n if (ele.childElementCount >= index) {\n this.items.splice(index, 0, item);\n var innerItemEle = this.renderInnerItem(item, index);\n if (ele.childElementCount === index) {\n ele.appendChild(innerItemEle);\n }\n else {\n ele.insertBefore(innerItemEle, ele.children[index]);\n }\n EventHandler.add(innerItemEle.querySelector('.' + CLS_HEADER), 'focus', this.focusIn, this);\n EventHandler.add(innerItemEle.querySelector('.' + CLS_HEADER), 'blur', this.focusOut, this);\n this.itemAttribUpdate();\n }\n this.expandedItems = [];\n this.expandedItemRefresh(ele);\n if (item.expanded) {\n this.expandItem(true, index);\n }\n };\n Accordion.prototype.expandedItemRefresh = function (ele) {\n var _this = this;\n [].slice.call(ele.children).forEach(function (el) {\n if (el.classList.contains(CLS_SLCTED)) {\n _this.expandedItemsPush(el);\n }\n });\n };\n /**\n * Dynamically removes item from Accordion.\n * @param {number} index - Number value that determines which item should be removed.\n * @returns void.\n */\n Accordion.prototype.removeItem = function (index) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n detach(ele);\n this.items.splice(index, 1);\n this.itemAttribUpdate();\n this.expandedItems = [];\n this.expandedItemRefresh(this.element);\n };\n /**\n * Sets focus to the specified index item header in Accordion.\n * @param {number} index - Number value that determines which item should be focused.\n * @returns void.\n */\n Accordion.prototype.select = function (index) {\n var ele = this.element.children[index];\n if (isNOU(ele) || isNOU(select('.' + CLS_HEADER, ele))) {\n return;\n }\n ele.children[0].focus();\n };\n /**\n * Shows or hides the specified item from Accordion.\n * @param {number} index - Number value that determines which item should be hidden/shown.\n * @param {Boolean} isHidden - Boolean value that determines the action either hide (true) or show (false). Default value is false.\n * If the `isHidden` value is false, the item is shown or else item it is hidden.\n * @returns void.\n */\n Accordion.prototype.hideItem = function (index, isHidden) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n if (isNOU(isHidden)) {\n isHidden = true;\n }\n isHidden ? this.add(ele, CLS_ITEMHIDE) : this.remove(ele, CLS_ITEMHIDE);\n };\n /**\n * Enables/Disables the specified Accordion item.\n * @param {number} index - Number value that determines which item should be enabled/disabled.\n * @param {boolean} isEnable - Boolean value that determines the action as enable (true) or disable (false).\n * If the `isEnable` value is true, the item is enabled or else it is disabled.\n * @returns void.\n */\n Accordion.prototype.enableItem = function (index, isEnable) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n var eleHeader = ele.firstElementChild;\n if (isEnable) {\n this.remove(ele, CLS_DISABLE);\n attributes(eleHeader, { 'tabindex': '0', 'aria-disabled': 'false' });\n eleHeader.focus();\n }\n else {\n if (ele.classList.contains(CLS_ACTIVE)) {\n this.expandItem(false, index);\n this.eleMoveFocus('movedown', this.element, eleHeader);\n }\n this.add(ele, CLS_DISABLE);\n eleHeader.setAttribute('aria-disabled', 'true');\n eleHeader.removeAttribute('tabindex');\n }\n };\n /**\n * Expands/Collapses the specified Accordion item.\n * @param {boolean} isExpand - Boolean value that determines the action as expand or collapse.\n * @param {number} index - Number value that determines which item should be expanded/collapsed.`index` is optional parameter.\n * Without Specifying index, based on the `isExpand` value all Accordion item can be expanded or collapsed.\n * @returns void.\n */\n Accordion.prototype.expandItem = function (isExpand, index) {\n var _this = this;\n var root = this.element;\n if (isNOU(index)) {\n if (this.expandMode === 'Single' && isExpand) {\n var ele = root.children[root.childElementCount - 1];\n this.itemExpand(isExpand, ele, this.getIndexByItem(ele));\n }\n else {\n var item = select('#' + this.lastActiveItemId, this.element);\n [].slice.call(this.element.children).forEach(function (el) {\n _this.itemExpand(isExpand, el, _this.getIndexByItem(el));\n el.classList.remove(CLS_EXPANDSTATE);\n });\n var expandedItem = select('.' + CLS_EXPANDSTATE, this.element);\n if (expandedItem) {\n expandedItem.classList.remove(CLS_EXPANDSTATE);\n }\n if (item) {\n item.classList.add(CLS_EXPANDSTATE);\n }\n }\n }\n else {\n var ele = this.element.children[index];\n if (isNOU(ele) || !ele.classList.contains(CLS_SLCT) || (ele.classList.contains(CLS_ACTIVE) && isExpand)) {\n return;\n }\n else {\n if (this.expandMode === 'Single') {\n this.expandItem(false);\n }\n this.itemExpand(isExpand, ele, index);\n }\n }\n };\n Accordion.prototype.itemExpand = function (isExpand, ele, index) {\n var ctn = ele.children[1];\n if (ele.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (isNOU(ctn) && isExpand) {\n ctn = this.contentRendering(index);\n ele.appendChild(ctn);\n this.ariaAttrUpdate(ele);\n }\n else if (isNOU(ctn)) {\n return;\n }\n isExpand ? this.expand(ctn) : this.collapse(ctn);\n };\n Accordion.prototype.destroyItems = function () {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) { detach(el); });\n };\n Accordion.prototype.updateItem = function (item, index) {\n if (!isNOU(item)) {\n var itemObj = this.items[index];\n this.items.splice(index, 1);\n detach(item);\n this.addItem(itemObj, index);\n }\n };\n Accordion.prototype.getPersistData = function () {\n var keyEntity = ['expandedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {AccordionModel} newProp\n * @param {AccordionModel} oldProp\n * @returns void\n * @private\n */\n Accordion.prototype.onPropertyChanged = function (newProp, oldProp) {\n var acrdn = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProp = Object.keys(newProp.items);\n for (var j = 0; j < changedProp.length; j++) {\n var index = parseInt(Object.keys(newProp.items)[j], 10);\n var property = Object.keys(newProp.items[index])[0];\n var item = selectAll('.' + CLS_ITEM, this.element)[index];\n var oldVal = Object(oldProp.items[index])[property];\n var newVal = Object(newProp.items[index])[property];\n if (property === 'header' || property === 'iconCss' || property === 'expanded') {\n this.updateItem(item, index);\n }\n if (property === 'cssClass' && !isNOU(item)) {\n item.classList.remove(oldVal);\n item.classList.add(newVal);\n }\n if (property === 'content' && !isNOU(item) && item.children.length === 2) {\n if (item.classList.contains(CLS_SLCTED)) {\n this.expandItem(false, index);\n }\n detach(item.querySelector('.' + CLS_CONTENT));\n }\n }\n }\n else {\n this.destroyItems();\n this.renderItems();\n this.initItemExpand();\n }\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.add(acrdn, CLS_RTL) : this.remove(acrdn, CLS_RTL);\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'width':\n setStyle(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'expandMode':\n if (newProp.expandMode === 'Single') {\n this.element.setAttribute('aria-multiselectable', 'false');\n if (this.expandedItems.length > 1) {\n this.expandItem(false);\n }\n }\n else {\n this.element.setAttribute('aria-multiselectable', 'true');\n }\n break;\n }\n }\n };\n __decorate([\n Collection([], AccordionItem)\n ], Accordion.prototype, \"items\", void 0);\n __decorate([\n Property('100%')\n ], Accordion.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Accordion.prototype, \"height\", void 0);\n __decorate([\n Property('Multiple')\n ], Accordion.prototype, \"expandMode\", void 0);\n __decorate([\n Complex({}, AccordionAnimationSettings)\n ], Accordion.prototype, \"animation\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"destroyed\", void 0);\n Accordion = __decorate([\n NotifyPropertyChanges\n ], Accordion);\n return Accordion;\n}(Component));\nexport { Accordion };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents, Touch } from '@syncfusion/ej2-base';\nimport { attributes, Animation } from '@syncfusion/ej2-base';\nimport { Browser, Collection, setValue, getValue, getUniqueID, getInstance, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { select, selectAll, closest, detach, append, rippleEffect, isVisible, Complex, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { getZindexPartial, calculatePosition, isCollide, fit } from '@syncfusion/ej2-popups';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar DOWNARROW = 'downarrow';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar HOME = 'home';\nvar END = 'end';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\nvar RTL = 'e-rtl';\n/**\n * Configures the field options of the Menu.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"itemId\", void 0);\n __decorate([\n Property('parentId')\n ], FieldSettings.prototype, \"parentId\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('url')\n ], FieldSettings.prototype, \"url\", void 0);\n __decorate([\n Property('separator')\n ], FieldSettings.prototype, \"separator\", void 0);\n __decorate([\n Property('items')\n ], FieldSettings.prototype, \"children\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Specifies menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n __extends(MenuItem, _super);\n function MenuItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MenuItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], MenuItem.prototype, \"separator\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuItem.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"url\", void 0);\n return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * @private\n * Base class for Menu and ContextMenu components.\n */\nvar MenuBase = /** @class */ (function (_super) {\n __extends(MenuBase, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function MenuBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.navIdx = [];\n _this.animation = new Animation({});\n _this.isTapHold = false;\n return _this;\n }\n /**\n * Initialized third party configuration settings.\n * @private\n */\n MenuBase.prototype.preRender = function () {\n if (this.element.tagName === 'EJS-CONTEXTMENU') {\n this.element.style.display = 'none';\n this.element.classList.remove('e-' + this.getModuleName());\n this.element.classList.remove('e-control');\n var ejInst = getValue('ej2_instances', this.element);\n var ul = this.createElement('ul');\n this.ngElement = this.element;\n this.element = ul;\n this.element.classList.add('e-control');\n this.element.classList.add('e-' + this.getModuleName());\n setValue('ej2_instances', ejInst, this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\n }\n if (this.element.tagName === 'EJS-MENU') {\n var ele = this.element;\n var ejInstance = getValue('ej2_instances', ele);\n var ul = this.createElement('ul');\n var wrapper = this.createElement('EJS-MENU', { className: 'e-' + this.getModuleName() + '-wrapper' });\n wrapper.style.display = 'block';\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n ul.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = ul;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.ngElement = wrapper;\n this.element = ele;\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n MenuBase.prototype.render = function () {\n this.initialize();\n this.renderItems();\n this.wireEvents();\n };\n MenuBase.prototype.initialize = function () {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n if (this.isMenu) {\n this.element.parentElement.insertBefore(wrapper, this.element);\n }\n else {\n document.body.appendChild(wrapper);\n }\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n attributes(this.element, { 'role': this.isMenu ? 'menubar' : 'menu', 'tabindex': '0' });\n wrapper.appendChild(this.element);\n this.element.style.zIndex = getZindexPartial(this.element).toString();\n };\n MenuBase.prototype.renderItems = function () {\n if (!this.items.length) {\n var items = ListBase.createJsonFromElement(this.element, { fields: { child: 'items' } });\n this.setProperties({ items: items }, true);\n this.element.innerHTML = '';\n }\n var ul = this.createItems(this.items);\n append(Array.prototype.slice.call(ul.children), this.element);\n this.element.classList.add('e-menu-parent');\n };\n MenuBase.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (Browser.isIos) {\n new Touch(target, { tapHold: this.touchHandler.bind(this) });\n }\n else {\n EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n }\n }\n this.targetElement = target;\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);\n }\n }\n if (!Browser.isDevice) {\n this.delegateMoverHandler = this.moverHandler.bind(this);\n this.delegateMouseDownHandler = this.mouseDownHandler.bind(this);\n EventHandler.add(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler, this);\n EventHandler.add(document, 'mousedown', this.delegateMouseDownHandler, this);\n }\n this.delegateClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.delegateClickHandler, this);\n var keyConfigs = {\n downarrow: DOWNARROW,\n uparrow: UPARROW,\n enter: ENTER,\n leftarrow: LEFTARROW,\n rightarrow: RIGHTARROW,\n escape: ESCAPE\n };\n if (this.isMenu) {\n keyConfigs.home = HOME;\n keyConfigs.end = END;\n }\n new KeyboardEvents(wrapper, {\n keyAction: this.keyBoardHandler.bind(this),\n keyConfigs: keyConfigs\n });\n this.rippleFn = rippleEffect(wrapper, { selector: '.' + ITEM });\n };\n MenuBase.prototype.mouseDownHandler = function (e) {\n if (closest(e.target, '.e-' + this.getModuleName() + '-wrapper') !== this.getWrapper()) {\n this.closeMenu(this.navIdx.length, e);\n }\n };\n MenuBase.prototype.keyBoardHandler = function (e) {\n var actionName = '';\n var actionNeeded = this.isMenu && !this.element.classList.contains('e-vertical') && this.navIdx.length < 1;\n e.preventDefault();\n if (actionNeeded) {\n switch (e.action) {\n case RIGHTARROW:\n actionName = RIGHTARROW;\n e.action = DOWNARROW;\n break;\n case LEFTARROW:\n actionName = LEFTARROW;\n e.action = UPARROW;\n break;\n case DOWNARROW:\n actionName = DOWNARROW;\n e.action = RIGHTARROW;\n break;\n case UPARROW:\n actionName = UPARROW;\n e.action = '';\n break;\n }\n }\n else if (this.enableRtl) {\n switch (e.action) {\n case LEFTARROW:\n actionNeeded = true;\n actionName = LEFTARROW;\n e.action = RIGHTARROW;\n break;\n case RIGHTARROW:\n actionNeeded = true;\n actionName = RIGHTARROW;\n e.action = LEFTARROW;\n break;\n }\n }\n switch (e.action) {\n case DOWNARROW:\n case UPARROW:\n case END:\n case HOME:\n this.upDownKeyHandler(e);\n break;\n case RIGHTARROW:\n this.rightEnterKeyHandler(e);\n break;\n case LEFTARROW:\n this.leftEscKeyHandler(e);\n break;\n case ENTER:\n this.rightEnterKeyHandler(e);\n break;\n case ESCAPE:\n this.leftEscKeyHandler(e);\n break;\n }\n if (actionNeeded) {\n e.action = actionName;\n }\n };\n MenuBase.prototype.upDownKeyHandler = function (e) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n var defaultIdx = (e.action === DOWNARROW || e.action === HOME) ? 0 : cul.childElementCount - 1;\n var fliIdx = defaultIdx;\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n if (e.action !== END && e.action !== HOME) {\n fliIdx = this.getIdx(cul, fli);\n }\n fli.classList.remove(FOCUSED);\n if (e.action !== END && e.action !== HOME) {\n e.action === DOWNARROW ? fliIdx++ : fliIdx--;\n if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n fliIdx = defaultIdx;\n }\n }\n }\n var cli = cul.children[fliIdx];\n fliIdx = this.isValidLI(cli, fliIdx, e.action);\n cul.children[fliIdx].classList.add(FOCUSED);\n cul.children[fliIdx].focus();\n };\n MenuBase.prototype.isValidLI = function (cli, index, action) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n ((action === DOWNARROW) || (action === RIGHTARROW)) ? index++ : index--;\n }\n cli = cul.children[index];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n index = this.isValidLI(cli, index, action);\n }\n return index;\n };\n MenuBase.prototype.rightEnterKeyHandler = function (e) {\n var eventArgs;\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n var fliIdx = this.getIdx(cul, fli);\n var navIdx = this.navIdx.concat(fliIdx);\n var index = void 0;\n var item = this.getItem(navIdx);\n if (item.items.length) {\n this.navIdx.push(fliIdx);\n this.openMenu(fli, item, null, null, e);\n fli.classList.remove(FOCUSED);\n fli.classList.add(SELECTED);\n if (e.action === ENTER) {\n eventArgs = { element: fli, item: item };\n this.trigger('select', eventArgs);\n }\n fli.focus();\n cul = wrapper.children[this.navIdx.length];\n index = this.isValidLI(cul.children[0], 0, e.action);\n cul.children[index].classList.add(FOCUSED);\n cul.children[index].focus();\n }\n else {\n if (e.action === ENTER) {\n fli.classList.remove(FOCUSED);\n fli.classList.add(SELECTED);\n eventArgs = { element: fli, item: item };\n this.trigger('select', eventArgs);\n this.closeMenu(null, e);\n }\n }\n }\n };\n MenuBase.prototype.leftEscKeyHandler = function (e) {\n if (this.navIdx.length) {\n var wrapper = this.getWrapper();\n this.closeMenu(this.navIdx.length, e);\n var cul = wrapper.children[this.navIdx.length];\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.setAttribute('aria-expanded', 'false');\n sli.classList.remove(SELECTED);\n sli.classList.add(FOCUSED);\n sli.focus();\n }\n }\n else {\n if (e.action === ESCAPE) {\n this.closeMenu(null, e);\n }\n }\n };\n MenuBase.prototype.scrollHandler = function (e) {\n this.closeMenu(null, e);\n };\n MenuBase.prototype.touchHandler = function (e) {\n this.isTapHold = true;\n this.cmenuHandler(e.originalEvent);\n };\n MenuBase.prototype.cmenuHandler = function (e) {\n e.preventDefault();\n this.closeMenu(null, e);\n if (this.canOpen(e.target)) {\n if (e.changedTouches) {\n this.openMenu(null, null, e.changedTouches[0].pageY + 1, e.changedTouches[0].pageX + 1, e);\n }\n else {\n this.openMenu(null, null, e.pageY + 1, e.pageX + 1, e);\n }\n }\n };\n MenuBase.prototype.closeMenu = function (ulIndex, e) {\n if (ulIndex === void 0) { ulIndex = 0; }\n if (e === void 0) { e = null; }\n if (this.isMenuVisible()) {\n var ul = void 0;\n var sli = void 0;\n var item = void 0;\n var items = void 0;\n var closeArgs = void 0;\n var beforeCloseArgs = void 0;\n var wrapper = this.getWrapper();\n for (var cnt = wrapper.childElementCount; cnt > ulIndex; cnt--) {\n ul = wrapper.children[cnt - 1];\n if (this.isMenu && ul.classList.contains('e-menu')) {\n sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n break;\n }\n item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items = item ? item.items : this.items;\n beforeCloseArgs = { element: ul, parentItem: item, items: items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.toggleAnimation(ul, false);\n this.navIdx.length = ulIndex ? ulIndex - 1 : ulIndex;\n closeArgs = { element: ul, parentItem: item, items: items };\n this.trigger('onClose', closeArgs);\n }\n }\n }\n };\n MenuBase.prototype.isMenuVisible = function () {\n return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n };\n MenuBase.prototype.canOpen = function (target) {\n var canOpen = true;\n if (this.filter) {\n canOpen = false;\n var filter = this.filter.split(' ');\n for (var i = 0, len = target.classList.length; i < len; i++) {\n if (filter.indexOf(target.classList[i]) > -1) {\n canOpen = true;\n break;\n }\n }\n }\n return canOpen;\n };\n MenuBase.prototype.openMenu = function (li, item, top, left, e, target) {\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (e === void 0) { e = null; }\n if (target === void 0) { target = this.targetElement; }\n var ul;\n var navIdx;\n var wrapper = this.getWrapper();\n if (li) {\n ul = this.createItems(item[this.getField('children', this.navIdx.length - 1)]);\n if (!this.isMenu && Browser.isDevice) {\n wrapper.lastChild.style.display = 'none';\n var data = {\n text: item[this.getField('text')].toString(), iconCss: ICONS + ' e-previous'\n };\n var hdata = new MenuItem(this.items[0], null, data, true);\n var hli = this.createItems([hdata]).children[0];\n hli.classList.add(HEADER);\n ul.insertBefore(hli, ul.children[0]);\n }\n ul.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(ul);\n }\n else {\n ul = this.element;\n ul.style.zIndex = getZindexPartial(target ? target : this.element).toString();\n }\n navIdx = this.getIndex(li ? li.id : null, true);\n var items = li ? item[this.getField('children', this.navIdx.length - 1)] : this.items;\n var eventArgs = {\n element: ul, items: items, parentItem: item, event: e, cancel: false, top: top, left: left\n };\n this.trigger('beforeOpen', eventArgs);\n top = eventArgs.top;\n left = eventArgs.left;\n if (eventArgs.cancel) {\n this.navIdx.pop();\n }\n else {\n this.setPosition(li, ul, top, left);\n this.toggleAnimation(ul);\n }\n };\n MenuBase.prototype.setPosition = function (li, ul, top, left) {\n var px = 'px';\n this.toggleVisiblity(ul);\n if (ul === this.element || (!isNullOrUndefined(left) && !isNullOrUndefined(top))) {\n var collide = isCollide(ul, null, left, top);\n if (collide.indexOf('right') > -1) {\n left = left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n var offset = fit(ul, null, { X: false, Y: true }, { top: top, left: left });\n top = offset.top - 20;\n }\n collide = isCollide(ul, null, left, top);\n if (collide.indexOf('left') > -1) {\n var offset = fit(ul, null, { X: true, Y: false }, { top: top, left: left });\n left = offset.left;\n }\n }\n else {\n var offset = void 0;\n var isRelative = this.isMenu && this.element.offsetParent.tagName !== 'BODY';\n if (!this.isMenu && Browser.isDevice) {\n top = Number(this.element.style.top.replace(px, ''));\n left = Number(this.element.style.left.replace(px, ''));\n }\n else {\n var x = 'right';\n var y = 'top';\n if (this.isMenu && !this.element.classList.contains('e-vertical') && this.navIdx.length < 2) {\n x = this.enableRtl ? 'right' : 'left';\n y = 'bottom';\n }\n else {\n x = this.enableRtl ? 'left' : 'right';\n }\n offset = calculatePosition(li, x, y);\n top = offset.top;\n left = offset.left;\n }\n var collide = isCollide(ul, null, this.enableRtl ? left - ul.offsetWidth : left, top);\n var xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n var yCollision = collide.indexOf('bottom') > -1;\n if (xCollision) {\n offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n left = offset.left;\n }\n if (this.enableRtl || xCollision) {\n left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n if (this.isMenu && xCollision && !this.element.classList.contains('e-vertical') && this.navIdx && this.navIdx.length < 2) {\n left = this.enableRtl ? left - li.getBoundingClientRect().width : left + li.getBoundingClientRect().width;\n }\n }\n if (yCollision) {\n offset = fit(ul, null, { X: false, Y: true }, { top: top, left: left });\n top = offset.top;\n }\n collide = isCollide(ul, null, left, top);\n xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n if (xCollision) {\n offset = fit(ul, null, { X: true, Y: false }, { top: top, left: left });\n top = offset.top;\n left = offset.left;\n }\n if (isRelative) {\n var boundRect = ul.offsetParent.getBoundingClientRect();\n top -= boundRect.top + pageYOffset;\n left -= boundRect.left + pageXOffset;\n }\n }\n this.toggleVisiblity(ul, false);\n if (this.isMenu) {\n if (this.element.classList.contains('e-vertical') && this.navIdx && this.navIdx[this.navIdx.length - 1] === 0) {\n top = top - 1;\n }\n else {\n if (this.navIdx && this.navIdx[this.navIdx.length - 1] === 0) {\n if (this.navIdx.length === 1) {\n left = left - 1;\n }\n else {\n top = top - 1;\n }\n }\n }\n }\n ul.style.top = top + px;\n ul.style.left = left + px;\n };\n MenuBase.prototype.toggleVisiblity = function (ul, isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n ul.style.visibility = isVisible ? 'hidden' : '';\n ul.style.display = isVisible ? 'block' : 'none';\n };\n MenuBase.prototype.createItems = function (items) {\n var _this = this;\n var level = this.navIdx ? this.navIdx.length : 0;\n var showIcon = this.hasField(items, this.getField('iconCss', level));\n var id = 'id';\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n fields: this.getFields(level),\n template: this.template,\n itemCreating: function (args) {\n if (!args.curData[args.fields[id]]) {\n args.curData[args.fields[id]] = getUniqueID('menuitem');\n _this.clearChanges();\n }\n args.curData.htmlAttributes = {\n role: 'menuitem',\n tabindex: '-1'\n };\n if (_this.isMenu && !args.curData[_this.getField('separator', level)]) {\n args.curData.htmlAttributes['aria-label'] = args.curData[args.fields.text];\n }\n },\n itemCreated: function (args) {\n if (args.curData[_this.getField('separator', level)]) {\n args.item.classList.add(SEPARATOR);\n args.item.removeAttribute('role');\n }\n if (showIcon && !args.curData[args.fields.iconCss]\n && !args.curData[_this.getField('separator', level)]) {\n args.item.classList.add('e-blankicon');\n }\n if (args.curData[args.fields.child]\n && args.curData[args.fields.child].length) {\n var span = _this.createElement('span', { className: ICONS + ' ' + CARET });\n args.item.appendChild(span);\n args.item.setAttribute('aria-haspopup', 'true');\n args.item.setAttribute('aria-expanded', 'false');\n if (!_this.isMenu) {\n args.item.removeAttribute('role');\n }\n args.item.classList.add('e-menu-caret-icon');\n }\n if (_this.isMenu && _this.template) {\n args.item.setAttribute('id', args.curData[args.fields.id].toString());\n args.item.removeAttribute('data-uid');\n }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template);\n ul.setAttribute('tabindex', '0');\n if (this.isMenu) {\n ul.setAttribute('role', 'menu');\n }\n return ul;\n };\n MenuBase.prototype.moverHandler = function (e) {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper')) {\n var fli = select('.' + FOCUSED, wrapper);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n cli.classList.add(FOCUSED);\n if (!this.showItemOnClick) {\n this.clickHandler(e);\n }\n }\n if (this.isMenu && trgt.parentElement !== wrapper && !cli && this.navIdx.length) {\n this.closeMenu(null, e);\n }\n };\n MenuBase.prototype.getField = function (propName, level) {\n if (level === void 0) { level = 0; }\n var fieldName = this.fields[propName];\n return typeof fieldName === 'string' ? fieldName :\n (!fieldName[level] ? fieldName[fieldName.length - 1].toString() : fieldName[level].toString());\n };\n MenuBase.prototype.getFields = function (level) {\n if (level === void 0) { level = 0; }\n return {\n id: this.getField('itemId', level),\n iconCss: this.getField('iconCss', level),\n text: this.getField('text', level),\n url: this.getField('url', level),\n child: this.getField('children', level),\n separator: this.getField('separator', level)\n };\n };\n MenuBase.prototype.hasField = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][field]) {\n return true;\n }\n }\n return false;\n };\n MenuBase.prototype.clickHandler = function (e) {\n if (this.isTapHold) {\n this.isTapHold = false;\n }\n else {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n var cliWrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : null;\n var isInstLI = cli && cliWrapper && wrapper.firstElementChild.id === cliWrapper.firstElementChild.id;\n if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n this.setLISelected(cli);\n var navIdx = this.getIndex(cli.id, true);\n var item = this.getItem(navIdx);\n var eventArgs = { element: cli, item: item };\n this.trigger('select', eventArgs);\n }\n if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {\n var ul = void 0;\n if (cli.classList.contains(HEADER)) {\n ul = wrapper.children[this.navIdx.length - 1];\n this.toggleAnimation(ul);\n var sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n detach(cli.parentNode);\n this.navIdx.pop();\n }\n else {\n if (!cli.classList.contains(SEPARATOR)) {\n var showSubMenu = true;\n var cul = cli.parentNode;\n var cliIdx = this.getIdx(cul, cli);\n if (this.isMenu || !Browser.isDevice) {\n var culIdx = this.getIdx(wrapper, cul);\n if (this.navIdx[culIdx] === cliIdx) {\n showSubMenu = false;\n }\n if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || showSubMenu)) {\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n this.closeMenu(culIdx + 1, e);\n }\n }\n if (showSubMenu) {\n var idx = this.navIdx.concat(cliIdx);\n var item = this.getItem(idx);\n if (item[this.getField('children', idx.length - 1)] &&\n item[this.getField('children', idx.length - 1)].length) {\n if (e.type === 'mouseover' || (Browser.isDevice && this.isMenu)) {\n this.setLISelected(cli);\n }\n cli.setAttribute('aria-expanded', 'true');\n this.navIdx.push(cliIdx);\n if (this.isMenu && !this.element.classList.contains('e-vertical') && this.navIdx.length < 2) {\n var collision = isCollide(cli, this.element);\n if (collision.length) {\n var boundRect = cli.getBoundingClientRect();\n this.element.scroll((collision.indexOf('right') > -1 ? boundRect.right : boundRect.left), 0);\n }\n }\n this.openMenu(cli, item, null, null, e);\n }\n else {\n if (e.type !== 'mouseover') {\n this.closeMenu(null, e);\n }\n }\n }\n }\n }\n }\n else {\n if (trgt.tagName !== 'UL' || trgt.parentElement !== wrapper) {\n if (!cli || !cli.querySelector('.' + CARET)) {\n this.closeMenu(null, e);\n }\n }\n }\n }\n };\n MenuBase.prototype.setLISelected = function (li) {\n var sli = this.getLIByClass(li.parentElement, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n li.classList.remove(FOCUSED);\n li.classList.add(SELECTED);\n };\n MenuBase.prototype.getLIByClass = function (ul, classname) {\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classname)) {\n return ul.children[i];\n }\n }\n return null;\n };\n MenuBase.prototype.getItem = function (navIdx) {\n navIdx = navIdx.slice();\n var idx = navIdx.pop();\n var items = this.getItems(navIdx);\n return items[idx];\n };\n MenuBase.prototype.getItems = function (navIdx) {\n var items = this.items;\n for (var i = 0; i < navIdx.length; i++) {\n items = items[navIdx[i]][this.getField('children', i)];\n }\n return items;\n };\n MenuBase.prototype.getIdx = function (ul, li, skipHdr) {\n if (skipHdr === void 0) { skipHdr = true; }\n var idx = Array.prototype.indexOf.call(ul.children, li);\n if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n idx--;\n }\n return idx;\n };\n MenuBase.prototype.getLI = function (elem) {\n if (elem.tagName === 'LI' && elem.classList.contains('e-menu-item')) {\n return elem;\n }\n return closest(elem, 'li.e-menu-item');\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {MenuBaseModel} newProp\n * @param {MenuBaseModel} oldProp\n * @returns void\n */\n MenuBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n wrapper.classList.toggle(RTL);\n break;\n case 'showItemOnClick':\n this.unWireEvents();\n this.showItemOnClick = newProp.showItemOnClick;\n this.wireEvents();\n break;\n case 'items':\n var idx = void 0;\n var navIdx = void 0;\n var item = void 0;\n var keys = Object.keys(newProp.items);\n for (var i = 0; i < keys.length; i++) {\n navIdx = this.getChangedItemIndex(newProp, [], Number(keys[i]));\n if (navIdx.length <= this.getWrapper().children.length) {\n idx = navIdx.pop();\n item = this.getItems(navIdx);\n this.insertAfter([item[idx]], item[idx].text);\n this.removeItem(item, navIdx, idx);\n }\n navIdx.length = 0;\n }\n break;\n }\n }\n };\n MenuBase.prototype.getChangedItemIndex = function (newProp, index, idx) {\n index.push(idx);\n var key = Object.keys(newProp.items[idx]).pop();\n if (key === 'items') {\n var item = newProp.items[idx];\n this.getChangedItemIndex(item, index, Number(Object.keys(item.items).pop()));\n }\n else {\n if (key === 'isParentArray' && index.length > 1) {\n index.pop();\n }\n }\n return index;\n };\n MenuBase.prototype.removeItem = function (item, navIdx, idx) {\n item.splice(idx, 1);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n detach(uls[navIdx.length].children[idx]);\n }\n };\n /**\n * Used to unwire the bind events.\n * @private\n */\n MenuBase.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var touchModule = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (Browser.isIos) {\n touchModule = getInstance(target, Touch);\n if (touchModule) {\n touchModule.destroy();\n }\n }\n else {\n EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n }\n }\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollHandler);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.remove(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler);\n EventHandler.remove(document, 'mousedown', this.delegateMouseDownHandler);\n }\n EventHandler.remove(document, 'click', this.delegateClickHandler);\n var keyboardModule = getInstance(wrapper, KeyboardEvents);\n if (keyboardModule) {\n keyboardModule.destroy();\n }\n this.rippleFn();\n };\n MenuBase.prototype.toggleAnimation = function (ul, isMenuOpen) {\n var _this = this;\n if (isMenuOpen === void 0) { isMenuOpen = true; }\n if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n this.end(ul, isMenuOpen);\n }\n else {\n this.animation.animate(ul, {\n name: this.animationSettings.effect,\n duration: this.animationSettings.duration,\n timingFunction: this.animationSettings.easing,\n begin: function (options) {\n options.element.style.display = 'block';\n options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n },\n end: function (options) {\n _this.end(options.element, isMenuOpen);\n }\n });\n }\n };\n MenuBase.prototype.end = function (ul, isMenuOpen) {\n if (isMenuOpen) {\n ul.style.display = 'block';\n ul.style.maxHeight = '';\n var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n var eventArgs = {\n element: ul, parentItem: item, items: item ? item.items : this.items\n };\n this.trigger('onOpen', eventArgs);\n if (ul.querySelector('.' + FOCUSED)) {\n ul.querySelector('.' + FOCUSED).focus();\n }\n else {\n var ele = void 0;\n ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n else {\n if (ul === this.element) {\n var fli = this.getLIByClass(this.element, FOCUSED);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n var sli = this.getLIByClass(this.element, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n ul.style.display = 'none';\n }\n else {\n detach(ul);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n MenuBase.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get wrapper element.\n * @returns Element\n * @private\n */\n MenuBase.prototype.getWrapper = function () {\n return closest(this.element, '.e-' + this.getModuleName() + '-wrapper');\n };\n MenuBase.prototype.getIndex = function (data, isUniqueId, items, nIndex, isCallBack, level) {\n if (items === void 0) { items = this.items; }\n if (nIndex === void 0) { nIndex = []; }\n if (isCallBack === void 0) { isCallBack = false; }\n if (level === void 0) { level = 0; }\n var item;\n level = isCallBack ? level + 1 : 0;\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i];\n if ((isUniqueId ? item[this.getField('itemId', level)] : item[this.getField('text', level)]) === data) {\n nIndex.push(i);\n break;\n }\n else if (item[this.getField('children', level)]\n && item[this.getField('children', level)].length) {\n nIndex = this.getIndex(data, isUniqueId, item[this.getField('children', level)], nIndex, true, level);\n if (nIndex[nIndex.length - 1] === -1) {\n if (i !== len - 1) {\n nIndex.pop();\n }\n }\n else {\n nIndex.unshift(i);\n break;\n }\n }\n else {\n if (i === len - 1) {\n nIndex.push(-1);\n }\n }\n }\n return (!isCallBack && nIndex[0] === -1) ? [] : nIndex;\n };\n /**\n * This method is used to enable or disable the menu items in the Menu based on the items and enable argument.\n * @param items Text items that needs to be enabled/disabled.\n * @param enable Set `true`/`false` to enable/disable the list items.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.enableItems = function (items, enable, isUniqueId) {\n if (enable === void 0) { enable = true; }\n var ul;\n var idx;\n var navIdx;\n var disabled = DISABLED;\n var wrapper = this.getWrapper();\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n ul = wrapper.children[navIdx.length];\n if (ul) {\n if (enable) {\n if (this.isMenu) {\n ul.children[idx].classList.remove(disabled);\n ul.children[idx].removeAttribute('aria-disabled');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(disabled);\n }\n else {\n ul.children[idx].classList.remove(disabled);\n }\n }\n }\n else {\n if (this.isMenu) {\n ul.children[idx].classList.add(disabled);\n ul.children[idx].setAttribute('aria-disabled', 'true');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(disabled);\n }\n else {\n ul.children[idx].classList.add(disabled);\n }\n }\n }\n }\n }\n };\n /**\n * This method is used to show the menu items in the Menu based on the items text.\n * @param items Text items that needs to be shown.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.showItems = function (items, isUniqueId) {\n this.showHideItems(items, false, isUniqueId);\n };\n /**\n * This method is used to hide the menu items in the Menu based on the items text.\n * @param items Text items that needs to be hidden.\n * @returns void\n */\n MenuBase.prototype.hideItems = function (items, isUniqueId) {\n this.showHideItems(items, true, isUniqueId);\n };\n MenuBase.prototype.showHideItems = function (items, ishide, isUniqueId) {\n var ul;\n var index;\n var navIdx;\n var wrapper = this.getWrapper();\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n index = navIdx.pop();\n ul = wrapper.children[navIdx.length];\n if (ul) {\n if (ishide) {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[index + 1].classList.add(HIDE);\n }\n else {\n ul.children[index].classList.add(HIDE);\n }\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[index + 1].classList.remove(HIDE);\n }\n else {\n ul.children[index].classList.remove(HIDE);\n }\n }\n }\n }\n };\n /**\n * It is used to remove the menu items from the Menu based on the items text.\n * @param items Text items that needs to be removed.\n * @returns void\n */\n MenuBase.prototype.removeItems = function (items, isUniqueId) {\n var idx;\n var navIdx;\n var iitems;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n this.removeItem(iitems, navIdx, idx);\n }\n };\n /**\n * It is used to insert the menu items after the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item after that the element to be inserted.\n * @returns void\n */\n MenuBase.prototype.insertAfter = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId);\n };\n /**\n * It is used to insert the menu items before the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item before that the element to be inserted.\n * @param isUniqueId - Set `true` if it is a unique id.\n * @returns void\n */\n MenuBase.prototype.insertBefore = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId, false);\n };\n MenuBase.prototype.insertItems = function (items, text, isUniqueId, isAfter) {\n if (isAfter === void 0) { isAfter = true; }\n var li;\n var idx;\n var navIdx;\n var iitems;\n var menuitem;\n var showIcon;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(text, isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n menuitem = new MenuItem(iitems[0], 'items', items[i], true);\n iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n idx = isAfter ? idx + 1 : idx;\n showIcon = this.hasField(iitems, this.getField('iconCss', navIdx.length - 1));\n li = this.createItems(iitems).children[idx];\n uls[navIdx.length].insertBefore(li, uls[navIdx.length].children[idx]);\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n MenuBase.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n if (wrapper) {\n _super.prototype.destroy.call(this);\n this.unWireEvents();\n if (this.ngElement && !this.isMenu) {\n this.ngElement.style.display = 'block';\n }\n else {\n this.closeMenu();\n this.element.innerHTML = '';\n ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n _this.element.style.removeProperty(key);\n });\n ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n if (key === 'class' && _this.element.classList.contains('e-menu-parent')) {\n _this.element.classList.remove('e-menu-parent');\n }\n if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n _this.element.removeAttribute(key);\n }\n if (_this.isMenu && key === 'class' && _this.element.classList.contains('e-vertical')) {\n _this.element.classList.remove('e-vertical');\n }\n });\n wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n if (this.isMenu && this.ngElement) {\n detach(this.element);\n wrapper.style.display = '';\n wrapper.classList.remove('e-' + this.getModuleName() + '-wrapper');\n wrapper.removeAttribute('data-ripple');\n }\n else {\n detach(wrapper);\n }\n }\n };\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"created\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"filter\", void 0);\n __decorate([\n Property(null)\n ], MenuBase.prototype, \"template\", void 0);\n __decorate([\n Complex({}, FieldSettings)\n ], MenuBase.prototype, \"fields\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuBase.prototype, \"items\", void 0);\n __decorate([\n Property({ duration: 400, easing: 'ease', effect: 'SlideDown' })\n ], MenuBase.prototype, \"animationSettings\", void 0);\n MenuBase = __decorate([\n NotifyPropertyChanges\n ], MenuBase);\n return MenuBase;\n}(Component));\nexport { MenuBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { MenuBase, MenuItem } from '../common/menu-base';\n/**\n * The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.\n * ```html\n *
\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar ContextMenu = /** @class */ (function (_super) {\n __extends(ContextMenu, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function ContextMenu(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * For internal use only - prerender processing.\n * @private\n */\n ContextMenu.prototype.preRender = function () {\n this.isMenu = false;\n _super.prototype.preRender.call(this);\n };\n /**\n * This method is used to open the ContextMenu in specified position.\n * @param top - To specify ContextMenu vertical positioning.\n * @param left - To specify ContextMenu horizontal positioning.\n * @param target - To calculate z-index for ContextMenu based upon the specified target.\n * @method open\n * @returns void\n */\n ContextMenu.prototype.open = function (top, left, target) {\n _super.prototype.openMenu.call(this, null, null, top, left, null, target);\n };\n /**\n * Closes the ContextMenu if it is opened.\n */\n ContextMenu.prototype.close = function () {\n _super.prototype.closeMenu.call(this);\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {ContextMenuModel} newProp\n * @param {ContextMenuModel} oldProp\n * @returns void\n */\n ContextMenu.prototype.onPropertyChanged = function (newProp, oldProp) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'filter':\n this.close();\n this.filter = newProp.filter;\n break;\n case 'target':\n this.unWireEvents();\n this.target = newProp.target;\n this.wireEvents();\n break;\n }\n }\n };\n /**\n * Get module name.\n * @returns string\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"filter\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], ContextMenu.prototype, \"items\", void 0);\n ContextMenu = __decorate([\n NotifyPropertyChanges\n ], ContextMenu);\n return ContextMenu;\n}(MenuBase));\nexport { ContextMenu };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, Complex } from '@syncfusion/ej2-base';\nimport { MenuBase, FieldSettings } from '../common/menu-base';\nvar VMENU = 'e-vertical';\nvar SCROLLABLE = 'e-scrollable';\n/**\n * The Menu is a graphical user interface that serve as navigation headers for your application or site.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Menu = /** @class */ (function (_super) {\n __extends(Menu, _super);\n /**\n * Constructor for creating the component.\n * @private\n */\n function Menu(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.tempItems = [];\n return _this;\n }\n /**\n * Get module name.\n * @returns string\n * @private\n */\n Menu.prototype.getModuleName = function () {\n return 'menu';\n };\n /**\n * For internal use only - prerender processing.\n * @private\n */\n Menu.prototype.preRender = function () {\n this.isMenu = true;\n if (this.template) {\n try {\n if (document.querySelectorAll(this.template).length) {\n this.template = document.querySelector(this.template).innerHTML.trim();\n this.clearChanges();\n }\n }\n catch (e) {\n /* action on catch */\n }\n }\n else {\n this.tempItems = this.items;\n this.items = [];\n this.tempItems.map(this.createMenuItems, this);\n this.setProperties({ items: this.items }, true);\n this.tempItems = [];\n }\n _super.prototype.preRender.call(this);\n };\n Menu.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n if (this.orientation === 'Vertical') {\n this.element.classList.add(VMENU);\n this.element.setAttribute('aria-orientation', 'vertical');\n }\n else {\n if (Browser.isDevice) {\n this.element.classList.add(SCROLLABLE);\n }\n }\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {MenuModel} newProp\n * @param {MenuModel} oldProp\n * @returns void\n */\n Menu.prototype.onPropertyChanged = function (newProp, oldProp) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'orientation':\n if (newProp.orientation === 'Vertical') {\n this.element.classList.add(VMENU);\n this.element.setAttribute('aria-orientation', 'vertical');\n }\n else {\n this.element.classList.remove(VMENU);\n this.element.removeAttribute('aria-orientation');\n }\n break;\n }\n }\n };\n Menu.prototype.createMenuItems = function (item, index) {\n var pIdField;\n var record = { items: [] };\n var idx;\n var i;\n var items = this.items;\n var fields = ['itemId', 'text', 'iconCss', 'url', 'separator', 'children'];\n pIdField = this.getField('parentId');\n for (i = 0; i < fields.length; i++) {\n var field = this.getField(fields[i]);\n if (item[field]) {\n record[field] = item[field];\n }\n }\n if (item[pIdField]) {\n idx = this.getIndex(item[pIdField].toString(), true);\n for (i = 0; i < idx.length; i++) {\n if (!items[idx[i]].items) {\n items[idx[i]].items = [];\n }\n items = items[idx[i]].items;\n }\n items.push(record);\n }\n else {\n this.items.push(record);\n }\n };\n __decorate([\n Property('Horizontal')\n ], Menu.prototype, \"orientation\", void 0);\n __decorate([\n Property(null)\n ], Menu.prototype, \"template\", void 0);\n __decorate([\n Complex({}, FieldSettings)\n ], Menu.prototype, \"fields\", void 0);\n Menu = __decorate([\n NotifyPropertyChanges\n ], Menu);\n return Menu;\n}(MenuBase));\nexport { Menu };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, closest, Collection, Complex, attributes, detach } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, select, isVisible } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Browser, formatUnit, L10n } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, isNullOrUndefined as isNOU, selectAll } from '@syncfusion/ej2-base';\nimport { EventHandler, rippleEffect, Touch, compile, Animation } from '@syncfusion/ej2-base';\nimport { Toolbar } from '../toolbar/toolbar';\nvar CLS_TAB = 'e-tab';\nvar CLS_HEADER = 'e-tab-header';\nvar CLS_CONTENT = 'e-content';\nvar CLS_NEST = 'e-nested';\nvar CLS_ITEMS = 'e-items';\nvar CLS_ITEM = 'e-item';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_RTL = 'e-rtl';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_DISABLE = 'e-disable';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_FOCUS = 'e-focused';\nvar CLS_ICONS = 'e-icons';\nvar CLS_ICON = 'e-icon';\nvar CLS_ICON_CLOSE = 'e-close-icon';\nvar CLS_CLOSE_SHOW = 'e-close-show';\nvar CLS_TEXT = 'e-tab-text';\nvar CLS_INDICATOR = 'e-indicator';\nvar CLS_WRAP = 'e-tab-wrap';\nvar CLS_TEXT_WRAP = 'e-text-wrap';\nvar CLS_TAB_ICON = 'e-tab-icon';\nvar CLS_TB_ITEMS = 'e-toolbar-items';\nvar CLS_TB_ITEM = 'e-toolbar-item';\nvar CLS_TB_POP = 'e-toolbar-pop';\nvar CLS_TB_POPUP = 'e-toolbar-popup';\nvar CLS_POPUP_OPEN = 'e-popup-open';\nvar CLS_POPUP_CLOSE = 'e-popup-close';\nvar CLS_PROGRESS = 'e-progress';\nvar CLS_IGNORE = 'e-ignore';\nvar CLS_OVERLAY = 'e-overlay';\nvar TabActionSettings = /** @class */ (function (_super) {\n __extends(TabActionSettings, _super);\n function TabActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideLeftIn')\n ], TabActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(600)\n ], TabActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], TabActionSettings.prototype, \"easing\", void 0);\n return TabActionSettings;\n}(ChildProperty));\nexport { TabActionSettings };\nvar TabAnimationSettings = /** @class */ (function (_super) {\n __extends(TabAnimationSettings, _super);\n function TabAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideLeftIn', duration: 600, easing: 'ease' }, TabActionSettings)\n ], TabAnimationSettings.prototype, \"previous\", void 0);\n __decorate([\n Complex({ effect: 'SlideRightIn', duration: 600, easing: 'ease' }, TabActionSettings)\n ], TabAnimationSettings.prototype, \"next\", void 0);\n return TabAnimationSettings;\n}(ChildProperty));\nexport { TabAnimationSettings };\n/**\n * Objects used for configuring the Tab item header properties.\n */\nvar Header = /** @class */ (function (_super) {\n __extends(Header, _super);\n function Header() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Header.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Header.prototype, \"iconCss\", void 0);\n __decorate([\n Property('left')\n ], Header.prototype, \"iconPosition\", void 0);\n return Header;\n}(ChildProperty));\nexport { Header };\n/**\n * An array of object that is used to configure the Tab.\n */\nvar TabItem = /** @class */ (function (_super) {\n __extends(TabItem, _super);\n function TabItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Header)\n ], TabItem.prototype, \"header\", void 0);\n __decorate([\n Property('')\n ], TabItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], TabItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TabItem.prototype, \"disabled\", void 0);\n return TabItem;\n}(ChildProperty));\nexport { TabItem };\n/**\n * Tab is a content panel to show multiple contents in a single space, one at a time.\n * Each Tab item has an associated content, that will be displayed based on the active Tab header item.\n * ```html\n *
    \n * \n * ```\n */\nvar Tab = /** @class */ (function (_super) {\n __extends(Tab, _super);\n /**\n * Initializes a new instance of the Tab class.\n * @param options - Specifies Tab model properties as options.\n * @param element - Specifies the element that is rendered as a Tab.\n */\n function Tab(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.show = { name: 'SlideDown', duration: 100 };\n _this.hide = { name: 'SlideUp', duration: 100 };\n _this.animateOptions = {};\n _this.animObj = new Animation(_this.animateOptions);\n _this.maxHeight = 0;\n _this.title = 'Close';\n _this.lastIndex = 0;\n /**\n * Contains the keyboard configuration of the Tab.\n */\n _this.keyConfigs = {\n tab: 'tab',\n home: 'home',\n end: 'end',\n enter: 'enter',\n space: 'space',\n delete: 'delete',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow'\n };\n return _this;\n }\n /**\n * Removes the component from the DOM and detaches all its related event handlers, attributes and classes.\n * @returns void\n */\n Tab.prototype.destroy = function () {\n var _this = this;\n if (!isNOU(this.tbObj)) {\n this.tbObj.destroy();\n }\n this.unWireEvents();\n ['role', 'aria-disabled', 'aria-activedescendant', 'tabindex', 'aria-orientation'].forEach(function (val) {\n _this.element.removeAttribute(val);\n });\n this.expTemplateContent();\n if (!this.isTemplate) {\n this.element.innerHTML = '';\n }\n else {\n var cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n this.element.classList.remove(CLS_TEMPLATE);\n if (!isNOU(cntEle)) {\n cntEle.innerHTML = this.cnt;\n }\n }\n _super.prototype.destroy.call(this);\n this.trigger('destroyed');\n };\n /**\n * Initialize component\n * @private\n */\n Tab.prototype.preRender = function () {\n var nested = closest(this.element, '.' + CLS_CONTENT);\n this.prevIndex = 0;\n this.isNested = false;\n this.isPopup = false;\n this.initRender = true;\n this.isSwipeed = false;\n this.itemIndexArray = [];\n this.templateEle = [];\n if (!isNOU(nested)) {\n nested.parentElement.classList.add(CLS_NEST);\n this.isNested = true;\n }\n var name = Browser.info.name;\n var css = (name === 'msie') ? 'e-ie' : (name === 'edge') ? 'e-edge' : (name === 'safari') ? 'e-safari' : '';\n setStyle(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.setCssClass(this.element, this.cssClass, true);\n attributes(this.element, { role: 'tablist', 'aria-disabled': 'false', 'aria-activedescendant': '' });\n this.setCssClass(this.element, css, true);\n };\n /**\n * Initialize the component rendering\n * @private\n */\n Tab.prototype.render = function () {\n this.btnCls = this.createElement('span', { className: CLS_ICONS + ' ' + CLS_ICON_CLOSE, attrs: { title: this.title } });\n this.renderContainer();\n this.wireEvents();\n this.initRender = false;\n };\n Tab.prototype.renderContainer = function () {\n var ele = this.element;\n if (this.items.length > 0 && ele.children.length === 0) {\n ele.appendChild(this.createElement('div', { className: CLS_CONTENT }));\n this.setOrientation(this.headerPlacement, this.createElement('div', { className: CLS_HEADER }));\n this.isTemplate = false;\n }\n else if (this.element.children.length > 0) {\n this.isTemplate = true;\n ele.classList.add(CLS_TEMPLATE);\n var header = ele.querySelector('.' + CLS_HEADER);\n if (header && this.headerPlacement === 'Bottom') {\n this.setOrientation(this.headerPlacement, header);\n }\n }\n if (!isNOU(select('.' + CLS_HEADER, this.element)) && !isNOU(select('.' + CLS_CONTENT, this.element))) {\n this.renderHeader();\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n if (!isNOU(this.tbItems)) {\n rippleEffect(this.tbItems, { selector: '.e-tab-wrap' });\n }\n this.renderContent();\n if (selectAll('.' + CLS_TB_ITEM, this.element).length > 0) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.bdrLine = this.createElement('div', { className: CLS_INDICATOR + ' ' + CLS_HIDDEN + ' ' + CLS_IGNORE });\n var scrCnt = select('.e-hscroll-content', this.tbItems);\n if (!isNOU(scrCnt)) {\n scrCnt.insertBefore(this.bdrLine, scrCnt.firstChild);\n }\n else {\n this.tbItems.insertBefore(this.bdrLine, this.tbItems.firstChild);\n }\n this.setContentHeight(true);\n this.select(this.selectedItem);\n }\n this.setRTL(this.enableRtl);\n }\n };\n Tab.prototype.renderHeader = function () {\n var _this = this;\n var tabItems = [];\n this.hdrEle = select('.' + CLS_HEADER, this.element);\n if (!this.isTemplate) {\n tabItems = this.parseObject(this.items, 0);\n }\n else {\n var count = this.hdrEle.children.length;\n var hdrItems = [];\n for (var i = 0; i < count; i++) {\n hdrItems.push(this.hdrEle.children.item(i).innerHTML);\n }\n if (count > 0) {\n this.hdrEle.innerHTML = '';\n this.hdrEle.appendChild(this.createElement('div', { className: CLS_ITEMS }));\n hdrItems.forEach(function (item, index) {\n _this.lastIndex = index;\n var attr = {\n className: CLS_ITEM, id: CLS_ITEM + '_' + index,\n attrs: { role: 'tab', 'aria-controls': CLS_CONTENT + '_' + index, 'aria-selected': 'false' }\n };\n var txt = _this.createElement('span', {\n className: CLS_TEXT, innerHTML: item, attrs: { 'role': 'presentation' }\n }).outerHTML;\n var cont = _this.createElement('div', {\n className: CLS_TEXT_WRAP, innerHTML: txt + _this.btnCls.outerHTML\n }).outerHTML;\n var wrap = _this.createElement('div', { className: CLS_WRAP, innerHTML: cont, attrs: { tabIndex: '-1' } });\n select('.' + CLS_ITEMS, _this.element).appendChild(_this.createElement('div', attr));\n selectAll('.' + CLS_ITEM, _this.element)[index].appendChild(wrap);\n });\n }\n }\n this.tbObj = new Toolbar({\n width: '100%',\n overflowMode: this.overflowMode,\n items: (tabItems.length !== 0) ? tabItems : [],\n clicked: this.clickHandler.bind(this)\n });\n this.tbObj.createElement = this.createElement;\n this.tbObj.appendTo(this.hdrEle);\n attributes(this.element, { 'aria-orientation': 'horizontal' });\n this.setCloseButton(this.showCloseButton);\n this.setProperties({ headerPlacement: (this.element.children.item(0).classList.contains(CLS_HEADER)) ? 'Top' : 'Bottom' }, true);\n };\n Tab.prototype.renderContent = function () {\n this.cntEle = select('.' + CLS_CONTENT, this.element);\n var hdrItem = selectAll('.' + CLS_TB_ITEM, this.element);\n if (this.isTemplate) {\n this.cnt = (this.cntEle.children.length > 0) ? this.cntEle.innerHTML : '';\n var contents = this.cntEle.children;\n for (var i = 0; i < hdrItem.length; i++) {\n if (contents.length - 1 >= i) {\n contents.item(i).className += CLS_ITEM;\n attributes(contents.item(i), { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + i });\n contents.item(i).id = CLS_CONTENT + '_' + i;\n }\n }\n }\n };\n Tab.prototype.reRenderItems = function () {\n this.renderContainer();\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n };\n Tab.prototype.parseObject = function (items, index) {\n var _this = this;\n var tbCount = selectAll('.' + CLS_TB_ITEM, this.element).length;\n var tItems = [];\n var txtWrapEle;\n items.forEach(function (item, i) {\n if (isNOU(item.header) || isNOU(item.header.text)) {\n _this.items.splice(i, 0);\n return;\n }\n var pos = (isNOU(item.header.iconPosition)) ? '' : item.header.iconPosition;\n var css = (isNOU(item.header.iconCss)) ? '' : item.header.iconCss;\n var txt = item.header.text;\n _this.lastIndex = ((tbCount === 0) ? i : ((_this.isReplace) ? (index + i) : (_this.lastIndex + 1)));\n var disabled = (item.disabled) ? ' ' + CLS_DISABLE + ' ' + CLS_OVERLAY : '';\n txtWrapEle = _this.createElement('div', { className: CLS_TEXT, attrs: { 'role': 'presentation' } });\n var tHtml = ((txt instanceof Object) ? txt.outerHTML : txt);\n var txtEmpty = (!isNOU(tHtml) && tHtml !== '');\n if (!isNOU(txt.tagName)) {\n txtWrapEle.appendChild(txt);\n }\n else {\n _this.headerTextCompile(txtWrapEle, txt);\n }\n var tEle;\n var icon = _this.createElement('span', {\n className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n });\n var tCont = _this.createElement('div', { className: CLS_TEXT_WRAP });\n tCont.appendChild(txtWrapEle);\n if ((txt === '' || txt === undefined) && css === '') {\n return;\n }\n else {\n if ((txt !== '' && txt !== undefined) && css !== '') {\n if ((pos === 'left' || pos === 'top')) {\n tCont.insertBefore(icon, tCont.firstElementChild);\n }\n else {\n tCont.appendChild(icon);\n }\n tEle = txtWrapEle;\n }\n else {\n tEle = ((css === '') ? txtWrapEle : icon);\n if (tEle === icon) {\n detach(txtWrapEle);\n tCont.appendChild(icon);\n }\n }\n }\n var wrapAttrs = (item.disabled) ? {} : { tabIndex: '-1' };\n tCont.appendChild(_this.btnCls.cloneNode(true));\n var wrap = _this.createElement('div', { className: CLS_WRAP, attrs: wrapAttrs });\n wrap.appendChild(tCont);\n if (_this.itemIndexArray === []) {\n _this.itemIndexArray.push(CLS_ITEM + '_' + _this.lastIndex);\n }\n else {\n _this.itemIndexArray.splice((index + i), 0, CLS_ITEM + '_' + _this.lastIndex);\n }\n var attrObj = {\n id: CLS_ITEM + '_' + _this.lastIndex, role: 'tab', 'aria-selected': 'false'\n };\n var tItem = { htmlAttributes: attrObj, template: wrap };\n tItem.cssClass = item.cssClass + ' ' + disabled + ' ' + ((css !== '') ? 'e-i' + pos : '') + ' ' + ((!txtEmpty) ? CLS_ICON : '');\n if (pos === 'top' || pos === 'bottom') {\n _this.element.classList.add('e-vertical-icon');\n }\n tItems.push(tItem);\n });\n return tItems;\n };\n Tab.prototype.removeActiveClass = function (id) {\n var hdrActEle = selectAll(':root .' + CLS_HEADER + ' .' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element)[0];\n if (this.headerPlacement === 'Bottom') {\n hdrActEle = selectAll(':root .' + CLS_HEADER + ' .' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element.children[1])[0];\n }\n if (!isNOU(hdrActEle)) {\n hdrActEle.classList.remove(CLS_ACTIVE);\n var no = this.extIndex(hdrActEle.id);\n var trg = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\n }\n };\n Tab.prototype.checkPopupOverflow = function (ele) {\n this.tbPop = select('.' + CLS_TB_POP, this.element);\n var popIcon = select('.e-hor-nav', this.element);\n var tbrItems = select('.' + CLS_TB_ITEMS, this.element);\n if ((this.enableRtl && ((popIcon.offsetLeft + popIcon.offsetWidth) > tbrItems.offsetLeft))\n || (!this.enableRtl && popIcon.offsetLeft < tbrItems.offsetWidth)) {\n ele.classList.add(CLS_TB_POPUP);\n this.tbPop.insertBefore(ele.cloneNode(true), selectAll('.' + CLS_TB_POPUP, this.tbPop)[0]);\n ele.outerHTML = '';\n }\n return true;\n };\n Tab.prototype.popupHandler = function (target) {\n var ripEle = target.querySelector('.e-ripple-element');\n if (!isNOU(ripEle)) {\n ripEle.outerHTML = '';\n target.querySelector('.' + CLS_WRAP).classList.remove('e-ripple');\n }\n this.tbItem = selectAll('.' + CLS_TB_ITEMS + ' .' + CLS_TB_ITEM, this.hdrEle);\n var lastChild = this.tbItem[this.tbItem.length - 1];\n if (this.tbItem.length !== 0) {\n target.classList.remove(CLS_TB_POPUP);\n this.tbItems.appendChild(target.cloneNode(true));\n this.actEleId = target.id;\n target.outerHTML = '';\n if (this.checkPopupOverflow(lastChild)) {\n var prevEle = this.tbItems.lastChild.previousElementSibling;\n this.checkPopupOverflow(prevEle);\n }\n this.isPopup = true;\n }\n return selectAll('.' + CLS_TB_ITEM, this.tbItems).length - 1;\n };\n Tab.prototype.setCloseButton = function (val) {\n var trg = select('.' + CLS_HEADER, this.element);\n (val === true) ? trg.classList.add(CLS_CLOSE_SHOW) : trg.classList.remove(CLS_CLOSE_SHOW);\n this.tbObj.refreshOverflow();\n this.refreshActElePosition();\n };\n Tab.prototype.prevCtnAnimation = function (prev, current) {\n var animation;\n var checkRTL = this.enableRtl || this.element.classList.contains(CLS_RTL);\n if (this.isPopup || prev <= current) {\n if (this.animation.previous.effect === 'SlideLeftIn') {\n animation = { name: 'SlideLeftOut',\n duration: this.animation.previous.duration, timingFunction: this.animation.previous.easing };\n }\n else {\n animation = null;\n }\n }\n else {\n if (this.animation.next.effect === 'SlideRightIn') {\n animation = { name: 'SlideRightOut',\n duration: this.animation.next.duration, timingFunction: this.animation.next.easing };\n }\n else {\n animation = null;\n }\n }\n return animation;\n };\n Tab.prototype.triggerPrevAnimation = function (oldCnt, prevIndex) {\n var _this = this;\n var animateObj = this.prevCtnAnimation(prevIndex, this.selectedItem);\n if (!isNOU(animateObj)) {\n animateObj.begin = function () {\n setStyle(oldCnt, { 'position': 'absolute' });\n oldCnt.classList.add(CLS_PROGRESS);\n oldCnt.classList.add('e-view');\n };\n animateObj.end = function () {\n oldCnt.style.display = 'none';\n oldCnt.classList.remove(CLS_ACTIVE);\n oldCnt.classList.remove(CLS_PROGRESS);\n oldCnt.classList.remove('e-view');\n setStyle(oldCnt, { 'display': '', 'position': '' });\n if (oldCnt.childNodes.length === 0 && !_this.isTemplate) {\n detach(oldCnt);\n }\n };\n new Animation(animateObj).animate(oldCnt);\n }\n else {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n };\n Tab.prototype.triggerAnimation = function (id, value) {\n var _this = this;\n var prevIndex = this.prevIndex;\n var itemCollection = [].slice.call(this.element.querySelector('.' + CLS_CONTENT).children);\n var oldCnt;\n itemCollection.forEach(function (item) {\n if (item.id === _this.prevActiveEle) {\n oldCnt = item;\n }\n });\n var prevEle = this.tbItem[prevIndex];\n var no = this.extIndex(this.tbItem[this.selectedItem].id);\n var newCnt = this.getTrgContent(this.cntEle, no);\n if (isNOU(oldCnt) && !isNOU(prevEle)) {\n var idNo = this.extIndex(prevEle.id);\n oldCnt = this.getTrgContent(this.cntEle, idNo);\n }\n this.prevActiveEle = newCnt.id;\n if (this.initRender || value === false || this.animation === {} || isNOU(this.animation)) {\n if (oldCnt && oldCnt !== newCnt) {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n return;\n }\n var cnt = select('.' + CLS_CONTENT, this.element);\n var animateObj;\n if (this.prevIndex > this.selectedItem && !this.isPopup) {\n var openEff = this.animation.previous.effect;\n animateObj = {\n name: ((openEff === 'None') ? '' : ((openEff !== 'SlideLeftIn') ? openEff : 'SlideLeftIn')),\n duration: this.animation.previous.duration,\n timingFunction: this.animation.previous.easing\n };\n }\n else if (this.isPopup || this.prevIndex < this.selectedItem || this.prevIndex === this.selectedItem) {\n var clsEff = this.animation.next.effect;\n animateObj = {\n name: ((clsEff === 'None') ? '' : ((clsEff !== 'SlideRightIn') ? clsEff : 'SlideRightIn')),\n duration: this.animation.next.duration,\n timingFunction: this.animation.next.easing\n };\n }\n animateObj.progress = function () {\n cnt.classList.add(CLS_PROGRESS);\n _this.setActiveBorder();\n };\n animateObj.end = function () {\n cnt.classList.remove(CLS_PROGRESS);\n newCnt.classList.add(CLS_ACTIVE);\n };\n if (!this.initRender && !isNOU(oldCnt)) {\n this.triggerPrevAnimation(oldCnt, prevIndex);\n }\n this.isPopup = false;\n if (animateObj.name === '') {\n newCnt.classList.add(CLS_ACTIVE);\n }\n else {\n new Animation(animateObj).animate(newCnt);\n }\n };\n Tab.prototype.keyPressed = function (trg) {\n var trgParent = closest(trg, '.' + CLS_HEADER + ' .' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (!isNOU(this.popEle) && trg.classList.contains('e-hor-nav')) {\n (this.popEle.classList.contains(CLS_POPUP_OPEN)) ? this.popObj.hide(this.hide) : this.popObj.show(this.show);\n }\n else if (trg.classList.contains('e-scroll-nav')) {\n trg.click();\n }\n else {\n if (!isNOU(trgParent) && trgParent.classList.contains(CLS_ACTIVE) === false) {\n this.select(trgIndex);\n if (!isNOU(this.popEle)) {\n this.popObj.hide(this.hide);\n }\n }\n }\n };\n Tab.prototype.getEleIndex = function (item) {\n return Array.prototype.indexOf.call(selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element), item);\n };\n Tab.prototype.extIndex = function (id) {\n return id.replace(CLS_ITEM + '_', '');\n };\n Tab.prototype.expTemplateContent = function () {\n var _this = this;\n this.templateEle.forEach(function (eleStr) {\n if (!isNOU(_this.element.querySelector(eleStr))) {\n document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n }\n });\n };\n Tab.prototype.templateCompile = function (ele, cnt) {\n var tempEle = this.createElement('div');\n this.compileElement(tempEle, cnt, 'content');\n if (tempEle.childNodes.length !== 0) {\n ele.appendChild(tempEle);\n }\n };\n Tab.prototype.compileElement = function (ele, val, prop) {\n if (typeof val === 'string') {\n val = val.trim();\n }\n var templateFn = compile(val);\n var templateFUN;\n if (!isNOU(templateFn)) {\n templateFUN = templateFn({}, this, prop);\n }\n if (!isNOU(templateFn) && templateFUN.length > 0) {\n [].slice.call(templateFUN).forEach(function (el) {\n ele.appendChild(el);\n });\n }\n };\n Tab.prototype.headerTextCompile = function (element, text) {\n this.compileElement(element, text, 'headerText');\n };\n Tab.prototype.getContent = function (ele, cnt, callType) {\n var eleStr;\n if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\n if (cnt[0] === '.' || cnt[0] === '#') {\n if (document.querySelectorAll(cnt).length) {\n var eleVal = document.querySelector(cnt);\n eleStr = eleVal.outerHTML.trim();\n if (callType === 'clone') {\n ele.appendChild(eleVal.cloneNode(true));\n }\n else {\n ele.appendChild(eleVal);\n eleVal.style.display = '';\n }\n }\n else {\n this.templateCompile(ele, cnt);\n }\n }\n else {\n this.templateCompile(ele, cnt);\n }\n }\n else {\n ele.appendChild(cnt);\n }\n if (!isNOU(eleStr)) {\n if (this.templateEle.indexOf(cnt.toString()) === -1) {\n this.templateEle.push(cnt.toString());\n }\n }\n };\n Tab.prototype.getTrgContent = function (cntEle, no) {\n var ele;\n if (this.element.classList.contains(CLS_NEST)) {\n ele = select('.' + CLS_NEST + '> .' + CLS_CONTENT + ' > #' + CLS_CONTENT + '_' + no, this.element);\n }\n else {\n ele = this.findEle(cntEle.children, CLS_CONTENT + '_' + no);\n }\n return ele;\n };\n Tab.prototype.findEle = function (items, key) {\n var ele;\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === key) {\n ele = items[i];\n break;\n }\n }\n return ele;\n };\n Tab.prototype.setOrientation = function (place, ele) {\n (place === 'Bottom') ? this.element.appendChild(ele) : this.element.insertBefore(ele, select('.' + CLS_CONTENT, this.element));\n };\n Tab.prototype.setCssClass = function (ele, cls, val) {\n if (cls === '') {\n return;\n }\n var list = cls.split(' ');\n for (var i = 0; i < list.length; i++) {\n if (val) {\n ele.classList.add(list[i]);\n }\n else {\n ele.classList.remove(list[i]);\n }\n }\n };\n Tab.prototype.setContentHeight = function (val) {\n if (isNOU(this.cntEle)) {\n return;\n }\n var height;\n var hdrEle = select('.' + CLS_HEADER, this.element);\n if (this.heightAdjustMode === 'None') {\n if (this.height === 'auto') {\n return;\n }\n else {\n setStyle(this.cntEle, { 'height': (this.element.offsetHeight - hdrEle.offsetHeight) + 'px' });\n }\n }\n else if (this.heightAdjustMode === 'Fill') {\n setStyle(this.element, { 'height': '100%' });\n setStyle(this.cntEle, { 'height': 'auto' });\n }\n else if (this.heightAdjustMode === 'Auto') {\n var cnt = selectAll('.' + CLS_CONTENT + ' > .' + CLS_ITEM, this.element);\n if (this.isTemplate === true) {\n for (var i = 0; i < cnt.length; i++) {\n cnt[i].setAttribute('style', 'display:block; visibility: visible');\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(cnt[i]));\n cnt[i].style.removeProperty('display');\n cnt[i].style.removeProperty('visibility');\n }\n }\n else {\n this.cntEle = select('.' + CLS_CONTENT, this.element);\n if (val === true) {\n this.cntEle.appendChild(this.createElement('div', {\n id: (CLS_CONTENT + '_' + 0), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + 0 }\n }));\n }\n var ele = this.cntEle.children.item(0);\n for (var i = 0; i < this.items.length; i++) {\n this.getContent(ele, this.items[i].content, 'clone');\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(ele));\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n }\n this.templateEle = [];\n this.getContent(ele, this.items[0].content, 'render');\n ele.classList.remove(CLS_ACTIVE);\n }\n setStyle(this.cntEle, { 'height': this.maxHeight + 'px' });\n }\n else {\n setStyle(this.cntEle, { 'height': 'auto' });\n }\n };\n Tab.prototype.getHeight = function (ele) {\n var cs = window.getComputedStyle(ele);\n return ele.offsetHeight + parseFloat(cs.getPropertyValue('padding-top')) + parseFloat(cs.getPropertyValue('padding-bottom')) +\n parseFloat(cs.getPropertyValue('margin-top')) + parseFloat(cs.getPropertyValue('margin-bottom'));\n };\n Tab.prototype.setActiveBorder = function () {\n var trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element);\n if (this.headerPlacement === 'Bottom') {\n trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element.children[1]);\n }\n if (trg === null) {\n return;\n }\n var root = closest(trg, '.' + CLS_TAB);\n if (this.element !== root) {\n return;\n }\n var hsCnt = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS + ' .e-hscroll-content', this.element.children[0]);\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n var bar = select('.' + CLS_HEADER + ' .' + CLS_INDICATOR, this.element);\n if (this.headerPlacement === 'Bottom') {\n hsCnt = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS + ' .e-hscroll-content', this.element.children[1]);\n }\n var tbWidth = (isNOU(hsCnt)) ? this.tbItems.offsetWidth : hsCnt.offsetWidth;\n if (tbWidth !== 0) {\n setStyle(bar, { 'left': trg.offsetLeft + 'px', 'right': tbWidth - (trg.offsetLeft + trg.offsetWidth) + 'px' });\n }\n else {\n setStyle(bar, { 'left': 'auto', 'right': 'auto' });\n }\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.remove(CLS_HIDDEN);\n }\n };\n Tab.prototype.setActive = function (value) {\n this.tbItem = selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element);\n var trg = this.tbItem[value];\n if (value >= 0) {\n this.setProperties({ selectedItem: value }, true);\n }\n if (value < 0 || isNaN(value) || this.tbItem.length === 0) {\n return;\n }\n if (trg.classList.contains(CLS_ACTIVE)) {\n this.setActiveBorder();\n return;\n }\n if (!this.isTemplate) {\n var prev = this.tbItem[this.prevIndex];\n if (!isNOU(prev)) {\n prev.removeAttribute('aria-controls');\n }\n attributes(trg, { 'aria-controls': CLS_CONTENT + '_' + value });\n }\n var id = trg.id;\n this.removeActiveClass(id);\n trg.classList.add(CLS_ACTIVE);\n trg.setAttribute('aria-selected', 'true');\n var no = Number(this.extIndex(id));\n if (isNOU(this.prevActiveEle)) {\n this.prevActiveEle = CLS_CONTENT + '_' + no;\n }\n attributes(this.element, { 'aria-activedescendant': id });\n if (this.isTemplate) {\n if (select('.' + CLS_CONTENT, this.element).children.length > 0) {\n var trg_1 = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\n if (!isNOU(trg_1)) {\n trg_1.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n }\n else {\n this.cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n var item = this.getTrgContent(this.cntEle, this.extIndex(id));\n if (isNOU(item)) {\n this.cntEle.appendChild(this.createElement('div', {\n id: CLS_CONTENT + '_' + this.extIndex(id), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + this.extIndex(id) }\n }));\n var eleTrg = this.getTrgContent(this.cntEle, this.extIndex(id));\n var itemIndex = Array.prototype.indexOf.call(this.itemIndexArray, trg.id);\n this.getContent(eleTrg, this.items[itemIndex].content, 'render');\n }\n else {\n item.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n this.setActiveBorder();\n var curActItem = select('.' + CLS_HEADER + ' #' + id, this.element);\n this.refreshItemVisibility(curActItem);\n curActItem.firstChild.focus();\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: trg,\n selectedIndex: value,\n isSwiped: this.isSwipeed\n };\n if (!this.initRender || this.selectedItem !== 0) {\n this.trigger('selected', eventArg);\n }\n };\n Tab.prototype.setItems = function (items) {\n this.isReplace = true;\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.tbObj.items = this.parseObject(items, 0);\n this.tbObj.dataBind();\n this.isReplace = false;\n };\n Tab.prototype.setRTL = function (value) {\n this.tbObj.enableRtl = value;\n this.tbObj.dataBind();\n this.setCssClass(this.element, CLS_RTL, value);\n this.refreshActiveBorder();\n };\n Tab.prototype.refreshActiveBorder = function () {\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n this.setActiveBorder();\n };\n Tab.prototype.wireEvents = function () {\n window.addEventListener('resize', this.refreshActElePosition.bind(this));\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'keydown', this.spaceKeyDown, this);\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n this.keyModule = new KeyboardEvents(this.element, { keyAction: this.keyHandler.bind(this), keyConfigs: this.keyConfigs });\n this.tabKeyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyHandler.bind(this),\n keyConfigs: { openPopup: 'shift+f10', tab: 'tab', shiftTab: 'shift+tab' },\n eventName: 'keydown'\n });\n };\n Tab.prototype.unWireEvents = function () {\n this.keyModule.destroy();\n this.tabKeyModule.destroy();\n if (!isNOU(this.cntEle)) {\n this.touchModule.destroy();\n }\n window.removeEventListener('resize', this.refreshActElePosition.bind(this));\n this.element.removeEventListener('mouseover', this.hoverHandler.bind(this));\n };\n Tab.prototype.clickHandler = function (args) {\n this.element.classList.remove(CLS_FOCUS);\n var trg = args.originalEvent.target;\n var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (trg.classList.contains(CLS_ICON_CLOSE)) {\n this.removeTab(trgIndex);\n }\n else {\n this.isPopup = false;\n if (!isNOU(trgParent) && trgIndex !== this.selectedItem) {\n this.select(trgIndex);\n }\n }\n };\n Tab.prototype.swipeHandler = function (e) {\n if (e.velocity < 3 && isNOU(e.originalEvent.changedTouches)) {\n return;\n }\n this.isSwipeed = true;\n if (e.swipeDirection === 'Right' && this.selectedItem !== 0) {\n for (var k = this.selectedItem - 1; k >= 0; k--) {\n if (!this.tbItem[k].classList.contains('e-hidden')) {\n this.select(k);\n break;\n }\n }\n }\n else if (e.swipeDirection === 'Left' && (this.selectedItem !== selectAll('.' + CLS_TB_ITEM, this.element).length - 1)) {\n for (var i = this.selectedItem + 1; i < this.tbItem.length; i++) {\n if (!this.tbItem[i].classList.contains('e-hidden')) {\n this.select(i);\n break;\n }\n }\n }\n this.isSwipeed = false;\n };\n Tab.prototype.spaceKeyDown = function (e) {\n if ((e.keyCode === 32 && e.which === 32) || (e.keyCode === 35 && e.which === 35)) {\n var clstHead = closest(e.target, '.' + CLS_HEADER);\n if (!isNOU(clstHead)) {\n e.preventDefault();\n }\n }\n };\n Tab.prototype.keyHandler = function (e) {\n if (this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n this.element.classList.add(CLS_FOCUS);\n var trg = e.target;\n var actEle = select('.' + CLS_HEADER + ' .' + CLS_ACTIVE, this.element);\n var tabItem = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', this.element);\n this.popEle = select('.' + CLS_HEADER + ' .' + CLS_TB_POP, this.element);\n if (!isNOU(this.popEle)) {\n this.popObj = this.popEle.ej2_instances[0];\n }\n switch (e.action) {\n case 'space':\n case 'enter':\n if (trg.parentElement.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (e.action === 'enter' && trg.classList.contains('e-hor-nav')) {\n break;\n }\n this.keyPressed(trg);\n break;\n case 'tab':\n case 'shiftTab':\n if (trg.classList.contains(CLS_WRAP)\n && closest(trg, '.' + CLS_TB_ITEM).classList.contains(CLS_ACTIVE) === false) {\n trg.setAttribute('tabindex', '-1');\n }\n if (this.popObj && isVisible(this.popObj.element)) {\n this.popObj.hide(this.hide);\n }\n actEle.children.item(0).setAttribute('tabindex', '0');\n break;\n case 'moveLeft':\n case 'moveRight':\n var item = closest(document.activeElement, '.' + CLS_TB_ITEM);\n if (!isNOU(item)) {\n this.refreshItemVisibility(item);\n }\n break;\n case 'openPopup':\n e.preventDefault();\n if (!isNOU(this.popEle) && this.popEle.classList.contains(CLS_POPUP_CLOSE)) {\n this.popObj.show(this.show);\n }\n break;\n case 'delete':\n var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n if (this.showCloseButton === true && !isNOU(trgParent)) {\n var nxtSib = trgParent.nextSibling;\n if (!isNOU(nxtSib) && nxtSib.classList.contains(CLS_TB_ITEM)) {\n nxtSib.firstChild.focus();\n }\n this.removeTab(this.getEleIndex(trgParent));\n }\n this.setActiveBorder();\n break;\n }\n };\n Tab.prototype.refreshActElePosition = function () {\n var activeEle = select('.' + CLS_TB_ITEM + '.' + CLS_TB_POPUP + '.' + CLS_ACTIVE, this.element);\n if (!isNOU(activeEle)) {\n this.select(this.getEleIndex(activeEle));\n }\n this.refreshActiveBorder();\n };\n Tab.prototype.refreshItemVisibility = function (target) {\n var scrCnt = select('.e-hscroll-content', this.tbItems);\n if (!isNOU(scrCnt)) {\n var scrBar = select('.e-hscroll-bar', this.tbItems);\n var scrStart = scrBar.scrollLeft;\n var scrEnd = scrStart + scrBar.offsetWidth;\n var eleStart = target.offsetLeft;\n var eleWidth = target.offsetWidth;\n var eleEnd = target.offsetLeft + target.offsetWidth;\n if ((scrStart < eleStart) && (scrEnd < eleEnd)) {\n var eleViewRange = scrEnd - eleStart;\n scrBar.scrollLeft = scrStart + (eleWidth - eleViewRange);\n }\n else {\n if ((scrStart > eleStart) && (scrEnd > eleEnd)) {\n var eleViewRange = eleEnd - scrStart;\n scrBar.scrollLeft = scrStart - (eleWidth - eleViewRange);\n }\n }\n }\n else {\n return;\n }\n };\n Tab.prototype.hoverHandler = function (e) {\n var trg = e.target;\n if (!isNOU(trg.classList) && trg.classList.contains(CLS_ICON_CLOSE)) {\n trg.setAttribute('title', new L10n('tab', { closeButtonTitle: this.title }, this.locale).getConstant('closeButtonTitle'));\n }\n };\n /**\n * Enables or disables the specified Tab item. On passing value as `false`, the item will be disabled.\n * @param {number} index - Index value of target Tab item.\n * @param {boolean} value - Boolean value that determines whether the command should be enabled or disabled.\n * By default, isEnable is true.\n * @returns void.\n */\n Tab.prototype.enableTab = function (index, value) {\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(tbItems)) {\n return;\n }\n if (value === true) {\n tbItems.classList.remove(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstChild.setAttribute('tabindex', '-1');\n }\n else {\n tbItems.classList.add(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstChild.removeAttribute('tabindex');\n if (tbItems.classList.contains(CLS_ACTIVE)) {\n this.select(index + 1);\n }\n }\n if (!isNOU(this.items[index])) {\n this.items[index].disabled = !value;\n this.dataBind();\n }\n tbItems.setAttribute('aria-disabled', (value === true) ? 'false' : 'true');\n };\n /**\n * Adds new items to the Tab that accepts an array as Tab items.\n * @param {TabItemsModel[]} items - An array of item that is added to the Tab.\n * @param {number} index - Number value that determines where the items to be added. By default, index is 0.\n * @returns void.\n */\n Tab.prototype.addTab = function (items, index) {\n var _this = this;\n var lastEleIndex = 0;\n if (!this.isReplace) {\n this.trigger('adding', { addedItems: items });\n }\n this.hdrEle = select('.' + CLS_HEADER, this.element);\n if (isNOU(this.hdrEle)) {\n this.items = items;\n this.reRenderItems();\n return;\n }\n var itemsCount = selectAll('.' + CLS_TB_ITEM, this.element).length;\n if (itemsCount !== 0) {\n lastEleIndex = this.lastIndex + 1;\n }\n if (isNOU(index)) {\n index = itemsCount - 1;\n }\n if (itemsCount < index || index < 0 || isNaN(index)) {\n return;\n }\n if (itemsCount === 0 && !isNOU(this.hdrEle)) {\n this.hdrEle.style.display = '';\n }\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n var tabItems = this.parseObject(items, index);\n items.forEach(function (item, place) {\n _this.items.splice((index + place), 0, item);\n if (_this.isTemplate && !isNOU(item.header) && !isNOU(item.header.text)) {\n var no = lastEleIndex + place;\n var ele = _this.createElement('div', {\n id: CLS_CONTENT + '_' + no, className: CLS_ITEM, attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + no }\n });\n _this.cntEle.insertBefore(ele, _this.cntEle.children[(index + place)]);\n var eleTrg = _this.getTrgContent(_this.cntEle, no.toString());\n _this.getContent(eleTrg, item.content, 'render');\n }\n });\n this.tbObj.addItems(tabItems, index);\n if (!this.isReplace) {\n this.trigger('added', { addedItems: items });\n }\n if (this.selectedItem === index) {\n this.select(index);\n }\n else {\n this.setActiveBorder();\n }\n };\n /**\n * Removes the items in the Tab from the specified index.\n * @param {number} index - Index of target item that is going to be removed.\n * @returns void.\n */\n Tab.prototype.removeTab = function (index) {\n var trg = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n var removeArgs = { removedItem: trg, removedIndex: index };\n this.trigger('removing', removeArgs);\n if (isNOU(trg)) {\n return;\n }\n this.tbObj.removeItems(index);\n this.items.splice(index, 1);\n this.itemIndexArray.splice(index, 1);\n this.refreshActiveBorder();\n var cntTrg = select('#' + CLS_CONTENT + '_' + this.extIndex(trg.id), select('.' + CLS_CONTENT, this.element));\n if (!isNOU(cntTrg)) {\n detach(cntTrg);\n }\n this.trigger('removed', removeArgs);\n if (trg.classList.contains(CLS_ACTIVE)) {\n index = (index > selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', this.element).length - 1) ? index - 1 : index;\n this.enableAnimation = false;\n this.selectedItem = index;\n this.select(index);\n }\n if (selectAll('.' + CLS_TB_ITEM, this.element).length === 0) {\n this.hdrEle.style.display = 'none';\n }\n this.enableAnimation = true;\n };\n /**\n * Shows or hides the Tab that is in the specified index.\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (false) or show (true). By default, value is true.\n * @returns void.\n */\n Tab.prototype.hideTab = function (index, value) {\n var items;\n var item = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(item)) {\n return;\n }\n if (isNOU(value)) {\n value = true;\n }\n this.bdrLine.classList.add(CLS_HIDDEN);\n if (value === true) {\n item.classList.add(CLS_HIDDEN);\n items = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_HIDDEN + ')', this.tbItems);\n if (items.length !== 0 && item.classList.contains(CLS_ACTIVE)) {\n if (index !== 0) {\n for (var i = index - 1; i >= 0; i--) {\n if (!this.tbItem[i].classList.contains('e-hidden')) {\n this.select(i);\n break;\n }\n else if (i === 0) {\n for (var k = index + 1; k < this.tbItem.length; k++) {\n if (!this.tbItem[k].classList.contains('e-hidden')) {\n this.select(k);\n break;\n }\n }\n }\n }\n }\n else {\n for (var k = index + 1; k < this.tbItem.length; k++) {\n if (!this.tbItem[k].classList.contains('e-hidden')) {\n this.select(k);\n break;\n }\n }\n }\n }\n else if (items.length === 0) {\n this.element.classList.add(CLS_HIDDEN);\n }\n }\n else {\n this.element.classList.remove(CLS_HIDDEN);\n items = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_HIDDEN + ')', this.tbItems);\n if (items.length === 0) {\n this.select(index);\n }\n item.classList.remove(CLS_HIDDEN);\n }\n this.setActiveBorder();\n item.setAttribute('aria-hidden', '' + value);\n };\n /**\n * Specifies the index or HTMLElement to select an item from the Tab.\n * @param {number | HTMLElement} args - Index or DOM element is used for selecting an item from the Tab.\n * @returns void.\n */\n Tab.prototype.select = function (args) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.tbItem = selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element);\n this.prevItem = this.tbItem[this.prevIndex];\n var trg = this.tbItem[args];\n if (!isNOU(this.prevItem) && !this.prevItem.classList.contains(CLS_DISABLE)) {\n this.prevItem.children.item(0).setAttribute('tabindex', '-1');\n }\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: this.tbItem[this.selectedItem],\n selectedIndex: this.selectedItem,\n selectingItem: trg,\n selectingIndex: args,\n isSwiped: this.isSwipeed\n };\n if (!this.initRender || this.selectedItem !== 0) {\n this.trigger('selecting', eventArg);\n }\n if (eventArg.cancel) {\n return;\n }\n if (typeof args === 'number') {\n if (!isNOU(this.tbItem[args]) && this.tbItem[args].classList.contains(CLS_DISABLE)) {\n for (var i = args + 1; i < this.items.length; i++) {\n if (this.items[i].disabled === false) {\n args = i;\n break;\n }\n else {\n args = 0;\n }\n }\n }\n if (this.tbItem.length > args && args >= 0 && !isNaN(args)) {\n this.prevIndex = this.selectedItem;\n if (this.tbItem[args].classList.contains(CLS_TB_POPUP)) {\n this.setActive(this.popupHandler(this.tbItem[args]));\n }\n else {\n this.setActive(args);\n }\n }\n else {\n this.setActive(0);\n }\n }\n else if (args instanceof (HTMLElement)) {\n this.setActive(this.getEleIndex(args));\n }\n };\n /**\n * Specifies the value to disable/enable the Tab component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, Tab will be enabled (false) or disabled (true).\n * @returns void.\n */\n Tab.prototype.disable = function (value) {\n this.setCssClass(this.element, CLS_DISABLE, value);\n this.element.setAttribute('aria-disabled', '' + value);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n Tab.prototype.getPersistData = function () {\n return this.addOnPersist(['selectedItem', 'actEleId']);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Tab.prototype.getModuleName = function () {\n return 'tab';\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {TabModel} newProp\n * @param {TabModel} oldProp\n * @returns void\n * @private\n */\n Tab.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyle(this.element, { width: formatUnit(newProp.width) });\n break;\n case 'height':\n setStyle(this.element, { height: formatUnit(newProp.height) });\n this.setContentHeight(false);\n break;\n case 'cssClass':\n this.setCssClass(this.element, newProp.cssClass, true);\n break;\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProp = Object.keys(newProp.items);\n for (var i = 0; i < changedProp.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var property = Object.keys(newProp.items[index])[0];\n var oldVal = Object(oldProp.items[index])[property];\n var newVal = Object(newProp.items[index])[property];\n var hdrItem = select('.' + CLS_TB_ITEMS + ' #' + CLS_ITEM + '_' + index, this.element);\n var cntItem = select('.' + CLS_CONTENT + ' #' + CLS_CONTENT + '_' + index, this.element);\n if (property === 'header') {\n var arr = [];\n arr.push(this.items[index]);\n this.items.splice(index, 1);\n this.itemIndexArray.splice(index, 1);\n this.tbObj.items.splice(index, 1);\n var isHiddenEle = hdrItem.classList.contains(CLS_HIDDEN);\n detach(hdrItem);\n this.isReplace = true;\n this.addTab(arr, index);\n if (isHiddenEle) {\n this.hideTab(index);\n }\n this.isReplace = false;\n }\n if (property === 'content' && !isNOU(cntItem)) {\n var strVal = typeof newVal === 'string' || isNOU(newVal.innerHTML);\n if (strVal && (newVal[0] === '.' || newVal[0] === '#') && newVal.length) {\n var eleVal = document.querySelector(newVal);\n cntItem.appendChild(eleVal);\n eleVal.style.display = '';\n }\n else if (newVal === '' && oldVal[0] === '#') {\n document.body.appendChild(this.element.querySelector(oldVal)).style.display = 'none';\n cntItem.innerHTML = newVal;\n }\n else {\n cntItem.innerHTML = newVal;\n }\n }\n if (property === 'cssClass') {\n if (!isNOU(hdrItem)) {\n hdrItem.classList.remove(oldVal);\n hdrItem.classList.add(newVal);\n }\n if (!isNOU(cntItem)) {\n cntItem.classList.remove(oldVal);\n cntItem.classList.add(newVal);\n }\n }\n if (property === 'disabled') {\n this.enableTab(index, ((newVal === true) ? false : true));\n }\n }\n }\n else {\n this.lastIndex = 0;\n if (isNOU(this.tbObj)) {\n this.reRenderItems();\n }\n else {\n this.setItems(newProp.items);\n if (this.templateEle.length > 0) {\n this.expTemplateContent();\n }\n this.templateEle = [];\n select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element).innerHTML = '';\n this.select(this.selectedItem);\n }\n }\n break;\n case 'showCloseButton':\n this.setCloseButton(newProp.showCloseButton);\n break;\n case 'selectedItem':\n this.selectedItem = oldProp.selectedItem;\n this.select(newProp.selectedItem);\n break;\n case 'headerPlacement':\n var tempHdrEle = select('.' + CLS_HEADER, this.element);\n this.setOrientation(newProp.headerPlacement, tempHdrEle);\n this.select(this.selectedItem);\n break;\n case 'enableRtl':\n this.setRTL(newProp.enableRtl);\n break;\n case 'overflowMode':\n this.tbObj.overflowMode = newProp.overflowMode;\n this.tbObj.dataBind();\n this.refreshActElePosition();\n break;\n case 'heightAdjustMode':\n this.setContentHeight(false);\n this.select(this.selectedItem);\n break;\n }\n }\n };\n __decorate([\n Collection([], TabItem)\n ], Tab.prototype, \"items\", void 0);\n __decorate([\n Property('100%')\n ], Tab.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tab.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Tab.prototype, \"cssClass\", void 0);\n __decorate([\n Property(0)\n ], Tab.prototype, \"selectedItem\", void 0);\n __decorate([\n Property('Top')\n ], Tab.prototype, \"headerPlacement\", void 0);\n __decorate([\n Property('Content')\n ], Tab.prototype, \"heightAdjustMode\", void 0);\n __decorate([\n Property('Scrollable')\n ], Tab.prototype, \"overflowMode\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"showCloseButton\", void 0);\n __decorate([\n Complex({}, TabAnimationSettings)\n ], Tab.prototype, \"animation\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"adding\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"added\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"selecting\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"destroyed\", void 0);\n Tab = __decorate([\n NotifyPropertyChanges\n ], Tab);\n return Tab;\n}(Component));\nexport { Tab };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isUndefined, Browser, compile } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { rippleEffect, Animation } from '@syncfusion/ej2-base';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, closest, matches, detach, select, selectAll, isVisible, append } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined as isNOU, Touch, getValue, setValue } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-treeview';\nvar CONTROL = 'e-control';\nvar COLLAPSIBLE = 'e-icon-collapsible';\nvar EXPANDABLE = 'e-icon-expandable';\nvar LISTITEM = 'e-list-item';\nvar LISTTEXT = 'e-list-text';\nvar PARENTITEM = 'e-list-parent';\nvar HOVER = 'e-hover';\nvar ACTIVE = 'e-active';\nvar LOAD = 'e-icons-spinner';\nvar PROCESS = 'e-process';\nvar ICON = 'e-icons';\nvar TEXTWRAP = 'e-text-content';\nvar INPUT = 'e-input';\nvar INPUTGROUP = 'e-input-group';\nvar TREEINPUT = 'e-tree-input';\nvar EDITING = 'e-editing';\nvar RTL = 'e-rtl';\nvar DRAGITEM = 'e-drag-item';\nvar DROPPABLE = 'e-droppable';\nvar DRAGGING = 'e-dragging';\nvar SIBLING = 'e-sibling';\nvar DROPIN = 'e-drop-in';\nvar DROPNEXT = 'e-drop-next';\nvar DROPOUT = 'e-drop-out';\nvar NODROP = 'e-no-drop';\nvar FULLROWWRAP = 'e-fullrow-wrap';\nvar FULLROW = 'e-fullrow';\nvar SELECTED = 'e-selected';\nvar EXPANDED = 'e-expanded';\nvar NODECOLLAPSED = 'e-node-collapsed';\nvar DISABLE = 'e-disable';\nvar CONTENT = 'e-content';\nvar DOWNTAIL = 'e-downtail';\nvar DROPCOUNT = 'e-drop-count';\nvar CHECK = 'e-check';\nvar INDETERMINATE = 'e-stop';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar FOCUS = 'e-node-focus';\nvar IMAGE = 'e-list-img';\nvar BIGGER = 'e-bigger';\nvar SMALL = 'e-small';\nvar treeAriaAttr = {\n treeRole: 'tree',\n itemRole: 'treeitem',\n listRole: 'group',\n itemText: '',\n wrapperRole: '',\n};\n/**\n * Configures the fields to bind to the properties of node in the TreeView component.\n */\nvar FieldsSettings = /** @class */ (function (_super) {\n __extends(FieldsSettings, _super);\n function FieldsSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('child')\n ], FieldsSettings.prototype, \"child\", void 0);\n __decorate([\n Property([])\n ], FieldsSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('expanded')\n ], FieldsSettings.prototype, \"expanded\", void 0);\n __decorate([\n Property('hasChildren')\n ], FieldsSettings.prototype, \"hasChildren\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldsSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldsSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('id')\n ], FieldsSettings.prototype, \"id\", void 0);\n __decorate([\n Property('imageUrl')\n ], FieldsSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldsSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('parentID')\n ], FieldsSettings.prototype, \"parentID\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"query\", void 0);\n __decorate([\n Property('selected')\n ], FieldsSettings.prototype, \"selected\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"tableName\", void 0);\n __decorate([\n Property('text')\n ], FieldsSettings.prototype, \"text\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldsSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('navigateUrl')\n ], FieldsSettings.prototype, \"navigateUrl\", void 0);\n return FieldsSettings;\n}(ChildProperty));\nexport { FieldsSettings };\n/**\n * Configures animation settings for the TreeView component.\n */\nvar ActionSettings = /** @class */ (function (_super) {\n __extends(ActionSettings, _super);\n function ActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], ActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], ActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], ActionSettings.prototype, \"easing\", void 0);\n return ActionSettings;\n}(ChildProperty));\nexport { ActionSettings };\n/**\n * Configures the animation settings for expanding and collapsing nodes in TreeView.\n */\nvar NodeAnimationSettings = /** @class */ (function (_super) {\n __extends(NodeAnimationSettings, _super);\n function NodeAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"expand\", void 0);\n return NodeAnimationSettings;\n}(ChildProperty));\nexport { NodeAnimationSettings };\n/**\n * The TreeView component is used to represent hierarchical data in a tree like structure with advanced\n * functions to perform edit, drag and drop, selection with check-box, and more.\n * ```html\n *
    \n * ```\n * ```typescript\n * let treeObj: TreeView = new TreeView();\n * treeObj.appendTo('#tree');\n * ```\n */\nvar TreeView = /** @class */ (function (_super) {\n __extends(TreeView, _super);\n function TreeView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.preventExpand = false;\n _this.checkedElement = [];\n _this.mouseDownStatus = false;\n return _this;\n }\n TreeView_1 = TreeView;\n /**\n * Get component name.\n * @returns string\n * @private\n */\n TreeView.prototype.getModuleName = function () {\n return 'treeview';\n };\n /**\n * Initialize the event handler\n */\n TreeView.prototype.preRender = function () {\n var _this = this;\n this.checkActionNodes = [];\n this.dragStartAction = false;\n this.isAnimate = false;\n this.keyConfigs = {\n escape: 'escape',\n end: 'end',\n enter: 'enter',\n f2: 'f2',\n home: 'home',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlDown: 'ctrl+downarrow',\n ctrlUp: 'ctrl+uparrow',\n ctrlEnter: 'ctrl+enter',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n ctrlA: 'ctrl+A',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftEnter: 'shift+enter',\n shiftHome: 'shift+home',\n shiftEnd: 'shift+end',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n csEnter: 'ctrl+shift+enter',\n csHome: 'ctrl+shift+home',\n csEnd: 'ctrl+shift+end',\n space: 'space',\n };\n this.listBaseOption = {\n expandCollapse: true,\n showIcon: true,\n expandIconClass: EXPANDABLE,\n ariaAttributes: treeAriaAttr,\n expandIconPosition: 'Left',\n itemCreated: function (e) {\n _this.beforeNodeCreate(e);\n },\n };\n this.updateListProp(this.fields);\n this.aniObj = new Animation({});\n this.treeList = [];\n this.isLoaded = false;\n this.isInitalExpand = false;\n this.index = 0;\n this.setTouchClass();\n if (isNOU(this.selectedNodes)) {\n this.setProperties({ selectedNodes: [] }, true);\n }\n if (isNOU(this.checkedNodes)) {\n this.setProperties({ checkedNodes: [] }, true);\n }\n if (isNOU(this.expandedNodes)) {\n this.setProperties({ expandedNodes: [] }, true);\n }\n else {\n this.isInitalExpand = true;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n * @hidden\n */\n TreeView.prototype.getPersistData = function () {\n var keyEntity = ['selectedNodes', 'checkedNodes', 'expandedNodes'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TreeView.prototype.render = function () {\n this.initialRender = true;\n this.initialize();\n this.setDataBinding();\n this.setExpandOnType();\n this.setRipple();\n this.wireEditingEvents(this.allowEditing);\n this.setDragAndDrop(this.allowDragAndDrop);\n this.wireEvents();\n this.initialRender = false;\n };\n TreeView.prototype.initialize = function () {\n this.element.setAttribute('role', 'tree');\n this.element.setAttribute('tabindex', '0');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n this.setCssClass(null, this.cssClass);\n this.setEnableRtl();\n this.setFullRow(this.fullRowSelect);\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n };\n TreeView.prototype.setEnableRtl = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n TreeView.prototype.setRipple = function () {\n var tempStr = '.' + FULLROW + ',.' + TEXTWRAP;\n var rippleModel = {\n selector: tempStr,\n ignore: '.' + TEXTWRAP + ' > .' + ICON + ',.' + INPUTGROUP + ',.' + INPUT + ', .' + CHECKBOXWRAP\n };\n this.rippleFn = rippleEffect(this.element, rippleModel);\n var iconModel = {\n selector: '.' + TEXTWRAP + ' > .' + ICON,\n isCenterRipple: true,\n };\n this.rippleIconFn = rippleEffect(this.element, iconModel);\n };\n TreeView.prototype.setFullRow = function (isEnabled) {\n isEnabled ? addClass([this.element], FULLROWWRAP) : removeClass([this.element], FULLROWWRAP);\n };\n TreeView.prototype.setMultiSelect = function (isEnabled) {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (isEnabled) {\n firstUl.setAttribute('aria-multiselectable', 'true');\n }\n else {\n firstUl.removeAttribute('aria-multiselectable');\n }\n };\n TreeView.prototype.templateComplier = function (template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n };\n TreeView.prototype.setDataBinding = function () {\n var _this = this;\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager) {\n if (this.fields.dataSource.ready) {\n this.fields.dataSource.ready.then(function (e) {\n if (_this.fields.dataSource instanceof DataManager && _this.fields.dataSource.dataSource.offline) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n _this.renderItems(true);\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n }\n });\n }\n else {\n this.fields.dataSource.executeQuery(this.getQuery(this.fields)).then(function (e) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n _this.renderItems(true);\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n });\n }\n }\n else {\n this.treeList.pop();\n if (isNOU(this.fields.dataSource)) {\n this.rootData = this.treeData = [];\n }\n else {\n this.treeData = JSON.parse(JSON.stringify(this.fields.dataSource));\n this.setRootData();\n }\n this.isNumberTypeId = this.getType();\n this.renderItems(false);\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.getQuery = function (mapper, value) {\n if (value === void 0) { value = null; }\n var columns = [];\n var query;\n if (!mapper.query) {\n query = new Query();\n var prop = this.getActualProperties(mapper);\n for (var _i = 0, _a = Object.keys(prop); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col !== 'dataSource' && col !== 'tableName' && col !== 'child' && !!mapper[col]\n && columns.indexOf(mapper[col]) === -1) {\n columns.push(mapper[col]);\n }\n }\n query.select(columns);\n if (prop.hasOwnProperty('tableName')) {\n query.from(mapper.tableName);\n }\n }\n else {\n query = mapper.query.clone();\n }\n ListBase.addSorting(this.sortOrder, mapper.text, query);\n if (!isNOU(value) && !isNOU(mapper.parentID)) {\n query.where(mapper.parentID, 'equal', (this.isNumberTypeId ? parseFloat(value) : value));\n }\n return query;\n };\n TreeView.prototype.getType = function () {\n return this.treeData[0] ? ((typeof getValue(this.fields.id, this.treeData[0]) === 'number') ? true : false) : false;\n };\n TreeView.prototype.setRootData = function () {\n this.dataType = this.getDataType(this.treeData, this.fields);\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n var rootItems = this.getChildNodes(this.treeData, undefined, true);\n if (isNOU(rootItems)) {\n this.rootData = [];\n }\n else {\n this.rootData = rootItems;\n }\n }\n else {\n this.rootData = this.treeData;\n }\n };\n TreeView.prototype.renderItems = function (isSorted) {\n this.listBaseOption.ariaAttributes.level = 1;\n this.ulElement = ListBase.createList(this.createElement, isSorted ? this.rootData : this.getSortedData(this.rootData), this.listBaseOption);\n this.element.appendChild(this.ulElement);\n this.finalizeNode(this.element);\n };\n TreeView.prototype.beforeNodeCreate = function (e) {\n if (this.showCheckBox) {\n var checkboxEle = createCheckBox(this.createElement, true, { cssClass: this.touchClass });\n var icon = select('div.' + ICON, e.item);\n var id = e.item.getAttribute('data-uid');\n e.item.childNodes[0].insertBefore(checkboxEle, e.item.childNodes[0].childNodes[isNOU(icon) ? 0 : 1]);\n var checkValue = getValue(e.fields.isChecked, e.curData);\n if (this.checkedNodes.indexOf(id) > -1) {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else if (!isNOU(checkValue) && checkValue.toString() === 'true') {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else {\n checkboxEle.setAttribute('aria-checked', 'false');\n }\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n EventHandler.add(frame, 'mousedown', this.frameMouseHandler, this);\n EventHandler.add(frame, 'mouseup', this.frameMouseHandler, this);\n }\n if (this.fullRowSelect) {\n this.createFullRow(e.item);\n }\n if (this.allowMultiSelection && !e.item.classList.contains(SELECTED)) {\n e.item.setAttribute('aria-selected', 'false');\n }\n var fields = e.fields;\n this.addActionClass(e, fields.selected, SELECTED);\n this.addActionClass(e, fields.expanded, EXPANDED);\n if (!isNOU(this.nodeTemplateFn)) {\n var textEle = e.item.querySelector('.' + LISTTEXT);\n textEle.innerHTML = '';\n append(this.nodeTemplateFn(e.curData), textEle);\n }\n var eventArgs = {\n node: e.item,\n nodeData: e.curData,\n text: e.text,\n };\n this.trigger('drawNode', eventArgs);\n };\n TreeView.prototype.frameMouseHandler = function (e) {\n var rippleSpan = select('.' + CHECKBOXRIPPLE, e.target.parentElement);\n rippleMouseHandler(e, rippleSpan);\n };\n TreeView.prototype.addActionClass = function (e, action, cssClass) {\n var data = e.curData;\n var actionValue = getValue(action, data);\n if (!isNOU(actionValue) && actionValue.toString() !== 'false') {\n e.item.classList.add(cssClass);\n }\n };\n TreeView.prototype.getDataType = function (ds, mapper) {\n if (this.fields.dataSource instanceof DataManager) {\n for (var i = 0; i < ds.length; i++) {\n if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i]))) {\n return 1;\n }\n }\n return 2;\n }\n for (var i = 0, len = ds.length; i < len; i++) {\n if ((typeof mapper.child === 'string') && !isNOU(getValue(mapper.child, ds[i]))) {\n return 2;\n }\n if (!isNOU(getValue(mapper.parentID, ds[i])) || !isNOU(getValue(mapper.hasChildren, ds[i]))) {\n return 1;\n }\n }\n return 1;\n };\n TreeView.prototype.getGroupedData = function (dataSource, groupBy) {\n var cusQuery = new Query().group(groupBy);\n var ds = ListBase.getDataSource(dataSource, cusQuery);\n var grpItem = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n grpItem.push(itemObj);\n }\n return grpItem;\n };\n TreeView.prototype.getSortedData = function (list) {\n if (list && this.sortOrder !== 'None') {\n list = ListBase.getDataSource(list, ListBase.addSorting(this.sortOrder, this.fields.text));\n }\n return list;\n };\n TreeView.prototype.finalizeNode = function (element) {\n var iNodes = selectAll('.' + IMAGE, element);\n for (var k = 0; k < iNodes.length; k++) {\n iNodes[k].setAttribute('alt', IMAGE);\n }\n if (this.isLoaded) {\n var sNodes = selectAll('.' + SELECTED, element);\n for (var i = 0; i < sNodes.length; i++) {\n this.selectNode(sNodes[i], null);\n break;\n }\n removeClass(sNodes, SELECTED);\n }\n var cNodes = selectAll('.' + LISTITEM + ':not(.' + EXPANDED + ')', element);\n for (var j = 0; j < cNodes.length; j++) {\n var icon = select('div.' + ICON, cNodes[j]);\n if (icon && icon.classList.contains(EXPANDABLE)) {\n this.disableExpandAttr(cNodes[j]);\n }\n }\n var eNodes = selectAll('.' + EXPANDED, element);\n if (!this.isInitalExpand) {\n for (var i = 0; i < eNodes.length; i++) {\n this.renderChildNodes(eNodes[i]);\n }\n }\n removeClass(eNodes, EXPANDED);\n this.updateList();\n if (this.isLoaded) {\n this.updateCheckedProp();\n }\n };\n TreeView.prototype.updateCheckedProp = function () {\n var _this = this;\n if (this.showCheckBox) {\n var nodes_1 = [].concat([], this.checkedNodes);\n this.checkedNodes.forEach(function (value, index) {\n var checkBox = _this.element.querySelector('[data-uid=\"' + value + '\"]');\n if (isNOU(checkBox)) {\n nodes_1 = nodes_1.filter(function (e) { return e !== value; });\n }\n });\n this.setProperties({ checkedNodes: nodes_1 }, true);\n }\n };\n TreeView.prototype.ensureIndeterminate = function () {\n if (this.autoCheck) {\n var liElement = selectAll('li', this.element);\n var ulElement = void 0;\n for (var i = 0; i < liElement.length; i++) {\n if (liElement[i].classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, liElement[i]);\n if (ulElement) {\n this.ensureParentCheckState(liElement[i]);\n }\n else {\n this.ensureChildCheckState(liElement[i]);\n }\n }\n }\n }\n else {\n var indeterminate = selectAll('.' + INDETERMINATE, this.element);\n for (var i = 0; i < indeterminate.length; i++) {\n indeterminate[i].classList.remove(INDETERMINATE);\n }\n }\n };\n TreeView.prototype.ensureParentCheckState = function (element) {\n if (!isNOU(element)) {\n if (element.classList.contains(ROOT)) {\n return;\n }\n var ulElement = element;\n if (element.classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, element);\n }\n var checkedNodes = selectAll('.' + CHECK, ulElement);\n var nodes = selectAll('.' + LISTITEM, ulElement);\n var checkBoxEle = element.getElementsByClassName(CHECKBOXWRAP)[0];\n if (nodes.length === checkedNodes.length) {\n this.changeState(checkBoxEle, 'check', null, true, true);\n }\n else if (checkedNodes.length > 0) {\n this.changeState(checkBoxEle, 'indeterminate', null, true, true);\n }\n else if (checkedNodes.length === 0) {\n this.changeState(checkBoxEle, 'uncheck', null, true, true);\n }\n var parentUL = closest(element, '.' + PARENTITEM);\n if (!isNOU(parentUL)) {\n var currentParent = closest(parentUL, '.' + LISTITEM);\n this.ensureParentCheckState(currentParent);\n }\n }\n };\n TreeView.prototype.ensureChildCheckState = function (element, e) {\n if (!isNOU(element)) {\n var childElement = select('.' + PARENTITEM, element);\n var checkBoxes = void 0;\n if (!isNOU(childElement)) {\n checkBoxes = selectAll('.' + CHECKBOXWRAP, childElement);\n var isChecked = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n var checkedState = void 0;\n for (var index = 0; index < checkBoxes.length; index++) {\n if (!isNOU(this.currentLoadData) && !isNOU(getValue(this.fields.isChecked, this.currentLoadData[index]))) {\n checkedState = getValue(this.fields.isChecked, this.currentLoadData[index]) ? 'check' : 'uncheck';\n if (this.ele !== -1) {\n checkedState = isChecked ? 'check' : 'uncheck';\n }\n }\n else {\n var isNodeChecked = checkBoxes[index].getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n checkedState = (!this.isLoaded && isNodeChecked) ? 'check' : (isChecked ? 'check' : 'uncheck');\n }\n this.changeState(checkBoxes[index], checkedState, e, true, true);\n }\n }\n }\n };\n TreeView.prototype.doCheckBoxAction = function (nodes, doCheck) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var checkBox = select('.' + PARENTITEM + ' .' + CHECKBOXWRAP, liEle);\n this.validateCheckNode(checkBox, !doCheck, liEle, null);\n }\n }\n else {\n var checkBoxes = selectAll('.' + CHECKBOXWRAP, this.element);\n for (var index = 0; index < checkBoxes.length; index++) {\n this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck');\n }\n }\n };\n TreeView.prototype.changeState = function (wrapper, state, e, isPrevent, isAdd) {\n var ariaState;\n var eventArgs;\n var currLi = closest(wrapper, '.' + LISTITEM);\n if (!isPrevent) {\n this.checkActionNodes = [];\n eventArgs = this.getCheckEvent(currLi, state, e);\n this.trigger('nodeChecking', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n this.addCheck(currLi);\n ariaState = 'true';\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n this.removeCheck(currLi);\n ariaState = 'false';\n }\n else if (state === 'indeterminate' && !frameSpan.classList.contains(INDETERMINATE) && this.autoCheck) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n this.removeCheck(currLi);\n ariaState = 'mixed';\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n if (isAdd) {\n var data = [].concat([], this.checkActionNodes);\n eventArgs = this.getCheckEvent(currLi, state, e);\n if (isUndefined(isPrevent)) {\n eventArgs.data = data;\n }\n }\n if (!isPrevent) {\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n eventArgs.data[0].checked = ariaState;\n this.trigger('nodeChecked', eventArgs);\n this.checkActionNodes = [];\n }\n }\n };\n TreeView.prototype.addCheck = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n };\n TreeView.prototype.removeCheck = function (liEle) {\n var index = this.checkedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.checkedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.getCheckEvent = function (currLi, action, e) {\n this.checkActionNodes.push(this.getNodeData(currLi));\n var nodeData = this.checkActionNodes;\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, data: nodeData };\n };\n TreeView.prototype.finalize = function () {\n var firstUl = select('.' + PARENTITEM, this.element);\n firstUl.setAttribute('role', treeAriaAttr.treeRole);\n this.setMultiSelect(this.allowMultiSelection);\n var firstNode = select('.' + LISTITEM, this.element);\n if (firstNode) {\n addClass([firstNode], FOCUS);\n this.updateIdAttr(null, firstNode);\n }\n this.hasPid = this.rootData[0] ? this.rootData[0].hasOwnProperty(this.fields.parentID) : false;\n this.doExpandAction();\n };\n TreeView.prototype.doExpandAction = function () {\n var eUids = this.expandedNodes;\n if (this.isInitalExpand && eUids.length > 0) {\n this.setProperties({ expandedNodes: [] }, true);\n if (this.fields.dataSource instanceof DataManager) {\n this.expandGivenNodes(eUids);\n }\n else {\n for (var i = 0; i < eUids.length; i++) {\n var eNode = select('[data-uid=\"' + eUids[i] + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null);\n }\n }\n }\n this.afterFinalized();\n }\n }\n else {\n this.afterFinalized();\n }\n };\n TreeView.prototype.expandGivenNodes = function (arr) {\n var proxy = this;\n this.expandCallback(arr[this.index], function () {\n proxy.index++;\n if (proxy.index < arr.length) {\n proxy.expandGivenNodes(arr);\n }\n else {\n proxy.afterFinalized();\n }\n });\n };\n TreeView.prototype.expandCallback = function (eUid, callback) {\n var eNode = select('[data-uid=\"' + eUid + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null, false, callback);\n }\n else {\n callback();\n }\n }\n else {\n callback();\n }\n };\n TreeView.prototype.afterFinalized = function () {\n this.doSelectionAction();\n this.updateCheckedProp();\n this.isLoaded = true;\n this.isAnimate = true;\n this.isInitalExpand = false;\n var eventArgs = { data: this.treeData };\n this.trigger('dataBound', eventArgs);\n };\n TreeView.prototype.doSelectionAction = function () {\n var sNodes = selectAll('.' + SELECTED, this.element);\n var sUids = this.selectedNodes;\n if (sUids.length > 0) {\n this.setProperties({ selectedNodes: [] }, true);\n for (var i = 0; i < sUids.length; i++) {\n var sNode = select('[data-uid=\"' + sUids[i] + '\"]', this.element);\n this.selectNode(sNode, null, true);\n if (!this.allowMultiSelection) {\n break;\n }\n }\n }\n else {\n this.selectGivenNodes(sNodes);\n }\n removeClass(sNodes, SELECTED);\n };\n TreeView.prototype.selectGivenNodes = function (sNodes) {\n for (var i = 0; i < sNodes.length; i++) {\n if (!sNodes[i].classList.contains('e-disable')) {\n this.selectNode(sNodes[i], null, true);\n }\n if (!this.allowMultiSelection) {\n break;\n }\n }\n };\n TreeView.prototype.clickHandler = function (event) {\n var target = event.originalEvent.target;\n EventHandler.remove(this.element, 'contextmenu', this.preventContextMenu);\n if (!target || this.dragStartAction) {\n return;\n }\n else {\n var classList = target.classList;\n var li = closest(target, '.' + LISTITEM);\n if (!li) {\n return;\n }\n else {\n this.removeHover();\n this.setFocusElement(li);\n if (this.showCheckBox && !li.classList.contains('e-disable')) {\n var checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNOU(checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, checkWrapper);\n this.validateCheckNode(checkWrapper, checkElement.classList.contains(CHECK), li, event.originalEvent);\n this.triggerClickEvent(event.originalEvent, li);\n return;\n }\n }\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(li, target, event);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, target, event);\n }\n else {\n if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n this.triggerClickEvent(event.originalEvent, li);\n }\n }\n };\n TreeView.prototype.nodeCheckingEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n this.checkActionNodes = [];\n var ariaState = !isCheck ? 'true' : 'false';\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n var eventArgs = this.getCheckEvent(currLi, isCheck ? 'uncheck' : 'check', e);\n this.trigger('nodeChecking', eventArgs);\n return eventArgs;\n };\n TreeView.prototype.nodeCheckedEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n var eventArgs = this.getCheckEvent(wrapper, isCheck ? 'uncheck' : 'check', e);\n eventArgs.data = eventArgs.data.splice(0, eventArgs.data.length - 1);\n this.trigger('nodeChecked', eventArgs);\n };\n TreeView.prototype.triggerClickEvent = function (e, li) {\n var eventArgs = {\n event: e,\n node: li,\n };\n this.trigger('nodeClicked', eventArgs);\n };\n TreeView.prototype.expandNode = function (currLi, icon) {\n var _this = this;\n if (icon.classList.contains(LOAD)) {\n this.hideSpinner(icon);\n }\n if (!this.initialRender) {\n icon.classList.add('interaction');\n }\n if (this.preventExpand !== true) {\n removeClass([icon], EXPANDABLE);\n addClass([icon], COLLAPSIBLE);\n var start_1 = 0;\n var end_1 = 0;\n var proxy_1 = this;\n var ul_1 = select('.' + PARENTITEM, currLi);\n var liEle_1 = currLi;\n this.setHeight(liEle_1, ul_1);\n if (this.isAnimate) {\n this.aniObj.animate(ul_1, {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing,\n begin: function (args) {\n liEle_1.style.overflow = 'hidden';\n start_1 = liEle_1.offsetHeight;\n end_1 = select('.' + TEXTWRAP, currLi).offsetHeight;\n },\n progress: function (args) {\n args.element.style.display = 'block';\n proxy_1.animateHeight(args, start_1, end_1);\n },\n end: function (args) {\n args.element.style.display = 'block';\n _this.expandedNode(liEle_1, ul_1, icon);\n }\n });\n }\n else {\n this.expandedNode(liEle_1, ul_1, icon);\n }\n }\n else {\n var ul = select('.' + PARENTITEM, currLi);\n ul.style.display = 'none';\n if (this.fields.dataSource instanceof DataManager === true) {\n this.preventExpand = false;\n }\n }\n if (this.initialRender) {\n icon.classList.add('interaction');\n }\n };\n TreeView.prototype.expandedNode = function (currLi, ul, icon) {\n ul.style.display = 'block';\n currLi.style.display = 'block';\n currLi.style.overflow = '';\n currLi.style.height = '';\n removeClass([icon], PROCESS);\n this.addExpand(currLi);\n if (this.isLoaded && this.expandArgs) {\n this.expandArgs = this.getExpandEvent(currLi, null);\n this.trigger('nodeExpanded', this.expandArgs);\n }\n };\n TreeView.prototype.addExpand = function (liEle) {\n liEle.setAttribute('aria-expanded', 'true');\n removeClass([liEle], NODECOLLAPSED);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.expandedNodes.indexOf(id) === -1) {\n this.expandedNodes.push(id);\n }\n };\n TreeView.prototype.collapseNode = function (currLi, icon, e) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n var colArgs;\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeCollapsing', colArgs);\n if (colArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n removeClass([icon], COLLAPSIBLE);\n addClass([icon], EXPANDABLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n if (this.isAnimate) {\n this.aniObj.animate(ul, {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n start = select('.' + TEXTWRAP, currLi).offsetHeight;\n end = liEle.offsetHeight;\n },\n progress: function (args) {\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n args.element.style.display = 'none';\n _this.collapsedNode(liEle, ul, icon, colArgs);\n }\n });\n }\n else {\n this.collapsedNode(liEle, ul, icon, colArgs);\n }\n };\n TreeView.prototype.collapsedNode = function (liEle, ul, icon, colArgs) {\n ul.style.display = 'none';\n liEle.style.overflow = '';\n liEle.style.height = '';\n removeClass([icon], PROCESS);\n this.removeExpand(liEle);\n if (this.isLoaded) {\n this.trigger('nodeCollapsed', colArgs);\n }\n };\n TreeView.prototype.removeExpand = function (liEle, toRemove) {\n if (toRemove) {\n liEle.removeAttribute('aria-expanded');\n }\n else {\n this.disableExpandAttr(liEle);\n }\n var index = this.expandedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.expandedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.disableExpandAttr = function (liEle) {\n liEle.setAttribute('aria-expanded', 'false');\n addClass([liEle], NODECOLLAPSED);\n };\n TreeView.prototype.setHeight = function (currLi, ul) {\n ul.style.display = 'block';\n ul.style.visibility = 'hidden';\n currLi.style.height = currLi.offsetHeight + 'px';\n ul.style.display = 'none';\n ul.style.visibility = '';\n };\n TreeView.prototype.animateHeight = function (args, start, end) {\n var remaining = (args.duration - args.timeStamp) / args.duration;\n var currentHeight = (end - start) * remaining + start;\n args.element.parentElement.style.height = currentHeight + 'px';\n };\n TreeView.prototype.renderChildNodes = function (parentLi, expandChild, callback) {\n var _this = this;\n var eicon = select('div.' + ICON, parentLi);\n if (isNOU(eicon)) {\n return;\n }\n this.showSpinner(eicon);\n var childItems;\n if (this.fields.dataSource instanceof DataManager) {\n var level = this.parents(parentLi, '.' + PARENTITEM).length;\n var mapper_1 = this.getChildFields(this.fields, level, 1);\n if (isNOU(mapper_1) || isNOU(mapper_1.dataSource)) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n return;\n }\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager && (this.fields.dataSource.dataSource.offline)) {\n this.treeList.pop();\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.loadChild(childItems, mapper_1, eicon, parentLi, expandChild, callback);\n }\n else {\n mapper_1.dataSource.executeQuery(this.getQuery(mapper_1, parentLi.getAttribute('data-uid'))).then(function (e) {\n _this.treeList.pop();\n childItems = e.result;\n _this.loadChild(childItems, mapper_1, eicon, parentLi, expandChild, callback);\n });\n }\n }\n else {\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n return;\n }\n else {\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, this.getSortedData(childItems), this.listBaseOption));\n this.expandNode(parentLi, eicon);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.renderSubChild(parentLi, expandChild);\n }\n }\n };\n TreeView.prototype.loadChild = function (childItems, mapper, eicon, parentLi, expandChild, callback) {\n this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n }\n else {\n this.updateListProp(mapper);\n if (this.fields.dataSource instanceof DataManager && !this.fields.dataSource.dataSource.offline) {\n var id = parentLi.getAttribute('data-uid');\n var nodeData = this.getNodeObject(id);\n setValue('child', childItems, nodeData);\n }\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, childItems, this.listBaseOption));\n this.expandNode(parentLi, eicon);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.renderSubChild(parentLi, expandChild);\n }\n if (callback) {\n callback();\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.ensureCheckNode = function (element) {\n if (this.showCheckBox) {\n this.ele = (this.checkedElement) ? this.checkedElement.indexOf(element.getAttribute('data-uid')) : null;\n if (this.autoCheck) {\n this.ensureChildCheckState(element);\n this.ensureParentCheckState(element);\n }\n }\n this.currentLoadData = null;\n };\n TreeView.prototype.getFields = function (mapper, nodeLevel, dataLevel) {\n if (nodeLevel === dataLevel) {\n return mapper;\n }\n else {\n return this.getFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildFields = function (mapper, nodeLevel, dataLevel) {\n var childData;\n if (nodeLevel === dataLevel) {\n return this.getChildMapper(mapper);\n }\n else {\n return this.getChildFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildMapper = function (mapper) {\n return (typeof mapper.child === 'string' || isNOU(mapper.child)) ? mapper : mapper.child;\n };\n TreeView.prototype.getChildNodes = function (obj, parentId, isRoot) {\n if (isRoot === void 0) { isRoot = false; }\n var childNodes;\n if (isNOU(obj)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n return this.getChildGroup(this.groupedData, parentId, isRoot);\n }\n else {\n if (typeof this.fields.child === 'string') {\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, obj[i]);\n if (dataId && dataId.toString() === parentId) {\n return getValue(this.fields.child, obj[i]);\n }\n else if (!isNOU(getValue(this.fields.child, obj[i]))) {\n childNodes = this.getChildNodes(getValue(this.fields.child, obj[i]), parentId);\n if (childNodes !== undefined) {\n break;\n }\n }\n }\n }\n }\n return childNodes;\n };\n TreeView.prototype.getChildGroup = function (data, parentId, isRoot) {\n var childNodes;\n if (isNOU(data)) {\n return childNodes;\n }\n for (var i = 0, objlen = data.length; i < objlen; i++) {\n if (!isNOU(data[i][0]) && !isNOU(getValue(this.fields.parentID, data[i][0]))) {\n if (getValue(this.fields.parentID, data[i][0]).toString() === parentId) {\n return data[i];\n }\n }\n else if (isRoot) {\n return data[i];\n }\n else {\n return [];\n }\n }\n return childNodes;\n };\n TreeView.prototype.renderSubChild = function (element, expandChild) {\n if (expandChild) {\n var cIcons = selectAll('.' + EXPANDABLE, element);\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n var curLi = closest(icon, '.' + LISTITEM);\n this.expandArgs = this.getExpandEvent(curLi, null);\n this.trigger('nodeExpanding', this.expandArgs);\n this.renderChildNodes(curLi, expandChild);\n }\n }\n };\n TreeView.prototype.toggleSelect = function (li, e, multiSelect) {\n if (!li.classList.contains('e-disable')) {\n if (this.allowMultiSelection && ((e && e.ctrlKey) || multiSelect) && this.isActive(li)) {\n this.unselectNode(li, e);\n }\n else {\n this.selectNode(li, e, multiSelect);\n }\n }\n };\n TreeView.prototype.isActive = function (li) {\n return li.classList.contains(ACTIVE) ? true : false;\n };\n TreeView.prototype.selectNode = function (li, e, multiSelect) {\n if (isNOU(li) || (!this.allowMultiSelection && this.isActive(li) && !isNOU(e))) {\n this.setFocusElement(li);\n return;\n }\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n if (!this.allowMultiSelection || (!multiSelect && (!e || (e && !e.ctrlKey)))) {\n this.removeSelectAll();\n }\n if (this.allowMultiSelection && e && e.shiftKey) {\n if (!this.startNode) {\n this.startNode = li;\n }\n var startIndex = this.liList.indexOf(this.startNode);\n var endIndex = this.liList.indexOf(li);\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex; i <= endIndex; i++) {\n var currNode = this.liList[i];\n if (isVisible(currNode) && !currNode.classList.contains('e-disable')) {\n this.addSelect(currNode);\n }\n }\n }\n else {\n this.startNode = li;\n this.addSelect(li);\n }\n this.setFocusElement(li);\n if (this.isLoaded) {\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.unselectNode = function (li, e) {\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'un-select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.removeSelect(li);\n this.setFocusElement(li);\n if (this.isLoaded) {\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.setFocusElement = function (li) {\n if (!isNOU(li)) {\n var focusedNode = this.getFocusedNode();\n if (focusedNode) {\n removeClass([focusedNode], FOCUS);\n }\n addClass([li], FOCUS);\n this.updateIdAttr(focusedNode, li);\n }\n };\n TreeView.prototype.addSelect = function (liEle) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n this.selectedNodes.push(id);\n }\n };\n TreeView.prototype.removeSelect = function (liEle) {\n if (this.allowMultiSelection) {\n liEle.setAttribute('aria-selected', 'false');\n }\n else {\n liEle.removeAttribute('aria-selected');\n }\n removeClass([liEle], ACTIVE);\n var index = this.selectedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.selectedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.removeSelectAll = function () {\n var selectedLI = this.element.querySelectorAll('.' + ACTIVE);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.allowMultiSelection) {\n ele.setAttribute('aria-selected', 'false');\n }\n else {\n ele.removeAttribute('aria-selected');\n }\n }\n removeClass(selectedLI, ACTIVE);\n this.setProperties({ selectedNodes: [] }, true);\n };\n TreeView.prototype.getSelectEvent = function (currLi, action, e) {\n var nodeData = this.getNodeData(currLi);\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData };\n };\n TreeView.prototype.setExpandOnType = function () {\n this.expandOnType = (this.expandOn === 'Auto') ? (Browser.isDevice ? 'Click' : 'DblClick') : this.expandOn;\n };\n TreeView.prototype.expandHandler = function (e) {\n var target = e.originalEvent.target;\n if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n return;\n }\n else {\n this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n }\n };\n TreeView.prototype.expandCollapseAction = function (currLi, e) {\n var icon = select('div.' + ICON, currLi);\n if (!icon || icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n var classList = icon.classList;\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(currLi, icon, e);\n }\n else {\n this.collapseNode(currLi, icon, e);\n }\n }\n };\n TreeView.prototype.expandAction = function (currLi, icon, e, expandChild, callback) {\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n if (this.isLoaded) {\n this.expandArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeExpanding', this.expandArgs);\n if (this.expandArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n var ul = select('.' + PARENTITEM, currLi);\n if (ul && ul.nodeName === 'UL') {\n this.expandNode(currLi, icon);\n }\n else {\n this.renderChildNodes(currLi, expandChild, callback);\n }\n };\n TreeView.prototype.keyActionHandler = function (e) {\n var target = e.target;\n var focusedNode = this.getFocusedNode();\n if (target && target.classList.contains(INPUT)) {\n var inpEle = target;\n if (e.action === 'enter') {\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n else if (e.action === 'escape') {\n inpEle.value = this.oldText;\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n return;\n }\n e.preventDefault();\n var eventArgs = {\n cancel: false,\n event: e,\n node: focusedNode,\n };\n this.trigger('keyPress', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n switch (e.action) {\n case 'space':\n if (this.showCheckBox) {\n this.checkNode(e);\n }\n break;\n case 'moveRight':\n this.openNode(this.enableRtl ? false : true, e);\n break;\n case 'moveLeft':\n this.openNode(this.enableRtl ? true : false, e);\n break;\n case 'shiftDown':\n this.shiftKeySelect(true, e);\n break;\n case 'moveDown':\n case 'ctrlDown':\n case 'csDown':\n this.navigateNode(true);\n break;\n case 'shiftUp':\n this.shiftKeySelect(false, e);\n break;\n case 'moveUp':\n case 'ctrlUp':\n case 'csUp':\n this.navigateNode(false);\n break;\n case 'home':\n case 'shiftHome':\n case 'ctrlHome':\n case 'csHome':\n this.navigateRootNode(true);\n break;\n case 'end':\n case 'shiftEnd':\n case 'ctrlEnd':\n case 'csEnd':\n this.navigateRootNode(false);\n break;\n case 'enter':\n case 'ctrlEnter':\n case 'shiftEnter':\n case 'csEnter':\n this.toggleSelect(focusedNode, e);\n break;\n case 'f2':\n if (this.allowEditing && !focusedNode.classList.contains('e-disable')) {\n this.createTextbox(focusedNode, e);\n }\n break;\n case 'ctrlA':\n if (this.allowMultiSelection) {\n var sNodes = selectAll('.' + LISTITEM + ':not(.' + ACTIVE + ')', this.element);\n this.selectGivenNodes(sNodes);\n }\n break;\n }\n };\n TreeView.prototype.navigateToFocus = function (isUp) {\n var focusNode = this.getFocusedNode().querySelector('.' + TEXTWRAP);\n var pos = focusNode.getBoundingClientRect();\n var parent = this.getScrollParent(this.element);\n if (!isNOU(parent)) {\n var parentPos = parent.getBoundingClientRect();\n if (pos.bottom > parentPos.bottom) {\n parent.scrollTop += pos.bottom - parentPos.bottom;\n }\n else if (pos.top < parentPos.top) {\n parent.scrollTop -= parentPos.top - pos.top;\n }\n }\n var isVisible = this.isVisibleInViewport(focusNode);\n if (!isVisible) {\n focusNode.scrollIntoView(isUp);\n }\n };\n TreeView.prototype.isVisibleInViewport = function (txtWrap) {\n var pos = txtWrap.getBoundingClientRect();\n return (pos.top >= 0 && pos.left >= 0 && pos.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n pos.right <= (window.innerWidth || document.documentElement.clientWidth));\n };\n TreeView.prototype.getScrollParent = function (node) {\n if (isNOU(node)) {\n return null;\n }\n return (node.scrollHeight > node.clientHeight) ? node : this.getScrollParent(node.parentElement);\n };\n TreeView.prototype.shiftKeySelect = function (isTowards, e) {\n if (this.allowMultiSelection) {\n var focusedNode = this.getFocusedNode();\n var nextNode = isTowards ? this.getNextNode(focusedNode) : this.getPrevNode(focusedNode);\n this.removeHover();\n this.setFocusElement(nextNode);\n this.toggleSelect(nextNode, e, false);\n this.navigateToFocus(!isTowards);\n }\n else {\n this.navigateNode(isTowards);\n }\n };\n TreeView.prototype.checkNode = function (e) {\n var focusedNode = this.getFocusedNode();\n var checkWrap = select('.' + CHECKBOXWRAP, focusedNode);\n var isChecked = select(' .' + CHECKBOXFRAME, checkWrap).classList.contains(CHECK);\n if (!focusedNode.classList.contains('e-disable')) {\n this.validateCheckNode(checkWrap, isChecked, focusedNode, e);\n }\n };\n TreeView.prototype.validateCheckNode = function (checkWrap, isCheck, li, e) {\n var eventArgs = this.nodeCheckingEvent(checkWrap, isCheck, e);\n if (eventArgs.cancel) {\n return;\n }\n if (this.checkedElement.indexOf(li.getAttribute('data-uid')) === -1) {\n this.checkedElement.push(li.getAttribute('data-uid'));\n var child = this.getChildNodes(this.treeData, li.getAttribute('data-uid'));\n (child !== null) ? this.allCheckNode(child, this.checkedElement, null, null, false) : child = null;\n }\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n if (this.autoCheck) {\n this.ensureChildCheckState(li);\n this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n }\n this.nodeCheckedEvent(checkWrap, isCheck, e);\n };\n //This method can be used to get all child nodes of a parent by passing the children of a parent along with 'validateCheck' set to false\n TreeView.prototype.allCheckNode = function (child, newCheck, checked, childCheck, validateCheck) {\n if (child) {\n for (var length_1 = 0; length_1 < child.length; length_1++) {\n var childId = getValue(this.fields.id, child[length_1]);\n var check = this.element.querySelector('[data-uid=\"' + childId + '\"]');\n //Validates isChecked case while no UI interaction has been performed on the node or it's parent\n if (validateCheck !== false && this.checkedElement.indexOf(childId.toString()) === -1) {\n if (((check === null && !isNOU(child[length_1][this.fields.isChecked]) && newCheck.indexOf(childId.toString()) === -1)\n || childCheck === 0 || checked === 2)) {\n (child[length_1][this.fields.isChecked] !== false || checked === 2) ? newCheck.push(childId.toString())\n : childCheck = null;\n childCheck = (child[length_1][this.fields.isChecked] !== false || checked === 2) ? 0 : null;\n }\n }\n //Pushes child checked node done thro' UI interaction\n if (newCheck.indexOf(childId.toString()) === -1 && isNOU(checked)) {\n newCheck.push(childId.toString());\n }\n //Gets if any next level children are available for child nodes\n if (getValue(this.fields.hasChildren, child[length_1]) === true ||\n getValue(this.fields.child.toString(), child[length_1])) {\n var id = getValue(this.fields.id, child[length_1]);\n var childId_1 = this.getChildNodes(this.treeData, id.toString());\n if (childId_1) {\n (isNOU(validateCheck)) ? this.allCheckNode(childId_1, newCheck, checked, childCheck) :\n this.allCheckNode(childId_1, newCheck, checked, childCheck, validateCheck);\n childCheck = null;\n }\n }\n childCheck = null;\n }\n }\n };\n TreeView.prototype.openNode = function (toBeOpened, e) {\n var focusedNode = this.getFocusedNode();\n var icon = select('div.' + ICON, focusedNode);\n if (toBeOpened) {\n if (!icon) {\n return;\n }\n else if (icon.classList.contains(EXPANDABLE)) {\n this.expandAction(focusedNode, icon, e);\n }\n else {\n this.focusNextNode(focusedNode, true);\n }\n }\n else {\n if (icon && icon.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(focusedNode, icon, e);\n }\n else {\n var parentLi = closest(closest(focusedNode, '.' + PARENTITEM), '.' + LISTITEM);\n if (!parentLi) {\n return;\n }\n else {\n if (!parentLi.classList.contains('e-disable')) {\n this.setFocus(focusedNode, parentLi);\n this.navigateToFocus(true);\n }\n }\n }\n }\n };\n TreeView.prototype.navigateNode = function (isTowards) {\n var focusedNode = this.getFocusedNode();\n this.focusNextNode(focusedNode, isTowards);\n };\n TreeView.prototype.navigateRootNode = function (isBackwards) {\n var focusedNode = this.getFocusedNode();\n var rootNode = isBackwards ? this.getRootNode() : this.getEndNode();\n if (!rootNode.classList.contains('e-disable')) {\n this.setFocus(focusedNode, rootNode);\n this.navigateToFocus(isBackwards);\n }\n };\n TreeView.prototype.getFocusedNode = function () {\n var selectedItem;\n var fNode = select('.' + LISTITEM + '.' + FOCUS, this.element);\n if (isNOU(fNode)) {\n selectedItem = select('.' + LISTITEM, this.element);\n }\n return isNOU(fNode) ? (isNOU(selectedItem) ? this.element.firstElementChild : selectedItem) : fNode;\n };\n TreeView.prototype.focusNextNode = function (li, isTowards) {\n var nextNode = isTowards ? this.getNextNode(li) : this.getPrevNode(li);\n this.setFocus(li, nextNode);\n this.navigateToFocus(!isTowards);\n if (nextNode.classList.contains('e-disable')) {\n var lastChild = nextNode.lastChild;\n if (nextNode.previousSibling == null && nextNode.classList.contains('e-level-1')) {\n this.focusNextNode(nextNode, true);\n }\n else if (nextNode.nextSibling == null && nextNode.classList.contains('e-node-collapsed')) {\n this.focusNextNode(nextNode, false);\n }\n else if (nextNode.nextSibling == null && lastChild.classList.contains('e-text-content')) {\n this.focusNextNode(nextNode, false);\n }\n else {\n this.focusNextNode(nextNode, isTowards);\n }\n }\n };\n TreeView.prototype.getNextNode = function (li) {\n var index = this.liList.indexOf(li);\n var nextNode;\n do {\n index++;\n nextNode = this.liList[index];\n if (isNOU(nextNode)) {\n return li;\n }\n } while (!isVisible(nextNode));\n return nextNode;\n };\n TreeView.prototype.getPrevNode = function (li) {\n var index = this.liList.indexOf(li);\n var prevNode;\n do {\n index--;\n prevNode = this.liList[index];\n if (isNOU(prevNode)) {\n return li;\n }\n } while (!isVisible(prevNode));\n return prevNode;\n };\n TreeView.prototype.getRootNode = function () {\n var index = 0;\n var rootNode;\n do {\n rootNode = this.liList[index];\n index++;\n } while (!isVisible(rootNode));\n return rootNode;\n };\n TreeView.prototype.getEndNode = function () {\n var index = this.liList.length - 1;\n var endNode;\n do {\n endNode = this.liList[index];\n index--;\n } while (!isVisible(endNode));\n return endNode;\n };\n TreeView.prototype.setFocus = function (preNode, nextNode) {\n removeClass([preNode], [HOVER, FOCUS]);\n if (!nextNode.classList.contains('e-disable')) {\n addClass([nextNode], [HOVER, FOCUS]);\n this.updateIdAttr(preNode, nextNode);\n }\n };\n TreeView.prototype.updateIdAttr = function (preNode, nextNode) {\n this.element.removeAttribute('aria-activedescendant');\n if (preNode) {\n preNode.removeAttribute('id');\n }\n nextNode.setAttribute('id', this.element.id + '_active');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n };\n TreeView.prototype.focusIn = function () {\n if (!this.mouseDownStatus) {\n addClass([this.getFocusedNode()], HOVER);\n }\n this.mouseDownStatus = false;\n };\n TreeView.prototype.focusOut = function () {\n removeClass([this.getFocusedNode()], HOVER);\n };\n TreeView.prototype.onMouseOver = function (e) {\n var target = e.target;\n var classList = target.classList;\n var currentLi = closest(target, '.' + LISTITEM);\n if (!currentLi || classList.contains(PARENTITEM) || classList.contains(LISTITEM)) {\n this.removeHover();\n return;\n }\n else {\n if (currentLi && !currentLi.classList.contains('e-disable')) {\n this.setHover(currentLi);\n }\n }\n };\n TreeView.prototype.setHover = function (li) {\n if (!li.classList.contains(HOVER)) {\n this.removeHover();\n addClass([li], HOVER);\n }\n };\n ;\n TreeView.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n TreeView.prototype.removeHover = function () {\n var hoveredNode = selectAll('.' + HOVER, this.element);\n if (hoveredNode && hoveredNode.length) {\n removeClass(hoveredNode, HOVER);\n }\n };\n ;\n TreeView.prototype.getNodeData = function (currLi, fromDS) {\n if (!isNOU(currLi) && currLi.classList.contains(LISTITEM) && closest(currLi, '.' + CONTROL).classList.contains(ROOT)) {\n var id = currLi.getAttribute('data-uid');\n var text = this.getText(currLi, fromDS);\n var pNode = closest(currLi.parentNode, '.' + LISTITEM);\n var pid = pNode ? pNode.getAttribute('data-uid') : null;\n var selected = currLi.classList.contains(ACTIVE);\n var expanded = (currLi.getAttribute('aria-expanded') === 'true') ? true : false;\n var checked = null;\n if (this.showCheckBox) {\n checked = select('.' + CHECKBOXWRAP, currLi).getAttribute('aria-checked');\n }\n return { id: id, text: text, parentID: pid, selected: selected, expanded: expanded, isChecked: checked };\n }\n return { id: '', text: '', parentID: '', selected: '', expanded: '', isChecked: '' };\n };\n TreeView.prototype.getText = function (currLi, fromDS) {\n if (fromDS) {\n var nodeData = this.getNodeObject(currLi.getAttribute('data-uid'));\n var level = parseFloat(currLi.getAttribute('aria-level'));\n var nodeFields = this.getFields(this.fields, level, 1);\n return getValue(nodeFields.text, nodeData);\n }\n return select('.' + LISTTEXT, currLi).textContent;\n };\n TreeView.prototype.getExpandEvent = function (currLi, e) {\n var nodeData = this.getNodeData(currLi);\n return { cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData, event: e };\n };\n TreeView.prototype.reRenderNodes = function () {\n this.element.innerHTML = '';\n this.setTouchClass();\n this.setProperties({ selectedNodes: [], checkedNodes: [], expandedNodes: [] }, true);\n this.isLoaded = false;\n this.setDataBinding();\n };\n TreeView.prototype.setCssClass = function (oldClass, newClass) {\n if (!isNOU(oldClass) && oldClass !== '') {\n removeClass([this.element], oldClass.split(' '));\n }\n if (!isNOU(newClass) && newClass !== '') {\n addClass([this.element], newClass.split(' '));\n }\n };\n TreeView.prototype.editingHandler = function (e) {\n var target = e.target;\n if (!target || target.classList.contains(ROOT) || target.classList.contains(PARENTITEM) ||\n target.classList.contains(LISTITEM) || target.classList.contains(ICON) ||\n target.classList.contains(INPUT) || target.classList.contains(INPUTGROUP)) {\n return;\n }\n else {\n var liEle = closest(target, '.' + LISTITEM);\n this.createTextbox(liEle, e);\n }\n };\n TreeView.prototype.createTextbox = function (liEle, e) {\n var oldInpEle = select('.' + TREEINPUT, this.element);\n if (oldInpEle) {\n oldInpEle.blur();\n }\n var textEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var innerEle = this.createElement('input', { className: TREEINPUT, attrs: { value: this.oldText } });\n var eventArgs = this.getEditEvent(liEle, null, innerEle.outerHTML);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var inpWidth = textEle.offsetWidth + 5;\n var style = 'width:' + inpWidth + 'px';\n addClass([liEle], EDITING);\n textEle.innerHTML = eventArgs.innerHtml;\n var inpEle = select('.' + TREEINPUT, textEle);\n this.inputObj = Input.createInput({\n element: inpEle,\n properties: {\n enableRtl: this.enableRtl,\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('style', style);\n inpEle.focus();\n var inputEle = inpEle;\n inputEle.setSelectionRange(0, inputEle.value.length);\n this.wireInputEvents(inpEle);\n };\n TreeView.prototype.updateOldText = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n this.editData = this.getNodeObject(id);\n var level = parseFloat(liEle.getAttribute('aria-level'));\n this.editFields = this.getFields(this.fields, level, 1);\n this.oldText = getValue(this.editFields.text, this.editData);\n };\n TreeView.prototype.inputFocusOut = function (e) {\n if (!select('.' + TREEINPUT, this.element)) {\n return;\n }\n var target = e.target;\n var newText = target.value;\n var txtEle = closest(target, '.' + LISTTEXT);\n var liEle = closest(target, '.' + LISTITEM);\n detach(this.inputObj.container);\n this.appendNewText(liEle, txtEle, newText, true);\n };\n TreeView.prototype.appendNewText = function (liEle, txtEle, newText, isInput) {\n var eventArgs = this.getEditEvent(liEle, newText, null);\n this.trigger('nodeEdited', eventArgs);\n newText = eventArgs.cancel ? eventArgs.oldText : eventArgs.newText;\n var newData = setValue(this.editFields.text, newText, this.editData);\n if (!isNOU(this.nodeTemplateFn)) {\n txtEle.innerHTML = '';\n append(this.nodeTemplateFn(newData), txtEle);\n }\n else {\n txtEle.innerHTML = newText;\n }\n if (isInput) {\n removeClass([liEle], EDITING);\n txtEle.focus();\n }\n if (eventArgs.oldText !== newText) {\n this.triggerEvent();\n }\n };\n TreeView.prototype.getElement = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return this.element.querySelector('[data-uid=\"' + ele + '\"]');\n }\n else if (typeof ele === 'object') {\n return ele;\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getId = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return ele;\n }\n else if (typeof ele === 'object') {\n return ele.getAttribute('data-uid');\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getEditEvent = function (liEle, newText, inpEle) {\n var data = this.getNodeData(liEle);\n return { cancel: false, newText: newText, node: liEle, nodeData: data, oldText: this.oldText, innerHtml: inpEle };\n };\n TreeView.prototype.getNodeObject = function (id) {\n var childNodes;\n if (isNOU(id)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n for (var i = 0, objlen = this.treeData.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, this.treeData[i]);\n if (!isNOU(this.treeData[i]) && !isNOU(dataId) && dataId.toString() === id) {\n return this.treeData[i];\n }\n }\n }\n else {\n return this.getChildNodeObject(this.treeData, this.fields, id);\n }\n return childNodes;\n };\n TreeView.prototype.getChildNodeObject = function (obj, mapper, id) {\n var newList;\n if (isNOU(obj)) {\n return newList;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(mapper.id, obj[i]);\n if (obj[i] && dataId && dataId.toString() === id) {\n return obj[i];\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var child = 'child';\n newList = this.getChildNodeObject(getValue(child, obj[i]), this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n }\n return newList;\n };\n TreeView.prototype.setDragAndDrop = function (toBind) {\n if (toBind) {\n this.initializeDrag();\n }\n else {\n this.destroyDrag();\n }\n };\n TreeView.prototype.initializeDrag = function () {\n var _this = this;\n var virtualEle;\n var proxy = this;\n this.dragObj = new Draggable(this.element, {\n enableTailMode: true,\n enableAutoScroll: true,\n dragTarget: '.' + TEXTWRAP,\n helper: function (e) {\n _this.dragTarget = e.sender.target;\n var dragRoot = closest(_this.dragTarget, '.' + ROOT);\n var dragWrap = closest(_this.dragTarget, '.' + TEXTWRAP);\n _this.dragLi = closest(_this.dragTarget, '.' + LISTITEM);\n if (_this.fullRowSelect && !dragWrap && _this.dragTarget.classList.contains(FULLROW)) {\n dragWrap = _this.dragTarget.nextElementSibling;\n }\n if (!_this.dragTarget || !e.element.isSameNode(dragRoot) || !dragWrap ||\n _this.dragTarget.classList.contains(ROOT) || _this.dragTarget.classList.contains(PARENTITEM) ||\n _this.dragTarget.classList.contains(LISTITEM) || _this.dragLi.classList.contains('e-disable')) {\n return false;\n }\n var cloneEle = (dragWrap.cloneNode(true));\n if (isNOU(select('div.' + ICON, cloneEle))) {\n var icon = proxy.createElement('div', { className: ICON + ' ' + EXPANDABLE });\n cloneEle.insertBefore(icon, cloneEle.children[0]);\n }\n var cssClass = DRAGITEM + ' ' + ROOT + ' ' + _this.cssClass + ' ' + (_this.enableRtl ? RTL : '');\n virtualEle = proxy.createElement('div', { className: cssClass });\n virtualEle.appendChild(cloneEle);\n var nLen = _this.selectedNodes.length;\n if (nLen > 1 && _this.allowMultiSelection && _this.dragLi.classList.contains(ACTIVE)) {\n var cNode = proxy.createElement('span', { className: DROPCOUNT, innerHTML: '' + nLen });\n virtualEle.appendChild(cNode);\n }\n document.body.appendChild(virtualEle);\n document.body.style.cursor = '';\n _this.dragData = _this.getNodeData(_this.dragLi);\n return virtualEle;\n },\n dragStart: function (e) {\n addClass([_this.element], DRAGGING);\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, null, e.target, null, virtualEle, level);\n if (eventArgs.draggedNode.classList.contains(EDITING)) {\n eventArgs.cancel = true;\n }\n else {\n _this.trigger('nodeDragStart', eventArgs);\n }\n if (eventArgs.cancel) {\n detach(virtualEle);\n removeClass([_this.element], DRAGGING);\n _this.dragStartAction = false;\n }\n else {\n _this.dragStartAction = true;\n }\n },\n drag: function (e) {\n _this.dragObj.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20 } });\n _this.dragAction(e, virtualEle);\n },\n dragStop: function (e) {\n removeClass([_this.element], DRAGGING);\n _this.removeVirtualEle();\n var dropTarget = e.target;\n var preventTargetExpand = false;\n var dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n if (!dropTarget || !dropRoot) {\n detach(e.helper);\n document.body.style.cursor = '';\n }\n var listItem = closest(dropTarget, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget, null, e.helper, level);\n eventArgs.preventTargetExpand = preventTargetExpand;\n _this.trigger('nodeDragStop', eventArgs);\n _this.dragParent = eventArgs.draggedParentNode;\n _this.preventExpand = eventArgs.preventTargetExpand;\n if (eventArgs.cancel) {\n if (e.helper.parentNode) {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n }\n _this.dragStartAction = false;\n }\n });\n this.dropObj = new Droppable(this.element, {\n out: function (e) {\n if (!isNOU(e) && !e.target.classList.contains(SIBLING)) {\n document.body.style.cursor = 'not-allowed';\n }\n },\n over: function (e) {\n document.body.style.cursor = '';\n },\n drop: function (e) {\n _this.dropAction(e);\n }\n });\n };\n TreeView.prototype.dragAction = function (e, virtualEle) {\n var dropRoot = closest(e.target, '.' + DROPPABLE);\n var dropWrap = closest(e.target, '.' + TEXTWRAP);\n var icon = select('div.' + ICON, virtualEle);\n removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n this.removeVirtualEle();\n document.body.style.cursor = '';\n var classList = e.target.classList;\n if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n dropWrap = e.target.nextElementSibling;\n }\n if (dropRoot) {\n var dropLi = closest(e.target, '.' + LISTITEM);\n if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n if (dropLi && e && (e.event.offsetY < 7)) {\n addClass([icon], DROPNEXT);\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (1) : (0);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else if (dropLi && e && (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10))) {\n addClass([icon], DROPNEXT);\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (2) : (1);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else {\n addClass([icon], DROPIN);\n }\n }\n else if (e.target.nodeName === 'LI' && (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi))) {\n addClass([icon], DROPNEXT);\n this.renderVirtualEle(e);\n }\n else if (e.target.classList.contains(SIBLING)) {\n addClass([icon], DROPNEXT);\n }\n else {\n addClass([icon], DROPOUT);\n }\n }\n else {\n addClass([icon], NODROP);\n document.body.style.cursor = 'not-allowed';\n }\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = this.getDragEvent(e.event, this, e.target, e.target, null, virtualEle, level);\n if (eventArgs.dropIndicator) {\n removeClass([icon], eventArgs.dropIndicator);\n }\n this.trigger('nodeDragging', eventArgs);\n if (eventArgs.dropIndicator) {\n addClass([icon], eventArgs.dropIndicator);\n }\n };\n TreeView.prototype.dropAction = function (e) {\n var offsetY = e.event.offsetY;\n var dropTarget = e.target;\n var dragObj;\n var level;\n var drop = false;\n var dragInstance = e.dragData.draggable;\n for (var i = 0; i < dragInstance.ej2_instances.length; i++) {\n if (dragInstance.ej2_instances[i] instanceof TreeView_1) {\n dragObj = dragInstance.ej2_instances[i];\n break;\n }\n }\n if (dragObj && dragObj.dragTarget) {\n var dragTarget = dragObj.dragTarget;\n var dragLi = (closest(dragTarget, '.' + LISTITEM));\n var dropLi = (closest(dropTarget, '.' + LISTITEM));\n if (dropLi == null && dropTarget.classList.contains(ROOT)) {\n dropLi = dropTarget.firstElementChild;\n }\n detach(e.droppedElement);\n document.body.style.cursor = '';\n if (!dropLi || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n return;\n }\n if (dragObj.allowMultiSelection && dragLi.classList.contains(ACTIVE)) {\n var sNodes = selectAll('.' + ACTIVE, dragObj.element);\n for (var i = 0; i < sNodes.length; i++) {\n if (dropLi.isSameNode(sNodes[i]) || this.isDescendant(sNodes[i], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[i], dropLi, e, dragObj, offsetY);\n }\n }\n else {\n this.appendNode(dropTarget, dragLi, dropLi, e, dragObj, offsetY);\n }\n level = parseInt(dragLi.getAttribute('aria-level'), 10);\n drop = true;\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.dragData.draggedElement, null, level, drop));\n this.triggerEvent();\n };\n TreeView.prototype.appendNode = function (dropTarget, dragLi, dropLi, e, dragObj, offsetY) {\n if (!dragLi.classList.contains('e-disable') && !dropLi.classList.contains('e-disable')) {\n if (dropTarget.nodeName === 'LI') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else if (dropTarget.firstElementChild && dropTarget.classList.contains(ROOT)) {\n if (dropTarget.firstElementChild.nodeName === 'UL') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY);\n }\n }\n };\n TreeView.prototype.dropAsSiblingNode = function (dragLi, dropLi, e, dragObj) {\n var dropUl = closest(dropLi, '.' + PARENTITEM);\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var pre;\n if (e.target.offsetHeight > 0 && e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n dropUl.insertBefore(dragLi, pre ? e.target : e.target.nextElementSibling);\n this.moveData(dragLi, dropLi, dropUl, pre, dragObj);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.dropAsChildNode = function (dragLi, dropLi, dragObj, index, e, pos) {\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var dropParentUl = closest(dropLi, '.' + PARENTITEM);\n if (e && (pos < 7)) {\n dropParentUl.insertBefore(dragLi, dropLi);\n this.moveData(dragLi, dropLi, dropParentUl, true, dragObj);\n }\n else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10))) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n this.moveData(dragLi, dropLi, dropParentUl, false, dragObj);\n }\n else {\n var dropUl = this.expandParent(dropLi);\n var childLi = dropUl.childNodes[index];\n dropUl.insertBefore(dragLi, childLi);\n this.moveData(dragLi, childLi, dropUl, true, dragObj);\n }\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.moveData = function (dragLi, dropLi, dropUl, pre, dragObj) {\n var dropParentLi = closest(dropUl, '.' + LISTITEM);\n var id = this.getId(dragLi);\n var removedData = dragObj.updateChildField(dragObj.treeData, dragObj.fields, id, null, null, true);\n var refId = this.getId(dropLi);\n var index = this.getDataPos(this.treeData, this.fields, refId);\n var parentId = this.getId(dropParentLi);\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', true);\n var pos = isNOU(index) ? this.treeData.length : (pre ? index : index + 1);\n if (isNOU(parentId) && !this.hasPid) {\n delete removedData[0][this.fields.parentID];\n }\n else {\n var currPid = this.isNumberTypeId ? parseFloat(parentId) : parentId;\n setValue(this.fields.parentID, currPid, removedData[0]);\n }\n this.treeData.splice(pos, 0, removedData[0]);\n if (dragObj.element.id !== this.element.id) {\n var childData = dragObj.removeChildNodes(id);\n pos++;\n for (var i = 0, len = childData.length; i < len; i++) {\n this.treeData.splice(pos, 0, childData[i]);\n pos++;\n }\n dragObj.groupedData = dragObj.getGroupedData(dragObj.treeData, dragObj.fields.parentID);\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n else {\n this.addChildData(this.treeData, this.fields, parentId, removedData, pre ? index : index + 1);\n }\n };\n TreeView.prototype.expandParent = function (dropLi) {\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && this.preventExpand !== true) {\n this.expandAction(dropLi, dropIcon, null);\n }\n var dropUl = select('.' + PARENTITEM, dropLi);\n if (this.preventExpand === true && !dropUl && dropIcon) {\n this.renderChildNodes(dropLi);\n }\n dropUl = select('.' + PARENTITEM, dropLi);\n if (isNOU(dropUl) && this.preventExpand === true) {\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n icon.classList.add('e-icon-expandable');\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n removeClass([icon], COLLAPSIBLE);\n dropLi.setAttribute('aria-expanded', 'false');\n dropUl.style.display = 'none';\n }\n if (isNOU(dropUl)) {\n this.trigger('nodeExpanding', this.getExpandEvent(dropLi, null));\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n removeClass([icon], EXPANDABLE);\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n this.addExpand(dropLi);\n this.trigger('nodeExpanded', this.getExpandEvent(dropLi, null));\n }\n return dropUl;\n };\n TreeView.prototype.updateElement = function (dragParentUl, dragParentLi) {\n if (dragParentLi && dragParentUl.childElementCount === 0) {\n var dragIcon = select('div.' + ICON, dragParentLi);\n detach(dragParentUl);\n detach(dragIcon);\n var parentId = this.getId(dragParentLi);\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', null);\n this.removeExpand(dragParentLi, true);\n }\n };\n TreeView.prototype.updateAriaLevel = function (dragLi) {\n var level = this.parents(dragLi, '.' + PARENTITEM).length;\n dragLi.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, dragLi), level + 1);\n };\n TreeView.prototype.updateChildAriaLevel = function (element, level) {\n if (!isNOU(element)) {\n var cNodes = element.childNodes;\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n liEle.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, liEle), level + 1);\n }\n }\n };\n TreeView.prototype.renderVirtualEle = function (e) {\n var pre;\n if (e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (pre ? 1 : 2) : (pre ? 0 : 1);\n e.target.insertBefore(virEle, e.target.children[index]);\n };\n TreeView.prototype.removeVirtualEle = function () {\n var sibEle = select('.' + SIBLING);\n if (sibEle) {\n detach(sibEle);\n }\n };\n TreeView.prototype.destroyDrag = function () {\n if (this.dragObj && this.dropObj) {\n this.dragObj.destroy();\n this.dropObj.destroy();\n }\n };\n TreeView.prototype.getDragEvent = function (event, obj, dropTarget, target, dragNode, cloneEle, level, drop) {\n var dropLi = dropTarget ? closest(dropTarget, '.' + LISTITEM) : null;\n var dropData = dropLi ? this.getNodeData(dropLi) : null;\n var draggedNode = obj ? obj.dragLi : dragNode;\n var draggedNodeData = obj ? obj.dragData : null;\n var newParent = dropTarget ? this.parents(dropTarget, '.' + LISTITEM) : null;\n var dragLiParent = obj.dragLi.parentElement;\n var dragParent = obj.dragLi ? closest(dragLiParent, '.' + LISTITEM) : null;\n var targetParent = null;\n var indexValue = null;\n var iconCss = [DROPNEXT, DROPIN, DROPOUT, NODROP];\n var iconClass = null;\n var node = (drop === true) ? draggedNode : dropLi;\n var index = node ? closest(node, '.e-list-parent') : null;\n var i = 0;\n dragParent = (obj.dragLi && dragParent === null) ? closest(dragLiParent, '.' + ROOT) : dragParent;\n dragParent = (drop === true) ? this.dragParent : dragParent;\n if (cloneEle) {\n while (i < 4) {\n if (select('.' + ICON, cloneEle).classList.contains(iconCss[i])) {\n iconClass = iconCss[i];\n break;\n }\n i++;\n }\n }\n if (index) {\n var dropTar = 0;\n for (i = 0; i < index.childElementCount; i++) {\n dropTar = (drop !== true && index.children[i] === draggedNode && dropLi !== draggedNode) ? ++dropTar : dropTar;\n if ((drop !== true && index.children[i].classList.contains('e-hover'))) {\n indexValue = (event.offsetY >= 23) ? i + 1 : i;\n break;\n }\n else if (index.children[i] === node) {\n indexValue = (event.offsetY >= 23) ? i : i;\n break;\n }\n }\n indexValue = (dropTar !== 0) ? --indexValue : indexValue;\n }\n if (dropTarget) {\n if (newParent.length === 0) {\n targetParent = null;\n }\n else if (dropTarget.classList.contains(LISTITEM)) {\n targetParent = newParent[0];\n }\n else {\n targetParent = newParent[1];\n }\n }\n if (dropLi === draggedNode) {\n targetParent = dropLi;\n }\n if (dropTarget && target.offsetHeight <= 33 && event.offsetY < target.offsetHeight - 10 && event.offsetY > 6) {\n targetParent = dropLi;\n if (drop !== true) {\n level = ++level;\n var parent_1 = targetParent ? select('.e-list-parent', targetParent) : null;\n indexValue = (parent_1) ? parent_1.children.length : 0;\n if (!(this.fields.dataSource instanceof DataManager) && parent_1 === null && targetParent) {\n var parent_2 = targetParent.hasAttribute('data-uid') ?\n this.getChildNodes(this.fields.dataSource, targetParent.getAttribute('data-uid').toString()) : null;\n indexValue = (parent_2) ? parent_2.length : 0;\n }\n }\n }\n return {\n cancel: false,\n clonedNode: cloneEle,\n event: event,\n draggedNode: draggedNode,\n draggedNodeData: draggedNodeData,\n droppedNode: dropLi,\n droppedNodeData: dropData,\n dropIndex: indexValue,\n dropLevel: level,\n draggedParentNode: dragParent,\n dropTarget: targetParent,\n dropIndicator: iconClass,\n target: target,\n };\n };\n TreeView.prototype.addFullRow = function (toAdd) {\n var len = this.liList.length;\n if (toAdd) {\n for (var i = 0; i < len; i++) {\n this.createFullRow(this.liList[i]);\n }\n }\n else {\n for (var i = 0; i < len; i++) {\n var rowDiv = select('.' + FULLROW, this.liList[i]);\n detach(rowDiv);\n }\n }\n };\n TreeView.prototype.createFullRow = function (item) {\n var rowDiv = this.createElement('div', { className: FULLROW });\n item.insertBefore(rowDiv, item.childNodes[0]);\n };\n TreeView.prototype.addMultiSelect = function (toAdd) {\n if (toAdd) {\n var liEles = selectAll('.' + LISTITEM + ':not([aria-selected=\"true\"])', this.element);\n for (var _i = 0, liEles_1 = liEles; _i < liEles_1.length; _i++) {\n var ele = liEles_1[_i];\n ele.setAttribute('aria-selected', 'false');\n }\n }\n else {\n var liEles = selectAll('.' + LISTITEM + '[aria-selected=\"false\"]', this.element);\n for (var _a = 0, liEles_2 = liEles; _a < liEles_2.length; _a++) {\n var ele = liEles_2[_a];\n ele.removeAttribute('aria-selected');\n }\n }\n };\n TreeView.prototype.collapseByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var cNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n var icon = select('.' + COLLAPSIBLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.collapseNode(liEle, icon, null);\n }\n this.collapseByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.collapseAllNodes = function (excludeHiddenNodes) {\n var cIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + COLLAPSIBLE, this.element));\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.collapseNode(liEle, icon, null);\n }\n };\n TreeView.prototype.expandByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var eNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n var liEle = eNodes[i];\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.expandAction(liEle, icon, null);\n }\n this.expandByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.expandAllNodes = function (excludeHiddenNodes) {\n var eIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + EXPANDABLE, this.element));\n for (var i = 0, len = eIcons.length; i < len; i++) {\n var icon = eIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.expandAction(liEle, icon, null, true);\n }\n };\n TreeView.prototype.getVisibleNodes = function (excludeHiddenNodes, nodes) {\n var vNodes = Array.prototype.slice.call(nodes);\n if (excludeHiddenNodes) {\n for (var i = 0; i < vNodes.length; i++) {\n if (!isVisible(vNodes[i])) {\n vNodes.splice(i, 1);\n i--;\n }\n }\n }\n return vNodes;\n };\n TreeView.prototype.removeNode = function (node) {\n var dragParentUl = closest(node, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n detach(node);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateInstance();\n this.removeData(node);\n };\n TreeView.prototype.updateInstance = function () {\n this.updateList();\n this.updateSelectedNodes();\n this.updateExpandedNodes();\n };\n TreeView.prototype.updateList = function () {\n this.liList = Array.prototype.slice.call(selectAll('.' + LISTITEM, this.element));\n };\n TreeView.prototype.updateSelectedNodes = function () {\n this.setProperties({ selectedNodes: [] }, true);\n var sNodes = selectAll('.' + ACTIVE, this.element);\n this.selectGivenNodes(sNodes);\n };\n TreeView.prototype.updateExpandedNodes = function () {\n this.setProperties({ expandedNodes: [] }, true);\n var eNodes = selectAll('[aria-expanded=\"true\"]', this.element);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n this.addExpand(eNodes[i]);\n }\n };\n TreeView.prototype.removeData = function (node) {\n if (this.dataType === 1) {\n var dm = new DataManager(this.treeData);\n var id = this.getId(node);\n var data = {};\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = newId;\n dm.remove(this.fields.id, data);\n this.removeChildNodes(id);\n }\n else {\n var id = this.getId(node);\n this.updateChildField(this.treeData, this.fields, id, null, null, true);\n }\n };\n TreeView.prototype.removeChildNodes = function (parentId) {\n var cNodes = this.getChildGroup(this.groupedData, parentId, false);\n var childData = [];\n if (cNodes) {\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var dm = new DataManager(this.treeData);\n var id = getValue(this.fields.id, cNodes[i]).toString();\n var data = {};\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = currId;\n var nodeData = dm.remove(this.fields.id, data);\n childData.push(nodeData[0]);\n this.removeChildNodes(id);\n }\n }\n return childData;\n };\n TreeView.prototype.doGivenAction = function (nodes, selector, toExpand) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var icon = select('.' + selector, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n toExpand ? this.expandAction(liEle, icon, null) : this.collapseNode(liEle, icon, null);\n }\n }\n };\n TreeView.prototype.addGivenNodes = function (nodes, dropLi, index, isRemote, dropEle) {\n var sNodes = this.getSortedData(nodes);\n var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n if (isRemote) {\n this.updateMapper(level);\n }\n var li = ListBase.createListItemFromJson(this.createElement, sNodes, this.listBaseOption, level);\n var dropUl;\n if (!dropEle) {\n dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n }\n else {\n dropUl = dropEle;\n }\n var refNode = dropUl.childNodes[index];\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[i], refNode);\n }\n var id = this.getId(dropLi);\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, id, 'hasChildren', true);\n var refId = this.getId(refNode);\n var pos = isNOU(refId) ? this.treeData.length : this.getDataPos(this.treeData, this.fields, refId);\n for (var j = 0; j < nodes.length; j++) {\n if (!isNOU(id)) {\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n setValue(this.fields.parentID, currId, nodes[j]);\n }\n this.treeData.splice(pos, 0, nodes[j]);\n pos++;\n }\n }\n else {\n this.addChildData(this.treeData, this.fields, id, nodes, index);\n }\n this.finalizeNode(dropUl);\n };\n TreeView.prototype.updateMapper = function (level) {\n var mapper = (level === 1) ? this.fields : this.getChildFields(this.fields, level - 1, 1);\n this.updateListProp(mapper);\n };\n TreeView.prototype.updateListProp = function (mapper) {\n var prop = this.getActualProperties(mapper);\n this.listBaseOption.fields = prop;\n this.listBaseOption.fields.url = prop.hasOwnProperty('navigateUrl') ? prop.navigateUrl : 'navigateUrl';\n };\n TreeView.prototype.getDataPos = function (obj, mapper, id) {\n var pos = null;\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n return i;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var data = getValue(mapper.child, obj[i]);\n pos = this.getDataPos(data, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var items = getValue('child', obj[i]);\n pos = this.getDataPos(items, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n }\n return pos;\n };\n TreeView.prototype.addChildData = function (obj, mapper, id, data, index) {\n var updated;\n if (isNOU(id)) {\n index = isNOU(index) ? obj.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n obj.splice(index, 0, data[k]);\n index++;\n }\n return updated;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n if ((typeof mapper.child === 'string' && obj[i].hasOwnProperty(mapper.child)) ||\n (this.fields.dataSource instanceof DataManager && obj[i].hasOwnProperty('child'))) {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n var childData = getValue(key, obj[i]);\n index = isNOU(index) ? childData.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n childData.splice(index, 0, data[k]);\n index++;\n }\n }\n else {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n obj[i][key] = data;\n }\n return true;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childObj = getValue(mapper.child, obj[i]);\n updated = this.addChildData(childObj, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var childData = getValue('child', obj[i]);\n updated = this.addChildData(childData, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n }\n return updated;\n };\n TreeView.prototype.doDisableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n liEle.setAttribute('aria-disabled', 'true');\n addClass([liEle], DISABLE);\n }\n };\n TreeView.prototype.doEnableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n liEle.removeAttribute('aria-disabled');\n removeClass([liEle], DISABLE);\n }\n };\n TreeView.prototype.setTouchClass = function () {\n var ele = closest(this.element, '.' + BIGGER);\n this.touchClass = isNOU(ele) ? '' : SMALL;\n };\n TreeView.prototype.updatePersistProp = function () {\n this.removeField(this.treeData, this.fields, ['selected', 'expanded']);\n var sleNodes = this.selectedNodes;\n for (var l = 0, slelen = sleNodes.length; l < slelen; l++) {\n this.updateField(this.treeData, this.fields, sleNodes[l], 'selected', true);\n }\n var enodes = this.expandedNodes;\n for (var k = 0, nodelen = enodes.length; k < nodelen; k++) {\n this.updateField(this.treeData, this.fields, enodes[k], 'expanded', true);\n }\n if (this.showCheckBox) {\n this.removeField(this.treeData, this.fields, ['isChecked']);\n var cnodes = this.checkedNodes;\n for (var m = 0, nodelen = cnodes.length; m < nodelen; m++) {\n this.updateField(this.treeData, this.fields, cnodes[m], 'isChecked', true);\n }\n }\n };\n TreeView.prototype.removeField = function (obj, mapper, names) {\n if (isNOU(obj) || isNOU(mapper)) {\n return;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n for (var j = 0; j < names.length; j++) {\n var field = this.getMapperProp(mapper, names[j]);\n if (!isNOU(obj[i][field])) {\n delete obj[i][field];\n }\n }\n if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n this.removeField(getValue(mapper.child, obj[i]), this.getChildMapper(mapper), names);\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n this.removeField(getValue('child', obj[i]), this.getChildMapper(mapper), names);\n }\n }\n };\n TreeView.prototype.getMapperProp = function (mapper, fieldName) {\n switch (fieldName) {\n case 'selected':\n return !isNOU(mapper.selected) ? mapper.selected : 'selected';\n case 'expanded':\n return !isNOU(mapper.expanded) ? mapper.expanded : 'expanded';\n case 'isChecked':\n return !isNOU(mapper.isChecked) ? mapper.isChecked : 'isChecked';\n case 'hasChildren':\n return !isNOU(mapper.hasChildren) ? mapper.hasChildren : 'hasChildren';\n default:\n return fieldName;\n }\n };\n TreeView.prototype.updateField = function (obj, mapper, id, key, value) {\n var childNodes;\n if (isNOU(id)) {\n return;\n }\n else if (this.dataType === 1) {\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', newId, false));\n setValue(this.getMapperProp(mapper, key), value, resultData[0]);\n }\n else {\n this.updateChildField(obj, mapper, id, key, value);\n }\n };\n TreeView.prototype.updateChildField = function (obj, mapper, id, key, value, remove) {\n var removedData;\n if (isNOU(obj)) {\n return removedData;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n if (remove) {\n removedData = obj.splice(i, 1);\n }\n else {\n setValue(this.getMapperProp(mapper, key), value, obj[i]);\n removedData = [];\n }\n return removedData;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n removedData = this.updateChildField(childData, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var childItems = getValue('child', obj[i]);\n removedData = this.updateChildField(childItems, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n }\n return removedData;\n };\n TreeView.prototype.triggerEvent = function () {\n var eventArgs = { data: this.treeData };\n this.trigger('dataSourceChanged', eventArgs);\n };\n TreeView.prototype.wireInputEvents = function (inpEle) {\n EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n };\n TreeView.prototype.wireEditingEvents = function (toBind) {\n if (toBind) {\n var proxy_2 = this;\n this.touchEditObj = new Touch(this.element, {\n tap: function (e) {\n if (e.tapCount === 2) {\n e.originalEvent.preventDefault();\n proxy_2.editingHandler(e.originalEvent);\n }\n }\n });\n }\n else {\n if (this.touchEditObj) {\n this.touchEditObj.destroy();\n }\n }\n };\n TreeView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n var proxy_3 = this;\n this.touchClickObj = new Touch(this.element, {\n tap: function (e) {\n e.originalEvent.preventDefault();\n proxy_3.clickHandler(e);\n }\n });\n }\n else {\n if (this.touchClickObj) {\n this.touchClickObj.destroy();\n }\n }\n };\n TreeView.prototype.wireExpandOnEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var proxy_4 = this;\n this.touchExpandObj = new Touch(this.element, {\n tap: function (e) {\n if (_this.expandOnType === 'Click' || (_this.expandOnType === 'DblClick' && e.tapCount === 2)) {\n proxy_4.expandHandler(e);\n }\n }\n });\n }\n else {\n if (this.touchExpandObj) {\n this.touchExpandObj.destroy();\n }\n }\n };\n TreeView.prototype.mouseDownHandler = function (e) {\n this.mouseDownStatus = true;\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (e.ctrlKey && this.allowMultiSelection) {\n EventHandler.add(this.element, 'contextmenu', this.preventContextMenu, this);\n }\n };\n ;\n TreeView.prototype.preventContextMenu = function (e) {\n e.preventDefault();\n };\n TreeView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'mousedown', this.mouseDownHandler, this);\n this.wireClickEvent(true);\n if (this.expandOnType !== 'None') {\n this.wireExpandOnEvent(true);\n }\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.element, 'mouseout', this.onMouseLeave, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n };\n TreeView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'mousedown', this.mouseDownHandler);\n this.wireClickEvent(false);\n this.wireExpandOnEvent(false);\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.element, 'mouseout', this.onMouseLeave);\n this.keyboardModule.destroy();\n };\n TreeView.prototype.parents = function (element, selector) {\n var matched = [];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, selector)) {\n matched.push(el);\n }\n el = el.parentNode;\n }\n return matched;\n };\n TreeView.prototype.isDescendant = function (parent, child) {\n var node = child.parentNode;\n while (!isNOU(node)) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n TreeView.prototype.showSpinner = function (element) {\n addClass([element], LOAD);\n createSpinner({\n target: element,\n width: Browser.isDevice ? 16 : 14\n }, this.createElement);\n showSpinner(element);\n };\n TreeView.prototype.hideSpinner = function (element) {\n hideSpinner(element);\n element.innerHTML = '';\n removeClass([element], LOAD);\n };\n TreeView.prototype.setCheckedNodes = function (nodes) {\n nodes = JSON.parse(JSON.stringify(nodes));\n this.uncheckAll(this.checkedNodes);\n if (nodes.length > 0) {\n this.checkAll(nodes);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {TreeView} newProp\n * @param {TreeView} oldProp\n * @returns void\n * @private\n */\n TreeView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.setDragAndDrop(this.allowDragAndDrop);\n break;\n case 'allowEditing':\n this.wireEditingEvents(this.allowEditing);\n break;\n case 'allowMultiSelection':\n if (this.selectedNodes.length > 1) {\n var sNode = this.getElement(this.selectedNodes[0]);\n this.isLoaded = false;\n this.removeSelectAll();\n this.selectNode(sNode, null);\n this.isLoaded = true;\n }\n this.setMultiSelect(this.allowMultiSelection);\n this.addMultiSelect(this.allowMultiSelection);\n break;\n case 'checkedNodes':\n if (this.showCheckBox) {\n this.checkedNodes = oldProp.checkedNodes;\n this.setCheckedNodes(newProp.checkedNodes);\n }\n break;\n case 'autoCheck':\n if (this.showCheckBox) {\n this.autoCheck = newProp.autoCheck;\n this.ensureIndeterminate();\n }\n break;\n case 'cssClass':\n this.setCssClass(oldProp.cssClass, newProp.cssClass);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'expandedNodes':\n this.isAnimate = false;\n this.setProperties({ expandedNodes: [] }, true);\n this.collapseAll();\n this.isInitalExpand = true;\n this.setProperties({ expandedNodes: isNOU(newProp.expandedNodes) ? [] : newProp.expandedNodes }, true);\n this.doExpandAction();\n this.isInitalExpand = false;\n this.isAnimate = true;\n break;\n case 'expandOn':\n this.wireExpandOnEvent(false);\n this.setExpandOnType();\n if (this.expandOnType !== 'None') {\n this.wireExpandOnEvent(true);\n }\n break;\n case 'fields':\n this.isAnimate = false;\n this.initialRender = true;\n this.updateListProp(this.fields);\n this.reRenderNodes();\n this.initialRender = false;\n this.isAnimate = true;\n break;\n case 'fullRowSelect':\n this.setFullRow(this.fullRowSelect);\n this.addFullRow(this.fullRowSelect);\n break;\n case 'nodeTemplate':\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n this.reRenderNodes();\n break;\n case 'selectedNodes':\n this.removeSelectAll();\n this.setProperties({ selectedNodes: newProp.selectedNodes }, true);\n this.doSelectionAction();\n break;\n case 'showCheckBox':\n this.reRenderNodes();\n break;\n case 'sortOrder':\n this.reRenderNodes();\n break;\n }\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n */\n TreeView.prototype.destroy = function () {\n this.element.removeAttribute('aria-activedescendant');\n this.element.removeAttribute('tabindex');\n this.unWireEvents();\n this.wireEditingEvents(false);\n this.rippleFn();\n this.rippleIconFn();\n this.setCssClass(this.cssClass, null);\n this.setDragAndDrop(false);\n this.setFullRow(false);\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Adds the collection of TreeView nodes based on target and index position. If target node is not specified,\n * then the nodes are added as children of the given parentID or in the root level of TreeView.\n * @param { { [key: string]: Object }[] } nodes - Specifies the array of JSON data that has to be added.\n * @param { string | Element } target - Specifies ID of TreeView node/TreeView node as target element.\n * @param { number } index - Specifies the index to place the newly added nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n */\n TreeView.prototype.addNodes = function (nodes, target, index, preventTargetExpand) {\n if (isNOU(nodes)) {\n return;\n }\n nodes = JSON.parse(JSON.stringify(nodes));\n var dropLi = this.getElement(target);\n this.preventExpand = preventTargetExpand;\n if (this.fields.dataSource instanceof DataManager) {\n var dropUl_1;\n var icon = dropLi ? dropLi.querySelector('.' + ICON) : null;\n var proxy_5 = this;\n if (dropLi && icon && icon.classList.contains(EXPANDABLE) &&\n dropLi.querySelector('.' + PARENTITEM) === null) {\n proxy_5.renderChildNodes(dropLi, null, function () {\n dropUl_1 = dropLi.querySelector('.' + PARENTITEM);\n proxy_5.addGivenNodes(nodes, dropLi, index, true, dropUl_1);\n proxy_5.triggerEvent();\n });\n }\n else {\n this.addGivenNodes(nodes, dropLi, index, true);\n this.triggerEvent();\n }\n }\n else if (this.dataType === 2) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n if (dropLi) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n nodes = this.getSortedData(nodes);\n for (var i = 0; i < nodes.length; i++) {\n var pid = getValue(this.fields.parentID, nodes[i]);\n dropLi = pid ? this.getElement(pid.toString()) : pid;\n this.addGivenNodes([nodes[i]], dropLi, index);\n }\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n this.triggerEvent();\n }\n };\n /**\n * Instead of clicking on the TreeView node for editing, we can enable it by using\n * `beginEdit` property. On passing the node ID or element through this property, the edit textBox\n * will be created for the particular node thus allowing us to edit it.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.beginEdit = function (node) {\n var ele = this.getElement(node);\n if (!isNOU(ele)) {\n this.createTextbox(ele, null);\n }\n };\n /**\n * Checks all the unchecked nodes. You can also check specific nodes by passing array of unchecked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.checkAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, true);\n }\n };\n /**\n * Collapses all the expanded TreeView nodes. You can collapse specific nodes by passing array of nodes as argument to this method.\n * You can also collapse all the nodes excluding the hidden nodes by setting **excludeHiddenNodes** to true. If you want to collapse\n * a specific level of nodes, set **level** as argument to collapseAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/ array of TreeView node.\n * @param {number} level - TreeView nodes will collapse up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes of TreeView when collapsing all nodes.\n */\n TreeView.prototype.collapseAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, COLLAPSIBLE, false);\n }\n else {\n if (level > 0) {\n this.collapseByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.collapseAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Disables the collection of nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.disableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doDisableAction(nodes);\n }\n };\n /**\n * Enables the collection of disabled nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.enableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doEnableAction(nodes);\n }\n };\n /**\n * Ensures visibility of the TreeView node by using node ID or node element.\n * When many TreeView nodes are present and we need to find a particular node, `ensureVisible` property\n * helps bring the node to visibility by expanding the TreeView and scrolling to the specific node.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView nodes.\n */\n TreeView.prototype.ensureVisible = function (node) {\n var liEle = this.getElement(node);\n if (isNOU(liEle)) {\n return;\n }\n var parents = this.parents(liEle, '.' + LISTITEM);\n this.expandAll(parents);\n setTimeout(function () { liEle.scrollIntoView(true); }, 450);\n };\n /**\n * Expands all the collapsed TreeView nodes. You can expand the specific nodes by passing the array of collapsed nodes\n * as argument to this method. You can also expand all the collapsed nodes by excluding the hidden nodes by setting\n * **excludeHiddenNodes** to true to this method. To expand a specific level of nodes, set **level** as argument to expandAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @param {number} level - TreeView nodes will expand up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes when expanding all nodes.\n */\n TreeView.prototype.expandAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, EXPANDABLE, true);\n }\n else {\n if (level > 0) {\n this.expandByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.expandAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Gets all the checked nodes including child, whether it is loaded or not.\n */\n TreeView.prototype.getAllCheckedNodes = function () {\n var checkNodes = this.checkedNodes;\n var newCheck = [];\n var i = 0;\n var id = this.fields.id;\n for (i; i < this.treeData.length; i++) {\n //Checks if isChecked is enabled while node is not loaded in DOM\n var checked = null;\n var childNode = null;\n var isLoaded = this.element.querySelector('[data-uid=\"' + this.treeData[i][id].toString() + '\"]');\n if (isLoaded && isLoaded.querySelector('.e-list-item') === null) {\n //Checks if isChecked is enabled for parent\n if (this.treeData[i][this.fields.isChecked] === true\n && this.checkedElement.indexOf(this.treeData[i][id].toString()) === -1) {\n newCheck.push(this.treeData[i][id].toString());\n checked = 2;\n }\n //Checks for child nodes with isChecked enabled\n if (checked !== 2) {\n checked = 1;\n }\n childNode = this.getChildNodes(this.treeData, this.treeData[i][id].toString());\n (childNode !== null) ? this.allCheckNode(childNode, newCheck, checked) : childNode = null;\n }\n }\n i = 0;\n //Gets checked nodes based on UI interaction\n while (i < checkNodes.length) {\n if (newCheck.indexOf(checkNodes[i]) !== -1) {\n i++;\n continue;\n }\n newCheck.push(checkNodes[i]);\n //Gets all child which is not loaded while parent is checked\n var parentNode = this.element.querySelector('[data-uid=\"' + checkNodes[i] + '\"]');\n if (parentNode && parentNode.querySelector('.e-list-item') === null) {\n var child = this.getChildNodes(this.treeData, checkNodes[i].toString());\n (child && this.autoCheck) ? this.allCheckNode(child, newCheck) : child = null;\n }\n i++;\n }\n return newCheck;\n };\n /**\n * Get the node's data such as id, text, parentID, selected, isChecked, and expanded by passing the node element or it's ID.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.getNode = function (node) {\n var ele = this.getElement(node);\n return this.getNodeData(ele, true);\n };\n /**\n * To get the updated data source of TreeView after performing some operation like drag and drop, node editing,\n * node selecting/unSelecting, node expanding/collapsing, node checking/unChecking, adding and removing node.\n * * If you pass the ID of TreeView node as arguments for this method then it will return the updated data source\n * of the corresponding node otherwise it will return the entire updated data source of TreeView.\n * * The updated data source also contains custom attributes if you specified in data source.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.getTreeData = function (node) {\n var id = this.getId(node);\n this.updatePersistProp();\n if (isNOU(id)) {\n return this.treeData;\n }\n else {\n var data = this.getNodeObject(id);\n return isNOU(data) ? [] : [data];\n }\n };\n /**\n * Moves the collection of nodes within the same TreeView based on target or its index position.\n * @param {string[] | Element[]} sourceNodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {number} index - Specifies the index to place the moved nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n */\n TreeView.prototype.moveNodes = function (sourceNodes, target, index, preventTargetExpand) {\n var dropLi = this.getElement(target);\n if (isNOU(dropLi)) {\n return;\n }\n for (var i = 0; i < sourceNodes.length; i++) {\n var dragLi = this.getElement(sourceNodes[i]);\n if (isNOU(dragLi) || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n continue;\n }\n this.preventExpand = preventTargetExpand;\n this.dropAsChildNode(dragLi, dropLi, this, index);\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n this.triggerEvent();\n };\n /**\n * Removes the collection of TreeView nodes by passing the array of node details as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.removeNodes = function (nodes) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n this.removeNode(liEle);\n }\n this.triggerEvent();\n }\n };\n /**\n * Replaces the text of the TreeView node with the given text.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {string} newText - Specifies the new text of TreeView node.\n */\n TreeView.prototype.updateNode = function (target, newText) {\n if (isNOU(target) || isNOU(newText) || !this.allowEditing) {\n return;\n }\n var liEle = this.getElement(target);\n if (isNOU(liEle)) {\n return;\n }\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var eventArgs = this.getEditEvent(liEle, null, null);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.appendNewText(liEle, txtEle, newText, false);\n };\n /**\n * Unchecks all the checked nodes. You can also uncheck the specific nodes by passing array of checked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.uncheckAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, false);\n }\n };\n var TreeView_1;\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Complex({}, NodeAnimationSettings)\n ], TreeView.prototype, \"animation\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"checkedNodes\", void 0);\n __decorate([\n Property('')\n ], TreeView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"expandedNodes\", void 0);\n __decorate([\n Property('Auto')\n ], TreeView.prototype, \"expandOn\", void 0);\n __decorate([\n Complex({}, FieldsSettings)\n ], TreeView.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"fullRowSelect\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"nodeTemplate\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"selectedNodes\", void 0);\n __decorate([\n Property('None')\n ], TreeView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"autoCheck\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"drawNode\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"keyPress\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecking\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeClicked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragging\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStart\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStop\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDropped\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEdited\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEditing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanded\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanding\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelected\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelecting\", void 0);\n TreeView = TreeView_1 = __decorate([\n NotifyPropertyChanges\n ], TreeView);\n return TreeView;\n}(Component));\nexport { TreeView };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, formatUnit, EventHandler, Event, isNullOrUndefined, closest } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, addClass, removeClass, Touch } from '@syncfusion/ej2-base';\nvar CONTROL = 'e-control';\nvar ROOT = 'e-sidebar';\nvar DOCKER = 'e-dock';\nvar CLOSE = 'e-close';\nvar OPEN = 'e-open';\nvar TRASITION = 'e-transition';\nvar DEFAULTBACKDROP = 'e-sidebar-overlay';\nvar CONTEXTBACKDROP = 'e-backdrop';\nvar RTL = 'e-rtl';\nvar RIGHT = 'e-right';\nvar LEFT = 'e-left';\nvar OVER = 'e-over';\nvar PUSH = 'e-push';\nvar SLIDE = 'e-slide';\nvar VISIBILITY = 'e-visibility';\nvar MAINCONTENTANIMATION = 'e-content-animation';\nvar DISABLEANIMATION = 'e-disable-animation';\nvar CONTEXT = 'e-sidebar-context';\nvar SIDEBARABSOLUTE = 'e-sidebar-absolute';\n/**\n * Sidebar is an expandable or collapsible\n * component that typically act as a side container to place the primary or secondary content alongside of the main content.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Sidebar = /** @class */ (function (_super) {\n __extends(Sidebar, _super);\n function Sidebar(options, element) {\n return _super.call(this, options, element) || this;\n }\n Sidebar.prototype.preRender = function () {\n this.setWidth();\n };\n Sidebar.prototype.render = function () {\n this.initialize();\n this.wireEvents();\n };\n Sidebar.prototype.initialize = function () {\n this.setTarget();\n this.addClass();\n this.setZindex();\n if (this.enableDock) {\n this.setDock();\n }\n if (this.isOpen) {\n this.show();\n }\n else {\n this.setMediaQuery();\n }\n this.setType(this.type);\n this.setCloseOnDocumentClick();\n this.setEnableRTL();\n };\n Sidebar.prototype.setEnableRTL = function () {\n this.enableRtl ? (addClass([this.element], RTL)) :\n (removeClass([this.element], RTL));\n };\n Sidebar.prototype.setTarget = function () {\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector(this.target) }, true);\n }\n if (this.target) {\n this.target.insertBefore(this.element, this.target.children[0]);\n addClass([this.element], SIDEBARABSOLUTE);\n addClass([this.target], CONTEXT);\n }\n };\n Sidebar.prototype.setCloseOnDocumentClick = function () {\n if (this.closeOnDocumentClick) {\n EventHandler.add(document, 'mousedown touchstart', this.documentclickHandler, this);\n }\n else {\n EventHandler.remove(document, 'mousedown touchstart', this.documentclickHandler);\n }\n };\n Sidebar.prototype.setWidth = function () {\n if (this.enableDock && this.position === 'Left') {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n else if (this.enableDock && this.position === 'Right') {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n else if (!this.enableDock) {\n setStyle(this.element, { 'width': this.setDimension(this.width) });\n }\n };\n Sidebar.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n Sidebar.prototype.setZindex = function () {\n setStyle(this.element, { 'z-index': '' + this.zIndex });\n };\n Sidebar.prototype.addClass = function () {\n var classELement = document.querySelector('.e-main-content');\n if (!isNullOrUndefined((classELement ||\n this.element.nextElementSibling))) {\n addClass([classELement || this.element.nextElementSibling], [MAINCONTENTANIMATION]);\n }\n if (!this.enableDock && this.type !== 'Auto') {\n addClass([this.element], [VISIBILITY]);\n }\n removeClass([this.element], [OPEN, CLOSE, RIGHT, LEFT, SLIDE, PUSH, OVER]);\n this.element.classList.add(ROOT);\n addClass([this.element], (this.position === 'Right') ? RIGHT : LEFT);\n if (this.type === 'Auto' && !Browser.isDevice && !this.enableDock) {\n addClass([this.element], OPEN);\n }\n else {\n addClass([this.element], CLOSE);\n }\n };\n Sidebar.prototype.destroyBackDrop = function () {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (this.target && this.showBackdrop && sibling) {\n removeClass([sibling], CONTEXTBACKDROP);\n }\n else if (this.showBackdrop && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n /**\n * Hide the Sidebar component, if it is in an open state.\n * @returns void\n */\n Sidebar.prototype.hide = function () {\n var closeArguments = { model: this, element: this.element, cancel: false };\n this.trigger('close', closeArguments);\n if (!closeArguments.cancel) {\n if (this.element.classList.contains(CLOSE)) {\n return;\n }\n if (this.element.classList.contains(OPEN)) {\n var changeArguments = { name: 'change', element: this.element };\n this.trigger('change', changeArguments);\n }\n addClass([this.element], CLOSE);\n removeClass([this.element], OPEN);\n this.enableDock ? setStyle(this.element, { 'width': formatUnit(this.dockSize) }) :\n setStyle(this.element, { 'width': formatUnit(this.width) });\n this.setDock();\n this.setType(this.type);\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (!this.enableDock && sibling) {\n sibling.style.transform = 'translateX(' + 0 + 'px)';\n this.position === 'Left' ? sibling.style.marginLeft = '0px' : sibling.style.marginRight = '0px';\n }\n this.destroyBackDrop();\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.remove('e-sidebar-overflow');\n }\n this.setProperties({ isOpen: false }, true);\n }\n };\n /**\n * Shows the Sidebar component, if it is in closed state.\n * @returns void\n */\n Sidebar.prototype.show = function () {\n var openArguments = { model: this, element: this.element, cancel: false };\n this.trigger('open', openArguments);\n if (!openArguments.cancel) {\n removeClass([this.element], VISIBILITY);\n if (this.element.classList.contains(OPEN)) {\n return;\n }\n if (this.element.classList.contains(CLOSE)) {\n var changeArguments = { name: 'change', element: this.element };\n this.trigger('change', changeArguments);\n }\n addClass([this.element], [OPEN, TRASITION]);\n setStyle(this.element, { 'transform': '' });\n removeClass([this.element], CLOSE);\n setStyle(this.element, { 'width': formatUnit(this.width) });\n var elementWidth = this.element.getBoundingClientRect().width;\n this.setType(this.type);\n this.createBackDrop();\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.add('e-sidebar-overflow');\n }\n this.setProperties({ isOpen: true }, true);\n }\n };\n Sidebar.prototype.setAnimation = function () {\n if (this.animate) {\n removeClass([this.element], DISABLEANIMATION);\n }\n else {\n addClass([this.element], DISABLEANIMATION);\n }\n };\n Sidebar.prototype.setDock = function () {\n if (this.enableDock && this.position === 'Left' && !this.getState()) {\n setStyle(this.element, { 'transform': 'translateX(' + -100 + '%) translateX(' + this.setDimension(this.dockSize) + ')' });\n }\n else if (this.enableDock && this.position === 'Right' && !this.getState()) {\n setStyle(this.element, { 'transform': 'translateX(' + 100 + '%) translateX(' + '-' + this.setDimension(this.dockSize) + ')' });\n }\n if (this.element.classList.contains(CLOSE) && this.enableDock) {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n };\n Sidebar.prototype.createBackDrop = function () {\n if (this.target && this.showBackdrop) {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n addClass([sibling], CONTEXTBACKDROP);\n }\n else if (this.showBackdrop && !this.modal && this.getState()) {\n this.modal = this.createElement('div');\n this.modal.className = DEFAULTBACKDROP;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n };\n Sidebar.prototype.getPersistData = function () {\n return this.addOnPersist(['type', 'position', 'isOpen']);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Sidebar.prototype.getModuleName = function () {\n return 'sidebar';\n };\n /**\n * Shows or hides the Sidebar based on the current state.\n * @returns void\n */\n Sidebar.prototype.toggle = function (e) {\n this.element.classList.contains(OPEN) ? this.hide() : this.show();\n };\n Sidebar.prototype.getState = function () {\n return this.element.classList.contains(OPEN) ? true : false;\n };\n Sidebar.prototype.setMediaQuery = function () {\n if (this.mediaQuery && this.mediaQuery.matches) {\n this.show();\n }\n else if (this.mediaQuery && this.getState()) {\n this.hide();\n }\n };\n Sidebar.prototype.resize = function (e) {\n if (this.type === 'Auto') {\n if (Browser.isDevice) {\n addClass([this.element], OVER);\n }\n else {\n addClass([this.element], PUSH);\n }\n }\n this.setMediaQuery();\n };\n Sidebar.prototype.documentclickHandler = function (e) {\n if (closest(e.target, '.' + CONTROL + '' + '.' + ROOT)) {\n return;\n }\n this.hide();\n };\n Sidebar.prototype.enableGestureHandler = function (args) {\n if (this.position === 'Left' && args.swipeDirection === 'Right' &&\n (args.startX <= 20 && args.distanceX >= 50 && args.velocity >= 0.5)) {\n this.show();\n }\n else if (this.position === 'Left' && args.swipeDirection === 'Left') {\n this.hide();\n }\n else if (this.position === 'Right' && args.swipeDirection === 'Right') {\n this.hide();\n }\n else if (this.position === 'Right' && args.swipeDirection === 'Left'\n && (window.innerWidth - args.startX <= 20 && args.distanceX >= 50 && args.velocity >= 0.5)) {\n this.show();\n }\n };\n Sidebar.prototype.setEnableGestures = function () {\n if (this.enableGestures) {\n this.mainContentEle = new Touch(document.body, { swipe: this.enableGestureHandler.bind(this) });\n this.sidebarEle = new Touch(this.element, { swipe: this.enableGestureHandler.bind(this) });\n }\n else {\n if (this.mainContentEle && this.sidebarEle) {\n this.mainContentEle.destroy();\n this.sidebarEle.destroy();\n }\n }\n };\n Sidebar.prototype.wireEvents = function () {\n this.setEnableGestures();\n window.addEventListener('resize', this.resize.bind(this));\n };\n Sidebar.prototype.unWireEvents = function () {\n window.removeEventListener('resize', this.resize.bind(this));\n EventHandler.remove(document, 'mousedown touchstart', this.documentclickHandler);\n if (this.mainContentEle) {\n this.mainContentEle.destroy();\n }\n if (this.sidebarEle) {\n this.sidebarEle.destroy();\n }\n };\n Sidebar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isOpen':\n this.isOpen ? this.show() : this.hide();\n break;\n case 'width':\n this.setWidth();\n if (!this.getState()) {\n this.setDock();\n }\n break;\n case 'animate':\n this.setAnimation();\n break;\n case 'type':\n removeClass([this.element], [VISIBILITY]);\n this.addClass();\n this.setType(this.type);\n break;\n case 'position':\n this.element.style.transform = '';\n this.setDock();\n if (sibling) {\n this.position === 'Left' ? sibling.style.marginRight = '0px' : sibling.style.marginLeft = '0px';\n }\n if (this.position === 'Right') {\n removeClass([this.element], LEFT);\n addClass([this.element], RIGHT);\n }\n else {\n removeClass([this.element], RIGHT);\n addClass([this.element], LEFT);\n }\n this.setType(this.type);\n break;\n case 'showBackdrop':\n if (this.showBackdrop) {\n this.createBackDrop();\n }\n else {\n if (this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n }\n break;\n case 'target':\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector(this.target) }, true);\n }\n if (isNullOrUndefined(this.target)) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([oldProp.target], CONTEXT);\n setStyle(sibling, { 'margin-left': 0, 'margin-right': 0 });\n document.body.insertAdjacentElement('afterbegin', this.element);\n }\n else {\n _super.prototype.refresh.call(this);\n }\n break;\n case 'closeOnDocumentClick':\n this.setCloseOnDocumentClick();\n break;\n case 'enableDock':\n if (!this.getState()) {\n this.setDock();\n }\n break;\n case 'zIndex':\n this.setZindex();\n break;\n case 'mediaQuery':\n this.setMediaQuery();\n break;\n case 'enableGestures':\n this.setEnableGestures();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n }\n }\n };\n Sidebar.prototype.setType = function (type) {\n var elementWidth = this.element.getBoundingClientRect().width;\n this.setZindex();\n if (this.enableDock) {\n addClass([this.element], DOCKER);\n }\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (sibling) {\n sibling.style.transform = 'translateX(' + 0 + 'px)';\n if (!Browser.isDevice && this.type !== 'Auto') {\n this.position === 'Left' ? sibling.style.marginLeft = '0px' : sibling.style.marginRight = '0px';\n }\n }\n var margin = this.position === 'Left' ? elementWidth + 'px' : elementWidth + 'px';\n var eleWidth = this.position === 'Left' ? elementWidth : -(elementWidth);\n removeClass([this.element], [PUSH, OVER, SLIDE]);\n switch (type) {\n case 'Push':\n addClass([this.element], [PUSH]);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n break;\n case 'Slide':\n addClass([this.element], [SLIDE]);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n sibling.style.transform = 'translateX(' + eleWidth + 'px)';\n }\n break;\n case 'Over':\n addClass([this.element], [OVER]);\n if (this.enableDock && this.element.classList.contains(CLOSE)) {\n if (sibling) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n }\n break;\n case 'Auto':\n addClass([this.element], [TRASITION]);\n if (Browser.isDevice) {\n if (sibling && (this.enableDock) && !this.getState()) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n addClass([this.element], PUSH);\n }\n else {\n addClass([this.element], OVER);\n }\n }\n else {\n addClass([this.element], PUSH);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n this.setProperties({ isOpen: true }, true);\n }\n this.createBackDrop();\n }\n };\n /**\n * Removes the control from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @returns void\n */\n Sidebar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], [OPEN, CLOSE, PUSH, SLIDE, OVER, LEFT, RIGHT, TRASITION]);\n if (this.target) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([this.target], CONTEXT);\n }\n this.destroyBackDrop();\n this.element.style.width = '';\n this.element.style.zIndex = '';\n this.element.style.transform = '';\n var sibling = document.querySelector('.e-main-content')\n || this.element.nextElementSibling;\n if (!isNullOrUndefined(sibling)) {\n sibling.style.margin = '';\n sibling.style.transform = '';\n }\n this.unWireEvents();\n };\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"dockSize\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"mediaQuery\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableDock\", void 0);\n __decorate([\n Property('en-US')\n ], Sidebar.prototype, \"locale\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"enableGestures\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"isOpen\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"animate\", void 0);\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"closeOnDocumentClick\", void 0);\n __decorate([\n Property('Left')\n ], Sidebar.prototype, \"position\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"target\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"showBackdrop\", void 0);\n __decorate([\n Property('Auto')\n ], Sidebar.prototype, \"type\", void 0);\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], Sidebar.prototype, \"zIndex\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"destroyed\", void 0);\n Sidebar = __decorate([\n NotifyPropertyChanges\n ], Sidebar);\n return Sidebar;\n}(Component));\nexport { Sidebar };\n","import { createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DateRangePicker } from '@syncfusion/ej2-calendars';\nimport { getElement } from '../../common/utils/helper';\n/**\n * Period selector class\n */\nvar PeriodSelector = /** @class */ (function () {\n //constructor for period selector\n function PeriodSelector(rangeNavigator) {\n this.control = rangeNavigator;\n }\n /**\n * renderSelector div\n * @param control\n */\n PeriodSelector.prototype.renderSelectorElement = function (control) {\n //render border\n var periodSelectorSize = this.periodSelectorSize;\n var thumbSize = control.themeStyle.thumbWidth;\n this.periodSelectorDiv = createElement('div', {\n id: control.element.id + '_Secondary_Element',\n styles: 'width: ' + (this.periodSelectorSize.width - thumbSize) + 'px;height: ' +\n this.periodSelectorSize.height + 'px;top:' +\n this.periodSelectorSize.y + 'px;left:' +\n (this.periodSelectorSize.x + thumbSize / 2) + 'px; position: absolute'\n });\n this.control.element.appendChild(this.periodSelectorDiv);\n };\n /**\n * renderSelector elements\n */\n PeriodSelector.prototype.renderSelector = function () {\n var _this = this;\n var selectorElement = createElement('div', { id: this.control.element.id + '_selector' });\n this.periodSelectorDiv.appendChild(selectorElement);\n //render toolbar\n var selector = [];\n var buttons = this.control.periodSelectorSettings.periods;\n for (var i = 0; i < buttons.length; i++) {\n selector.push({ align: 'Left', text: buttons[i].text });\n }\n this.calendarId = this.control.element.id + '_calendar';\n selector.push({ template: '
    ', align: 'Right' });\n var selctorArgs = {\n selector: selector,\n name: 'RangeSelector',\n cancel: false,\n enableCustomFormat: false,\n content: ''\n };\n this.control.trigger('selectorRender', selctorArgs);\n this.toolbar = new Toolbar({\n items: selctorArgs.selector, height: this.periodSelectorSize.height,\n clicked: function (args) {\n _this.buttonClick(args, _this.control);\n }, created: function () {\n _this.nodes = _this.toolbar.element.querySelectorAll('.e-toolbar-left')[0];\n if (isNullOrUndefined(_this.selectedIndex)) {\n buttons.map(function (period, index) {\n if (period.selected) {\n _this.control.startValue = _this.changedRange(period.intervalType, _this.control.endValue, period.interval).getTime();\n _this.selectedIndex = (_this.nodes.childNodes.length - buttons.length) + index;\n }\n });\n }\n _this.setSelectedStyle(_this.selectedIndex);\n }\n });\n this.toolbar.appendTo(selectorElement);\n this.triggerChange = true;\n //render calendar\n this.datePicker = new DateRangePicker({\n min: new Date(this.control.chartSeries.xMin),\n max: new Date(this.control.chartSeries.xMax),\n format: 'dd\\'\\/\\'MM\\'\\/\\'yyyy',\n placeholder: 'Select a range',\n showClearButton: false,\n startDate: new Date(this.control.startValue),\n endDate: new Date(this.control.endValue),\n created: function (args) {\n if (selctorArgs.enableCustomFormat) {\n var datePickerElement = document.getElementsByClassName('e-date-range-wrapper')[0];\n datePickerElement.style.display = 'none';\n datePickerElement.insertAdjacentElement('afterend', createElement('div', { id: 'customRange',\n innerHTML: selctorArgs.content, className: 'e-btn e-small' }));\n getElement('customRange').insertAdjacentElement('afterbegin', (createElement('span', { id: 'dateIcon',\n className: 'e-input-group-icon e-range-icon e-icons', styles: 'margin-right: 10px' })));\n document.getElementById('customRange').onclick = function () {\n _this.datePicker.show(getElement('customRange'));\n };\n }\n },\n change: function (args) {\n if (_this.triggerChange) {\n _this.control.rangeSlider.performAnimation(args.startDate.getTime(), args.endDate.getTime(), _this.control);\n }\n }\n });\n this.datePicker.appendTo('#' + this.calendarId);\n };\n /**\n * To set and deselect the acrive style\n * @param buttons\n */\n PeriodSelector.prototype.setSelectedStyle = function (selectedIndex) {\n if (this.control.disableRangeSelector) {\n for (var i = 0, length_1 = this.nodes.childNodes.length; i < length_1; i++) {\n this.nodes.childNodes[i].childNodes[0].classList.remove('e-active');\n this.nodes.childNodes[i].childNodes[0].classList.remove('e-active');\n }\n this.nodes.childNodes[selectedIndex].childNodes[0].classList.add('e-flat');\n this.nodes.childNodes[selectedIndex].childNodes[0].classList.add('e-active');\n }\n };\n /**\n * Button click handling\n */\n PeriodSelector.prototype.buttonClick = function (args, control) {\n var _this = this;\n var toolBarItems = this.toolbar.items;\n var clickedEle = args.item;\n var slider = control.rangeSlider;\n var updatedStart;\n var updatedEnd;\n var buttons = control.periodSelectorSettings.periods;\n var button = buttons.filter(function (btn) { return (btn.text === clickedEle.text); });\n buttons.map(function (period, index) {\n if (period.text === args.item.text) {\n _this.selectedIndex = (_this.nodes.childNodes.length - buttons.length) + index;\n }\n });\n this.setSelectedStyle(this.selectedIndex);\n if (clickedEle.text.toLowerCase() === 'all') {\n updatedStart = control.chartSeries.xMin;\n updatedEnd = control.chartSeries.xMax;\n slider.performAnimation(updatedStart, updatedEnd, control);\n }\n else if (clickedEle.text.toLowerCase() === 'ytd') {\n updatedStart = new Date(new Date(slider.currentEnd).getFullYear().toString()).getTime();\n updatedEnd = slider.currentEnd;\n slider.performAnimation(updatedStart, updatedEnd, control);\n }\n else if (clickedEle.text.toLowerCase() !== '') {\n updatedStart = this.changedRange(button[0].intervalType, slider.currentEnd, button[0].interval).getTime();\n updatedEnd = slider.currentEnd;\n slider.performAnimation(updatedStart, updatedEnd, control);\n }\n if (getElement(this.calendarId + '_popup') && !Browser.isDevice) {\n var element = getElement(this.calendarId + '_popup');\n element.querySelectorAll('.e-range-header')[0].style.display = 'none';\n }\n };\n /**\n *\n * @param type updatedRange for selector\n * @param end\n * @param interval\n */\n PeriodSelector.prototype.changedRange = function (type, end, interval) {\n var result = new Date(end);\n switch (type) {\n case 'Quarter':\n result.setMonth(result.getMonth() - (3 * interval));\n break;\n case 'Months':\n result.setMonth(result.getMonth() - interval);\n break;\n case 'Weeks':\n result.setDate(result.getDate() - (interval * 7));\n break;\n case 'Days':\n result.setDate(result.getDate() - interval);\n break;\n case 'Hours':\n result.setHours(result.getHours() - interval);\n break;\n case 'Minutes':\n result.setMinutes(result.getMinutes() - interval);\n break;\n case 'Seconds':\n result.setSeconds(result.getSeconds() - interval);\n break;\n default:\n result.setFullYear(result.getFullYear() - interval);\n break;\n }\n return result;\n };\n ;\n /**\n * Get module name\n */\n PeriodSelector.prototype.getModuleName = function () {\n return 'PeriodSelector';\n };\n /**\n * To destroy the period selector.\n * @return {void}\n * @private\n */\n PeriodSelector.prototype.destroy = function () {\n /**\n * destroy method\n */\n };\n return PeriodSelector;\n}());\nexport { PeriodSelector };\n","import { Tooltip as SVGTooltip } from '@syncfusion/ej2-svg-base';\nimport { getElement } from '../../common/utils/helper';\nimport { stopTimer } from '../../common/utils/helper';\nimport { firstToLowerCase } from '../../index';\nimport { measureText, createTemplate } from '../../index';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `Tooltip` module is used to render the tooltip for chart series.\n */\nvar RangeTooltip = /** @class */ (function () {\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function RangeTooltip(range) {\n this.control = range;\n this.elementId = range.element.id;\n }\n /**\n * Left tooltip method called here\n * @param rangeSlider\n */\n RangeTooltip.prototype.renderLeftTooltip = function (rangeSlider) {\n this.fadeOutTooltip();\n var content = this.getTooltipContent(rangeSlider.currentStart);\n var contentWidth = this.getContentSize(content);\n var rect = this.control.enableRtl ? rangeSlider.rightRect : rangeSlider.leftRect;\n if (contentWidth > rect.width) {\n rect = rangeSlider.midRect;\n }\n this.leftTooltip = this.renderTooltip(rect, this.createElement('_leftTooltip'), rangeSlider.startX, content);\n };\n /**\n * get the content size\n * @param value\n */\n RangeTooltip.prototype.getContentSize = function (value) {\n var width;\n var font = this.control.tooltip.textStyle;\n if (this.control.tooltip.template) {\n width = createTemplate(createElement('div', {\n id: 'measureElement',\n styles: 'position: absolute;'\n }), 0, this.control.tooltip.template, this.control).getBoundingClientRect().width;\n }\n else {\n // 20 for tooltip padding\n width = measureText(value[0], font).width + 20;\n }\n return width;\n };\n /**\n * Right tooltip method called here\n * @param rangeSlider\n */\n RangeTooltip.prototype.renderRightTooltip = function (rangeSlider) {\n this.fadeOutTooltip();\n var content = this.getTooltipContent(rangeSlider.currentEnd);\n var contentWidth = this.getContentSize(content);\n var rect = this.control.enableRtl ? rangeSlider.leftRect : rangeSlider.rightRect;\n if (contentWidth > rect.width) {\n rect = rangeSlider.midRect;\n rect.x = !this.control.series.length ? rect.x : 0;\n }\n this.rightTooltip = this.renderTooltip(rect, this.createElement('_rightTooltip'), rangeSlider.endX, content);\n };\n /**\n * Tooltip element creation\n * @param id\n */\n RangeTooltip.prototype.createElement = function (id) {\n if (getElement(this.elementId + id)) {\n return getElement(this.elementId + id);\n }\n else {\n var element = document.createElement('div');\n element.id = this.elementId + id;\n element.className = 'ejSVGTooltip';\n element.setAttribute('style', 'pointer-events:none; position:absolute;z-index: 1');\n getElement(this.elementId + '_Secondary_Element').appendChild(element);\n return element;\n }\n };\n /**\n * Tooltip render called here\n * @param bounds\n * @param parent\n * @param pointX\n * @param value\n */\n RangeTooltip.prototype.renderTooltip = function (bounds, parent, pointX, content) {\n var control = this.control;\n var tooltip = control.tooltip;\n var argsData = {\n cancel: false, name: 'tooltipRender', text: content,\n textStyle: tooltip.textStyle\n };\n this.control.trigger('tooltipRender', argsData);\n var left = control.svgObject.getBoundingClientRect().left -\n control.element.getBoundingClientRect().left;\n if (!argsData.cancel) {\n return new SVGTooltip({\n location: { x: pointX, y: control.rangeSlider.sliderY },\n content: argsData.text, marginX: 2,\n enableShadow: false,\n marginY: 2, arrowPadding: 8, rx: 0, ry: 0,\n inverted: control.series.length > 0,\n areaBounds: bounds, fill: tooltip.fill,\n theme: this.control.theme,\n //enableShadow: false,\n clipBounds: { x: left },\n border: tooltip.border, opacity: tooltip.opacity,\n template: tooltip.template,\n textStyle: argsData.textStyle,\n data: {\n 'start': this.getTooltipContent(this.control.startValue)[0],\n 'end': this.getTooltipContent(this.control.endValue)[0],\n 'value': content[0]\n }\n }, parent);\n }\n else {\n return null;\n }\n };\n /**\n * Tooltip content processed here\n * @param value\n */\n RangeTooltip.prototype.getTooltipContent = function (value) {\n var control = this.control;\n var tooltip = control.tooltip;\n var xAxis = control.chartSeries.xAxis;\n var text;\n var format = tooltip.format || xAxis.labelFormat;\n var isCustom = format.match('{value}') !== null;\n var valueType = xAxis.valueType;\n if (valueType === 'DateTime') {\n text = (control.intl.getDateFormat({\n format: format || 'MM/dd/yyyy',\n type: firstToLowerCase(control.skeletonType),\n skeleton: control.dateTimeModule.getSkeleton(xAxis, null, null)\n }))(new Date(value));\n }\n else {\n xAxis.format = control.intl.getNumberFormat({\n format: isCustom ? '' : format,\n useGrouping: control.useGroupingSeparator\n });\n text = control.doubleModule.formatValue(xAxis, isCustom, format, valueType === 'Logarithmic' ? Math.pow(xAxis.logBase, value) : value);\n }\n return [text];\n };\n /**\n * Fadeout animation performed here\n */\n RangeTooltip.prototype.fadeOutTooltip = function () {\n var _this = this;\n var tooltip = this.control.tooltip;\n if (tooltip.displayMode === 'OnDemand') {\n stopTimer(this.toolTipInterval);\n if (this.rightTooltip) {\n this.toolTipInterval = setTimeout(function () {\n _this.leftTooltip.fadeOut();\n _this.rightTooltip.fadeOut();\n }, 1000);\n }\n }\n };\n /**\n * Get module name.\n */\n RangeTooltip.prototype.getModuleName = function () {\n return 'RangeTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n RangeTooltip.prototype.destroy = function (chart) {\n // Destroy method called here\n };\n return RangeTooltip;\n}());\nexport { RangeTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nvar SmithchartFont = /** @class */ (function (_super) {\n __extends(SmithchartFont, _super);\n function SmithchartFont() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Segoe UI')\n ], SmithchartFont.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], SmithchartFont.prototype, \"fontStyle\", void 0);\n __decorate([\n Property('Regular')\n ], SmithchartFont.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('')\n ], SmithchartFont.prototype, \"color\", void 0);\n __decorate([\n Property('12px')\n ], SmithchartFont.prototype, \"size\", void 0);\n __decorate([\n Property(1)\n ], SmithchartFont.prototype, \"opacity\", void 0);\n return SmithchartFont;\n}(ChildProperty));\nexport { SmithchartFont };\nvar SmithchartMargin = /** @class */ (function (_super) {\n __extends(SmithchartMargin, _super);\n function SmithchartMargin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"bottom\", void 0);\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"left\", void 0);\n return SmithchartMargin;\n}(ChildProperty));\nexport { SmithchartMargin };\nvar SmithchartBorder = /** @class */ (function (_super) {\n __extends(SmithchartBorder, _super);\n function SmithchartBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], SmithchartBorder.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], SmithchartBorder.prototype, \"opacity\", void 0);\n __decorate([\n Property('transparent')\n ], SmithchartBorder.prototype, \"color\", void 0);\n return SmithchartBorder;\n}(ChildProperty));\nexport { SmithchartBorder };\n/**\n * Internal use of type rect\n */\nvar SmithchartRect = /** @class */ (function () {\n function SmithchartRect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return SmithchartRect;\n}());\nexport { SmithchartRect };\nvar LabelCollection = /** @class */ (function () {\n function LabelCollection() {\n }\n return LabelCollection;\n}());\nexport { LabelCollection };\nvar LegendSeries = /** @class */ (function () {\n function LegendSeries() {\n }\n return LegendSeries;\n}());\nexport { LegendSeries };\nvar LabelRegion = /** @class */ (function () {\n function LabelRegion() {\n }\n return LabelRegion;\n}());\nexport { LabelRegion };\nvar HorizontalLabelCollection = /** @class */ (function (_super) {\n __extends(HorizontalLabelCollection, _super);\n function HorizontalLabelCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return HorizontalLabelCollection;\n}(LabelCollection));\nexport { HorizontalLabelCollection };\nvar RadialLabelCollections = /** @class */ (function (_super) {\n __extends(RadialLabelCollections, _super);\n function RadialLabelCollections() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return RadialLabelCollections;\n}(HorizontalLabelCollection));\nexport { RadialLabelCollections };\nvar LineSegment = /** @class */ (function () {\n function LineSegment() {\n }\n return LineSegment;\n}());\nexport { LineSegment };\nvar PointRegion = /** @class */ (function () {\n function PointRegion() {\n }\n return PointRegion;\n}());\nexport { PointRegion };\n/**\n * Smithchart internal class for point\n */\nvar Point = /** @class */ (function () {\n function Point() {\n }\n return Point;\n}());\nexport { Point };\nvar ClosestPoint = /** @class */ (function () {\n function ClosestPoint() {\n }\n return ClosestPoint;\n}());\nexport { ClosestPoint };\nvar MarkerOptions = /** @class */ (function () {\n function MarkerOptions(id, fill, borderColor, borderWidth, opacity) {\n this.id = id;\n this.fill = fill;\n this.borderColor = borderColor;\n this.borderWidth = borderWidth;\n this.opacity = opacity;\n }\n return MarkerOptions;\n}());\nexport { MarkerOptions };\nvar SmithchartLabelPosition = /** @class */ (function () {\n function SmithchartLabelPosition() {\n }\n return SmithchartLabelPosition;\n}());\nexport { SmithchartLabelPosition };\nvar Direction = /** @class */ (function () {\n function Direction() {\n this.counterclockwise = 0;\n this.clockwise = 1;\n }\n return Direction;\n}());\nexport { Direction };\nvar DataLabelTextOptions = /** @class */ (function () {\n function DataLabelTextOptions() {\n }\n return DataLabelTextOptions;\n}());\nexport { DataLabelTextOptions };\nvar LabelOption = /** @class */ (function () {\n function LabelOption() {\n }\n return LabelOption;\n}());\nexport { LabelOption };\n/** @private */\nvar SmithchartSize = /** @class */ (function () {\n function SmithchartSize(width, height) {\n this.width = width;\n this.height = height;\n }\n return SmithchartSize;\n}());\nexport { SmithchartSize };\nvar GridArcPoints = /** @class */ (function () {\n function GridArcPoints() {\n }\n return GridArcPoints;\n}());\nexport { GridArcPoints };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\nvar LegendTitle = /** @class */ (function (_super) {\n __extends(LegendTitle, _super);\n function LegendTitle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], LegendTitle.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], LegendTitle.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], LegendTitle.prototype, \"description\", void 0);\n __decorate([\n Property('Center')\n ], LegendTitle.prototype, \"textAlignment\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, SmithchartFont)\n ], LegendTitle.prototype, \"textStyle\", void 0);\n return LegendTitle;\n}(ChildProperty));\nexport { LegendTitle };\nvar LegendLocation = /** @class */ (function (_super) {\n __extends(LegendLocation, _super);\n function LegendLocation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], LegendLocation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], LegendLocation.prototype, \"y\", void 0);\n return LegendLocation;\n}(ChildProperty));\nexport { LegendLocation };\nvar LegendItemStyleBorder = /** @class */ (function (_super) {\n __extends(LegendItemStyleBorder, _super);\n function LegendItemStyleBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], LegendItemStyleBorder.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LegendItemStyleBorder.prototype, \"color\", void 0);\n return LegendItemStyleBorder;\n}(ChildProperty));\nexport { LegendItemStyleBorder };\nvar LegendItemStyle = /** @class */ (function (_super) {\n __extends(LegendItemStyle, _super);\n function LegendItemStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], LegendItemStyle.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], LegendItemStyle.prototype, \"height\", void 0);\n __decorate([\n Complex({}, LegendItemStyleBorder)\n ], LegendItemStyle.prototype, \"border\", void 0);\n return LegendItemStyle;\n}(ChildProperty));\nexport { LegendItemStyle };\nvar LegendBorder = /** @class */ (function (_super) {\n __extends(LegendBorder, _super);\n function LegendBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], LegendBorder.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LegendBorder.prototype, \"color\", void 0);\n return LegendBorder;\n}(ChildProperty));\nexport { LegendBorder };\nvar SmithchartLegendSettings = /** @class */ (function (_super) {\n __extends(SmithchartLegendSettings, _super);\n function SmithchartLegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SmithchartLegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('bottom')\n ], SmithchartLegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('Center')\n ], SmithchartLegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property('circle')\n ], SmithchartLegendSettings.prototype, \"shape\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"rowCount\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"columnCount\", void 0);\n __decorate([\n Property(8)\n ], SmithchartLegendSettings.prototype, \"itemPadding\", void 0);\n __decorate([\n Property(5)\n ], SmithchartLegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property('')\n ], SmithchartLegendSettings.prototype, \"description\", void 0);\n __decorate([\n Property(true)\n ], SmithchartLegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Complex({}, LegendTitle)\n ], SmithchartLegendSettings.prototype, \"title\", void 0);\n __decorate([\n Complex({}, LegendLocation)\n ], SmithchartLegendSettings.prototype, \"location\", void 0);\n __decorate([\n Complex({}, LegendItemStyle)\n ], SmithchartLegendSettings.prototype, \"itemStyle\", void 0);\n __decorate([\n Complex({}, LegendBorder)\n ], SmithchartLegendSettings.prototype, \"border\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, SmithchartFont)\n ], SmithchartLegendSettings.prototype, \"textStyle\", void 0);\n return SmithchartLegendSettings;\n}(ChildProperty));\nexport { SmithchartLegendSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\n/**\n * Configures the major Grid lines in the `axis`.\n */\nvar SmithchartMajorGridLines = /** @class */ (function (_super) {\n __extends(SmithchartMajorGridLines, _super);\n function SmithchartMajorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SmithchartMajorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], SmithchartMajorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(true)\n ], SmithchartMajorGridLines.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], SmithchartMajorGridLines.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], SmithchartMajorGridLines.prototype, \"opacity\", void 0);\n return SmithchartMajorGridLines;\n}(ChildProperty));\nexport { SmithchartMajorGridLines };\n/**\n * Configures the major grid lines in the `axis`.\n */\nvar SmithchartMinorGridLines = /** @class */ (function (_super) {\n __extends(SmithchartMinorGridLines, _super);\n function SmithchartMinorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SmithchartMinorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], SmithchartMinorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(false)\n ], SmithchartMinorGridLines.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], SmithchartMinorGridLines.prototype, \"color\", void 0);\n __decorate([\n Property(8)\n ], SmithchartMinorGridLines.prototype, \"count\", void 0);\n return SmithchartMinorGridLines;\n}(ChildProperty));\nexport { SmithchartMinorGridLines };\n/**\n * Configures the axis lines in the `axis`.\n */\nvar SmithchartAxisLine = /** @class */ (function (_super) {\n __extends(SmithchartAxisLine, _super);\n function SmithchartAxisLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SmithchartAxisLine.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], SmithchartAxisLine.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SmithchartAxisLine.prototype, \"color\", void 0);\n __decorate([\n Property('')\n ], SmithchartAxisLine.prototype, \"dashArray\", void 0);\n return SmithchartAxisLine;\n}(ChildProperty));\nexport { SmithchartAxisLine };\nvar SmithchartAxis = /** @class */ (function (_super) {\n __extends(SmithchartAxis, _super);\n function SmithchartAxis() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SmithchartAxis.prototype, \"visible\", void 0);\n __decorate([\n Property('Outside')\n ], SmithchartAxis.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('Hide')\n ], SmithchartAxis.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Complex({}, SmithchartMajorGridLines)\n ], SmithchartAxis.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, SmithchartMinorGridLines)\n ], SmithchartAxis.prototype, \"minorGridLines\", void 0);\n __decorate([\n Complex({}, SmithchartAxisLine)\n ], SmithchartAxis.prototype, \"axisLine\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, SmithchartFont)\n ], SmithchartAxis.prototype, \"labelStyle\", void 0);\n return SmithchartAxis;\n}(ChildProperty));\nexport { SmithchartAxis };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\nvar Subtitle = /** @class */ (function (_super) {\n __extends(Subtitle, _super);\n function Subtitle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Subtitle.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], Subtitle.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Subtitle.prototype, \"description\", void 0);\n __decorate([\n Property('Far')\n ], Subtitle.prototype, \"textAlignment\", void 0);\n __decorate([\n Property(true)\n ], Subtitle.prototype, \"enableTrim\", void 0);\n __decorate([\n Property(null)\n ], Subtitle.prototype, \"maximumWidth\", void 0);\n __decorate([\n Complex(Theme.smithchartSubtitleFont, SmithchartFont)\n ], Subtitle.prototype, \"textStyle\", void 0);\n return Subtitle;\n}(ChildProperty));\nexport { Subtitle };\nvar Title = /** @class */ (function (_super) {\n __extends(Title, _super);\n function Title() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Title.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], Title.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Title.prototype, \"description\", void 0);\n __decorate([\n Property('Center')\n ], Title.prototype, \"textAlignment\", void 0);\n __decorate([\n Property(true)\n ], Title.prototype, \"enableTrim\", void 0);\n __decorate([\n Property(null)\n ], Title.prototype, \"maximumWidth\", void 0);\n __decorate([\n Complex({}, Subtitle)\n ], Title.prototype, \"subtitle\", void 0);\n __decorate([\n Complex(Theme.smithchartTitleFont, SmithchartFont)\n ], Title.prototype, \"font\", void 0);\n __decorate([\n Complex(Theme.smithchartTitleFont, SmithchartFont)\n ], Title.prototype, \"textStyle\", void 0);\n return Title;\n}(ChildProperty));\nexport { Title };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\nvar SeriesTooltipBorder = /** @class */ (function (_super) {\n __extends(SeriesTooltipBorder, _super);\n function SeriesTooltipBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SeriesTooltipBorder.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SeriesTooltipBorder.prototype, \"color\", void 0);\n return SeriesTooltipBorder;\n}(ChildProperty));\nexport { SeriesTooltipBorder };\nvar SeriesTooltip = /** @class */ (function (_super) {\n __extends(SeriesTooltip, _super);\n function SeriesTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SeriesTooltip.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], SeriesTooltip.prototype, \"fill\", void 0);\n __decorate([\n Property(0.95)\n ], SeriesTooltip.prototype, \"opacity\", void 0);\n __decorate([\n Property('')\n ], SeriesTooltip.prototype, \"template\", void 0);\n __decorate([\n Complex({}, SeriesTooltipBorder)\n ], SeriesTooltip.prototype, \"border\", void 0);\n return SeriesTooltip;\n}(ChildProperty));\nexport { SeriesTooltip };\nvar SeriesMarkerBorder = /** @class */ (function (_super) {\n __extends(SeriesMarkerBorder, _super);\n function SeriesMarkerBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(3)\n ], SeriesMarkerBorder.prototype, \"width\", void 0);\n __decorate([\n Property('white')\n ], SeriesMarkerBorder.prototype, \"color\", void 0);\n return SeriesMarkerBorder;\n}(ChildProperty));\nexport { SeriesMarkerBorder };\nvar SeriesMarkerDataLabelBorder = /** @class */ (function (_super) {\n __extends(SeriesMarkerDataLabelBorder, _super);\n function SeriesMarkerDataLabelBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.1)\n ], SeriesMarkerDataLabelBorder.prototype, \"width\", void 0);\n __decorate([\n Property('white')\n ], SeriesMarkerDataLabelBorder.prototype, \"color\", void 0);\n return SeriesMarkerDataLabelBorder;\n}(ChildProperty));\nexport { SeriesMarkerDataLabelBorder };\nvar SeriesMarkerDataLabelConnectorLine = /** @class */ (function (_super) {\n __extends(SeriesMarkerDataLabelConnectorLine, _super);\n function SeriesMarkerDataLabelConnectorLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SeriesMarkerDataLabelConnectorLine.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SeriesMarkerDataLabelConnectorLine.prototype, \"color\", void 0);\n return SeriesMarkerDataLabelConnectorLine;\n}(ChildProperty));\nexport { SeriesMarkerDataLabelConnectorLine };\nvar SeriesMarkerDataLabel = /** @class */ (function (_super) {\n __extends(SeriesMarkerDataLabel, _super);\n function SeriesMarkerDataLabel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SeriesMarkerDataLabel.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], SeriesMarkerDataLabel.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], SeriesMarkerDataLabel.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesMarkerDataLabel.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, SeriesMarkerDataLabelBorder)\n ], SeriesMarkerDataLabel.prototype, \"border\", void 0);\n __decorate([\n Complex({}, SeriesMarkerDataLabelConnectorLine)\n ], SeriesMarkerDataLabel.prototype, \"connectorLine\", void 0);\n __decorate([\n Complex(Theme.dataLabelFont, SmithchartFont)\n ], SeriesMarkerDataLabel.prototype, \"textStyle\", void 0);\n return SeriesMarkerDataLabel;\n}(ChildProperty));\nexport { SeriesMarkerDataLabel };\nvar SeriesMarker = /** @class */ (function (_super) {\n __extends(SeriesMarker, _super);\n function SeriesMarker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SeriesMarker.prototype, \"visible\", void 0);\n __decorate([\n Property('circle')\n ], SeriesMarker.prototype, \"shape\", void 0);\n __decorate([\n Property(6)\n ], SeriesMarker.prototype, \"width\", void 0);\n __decorate([\n Property(6)\n ], SeriesMarker.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], SeriesMarker.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('')\n ], SeriesMarker.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesMarker.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, SeriesMarkerBorder)\n ], SeriesMarker.prototype, \"border\", void 0);\n __decorate([\n Complex({}, SeriesMarkerDataLabel)\n ], SeriesMarker.prototype, \"dataLabel\", void 0);\n return SeriesMarker;\n}(ChildProperty));\nexport { SeriesMarker };\nvar SmithchartSeries = /** @class */ (function (_super) {\n __extends(SmithchartSeries, _super);\n function SmithchartSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('visible')\n ], SmithchartSeries.prototype, \"visibility\", void 0);\n __decorate([\n Property([])\n ], SmithchartSeries.prototype, \"points\", void 0);\n __decorate([\n Property('')\n ], SmithchartSeries.prototype, \"resistance\", void 0);\n __decorate([\n Property('')\n ], SmithchartSeries.prototype, \"reactance\", void 0);\n __decorate([\n Property(null)\n ], SmithchartSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property('')\n ], SmithchartSeries.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], SmithchartSeries.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], SmithchartSeries.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('2000ms')\n ], SmithchartSeries.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(false)\n ], SmithchartSeries.prototype, \"enableSmartLabels\", void 0);\n __decorate([\n Property(1)\n ], SmithchartSeries.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], SmithchartSeries.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, SeriesMarker)\n ], SmithchartSeries.prototype, \"marker\", void 0);\n __decorate([\n Complex({}, SeriesTooltip)\n ], SmithchartSeries.prototype, \"tooltip\", void 0);\n return SmithchartSeries;\n}(ChildProperty));\nexport { SmithchartSeries };\n","import { measureText } from '../../smithchart/utils/helper';\n/* tslint:disable:no-string-literal */\nvar AreaBounds = /** @class */ (function () {\n function AreaBounds() {\n }\n AreaBounds.prototype.calculateAreaBounds = function (smithchart, title, bounds) {\n var x;\n var y;\n var width;\n var height;\n var rightSpace;\n var margin = smithchart.margin;\n var border = smithchart.border;\n var spaceValue = this.getLegendSpace(smithchart, bounds);\n x = spaceValue['leftLegendWidth'] + margin.left + border.width;\n rightSpace = spaceValue['rightLegendWidth'] + margin.left + margin.right + (2 * border.width);\n width = smithchart.availableSize['width'] - (x + rightSpace);\n y = margin['top'] + (2 * smithchart.elementSpacing) + spaceValue['modelTitleHeight'] +\n spaceValue['modelsubTitleHeight'] + spaceValue['topLegendHeight'] + border.width;\n height = smithchart.availableSize['height'] - (spaceValue['modelTitleHeight'] +\n (2 * smithchart.elementSpacing) + spaceValue['modelsubTitleHeight'] + margin['top'] +\n spaceValue['topLegendHeight'] + spaceValue['bottomLegendHeight']);\n return { x: x, y: y, width: width, height: height };\n };\n AreaBounds.prototype.getLegendSpace = function (smithchart, bounds) {\n var title = smithchart.title;\n var legend = smithchart.legendSettings;\n var position = legend.position.toLowerCase();\n var subtitleHeight = 0;\n var modelsubTitleHeight = 0;\n var titleHeight = 0;\n var font = smithchart.font;\n var modelTitleHeight = 0;\n var itemPadding = 10;\n var legendBorder = legend.border.width;\n var leftLegendWidth = 0;\n var rightLegendWidth = 0;\n var topLegendHeight = 0;\n var bottomLegendHeight = 0;\n var ltheight = 0;\n var space;\n if (legend['visible']) {\n space = (bounds.width + (itemPadding / 2) + smithchart.elementSpacing + (2 * legendBorder));\n leftLegendWidth = position === 'left' ? space : 0;\n rightLegendWidth = position === 'right' ? space : 0;\n ltheight = legend['title'].visible ? measureText(legend['title'].text, font)['height'] : 0;\n topLegendHeight = position === 'top' ? smithchart.elementSpacing + bounds.height + ltheight : 0;\n bottomLegendHeight = position === 'bottom' ? smithchart.elementSpacing + bounds.height + ltheight : 0;\n }\n subtitleHeight = measureText(title.subtitle.text, font)['height'];\n modelTitleHeight = (title.text === '' || !title['visible']) ? 0 : (titleHeight);\n modelsubTitleHeight = (title['subtitle'].text === '' || !title['subtitle'].visible) ? 0 : (subtitleHeight);\n return {\n leftLegendWidth: leftLegendWidth, rightLegendWidth: rightLegendWidth,\n topLegendHeight: topLegendHeight, bottomLegendHeight: bottomLegendHeight,\n modelTitleHeight: modelTitleHeight, modelsubTitleHeight: modelsubTitleHeight\n };\n };\n return AreaBounds;\n}());\nexport { AreaBounds };\n","import { measureText } from '../../smithchart/utils/helper';\nimport { HorizontalLabelCollection, LabelRegion, Point, Direction } from '../../smithchart/utils/utils';\nimport { GridArcPoints, RadialLabelCollections } from '../../smithchart/utils/utils';\nimport { PathOption, TextOption, renderTextElement, _getEpsilonValue } from '../../smithchart/utils/helper';\n/* tslint:disable:no-string-literal */\nvar AxisRender = /** @class */ (function () {\n function AxisRender() {\n this.radialLabels = [-50, -20, -10, -5, -4, -3, -2, -1.5, -1, -0.8, -0.6, -0.4, -0.2,\n 0, 0.2, 0.4, 0.6, 0.8, 1, 1.5, 2, 3, 4, 5, 10, 20, 50];\n this.radialLabelCollections = [];\n this.horizontalLabelCollections = [];\n this.labelCollections = [];\n this.direction = new Direction();\n }\n AxisRender.prototype.renderArea = function (smithchart, bounds) {\n this.calculateChartArea(smithchart, bounds);\n this.calculateCircleMargin(smithchart, bounds);\n this.calculateXAxisRange(smithchart);\n this.calculateRAxisRange(smithchart);\n this.measureHorizontalAxis(smithchart);\n this.measureRadialAxis(smithchart);\n if (smithchart.horizontalAxis.visible) {\n this.updateHAxis(smithchart);\n }\n if (smithchart.radialAxis.visible) {\n this.updateRAxis(smithchart);\n }\n if (smithchart.horizontalAxis.visible) {\n this.drawHAxisLabels(smithchart);\n }\n if (smithchart.radialAxis.visible) {\n this.drawRAxisLabels(smithchart);\n }\n };\n AxisRender.prototype.updateHAxis = function (smithchart) {\n var majorGridLines = smithchart.horizontalAxis.majorGridLines;\n var minorGridLines = smithchart.horizontalAxis.minorGridLines;\n var axisLine = smithchart.horizontalAxis.axisLine;\n if (majorGridLines.visible) {\n this.updateHMajorGridLines(smithchart);\n }\n if (minorGridLines.visible) {\n this.updateHMinorGridLines(smithchart);\n }\n if (axisLine.visible) {\n this.updateHAxisLine(smithchart);\n }\n };\n AxisRender.prototype.updateRAxis = function (smithchart) {\n var majorGridLines = smithchart.radialAxis.majorGridLines;\n var minorGridLines = smithchart.radialAxis.minorGridLines;\n var axisLine = smithchart.radialAxis.axisLine;\n if (majorGridLines.visible) {\n this.updateRMajorGridLines(smithchart);\n }\n if (minorGridLines.visible) {\n this.updateRMinorGridLines(smithchart);\n }\n if (axisLine.visible) {\n this.updateRAxisLine(smithchart);\n }\n };\n AxisRender.prototype.measureHorizontalAxis = function (smithchart) {\n var majorGridLines = smithchart.horizontalAxis.majorGridLines;\n var minorGridLines = smithchart.horizontalAxis.minorGridLines;\n this.measureHMajorGridLines(smithchart);\n if (minorGridLines.visible) {\n this.measureHMinorGridLines(smithchart);\n }\n };\n AxisRender.prototype.measureRadialAxis = function (smithchart) {\n var majorGridLines = smithchart.radialAxis.majorGridLines;\n var minorGridLines = smithchart.radialAxis.minorGridLines;\n this.measureRMajorGridLines(smithchart);\n if (minorGridLines.visible) {\n this.measureRMinorGridLines(smithchart);\n }\n };\n AxisRender.prototype.calculateChartArea = function (smithchart, bounds) {\n var chartAreaWidth;\n var chartAreaHeight;\n var width = smithchart.availableSize.width;\n var height = smithchart.availableSize.height;\n var x;\n var y;\n width = bounds.width;\n height = bounds.height;\n chartAreaWidth = Math.min(width, height);\n chartAreaHeight = Math.min(width, height);\n x = bounds.x + (bounds.width / 2 - chartAreaWidth / 2);\n y = bounds.y + ((height - chartAreaHeight) / 2 > 0 ? (height - chartAreaHeight) / 2 : 0);\n smithchart.chartArea = { x: x, y: y, width: chartAreaWidth, height: chartAreaHeight };\n };\n AxisRender.prototype.calculateCircleMargin = function (smithchart, bounds) {\n var padding = 10;\n var maxLabelWidth = 0;\n var width = smithchart.chartArea.width;\n var radius = smithchart.radius;\n maxLabelWidth = this.maximumLabelLength(smithchart);\n var labelMargin = (smithchart.radialAxis.labelPosition === 'Outside') ? (maxLabelWidth + padding) : padding;\n var diameter = width - labelMargin * 2 > 0 ? width - labelMargin * 2 : 0;\n var actualRadius = diameter / 2;\n var circleCoefficient = radius > 1 ? 1 : (radius < 0.1 ? 0.1 : radius);\n this.areaRadius = actualRadius * circleCoefficient;\n this.circleLeftX = smithchart.chartArea.x + labelMargin + (actualRadius * (1 - circleCoefficient));\n this.circleTopY = smithchart.chartArea.y + labelMargin + (actualRadius * (1 - circleCoefficient));\n this.circleCenterX = this.circleLeftX + this.areaRadius;\n this.circleCenterY = bounds.y + bounds.height / 2;\n };\n AxisRender.prototype.maximumLabelLength = function (smithchart) {\n var maximumLabelLength = 0;\n var font = smithchart.horizontalAxis.labelStyle;\n var label;\n var textSize;\n for (var i = 0; i < this.radialLabels.length; i++) {\n label = this.radialLabels[i].toString();\n textSize = measureText(label, font);\n if (maximumLabelLength < textSize.width) {\n maximumLabelLength = textSize.width;\n }\n }\n return maximumLabelLength;\n };\n AxisRender.prototype.calculateAxisLabels = function () {\n var spacingBetweenGridLines = 30;\n var previousR = 0;\n var j = 0;\n var labels = [];\n var diameter = this.areaRadius * 2;\n for (var i = 0; i < 2; i = i + 0.1) {\n i = Math.round(i * 10) / 10;\n var coeff = 1 / (i + 1);\n var isOverlap1 = false;\n var isOverlap2 = false;\n var radius = ((diameter * coeff) / 2) * 2;\n if (previousR === 0.0 || i === 1) {\n previousR = radius;\n labels[j] = i;\n j++;\n continue;\n }\n if (i < 1) {\n isOverlap1 = this.isOverlap(1, diameter, radius, spacingBetweenGridLines);\n }\n if (i > 1) {\n isOverlap2 = this.isOverlap(2, diameter, radius, spacingBetweenGridLines);\n }\n if (isOverlap1 || isOverlap2) {\n continue;\n }\n if (previousR - radius >= spacingBetweenGridLines) {\n labels[j] = i;\n j++;\n previousR = radius;\n }\n }\n var staticlabels = [2, 3, 4, 5, 10, 20, 50];\n for (var k = 0; k < staticlabels.length; k++) {\n labels[j] = staticlabels[k];\n j++;\n }\n return labels;\n };\n AxisRender.prototype.isOverlap = function (x, d, previousR, spacingBetweenGridLines) {\n var coeff;\n var radius;\n coeff = 1 / (x + 1); // (1 / 1+r) find the radius for the x value\n radius = ((d * coeff) / 2) * 2;\n return previousR - radius < spacingBetweenGridLines;\n };\n AxisRender.prototype.calculateXAxisRange = function (smithchart) {\n var previousR = 0;\n var x;\n var coeff;\n var radius;\n var cx;\n var diameter = this.areaRadius * 2;\n var horizontalAxisLabels = this.calculateAxisLabels();\n var cy = this.circleCenterY;\n var circleStartX = this.circleLeftX;\n var leftX = this.circleLeftX;\n for (var i = 0; i < horizontalAxisLabels.length; i++) {\n x = horizontalAxisLabels[i];\n coeff = 1 / (x + 1);\n radius = (diameter * coeff) / 2;\n if (smithchart.renderType === 'Impedance') {\n leftX = circleStartX + diameter - (radius * 2);\n }\n cx = leftX + radius;\n this.horizontalLabelCollections.push({\n centerX: cx, centerY: cy, radius: radius, value: x, region: null\n });\n }\n };\n AxisRender.prototype.calculateRAxisRange = function (smithchart) {\n var arcCy;\n var arcRadius;\n var diameter = this.areaRadius * 2;\n var y;\n var point = new Point();\n if (smithchart.renderType === 'Impedance') {\n point.x = this.circleLeftX + diameter;\n point.y = this.circleTopY + this.areaRadius;\n }\n else {\n point.x = this.circleLeftX;\n point.y = this.circleTopY + this.areaRadius;\n }\n for (var i = 0; i < this.radialLabels.length; i++) {\n y = this.radialLabels[i];\n arcRadius = Math.abs(((1 / y) * diameter) / 2);\n if (smithchart.renderType === 'Impedance') {\n arcCy = y > 0 ? point.y - arcRadius : point.y + arcRadius;\n }\n else {\n arcCy = y < 0 ? point.y - arcRadius : point.y + arcRadius;\n }\n this.radialLabelCollections.push({\n centerX: point.x, centerY: arcCy, radius: arcRadius, value: y\n });\n }\n };\n AxisRender.prototype.measureHMajorGridLines = function (smithchart) {\n var arcPoints = [];\n var startPoint;\n var endPoint;\n var radialPoint1;\n var radialPoint2;\n var size;\n this.majorHGridArcPoints = [];\n for (var i = 0; i < this.horizontalLabelCollections.length; i++) {\n var circlePoint = new HorizontalLabelCollection();\n circlePoint = this.horizontalLabelCollections[i];\n arcPoints = this.calculateHMajorArcStartEndPoints(circlePoint.value);\n if (smithchart.renderType === 'Impedance') {\n radialPoint1 = arcPoints[0];\n radialPoint2 = arcPoints[1];\n }\n else {\n radialPoint1 = arcPoints[1];\n radialPoint2 = arcPoints[0];\n }\n size = { width: circlePoint.radius, height: circlePoint.radius };\n if (circlePoint.value !== 0.0 && circlePoint.value !== 50.0) {\n startPoint = this.intersectingCirclePoints(radialPoint1[0].centerX, radialPoint1[0].centerY, radialPoint1[0].radius, circlePoint.centerX, circlePoint.centerY, circlePoint.radius, smithchart.renderType);\n endPoint = this.intersectingCirclePoints(radialPoint2[0].centerX, radialPoint2[0].centerY, radialPoint2[0].radius, circlePoint.centerX, circlePoint.centerY, circlePoint.radius, smithchart.renderType);\n this.majorHGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: (smithchart.renderType === 'Impedance') ?\n this.direction['counterclockwise'] : this.direction['clockwise'],\n isLargeArc: true,\n size: size\n });\n }\n else {\n startPoint = { x: circlePoint.centerX + circlePoint.radius, y: circlePoint.centerY };\n endPoint = { x: circlePoint.centerX + circlePoint.radius, y: circlePoint.centerY - 0.05 };\n this.majorHGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: this.direction['clockwise'],\n isLargeArc: true,\n size: size\n });\n }\n }\n };\n AxisRender.prototype.measureRMajorGridLines = function (smithchart) {\n var epsilon;\n var radialPoint;\n var y;\n var arcPoints = [];\n var innerInterSectPoint;\n var outerInterSectPoint;\n var outterInterSectRadian;\n var outterInterSectAngle;\n var startPoint;\n var endPoint;\n var size;\n var sweepDirection;\n this.majorRGridArcPoints = [];\n this.labelCollections = [];\n epsilon = _getEpsilonValue();\n for (var i = 0; i < this.radialLabelCollections.length; i++) {\n radialPoint = this.radialLabelCollections[i];\n if (radialPoint.radius <= epsilon) {\n continue;\n }\n y = radialPoint.value;\n arcPoints = this.calculateMajorArcStartEndPoints(radialPoint, Math.abs(y), smithchart);\n innerInterSectPoint = arcPoints[0];\n outerInterSectPoint = arcPoints[1];\n outterInterSectRadian = this.circleXYRadianValue(this.circleCenterX, this.circleCenterY, outerInterSectPoint.x, outerInterSectPoint.y);\n outterInterSectAngle = outterInterSectRadian * (180 / Math.PI);\n if (y !== 0.0) {\n startPoint = { x: innerInterSectPoint.x, y: innerInterSectPoint.y };\n endPoint = { x: outerInterSectPoint.x, y: outerInterSectPoint.y };\n size = { width: radialPoint.radius, height: radialPoint.radius };\n sweepDirection = y > 0 ? this.direction['clockwise'] : this.direction['counterclockwise'];\n this.majorRGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n size: size,\n rotationAngle: 2 * Math.PI,\n isLargeArc: false,\n sweepDirection: sweepDirection\n });\n this.labelCollections.push({\n centerX: outerInterSectPoint.x,\n centerY: outerInterSectPoint.y,\n angle: outterInterSectAngle,\n value: y,\n radius: this.areaRadius,\n region: null\n });\n }\n else {\n startPoint = { x: this.circleLeftX, y: this.circleCenterY };\n endPoint = { x: this.circleCenterX + this.areaRadius, y: this.circleCenterY };\n this.majorRGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n size: null,\n rotationAngle: null,\n isLargeArc: null,\n sweepDirection: null\n });\n this.labelCollections.push({\n centerX: (smithchart.renderType === 'Impedance') ?\n (this.circleCenterX - this.areaRadius) : (this.circleCenterX + this.areaRadius),\n centerY: this.circleCenterY,\n angle: (smithchart.renderType === 'Impedance') ?\n 180 : 360,\n value: y,\n radius: this.areaRadius,\n region: null\n });\n }\n }\n };\n AxisRender.prototype.circleXYRadianValue = function (centerX, centerY, outterX, outterY) {\n var radian;\n radian = Math.atan2(outterY - centerY, outterX - centerX);\n radian = radian < 0 ? (radian + (360 * Math.PI / 180)) : radian;\n return radian;\n };\n AxisRender.prototype.calculateMajorArcStartEndPoints = function (radialPoint, value, smithchart) {\n var arcPoints = [];\n var circlePoint = [];\n var cx;\n var cy;\n cx = this.circleCenterX;\n cy = this.circleCenterY;\n if (value >= 10) {\n arcPoints[0] = (smithchart.renderType === 'Impedance') ?\n { x: cx + this.areaRadius, y: cy } : { x: cx - this.areaRadius, y: cy };\n }\n else if (value >= 3) {\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c.value === 10; });\n }\n else if (value >= 1) {\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c.value === 5; });\n }\n else {\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c.value === 3; });\n }\n if (circlePoint.length > 0) {\n arcPoints[0] = this.intersectingCirclePoints(radialPoint.centerX, radialPoint.centerY, radialPoint.radius, circlePoint[0].centerX, circlePoint[0].centerY, circlePoint[0].radius, smithchart.renderType);\n }\n arcPoints[1] = this.intersectingCirclePoints(radialPoint.centerX, radialPoint.centerY, radialPoint.radius, cx, cy, this.areaRadius, smithchart.renderType);\n return arcPoints;\n };\n AxisRender.prototype.calculateHMajorArcStartEndPoints = function (value) {\n var arcHPoints = [];\n var calValue1;\n var calValue2;\n if (value <= 0.3) {\n calValue1 = 2.0;\n calValue2 = -2.0;\n }\n else if (value <= 1.0) {\n calValue1 = 3.0;\n calValue2 = -3.0;\n }\n else if (value <= 2.0) {\n calValue1 = 5.0;\n calValue2 = -5.0;\n }\n else if (value <= 5.0) {\n calValue1 = 10.0;\n calValue2 = -10.0;\n }\n else {\n calValue1 = 50.0;\n calValue2 = -50.0;\n }\n arcHPoints[0] = this.radialLabelCollections.filter(function (c) { return c.value === calValue1; });\n arcHPoints[1] = this.radialLabelCollections.filter(function (c) { return c.value === calValue2; });\n return arcHPoints;\n };\n AxisRender.prototype.calculateMinorArcStartEndPoints = function (value) {\n var calValue1;\n var calValue2;\n var marcHPoints = [];\n if (value <= 0.1) {\n calValue1 = 1.0;\n calValue2 = -1.0;\n }\n else if (value <= 0.2) {\n calValue1 = 0.8;\n calValue2 = -0.8;\n }\n else if (value <= 0.3) {\n calValue1 = 0.4;\n calValue2 = -0.4;\n }\n else if (value <= 0.6) {\n calValue1 = 1.0;\n calValue2 = -1.0;\n }\n else if (value <= 1.0) {\n calValue1 = 1.5;\n calValue2 = -1.5;\n }\n else if (value <= 1.5) {\n calValue1 = 2.0;\n calValue2 = -2.0;\n }\n else if (value <= 2.0) {\n calValue1 = 1.0;\n calValue2 = -1.0;\n }\n else if (value <= 5.0) {\n calValue1 = 3.0;\n calValue2 = -3.0;\n }\n else {\n calValue1 = 10.0;\n calValue2 = -10.0;\n }\n marcHPoints[0] = this.radialLabelCollections.filter(function (c) { return c['value'] === calValue1; });\n marcHPoints[1] = this.radialLabelCollections.filter(function (c) { return c['value'] === calValue2; });\n return marcHPoints;\n };\n AxisRender.prototype.intersectingCirclePoints = function (x1, y1, r1, x2, y2, r2, renderType) {\n var cx;\n var cy;\n var midRadius;\n var radiusSquare;\n var a;\n var radiusSquare2;\n var c;\n var fx;\n var gx;\n var ix1;\n var ix2;\n var fy;\n var gy;\n var iy1;\n var iy2;\n var point = { x: 0, y: 0 };\n cx = x1 - x2;\n cy = y1 - y2;\n midRadius = Math.sqrt(cx * cx + cy * cy);\n radiusSquare = midRadius * midRadius;\n a = (r1 * r1 - r2 * r2) / (2 * radiusSquare);\n radiusSquare2 = (r1 * r1 - r2 * r2);\n c = Math.sqrt(2 * (r1 * r1 + r2 * r2) / radiusSquare - (radiusSquare2 * radiusSquare2) / (radiusSquare * radiusSquare) - 1);\n fx = (x1 + x2) / 2 + a * (x2 - x1);\n gx = c * (y2 - y1) / 2;\n ix1 = fx + gx;\n ix2 = fx - gx;\n fy = (y1 + y2) / 2 + a * (y2 - y1);\n gy = c * (x1 - x2) / 2;\n iy1 = fy + gy;\n iy2 = fy - gy;\n if (renderType === 'Impedance') {\n if (ix2 < ix1) {\n point.x = ix2;\n point.y = iy2;\n }\n else {\n point.x = ix1;\n point.y = iy1;\n }\n }\n else {\n if (ix1 > ix2) {\n point.x = ix1;\n point.y = iy1;\n }\n else {\n point.x = ix2;\n point.y = iy2;\n }\n }\n return { x: point.x, y: point.y };\n };\n AxisRender.prototype.updateHMajorGridLines = function (smithchart) {\n var majorGridLine = smithchart.horizontalAxis.majorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_horizontalAxisMajorGridLines' });\n path = this.calculateGridLinesPath(this.majorHGridArcPoints);\n var haxismgoptions = new PathOption(smithchart.element.id + '_horizontalAxisMajorGridLines', 'none', majorGridLine['width'], majorGridLine.color ? majorGridLine.color : smithchart.themeStyle.majorGridLine, majorGridLine['opacity'], majorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(haxismgoptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateRMajorGridLines = function (smithchart) {\n var majorGridLine = smithchart.radialAxis.majorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_radialAxisMajorGridLines' });\n path = this.calculateGridLinesPath(this.majorRGridArcPoints);\n var raxismgoptions = new PathOption(smithchart.element.id + '_radialAxisMajorGridLines', 'none', majorGridLine['width'], majorGridLine.color ? majorGridLine.color : smithchart.themeStyle.majorGridLine, majorGridLine['opacity'], majorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(raxismgoptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateHAxisLine = function (smithchart) {\n var radius = this.areaRadius;\n var point1;\n var point2;\n var size;\n var sweep;\n var isLargeArc;\n var angle;\n var axisLine = smithchart.horizontalAxis.axisLine;\n var direction;\n var groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_hAxisLine' });\n point1 = { x: this.circleCenterX + radius, y: this.circleCenterY };\n point2 = { x: this.circleCenterX + radius, y: (this.circleCenterY - 0.05) };\n size = { width: radius, height: radius };\n sweep = this.direction['clockwise'];\n isLargeArc = 1;\n angle = Math.PI * 2;\n direction = 'M' + '' + point1.x + ' ' + point1.y + ' ' + 'A' + ' ' + size.width +\n ' ' + size.height + ' ' + angle + ' ' + isLargeArc + ' ' + sweep + ' ' + point2.x + ' ' + point2.y + '';\n var options = new PathOption(smithchart.element.id + '_horizontalAxisLine', 'none', axisLine.width, axisLine.color ? axisLine.color : smithchart.themeStyle.axisLine, 1, axisLine.dashArray, direction);\n var element = smithchart.renderer.drawPath(options);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateRAxisLine = function (smithchart) {\n var radius = this.areaRadius;\n var point1;\n var point2;\n var size;\n var sweep;\n var isLargeArc;\n var angle;\n var axisLine = smithchart.radialAxis.axisLine;\n var direction;\n point1 = { x: this.circleCenterX - radius, y: this.circleCenterY };\n point2 = { x: this.circleCenterX + radius, y: this.circleCenterY };\n size = { width: 0, height: 0 };\n sweep = this.direction['counterclockwise'];\n isLargeArc = 0;\n angle = 0;\n direction = 'M' + ' ' + point1.x + ' ' + point1.y + ' ' + 'A' + ' ' +\n size.width + ' ' + size.height + ' ' + angle + ' ' + isLargeArc + ' ' + sweep + ' ' +\n point2.x + ' ' + point2.y + '';\n var options = new PathOption(smithchart.element.id + '_radialAxisLine', 'none', axisLine.width, axisLine.color ? axisLine.color : smithchart.themeStyle.axisLine, 1, axisLine.dashArray, direction);\n var groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_rAxisLine' });\n var element = smithchart.renderer.drawPath(options);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.drawHAxisLabels = function (smithchart) {\n var hAxis = smithchart.horizontalAxis;\n var font = smithchart.horizontalAxis.labelStyle;\n var circleAxis;\n var label;\n var x;\n var y;\n var textSize;\n var curLabel;\n var curLabelBounds;\n var curWidth;\n var curX;\n var preLabel;\n var preLabelBounds;\n var preWidth;\n var preX;\n var groupEle = smithchart.renderer.createGroup({ id: smithchart.element.id + '_HAxisLabels' });\n for (var i = 0; i < this.horizontalLabelCollections.length; i++) {\n circleAxis = this.horizontalLabelCollections[i];\n label = this.horizontalLabelCollections[i].value.toString();\n if (circleAxis.value !== 0.0) {\n x = (smithchart.renderType === 'Impedance') ?\n circleAxis.centerX - circleAxis.radius : circleAxis.centerX + circleAxis.radius;\n y = circleAxis.centerY;\n textSize = measureText(label, font);\n x = (smithchart.renderType === 'Impedance') ? x - textSize.width : x;\n if (hAxis.labelPosition === 'Outside') {\n y -= textSize.height / 4;\n }\n else {\n y += textSize.height;\n }\n this.horizontalLabelCollections[i].region = this.calculateRegion(label, textSize, x, y);\n if (hAxis.labelIntersectAction === 'Hide') {\n curLabel = this.horizontalLabelCollections[i];\n curLabelBounds = curLabel.region.bounds;\n curWidth = curLabelBounds.width;\n curX = curLabelBounds.x;\n for (var j = 1; j < i; j++) {\n preLabel = this.horizontalLabelCollections[j];\n preLabelBounds = preLabel.region.bounds;\n preWidth = preLabelBounds.width;\n preX = preLabelBounds.x;\n if ((smithchart.renderType === 'Impedance') &&\n (preX + preWidth) > (curX)) {\n label = '';\n }\n if ((smithchart.renderType === 'Admittance') &&\n (preX) < curX + curWidth) {\n label = '';\n }\n }\n }\n var axisLabelRenderEventArgs = { text: label.toString(), x: x, y: y,\n name: 'axisLabelRender', cancel: false };\n smithchart.trigger('axisLabelRender', axisLabelRenderEventArgs);\n var options = new TextOption(smithchart.element.id + '_HLabel_' + i, axisLabelRenderEventArgs.x, axisLabelRenderEventArgs.y, 'none', axisLabelRenderEventArgs.text);\n var color = font.color ? font.color : smithchart.themeStyle.axisLabel;\n var element = renderTextElement(options, font, color, groupEle);\n groupEle.appendChild(element);\n }\n }\n smithchart.svgObject.appendChild(groupEle);\n };\n AxisRender.prototype.drawRAxisLabels = function (smithchart) {\n var paddingRadius = 2;\n var font = smithchart.radialAxis.labelStyle;\n var interSectPoint = new RadialLabelCollections();\n var label;\n var textSize;\n var angle;\n var position;\n var textPosition;\n var curX;\n var curY;\n var curWidth;\n var curHeight;\n var curLabel;\n var curLabelBounds;\n var preX;\n var preY;\n var preWidth;\n var preHeight;\n var preLabel;\n var preLabelBounds;\n var rAxis = smithchart.radialAxis;\n var groupEle = smithchart.renderer.createGroup({ id: smithchart.element.id + '_RAxisLabels' });\n for (var i = 0; i < this.labelCollections.length; i++) {\n interSectPoint = this.labelCollections[i];\n label = interSectPoint.value.toString();\n textSize = measureText(label, font);\n angle = Math.round(interSectPoint.angle * 100) / 100;\n if (rAxis.labelPosition === 'Outside') {\n position = this.circlePointPosition(this.circleCenterX, this.circleCenterY, interSectPoint['angle'], this.areaRadius + paddingRadius);\n textPosition = this.setLabelsOutsidePosition(angle, position.x, position.y, textSize);\n }\n else {\n position = this.circlePointPosition(this.circleCenterX, this.circleCenterY, interSectPoint['angle'], this.areaRadius - paddingRadius);\n textPosition = this.setLabelsInsidePosition(angle, position.x, position.y, textSize);\n }\n this.labelCollections[i]['region'] = this.calculateRegion(label, textSize, textPosition.x, textPosition.y);\n if (rAxis.labelIntersectAction === 'Hide') {\n curLabel = this.labelCollections[i];\n curLabelBounds = curLabel['region']['bounds'];\n curWidth = curLabelBounds['width'];\n curHeight = curLabelBounds['height'];\n curX = curLabelBounds['x'];\n curY = curLabelBounds['y'];\n for (var j = 0; j < i; j++) {\n preLabel = this.labelCollections[j];\n preLabelBounds = preLabel['region']['bounds'];\n preWidth = preLabelBounds['width'];\n preHeight = preLabelBounds['height'];\n preX = preLabelBounds['x'];\n preY = preLabelBounds['y'];\n if ((preX <= curX + curWidth) && (curX <= preX + preWidth) && (preY <= curY + curHeight)\n && (curY <= preY + preHeight)) {\n label = ' ';\n }\n }\n }\n var axisLabelRenderEventArgs = { text: label.toString(), x: textPosition.x,\n y: textPosition.y, name: 'axisLabelRender', cancel: false };\n smithchart.trigger('axisLabelRender', axisLabelRenderEventArgs);\n var options = new TextOption(smithchart.element.id + '_RLabel_' + i, axisLabelRenderEventArgs.x, axisLabelRenderEventArgs.y, 'none', axisLabelRenderEventArgs.text);\n var color = font.color ? font.color : smithchart.themeStyle.axisLabel;\n var element = renderTextElement(options, font, color, groupEle);\n groupEle.appendChild(element);\n }\n smithchart.svgObject.appendChild(groupEle);\n };\n AxisRender.prototype.calculateRegion = function (label, textSize, textPositionX, textPositionY) {\n var xAxisLabelRegions = new LabelRegion();\n var bounds = { x: textPositionX, y: textPositionY, width: textSize.width, height: textSize.height };\n xAxisLabelRegions = { bounds: bounds, labelText: label };\n return xAxisLabelRegions;\n };\n AxisRender.prototype.updateHMinorGridLines = function (smithchart) {\n var minorGridLine = smithchart.horizontalAxis.minorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_horizontalAxisMinorGridLines' });\n path = this.calculateGridLinesPath(this.minorHGridArcPoints);\n var haxismioptions = new PathOption(smithchart.element.id + '_horizontalAxisMinorGridLines', 'none', minorGridLine['width'], minorGridLine.color ? minorGridLine.color : smithchart.themeStyle.minorGridLine, minorGridLine['opacity'], minorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(haxismioptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateRMinorGridLines = function (smithchart) {\n var minorGridLine = smithchart.radialAxis.minorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_radialAxisMinorGridLines' });\n path = this.calculateGridLinesPath(this.minorGridArcPoints);\n var raxismioptions = new PathOption(smithchart.element.id + '_radialAxisMinorGridLines', 'none', minorGridLine['width'], minorGridLine.color ? minorGridLine.color : smithchart.themeStyle.minorGridLine, minorGridLine['opacity'], minorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(raxismioptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.calculateGridLinesPath = function (points) {\n var x1;\n var y1;\n var x2;\n var y2;\n var r1;\n var r2;\n var pathSegment = new GridArcPoints();\n var angle;\n var isLargeArc;\n var sweep;\n var sb = '';\n var path;\n for (var i = 0; i < points.length; i++) {\n pathSegment = points[i];\n x1 = pathSegment.startPoint.x;\n y1 = pathSegment.startPoint.y;\n x2 = pathSegment.endPoint.x;\n y2 = pathSegment.endPoint.y;\n r1 = pathSegment.size ? pathSegment.size.width : 0;\n r2 = pathSegment.size ? pathSegment.size.height : 0;\n angle = pathSegment.rotationAngle ? pathSegment.rotationAngle : 0;\n isLargeArc = pathSegment.isLargeArc ? 1 : 0;\n sweep = pathSegment.sweepDirection ? pathSegment.sweepDirection : 0;\n sb = sb + ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + r1 + ' ' + r2 + ' ' +\n angle + ' ' + isLargeArc + ' ' + sweep + ' ' + x2 + ' ' + y2 + ' ');\n }\n path = sb.toString();\n return path;\n };\n AxisRender.prototype.measureHMinorGridLines = function (smithchart) {\n var radialPoint1;\n var radialPoint2;\n var k = 0;\n var arcPoints = [];\n var isLargeArc;\n var startPoint;\n var endPoint;\n var size;\n var cx;\n var maxCount = smithchart.horizontalAxis.minorGridLines.count;\n var diameter;\n var previous;\n var next;\n var space;\n var count;\n var interval;\n var radius;\n var leftX;\n this.minorHGridArcPoints = [];\n diameter = this.areaRadius * 2;\n for (var i = 0; i < this.horizontalLabelCollections.length - 3; i++) {\n previous = this.horizontalLabelCollections[i];\n next = this.horizontalLabelCollections[i + 1];\n space = (previous['radius'] - next['radius']) * 2;\n count = Math.floor((maxCount / 100) * space);\n interval = space / count;\n for (var j = 0; j < count; j++) {\n radius = next['radius'] + (j * interval) / 2;\n leftX = (smithchart.renderType === 'Impedance') ?\n (this.circleLeftX + diameter) - (radius * 2) : this.circleLeftX;\n cx = leftX + radius;\n isLargeArc = next['value'] > 5;\n arcPoints = this.calculateMinorArcStartEndPoints(next['value']);\n if (smithchart.renderType === 'Impedance') {\n radialPoint1 = arcPoints[0];\n radialPoint2 = arcPoints[1];\n }\n else {\n radialPoint1 = arcPoints[1];\n radialPoint2 = arcPoints[0];\n }\n startPoint = this.intersectingCirclePoints(radialPoint1[0].centerX, radialPoint1[0].centerY, radialPoint1[0].radius, cx, previous['centerY'], radius, smithchart.renderType);\n endPoint = this.intersectingCirclePoints(radialPoint2[0].centerX, radialPoint2[0].centerY, radialPoint2[0].radius, cx, previous['centerY'], radius, smithchart.renderType);\n size = { width: radius, height: radius };\n this.minorHGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: (smithchart.renderType === 'Impedance') ?\n this.direction['counterclockwise'] : this.direction['clockwise'],\n isLargeArc: isLargeArc,\n size: size\n });\n k++;\n }\n }\n };\n AxisRender.prototype.measureRMinorGridLines = function (smithchart) {\n var maxCount = smithchart.radialAxis.minorGridLines.count;\n var arcCx;\n var nextAngle;\n var k = 0;\n var betweenAngle;\n var circlePoint;\n var circumference;\n var arcStartX;\n var arcStartY;\n var arcStartPoint;\n var previous;\n var next;\n var size;\n var distance;\n var count;\n var interval;\n var centerValue;\n circumference = Math.PI * (this.areaRadius * 2);\n arcStartX = arcCx = (smithchart.renderType === 'Impedance') ?\n this.circleCenterX + this.areaRadius : this.circleCenterX - this.areaRadius;\n arcStartY = this.circleCenterY;\n this.minorGridArcPoints = [];\n arcStartPoint = { x: arcStartX, y: arcStartY };\n for (var i = 2; i < this.labelCollections.length - 3; i++) {\n previous = this.labelCollections[i];\n next = this.labelCollections[i + 1];\n if (smithchart.renderType === 'Impedance') {\n nextAngle = next['angle'] === 360 ? 0 : next['angle'];\n betweenAngle = Math.abs(nextAngle - previous['angle']);\n }\n else {\n nextAngle = previous['angle'] === 360 ? 0 : previous['angle'];\n betweenAngle = Math.abs(nextAngle - next['angle']);\n }\n distance = (circumference / 360) * betweenAngle;\n count = Math.floor((maxCount / 100) * distance);\n interval = betweenAngle / count;\n centerValue = next['value'] > 0 ? next['value'] : previous['value'];\n circlePoint = this.minorGridLineArcIntersectCircle(Math.abs(centerValue));\n for (var j = 1; j < count; j++) {\n var outterInterSectAngle = (interval * j) + (previous['angle'] === 360 ? nextAngle : previous['angle']);\n var outerInterSectPoint = this.circlePointPosition(this.circleCenterX, this.circleCenterY, outterInterSectAngle, this.areaRadius);\n var radius = this.arcRadius(arcStartPoint, outerInterSectPoint, outterInterSectAngle);\n var arcCy = outterInterSectAngle > 180 ? this.circleCenterY - radius : this.circleCenterY + radius;\n var innerInterSectPoint = this.intersectingCirclePoints(arcCx, arcCy, radius, circlePoint[0].centerX, circlePoint[0].centerY, circlePoint[0].radius, smithchart.renderType);\n var startPoint = { x: innerInterSectPoint.x, y: innerInterSectPoint.y };\n var endPoint = { x: outerInterSectPoint.x, y: outerInterSectPoint.y };\n size = { width: radius, height: radius };\n var sweepDirection = previous['value'] >= 0 ? this.direction['clockwise'] : this.direction['counterclockwise'];\n this.minorGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: sweepDirection,\n isLargeArc: false,\n size: size\n });\n k++;\n }\n }\n };\n AxisRender.prototype.minorGridLineArcIntersectCircle = function (centerValue) {\n var circlePoint;\n var calValue;\n if (centerValue >= 3) {\n calValue = 20;\n }\n else if (centerValue >= 1.5) {\n calValue = 10;\n }\n else if (centerValue >= 0.6) {\n calValue = 3;\n }\n else {\n calValue = 2;\n }\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c['value'] === calValue; });\n return circlePoint;\n };\n AxisRender.prototype.circlePointPosition = function (cx, cy, angle, r) {\n var pointX;\n var pointY;\n var radian;\n radian = angle * (Math.PI / 180);\n pointX = cx + r * Math.cos(radian);\n pointY = cy + r * Math.sin(radian);\n return { x: pointX, y: pointY };\n };\n AxisRender.prototype.setLabelsInsidePosition = function (angle, px, py, textSize) {\n var x = px;\n var y = py;\n if (angle === 0 || angle === 360) {\n x -= textSize.width;\n y -= textSize.height / 2;\n }\n else if (angle === 90) {\n x -= textSize.width;\n y += textSize.height / 8;\n }\n else if (angle === 180) {\n y += textSize.height;\n }\n else if (angle === 270) {\n y += textSize.height / 2;\n }\n else if (angle > 0 && angle <= 20) {\n x -= (textSize.width);\n }\n else if (angle > 20 && angle <= 60) {\n x -= (textSize.width + textSize.width / 2);\n y += textSize.height / 2;\n }\n else if (angle > 60 && angle < 90) {\n x -= (textSize.width + textSize.width / 4);\n y += textSize.height / 4;\n }\n else if (angle > 90 && angle <= 135) {\n x -= (textSize.width / 2);\n y += (textSize.height) / 16;\n }\n else if (angle > 135 && angle <= 150) {\n x += (textSize.width / 2);\n y += (textSize.height / 2);\n }\n else if (angle > 150 && angle < 180) {\n x += (textSize.width / 2);\n y += (textSize.height);\n }\n else if (angle > 180 && angle <= 210) {\n x += (textSize.width / 6);\n y += (textSize.height / 6);\n }\n else if (angle > 210 && angle < 240) {\n y += (textSize.height / 4);\n }\n else if (angle > 225 && angle < 270) {\n y += (textSize.height / 3);\n }\n else if (angle > 270 && angle <= 300) {\n x -= (textSize.width + textSize.width / 4);\n y += (textSize.height / 4);\n }\n else if (angle > 300 && angle <= 330) {\n x -= (textSize.width + textSize.width / 3);\n y += (textSize.height / 4);\n }\n else if (angle > 330 && angle <= 340) {\n x -= (textSize.width + textSize.width / 2);\n y += textSize.height / 4;\n }\n else if (angle > 340) {\n x -= textSize.width;\n y += textSize.height / 8;\n }\n return { x: x, y: y };\n };\n AxisRender.prototype.setLabelsOutsidePosition = function (angle, px, py, textSize) {\n var x = px;\n var y = py;\n if (angle === 90) {\n x -= textSize.width / 2;\n y += textSize.height;\n }\n else if (angle === 180) {\n x -= (textSize.width + 5);\n y -= textSize.height / 4;\n }\n else if (angle === 270) {\n x -= textSize.width / 2;\n y -= textSize.height / 4;\n }\n else if (angle === 360) {\n x += 5;\n y -= textSize.height / 2;\n }\n else if (angle > 0 && angle <= 30) {\n x += textSize.width / 4;\n y += textSize.height / 8;\n }\n else if (angle > 30 && angle <= 60) {\n x += textSize.width / 2;\n y += textSize.height / 4;\n }\n else if (angle > 60 && angle <= 90) {\n x -= textSize.width / 2;\n y += textSize.height;\n }\n else if (angle > 90 && angle <= 135) {\n x -= textSize.width;\n y += textSize.height;\n }\n else if (angle > 135 && angle <= 180) {\n x -= (textSize.width + textSize.width / 4);\n y += textSize.height / 4;\n }\n else if (angle > 180 && angle <= 210) {\n x -= textSize.width + textSize.width / 4;\n y -= textSize.height / 4;\n }\n else if (angle > 210 && angle <= 270) {\n x -= textSize.width;\n y -= textSize.height / 4;\n }\n else if (angle > 270 && angle <= 340) {\n y -= textSize.height / 4;\n }\n else if (angle > 340) {\n y += textSize.height / 4;\n x += textSize.width / 6;\n }\n return { x: x, y: y };\n };\n AxisRender.prototype.arcRadius = function (startPoint, endPoint, angle) {\n var mx;\n var my;\n var u;\n var t;\n var cy;\n var radius;\n var radian;\n radian = angle > 180 ? (90 * Math.PI / 180) : (270 * Math.PI / 180); // Angle 90 and 270 used for calculating upper and lower circle\n mx = (endPoint.x - startPoint.x) / 2;\n my = (endPoint.y - startPoint.y) / 2;\n u = (Math.cos(radian) * my - Math.sin(radian) * mx) / (Math.cos(radian) * mx + Math.sin(radian) * my);\n t = (my - mx * u) / Math.sin(radian);\n cy = startPoint.y + Math.sin(radian) * t;\n radius = Math.abs(startPoint.y - cy);\n return radius;\n };\n return AxisRender;\n}());\nexport { AxisRender };\n","import { CircleOption, PathOption } from '../../smithchart/utils/helper';\nimport { SmithchartSize, MarkerOptions } from '../../smithchart/utils/utils';\n/* tslint:disable:no-string-literal */\nvar Marker = /** @class */ (function () {\n function Marker() {\n }\n Marker.prototype.drawMarker = function (smithchart, seriesindex, groupElement, pointsRegion) {\n if (smithchart.series[seriesindex].marker.visible) {\n var marker = smithchart.series[seriesindex].marker;\n var count = smithchart.series[seriesindex].points.length - 1;\n var width = marker.width;\n var height = marker.height;\n var symbolName = marker.shape;\n var gmEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' +\n '_series' + seriesindex + '_Marker' });\n groupElement.appendChild(gmEle);\n var borderWidth = marker.border.width;\n var borderColor = marker.border.color;\n var opacity = marker.opacity;\n var fill = marker.fill ? marker.fill : (smithchart.series[seriesindex].fill ||\n smithchart.seriesColors[seriesindex % smithchart.seriesColors.length]);\n for (var i = 0; i < count + 1; i++) {\n var location_1 = pointsRegion[i]['point'];\n var pointIndex = i;\n var options = new MarkerOptions(smithchart.element.id + '_Series' + seriesindex + '_Points' + pointIndex + '_Marker' + pointIndex, fill, borderColor, borderWidth, opacity);\n gmEle.appendChild(this.drawSymbol(symbolName, marker.imageUrl, location_1, new SmithchartSize(width, height), options, smithchart));\n }\n }\n };\n Marker.prototype.drawSymbol = function (symbolName, url, location, size, options, smithchart) {\n var markerEle;\n var shape = symbolName.toLowerCase();\n var circleOptions;\n var pathOptions;\n var path;\n var border = { color: options['borderColor'], width: options['borderWidth'] };\n var opacity = options.opacity;\n var startX = location.x;\n var startY = location.y;\n var radius = Math.sqrt(size.height * size.height + size.width * size.width) / 2;\n switch (shape) {\n case 'circle':\n circleOptions = new CircleOption(options['id'], options['fill'], border, opacity, location.x, location.y, radius, null);\n markerEle = smithchart.renderer.drawCircle(circleOptions);\n break;\n case 'rectangle':\n path = 'M' + ' ' + (startX + (-size.width / 2)) + ' ' + (startY + (-size.height / 2)) +\n ' ' + 'L' + ' ' + (startX + (size.width / 2)) + ' ' + (startY + (-size.height / 2)) + ' ' +\n 'L' + ' ' + (startX + (size.width / 2)) + ' ' + (startY + (size.height / 2)) +\n ' ' + 'L' + ' ' + (startX + (-size.width / 2)) +\n ' ' + (startY + (size.height / 2)) + ' ' + 'L' + ' ' +\n (startX + (-size.width / 2)) + ' ' + (startY + (-size.height / 2)) + 'z';\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'triangle':\n path = 'M' + ' ' + (startX + (-size.width / 2)) + ' ' + (startY + (size.height / 2)) + ' ' + 'L' + ' ' + (startX) + ' ' +\n (startY + (-size.height / 2)) + ' ' + 'L' + ' ' + (startX + (size.width / 2)) + ' ' +\n (startY + (size.height / 2)) + ' ' + 'L' + ' ' +\n (startX + (-size.width / 2)) + ' ' + (startY + (size.height / 2)) + 'z';\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'diamond':\n path = 'M' + ' ' + (startX + (-size.width / 2)) + ' ' + (startY) + ' ' + 'L' + ' ' +\n (startX) + ' ' + (startY + (-size.height / 2)) + ' ' + 'L' + ' ' + (startX + (size.width / 2)) + ' ' +\n (startY) + ' ' + 'L' + ' ' + (startX) + ' ' + (startY + (size.height / 2)) + ' ' + 'L' + ' ' +\n (startX + (-size.width / 2)) + ' ' + (startY) + 'z';\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'pentagon':\n var eq = 72;\n for (var i = 0; i <= 5; i++) {\n var xValue = radius * Math.cos((Math.PI / 180) * (i * eq));\n var yValue = radius * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (startX + xValue) + ' ' + (startY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (startX + xValue) + ' ' + (startY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n }\n return markerEle;\n };\n return Marker;\n}());\nexport { Marker };\n","/**\n *\n */\nimport { createElement } from '@syncfusion/ej2-base';\nimport { measureText } from '../../smithchart/utils/helper';\nimport { getTemplateFunction, convertElementFromLabel, PathOption } from '../../smithchart/utils/helper';\nimport { SmithchartLabelPosition } from '../../smithchart/utils/utils';\nimport { LabelOption } from '../../smithchart/utils/utils';\n/* tslint:disable:no-string-literal */\nvar DataLabel = /** @class */ (function () {\n function DataLabel() {\n this.textOptions = [];\n this.labelOptions = [];\n this.allPoints = [];\n }\n DataLabel.prototype.drawDataLabel = function (smithchart, seriesindex, groupElement, pointsRegion, bounds) {\n this.textOptions = [];\n this.allPoints = [];\n var margin = smithchart.margin;\n var pointIndex;\n var marker = smithchart.series[seriesindex].marker;\n var region;\n var labelPosition;\n var labelText;\n var textSize;\n var dataLabel = marker.dataLabel;\n var font = dataLabel.textStyle;\n var count = pointsRegion.length;\n for (var i = 0; i < count; i++) {\n labelText = smithchart.series[seriesindex].points[i].reactance.toString();\n textSize = measureText(labelText, font);\n region = pointsRegion[i]['point'];\n var xPos = region.x - textSize.width / 2;\n var yPos = region.y - (textSize.height + marker['height'] + (margin.top));\n var width = textSize.width + (margin.left / 2) + (margin.right / 2);\n var height = textSize.height + (margin.top / 2) + (margin.bottom / 2);\n pointIndex = i;\n labelPosition = new SmithchartLabelPosition();\n labelPosition = { textX: xPos + (margin.left / 2), textY: yPos + (height / 2) + margin.top / 2, x: xPos, y: yPos };\n this.textOptions[i] = {\n id: smithchart.element.id + '_Series' + seriesindex + '_Points' + pointIndex + '_dataLabel' + '_displayText' + i,\n x: labelPosition['textX'],\n y: labelPosition['textY'],\n fill: 'black',\n text: labelText,\n font: font,\n xPosition: xPos,\n yPosition: yPos,\n width: width,\n height: height,\n location: region,\n labelOptions: labelPosition,\n visible: true,\n connectorFlag: null\n };\n }\n var labelOption = new LabelOption();\n labelOption.textOptions = this.textOptions;\n this.labelOptions.push(labelOption);\n this.drawDatalabelSymbol(smithchart, seriesindex, dataLabel, groupElement, bounds, pointsRegion);\n };\n DataLabel.prototype.calculateSmartLabels = function (points, seriesIndex) {\n var length = points['textOptions'].length;\n var count = 0;\n for (var k = 0; k < length; k++) {\n this.allPoints[this.allPoints.length] = points['textOptions'][k];\n this.connectorFlag = false;\n this.compareDataLabels(k, points, count, seriesIndex);\n this.labelOptions[seriesIndex]['textOptions'][k] = points['textOptions'][k];\n this.labelOptions[seriesIndex]['textOptions'][k].connectorFlag = this.connectorFlag;\n }\n };\n DataLabel.prototype.compareDataLabels = function (i, points, count, m) {\n var length = this.allPoints.length;\n var padding = 10;\n var collide;\n var currentLabel;\n var prevLabel;\n for (var j = 0; j < length; j++) {\n prevLabel = this.allPoints[j];\n currentLabel = this.allPoints[length - 1];\n collide = this.isCollide(prevLabel, currentLabel);\n if (collide) {\n this.connectorFlag = true;\n switch (count) {\n case 0:\n // Right\n this.resetValues(currentLabel);\n this.prevLabel = prevLabel;\n currentLabel['xPosition'] = this.prevLabel['xPosition'] + (this.prevLabel['width'] / 2 +\n currentLabel['width'] / 2 + padding);\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 1:\n // Right Bottom\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] + this.prevLabel['width'] / 2 +\n currentLabel['width'] / 2 + padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = currentLabel['location'].y + currentLabel['height'] / 2 + padding / 2;\n currentLabel['y'] = currentLabel['yPosition'] + ((currentLabel['height'] / 2)) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 2:\n // Bottom\n this.resetValues(currentLabel);\n currentLabel['yPosition'] = currentLabel['location'].y + currentLabel['height'] / 2 + padding / 2;\n currentLabel['y'] = currentLabel['yPosition'] + (currentLabel['height'] / 2) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 3:\n // Left Bottom\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] - this.prevLabel['width'] / 2\n - currentLabel['width'] / 2 - padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = currentLabel['height'] / 2 + currentLabel['location'].y + padding / 2;\n currentLabel['y'] = currentLabel['yPosition'] + ((currentLabel['height'] / 2)) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 4:\n // Left\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = (this.prevLabel['xPosition'] - this.prevLabel['width'] / 2 -\n currentLabel['width'] / 2 - padding);\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 5:\n //Left Top\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] - this.prevLabel['width'] / 2 -\n currentLabel['width'] / 2 - padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = this.prevLabel['yPosition'] - currentLabel['height'] - padding;\n currentLabel['y'] = currentLabel['yPosition'] + currentLabel['height'] / 2 + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 6:\n // Top\n this.resetValues(currentLabel);\n currentLabel['yPosition'] = (this.prevLabel['yPosition']) - (currentLabel['height'] + padding);\n currentLabel['y'] = currentLabel['yPosition'] + (currentLabel['height'] / 2) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 7:\n // Right Top\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] + this.prevLabel['width'] / 2 +\n currentLabel['width'] / 2 + padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = this.prevLabel['yPosition'] - currentLabel['height'] - padding;\n currentLabel['y'] = currentLabel['yPosition'] + (currentLabel['height'] / 2) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 8:\n count = 0;\n this.compareDataLabels(i, points, count, m);\n break;\n }\n }\n }\n };\n DataLabel.prototype.isCollide = function (dataLabel1, dataLabel2) {\n var state = false;\n if (dataLabel1 !== dataLabel2) {\n state = !( // to compare data labels\n ((dataLabel1['y'] + dataLabel1['height']) < (dataLabel2['y'])) ||\n (dataLabel1['y'] > (dataLabel2['y'] + dataLabel2['height'])) ||\n ((dataLabel1['x'] + dataLabel1['width'] / 2) < dataLabel2['x'] - dataLabel2['width'] / 2) ||\n (dataLabel1['x'] - dataLabel1['width'] / 2 > (dataLabel2['x'] + dataLabel2['width'] / 2)));\n }\n return state;\n };\n DataLabel.prototype.resetValues = function (currentPoint) {\n currentPoint['xPosition'] = currentPoint['labelOptions']['x'];\n currentPoint['yPosition'] = currentPoint['labelOptions']['y'];\n currentPoint['x'] = currentPoint['labelOptions']['textX'];\n currentPoint['y'] = currentPoint['labelOptions']['textY'];\n };\n DataLabel.prototype.drawConnectorLines = function (smithchart, seriesIndex, index, currentPoint, groupElement) {\n var xPos = currentPoint['xPosition'];\n var yPos = currentPoint['yPosition'];\n var location = currentPoint['location'];\n var endY;\n if (location.y > currentPoint['y']) {\n endY = (currentPoint['y']);\n }\n else {\n endY = (currentPoint['y'] - currentPoint['height'] / 2); // bottom\n }\n var connectorDirection = 'M' + ' ' + (location.x) + ' ' + (location.y) + ' ' + 'L' + ' ' +\n (currentPoint['x']) + ' ' + (endY);\n var connectorLineValues = smithchart.series[seriesIndex].marker.dataLabel.connectorLine;\n var stroke = connectorLineValues.color ? connectorLineValues.color :\n (smithchart.series[seriesIndex].fill ||\n smithchart.seriesColors[seriesIndex % smithchart.seriesColors.length]);\n var options = new PathOption(smithchart.element.id + '_dataLabelConnectorLine' + '_series' + seriesIndex + '_point' + index, 'none', connectorLineValues.width, stroke, 1, 'none', connectorDirection);\n var element = smithchart.renderer.drawPath(options);\n groupElement.appendChild(element);\n };\n DataLabel.prototype.drawDatalabelSymbol = function (smithchart, seriesindex, dataLabel, groupElement, bounds, pointsRegion) {\n for (var i = 0; i < smithchart.series[seriesindex].points.length; i++) {\n if (dataLabel.template) {\n var labelTemplateElement = createElement('div', {\n id: smithchart.element.id + '_seriesIndex_' + seriesindex + '_Label_Template_Group',\n className: 'template',\n styles: 'position: absolute;'\n /* 'top:' + bounds['x'] + 'px;' +\n 'left:' + bounds['y'] + 'px;' +\n 'height:' + smithchart.availableSize.height + 'px;' +\n 'width:' + smithchart.availableSize.width + 'px;'*/\n });\n document.getElementById(smithchart.element.id + '_Secondary_Element').appendChild(labelTemplateElement);\n var templateFn = void 0;\n var labelElement = void 0;\n var id = dataLabel.template + '_seriesIndex' + seriesindex + '_pointIndex' + i + smithchart.element.id;\n var data = { point: smithchart.series[seriesindex].points[i].reactance };\n templateFn = getTemplateFunction(dataLabel.template);\n var templateElement = templateFn(smithchart);\n labelElement = convertElementFromLabel(templateElement, id, data, seriesindex, smithchart);\n labelTemplateElement.appendChild(labelElement);\n labelElement.style.left = pointsRegion[i].point.x - labelElement.offsetWidth / 2 + 'px';\n labelElement.style.top = pointsRegion[i].point.y - labelElement.offsetHeight -\n smithchart.series[seriesindex].marker.height / 2 + 'px';\n var left = parseInt(labelElement.style.left, 10);\n var top_1 = parseInt(labelElement.style.top, 10);\n var width = labelElement.offsetWidth;\n var height = labelElement.offsetHeight;\n var region = pointsRegion[i]['point'];\n var labelPosition = { textX: left, textY: top_1,\n x: left, y: top_1 };\n this.labelOptions[seriesindex]['textOptions'][i] = {\n id: id,\n x: left,\n y: top_1,\n fill: 'black',\n text: '',\n font: dataLabel.textStyle,\n xPosition: left,\n yPosition: top_1,\n width: width,\n height: height,\n location: region,\n labelOptions: labelPosition,\n visible: true,\n connectorFlag: null\n };\n }\n }\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { Marker } from './marker';\nimport { TextOption, renderTextElement } from '../../smithchart/utils/helper';\nimport { SmithchartRect, LineSegment, PointRegion, DataLabelTextOptions } from '../../smithchart/utils/utils';\nimport { _getEpsilonValue, PathOption, RectOption, getAnimationFunction, templateAnimate } from '../../smithchart/utils/helper';\nimport { animationComplete } from '../../smithchart/model/constant';\nimport { DataLabel } from '../../smithchart/series/datalabel';\nimport { Animation } from '@syncfusion/ej2-base';\n/* tslint:disable:no-string-literal */\nvar SeriesRender = /** @class */ (function () {\n function SeriesRender() {\n this.xValues = [];\n this.yValues = [];\n this.pointsRegion = [];\n this.lineSegments = [];\n this.location = [];\n this.dataLabel = new DataLabel();\n }\n SeriesRender.prototype.processData = function (series) {\n var dataArray = series.dataSource;\n var resistance = series.resistance;\n var reactance = series.reactance;\n series.points = [];\n for (var i = 0; i < dataArray.length; i++) {\n series.points.push({ resistance: dataArray[i][resistance],\n reactance: dataArray[i][reactance] });\n }\n };\n // tslint:disable:max-func-body-length\n SeriesRender.prototype.draw = function (smithchart, axisRender, bounds) {\n var groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_seriesCollections' });\n var resistantCx;\n var reactanceCy;\n var series = smithchart.series;\n var seriesLength = series.length;\n var chartAreaRadius = axisRender.areaRadius;\n var interSectPoint;\n var index;\n for (var m = 0; m < seriesLength; m++) {\n var seriesIndex = m;\n if (series[m].dataSource && series[m].resistance && series[m].reactance) {\n this.processData(series[m]);\n }\n this.pointsRegion[m] = [];\n this.location[m] = [];\n for (var j = 0; j < series[m].points.length; j++) {\n this.xValues[j] = series[m].points[j]['resistance'];\n this.yValues[j] = series[m].points[j]['reactance'];\n }\n var chartAreaCx = axisRender.circleCenterX;\n var chartAreaCy = axisRender.circleCenterY;\n var diameter = axisRender.areaRadius * 2;\n var reactanceStartPoint = { x: chartAreaCx + ((smithchart.renderType === 'Impedance') ?\n chartAreaRadius : -chartAreaRadius), y: chartAreaCy };\n var resistantCy = chartAreaCy;\n var reactanceCx = reactanceStartPoint.x;\n for (var k = 0; k < series[m].points.length; k++) {\n var resistance = this.xValues[k];\n var resistantR = (diameter * (1 / (resistance + 1))) / 2;\n var reactance = this.yValues[k];\n var reactanceR = Math.abs(((1 / reactance) * diameter) / 2);\n if (smithchart.renderType === 'Impedance') {\n reactanceCy = reactance > 0 ? chartAreaCy - reactanceR : chartAreaCy + reactanceR;\n resistantCx = (axisRender.circleLeftX + diameter - resistantR);\n }\n else {\n reactanceCy = reactance < 0 ? chartAreaCy - reactanceR : chartAreaCy + reactanceR;\n resistantCx = (axisRender.circleLeftX + resistantR);\n }\n interSectPoint = axisRender.intersectingCirclePoints(reactanceCx, reactanceCy, reactanceR, resistantCx, resistantCy, resistantR, smithchart.renderType);\n var epsilon = _getEpsilonValue();\n if (Math.abs(reactance) < epsilon) {\n interSectPoint.x = (smithchart.renderType === 'Impedance') ?\n resistantCx - resistantR : resistantCx + resistantR;\n interSectPoint.y = chartAreaCy;\n }\n this.pointsRegion[m][k] = new PointRegion();\n this.pointsRegion[m][k] = { point: interSectPoint, x: resistance, y: reactance };\n this.location[m][k] = { x: interSectPoint.x, y: interSectPoint.y };\n }\n for (var i = 0; i < series[m].points.length - 1; i++) {\n index = i + 1;\n this.lineSegments[i] = new LineSegment();\n this.lineSegments[i] = { x1: this.xValues[i], y1: this.yValues[i], x2: this.xValues[index], y2: this.yValues[index] };\n }\n smithchart.svgObject.appendChild(groupElement);\n this.drawSeries(smithchart, seriesIndex, groupElement, bounds);\n }\n for (var j = 0; j < smithchart.series.length; j++) {\n if (smithchart.series[j].enableSmartLabels && smithchart.series[j].marker.dataLabel.visible) {\n var gdlcEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg'\n + '_series' + j + '_Datalabel' + '_connectorLines' });\n var element = document.getElementById(smithchart.element.id + '_svg' + '_seriesCollection' + j);\n if (element) {\n element.appendChild(gdlcEle);\n }\n this.dataLabel.calculateSmartLabels(this.dataLabel.labelOptions[j], j);\n for (var k = 0; k < smithchart.series[j].points.length; k++) {\n var currentPoint = this.dataLabel.labelOptions[j]['textOptions'][k];\n if ((currentPoint.xPosition + currentPoint.width) > (smithchart.chartArea.x + smithchart.chartArea.width)\n || currentPoint.xPosition < smithchart.chartArea.x || currentPoint.yPosition < smithchart.chartArea.y ||\n currentPoint.yPosition + currentPoint.height > smithchart.chartArea.y + smithchart.chartArea.height) {\n this.dataLabel.labelOptions[j].textOptions[k].connectorFlag = false;\n this.dataLabel.labelOptions[j].textOptions[k].visible = false;\n }\n if (currentPoint['connectorFlag']) {\n this.dataLabel.drawConnectorLines(smithchart, j, k, currentPoint, gdlcEle);\n }\n }\n }\n }\n for (var j = 0; j < smithchart.series.length; j++) {\n var dataLabel = smithchart.series[j].marker.dataLabel;\n if (smithchart.series[j].marker.dataLabel.visible) {\n var element = document.getElementById(smithchart.element.id + '_svg' + '_seriesCollection' + j);\n var gdEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg'\n + '_series' + j + '_Datalabel' });\n if (element) {\n element.appendChild(gdEle);\n }\n for (var k = 0; k < smithchart.series[j].points.length; k++) {\n var currentPoint = this.dataLabel.labelOptions[j]['textOptions'][k];\n if (!dataLabel.template && currentPoint.visible) {\n var options = new DataLabelTextOptions();\n options = this.dataLabel.labelOptions[j]['textOptions'][k];\n var font = dataLabel.textStyle;\n var x = options['xPosition'];\n var y = options['yPosition'];\n var id = smithchart.element.id + '_Series' + j + '_Points' + k + '_dataLabel' + '_symbol' + k;\n var fill = dataLabel['fill'] ? dataLabel['fill'] : (smithchart.series[j].fill ||\n smithchart.seriesColors[j % smithchart.seriesColors.length]);\n var border = smithchart.series[j].marker.dataLabel.border;\n var rectOptions = new RectOption(id, fill, border, options['opacity'], new SmithchartRect(x, y, options['width'], options['height']));\n var dataEle = smithchart.renderer.drawRectangle(rectOptions);\n gdEle.appendChild(dataEle);\n var textRenderEventArgs = { text: options['text'], x: options['x'], y: options['y'], seriesIndex: j,\n pointIndex: k, name: 'textRender', cancel: false };\n smithchart.trigger('textRender', textRenderEventArgs);\n var textoptions = new TextOption(options['id'], textRenderEventArgs.x, textRenderEventArgs.y, 'start', textRenderEventArgs.text);\n var color = font.color ? font.color : smithchart.themeStyle.dataLabel;\n var element_1 = renderTextElement(textoptions, font, color, gdEle);\n gdEle.appendChild(element_1);\n }\n else if (dataLabel.template) {\n var element_2 = document.getElementById(dataLabel.template + '_seriesIndex' + j + '_pointIndex' +\n k + smithchart.element.id);\n element_2.style.left = this.dataLabel.labelOptions[j]['textOptions'][k].xPosition + 'px';\n element_2.style.top = this.dataLabel.labelOptions[j]['textOptions'][k].yPosition + 'px';\n }\n }\n }\n }\n for (var i = 0; i < smithchart.series.length; i++) {\n if (smithchart.series[i].enableAnimation && smithchart.animateSeries) {\n if (smithchart.series[i].marker.dataLabel.template) {\n this.animateDataLabelTemplate(i, smithchart);\n }\n var element = document.getElementById(smithchart.element.id + '_svg' + '_seriesCollection' + i);\n this.performAnimation(smithchart, element, i);\n }\n }\n };\n SeriesRender.prototype.drawSeries = function (smithchart, seriesindex, groupElement, bounds) {\n var gsEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_seriesCollection' + seriesindex,\n 'clip-path': 'url(#' + smithchart.element.id + '_ChartSeriesClipRect_' +\n seriesindex + ')' });\n gsEle.setAttribute('visibility', smithchart.series[seriesindex].visibility);\n groupElement.appendChild(gsEle);\n var sb = '';\n var path;\n var marker = smithchart.series[seriesindex].marker;\n var element;\n var count = smithchart.series[seriesindex].points.length - 1;\n for (var i = 0; i < count; i++) {\n var point1 = this.pointsRegion[seriesindex][i]['point'];\n var point2 = this.pointsRegion[seriesindex][i + 1]['point'];\n sb = sb + ('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ' + 'L' +\n ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n path = sb.toString();\n var fill = smithchart.series[seriesindex].fill || smithchart.seriesColors[seriesindex % smithchart.seriesColors.length];\n var seriesEventArgs = { text: smithchart.series[seriesindex].name, fill: fill,\n name: 'seriesRender', cancel: false };\n smithchart.trigger('seriesRender', seriesEventArgs);\n var options = new PathOption(smithchart.element.id + '_series' + seriesindex + '_points', 'none', smithchart.series[seriesindex].width, seriesEventArgs.fill, smithchart.series[seriesindex].opacity, 'none', path);\n this.clipRectElement = smithchart.renderer.drawClipPath(new RectOption(smithchart.element.id + '_ChartSeriesClipRect_' + seriesindex, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: bounds.x, y: bounds.y,\n width: smithchart.availableSize.width,\n height: smithchart.availableSize.height\n }));\n gsEle.appendChild(this.clipRectElement);\n var gspEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + seriesindex });\n element = smithchart.renderer.drawPath(options);\n gspEle.appendChild(element);\n gsEle.appendChild(gspEle);\n var markerrender = new Marker();\n markerrender.drawMarker(smithchart, seriesindex, gsEle, this.pointsRegion[seriesindex]);\n this.dataLabel.drawDataLabel(smithchart, seriesindex, gsEle, this.pointsRegion[seriesindex], bounds);\n };\n SeriesRender.prototype.animateDataLabelTemplate = function (seriesindex, smithchart) {\n var length = smithchart.series[seriesindex].points.length;\n var opacity = 0;\n var delay = 0;\n var duration = parseFloat(smithchart.series[seriesindex].animationDuration);\n for (var i = 0; i < length; i++) {\n var element = document.getElementById(smithchart.series[seriesindex].marker.dataLabel.template +\n '_seriesIndex' + seriesindex + '_pointIndex' + i + smithchart.element.id);\n element.style.visibility = 'hidden';\n templateAnimate(smithchart, element, delay, duration, 'FadeIn');\n // this.fadein(element);\n }\n };\n /*private fadein(element: HTMLElement): void {\n let op: number = 0.1;\n element.style.display = 'block';\n let timer: number = setInterval( (): void => {\n if (op >= 1) {\n clearInterval(timer);\n }\n element.style.opacity = op.toString();\n element.style.filter = 'alpha(opacity=' + op * 100 + ')';\n op += op * 0.1;\n }, 50);\n \n }*/\n SeriesRender.prototype.performAnimation = function (smithchart, gsEle, seriesIndex) {\n var animation = new Animation({});\n var element = document.getElementById('container_svg_seriesCollections');\n var clipRect = gsEle.childNodes[0].childNodes[0].childNodes[0];\n var effect = getAnimationFunction('Linear');\n var reveffect = getAnimationFunction('Reverse');\n var width = +clipRect.getAttribute('width');\n var x = +clipRect.getAttribute('x');\n var value;\n animation.animate(clipRect, {\n duration: parseFloat(smithchart.series[seriesIndex].animationDuration),\n progress: function (args) {\n if (smithchart.renderType === 'Impedance') {\n value = effect(args.timeStamp - args.delay, 0, width, args.duration);\n clipRect.setAttribute('width', value.toString());\n }\n else {\n value = reveffect(args.timeStamp - args.delay, width, 0, args.duration);\n clipRect.setAttribute('x', value.toString());\n }\n },\n end: function (model) {\n if (smithchart.renderType === 'Impedance') {\n clipRect.setAttribute('width', width.toString());\n }\n else {\n clipRect.setAttribute('x', x.toString());\n }\n var event = {\n cancel: false, name: animationComplete, smithchart: smithchart\n };\n smithchart.trigger(animationComplete, event);\n }\n });\n };\n SeriesRender.prototype.getLocation = function (seriesindex, pointIndex) {\n var x;\n var y;\n x = this.location[seriesindex][pointIndex].x;\n y = this.location[seriesindex][pointIndex].y;\n return { x: x, y: y };\n };\n return SeriesRender;\n}());\nexport { SeriesRender };\n","/**\n * Specifies smithchart animationComplete event name.\n * @private\n */\nexport var animationComplete = 'animationComplete';\n/**\n * Specifies smithchart legendRender event name.\n * @private\n */\nexport var legendRender = 'legendRender';\n/**\n * Specifies smithchart titleRender event name.\n * @private\n */\nexport var titleRender = 'titleRender';\n/**\n * Specifies smithchart subtitleRender event name.\n * @private\n */\nexport var subtitleRender = 'subtitleRender';\n/**\n * Specifies smithchart textRender event name.\n * @private\n */\nexport var textRender = 'textRender';\n","import { print as smithchartPrint, createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { smithchartBeforePrint } from '../utils/enum';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\n/**\n * Annotation Module handles the Annotation for Maps\n */\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for Maps\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the Maps\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.smithchartPrint = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.smithchartPrint.moveTo(0, 0);\n this.smithchartPrint.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: smithchartBeforePrint\n };\n this.control.trigger(smithchartBeforePrint, argsData);\n if (!argsData.cancel) {\n smithchartPrint(argsData.htmlContent, this.smithchartPrint);\n }\n };\n /**\n * To get the html string of the Maps\n * @param svgElements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (svgElements) {\n var div = createElement('div');\n if (svgElements) {\n if (svgElements instanceof Array) {\n svgElements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (svgElements instanceof Element) {\n div.appendChild(svgElements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(svgElements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (exportType, fileName, orientation) {\n var _this = this;\n var canvas = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': this.control.availableSize.width.toString(),\n 'height': this.control.availableSize.height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n this.control.svgObject.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(exportType === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(this.control.svgObject)], { type: 'image/svg+xml' }));\n if (exportType === 'SVG') {\n this.triggerDownload(fileName, exportType, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = canvas.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (exportType === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = canvas.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, (_this.control.availableSize.width - 60), _this.control.availableSize.height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n _this.triggerDownload(fileName, exportType, canvas.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, exportType, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + exportType.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","/**\n * Specifies TreeMap beforePrint event name.\n * @private\n */\nexport var smithchartBeforePrint = 'beforePrint';\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Complex, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { createElement, remove, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { createSvg, RectOption, measureText, TextOption, renderTextElement } from '../smithchart/utils/helper';\nimport { removeElement, textTrim } from '../smithchart/utils/helper';\nimport { SmithchartRect } from '../smithchart/utils/utils';\nimport { SmithchartMargin, SmithchartBorder, SmithchartFont } from '../smithchart/utils/utils';\nimport { getThemeColor } from '../smithchart/model/theme';\nimport { SmithchartLegendSettings } from '../smithchart/legend/legend';\nimport { SmithchartAxis } from '../smithchart/axis/axis';\nimport { Title } from '../smithchart/title/title';\nimport { SmithchartSeries } from '../smithchart/series/series';\nimport { AreaBounds } from '../smithchart/utils/area';\nimport { AxisRender } from '../smithchart/axis/axisrender';\nimport { SeriesRender } from '../smithchart/series/seriesrender';\nimport { Collection } from '@syncfusion/ej2-base';\nimport { getSeriesColor } from '../smithchart/model/theme';\nimport { ExportUtils } from '../smithchart/utils/export';\nimport { titleRender, subtitleRender } from '../smithchart/model/constant';\n/* tslint:disable:no-string-literal */\n/**\n * Represents the Smithchart control.\n * ```html\n *
    \n * \n * ```\n */\nvar Smithchart = /** @class */ (function (_super) {\n __extends(Smithchart, _super);\n /**\n * Constructor for creating the Smithchart widget\n */\n function Smithchart(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Get component name\n */\n Smithchart.prototype.getModuleName = function () {\n return 'smithchart';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Smithchart.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Method to create SVG element.\n */\n Smithchart.prototype.createChartSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n Smithchart.prototype.renderTitle = function (title, type, groupEle) {\n var font = title.font ? title.font : title.textStyle;\n var textSize = measureText(title.text, font);\n var x;\n var y;\n var textAlignment = title.textAlignment;\n var titleText = title.text;\n var maxTitleWidth = (isNullOrUndefined(title.maximumWidth)) ?\n Math.abs(this.margin.left + this.margin.right - (this.availableSize.width)) :\n title.maximumWidth;\n var titleWidthEnable = textSize.width > maxTitleWidth ? true : false;\n if (textSize.width > this.availableSize.width) {\n x = this.margin.left + this.border.width;\n }\n else {\n x = textAlignment === 'Center' ? (this.availableSize.width / 2 - textSize['width'] / 2) :\n (textAlignment === 'Near' ? (this.margin.left + this.elementSpacing + this.border.width) : (this.availableSize.width\n - textSize['width'] - (this.margin.right + this.elementSpacing + this.border.width)));\n }\n y = this.margin.top + textSize['height'] / 2 + this.elementSpacing;\n if (title.enableTrim && titleWidthEnable) {\n titleText = textTrim(maxTitleWidth, title.text, font);\n textSize = measureText(titleText, font);\n }\n groupEle = this.renderer.createGroup({ id: this.element.id + '_Title_Group' });\n var titleEventArgs = { text: titleText, x: x, y: y, name: 'titleRender', cancel: false };\n this.trigger(titleRender, titleEventArgs);\n var options = new TextOption(this.element.id + '_Smithchart_' + type, titleEventArgs.x, titleEventArgs.y, 'start', titleEventArgs.text);\n var element = renderTextElement(options, font, this.themeStyle.chartTitle, groupEle);\n element.setAttribute('aria-label', title.description || title.text);\n var titleLocation = { x: x, y: y, textSize: textSize };\n this.svgObject.appendChild(groupEle);\n if (title.subtitle.text !== '' && title.subtitle.visible) {\n this.renderSubtitle(title, type, textSize, this.availableSize, titleLocation, groupEle);\n }\n };\n Smithchart.prototype.renderSubtitle = function (title, type, textSize, size, titleLocation, groupEle) {\n var x;\n var y;\n var font = title.subtitle.textStyle;\n var subTitle = title.subtitle;\n var subTitleSize = measureText(subTitle.text, font);\n var textAnchor;\n var subTitleText = subTitle.text;\n var maxSubTitleWidth = isNullOrUndefined(subTitle.maximumWidth) ?\n (this.bounds.width * 0.75) : subTitle.maximumWidth;\n if (subTitle.enableTrim && subTitleSize.width > maxSubTitleWidth) {\n subTitleText = textTrim(maxSubTitleWidth, subTitle.text, font);\n }\n x = title['subtitle'].textAlignment === 'Far' ? (titleLocation.x + (titleLocation.textSize.width)) :\n (title['subtitle'].textAlignment === 'Near') ? titleLocation.x :\n (titleLocation.x + (titleLocation.textSize.width / 2));\n y = titleLocation.y + (2 * this.elementSpacing);\n textAnchor = title['subtitle'].textAlignment === 'Far' ? 'end' :\n (title['subtitle'].textAlignment === 'Near') ? 'start' : 'middle';\n var subtitleEventArgs = { text: subTitleText, x: x, y: y, name: 'subtitleRender', cancel: false };\n this.trigger(subtitleRender, subtitleEventArgs);\n var options = new TextOption(this.element.id + '_Smithchart_' + type, subtitleEventArgs.x, subtitleEventArgs.y, textAnchor, subtitleEventArgs.text);\n var element = renderTextElement(options, font, this.themeStyle.chartTitle, groupEle);\n element.setAttribute('aria-label', subTitle.description || subTitle.text);\n groupEle.appendChild(element);\n };\n /**\n * @private\n * Render the smithchart border\n */\n Smithchart.prototype.renderBorder = function () {\n var border = this.border;\n var color = this.theme === 'Highcontrast' ? '#000000' : '#FFFFFF';\n this.background = this.background ? this.background : color;\n var borderRect = new RectOption(this.element.id + '_SmithchartBorder', this.background, border, 1, new SmithchartRect(border.width / 2, border.width / 2, this.availableSize.width - border.width, this.availableSize.height - border.width));\n this.svgObject.appendChild(this.renderer.drawRectangle(borderRect));\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Smithchart.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.animateSeries = false;\n var renderer = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'background':\n renderer = true;\n break;\n case 'size':\n this.createChartSvg();\n renderer = true;\n break;\n case 'theme':\n this.animateSeries = true;\n renderer = true;\n break;\n case 'border':\n renderer = true;\n break;\n }\n }\n if (renderer) {\n this.render();\n }\n };\n /**\n * Initialize the event handler.\n */\n Smithchart.prototype.preRender = function () {\n this.trigger('load', { smithchart: this });\n this.unWireEVents();\n this.initPrivateVariable();\n this.wireEVents();\n };\n Smithchart.prototype.initPrivateVariable = function () {\n this.animateSeries = true;\n };\n /**\n * To Initialize the control rendering.\n */\n Smithchart.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getThemeColor(this.theme);\n this.seriesColors = getSeriesColor(this.theme);\n // let count: number = colors.length;\n // for (let i: number = 0; i < this.series.length; i++) {\n // this.series[i].fill = this.series[i].fill ? this.series[i].fill : colors[i % count];\n // }\n };\n Smithchart.prototype.render = function () {\n this.createChartSvg();\n this.element.appendChild(this.svgObject);\n this.setTheme();\n this.createSecondaryElement();\n this.renderBorder();\n if (this.smithchartLegendModule && this.legendSettings.visible) {\n this.legendBounds = this.smithchartLegendModule.renderLegend(this);\n }\n this.legendBounds = this.legendBounds ? this.legendBounds : { x: 0, y: 0, width: 0, height: 0 };\n var areaBounds = new AreaBounds();\n this.bounds = areaBounds.calculateAreaBounds(this, this.title, this.legendBounds);\n if (this.title.text !== '' && this.title.visible) {\n this.renderTitle(this.title, 'title', null);\n }\n var axisRender = new AxisRender();\n axisRender.renderArea(this, this.bounds);\n this.seriesrender = new SeriesRender();\n this.seriesrender.draw(this, axisRender, this.bounds);\n this.trigger('loaded', { smithchart: this });\n };\n Smithchart.prototype.createSecondaryElement = function () {\n if (isNullOrUndefined(document.getElementById(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: absolute;z-index:1;'\n });\n this.element.appendChild(secondaryElement);\n var rect = this.element.getBoundingClientRect();\n var svgRect = document.getElementById(this.element.id + '_svg');\n if (svgRect) {\n var svgClientRect = svgRect.getBoundingClientRect();\n secondaryElement.style.left = Math.max(svgClientRect.left - rect.left, 0) + 'px';\n secondaryElement.style.top = Math.max(svgClientRect.top - rect.top, 0) + 'px';\n }\n }\n else {\n removeElement(this.element.id + '_Secondary_Element');\n }\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of smithChart\n */\n Smithchart.prototype.destroy = function () {\n this.unWireEVents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-smithchart');\n };\n /**\n * To bind event handlers for smithchart.\n */\n Smithchart.prototype.wireEVents = function () {\n EventHandler.add(this.element, 'click', this.smithchartOnClick, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.smithchartOnResize.bind(this));\n };\n Smithchart.prototype.mouseMove = function (e) {\n if (e.type === 'touchmove') {\n this.isTouch = true;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2' || this.isTouch;\n }\n if (this.tooltipRenderModule && !this.isTouch) {\n this.tooltipRenderModule.smithchartMouseMove(this, e);\n }\n };\n Smithchart.prototype.mouseEnd = function (e) {\n if (e.type === 'touchend') {\n this.isTouch = true;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n }\n if (this.tooltipRenderModule && this.isTouch) {\n var tooltipElement_1 = this.tooltipRenderModule.smithchartMouseMove(this, e);\n if (tooltipElement_1) {\n this.fadeoutTo = setTimeout(function () {\n tooltipElement_1.fadeOut();\n }, 2000);\n }\n }\n };\n /**\n * To handle the click event for the smithchart.\n */\n /* tslint:disable:no-string-literal */\n Smithchart.prototype.smithchartOnClick = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var parentElement = document.getElementById(targetId).parentElement;\n var grpElement = document.getElementById(parentElement.id).parentElement;\n if (grpElement.id === 'containerlegendItem_Group' && this.legendSettings.toggleVisibility) {\n var childElement = parentElement.childNodes[1];\n var circleElement = parentElement.childNodes[0];\n var legendText = childElement.textContent;\n var seriesIndex = void 0;\n var fill = void 0;\n for (var i = 0; i < this.smithchartLegendModule.legendSeries.length; i++) {\n if (legendText === this.smithchartLegendModule.legendSeries[i]['text']) {\n seriesIndex = this.smithchartLegendModule.legendSeries[i].seriesIndex;\n fill = this.smithchartLegendModule.legendSeries[i].fill;\n }\n }\n var seriesElement = document.getElementById(this.element.id + '_svg' + '_seriesCollection' + seriesIndex);\n if (seriesElement.getAttribute('visibility') === 'visible') {\n circleElement.setAttribute('fill', 'gray');\n seriesElement.setAttribute('visibility', 'hidden');\n this.series[seriesIndex].visibility = 'hidden';\n }\n else {\n circleElement.setAttribute('fill', fill);\n seriesElement.setAttribute('visibility', 'visible');\n this.series[seriesIndex].visibility = 'visible';\n }\n }\n };\n /**\n * To unbind event handlers from smithchart.\n */\n Smithchart.prototype.unWireEVents = function () {\n EventHandler.remove(this.element, 'click', this.smithchartOnClick);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.smithchartOnResize);\n };\n Smithchart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n Smithchart.prototype.export = function (type, fileName, orientation) {\n var exportMap = new ExportUtils(this);\n exportMap.export(type, fileName, orientation);\n };\n /**\n * To handle the window resize event on smithchart.\n */\n Smithchart.prototype.smithchartOnResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n _this.render();\n }, 500);\n return false;\n };\n /**\n * To provide the array of modules needed for smithchart rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Smithchart.prototype.requiredModules = function () {\n var modules = [];\n if (this.legendSettings.visible) {\n modules.push({\n member: 'SmithchartLegend',\n args: [this]\n });\n }\n for (var i = 0; i < this.series.length; i++) {\n if (this.series[i].tooltip.visible) {\n modules.push({\n member: 'TooltipRender',\n args: [this]\n });\n break;\n }\n }\n return modules;\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n Smithchart.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n var removeLength = 0;\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > removeLength) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n __decorate([\n Property('Impedance')\n ], Smithchart.prototype, \"renderType\", void 0);\n __decorate([\n Property('')\n ], Smithchart.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Smithchart.prototype, \"height\", void 0);\n __decorate([\n Property('Material')\n ], Smithchart.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, SmithchartMargin)\n ], Smithchart.prototype, \"margin\", void 0);\n __decorate([\n Complex({}, SmithchartFont)\n ], Smithchart.prototype, \"font\", void 0);\n __decorate([\n Complex({}, SmithchartBorder)\n ], Smithchart.prototype, \"border\", void 0);\n __decorate([\n Complex({}, Title)\n ], Smithchart.prototype, \"title\", void 0);\n __decorate([\n Collection([{}], SmithchartSeries)\n ], Smithchart.prototype, \"series\", void 0);\n __decorate([\n Complex({}, SmithchartLegendSettings)\n ], Smithchart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, SmithchartAxis)\n ], Smithchart.prototype, \"horizontalAxis\", void 0);\n __decorate([\n Complex({}, SmithchartAxis)\n ], Smithchart.prototype, \"radialAxis\", void 0);\n __decorate([\n Property(null)\n ], Smithchart.prototype, \"background\", void 0);\n __decorate([\n Property(10)\n ], Smithchart.prototype, \"elementSpacing\", void 0);\n __decorate([\n Property(1)\n ], Smithchart.prototype, \"radius\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"titleRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"subtitleRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"seriesRender\", void 0);\n Smithchart = __decorate([\n NotifyPropertyChanges\n ], Smithchart);\n return Smithchart;\n}(Component));\nexport { Smithchart };\n","import { ClosestPoint, SmithchartRect } from '../../smithchart/utils/utils';\nimport { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\n/**\n * To render tooltip\n */\nvar TooltipRender = /** @class */ (function () {\n function TooltipRender() {\n }\n TooltipRender.prototype.smithchartMouseMove = function (smithchart, e) {\n var touchArg;\n var pageX;\n var pageY;\n if (e.type === 'touchend' || e.type === 'touchmove') {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n this.tooltipElement = undefined;\n }\n else {\n pageY = e.clientY;\n pageX = e.clientX;\n }\n this.setMouseXY(smithchart, pageX, pageY);\n for (var i = 0; i < smithchart.series.length; i++) {\n var series = smithchart.series[i];\n var seriesIndex = i;\n var closestPoint = new ClosestPoint();\n closestPoint = this.closestPointXY(smithchart, this.mouseX, this.mouseY, series, seriesIndex);\n if (closestPoint.location && series.tooltip.visible && series.visibility === 'visible') {\n this.createTooltip(smithchart, e, closestPoint.index, seriesIndex, series);\n break;\n }\n else if (this.tooltipElement && this.tooltipElement.enable && !series.tooltip.template) {\n this.tooltipElement.fadeOut();\n this.tooltipElement.enable = false;\n }\n else if (series.tooltip.template) {\n this.tooltipElement.fadeOut();\n }\n }\n return this.tooltipElement;\n };\n TooltipRender.prototype.setMouseXY = function (smithchart, pageX, pageY) {\n var rect = smithchart.element.getBoundingClientRect();\n var svgRect = document.getElementById(smithchart.element.id + '_svg').getBoundingClientRect();\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n };\n TooltipRender.prototype.createTooltip = function (smithchart, e, pointindex, seriesindex, series) {\n var pointX = series.points[pointindex].resistance;\n var pointY = series.points[pointindex].reactance;\n var tooltipText = [pointX + ' ' + ':' + ' ' + '' + pointY + ''];\n var markerHeight = smithchart.series[seriesindex].marker.height / 2;\n var div = document.getElementById(smithchart.element.id + '_smithchart_tooltip_div');\n if (isNullOrUndefined(div)) {\n div = createElement('div', { id: smithchart.element.id + '_smithchart_tooltip_div',\n styles: 'pointer-events: none; position: absolute;z-index:1;' });\n document.getElementById(smithchart.element.id + '_Secondary_Element').appendChild(div);\n }\n this.tooltipElement = new Tooltip({\n enable: true,\n header: '' + series.name + '',\n content: tooltipText,\n border: series.tooltip.border,\n fill: smithchart.themeStyle.tooltipFill,\n data: { reactance: pointY },\n template: series.tooltip.template,\n location: { x: this.locationX + smithchart.element.offsetLeft,\n y: this.locationY - markerHeight + smithchart.element.offsetTop },\n shared: false,\n areaBounds: new SmithchartRect(smithchart.bounds.x, smithchart.bounds.y, smithchart.bounds.width, smithchart.bounds.height),\n palette: [series.fill || smithchart.seriesColors[seriesindex % smithchart.seriesColors.length]],\n shapes: ['Circle'],\n theme: smithchart.theme\n });\n this.tooltipElement.textStyle.fontFamily = 'Roboto, Segoe UI, Noto, Sans-serif';\n this.tooltipElement.appendTo(div);\n };\n TooltipRender.prototype.closestPointXY = function (smithchart, x, y, series, seriesindex) {\n var pointIndex;\n var chartPoint;\n var closePoint;\n for (var j = 0; j < series.points.length; j++) {\n chartPoint = smithchart.seriesrender.getLocation(seriesindex, j);\n this.locationX = chartPoint.x;\n this.locationY = chartPoint.y;\n pointIndex = j;\n var a = x - chartPoint.x;\n var b = y - chartPoint.y;\n var distance = Math.abs(Math.sqrt((a * a) + (b * b)));\n if (distance < series.marker.width) {\n closePoint = chartPoint;\n pointIndex = j;\n break;\n }\n }\n return { location: closePoint, index: pointIndex };\n };\n /**\n * Get module name.\n */\n TooltipRender.prototype.getModuleName = function () {\n return 'TooltipRender';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n TooltipRender.prototype.destroy = function (smithchart) {\n /**\n * Destroy method performed here\n */\n };\n return TooltipRender;\n}());\nexport { TooltipRender };\n","import { measureText, TextOption, renderTextElement, CircleOption, PathOption, RectOption } from '../../smithchart/utils/helper';\nimport { SmithchartRect, LegendSeries } from '../../smithchart/utils/utils';\n/* tslint:disable:no-string-literal */\nvar SmithchartLegend = /** @class */ (function () {\n function SmithchartLegend() {\n this.legendSeries = [];\n }\n SmithchartLegend.prototype.renderLegend = function (smithchart) {\n this.calculateLegendBounds(smithchart);\n this._drawLegend(smithchart);\n return this.legendActualBounds;\n };\n SmithchartLegend.prototype.calculateLegendBounds = function (smithchart) {\n var legendSeries = new LegendSeries();\n this.legendSeries = [];\n var padding = 10;\n var legend = smithchart.legendSettings;\n var legendSizeHeight = legend.height;\n var legendSizeWidth = legend.width;\n var itemPadding = legend.itemPadding > 0 ? legend.itemPadding : 0;\n var position = legend.position.toLowerCase();\n var font = legend.title.textStyle;\n var width = 0;\n var height = 0;\n var legendItemWidth = 0;\n var legendItemHeight = 0;\n var legendHeight = 0;\n var svgObjectWidth = smithchart.availableSize.width - ((smithchart.elementSpacing * 4) - (legend.border.width * 2)\n + (smithchart.border.width * 2));\n var svgObjectHeight = smithchart.availableSize.height - ((smithchart.elementSpacing * 4) - (legend.border.width * 2)\n + (smithchart.border.width * 2));\n var rowCount = legend.rowCount;\n var columnCount = legend.columnCount;\n var titleSize = measureText(smithchart.legendSettings['title']['text'], font);\n var maxRowWidth = 0;\n var totalRowHeight = 0;\n var curRowWidth = 0;\n var curRowHeight = 0;\n var allowItems;\n var itemsCountRow = 0;\n var length = smithchart.series.length;\n var legendBounds;\n if (smithchart.legendSettings.visible && length !== 0) {\n if (position === 'bottom' || position === 'top' || position === 'custom') {\n if ((rowCount && columnCount) && (rowCount <= columnCount)) {\n rowCount = length / columnCount;\n }\n else if (rowCount == null && columnCount != null) {\n rowCount = length / columnCount;\n }\n else if (rowCount == null && columnCount == null) {\n rowCount = 1;\n }\n if (rowCount) {\n allowItems = Math.ceil(length / rowCount);\n }\n }\n else {\n if ((rowCount && columnCount) && (rowCount <= columnCount)) {\n columnCount = length / rowCount;\n }\n else if (rowCount != null && columnCount == null) {\n columnCount = length / rowCount;\n }\n else if (rowCount == null && columnCount == null) {\n columnCount = 1;\n }\n if (columnCount) {\n allowItems = columnCount;\n }\n }\n for (var i = 0; i < length; i++) {\n this.legendSeries.push({\n text: smithchart.series[i]['name'] ? smithchart.series[i]['name'] : 'series' + i,\n seriesIndex: i,\n shape: smithchart.legendSettings.shape,\n fill: smithchart.series[i].fill || smithchart.seriesColors[i % smithchart.seriesColors.length],\n bounds: null\n });\n var legendsize = this._getLegendSize(smithchart, this.legendSeries[i]);\n legendItemWidth = Math.max(legendsize['width'], legendItemWidth);\n legendItemHeight = Math.max(legendsize['height'], legendItemHeight);\n this.legendSeries[i]['bounds'] = { width: legendItemWidth, height: legendItemHeight };\n itemsCountRow = itemsCountRow + 1;\n curRowWidth = curRowWidth + legendItemWidth + itemPadding;\n curRowHeight = Math.max(legendItemHeight, curRowHeight);\n if (position === 'top' || position === 'bottom' || position === 'custom') {\n if (curRowWidth > svgObjectWidth) {\n curRowWidth -= legendsize.width + itemPadding;\n maxRowWidth = Math.max(maxRowWidth, curRowWidth);\n curRowWidth = legendsize.width + itemPadding;\n totalRowHeight = totalRowHeight + curRowHeight + itemPadding;\n }\n }\n if (itemsCountRow === allowItems || i === length - 1) {\n maxRowWidth = Math.max(maxRowWidth, curRowWidth);\n totalRowHeight = totalRowHeight + curRowHeight + itemPadding;\n legendHeight = totalRowHeight;\n itemsCountRow = 0;\n curRowHeight = 0;\n curRowWidth = 0;\n }\n }\n width = (titleSize.width) > maxRowWidth - itemPadding ? (titleSize.width + padding * 2 + itemPadding) :\n maxRowWidth + padding * 2 - (smithchart.border.width * 2);\n height = legendHeight + smithchart.elementSpacing;\n legendBounds = { x: 0, y: 0, width: width, height: height };\n }\n this.legendActualBounds = legendBounds;\n if (legendSizeWidth != null) {\n this.legendActualBounds.width = legendSizeWidth;\n }\n if (legendSizeHeight != null) {\n this.legendActualBounds.height = legendSizeHeight;\n }\n };\n SmithchartLegend.prototype._getLegendSize = function (smithchart, series) {\n var legend = smithchart.legendSettings;\n var symbolWidth = legend.itemStyle.width;\n var symbolHeight = legend.itemStyle.height;\n var textSize = measureText(series.text, legend.textStyle);\n var width = symbolWidth + textSize.width + legend.shapePadding;\n var height = Math.max(symbolHeight, textSize.height);\n return { width: width, height: height };\n };\n // tslint:disable:max-func-body-length\n SmithchartLegend.prototype._drawLegend = function (smithchart) {\n var legend = smithchart.legendSettings;\n var legendPosition = legend.position.toLowerCase();\n var alignment = legend.alignment;\n var legendBounds = this.legendActualBounds;\n var maxWidth = 0;\n var startX;\n var startY;\n var titleFont = smithchart.title.font ? smithchart.title.font : smithchart.title.textStyle;\n var smithchartTitleHeight = measureText(smithchart.title.text, titleFont).height;\n var smithchartSubtitleHeight = measureText(smithchart.title.subtitle.text, smithchart.title.subtitle.textStyle).height;\n var elementSpacing = smithchart.elementSpacing;\n var offset = smithchartTitleHeight + smithchartSubtitleHeight + elementSpacing + smithchart.margin.top;\n var itemPadding = legend.itemPadding > 0 ? legend.itemPadding : 0;\n var svgObjectWidth = smithchart.availableSize.width;\n var svgObjectHeight = smithchart.availableSize.height;\n var legendBorder = legend.border.width;\n var legendWidth = 0;\n var titleSize = measureText(legend['title']['text'], legend.title.textStyle);\n var legendTitleHeight = titleSize.height;\n var borderSize = smithchart.border.width;\n var svgWidth = svgObjectWidth - ((borderSize * 2));\n var svgHeight = svgObjectHeight - ((borderSize * 2));\n legendBounds.height += legendTitleHeight;\n if (legendPosition !== 'custom') {\n switch (legendPosition) {\n case 'bottom':\n legendBounds.y = svgHeight - (legendBounds.height + (legendBorder) + elementSpacing);\n break;\n case 'top':\n legendBounds.y = borderSize + offset;\n break;\n case 'right':\n legendBounds.x = svgWidth - legendBounds.width - (elementSpacing * 2);\n break;\n case 'left':\n legendBounds.x = borderSize + (elementSpacing * 2);\n break;\n }\n if (legendPosition === 'left' || legendPosition === 'right') {\n switch (alignment) {\n case 'Center':\n legendBounds.y = (svgHeight / 2) - ((legendBounds.height + legendBorder * 2) / 2) + (elementSpacing / 2);\n break;\n case 'Near':\n legendBounds.y = borderSize + (elementSpacing * 2) + offset;\n break;\n case 'Far':\n legendBounds.y = svgHeight - (legendBounds.height + (legendBorder)) - (elementSpacing * 2);\n break;\n }\n }\n else {\n switch (alignment) {\n case 'Center':\n legendBounds.x = (svgWidth / 2) - ((legendBounds.width + legendBorder * 2) / 2) + (elementSpacing / 2);\n break;\n case 'Near':\n legendBounds.x = borderSize + (elementSpacing * 2);\n break;\n case 'Far':\n legendBounds.x = svgWidth - (legendBounds.width + (legendBorder)) - (elementSpacing * 2);\n break;\n }\n }\n }\n else {\n legendBounds.y = (legend.location.y < svgHeight) ? legend.location.y : 0;\n legendBounds.x = (legend.location.x < svgWidth) ? legend.location.x : 0;\n }\n if (legendPosition === 'bottom' || legendPosition === 'top') {\n for (var i = 0; i < this.legendSeries.length; i++) {\n legendWidth += this.legendSeries[i].bounds.width + itemPadding;\n if (legendWidth > svgWidth) {\n legendBounds.x = (svgWidth / 2) - ((legendBounds.width + legendBorder * 2) / 2) + (elementSpacing / 2);\n break;\n }\n }\n }\n var gLegendEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_legend_group' });\n smithchart.svgObject.appendChild(gLegendEle);\n this.legendItemGroup = smithchart.renderer.createGroup({ 'id': smithchart.element.id + 'legendItem_Group' });\n var currentX = startX = elementSpacing;\n var currentY = startY = elementSpacing;\n if (legend.title.text !== '' && legend.title.visible) {\n gLegendEle.appendChild(this.drawLegendTitle(smithchart, legend, legendBounds, gLegendEle));\n currentY = startY = elementSpacing + legendTitleHeight;\n }\n for (var k = 0; k < this.legendSeries.length; k++) {\n if ((legend.rowCount < legend.columnCount || legend.rowCount === legend.columnCount) &&\n (legendPosition === 'top' || legendPosition === 'bottom' || legendPosition === 'custom')) {\n if ((currentX + this.legendSeries[k]['bounds'].width) > legendBounds.width + startX) {\n currentX = elementSpacing;\n currentY += this.legendSeries[k]['bounds'].height + itemPadding;\n }\n this.legendGroup = this.drawLegendItem(smithchart, legend, this.legendSeries[k], k, currentX, (currentY), legendBounds);\n gLegendEle.appendChild(this.legendGroup);\n currentX += this.legendSeries[k]['bounds'].width + itemPadding;\n }\n else {\n if (((currentY + this.legendSeries[k]['bounds'].height + itemPadding) +\n legendTitleHeight + borderSize > legendBounds.height + startY)) {\n currentY = startY;\n currentX += maxWidth + (itemPadding);\n }\n this.legendGroup = this.drawLegendItem(smithchart, legend, this.legendSeries[k], k, (currentX), (currentY), legendBounds);\n gLegendEle.appendChild(this.legendGroup);\n currentY += this.legendSeries[k]['bounds'].height + itemPadding;\n maxWidth = Math.max(maxWidth, this.legendSeries[k]['bounds'].width);\n }\n }\n gLegendEle.setAttribute('transform', 'translate(' + legendBounds.x.toString() + ',' + legendBounds.y.toString() + ')');\n this.drawLegendBorder(gLegendEle, smithchart, legend, legendBounds);\n };\n SmithchartLegend.prototype.drawLegendBorder = function (gLegendEle, smithchart, legend, legendBounds) {\n var borderRect = new RectOption(smithchart.element.id + '_svg' + '_legendRect', 'none', legend.border, 1, new SmithchartRect(0, 0, legendBounds.width, legendBounds.height));\n gLegendEle.appendChild(smithchart.renderer.drawRectangle(borderRect));\n };\n SmithchartLegend.prototype.drawLegendTitle = function (smithchart, legend, legendBounds, gLegendEle) {\n var elementSpacing = smithchart.elementSpacing;\n var titleSize = measureText(legend.title.text, legend.title.textStyle);\n var titleWidth = titleSize.width;\n var titleHeight = titleSize.height;\n var textAlignment = legend.title.textAlignment;\n var startX = 0;\n var legendBoundsWidth = legendBounds.width;\n var startY = elementSpacing + (titleHeight / 2);\n switch (textAlignment) {\n case 'Far':\n startX = legendBoundsWidth - titleWidth - startX;\n break;\n case 'Center':\n startX = legendBoundsWidth / 2 - (titleWidth) / 2;\n break;\n }\n if (startX < 0) {\n startX = 0;\n legendBoundsWidth = titleWidth;\n }\n if (legendBoundsWidth < titleWidth + startX) {\n legendBoundsWidth = titleWidth + startX;\n }\n var options = new TextOption(smithchart.element.id + '_LegendTitleText', startX, startY, 'start', legend.title.text);\n var element = renderTextElement(options, legend.title.textStyle, smithchart.themeStyle.legendLabel, gLegendEle);\n element.setAttribute('aria-label', legend.title.description || legend.title.text);\n return element;\n };\n SmithchartLegend.prototype.drawLegendItem = function (smithchart, legend, legendSeries, k, x, y, legendBounds) {\n var location;\n var radius;\n var symbol = legend.itemStyle;\n var itemPadding = legend.itemPadding;\n var textHeight;\n radius = Math.sqrt(symbol['width'] * symbol['width'] + symbol['height'] * symbol['height']) / 2;\n textHeight = measureText(legendSeries['text'], legend.textStyle).height;\n location = {\n x: x + symbol['width'] / 2,\n y: (y + (textHeight > symbol['height'] ? textHeight : symbol['height']) / 2)\n };\n var legendGroup = smithchart.renderer.createGroup({ id: smithchart.element.id + '_svg' + '_Legend' + k.toString() });\n legendGroup['style']['cursor'] = legend.toggleVisibility ? 'pointer' : 'default';\n var legendEventArgs = { text: legendSeries['text'], fill: legendSeries['fill'],\n shape: legendSeries['shape'], name: 'legendRender', cancel: false };\n smithchart.trigger('legendRender', legendEventArgs);\n var shape = this.drawLegendShape(smithchart, legendSeries, location.x, location.y, k, legend, legendEventArgs);\n legendGroup.appendChild(shape);\n var options = new TextOption(smithchart.element.id + '_LegendItemText' + k.toString(), location.x + symbol['width'] / 2 + legend.shapePadding, location.y + textHeight / 4, 'start', legendEventArgs.text);\n var element = renderTextElement(options, legend.textStyle, smithchart.themeStyle.legendLabel, legendGroup);\n element.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + options.text + ' series');\n legendGroup.appendChild(element);\n this.legendItemGroup.appendChild(legendGroup);\n return this.legendItemGroup;\n };\n SmithchartLegend.prototype.drawLegendShape = function (smithchart, legendSeries, locX, locY, index, legend, legendEventArgs) {\n var element;\n var circleOptions;\n var pathOptions;\n var path;\n var symbol = legend.itemStyle;\n var width = symbol['width'];\n var height = symbol['height'];\n var x = locX + (-width / 2);\n var y = locY + (-height / 2);\n var border = { color: symbol.border.color, width: symbol.border.width };\n var opacity = 1;\n var fill = (smithchart.series[index].visibility === 'visible') ? legendEventArgs.fill : 'grey';\n var shape = legendEventArgs.shape.toLowerCase();\n var radius = Math.sqrt(height * height + width * width) / 2;\n switch (shape) {\n case 'circle':\n circleOptions = new CircleOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border, opacity, locX, locY, radius, null);\n element = smithchart.renderer.drawCircle(circleOptions);\n break;\n case 'rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + ((width / 2) + locX) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + ((width / 2) + locX) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'pentagon':\n var eq = 72;\n for (var j = 0; j <= 5; j++) {\n var xValue = radius * Math.cos((Math.PI / 180) * (j * eq));\n var yValue = radius * Math.sin((Math.PI / 180) * (j * eq));\n if (j === 0) {\n path = 'M' + ' ' + (xValue + locX) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'triangle':\n path = 'M' + ' ' + x + ' ' + ((height / 2) + locY) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' Z';\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n }\n return element;\n };\n /**\n * Get module name.\n */\n SmithchartLegend.prototype.getModuleName = function () {\n return 'SmithchartLegend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n SmithchartLegend.prototype.destroy = function (smithchart) {\n /**\n * Destroy method performed here\n */\n };\n return SmithchartLegend;\n}());\nexport { SmithchartLegend };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Sparkline base API Class declarations.\n */\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Configures the borders in the Sparkline.\n */\nvar SparklineBorder = /** @class */ (function (_super) {\n __extends(SparklineBorder, _super);\n function SparklineBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], SparklineBorder.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], SparklineBorder.prototype, \"width\", void 0);\n return SparklineBorder;\n}(ChildProperty));\nexport { SparklineBorder };\n/**\n * Configures the fonts in sparklines.\n */\nvar SparklineFont = /** @class */ (function (_super) {\n __extends(SparklineFont, _super);\n function SparklineFont() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"color\", void 0);\n __decorate([\n Property('Roboto, Segoe UI, Noto, Sans-serif')\n ], SparklineFont.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"fontWeight\", void 0);\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], SparklineFont.prototype, \"opacity\", void 0);\n return SparklineFont;\n}(ChildProperty));\nexport { SparklineFont };\n/**\n * To configure the tracker line settings.\n */\nvar TrackLineSettings = /** @class */ (function (_super) {\n __extends(TrackLineSettings, _super);\n function TrackLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TrackLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], TrackLineSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], TrackLineSettings.prototype, \"width\", void 0);\n return TrackLineSettings;\n}(ChildProperty));\nexport { TrackLineSettings };\n/**\n * To configure the tooltip settings for sparkline.\n */\nvar SparklineTooltipSettings = /** @class */ (function (_super) {\n __extends(SparklineTooltipSettings, _super);\n function SparklineTooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SparklineTooltipSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], SparklineTooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], SparklineTooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], SparklineTooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, SparklineBorder)\n ], SparklineTooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '13px', fontWeight: 'Normal', fontStyle: 'Normal', fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif' }, SparklineFont)\n ], SparklineTooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({}, TrackLineSettings)\n ], SparklineTooltipSettings.prototype, \"trackLineSettings\", void 0);\n return SparklineTooltipSettings;\n}(ChildProperty));\nexport { SparklineTooltipSettings };\n/**\n * To configure the sparkline container area customization\n */\nvar ContainerArea = /** @class */ (function (_super) {\n __extends(ContainerArea, _super);\n function ContainerArea() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('transparent')\n ], ContainerArea.prototype, \"background\", void 0);\n __decorate([\n Complex({}, SparklineBorder)\n ], ContainerArea.prototype, \"border\", void 0);\n return ContainerArea;\n}(ChildProperty));\nexport { ContainerArea };\n/**\n * To configure axis line settings\n */\nvar LineSettings = /** @class */ (function (_super) {\n __extends(LineSettings, _super);\n function LineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], LineSettings.prototype, \"color\", void 0);\n __decorate([\n Property('')\n ], LineSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(1)\n ], LineSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], LineSettings.prototype, \"opacity\", void 0);\n return LineSettings;\n}(ChildProperty));\nexport { LineSettings };\n/**\n * To configure the sparkline rangeband\n */\nvar RangeBandSettings = /** @class */ (function (_super) {\n __extends(RangeBandSettings, _super);\n function RangeBandSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"startRange\", void 0);\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"endRange\", void 0);\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"opacity\", void 0);\n return RangeBandSettings;\n}(ChildProperty));\nexport { RangeBandSettings };\n/**\n * To configure the sparkline axis\n */\nvar AxisSettings = /** @class */ (function (_super) {\n __extends(AxisSettings, _super);\n function AxisSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"minX\", void 0);\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"maxX\", void 0);\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"minY\", void 0);\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"maxY\", void 0);\n __decorate([\n Property(0)\n ], AxisSettings.prototype, \"value\", void 0);\n __decorate([\n Complex({}, LineSettings)\n ], AxisSettings.prototype, \"lineSettings\", void 0);\n return AxisSettings;\n}(ChildProperty));\nexport { AxisSettings };\n/**\n * To configure the sparkline padding.\n */\nvar Padding = /** @class */ (function (_super) {\n __extends(Padding, _super);\n function Padding() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(5)\n ], Padding.prototype, \"left\", void 0);\n __decorate([\n Property(5)\n ], Padding.prototype, \"right\", void 0);\n __decorate([\n Property(5)\n ], Padding.prototype, \"bottom\", void 0);\n __decorate([\n Property(5)\n ], Padding.prototype, \"top\", void 0);\n return Padding;\n}(ChildProperty));\nexport { Padding };\n/**\n * To configure the sparkline marker options.\n */\nvar SparklineMarkerSettings = /** @class */ (function (_super) {\n __extends(SparklineMarkerSettings, _super);\n function SparklineMarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SparklineMarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], SparklineMarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(5)\n ], SparklineMarkerSettings.prototype, \"size\", void 0);\n __decorate([\n Property('#00bdae')\n ], SparklineMarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ width: 1 }, SparklineBorder)\n ], SparklineMarkerSettings.prototype, \"border\", void 0);\n return SparklineMarkerSettings;\n}(ChildProperty));\nexport { SparklineMarkerSettings };\n/**\n * To configure the datalabel offset\n */\nvar LabelOffset = /** @class */ (function (_super) {\n __extends(LabelOffset, _super);\n function LabelOffset() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], LabelOffset.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], LabelOffset.prototype, \"y\", void 0);\n return LabelOffset;\n}(ChildProperty));\nexport { LabelOffset };\n/**\n * To configure the sparkline dataLabel options.\n */\nvar SparklineDataLabelSettings = /** @class */ (function (_super) {\n __extends(SparklineDataLabelSettings, _super);\n function SparklineDataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SparklineDataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], SparklineDataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('transparent')\n ], SparklineDataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], SparklineDataLabelSettings.prototype, \"format\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, SparklineBorder)\n ], SparklineDataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '14px', fontWeight: 'Medium', fontStyle: 'Medium', fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif' }, SparklineFont)\n ], SparklineDataLabelSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({}, LabelOffset)\n ], SparklineDataLabelSettings.prototype, \"offset\", void 0);\n __decorate([\n Property('None')\n ], SparklineDataLabelSettings.prototype, \"edgeLabelMode\", void 0);\n return SparklineDataLabelSettings;\n}(ChildProperty));\nexport { SparklineDataLabelSettings };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { PathOption, drawPath, drawRectangle, RectOption, Rect, CircleOption, drawCircle } from '../utils/helper';\nimport { measureText, renderTextElement, TextOption } from '../utils/helper';\n/**\n * Sparkline rendering calculation file\n */\nvar SparklineRenderer = /** @class */ (function () {\n /**\n * Sparkline data calculations\n * @param sparkline\n */\n function SparklineRenderer(sparkline) {\n this.sparkline = sparkline;\n }\n /**\n * To process the sparkline data\n */\n SparklineRenderer.prototype.processData = function (data) {\n if (data === void 0) { data = this.sparkline.dataSource; }\n if (!this.sparkline.dataSource.length) {\n return;\n }\n else if (!isNaN(data[0]) || this.sparkline.valueType === 'Numeric') {\n this.sparkline.sparklineData = data; // extend([], data) as Object[];\n }\n else {\n this['process' + this.sparkline.valueType]();\n }\n this.axisCalculation();\n };\n /**\n * To process sparkline category data.\n */\n SparklineRenderer.prototype.processCategory = function (data, x, y) {\n var _this = this;\n if (data === void 0) { data = this.sparkline.dataSource; }\n if (x === void 0) { x = this.sparkline.xName; }\n if (y === void 0) { y = this.sparkline.yName; }\n var temp = [];\n var xValues = [];\n data.forEach(function (value, index) {\n if (xValues.indexOf(value[x]) === -1) {\n xValues.push(value[x]);\n }\n var currentData = {};\n currentData[_this.sparkline.xName] = xValues.indexOf(value[x]);\n currentData[_this.sparkline.yName] = value[y];\n temp.push(currentData);\n });\n this.sparkline.sparklineData = temp;\n };\n /**\n * To process sparkline DateTime data.\n */\n SparklineRenderer.prototype.processDateTime = function (data, x, y) {\n if (data === void 0) { data = this.sparkline.dataSource; }\n if (x === void 0) { x = this.sparkline.xName; }\n if (y === void 0) { y = this.sparkline.yName; }\n var temp = [];\n data.forEach(function (value, index) {\n var currentData = {};\n currentData[x] = value[x].getTime();\n currentData[y] = value[y];\n temp.push(currentData);\n });\n this.sparkline.sparklineData = temp;\n };\n /**\n * To render sparkline series.\n * @private\n */\n SparklineRenderer.prototype.renderSeries = function () {\n var spark = this.sparkline;\n this.clipId = spark.element.id + '_sparkline_clip_path';\n this.drawAxis();\n var args = {\n name: 'seriesRendering', cancel: false, lineWidth: spark.lineWidth, border: spark.border, fill: spark.fill, sparkline: spark\n };\n spark.trigger(args.name, args);\n if (!this.visiblePoints || args.cancel) {\n return;\n }\n if (spark.type !== 'Pie' && spark.type !== 'WinLoss' && spark.rangeBandSettings.length) {\n var group = this.sparkline.renderer.createGroup({ id: this.sparkline.element.id + '_sparkline_rangeband_g' });\n for (var i = 0; i < spark.rangeBandSettings.length; i++) {\n if ((spark.axisSettings.minY <= spark.rangeBandSettings[i].startRange) ||\n (spark.axisSettings.maxY >= spark.rangeBandSettings[i].endRange)) {\n this.rangeBand(spark.rangeBandSettings[i], group, i);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n }\n this['render' + spark.type](this.visiblePoints, args);\n this.renderMarker(this.visiblePoints);\n this.renderLabel(this.visiblePoints);\n };\n /**\n * To render a range band\n */\n SparklineRenderer.prototype.rangeBand = function (rangeBandSettings, group, index) {\n var model = this.sparkline;\n var height = (model.availableSize.height) - model.padding.top * 2;\n var width = (model.availableSize.width) - model.padding.left * 2;\n var stValue = rangeBandSettings.startRange;\n var edValue = rangeBandSettings.endRange;\n var stHeight = (height - ((height / this.unitY) * (stValue - this.min))) + model.padding.top;\n var edHeight = (height - ((height / this.unitY) * (edValue - this.min))) + model.padding.top;\n if (edHeight > (height + model.padding.top)) {\n edHeight = (height + model.padding.top);\n }\n else if (edHeight < (0 + model.padding.top)) {\n edHeight = (0 + model.padding.top);\n }\n if (stHeight > (height + model.padding.top)) {\n stHeight = (height + model.padding.top);\n }\n else if (stHeight < (0 + model.padding.top)) {\n stHeight = (0 + model.padding.top);\n }\n var path = 'M ' + (model.padding.left) + ' ' + stHeight + ' L ' + (width + (model.padding.left)) + ' ' + stHeight +\n ' L ' + (width + (model.padding.left)) + ' ' + edHeight + ' L ' + (model.padding.left) + ' ' + edHeight + ' Z ';\n var pathOption = {\n 'id': model.element.id + '_rangeBand_' + index,\n 'fill': rangeBandSettings.color,\n 'opacity': rangeBandSettings.opacity,\n 'stroke': 'transparent',\n 'stroke-width': model.lineWidth,\n 'd': path,\n 'stroke-dasharray': ''\n };\n drawPath(this.sparkline, pathOption, group);\n };\n /**\n * To render line series\n */\n SparklineRenderer.prototype.renderLine = function (points, args) {\n var spark = this.sparkline;\n var g = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var pathOption = new PathOption(spark.element.id + '_sparkline_line', 'transparent', args.lineWidth, args.fill, spark.opacity);\n var d = '';\n for (var i = 0, len = points.length; i < len; i++) {\n if (i === 0) {\n d = 'M ' + points[0].x + ' ' + points[i].y + ' ';\n }\n d += 'L ' + points[i].x + ' ' + points[i].y + ' ';\n }\n pathOption.d = d;\n drawPath(this.sparkline, pathOption, g);\n this.sparkline.svgObject.appendChild(g);\n };\n /**\n * To render pie series\n */\n /* tslint:disable:no-string-literal */\n SparklineRenderer.prototype.renderPie = function (points, args) {\n var spark = this.sparkline;\n var height = spark.availableSize.height - (spark.padding.top + spark.padding.bottom);\n var width = spark.availableSize.width - (spark.padding.left + spark.padding.right);\n var area = (height <= width) ? height / 2 : width / 2;\n var X = spark.availableSize.width / 2; // center position of x\n var Y = spark.availableSize.height / 2; // center position of y\n var deg = 0;\n var stRad;\n var edRad;\n var stroke = args.border.color;\n var opacity = spark.opacity;\n var strokeWidth = args.border.width;\n var colors = (spark.palette.length) ? spark.palette : ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g' });\n var low;\n var high;\n var locations = extend([], [], points);\n if (spark.highPointColor || spark.lowPointColor) {\n var pointsYvalues = locations.map(function (a) { return a.yVal; });\n low = Math.min.apply(null, pointsYvalues);\n high = Math.max.apply(null, pointsYvalues);\n }\n this.negativePointIndexes = [];\n for (var i = 0, stDeg = 90, edDeg = void 0, flag = void 0; i < points.length; i++) {\n stDeg += deg;\n deg = points[i]['degree'];\n edDeg = stDeg + deg;\n stRad = (stDeg - 90) * Math.PI / 180.0;\n edRad = (edDeg - 90) * Math.PI / 180.0;\n points[i]['stAng'] = stRad;\n points[i]['endAng'] = edRad;\n flag = (deg < 180) ? '0' : '1';\n var temp = points[i]['coordinates'] = {\n sX: X + (area * Math.cos(stRad)), sY: Y +\n (area * Math.sin(stRad)), eX: X + (area * Math.cos(edRad)), eY: Y + (area * Math.sin(edRad))\n };\n var pathArc = 'M ' + X + ' ' + Y + ' L ' + temp['eX'] + ' ' + temp['eY'] + ' A ' + area + ' ' +\n area + ' 0 ' + flag + ',0 ' + temp['sX'] + ' ' + temp['sY'] + ' Z';\n var pathOption = {\n 'id': spark.element.id + '_sparkline_pie_' + i,\n 'opacity': opacity,\n 'fill': colors[i % colors.length],\n 'stroke': stroke,\n 'stroke-width': strokeWidth,\n 'd': pathArc,\n 'stroke-dasharray': ''\n };\n this.getPieSpecialPoint(points[i], spark, pathOption, i, high, low, points.length);\n var pointArgs = this.triggerPointRender('pointRendering', i, pathOption.fill, { color: stroke, width: strokeWidth });\n pathOption.fill = pointArgs.fill;\n pathOption.stroke = pointArgs.border.color;\n pathOption['stroke-width'] = pointArgs.border.width;\n if (!pointArgs.cancel) {\n var element = drawPath(this.sparkline, pathOption, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n var diffRadian = edRad - stRad;\n var mid = {\n x: X + ((area / 2) * Math.cos(stRad + (diffRadian / 2))),\n y: Y + ((area / 2) * Math.sin(stRad + (diffRadian / 2)))\n };\n points[i].location.x = mid.x;\n points[i].location.y = mid.y;\n }\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To get special point color and option for Pie series.\n */\n SparklineRenderer.prototype.getPieSpecialPoint = function (temp, spark, option, i, high, low, length) {\n if (temp.yVal < 0 && spark.negativePointColor) {\n option.fill = spark.negativePointColor;\n this.negativePointIndexes.push(i);\n }\n if (i === 0 && spark.startPointColor) {\n option.fill = spark.startPointColor;\n this.startPointIndex = i;\n }\n else if ((i === (length - 1)) && spark.endPointColor) {\n option.fill = spark.endPointColor;\n this.endPointIndex = i;\n }\n if (temp.yVal === high && spark.highPointColor) {\n option.fill = spark.highPointColor;\n this.highPointIndex = i;\n }\n else if (temp.yVal === low && spark.lowPointColor) {\n option.fill = spark.lowPointColor;\n this.lowPointIndex = i;\n }\n };\n /**\n * To render area series\n */\n SparklineRenderer.prototype.renderArea = function (points, args) {\n var spark = this.sparkline;\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var pathOption = new PathOption(spark.element.id + '_sparkline_area', args.fill, 0, 'transparent', spark.opacity);\n var d = '';\n var str = '';\n for (var i = 0, len = points.length; i < len; i++) {\n if (i !== 0) {\n str += 'L ' + points[i].x + ' ' + points[i].y + ' ';\n }\n else {\n d = 'M ' + points[i].x + ' ' + this.axisHeight + ' ';\n str = 'M ' + points[i].x + ' ' + points[i].y + ' ';\n }\n d += 'L ' + points[i].x + ' ' + points[i].y + ' ';\n if (i === (len - 1)) {\n d += 'L ' + points[i].x + ' ' + this.axisHeight + ' Z';\n }\n }\n pathOption.d = d;\n drawPath(this.sparkline, pathOption, group);\n pathOption = new PathOption(spark.element.id + '_sparkline_area_str', 'transparent', args.border.width, args.border.color, spark.opacity, '', str);\n drawPath(this.sparkline, pathOption, group);\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To render column series\n */\n SparklineRenderer.prototype.renderColumn = function (points, args) {\n var spark = this.sparkline;\n var locations = extend([], [], points);\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var lowPos;\n var highPos;\n if (this.sparkline.highPointColor || this.sparkline.lowPointColor) {\n var pointsYPos = locations.map(function (a) { return a.markerPosition; });\n highPos = Math.min.apply(null, pointsYPos);\n lowPos = Math.max.apply(null, pointsYPos);\n }\n var id = spark.element.id + '_sparkline_column_';\n var rectOptions = new RectOption(id, '', args.border, spark.opacity, null);\n var paletteLength = spark.palette.length;\n var temp;\n var len = points.length;\n this.negativePointIndexes = [];\n for (var i = 0; i < len; i++) {\n temp = points[i];\n rectOptions.id = id + i;\n rectOptions.fill = (paletteLength) ? spark.palette[i % paletteLength] : args.fill;\n rectOptions.rect = new Rect(temp.x, temp.y, temp.width, temp.height);\n this.getSpecialPoint(true, temp, spark, rectOptions, i, highPos, lowPos, len);\n temp.location.y = (temp.markerPosition <= this.axisHeight) ? temp.y : (temp.y + temp.height);\n temp.location.x = temp.x + (temp.width / 2);\n rectOptions.stroke = args.border.color ? (args.border.color) : rectOptions.fill;\n var pointArgs = this.triggerPointRender('pointRendering', i, rectOptions.fill, { color: rectOptions.stroke, width: args.border.width });\n rectOptions.fill = pointArgs.fill;\n rectOptions.stroke = pointArgs.border.color;\n rectOptions['stroke-width'] = pointArgs.border.width;\n if (!pointArgs.cancel) {\n var element = drawRectangle(spark, rectOptions, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To render WinLoss series\n */\n SparklineRenderer.prototype.renderWinLoss = function (points, args) {\n var spark = this.sparkline;\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var id = spark.element.id + '_sparkline_winloss_';\n var options = new RectOption(id, '', args.border, spark.opacity, null);\n var temp;\n var len = points.length;\n var paletteLength = spark.palette.length;\n for (var i = 0; i < len; i++) {\n temp = points[i];\n options.id = id + i;\n options.fill = (paletteLength) ? spark.palette[i % paletteLength] : ((temp.yVal === this.axisValue) ?\n (this.sparkline.tiePointColor || '#a216f3') : ((temp.yVal > this.axisValue) ? args.fill :\n (spark.negativePointColor || '#e20f07')));\n options.stroke = (args.border.color) ? (args.border.color) : options.fill;\n options.rect = new Rect(temp.x, temp.y, temp.width, temp.height);\n temp.location.x = temp.x + (temp.width / 2);\n temp.location.y = (temp.yVal >= this.axisValue) ? (temp.y) : (temp.y + temp.height);\n var pointArgs = this.triggerPointRender('pointRendering', i, options.fill, { color: options.stroke, width: args.border.width });\n options.fill = pointArgs.fill;\n options.stroke = pointArgs.border.color;\n options['stroke-width'] = pointArgs.border.width;\n if (!pointArgs.cancel) {\n var element = drawRectangle(spark, options, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n SparklineRenderer.prototype.renderMarker = function (points) {\n var spark = this.sparkline;\n var marker = spark.markerSettings;\n if ((spark.type === 'Pie' || spark.type === 'WinLoss' || !marker.visible.length)) {\n return;\n }\n var locations = extend([], [], points);\n var group = this.sparkline.renderer.createGroup({\n id: spark.element.id + '_sparkline_marker_g',\n 'clip-path': 'url(#' + this.clipId + ')'\n });\n var temp;\n var id = spark.element.id + '_sparkline_marker_';\n var option = new CircleOption('', marker.fill, marker.border, marker.opacity, 0, 0, marker.size / 2, '');\n var highPos;\n var lowPos;\n var visible = marker.visible.join();\n if ((visible.toLowerCase().indexOf('high') > -1) || (visible.toLowerCase().indexOf('low') > -1)) {\n var pointsYPos = locations.map(function (a) { return a.markerPosition; });\n highPos = Math.min.apply(null, pointsYPos);\n lowPos = Math.max.apply(null, pointsYPos);\n }\n this.negativePointIndexes = [];\n for (var i = 0, length_1 = points.length; i < length_1; i++) {\n temp = points[i];\n option.id = id + i;\n option.cx = temp.location.x;\n option.cy = temp.location.y;\n option.fill = marker.fill;\n var render = (visible.toLowerCase().indexOf('all') > -1);\n render = this.getSpecialPoint(render, temp, spark, option, i, highPos, lowPos, length_1, visible.toLowerCase());\n option.stroke = marker.border.color || option.fill;\n var markerArgs = {\n name: 'markerRendering', cancel: false, border: { color: option.stroke, width: marker.border.width }, fill: option.fill,\n pointIndex: i, sparkline: this.sparkline, x: option.cx, y: option.cy, size: marker.size\n };\n this.sparkline.trigger(markerArgs.name, markerArgs);\n if (render && !markerArgs.cancel) {\n option.fill = markerArgs.fill;\n option.stroke = markerArgs.border.color;\n option['stroke-width'] = markerArgs.border.width;\n option.r = markerArgs.size / 2;\n var element = drawCircle(spark, option, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To get special point color and option.\n */\n SparklineRenderer.prototype.getSpecialPoint = function (render, temp, spark, option, i, highPos, lowPos, length, visible) {\n if (visible === void 0) { visible = ''; }\n if (temp.markerPosition > this.axisHeight) {\n option.fill = spark.negativePointColor || option.fill;\n this.negativePointIndexes.push(i);\n render = render || (visible.indexOf('negative') > -1);\n }\n if (i === 0) {\n option.fill = spark.startPointColor || option.fill;\n this.startPointIndex = i;\n render = render || (visible.indexOf('start') > -1);\n }\n else if ((i === (length - 1))) {\n option.fill = spark.endPointColor || option.fill;\n this.endPointIndex = i;\n render = render || (visible.indexOf('end') > -1);\n }\n if (temp.markerPosition === highPos) {\n option.fill = spark.highPointColor || option.fill;\n this.highPointIndex = i;\n render = render || (visible.indexOf('high') > -1);\n }\n else if (temp.markerPosition === lowPos) {\n option.fill = spark.lowPointColor || option.fill;\n this.lowPointIndex = i;\n render = render || (visible.indexOf('low') > -1);\n }\n return render;\n };\n /**\n * To render data label for sparkline.\n */\n SparklineRenderer.prototype.renderLabel = function (points) {\n var spark = this.sparkline;\n var dataLabel = spark.dataLabelSettings;\n var color = (spark.theme === 'Highcontrast') ? '#FFFFFF' : '#424242';\n color = (dataLabel.textStyle.color) ? dataLabel.textStyle.color : color;\n if ((spark.type === 'WinLoss' || !dataLabel.visible.length)) {\n return;\n }\n var locations = extend([], [], points);\n var id = spark.element.id + '_sparkline_label_';\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_label_g',\n style: 'pointer-events: none;' });\n var g;\n var temp;\n var textId = id + 'text_';\n var rectId = id + 'rect_';\n var option = new TextOption('', 0, 0, 'middle', '', 'middle');\n var labelStyle = dataLabel.textStyle;\n var pointsYPos = locations.map(function (a) { return a.markerPosition; });\n var highPos = Math.min.apply(null, pointsYPos);\n var lowPos = Math.max.apply(null, pointsYPos);\n var space = 1;\n var padding = (dataLabel.fill !== 'transparent' || dataLabel.border.width) ? 2 : 0;\n var size = measureText('sparkline_measure_text', labelStyle);\n var rectOptions = new RectOption('', dataLabel.fill, dataLabel.border, dataLabel.opacity, null);\n var edgeLabelOption;\n for (var i = 0, length_2 = points.length; i < length_2; i++) {\n temp = points[i];\n option.id = textId + i;\n option.x = temp.location.x + dataLabel.offset.x;\n option.y = ((spark.type === 'Pie') ? temp.location.y : ((temp.markerPosition > this.axisHeight) ? (temp.location.y +\n (size.height / 2) + space + padding) : (temp.location.y - (size.height / 2) - space - padding))) + dataLabel.offset.y;\n option.text = (dataLabel.format !== '') ? this.formatter(dataLabel.format, this.sparkline.dataSource[i]) :\n temp.yVal.toString();\n var labelArgs = {\n name: 'dataLabelRendering', cancel: false, border: dataLabel.border, fill: dataLabel.fill, pointIndex: i,\n sparkline: this.sparkline, x: option.x, y: option.y, text: option.text, color: color\n };\n this.sparkline.trigger(labelArgs.name, labelArgs);\n size = measureText(labelArgs.text, labelStyle);\n option.text = labelArgs.text;\n var render = (dataLabel.visible.join().toLowerCase().indexOf('all') > -1);\n render = this.getLabelVisible(render, temp, i, dataLabel, length_2, highPos, lowPos);\n edgeLabelOption = this.arrangeLabelPosition(dataLabel.edgeLabelMode, render, labelArgs.x, i, length_2, size, padding);\n if (render && !labelArgs.cancel && edgeLabelOption.render) {\n rectOptions.id = rectId + i;\n rectOptions.fill = labelArgs.fill;\n rectOptions.stroke = labelArgs.border.color;\n rectOptions['stroke-width'] = labelArgs.border.width;\n option.x = edgeLabelOption.x;\n option.y = labelArgs.y;\n rectOptions.rect = new Rect(option.x - ((size.width / 2) + padding), (option.y - padding - (size.height / 1.75)), size.width + (padding * 2), size.height + (padding * 2));\n g = this.sparkline.renderer.createGroup({ id: id + 'g' + i });\n drawRectangle(spark, rectOptions, g);\n renderTextElement(option, labelStyle, labelArgs.color, g);\n group.appendChild(g);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n SparklineRenderer.prototype.arrangeLabelPosition = function (edgeLabel, render, x, index, length, size, padding) {\n if (edgeLabel === 'None') {\n return { x: x, render: render };\n }\n if (index === 0 && ((x - (size.width / 2) - padding) <= 0)) {\n if (edgeLabel === 'Hide') {\n render = false;\n }\n else {\n x = this.sparkline.padding.left + padding + (size.width / 2);\n }\n }\n else if (index === length - 1 && ((x + (size.width / 2) + padding) >= this.sparkline.availableSize.width)) {\n if (edgeLabel === 'Hide') {\n render = false;\n }\n else {\n x -= (size.width / 2 + padding);\n }\n }\n return { x: x, render: render };\n };\n /**\n * To get special point color and option.\n */\n SparklineRenderer.prototype.getLabelVisible = function (render, temp, i, label, length, highPos, lowPos) {\n var labelVisible = label.visible.join().toLowerCase();\n if (temp.markerPosition > this.axisHeight) {\n render = render || (labelVisible.indexOf('negative') > -1);\n }\n if (i === 0) {\n render = render || (labelVisible.indexOf('start') > -1);\n }\n else if ((i === (length - 1))) {\n render = render || (labelVisible.indexOf('end') > -1);\n }\n if (temp.markerPosition === highPos) {\n render = render || (labelVisible.indexOf('high') > -1);\n }\n else if (temp.markerPosition === lowPos) {\n render = render || (labelVisible.indexOf('low') > -1);\n }\n return render;\n };\n /**\n * To format text\n */\n SparklineRenderer.prototype.formatter = function (format, data) {\n if (isNullOrUndefined(format)) {\n return null;\n }\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n format = format.split('${' + key + '}').join(data[key]);\n }\n return format;\n };\n /**\n * To calculate min max for x and y axis\n */\n SparklineRenderer.prototype.axisCalculation = function () {\n this.findRanges(this.sparkline.sparklineData);\n };\n /**\n * To find x axis interval.\n */\n SparklineRenderer.prototype.getInterval = function (data, x, type) {\n var interval = 1;\n var x1 = data[0][x];\n var x2 = isNullOrUndefined(data[1]) ? undefined : data[1][x];\n if (!isNullOrUndefined(x1) && !isNullOrUndefined(x2)) {\n var temp = extend([], data);\n var validData_1 = [];\n temp.forEach(function (value) {\n if (!isNullOrUndefined(value[x])) {\n validData_1.push(value);\n }\n });\n validData_1.sort(function (a, b) {\n if (isNullOrUndefined(a[x]) || isNullOrUndefined(b[x])) {\n return 0;\n }\n return a[x] - b[x];\n });\n interval = validData_1[1][x] - validData_1[0][x];\n }\n return interval;\n };\n /**\n * To calculate axis ranges internally.\n */\n // tslint:disable-next-line:max-func-body-length\n SparklineRenderer.prototype.findRanges = function (data) {\n var model = this.sparkline;\n var max;\n var min;\n var minX;\n var maxX;\n var maxPointsLength = data.length;\n var temp;\n var sumofValues = 0;\n var isNumericArray = Array.isArray(data) && typeof data[0] !== 'object';\n if (isNumericArray) {\n if (model.type === 'Pie') {\n for (var i = 0; i < maxPointsLength; i++) {\n sumofValues += Math.abs(data[i]);\n }\n }\n else {\n max = Math.max.apply(null, data);\n min = Math.min.apply(null, data);\n minX = 0;\n maxX = maxPointsLength - 1;\n }\n }\n else {\n if (model.type === 'Pie') {\n for (var i = 0; i < maxPointsLength; i++) {\n sumofValues += Math.abs(data[i][model.yName]);\n }\n }\n else {\n if (isNullOrUndefined(data[0][model.xName])) {\n var x_1 = data.map(function (z) { return z[model.yName]; });\n max = Math.max.apply(null, x_1);\n min = Math.min.apply(null, x_1);\n }\n else {\n temp = extend([], data);\n temp = temp.sort(function (a, b) { return a[model.yName] - b[model.yName]; });\n max = temp[temp.length - 1][model.yName];\n min = temp[0][model.yName];\n }\n if (!isNullOrUndefined(data[0][model.xName])) {\n temp = temp.sort(function (a, b) { return a[model.xName] - b[model.xName]; });\n maxX = temp[temp.length - 1][model.xName];\n minX = temp[0][model.xName];\n }\n else {\n minX = 0;\n maxX = maxPointsLength - 1;\n }\n }\n }\n var y2;\n var height;\n var width;\n var x1 = 0;\n var y1;\n var padding = model.padding;\n var point;\n var axis = model.axisSettings;\n var value = axis.value;\n if (model.type !== 'Pie') {\n this.maxLength = maxPointsLength;\n height = model.availableSize.height - (padding.bottom + padding.top);\n width = model.availableSize.width - (padding.left + padding.right);\n maxX = isNullOrUndefined(axis.maxX) ? maxX : axis.maxX;\n minX = isNullOrUndefined(axis.minX) ? minX : axis.minX;\n max = isNullOrUndefined(axis.maxY) ? max : axis.maxY;\n min = isNullOrUndefined(axis.minY) ? min : axis.minY;\n var color = (model.theme === 'Highcontrast') ? '#FFFFFF' : '#000000';\n color = (axis.lineSettings.color) ? axis.lineSettings.color : color;\n var eventArgs = {\n name: 'axisRendering', cancel: false, sparkline: model, maxX: maxX, minX: minX, maxY: max, minY: min,\n value: axis.value, lineColor: color, lineWidth: axis.lineSettings.width\n };\n model.trigger('axisRendering', eventArgs);\n if (eventArgs.cancel) {\n this.visiblePoints = [];\n return;\n }\n maxX = eventArgs.maxX;\n minX = eventArgs.minX;\n max = eventArgs.maxY;\n min = eventArgs.minY;\n value = this.axisValue = eventArgs.value;\n this.axisColor = eventArgs.lineColor;\n this.axisWidth = eventArgs.lineWidth;\n var unitX = maxX - minX;\n var unitY = max - min;\n unitX = (unitX === 0) ? 1 : unitX;\n unitY = (unitY === 0) ? 1 : unitY;\n this.unitX = unitX;\n this.unitY = unitY;\n this.min = min;\n x1 = 0;\n y1 = height - ((height / unitY) * (-min));\n y1 = (min < 0 && max <= 0) ? 0 : (min < 0 && max > 0) ? y1 : height;\n if (value >= min && value <= max) {\n y1 = height - Math.round(height * ((value - min) / this.unitY));\n }\n this.axisHeight = y1 + padding.top;\n }\n var percent;\n var x;\n var y;\n var visiblePoints = [];\n var interval = this.getInterval(data, model.xName, model.valueType);\n for (var i = 0; i < maxPointsLength; i++) {\n if (isNullOrUndefined(data[i][model.xName]) && isNullOrUndefined(data[i][model.yName]) && ((data[i][model.yName]) !== 0)\n && isNumericArray) {\n x = i;\n y = data[i];\n }\n else if (isNullOrUndefined(data[i][model.xName])) {\n x = i;\n y = data[i][model.yName];\n }\n else {\n x = data[i][model.xName];\n y = data[i][model.yName];\n }\n if (isNullOrUndefined(x) || isNullOrUndefined(y)) {\n continue;\n }\n if (model.type === 'Line' || model.type === 'Area') {\n y2 = (min !== max && maxPointsLength !== 1) ? height - Math.round(height * ((y - min) / this.unitY)) : padding.top;\n point = { x: (minX !== maxX) ? Math.round(width * ((x - minX) / this.unitX)) : width / 2, y: y2, markerPosition: y2 };\n }\n else if (model.type === 'Column' || model.type === 'WinLoss') {\n var colWidth = width / (((maxX - minX) / interval) + 1);\n var calSpace = 0.5;\n var space = (calSpace * 2); //calspace is default space for column and winloss\n colWidth -= (space);\n x1 = (((x - minX) / interval) * (colWidth + space)) + (space / 2);\n if (model.type === 'WinLoss') {\n // win or gain column height half of the height , draw(zero) height factor\n var winLossFactor = 0.5;\n var drawHeightFactor = 40;\n y2 = (y > value) ? (height / 4) : (y < value) ? (height * winLossFactor) :\n ((height * winLossFactor) - (height / drawHeightFactor));\n point = { x: x1, y: y2, height: (y !== value) ? (height / 4) : height / 20, width: colWidth,\n markerPosition: (y2 > y1) ? (y1 + Math.abs(y2 - y1)) : y2 };\n }\n else {\n var z = ((height / this.unitY) * (y - min));\n var z1 = (y === min && y > value) ? ((maxPointsLength !== 1 && this.unitY !== 1) ?\n (height / this.unitY) * (min / 2) : (z | 1)) :\n (y === max && y < value && maxPointsLength !== 1 && this.unitY !== 1) ? (height / this.unitY) * (-max / 2) : z;\n y2 = Math.abs(height - z1);\n point = {\n x: x1, y: (y2 > y1) ? y1 : y2, height: Math.abs(y2 - y1),\n width: colWidth, markerPosition: (y2 > y1) ? (y1 + Math.abs(y2 - y1)) : y2\n };\n }\n }\n else if (model.type === 'Pie') {\n percent = (Math.abs(y) / sumofValues) * 100;\n point = {\n percent: percent, degree: ((Math.abs(y) / sumofValues) * 360)\n };\n }\n if (model.type !== 'Pie') {\n point.x += padding.left;\n point.y += padding.top;\n }\n if (model.type !== 'WinLoss') {\n point.markerPosition += padding.top;\n }\n point.location = { x: point.x, y: point.y };\n point.xVal = x;\n point.yVal = y;\n visiblePoints.push(point);\n }\n visiblePoints.sort(function (a, b) {\n return a.x - b.x;\n });\n this.visiblePoints = visiblePoints;\n };\n /**\n * To render the sparkline axis\n */\n SparklineRenderer.prototype.drawAxis = function () {\n var spark = this.sparkline;\n var height = this.axisHeight;\n if ((spark.type !== 'WinLoss') && (spark.type !== 'Pie') && spark.axisSettings.lineSettings.visible) {\n var xAxis = {\n 'id': spark.element.id + '_Sparkline_XAxis',\n 'x1': spark.padding.left, 'y1': height,\n 'x2': spark.availableSize.width - spark.padding.right, 'y2': height,\n 'stroke': this.axisColor,\n 'opacity': spark.axisSettings.lineSettings.opacity,\n 'stroke-dasharray': spark.axisSettings.lineSettings.dashArray,\n 'stroke-width': this.axisWidth,\n 'clip-path': 'url(#' + this.clipId + ')'\n };\n spark.svgObject.appendChild(spark.renderer.drawLine(xAxis));\n }\n };\n /**\n * To trigger point render event\n */\n SparklineRenderer.prototype.triggerPointRender = function (name, i, fill, border) {\n var args = {\n name: name, cancel: false, border: border, fill: fill, sparkline: this.sparkline, pointIndex: i\n };\n this.sparkline.trigger(name, args);\n return args;\n };\n return SparklineRenderer;\n}());\nexport { SparklineRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property, Complex } from '@syncfusion/ej2-base';\nimport { remove, L10n, Internationalization, Event, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Browser, EventHandler, Touch, Collection } from '@syncfusion/ej2-base';\nimport { SparklineBorder, SparklineTooltipSettings, ContainerArea, AxisSettings, Padding, SparklineMarkerSettings } from './model/base';\nimport { SparklineDataLabelSettings, RangeBandSettings } from './model/base';\nimport { Size, createSvg, RectOption, Rect, drawRectangle, getIdElement, withInBounds, removeElement } from './utils/helper';\nimport { SparklineRenderer } from './rendering/sparkline-renderer';\n//tslint:disable: no-duplicate-lines\n/**\n * Represents the Sparkline control.\n * ```html\n *
    \n * \n * ```\n */\nvar Sparkline = /** @class */ (function (_super) {\n __extends(Sparkline, _super);\n // Sparkline rendering starts from here.\n /**\n * Constructor for creating the Sparkline widget\n */\n function Sparkline(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.isDevice = Browser.isDevice;\n return _this;\n }\n /**\n * Initializing pre-required values for sparkline.\n */\n Sparkline.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger('load', { sparkline: this });\n this.sparklineRenderer = new SparklineRenderer(this);\n this.createSVG();\n this.wireEvents();\n this.setCulture();\n };\n /**\n * Sparkline Elements rendering starting.\n */\n Sparkline.prototype.render = function () {\n // Sparkline rendering splitted into rendering and calculations\n this.sparklineRenderer.processData();\n this.renderSparkline();\n this.element.appendChild(this.svgObject);\n this.setSecondaryElementPosition();\n this.trigger('loaded', { sparkline: this });\n };\n /**\n * To render sparkline elements\n */\n Sparkline.prototype.renderSparkline = function () {\n // To render the sparkline elements\n this.renderBorder();\n this.createDiv();\n this.sparklineRenderer.renderSeries();\n };\n /**\n * Create secondary element for the tooltip\n */\n Sparkline.prototype.createDiv = function () {\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n this.element.style.display = 'block';\n this.element.style.position = 'relative';\n };\n /**\n * To set the left and top position for data label template for sparkline\n */\n Sparkline.prototype.setSecondaryElementPosition = function () {\n var element = getIdElement(this.element.id + '_Secondary_Element');\n if (!element) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getIdElement(this.element.id + '_svg').getBoundingClientRect();\n element.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n element.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n /**\n * @private\n * Render the sparkline border\n */\n Sparkline.prototype.renderBorder = function () {\n var width = this.containerArea.border.width;\n var borderRect;\n if (width > 0 || this.containerArea.background !== 'transparent') {\n borderRect = new RectOption(this.element.id + '_SparklineBorder', this.containerArea.background, this.containerArea.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.svgObject.appendChild(drawRectangle(this, borderRect));\n }\n // Used to create clip path sparkline\n var padding = this.padding;\n borderRect = new RectOption(this.element.id + '_sparkline_clip_rect', 'transparent', { color: 'transparent', width: 0 }, 1, new Rect(padding.left, padding.top, this.availableSize.width - (padding.left + padding.right), this.availableSize.height - (padding.top + padding.bottom)));\n var clipPath = this.renderer.createClipPath({ id: this.element.id + '_sparkline_clip_path' });\n drawRectangle(this, borderRect, clipPath);\n this.svgObject.appendChild(clipPath);\n };\n /**\n * To create svg element for sparkline\n */\n Sparkline.prototype.createSVG = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the Sparkline SVG object\n */\n Sparkline.prototype.removeSvg = function () {\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n removeElement(this.element.id + '_Secondary_Element');\n if (this.sparklineTooltipModule) {\n this.sparklineTooltipModule.removeTooltipElements();\n }\n };\n /**\n * Method to set culture for sparkline\n */\n Sparkline.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * To provide the array of modules needed for sparkline rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Sparkline.prototype.requiredModules = function () {\n var modules = [];\n if (this.tooltipSettings.visible || this.tooltipSettings.trackLineSettings.visible) {\n modules.push({\n member: 'SparklineTooltip',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Method to unbind events for sparkline chart\n */\n Sparkline.prototype.unWireEvents = function () {\n var move = Browser.touchMoveEvent;\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.sparklineMove);\n EventHandler.remove(this.element, cancel, this.sparklineMouseLeave);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.sparklineMouseEnd);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.sparklineResize);\n };\n /**\n * Method to bind events for the sparkline\n */\n Sparkline.prototype.wireEvents = function () {\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchMoveEvent, this.sparklineMove, this);\n EventHandler.add(this.element, 'click', this.sparklineClick, this);\n EventHandler.add(this.element, cancel, this.sparklineMouseLeave, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.sparklineMouseEnd, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.sparklineResize.bind(this));\n new Touch(this.element);\n };\n /**\n * Sparkline resize event.\n * @private\n */\n Sparkline.prototype.sparklineResize = function (e) {\n var _this = this;\n var args = {\n name: 'resize',\n previousSize: this.availableSize,\n sparkline: this,\n currentSize: new Size(0, 0)\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n _this.unWireEvents();\n _this.createSVG();\n _this.refreshing = true;\n _this.wireEvents();\n args.currentSize = _this.availableSize;\n _this.trigger('resize', args);\n _this.render();\n }, 500);\n return false;\n };\n /**\n * Handles the mouse move on sparkline.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineMove = function (e) {\n this.setSparklineMouseXY(e);\n this.notify(Browser.touchMoveEvent, e);\n var args = {\n name: 'sparklineMouseMove', cancel: false, sparkline: this, event: e\n };\n this.trigger(args.name, args);\n var pointClick = this.isPointRegion(e);\n if (pointClick.isPointRegion) {\n var pointArgs = {\n name: 'pointRegionMouseMove', cancel: false, event: e, sparkline: this, pointIndex: pointClick.pointIndex\n };\n this.trigger(pointArgs.name, pointArgs);\n }\n return false;\n };\n /**\n * Handles the mouse click on sparkline.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineClick = function (e) {\n this.setSparklineMouseXY(e);\n var args = {\n name: 'sparklineMouseClick', cancel: false, sparkline: this, event: e\n };\n this.trigger(args.name, args);\n var pointClick = this.isPointRegion(e);\n if (pointClick.isPointRegion) {\n var pointArgs = {\n name: 'pointRegionMouseClick', cancel: false, event: e, sparkline: this, pointIndex: pointClick.pointIndex\n };\n this.trigger(pointArgs.name, pointArgs);\n }\n return false;\n };\n /**\n * To check mouse event target is point region or not.\n */\n Sparkline.prototype.isPointRegion = function (e) {\n var _this = this;\n var startId = this.element.id + '_';\n var id = e.target.id.replace(startId, '').split('_');\n if (id[1] === this.type.toLowerCase()) {\n var index_1 = parseInt(id[2], 10);\n if ((isNullOrUndefined(index_1) || isNaN(index_1)) && (this.type === 'Line' || this.type === 'Area')) {\n this.sparklineRenderer.visiblePoints.forEach(function (point, i) {\n if (withInBounds(_this.mouseX, _this.mouseY, new Rect(point.x - 5, point.y - 5, 10, 10))) {\n index_1 = i;\n return;\n }\n });\n }\n return { isPointRegion: true, pointIndex: index_1 };\n }\n return { isPointRegion: false, pointIndex: null };\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineMouseEnd = function (e) {\n this.setSparklineMouseXY(e);\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n * Handles the mouse leave on sparkline.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineMouseLeave = function (e) {\n this.setSparklineMouseXY(e);\n this.notify(Browser.isPointer ? 'pointerleave' : 'mouseleave', e);\n return false;\n };\n /**\n * Method to set mouse x, y from events\n */\n Sparkline.prototype.setSparklineMouseXY = function (e) {\n var pageY;\n var pageX;\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageY = e.clientY;\n pageX = e.clientX;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getIdElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n };\n /**\n * To change rendering while property value modified.\n * @private\n */\n Sparkline.prototype.onPropertyChanged = function (newProp, oldProp) {\n var render = false;\n var refresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'xName':\n case 'yName':\n case 'dataSource':\n case 'axisSettings':\n case 'type':\n case 'valueType':\n refresh = true;\n break;\n case 'border':\n case 'markerSettings':\n case 'dataLabelSettings':\n case 'tooltipSettings':\n case 'startPointColor':\n case 'highPointColor':\n case 'lowPointColor':\n case 'endPointColor':\n case 'negativePointColor':\n case 'theme':\n render = true;\n break;\n }\n }\n if (refresh) {\n this.createSVG();\n this.sparklineRenderer.processData();\n this.refreshSparkline();\n }\n else if (render) {\n this.createSVG();\n this.refreshSparkline();\n }\n };\n /**\n * To render sparkline series and appending.\n */\n Sparkline.prototype.refreshSparkline = function () {\n // Issue fix. React had native render method. So OnProperty change used render method won't wrok. \n this.renderSparkline();\n this.element.appendChild(this.svgObject);\n this.setSecondaryElementPosition();\n };\n /**\n * Get component name\n */\n Sparkline.prototype.getModuleName = function () {\n return 'sparkline';\n };\n /**\n * Destroy the component\n */\n Sparkline.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Sparkline.prototype.getPersistData = function () {\n return '';\n };\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"height\", void 0);\n __decorate([\n Complex({}, SparklineBorder)\n ], Sparkline.prototype, \"border\", void 0);\n __decorate([\n Property('Line')\n ], Sparkline.prototype, \"type\", void 0);\n __decorate([\n Property([])\n ], Sparkline.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Numeric')\n ], Sparkline.prototype, \"valueType\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"xName\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"yName\", void 0);\n __decorate([\n Property('#00bdae')\n ], Sparkline.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"highPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"lowPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"startPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"endPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"negativePointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"tiePointColor\", void 0);\n __decorate([\n Property([])\n ], Sparkline.prototype, \"palette\", void 0);\n __decorate([\n Property(1)\n ], Sparkline.prototype, \"lineWidth\", void 0);\n __decorate([\n Property(1)\n ], Sparkline.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"format\", void 0);\n __decorate([\n Property(false)\n ], Sparkline.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Complex({}, SparklineTooltipSettings)\n ], Sparkline.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, ContainerArea)\n ], Sparkline.prototype, \"containerArea\", void 0);\n __decorate([\n Collection([], RangeBandSettings)\n ], Sparkline.prototype, \"rangeBandSettings\", void 0);\n __decorate([\n Complex({}, AxisSettings)\n ], Sparkline.prototype, \"axisSettings\", void 0);\n __decorate([\n Complex({}, SparklineMarkerSettings)\n ], Sparkline.prototype, \"markerSettings\", void 0);\n __decorate([\n Complex({}, SparklineDataLabelSettings)\n ], Sparkline.prototype, \"dataLabelSettings\", void 0);\n __decorate([\n Complex({}, Padding)\n ], Sparkline.prototype, \"padding\", void 0);\n __decorate([\n Property('Material')\n ], Sparkline.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"tooltipInitialize\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"seriesRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"axisRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"pointRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"pointRegionMouseMove\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"pointRegionMouseClick\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"sparklineMouseMove\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"sparklineMouseClick\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"dataLabelRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"markerRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"resize\", void 0);\n Sparkline = __decorate([\n NotifyPropertyChanges\n ], Sparkline);\n return Sparkline;\n}(Component));\nexport { Sparkline };\n","import { PathOption, drawPath, getIdElement, Rect, withInBounds } from '../utils/helper';\nimport { Browser, extend, isNullOrUndefined, remove, createElement } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-svg-base';\n/**\n * Sparkline Tooltip Module\n */\nvar SparklineTooltip = /** @class */ (function () {\n function SparklineTooltip(sparkline) {\n this.sparkline = sparkline;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n SparklineTooltip.prototype.addEventListener = function () {\n if (this.sparkline.isDestroyed) {\n return;\n }\n // this.sparkline.on('mouseleave', this.mouseLeaveHandler, this);\n this.sparkline.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseLeaveHandler, this);\n this.sparkline.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.sparkline.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n SparklineTooltip.prototype.mouseLeaveHandler = function (e) {\n this.removeTooltipElements();\n };\n SparklineTooltip.prototype.mouseUpHandler = function (e) {\n if (!this.sparkline.isTouch) {\n return;\n }\n this.processTooltip(e);\n this.fadeOut();\n };\n SparklineTooltip.prototype.fadeOut = function () {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(this.removeTooltipElements.bind(this), 5000);\n };\n /**\n * To remove tooltip and tracker elements.\n * @private\n */\n SparklineTooltip.prototype.removeTooltipElements = function () {\n this.removeTooltip();\n this.removeTracker();\n };\n SparklineTooltip.prototype.mouseMoveHandler = function (e) {\n this.processTooltip(e);\n };\n SparklineTooltip.prototype.processTooltip = function (e) {\n var pointIndex;\n var spark = this.sparkline;\n var visiblePoints = spark.sparklineRenderer.visiblePoints;\n var mouseX = spark.mouseX;\n var mouseY = spark.mouseY;\n if (spark.type !== 'Pie') {\n var locations = extend([], [], visiblePoints);\n var trackerPositions = locations.map(function (point) { return point.location.x; });\n var temp = Infinity;\n var mousePosition = void 0;\n for (var i = 0, diff = void 0, len = trackerPositions.length; i < len; i++) {\n diff = Math.abs(mouseX - trackerPositions[i]);\n if (temp > diff) {\n temp = diff;\n mousePosition = trackerPositions[i];\n pointIndex = i;\n }\n }\n }\n else {\n var target = e.target.id;\n pointIndex = parseInt(target.split('_pie_')[1], 10);\n }\n if (isNaN(pointIndex) || !withInBounds(mouseX, mouseY, new Rect(0, 0, spark.availableSize.width, spark.availableSize.height))) {\n this.removeTracker();\n this.removeTooltip();\n return;\n }\n if (this.pointIndex === pointIndex) {\n return;\n }\n this.pointIndex = pointIndex;\n this.renderTrackerLine(visiblePoints[pointIndex]);\n this.renderTooltip(visiblePoints[pointIndex]);\n };\n /**\n * To render tracker line\n */\n SparklineTooltip.prototype.renderTrackerLine = function (points) {\n var spark = this.sparkline;\n var tracker = spark.tooltipSettings.trackLineSettings;\n var color = (spark.theme === 'Highcontrast') ? '#FFFFFF' : '#000000';\n color = (tracker.color) ? tracker.color : color;\n if (!tracker.visible || spark.type === 'Pie') {\n return;\n }\n var group = getIdElement(spark.element.id + '_sparkline_tracker_g');\n if (isNullOrUndefined(group)) {\n group = spark.renderer.createGroup({ id: spark.element.id + '_sparkline_tracker_g' });\n spark.svgObject.appendChild(group);\n }\n var pathEle = getIdElement(spark.element.id + '_sparkline_tracker');\n var d = 'M ' + points.location.x + ' ' + spark.padding.top + ' L ' + points.location.x + ' ' +\n (spark.availableSize.height - spark.padding.bottom);\n if (isNullOrUndefined(pathEle)) {\n var pathOption = new PathOption(spark.element.id + '_sparkline_tracker', 'transparent', tracker.width, color, 1);\n pathOption.d = d;\n drawPath(spark, pathOption, group);\n }\n else {\n pathEle.setAttribute('d', d);\n pathEle.setAttribute('stroke-width', tracker.width.toString());\n pathEle.setAttribute('stroke', color);\n }\n };\n /**\n * To render line series\n */\n SparklineTooltip.prototype.renderTooltip = function (points) {\n var spark = this.sparkline;\n var tooltip = spark.tooltipSettings;\n if (!tooltip.visible) {\n return;\n }\n var div = getIdElement(spark.element.id + '_sparkline_tooltip_div');\n if (isNullOrUndefined(div)) {\n div = createElement('div', { id: spark.element.id + '_sparkline_tooltip_div',\n styles: 'pointer-events: none; position: absolute;z-index:1;' });\n getIdElement(spark.element.id + '_Secondary_Element').appendChild(div);\n }\n var size = (spark.markerSettings.visible.length) ? spark.markerSettings.size : 0;\n var x = points.xVal.toString();\n if (spark.valueType === 'Category') {\n x = spark.dataSource[points.xVal][spark.xName];\n }\n else if (spark.valueType === 'DateTime') {\n x = new Date(points.xVal).toDateString();\n }\n var y = points.yVal.toString();\n var text = this.getFormat(spark.tooltipSettings.format, spark, x, this.formatValue(points.yVal, spark).toString());\n var location = { x: points.location.x, y: points.location.y };\n location = spark.type === 'Pie' ? { x: points.location.x, y: points.location.y } : location;\n var tooltipEvent = {\n name: 'tooltipInitialize', cancel: false, text: text,\n textStyle: {\n size: tooltip.textStyle.size,\n opacity: tooltip.textStyle.opacity,\n fontWeight: tooltip.textStyle.fontWeight,\n fontStyle: tooltip.textStyle.fontStyle,\n fontFamily: tooltip.textStyle.fontFamily,\n color: tooltip.textStyle.color,\n }\n };\n spark.trigger(tooltipEvent.name, tooltipEvent);\n if (tooltipEvent.cancel) {\n return;\n }\n var element = new Tooltip({\n content: tooltipEvent.text,\n border: tooltip.border,\n template: tooltip.template,\n data: spark.dataSource[this.pointIndex],\n fill: tooltip.fill,\n textStyle: tooltipEvent.textStyle,\n enableAnimation: false,\n location: { x: location.x, y: location.y },\n shared: false,\n areaBounds: new Rect(0, 0, spark.availableSize.width, spark.availableSize.height),\n theme: spark.theme\n });\n element.appendTo(div);\n };\n /**\n * To get tooltip format.\n */\n SparklineTooltip.prototype.getFormat = function (format, spark, x, y) {\n if (isNullOrUndefined(format) || format === '') {\n return [y];\n }\n var text = format;\n text = text.split('${' + spark.xName + '}').join(x).split('${' + spark.yName + '}').join(y);\n return [text];\n };\n SparklineTooltip.prototype.formatValue = function (value, sparkline) {\n var formatValue;\n var formatFunction;\n if (sparkline.format && !isNaN(Number(value))) {\n formatFunction = sparkline.intl.getNumberFormat({ format: sparkline.format, useGrouping: sparkline.useGroupingSeparator });\n formatValue = formatFunction(value);\n }\n else {\n formatValue = value;\n }\n return formatValue;\n };\n /**\n * To remove tracker line.\n */\n SparklineTooltip.prototype.removeTracker = function () {\n var tracker = this.sparkline.element.querySelector('#' + this.sparkline.element.id + '_sparkline_tracker_g');\n return tracker ? remove(tracker) : null;\n };\n /**\n * To remove tooltip element.\n */\n SparklineTooltip.prototype.removeTooltip = function () {\n this.pointIndex = null;\n var tooltip = this.sparkline.element.querySelector('#' + this.sparkline.element.id + '_sparkline_tooltip_div');\n return tooltip ? remove(tooltip) : null;\n };\n /**\n * Get module name.\n */\n SparklineTooltip.prototype.getModuleName = function () {\n return 'SparklineTooltip';\n };\n /**\n * To destroy the tooltip.\n */\n SparklineTooltip.prototype.destroy = function (sparkline) {\n // To remove tooltip module\n };\n return SparklineTooltip;\n}());\nexport { SparklineTooltip };\n","import * as index from '@syncfusion/ej2-charts';\nindex.Chart.Inject( index.LineSeries,index.ScatterSeries,index.ColumnSeries,index.SplineSeries,index.SplineAreaSeries,index.StripLine,index.AreaSeries,index.ScrollBar,index.StepLineSeries,index.StepAreaSeries,index.StackingColumnSeries,index.StackingAreaSeries,index.BarSeries,index.StackingBarSeries,index.RangeColumnSeries,index.BubbleSeries,index.Tooltip,index.Crosshair,index.Category,index.DateTime,index.Logarithmic,index.Legend,index.Zoom,index.DataLabel,index.Selection,index.ChartAnnotation,index.HiloSeries,index.HiloOpenCloseSeries,index.WaterfallSeries,index.RangeAreaSeries,index.CandleSeries,index.PolarSeries,index.RadarSeries,index.SmaIndicator,index.TmaIndicator,index.EmaIndicator,index.AccumulationDistributionIndicator,index.MacdIndicator,index.AtrIndicator,index.RsiIndicator,index.MomentumIndicator,index.StochasticIndicator,index.BollingerBands,index.BoxAndWhiskerSeries,index.HistogramSeries,index.ErrorBar,index.Trendlines,index.DateTimeCategory,index.MultiColoredLineSeries,index.MultiColoredAreaSeries,index.MultiLevelLabel,index.ParetoSeries);\nindex.AccumulationChart.Inject( index.PieSeries,index.FunnelSeries,index.PyramidSeries,index.AccumulationTooltip,index.AccumulationLegend,index.AccumulationSelection,index.AccumulationDataLabel,index.AccumulationAnnotation);\nindex.RangeNavigator.Inject( index.RangeTooltip,index.PeriodSelector,index.AreaSeries,index.StepLineSeries,index.DateTime,index.Logarithmic);\nindex.Sparkline.Inject( index.SparklineTooltip);\nindex.Smithchart.Inject( index.SmithchartLegend,index.TooltipRender);\nexport * from '@syncfusion/ej2-charts';\n","/**\n * Specifies gauge Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisLineColor = null;\n /** @private */\n Theme.tickLineColor = null;\n /** @private */\n Theme.pointerColor = null;\n})(Theme || (Theme = {}));\n/** @private */\nexport function getRangePalette(theme) {\n var palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // switch (theme) {\n // case 'Material':\n // palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // break;\n // case 'Fabric':\n // palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // break;\n // }\n return palette;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Configures the borders in circular gauge.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the fonts in circular gauge.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the margin of circular gauge.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the tooltip in circular gauge.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#000000')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#ffffff', size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({}, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\nimport { Theme } from '../model/theme';\n/**\n * Configures the axis line.\n */\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(2)\n ], Line.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Line.prototype, \"dashArray\", void 0);\n __decorate([\n Property(Theme.axisLineColor)\n ], Line.prototype, \"color\", void 0);\n return Line;\n}(ChildProperty));\nexport { Line };\n/**\n * Configures the axis label.\n */\nvar Label = /** @class */ (function (_super) {\n __extends(Label, _super);\n function Label() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Label.prototype, \"font\", void 0);\n __decorate([\n Property('')\n ], Label.prototype, \"format\", void 0);\n __decorate([\n Property('Inside')\n ], Label.prototype, \"position\", void 0);\n __decorate([\n Property('None')\n ], Label.prototype, \"hiddenLabel\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"autoAngle\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"useRangeColor\", void 0);\n __decorate([\n Property(0)\n ], Label.prototype, \"offset\", void 0);\n return Label;\n}(ChildProperty));\nexport { Label };\n/**\n * Configures the ranges of an axis.\n */\nvar Range = /** @class */ (function (_super) {\n __extends(Range, _super);\n function Range() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Range.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"radius\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"startWidth\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"endWidth\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Range.prototype, \"roundedCornerRadius\", void 0);\n return Range;\n}(ChildProperty));\nexport { Range };\n/**\n * Configures the major and minor tick lines of an axis.\n */\nvar Tick = /** @class */ (function (_super) {\n __extends(Tick, _super);\n function Tick() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Tick.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"interval\", void 0);\n __decorate([\n Property(0)\n ], Tick.prototype, \"offset\", void 0);\n __decorate([\n Property(Theme.tickLineColor)\n ], Tick.prototype, \"color\", void 0);\n __decorate([\n Property('Inside')\n ], Tick.prototype, \"position\", void 0);\n __decorate([\n Property(false)\n ], Tick.prototype, \"useRangeColor\", void 0);\n return Tick;\n}(ChildProperty));\nexport { Tick };\n/**\n * Configures the needle cap in pointer.\n */\nvar Cap = /** @class */ (function (_super) {\n __extends(Cap, _super);\n function Cap() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ffffff')\n ], Cap.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: Theme.pointerColor, width: 8 }, Border)\n ], Cap.prototype, \"border\", void 0);\n __decorate([\n Property(8)\n ], Cap.prototype, \"radius\", void 0);\n return Cap;\n}(ChildProperty));\nexport { Cap };\n/**\n * Configures the back needle in pointers.\n */\nvar NeedleTail = /** @class */ (function (_super) {\n __extends(NeedleTail, _super);\n function NeedleTail() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(Theme.pointerColor)\n ], NeedleTail.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: Theme.pointerColor, width: 0 }, Border)\n ], NeedleTail.prototype, \"border\", void 0);\n __decorate([\n Property('0%')\n ], NeedleTail.prototype, \"length\", void 0);\n return NeedleTail;\n}(ChildProperty));\nexport { NeedleTail };\n/**\n * Configures the animation of pointers.\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Animation.prototype, \"enable\", void 0);\n __decorate([\n Property(1000)\n ], Animation.prototype, \"duration\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * ‘Annotation’ module is used to handle annotation action for an axis.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(90)\n ], Annotation.prototype, \"angle\", void 0);\n __decorate([\n Property('50%')\n ], Annotation.prototype, \"radius\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Annotation.prototype, \"autoAngle\", void 0);\n __decorate([\n Complex({ size: '12px', color: '#686868' }, Font)\n ], Annotation.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"description\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Configures the pointers of an axis.\n */\nvar Pointer = /** @class */ (function (_super) {\n __extends(Pointer, _super);\n function Pointer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Pointer.prototype, \"value\", void 0);\n __decorate([\n Property('Needle')\n ], Pointer.prototype, \"type\", void 0);\n __decorate([\n Property(0)\n ], Pointer.prototype, \"roundedCornerRadius\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"radius\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"pointerWidth\", void 0);\n __decorate([\n Complex({}, Cap)\n ], Pointer.prototype, \"cap\", void 0);\n __decorate([\n Complex({}, NeedleTail)\n ], Pointer.prototype, \"needleTail\", void 0);\n __decorate([\n Property(Theme.pointerColor)\n ], Pointer.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Pointer.prototype, \"border\", void 0);\n __decorate([\n Complex(null, Animation)\n ], Pointer.prototype, \"animation\", void 0);\n __decorate([\n Property('Circle')\n ], Pointer.prototype, \"markerShape\", void 0);\n __decorate([\n Property(5)\n ], Pointer.prototype, \"markerHeight\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"description\", void 0);\n __decorate([\n Property(5)\n ], Pointer.prototype, \"markerWidth\", void 0);\n return Pointer;\n}(ChildProperty));\nexport { Pointer };\n/**\n * Configures an axis in a gauge.\n */\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Specifies the minimum value of an axis.\n * @aspDefaultValueIgnore\n * @default null\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n return _this;\n }\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"radius\", void 0);\n __decorate([\n Complex({}, Line)\n ], Axis.prototype, \"lineStyle\", void 0);\n __decorate([\n Collection([{}], Range)\n ], Axis.prototype, \"ranges\", void 0);\n __decorate([\n Collection([{}], Pointer)\n ], Axis.prototype, \"pointers\", void 0);\n __decorate([\n Collection([{}], Annotation)\n ], Axis.prototype, \"annotations\", void 0);\n __decorate([\n Complex({ width: 2, height: 10 }, Tick)\n ], Axis.prototype, \"majorTicks\", void 0);\n __decorate([\n Complex({ width: 2, height: 5 }, Tick)\n ], Axis.prototype, \"minorTicks\", void 0);\n __decorate([\n Property(200)\n ], Axis.prototype, \"startAngle\", void 0);\n __decorate([\n Property(160)\n ], Axis.prototype, \"endAngle\", void 0);\n __decorate([\n Property('ClockWise')\n ], Axis.prototype, \"direction\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"background\", void 0);\n __decorate([\n Complex({}, Label)\n ], Axis.prototype, \"labelStyle\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { stringToNumber, getLocationFromAngle, getFontStyle } from '../utils/helper';\nimport { getElement, getTemplateFunction, measureElementRect } from '../utils/helper';\nimport { annotationRender } from '../model/constants';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * Annotation Module handles the Annotation of the axis.\n */\nvar Annotations = /** @class */ (function () {\n /**\n * Constructor for Annotation module.\n * @private.\n */\n function Annotations(gauge) {\n this.gauge = gauge;\n this.elementId = gauge.element.id;\n }\n /**\n * Method to render the annotation for circular gauge.\n */\n Annotations.prototype.renderAnnotation = function (axis, index) {\n var _this = this;\n var element = createElement('div', {\n id: this.elementId + '_Annotations_' + index\n });\n var parentElement = getElement(this.elementId + '_Secondary_Element');\n axis.annotations.map(function (annotation, annotationIndex) {\n if (annotation.content !== null) {\n _this.createTemplate(element, annotationIndex, index);\n }\n });\n if (parentElement && element.childElementCount) {\n parentElement.appendChild(element);\n }\n };\n /**\n * Method to create annotation template for circular gauge.\n */\n Annotations.prototype.createTemplate = function (element, annotationIndex, axisIndex) {\n var axis = this.gauge.axes[axisIndex];\n var annotation = axis.annotations[annotationIndex];\n var childElement = createElement('div', {\n id: this.elementId + '_Axis_' + axisIndex + '_Annotation_' + annotationIndex,\n styles: 'position: absolute; z-index:' + annotation.zIndex + ';transform:' +\n (annotation.autoAngle ? 'rotate(' + (annotation.angle - 90) + 'deg)' : 'rotate(0deg)') + ';'\n });\n var argsData = {\n cancel: false, name: annotationRender, content: annotation.content,\n axis: axis, annotation: annotation, textStyle: annotation.textStyle\n };\n this.gauge.trigger(annotationRender, argsData);\n var templateFn;\n var templateElement;\n if (!argsData.cancel) {\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(axis).length) {\n templateElement = templateFn(axis);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content,\n styles: getFontStyle(argsData.textStyle)\n }));\n }\n this.updateLocation(childElement, axis, annotation);\n element.appendChild(childElement);\n }\n };\n /**\n * Method to update the annotation location for circular gauge.\n */\n Annotations.prototype.updateLocation = function (element, axis, annotation) {\n var location = getLocationFromAngle(annotation.angle - 90, stringToNumber(annotation.radius, axis.currentRadius), this.gauge.midPoint);\n var elementRect = measureElementRect(element);\n element.style.left = (location.x - (elementRect.width / 2)) + 'px';\n element.style.top = (location.y - (elementRect.height / 2)) + 'px';\n element.setAttribute('aria-label', annotation.description || 'Annotation');\n };\n /**\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","/**\n * Specifies the gauge constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var annotationRender = 'annotationRender';\n/** @private */\nexport var gaugeMouseMove = 'gaugeMouseMove';\n/** @private */\nexport var gaugeMouseLeave = 'gaugeMouseLeave';\n/** @private */\nexport var gaugeMouseDown = 'gaugeMouseDown';\n/** @private */\nexport var gaugeMouseUp = 'gaugeMouseUp';\n/** @private */\nexport var dragStart = 'dragStart';\n/** @private */\nexport var dragMove = 'dragMove';\n/** @private */\nexport var dragEnd = 'dragEnd';\n/** @private */\nexport var resized = 'resized';\n","import { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { getPointer, Rect } from '../utils/helper';\nimport { getAngleFromValue, getLabelFormat, getLocationFromAngle } from '../utils/helper';\nimport { Browser, createElement } from '@syncfusion/ej2-base';\nimport { tooltipRender } from '../model/constants';\n/**\n * Tooltip Module handles the tooltip of the circular gauge\n */\nvar GaugeTooltip = /** @class */ (function () {\n /**\n * Constructor for Tooltip module.\n * @private.\n */\n function GaugeTooltip(gauge) {\n this.gauge = gauge;\n this.tooltipId = this.gauge.element.id + '_CircularGauge_Tooltip';\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.addEventListener();\n }\n /**\n * Method to render the tooltip for circular gauge.\n */\n /* tslint:disable:no-string-literal */\n GaugeTooltip.prototype.renderTooltip = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var tooltipContent = [];\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n target = e.target;\n }\n if (target.id.indexOf('_Pointer_') >= 0) {\n var currentPointer = getPointer(target.id, this.gauge);\n this.currentAxis = this.gauge.axes[currentPointer.axisIndex];\n this.currentPointer = (this.currentAxis.pointers)[currentPointer.pointerIndex];\n var angle = getAngleFromValue(this.currentPointer.currentValue, this.currentAxis.visibleRange.max, this.currentAxis.visibleRange.min, this.currentAxis.startAngle, this.currentAxis.endAngle, this.currentAxis.direction === 'ClockWise') % 360;\n var location_1 = getLocationFromAngle(angle, this.currentAxis.currentRadius, this.gauge.midPoint);\n var tooltipFormat = this.gauge.tooltip.format || this.currentAxis.labelStyle.format;\n var customLabelFormat = tooltipFormat && tooltipFormat.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(tooltipFormat), useGrouping: this.gauge.useGroupingSeparator\n });\n if (document.getElementById(this.tooltipId)) {\n this.tooltipEle = document.getElementById(this.tooltipId);\n }\n else {\n this.tooltipEle = createElement('div', {\n id: this.tooltipId,\n className: 'EJ2-CircularGauge-Tooltip',\n styles: 'position: absolute;pointer-events:none;'\n });\n document.getElementById(this.gauge.element.id + '_Secondary_Element').appendChild(this.tooltipEle);\n }\n var content = customLabelFormat ?\n tooltipFormat.replace(new RegExp('{value}', 'g'), format(this.currentPointer.currentValue)) :\n format(this.currentPointer.currentValue);\n location_1.x = (this.tooltip.template && ((angle >= 150 && angle <= 250) || (angle >= 330 && angle <= 360) ||\n (angle >= 0 && angle <= 45))) ? (location_1.x + 10) : location_1.x;\n this.findPosition(angle, content, location_1);\n var tooltipArgs = {\n name: tooltipRender, cancel: false, content: content, location: location_1, axis: this.currentAxis,\n tooltip: this.tooltip, pointer: this.currentPointer, event: e, gauge: this.gauge\n };\n this.gauge.trigger(tooltipRender, tooltipArgs);\n var template = tooltipArgs.tooltip.template;\n if (template !== null && Object.keys(template).length === 1) {\n template = template[Object.keys(template)[0]];\n }\n if (!tooltipArgs.cancel) {\n tooltipArgs['tooltip']['properties']['textStyle']['color'] = (this.gauge.theme === 'Highcontrast') ? '#00000' : '#FFFFFF';\n this.svgTooltip = new Tooltip({\n enable: true,\n header: '',\n data: { value: tooltipArgs.content },\n template: template,\n enableAnimation: tooltipArgs.tooltip.enableAnimation,\n content: [tooltipArgs.content],\n shapes: [],\n location: tooltipArgs.location,\n palette: [],\n inverted: this.arrowInverted,\n areaBounds: this.tooltipRect,\n fill: (this.gauge.theme === 'Highcontrast') ? '#FFFFFF' : tooltipArgs.tooltip.fill,\n textStyle: tooltipArgs.tooltip.textStyle,\n border: tooltipArgs.tooltip.border,\n theme: this.gauge.theme\n });\n this.svgTooltip.appendTo(this.tooltipEle);\n }\n else {\n this.removeTooltip();\n }\n }\n else {\n this.removeTooltip();\n }\n };\n /**\n * Method to find the position of the tooltip anchor for circular gauge.\n */\n GaugeTooltip.prototype.findPosition = function (angle, text, location) {\n var svgRect = this.gauge.svgObject.getBoundingClientRect();\n var elementRect = this.gauge.element.getBoundingClientRect();\n var addLeft;\n var addTop;\n var addHeight;\n var addWidth;\n var rect = new Rect(Math.abs(elementRect.left - svgRect.left), Math.abs(elementRect.top - svgRect.top), svgRect.width, svgRect.height);\n switch (true) {\n case (angle >= 0 && angle < 45):\n this.arrowInverted = true;\n addLeft = (angle >= 15 && angle <= 30) ? location.y : 0;\n this.tooltipRect = new Rect(rect.x, rect.y + addTop, rect.width, rect.height);\n this.tooltipPosition = 'RightBottom';\n break;\n case (angle >= 45 && angle < 90):\n this.arrowInverted = false;\n this.tooltipRect = new Rect(rect.x, rect.y + location.y, rect.width, rect.height);\n this.tooltipPosition = 'BottomRight';\n break;\n case (angle >= 90 && angle < 135):\n this.arrowInverted = false;\n this.tooltipRect = new Rect(rect.x, rect.y + location.y, rect.width, rect.height);\n this.tooltipPosition = 'BottomLeft';\n break;\n case (angle >= 135 && angle < 180):\n this.arrowInverted = true;\n addTop = (angle >= 150 && angle <= 160) ? location.y : 0;\n this.tooltipRect = new Rect(rect.x - rect.width, rect.y + addTop, rect.width, rect.height);\n this.tooltipPosition = 'LeftBottom';\n break;\n case (angle >= 180 && angle < 225):\n this.arrowInverted = true;\n addHeight = (angle >= 200 && angle <= 225) ? Math.abs(rect.y - location.y) : rect.height;\n this.tooltipRect = new Rect(rect.x - rect.width, rect.y, rect.width, addHeight);\n this.tooltipPosition = 'LeftTop';\n break;\n case (angle >= 225 && angle < 270):\n this.arrowInverted = false;\n addWidth = (angle >= 250 && angle <= 290) ? rect.width : Math.abs(rect.x - location.x);\n this.tooltipRect = new Rect(rect.x, rect.y, addWidth, rect.height);\n this.tooltipPosition = 'TopLeft';\n break;\n case (angle >= 270 && angle < 315):\n this.arrowInverted = false;\n addLeft = (angle >= 270 && angle > 290) ? location.x : 0;\n this.tooltipRect = new Rect(rect.x + addLeft, rect.y, rect.width, rect.height);\n this.tooltipPosition = 'TopRight';\n break;\n case (angle >= 315 && angle <= 360):\n this.arrowInverted = true;\n addHeight = (angle >= 315 && angle <= 340) ? Math.abs(rect.y - location.y) : rect.height;\n this.tooltipRect = new Rect(rect.x, rect.y, rect.width, addHeight);\n this.tooltipPosition = 'RightTop';\n break;\n }\n };\n GaugeTooltip.prototype.removeTooltip = function () {\n if (document.getElementsByClassName('EJ2-CircularGauge-Tooltip').length > 0) {\n document.getElementsByClassName('EJ2-CircularGauge-Tooltip')[0].remove();\n }\n };\n GaugeTooltip.prototype.mouseUpHandler = function (e) {\n this.renderTooltip(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n };\n /**\n * To bind events for tooltip module\n */\n GaugeTooltip.prototype.addEventListener = function () {\n if (this.gauge.isDestroyed) {\n return;\n }\n this.gauge.on(Browser.touchMoveEvent, this.renderTooltip, this);\n this.gauge.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * To unbind events for tooltip module\n */\n GaugeTooltip.prototype.removeEventListener = function () {\n if (this.gauge.isDestroyed) {\n return;\n }\n this.gauge.off(Browser.touchMoveEvent, this.renderTooltip);\n this.gauge.off(Browser.touchEndEvent, this.mouseUpHandler);\n };\n /**\n * Get module name.\n */\n GaugeTooltip.prototype.getModuleName = function () {\n // Returns te module name\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n GaugeTooltip.prototype.destroy = function (gauge) {\n // Destroy method performed here\n this.removeEventListener();\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","import { getLocationFromAngle, PathOption, stringToNumber, TextOption, textElement, appendPath, toPixel } from '../utils/helper';\nimport { getAngleFromValue, isCompleteAngle, getPathArc, getRoundedPathArc, getRangeColor } from '../utils/helper';\nimport { getRangePalette } from '../model/theme';\n/**\n * Specifies the Axis rendering for circular gauge\n */\nvar AxisRenderer = /** @class */ (function () {\n /**\n * Constructor for axis renderer.\n * @private.\n */\n function AxisRenderer(gauge) {\n this.gauge = gauge;\n }\n /**\n * Method to render the axis element of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisOuterLine = function (axis, index, element, gauge) {\n var background = axis.background;\n this.setRangeColor(axis);\n if (background !== null) {\n appendPath(new PathOption(gauge.element.id + '_AxisOuterLine_' + index, background, 0, 'transparent', null, '0', getPathArc(gauge.midPoint, 0, 360, (Math.min(axis.rect.width, axis.rect.height) / 2)), '', 'pointer-events:none;'), element, gauge);\n }\n };\n /**\n * Method to render the axis line of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisLine = function (axis, index, element, gauge) {\n var startAngle = axis.startAngle;\n var endAngle = axis.endAngle;\n if (axis.lineStyle.width > 0) {\n startAngle = !isCompleteAngle(startAngle, endAngle) ? startAngle : [0, endAngle = 360][0];\n appendPath(new PathOption(gauge.element.id + '_AxisLine_' + index, 'transparent', axis.lineStyle.width, axis.lineStyle.color, null, axis.lineStyle.dashArray, getPathArc(gauge.midPoint, startAngle - 90, endAngle - 90, axis.currentRadius), '', 'pointer-events:none;'), element, gauge);\n }\n };\n /**\n * Method to render the axis labels of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisLabels = function (axis, index, element, gauge) {\n var labelElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Labels_' + index\n });\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var labelCollection = axis.visibleLabels;\n var location;\n var style = axis.labelStyle;\n var anchor;\n var angle;\n var label;\n var radius = axis.currentRadius;\n var labelPadding = 10;\n if (style.position === 'Outside') {\n radius += (axis.nearSize - (axis.maxLabelSize.height + axis.lineStyle.width / 2)) +\n (labelPadding / 2);\n }\n else {\n radius -= (axis.farSize - (axis.maxLabelSize.height + axis.lineStyle.width / 2) +\n (style.autoAngle ? labelPadding : 0));\n }\n for (var i = 0, length_1 = labelCollection.length; i < length_1; i++) {\n if ((i === 0 && style.hiddenLabel === 'First') ||\n (i === (length_1 - 1) && style.hiddenLabel === 'Last')) {\n continue;\n }\n label = labelCollection[i];\n angle = Math.round(getAngleFromValue(label.value, max, min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise'));\n location = getLocationFromAngle(angle, radius, gauge.midPoint);\n anchor = this.findAnchor(location, style, angle, label);\n textElement(new TextOption(gauge.element.id + '_Axis_' + index + '_Label_' + i, location.x, location.y, anchor, label.text, style.autoAngle ? 'rotate(' + (angle + 90) + ',' + (location.x) + ',' + location.y + ')' : '', 'auto'), style.font, style.useRangeColor ? getRangeColor(label.value, axis.ranges, style.font.color) : style.font.color, labelElement, 'pointer-events:none;');\n }\n element.appendChild(labelElement);\n };\n /**\n * Method to find the anchor of the axis label.\n * @private\n */\n AxisRenderer.prototype.findAnchor = function (location, style, angle, label) {\n if (style.autoAngle) {\n return 'middle';\n }\n var anchor = style.position === 'Inside' ?\n ((angle > 120 && angle < 240) ? 'start' : ((300 < angle || angle < 60) ? 'end' : 'middle')) :\n ((angle > 120 && angle < 240) ? 'end' : ((300 < angle || angle < 60) ? 'start' : 'middle'));\n location.y += style.position === 'Inside' ?\n ((angle >= 240 && angle <= 300) ? (label.size.height / 2) :\n (angle >= 60 && angle <= 120) ? 0 : label.size.height / 4) :\n ((angle >= 240 && angle <= 300) ? 0 :\n (angle >= 60 && angle <= 120) ? label.size.height / 2 : label.size.height / 4);\n return anchor;\n };\n /**\n * Method to render the axis minor tick lines of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawMinorTickLines = function (axis, index, element, gauge) {\n var minorTickElements = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_MinorTickLines_' + index\n });\n var minorLineStyle = axis.minorTicks;\n var minorInterval = minorLineStyle.interval !== null ?\n minorLineStyle.interval : (axis.visibleRange.interval / 2);\n var isRangeColor = minorLineStyle.useRangeColor;\n if (minorLineStyle.width && minorLineStyle.height && minorInterval) {\n for (var i = axis.visibleRange.min, max = axis.visibleRange.max; i <= max; i += minorInterval) {\n if (this.majorValues.indexOf(+i.toFixed(3)) < 0) {\n appendPath(new PathOption(gauge.element.id + '_Axis_Minor_TickLine_' + index + '_' + i, 'transparent', minorLineStyle.width, isRangeColor ? getRangeColor(i, axis.ranges, minorLineStyle.color) : minorLineStyle.color, null, '0', this.calculateTicks(i, minorLineStyle, axis), '', 'pointer-events:none;'), minorTickElements, gauge);\n }\n }\n element.appendChild(minorTickElements);\n }\n };\n /**\n * Method to render the axis major tick lines of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawMajorTickLines = function (axis, index, element, gauge) {\n var majorTickElements = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_MajorTickLines_' + index\n });\n var majorLineStyle = axis.majorTicks;\n var isRangeColor = majorLineStyle.useRangeColor;\n this.majorValues = [];\n if (majorLineStyle.width && majorLineStyle.height && axis.visibleRange.interval) {\n for (var i = axis.visibleRange.min, max = axis.visibleRange.max, interval = axis.visibleRange.interval; i <= max; i += interval) {\n this.majorValues.push(+i.toFixed(3));\n appendPath(new PathOption(gauge.element.id + '_Axis_Major_TickLine_' + index + '_' + i, 'transparent', majorLineStyle.width, isRangeColor ? getRangeColor(i, axis.ranges, majorLineStyle.color) : majorLineStyle.color, null, '0', this.calculateTicks(i, majorLineStyle, axis), '', 'pointer-events:none;'), majorTickElements, gauge);\n }\n element.appendChild(majorTickElements);\n }\n };\n /**\n * Method to calcualte the tick elements for the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.calculateTicks = function (value, options, axis) {\n var axisLineWidth = (axis.lineStyle.width / 2) + options.offset;\n var isOutside = options.position === 'Outside';\n var angle = getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise');\n var start = getLocationFromAngle(angle, axis.currentRadius +\n (isOutside ? axisLineWidth : -axisLineWidth), this.gauge.midPoint);\n var end = getLocationFromAngle(angle, axis.currentRadius +\n (isOutside ? axisLineWidth : -axisLineWidth) +\n (isOutside ? options.height : -options.height), this.gauge.midPoint);\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y + ' ';\n };\n /**\n * Method to render the axis range of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisRange = function (axis, index, element, gauge) {\n var _this = this;\n var rangeElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Ranges_' + index\n });\n var startAngle;\n var endAngle;\n var isClockWise = axis.direction === 'ClockWise';\n var startValue;\n var endValue;\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var startWidth;\n var endWidth;\n var roundedStartAngle;\n var roundedEndAngle;\n var oldStart;\n var oldEnd;\n axis.ranges.map(function (range, rangeIndex) {\n _this.calculateRangeRadius(axis, range);\n startValue = Math.min(Math.max(range.start, min), range.end);\n endValue = Math.min(Math.max(range.start, range.end), max);\n if (startValue !== endValue) {\n startAngle = getAngleFromValue(startValue, max, min, axis.startAngle, axis.endAngle, isClockWise);\n endAngle = getAngleFromValue(endValue, max, min, axis.startAngle, axis.endAngle, isClockWise);\n if (range.startWidth.length > 0) {\n startWidth = toPixel(range.startWidth, range.currentRadius);\n }\n else {\n startWidth = range.startWidth;\n }\n if (range.endWidth.length > 0) {\n endWidth = toPixel(range.endWidth, range.currentRadius);\n }\n else {\n endWidth = range.endWidth;\n }\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n endWidth = isClockWise ? endWidth : [startWidth, startWidth = endWidth][0];\n oldStart = ((((range.currentRadius - (startWidth / 2)) * ((startAngle * Math.PI) / 180) -\n (range.roundedCornerRadius / 4)) / (range.currentRadius - (startWidth / 2))) * 180) / Math.PI;\n oldEnd = ((((range.currentRadius - (endWidth / 2)) * ((endAngle * Math.PI) / 180) +\n (range.roundedCornerRadius / 4)) / (range.currentRadius - (endWidth / 2))) * 180) / Math.PI;\n roundedStartAngle = ((((range.currentRadius) * ((startAngle * Math.PI) / 180) +\n range.roundedCornerRadius) / (range.currentRadius)) * 180) / Math.PI;\n roundedEndAngle = ((((range.currentRadius) * ((endAngle * Math.PI) / 180) -\n range.roundedCornerRadius) / (range.currentRadius)) * 180) / Math.PI;\n if (range.roundedCornerRadius) {\n appendPath(new PathOption(gauge.element.id + '_Axis_' + index + '_Range_' + rangeIndex, range.rangeColor, 0, range.rangeColor, 1, '0', getRoundedPathArc(gauge.midPoint, Math.floor(roundedStartAngle), Math.ceil(roundedEndAngle), Math.floor(oldStart), Math.ceil(oldEnd), range.currentRadius, startWidth, endWidth), '', 'pointer-events:none;'), rangeElement, gauge);\n }\n else {\n appendPath(new PathOption(gauge.element.id + '_Axis_' + index + '_Range_' + rangeIndex, range.rangeColor, 0, range.rangeColor, 1, '0', getPathArc(gauge.midPoint, Math.floor(startAngle), Math.ceil(endAngle), range.currentRadius, startWidth, endWidth), '', 'pointer-events:none;'), rangeElement, gauge);\n }\n }\n });\n element.appendChild(rangeElement);\n };\n /**\n * Method to calculate the radius of the axis range.\n * @return {void}\n */\n AxisRenderer.prototype.calculateRangeRadius = function (axis, range) {\n var radius = range.radius !== null ? range.radius : '100%';\n range.currentRadius = stringToNumber(radius, axis.currentRadius);\n };\n /**\n * Method to get the range color of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.setRangeColor = function (axis) {\n var rangeColors = getRangePalette(this.gauge.theme);\n axis.ranges.map(function (range, index) {\n range.rangeColor = range.color ? range.color : rangeColors[index % rangeColors.length];\n });\n };\n return AxisRenderer;\n}());\nexport { AxisRenderer };\n","import { stringToNumber, Size, calculateShapes, appendPath } from '../utils/helper';\nimport { getLocationFromAngle, PathOption } from '../utils/helper';\nimport { linear, getAngleFromValue, getCompleteArc, getRoundedPathArc } from '../utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../model/constants';\n/**\n * Specifies the Axis rendering for circular gauge\n */\nvar PointerRenderer = /** @class */ (function () {\n /**\n * Constructor for pointer renderer.\n * @private.\n */\n function PointerRenderer(gauge) {\n this.gauge = gauge;\n }\n /**\n * Method to render the axis pointers of the circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.drawPointers = function (axis, axisIndex, element, gauge, animate) {\n var _this = this;\n if (animate === void 0) { animate = true; }\n var pointerElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Pointers_' + axisIndex\n });\n var childElement;\n var range;\n axis.pointers.map(function (pointer, pointerIndex) {\n range = axis.visibleRange;\n pointer.pathElement = [];\n _this.calculatePointerRadius(axis, pointer);\n childElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_' + axisIndex + '_Pointer_' + pointerIndex\n });\n _this['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointerIndex, childElement, gauge);\n _this.setPointerValue(axis, pointer, pointer.currentValue);\n pointerElement.appendChild(childElement);\n if (animate) {\n _this.doPointerAnimation(pointer, axis);\n }\n });\n element.appendChild(pointerElement);\n };\n /**\n * Measure the pointer length of the circular gauge.\n * @return {void}\n */\n PointerRenderer.prototype.calculatePointerRadius = function (axis, pointer) {\n var padding = 5;\n pointer.currentRadius = pointer.radius === null ?\n (axis.currentRadius - (axis.farSize + padding)) :\n stringToNumber(pointer.radius, axis.currentRadius);\n };\n /**\n * Method to render the needle pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawNeedlePointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n var pointerRadius;\n var location;\n var direction;\n var mid = gauge.midPoint;\n var width = pointer.pointerWidth / 2;\n var rectDirection;\n // To render the needle\n location = getLocationFromAngle(0, pointer.currentRadius, mid);\n direction = 'M ' + mid.x + ' ' + (mid.y - width) + ' L ' + (location.x) + ' ' + mid.y +\n ' L ' + (mid.x) + ' ' + (mid.y + width) + ' Z';\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_Needle_' + index, pointer.color, pointer.border.width, pointer.border.color, null, '0', direction), parentElement, gauge));\n pointerRadius = stringToNumber(pointer.needleTail.length, pointer.currentRadius);\n // To render the rect element for touch\n rectDirection = 'M ' + mid.x + ' ' + (mid.y - width) + ' L ' + (location.x) + ' ' + (mid.y - width) +\n ' L ' + location.x + ' ' + (mid.y + width) + ' L ' + mid.x + ' ' + (mid.y + width);\n // To render the needle tail\n if (pointerRadius) {\n location = getLocationFromAngle(180, pointerRadius, gauge.midPoint);\n direction = 'M ' + mid.x + ' ' + (mid.y - width) +\n ' L ' + (location.x) + ' ' + (mid.y - width) +\n ' L ' + (location.x) + ' ' + (mid.y + width) +\n ' L ' + (mid.x) + ' ' + (mid.y + width) + ' Z';\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleTail_' + index, pointer.needleTail.color, pointer.needleTail.border.width, pointer.needleTail.border.color, null, '0', direction), parentElement, gauge));\n rectDirection += ' L ' + location.x + ' ' + (mid.y + width) + ' L ' + location.x + ' ' + (mid.y - width);\n }\n // To render the cap\n if (pointer.cap.radius) {\n pointer.pathElement.push(appendPath(calculateShapes(mid, 'Circle', new Size(pointer.cap.radius * 2, pointer.cap.radius * 2), '', new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleCap_' + index, pointer.cap.color, pointer.cap.border.width, pointer.cap.border.color, null, '0', '', '')), parentElement, gauge, 'Ellipse'));\n }\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleRect_' + index, 'transparent', 0, 'transpanret', null, '0', rectDirection + ' Z'), parentElement, gauge));\n };\n /**\n * Method to set the pointer value of the circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.setPointerValue = function (axis, pointer, value) {\n var location = this.gauge.midPoint;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n var roundedStartAngle;\n var roundedEndAngle;\n var oldStart;\n var oldEnd;\n oldStart = ((((pointer.currentRadius - (pointer.pointerWidth / 2)) * ((startAngle * Math.PI) / 180) -\n (pointer.roundedCornerRadius / 4)) / (pointer.currentRadius - (pointer.pointerWidth / 2))) * 180) / Math.PI;\n oldEnd = ((((pointer.currentRadius - (pointer.pointerWidth / 2)) * ((endAngle * Math.PI) / 180) +\n (pointer.roundedCornerRadius / 4)) / (pointer.currentRadius - (pointer.pointerWidth / 2))) * 180) / Math.PI;\n roundedStartAngle = ((((pointer.currentRadius) * ((startAngle * Math.PI) / 180) +\n pointer.roundedCornerRadius) / (pointer.currentRadius)) * 180) / Math.PI;\n roundedEndAngle = ((((pointer.currentRadius) * ((endAngle * Math.PI) / 180) -\n pointer.roundedCornerRadius) / (pointer.currentRadius)) * 180) / Math.PI;\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n if (pointer.roundedCornerRadius) {\n element.setAttribute('d', getRoundedPathArc(location, roundedStartAngle, roundedEndAngle, oldStart, oldEnd, pointer.currentRadius, pointer.pointerWidth, pointer.pointerWidth));\n }\n else {\n element.setAttribute('d', getCompleteArc(location, startAngle, endAngle, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth)));\n }\n }\n else {\n element.setAttribute('transform', 'rotate(' + getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise) + ',' + location.x + ',' + location.y + ')');\n }\n element.setAttribute('aria-label', pointer.description || 'Pointer:' + value.toString());\n });\n };\n /**\n * Method to render the marker pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawMarkerPointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n var location = getLocationFromAngle(0, pointer.currentRadius, gauge.midPoint);\n pointer.pathElement.push(appendPath(calculateShapes(location, pointer.markerShape, new Size(pointer.markerWidth, pointer.markerHeight), pointer.imageUrl, new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_Marker_' + index, pointer.color, pointer.border.width, pointer.border.color, null, '0', '', '')), parentElement, gauge, pointer.markerShape === 'Circle' ? 'Ellipse' : (pointer.markerShape === 'Image' ? 'Image' : 'Path')));\n };\n /**\n * Method to render the range bar pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawRangeBarPointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_RangeBar_' + index, pointer.color, pointer.border.width, pointer.border.color, 1, '0', ''), parentElement, gauge));\n };\n /**\n * Method to perform the animation of the pointer in circular gauge.\n * @return {void}\n */\n PointerRenderer.prototype.doPointerAnimation = function (pointer, axis) {\n var _this = this;\n var startValue = axis.visibleRange.min;\n var endValue = pointer.currentValue;\n if (pointer.animation.enable && startValue !== endValue && this.gauge.animatePointer) {\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n _this.performRangeBarAnimation(element, startValue, endValue, axis, pointer, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth));\n }\n else {\n _this.performNeedleAnimation(element, startValue, endValue, axis, pointer, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth));\n }\n });\n }\n };\n /**\n * Perform the needle and marker pointer animation for circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.performNeedleAnimation = function (element, start, end, axis, pointer, radius, innerRadius) {\n var _this = this;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(start, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var pointAngle = getAngleFromValue(end, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = startAngle > pointAngle ? (pointAngle + 360) : pointAngle;\n var sweepAngle;\n new Animation({}).animate(element, {\n duration: pointer.animation.duration,\n progress: function (args) {\n sweepAngle = (start < end || Math.round(startAngle) === Math.round(endAngle)) ?\n isClockWise ? (endAngle - startAngle) : (endAngle - startAngle - 360) :\n isClockWise ? (endAngle - startAngle - 360) : (endAngle - startAngle);\n element.style.animation = 'None';\n element.setAttribute('transform', 'rotate(' + linear(args.timeStamp, startAngle, sweepAngle, args.duration) + ',' +\n _this.gauge.midPoint.x.toString() + ',' + _this.gauge.midPoint.y.toString() + ')');\n },\n end: function (model) {\n _this.setPointerValue(axis, pointer, end);\n if (pointer.type === 'Marker' || (element.id.indexOf('_Pointer_NeedleCap') >= 0)) {\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n }\n });\n };\n /**\n * Perform the range bar pointer animation for circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.performRangeBarAnimation = function (element, start, end, axis, pointer, radius, innerRadius) {\n var _this = this;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(start, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var minAngle = getAngleFromValue(axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var pointAngle = getAngleFromValue(end, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var sweepAngle;\n var endAngle = startAngle > pointAngle ? (pointAngle + 360) : pointAngle;\n new Animation({}).animate(element, {\n duration: pointer.animation.duration,\n progress: function (arg) {\n element.style.animation = 'None';\n sweepAngle = (start < end || Math.round(startAngle) === Math.round(endAngle)) ?\n isClockWise ? (endAngle - startAngle) : (endAngle - startAngle - 360) :\n isClockWise ? (endAngle - startAngle - 360) : (endAngle - startAngle);\n if (isClockWise) {\n element.setAttribute('d', getCompleteArc(_this.gauge.midPoint, minAngle, linear(arg.timeStamp, startAngle, sweepAngle, arg.duration) + 0.0001, radius, innerRadius));\n }\n else {\n element.setAttribute('d', getCompleteArc(_this.gauge.midPoint, linear(arg.timeStamp, startAngle, sweepAngle, arg.duration), minAngle + 0.0001, radius, innerRadius));\n }\n },\n end: function (model) {\n _this.setPointerValue(axis, pointer, end);\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n return PointerRenderer;\n}());\nexport { PointerRenderer };\n","import { createElement } from '@syncfusion/ej2-base';\nimport { calculateSum, VisibleLabels, measureText } from '../utils/helper';\nimport { Size, Rect, stringToNumber, getLabelFormat } from '../utils/helper';\nimport { axisLabelRender } from '../model/constants';\nimport { AxisRenderer } from './axis-renderer';\nimport { PointerRenderer } from './pointer-renderer';\n/**\n * Specifies the CircularGauge Axis Layout\n */\nvar labelPadding = 10;\nvar AxisLayoutPanel = /** @class */ (function () {\n function AxisLayoutPanel(gauge) {\n this.gauge = gauge;\n this.axisRenderer = new AxisRenderer(gauge);\n this.pointerRenderer = new PointerRenderer(gauge);\n }\n /**\n * Measure the calculate the axis size and radius.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.measureAxis = function (rect) {\n this.measureAxisSize(this.gauge, rect);\n this.calculateAxesRadius();\n };\n /**\n * Measure to calculate the axis radius of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateAxesRadius = function () {\n var totalRadius;\n var currentRadius;\n var rangeMaximumRadius = 0;\n for (var _i = 0, _a = this.gauge.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n totalRadius = (Math.min(axis.rect.width, axis.rect.height) / 2);\n currentRadius = axis.radius != null ? stringToNumber(axis.radius, totalRadius) : totalRadius;\n rangeMaximumRadius = Math.max.apply(Math, axis.ranges.map(function (value) {\n return value.radius ?\n (value.radius.indexOf('%') < 0 ? 100 : parseInt(value.radius, 10)) : 0;\n }));\n currentRadius = (rangeMaximumRadius > 100 && axis.radius == null) ?\n (currentRadius * 100) / rangeMaximumRadius : currentRadius;\n axis.currentRadius = currentRadius - axis.nearSize;\n axis.visibleRange.interval = this.calculateNumericInterval(axis, axis.rect);\n this.calculateVisibleLabels(axis);\n }\n };\n /**\n * Measure to calculate the axis size.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.measureAxisSize = function (gauge, rect) {\n var _this = this;\n var sum;\n this.computeSize(gauge.axes, rect);\n gauge.axes.map(function (axis, index) {\n sum = calculateSum(index, _this.farSizes.length - 1, _this.farSizes);\n axis.rect = new Rect(rect.x + sum, rect.y + sum, rect.width - (sum * 2), rect.height - (sum * 2));\n });\n };\n /**\n * Calculate the axis values of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateAxisValues = function (rect) {\n for (var _i = 0, _a = this.gauge.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n this.calculateVisibleRange(axis, rect);\n this.calculateVisibleLabels(axis);\n }\n };\n /**\n * Calculate the visible range of an axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateVisibleRange = function (axis, rect) {\n var interval = axis.majorTicks.interval;\n var minimumValue = Math.min(axis.minimum === null ? 0 : axis.minimum, axis.maximum);\n var maximumValue = Math.max(axis.minimum, axis.maximum === null ? 100 : axis.maximum);\n axis.pointers.map(function (pointer) {\n pointer.currentValue = pointer.value !== null ?\n pointer.value < minimumValue ? minimumValue : pointer.value > maximumValue ? maximumValue : pointer.value\n : minimumValue;\n minimumValue = axis.minimum === null ? Math.min(pointer.currentValue, minimumValue) : minimumValue;\n maximumValue = axis.maximum === null ? Math.max(pointer.currentValue, maximumValue) : maximumValue;\n });\n minimumValue = (minimumValue === maximumValue) ?\n (interval !== null ? minimumValue - interval : minimumValue - 1) : minimumValue;\n axis.visibleRange = { min: minimumValue, max: maximumValue, interval: interval };\n axis.visibleRange.interval = this.calculateNumericInterval(axis, rect);\n };\n /**\n * Calculate the numeric intervals of an axis range.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateNumericInterval = function (axis, rect) {\n if (axis.majorTicks.interval !== null) {\n return axis.majorTicks.interval;\n }\n var totalAngle = axis.endAngle - axis.startAngle;\n totalAngle = totalAngle <= 0 ? (totalAngle + 360) : totalAngle;\n return this.calculateNiceInterval(axis.visibleRange.max, axis.visibleRange.min, axis.currentRadius ? axis.currentRadius : (rect.width / 2), totalAngle);\n };\n /**\n * Calculate the nice interval of an axis range.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateNiceInterval = function (maxValue, minValue, radius, degree) {\n var delta = maxValue - minValue;\n var circumference = 2 * Math.PI * radius * (degree / 360);\n var desiredIntervalsCount = Math.max((circumference * ((0.533 * 3) / 100)), 1);\n var niceInterval = delta / desiredIntervalsCount;\n var minInterval = Math.pow(10, Math.floor(Math.log(niceInterval) / Math.log(10)));\n for (var _i = 0, _a = [10, 5, 2, 1]; _i < _a.length; _i++) {\n var interval = _a[_i];\n var currentInterval = minInterval * interval;\n if (desiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Calculate the visible labels of an axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateVisibleLabels = function (axis) {\n var style = axis.labelStyle;\n var customLabelFormat = style.format && style.format.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(style.format), useGrouping: this.gauge.useGroupingSeparator\n });\n var argsData;\n axis.visibleLabels = [];\n for (var i = axis.visibleRange.min, interval = axis.visibleRange.interval, max = axis.visibleRange.max; (i <= max && interval); i += interval) {\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: customLabelFormat ? style.format.replace(new RegExp('{value}', 'g'), format(i)) :\n format(i),\n value: i\n };\n this.gauge.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n axis.visibleLabels.push(new VisibleLabels(argsData.text, i));\n }\n }\n this.getMaxLabelWidth(this.gauge, axis);\n };\n /**\n * Measure the axes available size.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.computeSize = function (axes, rect) {\n var lineSize;\n var outerHeight;\n var innerHeight;\n var isMajorTickOutside;\n var isMinorTickOutside;\n var isLabelOutside;\n var axisPadding = 5;\n var majorTickOffset = 0;\n var minorTickOffset = 0;\n var labelOffset = 0;\n this.farSizes = [];\n this.calculateAxisValues(rect);\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n lineSize = (axis.lineStyle.width / 2);\n outerHeight = 0;\n innerHeight = 0;\n isMajorTickOutside = axis.majorTicks.position === 'Outside';\n majorTickOffset = axis.majorTicks.offset;\n isMinorTickOutside = axis.minorTicks.position === 'Outside';\n minorTickOffset = axis.minorTicks.offset;\n isLabelOutside = axis.labelStyle.position === 'Outside';\n labelOffset = axis.labelStyle.offset;\n // Calculating the outer space of the axis\n outerHeight += !(isMajorTickOutside && isMinorTickOutside && isLabelOutside) ? axisPadding : 0;\n outerHeight += (isMajorTickOutside ? (axis.majorTicks.height + lineSize) : 0) +\n (isLabelOutside ? (axis.maxLabelSize.height + labelPadding + labelOffset) : 0) +\n ((isMinorTickOutside && !isMajorTickOutside) ? (axis.minorTicks.height + lineSize) : 0) + lineSize;\n outerHeight += (isMajorTickOutside && isMinorTickOutside) ? Math.max(majorTickOffset, minorTickOffset) :\n (isMajorTickOutside ? majorTickOffset : isMinorTickOutside ? minorTickOffset : 0);\n // Calculating the inner space of the axis\n innerHeight += (!isMajorTickOutside ? (axis.majorTicks.height + lineSize) : 0) +\n (!isLabelOutside ? (axis.maxLabelSize.height + labelPadding + labelOffset) : 0) +\n ((!isMinorTickOutside && isMajorTickOutside) ? (axis.minorTicks.height + lineSize) : 0) + lineSize;\n innerHeight += (!isMajorTickOutside && !isMinorTickOutside) ? Math.max(majorTickOffset, minorTickOffset) :\n (!isMajorTickOutside ? majorTickOffset : !isMinorTickOutside ? minorTickOffset : 0);\n if (this.farSizes[this.farSizes.length - 1]) {\n this.farSizes[this.farSizes.length - 1] += (innerHeight + outerHeight);\n }\n axis.nearSize = outerHeight - axisPadding;\n axis.farSize = innerHeight;\n outerHeight = (this.gauge.axes.length === (this.farSizes.length + 1)) ? 0 : outerHeight;\n this.farSizes.push(outerHeight);\n }\n };\n /**\n * To render the Axis element of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.renderAxes = function (animate) {\n var _this = this;\n if (animate === void 0) { animate = true; }\n var gauge = this.gauge;\n var renderer = this.axisRenderer;\n var element;\n var axesElements = gauge.renderer.createGroup({\n 'id': gauge.element.id + '_AxesCollection',\n 'clip-path': 'url(#' + gauge.element.id + '_GaugeAreaClipRect_' + ')'\n });\n // To append the secondary element for annotation and tooltip\n gauge.element.appendChild(createElement('div', {\n id: gauge.element.id + '_Secondary_Element',\n styles: 'position: relative'\n }));\n gauge.axes.map(function (axis, index) {\n element = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Group_' + index\n });\n renderer.drawAxisOuterLine(axis, index, element, gauge);\n renderer.drawAxisRange(axis, index, element, gauge);\n renderer.drawAxisLine(axis, index, element, gauge);\n renderer.drawMajorTickLines(axis, index, element, gauge);\n renderer.drawMinorTickLines(axis, index, element, gauge);\n renderer.drawAxisLabels(axis, index, element, gauge);\n _this.pointerRenderer.drawPointers(axis, index, element, gauge, animate);\n if (gauge.annotationsModule) {\n gauge.annotationsModule.renderAnnotation(axis, index);\n }\n axesElements.appendChild(element);\n });\n // For append clip rect for axes\n gauge.svgObject.appendChild(gauge.renderer.drawClipPath({\n 'id': gauge.element.id + '_GaugeAreaClipRect_',\n 'x': 0, 'y': 0,\n 'width': gauge.availableSize.width,\n 'height': gauge.availableSize.height,\n 'fill': 'transparent', 'stroke': 'transparent'\n }));\n gauge.svgObject.appendChild(axesElements);\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n */\n AxisLayoutPanel.prototype.getMaxLabelWidth = function (gauge, axis) {\n axis.maxLabelSize = new Size(0, 0);\n for (var _i = 0, _a = axis.visibleLabels; _i < _a.length; _i++) {\n var label = _a[_i];\n label.size = measureText(label.text, axis.labelStyle.font);\n axis.maxLabelSize.width = label.size.width > axis.maxLabelSize.width ?\n label.size.width : axis.maxLabelSize.width;\n axis.maxLabelSize.height = label.size.height > axis.maxLabelSize.height ?\n label.size.height : axis.maxLabelSize.height;\n }\n };\n return AxisLayoutPanel;\n}());\nexport { AxisLayoutPanel };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Circular Gauge\n */\nimport { Property, NotifyPropertyChanges, Component, Complex, Browser } from '@syncfusion/ej2-base';\nimport { Event, SvgRenderer, EventHandler, Collection, Internationalization } from '@syncfusion/ej2-base';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport { TextOption, textElement, RectOption, getAngleFromLocation, getValueFromAngle, removeElement } from './utils/helper';\nimport { Size, stringToNumber, measureText, Rect, GaugeLocation, getElement, getPointer, setStyles, toPixel } from './utils/helper';\nimport { getAngleFromValue, getPathArc } from './utils/helper';\nimport { Border, Margin, Font, TooltipSettings } from './model/base';\nimport { Axis } from './axes/axis';\nimport { Annotations } from './annotations/annotations';\nimport { GaugeTooltip } from './user-interaction/tooltip';\nimport { load, loaded, gaugeMouseMove, gaugeMouseLeave, gaugeMouseDown } from './model/constants';\nimport { gaugeMouseUp, dragEnd, dragMove, dragStart, resized } from './model/constants';\nimport { AxisLayoutPanel } from './axes/axis-panel';\n/**\n * Represents the Circular gauge control.\n * ```html\n *
    \n * \n * ```\n */\nvar CircularGauge = /** @class */ (function (_super) {\n __extends(CircularGauge, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function CircularGauge(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To create svg object, renderer and binding events for the container.\n */\n CircularGauge.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger(load, { gauge: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.setCulture();\n this.createSvg();\n this.wireEvents();\n };\n CircularGauge.prototype.themeEffect = function () {\n if (this.theme === 'Highcontrast') {\n this.titleStyle.color = this.titleStyle.color || '#FFFFFF';\n this.setThemeColors('#FFFFFF', '#FFFFFF');\n }\n else {\n this.titleStyle.color = this.titleStyle.color || '#424242';\n this.setThemeColors('#212121', '#757575');\n }\n };\n CircularGauge.prototype.setThemeColors = function (labelcolor, others) {\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.lineStyle.color = axis.lineStyle.color || others;\n axis.labelStyle.font.color = axis.labelStyle.font.color || labelcolor;\n axis.majorTicks.color = axis.majorTicks.color || others;\n axis.minorTicks.color = axis.minorTicks.color || others;\n for (var _b = 0, _c = axis.pointers; _b < _c.length; _b++) {\n var pointer = _c[_b];\n pointer.color = pointer.color || others;\n pointer.needleTail.color = pointer.needleTail.color || others;\n pointer.needleTail.border.color = pointer.needleTail.border.color || others;\n pointer.cap.color = pointer.cap.color || others;\n pointer.cap.border.color = pointer.cap.border.color || others;\n }\n }\n };\n /**\n * To render the circular gauge elements\n */\n CircularGauge.prototype.render = function () {\n this.calculateBounds();\n this.renderElements();\n };\n /**\n * Method to unbind events for circular gauge\n */\n CircularGauge.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'contextmenu', this.gaugeRightClick);\n EventHandler.remove(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize);\n };\n /**\n * Method to bind events for circular gauge\n */\n CircularGauge.prototype.wireEvents = function () {\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'contextmenu', this.gaugeRightClick, this);\n EventHandler.add(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize.bind(this));\n /*! Apply the style for circular gauge */\n this.setGaugeStyle(this.element);\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseMove = function (e) {\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseMove);\n this.trigger(gaugeMouseMove, args);\n var dragArgs;\n var tooltip = this.tooltipModule;\n if (!args.cancel) {\n if (this.enablePointerDrag && this.activePointer) {\n dragArgs = {\n axis: this.activeAxis,\n pointer: this.activePointer,\n previousValue: this.activePointer.currentValue,\n name: dragMove,\n currentValue: null\n };\n this.pointerDrag(new GaugeLocation(args.x, args.y));\n dragArgs.currentValue = this.activePointer.currentValue;\n this.trigger(dragMove, dragArgs);\n }\n }\n this.notify(Browser.touchMoveEvent, e);\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseLeave = function (e) {\n this.activeAxis = null;\n this.activePointer = null;\n this.svgObject.setAttribute('cursor', 'auto');\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseLeave);\n this.trigger(gaugeMouseLeave, args);\n return false;\n };\n /**\n * Handles the mouse right click.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the pointer draf while mouse move on gauge.\n * @private\n */\n CircularGauge.prototype.pointerDrag = function (location) {\n var axis = this.activeAxis;\n var range = axis.visibleRange;\n var value = getValueFromAngle(getAngleFromLocation(this.midPoint, location), range.max, range.min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise');\n if (value >= range.min && value <= range.max) {\n this.activePointer.currentValue = value;\n this.activePointer.value = value;\n this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, this.activePointer, value);\n }\n };\n /**\n * Handles the mouse down on gauge.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeOnMouseDown = function (e) {\n var currentPointer;\n var args = this.getMouseArgs(e, 'touchstart', gaugeMouseDown);\n this.trigger(gaugeMouseDown, args);\n if (!args.cancel && args.target.id.indexOf('_Pointer_') >= 0 &&\n args.target.id.indexOf(this.element.id + '_Axis_') >= 0) {\n currentPointer = getPointer(args.target.id, this);\n this.activeAxis = this.axes[currentPointer.axisIndex];\n this.activePointer = this.activeAxis.pointers[currentPointer.pointerIndex];\n this.trigger(dragStart, {\n axis: this.activeAxis,\n name: dragStart,\n pointer: this.activePointer,\n currentValue: this.activePointer.currentValue\n });\n this.svgObject.setAttribute('cursor', 'pointer');\n }\n return false;\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseEnd = function (e) {\n var args = this.getMouseArgs(e, 'touchend', gaugeMouseUp);\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || e.type === 'touchend';\n var tooltipInterval;\n var tooltip = this.tooltipModule;\n this.trigger(gaugeMouseUp, args);\n if (this.activeAxis && this.activePointer) {\n this.trigger(dragEnd, {\n name: dragEnd,\n axis: this.activeAxis,\n pointer: this.activePointer,\n currentValue: this.activePointer.currentValue\n });\n this.activeAxis = null;\n this.activePointer = null;\n }\n this.svgObject.setAttribute('cursor', 'auto');\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n * Handles the mouse event arguments.\n * @return {IMouseEventArgs}\n * @private\n */\n CircularGauge.prototype.getMouseArgs = function (e, type, name) {\n var rect = this.element.getBoundingClientRect();\n var location = new GaugeLocation(-rect.left, -rect.top);\n var isTouch = (e.type === type);\n location.x += isTouch ? e.changedTouches[0].clientX : e.clientX;\n location.y += isTouch ? e.changedTouches[0].clientY : e.clientY;\n return {\n cancel: false, name: name,\n x: location.x, y: location.y,\n target: isTouch ? e.target : e.target\n };\n };\n /**\n * Handles the gauge resize.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeResize = function (e) {\n var _this = this;\n var args = {\n gauge: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n this.animatePointer = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-circulargauge')) {\n this.resizeTo = window.setTimeout(function () {\n _this.createSvg();\n _this.calculateBounds();\n _this.renderElements();\n args.currentSize = _this.availableSize;\n _this.trigger(resized, args);\n }, 500);\n }\n return false;\n };\n /**\n * Applying styles for circular gauge elements\n */\n CircularGauge.prototype.setGaugeStyle = function (element) {\n element.style.touchAction = this.enablePointerDrag ? 'none' : 'element';\n element.style.msTouchAction = this.enablePointerDrag ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Method to set culture for gauge\n */\n CircularGauge.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Methods to create svg element for circular gauge.\n */\n CircularGauge.prototype.createSvg = function () {\n this.removeSvg();\n this.calculateSvgSize();\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To Remove the SVG from circular gauge.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /**\n * To initialize the circular gauge private variable.\n * @private\n */\n CircularGauge.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.gaugeAxisLayoutPanel = new AxisLayoutPanel(this);\n this.animatePointer = true;\n };\n /**\n * To calculate the size of the circular gauge element.\n */\n CircularGauge.prototype.calculateSvgSize = function () {\n var containerWidth = this.element.offsetWidth;\n var containerHeight = this.element.offsetHeight;\n var width = stringToNumber(this.width, containerWidth) || containerWidth || 600;\n var height = stringToNumber(this.height, containerHeight) || containerHeight || 450;\n this.availableSize = new Size(width, height);\n };\n /**\n * Method to calculate the availble size for circular gauge.\n */\n CircularGauge.prototype.calculateBounds = function () {\n var padding = 5;\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n if (this.title) {\n titleHeight = measureText(this.title, this.titleStyle).height + padding;\n }\n var top = margin.top + titleHeight + this.border.width;\n var left = margin.left + this.border.width;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n var radius = Math.min(width, height) / 2;\n var rect = new Rect((left + (width / 2) - radius), (top + (height / 2) - radius), radius * 2, radius * 2);\n var centerX = this.centerX !== null ?\n stringToNumber(this.centerX, this.availableSize.width) : rect.x + (rect.width / 2);\n var centerY = this.centerY !== null ?\n stringToNumber(this.centerY, this.availableSize.height) : rect.y + (rect.height / 2);\n this.midPoint = new GaugeLocation(centerX, centerY);\n this.gaugeAxisLayoutPanel.measureAxis(rect);\n };\n /**\n * To render elements for circular gauge\n */\n CircularGauge.prototype.renderElements = function (animate) {\n if (animate === void 0) { animate = true; }\n this.renderBorder();\n this.renderTitle();\n this.gaugeAxisLayoutPanel.renderAxes(animate);\n this.element.appendChild(this.svgObject);\n this.trigger(loaded, { gauge: this });\n };\n /**\n * Method to render the title for circular gauge.\n */\n CircularGauge.prototype.renderTitle = function () {\n if (this.title) {\n var size = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_CircularGaugeTitle', this.availableSize.width / 2, this.margin.top + 3 * (size.height / 4), 'middle', this.title);\n var element = textElement(options, this.titleStyle, this.titleStyle.color, this.svgObject, '');\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n };\n /**\n * Method to render the border for circular gauge.\n */\n CircularGauge.prototype.renderBorder = function () {\n var borderWidth = this.border.width;\n if (borderWidth > 0 || (this.background !== null && this.background !== 'transparent')) {\n this.svgObject.appendChild(this.renderer.drawRectangle(new RectOption(this.element.id + '_CircularGaugeBorder', this.background, this.border, null, new Rect(borderWidth / 2, borderWidth / 2, this.availableSize.width - borderWidth, this.availableSize.height - borderWidth))));\n }\n };\n /**\n * Method to set the pointer value dynamically for circular gauge.\n */\n CircularGauge.prototype.setPointerValue = function (axisIndex, pointerIndex, value) {\n var _this = this;\n var axis = this.axes[axisIndex];\n var pointer = axis.pointers[pointerIndex];\n var pointerRadius = pointer.currentRadius;\n var enableAnimation = pointer.animation.enable;\n value = value < axis.visibleRange.min ? axis.visibleRange.min : value;\n value = value > axis.visibleRange.max ? axis.visibleRange.max : value;\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n setStyles(element, pointer.color, pointer.border);\n if (enableAnimation) {\n _this.gaugeAxisLayoutPanel.pointerRenderer.performRangeBarAnimation(element, pointer.currentValue, value, axis, pointer, pointerRadius, (pointerRadius - pointer.pointerWidth));\n }\n else {\n _this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, pointer, value);\n }\n }\n else {\n if (element.id.indexOf('_Pointer_NeedleCap_') >= 0) {\n setStyles(element, pointer.cap.color, pointer.cap.border);\n }\n else if (element.id.indexOf('_Pointer_NeedleTail_') >= 0) {\n setStyles(element, pointer.needleTail.color, pointer.needleTail.border);\n }\n else if (element.id.indexOf('_Pointer_NeedleRect_') >= 0) {\n setStyles(element, 'transparent', { color: 'transparent', width: 0 });\n }\n else {\n setStyles(element, pointer.color, pointer.border);\n }\n if (enableAnimation) {\n _this.gaugeAxisLayoutPanel.pointerRenderer.performNeedleAnimation(element, pointer.currentValue, value, axis, pointer, pointerRadius, (pointerRadius - pointer.pointerWidth));\n }\n else {\n _this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, pointer, value);\n }\n }\n });\n pointer.currentValue = value;\n pointer.value = value;\n };\n /**\n * Method to set the annotation content dynamically for circular gauge.\n */\n CircularGauge.prototype.setAnnotationValue = function (axisIndex, annotationIndex, content) {\n var isElementExist = getElement(this.element.id + '_Annotations_' + axisIndex) !== null;\n var element = getElement(this.element.id + '_Annotations_' + axisIndex) ||\n createElement('div', {\n id: this.element.id + '_Annotations_' + axisIndex\n });\n var annotation = this.axes[axisIndex].annotations[annotationIndex];\n if (content !== null) {\n removeElement(this.element.id + '_Axis_' + axisIndex + '_Annotation_' + annotationIndex);\n annotation.content = content;\n this.annotationsModule.createTemplate(element, annotationIndex, axisIndex);\n if (!isElementExist) {\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n }\n };\n /**\n * Method to set the range values dynamically for circular gauge.\n */\n CircularGauge.prototype.setRangeValue = function (axisIndex, rangeIndex, start, end) {\n var element = getElement(this.element.id + '_Axis_' + axisIndex + '_Range_' + rangeIndex);\n var axis = this.axes[axisIndex];\n var range = axis.ranges[rangeIndex];\n var axisRange = axis.visibleRange;\n var isClockWise = axis.direction === 'ClockWise';\n var startValue = Math.min(Math.max(start, axisRange.min), end);\n var endValue = Math.min(Math.max(start, end), axisRange.max);\n var startAngle = getAngleFromValue(startValue, axisRange.max, axisRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = getAngleFromValue(endValue, axisRange.max, axisRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var startWidth;\n if (range.startWidth.length > 0) {\n startWidth = toPixel(range.startWidth, range.currentRadius);\n }\n else {\n startWidth = range.startWidth;\n }\n var endWidth;\n if (range.endWidth.length > 0) {\n endWidth = toPixel(range.endWidth, range.currentRadius);\n }\n else {\n endWidth = range.endWidth;\n }\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n endWidth = isClockWise ? endWidth : [startWidth, startWidth = endWidth][0];\n element.setAttribute('d', getPathArc(this.midPoint, Math.round(startAngle), Math.round(endAngle), range.currentRadius, startWidth, endWidth));\n setStyles(element, (range.color ? range.color : range.rangeColor), {\n color: (range.color ? range.color : range.rangeColor),\n width: 0\n });\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @member of Circular-Gauge\n */\n CircularGauge.prototype.destroy = function () {\n this.unWireEvents();\n this.removeSvg();\n _super.prototype.destroy.call(this);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n CircularGauge.prototype.requiredModules = function () {\n var modules = [];\n var annotationEnable = false;\n var axes = this.axes;\n axes.map(function (axis) {\n axis.annotations.map(function (annotation) {\n annotationEnable = annotationEnable || annotation.content !== null;\n });\n });\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this, GaugeTooltip]\n });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n CircularGauge.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n CircularGauge.prototype.onPropertyChanged = function (newProp, oldProp) {\n // property method calculated\n var renderer = false;\n var refreshBounds = false;\n var refreshWithoutAnimation = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n case 'width':\n case 'centerX':\n case 'centerY':\n case 'margin':\n this.createSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = (newProp.title === '' || oldProp.title === '');\n renderer = !(newProp.title === '' || oldProp.title === '');\n break;\n case 'titleStyle':\n if (newProp.titleStyle && newProp.titleStyle.size) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'axes':\n refreshWithoutAnimation = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderElements();\n }\n if (refreshBounds) {\n this.removeSvg();\n this.calculateBounds();\n this.renderElements();\n }\n if (refreshWithoutAnimation && !renderer && !refreshBounds) {\n this.removeSvg();\n this.calculateBounds();\n this.renderElements(false);\n }\n };\n /**\n * Get component name for circular gauge\n * @private\n */\n CircularGauge.prototype.getModuleName = function () {\n return 'circulargauge';\n };\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"height\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], CircularGauge.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], CircularGauge.prototype, \"background\", void 0);\n __decorate([\n Property('')\n ], CircularGauge.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '15px', color: null }, Font)\n ], CircularGauge.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Margin)\n ], CircularGauge.prototype, \"margin\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], CircularGauge.prototype, \"axes\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], CircularGauge.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], CircularGauge.prototype, \"enablePointerDrag\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"centerX\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"centerY\", void 0);\n __decorate([\n Property('Material')\n ], CircularGauge.prototype, \"theme\", void 0);\n __decorate([\n Property(false)\n ], CircularGauge.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], CircularGauge.prototype, \"tabIndex\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragMove\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragEnd\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseMove\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseLeave\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseDown\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseUp\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"resized\", void 0);\n CircularGauge = __decorate([\n NotifyPropertyChanges\n ], CircularGauge);\n return CircularGauge;\n}(Component));\nexport { CircularGauge };\n","import * as index from '@syncfusion/ej2-circulargauge';\nindex.CircularGauge.Inject( index.GaugeTooltip,index.Annotations);\nexport * from '@syncfusion/ej2-circulargauge';\n","/**\n * Size defines and processes the size(width/height) of the objects\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n Size.prototype.isEmpty = function () {\n return this.height === 0 && this.width === 0;\n };\n // public static get empty(): Size {\n // return new Size();\n // }\n // public get isEmpty(): boolean {\n // return this.equals(Size.empty);\n // }\n // public equals(size2: Size): boolean {\n // return this.width === size2.width && this.height === size2.height;\n // }\n // public union(size: Size): void {\n // size.width = Math.max(size.width, this.width);\n // size.height = Math.max(size.height, this.height);\n // }\n Size.prototype.clone = function () {\n return new Size(this.width, this.height);\n };\n return Size;\n}());\nexport { Size };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines and processes coordinates\n */\nvar Point = /** @class */ (function (_super) {\n __extends(Point, _super);\n function Point() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Point.equals = function (point1, point2) {\n if (point1 === point2) {\n return true;\n }\n if (!point1 || !point2) {\n return false;\n }\n return !point1 || !point2 || point1.x === point2.x && point1.y === point2.y;\n };\n /**\n * check whether the points are given\n */\n Point.isEmptyPoint = function (point) {\n if (point.x && point.y) {\n return false;\n }\n return true;\n };\n // public add(point1: PointModel, point2: PointModel): PointModel {\n // return { x: point1.x + point2.x, y: point1.y + point2.y };\n // }\n // public subtract(point1: PointModel, point2: PointModel): PointModel {\n // return { x: point1.x - point2.x, y: point1.y - point2.y };\n // }\n // public multiply(point1: PointModel, point2: PointModel): PointModel {\n // return {\n // x: point1.x * point2.x, y: point1.y * point2.y\n // };\n // }\n // public crossProduct(point1: PointModel, point2: PointModel): PointModel {\n // return {\n // x: point1.x * point2.y, y: point2.x * point1.y\n // };\n // }\n // public offset(offsetX: number, offsetY: number): void {\n // this.x += offsetX;\n // this.y += offsetY;\n // }\n // public rotate(angle: number): PointModel {\n // let c: number = Math.cos(angle);\n // let s: number = Math.sin(angle);\n // return {\n // x: c * this.x - s * this.y, y: s * this.x + c * this.y\n // };\n // }\n // public distance(point2: PointModel): number {\n // return Math.sqrt(Math.pow(this.x - point2.x, 2) + Math.pow(this.y - point2.y, 2));\n // }\n Point.transform = function (point, angle, length) {\n var pt = { x: 0, y: 0 };\n pt.x = Math.round((point.x + length * Math.cos(angle * Math.PI / 180)) * 100) / 100;\n pt.y = Math.round((point.y + length * Math.sin(angle * Math.PI / 180)) * 100) / 100;\n return pt;\n };\n Point.findLength = function (s, e) {\n var length = Math.sqrt(Math.pow((s.x - e.x), 2) + Math.pow((s.y - e.y), 2));\n return length;\n };\n Point.findAngle = function (point1, point2) {\n var angle = Math.atan2(point2.y - point1.y, point2.x - point1.x);\n angle = (180 * angle / Math.PI);\n angle %= 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n };\n Point.distancePoints = function (pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n };\n Point.getLengthFromListOfPoints = function (points) {\n var length = 0;\n for (var j = 0; j < points.length - 1; j++) {\n length += this.distancePoints(points[j], points[j + 1]);\n }\n return length;\n };\n Point.adjustPoint = function (source, target, isStart, length) {\n var pt = isStart ? { x: source.x, y: source.y } : { x: target.x, y: target.y };\n var angle;\n if (source.x === target.x) {\n if (source.y < target.y && isStart || source.y > target.y && !isStart) {\n pt.y += length;\n }\n else {\n pt.y -= length;\n }\n }\n else if (source.y === target.y) {\n if (source.x < target.x && isStart || source.x > target.x && !isStart) {\n pt.x += length;\n }\n else {\n pt.x -= length;\n }\n }\n else {\n if (isStart) {\n angle = this.findAngle(source, target);\n pt = this.transform(source, angle, length);\n }\n else {\n angle = this.findAngle(target, source);\n pt = this.transform(target, angle, length);\n }\n }\n return pt;\n };\n Point.direction = function (pt1, pt2) {\n if (Math.abs(pt2.x - pt1.x) > Math.abs(pt2.y - pt1.y)) {\n return pt1.x < pt2.x ? 'Right' : 'Left';\n }\n else {\n return pt1.y < pt2.y ? 'Bottom' : 'Top';\n }\n };\n __decorate([\n Property(0)\n ], Point.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Point.prototype, \"y\", void 0);\n return Point;\n}(ChildProperty));\nexport { Point };\n","/**\n * Rect defines and processes rectangular regions\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n /**\n * Sets the x-coordinate of the starting point of a rectangular region\n * @default 0\n */\n this.x = Number.MAX_VALUE;\n /**\n * Sets the y-coordinate of the starting point of a rectangular region\n * @default 0\n */\n this.y = Number.MAX_VALUE;\n /**\n * Sets the width of a rectangular region\n * @default 0\n */\n this.width = 0;\n /**\n * Sets the height of a rectangular region\n * @default 0\n */\n this.height = 0;\n if (x === undefined || y === undefined) {\n x = y = Number.MAX_VALUE;\n width = height = 0;\n }\n else {\n if (width === undefined) {\n width = 0;\n }\n if (height === undefined) {\n height = 0;\n }\n }\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n Object.defineProperty(Rect.prototype, \"left\", {\n get: function () {\n return this.x;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"right\", {\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"top\", {\n get: function () {\n return this.y;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottom\", {\n get: function () {\n return this.y + this.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"topLeft\", {\n get: function () {\n return { x: this.left, y: this.top };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"topRight\", {\n get: function () {\n return { x: this.right, y: this.top };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottomLeft\", {\n get: function () {\n return { x: this.left, y: this.bottom };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottomRight\", {\n get: function () {\n return { x: this.right, y: this.bottom };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"middleLeft\", {\n get: function () {\n return { x: this.left, y: this.y + this.height / 2 };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"middleRight\", {\n get: function () {\n return { x: this.right, y: this.y + this.height / 2 };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"topCenter\", {\n get: function () {\n return { x: this.x + this.width / 2, y: this.top };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottomCenter\", {\n get: function () {\n return { x: this.x + this.width / 2, y: this.bottom };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"center\", {\n get: function () {\n return { x: this.x + this.width / 2, y: this.y + this.height / 2 };\n },\n enumerable: true,\n configurable: true\n });\n Rect.prototype.equals = function (rect1, rect2) {\n return rect1.x === rect2.x && rect1.y === rect2.y && rect1.width === rect2.width && rect1.height === rect2.height;\n };\n Rect.prototype.uniteRect = function (rect) {\n var right = Math.max(Number.NaN === this.right || this.x === Number.MAX_VALUE ? rect.right : this.right, rect.right);\n var bottom = Math.max(Number.NaN === this.bottom || this.y === Number.MAX_VALUE ? rect.bottom : this.bottom, rect.bottom);\n this.x = Math.min(this.left, rect.left);\n this.y = Math.min(this.top, rect.top);\n this.width = right - this.x;\n this.height = bottom - this.y;\n return this;\n };\n Rect.prototype.unitePoint = function (point) {\n if (this.x === Number.MAX_VALUE) {\n this.x = point.x;\n this.y = point.y;\n return;\n }\n var x = Math.min(this.left, point.x);\n var y = Math.min(this.top, point.y);\n var right = Math.max(this.right, point.x);\n var bottom = Math.max(this.bottom, point.y);\n this.x = x;\n this.y = y;\n this.width = right - this.x;\n this.height = bottom - this.y;\n };\n // public intersection(rect: Rect): Rect {\n // if (this.intersects(rect)) {\n // let left: number = Math.max(this.left, rect.left);\n // let top: number = Math.max(this.top, rect.top);\n // let right: number = Math.min(this.right, rect.right);\n // let bottom: number = Math.min(this.bottom, rect.bottom);\n // return new Rect(left, top, right - left, bottom - top);\n // }\n // return Rect.empty;\n // }\n Rect.prototype.Inflate = function (padding) {\n this.x -= padding;\n this.y -= padding;\n this.width += padding * 2;\n this.height += padding * 2;\n return this;\n };\n //public Inflate(size: Size): Rect {\n // this.x -= size.Width;\n // this.y -= size.Height;\n // this.width += size.Width * 2;\n // this.height += size.Height * 2;\n // return this;\n //}\n // public inflate(width: number, height: number): void {\n // this.x -= width;\n // this.y -= height;\n // this.width += width * 2;\n // this.height += height * 2;\n // }\n Rect.prototype.intersects = function (rect) {\n if (this.right < rect.left || this.left > rect.right || this.top > rect.bottom || this.bottom < rect.top) {\n return false;\n }\n return true;\n };\n Rect.prototype.containsRect = function (rect) {\n return this.left <= rect.left && this.right >= rect.right && this.top <= rect.top && this.bottom >= rect.bottom;\n };\n Rect.prototype.containsPoint = function (point, padding) {\n if (padding === void 0) { padding = 0; }\n return this.left - padding <= point.x && this.right + padding >= point.x\n && this.top - padding <= point.y && this.bottom + padding >= point.y;\n };\n // public toPoints(): PointModel[] {\n // let points: PointModel[] = [];\n // points.push(this.topLeft);\n // points.push(this.topRight);\n // points.push(this.bottomLeft);\n // points.push(this.bottomRight);\n // return points;\n // }\n Rect.toBounds = function (points) {\n var rect = new Rect();\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var pt = points_1[_i];\n rect.unitePoint(pt);\n }\n return rect;\n };\n Rect.empty = new Rect(Number.MAX_VALUE, Number.MIN_VALUE, 0, 0);\n return Rect;\n}());\nexport { Rect };\n","/**\n * enum module defines the public enumerations\n */\n/**\n * Constraints to define when a port has to be visible\n * Visible - Always shows the port\n * Hidden - Always hides the port\n * Hover - Shows the port when the mouse hovers over a node\n * Connect - Shows the port when a connection end point is dragged over a node\n * Default - By default the ports will be visible when a node is hovered and being tried to connect\n * @aspNumberEnum\n */\nexport var PortVisibility;\n(function (PortVisibility) {\n /** Always shows the port */\n PortVisibility[PortVisibility[\"Visible\"] = 1] = \"Visible\";\n /** Always hides the port */\n PortVisibility[PortVisibility[\"Hidden\"] = 2] = \"Hidden\";\n /** Shows the port when the mouse hovers over a node */\n PortVisibility[PortVisibility[\"Hover\"] = 4] = \"Hover\";\n /** Shows the port when a connection end point is dragged over a node */\n PortVisibility[PortVisibility[\"Connect\"] = 8] = \"Connect\";\n})(PortVisibility || (PortVisibility = {}));\n/**\n * Defines the constraints to Enables / Disables some features of Snapping.\n * None - Snapping does not happen\n * ShowHorizontalLines - Displays only the horizontal gridlines in diagram.\n * ShowVerticalLines - Displays only the Vertical gridlines in diagram.\n * ShowLines - Display both Horizontal and Vertical gridlines.\n * SnapToHorizontalLines - Enables the object to snap only with horizontal gridlines.\n * SnapToVerticalLines - Enables the object to snap only with horizontal gridlines.\n * SnapToLines - Enables the object to snap with both horizontal and Vertical gridlines.\n * snapToObject - Enables the object to snap with the other objects in the diagram.\n * @IgnoreSingular\n * @aspNumberEnum\n */\nexport var SnapConstraints;\n(function (SnapConstraints) {\n /** None - Snapping does not happen */\n SnapConstraints[SnapConstraints[\"None\"] = 0] = \"None\";\n /** ShowHorizontalLines - Displays only the horizontal gridlines in diagram. */\n SnapConstraints[SnapConstraints[\"ShowHorizontalLines\"] = 1] = \"ShowHorizontalLines\";\n /** ShowVerticalLines - Displays only the Vertical gridlines in diagram */\n SnapConstraints[SnapConstraints[\"ShowVerticalLines\"] = 2] = \"ShowVerticalLines\";\n /** ShowLines - Display both Horizontal and Vertical gridlines */\n SnapConstraints[SnapConstraints[\"ShowLines\"] = 3] = \"ShowLines\";\n /** SnapToHorizontalLines - Enables the object to snap only with horizontal gridlines */\n SnapConstraints[SnapConstraints[\"SnapToHorizontalLines\"] = 4] = \"SnapToHorizontalLines\";\n /** SnapToVerticalLines - Enables the object to snap only with horizontal gridlines */\n SnapConstraints[SnapConstraints[\"SnapToVerticalLines\"] = 8] = \"SnapToVerticalLines\";\n /** SnapToLines - Enables the object to snap with both horizontal and Vertical gridlines */\n SnapConstraints[SnapConstraints[\"SnapToLines\"] = 12] = \"SnapToLines\";\n /** SnapToObject - Enables the object to snap with the other objects in the diagram. */\n SnapConstraints[SnapConstraints[\"SnapToObject\"] = 16] = \"SnapToObject\";\n /** Shows gridlines and enables snapping */\n SnapConstraints[SnapConstraints[\"All\"] = 31] = \"All\";\n})(SnapConstraints || (SnapConstraints = {}));\n/**\n * Defines the visibility of the selector handles\n * None - Hides all the selector elements\n * ConnectorSourceThumb - Shows/hides the source thumb of the connector\n * ConnectorTargetThumb - Shows/hides the target thumb of the connector\n * ResizeSouthEast - Shows/hides the bottom right resize handle of the selector\n * ResizeSouthWest - Shows/hides the bottom left resize handle of the selector\n * ResizeNorthEast - Shows/hides the top right resize handle of the selector\n * ResizeNorthWest - Shows/hides the top left resize handle of the selector\n * ResizeEast - Shows/hides the middle right resize handle of the selector\n * ResizeWest - Shows/hides the middle left resize handle of the selector\n * ResizeSouth - Shows/hides the bottom center resize handle of the selector\n * ResizeNorth - Shows/hides the top center resize handle of the selector\n * Rotate - Shows/hides the rotate handle of the selector\n * UserHandles - Shows/hides the user handles of the selector\n * Resize - Shows/hides all resize handles of the selector\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var SelectorConstraints;\n(function (SelectorConstraints) {\n /** Hides all the selector elements */\n SelectorConstraints[SelectorConstraints[\"None\"] = 1] = \"None\";\n /** Shows/hides the source thumb of the connector */\n SelectorConstraints[SelectorConstraints[\"ConnectorSourceThumb\"] = 2] = \"ConnectorSourceThumb\";\n /** Shows/hides the target thumb of the connector */\n SelectorConstraints[SelectorConstraints[\"ConnectorTargetThumb\"] = 4] = \"ConnectorTargetThumb\";\n /** Shows/hides the bottom right resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeSouthEast\"] = 8] = \"ResizeSouthEast\";\n /** Shows/hides the bottom left resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeSouthWest\"] = 16] = \"ResizeSouthWest\";\n /** Shows/hides the top right resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeNorthEast\"] = 32] = \"ResizeNorthEast\";\n /** Shows/hides the top left resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeNorthWest\"] = 64] = \"ResizeNorthWest\";\n /** Shows/hides the middle right resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeEast\"] = 128] = \"ResizeEast\";\n /** Shows/hides the middle left resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeWest\"] = 256] = \"ResizeWest\";\n /** Shows/hides the bottom center resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeSouth\"] = 512] = \"ResizeSouth\";\n /** Shows/hides the top center resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeNorth\"] = 1024] = \"ResizeNorth\";\n /** Shows/hides the rotate handle of the selector */\n SelectorConstraints[SelectorConstraints[\"Rotate\"] = 2048] = \"Rotate\";\n /** Shows/hides the user handles of the selector */\n SelectorConstraints[SelectorConstraints[\"UserHandle\"] = 4096] = \"UserHandle\";\n /** Shows/hides the default tooltip of nodes and connectors */\n SelectorConstraints[SelectorConstraints[\"ToolTip\"] = 8192] = \"ToolTip\";\n /** Shows/hides all resize handles of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeAll\"] = 2046] = \"ResizeAll\";\n /** Shows all handles of the selector */\n SelectorConstraints[SelectorConstraints[\"All\"] = 16382] = \"All\";\n})(SelectorConstraints || (SelectorConstraints = {}));\n/**\n * Defines the constraints to enable/disable certain features of connector.\n * * None - Interaction of the connectors cannot be done.\n * * Select - Selects the connector.\n * * Delete - Delete the connector.\n * * Drag - Drag the connector.\n * * DragSourceEnd - Drag the source end of the connector.\n * * DragTargetEnd - Drag the target end of the connector.\n * * DragSegmentThump - Drag the segment thumb of the connector.\n * * AllowDrop - Allow to drop a node.\n * * Bridging - Creates bridge on intersection of two connectors.\n * * BridgeObstacle -\n * * InheritBridging - Creates bridge on intersection of two connectors.\n * * PointerEvents - Sets the pointer events.\n * * Tooltip - Displays a tooltip for the connectors.\n * * InheritToolTip - Displays a tooltip for the connectors.\n * * Interaction - Features of the connector used for interaction.\n * * ReadOnly - Enables ReadOnly\n * * Default - Default features of the connector.\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var ConnectorConstraints;\n(function (ConnectorConstraints) {\n /** Disable all connector Constraints. */\n ConnectorConstraints[ConnectorConstraints[\"None\"] = 1] = \"None\";\n /** Enables connector to be selected. */\n ConnectorConstraints[ConnectorConstraints[\"Select\"] = 2] = \"Select\";\n /** Enables connector to be Deleted. */\n ConnectorConstraints[ConnectorConstraints[\"Delete\"] = 4] = \"Delete\";\n /** Enables connector to be Dragged. */\n ConnectorConstraints[ConnectorConstraints[\"Drag\"] = 8] = \"Drag\";\n /** Enables connectors source end to be selected. */\n ConnectorConstraints[ConnectorConstraints[\"DragSourceEnd\"] = 16] = \"DragSourceEnd\";\n /** Enables connectors target end to be selected. */\n ConnectorConstraints[ConnectorConstraints[\"DragTargetEnd\"] = 32] = \"DragTargetEnd\";\n /** Enables control point and end point of every segment in a connector for editing. */\n ConnectorConstraints[ConnectorConstraints[\"DragSegmentThumb\"] = 64] = \"DragSegmentThumb\";\n /** Enables AllowDrop constraints to the connector. */\n ConnectorConstraints[ConnectorConstraints[\"AllowDrop\"] = 128] = \"AllowDrop\";\n /** Enables bridging to the connector. */\n ConnectorConstraints[ConnectorConstraints[\"Bridging\"] = 256] = \"Bridging\";\n /** Enables or Disables Bridge Obstacles with overlapping of connectors. */\n ConnectorConstraints[ConnectorConstraints[\"BridgeObstacle\"] = 512] = \"BridgeObstacle\";\n /** Enables bridging to the connector. */\n ConnectorConstraints[ConnectorConstraints[\"InheritBridging\"] = 1024] = \"InheritBridging\";\n /** Used to set the pointer events. */\n ConnectorConstraints[ConnectorConstraints[\"PointerEvents\"] = 2048] = \"PointerEvents\";\n /** Enables or disables tool tip for the connectors */\n ConnectorConstraints[ConnectorConstraints[\"Tooltip\"] = 4096] = \"Tooltip\";\n /** Enables or disables tool tip for the connectors */\n ConnectorConstraints[ConnectorConstraints[\"InheritTooltip\"] = 8192] = \"InheritTooltip\";\n /** Enables Interaction. */\n ConnectorConstraints[ConnectorConstraints[\"Interaction\"] = 4218] = \"Interaction\";\n /** Enables ReadOnly */\n ConnectorConstraints[ConnectorConstraints[\"ReadOnly\"] = 16384] = \"ReadOnly\";\n /** Enables all constraints. */\n ConnectorConstraints[ConnectorConstraints[\"Default\"] = 11838] = \"Default\";\n})(ConnectorConstraints || (ConnectorConstraints = {}));\n/**\n * Enables/Disables the annotation constraints\n * ReadOnly - Enables/Disables the ReadOnly Constraints\n * InheritReadOnly - Enables/Disables the InheritReadOnly Constraints\n * Select -Enables/Disable select support for the annotation\n * Drag - Enables/Disable drag support for the annotation\n * Resize - Enables/Disable resize support for the annotation\n * Rotate - Enables/Disable rotate support for the annotation\n * Interaction - Enables annotation to inherit the interaction option\n * None - Disable all annotation constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var AnnotationConstraints;\n(function (AnnotationConstraints) {\n /** Enables/Disables the ReadOnly Constraints */\n AnnotationConstraints[AnnotationConstraints[\"ReadOnly\"] = 2] = \"ReadOnly\";\n /** Enables/Disables the InheritReadOnly Constraints */\n AnnotationConstraints[AnnotationConstraints[\"InheritReadOnly\"] = 4] = \"InheritReadOnly\";\n /** Enables/Disable select support for the annotation */\n AnnotationConstraints[AnnotationConstraints[\"Select\"] = 8] = \"Select\";\n /** Enables/Disable drag support for the annotation */\n AnnotationConstraints[AnnotationConstraints[\"Drag\"] = 16] = \"Drag\";\n /** Enables/Disable resize support for the annotation */\n AnnotationConstraints[AnnotationConstraints[\"Resize\"] = 32] = \"Resize\";\n /** Enables/Disable rotate support for the annotation */\n AnnotationConstraints[AnnotationConstraints[\"Rotate\"] = 64] = \"Rotate\";\n /** Enables annotation to inherit the interaction option */\n AnnotationConstraints[AnnotationConstraints[\"Interaction\"] = 120] = \"Interaction\";\n /** Disable all annotation Constraints */\n AnnotationConstraints[AnnotationConstraints[\"None\"] = 0] = \"None\";\n})(AnnotationConstraints || (AnnotationConstraints = {}));\n/**\n * Enables/Disables certain features of node\n * None - Disable all node Constraints\n * Select - Enables node to be selected\n * Drag - Enables node to be Dragged\n * Rotate - Enables node to be Rotate\n * Shadow - Enables node to display shadow\n * PointerEvents - Enables node to provide pointer option\n * Delete - Enables node to delete\n * InConnect - Enables node to provide in connect option\n * OutConnect - Enables node to provide out connect option\n * Individual - Enables node to provide individual resize option\n * Expandable - Enables node to provide Expandable option\n * AllowDrop - Enables node to provide allow to drop option\n * Inherit - Enables node to inherit the interaction option\n * ResizeNorthEast - Enable ResizeNorthEast of the node\n * ResizeEast - Enable ResizeEast of the node\n * ResizeSouthEast - Enable ResizeSouthEast of the node\n * ResizeSouth - Enable ResizeSouthWest of the node\n * ResizeSouthWest - Enable ResizeSouthWest of the node\n * ResizeSouth - Enable ResizeSouth of the node\n * ResizeSouthWest - Enable ResizeSouthWest of the node\n * ResizeWest - Enable ResizeWest of the node\n * ResizeNorth - Enable ResizeNorth of the node\n * Resize - Enables the Aspect ratio fo the node\n * AspectRatio - Enables the Aspect ratio fo the node\n * Tooltip - Enables or disables tool tip for the Nodes\n * InheritTooltip - Enables or disables tool tip for the Nodes\n * ReadOnly - Enables the ReadOnly support for Annotation\n * Default - Enables all constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var NodeConstraints;\n(function (NodeConstraints) {\n /** Disable all node Constraints. */\n NodeConstraints[NodeConstraints[\"None\"] = 0] = \"None\";\n /** Enables node to be selected. */\n NodeConstraints[NodeConstraints[\"Select\"] = 2] = \"Select\";\n /** Enables node to be Dragged. */\n NodeConstraints[NodeConstraints[\"Drag\"] = 4] = \"Drag\";\n /** Enables node to be Rotate. */\n NodeConstraints[NodeConstraints[\"Rotate\"] = 8] = \"Rotate\";\n /** Enables node to display shadow. */\n NodeConstraints[NodeConstraints[\"Shadow\"] = 16] = \"Shadow\";\n /** Enables node to provide pointer option */\n NodeConstraints[NodeConstraints[\"PointerEvents\"] = 32] = \"PointerEvents\";\n /** Enables node to delete */\n NodeConstraints[NodeConstraints[\"Delete\"] = 64] = \"Delete\";\n /** Enables node to provide in connect option */\n NodeConstraints[NodeConstraints[\"InConnect\"] = 128] = \"InConnect\";\n /** Enables node to provide out connect option */\n NodeConstraints[NodeConstraints[\"OutConnect\"] = 256] = \"OutConnect\";\n /** Enables node to provide individual resize option */\n NodeConstraints[NodeConstraints[\"Individual\"] = 512] = \"Individual\";\n /** Enables node to provide Expandable option */\n NodeConstraints[NodeConstraints[\"Expandable\"] = 1024] = \"Expandable\";\n /** Enables node to provide allow to drop option */\n NodeConstraints[NodeConstraints[\"AllowDrop\"] = 2048] = \"AllowDrop\";\n /** Enables node to inherit the interaction option */\n NodeConstraints[NodeConstraints[\"Inherit\"] = 78] = \"Inherit\";\n /** Enable ResizeNorthEast of the node */\n NodeConstraints[NodeConstraints[\"ResizeNorthEast\"] = 4096] = \"ResizeNorthEast\";\n /** Enable ResizeEast of the node */\n NodeConstraints[NodeConstraints[\"ResizeEast\"] = 8192] = \"ResizeEast\";\n /** Enable ResizeSouthEast of the node */\n NodeConstraints[NodeConstraints[\"ResizeSouthEast\"] = 16384] = \"ResizeSouthEast\";\n /** Enable ResizeSouth of the node */\n NodeConstraints[NodeConstraints[\"ResizeSouth\"] = 32768] = \"ResizeSouth\";\n /** Enable ResizeSouthWest of the node */\n NodeConstraints[NodeConstraints[\"ResizeSouthWest\"] = 65536] = \"ResizeSouthWest\";\n /** Enable ResizeWest of the node */\n NodeConstraints[NodeConstraints[\"ResizeWest\"] = 131072] = \"ResizeWest\";\n /** Enable ResizeNorthWest of the node */\n NodeConstraints[NodeConstraints[\"ResizeNorthWest\"] = 262144] = \"ResizeNorthWest\";\n /** Enable ResizeNorth of the node */\n NodeConstraints[NodeConstraints[\"ResizeNorth\"] = 524288] = \"ResizeNorth\";\n /** Enable Resize of the node */\n NodeConstraints[NodeConstraints[\"Resize\"] = 1044480] = \"Resize\";\n /** Enables the Aspect ratio fo the node */\n NodeConstraints[NodeConstraints[\"AspectRatio\"] = 1048576] = \"AspectRatio\";\n /** Enables or disables tool tip for the Nodes */\n NodeConstraints[NodeConstraints[\"Tooltip\"] = 2097152] = \"Tooltip\";\n /** Enables or disables tool tip for the Nodes */\n NodeConstraints[NodeConstraints[\"InheritTooltip\"] = 4194304] = \"InheritTooltip\";\n /** Enables the ReadOnly support for Annotation */\n NodeConstraints[NodeConstraints[\"ReadOnly\"] = 8388608] = \"ReadOnly\";\n /** Enables all constraints */\n NodeConstraints[NodeConstraints[\"Default\"] = 5240814] = \"Default\";\n})(NodeConstraints || (NodeConstraints = {}));\n/** Enables/Disables the handles of the selector\n * Rotate - Enable Rotate Thumb\n * ConnectorSource - Enable Connector source point\n * ConnectorTarget - Enable Connector target point\n * ResizeNorthEast - Enable ResizeNorthEast Resize\n * ResizeEast - Enable ResizeEast Resize\n * ResizeSouthEast - Enable ResizeSouthEast Resize\n * ResizeSouth - Enable ResizeSouth Resize\n * ResizeSouthWest - Enable ResizeSouthWest Resize\n * ResizeWest - Enable ResizeWest Resize\n * ResizeNorthWest - Enable ResizeNorthWest Resize\n * ResizeNorth - Enable ResizeNorth Resize\n * Default - Enables all constraints\n * @private\n */\nexport var ThumbsConstraints;\n(function (ThumbsConstraints) {\n /** Enable Rotate Thumb */\n ThumbsConstraints[ThumbsConstraints[\"Rotate\"] = 2] = \"Rotate\";\n /** Enable Connector source point */\n ThumbsConstraints[ThumbsConstraints[\"ConnectorSource\"] = 4] = \"ConnectorSource\";\n /** Enable Connector target point */\n ThumbsConstraints[ThumbsConstraints[\"ConnectorTarget\"] = 8] = \"ConnectorTarget\";\n /** Enable ResizeNorthEast Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeNorthEast\"] = 16] = \"ResizeNorthEast\";\n /** Enable ResizeEast Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeEast\"] = 32] = \"ResizeEast\";\n /** Enable ResizeSouthEast Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeSouthEast\"] = 64] = \"ResizeSouthEast\";\n /** Enable ResizeSouth Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeSouth\"] = 128] = \"ResizeSouth\";\n /** Enable ResizeSouthWest Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeSouthWest\"] = 256] = \"ResizeSouthWest\";\n /** Enable ResizeWest Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeWest\"] = 512] = \"ResizeWest\";\n /** Enable ResizeNorthWest Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeNorthWest\"] = 1024] = \"ResizeNorthWest\";\n /** Enable ResizeNorth Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeNorth\"] = 2048] = \"ResizeNorth\";\n /** Enables all constraints */\n ThumbsConstraints[ThumbsConstraints[\"Default\"] = 4094] = \"Default\";\n})(ThumbsConstraints || (ThumbsConstraints = {}));\n/**\n * Enables/Disables certain features of diagram\n * None - Disable DiagramConstraints constraints\n * Bridging - Enables/Disable Bridging support for connector\n * UndoRedo - Enables/Disable the Undo/Redo support\n * Tooltip - Enables/Disable Tooltip support\n * UserInteraction - Enables/Disable UserInteraction support for the diagram\n * ApiUpdate - Enables/Disable ApiUpdate support for the diagram\n * PageEditable - Enables/Disable PageEditable support for the diagram\n * Zoom - Enables/Disable Zoom support for the diagram\n * PanX - Enables/Disable PanX support for the diagram\n * PanY - Enables/Disable PanY support for the diagram\n * Pan - Enables/Disable Pan support the diagram\n * ZoomTextEdit - Enables/Disables zooming the text box while editing the text\n * Virtualization - Enables/Disable Virtualization support the diagram\n * Default - Enables/Disable all constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var DiagramConstraints;\n(function (DiagramConstraints) {\n /** Disable DiagramConstraints constraints */\n DiagramConstraints[DiagramConstraints[\"None\"] = 1] = \"None\";\n /** Enables/Disable Bridging support for connector */\n DiagramConstraints[DiagramConstraints[\"Bridging\"] = 2] = \"Bridging\";\n /** Enables/Disable the Undo/Redo support */\n DiagramConstraints[DiagramConstraints[\"UndoRedo\"] = 4] = \"UndoRedo\";\n /** Enables/Disable Tooltip support */\n DiagramConstraints[DiagramConstraints[\"Tooltip\"] = 8] = \"Tooltip\";\n /** Enables/Disable UserInteraction support for the diagram */\n DiagramConstraints[DiagramConstraints[\"UserInteraction\"] = 16] = \"UserInteraction\";\n /** Enables/Disable ApiUpdate support for the diagram */\n DiagramConstraints[DiagramConstraints[\"ApiUpdate\"] = 32] = \"ApiUpdate\";\n /** Enables/Disable PageEditable support for the diagram */\n DiagramConstraints[DiagramConstraints[\"PageEditable\"] = 48] = \"PageEditable\";\n /** Enables/Disable Zoom support for the diagram */\n DiagramConstraints[DiagramConstraints[\"Zoom\"] = 64] = \"Zoom\";\n /** Enables/Disable PanX support for the diagram */\n DiagramConstraints[DiagramConstraints[\"PanX\"] = 128] = \"PanX\";\n /** Enables/Disable PanY support for the diagram */\n DiagramConstraints[DiagramConstraints[\"PanY\"] = 256] = \"PanY\";\n /** Enables/Disable Pan support the diagram */\n DiagramConstraints[DiagramConstraints[\"Pan\"] = 384] = \"Pan\";\n /** Enables/Disables zooming the text box while editing the text */\n DiagramConstraints[DiagramConstraints[\"ZoomTextEdit\"] = 512] = \"ZoomTextEdit\";\n /** Enables/Disable Virtualization support the diagram */\n DiagramConstraints[DiagramConstraints[\"Virtualization\"] = 1024] = \"Virtualization\";\n /** Enables/Disable all constraints */\n DiagramConstraints[DiagramConstraints[\"Default\"] = 500] = \"Default\";\n})(DiagramConstraints || (DiagramConstraints = {}));\n/**\n * Activates the diagram tools\n * None - Enables/Disable single select support for the diagram\n * SingleSelect - Enables/Disable single select support for the diagram\n * MultipleSelect - Enables/Disable MultipleSelect select support for the diagram\n * ZoomPan - Enables/Disable ZoomPan support for the diagram\n * DrawOnce - Enables/Disable continuousDraw support for the diagram\n * ContinuousDraw - Enables/Disable continuousDraw support for the diagram\n * Default - Enables/Disable all constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var DiagramTools;\n(function (DiagramTools) {\n /** Disable all constraints */\n DiagramTools[DiagramTools[\"None\"] = 0] = \"None\";\n /** Enables/Disable single select support for the diagram */\n DiagramTools[DiagramTools[\"SingleSelect\"] = 1] = \"SingleSelect\";\n /** Enables/Disable MultipleSelect select support for the diagram */\n DiagramTools[DiagramTools[\"MultipleSelect\"] = 2] = \"MultipleSelect\";\n /** Enables/Disable ZoomPan support for the diagram */\n DiagramTools[DiagramTools[\"ZoomPan\"] = 4] = \"ZoomPan\";\n /** Enables/Disable DrawOnce support for the diagram */\n DiagramTools[DiagramTools[\"DrawOnce\"] = 8] = \"DrawOnce\";\n /** Enables/Disable continuousDraw support for the diagram */\n DiagramTools[DiagramTools[\"ContinuousDraw\"] = 16] = \"ContinuousDraw\";\n /** Enables/Disable all constraints */\n DiagramTools[DiagramTools[\"Default\"] = 3] = \"Default\";\n})(DiagramTools || (DiagramTools = {}));\n/**\n * Defines the container/canvas transform\n * Self - Sets the transform type as Self\n * Parent - Sets the transform type as Parent\n */\nexport var Transform;\n(function (Transform) {\n /** Self - Sets the transform type as Self */\n Transform[Transform[\"Self\"] = 1] = \"Self\";\n /** Parent - Sets the transform type as Parent */\n Transform[Transform[\"Parent\"] = 2] = \"Parent\";\n})(Transform || (Transform = {}));\n/**\n * Defines the rendering mode for diagram\n * Canvas - Sets the rendering mode type as Canvas\n * Svg - Sets the rendering mode type as Svg\n */\nexport var RenderMode;\n(function (RenderMode) {\n /** Canvas - Sets the rendering mode type as Canvas */\n RenderMode[RenderMode[\"Canvas\"] = 0] = \"Canvas\";\n /** Svg - Sets the rendering mode type as Svg */\n RenderMode[RenderMode[\"Svg\"] = 1] = \"Svg\";\n})(RenderMode || (RenderMode = {}));\n/**\n * Sets a combination of key modifiers, on recognition of which the command will be executed.They are\n * * None - no modifiers are pressed\n * * Control - ctrl key\n * * Meta - meta key im mac\n * * Alt - alt key\n * * Shift - shift key\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var KeyModifiers;\n(function (KeyModifiers) {\n /** No modifiers are pressed */\n KeyModifiers[KeyModifiers[\"None\"] = 0] = \"None\";\n /** The CTRL key */\n KeyModifiers[KeyModifiers[\"Control\"] = 1] = \"Control\";\n /** The Meta key pressed in Mac */\n KeyModifiers[KeyModifiers[\"Meta\"] = 1] = \"Meta\";\n /** The ALT key */\n KeyModifiers[KeyModifiers[\"Alt\"] = 2] = \"Alt\";\n /** The Shift key */\n KeyModifiers[KeyModifiers[\"Shift\"] = 4] = \"Shift\";\n})(KeyModifiers || (KeyModifiers = {}));\n/**\n * Sets the key value, on recognition of which the command will be executed. They are\n * * none - no key\n * * Number0 = The 0 key\n * * Number1 = The 1 key\n * * Number2 = The 2 key\n * * Number3 = The 3 key\n * * Number4 = The 4 key\n * * Number5 = The 5 key\n * * Number6 = The 6 key\n * * Number7 = The 7 key\n * * Number8 = The 8 key\n * * Number9 = The 9 key\n * * Number0 = The 0 key\n * * BackSpace = The BackSpace key\n * * F1 = The f1 key\n * * F2 = The f2 key\n * * F3 = The f3 key\n * * F4 = The f4 key\n * * F5 = The f5 key\n * * F6 = The f6 key\n * * F7 = The f7 key\n * * F8 = The f8 key\n * * F9 = The f9 key\n * * F10 = The f10 key\n * * F11 = The f11 key\n * * F12 = The f12 key\n * * A = The a key\n * * B = The b key\n * * C = The c key\n * * D = The d key\n * * E = The e key\n * * F = The f key\n * * G = The g key\n * * H = The h key\n * * I = The i key\n * * J = The j key\n * * K = The k key\n * * L = The l key\n * * M = The m key\n * * N = The n key\n * * O = The o key\n * * P = The p key\n * * Q = The q key\n * * R = The r key\n * * S = The s key\n * * T = The t key\n * * U = The u key\n * * V = The v key\n * * W = The w key\n * * X = The x key\n * * Y = The y key\n * * Z = The z key\n * * Left = The left key\n * * Right = The right key\n * * Top = The top key\n * * Bottom = The bottom key\n * * Escape = The Escape key\n * * Tab = The tab key\n * * Delete = The delete key\n * * Enter = The enter key\n * * The Space key\n * * The page up key\n * * The page down key\n * * The end key\n * * The home key\n * * The Minus\n * * The Plus\n * * The Star\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var Keys;\n(function (Keys) {\n /** No key pressed */\n Keys[Keys[\"None\"] = null] = \"None\";\n /** The 0 key */\n Keys[Keys[\"Number0\"] = 0] = \"Number0\";\n /** The 1 key */\n Keys[Keys[\"Number1\"] = 1] = \"Number1\";\n /** The 2 key */\n Keys[Keys[\"Number2\"] = 2] = \"Number2\";\n /** The 3 key */\n Keys[Keys[\"Number3\"] = 3] = \"Number3\";\n /** The 4 key */\n Keys[Keys[\"Number4\"] = 4] = \"Number4\";\n /** The 5 key */\n Keys[Keys[\"Number5\"] = 5] = \"Number5\";\n /** The 6 key */\n Keys[Keys[\"Number6\"] = 6] = \"Number6\";\n /** The 7 key */\n Keys[Keys[\"Number7\"] = 7] = \"Number7\";\n /** The 8 key */\n Keys[Keys[\"Number8\"] = 8] = \"Number8\";\n /** The 9 key */\n Keys[Keys[\"Number9\"] = 9] = \"Number9\";\n /** The A key */\n Keys[Keys[\"A\"] = 65] = \"A\";\n /** The B key */\n Keys[Keys[\"B\"] = 66] = \"B\";\n /** The C key */\n Keys[Keys[\"C\"] = 67] = \"C\";\n /** The D key */\n Keys[Keys[\"D\"] = 68] = \"D\";\n /** The E key */\n Keys[Keys[\"E\"] = 69] = \"E\";\n /** The F key */\n Keys[Keys[\"F\"] = 70] = \"F\";\n /** The G key */\n Keys[Keys[\"G\"] = 71] = \"G\";\n /** The H key */\n Keys[Keys[\"H\"] = 72] = \"H\";\n /** The I key */\n Keys[Keys[\"I\"] = 73] = \"I\";\n /** The J key */\n Keys[Keys[\"J\"] = 74] = \"J\";\n /** The K key */\n Keys[Keys[\"K\"] = 75] = \"K\";\n /** The L key */\n Keys[Keys[\"L\"] = 76] = \"L\";\n /** The M key */\n Keys[Keys[\"M\"] = 77] = \"M\";\n /** The N key */\n Keys[Keys[\"N\"] = 78] = \"N\";\n /** The O key */\n Keys[Keys[\"O\"] = 79] = \"O\";\n /** The P key */\n Keys[Keys[\"P\"] = 80] = \"P\";\n /** The Q key */\n Keys[Keys[\"Q\"] = 81] = \"Q\";\n /** The R key */\n Keys[Keys[\"R\"] = 82] = \"R\";\n /** The S key */\n Keys[Keys[\"S\"] = 83] = \"S\";\n /** The T key */\n Keys[Keys[\"T\"] = 84] = \"T\";\n /** The U key */\n Keys[Keys[\"U\"] = 85] = \"U\";\n /** The V key */\n Keys[Keys[\"V\"] = 86] = \"V\";\n /** The W key */\n Keys[Keys[\"W\"] = 87] = \"W\";\n /** The X key */\n Keys[Keys[\"X\"] = 88] = \"X\";\n /** The Y key */\n Keys[Keys[\"Y\"] = 89] = \"Y\";\n /** The Z key */\n Keys[Keys[\"Z\"] = 90] = \"Z\";\n /** The left arrow key */\n Keys[Keys[\"Left\"] = 37] = \"Left\";\n /** The up arrow key */\n Keys[Keys[\"Up\"] = 38] = \"Up\";\n /** The right arrow key */\n Keys[Keys[\"Right\"] = 39] = \"Right\";\n /** The down arrow key */\n Keys[Keys[\"Down\"] = 40] = \"Down\";\n /** The Escape key */\n Keys[Keys[\"Escape\"] = 27] = \"Escape\";\n /** The Space key */\n Keys[Keys[\"Space\"] = 32] = \"Space\";\n /** The page up key */\n Keys[Keys[\"PageUp\"] = 33] = \"PageUp\";\n /** The Space key */\n Keys[Keys[\"PageDown\"] = 34] = \"PageDown\";\n /** The Space key */\n Keys[Keys[\"End\"] = 35] = \"End\";\n /** The Space key */\n Keys[Keys[\"Home\"] = 36] = \"Home\";\n /** The delete key */\n Keys[Keys[\"Delete\"] = 46] = \"Delete\";\n /** The tab key */\n Keys[Keys[\"Tab\"] = 9] = \"Tab\";\n /** The enter key */\n Keys[Keys[\"Enter\"] = 13] = \"Enter\";\n /** The BackSpace key */\n Keys[Keys[\"BackSpace\"] = 8] = \"BackSpace\";\n /** The F1 key */\n Keys[Keys[\"F1\"] = 112] = \"F1\";\n /** The F2 key */\n Keys[Keys[\"F2\"] = 113] = \"F2\";\n /** The F3 key */\n Keys[Keys[\"F3\"] = 114] = \"F3\";\n /** The F4 key */\n Keys[Keys[\"F4\"] = 115] = \"F4\";\n /** The F5 key */\n Keys[Keys[\"F5\"] = 116] = \"F5\";\n /** The F6 key */\n Keys[Keys[\"F6\"] = 117] = \"F6\";\n /** The F7 key */\n Keys[Keys[\"F7\"] = 118] = \"F7\";\n /** The F8 key */\n Keys[Keys[\"F8\"] = 119] = \"F8\";\n /** The F9 key */\n Keys[Keys[\"F9\"] = 120] = \"F9\";\n /** The F10 key */\n Keys[Keys[\"F10\"] = 121] = \"F10\";\n /** The F111 key */\n Keys[Keys[\"F11\"] = 122] = \"F11\";\n /** The F12 key */\n Keys[Keys[\"F12\"] = 123] = \"F12\";\n /** The Star */\n Keys[Keys[\"Star\"] = 56] = \"Star\";\n /** The Plus */\n Keys[Keys[\"Plus\"] = 187] = \"Plus\";\n /** The Minus */\n Keys[Keys[\"Minus\"] = 189] = \"Minus\";\n})(Keys || (Keys = {}));\n/**\n * Enables/Disables certain actions of diagram\n * * Render - Indicates the diagram is in render state.\n * * PublicMethod - Indicates the diagram public method is in action.\n * * ToolAction - Indicates the diagram Tool is in action.\n * * UndoRedo - Indicates the diagram undo/redo is in action.\n * * TextEdit - Indicates the text editing is in progress.\n * * Group - Indicates the group is in progress.\n * * Clear - Indicates diagram have clear all.\n */\nexport var DiagramAction;\n(function (DiagramAction) {\n /** Indicates the diagram is in render state.r */\n DiagramAction[DiagramAction[\"Render\"] = 2] = \"Render\";\n /** Indicates the diagram public method is in action. */\n DiagramAction[DiagramAction[\"PublicMethod\"] = 4] = \"PublicMethod\";\n /** Indicates the diagram Tool is in action. */\n DiagramAction[DiagramAction[\"ToolAction\"] = 8] = \"ToolAction\";\n /** Indicates the diagram undo/redo is in action. */\n DiagramAction[DiagramAction[\"UndoRedo\"] = 16] = \"UndoRedo\";\n /** Indicates the text editing is in progress. */\n DiagramAction[DiagramAction[\"TextEdit\"] = 32] = \"TextEdit\";\n /** Indicates the group is in progress. */\n DiagramAction[DiagramAction[\"Group\"] = 64] = \"Group\";\n /** Indicates diagram have clear all. */\n DiagramAction[DiagramAction[\"Clear\"] = 128] = \"Clear\";\n})(DiagramAction || (DiagramAction = {}));\nexport var RealAction;\n(function (RealAction) {\n RealAction[RealAction[\"None\"] = 0] = \"None\";\n RealAction[RealAction[\"PreventDrag\"] = 2] = \"PreventDrag\";\n RealAction[RealAction[\"PreventScale\"] = 4] = \"PreventScale\";\n RealAction[RealAction[\"PreventDataInit\"] = 8] = \"PreventDataInit\";\n /** Indicates when the diagram is scrolled horizontal using scroll bar */\n RealAction[RealAction[\"hScrollbarMoved\"] = 16] = \"hScrollbarMoved\";\n /** Indicates when the diagram is scrolled vertical using scroll bar */\n RealAction[RealAction[\"vScrollbarMoved\"] = 32] = \"vScrollbarMoved\";\n})(RealAction || (RealAction = {}));\n/** @private */\nexport var NoOfSegments;\n(function (NoOfSegments) {\n NoOfSegments[NoOfSegments[\"Zero\"] = 0] = \"Zero\";\n NoOfSegments[NoOfSegments[\"One\"] = 1] = \"One\";\n NoOfSegments[NoOfSegments[\"Two\"] = 2] = \"Two\";\n NoOfSegments[NoOfSegments[\"Three\"] = 3] = \"Three\";\n NoOfSegments[NoOfSegments[\"Four\"] = 4] = \"Four\";\n NoOfSegments[NoOfSegments[\"Five\"] = 5] = \"Five\";\n})(NoOfSegments || (NoOfSegments = {}));\n/**\n * events of diagram\n * @private\n */\nexport var DiagramEvent;\n(function (DiagramEvent) {\n DiagramEvent[DiagramEvent[\"collectionChange\"] = 0] = \"collectionChange\";\n DiagramEvent[DiagramEvent[\"rotateChange\"] = 1] = \"rotateChange\";\n DiagramEvent[DiagramEvent[\"positionChange\"] = 2] = \"positionChange\";\n DiagramEvent[DiagramEvent[\"propertyChange\"] = 3] = \"propertyChange\";\n DiagramEvent[DiagramEvent[\"selectionChange\"] = 4] = \"selectionChange\";\n DiagramEvent[DiagramEvent[\"sizeChange\"] = 5] = \"sizeChange\";\n DiagramEvent[DiagramEvent[\"drop\"] = 6] = \"drop\";\n DiagramEvent[DiagramEvent[\"sourcePointChange\"] = 7] = \"sourcePointChange\";\n DiagramEvent[DiagramEvent[\"targetPointChange\"] = 8] = \"targetPointChange\";\n DiagramEvent[DiagramEvent[\"connectionChange\"] = 9] = \"connectionChange\";\n DiagramEvent[DiagramEvent[\"animationComplete\"] = 10] = \"animationComplete\";\n DiagramEvent[DiagramEvent[\"click\"] = 11] = \"click\";\n DiagramEvent[DiagramEvent[\"doubleClick\"] = 12] = \"doubleClick\";\n DiagramEvent[DiagramEvent[\"scrollChange\"] = 13] = \"scrollChange\";\n DiagramEvent[DiagramEvent[\"dragEnter\"] = 14] = \"dragEnter\";\n DiagramEvent[DiagramEvent[\"dragLeave\"] = 15] = \"dragLeave\";\n DiagramEvent[DiagramEvent[\"dragOver\"] = 16] = \"dragOver\";\n DiagramEvent[DiagramEvent[\"textEdit\"] = 17] = \"textEdit\";\n DiagramEvent[DiagramEvent[\"paletteSelectionChange\"] = 18] = \"paletteSelectionChange\";\n DiagramEvent[DiagramEvent[\"historyChange\"] = 19] = \"historyChange\";\n DiagramEvent[DiagramEvent[\"mouseEnter\"] = 20] = \"mouseEnter\";\n DiagramEvent[DiagramEvent[\"mouseLeave\"] = 21] = \"mouseLeave\";\n DiagramEvent[DiagramEvent[\"mouseOver\"] = 22] = \"mouseOver\";\n})(DiagramEvent || (DiagramEvent = {}));\n/** Enables/Disables certain features of port connection\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var PortConstraints;\n(function (PortConstraints) {\n /** Disable all constraints */\n PortConstraints[PortConstraints[\"None\"] = 1] = \"None\";\n /** Enables connections with connector */\n PortConstraints[PortConstraints[\"Drag\"] = 2] = \"Drag\";\n /** Enables to create the connection when mouse hover on the port */\n PortConstraints[PortConstraints[\"Draw\"] = 4] = \"Draw\";\n})(PortConstraints || (PortConstraints = {}));\n/**\n * Defines the context menu click\n * contextMenuClick - Sets the context menu click as contextMenuClick\n */\nexport var contextMenuClick = \n/** contextMenuClick - Sets the context menu click as contextMenuClick */\n'contextMenuClick';\n/**\n * Defines the context menu open\n * contextMenuOpen - Sets the context menu open as contextMenuOpen\n */\nexport var contextMenuOpen = \n/** contextMenuOpen - Sets the context menu open as contextMenuOpen */\n'contextMenuOpen';\n","import { Transform } from '../../enum/enum';\nimport { Size } from '../../primitives/size';\nimport { Rect } from '../../primitives/rect';\nimport { getBounds, randomId } from '../../utility/base-util';\n/**\n * DiagramElement module defines the basic unit of diagram\n */\nvar DiagramElement = /** @class */ (function () {\n function DiagramElement() {\n /**\n * Sets/Gets the reference point of the element\n * ```html\n *
    \n * ```\n * ```typescript\n * let stackPanel: StackPanel = new StackPanel();\n * stackPanel.offsetX = 300; stackPanel.offsetY = 200;\n * stackPanel.width = 100; stackPanel.height = 100;\n * stackPanel.style.fill = 'red';\n * stackPanel.pivot = { x: 0.5, y: 0.5 };\n * let diagram: Diagram = new Diagram({\n * ...\n * basicElements: [stackPanel],\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\n this.pivot = { x: 0.5, y: 0.5 };\n /**\n * Sets or gets whether the content of the element needs to be measured\n */\n this.isDirt = true;\n /**\n * Sets or gets whether the content of the element to be visible\n */\n this.visible = true;\n /**\n * Sets/Gets the x-coordinate of the element\n */\n this.offsetX = 0;\n /**\n * Sets/Gets the y-coordinate of the element\n */\n this.offsetY = 0;\n /**\n * Set the corner of the element\n */\n this.cornerRadius = 0;\n /**\n * Sets/Gets the minimum height of the element\n */\n this.minHeight = undefined;\n /**\n * Sets/Gets the minimum width of the element\n */\n this.minWidth = undefined;\n /**\n * Sets/Gets the maximum width of the element\n */\n this.maxWidth = undefined;\n /**\n * Sets/Gets the maximum height of the element\n */\n this.maxHeight = undefined;\n /**\n * Sets/Gets the width of the element\n */\n this.width = undefined;\n /**\n * Sets/Gets the height of the element\n */\n this.height = undefined;\n /**\n * Sets/Gets the rotate angle of the element\n */\n this.rotateAngle = 0;\n /**\n * Sets/Gets the margin of the element\n */\n this.margin = { left: 0, right: 0, top: 0, bottom: 0 };\n /**\n * Sets/Gets how the element has to be horizontally arranged with respect to its immediate parent\n * * Stretch - Stretches the diagram element throughout its immediate parent\n * * Left - Aligns the diagram element at the left of its immediate parent\n * * Right - Aligns the diagram element at the right of its immediate parent\n * * Center - Aligns the diagram element at the center of its immediate parent\n * * Auto - Aligns the diagram element based on the characteristics of its immediate parent\n */\n this.horizontalAlignment = 'Auto';\n /**\n * Sets/Gets how the element has to be vertically arranged with respect to its immediate parent\n * * Stretch - Stretches the diagram element throughout its immediate parent\n * * Top - Aligns the diagram element at the top of its immediate parent\n * * Bottom - Aligns the diagram element at the bottom of its immediate parent\n * * Center - Aligns the diagram element at the center of its immediate parent\n * * Auto - Aligns the diagram element based on the characteristics of its immediate parent\n */\n this.verticalAlignment = 'Auto';\n /**\n * Sets whether the element has to be aligned with respect to a point/with respect to its immediate parent\n * * Point - Diagram elements will be aligned with respect to a point\n * * Object - Diagram elements will be aligned with respect to its immediate parent\n */\n this.relativeMode = 'Point';\n /**\n * Sets whether the element has to be transformed based on its parent or not\n * * Self - Sets the transform type as Self\n * * Parent - Sets the transform type as Parent\n */\n this.transform = Transform.Self | Transform.Parent;\n /**\n * Sets the style of the element\n */\n this.style = { fill: 'white', strokeColor: 'black', opacity: 1, strokeWidth: 1 };\n /**\n * Gets the minimum size that is required by the element\n */\n this.desiredSize = new Size();\n /**\n * Gets the size that the element will be rendered\n */\n this.actualSize = new Size();\n /**\n * Gets the rotate angle that is set to the immediate parent of the element\n */\n this.parentTransform = 0;\n this.isSvgRender = false;\n /**\n * Gets/Sets the boundary of the element\n */\n this.bounds = new Rect(0, 0, 0, 0);\n /**\n * Defines the appearance of the shadow of the element\n */\n this.shadow = null;\n /**\n * Defines the description of the diagram element\n */\n this.description = '';\n /**\n * Defines whether the element has to be measured or not\n */\n this.staticSize = false;\n this.isRectElement = false;\n //private variables\n this.position = undefined;\n this.unitMode = undefined;\n this.float = false;\n this.floatingBounds = undefined;\n this.id = randomId();\n }\n /**\n * Sets the offset of the element with respect to its parent\n * @param x\n * @param y\n * @param mode\n */\n DiagramElement.prototype.setOffsetWithRespectToBounds = function (x, y, mode) {\n this.unitMode = mode;\n this.position = { x: x, y: y };\n };\n /**\n * Gets the position of the element with respect to its parent\n * @param size\n */\n DiagramElement.prototype.getAbsolutePosition = function (size) {\n if (this.position !== undefined) {\n if (this.unitMode === 'Absolute') {\n return this.position;\n }\n else {\n return {\n x: this.position.x * size.width, y: this.position.y * size.height\n };\n }\n }\n return undefined;\n };\n Object.defineProperty(DiagramElement.prototype, \"outerBounds\", {\n get: function () {\n return this.floatingBounds || this.bounds;\n },\n set: function (bounds) {\n this.floatingBounds = bounds;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Measures the minimum space that the element requires\n * @param availableSize\n */\n DiagramElement.prototype.measure = function (availableSize) {\n var width = this.width !== undefined ? this.width : (availableSize.width || 0) - this.margin.left - this.margin.right;\n var height = this.height !== undefined ? this.height : (availableSize.height || 0) - this.margin.top - this.margin.bottom;\n this.desiredSize = new Size(width, height);\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the element\n * @param desiredSize\n */\n DiagramElement.prototype.arrange = function (desiredSize) {\n this.actualSize = desiredSize;\n this.updateBounds();\n return this.actualSize;\n };\n /**\n * Updates the bounds of the element\n */\n DiagramElement.prototype.updateBounds = function () {\n this.bounds = getBounds(this);\n };\n /**\n * Validates the size of the element with respect to its minimum and maximum size\n * @param desiredSize\n * @param availableSize\n */\n DiagramElement.prototype.validateDesiredSize = function (desiredSize, availableSize) {\n //Empty canvas\n if (this.isRectElement && !this.width && !this.minWidth && !this.maxWidth) {\n desiredSize.width = 50;\n }\n if (this.isRectElement && !this.height && !this.minHeight && !this.maxHeight) {\n desiredSize.height = 50;\n }\n if (desiredSize === undefined || this.width !== undefined &&\n this.height !== undefined) {\n desiredSize = desiredSize || new Size();\n desiredSize.width = this.width === undefined ? (availableSize.width || 0)\n - this.margin.left - this.margin.right : this.width;\n desiredSize.height = this.height === undefined ? (availableSize.height || 0)\n - this.margin.top - this.margin.bottom : this.height;\n }\n //Considering min values\n if (this.minWidth !== undefined) {\n desiredSize.width = Math.max(desiredSize.width, this.minWidth);\n }\n if (this.minHeight !== undefined) {\n desiredSize.height = Math.max(desiredSize.height, this.minHeight);\n }\n //Considering max values\n if (this.maxWidth !== undefined) {\n desiredSize.width = Math.min(desiredSize.width, this.maxWidth);\n }\n if (this.maxHeight !== undefined) {\n desiredSize.height = Math.min(desiredSize.height, this.maxHeight);\n }\n return desiredSize;\n };\n return DiagramElement;\n}());\nexport { DiagramElement };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, ComplexFactory } from '@syncfusion/ej2-base';\nvar getGradientType = function (obj) {\n switch (obj.type) {\n case 'Linear':\n return LinearGradient;\n case 'Radial':\n return RadialGradient;\n default:\n return LinearGradient;\n }\n};\n/**\n * Layout Model module defines the styles and types to arrange objects in containers\n */\nvar Thickness = /** @class */ (function () {\n function Thickness(left, right, top, bottom) {\n this.left = left;\n this.right = right;\n this.top = top;\n this.bottom = bottom;\n }\n return Thickness;\n}());\nexport { Thickness };\n/**\n * Defines the space to be left between an object and its immediate parent\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(0)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(0)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Defines the Shadow appearance of the objects\n * ```html\n *
    \n * ```\n * ```typescript\n * let nodes: NodeModel[] = [{ id: 'node2', width: 100, height: 100,\n * constraints: NodeConstraints.Default | NodeConstraints.Shadow,\n * shadow: { angle: 45, distance: 5, opacity: 0.7, color: 'grey'}\n * }];\n * let diagram: Diagram = new Diagram({\n * ...\n * nodes: nodes,\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar Shadow = /** @class */ (function (_super) {\n __extends(Shadow, _super);\n function Shadow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(45)\n ], Shadow.prototype, \"angle\", void 0);\n __decorate([\n Property(5)\n ], Shadow.prototype, \"distance\", void 0);\n __decorate([\n Property(0.7)\n ], Shadow.prototype, \"opacity\", void 0);\n __decorate([\n Property('lightgrey')\n ], Shadow.prototype, \"color\", void 0);\n return Shadow;\n}(ChildProperty));\nexport { Shadow };\n/**\n * Defines the different colors and the region of color transitions\n * ```html\n *
    \n * ```\n * ```typescript\n * let stopscol: StopModel[] = [];\n * let stops1: StopModel = { color: 'white', offset: 0, opacity: 0.7 };\n * stopscol.push(stops1);\n * let stops2: StopModel = { color: 'red', offset: 0, opacity: 0.3 };\n * stopscol.push(stops2);\n * let gradient: RadialGradientModel = { cx: 50, cy: 50, fx: 50, fy: 50, stops: stopscol, type: 'Radial' };\n * let nodes: NodeModel[] = [{ id: 'node1', width: 100, height: 100,\n * style: { gradient: gradient }\n * }];\n * let diagram: Diagram = new Diagram({\n * ...\n * nodes: nodes,\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar Stop = /** @class */ (function (_super) {\n __extends(Stop, _super);\n function Stop() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Stop.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Stop.prototype, \"offset\", void 0);\n __decorate([\n Property(1)\n ], Stop.prototype, \"opacity\", void 0);\n return Stop;\n}(ChildProperty));\nexport { Stop };\n/**\n * Paints the node with a smooth transition from one color to another color\n */\nvar Gradient = /** @class */ (function (_super) {\n __extends(Gradient, _super);\n function Gradient() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Stop)\n ], Gradient.prototype, \"stops\", void 0);\n __decorate([\n Property('None')\n ], Gradient.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Gradient.prototype, \"id\", void 0);\n return Gradient;\n}(ChildProperty));\nexport { Gradient };\n/**\n * Defines the linear gradient of styles\n * ```html\n *
    \n * ```\n * ```typescript\n * let stopscol: StopModel[] = [];\n * let stops1: StopModel = { color: 'white', offset: 0, opacity: 0.7 };\n * stopscol.push(stops1);\n * let stops2: StopModel = { color: 'red', offset: 0, opacity: 0.3 };\n * stopscol.push(stops2);\n * let gradient: LinearGradientModel = { x1: 0, x2: 50, y1: 0, y2: 50, stops: stopscol, type: 'Linear' };\n * let nodes: NodeModel[] = [{ id: 'node1', width: 100, height: 100,\n * style: { gradient: gradient }\n * }];\n * let diagram: Diagram = new Diagram({\n * ...\n * nodes: nodes,\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\n/**\n * Paints the node with linear color transitions\n */\nvar LinearGradient = /** @class */ (function (_super) {\n __extends(LinearGradient, _super);\n function LinearGradient() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"x1\", void 0);\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"x2\", void 0);\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"y1\", void 0);\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"y2\", void 0);\n return LinearGradient;\n}(Gradient));\nexport { LinearGradient };\n/**\n * A focal point defines the beginning of the gradient, and a circle defines the end point of the gradient\n * ```html\n *
    \n * ```\n * ```typescript\n * let stopscol: StopModel[] = [];\n * let stops1: StopModel = { color: 'white', offset: 0, opacity: 0.7 };\n * stopscol.push(stops1);\n * let stops2: StopModel = { color: 'red', offset: 0, opacity: 0.3 };\n * stopscol.push(stops2);\n * let gradient: RadialGradientModel = { cx: 50, cy: 50, fx: 50, fy: 50, stops: stopscol, type: 'Radial' };\n * let nodes: NodeModel[] = [{ id: 'node1', width: 100, height: 100,\n * style: { gradient: gradient }\n * }];\n * let diagram: Diagram = new Diagram({\n * ...\n * nodes: nodes,\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar RadialGradient = /** @class */ (function (_super) {\n __extends(RadialGradient, _super);\n function RadialGradient() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"cx\", void 0);\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"cy\", void 0);\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"fx\", void 0);\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"fy\", void 0);\n __decorate([\n Property(50)\n ], RadialGradient.prototype, \"r\", void 0);\n return RadialGradient;\n}(Gradient));\nexport { RadialGradient };\n/**\n * Defines the style of shape/path\n */\nvar ShapeStyle = /** @class */ (function (_super) {\n __extends(ShapeStyle, _super);\n function ShapeStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('white')\n ], ShapeStyle.prototype, \"fill\", void 0);\n __decorate([\n Property('black')\n ], ShapeStyle.prototype, \"strokeColor\", void 0);\n __decorate([\n Property('')\n ], ShapeStyle.prototype, \"strokeDashArray\", void 0);\n __decorate([\n Property(1)\n ], ShapeStyle.prototype, \"strokeWidth\", void 0);\n __decorate([\n Property(1)\n ], ShapeStyle.prototype, \"opacity\", void 0);\n __decorate([\n ComplexFactory(getGradientType)\n ], ShapeStyle.prototype, \"gradient\", void 0);\n return ShapeStyle;\n}(ChildProperty));\nexport { ShapeStyle };\n/**\n * Defines the stroke style of a path\n */\nvar StrokeStyle = /** @class */ (function (_super) {\n __extends(StrokeStyle, _super);\n function StrokeStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('transparent')\n ], StrokeStyle.prototype, \"fill\", void 0);\n return StrokeStyle;\n}(ShapeStyle));\nexport { StrokeStyle };\n/**\n * Defines the appearance of text\n * ```html\n *
    \n * ```\n * ```typescript\n * let style: TextStyleModel = { strokeColor: 'black', opacity: 0.5, whiteSpace:'CollapseSpace', strokeWidth: 1 };\n * let node: NodeModel;\n * node = {\n * ...\n * id: 'node', width: 100, height: 100, offsetX: 100, offsetY: 100,\n * annotations : [{\n * content: 'text', style: style }];\n * ...\n * };\n * let diagram: Diagram = new Diagram({\n * ...\n * nodes: [node],\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar TextStyle = /** @class */ (function (_super) {\n __extends(TextStyle, _super);\n function TextStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('black')\n ], TextStyle.prototype, \"color\", void 0);\n __decorate([\n Property('Arial')\n ], TextStyle.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(12)\n ], TextStyle.prototype, \"fontSize\", void 0);\n __decorate([\n Property(false)\n ], TextStyle.prototype, \"italic\", void 0);\n __decorate([\n Property(false)\n ], TextStyle.prototype, \"bold\", void 0);\n __decorate([\n Property('CollapseSpace')\n ], TextStyle.prototype, \"whiteSpace\", void 0);\n __decorate([\n Property('WrapWithOverflow')\n ], TextStyle.prototype, \"textWrapping\", void 0);\n __decorate([\n Property('Center')\n ], TextStyle.prototype, \"textAlign\", void 0);\n __decorate([\n Property('None')\n ], TextStyle.prototype, \"textDecoration\", void 0);\n __decorate([\n Property('Wrap')\n ], TextStyle.prototype, \"textOverflow\", void 0);\n return TextStyle;\n}(ShapeStyle));\nexport { TextStyle };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { DiagramElement } from '../elements/diagram-element';\nimport { Thickness } from '../appearance';\nimport { Size } from '../../primitives/size';\nimport { Rect } from '../../primitives/rect';\nimport { rotatePoint, getOffset } from '../../utility/base-util';\n/**\n * Container module is used to group related objects\n */\nvar Container = /** @class */ (function (_super) {\n __extends(Container, _super);\n function Container() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Gets/Sets the space between the container and its immediate children\n */\n _this.padding = new Thickness(0, 0, 0, 0);\n //private members \n _this.desiredBounds = undefined;\n /** @private */\n _this.measureChildren = true;\n _this.prevRotateAngle = 0;\n return _this;\n }\n /**\n * returns whether the container has child elements or not\n */\n Container.prototype.hasChildren = function () {\n if (this.children !== undefined && this.children.length > 0) {\n return true;\n }\n return false;\n };\n /**\n * Measures the minimum space that the container requires\n *\n * @param availableSize\n */\n Container.prototype.measure = function (availableSize) {\n // measure the element and find the desired size\n this.desiredBounds = undefined;\n var desired = undefined;\n var child;\n var center = { x: 0, y: 0 };\n var y;\n var x;\n var childBounds;\n if (this.hasChildren()) {\n //Measuring the children\n for (var i = 0; i < this.children.length; i++) {\n child = this.children[i];\n var force = child.horizontalAlignment === 'Stretch' || child.verticalAlignment === 'Stretch';\n if (this.measureChildren || force || (child instanceof Container && child.measureChildren !== undefined)) {\n child.measure(availableSize);\n }\n childBounds = this.GetChildrenBounds(child);\n if (child.horizontalAlignment !== 'Stretch' && child.verticalAlignment !== 'Stretch') {\n if (this.desiredBounds === undefined) {\n this.desiredBounds = childBounds;\n }\n else {\n this.desiredBounds.uniteRect(childBounds);\n }\n }\n }\n if (this.desiredBounds !== undefined && this.rotateAngle !== 0) {\n var offsetPt = {\n x: this.desiredBounds.x + this.desiredBounds.width * this.pivot.x,\n y: this.desiredBounds.y + this.desiredBounds.height * this.pivot.y\n };\n var newPoint = rotatePoint(this.rotateAngle, undefined, undefined, offsetPt);\n this.desiredBounds.x = newPoint.x - this.desiredBounds.width * this.pivot.x;\n this.desiredBounds.y = newPoint.y - this.desiredBounds.height * this.pivot.y;\n }\n if (this.desiredBounds) {\n desired = new Size(this.desiredBounds.width, this.desiredBounds.height);\n }\n }\n desired = this.validateDesiredSize(desired, availableSize);\n this.stretchChildren(desired);\n this.desiredSize = desired;\n return desired;\n };\n /**\n * Arranges the container and its children\n * @param desiredSize\n */\n Container.prototype.arrange = function (desiredSize) {\n var child;\n var bounds;\n var childBounds = this.desiredBounds;\n if (childBounds) {\n var x = this.offsetX;\n var y = this.offsetY;\n this.offsetX = childBounds.x + childBounds.width * this.pivot.x;\n this.offsetY = childBounds.y + childBounds.height * this.pivot.y;\n // container has rotateAngle\n if (this.hasChildren()) {\n //Measuring the children\n for (var i = 0; i < this.children.length; i++) {\n child = this.children[i];\n var arrange = false;\n if (child.horizontalAlignment === 'Stretch') {\n child.offsetX = this.offsetX;\n child.parentTransform = this.parentTransform + this.rotateAngle;\n arrange = true;\n }\n if (child.verticalAlignment === 'Stretch') {\n child.offsetY = this.offsetY;\n child.parentTransform = this.parentTransform + this.rotateAngle;\n arrange = true;\n }\n if (arrange || this.measureChildren || (child instanceof Container && child.measureChildren !== undefined)) {\n child.arrange(child.desiredSize);\n }\n }\n }\n }\n this.actualSize = desiredSize;\n this.updateBounds();\n this.prevRotateAngle = this.rotateAngle;\n return desiredSize;\n };\n //protected methods\n /**\n * Stretches the child elements based on the size of the container\n * @param size\n */\n Container.prototype.stretchChildren = function (size) {\n if (this.hasChildren()) {\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.horizontalAlignment === 'Stretch' || child.desiredSize.width === undefined) {\n child.desiredSize.width = size.width - child.margin.left - child.margin.right;\n }\n if (child.verticalAlignment === 'Stretch' || child.desiredSize.height === undefined) {\n child.desiredSize.height = size.height - child.margin.top - child.margin.bottom;\n }\n if (child instanceof Container) {\n child.stretchChildren(child.desiredSize);\n }\n }\n }\n };\n /**\n * Considers the padding of the element when measuring its desired size\n * @param size\n */\n Container.prototype.applyPadding = function (size) {\n size.width += this.padding.left + this.padding.right;\n size.height += this.padding.top + this.padding.bottom;\n };\n /**\n * Finds the offset of the child element with respect to the container\n * @param child\n * @param center\n */\n Container.prototype.findChildOffsetFromCenter = function (child, center) {\n var topLeft = { x: center.x - child.desiredSize.width / 2, y: center.y - child.desiredSize.height / 2 };\n var offset = getOffset(topLeft, child);\n //Rotate based on child rotate angle\n offset = rotatePoint(child.rotateAngle, center.x, center.y, offset);\n //Rotate based on parent pivot\n offset = rotatePoint(this.rotateAngle + this.parentTransform, this.offsetX, this.offsetY, offset);\n child.offsetX = offset.x;\n child.offsetY = offset.y;\n };\n //private methods - check its need\n Container.prototype.GetChildrenBounds = function (child) {\n var childBounds;\n var childSize;\n childSize = child.desiredSize.clone();\n var diffAngle = child.rotateAngle - this.rotateAngle;\n var refPoint = { x: child.offsetX, y: child.offsetY };\n var left = refPoint.x - childSize.width * child.pivot.x;\n var top = refPoint.y - childSize.height * child.pivot.y;\n var right = left + childSize.width;\n var bottom = top + childSize.height;\n var topLeft = { x: left, y: top };\n var topRight = { x: right, y: top };\n var bottomLeft = { x: left, y: bottom };\n var bottomRight = { x: right, y: bottom };\n topLeft = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, topLeft);\n topRight = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, topRight);\n bottomLeft = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, bottomLeft);\n bottomRight = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, bottomRight);\n if (this.rotateAngle !== 0) {\n topLeft = rotatePoint(-this.rotateAngle, undefined, undefined, topLeft);\n topRight = rotatePoint(-this.rotateAngle, undefined, undefined, topRight);\n bottomLeft = rotatePoint(-this.rotateAngle, undefined, undefined, bottomLeft);\n bottomRight = rotatePoint(-this.rotateAngle, undefined, undefined, bottomRight);\n }\n return Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n };\n return Container;\n}(DiagramElement));\nexport { Container };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Size } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { Rect } from '../../primitives/rect';\nimport { measurePath, findSegmentPoints, translatePoints } from './../../utility/dom-util';\nimport { processPathData, splitArrayCollection, transformPath, getPathString } from '../../utility/path-util';\n/**\n * PathElement takes care of how to align the path based on offsetX and offsetY\n */\nvar PathElement = /** @class */ (function (_super) {\n __extends(PathElement, _super);\n /**\n * set the id for each element\n */\n function PathElement() {\n var _this = _super.call(this) || this;\n /**\n * Gets or sets the geometry of the path element\n */\n _this.pathData = '';\n /**\n * Gets/Sets whether the path has to be transformed to fit the given x,y, width, height\n */\n _this.transformPath = true;\n /**\n * Gets/Sets the equivalent path, that will have the origin as 0,0\n */\n _this.absolutePath = '';\n //Private variables\n _this.absoluteBounds = new Rect();\n return _this;\n }\n Object.defineProperty(PathElement.prototype, \"data\", {\n get: function () {\n return this.pathData;\n },\n set: function (value) {\n if (this.pathData !== value) {\n this.pathData = value;\n this.isDirt = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n PathElement.prototype.getPoints = function () {\n var _this = this;\n if (!this.pointTimer) {\n this.pointTimer = setTimeout(function () {\n _this.points = null;\n _this.pointTimer = null;\n }, 200);\n }\n this.points = this.points || findSegmentPoints(this);\n return translatePoints(this, this.points);\n };\n /**\n * Measures the minimum space that is required to render the element\n * @param availableSize\n */\n PathElement.prototype.measure = function (availableSize) {\n //Performance issue - Avoiding measuring the connector path\n if (this.staticSize && this.width !== undefined && this.height !== undefined) {\n this.absoluteBounds = new Rect(this.offsetX - this.width * this.pivot.x, this.offsetY - this.height * this.pivot.y, this.width, this.height);\n }\n else if (this.isDirt && (this.transformPath || (this.width === undefined || this.height === undefined))) {\n //Measure the element only whent the path data is changed/ size is not specified\n this.absoluteBounds = measurePath(this.data ? this.data : '');\n }\n if (this.width === undefined) {\n this.desiredSize = new Size(this.absoluteBounds.width, this.height || this.absoluteBounds.height);\n }\n else if (this.height === undefined) {\n this.desiredSize = new Size(this.width || this.absoluteBounds.width, this.absoluteBounds.height);\n }\n else {\n this.desiredSize = new Size(this.width, this.height);\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the path element\n * @param desiredSize\n */\n PathElement.prototype.arrange = function (desiredSize) {\n if (this.isDirt || this.actualSize.width !== desiredSize.width || this.actualSize.height !== desiredSize.height) {\n this.isDirt = true;\n this.absolutePath = this.updatePath(this.data, this.absoluteBounds, desiredSize);\n if (!this.staticSize) {\n this.points = null;\n }\n }\n this.actualSize = this.desiredSize;\n this.updateBounds();\n this.isDirt = false;\n return this.actualSize;\n };\n /**\n * Translates the path to 0,0 and scales the path based on the actual size\n * @param pathData\n * @param bounds\n * @param actualSize\n */\n PathElement.prototype.updatePath = function (pathData, bounds, actualSize) {\n var isScale = false;\n var newPathString = '';\n var scaleX = -bounds.x;\n var scaleY = -bounds.y;\n var arrayCollection = [];\n if (actualSize.width !== bounds.width || actualSize.height !== bounds.height) {\n scaleX = actualSize.width / Number(bounds.width ? bounds.width : 1);\n scaleY = actualSize.height / Number(bounds.height ? bounds.height : 1);\n isScale = true;\n }\n arrayCollection = processPathData(pathData);\n arrayCollection = splitArrayCollection(arrayCollection);\n if ((isScale || this.isDirt) && this.transformPath) {\n newPathString = transformPath(arrayCollection, scaleX, scaleY, isScale, bounds.x, bounds.y, 0, 0);\n }\n else {\n newPathString = getPathString(arrayCollection);\n }\n isScale = false;\n return newPathString;\n };\n return PathElement;\n}(DiagramElement));\nexport { PathElement };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Size } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { measureNativeContent, getContent, measureNativeSvg } from './../../utility/dom-util';\n/**\n * NativeElement defines the basic native elements\n */\nvar DiagramNativeElement = /** @class */ (function (_super) {\n __extends(DiagramNativeElement, _super);\n /**\n * set the id for each element\n */\n function DiagramNativeElement(nodeId, diagramId) {\n var _this = _super.call(this) || this;\n _this.data = '';\n _this.nodeId = '';\n _this.diagramId = '';\n /**\n * sets scaling factor of the Native Element\n */\n _this.scale = 'Stretch';\n _this.diagramId = diagramId;\n _this.nodeId = nodeId;\n return _this;\n }\n Object.defineProperty(DiagramNativeElement.prototype, \"content\", {\n /**\n * Gets or sets the geometry of the native element\n */\n get: function () {\n return this.data;\n },\n set: function (value) {\n this.data = value;\n this.template = getContent(this, false);\n this.isDirt = true;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Measures minimum space that is required to render the Native Element\n * @param availableSize\n */\n DiagramNativeElement.prototype.measure = function (availableSize) {\n if (this.isDirt) {\n var rect = measureNativeContent(this.template);\n this.contentSize = new Size();\n this.contentSize.width = rect.width;\n this.contentSize.height = rect.height;\n var x = rect.x;\n var y = rect.y;\n this.templatePosition = { x: x, y: y };\n this.isDirt = false;\n }\n if (this.width === undefined || this.height === undefined) {\n var getAvailableSize = measureNativeSvg(this.template);\n this.desiredSize = new Size(getAvailableSize.width, getAvailableSize.height);\n }\n else {\n this.desiredSize = new Size(this.width, this.height);\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the Native Element\n * @param desiredSize\n */\n DiagramNativeElement.prototype.arrange = function (desiredSize) {\n this.actualSize = new Size(this.desiredSize.width, this.desiredSize.height);\n this.updateBounds();\n return this.actualSize;\n };\n return DiagramNativeElement;\n}(DiagramElement));\nexport { DiagramNativeElement };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Size } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { measureText } from './../../utility/dom-util';\n/**\n * TextElement is used to display text/annotations\n */\nvar TextElement = /** @class */ (function (_super) {\n __extends(TextElement, _super);\n /**\n * set the id for each element\n */\n function TextElement() {\n var _this = _super.call(this) || this;\n /**\n * sets or gets the image source\n */\n _this.textContent = '';\n _this.hyperlink = {\n color: 'blue'\n };\n /** @private */\n _this.doWrap = true;\n _this.textNodes = [];\n /**\n * Defines the appearance of the text element\n */\n _this.style = {\n color: 'black', fill: 'white', strokeColor: 'black',\n strokeWidth: 1, fontFamily: 'Arial', fontSize: 12, whiteSpace: 'CollapseSpace',\n textWrapping: 'WrapWithOverflow', textAlign: 'Center', italic: false, bold: false,\n textDecoration: 'None', strokeDashArray: '', opacity: 5, gradient: null,\n textOverflow: 'Wrap'\n };\n _this.style.fill = 'transparent';\n _this.style.strokeColor = 'transparent';\n return _this;\n }\n Object.defineProperty(TextElement.prototype, \"content\", {\n get: function () {\n return this.textContent;\n },\n set: function (value) {\n if (this.textContent !== value) {\n this.textContent = value;\n this.isDirt = true;\n this.doWrap = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextElement.prototype, \"childNodes\", {\n get: function () {\n return this.textNodes;\n },\n set: function (value) {\n this.textNodes = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextElement.prototype, \"wrapBounds\", {\n get: function () {\n return this.textWrapBounds;\n },\n set: function (value) {\n this.textWrapBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n TextElement.prototype.refreshTextElement = function () {\n this.isDirt = true;\n };\n /**\n * Measures the minimum size that is required for the text element\n * @param availableSize\n */\n TextElement.prototype.measure = function (availableSize) {\n var size;\n if (this.isDirt) {\n size = measureText(this, this.style, this.content, this.width);\n }\n else {\n size = this.desiredSize;\n }\n if (this.width === undefined || this.height === undefined) {\n this.desiredSize = new Size(size.width, size.height);\n }\n else {\n this.desiredSize = new Size(this.width, this.height);\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the text element\n * @param desiredSize\n */\n TextElement.prototype.arrange = function (desiredSize) {\n if (desiredSize.width !== this.actualSize.width || desiredSize.height !== this.actualSize.height || this.isDirt) {\n this.doWrap = true;\n }\n this.actualSize = desiredSize;\n this.updateBounds();\n this.isDirt = false;\n return this.actualSize;\n };\n return TextElement;\n}(DiagramElement));\nexport { TextElement };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Size } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { measureImage } from './../../utility/dom-util';\n/**\n * ImageElement defines a basic image elements\n */\nvar ImageElement = /** @class */ (function (_super) {\n __extends(ImageElement, _super);\n /**\n * set the id for each element\n */\n function ImageElement() {\n var _this = _super.call(this) || this;\n /**\n * sets or gets the image source\n */\n _this.imageSource = '';\n /**\n * sets scaling factor of the image\n */\n _this.imageScale = 'None';\n /**\n * sets the alignment of the image\n */\n _this.imageAlign = 'None';\n /**\n * Sets how to stretch the image\n */\n _this.stretch = 'Stretch';\n return _this;\n }\n Object.defineProperty(ImageElement.prototype, \"source\", {\n get: function () {\n return this.imageSource;\n },\n set: function (value) {\n this.imageSource = value;\n this.isDirt = true;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Measures minimum space that is required to render the image\n * @param availableSize\n */\n ImageElement.prototype.measure = function (availableSize) {\n if (this.isDirt && (this.stretch !== 'Stretch' || this.width === undefined && this.height === undefined)) {\n this.contentSize = measureImage(this.source, this.contentSize);\n this.isDirt = false;\n }\n if (this.width !== undefined && this.height !== undefined) {\n this.desiredSize = new Size(this.width, this.height);\n this.contentSize = this.desiredSize;\n }\n else {\n this.desiredSize = this.contentSize;\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the image\n * @param desiredSize\n */\n ImageElement.prototype.arrange = function (desiredSize) {\n this.actualSize = new Size(this.desiredSize.width, this.desiredSize.height);\n this.updateBounds();\n return this.actualSize;\n };\n return ImageElement;\n}(DiagramElement));\nexport { ImageElement };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Container } from './container';\nimport { rotateSize } from '../../utility/base-util';\nimport { Transform } from '../../enum/enum';\nimport { Size } from '../../primitives/size';\nimport { Rect } from '../../primitives/rect';\n/**\n * Canvas module is used to define a plane(canvas) and to arrange the children based on margin\n */\nvar Canvas = /** @class */ (function (_super) {\n __extends(Canvas, _super);\n function Canvas() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Not applicable for canvas\n * @private\n */\n _this.measureChildren = undefined;\n return _this;\n }\n /**\n * Measures the minimum space that the canvas requires\n * @param availableSize\n */\n Canvas.prototype.measure = function (availableSize) {\n var desired = undefined;\n var desiredBounds = undefined;\n if (this.hasChildren()) {\n //Measuring the children\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.measure(availableSize);\n var childSize = child.desiredSize.clone();\n if (child.rotateAngle !== 0) {\n childSize = rotateSize(childSize, child.rotateAngle);\n }\n var right = childSize.width + child.margin.right;\n var bottom = childSize.height + child.margin.bottom;\n var childBounds = new Rect(child.margin.left, child.margin.top, right, bottom);\n if (child.float) {\n var position = child.getAbsolutePosition(childSize);\n if (position !== undefined) {\n continue;\n }\n }\n if (desiredBounds === undefined) {\n desiredBounds = childBounds;\n }\n else {\n desiredBounds.uniteRect(childBounds);\n }\n }\n if (desiredBounds) {\n var leftMargin = 0;\n var topMargin = 0;\n leftMargin = Math.max(desiredBounds.left, 0);\n topMargin = Math.max(desiredBounds.top, 0);\n desired = new Size(desiredBounds.width + leftMargin, desiredBounds.height + topMargin);\n }\n }\n desired = _super.prototype.validateDesiredSize.call(this, desired, availableSize);\n _super.prototype.stretchChildren.call(this, desired);\n //Considering padding values\n desired.width += this.padding.left + this.padding.right;\n desired.height += this.padding.top + this.padding.bottom;\n this.desiredSize = desired;\n return desired;\n };\n /**\n * Arranges the child elements of the canvas\n */\n Canvas.prototype.arrange = function (desiredSize) {\n this.outerBounds = new Rect();\n if (this.hasChildren()) {\n var y = void 0;\n var x = void 0;\n y = this.offsetY - desiredSize.height * this.pivot.y + this.padding.top;\n x = this.offsetX - desiredSize.width * this.pivot.x + this.padding.left;\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if ((child.transform & Transform.Parent) !== 0) {\n child.parentTransform = this.parentTransform + this.rotateAngle;\n var childSize = child.desiredSize.clone();\n if (child.rotateAngle !== 0) {\n childSize = rotateSize(childSize, child.rotateAngle);\n }\n var topLeft = void 0;\n var center = { x: 0, y: 0 };\n var childX = x;\n var childY = y;\n if (child.relativeMode === 'Point') {\n var position = child.getAbsolutePosition(desiredSize);\n if (position !== undefined) {\n childX += position.x;\n childY += position.y;\n }\n }\n if (child.relativeMode === 'Object') {\n topLeft = this.alignChildBasedOnParent(child, childSize, desiredSize, childX, childY);\n }\n else {\n topLeft = this.alignChildBasedOnaPoint(child, childX, childY, childSize);\n }\n center = { x: topLeft.x + childSize.width / 2, y: topLeft.y + childSize.height / 2 };\n _super.prototype.findChildOffsetFromCenter.call(this, child, center);\n }\n child.arrange(child.desiredSize);\n this.outerBounds.uniteRect(child.outerBounds);\n }\n }\n this.actualSize = desiredSize;\n this.updateBounds();\n this.outerBounds.uniteRect(this.bounds);\n return desiredSize;\n };\n /**\n * Aligns the child element based on its parent\n * @param child\n * @param childSize\n * @param parentSize\n * @param x\n * @param y\n */\n Canvas.prototype.alignChildBasedOnParent = function (child, childSize, parentSize, x, y) {\n switch (child.horizontalAlignment) {\n case 'Auto':\n case 'Left':\n x += child.margin.left;\n break;\n case 'Right':\n x += parentSize.width - childSize.width - child.margin.right;\n break;\n case 'Stretch':\n case 'Center':\n x += parentSize.width / 2 - childSize.width / 2;\n break;\n }\n switch (child.verticalAlignment) {\n case 'Auto':\n case 'Top':\n y += child.margin.top;\n break;\n case 'Bottom':\n y += parentSize.height - childSize.height - child.margin.bottom;\n break;\n case 'Stretch':\n case 'Center':\n y += parentSize.height / 2 - childSize.height / 2;\n break;\n }\n return { x: x, y: y };\n };\n /**\n * Aligns the child elements based on a point\n * @param child\n * @param x\n * @param y\n */\n Canvas.prototype.alignChildBasedOnaPoint = function (child, x, y, childSize) {\n x += child.margin.left - child.margin.right;\n y += child.margin.top - child.margin.bottom;\n switch (child.horizontalAlignment) {\n case 'Auto':\n case 'Left':\n x = x;\n break;\n case 'Stretch':\n case 'Center':\n x -= childSize.width * child.pivot.x;\n break;\n case 'Right':\n x -= childSize.width;\n break;\n }\n switch (child.verticalAlignment) {\n case 'Auto':\n case 'Top':\n y = y;\n break;\n case 'Stretch':\n case 'Center':\n y -= childSize.height * child.pivot.y;\n break;\n case 'Bottom':\n y -= childSize.height;\n break;\n }\n return { x: x, y: y };\n };\n return Canvas;\n}(Container));\nexport { Canvas };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { ShapeStyle, Margin } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { PortConstraints, PortVisibility } from '../enum/enum';\n/**\n * Defines the behavior of connection ports\n */\nvar Port = /** @class */ (function (_super) {\n __extends(Port, _super);\n function Port() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Port.prototype, \"id\", void 0);\n __decorate([\n Property('Center')\n ], Port.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], Port.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Port.prototype, \"margin\", void 0);\n __decorate([\n Property(12)\n ], Port.prototype, \"width\", void 0);\n __decorate([\n Property(12)\n ], Port.prototype, \"height\", void 0);\n __decorate([\n Complex({}, ShapeStyle)\n ], Port.prototype, \"style\", void 0);\n __decorate([\n Property('Square')\n ], Port.prototype, \"shape\", void 0);\n __decorate([\n Property(PortVisibility.Connect)\n ], Port.prototype, \"visibility\", void 0);\n __decorate([\n Property('')\n ], Port.prototype, \"pathData\", void 0);\n __decorate([\n Property(PortConstraints.None)\n ], Port.prototype, \"constraints\", void 0);\n __decorate([\n Property()\n ], Port.prototype, \"addInfo\", void 0);\n return Port;\n}(ChildProperty));\nexport { Port };\n/**\n * Defines the behavior of a port, that sticks to a point\n */\nvar PointPort = /** @class */ (function (_super) {\n __extends(PointPort, _super);\n // tslint:disable-next-line:no-any\n function PointPort(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], PointPort.prototype, \"offset\", void 0);\n return PointPort;\n}(Port));\nexport { PointPort };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { TextStyle, Margin } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { AnnotationConstraints } from '../enum/enum';\n/**\n * Defines the hyperlink for the annotations in the nodes/connectors\n */\nvar Hyperlink = /** @class */ (function (_super) {\n __extends(Hyperlink, _super);\n function Hyperlink() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('blue')\n ], Hyperlink.prototype, \"color\", void 0);\n __decorate([\n Property('')\n ], Hyperlink.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], Hyperlink.prototype, \"link\", void 0);\n __decorate([\n Property('None')\n ], Hyperlink.prototype, \"textDecoration\", void 0);\n return Hyperlink;\n}(ChildProperty));\nexport { Hyperlink };\n/**\n * Defines the textual description of nodes/connectors\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(true)\n ], Annotation.prototype, \"visibility\", void 0);\n __decorate([\n Property(AnnotationConstraints.InheritReadOnly)\n ], Annotation.prototype, \"constraints\", void 0);\n __decorate([\n Complex(undefined, Hyperlink)\n ], Annotation.prototype, \"hyperlink\", void 0);\n __decorate([\n Property('')\n ], Annotation.prototype, \"id\", void 0);\n __decorate([\n Property()\n ], Annotation.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], Annotation.prototype, \"height\", void 0);\n __decorate([\n Property(0)\n ], Annotation.prototype, \"rotateAngle\", void 0);\n __decorate([\n Complex({ strokeWidth: 0, strokeColor: 'transparent', fill: 'transparent' }, TextStyle)\n ], Annotation.prototype, \"style\", void 0);\n __decorate([\n Property('Center')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Annotation.prototype, \"margin\", void 0);\n __decorate([\n Property('Shape')\n ], Annotation.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Annotation.prototype, \"addInfo\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Defines the textual description of nodes/connectors with respect to bounds\n */\nvar ShapeAnnotation = /** @class */ (function (_super) {\n __extends(ShapeAnnotation, _super);\n // tslint:disable-next-line:no-any\n function ShapeAnnotation(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], ShapeAnnotation.prototype, \"offset\", void 0);\n return ShapeAnnotation;\n}(Annotation));\nexport { ShapeAnnotation };\n/**\n * Defines the connector annotation\n */\nvar PathAnnotation = /** @class */ (function (_super) {\n __extends(PathAnnotation, _super);\n // tslint:disable-next-line:no-any\n function PathAnnotation(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Property(0.5)\n ], PathAnnotation.prototype, \"offset\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], PathAnnotation.prototype, \"displacement\", void 0);\n __decorate([\n Property('Center')\n ], PathAnnotation.prototype, \"alignment\", void 0);\n __decorate([\n Property(false)\n ], PathAnnotation.prototype, \"segmentAngle\", void 0);\n return PathAnnotation;\n}(Annotation));\nexport { PathAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { Margin } from '../core/appearance';\nimport { Point } from '../primitives/point';\n/**\n * Defines the behavior of default IconShapes\n */\nvar IconShape = /** @class */ (function (_super) {\n __extends(IconShape, _super);\n function IconShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], IconShape.prototype, \"shape\", void 0);\n __decorate([\n Property('white')\n ], IconShape.prototype, \"fill\", void 0);\n __decorate([\n Property('Auto')\n ], IconShape.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Auto')\n ], IconShape.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(10)\n ], IconShape.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], IconShape.prototype, \"height\", void 0);\n __decorate([\n Complex({ x: 0.5, y: 1 }, Point)\n ], IconShape.prototype, \"offset\", void 0);\n __decorate([\n Property('#1a1a1a')\n ], IconShape.prototype, \"borderColor\", void 0);\n __decorate([\n Property(1)\n ], IconShape.prototype, \"borderWidth\", void 0);\n __decorate([\n Complex({}, Margin)\n ], IconShape.prototype, \"margin\", void 0);\n __decorate([\n Property('')\n ], IconShape.prototype, \"pathData\", void 0);\n __decorate([\n Property('')\n ], IconShape.prototype, \"content\", void 0);\n __decorate([\n Property(0)\n ], IconShape.prototype, \"cornerRadius\", void 0);\n __decorate([\n Complex({ left: 2, right: 2, top: 2, bottom: 2 }, Margin)\n ], IconShape.prototype, \"padding\", void 0);\n return IconShape;\n}(ChildProperty));\nexport { IconShape };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Margin } from '../core/appearance';\nimport { IconShape } from './icon';\nimport { DiagramTooltip } from './tooltip';\nimport { PointPort } from './port';\n/**\n * Defines the common behavior of nodes, connectors and groups\n */\nvar NodeBase = /** @class */ (function (_super) {\n __extends(NodeBase, _super);\n function NodeBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], NodeBase.prototype, \"id\", void 0);\n __decorate([\n Property(-1)\n ], NodeBase.prototype, \"zIndex\", void 0);\n __decorate([\n Complex({}, Margin)\n ], NodeBase.prototype, \"margin\", void 0);\n __decorate([\n Property(true)\n ], NodeBase.prototype, \"visible\", void 0);\n __decorate([\n Collection([], PointPort)\n ], NodeBase.prototype, \"ports\", void 0);\n __decorate([\n Property(true)\n ], NodeBase.prototype, \"isExpanded\", void 0);\n __decorate([\n Complex({}, DiagramTooltip)\n ], NodeBase.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, IconShape)\n ], NodeBase.prototype, \"expandIcon\", void 0);\n __decorate([\n Complex({}, IconShape)\n ], NodeBase.prototype, \"collapseIcon\", void 0);\n __decorate([\n Property(false)\n ], NodeBase.prototype, \"excludeFromLayout\", void 0);\n __decorate([\n Property()\n ], NodeBase.prototype, \"addInfo\", void 0);\n return NodeBase;\n}(ChildProperty));\nexport { NodeBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, Complex } from '@syncfusion/ej2-base';\nimport { Container } from '../core/containers/container';\nimport { Node } from '../objects/node';\nimport { Connector } from '../objects/connector';\nimport { Point } from '../primitives/point';\nimport { Size } from '../primitives/size';\nimport { SelectorConstraints } from '../enum/enum';\nimport { Margin } from '../core/appearance';\n/**\n * A collection of frequently used commands that will be added around the selector\n * ```html\n *
    \n * ```\n * ```typescript\n * let nodes: NodeModel[] = [{\n * id: 'node1', width: 100, height: 100, offsetX: 100, offsetY: 100,\n * annotations: [{ content: 'Default Shape' }]\n * },\n * {\n * id: 'node2', width: 100, height: 100, offsetX: 300, offsetY: 100,\n * shape: {\n * type: 'Basic', shape: 'Ellipse'\n * },\n * annotations: [{ content: 'Path Element' }]\n * }\n * ];\n * let connectors: ConnectorModel[] = [{\n * id: 'connector1',\n * type: 'Straight',\n * sourcePoint: { x: 100, y: 300 },\n * targetPoint: { x: 200, y: 400 },\n * }];\n * let handle: UserHandleModel[] = [\n * { name: 'handle', margin: { top: 0, bottom: 0, left: 0, right: 0 }, offset: 0,\n * pathData: 'M 376.892,225.284L 371.279,211.95L 376.892,198.617L 350.225,211.95L 376.892,225.284 Z',\n * side: 'Top', horizontalAlignment: 'Center', verticalAlignment: 'Center',\n * pathColor: 'yellow' }];\n * let diagram: Diagram = new Diagram({\n * ...\n * connectors: connectors, nodes: nodes,\n * selectedItems: { constraints: SelectorConstraints.All, userHandles: handle },\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n * @default {}\n */\nvar UserHandle = /** @class */ (function (_super) {\n __extends(UserHandle, _super);\n function UserHandle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UserHandle.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], UserHandle.prototype, \"pathData\", void 0);\n __decorate([\n Property('#000000')\n ], UserHandle.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('top')\n ], UserHandle.prototype, \"side\", void 0);\n __decorate([\n Property('')\n ], UserHandle.prototype, \"borderColor\", void 0);\n __decorate([\n Property(0.5)\n ], UserHandle.prototype, \"borderWidth\", void 0);\n __decorate([\n Property(25)\n ], UserHandle.prototype, \"size\", void 0);\n __decorate([\n Property('white')\n ], UserHandle.prototype, \"pathColor\", void 0);\n __decorate([\n Property(10)\n ], UserHandle.prototype, \"displacement\", void 0);\n __decorate([\n Property(true)\n ], UserHandle.prototype, \"visible\", void 0);\n __decorate([\n Property(0)\n ], UserHandle.prototype, \"offset\", void 0);\n __decorate([\n Complex({}, Margin)\n ], UserHandle.prototype, \"margin\", void 0);\n __decorate([\n Property('Center')\n ], UserHandle.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], UserHandle.prototype, \"verticalAlignment\", void 0);\n return UserHandle;\n}(ChildProperty));\nexport { UserHandle };\n/**\n * Defines the size and position of selected items and defines the appearance of selector\n */\nvar Selector = /** @class */ (function (_super) {\n __extends(Selector, _super);\n function Selector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the UI of the container\n */\n Selector.prototype.init = function (diagram) {\n var container = new Container();\n container.measureChildren = false;\n var consize = new Size();\n container.children = [];\n if (this.annotation) {\n var object = (this.nodes.length > 0) ? diagram.nameTable[this.nodes[0].id].wrapper :\n diagram.nameTable[this.connectors[0].id].wrapper;\n var wrapper = diagram.getWrapper(object, this.annotation.id);\n container.children.push(wrapper);\n }\n else {\n if (this.nodes || this.connectors) {\n for (var i = 0; i < this.nodes.length; i++) {\n var node = diagram.nameTable[this.nodes[i].id];\n var wrapper = node.wrapper;\n // this.width = wrapper.actualSize.width; \n // this.height = wrapper.actualSize.height;\n // this.rotateAngle = wrapper.rotateAngle;\n // this.offsetX = wrapper.offsetX;\n // this.offsetY = wrapper.offsetY;\n container.children.push(wrapper);\n }\n for (var j = 0; j < this.connectors.length; j++) {\n var connector = diagram.nameTable[this.connectors[j].id];\n var wrapper = connector.wrapper;\n // this.width = wrapper.actualSize.width; this.height = wrapper.actualSize.height;\n // this.rotateAngle = wrapper.rotateAngle; this.offsetX = wrapper.offsetX;\n // this.offsetY = wrapper.offsetY;\n container.children.push(wrapper);\n }\n }\n }\n this.wrapper = container;\n return container;\n };\n __decorate([\n Property(null)\n ], Selector.prototype, \"wrapper\", void 0);\n __decorate([\n Collection([], Node)\n ], Selector.prototype, \"nodes\", void 0);\n __decorate([\n Collection([], Connector)\n ], Selector.prototype, \"connectors\", void 0);\n __decorate([\n Property()\n ], Selector.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], Selector.prototype, \"height\", void 0);\n __decorate([\n Property(0)\n ], Selector.prototype, \"rotateAngle\", void 0);\n __decorate([\n Property(0)\n ], Selector.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Selector.prototype, \"offsetY\", void 0);\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], Selector.prototype, \"pivot\", void 0);\n __decorate([\n Property('CompleteIntersect')\n ], Selector.prototype, \"rubberBandSelectionMode\", void 0);\n __decorate([\n Collection([], UserHandle)\n ], Selector.prototype, \"userHandles\", void 0);\n __decorate([\n Property(SelectorConstraints.All)\n ], Selector.prototype, \"constraints\", void 0);\n return Selector;\n}(ChildProperty));\nexport { Selector };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { DiagramElement } from './diagram-element';\nimport { getContent } from '../../utility/dom-util';\n/**\n * HTMLElement defines the basic html elements\n */\nvar DiagramHtmlElement = /** @class */ (function (_super) {\n __extends(DiagramHtmlElement, _super);\n /**\n * set the id for each element\n */\n function DiagramHtmlElement(nodeId, diagramId) {\n var _this = _super.call(this) || this;\n _this.data = '';\n _this.nodeId = '';\n _this.diagramId = '';\n _this.diagramId = diagramId;\n _this.nodeId = nodeId;\n return _this;\n }\n Object.defineProperty(DiagramHtmlElement.prototype, \"content\", {\n /**\n * Gets or sets the geometry of the html element\n */\n get: function () {\n return this.data;\n },\n set: function (value) {\n this.data = value;\n this.template = getContent(this, true);\n this.isDirt = true;\n },\n enumerable: true,\n configurable: true\n });\n return DiagramHtmlElement;\n}(DiagramElement));\nexport { DiagramHtmlElement };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, Complex, Collection, ChildProperty, ComplexFactory } from '@syncfusion/ej2-base';\nimport { Margin, TextStyle, Shadow } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { Size } from '../primitives/size';\nimport { Container } from '../core/containers/container';\nimport { Canvas } from '../core/containers/canvas';\nimport { getBasicShape } from './dictionary/basic-shapes';\nimport { DiagramElement } from '../core/elements/diagram-element';\nimport { PathElement } from '../core/elements/path-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { ImageElement } from '../core/elements/image-element';\nimport { DiagramNativeElement } from '../core/elements/native-element';\nimport { PointPort } from './port';\nimport { ShapeAnnotation } from './annotation';\nimport { getPortShape, getIconShape } from './dictionary/common';\nimport { getFlowShape } from './dictionary/flow-shapes';\nimport { NodeConstraints } from '../enum/enum';\nimport { checkPortRestriction } from './../utility/diagram-util';\nimport { randomId, getFunction } from './../utility/base-util';\nimport { NodeBase } from './node-base';\nimport { canShadow } from './../utility/constraints-util';\nimport { PortVisibility } from '../enum/enum';\nimport { measurePath } from './../utility/dom-util';\nimport { getPolygonPath } from './../utility/path-util';\nimport { DiagramHtmlElement } from '../core/elements/html-element';\nvar getShapeType = function (obj) {\n switch (obj.type) {\n case 'Basic':\n return BasicShape;\n case 'Flow':\n return FlowShape;\n case 'Path':\n return Path;\n case 'Image':\n return Image;\n case 'Text':\n return Text;\n case 'Bpmn':\n return BpmnShape;\n case 'Native':\n return Native;\n case 'HTML':\n return Html;\n default:\n return BasicShape;\n }\n};\n/**\n * Defines the behavior of default shape\n */\nvar Shape = /** @class */ (function (_super) {\n __extends(Shape, _super);\n function Shape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Basic')\n ], Shape.prototype, \"type\", void 0);\n return Shape;\n}(ChildProperty));\nexport { Shape };\n/**\n * Defines the behavior of path shape\n */\nvar Path = /** @class */ (function (_super) {\n __extends(Path, _super);\n function Path() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Path')\n ], Path.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Path.prototype, \"data\", void 0);\n return Path;\n}(Shape));\nexport { Path };\n/**\n * Defines the behavior of Native shape\n */\nvar Native = /** @class */ (function (_super) {\n __extends(Native, _super);\n function Native() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Native')\n ], Native.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Native.prototype, \"content\", void 0);\n __decorate([\n Property('Stretch')\n ], Native.prototype, \"scale\", void 0);\n return Native;\n}(Shape));\nexport { Native };\n/**\n * Defines the behavior of html shape\n */\nvar Html = /** @class */ (function (_super) {\n __extends(Html, _super);\n function Html() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('HTML')\n ], Html.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Html.prototype, \"content\", void 0);\n return Html;\n}(Shape));\nexport { Html };\n/**\n * Defines the behavior of image shape\n */\nvar Image = /** @class */ (function (_super) {\n __extends(Image, _super);\n function Image() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Image')\n ], Image.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Image.prototype, \"source\", void 0);\n __decorate([\n Property('')\n ], Image.prototype, \"scale\", void 0);\n __decorate([\n Property('None')\n ], Image.prototype, \"align\", void 0);\n return Image;\n}(Shape));\nexport { Image };\n/**\n * Defines the behavior of the text shape\n */\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Text')\n ], Text.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Text.prototype, \"content\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Text.prototype, \"margin\", void 0);\n return Text;\n}(Shape));\nexport { Text };\n/**\n * Defines the behavior of the basic shape\n */\nvar BasicShape = /** @class */ (function (_super) {\n __extends(BasicShape, _super);\n function BasicShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Basic')\n ], BasicShape.prototype, \"type\", void 0);\n __decorate([\n Property('Rectangle')\n ], BasicShape.prototype, \"shape\", void 0);\n __decorate([\n Property(0)\n ], BasicShape.prototype, \"cornerRadius\", void 0);\n __decorate([\n Collection([], Point)\n ], BasicShape.prototype, \"points\", void 0);\n return BasicShape;\n}(Shape));\nexport { BasicShape };\n/**\n * Defines the behavior of the flow shape\n */\nvar FlowShape = /** @class */ (function (_super) {\n __extends(FlowShape, _super);\n function FlowShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Flow')\n ], FlowShape.prototype, \"type\", void 0);\n __decorate([\n Property('Terminator')\n ], FlowShape.prototype, \"shape\", void 0);\n return FlowShape;\n}(Shape));\nexport { FlowShape };\n/**\n * Defines the behavior of the bpmn gateway shape\n */\nvar BpmnGateway = /** @class */ (function (_super) {\n __extends(BpmnGateway, _super);\n function BpmnGateway() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnGateway.prototype, \"type\", void 0);\n return BpmnGateway;\n}(ChildProperty));\nexport { BpmnGateway };\n/**\n * Defines the behavior of the bpmn data object\n */\nvar BpmnDataObject = /** @class */ (function (_super) {\n __extends(BpmnDataObject, _super);\n function BpmnDataObject() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnDataObject.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], BpmnDataObject.prototype, \"collection\", void 0);\n return BpmnDataObject;\n}(ChildProperty));\nexport { BpmnDataObject };\n/**\n * Defines the behavior of the bpmn task shape\n */\nvar BpmnTask = /** @class */ (function (_super) {\n __extends(BpmnTask, _super);\n function BpmnTask() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnTask.prototype, \"type\", void 0);\n __decorate([\n Property('None')\n ], BpmnTask.prototype, \"loop\", void 0);\n __decorate([\n Property(false)\n ], BpmnTask.prototype, \"call\", void 0);\n __decorate([\n Property(false)\n ], BpmnTask.prototype, \"compensation\", void 0);\n return BpmnTask;\n}(ChildProperty));\nexport { BpmnTask };\n/**\n * Defines the behavior of the bpmn Event shape\n */\nvar BpmnEvent = /** @class */ (function (_super) {\n __extends(BpmnEvent, _super);\n function BpmnEvent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Start')\n ], BpmnEvent.prototype, \"event\", void 0);\n __decorate([\n Property('None')\n ], BpmnEvent.prototype, \"trigger\", void 0);\n return BpmnEvent;\n}(ChildProperty));\nexport { BpmnEvent };\n/**\n * Defines the behavior of the bpmn sub event\n */\nvar BpmnSubEvent = /** @class */ (function (_super) {\n __extends(BpmnSubEvent, _super);\n function BpmnSubEvent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnSubEvent.prototype, \"trigger\", void 0);\n __decorate([\n Property('Start')\n ], BpmnSubEvent.prototype, \"event\", void 0);\n __decorate([\n Property('')\n ], BpmnSubEvent.prototype, \"id\", void 0);\n __decorate([\n Complex({}, Point)\n ], BpmnSubEvent.prototype, \"offset\", void 0);\n __decorate([\n Collection([], ShapeAnnotation)\n ], BpmnSubEvent.prototype, \"annotations\", void 0);\n __decorate([\n Collection([], PointPort)\n ], BpmnSubEvent.prototype, \"ports\", void 0);\n __decorate([\n Property()\n ], BpmnSubEvent.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], BpmnSubEvent.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Margin)\n ], BpmnSubEvent.prototype, \"margin\", void 0);\n __decorate([\n Property('Center')\n ], BpmnSubEvent.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], BpmnSubEvent.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(true)\n ], BpmnSubEvent.prototype, \"visible\", void 0);\n return BpmnSubEvent;\n}(ChildProperty));\nexport { BpmnSubEvent };\nvar BpmnTransactionSubProcess = /** @class */ (function (_super) {\n __extends(BpmnTransactionSubProcess, _super);\n function BpmnTransactionSubProcess() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ id: 'success', event: 'End', offset: { x: 1, y: 0.5 } }, BpmnSubEvent)\n ], BpmnTransactionSubProcess.prototype, \"success\", void 0);\n __decorate([\n Complex({ id: 'failure', event: 'Intermediate', trigger: 'Error', offset: { x: 0.25, y: 1 } }, BpmnSubEvent)\n ], BpmnTransactionSubProcess.prototype, \"failure\", void 0);\n __decorate([\n Complex({ id: 'cancel', event: 'Intermediate', trigger: 'Cancel', offset: { x: 0.75, y: 1 } }, BpmnSubEvent)\n ], BpmnTransactionSubProcess.prototype, \"cancel\", void 0);\n return BpmnTransactionSubProcess;\n}(ChildProperty));\nexport { BpmnTransactionSubProcess };\n/**\n * Defines the behavior of the BPMNSubProcess\n */\nvar BpmnSubProcess = /** @class */ (function (_super) {\n __extends(BpmnSubProcess, _super);\n function BpmnSubProcess() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnSubProcess.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], BpmnSubProcess.prototype, \"adhoc\", void 0);\n __decorate([\n Property('Default')\n ], BpmnSubProcess.prototype, \"boundary\", void 0);\n __decorate([\n Property(false)\n ], BpmnSubProcess.prototype, \"compensation\", void 0);\n __decorate([\n Property('None')\n ], BpmnSubProcess.prototype, \"loop\", void 0);\n __decorate([\n Property(true)\n ], BpmnSubProcess.prototype, \"collapsed\", void 0);\n __decorate([\n Collection([], BpmnSubEvent)\n ], BpmnSubProcess.prototype, \"events\", void 0);\n __decorate([\n Complex({}, BpmnTransactionSubProcess)\n ], BpmnSubProcess.prototype, \"transaction\", void 0);\n __decorate([\n Property(undefined)\n ], BpmnSubProcess.prototype, \"processes\", void 0);\n return BpmnSubProcess;\n}(ChildProperty));\nexport { BpmnSubProcess };\n/**\n * Defines the behavior of the bpmn activity shape\n */\nvar BpmnActivity = /** @class */ (function (_super) {\n __extends(BpmnActivity, _super);\n function BpmnActivity() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Task')\n ], BpmnActivity.prototype, \"activity\", void 0);\n __decorate([\n Complex({}, BpmnTask)\n ], BpmnActivity.prototype, \"task\", void 0);\n __decorate([\n Complex({}, BpmnSubProcess)\n ], BpmnActivity.prototype, \"subProcess\", void 0);\n return BpmnActivity;\n}(ChildProperty));\nexport { BpmnActivity };\n/**\n * Defines the behavior of the bpmn annotation\n */\nvar BpmnAnnotation = /** @class */ (function (_super) {\n __extends(BpmnAnnotation, _super);\n // tslint:disable-next-line:no-any\n function BpmnAnnotation(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Property('')\n ], BpmnAnnotation.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BpmnAnnotation.prototype, \"id\", void 0);\n __decorate([\n Property(0)\n ], BpmnAnnotation.prototype, \"angle\", void 0);\n __decorate([\n Property()\n ], BpmnAnnotation.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], BpmnAnnotation.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], BpmnAnnotation.prototype, \"length\", void 0);\n return BpmnAnnotation;\n}(ChildProperty));\nexport { BpmnAnnotation };\n/**\n * Defines the behavior of the bpmn shape\n */\nvar BpmnShape = /** @class */ (function (_super) {\n __extends(BpmnShape, _super);\n function BpmnShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Bpmn')\n ], BpmnShape.prototype, \"type\", void 0);\n __decorate([\n Property('Event')\n ], BpmnShape.prototype, \"shape\", void 0);\n __decorate([\n Complex({}, BpmnEvent)\n ], BpmnShape.prototype, \"event\", void 0);\n __decorate([\n Complex({}, BpmnGateway)\n ], BpmnShape.prototype, \"gateway\", void 0);\n __decorate([\n Complex({}, BpmnDataObject)\n ], BpmnShape.prototype, \"dataObject\", void 0);\n __decorate([\n Complex({}, BpmnActivity)\n ], BpmnShape.prototype, \"activity\", void 0);\n __decorate([\n Complex({}, BpmnAnnotation)\n ], BpmnShape.prototype, \"annotation\", void 0);\n __decorate([\n Collection([], BpmnAnnotation)\n ], BpmnShape.prototype, \"annotations\", void 0);\n return BpmnShape;\n}(Shape));\nexport { BpmnShape };\n/**\n * Defines the behavior of nodes\n */\nvar Node = /** @class */ (function (_super) {\n __extends(Node, _super);\n // tslint:disable-next-line:no-any\n function Node(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.parentId = '';\n /** @private */\n _this.processId = '';\n /** @private */\n _this.outEdges = [];\n /** @private */\n _this.inEdges = [];\n if (_this.children && _this.children.length > 0) {\n var nodeDefault = defaultValue;\n if (!nodeDefault.style || !nodeDefault.style.fill) {\n _this.style.fill = 'transparent';\n }\n if (!nodeDefault.style || !nodeDefault.style.strokeColor) {\n _this.style.strokeColor = 'transparent';\n }\n }\n return _this;\n }\n Object.defineProperty(Node.prototype, \"actualSize\", {\n /** @private */\n get: function () {\n if (this.wrapper !== null) {\n return this.wrapper.actualSize;\n }\n else {\n return new Size(this.width || 0, this.height || 0);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Allows to initialize the UI of a node\n */\n /** @private */\n /* tslint:disable */\n Node.prototype.init = function (diagram) {\n var content = new DiagramElement();\n var textStyle;\n var changedProperties = 'changedProperties';\n var oldProperties = 'oldProperties';\n this.shape[changedProperties] = {};\n this.shape[oldProperties] = {};\n switch (this.shape.type) {\n case 'Path':\n var pathContent = new PathElement();\n pathContent.data = this.shape.data;\n content = pathContent;\n break;\n case 'Image':\n var imageContent = new ImageElement();\n imageContent.source = this.shape.source;\n imageContent.imageAlign = this.shape.align;\n imageContent.imageScale = this.shape.scale;\n content = imageContent;\n break;\n case 'Text':\n var textContent = new TextElement();\n textContent.content = this.shape.content;\n content = textContent;\n textStyle = this.style;\n content.style = textStyle;\n break;\n case 'Basic':\n if (this.shape.shape === 'Rectangle') {\n var basicshape = new DiagramElement();\n content = basicshape;\n content.cornerRadius = this.shape.cornerRadius;\n }\n else if (this.shape.shape === 'Polygon') {\n var path = new PathElement();\n path.data = getPolygonPath(this.shape.points);\n content = path;\n }\n else {\n var basicshape = new PathElement();\n var basicshapedata = getBasicShape(this.shape.shape);\n basicshape.data = basicshapedata;\n content = basicshape;\n }\n break;\n case 'Flow':\n var flowshape = new PathElement();\n var flowshapedata = getFlowShape(this.shape.shape);\n flowshape.data = flowshapedata;\n content = flowshape;\n break;\n case 'Bpmn':\n if (diagram.bpmnModule) {\n content = diagram.bpmnModule.initBPMNContent(content, this, diagram);\n var subProcess = this.shape.activity.subProcess;\n if (subProcess.processes && subProcess.processes.length) {\n var children = this.shape.activity.subProcess.processes;\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var i = children_1[_i];\n if (diagram.nameTable[i] && (!diagram.nameTable[i].processId || diagram.nameTable[i].processId === this.id)) {\n diagram.nameTable[i].processId = this.id;\n if (subProcess.collapsed) {\n diagram.updateElementVisibility(diagram.nameTable[i].wrapper, diagram.nameTable[i], !subProcess.collapsed);\n }\n content.children.push(diagram.nameTable[i].wrapper);\n }\n }\n }\n }\n break;\n case 'Native':\n var nativeContent = new DiagramNativeElement(this.id, diagram.element.id);\n nativeContent.content = this.shape.content;\n nativeContent.scale = this.shape.scale;\n content = nativeContent;\n break;\n case 'HTML':\n var htmlContent = new DiagramHtmlElement(this.id, diagram.element.id);\n htmlContent.content = this.shape.content;\n content = htmlContent;\n break;\n }\n content.id = this.id + '_content';\n content.relativeMode = 'Object';\n if (this.width !== undefined) {\n content.width = this.width;\n }\n content.horizontalAlignment = 'Stretch';\n if (this.height !== undefined) {\n content.height = this.height;\n }\n if (this.minHeight !== undefined) {\n content.minHeight = this.minHeight;\n }\n if (this.maxHeight !== undefined) {\n content.maxHeight = this.maxHeight;\n }\n if (this.minWidth !== undefined) {\n content.minWidth = this.minWidth;\n }\n if (this.maxWidth !== undefined) {\n content.maxWidth = this.maxWidth;\n }\n if (this.shape.shape === 'Rectangle' && !this.shape.cornerRadius) {\n content.isRectElement = true;\n }\n content.verticalAlignment = 'Stretch';\n if (this.shape instanceof Text) {\n content.margin = this.shape.margin;\n }\n if (canShadow(this)) {\n if ((this.constraints & NodeConstraints.Shadow) !== 0) {\n content.shadow = this.shadow;\n }\n }\n if (this.shape.type !== 'Bpmn' || this.shape.shape === 'Message' ||\n this.shape.shape === 'DataSource') {\n if (this.shape.type !== 'Text') {\n content.style = this.style;\n }\n }\n return content;\n };\n /* tslint:enable */\n /** @private */\n Node.prototype.initContainer = function () {\n if (!this.id) {\n this.id = randomId();\n }\n // Creates canvas element\n var canvas = this.children ? new Container() : new Canvas();\n canvas.id = this.id;\n canvas.offsetX = this.offsetX;\n canvas.offsetY = this.offsetY;\n canvas.visible = this.visible;\n canvas.style.fill = this.backgroundColor;\n canvas.style.strokeColor = this.borderColor;\n canvas.style.strokeWidth = this.borderWidth;\n canvas.rotateAngle = this.rotateAngle;\n canvas.minHeight = this.minHeight;\n canvas.minWidth = this.minWidth;\n canvas.maxHeight = this.maxHeight;\n canvas.maxWidth = this.maxWidth;\n canvas.pivot = this.pivot;\n canvas.margin = this.margin;\n this.wrapper = canvas;\n return canvas;\n };\n /** @private */\n Node.prototype.initPorts = function (accessibilityContent, container) {\n var canvas = this.wrapper;\n var port;\n for (var i = 0; this.ports !== undefined, i < this.ports.length; i++) {\n port = this.initPortWrapper(this.ports[i]);\n // tslint:disable-next-line:no-any\n var wrapperContent = void 0;\n var contentAccessibility = getFunction(accessibilityContent);\n if (contentAccessibility) {\n wrapperContent = contentAccessibility(port, this);\n }\n port.description = wrapperContent ? wrapperContent : port.id;\n container.children.push(port);\n }\n };\n Node.prototype.getIconOffet = function (layout, icon) {\n var x;\n var y;\n if (layout.orientation === 'BottomToTop') {\n x = icon.offset.x;\n y = 1 - icon.offset.y;\n }\n else if (layout.orientation === 'LeftToRight') {\n x = icon.offset.y;\n y = icon.offset.x;\n }\n else if (layout.orientation === 'RightToLeft') {\n x = 1 - icon.offset.y;\n y = icon.offset.x;\n }\n else {\n x = icon.offset.x;\n y = icon.offset.y;\n }\n return { x: x, y: y };\n };\n /** @private */\n Node.prototype.initIcons = function (accessibilityContent, layout, container, diagramId) {\n var canvas = this.wrapper;\n var offset;\n var icon = this.isExpanded ? this.expandIcon : this.collapseIcon;\n if (icon.shape !== 'None') {\n var iconContainer = new Canvas();\n iconContainer.float = true;\n var children = [];\n iconContainer.id = this.id + '_icon_content';\n iconContainer.children = children;\n iconContainer.height = icon.height;\n iconContainer.width = icon.width;\n iconContainer.style.strokeColor = 'transparent';\n iconContainer.margin = icon.margin;\n iconContainer.horizontalAlignment = 'Center';\n iconContainer.verticalAlignment = 'Center';\n iconContainer.visible = this.visible;\n offset = this.getIconOffet(layout, icon);\n iconContainer.setOffsetWithRespectToBounds(offset.x, offset.y, 'Fraction');\n iconContainer.relativeMode = 'Point';\n this.initIconSymbol(icon, iconContainer, accessibilityContent, diagramId);\n // tslint:disable-next-line:no-any\n var wrapperContent = void 0;\n var contentAccessibility = getFunction(accessibilityContent);\n if (contentAccessibility) {\n wrapperContent = contentAccessibility(icon, this);\n }\n iconContainer.description = wrapperContent ? wrapperContent : iconContainer.id;\n container.children.push(iconContainer);\n }\n };\n /** @private */\n Node.prototype.initAnnotations = function (accessibilityContent, container) {\n var annotation;\n for (var i = 0; this.annotations !== undefined, i < this.annotations.length; i++) {\n annotation = this.initAnnotationWrapper(this.annotations[i]);\n // tslint:disable-next-line:no-any\n var wrapperContent = void 0;\n var contentAccessibility = getFunction(accessibilityContent);\n if (contentAccessibility) {\n wrapperContent = contentAccessibility(annotation, this);\n }\n annotation.description = wrapperContent ? wrapperContent : annotation.id;\n container.children.push(annotation);\n }\n };\n /** @private */\n Node.prototype.initPortWrapper = function (ports) {\n ports.id = ports.id || randomId();\n // Creates port element\n var portContent = new PathElement();\n portContent.height = ports.height;\n portContent.width = ports.width;\n var pathdata = (ports.shape === 'Custom') ? ports.pathData : getPortShape(ports.shape);\n portContent.id = this.id + '_' + (ports.id);\n portContent.margin = ports.margin;\n portContent.data = pathdata;\n var style = ports.style;\n portContent.style = {\n fill: style.fill, strokeColor: style.strokeColor, gradient: null,\n opacity: style.opacity, strokeDashArray: style.strokeDashArray, strokeWidth: style.strokeWidth\n };\n portContent.horizontalAlignment = ports.horizontalAlignment;\n portContent.verticalAlignment = ports.verticalAlignment;\n portContent.setOffsetWithRespectToBounds(ports.offset.x, ports.offset.y, 'Fraction');\n if (this.width !== undefined || this.height !== undefined) {\n portContent.float = true;\n }\n portContent.relativeMode = 'Point';\n portContent.visible = checkPortRestriction(ports, PortVisibility.Visible) &&\n !checkPortRestriction(ports, PortVisibility.Hover) && !checkPortRestriction(ports, PortVisibility.Connect) ? true : false;\n return portContent;\n };\n /** @private */\n Node.prototype.initAnnotationWrapper = function (annotation) {\n annotation.id = annotation.id || randomId();\n var label = annotation;\n var annotationcontent = new TextElement();\n annotationcontent.constraints = annotation.constraints;\n annotationcontent.height = annotation.height;\n annotationcontent.width = annotation.width;\n annotationcontent.visible = annotation.visibility;\n annotationcontent.rotateAngle = annotation.rotateAngle;\n annotationcontent.id = this.id + '_' + annotation.id;\n var style = annotation.style;\n var link = annotation.hyperlink.link ? annotation.hyperlink : undefined;\n annotationcontent.style = {\n fill: style.fill, strokeColor: style.strokeColor, strokeWidth: style.strokeWidth,\n bold: style.bold, textWrapping: style.textWrapping,\n color: link ? link.color || annotationcontent.hyperlink.color : style.color, whiteSpace: style.whiteSpace,\n fontFamily: style.fontFamily, fontSize: style.fontSize, italic: style.italic, gradient: null, opacity: style.opacity,\n strokeDashArray: style.strokeDashArray, textAlign: style.textAlign, textOverflow: annotation.style.textOverflow,\n textDecoration: link ? link.textDecoration || annotationcontent.hyperlink.textDecoration : style.textDecoration,\n };\n annotationcontent.hyperlink.link = annotation.hyperlink.link || undefined;\n annotationcontent.hyperlink.content = annotation.hyperlink.content || undefined;\n annotationcontent.hyperlink.textDecoration = annotation.hyperlink.textDecoration || undefined;\n annotationcontent.content = link ? link.content || annotationcontent.hyperlink.link : annotation.content;\n if (this.width !== undefined) {\n if (annotation.width === undefined || (annotation.width > this.width &&\n (annotation.style.textWrapping === 'Wrap' || annotation.style.textWrapping === 'WrapWithOverflow'))) {\n annotationcontent.width = this.width;\n }\n }\n annotationcontent.margin = annotation.margin;\n annotationcontent.horizontalAlignment = annotation.horizontalAlignment;\n annotationcontent.verticalAlignment = annotation.verticalAlignment;\n annotationcontent.setOffsetWithRespectToBounds(label.offset.x, label.offset.y, 'Fraction');\n if (this.width !== undefined || this.height !== undefined) {\n annotationcontent.float = true;\n }\n annotationcontent.relativeMode = 'Point';\n return annotationcontent;\n };\n Node.prototype.initIconContainer = function (options, iconContainer) {\n var rect = new DiagramElement();\n rect.id = iconContainer.id + '_rect';\n rect.height = options.height;\n rect.width = options.width;\n rect.visible = iconContainer.visible;\n rect.margin = options.margin;\n rect.cornerRadius = options.cornerRadius;\n rect.style = {\n fill: options.fill, strokeColor: options.borderColor,\n strokeWidth: options.borderWidth\n };\n rect.setOffsetWithRespectToBounds(0.5, 0.5, 'Fraction');\n rect.horizontalAlignment = 'Center';\n rect.verticalAlignment = 'Center';\n rect.relativeMode = 'Object';\n rect.description = rect.description || 'Click here to expand or collapse';\n return rect;\n };\n Node.prototype.initIconSymbol = function (options, iconContainer, accessibilityContent, diagramId) {\n var iconContent;\n iconContainer.children.push(this.initIconContainer(options, iconContainer));\n if (options.shape === 'Template') {\n iconContent = new DiagramNativeElement(this.id, diagramId);\n iconContent.content = options.content;\n iconContent.height = 10;\n iconContent.width = 10;\n }\n else {\n iconContent = new PathElement();\n iconContent.data = getIconShape(options);\n var iconContentBounds = measurePath(iconContent.data);\n iconContent.height =\n iconContentBounds.height < 10 ? iconContentBounds.height : 10 - (options.padding.bottom + options.padding.top);\n iconContent.width =\n iconContentBounds.width < 10 ? iconContentBounds.width : 10 - (options.padding.left + options.padding.right);\n }\n iconContent.id = iconContainer.id + '_shape';\n iconContent.horizontalAlignment = 'Center';\n iconContent.verticalAlignment = 'Center';\n iconContent.visible = iconContainer.visible;\n iconContent.visible = iconContainer.visible;\n iconContent.style = {\n fill: 'black', strokeColor: options.borderColor,\n strokeWidth: options.borderWidth\n };\n iconContent.setOffsetWithRespectToBounds(0.5, 0.5, 'Fraction');\n iconContent.relativeMode = 'Object';\n iconContent.description = iconContainer.description || 'Click here to expand or collapse';\n iconContainer.children.push(iconContent);\n };\n __decorate([\n Collection([], ShapeAnnotation)\n ], Node.prototype, \"annotations\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"offsetY\", void 0);\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], Node.prototype, \"pivot\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"minWidth\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"minHeight\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"maxWidth\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"maxHeight\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"rotateAngle\", void 0);\n __decorate([\n Complex({}, TextStyle)\n ], Node.prototype, \"style\", void 0);\n __decorate([\n Property('transparent')\n ], Node.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('none')\n ], Node.prototype, \"borderColor\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"borderWidth\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"data\", void 0);\n __decorate([\n ComplexFactory(getShapeType)\n ], Node.prototype, \"shape\", void 0);\n __decorate([\n Property(null)\n ], Node.prototype, \"wrapper\", void 0);\n __decorate([\n Property(NodeConstraints.Default)\n ], Node.prototype, \"constraints\", void 0);\n __decorate([\n Complex({}, Shadow)\n ], Node.prototype, \"shadow\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"children\", void 0);\n return Node;\n}(NodeBase));\nexport { Node };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property } from '@syncfusion/ej2-base';\nimport { createSvgElement, createHtmlElement, setAttributeSvg } from '../diagram/utility/dom-util';\nimport { Size } from '../diagram/primitives/size';\nimport { getFunction } from '../diagram/utility/base-util';\n/**\n * Represents the Ruler component that measures the Diagram objects, indicate positions, and align Diagram elements.\n * ```html\n *
    Show Ruler
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Ruler = /** @class */ (function (_super) {\n __extends(Ruler, _super);\n /**\n * Constructor for creating the Ruler Component\n */\n function Ruler(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.offset = 0;\n _this.scale = 1;\n return _this;\n }\n /**\n * Initializes the values of private members.\n * @private\n */\n Ruler.prototype.preRender = function () {\n this.unWireEvents();\n this.wireEvents();\n };\n /**\n * Renders the rulers.\n * @private\n */\n Ruler.prototype.render = function () {\n this.updateRulerGeometry();\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Ruler.prototype.getModuleName = function () {\n return 'Ruler';\n };\n /**\n * To destroy the ruler\n * @return {void}\n */\n Ruler.prototype.destroy = function () {\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-ruler');\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n Ruler.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Refreshes the ruler when the Ruler properties are updated\n * @param options\n */\n Ruler.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'length':\n case 'interval':\n case 'segmentWidth':\n case 'tickAlignment':\n case 'markerColor':\n case 'thickness':\n this.updateRuler();\n break;\n }\n }\n };\n Ruler.prototype.updateRulerGeometry = function () {\n this.element.style.textAlign = 'left';\n this.renderRulerSpace();\n this.updateRuler();\n };\n Ruler.prototype.renderRulerSpace = function () {\n var rulerGeometry = this.getRulerGeometry();\n var div = document.getElementById(this.element.id + '_ruler_space');\n if (!div) {\n div = createHtmlElement('div', {\n 'id': this.element.id + '_ruler_space',\n 'style': 'height:' + rulerGeometry.height + 'px;width:' + rulerGeometry.width + 'px;cssFloat:' + 'left;'\n });\n this.element.appendChild(div);\n }\n return div;\n };\n Ruler.prototype.updateRuler = function () {\n var rulerSize = this.getRulerSize();\n var rulerGeometry = this.getRulerGeometry();\n var length = 0;\n var offset = 0;\n var availableSize = new Size();\n var svg = this.getRulerSVG(rulerGeometry);\n if (svg) {\n length = this.length;\n availableSize.height = rulerSize;\n offset = this.offset;\n if (length && length !== Infinity) {\n var unitLength = length + this.segmentWidth;\n var unitOffset = offset;\n this.updateSegments(unitOffset, (unitLength + Math.abs(unitOffset)), svg, rulerSize);\n }\n }\n };\n Ruler.prototype.updateSegments = function (start, end, svg, rulerSize) {\n var run = start;\n var trans = { trans: 0 };\n while (run < end) {\n var rulerSegment = this.getNewSegment(run, svg);\n if (rulerSegment) {\n svg.appendChild(rulerSegment.segment);\n run = this.updateSegment(start, end, rulerSegment, run, trans, rulerSize);\n }\n }\n };\n Ruler.prototype.updateSegment = function (start, end, rulerSegment, run, trans, rulerSize) {\n var segWidth = this.updateSegmentWidth(this.scale);\n if (run === start) {\n this.startValue = Math.floor(start / segWidth) * segWidth / this.scale;\n this.startValue = (this.startValue % 1) !== 0 ? Number((this.startValue).toFixed(1)) : this.startValue;\n rulerSegment.label.textContent = this.startValue.toString();\n this.defStartValue = run = this.startValue * this.scale;\n if (this.orientation === 'Horizontal') {\n this.hRulerOffset = start - run;\n }\n else {\n this.vRulerOffset = start - run;\n }\n }\n else {\n this.startValue = (run / this.scale);\n this.startValue = (this.startValue % 1) !== 0 ? Number((this.startValue).toFixed(1)) : this.startValue;\n rulerSegment.label.textContent = this.startValue.toString();\n }\n this.updateTickLabel(rulerSegment, rulerSize);\n var translate = (this.orientation === 'Horizontal') ? ((trans.trans + 0.5) + ',0.5') : ('0.5,' + (trans.trans + 0.5));\n rulerSegment.segment.setAttribute('transform', 'translate(' + translate + ')');\n trans.trans += segWidth;\n run += segWidth;\n return run;\n };\n Ruler.prototype.updateTickLabel = function (rulerSegment, rulerSize) {\n var bBox = rulerSegment.segment.lastChild.getBBox();\n var isHorizontal = (this.orientation === 'Horizontal') ? true : false;\n var isRightOrBottom = (this.tickAlignment === 'RightOrBottom') ? true : false;\n var x = isHorizontal ? 2 : 0;\n var y = isHorizontal ? (isRightOrBottom ? (rulerSize / 2 + (11 / 2) - (11 / 2)) :\n (rulerSize / 2 + (11 / 2))) : bBox.height;\n var translate = isRightOrBottom ? (-(bBox.width + 2) + ',' + ((rulerSize / 2) - bBox.height)) :\n (-(bBox.width + 2) + ',' + ((rulerSize / 2) - bBox.height / 2));\n var attr = isHorizontal ? { 'x': x, 'y': y } :\n { 'x': x, 'y': y, 'transform': 'rotate(270)' + 'translate(' + translate + ')' };\n setAttributeSvg(rulerSegment.segment.lastChild, attr);\n };\n Ruler.prototype.getNewSegment = function (run, svg) {\n var segment = this.createNewTicks(run, svg);\n var label = this.createTickLabel(svg, segment);\n return { segment: segment, label: label };\n };\n Ruler.prototype.createNewTicks = function (run, svg) {\n var tick;\n var tickInterval;\n var segmentWidth = this.updateSegmentWidth(this.scale);\n var g;\n var attr = { 'class': 'e-ruler-segment' };\n g = createSvgElement('g', attr);\n for (var i = 0; i < this.interval; i++) {\n tickInterval = segmentWidth / this.interval;\n tick = this.createTick(svg, tickInterval, i + 1, run);\n g.appendChild(tick);\n }\n return g;\n };\n Ruler.prototype.getLinePoint = function (svg, tickInterval, length) {\n var segmentWidth = this.updateSegmentWidth(this.scale);\n var rulerSize = this.getRulerSize();\n tickInterval = tickInterval * (length - 1);\n length = ((tickInterval % segmentWidth) === 0) ? rulerSize : rulerSize * 0.3;\n return length;\n };\n Ruler.prototype.createTick = function (svg, tickInterval, length, run) {\n var ruler;\n var line;\n var linePoint = this.getLinePoint(svg, tickInterval, length);\n var rulerSize = this.getRulerSize();\n var args;\n var attr;\n var isHorizontal = (this.orientation === 'Horizontal') ? true : false;\n var isRightOrBottom = (this.tickAlignment === 'RightOrBottom') ? true : false;\n var arrangeTick = getFunction(this.arrangeTick);\n args = { ruler: ruler, tickLength: linePoint, tickInterval: ((this.segmentWidth / this.interval) * (length - 1)) };\n if (arrangeTick) {\n arrangeTick(args);\n }\n linePoint = args.tickLength;\n var point = tickInterval * (length - 1);\n var x1 = isHorizontal ? point : (isRightOrBottom ? rulerSize : 0);\n var x2 = isHorizontal ? point : (isRightOrBottom ? (rulerSize - linePoint) : (rulerSize - (rulerSize - linePoint)));\n var y1 = isHorizontal ? (isRightOrBottom ? rulerSize : (rulerSize - (rulerSize - linePoint))) : point;\n var y2 = isHorizontal ? (isRightOrBottom ? (rulerSize - linePoint) : 0) : point;\n attr = { 'x1': x1, 'y1': y1, 'x2': x2, 'y2': y2, 'stroke-width': '1', 'stroke': 'black' };\n line = createSvgElement('line', attr);\n line.setAttribute('class', 'e-ruler-tick');\n return line;\n };\n Ruler.prototype.createTickLabel = function (svg, segment) {\n var text;\n if (segment) {\n var attr = { 'class': 'e-ruler-tick-label' };\n text = createSvgElement('text', attr);\n segment.appendChild(text);\n }\n return text;\n };\n /**\n * @private\n * @param scale\n */\n Ruler.prototype.updateSegmentWidth = function (scale) {\n if (this.segmentWidth !== 100) {\n return this.segmentWidth;\n }\n var five = 25;\n var multiples = 1;\n var div;\n var scaleRound;\n var fifty = 100;\n scaleRound = Math.pow(2, Math.round(Math.log(scale) / Math.log(2)));\n div = fifty;\n div = (fifty / scaleRound);\n while (div > 100) {\n multiples /= 10;\n div /= 10;\n }\n while (div < 25) {\n multiples *= 10;\n div *= 10;\n }\n if (div >= five && div % five !== 0) {\n div = Math.round(div / five) * five;\n }\n return div * scale / multiples;\n };\n Ruler.prototype.createMarkerLine = function (rulerSvg, rulerObj, attr) {\n var line;\n if (rulerObj) {\n line = rulerSvg.getElementById(rulerObj.id + '_marker');\n if (line) {\n line.parentNode.removeChild(line);\n }\n line = createSvgElement('line', attr);\n }\n return line;\n };\n /**\n * @private\n * @param rulerObj\n * @param currentPoint\n */\n Ruler.prototype.drawRulerMarker = function (rulerObj, currentPoint, offset) {\n var rulerSvg;\n var rulerSize;\n var scale;\n var diff;\n var i;\n var attr;\n var line;\n var isHorizontal = this.orientation === 'Horizontal' ? true : false;\n var rulerSvgElements = rulerObj.getElementsByTagName('svg');\n for (i = 0; i < rulerSvgElements.length; i++) {\n if (rulerSvgElements[i]) {\n rulerSvg = rulerSvgElements[i];\n }\n break;\n }\n if (rulerSvg) {\n rulerSize = this.getRulerSize();\n attr = {\n 'id': rulerObj.id + '_marker', 'x1': 0, 'y1': 0, 'x2': (isHorizontal ? 0 : rulerSize),\n 'y2': (isHorizontal ? rulerSize : 0), 'stroke': this.markerColor, 'stroke-width': 1.5,\n 'class': 'e-d-ruler-marker'\n };\n line = this.createMarkerLine(rulerSvg, rulerObj, attr);\n scale = this.scale;\n diff = this.offset - this.defStartValue;\n var point = isHorizontal ? currentPoint.x : currentPoint.y;\n var move = (point * scale) + offset + diff;\n line.setAttribute('transform', 'translate(' + (isHorizontal ? ((move + 0.5) + ' 0.5') : ('0.5 ' + (move + 0.5))) + ')');\n rulerSvg.appendChild(line);\n }\n };\n Ruler.prototype.getRulerGeometry = function () {\n return new Size(this.element ? this.element.getBoundingClientRect().width : 0, this.element ? this.element.getBoundingClientRect().height : 0);\n };\n Ruler.prototype.getRulerSize = function () {\n return this.thickness;\n };\n Ruler.prototype.getRulerSVG = function (rulerGeometry) {\n var rulerSpace;\n var rulerSize = this.getRulerSize();\n var svg;\n if (this.element) {\n rulerSpace = document.getElementById(this.element.id + '_ruler_space');\n if (rulerSpace) {\n var attr = {\n 'id': this.element.id + '_Ruler_svg',\n width: this.orientation === 'Horizontal' ? (rulerGeometry.width + 200) : rulerSize + 'px',\n height: this.orientation === 'Horizontal' ? rulerSize : (rulerGeometry.height + 200) + 'px',\n style: 'position:inherit;'\n };\n svg = createSvgElement('svg', attr);\n if (rulerSpace.childNodes.length > 0) {\n for (var i = rulerSpace.childNodes.length - 1; i >= 0; i--) {\n rulerSpace.childNodes[i].parentNode.removeChild(rulerSpace.childNodes[i]);\n }\n }\n rulerSpace.appendChild(svg);\n }\n }\n return svg;\n };\n /**\n * Method to bind events for the ruler\n */\n Ruler.prototype.wireEvents = function () {\n //wire Events\n };\n /**\n * Method to unbind events for the ruler\n */\n Ruler.prototype.unWireEvents = function () {\n //unWire Events\n };\n __decorate([\n Property(5)\n ], Ruler.prototype, \"interval\", void 0);\n __decorate([\n Property(100)\n ], Ruler.prototype, \"segmentWidth\", void 0);\n __decorate([\n Property('Horizontal')\n ], Ruler.prototype, \"orientation\", void 0);\n __decorate([\n Property('RightOrBottom')\n ], Ruler.prototype, \"tickAlignment\", void 0);\n __decorate([\n Property('red')\n ], Ruler.prototype, \"markerColor\", void 0);\n __decorate([\n Property(25)\n ], Ruler.prototype, \"thickness\", void 0);\n __decorate([\n Property(null)\n ], Ruler.prototype, \"arrangeTick\", void 0);\n __decorate([\n Property(400)\n ], Ruler.prototype, \"length\", void 0);\n return Ruler;\n}(Component));\nexport { Ruler };\n","import { Size } from './../primitives/size';\nimport { Point } from './../primitives/point';\nimport { processPathData, pathSegmentCollection, getRectanglePath } from './../utility/path-util';\nimport { overFlow } from './../utility/base-util';\nimport { createHtmlElement } from './../utility/dom-util';\n/**\n * Canvas Renderer\n */\n/** @private */\nvar CanvasRenderer = /** @class */ (function () {\n function CanvasRenderer() {\n }\n CanvasRenderer.getContext = function (canvas) {\n return canvas.getContext('2d');\n };\n CanvasRenderer.setCanvasSize = function (canvas, width, height) {\n if (canvas) {\n canvas.setAttribute('width', width.toString());\n canvas.setAttribute('height', height.toString());\n }\n };\n ;\n CanvasRenderer.prototype.renderGradient = function (options, ctx, x, y) {\n var max;\n var min;\n var grd;\n if (options.gradient.type !== 'None') {\n for (var i = 0; i < options.gradient.stops.length; i++) {\n max = max !== undefined ? options.gradient.stops[i].offset : Math.max(max, options.gradient.stops[i].offset);\n min = min !== undefined ? options.gradient.stops[i].offset : Math.min(min, options.gradient.stops[i].offset);\n }\n if (options.gradient.type === 'Linear') {\n var linear = options.gradient;\n grd = ctx.createLinearGradient(x + linear.x1, y + linear.y1, x + linear.x2, y + linear.y2);\n }\n else {\n var radial = options.gradient;\n grd = ctx.createRadialGradient(x + radial.fx, y + radial.fy, 0, x + radial.cx, y + radial.cy, radial.r);\n }\n for (var i = 0; i < options.gradient.stops.length; i++) {\n var stop_1 = options.gradient.stops[i];\n var offset = min < 0 ? (max + stop_1.offset) / (2 * max) : stop_1.offset / max;\n grd.addColorStop(offset, stop_1.color);\n }\n ctx.fillStyle = grd;\n }\n return ctx;\n };\n CanvasRenderer.prototype.renderShadow = function (options, canvas, collection) {\n if (collection === void 0) { collection = null; }\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.save();\n ctx.beginPath();\n ctx.strokeStyle = ctx.fillStyle = options.shadow.color;\n ctx.globalAlpha = options.shadow.opacity;\n var ptModel = { x: 0, y: 0 };\n var point = Point.transform(ptModel, options.shadow.angle, options.shadow.distance);\n var transX = options.x + point.x;\n var transY = options.y + point.y;\n var pivotX = transX + options.width * options.pivotX;\n var pivotY = transY + options.height * options.pivotY;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n if (collection) {\n ctx.translate(transX, transY);\n this.renderPath(canvas, options, collection);\n ctx.translate(-transX, -transY);\n }\n else {\n ctx.rect(transX, transY, options.width, options.height);\n ctx.fillRect(transX, transY, options.width, options.height);\n }\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n ctx.restore();\n };\n CanvasRenderer.createCanvas = function (id, width, height) {\n var canvasObj = createHtmlElement('canvas', { 'id': id });\n this.setCanvasSize(canvasObj, width, height);\n return canvasObj;\n };\n ;\n CanvasRenderer.prototype.setStyle = function (canvas, style) {\n var ctx = CanvasRenderer.getContext(canvas);\n if (style.fill === 'none') {\n style.fill = 'transparent';\n }\n if (style.stroke === 'none') {\n style.stroke = 'transparent';\n }\n ctx.strokeStyle = style.stroke;\n ctx.lineWidth = style.strokeWidth;\n if (style.strokeWidth === 0) {\n ctx.strokeStyle = 'transparent';\n }\n ctx.globalAlpha = style.opacity;\n var dashArray = [];\n if (style.dashArray) {\n dashArray = this.parseDashArray(style.dashArray);\n }\n ctx.setLineDash(dashArray);\n if (style.gradient && style.gradient.type !== 'None') {\n this.renderGradient(style, ctx, 0, 0);\n }\n else {\n ctx.fillStyle = style.fill;\n }\n };\n CanvasRenderer.prototype.rotateContext = function (canvas, angle, x, y) {\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.translate(x, y);\n ctx.rotate(angle * Math.PI / 180);\n ctx.translate(-x, -y);\n };\n CanvasRenderer.prototype.setFontStyle = function (canvas, text) {\n var ctx = CanvasRenderer.getContext(canvas);\n var font = '';\n if (text.italic) {\n font += 'italic ';\n }\n if (text.bold) {\n font += 'bold ';\n }\n font += (text.fontSize) + 'px ';\n font += text.fontFamily;\n ctx.font = font;\n };\n CanvasRenderer.prototype.parseDashArray = function (dashArray) {\n var dashes = [];\n var separator = dashArray.indexOf(' ') !== -1 ? ' ' : ',';\n var splittedDashes = dashArray.split(separator);\n for (var _i = 0, splittedDashes_1 = splittedDashes; _i < splittedDashes_1.length; _i++) {\n var i = splittedDashes_1[_i];\n dashes.push(Number(i));\n }\n return dashes;\n };\n //Rendering Part\n CanvasRenderer.prototype.drawRectangle = function (canvas, options) {\n if (options.visible === true) {\n if (options.cornerRadius) {\n options.data = getRectanglePath(options.cornerRadius, options.height, options.width);\n this.drawPath(canvas, options);\n }\n else {\n var ctx = CanvasRenderer.getContext(canvas);\n if (options.shadow) {\n this.renderShadow(options, canvas);\n }\n ctx.save();\n ctx.beginPath();\n var cornerRadius = options.cornerRadius;\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n this.setStyle(canvas, options);\n ctx.rect(options.x, options.y, options.width, options.height);\n ctx.fillRect(options.x, options.y, options.width, options.height);\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n ctx.restore();\n }\n }\n };\n // public updateSelectionRegion(canvas: HTMLCanvasElement, options: RectAttributes): void {\n // this.drawRectangle(canvas, options);\n // }\n // public drawLine(canvas: HTMLCanvasElement, options: LineAttributes): void {\n // let ctx: CanvasRenderingContext2D = CanvasRenderer.getContext(canvas);\n // ctx.save();\n // ctx.beginPath();\n // let pivotX: number = options.x + options.width * options.pivotX;\n // let pivotY: number = options.y + options.height * options.pivotY;\n // this.rotateContext(canvas, options.angle, pivotX, pivotY);\n // this.setStyle(canvas, options as StyleAttributes);\n // ctx.translate(options.x, options.y);\n // ctx.moveTo(options.startPoint.x, options.startPoint.y);\n // ctx.lineTo(options.endPoint.x, options.endPoint.y);\n // ctx.translate(-options.x, -options.y);\n // ctx.stroke();\n // ctx.closePath();\n // ctx.restore();\n // }\n // public drawCircle(canvas: HTMLCanvasElement, options: CircleAttributes): void {\n // let ctx: CanvasRenderingContext2D = CanvasRenderer.getContext(canvas);\n // ctx.save();\n // ctx.beginPath();\n // let pivotY: number = options.y + options.height * options.pivotY;\n // let pivotX: number = options.x + options.width * options.pivotX;\n // this.setStyle(canvas, options as StyleAttributes);\n // this.rotateContext(canvas, options.angle, pivotX, pivotY);\n // ctx.arc(options.centerX, options.centerY, options.radius, 0, 2 * Math.PI);\n // ctx.fill();\n // ctx.stroke();\n // ctx.closePath();\n // ctx.restore();\n // }\n CanvasRenderer.prototype.drawPath = function (canvas, options) {\n var collection = [];\n collection = processPathData(options.data);\n collection = pathSegmentCollection(collection);\n if (options.shadow) {\n this.renderShadow(options, canvas, collection);\n }\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.save();\n ctx.beginPath();\n var pivotY = options.y + options.height * options.pivotY;\n var pivotX = options.x + options.width * options.pivotX;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n this.setStyle(canvas, options);\n ctx.translate(options.x, options.y);\n this.renderPath(canvas, options, collection);\n ctx.fill();\n ctx.translate(-options.x, -options.y);\n ctx.stroke();\n ctx.restore();\n };\n CanvasRenderer.prototype.renderPath = function (canvas, options, collection) {\n if (options.visible === true) {\n var ctx = CanvasRenderer.getContext(canvas);\n var x0 = void 0;\n var y0 = void 0;\n var x1 = void 0;\n var y1 = void 0;\n var x2 = void 0;\n var y2 = void 0;\n var x = void 0;\n var y = void 0;\n var length_1;\n var i = void 0;\n var newSeg = void 0;\n var segs = collection;\n for (x = 0, y = 0, i = 0, length_1 = segs.length; i < length_1; ++i) {\n var obj = segs[i];\n var seg = obj;\n var char = seg.command;\n if ('x1' in seg) {\n x1 = seg.x1;\n }\n if ('x2' in seg) {\n x2 = seg.x2;\n }\n if ('y1' in seg) {\n y1 = seg.y1;\n }\n if ('y2' in seg) {\n y2 = seg.y2;\n }\n if ('x' in seg) {\n x = seg.x;\n }\n if ('y' in seg) {\n y = seg.y;\n }\n switch (char) {\n case 'M':\n ctx.moveTo(x, y);\n seg.x = x;\n seg.y = y;\n break;\n case 'L':\n ctx.lineTo(x, y);\n seg.x = x;\n seg.y = y;\n break;\n case 'C':\n ctx.bezierCurveTo(x1, y1, x2, y2, x, y);\n seg.x = x;\n seg.y = y;\n seg.x1 = x1;\n seg.y1 = y1;\n seg.x2 = x2;\n seg.y2 = y2;\n break;\n case 'Q':\n ctx.quadraticCurveTo(x1, y1, x, y);\n seg.x = x;\n seg.y = y;\n seg.x1 = x1;\n seg.y1 = y1;\n break;\n case 'A':\n var curr = { x: x0, y: y0 };\n var rx = seg.r1;\n var ry = seg.r2;\n var xAxisRotation = seg.angle * (Math.PI / 180.0);\n var largeArc = seg.largeArc;\n var sweep = seg.sweep;\n var cp = { x: x, y: y };\n var currp = {\n x: Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0,\n y: -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0\n };\n var l = Math.pow(currp.x, 2) / Math.pow(rx, 2) + Math.pow(currp.y, 2) / Math.pow(ry, 2);\n if (l > 1) {\n rx *= Math.sqrt(l);\n ry *= Math.sqrt(l);\n }\n var k = (Math.pow(ry, 2) * Math.pow(currp.x, 2));\n var s = (largeArc === sweep ? -1 : 1) * Math.sqrt(((Math.pow(rx, 2) * Math.pow(ry, 2)) - (Math.pow(rx, 2) * Math.pow(currp.y, 2)) - k) /\n (Math.pow(rx, 2) * Math.pow(currp.y, 2) + Math.pow(ry, 2) * Math.pow(currp.x, 2)));\n if (isNaN(s)) {\n s = 0;\n }\n var cpp = { x: s * rx * currp.y / ry, y: s * -ry * currp.x / rx };\n var centp = {\n x: (curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y,\n y: (curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y\n };\n var a1 = this.a([1, 0], [(currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry]);\n var u = [(currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry];\n var v = [(-currp.x - cpp.x) / rx, (-currp.y - cpp.y) / ry];\n var ad = this.a(u, v);\n if (this.r(u, v) <= -1) {\n ad = Math.PI;\n }\n if (this.r(u, v) >= 1) {\n ad = 0;\n }\n var dir = !sweep ? -1.0 : 1.0;\n var ah = a1 + dir * (ad / 2.0);\n var halfWay = {\n x: centp.x + rx * Math.cos(ah),\n y: centp.y + ry * Math.sin(ah)\n };\n seg.centp = centp;\n seg.xAxisRotation = xAxisRotation;\n seg.rx = rx;\n seg.ry = ry;\n seg.a1 = a1;\n seg.ad = ad;\n seg.sweep = sweep;\n if (ctx != null) {\n var ra = rx > ry ? rx : ry;\n var sx = rx > ry ? 1 : rx / ry;\n var sy = rx > ry ? ry / rx : 1;\n ctx.save();\n ctx.translate(centp.x, centp.y);\n ctx.rotate(xAxisRotation);\n ctx.scale(sx, sy);\n ctx.arc(0, 0, ra, a1, a1 + ad, !sweep);\n ctx.scale(1 / sx, 1 / sy);\n ctx.rotate(-xAxisRotation);\n ctx.translate(-centp.x, -centp.y);\n ctx.restore();\n }\n break;\n case 'Z':\n case 'z':\n ctx.closePath();\n x = x0;\n y = y0;\n break;\n }\n x0 = x;\n y0 = y;\n }\n }\n };\n CanvasRenderer.prototype.drawText = function (canvas, options) {\n if (options.content && options.visible === true) {\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.save();\n this.setStyle(canvas, options);\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n this.setFontStyle(canvas, options);\n var i = 0;\n var childNodes = [];\n childNodes = options.childNodes;\n var wrapBounds = options.wrapBounds;\n ctx.fillStyle = options.color;\n if (wrapBounds) {\n var position = this.labelAlign(options, wrapBounds, childNodes);\n for (i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n var offsetX = position.x + child.x - wrapBounds.x;\n var offsetY = position.y + child.dy * i + ((options.fontSize) * 0.8);\n if (wrapBounds.width > options.width && options.textOverflow !== 'Wrap') {\n child.text = overFlow(child.text, options);\n }\n ctx.fillText(child.text, offsetX, offsetY);\n if (options.textDecoration === 'Underline'\n || options.textDecoration === 'Overline'\n || options.textDecoration === 'LineThrough') {\n var startPointX = offsetX;\n var startPointY = void 0;\n var textlength = ctx.measureText(child.text).width;\n var endPointX = offsetX + textlength;\n var endPointY = void 0;\n switch (options.textDecoration) {\n case 'Underline':\n startPointY = offsetY + 2;\n endPointY = offsetY + 2;\n break;\n case 'Overline':\n startPointY = (position.y + child.dy * i);\n endPointY = (position.y + child.dy * i);\n break;\n case 'LineThrough':\n startPointY = ((offsetY + position.y + child.dy * i) / 2) + 2;\n endPointY = ((offsetY + position.y + child.dy * i) / 2) + 2;\n }\n ctx.beginPath();\n ctx.moveTo(startPointX, startPointY);\n ctx.lineTo(endPointX, endPointY);\n ctx.strokeStyle = options.color;\n ctx.lineWidth = options.fontSize * .08;\n ctx.globalAlpha = options.opacity;\n ctx.stroke();\n }\n }\n }\n ctx.restore();\n }\n };\n CanvasRenderer.prototype.loadImage = function (ctx, obj) {\n ctx.rotate(obj.angle * Math.PI / 180);\n var image = new Image();\n image.src = obj.source;\n this.image(ctx, image, obj.x, obj.y, obj.width, obj.height, obj);\n ctx.rotate(-(obj.angle * Math.PI / 180));\n };\n CanvasRenderer.prototype.drawImage = function (canvas, obj, parentSvg, fromPalette) {\n var _this = this;\n if (obj.visible) {\n var ctx_1 = CanvasRenderer.getContext(canvas);\n ctx_1.save();\n var pivotX = obj.x + obj.width * obj.pivotX;\n var pivotY = obj.y + obj.height * obj.pivotY;\n var imageObj = new Image();\n imageObj.src = obj.source;\n /**\n * Since Clipping portion for node with slice option is not calculated properly\n * if (obj.sourceX !== undefined && obj.sourceY !== undefined && obj.sourceWidth !== undefined\n * && obj.sourceHeight !== undefined) {\n * ctx.drawImage(imageObj, obj.sourceX, obj.sourceY, obj.sourceWidth, obj.sourceHeight, obj.x, obj.y, obj.width, obj.height);\n * } else {\n * ctx.drawImage(imageObj, obj.x, obj.y, obj.width, obj.height);\n * }\n */\n if (!fromPalette) {\n this.loadImage(ctx_1, obj);\n }\n else {\n imageObj.onload = function () {\n _this.loadImage(ctx_1, obj);\n };\n }\n ctx_1.restore();\n }\n };\n CanvasRenderer.prototype.image = function (ctx, image, x, y, width, height, alignOptions) {\n ctx.beginPath();\n var srcWidth = image.width;\n var srcHeight = image.height;\n var destinationW = width;\n var destinationH = height;\n var resultWidth = 0;\n var resultHeight = 0;\n if (alignOptions && alignOptions.alignment !== 'None') {\n var xalign = alignOptions.alignment.toLowerCase().substr(1, 3);\n var yalign = alignOptions.alignment.toLowerCase().substr(5, 3);\n if (alignOptions.scale === 'Slice') {\n var a = function () {\n resultWidth = destinationW;\n resultHeight = srcHeight * destinationW / srcWidth;\n };\n var b = function () {\n resultWidth = srcWidth * destinationH / srcHeight;\n resultHeight = destinationH;\n };\n if (destinationW > destinationH) {\n a();\n if (destinationH > resultHeight) {\n b();\n }\n }\n else if (destinationW === destinationH) {\n if (srcWidth > srcHeight) {\n b();\n }\n else {\n a();\n }\n }\n else {\n b();\n if (destinationW > resultWidth) {\n a();\n }\n }\n var x1 = this.getSliceOffset(xalign, resultWidth, destinationW, srcWidth);\n var y1 = this.getSliceOffset(yalign, resultHeight, destinationH, srcHeight);\n var sWidth = srcWidth - x1;\n var sHeight = srcHeight - y1;\n var dWidth = resultWidth - (x1 * (resultWidth / srcWidth));\n var dHeight = resultHeight - (y1 * (resultHeight / srcHeight));\n var canvas1 = createHtmlElement('canvas', { 'width': width.toString(), 'height': height.toString() });\n var ctx1 = canvas1.getContext('2d');\n ctx1.drawImage(image, x1, y1, sWidth, sHeight, 0, 0, dWidth, dHeight);\n ctx.drawImage(canvas1, x, y, width, height);\n }\n else if (alignOptions.scale === 'Meet') {\n var srcRatio = (srcHeight / srcWidth);\n var destRatio = (destinationH / destinationW);\n resultWidth = destRatio > srcRatio ? destinationW : destinationH / srcRatio;\n resultHeight = destRatio > srcRatio ? destinationW * srcRatio : destinationH;\n x += this.getMeetOffset(xalign, resultWidth, destinationW);\n y += this.getMeetOffset(yalign, resultHeight, destinationH);\n ctx.drawImage(image, 0, 0, srcWidth, srcHeight, x, y, resultWidth, resultHeight);\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n ctx.closePath();\n };\n CanvasRenderer.prototype.getSliceOffset = function (arg, res, dest, src) {\n switch (arg) {\n case 'min': return 0;\n case 'mid': return (res - dest) / 2 * src / res;\n case 'max': return (res - dest) * src / res;\n default: return 0;\n }\n };\n CanvasRenderer.prototype.getMeetOffset = function (arg, res, dest) {\n var max = Math.max(res, dest);\n var min = Math.min(res, dest);\n switch (arg) {\n case 'min': return 0;\n case 'mid': return (max - min) / 2;\n case 'max': return max - min;\n default: return 0;\n }\n };\n //end region\n // vector magnitude\n CanvasRenderer.prototype.m = function (v) { return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2)); };\n // ratio between two vectors\n CanvasRenderer.prototype.r = function (u, v) { return (u[0] * v[0] + u[1] * v[1]) / (this.m(u) * this.m(v)); };\n // angle between two vectors\n CanvasRenderer.prototype.a = function (u, v) { return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(this.r(u, v)); };\n // text utility\n CanvasRenderer.prototype.labelAlign = function (text, wrapBounds, childNodes) {\n var bounds = new Size(wrapBounds.width, childNodes.length * (text.fontSize * 1.2));\n var position = { x: 0, y: 0 };\n var labelX = text.x;\n var labelY = text.y;\n var offsetx = text.width * 0.5;\n var offsety = text.height * 0.5;\n var pointx = offsetx;\n var pointy = offsety;\n if (text.textAlign === 'left') {\n pointx = 0;\n }\n else if (text.textAlign === 'center') {\n if (wrapBounds.width > text.width && (text.textOverflow === 'Ellipsis' || text.textOverflow === 'Clip')) {\n pointx = 0;\n }\n else {\n pointx = text.width * 0.5;\n }\n }\n else if (text.textAlign === 'right') {\n pointx = (text.width * 1);\n }\n position.x = labelX + pointx + (wrapBounds ? wrapBounds.x : 0);\n position.y = labelY + pointy - bounds.height / 2;\n return position;\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","import { Point } from './../primitives/point';\nimport { Size } from './../primitives/size';\nimport { pathSegmentCollection, processPathData } from './../utility/path-util';\nimport { setAttributeSvg } from './../utility/dom-util';\nimport { overFlow, wordBreakToString, cornersPointsBeforeRotation } from './../utility/base-util';\nimport { CanvasRenderer } from './../rendering/canvas-renderer';\nimport { createSvgElement, createHtmlElement, getBackgroundLayerSvg } from '../utility/dom-util';\n/**\n * SVG Renderer\n */\n/** @private */\nvar SvgRenderer = /** @class */ (function () {\n function SvgRenderer() {\n }\n SvgRenderer.prototype.renderShadow = function (options, canvas, collection, parentSvg) {\n if (collection === void 0) { collection = null; }\n var pointModel = { x: 0, y: 0 };\n var point = Point.transform(pointModel, options.shadow.angle, options.shadow.distance);\n var tX = options.x + point.x;\n var tY = options.y + point.y;\n var pivotX = tX + options.width * options.pivotX;\n var pivotY = tY + options.height * options.pivotY;\n var type;\n var shadowElement;\n if (parentSvg) {\n shadowElement = parentSvg.getElementById(canvas.id + '_shadow');\n }\n if (!shadowElement) {\n type = collection ? 'path' : 'rect';\n shadowElement = document.createElementNS('http://www.w3.org/2000/svg', type);\n canvas.appendChild(shadowElement);\n }\n var attr = {\n 'id': canvas.id + '_shadow', 'fill': options.shadow.color, 'stroke': options.shadow.color,\n 'opacity': options.shadow.opacity.toString(),\n 'transform': 'rotate(' + options.angle + ',' + (options.x + options.width * options.pivotX) + ','\n + (options.y + options.height * options.pivotY) + ')' +\n 'translate(' + (options.x + point.x) + ',' + (options.y + point.y) + ')'\n };\n if (parentSvg) {\n var svgContainer = parentSvg.getElementById(canvas.id);\n if (svgContainer) {\n svgContainer.insertBefore(shadowElement, svgContainer.firstChild);\n }\n }\n setAttributeSvg(shadowElement, attr);\n if (!collection) {\n setAttributeSvg(shadowElement, { 'width': options.width, 'height': options.height });\n }\n else if (collection) {\n this.renderPath(shadowElement, options, collection);\n }\n };\n SvgRenderer.prototype.parseDashArray = function (dashArray) {\n var dashes = [];\n return dashes;\n };\n SvgRenderer.prototype.drawRectangle = function (svg, options, diagramId, onlyRect, isSelector, parentSvg, ariaLabel) {\n if (options.shadow && !onlyRect) {\n this.renderShadow(options, svg, undefined, parentSvg);\n }\n var id;\n if (options.id === svg.id) {\n id = options.id + '_container';\n }\n else {\n id = options.id;\n }\n var rect;\n if (parentSvg) {\n rect = parentSvg.getElementById(id);\n }\n if (!rect || isSelector) {\n rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n svg.appendChild(rect);\n }\n var shadowElement;\n if (parentSvg && !options.shadow) {\n shadowElement = parentSvg.getElementById(options.id + '_groupElement_shadow');\n if (shadowElement) {\n shadowElement.parentNode.removeChild(shadowElement);\n }\n }\n var attr = {\n 'id': id, 'x': options.x.toString(), 'y': options.y.toString(), 'width': options.width.toString(),\n 'height': options.height.toString(), 'visibility': options.visible ? 'visible' : 'hidden',\n 'transform': 'rotate(' + options.angle + ','\n + (options.x + options.width * options.pivotX) + ',' + (options.y + options.height * options.pivotY) + ')',\n 'rx': options.cornerRadius || 0, 'ry': options.cornerRadius || 0, 'opacity': options.opacity,\n 'aria-label': ariaLabel ? ariaLabel : ''\n };\n if (options.class) {\n attr['class'] = options.class;\n }\n var poiterEvents = 'pointer-events';\n if (!ariaLabel) {\n attr[poiterEvents] = 'none';\n }\n setAttributeSvg(rect, attr);\n this.setSvgStyle(rect, options, diagramId);\n };\n SvgRenderer.prototype.updateSelectionRegion = function (gElement, options) {\n var rect;\n rect = gElement.parentNode.getElementById(options.id);\n var attr;\n attr = {\n 'id': options.id, 'x': options.x.toString(), 'y': options.y.toString(), 'width': options.width.toString(),\n 'height': options.height.toString(), 'transform': 'rotate(' + options.angle + ','\n + (options.x + options.width * options.pivotX) + ',' + (options.y + options.height * options.pivotY) + ')',\n class: 'e-diagram-selected-region'\n };\n if (!rect) {\n rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n gElement.appendChild(rect);\n }\n this.setSvgStyle(rect, options);\n setAttributeSvg(rect, attr);\n };\n SvgRenderer.prototype.createGElement = function (elementType, attribute) {\n var gElement = createSvgElement(elementType, attribute);\n return gElement;\n };\n /** @private */\n SvgRenderer.prototype.drawLine = function (gElement, options) {\n var line = document.createElementNS('http://www.w3.org/2000/svg', 'line');\n this.setSvgStyle(line, options);\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n var kk = '';\n var attr = {\n 'id': options.id,\n 'x1': options.startPoint.x + options.x,\n 'y1': options.startPoint.y + options.y,\n 'x2': options.endPoint.x + options.x,\n 'y2': options.endPoint.y + options.y,\n 'stroke': options.stroke,\n 'stroke-width': options.strokeWidth.toString(), 'opacity': options.opacity.toString(),\n 'transform': 'rotate(' + options.angle + ' ' + pivotX + ' ' + pivotY + ')',\n 'visibility': options.visible ? 'visible' : 'hidden',\n };\n if (options.class) {\n attr['class'] = options.class;\n }\n setAttributeSvg(line, attr);\n gElement.appendChild(line);\n };\n /** @private */\n SvgRenderer.prototype.drawCircle = function (gElement, options, enableSelector, ariaLabel) {\n var circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n this.setSvgStyle(circle, options);\n var classval = options.class || '';\n if (!enableSelector) {\n classval += ' e-disabled';\n }\n var attr = {\n 'id': options.id,\n 'cx': options.centerX,\n 'cy': options.centerY,\n 'r': options.radius,\n 'visibility': options.visible ? 'visible' : 'hidden',\n 'class': classval,\n 'aria-label': ariaLabel ? ariaLabel['aria-label'] : ''\n };\n circle.style.display = options.visible ? 'block' : 'none';\n setAttributeSvg(circle, attr);\n gElement.appendChild(circle);\n };\n SvgRenderer.prototype.drawPath = function (svg, options, diagramId, isSelector, parentSvg, ariaLabel) {\n var id;\n var x = Math.floor((Math.random() * 10) + 1);\n id = svg.id + '_shape' + x.toString();\n var collection = [];\n collection = processPathData(options.data);\n collection = pathSegmentCollection(collection);\n if (options.shadow) {\n this.renderShadow(options, svg, collection, parentSvg);\n }\n var shadowElement;\n if (parentSvg && !options.shadow) {\n shadowElement = parentSvg.getElementById(options.id + '_groupElement_shadow');\n if (shadowElement) {\n shadowElement.parentNode.removeChild(shadowElement);\n }\n }\n var path;\n if (parentSvg) {\n path = parentSvg.getElementById(options.id);\n }\n if (!path || isSelector) {\n path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n svg.appendChild(path);\n }\n this.renderPath(path, options, collection);\n var attr = {\n 'id': options.id, 'transform': 'rotate(' + options.angle + ',' + (options.x + options.width * options.pivotX) + ','\n + (options.y + options.height * options.pivotY) + ')' + 'translate(' + (options.x) + ',' + (options.y) + ')',\n 'visibility': options.visible ? 'visible' : 'hidden', 'opacity': options.opacity,\n 'aria-label': ariaLabel ? ariaLabel : ''\n };\n if (options.class) {\n attr['class'] = options.class;\n }\n setAttributeSvg(path, attr);\n this.setSvgStyle(path, options, diagramId);\n };\n SvgRenderer.prototype.renderPath = function (svg, options, collection) {\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n var segments = collection;\n var d = '';\n for (x = 0, y = 0, i = 0, length = segments.length; i < length; ++i) {\n var obj = segments[i];\n var segment = obj;\n var char = segment.command;\n if ('x1' in segment) {\n x1 = segment.x1;\n }\n if ('x2' in segment) {\n x2 = segment.x2;\n }\n if ('y1' in segment) {\n y1 = segment.y1;\n }\n if ('y2' in segment) {\n y2 = segment.y2;\n }\n if ('x' in segment) {\n x = segment.x;\n }\n if ('y' in segment) {\n y = segment.y;\n }\n switch (char) {\n case 'M':\n d = d + 'M' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'L':\n d = d + 'L' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'C':\n d = d + 'C' + x1.toString() + ',' + y1.toString() + ',' + x2.toString() + ',' + y2.toString() + ',';\n d += x.toString() + ',' + y.toString() + ' ';\n break;\n case 'Q':\n d = d + 'Q' + x1.toString() + ',' + y1.toString() + ',' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'A':\n d = d + 'A' + segment.r1.toString() + ',' + segment.r2.toString() + ',' + segment.angle.toString() + ',';\n d += segment.largeArc.toString() + ',' + segment.sweep + ',' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'Z':\n case 'z':\n d = d + 'Z' + ' ';\n break;\n }\n }\n svg.setAttribute('d', d);\n };\n SvgRenderer.prototype.setSvgFontStyle = function (text, options) {\n text.style.fontStyle = options.italic ? 'italic' : 'normal';\n text.style.fontWeight = options.bold ? 'bold' : 'normal';\n text.style.fontSize = options.fontSize.toString() + 'px';\n text.style.fontFamily = options.fontFamily;\n };\n SvgRenderer.prototype.drawText = function (canvas, options, parentSvg, ariaLabel, diagramId) {\n if (options.content !== undefined) {\n var textNode = void 0;\n var childNodes = void 0;\n var wrapBounds = void 0;\n var position = void 0;\n var child = void 0;\n var tspanElement = void 0;\n var offsetX = 0;\n var offsetY = 0;\n var i = 0;\n var text = void 0;\n if (parentSvg) {\n text = parentSvg.getElementById(options.id + '_text');\n }\n if (text) {\n if (options.doWrap) {\n while (text.firstChild) {\n text.removeChild(text.firstChild);\n }\n }\n }\n else {\n options.doWrap = true;\n text = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n if (options.whiteSpace === 'pre-wrap') {\n text.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n }\n canvas.appendChild(text);\n }\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n if (options.doWrap) {\n this.setSvgStyle(text, options, diagramId);\n this.setSvgFontStyle(text, options);\n textNode = document.createTextNode(options.content);\n childNodes = options.childNodes;\n wrapBounds = options.wrapBounds;\n position = this.svgLabelAlign(options, wrapBounds, childNodes);\n if (wrapBounds.width > options.width && options.textOverflow !== 'Wrap') {\n childNodes[0].text = overFlow(options.content, options);\n }\n for (i = 0; i < childNodes.length; i++) {\n tspanElement = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n textNode = document.createTextNode(childNodes[i].text);\n child = childNodes[i];\n offsetX = position.x + child.x - wrapBounds.x;\n offsetY = position.y + child.dy * (i) + ((options.fontSize) * 0.8);\n setAttributeSvg(tspanElement, { 'x': offsetX.toString(), 'y': offsetY.toString() });\n text.setAttribute('fill', child.text);\n tspanElement.appendChild(textNode);\n text.appendChild(tspanElement);\n }\n }\n if (options.textDecoration && options.textDecoration === 'LineThrough') {\n options.textDecoration = wordBreakToString(options.textDecoration);\n }\n var attr = {\n 'id': options.id + '_text', 'fill': options.color, 'visibility': options.visible ? 'visible' : 'hidden',\n 'text-decoration': options.textDecoration, 'transform': 'rotate(' + options.angle + ','\n + (pivotX) + ',' + (pivotY) + ')'\n + 'translate(' + (options.x) + ',' + (options.y) + ')', 'opacity': options.opacity,\n 'aria-label': ariaLabel ? ariaLabel : ''\n };\n setAttributeSvg(text, attr);\n }\n };\n SvgRenderer.prototype.drawImage = function (canvas, obj, parentSvg, fromPalette) {\n var id = obj.id + '_image';\n var image;\n if (parentSvg) {\n image = parentSvg.getElementById(obj.id + 'image');\n }\n if (!image) {\n image = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n canvas.appendChild(image);\n }\n var imageObj = new Image();\n imageObj.src = obj.source;\n var scale = obj.scale !== 'None' ? obj.scale : '';\n var imgAlign = obj.alignment;\n var aspectRatio = imgAlign.charAt(0).toLowerCase() + imgAlign.slice(1);\n if (scale) {\n aspectRatio += ' ' + scale.charAt(0).toLowerCase() + scale.slice(1);\n }\n var attr = {\n 'id': obj.id + 'image', 'x': obj.x.toString(), 'y': obj.y.toString(), 'transform': 'rotate(' + obj.angle + ','\n + (obj.x + obj.width * obj.pivotX) + ',' + (obj.y + obj.height * obj.pivotY) + ')',\n 'width': obj.width.toString(), 'visibility': obj.visible ? 'visible' : 'hidden',\n 'height': obj.height.toString(), 'preserveAspectRatio': aspectRatio\n };\n setAttributeSvg(image, attr);\n image.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', imageObj.src.toString());\n };\n /** @private */\n SvgRenderer.prototype.drawHTMLContent = function (element, canvas, transform, value) {\n var htmlElement;\n if (canvas) {\n var i = void 0;\n for (i = 0; i < canvas.childNodes.length; i++) {\n if (canvas.childNodes[i].id === element.id + '_html_element') {\n htmlElement = canvas.childNodes[i];\n }\n }\n }\n if (!htmlElement) {\n var attr = {\n 'id': element.id + '_html_element',\n 'class': 'foreign-object'\n };\n htmlElement = createHtmlElement('div', attr);\n htmlElement.appendChild(element.template.cloneNode(true));\n canvas.appendChild(htmlElement);\n }\n var point = cornersPointsBeforeRotation(element).topLeft;\n htmlElement.setAttribute('style', 'height:' + (element.actualSize.height) + 'px; width:' + (element.actualSize.width) +\n 'px;left:' + point.x + 'px; top:' + point.y + 'px;' +\n 'position:absolute;transform:rotate(' + element.parentTransform + 'deg);' +\n 'pointer-events:' + (value ? 'all' : 'none')\n + ';visibility:' + ((element.visible) ? 'visible' : 'hidden') + ';opacity:' + element.style.opacity + ';');\n };\n /** @private */\n SvgRenderer.prototype.drawNativeContent = function (element, canvas, height, width, parentSvg) {\n var nativeElement;\n var clipPath;\n if (parentSvg) {\n nativeElement = parentSvg.getElementById(element.id + '_native_element');\n clipPath = parentSvg.getElementById(element.id + '_clip');\n }\n if (!nativeElement) {\n nativeElement = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n nativeElement.setAttribute('id', element.id + '_native_element');\n nativeElement.appendChild(element.template.cloneNode(true));\n canvas.appendChild(nativeElement);\n }\n if (clipPath) {\n nativeElement.removeChild(clipPath);\n }\n nativeElement.setAttribute('style', 'visibility:' +\n ((element.visible) ? 'visible' : 'hidden') + ';opacity:' + element.style.opacity + ';');\n this.setNativTransform(element, nativeElement, height, width);\n if (element.scale === 'Slice') {\n this.drawClipPath(element, nativeElement, height, width, parentSvg);\n }\n setAttributeSvg(nativeElement, element.description ? { 'aria-label': element.description } : {});\n };\n SvgRenderer.prototype.setNativTransform = function (element, nativeElement, height, width) {\n var contentWidth = element.contentSize.width !== 0 ? element.contentSize.width : 1;\n var contentHeight = element.contentSize.height !== 0 ? element.contentSize.height : 1;\n var x = element.templatePosition.x * width / contentWidth;\n var y = element.templatePosition.y * height / contentHeight;\n nativeElement.setAttribute('transform', 'rotate(' + element.parentTransform + ',' + element.offsetX + ',' + element.offsetY +\n ') translate(' + (element.offsetX - x - width * element.pivot.x) + ',' + (element.offsetY - y - height * element.pivot.y) +\n ') scale(' + (width / contentWidth) + ',' + (height / contentHeight) + ')');\n };\n /**\n * used to crop the given native element into a rectangle of the given size\n * @private\n * @param node\n * @param group\n * @param height\n * @param width\n * @param parentSvg\n */\n SvgRenderer.prototype.drawClipPath = function (node, group, height, width, parentSvg) {\n var contentWidth = node.contentSize.width;\n var contentHeight = node.contentSize.height;\n var actualWidth = node.actualSize.width;\n var actualHeight = node.actualSize.height;\n var clipWidth = node.width / (width / contentWidth);\n var clipHeight = node.height / (height / contentHeight);\n var x = node.templatePosition.x + (node.width >= node.height ? 0 : (contentWidth - clipWidth) / 2);\n var y = node.templatePosition.y + (node.height >= node.width ? 0 : (contentHeight - clipHeight) / 2);\n var clipPath = parentSvg.getElementById(node.id + '_clip');\n clipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath');\n clipPath.setAttribute('id', node.id + '_clip');\n group.appendChild(clipPath);\n var rect = parentSvg.getElementById(node.id + '_clip_rect');\n rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n clipPath.appendChild(rect);\n var attr = {\n 'id': node.id + '_clip_rect', 'width': clipWidth.toString(), 'height': clipHeight.toString(),\n 'x': x.toString(), 'y': y.toString()\n };\n setAttributeSvg(rect, attr);\n group.setAttribute('clip-path', 'url(#' + node.id + '_clip)');\n return group;\n };\n SvgRenderer.prototype.renderGradient = function (options, svg, diagramId) {\n var max;\n var min;\n var grd;\n var svgContainer = getBackgroundLayerSvg(diagramId);\n var defs = svgContainer.getElementById(diagramId + 'gradient_pattern');\n if (!defs) {\n defs = createSvgElement('defs', { id: diagramId + 'gradient_pattern' });\n svgContainer.insertBefore(defs, svgContainer.firstChild);\n }\n var radial;\n var linear;\n var stop;\n var offset;\n if (options.gradient.type !== 'None') {\n for (var i = 0; i < options.gradient.stops.length; i++) {\n max = !max ? options.gradient.stops[i].offset : Math.max(max, options.gradient.stops[i].offset);\n min = !min ? options.gradient.stops[i].offset : Math.min(min, options.gradient.stops[i].offset);\n }\n if (options.gradient.type === 'Linear') {\n linear = options.gradient;\n linear.id = svg.id + '_linear';\n grd = svgContainer.getElementById(svg.id + '_linear');\n if (grd) {\n grd.parentNode.removeChild(grd);\n }\n grd = this.createLinearGradient(linear);\n defs.appendChild(grd);\n }\n else {\n radial = options.gradient;\n radial.id = svg.id + '_radial';\n grd = svgContainer.getElementById(svg.id + '_radial');\n grd = svgContainer.getElementById(svg.id + '_linear');\n if (grd) {\n grd.parentNode.removeChild(grd);\n }\n grd = this.createRadialGradient(radial);\n defs.appendChild(grd);\n }\n for (var i = 0; i < options.gradient.stops.length; i++) {\n var stop_1 = options.gradient.stops[i];\n var offset_1 = min < 0 ? (max + stop_1.offset) / (2 * max) : stop_1.offset / max;\n var stopElement = document.createElementNS('http://www.w3.org/2000/svg', 'stop');\n setAttributeSvg(stopElement, { 'offset': offset_1.toString(), 'style': 'stop-color:' + stop_1.color });\n grd.appendChild(stopElement);\n }\n }\n return grd;\n };\n SvgRenderer.prototype.createLinearGradient = function (linear) {\n var lineargradient = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient');\n var attr = {\n 'id': linear.id, 'x1': linear.x1 + '%', 'y1': linear.y1 + '%', 'x2': linear.x2 + '%', 'y2': linear.y2 + '%'\n };\n setAttributeSvg(lineargradient, attr);\n return lineargradient;\n };\n SvgRenderer.prototype.createRadialGradient = function (radial) {\n var radialgradient = document.createElementNS('http://www.w3.org/2000/svg', 'radialGradient');\n var attr = {\n 'id': radial.id, 'cx': radial.cx + '%', 'cy': radial.cy + '%', 'r': radial.r + '%', 'fx': radial.fx + '%', 'fy': radial.fy + '%'\n };\n setAttributeSvg(radialgradient, attr);\n return radialgradient;\n };\n SvgRenderer.prototype.setSvgStyle = function (svg, style, diagramId) {\n if (style.fill === 'none') {\n style.fill = 'transparent';\n }\n if (style.stroke === 'none') {\n style.stroke = 'transparent';\n }\n var dashArray = [];\n var fill;\n if (style.dashArray !== undefined) {\n var canvasRenderer = new CanvasRenderer();\n dashArray = canvasRenderer.parseDashArray(style.dashArray);\n }\n if (style.gradient && style.gradient.type !== 'None') {\n var grd = this.renderGradient(style, svg, diagramId);\n fill = 'url(#' + grd.id + ')';\n }\n else {\n fill = style.fill;\n }\n if (style.stroke) {\n svg.setAttribute('stroke', style.stroke);\n }\n if (style.strokeWidth !== undefined && style.strokeWidth !== null) {\n svg.setAttribute('stroke-width', style.strokeWidth.toString());\n }\n if (dashArray) {\n svg.setAttribute('stroke-dasharray', dashArray.toString());\n }\n if (fill) {\n svg.setAttribute('fill', fill);\n }\n };\n //end region\n // text utility\n SvgRenderer.prototype.svgLabelAlign = function (text, wrapBound, childNodes) {\n var bounds = new Size(wrapBound.width, childNodes.length * (text.fontSize * 1.2));\n var pos = { x: 0, y: 0 };\n var x = 0;\n var y = 1.2;\n var offsetX = text.width * 0.5;\n var offsety = text.height * 0.5;\n var pointX = offsetX;\n var pointY = offsety;\n if (text.textAlign === 'left') {\n pointX = 0;\n }\n else if (text.textAlign === 'center') {\n if (wrapBound.width > text.width && (text.textOverflow === 'Ellipsis' || text.textOverflow === 'Clip')) {\n pointX = 0;\n }\n else {\n pointX = text.width * 0.5;\n }\n }\n else if (text.textAlign === 'right') {\n pointX = (text.width * 1);\n }\n pos.x = x + pointX + (wrapBound ? wrapBound.x : 0);\n pos.y = y + pointY - bounds.height / 2;\n return pos;\n };\n return SvgRenderer;\n}());\nexport { SvgRenderer };\n","import { PathElement } from '../core/elements/path-element';\nimport { ImageElement } from '../core/elements/image-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { Container } from '../core/containers/container';\nimport { rotateMatrix, identityMatrix, transformPointByMatrix } from '../primitives/matrix';\nimport { Size } from '../primitives/size';\nimport { wordBreakToString, whiteSpaceToString, textAlignToString } from '../utility/base-util';\nimport { getUserHandlePosition, canShowCorner } from '../utility/diagram-util';\nimport { getDiagramElement, getAdornerLayer, getGridLayer, getHTMLLayer } from '../utility/dom-util';\nimport { measurePath, getBackgroundLayerSvg, getBackgroundImageLayer, setAttributeSvg } from '../utility/dom-util';\nimport { SnapConstraints } from '../enum/enum';\nimport { ThumbsConstraints, SelectorConstraints } from '../enum/enum';\nimport { SvgRenderer } from './svg-renderer';\nimport { CanvasRenderer } from './canvas-renderer';\nimport { processPathData, splitArrayCollection, transformPath } from '../utility/path-util';\nimport { isDiagramChild } from '../utility/diagram-util';\nimport { DiagramNativeElement } from '../core/elements/native-element';\nimport { DiagramHtmlElement } from '../core/elements/html-element';\nimport { Point } from '../primitives/point';\n/**\n * Renderer module is used to render basic diagram elements\n */\n/** @private */\nvar DiagramRenderer = /** @class */ (function () {\n function DiagramRenderer(name, svgRender, isSvgMode) {\n this.renderer = null;\n /** @private */\n this.isSvgMode = true;\n this.transform = { x: 0, y: 0 };\n this.diagramId = name;\n this.element = getDiagramElement(this.diagramId);\n this.svgRenderer = svgRender;\n this.isSvgMode = isSvgMode;\n this.renderer = isSvgMode ? new SvgRenderer() : new CanvasRenderer();\n }\n DiagramRenderer.prototype.setCursor = function (canvas, cursor) {\n canvas.style.cursor = cursor;\n };\n /** @private */\n DiagramRenderer.prototype.setLayers = function () {\n this.iconSvgLayer = this.element.getElementsByClassName('e-ports-expand-layer')[0];\n this.adornerSvgLayer = this.element.getElementsByClassName('e-adorner-layer')[0];\n this.nativeSvgLayer = this.element.getElementsByClassName('e-native-layer')[0];\n this.diagramSvgLayer = this.element.getElementsByClassName('e-diagram-layer')[0];\n };\n DiagramRenderer.prototype.getAdornerLayer = function () {\n var adornerLayer = getAdornerLayer(this.diagramId);\n return adornerLayer;\n };\n DiagramRenderer.prototype.getParentSvg = function (element, targetElement, canvas) {\n if (this.diagramId && element && element.id) {\n if (element.id.split('_icon_content').length > 1 || element.id.split('_nodeport').length > 1) {\n return this.iconSvgLayer;\n }\n if (targetElement && targetElement === 'selector') {\n return this.adornerSvgLayer;\n }\n else if (element instanceof DiagramNativeElement) {\n return this.nativeSvgLayer;\n }\n else {\n return this.diagramSvgLayer;\n }\n }\n return canvas;\n };\n DiagramRenderer.prototype.getParentElement = function (element, defaultParent, svgElement, indexValue) {\n var layerGElement = defaultParent;\n if (svgElement && this.diagramId && element && element.id) {\n if (element.id.split('_icon_content').length > 1) {\n layerGElement = svgElement.getElementById(this.diagramId + '_diagramExpander');\n defaultParent = null;\n }\n else if (element.id.split('_nodeport').length > 1) {\n layerGElement = svgElement.getElementById(this.diagramId + '_diagramPorts');\n }\n else if (element instanceof DiagramNativeElement) {\n layerGElement = svgElement.getElementById(this.diagramId + '_nativeLayer');\n defaultParent = null;\n }\n else {\n layerGElement = svgElement.getElementById(this.diagramId + '_diagramLayer');\n }\n var groupElement = this.getGroupElement(element, defaultParent || layerGElement, indexValue);\n layerGElement = groupElement.g;\n if (groupElement.svg) {\n svgElement = groupElement.svg;\n }\n }\n return { g: layerGElement, svg: svgElement };\n };\n DiagramRenderer.prototype.getGroupElement = function (element, canvas, indexValue) {\n var gElement;\n var parentSvg = this.getParentSvg(element);\n var svgElement;\n if (canvas && parentSvg) {\n if (parentSvg) {\n gElement = parentSvg.getElementById(element.id + '_groupElement');\n if (!gElement && parentSvg !== this.nativeSvgLayer) { //code added\n var nativeSvg = this.nativeSvgLayer;\n gElement = nativeSvg.getElementById(element.id + '_groupElement');\n svgElement = nativeSvg;\n }\n }\n if (!gElement) {\n gElement = this.svgRenderer.createGElement('g', { id: element.id + '_groupElement' });\n if (indexValue !== undefined && canvas.childNodes.length > indexValue) {\n canvas.insertBefore(gElement, canvas.childNodes[indexValue]);\n }\n else {\n canvas.appendChild(gElement);\n }\n }\n }\n return { g: gElement, svg: svgElement };\n };\n DiagramRenderer.prototype.renderElement = function (element, canvas, htmlLayer, transform, parentSvg, createParent, fromPalette, indexValue) {\n if (element instanceof Container) {\n this.renderContainer(element, canvas, htmlLayer, transform, parentSvg, createParent, fromPalette, indexValue);\n }\n else if (element instanceof ImageElement) {\n this.renderImageElement(element, canvas, transform, parentSvg, fromPalette);\n }\n else if (element instanceof PathElement) {\n this.renderPathElement(element, canvas, transform, parentSvg, fromPalette);\n }\n else if (element instanceof TextElement) {\n this.renderTextElement(element, canvas, transform, parentSvg, fromPalette);\n }\n else if (element instanceof DiagramNativeElement) {\n this.renderNativeElement(element, canvas, transform, parentSvg, fromPalette);\n }\n else if (element instanceof DiagramHtmlElement) {\n this.renderHTMLElement(element, canvas, htmlLayer, transform, parentSvg, fromPalette);\n }\n else {\n this.renderRect(element, canvas, transform, parentSvg);\n }\n };\n DiagramRenderer.prototype.drawSelectionRectangle = function (x, y, w, h, canvas, t) {\n x = (x + t.tx) * t.scale;\n y = (y + t.ty) * t.scale;\n var options = {\n width: w * t.scale, height: h * t.scale,\n x: x + 0.5, y: y + 0.5, fill: 'transparent', stroke: 'gray', angle: 0,\n pivotX: 0.5, pivotY: 0.5, strokeWidth: 1,\n dashArray: '6 3', opacity: 1,\n visible: true, id: canvas.id + '_selected_region'\n };\n var adornerLayer = this.getAdornerLayer();\n this.svgRenderer.updateSelectionRegion(adornerLayer, options);\n };\n /**\n * @private\n */\n DiagramRenderer.prototype.renderHighlighter = function (element, canvas, transform) {\n var width = element.actualSize.width || 2;\n var height = element.actualSize.height || 2;\n var x = element.offsetX - width * element.pivot.x;\n var y = element.offsetY - height * element.pivot.y;\n x = (x + transform.tx) * transform.scale;\n y = (y + transform.ty) * transform.scale;\n var options = {\n width: width * transform.scale, height: height * transform.scale,\n x: x, y: y, fill: 'transparent', stroke: '#8CC63F', angle: element.rotateAngle,\n pivotX: element.pivot.x, pivotY: element.pivot.y, strokeWidth: 4,\n dashArray: '', opacity: 1, cornerRadius: 0,\n visible: true, id: canvas.id + '_highlighter', class: 'e-diagram-highlighter'\n };\n this.svgRenderer.drawRectangle(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.drawLine = function (canvas, options) {\n this.svgRenderer.drawLine(canvas, options);\n };\n DiagramRenderer.prototype.drawPath = function (canvas, options) {\n this.svgRenderer.drawPath(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.renderResizeHandle = function (element, canvas, constraints, currentZoom, selectorConstraints, transform, canMask, enableNode) {\n var left = element.offsetX - element.actualSize.width * element.pivot.x;\n var top = element.offsetY - element.actualSize.height * element.pivot.y;\n var height = element.actualSize.height;\n var width = element.actualSize.width;\n if (constraints & ThumbsConstraints.Rotate) {\n this.renderPivotLine(element, canvas, transform, selectorConstraints, canMask);\n this.renderRotateThumb(element, canvas, transform, selectorConstraints, canMask);\n }\n this.renderBorder(element, canvas, transform, enableNode);\n var nodeWidth = element.actualSize.width * currentZoom;\n var nodeHeight = element.actualSize.height * currentZoom;\n if (nodeWidth >= 40 && nodeHeight >= 40) {\n //Hide corners when the size is less than 40\n if (selectorConstraints & SelectorConstraints.ResizeNorthWest) {\n this.renderCircularHandle('resizeNorthWest', element, left, top, canvas, canShowCorner(selectorConstraints, 'ResizeNorthWest'), constraints & ThumbsConstraints.ResizeNorthWest, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on top left side direction' }, undefined, 'e-diagram-resize-handle e-northwest');\n }\n if (selectorConstraints & SelectorConstraints.ResizeNorthEast) {\n this.renderCircularHandle('resizeNorthEast', element, left + width, top, canvas, canShowCorner(selectorConstraints, 'ResizeNorthEast'), constraints & ThumbsConstraints.ResizeNorthEast, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on top right side direction' }, undefined, 'e-diagram-resize-handle e-northeast');\n }\n if (selectorConstraints & SelectorConstraints.ResizeSouthWest) {\n this.renderCircularHandle('resizeSouthWest', element, left, top + height, canvas, canShowCorner(selectorConstraints, 'ResizeSouthWest'), constraints & ThumbsConstraints.ResizeSouthWest, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on bottom left side direction' }, undefined, 'e-diagram-resize-handle e-southwest');\n }\n if (selectorConstraints & SelectorConstraints.ResizeSouthEast) {\n this.renderCircularHandle('resizeSouthEast', element, left + width, top + height, canvas, canShowCorner(selectorConstraints, 'ResizeSouthEast'), constraints & ThumbsConstraints.ResizeSouthEast, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on bottom right side direction' }, undefined, 'e-diagram-resize-handle e-southeast');\n }\n }\n if (selectorConstraints & SelectorConstraints.ResizeNorth) {\n this.renderCircularHandle('resizeNorth', element, left + width / 2, top, canvas, canShowCorner(selectorConstraints, 'ResizeNorth'), constraints & ThumbsConstraints.ResizeNorth, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on top side direction' }, undefined, 'e-diagram-resize-handle e-north');\n }\n if (selectorConstraints & SelectorConstraints.ResizeSouth) {\n this.renderCircularHandle('resizeSouth', element, left + width / 2, top + height, canvas, canShowCorner(selectorConstraints, 'ResizeSouth'), constraints & ThumbsConstraints.ResizeSouth, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on bottom side direction' }, undefined, 'e-diagram-resize-handle e-south');\n }\n if (selectorConstraints & SelectorConstraints.ResizeWest) {\n this.renderCircularHandle('resizeWest', element, left, top + height / 2, canvas, canShowCorner(selectorConstraints, 'ResizeWest'), constraints & ThumbsConstraints.ResizeWest, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on left side direction' }, undefined, 'e-diagram-resize-handle e-west');\n }\n if (selectorConstraints & SelectorConstraints.ResizeEast) {\n this.renderCircularHandle('resizeEast', element, left + width, top + height / 2, canvas, canShowCorner(selectorConstraints, 'ResizeEast'), constraints & ThumbsConstraints.ResizeEast, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on right side direction' }, undefined, 'e-diagram-resize-handle e-east');\n }\n };\n DiagramRenderer.prototype.renderEndPointHandle = function (selector, canvas, constraints, selectorConstraints, transform, connectedSource, connectedTarget, isSegmentEditing) {\n var sourcePoint = selector.sourcePoint;\n var targetPoint = selector.targetPoint;\n var wrapper = selector.wrapper;\n var i;\n var segment;\n this.renderCircularHandle('connectorSourceThumb', wrapper, sourcePoint.x, sourcePoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorSourceThumb'), constraints & ThumbsConstraints.ConnectorSource, transform, connectedSource, undefined, { 'aria-label': 'Thumb to move the source point of the connector' }, undefined, 'e-diagram-endpoint-handle e-targetend');\n this.renderCircularHandle('connectorTargetThumb', wrapper, targetPoint.x, targetPoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorTargetThumb'), constraints & ThumbsConstraints.ConnectorTarget, transform, connectedTarget, undefined, { 'aria-label': 'Thumb to move the target point of the connector' }, undefined, 'e-diagram-endpoint-handle e-targetend');\n if (isSegmentEditing) {\n if ((selector.type === 'Straight' || selector.type === 'Bezier') && selector.segments.length > 0) {\n for (i = 0; i < selector.segments.length - 1; i++) {\n segment = selector.segments[i];\n this.renderCircularHandle(('segementThumb_' + (i + 1)), wrapper, segment.point.x, segment.point.y, canvas, true, constraints & ThumbsConstraints.ConnectorSource, transform, connectedSource, null, null, i);\n }\n }\n else {\n for (i = 0; i < selector.segments.length; i++) {\n var seg = selector.segments[i];\n this.renderOrthogonalThumbs('orthoThumb_' + (i + 1), wrapper, seg, canvas, canShowCorner(selectorConstraints, 'ConnectorSourceThumb'), transform);\n }\n }\n }\n if (selector.type === 'Bezier') {\n for (i = 0; i < selector.segments.length; i++) {\n var segment_1 = selector.segments[i];\n var bezierPoint = !Point.isEmptyPoint(segment_1.point1) ? segment_1.point1\n : segment_1.bezierPoint1;\n this.renderCircularHandle('bezierPoint_' + (i + 1) + '_1', wrapper, bezierPoint.x, bezierPoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorSourceThumb'), constraints & ThumbsConstraints.ConnectorSource, transform, undefined, undefined, { 'aria-label': 'Thumb to move the source point of the connector' }, undefined, 'e-diagram-bezier-handle e-source');\n if (canShowCorner(selectorConstraints, 'ConnectorSourceThumb')) {\n this.renderBezierLine('bezierLine_' + (i + 1) + '_1', wrapper, canvas, segment_1.points[0], !Point.isEmptyPoint(segment_1.point1) ? segment_1.point1 : segment_1.bezierPoint1, transform);\n }\n bezierPoint = !Point.isEmptyPoint(segment_1.point2) ? segment_1.point2 : segment_1.bezierPoint2;\n this.renderCircularHandle('bezierPoint_' + (i + 1) + '_2', wrapper, bezierPoint.x, bezierPoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorTargetThumb'), constraints & ThumbsConstraints.ConnectorTarget, transform, undefined, undefined, { 'aria-label': 'Thumb to move the target point of the connector' }, undefined, 'e-diagram-bezier-handle e-target');\n if (canShowCorner(selectorConstraints, 'ConnectorTargetThumb')) {\n this.renderBezierLine('bezierLine_' + (i + 1) + '_2', wrapper, canvas, segment_1.points[1], !Point.isEmptyPoint(segment_1.point2) ? segment_1.point2 : segment_1.bezierPoint2, transform);\n }\n }\n }\n };\n DiagramRenderer.prototype.renderOrthogonalThumbs = function (id, selector, segment, canvas, visibility, t) {\n var orientation;\n var visible;\n var length;\n var j = 0;\n for (j = 0; j < segment.points.length - 1; j++) {\n length = Point.distancePoints(segment.points[j], segment.points[j + 1]);\n orientation = (segment.points[j].y.toFixed(2) === segment.points[j + 1].y.toFixed(2)) ? 'horizontal' : 'vertical';\n visible = (length >= 50) ? true : false;\n this.renderOrthogonalThumb((id + '_' + (j + 1)), selector, (((segment.points[j].x + segment.points[j + 1].x) / 2)), (((segment.points[j].y + segment.points[j + 1].y) / 2)), canvas, visible, orientation, t);\n }\n };\n DiagramRenderer.prototype.renderOrthogonalThumb = function (id, selector, x, y, canvas, visible, orientation, t) {\n var path;\n var h;\n var v;\n if (orientation === 'horizontal') {\n path = 'M0,7 L15,0 L30,7 L15,14 z';\n h = -15;\n v = -7;\n }\n else {\n path = 'M7,0 L0,15 L7,30 L14,15 z';\n h = -7;\n v = -15;\n }\n var options = {\n x: ((x + t.tx) * t.scale) + h, y: ((y + t.ty) * t.scale) + v, angle: 0,\n fill: '#e2e2e2', stroke: 'black', strokeWidth: 1, dashArray: '', data: path,\n width: 20, height: 20, pivotX: 0, pivotY: 0, opacity: 1, visible: visible, id: id\n };\n this.svgRenderer.drawPath(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.renderPivotLine = function (element, canvas, transform, selectorConstraints, canMask) {\n var wrapper = element;\n var dashArray = '2,3';\n var visible = (selectorConstraints & SelectorConstraints.Rotate) ? true : false;\n if (canMask) {\n visible = false;\n }\n var options = this.getBaseAttributes(wrapper, transform);\n options.fill = 'None';\n options.stroke = 'black';\n options.strokeWidth = 1;\n options.dashArray = dashArray;\n options.visible = visible;\n var scale = transform.scale;\n options.x *= scale;\n options.y *= scale;\n options.width *= scale;\n options.height *= scale;\n options.id = 'pivotLine';\n options.class = 'e-diagram-pivot-line';\n var startPoint = { x: wrapper.actualSize.width * wrapper.pivot.x * scale, y: -20 };\n var endPoint = { x: wrapper.actualSize.width * wrapper.pivot.x * scale, y: 0 };\n options.startPoint = startPoint;\n options.endPoint = endPoint;\n this.svgRenderer.drawLine(canvas, options);\n };\n DiagramRenderer.prototype.renderBezierLine = function (id, wrapper, canvas, start, end, transform) {\n var dashArray = '3,3';\n var options = this.getBaseAttributes(wrapper, transform);\n options.id = id;\n options.stroke = 'black';\n options.strokeWidth = 1;\n options.dashArray = dashArray;\n options.fill = 'None';\n options.class = 'e-diagram-bezier-line';\n options.x = 0;\n options.y = 0;\n var scale = transform.scale;\n var x1 = (start.x + transform.tx) * scale;\n var y1 = (start.y + transform.ty) * scale;\n var x2 = (end.x + transform.tx) * scale;\n var y2 = (end.y + transform.ty) * scale;\n var startPoint = { x: x1, y: y1 };\n var endPoint = { x: x2, y: y2 };\n options.startPoint = startPoint;\n options.endPoint = endPoint;\n this.svgRenderer.drawLine(canvas, options);\n };\n DiagramRenderer.prototype.renderCircularHandle = function (id, selector, cx, cy, canvas, visible, enableSelector, t, connected, canMask, ariaLabel, count, className) {\n var wrapper = selector;\n var radius = 7;\n var newPoint = { x: cx, y: cy };\n if (wrapper.rotateAngle !== 0 || wrapper.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, wrapper.rotateAngle + wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY);\n newPoint = transformPointByMatrix(matrix, newPoint);\n }\n var options = this.getBaseAttributes(wrapper);\n options.stroke = 'black';\n options.strokeWidth = 1;\n if (count !== undefined) {\n radius = 5;\n options.id = 'segmentEnd_' + count;\n options.fill = '#e2e2e2';\n }\n else {\n radius = 7;\n options.fill = connected ? '#8CC63F' : 'white';\n }\n options.centerX = (newPoint.x + t.tx) * t.scale;\n options.centerY = (newPoint.y + t.ty) * t.scale;\n options.radius = radius;\n options.angle = 0;\n options.id = id;\n options.visible = visible;\n options.class = className;\n if (connected) {\n options.class += ' e-connected';\n }\n if (canMask) {\n options.visible = false;\n }\n this.svgRenderer.drawCircle(canvas, options, enableSelector, ariaLabel);\n };\n DiagramRenderer.prototype.renderBorder = function (selector, canvas, transform, enableNode) {\n var wrapper = selector;\n var options = this.getBaseAttributes(wrapper, transform);\n options.x *= transform.scale;\n options.y *= transform.scale;\n options.width *= transform.scale;\n options.height *= transform.scale;\n options.fill = 'transparent';\n options.stroke = '#097F7F';\n options.strokeWidth = 0.6;\n options.dashArray = '6,3';\n options.class = 'e-diagram-border';\n options.id = 'borderRect';\n if (!enableNode) {\n options.class += ' e-disabled';\n }\n options.cornerRadius = 0;\n var parentSvg = this.getParentSvg(selector, 'selector');\n this.svgRenderer.drawRectangle(canvas, options, this.diagramId, undefined, true, parentSvg);\n };\n DiagramRenderer.prototype.renderUserHandler = function (selectorItem, canvas, transform) {\n var wrapper = selectorItem.wrapper;\n for (var _i = 0, _a = selectorItem.userHandles; _i < _a.length; _i++) {\n var obj = _a[_i];\n var element = new PathElement();\n var newPoint = void 0;\n var data = obj.pathData;\n newPoint = getUserHandlePosition(selectorItem, obj, transform);\n newPoint.x = (newPoint.x + transform.tx) * transform.scale;\n newPoint.y = (newPoint.y + transform.ty) * transform.scale;\n if (obj.visible) {\n obj.visible = (selectorItem.constraints & SelectorConstraints.UserHandle) ? true : false;\n }\n var option = this.getBaseAttributes(wrapper);\n option.id = obj.name + '_userhandle';\n option.fill = obj.backgroundColor;\n option.stroke = obj.borderColor;\n option.strokeWidth = obj.borderWidth;\n option.centerX = newPoint.x;\n option.centerY = newPoint.y;\n option.radius = obj.size * 0.5;\n option.class = 'e-diagram-userhandle-circle';\n option.angle = 0;\n option.visible = obj.visible;\n option.opacity = 1;\n this.svgRenderer.drawCircle(canvas, option, 1, { 'aria-label': obj.name + 'user handle' });\n var pathPading = 5;\n var arrayCollection = [];\n arrayCollection = processPathData(data);\n arrayCollection = splitArrayCollection(arrayCollection);\n var pathSize = measurePath(data);\n //requiredSize/contentSize\n var scaleX = (obj.size - 0.45 * obj.size) / pathSize.width;\n var scaleY = (obj.size - 0.45 * obj.size) / pathSize.height;\n var newData = transformPath(arrayCollection, scaleX, scaleY, true, pathSize.x, pathSize.y, 0, 0);\n pathSize = measurePath(newData);\n var options = {\n x: newPoint.x - pathSize.width / 2,\n y: newPoint.y - pathSize.height / 2,\n angle: 0, id: '',\n class: 'e-diagram-userhandle-path',\n fill: obj.pathColor, stroke: obj.backgroundColor, strokeWidth: 0.5, dashArray: '', data: newData,\n width: obj.size - pathPading, height: obj.size - pathPading, pivotX: 0, pivotY: 0, opacity: 1, visible: obj.visible\n };\n this.svgRenderer.drawPath(canvas, options, this.diagramId, undefined, undefined, { 'aria-label': obj.name + 'user handle' });\n }\n };\n DiagramRenderer.prototype.renderRotateThumb = function (wrapper, canvas, transform, selectorConstraints, canMask) {\n var element = new PathElement();\n var newPoint;\n var size = new Size();\n size.width = 18;\n size.height = 16;\n var top = wrapper.offsetY - wrapper.actualSize.height * wrapper.pivot.y;\n var left = wrapper.offsetX - wrapper.actualSize.width * wrapper.pivot.x;\n var visible = (selectorConstraints & SelectorConstraints.Rotate) ? true : false;\n if (canMask) {\n visible = false;\n }\n var data = 'M 16.856144362449648 10.238890446662904 L 18.000144362449646 3.437890446662903' +\n 'L 15.811144362449646 4.254890446662903 C 14.837144362449646 2.5608904466629028 13.329144362449647 ' +\n ' 1.2598904466629026 11.485144362449645 0.5588904466629026 C 9.375144362449646 - 0.24510955333709716 7.071144362449646 ' +\n ' - 0.18010955333709716 5.010144362449646 0.7438904466629028 C 2.942144362449646 1.6678904466629028 1.365144362449646' +\n ' 3.341890446662903 0.558144362449646 5.452890446662903 C - 0.244855637550354 7.567890446662903 - 0.17985563755035394' +\n ' 9.866890446662904 0.7431443624496461 11.930890446662904 C 1.6681443624496461 13.994890446662904 3.343144362449646' +\n ' 15.575890446662903 5.457144362449647 16.380890446662903 C 6.426144362449647 16.7518904466629 7.450144362449647' +\n ' 16.9348904466629 8.470144362449647 16.9348904466629 C 9.815144362449647 16.9348904466629 11.155144362449647 ' +\n '16.6178904466629 12.367144362449647 15.986890446662901 L 11.351144362449647 14.024890446662901 C 9.767144362449647' +\n ' 14.8468904466629 7.906144362449647 14.953890446662902 6.237144362449647 14.3178904466629 C 4.677144362449647' +\n ' 13.7218904466629 3.444144362449647 12.5558904466629 2.758144362449647 11.028890446662901 C 2.078144362449646 ' +\n '9.501890446662903 2.031144362449646 7.802890446662903 2.622144362449646 6.243890446662903 C 3.216144362449646' +\n ' 4.6798904466629025 4.387144362449646 3.442890446662903 5.914144362449646 2.760890446662903 C 7.437144362449646 ' +\n '2.078890446662903 9.137144362449646 2.0298904466629026 10.700144362449645 2.6258904466629027 C 11.946144362449646 ' +\n '3.100890446662903 12.971144362449646 3.9538904466629026 13.686144362449646 5.049890446662903 L 11.540144362449645 ' +\n '5.850890446662903 L 16.856144362449648 10.238890446662904 Z';\n var pivotX = left + wrapper.pivot.x * wrapper.actualSize.width;\n var pivotY = top;\n pivotX = (pivotX + transform.tx) * transform.scale;\n pivotY = (pivotY + transform.ty) * transform.scale;\n newPoint = { x: pivotX - size.width * 0.5, y: pivotY - 30 - size.height * 0.5 };\n if (wrapper.rotateAngle !== 0 || wrapper.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, wrapper.rotateAngle + wrapper.parentTransform, (transform.tx + wrapper.offsetX) * transform.scale, (transform.ty + wrapper.offsetY) * transform.scale);\n newPoint = transformPointByMatrix(matrix, newPoint);\n }\n var options = {\n x: newPoint.x,\n y: newPoint.y,\n angle: wrapper.rotateAngle + wrapper.parentTransform,\n fill: '#231f20', stroke: 'black', strokeWidth: 0.5, dashArray: '', data: data,\n width: 20, height: 20, pivotX: 0, pivotY: 0, opacity: 1, visible: visible, id: wrapper.id, class: 'e-diagram-rotate-handle'\n };\n options.id = 'rotateThumb';\n this.svgRenderer.drawPath(canvas, options, this.diagramId, true, undefined, { 'aria-label': 'Thumb to rotate the selected object' });\n };\n DiagramRenderer.prototype.renderPathElement = function (element, canvas, transform, parentSvg, fromPalette) {\n var options = this.getBaseAttributes(element, transform);\n options.data = element.absolutePath;\n options.data = element.absolutePath;\n var ariaLabel = element.description ? element.description : element.id;\n this.renderer.drawPath(canvas, options, this.diagramId, undefined, parentSvg, ariaLabel);\n };\n DiagramRenderer.prototype.renderSvgGridlines = function (snapSettings, gridSvg, t, rulerSettings, hRuler, vRuler) {\n //render gridlines\n var pattern = document.createElementNS('http://www.w3.org/2000/svg', 'pattern');\n var defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n defs.setAttribute('id', this.diagramId + '_grid_pattern_defn');\n if (snapSettings.constraints & SnapConstraints.ShowHorizontalLines ||\n snapSettings.constraints & SnapConstraints.ShowVerticalLines) {\n pattern.setAttribute('id', this.diagramId + '_pattern');\n }\n var hWidth = 0;\n var hHeight = 0;\n var hSegmentwidth = 0;\n var vSegmentwidth = 0;\n var scale = 1;\n var isRulerGrid = false;\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && hRuler && vRuler) {\n hSegmentwidth = vRuler.updateSegmentWidth(t.scale);\n vSegmentwidth = hRuler.updateSegmentWidth(t.scale);\n snapSettings.horizontalGridlines.scaledIntervals = [hSegmentwidth / hRuler.interval];\n snapSettings.verticalGridlines.scaledIntervals = [vSegmentwidth / vRuler.interval];\n isRulerGrid = true;\n }\n else {\n for (var _i = 0, _a = snapSettings.verticalGridlines.lineIntervals; _i < _a.length; _i++) {\n var entry = _a[_i];\n hWidth += entry;\n }\n for (var _b = 0, _c = snapSettings.horizontalGridlines.lineIntervals; _b < _c.length; _b++) {\n var entry = _c[_b];\n hHeight += entry;\n }\n scale = this.scaleSnapInterval(snapSettings, t.scale);\n }\n hWidth = isRulerGrid ? vSegmentwidth : hWidth * scale;\n hHeight = isRulerGrid ? hSegmentwidth : hHeight * scale;\n var attr = {\n id: this.diagramId + '_pattern', x: 0, y: 0, width: hWidth,\n height: hHeight, patternUnits: 'userSpaceOnUse'\n };\n setAttributeSvg(pattern, attr);\n this.horizontalSvgGridlines(pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, vRuler, isRulerGrid);\n this.verticalSvgGridlines(pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, hRuler, isRulerGrid);\n defs.appendChild(pattern);\n gridSvg.appendChild(defs);\n };\n DiagramRenderer.prototype.horizontalSvgGridlines = function (pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, vRuler, isRulerGrid) {\n var space = 0;\n var dashArray = [];\n var hLine;\n if (snapSettings.constraints & SnapConstraints.ShowHorizontalLines) {\n var intervals = snapSettings.horizontalGridlines.lineIntervals;\n var strokestyle = snapSettings.horizontalGridlines.lineColor;\n if (snapSettings.horizontalGridlines.lineDashArray) {\n dashArray = this.renderer.parseDashArray(snapSettings.horizontalGridlines.lineDashArray);\n }\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && vRuler) {\n intervals = this.updateLineIntervals(intervals, rulerSettings, vRuler, hHeight);\n }\n for (var i = 0; i < intervals.length; i = i + 2) {\n hLine = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n var d = space + intervals[i] / 2;\n d = isRulerGrid ? d : d * scale;\n var attr = {\n 'stroke-width': intervals[i], 'stroke': snapSettings.horizontalGridlines.lineColor,\n 'd': 'M0,' + (d) + ' L' + hWidth + ',' + (d) + ' Z',\n 'dashArray': dashArray.toString(),\n 'class': intervals[i] === 1.25 ? 'e-diagram-thick-grid' : 'e-diagram-thin-grid'\n };\n setAttributeSvg(hLine, attr);\n pattern.appendChild(hLine);\n space += intervals[i + 1] + intervals[i];\n }\n }\n };\n DiagramRenderer.prototype.verticalSvgGridlines = function (pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, hRuler, isRulerGrid) {\n var space = 0;\n var dashArray = [];\n var vLine;\n if (snapSettings.constraints & SnapConstraints.ShowVerticalLines) {\n var intervals = snapSettings.verticalGridlines.lineIntervals;\n var strokestyle = snapSettings.verticalGridlines.lineColor;\n if (snapSettings.verticalGridlines.lineDashArray) {\n dashArray = this.renderer.parseDashArray(snapSettings.verticalGridlines.lineDashArray);\n }\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && hRuler) {\n intervals = this.updateLineIntervals(intervals, rulerSettings, hRuler, hWidth);\n }\n for (var i = 0; i < intervals.length; i = i + 2) {\n vLine = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n var d = space + intervals[i] / 2;\n d = isRulerGrid ? d : d * scale;\n var attr = {\n 'stroke-width': intervals[i], 'stroke': snapSettings.verticalGridlines.lineColor,\n 'd': 'M' + (d) + ',0 L' + (d) + ',' + hHeight + ' Z',\n 'dashArray': dashArray.toString(),\n 'class': intervals[i] === 1.25 ? 'e-diagram-thick-grid' : 'e-diagram-thin-grid'\n };\n setAttributeSvg(vLine, attr);\n pattern.appendChild(vLine);\n space += intervals[i + 1] + intervals[i];\n }\n }\n };\n DiagramRenderer.prototype.updateGrid = function (snapSettings, svgGrid, transform, rulerSettings, hRuler, vRuler) {\n var grid = svgGrid.getElementById(this.diagramId + '_grid_rect');\n var i;\n var isRulerGrid = false;\n if (grid) {\n var pattern = svgGrid.getElementById(this.diagramId + '_pattern');\n if (pattern) {\n pattern.parentNode.removeChild(pattern);\n }\n var hSegmentwidth = 0;\n var vSegmentwidth = 0;\n var scale = 1;\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && vRuler && hRuler) {\n hSegmentwidth = vRuler.updateSegmentWidth(transform.scale);\n vSegmentwidth = hRuler.updateSegmentWidth(transform.scale);\n isRulerGrid = true;\n snapSettings.horizontalGridlines.scaledIntervals = [hSegmentwidth / hRuler.interval];\n snapSettings.verticalGridlines.scaledIntervals = [vSegmentwidth / vRuler.interval];\n }\n else {\n scale = this.scaleSnapInterval(snapSettings, transform.scale);\n }\n var height = 0;\n for (i = 0; i < snapSettings.horizontalGridlines.lineIntervals.length; i++) {\n height += snapSettings.horizontalGridlines.lineIntervals[i];\n }\n var width = 0;\n for (i = 0; i < snapSettings.verticalGridlines.lineIntervals.length; i++) {\n width += snapSettings.verticalGridlines.lineIntervals[i];\n }\n var attr = {\n x: -transform.tx * transform.scale,\n y: -transform.ty * transform.scale\n };\n setAttributeSvg(grid, attr);\n width = isRulerGrid ? vSegmentwidth : width * scale;\n height = isRulerGrid ? hSegmentwidth : height * scale;\n attr = {\n id: this.diagramId + '_pattern', x: 0, y: 0, width: width,\n height: height, patternUnits: 'userSpaceOnUse'\n };\n pattern = document.createElementNS('http://www.w3.org/2000/svg', 'pattern');\n setAttributeSvg(pattern, attr);\n this.horizontalSvgGridlines(pattern, width, height, scale, snapSettings, rulerSettings, vRuler, isRulerGrid);\n this.verticalSvgGridlines(pattern, width, height, scale, snapSettings, rulerSettings, hRuler, isRulerGrid);\n var defs = svgGrid.getElementById(this.diagramId + '_grid_pattern_defn');\n if (defs) {\n defs.appendChild(pattern);\n }\n }\n };\n DiagramRenderer.prototype.updateLineIntervals = function (intervals, rulerSettings, ruler, segmentWidth) {\n var newInterval = [];\n var tickInterval = segmentWidth / ruler.interval;\n for (var i = 0; i < ruler.interval * 2; i++) {\n if (i % 2 === 0) {\n newInterval[i] = (i === 0) ? 1.25 : 0.25;\n }\n else {\n newInterval[i] = tickInterval - newInterval[i - 1];\n }\n }\n return newInterval;\n };\n DiagramRenderer.prototype.scaleSnapInterval = function (snapSettings, scale) {\n if (scale >= 2) {\n while (scale >= 2) {\n scale /= 2;\n }\n }\n else if (scale <= 0.5) {\n while (scale <= 0.5) {\n scale *= 2;\n }\n }\n var i;\n snapSettings.horizontalGridlines.scaledIntervals = snapSettings.horizontalGridlines.snapIntervals;\n snapSettings.verticalGridlines.scaledIntervals = snapSettings.verticalGridlines.snapIntervals;\n if (scale !== 1) {\n var gridlines = snapSettings.horizontalGridlines;\n gridlines.scaledIntervals = [];\n for (i = 0; i < gridlines.snapIntervals.length; i++) {\n gridlines.scaledIntervals[i] = gridlines.snapIntervals[i] * scale;\n }\n gridlines = snapSettings.verticalGridlines;\n gridlines.scaledIntervals = [];\n for (i = 0; i < gridlines.snapIntervals.length; i++) {\n gridlines.scaledIntervals[i] = gridlines.snapIntervals[i] * scale;\n }\n }\n return scale;\n };\n DiagramRenderer.prototype.renderTextElement = function (element, canvas, transform, parentSvg, fromPalette) {\n var options = this.getBaseAttributes(element, transform);\n options.cornerRadius = 0;\n options.whiteSpace = whiteSpaceToString(element.style.whiteSpace, element.style.textWrapping);\n options.content = element.content;\n options.breakWord = wordBreakToString(element.style.textWrapping);\n options.textAlign = textAlignToString(element.style.textAlign);\n options.color = element.style.color;\n options.italic = element.style.italic;\n options.bold = element.style.bold;\n options.fontSize = element.style.fontSize;\n options.fontFamily = element.style.fontFamily;\n options.textOverflow = element.style.textOverflow;\n options.textDecoration = element.style.textDecoration;\n options.doWrap = element.doWrap;\n options.wrapBounds = element.wrapBounds;\n options.childNodes = element.childNodes;\n options.dashArray = '';\n options.strokeWidth = 0;\n options.fill = 'transparent';\n var ariaLabel = element.description ? element.description : element.content ? element.content : element.id;\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n this.renderer.drawText(canvas, options, parentSvg, ariaLabel, this.diagramId);\n if (this.isSvgMode) {\n element.doWrap = false;\n }\n };\n DiagramRenderer.prototype.renderNativeElement = function (element, canvas, transform, parentSvg, fromPalette) {\n var templateWidth;\n var templateHeight;\n var nativeSvg = this.getParentSvg(element, undefined, canvas) || parentSvg;\n var nativeLayer = this.getParentElement(element, canvas, nativeSvg).g || canvas;\n var options = this.getBaseAttributes(element, transform);\n options.fill = 'transparent';\n options.cornerRadius = element.cornerRadius;\n options.stroke = 'transparent';\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n switch (element.scale) {\n case 'None':\n templateWidth = element.contentSize.width;\n templateHeight = element.contentSize.height;\n break;\n case 'Stretch':\n templateWidth = element.actualSize.width;\n templateHeight = element.actualSize.height;\n break;\n case 'Meet':\n if (element.actualSize.width <= element.actualSize.height) {\n templateWidth = templateHeight = element.actualSize.width;\n }\n else {\n templateWidth = templateHeight = element.actualSize.height;\n }\n break;\n case 'Slice':\n if (element.actualSize.width >= element.actualSize.height) {\n templateWidth = templateHeight = element.actualSize.width;\n }\n else {\n templateWidth = templateHeight = element.actualSize.height;\n }\n break;\n }\n if (this.svgRenderer) {\n this.svgRenderer.drawNativeContent(element, nativeLayer, templateHeight, templateWidth, nativeSvg);\n }\n };\n DiagramRenderer.prototype.renderHTMLElement = function (element, canvas, htmlLayer, transform, parentSvg, fromPalette) {\n var options = this.getBaseAttributes(element, transform);\n options.fill = 'transparent';\n options.cornerRadius = element.cornerRadius;\n options.stroke = 'transparent';\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n if (this.svgRenderer) {\n this.svgRenderer.drawHTMLContent(element, htmlLayer.children[0], transform, isDiagramChild(htmlLayer));\n }\n };\n DiagramRenderer.prototype.renderImageElement = function (element, canvas, transform, parentSvg, fromPalette) {\n var options = this.getBaseAttributes(element, transform);\n options.cornerRadius = 0;\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n // let sx: number; let sy: number;\n var imageWidth;\n var imageHeight;\n var sourceWidth;\n var sourceHeight;\n if (element.stretch === 'Stretch') {\n imageWidth = element.actualSize.width;\n imageHeight = element.actualSize.height;\n }\n else {\n var contentWidth = element.contentSize.width;\n var contentHeight = element.contentSize.height;\n var widthRatio = options.width / contentWidth;\n var heightRatio = options.height / contentHeight;\n var ratio = void 0;\n switch (element.stretch) {\n case 'Meet':\n ratio = Math.min(widthRatio, heightRatio);\n imageWidth = contentWidth * ratio;\n imageHeight = contentHeight * ratio;\n options.x += Math.abs(options.width - imageWidth) / 2;\n options.y += Math.abs(options.height - imageHeight) / 2;\n break;\n case 'Slice':\n widthRatio = options.width / contentWidth;\n heightRatio = options.height / contentHeight;\n ratio = Math.max(widthRatio, heightRatio);\n imageWidth = contentWidth * ratio;\n imageHeight = contentHeight * ratio;\n sourceWidth = options.width / imageWidth * contentWidth;\n sourceHeight = options.height / imageHeight * contentHeight;\n break;\n case 'None':\n imageWidth = contentWidth;\n imageHeight = contentHeight;\n break;\n }\n }\n options.width = imageWidth;\n options.height = imageHeight;\n //Commented for code coverage\n //(options as ImageAttributes).sourceX = sx;\n //(options as ImageAttributes).sourceY = sy;\n options.sourceWidth = sourceWidth;\n options.sourceHeight = sourceHeight;\n options.source = element.source;\n options.alignment = element.imageAlign;\n options.scale = element.imageScale;\n options.description = element.description ? element.description : element.id;\n this.renderer.drawImage(canvas, options, parentSvg, fromPalette);\n };\n DiagramRenderer.prototype.renderContainer = function (group, canvas, htmlLayer, transform, parentSvg, createParent, fromPalette, indexValue) {\n var svgParent = { svg: parentSvg, g: canvas };\n if (this.diagramId) {\n parentSvg = this.getParentSvg(group) || parentSvg;\n if (this.isSvgMode) {\n var groupElement = void 0;\n groupElement = this.getParentElement(group, canvas, parentSvg, indexValue).g || canvas;\n parentSvg = this.getParentSvg(this.hasNativeParent(group.children)) || parentSvg;\n var svgNativeParent = this.getParentElement(this.hasNativeParent(group.children), groupElement, parentSvg);\n svgParent.svg = svgNativeParent.svg || parentSvg;\n svgParent.g = svgNativeParent.g || groupElement;\n if (createParent) {\n if (parentSvg) {\n if (!parentSvg.getElementById(svgParent.g.id)) {\n canvas.appendChild(svgParent.g);\n }\n }\n canvas = svgParent.g;\n }\n else {\n canvas = svgParent.g;\n }\n }\n }\n this.renderRect(group, canvas, transform, parentSvg);\n if (group.hasChildren()) {\n var parentG = void 0;\n var svgParent_1;\n for (var _i = 0, _a = group.children; _i < _a.length; _i++) {\n var child = _a[_i];\n parentSvg = this.getParentSvg(this.hasNativeParent(group.children) || child) || parentSvg;\n if (this.isSvgMode) {\n svgParent_1 = this.getParentElement(this.hasNativeParent(group.children) || child, canvas, parentSvg);\n parentG = svgParent_1.g || canvas;\n if (svgParent_1.svg) {\n parentSvg = svgParent_1.svg;\n }\n }\n this.renderElement(child, parentG || canvas, htmlLayer, transform, parentSvg, true, fromPalette);\n }\n }\n };\n DiagramRenderer.prototype.hasNativeParent = function (children, count) {\n if (children && children.length > 0 && (count || 0 < 3)) {\n var child = children[0];\n if (child instanceof DiagramNativeElement) {\n return child;\n }\n else if (child.children && child.children.length) {\n this.hasNativeParent(child.children, count++ || 0);\n }\n }\n return undefined;\n };\n DiagramRenderer.prototype.renderRect = function (element, canvas, transform, parentSvg) {\n var options = this.getBaseAttributes(element, transform);\n options.cornerRadius = element.cornerRadius || 0;\n var ariaLabel = element.description ? element.description : element.id;\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg, ariaLabel);\n };\n DiagramRenderer.prototype.drawRect = function (canvas, options) {\n options.cornerRadius = 0;\n this.svgRenderer.drawRectangle(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.getBaseAttributes = function (element, transform) {\n var options = {\n width: element.actualSize.width, height: element.actualSize.height,\n x: element.offsetX - element.actualSize.width * element.pivot.x + 0.5,\n y: element.offsetY - element.actualSize.height * element.pivot.y + 0.5,\n fill: element.style.fill, stroke: element.style.strokeColor, angle: element.rotateAngle + element.parentTransform,\n pivotX: element.pivot.x, pivotY: element.pivot.y, strokeWidth: element.style.strokeWidth,\n dashArray: element.style.strokeDashArray || '', opacity: element.style.opacity, shadow: element.shadow,\n gradient: element.style.gradient, visible: element.visible, id: element.id, description: element.description,\n };\n if (transform) {\n options.x += transform.tx;\n options.y += transform.ty;\n }\n return options;\n };\n DiagramRenderer.renderSvgBackGroundImage = function (background, diagramElement, x, y, width, height) {\n var container = document.getElementById(diagramElement.id);\n var backgroundLayer = getBackgroundLayerSvg(diagramElement.id);\n var target = backgroundLayer.getElementById(diagramElement.id + '_image');\n if (!target && background.source) {\n var bgimageLayer = getBackgroundImageLayer(diagramElement.id);\n target = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n target.setAttribute('id', diagramElement.id + '_image');\n bgimageLayer.appendChild(target);\n }\n if (target) {\n target.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', background.source);\n var scale = background.scale !== 'None' ? background.scale : '';\n var imgAlign = background.align;\n var aspectRatio = imgAlign.charAt(0).toLowerCase() + imgAlign.slice(1) + ' '\n + scale.charAt(0).toLowerCase() + scale.slice(1);\n var container_1 = document.getElementById(diagramElement.id);\n var attr = {\n 'id': diagramElement.id + '_image', 'x': x, 'y': y,\n 'width': width, 'height': height,\n 'preserveAspectRatio': aspectRatio\n };\n setAttributeSvg(target, attr);\n }\n };\n DiagramRenderer.prototype.transformLayers = function (transform, svgMode) {\n var tx = transform.tx * transform.scale;\n var ty = transform.ty * transform.scale;\n if (tx !== this.transform.x || ty !== this.transform.y || (tx === 0 || ty === 0)) {\n //diagram layer\n if (svgMode) {\n var diagramLayer = this.diagramSvgLayer.getElementById(this.diagramId + '_diagramLayer');\n diagramLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n }\n //background\n //gridline\n var gridLayer = getGridLayer(this.diagramId);\n gridLayer.setAttribute('transform', 'translate(' + (transform.tx * transform.scale) + ','\n + (transform.ty * transform.scale) + ')');\n //portslayer \n var portsLayer = this.iconSvgLayer.getElementById(this.diagramId + '_diagramPorts');\n portsLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //expandlayer\n var expandLayer = this.iconSvgLayer.getElementById(this.diagramId + '_diagramExpander');\n expandLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //nativelayer\n var nativeLayer = this.nativeSvgLayer.getElementById(this.diagramId + '_nativeLayer');\n nativeLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //htmlLayer\n var htmlLayer = getHTMLLayer(this.diagramId).children[0];\n htmlLayer.style.transform = 'translate('\n + (transform.tx * transform.scale) + 'px,' + (transform.ty * transform.scale) + 'px)scale('\n + transform.scale + ')';\n this.transform = { x: transform.tx * transform.scale, y: transform.ty * transform.scale };\n return true;\n }\n return false;\n };\n /** @private */\n DiagramRenderer.prototype.updateNode = function (element, diagramElementsLayer, htmlLayer, transform) {\n this.renderElement(element, diagramElementsLayer, htmlLayer, transform, this.getParentSvg(element));\n };\n return DiagramRenderer;\n}());\nexport { DiagramRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { Margin } from '../core/appearance';\n/**\n * Defines the size and appearance of the diagram page\n */\nvar Background = /** @class */ (function (_super) {\n __extends(Background, _super);\n function Background() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Background.prototype, \"source\", void 0);\n __decorate([\n Property('transparent')\n ], Background.prototype, \"color\", void 0);\n __decorate([\n Property('None')\n ], Background.prototype, \"scale\", void 0);\n __decorate([\n Property('None')\n ], Background.prototype, \"align\", void 0);\n return Background;\n}(ChildProperty));\nexport { Background };\n/**\n * Defines the size and appearance of diagram page\n * ```html\n *
    \n * ```\n * ```typescript\n * let diagram: Diagram = new Diagram({\n * ...\n * pageSettings: { width: 800, height: 600, orientation: 'Landscape',\n * background: { color: 'blue' }, boundaryConstraints: 'Infinity',\n * multiplePage: true, showPageBreaks: true, },\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n * @default {}\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Margin)\n ], PageSettings.prototype, \"margin\", void 0);\n __decorate([\n Property('Landscape')\n ], PageSettings.prototype, \"orientation\", void 0);\n __decorate([\n Property('Infinity')\n ], PageSettings.prototype, \"boundaryConstraints\", void 0);\n __decorate([\n Complex({}, Background)\n ], PageSettings.prototype, \"background\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"multiplePage\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"showPageBreaks\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n/**\n * Diagram ScrollSettings module handles the scroller properties of the diagram\n */\nvar ScrollSettings = /** @class */ (function (_super) {\n __extends(ScrollSettings, _super);\n function ScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"horizontalOffset\", void 0);\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"verticalOffset\", void 0);\n __decorate([\n Property(1)\n ], ScrollSettings.prototype, \"currentZoom\", void 0);\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"viewPortWidth\", void 0);\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"viewPortHeight\", void 0);\n __decorate([\n Property(0.2)\n ], ScrollSettings.prototype, \"minZoom\", void 0);\n __decorate([\n Property(30)\n ], ScrollSettings.prototype, \"maxZoom\", void 0);\n __decorate([\n Property('Diagram')\n ], ScrollSettings.prototype, \"scrollLimit\", void 0);\n __decorate([\n Property()\n ], ScrollSettings.prototype, \"scrollableArea\", void 0);\n __decorate([\n Property(false)\n ], ScrollSettings.prototype, \"canAutoScroll\", void 0);\n __decorate([\n Complex({ left: 15, right: 15, top: 15, bottom: 15 }, Margin)\n ], ScrollSettings.prototype, \"autoScrollBorder\", void 0);\n return ScrollSettings;\n}(ChildProperty));\nexport { ScrollSettings };\n","/**\n * ServiceLocator\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n this.services[name] = type;\n };\n ServiceLocator.prototype.getService = function (name) {\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { SnapConstraints } from '../enum/enum';\n/**\n * Provides a visual guidance while dragging or arranging the objects on the Diagram surface\n */\nvar Gridlines = /** @class */ (function (_super) {\n __extends(Gridlines, _super);\n function Gridlines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('lightgray')\n ], Gridlines.prototype, \"lineColor\", void 0);\n __decorate([\n Property('')\n ], Gridlines.prototype, \"lineDashArray\", void 0);\n __decorate([\n Property([1.25, 18.75, 0.25, 19.75, 0.25, 19.75, 0.25, 19.75, 0.25, 19.75])\n ], Gridlines.prototype, \"lineIntervals\", void 0);\n __decorate([\n Property([20])\n ], Gridlines.prototype, \"snapIntervals\", void 0);\n return Gridlines;\n}(ChildProperty));\nexport { Gridlines };\n/**\n * Defines the gridlines and defines how and when the objects have to be snapped\n * @default {}\n */\nvar SnapSettings = /** @class */ (function (_super) {\n __extends(SnapSettings, _super);\n function SnapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Gridlines)\n ], SnapSettings.prototype, \"horizontalGridlines\", void 0);\n __decorate([\n Complex({}, Gridlines)\n ], SnapSettings.prototype, \"verticalGridlines\", void 0);\n __decorate([\n Property(SnapConstraints.All)\n ], SnapSettings.prototype, \"constraints\", void 0);\n __decorate([\n Property(5)\n ], SnapSettings.prototype, \"snapAngle\", void 0);\n __decorate([\n Property(5)\n ], SnapSettings.prototype, \"snapObjectDistance\", void 0);\n return SnapSettings;\n}(ChildProperty));\nexport { SnapSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Defines the properties of both horizontal and vertical guides/rulers to measure the diagram area.\n */\nvar DiagramRuler = /** @class */ (function (_super) {\n __extends(DiagramRuler, _super);\n function DiagramRuler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(5)\n ], DiagramRuler.prototype, \"interval\", void 0);\n __decorate([\n Property(100)\n ], DiagramRuler.prototype, \"segmentWidth\", void 0);\n __decorate([\n Property('Horizontal')\n ], DiagramRuler.prototype, \"orientation\", void 0);\n __decorate([\n Property('RightOrBottom')\n ], DiagramRuler.prototype, \"tickAlignment\", void 0);\n __decorate([\n Property('red')\n ], DiagramRuler.prototype, \"markerColor\", void 0);\n __decorate([\n Property(25)\n ], DiagramRuler.prototype, \"thickness\", void 0);\n __decorate([\n Property(null)\n ], DiagramRuler.prototype, \"arrangeTick\", void 0);\n return DiagramRuler;\n}(ChildProperty));\nexport { DiagramRuler };\n/**\n * Defines the ruler settings of diagram\n * ```html\n *
    \n * ```\n * ```typescript\n * let diagram: Diagram = new Diagram({\n * ...\n * rulerSettings: { showRulers: true,\n * horizontalRuler: { segmentWidth: 50,interval: 10 },\n * verticalRuler: {segmentWidth: 200,interval: 20}\n * },\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n * @default {}\n */\nvar RulerSettings = /** @class */ (function (_super) {\n __extends(RulerSettings, _super);\n function RulerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], RulerSettings.prototype, \"showRulers\", void 0);\n __decorate([\n Property(true)\n ], RulerSettings.prototype, \"dynamicGrid\", void 0);\n __decorate([\n Complex({ orientation: 'Horizontal' }, DiagramRuler)\n ], RulerSettings.prototype, \"horizontalRuler\", void 0);\n __decorate([\n Complex({ orientation: 'Vertical' }, DiagramRuler)\n ], RulerSettings.prototype, \"verticalRuler\", void 0);\n return RulerSettings;\n}(ChildProperty));\nexport { RulerSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the data source that is to be bound with diagram\n * ```html\n *
    \n * ```\n * ```typescript\n * let data: object[] = [\n * { Name: \"Elizabeth\", Role: \"Director\" },\n * { Name: \"Christina\", ReportingPerson: \"Elizabeth\", Role: \"Manager\" },\n * { Name: \"Yoshi\", ReportingPerson: \"Christina\", Role: \"Lead\" },\n * { Name: \"Philip\", ReportingPerson: \"Christina\", Role: \"Lead\" },\n * { Name: \"Yang\", ReportingPerson: \"Elizabeth\", Role: \"Manager\" },\n * { Name: \"Roland\", ReportingPerson: \"Yang\", Role: \"Lead\" },\n * { Name: \"Yvonne\", ReportingPerson: \"Yang\", Role: \"Lead\" }\n * ];\n * let items: DataManager = new DataManager(data as JSON[]);\n * let diagram: Diagram = new Diagram({\n * ...\n * layout: {\n * type: 'OrganizationalChart'\n * },\n * dataSourceSettings: {\n * id: 'Name', parentId: 'ReportingPerson', dataManager: items,\n * }\n * ...\n * });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar DataSource = /** @class */ (function (_super) {\n __extends(DataSource, _super);\n function DataSource() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], DataSource.prototype, \"id\", void 0);\n __decorate([\n Property(null)\n ], DataSource.prototype, \"dataManager\", void 0);\n __decorate([\n Property('')\n ], DataSource.prototype, \"root\", void 0);\n __decorate([\n Property('')\n ], DataSource.prototype, \"parentId\", void 0);\n __decorate([\n Property()\n ], DataSource.prototype, \"data\", void 0);\n __decorate([\n Property()\n ], DataSource.prototype, \"doBinding\", void 0);\n return DataSource;\n}(ChildProperty));\nexport { DataSource };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Margin } from '../core/appearance';\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines the behavior of the automatic layouts\n */\nvar Layout = /** @class */ (function (_super) {\n __extends(Layout, _super);\n function Layout() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Layout.prototype, \"fixedNode\", void 0);\n __decorate([\n Property(30)\n ], Layout.prototype, \"horizontalSpacing\", void 0);\n __decorate([\n Property(30)\n ], Layout.prototype, \"verticalSpacing\", void 0);\n __decorate([\n Property(30)\n ], Layout.prototype, \"maxIteration\", void 0);\n __decorate([\n Property(40)\n ], Layout.prototype, \"springFactor\", void 0);\n __decorate([\n Property(50)\n ], Layout.prototype, \"springLength\", void 0);\n __decorate([\n Complex({ left: 50, top: 50, right: 0, bottom: 0 }, Margin)\n ], Layout.prototype, \"margin\", void 0);\n __decorate([\n Property('Auto')\n ], Layout.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Auto')\n ], Layout.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('TopToBottom')\n ], Layout.prototype, \"orientation\", void 0);\n __decorate([\n Property('Auto')\n ], Layout.prototype, \"connectionDirection\", void 0);\n __decorate([\n Property('Default')\n ], Layout.prototype, \"connectorSegments\", void 0);\n __decorate([\n Property('None')\n ], Layout.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Layout.prototype, \"getLayoutInfo\", void 0);\n __decorate([\n Property()\n ], Layout.prototype, \"getBranch\", void 0);\n __decorate([\n Property()\n ], Layout.prototype, \"bounds\", void 0);\n __decorate([\n Property(true)\n ], Layout.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('')\n ], Layout.prototype, \"root\", void 0);\n return Layout;\n}(ChildProperty));\nexport { Layout };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Node } from '../objects/node';\nimport { Connector, StraightSegment } from '../objects/connector';\nimport { Point } from '../primitives/point';\nimport { BpmnSubEvent } from '../objects/node';\nimport { PointPort } from '../objects/port';\nimport { rotatePoint, cloneObject } from '../utility/base-util';\nimport { Rect } from '../primitives/rect';\nimport { getPolygonPath } from '../utility/path-util';\nimport { canOutConnect, canInConnect, canAllowDrop } from '../utility/constraints-util';\nimport { transformPointByMatrix, rotateMatrix, identityMatrix } from '../primitives/matrix';\nimport { NodeConstraints, DiagramEvent } from './../enum/enum';\nimport { TextElement } from '../core/elements/text-element';\nimport { contains } from './actions';\n/**\n * Defines the interactive tools\n */\nvar ToolBase = /** @class */ (function () {\n /**\n * Initializes the tool\n * @param command Command that is corresponding to the current action\n */\n function ToolBase(command, protectChange) {\n if (protectChange === void 0) { protectChange = false; }\n /**\n * Command that is corresponding to the current action\n */\n this.commandHandler = null;\n /**\n * Sets/Gets whether the interaction is being done\n */\n this.inAction = false;\n /**\n * Sets/Gets the protect change\n */\n this.isProtectChange = false;\n /**\n * Sets/Gets the current element that is under mouse\n */\n this.currentElement = null;\n this.blocked = false;\n this.isTooltipVisible = false;\n /** @private */\n this.childTable = {};\n /**\n * Sets/Gets the previous object when mouse down\n */\n this.undoElement = { nodes: [], connectors: [] };\n this.undoParentElement = { nodes: [], connectors: [] };\n this.commandHandler = command;\n this.isProtectChange = protectChange;\n }\n ToolBase.prototype.startAction = function (currentElement) {\n this.currentElement = currentElement;\n this.inAction = true;\n };\n ToolBase.prototype.mouseDown = function (args) {\n this.currentElement = args.source;\n this.startPosition = this.currentPosition = this.prevPosition = args.position;\n this.isTooltipVisible = true;\n this.startAction(args.source);\n this.commandHandler.startTransaction(this.isProtectChange);\n };\n ToolBase.prototype.mouseMove = function (args) {\n this.currentPosition = args.position;\n //this.currentElement = currentElement;\n return !this.blocked;\n };\n ToolBase.prototype.mouseUp = function (args) {\n this.currentPosition = args.position;\n // this.currentElement = currentElement;\n this.isTooltipVisible = false;\n this.commandHandler.endTransaction(this.isProtectChange);\n //At the end\n this.endAction();\n };\n ToolBase.prototype.endAction = function () {\n if (!this.isTooltipVisible) {\n this.commandHandler.closeTooltip();\n }\n this.commandHandler = null;\n this.currentElement = null;\n this.currentPosition = null;\n this.inAction = false;\n this.blocked = false;\n };\n ToolBase.prototype.mouseWheel = function (args) {\n this.currentPosition = args.position;\n };\n ToolBase.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n ToolBase.prototype.updateSize = function (shape, startPoint, endPoint, corner, initialBounds, angle) {\n var horizontalsnap = { snapped: false, offset: 0, left: false, right: false };\n var verticalsnap = { snapped: false, offset: 0, top: false, bottom: false };\n var difx = this.currentPosition.x - this.startPosition.x;\n var dify = this.currentPosition.y - this.startPosition.y;\n var snapEnabled = (!(shape instanceof TextElement)) && this.commandHandler.snappingModule\n && this.commandHandler.snappingModule.canSnap();\n var snapLine = snapEnabled ? this.commandHandler.snappingModule.getLayer() : null;\n var rotateAngle = (shape instanceof TextElement) ? angle : shape.rotateAngle;\n var matrix;\n matrix = identityMatrix();\n rotateMatrix(matrix, -rotateAngle, 0, 0);\n var x = shape.offsetX;\n var y = shape.offsetY;\n var w = shape.width;\n var h = shape.height;\n x = x - w * shape.pivot.x;\n y = y - h * shape.pivot.y;\n var deltaWidth = 0;\n var deltaHeight = 0;\n var diff;\n var width = (shape instanceof TextElement) ? shape.actualSize.width : shape.width;\n var height = (shape instanceof TextElement) ? shape.actualSize.height : shape.height;\n switch (corner) {\n case 'ResizeWest':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n deltaHeight = 1;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapLeft(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) : difx;\n dify = 0;\n deltaWidth = (initialBounds.width - difx) / width;\n break;\n case 'ResizeEast':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapRight(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) :\n difx;\n dify = 0;\n deltaWidth = (initialBounds.width + difx) / width;\n deltaHeight = 1;\n break;\n case 'ResizeNorth':\n deltaWidth = 1;\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) :\n dify;\n deltaHeight = (initialBounds.height - dify) / height;\n break;\n case 'ResizeSouth':\n deltaWidth = 1;\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapBottom(horizontalsnap, verticalsnap, snapLine, diff.x, diff.y, shape, endPoint === startPoint, initialBounds) :\n dify;\n deltaHeight = (initialBounds.height + dify) / height;\n break;\n case 'ResizeNorthEast':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapRight(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) :\n difx;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) :\n dify;\n deltaWidth = (initialBounds.width + difx) / width;\n deltaHeight = (initialBounds.height - dify) / height;\n break;\n case 'ResizeNorthWest':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = !snapEnabled ? dify : this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds);\n difx = !snapEnabled ? difx : this.commandHandler.snappingModule.snapLeft(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds);\n deltaWidth = (initialBounds.width - difx) / width;\n deltaHeight = (initialBounds.height - dify) / height;\n break;\n case 'ResizeSouthEast':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = !snapEnabled ? dify : this.commandHandler.snappingModule.snapBottom(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds);\n difx = !snapEnabled ? difx : this.commandHandler.snappingModule.snapRight(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds);\n deltaHeight = (initialBounds.height + dify) / height;\n deltaWidth = (initialBounds.width + difx) / width;\n break;\n case 'ResizeSouthWest':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapBottom(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) : dify;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapLeft(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) : difx;\n deltaWidth = (initialBounds.width - difx) / width;\n deltaHeight = (initialBounds.height + dify) / height;\n break;\n }\n return { width: deltaWidth, height: deltaHeight };\n };\n ToolBase.prototype.getPivot = function (corner) {\n switch (corner) {\n case 'ResizeWest':\n return { x: 1, y: 0.5 };\n case 'ResizeEast':\n return { x: 0, y: 0.5 };\n case 'ResizeNorth':\n return { x: 0.5, y: 1 };\n case 'ResizeSouth':\n return { x: 0.5, y: 0 };\n case 'ResizeNorthEast':\n return { x: 0, y: 1 };\n case 'ResizeNorthWest':\n return { x: 1, y: 1 };\n case 'ResizeSouthEast':\n return { x: 0, y: 0 };\n case 'ResizeSouthWest':\n return { x: 1, y: 0 };\n }\n return { x: 0.5, y: 0.5 };\n };\n return ToolBase;\n}());\nexport { ToolBase };\n/**\n * Helps to select the objects\n */\nvar SelectTool = /** @class */ (function (_super) {\n __extends(SelectTool, _super);\n function SelectTool(commandHandler, protectChange, action) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.action = action;\n return _this;\n }\n SelectTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n _super.prototype.mouseDown.call(this, args);\n };\n SelectTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n //draw selected region\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n this.commandHandler.drawSelectionRectangle(rect.x, rect.y, rect.width, rect.height);\n }\n return !this.blocked;\n };\n SelectTool.prototype.mouseUp = function (args) {\n //rubber band selection\n if (Point.equals(this.currentPosition, this.prevPosition) === false && this.inAction) {\n var region = Rect.toBounds([this.prevPosition, this.currentPosition]);\n this.commandHandler.doRubberBandSelection(region);\n }\n else {\n //single selection\n var arrayNodes = this.commandHandler.getSelectedObject();\n if (!this.commandHandler.hasSelection() || !args.info || !args.info.ctrlKey) {\n this.commandHandler.clearSelection(args.source === null ? true : false);\n if (this.action === 'LabelSelect') {\n this.commandHandler.labelSelect(args.source, args.sourceWrapper);\n }\n else if (args.source) {\n this.commandHandler.selectObjects([args.source], false, arrayNodes);\n }\n }\n else {\n //handling multiple selection\n if (args && args.source) {\n if (!this.commandHandler.isSelected(args.source)) {\n this.commandHandler.selectObjects([args.source], true);\n }\n else {\n if (args.clickCount === 1) {\n this.commandHandler.unSelect(args.source);\n }\n }\n }\n }\n }\n this.inAction = false;\n _super.prototype.mouseUp.call(this, args);\n };\n SelectTool.prototype.mouseLeave = function (args) {\n if (this.inAction) {\n this.mouseUp(args);\n }\n };\n return SelectTool;\n}(ToolBase));\nexport { SelectTool };\n/**\n * Helps to edit the selected connectors\n */\nvar ConnectTool = /** @class */ (function (_super) {\n __extends(ConnectTool, _super);\n function ConnectTool(commandHandler, endPoint) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.endPoint = endPoint;\n return _this;\n }\n ConnectTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n this.undoElement = undefined;\n if (!(this instanceof ConnectorDrawingTool)) {\n this.undoElement = cloneObject(args.source);\n }\n _super.prototype.mouseDown.call(this, args);\n var oldValue;\n var connectors;\n if (args.source && args.source.connectors) {\n oldValue = { x: this.prevPosition.x, y: this.prevPosition.y };\n connectors = args.source.connectors[0];\n }\n // Sets the selected segment \n if (this.endPoint === 'BezierSourceThumb' || this.endPoint === 'BezierTargetThumb') {\n for (var i = 0; i < connectors.segments.length; i++) {\n var segment = connectors.segments[i];\n var segmentpoint1 = !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1;\n var segmentpoint2 = !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2;\n if (contains(this.currentPosition, segmentpoint1, connectors.hitPadding) ||\n contains(this.currentPosition, segmentpoint2, connectors.hitPadding)) {\n this.selectedSegment = segment;\n }\n }\n }\n this.currentPosition = args.position;\n };\n ConnectTool.prototype.mouseUp = function (args) {\n this.commandHandler.updateSelector();\n this.commandHandler.removeSnap();\n this.commandHandler.changeAnnotationDrag(args);\n if ((!(this instanceof ConnectorDrawingTool)) && ((this.endPoint === 'ConnectorSourceEnd' &&\n args.source.connectors.length &&\n ((!Point.equals(args.source.connectors[0].sourcePoint, this.undoElement.connectors[0].sourcePoint) ||\n (args.source.connectors[0].sourceID !== this.undoElement.connectors[0].sourceID)))) ||\n (this.endPoint === 'ConnectorTargetEnd' &&\n ((!Point.equals(args.source.connectors[0].targetPoint, this.undoElement.connectors[0].targetPoint))\n || (args.source.connectors[0].targetID !== this.undoElement.connectors[0].targetID))))) {\n var oldValues = void 0;\n var connector = void 0;\n if (args.source && args.source.connectors) {\n oldValues = {\n x: this.prevPosition.x, y: this.prevPosition.y\n };\n connector = args.source.connectors[0];\n }\n var targetPortName = void 0;\n var targetNodeNode = void 0;\n if (args.target) {\n var target = this.commandHandler.findTarget(args.targetWrapper, args.target, this.endPoint === 'ConnectorSourceEnd', true);\n (target instanceof PointPort) ? targetPortName = target.id : targetNodeNode = target.id;\n }\n var arg = {\n connector: connector, state: 'Completed', targetNode: targetNodeNode,\n oldValue: oldValues, newValue: oldValues, cancel: false, targetPort: targetPortName\n };\n var trigger = this.endPoint === 'ConnectorSourceEnd' ? DiagramEvent.sourcePointChange : DiagramEvent.targetPointChange;\n this.commandHandler.triggerEvent(trigger, arg);\n this.commandHandler.removeTerminalSegment(connector, true);\n if (this.undoElement && args.source) {\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'ConnectionChanged', redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement),\n category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n }\n else if (!(this instanceof ConnectorDrawingTool) &&\n (this.endPoint === 'BezierTargetThumb' || this.endPoint === 'BezierSourceThumb')) {\n if (this.undoElement && args.source) {\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'SegmentChanged', redoObject: obj, undoObject: this.undoElement, category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n }\n _super.prototype.mouseUp.call(this, args);\n };\n ConnectTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if ((!(this instanceof ConnectorDrawingTool)) && ((this.endPoint === 'ConnectorSourceEnd' &&\n Point.equals(args.source.connectors[0].sourcePoint, this.undoElement.connectors[0].sourcePoint)) ||\n (this.endPoint === 'ConnectorTargetEnd' &&\n Point.equals(args.source.connectors[0].targetPoint, this.undoElement.connectors[0].targetPoint)))) {\n var oldValue = void 0;\n var connectors = void 0;\n if (args.source && args.source.connectors) {\n oldValue = { x: this.prevPosition.x, y: this.prevPosition.y };\n connectors = args.source.connectors[0];\n }\n var targetPort = void 0;\n var targetNode = void 0;\n if (args.target) {\n targetNode = args.target.id;\n var target = this.commandHandler.findTarget(args.targetWrapper, args.target, this.endPoint === 'ConnectorSourceEnd', true);\n (target instanceof PointPort || target instanceof BpmnSubEvent) ? targetPort = target.id : targetNode = target.id;\n }\n var arg = {\n connector: connectors, state: 'Start', targetNode: targetNode,\n oldValue: oldValue, newValue: oldValue, cancel: false, targetPort: targetPort\n };\n var trigger = this.endPoint === 'ConnectorSourceEnd' ?\n DiagramEvent.sourcePointChange : DiagramEvent.targetPointChange;\n this.commandHandler.triggerEvent(trigger, arg);\n }\n this.currentPosition = args.position;\n if (this.currentPosition && this.prevPosition) {\n var diffX = this.currentPosition.x - this.prevPosition.x;\n var diffY = this.currentPosition.y - this.prevPosition.y;\n var newValue = void 0;\n var oldValue = void 0;\n this.currentPosition = this.commandHandler.snapConnectorEnd(this.currentPosition);\n var connector = void 0;\n if (args.source && args.source.connectors) {\n newValue = {\n x: this.currentPosition.x, y: this.currentPosition.y,\n };\n oldValue = {\n x: this.prevPosition.x, y: this.prevPosition.y\n };\n connector = args.source.connectors[0];\n }\n var targetPortId = void 0;\n var targetNodeId = void 0;\n if (args.target) {\n var target = this.commandHandler.findTarget(args.targetWrapper, args.target, this.endPoint === 'ConnectorSourceEnd', true);\n (target instanceof PointPort) ? targetPortId = target.id : targetNodeId = target.id;\n }\n var arg = {\n connector: connector, state: 'Progress', targetNode: targetNodeId,\n oldValue: oldValue, newValue: newValue, cancel: false, targetPort: targetPortId\n };\n if (!(this instanceof ConnectorDrawingTool)) {\n var trigger = this.endPoint === 'ConnectorSourceEnd' ?\n DiagramEvent.sourcePointChange : DiagramEvent.targetPointChange;\n this.commandHandler.triggerEvent(trigger, arg);\n }\n if (!arg.cancel && this.inAction && this.endPoint !== undefined && diffX !== 0 || diffY !== 0) {\n this.blocked = !this.commandHandler.dragConnectorEnds(this.endPoint, args.source, this.currentPosition, this.selectedSegment, args.target, targetPortId);\n this.commandHandler.updateSelector();\n if (args.target && ((this.endPoint === 'ConnectorSourceEnd' && canOutConnect(args.target))\n || (this.endPoint === 'ConnectorTargetEnd' && canInConnect(args.target)))) {\n if (this.commandHandler.canDisconnect(this.endPoint, args, targetPortId, targetNodeId)) {\n this.commandHandler.disConnect(args.source, this.endPoint);\n }\n this.commandHandler.connect(this.endPoint, args);\n }\n else if (this.endPoint.indexOf('Bezier') === -1) {\n this.commandHandler.disConnect(args.source, this.endPoint);\n this.commandHandler.updateSelector();\n }\n }\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.position);\n this.commandHandler.showTooltip(args.source, args.position, content, 'ConnectTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n ConnectTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n ConnectTool.prototype.getTooltipContent = function (position) {\n return 'X:' + Math.round(position.x) + ' ' + 'Y:' + Math.round(position.y);\n };\n ConnectTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n this.prevPosition = null;\n this.endPoint = null;\n };\n return ConnectTool;\n}(ToolBase));\nexport { ConnectTool };\n/**\n * Drags the selected objects\n */\nvar MoveTool = /** @class */ (function (_super) {\n __extends(MoveTool, _super);\n function MoveTool(commandHandler, objType) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.currentTarget = null;\n _this.objectType = objType;\n return _this;\n }\n MoveTool.prototype.mouseDown = function (args) {\n if (args.source instanceof Node || args.source instanceof Connector) {\n this.commandHandler.selectObjects([args.source], args.info && args.info.ctrlKey);\n var selectedObject = { nodes: [], connectors: [] };\n if (args.source instanceof Node) {\n selectedObject.nodes.push(cloneObject(args.source));\n }\n else {\n selectedObject.connectors.push(cloneObject(args.source));\n }\n this.undoElement = cloneObject(selectedObject);\n }\n else {\n this.undoElement = cloneObject(args.source);\n }\n this.undoParentElement = this.commandHandler.getSubProcess(args.source);\n if (this.objectType === 'Port') {\n this.portId = args.sourceWrapper.id;\n }\n _super.prototype.mouseDown.call(this, args);\n this.initialOffset = { x: 0, y: 0 };\n };\n MoveTool.prototype.mouseUp = function (args) {\n var obj;\n var historyAdded = false;\n var redoObject = { nodes: [], connectors: [] };\n if (this.objectType !== 'Port') {\n if (args.source instanceof Node || args.source instanceof Connector) {\n if (args.source instanceof Node) {\n redoObject.nodes.push(cloneObject(args.source));\n }\n else {\n redoObject.connectors.push(cloneObject(args.source));\n }\n obj = cloneObject(redoObject);\n var wrapper = args.source.wrapper;\n obj.offsetX = wrapper.offsetX;\n obj.offsetY = wrapper.offsetY;\n }\n else {\n obj = cloneObject(args.source);\n }\n if (obj.offsetX !== this.undoElement.offsetX || obj.offsetY !== this.undoElement.offsetY) {\n var oldValues = void 0;\n var newValues = void 0;\n if (args.source) {\n newValues = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n oldValues = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n }\n var arg = {\n source: args.source, state: 'Completed', oldValue: oldValues, newValue: newValues,\n target: this.currentTarget, targetPosition: this.currentPosition, allowDrop: true, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.positionChange, arg);\n this.commandHandler.startGroupAction();\n historyAdded = true;\n var entry = {\n type: 'PositionChanged',\n redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal'\n };\n if (obj.nodes[0] && obj.nodes[0].processId) {\n var entry_1 = {\n type: 'SizeChanged', category: 'Internal',\n undoObject: this.undoParentElement, redoObject: this.commandHandler.getSubProcess(args.source)\n };\n this.commandHandler.addHistoryEntry(entry_1);\n }\n this.commandHandler.addHistoryEntry(entry);\n }\n var snappedPoint = this.commandHandler.snapPoint(this.prevPosition, this.currentPosition, 0, 0);\n this.commandHandler.removeSnap();\n this.commandHandler.removeHighlighter();\n if (args.source && this.currentTarget && canAllowDrop(this.currentTarget) &&\n this.commandHandler.isDroppable(args.source, this.currentTarget)) {\n this.commandHandler.drop(this.currentElement, this.currentTarget, this.currentPosition);\n var arg = {\n element: args.source, target: this.currentTarget, position: this.currentPosition, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.drop, arg);\n }\n if (args.source && this.currentTarget) {\n this.commandHandler.dropAnnotation(args.source, this.currentTarget);\n }\n this.commandHandler.updateSelector();\n if (historyAdded) {\n this.commandHandler.endGroupAction();\n }\n }\n else {\n redoObject.nodes.push(cloneObject(args.source));\n obj = cloneObject(redoObject);\n var entry = {\n type: 'PortPositionChanged', changeObjectId: this.portId,\n redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n _super.prototype.mouseUp.call(this, args);\n };\n MoveTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n var isSame = false;\n if (args.source instanceof Node || args.source instanceof Connector) {\n if (args.source instanceof Node) {\n if (args.source.offsetX === this.undoElement.nodes[0].offsetX &&\n args.source.offsetY === this.undoElement.nodes[0].offsetY) {\n isSame = true;\n }\n }\n else {\n if (Point.equals(args.source.sourcePoint, this.undoElement.connectors[0].sourcePoint) &&\n Point.equals(args.source.targetPoint, this.undoElement.connectors[0].targetPoint)) {\n isSame = true;\n }\n }\n }\n else {\n if (args.source.wrapper.offsetX === this.undoElement.wrapper.offsetX &&\n args.source.wrapper.offsetY === this.undoElement.wrapper.offsetY) {\n isSame = true;\n }\n }\n var oldValues;\n if (args.source) {\n oldValues = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n }\n var arg = {\n source: args.source, state: 'Start', oldValue: oldValues, newValue: oldValues,\n target: args.target, targetPosition: args.position, allowDrop: true, cancel: false\n };\n if (isSame) {\n this.commandHandler.triggerEvent(DiagramEvent.positionChange, arg);\n }\n this.currentPosition = args.position;\n if (this.objectType !== 'Port') {\n var x = this.currentPosition.x - this.prevPosition.x;\n var y = this.currentPosition.y - this.prevPosition.y;\n var diffX = this.initialOffset.x + (this.currentPosition.x - this.prevPosition.x);\n var diffY = this.initialOffset.y + (this.currentPosition.y - this.prevPosition.y);\n this.commandHandler.dragOverElement(args, this.currentPosition);\n this.commandHandler.disConnect(args.source);\n this.commandHandler.removeSnap();\n var oldValues_1;\n var newValues = void 0;\n var snappedPoint = this.commandHandler.snapPoint(this.prevPosition, this.currentPosition, diffX, diffY);\n this.initialOffset.x = diffX - snappedPoint.x;\n this.initialOffset.y = diffY - snappedPoint.y;\n if (args.source) {\n oldValues_1 = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n newValues = {\n offsetX: args.source.wrapper.offsetX + snappedPoint.x,\n offsetY: args.source.wrapper.offsetY + snappedPoint.y\n };\n }\n if (this.currentTarget && args.target !== this.currentTarget) {\n this.commandHandler.removeChildFromBPmn(args.source, args.target, this.currentTarget);\n }\n this.currentTarget = args.target;\n var arg_1 = {\n source: args.source, state: 'Progress', oldValue: oldValues_1, newValue: newValues,\n target: args.target, targetPosition: args.position, allowDrop: true, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.positionChange, arg_1);\n if (!arg_1.cancel) {\n this.blocked = !this.commandHandler.dragSelectedObjects(snappedPoint.x, snappedPoint.y);\n var blocked = !(this.commandHandler.mouseOver(this.currentElement, this.currentTarget, this.currentPosition));\n this.blocked = this.blocked || blocked;\n }\n if (this.currentTarget && (args.source !== this.currentTarget) &&\n this.commandHandler.isDroppable(args.source, this.currentTarget)) {\n this.commandHandler.drawHighlighter(this.currentTarget);\n }\n else {\n this.commandHandler.removeHighlighter();\n }\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.source);\n this.commandHandler.showTooltip(args.source, args.position, content, 'MoveTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n }\n else {\n this.commandHandler.portDrag(args.source, args.sourceWrapper, args.position.x - this.prevPosition.x, args.position.y - this.prevPosition.y);\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n MoveTool.prototype.getTooltipContent = function (node) {\n return 'X:' + Math.round(node.wrapper.bounds.x) + ' ' + 'Y:' + Math.round(node.wrapper.bounds.y);\n };\n MoveTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n MoveTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n this.currentTarget = null;\n this.prevPosition = null;\n };\n return MoveTool;\n}(ToolBase));\nexport { MoveTool };\n/**\n * Rotates the selected objects\n */\nvar RotateTool = /** @class */ (function (_super) {\n __extends(RotateTool, _super);\n function RotateTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n RotateTool.prototype.mouseDown = function (args) {\n this.undoElement = cloneObject(args.source);\n if (this.undoElement.nodes[0] && this.undoElement.nodes[0].children) {\n var objects = [];\n var nodes = this.commandHandler.getAllDescendants(this.undoElement.nodes[0], objects);\n for (var i = 0; i < nodes.length; i++) {\n var node = this.commandHandler.cloneChild(nodes[i].id);\n this.childTable[nodes[i].id] = cloneObject(node);\n }\n }\n _super.prototype.mouseDown.call(this, args);\n };\n RotateTool.prototype.mouseUp = function (args) {\n if (this.undoElement.rotateAngle !== args.source.wrapper.rotateAngle) {\n var oldValue = { rotateAngle: args.source.wrapper.rotateAngle };\n var arg = {\n source: args.source, state: 'Completed', oldValue: oldValue,\n newValue: oldValue, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.rotateChange, arg);\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'RotationChanged', redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal',\n childTable: this.childTable\n };\n this.commandHandler.addHistoryEntry(entry);\n this.commandHandler.updateSelector();\n }\n _super.prototype.mouseUp.call(this, args);\n };\n RotateTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.undoElement.rotateAngle === args.source.wrapper.rotateAngle) {\n var oldValue_1 = { rotateAngle: args.source.wrapper.rotateAngle };\n var arg_2 = {\n source: args.source, state: 'Start', oldValue: oldValue_1, newValue: oldValue_1, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.rotateChange, arg_2);\n }\n this.currentPosition = args.position;\n var refPoint = { x: this.currentElement.wrapper.offsetX, y: this.currentElement.wrapper.offsetY };\n var angle = Point.findAngle(refPoint, this.currentPosition) + 90;\n var snapAngle = this.commandHandler.snapAngle(angle);\n angle = snapAngle !== 0 ? snapAngle : angle;\n angle = (angle + 360) % 360;\n var oldValue = { rotateAngle: args.source.wrapper.rotateAngle };\n var newValue = { rotateAngle: angle };\n var arg = {\n source: args.source, state: 'Progress', oldValue: oldValue,\n newValue: newValue, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.rotateChange, arg);\n if (!arg.cancel) {\n this.blocked = !(this.commandHandler.rotateSelectedItems(angle - this.currentElement.wrapper.rotateAngle));\n }\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.source);\n this.commandHandler.showTooltip(args.source, args.position, content, 'RotateTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n return !this.blocked;\n };\n RotateTool.prototype.getTooltipContent = function (node) {\n return Math.round((node.rotateAngle % 360)).toString() + '\\xB0';\n };\n RotateTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n RotateTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n return RotateTool;\n}(ToolBase));\nexport { RotateTool };\n/**\n * Scales the selected objects\n */\nvar ResizeTool = /** @class */ (function (_super) {\n __extends(ResizeTool, _super);\n function ResizeTool(commandHandler, corner) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.initialBounds = new Rect();\n _this.corner = corner;\n return _this;\n }\n ResizeTool.prototype.mouseDown = function (args) {\n this.undoElement = cloneObject(args.source);\n this.undoParentElement = this.commandHandler.getSubProcess(args.source);\n _super.prototype.mouseDown.call(this, args);\n if (this.undoElement.nodes[0] && this.undoElement.nodes[0].children) {\n var elements = [];\n var nodes = this.commandHandler.getAllDescendants(this.undoElement.nodes[0], elements);\n for (var i = 0; i < nodes.length; i++) {\n var node = this.commandHandler.cloneChild(nodes[i].id);\n this.childTable[nodes[i].id] = cloneObject(node);\n }\n }\n _super.prototype.mouseDown.call(this, args);\n this.initialBounds.x = args.source.wrapper.offsetX;\n this.initialBounds.y = args.source.wrapper.offsetY;\n this.initialBounds.height = args.source.wrapper.actualSize.height;\n this.initialBounds.width = args.source.wrapper.actualSize.width;\n };\n ResizeTool.prototype.mouseUp = function (args) {\n this.commandHandler.removeSnap();\n if (this.undoElement.offsetX !== args.source.wrapper.offsetX || this.undoElement.offsetY !== args.source.wrapper.offsetY) {\n var deltaValues = this.updateSize(args.source, this.currentPosition, this.prevPosition, this.corner, this.initialBounds);\n this.blocked = this.scaleObjects(deltaValues.width, deltaValues.height, this.corner, this.currentPosition, this.prevPosition, args.source);\n var oldValue = {\n offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY,\n width: args.source.wrapper.actualSize.width, height: args.source.wrapper.actualSize.height\n };\n var arg = {\n source: args.source, state: 'Completed',\n oldValue: oldValue, newValue: oldValue, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.sizeChange, arg);\n var obj = cloneObject(args.source);\n var entry = {\n type: 'SizeChanged', redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal',\n childTable: this.childTable\n };\n this.commandHandler.startGroupAction();\n this.commandHandler.addHistoryEntry(entry);\n if (obj.nodes[0] && obj.nodes[0].processId) {\n var entry_2 = {\n type: 'SizeChanged', redoObject: this.commandHandler.getSubProcess(args.source),\n undoObject: this.undoParentElement, category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry_2);\n }\n this.commandHandler.endGroupAction();\n }\n _super.prototype.mouseUp.call(this, args);\n return !this.blocked;\n };\n ResizeTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.undoElement.offsetX === args.source.wrapper.offsetX && this.undoElement.offsetY === args.source.wrapper.offsetY) {\n var oldValue = {\n offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY,\n width: args.source.wrapper.actualSize.width, height: args.source.wrapper.actualSize.height\n };\n var arg = {\n source: args.source, state: 'Start', oldValue: oldValue, newValue: this.currentElement, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.sizeChange, arg);\n }\n this.currentPosition = args.position;\n var x = this.currentPosition.x - this.startPosition.x;\n var y = this.currentPosition.y - this.startPosition.y;\n var changes = { x: x, y: y };\n changes = rotatePoint(-this.currentElement.wrapper.rotateAngle, undefined, undefined, changes);\n var sx = (this.currentElement.wrapper.actualSize.width + changes.x) / this.currentElement.wrapper.actualSize.width;\n var sy = (this.currentElement.wrapper.actualSize.height + changes.y) / this.currentElement.wrapper.actualSize.height;\n changes = this.getChanges(changes);\n this.commandHandler.removeSnap();\n var deltaValues = this.updateSize(args.source, this.startPosition, this.currentPosition, this.corner, this.initialBounds);\n this.blocked = !(this.scaleObjects(deltaValues.width, deltaValues.height, this.corner, this.startPosition, this.currentPosition, args.source));\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.source);\n this.commandHandler.showTooltip(args.source, args.position, content, 'ResizeTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n ResizeTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n ResizeTool.prototype.getTooltipContent = function (node) {\n return 'W:' + Math.round(node.wrapper.bounds.width) + ' ' + 'H:' + Math.round(node.wrapper.bounds.height);\n };\n ResizeTool.prototype.getChanges = function (change) {\n switch (this.corner) {\n case 'ResizeEast':\n return { x: change.x, y: 0 };\n case 'ResizeSouthEast':\n return change;\n case 'ResizeSouth':\n return { x: 0, y: change.y };\n case 'ResizeNorth':\n return { x: 0, y: -change.y };\n case 'ResizeNorthEast':\n return { x: change.x, y: -change.y };\n case 'ResizeNorthWest':\n return { x: -change.x, y: -change.y };\n case 'ResizeWest':\n return { x: -change.x, y: 0 };\n case 'ResizeSouthWest':\n return { x: -change.x, y: change.y };\n }\n return change;\n };\n /**\n * Updates the size with delta width and delta height using scaling.\n */\n /**\n * Aspect ratio used to resize the width or height based on resizing the height or width\n */\n ResizeTool.prototype.scaleObjects = function (deltaWidth, deltaHeight, corner, startPoint, endPoint, source) {\n if (source.nodes.length === 1 && source.nodes[0].constraints & NodeConstraints.AspectRatio) {\n if (corner === 'ResizeWest' || corner === 'ResizeEast' || corner === 'ResizeNorth' || corner === 'ResizeSouth') {\n if (!(deltaHeight === 1 && deltaWidth === 1)) {\n deltaHeight = deltaWidth = Math.max(deltaHeight === 1 ? 0 : deltaHeight, deltaWidth === 1 ? 0 : deltaWidth);\n }\n }\n else if (startPoint !== endPoint) {\n deltaHeight = deltaWidth = Math.max(deltaHeight, deltaWidth);\n }\n else {\n deltaHeight = deltaWidth = 0;\n }\n }\n var oldValue = {\n offsetX: source.offsetX, offsetY: source.offsetY,\n width: source.width, height: source.height\n };\n this.blocked = this.commandHandler.scaleSelectedItems(deltaWidth, deltaHeight, this.getPivot(this.corner));\n var newValue = {\n offsetX: source.offsetX, offsetY: source.offsetY,\n width: source.width, height: source.height\n };\n var arg = { source: source, state: 'Progress', oldValue: oldValue, newValue: newValue, cancel: false };\n this.commandHandler.triggerEvent(DiagramEvent.sizeChange, arg);\n if (arg.cancel) {\n this.commandHandler.scaleSelectedItems(1 / deltaWidth, 1 / deltaHeight, this.getPivot(this.corner));\n }\n return this.blocked;\n };\n return ResizeTool;\n}(ToolBase));\nexport { ResizeTool };\n/**\n * Draws a node that is defined by the user\n */\nvar NodeDrawingTool = /** @class */ (function (_super) {\n __extends(NodeDrawingTool, _super);\n function NodeDrawingTool(commandHandler, sourceObject) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.sourceObject = sourceObject;\n return _this;\n }\n NodeDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n };\n NodeDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n var checkBoundaryConstraints;\n var node = {\n offsetX: this.currentPosition.x, width: 3, height: 3,\n offsetY: this.currentPosition.y\n };\n if (!this.drawingObject) {\n this.drawingObject = this.commandHandler.drawObject(node);\n }\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, rect);\n if (checkBoundaryConstraints) {\n this.commandHandler.updateNodeDimension(this.drawingObject, rect);\n }\n }\n return checkBoundaryConstraints;\n };\n NodeDrawingTool.prototype.mouseUp = function (args) {\n var checkBoundaryConstraints;\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, rect);\n if (this.drawingObject && this.drawingObject instanceof Node) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n this.drawingObject = null;\n }\n _super.prototype.mouseUp.call(this, args);\n this.inAction = false;\n };\n NodeDrawingTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n NodeDrawingTool.prototype.mouseLeave = function (args) {\n if (this.inAction) {\n this.mouseUp(args);\n }\n };\n return NodeDrawingTool;\n}(ToolBase));\nexport { NodeDrawingTool };\n/**\n * Draws a connector that is defined by the user\n */\nvar ConnectorDrawingTool = /** @class */ (function (_super) {\n __extends(ConnectorDrawingTool, _super);\n function ConnectorDrawingTool(commandHandler, endPoint, sourceObject) {\n var _this = _super.call(this, commandHandler, endPoint) || this;\n _this.sourceObject = sourceObject;\n return _this;\n }\n ConnectorDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n };\n ConnectorDrawingTool.prototype.mouseMove = function (args) {\n if (this.inAction) {\n var connector = {\n sourcePoint: this.currentPosition, targetPoint: this.currentPosition,\n };\n if (!this.drawingObject) {\n this.drawingObject = this.commandHandler.drawObject(connector);\n }\n args.source = this.drawingObject;\n if (args.target) {\n this.commandHandler.connect(this.endPoint, args);\n }\n this.endPoint = 'ConnectorTargetEnd';\n }\n if (!this.inAction) {\n this.commandHandler.updateSelector();\n if (args.source && args.sourceWrapper) {\n this.commandHandler.renderHighlighter(args, true);\n }\n }\n _super.prototype.mouseMove.call(this, args);\n return !this.blocked;\n };\n ConnectorDrawingTool.prototype.mouseUp = function (args) {\n if (this.drawingObject && this.drawingObject instanceof Connector) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n this.drawingObject = null;\n }\n this.inAction = false;\n _super.prototype.mouseUp.call(this, args);\n };\n ConnectorDrawingTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n ConnectorDrawingTool.prototype.mouseLeave = function (args) {\n if (this.inAction) {\n this.mouseUp(args);\n }\n };\n return ConnectorDrawingTool;\n}(ConnectTool));\nexport { ConnectorDrawingTool };\nvar TextDrawingTool = /** @class */ (function (_super) {\n __extends(TextDrawingTool, _super);\n function TextDrawingTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n TextDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.commandHandler.clearSelection();\n var node = {\n shape: { type: 'Text' },\n offsetX: this.currentPosition.x, width: 50, height: 20,\n offsetY: this.currentPosition.y\n };\n if (!args.source) {\n this.drawingNode = this.commandHandler.drawObject(node);\n }\n };\n TextDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (!this.drawingNode) {\n var node = {\n shape: { type: 'Text' }, offsetX: this.currentPosition.x, width: 30, height: 30,\n style: { strokeDashArray: '2 2', fill: 'transparent' }, offsetY: this.currentPosition.y\n };\n this.drawingNode = this.commandHandler.drawObject(node);\n }\n else {\n this.drawingNode.style.strokeColor = 'black';\n this.drawingNode.style.strokeDashArray = '2 2';\n this.drawingNode.style.fill = 'transparent';\n }\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n this.commandHandler.updateNodeDimension(this.drawingNode, rect);\n }\n return !this.blocked;\n };\n TextDrawingTool.prototype.mouseUp = function (args) {\n if (this.drawingNode) {\n this.drawingNode.style.strokeColor = 'none';\n this.drawingNode.style.fill = 'none';\n }\n else {\n this.drawingNode = args.source;\n }\n if (this.drawingNode && (this.drawingNode instanceof Node || this.drawingNode instanceof Connector)) {\n this.commandHandler.addText(this.drawingNode, this.currentPosition);\n }\n _super.prototype.mouseUp.call(this, args);\n this.inAction = false;\n };\n TextDrawingTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n return TextDrawingTool;\n}(ToolBase));\nexport { TextDrawingTool };\n/**\n * Pans the diagram control on drag\n */\nvar ZoomPanTool = /** @class */ (function (_super) {\n __extends(ZoomPanTool, _super);\n function ZoomPanTool(commandHandler, zoom) {\n var _this = _super.call(this, commandHandler) || this;\n _this.zooming = zoom;\n return _this;\n }\n ZoomPanTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n };\n ZoomPanTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n if (!this.zooming && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var difX = this.currentPosition.x - this.prevPosition.x;\n var difY = this.currentPosition.y - this.prevPosition.y;\n this.commandHandler.scroll(difX, difY, this.currentPosition);\n }\n else if (args.moveTouches.length >= 2) {\n var startTouch0 = args.startTouches[0];\n var startTouch1 = args.startTouches[1];\n var moveTouch0 = args.moveTouches[0];\n var moveTouch1 = args.moveTouches[1];\n var scale = this.getDistance(moveTouch0, moveTouch1) / this.getDistance(startTouch0, startTouch1);\n var focusPoint = args.position;\n this.commandHandler.zoom(scale, 0, 0, focusPoint);\n this.updateTouch(startTouch0, moveTouch0);\n this.updateTouch(startTouch1, moveTouch1);\n }\n }\n return !this.blocked;\n };\n ZoomPanTool.prototype.mouseUp = function (args) {\n _super.prototype.mouseUp.call(this, args);\n this.inAction = false;\n };\n ZoomPanTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n ZoomPanTool.prototype.getDistance = function (touch1, touch2) {\n var x = touch2.pageX - touch1.pageX;\n var y = touch2.pageY - touch1.pageY;\n return Math.sqrt((x * x) + (y * y));\n };\n ZoomPanTool.prototype.updateTouch = function (startTouch, moveTouch) {\n startTouch.pageX = moveTouch.pageX;\n startTouch.pageY = moveTouch.pageY;\n };\n return ZoomPanTool;\n}(ToolBase));\nexport { ZoomPanTool };\n/**\n * Animate the layout during expand and collapse\n */\nvar ExpandTool = /** @class */ (function (_super) {\n __extends(ExpandTool, _super);\n function ExpandTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n ExpandTool.prototype.mouseUp = function (args) {\n this.commandHandler.initExpand(args);\n _super.prototype.mouseUp.call(this, args);\n };\n return ExpandTool;\n}(ToolBase));\nexport { ExpandTool };\n/**\n * Opens the annotation hypeLink at mouse up\n */\nvar LabelTool = /** @class */ (function (_super) {\n __extends(LabelTool, _super);\n function LabelTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n LabelTool.prototype.mouseUp = function (args) {\n var win = window.open(args.sourceWrapper.hyperlink.link, '_blank');\n win.focus();\n _super.prototype.mouseUp.call(this, args);\n };\n return LabelTool;\n}(ToolBase));\nexport { LabelTool };\n/**\n * Draws a Polygon shape node dynamically using polygon Tool\n */\nvar PolygonDrawingTool = /** @class */ (function (_super) {\n __extends(PolygonDrawingTool, _super);\n function PolygonDrawingTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n PolygonDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n if (!this.drawingObject) {\n this.startPoint = { x: this.startPosition.x, y: this.startPosition.y };\n var node = {\n offsetX: this.currentPosition.x,\n offsetY: this.currentPosition.y,\n width: 5, height: 5,\n style: { strokeColor: 'black', strokeWidth: 1 },\n shape: {\n type: 'Basic',\n shape: 'Polygon',\n points: [{ x: this.startPoint.x, y: this.startPoint.y }, { x: this.currentPosition.x, y: this.currentPosition.y }]\n }\n };\n this.drawingObject = this.commandHandler.drawObject(node);\n }\n else {\n var pt = void 0;\n var obj = this.drawingObject.shape;\n pt = obj.points[obj.points.length - 1];\n pt = { x: pt.x, y: pt.y };\n this.drawingObject.shape.points.push(pt);\n }\n };\n PolygonDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n var obj = this.drawingObject.shape;\n if (this.drawingObject && this.currentPosition) {\n obj.points[obj.points.length - 1].x = this.currentPosition.x;\n obj.points[obj.points.length - 1].y = this.currentPosition.y;\n this.drawingObject.wrapper.children[0].data = getPolygonPath(this.drawingObject.shape.points);\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var region = Rect.toBounds(this.drawingObject.shape.points);\n this.commandHandler.updateNodeDimension(this.drawingObject, region);\n }\n }\n }\n return true;\n };\n PolygonDrawingTool.prototype.mouseUp = function (args, dblClickArgs) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n this.inAction = false;\n if (this.drawingObject) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n }\n }\n this.endAction();\n };\n PolygonDrawingTool.prototype.mouseWheel = function (args) {\n _super.prototype.mouseWheel.call(this, args);\n this.mouseMove(args);\n };\n PolygonDrawingTool.prototype.endAction = function () {\n this.inAction = false;\n this.drawingObject = null;\n };\n return PolygonDrawingTool;\n}(ToolBase));\nexport { PolygonDrawingTool };\n/**\n * Draws a PolyLine Connector dynamically using PolyLine Drawing Tool\n */\nvar PolyLineDrawingTool = /** @class */ (function (_super) {\n __extends(PolyLineDrawingTool, _super);\n function PolyLineDrawingTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n PolyLineDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n var obj = this.drawingObject;\n obj.targetPoint = this.currentPosition;\n this.commandHandler.updateConnectorPoints(obj);\n }\n return true;\n };\n PolyLineDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n if (!this.drawingObject) {\n var connector = {\n id: 'Connector',\n type: 'Straight',\n sourcePoint: this.currentPosition,\n targetPoint: this.currentPosition\n };\n this.drawingObject = this.commandHandler.drawObject(connector);\n }\n else {\n var drawObject = this.drawingObject;\n var segment = void 0;\n segment = new StraightSegment(drawObject, 'segments', { type: 'Straight' }, true);\n segment.point = this.currentPosition;\n drawObject.segments[drawObject.segments.length - 1] = segment;\n }\n };\n PolyLineDrawingTool.prototype.mouseWheel = function (args) {\n _super.prototype.mouseWheel.call(this, args);\n this.mouseMove(args);\n };\n PolyLineDrawingTool.prototype.mouseUp = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n if (this.drawingObject) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n }\n }\n this.endAction();\n };\n PolyLineDrawingTool.prototype.endAction = function () {\n this.drawingObject = null;\n this.inAction = false;\n };\n return PolyLineDrawingTool;\n}(ToolBase));\nexport { PolyLineDrawingTool };\nvar LabelDragTool = /** @class */ (function (_super) {\n __extends(LabelDragTool, _super);\n function LabelDragTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n LabelDragTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n this.undoElement = cloneObject(args.source);\n this.annotationId = args.sourceWrapper.id;\n _super.prototype.mouseDown.call(this, args);\n };\n LabelDragTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n var difx = this.currentPosition.x - this.prevPosition.x;\n var dify = this.currentPosition.y - this.prevPosition.y;\n var node = args.source;\n if (node instanceof Node) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, -node.rotateAngle, 0, 0);\n var diff = transformPointByMatrix(matrix, { x: difx, y: dify });\n difx = diff.x;\n dify = diff.y;\n }\n if (this.inAction) {\n this.commandHandler.labelDrag(args.source, args.sourceWrapper, difx, dify);\n this.commandHandler.updateSelector();\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n LabelDragTool.prototype.mouseUp = function (args) {\n var redoValue = args.source;\n this.inAction = false;\n var entryValue = {\n type: 'AnnotationPropertyChanged',\n changeObjectId: this.annotationId, undoObject: cloneObject(this.undoElement),\n category: 'Internal', redoObject: cloneObject(redoValue)\n };\n this.commandHandler.addHistoryEntry(entryValue);\n _super.prototype.mouseUp.call(this, args);\n };\n LabelDragTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n return LabelDragTool;\n}(ToolBase));\nexport { LabelDragTool };\nvar LabelResizeTool = /** @class */ (function (_super) {\n __extends(LabelResizeTool, _super);\n function LabelResizeTool(commandHandler, corner) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.corner = corner;\n return _this;\n }\n LabelResizeTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n var object = (args.source.nodes.length) ?\n args.source.nodes[0] : args.source.connectors[0];\n this.annotationId = args.source.wrapper.children[0].id;\n this.undoElement = cloneObject(object);\n var annotation = args.source.wrapper.children[0];\n this.initialBounds = {\n x: annotation.offsetX,\n y: annotation.offsetY,\n width: annotation.actualSize.width,\n height: annotation.actualSize.height\n };\n _super.prototype.mouseDown.call(this, args);\n };\n LabelResizeTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n this.resizeObject(args);\n }\n return !this.blocked;\n };\n LabelResizeTool.prototype.mouseUp = function (args) {\n var redoObject = (args.source.nodes.length) ?\n args.source.nodes[0] : args.source.connectors[0];\n this.inAction = false;\n var entry = {\n type: 'AnnotationPropertyChanged', changeObjectId: this.annotationId,\n redoObject: cloneObject(redoObject), undoObject: cloneObject(this.undoElement), category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n _super.prototype.mouseUp.call(this, args);\n };\n LabelResizeTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n LabelResizeTool.prototype.resizeObject = function (args) {\n var object;\n object = (args.source.nodes.length) ? args.source.nodes[0] : args.source.connectors[0];\n var textElement = args.source.wrapper.children[0];\n var deltaWidth;\n var deltaHeight;\n var center = { x: textElement.offsetX, y: textElement.offsetY };\n var rotateAngle = textElement.rotateAngle;\n rotateAngle += (object instanceof Node) ? object.rotateAngle : 0;\n rotateAngle = (rotateAngle + 360) % 360;\n var trans = identityMatrix();\n rotateMatrix(trans, rotateAngle, center.x, center.y);\n var corner = this.corner.slice(5);\n var pivot = this.updateSize(textElement, this.startPosition, this.currentPosition, corner, this.initialBounds, rotateAngle);\n var x = textElement.offsetX - textElement.actualSize.width * textElement.pivot.x;\n var y = textElement.offsetY - textElement.actualSize.height * textElement.pivot.y;\n var pivotPoint = this.getPivot(corner);\n pivotPoint = { x: x + textElement.actualSize.width * pivotPoint.x, y: y + textElement.actualSize.height * pivotPoint.y };\n var point = transformPointByMatrix(trans, pivotPoint);\n pivot.x = point.x;\n pivot.y = point.y;\n deltaWidth = pivot.width;\n deltaHeight = pivot.height;\n deltaWidth = (deltaWidth < 0) ? 1 : deltaWidth;\n deltaHeight = (deltaHeight < 0) ? 1 : deltaHeight;\n this.commandHandler.labelResize(object, args.source.annotation, deltaWidth, deltaHeight, pivot, args.source);\n this.commandHandler.updateSelector();\n };\n return LabelResizeTool;\n}(ToolBase));\nexport { LabelResizeTool };\nvar LabelRotateTool = /** @class */ (function (_super) {\n __extends(LabelRotateTool, _super);\n function LabelRotateTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n LabelRotateTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n this.annotationId = args.source.wrapper.children[0].id;\n var object = (args.source.nodes.length) ?\n args.source.nodes[0] : args.source.connectors[0];\n this.undoElement = cloneObject(object);\n _super.prototype.mouseDown.call(this, args);\n };\n LabelRotateTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (args.source) {\n if (this.inAction) {\n var object = args.source.nodes[0] ? args.source.nodes[0] :\n args.source.connectors[0];\n var annotation = void 0;\n annotation = (args.source.annotation);\n this.commandHandler.labelRotate(object, annotation, this.currentPosition, args.source);\n this.commandHandler.updateSelector();\n }\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n LabelRotateTool.prototype.mouseUp = function (args) {\n this.inAction = false;\n var redoEntry = (args.source.nodes.length) ?\n args.source.nodes[0] : args.source.connectors[0];\n var entryObject = {\n type: 'AnnotationPropertyChanged', changeObjectId: this.annotationId,\n redoObject: cloneObject(redoEntry),\n undoObject: cloneObject(this.undoElement), category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entryObject);\n _super.prototype.mouseUp.call(this, args);\n };\n LabelRotateTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n return LabelRotateTool;\n}(ToolBase));\nexport { LabelRotateTool };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Point } from '../primitives/point';\nimport { Rect } from '../primitives/rect';\nimport { intersect3 } from '../utility/diagram-util';\nimport { cloneObject } from '../utility/base-util';\nimport { contains } from './actions';\nimport { getOppositeDirection } from '../utility/connector';\nimport { StraightSegment, OrthogonalSegment } from '../objects/connector';\nimport { ToolBase } from './tool';\n/**\n * Multiple segments editing for Connector\n */\nvar ConnectorEditing = /** @class */ (function (_super) {\n __extends(ConnectorEditing, _super);\n function ConnectorEditing(commandHandler, endPoint) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.endPoint = endPoint;\n return _this;\n }\n ConnectorEditing.prototype.mouseDown = function (args) {\n this.inAction = true;\n this.undoElement = cloneObject(args.source);\n _super.prototype.mouseDown.call(this, args);\n var connectors;\n if (args.source && args.source.connectors) {\n connectors = args.source.connectors[0];\n }\n // Sets the selected segment \n for (var i = 0; i < connectors.segments.length; i++) {\n var segment = connectors.segments[i];\n if (this.endPoint === 'OrthoThumb') {\n for (var j = 0; j < segment.points.length - 1; j++) {\n var segPoint = { x: 0, y: 0 };\n segPoint.x = ((segment.points[j].x + segment.points[j + 1].x) / 2);\n segPoint.y = ((segment.points[j].y + segment.points[j + 1].y) / 2);\n if (contains(this.currentPosition, segPoint, 30)) {\n this.selectedSegment = segment;\n this.segmentIndex = j;\n }\n }\n }\n else {\n if (contains(this.currentPosition, segment.point, 10)) {\n this.selectedSegment = segment;\n }\n }\n }\n };\n ConnectorEditing.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n this.currentPosition = args.position;\n if (this.currentPosition && this.prevPosition) {\n var diffY = this.currentPosition.y - this.prevPosition.y;\n var diffX = this.currentPosition.x - this.prevPosition.x;\n this.currentPosition = this.commandHandler.snapConnectorEnd(this.currentPosition);\n var connector = void 0;\n if (args.source && args.source.connectors) {\n connector = args.source.connectors[0];\n }\n if (this.inAction && this.endPoint !== undefined && diffX !== 0 || diffY !== 0) {\n if (this.endPoint === 'OrthoThumb') {\n this.blocked = !this.dragOrthogonalSegment(connector, this.selectedSegment, this.currentPosition, this.segmentIndex);\n }\n else {\n var tx = this.currentPosition.x - this.selectedSegment.point.x;\n var ty = this.currentPosition.y - this.selectedSegment.point.y;\n var index = connector.segments.indexOf(this.selectedSegment);\n this.blocked = !this.commandHandler.dragControlPoint(connector, tx, ty, false, index);\n }\n this.commandHandler.updateSelector();\n }\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n ConnectorEditing.prototype.mouseUp = function (args) {\n var connector;\n if (args.source && args.source.connectors) {\n connector = args.source.connectors[0];\n }\n if (args && args.source && args.info && args.info.ctrlKey && args.info.shiftKey && connector.type === 'Straight') {\n this.addOrRemoveSegment(connector, this.currentPosition);\n }\n else {\n if (this.endPoint === 'OrthoThumb' && this.selectedSegment) {\n var index = connector.segments.indexOf(this.selectedSegment);\n var prev = connector.segments[index - 1];\n var next = connector.segments[index + 1];\n if (index === connector.segments.length - 2\n && this.updateLastSegment(connector, this.selectedSegment)) {\n connector.segments.splice(connector.segments.length - 2, 1);\n }\n else {\n if (prev && Math.abs(prev.length) < 5) {\n if (index !== 1) {\n this.removePrevSegment(connector, index);\n }\n }\n else if (next) {\n var len = Point.distancePoints(next.points[0], next.points[1]);\n var length_1 = ((next.length || next.length === 0) ? next.length : len);\n if ((Math.abs(length_1) <= 5)) {\n this.removeNextSegment(connector, index);\n }\n }\n }\n this.commandHandler.updateEndPoint(connector);\n }\n }\n if (this.undoElement) {\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'SegmentChanged', redoObject: obj, undoObject: this.undoElement, category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n _super.prototype.mouseUp.call(this, args);\n };\n ConnectorEditing.prototype.removePrevSegment = function (connector, index) {\n var first = connector.segments[index - 2];\n var next = connector.segments[index + 1];\n var length = (next.length || next.length === 0) ? next.length : Point.distancePoints(next.points[0], next.points[1]);\n if (!(length <= 5)) {\n var last = connector.segments[index + 1];\n connector.segments.splice(index - 1, 2);\n var segment = this.selectedSegment;\n if (segment.direction === 'Left' || segment.direction === 'Right') {\n first.points[first.points.length - 1].x = last.points[0].x;\n last.points[0].y = first.points[first.points.length - 1].y;\n }\n else {\n first.points[first.points.length - 1].y = last.points[0].y;\n last.points[0].x = first.points[first.points.length - 1].x;\n }\n if (segment.length || segment.length === 0) {\n this.findSegmentDirection(first);\n }\n this.findSegmentDirection(last);\n }\n };\n ConnectorEditing.prototype.findSegmentDirection = function (segment) {\n if (segment.direction && (segment.length || segment.length === 0)) {\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n segment.direction = Point.direction(segment.points[0], segment.points[segment.points.length - 1]);\n }\n };\n ConnectorEditing.prototype.removeNextSegment = function (connector, index) {\n var segment = this.selectedSegment;\n var first = connector.segments[index - 1];\n var last = connector.segments[index + 2];\n var next = connector.segments[index + 1];\n if (next.length || next.length === 0) {\n connector.segments.splice(index, 2);\n if (segment.direction === 'Top' || segment.direction === 'Bottom') {\n last.points[0].y = segment.points[0].y;\n first.points[first.points.length - 1].x = last.points[0].x;\n }\n else {\n last.points[0].x = segment.points[0].x;\n first.points[first.points.length - 1].y = last.points[0].y;\n }\n }\n else {\n connector.segments.splice(index + 1, 1);\n if (segment.direction === 'Top' || segment.direction === 'Bottom') {\n first.points[first.points.length - 1].x = next.points[next.points.length - 1].x;\n }\n else {\n first.points[first.points.length - 1].y = next.points[next.points.length - 1].y;\n }\n this.findSegmentDirection(first);\n segment.length = segment.direction = null;\n }\n if (first && last) {\n first.length = Point.distancePoints(first.points[0], last.points[0]);\n first.direction = Point.direction(first.points[0], last.points[0]);\n if (last.length || last.length === 0) {\n last.length = Point.distancePoints(first.points[first.points.length - 1], last.points[last.points.length - 1]);\n var point1 = first.points;\n var point2 = last.points;\n last.direction = Point.direction(point1[point1.length - 1], point2[point2.length - 1]);\n }\n }\n };\n ConnectorEditing.prototype.addOrRemoveSegment = function (connector, point) {\n var updateSeg;\n var segmentIndex;\n for (var i = 0; i < connector.segments.length; i++) {\n var segment = (connector.segments)[i];\n if (contains(point, segment.point, connector.hitPadding)) {\n segmentIndex = i;\n updateSeg = true;\n }\n }\n if (updateSeg && segmentIndex !== undefined) {\n if (connector.segments && connector.segments[segmentIndex] && connector.segments[segmentIndex].type === 'Straight') {\n var segment = connector.segments[segmentIndex];\n var previous = connector.segments[segmentIndex + 1];\n if (previous) {\n connector.segments.splice(segmentIndex, 1);\n previous.points[0] = segment.points[0];\n }\n }\n }\n else {\n var index = this.findIndex(connector, point);\n if (connector.segments && connector.segments[index] && connector.segments[index].type === 'Straight') {\n var segment = connector.segments[index];\n var newseg = new StraightSegment(connector, 'segments', { type: 'Straight', point: point }, true);\n newseg.points[0] = segment.points[0];\n newseg.points[1] = point;\n segment.points[0] = point;\n connector.segments.splice(index, 0, newseg);\n updateSeg = true;\n }\n }\n if (updateSeg) {\n this.commandHandler.updateEndPoint(connector);\n }\n };\n ConnectorEditing.prototype.findIndex = function (connector, point) {\n var intersectingSegs = [];\n for (var i = 0; i < connector.segments.length; i++) {\n var segment = connector.segments[i];\n var rect = Rect.toBounds([segment.points[0], segment.points[1]]);\n rect.Inflate(connector.hitPadding);\n if (rect.containsPoint(point)) {\n intersectingSegs.push(segment);\n }\n }\n if (intersectingSegs.length === 1) {\n return connector.segments.indexOf(intersectingSegs[0]);\n }\n else {\n var ratio = void 0;\n var min = void 0;\n var index = void 0;\n var seg = void 0;\n var v = void 0;\n var h = void 0;\n for (var i = 0; i < intersectingSegs.length; i++) {\n seg = intersectingSegs[i];\n v = (point.y - seg.points[0].y) / (seg.points[1].y - point.y);\n h = (point.x - seg.points[0].x) / (seg.points[1].x - point.x);\n ratio = Math.abs(v - h);\n if (i === 0) {\n min = ratio;\n index = 0;\n }\n if (ratio < min) {\n min = ratio;\n index = i;\n }\n }\n return connector.segments.indexOf(intersectingSegs[index]);\n }\n };\n ConnectorEditing.prototype.dragOrthogonalSegment = function (obj, segment, point, segmentIndex) {\n var segmentPoint = { x: 0, y: 0 };\n segmentPoint.x = ((segment.points[segmentIndex].x + segment.points[segmentIndex + 1].x) / 2);\n segmentPoint.y = ((segment.points[segmentIndex].y + segment.points[segmentIndex + 1].y) / 2);\n var ty = point.y - segmentPoint.y;\n var tx = point.x - segmentPoint.x;\n var index = obj.segments.indexOf(segment);\n var update = false;\n var orientation = (segment.points[0].y.toFixed(2) === segment.points[1].y.toFixed(2)) ? 'horizontal' : 'vertical';\n var prevSegment;\n var nextSegment;\n if (index !== -1) {\n if (index === 0 && obj.segments.length === 1 && segment.points.length === 2) {\n index = this.addSegments(obj, segment, tx, ty, index);\n update = true;\n }\n else if (index === obj.segments.length - 1 && (segment.direction === null || segment.length === null)) {\n index = this.addTerminalSegment(obj, segment, tx, ty, segmentIndex);\n update = true;\n }\n else if (index === 0) {\n index = this.insertFirstSegment(obj, segment, tx, ty, index);\n update = true;\n }\n if (update) {\n this.selectedSegment = segment = obj.segments[index];\n this.segmentIndex = 0;\n }\n this.updateAdjacentSegments(obj, index, tx, ty);\n this.commandHandler.updateEndPoint(obj);\n }\n return true;\n };\n ConnectorEditing.prototype.addSegments = function (obj, segment, tx, ty, coll) {\n var index;\n var direction;\n var segments = [];\n var len;\n var length = Point.distancePoints(segment.points[0], segment.points[1]);\n var segmentDirection = Point.direction(segment.points[0], segment.points[1]);\n segments.push(new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: segmentDirection, length: length / 4 }, true));\n direction = (segment.points[0].y === segment.points[1].y) ? ((ty > 0) ? 'Bottom' : 'Top') : ((tx > 0) ? 'Right' : 'Left');\n len = (segment.points[0].x === segment.points[1].x) ? ty : tx;\n segments.push(new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: direction, length: len }, true));\n segments.push(new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: segmentDirection, length: length / 2 }, true));\n obj.segments = segments.concat(obj.segments);\n index = coll + 2;\n return index;\n };\n ConnectorEditing.prototype.insertFirstSegment = function (obj, segment, tx, ty, coll) {\n var direction;\n var length;\n var segments = [];\n var segValues;\n var index;\n var insertseg;\n if (obj.sourcePortID && segment.length && obj.segments[0].points.length > 2) {\n obj.segments.splice(0, 1);\n var prev = void 0;\n for (var i = 0; i < segment.points.length - 1; i++) {\n var len = Point.distancePoints(segment.points[i], segment.points[i + 1]);\n var dir = Point.direction(segment.points[i], segment.points[i + 1]);\n insertseg = new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: dir, length: len }, true);\n if (insertseg.length === 0) {\n if (prev && (prev.direction === 'Top' || prev.direction === 'Bottom')) {\n insertseg.direction = tx > 0 ? 'Right' : 'Left';\n }\n else {\n insertseg.direction = ty > 0 ? 'Bottom' : 'Top';\n }\n }\n prev = insertseg;\n segments.push(insertseg);\n }\n obj.segments = segments.concat(obj.segments);\n index = 1;\n }\n else {\n segValues = { type: 'Orthogonal', direction: segment.direction, length: segment.length / 3 };\n segments.push(new OrthogonalSegment(obj, 'segments', segValues, true));\n if (segment.direction === 'Bottom' || segment.direction === 'Top') {\n length = Math.abs(tx);\n direction = tx > 0 ? 'Right' : 'Left';\n }\n else {\n length = Math.abs(ty);\n direction = ty > 0 ? 'Bottom' : 'Top';\n }\n insertseg = new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: direction, length: length }, true);\n segments.push(insertseg);\n var nextseg = obj.segments[1];\n if (nextseg && nextseg.length) {\n nextseg.length = (direction !== nextseg.direction) ? nextseg.length + length : nextseg.length - length;\n }\n index = 2;\n segment.length = 2 * segment.length / 3;\n obj.segments = segments.concat(obj.segments);\n }\n return index;\n };\n ConnectorEditing.prototype.updateAdjacentSegments = function (obj, index, tx, ty) {\n var current = obj.segments[index];\n var endPoint = current.points[current.points.length - 1];\n var startPoint = current.points[0];\n var isNextUpdate = true;\n if (current.type === 'Orthogonal') {\n current.points[0] = startPoint;\n current.points[current.points.length - 1] = endPoint;\n var prev = obj.segments[index - 1];\n if (prev) {\n isNextUpdate = this.updatePreviousSegment(tx, ty, obj, index);\n }\n if (obj.segments.length - 1 > index && isNextUpdate) {\n var nextSegment = obj.segments[index + 1];\n this.updateNextSegment(obj, current, nextSegment, tx, ty);\n }\n }\n };\n ConnectorEditing.prototype.addTerminalSegment = function (connector, segment, tx, ty, segmentIndex) {\n var index = connector.segments.indexOf(segment);\n var first;\n var insertseg;\n var len;\n var dir;\n connector.segments.pop();\n var last = connector.segments[connector.segments.length - 1];\n first = (last && last.type === 'Orthogonal') ? last : null;\n for (var i = 0; i < segment.points.length - 2; i++) {\n len = Point.distancePoints(segment.points[i], segment.points[i + 1]);\n dir = Point.direction(segment.points[i], segment.points[i + 1]);\n insertseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: len, direction: dir }, true);\n connector.segments.push(insertseg);\n first = insertseg;\n }\n var sec = segmentIndex;\n if (segment.points.length === 2 || sec === segment.points.length - 2) {\n if (first) {\n first.length += 5;\n }\n if (sec !== undefined) {\n var newseg = void 0;\n len = 2 * Point.distancePoints(segment.points[segment.points.length - 2], segment.points[segment.points.length - 1]) / 3;\n dir = Point.direction(segment.points[segment.points.length - 2], segment.points[segment.points.length - 1]);\n newseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: len, direction: dir });\n connector.segments.push(newseg);\n }\n }\n var lastseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n connector.segments.push(lastseg);\n this.commandHandler.updateEndPoint(connector);\n index = index + segmentIndex;\n return index;\n };\n ConnectorEditing.prototype.updatePortSegment = function (prev, connector, index, tx, ty) {\n if (index === 1 && prev.points.length === 2 && prev.length < 0) {\n var source = connector.sourceWrapper.corners;\n var current = connector.segments[index];\n var next = connector.segments[index + 1];\n var newseg = void 0;\n var segment = [];\n newseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: 13, direction: prev.direction });\n segment.push(newseg);\n var len = void 0;\n if (current.direction === 'Left') {\n len = (current.points[0].x - (source.middleLeft.x - 20));\n }\n else if (current.direction === 'Right') {\n len = ((source.middleRight.x + 20) - current.points[0].x);\n }\n else if (current.direction === 'Bottom') {\n len = ((source.bottomCenter.y + 20) - current.points[0].y);\n }\n else {\n len = (current.points[0].y - (source.topCenter.y - 20));\n }\n var dir = current.direction;\n newseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: len, direction: current.direction });\n segment.push(newseg);\n current.length = current.length - len;\n if (next && next.length && next.direction) {\n if (next.direction === prev.direction) {\n next.length -= 13;\n }\n else if (next.direction === getOppositeDirection(prev.direction)) {\n next.length += 13;\n }\n }\n connector.segments = segment.concat(connector.segments);\n this.selectedSegment = connector.segments[3];\n }\n };\n ConnectorEditing.prototype.updatePreviousSegment = function (tx, ty, connector, index) {\n var current = connector.segments[index];\n var prev = connector.segments[index - 1];\n var firstSegment = (index === 1) ? true : false;\n prev.points[prev.points.length - 1] = current.points[0];\n var isSourceNode = (connector.sourceID && connector.sourcePortID === '') ? false : true;\n var isNextUpdate = true;\n if (prev.type === 'Orthogonal') {\n if (prev.direction === 'Bottom') {\n prev.length += ty;\n }\n else if (prev.direction === 'Top') {\n prev.length -= ty;\n }\n else if (prev.direction === 'Right') {\n prev.length += tx;\n }\n else {\n prev.length -= tx;\n }\n if (connector.sourcePortID !== '' && prev.length < 0) {\n this.updatePortSegment(prev, connector, index, tx, ty);\n }\n else if (connector.sourceID && connector.sourcePortID === '' && prev.length < 0 && index === 1) {\n isNextUpdate = false;\n this.updateFirstSegment(connector, current);\n }\n if (isSourceNode) {\n this.changeSegmentDirection(prev);\n }\n }\n return isNextUpdate;\n };\n ConnectorEditing.prototype.changeSegmentDirection = function (segment) {\n if (segment.length < 0) {\n segment.direction = getOppositeDirection(segment.direction);\n segment.length *= -1;\n }\n };\n ConnectorEditing.prototype.updateNextSegment = function (obj, current, next, tx, ty) {\n var pt = current.points[current.points.length - 1];\n next.points[0] = current.points[current.points.length - 1];\n if (next && next.type === 'Orthogonal') {\n if (next.length || next.length === 0) {\n if (next.direction === 'Left' || next.direction === 'Right') {\n if (tx !== 0) {\n next.length = (next.direction === 'Right') ? next.length - tx : next.length + tx;\n if (next.length || next.length === 0) {\n this.changeSegmentDirection(next);\n }\n }\n }\n else {\n if (ty !== 0) {\n next.length = (next.direction === 'Bottom') ? next.length - ty : next.length + ty;\n if (next.length || next.length === 0) {\n this.changeSegmentDirection(next);\n }\n }\n }\n }\n }\n };\n ConnectorEditing.prototype.updateFirstSegment = function (connector, selectedSegment) {\n var index = connector.segments.indexOf(selectedSegment);\n var insertfirst = false;\n var current = connector.segments[index];\n var prev = connector.segments[index - 1];\n var con = connector;\n var sourcePoint;\n if (prev.length < 0 && connector.sourceID) {\n var sourceNode = connector.sourceWrapper.corners;\n var segments = [];\n var segValues = void 0;\n var removeCurrentPrev = false;\n this.changeSegmentDirection(current);\n var next = connector.segments[index + 1];\n var nextNext = connector.segments[index + 2];\n if (next) {\n this.changeSegmentDirection(next);\n }\n if (nextNext) {\n this.changeSegmentDirection(nextNext);\n }\n switch (prev.direction) {\n case 'Top':\n case 'Bottom':\n sourcePoint = (current.length > 0 && current.direction === 'Left') ? sourceNode.middleLeft : sourceNode.middleRight;\n if (current.length > sourceNode.width / 2) {\n if (Math.abs(prev.length) < sourceNode.height / 2) {\n prev.length = Point.distancePoints(sourceNode.center, prev.points[prev.points.length - 1]);\n current.points[0].x = sourcePoint.x;\n current.length = Point.distancePoints(current.points[0], current.points[current.points.length - 1]);\n current.length -= 20;\n insertfirst = true;\n }\n }\n else {\n if (next && next.direction && next.length) {\n next.points[0].y = sourcePoint.y;\n next.points[0].x = next.points[next.points.length - 1].x = (current.direction === 'Right') ?\n sourcePoint.x + 20 : sourcePoint.x - 20;\n }\n insertfirst = true;\n removeCurrentPrev = true;\n }\n break;\n case 'Left':\n case 'Right':\n sourcePoint = (current.length > 0 && current.direction === 'Top') ? sourceNode.topCenter : sourceNode.bottomCenter;\n if (current.length > sourceNode.height / 2) {\n if (Math.abs(prev.length) < sourceNode.width / 2) {\n prev.length = Point.distancePoints(sourceNode.center, prev.points[prev.points.length - 1]);\n current.points[0].y = sourcePoint.y;\n current.length = Point.distancePoints(current.points[0], current.points[current.points.length - 1]);\n current.length -= 20;\n insertfirst = true;\n }\n }\n else {\n if (next && next.direction && next.length) {\n next.points[0].x = sourcePoint.x;\n next.points[0].y = next.points[next.points.length - 1].y = (current.direction === 'Bottom') ?\n sourcePoint.y + 20 : sourcePoint.y - 20;\n }\n insertfirst = true;\n removeCurrentPrev = true;\n }\n break;\n }\n this.changeSegmentDirection(prev);\n this.changeSegmentDirection(current);\n if (insertfirst) {\n segValues = { type: 'Orthogonal', direction: current.direction, length: 20 };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n if (removeCurrentPrev) {\n if (next && next.direction && next.length) {\n next.length = Point.distancePoints(next.points[0], next.points[next.points.length - 1]);\n }\n if (nextNext && nextNext.direction && nextNext.length) {\n nextNext.length = Point.distancePoints(next.points[next.points.length - 1], nextNext.points[nextNext.points.length - 1]);\n }\n connector.segments.splice(index - 1, 2);\n }\n connector.segments = segments.concat(connector.segments);\n }\n this.selectedSegment = ((removeCurrentPrev) ? connector.segments[index - 1] :\n connector.segments[index + 1]);\n this.commandHandler.updateEndPoint(connector);\n }\n };\n ConnectorEditing.prototype.updateLastSegment = function (connector, selectedSegment) {\n if (connector.targetID && connector.targetPortID === '') {\n var line1Start = void 0;\n var line1End = void 0;\n var line2Start = void 0;\n var line2End = void 0;\n var corners = connector.targetWrapper.corners;\n var firstSegPoint = selectedSegment.points[0];\n var lastSegPoint = selectedSegment.points[selectedSegment.points.length - 1];\n if (selectedSegment.direction === 'Right' || selectedSegment.direction === 'Left') {\n line1Start = { x: firstSegPoint.x, y: firstSegPoint.y };\n line1End = {\n x: (selectedSegment.direction === 'Left') ? lastSegPoint.x - corners.width / 2 : lastSegPoint.x + corners.width / 2,\n y: lastSegPoint.y\n };\n line2Start = { x: corners.center.x, y: corners.center.y - corners.height };\n line2End = { x: corners.center.x, y: corners.center.y + corners.height };\n }\n else {\n line1Start = { x: firstSegPoint.x, y: firstSegPoint.y };\n line1End = {\n x: lastSegPoint.x,\n y: (selectedSegment.direction === 'Bottom') ? lastSegPoint.y + corners.height / 2 : lastSegPoint.y - corners.height / 2\n };\n line2Start = { x: corners.center.x - corners.width, y: corners.center.y };\n line2End = { x: corners.center.x + corners.width, y: corners.center.y };\n }\n var line1 = { x1: line1Start.x, y1: line1Start.y, x2: line1End.x, y2: line1End.y };\n var line2 = { x1: line2Start.x, y1: line2Start.y, x2: line2End.x, y2: line2End.y };\n return (intersect3(line1, line2).enabled);\n }\n return false;\n };\n /**\n * To destroy the connector editing module\n * @return {void}\n * @private\n */\n ConnectorEditing.prototype.destroy = function () {\n /**\n * Destroys the connector editing module\n */\n };\n /**\n * Get module name.\n */\n ConnectorEditing.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'ConnectorEditingTool';\n };\n return ConnectorEditing;\n}(ToolBase));\nexport { ConnectorEditing };\n","import { Point } from '../primitives/point';\nimport { Container } from '../core/containers/container';\nimport { Connector } from '../objects/connector';\nimport { NodeDrawingTool, ConnectorDrawingTool, TextDrawingTool, PolygonDrawingTool, PolyLineDrawingTool } from './tool';\nimport { Node } from '../objects/node';\nimport { SelectTool, MoveTool, ResizeTool, RotateTool, ConnectTool, ExpandTool, LabelTool, ZoomPanTool } from './tool';\nimport { LabelDragTool, LabelResizeTool, LabelRotateTool } from './tool';\nimport { ConnectorEditing } from './connector-editing';\nimport { Selector } from './selector';\nimport { findToolToActivate, isSelected, getCursor, contains } from './actions';\nimport { DiagramAction, KeyModifiers, Keys, DiagramEvent, DiagramTools } from '../enum/enum';\nimport { isPointOverConnector, findObjectType, insertObject, getObjectFromCollection, getTooltipOffset } from '../utility/diagram-util';\nimport { getObjectType } from '../utility/diagram-util';\nimport { canZoomPan, canDraw, canDrag, canZoomTextEdit } from './../utility/constraints-util';\nimport { canMove, canEnablePointerEvents, canSelect, canEnableToolTip } from './../utility/constraints-util';\nimport { canOutConnect, canInConnect, canAllowDrop, canUserInteract, defaultTool } from './../utility/constraints-util';\nimport { updateTooltip } from '../objects/tooltip';\nimport { PortVisibility, NodeConstraints, ConnectorConstraints } from '../enum/enum';\nimport { addTouchPointer, measureHtmlText } from '../utility/dom-util';\nimport { TextElement } from '../core/elements/text-element';\nimport { Size } from '../primitives/size';\nimport { Rect } from '../primitives/rect';\nimport { identityMatrix, rotateMatrix, transformPointByMatrix } from './../primitives/matrix';\nimport { removeRulerMarkers, drawRulerMarkers, getRulerSize, updateRuler } from '../ruler/ruler';\nimport { canContinuousDraw, canDrawOnce } from '../utility/constraints-util';\nimport { getFunction, cornersPointsBeforeRotation } from '../utility/base-util';\n/**\n * This module handles the mouse and touch events\n */\nvar DiagramEventHandler = /** @class */ (function () {\n /** @private */\n function DiagramEventHandler(diagram, commandHandler) {\n this.currentAction = 'None';\n this.focus = false;\n this.isBlocked = false;\n this.isMouseDown = false;\n this.inAction = false;\n this.doingAutoScroll = false;\n this.diagram = null;\n this.objectFinder = null;\n this.tool = null;\n this.eventArgs = null;\n this.diagram = diagram;\n this.objectFinder = new ObjectFinder();\n this.commandHandler = commandHandler;\n }\n Object.defineProperty(DiagramEventHandler.prototype, \"action\", {\n get: function () {\n return this.currentAction;\n },\n set: function (action) {\n if (action !== this.currentAction) {\n if (this.currentAction === 'PortDraw') {\n this.diagram.tool &= ~DiagramTools.DrawOnce;\n if (this.tool) {\n this.tool.mouseUp({ position: this.currentPosition });\n }\n this.tool = null;\n }\n if (action === 'Rotate' || action === 'LabelRotate') {\n this.diagram.diagramCanvas.classList.add('e-diagram-rotate');\n }\n else if (this.currentAction === 'Rotate' || this.currentAction === 'LabelRotate') {\n this.diagram.diagramCanvas.classList.remove('e-diagram-rotate');\n }\n this.currentAction = action;\n if (this.currentAction !== 'None' && this.currentAction !== 'Select' &&\n !(this.diagram.diagramActions & DiagramAction.TextEdit)) {\n this.diagram.diagramActions = this.diagram.diagramActions | DiagramAction.ToolAction;\n }\n else {\n this.diagram.diagramActions = this.diagram.diagramActions & ~DiagramAction.ToolAction;\n }\n this.diagram.setCursor(this.diagram.getCursor(action, this.inAction));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramEventHandler.prototype, \"blocked\", {\n get: function () {\n return this.isBlocked;\n },\n set: function (blocked) {\n this.isBlocked = blocked;\n if (this.blocked) {\n this.diagram.setCursor('not-allowed');\n }\n else {\n this.diagram.setCursor(this.diagram.getCursor(this.action, this.inAction));\n }\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n DiagramEventHandler.prototype.getMousePosition = function (e) {\n var touchArg;\n var offsetX;\n var offsetY;\n if (e.type.indexOf('touch') !== -1) {\n touchArg = e;\n offsetX = touchArg.changedTouches[0].clientX;\n offsetY = touchArg.changedTouches[0].clientY;\n }\n else {\n offsetX = e.clientX;\n offsetY = e.clientY;\n }\n var position = new Size();\n position = getRulerSize(this.diagram);\n var boundingRect = this.diagram.element.getBoundingClientRect();\n offsetX = offsetX + this.diagram.diagramCanvas.scrollLeft - boundingRect.left - position.width;\n offsetY = offsetY + this.diagram.diagramCanvas.scrollTop - boundingRect.top - position.height;\n offsetX /= this.diagram.scroller.transform.scale;\n offsetY /= this.diagram.scroller.transform.scale;\n offsetX -= this.diagram.scroller.transform.tx;\n offsetY -= this.diagram.scroller.transform.ty;\n return { x: offsetX, y: offsetY };\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.windowResize = function (evt) {\n var _this = this;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n _this.updateViewPortSize(_this.diagram.element);\n }, 300);\n return false;\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.updateViewPortSize = function (element) {\n var container = document.getElementById(element.id);\n if (container) {\n var bounds = container.getBoundingClientRect();\n this.diagram.scroller.setViewPortSize(bounds.width, bounds.height);\n var position = new Size();\n position = getRulerSize(this.diagram);\n var width = this.diagram.getSizeValue(this.diagram.width, position.width);\n var height = this.diagram.getSizeValue(this.diagram.height, position.height);\n this.diagram.diagramCanvas.style.width = width;\n this.diagram.diagramCanvas.style.height = height;\n this.diagram.scroller.setSize();\n this.diagram.transformLayers();\n if (this.diagram.rulerSettings.showRulers) {\n updateRuler(this.diagram);\n }\n }\n };\n /** @private */\n DiagramEventHandler.prototype.canHideResizers = function () {\n return ((this.tool instanceof MoveTool || this.tool instanceof RotateTool) && this.isMouseDown);\n };\n /** @private */\n DiagramEventHandler.prototype.updateCursor = function () {\n if ((this.diagram.selectedItems.nodes.length === 1 || this.diagram.selectedItems.connectors.length === 1)) {\n var list = [];\n list = list.concat(this.diagram.selectedItems.nodes, this.diagram.selectedItems.connectors);\n this.blocked = (this.isMouseDown && list.length === 1 && this.tool instanceof SelectTool && !canMove(list[0]));\n }\n };\n DiagramEventHandler.prototype.isForeignObject = function (target, isTextBox) {\n var foreignobject = target;\n if (foreignobject) {\n while (foreignobject.parentNode !== null) {\n if (typeof foreignobject.className === 'string' &&\n ((!isTextBox && foreignobject.className.indexOf('foreign-object') !== -1) ||\n (isTextBox && foreignobject.className.indexOf('e-diagram-text-edit') !== -1))) {\n return foreignobject;\n }\n else {\n foreignobject = foreignobject.parentNode;\n }\n }\n }\n return null;\n };\n DiagramEventHandler.prototype.isMetaKey = function (evt) {\n return navigator.platform.match('Mac') ? evt.metaKey : evt.ctrlKey;\n };\n DiagramEventHandler.prototype.isDeleteKey = function (key, value) {\n return (navigator.platform.match('Mac') && key === 'Backspace' && value === 'delete');\n };\n DiagramEventHandler.prototype.isMouseOnScrollBar = function (evt) {\n var x = evt.offsetX;\n var y = evt.offsetY;\n var diagramCanvas = this.diagram.diagramCanvas;\n var height = diagramCanvas.offsetHeight;\n var width = diagramCanvas.offsetWidth;\n var topLeft;\n var topRight;\n var bottomLeft;\n var bottomRight;\n var bounds;\n if (height < diagramCanvas.scrollHeight) {\n //default scrollbar width in browser is '17pixels'.\n topLeft = { x: (width - 17), y: 0 };\n topRight = { x: width, y: 0 };\n bottomLeft = { x: (width - 17), y: height };\n bottomRight = { x: width, y: height };\n bounds = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n if (bounds.containsPoint({ x: x, y: y })) {\n return true;\n }\n }\n if (width < diagramCanvas.scrollWidth) {\n topLeft = { x: 0, y: (height - 17) };\n topRight = { x: width, y: (height - 17) };\n bottomLeft = { x: 0, y: height };\n bottomRight = { x: width, y: height };\n bounds = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n if (bounds.containsPoint({ x: x, y: y })) {\n return true;\n }\n }\n return false;\n };\n DiagramEventHandler.prototype.mouseDown = function (evt) {\n this.focus = true;\n var touches;\n touches = evt.touches;\n if (this.isMouseOnScrollBar(evt)) {\n this.isScrolling = true;\n evt.preventDefault();\n return;\n }\n if (!this.checkEditBoxAsTarget(evt) && (canUserInteract(this.diagram)) ||\n (canZoomPan(this.diagram) && !defaultTool(this.diagram))) {\n if (this.action === 'Select' || this.action === 'Drag') {\n this.diagram.updatePortVisibility(this.hoverElement, PortVisibility.Hover, true);\n }\n if (((this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool)\n && (evt.button === 2 || evt.buttons === 2))) {\n var arg = {\n element: this.diagram, position: this.currentPosition, count: evt.buttons, actualObject: this.eventArgs.actualObject\n };\n this.inAction = false;\n this.tool.mouseUp(this.eventArgs);\n }\n else if (((this.inAction === true) && this.isMouseDown === true &&\n (this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool))) {\n this.isMouseDown = true;\n this.eventArgs = {};\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n this.eventArgs.position = this.currentPosition;\n this.tool.mouseDown(this.eventArgs);\n }\n else {\n this.isMouseDown = true;\n this.currentPosition = this.prevPosition = this.getMousePosition(evt);\n this.eventArgs = {};\n if (this.diagram.textEditing && !this.isMouseOnScrollBar(evt)) {\n this.diagram.endEdit();\n this.diagram.textEditing = false;\n }\n var target = void 0;\n var objects = this.objectFinder.findObjectsUnderMouse(this.currentPosition, this.diagram, this.eventArgs, null, this.action);\n var obj = this.objectFinder.findObjectUnderMouse(this.diagram, objects, this.action, this.inAction, this.eventArgs, evt);\n var sourceElement = null;\n if (obj !== null) {\n sourceElement = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n if (sourceElement) {\n target = this.commandHandler.findTarget(sourceElement, obj);\n }\n }\n this.action = this.diagram.findActionToBeDone(obj, sourceElement, this.currentPosition, target);\n //work around - correct it\n var ctrlKey = this.isMetaKey(evt);\n if (ctrlKey && evt.shiftKey && this.diagram.connectorEditingToolModule) {\n this.action = 'SegmentEnd';\n }\n else if ((ctrlKey || evt.shiftKey) && (!canZoomPan(this.diagram))) {\n this.action = 'Select';\n }\n this.tool = this.diagram.getTool(this.action);\n if (!this.tool) {\n this.action = 'Select';\n this.tool = this.diagram.getTool(this.action);\n }\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n if (ctrlKey || evt.shiftKey) {\n var info = (ctrlKey && evt.shiftKey) ? { ctrlKey: ctrlKey, shiftKey: evt.shiftKey } : { ctrlKey: true };\n this.eventArgs.info = info;\n }\n this.eventArgs.position = this.currentPosition;\n this.tool.mouseDown(this.eventArgs);\n this.initialEventArgs = { source: this.eventArgs.source, sourceWrapper: this.eventArgs.sourceWrapper };\n this.initialEventArgs.position = this.currentPosition;\n this.initialEventArgs.info = this.eventArgs.info;\n this.inAction = false;\n if (evt.type === 'touchstart') {\n if (touches && touches.length >= 2) {\n this.touchStartList = addTouchPointer(this.touchStartList, evt, touches);\n }\n if (!touches) {\n evt.preventDefault();\n }\n }\n }\n }\n if (!this.isForeignObject(evt.target) && !this.isForeignObject(evt.target, true) && (!touches)) {\n evt.preventDefault();\n }\n };\n DiagramEventHandler.prototype.mouseMoveExtend = function (e, obj) {\n if (this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool) {\n this.tool.mouseMove(this.eventArgs);\n }\n if (this.diagram.scrollSettings.canAutoScroll) {\n this.checkAutoScroll(e);\n }\n else {\n if (!this.blocked) {\n (this.tool.mouseMove(this.eventArgs));\n }\n }\n if (this.eventArgs.target) {\n this.hoverElement = this.eventArgs.target;\n }\n var isNode = this.eventArgs.target instanceof Node && obj instanceof Node ? false : true;\n if (this.tool instanceof ConnectTool) {\n this.diagram.updatePortVisibility(this.hoverElement instanceof Node ? this.hoverElement : this.hoverNode, PortVisibility.Connect | PortVisibility.Hover, isNode);\n }\n if (this.hoverElement instanceof Node\n && this.hoverNode instanceof Node && this.hoverNode && this.hoverNode.id !== this.hoverElement.id) {\n this.diagram.updatePortVisibility(this.hoverNode, PortVisibility.Connect | PortVisibility.Hover, true);\n }\n this.hoverElement = isNode ? null : obj;\n this.hoverNode = isNode ? null : obj;\n };\n /** @private */\n DiagramEventHandler.prototype.checkAction = function (obj) {\n if (this.action === 'LabelSelect' && this.eventArgs.sourceWrapper &&\n this.eventArgs.sourceWrapper instanceof TextElement) {\n var annotation = this.commandHandler.findTarget(this.eventArgs.sourceWrapper, this.eventArgs.source);\n if (!isSelected(this.diagram, annotation, false, this.eventArgs.sourceWrapper) && canMove(annotation)) {\n this.action = 'LabelDrag';\n this.tool = this.getTool(this.action);\n this.tool.mouseDown(this.initialEventArgs);\n }\n }\n else if (canMove(obj) && canSelect(obj) && this.initialEventArgs &&\n this.initialEventArgs.source && this.action === 'Select') {\n if (!isSelected(this.diagram, this.eventArgs.source, false) &&\n this.eventArgs.source instanceof Selector) {\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n }\n if (!(obj instanceof Connector) || (obj instanceof Connector &&\n !(contains(this.currentPosition, obj.sourcePoint, obj.hitPadding) ||\n contains(this.currentPosition, obj.targetPoint, obj.hitPadding)))) {\n this.action = 'Drag';\n }\n this.tool = this.getTool(this.action);\n this.tool.mouseDown(this.initialEventArgs);\n }\n };\n /** @private */\n DiagramEventHandler.prototype.mouseMove = function (e, touches) {\n this.focus = true;\n if (this.isScrolling) {\n e.preventDefault();\n return;\n }\n if (canUserInteract(this.diagram) || (canZoomPan(this.diagram) && !defaultTool(this.diagram))) {\n this.currentPosition = this.getMousePosition(e);\n var objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n var obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n drawRulerMarkers(this.diagram, this.currentPosition);\n var force = false;\n var target = void 0;\n if (e.type === 'touchmove') {\n touches = e.touches;\n if (touches && touches.length > 1) {\n this.touchMoveList = addTouchPointer(this.touchMoveList, e, touches);\n if (this.action !== 'PinchZoom') {\n force = true;\n }\n }\n }\n if (Point.equals(this.currentPosition, this.prevPosition) === false || this.inAction) {\n if (this.isMouseDown === false || force) {\n this.eventArgs = {};\n var sourceElement = null;\n if (obj !== null) {\n sourceElement = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n if (obj !== this.hoverElement) {\n if (this.hoverElement) {\n this.elementLeave();\n this.diagram.updatePortVisibility(this.hoverElement, PortVisibility.Hover, true);\n }\n if (obj instanceof Node) {\n this.hoverNode = obj;\n }\n this.hoverElement = obj;\n this.elementEnter(this.currentPosition, false);\n }\n else if (!this.hoverElement && this.hoverElement === obj) {\n this.elementEnter(this.currentPosition, true);\n }\n if (sourceElement) {\n target = this.commandHandler.findTarget(sourceElement, obj);\n }\n }\n this.action = this.diagram.findActionToBeDone(obj, sourceElement, this.currentPosition, target);\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n this.tool = this.getTool(this.action);\n this.mouseEvents();\n if (this.tool instanceof ConnectorDrawingTool ||\n this.tool instanceof PolyLineDrawingTool ||\n this.tool instanceof PolygonDrawingTool) {\n this.tool.mouseMove(this.eventArgs);\n }\n else if (touches && this.tool instanceof ZoomPanTool) {\n this.tool.mouseDown(this.eventArgs);\n }\n this.updateCursor();\n var isNode = false;\n if (!(this.hoverElement && (!(this.tool instanceof ZoomPanTool)) && obj instanceof Node &&\n (this.diagram.selectedItems.nodes.length === 0 || !isSelected(this.diagram, this.hoverElement)))) {\n isNode = true;\n }\n this.diagram.updatePortVisibility(this.hoverElement, PortVisibility.Hover, isNode);\n if (obj === null && this.hoverElement) {\n this.hoverElement = null;\n this.elementLeave();\n }\n force = false;\n }\n else {\n this.eventArgs.position = this.currentPosition;\n if (this.action === 'Drag' && !isSelected(this.diagram, this.eventArgs.source, false) &&\n this.eventArgs.source instanceof Selector) {\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n }\n this.mouseEvents();\n if (e.ctrlKey || e.shiftKey) {\n var info = (e.ctrlKey && e.shiftKey) ? { ctrlKey: e.ctrlKey, shiftKey: e.shiftKey } : { ctrlKey: true };\n this.eventArgs.info = info;\n }\n this.checkAction(obj);\n this.getMouseEventArgs(this.currentPosition, this.eventArgs, this.eventArgs.source);\n this.updateCursor();\n this.inAction = true;\n this.initialEventArgs = null;\n this.mouseMoveExtend(e, obj);\n }\n this.prevPosition = this.currentPosition;\n if (!this.isForeignObject(e.target, true)) {\n e.preventDefault();\n }\n }\n }\n };\n DiagramEventHandler.prototype.checkAutoScroll = function (e) {\n var autoScrollPosition = this.startAutoScroll(e);\n if (!autoScrollPosition && this.doingAutoScroll) {\n this.doingAutoScroll = false;\n clearInterval(this.timeOutValue);\n }\n else if (autoScrollPosition) {\n if ((this.tool instanceof MoveTool || this.tool instanceof ResizeTool\n || this.tool instanceof SelectTool) && this.inAction) {\n var diagram_1 = this;\n var delay_1 = 100;\n if (this.diagram.scrollSettings.canAutoScroll && autoScrollPosition && !this.doingAutoScroll) {\n this.doingAutoScroll = true;\n this.timeOutValue = setInterval(function (args) {\n diagram_1.doAutoScroll(autoScrollPosition, e, delay_1);\n }, delay_1);\n }\n }\n }\n else {\n this.blocked = !(this.tool.mouseMove(this.eventArgs));\n }\n };\n /** @private */\n DiagramEventHandler.prototype.mouseUp = function (evt) {\n var touches;\n touches = evt.touches;\n if (this.isScrolling) {\n this.isScrolling = false;\n evt.preventDefault();\n return;\n }\n if (!this.checkEditBoxAsTarget(evt) && (canUserInteract(this.diagram))\n || (canZoomPan(this.diagram) && !defaultTool(this.diagram))) {\n if (this.tool && (!(this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool) ||\n ((this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool)\n && evt.detail === 2))) {\n if (!this.isForeignObject(evt.target)) {\n document.getElementById(this.diagram.element.id + 'content').focus();\n }\n if (!this.inAction && evt.which !== 3) {\n if (this.action === 'Drag') {\n this.action = 'Select';\n var objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n var obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n var isMultipleSelect = true;\n if ((!evt.ctrlKey && this.isMouseDown\n && (this.diagram.selectedItems.nodes.length + this.diagram.selectedItems.connectors.length) > 1)\n && evt.which === 1) {\n isMultipleSelect = false;\n this.commandHandler.clearSelection();\n }\n if (!isSelected(this.diagram, obj) || (!isMultipleSelect)) {\n this.commandHandler.selectObjects([obj]);\n }\n }\n }\n this.inAction = false;\n this.isMouseDown = false;\n this.currentPosition = this.getMousePosition(evt);\n if (this.tool && (this.tool.prevPosition || this.tool instanceof LabelTool)) {\n this.eventArgs.position = this.currentPosition;\n this.getMouseEventArgs(this.currentPosition, this.eventArgs, this.eventArgs.source);\n var ctrlKey = this.isMetaKey(evt);\n if (ctrlKey || evt.shiftKey) {\n var info = (ctrlKey && evt.shiftKey) ? { ctrlKey: ctrlKey, shiftKey: evt.shiftKey } :\n { ctrlKey: true };\n this.eventArgs.info = info;\n }\n this.eventArgs.clickCount = evt.detail;\n this.tool.mouseUp(this.eventArgs);\n }\n this.blocked = false;\n if (this.hoverElement) {\n var portVisibility = PortVisibility.Connect;\n if (isSelected(this.diagram, this.hoverElement)) {\n portVisibility |= PortVisibility.Hover;\n }\n this.diagram.updatePortVisibility(this.hoverElement, portVisibility, true);\n this.hoverElement = null;\n }\n this.touchStartList = null;\n this.touchMoveList = null;\n if (!(this.tool instanceof TextDrawingTool)) {\n this.tool = null;\n }\n }\n if (!touches) {\n evt.preventDefault();\n }\n this.diagram.currentDrawingObject = undefined;\n var selector = this.diagram.selectedItems;\n if (!this.inAction && selector.wrapper && selector.userHandles.length > 0) {\n this.diagram.renderSelector(true);\n }\n if (!this.inAction && !this.diagram.currentSymbol) {\n var arg = {\n element: this.eventArgs.source || this.diagram, position: this.eventArgs.position, count: evt.detail,\n actualObject: this.eventArgs.actualObject\n };\n this.diagram.triggerEvent(DiagramEvent.click, arg);\n }\n this.eventArgs = {};\n }\n //end the corresponding tool\n };\n /** @private */\n DiagramEventHandler.prototype.mouseLeave = function (evt) {\n //Define what has to happen on mouse leave\n if (this.tool && this.inAction) {\n this.tool.mouseLeave(this.eventArgs);\n }\n if (this.eventArgs && this.eventArgs.source) {\n this.diagram.updatePortVisibility(this.eventArgs.source, PortVisibility.Hover, true);\n this.hoverElement = null;\n }\n if (this.tool instanceof ConnectTool && this.eventArgs && this.eventArgs.target && this.eventArgs.target instanceof Node) {\n this.diagram.updatePortVisibility(this.eventArgs.target, PortVisibility.Hover | PortVisibility.Connect, true);\n this.hoverElement = null;\n }\n var selector = this.diagram.selectedItems;\n if (selector && selector.wrapper) {\n this.diagram.renderSelector(true);\n }\n this.isMouseDown = false;\n this.focus = false;\n this.touchStartList = null;\n this.touchMoveList = null;\n this.commandHandler.removeSnap();\n this.inAction = false;\n this.eventArgs = {};\n this.tool = null;\n removeRulerMarkers();\n if (this.action === 'Rotate') {\n this.diagram.diagramCanvas.classList.remove('e-diagram-rotate');\n }\n evt.preventDefault();\n };\n /** @private */\n DiagramEventHandler.prototype.mouseWheel = function (evt) {\n var up = (evt.wheelDelta > 0 || -40 * evt.detail > 0) ? true : false;\n var mousePosition = this.getMousePosition(evt);\n this.diagram.tooltipObject.close();\n var ctrlKey = this.isMetaKey(evt);\n if (ctrlKey) {\n this.diagram.zoom(up ? (1.2) : 1 / (1.2), mousePosition);\n evt.preventDefault();\n }\n else {\n var horizontalOffset = this.diagram.scroller.horizontalOffset;\n var verticalOffset = this.diagram.scroller.verticalOffset;\n var change = up ? 20 : -20;\n if (this.tool && (this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool)) {\n this.eventArgs = {};\n this.getMouseEventArgs(mousePosition, this.eventArgs);\n this.eventArgs.position = mousePosition;\n this.tool.mouseWheel(this.eventArgs);\n }\n if (evt.shiftKey) {\n this.diagram.scroller.zoom(1, change, 0, mousePosition);\n }\n else {\n this.diagram.scroller.zoom(1, 0, change, mousePosition);\n }\n if (horizontalOffset !== this.diagram.scroller.horizontalOffset\n || verticalOffset !== this.diagram.scroller.verticalOffset) {\n evt.preventDefault();\n }\n }\n if (this.diagram.textEditing) {\n this.diagram.isTriggerEvent = true;\n this.diagram.startTextEdit();\n this.diagram.isTriggerEvent = false;\n }\n };\n /** @private */\n DiagramEventHandler.prototype.keyDown = function (evt) {\n if (!(this.diagram.diagramActions & DiagramAction.TextEdit) &&\n !(this.checkEditBoxAsTarget(evt)) || (evt.key === 'Escape' || evt.keyCode === 27)) {\n var i = void 0;\n var command = void 0;\n var keycode = evt.keyCode ? evt.keyCode : evt.which;\n var key = evt.key;\n var ctrlKey = this.isMetaKey(evt);\n if (this.diagram.commandManager && this.diagram.commands) {\n var commands = this.diagram.commands;\n for (var _i = 0, _a = Object.keys(commands); _i < _a.length; _i++) {\n var i_1 = _a[_i];\n command = this.diagram.commands[i_1];\n if (command && (command.gesture.keyModifiers || command.gesture.key)) {\n if ((keycode === command.gesture.key || (key === Keys[command.gesture.key])\n || this.isDeleteKey(key, i_1))\n && (((!command.gesture.keyModifiers) && (!evt.altKey) && (!evt.shiftKey) && (!ctrlKey)) ||\n (command.gesture.keyModifiers && (ctrlKey || evt.altKey || evt.shiftKey) &&\n (this.altKeyPressed(command.gesture.keyModifiers) && evt.altKey) ||\n (this.shiftKeyPressed(command.gesture.keyModifiers) && evt.shiftKey) ||\n (this.ctrlKeyPressed(command.gesture.keyModifiers) && ctrlKey)))) {\n var canExecute = getFunction(command.canExecute);\n if (canExecute && canExecute({\n 'keyDownEventArgs': KeyboardEvent,\n parameter: command.parameter\n })) {\n evt.preventDefault();\n if (evt.key === 'Escape' && (this.checkEditBoxAsTarget(evt))) {\n document.getElementById(this.diagram.diagramCanvas.id).focus();\n }\n if (command.execute) {\n // if (i === 'nudgeUp' || i === \"nudgeRight\" || i === \"nudgeDown\" || i === 'nudgeLeft') {\n // command.execute()\n // } else {\n var execute = getFunction(command.execute);\n execute({ 'keyDownEventArgs': KeyboardEvent, parameter: command.parameter });\n // }\n }\n break;\n }\n }\n }\n }\n }\n }\n };\n DiagramEventHandler.prototype.startAutoScroll = function (e) {\n var position = this.getMousePosition(e);\n position.x *= this.diagram.scroller.currentZoom;\n position.y *= this.diagram.scroller.currentZoom;\n var rulerSize = getRulerSize(this.diagram);\n var movingPosition;\n var autoScrollBorder = this.diagram.scrollSettings.autoScrollBorder;\n if (this.diagram.scrollSettings.canAutoScroll) {\n if (position.x + this.diagram.scroller.horizontalOffset + autoScrollBorder.right + rulerSize.width >=\n this.diagram.scroller.viewPortWidth - 18) {\n movingPosition = 'right';\n }\n else if (position.x + this.diagram.scroller.horizontalOffset < autoScrollBorder.left) {\n movingPosition = 'left';\n }\n else if (position.y + this.diagram.scroller.verticalOffset + autoScrollBorder.bottom + rulerSize.height >\n this.diagram.scroller.viewPortHeight - 18) {\n movingPosition = 'bottom';\n }\n else if (position.y + this.diagram.scroller.verticalOffset < autoScrollBorder.top) {\n movingPosition = 'top';\n }\n }\n return movingPosition;\n };\n DiagramEventHandler.prototype.doAutoScroll = function (option, e, delay, autoScroll) {\n var position = option;\n if ((this.tool instanceof MoveTool || this.tool instanceof ResizeTool\n || this.tool instanceof SelectTool) && this.inAction) {\n var diagram = this;\n var pos = this.getMousePosition(e);\n var autoScrollBorder = this.diagram.scrollSettings.autoScrollBorder;\n var newDelay = delay ? delay : 100;\n var left = 0;\n var top_1 = 0;\n var point = { x: pos.x, y: pos.y };\n switch (position) {\n case 'right':\n point.x = pos.x + 10;\n left = 10;\n break;\n case 'left':\n point.x = pos.x - 10;\n left = -10;\n break;\n case 'bottom':\n point.y = pos.y + 10;\n top_1 = 10;\n break;\n case 'top':\n point.y = pos.y - 10;\n top_1 = -10;\n break;\n }\n this.eventArgs.position = { x: point.x, y: point.y };\n this.tool.mouseMove(this.eventArgs);\n this.diagram.scroller.zoom(1, -left, -top_1, pos);\n }\n };\n DiagramEventHandler.prototype.mouseEvents = function () {\n var target = this.diagram.findObjectsUnderMouse(this.currentPosition);\n for (var i = 0; i < target.length; i++) {\n if (this.eventArgs.actualObject === target[i]) {\n target.splice(i, 1);\n }\n }\n var arg = {\n targets: target,\n element: (this.eventArgs.source === this.eventArgs.actualObject) ? undefined : this.eventArgs.source,\n actualObject: this.eventArgs.actualObject\n };\n if (this.lastObjectUnderMouse && (!this.eventArgs.actualObject || (this.lastObjectUnderMouse !== this.eventArgs.actualObject))) {\n var arg_1 = { targets: undefined, element: this.lastObjectUnderMouse, actualObject: undefined };\n this.diagram.triggerEvent(DiagramEvent.mouseLeave, arg_1);\n this.lastObjectUnderMouse = null;\n }\n if (!this.lastObjectUnderMouse && this.eventArgs.source || (this.lastObjectUnderMouse !== this.eventArgs.actualObject)) {\n this.lastObjectUnderMouse = this.eventArgs.actualObject;\n this.diagram.triggerEvent(DiagramEvent.mouseEnter, arg);\n }\n if (this.eventArgs.actualObject) {\n this.diagram.triggerEvent(DiagramEvent.mouseOver, arg);\n }\n };\n DiagramEventHandler.prototype.elementEnter = function (mousePosition, elementOver) {\n if (!elementOver) {\n var isPrivateTooltip = ((this.hoverElement instanceof Node) &&\n this.hoverElement.constraints & NodeConstraints.Tooltip) ||\n ((this.hoverElement instanceof Connector) && this.hoverElement.constraints & ConnectorConstraints.Tooltip);\n updateTooltip(this.diagram, isPrivateTooltip ? this.hoverElement : undefined);\n var offset = getTooltipOffset(this.diagram, mousePosition, this.hoverElement);\n this.diagram.tooltipObject.close();\n this.diagram.tooltipObject.offsetX = offset.x;\n this.diagram.tooltipObject.offsetY = offset.y;\n this.diagram.tooltipObject.dataBind();\n if (canEnableToolTip(this.hoverElement, this.diagram)) {\n this.diagram.tooltipObject.open(this.diagram.element);\n }\n }\n };\n DiagramEventHandler.prototype.elementLeave = function () {\n this.diagram.tooltipObject.close();\n };\n DiagramEventHandler.prototype.altKeyPressed = function (keyModifier) {\n if (keyModifier & KeyModifiers.Alt) {\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.ctrlKeyPressed = function (keyModifier) {\n if (keyModifier & KeyModifiers.Control) {\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.shiftKeyPressed = function (keyModifier) {\n if (keyModifier & KeyModifiers.Shift) {\n return true;\n }\n return false;\n };\n /** @private */\n DiagramEventHandler.prototype.scrolled = function (evt) {\n this.diagram.updateScrollOffset();\n };\n /** @private */\n DiagramEventHandler.prototype.doubleClick = function (evt) {\n if (canUserInteract(this.diagram)) {\n var annotation = void 0;\n var objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n var obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n if (obj !== null && canUserInteract(this.diagram)) {\n var node = obj;\n annotation = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n if (this.tool && (this.tool instanceof PolygonDrawingTool || this.tool instanceof PolyLineDrawingTool)) {\n var arg_2 = {\n source: obj || this.diagram, position: this.currentPosition, count: evt.detail\n };\n this.tool.mouseUp(this.eventArgs);\n this.isMouseDown = false;\n this.eventArgs = {};\n this.tool = null;\n evt.preventDefault();\n }\n else {\n var layer = this.diagram.commandHandler.getObjectLayer(obj.id);\n if (layer && !layer.lock && layer.visible) {\n if (!(this.diagram.diagramActions & DiagramAction.TextEdit)) {\n var id = '';\n if (obj.shape.shape === 'TextAnnotation') {\n id = obj.id.split('_textannotation_')[1];\n }\n this.diagram.startTextEdit(obj, id || (annotation instanceof TextElement ?\n (annotation.id).split(obj.id + '_')[1] : undefined));\n }\n }\n }\n }\n var arg = {\n source: obj || this.diagram, position: this.currentPosition, count: evt.detail\n };\n this.diagram.triggerEvent(DiagramEvent.doubleClick, arg);\n }\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.inputChange = function (evt) {\n var minWidth = 90;\n var maxWidth;\n var minHeight = 12;\n var fontsize;\n var textWrapper;\n var node;\n var height;\n var width;\n var textBounds;\n var textBoxWidth;\n var transforms;\n var scale;\n var editTextBox = document.getElementById(this.diagram.element.id + '_editBox');\n var editTextBoxDiv = document.getElementById(this.diagram.element.id + '_editTextBoxDiv');\n var text = (editTextBox.value);\n var line = text.split('\\n');\n node = (this.diagram.selectedItems.nodes[0]) ? this.diagram.selectedItems.nodes[0] : this.diagram.selectedItems.connectors[0];\n if (!node && this.tool instanceof TextDrawingTool) {\n node = this.diagram.nameTable[this.diagram.activeLabel.parentId];\n }\n if (node && ((node.shape.type !== 'Text' && node.annotations.length > 0) || (node.shape.type === 'Text'))) {\n textWrapper = this.diagram.getWrapper(node.wrapper, this.diagram.activeLabel.id);\n maxWidth = node.wrapper.bounds.width < textWrapper.bounds.width ? node.wrapper.bounds.width : textWrapper.bounds.width;\n maxWidth = maxWidth > minWidth ? maxWidth : minWidth;\n textBounds = measureHtmlText(textWrapper.style, text, undefined, undefined, maxWidth);\n fontsize = Number((editTextBox.style.fontSize).split('px')[0]);\n if (line.length > 1 && line[line.length - 1] === '') {\n textBounds.height = textBounds.height + fontsize;\n }\n transforms = this.diagram.scroller.transform;\n scale = canZoomTextEdit(this.diagram) ? transforms.scale : 1;\n width = textBounds.width;\n width = ((minWidth > width) ? minWidth : width) * scale;\n height = ((minHeight > textBounds.height) ? minHeight : textBounds.height) * scale;\n editTextBoxDiv.style.left = ((((textWrapper.bounds.center.x + transforms.tx) * transforms.scale) - width / 2) - 2.5) + 'px';\n editTextBoxDiv.style.top = ((((textWrapper.bounds.center.y + transforms.ty) * transforms.scale) - height / 2) - 3) + 'px';\n editTextBoxDiv.style.width = width + 'px';\n editTextBoxDiv.style.height = height + 'px';\n editTextBox.style.minHeight = minHeight + 'px';\n editTextBox.style.minWidth = minWidth + 'px';\n editTextBox.style.width = width + 'px';\n editTextBox.style.height = height + 'px';\n }\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.isAddTextNode = function (node, focusOut) {\n if (this.tool instanceof TextDrawingTool || focusOut) {\n this.tool = null;\n if (node && (!(canContinuousDraw(this.diagram)))) {\n this.diagram.drawingObject = undefined;\n this.diagram.currentDrawingObject = undefined;\n }\n if (getObjectFromCollection(this.diagram.nodes, node.id) ||\n getObjectFromCollection(this.diagram.connectors, node.id) ||\n (this.diagram.bpmnModule && this.diagram.bpmnModule.textAnnotationConnectors.indexOf(node) > -1)) {\n return false;\n }\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.checkEditBoxAsTarget = function (evt) {\n if ((evt.target && evt.target.id === this.diagram.element.id + '_editBox')) {\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.getMouseEventArgs = function (position, args, source) {\n args.position = position;\n var obj;\n var objects;\n if (!source) {\n if (this.action === 'Drag' || this.action === 'ConnectorSourceEnd' || this.action === 'SegmentEnd' ||\n this.action === 'OrthoThumb' || this.action === 'BezierSourceThumb' || this.action === 'BezierTargetThumb' ||\n this.action === 'ConnectorTargetEnd' || this.action.indexOf('Rotate') !== -1 || this.action.indexOf('Resize') !== -1) {\n obj = this.diagram.selectedItems;\n }\n else {\n objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n }\n }\n else {\n objects = this.diagram.findObjectsUnderMouse(this.currentPosition, source);\n obj = this.diagram.findTargetObjectUnderMouse(objects, this.action, this.inAction, args.position, source);\n }\n var wrapper;\n if (obj) {\n wrapper = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n }\n if (!source) {\n args.source = obj;\n args.sourceWrapper = wrapper;\n }\n else {\n args.target = obj;\n args.targetWrapper = wrapper;\n }\n args.actualObject = this.eventArgs.actualObject;\n args.startTouches = this.touchStartList;\n args.moveTouches = this.touchMoveList;\n return args;\n };\n /** @private */\n DiagramEventHandler.prototype.resetTool = function () {\n this.action = 'Select';\n this.hoverElement = null;\n this.hoverNode = null;\n this.tool = this.diagram.getTool(this.action);\n this.updateCursor();\n };\n /** @private */\n DiagramEventHandler.prototype.getTool = function (action) {\n switch (action) {\n case 'Select':\n return new SelectTool(this.commandHandler, true);\n case 'Drag':\n return new MoveTool(this.commandHandler);\n case 'Rotate':\n return new RotateTool(this.commandHandler);\n case 'LayoutAnimation':\n return new ExpandTool(this.commandHandler);\n case 'Hyperlink':\n return new LabelTool(this.commandHandler);\n case 'ResizeSouthEast':\n case 'ResizeSouthWest':\n case 'ResizeNorthEast':\n case 'ResizeNorthWest':\n case 'ResizeSouth':\n case 'ResizeNorth':\n case 'ResizeWest':\n case 'ResizeEast':\n return new ResizeTool(this.commandHandler, action);\n case 'ConnectorSourceEnd':\n case 'ConnectorTargetEnd':\n case 'BezierSourceThumb':\n case 'BezierTargetThumb':\n return new ConnectTool(this.commandHandler, action);\n case 'SegmentEnd':\n case 'OrthoThumb':\n return new ConnectorEditing(this.commandHandler, action);\n case 'Draw':\n var shape = 'shape';\n var type = findObjectType(this.diagram.drawingObject);\n if (type === 'Node' && this.diagram.drawingObject.shape.type === 'Text') {\n return new TextDrawingTool(this.commandHandler);\n }\n else if (type === 'Node' && this.diagram.drawingObject.shape[shape] === 'Polygon' &&\n !(this.diagram.drawingObject.shape.points)) {\n return new PolygonDrawingTool(this.commandHandler);\n }\n else if (type === 'Node' ||\n (type === 'Node' && this.diagram.drawingObject.shape[shape] === 'Polygon' &&\n (this.diagram.drawingObject.shape.points))) {\n return new NodeDrawingTool(this.commandHandler, this.diagram.drawingObject);\n }\n else if (type === 'Connector' && this.diagram.drawingObject.type === 'Polyline') {\n return new PolyLineDrawingTool(this.commandHandler);\n }\n else if (type === 'Connector') {\n return new ConnectorDrawingTool(this.commandHandler, 'ConnectorSourceEnd', this.diagram.drawingObject);\n }\n break;\n case 'Pan':\n return new ZoomPanTool(this.commandHandler, false);\n case 'PinchZoom':\n return new ZoomPanTool(this.commandHandler, true);\n case 'PortDrag':\n return new MoveTool(this.commandHandler, 'Port');\n case 'PortDraw':\n return new ConnectorDrawingTool(this.commandHandler, 'ConnectorSourceEnd', this.diagram.drawingObject);\n case 'LabelSelect':\n return new SelectTool(this.commandHandler, true, 'LabelSelect');\n case 'LabelDrag':\n return new LabelDragTool(this.commandHandler);\n case 'LabelResizeSouthEast':\n case 'LabelResizeSouthWest':\n case 'LabelResizeNorthEast':\n case 'LabelResizeNorthWest':\n case 'LabelResizeSouth':\n case 'LabelResizeNorth':\n case 'LabelResizeWest':\n case 'LabelResizeEast':\n return new LabelResizeTool(this.commandHandler, action);\n case 'LabelRotate':\n return new LabelRotateTool(this.commandHandler);\n //for coverage\n // case 'Custom':\n // return this.diagram.getTool(action);\n }\n return null;\n };\n /** @private */\n DiagramEventHandler.prototype.getCursor = function (action) {\n var object = (this.diagram.selectedItems.annotation) ?\n this.diagram.selectedItems.wrapper.children[0] : this.diagram.selectedItems;\n var rotateAngle = (this.diagram.selectedItems.annotation) ?\n (object.rotateAngle + object.parentTransform) : object.rotateAngle;\n return getCursor(action, rotateAngle);\n };\n //start region - interface betweend diagram and interaction\n /** @private */\n DiagramEventHandler.prototype.findElementUnderMouse = function (obj, position) {\n return this.objectFinder.findElementUnderSelectedItem(obj, position);\n };\n /** @private */\n DiagramEventHandler.prototype.findObjectsUnderMouse = function (position, source) {\n return this.objectFinder.findObjectsUnderMouse(position, this.diagram, this.eventArgs, source);\n };\n /** @private */\n DiagramEventHandler.prototype.findObjectUnderMouse = function (objects, action, inAction) {\n return this.objectFinder.findObjectUnderMouse(this.diagram, objects, action, inAction, this.eventArgs, this.currentPosition);\n };\n /** @private */\n DiagramEventHandler.prototype.findTargetUnderMouse = function (objects, action, inAction, position, source) {\n return this.objectFinder.findObjectUnderMouse(this.diagram, objects, action, inAction, this.eventArgs, position, source);\n };\n /** @private */\n DiagramEventHandler.prototype.findActionToBeDone = function (obj, wrapper, position, target) {\n return findToolToActivate(obj, wrapper, this.currentPosition, this.diagram, this.touchStartList, this.touchMoveList, target);\n };\n return DiagramEventHandler;\n}());\nexport { DiagramEventHandler };\n/** @private */\nvar ObjectFinder = /** @class */ (function () {\n function ObjectFinder() {\n }\n /** @private */\n ObjectFinder.prototype.findObjectsUnderMouse = function (pt, diagram, eventArgs, source, actions) {\n // finds the collection of the object that is under the mouse;\n var actualTarget = [];\n if (source && source instanceof Selector) {\n if (source.nodes.length + source.connectors.length === 1) {\n source = (source.nodes[0] || source.connectors[0]);\n if (source.children && source.children.length === 0) {\n eventArgs.actualObject = source;\n }\n }\n }\n var container;\n var bounds;\n var child;\n var matrix;\n var objArray = diagram.spatialSearch.findObjects(new Rect(pt.x - 50, pt.y - 50, 100, 100));\n var layerObjTable = {};\n var layerTarger;\n for (var _i = 0, objArray_1 = objArray; _i < objArray_1.length; _i++) {\n var obj = objArray_1[_i];\n var point = pt;\n bounds = obj.wrapper.outerBounds;\n var pointInBounds = (obj.rotateAngle) ? false : bounds.containsPoint(point);\n if ((obj !== source || diagram.currentDrawingObject instanceof Connector) &&\n (obj instanceof Connector) ? obj !== diagram.currentDrawingObject : true && obj.wrapper.visible) {\n var layer = diagram.commandHandler.getObjectLayer(obj.id);\n if (layer && !layer.lock && layer.visible) {\n layerTarger = layerObjTable[layer.zIndex] = layerObjTable[layer.zIndex] || [];\n if (obj.rotateAngle) {\n container = obj.wrapper;\n bounds = cornersPointsBeforeRotation(container);\n for (var _a = 0, _b = container.children; _a < _b.length; _a++) {\n child = _b[_a];\n matrix = identityMatrix();\n rotateMatrix(matrix, -(child.rotateAngle + child.parentTransform), child.offsetX, child.offsetY);\n point = transformPointByMatrix(matrix, pt);\n if (cornersPointsBeforeRotation(child).containsPoint(point)) {\n pointInBounds = true;\n }\n }\n }\n if (!source || (isSelected(diagram, obj) === false)) {\n if (canEnablePointerEvents(obj, diagram)) {\n if ((obj instanceof Connector) ? isPointOverConnector(obj, pt) : pointInBounds) {\n var padding = (obj instanceof Connector) ? obj.hitPadding || 0 : 0;\n var element = void 0;\n element = this.findElementUnderMouse(obj, pt, padding);\n if (element) {\n if (obj instanceof Connector && diagram.bpmnModule) {\n // obj = diagram.bpmnModule.findInteractableObject(obj, diagram);\n }\n insertObject(obj, 'zIndex', layerTarger);\n }\n }\n }\n }\n }\n }\n }\n for (var _c = 0, _d = diagram.layers; _c < _d.length; _c++) {\n var layer = _d[_c];\n actualTarget = actualTarget.concat(layerObjTable[layer.zIndex] || []);\n for (var _e = 0, actualTarget_1 = actualTarget; _e < actualTarget_1.length; _e++) {\n var obj = actualTarget_1[_e];\n var eventHandler = 'eventHandler';\n if (obj.shape.type === 'Bpmn' && obj.processId && (!(diagram[eventHandler].tool instanceof MoveTool) ||\n (diagram[eventHandler].tool instanceof MoveTool) && canAllowDrop(obj))) {\n var index = actualTarget.indexOf(diagram.nameTable[obj.processId]);\n if (index > -1) {\n actualTarget.splice(index, 1);\n }\n }\n }\n }\n for (var i = 0; i < actualTarget.length; i++) {\n var parentObj = diagram.nameTable[actualTarget[i].parentId];\n if (parentObj) {\n var portElement = this.findElementUnderMouse(parentObj, pt);\n for (var j = 0; j < parentObj.ports.length; j++) {\n if (portElement.id.match('_' + parentObj.ports[j].id + '$')) {\n var port = parentObj.ports[j];\n if (canDrag(port, diagram) || canDraw(port, diagram)) {\n return actualTarget;\n }\n }\n }\n }\n while (parentObj) {\n var index = actualTarget.indexOf(parentObj);\n if (index !== -1) {\n actualTarget.splice(index, 1);\n }\n else {\n break;\n }\n parentObj = diagram.nameTable[parentObj.parentId];\n }\n }\n return actualTarget;\n };\n /** @private */\n ObjectFinder.prototype.isTarget = function (actualTarget, diagram, action) {\n var connector = diagram.selectedItems.connectors[0];\n var node;\n node = action === 'ConnectorSourceEnd' ? diagram.nameTable[connector.targetID] :\n node = diagram.nameTable[connector.sourceID];\n if (node && (!node.processId && !actualTarget.processId || node.processId !== actualTarget.processId)) {\n if (node.processId !== actualTarget.processId) {\n actualTarget = null;\n }\n }\n if (action === 'ConnectorSourceEnd' && connector.targetID) {\n var targetNode = diagram.nameTable[connector.targetID];\n if (targetNode && targetNode.shape && (targetNode.shape.shape === 'TextAnnotation')) {\n var id = connector.id.split('_');\n if (((targetNode.shape.type === 'Bpmn') && actualTarget.shape.type !== 'Bpmn') || (id[0] === actualTarget.id) ||\n actualTarget.shape.shape === 'TextAnnotation') {\n actualTarget = null;\n }\n }\n }\n return actualTarget;\n };\n /* tslint:disable */\n /** @private */\n ObjectFinder.prototype.findObjectUnderMouse = function (diagram, objects, action, inAction, eventArg, position, source) {\n //we will get the wrapper object here\n //we have to choose the object to be interacted with from the given wrapper\n //Find the object that is under mouse\n var eventHandler = 'eventHandler';\n var actualTarget = null;\n if (objects.length !== 0) {\n if (source && source instanceof Selector) {\n if (source.nodes.length + source.connectors.length === 1) {\n source = (source.nodes[0] || source.connectors[0]);\n }\n }\n if ((action === 'ConnectorSourceEnd' && source || action === 'PortDraw') ||\n ((canDrawOnce(diagram) || canContinuousDraw(diagram)) && getObjectType(diagram.drawingObject) === Connector)) {\n var connector = diagram.selectedItems.connectors[0];\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Node && canOutConnect(objects[i])) {\n actualTarget = objects[i];\n if (connector) {\n actualTarget = this.isTarget(actualTarget, diagram, action);\n }\n eventArg.actualObject = actualTarget;\n return actualTarget;\n }\n }\n }\n else if (action === 'ConnectorTargetEnd' && source) {\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Node && canInConnect(objects[i])) {\n actualTarget = objects[i];\n actualTarget = this.isTarget(actualTarget, diagram, action);\n eventArg.actualObject = actualTarget;\n return actualTarget;\n }\n }\n }\n else if (source && (action === 'Drag' || (diagram[eventHandler].tool instanceof MoveTool))) {\n var index = 0;\n for (var i = 0; i < objects.length; i++) {\n var temp = objects[i];\n if (source !== temp && (temp instanceof Connector ||\n !position || temp.wrapper.bounds.containsPoint(position))) {\n if (canAllowDrop(temp)) {\n if (!actualTarget) {\n actualTarget = temp;\n index = actualTarget.zIndex;\n }\n else {\n actualTarget = index >= temp.zIndex ? actualTarget : temp;\n index = Math.max(index, temp.zIndex);\n }\n }\n }\n }\n if (actualTarget && actualTarget.shape.type === 'Bpmn') {\n if (diagram.selectedItems.nodes.length > 0 && diagram.selectedItems.nodes[0].shape.type === 'Bpmn') {\n actualTarget = actualTarget;\n }\n else {\n actualTarget = null;\n }\n }\n if (actualTarget) {\n eventArg.actualObject = actualTarget;\n }\n return actualTarget;\n }\n else if (action === 'Select' && diagram[eventHandler].tool) {\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Connector) {\n if (objects[i - 1] instanceof Node && objects[i - 1].ports) {\n var portElement = this.findTargetElement(objects[i - 1].wrapper, position, undefined);\n if ((portElement && (portElement.id.match('_icon_content_shape$') || portElement.id.match('_icon_content_rect$')))) {\n return objects[i - 1];\n }\n for (var j = 0; j < objects[i - 1].ports.length; j++) {\n if (portElement && portElement.id.match('_' + objects[i - 1].ports[j].id + '$')) {\n if (canDraw(objects[i - 1].ports[j], diagram)) {\n return objects[i - 1];\n }\n }\n }\n }\n }\n }\n actualTarget = objects[objects.length - 1];\n eventArg.actualObject = actualTarget;\n if (actualTarget.parentId) {\n var obj = actualTarget;\n var selected = isSelected(diagram, obj);\n while (obj) {\n if (isSelected(diagram, obj) && !selected) {\n break;\n }\n actualTarget = obj;\n obj = diagram.nameTable[obj.parentId];\n }\n }\n }\n else if (action === 'Pan' || action === 'LayoutAnimation') {\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Node) {\n var portElement = this.findTargetElement(objects[i].wrapper, position, undefined);\n if ((action === 'LayoutAnimation' || action === 'Pan') || ((portElement && (portElement.id.match('_icon_content_shape$') || portElement.id.match('_icon_content_rect$'))))) {\n return objects[i];\n }\n }\n }\n }\n else {\n actualTarget = objects[objects.length - 1];\n if (eventArg && actualTarget) {\n eventArg.actualObject = actualTarget;\n }\n }\n }\n return actualTarget;\n };\n /* tslint:enable */\n /** @private */\n ObjectFinder.prototype.findElementUnderSelectedItem = function (obj, position) {\n //rewrite this for multiple selection\n if (obj instanceof Selector) {\n if (obj.nodes.length === 1 && (!obj.connectors || !obj.connectors.length)) {\n return this.findElementUnderMouse(obj.nodes[0], position);\n }\n else if ((!obj.nodes || obj.nodes.length) && obj.connectors.length === 1) {\n return this.findElementUnderMouse(obj.connectors[0], position);\n }\n }\n else {\n return this.findElementUnderMouse(obj, position);\n }\n return null;\n };\n ObjectFinder.prototype.findElementUnderMouse = function (obj, position, padding) {\n return this.findTargetElement(obj.wrapper, position, padding);\n };\n /** @private */\n ObjectFinder.prototype.findTargetElement = function (container, position, padding) {\n for (var i = container.children.length - 1; i >= 0; i--) {\n var element = container.children[i];\n if (element && element.outerBounds.containsPoint(position)) {\n if (element instanceof Container) {\n var target = this.findTargetElement(element, position);\n if (target) {\n return target;\n }\n }\n if (element.bounds.containsPoint(position)) {\n return element;\n }\n }\n }\n if (container.bounds.containsPoint(position, padding) && container.style.fill !== 'none') {\n return container;\n }\n return null;\n };\n return ObjectFinder;\n}());\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A collection of JSON objects where each object represents a layer.\n * Layer is a named category of diagram shapes.\n */\nvar Layer = /** @class */ (function (_super) {\n __extends(Layer, _super);\n // tslint:disable-next-line:no-any\n function Layer(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.objectZIndex = -1;\n /** @private */\n _this.zIndexTable = {};\n _this.objects = [];\n return _this;\n }\n __decorate([\n Property('')\n ], Layer.prototype, \"id\", void 0);\n __decorate([\n Property(true)\n ], Layer.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], Layer.prototype, \"lock\", void 0);\n __decorate([\n Property()\n ], Layer.prototype, \"objects\", void 0);\n __decorate([\n Property()\n ], Layer.prototype, \"addInfo\", void 0);\n __decorate([\n Property(-1)\n ], Layer.prototype, \"zIndex\", void 0);\n return Layer;\n}(ChildProperty));\nexport { Layer };\n","import { Connector, getBezierPoints, isEmptyVector } from '../objects/connector';\nimport { Node, BpmnSubEvent, BpmnAnnotation } from '../objects/node';\nimport { PathElement } from '../core/elements/path-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { OrthogonalSegment } from '../objects/connector';\nimport { Rect } from '../primitives/rect';\nimport { identityMatrix, rotateMatrix, transformPointByMatrix, scaleMatrix } from './../primitives/matrix';\nimport { cloneObject as clone, cloneObject, getBounds } from './../utility/base-util';\nimport { completeRegion, getTooltipOffset, sort, findObjectIndex, intersect3, getAnnotationPosition } from './../utility/diagram-util';\nimport { randomId, cornersPointsBeforeRotation } from './../utility/base-util';\nimport { Selector } from './selector';\nimport { hasSelection, isSelected, hasSingleConnection } from './actions';\nimport { DiagramEvent } from '../enum/enum';\nimport { canSelect, canMove, canRotate, canDragSourceEnd, canDragTargetEnd, canSingleSelect, canDrag } from './../utility/constraints-util';\nimport { canMultiSelect, canContinuousDraw } from './../utility/constraints-util';\nimport { canPanX, canPanY, canPageEditable } from './../utility/constraints-util';\nimport { SnapConstraints, DiagramTools, DiagramAction } from '../enum/enum';\nimport { getDiagramElement, getAdornerLayerSvg, getHTMLLayer, getAdornerLayer } from '../utility/dom-util';\nimport { Point } from '../primitives/point';\nimport { Size } from '../primitives/size';\nimport { getObjectType, getPoint } from './../utility/diagram-util';\nimport { Layer } from '../diagram/layer';\nimport { SelectorConstraints } from '../enum/enum';\nimport { remove } from '@syncfusion/ej2-base';\nimport { getOppositeDirection, getPortDirection, findAngle } from './../utility/connector';\nimport { swapBounds, findPoint, orthoConnection2Segment, getIntersection } from './../utility/connector';\nimport { ShapeAnnotation, PathAnnotation } from '../objects/annotation';\n/**\n * Defines the behavior of commands\n */\nvar CommandHandler = /** @class */ (function () {\n function CommandHandler(diagram) {\n this.clipboardData = {};\n this.connectorsTable = [];\n this.processTable = {};\n this.childTable = {};\n this.parentTable = {};\n this.diagram = diagram;\n }\n Object.defineProperty(CommandHandler.prototype, \"snappingModule\", {\n get: function () {\n return this.diagram.snappingModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommandHandler.prototype, \"layoutAnimateModule\", {\n get: function () {\n return this.diagram.layoutAnimateModule;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n CommandHandler.prototype.startTransaction = function (protectChange) {\n this.state = { element: this.diagram.selectedItems, backup: null };\n if (protectChange) {\n this.diagram.protectPropertyChange(true);\n }\n getAdornerLayer(this.diagram.element.id).style.pointerEvents = 'none';\n };\n /** @private */\n CommandHandler.prototype.endTransaction = function (protectChange) {\n this.state = null;\n if (protectChange) {\n this.diagram.protectPropertyChange(false);\n }\n getAdornerLayer(this.diagram.element.id).style.pointerEvents = 'all';\n };\n /**\n * @private\n */\n CommandHandler.prototype.showTooltip = function (node, position, content, toolName, isTooltipVisible) {\n var _this = this;\n if (isTooltipVisible) {\n this.diagram.tooltipObject.position = 'BottomCenter';\n this.diagram.tooltipObject.animation = { open: { delay: 0, duration: 0 } };\n this.diagram.tooltip.relativeMode = toolName === 'ConnectTool' ? 'Mouse' : 'Object';\n this.diagram.tooltipObject.openDelay = 0;\n this.diagram.tooltipObject.closeDelay = 0;\n }\n this.diagram.tooltipObject.content = content;\n var tooltipOffset = getTooltipOffset(this.diagram, { x: position.x, y: position.y }, node);\n this.diagram.tooltipObject.offsetX = tooltipOffset.x + (toolName === 'ConnectTool' ? 10 : 0);\n this.diagram.tooltipObject.offsetY = tooltipOffset.y + 10;\n this.diagram.tooltipObject.dataBind();\n if (isTooltipVisible) {\n setTimeout(function () {\n _this.diagram.tooltipObject.open(_this.diagram.element);\n }, 1);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.closeTooltip = function () {\n this.diagram.tooltipObject.close();\n };\n /**\n * @private\n */\n CommandHandler.prototype.canEnableDefaultTooltip = function () {\n if (this.diagram.selectedItems.constraints & SelectorConstraints.ToolTip) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.updateSelector = function () {\n this.diagram.updateSelector();\n };\n /**\n * @private\n */\n CommandHandler.prototype.triggerEvent = function (event, args) {\n if (event === DiagramEvent.drop || event === DiagramEvent.positionChange ||\n event === DiagramEvent.connectionChange) {\n if (this.diagram.currentSymbol) {\n return;\n }\n if (event === DiagramEvent.drop) {\n args.source = this.diagram;\n }\n if (this.diagram.currentDrawingObject) {\n return;\n }\n }\n this.diagram.triggerEvent(event, args);\n };\n /**\n * @private\n */\n CommandHandler.prototype.dragOverElement = function (args, currentPosition) {\n if (this.diagram.currentSymbol) {\n var dragOverArg = {\n element: args.source, target: args.target, mousePosition: currentPosition, diagram: this.diagram\n };\n this.triggerEvent(DiagramEvent.dragOver, dragOverArg);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.disConnect = function (obj, endPoint) {\n var oldChanges = {};\n var newChanges = {};\n var selectorModel;\n var connector;\n if (obj instanceof Selector) {\n selectorModel = obj;\n connector = selectorModel.connectors[0];\n }\n else if (obj instanceof Connector && this.diagram.currentDrawingObject) {\n connector = this.diagram.currentDrawingObject;\n }\n if (obj && connector && (hasSingleConnection(this.diagram) || this.diagram.currentDrawingObject)) {\n if (endPoint && (endPoint === 'ConnectorSourceEnd' || endPoint === 'ConnectorTargetEnd')) {\n var nodeEndId = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEndId = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n if (connector[nodeEndId]) { //connector.sourceID || connector.targetID\n oldChanges[nodeEndId] = connector[nodeEndId];\n connector[nodeEndId] = '';\n newChanges[nodeEndId] = connector[nodeEndId];\n if (connector.sourcePortID || connector.targetPortID) {\n oldChanges[portEndId] = connector[portEndId];\n connector[portEndId] = '';\n newChanges[portEndId] = connector[portEndId];\n }\n this.connectionEventChange(connector, oldChanges, newChanges, endPoint);\n }\n }\n else if ((endPoint !== 'OrthoThumb' && endPoint !== 'SegmentEnd') && (connector.sourceID || connector.targetID)) {\n oldChanges = {\n sourceID: connector.sourceID, sourcePortID: connector.sourcePortID,\n targetID: connector.targetID, targetPortID: connector.targetPortID\n };\n connector.sourceID = '';\n connector.sourcePortID = '';\n connector.targetID = '';\n connector.targetPortID = '';\n newChanges = {\n sourceID: connector.sourceID, sourcePortID: connector.sourcePortID,\n targetID: connector.targetID, targetPortID: connector.targetPortID\n };\n var arg = {\n connector: connector, oldValue: oldChanges,\n newValue: newChanges, cancel: false, state: 'Changing', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n if (arg.cancel) {\n connector.sourceID = oldChanges.sourceID;\n connector.sourcePortID = oldChanges.sourcePortID;\n connector.targetID = oldChanges.targetID;\n connector.targetPortID = oldChanges.targetPortID;\n }\n else {\n this.diagram.connectorPropertyChange(connector, oldChanges, newChanges);\n this.diagram.updateDiagramObject(connector);\n arg = {\n connector: connector, oldValue: oldChanges,\n newValue: newChanges, cancel: false, state: 'Changed', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n }\n }\n }\n };\n CommandHandler.prototype.connectionEventChange = function (connector, oldChanges, newChanges, endPoint) {\n var nodeEndId = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEndId = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n var arg = {\n connector: connector, oldValue: { nodeId: oldChanges[nodeEndId], portId: oldChanges[portEndId] },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] },\n cancel: false, state: 'Changing', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n if (arg.cancel) {\n connector[nodeEndId] = oldChanges[nodeEndId];\n connector[portEndId] = oldChanges[portEndId];\n newChanges = oldChanges;\n }\n else {\n this.diagram.connectorPropertyChange(connector, oldChanges, newChanges);\n this.diagram.updateDiagramObject(connector);\n arg = {\n connector: connector, oldValue: { nodeId: oldChanges[nodeEndId], portId: oldChanges[portEndId] },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] },\n cancel: false, state: 'Changed', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.findTarget = function (element, argsTarget, source, connection) {\n var target;\n if (argsTarget instanceof Node) {\n if (element && element.id === argsTarget.id + '_content') {\n return argsTarget;\n }\n if (source && argsTarget.shape.type === 'Bpmn' && argsTarget.shape.shape === 'Activity') {\n if (argsTarget.shape.activity.subProcess.type === 'Transaction') {\n var transaction = argsTarget.shape.activity.subProcess.transaction;\n if (transaction.success.visible && element.id.indexOf(argsTarget.id + '_success') === 0) {\n return transaction.success;\n }\n if (transaction.cancel.visible && element.id.indexOf(argsTarget.id + '_cancel') === 0) {\n return transaction.cancel;\n }\n if (transaction.failure.visible && element.id.indexOf(argsTarget.id + '_failure') === 0) {\n return transaction.failure;\n }\n }\n }\n if (element instanceof PathElement) {\n for (var i = 0; i < argsTarget.ports.length; i++) {\n var port = argsTarget.ports[i];\n if (element.id === argsTarget.id + '_' + port.id) {\n return port;\n }\n }\n }\n }\n if (!connection && element instanceof TextElement) {\n var annotation = void 0;\n for (var i = 0; i < argsTarget.annotations.length; i++) {\n annotation = argsTarget.annotations[i];\n if (element.id === argsTarget.id + '_' + annotation.id) {\n return annotation;\n }\n }\n }\n return argsTarget;\n };\n /**\n * @private\n */\n CommandHandler.prototype.canDisconnect = function (endPoint, args, targetPortId, targetNodeId) {\n var selector;\n var connect;\n if (args.source instanceof Selector) {\n selector = args.source;\n connect = selector.connectors[0];\n }\n else if (args.source instanceof Connector && this.diagram.currentDrawingObject) {\n connect = this.diagram.currentDrawingObject;\n }\n var targetObject = this.findTarget(args.targetWrapper, args.target, endPoint === 'ConnectorSourceEnd', true);\n var nodeEnd = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEnd = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n if (connect[nodeEnd] !== targetNodeId || connect[portEnd] !== targetPortId) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n CommandHandler.prototype.changeAnnotationDrag = function (args) {\n var selectorModel;\n var connector;\n if (args.source && args.source.connectors &&\n args.source.connectors.length && this.diagram.bpmnModule &&\n this.diagram.bpmnModule.textAnnotationConnectors.indexOf(args.source.connectors[0]) > -1) {\n if (args.source instanceof Selector) {\n selectorModel = args.source;\n connector = selectorModel.connectors[0];\n }\n var id = connector.id.split('_');\n var annotationId = id[id.length - 1];\n var nodeId = id[id.length - 3] || id[0];\n if (args.target && args.target.id !== nodeId &&\n args.target.shape.shape !== 'TextAnnotation') {\n this.diagram.startGroupAction();\n var parentNode = this.diagram.nameTable[id[0]];\n var clonedNode = this.getAnnotation(parentNode, id[1]);\n var annotationNode = {\n id: id[1] + randomId(),\n angle: Point.findAngle(connector.intermediatePoints[0], connector.intermediatePoints[1]),\n text: clonedNode.text,\n length: Point.distancePoints(connector.intermediatePoints[0], connector.intermediatePoints[1]),\n shape: { shape: 'TextAnnotation', type: 'Bpmn' },\n nodeId: clonedNode.nodeId\n };\n var annotationObj = new BpmnAnnotation(args.target.shape, 'annotations', annotationNode, true);\n this.diagram.bpmnModule.checkAndRemoveAnnotations(this.diagram.nameTable[connector.targetID], this.diagram);\n this.diagram.refreshCanvasLayers();\n annotationObj.id = id[1];\n this.diagram.addTextAnnotation(annotationObj, args.target);\n this.diagram.endGroupAction();\n }\n else if (connector) {\n connector.sourceID = nodeId;\n this.diagram.connectorPropertyChange(connector, {}, { sourceID: nodeId });\n this.diagram.updateDiagramObject(connector);\n }\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.connect = function (endPoint, args) {\n var newChanges = {};\n var oldChanges = {};\n var oldNodeId;\n var oldPortId;\n var selectorModel;\n var connector;\n if (args.source instanceof Selector) {\n selectorModel = args.source;\n connector = selectorModel.connectors[0];\n }\n else if (args.source instanceof Connector && this.diagram.currentDrawingObject) {\n connector = this.diagram.currentDrawingObject;\n }\n var target = this.findTarget(args.targetWrapper, args.target, endPoint === 'ConnectorSourceEnd', true);\n var nodeEndId = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEndId = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n if (target instanceof Node) {\n oldChanges[nodeEndId] = connector[nodeEndId];\n connector[nodeEndId] = target.id;\n newChanges[nodeEndId] = connector[nodeEndId];\n oldChanges[portEndId] = connector[portEndId];\n this.connectionEventChange(connector, oldChanges, newChanges, endPoint);\n }\n else {\n oldNodeId = connector[nodeEndId];\n oldPortId = connector[portEndId];\n connector[portEndId] = target.id;\n connector[nodeEndId] = args.target.id;\n newChanges[nodeEndId] = connector[nodeEndId];\n newChanges[portEndId] = connector[portEndId];\n var arg = {\n connector: connector, oldValue: { nodeId: oldNodeId, portId: oldPortId },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] },\n cancel: false, state: 'Changing', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n if (arg.cancel) {\n connector[nodeEndId] = oldNodeId;\n connector[portEndId] = oldPortId;\n newChanges[nodeEndId] = oldNodeId;\n newChanges[portEndId] = oldPortId;\n }\n else {\n this.diagram.connectorPropertyChange(connector, {}, newChanges);\n this.diagram.updateDiagramObject(connector);\n arg = {\n connector: connector, oldValue: { nodeId: oldNodeId, portId: oldPortId },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] }, cancel: false,\n state: 'Changed', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n }\n }\n this.renderHighlighter(args, undefined, endPoint === 'ConnectorSourceEnd');\n };\n /** @private */\n CommandHandler.prototype.cut = function () {\n var index;\n this.clipboardData.pasteIndex = 0;\n if (this.diagram.undoRedoModule) {\n this.diagram.historyList.startGroupAction();\n }\n this.clipboardData.clipObject = this.copyObjects();\n if (this.diagram.undoRedoModule) {\n this.diagram.historyList.endGroupAction();\n }\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n };\n /** @private */\n CommandHandler.prototype.addLayer = function (layer, objects) {\n layer.id = layer.id || randomId();\n layer.zIndex = this.diagram.layers.length;\n layer = new Layer(this.diagram, 'layers', layer, true);\n layer.objectZIndex = -1;\n layer.zIndexTable = {};\n this.diagram.layers.push(layer);\n this.diagram.layerZIndexTable[layer.zIndex] = layer.id;\n this.diagram.activeLayer = layer;\n var layers = layer.objects;\n if (objects) {\n for (var i = 0; i < objects.length; i++) {\n this.diagram.add(objects[i]);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.getObjectLayer = function (objectName) {\n var layers = this.diagram.layers;\n for (var i = 0; i < layers.length; i++) {\n var objIndex = layers[i].objects.indexOf(objectName);\n if (objIndex > -1) {\n return layers[i];\n }\n }\n return this.diagram.activeLayer;\n };\n /** @private */\n CommandHandler.prototype.getLayer = function (layerName) {\n var layers = this.diagram.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === layerName) {\n return layers[i];\n }\n }\n return undefined;\n };\n /** @private */\n CommandHandler.prototype.removeLayer = function (layerId) {\n var layers = this.getLayer(layerId);\n if (layers) {\n var index = this.diagram.layers.indexOf(layers);\n var layerObject = layers.objects;\n for (var i = layerObject.length - 1; i >= 0; i--) {\n this.diagram.unSelect(this.diagram.nameTable[layerObject[i]]);\n this.diagram.remove(this.diagram.nameTable[layerObject[i]]);\n if (layers.id !== 'default_layer') {\n if (this.diagram.activeLayer.id === layerId) {\n this.diagram.activeLayer = this.diagram.layers[this.diagram.layers.length - 1];\n }\n }\n }\n delete this.diagram.layerZIndexTable[layers.zIndex];\n this.diagram.layers.splice(index, 1);\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.moveObjects = function (objects, targetLayer) {\n var layer = this.getLayer(targetLayer) || this.diagram.activeLayer;\n this.diagram.setActiveLayer(layer.id);\n var targerNodes;\n for (var _i = 0, objects_1 = objects; _i < objects_1.length; _i++) {\n var i = objects_1[_i];\n var layer_1 = this.getObjectLayer(i);\n var index = layer_1.objects.indexOf(i);\n if (index > -1) {\n targerNodes = this.diagram.nameTable[i];\n this.diagram.unSelect(targerNodes);\n this.diagram.remove(this.diagram.nameTable[i]);\n this.diagram.add(targerNodes);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.cloneLayer = function (layerName) {\n var layers = this.diagram.layers;\n var layer = this.getLayer(layerName);\n if (layer) {\n var cloneObject_1 = [];\n var newlayer = {\n id: layerName + '_' + randomId(), objects: [], visible: true, lock: false\n };\n this.addLayer(newlayer);\n newlayer.zIndex = this.diagram.layers.length - 1;\n var multiSelect = cloneObject_1.length !== 1;\n for (var _i = 0, _a = layer.objects; _i < _a.length; _i++) {\n var obj = _a[_i];\n cloneObject_1.push(this.diagram.nameTable[obj]);\n }\n this.paste(cloneObject_1);\n }\n };\n /** @private */\n CommandHandler.prototype.copy = function () {\n this.clipboardData.pasteIndex = 1;\n this.clipboardData.clipObject = this.copyObjects();\n return this.clipboardData.clipObject;\n };\n /** @private */\n CommandHandler.prototype.copyObjects = function () {\n var selectedItems = [];\n var obj = [];\n this.clipboardData.childTable = {};\n if (this.diagram.selectedItems.connectors.length > 0) {\n selectedItems = this.diagram.selectedItems.connectors;\n for (var j = 0; j < selectedItems.length; j++) {\n var element = void 0;\n if (this.diagram.bpmnModule &&\n this.diagram.bpmnModule.textAnnotationConnectors.indexOf(selectedItems[j]) > -1) {\n element = cloneObject((this.diagram.nameTable[selectedItems[j].targetID]));\n }\n else {\n element = cloneObject((selectedItems[j]));\n }\n obj.push(element);\n }\n }\n if (this.diagram.selectedItems.nodes.length > 0) {\n selectedItems = selectedItems.concat(this.diagram.selectedItems.nodes);\n for (var j = 0; j < this.diagram.selectedItems.nodes.length; j++) {\n var node = clone(this.diagram.selectedItems.nodes[j]);\n var processTable = {};\n this.copyProcesses(node);\n obj.push(clone(node));\n var matrix = identityMatrix();\n rotateMatrix(matrix, -node.rotateAngle, node.offsetX, node.offsetY);\n if (node.children) {\n var childTable = this.clipboardData.childTable;\n var tempNode = void 0;\n var elements = [];\n var nodes = this.getAllDescendants(node, elements, true);\n for (var i = 0; i < nodes.length; i++) {\n tempNode = this.diagram.nameTable[nodes[i].id];\n var clonedObject = childTable[tempNode.id] = clone(tempNode);\n var newOffset = transformPointByMatrix(matrix, { x: clonedObject.wrapper.offsetX, y: clonedObject.wrapper.offsetY });\n if (tempNode instanceof Node) {\n clonedObject.offsetX = newOffset.x;\n clonedObject.offsetY = newOffset.y;\n clonedObject.rotateAngle -= node.rotateAngle;\n }\n }\n this.clipboardData.childTable = childTable;\n }\n }\n }\n if (this.clipboardData.pasteIndex === 0) {\n this.startGroupAction();\n for (var _i = 0, selectedItems_1 = selectedItems; _i < selectedItems_1.length; _i++) {\n var item = selectedItems_1[_i];\n if (this.diagram.nameTable[item.id]) {\n if (this.diagram.bpmnModule &&\n this.diagram.bpmnModule.textAnnotationConnectors.indexOf(item) > -1) {\n this.diagram.remove(this.diagram.nameTable[item.targetID]);\n }\n else {\n this.diagram.remove(item);\n }\n }\n }\n this.endGroupAction();\n }\n this.sortByZIndex(obj, 'zIndex');\n return obj;\n };\n CommandHandler.prototype.copyProcesses = function (node) {\n if (node.shape.type === 'Bpmn' && node.shape.activity &&\n node.shape.activity.subProcess.processes &&\n node.shape.activity.subProcess.processes.length > 0) {\n var processes = node.shape.activity.subProcess.processes;\n for (var _i = 0, processes_1 = processes; _i < processes_1.length; _i++) {\n var i = processes_1[_i];\n this.processTable[i] = (clone(this.diagram.nameTable[i]));\n if (this.processTable[i].shape.activity.subProcess.processes &&\n this.processTable[i].shape.activity.subProcess.processes.length > 0) {\n this.copyProcesses(this.processTable[i]);\n }\n }\n this.clipboardData.processTable = this.processTable;\n }\n };\n /** @private */\n CommandHandler.prototype.group = function () {\n var propName = 'isProtectedOnChange';\n var protectedChange = this.diagram[propName];\n this.diagram.protectPropertyChange(true);\n this.diagram.diagramActions = this.diagram.diagramActions | DiagramAction.Group;\n var selectedItems = [];\n var obj = {};\n obj.id = 'group' + randomId();\n obj = new Node(this.diagram, 'nodes', obj, true);\n obj.children = [];\n selectedItems = this.diagram.selectedItems.nodes;\n selectedItems = selectedItems.concat(this.diagram.selectedItems.connectors);\n for (var i = 0; i < selectedItems.length; i++) {\n if (!selectedItems[i].parentId) {\n obj.children.push(selectedItems[i].id);\n }\n }\n this.diagram.add(obj);\n var entry = { type: 'Group', undoObject: obj, redoObject: obj, category: 'Internal' };\n this.addHistoryEntry(entry);\n this.diagram.diagramActions = this.diagram.diagramActions & ~DiagramAction.Group;\n this.diagram.protectPropertyChange(protectedChange);\n };\n /** @private */\n CommandHandler.prototype.unGroup = function (obj) {\n var propName = 'isProtectedOnChange';\n var protectedChange = this.diagram[propName];\n this.diagram.protectPropertyChange(true);\n this.diagram.diagramActions = this.diagram.diagramActions | DiagramAction.Group;\n var selectedItems = [];\n if (obj) {\n selectedItems.push(obj);\n }\n else {\n selectedItems = this.diagram.selectedItems.nodes;\n }\n for (var i = 0; i < selectedItems.length; i++) {\n var node = selectedItems[i];\n var entry = {\n type: 'UnGroup', undoObject: cloneObject(node),\n redoObject: cloneObject(node), category: 'Internal'\n };\n if (!(this.diagram.diagramActions & DiagramAction.UndoRedo)) {\n this.addHistoryEntry(entry);\n }\n if (node.children) {\n if (node.ports && node.ports.length > 0) {\n this.diagram.removePorts(node, node.ports);\n }\n if (node.annotations && node.annotations.length > 0) {\n this.diagram.removeLabels(node, node.annotations);\n }\n var parentNode = this.diagram.nameTable[node.parentId];\n for (var j = node.children.length - 1; j >= 0; j--) {\n (this.diagram.nameTable[node.children[0]]).parentId = '';\n this.diagram.deleteChild(this.diagram.nameTable[node.children[0]], node);\n if (node.parentId && node.children[0]) {\n this.diagram.addChild(parentNode, node.children[0]);\n }\n }\n if (node.parentId) {\n this.diagram.deleteChild(node, parentNode);\n }\n }\n this.diagram.removeNode(node);\n this.clearSelection();\n }\n this.diagram.diagramActions = this.diagram.diagramActions & ~DiagramAction.Group;\n this.diagram.protectPropertyChange(protectedChange);\n };\n /** @private */\n CommandHandler.prototype.paste = function (obj) {\n if (obj || this.clipboardData.clipObject) {\n this.diagram.protectPropertyChange(true);\n var copiedItems = obj ? this.getNewObject(obj) :\n this.clipboardData.clipObject;\n if (copiedItems) {\n var multiSelect = copiedItems.length !== 1;\n var groupAction = false;\n var objectTable = {};\n var keyTable = {};\n if (this.clipboardData.pasteIndex !== 0) {\n this.clearSelection();\n }\n if (this.diagram.undoRedoModule) {\n groupAction = true;\n this.diagram.historyList.startGroupAction();\n }\n for (var _i = 0, copiedItems_1 = copiedItems; _i < copiedItems_1.length; _i++) {\n var copy = copiedItems_1[_i];\n objectTable[copy.id] = copy;\n }\n for (var j = 0; j < copiedItems.length; j++) {\n var copy = copiedItems[j];\n if (getObjectType(copy) === Connector) {\n var clonedObj = clone(copy);\n var nodeId = clonedObj.sourceID;\n clonedObj.sourceID = '';\n if (objectTable[nodeId] && keyTable[nodeId]) {\n clonedObj.sourceID = keyTable[nodeId];\n }\n nodeId = clonedObj.targetID;\n clonedObj.targetID = '';\n if (objectTable[nodeId] && keyTable[nodeId]) {\n clonedObj.targetID = keyTable[nodeId];\n }\n var newObj = this.cloneConnector(clonedObj, multiSelect);\n keyTable[copy.id] = newObj.id;\n }\n else {\n var newNode = this.cloneNode(copy, multiSelect);\n //bpmn text annotations will not be pasted\n if (newNode) {\n keyTable[copy.id] = newNode.id;\n var edges = copy.inEdges;\n if (edges) {\n for (var _a = 0, edges_1 = edges; _a < edges_1.length; _a++) {\n var edge = edges_1[_a];\n if (objectTable[edge] && keyTable[edge]) {\n var newConnector = this.diagram.nameTable[keyTable[edge]];\n newConnector.targetID = keyTable[copy.id];\n this.diagram.connectorPropertyChange(newConnector, { targetID: '', targetPortID: '' }, { targetID: newConnector.targetID, targetPortID: newConnector.targetPortID });\n }\n }\n }\n edges = copy.outEdges;\n if (edges) {\n for (var _b = 0, edges_2 = edges; _b < edges_2.length; _b++) {\n var edge = edges_2[_b];\n if (objectTable[edge] && keyTable[edge]) {\n var newConnector = this.diagram.nameTable[keyTable[edge]];\n newConnector.sourceID = keyTable[copy.id];\n this.diagram.connectorPropertyChange(newConnector, { sourceID: '', sourcePortID: '' }, { sourceID: newConnector.sourceID, sourcePortID: newConnector.sourcePortID });\n }\n }\n }\n }\n }\n }\n if (groupAction === true) {\n this.diagram.historyList.endGroupAction();\n groupAction = false;\n }\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n this.clipboardData.pasteIndex++;\n this.diagram.protectPropertyChange(false);\n }\n }\n };\n CommandHandler.prototype.getNewObject = function (obj) {\n var newObj;\n var newobjs = [];\n this.clipboardData.pasteIndex = 1;\n for (var i = 0; i < obj.length; i++) {\n newObj = cloneObject(obj[i]);\n newobjs.push(newObj);\n }\n return newobjs;\n };\n CommandHandler.prototype.cloneConnector = function (connector, multiSelect) {\n var newConnector;\n var cloneObject = clone(connector);\n this.translateObject(cloneObject);\n cloneObject.zIndex = -1;\n newConnector = this.diagram.add(cloneObject);\n this.selectObjects([newConnector], multiSelect);\n return newConnector;\n };\n CommandHandler.prototype.cloneNode = function (node, multiSelect, children) {\n var newNode;\n var connectorsTable = {};\n var cloneObject = clone(node);\n var process;\n if (node.shape && node.shape.type === 'Bpmn' && node.shape.activity &&\n node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length) {\n process = cloneObject.shape.activity.subProcess.processes;\n cloneObject.zIndex = -1;\n cloneObject.shape.activity.subProcess.processes = undefined;\n }\n if (node.children && node.children.length && (!children || !children.length)) {\n newNode = this.cloneGroup(node, multiSelect);\n }\n else if (node.shape && node.shape.shape === 'TextAnnotation' && node.id.indexOf('_textannotation_') !== -1 &&\n this.diagram.nameTable[node.id]) {\n var checkAnnotation = node.id.split('_textannotation_');\n var parentNode = void 0;\n var annotation = this.diagram.nameTable[node.id];\n for (var j = 0; j < annotation.inEdges.length; j++) {\n var connector = this.diagram.nameTable[annotation.inEdges[j]];\n if (connector) {\n parentNode = this.diagram.nameTable[connector.sourceID];\n var clonedNode = this.getAnnotation(parentNode, checkAnnotation[1]);\n var annotationNode = {\n id: checkAnnotation[1] + randomId(),\n angle: clonedNode.angle,\n text: clonedNode.text,\n length: clonedNode.length,\n shape: { shape: 'TextAnnotation', type: 'Bpmn' },\n nodeId: clonedNode.nodeId\n };\n this.diagram.addTextAnnotation(annotationNode, parentNode);\n }\n }\n }\n else {\n this.translateObject(cloneObject);\n cloneObject.zIndex = -1;\n if (children) {\n cloneObject.children = children;\n }\n newNode = this.diagram.add(cloneObject);\n }\n for (var _i = 0, _a = Object.keys(connectorsTable); _i < _a.length; _i++) {\n var i = _a[_i];\n this.diagram.add(connectorsTable[i]);\n }\n if (process && process.length) {\n newNode.shape.activity.subProcess.processes = process;\n this.cloneSubProcesses(newNode);\n }\n if (newNode) {\n this.selectObjects([newNode], multiSelect);\n }\n return newNode;\n };\n CommandHandler.prototype.getAnnotation = function (parent, annotationId) {\n var currentAnnotation = parent.shape.annotations;\n if (currentAnnotation && currentAnnotation.length) {\n for (var g = 0; g <= currentAnnotation.length; g++) {\n if (currentAnnotation[g].id === annotationId) {\n return currentAnnotation[g];\n }\n }\n }\n return undefined;\n };\n CommandHandler.prototype.cloneSubProcesses = function (node) {\n var connector = [];\n var temp = {};\n if (node.shape.type === 'Bpmn' && node.shape.activity &&\n node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length) {\n var process = node.shape.activity.subProcess.processes;\n for (var g = 0; g < process.length; g++) {\n var child = this.diagram.nameTable[process[g]] || this.clipboardData.processTable[process[g]];\n for (var _i = 0, _a = child.outEdges; _i < _a.length; _i++) {\n var j = _a[_i];\n if (connector.indexOf(j) < 0) {\n connector.push(j);\n }\n }\n for (var _b = 0, _c = child.inEdges; _b < _c.length; _b++) {\n var j = _c[_b];\n if (connector.indexOf(j) < 0) {\n connector.push(j);\n }\n }\n var innerChild = cloneObject(this.clipboardData.processTable[process[g]]);\n innerChild.processId = node.id;\n var newNode = this.cloneNode(innerChild, false);\n temp[process[g]] = newNode.id;\n process[g] = newNode.id;\n this.diagram.addProcess(newNode, node.id);\n for (var _d = 0, connector_1 = connector; _d < connector_1.length; _d++) {\n var i = connector_1[_d];\n var node_1 = this.diagram.nameTable[i] || this.diagram.connectorTable[i];\n var clonedNode = cloneObject(node_1);\n if (temp[clonedNode.sourceID] && temp[clonedNode.targetID]) {\n clonedNode.zIndex = -1;\n clonedNode.id += randomId();\n clonedNode.sourceID = temp[clonedNode.sourceID];\n clonedNode.targetID = temp[clonedNode.targetID];\n connector.splice(connector.indexOf(i), 1);\n this.diagram.add(clonedNode);\n }\n }\n }\n }\n };\n CommandHandler.prototype.cloneGroup = function (obj, multiSelect) {\n var value;\n var newChildren = [];\n var children = [];\n children = children.concat(obj.children);\n if (this.clipboardData.childTable) {\n for (var i = 0; i < children.length; i++) {\n var childObj = this.clipboardData.childTable[children[i]];\n if (childObj) {\n var newObj = void 0;\n if (getObjectType(childObj) === Connector) {\n newObj = this.cloneConnector(childObj, multiSelect);\n }\n else {\n newObj = this.cloneNode(childObj, multiSelect);\n }\n newChildren.push(newObj.id);\n }\n }\n }\n var parentObj = this.cloneNode(obj, multiSelect, newChildren);\n return parentObj;\n };\n /** @private */\n CommandHandler.prototype.translateObject = function (obj) {\n obj.id += randomId();\n var diff = this.clipboardData.pasteIndex * 10;\n if (getObjectType(obj) === Connector) {\n obj.sourcePoint = {\n x: obj.sourcePoint.x + diff, y: obj.sourcePoint.y + diff\n };\n obj.targetPoint = {\n x: obj.targetPoint.x + diff, y: obj.targetPoint.y + diff\n };\n if (obj.type === 'Bezier') {\n var segments = obj.segments;\n for (var i = 0; i < segments.length; i++) {\n if (!Point.isEmptyPoint(segments[i].point1)) {\n segments[i].point1 = {\n x: segments[i].point1.x + diff, y: segments[i].point1.y + diff\n };\n }\n if (!Point.isEmptyPoint(segments[i].point2)) {\n segments[i].point2 = {\n x: segments[i].point2.x + diff, y: segments[i].point2.y + diff\n };\n }\n }\n }\n if (obj.type === 'Straight' || obj.type === 'Bezier') {\n if (obj.segments && obj.segments.length > 0) {\n var segments = obj.segments;\n for (var i = 0; i < segments.length - 1; i++) {\n segments[i].point.x += diff;\n segments[i].point.y += diff;\n }\n }\n }\n }\n else {\n obj.offsetX += diff;\n obj.offsetY += diff;\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.drawObject = function (obj) {\n var newObj;\n var cloneObject;\n cloneObject = clone(this.diagram.drawingObject);\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var prop = _a[_i];\n cloneObject[prop] = obj[prop];\n }\n if (getObjectType(this.diagram.drawingObject) === Node) {\n newObj = new Node(this.diagram, 'nodes', cloneObject, true);\n newObj.id = (this.diagram.drawingObject.id || 'node') + randomId();\n this.diagram.initObject(newObj);\n }\n else {\n newObj = new Connector(this.diagram, 'connectors', cloneObject, true);\n newObj.id = (this.diagram.drawingObject.id || 'connector') + randomId();\n this.diagram.initObject(newObj);\n }\n this.diagram.updateDiagramObject(newObj);\n this.diagram.currentDrawingObject = newObj;\n return newObj;\n };\n /**\n * @private\n */\n CommandHandler.prototype.addObjectToDiagram = function (obj) {\n var newObj;\n this.diagram.removeFromAQuad(obj);\n this.diagram.removeObjectsFromLayer(this.diagram.nameTable[obj.id]);\n delete this.diagram.nameTable[obj.id];\n newObj = this.diagram.add(obj);\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n this.selectObjects([newObj]);\n if (obj && (!(canContinuousDraw(this.diagram)))) {\n this.diagram.tool &= ~DiagramTools.DrawOnce;\n this.diagram.currentDrawingObject = undefined;\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.addText = function (obj, currentPosition) {\n var annotation = this.diagram.findElementUnderMouse(obj, currentPosition);\n this.diagram.startTextEdit(obj, annotation instanceof TextElement ? (annotation.id).split('_')[1] : undefined);\n };\n /** @private */\n CommandHandler.prototype.selectObjects = function (obj, multipleSelection, oldValue) {\n var arg = {\n oldValue: oldValue ? oldValue : [], newValue: obj, cause: this.diagram.diagramActions,\n state: 'Changing', type: 'Addition', cancel: false\n };\n var select = true;\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n var canDoMultipleSelection = canMultiSelect(this.diagram);\n var canDoSingleSelection = canSingleSelect(this.diagram);\n if (canDoSingleSelection || canDoMultipleSelection) {\n if (!canDoMultipleSelection && ((obj.length > 1) || (multipleSelection && obj.length === 1))) {\n if (obj.length === 1) {\n this.clearSelection();\n }\n else {\n return;\n }\n }\n if (!canDoSingleSelection && obj.length === 1 && (!multipleSelection || !hasSelection(this.diagram))) {\n this.clearSelection();\n return;\n }\n }\n if (!arg.cancel) {\n for (var i = 0; i < obj.length; i++) {\n var newObj = obj[i];\n select = true;\n if (!hasSelection(this.diagram)) {\n this.select(newObj, i > 0 || multipleSelection, true);\n }\n else {\n if ((i > 0 || multipleSelection) && newObj.children && !newObj.parentId) {\n for (var i_1 = 0; i_1 < this.diagram.selectedItems.nodes.length; i_1++) {\n var parentNode = this.diagram.nameTable[this.diagram.selectedItems.nodes[i_1].parentId];\n if (parentNode) {\n parentNode = this.findParent(parentNode);\n if (parentNode) {\n if (newObj.id === parentNode.id) {\n this.selectGroup(newObj);\n }\n }\n }\n }\n }\n this.selectProcesses(newObj);\n select = this.selectBpmnSubProcesses(newObj);\n if (select) {\n this.select(newObj, i > 0 || multipleSelection, true);\n }\n }\n }\n arg = {\n oldValue: oldValue ? oldValue : [], newValue: obj, cause: this.diagram.diagramActions,\n state: 'Changed', type: 'Addition', cancel: false\n };\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n this.diagram.renderSelector(multipleSelection || (obj && obj.length > 1));\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.findParent = function (node) {\n if (node.parentId) {\n node = this.diagram.nameTable[node.parentId];\n this.findParent(node);\n }\n return node;\n };\n CommandHandler.prototype.selectProcesses = function (newObj) {\n if (this.hasProcesses(newObj)) {\n var processes = (newObj).shape.activity.subProcess.processes;\n for (var i = 0; i < processes.length; i++) {\n var innerChild = this.diagram.nameTable[processes[i]];\n if (this.hasProcesses(innerChild)) {\n this.selectObjects([innerChild], true);\n }\n this.unSelect(innerChild);\n }\n }\n };\n CommandHandler.prototype.selectGroup = function (newObj) {\n for (var j = 0; j < newObj.children.length; j++) {\n var innerChild = this.diagram.nameTable[newObj.children[j]];\n if (innerChild.children) {\n this.selectGroup(innerChild);\n }\n this.unSelect(this.diagram.nameTable[newObj.children[j]]);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.selectBpmnSubProcesses = function (node) {\n var select = true;\n var parent;\n if (node.processId) {\n if (isSelected(this.diagram, this.diagram.nameTable[node.processId])) {\n select = false;\n }\n else {\n select = this.selectBpmnSubProcesses(this.diagram.nameTable[node.processId]);\n }\n }\n else if (node instanceof Connector) {\n if (node.sourceID && this.diagram.nameTable[node.sourceID] &&\n this.diagram.nameTable[node.sourceID].processId) {\n parent = this.diagram.nameTable[node.sourceID].processId;\n }\n if (node.targetID && this.diagram.nameTable[node.targetID] &&\n this.diagram.nameTable[node.targetID].processId) {\n parent = this.diagram.nameTable[node.targetID].processId;\n }\n if (parent) {\n if (isSelected(this.diagram, this.diagram.nameTable[parent])) {\n return false;\n }\n else {\n select = this.selectBpmnSubProcesses(this.diagram.nameTable[parent]);\n }\n }\n }\n return select;\n };\n /**\n * @private\n */\n CommandHandler.prototype.hasProcesses = function (node) {\n if (node) {\n if ((node.shape.type === 'Bpmn') && node.shape.activity &&\n node.shape.activity.subProcess.processes &&\n node.shape.activity.subProcess.processes.length > 0) {\n return true;\n }\n }\n return false;\n };\n /** @private */\n CommandHandler.prototype.select = function (obj, multipleSelection, preventUpdate) {\n var hasLayer = this.getObjectLayer(obj.id);\n if ((canSelect(obj) && !(obj instanceof Selector) && !isSelected(this.diagram, obj))\n && (hasLayer && !hasLayer.lock && hasLayer.visible) && obj.wrapper.visible) {\n multipleSelection = hasSelection(this.diagram) ? multipleSelection : false;\n if (!multipleSelection) {\n this.clearSelection();\n }\n var selectorModel = this.diagram.selectedItems;\n var convert = obj;\n if (convert instanceof Node) {\n selectorModel.nodes.push(obj);\n }\n else {\n selectorModel.connectors.push(obj);\n }\n if (!multipleSelection) {\n selectorModel.init(this.diagram);\n if (selectorModel.nodes.length === 1 && selectorModel.connectors.length === 0) {\n selectorModel.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.pivot = selectorModel.nodes[0].pivot;\n }\n }\n else {\n selectorModel.wrapper.rotateAngle = selectorModel.rotateAngle = 0;\n selectorModel.wrapper.children.push(obj.wrapper);\n }\n if (!preventUpdate) {\n this.diagram.renderSelector(multipleSelection);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.labelSelect = function (obj, textWrapper) {\n var selectorModel = (this.diagram.selectedItems);\n selectorModel.nodes = selectorModel.connectors = [];\n if (obj instanceof Node) {\n selectorModel.nodes[0] = obj;\n }\n else {\n selectorModel.connectors[0] = obj;\n }\n selectorModel.annotation = (this.findTarget(textWrapper, obj));\n selectorModel.init(this.diagram);\n this.diagram.renderSelector(false);\n };\n /** @private */\n CommandHandler.prototype.unSelect = function (obj) {\n var objArray = [];\n objArray.push(obj);\n var arg = {\n oldValue: objArray, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changing', type: 'Removal', cancel: false\n };\n if (!this.diagram.currentSymbol) {\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n if (isSelected(this.diagram, obj)) {\n var selectormodel = this.diagram.selectedItems;\n var index = void 0;\n if (obj instanceof Node) {\n index = selectormodel.nodes.indexOf(obj, 0);\n selectormodel.nodes.splice(index, 1);\n }\n else {\n index = selectormodel.connectors.indexOf(obj, 0);\n selectormodel.connectors.splice(index, 1);\n }\n arg = {\n oldValue: objArray, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changed', type: 'Removal', cancel: false\n };\n if (!arg.cancel) {\n index = selectormodel.wrapper.children.indexOf(obj.wrapper, 0);\n selectormodel.wrapper.children.splice(index, 1);\n this.diagram.updateSelector();\n if (!this.diagram.currentSymbol) {\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.getChildElements = function (child) {\n var children = [];\n for (var i = 0; i < child.length; i++) {\n var childNode = child[i];\n if (childNode.children && childNode.children.length > 0) {\n children.concat(this.getChildElements(childNode.children));\n }\n else {\n children.push(childNode.id);\n if (childNode instanceof TextElement) {\n children.push(childNode.id + '_text');\n }\n }\n }\n return children;\n };\n CommandHandler.prototype.moveSvgNode = function (nodeId, targetID) {\n var diagramDiv = getDiagramElement(targetID + '_groupElement', this.diagram.element.id);\n var backNode = getDiagramElement(nodeId + '_groupElement', this.diagram.element.id);\n diagramDiv.parentNode.insertBefore(backNode, diagramDiv);\n };\n /** @private */\n CommandHandler.prototype.sendLayerBackward = function (layerName) {\n var layer = this.getLayer(layerName);\n if (layer && layer.zIndex !== 0) {\n var index = layer.zIndex;\n if (this.diagram.mode === 'SVG') {\n var currentLayerObject = layer.objects;\n var targetObject = this.getLayer(this.diagram.layerZIndexTable[index - 1]).objects[0];\n if (targetObject) {\n for (var _i = 0, currentLayerObject_1 = currentLayerObject; _i < currentLayerObject_1.length; _i++) {\n var obj = currentLayerObject_1[_i];\n this.moveSvgNode(obj, targetObject);\n }\n }\n }\n var targetLayer = this.getLayer(this.diagram.layerZIndexTable[index - 1]);\n targetLayer.zIndex = targetLayer.zIndex + 1;\n layer.zIndex = layer.zIndex - 1;\n var temp = this.diagram.layerZIndexTable[index];\n this.diagram.layerZIndexTable[index] = this.diagram.layerZIndexTable[index - 1];\n this.diagram.layerZIndexTable[index - 1] = temp;\n if (this.diagram.mode === 'Canvas') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.bringLayerForward = function (layerName) {\n var layer = this.getLayer(layerName);\n if (layer && layer.zIndex < this.diagram.layers.length - 1) {\n var index = layer.zIndex;\n if (this.diagram.mode === 'SVG') {\n var targetObject = this.getLayer(this.diagram.layerZIndexTable[index + 1]).objects[0];\n var currentLayerObject = layer.objects;\n for (var _i = 0, currentLayerObject_2 = currentLayerObject; _i < currentLayerObject_2.length; _i++) {\n var obj = currentLayerObject_2[_i];\n if (targetObject) {\n this.moveSvgNode(targetObject, obj);\n }\n }\n }\n var targetLayer = this.getLayer(this.diagram.layerZIndexTable[index + 1]);\n targetLayer.zIndex = targetLayer.zIndex - 1;\n layer.zIndex = layer.zIndex + 1;\n var temp = this.diagram.layerZIndexTable[index];\n this.diagram.layerZIndexTable[index] = this.diagram.layerZIndexTable[index + 1];\n this.diagram.layerZIndexTable[index + 1] = temp;\n if (this.diagram.mode === 'Canvas') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.sendToBack = function () {\n if (hasSelection(this.diagram)) {\n var objectId = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var index = this.diagram.nameTable[objectId].zIndex;\n var layerNum = this.diagram.layers.indexOf(this.getObjectLayer(objectId));\n var zIndexTable = this.diagram.layers[layerNum].zIndexTable;\n for (var i = index; i > 0; i--) {\n if (zIndexTable[i]) {\n //When there are empty records in the zindex table\n if (!zIndexTable[i - 1]) {\n zIndexTable[i - 1] = zIndexTable[i];\n this.diagram.nameTable[zIndexTable[i - 1]].zIndex = i;\n delete zIndexTable[i];\n }\n else {\n //bringing the objects forward\n zIndexTable[i] = zIndexTable[i - 1];\n this.diagram.nameTable[zIndexTable[i]].zIndex = i;\n }\n }\n }\n zIndexTable[0] = this.diagram.nameTable[objectId].id;\n this.diagram.nameTable[objectId].zIndex = 0;\n if (this.diagram.mode === 'SVG') {\n var i = 1;\n var target = zIndexTable[i];\n while (!target && i < index) {\n target = zIndexTable[++i];\n }\n this.moveSvgNode(objectId, target);\n this.updateNativeNodeIndex(objectId);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.bringToFront = function () {\n if (hasSelection(this.diagram)) {\n var objectName = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var layerNum = this.diagram.layers.indexOf(this.getObjectLayer(objectName));\n var zIndexTable = this.diagram.layers[layerNum].zIndexTable;\n //find the maximum zIndex of the tabel\n var tabelLength = Number(Object.keys(zIndexTable).sort(function (a, b) { return Number(a) - Number(b); }).reverse()[0]);\n var index = this.diagram.nameTable[objectName].zIndex;\n for (var i = index; i < tabelLength; i++) {\n //When there are empty records in the zindex table\n if (zIndexTable[i]) {\n if (!zIndexTable[i + 1]) {\n zIndexTable[i + 1] = zIndexTable[i];\n this.diagram.nameTable[zIndexTable[i + 1]].zIndex = i;\n delete zIndexTable[i];\n }\n else {\n //bringing the objects backward\n zIndexTable[i] = zIndexTable[i + 1];\n this.diagram.nameTable[zIndexTable[i]].zIndex = i;\n }\n }\n }\n zIndexTable[tabelLength] = this.diagram.nameTable[objectName].id;\n this.diagram.nameTable[objectName].zIndex = tabelLength;\n if (this.diagram.mode === 'SVG') {\n var diagramLayer = this.diagram.diagramLayer;\n var child = this.getChildElements(this.diagram.nameTable[objectName].wrapper.children);\n var targerNodes = [];\n var element = getDiagramElement(objectName + '_groupElement', this.diagram.element.id);\n element.parentNode.removeChild(element);\n var nodes = this.diagram.selectedItems.nodes;\n if (nodes.length > 0 && (nodes[0].shape.type === 'Native' || nodes[0].shape.type === 'HTML')) {\n for (var j = 0; j < this.diagram.views.length; j++) {\n element = getDiagramElement(objectName + (nodes[0].shape.type === 'HTML' ? '_content_html_element' : '_content_groupElement'), this.diagram.views[j]);\n var lastChildNode = element.parentNode.lastChild;\n lastChildNode.parentNode.insertBefore(element, lastChildNode.nextSibling);\n }\n }\n var htmlLayer = getHTMLLayer(this.diagram.element.id);\n this.diagram.diagramRenderer.renderElement(this.diagram.nameTable[objectName].wrapper, diagramLayer, htmlLayer);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.sortByZIndex = function (nodeArray, sortID) {\n var id = sortID ? sortID : 'zIndex';\n nodeArray = nodeArray.sort(function (a, b) {\n return a[id] - b[id];\n });\n return nodeArray;\n };\n /** @private */\n CommandHandler.prototype.sendForward = function () {\n if (hasSelection(this.diagram)) {\n var nodeId = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var layerIndex = this.diagram.layers.indexOf(this.getObjectLayer(nodeId));\n var zIndexTable = this.diagram.layers[layerIndex].zIndexTable;\n var tabelLength = Object.keys(zIndexTable).length;\n var index = this.diagram.nameTable[nodeId];\n var intersectArray = [];\n var temp = this.diagram.spatialSearch.findObjects(index.wrapper.bounds);\n if (temp.length > 2) {\n temp = this.sortByZIndex(temp);\n }\n for (var _i = 0, temp_1 = temp; _i < temp_1.length; _i++) {\n var i = temp_1[_i];\n if (index.id !== i.id) {\n var currentLayer = this.getObjectLayer(i.id).zIndex;\n if (layerIndex === currentLayer && (Number(this.diagram.nameTable[nodeId].zIndex) < Number(i.zIndex)) &&\n index.wrapper.bounds.intersects(i.wrapper.bounds)) {\n intersectArray.push(i);\n break;\n }\n }\n }\n if (intersectArray.length > 0) {\n var overlapObject = intersectArray[0].zIndex;\n var currentObject = index.zIndex;\n var temp_2 = zIndexTable[overlapObject];\n //swap the nodes\n this.diagram.layers[0].zIndexTable[overlapObject] = index.id;\n this.diagram.nameTable[zIndexTable[overlapObject]].zIndex = overlapObject;\n this.diagram.layers[0].zIndexTable[currentObject] = intersectArray[0].id;\n this.diagram.nameTable[zIndexTable[currentObject]].zIndex = currentObject;\n if (this.diagram.mode === 'SVG') {\n this.moveSvgNode(zIndexTable[Number(intersectArray[0].zIndex)], nodeId);\n this.updateNativeNodeIndex(zIndexTable[Number(intersectArray[0].zIndex)], nodeId);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.sendBackward = function () {\n if (hasSelection(this.diagram)) {\n var objectId = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var layerNum = this.diagram.layers.indexOf(this.getObjectLayer(objectId));\n var zIndexTable = this.diagram.layers[layerNum].zIndexTable;\n var tabelLength = Object.keys(zIndexTable).length;\n var node = this.diagram.nameTable[objectId];\n var intersectArray = [];\n var temp = this.diagram.spatialSearch.findObjects(node.wrapper.bounds);\n if (temp.length > 2) {\n temp = this.sortByZIndex(temp);\n }\n for (var _i = 0, temp_3 = temp; _i < temp_3.length; _i++) {\n var i = temp_3[_i];\n if (node.id !== i.id) {\n var currentLayer = this.getObjectLayer(i.id).zIndex;\n if (layerNum === currentLayer && (Number(this.diagram.nameTable[objectId].zIndex) > Number(i.zIndex)) &&\n node.wrapper.bounds.intersects(i.wrapper.bounds)) {\n intersectArray.push(i);\n }\n }\n }\n if (intersectArray.length > 0) {\n var overlapObject = intersectArray[intersectArray.length - 1].zIndex;\n var currentObject = node.zIndex;\n var temp_4 = zIndexTable[overlapObject];\n //swap the nodes\n zIndexTable[overlapObject] = node.id;\n this.diagram.nameTable[zIndexTable[overlapObject]].zIndex = overlapObject;\n zIndexTable[currentObject] = intersectArray[intersectArray.length - 1].id;\n this.diagram.nameTable[zIndexTable[currentObject]].zIndex = currentObject;\n if (this.diagram.mode === 'SVG') {\n this.moveSvgNode(objectId, zIndexTable[intersectArray[intersectArray.length - 1].zIndex]);\n this.updateNativeNodeIndex(objectId, zIndexTable[intersectArray[intersectArray.length - 1].zIndex]);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n }\n };\n CommandHandler.prototype.updateNativeNodeIndex = function (nodeId, targetID) {\n var nodes = this.diagram.selectedItems.nodes;\n for (var i = 0; i < this.diagram.views.length; i++) {\n if (nodes.length > 0\n && (nodes[0].shape.type === 'HTML'\n || nodes[0].shape.type === 'Native')) {\n var id = nodes[0].shape.type === 'HTML' ? '_content_html_element' : '_content_groupElement';\n var backNode = getDiagramElement(nodeId + id, this.diagram.views[i]);\n var diagramDiv = targetID ? getDiagramElement(targetID + id, this.diagram.views[i])\n : backNode.parentElement.firstChild;\n diagramDiv.parentNode.insertBefore(backNode, diagramDiv);\n }\n }\n };\n CommandHandler.prototype.initSelectorWrapper = function () {\n var selectorModel = this.diagram.selectedItems;\n selectorModel.init(this.diagram);\n if (selectorModel.nodes.length === 1 && selectorModel.connectors.length === 0) {\n selectorModel.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.pivot = selectorModel.nodes[0].pivot;\n }\n };\n /** @private */\n CommandHandler.prototype.doRubberBandSelection = function (region) {\n this.clearSelectionRectangle();\n this.clearSelection();\n var selArray = [];\n var rubberArray = [];\n selArray = this.diagram.getNodesConnectors(selArray);\n if (this.diagram.selectedItems.rubberBandSelectionMode === 'CompleteIntersect') {\n rubberArray = completeRegion(region, selArray);\n }\n else {\n rubberArray = this.diagram.spatialSearch.findObjects(region);\n }\n if (rubberArray.length) {\n this.selectObjects(rubberArray, true);\n }\n };\n CommandHandler.prototype.clearSelectionRectangle = function () {\n var adornerSvg = getAdornerLayerSvg(this.diagram.element.id);\n var element = adornerSvg.getElementById(this.diagram.element.id + '_diagramAdorner_selected_region');\n if (element) {\n remove(element);\n }\n };\n /** @private */\n CommandHandler.prototype.dragConnectorEnds = function (endPoint, obj, point, segment, target, targetPortId) {\n var selectorModel;\n var connector;\n var node;\n var tx;\n var segmentPoint;\n var ty;\n var index;\n var checkBezierThumb = false;\n if (obj instanceof Selector) {\n selectorModel = obj;\n connector = selectorModel.connectors[0];\n }\n else if (obj instanceof Connector && this.diagram.currentDrawingObject) {\n this.clearSelection();\n connector = this.diagram.currentDrawingObject;\n }\n if (endPoint === 'BezierSourceThumb' || endPoint === 'BezierTargetThumb') {\n checkBezierThumb = true;\n }\n if (endPoint === 'ConnectorSourceEnd' || endPoint === 'BezierSourceThumb') {\n tx = point.x - (checkBezierThumb ? segment.bezierPoint1.x : connector.sourcePoint.x);\n ty = point.y - (checkBezierThumb ? segment.bezierPoint1.y : connector.sourcePoint.y);\n return this.dragSourceEnd(connector, tx, ty, null, point, endPoint, undefined, target, targetPortId, undefined, segment);\n }\n else {\n tx = point.x - (checkBezierThumb ? segment.bezierPoint2.x : connector.targetPoint.x);\n ty = point.y - (checkBezierThumb ? segment.bezierPoint2.y : connector.targetPoint.y);\n return this.dragTargetEnd(connector, tx, ty, null, point, endPoint, undefined, segment);\n }\n };\n CommandHandler.prototype.getSelectedObject = function () {\n var selectormodel = this.diagram.selectedItems;\n return (selectormodel.nodes).concat(selectormodel.connectors);\n };\n /** @private */\n CommandHandler.prototype.clearSelection = function (triggerAction) {\n if (hasSelection(this.diagram)) {\n var selectormodel = this.diagram.selectedItems;\n var arrayNodes = this.getSelectedObject();\n var arg = {\n oldValue: arrayNodes, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changing', type: 'Removal', cancel: false\n };\n if (triggerAction) {\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n if (!arg.cancel) {\n selectormodel.offsetX = 0;\n selectormodel.offsetY = 0;\n selectormodel.width = 0;\n selectormodel.height = 0;\n selectormodel.rotateAngle = 0;\n selectormodel.nodes = [];\n selectormodel.connectors = [];\n selectormodel.wrapper = null;\n selectormodel.annotation = undefined;\n this.diagram.clearSelectorLayer();\n if (triggerAction) {\n arg = {\n oldValue: arrayNodes, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changed', type: 'Removal', cancel: false\n };\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.drag = function (obj, tx, ty) {\n var tempNode;\n var elements = [];\n if (canMove(obj) && this.checkBoundaryConstraints(tx, ty, obj.wrapper.bounds) && canPageEditable(this.diagram)) {\n if (obj instanceof Node) {\n var oldValues = { offsetX: obj.offsetX, offsetY: obj.offsetY };\n obj.offsetX += tx;\n obj.offsetY += ty;\n if (obj.children) {\n var nodes = this.getAllDescendants(obj, elements);\n for (var i = 0; i < nodes.length; i++) {\n tempNode = (this.diagram.nameTable[nodes[i].id]);\n this.drag(tempNode, tx, ty);\n }\n this.updateInnerParentProperties(obj);\n }\n this.diagram.nodePropertyChange(obj, oldValues, { offsetX: obj.offsetX, offsetY: obj.offsetY });\n }\n else {\n var connector = obj;\n var update = connector.type === 'Bezier' ? true : false;\n var hasEnds = false;\n if (!connector.sourceWrapper) {\n this.dragSourceEnd(connector, tx, ty, true, null, '', update);\n }\n else {\n hasEnds = true;\n }\n if (!connector.targetWrapper) {\n this.dragTargetEnd(connector, tx, ty, true, null, '', update);\n }\n else {\n hasEnds = true;\n }\n if (!hasEnds) {\n this.dragControlPoint(connector, tx, ty, true);\n var conn = { sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint };\n this.diagram.connectorPropertyChange(connector, {}, conn);\n }\n }\n }\n };\n CommandHandler.prototype.connectorSegmentChange = function (actualObject, existingInnerBounds, isRotate) {\n var tx;\n var ty;\n var segmentChange = true;\n if (existingInnerBounds.equals(existingInnerBounds, actualObject.wrapper.bounds) === false) {\n if (actualObject.outEdges.length > 0) {\n for (var k = 0; k < actualObject.outEdges.length; k++) {\n var connector = this.diagram.nameTable[actualObject.outEdges[k]];\n if (connector.targetID !== '') {\n segmentChange = this.isSelected(this.diagram.nameTable[connector.targetID]) ? false : true;\n }\n else {\n segmentChange = this.isSelected(this.diagram.nameTable[connector.id]) ? false : true;\n }\n if (connector.type === 'Orthogonal' && connector.segments && connector.segments.length > 1) {\n if (!isRotate) {\n if (segmentChange) {\n switch (connector.segments[0].direction) {\n case 'Bottom':\n tx = actualObject.wrapper.bounds.bottomCenter.x - existingInnerBounds.bottomCenter.x;\n ty = actualObject.wrapper.bounds.bottomCenter.y - existingInnerBounds.bottomCenter.y;\n break;\n case 'Top':\n tx = actualObject.wrapper.bounds.topCenter.x - existingInnerBounds.topCenter.x;\n ty = actualObject.wrapper.bounds.topCenter.y - existingInnerBounds.topCenter.y;\n break;\n case 'Left':\n tx = actualObject.wrapper.bounds.middleLeft.x - existingInnerBounds.middleLeft.x;\n ty = actualObject.wrapper.bounds.middleLeft.y - existingInnerBounds.middleLeft.y;\n break;\n case 'Right':\n tx = actualObject.wrapper.bounds.middleRight.x - existingInnerBounds.middleRight.x;\n ty = actualObject.wrapper.bounds.middleRight.y - existingInnerBounds.middleRight.y;\n break;\n }\n this.dragSourceEnd(connector, tx, ty, true, null, 'ConnectorSourceEnd', undefined, undefined, undefined, true);\n }\n }\n else {\n var firstSegment = connector.segments[0];\n var secondSegment = connector.segments[1];\n var cornerPoints = swapBounds(actualObject.wrapper, actualObject.wrapper.corners, actualObject.wrapper.bounds);\n var sourcePoint = findPoint(cornerPoints, firstSegment.direction);\n sourcePoint = getIntersection(connector, connector.sourceWrapper, sourcePoint, { x: connector.sourceWrapper.offsetX, y: connector.sourceWrapper.offsetY }, false);\n var source = {\n corners: undefined, point: sourcePoint, margin: undefined, direction: firstSegment.direction\n };\n var target = {\n corners: undefined, point: secondSegment.points[1], margin: undefined, direction: undefined\n };\n var intermediatePoints = orthoConnection2Segment(source, target);\n firstSegment.length = Point.distancePoints(intermediatePoints[0], intermediatePoints[1]);\n if (secondSegment.direction && secondSegment.length) {\n secondSegment.length = Point.distancePoints(intermediatePoints[1], intermediatePoints[2]);\n }\n }\n }\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.updateEndPoint = function (connector) {\n var conn = {\n sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint,\n sourceID: connector.sourceID ? connector.sourceID : undefined,\n targetID: connector.targetID ? connector.targetID : undefined,\n sourcePortID: connector.sourcePortID ? connector.sourcePortID : undefined,\n targetPortID: connector.targetPortID ? connector.targetPortID : undefined,\n segments: connector.segments ? connector.segments : undefined\n };\n this.diagram.connectorPropertyChange(connector, {}, conn);\n // this.diagram.refreshDiagramLayer();\n this.diagram.updateSelector();\n };\n /** @private */\n CommandHandler.prototype.dragSourceEnd = function (obj, tx, ty, preventUpdate, point, endPoint, update, target, targetPortId, isDragSource, segment) {\n var connector = this.diagram.nameTable[obj.id];\n var checkBoundaryConstraints = this.checkBoundaryConstraints(tx, ty, connector.wrapper.bounds);\n if (canDragSourceEnd(connector) && checkBoundaryConstraints\n && (endPoint !== 'BezierSourceThumb') && canPageEditable(this.diagram)) {\n connector.sourcePoint.x += tx;\n connector.sourcePoint.y += ty;\n if (endPoint === 'ConnectorSourceEnd' && connector.type === 'Orthogonal') {\n this.changeSegmentLength(connector, target, targetPortId, isDragSource);\n }\n }\n if (connector.type === 'Bezier') {\n if (segment) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorSourceEnd' : endPoint, tx, ty, segment, point, !update);\n }\n else {\n for (var i = 0; i < obj.segments.length; i++) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorSourceEnd' : endPoint, tx, ty, obj.segments[i], point, !update);\n }\n }\n }\n if (!preventUpdate) {\n this.updateEndPoint(connector);\n }\n return checkBoundaryConstraints;\n };\n /**\n * Upadte the connector segments when change the source node\n */\n CommandHandler.prototype.changeSegmentLength = function (connector, target, targetPortId, isDragSource) {\n if (connector.segments && connector.segments[0].direction !== null\n && ((!target && connector.sourceID === '') || isDragSource)) {\n var first = connector.segments[0];\n var second = connector.segments[1];\n var node = this.diagram.nameTable[connector.sourceID];\n var secPoint = void 0;\n first.points[0] = connector.sourcePoint;\n if (first.direction === 'Top' || first.direction === 'Bottom') {\n first.points[first.points.length - 1].x = connector.sourcePoint.x;\n second.points[0].y = first.points[first.points.length - 1].y;\n }\n else {\n first.points[first.points.length - 1].y = connector.sourcePoint.y;\n second.points[0].x = first.points[first.points.length - 1].x;\n }\n if (first.direction && (first.length || first.length === 0)) {\n first.length = Point.distancePoints(first.points[0], first.points[first.points.length - 1]);\n }\n if (second.direction && (second.length || second.length === 0)) {\n second.length = Point.distancePoints(first.points[first.points.length - 1], second.points[second.points.length - 1]);\n second.direction = Point.direction(first.points[first.points.length - 1], second.points[second.points.length - 1]);\n }\n if (connector.sourcePortID !== '' && first.length < 10) {\n if (connector.segments.length > 2) {\n var next = connector.segments[2];\n var nextDirection = Point.direction(next.points[0], next.points[1]);\n if (first.direction === getOppositeDirection(nextDirection)) {\n if (first.direction === 'Right') {\n next.points[0].x = first.points[first.points.length - 1].x = node.wrapper.corners.middleRight.x + 20;\n }\n else if (first.direction === 'Left') {\n next.points[0].x = first.points[first.points.length - 1].x = node.wrapper.corners.middleLeft.x - 20;\n }\n else if (first.direction === 'Top') {\n next.points[0].y = first.points[first.points.length - 1].y = node.wrapper.corners.topCenter.y - 20;\n }\n else {\n next.points[0].y = first.points[first.points.length - 1].y = node.wrapper.corners.bottomCenter.y + 20;\n }\n if (next.direction && next.length) {\n next.length = Point.distancePoints(next.points[0], next.points[next.points.length - 1]);\n }\n first.length = Point.distancePoints(first.points[0], first.points[first.points.length - 1]);\n }\n else if (first.direction === nextDirection && next.direction && next.length) {\n if (first.direction === 'Top' || first.direction === 'Bottom') {\n next.points[0] = first.points[0];\n next.points[next.points.length - 1].x = next.points[0].x;\n }\n else {\n next.points[0] = first.points[0];\n next.points[next.points.length - 1].y = next.points[0].y;\n }\n next.length = Point.distancePoints(next.points[0], next.points[next.points.length - 1]);\n connector.segments.splice(0, 2);\n }\n else {\n first.length = 20;\n }\n }\n else {\n first.length = 20;\n }\n }\n else if (first.length < 1) {\n if (connector.sourceID !== '') {\n if (second.direction === 'Right') {\n secPoint = node.wrapper.corners.middleRight;\n second.points[second.points.length - 1].y = secPoint.y;\n }\n else if (second.direction === 'Left') {\n secPoint = node.wrapper.corners.middleLeft;\n second.points[second.points.length - 1].y = secPoint.y;\n }\n else if (second.direction === 'Top') {\n secPoint = node.wrapper.corners.topCenter;\n second.points[second.points.length - 1].x = secPoint.x;\n }\n else {\n secPoint = node.wrapper.corners.bottomCenter;\n second.points[second.points.length - 1].x = secPoint.x;\n }\n second.length = Point.distancePoints(secPoint, second.points[second.points.length - 1]);\n if (connector.segments.length > 2) {\n var next = connector.segments[2];\n if (next.direction && next.length) {\n next.length = Point.distancePoints(second.points[second.points.length - 1], next.points[next.points.length - 1]);\n }\n }\n connector.segments.splice(0, 1);\n }\n else {\n connector.segments.splice(0, 1);\n }\n }\n }\n else {\n if (target && !targetPortId && connector.sourceID !== target.id &&\n connector.segments && connector.segments[0].direction !== null && target && target instanceof Node) {\n this.changeSourceEndToNode(connector, target);\n }\n if (target && targetPortId && connector.sourcePortID !== targetPortId &&\n connector.segments && connector.segments[0].direction !== null && target && target instanceof Node) {\n this.changeSourceEndToPort(connector, target, targetPortId);\n }\n }\n };\n /**\n * Change the connector endPoint to port\n */\n CommandHandler.prototype.changeSourceEndToPort = function (connector, target, targetPortId) {\n var port = this.diagram.getWrapper(target.wrapper, targetPortId);\n var point = { x: port.offsetX, y: port.offsetY };\n var direction = getPortDirection(point, cornersPointsBeforeRotation(target.wrapper), target.wrapper.bounds, false);\n var firstSegment = connector.segments[0];\n var secondSegment = connector.segments[1];\n if (firstSegment.direction !== direction) {\n var segments = [];\n var segValues = {};\n if (firstSegment.direction === getOppositeDirection(direction)) {\n segValues = {};\n var segValues1 = void 0;\n if (direction === 'Top' || direction === 'Bottom') {\n segValues1 = (direction === 'Top') ? {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(firstSegment.points[0].y - point.y)\n } :\n {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(point.y - firstSegment.points[0].y)\n };\n segValues = (firstSegment.points[0].x > point.x) ?\n { type: 'Orthogonal', isTerminal: true, direction: 'Right', length: (firstSegment.points[0].x - point.x) } :\n { type: 'Orthogonal', isTerminal: true, direction: 'Left', length: (point.x - firstSegment.points[0].x) };\n }\n else {\n segValues1 = (direction === 'Right') ? {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(firstSegment.points[0].x - point.x)\n } :\n {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(point.x - firstSegment.points[0].x)\n };\n segValues = (firstSegment.points[0].y > point.y) ?\n { type: 'Orthogonal', direction: 'Top', isTerminal: true, length: (firstSegment.points[0].y - point.y) } :\n { type: 'Orthogonal', direction: 'Bottom', isTerminal: true, length: (point.y - firstSegment.points[0].y) };\n }\n segments.push(new OrthogonalSegment(connector, 'segments', segValues1, true));\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n }\n else {\n segValues = { type: 'Orthogonal', direction: direction, length: 20, isTerminal: true };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n }\n if (firstSegment.direction !== getOppositeDirection(direction)) {\n if (direction === 'Top' || direction === 'Bottom') {\n firstSegment.points[0].x = point.x;\n firstSegment.points[0].y = firstSegment.points[firstSegment.points.length - 1].y = (direction === 'Top') ?\n point.y - 20 : point.y + 20;\n }\n else {\n firstSegment.points[0].y = point.y;\n firstSegment.points[0].x = firstSegment.points[firstSegment.points.length - 1].x = (direction === 'Right') ?\n point.x + 20 : point.x - 20;\n }\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n secondSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], secondSegment.points[secondSegment.points.length - 1]);\n }\n connector.segments = segments.concat(connector.segments);\n }\n else {\n firstSegment.points[0] = point;\n if (direction === 'Top' || direction === 'Bottom') {\n firstSegment.points[firstSegment.points.length - 1].x = point.x;\n }\n else {\n firstSegment.points[firstSegment.points.length - 1].y = point.y;\n }\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n secondSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], secondSegment.points[secondSegment.points.length - 1]);\n }\n };\n /**\n * @private\n * Remove terinal segment in initial\n */\n CommandHandler.prototype.removeTerminalSegment = function (connector, changeTerminal) {\n for (var i = 0; i < connector.segments.length - 2; i++) {\n var segment = connector.segments[0];\n if (segment.isTerminal) {\n if (changeTerminal) {\n segment.isTerminal = false;\n }\n else {\n connector.segments.splice(i, 1);\n i--;\n }\n }\n }\n };\n /**\n * Change the connector endPoint from point to node\n */\n CommandHandler.prototype.changeSourceEndToNode = function (connector, target) {\n this.removeTerminalSegment(connector);\n var sourceWrapper = target.wrapper.children[0].corners;\n var sourcePoint;\n var sourcePoint2;\n var firstSegment = connector.segments[0];\n var nextSegment = connector.segments[1];\n var segments = [];\n if (firstSegment.direction === 'Right' || firstSegment.direction === 'Left') {\n sourcePoint = (firstSegment.direction === 'Left') ? sourceWrapper.middleLeft : sourceWrapper.middleRight;\n if (firstSegment.length > sourceWrapper.width || ((firstSegment.direction === 'Left' &&\n sourcePoint.x >= firstSegment.points[0].x) || (firstSegment.direction === 'Right' &&\n sourcePoint.x <= firstSegment.points[0].x))) {\n firstSegment.points[0].y = firstSegment.points[firstSegment.points.length - 1].y = sourcePoint.y;\n firstSegment.points[0].x = sourcePoint.x;\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n nextSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], nextSegment.points[nextSegment.points.length - 1]);\n }\n else {\n var direction = void 0;\n if (nextSegment.direction) {\n direction = nextSegment.direction;\n }\n else {\n direction = Point.direction(nextSegment.points[0], nextSegment.points[nextSegment.points.length - 1]);\n }\n sourcePoint2 = (direction === 'Bottom') ? sourceWrapper.bottomCenter : sourceWrapper.topCenter;\n if (nextSegment.length && nextSegment.direction) {\n nextSegment.length =\n (direction === 'Top') ? firstSegment.points[firstSegment.points.length - 1].y - (sourcePoint2.y + 20) :\n (sourcePoint2.y + 20) - firstSegment.points[firstSegment.points.length - 1].y;\n }\n firstSegment.length = firstSegment.points[firstSegment.points.length - 1].x - sourcePoint2.x;\n firstSegment.direction = (firstSegment.length > 0) ? 'Right' : 'Left';\n var segValues = { type: 'Orthogonal', direction: direction, length: 20 };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n connector.segments = segments.concat(connector.segments);\n }\n }\n else {\n sourcePoint = (firstSegment.direction === 'Bottom') ? sourceWrapper.bottomCenter : sourceWrapper.topCenter;\n if (firstSegment.length > sourceWrapper.height || ((firstSegment.direction === 'Top' &&\n sourcePoint.y >= firstSegment.points[0].y) ||\n (firstSegment.direction === 'Bottom' && sourcePoint.y <= firstSegment.points[0].y))) {\n firstSegment.points[0].x = firstSegment.points[firstSegment.points.length - 1].x = sourcePoint.x;\n firstSegment.points[0].y = sourcePoint.y;\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n nextSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], nextSegment.points[nextSegment.points.length - 1]);\n }\n else {\n sourcePoint2 = (nextSegment.direction === 'Left') ? sourceWrapper.middleLeft : sourceWrapper.middleRight;\n var direction = void 0;\n if (nextSegment.direction) {\n direction = nextSegment.direction;\n }\n else {\n direction = Point.direction(nextSegment.points[0], nextSegment.points[nextSegment.points.length - 1]);\n }\n if (nextSegment.length && nextSegment.direction) {\n nextSegment.length =\n (direction === 'Left') ? firstSegment.points[firstSegment.points.length - 1].x - (sourcePoint2.x + 20) :\n (sourcePoint2.x + 20) - firstSegment.points[firstSegment.points.length - 1].x;\n }\n firstSegment.length = firstSegment.points[firstSegment.points.length - 1].y - sourcePoint2.y;\n firstSegment.direction = (firstSegment.length > 0) ? 'Bottom' : 'Top';\n var segValues = { type: 'Orthogonal', direction: direction, length: 20 };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n connector.segments = segments.concat(connector.segments);\n }\n }\n };\n /**\n * Translate the bezier points during the interaction\n */\n CommandHandler.prototype.translateBezierPoints = function (connector, value, tx, ty, seg, point, update) {\n var index = (connector.segments.indexOf(seg));\n var segment = connector.segments[index];\n if (segment) {\n if (value === 'BezierSourceThumb' && (segment.vector1.angle || segment.vector1.distance)) {\n segment.vector1 = {\n distance: connector.distance(connector.sourcePoint, point),\n angle: Point.findAngle(connector.sourcePoint, point),\n };\n }\n else if (value === 'BezierTargetThumb' && (segment.vector2.angle || segment.vector2.distance)) {\n segment.vector2 = {\n distance: connector.distance(connector.targetPoint, point),\n angle: Point.findAngle(connector.targetPoint, point),\n };\n }\n else if ((value === 'ConnectorSourceEnd' && !connector.sourceID || value === 'ConnectorTargetEnd' && !connector.targetID)\n && update && isEmptyVector(segment.vector1) && isEmptyVector(segment.vector2)) {\n if (Point.isEmptyPoint(segment.point1)) {\n segment.bezierPoint1 = getBezierPoints(connector.sourcePoint, connector.targetPoint);\n }\n if (Point.isEmptyPoint(segment.point2)) {\n segment.bezierPoint2 = getBezierPoints(connector.targetPoint, connector.sourcePoint);\n }\n }\n else if (value === 'BezierSourceThumb' || (value === 'ConnectorSourceEnd' && !update && isEmptyVector(segment.vector1))) {\n segment.bezierPoint1.x += tx;\n segment.bezierPoint1.y += ty;\n if ((!Point.isEmptyPoint(segment.point1)) || (update)) {\n segment.point1 = { x: segment.bezierPoint1.x, y: segment.bezierPoint1.y };\n }\n }\n else if (value === 'BezierTargetThumb' || (value === 'ConnectorTargetEnd' && !update && isEmptyVector(segment.vector2))) {\n segment.bezierPoint2.x += tx;\n segment.bezierPoint2.y += ty;\n if ((!Point.isEmptyPoint(segment.point2)) || (update)) {\n segment.point2 = { x: segment.bezierPoint2.x, y: segment.bezierPoint2.y };\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.dragTargetEnd = function (obj, tx, ty, preventUpdate, point, endPoint, update, segment) {\n var connector = this.diagram.nameTable[obj.id];\n var boundaryConstraints = this.checkBoundaryConstraints(tx, ty, connector.wrapper.bounds);\n if (canDragTargetEnd(connector) && endPoint !== 'BezierTargetThumb'\n && boundaryConstraints && canPageEditable(this.diagram)) {\n connector.targetPoint.x += tx;\n connector.targetPoint.y += ty;\n if (endPoint === 'ConnectorTargetEnd' && connector.type === 'Orthogonal' &&\n connector.segments && connector.segments.length > 0) {\n var prev = connector.segments[connector.segments.length - 2];\n if (prev && connector.segments[connector.segments.length - 1].points.length === 2) {\n if (prev.direction === 'Left' || prev.direction === 'Right') {\n prev.points[prev.points.length - 1].x = connector.targetPoint.x;\n }\n else {\n prev.points[prev.points.length - 1].y = connector.targetPoint.y;\n }\n prev.length = Point.distancePoints(prev.points[0], prev.points[prev.points.length - 1]);\n prev.direction = Point.direction(prev.points[0], prev.points[prev.points.length - 1]);\n }\n }\n }\n if (connector.type === 'Bezier') {\n if (segment) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorTargetEnd' : endPoint, tx, ty, segment, point, !update);\n }\n else {\n for (var i = 0; i < obj.segments.length; i++) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorTargetEnd' : endPoint, tx, ty, obj.segments[i], point, !update);\n }\n }\n }\n if (!preventUpdate) {\n this.updateEndPoint(connector);\n }\n return boundaryConstraints;\n };\n /** @private */\n CommandHandler.prototype.dragControlPoint = function (obj, tx, ty, preventUpdate, segmentNumber) {\n var connector = this.diagram.nameTable[obj.id];\n if ((connector.type === 'Straight' || connector.type === 'Bezier') && connector.segments.length > 0) {\n if (segmentNumber !== undefined && connector.segments[segmentNumber]) {\n connector.segments[segmentNumber].point.x += tx;\n connector.segments[segmentNumber].point.y += ty;\n }\n else {\n for (var i = 0; i < connector.segments.length - 1; i++) {\n connector.segments[i].point.x += tx;\n connector.segments[i].point.y += ty;\n }\n }\n if (!preventUpdate) {\n this.updateEndPoint(connector);\n }\n }\n return true;\n };\n /** @private */\n CommandHandler.prototype.rotateObjects = function (parent, objects, angle, pivot, includeParent) {\n pivot = pivot || {};\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, pivot.x, pivot.y);\n for (var _i = 0, objects_2 = objects; _i < objects_2.length; _i++) {\n var obj = objects_2[_i];\n if (obj instanceof Node) {\n if (canRotate(obj) && canPageEditable(this.diagram)) {\n if (includeParent !== false || parent !== obj) {\n obj.rotateAngle += angle;\n obj.rotateAngle = (obj.rotateAngle + 360) % 360;\n var newOffset = transformPointByMatrix(matrix, { x: obj.offsetX, y: obj.offsetY });\n obj.offsetX = newOffset.x;\n obj.offsetY = newOffset.y;\n this.diagram.nodePropertyChange(obj, {}, { offsetX: obj.offsetX, offsetY: obj.offsetY, rotateAngle: obj.rotateAngle });\n }\n if (obj.processId) {\n var parent_1 = this.diagram.nameTable[obj.processId];\n var bound = this.diagram.bpmnModule.getChildrenBound(parent_1, obj.id, this.diagram);\n this.diagram.bpmnModule.updateSubProcessess(bound, obj, this.diagram);\n }\n if (obj.children && obj.children.length) {\n this.getChildren(obj, objects);\n }\n }\n }\n else {\n this.rotatePoints(obj, angle, pivot || { x: obj.wrapper.offsetX, y: obj.wrapper.offsetY });\n }\n this.diagram.updateDiagramObject(obj);\n }\n this.diagram.updateSelector();\n };\n /** @private */\n CommandHandler.prototype.snapConnectorEnd = function (currentPosition) {\n if ((this.diagram.snapSettings.constraints & SnapConstraints.SnapToLines)\n && this.snappingModule) {\n this.diagram.snappingModule.snapConnectorEnd(currentPosition);\n }\n return currentPosition;\n };\n CommandHandler.prototype.snapAngle = function (angle) {\n if ((this.diagram.snapSettings.constraints & SnapConstraints.SnapToLines)\n && this.snappingModule) {\n return this.snappingModule.snapAngle(this.diagram, angle);\n }\n else {\n return 0;\n }\n };\n CommandHandler.prototype.rotatePoints = function (conn, angle, pivot) {\n if (!conn.sourceWrapper || !conn.targetWrapper) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, pivot.x, pivot.y);\n conn.sourcePoint = transformPointByMatrix(matrix, conn.sourcePoint);\n conn.targetPoint = transformPointByMatrix(matrix, conn.targetPoint);\n var newProp = { sourcePoint: conn.sourcePoint, targetPoint: conn.targetPoint };\n this.diagram.connectorPropertyChange(conn, {}, newProp);\n }\n };\n CommandHandler.prototype.updateInnerParentProperties = function (tempNode) {\n var elements = [];\n var protect = 'isProtectedOnChange';\n var protectChange = this.diagram[protect];\n this.diagram.protectPropertyChange(true);\n var innerParents = this.getAllDescendants(tempNode, elements, false, true);\n for (var i = 0; i < innerParents.length; i++) {\n var obj = this.diagram.nameTable[innerParents[i].id];\n obj.offsetX = obj.wrapper.offsetX;\n obj.offsetY = obj.wrapper.offsetY;\n obj.width = obj.wrapper.width;\n obj.height = obj.wrapper.height;\n }\n this.diagram.protectPropertyChange(protectChange);\n };\n /** @private */\n CommandHandler.prototype.scale = function (obj, sw, sh, pivot, refObject) {\n var node = this.diagram.nameTable[obj.id];\n var tempNode = node;\n var elements = [];\n var element = node.wrapper;\n if (!refObject) {\n refObject = obj;\n }\n var refWrapper = refObject.wrapper;\n var x = refWrapper.offsetX - refWrapper.actualSize.width * refWrapper.pivot.x;\n var y = refWrapper.offsetY - refWrapper.actualSize.height * refWrapper.pivot.y;\n var refPoint = getPoint(x, y, refWrapper.actualSize.width, refWrapper.actualSize.height, refWrapper.rotateAngle, refWrapper.offsetX, refWrapper.offsetY, pivot);\n if (element.actualSize.width !== undefined && element.actualSize.height !== undefined && canPageEditable(this.diagram)) {\n if (tempNode.children) {\n var nodes = this.getAllDescendants(tempNode, elements);\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var temp = nodes_1[_i];\n this.scaleObject(sw, sh, refPoint, temp, element, refObject);\n }\n obj.wrapper.measure(new Size());\n obj.wrapper.arrange(obj.wrapper.desiredSize);\n this.diagram.updateGroupOffset(node);\n this.updateInnerParentProperties(tempNode);\n }\n else {\n this.scaleObject(sw, sh, refPoint, node, element, refObject);\n }\n var bounds = getBounds(obj.wrapper);\n var checkBoundaryConstraints = this.checkBoundaryConstraints(undefined, undefined, bounds);\n if (!checkBoundaryConstraints) {\n this.scale(obj, 1 / sw, 1 / sh, pivot);\n return false;\n }\n this.diagram.updateDiagramObject(obj);\n }\n return true;\n };\n /** @private */\n CommandHandler.prototype.getAllDescendants = function (node, nodes, includeParent, innerParent) {\n var temp = node;\n var parentNodes = [];\n for (var i = 0; i < temp.children.length; i++) {\n node = (this.diagram.nameTable[temp.children[i]]);\n if (node) {\n if (!node.children) {\n nodes.push(node);\n }\n else {\n if (includeParent) {\n nodes.push(node);\n }\n if (innerParent) {\n parentNodes.push(node);\n }\n nodes = this.getAllDescendants(node, nodes);\n }\n }\n }\n return (innerParent) ? parentNodes : nodes;\n };\n CommandHandler.prototype.getChildren = function (node, nodes) {\n var temp = node;\n if (node.children) {\n for (var i = 0; i < temp.children.length; i++) {\n node = (this.diagram.nameTable[temp.children[i]]);\n nodes.push(node);\n }\n }\n return nodes;\n };\n /** @private */\n CommandHandler.prototype.cloneChild = function (id) {\n var node = this.diagram.nameTable[id];\n return node;\n };\n /** @private */\n CommandHandler.prototype.scaleObject = function (sw, sh, pivot, obj, element, refObject) {\n sw = sw < 0 ? 1 : sw;\n sh = sh < 0 ? 1 : sh;\n var process;\n var oldValues = {\n offsetX: obj.wrapper.offsetX, offsetY: obj.wrapper.offsetY,\n width: obj.wrapper.actualSize.width, height: obj.wrapper.actualSize.height\n };\n if (sw !== 1 || sh !== 1) {\n var width = void 0;\n var height = void 0;\n if (obj instanceof Node) {\n var node = obj;\n var isResize = void 0;\n var bound = void 0;\n if (node.shape.type === 'Bpmn' && node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length > 0) {\n bound = this.diagram.bpmnModule.getChildrenBound(node, node.id, this.diagram);\n isResize = node.wrapper.bounds.containsRect(bound);\n }\n width = node.wrapper.actualSize.width * sw;\n height = node.wrapper.actualSize.height * sh;\n if (node.maxWidth !== undefined && node.maxWidth !== 0) {\n width = Math.min(node.maxWidth, width);\n }\n if (node.minWidth !== undefined && node.minWidth !== 0) {\n width = Math.max(node.minWidth, width);\n }\n if (node.maxHeight !== undefined && node.maxHeight !== 0) {\n height = Math.min(node.maxHeight, height);\n }\n if (node.minHeight !== undefined && node.minHeight !== 0) {\n height = Math.max(node.minHeight, height);\n }\n if (isResize) {\n width = Math.max(width, (bound.right - node.wrapper.bounds.x));\n height = Math.max(height, (bound.bottom - node.wrapper.bounds.y));\n }\n sw = width / node.actualSize.width;\n sh = height / node.actualSize.height;\n }\n var matrix = identityMatrix();\n var refWrapper = void 0;\n if (!refObject) {\n refObject = obj;\n }\n refWrapper = refObject.wrapper;\n rotateMatrix(matrix, -refWrapper.rotateAngle, pivot.x, pivot.y);\n scaleMatrix(matrix, sw, sh, pivot.x, pivot.y);\n rotateMatrix(matrix, refWrapper.rotateAngle, pivot.x, pivot.y);\n if (obj instanceof Node) {\n var node = obj;\n var left = void 0;\n var top_1;\n var newPosition = transformPointByMatrix(matrix, { x: node.wrapper.offsetX, y: node.wrapper.offsetY });\n var oldleft = node.wrapper.offsetX - node.wrapper.actualSize.width * node.pivot.x;\n var oldtop = node.wrapper.offsetY - node.wrapper.actualSize.height * node.pivot.y;\n if (width > 0) {\n if (node.processId) {\n var parent_2 = this.diagram.nameTable[node.processId];\n if (!parent_2.maxWidth || ((node.margin.left + width) < parent_2.maxWidth)) {\n node.width = width;\n node.offsetX = newPosition.x;\n }\n }\n else {\n node.width = width;\n node.offsetX = newPosition.x;\n }\n }\n if (height > 0) {\n if (node.processId) {\n var parent_3 = this.diagram.nameTable[node.processId];\n if (!parent_3.maxHeight || ((node.margin.top + height) < parent_3.maxHeight)) {\n node.height = height;\n node.offsetY = newPosition.y;\n }\n }\n else {\n node.height = height;\n node.offsetY = newPosition.y;\n }\n }\n left = node.wrapper.offsetX - node.wrapper.actualSize.width * node.pivot.x;\n top_1 = node.wrapper.offsetY - node.wrapper.actualSize.height * node.pivot.y;\n var parent_4 = this.diagram.nameTable[node.processId];\n if (parent_4 && ((node.margin.top + (top_1 - oldtop)) <= 0 ||\n (node.margin.left + (left - oldleft) <= 0))) {\n this.diagram.nodePropertyChange(obj, {}, {\n margin: { top: node.margin.top, left: node.margin.left }\n });\n }\n else {\n this.diagram.nodePropertyChange(obj, {}, {\n width: node.width, height: node.height, offsetX: node.offsetX,\n offsetY: node.offsetY, margin: { top: node.margin.top + (top_1 - oldtop), left: node.margin.left + (left - oldleft) }\n });\n }\n }\n else {\n var connector = obj;\n if (!connector.sourceWrapper || !connector.targetWrapper) {\n connector.sourcePoint = transformPointByMatrix(matrix, connector.sourcePoint);\n connector.targetPoint = transformPointByMatrix(matrix, connector.targetPoint);\n var newProp = { sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint };\n this.diagram.connectorPropertyChange(connector, {}, newProp);\n }\n }\n var parentNode = this.diagram.nameTable[obj.processId];\n if (parentNode) {\n var parent_5 = parentNode.wrapper.bounds;\n var child = obj.wrapper.bounds;\n var bound = this.diagram.bpmnModule.getChildrenBound(parentNode, obj.id, this.diagram);\n this.diagram.bpmnModule.updateSubProcessess(bound, obj, this.diagram);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.portDrag = function (obj, portElement, tx, ty) {\n var oldValues;\n var changedvalues;\n var port = this.findTarget(portElement, obj);\n var bounds = getBounds(obj.wrapper);\n if (port && canDrag(port, this.diagram)) {\n oldValues = this.getPortChanges(obj, port);\n port.offset.x += (tx / bounds.width);\n port.offset.y += (ty / bounds.height);\n changedvalues = this.getPortChanges(obj, port);\n this.diagram.nodePropertyChange(obj, oldValues, changedvalues);\n this.diagram.updateDiagramObject(obj);\n }\n };\n /** @private */\n CommandHandler.prototype.labelDrag = function (obj, textElement, tx, ty) {\n var oldValues;\n var changedvalues;\n var label;\n label = this.findTarget(textElement, obj);\n var bounds = cornersPointsBeforeRotation(obj.wrapper);\n oldValues = this.getAnnotationChanges(obj, label);\n if (label instanceof ShapeAnnotation) {\n label.offset.x += (tx / bounds.width);\n label.offset.y += (ty / bounds.height);\n }\n else {\n this.updatePathAnnotationOffset(obj, label, tx, ty);\n if (label instanceof PathAnnotation) {\n label.alignment = 'Center';\n }\n }\n changedvalues = this.getAnnotationChanges(obj, label);\n if (obj instanceof Node) {\n this.diagram.nodePropertyChange(obj, oldValues, changedvalues);\n }\n else {\n this.diagram.connectorPropertyChange(obj, oldValues, changedvalues);\n }\n this.diagram.updateDiagramObject(obj);\n if (!isSelected(this.diagram, label, false, textElement)) {\n this.labelSelect(obj, textElement);\n }\n };\n CommandHandler.prototype.updatePathAnnotationOffset = function (object, label, tx, ty, newPosition, size) {\n var textWrapper = this.diagram.getWrapper(object.wrapper, label.id);\n var offsetX = textWrapper.offsetX;\n var offsetY = textWrapper.offsetY;\n var offset;\n var intermediatePoints = object.intermediatePoints;\n var prev;\n var pointLength = 0;\n var totalLength = 0;\n var intersectingOffset;\n var currentPosition = (newPosition) ? newPosition : { x: offsetX + tx, y: offsetY + ty };\n var intersetingPts = this.getInterceptWithSegment(currentPosition, intermediatePoints);\n var newOffset = intermediatePoints[intermediatePoints.length - 1];\n totalLength = Point.getLengthFromListOfPoints(intermediatePoints);\n if (intersetingPts.length > 0) {\n intersectingOffset = intersetingPts[intersetingPts.length - 1];\n newOffset = intersectingOffset;\n if (newOffset) {\n var p = void 0;\n var bounds = void 0;\n for (p = 0; p < intermediatePoints.length; p++) {\n if (prev != null) {\n bounds = Rect.toBounds([prev, intermediatePoints[p]]);\n if (bounds.containsPoint(newOffset)) {\n pointLength += Point.findLength(prev, newOffset);\n break;\n }\n }\n prev = intermediatePoints[p];\n }\n offset = { x: pointLength / totalLength, y: 0 };\n }\n this.updateLabelMargin(object, label, offset, currentPosition, size);\n }\n else {\n this.updateLabelMargin(object, label, null, currentPosition, size);\n }\n };\n CommandHandler.prototype.updateLabelMargin = function (node, label, offset, tempPt, size) {\n offset = offset ? offset : { x: label.offset, y: 0 };\n if (label && offset && offset.x > 0 && offset.x < 1) {\n var point = void 0;\n var length_1 = Point.getLengthFromListOfPoints(node.intermediatePoints);\n point = this.getPointAtLength(length_1 * offset.x, node.intermediatePoints, 0);\n label.margin = { left: tempPt.x - point.x, top: tempPt.y - point.y, right: 0, bottom: 0 };\n label.offset = offset.x;\n if (size) {\n label.width = size.width;\n label.height = size.height;\n }\n }\n };\n CommandHandler.prototype.getPointAtLength = function (length, points, angle) {\n angle = 0;\n var run = 0;\n var pre;\n var found = { x: 0, y: 0 };\n var pt;\n for (var i = 0; i < points.length; i++) {\n pt = points[i];\n if (!pre) {\n pre = pt;\n continue;\n }\n else {\n var l = Point.findLength(pre, pt);\n var r = void 0;\n var deg = void 0;\n var x = void 0;\n var y = void 0;\n if (run + l >= length) {\n r = length - run;\n deg = Point.findAngle(pre, pt);\n x = r * Math.cos(deg * Math.PI / 180);\n y = r * Math.sin(deg * Math.PI / 180);\n found = { x: pre.x + x, y: pre.y + y };\n angle = deg;\n break;\n }\n else {\n run += l;\n }\n }\n pre = pt;\n }\n return found;\n };\n CommandHandler.prototype.getInterceptWithSegment = function (currentPosition, conPoints) {\n var intercepts = [];\n var imgLine = [];\n var segemnt = [];\n var tarAngle;\n var srcAngle;\n var maxLength;\n maxLength = Point.findLength({ x: 0, y: 0 }, { x: this.diagram.scroller.viewPortWidth, y: this.diagram.scroller.viewPortHeight });\n for (var i = 1; i < conPoints.length; i++) {\n segemnt = [conPoints[i - 1], conPoints[i]];\n imgLine = [];\n srcAngle = Math.round(Point.findAngle(segemnt[0], segemnt[1]) % 360);\n tarAngle = Math.round(Point.findAngle(segemnt[1], segemnt[0]) % 360);\n var angleAdd = (srcAngle > 0 && srcAngle <= 90) || (srcAngle > 180 && srcAngle <= 270) ? 90 : -90;\n imgLine.push(Point.transform(currentPosition, srcAngle + angleAdd, maxLength));\n imgLine.push(Point.transform(currentPosition, tarAngle + angleAdd, maxLength));\n var lineUtil1 = { x1: segemnt[0].x, y1: segemnt[0].y, x2: segemnt[1].x, y2: segemnt[1].y };\n var lineUtil2 = { x1: imgLine[0].x, y1: imgLine[0].y, x2: imgLine[1].x, y2: imgLine[1].y };\n var line3 = intersect3(lineUtil1, lineUtil2);\n if (line3.enabled) {\n intercepts.push(line3.intersectPt);\n }\n }\n return intercepts;\n };\n /** @private */\n CommandHandler.prototype.getAnnotationChanges = function (object, label) {\n var index = findObjectIndex(object, label.id, true);\n var annotations = {};\n annotations[index] = {\n width: label.width, height: label.height, offset: (object instanceof Node) ? ({\n x: label.offset.x,\n y: label.offset.y\n }) : label.offset,\n rotateAngle: label.rotateAngle,\n margin: { left: label.margin.left, right: label.margin.right, top: label.margin.top, bottom: label.margin.bottom },\n horizontalAlignment: label.horizontalAlignment, verticalAlignment: label.verticalAlignment,\n alignment: ((object instanceof Connector) ? label.alignment : undefined)\n };\n return { annotations: annotations };\n };\n /** @private */\n CommandHandler.prototype.getPortChanges = function (object, port) {\n var index = findObjectIndex(object, port.id, false);\n var ports = {};\n ports[index] = { offset: port.offset };\n return { ports: ports };\n };\n /** @private */\n CommandHandler.prototype.labelRotate = function (object, label, currentPosition, selector) {\n var oldValues;\n var changedvalues;\n oldValues = this.getAnnotationChanges(object, label);\n var matrix = identityMatrix();\n var rotateAngle = label.rotateAngle;\n var labelWrapper = this.diagram.getWrapper(object.wrapper, label.id);\n var angle = findAngle({ x: labelWrapper.offsetX, y: labelWrapper.offsetY }, currentPosition) + 90;\n var snapAngle = this.snapAngle(angle);\n angle = snapAngle !== 0 ? snapAngle : angle;\n if (label instanceof PathAnnotation && label.segmentAngle) {\n var getPointloop = getAnnotationPosition(object.intermediatePoints, label, object.wrapper.bounds);\n angle -= getPointloop.angle;\n }\n angle = (angle + 360) % 360;\n label.rotateAngle += angle - (label.rotateAngle + labelWrapper.parentTransform);\n label.margin.bottom += (labelWrapper.verticalAlignment === 'Top') ? (-label.height / 2) : ((labelWrapper.verticalAlignment === 'Bottom') ? (label.height / 2) : 0);\n label.margin.right += (labelWrapper.horizontalAlignment === 'Left') ? (-label.width / 2) : ((labelWrapper.horizontalAlignment === 'Right') ? (label.width / 2) : 0);\n if (label instanceof PathAnnotation) {\n label.alignment = 'Center';\n }\n else {\n label.horizontalAlignment = label.verticalAlignment = 'Center';\n }\n selector.wrapper.rotateAngle = selector.rotateAngle = label.rotateAngle;\n changedvalues = this.getAnnotationChanges(object, label);\n if (object instanceof Node) {\n this.diagram.nodePropertyChange(object, oldValues, changedvalues);\n }\n else {\n this.diagram.connectorPropertyChange(object, oldValues, changedvalues);\n }\n this.diagram.updateDiagramObject(object);\n };\n /** @private */\n CommandHandler.prototype.labelResize = function (node, label, deltaWidth, deltaHeight, pivot, selector) {\n var oldValues;\n var changedvalues;\n var rotateAngle;\n oldValues = this.getAnnotationChanges(node, label);\n var textElement = selector.wrapper.children[0];\n if ((deltaWidth && deltaWidth !== 1) || (deltaHeight && deltaHeight !== 1)) {\n var newMat = identityMatrix();\n var matrix = identityMatrix();\n rotateMatrix(newMat, -node.rotateAngle, node.offsetX, node.offsetY);\n rotateAngle = ((textElement.rotateAngle + ((node instanceof Node) ? node.rotateAngle : 0)) + 360) % 360;\n rotateMatrix(matrix, -rotateAngle, pivot.x, pivot.y);\n scaleMatrix(matrix, deltaWidth, deltaHeight, pivot.x, pivot.y);\n rotateMatrix(matrix, rotateAngle, pivot.x, pivot.y);\n var newPosition = transformPointByMatrix(matrix, { x: textElement.offsetX, y: textElement.offsetY });\n var height = textElement.actualSize.height * deltaHeight;\n var width = textElement.actualSize.width * deltaWidth;\n var shape = this.findTarget(textElement, node);\n if (shape instanceof PathAnnotation) {\n this.updatePathAnnotationOffset(node, label, 0, 0, newPosition, new Size(width, height));\n }\n else {\n var bounds = cornersPointsBeforeRotation(node.wrapper);\n newPosition = transformPointByMatrix(newMat, newPosition);\n newPosition.x = newPosition.x - textElement.margin.left + textElement.margin.right;\n newPosition.y = newPosition.y - textElement.margin.top + textElement.margin.bottom;\n newPosition.y += (shape.verticalAlignment === 'Top') ? (-height / 2) : ((shape.verticalAlignment === 'Bottom') ? (height / 2) : 0);\n newPosition.x += (shape.horizontalAlignment === 'Left') ? (-width / 2) : ((shape.horizontalAlignment === 'Right') ? (width / 2) : 0);\n var offsetx = bounds.width / (newPosition.x - bounds.x);\n var offsety = bounds.height / (newPosition.y - bounds.y);\n if (width > 1) {\n shape.width = width;\n shape.offset.x = 1 / offsetx;\n }\n if (height > 1) {\n shape.height = height;\n shape.offset.y = 1 / offsety;\n }\n }\n }\n if (label instanceof PathAnnotation) {\n label.alignment = 'Center';\n }\n changedvalues = this.getAnnotationChanges(node, label);\n if (node instanceof Node) {\n this.diagram.nodePropertyChange(node, oldValues, changedvalues);\n }\n else {\n this.diagram.connectorPropertyChange(node, oldValues, changedvalues);\n }\n this.diagram.updateDiagramObject(node);\n };\n /** @private */\n CommandHandler.prototype.getSubProcess = function (source) {\n var selector = { nodes: [], connectors: [] };\n var process;\n if (source instanceof Node) {\n process = source.processId;\n }\n else if (source && source.nodes && (source.nodes.length)\n && source.nodes[0].processId) {\n process = source.nodes[0].processId;\n }\n if (process) {\n selector.nodes.push(clone(this.diagram.nameTable[process]));\n return selector;\n }\n return selector;\n };\n CommandHandler.prototype.checkBoundaryConstraints = function (tx, ty, nodeBounds) {\n var pageSettings = this.diagram.pageSettings;\n var boundaryConstraints = this.diagram.pageSettings.boundaryConstraints;\n var scroller = this.diagram.scroller;\n if (boundaryConstraints === 'Page' || boundaryConstraints === 'Diagram') {\n var selectorBounds = !nodeBounds ? this.diagram.selectedItems.wrapper.bounds : undefined;\n var width = boundaryConstraints === 'Page' ? pageSettings.width : scroller.viewPortWidth;\n var height = boundaryConstraints === 'Page' ? pageSettings.height : scroller.viewPortHeight;\n var bounds = nodeBounds;\n var right = (nodeBounds ? bounds.right : selectorBounds.right) + (tx || 0);\n var left = (nodeBounds ? bounds.left : selectorBounds.left) + (tx || 0);\n var top_2 = (nodeBounds ? bounds.top : selectorBounds.top) + (ty || 0);\n var bottom = (nodeBounds ? bounds.bottom : selectorBounds.bottom) + (ty || 0);\n if (right <= width && left >= 0\n && bottom <= height && top_2 >= 0) {\n return true;\n }\n return false;\n }\n return true;\n };\n //interfaces\n /** @private */\n CommandHandler.prototype.dragSelectedObjects = function (tx, ty) {\n var obj = this.diagram.selectedItems;\n if (this.state && !this.state.backup) {\n this.state.backup = {};\n this.state.backup.offsetX = obj.offsetX;\n this.state.backup.offsetY = obj.offsetY;\n }\n if (this.checkBoundaryConstraints(tx, ty)) {\n this.diagram.drag(obj, tx, ty);\n return true;\n }\n return false;\n };\n /** @private */\n CommandHandler.prototype.scaleSelectedItems = function (sx, sy, pivot) {\n var obj = this.diagram.selectedItems;\n if (this.state && !this.state.backup) {\n this.state.backup = {};\n this.state.backup.offsetX = obj.offsetX;\n this.state.backup.offsetY = obj.offsetY;\n this.state.backup.width = obj.width;\n this.state.backup.height = obj.height;\n this.state.backup.pivot = pivot;\n }\n return this.diagram.scale(obj, sx, sy, pivot);\n };\n /** @private */\n CommandHandler.prototype.rotateSelectedItems = function (angle) {\n var obj = this.diagram.selectedItems;\n if (this.state && !this.state.backup) {\n this.state.backup = {};\n this.state.backup.angle = obj.rotateAngle;\n }\n return this.diagram.rotate(obj, angle);\n };\n /** @private */\n CommandHandler.prototype.hasSelection = function () {\n return hasSelection(this.diagram);\n };\n /** @private */\n CommandHandler.prototype.isSelected = function (element) {\n return isSelected(this.diagram, element);\n };\n /**\n * initExpand is used for layout expand and collapse interaction\n */\n CommandHandler.prototype.initExpand = function (args) {\n var node = (args.target || args.source);\n var oldValues = { isExpanded: node.isExpanded };\n node.isExpanded = !node.isExpanded;\n this.diagram.nodePropertyChange(node, oldValues, { isExpanded: node.isExpanded });\n };\n /** @private */\n CommandHandler.prototype.expandNode = function (node, diagram) {\n var animation;\n var objects;\n var expand = node.isExpanded;\n this.expandCollapse(node, expand, this.diagram);\n node.isExpanded = expand;\n this.diagram.layout.fixedNode = node.id;\n if (this.diagram.layoutAnimateModule && this.diagram.layout.enableAnimation) {\n this.diagram.organizationalChartModule.isAnimation = true;\n }\n this.diagram.preventNodesUpdate = true;\n this.diagram.preventConnectorsUpdate = true;\n objects = this.diagram.doLayout();\n this.diagram.preventNodesUpdate = false;\n this.diagram.preventConnectorsUpdate = false;\n if (this.diagram.layoutAnimateModule && this.diagram.layout.enableAnimation) {\n this.layoutAnimateModule.expand(this.diagram.organizationalChartModule.isAnimation, objects, node, this.diagram);\n }\n return objects;\n };\n /**\n * Setinterval and Clear interval for layout animation\n */\n /** @private */\n CommandHandler.prototype.expandCollapse = function (source, visibility, diagram) {\n for (var i = 0; i < source.outEdges.length; i++) {\n var connector = diagram.nameTable[source.outEdges[i]];\n var target = diagram.nameTable[connector.targetID];\n connector.visible = visibility;\n if (target.isExpanded) {\n this.expandCollapse(target, visibility, diagram);\n }\n var oldValues = {\n visible: target.visible,\n style: { opacity: target.style.opacity }\n };\n target.visible = visibility;\n target.style.opacity = (this.diagram.layoutAnimateModule &&\n this.diagram.layout.enableAnimation && visibility) ? 0.1 : target.style.opacity;\n var newValues = {\n visible: target.visible,\n style: { opacity: target.style.opacity }\n };\n diagram.nodePropertyChange(target, oldValues, newValues);\n diagram.connectorPropertyChange(connector, oldValues, newValues);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.updateNodeDimension = function (obj, rect) {\n if (obj instanceof Node) {\n obj.offsetX = rect.x + rect.width / 2;\n obj.offsetY = rect.y + rect.height / 2;\n obj.width = rect.width;\n obj.height = rect.height;\n this.diagram.nodePropertyChange(obj, {}, {\n width: rect.width, height: rect.height, offsetX: obj.offsetX,\n offsetY: obj.offsetY\n });\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.updateConnectorPoints = function (obj, rect) {\n if (obj instanceof Connector) {\n this.diagram.connectorPropertyChange(obj, {}, {\n targetPoint: obj.targetPoint\n });\n this.diagram.updateDiagramObject(obj);\n }\n };\n /** @private */\n CommandHandler.prototype.drawSelectionRectangle = function (x, y, width, height) {\n this.diagram.drawSelectionRectangle(x, y, width, height);\n };\n /** @private */\n CommandHandler.prototype.startGroupAction = function () {\n this.diagram.startGroupAction();\n };\n /** @private */\n CommandHandler.prototype.endGroupAction = function () {\n this.diagram.endGroupAction();\n };\n /** @private */\n CommandHandler.prototype.removeChildFromBPmn = function (child, newTarget, oldTarget) {\n var obj = this.diagram.nameTable[child.id] || child.nodes[0];\n if (oldTarget) {\n if ((obj) && obj.processId && obj.processId === oldTarget.wrapper.id) {\n var node = clone(obj);\n node.processId = obj.processId;\n this.diagram.startGroupAction();\n var edges = [];\n edges = edges.concat(obj.outEdges, obj.inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n var connector = this.diagram.nameTable[edges[i]];\n if (connector) {\n this.diagram.remove(connector);\n }\n }\n var nodeCollection = void 0;\n nodeCollection = (this.diagram.nameTable[obj.processId].shape.activity.subProcess.processes) || [];\n nodeCollection.splice(nodeCollection.indexOf((obj).id), 1);\n this.diagram.bpmnModule.removeChildFromBPMN(this.diagram.nameTable[obj.processId].wrapper, (obj).id);\n this.diagram.nameTable[(obj).id].processId = '';\n obj.offsetX = obj.wrapper.offsetX;\n obj.offsetY = obj.wrapper.offsetY;\n var undoElement = clone(obj);\n var entry = {\n type: 'PositionChanged', redoObject: { nodes: [undoElement] }, undoObject: { nodes: [node] }, category: 'Internal'\n };\n this.addHistoryEntry(entry);\n this.diagram.endGroupAction();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.isDroppable = function (source, targetNodes) {\n var node = this.diagram.nameTable[source.id] || source.nodes[0];\n if (node.shape.shape === 'TextAnnotation') {\n return true;\n }\n if (node && node.shape.type === 'Bpmn') {\n if ((node.processId === targetNodes.id) || (node.id === targetNodes.processId) ||\n targetNodes.shape.activity.subProcess.collapsed) {\n return false;\n }\n }\n return true;\n };\n /**\n * @private\n */\n CommandHandler.prototype.renderHighlighter = function (args, connectHighlighter, source) {\n var bounds = new Rect();\n if (args.target instanceof Node || (connectHighlighter && args.source instanceof Node)) {\n var tgt = connectHighlighter ? args.source : args.target;\n var tgtWrap = connectHighlighter ? args.sourceWrapper : args.targetWrapper;\n var target = this.findTarget(tgtWrap, tgt, source, true);\n var element = void 0;\n if (target instanceof BpmnSubEvent) {\n var portId = target.id;\n var node = args.target;\n var parent_6 = node.wrapper.children[0].children[0].children[2];\n for (var _i = 0, _a = parent_6.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.id === node.id + '_' + portId) {\n element = child.children[0];\n break;\n }\n }\n }\n else {\n element = target instanceof Node ?\n target.wrapper : connectHighlighter ? args.sourceWrapper : args.targetWrapper;\n }\n this.diagram.renderHighlighter(element);\n }\n };\n //additional events\n /** @private */\n CommandHandler.prototype.mouseOver = function (source, target, position) {\n //mouse over\n //returns whether the source can move over the target or not\n return true;\n };\n /**\n * @private\n */\n CommandHandler.prototype.snapPoint = function (startPoint, endPoint, tx, ty) {\n var obj = this.diagram.selectedItems;\n var point;\n var towardsLeft = endPoint.x < startPoint.x;\n var towardsTop = endPoint.y < startPoint.y;\n point = { x: tx, y: ty };\n var snappedPoint = point;\n if (this.snappingModule) {\n snappedPoint = this.diagram.snappingModule.snapPoint(this.diagram, obj, towardsLeft, towardsTop, point, startPoint, endPoint);\n }\n return snappedPoint;\n };\n /**\n * @private\n */\n CommandHandler.prototype.removeSnap = function () {\n if ((this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) && this.snappingModule) {\n this.snappingModule.removeGuidelines(this.diagram);\n }\n };\n /** @private */\n CommandHandler.prototype.dropAnnotation = function (source, target) {\n var node = (source instanceof Node) ? source : source.nodes[0];\n if (this.diagram.bpmnModule && target.shape.type === 'Bpmn'\n && node.shape.shape === 'TextAnnotation') {\n var hasTarget = 'hasTarget';\n node[hasTarget] = target.id;\n node.shape.annotation.nodeId = target.id;\n if (!this.diagram.currentSymbol) {\n this.diagram.addTextAnnotation(node.shape.annotation, target);\n node.shape.annotation.nodeId = '';\n this.diagram.remove(node);\n }\n this.diagram.refreshDiagramLayer();\n }\n };\n ;\n /** @private */\n CommandHandler.prototype.drop = function (source, target, position) {\n //drop\n if (this.diagram.bpmnModule) {\n this.diagram.bpmnModule.dropBPMNchild(target, (source instanceof Node) ? source : source.nodes[0], this.diagram);\n this.diagram.refreshDiagramLayer();\n }\n };\n /** @private */\n CommandHandler.prototype.addHistoryEntry = function (entry) {\n this.diagram.addHistoryEntry(entry);\n };\n /** @private */\n CommandHandler.prototype.align = function (objects, option, type) {\n if (objects.length > 0) {\n var i = 0;\n var bounds = (type === 'Object') ? getBounds(objects[0].wrapper) : this.diagram.selectedItems.wrapper.bounds;\n var undoObj = { nodes: [], connectors: [] };\n var redoObj = { nodes: [], connectors: [] };\n for (i = ((type === 'Object') ? (i + 1) : i); i < objects.length; i++) {\n var tx = 0;\n var ty = 0;\n var objectBounds = getBounds(objects[i].wrapper);\n if (option === 'Left') {\n tx = bounds.left + objectBounds.width / 2 - objectBounds.center.x;\n }\n else if (option === 'Right') {\n tx = bounds.right - objectBounds.width / 2 - objectBounds.center.x;\n }\n else if (option === 'Top') {\n ty = bounds.top + objectBounds.height / 2 - objectBounds.center.y;\n }\n else if (option === 'Bottom') {\n ty = bounds.bottom - objectBounds.height / 2 - objectBounds.center.y;\n }\n else if (option === 'Center') {\n tx = bounds.center.x - objectBounds.center.x;\n }\n else if (option === 'Middle') {\n ty = bounds.center.y - objectBounds.center.y;\n }\n undoObj = this.storeObject(undoObj, objects[i]);\n this.drag(objects[i], tx, ty);\n this.diagram.updateSelector();\n redoObj = this.storeObject(redoObj, objects[i]);\n }\n undoObj = clone(undoObj);\n redoObj = clone(redoObj);\n var entry = {\n type: 'Align', category: 'Internal',\n undoObject: cloneObject(undoObj), redoObject: cloneObject(redoObj)\n };\n this.addHistoryEntry(entry);\n }\n };\n /** @private */\n CommandHandler.prototype.distribute = function (objects, option) {\n if (objects.length > 0) {\n var i = 0;\n var j = 0;\n var rect = new Rect();\n var b = [];\n var temp = void 0;\n var right = 0;\n var left = 0;\n var top_3 = 0;\n var bottom = 0;\n var center = 0;\n var middle = 0;\n var btt = 0;\n var sum = 0;\n var undoSelectorObj = { nodes: [], connectors: [] };\n var redoSelectorObj = { nodes: [], connectors: [] };\n objects = sort(objects);\n for (i = 1; i < objects.length; i++) {\n right = right + objects[i].wrapper.bounds.topRight.x - objects[i - 1].wrapper.bounds.topRight.x;\n left = left + objects[i].wrapper.bounds.topLeft.x - objects[i - 1].wrapper.bounds.topLeft.x;\n top_3 = top_3 + objects[i].wrapper.bounds.topRight.y - objects[i - 1].wrapper.bounds.topRight.y;\n bottom = bottom + objects[i].wrapper.bounds.bottomRight.y - objects[i - 1].wrapper.bounds.bottomRight.y;\n center = center + objects[i].wrapper.bounds.center.x - objects[i - 1].wrapper.bounds.center.x;\n middle = middle + objects[i].wrapper.bounds.center.y - objects[i - 1].wrapper.bounds.center.y;\n btt = btt + objects[i].wrapper.bounds.topRight.y - objects[i - 1].wrapper.bounds.bottomRight.y;\n }\n for (i = 1; i < objects.length - 1; i++) {\n var tx = 0;\n var ty = 0;\n var prev = getBounds(objects[i - 1].wrapper);\n var current = getBounds(objects[i].wrapper);\n if (option === 'RightToLeft' || option === 'Center') {\n tx = prev.center.x - current.center.x + (center / (objects.length - 1));\n }\n else if (option === 'Right') {\n tx = prev.topRight.x - current.topRight.x + (right / (objects.length - 1));\n }\n else if (option === 'Left') {\n tx = prev.topLeft.x - current.topLeft.x + (left / (objects.length - 1));\n }\n else if (option === 'Middle') {\n ty = prev.center.y - current.center.y + (middle / (objects.length - 1));\n }\n else if (option === 'Top') {\n ty = prev.topRight.y - current.topRight.y + (top_3 / (objects.length - 1));\n }\n else if (option === 'Bottom') {\n ty = prev.bottomRight.y - current.bottomRight.y + (bottom / (objects.length - 1));\n }\n else if (option === 'BottomToTop') {\n ty = prev.bottomRight.y - current.topRight.y + (btt / (objects.length - 1));\n }\n undoSelectorObj = this.storeObject(undoSelectorObj, objects[i]);\n this.drag(objects[i], tx, ty);\n this.diagram.updateSelector();\n redoSelectorObj = this.storeObject(redoSelectorObj, objects[i]);\n }\n undoSelectorObj = clone(undoSelectorObj);\n redoSelectorObj = clone(redoSelectorObj);\n var entry = {\n type: 'Distribute', category: 'Internal',\n undoObject: cloneObject(undoSelectorObj), redoObject: cloneObject(redoSelectorObj)\n };\n this.addHistoryEntry(entry);\n }\n };\n /** @private */\n CommandHandler.prototype.sameSize = function (objects, option) {\n if (objects.length > 0) {\n var i = 0;\n var pivot = void 0;\n pivot = { x: 0.5, y: 0.5 };\n var bounds = getBounds(objects[0].wrapper);\n var undoObject = { nodes: [], connectors: [] };\n var redoObject = { nodes: [], connectors: [] };\n for (i = 1; i < objects.length; i++) {\n var rect = getBounds(objects[i].wrapper);\n var sw = 1;\n var sh = 1;\n if (option === 'Width') {\n sw = bounds.width / rect.width;\n }\n else if (option === 'Height') {\n sh = bounds.height / rect.height;\n }\n else if (option === 'Size') {\n sw = bounds.width / rect.width;\n sh = bounds.height / rect.height;\n }\n undoObject = this.storeObject(undoObject, objects[i]);\n this.scale(objects[i], sw, sh, pivot);\n redoObject = this.storeObject(redoObject, objects[i]);\n }\n this.diagram.updateSelector();\n undoObject = clone(undoObject);\n redoObject = clone(redoObject);\n var entry = {\n type: 'Sizing', category: 'Internal',\n undoObject: cloneObject(undoObject), redoObject: cloneObject(redoObject)\n };\n this.addHistoryEntry(entry);\n }\n };\n CommandHandler.prototype.storeObject = function (selectorObject, obj) {\n if (obj instanceof Node) {\n selectorObject.nodes.push(clone(obj));\n }\n else {\n selectorObject.connectors.push(clone(obj));\n }\n return selectorObject;\n };\n /** @private */\n CommandHandler.prototype.scroll = function (scrollX, scrollY, focusPoint) {\n var panx = canPanX(this.diagram);\n var pany = canPanY(this.diagram);\n this.diagram.pan((scrollX = panx ? scrollX : 0) * this.diagram.scroller.currentZoom, (scrollY = pany ? scrollY : 0) * this.diagram.scroller.currentZoom, focusPoint);\n };\n /**\n * @private\n */\n CommandHandler.prototype.drawHighlighter = function (element) {\n this.diagram.renderHighlighter(element.wrapper);\n };\n /**\n * @private\n */\n CommandHandler.prototype.removeHighlighter = function () {\n this.diagram.clearHighlighter();\n };\n /** @private */\n CommandHandler.prototype.zoom = function (scale, scrollX, scrollY, focusPoint) {\n this.diagram.scroller.zoom(scale, scrollX * this.diagram.scroller.currentZoom, scrollY * this.diagram.scroller.currentZoom, focusPoint);\n };\n return CommandHandler;\n}());\nexport { CommandHandler };\n","import { Rect } from '../primitives/rect';\nimport { RealAction } from '../enum/enum';\nimport { identityMatrix, scaleMatrix, translateMatrix, transformPointByMatrix, multiplyMatrix } from '../primitives/matrix';\nimport { updateRuler } from '../ruler/ruler';\nimport { canZoom, canPan } from './../utility/constraints-util';\n/**\n */\nvar DiagramScroller = /** @class */ (function () {\n function DiagramScroller(diagram) {\n /** @private */\n this.transform = { tx: 0, ty: 0, scale: 1 };\n this.oldCollectionObjects = [];\n this.removeCollection = [];\n this.vPortWidth = 0;\n this.vPortHeight = 0;\n this.currentZoomFActor = 1;\n this.hOffset = 0;\n this.vOffset = 0;\n this.scrolled = false;\n this.hScrollSize = 0;\n this.vScrollSize = 0;\n this.diagram = diagram;\n this.objects = [];\n this.transform = diagram.scroller ? diagram.scroller.transform : { tx: 0, ty: 0, scale: 1 };\n this.vPortWidth = diagram.scrollSettings.viewPortWidth;\n this.vPortHeight = diagram.scrollSettings.viewPortHeight;\n this.currentZoomFActor = diagram.scrollSettings.currentZoom;\n this.hOffset = diagram.scrollSettings.horizontalOffset;\n this.vOffset = diagram.scrollSettings.verticalOffset;\n }\n Object.defineProperty(DiagramScroller.prototype, \"viewPortHeight\", {\n /** @private */\n get: function () {\n return this.vPortHeight;\n },\n /** @private */\n set: function (offset) {\n this.vPortHeight = offset;\n this.diagram.scrollSettings.viewPortHeight = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"currentZoom\", {\n /** @private */\n get: function () {\n return this.currentZoomFActor;\n },\n /** @private */\n set: function (offset) {\n this.currentZoomFActor = offset;\n this.diagram.scrollSettings.currentZoom = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"viewPortWidth\", {\n /** @private */\n get: function () {\n return this.vPortWidth;\n },\n /** @private */\n set: function (offset) {\n this.vPortWidth = offset;\n this.diagram.scrollSettings.viewPortWidth = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"horizontalOffset\", {\n /** @private */\n get: function () {\n return this.hOffset;\n },\n /** @private */\n set: function (offset) {\n this.hOffset = offset;\n if (Math.abs(this.hOffset - this.diagram.scrollSettings.horizontalOffset) > 1) {\n this.diagram.realActions = this.diagram.realActions | RealAction.hScrollbarMoved;\n this.scrolled = true;\n }\n this.diagram.scrollSettings.horizontalOffset = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"verticalOffset\", {\n /** @private */\n get: function () {\n return this.vOffset;\n },\n /** @private */\n set: function (offset) {\n this.vOffset = offset;\n if (Math.abs(this.vOffset - this.diagram.scrollSettings.verticalOffset) > 1) {\n this.diagram.realActions = this.diagram.realActions | RealAction.vScrollbarMoved;\n this.scrolled = true;\n }\n this.diagram.scrollSettings.verticalOffset = offset;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n DiagramScroller.prototype.updateScrollOffsets = function (hOffset, vOffset) {\n var offsetX = 0;\n var offsetY = 0;\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n pageBounds.width *= this.currentZoom;\n pageBounds.height *= this.currentZoom;\n offsetX = Math.max(0, hOffset - pageBounds.left);\n offsetY = Math.max(0, vOffset - pageBounds.top);\n if (hOffset !== undefined && vOffset !== undefined) {\n this.horizontalOffset = offsetX;\n this.verticalOffset = offsetY;\n this.diagram.setOffset(offsetX, offsetY);\n }\n else {\n this.diagram.setOffset(-this.horizontalOffset - pageBounds.x, -this.verticalOffset - pageBounds.y);\n }\n this.transform = {\n tx: Math.max(this.horizontalOffset, -pageBounds.left) / this.currentZoom, ty: Math.max(this.verticalOffset, -pageBounds.top) / this.currentZoom,\n scale: this.currentZoom\n };\n };\n /** @private */\n DiagramScroller.prototype.setScrollOffset = function (hOffset, vOffset) {\n this.scrolled = false;\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n pageBounds.width *= this.currentZoom;\n pageBounds.height *= this.currentZoom;\n var x = -pageBounds.left;\n var y = -pageBounds.top;\n var set = false;\n var viewWidth = this.viewPortWidth * this.currentZoom;\n var viewHeight = this.viewPortHeight * this.currentZoom;\n var newX = x - hOffset;\n if (newX !== this.horizontalOffset) {\n if (x < this.horizontalOffset) {\n if (this.horizontalOffset > newX) {\n this.horizontalOffset -= hOffset;\n }\n else {\n this.horizontalOffset = newX;\n }\n set = true;\n }\n var right = Math.max(pageBounds.right + this.vScrollSize, viewWidth);\n if (!set && right < -newX + this.viewPortWidth) {\n var actualRight = -newX + viewWidth - this.vScrollSize;\n var currentRight = -this.horizontalOffset + viewWidth - this.vScrollSize;\n if (actualRight < currentRight) {\n //define\n this.horizontalOffset = newX;\n }\n else {\n if (actualRight - pageBounds.right > actualRight - currentRight) {\n this.horizontalOffset = newX;\n }\n else {\n this.horizontalOffset = -(pageBounds.right + this.vScrollSize - viewWidth);\n }\n }\n set = true;\n }\n if (!set) {\n this.horizontalOffset = x - hOffset;\n }\n }\n set = false;\n //vertical offset\n var newY = y - vOffset;\n if (newY !== this.verticalOffset) {\n if (y < this.verticalOffset) {\n if (this.verticalOffset > newY) {\n this.verticalOffset -= vOffset;\n }\n else {\n this.verticalOffset = newY;\n }\n set = true;\n }\n var bottom = Math.max(pageBounds.bottom + this.hScrollSize, viewHeight);\n if (!set && bottom < -newY + viewHeight) {\n var actualBottom = -newY + viewHeight - this.hScrollSize;\n var currentBottom = -this.verticalOffset + viewHeight - this.hScrollSize;\n if (actualBottom < currentBottom) {\n //define\n this.verticalOffset = newY;\n }\n else {\n if (actualBottom - pageBounds.bottom > actualBottom - currentBottom) {\n this.verticalOffset = newY;\n }\n else {\n this.verticalOffset = -(pageBounds.bottom + this.hScrollSize - viewHeight);\n }\n }\n set = true;\n }\n if (!set) {\n this.verticalOffset = y - vOffset;\n }\n }\n this.transform = {\n tx: Math.max(this.horizontalOffset, -pageBounds.left) / this.currentZoom, ty: Math.max(this.verticalOffset, -pageBounds.top) / this.currentZoom,\n scale: this.currentZoom\n };\n this.setSize();\n };\n /** @private */\n DiagramScroller.prototype.getObjects = function (coll1, coll2) {\n var objects = [];\n for (var i = 0; i < coll1.length; i++) {\n var isExist = false;\n for (var j = 0; j < coll2.length; j++) {\n if (coll1[i] === coll2[j]) {\n isExist = true;\n break;\n }\n }\n if (!isExist) {\n objects.push(coll1[i]);\n }\n }\n return objects;\n };\n DiagramScroller.prototype.virtualizeElements = function () {\n var viewWidth = this.viewPortWidth / this.currentZoom;\n var viewHeight = this.viewPortHeight / this.currentZoom;\n var oObjects = this.diagram.spatialSearch.findObjects(new Rect(-this.horizontalOffset / this.currentZoom, -this.verticalOffset / this.currentZoom, viewWidth, viewHeight));\n var oObjectsID = [];\n for (var i = 0; i < oObjects.length; i++) {\n oObjectsID.push(oObjects[i].id);\n }\n var newObjects = this.getObjects(oObjectsID, this.oldCollectionObjects);\n if (this.oldCollectionObjects.length === 0) {\n this.oldCollectionObjects = oObjectsID;\n }\n var removeObjects = this.getObjects(this.oldCollectionObjects, oObjectsID);\n this.diagram.updateVirtualObjects(newObjects, false, removeObjects);\n this.oldCollectionObjects = oObjectsID;\n };\n /** @private */\n DiagramScroller.prototype.setSize = function () {\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n pageBounds.width *= this.currentZoom;\n pageBounds.height *= this.currentZoom;\n var x = Math.min(pageBounds.x, -this.horizontalOffset);\n var y = Math.min(pageBounds.y, -this.verticalOffset);\n var difX = -this.horizontalOffset + this.viewPortWidth - pageBounds.right;\n var difY = -this.verticalOffset + this.viewPortHeight - pageBounds.bottom;\n var hScrollSize = this.scrollerWidth;\n var vScrollSize = this.scrollerWidth;\n if (-this.verticalOffset <= pageBounds.y && -this.verticalOffset + this.viewPortHeight >= pageBounds.bottom) {\n vScrollSize = 0;\n }\n if (-this.horizontalOffset <= pageBounds.x && -this.horizontalOffset + this.viewPortWidth >= pageBounds.right) {\n hScrollSize = 0;\n }\n this.hScrollSize = hScrollSize;\n this.vScrollSize = vScrollSize;\n var oldWidth = this.diagramWidth;\n var oldHeight = this.diagramHeight;\n this.diagramWidth = Math.max(pageBounds.right, -this.horizontalOffset + this.viewPortWidth - vScrollSize) - x;\n this.diagramHeight = Math.max(pageBounds.bottom, -this.verticalOffset + this.viewPortHeight - hScrollSize) - y;\n if (oldWidth !== this.diagramWidth || oldHeight !== this.diagramHeight) {\n this.diagram.setSize(this.diagramWidth, this.diagramHeight);\n }\n this.diagram.transformLayers();\n this.diagram.element.style.overflow = 'hidden';\n };\n /** @private */\n DiagramScroller.prototype.setViewPortSize = function (width, height) {\n this.viewPortWidth = width;\n this.viewPortHeight = height;\n };\n /**\n * To get page pageBounds\n * @private\n */\n DiagramScroller.prototype.getPageBounds = function (boundingRect, region) {\n var rect = new Rect();\n var temp = 0;\n if (region !== 'Content' && this.diagram.pageSettings.width !== null && this.diagram.pageSettings.height !== null) {\n var width = this.diagram.pageSettings.width;\n var height = this.diagram.pageSettings.height;\n var negwidth = 0;\n var negheight = 0;\n if (this.diagram.pageSettings.multiplePage) {\n rect = this.diagram.spatialSearch.getPageBounds(0, 0);\n if (rect.right > width) {\n var x = Math.ceil(rect.right / width);\n width = width * x;\n }\n if (rect.bottom > height) {\n var x = Math.ceil(rect.bottom / height);\n height = height * x;\n }\n if (rect.left < 0 && Math.abs(rect.left) > negwidth) {\n var x = Math.ceil(Math.abs(rect.left) / this.diagram.pageSettings.width);\n negwidth = this.diagram.pageSettings.width * x;\n }\n if (rect.top < 0 && Math.abs(rect.top) > negheight) {\n var x = Math.ceil(Math.abs(rect.top) / this.diagram.pageSettings.height);\n negheight = this.diagram.pageSettings.height * x;\n }\n }\n return new Rect((-negwidth), (-negheight), width + negwidth, height + negheight);\n }\n else {\n var origin = boundingRect ? undefined : 0;\n return this.diagram.spatialSearch.getPageBounds(origin, origin);\n }\n };\n /**\n * To get page break when PageBreak is set as true\n * @private\n */\n DiagramScroller.prototype.getPageBreak = function (pageBounds) {\n var i = 0;\n var j = 0;\n var v = -1;\n var collection = [];\n var x1 = 0;\n var x2 = 0;\n var y1 = 0;\n var y2 = 0;\n var left = this.diagram.pageSettings.margin.left;\n var right = this.diagram.pageSettings.margin.right;\n var top = this.diagram.pageSettings.margin.top;\n var bottom = this.diagram.pageSettings.margin.bottom;\n var widthCount = 1;\n var heightCount = 1;\n var segment = { x1: x1, y1: y1, x2: x2, y2: y2 };\n while (pageBounds.width > i) {\n i = i + (this.diagram.pageSettings.width ? this.diagram.pageSettings.width : pageBounds.width);\n if (i === this.diagram.pageSettings.width) {\n segment = {\n x1: pageBounds.left + left, y1: pageBounds.top + top,\n x2: pageBounds.left + left, y2: pageBounds.bottom - bottom\n };\n collection[++v] = segment;\n }\n if (i < pageBounds.width) {\n x1 = pageBounds.topLeft.x + this.diagram.pageSettings.width * widthCount;\n y1 = pageBounds.topLeft.y + top;\n x2 = pageBounds.bottomLeft.x + this.diagram.pageSettings.width * widthCount;\n y2 = pageBounds.bottomLeft.y - bottom;\n segment = { x1: x1, y1: y1, x2: x2, y2: y2 };\n collection[++v] = segment;\n widthCount++;\n }\n if (pageBounds.width === i) {\n segment = {\n x1: pageBounds.right - right, y1: pageBounds.top + top,\n x2: pageBounds.right - right, y2: pageBounds.bottom - bottom\n };\n collection[++v] = segment;\n }\n }\n while (pageBounds.height > j) {\n j = j + (this.diagram.pageSettings.height ? this.diagram.pageSettings.height : pageBounds.height);\n if (j === this.diagram.pageSettings.height) {\n segment = {\n x1: pageBounds.left + left, y1: pageBounds.top + top,\n x2: pageBounds.right - right, y2: pageBounds.top + top\n };\n collection[++v] = segment;\n }\n if (j < pageBounds.height) {\n x1 = pageBounds.topLeft.x + left;\n y1 = pageBounds.topLeft.y + this.diagram.pageSettings.height * heightCount;\n x2 = pageBounds.topRight.x - right;\n y2 = pageBounds.topRight.y + this.diagram.pageSettings.height * heightCount;\n segment = { x1: x1, y1: y1, x2: x2, y2: y2 };\n collection[++v] = segment;\n heightCount++;\n }\n if (pageBounds.height === j) {\n segment = {\n x1: pageBounds.left + left, y1: pageBounds.bottom - bottom,\n x2: pageBounds.right - right, y2: pageBounds.bottom - bottom\n };\n collection[++v] = segment;\n }\n }\n return collection;\n };\n /** @private */\n DiagramScroller.prototype.zoom = function (factor, deltaX, deltaY, focusPoint) {\n if (canZoom(this.diagram) && factor !== 1 || (canPan(this.diagram) && factor === 1)) {\n var matrix = identityMatrix();\n scaleMatrix(matrix, this.currentZoom, this.currentZoom);\n translateMatrix(matrix, this.horizontalOffset, this.verticalOffset);\n focusPoint = focusPoint || { x: this.viewPortWidth / 2, y: this.viewPortHeight / 2 };\n focusPoint = transformPointByMatrix(matrix, focusPoint);\n if ((this.currentZoom * factor) >= this.diagram.scrollSettings.minZoom &&\n (this.currentZoom * factor) <= this.diagram.scrollSettings.maxZoom) {\n this.currentZoom *= factor;\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n //target Matrix\n var targetMatrix = identityMatrix();\n scaleMatrix(targetMatrix, factor, factor, focusPoint.x, focusPoint.y);\n translateMatrix(targetMatrix, deltaX || 0, deltaY || 0);\n multiplyMatrix(matrix, targetMatrix);\n var newOffset = transformPointByMatrix(matrix, { x: 0, y: 0 });\n if (factor === 1) {\n newOffset = this.applyScrollLimit(newOffset.x, newOffset.y);\n }\n this.transform = {\n tx: Math.max(newOffset.x, -pageBounds.left) / this.currentZoom,\n ty: Math.max(newOffset.y, -pageBounds.top) / this.currentZoom,\n scale: this.currentZoom\n };\n this.horizontalOffset = newOffset.x;\n this.verticalOffset = newOffset.y;\n this.setSize();\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n this.diagram.setOffset(-this.horizontalOffset - pageBounds.x, -this.verticalOffset - pageBounds.y);\n updateRuler(this.diagram);\n }\n }\n };\n /** @private */\n DiagramScroller.prototype.fitToPage = function (options) {\n options = options || {};\n var mode = options.mode;\n var region = options.region;\n var margin = options.margin || {};\n var canZoomIn = options.canZoomIn;\n var customBounds = options.customBounds;\n margin.bottom = margin.bottom || 25;\n margin.top = margin.top || 25;\n margin.left = margin.left || 25;\n margin.right = margin.right || 25;\n var bounds = customBounds;\n var factor;\n var deltaX = -this.horizontalOffset;\n var deltaY = -this.verticalOffset;\n region = region ? region : 'PageSettings';\n //fit mode\n if ((region === 'PageSettings' && this.diagram.pageSettings.width && this.diagram.pageSettings.height)\n || (this.diagram.nodes.length > 0 || this.diagram.connectors.length > 0)) {\n mode = mode ? mode : 'Page';\n if (region !== 'CustomBounds') {\n bounds = this.getPageBounds(true, region);\n }\n var scale = { x: 0, y: 0 };\n scale.x = (this.viewPortWidth - (margin.left + margin.right)) / (bounds.width);\n scale.y = (this.viewPortHeight - (margin.top + margin.bottom)) / (bounds.height);\n if (!canZoomIn && ((bounds.width - this.horizontalOffset) < this.viewPortWidth) &&\n (bounds.height - this.verticalOffset) < this.viewPortHeight) {\n scale.x = Math.min(1, scale.x);\n scale.y = Math.min(1, scale.y);\n }\n var zoomFactor = void 0;\n var centerX = void 0;\n var centerY = void 0;\n switch (mode) {\n case 'Width':\n zoomFactor = scale.x;\n factor = zoomFactor / this.currentZoom;\n centerX = (this.viewPortWidth - (bounds.width) * zoomFactor) / 2 - bounds.x * zoomFactor;\n deltaX += centerX + (margin.left - margin.right) / 2 * zoomFactor;\n deltaY -= -this.verticalOffset * factor;\n deltaY = region !== 'CustomBounds' ? deltaY : deltaY - this.verticalOffset * factor;\n break;\n case 'Height':\n zoomFactor = scale.y;\n factor = (zoomFactor / this.currentZoom);\n centerX = ((this.viewPortWidth - (bounds.width) * zoomFactor) / 2) - bounds.x * zoomFactor;\n centerY = ((this.viewPortHeight - (bounds.height) * zoomFactor) / 2) - bounds.y * zoomFactor;\n deltaX += centerX + (margin.left - margin.right) / 2 * zoomFactor;\n deltaY += centerY + (margin.top - margin.bottom) / 2 * zoomFactor;\n break;\n case 'Page':\n zoomFactor = Math.min(scale.x, scale.y);\n factor = (zoomFactor / this.currentZoom);\n centerX = (this.viewPortWidth - (bounds.width) * zoomFactor) / 2 - bounds.x * zoomFactor;\n centerY = (this.viewPortHeight - (bounds.height) * zoomFactor) / 2 - bounds.y * zoomFactor;\n deltaX += centerX + (margin.left - margin.right) / 2 * zoomFactor;\n deltaY += centerY + (margin.top - margin.bottom) / 2 * zoomFactor;\n break;\n }\n this.zoom(factor, deltaX, deltaY, { x: 0, y: 0 });\n }\n else {\n factor = 1 / this.currentZoom;\n this.zoom(factor, deltaX, deltaY, { x: 0, y: 0 });\n }\n };\n /** @private */\n DiagramScroller.prototype.bringIntoView = function (rect) {\n var x = 0;\n var y = 0;\n var scale = this.currentZoom;\n var bounds = rect;\n var hoffset = -this.horizontalOffset;\n var voffset = -this.verticalOffset;\n bounds = new Rect(bounds.x * scale, bounds.y * scale, bounds.width * scale, bounds.height * scale);\n var view = new Rect(hoffset, voffset, this.viewPortWidth, this.viewPortHeight);\n if (!(view.containsRect(bounds))) {\n if (bounds.right > (-hoffset + this.viewPortWidth)) {\n x = bounds.right - this.viewPortWidth;\n }\n if (bounds.x < -hoffset) {\n x = bounds.x;\n }\n if (bounds.bottom > (-voffset + this.viewPortHeight)) {\n y = bounds.bottom - this.viewPortHeight;\n }\n if (bounds.y < -voffset) {\n y = bounds.y;\n }\n this.zoom(1, -this.horizontalOffset - x, -this.verticalOffset - y, null);\n }\n };\n /** @private */\n DiagramScroller.prototype.bringToCenter = function (bounds) {\n var scale = this.currentZoom;\n var actualbounds = new Rect(bounds.x * scale, bounds.y * scale, bounds.width * scale, bounds.height * scale);\n var hoffset = actualbounds.x + actualbounds.width / 2 - this.viewPortWidth / 2;\n var voffset = actualbounds.y + actualbounds.height / 2 - this.viewPortHeight / 2;\n this.zoom(1, -this.horizontalOffset - hoffset, -this.verticalOffset - voffset, null);\n };\n DiagramScroller.prototype.applyScrollLimit = function (hOffset, vOffset) {\n if (this.diagram.scrollSettings.scrollLimit !== 'Infinity') {\n var bounds = void 0;\n if (this.diagram.scrollSettings.scrollLimit === 'Limited') {\n bounds = this.diagram.scrollSettings.scrollableArea;\n }\n bounds = bounds || this.getPageBounds(true);\n bounds.x *= this.currentZoom;\n bounds.y *= this.currentZoom;\n bounds.width *= this.currentZoom;\n bounds.height *= this.currentZoom;\n hOffset *= -1;\n vOffset *= -1;\n var allowedRight = Math.max(bounds.right, this.viewPortWidth);\n if (!(hOffset <= bounds.x && (hOffset + this.viewPortWidth >= bounds.right ||\n hOffset >= bounds.right - this.viewPortWidth)\n || hOffset >= bounds.x && (hOffset + this.viewPortWidth <= allowedRight))) {\n //not allowed case\n if (hOffset >= bounds.x) {\n hOffset = Math.max(bounds.x, Math.min(hOffset, hOffset - (hOffset + this.viewPortWidth - this.vScrollSize - allowedRight)));\n }\n else {\n var allowed = bounds.right - this.viewPortWidth;\n hOffset = Math.min(allowed, bounds.x);\n }\n }\n var allowedBottom = Math.max(bounds.bottom, this.viewPortHeight);\n if (!(vOffset <= bounds.y && vOffset + this.viewPortHeight >= bounds.bottom\n || vOffset >= bounds.y && vOffset + this.viewPortHeight <= allowedBottom)) {\n //not allowed case\n if (vOffset >= bounds.y) {\n vOffset = Math.max(bounds.y, Math.min(vOffset, vOffset - (vOffset + this.viewPortHeight - this.hScrollSize - allowedBottom)));\n }\n else {\n var allowed = bounds.bottom - this.viewPortHeight;\n vOffset = Math.min(bounds.y, allowed);\n }\n }\n hOffset *= -1;\n vOffset *= -1;\n }\n return { x: hOffset, y: vOffset };\n };\n return DiagramScroller;\n}());\nexport { DiagramScroller };\n","/**\n * Quad helps to maintain a set of objects that are contained within the particular region\n */\n/** @private */\nvar Quad = /** @class */ (function () {\n /** @private */\n function Quad(left, top, width, height, spatialSearching) {\n this.objects = [];\n this.left = left;\n this.top = top;\n this.width = width;\n this.height = height;\n this.spatialSearch = spatialSearching;\n }\n /** @private */\n Quad.prototype.findQuads = function (currentViewPort, quads) {\n if (this.first != null && this.first.isIntersect(currentViewPort)) {\n this.first.findQuads(currentViewPort, quads);\n }\n if (this.second != null && this.second.isIntersect(currentViewPort)) {\n this.second.findQuads(currentViewPort, quads);\n }\n if (this.third != null && this.third.isIntersect(currentViewPort)) {\n this.third.findQuads(currentViewPort, quads);\n }\n if (this.fourth != null && this.fourth.isIntersect(currentViewPort)) {\n this.fourth.findQuads(currentViewPort, quads);\n }\n if (this.objects.length > 0) {\n quads.push(this);\n }\n };\n Quad.prototype.isIntersect = function (t) {\n if (this.left + this.width < t.left || this.top + this.height < t.top || this.left > t.right || this.top > t.bottom) {\n return false;\n }\n return true;\n };\n /** @private */\n Quad.prototype.selectQuad = function () {\n var target = null;\n var current = this;\n var quadSet;\n while (current != null) {\n quadSet = current.getQuad(target);\n current = quadSet.source;\n target = quadSet.target || target;\n }\n return target;\n };\n Quad.prototype.getQuad = function (target) {\n target = null;\n var halfWidth = this.width / 2;\n var halfHeight = this.height / 2;\n if (halfWidth >= 1000 && halfHeight >= 1000) {\n var xCenter = this.left + halfWidth;\n var yCenter = this.top + halfHeight;\n if (this.spatialSearch.childRight <= xCenter) {\n if (this.spatialSearch.childBottom <= yCenter) {\n if (!this.first) {\n var newQuad = new Quad(this.left, this.top, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.first = newQuad;\n }\n return { source: this.first };\n }\n if (this.spatialSearch.childTop >= yCenter) {\n if (!this.third) {\n var newQuad = new Quad(this.left, yCenter, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.third = newQuad;\n }\n return { source: this.third };\n }\n }\n else if (this.spatialSearch.childLeft >= xCenter) {\n if (this.spatialSearch.childBottom <= yCenter) {\n if (!this.second) {\n var newQuad = new Quad(xCenter, this.top, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.second = newQuad;\n }\n return { source: this.second };\n }\n if (this.spatialSearch.childTop >= yCenter) {\n if (!this.fourth) {\n var newQuad = new Quad(xCenter, yCenter, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.fourth = newQuad;\n }\n return { source: this.fourth };\n }\n }\n }\n target = this;\n this.objects.push(this.spatialSearch.childNode);\n return { target: this };\n };\n /** @private */\n Quad.prototype.isContained = function () {\n if (this.spatialSearch.childLeft >= this.left && this.spatialSearch.childRight <= this.left + this.width &&\n this.spatialSearch.childTop >= this.top && this.spatialSearch.childBottom <= this.top + this.height) {\n return true;\n }\n return false;\n };\n /** @private */\n Quad.prototype.addIntoAQuad = function (node) {\n var quadAddition = {};\n this.spatialSearch.setCurrentNode(node);\n var quad = null;\n while (!quadAddition.isAdded) {\n quadAddition = this.spatialSearch.parentQuad.add(quad);\n quad = quadAddition.quad;\n }\n return quad;\n };\n Quad.prototype.add = function (quad) {\n quad = null;\n if (this.isContained()) {\n quad = this.selectQuad();\n return { isAdded: true, quad: quad };\n }\n else {\n var newParent = void 0;\n var isempty = this.objects.length === 0 && !this.first && !this.second && !this.third &&\n !this.fourth;\n var newWidth = this.width * 2;\n var newHeight = this.height * 2;\n if (this.spatialSearch.childLeft < this.left) {\n if (this.spatialSearch.childTop < this.top) {\n newParent = new Quad(this.left - this.width, this.top - this.height, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.fourth = this;\n }\n }\n else {\n newParent = new Quad(this.left - this.width, this.top, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.second = this;\n }\n }\n }\n else if (this.spatialSearch.childTop < this.top) {\n newParent = new Quad(this.left, this.top - this.height, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.third = this;\n }\n }\n else {\n newParent = new Quad(this.left, this.top, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.first = this;\n }\n }\n this.parent = newParent;\n this.spatialSearch.parentQuad = newParent;\n return { isAdded: false, quad: quad };\n //newParent.AddIntoaQuad(node);\n }\n };\n return Quad;\n}());\nexport { Quad };\n","import { Rect } from '../../primitives/rect';\nimport { Quad } from './quad';\n/**\n * Spatial search module helps to effectively find the objects over diagram\n */\nvar SpatialSearch = /** @class */ (function () {\n /** @private */\n function SpatialSearch(objectTable) {\n this.quadSize = 500;\n this.objectTable = objectTable;\n this.parentQuad = new Quad(0, 0, this.quadSize * 2, this.quadSize * 2, this);\n this.pageLeft = Number.MAX_VALUE;\n this.pageRight = -Number.MAX_VALUE;\n this.pageTop = Number.MAX_VALUE;\n this.pageBottom = -Number.MAX_VALUE;\n this.quadTable = {};\n }\n /** @private */\n SpatialSearch.prototype.removeFromAQuad = function (node) {\n if (this.quadTable[node.id]) {\n var quad = this.quadTable[node.id];\n var index = this.objectIndex(quad.objects, node);\n if (index !== -1) {\n quad.objects.splice(index, 1);\n this.update(quad);\n delete this.quadTable[node.id];\n }\n }\n };\n SpatialSearch.prototype.update = function (quad) {\n if (quad.parent && quad.objects.length === 0 && quad.first && quad.second && quad.third && quad.fourth) {\n var parent_1 = quad.parent;\n if (parent_1.first === quad) {\n parent_1.first = null;\n }\n else if (parent_1.second === quad) {\n parent_1.second = null;\n }\n else if (parent_1.third === quad) {\n parent_1.third = null;\n }\n else if (parent_1.fourth === quad) {\n parent_1.fourth = null;\n }\n this.update(quad.parent);\n }\n else {\n if (quad === this.parentQuad && !quad.first && !quad.second && !quad.third && !quad.fourth) {\n quad.left = 0;\n quad.width = 1000;\n quad.top = 0;\n quad.height = 1000;\n }\n return;\n }\n };\n SpatialSearch.prototype.addIntoAQuad = function (node) {\n var quad = this.parentQuad.addIntoAQuad(node);\n this.quadTable[node.id] = quad;\n };\n /** @private */\n SpatialSearch.prototype.objectIndex = function (objects, node) {\n for (var i = 0; i < objects.length; i++) {\n if ((objects[i]).id === node.id) {\n return i;\n }\n }\n return -1;\n };\n SpatialSearch.prototype.updateQuad = function (node) {\n this.setCurrentNode(node);\n var nodBounds = node.outerBounds;\n if (!(!isNaN(nodBounds.x) && !isNaN(nodBounds.y) &&\n !isNaN(nodBounds.width) && !isNaN(nodBounds.height))) {\n return false;\n }\n //nodBounds = new Rect(nodBounds.X.Valid(), nodBounds.Y.Valid(), nodBounds.Width.Valid(), nodBounds.Height.Valid());\n if (this.quadTable[node.id]) {\n var quad = this.quadTable[node.id];\n if (!quad.isContained()) {\n this.removeFromAQuad(node);\n this.addIntoAQuad(node);\n }\n }\n else {\n this.addIntoAQuad(node);\n }\n if (this.isWithinPageBounds(nodBounds) &&\n this.leftElement !== node &&\n this.topElement !== node &&\n this.rightElement !== node &&\n this.bottomElement !== node) {\n //contained - no change\n }\n else {\n var modified = false;\n if (this.pageLeft !== this.childLeft || node !== this.leftElement) {\n if (this.pageLeft >= this.childLeft) {\n this.pageLeft = this.childLeft;\n this.leftElement = node;\n modified = true;\n }\n else if (node === this.leftElement) {\n this.pageLeft = Number.MAX_VALUE;\n this.findLeft(this.parentQuad);\n modified = true;\n }\n }\n if (this.pageTop !== this.childTop || node !== this.topElement) {\n if (this.pageTop >= this.childTop) {\n this.pageTop = this.childTop;\n this.topElement = node;\n modified = true;\n }\n else if (node === this.topElement) {\n this.pageTop = Number.MAX_VALUE;\n this.findTop(this.parentQuad);\n modified = true;\n }\n }\n if (this.pageBottom !== this.childBottom || node !== this.bottomElement) {\n if (this.pageBottom <= this.childBottom) {\n modified = true;\n this.pageBottom = this.childBottom;\n this.bottomElement = node;\n }\n else if (node === this.bottomElement) {\n this.pageBottom = -Number.MAX_VALUE;\n this.findBottom(this.parentQuad);\n modified = true;\n }\n }\n if (this.pageRight !== this.childRight || node !== this.rightElement) {\n if (this.pageRight <= this.childRight) {\n this.pageRight = this.childRight;\n this.rightElement = node;\n modified = true;\n }\n else if (node === this.rightElement) {\n this.pageRight = -Number.MAX_VALUE;\n this.findRight(this.parentQuad);\n modified = true;\n }\n }\n return modified;\n }\n this.setCurrentNode(null);\n return false;\n };\n SpatialSearch.prototype.isWithinPageBounds = function (node) {\n if (node.left >= this.pageLeft && node.right <= this.pageRight && node.top >= this.pageTop\n && node.bottom <= this.pageBottom) {\n return true;\n }\n else {\n return false;\n }\n };\n /** @private */\n SpatialSearch.prototype.findQuads = function (region) {\n var quads = [];\n this.parentQuad.findQuads(region, quads);\n return quads;\n };\n /** @private */\n SpatialSearch.prototype.findObjects = function (region) {\n var quads = this.findQuads(region);\n var objects = [];\n for (var _i = 0, quads_1 = quads; _i < quads_1.length; _i++) {\n var quad = quads_1[_i];\n for (var _a = 0, _b = quad.objects; _a < _b.length; _a++) {\n var obj = _b[_a];\n if (obj.outerBounds.intersects(region)) {\n objects.push(this.objectTable[obj.id]);\n }\n }\n }\n return objects;\n };\n /** @private */\n SpatialSearch.prototype.updateBounds = function (node) {\n var modified = false;\n if (node === this.topElement) {\n this.pageTop = Number.MAX_VALUE;\n this.topElement = null;\n this.findTop(this.parentQuad);\n modified = true;\n }\n if (node === this.leftElement) {\n this.pageLeft = Number.MAX_VALUE;\n this.leftElement = null;\n this.findLeft(this.parentQuad);\n modified = true;\n }\n if (node === this.rightElement) {\n this.pageRight = -Number.MAX_VALUE;\n this.rightElement = null;\n this.findRight(this.parentQuad);\n modified = true;\n }\n if (node === this.bottomElement) {\n this.pageBottom = -Number.MAX_VALUE;\n this.bottomElement = null;\n this.findBottom(this.parentQuad);\n modified = true;\n }\n return modified;\n };\n SpatialSearch.prototype.findBottom = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.third || quad.fourth) {\n if (quad.third) {\n this.findBottom(quad.third);\n }\n if (quad.fourth) {\n this.findBottom(quad.fourth);\n }\n }\n else {\n if (quad.second) {\n this.findBottom(quad.second);\n }\n if (quad.first) {\n this.findBottom(quad.first);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageBottom <= node.outerBounds.bottom) {\n this.pageBottom = node.outerBounds.bottom;\n this.bottomElement = node;\n }\n }\n };\n SpatialSearch.prototype.findRight = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.second || quad.fourth) {\n if (quad.second) {\n this.findRight(quad.second);\n }\n if (quad.fourth) {\n this.findRight(quad.fourth);\n }\n }\n else {\n if (quad.first) {\n this.findRight(quad.first);\n }\n if (quad.third) {\n this.findRight(quad.third);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageRight <= node.outerBounds.right) {\n this.pageRight = node.outerBounds.right;\n this.rightElement = node;\n }\n }\n };\n SpatialSearch.prototype.findLeft = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.first || quad.third) {\n if (quad.first) {\n this.findLeft(quad.first);\n }\n if (quad.third) {\n this.findLeft(quad.third);\n }\n }\n else {\n if (quad.second) {\n this.findLeft(quad.second);\n }\n if (quad.fourth) {\n this.findLeft(quad.fourth);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageLeft >= node.outerBounds.left) {\n this.pageLeft = node.outerBounds.left;\n this.leftElement = node;\n }\n }\n };\n SpatialSearch.prototype.findTop = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.first || quad.second) {\n if (quad.first) {\n this.findTop(quad.first);\n }\n if (quad.second) {\n this.findTop(quad.second);\n }\n }\n else {\n if (quad.third) {\n this.findTop(quad.third);\n }\n if (quad.fourth) {\n this.findTop(quad.fourth);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageTop >= node.outerBounds.top) {\n this.pageTop = node.outerBounds.top;\n this.topElement = node;\n }\n }\n };\n /** @private */\n SpatialSearch.prototype.setCurrentNode = function (node) {\n this.childNode = node;\n if (node) {\n var r = node.outerBounds;\n this.childLeft = Number(r.left);\n this.childTop = Number(r.top);\n this.childRight = Number(r.right);\n this.childBottom = Number(r.bottom);\n }\n else {\n this.childLeft = Number.MAX_VALUE;\n this.childTop = Number.MAX_VALUE;\n this.childRight = -Number.MAX_VALUE;\n this.childBottom = -Number.MAX_VALUE;\n }\n };\n /** @private */\n SpatialSearch.prototype.getPageBounds = function (originX, originY) {\n if (this.pageLeft === Number.MAX_VALUE) {\n return new Rect(0, 0, 0, 0);\n }\n var left = originX !== undefined ? Math.min(this.pageLeft, 0) : this.pageLeft;\n var top = originY !== undefined ? Math.min(this.pageTop, 0) : this.pageTop;\n return new Rect(Math.round(left), Math.round(top), Math.round(this.pageRight - left), Math.round(this.pageBottom - top));\n };\n /** @private */\n SpatialSearch.prototype.getQuad = function (node) {\n return this.quadTable[node.id];\n };\n return SpatialSearch;\n}());\nexport { SpatialSearch };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\n/**\n * Defines the combination of keys and modifier keys\n */\nvar KeyGesture = /** @class */ (function (_super) {\n __extends(KeyGesture, _super);\n function KeyGesture() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], KeyGesture.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], KeyGesture.prototype, \"keyModifiers\", void 0);\n return KeyGesture;\n}(ChildProperty));\nexport { KeyGesture };\n/**\n * Defines a command and a key gesture to define when the command should be executed\n */\nvar Command = /** @class */ (function (_super) {\n __extends(Command, _super);\n function Command() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Command.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], Command.prototype, \"canExecute\", void 0);\n __decorate([\n Property()\n ], Command.prototype, \"execute\", void 0);\n __decorate([\n Complex({}, KeyGesture)\n ], Command.prototype, \"gesture\", void 0);\n __decorate([\n Property('')\n ], Command.prototype, \"parameter\", void 0);\n return Command;\n}(ChildProperty));\nexport { Command };\n/**\n * Defines the collection of commands and the corresponding key gestures\n */\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Command)\n ], CommandManager.prototype, \"commands\", void 0);\n return CommandManager;\n}(ChildProperty));\nexport { CommandManager };\n/**\n * Defines the behavior of the context menu items\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ContextMenuSettings.prototype, \"show\", void 0);\n __decorate([\n Property()\n ], ContextMenuSettings.prototype, \"showCustomMenuOnly\", void 0);\n __decorate([\n Property()\n ], ContextMenuSettings.prototype, \"items\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Complex, Collection, EventHandler, L10n, Droppable, remove } from '@syncfusion/ej2-base';\nimport { Browser, Event } from '@syncfusion/ej2-base';\nimport { CanvasRenderer } from './rendering/canvas-renderer';\nimport { SvgRenderer } from './rendering/svg-renderer';\nimport { DiagramRenderer } from './rendering/renderer';\nimport { PageSettings, ScrollSettings } from './diagram/page-settings';\nimport { ServiceLocator } from './objects/service';\nimport { Container } from './core/containers/container';\nimport { Node, BpmnShape } from './objects/node';\nimport { Connector } from './objects/connector';\nimport { SnapSettings } from './diagram/grid-lines';\nimport { RulerSettings } from './diagram/ruler-settings';\nimport { removeRulerElements, updateRuler, getRulerSize } from './ruler/ruler';\nimport { renderRuler, renderOverlapElement } from './ruler/ruler';\nimport { Size } from './primitives/size';\nimport { Keys, KeyModifiers, DiagramTools, AnnotationConstraints, NodeConstraints } from './enum/enum';\nimport { DiagramConstraints, SelectorConstraints, PortVisibility, DiagramEvent } from './enum/enum';\nimport { DiagramAction, ThumbsConstraints } from './enum/enum';\nimport { RealAction } from './enum/enum';\nimport { PathElement } from './core/elements/path-element';\nimport { TextElement } from './core/elements/text-element';\nimport { updateStyle, removeItem, updateConnector, updateShape } from './utility/diagram-util';\nimport { checkPortRestriction, serialize, deserialize, updateHyperlink, getObjectType } from './utility/diagram-util';\nimport { Rect } from './primitives/rect';\nimport { getPortShape } from './objects/dictionary/common';\nimport { ShapeAnnotation, PathAnnotation } from './objects/annotation';\nimport { Canvas } from './core/containers/canvas';\nimport { DataSource } from './diagram/data-source';\nimport { Layout } from './layout/layout-base';\nimport { Selector } from './interaction/selector';\nimport { DiagramEventHandler } from './interaction/event-handlers';\nimport { CommandHandler } from './interaction/command-manager';\nimport { DiagramScroller } from './interaction/scroller';\nimport { isSelected } from './interaction/actions';\nimport { SpatialSearch } from './interaction/spatial-search/spatial-search';\nimport { setAttributeSvg, setAttributeHtml, measureHtmlText, removeElement, createMeasureElements } from './utility/dom-util';\nimport { getDiagramElement, getScrollerWidth, getHTMLLayer } from './utility/dom-util';\nimport { getBackgroundLayer, createHtmlElement, createSvgElement, getNativeLayerSvg } from './utility/dom-util';\nimport { getPortLayerSvg, getDiagramLayerSvg } from './utility/dom-util';\nimport { getAdornerLayerSvg, getSelectorElement, getGridLayerSvg, getBackgroundLayerSvg } from './utility/dom-util';\nimport { CommandManager, ContextMenuSettings } from './diagram/keyboard-commands';\nimport { canDelete, canInConnect, canOutConnect, canRotate, canVitualize } from './utility/constraints-util';\nimport { canResize, canSingleSelect, canZoomPan, canZoomTextEdit } from './utility/constraints-util';\nimport { canDragSourceEnd, canDragTargetEnd, canDragSegmentThumb, enableReadOnly, canMove } from './utility/constraints-util';\nimport { findAnnotation, arrangeChild } from './utility/diagram-util';\nimport { randomId, cloneObject, extendObject, getFunction, getBounds } from './utility/base-util';\nimport { DiagramTooltip, initTooltip } from './objects/tooltip';\nimport { PointPort } from './objects/port';\nimport { canShadow } from './utility/constraints-util';\nimport { Layer } from './diagram/layer';\nimport { DiagramNativeElement } from './core/elements/native-element';\nimport { DiagramHtmlElement } from './core/elements/html-element';\n/**\n * Represents the Diagram control\n * ```html\n *
    \n * ```\n * ```typescript\n * let diagram: Diagram = new Diagram({\n * width:'1000px', height:'500px' });\n * diagram.appendTo('#diagram');\n * ```\n */\nvar Diagram = /** @class */ (function (_super) {\n __extends(Diagram, _super);\n /**\n * Constructor for creating the widget\n */\n function Diagram(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.connectorTable = {};\n /** @private */\n _this.groupTable = {};\n /** @private */\n _this.activeLabel = { id: '', parentId: '', isGroup: false };\n /** @private */\n _this.textEditing = false;\n /** @private */\n _this.isTriggerEvent = false;\n /** @private */\n _this.preventNodesUpdate = false;\n /** @private */\n _this.preventConnectorsUpdate = false;\n /** @private */\n _this.selectionConnectorsList = [];\n _this.deleteVirtualObject = false;\n _this.renderTimer = null;\n var child;\n var node;\n for (var i = 0; options && options.nodes && i < options.nodes.length; i++) {\n child = options.nodes[i];\n node = _this.nodes[i];\n if (child.children && child.children.length > 0) {\n if (!child.style || !child.style.fill) {\n node.style.fill = 'transparent';\n }\n if (!child.style || !child.style.strokeColor) {\n node.style.strokeColor = 'transparent';\n }\n }\n }\n return _this;\n }\n Diagram.prototype.clearCollection = function (isConnector) {\n var collection = [];\n var obj;\n for (var _i = 0, _a = Object.keys(this.nameTable); _i < _a.length; _i++) {\n var key = _a[_i];\n obj = this.nameTable[key];\n if (obj && ((isConnector && obj instanceof Connector) || (!isConnector && obj instanceof Node))) {\n collection.push(obj);\n }\n }\n this.clearObjects(collection);\n };\n /**\n * Updates the diagram control when the objects are changed\n * @param newProp Lists the new values of the changed properties\n * @param oldProp Lists the old values of the changed properties\n */\n /* tslint:disable */\n Diagram.prototype.onPropertyChanged = function (newProp, oldProp) {\n // Model Changed\n var objectArray = [];\n var refreshLayout = false;\n var refereshColelction = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n case 'height':\n this.element.style.width = this.getSizeValue(this.width);\n this.element.style.height = this.getSizeValue(this.height);\n this.eventHandler.updateViewPortSize(this.element);\n for (var _b = 0, _c = this.views; _b < _c.length; _b++) {\n var view = _c[_b];\n var temp = this.views[view];\n if (!(temp instanceof Diagram)) {\n temp.updateView(temp);\n }\n }\n break;\n case 'nodes':\n if (newProp.nodes.length > 0 && oldProp.nodes.length === 0) {\n this.clearCollection();\n refereshColelction = true;\n }\n else {\n for (var _d = 0, _e = Object.keys(newProp.nodes); _d < _e.length; _d++) {\n var key = _e[_d];\n var index = Number(key);\n var actualObject = this.nodes[index];\n var changedProp = newProp.nodes[index];\n refreshLayout = refreshLayout || changedProp.excludeFromLayout !== undefined;\n this.nodePropertyChange(actualObject, oldProp.nodes[index], changedProp, undefined, true);\n objectArray.push(actualObject);\n }\n if (this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n }\n break;\n case 'connectors':\n var oldObject = void 0;\n if (newProp.connectors.length > 0 && oldProp.connectors.length === 0) {\n this.clearCollection(true);\n refereshColelction = true;\n }\n else {\n for (var _f = 0, _g = Object.keys(newProp.connectors); _f < _g.length; _f++) {\n var key = _g[_f];\n var index = Number(key);\n var actualObject = this.connectors[index];\n var changedProp = newProp.connectors[index];\n this.connectorPropertyChange(actualObject, oldProp.connectors[index], changedProp, true);\n objectArray.push(actualObject);\n }\n this.updateBridging();\n if (this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n }\n break;\n case 'bridgeDirection':\n this.updateBridging();\n if (this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n break;\n case 'backgroundColor':\n this.intOffPageBackground();\n break;\n case 'pageSettings':\n this.validatePageSize();\n this.updatePage();\n break;\n case 'selectedItems':\n if (newProp.selectedItems.userHandles && this.selectedItems.wrapper && this.selectedItems.userHandles) {\n if (this.selectedItems.userHandles.length > 0) {\n this.renderSelector(true);\n break;\n }\n }\n if (newProp.selectedItems.constraints) {\n this.renderSelector(true);\n break;\n }\n break;\n case 'snapSettings':\n this.updateSnapSettings(newProp);\n break;\n case 'commandManager':\n this.initCommands();\n break;\n case 'layout':\n refreshLayout = true;\n break;\n case 'dataSourceSettings':\n this.clear();\n this.initObjects();\n refreshLayout = true;\n break;\n case 'tooltip':\n initTooltip(this);\n break;\n case 'rulerSettings':\n this.updateRulerSettings(newProp);\n break;\n case 'layers':\n this.updateLayer(newProp);\n break;\n case 'scrollSettings':\n this.updateScrollSettings(newProp);\n break;\n case 'locale':\n this.realActions |= RealAction.PreventDataInit;\n _super.prototype.refresh.call(this);\n this.realActions &= ~RealAction.PreventDataInit;\n break;\n }\n }\n if (refreshLayout) {\n this.doLayout();\n }\n var args = { element: objectArray, cause: this.diagramActions, oldValue: oldProp, newValue: newProp };\n this.triggerEvent(DiagramEvent.propertyChange, args);\n if (!refereshColelction && (this.canLogChange()) && (this.modelChanged(newProp, oldProp))) {\n var entry = { type: 'PropertyChanged', undoObject: oldProp, redoObject: newProp, category: 'Internal' };\n this.addHistoryEntry(entry);\n }\n this.resetDiagramActions();\n if (refereshColelction) {\n this.initObjects(true);\n this.refreshDiagramLayer();\n }\n };\n /* tslint:enable */\n Diagram.prototype.updateSnapSettings = function (newProp) {\n if (newProp.snapSettings.constraints !== undefined || newProp.snapSettings.horizontalGridlines ||\n newProp.snapSettings.verticalGridlines) {\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n }\n };\n Diagram.prototype.updateRulerSettings = function (newProp) {\n if (newProp.rulerSettings.dynamicGrid !== undefined) {\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n }\n if (newProp.rulerSettings.showRulers !== undefined) {\n this.intOffPageBackground();\n this.scroller.setSize();\n this.renderRulers();\n }\n else if (newProp.rulerSettings.horizontalRuler !== undefined ||\n newProp.rulerSettings.verticalRuler !== undefined) {\n if (newProp.rulerSettings.horizontalRuler.thickness !== undefined ||\n newProp.rulerSettings.verticalRuler.thickness !== undefined) {\n removeRulerElements(this);\n this.intOffPageBackground();\n this.scroller.setSize();\n this.renderRulers();\n }\n else {\n updateRuler(this);\n }\n }\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n Diagram.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initialize nodes, connectors and renderer\n */\n Diagram.prototype.preRender = function () {\n this.initializePrivateVariables();\n this.isProtectedOnChange = true;\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.setCulture();\n this.initDiagram();\n this.initViews();\n this.unWireEvents();\n this.wireEvents();\n this.element.classList.add('e-diagram');\n };\n Diagram.prototype.initializePrivateVariables = function () {\n this.defaultLocale = {\n Copy: 'Copy',\n Cut: 'Cut',\n Paste: 'Paste',\n Undo: 'Undo',\n Redo: 'Redo',\n SelectAll: 'Select All',\n Grouping: 'Grouping',\n Group: 'Group',\n UnGroup: 'Un Group',\n Order: 'Order',\n BringToFront: 'Bring To Front',\n MoveForward: 'Move Forward',\n SendToBack: 'Send To Back',\n SendBackward: 'Send Backward'\n };\n this.layerZIndex = -1;\n this.layerZIndexTable = {};\n this.nameTable = {};\n this.groupTable = {};\n this.commands = {};\n if (!this.isLoading) {\n this.views = [];\n }\n this.commandHandler = new CommandHandler(this);\n this.eventHandler = new DiagramEventHandler(this, this.commandHandler);\n this.spatialSearch = new SpatialSearch(this.nameTable);\n this.scroller = new DiagramScroller(this);\n };\n Diagram.prototype.initializeServices = function () {\n this.serviceLocator.register('localization', this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale));\n };\n /**\n * Method to set culture for chart\n */\n Diagram.prototype.setCulture = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n };\n /**\n * Renders the diagram control with nodes and connectors\n */\n Diagram.prototype.render = function () {\n this.initHistory();\n this.diagramRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), this.mode === 'SVG');\n this.initLayers();\n this.initializeDiagramLayers();\n this.diagramRenderer.setLayers();\n this.initObjects(true);\n this.doLayout();\n this.validatePageSize();\n this.renderPageBreaks();\n this.diagramRenderer.renderSvgGridlines(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n this.commandHandler.initSelectorWrapper();\n /**\n * Used to render context menu\n */\n this.notify('initial-load', {});\n /**\n * Used to load context menu\n */\n this.trigger('load');\n this.scroller.setSize();\n this.scroller.updateScrollOffsets();\n this.refreshDiagramLayer();\n /**\n * Used to end the context menu rendering\n */\n if (Browser.isDevice) {\n this.tool = DiagramTools.ZoomPan | DiagramTools.SingleSelect;\n }\n this.notify('initial-end', {});\n this.isProtectedOnChange = false;\n this.tooltipObject = initTooltip(this);\n this.diagramActions = DiagramAction.Render;\n this.initCommands();\n this.isLoading = false;\n };\n /**\n * Returns the module name of the diagram\n */\n Diagram.prototype.getModuleName = function () {\n return 'diagram';\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Diagram.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'Bpmn',\n args: []\n });\n modules.push({\n member: 'Bridging',\n args: []\n });\n modules.push({\n member: 'ConnectorEditingTool',\n args: []\n });\n if (this.constraints & DiagramConstraints.UndoRedo) {\n modules.push({\n member: 'UndoRedo',\n args: []\n });\n }\n if (this.layout.type === 'OrganizationalChart' || this.layout.type === 'HierarchicalTree' ||\n this.layout.enableAnimation) {\n modules.push({\n member: 'LayoutAnimate',\n args: []\n });\n }\n if (this.snapSettings.constraints) {\n modules.push({\n member: 'Snapping',\n args: [this]\n });\n }\n modules.push({\n member: 'PrintandExport',\n args: [this]\n });\n if (this.contextMenuSettings.show) {\n modules.push({\n member: 'contextMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.layout.type === 'OrganizationalChart' || this.layout.type === 'HierarchicalTree') {\n modules.push({\n member: 'OrganizationalChart',\n args: []\n });\n }\n if (this.layout.type === 'ComplexHierarchicalTree') {\n modules.push({\n member: 'ComplexHierarchicalTree',\n args: []\n });\n }\n if (this.layout.type === 'MindMap') {\n modules.push({\n member: 'MindMapChart',\n args: []\n });\n }\n if (this.layout.type === 'RadialTree') {\n modules.push({\n member: 'RadialTree',\n args: []\n });\n }\n if (this.layout.type === 'SymmetricalLayout') {\n modules.push({\n member: 'SymmetricalLayout',\n args: []\n });\n }\n if (this.dataSourceSettings.dataManager || this.dataSourceSettings.data) {\n modules.push({\n member: 'DataBinding',\n args: []\n });\n }\n return modules;\n };\n /**\n * Destroys the diagram control\n */\n Diagram.prototype.destroy = function () {\n clearInterval(this.renderTimer);\n this.renderTimer = null;\n if (this.hRuler && this.vRuler) {\n this.hRuler.destroy();\n this.vRuler.destroy();\n }\n this.tooltipObject.destroy();\n this.droppable.destroy();\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n if (document.getElementById(this.element.id)) {\n this.element.classList.remove('e-diagram');\n var tooltipelement = document.getElementsByClassName('e-tooltip-wrap');\n while (tooltipelement.length > 0) {\n tooltipelement[0].parentNode.removeChild(tooltipelement[0]);\n }\n var content = document.getElementById(this.element.id + 'content');\n if (content) {\n this.element.removeChild(content);\n }\n var measureElement = 'measureElement';\n if (window[measureElement]) {\n window[measureElement].usageCount -= 1;\n if (window[measureElement].usageCount === 0) {\n window[measureElement].parentNode.removeChild(window[measureElement]);\n window[measureElement] = null;\n }\n }\n }\n };\n /**\n * Wires the mouse events with diagram control\n */\n Diagram.prototype.wireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var stopEvent = Browser.touchEndEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n EventHandler.add(this.diagramCanvas, startEvent, this.eventHandler.mouseDown, this.eventHandler);\n EventHandler.add(this.diagramCanvas, moveEvent, this.eventHandler.mouseMove, this.eventHandler);\n EventHandler.add(this.diagramCanvas, stopEvent, this.eventHandler.mouseUp, this.eventHandler);\n EventHandler.add(this.diagramCanvas, cancelEvent, this.eventHandler.mouseLeave, this.eventHandler);\n EventHandler.add(this.diagramCanvas, 'keydown', this.eventHandler.keyDown, this.eventHandler);\n EventHandler.add(this.diagramCanvas, 'dblclick', this.eventHandler.doubleClick, this.eventHandler);\n EventHandler.add(this.diagramCanvas, 'scroll', this.eventHandler.scrolled, this.eventHandler);\n EventHandler.add(this.diagramCanvas, wheelEvent, this.eventHandler.mouseWheel, this.eventHandler);\n EventHandler.add(window, 'resize', this.eventHandler.windowResize, this.eventHandler);\n this.initDroppables();\n };\n /**\n * Unwires the mouse events from diagram control\n */\n Diagram.prototype.unWireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n var stopEvent = Browser.touchEndEvent;\n EventHandler.remove(this.diagramCanvas, startEvent, this.eventHandler.mouseDown);\n EventHandler.remove(this.diagramCanvas, moveEvent, this.eventHandler.mouseMove);\n EventHandler.remove(this.diagramCanvas, stopEvent, this.eventHandler.mouseUp);\n EventHandler.remove(this.diagramCanvas, cancelEvent, this.eventHandler.mouseLeave);\n EventHandler.remove(this.diagramCanvas, 'keydown', this.eventHandler.keyDown);\n EventHandler.remove(this.diagramCanvas, 'dblclick', this.eventHandler.doubleClick);\n EventHandler.remove(this.diagramCanvas, 'scroll', this.eventHandler.scrolled);\n EventHandler.remove(this.diagramCanvas, wheelEvent, this.eventHandler.mouseWheel);\n EventHandler.remove(window, 'resize', this.eventHandler.windowResize);\n };\n //public methods - start region\n /**\n * Selects the given collection of objects\n * @param objects Defines the collection of nodes and connectors to be selected\n * @param multipleSelection Defines whether the existing selection has to be cleared or not\n */\n Diagram.prototype.select = function (objects, multipleSelection) {\n if (objects != null) {\n this.commandHandler.selectObjects(objects, multipleSelection);\n }\n };\n /**\n * Selects the all the objects.\n */\n Diagram.prototype.selectAll = function () {\n var selectedItems = [];\n selectedItems = this.getObjectsOfLayer(this.activeLayer.objects);\n this.select(selectedItems);\n };\n /**\n * Removes the given object from selection list\n * @param obj Defines the object to be unselected\n */\n Diagram.prototype.unSelect = function (obj) {\n if (obj && isSelected(this, obj)) {\n this.commandHandler.unSelect(obj);\n }\n };\n /**\n * Removes all elements from the selection list\n */\n Diagram.prototype.clearSelection = function () {\n this.commandHandler.clearSelection(true);\n };\n /**\n * Update the diagram clipboard dimension\n */\n Diagram.prototype.updateViewPort = function () {\n this.eventHandler.updateViewPortSize(this.element);\n };\n Diagram.prototype.cutCommand = function () {\n this.cut();\n };\n /**\n * Removes the selected nodes and connectors from diagram and moves them to diagram clipboard\n */\n Diagram.prototype.cut = function () {\n this.commandHandler.cut();\n };\n /**\n * Add a process into the sub-process\n */\n Diagram.prototype.addProcess = function (process, parentId) {\n if (this.bpmnModule) {\n this.bpmnModule.addProcess(process, parentId, this);\n }\n };\n /**\n * Remove a process from the sub-process\n */\n Diagram.prototype.removeProcess = function (id) {\n if (this.bpmnModule) {\n this.bpmnModule.removeProcess(id, this);\n }\n };\n Diagram.prototype.pasteCommand = function () {\n this.paste();\n };\n /**\n * Adds the given objects/ the objects in the diagram clipboard to diagram control\n * @param obj Defines the objects to be added to diagram\n */\n Diagram.prototype.paste = function (obj) {\n this.commandHandler.paste(obj);\n };\n /**\n * fit the diagram to the page with respect to mode and region\n */\n Diagram.prototype.fitToPage = function (options) {\n this.scroller.fitToPage(options);\n };\n /**\n * bring the specified bounds into the viewport\n */\n Diagram.prototype.bringIntoView = function (bound) {\n this.scroller.bringIntoView(bound);\n };\n /**\n * bring the specified bounds to the center of the viewport\n */\n Diagram.prototype.bringToCenter = function (bound) {\n this.scroller.bringToCenter(bound);\n };\n Diagram.prototype.copyCommand = function () {\n this.copy();\n };\n /**\n * Copies the selected nodes and connectors to diagram clipboard\n */\n Diagram.prototype.copy = function () {\n var obj = this.commandHandler.copy();\n return obj;\n };\n /**\n * Group the selected nodes and connectors in diagram\n */\n Diagram.prototype.group = function () {\n this.commandHandler.group();\n };\n /**\n * UnGroup the selected nodes and connectors in diagram\n */\n Diagram.prototype.unGroup = function () {\n this.commandHandler.unGroup();\n };\n /**\n * send the selected nodes or connectors back\n */\n Diagram.prototype.sendToBack = function () {\n this.commandHandler.sendToBack();\n };\n /**\n * set the active layer\n * @param layerName defines the name of the layer which is to be active layer\n */\n Diagram.prototype.setActiveLayer = function (layerName) {\n var layer = this.commandHandler.getLayer(layerName);\n this.activeLayer = layer;\n };\n /**\n * add the layer into diagram\n * @param layer defines the layer model which is to be added\n * @param layerObject defines the object of the layer\n */\n Diagram.prototype.addLayer = function (layer, layerObject) {\n this.commandHandler.addLayer(layer, layerObject);\n };\n /**\n * remove the layer from diagram\n * @param layerId define the id of the layer\n */\n Diagram.prototype.removeLayer = function (layerId) {\n this.commandHandler.removeLayer(layerId);\n };\n /**\n * move objects from the layer to another layer from diagram\n * @param objects define the objects id of string array\n */\n Diagram.prototype.moveObjects = function (objects, targetLayer) {\n this.commandHandler.moveObjects(objects, targetLayer);\n };\n /**\n * move the layer backward\n * @param layerName define the name of the layer\n */\n Diagram.prototype.sendLayerBackward = function (layerName) {\n this.commandHandler.sendLayerBackward(layerName);\n };\n /**\n * move the layer forward\n * @param layerName define the name of the layer\n */\n Diagram.prototype.bringLayerForward = function (layerName) {\n this.commandHandler.bringLayerForward(layerName);\n };\n /**\n * clone a layer with its object\n * @param layerName define the name of the layer\n */\n Diagram.prototype.cloneLayer = function (layerName) {\n this.commandHandler.cloneLayer(layerName);\n };\n /**\n * bring the selected nodes or connectors to front\n */\n Diagram.prototype.bringToFront = function () {\n this.commandHandler.bringToFront();\n };\n /**\n * send the selected nodes or connectors forward\n */\n Diagram.prototype.moveForward = function () {\n this.commandHandler.sendForward();\n };\n /**\n * send the selected nodes or connectors back\n */\n Diagram.prototype.sendBackward = function () {\n this.commandHandler.sendBackward();\n };\n /**\n * gets the node or connector having the given name\n */\n Diagram.prototype.getObject = function (name) {\n return this.nameTable[name];\n };\n /**\n * gets the active layer back\n */\n Diagram.prototype.getActiveLayer = function () {\n return this.activeLayer;\n };\n Diagram.prototype.nudgeCommand = function (direction, x, y) {\n if (typeof direction !== 'object') {\n this.nudge(direction);\n }\n };\n /**\n * Moves the selected objects towards the given direction\n * @param direction Defines the direction by which the objects have to be moved\n * @param x Defines the distance by which the selected objects have to be horizontally moved\n * @param y Defines the distance by which the selected objects have to be vertically moved\n */\n Diagram.prototype.nudge = function (direction, x, y) {\n var tx = 0;\n var ty = 0;\n var negativeDirection;\n if (direction === 'Left' || direction === 'Right') {\n negativeDirection = (direction === 'Left');\n tx = (negativeDirection ? -1 : 1) * (x ? x : 1);\n }\n else {\n negativeDirection = (direction === 'Up');\n ty = (negativeDirection ? -1 : 1) * (y ? y : 1);\n }\n var obj = this.selectedItems;\n this.drag(obj, tx, ty);\n };\n /**\n * Drags the given object by the specified pixels\n * @param obj Defines the nodes/connectors to be dragged\n * @param tx Defines the distance by which the given objects have to be horizontally moved\n * @param ty Defines the distance by which the given objects have to be vertically moved\n */\n Diagram.prototype.drag = function (obj, tx, ty) {\n if (this.bpmnModule && (obj instanceof Node)) {\n var updated = this.bpmnModule.updateAnnotationDrag(obj, this, tx, ty);\n if (updated) {\n return;\n }\n }\n if (obj instanceof Selector) {\n this.preventConnectorsUpdate = true;\n if (obj.nodes && obj.nodes.length) {\n for (var _i = 0, _a = obj.nodes; _i < _a.length; _i++) {\n var node = _a[_i];\n this.drag(node, tx, ty);\n }\n }\n if (obj.connectors && obj.connectors.length) {\n for (var _b = 0, _c = obj.connectors; _b < _c.length; _b++) {\n var conn = _c[_b];\n this.drag(conn, tx, ty);\n if (this.selectionConnectorsList.indexOf(conn) === -1) {\n this.selectionConnectorsList.push(conn);\n }\n }\n }\n this.updateSelector();\n }\n else {\n if (obj instanceof Node) {\n if (this.bpmnModule) {\n this.bpmnModule.updateAnnotationDrag(obj, this, tx, ty);\n }\n }\n this.commandHandler.drag(obj, tx, ty);\n }\n if (obj instanceof Selector) {\n this.preventConnectorsUpdate = false;\n for (var _d = 0, _e = this.selectionConnectorsList; _d < _e.length; _d++) {\n var connectors = _e[_d];\n this.updateConnectorProperties(this.nameTable[connectors.id]);\n }\n this.selectionConnectorsList = [];\n }\n if (!(this.diagramActions & DiagramAction.ToolAction)) {\n this.updateSelector();\n }\n if (this.mode === 'Canvas') {\n for (var _f = 0, _g = this.views; _f < _g.length; _f++) {\n var temp = _g[_f];\n var view = void 0;\n view = this.views[temp];\n this.refreshCanvasDiagramLayer(view);\n }\n }\n };\n /**\n * Scales the given objects by the given ratio\n * @param obj Defines the objects to be resized\n * @param sx Defines the ratio by which the objects have to be horizontally scaled\n * @param sy Defines the ratio by which the objects have to be vertically scaled\n * @param pivot Defines the reference point with respect to which the objects will be resized\n */\n Diagram.prototype.scale = function (obj, sx, sy, pivot) {\n var checkBoundaryConstraints = true;\n if (obj instanceof Selector) {\n if (obj.nodes && obj.nodes.length) {\n for (var _i = 0, _a = obj.nodes; _i < _a.length; _i++) {\n var node = _a[_i];\n checkBoundaryConstraints = this.commandHandler.scale(node, sx, sy, pivot, obj);\n }\n }\n if (obj.connectors && obj.connectors.length) {\n for (var _b = 0, _c = obj.connectors; _b < _c.length; _b++) {\n var conn = _c[_b];\n this.commandHandler.scale(conn, sx, sy, pivot, obj);\n }\n }\n this.updateSelector();\n }\n else {\n this.commandHandler.scale(obj, sx, sy, pivot, (obj.children ? obj : undefined));\n }\n return checkBoundaryConstraints;\n };\n /**\n * Rotates the given nodes/connectors by the given angle\n * @param obj Defines the objects to be rotated\n * @param angle Defines the angle by which the objects have to be rotated\n * @param pivot Defines the reference point with reference to which the objects have to be rotated\n */\n Diagram.prototype.rotate = function (obj, angle, pivot) {\n var checkBoundaryConstraints;\n if (obj) {\n pivot = pivot || { x: obj.wrapper.offsetX, y: obj.wrapper.offsetY };\n if (obj instanceof Selector) {\n obj.rotateAngle += angle;\n obj.wrapper.rotateAngle += angle;\n var bounds = getBounds(obj.wrapper);\n checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, bounds);\n if (!checkBoundaryConstraints) {\n obj.rotateAngle -= angle;\n obj.wrapper.rotateAngle -= angle;\n return checkBoundaryConstraints;\n }\n var objects = [];\n objects = objects.concat(obj.nodes);\n objects = objects.concat(obj.connectors);\n this.commandHandler.rotateObjects(obj, objects, angle, pivot);\n }\n else {\n this.commandHandler.rotateObjects(obj, [obj], angle, pivot);\n }\n }\n return checkBoundaryConstraints;\n };\n /**\n * Moves the source point of the given connector\n * @param obj Defines the connector, the end points of which has to be moved\n * @param tx Defines the distance by which the end point has to be horizontally moved\n * @param ty Defines the distance by which the end point has to be vertically moved\n */\n Diagram.prototype.dragSourceEnd = function (obj, tx, ty) {\n this.commandHandler.dragSourceEnd(obj, tx, ty);\n };\n /**\n * Moves the target point of the given connector\n * @param obj Defines the connector, the end points of which has to be moved\n * @param tx Defines the distance by which the end point has to be horizontally moved\n * @param ty Defines the distance by which the end point has to be vertically moved\n */\n Diagram.prototype.dragTargetEnd = function (obj, tx, ty) {\n this.commandHandler.dragTargetEnd(obj, tx, ty);\n };\n /**\n * Finds all the objects that is under the given mouse position\n * @param position Defines the position, the objects under which has to be found\n * @param source Defines the object, the objects under which has to be found\n */\n Diagram.prototype.findObjectsUnderMouse = function (position, source) {\n return this.eventHandler.findObjectsUnderMouse(position, source);\n };\n /**\n * Finds the object that is under the given mouse position\n * @param objects Defines the collection of objects, from which the object has to be found.\n * @param action Defines the action, using which the relevant object has to be found.\n * @param inAction Defines the active state of the action.\n */\n Diagram.prototype.findObjectUnderMouse = function (objects, action, inAction) {\n return this.eventHandler.findObjectUnderMouse(objects, action, inAction);\n };\n /**\n * Finds the object that is under the given active object (Source)\n * @param objects Defines the collection of objects, from which the object has to be found.\n * @param action Defines the action, using which the relevant object has to be found.\n * @param inAction Defines the active state of the action.\n */\n Diagram.prototype.findTargetObjectUnderMouse = function (objects, action, inAction, position, source) {\n return this.eventHandler.findTargetUnderMouse(objects, action, inAction, position, source);\n };\n /**\n * Finds the child element of the given object at the given position\n * @param obj Defines the object, the child element of which has to be found\n * @param position Defines the position, the child element under which has to be found\n */\n Diagram.prototype.findElementUnderMouse = function (obj, position) {\n return this.eventHandler.findElementUnderMouse(obj, position);\n };\n /**\n * Defines the action to be done, when the mouse hovers the given element of the given object\n * @param obj Defines the object under mouse\n * @param wrapper Defines the target element of the object under mouse\n * @param position Defines the current mouse position\n * @private\n */\n Diagram.prototype.findActionToBeDone = function (obj, wrapper, position, target) {\n return this.eventHandler.findActionToBeDone(obj, wrapper, position, target);\n };\n /**\n * Returns the tool that handles the given action\n * @param action Defines the action that is going to be performed\n */\n Diagram.prototype.getTool = function (action) {\n var tool;\n var getCustomTool = getFunction(this.getCustomTool);\n if (getCustomTool) {\n tool = getCustomTool(action);\n if (tool) {\n return tool;\n }\n }\n return this.eventHandler.getTool(action);\n };\n /**\n * Defines the cursor that corresponds to the given action\n * @param action Defines the action that is going to be performed\n */\n Diagram.prototype.getCursor = function (action, active) {\n var cursor;\n var getCustomCursor = getFunction(this.getCustomCursor);\n if (getCustomCursor) {\n cursor = getCustomCursor(action, active);\n if (cursor) {\n return cursor;\n }\n }\n return this.eventHandler.getCursor(action);\n };\n /**\n * Initializes the undo redo actions\n * @private\n */\n Diagram.prototype.initHistory = function () {\n if (this.undoRedoModule) {\n this.undoRedoModule.initHistory(this);\n }\n };\n /**\n * Adds the given change in the diagram control to the track\n * @param entry Defines the entry/information about a change in diagram\n */\n Diagram.prototype.addHistoryEntry = function (entry) {\n if (this.undoRedoModule && (this.constraints & DiagramConstraints.UndoRedo) && !this.currentSymbol) {\n this.undoRedoModule.addHistoryEntry(entry, this);\n if (entry.type !== 'StartGroup' && entry.type !== 'EndGroup') {\n this.historyChangeTrigger(entry);\n }\n }\n };\n /** @private */\n Diagram.prototype.historyChangeTrigger = function (entry) {\n var change = {};\n var oldValue = 'oldValue';\n var newValue = 'newValue';\n var type = 'type';\n var source = [];\n if (entry && entry.redoObject && ((entry.redoObject.nodes) instanceof Array) &&\n ((entry.redoObject.connectors) instanceof Array)) {\n source = entry.redoObject.nodes.concat(entry.redoObject.connectors);\n }\n else {\n if (entry.redoObject) {\n source.push(entry.redoObject);\n }\n }\n change[type] = entry.type;\n switch (entry.type) {\n case 'PositionChanged':\n change[oldValue] = { offsetX: entry.undoObject.offsetX, offsetY: entry.undoObject.offsetY };\n change[newValue] = { offsetX: entry.redoObject.offsetX, offsetY: entry.redoObject.offsetY };\n break;\n case 'RotationChanged':\n change[oldValue] = { rotateAngle: entry.undoObject.rotateAngle };\n change[newValue] = { rotateAngle: entry.redoObject.rotateAngle };\n break;\n case 'SizeChanged':\n change[oldValue] = {\n offsetX: entry.undoObject.offsetX, offsetY: entry.undoObject.offsetY,\n width: entry.undoObject.width, height: entry.undoObject.height\n };\n change[newValue] = {\n offsetX: entry.redoObject.offsetX, offsetY: entry.redoObject.offsetY,\n width: entry.redoObject.width, height: entry.redoObject.height\n };\n break;\n case 'CollectionChanged':\n change[entry.changeType] = source;\n break;\n case 'ConnectionChanged':\n change[oldValue] = { offsetX: entry.undoObject.offsetX, offsetY: entry.undoObject.offsetY };\n change[newValue] = { offsetX: entry.redoObject.offsetX, offsetY: entry.redoObject.offsetY };\n break;\n }\n var arg = {\n cause: entry.category, source: source, change: change\n };\n if (source.length) {\n this.triggerEvent(DiagramEvent.historyChange, arg);\n }\n };\n /**\n * Starts grouping the actions that will be undone/restored as a whole\n */\n Diagram.prototype.startGroupAction = function () {\n var entry = { type: 'StartGroup', category: 'Internal' };\n this.addHistoryEntry(entry);\n };\n /**\n * Closes grouping the actions that will be undone/restored as a whole\n */\n Diagram.prototype.endGroupAction = function () {\n var entry = { type: 'EndGroup', category: 'Internal' };\n this.addHistoryEntry(entry);\n };\n /**\n * Restores the last action that is performed\n */\n Diagram.prototype.undo = function () {\n if (this.undoRedoModule && (this.constraints & DiagramConstraints.UndoRedo)) {\n this.undoRedoModule.undo(this);\n }\n };\n /**\n * Restores the last undone action\n */\n Diagram.prototype.redo = function () {\n if (this.undoRedoModule && (this.constraints & DiagramConstraints.UndoRedo)) {\n this.undoRedoModule.redo(this);\n }\n };\n /**\n * Aligns the group of objects to with reference to the first object in the group\n * @param objects Defines the objects that have to be aligned\n * @param option Defines the factor, by which the objects have to be aligned\n */\n Diagram.prototype.align = function (option, objects, type) {\n if (!objects) {\n objects = [];\n objects = objects.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n this.commandHandler.align(objects, option, (type ? type : 'Object'));\n };\n /**\n * Arranges the group of objects with equal intervals, but within the group of objects\n * @param objects Defines the objects that have to be equally spaced\n * @param option Defines the factor to distribute the shapes\n */\n Diagram.prototype.distribute = function (option, objects) {\n if (!objects) {\n objects = [];\n objects = objects.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n this.commandHandler.distribute(objects, option);\n };\n /**\n * Scales the given objects to the size of the first object in the group\n * @param objects Defines the collection of objects that have to be scaled\n * @param option Defines whether the node has to be horizontally scaled, vertically scaled or both\n */\n Diagram.prototype.sameSize = function (option, objects) {\n if (!objects) {\n objects = [];\n objects = objects.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n this.commandHandler.sameSize(objects, option);\n };\n /**\n * Scales the diagram control by the given factor\n * @param factor Defines the factor by which the diagram is zoomed\n * @param focusedPoint Defines the point with respect to which the diagram has to be zoomed\n */\n Diagram.prototype.zoom = function (factor, focusedPoint) {\n this.scroller.zoom(factor, 0, 0, focusedPoint);\n };\n /**\n * Scales the diagram control by the given factor\n * @param options used to define the zoom factor, focus point and zoom type.\n *\n */\n Diagram.prototype.zoomTo = function (options) {\n var factor = options.zoomFactor ? options.zoomFactor : 0.2;\n factor = options.type === 'ZoomOut' ? 1 / (1 + factor) : (1 + factor);\n this.scroller.zoom(factor, 0, 0, options.focusPoint);\n };\n /**\n * Pans the diagram control to the given horizontal and vertical offsets\n * @param horizontalOffset Defines the horizontal distance to which the diagram has to be scrolled\n * @param verticalOffset Defines the vertical distance to which the diagram has to be scrolled\n */\n Diagram.prototype.pan = function (horizontalOffset, verticalOffset, focusedPoint) {\n this.scroller.zoom(1, horizontalOffset, verticalOffset, focusedPoint);\n };\n /**\n * Resets the zoom and scroller offsets to default values\n */\n Diagram.prototype.reset = function () {\n this.scroller.zoom(1 / this.scroller.currentZoom, -this.scroller.horizontalOffset, -this.scroller.verticalOffset, { x: 0, y: 0 });\n };\n /** @private */\n Diagram.prototype.triggerEvent = function (eventName, args) {\n if (args) {\n this.updateEventValue(args);\n }\n this.trigger(DiagramEvent[eventName], args);\n };\n Diagram.prototype.updateEventValue = function (args) {\n var element = args.element;\n if (args.element && element instanceof Selector && (element.nodes.length + element.connectors.length === 1)) {\n args.element = (element.nodes.length === 1) ? element.nodes[0] : element.connectors[0];\n }\n };\n /**\n * Adds the given object to diagram control\n * @param obj Defines the object that has to be added to diagram\n */\n Diagram.prototype.add = function (obj, group) {\n var newObj;\n if (obj) {\n obj = cloneObject(obj);\n var args = {\n element: obj, cause: this.diagramActions, state: 'Changing', type: 'Addition', cancel: false\n };\n this.triggerEvent(DiagramEvent.collectionChange, args);\n var activeLayer = void 0;\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n obj.id = obj.id || randomId();\n var layers = this.activeLayer;\n if (!args.cancel && !layers.lock) {\n if (layers.objects.indexOf(obj.id) < 0 && !layers.lock) {\n if (!layers.visible) {\n layers.visible = true;\n this.dataBind();\n }\n layers.objects.push(obj.id);\n }\n if (getObjectType(obj) === Connector) {\n newObj = new Connector(this, 'connectors', obj, true);\n this.connectors.push(newObj);\n this.initObject(newObj);\n if (obj.visible === false) {\n this.updateElementVisibility(newObj.wrapper, newObj, obj.visible);\n }\n this.updateEdges(newObj);\n }\n else {\n newObj = new Node(this, 'nodes', obj, true);\n // newObj.processId = (obj as Node).processId;\n this.nodes.push(newObj);\n this.initObject(newObj, layers, undefined, group);\n if (this.bpmnModule) {\n if (newObj.shape.annotations && newObj.shape.annotations.length !== 0) {\n for (var _i = 0, _a = this.bpmnModule.getTextAnnotationConn(newObj); _i < _a.length; _i++) {\n var obj_1 = _a[_i];\n this.initConnectors(obj_1, layers, false);\n }\n }\n if (newObj.shape.activity && newObj.shape.activity.subProcess.processes &&\n newObj.shape.activity.subProcess.processes.length) {\n this.bpmnModule.updateDocks(newObj, this);\n }\n }\n }\n args = {\n element: newObj, cause: this.diagramActions, state: 'Changed', type: 'Addition', cancel: false\n };\n this.triggerEvent(DiagramEvent.collectionChange, args);\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'CollectionChanged', changeType: 'Insert', undoObject: cloneObject(obj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n if (this.mode === 'SVG') {\n this.updateSvgNodes(newObj);\n this.updateDiagramObject(newObj);\n if (newObj.shape.activity && newObj.shape.activity.subProcess.processes &&\n newObj.shape.activity.subProcess.processes.length) {\n this.updateProcesses(newObj);\n }\n this.updateBridging();\n }\n }\n }\n this.resetDiagramActions(DiagramAction.PublicMethod);\n return newObj;\n };\n Diagram.prototype.updateSvgNodes = function (node) {\n if (node.children) {\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n var j = _a[_i];\n if (this.nameTable[j] && this.nameTable[j].parentId) {\n var child = getDiagramElement(j + '_groupElement', this.element.id);\n child.parentNode.removeChild(child);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.updateProcesses = function (node) {\n if (this.bpmnModule && node && node.shape && node.shape.activity &&\n node.shape.activity.subProcess.processes &&\n node.shape.activity.subProcess.processes.length) {\n var processes = node.shape.activity.subProcess.processes;\n this.moveSvgNode(node.id);\n for (var _i = 0, processes_1 = processes; _i < processes_1.length; _i++) {\n var j = processes_1[_i];\n this.moveSvgNode(j);\n var edges = [];\n edges = edges.concat(this.nameTable[j].outEdges, this.nameTable[j].inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n this.moveSvgNode(edges[i]);\n }\n }\n for (var _a = 0, processes_2 = processes; _a < processes_2.length; _a++) {\n var j = processes_2[_a];\n if (this.nameTable[j].shape.activity.subProcess.processes &&\n this.nameTable[j].shape.activity.subProcess.processes.length) {\n this.updateProcesses(this.nameTable[j]);\n }\n }\n }\n else {\n this.moveSvgNode(node.id);\n }\n };\n /** @private */\n Diagram.prototype.moveSvgNode = function (nodeId) {\n var child = getDiagramElement(nodeId + '_groupElement', this.element.id);\n var parent = child.parentElement;\n child.parentNode.removeChild(child);\n parent.appendChild(child);\n };\n /**\n * Adds the given annotation to the given node\n * @param annotation Defines the annotation to be added\n * @param node Defines the node to which the annotation has to be added\n */\n Diagram.prototype.addTextAnnotation = function (annotation, node) {\n if (this.bpmnModule) {\n var connector = this.bpmnModule.addAnnotation(node, annotation, this);\n this.initConnectors(connector, this.commandHandler.getObjectLayer(node.id), false);\n this.updateDiagramObject(node);\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'CollectionChanged', changeType: 'Insert', undoObject: cloneObject(annotation),\n redoObject: cloneObject(annotation), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n }\n };\n /**\n * Splice the InEdge and OutEdge of the for the node with respect to corresponding connectors that is deleting\n */\n Diagram.prototype.spliceConnectorEdges = function (connector, isSource) {\n var node;\n var edges = [];\n node = isSource ? this.nameTable[connector.sourceID] : this.nameTable[connector.targetID];\n if (node) {\n edges = isSource ? node.outEdges : node.inEdges;\n for (var i = edges.length - 1; i >= 0; i--) {\n if (edges[i] === connector.id) {\n edges.splice(i, 1);\n }\n }\n }\n };\n /**\n * Remove the dependent connectors if the node is deleted\n * @private\n */\n Diagram.prototype.removeDependentConnector = function (node) {\n var connector;\n var edges = [];\n edges = edges.concat(node.outEdges, node.inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n connector = this.nameTable[edges[i]];\n if (connector) {\n this.connectorTable[connector.id] = cloneObject(connector);\n this.remove(connector);\n }\n }\n };\n Diagram.prototype.removeObjectsFromLayer = function (obj) {\n var layer = this.layers.indexOf(this.commandHandler.getObjectLayer(obj.id));\n var objects = this.layers[layer].objects;\n var objIndex = objects.indexOf(obj.id);\n if (objIndex > -1) {\n if (isSelected(this, obj)) {\n this.unSelect(obj);\n }\n this.layers[layer].objects.splice(objIndex, 1);\n delete this.layers[layer].zIndexTable[this.nameTable[obj.id].zIndex];\n }\n };\n Diagram.prototype.removeElements = function (currentObj) {\n if (this.mode === 'SVG' || (this.mode === 'Canvas' && currentObj.shape.type === 'Native')) {\n var removeElement_1 = getDiagramElement(currentObj.id + '_groupElement', this.element.id);\n if (removeElement_1) {\n removeElement_1.parentNode.removeChild(removeElement_1);\n }\n }\n this.refreshCanvasLayers();\n var children = currentObj.wrapper.children;\n var element;\n var view;\n for (var i = 0; i < children.length; i++) {\n if (children[i] instanceof DiagramNativeElement || ((children[i].id) && (children[i].id).indexOf('icon_content') > 0)) {\n if ((children[i].id).indexOf('icon_content') > 0 && this.mode === 'SVG') {\n element = getDiagramElement(children[i].id + '_shape_groupElement', this.element.id);\n element.parentNode.removeChild(element);\n element = getDiagramElement(children[i].id + '_rect_groupElement', this.element.id);\n element.parentNode.removeChild(element);\n }\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var elementId = _a[_i];\n removeElement(children[i].id + '_groupElement', elementId);\n }\n }\n else if (children[i] instanceof DiagramHtmlElement) {\n for (var _b = 0, _c = this.views; _b < _c.length; _b++) {\n var elementId = _c[_b];\n removeElement(children[i].id + '_html_element', elementId);\n }\n }\n }\n };\n Diagram.prototype.removeCommand = function () {\n this.remove();\n };\n /**\n * Removes the given object from diagram\n * @param obj Defines the object that has to be removed from diagram\n */\n /* tslint:disable */\n Diagram.prototype.remove = function (obj) {\n var selectedItems = [];\n selectedItems = selectedItems.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n var args;\n var groupAction = false;\n if (obj) {\n obj = this.nameTable[obj.id];\n if (obj && (canDelete(obj) || (this.diagramActions & DiagramAction.Clear))) {\n args = {\n element: obj, cause: this.diagramActions,\n state: 'Changing', type: 'Removal', cancel: false\n };\n if (!(this.diagramActions & DiagramAction.Clear)) {\n this.triggerEvent(DiagramEvent.collectionChange, args);\n }\n if (!args.cancel) {\n if (this.bpmnModule) {\n if (this.bpmnModule.checkAndRemoveAnnotations(obj, this)) {\n this.refreshCanvasLayers();\n return;\n }\n }\n if ((!(this.diagramActions & DiagramAction.UndoRedo)) &&\n (obj instanceof Node || obj instanceof Connector)) {\n var entry = {\n type: 'CollectionChanged', changeType: 'Remove', undoObject: cloneObject(obj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n if (!(this.diagramActions & DiagramAction.Clear)) {\n if (selectedItems.length > 0 && this.undoRedoModule && !this.layout.type) {\n this.historyList.startGroupAction();\n groupAction = true;\n }\n }\n if (obj instanceof Node) {\n this.removeDependentConnector(obj);\n }\n if (!(this.diagramActions & DiagramAction.Clear)) {\n this.addHistoryEntry(entry);\n }\n }\n if (obj.children) {\n this.deleteGroup(obj);\n }\n if (obj.parentId) {\n this.deleteChild(obj);\n }\n var index = void 0;\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n var currentObj = this.nameTable[obj.id];\n if (currentObj instanceof Node) {\n if (currentObj.shape.type === 'Bpmn' && this.bpmnModule) {\n this.bpmnModule.removeBpmnProcesses(currentObj, this);\n }\n index = this.nodes.indexOf(currentObj);\n if (index !== -1) {\n this.nodes.splice(index, 1);\n this.updateNodeEdges(currentObj);\n }\n }\n else {\n index = this.connectors.indexOf(currentObj);\n if (index !== -1) {\n this.connectors.splice(index, 1);\n }\n this.updateEdges(currentObj);\n this.spliceConnectorEdges(obj, true);\n this.spliceConnectorEdges(obj, false);\n }\n if (groupAction) {\n this.historyList.endGroupAction();\n }\n if (isSelected(this, currentObj)) {\n this.unSelect(currentObj);\n }\n this.removeObjectsFromLayer(obj);\n if (this.currentDrawingObject) {\n this.currentDrawingObject.wrapper = undefined;\n }\n delete this.nameTable[obj.id];\n this.removeElements(currentObj);\n this.updateBridging();\n if (this.mode !== 'SVG') {\n this.refreshDiagramLayer();\n }\n if (!(this.diagramActions & DiagramAction.Clear)) {\n this.removeFromAQuad(currentObj);\n args = {\n element: obj, cause: this.diagramActions,\n state: 'Changed', type: 'Removal', cancel: false\n };\n this.triggerEvent(DiagramEvent.collectionChange, args);\n this.resetTool();\n }\n }\n }\n }\n else if (selectedItems.length > 0) {\n if (this.undoRedoModule) {\n this.historyList.startGroupAction();\n groupAction = true;\n }\n for (var i = 0; i < selectedItems.length; i++) {\n var node = selectedItems[i];\n if (this.nameTable[selectedItems[i].id]) {\n if ((selectedItems[i] instanceof Connector) && this.bpmnModule &&\n this.bpmnModule.textAnnotationConnectors.indexOf(selectedItems[i]) > -1) {\n this.remove(this.nameTable[selectedItems[i].targetID]);\n return;\n }\n this.remove(selectedItems[i]);\n }\n }\n if (groupAction) {\n this.historyList.endGroupAction();\n }\n this.clearSelection();\n }\n };\n /* tslint:enable */\n /** @private */\n Diagram.prototype.deleteChild = function (node, parentNode) {\n var id;\n parentNode = parentNode ? this.nameTable[parentNode.id] : this.nameTable[node.parentId];\n if (typeof node === 'string') {\n id = node;\n }\n else {\n id = node.id;\n }\n if (parentNode && parentNode.children) {\n for (var i = 0; i < parentNode.children.length; i++) {\n if (parentNode.children[i] === id) {\n parentNode.children.splice(i, 1);\n parentNode.wrapper.children.splice(i, 1);\n }\n }\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n }\n };\n /** @private */\n Diagram.prototype.addChild = function (node, child) {\n var id;\n var parentNode = this.nameTable[node.id];\n if (parentNode.children) {\n if (typeof child === 'string') {\n if (this.nameTable[child]) {\n id = child;\n }\n }\n else {\n id = child.id = child.id || randomId();\n this.add(child);\n }\n if (id) {\n var childNode = this.nameTable[id];\n childNode.parentId = parentNode.id;\n parentNode.children.push(id);\n parentNode.wrapper.children.push(this.nameTable[id].wrapper);\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n }\n }\n };\n /**\n * Clears all nodes and objects in the diagram\n */\n Diagram.prototype.clear = function () {\n this.clearObjects();\n };\n Diagram.prototype.clearObjects = function (collection) {\n var objects = [];\n if (!collection) {\n objects = objects.concat(this.nodes);\n objects = objects.concat(this.connectors);\n }\n else {\n objects = collection;\n }\n this.diagramActions = this.diagramActions | DiagramAction.Clear;\n for (var _i = 0, objects_1 = objects; _i < objects_1.length; _i++) {\n var obj = objects_1[_i];\n if (this.nameTable[obj.id]) {\n this.remove(obj);\n }\n }\n this.diagramActions = this.diagramActions & ~DiagramAction.Clear;\n this.spatialSearch = new SpatialSearch(this.nameTable);\n this.initHistory();\n };\n Diagram.prototype.startEditCommad = function () {\n this.startTextEdit();\n };\n /**\n * Specified annotation to edit mode\n * @param node Defines node/connector that contains the annotation to be edited\n * @param id Defines annotation id to be edited in the node\n */\n Diagram.prototype.startTextEdit = function (node, id) {\n if (!canZoomPan(this) || canSingleSelect(this)) {\n this.textEditing = true;\n var transform = this.scroller.transform;\n var scale = canZoomTextEdit(this) ? transform.scale : 1;\n var minWidth = 90;\n var text = void 0;\n var bounds = void 0;\n var attributes = void 0;\n var x = void 0;\n var y = void 0;\n var textWrapper = void 0;\n if (!node) {\n node = (this.selectedItems.nodes[0]) ? this.selectedItems.nodes[0] : this.selectedItems.connectors[0];\n }\n if (node) {\n var bpmnAnnotation = false;\n if (this.bpmnModule) {\n textWrapper = this.bpmnModule.getTextAnnotationWrapper(node, id);\n if (textWrapper) {\n node = this.nameTable[node.id.split('_textannotation_')[0]];\n }\n }\n if (!textWrapper) {\n if (node.shape.type !== 'Text' && node.annotations.length === 0) {\n this.activeLabel.isGroup = true;\n this.startGroupAction();\n this.addLabels(node, [{ id: randomId(), content: '' }]);\n }\n if (!id && ((node.shape.type !== 'Text' && node.annotations.length > 0) || (node.shape.type === 'Text'))) {\n id = (node.shape.type === 'Text') ? (node.wrapper.children[0].id).split('_')[1] : node.annotations[0].id;\n }\n if (id) {\n textWrapper = this.getWrapper(node.wrapper, id);\n }\n }\n else {\n bpmnAnnotation = true;\n }\n if (node && textWrapper &&\n (!enableReadOnly(textWrapper, node) || bpmnAnnotation)) {\n var style = (textWrapper.style);\n var maxWidth = void 0;\n maxWidth = textWrapper.bounds.width < node.wrapper.bounds.width ? textWrapper.bounds.width : node.wrapper.bounds.width;\n maxWidth = minWidth > maxWidth ? minWidth : maxWidth;\n var textEditing = document.getElementById(this.element.id + '_editTextBoxDiv');\n var textArea = document.getElementById(this.element.id + '_editBox');\n text = textArea ? textArea.value : textWrapper.content;\n if (!textEditing && !textArea) {\n textEditing = createHtmlElement('div', {});\n textArea = createHtmlElement('textarea', {});\n this.diagramCanvas.appendChild(textEditing);\n textEditing.appendChild(textArea);\n textArea.appendChild(document.createTextNode(text));\n }\n bounds = measureHtmlText(textWrapper.style, text, undefined, undefined, maxWidth);\n if (bounds.isEmpty()) {\n if (node.shape.type !== 'Text') {\n bounds = new Size(findAnnotation(node, (textWrapper.id).split(node.id + '_')[1]).width || 50, textWrapper.style.fontSize);\n }\n else {\n bounds = new Size((node.width > 50) ? 50 : node.width, textWrapper.style.fontSize);\n }\n }\n bounds.width = Math.max(bounds.width, 50);\n x = ((((textWrapper.bounds.center.x + transform.tx) * transform.scale) - (bounds.width / 2) * scale) - 2.5);\n y = ((((textWrapper.bounds.center.y + transform.ty) * transform.scale) - (bounds.height / 2) * scale) - 3);\n attributes = {\n 'id': this.element.id + '_editTextBoxDiv', 'style': 'position: absolute' + ';left:' + x + 'px;top:' +\n y + 'px;width:' + ((bounds.width + 1) * scale) + 'px;height:' + (bounds.height * scale) +\n 'px; containerName:' + node.id + ';'\n };\n setAttributeHtml(textEditing, attributes);\n attributes = {\n 'id': this.element.id + '_editBox', 'style': 'width:' + ((bounds.width + 1) * scale) +\n 'px;height:' + (bounds.height * scale) + 'px;resize: none;outline: none;overflow: hidden;' +\n ';font-family:' + style.fontFamily +\n ';font-size:' + (style.fontSize * scale) + 'px;text-align:' +\n (textWrapper.style.textAlign.toLocaleLowerCase()) + ';', 'class': 'e-diagram-text-edit'\n };\n setAttributeHtml(textArea, attributes);\n textArea.style.fontWeight = (style.bold) ? 'bold' : '';\n textArea.style.fontStyle = (style.italic) ? 'italic' : '';\n textArea.style.lineHeight = (style.fontSize * 1.2 + 'px;').toString();\n textArea.style.textDecoration = (style.textDecoration) ? style.textDecoration : '';\n this.activeLabel.parentId = node.id;\n this.activeLabel.id = id;\n textWrapper.visible = false;\n this.updateDiagramObject(node);\n this.diagramActions = this.diagramActions | DiagramAction.TextEdit;\n if (!this.isTriggerEvent) {\n EventHandler.add(textArea, 'input', this.eventHandler.inputChange, this.eventHandler);\n EventHandler.add(textArea, 'focusout', this.focusOutEdit, this);\n textArea.select();\n }\n }\n }\n }\n };\n Diagram.prototype.updateNodeExpand = function (node, visibility) {\n for (var i = 0; i < node.outEdges.length; i++) {\n var connector = this.nameTable[node.outEdges[i]];\n var target = this.nameTable[connector.targetID];\n connector.visible = visibility;\n if (!visibility) {\n this.updateElementVisibility(connector.wrapper, connector, false);\n target.isExpanded = visibility;\n }\n this.updateNodeExpand(target, target.isExpanded);\n target.visible = visibility;\n if (!visibility) {\n this.updateElementVisibility(target.wrapper, target, false);\n }\n }\n };\n /**\n * Automatically updates the diagram objects based on the type of the layout\n */\n Diagram.prototype.doLayout = function () {\n var update = false;\n var layout;\n var propChange = this.isProtectedOnChange;\n this.protectPropertyChange(true);\n var viewPort = { x: this.scroller.viewPortWidth, y: this.scroller.viewPortHeight };\n if (this.organizationalChartModule) {\n layout = this.organizationalChartModule.updateLayout(this.nodes, this.nameTable, this.layout, viewPort, this.dataSourceSettings.id);\n update = true;\n if (this.layoutAnimateModule && layout.rootNode && !this.diagramActions) {\n this.updateNodeExpand(layout.rootNode, layout.rootNode.isExpanded);\n }\n }\n else if (this.mindMapChartModule) {\n this.mindMapChartModule.updateLayout(this.nodes, this.nameTable, this.layout, viewPort, this.dataSourceSettings.id, this.dataSourceSettings.root);\n update = true;\n }\n else if (this.radialTreeModule) {\n this.radialTreeModule.updateLayout(this.nodes, this.nameTable, this.layout, viewPort);\n update = true;\n }\n else if (this.symmetricalLayoutModule) {\n this.symmetricalLayoutModule.maxIteration = this.layout.maxIteration;\n this.symmetricalLayoutModule.springLength = this.layout.springLength;\n this.symmetricalLayoutModule.springFactor = this.layout.springFactor;\n this.symmetricalLayoutModule.updateLayout(this.nodes, this.connectors, this.symmetricalLayoutModule, this.nameTable, this.layout, viewPort);\n update = true;\n }\n else if (this.complexHierarchicalTreeModule) {\n this.complexHierarchicalTreeModule.doLayout(this.nodes, this.nameTable, this.layout, viewPort);\n update = true;\n }\n if (update) {\n this.preventUpdate = true;\n var connectors = {};\n for (var _i = 0, _a = this.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n var node = obj;\n if (!this.preventNodesUpdate) {\n this.updateIcon(node);\n this.updateDefaultLayoutIcons(node);\n }\n this.nodePropertyChange(node, {}, { offsetX: node.offsetX, offsetY: node.offsetY }, true);\n node.wrapper.measure(new Size(node.wrapper.width, node.wrapper.height));\n node.wrapper.arrange(node.wrapper.desiredSize);\n this.updateDiagramObject(node);\n if (node.inEdges.length > 0) {\n for (var j = 0; j < node.inEdges.length; j++) {\n var connector = this.nameTable[node.inEdges[j]];\n connectors[connector.id] = connector;\n }\n }\n if (node.outEdges.length > 0) {\n for (var k = 0; k < node.outEdges.length; k++) {\n var connection = this.nameTable[node.outEdges[k]];\n connectors[connection.id] = connection;\n }\n }\n }\n for (var _b = 0, _c = Object.keys(connectors); _b < _c.length; _b++) {\n var conn = _c[_b];\n var connector = connectors[conn];\n var points = this.getPoints(connector);\n updateConnector(connector, points);\n connector.wrapper.measure(new Size(undefined, undefined));\n connector.wrapper.arrange(connector.wrapper.desiredSize);\n this.updateQuad(connector);\n this.updateDiagramObject(connector);\n }\n this.preventUpdate = false;\n this.updatePage();\n if ((!(this.diagramActions & DiagramAction.Render)) || this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n }\n if (!propChange) {\n this.protectPropertyChange(propChange);\n }\n return layout;\n };\n /**\n * Serializes the diagram control as a string\n */\n Diagram.prototype.saveDiagram = function () {\n return serialize(this);\n };\n /**\n * Converts the given string as a Diagram Control\n * @param data Defines the behavior of the diagram to be loaded\n */\n Diagram.prototype.loadDiagram = function (data) {\n return deserialize(data, this);\n };\n /**\n * To export Diagram\n * @param options defines the how the image to be exported.\n */\n Diagram.prototype.exportDiagram = function (options) {\n if (this.printandExportModule) {\n var data = this.printandExportModule.exportDiagram(options);\n return data;\n }\n return '';\n };\n /**\n * To print Diagram\n * @param optons defines how the image to be printed.\n */\n Diagram.prototype.print = function (options) {\n if (this.printandExportModule) {\n this.printandExportModule.print(options);\n }\n };\n /**\n * Add ports at the run time\n */\n Diagram.prototype.addPorts = function (obj, ports) {\n this.protectPropertyChange(true);\n var newObj;\n if (ports.length > 1) {\n this.startGroupAction();\n }\n for (var i = 0; i < ports.length; i++) {\n newObj = new PointPort(obj, 'ports', ports[i], true);\n obj.ports.push(newObj);\n if (obj.children) {\n var container = obj.wrapper;\n obj.initPorts(this.getDescription, obj.wrapper.children[container.children.length - 1]);\n }\n else {\n var canvas = obj.wrapper;\n canvas.children.push(obj.initPortWrapper(obj.ports[obj.ports.length - 1]));\n }\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'PortCollectionChanged', changeType: 'Insert', undoObject: cloneObject(newObj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n }\n if (ports.length > 1) {\n this.endGroupAction();\n }\n obj.wrapper.measure(new Size(obj.width, obj.height));\n obj.wrapper.arrange(obj.wrapper.desiredSize);\n this.updateDiagramObject(obj);\n this.protectPropertyChange(false);\n };\n /**\n * Add constraints at run time\n */\n Diagram.prototype.addConstraints = function (constraintsType, constraintsValue) {\n return constraintsType | constraintsValue;\n };\n /**\n * Remove constraints at run time\n */\n Diagram.prototype.removeConstraints = function (constraintsType, constraintsValue) {\n return constraintsType & ~constraintsValue;\n };\n /**\n * Add Labels at the run time\n */\n Diagram.prototype.addLabels = function (obj, labels) {\n this.protectPropertyChange(true);\n var canvas = obj.wrapper;\n var newObj;\n if (labels.length > 1) {\n this.startGroupAction();\n }\n for (var i = 0; i < labels.length; i++) {\n if (obj instanceof Node) {\n newObj = new ShapeAnnotation(obj, 'annotations', labels[i], true);\n obj.annotations.push(newObj);\n if (obj.children) {\n var node = obj;\n for (var i_1 = 0; i_1 < node.wrapper.children.length; i_1++) {\n if (node.wrapper.children[i_1].id === 'group_container') {\n var container = node.wrapper.children[i_1];\n container.children.push(obj.initAnnotationWrapper(obj.annotations[obj.annotations.length - 1]));\n }\n }\n }\n else {\n canvas.children.push(obj.initAnnotationWrapper(obj.annotations[obj.annotations.length - 1]));\n }\n }\n else if (obj instanceof Connector) {\n newObj = new PathAnnotation(obj, 'annotations', labels[i], true);\n obj.annotations.push(newObj);\n var segment = canvas.children[0];\n var bounds = new Rect(segment.offsetX - segment.width / 2, segment.offsetY - segment.height / 2, segment.width, segment.height);\n canvas.children.push(obj.getAnnotationElement(obj.annotations[obj.annotations.length - 1], obj.intermediatePoints, bounds, this.getDescription));\n }\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'LabelCollectionChanged', changeType: 'Insert', undoObject: cloneObject(newObj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n }\n if (labels.length > 1) {\n this.endGroupAction();\n }\n obj.wrapper.measure(new Size(canvas.width, canvas.height));\n obj.wrapper.arrange(canvas.desiredSize);\n this.updateDiagramObject(obj);\n this.protectPropertyChange(false);\n };\n Diagram.prototype.removelabelExtension = function (obj, labels, j, wrapper) {\n for (var i = 0; i < wrapper.children.length; i++) {\n var canvas = wrapper.children[i];\n if (canvas instanceof TextElement) {\n if (canvas.id.match('_' + labels[j].id + '$')) {\n for (var k = 0; k < obj.annotations.length; k++) {\n if (canvas.id.match('_' + obj.annotations[k].id + '$')) {\n if (!(this.diagramActions & DiagramAction.UndoRedo)) {\n var entry = {\n type: 'LabelCollectionChanged', changeType: 'Remove', undoObject: cloneObject(obj.annotations[k]),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n obj.annotations.splice(k, 1);\n }\n }\n wrapper.children.splice(i, 1);\n if (this.mode === 'SVG') {\n var element = getDiagramElement(canvas.id, this.element.id);\n if (element) {\n var element_1 = getDiagramElement(canvas.id, this.element.id);\n element_1.parentNode.removeChild(element_1);\n }\n var textElement = getDiagramElement(canvas.id + '_text', this.element.id);\n if (textElement) {\n element = getDiagramElement(canvas.id + '_text', this.element.id);\n element.parentNode.removeChild(element);\n }\n }\n else {\n this.refreshCanvasLayers();\n }\n }\n }\n }\n };\n /**\n * Remove Labels at the run time\n */\n Diagram.prototype.removeLabels = function (obj, labels) {\n if (labels.length > 1) {\n this.startGroupAction();\n }\n for (var j = labels.length - 1; j >= 0; j--) {\n if (obj.children && obj.children.length > 0) {\n for (var k = 0; k < obj.wrapper.children.length; k++) {\n this.removelabelExtension(obj, labels, j, obj.wrapper.children[k]);\n }\n }\n else {\n this.removelabelExtension(obj, labels, j, obj.wrapper);\n }\n }\n if (labels.length > 1) {\n this.endGroupAction();\n }\n };\n Diagram.prototype.removePortsExtenion = function (obj, ports, j, wrapper) {\n for (var i = 0; i < wrapper.children.length; i++) {\n var canvas = wrapper.children[i];\n if (canvas instanceof PathElement) {\n if (canvas.id.match('_' + ports[j].id + '$')) {\n for (var k = 0; k < obj.ports.length; k++) {\n if (canvas.id.match('_' + obj.ports[k].id + '$')) {\n if (!(this.diagramActions & DiagramAction.UndoRedo)) {\n var entry = {\n type: 'PortCollectionChanged', changeType: 'Remove', undoObject: cloneObject(obj.ports[k]),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n obj.ports.splice(k, 1);\n }\n }\n wrapper.children.splice(i, 1);\n if (this.mode === 'SVG') {\n var element = getDiagramElement(canvas.id, this.element.id);\n element.parentNode.removeChild(element);\n }\n else {\n this.refreshCanvasLayers();\n }\n }\n }\n }\n };\n /**\n * Remove Ports at the run time\n */\n Diagram.prototype.removePorts = function (obj, ports) {\n if (ports.length > 1) {\n this.startGroupAction();\n }\n for (var j = ports.length - 1; j >= 0; j--) {\n if (obj.children && obj.children.length > 0) {\n for (var k = 0; k < obj.wrapper.children.length; k++) {\n this.removePortsExtenion(obj, ports, j, obj.wrapper.children[k]);\n }\n }\n else {\n this.removePortsExtenion(obj, ports, j, obj.wrapper);\n }\n }\n if (ports.length > 1) {\n this.endGroupAction();\n }\n };\n //public methods - end region\n //helper methods - start region\n /**\n * @private\n * @param real\n * @param rulerSize\n */\n Diagram.prototype.getSizeValue = function (real, rulerSize) {\n var value;\n if (real.toString().indexOf('px') > 0) {\n value = real.toString();\n }\n else if (real.toString().indexOf('%') > 0) {\n value = rulerSize !== undefined ? '100%' : real.toString();\n }\n else {\n value = real.toString() + 'px';\n }\n if (rulerSize) {\n var position = getRulerSize(this);\n value = 'calc(' + value + ' - ' + rulerSize + 'px)';\n }\n return value;\n };\n Diagram.prototype.renderRulers = function () {\n if (this.rulerSettings.showRulers) {\n renderOverlapElement(this);\n renderRuler(this, true);\n renderRuler(this, false);\n }\n else {\n removeRulerElements(this);\n }\n };\n Diagram.prototype.intOffPageBackground = function () {\n var position = new Size();\n position = getRulerSize(this);\n var element = document.getElementById(this.element.id + 'content');\n var width = this.getSizeValue(this.width, position.width);\n var height = this.getSizeValue(this.height, position.height);\n var style = this.rulerSettings.showRulers ?\n 'width:' + width + '; height:' + height + ';' +\n 'top:' + position.height + 'px;left:' + position.width + 'px;' +\n 'overflow: scroll;position:absolute;overflow:auto;' :\n 'width:' + width + '; height:' + height + ';position:absolute;' +\n ' left:0px; top:0px;overflow: auto;';\n var attr = {\n 'id': this.element.id + 'content',\n 'tabindex': '0',\n 'style': style\n };\n if (!element) {\n this.diagramCanvas = createHtmlElement('div', attr);\n this.element.appendChild(this.diagramCanvas);\n }\n else {\n this.diagramCanvas = element;\n this.diagramCanvas.setAttribute('style', style);\n }\n this.diagramCanvas.style.background = this.backgroundColor;\n };\n Diagram.prototype.initDiagram = function () {\n this.intOffPageBackground();\n setAttributeHtml(this.element, {\n style: 'width:' + this.getSizeValue(this.width) + '; height:'\n + this.getSizeValue(this.height) + ';position:relative;overflow:hidden;'\n });\n };\n ;\n Diagram.prototype.renderBackgroundLayer = function (bounds, commonStyle) {\n var bgLayer = this.createSvg(this.element.id + '_backgroundLayer_svg', bounds.width, bounds.height);\n bgLayer.setAttribute('style', commonStyle);\n var backgroundImage = createSvgElement('g', {\n 'id': this.element.id + '_backgroundImageLayer',\n 'class': 'e-background-image-layer'\n });\n bgLayer.appendChild(backgroundImage);\n var attr = { 'id': this.element.id + '_backgroundLayer', 'class': 'e-background-layer' };\n var background = createSvgElement('g', attr);\n bgLayer.appendChild(background);\n this.diagramCanvas.appendChild(bgLayer);\n };\n Diagram.prototype.renderGridLayer = function (bounds, commonStyle) {\n var svgGridSvg = this.createSvg(this.element.id + '_gridline_svg', bounds.width, bounds.height);\n svgGridSvg.setAttribute('class', 'e-grid-layer');\n var svgGrid = createSvgElement('g', { 'id': this.element.id + '_gridline', 'width': '100%', 'height': '100%' });\n var rect = createSvgElement('rect', {\n 'id': this.element.id + '_grid_rect', 'x': '0', 'y': '0', 'width': '100%', 'height': '100%',\n 'fill': 'url(#' + this.element.id + '_pattern)'\n });\n svgGrid.appendChild(rect);\n svgGridSvg.appendChild(svgGrid);\n this.diagramCanvas.appendChild(svgGridSvg);\n setAttributeSvg(svgGridSvg, { 'style': commonStyle });\n };\n Diagram.prototype.renderDiagramLayer = function (bounds, commonStyle) {\n var attributes = {\n 'id': this.element.id + '_diagramLayer_div',\n 'style': 'width:' + bounds.width + 'px; height:' + bounds.height + 'px;' + commonStyle\n };\n this.diagramLayerDiv = createHtmlElement('div', attributes);\n if (this.mode === 'SVG') {\n var diagramSvg = this.createSvg(this.element.id + '_diagramLayer_svg', bounds.width, bounds.height);\n diagramSvg.setAttribute('style', ' pointer-events: none; ');\n diagramSvg.setAttribute('class', 'e-diagram-layer');\n var diagramLayer = createSvgElement('g', { 'id': this.element.id + '_diagramLayer' });\n var transformationLayer = createSvgElement('g', {});\n this.diagramLayer = diagramLayer;\n diagramLayer.setAttribute('style', 'pointer-events: all;');\n transformationLayer.appendChild(diagramLayer);\n diagramSvg.appendChild(transformationLayer);\n this.diagramLayerDiv.appendChild(diagramSvg);\n }\n else {\n this.diagramLayer = CanvasRenderer.createCanvas(this.element.id + '_diagram', bounds.width, bounds.height);\n this.diagramLayer.setAttribute('style', 'position:absolute;left:0px;top:0px;');\n this.diagramLayerDiv.appendChild(this.diagramLayer);\n }\n this.diagramCanvas.appendChild(this.diagramLayerDiv);\n };\n Diagram.prototype.initLayers = function () {\n var commonStyle = 'position:absolute;top:0px;left:0px;overflow:hidden;pointer-events:none;';\n var container = document.getElementById(this.element.id);\n var bounds = container.getBoundingClientRect();\n var scrollerSize = getScrollerWidth();\n this.scroller.scrollerWidth = scrollerSize;\n this.scroller.setViewPortSize(bounds.width, bounds.height);\n this.renderRulers();\n createMeasureElements();\n // this.renderBackgroundImageLayer(bounds, commonStyle);\n this.renderBackgroundLayer(bounds, commonStyle);\n this.renderGridLayer(bounds, commonStyle);\n this.renderDiagramLayer(bounds, commonStyle);\n this.renderHTMLLayer(bounds, commonStyle);\n this.renderPortsExpandLayer(bounds, commonStyle);\n this.renderNativeLayer(bounds, commonStyle);\n this.renderAdornerLayer(bounds, commonStyle);\n };\n Diagram.prototype.renderAdornerLayer = function (bounds, commonStyle) {\n var divElement = createHtmlElement('div', {\n 'id': this.element.id + '_diagramAdornerLayer',\n 'style': 'width:' + bounds.width + 'px;height:' + bounds.height + 'px;' + commonStyle\n });\n var svgAdornerSvg = this.createSvg(this.element.id + '_diagramAdorner_svg', bounds.width, bounds.height);\n svgAdornerSvg.setAttribute('class', 'e-adorner-layer');\n svgAdornerSvg.setAttribute('style', 'pointer-events:none;');\n this.adornerLayer = createSvgElement('g', { 'id': this.element.id + '_diagramAdorner' });\n this.adornerLayer.setAttribute('style', ' pointer-events: all; ');\n svgAdornerSvg.appendChild(this.adornerLayer);\n divElement.appendChild(svgAdornerSvg);\n this.diagramCanvas.appendChild(divElement);\n var svgSelector = createSvgElement('g', { 'id': this.element.id + '_SelectorElement' });\n this.adornerLayer.appendChild(svgSelector);\n setAttributeSvg(svgAdornerSvg, { style: 'pointer-events:none;' });\n };\n Diagram.prototype.renderPortsExpandLayer = function (bounds, commonStyle) {\n var svgPortsSvg = this.createSvg(this.element.id + '_diagramPorts_svg', bounds.width, bounds.height);\n svgPortsSvg.setAttribute('class', 'e-ports-expand-layer');\n var svgPortsLayer = createSvgElement('g', {\n 'id': this.element.id + '_diagramPorts',\n 'class': 'e-ports-layer',\n 'style': 'pointer-events: all;'\n });\n svgPortsSvg.appendChild(svgPortsLayer);\n var svgExpandLayer = createSvgElement('g', {\n 'id': this.element.id + '_diagramExpander',\n 'class': 'e-expand-layer',\n 'style': 'pointer-events: all;'\n });\n svgPortsSvg.appendChild(svgExpandLayer);\n this.diagramCanvas.appendChild(svgPortsSvg);\n setAttributeSvg(svgPortsSvg, { 'style': commonStyle });\n };\n Diagram.prototype.renderHTMLLayer = function (bounds, commonStyle) {\n this.htmlLayer = createHtmlElement('div', {\n 'id': this.element.id + '_htmlLayer',\n 'style': 'width:' + bounds.width + 'px; height:' + bounds.height + 'px;position:absolute;top:0px;' +\n 'left:0px;overflow:hidden;pointer-events:none;',\n 'class': 'e-html-layer'\n });\n var htmlLayerDiv = createHtmlElement('div', {\n 'id': this.element.id + '_htmlLayer_div',\n 'style': 'position:absolute;top:0px;left:0px;pointer-events:all;'\n });\n this.htmlLayer.appendChild(htmlLayerDiv);\n this.diagramCanvas.appendChild(this.htmlLayer);\n };\n Diagram.prototype.renderNativeLayer = function (bounds, commonStyle) {\n var nativeLayerSvg = this.createSvg(this.element.id + '_nativeLayer_svg', bounds.width, bounds.height);\n var nativeLayer = createSvgElement('g', { 'id': this.element.id + '_nativeLayer', 'style': 'pointer-events:all;' });\n nativeLayerSvg.appendChild(nativeLayer);\n this.diagramLayerDiv.appendChild(nativeLayerSvg);\n setAttributeSvg(nativeLayerSvg, { 'class': 'e-native-layer', 'style': commonStyle });\n };\n Diagram.prototype.createSvg = function (id, width, height) {\n var svgObj = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n setAttributeSvg(svgObj, { 'id': id, 'width': width, 'height': height });\n return svgObj;\n };\n Diagram.prototype.initObjects = function (isLoad) {\n if (!this.isLoading) {\n this.initData();\n }\n this.initLayerObjects();\n this.updateBridging(isLoad);\n };\n Diagram.prototype.initLayerObjects = function () {\n var hasLayers = this.layers.length > 1;\n var set = false;\n var connectors = [];\n var tempTabel = {};\n var bpmnTable = {};\n var tempNode = [];\n var groups = [];\n var i = 0;\n for (var _i = 0, _a = this.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n obj.id = obj.id || randomId();\n this.addToLayer(obj, hasLayers);\n tempTabel[obj.id] = obj;\n }\n for (var _b = 0, _c = this.connectors; _b < _c.length; _b++) {\n var obj = _c[_b];\n obj.id = obj.id || randomId();\n this.addToLayer(obj, hasLayers);\n tempTabel[obj.id] = obj;\n }\n for (var _d = 0, _e = this.layers; _d < _e.length; _d++) {\n var layer = _e[_d];\n for (var _f = 0, _g = layer.objects; _f < _g.length; _f++) {\n var obj = _g[_f];\n if (tempTabel[obj]) {\n if (!(tempTabel[obj] instanceof Connector)) {\n if (tempTabel[obj].children) {\n groups.push(obj);\n }\n else if ((tempTabel[obj].shape instanceof BpmnShape) &&\n tempTabel[obj].shape.activity.subProcess.processes &&\n tempTabel[obj].shape.activity.subProcess.processes.length > 0) {\n bpmnTable[tempTabel[obj].id] = obj;\n }\n else {\n this.initNodes(tempTabel[obj], layer);\n }\n }\n else {\n var connector = tempTabel[obj];\n if (connector.sourceID && connector.targetID) {\n var sourceNode = tempTabel[connector.sourceID];\n var targetNode = tempTabel[connector.targetID];\n if (sourceNode && sourceNode.wrapper && targetNode && targetNode.wrapper) {\n this.initConnectors(tempTabel[obj], layer);\n }\n else {\n connectors.push(tempTabel[obj]);\n }\n }\n else {\n this.initConnectors(tempTabel[obj], layer);\n }\n }\n }\n }\n if (this.bpmnModule) {\n for (var _h = 0, _j = this.bpmnModule.textAnnotationConnectors; _h < _j.length; _h++) {\n var obj = _j[_h];\n this.initConnectors(obj, layer, false);\n }\n }\n }\n for (var _k = 0, _l = Object.keys(bpmnTable); _k < _l.length; _k++) {\n var obj = _l[_k];\n this.initObject(tempTabel[obj]);\n this.bpmnModule.updateDocks(tempTabel[obj], this);\n }\n for (var _m = 0, groups_1 = groups; _m < groups_1.length; _m++) {\n var obj = groups_1[_m];\n var layer = this.commandHandler.getObjectLayer(obj);\n this.initNodes(tempTabel[obj], layer);\n }\n for (var _o = 0, connectors_1 = connectors; _o < connectors_1.length; _o++) {\n var connector = connectors_1[_o];\n var layer = this.commandHandler.getObjectLayer(connector.id);\n this.initConnectors(connector, layer);\n }\n };\n Diagram.prototype.addToLayer = function (obj, hasLayers) {\n var layer;\n if (hasLayers) {\n layer = this.commandHandler.getObjectLayer(obj.id);\n }\n if (!hasLayers || !layer) {\n if (this.activeLayer.objects.indexOf(obj.id) === -1) {\n this.activeLayer.objects.push(obj.id);\n }\n }\n this.setZIndex(layer || this.activeLayer, obj);\n };\n Diagram.prototype.updateLayer = function (newProp) {\n for (var _i = 0, _a = Object.keys(newProp.layers); _i < _a.length; _i++) {\n var key = _a[_i];\n var layerObject = this.layers[key].objects;\n for (var _b = 0, layerObject_1 = layerObject; _b < layerObject_1.length; _b++) {\n var obj = layerObject_1[_b];\n var node = this.nameTable[obj];\n if (newProp.layers[key].visible !== undefined) {\n this.updateElementVisibility(node.wrapper, node, newProp.layers[key].visible);\n }\n else if (newProp.layers[key].lock === true) {\n this.unSelect(node);\n }\n }\n if (newProp.layers[key].lock !== undefined) {\n this.layers[key].lock = newProp.layers[key].lock;\n }\n }\n if (this.mode !== 'SVG') {\n this.refreshDiagramLayer();\n }\n };\n Diagram.prototype.updateScrollSettings = function (newProp) {\n var hPan = (-this.scroller.horizontalOffset + newProp.scrollSettings.horizontalOffset || 0);\n var vPan = (this.scroller.verticalOffset - newProp.scrollSettings.verticalOffset || 0);\n var oldValue = {\n VerticalOffset: this.scrollSettings.verticalOffset, HorizontalOffset: this.scrollSettings.horizontalOffset,\n ViewportHeight: this.scrollSettings.viewPortHeight, ViewportWidth: this.scrollSettings.viewPortWidth,\n CurrentZoom: this.scroller.currentZoom\n };\n if (hPan !== 0 || vPan !== 0) {\n this.pan(hPan, vPan);\n }\n var newValue = {\n VerticalOffset: this.scrollSettings.verticalOffset, HorizontalOffset: this.scrollSettings.horizontalOffset,\n ViewportHeight: this.scrollSettings.viewPortHeight, ViewportWidth: this.scrollSettings.viewPortWidth,\n CurrentZoom: this.scroller.currentZoom\n };\n var arg = {\n oldValue: oldValue, newValue: newValue, source: this\n };\n this.triggerEvent(DiagramEvent.scrollChange, arg);\n if (this.mode === 'Canvas' && (this.constraints & DiagramConstraints.Virtualization)) {\n this.refreshDiagramLayer();\n }\n };\n Diagram.prototype.initData = function () {\n if (this.dataBindingModule && !(this.realActions & RealAction.PreventDataInit)) {\n if (this.dataSourceSettings.dataManager && this.dataSourceSettings.dataManager.dataSource &&\n this.dataSourceSettings.dataManager.dataSource.url !== undefined) {\n this.dataBindingModule.initSource(this.dataSourceSettings, this);\n }\n else {\n this.dataBindingModule.initData(this.dataSourceSettings, this);\n }\n }\n };\n Diagram.prototype.initNodes = function (obj, layer) {\n this.preventUpdate = true;\n this.initObject(obj, layer);\n this.preventUpdate = false;\n };\n Diagram.prototype.initConnectors = function (obj, layer, independentObj) {\n this.preventUpdate = true;\n this.initObject(obj, layer, independentObj);\n this.updateEdges(obj);\n this.preventUpdate = false;\n };\n Diagram.prototype.setZIndex = function (layer, obj) {\n //should be changed\n var currentLayer = layer;\n if ((obj).zIndex === -1) {\n while (currentLayer.zIndexTable[currentLayer.objectZIndex + 1]) {\n layer.objectZIndex++;\n }\n obj.zIndex = ++currentLayer.objectZIndex;\n }\n else {\n var index = obj.zIndex;\n if (currentLayer.zIndexTable[index]) {\n var tabelLength = Object.keys(currentLayer.zIndexTable).length;\n var j = 0;\n for (var i = 0; i < tabelLength; i++) {\n if (i === index) {\n for (var j_1 = tabelLength; j_1 > index; j_1--) {\n currentLayer.zIndexTable[j_1] = currentLayer.zIndexTable[j_1 - 1];\n if (this.nameTable[currentLayer.zIndexTable[j_1]]) {\n this.nameTable[currentLayer.zIndexTable[j_1]].zIndex = j_1;\n }\n }\n currentLayer.zIndexTable[i] = obj.id;\n }\n j++;\n }\n }\n }\n };\n Diagram.prototype.initializeDiagramLayers = function () {\n for (var _i = 0, _a = this.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n layer.zIndex = this.layers.indexOf(layer);\n this.layerZIndexTable[layer.zIndex] = layer.id;\n }\n if (this.layers.length === 0) {\n var defaultLayer = {\n id: 'default_layer', visible: true, lock: false, objects: [], zIndex: 0,\n objectZIndex: -1, zIndexTable: {}\n };\n this.commandHandler.addLayer(defaultLayer);\n }\n this.setActiveLayer(this.layers[this.layers.length - 1].id);\n };\n /** @private */\n Diagram.prototype.resetTool = function () {\n this.eventHandler.resetTool();\n };\n /** @private */\n Diagram.prototype.initObject = function (obj, layer, independentObj, group) {\n if (independentObj === void 0) { independentObj = true; }\n if (obj !== undefined) {\n if (independentObj) {\n if (!layer) {\n this.addToLayer(obj, false);\n layer = this.activeLayer;\n }\n //Move the common properties like zindex and id to an abstract class\n if (obj instanceof Node || obj instanceof Connector) {\n this.setZIndex(layer, obj);\n }\n }\n if (obj instanceof Node) {\n if (independentObj) {\n var getDefaults = getFunction(this.getNodeDefaults);\n if (getDefaults) {\n var defaults = getDefaults(obj, this);\n if (defaults && defaults !== obj) {\n extendObject(defaults, obj);\n }\n }\n this.initNode(obj, this.element.id);\n }\n }\n else if (obj instanceof Connector) {\n var getDefaults = getFunction(this.getConnectorDefaults);\n if (getDefaults) {\n var defaults = getDefaults(obj, this);\n if (defaults && defaults !== obj) {\n extendObject(defaults, obj);\n }\n if (obj.segments.length) {\n if (obj.type !== obj.segments[0].type) {\n obj.segments = [];\n }\n }\n }\n var sourceNode = this.nameTable[obj.sourceID];\n var targetNode = this.nameTable[obj.targetID];\n if (sourceNode !== undefined && canOutConnect(sourceNode)) {\n obj.sourceWrapper = this.getEndNodeWrapper(sourceNode, obj, true);\n if (obj.sourcePortID) {\n obj.sourcePortWrapper = this.getWrapper(sourceNode.wrapper, obj.sourcePortID);\n }\n }\n if (targetNode !== undefined && canInConnect(targetNode)) {\n obj.targetWrapper = this.getEndNodeWrapper(targetNode, obj, false);\n if (obj.targetPortID) {\n obj.targetPortWrapper = this.getWrapper(targetNode.wrapper, obj.targetPortID);\n }\n }\n if (!independentObj) {\n var points = obj.getConnectorPoints(obj.type);\n updateConnector(obj, points);\n }\n if (independentObj) {\n obj.init(this);\n }\n obj.wrapper.measure(new Size(undefined, undefined));\n obj.wrapper.arrange(obj.wrapper.desiredSize);\n }\n if (this.bpmnModule && obj instanceof Node\n && obj.shape.type === 'Bpmn' && obj.shape.annotations.length > 0) {\n this.bpmnModule.updateQuad(obj, this);\n }\n if (independentObj) {\n var checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, obj.wrapper.bounds);\n if (!checkBoundaryConstraints) {\n var node = obj instanceof Node ? this.nodes : this.connectors;\n for (var i = 0; i <= node.length; i++) {\n if (node[i] && obj.id === node[i].id) {\n node.splice(i, 1);\n }\n }\n }\n layer.zIndexTable[obj.zIndex] = obj.id;\n }\n this.nameTable[obj.id] = obj;\n if (obj instanceof Node && obj.children) {\n if (!group) {\n this.updateGroupOffset(obj, true);\n }\n this.groupTable[obj.id] = obj.children;\n for (var i = 0; i < obj.children.length; i++) {\n var node = (this.nameTable[obj.children[i]]);\n if (node) {\n node.parentId = obj.id;\n }\n }\n if (!this.isLoading && obj.rotateAngle) {\n this.commandHandler.rotateObjects(obj, [obj], obj.rotateAngle, { x: obj.offsetX, y: obj.offsetY }, false);\n }\n }\n this.updateQuad(obj);\n }\n if (obj.visible === false) {\n this.updateElementVisibility(obj.wrapper, obj, false);\n }\n };\n Diagram.prototype.scaleObject = function (obj, size, isWidth) {\n var actualSize = isWidth ? obj.wrapper.actualSize.width : obj.wrapper.actualSize.height;\n var sw = (isWidth) ? 1 + ((size - actualSize) / actualSize) : 1;\n var sh = (isWidth) ? 1 : 1 + ((size - actualSize) / actualSize);\n var groupOffsetX = obj.offsetX;\n var groupOffsetY = obj.offsetY;\n this.realActions |= RealAction.PreventDrag;\n this.scale(obj, sw, sh, { x: 0.5, y: 0.5 });\n this.realActions &= ~RealAction.PreventDrag;\n };\n Diagram.prototype.updateDefaultLayoutIcons = function (node) {\n if (this.layout.type === 'OrganizationalChart' || this.layout.type === 'HierarchicalTree' ||\n this.layout.type === 'ComplexHierarchicalTree') {\n {\n this.updateDefaultLayoutIcon(node, node.expandIcon);\n this.updateDefaultLayoutIcon(node, node.collapseIcon);\n }\n }\n };\n Diagram.prototype.updateDefaultLayoutIcon = function (node, icon) {\n if (icon.shape !== 'None') {\n if (icon.horizontalAlignment === 'Auto' && icon.verticalAlignment === 'Auto' &&\n icon.offset.x === .5 && icon.offset.y === 1) {\n var iconWrapper = this.getWrapper(node.wrapper, 'icon_content');\n var offsetX = void 0;\n var offsetY = void 0;\n if (this.layout.orientation === 'TopToBottom' || this.layout.orientation === 'BottomToTop') {\n offsetX = .5;\n offsetY = this.layout.orientation === 'TopToBottom' ? 1 : 0;\n }\n else if (this.layout.orientation === 'RightToLeft' || this.layout.orientation === 'LeftToRight') {\n offsetX = this.layout.orientation === 'LeftToRight' ? 1 : 0;\n offsetY = .5;\n }\n iconWrapper.setOffsetWithRespectToBounds(offsetX, offsetY, 'Fraction');\n iconWrapper.horizontalAlignment = 'Center';\n iconWrapper.verticalAlignment = 'Center';\n node.wrapper.measure(new Size(node.wrapper.width, node.wrapper.height));\n node.wrapper.arrange(node.wrapper.desiredSize);\n }\n }\n };\n /**\n * @private\n */\n Diagram.prototype.updateGroupOffset = function (node, isUpdateSize) {\n if ((node.children && node.children.length > 0) || (node.processId)) {\n var node1 = this.nameTable[node.id];\n if (!(this.realActions & RealAction.PreventScale) && !(this.realActions & RealAction.PreventDrag)) {\n if (node1.offsetX && !(this.diagramActions & DiagramAction.ToolAction)\n && !(this.diagramActions & DiagramAction.PublicMethod)) {\n this.realActions |= RealAction.PreventScale;\n var diffX = (node1.offsetX - node.wrapper.offsetX);\n node1.offsetX = node.wrapper.offsetX;\n this.drag(node1, diffX, 0);\n this.realActions &= ~RealAction.PreventScale;\n }\n else {\n node1.offsetX = node.wrapper.offsetX;\n }\n if (node1.offsetY && !(this.diagramActions & DiagramAction.ToolAction)) {\n this.realActions |= RealAction.PreventScale;\n var diffY = (node1.offsetY - node.wrapper.offsetY);\n node1.offsetY = node.wrapper.offsetY;\n this.drag(node1, 0, diffY);\n this.realActions &= ~RealAction.PreventScale;\n }\n else {\n node1.offsetY = node.wrapper.offsetY;\n }\n if (this.diagramActions) {\n node1.width = node.wrapper.actualSize.width;\n node1.height = node.wrapper.actualSize.height;\n }\n }\n }\n if (isUpdateSize) {\n if ((node.children && node.children.length > 0)) {\n if (this.nameTable[node.id].width !== undefined) {\n this.scaleObject(node, this.nameTable[node.id].width, true);\n }\n else {\n this.nameTable[node.id].width = node.wrapper.actualSize.width;\n }\n if (this.nameTable[node.id].height !== undefined) {\n this.scaleObject(node, this.nameTable[node.id].height, false);\n }\n else {\n this.nameTable[node.id].height = node.wrapper.actualSize.height;\n }\n }\n }\n };\n Diagram.prototype.initNode = function (obj, diagramId, group) {\n var canvas = obj.initContainer();\n var portContainer = new Canvas();\n var content;\n if (!canvas.children) {\n canvas.children = [];\n }\n if (obj.children) {\n canvas.measureChildren = false;\n for (var i = 0; i < obj.children.length; i++) {\n if (this.nameTable[obj.children[i]]) {\n canvas.children.push(this.nameTable[obj.children[i]].wrapper);\n }\n }\n portContainer.id = 'group_container';\n portContainer.style.fill = 'none';\n portContainer.style.strokeColor = 'none';\n portContainer.horizontalAlignment = 'Stretch';\n portContainer.verticalAlignment = 'Stretch';\n canvas.style = obj.style;\n portContainer.children = [];\n canvas.children.push(portContainer);\n }\n else {\n var setNodeTemplate = getFunction(this.setNodeTemplate);\n if (setNodeTemplate) {\n content = setNodeTemplate(obj, this);\n }\n if (!content) {\n content = obj.init(this);\n }\n canvas.children.push(content);\n }\n // tslint:disable-next-line:no-any\n var wrapperContent;\n wrapperContent = getFunction(this.getDescription);\n if (wrapperContent) {\n (obj.children ? canvas : content).description = wrapperContent;\n }\n else {\n (obj.children ? canvas : content).description = obj.annotations.length ? obj.annotations[0].content : obj.id;\n }\n var container = obj.children ? portContainer : canvas;\n obj.initAnnotations(this.getDescription, container);\n obj.initPorts(this.getDescription, container);\n obj.initIcons(this.getDescription, this.layout, container, diagramId);\n canvas.measure(new Size(obj.width, obj.height));\n canvas.arrange(canvas.desiredSize);\n };\n Diagram.prototype.canExecute = function () {\n return true;\n };\n Diagram.prototype.initViews = function () {\n if (!this.isLoading) {\n this.views.push(this.element.id);\n this.views[this.element.id] = this;\n }\n };\n Diagram.prototype.initCommands = function () {\n var i;\n var newCommands = this.commandManager.commands;\n var commands = {\n 'copy': {\n execute: this.copyCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.C, keyModifiers: KeyModifiers.Control }\n },\n 'paste': {\n execute: this.pasteCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.V, keyModifiers: KeyModifiers.Control }\n },\n 'cut': {\n execute: this.cutCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.X, keyModifiers: KeyModifiers.Control }\n },\n 'delete': {\n execute: this.removeCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.Delete }\n },\n 'selectAll': {\n execute: this.selectAll.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.A, keyModifiers: KeyModifiers.Control }\n },\n 'undo': {\n execute: this.undo.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.Z, keyModifiers: KeyModifiers.Control }\n },\n 'redo': {\n execute: this.redo.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.Y, keyModifiers: KeyModifiers.Control }\n },\n 'nudgeUp': {\n execute: this.nudgeCommand.bind(this, 'Up'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Up },\n parameter: 'up'\n },\n 'nudgeRight': {\n execute: this.nudgeCommand.bind(this, 'Right'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Right },\n parameter: 'right'\n },\n 'nudgeDown': {\n execute: this.nudgeCommand.bind(this, 'Down'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Down },\n parameter: 'down'\n },\n 'nudgeLeft': {\n execute: this.nudgeCommand.bind(this, 'Left'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Left },\n parameter: 'left'\n },\n 'startEdit': {\n execute: this.startEditCommad.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.F2 }\n },\n 'endEdit': {\n execute: this.endEditCommand.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Escape }\n },\n 'focusToNextItem': {\n // execute: this.focusToItem.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Tab }\n },\n 'focusToPreviousItem': {\n // execute: this.focusToItem.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Tab, keyModifiers: KeyModifiers.Control }\n },\n 'selectFocusedItem': {\n execute: this.startEditCommad.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Enter }\n },\n };\n this.initCommandManager(newCommands, commands);\n };\n Diagram.prototype.overrideCommands = function (newCommand, commands) {\n var command;\n for (var _i = 0, _a = Object.keys(commands); _i < _a.length; _i++) {\n var key = _a[_i];\n command = commands[key];\n if (newCommand.gesture.key === command.gesture.key && newCommand.gesture.keyModifiers === command.gesture.keyModifiers) {\n delete commands[key];\n break;\n }\n }\n };\n Diagram.prototype.initCommandManager = function (newCommands, commands) {\n var i = 0;\n if (newCommands) {\n for (i = 0; i < newCommands.length; i++) {\n if (commands[newCommands[i].name] && newCommands[i]) {\n if (newCommands[i].canExecute) {\n commands[newCommands[i].name].canExecute = newCommands[i].canExecute;\n }\n if (newCommands[i].execute) {\n commands[newCommands[i].name].execute = newCommands[i].execute;\n }\n if (newCommands[i].gesture.key || newCommands[i].gesture.keyModifiers) {\n commands[newCommands[i].name].gesture = newCommands[i].gesture;\n }\n if (newCommands[i].parameter !== '') {\n commands[newCommands[i].name].parameter = newCommands[i].parameter;\n }\n }\n else {\n this.overrideCommands(newCommands[i], commands);\n commands[newCommands[i].name] = {\n execute: newCommands[i].execute, canExecute: newCommands[i].canExecute, gesture: newCommands[i].gesture,\n parameter: newCommands[i].parameter\n };\n }\n }\n }\n this.commands = commands;\n };\n /** @private */\n Diagram.prototype.updateNodeEdges = function (node) {\n for (var _i = 0, _a = node.inEdges; _i < _a.length; _i++) {\n var edge = _a[_i];\n if (this.nameTable[edge]) {\n this.nameTable[edge].targetID = '';\n }\n }\n for (var _b = 0, _c = node.outEdges; _b < _c.length; _b++) {\n var edge = _c[_b];\n if (this.nameTable[edge]) {\n this.nameTable[edge].sourceID = '';\n }\n }\n node.inEdges = [];\n node.outEdges = [];\n };\n /** @private */\n Diagram.prototype.updateIconVisibility = function (node, visibility) {\n for (var i = 0; i < node.wrapper.children.length; i++) {\n var child = node.wrapper.children[i];\n var id = child.id.split(node.id)[1];\n if (child.id && id && id.match('^_icon')) {\n child.visible = visibility;\n this.updateDiagramContainerVisibility(child, visibility);\n }\n }\n };\n /** @private */\n Diagram.prototype.updateEdges = function (obj) {\n if (obj.sourceID !== undefined && obj.sourceID !== '') {\n var node = this.nameTable[obj.sourceID];\n if (node && node.outEdges && node.outEdges.length === 0) {\n node.outEdges = [];\n }\n if (node && node.outEdges && node.outEdges.indexOf(obj.id) === -1) {\n node.outEdges.push(obj.id);\n }\n }\n if (obj.targetID !== undefined && obj.targetID !== '') {\n var node = this.nameTable[obj.targetID];\n if (node && node.inEdges && node.inEdges.length === 0) {\n node.inEdges = [];\n }\n if (node && node.inEdges && node.inEdges.indexOf(obj.id) === -1) {\n node.inEdges.push(obj.id);\n }\n if (node && node.visible && node.outEdges) {\n var value = node.outEdges.length === 0 ? false : true;\n this.updateIconVisibility(node, value);\n }\n }\n };\n /** @private */\n Diagram.prototype.refreshDiagram = function () {\n this.initLayerObjects();\n this.doLayout();\n this.updateBridging();\n this.scroller.setSize();\n };\n /** @private */\n Diagram.prototype.updateDiagramObject = function (obj) {\n var view;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n view = this.views[temp];\n if (view.mode === 'SVG' && this.diagramActions) {\n var htmlLayer = getHTMLLayer(this.element.id);\n var diagramElementsLayer = document.getElementById(view.element.id + '_diagramLayer');\n this.diagramRenderer.updateNode(obj.wrapper, diagramElementsLayer, htmlLayer, undefined);\n }\n else {\n this.refreshCanvasDiagramLayer(view);\n }\n }\n };\n /** @private */\n Diagram.prototype.getObjectsOfLayer = function (objectArray) {\n var nodeArray = [];\n for (var _i = 0, objectArray_1 = objectArray; _i < objectArray_1.length; _i++) {\n var obj = objectArray_1[_i];\n if (this.nameTable[obj]) {\n nodeArray.push(this.nameTable[obj]);\n }\n }\n return nodeArray;\n };\n /** @private */\n Diagram.prototype.refreshDiagramLayer = function () {\n var view;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n view = this.views[temp];\n switch (view.mode) {\n case 'SVG':\n this.refreshSvgDiagramLayer(view);\n break;\n case 'Canvas':\n this.refreshCanvasLayers();\n break;\n }\n }\n };\n /** @private */\n Diagram.prototype.refreshCanvasLayers = function () {\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n var view = this.views[temp];\n this.refreshCanvasDiagramLayer(view);\n }\n };\n Diagram.prototype.renderBasicElement = function (view) {\n var htmlLayer = getHTMLLayer(view.element.id);\n for (var i = 0; i < this.basicElements.length; i++) {\n var element = this.basicElements[i];\n if (element instanceof Container) {\n element.prevRotateAngle = 0;\n }\n element.measure(new Size(element.width, element.height));\n element.arrange(element.desiredSize);\n view.diagramRenderer.renderElement(element, view.diagramLayer, htmlLayer);\n }\n };\n Diagram.prototype.refreshElements = function (view) {\n if (!this.isDestroyed) {\n this.clearCanvas(view);\n if (view instanceof Diagram) {\n view.diagramLayer.getContext('2d').setTransform(view.scroller.currentZoom, 0, 0, view.scroller.currentZoom, 0, 0);\n view.diagramLayer.getContext('2d').scale(1.5, 1.5);\n }\n var htmlLayer = getHTMLLayer(view.element.id);\n var bounds = this.spatialSearch.getPageBounds();\n this.renderDiagramElements(view.diagramLayer, view.diagramRenderer, htmlLayer);\n if (view instanceof Diagram) {\n view.diagramLayer.style.transform = 'scale(' + (2 / 3) + ')';\n view.diagramLayer.style.transformOrigin = '0 0';\n }\n this.renderTimer = null;\n }\n };\n /** @private */\n Diagram.prototype.refreshCanvasDiagramLayer = function (view) {\n var _this = this;\n if (view.mode !== 'SVG' && !this.isDestroyed) {\n if (this.basicElements.length > 0) {\n this.renderBasicElement(view);\n }\n if ((!this.diagramActions || (this.diagramActions & DiagramAction.Render) === 0)\n || (DiagramAction.ToolAction & this.diagramActions) || (this.scroller.currentZoom !== 1)) {\n this.refreshElements(view);\n }\n else if (!this.renderTimer) {\n this.renderTimer = setTimeout(function () {\n _this.refreshElements(view);\n }, 40);\n }\n }\n };\n /** @private */\n Diagram.prototype.updatePortVisibility = function (node, portVisibility, inverse) {\n var portElement;\n var drawingObject = !(this.drawingObject && this.drawingObject.shape) ? true : false;\n if (node instanceof Node && drawingObject && canMove(node)) {\n var ports = node.ports;\n var changed = false;\n for (var i = 0; i < ports.length; i++) {\n portElement = this.getWrapper(node.wrapper, ports[i].id);\n if (portVisibility & PortVisibility.Hover || portVisibility & PortVisibility.Connect) {\n if (checkPortRestriction(ports[i], portVisibility)) {\n portElement.visible = !inverse;\n changed = true;\n }\n }\n }\n if (changed) {\n this.updateDiagramObject(node);\n }\n }\n };\n /** @private */\n Diagram.prototype.refreshSvgDiagramLayer = function (view) {\n if (!canVitualize(this)) {\n var container = document.getElementById(view.element.id);\n var bounds = container.getBoundingClientRect();\n var node = void 0;\n var element = void 0;\n var connector = void 0;\n var diagramElementsLayer = document.getElementById(view.element.id + '_diagramLayer');\n var htmlLayer = getHTMLLayer(view.element.id);\n for (var i = 0; i < this.basicElements.length; i++) {\n element = this.basicElements[i];\n element.measure(new Size(element.width, element.height));\n element.arrange(element.desiredSize);\n this.diagramRenderer.renderElement(element, diagramElementsLayer, htmlLayer);\n }\n this.renderDiagramElements(diagramElementsLayer, this.diagramRenderer, htmlLayer);\n }\n else {\n this.scroller.virtualizeElements();\n }\n };\n Diagram.prototype.removeVirtualObjects = function (clearIntervalVal) {\n if (this.deleteVirtualObject) {\n for (var i = 0; i < this.scroller.removeCollection.length; i++) {\n var obj = this.nameTable[this.scroller.removeCollection[i]];\n this.removeElements(obj);\n }\n this.deleteVirtualObject = false;\n }\n clearInterval(clearIntervalVal);\n };\n Diagram.prototype.updateVirtualObjects = function (collection, remove, tCollection) {\n var _this = this;\n var diagramElementsLayer = document.getElementById('diagram_diagramLayer');\n var htmlLayer = getHTMLLayer('diagram');\n var removeObjectInterval;\n for (var i = 0; i < collection.length; i++) {\n var index = this.scroller.removeCollection.indexOf(collection[i]);\n if (index >= 0) {\n this.scroller.removeCollection.splice(index, 1);\n }\n var object = this.nameTable[collection[i]];\n this.diagramRenderer.renderElement(object.wrapper, diagramElementsLayer, htmlLayer, undefined, undefined, undefined, undefined, object.zIndex);\n }\n for (var k = 0; k < tCollection.length; k++) {\n this.scroller.removeCollection.push(tCollection[k]);\n }\n var delay = 50;\n removeObjectInterval = setInterval(function (args) {\n _this.removeVirtualObjects(removeObjectInterval);\n }, delay);\n setTimeout(function () {\n _this.deleteVirtualObject = true;\n }, delay);\n };\n /** @private */\n Diagram.prototype.renderDiagramElements = function (canvas, renderer, htmlLayer, transform, fromExport) {\n if (transform === void 0) { transform = true; }\n for (var _i = 0, _a = Object.keys(this.layerZIndexTable); _i < _a.length; _i++) {\n var layerId = _a[_i];\n var layer = this.commandHandler.getLayer(this.layerZIndexTable[layerId]);\n var left = void 0;\n var top_1 = void 0;\n for (var _b = 0, _c = Object.keys(layer.zIndexTable); _b < _c.length; _b++) {\n var node = _c[_b];\n var element = this.nameTable[layer.zIndexTable[node]].wrapper;\n if (!(this.nameTable[layer.zIndexTable[node]].parentId)\n && !(this.nameTable[layer.zIndexTable[node]].processId)) {\n var transformValue = {\n tx: this.scroller.transform.tx,\n ty: this.scroller.transform.ty,\n scale: this.scroller.transform.scale\n };\n if (this.constraints & DiagramConstraints.Virtualization) {\n if (this.scroller.currentZoom < 1) {\n var horizonatlValue = this.scroller.horizontalOffset < 0 ? this.scroller.horizontalOffset : 0;\n var verticalValue = this.scroller.verticalOffset < 0 ? this.scroller.verticalOffset : 0;\n left = ((this.realActions & RealAction.hScrollbarMoved) ? 0 : -horizonatlValue) + 'px';\n top_1 = ((this.realActions & RealAction.vScrollbarMoved) ? 0 : -verticalValue) + 'px';\n if (this.realActions & RealAction.hScrollbarMoved) {\n this.realActions = this.realActions & ~RealAction.hScrollbarMoved;\n }\n if (this.realActions & RealAction.vScrollbarMoved) {\n this.realActions = this.realActions & ~RealAction.vScrollbarMoved;\n }\n }\n else {\n left = -this.scroller.horizontalOffset + 'px';\n top_1 = -this.scroller.verticalOffset + 'px';\n }\n this.diagramLayer.style.left = left;\n this.diagramLayer.style.top = top_1;\n transformValue.tx = this.scroller.horizontalOffset / transformValue.scale;\n transformValue.ty = this.scroller.verticalOffset / transformValue.scale;\n }\n var status_1 = true;\n if (fromExport) {\n status_1 = false;\n }\n renderer.renderElement(element, canvas, htmlLayer, (!renderer.isSvgMode && transform) ? transformValue : undefined, undefined, undefined, status_1);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.updateBridging = function (isLoad) {\n if (this.bridgingModule) {\n for (var i = 0; i < this.connectors.length; i++) {\n var connector = this.connectors[i];\n this.bridgingModule.updateBridging(connector, this);\n var canvas = this.connectors[i].wrapper;\n if (canvas) {\n var pathSegment = canvas.children[0];\n var data = pathSegment.data;\n connector.getSegmentElement(connector, pathSegment);\n if (pathSegment.data !== data) {\n canvas.measure(new Size());\n canvas.arrange(canvas.desiredSize);\n if (this.mode === 'SVG' && !isLoad) {\n this.updateDiagramObject(connector);\n }\n }\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.setCursor = function (cursor) {\n this.diagramRenderer.setCursor(this.diagramCanvas, cursor);\n };\n /** @private */\n Diagram.prototype.clearCanvas = function (view) {\n var width;\n var height;\n width = view.contentWidth || view.diagramLayer.width / this.scroller.currentZoom;\n height = view.contentHeight || view.diagramLayer.height / this.scroller.currentZoom;\n if (view.mode !== 'SVG') {\n var ctx = CanvasRenderer.getContext(view.diagramLayer);\n ctx.clearRect(0, 0, width, height);\n }\n };\n /** @private */\n Diagram.prototype.updateScrollOffset = function () {\n this.scroller.setScrollOffset(this.diagramCanvas.scrollLeft, this.diagramCanvas.scrollTop);\n updateRuler(this);\n if (canVitualize(this) && this.mode === 'SVG') {\n this.scroller.virtualizeElements();\n }\n };\n /** @private */\n Diagram.prototype.setOffset = function (offsetX, offsetY) {\n var container = document.getElementById(this.element.id + 'content');\n if (container) {\n container.scrollLeft = offsetX;\n container.scrollTop = offsetY;\n }\n };\n /** @private */\n Diagram.prototype.setSize = function (width, height) {\n if (this.diagramLayer && !this.preventUpdate) {\n var position = getRulerSize(this);\n width -= position.width;\n height -= position.height;\n var bounds = this.spatialSearch.getPageBounds();\n bounds.x *= this.scroller.currentZoom;\n bounds.y *= this.scroller.currentZoom;\n bounds.width *= this.scroller.currentZoom;\n bounds.height *= this.scroller.currentZoom;\n var factor = this.mode === 'SVG' ? 1 : 1.5;\n var diagramLayer = this.mode === 'SVG' ?\n getDiagramLayerSvg(this.element.id) : this.diagramLayer;\n var w = (this.mode === 'Canvas' &&\n (this.constraints & DiagramConstraints.Virtualization)) ? this.width : width;\n var h = (this.mode === 'Canvas' &&\n (this.constraints & DiagramConstraints.Virtualization)) ? this.height : height;\n diagramLayer.setAttribute('width', (factor * w).toString());\n diagramLayer.setAttribute('height', (factor * h).toString());\n var attr = { 'width': width.toString(), 'height': height.toString() };\n this.diagramLayerDiv.style.width = width + 'px';\n this.diagramLayerDiv.style.height = height + 'px';\n setAttributeSvg(getNativeLayerSvg(this.element.id), attr);\n setAttributeSvg(getPortLayerSvg(this.element.id), attr);\n var adornerSVG = getAdornerLayerSvg(this.element.id);\n setAttributeSvg(adornerSVG, attr);\n adornerSVG.parentNode.style.width = width + 'px';\n adornerSVG.parentNode.style.height = height + 'px';\n var gridLayer = getGridLayerSvg(this.element.id);\n setAttributeSvg(gridLayer, attr);\n this.diagramRenderer.updateGrid(this.snapSettings, gridLayer, this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n setAttributeSvg(getBackgroundLayerSvg(this.element.id), attr);\n this.htmlLayer.style.width = width + 'px';\n this.htmlLayer.style.height = height + 'px';\n if (this.mode !== 'SVG') {\n this.refreshDiagramLayer();\n }\n if (this.mode === 'SVG' && canVitualize(this)) {\n this.scroller.virtualizeElements();\n }\n }\n };\n /** @private */\n Diagram.prototype.transformLayers = function () {\n var bounds = this.spatialSearch.getPageBounds();\n bounds.x *= this.scroller.currentZoom;\n bounds.y *= this.scroller.currentZoom;\n bounds.width *= this.scroller.currentZoom;\n bounds.height *= this.scroller.currentZoom;\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n this.diagramRenderer.transformLayers(this.scroller.transform, this.mode === 'SVG');\n this.updateSelector();\n this.renderPageBreaks(bounds);\n };\n /**\n * Defines how to remove the Page breaks\n * @private\n */\n Diagram.prototype.removePageBreaks = function () {\n if (this.diagramLayer) {\n var line = getBackgroundLayer(this.element.id);\n if (line && line.childNodes) {\n var length_1 = line.childNodes.length;\n for (var i = 0; i < length_1; i++) {\n line.removeChild(line.childNodes[0]);\n }\n }\n }\n };\n /**\n * Defines how the page breaks has been rendered\n * @private\n */\n Diagram.prototype.renderPageBreaks = function (bounds) {\n this.removePageBreaks();\n var backgroundLayer = getBackgroundLayer(this.element.id);\n if (backgroundLayer) {\n var i = 0;\n bounds = this.scroller.getPageBounds(true);\n var x = (this.scroller.transform.tx + bounds.x) * this.scroller.currentZoom;\n var y = (this.scroller.transform.ty + bounds.y) * this.scroller.currentZoom;\n var height = bounds.height * this.scroller.currentZoom;\n var width = bounds.width * this.scroller.currentZoom;\n DiagramRenderer.renderSvgBackGroundImage(this.pageSettings.background, this.element, x, y, width, height);\n var options = {\n id: backgroundLayer.id + 'rect', x: x,\n y: y,\n height: height,\n width: width, angle: 0, stroke: '', strokeWidth: 1,\n fill: this.pageSettings.background.color, opacity: 1,\n pivotX: 0, pivotY: 0, visible: true, dashArray: '0',\n };\n this.diagramRenderer.drawRect(backgroundLayer, options);\n if (this.pageSettings.showPageBreaks) {\n var collection = this.scroller.getPageBreak(bounds);\n for (i = 0; i < collection.length; i++) {\n this.diagramRenderer.drawLine(backgroundLayer, {\n class: 'e-diagram-page-break',\n fill: 'none', stroke: '#aaaaaa', strokeWidth: 1, dashArray: '10 10',\n opacity: 2, x: 0, y: 0, width: 0, height: 0, angle: 0, pivotX: 0, pivotY: 0, visible: true,\n startPoint: {\n x: (collection[i].x1 + this.scroller.transform.tx) * this.scroller.currentZoom,\n y: (collection[i].y1 + this.scroller.transform.ty) * this.scroller.currentZoom\n },\n endPoint: {\n x: (collection[i].x2 + this.scroller.transform.tx) * this.scroller.currentZoom,\n y: (collection[i].y2 + this.scroller.transform.ty) * this.scroller.currentZoom\n }, id: collection[i].y1 === collection[i].y2 ? 'HorizontalLines' : 'VerticalLines'\n });\n }\n }\n }\n };\n Diagram.prototype.validatePageSize = function () {\n var temp = 0;\n if (this.pageSettings.orientation === 'Portrait') {\n if (this.pageSettings.width > this.pageSettings.height) {\n temp = this.pageSettings.height;\n this.pageSettings.height = this.pageSettings.width;\n this.pageSettings.width = temp;\n }\n }\n else {\n if (this.pageSettings.height > this.pageSettings.width) {\n temp = this.pageSettings.width;\n this.pageSettings.width = this.pageSettings.height;\n this.pageSettings.height = temp;\n }\n }\n };\n /**\n * @private\n */\n Diagram.prototype.setOverview = function (overview, id) {\n if (overview) {\n if (overview) {\n this.views.push(overview.id);\n this.views[overview.id] = overview;\n overview.renderDocument(overview);\n overview.diagramRenderer.setLayers();\n overview.updateView(overview);\n this.renderNodes(overview);\n }\n }\n else {\n for (var i = 0; i < this.views.length; i++) {\n if (this.views[i] === id) {\n overview = (this.views[id]);\n }\n }\n this.views[id] = undefined;\n var index = this.views.indexOf(id);\n this.views.splice(index, 1);\n }\n };\n Diagram.prototype.renderNodes = function (overview) {\n if (overview) {\n var renderer = new DiagramRenderer(overview.id, new SvgRenderer(), false);\n var g = document.getElementById(overview.element.id + '_diagramLayer');\n var htmlLayer = getHTMLLayer(overview.element.id);\n this.renderDiagramElements(g, overview.diagramRenderer || renderer, htmlLayer);\n }\n };\n Diagram.prototype.updateThumbConstraints = function (node, selectorModel) {\n var state = 0;\n var length = node.length;\n for (var i = 0; i < length; i++) {\n var obj = node[i];\n var hideRotate = false;\n var hideResize = false;\n var thumbConstraints = selectorModel.thumbsConstraints;\n if (obj instanceof Node) {\n hideRotate = (obj.shape.type === 'Bpmn' && (obj.shape.shape === 'Activity' &&\n (obj.shape.activity.subProcess.collapsed === false)) ||\n obj.shape.shape === 'TextAnnotation');\n hideResize = (obj.shape.type === 'Bpmn' && obj.shape.shape === 'TextAnnotation');\n if (!canRotate(obj) || !(thumbConstraints & ThumbsConstraints.Rotate) || hideRotate) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.Rotate;\n }\n if (!canResize(obj, 'SouthEast') || !(thumbConstraints & ThumbsConstraints.ResizeSouthEast) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeSouthEast;\n }\n if (!canResize(obj, 'NorthWest') || !(thumbConstraints & ThumbsConstraints.ResizeNorthWest) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeNorthWest;\n }\n if (!canResize(obj, 'East') || !(thumbConstraints & ThumbsConstraints.ResizeEast) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeEast;\n }\n if (!canResize(obj, 'West') || !(thumbConstraints & ThumbsConstraints.ResizeWest) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeWest;\n }\n if (!canResize(obj, 'North') || !(thumbConstraints & ThumbsConstraints.ResizeNorth) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeNorth;\n }\n if (!canResize(obj, 'South') || !(thumbConstraints & ThumbsConstraints.ResizeSouth) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeSouth;\n }\n if (!canResize(obj, 'NorthEast') || !(thumbConstraints & ThumbsConstraints.ResizeNorthEast) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeNorthEast;\n }\n if (!canResize(obj, 'SouthWest') || !(thumbConstraints & ThumbsConstraints.ResizeSouthWest) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeSouthWest;\n }\n }\n else if (obj instanceof Connector) {\n thumbConstraints = thumbConstraints | ThumbsConstraints.Default;\n if (canDragSourceEnd(obj)) {\n thumbConstraints = thumbConstraints | ThumbsConstraints.ConnectorSource;\n }\n else {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ConnectorSource;\n }\n if (canDragTargetEnd(obj)) {\n thumbConstraints = thumbConstraints | ThumbsConstraints.ConnectorTarget;\n }\n else {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ConnectorTarget;\n }\n }\n else {\n thumbConstraints = thumbConstraints | ThumbsConstraints.Default;\n if (!canResize(obj)) {\n thumbConstraints = thumbConstraints & ~(ThumbsConstraints.ResizeSouthEast | ThumbsConstraints.ResizeSouthWest |\n ThumbsConstraints.ResizeSouth | ThumbsConstraints.ResizeEast | ThumbsConstraints.ResizeWest |\n ThumbsConstraints.ResizeNorth | ThumbsConstraints.ResizeNorthEast | ThumbsConstraints.ResizeNorthWest);\n }\n if (!canRotate(obj)) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.Rotate;\n }\n }\n selectorModel.thumbsConstraints = thumbConstraints;\n }\n };\n /** @private */\n Diagram.prototype.renderSelector = function (multipleSelection) {\n var size = new Size();\n var selectorModel = this.selectedItems;\n var selectorConstraints = selectorModel.constraints;\n this.clearSelectorLayer();\n if (this.commandHandler.hasSelection()) {\n if (selectorModel.nodes.length === 1 && selectorModel.connectors.length === 0) {\n selectorModel.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.pivot = selectorModel.nodes[0].pivot;\n }\n selectorModel.wrapper.measure(size);\n selectorModel.wrapper.arrange(selectorModel.wrapper.desiredSize);\n selectorModel.width = selectorModel.wrapper.actualSize.width;\n selectorModel.height = selectorModel.wrapper.actualSize.height;\n selectorModel.offsetX = selectorModel.wrapper.offsetX;\n selectorModel.offsetY = selectorModel.wrapper.offsetY;\n if (selectorModel.rotateAngle !== 0) {\n for (var _i = 0, _a = selectorModel.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n obj.offsetX = obj.wrapper.offsetX;\n obj.offsetY = obj.wrapper.offsetY;\n }\n for (var _b = 0, _c = selectorModel.connectors; _b < _c.length; _b++) {\n var conn = _c[_b];\n //update connections\n }\n }\n var bounds = this.spatialSearch.getPageBounds();\n var selectorElement = void 0;\n selectorElement = getSelectorElement(this.element.id);\n selectorModel.thumbsConstraints = ThumbsConstraints.Default;\n if (selectorModel.annotation) {\n this.updateThumbConstraints([selectorModel.annotation], selectorModel);\n }\n else {\n this.updateThumbConstraints(selectorModel.nodes, selectorModel);\n this.updateThumbConstraints(selectorModel.connectors, selectorModel);\n }\n if (selectorModel.annotation) {\n this.renderSelectorForAnnotation(selectorModel, selectorElement);\n }\n else if (selectorModel.nodes.length + selectorModel.connectors.length === 1) {\n if (selectorModel.nodes[0] instanceof Node) {\n this.diagramRenderer.renderResizeHandle(selectorModel.nodes[0].wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, undefined, canMove(selectorModel.nodes[0]));\n }\n else if (selectorModel.connectors[0] instanceof Connector) {\n var connector = selectorModel.connectors[0];\n this.diagramRenderer.renderEndPointHandle(connector, selectorElement, selectorModel.thumbsConstraints, selectorModel.constraints, this.scroller.transform, connector.sourceWrapper !== undefined, connector.targetWrapper !== undefined, (this.connectorEditingToolModule && canDragSegmentThumb(connector)) ? true : false);\n }\n }\n else {\n this.diagramRenderer.renderResizeHandle(selectorModel.wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, undefined, canMove(selectorModel));\n }\n if (!(selectorModel.annotation)) {\n this.diagramRenderer.renderUserHandler(selectorModel, selectorElement, this.scroller.transform);\n }\n }\n };\n /** @private */\n Diagram.prototype.updateSelector = function () {\n var size = new Size();\n var selectorModel = this.selectedItems;\n var selectorConstraints = selectorModel.constraints;\n if (!(this.diagramActions & DiagramAction.ToolAction) && this.selectedItems.nodes.length === 1) {\n this.selectedItems.rotateAngle = this.selectedItems.nodes[0].rotateAngle;\n this.selectedItems.wrapper.rotateAngle = this.selectedItems.nodes[0].rotateAngle;\n }\n if (this.selectedItems !== undefined) {\n this.clearSelectorLayer();\n if (selectorModel.wrapper !== null && selectorModel.wrapper.children && selectorModel.wrapper.children.length) {\n selectorModel.wrapper.measure(size);\n selectorModel.wrapper.arrange(selectorModel.wrapper.desiredSize);\n if (selectorModel.rotateAngle !== 0 || selectorModel.rotateAngle !== selectorModel.wrapper.prevRotateAngle) {\n for (var _i = 0, _a = selectorModel.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n obj.offsetX = obj.wrapper.offsetX;\n obj.offsetY = obj.wrapper.offsetY;\n }\n }\n selectorModel.width = selectorModel.wrapper.actualSize.width;\n selectorModel.height = selectorModel.wrapper.actualSize.height;\n selectorModel.offsetX = selectorModel.wrapper.offsetX;\n selectorModel.offsetY = selectorModel.wrapper.offsetY;\n var selectorElement = void 0;\n selectorElement = getSelectorElement(this.element.id);\n var canHideResizers = this.eventHandler.canHideResizers();\n selectorModel.thumbsConstraints = ThumbsConstraints.Default;\n if (selectorModel.annotation) {\n this.updateThumbConstraints([selectorModel.annotation], selectorModel);\n }\n else {\n this.updateThumbConstraints(selectorModel.nodes, selectorModel);\n this.updateThumbConstraints(selectorModel.connectors, selectorModel);\n }\n if ((this.selectedItems.constraints & SelectorConstraints.UserHandle) && (!(selectorModel.annotation))) {\n this.diagramRenderer.renderUserHandler(selectorModel, selectorElement, this.scroller.transform);\n }\n if (selectorModel.annotation) {\n this.renderSelectorForAnnotation(selectorModel, selectorElement);\n }\n else if (selectorModel.nodes.length + selectorModel.connectors.length === 1) {\n if (selectorModel.connectors[0] instanceof Connector) {\n var connector = selectorModel.connectors[0];\n this.diagramRenderer.renderEndPointHandle(connector, selectorElement, selectorModel.thumbsConstraints, selectorConstraints, this.scroller.transform, connector.sourceWrapper !== undefined, connector.targetWrapper !== undefined, (this.connectorEditingToolModule && canDragSegmentThumb(connector)) ? true : false);\n }\n else if (selectorModel.nodes[0] instanceof Node) {\n this.diagramRenderer.renderResizeHandle(selectorModel.nodes[0].wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, canHideResizers, canMove(selectorModel.nodes[0]));\n }\n }\n else {\n this.diagramRenderer.renderResizeHandle(selectorModel.wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, canHideResizers, canMove(selectorModel));\n }\n }\n }\n };\n Diagram.prototype.renderSelectorForAnnotation = function (selectorModel, selectorElement) {\n this.diagramRenderer.renderResizeHandle(selectorModel.wrapper.children[0], selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, undefined, canMove(selectorModel.annotation));\n };\n /** @private */\n Diagram.prototype.drawSelectionRectangle = function (x, y, width, height) {\n this.clearSelectorLayer();\n this.diagramRenderer.drawSelectionRectangle(x, y, width, height, this.adornerLayer, this.scroller.transform);\n };\n /**\n * @private\n */\n Diagram.prototype.renderHighlighter = function (element) {\n var adornerSvg = getAdornerLayerSvg(this.element.id);\n this.diagramRenderer.renderHighlighter(element, adornerSvg, this.scroller.transform);\n };\n /**\n * @private\n */\n Diagram.prototype.clearHighlighter = function () {\n var adornerSvg = getAdornerLayerSvg(this.element.id);\n var highlighter = adornerSvg.getElementById(adornerSvg.id + '_highlighter');\n if (highlighter) {\n highlighter.parentNode.removeChild(highlighter);\n }\n };\n /** @private */\n Diagram.prototype.getNodesConnectors = function (selectedItems) {\n for (var i = 0; i < this.nodes.length; i++) {\n var node = this.nodes[i];\n selectedItems.push(node);\n }\n for (var i = 0; i < this.connectors.length; i++) {\n var conn = this.connectors[i];\n selectedItems.push(conn);\n }\n return selectedItems;\n };\n /** @private */\n Diagram.prototype.clearSelectorLayer = function () {\n var adornerSvg = getAdornerLayerSvg(this.element.id);\n var highlighter = adornerSvg.getElementById(adornerSvg.id + '_highlighter');\n var selectionRect = adornerSvg.getElementById(this.adornerLayer.id + '_selected_region');\n if (selectionRect) {\n selectionRect.parentNode.removeChild(selectionRect);\n }\n this.clearHighlighter();\n var childNodes = getSelectorElement(this.element.id).childNodes;\n var child;\n for (var i = childNodes.length; i > 0; i--) {\n child = childNodes[i - 1];\n child.parentNode.removeChild(child);\n }\n };\n /** @private */\n Diagram.prototype.getWrapper = function (nodes, id) {\n var wrapper;\n id = nodes.id + '_' + id;\n var container = nodes instanceof Canvas ? nodes : this.getPortContainer(this.nameTable[nodes.id]);\n for (var i = 0; i < container.children.length; i++) {\n if (id === container.children[i].id) {\n wrapper = container.children[i];\n }\n }\n return wrapper;\n };\n Diagram.prototype.getEndNodeWrapper = function (node, connector, source) {\n if (node.shape.type === 'Bpmn' && node.wrapper.children[0] instanceof Canvas) {\n if (node.shape.shape === 'Activity') {\n if (source && node.shape.activity.subProcess.type === 'Transaction'\n && connector.sourcePortID) {\n var portId = connector.sourcePortID;\n var parent_1 = node.wrapper.children[0].children[0].children[2];\n if (parent_1.children) {\n for (var _i = 0, _a = parent_1.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.visible && child.id === node.id + '_' + portId) {\n return child.children[0];\n }\n }\n }\n }\n return node.wrapper.children[0].children[0].children[0];\n }\n return node.wrapper.children[0].children[0];\n }\n if (!this.containsMargin(node.wrapper.children[0])) {\n if (!node.children) {\n return node.wrapper.children[0];\n }\n }\n return node.wrapper;\n };\n Diagram.prototype.containsMargin = function (node) {\n return node.margin && (node.margin.left !== 0 || node.margin.top !== 0 || node.margin.right !== 0 || node.margin.bottom !== 0);\n };\n Diagram.prototype.focusOutEdit = function () {\n this.endEdit();\n };\n Diagram.prototype.endEditCommand = function () {\n this.endEdit();\n };\n /**\n * @private\n */\n Diagram.prototype.endEdit = function () {\n if (this.diagramActions & DiagramAction.TextEdit) {\n var textArea = document.getElementById(this.element.id + '_editBox');\n var text = textArea.value;\n EventHandler.remove(textArea, 'input', this.eventHandler.inputChange);\n EventHandler.remove(textArea, 'focusout', this.focusOutEdit);\n var element = document.getElementById(this.element.id + '_editTextBoxDiv');\n var args = { oldValue: element.textContent, newValue: text, cancel: false };\n var bpmnAnnotation = false;\n var node = void 0;\n element.parentNode.removeChild(element);\n var textWrapper = void 0;\n if (this.bpmnModule) {\n node = this.bpmnModule.isBpmnTextAnnotation(this.activeLabel, this);\n textWrapper = this.bpmnModule.getTextAnnotationWrapper(node, this.activeLabel.id);\n bpmnAnnotation = node ? true : false;\n if (bpmnAnnotation) {\n if (element.textContent !== text) {\n this.triggerEvent(DiagramEvent.textEdit, args);\n if (!args.cancel) {\n this.bpmnModule.updateTextAnnotationContent(node, this.activeLabel, text, this);\n }\n }\n }\n }\n if (!bpmnAnnotation) {\n node = this.nameTable[this.activeLabel.parentId];\n var deleteNode = this.eventHandler.isAddTextNode(node, true);\n if (!deleteNode && element.textContent !== text) {\n this.triggerEvent(DiagramEvent.textEdit, args);\n }\n if (!textWrapper) {\n textWrapper = this.getWrapper(node.wrapper, this.activeLabel.id);\n }\n var annotation = findAnnotation(node, this.activeLabel.id);\n if (annotation.content !== text && !args.cancel) {\n annotation.content = text;\n this.dataBind();\n this.updateSelector();\n }\n if (deleteNode) {\n this.removeObjectsFromLayer(node);\n this.removeFromAQuad(node);\n delete this.nameTable[this.activeLabel.parentId];\n if (text !== '') {\n this.clearSelection();\n var clonedObject = cloneObject(node);\n node = this.add(clonedObject);\n this.updateDiagramObject(node);\n this.commandHandler.select(this.nameTable[node.id]);\n }\n }\n }\n textWrapper.visible = true;\n this.updateDiagramObject(node);\n this.diagramActions = this.diagramActions & ~DiagramAction.TextEdit;\n if (this.activeLabel.isGroup) {\n this.endGroupAction();\n }\n this.activeLabel = { id: '', parentId: '', isGroup: false };\n }\n };\n /** @private */\n Diagram.prototype.canLogChange = function () {\n if ((this.diagramActions & DiagramAction.Render) && (!(this.diagramActions & DiagramAction.ToolAction)) &&\n (!(this.diagramActions & DiagramAction.UndoRedo)) && (!(this.diagramActions & DiagramAction.PublicMethod))) {\n return true;\n }\n else {\n return false;\n }\n };\n Diagram.prototype.modelChanged = function (newProp, oldProp) {\n if (newProp.connectors || oldProp.connectors || newProp.nodes || oldProp.connectors\n || newProp.pageSettings || oldProp.pageSettings || newProp.bridgeDirection || oldProp.bridgeDirection) {\n return true;\n }\n return false;\n };\n Diagram.prototype.resetDiagramActions = function (action) {\n var isAction = action ? true : false;\n if (this.diagramActions & DiagramAction.UndoRedo && (!isAction || (action === DiagramAction.UndoRedo))) {\n this.diagramActions = this.diagramActions & ~DiagramAction.UndoRedo;\n }\n if (this.diagramActions & DiagramAction.PublicMethod && (!isAction || action === DiagramAction.PublicMethod)) {\n this.diagramActions = this.diagramActions & ~DiagramAction.PublicMethod;\n }\n };\n /** @private */\n Diagram.prototype.removeNode = function (node) {\n this.removeObjectsFromLayer(node);\n this.removeFromAQuad(this.nameTable[node.id]);\n delete this.nameTable[node.id];\n if (node.children) {\n delete this.groupTable[node.id];\n }\n this.nodes.splice(this.nodes.indexOf(node), 1);\n };\n /** @private */\n Diagram.prototype.deleteGroup = function (node) {\n var elements = [];\n var tempNode = [];\n if (node.children) {\n tempNode = this.commandHandler.getChildren(node, elements);\n }\n for (var _i = 0, tempNode_1 = tempNode; _i < tempNode_1.length; _i++) {\n var nodes = tempNode_1[_i];\n if (this.nameTable[nodes.id]) {\n this.remove(nodes);\n }\n }\n };\n //helper methods - end region\n //property changes - start region\n /** @private */\n Diagram.prototype.updateObject = function (actualObject, oldObject, changedProp) {\n if (!(this.diagramActions & DiagramAction.ToolAction)) {\n var bound = actualObject.wrapper.children[0].bounds;\n var checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, bound);\n if (!checkBoundaryConstraints) {\n if (actualObject instanceof Node) {\n var oldNode = oldObject;\n for (var _i = 0, _a = Object.keys(changedProp); _i < _a.length; _i++) {\n var key = _a[_i];\n switch (key) {\n case 'width':\n actualObject.width = oldNode.width;\n break;\n case 'height':\n actualObject.height = oldNode.height;\n break;\n case 'offsetX':\n actualObject.offsetX = oldNode.offsetX;\n break;\n case 'offsetY':\n actualObject.offsetY = oldNode.offsetY;\n break;\n case 'rotateAngle':\n actualObject.rotateAngle = oldNode.rotateAngle;\n break;\n }\n }\n this.nodePropertyChange(actualObject, changedProp, oldObject);\n }\n else {\n for (var _b = 0, _c = Object.keys(changedProp); _b < _c.length; _b++) {\n var key = _c[_b];\n var oldConnector = oldObject;\n var actualSourcePoint = actualObject.sourcePoint;\n var actualTargetPoint = actualObject.targetPoint;\n switch (key) {\n case 'sourcePoint':\n actualSourcePoint.x = oldConnector.sourcePoint.x || actualSourcePoint.x;\n actualSourcePoint.y = oldConnector.sourcePoint.y || actualSourcePoint.y;\n break;\n case 'targetPoint':\n actualTargetPoint.x = oldConnector.targetPoint.x || actualTargetPoint.x;\n actualTargetPoint.y = oldConnector.targetPoint.y || actualTargetPoint.y;\n }\n }\n this.connectorPropertyChange(actualObject, changedProp, oldObject);\n }\n }\n }\n };\n Diagram.prototype.nodePropertyChangeExtend = function (actualObject, oldObject, node, update) {\n if (node.style !== undefined && actualObject.shape.type !== 'Bpmn') {\n updateStyle(node.style, actualObject.wrapper.children[0]);\n update = true;\n }\n if (node.constraints !== undefined) {\n if ((oldObject.constraints & NodeConstraints.Select) &&\n (!(node.constraints & NodeConstraints.Select)) && isSelected(this, actualObject)) {\n this.clearSelection();\n }\n else {\n this.updateThumbConstraints(this.selectedItems.nodes, this.selectedItems);\n this.updateSelector();\n update = true;\n }\n }\n return update;\n };\n /* tslint:disable */\n /** @private */\n Diagram.prototype.nodePropertyChange = function (actualObject, oldObject, node, isLayout, rotate) {\n var existingBounds = actualObject.wrapper.outerBounds;\n var existingInnerBounds = actualObject.wrapper.bounds;\n var updateConnector = false;\n var i;\n var j;\n var offsetX;\n var offsetY;\n var update;\n var tx;\n var ty;\n if (node.width !== undefined) {\n if (!actualObject.children) {\n actualObject.wrapper.children[0].width = node.width;\n update = true;\n updateConnector = true;\n }\n else {\n this.scaleObject(actualObject, node.width, true);\n }\n }\n if (node.height !== undefined) {\n if (!actualObject.children) {\n actualObject.wrapper.children[0].height = node.height;\n update = true;\n updateConnector = true;\n }\n else {\n this.scaleObject(actualObject, node.height, false);\n }\n }\n update = this.nodePropertyChangeExtend(actualObject, oldObject, node, update);\n if (node.constraints !== undefined && canShadow(oldObject) !== canShadow(node)) {\n actualObject.wrapper.children[0].shadow = canShadow(actualObject) ? actualObject.shadow : null;\n }\n if (node.offsetX !== undefined) {\n actualObject.wrapper.offsetX = node.offsetX;\n update = true;\n updateConnector = true;\n }\n if (node.offsetY !== undefined) {\n actualObject.wrapper.offsetY = node.offsetY;\n update = true;\n updateConnector = true;\n }\n if (node.pivot !== undefined) {\n actualObject.wrapper.pivot = node.pivot;\n update = true;\n }\n if (node.minWidth !== undefined) {\n actualObject.wrapper.minWidth = node.minWidth;\n update = true;\n updateConnector = true;\n }\n if (node.minHeight !== undefined) {\n actualObject.wrapper.minHeight = node.minHeight;\n update = true;\n updateConnector = true;\n }\n if (node.maxWidth !== undefined) {\n actualObject.wrapper.maxWidth = node.maxWidth;\n update = true;\n updateConnector = true;\n }\n if (node.maxHeight !== undefined) {\n actualObject.wrapper.maxHeight = node.maxHeight;\n update = true;\n updateConnector = true;\n }\n if (node.rotateAngle !== undefined) {\n if (actualObject.children && rotate) {\n this.commandHandler.rotateObjects(actualObject, [actualObject], actualObject.rotateAngle - actualObject.wrapper.rotateAngle, { x: actualObject.offsetX, y: actualObject.offsetY }, false);\n }\n actualObject.wrapper.rotateAngle = node.rotateAngle;\n update = true;\n updateConnector = true;\n }\n if (node.backgroundColor !== undefined) {\n actualObject.wrapper.style.fill = node.backgroundColor;\n }\n if (node.visible !== undefined) {\n this.updateElementVisibility(actualObject.wrapper, actualObject, actualObject.visible);\n }\n if (node.shape !== undefined && actualObject.shape.type !== 'Bpmn') {\n update = true;\n updateShape(node, actualObject, oldObject, this);\n updateConnector = true;\n }\n if (node.margin) {\n update = true;\n this.updateMargin(actualObject, node);\n updateConnector = true;\n }\n if (((node.shape !== undefined && node.shape.type === undefined) || node.width !== undefined\n || node.height !== undefined || node.style !== undefined) && actualObject.shape.type === 'Bpmn' && this.bpmnModule) {\n update = true;\n updateConnector = true;\n this.bpmnModule.updateBPMN(node, oldObject, actualObject, this);\n }\n if (node.ports !== undefined) {\n for (var _i = 0, _a = Object.keys(node.ports); _i < _a.length; _i++) {\n var key = _a[_i];\n var index = Number(key);\n update = true;\n var changedObject = node.ports[key];\n var actualPort = actualObject.ports[index];\n this.updatePort(changedObject, actualPort, actualObject.wrapper);\n }\n }\n if (node.annotations !== undefined || node.width !== undefined) {\n for (var _b = 0, _c = Object.keys(node.annotations || actualObject.annotations); _b < _c.length; _b++) {\n var key = _c[_b];\n var index = Number(key);\n update = true;\n var changedObject = node.annotations ? node.annotations[key] : actualObject.annotations;\n var actualAnnotation = actualObject.annotations[index];\n if (actualAnnotation) {\n var updateSize = actualObject.width ? true : false;\n this.updateAnnotation(changedObject, actualAnnotation, actualObject.wrapper, actualObject, updateSize);\n }\n }\n }\n if (node.expandIcon !== undefined || node.collapseIcon !== undefined || node.isExpanded !== undefined) {\n this.updateIcon(actualObject);\n this.updateDefaultLayoutIcons(actualObject);\n if (node.isExpanded !== undefined) {\n this.commandHandler.expandNode(actualObject, this);\n }\n update = true;\n }\n if (node.tooltip !== undefined) {\n this.updateTooltip(actualObject, node);\n }\n if (update) {\n if (!(this.diagramActions & DiagramAction.ToolAction)) {\n if (this.checkSelectedItem(actualObject)) {\n this.updateSelector();\n }\n }\n if (this.bpmnModule !== undefined) {\n this.bpmnModule.updateTextAnnotationProp(actualObject, { offsetX: (oldObject.offsetX || actualObject.offsetX), offsetY: (oldObject.offsetY || actualObject.offsetY) }, this);\n }\n actualObject.wrapper.measure(new Size(actualObject.wrapper.bounds.width, actualObject.wrapper.bounds.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n this.updateObject(actualObject, oldObject, node);\n if (!isLayout) {\n this.commandHandler.connectorSegmentChange(actualObject, existingInnerBounds, (node.rotateAngle !== undefined) ? true : false);\n if (updateConnector) {\n this.updateConnectorEdges(actualObject);\n }\n }\n else {\n if (actualObject && actualObject.visible && actualObject.outEdges) {\n this.updateIconVisibility(actualObject, (actualObject.outEdges.length === 0 ? false : true));\n }\n }\n if (this.bpmnModule !== undefined) {\n this.bpmnModule.updateDocks(actualObject, this);\n }\n this.updateGroupOffset(actualObject);\n if (existingBounds.equals(existingBounds, actualObject.wrapper.outerBounds) === false) {\n this.updateQuad(actualObject);\n }\n var objects = [];\n objects = objects.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n if (objects.length === 0) {\n if (actualObject.parentId) {\n var parent_2 = this.nameTable[actualObject.parentId];\n parent_2.wrapper.measure(new Size(parent_2.wrapper.width, actualObject.wrapper.height));\n parent_2.wrapper.arrange(parent_2.wrapper.desiredSize);\n parent_2.offsetX = parent_2.wrapper.offsetX;\n parent_2.offsetY = parent_2.wrapper.offsetY;\n }\n }\n if (existingInnerBounds.equals(existingInnerBounds, actualObject.wrapper.bounds) === false) {\n this.updateGroupSize(actualObject);\n if (actualObject.children) {\n this.updateGroupOffset(actualObject);\n }\n }\n if (this.mode === 'SVG' && !this.preventNodesUpdate) {\n this.updateDiagramObject(actualObject);\n }\n }\n };\n Diagram.prototype.updateConnectorProperties = function (connector) {\n if (this.preventConnectorsUpdate) {\n var index = this.selectionConnectorsList.indexOf(connector);\n if (index === -1) {\n this.selectionConnectorsList.push(connector);\n }\n }\n else {\n var conn = {\n sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint, sourceID: connector.sourceID,\n targetID: connector.targetID, sourcePortID: connector.sourcePortID, targetPortID: connector.targetPortID\n };\n this.connectorPropertyChange(connector, {}, conn);\n }\n };\n Diagram.prototype.updateConnectorEdges = function (actualObject) {\n if (actualObject.inEdges.length > 0) {\n for (var j = 0; j < actualObject.inEdges.length; j++) {\n this.updateConnectorProperties(this.nameTable[actualObject.inEdges[j]]);\n }\n }\n if (actualObject.outEdges.length > 0) {\n for (var k = 0; k < actualObject.outEdges.length; k++) {\n this.updateConnectorProperties(this.nameTable[actualObject.outEdges[k]]);\n }\n }\n if (actualObject.parentId && this.nameTable[actualObject.parentId]) {\n this.updateConnectorEdges(this.nameTable[actualObject.parentId]);\n }\n };\n /* tslint:enable */\n Diagram.prototype.connectorProprtyChangeExtend = function (actualObject, oldProp, newProp, updateSelector) {\n if (newProp.type !== undefined && newProp.type !== oldProp.type) {\n if (actualObject.segments.length > 0 && newProp.segments === undefined) {\n actualObject.segments = [];\n }\n }\n if ((newProp.shape !== undefined) && actualObject.shape !== undefined &&\n actualObject.shape && actualObject.shape.type === 'Bpmn' && this.bpmnModule) {\n this.bpmnModule.updateBPMNConnector(actualObject, oldProp, newProp, this);\n }\n if (actualObject.constraints !== undefined) {\n this.updateThumbConstraints(this.selectedItems.connectors, this.selectedItems);\n return updateSelector = true;\n }\n return updateSelector;\n };\n /** @private */\n Diagram.prototype.connectorPropertyChange = function (actualObject, oldProp, newProp, disableBridging) {\n var existingBounds = actualObject.wrapper.bounds;\n var updateSelector = false;\n var points = [];\n updateSelector = this.connectorProprtyChangeExtend(actualObject, oldProp, newProp, updateSelector);\n if (newProp.visible !== undefined) {\n this.updateElementVisibility(actualObject.wrapper, actualObject, actualObject.visible);\n }\n if (newProp.sourcePoint !== undefined || newProp.targetPoint !== undefined\n || newProp.sourceID !== undefined || newProp.targetID !== undefined ||\n newProp.sourcePortID !== undefined || newProp.targetPortID !== undefined ||\n newProp.type !== undefined || newProp.segments !== undefined) {\n if ((newProp.sourceID !== undefined && newProp.sourceID !== oldProp.sourceID) || newProp.sourcePortID) {\n var sourceNode = this.nameTable[actualObject.sourceID];\n if (!sourceNode || canOutConnect(sourceNode)) {\n actualObject.sourceWrapper = sourceNode ? this.getEndNodeWrapper(sourceNode, actualObject, true) : undefined;\n }\n if (newProp.sourceID !== undefined && oldProp.sourceID !== undefined && oldProp.sourceID !== '') {\n var oldSource = this.nameTable[oldProp.sourceID];\n if (oldSource !== undefined && oldSource.outEdges && oldSource.outEdges.indexOf(actualObject.id) !== -1) {\n removeItem(oldSource.outEdges, actualObject.id);\n }\n }\n this.updateEdges(actualObject);\n }\n if (newProp.targetID !== undefined && newProp.targetID !== oldProp.targetID) {\n var targetNode = this.nameTable[newProp.targetID];\n if (!targetNode || canInConnect(targetNode)) {\n actualObject.targetWrapper = targetNode ? this.getEndNodeWrapper(targetNode, actualObject, false) : undefined;\n }\n if (oldProp !== undefined && oldProp.targetID !== undefined && oldProp.targetID !== '') {\n var oldTarget = this.nameTable[oldProp.targetID];\n if (oldTarget !== undefined && oldTarget.inEdges && oldTarget.inEdges.indexOf(actualObject.id) !== -1) {\n removeItem(oldTarget.inEdges, actualObject.id);\n }\n }\n this.updateEdges(actualObject);\n }\n if (newProp.sourcePortID !== undefined && newProp.sourcePortID !== oldProp.sourcePortID) {\n var source = void 0;\n if (actualObject.sourceID && this.nameTable[actualObject.sourceID]) {\n source = this.nameTable[actualObject.sourceID].wrapper;\n }\n actualObject.sourcePortWrapper = source ?\n this.getWrapper(source, newProp.sourcePortID) : undefined;\n }\n if (newProp.targetPortID !== undefined && newProp.targetPortID !== oldProp.targetPortID) {\n var target = void 0;\n if (actualObject.targetID && this.nameTable[actualObject.targetID]) {\n target = this.nameTable[actualObject.targetID].wrapper;\n }\n actualObject.targetPortWrapper = target ?\n this.getWrapper(target, newProp.targetPortID) : undefined;\n }\n points = this.getPoints(actualObject);\n }\n //Add prop change for zindex, alignments and margin\n if (newProp.style !== undefined) {\n updateStyle(newProp.style, actualObject.wrapper.children[0]);\n }\n if (points.length > 0 || newProp.sourceDecorator !== undefined || newProp.targetDecorator !== undefined ||\n newProp.cornerRadius !== undefined) {\n updateConnector(actualObject, points.length > 0 ? points : actualObject.intermediatePoints);\n if (newProp.type !== undefined) {\n updateSelector = true;\n }\n if (points.length > 0) {\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n if (actualObject.annotations.length) {\n for (var _i = 0, _a = actualObject.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n var annotationWrapper = void 0;\n annotationWrapper = this.getWrapper(actualObject.wrapper, annotation.id);\n actualObject.updateAnnotation(annotation, actualObject.intermediatePoints, actualObject.wrapper.bounds, annotationWrapper);\n }\n }\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n this.updateObject(actualObject, oldProp, newProp);\n } //work-around to update intersected connector bridging\n }\n if ((newProp.sourcePoint || newProp.targetPoint || newProp.segments)\n && this.diagramActions === DiagramAction.Render) {\n updateSelector = true;\n }\n if (!disableBridging) {\n this.updateBridging();\n }\n this.updateAnnotations(newProp, actualObject);\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n if (existingBounds.equals(existingBounds, actualObject.wrapper.bounds) === false) {\n this.updateQuad(actualObject);\n this.updateGroupSize(actualObject);\n }\n if (updateSelector === true && this.checkSelectedItem(actualObject) && (!(this.diagramActions & DiagramAction.ToolAction))) {\n this.updateSelector();\n }\n if (this.mode === 'SVG' && !this.preventConnectorsUpdate) {\n this.updateDiagramObject(actualObject);\n }\n };\n Diagram.prototype.getPoints = function (actualObject, points) {\n var pts;\n pts = actualObject.getConnectorPoints(actualObject.type, points, this.layout.type === 'ComplexHierarchicalTree' || this.layout.type === 'HierarchicalTree' ?\n this.layout.orientation : undefined);\n return pts;\n };\n /**\n * update the opacity and visibility for the node once the layout animation starts\n */\n /** @private */\n Diagram.prototype.updateNodeProperty = function (element, visible, opacity) {\n if (visible === undefined) {\n this.updateElementVisibility(element, this.nameTable[element.id], visible);\n }\n else {\n element.style.opacity = opacity;\n for (var i = 0; i < element.children.length; i++) {\n if (element.children[i] instanceof Container) {\n this.updateNodeProperty(element.children[i], undefined, opacity);\n }\n element.children[i].style.opacity = opacity;\n }\n }\n };\n /**\n * checkSelected Item for Connector\n * @private\n */\n Diagram.prototype.checkSelectedItem = function (actualObject) {\n var selectorModel = this.selectedItems;\n var isSelected = false;\n var selItems = [];\n selItems = selItems.concat(selectorModel.nodes, selectorModel.connectors);\n if (selItems.length > 0) {\n if (actualObject.id === selItems[selItems.length - 1].id) {\n isSelected = true;\n }\n }\n return isSelected;\n };\n /**\n * Updates the visibility of the diagram container\n * @private\n */\n Diagram.prototype.updateDiagramContainerVisibility = function (element, visible) {\n if (element instanceof Container) {\n for (var i = 0; i < element.children.length; i++) {\n this.updateDiagramContainerVisibility(element.children[i], visible);\n }\n }\n element.visible = visible;\n };\n /**\n * Updates the visibility of the node/connector\n * @private\n */\n Diagram.prototype.updateElementVisibility = function (element, obj, visible) {\n if (visible !== undefined) {\n element.visible = visible;\n if (obj instanceof Node) {\n //content\n if (!obj.children) {\n element.children[0].visible = visible;\n this.updateDiagramContainerVisibility(element.children[0], visible);\n if (obj.shape.type === 'Bpmn' && this.bpmnModule) {\n this.bpmnModule.updateElementVisibility(obj, visible, this);\n }\n }\n else {\n for (var _i = 0, _a = obj.children; _i < _a.length; _i++) {\n var child = _a[_i];\n this.updateElementVisibility(this.nameTable[child].wrapper, this.nameTable[child], visible);\n }\n }\n //ports\n if (obj.ports) {\n for (var _b = 0, _c = obj.ports; _b < _c.length; _b++) {\n var port = _c[_b];\n if (port.visibility & PortVisibility.Visible) {\n var wrapper = this.getWrapper(element, port.id);\n wrapper.visible = visible;\n }\n }\n }\n if (obj.annotations) {\n for (var _d = 0, _e = obj.annotations; _d < _e.length; _d++) {\n var annotation = _e[_d];\n var wrapper = this.getWrapper(element, annotation.id);\n wrapper.visible = visible;\n }\n }\n }\n else {\n //path and decorators\n for (var i = 0; i < 3; i++) {\n element.children[i].visible = visible;\n }\n }\n if (obj.annotations) {\n //annotations\n for (var _f = 0, _g = obj.annotations; _f < _g.length; _f++) {\n var annotation = _g[_f];\n var wrapper = this.getWrapper(element, annotation.id);\n wrapper.visible = visible;\n }\n }\n if (obj.expandIcon || obj.collapseIcon) {\n var wrapper = this.getWrapper(element, 'icon_content');\n if (wrapper) {\n for (var i = 0; i < wrapper.children.length; i++) {\n wrapper.children[i].visible = visible;\n }\n wrapper.visible = visible;\n }\n if (obj && obj.visible && obj.outEdges) {\n this.updateIconVisibility(obj, (obj.outEdges.length === 0 ? false : true));\n }\n }\n if (visible === false) {\n this.unSelect(this.nameTable[element.id]);\n }\n if ((obj instanceof Node && !this.preventNodesUpdate) || (obj instanceof Connector && !this.preventConnectorsUpdate)) {\n //Avoid calling updateDiagramObject method during rendering\n if (this.diagramActions) {\n this.updateDiagramObject(this.nameTable[element.id]);\n }\n }\n }\n };\n Diagram.prototype.updateAnnotations = function (newProp, actualObject) {\n if (newProp.annotations !== undefined) {\n for (var _i = 0, _a = Object.keys(newProp.annotations); _i < _a.length; _i++) {\n var key = _a[_i];\n var index = Number(key);\n var changedObject = newProp.annotations[key];\n var actualAnnotation = actualObject.annotations[index];\n this.updateAnnotation(changedObject, actualAnnotation, actualObject.wrapper, actualObject);\n }\n }\n };\n /** @private */\n Diagram.prototype.updateAnnotation = function (changedObject, actualAnnotation, nodes, actualObject, canUpdateSize) {\n var annotationWrapper;\n var isMeasure = false;\n annotationWrapper = this.getWrapper(nodes, actualAnnotation.id);\n if (annotationWrapper !== undefined) {\n if (changedObject.width !== undefined && changedObject.height !== undefined) {\n annotationWrapper.width = changedObject.width;\n annotationWrapper.height = changedObject.height;\n isMeasure = true;\n }\n if (changedObject.rotateAngle !== undefined) {\n annotationWrapper.rotateAngle = changedObject.rotateAngle;\n }\n if (canUpdateSize) {\n annotationWrapper.refreshTextElement();\n }\n if (actualAnnotation instanceof PathAnnotation && changedObject.segmentAngle !== undefined) {\n annotationWrapper.rotateAngle = actualAnnotation.rotateAngle;\n }\n if (actualAnnotation instanceof ShapeAnnotation &&\n changedObject.offset !== undefined) {\n var offset = changedObject.offset;\n isMeasure = true;\n var offsetX = offset.x !== undefined ? offset.x :\n actualAnnotation.offset.x;\n var offsetY = offset.y !== undefined ? offset.y :\n actualAnnotation.offset.y;\n annotationWrapper.setOffsetWithRespectToBounds(offsetX, offsetY, 'Fraction');\n annotationWrapper.relativeMode = 'Point';\n }\n else if (actualAnnotation instanceof PathAnnotation &&\n (changedObject.offset !== undefined ||\n changedObject.segmentAngle !== undefined)) {\n actualObject.updateAnnotation(actualAnnotation, actualObject.intermediatePoints, actualObject.wrapper.bounds, annotationWrapper);\n }\n if ((actualAnnotation instanceof PathAnnotation) && changedObject.displacement) {\n if (changedObject.displacement.x !== undefined ||\n changedObject.displacement.y !== undefined) {\n isMeasure = true;\n }\n }\n if (changedObject.margin !== undefined) {\n isMeasure = true;\n if (changedObject.margin.bottom !== undefined) {\n annotationWrapper.margin.bottom = changedObject.margin.bottom;\n }\n if (changedObject.margin.top !== undefined) {\n annotationWrapper.margin.top = changedObject.margin.top;\n }\n if (changedObject.margin.left !== undefined) {\n annotationWrapper.margin.left = changedObject.margin.left;\n }\n if (changedObject.margin.right !== undefined) {\n annotationWrapper.margin.right = changedObject.margin.right;\n }\n }\n if (isMeasure || canUpdateSize) {\n annotationWrapper.width = (actualAnnotation.width || actualObject.width);\n }\n if (changedObject.horizontalAlignment !== undefined) {\n annotationWrapper.horizontalAlignment = changedObject.horizontalAlignment;\n isMeasure = true;\n }\n if (changedObject.verticalAlignment !== undefined) {\n annotationWrapper.verticalAlignment = changedObject.verticalAlignment;\n isMeasure = true;\n }\n if (changedObject.visibility !== undefined) {\n annotationWrapper.visible = (nodes.visible && changedObject.visibility) ? true : false;\n }\n if (changedObject.constraints !== undefined) {\n var updateSelector = false;\n if ((annotationWrapper.constraints & AnnotationConstraints.Select) &&\n (!(changedObject.constraints & AnnotationConstraints.Select)) &&\n isSelected(this, actualObject, false, annotationWrapper)) {\n updateSelector = true;\n }\n annotationWrapper.constraints = changedObject.constraints;\n if (updateSelector) {\n this.clearSelection();\n }\n }\n if (changedObject.style !== undefined) {\n updateStyle(changedObject.style, annotationWrapper);\n }\n if (changedObject.hyperlink !== undefined) {\n updateHyperlink(changedObject.hyperlink, annotationWrapper, actualAnnotation);\n }\n if (changedObject.content !== undefined) {\n if (annotationWrapper) {\n isMeasure = true;\n annotationWrapper.content = changedObject.content;\n }\n }\n if (isMeasure === true) {\n annotationWrapper.measure(new Size(annotationWrapper.width, annotationWrapper.height));\n annotationWrapper.arrange(annotationWrapper.desiredSize);\n }\n annotationWrapper.refreshTextElement();\n // this.refresh(); this.refreshDiagramLayer();\n }\n };\n /** @private */\n Diagram.prototype.updatePort = function (changedObject, actualPort, nodes) {\n var portWrapper;\n var isMeasure = false;\n portWrapper = this.getWrapper(nodes, actualPort.id);\n if (portWrapper !== undefined) {\n if (changedObject.offset !== undefined) {\n isMeasure = true;\n var offsetX = changedObject.offset.x !== undefined ? changedObject.offset.x :\n actualPort.offset.x;\n var offsetY = changedObject.offset.y !== undefined ? changedObject.offset.y :\n actualPort.offset.y;\n portWrapper.setOffsetWithRespectToBounds(offsetX, offsetY, 'Fraction');\n portWrapper.relativeMode = 'Point';\n }\n if (changedObject.width !== undefined) {\n isMeasure = true;\n portWrapper.width = changedObject.width;\n }\n if (changedObject.height !== undefined) {\n isMeasure = true;\n portWrapper.height = changedObject.height;\n }\n if (changedObject.visibility !== undefined) {\n portWrapper.visible = (nodes.visible && checkPortRestriction(actualPort, PortVisibility.Visible)) ? true : false;\n }\n if (changedObject.margin !== undefined) {\n isMeasure = true;\n if (changedObject.margin.bottom !== undefined) {\n portWrapper.margin.bottom = changedObject.margin.bottom;\n }\n if (changedObject.margin.top !== undefined) {\n portWrapper.margin.top = changedObject.margin.top;\n }\n if (changedObject.margin.right !== undefined) {\n portWrapper.margin.right = changedObject.margin.right;\n }\n if (changedObject.margin.left !== undefined) {\n portWrapper.margin.left = changedObject.margin.left;\n }\n }\n if (changedObject.horizontalAlignment !== undefined) {\n isMeasure = true;\n portWrapper.horizontalAlignment = changedObject.horizontalAlignment;\n }\n if (changedObject.verticalAlignment !== undefined) {\n isMeasure = true;\n portWrapper.verticalAlignment = changedObject.verticalAlignment;\n }\n if (changedObject.style !== undefined) {\n if (changedObject.style.fill !== undefined) {\n portWrapper.style.fill = changedObject.style.fill;\n }\n if (changedObject.style.opacity !== undefined) {\n portWrapper.style.opacity = changedObject.style.opacity;\n }\n if (changedObject.style.strokeColor !== undefined) {\n portWrapper.style.strokeColor = changedObject.style.strokeColor;\n }\n if (changedObject.style.strokeWidth !== undefined) {\n portWrapper.style.strokeWidth = changedObject.style.strokeWidth;\n }\n if (changedObject.style.strokeDashArray !== undefined) {\n portWrapper.style.strokeDashArray = changedObject.style.strokeDashArray;\n }\n }\n if (changedObject.shape !== undefined) {\n if (portWrapper) {\n var pathdata = getPortShape(changedObject.shape);\n portWrapper.data = pathdata;\n }\n }\n if (changedObject.pathData !== undefined) {\n portWrapper.data = String(changedObject.pathData);\n isMeasure = true;\n }\n if (isMeasure === true) {\n portWrapper.measure(new Size(portWrapper.width, portWrapper.height));\n portWrapper.arrange(portWrapper.desiredSize);\n }\n //this.refresh(); this.refreshDiagramLayer();\n }\n };\n /** @private */\n Diagram.prototype.updateIcon = function (actualObject) {\n var iconContainer = this.getWrapper(actualObject.wrapper, 'icon_content');\n var diagramId = (this.diagramActions & DiagramAction.Render) ? this.element.id : undefined;\n if (iconContainer) {\n if (this.mode === 'SVG') {\n var icon = getDiagramElement(actualObject.wrapper.id + '_icon_content', diagramId);\n if (icon) {\n var iconRect = getDiagramElement(icon.id + '_rect', diagramId);\n var iconShape = getDiagramElement(icon.id + '_shape', diagramId);\n var nativeContent = getDiagramElement(iconShape.id + '_native_element', diagramId);\n if (nativeContent) {\n nativeContent.parentNode.removeChild(nativeContent);\n }\n iconShape.parentNode.removeChild(iconShape);\n iconRect.parentNode.removeChild(iconRect);\n icon.parentNode.removeChild(icon);\n }\n }\n var index = actualObject.wrapper.children.indexOf(iconContainer);\n actualObject.wrapper.children.splice(index, 1);\n }\n var portContainer = this.getPortContainer(actualObject);\n actualObject.initIcons(this.getDescription, this.layout, portContainer, this.element.id);\n };\n Diagram.prototype.getPortContainer = function (actualObject) {\n if (actualObject.children) {\n for (var i = 0; i < actualObject.wrapper.children.length; i++) {\n if (actualObject.wrapper.children[i].id === 'group_container') {\n return actualObject.wrapper.children[i];\n }\n }\n }\n return actualObject.wrapper;\n };\n Diagram.prototype.updateTooltip = function (actualObject, node) {\n if (node.tooltip.content !== undefined) {\n actualObject.tooltip.content = node.tooltip.content;\n }\n if (node.tooltip.position !== undefined) {\n actualObject.tooltip.position = node.tooltip.position;\n }\n if (node.tooltip.height !== undefined) {\n actualObject.tooltip.height = node.tooltip.height;\n }\n if (node.tooltip.width !== undefined) {\n actualObject.tooltip.width = node.tooltip.width;\n }\n if (node.tooltip.showTipPointer !== undefined) {\n actualObject.tooltip.showTipPointer = node.tooltip.showTipPointer;\n }\n };\n /** @private */\n Diagram.prototype.updateQuad = function (obj) {\n var modified = this.spatialSearch.updateQuad(obj.wrapper);\n if (modified && !this.preventUpdate) {\n this.updatePage();\n }\n };\n /** @private */\n Diagram.prototype.removeFromAQuad = function (obj) {\n this.spatialSearch.removeFromAQuad(obj.wrapper);\n var modified = this.spatialSearch.updateBounds(obj.wrapper);\n if (modified && !this.preventUpdate) {\n this.updatePage();\n }\n if (obj.children) {\n var child = void 0;\n var children = obj.children;\n for (var i = 0; i < children.length; i++) {\n child = this.nameTable[children[i]];\n if (child) {\n this.removeFromAQuad(child);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.updateGroupSize = function (node) {\n var tempNode;\n if (node.parentId) {\n tempNode = this.nameTable[node.parentId];\n if (tempNode) {\n if (tempNode.parentId) {\n this.updateGroupSize(tempNode);\n }\n else {\n tempNode.wrapper.measure(new Size());\n tempNode.wrapper.arrange(tempNode.wrapper.desiredSize);\n this.updateGroupOffset(tempNode);\n this.updateDiagramObject(tempNode);\n }\n }\n }\n };\n Diagram.prototype.updatePage = function () {\n if (this.diagramActions & DiagramAction.Render) {\n this.scroller.setSize();\n this.scroller.updateScrollOffsets();\n //updating overview\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n var view = this.views[temp];\n if (!(view instanceof Diagram)) {\n view.updateView(view);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.protectPropertyChange = function (enable) {\n this.isProtectedOnChange = enable;\n };\n /** @private */\n Diagram.prototype.updateMargin = function (node, changes) {\n if (changes.margin.top !== undefined) {\n node.margin.top = changes.margin.top;\n }\n if (changes.margin.bottom !== undefined) {\n node.margin.bottom = changes.margin.bottom;\n }\n if (changes.margin.left !== undefined) {\n node.margin.left = changes.margin.left;\n }\n if (changes.margin.right !== undefined) {\n node.margin.right = changes.margin.right;\n }\n };\n //property changes - end region\n /* tslint:disable */\n Diagram.prototype.initDroppables = function () {\n var _this = this;\n // initiates droppable event\n var childTable = {};\n var entryTable = {};\n this.droppable = new Droppable(this.element);\n this.droppable.accept = '.e-dragclone';\n // tslint:disable-next-line:no-any\n this.droppable.over = function (args) {\n if (!_this.currentSymbol) {\n if (args.dragData) {\n var newObj = void 0;\n var position = _this.eventHandler.getMousePosition(args.event);\n var clonedObject = void 0;\n var selectedSymbol = args.dragData.helper;\n var paletteId = selectedSymbol.getAttribute('paletteId');\n if (paletteId) {\n var sourceElement = document.getElementById(paletteId).ej2_instances[0];\n var source = 'sourceElement';\n _this.droppable[source] = sourceElement;\n var selectedSymbols = 'selectedSymbols';\n var childtable = 'childTable';\n if (sourceElement) {\n var obj = sourceElement[selectedSymbols];\n clonedObject = cloneObject(sourceElement[selectedSymbols]);\n childTable = sourceElement[childtable];\n var wrapper = obj.wrapper.children[0].children[0];\n if (sourceElement[selectedSymbols] instanceof Node) {\n clonedObject.offsetX = position.x + 5 + (clonedObject.width || wrapper.actualSize.width) / 2;\n clonedObject.offsetY = position.y + (clonedObject.height || wrapper.actualSize.height) / 2;\n var newNode = new Node(_this, 'nodes', clonedObject, true);\n if (newNode.shape.type === 'Bpmn' && newNode.shape.activity.subProcess.processes\n && newNode.shape.activity.subProcess.processes.length) {\n newNode.shape.activity.subProcess.processes = [];\n }\n newObj = newNode;\n if (clonedObject.children) {\n var parentNode = clonedObject;\n var tempTable = {};\n entryTable = _this.getChildren(parentNode, tempTable, childTable);\n arrangeChild(parentNode, -parentNode.offsetX, -parentNode.offsetY, entryTable, true, _this);\n }\n }\n else if (sourceElement[selectedSymbols] instanceof Connector) {\n newObj = new Connector(_this, 'connectors', clonedObject, true);\n var bounds = Rect.toBounds([newObj.sourcePoint, newObj.targetPoint]);\n var tx = position.x - bounds.center.x;\n var ty = position.y - bounds.center.y;\n newObj.sourcePoint.x += tx;\n newObj.sourcePoint.y += ty;\n newObj.targetPoint.x += tx;\n newObj.targetPoint.y += ty;\n }\n newObj.id += randomId();\n var arg = {\n source: sourceElement, element: newObj, cancel: false,\n diagram: _this\n };\n _this['enterObject'] = newObj;\n _this['enterTable'] = entryTable;\n _this.triggerEvent(DiagramEvent.dragEnter, arg);\n if (!_this.activeLayer.lock && !arg.cancel) {\n _this.preventUpdate = true;\n if (newObj.children) {\n _this.findChild(newObj, entryTable);\n }\n _this.preventUpdate = true;\n _this.initObject(newObj, undefined, undefined, true);\n _this.currentSymbol = newObj;\n if (_this.mode !== 'SVG') {\n _this.refreshDiagramLayer();\n }\n _this.commandHandler.select(newObj);\n _this.eventHandler.mouseDown(args.event);\n _this.eventHandler.mouseMove(args.event, args);\n _this.preventUpdate = false;\n _this.updatePage();\n selectedSymbol.style.opacity = '0';\n }\n delete _this['enterObject'];\n delete _this['enterTable'];\n }\n _this.droppable[selectedSymbols] = selectedSymbol;\n }\n }\n }\n else {\n if (args.event.touches && args.event.touches.length) {\n _this.eventHandler.mouseMove(args.event, args.event.touches);\n }\n }\n };\n // tslint:disable-next-line:no-any\n this.droppable.drop = function (args) {\n if (_this.currentSymbol) {\n if (args.event.touches) {\n _this.eventHandler.mouseUp(args.event);\n }\n var newObj = void 0;\n var node = void 0;\n var conn = void 0;\n var source = 'sourceElement';\n var arg = {\n source: _this.droppable[source],\n element: _this.currentSymbol,\n target: _this.eventHandler['hoverNode'] || _this, cancel: false,\n position: { x: _this.currentSymbol.wrapper.offsetX, y: _this.currentSymbol.wrapper.offsetY }\n };\n _this.triggerEvent(DiagramEvent.drop, arg);\n var clonedObject = void 0;\n var id = 'id';\n clonedObject = cloneObject(_this.currentSymbol);\n clonedObject['hasTarget'] = _this.currentSymbol['hasTarget'];\n _this.removeFromAQuad(_this.currentSymbol);\n _this.removeObjectsFromLayer(_this.nameTable[_this.currentSymbol.id]);\n _this.removeElements(_this.currentSymbol);\n if (arg.cancel) {\n _this.removeChildNodes(_this.currentSymbol);\n }\n delete _this.nameTable[_this.currentSymbol.id];\n _this.currentSymbol = null;\n _this.protectPropertyChange(true);\n if (!arg.cancel) {\n _this.startGroupAction();\n if (clonedObject.shape.type === 'Bpmn' && clonedObject.shape.annotation\n && clonedObject['hasTarget']) {\n var nodeId = clonedObject.shape.annotation.nodeId;\n clonedObject.shape.annotation.id = clonedObject.id;\n _this.addTextAnnotation(clonedObject.shape.annotation, _this.nameTable[nodeId]);\n clonedObject.nodeId = '';\n }\n if (clonedObject.children) {\n _this.addChildNodes(clonedObject);\n }\n _this.add(clonedObject, true);\n if (canSingleSelect(_this)) {\n _this.select([_this.nameTable[clonedObject[id]]]);\n }\n }\n _this.protectPropertyChange(false);\n newObj = _this.nameTable[clonedObject[id]];\n if (clonedObject['hasTarget']) {\n clonedObject.nodeId = clonedObject['hasTarget'];\n _this.remove(clonedObject);\n }\n if (_this.bpmnModule && newObj instanceof Node && clonedObject.processId) {\n newObj.processId = clonedObject.processId;\n _this.bpmnModule.dropBPMNchild(_this.nameTable[newObj.processId], newObj, _this);\n }\n _this.endGroupAction();\n if (_this.mode !== 'SVG') {\n _this.refreshDiagramLayer();\n }\n delete _this.droppable[source];\n }\n var selectedSymbols = 'selectedSymbols';\n remove(_this.droppable[selectedSymbols]);\n };\n this.droppable.out = function (args) {\n if (_this.currentSymbol && !_this.eventHandler.focus) {\n _this.unSelect(_this.currentSymbol);\n _this.removeFromAQuad(_this.currentSymbol);\n if (_this.mode !== 'SVG' && _this.currentSymbol.shape.type === 'Native') {\n _this.removeElements(_this.currentSymbol);\n }\n _this.removeObjectsFromLayer(_this.nameTable[_this.currentSymbol.id]);\n delete _this.nameTable[_this.currentSymbol.id];\n _this.triggerEvent(DiagramEvent.dragLeave, { element: _this.currentSymbol, diagram: _this });\n if (_this.mode !== 'SVG') {\n _this.refreshDiagramLayer();\n }\n else {\n _this.removeElements(_this.currentSymbol);\n }\n _this.currentSymbol = null;\n var selectedSymbols = 'selectedSymbols';\n _this.droppable[selectedSymbols].style.opacity = '1';\n var source = 'sourceElement';\n delete _this.droppable[source];\n }\n };\n };\n Diagram.prototype.removeChildNodes = function (node) {\n if (node instanceof Node && node.children) {\n for (var i = 0; i < node.children.length; i++) {\n if (this.nameTable[node.children[i]].children) {\n this.removeChildNodes(node);\n }\n this.removeFromAQuad(this.nameTable[node.children[i]]);\n this.removeObjectsFromLayer(this.nameTable[node.children[i]]);\n delete this.nameTable[node.children[i]];\n }\n }\n };\n Diagram.prototype.findChild = function (node, childTable) {\n var group;\n var newNode;\n for (var i = 0; i < node.children.length; i++) {\n group = childTable[node.children[i]];\n if (group) {\n if (group.children) {\n this.findChild(group, childTable);\n }\n group.id = group.id + randomId();\n childTable[group.id] = group;\n node.children[i] = group.id;\n newNode = new Node(this, 'nodes', group, true);\n this.initObject(newNode, undefined, undefined, true);\n //this.add(group, true);\n }\n }\n };\n Diagram.prototype.getChildren = function (node, entryTable, childTable) {\n var temp;\n for (var i = 0; i < node.children.length; i++) {\n temp = (childTable[node.children[i]]);\n if (temp) {\n if (temp.children) {\n entryTable = this.getChildren(temp, entryTable, childTable);\n }\n entryTable[temp.id] = cloneObject(temp);\n }\n }\n return entryTable;\n };\n Diagram.prototype.addChildNodes = function (node) {\n var temp;\n for (var i = 0; i < node.children.length; i++) {\n temp = (this.nameTable[node.children[i]]);\n if (temp) {\n if (temp.children) {\n this.addChildNodes(temp);\n }\n this.add(temp, true);\n }\n }\n };\n __decorate([\n Property('100%')\n ], Diagram.prototype, \"width\", void 0);\n __decorate([\n Property('SVG')\n ], Diagram.prototype, \"mode\", void 0);\n __decorate([\n Property('100%')\n ], Diagram.prototype, \"height\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], Diagram.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property(DiagramConstraints.Default)\n ], Diagram.prototype, \"constraints\", void 0);\n __decorate([\n Property(DiagramTools.Default)\n ], Diagram.prototype, \"tool\", void 0);\n __decorate([\n Property('Top')\n ], Diagram.prototype, \"bridgeDirection\", void 0);\n __decorate([\n Property('transparent')\n ], Diagram.prototype, \"backgroundColor\", void 0);\n __decorate([\n Complex({}, SnapSettings)\n ], Diagram.prototype, \"snapSettings\", void 0);\n __decorate([\n Complex({}, RulerSettings)\n ], Diagram.prototype, \"rulerSettings\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], Diagram.prototype, \"pageSettings\", void 0);\n __decorate([\n Collection([], Node)\n ], Diagram.prototype, \"nodes\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"drawingObject\", void 0);\n __decorate([\n Collection([], Connector)\n ], Diagram.prototype, \"connectors\", void 0);\n __decorate([\n Property([])\n ], Diagram.prototype, \"basicElements\", void 0);\n __decorate([\n Complex({}, DiagramTooltip)\n ], Diagram.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, DataSource)\n ], Diagram.prototype, \"dataSourceSettings\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"addInfo\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getNodeDefaults\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getConnectorDefaults\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"setNodeTemplate\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getDescription\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getCustomProperty\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getCustomTool\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getCustomCursor\", void 0);\n __decorate([\n Complex({}, Selector)\n ], Diagram.prototype, \"selectedItems\", void 0);\n __decorate([\n Complex({}, ScrollSettings)\n ], Diagram.prototype, \"scrollSettings\", void 0);\n __decorate([\n Complex({}, Layout)\n ], Diagram.prototype, \"layout\", void 0);\n __decorate([\n Complex({}, CommandManager)\n ], Diagram.prototype, \"commandManager\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dataLoaded\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dragEnter\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dragLeave\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dragOver\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"historyChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"doubleClick\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"textEdit\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"scrollChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"sizeChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"connectionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"sourcePointChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"targetPointChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"propertyChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"positionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"rotateChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"collectionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"mouseEnter\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"mouseLeave\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"mouseOver\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Collection([], Layer)\n ], Diagram.prototype, \"layers\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"drop\", void 0);\n return Diagram;\n}(Component));\nexport { Diagram };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { CanvasRenderer } from './rendering/canvas-renderer';\nimport { DiagramRenderer } from './rendering/renderer';\nimport { Size } from './primitives/size';\nimport { setAttributeHtml, setAttributeSvg, createHtmlElement } from './utility/dom-util';\nimport { Rect } from './primitives/rect';\nimport { createSvgElement, getHTMLLayer } from './utility/dom-util';\nimport { getDiagramLayerSvg } from './utility/dom-util';\nimport { DiagramHtmlElement } from './core/elements/html-element';\nimport { DiagramNativeElement } from './core/elements/native-element';\n/**\n * Print and Export Settings\n */\nvar PrintAndExport = /** @class */ (function () {\n function PrintAndExport(diagram) {\n this.diagram = diagram;\n }\n /**\n * To Export the diagram\n * @private\n */\n PrintAndExport.prototype.exportDiagram = function (options) {\n var fileType;\n var customBounds;\n var content;\n var content1 = '';\n var data = 'data';\n var mode;\n var buffers = [];\n var margin = options.margin || {};\n var region = options && options.region ? options.region : 'Content';\n mode = options && options.mode ? options.mode : 'Download';\n var bounds = this.getDiagramBounds(region, options);\n if (options.bounds) {\n customBounds = true;\n bounds.x = options.bounds.x ? options.bounds.x : bounds.x;\n bounds.y = options.bounds.y ? options.bounds.y : bounds.y;\n bounds.width = options.bounds.width || bounds.width;\n bounds.height = options.bounds.height || bounds.height;\n }\n margin = {\n top: margin.top !== undefined ? margin.top : 25,\n bottom: margin.bottom !== undefined ? margin.bottom : 25,\n right: margin.right !== undefined ? margin.right : 25,\n left: margin.left !== undefined ? margin.left : 25\n };\n var nodes = this.diagram.nodes;\n if (region !== 'PageSettings') {\n bounds.x -= margin.left;\n bounds.y -= margin.top;\n bounds.width += margin.left + margin.right;\n bounds.height += margin.top + margin.bottom;\n }\n var fileName = options.fileName || 'diagram';\n if (options.format !== 'SVG') {\n data = this.setCanvas(options, bounds, margin, mode, customBounds, region, fileName);\n if (data !== null) {\n return data;\n }\n }\n else {\n fileType = options.format;\n options.bounds = bounds;\n options.margin = margin;\n var svg = content = this.diagramAsSvg(options, margin);\n if (mode === 'Data') {\n return content;\n }\n var buffer = new XMLSerializer().serializeToString(svg);\n buffers.push(buffer);\n }\n if (mode === 'Download' && data !== null) {\n var browserInfo = void 0;\n // Ensure this for Safari\n // if (Browser.info.name === 'msie' && Number(Browser.info.version) < 10 || Browser.info.name === 'webkit') {\n // let info: string = Browser.info.name === 'webkit' ? 'Safari' : 'IE-9';\n // alert('Downloading option is not supported in ' + info + ', Please use the returned data');\n // return content;\n // } else {\n for (var b = 0; b < buffers.length; b++) {\n var blob = new Blob([buffers[b]], { type: 'application/octet-stream' });\n if (Browser.info.name === 'msie') {\n window.navigator.msSaveOrOpenBlob(blob, fileName + '.' + fileType);\n }\n else {\n var pom = createHtmlElement('a', { 'download': fileName + '.' + fileType });\n var url = URL.createObjectURL(blob);\n pom.href = url;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n pom.dispatchEvent(e);\n }\n }\n }\n return null;\n };\n PrintAndExport.prototype.setCanvas = function (options, bounds, margin, mode, customBounds, region, fileName) {\n var _this = this;\n var fileType;\n var content;\n options.bounds = bounds;\n options.region = region;\n var scaleX = 'scaleX';\n var scaleY = 'scaleY';\n var images = [];\n this.setScaleValueforCanvas(options, bounds);\n var canvas = this.diagramAsCanvas({\n bounds: bounds, margin: margin, region: region, scaleX: options[scaleX],\n scaleY: options[scaleY]\n }, customBounds);\n fileType = options.format || 'JPG';\n var image = content = canvas.toDataURL();\n if (mode === 'Data') {\n return content;\n }\n if (options.multiplePage) {\n options.pageHeight = options.pageHeight ? options.pageHeight : this.diagram.pageSettings.height;\n options.pageWidth = options.pageWidth ? options.pageWidth : this.diagram.pageSettings.width;\n options.pageHeight = options.pageHeight ? options.pageHeight : canvas.width;\n options.pageWidth = options.pageWidth ? options.pageWidth : canvas.height;\n margin = options.margin || {};\n if (options.pageOrientation) {\n if ((options.pageOrientation === 'Landscape' && options.pageHeight > options.pageWidth) ||\n options.pageOrientation === 'Portrait' && options.pageWidth > options.pageHeight) {\n var temp = options.pageWidth;\n options.pageWidth = options.pageHeight;\n options.pageHeight = temp;\n }\n }\n options.margin = {\n top: !isNaN(margin.top) ? margin.top : 0,\n bottom: !isNaN(margin.bottom) ? margin.bottom : 0,\n left: !isNaN(margin.left) ? margin.left : 0,\n right: !isNaN(margin.right) ? margin.right : 0\n };\n var attr = {\n 'id': this.diagram.element.id + '_printImage',\n 'src': image,\n };\n var img_1 = createHtmlElement('img', attr);\n img_1.onload = function () {\n images = _this.getMultipleImage(img_1, options, true);\n _this.exportImage(images, fileName, fileType, image);\n };\n }\n else {\n images = [image];\n this.exportImage(images, fileName, fileType, image);\n }\n return null;\n };\n PrintAndExport.prototype.exportImage = function (images, fileName, fileType, image) {\n var buffers = [];\n var length = (!(images instanceof HTMLElement)) ? images.length : 0;\n for (var g = 0; g < length; g++) {\n image = images[g];\n image = image.replace(/^data:[a-z]*;,/, '');\n var image1 = image.split(',');\n var byteString = atob(image1[1]);\n var buffer = new ArrayBuffer(byteString.length);\n var intArray = new Uint8Array(buffer);\n for (var i = 0; i < byteString.length; i++) {\n intArray[i] = byteString.charCodeAt(i);\n }\n buffers.push(buffer);\n }\n var _loop_1 = function (j) {\n var b = new Blob([buffers[j]], { type: 'application/octet-stream' });\n if (Browser.info.name === 'msie') {\n window.navigator.msSaveOrOpenBlob(b, fileName + '.' + fileType);\n }\n else {\n var htmlElement_1 = createHtmlElement('a', { 'download': fileName + '.' + fileType });\n var urlLink = URL.createObjectURL(b);\n htmlElement_1.href = urlLink;\n var mouseEvent_1 = document.createEvent('MouseEvents');\n mouseEvent_1.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n setTimeout(function () {\n htmlElement_1.dispatchEvent(mouseEvent_1);\n }, ((j + 1) * 5));\n }\n };\n // Ensure this for safari\n // if (Browser.info.name === 'msie' && Number(Browser.info.version) < 10 || Browser.info.name === 'webkit') {\n // let browserInfo: string = Browser.info.name === 'webkit' ? 'Safari' : 'IE-9';\n // alert('Downloading option is not supported in ' + browserInfo + ', Please use the returned data');\n // return content;\n // } else {\n for (var j = 0; j < buffers.length; j++) {\n _loop_1(j);\n }\n };\n PrintAndExport.prototype.getObjectsBound = function (options) {\n var nodes = this.diagram.nodes;\n var nodebounds;\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n if (node.visible) {\n if (((options.format !== 'SVG' && !(node instanceof DiagramNativeElement) && !(node instanceof DiagramHtmlElement))\n || (options.format === 'SVG' && !(node instanceof DiagramHtmlElement)))) {\n if (!nodebounds) {\n nodebounds = node.wrapper.outerBounds;\n }\n else {\n nodebounds = nodebounds.uniteRect(node.wrapper.outerBounds);\n }\n }\n }\n }\n var connectors = this.diagram.connectors;\n for (var _a = 0, connectors_1 = connectors; _a < connectors_1.length; _a++) {\n var connector = connectors_1[_a];\n if (connector.visible) {\n if (!nodebounds) {\n nodebounds = connector.wrapper.outerBounds;\n }\n else {\n nodebounds = nodebounds.uniteRect(connector.wrapper.outerBounds);\n }\n }\n }\n return nodebounds || new Rect(0, 0, 0, 0);\n };\n PrintAndExport.prototype.getDiagramBounds = function (mode, options) {\n var rect = this.getObjectsBound(options);\n var left = rect.left;\n var top = rect.top;\n var right = rect.right - rect.left;\n var bottom = rect.bottom - rect.top;\n if (mode !== 'Content') {\n if (this.diagram.pageSettings && this.diagram.pageSettings.multiplePage) {\n left = rect.left;\n top = rect.top;\n if (this.diagram.pageSettings.width) {\n left = Math.floor(left / this.diagram.pageSettings.width) * this.diagram.pageSettings.width;\n right = Math.ceil(rect.right / this.diagram.pageSettings.width) * this.diagram.pageSettings.width - left;\n }\n if (this.diagram.pageSettings.height) {\n top = Math.floor(top / this.diagram.pageSettings.height) * this.diagram.pageSettings.height;\n bottom = Math.ceil(rect.bottom / this.diagram.pageSettings.height) * this.diagram.pageSettings.height - top;\n }\n if ((rect.width === 0) && this.diagram.pageSettings.width !== null) {\n right = this.diagram.pageSettings.width;\n }\n if ((rect.height === 0) && this.diagram.pageSettings.height !== null) {\n bottom = this.diagram.pageSettings.height;\n }\n }\n else {\n if (this.diagram.pageSettings.width) {\n left = 0;\n right = this.diagram.pageSettings.width;\n }\n if (this.diagram.pageSettings.height) {\n top = 0;\n bottom = this.diagram.pageSettings.height;\n }\n }\n }\n var svgBounds = new Rect();\n svgBounds.x = left;\n svgBounds.y = top;\n svgBounds.width = right;\n svgBounds.height = bottom;\n return svgBounds;\n };\n PrintAndExport.prototype.setScaleValueforCanvas = function (options, bounds) {\n var scaleX = 'scaleX';\n var scaleY = 'scaleY';\n options[scaleX] = 1;\n options[scaleY] = 1;\n options.pageHeight = options.pageHeight || this.diagram.pageSettings.height;\n options.pageWidth = options.pageWidth || this.diagram.pageSettings.width;\n var height = options.pageHeight || bounds.height;\n var width = options.pageWidth || bounds.width;\n if (options.stretch === 'Stretch' || options.stretch === 'Meet' || options.stretch === 'Slice') {\n options[scaleX] = width / bounds.width;\n options[scaleY] = height / bounds.height;\n if (options.stretch === 'Meet') {\n options[scaleX] = options[scaleY] = Math.min(options[scaleX], options[scaleY]);\n }\n else if (options.stretch === 'Slice') {\n options[scaleX] = options[scaleY] = Math.max(options[scaleX], options[scaleY]);\n }\n bounds.width = width;\n bounds.height = height;\n }\n bounds.x *= options[scaleX];\n bounds.y *= options[scaleY];\n };\n PrintAndExport.prototype.diagramAsSvg = function (options, margin) {\n var svg = this.diagram.createSvg(this.diagram.element.id + '_diagram_svg', options.bounds.width, options.bounds.height);\n document.body.appendChild(svg);\n var g = createSvgElement('g', { 'id': this.diagram.element.id + '_pageBackground' });\n var region = options && options.region ? options.region : 'Content';\n var bounds = this.getDiagramBounds(region, options);\n var left = bounds.x;\n var top = bounds.y;\n var width = bounds.width;\n var height = bounds.height;\n svg.appendChild(g);\n var attr = {\n 'transform': 'translate(' + (-options.bounds.x + margin.left) + ', ' + (-options.bounds.y + margin.top) + ')',\n 'x': String(left),\n 'y': String(top), 'width': String(width), 'height': String(height)\n };\n setAttributeSvg(g, attr);\n var backRect = document.getElementById(this.diagram.element.id + '_backgroundLayerrect').cloneNode(true);\n attr = {\n 'x': 0,\n 'y': 0, 'width': String(width + margin.left + margin.right), 'height': String(height + margin.top + margin.bottom)\n };\n setAttributeSvg(backRect, attr);\n svg.appendChild(backRect);\n if (this.diagram.mode === 'SVG') {\n var diagramLayerSVG = getDiagramLayerSvg(this.diagram.element.id);\n svg.appendChild(diagramLayerSVG.getElementById(this.diagram.diagramLayer.id).cloneNode(true));\n for (var i = 0; i < svg.childNodes.length; i++) {\n var element = svg.childNodes[i];\n if (element.id === 'diagram_diagramLayer') {\n element.setAttribute('transform', 'translate(' + (-bounds.x + margin.left) + ', ' +\n (-bounds.y + margin.top) + ')');\n }\n }\n }\n else {\n g = createSvgElement('g', { 'id': this.diagram.element.id + '_diagramLayer' });\n svg.appendChild(g);\n g.setAttribute('transform', 'translate(' + (-options.bounds.x + margin.left) + ', ' +\n (-options.bounds.y + margin.top) + ')');\n var nodes = this.diagram.nodes;\n //renderLabels\n var renderer = new DiagramRenderer('', null, true);\n var htmlLayer = getHTMLLayer(this.diagram.element.id);\n this.diagram.renderDiagramElements(svg, renderer, htmlLayer, false);\n }\n document.body.removeChild(svg);\n return svg;\n };\n PrintAndExport.prototype.diagramAsCanvas = function (options, customBounds) {\n var scaleX = 'scaleX';\n var scaleY = 'scaleY';\n var element;\n var elements = [];\n var region = options.bounds;\n var margin = options.margin;\n var mode = options && options.region ? options.region : 'Content';\n var pageBounds = this.getDiagramBounds(mode, options);\n var bgColor = this.diagram.pageSettings.background.color;\n var canvas = CanvasRenderer.createCanvas(this.diagram.element.id + '_diagram', options.bounds.width, options.bounds.height);\n //canvas.setAttribute('style', 'position:absolute;top:135px;left:160px;');\n var context = canvas.getContext('2d');\n context.translate(-region.x, -region.y);\n context.save();\n context.fillStyle = this.diagram.pageSettings.background.color;\n region = mode === 'Content' ? pageBounds : region;\n context.fillRect(region.x, region.y, region.width, region.height);\n var bgImg = this.diagram.pageSettings.background;\n if (bgImg && bgImg.source) {\n pageBounds = this.getDiagramBounds(mode, options);\n var image = new Image();\n image.src = bgImg.source;\n var proportionX = pageBounds.width / image.width;\n var proportionY = pageBounds.height / image.height;\n var x = pageBounds.x;\n var y = pageBounds.y;\n var width = pageBounds.width;\n var height = pageBounds.height;\n var exportable = this.isImageExportable(bgImg);\n if (bgImg.scale !== 'None' && bgImg.align !== 'None') {\n var proportion = bgImg.scale === 'Meet' ? Math.min(proportionX, proportionY) : Math.max(proportionX, proportionY);\n width = proportion * image.width;\n height = proportion * image.height;\n if (bgImg.align.indexOf('xmid') > -1) {\n x += (pageBounds.width - width) / 2;\n }\n else if (bgImg.align.indexOf('xmax') > -1) {\n x = x + pageBounds.width - width;\n }\n if (bgImg.align.indexOf('ymid') > -1) {\n y += (pageBounds.height - height) / 2;\n }\n else if (bgImg.align.indexOf('ymax') > -1) {\n y = y + pageBounds.height - height;\n }\n if (this.diagram.pageSettings.background.color === 'none' || this.diagram.pageSettings.background.color === 'transparent') {\n context.fillStyle = 'white';\n context.fillRect(pageBounds.x * options[scaleX], pageBounds.y * options[scaleY], pageBounds.width * options[scaleX], pageBounds.height * options[scaleY]);\n }\n if (exportable) {\n context.drawImage(image, x, y, proportion * image.width, proportion * image.height);\n }\n }\n else if (exportable) {\n context.drawImage(image, x, y, pageBounds.width, pageBounds.height);\n }\n }\n else {\n context.fillStyle = bgColor === 'transparent' ? 'white' : bgColor;\n context.fillRect((pageBounds.x * options[scaleX]) - margin.left, (pageBounds.y * options[scaleY]) - margin.top, (pageBounds.width * options[scaleX]) + margin.left + margin.right, (options[scaleY] * pageBounds.height) + margin.top + margin.bottom);\n }\n var brColor = this.diagram.pageSettings.background.color;\n var brWidth = this.diagram.pageSettings.width;\n if (brWidth) {\n context.strokeStyle = brColor === 'none' ? 'transparent' : brColor;\n context.lineWidth = brWidth;\n context.strokeRect(pageBounds.x * options[scaleX], pageBounds.y * options[scaleY], pageBounds.width * options[scaleX], pageBounds.height * options[scaleY]);\n }\n context.restore();\n var htmlLayer = getHTMLLayer(this.diagram.element.id);\n var renderer = new DiagramRenderer('', null, false);\n this.diagram.renderDiagramElements(canvas, renderer, htmlLayer, false, true);\n return canvas;\n };\n PrintAndExport.prototype.isImageExportable = function (backgroundImage) {\n var state = true;\n var content;\n var canvas;\n if (backgroundImage.source) {\n try {\n canvas = CanvasRenderer.createCanvas(this.diagram.element.id + 'temp_canvas', 100, 100);\n var ctx = canvas.getContext('2d');\n ctx.save();\n var image = new Image();\n image.src = backgroundImage.source;\n ctx.drawImage(image, 0, 0, 100, 100);\n ctx.restore();\n content = canvas.toDataURL();\n }\n catch (e) {\n state = false;\n }\n }\n return state;\n };\n PrintAndExport.prototype.getPrintCanvasStyle = function (img, options) {\n var width = 0;\n var height = 0;\n var size = new Size();\n width = img.width;\n height = img.height;\n if (options.pageHeight || options.pageWidth) {\n height = options.pageHeight ? options.pageHeight : height;\n width = options.pageWidth ? options.pageWidth : width;\n }\n if (options.pageOrientation) {\n if ((options.pageOrientation === 'Landscape' && height > width) || options.pageOrientation === 'Portrait' && width > height) {\n var temp = width;\n width = height;\n height = temp;\n }\n }\n size.height = height;\n size.width = width;\n return size;\n };\n PrintAndExport.prototype.getMultipleImage = function (img, options, isExport) {\n var imageArray = [];\n var div = createHtmlElement('div', {});\n var pageSize = this.getPrintCanvasStyle(img, options);\n var pageWidth;\n var pageHeight;\n var margin = options.margin;\n var mLeft = margin.left;\n var mTop = margin.top;\n var mRight = margin.right;\n var mBottom = margin.bottom;\n var x = 0;\n var y = 0;\n pageWidth = pageSize.width + x;\n pageHeight = pageSize.height + y;\n var drawnX = 0;\n var drawnY = 0;\n if (options && options.multiplePage && !(options.region === 'Content')) {\n div.style.height = 'auto';\n div.style.width = 'auto';\n var imgHeight = img.height;\n var imgWidth = img.width;\n //if (img) {\n var i = 0;\n var j = 0;\n var url = void 0;\n var clipWidth = 0;\n var clipHeight = 0;\n var ctx = void 0;\n var canvas = void 0;\n do {\n do {\n clipWidth = pageSize.width;\n clipHeight = pageSize.height;\n if ((drawnX + pageSize.width) >= imgWidth) {\n clipWidth = (imgWidth - drawnX);\n }\n if ((drawnY + pageSize.height) >= imgHeight) {\n clipHeight = (imgHeight - drawnY);\n }\n canvas = CanvasRenderer.createCanvas(this.diagram.element.id + '_multiplePrint', pageSize.width, pageSize.height);\n ctx = canvas.getContext('2d');\n ctx.drawImage(img, x + drawnX + mLeft, y + drawnY + mTop, clipWidth - mRight - mLeft, clipHeight - mBottom - mTop, 0 + mLeft, 0 + mTop, clipWidth - mRight - mLeft, clipHeight - mBottom - mTop);\n if ((drawnX + pageSize.width) >= imgWidth) {\n drawnX -= (drawnX - imgWidth);\n }\n url = canvas.toDataURL();\n ctx.restore();\n drawnX += pageWidth;\n if (isExport) {\n imageArray.push(url);\n }\n else {\n this.printImage(div, url, i + '' + j, pageWidth + 'px;', pageHeight + 'px;');\n }\n i++;\n } while (drawnX < imgWidth);\n j++;\n i = x = drawnX = 0;\n if ((drawnY + pageSize.height) >= imgHeight) {\n drawnY -= (drawnY - imgHeight);\n }\n drawnY += pageHeight;\n } while (drawnY < imgHeight);\n //}\n }\n else {\n var x_1 = 0;\n var y_1 = 0;\n var pageSize_1 = this.getPrintCanvasStyle(img, options);\n var pageWidth_1;\n var pageHeight_1;\n pageWidth_1 = pageSize_1.width;\n pageHeight_1 = pageSize_1.height;\n var ctx = void 0;\n var canvas = void 0;\n var url = void 0;\n canvas = CanvasRenderer.createCanvas(this.diagram.element.id + '_diagram', pageWidth_1, pageHeight_1);\n ctx = canvas.getContext('2d');\n ctx.drawImage(img, x_1 + mLeft, y_1 + mTop, img.width - (mRight + mLeft), img.height - (mTop + mBottom), 0 + mLeft, 0 + mTop, pageWidth_1 - (mRight + mLeft), pageHeight_1 - (mTop + mBottom));\n url = canvas.toDataURL();\n ctx.restore();\n this.printImage(div, url, 0);\n }\n if (isExport) {\n return imageArray;\n }\n else {\n return div;\n }\n };\n PrintAndExport.prototype.printImage = function (div, url, i, pageWidth, pageHeight) {\n var attr = { 'class': 'e-diagram-print-page', 'style': 'width:' + pageWidth + 'height:' + pageHeight };\n var img = createHtmlElement('img', attr);\n var innerDiv = createHtmlElement('div', attr);\n attr = { 'id': this.diagram.element.id + '_multiplePrint_img' + i, 'style': 'float:left', 'src': url };\n setAttributeHtml(img, attr);\n innerDiv.appendChild(img);\n div.appendChild(innerDiv);\n };\n /**\n * To print the image\n * @private\n */\n PrintAndExport.prototype.print = function (options) {\n var _this = this;\n options.mode = 'Data';\n options.margin = { top: 0, bottom: 0, right: 0, left: 0 };\n var url = this.exportDiagram(options);\n var attr = {\n 'id': this.diagram.element.id + '_printImage',\n 'src': url,\n };\n var img = createHtmlElement('img', attr);\n img.onload = function () {\n var div = _this.getMultipleImage(img, options);\n // specify window parameters\n var printWind = window.open('');\n if (printWind != null) {\n if ((div instanceof HTMLElement)) {\n printWind.document.write('');\n printWind.document.write('');\n printWind.document.write('
    ' + div.innerHTML + '
    ');\n printWind.document.close();\n }\n }\n };\n };\n /**\n * To destroy the Print and Export module\n * @return {void}\n * @private\n */\n PrintAndExport.prototype.destroy = function () {\n /**\n * Destroys the Print and Export module\n */\n };\n /**\n * Get module name.\n */\n PrintAndExport.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'PrintandExport';\n };\n return PrintAndExport;\n}());\nexport { PrintAndExport };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Container } from './container';\nimport { rotateSize } from '../../utility/base-util';\n/**\n * StackPanel module is used to arrange its children in a line\n */\nvar StackPanel = /** @class */ (function (_super) {\n __extends(StackPanel, _super);\n function StackPanel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Gets/Sets the orientation of the stack panel\n */\n _this.orientation = 'Vertical';\n /**\n * Not applicable for canvas\n * @private\n */\n _this.measureChildren = undefined;\n return _this;\n }\n /**\n * Measures the minimum space that the panel needs\n * @param availableSize\n */\n StackPanel.prototype.measure = function (availableSize) {\n var updateSize = this.orientation === 'Horizontal' ? this.updateHorizontalStack : this.updateVerticalStack;\n this.desiredSize = this.measureStackPanel(availableSize, updateSize);\n return this.desiredSize;\n };\n /**\n * Arranges the child elements of the stack panel\n * @param desiredSize\n */\n StackPanel.prototype.arrange = function (desiredSize) {\n var updateSize = this.orientation === 'Horizontal' ? this.arrangeHorizontalStack : this.arrangeVerticalStack;\n this.actualSize = this.arrangeStackPanel(desiredSize, updateSize);\n this.updateBounds();\n return this.actualSize;\n };\n /**\n * Measures the minimum space that the panel needs\n * @param availableSize\n */\n StackPanel.prototype.measureStackPanel = function (availableSize, updateSize) {\n var desired = undefined;\n if (this.children !== undefined && this.children.length > 0) {\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.parentTransform = this.rotateAngle + this.parentTransform;\n //Measure children\n child.measure(availableSize);\n var childSize = child.desiredSize.clone();\n //Consider Child's margin\n this.applyChildMargin(child, childSize);\n //Consider children's rotation\n if (child.rotateAngle !== 0) {\n childSize = rotateSize(childSize, child.rotateAngle);\n }\n //Measure stack panel\n if (desired === undefined) {\n desired = childSize;\n }\n else {\n updateSize(childSize, desired);\n }\n }\n }\n desired = _super.prototype.validateDesiredSize.call(this, desired, availableSize);\n this.stretchChildren(desired);\n //Considering padding values\n this.applyPadding(desired);\n return desired;\n };\n StackPanel.prototype.arrangeStackPanel = function (desiredSize, updatePosition) {\n if (this.children !== undefined && this.children.length > 0) {\n var x = void 0;\n var y = void 0;\n x = this.offsetX - desiredSize.width * this.pivot.x + this.padding.left;\n y = this.offsetY - desiredSize.height * this.pivot.y + this.padding.top;\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n var childSize = child.desiredSize.clone();\n var rotatedSize = childSize;\n if (this.orientation === 'Vertical') {\n y += child.margin.top;\n }\n else {\n x += child.margin.left;\n }\n if (child.rotateAngle !== 0) {\n rotatedSize = rotateSize(childSize, child.rotateAngle);\n }\n var center = updatePosition(x, y, child, this, desiredSize, rotatedSize);\n _super.prototype.findChildOffsetFromCenter.call(this, child, center);\n child.arrange(childSize);\n if (this.orientation === 'Vertical') {\n y += rotatedSize.height + child.margin.bottom;\n }\n else {\n x += rotatedSize.width + child.margin.right;\n }\n }\n }\n return desiredSize;\n };\n StackPanel.prototype.updateHorizontalStack = function (child, parent) {\n parent.height = Math.max(child.height, parent.height);\n parent.width += child.width;\n };\n StackPanel.prototype.updateVerticalStack = function (child, parent) {\n parent.width = Math.max(child.width, parent.width);\n parent.height += child.height;\n };\n StackPanel.prototype.arrangeHorizontalStack = function (x, y, child, parent, parenBounds, childBounds) {\n var centerY = 0;\n if (child.verticalAlignment === 'Top') {\n centerY = y + child.margin.top + childBounds.height / 2;\n }\n else if (child.verticalAlignment === 'Bottom') {\n var parentBottom = parent.offsetY + parenBounds.height * (1 - parent.pivot.y);\n centerY = parentBottom - parent.padding.bottom - child.margin.bottom - childBounds.height / 2;\n }\n else {\n centerY = parent.offsetY - parenBounds.height * parent.pivot.y + parenBounds.height / 2;\n }\n return { x: x + childBounds.width / 2, y: centerY };\n };\n StackPanel.prototype.arrangeVerticalStack = function (x, y, child, parent, parentSize, childSize) {\n var centerX = 0;\n if (child.horizontalAlignment === 'Left') {\n centerX = x + child.margin.left + childSize.width / 2;\n }\n else if (child.horizontalAlignment === 'Right') {\n var parentRight = parent.offsetX + parentSize.width * (1 - parent.pivot.x);\n centerX = parentRight - parent.padding.right - child.margin.right - childSize.width / 2;\n }\n else {\n centerX = parent.offsetX - parentSize.width * parent.pivot.x + parentSize.width / 2;\n }\n return { x: centerX, y: y + childSize.height / 2 };\n };\n StackPanel.prototype.stretchChildren = function (size) {\n if (this.children !== undefined && this.children.length > 0) {\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (this.orientation === 'Vertical') {\n if (child.horizontalAlignment === 'Stretch') {\n child.desiredSize.width = size.width;\n }\n }\n else {\n if (child.verticalAlignment === 'Stretch') {\n child.desiredSize.height = size.height;\n }\n }\n }\n }\n };\n StackPanel.prototype.applyChildMargin = function (child, size) {\n size.height += child.margin.top + child.margin.bottom;\n size.width += child.margin.left + child.margin.right;\n };\n return StackPanel;\n}(Container));\nexport { StackPanel };\n","import { Node } from '../objects/node';\nimport { Connector } from '../objects/connector';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { randomId, getFunction } from '../utility/base-util';\n/**\n * data source defines the basic unit of diagram\n */\nvar DataBinding = /** @class */ (function () {\n /**\n * Constructor for the data binding module.\n * @private\n */\n function DataBinding() {\n this.dataTable = {};\n //constructs the data binding module\n }\n /**\n * To destroy the data binding module\n * @return {void}\n * @private\n */\n DataBinding.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n DataBinding.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DataBinding';\n };\n /**\n * Initialize nodes and connectors when we have a data as JSON\n * @param data\n * @param diagram\n * @private\n */\n DataBinding.prototype.initData = function (data, diagram) {\n var dataSource;\n var dataProp = 'data';\n var jsonProp = 'json';\n var dataManager = data.dataManager || {};\n dataSource = data.data || dataManager[dataProp] || dataManager[jsonProp] ||\n (dataManager.dataSource ? dataManager.dataSource.json : undefined);\n if (dataSource && dataSource.length) {\n this.applyDataSource(data, dataSource, diagram);\n }\n };\n /**\n * Initialize nodes and connector when we have a data as remote url\n * @param data\n * @param diagram\n * @private\n */\n DataBinding.prototype.initSource = function (data, diagram) {\n var _this = this;\n var dataSource = data;\n var result;\n var mapper = data;\n if (dataSource.dataManager instanceof DataManager) {\n var query = mapper.dataManager.defaultQuery;\n data.dataManager.executeQuery(query).then(function (e) {\n var prop = 'result';\n result = e[prop];\n if (!diagram.isDestroyed) {\n _this.applyDataSource(data, result, diagram);\n diagram.refreshDiagram();\n diagram.trigger('dataLoaded', { diagram: diagram });\n }\n });\n }\n };\n DataBinding.prototype.applyDataSource = function (mapper, data, diagram) {\n this.dataTable = {};\n var obj;\n var firstNode;\n var rootNodes = [];\n var firstLevel = [];\n var item;\n var nextLevel;\n if (data !== undefined) {\n for (var r = 0; r < data.length; r++) {\n obj = data[r];\n if (obj[mapper.parentId] === undefined || obj[mapper.parentId] === null ||\n typeof obj[mapper.parentId] !== 'object') {\n if (rootNodes[obj[mapper.parentId]] !== undefined) {\n rootNodes[obj[mapper.parentId]].items.push(obj);\n }\n else {\n rootNodes[obj[mapper.parentId]] = { items: [obj] };\n }\n }\n else {\n rootNodes = this.updateMultipleRootNodes(obj, rootNodes, mapper, data);\n }\n if (mapper.root === obj[mapper.id]) {\n firstNode = { items: [obj] };\n }\n }\n if (firstNode) {\n firstLevel.push(firstNode);\n }\n else {\n for (var _i = 0, _a = Object.keys(rootNodes); _i < _a.length; _i++) {\n var n = _a[_i];\n if (!n || n === 'undefined' || n === '\\'\\'' || n === 'null') {\n firstLevel.push(rootNodes[n]);\n }\n }\n }\n for (var i = 0; i < firstLevel.length; i++) {\n for (var j = 0; j < firstLevel[i].items.length; j++) {\n item = firstLevel[i].items[j];\n var node = this.applyNodeTemplate(mapper, item, diagram);\n diagram.nodes.push(node);\n this.dataTable[item[mapper.id]] = node;\n nextLevel = rootNodes[node.data[mapper.id]];\n if (nextLevel !== undefined) {\n this.renderChildNodes(mapper, nextLevel, node.id, rootNodes, diagram);\n }\n }\n }\n }\n this.dataTable = null;\n };\n /**\n * updateMultipleRootNodes method is used to update the multiple Root Nodes\n * @param object\n * @param rootnodes\n * @param mapper\n * @param data\n */\n DataBinding.prototype.updateMultipleRootNodes = function (obj, rootNodes, mapper, data) {\n var parents = obj[mapper.parentId];\n var parent;\n for (var i = 0; i < parents.length; i++) {\n parent = parents[i];\n if (rootNodes[parent]) {\n rootNodes[parent].items.push(obj);\n }\n else {\n rootNodes[parent] = { items: [obj] };\n }\n }\n return rootNodes;\n };\n /**\n * Get the node values\n * @param mapper\n * @param item\n * @param diagram\n */\n DataBinding.prototype.applyNodeTemplate = function (mapper, item, diagram) {\n var root = item;\n var id = randomId();\n var nodeModel = { id: id, data: item };\n var doBinding = getFunction(mapper.doBinding);\n if (doBinding) {\n doBinding(nodeModel, item, diagram);\n }\n var obj = new Node(diagram, 'nodes', nodeModel, true);\n if (!this.collectionContains(obj, diagram, mapper.id, mapper.parentId)) {\n return obj;\n }\n else {\n return this.dataTable[item[mapper.id]];\n }\n };\n DataBinding.prototype.renderChildNodes = function (mapper, parent, value, rtNodes, diagram) {\n var child;\n var nextLevel;\n var node;\n for (var j = 0; j < parent.items.length; j++) {\n child = parent.items[j];\n node = this.applyNodeTemplate(mapper, child, diagram);\n var canBreak = false;\n if (!this.collectionContains(node, diagram, mapper.id, mapper.parentId)) {\n this.dataTable[child[mapper.id]] = node;\n diagram.nodes.push(node);\n }\n else {\n canBreak = true;\n }\n if (!this.containsConnector(diagram, value, node.id)) {\n diagram.connectors.push(this.applyConnectorTemplate(value, node.id, diagram));\n }\n if (!canBreak) {\n nextLevel = rtNodes[node.data[mapper.id]];\n if (nextLevel !== undefined) {\n this.renderChildNodes(mapper, nextLevel, node.id, rtNodes, diagram);\n }\n }\n }\n };\n DataBinding.prototype.containsConnector = function (diagram, sourceNode, targetNode) {\n if (sourceNode !== '' && targetNode !== '') {\n for (var i = 0; i < diagram.connectors.length; i++) {\n var connector = diagram.connectors[i];\n if (connector !== undefined && (connector.sourceID === sourceNode && connector.targetID === targetNode)) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * collectionContains method is used to check wthear the node is already present in collection or not\n * @param node\n * @param diagram\n * @param id\n * @param parentId\n */\n DataBinding.prototype.collectionContains = function (node, diagram, id, parentId) {\n var obj = this.dataTable[node.data[id]];\n if (obj !== undefined && obj.data[id] === node.data[id] && obj.data[parentId] === node.data[parentId]) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Get the Connector values\n * @param sourceNode\n * @param targetNode\n * @param diagram\n */\n DataBinding.prototype.applyConnectorTemplate = function (sNode, tNode, diagram) {\n var connModel = {\n id: randomId(), sourceID: sNode, targetID: tNode\n };\n var obj = new Connector(diagram, 'connectors', connModel, true);\n return obj;\n };\n return DataBinding;\n}());\nexport { DataBinding };\n","import { remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { contextMenuClick, contextMenuOpen } from '../enum/enum';\nimport { createHtmlElement } from '../../diagram/utility/dom-util';\n/**\n * @private\n */\nexport var menuClass = {\n content: '.e-diagramcontent',\n copy: 'e-copy',\n paste: 'e-paste',\n undo: 'e-undo',\n redo: 'e-redo',\n cut: 'e-cut',\n selectAll: 'e-selectall',\n grouping: 'e-grouping',\n group: 'e-group',\n unGroup: 'e-ungroup',\n bringToFront: 'e-bringfront',\n sendToBack: 'e-sendback',\n moveForward: 'e-bringforward',\n sendBackward: 'e-sendbackward',\n order: 'e-order'\n};\n/**\n * 'ContextMenu module used to handle context menu actions.'\n * @private\n */\nvar DiagramContextMenu = /** @class */ (function () {\n function DiagramContextMenu(parent, service) {\n this.defaultItems = {};\n /**\n * @private\n */\n this.disableItems = [];\n /**\n * @private\n */\n this.hiddenItems = [];\n this.localeText = this.setLocaleKey();\n this.parent = parent;\n this.serviceLocator = service;\n this.addEventListener();\n }\n /**\n * @hidden\n * @private\n */\n DiagramContextMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('initial-load', this.render, this);\n };\n /**\n * @hidden\n * @private\n */\n DiagramContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('initial-load', this.render);\n };\n DiagramContextMenu.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.element = createHtmlElement('ul', { id: this.parent.element.id + '_contextMenu' });\n this.parent.element.appendChild(this.element);\n var target = '#' + this.parent.element.id;\n this.contextMenu = new Menu({\n items: this.getMenuItems(),\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n target: target,\n select: this.contextMenuItemClick.bind(this),\n beforeOpen: this.contextMenuBeforeOpen.bind(this),\n onOpen: this.contextMenuOpen.bind(this),\n onClose: this.contextMenuOnClose.bind(this),\n cssClass: 'e-diagram-menu'\n });\n this.contextMenu.appendTo(this.element);\n };\n DiagramContextMenu.prototype.getMenuItems = function () {\n var menuItems = [];\n var orderItems = [];\n var groupItems = [];\n if (!this.parent.contextMenuSettings.showCustomMenuOnly) {\n for (var _i = 0, _a = this.getDefaultItems(); _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.toLocaleLowerCase().indexOf('group') !== -1) {\n if (item.toLocaleLowerCase() !== 'grouping') {\n groupItems.push(this.buildDefaultItems(item));\n }\n }\n else if (item.toLocaleLowerCase().indexOf('order') !== -1) {\n if (item.toLocaleLowerCase() !== 'order') {\n orderItems.push(this.buildDefaultItems(item));\n }\n }\n else {\n menuItems.push(this.buildDefaultItems(item));\n }\n }\n if (groupItems.length > 0) {\n var orderGroup = this.buildDefaultItems('grouping');\n orderGroup.items = groupItems;\n menuItems.push(orderGroup);\n }\n if (orderItems.length > 0) {\n var orderGroup = this.buildDefaultItems('order');\n orderGroup.items = orderItems;\n menuItems.push(orderGroup);\n }\n }\n if (this.parent.contextMenuSettings.items) {\n for (var _b = 0, _c = this.parent.contextMenuSettings.items; _b < _c.length; _b++) {\n var customItem = _c[_b];\n menuItems.push(customItem);\n }\n }\n return menuItems;\n };\n DiagramContextMenu.prototype.contextMenuOpen = function () {\n this.isOpen = true;\n };\n DiagramContextMenu.prototype.contextMenuItemClick = function (args) {\n document.getElementById(this.parent.element.id + 'content').focus();\n this.parent.trigger(contextMenuClick, args);\n var item = this.getKeyFromId(args.item.id);\n if (!args.cancel) {\n switch (item) {\n case 'cut':\n this.parent.cut();\n break;\n case 'copy':\n this.parent.copy();\n break;\n case 'undo':\n this.parent.undo();\n break;\n case 'redo':\n this.parent.redo();\n break;\n case 'paste':\n this.parent.paste();\n break;\n case 'selectAll':\n this.parent.selectAll();\n break;\n case 'group':\n this.parent.group();\n break;\n case 'unGroup':\n this.parent.unGroup();\n break;\n case 'bringToFrontOrder':\n this.parent.bringToFront();\n break;\n case 'moveForwardOrder':\n this.parent.moveForward();\n break;\n case 'sendToBackOrder':\n this.parent.sendToBack();\n break;\n case 'sendBackwardOrder':\n this.parent.sendBackward();\n break;\n }\n }\n };\n DiagramContextMenu.prototype.contextMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.updateItemStatus();\n }\n };\n DiagramContextMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n DiagramContextMenu.prototype.updateItemStatus = function () {\n this.contextMenu.showItems(this.hiddenItems, true);\n this.contextMenu.enableItems(this.disableItems, false, true);\n this.hiddenItems = [];\n this.disableItems = [];\n this.isOpen = false;\n };\n DiagramContextMenu.prototype.ensureItems = function (item, event) {\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (item.target && event &&\n !this.ensureTarget(item)) {\n this.hiddenItems.push(item.id);\n }\n }\n };\n DiagramContextMenu.prototype.contextMenuBeforeOpen = function (args) {\n var diagramArgs = args;\n diagramArgs.hiddenItems = [];\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.ensureItems(item, args.event);\n if (item.items.length) {\n for (var _b = 0, _c = item.items; _b < _c.length; _b++) {\n var newItem = _c[_b];\n this.ensureItems(newItem, args.event);\n }\n }\n }\n this.eventArgs = args.event;\n this.parent.trigger(contextMenuOpen, diagramArgs);\n if (diagramArgs.items.length === diagramArgs.hiddenItems.length) {\n diagramArgs.cancel = true;\n diagramArgs.hiddenItems = [];\n }\n else {\n this.hiddenItems = this.hiddenItems.concat(diagramArgs.hiddenItems);\n this.contextMenu.enableItems(this.disableItems, false, true);\n var contextItems_1 = this;\n args.items.forEach(function (item) {\n if (contextItems_1.hiddenItems.indexOf(item.id) > -1) {\n contextItems_1.contextMenu.hideItems([item.id], true);\n }\n });\n }\n };\n DiagramContextMenu.prototype.ensureTarget = function (item) {\n var selectedLength = this.parent.selectedItems.nodes.length +\n this.parent.selectedItems.connectors.length;\n var itemText = this.getKeyFromId(item.id);\n var target = false;\n switch (itemText) {\n case 'undo':\n target = this.parent.historyList && this.parent.historyList.canUndo ? true : false;\n break;\n case 'redo':\n target = this.parent.historyList && this.parent.historyList.canRedo ? true : false;\n break;\n case 'paste':\n target = this.parent.commandHandler.clipboardData.clipObject ? true : false;\n break;\n case 'selectAll':\n target = this.parent.nodes.length + this.parent.connectors.length ? true : false;\n break;\n case 'grouping':\n target = ((selectedLength > 1) || (this.parent.selectedItems.nodes[0] && this.parent.selectedItems.nodes[0].children\n && this.parent.selectedItems.nodes[0].children.length > 1)) ? true : false;\n break;\n case 'group':\n target = selectedLength > 1;\n break;\n case 'unGroup':\n target = ((this.parent.selectedItems.nodes[0] && this.parent.selectedItems.nodes[0].children\n && this.parent.selectedItems.nodes[0].children.length > 1)) ? true : false;\n break;\n case 'cut':\n case 'copy':\n case 'order':\n case 'bringToFrontOrder':\n case 'moveForwardOrder':\n case 'sendToBackOrder':\n case 'sendBackwardOrder':\n target = selectedLength ? true : false;\n break;\n }\n return target;\n };\n /**\n * To destroy the Context menu.\n * @method destroy\n * @return {void}\n * @private\n */\n DiagramContextMenu.prototype.destroy = function () {\n this.contextMenu.destroy();\n remove(this.element);\n this.removeEventListener();\n };\n DiagramContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n DiagramContextMenu.prototype.generateID = function (item) {\n return this.parent.element.id + '_contextMenu_' + item;\n };\n DiagramContextMenu.prototype.getKeyFromId = function (id) {\n return id.replace(this.parent.element.id + '_contextMenu_', '');\n };\n DiagramContextMenu.prototype.buildDefaultItems = function (item) {\n var menuItem;\n switch (item) {\n case 'copy':\n menuItem = { target: menuClass.content, iconCss: menuClass.copy };\n break;\n case 'cut':\n menuItem = { target: menuClass.content, iconCss: menuClass.cut };\n break;\n case 'paste':\n menuItem = { target: menuClass.content, iconCss: menuClass.paste };\n break;\n case 'undo':\n menuItem = { target: menuClass.content, iconCss: menuClass.undo };\n break;\n case 'redo':\n menuItem = { target: menuClass.content, iconCss: menuClass.redo };\n break;\n case 'grouping':\n menuItem = { target: menuClass.content };\n break;\n case 'group':\n menuItem = { target: menuClass.content, iconCss: menuClass.group };\n break;\n case 'unGroup':\n menuItem = { target: menuClass.content, iconCss: menuClass.unGroup };\n break;\n case 'order':\n menuItem = { target: menuClass.content, iconCss: menuClass.order };\n break;\n case 'bringToFrontOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.bringToFront };\n break;\n case 'moveForwardOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.moveForward };\n break;\n case 'sendToBackOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.sendToBack };\n break;\n case 'sendBackwardOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.sendBackward };\n break;\n case 'selectAll':\n menuItem = { target: menuClass.content };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n target: menuItem.target, iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : ''\n };\n return this.defaultItems[item];\n };\n DiagramContextMenu.prototype.getDefaultItems = function () {\n return [\n 'copy',\n 'cut', 'paste', 'undo', 'redo', 'selectAll', 'grouping', 'group', 'unGroup', 'order',\n 'bringToFrontOrder', 'moveForwardOrder', 'sendToBackOrder', 'sendBackwardOrder'\n ];\n };\n DiagramContextMenu.prototype.setLocaleKey = function () {\n return {\n 'copy': 'Copy',\n 'cut': 'Cut',\n 'paste': 'Paste',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'selectAll': 'SelectAll',\n 'grouping': 'Grouping',\n 'group': 'Group',\n 'unGroup': 'UnGroup',\n 'order': 'Order',\n 'bringToFrontOrder': 'BringToFront',\n 'moveForwardOrder': 'MoveForward',\n 'sendToBackOrder': 'SendToBack',\n 'sendBackwardOrder': 'SendBackward'\n };\n };\n return DiagramContextMenu;\n}());\nexport { DiagramContextMenu };\n","import { Point } from '../primitives/point';\nimport { Rect } from '../primitives/rect';\nimport { intersect3 } from '../utility/diagram-util';\nimport { canBridge } from '../utility/constraints-util';\n/**\n * ConnectorBridging defines the bridging behavior\n */\n/** @private */\nvar ConnectorBridging = /** @class */ (function () {\n /**\n * Constructor for the bridging module\n * @private\n */\n function ConnectorBridging() {\n //constructs the bridging module\n }\n /** @private */\n ConnectorBridging.prototype.updateBridging = function (conn, diagram) {\n var lastBridge = [];\n var bounds;\n conn.bridges = [];\n if (canBridge(conn, diagram)) {\n // if (this.canBridge(conn, diagram)) {\n var points1 = this.getPoints(conn);\n bounds = Rect.toBounds(points1);\n var bridgeSpacing = conn.bridgeSpace;\n var bgedir = diagram.bridgeDirection;\n var count = -1;\n var quads = diagram.connectors;\n for (var q = 0; q < quads.length; q++) {\n var connector1 = quads[q];\n if (conn && connector1 && conn.id !== connector1.id) {\n var points2 = this.getPoints(connector1);\n var bounds1 = Rect.toBounds(points2);\n if (this.intersectsRect(bounds, bounds1)) {\n var intersectPts = this.intersect(points1, points2, false, bgedir, true);\n if (intersectPts.length > 0) {\n for (var i = 0; i < intersectPts.length; i++) {\n var fullLength = 0;\n var length_1 = 0;\n var segmentIndex = 0;\n var pointIndex = 0;\n var obj = this.getLengthAtFractionPoint(conn, intersectPts[i]);\n if (obj.pointIndex !== -1) {\n length_1 = obj.lengthFractionIndex;\n fullLength = obj.fullLength;\n segmentIndex = obj.segmentIndex;\n pointIndex = obj.pointIndex;\n var stBridge = this.getPointAtLength((length_1 - (bridgeSpacing / 2)), points1);\n var enBridge = this.getPointAtLength((length_1 + (bridgeSpacing / 2)), points1);\n var fractLength = (length_1 - (bridgeSpacing / 2)) / fullLength;\n fractLength = (length_1 + (bridgeSpacing / 2)) / fullLength;\n if (this.isEmptyPoint(enBridge)) {\n enBridge = stBridge;\n }\n var start = void 0;\n var end = void 0;\n start = conn.sourcePoint;\n if (conn.type === 'Straight') {\n end = conn.targetPoint;\n }\n else {\n end = conn.intermediatePoints[pointIndex];\n }\n var angle = this.angleCalculation(start, end);\n if (lastBridge.length) {\n var fixedPoint = void 0;\n fixedPoint = conn.sourcePoint;\n var fix = Math.abs(this.lengthCalculation(fixedPoint, enBridge));\n var var1 = 0;\n var insertAt = -1;\n count = -1;\n for (var k = 0; k < lastBridge[segmentIndex].bridges.length; k++) {\n count++;\n var arcSeg = lastBridge[segmentIndex].bridges[k];\n var1 = Math.abs(this.lengthCalculation(fixedPoint, arcSeg.endPoint));\n if (fix < var1) {\n insertAt = count;\n break;\n }\n }\n if (insertAt >= 0) {\n var paths = void 0;\n paths = this.createSegment(stBridge, enBridge, angle, bgedir, pointIndex, conn, diagram);\n paths.target = connector1.id;\n lastBridge[segmentIndex].bridges.splice(insertAt, 0, paths);\n lastBridge[segmentIndex].bridges.join();\n lastBridge[segmentIndex].bridgeStartPoint.splice(insertAt, 0, stBridge);\n lastBridge[segmentIndex].bridgeStartPoint.join();\n lastBridge[segmentIndex].segmentIndex = segmentIndex;\n }\n else {\n var paths = void 0;\n paths = this.createSegment(stBridge, enBridge, angle, bgedir, pointIndex, conn, diagram);\n paths.target = connector1.id;\n lastBridge[segmentIndex].bridges.push(paths);\n lastBridge[segmentIndex].bridgeStartPoint.push(stBridge);\n lastBridge[segmentIndex].segmentIndex = segmentIndex;\n }\n }\n else {\n if (!isNaN(stBridge.x) && !isNaN(stBridge.y) && !this.isEmptyPoint(enBridge)) {\n var arcs = void 0;\n var bges = [];\n var bgept = [];\n arcs = this.createSegment(stBridge, enBridge, angle, bgedir, pointIndex, conn, diagram);\n var bgseg = {\n bridges: bges, bridgeStartPoint: bgept, segmentIndex: segmentIndex\n };\n arcs.target = connector1.id;\n var stPoints = [];\n var edPoints = [];\n stPoints.push(stBridge);\n edPoints.push(enBridge);\n lastBridge[segmentIndex] = bgseg;\n lastBridge[segmentIndex].bridges.push(arcs);\n lastBridge[segmentIndex].bridgeStartPoint = stPoints;\n lastBridge[segmentIndex].segmentIndex = segmentIndex;\n }\n }\n }\n }\n }\n }\n }\n }\n if (lastBridge.length !== 0) {\n this.firstBridge(lastBridge, conn, bridgeSpacing);\n }\n }\n };\n /** @private */\n ConnectorBridging.prototype.firstBridge = function (bridgeList, connector, bridgeSpacing) {\n for (var i = 0; i < bridgeList.length; i++) {\n var bridge = bridgeList[i];\n for (var k = 1; k < bridge.bridges.length; k++) {\n if (Point.findLength(bridge.bridges[k].endPoint, bridge.bridges[k - 1].endPoint) < bridgeSpacing) {\n bridge.bridges[k - 1].endPoint = bridge.bridges[k].endPoint;\n var subBridge = bridge.bridges[k - 1];\n var arc = this.createBridgeSegment(subBridge.startPoint, subBridge.endPoint, subBridge.angle, bridgeSpacing, subBridge.sweep);\n bridge.bridges[k - 1].path = arc;\n bridge.bridges.splice(k, 1);\n bridge.bridgeStartPoint.splice(k, 1);\n k--;\n }\n }\n var pre = connector.sourcePoint;\n for (var j = 0; j < bridge.bridges.length; j++) {\n var subBridge = bridge.bridges[j];\n var preventChecking = true;\n pre = subBridge.endPoint;\n connector.bridges.push(subBridge);\n }\n }\n };\n /** @private */\n ConnectorBridging.prototype.createSegment = function (st, end, angle, direction, index, conn, diagram) {\n var arc;\n var sweep;\n var path = {\n angle: 0, endPoint: { x: 0, y: 0 }, target: '', path: '',\n segmentPointIndex: -1, startPoint: { x: 0, y: 0 }, sweep: 1, rendered: false\n };\n sweep = this.sweepDirection(angle, direction, conn, diagram);\n arc = this.createBridgeSegment(st, end, angle, conn.bridgeSpace, sweep);\n path.path = arc;\n path.startPoint = st;\n path.endPoint = end;\n path.angle = angle;\n path.segmentPointIndex = index;\n path.sweep = sweep;\n return path;\n };\n /** @private */\n ConnectorBridging.prototype.createBridgeSegment = function (startPt, endPt, angle, bridgeSpace, sweep) {\n var path = 'A ' + bridgeSpace / 2 + ' ' + bridgeSpace / 2 + ' ' + angle + ' , 1 ' + sweep + ' ' + endPt.x + ',' + endPt.y;\n return path;\n };\n /** @private */\n ConnectorBridging.prototype.sweepDirection = function (angle, bridgeDirection, connector, diagram) {\n var angle1 = Math.abs(angle);\n var sweep;\n switch (bridgeDirection) {\n case 'Top':\n case 'Bottom':\n sweep = 1;\n if (angle1 >= 0 && angle1 <= 90) {\n sweep = 0;\n }\n break;\n case 'Left':\n case 'Right':\n sweep = 1;\n if (angle < 0 && angle >= -180) {\n sweep = 0;\n }\n break;\n }\n if (bridgeDirection === 'Right' || bridgeDirection === 'Bottom') {\n if (sweep === 0) {\n sweep = 1;\n }\n else {\n sweep = 0;\n }\n }\n return sweep;\n };\n /** @private */\n ConnectorBridging.prototype.getPointAtLength = function (length, pts) {\n var run = 0;\n var pre;\n var found = { x: 0, y: 0 };\n for (var i = 0; i < pts.length; i++) {\n var pt = pts[i];\n if (!pre) {\n pre = pt;\n continue;\n }\n else {\n var l = this.lengthCalculation(pre, pt);\n if (run + l > length) {\n var r = length - run;\n var deg = Point.findAngle(pre, pt);\n var x = r * Math.cos(deg * Math.PI / 180);\n var y = r * Math.sin(deg * Math.PI / 180);\n found = { x: pre.x + x, y: pre.y + y };\n break;\n }\n else {\n run += l;\n }\n }\n pre = pt;\n }\n return found;\n };\n /** @private */\n ConnectorBridging.prototype.getPoints = function (connector) {\n var points = [];\n if (connector.intermediatePoints && (connector.type === 'Straight' || connector.type === 'Orthogonal')) {\n for (var j = 0; j < connector.intermediatePoints.length; j++) {\n points.push(connector.intermediatePoints[j]);\n }\n }\n return points;\n };\n ConnectorBridging.prototype.intersectsRect = function (rect1, rect2) {\n return ((((rect2.x < (rect1.x + rect1.width)) && (rect1.x < (rect2.x + rect2.width)))\n && (rect2.y < (rect1.y + rect1.height))) && (rect1.y < (rect2.y + rect2.height)));\n };\n /** @private */\n ConnectorBridging.prototype.intersect = function (points1, points2, self, bridgeDirection, zOrder) {\n if (self && points2.length >= 2) {\n points2.splice(0, 1);\n points2.splice(0, 1);\n }\n var points = [];\n for (var i = 0; i < points1.length - 1; i++) {\n var pt = this.inter1(points1[i], points1[i + 1], points2, zOrder, bridgeDirection);\n if (pt.length > 0) {\n for (var k = 0; k < pt.length; k++) {\n points.push(pt[k]);\n }\n }\n if (self && points2.length >= 1) {\n points2.splice(0, 1);\n }\n }\n return points;\n };\n /** @private */\n ConnectorBridging.prototype.inter1 = function (startPt, endPt, pts, zOrder, bridgeDirection) {\n var points1 = [];\n for (var i = 0; i < pts.length - 1; i++) {\n var point = this.intersect2(startPt, endPt, pts[i], pts[i + 1]);\n if (!this.isEmptyPoint(point)) {\n var angle = this.angleCalculation(startPt, endPt);\n var angle1 = this.angleCalculation(pts[i], pts[i + 1]);\n angle = this.checkForHorizontalLine(angle);\n angle1 = this.checkForHorizontalLine(angle1);\n switch (bridgeDirection) {\n case 'Left':\n case 'Right':\n if (angle > angle1) {\n points1.push(point);\n }\n break;\n case 'Top':\n case 'Bottom':\n if (angle < angle1) {\n points1.push(point);\n }\n break;\n }\n if (angle === angle1 && zOrder) {\n points1.push(point);\n }\n }\n }\n return points1;\n };\n ConnectorBridging.prototype.checkForHorizontalLine = function (angle) {\n var temp = 0;\n var roundedAngle = Math.abs(angle);\n if (roundedAngle > 90) {\n temp = 180 - roundedAngle;\n }\n else {\n temp = roundedAngle;\n }\n return temp;\n };\n ConnectorBridging.prototype.intersect2 = function (start1, end1, start2, end2) {\n var point = { x: 0, y: 0 };\n var lineUtil1 = this.getLineSegment(start1.x, start1.y, end1.x, end1.y);\n var lineUtil2 = this.getLineSegment(start2.x, start2.y, end2.x, end2.y);\n var line3 = intersect3(lineUtil1, lineUtil2);\n if (line3.enabled) {\n return line3.intersectPt;\n }\n else {\n return point;\n }\n };\n /** @private */\n ConnectorBridging.prototype.getLineSegment = function (x1, y1, x2, y2) {\n return { 'x1': Number(x1) || 0, 'y1': Number(y1) || 0, 'x2': Number(x2) || 0, 'y2': Number(y2) || 0 };\n };\n ConnectorBridging.prototype.isEmptyPoint = function (point) {\n return point.x === 0 && point.y === 0;\n };\n ConnectorBridging.prototype.getLengthAtFractionPoint = function (connector, pointAt) {\n var lengthFraction;\n var confirm = 100;\n var pointIndex = -1;\n var fullLength = 0;\n var segmentIndex = -1;\n var count = 0;\n var lengthAtFractionPt = 0;\n var pt1 = connector.sourcePoint;\n var previouspt2 = pt1;\n var points = [];\n for (var i = 0; i < connector.intermediatePoints.length; i++) {\n var point2 = connector.intermediatePoints[i];\n points.push(point2);\n }\n for (var j = 0; j < points.length; j++) {\n var pt2 = points[j];\n var suspect = this.getSlope(pt2, pt1, pointAt, connector);\n if (suspect < confirm) {\n confirm = suspect;\n lengthAtFractionPt = fullLength + this.lengthCalculation(pointAt, previouspt2);\n segmentIndex = count;\n pointIndex = j;\n }\n fullLength += Point.findLength(pt2, pt1);\n pt1 = pt2;\n previouspt2 = pt2;\n }\n count++;\n lengthFraction = {\n lengthFractionIndex: lengthAtFractionPt, fullLength: fullLength,\n segmentIndex: segmentIndex, pointIndex: pointIndex\n };\n return lengthFraction;\n };\n ConnectorBridging.prototype.getSlope = function (startPt, endPt, point, connector) {\n var three = 3.0;\n var delX = Math.abs(startPt.x - endPt.x);\n var delY = Math.abs(startPt.y - endPt.y);\n var lhs = ((point.y - startPt.y) / (endPt.y - startPt.y));\n var rhs = ((point.x - startPt.x) / (endPt.x - startPt.x));\n if (!isFinite(lhs) || !isFinite(rhs) || isNaN(lhs) || isNaN(rhs)) {\n if (startPt.x === endPt.x) {\n if (startPt.y === endPt.y) {\n return 10000;\n }\n else if (((startPt.y > point.y) && (point.y > endPt.y)) || ((startPt.y < point.y) && (point.y < endPt.y))) {\n return Math.abs(startPt.x - point.x);\n }\n }\n else if (startPt.y === endPt.y) {\n if (((startPt.x > point.x) && (point.x > endPt.x)) || ((startPt.x < point.x) && (point.x < endPt.x))) {\n return Math.abs(startPt.y - point.y);\n }\n }\n }\n else {\n if ((startPt.x >= point.x && point.x >= endPt.x) || (startPt.x <= point.x && point.x <= endPt.x) || delX < three) {\n if ((startPt.y >= point.y && point.y >= endPt.y) || (startPt.y <= point.y && point.y <= endPt.y) || delY < three) {\n return Math.abs(lhs - rhs);\n }\n }\n }\n return 10000;\n };\n /** @private */\n ConnectorBridging.prototype.angleCalculation = function (startPt, endPt) {\n var xDiff = startPt.x - endPt.x;\n var yDiff = startPt.y - endPt.y;\n return Math.atan2(yDiff, xDiff) * (180 / Math.PI);\n };\n ConnectorBridging.prototype.lengthCalculation = function (startPt, endPt) {\n //removed a try catch from here\n var len = Math.sqrt(((startPt.x - endPt.x) * (startPt.x - endPt.x)) + ((startPt.y - endPt.y) * (startPt.y - endPt.y)));\n return len;\n };\n /**\n * To destroy the bridging module\n * @return {void}\n * @private\n */\n ConnectorBridging.prototype.destroy = function () {\n /**\n * Destroys the bridging module\n */\n };\n /**\n * Get module name.\n */\n ConnectorBridging.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Bridging';\n };\n return ConnectorBridging;\n}());\nexport { ConnectorBridging };\n","import { Rect } from '../primitives/rect';\nimport { PathElement } from '../core/elements/path-element';\nimport { SnapConstraints } from '../enum/enum';\nimport { Connector } from './connector';\nimport { Selector } from '../interaction/selector';\nimport { getBounds } from './../utility/base-util';\nimport { randomId } from './../utility/base-util';\nimport { isSelected } from '../interaction/actions';\nimport { TextElement } from '../core/elements/text-element';\n/**\n * Snapping\n */\nvar Snapping = /** @class */ (function () {\n function Snapping(diagram) {\n this.line = [];\n this.diagram = diagram;\n }\n /** @private */\n Snapping.prototype.canSnap = function () {\n return (this.diagram.snapSettings.constraints\n & (SnapConstraints.SnapToObject | SnapConstraints.SnapToLines)) !== 0;\n };\n /**\n * Snap to object\n * @private\n */\n Snapping.prototype.snapPoint = function (diagram, selectedObject, towardsLeft, towardsTop, delta, startPoint, endPoint) {\n var snapSettings = this.diagram.snapSettings;\n var zoomFactor = 1;\n var offset = { x: 0, y: 0 };\n var bounds = getBounds(selectedObject.wrapper);\n var horizontallysnapped = { snapped: false, offset: 0 };\n var verticallysnapped = { snapped: false, offset: 0 };\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) {\n var snapLine = void 0;\n snapLine = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n snapLine.setAttribute('id', '_SnappingLines');\n snapLine.setAttribute('shapeRendering', 'crispEdges');\n this.getAdornerLayerSvg().appendChild(snapLine);\n this.snapObject(diagram, selectedObject, snapLine, horizontallysnapped, verticallysnapped, delta, startPoint === endPoint);\n }\n //original position\n var left = bounds.x + delta.x;\n var top = bounds.y + delta.y;\n var right = bounds.x + bounds.width + delta.x;\n var bottom = bounds.y + bounds.height + delta.y;\n var scaledIntervals = snapSettings.verticalGridlines.scaledIntervals;\n //snapped positions\n var roundedRight = this.round(right, scaledIntervals, zoomFactor);\n var roundedLeft = this.round(left, scaledIntervals, zoomFactor);\n scaledIntervals = snapSettings.horizontalGridlines.scaledIntervals;\n var roundedTop = this.round(top, scaledIntervals, zoomFactor);\n var roundedBottom = this.round(bottom, scaledIntervals, zoomFactor);\n //currentposition\n var currentright = bounds.x + bounds.width;\n var currentbottom = bounds.y + bounds.height;\n if (!horizontallysnapped.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToVerticalLines) {\n if (Math.abs(delta.x) >= 1) {\n if (towardsLeft) {\n if (Math.abs(roundedRight - currentright) > Math.abs(roundedLeft - bounds.x)) {\n offset.x += roundedLeft - bounds.x;\n }\n else {\n offset.x += roundedRight - currentright;\n }\n }\n else {\n if (Math.abs(roundedRight - currentright) < Math.abs(roundedLeft - bounds.x)) {\n offset.x += roundedRight - currentright;\n }\n else {\n offset.x += roundedLeft - bounds.x;\n }\n }\n }\n }\n else {\n offset.x = endPoint.x - startPoint.x;\n }\n }\n else {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) {\n offset.x = horizontallysnapped.offset;\n }\n else {\n offset.x = endPoint.x - startPoint.x;\n }\n }\n if (!verticallysnapped.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToHorizontalLines) {\n if (Math.abs(delta.y) >= 1) {\n if (towardsTop) {\n if (Math.abs(roundedBottom - currentbottom) > Math.abs(roundedTop - bounds.y)) {\n offset.y += roundedTop - bounds.y;\n }\n else {\n offset.y += roundedBottom - currentbottom;\n }\n }\n else {\n if (Math.abs(roundedBottom - currentbottom) < Math.abs(roundedTop - bounds.y)) {\n offset.y += roundedBottom - currentbottom;\n }\n else {\n offset.y += roundedTop - bounds.y;\n }\n }\n }\n }\n else {\n offset.y = endPoint.y - startPoint.y;\n }\n }\n else {\n offset.y = verticallysnapped.offset;\n }\n return offset;\n };\n /**\n * @private\n */\n Snapping.prototype.round = function (value, snapIntervals, scale) {\n if (scale > 1) {\n scale = Math.pow(2, Math.floor(Math.log(scale) / Math.log(2)));\n }\n else {\n scale = Math.pow(2, Math.ceil(Math.log(scale) / Math.log(2)));\n }\n var cutoff = 0;\n var i = 0;\n for (i = 0; i < snapIntervals.length; i++) {\n cutoff += snapIntervals[i];\n }\n cutoff /= scale;\n var quotient = Math.floor(Math.abs(value) / cutoff);\n var bal = value % cutoff;\n var prev = quotient * cutoff;\n if (prev !== value) {\n if (value >= 0) {\n for (i = 0; i < snapIntervals.length; i++) {\n if (bal <= snapIntervals[i] / scale) {\n return prev + (bal < (snapIntervals[i] / (2 * scale)) ? 0 : snapIntervals[i] / scale);\n }\n else {\n prev += snapIntervals[i] / scale;\n bal -= snapIntervals[i] / scale;\n }\n }\n }\n else {\n prev = prev * -1;\n for (i = snapIntervals.length - 1; i >= 0; i--) {\n if (Math.abs(bal) <= snapIntervals[i] / scale) {\n return prev - (Math.abs(bal) < (snapIntervals[i] / (2 * scale)) ? 0 : snapIntervals[i] / scale);\n }\n else {\n prev -= snapIntervals[i] / scale;\n bal += snapIntervals[i] / scale;\n }\n }\n }\n }\n return value;\n };\n /**\n * Snap to Object\n */\n Snapping.prototype.snapObject = function (diagram, selectedObject, g, horizontalSnap, verticalSnap, delta, ended) {\n var lengthX = null;\n var lengthY;\n var hTarget;\n var vTarget;\n var scroller = this.diagram.scroller;\n var snapSettings = this.diagram.snapSettings;\n var objectsAtLeft = [];\n var objectsAtRight = [];\n var objectsAtTop = [];\n var objectsAtBottom = [];\n var bounds = getBounds(selectedObject.wrapper);\n var scale = diagram.scroller.currentZoom;\n var hoffset = -scroller.horizontalOffset;\n var voffset = -scroller.verticalOffset;\n var snapObjDistance = snapSettings.snapObjectDistance / scale;\n var viewPort = new Rect(0, 0, scroller.viewPortWidth, scroller.viewPortHeight);\n var hIntersectRect = new Rect(hoffset / scale, (bounds.y - snapObjDistance - 5), viewPort.width / scale, (bounds.height + 2 * snapObjDistance + 10));\n var vIntersectRect = new Rect((bounds.x - snapObjDistance - 5), voffset / scale, (bounds.width + 2 * snapObjDistance + 10), viewPort.height / scale);\n viewPort = new Rect(hoffset / scale, voffset / scale, viewPort.width / scale, viewPort.height / scale);\n var nodes = this.findNodes(diagram.spatialSearch, selectedObject, vIntersectRect, viewPort);\n var i;\n var target;\n var targetBounds;\n var nameTable = diagram.nameTable;\n for (i = 0; i < nodes.length; i++) {\n target = nodes[i];\n if (this.canBeTarget(diagram, target)) {\n if (!(this.diagram.nameTable[target.id] instanceof Connector) && this.canConsider(nameTable, selectedObject, target)) {\n targetBounds = target.bounds;\n if (targetBounds.height + targetBounds.y < delta.y + bounds.y) {\n objectsAtTop.push({\n obj: target, distance: Math.abs(bounds.y + delta.y - targetBounds.y - targetBounds.height)\n });\n }\n else if (targetBounds.y > bounds.y + delta.y + bounds.height) {\n objectsAtBottom.push({ obj: target, distance: Math.abs(bounds.y + delta.y + bounds.height - targetBounds.y) });\n }\n if (lengthX == null || lengthX > Math.abs(targetBounds.y - bounds.y - delta.y)) {\n if (Math.abs(targetBounds.x + targetBounds.width / 2 - (bounds.x + bounds.width / 2 + delta.x)) <=\n snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'centerX');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x + targetBounds.width - (bounds.x + bounds.width + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'right');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x - (bounds.x + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'left');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x - (bounds.x + bounds.width + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'rightLeft');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x + targetBounds.width - (bounds.x + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'leftRight');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n }\n }\n }\n }\n nodes = this.findNodes(diagram.spatialSearch, selectedObject, hIntersectRect, viewPort);\n for (var j = 0; j < nodes.length; j++) {\n target = nodes[j];\n if (this.canBeTarget(diagram, target)) {\n if (!(this.diagram.nameTable[target.id] instanceof Connector) && this.canConsider(nameTable, selectedObject, target)) {\n targetBounds = target.bounds;\n if (targetBounds.x + targetBounds.width < bounds.x + delta.x) {\n objectsAtLeft[objectsAtLeft.length] = {\n obj: target, distance: Math.abs((bounds.x + delta.x) - targetBounds.x - targetBounds.width)\n };\n }\n if (targetBounds.x > bounds.x + delta.x + bounds.width) {\n objectsAtRight[objectsAtRight.length] = {\n obj: target, distance: Math.abs(bounds.x + delta.x + bounds.width - targetBounds.x)\n };\n }\n if (lengthY == null || lengthY > Math.abs(targetBounds.x - bounds.x - delta.x)) {\n if (Math.abs(targetBounds.y + targetBounds.height / 2 - (bounds.y + bounds.height / 2 + delta.y))\n <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'centerY');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y - bounds.y - delta.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'top');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y + targetBounds.height - (bounds.y + bounds.height + delta.y)) <=\n snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'bottom');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y + targetBounds.height - bounds.y - delta.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'topBottom');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y - (bounds.y + bounds.height + delta.y)) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'bottomTop');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n }\n }\n }\n }\n this.createGuidelines(diagram, hTarget, vTarget, g, horizontalSnap, verticalSnap, ended);\n if (!horizontalSnap.snapped) {\n this.createHSpacingLines(diagram, g, selectedObject, objectsAtLeft, objectsAtRight, horizontalSnap, verticalSnap, ended, delta, snapObjDistance);\n }\n if (!verticalSnap.snapped) {\n this.createVSpacingLines(diagram, g, selectedObject, objectsAtTop, objectsAtBottom, horizontalSnap, verticalSnap, ended, delta, snapObjDistance);\n }\n };\n /**\n * @private\n */\n Snapping.prototype.snapConnectorEnd = function (point) {\n var snapSettings = this.diagram.snapSettings;\n var zoomFactor = 1;\n if (snapSettings.constraints & SnapConstraints.SnapToLines) {\n point.x = this.round(point.x, snapSettings.verticalGridlines.scaledIntervals, zoomFactor);\n point.y = this.round(point.y, snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n }\n return point;\n };\n Snapping.prototype.canBeTarget = function (diagram, node) {\n node = this.diagram.nameTable[node.id];\n return !(isSelected(this.diagram, node, false));\n };\n Snapping.prototype.snapSize = function (diagram, horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, selectedObject, ended) {\n var lengthX;\n var lengthY;\n var snapSettings = this.diagram.snapSettings;\n var scroller = this.diagram.scroller;\n var hTarget;\n var vTarget;\n var bounds = getBounds(selectedObject.wrapper);\n var nameTable = diagram.nameTable;\n var sameWidth = [];\n var sameHeight = [];\n var scale = diagram.scroller.currentZoom;\n var hoffset = -scroller.horizontalOffset;\n var voffset = -scroller.verticalOffset;\n var snapObjDistance = snapSettings.snapObjectDistance / scale;\n var viewPort = new Rect(0, 0, scroller.viewPortWidth, scroller.viewPortHeight);\n var hintersectedrect = new Rect(hoffset / scale, (bounds.y - 5) / scale, viewPort.width / scale, (bounds.height + 10) / scale);\n var vintersectedrect = new Rect((bounds.x - 5) / scale, voffset / scale, (bounds.width + 10) / scale, viewPort.height / scale);\n viewPort = new Rect(hoffset / scale, voffset / scale, viewPort.width / scale, viewPort.height / scale);\n var nodesInView = [];\n var nodes = this.findNodes(diagram.spatialSearch, selectedObject, vintersectedrect, viewPort, nodesInView);\n var i;\n var target;\n var targetBounds;\n for (i = 0; i < nodes.length; i++) {\n target = nodes[i];\n if (this.canConsider(nameTable, selectedObject, target) && !(this.diagram.nameTable[target.id] instanceof Connector)) {\n targetBounds = target.bounds;\n if (lengthX == null || lengthX > Math.abs(targetBounds.y - bounds.y)) {\n if (horizontalSnap.left) {\n if (Math.abs(bounds.x + deltaX - targetBounds.x) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'left');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(bounds.x + deltaX - targetBounds.x - targetBounds.width) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'leftRight');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n }\n else if (horizontalSnap.right) {\n if (Math.abs(bounds.x + deltaX + bounds.width - targetBounds.x - targetBounds.width) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'right');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(bounds.x + deltaX + bounds.width - targetBounds.x) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'rightLeft');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n }\n }\n }\n }\n nodes = this.findNodes(diagram.spatialSearch, selectedObject, hintersectedrect, viewPort);\n for (var i_1 = 0; i_1 < nodes.length; i_1++) {\n var target_1 = nodes[i_1];\n if (this.canConsider(nameTable, selectedObject, target_1) && !(this.diagram.nameTable[target_1.id] instanceof Connector)) {\n var targetBounds_1 = target_1.bounds;\n if (lengthY == null || lengthY > Math.abs(targetBounds_1.x - bounds.x)) {\n if (verticalSnap.top) {\n if (Math.abs(bounds.y + deltaY - targetBounds_1.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'top');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n else if (Math.abs(bounds.y + deltaY - targetBounds_1.y - targetBounds_1.height) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'topBottom');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n }\n else if (verticalSnap.bottom) {\n if (Math.abs(bounds.y + bounds.height + deltaY - targetBounds_1.y - targetBounds_1.height) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'bottom');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n else if (Math.abs(bounds.y + bounds.height + deltaY - targetBounds_1.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'bottomTop');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n }\n }\n }\n }\n for (i = 0; i < nodesInView.length; i++) {\n target = nodesInView[i];\n if (this.canConsider(nameTable, selectedObject, target)) {\n var targetBounds_2 = target.bounds;\n var delta = horizontalSnap.left ? -deltaX : deltaX;\n var difference = Math.abs(bounds.width + delta - targetBounds_2.width);\n var actualDiff = void 0;\n if (difference <= snapObjDistance) {\n actualDiff = horizontalSnap.left ? -targetBounds_2.width + bounds.width : targetBounds_2.width - bounds.width;\n sameWidth[sameWidth.length] = { source: target, difference: difference, offset: actualDiff };\n }\n delta = verticalSnap.top ? -deltaY : deltaY;\n var dify = Math.abs(bounds.height + delta - targetBounds_2.height);\n if (dify <= snapObjDistance) {\n actualDiff = verticalSnap.top ? -targetBounds_2.height + bounds.height : targetBounds_2.height - bounds.height;\n sameHeight[sameHeight.length] = { source: target, difference: dify, offset: actualDiff };\n }\n }\n }\n var g;\n if (!diagram.getTool) {\n var g_1 = this.createGuidelines(diagram, hTarget, vTarget, snapLine, horizontalSnap, verticalSnap, ended);\n }\n if (!horizontalSnap.snapped && sameWidth.length > 0 && (horizontalSnap.left || horizontalSnap.right)) {\n this.addSameWidthLines(diagram, snapLine, sameWidth, horizontalSnap, ended, selectedObject);\n }\n if (!verticalSnap.snapped && sameHeight.length > 0 && (verticalSnap.top || verticalSnap.bottom)) {\n this.addSameHeightLines(diagram, snapLine, sameHeight, verticalSnap, ended, selectedObject);\n }\n };\n /**\n * Snap to object on top\n * @private\n */\n Snapping.prototype.snapTop = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialBoundsT) {\n var dify = deltaY;\n verticalSnap.top = true;\n var y;\n horizontalSnap.left = horizontalSnap.right = false;\n var zoomFactor = 1;\n //let initialBoundsT: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n y = initialBoundsT.y - initialBoundsT.height * shape.pivot.y + deltaY - (shape.offsetY - shape.height * shape.pivot.y);\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, deltaX, y, this.diagram.selectedItems, ended);\n }\n if (!verticalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToHorizontalLines) {\n var top_1 = initialBoundsT.y - initialBoundsT.height * shape.pivot.y;\n var actualTop = top_1 + deltaY;\n var roundedTop = this.round(actualTop, this.diagram.snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n dify = roundedTop - top_1;\n }\n }\n else {\n dify = (deltaY - y) + verticalSnap.offset;\n }\n return dify;\n };\n /**\n * Snap to object on right\n * @private\n */\n Snapping.prototype.snapRight = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialBound) {\n var difx = deltaX;\n var x;\n horizontalSnap.right = true;\n verticalSnap.top = verticalSnap.bottom = false;\n var zoomFactor = 1;\n //let initialBound: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n x = initialBound.x + initialBound.width * (1 - shape.pivot.x) + deltaX - (shape.offsetX + shape.width * (1 - shape.pivot.x));\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, x, deltaY, this.diagram.selectedItems, ended);\n }\n if (!horizontalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToVerticalLines) {\n var right = initialBound.x + initialBound.width * (1 - shape.pivot.x);\n var actualRight = right + deltaX;\n var roundedRight = this.round(actualRight, this.diagram.snapSettings.verticalGridlines.scaledIntervals, zoomFactor);\n difx = roundedRight - right;\n }\n }\n else {\n difx = (deltaX - x) + horizontalSnap.offset;\n }\n return difx;\n };\n /**\n * Snap to object on left\n * @private\n */\n Snapping.prototype.snapLeft = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialBoundsB) {\n var difx = deltaX;\n var x = 0;\n horizontalSnap.left = true;\n verticalSnap.top = verticalSnap.bottom = false;\n var zoomFactor = 1;\n //let initialBoundsB: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n x = initialBoundsB.x - initialBoundsB.width * shape.pivot.x + deltaX - (shape.offsetX - shape.width * shape.pivot.x);\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, x, deltaY, this.diagram.selectedItems, ended);\n }\n if (!horizontalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToVerticalLines) {\n var left = initialBoundsB.x - initialBoundsB.width * shape.pivot.x;\n var actualLeft = left + deltaX;\n var roundedLeft = this.round(actualLeft, this.diagram.snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n difx = roundedLeft - left;\n }\n }\n else {\n difx = (deltaX - x) + horizontalSnap.offset;\n }\n return difx;\n };\n /**\n * Snap to object on bottom\n * @private\n */\n Snapping.prototype.snapBottom = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialRect) {\n var dify = deltaY;\n verticalSnap.bottom = true;\n horizontalSnap.left = horizontalSnap.right = false;\n var zoomFactor = 1;\n var y = 0;\n //let initialRect: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n y = initialRect.y + initialRect.height * (1 - shape.pivot.y) + deltaY - (shape.offsetY + shape.height * (1 - shape.pivot.y));\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, deltaX, y, this.diagram.selectedItems, ended);\n }\n var bounds;\n bounds = (shape instanceof TextElement) ? getBounds(shape) : getBounds(shape.wrapper);\n if (!verticalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToHorizontalLines) {\n var bottom = initialRect.y + initialRect.height * (1 - shape.pivot.y);\n var actualBottom = bottom + deltaY;\n var roundedBottom = this.round(actualBottom, this.diagram.snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n dify = roundedBottom - bottom;\n }\n }\n else {\n dify = (deltaY - y) + verticalSnap.offset;\n }\n return dify;\n };\n /**\n * To create the same width and same size lines\n */\n Snapping.prototype.createGuidelines = function (diagram, hTarget, vTarget, snapLine, horizontalSnap, verticalSnap, ended) {\n if (hTarget) {\n horizontalSnap.offset = hTarget.offsetX;\n horizontalSnap.snapped = true;\n if (!ended) {\n if (hTarget.type === 'sideAlign') {\n this.renderAlignmentLines(hTarget.start, hTarget.end, snapLine, diagram.scroller.transform);\n }\n else {\n this.renderAlignmentLines(hTarget.start, hTarget.end, snapLine, diagram.scroller.transform);\n }\n }\n }\n if (vTarget) {\n verticalSnap.offset = vTarget.offsetY;\n verticalSnap.snapped = true;\n if (!ended) {\n if (vTarget.type === 'sideAlign') {\n this.renderAlignmentLines(vTarget.start, vTarget.end, snapLine, diagram.scroller.transform);\n }\n else {\n this.renderAlignmentLines(vTarget.start, vTarget.end, snapLine, diagram.scroller.transform);\n }\n }\n }\n return snapLine;\n };\n /**\n * To create the alignment lines\n */\n Snapping.prototype.renderAlignmentLines = function (start, end, svg, transform) {\n start = {\n x: (start.x + transform.tx) * transform.scale,\n y: (start.y + transform.ty) * transform.scale\n };\n end = {\n x: (end.x + transform.tx) * transform.scale,\n y: (end.y + transform.ty) * transform.scale\n };\n var line1 = {\n stroke: '#07EDE1', strokeWidth: 1, startPoint: { x: start.x, y: start.y },\n endPoint: { x: end.x, y: end.y }, fill: '#07EDE1', dashArray: '', width: 1,\n x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId()\n };\n var i = 0;\n this.line.push(line1);\n for (i = 0; i < this.line.length; i++) {\n this.diagram.diagramRenderer.drawLine(svg, this.line.pop());\n }\n };\n /**\n * To create Horizontal spacing lines\n */\n Snapping.prototype.createHSpacingLines = function (diagram, g, shape, objectsAtLeft, objectsAtRight, horizontalSnap, verticalSnap, ended, delta, snapObjDistance) {\n var top = 0;\n this.sortByDistance(objectsAtLeft, 'distance', true);\n this.sortByDistance(objectsAtRight, 'distance', true);\n var equallySpaced = [];\n var bounds = getBounds(shape.wrapper);\n var nearestleft;\n var nearestright;\n var targetBounds;\n var equaldistance;\n if (objectsAtLeft.length > 0) {\n equallySpaced[equallySpaced.length] = objectsAtLeft[0];\n nearestleft = ((objectsAtLeft[0].obj).bounds);\n top = nearestleft.y;\n if (objectsAtLeft.length > 1) {\n targetBounds = ((objectsAtLeft[1].obj).bounds);\n equaldistance = nearestleft.x - targetBounds.x - targetBounds.width;\n if (Math.abs(equaldistance - objectsAtLeft[0].distance) <= snapObjDistance) {\n top = this.findEquallySpacedNodesAtLeft(objectsAtLeft, equaldistance, top, equallySpaced);\n }\n else {\n equaldistance = objectsAtLeft[0].distance;\n }\n }\n else {\n equaldistance = objectsAtLeft[0].distance;\n }\n }\n this.sortByDistance(equallySpaced, 'distance');\n equallySpaced[equallySpaced.length] = { obj: shape, distance: 0 };\n top = bounds.y < top || !top ? bounds.y : top;\n if (objectsAtRight.length > 0) {\n var dist = void 0;\n nearestright = ((objectsAtRight[0].obj).bounds);\n top = nearestright.y < top ? nearestright.y : top;\n if (objectsAtRight.length > 1) {\n targetBounds = ((objectsAtRight[1].obj).bounds);\n dist = targetBounds.x - nearestright.x - nearestright.width;\n }\n if (objectsAtLeft.length > 0) {\n if (Math.abs(objectsAtRight[0].distance - objectsAtLeft[0].distance) <= snapObjDistance) {\n var adjustablevalue = Math.abs(objectsAtRight[0].distance - objectsAtLeft[0].distance) / 2;\n (objectsAtRight[0].distance < objectsAtLeft[0].distance) ?\n equaldistance -= adjustablevalue : equaldistance += adjustablevalue;\n equallySpaced[equallySpaced.length] = objectsAtRight[0];\n }\n else if (objectsAtLeft.length === 1) {\n nearestleft = undefined;\n equallySpaced.splice(0, 1);\n equallySpaced[equallySpaced.length] = objectsAtRight[0];\n equaldistance = dist;\n }\n }\n else {\n equaldistance = dist;\n equallySpaced[equallySpaced.length] = objectsAtRight[0];\n }\n if (objectsAtRight.length > 1 && nearestright.x + nearestright.width < targetBounds.x) {\n top = this.findEquallySpacedNodesAtRight(objectsAtRight, dist, top, equallySpaced, snapObjDistance);\n }\n }\n if (equallySpaced.length > 2) {\n this.addHSpacingLines(diagram, g, equallySpaced, ended, top);\n var deltaHorizontal = 0;\n if (ended) {\n deltaHorizontal = delta.x;\n }\n if (nearestleft) {\n horizontalSnap.offset = equaldistance - Math.abs(bounds.x + deltaHorizontal - nearestleft.x - nearestleft.width)\n + deltaHorizontal;\n }\n else if (nearestright) {\n horizontalSnap.offset = Math.abs(bounds.x + bounds.width + deltaHorizontal - nearestright.x)\n - equaldistance + deltaHorizontal;\n }\n horizontalSnap.snapped = true;\n }\n };\n /**\n * To create vertical spacing lines\n */\n Snapping.prototype.createVSpacingLines = function (diagram, g, shape, objectsAtTop, objectsAtBottom, horizontalSnap, verticalSnap, ended, delta, snapObjDistance) {\n var right = 0;\n this.sortByDistance(objectsAtTop, 'distance', true);\n this.sortByDistance(objectsAtBottom, 'distance', true);\n var equallySpaced = [];\n var bounds = getBounds(shape.wrapper);\n var nearesttop;\n var nearestbottom;\n var targetBounds;\n var equaldistance;\n if (objectsAtTop.length > 0) {\n equallySpaced[equallySpaced.length] = objectsAtTop[0];\n nearesttop = ((objectsAtTop[0].obj).bounds);\n right = nearesttop.x + nearesttop.width;\n if (objectsAtTop.length > 1) {\n targetBounds = ((objectsAtTop[1].obj).bounds);\n equaldistance = nearesttop.y - targetBounds.y - targetBounds.height;\n if (Math.abs(equaldistance - objectsAtTop[0].distance) <= snapObjDistance) {\n right = this.findEquallySpacedNodesAtTop(objectsAtTop, equaldistance, right, equallySpaced);\n }\n else {\n equaldistance = objectsAtTop[0].distance;\n }\n }\n else {\n equaldistance = objectsAtTop[0].distance;\n }\n }\n this.sortByDistance(equallySpaced, 'distance');\n equallySpaced[equallySpaced.length] = { obj: shape, distance: 0 };\n right = bounds.x + bounds.width > right || !right ? bounds.x + bounds.width : right;\n var dist;\n if (objectsAtBottom.length > 0) {\n nearestbottom = ((objectsAtBottom[0].obj).bounds);\n right = nearestbottom.x + nearestbottom.width > right ? nearestbottom.x + nearestbottom.width : right;\n if (objectsAtBottom.length > 1) {\n targetBounds = ((objectsAtBottom[1].obj).bounds);\n dist = targetBounds.y - nearestbottom.y - nearestbottom.height;\n }\n if (objectsAtTop.length > 0) {\n if (Math.abs(objectsAtBottom[0].distance - objectsAtTop[0].distance) <= snapObjDistance) {\n var adjustablevalue = Math.abs(objectsAtBottom[0].distance - objectsAtTop[0].distance) / 2;\n (objectsAtBottom[0].distance < objectsAtTop[0].distance) ?\n equaldistance -= adjustablevalue : equaldistance += adjustablevalue;\n equallySpaced[equallySpaced.length] = objectsAtBottom[0];\n }\n else if (objectsAtTop.length === 1) {\n nearesttop = undefined;\n equallySpaced.splice(0, 1);\n equallySpaced[equallySpaced.length] = objectsAtBottom[0];\n equaldistance = dist;\n }\n }\n else {\n equaldistance = dist;\n equallySpaced[equallySpaced.length] = objectsAtBottom[0];\n }\n if (objectsAtBottom.length > 1 && targetBounds.y > nearestbottom.y + nearestbottom.height) {\n right = this.findEquallySpacedNodesAtBottom(objectsAtBottom, dist, right, equallySpaced, snapObjDistance);\n }\n }\n if (equallySpaced.length > 2) {\n this.addVSpacingLines(diagram, g, equallySpaced, ended, right);\n var deltaVertical = 0;\n if (ended) {\n deltaVertical = delta.y;\n }\n if (nearesttop) {\n verticalSnap.offset = equaldistance - Math.abs(bounds.y + deltaVertical - nearesttop.y - nearesttop.height) + deltaVertical;\n }\n else if (nearestbottom) {\n verticalSnap.offset = Math.abs(bounds.y + bounds.height + deltaVertical - nearestbottom.y) - equaldistance + deltaVertical;\n }\n verticalSnap.snapped = true;\n }\n };\n /**\n * Add the Horizontal spacing lines\n */\n Snapping.prototype.addHSpacingLines = function (diagram, g, equallySpaced, ended, top) {\n var i;\n var start;\n var end;\n if (!ended) {\n for (i = 0; i < equallySpaced.length - 1; i++) {\n var crnt = equallySpaced[i].obj instanceof Selector ?\n getBounds((equallySpaced[i].obj).wrapper) : ((equallySpaced[i].obj).bounds);\n var next = equallySpaced[i + 1].obj instanceof Selector ?\n getBounds((equallySpaced[i + 1].obj).wrapper) : ((equallySpaced[i + 1].obj).bounds);\n start = { x: crnt.x + crnt.width, y: top - 15 };\n end = { x: next.x, y: top - 15 };\n this.renderSpacingLines(start, end, g, this.getAdornerLayerSvg(), diagram.scroller.transform);\n }\n }\n };\n /**\n * Add the vertical spacing lines\n */\n Snapping.prototype.addVSpacingLines = function (diagram, g, equallySpacedObjects, ended, right) {\n var start;\n var end;\n if (!ended) {\n for (var i = 0; i < equallySpacedObjects.length - 1; i++) {\n var crnt = equallySpacedObjects[i].obj instanceof Selector ?\n getBounds((equallySpacedObjects[i].obj).wrapper) : ((equallySpacedObjects[i].obj).bounds);\n var next = equallySpacedObjects[i + 1].obj instanceof Selector ?\n getBounds((equallySpacedObjects[i + 1].obj).wrapper) :\n ((equallySpacedObjects[i + 1].obj).bounds);\n start = { x: right + 15, y: crnt.y + crnt.height };\n end = { x: right + 15, y: next.y };\n this.renderSpacingLines(start, end, g, this.getAdornerLayerSvg(), diagram.scroller.transform);\n }\n }\n };\n /**\n * To add same width lines\n */\n Snapping.prototype.addSameWidthLines = function (diagram, snapLine, sameWidths, horizontalSnap, ended, shape) {\n this.sortByDistance(sameWidths, 'offset');\n var bounds = getBounds(shape.wrapper);\n var target = sameWidths[0];\n var startPt;\n var endPt;\n var targetBounds = (target.source).bounds;\n var sameSizes = [];\n sameSizes.push(sameWidths[0]);\n var i;\n var crntbounds;\n for (i = 1; i < sameWidths.length; i++) {\n crntbounds = (sameWidths[i].source).bounds;\n if (crntbounds.width === targetBounds.width) {\n sameSizes.push(sameWidths[i]);\n }\n }\n if (!ended) {\n startPt = { x: bounds.x + target.offset, y: bounds.y - 15 };\n endPt = { x: bounds.x + bounds.width + target.offset, y: bounds.y - 15 };\n this.renderSpacingLines(startPt, endPt, snapLine, this.getAdornerLayerSvg(), diagram.scroller.transform);\n for (i = 0; i < sameSizes.length; i++) {\n bounds = (sameSizes[i].source).bounds;\n startPt = { x: bounds.x, y: bounds.y - 15 };\n endPt = { x: bounds.x + bounds.width, y: bounds.y - 15 };\n this.renderSpacingLines(startPt, endPt, snapLine, this.getAdornerLayerSvg(), diagram.scroller.transform);\n }\n }\n horizontalSnap.offset = target.offset;\n horizontalSnap.snapped = true;\n };\n /**\n * To add same height lines\n */\n Snapping.prototype.addSameHeightLines = function (diagram, snapLine, sameHeights, verticalSnap, ended, shape) {\n this.sortByDistance(sameHeights, 'offset');\n var bounds = getBounds(shape.wrapper);\n var target = sameHeights[0];\n var targetBounds = (target.source).bounds;\n var start;\n var end;\n var sameSizes = [];\n sameSizes.push(sameHeights[0]);\n var i;\n var crntbounds;\n for (i = 0; i < sameHeights.length; i++) {\n crntbounds = (sameHeights[i].source).bounds;\n if (crntbounds.height === targetBounds.height) {\n sameSizes.push(sameHeights[i]);\n }\n }\n if (!ended) {\n start = { x: bounds.x + bounds.width + 15, y: bounds.y + target.offset };\n end = { x: bounds.x + bounds.width + 15, y: bounds.y + target.offset + bounds.height };\n this.renderSpacingLines(start, end, snapLine, this.getAdornerLayerSvg(), diagram.scroller.transform);\n for (i = 0; i < sameSizes.length; i++) {\n bounds = (sameSizes[i].source).bounds;\n start = { x: bounds.x + bounds.width + 15, y: bounds.y };\n end = { x: bounds.x + bounds.width + 15, y: bounds.y + bounds.height };\n this.renderSpacingLines(start, end, snapLine, this.getAdornerLayerSvg(), diagram.scroller.transform);\n }\n }\n verticalSnap.offset = target.offset;\n verticalSnap.snapped = true;\n };\n /**\n * Render spacing lines\n */\n Snapping.prototype.renderSpacingLines = function (start, end, snapLine, svg, transform) {\n var d;\n var d1;\n var line1;\n var element = new PathElement();\n var options = {};\n start = {\n x: (start.x + transform.tx) * transform.scale,\n y: (start.y + transform.ty) * transform.scale\n };\n end = {\n x: (end.x + transform.tx) * transform.scale,\n y: (end.y + transform.ty) * transform.scale\n };\n if (start.x === end.x) {\n d = 'M' + (start.x - 5) + ' ' + (start.y + 5) + 'L' + start.x + ' ' + start.y +\n 'L' + (start.x + 5) + ' ' + (start.y + 5) + 'z' + 'M' + (end.x - 5) + ' ' +\n (end.y - 5) + ' L' + end.x + ' ' + end.y + ' L' +\n (end.x + 5) + ' ' + (end.y - 5) + 'z';\n line1 = {\n startPoint: { x: start.x - 8, y: start.y - 1 },\n endPoint: { x: start.x + 8, y: start.y - 1 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId()\n };\n element.data = d;\n options.data = element.data;\n options.angle = 0;\n options.pivotX = 0;\n options.pivotY = 0;\n options.x = 0;\n options.y = 0;\n options.height = 0;\n options.width = 1;\n options.id = randomId();\n this.diagram.diagramRenderer.drawPath(snapLine, options);\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n line1 = {\n startPoint: { x: end.x - 8, y: end.y + 1 },\n endPoint: { x: end.x + 8, y: end.y + 1 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: this.getAdornerLayerSvg().id + 'spacing'\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n }\n else {\n d = 'M' + (start.x + 5) + ' ' + (start.y + 5) + ' L' + start.x + ' ' + start.y +\n ' L' + (start.x + 5) + ' ' + (start.y - 5) + 'z' + 'M' + (end.x - 5) + ' ' +\n (end.y - 5) + ' L' + end.x + ' ' + end.y +\n ' L' + (end.x - 5) + ' ' + (end.y + 5) + 'z';\n element.data = d;\n options.data = d;\n options.angle = 0;\n options.pivotX = 0;\n options.pivotY = 0;\n options.x = 0;\n options.y = 0;\n options.height = 0;\n options.width = 1;\n options.id = randomId();\n this.diagram.diagramRenderer.drawPath(snapLine, options);\n line1 = {\n visible: true, opacity: 1, id: randomId(),\n startPoint: { x: start.x - 1, y: start.y - 8 },\n endPoint: { x: start.x - 1, y: start.y + 8 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '0', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n line1 = {\n width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId(),\n startPoint: { x: end.x + 1, y: end.y - 8 },\n endPoint: { x: end.x + 1, y: end.y + 8 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '0'\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n }\n line1 = {\n startPoint: { x: start.x, y: start.y },\n endPoint: { x: end.x, y: end.y }, stroke: '#07EDE1', strokeWidth: 1, fill: '#07EDE1',\n dashArray: '0', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId()\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n };\n /**\n * To Create Snap object with position, initial bounds, and final bounds\n * @private\n */\n Snapping.prototype.createSnapObject = function (targetBounds, bounds, snap) {\n var snapObject;\n switch (snap) {\n case 'left':\n snapObject = {\n start: { x: (targetBounds.x), y: Math.min(targetBounds.y, bounds.y) },\n end: { x: (targetBounds.x), y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height) },\n offsetX: targetBounds.x - bounds.x, offsetY: 0, type: 'sideAlign'\n };\n break;\n case 'right':\n snapObject = {\n type: 'sideAlign',\n start: { x: (targetBounds.x + targetBounds.width), y: Math.min(targetBounds.y, bounds.y) },\n offsetX: targetBounds.x + targetBounds.width - bounds.x - bounds.width,\n offsetY: 0,\n end: {\n x: (targetBounds.x + targetBounds.width),\n y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height)\n },\n };\n break;\n case 'top':\n snapObject = {\n offsetY: targetBounds.y - bounds.y, offsetX: 0, type: 'sideAlign',\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y },\n end: { x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)), y: targetBounds.y },\n };\n break;\n case 'bottom':\n snapObject = {\n type: 'sideAlign', offsetY: targetBounds.y + targetBounds.height - bounds.y - bounds.height, offsetX: 0,\n end: {\n x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)),\n y: targetBounds.y + targetBounds.height\n },\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y + targetBounds.height },\n };\n break;\n case 'topBottom':\n snapObject = {\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y + targetBounds.height },\n end: {\n x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)),\n y: targetBounds.y + targetBounds.height\n },\n offsetY: targetBounds.y + targetBounds.height - bounds.y, offsetX: 0, type: 'sideAlign'\n };\n break;\n case 'bottomTop':\n snapObject = {\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y },\n end: { x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)), y: targetBounds.y },\n offsetY: targetBounds.y - bounds.y - bounds.height, offsetX: 0, type: 'sideAlign'\n };\n break;\n case 'leftRight':\n snapObject = {\n start: { x: (targetBounds.x + targetBounds.width), y: Math.min(targetBounds.y, bounds.y) },\n end: {\n x: (targetBounds.x + targetBounds.width),\n y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height)\n },\n offsetX: targetBounds.x + targetBounds.width - bounds.x, offsetY: 0, type: 'sideAlign'\n };\n break;\n case 'rightLeft':\n snapObject = {\n start: { x: (targetBounds.x), y: (Math.min(targetBounds.y, bounds.y)) },\n end: { x: (targetBounds.x), y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height) },\n offsetX: targetBounds.x - bounds.x - bounds.width, offsetY: 0, type: 'sideAlign'\n };\n break;\n case 'centerX':\n snapObject = {\n start: { x: (targetBounds.x + targetBounds.width / 2), y: (Math.min(targetBounds.y, bounds.y)) },\n end: {\n x: (targetBounds.x + targetBounds.width / 2),\n y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height)\n },\n offsetX: targetBounds.x + targetBounds.width / 2 - (bounds.x + bounds.width / 2), offsetY: 0, type: 'centerAlign'\n };\n break;\n case 'centerY':\n snapObject = {\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y + targetBounds.height / 2 },\n end: {\n x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)),\n y: targetBounds.y + targetBounds.height / 2\n },\n offsetY: targetBounds.y + targetBounds.height / 2 - (bounds.y + bounds.height / 2), offsetX: 0, type: 'centerAlign'\n };\n break;\n }\n return snapObject;\n };\n /**\n * Calculate the snap angle\n * @private\n */\n Snapping.prototype.snapAngle = function (diagram, angle) {\n var snapSettings = this.diagram.snapSettings;\n var snapAngle = snapSettings.snapAngle;\n var width = angle % (snapAngle || 0);\n if (width >= (snapAngle / 2)) {\n return angle + snapAngle - width;\n }\n else {\n return angle - width;\n }\n };\n /**\n * Check whether the node to be snapped or not.\n */\n Snapping.prototype.canConsider = function (nameTable, selectedObject, target) {\n var consider = false;\n if (this.diagram.selectedItems.nodes.length && this.diagram.selectedItems.nodes[0].id === target.id) {\n return false;\n }\n else {\n return true;\n }\n };\n /**\n * Find the total number of nodes in diagram using SpatialSearch\n */\n Snapping.prototype.findNodes = function (spatialSearch, node, child, viewPort, nodesInView) {\n var nodes = [];\n var nd;\n var bounds;\n var quads = spatialSearch.findQuads(nodesInView ? viewPort : child);\n for (var i = 0; i < quads.length; i++) {\n var quad = quads[i];\n if (quad.objects.length > 0) {\n for (var j = 0; j < quad.objects.length; j++) {\n nd = quad.objects[j];\n if (!(this.diagram.nameTable[nd.id] instanceof Connector) && nd.visible) {\n bounds = getBounds(nd);\n if (nodes.indexOf(nd) === -1 && this.intersectsRect(child, bounds)) {\n nodes.push(nd);\n }\n if (nodesInView && nodesInView.indexOf(nd) && this.intersectsRect(viewPort, bounds)) {\n nodesInView.push(nd);\n }\n }\n }\n }\n }\n return nodes;\n };\n Snapping.prototype.intersectsRect = function (child, bounds) {\n return ((((bounds.x < (child.x + child.width)) && (child.x < (bounds.x + bounds.width)))\n && (bounds.y < (child.y + child.height))) && (child.y < (bounds.y + bounds.height)));\n };\n Snapping.prototype.getAdornerLayerSvg = function () {\n return this.diagram.diagramRenderer.adornerSvgLayer;\n };\n /**\n * To remove grid lines on mouse move and mouse up\n * @private\n */\n Snapping.prototype.removeGuidelines = function (diagram) {\n var selectionRect = this.getAdornerLayerSvg().getElementById('_SnappingLines');\n var line = this.getAdornerLayerSvg().getElementById('pivotLine');\n if (selectionRect) {\n selectionRect.parentNode.removeChild(selectionRect);\n }\n if (line) {\n line.parentNode.removeChild(line);\n }\n };\n /**\n * Sort the objects by its distance\n */\n Snapping.prototype.sortByDistance = function (obj, value, ascending) {\n var i;\n var j;\n var temp;\n if (ascending) {\n for (i = 0; i < obj.length; i++) {\n for (j = i + 1; j < obj.length; j++) {\n if (obj[i][value] > obj[j][value]) {\n temp = obj[i];\n obj[i] = obj[j];\n obj[j] = temp;\n }\n }\n }\n }\n else {\n for (i = 0; i < obj.length; i++) {\n for (j = i + 1; j < obj.length; j++) {\n if (obj[i][value] < obj[j][value]) {\n temp = obj[i];\n obj[i] = obj[j];\n obj[j] = temp;\n }\n }\n }\n }\n };\n /**\n * To find nodes that are equally placed at left of the selected node\n */\n Snapping.prototype.findEquallySpacedNodesAtLeft = function (objectsAtLeft, equalDistance, top, equallySpaced) {\n var prevBounds;\n var targetBounds;\n var dist;\n var i;\n for (i = 1; i < objectsAtLeft.length; i++) {\n prevBounds = ((objectsAtLeft[i - 1].obj).bounds);\n targetBounds = ((objectsAtLeft[i].obj).bounds);\n dist = prevBounds.x - targetBounds.x - targetBounds.width;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtLeft[i];\n if (targetBounds.y < top) {\n top = targetBounds.y;\n }\n }\n else {\n break;\n }\n }\n return top;\n };\n /**\n * To find nodes that are equally placed at right of the selected node\n */\n Snapping.prototype.findEquallySpacedNodesAtRight = function (objectsAtRight, equalDistance, top, equallySpaced, snapObjDistance) {\n var actualDistance = objectsAtRight[0].distance;\n var target;\n var targetBounds;\n var prevBounds;\n var dist;\n if (Math.abs(equalDistance - actualDistance) <= snapObjDistance) {\n for (var i = 0; i < objectsAtRight.length - 1; i++) {\n target = objectsAtRight[i].obj;\n targetBounds = ((objectsAtRight[i + 1].obj).bounds);\n prevBounds = (target.bounds);\n dist = targetBounds.x - prevBounds.x - prevBounds.width;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtRight[i + 1];\n if (prevBounds.y < top) {\n top = prevBounds.y;\n }\n }\n else {\n break;\n }\n }\n }\n return top;\n };\n Snapping.prototype.findEquallySpacedNodesAtTop = function (objectsAtTop, equalDistance, right, equallySpaced) {\n var prevBounds;\n var targetBounds;\n var dist;\n for (var i = 1; i < objectsAtTop.length; i++) {\n prevBounds = ((objectsAtTop[i - 1].obj).bounds);\n targetBounds = ((objectsAtTop[i].obj).bounds);\n dist = prevBounds.y - targetBounds.y - targetBounds.height;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtTop[i];\n if (targetBounds.x + targetBounds.width > right) {\n right = targetBounds.x + targetBounds.width;\n }\n }\n else {\n break;\n }\n }\n return right;\n };\n /**\n * To find nodes that are equally placed at bottom of the selected node\n */\n Snapping.prototype.findEquallySpacedNodesAtBottom = function (objectsAtBottom, equalDistance, right, equallySpaced, snapObjDistance) {\n var actualDistance = objectsAtBottom[0].distance;\n var target;\n var targetBounds;\n var prevBounds;\n var dist;\n if (Math.abs(equalDistance - actualDistance) <= snapObjDistance) {\n for (var i = 0; i < objectsAtBottom.length - 1; i++) {\n target = objectsAtBottom[i].obj;\n targetBounds = ((objectsAtBottom[i + 1].obj).bounds);\n prevBounds = (target.bounds);\n dist = targetBounds.y - prevBounds.y - prevBounds.height;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtBottom[i + 1];\n if (prevBounds.x + prevBounds.width > right) {\n right = prevBounds.x + prevBounds.width;\n }\n }\n else {\n break;\n }\n }\n }\n return right;\n };\n /**\n * To get Adoner layer to draw snapLine\n * @private\n */\n Snapping.prototype.getLayer = function () {\n var snapLine;\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) {\n snapLine = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n snapLine.setAttribute('id', '_SnappingLines');\n snapLine.setAttribute('shapeRendering', 'crispEdges');\n this.getAdornerLayerSvg().appendChild(snapLine);\n }\n return snapLine;\n };\n /**\n * Constructor for the snapping module\n * @private\n */\n // constructor() {\n // //constructs the snapping module\n // }\n /**\n * To destroy the snapping module\n * @return {void}\n * @private\n */\n Snapping.prototype.destroy = function () {\n /**\n * Destroys the snapping module\n */\n };\n /**\n * Get module name.\n */\n Snapping.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Snapping';\n };\n return Snapping;\n}());\nexport { Snapping };\n","import { Node } from './node';\nimport { DiagramAction } from '../enum/enum';\nimport { removeItem, getObjectType } from '../utility/diagram-util';\nimport { cloneObject } from '../utility/base-util';\nimport { findAnnotation, findPort } from '../utility/diagram-util';\n/**\n * Undo redo function used for revert and restore the changes\n */\nvar UndoRedo = /** @class */ (function () {\n /**\n * Constructor for the undo redo module\n * @private\n */\n function UndoRedo() {\n this.groupUndo = false;\n this.childTable = [];\n //constructs the undo redo module\n }\n /** @private */\n UndoRedo.prototype.initHistory = function (diagram) {\n diagram.historyList = {\n canRedo: false, canUndo: false, currentEntry: null,\n push: diagram.addHistoryEntry.bind(diagram), undo: Function, redo: Function,\n startGroupAction: diagram.startGroupAction.bind(diagram), endGroupAction: diagram.endGroupAction.bind(diagram),\n canLog: null, undoStack: [], redoStack: []\n };\n };\n /** @private */\n UndoRedo.prototype.addHistoryEntry = function (entry, diagram) {\n var entryObject = null;\n var nextEntry = null;\n if (diagram.historyList.canLog) {\n var hEntry = diagram.historyList.canLog(entry);\n if (hEntry.cancel === true) {\n return;\n }\n }\n if (diagram.historyList && diagram.historyList.canUndo && diagram.historyList.currentEntry) {\n entryObject = diagram.historyList.currentEntry;\n if (entryObject.next) {\n if (entryObject.previous) {\n nextEntry = entryObject.next;\n nextEntry.previous = null;\n entryObject.next = entry;\n entry.previous = entryObject;\n }\n }\n else {\n entryObject.next = entry;\n entry.previous = entryObject;\n }\n }\n diagram.historyList.currentEntry = entry;\n this.getHistoryList(diagram);\n diagram.historyList.canUndo = true;\n diagram.historyList.canRedo = false;\n };\n /** @private */\n UndoRedo.prototype.undo = function (diagram) {\n var entry = this.getUndoEntry(diagram);\n var endGroupActionCount = 0;\n if (entry) {\n if (entry.category === 'Internal') {\n if (entry.type === 'EndGroup') {\n endGroupActionCount++;\n this.groupUndo = true;\n }\n else {\n this.undoEntry(entry, diagram);\n }\n if (this.groupUndo) {\n this.undoGroupAction(entry, diagram, endGroupActionCount);\n this.groupUndo = false;\n }\n }\n else {\n diagram.historyList.undo(entry);\n }\n }\n };\n UndoRedo.prototype.getHistoryList = function (diagram) {\n var undoStack = [];\n var redoStack = [];\n var currEntry = diagram.historyList.currentEntry;\n var undoObj;\n var redoObj;\n currEntry = diagram.historyList.currentEntry;\n if (diagram.historyList.canUndo || diagram.historyList.undoStack.length === 0) {\n this.getHistroyObject(undoStack, currEntry);\n }\n else {\n this.getHistroyObject(redoStack, currEntry);\n }\n while (currEntry && currEntry.previous) {\n undoObj = currEntry.previous;\n this.getHistroyObject(undoStack, undoObj);\n currEntry = currEntry.previous;\n }\n currEntry = diagram.historyList.currentEntry;\n while (currEntry && currEntry.next) {\n redoObj = currEntry.next;\n this.getHistroyObject(redoStack, redoObj);\n currEntry = currEntry.next;\n }\n diagram.historyList.undoStack = undoStack;\n diagram.historyList.redoStack = redoStack;\n };\n UndoRedo.prototype.getHistroyObject = function (list, obj) {\n if (obj && obj.type !== 'StartGroup' && obj.type !== 'EndGroup') {\n list.push({\n redoObject: obj.redoObject ? obj.redoObject : null,\n undoObject: obj.undoObject ? obj.undoObject : null,\n type: obj.type ? obj.type : null,\n category: obj.category ? obj.category : null\n });\n }\n };\n UndoRedo.prototype.undoGroupAction = function (entry, diagram, endGroupActionCount) {\n while (endGroupActionCount !== 0) {\n this.undoEntry(entry, diagram);\n entry = this.getUndoEntry(diagram);\n if (entry.type === 'StartGroup') {\n endGroupActionCount--;\n }\n else if (entry.type === 'EndGroup') {\n endGroupActionCount++;\n }\n }\n endGroupActionCount = 0;\n };\n UndoRedo.prototype.undoEntry = function (entry, diagram) {\n var obj;\n if (entry.type !== 'PropertyChanged' && entry.type !== 'CollectionChanged' && entry.type !== 'LabelCollectionChanged') {\n obj = (entry.undoObject);\n }\n if (entry.type !== 'StartGroup' && entry.type !== 'EndGroup') {\n if (diagram.historyList.undoStack.length > 0) {\n var addObject = diagram.historyList.undoStack.splice(0, 1);\n diagram.historyList.redoStack.splice(0, 0, addObject[0]);\n }\n }\n diagram.protectPropertyChange(true);\n diagram.diagramActions |= DiagramAction.UndoRedo;\n switch (entry.type) {\n case 'PositionChanged':\n case 'Align':\n case 'Distribute':\n this.recordPositionChanged(obj, diagram);\n break;\n case 'SizeChanged':\n case 'Sizing':\n this.recordSizeChanged(obj, diagram, entry);\n break;\n case 'RotationChanged':\n this.recordRotationChanged(obj, diagram, entry);\n break;\n case 'ConnectionChanged':\n this.recordConnectionChanged(obj, diagram);\n break;\n case 'PropertyChanged':\n this.recordPropertyChanged(entry, diagram, false);\n break;\n case 'CollectionChanged':\n entry.isUndo = true;\n this.recordCollectionChanged(entry, diagram);\n entry.isUndo = false;\n break;\n case 'LabelCollectionChanged':\n entry.isUndo = true;\n this.recordLabelCollectionChanged(entry, diagram);\n entry.isUndo = false;\n break;\n case 'PortCollectionChanged':\n entry.isUndo = true;\n this.recordPortCollectionChanged(entry, diagram);\n entry.isUndo = false;\n break;\n case 'Group':\n this.unGroup(entry, diagram);\n break;\n case 'UnGroup':\n this.group(entry, diagram);\n break;\n case 'SegmentChanged':\n this.recordSegmentChanged(obj, diagram);\n break;\n case 'PortPositionChanged':\n this.recordPortChanged(entry, diagram, false);\n break;\n case 'AnnotationPropertyChanged':\n this.recordAnnotationChanged(entry, diagram, false);\n break;\n }\n diagram.diagramActions &= ~DiagramAction.UndoRedo;\n diagram.protectPropertyChange(false);\n diagram.historyChangeTrigger(entry);\n };\n UndoRedo.prototype.group = function (historyEntry, diagram) {\n diagram.add(historyEntry.undoObject);\n };\n UndoRedo.prototype.unGroup = function (entry, diagram) {\n var i = 0;\n entry.redoObject = cloneObject(entry.undoObject);\n var node = entry.undoObject;\n diagram.commandHandler.unGroup(node);\n };\n UndoRedo.prototype.ignoreProperty = function (key) {\n if (key === 'zIndex' || key === 'wrapper') {\n return true;\n }\n return false;\n };\n UndoRedo.prototype.getProperty = function (collection, property) {\n for (var _i = 0, _a = Object.keys(property); _i < _a.length; _i++) {\n var key = _a[_i];\n if (!this.ignoreProperty(key)) {\n if (property[key] instanceof Object) {\n this.getProperty(collection[key], property[key]);\n }\n else {\n collection[key] = property[key];\n }\n }\n }\n };\n UndoRedo.prototype.recordAnnotationChanged = function (entry, diagram, isRedo) {\n var entryObject = ((isRedo) ? entry.redoObject : entry.undoObject);\n var oldElement = findAnnotation(entryObject, entry.changeObjectId);\n var undoChanges = diagram.commandHandler.getAnnotationChanges(diagram.nameTable[entryObject.id], oldElement);\n var currentObject = diagram.nameTable[entryObject.id];\n var currentElement = findAnnotation(currentObject, entry.changeObjectId);\n currentElement.offset = oldElement.offset;\n currentElement.margin = oldElement.margin;\n currentElement.width = oldElement.width;\n currentElement.height = oldElement.height;\n currentElement.rotateAngle = oldElement.rotateAngle;\n currentElement.margin = oldElement.margin;\n if (currentObject instanceof Node) {\n diagram.nodePropertyChange(currentObject, {}, undoChanges);\n }\n else {\n diagram.connectorPropertyChange(currentObject, {}, undoChanges);\n }\n };\n UndoRedo.prototype.recordPortChanged = function (entry, diagram, isRedo) {\n var entryObject = ((isRedo) ? entry.redoObject.nodes[0] :\n entry.undoObject.nodes[0]);\n var oldElement = findPort(entryObject, entry.changeObjectId);\n var undoChanges = diagram.commandHandler.getPortChanges(diagram.nameTable[entryObject.id], oldElement);\n var currentObject = diagram.nameTable[entryObject.id];\n var currentElement = findPort(currentObject, entry.changeObjectId);\n currentElement.offset = oldElement.offset;\n diagram.nodePropertyChange(currentObject, {}, undoChanges);\n };\n UndoRedo.prototype.recordPropertyChanged = function (entry, diagram, isRedo) {\n var redoObject = entry.redoObject;\n var undoObject = entry.undoObject;\n this.getProperty(diagram, (isRedo ? redoObject : undoObject));\n isRedo ? diagram.onPropertyChanged(redoObject, undoObject) : diagram.onPropertyChanged(undoObject, redoObject);\n diagram.diagramActions = diagram.diagramActions | DiagramAction.UndoRedo;\n };\n UndoRedo.prototype.recordSegmentChanged = function (obj, diagram) {\n var i = 0;\n var node;\n var connector;\n if (obj.connectors && obj.connectors.length > 0) {\n for (i = 0; i < obj.connectors.length; i++) {\n connector = obj.connectors[i];\n this.segmentChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.segmentChanged = function (connector, diagram) {\n var conn = diagram.nameTable[connector.id];\n conn.segments = connector.segments;\n diagram.commandHandler.updateEndPoint(conn);\n };\n UndoRedo.prototype.recordPositionChanged = function (obj, diagram) {\n var i = 0;\n var node;\n var connector;\n if (obj.nodes && obj.nodes.length > 0) {\n for (i = 0; i < obj.nodes.length; i++) {\n node = obj.nodes[i];\n this.positionChanged(node, diagram);\n }\n }\n if (obj.connectors && obj.connectors.length > 0) {\n for (i = 0; i < obj.connectors.length; i++) {\n connector = obj.connectors[i];\n this.connectionChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.positionChanged = function (obj, diagram, entry) {\n var node = diagram.nameTable[obj.id];\n if (obj.processId && !node.processId) {\n diagram.addProcess(obj, obj.processId);\n }\n if (!obj.processId && node.processId) {\n diagram.removeProcess(obj.id);\n }\n if (node.processId) {\n var tx = obj.margin.left - node.margin.left;\n var ty = obj.margin.top - node.margin.top;\n diagram.drag(node, tx, ty);\n }\n else {\n var tx = obj.offsetX - node.wrapper.offsetX;\n var ty = obj.offsetY - node.wrapper.offsetY;\n diagram.drag(node, tx, ty);\n }\n if (diagram.bpmnModule) {\n diagram.bpmnModule.updateDocks(node, diagram);\n }\n };\n UndoRedo.prototype.recordSizeChanged = function (obj, diagram, entry) {\n var i = 0;\n var connector;\n var node;\n if (obj && obj.nodes && obj.nodes.length > 0) {\n for (i = 0; i < obj.nodes.length; i++) {\n node = obj.nodes[i];\n if (node.children) {\n var elements = [];\n var nodes = diagram.commandHandler.getAllDescendants(node, elements);\n for (var i_1 = 0; i_1 < nodes.length; i_1++) {\n var tempNode = entry.childTable[nodes[i_1].id];\n if ((getObjectType(tempNode) === Node)) {\n this.sizeChanged(tempNode, diagram, entry);\n this.positionChanged(tempNode, diagram, entry);\n }\n else {\n this.connectionChanged(tempNode, diagram, entry);\n }\n }\n }\n else {\n this.sizeChanged(node, diagram);\n this.positionChanged(node, diagram);\n }\n }\n }\n if (obj && obj.connectors && obj.connectors.length > 0) {\n var connectors = obj.connectors;\n for (i = 0; i < connectors.length; i++) {\n connector = connectors[i];\n this.connectionChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.sizeChanged = function (obj, diagram, entry) {\n var node = diagram.nameTable[obj.id];\n var scaleWidth = obj.wrapper.actualSize.width / node.wrapper.actualSize.width;\n var scaleHeight = obj.wrapper.actualSize.height / node.wrapper.actualSize.height;\n if (entry && entry.childTable) {\n entry.childTable[obj.id] = cloneObject(node);\n }\n diagram.scale(node, scaleWidth, scaleHeight, {\n x: obj.wrapper.offsetX / node.wrapper.offsetX,\n y: obj.wrapper.offsetY / node.wrapper.offsetY\n });\n };\n UndoRedo.prototype.recordRotationChanged = function (obj, diagram, entry) {\n var i = 0;\n var node;\n var connector;\n var selectorObj = diagram.selectedItems;\n selectorObj.rotateAngle = obj.rotateAngle;\n if (selectorObj && selectorObj.wrapper) {\n selectorObj.wrapper.rotateAngle = obj.rotateAngle;\n }\n if (obj && obj.nodes && obj.nodes.length > 0) {\n for (i = 0; i < obj.nodes.length; i++) {\n node = obj.nodes[i];\n this.rotationChanged(node, diagram);\n this.positionChanged(node, diagram);\n }\n }\n if (obj && obj.connectors && obj.connectors.length > 0) {\n for (i = 0; i < obj.connectors.length; i++) {\n connector = obj.connectors[i];\n this.connectionChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.rotationChanged = function (obj, diagram) {\n var node = diagram.nameTable[obj.id];\n diagram.rotate(node, obj.rotateAngle - node.rotateAngle);\n };\n UndoRedo.prototype.recordConnectionChanged = function (obj, diagram) {\n var connector = obj.connectors[0];\n this.connectionChanged(connector, diagram);\n };\n UndoRedo.prototype.connectionChanged = function (obj, diagram, entry) {\n var connector = diagram.nameTable[obj.id];\n var node;\n if (obj.sourcePortID !== connector.sourcePortID) {\n connector.sourcePortID = obj.sourcePortID;\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: obj.sourcePortID });\n }\n if (obj.targetPortID !== connector.targetPortID) {\n connector.targetPortID = obj.targetPortID;\n diagram.connectorPropertyChange(connector, {}, { targetPortID: obj.targetPortID });\n }\n if (obj.sourceID !== connector.sourceID) {\n if (obj.sourceID === '') {\n node = diagram.nameTable[connector.sourceID];\n removeItem(node.outEdges, obj.id);\n }\n else {\n node = diagram.nameTable[obj.sourceID];\n node.outEdges.push(obj.id);\n }\n connector.sourceID = obj.sourceID;\n diagram.connectorPropertyChange(connector, {}, { sourceID: obj.sourceID });\n }\n if (obj.targetID !== connector.targetID) {\n if (obj.targetID === '') {\n node = diagram.nameTable[connector.targetID];\n removeItem(node.inEdges, obj.id);\n }\n else {\n node = diagram.nameTable[obj.targetID];\n node.inEdges.push(obj.id);\n }\n connector.targetID = obj.targetID;\n diagram.connectorPropertyChange(connector, {}, { targetID: obj.targetID });\n }\n if (entry && entry.childTable) {\n entry.childTable[obj.id] = cloneObject(connector);\n }\n var sx = obj.sourcePoint.x - connector.sourcePoint.x;\n var sy = obj.sourcePoint.y - connector.sourcePoint.y;\n if (sx !== 0 || sy !== 0) {\n diagram.dragSourceEnd(connector, sx, sy);\n }\n var tx = obj.targetPoint.x - connector.targetPoint.x;\n var ty = obj.targetPoint.y - connector.targetPoint.y;\n if (tx !== 0 || ty !== 0) {\n diagram.dragTargetEnd(connector, tx, ty);\n }\n diagram.updateSelector();\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n };\n UndoRedo.prototype.recordCollectionChanged = function (entry, diagram) {\n var obj = entry.undoObject;\n if (entry && entry.changeType) {\n var changeType = void 0;\n if (entry.isUndo) {\n if (entry.changeType === 'Insert') {\n changeType = 'Remove';\n }\n else {\n changeType = 'Insert';\n }\n }\n else {\n changeType = entry.changeType;\n }\n if (changeType === 'Remove') {\n if (obj.nodeId) {\n diagram.remove(diagram.nameTable[obj.nodeId + '_textannotation_' + obj.id]);\n }\n else {\n diagram.remove(obj);\n diagram.clearSelectorLayer();\n }\n }\n else {\n diagram.clearSelectorLayer();\n if (obj.parentId) {\n var parentNode = diagram.nameTable[obj.parentId];\n if (parentNode) {\n diagram.addChild(parentNode, obj);\n }\n else {\n diagram.add(obj);\n }\n }\n else if (obj.nodeId) {\n diagram.addTextAnnotation(obj, diagram.nameTable[obj.nodeId]);\n }\n else {\n if (!diagram.nameTable[obj.id]) {\n diagram.add(obj);\n }\n }\n if (obj.processId && diagram.nameTable[obj.processId]) {\n diagram.addProcess(obj, obj.processId);\n }\n }\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n }\n };\n UndoRedo.prototype.recordLabelCollectionChanged = function (entry, diagram) {\n var label = entry.undoObject;\n var obj = entry.redoObject;\n var node = diagram.nameTable[obj.id];\n if (entry && entry.changeType) {\n var changeType = void 0;\n if (entry.isUndo) {\n changeType = (entry.changeType === 'Insert') ? 'Remove' : 'Insert';\n }\n else {\n changeType = entry.changeType;\n }\n if (changeType === 'Remove') {\n diagram.removeLabels(node, [label]);\n diagram.clearSelectorLayer();\n }\n else {\n diagram.clearSelectorLayer();\n diagram.addLabels(node, [label]);\n }\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n }\n };\n UndoRedo.prototype.recordPortCollectionChanged = function (entry, diagram) {\n var port = entry.undoObject;\n var obj = entry.redoObject;\n var node = diagram.nameTable[obj.id];\n if (entry && entry.changeType) {\n var changeType = void 0;\n if (entry.isUndo) {\n changeType = (entry.changeType === 'Insert') ? 'Remove' : 'Insert';\n }\n else {\n changeType = entry.changeType;\n }\n if (changeType === 'Remove') {\n diagram.removePorts(node, [port]);\n diagram.clearSelectorLayer();\n }\n else {\n diagram.clearSelectorLayer();\n diagram.addPorts(node, [port]);\n }\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n UndoRedo.prototype.redo = function (diagram) {\n var entry = this.getRedoEntry(diagram);\n var startGroupActionCount = 0;\n if (entry) {\n if (entry.category === 'Internal') {\n if (entry.type === 'StartGroup') {\n startGroupActionCount++;\n this.groupUndo = true;\n }\n else {\n this.redoEntry(entry, diagram);\n }\n if (this.groupUndo) {\n this.redoGroupAction(entry, diagram, startGroupActionCount);\n this.groupUndo = false;\n }\n }\n else {\n diagram.historyList.redo(entry);\n }\n }\n };\n UndoRedo.prototype.redoGroupAction = function (entry, diagram, startGroupActionCount) {\n while (startGroupActionCount !== 0) {\n this.redoEntry(entry, diagram);\n entry = this.getRedoEntry(diagram);\n if (entry.type === 'EndGroup') {\n startGroupActionCount--;\n }\n else if (entry.type === 'StartGroup') {\n startGroupActionCount++;\n }\n }\n startGroupActionCount = 0;\n };\n UndoRedo.prototype.redoEntry = function (historyEntry, diagram) {\n var redoObject;\n if (historyEntry.type !== 'PropertyChanged' && historyEntry.type !== 'CollectionChanged') {\n redoObject = (historyEntry.redoObject);\n }\n diagram.diagramActions |= DiagramAction.UndoRedo;\n if (historyEntry.type !== 'StartGroup' && historyEntry.type !== 'EndGroup') {\n if (diagram.historyList.redoStack.length > 0) {\n var addObject = diagram.historyList.redoStack.splice(0, 1);\n diagram.historyList.undoStack.splice(0, 0, addObject[0]);\n }\n }\n diagram.protectPropertyChange(true);\n switch (historyEntry.type) {\n case 'PositionChanged':\n case 'Align':\n case 'Distribute':\n this.recordPositionChanged(redoObject, diagram);\n break;\n case 'SizeChanged':\n case 'Sizing':\n this.recordSizeChanged(redoObject, diagram, historyEntry);\n break;\n case 'RotationChanged':\n this.recordRotationChanged(redoObject, diagram, historyEntry);\n break;\n case 'ConnectionChanged':\n this.recordConnectionChanged(redoObject, diagram);\n break;\n case 'PropertyChanged':\n this.recordPropertyChanged(historyEntry, diagram, true);\n break;\n case 'CollectionChanged':\n this.recordCollectionChanged(historyEntry, diagram);\n break;\n case 'LabelCollectionChanged':\n this.recordLabelCollectionChanged(historyEntry, diagram);\n break;\n case 'PortCollectionChanged':\n this.recordPortCollectionChanged(historyEntry, diagram);\n break;\n case 'Group':\n this.group(historyEntry, diagram);\n break;\n case 'UnGroup':\n this.unGroup(historyEntry, diagram);\n break;\n case 'SegmentChanged':\n this.recordSegmentChanged(redoObject, diagram);\n break;\n case 'PortPositionChanged':\n this.recordPortChanged(historyEntry, diagram, true);\n break;\n case 'AnnotationPropertyChanged':\n this.recordAnnotationChanged(historyEntry, diagram, true);\n break;\n }\n diagram.protectPropertyChange(false);\n diagram.diagramActions &= ~DiagramAction.UndoRedo;\n diagram.historyChangeTrigger(historyEntry);\n };\n UndoRedo.prototype.getUndoEntry = function (diagram) {\n var undoEntry = null;\n var currentObject;\n var hList = diagram.historyList;\n if (hList.canUndo) {\n undoEntry = hList.currentEntry;\n currentObject = hList.currentEntry.previous;\n if (currentObject) {\n hList.currentEntry = currentObject;\n if (!hList.canRedo) {\n hList.canRedo = true;\n }\n }\n else {\n hList.canRedo = true;\n hList.canUndo = false;\n }\n }\n return undoEntry;\n };\n UndoRedo.prototype.getRedoEntry = function (diagram) {\n var redoEntry = null;\n var entryCurrent;\n var hList = diagram.historyList;\n if (hList.canRedo) {\n if (!hList.currentEntry.previous && !hList.canUndo) {\n entryCurrent = hList.currentEntry;\n }\n else {\n entryCurrent = hList.currentEntry.next;\n }\n if (entryCurrent) {\n hList.currentEntry = entryCurrent;\n if (!hList.canUndo) {\n hList.canUndo = true;\n }\n if (!entryCurrent.next) {\n hList.canRedo = false;\n hList.canUndo = true;\n }\n }\n redoEntry = hList.currentEntry;\n }\n return redoEntry;\n };\n /**\n * To destroy the undo redo module\n * @return {void}\n * @private\n */\n UndoRedo.prototype.destroy = function () {\n /**\n * Destroys the undo redo module\n */\n };\n /**\n * Get module name.\n */\n UndoRedo.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'UndoRedo';\n };\n return UndoRedo;\n}());\nexport { UndoRedo };\n","import { Container } from '../core/containers/container';\nimport { DiagramEvent } from '../enum/enum';\n/**\n * Layout Animation function to enable or disable layout animation\n */\nvar LayoutAnimation = /** @class */ (function () {\n function LayoutAnimation() {\n this.protectChange = false;\n }\n /**\n * Layout expand function for animation of expand and collapse\n */\n LayoutAnimation.prototype.expand = function (animation, objects, node, diagram) {\n var _this = this;\n var setIntervalObject = {};\n var i = 0;\n var j = 0;\n setIntervalObject[i] = setInterval(function () {\n j++;\n return _this.layoutAnimation(objects, setIntervalObject, j === 6, diagram);\n }, 20);\n if (node.isExpanded) {\n var opacity_1 = .2;\n var protect = 'isProtectedOnChange';\n this.protectChange = diagram[protect];\n diagram.protectPropertyChange(false);\n //let objects: ILayout = diagram.doLayout();\n var setIntervalObjects_1 = {};\n var x = 0;\n this.updateOpacity(node, opacity_1, diagram);\n var current = this;\n setIntervalObjects_1[x] = setInterval(function () {\n opacity_1 <= 1 ? _this.updateOpacity(node, opacity_1, diagram) : clearInterval(setIntervalObjects_1[0]);\n opacity_1 += .2;\n }, 20);\n }\n };\n /**\n * Setinterval and Clear interval for layout animation\n */\n /** @private */\n LayoutAnimation.prototype.layoutAnimation = function (objValue, layoutTimer, stop, diagram) {\n if (!stop) {\n for (var k = 0; k < objValue.objects.length; k++) {\n var node = diagram.nameTable[objValue.objects[k].id];\n node.offsetX += objValue.objects[k].differenceX / 5;\n node.offsetY += objValue.objects[k].differenceY / 5;\n }\n }\n if (stop) {\n clearInterval(layoutTimer[0]);\n diagram.protectPropertyChange(true);\n diagram.triggerEvent(DiagramEvent.animationComplete, undefined);\n diagram.organizationalChartModule.isAnimation = false;\n diagram.layout.fixedNode = '';\n diagram.protectPropertyChange(this.protectChange);\n }\n };\n /**\n * update the node opacity for the node and connector once the layout animation starts\n */\n LayoutAnimation.prototype.updateOpacity = function (source, value, diagram) {\n for (var i = 0; i < source.outEdges.length; i++) {\n var connector = diagram.nameTable[source.outEdges[i]];\n var target = diagram.nameTable[connector.targetID];\n connector.style.opacity = value;\n for (var j = 0; j < connector.wrapper.children.length; j++) {\n connector.wrapper.children[j].style.opacity = value;\n target.style.opacity = value;\n if (target.wrapper instanceof Container) {\n diagram.updateNodeProperty(target.wrapper, undefined, value);\n }\n }\n this.updateOpacity(target, value, diagram);\n }\n };\n /**\n * To destroy the LayoutAnimate module\n * @return {void}\n * @private\n */\n LayoutAnimation.prototype.destroy = function () {\n /**\n * Destroys the LayoutAnimate module\n */\n };\n /**\n * Get module name.\n */\n LayoutAnimation.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'LayoutAnimate';\n };\n return LayoutAnimation;\n}());\nexport { LayoutAnimation };\n","import { Rect } from '../primitives/rect';\nimport { OrthogonalSegment } from '../objects/connector';\nimport { getFunction } from '../utility/base-util';\nimport { Point } from '../primitives/point';\n/**\n * Hierarchical Tree and Organizational Chart\n */\nvar HierarchicalTree = /** @class */ (function () {\n /**\n * Constructor for the organizational chart module.\n * @private\n */\n function HierarchicalTree() {\n /**\n * Defines the layout animation\n *\n */\n this.isAnimation = false;\n //constructs the layout module\n }\n /**\n * To destroy the organizational chart\n * @return {void}\n * @private\n */\n HierarchicalTree.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n HierarchicalTree.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'OrganizationalChart';\n };\n HierarchicalTree.prototype.updateLayout = function (nodes, nameTable, layoutProp, viewport, uniqueId) {\n var layout = {\n type: layoutProp.type,\n nameTable: nameTable, anchorX: 0, anchorY: 0,\n firstLevelNodes: [], centerNode: null, levels: [], maxLevel: 0, graphNodes: {},\n orientation: layoutProp.orientation,\n horizontalSpacing: layoutProp.horizontalSpacing, verticalSpacing: layoutProp.verticalSpacing,\n verticalAlignment: layoutProp.verticalAlignment, horizontalAlignment: layoutProp.horizontalAlignment,\n fixedNode: layoutProp.fixedNode, getLayoutInfo: getFunction(layoutProp.getLayoutInfo), margin: layoutProp.margin,\n bounds: layoutProp.bounds, objects: [], root: layoutProp.root\n };\n this.doLayout(layout, nodes, viewport, uniqueId);\n return layout;\n };\n HierarchicalTree.prototype.doLayout = function (layout, nodes, viewport, uniqueId) {\n var node;\n var i;\n var layoutInfo = {};\n var shape;\n var rootNodes = [];\n if (layout.nameTable[layout.root]) {\n layout.firstLevelNodes.push(layout.nameTable[layout.root]);\n }\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (!node.excludeFromLayout) {\n layoutInfo = layout.graphNodes[node.id] = this.setUpLayoutInfo(layout, node);\n layoutInfo.tree.hasSubTree = false;\n if (!layout.nameTable[layout.root]) {\n if (!node.inEdges || !node.inEdges.length) {\n rootNodes.push(node);\n if (node.data && String(node.data[uniqueId]) === layout.root) {\n layout.firstLevelNodes.push(node);\n }\n }\n }\n }\n }\n if (layout.firstLevelNodes.length === 0) {\n layout.firstLevelNodes = rootNodes;\n }\n //Update relationship(parent and children)\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n node = layout.firstLevelNodes[i];\n this.updateEdges(layout, node, 1);\n }\n if (layout.firstLevelNodes.length > 0) {\n layout.rootNode = layout.firstLevelNodes[0];\n var x = 0;\n var y = 0;\n var minX = void 0;\n var maxY = void 0;\n var maxX = void 0;\n var minY = void 0;\n var j = void 0;\n var bounds = void 0;\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n bounds = this.updateTree(layout, x, y, layout.firstLevelNodes[i], 0, layout.firstLevelNodes[i - 1]);\n var rootInfo = layout.graphNodes[layout.firstLevelNodes[i].id];\n bounds.y = Math.min(bounds.y, rootInfo.y);\n bounds.x = Math.min(bounds.x, rootInfo.x);\n if (layout.orientation.indexOf('Left') !== -1) {\n y = bounds.right + layout.horizontalSpacing;\n }\n else {\n x = bounds.right + layout.horizontalSpacing;\n }\n if (i === 0) {\n minX = bounds.x;\n minY = bounds.y;\n maxX = bounds.right;\n maxY = bounds.bottom;\n }\n else {\n minX = Math.min(minX, bounds.x);\n minY = Math.min(minY, bounds.y);\n maxX = Math.max(maxX, bounds.right);\n maxY = Math.max(maxY, bounds.bottom);\n }\n }\n this.updateAnchor(layout, { x: minX, y: minY, right: maxX, bottom: maxY }, viewport);\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n this.updateNodes(layout, layout.firstLevelNodes[i], 0);\n }\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n this.updateConnectors(layout, layout.firstLevelNodes[i], 1);\n }\n }\n };\n HierarchicalTree.prototype.getBounds = function (node) {\n var x = node.offsetX - node.actualSize.width * node.pivot.x;\n var y = node.offsetY - node.actualSize.height * node.pivot.y;\n return new Rect(x, y, node.actualSize.width, node.actualSize.height);\n };\n HierarchicalTree.prototype.updateTree = function (layout, x, y, shape, level, prev, dontupdate) {\n var dimensions;\n var info = {};\n var lev;\n var obj;\n var hasChild;\n dimensions = this.getDimensions(layout, shape, x, y, level);\n info = layout.graphNodes[shape.id];\n var firstChild;\n //Set maximum level of layout\n layout.maxLevel = Math.max(layout.maxLevel, level);\n lev = level;\n hasChild = this.hasChild(layout, shape);\n if (!hasChild && !info.tree.assistants.length) {\n //update leaf nodes\n shape.treeBounds = this.updateLeafNode(layout, shape, prev, dimensions, level, dontupdate);\n return shape.treeBounds;\n }\n else {\n var treeBounds = void 0;\n var shapeBounds = void 0;\n var levelBounds = void 0;\n var d = void 0;\n var asstBounds = void 0;\n var space = void 0;\n var bottom = void 0;\n bottom = dimensions.y + dimensions.height + layout.verticalSpacing;\n if (info.tree.assistants.length) {\n //Vertically place assistants\n obj = this.setDepthSpaceForAssitants(layout, shape, bottom, dimensions.height, level, layout.verticalSpacing);\n lev = obj.level;\n bottom = obj.bottom;\n }\n if (!info.tree.assistants.length && info.tree.orientation !== 'Horizontal') {\n bottom = dimensions.y + dimensions.height + layout.verticalSpacing / 2;\n }\n if (info.tree.children.length) {\n if (info.tree.orientation === 'Horizontal' && (info.tree.type !== 'Balanced' || info.tree.children.length === 1)) {\n treeBounds = this.updateHorizontalTree(layout, shape, prev, dimensions.x, bottom, lev);\n }\n else if (info.tree.type === 'Balanced') {\n treeBounds = this.updateHorizontalTreeWithMultipleRows(layout, shape, prev, dimensions.x, bottom, lev);\n }\n else {\n treeBounds = this.updateVerticalTree(layout, shape, dimensions.x, bottom, lev, dontupdate);\n }\n }\n if (!(info.y && info.y > dimensions.y)) {\n info.y = dimensions.y;\n }\n if (!(x && x > info.mid)) {\n x = info.mid;\n }\n if (info.tree.assistants.length) {\n //Set breadth space for assistants\n space = x !== undefined ? x : dimensions.x;\n asstBounds = this.setBreadthSpaceForAssistants(layout, shape, dimensions, space, bottom, level);\n if (!hasChild) {\n levelBounds = treeBounds = asstBounds;\n x = (levelBounds.x + levelBounds.right) / 2 - dimensions.width / 2;\n treeBounds = levelBounds;\n }\n d = asstBounds ? asstBounds.canMoveBy : undefined;\n }\n info.x = x;\n if (!info.translate) {\n info.treeWidth = treeBounds.right - treeBounds.x;\n }\n {\n shapeBounds = { x: x, y: dimensions.y, right: x + dimensions.width, bottom: dimensions.y + dimensions.height };\n }\n var translateInfo = {\n layout: layout, shape: shape, shapeBounds: shapeBounds, treeBounds: treeBounds,\n dim: dimensions, level: level\n };\n this.translateSubTree(translateInfo, d, prev !== undefined, dontupdate);\n if (info.firstChild && typeof info.firstChild !== 'string') {\n info.firstChild.x += info.subTreeTranslation;\n }\n shape.treeBounds = treeBounds;\n return treeBounds;\n }\n };\n HierarchicalTree.prototype.updateLeafNode = function (layout, shape, prev, dimensions, level, dontupdate) {\n var bounds;\n var info = layout.graphNodes[shape.id];\n info.x = dimensions.x;\n if (!(info.y && info.y > dimensions.y)) {\n info.y = dimensions.y;\n info.maxLevel = Math.max(level, info.maxLevel || 0);\n }\n bounds = { x: dimensions.x, y: dimensions.y, right: dimensions.x + dimensions.width, bottom: dimensions.y + dimensions.height };\n info.maxLevel = Math.max(info.maxLevel || 0, level);\n var translateInfo = {\n layout: layout, shape: shape, shapeBounds: bounds, treeBounds: bounds,\n dim: dimensions, level: level\n };\n this.translateSubTree(translateInfo, undefined, prev !== undefined, dontupdate);\n return { x: info.x, y: info.y, right: info.x + dimensions.width, bottom: info.y + dimensions.height };\n };\n HierarchicalTree.prototype.setUpLayoutInfo = function (layout, item) {\n var info = {};\n info.subTreeTranslation = 0;\n if (layout.type === 'OrganizationalChart') {\n info.tree = { orientation: 'Vertical', type: 'Alternate', offset: 20, enableRouting: true };\n }\n else {\n info.tree = { orientation: 'Horizontal', type: 'Center', enableRouting: true };\n }\n info.tree.children = [];\n info.tree.assistants = [];\n info.tree.level = 0;\n info.translate = true;\n return info;\n };\n HierarchicalTree.prototype.translateSubTree = function (translateInfo, asstDif, translate, dontupdate) {\n var layout = translateInfo.layout;\n var shape = translateInfo.shape;\n var shapeBounds = translateInfo.shapeBounds;\n var treeBounds = translateInfo.treeBounds;\n var level = translateInfo.level;\n var dim = translateInfo.dim;\n var info = layout.graphNodes[shape.id];\n var firstChild = layout.nameTable[info.firstChild ? info.firstChild.child : info.tree.children[0]];\n var firstChildInfo = firstChild ? layout.graphNodes[firstChild.id] : null;\n var hasChild = this.hasChild(layout, shape);\n var intersect = this.findIntersectingLevels(layout, shapeBounds, level, info.actualLevel);\n var treeIntersect = this.findIntersectingLevels(layout, treeBounds, level, info.actualLevel);\n var levelBounds = [];\n var diff;\n if (intersect.length && info.translate) {\n info.intersect = intersect;\n this.spaceLeftFromPrevSubTree(layout, shape, shapeBounds);\n info.canMoveBy = info.diff;\n if (asstDif !== undefined) {\n info.canMoveBy = Math.min(asstDif, info.canMoveBy);\n }\n if (firstChild && firstChildInfo.canMoveBy !== undefined) {\n if (firstChildInfo.canMoveBy >= info.canMoveBy) {\n info.translated = true;\n }\n info.canMoveBy = Math.min(info.canMoveBy, firstChildInfo.canMoveBy);\n }\n if (translate) {\n info.x -= info.canMoveBy;\n info.subTreeTranslation -= info.canMoveBy;\n if (hasChild) {\n this.shiftSubordinates(layout, treeIntersect, info.canMoveBy);\n treeBounds.x = Math.min(treeBounds.x, info.x);\n treeBounds.right = Math.max(treeBounds.right, info.x + dim.width);\n treeBounds.bottom = Math.max(treeBounds.bottom, info.y + dim.height);\n treeBounds.x -= info.canMoveBy;\n treeBounds.right -= info.canMoveBy;\n }\n if (firstChild && firstChildInfo.canMoveBy > info.canMoveBy) {\n info.canMoveBy = firstChildInfo.canMoveBy - info.canMoveBy;\n }\n else if (firstChild && info.canMoveBy !== undefined) {\n info.canMoveBy = 0;\n }\n }\n }\n else {\n if (hasChild) {\n treeBounds.x = Math.min(treeBounds.x, shapeBounds.x);\n treeBounds.right = Math.max(treeBounds.right, shapeBounds.x + dim.width);\n treeBounds.bottom = Math.max(treeBounds.bottom, info.y + dim.height);\n }\n if (!info.translate) {\n info.canMoveBy = 0;\n info.subTreeTranslation = 0;\n }\n }\n if (!dontupdate) {\n shapeBounds = { x: info.x, y: dim.y, right: info.x + dim.width, bottom: dim.y + dim.height };\n levelBounds.push({ rBounds: shapeBounds });\n this.updateRearBounds(layout, shape, levelBounds, level);\n }\n };\n HierarchicalTree.prototype.updateRearBounds = function (layout, shape, levelBounds, level, intersect) {\n var bnds;\n var index;\n var isLastLeaf = true;\n var i;\n var info = {};\n var firstLevel;\n var lastLevel;\n var bottom;\n if (shape) {\n info = layout.graphNodes[shape.id];\n intersect = info.intersect;\n isLastLeaf = !info.tree.children.length && !info.tree.assistants.length;\n }\n firstLevel = levelBounds[0].rBounds;\n lastLevel = levelBounds[levelBounds.length - 1].rBounds;\n if (intersect && intersect.length) {\n bnds = layout.levels[intersect[0]].rBounds;\n bottom = bnds.bottom;\n if (bnds.y < firstLevel.y) {\n bnds.bottom = firstLevel.y;\n levelBounds.splice(0, 0, { rBounds: bnds });\n }\n if (bottom > lastLevel.bottom) {\n levelBounds.push({ rBounds: { x: bnds.x, right: bnds.right, y: firstLevel.bottom, bottom: bottom } });\n }\n else {\n bnds = layout.levels[intersect[intersect.length - 1]].rBounds;\n if (isLastLeaf && bnds.bottom > lastLevel.bottom) {\n bnds.y = lastLevel.bottom;\n levelBounds.push({ rBounds: bnds });\n }\n }\n index = intersect[0];\n for (i = levelBounds.length - 1; i >= 0; i--) {\n layout.levels.splice(index, 0, levelBounds[i]);\n }\n index += levelBounds.length;\n layout.levels.splice(index, intersect.length);\n }\n else {\n index = this.findLevel(layout, levelBounds[levelBounds.length - 1].rBounds, level);\n for (i = levelBounds.length - 1; i >= 0; i--) {\n layout.levels.splice(index, 0, levelBounds[i]);\n }\n }\n };\n HierarchicalTree.prototype.shiftSubordinates = function (layout, intersect, diff) {\n var i;\n //Shift the sublevels by the distance diff\n if (diff !== 0) {\n for (i = 0; i < intersect.length; i++) {\n if (layout.levels[intersect[i]].rBounds) {\n layout.levels[intersect[i]].rBounds.x -= diff;\n layout.levels[intersect[i]].rBounds.right -= diff;\n }\n }\n }\n };\n HierarchicalTree.prototype.setDepthSpaceForAssitants = function (layout, shape, bottom, height, lev, vSpace) {\n var info = layout.graphNodes[shape.id];\n var asst = {};\n var asstHeight;\n var i;\n var asstElement;\n var max;\n max = bottom;\n //Vertically place the assistants as alternate layout(alternatively at both right and left sides of parent)\n for (i = 0; i < info.tree.assistants.length; i++) {\n asst = layout.graphNodes[info.tree.assistants[i]];\n if (asst) {\n asst.tree.children = asst.tree.assistants = [];\n asst.y = bottom;\n asstElement = layout.nameTable[info.tree.assistants[i]];\n asstHeight = asstElement.actualSize.height;\n if (layout.orientation.indexOf('Left') !== -1) {\n asstHeight = asstElement.actualSize.width;\n }\n max = bottom + asstHeight + vSpace / 2;\n layout.maxLevel = lev + 1;\n if (i % 2 === 1 && i !== info.tree.assistants.length - 1) {\n bottom = max;\n lev++;\n }\n }\n }\n return { level: layout.maxLevel, bottom: bottom + asstHeight + vSpace };\n };\n HierarchicalTree.prototype.setBreadthSpaceForAssistants = function (layout, shape, dim, space, bottom, level) {\n var asst = {};\n var asstWidth;\n var prevBounds;\n var bounds;\n var asstElement;\n var i;\n var info = layout.graphNodes[shape.id];\n var max = bottom;\n var lev = level;\n var left;\n var diff;\n var intersect;\n var levelBounds;\n for (i = 0; i < info.tree.assistants.length; i++) {\n asst = layout.graphNodes[info.tree.assistants[i]];\n //Arrange assistants at both left and right sides of parent(like alternate layout)\n //Check - By default, distance to be left between parent and child nodes is assumed as 20.\n //It can be modified/customized later.\n if (asst) {\n asstElement = layout.nameTable[info.tree.assistants[i]];\n asstWidth = asstElement.actualSize.width;\n if (layout.orientation.indexOf('Left') !== -1) {\n asstWidth = asstElement.actualSize.height;\n }\n if (i % 2 === 0) {\n left = space + dim.width / 2 - 20 - asstWidth;\n }\n else {\n left = space + dim.width / 2 + 20;\n }\n //Check - What will happen if update leaf node is called? Since assistants don't have children\n bounds = this.updateTree(layout, left, asst.y, layout.nameTable[info.tree.assistants[i]], lev + 1);\n if (!this.hasChild(layout, shape)) {\n if (i === 0) {\n levelBounds = bounds;\n }\n else {\n this.uniteRects(levelBounds, bounds);\n }\n }\n if (i % 2 === 0 && asst.prevBounds) {\n if (diff === undefined) {\n diff = asst.canMoveBy;\n }\n else {\n diff = Math.min(diff, asst.canMoveBy);\n }\n }\n if (i % 2 === 1 || i === info.tree.assistants.length - 1) {\n intersect = this.findIntersectingLevels(layout, bounds, lev + 1);\n //Update rightmost positions of known layout levels\n this.updateRearBounds(layout, null, [{ rBounds: bounds }], lev + 1, intersect);\n lev++;\n }\n }\n }\n if (levelBounds) {\n levelBounds.canMoveBy = diff;\n }\n return levelBounds;\n };\n HierarchicalTree.prototype.getDimensions = function (layout, shape, x, y, level) {\n var width;\n width = shape.actualSize.width;\n var height;\n height = shape.actualSize.height;\n if (layout.orientation.indexOf('Left') !== -1) {\n if (!level) {\n var temp = void 0;\n temp = x;\n x = y;\n y = temp;\n }\n height = shape.actualSize.width;\n width = shape.actualSize.height;\n }\n return { x: x, y: y, width: width, height: height };\n };\n HierarchicalTree.prototype.hasChild = function (layout, shape) {\n //Check whether the node has children \n var shape1 = layout.graphNodes[shape.id];\n return shape1.tree.children && shape1.tree.children.length;\n };\n HierarchicalTree.prototype.updateHorizontalTree = function (layout, shape, prev, x, y, level) {\n //Get dimensions with respect to layout orientations \n var dimensions;\n dimensions = this.getDimensions(layout, shape, x, y, level);\n var info = {};\n info = layout.graphNodes[shape.id];\n var side = info.tree.type;\n var lev;\n lev = level;\n var right = 0;\n right = x;\n var bottom;\n bottom = y;\n var width;\n var height;\n var child;\n var childBounds;\n var childWidth;\n var childHeight;\n var prevBounds;\n var bounds;\n var actBounds;\n var maxLevel;\n var translateSibilingsBy;\n var canMoveBy;\n var oldActBounds;\n var i;\n var childInfo;\n var prevLayoutLevels;\n var firstChildInfo;\n prevLayoutLevels = layout.levels.slice(0, layout.levels.length);\n if (this.hasChild(layout, shape)) {\n var h = void 0;\n h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n for (i = 0; i < info.tree.children.length; i++) {\n child = layout.nameTable[info.tree.children[i]];\n width = child.actualSize.width;\n height = child.actualSize.height;\n childWidth = h ? height : width;\n childHeight = h ? width : height;\n prevBounds = layout.levels[lev + 1] ? layout.levels[lev + 1].rBounds : null;\n //Update sub tree\n childBounds = this.updateTree(layout, right, bottom, child, lev + 1, layout.nameTable[info.tree.children[i - 1]]);\n childInfo = layout.graphNodes[child.id];\n info.maxLevel = Math.max(info.maxLevel || 0, childInfo.maxLevel || 0);\n actBounds = { x: childInfo.x, y: childInfo.y, right: childInfo.x + childWidth, bottom: childInfo.y + childHeight };\n if (i === 0) {\n //Compare with previous(right most) subtree\n bounds = {\n x: Math.min(childInfo.x, childBounds.x), y: Math.min(childInfo.y, childBounds.y),\n right: childBounds.right, bottom: childBounds.bottom\n };\n firstChildInfo = childInfo;\n }\n if (!oldActBounds) {\n oldActBounds = actBounds;\n }\n else {\n oldActBounds.x = actBounds.x;\n oldActBounds.y = actBounds.y;\n if (actBounds.right > oldActBounds.right) {\n oldActBounds.right = actBounds.right;\n }\n oldActBounds.bottom = actBounds.bottom;\n //oldActBounds = actBounds;\n }\n //Compare with previous subtree if level of the child is greater than the level of previous sub tree\n //Check - what will happen if level of second child is greater than current child\n if (i === 0) {\n info.firstChild = { x: childInfo.x, canMoveBy: childInfo.canMoveBy, child: child.id };\n }\n if (this.hasChild(layout, child)) {\n if (!info.firstChild || info.firstChild.x >= childInfo.firstChild.x) {\n if (childInfo.firstChild && info.firstChild.canMoveBy < childInfo.canMoveBy) {\n info.firstChild.canMoveBy = canMoveBy;\n childInfo.canMoveBy = canMoveBy;\n canMoveBy = info.firstChild.canMoveBy;\n layout.graphNodes[info.firstChild.child].canMoveBy = canMoveBy;\n }\n var canMoveValue = canMoveBy !== undefined ? canMoveBy : childInfo.canMoveBy;\n info.firstChild = { x: childInfo.firstChild.x, canMoveBy: canMoveValue, child: child.id };\n }\n else if (childInfo.firstChild && childInfo.translated && info.firstChild.canMoveBy > childInfo.canMoveBy) {\n info.firstChild.canMoveBy = layout.graphNodes[info.firstChild.child].canMoveBy = childInfo.canMoveBy;\n }\n }\n maxLevel = maxLevel ? Math.max(childInfo.maxLevel, maxLevel) : childInfo.maxLevel;\n this.uniteRects(bounds, childBounds);\n if (i !== 0 && !this.hasChild(layout, child) && childInfo.subTreeTranslation < 0) {\n right = childBounds.right - childInfo.subTreeTranslation + layout.horizontalSpacing;\n }\n else {\n right = childBounds.right + layout.horizontalSpacing;\n }\n }\n if (!isNaN(translateSibilingsBy)) {\n firstChildInfo.canMoveBy = translateSibilingsBy;\n }\n info.mid = (firstChildInfo.x + oldActBounds.right) / 2 - dimensions.width / 2;\n //Set parent based on the chart type\n if (side === 'Left') {\n info.mid = actBounds.right - dimensions.width;\n }\n else if (side === 'Right') {\n info.mid = x;\n }\n }\n return bounds;\n };\n HierarchicalTree.prototype.updateHorizontalTreeWithMultipleRows = function (layout, shape, prev, x, y, level) {\n //declarations\n var child;\n var childInfo;\n var childBounds;\n var childWidth;\n var childHeight;\n var firstChildInfo;\n var maxLevel;\n var bounds;\n var rowBounds;\n var width;\n var height;\n var diff;\n var translateSibilingsBy;\n var fchild;\n var maxRowWidth;\n var j;\n var i;\n var k;\n var max;\n var leftCenter;\n var rightCenter;\n //Get dimensions with respect to layout orientations\n var dimensions = this.getDimensions(layout, shape, x, y, level);\n var info = layout.graphNodes[shape.id];\n var side = info.tree.type;\n var lev = level;\n var right = x;\n var bottom = y;\n var prevLayoutLevels = layout.levels.slice(0, layout.levels.length);\n var minTranslation = 0;\n if (this.hasChild(layout, shape)) {\n var h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n var align = void 0;\n var rows = this.splitChildrenInRows(layout, shape);\n var unique = info.tree.children.length === 5 && rows[0].length === 3;\n var leftTree = [];\n var rightTree = [];\n if (!unique) {\n this.splitRows(rows, leftTree, rightTree);\n }\n else {\n rightTree = rows;\n }\n var treeInfo = { leftTree: leftTree, rows: rows, rightTree: rightTree, dimensions: dimensions };\n var rightMost = this.updateLeftTree(layout, treeInfo, shape, x, bottom, lev);\n bounds = treeInfo.bounds;\n var rightX = void 0;\n var center = (rightMost || 0) + (rightMost !== undefined ? (layout.horizontalSpacing / 2) : 0);\n if (rightMost !== undefined) {\n info.mid = center - dimensions.width / 2;\n rightX = rightMost + layout.horizontalSpacing;\n }\n bottom = y;\n var rightBounds = void 0;\n rightBounds = [];\n for (i = 0; i < rightTree.length; i++) {\n if (rows[i].length % 2 === 1 && i === rightTree.length - 1 || unique) {\n right = x;\n }\n else {\n right = rightX || x;\n }\n if (i !== 0) {\n bottom = rightBounds[i - 1].bottom + layout.verticalSpacing;\n }\n for (j = 0; j < rightTree[i].length; j++) {\n child = layout.nameTable[rightTree[i][j]];\n width = child.actualSize.width;\n height = child.actualSize.height;\n childWidth = h ? height : width;\n childHeight = h ? width : height;\n //Update sub tree\n childInfo = layout.graphNodes[child.id];\n childInfo.actualLevel = lev + 1 + i;\n if (j === 0 && leftTree[i] && leftTree[i].length) {\n childInfo.translate = false;\n }\n if (unique && i === 1) {\n if (j === 0 && leftCenter + childWidth + layout.horizontalSpacing <= rightCenter) {\n align = true;\n right = leftCenter - childWidth / 2;\n }\n if (align && j === 1) {\n right = rightCenter - childWidth / 2;\n }\n }\n childBounds = this.updateTree(layout, right, bottom, child, lev + 1, layout.nameTable[rightTree[i][j - 1]]);\n if (unique && j <= 2 && i === 0) {\n if (j === 1) {\n leftCenter = childBounds.x - layout.horizontalSpacing / 2;\n rightCenter = childBounds.x + childWidth + layout.horizontalSpacing / 2;\n }\n }\n if (j === 0) {\n rightBounds[i] = { x: childBounds.x, y: childBounds.y, right: childBounds.right, bottom: childBounds.bottom };\n }\n else {\n this.uniteRects(rightBounds[i], childBounds);\n }\n if (!bounds) {\n bounds = {\n x: rightBounds[i].x, y: rightBounds[i].y, right: rightBounds[i].right,\n bottom: rightBounds[i].bottom\n };\n }\n this.uniteRects(bounds, rightBounds[i]);\n right = childBounds.right + layout.horizontalSpacing;\n if (!info.firstChild || ((i === rightTree.length - 1 && rows[i].length % 2 === 1) || unique)\n && j === 0 && childInfo.canMoveBy !== undefined && minTranslation > childInfo.canMoveBy) {\n minTranslation = Math.min(minTranslation, childInfo.canMoveBy || 0);\n info.firstChild = { x: childInfo.x, child: child.id, canMoveBy: childInfo.canMoveBy };\n }\n treeInfo.leftCenter = leftCenter;\n treeInfo.rightCenter = rightCenter;\n treeInfo.align = align;\n treeInfo.level = lev;\n treeInfo.rightBounds = rightBounds;\n this.alignRowsToCenter(layout, i, shape, treeInfo, rightX);\n }\n }\n }\n return bounds;\n };\n HierarchicalTree.prototype.updateLeftTree = function (layout, treeInfo, shape, x, bottom, lev) {\n var leftTree = treeInfo.leftTree;\n var info = layout.graphNodes[shape.id];\n var right;\n var leftBounds = [];\n var minTranslation;\n var rightMost;\n var childBounds;\n var bounds;\n var h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n //Arrange left side\n for (var i = 0; i < leftTree.length && leftTree[i].length; i++) {\n right = x;\n if (leftBounds[i - 1]) {\n bottom = leftBounds[i - 1].bottom + layout.verticalSpacing;\n }\n for (var j = 0; j < leftTree[i].length; j++) {\n var child = layout.nameTable[leftTree[i][j]];\n var childWidth = h ? child.actualSize.height : child.actualSize.width;\n var childHeight = h ? child.actualSize.width : child.actualSize.height;\n //Update sub tree\n var childInfo = layout.graphNodes[child.id];\n childInfo.actualLevel = lev + 1 + i;\n childBounds = this.updateTree(layout, right, bottom, child, lev + 1, layout.nameTable[leftTree[i][j - 1]]);\n if (j === 0) {\n leftBounds[i] = { x: childBounds.x, y: childBounds.y, right: childBounds.right, bottom: childBounds.bottom };\n }\n else {\n this.uniteRects(leftBounds[i], childBounds);\n }\n if (i === 0 && j === 0) {\n minTranslation = childInfo.canMoveBy;\n info.firstChild = { x: childInfo.x, child: child.id, canMoveBy: childInfo.canMoveBy };\n }\n else if (j === 0 && childInfo.canMoveBy !== undefined && minTranslation > childInfo.canMoveBy) {\n minTranslation = Math.min(minTranslation, childInfo.canMoveBy || 0);\n info.firstChild = { x: childInfo.x, child: child.id, canMoveBy: childInfo.canMoveBy };\n }\n right = childBounds.right + layout.horizontalSpacing;\n }\n if (i === 0) {\n rightMost = leftBounds[i].right;\n }\n else {\n rightMost = Math.max(rightMost, leftBounds[i].right);\n }\n }\n //Translate to same positions\n for (var i = 0; i < leftTree.length && leftTree[i].length; i++) {\n if (rightMost !== leftBounds[i].right) {\n var diff = rightMost - leftBounds[i].right;\n for (var j = 0; j < leftTree[i].length; j++) {\n var element = layout.nameTable[leftTree[i][j]];\n var elementInfo = layout.graphNodes[leftTree[i][j]];\n elementInfo.x += diff;\n }\n //leftBounds[i].x += diff;\n //leftBounds[i].right += diff;\n }\n if (i === 0) {\n bounds = { x: leftBounds[0].x, y: leftBounds[0].y, right: leftBounds[0].right, bottom: leftBounds[0].bottom };\n }\n else {\n this.uniteRects(bounds, leftBounds[i]);\n }\n }\n treeInfo.bounds = bounds;\n return rightMost;\n };\n HierarchicalTree.prototype.alignRowsToCenter = function (layout, i, shape, treeInfo, rightX) {\n var max;\n var centered;\n var diff;\n var info = layout.graphNodes[shape.id];\n var rows = treeInfo.rows;\n var rightTree = treeInfo.rightTree;\n var leftCenter = treeInfo.leftCenter;\n var rightCenter = treeInfo.rightCenter;\n var align = treeInfo.align;\n var rightBounds = treeInfo.rightBounds;\n var dimensions = treeInfo.dimensions;\n var lev = treeInfo.level;\n var unique = info.tree.children.length === 5 && rows[0].length === 3;\n if (unique && i === 1) {\n max = (rightBounds[0].right - rightBounds[0].x) >= (rightBounds[1].right - rightBounds[1].x) ? 0 : 1;\n }\n if (i === rows.length - 1) {\n if (rows[i].length % 2 === 1 || unique && i === 1) {\n centered = rightTree[i][Math.floor(rightTree[i].length / 2)];\n var centerObjct = void 0;\n centerObjct = layout.nameTable[centered];\n var childDimension = void 0;\n var centeredX = layout.graphNodes[centered].x;\n var centeredY = layout.graphNodes[centered].y;\n childDimension = this.getDimensions(layout, centerObjct, centeredX, centeredY, lev + 1);\n diff = undefined;\n if (!align && unique) {\n if (max === 1) {\n i = 0;\n }\n diff = (rightBounds[max].x + rightBounds[max].right) / 2 - (rightBounds[i].x + rightBounds[i].right) / 2;\n if (i === 0) {\n info.mid += diff;\n }\n }\n else if (!unique && rightX !== undefined) {\n diff = rightX - layout.horizontalSpacing / 2 - (centeredX + childDimension.width / 2);\n }\n if (diff !== undefined) {\n this.updateRearBoundsOfTree(layout, rightTree[i], diff, dimensions);\n }\n if (unique) {\n info.mid = (rightCenter + leftCenter) / 2 + (i === 0 ? diff : 0) - dimensions.width / 2;\n }\n if (info.mid === undefined && layout.graphNodes[centered]) {\n info.mid = centeredX;\n }\n align = false;\n i++;\n }\n }\n };\n HierarchicalTree.prototype.updateRearBoundsOfTree = function (layout, rightTree, diff, dimensions) {\n for (var j = 0; j < rightTree.length; j++) {\n var childInfo = layout.graphNodes[rightTree[j]];\n var child = layout.nameTable[rightTree[j]];\n childInfo.x += diff;\n childInfo.canMoveBy += diff;\n if (j === rightTree.length - 1) {\n //removed child dimensions call calculation, since that is not used\n var childBnds = {\n x: childInfo.x, y: childInfo.y, right: childInfo.x +\n dimensions.width, bottom: childInfo.y + dimensions.height\n };\n var intersect = this.findIntersectingLevels(layout, childBnds, childInfo.actualLevel);\n this.updateRearBounds(layout, null, [{ rBounds: childBnds }], childInfo.actualLevel, intersect);\n }\n }\n };\n HierarchicalTree.prototype.splitRows = function (rows, leftTree, rightTree) {\n for (var i = 0; i < rows.length; i++) {\n leftTree[i] = [];\n rightTree[i] = [];\n var half = void 0;\n half = rows[i].length;\n if (rows[i].length % 2 !== 1) {\n half = Math.ceil(rows[i].length / 2);\n for (var k = 0; k < half; k++) {\n leftTree[i].push(rows[i][k]);\n }\n }\n for (var j = leftTree[i].length; j < rows[i].length; j++) {\n rightTree[i].push(rows[i][j]);\n }\n }\n };\n HierarchicalTree.prototype.updateVerticalTree = function (layout, shape, x, y, level, dontUpdate) {\n //declarations\n var child;\n var childInfo;\n var childBounds;\n var childWidth;\n var childHeight;\n var prevBounds;\n var bounds;\n var actBounds;\n var oddBounds;\n var evenBounds;\n var dimensions = this.getDimensions(layout, shape, x, y, level);\n var info = layout.graphNodes[shape.id];\n var firstChild = layout.nameTable[info.tree.children[0]];\n var h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n var factor = info.tree.type === 'Left' ? -1 : 0;\n var right = x;\n var bottom = y;\n var lev;\n lev = level;\n var i;\n var intersect;\n var type;\n var levels = [];\n var oddLevels = [];\n var canMoveBy;\n var diff;\n for (i = 0; i < info.tree.children.length; i++) {\n if (info.tree.type === 'Alternate') {\n //arrange at both left and right\n type = (i % 2 === 0 && info.tree.children.length > 2) ? 'Left' : 'Right';\n factor = (i % 2 === 0 && info.tree.children.length > 2) ? -1 : 0;\n }\n right = x + this.findOffset(layout, shape, info, type);\n child = layout.nameTable[info.tree.children[i]];\n childWidth = h ? child.actualSize.height : child.actualSize.width;\n childHeight = h ? child.actualSize.width : child.actualSize.height;\n //Update sub tree\n childBounds = this.updateTree(layout, right + factor * childWidth, bottom, child, level + 1, undefined, true);\n childInfo = layout.graphNodes[child.id];\n actBounds = { x: childInfo.x, y: childInfo.y, right: childInfo.x + childWidth, bottom: childInfo.y + childHeight };\n if (i === 0) {\n this.uniteRects(childBounds, actBounds);\n bounds = childBounds;\n }\n else {\n this.uniteRects(bounds, childBounds);\n }\n //Check and adjust the space left from previous subtree/sibling\n if (childInfo.prevBounds && !(info.tree.type === 'Alternate' && i % 2 === 1 && info.tree.children.length > 2)) {\n canMoveBy = canMoveBy !== undefined ? Math.min(childInfo.canMoveBy, canMoveBy) : childInfo.canMoveBy;\n }\n //Max level of the subtree node\n info.maxLevel = Math.max(info.maxLevel || 0, childInfo.maxLevel || 0);\n if (!(info.tree.type === 'Alternate' && info.tree.children.length > 2 && i % 2 === 0)) {\n if (info.tree.type === 'Alternate' && info.tree.children.length > 2) {\n //alternate - arrange children with even index(0,2,4,6,..) at the next level\n bottom = Math.max(childBounds.bottom, prevBounds.bottom) + layout.verticalSpacing / 2;\n }\n else {\n // left/right - arrange next child at the nect level(bottom)\n bottom = childBounds.bottom + layout.verticalSpacing / 2;\n }\n level = info.maxLevel;\n levels.push({ rBounds: actBounds });\n if (!evenBounds) {\n evenBounds = {\n x: childInfo.x, y: childInfo.y, right: childInfo.x + childWidth,\n bottom: childInfo.y + childHeight\n };\n }\n else {\n this.uniteRects(evenBounds, actBounds);\n }\n if (childInfo.levelBounds) {\n levels = levels.concat(childInfo.levelBounds);\n }\n }\n else {\n if (i !== 0) {\n bottom = prevBounds.bottom + layout.verticalSpacing / 2;\n }\n oddLevels.push({ rBounds: actBounds });\n if (childInfo.levelBounds) {\n oddLevels = oddLevels.concat(childInfo.levelBounds);\n }\n }\n if (i === 0) {\n info.firstChild = { x: childInfo.x, canMoveBy: childInfo.canMoveBy, child: child.id };\n }\n if (this.hasChild(layout, child)) {\n if (!info.firstChild || info.firstChild.x >= childInfo.firstChild.x) {\n if (childInfo.firstChild && info.firstChild.canMoveBy < childInfo.canMoveBy) {\n var canMoveBy_1 = info.firstChild.canMoveBy;\n childInfo.canMoveBy = canMoveBy_1;\n layout.graphNodes[info.firstChild.child].canMoveBy = canMoveBy_1;\n info.firstChild.canMoveBy = canMoveBy_1;\n }\n info.firstChild = {\n x: childInfo.firstChild.x, canMoveBy: canMoveBy !== undefined ? canMoveBy : childInfo.canMoveBy,\n child: child.id\n };\n }\n else if (childInfo.firstChild && childInfo.translated && info.firstChild.canMoveBy > childInfo.canMoveBy) {\n info.firstChild.canMoveBy = layout.graphNodes[info.firstChild.child].canMoveBy = childInfo.canMoveBy;\n }\n }\n prevBounds = actBounds;\n }\n //To set level bounds(right most position of levels)\n if (!dontUpdate) {\n if (info.tree.type === 'Alternate' && info.tree.children.length > 2) {\n oddBounds = {\n x: oddLevels[0].rBounds.x, y: oddLevels[0].rBounds.y,\n right: oddLevels[oddLevels.length - 1].rBounds.right, bottom: oddLevels[oddLevels.length - 1].rBounds.bottom\n };\n intersect = this.findIntersectingLevels(layout, oddBounds, lev + 1);\n this.updateRearBounds(layout, null, oddLevels, lev + 1, intersect);\n }\n intersect = this.findIntersectingLevels(layout, evenBounds || bounds, lev + 1);\n this.updateRearBounds(layout, null, evenBounds ? levels : [{ rBounds: bounds }], lev + 1, intersect);\n }\n else {\n info.levelBounds = levels;\n }\n if (!isNaN(canMoveBy)) {\n layout.graphNodes[firstChild.id].canMoveBy = canMoveBy;\n }\n info.childBounds = bounds;\n info.mid = x;\n return bounds;\n };\n HierarchicalTree.prototype.splitChildrenInRows = function (layout, shape) {\n var info;\n info = layout.graphNodes[shape.id];\n var column;\n column = 4;\n var rows = [];\n var childNodes;\n childNodes = info.tree.children.length;\n var children = this.extend(info.tree.children);\n if (info.tree.rows) {\n var count = void 0;\n count = info.tree.children.length;\n var columns = void 0;\n columns = Math.ceil(count / info.tree.rows);\n if (columns % 2 === 0) {\n column = columns;\n }\n else {\n column = columns + 1;\n }\n }\n else if (info.tree.children.length === 3 || info.tree.children.length === 4) {\n column = 2;\n }\n else if (info.tree.children.length === 5) {\n column = 3;\n }\n while (childNodes > 0) {\n rows[rows.length] = children.splice(0, column);\n childNodes -= column;\n if (childNodes < column) {\n column = childNodes;\n }\n }\n return rows;\n };\n HierarchicalTree.prototype.extend = function (temp) {\n var i;\n var dummy = [];\n for (i = 0; i < temp.length; i++) {\n dummy[i] = temp[i];\n }\n return dummy;\n };\n HierarchicalTree.prototype.findOffset = function (layout, shape, info, type) {\n var offset = 0;\n var space = (layout.orientation.indexOf('Left') !== -1) ? shape.actualSize.height :\n shape.actualSize.width;\n var treeType = type ? type : info.tree.type;\n offset = info.tree.offset || 20;\n if (info.tree.type === 'Alternate') {\n if (offset >= layout.horizontalSpacing) {\n offset = layout.horizontalSpacing / 2;\n }\n }\n switch (treeType) {\n case 'Left':\n offset = space / 2 - offset;\n break;\n case 'Right':\n offset = offset + space / 2;\n break;\n }\n return offset;\n };\n HierarchicalTree.prototype.uniteRects = function (rect1, rect2) {\n //Unite two rects\n rect1.x = Math.min(rect1.x, rect2.x);\n rect1.right = Math.max(rect1.right, rect2.right);\n rect1.bottom = Math.max(rect1.bottom, rect2.bottom);\n };\n HierarchicalTree.prototype.spaceLeftFromPrevSubTree = function (layout, shape, bounds) {\n var info;\n info = layout.graphNodes[shape.id];\n var dif;\n var prevBounds;\n var intersect;\n var k;\n var space;\n space = layout.horizontalSpacing;\n //Find the minimum distance to move towards previous sub tree\n for (k = 0; k < info.intersect.length; k++) {\n prevBounds = layout.levels[info.intersect[k]].rBounds;\n dif = bounds.x - (prevBounds.right + space);\n if (info.diff === undefined || dif < info.diff) {\n info.diff = dif;\n info.prevBounds = layout.levels[info.intersect[k]].rBounds;\n }\n }\n };\n HierarchicalTree.prototype.findIntersectingLevels = function (layout, bounds, level, actualLevel) {\n //intersecting with exact Level\n var bnds;\n bnds = { x: bounds.x, y: bounds.y, right: bounds.right, bottom: bounds.bottom };\n bnds.y -= layout.verticalSpacing / 2;\n bnds.bottom += layout.verticalSpacing / 2;\n var intersectingLevels;\n intersectingLevels = [];\n var rBounds;\n var l;\n l = actualLevel !== undefined ? actualLevel : level;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n //Performance - We can consider only the intersecting levels\n do {\n if (rBounds && ((bnds.y < rBounds.y && bnds.bottom > rBounds.y)\n || (bnds.y < rBounds.bottom && rBounds.bottom < bnds.bottom) ||\n bnds.y >= rBounds.y &&\n bnds.bottom <= rBounds.bottom || bnds.y < rBounds.y && bnds.bottom > rBounds.bottom)) {\n var index = 0;\n intersectingLevels.splice(index, 0, l);\n }\n else if (rBounds && rBounds.bottom < bnds.y) {\n break;\n }\n l--;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n } while (l >= 0);\n l = (actualLevel !== undefined ? actualLevel : level) + 1;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n do {\n if (rBounds && ((bnds.y < rBounds.y && bnds.bottom > rBounds.y) ||\n (bnds.y < rBounds.bottom && rBounds.bottom < bnds.bottom) ||\n bnds.y >= rBounds.y && bnds.bottom <= rBounds.bottom || bnds.y < rBounds.y && bnds.bottom > rBounds.bottom)) {\n intersectingLevels.push(l);\n }\n else if (rBounds && rBounds.y > bnds.bottom) {\n break;\n }\n l++;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n } while (l <= layout.levels.length);\n return intersectingLevels;\n };\n HierarchicalTree.prototype.findLevel = function (layout, bounds, level) {\n var bnds;\n bnds = bounds;\n var l;\n l = 0;\n var rBounds;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n while (l < layout.levels.length) {\n if (rBounds && bnds.bottom < rBounds.y) {\n return l;\n }\n else {\n l++;\n }\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n }\n return l;\n };\n HierarchicalTree.prototype.getParentNode = function (layout, node) {\n //Return the first parent node\n return layout.nameTable[layout.nameTable[node.inEdges[0]].sourceID];\n };\n HierarchicalTree.prototype.updateEdges = function (layout, node, depth) {\n var layoutInfo;\n layoutInfo = layout.graphNodes[node.id];\n var j;\n if (node.outEdges && node.outEdges.length && (node.isExpanded || !this.isAnimation)) {\n for (j = 0; j < node.outEdges.length; j++) {\n var edge = void 0;\n edge = layout.nameTable[layout.nameTable[node.outEdges[j]].targetID];\n if (!edge.excludeFromLayout) {\n if (layoutInfo.tree.children.indexOf(edge.id) === -1) {\n layoutInfo.tree.children.push(edge.id);\n }\n if (edge.outEdges && edge.outEdges.length && edge.isExpanded) {\n layoutInfo.tree.hasSubTree = true;\n }\n this.updateEdges(layout, edge, depth + 1);\n }\n }\n }\n //set level info\n layoutInfo.tree.level = depth;\n //By default, orientation is horizontal for nested trees\n if (layoutInfo.tree.hasSubTree) {\n layoutInfo.tree.orientation = 'Horizontal';\n layoutInfo.tree.type = 'Center';\n }\n //Customizing assistants and children collection\n //Performance-Instead of reading the method everytime, we can set once and can reuse that\n if (layout.getLayoutInfo && layout.type === 'OrganizationalChart') {\n layout.getLayoutInfo(node, layoutInfo.tree);\n if (layoutInfo.tree.type === 'Balanced' && layoutInfo.tree.hasSubTree) {\n layoutInfo.tree.type = 'Center';\n layoutInfo.tree.orientation = 'Horizontal';\n }\n }\n if (layout.level && layoutInfo.tree.type !== 'Alternate' && depth >= layout.level) {\n layoutInfo.tree.hasSubTree = false;\n }\n };\n HierarchicalTree.prototype.updateAnchor = function (layout, bounds, viewPort) {\n var node;\n var fixedNode;\n var width = 0;\n var height = 0;\n var mod = 0;\n var viewPortBounds = new Rect(0, 0, viewPort.x, viewPort.y);\n var layoutBounds;\n layoutBounds = layout.bounds ? layout.bounds : viewPortBounds;\n var orientation = layout.orientation;\n //Anchor based on fixed nodes\n if (layout.fixedNode) {\n fixedNode = layout.nameTable[layout.fixedNode];\n width = fixedNode.actualSize.width;\n height = fixedNode.actualSize.height;\n layout.anchorX = fixedNode.offsetX;\n layout.anchorY = fixedNode.offsetY;\n var pivot = fixedNode.pivot;\n layout.anchorX += layout.orientation === 'RightToLeft' ? width * pivot.x : -width * pivot.x;\n layout.anchorY += layout.orientation === 'BottomToTop' ? height * pivot.y : -height * pivot.y;\n node = fixedNode;\n mod = 0;\n while (node.inEdges.length) {\n node = this.getParentNode(layout, node);\n mod += layout.graphNodes[node.id].subTreeTranslation || 0;\n }\n if (layout.orientation.indexOf('Left') !== -1) {\n layout.anchorX -= layout.graphNodes[fixedNode.id].y;\n layout.anchorY -= layout.graphNodes[fixedNode.id].x + mod;\n }\n else {\n layout.anchorX -= layout.graphNodes[fixedNode.id].x + mod;\n layout.anchorY -= layout.graphNodes[fixedNode.id].y;\n }\n }\n else {\n if (orientation === 'TopToBottom' || orientation === 'BottomToTop') {\n switch (layout.horizontalAlignment) {\n case 'Left':\n layout.anchorX = (layoutBounds.x - bounds.x) + layout.margin.left;\n break;\n case 'Right':\n layout.anchorX = layoutBounds.x + layoutBounds.width - layout.margin.right - bounds.right;\n break;\n case 'Auto':\n case 'Center':\n layout.anchorX = layoutBounds.x + layoutBounds.width / 2 - (bounds.x + bounds.right) / 2;\n break;\n }\n switch (layout.verticalAlignment) {\n case 'Auto':\n case 'Top':\n var top_1;\n top_1 = layoutBounds.y + layout.margin.top;\n layout.anchorY = orientation === 'TopToBottom' ? top_1 : bounds.bottom + top_1;\n break;\n case 'Bottom':\n var bottom = void 0;\n bottom = layoutBounds.y + layoutBounds.height - layout.margin.bottom;\n layout.anchorY = orientation === 'TopToBottom' ? bottom - bounds.bottom : bottom;\n break;\n case 'Center':\n var center = void 0;\n center = layoutBounds.y + layoutBounds.height / 2;\n layout.anchorY = layout.orientation === 'TopToBottom' ?\n center - (bounds.y + bounds.bottom) / 2 : center + (bounds.y + bounds.bottom) / 2;\n break;\n }\n }\n else {\n switch (layout.horizontalAlignment) {\n case 'Auto':\n case 'Left':\n var left = void 0;\n left = layoutBounds.x + layout.margin.left;\n layout.anchorX = orientation === 'LeftToRight' ? left : bounds.bottom + left;\n break;\n case 'Right':\n var right = void 0;\n right = layoutBounds.x + layoutBounds.width - layout.margin.right;\n layout.anchorX = orientation === 'LeftToRight' ? right - bounds.bottom : right;\n break;\n case 'Center':\n var center = void 0;\n center = layoutBounds.width / 2 + layoutBounds.x;\n layout.anchorX = layout.orientation === 'LeftToRight' ?\n center - (bounds.y + bounds.bottom) / 2 : center + (bounds.y + bounds.bottom) / 2;\n break;\n }\n switch (layout.verticalAlignment) {\n case 'Top':\n layout.anchorY = layoutBounds.y + layout.margin.top - bounds.x;\n break;\n case 'Auto':\n case 'Center':\n layout.anchorY = layoutBounds.y + layoutBounds.height / 2 - (bounds.right + bounds.x) / 2;\n break;\n case 'Bottom':\n layout.anchorY = layoutBounds.y + layoutBounds.height - layout.margin.bottom - bounds.right;\n break;\n }\n }\n }\n };\n HierarchicalTree.prototype.updateConnectors = function (layout, node, level) {\n var i;\n var info;\n var nodeWidth;\n var nodeHeight;\n var targetWidth;\n var targetHeight;\n var length;\n var offsetLen;\n var points;\n var segments;\n var target;\n var conn;\n var relative;\n var center;\n var layoutProp;\n //Route out edges\n info = layout.graphNodes[node.id];\n var direction;\n if (node.outEdges.length) {\n for (i = 0; i < node.outEdges.length; i++) {\n conn = layout.nameTable[node.outEdges[i]];\n conn.points = [];\n target = layout.nameTable[conn.targetID];\n if (conn.visible) {\n conn.visited = true;\n if (layout.getConnectorSegments) {\n segments = layout.getConnectorSegments(conn);\n }\n else {\n if (info && info.tree.children.indexOf(conn.targetID) !== -1) {\n conn.segments = [];\n if (layout.type === 'OrganizationalChart' && conn.type === 'Orthogonal') {\n this.updateSegments(layout, conn, node, target, i);\n }\n }\n }\n if (target && (target.isExpanded || this.hasChild(layout, target))) {\n this.updateConnectors(layout, target, level + 1);\n }\n }\n }\n }\n if (info && info.tree.assistants.length) {\n //In-Edge routing of assistant nodes\n for (i = 0; i < info.tree.assistants.length; i++) {\n target = layout.nameTable[info.tree.assistants[i]];\n conn = layout.nameTable[target.inEdges[0]];\n this.get3Points(layout, node, target, conn);\n if (target.isExpanded || this.hasChild(layout, target)) {\n this.updateConnectors(layout, target, level + 1);\n }\n }\n }\n };\n HierarchicalTree.prototype.updateSegments = function (layout, conn, node, target, i) {\n var info = layout.graphNodes[node.id];\n //Connector routing - Horizontal layout orientation\n if (info.tree.assistants.length) {\n //Route in-edge of child node, if the parent has assistant\n this.updateSegmentsForHorizontalOrientation(layout, node, target, conn);\n }\n else {\n //Route in-edge of child node\n if (info.tree.orientation === 'Horizontal' && info.tree.type === 'Balanced') {\n this.updateSegmentsForBalancedTree(layout, conn, node, target, i);\n }\n else {\n if (info.tree.orientation === 'Horizontal') {\n this.updateSegmentsForHorizontalOrientation(layout, node, target, conn);\n }\n else {\n if (info.tree.offset < 5) {\n this.get5Points(layout, node, target, conn);\n }\n else {\n this.get3Points(layout, node, target, conn);\n }\n }\n }\n }\n };\n HierarchicalTree.prototype.updateSegmentsForBalancedTree = function (layout, connector, node, target, i) {\n var info = layout.graphNodes[node.id];\n var center;\n var relative;\n if (info.tree.children.length === 5 && i > 2) {\n relative = info.tree.children[1];\n if (isNaN(layout.graphNodes[relative].treeWidth)) {\n layout.graphNodes[relative].treeWidth = layout.nameTable[relative].actualSize.width;\n }\n var factor = i !== 3 ? 1 : -1;\n if (layout.orientation.indexOf('Left') !== -1) {\n center = layout.nameTable[relative].offsetY - layout.graphNodes[relative].treeWidth / 2 -\n (layout.verticalSpacing * factor / 2);\n }\n else {\n center = layout.nameTable[relative].offsetX +\n layout.graphNodes[relative].treeWidth / 2 + (layout.horizontalSpacing * factor) / 2;\n }\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n else {\n if (info.tree.children.length > 5) {\n if (i < 4) {\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n else {\n this.updateSegmentsForHorizontalOrientation(layout, node, target, connector);\n }\n }\n else if (info.tree.children.length === 4) {\n if (i < 2) {\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n else {\n this.updateSegmentsForHorizontalOrientation(layout, node, target, connector);\n }\n }\n else {\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n }\n };\n HierarchicalTree.prototype.get3Points = function (layout, node, target, connector) {\n var points = [];\n var nodeBounds = this.getBounds(node);\n var targetBounds = this.getBounds(target);\n if (layout.orientation.indexOf('Top') !== -1) {\n var startingPoint = layout.orientation.indexOf('Top') === 0 ? nodeBounds.bottomCenter :\n nodeBounds.topCenter;\n var endPoint = node.offsetX > target.offsetX ? targetBounds.middleRight : targetBounds.middleLeft;\n points.push(startingPoint, { x: nodeBounds.bottomCenter.x, y: endPoint.y }, endPoint);\n }\n else {\n var startingPoint = layout.orientation.indexOf('Left') === 0 ? nodeBounds.middleRight :\n nodeBounds.middleLeft;\n var endPoint = node.offsetY > target.offsetY ? targetBounds.bottomCenter : targetBounds.topCenter;\n points.push(startingPoint, { x: targetBounds.bottomCenter.x, y: nodeBounds.middleRight.y }, endPoint);\n }\n this.getSegmentsFromPoints(points, connector);\n };\n HierarchicalTree.prototype.get5Points = function (layout, node, target, connector) {\n var points = [];\n var layoutprop;\n var nodeBounds = this.getBounds(node);\n var targetBounds = this.getBounds(target);\n var info = layout.graphNodes[node.id];\n var startingPoint;\n var endPoint;\n var horizontalSpacing;\n var verticalSpacing;\n if (layout.orientation.indexOf('Top') !== -1) {\n startingPoint = (node.offsetY < target.offsetY) ? nodeBounds.bottomCenter : nodeBounds.topCenter;\n verticalSpacing = layout.verticalSpacing / 4 * ((node.offsetY < target.offsetY) ? 1 : -1);\n horizontalSpacing = layout.horizontalSpacing / 2 * ((node.offsetX > target.offsetX) ? 1 : -1);\n endPoint = (node.offsetX > target.offsetX) ? targetBounds.middleRight : targetBounds.middleLeft;\n points.push(startingPoint, { x: startingPoint.x, y: startingPoint.y + verticalSpacing }, { x: endPoint.x + horizontalSpacing, y: startingPoint.y + verticalSpacing }, { x: endPoint.x + horizontalSpacing, y: endPoint.y }, endPoint);\n }\n else {\n startingPoint = (node.offsetX > target.offsetX) ? nodeBounds.middleLeft : nodeBounds.middleRight;\n endPoint = node.offsetY > target.offsetY ? targetBounds.bottomCenter : targetBounds.topCenter;\n horizontalSpacing = layout.horizontalSpacing / 4 * ((node.offsetX < target.offsetX) ? 1 : -1);\n verticalSpacing = layout.verticalSpacing / 2 * ((node.offsetY > target.offsetY) ? 1 : -1);\n points.push(startingPoint, { x: startingPoint.x + horizontalSpacing, y: startingPoint.y }, { x: startingPoint.x + horizontalSpacing, y: startingPoint.y + verticalSpacing }, { x: endPoint.x, y: startingPoint.y + verticalSpacing }, endPoint);\n }\n this.getSegmentsFromPoints(points, connector);\n };\n HierarchicalTree.prototype.getSegmentsFromPoints = function (points, connector) {\n var segments = [];\n var segment;\n for (var i = 0; i < points.length - 2; i++) {\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(points[i], points[i + 1]);\n segment.length = Point.distancePoints(points[i], points[i + 1]);\n segments.push(segment);\n }\n connector.segments = segments;\n };\n HierarchicalTree.prototype.getSegmentsForMultipleRows = function (layout, node, target, connector) {\n var points = [];\n var segments = [];\n var point;\n var segment;\n var targetBounds = this.getBounds(target);\n var nodeBounds = this.getBounds(node);\n switch (layout.orientation) {\n case 'TopToBottom':\n point = { x: nodeBounds.bottomCenter.x, y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.bottomCenter, point);\n segment.length = Point.distancePoints(nodeBounds.bottomCenter, point);\n segments.push(segment);\n break;\n case 'BottomToTop':\n point = { x: nodeBounds.bottomCenter.x, y: (nodeBounds.topCenter.y - layout.verticalSpacing / 4) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.topCenter, point);\n segment.length = Point.distancePoints(nodeBounds.topCenter, point);\n segments.push(segment);\n break;\n case 'LeftToRight':\n point = { x: (nodeBounds.middleRight.x + layout.verticalSpacing / 4), y: nodeBounds.middleRight.y, };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleRight, point);\n segment.length = Point.distancePoints(nodeBounds.middleRight, point);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point3 = { x: (nodeBounds.middleRight.x + layout.verticalSpacing / 4), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point, point3);\n segment.length = Point.distancePoints(point, point3);\n segments.push(segment);\n }\n break;\n case 'RightToLeft':\n point = { x: (nodeBounds.middleLeft.x - layout.verticalSpacing / 4), y: nodeBounds.middleRight.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleLeft, point);\n segment.length = Point.distancePoints(nodeBounds.middleLeft, point);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point_1 = { x: (nodeBounds.middleLeft.x - layout.verticalSpacing / 4), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point_1, point_1);\n segment.length = Point.distancePoints(point_1, point_1);\n segments.push(segment);\n }\n break;\n }\n connector.segments = segments;\n };\n HierarchicalTree.prototype.updateSegmentsForHorizontalOrientation = function (layout, node, target, connector) {\n var points = [];\n var point2;\n var segment;\n var segments = [];\n var nodeBounds = this.getBounds(node);\n var targetBounds = this.getBounds(target);\n switch (layout.orientation) {\n case 'TopToBottom':\n point2 = { x: nodeBounds.bottomCenter.x, y: (targetBounds.topCenter.y - layout.verticalSpacing / 2) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.bottomCenter, point2);\n segment.length = Point.distancePoints(nodeBounds.bottomCenter, point2);\n segments.push(segment);\n break;\n case 'BottomToTop':\n point2 = { x: nodeBounds.topCenter.x, y: (targetBounds.bottomCenter.y + layout.verticalSpacing / 2) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.topCenter, point2);\n segment.length = Point.distancePoints(nodeBounds.topCenter, point2);\n segments.push(segment);\n break;\n case 'LeftToRight':\n point2 = { x: (targetBounds.middleLeft.x - layout.verticalSpacing / 2), y: nodeBounds.middleRight.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleRight, point2);\n segment.length = Point.distancePoints(nodeBounds.middleRight, point2);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point3 = { x: (targetBounds.middleLeft.x - layout.verticalSpacing / 2), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point2, point3);\n segment.length = Point.distancePoints(point2, point3);\n segments.push(segment);\n }\n break;\n case 'RightToLeft':\n point2 = { x: (targetBounds.middleRight.x + layout.verticalSpacing / 2), y: nodeBounds.middleRight.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleLeft, point2);\n segment.length = Point.distancePoints(nodeBounds.middleLeft, point2);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point = { x: (targetBounds.middleRight.x + layout.verticalSpacing / 2), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point2, point);\n segment.length = Point.distancePoints(point2, point);\n segments.push(segment);\n }\n break;\n }\n connector.segments = segments;\n return points;\n };\n HierarchicalTree.prototype.updateNodes = function (layout, node, mod, update, dx, dy) {\n var i;\n var child;\n var width;\n var height;\n var offsetX;\n var offsetY;\n width = node.actualSize.width;\n height = node.actualSize.height;\n if (!node.excludeFromLayout) {\n offsetX = layout.anchorX;\n offsetY = layout.anchorY;\n /*Performance - instead of checking conditions for every node, we can make the layout related\n conditions once and we can reuse them*/\n if (layout.orientation === 'LeftToRight') {\n offsetX += layout.graphNodes[node.id].y + width / 2;\n offsetY += layout.graphNodes[node.id].x + mod + height / 2;\n }\n else if (layout.orientation === 'RightToLeft') {\n offsetX -= layout.graphNodes[node.id].y + width / 2;\n offsetY += layout.graphNodes[node.id].x + mod + height / 2;\n }\n else if (layout.orientation === 'TopToBottom') {\n offsetX += layout.graphNodes[node.id].x + mod + width / 2;\n offsetY += layout.graphNodes[node.id].y + height / 2;\n }\n else {\n offsetX += layout.graphNodes[node.id].x + mod + width / 2;\n offsetY -= layout.graphNodes[node.id].y + height / 2;\n }\n if (layout.graphNodes) {\n dx = dx ? dx : 0;\n dy = dy ? dy : 0;\n offsetX += dx;\n offsetY += dy;\n if (!this.isAnimation) {\n node.offsetX = offsetX;\n node.offsetY = offsetY;\n }\n }\n var objects = { id: node.id, differenceX: offsetX - node.offsetX, differenceY: offsetY - node.offsetY };\n layout.objects.push(objects);\n var list = void 0;\n list = [];\n if (this.hasChild(layout, node)) {\n for (i = 0; i < layout.graphNodes[node.id].tree.children.length; i++) {\n child = layout.nameTable[layout.graphNodes[node.id].tree.children[i]];\n this.updateNodes(layout, child, mod + (layout.graphNodes[node.id].subTreeTranslation || 0), update, dx, dy);\n list.push(child);\n }\n }\n if (layout.graphNodes[node.id].tree.assistants.length) {\n for (i = 0; i < layout.graphNodes[node.id].tree.assistants.length; i++) {\n child = layout.nameTable[layout.graphNodes[node.id].tree.assistants[i]];\n this.updateNodes(layout, child, mod + (layout.graphNodes[node.id].subTreeTranslation || 0), null, dx, dy);\n }\n }\n }\n };\n return HierarchicalTree;\n}());\nexport { HierarchicalTree };\n","import { Rect } from '../primitives/rect';\nimport { getFunction } from '../utility/base-util';\nimport { HierarchicalTree } from './hierarchical-tree';\n/**\n * Layout for mind-map tree\n */\nvar MindMap = /** @class */ (function () {\n /**\n * Constructor for the organizational chart module.\n * @private\n */\n function MindMap() {\n /**\n * Defines the layout animation\n *\n */\n this.isAnimation = false;\n //constructs the layout module\n }\n /**\n * To destroy the organizational chart\n * @return {void}\n * @private\n */\n MindMap.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n MindMap.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'MindMapChart';\n };\n MindMap.prototype.updateLayout = function (nodes, nameTable, layoutProp, viewPort, uniqueId, root) {\n var isRoot;\n isRoot = this.checkRoot(nodes, layoutProp, uniqueId, root, nameTable);\n if (isRoot) {\n layoutProp.fixedNode = isRoot;\n }\n else {\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n if (!node.excludeFromLayout) {\n if (!node.inEdges || !node.inEdges.length) {\n layoutProp.fixedNode = node.id;\n break;\n }\n }\n }\n }\n var rootNode = nameTable[layoutProp.fixedNode];\n var fistLevelNodes = this.findFirstLevelNodes(rootNode, layoutProp, nameTable);\n var leftNodes = [];\n var rightNodes = [];\n var getMindmapBranch = getFunction(layoutProp.getBranch);\n getMindmapBranch = getMindmapBranch || getFunction(this.getBranch);\n for (var _a = 0, fistLevelNodes_1 = fistLevelNodes; _a < fistLevelNodes_1.length; _a++) {\n var node = fistLevelNodes_1[_a];\n var align = getMindmapBranch(node, fistLevelNodes);\n (align === 'Left') ? leftNodes.push(node) : rightNodes.push(node);\n }\n var viewPortBounds = new Rect(0, 0, viewPort.x, viewPort.y);\n nameTable[layoutProp.fixedNode].offsetX = viewPortBounds.x + viewPortBounds.width / 2;\n nameTable[layoutProp.fixedNode].offsetY = viewPortBounds.y + viewPortBounds.height / 2;\n if (leftNodes.length) {\n this.updateMindMapBranch(nodes, rightNodes, nameTable, layoutProp, viewPort, uniqueId, 'Left');\n }\n if (rightNodes.length) {\n this.updateMindMapBranch(nodes, leftNodes, nameTable, layoutProp, viewPort, uniqueId, 'Right');\n }\n };\n MindMap.prototype.checkRoot = function (nodes, layoutProp, uniqueId, root, nameTable) {\n for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {\n var node = nodes_2[_i];\n if (!node.excludeFromLayout) {\n if (node.data && (node.data[uniqueId].toString() === root || node.data[uniqueId].toString()\n === layoutProp.root)) {\n return node.id;\n }\n else if (!node.data && node.id === layoutProp.root) {\n return node.id;\n }\n }\n }\n return '';\n };\n MindMap.prototype.updateMindMapBranch = function (nodes, excludeNodes, nameTable, layoutProp, viewPort, uniqueId, side) {\n var layout;\n layout = {\n type: 'HierarchicalTree',\n horizontalSpacing: layoutProp.verticalSpacing, verticalSpacing: layoutProp.horizontalSpacing,\n verticalAlignment: layoutProp.verticalAlignment, horizontalAlignment: layoutProp.horizontalAlignment,\n fixedNode: layoutProp.fixedNode, getLayoutInfo: getFunction(layoutProp.getLayoutInfo), margin: layoutProp.margin,\n root: layoutProp.fixedNode\n };\n layout.orientation = (side === 'Left') ? 'LeftToRight' : 'RightToLeft';\n this.excludeFromLayout(excludeNodes, nameTable, true);\n var mapLayout = new HierarchicalTree();\n mapLayout.updateLayout(nodes, nameTable, layout, viewPort, uniqueId);\n this.excludeFromLayout(excludeNodes, nameTable, false);\n };\n MindMap.prototype.getBranch = function (obj, firstLevelNodes) {\n var side;\n var i = firstLevelNodes.indexOf(obj);\n if (i % 2 === 0) {\n side = 'Left';\n }\n else {\n side = 'Right';\n }\n return side;\n };\n MindMap.prototype.excludeFromLayout = function (newCollection, nameTable, exclude) {\n for (var _i = 0, newCollection_1 = newCollection; _i < newCollection_1.length; _i++) {\n var newcol = newCollection_1[_i];\n var node = nameTable[newcol.id];\n node.excludeFromLayout = exclude;\n }\n };\n MindMap.prototype.findFirstLevelNodes = function (node, layout, nameTable) {\n var parentNode;\n var fistLevelNodes = [];\n if (node && node.outEdges.length) {\n for (var _i = 0, _a = node.outEdges; _i < _a.length; _i++) {\n var outEdge = _a[_i];\n fistLevelNodes.push(nameTable[nameTable[outEdge].targetID]);\n }\n }\n return fistLevelNodes;\n };\n return MindMap;\n}());\nexport { MindMap };\n","/**\n * Radial Tree\n */\nvar RadialTree = /** @class */ (function () {\n /**\n * Constructor for the organizational chart module.\n * @private\n */\n function RadialTree() {\n //constructs the layout module\n }\n /**\n * To destroy the organizational chart\n * @return {void}\n * @private\n */\n RadialTree.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n RadialTree.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'RadialTree';\n };\n RadialTree.prototype.updateLayout = function (nodes, nameTable, layoutProp, viewport) {\n var layout = {\n type: layoutProp.type,\n nameTable: nameTable, anchorX: 0, anchorY: 0,\n firstLevelNodes: [], centerNode: null, levels: [], maxLevel: 0, graphNodes: {}, layoutNodes: [],\n orientation: layoutProp.orientation,\n horizontalSpacing: layoutProp.horizontalSpacing, verticalSpacing: layoutProp.verticalSpacing,\n verticalAlignment: layoutProp.verticalAlignment, horizontalAlignment: layoutProp.horizontalAlignment,\n fixedNode: layoutProp.fixedNode, margin: layoutProp.margin,\n bounds: layoutProp.bounds, objects: [], root: layoutProp.root\n };\n this.doLayout(layout, nodes, nameTable, viewport);\n };\n RadialTree.prototype.doLayout = function (layout, nodes, nameTable, viewport) {\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (!node.excludeFromLayout) {\n layout.graphNodes[node.id] = this.setUpLayoutInfo(layout, node);\n if (!node.inEdges || !node.inEdges.length) {\n layout.firstLevelNodes.push(node);\n }\n }\n }\n if (layout.root && nameTable[layout.root]) {\n layout.centerNode = nameTable[layout.root];\n }\n else if (layout.firstLevelNodes.length) {\n layout.centerNode = layout.firstLevelNodes[0];\n layout.root = layout.centerNode.id;\n }\n if (layout.centerNode) {\n this.updateEdges(layout, layout.centerNode, 0, nameTable);\n this.depthFirstAllignment(layout, layout.centerNode, 0, 0);\n this.populateLevels(layout);\n this.transformToCircleLayout(layout);\n this.updateAnchor(layout, viewport);\n this.updateNodes(layout, layout.centerNode, nameTable);\n }\n };\n RadialTree.prototype.updateEdges = function (layout, node, depth, nameTable) {\n var nodeInfo = layout.graphNodes[node.id];\n layout.layoutNodes.push(nodeInfo);\n nodeInfo.level = depth;\n nodeInfo.visited = true;\n layout.maxLevel = Math.max(layout.maxLevel, depth);\n for (var j = 0; j < node.outEdges.length; j++) {\n var edge = nameTable[nameTable[node.outEdges[j]].targetID];\n if (!edge.excludeFromLayout && !edge.visited) {\n nodeInfo.children.push(edge);\n this.updateEdges(layout, edge, depth + 1, nameTable);\n }\n }\n };\n RadialTree.prototype.depthFirstAllignment = function (layout, node, x, y) {\n var newValue;\n var nodeInfo = layout.graphNodes[node.id];\n if (nodeInfo.children.length) {\n y += 300;\n for (var i = 0; i < nodeInfo.children.length; i++) {\n newValue = this.depthFirstAllignment(layout, nodeInfo.children[i], x, y);\n x = newValue.x;\n y = newValue.y;\n }\n nodeInfo.children = nodeInfo.children.sort(function (obj1, obj2) {\n return layout.graphNodes[obj1.id].x - layout.graphNodes[obj2.id].x;\n });\n var min = layout.graphNodes[nodeInfo.children[0].id].min;\n var max = layout.graphNodes[nodeInfo.children[nodeInfo.children.length - 1].id].max;\n nodeInfo.x = min + (max - min) / 2;\n x = max + layout.horizontalSpacing;\n nodeInfo.segmentOffset = max + layout.horizontalSpacing;\n nodeInfo.x -= nodeInfo.width / 2;\n nodeInfo.y -= nodeInfo.height / 2;\n nodeInfo.min = min;\n nodeInfo.max = max;\n if (nodeInfo.x < min && nodeInfo.visited) {\n nodeInfo.x = min;\n x = nodeInfo.x + nodeInfo.width / 2 - (max - min) / 2;\n nodeInfo.visited = false;\n for (var i = 0; i < nodeInfo.children.length; i++) {\n newValue = this.depthFirstAllignment(layout, nodeInfo.children[i], x, y);\n }\n nodeInfo.visited = true;\n x = nodeInfo.x + nodeInfo.width + layout.horizontalSpacing;\n }\n max = layout.graphNodes[nodeInfo.children[nodeInfo.children.length - 1].id].segmentOffset;\n x = x < max ? max : x;\n y -= 300;\n nodeInfo.y = y;\n }\n else {\n nodeInfo.x = x;\n nodeInfo.y = y;\n nodeInfo.min = x;\n nodeInfo.max = x + nodeInfo.width;\n x += nodeInfo.width + layout.horizontalSpacing;\n }\n return { x: x, y: y };\n };\n RadialTree.prototype.populateLevels = function (layout) {\n var stages = [];\n var min = Math.min.apply(Math, layout.layoutNodes.map(function (nodeInfo) { return nodeInfo.x; }));\n var max = Math.max.apply(Math, layout.layoutNodes.map(function (nodeInfo) {\n return nodeInfo.x + nodeInfo.width + layout.horizontalSpacing;\n }));\n var full = max - min;\n layout.levels = [];\n var _loop_1 = function (i) {\n stages = layout.layoutNodes.filter(function (nodeInfo) {\n if (nodeInfo.level === i) {\n return nodeInfo;\n }\n else {\n return null;\n }\n });\n var newlevel = {};\n stages = stages.sort(function (nodeInfo1, nodeInfo2) { return nodeInfo1.x - nodeInfo2.x; });\n newlevel.min = stages[0].x;\n newlevel.max = stages[stages.length - 1].x + stages[stages.length - 1].width + layout.horizontalSpacing;\n newlevel.actualCircumference = 0;\n newlevel.height = 0;\n for (var k = 0; k < stages.length; k++) {\n if (stages[k].height > newlevel.height) {\n newlevel.height = stages[k].height;\n }\n newlevel.actualCircumference += Math.max(stages[k].width, stages[k].height);\n if (k !== stages.length - 1) {\n newlevel.actualCircumference += layout.horizontalSpacing;\n }\n }\n newlevel.circumference = newlevel.max - newlevel.min;\n if (newlevel.actualCircumference < newlevel.circumference) {\n newlevel.circumference = (newlevel.circumference + newlevel.actualCircumference) / 2;\n }\n newlevel.radius = newlevel.circumference / (2 * Math.PI) + newlevel.height;\n newlevel.nodes = [];\n if (i > 1) {\n if (layout.levels[i - 1].radius + layout.levels[i - 1].height >= newlevel.radius) {\n newlevel.radius = layout.levels[i - 1].radius + layout.levels[i - 1].height;\n }\n }\n for (var j = 0; j < stages.length; j++) {\n stages[j].ratio = Math.abs(stages[j].x + stages[j].width / 2 - min) / full;\n newlevel.nodes.push(stages[j]);\n }\n layout.levels.push(newlevel);\n };\n for (var i = 0; i <= layout.maxLevel; i++) {\n _loop_1(i);\n }\n };\n RadialTree.prototype.transformToCircleLayout = function (layout) {\n var root = layout.graphNodes[layout.centerNode.id];\n root.x = 0;\n root.y = 0;\n for (var i = 1; i < layout.levels.length; i++) {\n for (var j = 0; j < layout.levels[i].nodes.length; j++) {\n var nodeInfo = layout.levels[i].nodes[j];\n nodeInfo.x = Math.cos(nodeInfo.ratio * 360 * Math.PI / 180) * (layout.levels[i].radius + layout.verticalSpacing * i);\n nodeInfo.y = Math.sin(nodeInfo.ratio * 360 * Math.PI / 180) * (layout.levels[i].radius + layout.verticalSpacing * i);\n layout.anchorX = Math.min(layout.anchorX, nodeInfo.x);\n layout.anchorY = Math.min(layout.anchorY, nodeInfo.y);\n }\n }\n };\n RadialTree.prototype.updateAnchor = function (layout, viewPort) {\n layout.anchorX = layout.centerNode.offsetX || viewPort.x / 2;\n layout.anchorY = layout.centerNode.offsetY || viewPort.y / 2;\n };\n RadialTree.prototype.updateNodes = function (layout, node, nameTable) {\n var nodeInfo = layout.graphNodes[node.id];\n var offsetX = nodeInfo.x + layout.anchorX;\n var offsetY = nodeInfo.y + layout.anchorY;\n node.offsetX += offsetX;\n node.offsetY += offsetY;\n for (var i = 0; i < nodeInfo.children.length; i++) {\n var childInfo = nodeInfo.children[i];\n this.updateNodes(layout, nameTable[childInfo.id], nameTable);\n }\n };\n RadialTree.prototype.setUpLayoutInfo = function (layout, item) {\n var info = {};\n info.name = item.id;\n info.x = 0;\n info.y = 0;\n info.min = 0;\n info.max = 0;\n info.width = item.actualSize.width;\n info.height = item.actualSize.height;\n info.children = [];\n info.level = 0;\n info.ratio = 0;\n info.visited = false;\n return info;\n };\n return RadialTree;\n}());\nexport { RadialTree };\n","/**\n * Connects diagram objects with layout algorithm\n */\nvar ComplexHierarchicalTree = /** @class */ (function () {\n /**\n * Constructor for the hierarchical tree layout module\n * @private\n */\n function ComplexHierarchicalTree() {\n //constructs the layout module\n }\n /**\n * To destroy the hierarchical tree module\n * @return {void}\n * @private\n */\n ComplexHierarchicalTree.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n ComplexHierarchicalTree.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'ComplexHierarchicalTree';\n };\n ComplexHierarchicalTree.prototype.doLayout = function (nodes, nameTable, layout, viewPort) {\n new HierarchicalLayoutUtil().doLayout(nodes, nameTable, layout, viewPort);\n };\n return ComplexHierarchicalTree;\n}());\nexport { ComplexHierarchicalTree };\n/**\n * Utility that arranges the nodes in hierarchical structure\n */\nvar HierarchicalLayoutUtil = /** @class */ (function () {\n function HierarchicalLayoutUtil() {\n this.nameTable = {};\n this.crossReduction = new CrossReduction();\n }\n /**\n * Defines a vertex that is equivalent to a node object\n */\n HierarchicalLayoutUtil.prototype.createVertex = function (node, value, x, y, width, height) {\n var geometry = { x: x, y: y, width: width, height: height };\n var vertex = {\n value: value, geometry: geometry, name: value, vertex: true,\n inEdges: node.inEdges.slice(), outEdges: node.outEdges.slice()\n };\n return vertex;\n };\n /**\n * Initializes the edges collection of the vertices\n * @private\n */\n HierarchicalLayoutUtil.prototype.getEdges = function (node) {\n var edges = [];\n if (node) {\n for (var i = 0; node.inEdges.length > 0 && i < node.inEdges.length; i++) {\n edges.push(this.nameTable[node.inEdges[i]]);\n }\n for (var i = 0; node.outEdges.length > 0 && i < node.outEdges.length; i++) {\n edges.push(this.nameTable[node.outEdges[i]]);\n }\n }\n return edges;\n };\n /**\n * Finds the root nodes of the layout\n */\n HierarchicalLayoutUtil.prototype.findRoots = function (vertices) {\n var roots = [];\n var best = null;\n var maxDiff = -100000;\n for (var _i = 0, _a = Object.keys(vertices); _i < _a.length; _i++) {\n var i = _a[_i];\n var cell = vertices[i];\n var conns = this.getEdges(cell);\n var outEdges = 0;\n var inEdges = 0;\n for (var k = 0; k < conns.length; k++) {\n var src = this.getVisibleTerminal(conns[k], true);\n if (src.name === cell.name) {\n outEdges++;\n }\n else {\n inEdges++;\n }\n }\n if (inEdges === 0 && outEdges > 0) {\n roots.push(cell);\n }\n var diff = outEdges - inEdges;\n if (diff > maxDiff) {\n maxDiff = diff;\n best = cell;\n }\n }\n if (roots.length === 0 && best != null) {\n roots.push(best);\n }\n return roots;\n };\n /**\n * Returns the source/target vertex of the given connector\n * @private\n */\n HierarchicalLayoutUtil.prototype.getVisibleTerminal = function (edge, source) {\n var terminalCache = this.nameTable[edge.targetID];\n if (source) {\n terminalCache = this.nameTable[edge.sourceID];\n }\n for (var i = 0; i < this.vertices.length; i++) {\n if (this.vertices[i].name === terminalCache.id) {\n return this.vertices[i];\n }\n }\n return null;\n };\n /**\n * Traverses each sub tree, ensures there is no cycle in traversing\n * @private\n */\n HierarchicalLayoutUtil.prototype.traverse = function (vertex, directed, edge, currentComp, hierarchyVertices, filledVertices) {\n if (vertex != null) {\n var vertexID = vertex.name;\n if ((filledVertices == null ? true : filledVertices[vertexID] != null)) {\n if (currentComp[vertexID] == null) {\n currentComp[vertexID] = vertex;\n }\n if (filledVertices != null) {\n delete filledVertices[vertexID];\n }\n var edges = this.getEdges(vertex);\n var edgeIsSource = [];\n for (var i = 0; i < edges.length; i++) {\n edgeIsSource[i] = this.getVisibleTerminal(edges[i], true) === vertex;\n }\n for (var i = 0; i < edges.length; i++) {\n if (!directed || edgeIsSource[i]) {\n var next = this.getVisibleTerminal(edges[i], !edgeIsSource[i]);\n var netCount = 1;\n for (var j = 0; j < edges.length; j++) {\n if (j === i) {\n continue;\n }\n else {\n var isSource2 = edgeIsSource[j];\n var otherTerm = this.getVisibleTerminal(edges[j], !isSource2);\n if (otherTerm === next) {\n if (isSource2) {\n netCount++;\n }\n else {\n netCount--;\n }\n }\n }\n }\n if (netCount >= 0) {\n currentComp = this.traverse(next, directed, edges[i], currentComp, hierarchyVertices, filledVertices);\n }\n }\n }\n }\n else {\n if (currentComp[vertexID] == null) {\n // We've seen this vertex before, but not in the current component This component and the one it's in need to be merged\n for (var i = 0; i < hierarchyVertices.length; i++) {\n var comp = hierarchyVertices[i];\n if (comp[vertexID] != null) {\n for (var _i = 0, _a = Object.keys(comp); _i < _a.length; _i++) {\n var key = _a[_i];\n currentComp[key] = comp[key];\n }\n // Remove the current component from the hierarchy set\n hierarchyVertices.splice(i, 1);\n return currentComp;\n }\n }\n }\n }\n }\n return currentComp;\n };\n /**\n * Returns the bounds of the given vertices\n */\n HierarchicalLayoutUtil.prototype.getModelBounds = function (nodes) {\n nodes = nodes.slice();\n var rect = null;\n var rect1 = null;\n for (var i = 0; i < nodes.length; i++) {\n rect = nodes[i].geometry;\n if (rect1) {\n var right = Math.max(rect1.x + rect1.width, rect.x + rect.width);\n var bottom = Math.max(rect1.y + rect1.height, rect.y + rect.height);\n rect1.x = Math.min(rect1.x, rect.x);\n rect1.y = Math.min(rect1.y, rect.y);\n rect1.width = right - rect1.x;\n rect1.height = bottom - rect1.y;\n }\n else {\n rect1 = { x: rect.x, y: rect.y, width: rect.width, height: rect.height };\n }\n }\n return rect1;\n };\n /**\n * Initializes the layouting process\n * @private\n */\n HierarchicalLayoutUtil.prototype.doLayout = function (nodes, nameTable, layoutProp, viewPort) {\n this.nameTable = nameTable;\n var layout = {\n horizontalSpacing: layoutProp.horizontalSpacing, verticalSpacing: layoutProp.verticalSpacing,\n orientation: layoutProp.orientation, marginX: layoutProp.margin.left, marginY: layoutProp.margin.top\n };\n if (layout.orientation === 'BottomToTop') {\n layout.marginY = -layoutProp.margin.top;\n }\n else if (layout.orientation === 'RightToLeft') {\n layout.marginX = -layoutProp.margin.left;\n }\n this.vertices = [];\n var filledVertexSet = {};\n for (var i = 0; i < nodes.length; i++) {\n var node = this.createVertex(nodes[i], nodes[i].id, 0, 0, nodes[i].actualSize.width, nodes[i].actualSize.height);\n this.vertices.push(node);\n filledVertexSet[node.name] = node;\n }\n var hierarchyVertices = [];\n var candidateRoots;\n candidateRoots = this.findRoots(filledVertexSet);\n for (var i = 0; i < candidateRoots.length; i++) {\n var vertexSet = {};\n hierarchyVertices.push(vertexSet);\n this.traverse(candidateRoots[i], true, null, vertexSet, hierarchyVertices, filledVertexSet);\n }\n var limit = { marginX: 0, marginY: 0 };\n for (var i = 0; i < hierarchyVertices.length; i++) {\n var vertexSet = hierarchyVertices[i];\n var tmp = [];\n for (var _i = 0, _a = Object.keys(vertexSet); _i < _a.length; _i++) {\n var key = _a[_i];\n tmp.push(vertexSet[key]);\n }\n var model = new MultiParentModel(this, tmp, candidateRoots, layout);\n this.cycleStage(model);\n this.layeringStage(model);\n this.crossingStage(model);\n limit = this.placementStage(model, limit.marginX, limit.marginY);\n }\n var modelBounds = this.getModelBounds(this.vertices);\n var trnsX = (viewPort.x - modelBounds.width) / 2;\n for (var i = 0; i < this.vertices.length; i++) {\n var clnode = this.vertices[i];\n if (clnode) { //Check what is node.source/node.target - && !clnode.source && !clnode.target) {\n var dnode = this.nameTable[clnode.name];\n dnode.offsetX = 0;\n dnode.offsetY = 0;\n //initialize layout\n var dx = (clnode.geometry.x - (dnode.offsetX - (dnode.actualSize.width / 2))) + layout.marginX;\n var dy = (clnode.geometry.y - (dnode.offsetY - (dnode.actualSize.height / 2))) + layout.marginY;\n var x = dx;\n var y = dy;\n if (layout.orientation === 'BottomToTop') {\n y = modelBounds.height - dy;\n }\n else if (layout.orientation === 'RightToLeft') {\n x = modelBounds.width - dx;\n }\n x += trnsX;\n dnode.offsetX += x - dnode.offsetX;\n dnode.offsetY += y - dnode.offsetY;\n }\n }\n };\n /**\n * Handles positioning the nodes\n */\n HierarchicalLayoutUtil.prototype.placementStage = function (model, marginX, marginY) {\n var placementStage = this.coordinateAssignment(marginX, marginY, parent, model);\n placementStage.model = model;\n placementStage.widestRankValue = null;\n this.placementStageExecute(placementStage);\n return {\n marginX: placementStage.marginX + model.layout.horizontalSpacing,\n marginY: placementStage.marginY + model.layout.verticalSpacing\n };\n };\n /**\n * Initializes the layout properties for positioning\n */\n HierarchicalLayoutUtil.prototype.coordinateAssignment = function (marginX, marginY, parent, model) {\n var plalementChange = {};\n if (model.layout.orientation === 'TopToBottom' || model.layout.orientation === 'BottomToTop') {\n plalementChange.horizontalSpacing = model.layout.horizontalSpacing;\n plalementChange.verticalSpacing = model.layout.verticalSpacing;\n }\n else {\n plalementChange.horizontalSpacing = model.layout.verticalSpacing;\n plalementChange.verticalSpacing = model.layout.horizontalSpacing;\n }\n plalementChange.orientation = 'north';\n //Removed the conditions here. So check here in case of any issue\n plalementChange.marginX = plalementChange.marginX = marginX;\n plalementChange.marginY = plalementChange.marginY = marginY;\n return plalementChange;\n };\n /**\n * Calculate the largest size of the node either height or width depends upon the layoutorientation\n */\n HierarchicalLayoutUtil.prototype.calculateWidestRank = function (plalementChange, graph, model) {\n var isHorizontal = false;\n if (plalementChange.model.layout.orientation === 'LeftToRight' || plalementChange.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n var offset = -plalementChange.verticalSpacing;\n var lastRankMaxCellSize = 0.0;\n plalementChange.rankSizes = [];\n plalementChange.rankOffset = [];\n for (var rankValue = model.maxRank; rankValue >= 0; rankValue--) {\n var maxCellSize = 0.0;\n var rank = model.ranks[rankValue];\n var localOffset = isHorizontal ? plalementChange.marginY : plalementChange.marginX;\n for (var i = 0; i < rank.length; i++) {\n var node = rank[i];\n if (this.crossReduction.isVertex(node)) {\n var vertex = node;\n if (vertex.cell && (vertex.cell.inEdges || vertex.cell.outEdges)) {\n var obj = this.nameTable[vertex.cell.name];\n vertex.width = obj.actualSize.width;\n vertex.height = obj.actualSize.height;\n maxCellSize = Math.max(maxCellSize, (isHorizontal ? vertex.width : vertex.height));\n }\n }\n else {\n if (node) {\n var edge = node;\n var numEdges = 1;\n if (edge.edges != null) {\n numEdges = edge.edges.length;\n }\n node.width = (numEdges - 1) * 10;\n }\n }\n if (isHorizontal) {\n if (!node.height) {\n node.height = 0;\n }\n }\n // Set the initial x-value as being the best result so far\n localOffset += (isHorizontal ? node.height : node.width) / 2.0;\n this.setXY(node, rankValue, localOffset, isHorizontal ? true : false);\n this.setTempVariable(node, rankValue, localOffset);\n localOffset += ((isHorizontal ? node.height : node.width) / 2.0) + plalementChange.horizontalSpacing;\n if (localOffset > plalementChange.widestRankValue) {\n plalementChange.widestRankValue = localOffset;\n plalementChange.widestRank = rankValue;\n }\n plalementChange.rankSizes[rankValue] = localOffset;\n }\n plalementChange.rankOffset[rankValue] = offset;\n var distanceToNextRank = maxCellSize / 2.0 + lastRankMaxCellSize / 2.0 + plalementChange.verticalSpacing;\n lastRankMaxCellSize = maxCellSize;\n if (plalementChange.orientation === 'north' || plalementChange.orientation === 'west') {\n offset += distanceToNextRank;\n }\n else {\n offset -= distanceToNextRank;\n }\n for (var i = 0; i < rank.length; i++) {\n var cell = rank[i];\n this.setXY(cell, rankValue, offset, isHorizontal ? false : true);\n }\n }\n };\n /**\n * Sets the temp position of the node on the layer\n * @private\n */\n HierarchicalLayoutUtil.prototype.setTempVariable = function (node, layer, value) {\n if (this.crossReduction.isVertex(node)) {\n node.temp[0] = value;\n }\n else {\n node.temp[layer - node.minRank - 1] = value;\n }\n };\n /**\n * Sets the position of the vertex\n * @private\n */\n HierarchicalLayoutUtil.prototype.setXY = function (node, layer, value, isY) {\n if (node && node.cell) {\n if (node.cell.inEdges || node.cell.outEdges) {\n if (isY) {\n node.y[0] = value;\n }\n else {\n node.x[0] = value;\n }\n }\n else {\n if (isY) {\n node.y[layer - node.minRank - 1] = value;\n }\n else {\n node.x[layer - node.minRank - 1] = value;\n }\n }\n }\n };\n /**\n * Sets geometry position of the layout node on the layout model\n */\n HierarchicalLayoutUtil.prototype.rankCoordinates = function (stage, rankValue, graph, model) {\n var isHorizontal = false;\n if (stage.model.layout.orientation === 'LeftToRight' || stage.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n var rank = model.ranks[rankValue];\n var maxOffset = 0.0;\n var localOffset = (isHorizontal ? stage.marginY : stage.marginX) + (stage.widestRankValue - stage.rankSizes[rankValue]) / 2;\n for (var i = 0; i < rank.length; i++) {\n var node = rank[i];\n if (this.crossReduction.isVertex(node)) {\n var obj = this.nameTable[node.cell.name];\n node.width = obj.actualSize.width;\n node.height = obj.actualSize.height;\n maxOffset = Math.max(maxOffset, node.height);\n }\n else {\n var edge = node;\n var numEdges = 1;\n if (edge.edges != null) {\n numEdges = edge.edges.length;\n }\n if (isHorizontal) {\n node.height = (numEdges - 1) * 10;\n }\n else {\n node.width = (numEdges - 1) * 10;\n }\n }\n var size = (isHorizontal ? node.height : node.width) / 2.0;\n localOffset += size;\n this.setXY(node, rankValue, localOffset, isHorizontal ? true : false);\n this.setTempVariable(node, rankValue, localOffset);\n localOffset += (size + stage.horizontalSpacing);\n }\n };\n /**\n * sets the layout in an initial positioning.it will arange all the ranks as much as possible\n */\n HierarchicalLayoutUtil.prototype.initialCoords = function (plalementChange, facade, model) {\n this.calculateWidestRank(plalementChange, facade, model);\n // Reverse sweep direction each time from widest rank \n for (var i = plalementChange.widestRank; i >= 0; i--) {\n if (i < model.maxRank) {\n this.rankCoordinates(plalementChange, i, facade, model);\n }\n }\n for (var i = plalementChange.widestRank + 1; i <= model.maxRank; i++) {\n if (i > 0) {\n this.rankCoordinates(plalementChange, i, facade, model);\n }\n }\n };\n /**\n * Checks whether the given node is an ancestor\n * @private\n */\n HierarchicalLayoutUtil.prototype.isAncestor = function (node, otherNode) {\n // Firstly, the hash code of this node needs to be shorter than the other node\n if (otherNode != null && node.hashCode != null && otherNode.hashCode != null\n && node.hashCode.length < otherNode.hashCode.length) {\n if (node.hashCode === otherNode.hashCode) {\n return true;\n }\n if (node.hashCode == null || node.hashCode == null) {\n return false;\n }\n for (var i = 0; i < node.hashCode.length; i++) {\n if (node.hashCode[i] !== otherNode.hashCode[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n /**\n * initializes the sorter object\n */\n HierarchicalLayoutUtil.prototype.weightedCellSorter = function (cell, weightedValue) {\n var weightedCellSorter = {};\n weightedCellSorter.cell = cell ? cell : null;\n weightedCellSorter.weightedValue = weightedValue ? weightedValue : 0;\n weightedCellSorter.visited = false;\n weightedCellSorter.rankIndex = null;\n return weightedCellSorter;\n };\n /**\n * Performs one node positioning in both directions\n */\n HierarchicalLayoutUtil.prototype.minNode = function (plalementChange, model) {\n var nodeList = [];\n var map = { map: {} };\n var rank = [];\n for (var i = 0; i <= model.maxRank; i++) {\n rank[i] = model.ranks[i];\n for (var j = 0; j < rank[i].length; j++) {\n var node = rank[i][j];\n var nodeWrapper = this.weightedCellSorter(node, i);\n nodeWrapper.rankIndex = j;\n nodeWrapper.visited = true;\n nodeList.push(nodeWrapper);\n model.setDictionaryForSorter(map, node, nodeWrapper, true);\n }\n }\n var maxTries = nodeList.length * 10;\n var count = 0;\n var tolerance = 1;\n while (nodeList.length > 0 && count <= maxTries) {\n var cellWrapper = nodeList.shift();\n var cell = cellWrapper.cell;\n var rankValue = cellWrapper.weightedValue;\n var rankIndex = cellWrapper.rankIndex;\n var nextLayerConnectedCells = this.crossReduction.getConnectedCellsOnLayer(cell, rankValue);\n var previousLayerConnectedCells = this.crossReduction.getConnectedCellsOnLayer(cell, rankValue, true);\n var nextConnectedCount = nextLayerConnectedCells.length;\n var prevConnectedCount = previousLayerConnectedCells.length;\n var medianNextLevel = this.medianXValue(plalementChange, nextLayerConnectedCells, rankValue + 1);\n var medianPreviousLevel = this.medianXValue(plalementChange, previousLayerConnectedCells, rankValue - 1);\n var numConnectedNeighbours = nextConnectedCount + prevConnectedCount;\n var currentPosition = this.crossReduction.getTempVariable(cell, rankValue);\n var cellMedian = currentPosition;\n if (numConnectedNeighbours > 0) {\n cellMedian = (medianNextLevel * nextConnectedCount + medianPreviousLevel * prevConnectedCount) / numConnectedNeighbours;\n }\n var positionChanged = false;\n var tempValue = undefined;\n if (cellMedian < currentPosition - tolerance) {\n if (rankIndex === 0) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else {\n var leftCell = rank[rankValue][rankIndex - 1];\n var leftLimit = this.crossReduction.getTempVariable(leftCell, rankValue);\n leftLimit = leftLimit + leftCell.width / 2 + plalementChange.intraCellSpacing + cell.width / 2;\n if (leftLimit < cellMedian) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else if (leftLimit < this.crossReduction.getTempVariable(cell, rankValue) - tolerance) {\n tempValue = leftLimit;\n positionChanged = true;\n }\n }\n }\n else if (cellMedian > currentPosition + tolerance) {\n var rankSize = rank[rankValue].length;\n if (rankIndex === rankSize - 1) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else {\n var rightCell = rank[rankValue][rankIndex + 1];\n var rightLimit = this.crossReduction.getTempVariable(rightCell, rankValue);\n rightLimit = rightLimit - rightCell.width / 2 - plalementChange.intraCellSpacing - cell.width / 2;\n if (rightLimit > cellMedian) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else if (rightLimit > this.crossReduction.getTempVariable(cell, rankValue) + tolerance) {\n tempValue = rightLimit;\n positionChanged = true;\n }\n }\n }\n if (positionChanged) {\n this.setTempVariable(cell, rankValue, tempValue);\n // Add connected nodes to map and list\n this.updateNodeList(nodeList, map, nextLayerConnectedCells, model);\n this.updateNodeList(nodeList, map, previousLayerConnectedCells, model);\n }\n if (this.crossReduction.isVertex(cellWrapper.cell)) {\n cellWrapper.visited = false;\n }\n count++;\n }\n };\n /**\n * Updates the ndoes collection\n */\n HierarchicalLayoutUtil.prototype.updateNodeList = function (nodeList, map, collection, model) {\n for (var i = 0; i < collection.length; i++) {\n var connectedCell = collection[i];\n var connectedCellWrapper = model.getDictionaryForSorter(map, connectedCell);\n if (connectedCellWrapper != null) {\n if (connectedCellWrapper.visited === false) {\n connectedCellWrapper.visited = true;\n nodeList.push(connectedCellWrapper);\n }\n }\n }\n };\n /**\n * Calculates the node position of the connected cell on the specified rank\n */\n HierarchicalLayoutUtil.prototype.medianXValue = function (plalementChange, connectedCells, rankValue) {\n if (connectedCells.length === 0) {\n return 0;\n }\n var medianValues = [];\n for (var i = 0; i < connectedCells.length; i++) {\n medianValues[i] = this.crossReduction.getTempVariable(connectedCells[i], rankValue);\n }\n medianValues.sort(function (a, b) {\n return a - b;\n });\n if (connectedCells.length % 2 === 1) {\n return medianValues[Math.floor(connectedCells.length / 2)];\n }\n else {\n var medianPoint = connectedCells.length / 2;\n var leftMedian = medianValues[medianPoint - 1];\n var rightMedian = medianValues[medianPoint];\n return ((leftMedian + rightMedian) / 2);\n }\n };\n /**\n * Updates the geometry of the vertices\n */\n HierarchicalLayoutUtil.prototype.placementStageExecute = function (plalementChange) {\n var isHorizontal = false;\n if (plalementChange.model.layout.orientation === 'LeftToRight' || plalementChange.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n plalementChange.jettyPositions = {};\n var model = plalementChange.model;\n isHorizontal ? plalementChange.currentYDelta = 0.0 : plalementChange.currentXDelta = 0.0;\n this.initialCoords(plalementChange, { model: model }, model);\n this.minNode(plalementChange, model);\n var bestOffsetDelta = 100000000.0;\n if (!plalementChange.maxIterations) {\n plalementChange.maxIterations = 8;\n }\n for (var i = 0; i < plalementChange.maxIterations; i++) {\n // if the total offset is less for the current positioning, \n //there are less heavily angled edges and so the current positioning is used\n if ((isHorizontal ? plalementChange.currentYDelta : plalementChange.currentXDelta) < bestOffsetDelta) {\n for (var j = 0; j < model.ranks.length; j++) {\n var rank = model.ranks[j];\n for (var k = 0; k < rank.length; k++) {\n var cell = rank[k];\n this.setXY(cell, j, this.crossReduction.getTempVariable(cell, j), isHorizontal ? true : false);\n }\n }\n bestOffsetDelta = isHorizontal ? plalementChange.currentYDelta : plalementChange.currentXDelta;\n }\n isHorizontal ? plalementChange.currentYDelta = 0 : plalementChange.currentXDelta = 0;\n }\n this.setCellLocations(plalementChange, model);\n };\n /**\n * sets the cell position in the after the layout operation\n */\n HierarchicalLayoutUtil.prototype.setCellLocations = function (plalementChange, model) {\n var vertices = this.getValues(model.vertexMapper);\n for (var i = 0; i < vertices.length; i++) {\n this.setVertexLocation(plalementChange, vertices[i]);\n }\n };\n /**\n * used to specify the geometrical position of the layout model cell\n */\n HierarchicalLayoutUtil.prototype.garphModelsetVertexLocation = function (plalementChange, cell, x, y) {\n var model = plalementChange.model;\n var geometry = cell.geometry;\n var result = null;\n if (geometry != null) {\n result = { x: x, y: y, width: geometry.width, height: geometry.height };\n if (geometry.x !== x || geometry.y !== y) {\n cell.geometry = result;\n }\n }\n return result;\n };\n /**\n * set the position of the specified node\n */\n HierarchicalLayoutUtil.prototype.setVertexLocation = function (plalementChange, cell) {\n var isHorizontal = false;\n if (plalementChange.model.layout.orientation === 'LeftToRight' || plalementChange.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n var realCell = cell.cell;\n var positionX = cell.x[0] - cell.width / 2;\n var positionY = cell.y[0] - cell.height / 2;\n this.garphModelsetVertexLocation(plalementChange, realCell, positionX, positionY);\n if (isHorizontal) {\n if (!plalementChange.marginY) {\n plalementChange.marginY = 0;\n }\n plalementChange.marginY = Math.max(plalementChange.marginY, positionY + cell.height);\n }\n else {\n if (!plalementChange.marginX) {\n plalementChange.marginX = 0;\n }\n plalementChange.marginX = Math.max(plalementChange.marginX, positionX + cell.width);\n }\n };\n /**\n * get the specific value from the key value pair\n */\n HierarchicalLayoutUtil.prototype.getValues = function (mapper) {\n var list = [];\n if (mapper.map) {\n for (var _i = 0, _a = Object.keys(mapper.map); _i < _a.length; _i++) {\n var key = _a[_i];\n list.push(mapper.map[key]);\n }\n }\n return list;\n };\n /**\n * Checks and reduces the crosses in between line segments\n */\n HierarchicalLayoutUtil.prototype.crossingStage = function (model) {\n this.crossReduction.execute(model);\n };\n /**\n * Initializes the ranks of the vertices\n */\n HierarchicalLayoutUtil.prototype.layeringStage = function (model) {\n this.initialRank(model);\n this.fixRanks(model);\n };\n /**\n * determine the initial rank for the each vertex on the relevent direction\n */\n HierarchicalLayoutUtil.prototype.initialRank = function (model) {\n var startNodes = model.startNodes;\n var internalNodes = model.getDictionaryValues(model.vertexMapper);\n var startNodesCopy = startNodes.slice();\n while (startNodes.length > 0) {\n var internalNode = startNodes[0];\n var layerDeterminingEdges = internalNode.connectsAsTarget;\n var edgesToBeMarked = internalNode.connectsAsSource;\n var allEdgesScanned = true;\n var minimumLayer = 100000000;\n for (var i = 0; i < layerDeterminingEdges.length; i++) {\n var internalEdge = layerDeterminingEdges[i];\n if (internalEdge.temp[0] === 5270620) {\n // This edge has been scanned, get the layer of the node on the other end\n var otherNode = internalEdge.source;\n minimumLayer = Math.min(minimumLayer, otherNode.temp[0] - 1);\n }\n else {\n allEdgesScanned = false;\n break;\n }\n }\n // If all edge have been scanned, assign the layer, mark all edges in the other direction and remove from the nodes list\n if (allEdgesScanned) {\n internalNode.temp[0] = minimumLayer;\n if (!model.maxRank) {\n model.maxRank = 100000000;\n }\n model.maxRank = Math.min(model.maxRank, minimumLayer);\n if (edgesToBeMarked != null) {\n for (var i = 0; i < edgesToBeMarked.length; i++) {\n var internalEdge = edgesToBeMarked[i];\n internalEdge.temp[0] = 5270620;\n // Add node on other end of edge to LinkedList of nodes to be analysed\n var otherNode = internalEdge.target;\n // Only add node if it hasn't been assigned a layer\n if (otherNode.temp[0] === -1) {\n startNodes.push(otherNode);\n // Mark this other node as neither being unassigned nor assigned \n //so it isn't added to this list again, but it's layer isn't used in any calculation.\n otherNode.temp[0] = -2;\n }\n }\n }\n startNodes.shift();\n }\n else {\n // Not all the edges have been scanned, get to the back of the class and put the dunces cap on\n var removedCell = startNodes.shift();\n startNodes.push(internalNode);\n if (removedCell === internalNode && startNodes.length === 1) {\n // This is an error condition, we can't get out of this loop. \n //It could happen for more than one node but that's a lot harder to detect. Log the error\n break;\n }\n }\n }\n for (var i = 0; i < internalNodes.length; i++) {\n internalNodes[i].temp[0] -= model.maxRank;\n }\n for (var i = 0; i < startNodesCopy.length; i++) {\n var internalNode = startNodesCopy[i];\n var currentMaxLayer = 0;\n var layerDeterminingEdges = internalNode.connectsAsSource;\n for (var j = 0; j < layerDeterminingEdges.length; j++) {\n var internalEdge = layerDeterminingEdges[j];\n var otherNode = internalEdge.target;\n internalNode.temp[0] = Math.max(currentMaxLayer, otherNode.temp[0] + 1);\n currentMaxLayer = internalNode.temp[0];\n }\n }\n model.maxRank = 100000000 - model.maxRank;\n };\n /**\n * used to set the optimum value of each vertex on the layout\n */\n HierarchicalLayoutUtil.prototype.fixRanks = function (model) {\n model.fixRanks();\n };\n /**\n * used to determine any cyclic stage have been created on the layout model\n */\n HierarchicalLayoutUtil.prototype.cycleStage = function (model) {\n var seenNodes = {};\n model.startNodes = [];\n var unseenNodesArray = model.getDictionaryValues(model.vertexMapper);\n var unseenNodes = [];\n for (var i = 0; i < unseenNodesArray.length; i++) {\n unseenNodesArray[i].temp[0] = -1;\n unseenNodes[unseenNodesArray[i].id] = unseenNodesArray[i];\n }\n var rootsArray = null;\n if (model.roots != null) {\n var modelRoots = model.roots;\n rootsArray = [];\n for (var i = 0; i < modelRoots.length; i++) {\n rootsArray[i] = model.getDictionary(model.vertexMapper, modelRoots[i]);\n if (rootsArray[i] != null) {\n model.startNodes.push(rootsArray[i]);\n }\n }\n }\n model.visit('removeParentConnection', rootsArray, true, null, { seenNodes: seenNodes, unseenNodes: unseenNodes });\n var seenNodesCopy = model.clone(seenNodes, null, true);\n model.visit('removeNodeConnection', unseenNodes, true, seenNodesCopy, { seenNodes: seenNodes, unseenNodes: unseenNodes });\n };\n /**\n * removes the edge from the given collection\n * @private\n */\n HierarchicalLayoutUtil.prototype.remove = function (obj, array) {\n var index = array.indexOf(obj);\n if (index !== -1) {\n array.splice(index, 1);\n }\n return obj;\n };\n /**\n * Inverts the source and target of an edge\n * @private\n */\n HierarchicalLayoutUtil.prototype.invert = function (connectingEdge, layer) {\n var temp = connectingEdge.source;\n connectingEdge.source = connectingEdge.target;\n connectingEdge.target = temp;\n connectingEdge.isReversed = !connectingEdge.isReversed;\n };\n /**\n * used to get the edges between the given source and target\n * @private\n */\n HierarchicalLayoutUtil.prototype.getEdgesBetween = function (source, target, directed) {\n directed = (directed != null) ? directed : false;\n var edges = this.getEdges(source);\n var result = [];\n for (var i = 0; i < edges.length; i++) {\n var src = this.getVisibleTerminal(edges[i], true);\n var trg = this.getVisibleTerminal(edges[i], false);\n if ((src === source && trg === target) || (!directed && src === target && trg === source)) {\n result.push(edges[i]);\n }\n }\n return result;\n };\n return HierarchicalLayoutUtil;\n}());\n/**\n * Handles position the objects in a hierarchical tree structure\n */\nvar MultiParentModel = /** @class */ (function () {\n function MultiParentModel(layout, vertices, roots, dlayout) {\n this.multiObjectIdentityCounter = 0;\n //used to count the no of times the parent have been used\n this.dfsCount = 0;\n this.hierarchicalUtil = new HierarchicalLayoutUtil();\n this.roots = roots;\n this.vertexMapper = { map: {} };\n var internalVertices = [];\n this.layout = dlayout;\n this.maxRank = 100000000;\n this.hierarchicalLayout = layout;\n this.createInternalCells(layout, vertices, internalVertices);\n for (var i = 0; i < vertices.length; i++) {\n var edges = internalVertices[i].connectsAsSource;\n for (var j = 0; j < edges.length; j++) {\n var internalEdge = edges[j];\n var realEdges = internalEdge.edges;\n if (realEdges != null && realEdges.length > 0) {\n var realEdge = realEdges[0];\n var targetCell = layout.getVisibleTerminal(realEdge, false);\n var internalTargetCell = this.getDictionary(this.vertexMapper, targetCell);\n if (internalVertices[i] === internalTargetCell) {\n targetCell = layout.getVisibleTerminal(realEdge, true);\n internalTargetCell = this.getDictionary(this.vertexMapper, targetCell);\n }\n if (internalTargetCell != null && internalVertices[i] !== internalTargetCell) {\n internalEdge.target = internalTargetCell;\n if (internalTargetCell.connectsAsTarget.length === 0) {\n internalTargetCell.connectsAsTarget = [];\n }\n if (internalTargetCell.connectsAsTarget.indexOf(internalEdge) < 0) {\n internalTargetCell.connectsAsTarget.push(internalEdge);\n }\n }\n }\n }\n internalVertices[i].temp[0] = 1;\n }\n }\n /**\n * used to create the duplicate of the edges on the layout model\n */\n MultiParentModel.prototype.createInternalCells = function (layout, vertices, internalVertices) {\n for (var i = 0; i < vertices.length; i++) {\n internalVertices[i] = {\n x: [], y: [], temp: [], cell: vertices[i],\n id: vertices[i].name, connectsAsTarget: [], connectsAsSource: []\n };\n this.setDictionary(this.vertexMapper, vertices[i], internalVertices[i]);\n var conns = layout.getEdges(vertices[i]);\n internalVertices[i].connectsAsSource = [];\n for (var j = 0; j < conns.length; j++) {\n var cell = layout.getVisibleTerminal(conns[j], false);\n if (cell !== vertices[i]) {\n var undirectedEdges = layout.getEdgesBetween(vertices[i], cell, false);\n var directedEdges = layout.getEdgesBetween(vertices[i], cell, true);\n if (undirectedEdges != null && undirectedEdges.length > 0 && directedEdges.length * 2 >= undirectedEdges.length) {\n var internalEdge = { x: [], y: [], temp: [], edges: undirectedEdges, ids: [] };\n for (var m = 0; m < undirectedEdges.length; m++) {\n internalEdge.ids.push(undirectedEdges[m].id);\n }\n internalEdge.source = internalVertices[i];\n if (!internalVertices[i].connectsAsSource) {\n internalVertices[i].connectsAsSource = [];\n }\n if (internalVertices[i].connectsAsSource.indexOf(internalEdge) < 0) {\n internalVertices[i].connectsAsSource.push(internalEdge);\n }\n }\n }\n }\n internalVertices[i].temp[0] = 0;\n }\n };\n /**\n * used to set the optimum value of each vertex on the layout\n * @private\n */\n MultiParentModel.prototype.fixRanks = function () {\n var rankList = [];\n this.ranks = [];\n for (var i = 0; i < this.maxRank + 1; i++) {\n rankList[i] = [];\n this.ranks[i] = rankList[i];\n }\n var rootsArray = null;\n if (this.roots != null) {\n var oldRootsArray = this.roots;\n rootsArray = [];\n for (var i = 0; i < oldRootsArray.length; i++) {\n var cell = oldRootsArray[i];\n var internalNode = this.getDictionary(this.vertexMapper, cell);\n rootsArray[i] = internalNode;\n }\n }\n this.visit('updateMinMaxRank', rootsArray, false, null, { seenNodes: null, unseenNodes: null, rankList: rankList });\n };\n /**\n * Updates the min/max rank of the layer\n */\n MultiParentModel.prototype.updateMinMaxRank = function (layer, seen, data) {\n var seenNodes = data.seenNodes;\n var unseenNodes = data.unseenNodes;\n var parent = data.parent;\n var node = data.root;\n var edge = data.edge;\n var rankList = data.rankList;\n if (!node.maxRank && node.maxRank !== 0) {\n node.maxRank = -1;\n }\n if (!node.minRank && node.minRank !== 0) {\n node.minRank = -1;\n }\n if (seen === 0 && node.maxRank < 0 && node.minRank < 0) {\n rankList[node.temp[0]].push(node);\n node.maxRank = node.temp[0];\n node.minRank = node.temp[0];\n node.temp[0] = rankList[node.maxRank].length - 1;\n }\n if (parent != null && edge != null) {\n var parentToCellRankDifference = parent.maxRank - node.maxRank;\n if (parentToCellRankDifference > 1) {\n edge.maxRank = parent.maxRank;\n edge.minRank = node.maxRank;\n edge.temp = [];\n edge.x = [];\n edge.y = [];\n for (var i = edge.minRank + 1; i < edge.maxRank; i++) {\n rankList[i].push(edge);\n this.hierarchicalUtil.setTempVariable(edge, i, rankList[i].length - 1);\n }\n }\n }\n };\n /**\n * used to store the value of th given key on the object\n */\n MultiParentModel.prototype.setDictionary = function (dic, key, value) {\n var id = key.name;\n if (!id) {\n // id = this._getDictionary(dic, key);\n }\n var previous = dic.map[id];\n dic.map[id] = value;\n return previous;\n };\n /**\n * used to store the value of th given key on the object\n * @private\n */\n MultiParentModel.prototype.setDictionaryForSorter = function (dic, key, value, flag) {\n var id = key.id;\n if (!id) {\n //id = this._getDictionaryForSorter(dic, key);\n }\n var previous = dic.map[id];\n dic.map[id] = value;\n return previous;\n };\n /**\n * used to get the value of the given key\n * @private\n */\n MultiParentModel.prototype.getDictionary = function (dic, key) {\n if (!this.multiObjectIdentityCounter && this.multiObjectIdentityCounter !== 0) {\n this.multiObjectIdentityCounter = 0;\n }\n var id = key.name;\n if (!id) {\n if (!key.layoutObjectId) { ///####\n key.layoutObjectId = 'graphHierarchyNode#' + this.multiObjectIdentityCounter++;\n return key.layoutObjectId;\n }\n else {\n return dic.map[key.layoutObjectId];\n }\n }\n return dic.map[id];\n };\n /**\n * used to get the value of the given key\n * @private\n */\n MultiParentModel.prototype.getDictionaryForSorter = function (dic, key) {\n if (!this.multiObjectIdentityCounter && this.multiObjectIdentityCounter !== 0) {\n this.multiObjectIdentityCounter = 0;\n }\n var id = key.id;\n if (!id) {\n if (!key.layoutObjectId) { ///####\n key.layoutObjectId = 'graphHierarchyNode#' + this.multiObjectIdentityCounter++;\n return key.layoutObjectId;\n }\n else {\n return dic.map[key.layoutObjectId];\n }\n }\n return dic.map[id];\n };\n /**\n * used to get all the values of the dictionary object\n * @private\n */\n MultiParentModel.prototype.getDictionaryValues = function (dic) {\n var result = [];\n for (var _i = 0, _a = Object.keys(dic.map); _i < _a.length; _i++) {\n var key = _a[_i];\n result.push(dic.map[key]);\n }\n return result;\n };\n /**\n * used to visit all the entries on the given dictionary with given function\n * @private\n */\n MultiParentModel.prototype.visit = function (visitor, dfsRoots, trackAncestors, seenNodes, data) {\n var seenNodes1 = data.seenNodes;\n var unseenNodes1 = data.unseenNodes;\n var rankList = data.rankList;\n // Run depth first search through on all roots\n if (dfsRoots != null) {\n for (var i = 0; i < dfsRoots.length; i++) {\n var internalNode = dfsRoots[i];\n if (internalNode != null) {\n if (seenNodes == null) {\n seenNodes = new Object();\n }\n data.parent = null;\n data.root = internalNode;\n data.edge = null;\n if (trackAncestors) {\n // Set up hash code for root\n internalNode.hashCode = [];\n internalNode.hashCode[0] = this.dfsCount;\n internalNode.hashCode[1] = i;\n this.extendedDfs(visitor, seenNodes, i, 0, data);\n }\n else {\n this.depthFirstSearch(visitor, seenNodes, 0, data);\n }\n }\n }\n this.dfsCount++;\n }\n };\n /**\n * used to perform the depth fisrt search on the layout model\n */\n MultiParentModel.prototype.depthFirstSearch = function (visitor, seen, layer, data) {\n var seenNodes1 = data.seenNodes;\n var unseenNodes1 = data.unseenNodes;\n var rankList = data.rankList;\n var parent = data.parent;\n var root = data.root;\n var edge = data.edge;\n if (root != null) {\n var rootId = root.id;\n if (seen[rootId] == null) {\n seen[rootId] = root;\n this.updateConnectionRank(visitor, layer, 0, data);\n // Copy the connects as source list so that visitors can change the original for edge direction inversions\n var outgoingEdges = root.connectsAsSource.slice();\n for (var i = 0; i < outgoingEdges.length; i++) {\n var internalEdge = outgoingEdges[i];\n var targetNode = internalEdge.target;\n // Root check is O(|roots|)\n data.parent = root;\n data.root = targetNode;\n data.edge = internalEdge;\n this.depthFirstSearch(visitor, seen, layer + 1, data);\n }\n }\n else {\n this.updateConnectionRank(visitor, layer, 1, data);\n }\n }\n };\n /**\n * Updates the rank of the connection\n */\n MultiParentModel.prototype.updateConnectionRank = function (visitor, layer, seen, traversedList) {\n var parent = traversedList.parent;\n var root = traversedList.root;\n var edge = traversedList.edge;\n if (visitor === 'removeParentConnection' || visitor === 'removeNodeConnection') {\n var remove = visitor === 'removeNodeConnection' ? true : false;\n this.removeConnectionEdge(parent, root, edge, layer, traversedList, remove);\n }\n if (visitor === 'updateMinMaxRank') {\n this.updateMinMaxRank(layer, seen, traversedList);\n }\n };\n /**\n * Removes the edge from the collection\n */\n MultiParentModel.prototype.removeConnectionEdge = function (parent, node, edge, layer, data, remove) {\n var seenNodes = data.seenNodes;\n var unseenNodes = data.unseenNodes;\n var rankList = data.rankList;\n if (this.hierarchicalUtil.isAncestor(node, parent)) {\n this.hierarchicalUtil.invert(edge, 0);\n this.hierarchicalUtil.remove(edge, parent.connectsAsSource);\n if (remove) {\n node.connectsAsSource.push(edge);\n parent.connectsAsTarget.push(edge);\n this.hierarchicalUtil.remove(edge, node.connectsAsTarget);\n }\n else {\n parent.connectsAsTarget.push(edge);\n this.hierarchicalUtil.remove(edge, node.connectsAsTarget);\n node.connectsAsSource.push(edge);\n }\n }\n seenNodes[node.id] = node;\n delete unseenNodes[node.id];\n };\n /**\n * the dfs extends the default version by keeping track of cells ancestors, but it should be only used when necessary\n */\n MultiParentModel.prototype.extendedDfs = function (visitor, seen, cHash, layer, data) {\n var seenNodes = data.seenNodes;\n var unseenNodes = data.unseenNodes;\n var rankList = data.rankList;\n var parent = data.parent;\n var root = data.root;\n var edge = data.edge;\n if (root != null) {\n if (parent != null) {\n if (root.hashCode == null ||\n root.hashCode[0] !== parent.hashCode[0]) {\n var hashCodeLength = parent.hashCode.length + 1;\n root.hashCode = parent.hashCode.slice();\n root.hashCode[hashCodeLength - 1] = cHash;\n }\n }\n var rootId = root.id;\n if (seen[rootId] == null) {\n seen[rootId] = root;\n this.updateConnectionRank(visitor, layer, 0, data);\n var outgoingEdges = root.connectsAsSource.slice();\n for (var i = 0; i < outgoingEdges.length; i++) {\n var internalEdge = outgoingEdges[i];\n var targetNode = internalEdge.target;\n data.parent = root;\n data.root = targetNode;\n data.edge = internalEdge;\n this.extendedDfs(visitor, seen, i, layer + 1, data);\n }\n }\n else {\n this.updateConnectionRank(visitor, layer, 1, data);\n }\n }\n };\n /**\n * used to clone the specified object ignoring all fieldnames in the given array of transient fields\n * @private\n */\n MultiParentModel.prototype.clone = function (obj, transients, shallow) {\n shallow = (shallow != null) ? shallow : false;\n if (obj != null && typeof (obj.constructor) === 'function') {\n var clonedObj = obj.constructor();\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var i = _a[_i];\n if (i !== 'layoutObjectId' && (transients == null || transients.indexOf(i) < 0)) {\n if (!shallow && typeof (obj[i]) === 'object') {\n //not used\n // _clone[i] = $.extend(true, {}, obj[i]);\n }\n else {\n clonedObj[i] = obj[i];\n }\n }\n }\n return clonedObj;\n }\n return null;\n };\n return MultiParentModel;\n}());\n/**\n * Defines how to reduce the crosses in between the line segments\n */\nvar CrossReduction = /** @class */ (function () {\n function CrossReduction() {\n }\n /**\n * used to calculate the number of edges crossing the layout model\n * @param model\n */\n CrossReduction.prototype.calculateCrossings = function (model) {\n var numRanks = model.ranks.length;\n var totalCrossings = 0;\n for (var i = 1; i < numRanks; i++) {\n totalCrossings += this.calculateRankCrossing(i, model);\n }\n return totalCrossings;\n };\n /**\n * used to get the temp value specified for the node or connector\n * @private\n */\n CrossReduction.prototype.getTempVariable = function (node, layer) {\n if (node) {\n if (this.isVertex(node)) {\n return node.temp[0];\n }\n else {\n return node.temp[layer - node.minRank - 1];\n }\n }\n return 0;\n };\n /**\n * used to specify the number of conenctors crossing between the specified rank and its below rank\n */\n CrossReduction.prototype.calculateRankCrossing = function (i, model) {\n var totalCrossings = 0;\n var rank = model.ranks[i];\n var previousRank = model.ranks[i - 1];\n var tmpIndices = [];\n // Iterate over the top rank and fill in the connection information\n for (var j = 0; j < rank.length; j++) {\n var node = rank[j];\n var rankPosition = this.getTempVariable(node, i);\n var connectedCells = this.getConnectedCellsOnLayer(node, i, true);\n ///#### \n var nodeIndices = [];\n for (var k = 0; k < connectedCells.length; k++) {\n var connectedNode = connectedCells[k];\n var otherCellRankPosition = this.getTempVariable(connectedNode, i - 1);\n nodeIndices.push(otherCellRankPosition);\n }\n nodeIndices.sort(function (x, y) { return x - y; });\n tmpIndices[rankPosition] = nodeIndices;\n }\n var indices = [];\n for (var j = 0; j < tmpIndices.length; j++) {\n indices = indices.concat(tmpIndices[j]);\n }\n var firstIndex = 1;\n while (firstIndex < previousRank.length) {\n firstIndex <<= 1;\n }\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = [];\n for (var j = 0; j < treeSize; ++j) {\n tree[j] = 0;\n }\n for (var j = 0; j < indices.length; j++) {\n var index = indices[j];\n var treeIndex = index + firstIndex;\n ++tree[treeIndex];\n while (treeIndex > 0) {\n if (treeIndex % 2) {\n totalCrossings += tree[treeIndex + 1];\n }\n treeIndex = (treeIndex - 1) >> 1;\n ++tree[treeIndex];\n }\n }\n return totalCrossings;\n };\n /**\n * Calculates and reduces the crosses between line segments\n * @private\n */\n CrossReduction.prototype.execute = function (model) {\n // Stores initial ordering \n this.nestedBestRanks = [];\n for (var i = 0; i < model.ranks.length; i++) {\n this.nestedBestRanks[i] = model.ranks[i].slice();\n }\n var iterationsWithoutImprovement = 0;\n var currentBestCrossings = this.calculateCrossings(model);\n for (var i = 0; i < 24 && iterationsWithoutImprovement < 2; i++) {\n this.weightedMedian(i, model);\n var candidateCrossings = this.calculateCrossings(model);\n if (candidateCrossings < currentBestCrossings) {\n currentBestCrossings = candidateCrossings;\n iterationsWithoutImprovement = 0;\n for (var j = 0; j < this.nestedBestRanks.length; j++) {\n var rank = model.ranks[j];\n for (var k = 0; k < rank.length; k++) {\n var cell = rank[k];\n this.nestedBestRanks[j][cell.temp[0]] = cell;\n }\n }\n }\n else {\n // Increase count of iterations \n iterationsWithoutImprovement++;\n // Restore the best values to the cells\n for (var j = 0; j < this.nestedBestRanks.length; j++) {\n var rank = model.ranks[j];\n for (var k = 0; k < rank.length; k++) {\n var cell = rank[k];\n this.setTempVariable(cell, j, k);\n }\n }\n }\n if (currentBestCrossings === 0) {\n break;\n }\n }\n // Store the best rankings but in the model\n var ranks = [];\n var rankList = [];\n for (var i = 0; i < model.maxRank + 1; i++) {\n rankList[i] = [];\n ranks[i] = rankList[i];\n }\n for (var i = 0; i < this.nestedBestRanks.length; i++) {\n for (var j = 0; j < this.nestedBestRanks[i].length; j++) {\n rankList[i].push(this.nestedBestRanks[i][j]);\n }\n }\n model.ranks = ranks;\n };\n /**\n * check whether the object is vertext or edge on the layout model.\n * @private\n */\n CrossReduction.prototype.isVertex = function (node) {\n if (node && node.cell && (node.cell.inEdges || node.cell.outEdges)) {\n return true;\n }\n return false;\n };\n /**\n * used to move up or move down the node position on the adjacent ranks\n */\n CrossReduction.prototype.weightedMedian = function (iteration, model) {\n // Reverse sweep direction each time through this method\n var downwardSweep = (iteration % 2 === 0);\n if (downwardSweep) {\n for (var j = model.maxRank - 1; j >= 0; j--) {\n this.medianRank(j, downwardSweep);\n }\n }\n else {\n for (var j = 1; j < model.maxRank; j++) {\n this.medianRank(j, downwardSweep);\n }\n }\n };\n /**\n * used to get the node next(up) connected to the specified node or connector\n * @private\n */\n CrossReduction.prototype.getConnectedCellsOnLayer = function (cell, layer, isPrevious) {\n if (isPrevious === void 0) { isPrevious = false; }\n var connectedlayer = 'nextLayerConnectedCells';\n var connectedAs = 'connectsAsTarget';\n if (isPrevious) {\n connectedlayer = 'previousLayerConnectedCells';\n connectedAs = 'connectsAsSource';\n }\n if (cell) {\n if (this.isVertex(cell)) {\n if (cell[connectedlayer] == null) {\n cell[connectedlayer] = [];\n cell[connectedlayer][0] = [];\n for (var i = 0; i < cell[connectedAs].length; i++) {\n var edge = cell[connectedAs][i];\n if (edge.maxRank === undefined) {\n edge.maxRank = -1;\n }\n if (edge.maxRank === -1 || (isPrevious ? (edge.minRank === layer - 1) : (edge.maxRank === layer + 1))) {\n // Either edge is not in any rank or no dummy nodes in edge, add node of other side of edge\n cell[connectedlayer][0].push(isPrevious ? edge.target : edge.source);\n }\n else {\n // Edge spans at least two layers, add edge\n cell[connectedlayer][0].push(edge);\n }\n }\n }\n return cell[connectedlayer][0];\n }\n else {\n if (cell[connectedlayer] == null) {\n cell[connectedlayer] = [];\n for (var i = 0; i < cell.temp.length; i++) {\n cell[connectedlayer][i] = [];\n if (i === (isPrevious ? 0 : (cell.temp.length - 1))) {\n cell[connectedlayer][i].push(isPrevious ? cell.target : cell.source);\n }\n else {\n cell[connectedlayer][i].push(cell);\n }\n }\n }\n return cell[connectedlayer][layer - cell.minRank - 1];\n }\n }\n return null;\n };\n /**\n * calculates the rank elements on the specified rank\n * @private\n */\n CrossReduction.prototype.medianValue = function (connectedCells, rankValue) {\n var medianValues = [];\n var arrayCount = 0;\n for (var i = 0; i < connectedCells.length; i++) {\n var cell = connectedCells[i];\n medianValues[arrayCount++] = this.getTempVariable(cell, rankValue);\n }\n // sorts numerical order sort\n medianValues.sort(function (a, b) { return a - b; });\n if (arrayCount % 2 === 1) {\n // For odd numbers of adjacent vertices return the median\n return medianValues[Math.floor(arrayCount / 2)];\n }\n else if (arrayCount === 2) {\n return ((medianValues[0] + medianValues[1]) / 2.0);\n }\n else {\n var medianPoint = arrayCount / 2;\n var leftMedian = medianValues[medianPoint - 1] - medianValues[0];\n var rightMedian = medianValues[arrayCount - 1]\n - medianValues[medianPoint];\n return (medianValues[medianPoint - 1] * rightMedian + medianValues[medianPoint] * leftMedian) / (leftMedian + rightMedian);\n }\n };\n /**\n * get the temp value of the specified layer\n * @private\n */\n CrossReduction.prototype.setTempVariable = function (cell, layer, value) {\n if (cell) {\n cell.temp[0] = value;\n }\n };\n /**\n * used to minimize the node position on this rank and one of its adjacent ranks\n */\n CrossReduction.prototype.medianRank = function (rankValue, downwardSweep) {\n var numCellsForRank = this.nestedBestRanks[rankValue].length;\n var medianValues = [];\n var reservedPositions = [];\n for (var i = 0; i < numCellsForRank; i++) {\n var cell = this.nestedBestRanks[rankValue][i];\n var sorterEntry = { medianValue: 0 };\n sorterEntry.cell = cell;\n // Flip whether or not equal medians are flipped on up and down sweeps \n //TODO re-implement some kind of nudge medianValues[i].nudge = !downwardSweep;\n var nextLevelConnectedCells = void 0;\n if (downwardSweep) {\n nextLevelConnectedCells = this.getConnectedCellsOnLayer(cell, rankValue);\n }\n else {\n nextLevelConnectedCells = this.getConnectedCellsOnLayer(cell, rankValue, true);\n }\n var nextRankValue = void 0;\n downwardSweep ? nextRankValue = rankValue + 1 : nextRankValue = rankValue - 1;\n if (nextLevelConnectedCells != null && nextLevelConnectedCells.length !== 0) {\n sorterEntry.medianValue = this.medianValue(nextLevelConnectedCells, nextRankValue);\n medianValues.push(sorterEntry);\n }\n else {\n // Nodes with no adjacent vertices are flagged in the reserved array to \n //indicate they should be left in their current position.\n reservedPositions[this.getTempVariable(cell, rankValue)] = true;\n }\n }\n medianValues.sort(this.compare);\n // Set the new position of each node within the rank using its temp variable\n for (var i = 0; i < numCellsForRank; i++) {\n if (reservedPositions[i] == null) {\n var cell = medianValues.shift().cell;\n this.setTempVariable(cell, rankValue, i);\n }\n }\n };\n /**\n * compares two values, it sends the values to the compare function,\n * and sorts the values according to the returned (negative, zero, positive) value\n */\n CrossReduction.prototype.compare = function (a, b) {\n if (a != null && b != null) {\n if (b.medianValue > a.medianValue) {\n return -1;\n }\n else if (b.medianValue < a.medianValue) {\n return 1;\n }\n }\n return 0;\n };\n return CrossReduction;\n}());\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Complex, CollectionFactory, ChildProperty, Event } from '@syncfusion/ej2-base';\nimport { Browser, EventHandler, Draggable, Collection } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { Accordion } from '@syncfusion/ej2-navigations';\nimport { Node, Connector, Shape, Size, Transform } from '../diagram/index';\nimport { DiagramRenderer, StackPanel, Margin } from '../diagram/index';\nimport { TextElement, Canvas, BpmnShape } from '../diagram/index';\nimport { SvgRenderer } from '../diagram/rendering/svg-renderer';\nimport { parentsUntil, createSvgElement, createHtmlElement, createMeasureElements } from '../diagram/utility/dom-util';\nimport { scaleElement, arrangeChild, groupHasType } from '../diagram/utility/diagram-util';\nimport { getFunction } from '../diagram/utility/base-util';\nimport { getOuterBounds } from '../diagram/utility/connector';\nimport { Point } from '../diagram/primitives/point';\nimport { CanvasRenderer } from '../diagram/rendering/canvas-renderer';\nvar getObjectType = function (obj) {\n var conn = obj;\n if (conn.sourcePoint || conn.targetPoint || conn.sourceID || conn.targetID\n || conn.sourcePortID || conn.targetPortID || conn.sourceDecorator || conn.targetDecorator) {\n return Connector;\n }\n if (obj.shape && (obj.shape instanceof Shape || obj.shape.type)) {\n return Node;\n }\n return Node;\n};\n/**\n * A palette allows to display a group of related symbols and it textually annotates the group with its header.\n */\nvar Palette = /** @class */ (function (_super) {\n __extends(Palette, _super);\n function Palette() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Palette.prototype, \"id\", void 0);\n __decorate([\n Property()\n ], Palette.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], Palette.prototype, \"expanded\", void 0);\n __decorate([\n Property('')\n ], Palette.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], Palette.prototype, \"title\", void 0);\n __decorate([\n CollectionFactory(getObjectType)\n ], Palette.prototype, \"symbols\", void 0);\n return Palette;\n}(ChildProperty));\nexport { Palette };\n/**\n * customize the preview size and position of the individual palette items.\n */\nvar SymbolPreview = /** @class */ (function (_super) {\n __extends(SymbolPreview, _super);\n function SymbolPreview() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SymbolPreview.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], SymbolPreview.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Point)\n ], SymbolPreview.prototype, \"offset\", void 0);\n return SymbolPreview;\n}(ChildProperty));\nexport { SymbolPreview };\n/**\n * Represents the Symbol Palette Component.\n * ```html\n *
    \n * \n * ```\n */\n/**\n * The symbol palette control allows to predefine the frequently used nodes and connectors\n * and to drag and drop those nodes/connectors to drawing area\n */\nvar SymbolPalette = /** @class */ (function (_super) {\n __extends(SymbolPalette, _super);\n //region - protected methods \n /**\n * Constructor for creating the component\n * @hidden\n */\n function SymbolPalette(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.symbolTable = {};\n _this.childTable = {};\n _this.info = 'info';\n /**\n * helper method for draggable\n * @return {void}\n * @private\n */\n _this.helper = function (e) {\n var clonedElement;\n var id = e.sender.target.id.split('_container')[0];\n var symbol = _this.symbolTable[id];\n if (symbol && _this.selectedSymbol) {\n _this.selectedSymbols = _this.selectedSymbol.id === symbol.id ? symbol : _this.selectedSymbol;\n var position = _this.getMousePosition(e.sender);\n clonedElement = _this.getSymbolPreview(_this.selectedSymbols, e.sender, _this.element);\n clonedElement.setAttribute('paletteId', _this.element.id);\n }\n return clonedElement;\n };\n return _this;\n }\n /**\n * Refreshes the panel when the symbol palette properties are updated\n * @param newProp Defines the new values of the changed properties\n * @param oldProp Defines the old values of the changed properties\n */\n SymbolPalette.prototype.onPropertyChanged = function (newProp, oldProp) {\n var refresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.element.style.width = this.width.toString();\n break;\n case 'height':\n this.element.style.height = this.height.toString();\n break;\n case 'symbolPreview':\n break;\n case 'symbolWidth':\n case 'symbolHeight':\n case 'getSymbolInfo':\n refresh = true;\n break;\n case 'enableSearch':\n if (newProp.enableSearch) {\n this.createTextbox();\n }\n else {\n var divElement = document.getElementById(this.element.id + '_search');\n if (divElement) {\n divElement.parentNode.removeChild(divElement);\n }\n }\n break;\n case 'palettes':\n for (var _b = 0, _c = Object.keys(newProp.palettes); _b < _c.length; _b++) {\n var i = _c[_b];\n var index = Number(i);\n if (!this.accordionElement.items[index]) {\n this.accordionElement.items[index] = {\n header: newProp.palettes[index].title || '',\n expanded: newProp.palettes[index].expanded,\n iconCss: newProp.palettes[index].iconCss || ''\n };\n }\n if (newProp.palettes[index].iconCss !== undefined) {\n this.accordionElement.items[index].iconCss = newProp.palettes[index].iconCss || '';\n refresh = true;\n }\n if (newProp.palettes[index].expanded !== undefined) {\n if (!this.palettes[index].isInteraction) {\n this.accordionElement.items[index].expanded = newProp.palettes[index].expanded;\n refresh = true;\n }\n else {\n this.palettes[index].isInteraction = false;\n }\n }\n }\n break;\n case 'enableAnimation':\n if (!this.enableAnimation) {\n this.accordionElement.animation = { expand: { duration: 0 }, collapse: { duration: 0 } };\n }\n else {\n this.accordionElement.animation = { expand: { duration: 400 }, collapse: { duration: 400 } };\n }\n break;\n case 'expandMode':\n this.accordionElement.expandMode = this.expandMode;\n refresh = true;\n break;\n }\n }\n if (refresh) {\n this.refreshPalettes();\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n SymbolPalette.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initialize nodes, connectors and renderer\n */\n SymbolPalette.prototype.preRender = function () {\n var _this = this;\n this.element.style.overflow = 'auto';\n this.element.style.height = this.height.toString();\n this.element.style.width = this.width.toString();\n if (this.enableSearch) {\n this.createTextbox();\n }\n //create accordion element\n var accordionDiv = createHtmlElement('div', { id: this.element.id + '_container' });\n this.accordionElement = new Accordion({\n expandMode: this.expandMode\n });\n if (!this.enableAnimation) {\n this.accordionElement.animation = { expand: { duration: 0 }, collapse: { duration: 0 } };\n }\n this.accordionElement.expanded = function (args) {\n var index = _this.accordionElement.items.indexOf(args.item);\n _this.palettes[index].expanded = args.isExpanded;\n _this.palettes[index].isInteraction = true;\n };\n this.element.appendChild(accordionDiv);\n createMeasureElements();\n this.unWireEvents();\n this.wireEvents();\n };\n /**\n * Renders nodes and connectors in the symbol palette\n */\n SymbolPalette.prototype.render = function () {\n this.diagramRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), false);\n this.svgRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), true);\n this.updatePalettes();\n this.accordionElement.appendTo('#' + this.element.id + '_container');\n };\n /**\n * To get Module name\n * @private\n */\n SymbolPalette.prototype.getModuleName = function () {\n return 'SymbolPalette';\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n SymbolPalette.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'Bpmn',\n args: []\n });\n return modules;\n };\n /**\n * To destroy the symbol palette\n * @return {void}\n */\n SymbolPalette.prototype.destroy = function () {\n if (this.allowDrag) {\n this.draggable.destroy();\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n var content = document.getElementById(this.element.id + '_container');\n if (content) {\n this.element.removeChild(content);\n var measureElemnt = 'measureElement';\n if (window[measureElemnt]) {\n window[measureElemnt].usageCount -= 1;\n if (window[measureElemnt].usageCount === 0) {\n window[measureElemnt].parentNode.removeChild(window[measureElemnt]);\n window[measureElemnt] = null;\n }\n }\n }\n content = document.getElementById(this.element.id + '_search');\n if (content) {\n content.parentNode.removeChild(content);\n }\n this.element.classList.remove('e-symbolpalette');\n }\n };\n //end region - protected methods\n //region - private methods to render symbols\n /**\n * Method to initialize the items in the symbols\n */\n SymbolPalette.prototype.initSymbols = function (symbolGroup) {\n var group = [];\n for (var _i = 0, _a = symbolGroup.symbols; _i < _a.length; _i++) {\n var symbol = _a[_i];\n if (symbol instanceof Node) {\n var getNodeDefaults = getFunction(this.getNodeDefaults);\n if (getNodeDefaults) {\n getNodeDefaults(symbol, this);\n }\n }\n else if (symbol instanceof Connector) {\n var getConnectorDefaults = getFunction(this.getConnectorDefaults);\n if (getConnectorDefaults) {\n getConnectorDefaults(symbol, this);\n }\n }\n this.symbolTable[symbol.id] = symbol;\n if (symbol instanceof Node && symbol.children) {\n group.push(symbol);\n }\n }\n for (var i = 0; i < group.length; i++) {\n var node = void 0;\n for (var j = 0; j < group[i].children.length; j++) {\n node = (this.symbolTable[group[i].children[j]]);\n if (node) {\n this.childTable[node.id] = node;\n node.parentId = group[i].id;\n }\n }\n }\n for (var _b = 0, _c = symbolGroup.symbols; _b < _c.length; _b++) {\n var symbol = _c[_b];\n if (!(symbol instanceof Node && symbol.children)) {\n this.prepareSymbol(symbol);\n }\n }\n for (var _d = 0, group_1 = group; _d < group_1.length; _d++) {\n var symbol = group_1[_d];\n this.prepareSymbol(symbol);\n }\n };\n /**\n * Method to create the palette\n */\n SymbolPalette.prototype.renderPalette = function (symbolGroup) {\n var style = 'display:none;overflow:auto;';\n if (symbolGroup.height) {\n style += 'height:' + symbolGroup.height + 'px';\n }\n var paletteDiv = createHtmlElement('div', { 'id': symbolGroup.id, style: style });\n this.element.appendChild(paletteDiv);\n var item = {\n header: symbolGroup.title, expanded: symbolGroup.expanded,\n content: '#' + symbolGroup.id, iconCss: symbolGroup.iconCss\n };\n this.accordionElement.items.push(item);\n this.renderSymbols(symbolGroup, paletteDiv);\n };\n /**\n * Used to add the palette item as nodes or connectors in palettes\n */\n SymbolPalette.prototype.addPaletteItem = function (paletteName, paletteSymbol) {\n var refresh;\n for (var i = 0; i < this.palettes.length; i++) {\n var symbolPaletteGroup = this.palettes[i];\n if (symbolPaletteGroup.id.indexOf(paletteName) !== -1) {\n // tslint:disable-next-line:no-any \n var param = [undefined, symbolPaletteGroup, 'symbols', {}, true];\n // tslint:disable-next-line:no-any \n var obj = new (Function.prototype.bind.apply(getObjectType(paletteSymbol), param));\n for (var i_1 = 0; i_1 < Object.keys(paletteSymbol).length; i_1++) {\n obj[Object.keys(paletteSymbol)[i_1]] = paletteSymbol[Object.keys(paletteSymbol)[i_1]];\n }\n symbolPaletteGroup.symbols.push(obj);\n if (!obj.children) {\n this.prepareSymbol(obj);\n }\n this.symbolTable[obj.id] = obj;\n var paletteDiv = document.getElementById(symbolPaletteGroup.id);\n paletteDiv.appendChild(this.getSymbolContainer(obj, paletteDiv));\n break;\n }\n }\n };\n /**\n * Used to remove the palette item as nodes or connectors in palettes\n */\n SymbolPalette.prototype.removePaletteItem = function (paletteName, symbolId) {\n var refresh;\n for (var i = 0; i < this.palettes.length; i++) {\n var symbolPaletteGroup = this.palettes[i];\n if (symbolPaletteGroup.id.indexOf(paletteName) !== -1) {\n for (var _i = 0, _a = symbolPaletteGroup.symbols; _i < _a.length; _i++) {\n var symbol = _a[_i];\n if (symbol.id.indexOf(symbolId) !== -1) {\n var index = symbolPaletteGroup.symbols.indexOf(symbol);\n symbolPaletteGroup.symbols.splice(index, 1);\n if (symbol.children) {\n var parentNode = symbol.children;\n for (var i_2 = 0; i_2 < parentNode.length; i_2++) {\n delete this.symbolTable[(parentNode[i_2])];\n }\n }\n delete this.symbolTable[symbol.id];\n var element = document.getElementById(symbol.id + '_container');\n element.parentNode.removeChild(element);\n refresh = true;\n break;\n }\n }\n }\n if (refresh) {\n break;\n }\n }\n };\n /**\n * Method to create the symbols in canvas\n */\n SymbolPalette.prototype.prepareSymbol = function (symbol) {\n var width;\n var sw;\n var height;\n var sh;\n var stackPanel = new StackPanel();\n var obj = symbol;\n var content;\n var symbolContainer = new Canvas();\n var container = (symbol instanceof Node) ? symbol.initContainer() : null;\n if (container && !container.children) {\n container.children = [];\n }\n //preparing objects\n var getSymbolTemplate = getFunction(this.getSymbolTemplate);\n if (getSymbolTemplate) {\n content = getSymbolTemplate(symbol);\n }\n if (!content) {\n if (obj.children) {\n content = this.getContainer(obj, container);\n }\n else {\n content = symbol.init(this);\n if (symbol instanceof Node && symbol.parentId) {\n container.children.push(content);\n }\n }\n }\n if (!symbol.parentId) {\n var symbolInfo = { width: this.symbolWidth, height: this.symbolHeight };\n var getSymbolInfo = getFunction(this.getSymbolInfo);\n if (getSymbolInfo) {\n symbolInfo = getSymbolInfo(symbol);\n }\n symbolInfo = symbolInfo || {};\n //defining custom templates\n content.relativeMode = 'Object';\n content.horizontalAlignment = content.verticalAlignment = 'Center';\n symbolContainer.style.strokeColor = symbolContainer.style.fill = 'none';\n symbolContainer.children = [content];\n content.measure(new Size());\n content.arrange(content.desiredSize);\n width = symbolInfo.width = symbolInfo.width ||\n (obj.width !== undefined ? content.actualSize.width : undefined) || this.symbolWidth;\n height = symbolInfo.height = symbolInfo.height ||\n (obj.height !== undefined ? content.actualSize.height : undefined) || this.symbolHeight;\n if (width !== undefined && height !== undefined) {\n var actualWidth = width;\n var actualHeight = height;\n if (this.symbolWidth !== undefined) {\n actualWidth = this.symbolWidth - this.symbolMargin.left - this.symbolMargin.right;\n }\n else {\n width += obj.style.strokeWidth;\n }\n if (this.symbolHeight !== undefined) {\n actualHeight = this.symbolHeight - this.symbolMargin.top - this.symbolMargin.bottom;\n }\n else {\n height += obj.style.strokeWidth;\n }\n if (symbolInfo.description && symbolInfo.description.text !== '') {\n actualHeight -= 20; // default height of the text have been reduced from the container.\n }\n sw = actualWidth / (content.width || width);\n sh = actualHeight / (content.height || height);\n if (symbolInfo.fit) {\n sw = actualWidth / symbolInfo.width;\n sh = actualHeight / symbolInfo.height;\n }\n width = actualWidth;\n height = actualHeight;\n sw = sh = Math.min(sw, sh);\n symbolContainer.width = width;\n symbolContainer.height = height;\n content.width = symbolInfo.width;\n content.height = symbolInfo.height;\n this.scaleSymbol(symbol, symbolContainer, sw, sh, width, height);\n }\n else {\n var outerBounds = void 0;\n if (symbol instanceof Connector) {\n outerBounds = getOuterBounds(symbol);\n }\n content.width = symbol.width || (outerBounds) ? outerBounds.width : content.actualSize.width;\n content.height = symbol.height || (outerBounds) ? outerBounds.height : content.actualSize.height;\n }\n symbol.wrapper = stackPanel;\n stackPanel.children = [symbolContainer];\n content.pivot = stackPanel.pivot = { x: 0, y: 0 };\n stackPanel.id = content.id + '_symbol';\n stackPanel.style.fill = stackPanel.style.strokeColor = 'transparent';\n stackPanel.offsetX = symbol.style.strokeWidth / 2;\n stackPanel.offsetY = symbol.style.strokeWidth / 2;\n //symbol description-textElement\n this.getSymbolDescription(symbolInfo, width, stackPanel);\n stackPanel.measure(new Size());\n stackPanel.arrange(stackPanel.desiredSize);\n symbolInfo.width = symbolInfo.width || content.actualSize.width;\n symbolInfo.height = symbolInfo.height || content.actualSize.height;\n symbol[this.info] = symbolInfo;\n }\n if (symbol.parentId) {\n container.measure(new Size(obj.width, obj.height));\n container.arrange(container.desiredSize);\n }\n };\n SymbolPalette.prototype.getContainer = function (obj, container) {\n container.measureChildren = false;\n var bounds;\n var child = obj.children;\n container.children = [];\n for (var i = 0; i < child.length; i++) {\n if (this.symbolTable[child[i]]) {\n container.children.push(this.symbolTable[child[i]].wrapper);\n }\n }\n container.measure(new Size(obj.width, obj.height));\n container.arrange(container.desiredSize);\n if (container.bounds.x !== 0 || container.bounds.y !== 0) {\n bounds = container.bounds;\n arrangeChild(obj, bounds.x, bounds.y, this.symbolTable, false, this);\n container = this.getContainer(obj, container);\n }\n return container;\n };\n /**\n * Method to get the symbol text description\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.getSymbolDescription = function (symbolInfo, width, parent) {\n if (symbolInfo && symbolInfo.description && symbolInfo.description.text) {\n var textElement = new TextElement();\n //symbol description-textElement\n symbolInfo.description.overflow = symbolInfo.description.overflow || 'Ellipsis';\n symbolInfo.description.wrap = symbolInfo.description.wrap || 'WrapWithOverflow';\n textElement.content = symbolInfo.description.text;\n textElement.width = width;\n textElement.height = 20;\n textElement.style.strokeColor = 'transparent';\n textElement.style.fill = 'transparent';\n textElement.style.strokeWidth = 0;\n textElement.style.textWrapping = symbolInfo.description.wrap;\n textElement.style.textOverflow = symbolInfo.description.overflow;\n textElement.margin = { left: 0, right: 0, top: 0, bottom: 5 };\n parent.children.push(textElement);\n }\n };\n /**\n * Method to renders the symbols\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.renderSymbols = function (symbolGroup, parentDiv) {\n for (var _i = 0, _a = symbolGroup.symbols; _i < _a.length; _i++) {\n var symbol = _a[_i];\n if (!symbol.parentId) {\n this.getSymbolContainer(symbol, parentDiv);\n }\n }\n };\n /**\n * Method to clone the symbol for previewing the symbols\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.getSymbolPreview = function (symbol, evt, parentDiv) {\n var canvas;\n var sw;\n var sh;\n var symbolPreviewWidth = symbol.wrapper.children[0].desiredSize.width + symbol.style.strokeWidth;\n var symbolPreviewHeight = symbol.wrapper.children[0].desiredSize.height + symbol.style.strokeWidth;\n var content = symbol.wrapper.children[0].children[0];\n if (this.symbolPreview.width !== undefined || this.symbolPreview.height !== undefined) {\n symbolPreviewWidth = (this.symbolPreview.width || symbolPreviewWidth) - symbol.style.strokeWidth;\n symbolPreviewHeight = (this.symbolPreview.height || symbolPreviewHeight) - symbol.style.strokeWidth;\n sw = symbolPreviewWidth / content.actualSize.width;\n sh = symbolPreviewHeight / content.actualSize.height;\n sw = sh = Math.min(sw, sh);\n var symbolWidth = content.actualSize.width * sw;\n var symbolHeight = content.actualSize.height * sh;\n symbol.wrapper.children[0].width = symbolPreviewWidth;\n symbol.wrapper.children[0].height = symbolPreviewHeight;\n this.measureAndArrangeSymbol(content, symbol instanceof Node);\n this.scaleSymbol(symbol, symbol.wrapper.children[0], sw, sh, symbolWidth, symbolHeight, true);\n symbolPreviewWidth = symbolWidth;\n symbolPreviewHeight = symbolHeight;\n }\n var prevPosition = { x: content.offsetX, y: content.offsetY };\n content.offsetX = content.offsetY = symbol.style.strokeWidth / 2;\n content.pivot = { x: 0, y: 0 };\n this.measureAndArrangeSymbol(content, symbol instanceof Node);\n var previewContainer = createHtmlElement('div', { 'draggable': 'true', 'class': 'e-dragclone', 'style': 'pointer-events:none' });\n var div;\n document.body.appendChild(previewContainer);\n var style = 'margin:5px;';\n if (symbol.shape.type === 'Native') {\n canvas = createSvgElement('svg', {\n id: symbol.id + '_preview',\n width: Math.ceil(symbolPreviewWidth) + 1,\n height: Math.ceil(symbolPreviewHeight) + 1\n });\n var gElement = createSvgElement('g', { id: symbol.id + '_g' });\n canvas.appendChild(gElement);\n previewContainer.appendChild(canvas);\n this.svgRenderer.renderElement(content, gElement, undefined, undefined, canvas);\n }\n else if (symbol.shape.type === 'HTML') {\n div = this.getHtmlSymbol(symbol, canvas, previewContainer, symbolPreviewHeight, symbolPreviewWidth, true);\n }\n else {\n if (symbol.children &&\n symbol.children.length > 0 && groupHasType(symbol, 'HTML', this.childTable)) {\n div = this.getGroupParent(symbol, canvas, previewContainer, symbol.wrapper.actualSize.height, symbol.wrapper.actualSize.width, true);\n }\n else {\n canvas = CanvasRenderer.createCanvas(symbol.id + '_preview', (Math.ceil(symbolPreviewWidth) + symbol.style.strokeWidth + 1) * 2, (Math.ceil(symbolPreviewHeight) + symbol.style.strokeWidth + 1) * 2);\n previewContainer.appendChild(canvas);\n style += 'transform:scale(0.5);';\n canvas.setAttribute('transform-origin', '0 0');\n var index = 2;\n if (symbol instanceof Connector) {\n index = 1.9;\n }\n canvas.getContext('2d').setTransform(index, 0, 0, index, 0, 0);\n this.diagramRenderer.renderElement(content, canvas, undefined);\n }\n }\n ((div && (symbol.shape.type === 'HTML' || symbol.children\n && symbol.children.length > 0)) ? div : canvas).setAttribute('style', style);\n content.offsetX = prevPosition.x;\n content.offsetY = prevPosition.y;\n return previewContainer;\n };\n SymbolPalette.prototype.measureAndArrangeSymbol = function (content, isNode) {\n if (content.children && !isNode) {\n content.children[0].transform = Transform.Self;\n }\n content.measure(new Size());\n content.arrange(content.desiredSize);\n if (content.children) {\n content.children[0].transform = Transform.Parent;\n }\n };\n SymbolPalette.prototype.updateSymbolSize = function (symbol, width, height) {\n var element = symbol.wrapper.children[0].children[0];\n var strokeWidth = symbol.style.strokeWidth;\n element.width = (width || element.width) - (strokeWidth + 1);\n element.height = (height || element.height) - (strokeWidth + 1);\n symbol.wrapper.measure(new Size());\n symbol.wrapper.arrange(symbol.wrapper.desiredSize);\n };\n /**\n * Method to create canvas and render the symbol\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.getSymbolContainer = function (symbol, parentDiv, preview) {\n var symbolInfo = this.symbolTable[symbol.id][this.info];\n var size = this.getSymbolSize(symbol, symbolInfo);\n var width = size.width + 1;\n var height = size.height + 1;\n var container = createHtmlElement('div', {\n id: symbol.id + '_container',\n style: 'width:' + width + 'px;height:' + height + 'px;float:left;overflow:hidden',\n title: symbolInfo.description ? symbolInfo.description.text : symbol.id\n });\n parentDiv.appendChild(container);\n var canvas;\n var gElement;\n var div;\n if (symbol.shape.type === 'Native') {\n canvas = createSvgElement('svg', {\n id: symbol.id,\n width: Math.ceil(symbol.wrapper.actualSize.width) + 1,\n height: Math.ceil(symbol.wrapper.actualSize.height) + 1\n });\n gElement = createSvgElement('g', { id: symbol.id + '_g' });\n canvas.appendChild(gElement);\n container.appendChild(canvas);\n this.updateSymbolSize(symbol);\n this.svgRenderer.renderElement(symbol.wrapper, gElement, undefined, undefined, canvas);\n }\n else if (symbol.shape.type === 'HTML') {\n div = this.getHtmlSymbol(symbol, canvas, container, symbol.wrapper.actualSize.height, symbol.wrapper.actualSize.width, false);\n }\n else {\n if (symbol.children &&\n symbol.children.length > 0 && groupHasType(symbol, 'HTML', this.childTable)) {\n div = this.getGroupParent(symbol, canvas, container, symbol.wrapper.actualSize.height, symbol.wrapper.actualSize.width, false);\n }\n else {\n canvas = CanvasRenderer.createCanvas(symbol.id, Math.ceil((symbol.wrapper.actualSize.width + symbol.style.strokeWidth) * 2) + 1, Math.ceil((symbol.wrapper.actualSize.height + symbol.style.strokeWidth) * 2) + 1);\n container.appendChild(canvas);\n var index = 2;\n if (symbol instanceof Connector) {\n index = 1.9;\n }\n canvas.getContext('2d').setTransform(index, 0, 0, index, 0, 0);\n this.diagramRenderer.renderElement(symbol.wrapper, gElement || canvas, undefined, undefined, undefined, undefined, true);\n }\n }\n if (!preview) {\n var actualWidth = symbol.wrapper.actualSize.width + symbol.style.strokeWidth;\n var actualHeight = symbol.wrapper.actualSize.height + symbol.style.strokeWidth;\n var style = 'margin-left:' +\n Math.max(this.symbolMargin.left, ((width - actualWidth) / 2))\n + 'px;margin-top:' + Math.max(this.symbolMargin.top, ((height - actualHeight) / 2))\n + 'px;pointer-events:none;transform-origin:0 0;overflow:hidden;';\n if (canvas instanceof HTMLCanvasElement) {\n style += 'transform:scale(.5,.5);';\n }\n ((div && (symbol.shape.type === 'HTML' || symbol.children &&\n symbol.children.length > 0)) ? div : canvas).setAttribute('style', style);\n container.classList.add('e-symbol-draggable');\n return container;\n }\n return canvas;\n };\n SymbolPalette.prototype.getGroupParent = function (item, canvas, container, height, width, isPreview) {\n var div = createHtmlElement('div', { 'id': item.id + (isPreview ? '_html_div_preview' : '_html_div') });\n var htmlLayer = createHtmlElement('div', {\n 'id': item.id + (isPreview ? '_htmlLayer_preview' : '_htmlLayer'),\n 'style': 'width:' + Math.ceil(width + 1) + 'px;' +\n 'height:' + Math.ceil(height + 1) + 'px;position:absolute',\n 'class': 'e-html-layer'\n });\n var htmlLayerDiv = createHtmlElement('div', {\n 'id': item.id + (isPreview ? '_htmlLayer_div_preview' : '_htmlLayer_div'),\n 'style': 'width:' + Math.ceil(width + 1) + 'px;' +\n 'height:' + Math.ceil(height + 1) + 'px;position:absolute',\n });\n htmlLayer.appendChild(htmlLayerDiv);\n div.appendChild(htmlLayer);\n canvas = CanvasRenderer.createCanvas((isPreview ? (item.id + '_preview') : item.id), Math.ceil(width) + 1, Math.ceil(height) + 1);\n div.appendChild(canvas);\n container.appendChild(div);\n this.diagramRenderer.renderElement(item.wrapper.children[0].children[0], canvas, htmlLayer);\n return div;\n };\n SymbolPalette.prototype.getHtmlSymbol = function (symbol, canvas, container, height, width, isPreview) {\n var div = createHtmlElement('div', {\n 'id': symbol.id + (isPreview ? '_html_div_preview' : '_html_div')\n });\n var htmlLayer = createHtmlElement('div', {\n 'id': symbol.id + (isPreview ? '_htmlLayer_preview' : '_htmlLayer'),\n 'style': 'width:' + Math.ceil(width + 1) + 'px;' +\n 'height:' + Math.ceil(height + 1) + 'px;position:absolute',\n 'class': 'e-html-layer'\n });\n var htmlLayerDiv = createHtmlElement('div', {\n 'id': symbol.id + (isPreview ? '_htmlLayer_div_preview' : '_htmlLayer_div'),\n 'style': 'width:' + Math.ceil(width + 1) + 'px;' +\n 'height:' + Math.ceil(height + 1) + 'px;position:absolute',\n });\n htmlLayer.appendChild(htmlLayerDiv);\n div.appendChild(htmlLayer);\n canvas = CanvasRenderer.createCanvas(symbol.id, Math.ceil((symbol.wrapper.actualSize.width + symbol.style.strokeWidth) * 2) + 1, Math.ceil((symbol.wrapper.actualSize.height + symbol.style.strokeWidth) * 2) + 1);\n container.appendChild(canvas);\n canvas.getContext('2d').setTransform(2, 0, 0, 2, 0, 0);\n div.appendChild(canvas);\n container.appendChild(div);\n this.diagramRenderer.renderElement(symbol.wrapper.children[0].children[0], canvas, htmlLayer);\n return div;\n };\n SymbolPalette.prototype.getSymbolSize = function (symbol, symbolInfo) {\n var width = symbol.wrapper.actualSize.width;\n var height = symbol.wrapper.actualSize.height;\n if (!this.symbolWidth && !this.symbolHeight) {\n width += this.symbolMargin.left + this.symbolMargin.right + symbol.style.strokeWidth;\n height += this.symbolMargin.top + this.symbolMargin.bottom + symbol.style.strokeWidth;\n }\n else {\n width = this.symbolWidth;\n height = Math.max(this.symbolHeight, height);\n }\n return new Size(width, height);\n };\n //end region - rendering symbols\n //region event handlers\n SymbolPalette.prototype.getMousePosition = function (e) {\n var offsetY;\n var offsetX;\n var touchArg;\n if (e.type.indexOf('touch') !== -1) {\n touchArg = e;\n var pageY = touchArg.changedTouches[0].clientY;\n var pageX = touchArg.changedTouches[0].clientX;\n offsetY = pageY - this.element.offsetTop;\n offsetX = pageX - this.element.offsetLeft;\n }\n else {\n offsetY = e.clientY - this.element.offsetTop;\n offsetX = e.clientX - this.element.offsetLeft;\n }\n return { x: offsetX, y: offsetY };\n };\n SymbolPalette.prototype.mouseMove = function (e, touches) {\n if (this.highlightedSymbol && (!this.selectedSymbol\n || this.selectedSymbol.id + '_container' !== this.highlightedSymbol.id)) {\n this.highlightedSymbol.classList.remove('e-symbol-hover');\n this.highlightedSymbol.style.backgroundColor = '';\n this.highlightedSymbol = null;\n }\n var id = e.target.id.split('_container')[0];\n if (this.symbolTable[id]) {\n var container = document.getElementById(id + '_container');\n container.classList.add('e-symbol-hover');\n this.highlightedSymbol = container;\n }\n e.preventDefault();\n };\n SymbolPalette.prototype.mouseUp = function (evt) {\n if (evt && evt.target) {\n if (evt.srcElement.id === 'iconSearch') {\n var element = document.getElementById('iconSearch');\n if (element.classList.contains('e-clear-searchtext')) {\n element.className = 'e-input-group-icon e-search e-icons';\n document.getElementById('textEnter').value = '';\n this.searchPalette('');\n }\n }\n else {\n var id = evt.target.id.split('_container')[0];\n if (id && this.selectedSymbol) {\n var args = { oldValue: this.selectedSymbol.id, newValue: id };\n var event_1 = 'paletteSelectionChange';\n this.trigger(event_1, args);\n evt.preventDefault();\n }\n }\n }\n };\n SymbolPalette.prototype.keyUp = function (evt) {\n var _this = this;\n if (this.enableSearch) {\n var palette_1 = this;\n var element = document.getElementById('iconSearch');\n element.className = 'e-input-group-icon e-clear-searchtext e-icons';\n if (evt && (evt.key === 'Enter' || evt.keyCode === 13)) {\n if (evt.target instanceof HTMLInputElement) {\n this.searchPalette(evt.target.value);\n }\n }\n else {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(function () {\n if (evt.target instanceof HTMLInputElement) {\n palette_1.searchPalette(evt.target.value);\n _this.timer = null;\n }\n }, 500);\n }\n }\n };\n SymbolPalette.prototype.mouseDown = function (evt) {\n var id = evt.target.id.split('_container')[0];\n if (this.selectedSymbol) {\n var oldSymbol = document.getElementById(this.selectedSymbol.id + '_container');\n if (id !== this.selectedSymbol.id && oldSymbol) {\n oldSymbol.classList.remove('e-symbol-selected');\n }\n var container = document.getElementById(this.selectedSymbol.id + '_container');\n if (container) {\n container.style.backgroundColor = '';\n }\n this.selectedSymbol = null;\n }\n if (this.symbolTable[id]) {\n var container = document.getElementById(id + '_container');\n container.classList.add('e-symbol-selected');\n this.selectedSymbol = this.symbolTable[id];\n evt.preventDefault();\n }\n };\n //end region - event handlers\n // region - draggable\n SymbolPalette.prototype.initDraggable = function () {\n if (this.allowDrag) {\n var drag = void 0;\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-symbol-draggable',\n helper: this.helper,\n dragStart: this.dragStart,\n dragStop: this.dragStop,\n drag: function (args) {\n var target = 'target';\n var parent = parentsUntil(args[target], 'e-droppable');\n if (parent && parent.classList.contains('e-diagram')) {\n var e2eInstance = 'ej2_instances';\n parent[e2eInstance][0].droppable.over(args);\n }\n },\n cursorAt: { left: this.symbolPreview.offset.x, top: this.symbolPreview.offset.y }\n });\n }\n };\n SymbolPalette.prototype.dragStart = function (e) {\n var element = this.helper[0];\n if (element) {\n element.setAttribute('paletteId', this.element.id);\n }\n };\n SymbolPalette.prototype.dragStop = function (e) {\n if (!parentsUntil(e.target, 'e-diagram')) {\n remove(e.helper);\n }\n };\n //end region - draggable \n //region - helper methods\n SymbolPalette.prototype.scaleSymbol = function (symbol, symbolContainer, sw, sh, width, height, preview) {\n if (symbol instanceof Connector) {\n var wrapper = symbol.wrapper;\n symbol.wrapper = symbolContainer.children[0];\n var point = symbol.scale(sw, sh, width, height, symbolContainer.children[0]);\n var difX = width / 2 - symbolContainer.children[0].children[0].offsetX + point.x / 2;\n var difY = height / 2 - symbolContainer.children[0].children[0].offsetY + point.y / 2;\n for (var _i = 0, _a = symbolContainer.children[0].children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.offsetX += difX;\n child.offsetY += difY;\n child.staticSize = false;\n }\n symbol.wrapper = wrapper;\n }\n else if (symbol.shape instanceof BpmnShape && this.bpmnModule) {\n var wrapper = symbol.wrapper;\n symbol.wrapper = symbolContainer;\n symbolContainer.children[0].width = width;\n symbolContainer.children[0].height = height;\n this.bpmnModule.updateBPMN({ width: width, height: height }, symbol, symbol, null);\n symbol.wrapper = wrapper;\n }\n else {\n if (symbol.children) {\n var parentNode = symbol.children;\n var w = 0;\n var h = 0;\n if (!preview) {\n var node = void 0;\n var container = void 0;\n for (var i = 0; i < parentNode.length; i++) {\n container = symbolContainer.children[0].children[i];\n if (container) {\n if (container.children[0].children) {\n this.measureChild(container);\n }\n node = this.symbolTable[container.id];\n container.width = node.width;\n container.height = node.height;\n container.measure(new Size());\n container.arrange(container.children[0].desiredSize);\n }\n }\n }\n w = width / symbolContainer.children[0].desiredSize.width;\n h = height / symbolContainer.children[0].desiredSize.height;\n symbolContainer.children[0].measure(new Size());\n symbolContainer.children[0].arrange(symbolContainer.children[0].desiredSize);\n if (!preview) {\n var children = void 0;\n for (var i = 0; i < parentNode.length; i++) {\n children = symbolContainer.children[0].children[i];\n if (children) {\n if (children.children[0].children) {\n this.scaleChildren(children, w, h, symbol);\n }\n this.scaleGroup(children, w, h, symbol);\n }\n }\n }\n if (preview) {\n var node = void 0;\n var scaleWidth = void 0;\n var scaleHeight = void 0;\n var children = void 0;\n for (var i = 0; i < parentNode.length; i++) {\n node = this.symbolTable[parentNode[i]];\n scaleWidth = width / symbol.wrapper.children[0].desiredSize.width;\n scaleHeight = height / symbol.wrapper.children[0].desiredSize.height;\n children = symbolContainer.children[0].children[i];\n if (children) {\n if (children.children[0].children) {\n this.scaleChildren(children, scaleWidth, scaleHeight, symbol, true);\n }\n this.scaleGroup(children, scaleWidth, scaleHeight, symbol, true);\n }\n }\n symbol.wrapper.children[0].measure(new Size());\n symbol.wrapper.children[0].arrange(symbol.wrapper.children[0].desiredSize);\n }\n }\n else {\n scaleElement(symbolContainer.children[0], sw, sh, symbolContainer);\n }\n }\n };\n SymbolPalette.prototype.scaleChildren = function (container, w, h, symbol, preview) {\n var child;\n for (var i = 0; i < container.children.length; i++) {\n child = container.children[i];\n if (!child.children[0].children) {\n this.scaleGroup(child, w, h, symbol, preview);\n }\n else {\n this.scaleChildren(child, w, h, symbol, preview);\n }\n }\n };\n SymbolPalette.prototype.measureChild = function (container) {\n var childContainer;\n var node;\n for (var i = 0; i < container.children.length; i++) {\n childContainer = container.children[i];\n if (!childContainer.children[0].children) {\n node = this.symbolTable[childContainer.id];\n childContainer.width = node.width;\n childContainer.height = node.height;\n childContainer.measure(new Size());\n childContainer.arrange(childContainer.children[0].desiredSize);\n }\n else {\n this.measureChild(childContainer);\n }\n }\n };\n SymbolPalette.prototype.scaleGroup = function (child, w, h, symbol, preview) {\n child.width = child.width * w;\n child.height = (child.height * h);\n child.offsetX = preview ? (child.offsetX * w) - symbol.style.strokeWidth : (child.offsetX * w) + symbol.style.strokeWidth / 2;\n child.offsetY = preview ? (child.offsetY * h) - symbol.style.strokeWidth : (child.offsetY * h) + symbol.style.strokeWidth / 2;\n child.measure(new Size());\n child.arrange(child.children[0].desiredSize);\n };\n SymbolPalette.prototype.refreshPalettes = function () {\n this.accordionElement.items = [];\n this.updatePalettes();\n this.accordionElement.dataBind();\n };\n SymbolPalette.prototype.updatePalettes = function () {\n for (var i = 0; i < this.palettes.length; i++) {\n var symGroup = this.palettes[i];\n this.initSymbols(symGroup);\n this.renderPalette(symGroup);\n }\n };\n SymbolPalette.prototype.createTextbox = function () {\n var searchDiv = createHtmlElement('div', { id: this.element.id + '_search' });\n searchDiv.setAttribute('style', 'backgroundColor:white;height:30px');\n searchDiv.className = 'e-input-group';\n this.element.appendChild(searchDiv);\n var textBox = createHtmlElement('input', {});\n textBox.placeholder = 'Search Shapes';\n textBox.id = 'textEnter';\n textBox.setAttribute('style', 'width:100%;height:auto');\n textBox.className = 'e-input';\n searchDiv.appendChild(textBox);\n var span = createHtmlElement('span', { id: 'iconSearch', className: 'e-input-group-icon e-search e-icons' });\n searchDiv.appendChild(span);\n };\n SymbolPalette.prototype.searchPalette = function (value) {\n var symbolGroup = [];\n var element = document.getElementById('SearchPalette');\n var paletteDiv;\n //remove the existing child in palette\n if (element) {\n for (var k = element.children.length - 1; k >= 0; k--) {\n element.removeChild(element.children[k]);\n }\n }\n //add the searched item in array collection\n for (var i = 0; i < this.palettes.length; i++) {\n var symbolPaletteGroup = this.palettes[i];\n for (var j = 0; j < symbolPaletteGroup.symbols.length; j++) {\n var item = symbolPaletteGroup.symbols[j];\n if (value !== '' && item.id.toLowerCase().indexOf(value.toLowerCase()) !== -1) {\n symbolGroup.push(item);\n }\n }\n }\n var filterSymbols = getFunction(this.filterSymbols);\n if (filterSymbols) {\n symbolGroup = filterSymbols(symbolGroup) || [];\n }\n //create a palette collection\n if (!element) {\n paletteDiv = this.createSearchPalette(paletteDiv);\n element = paletteDiv;\n }\n //add the symbols into search palette\n if (symbolGroup.length > 0) {\n for (var _i = 0, symbolGroup_1 = symbolGroup; _i < symbolGroup_1.length; _i++) {\n var symbol = symbolGroup_1[_i];\n this.getSymbolContainer(symbol, element);\n }\n }\n else if (value !== '') {\n var emptyDiv = createHtmlElement('div', { 'id': 'EmptyDiv', 'style': 'text-align:center;font-style:italic' });\n emptyDiv.innerHTML = 'No Items To Display';\n element.appendChild(emptyDiv);\n }\n else {\n var element_1 = document.getElementById('iconSearch');\n element_1.className = 'e-input-group-icon e-search e-icons';\n this.accordionElement.removeItem(0);\n }\n };\n SymbolPalette.prototype.createSearchPalette = function (paletteDiv) {\n paletteDiv = createHtmlElement('div', { 'id': 'SearchPalette', 'style': 'display:none;overflow:auto;' });\n this.element.appendChild(paletteDiv);\n var paletteCollection = {\n header: 'Search Results', expanded: true,\n content: '#SearchPalette',\n };\n this.accordionElement.addItem(paletteCollection, 0);\n return paletteDiv;\n };\n /**\n * Method to bind events for the symbol palette\n */\n SymbolPalette.prototype.wireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var stopEvent = Browser.touchEndEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = 'mouseleave';\n var keyEvent = 'keyup';\n EventHandler.add(this.element, startEvent, this.mouseDown, this);\n EventHandler.add(this.element, moveEvent, this.mouseMove, this);\n EventHandler.add(this.element, stopEvent, this.mouseUp, this);\n EventHandler.add(this.element, keyEvent, this.keyUp, this);\n // initialize the draggable component\n this.initDraggable();\n };\n /**\n * Method to unbind events for the symbol palette\n */\n SymbolPalette.prototype.unWireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var stopEvent = Browser.touchEndEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var keyEvent = 'keyup';\n EventHandler.remove(this.element, startEvent, this.mouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseUp);\n EventHandler.remove(this.element, keyEvent, this.keyUp);\n };\n __decorate([\n Property('S')\n ], SymbolPalette.prototype, \"accessKey\", void 0);\n __decorate([\n Property('100%')\n ], SymbolPalette.prototype, \"width\", void 0);\n __decorate([\n Property('100%')\n ], SymbolPalette.prototype, \"height\", void 0);\n __decorate([\n Collection([], Palette)\n ], SymbolPalette.prototype, \"palettes\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getSymbolInfo\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"filterSymbols\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getSymbolTemplate\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"symbolWidth\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"symbolHeight\", void 0);\n __decorate([\n Complex({ left: 10, right: 10, top: 10, bottom: 10 }, Margin)\n ], SymbolPalette.prototype, \"symbolMargin\", void 0);\n __decorate([\n Property(true)\n ], SymbolPalette.prototype, \"allowDrag\", void 0);\n __decorate([\n Complex({}, SymbolPreview)\n ], SymbolPalette.prototype, \"symbolPreview\", void 0);\n __decorate([\n Property(false)\n ], SymbolPalette.prototype, \"enableSearch\", void 0);\n __decorate([\n Property(true)\n ], SymbolPalette.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Multiple')\n ], SymbolPalette.prototype, \"expandMode\", void 0);\n __decorate([\n Event()\n ], SymbolPalette.prototype, \"paletteSelectionChange\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getNodeDefaults\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getConnectorDefaults\", void 0);\n return SymbolPalette;\n}(Component));\nexport { SymbolPalette };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { DiagramRenderer } from '../diagram/rendering/renderer';\nimport { CanvasRenderer } from '../diagram/rendering/canvas-renderer';\nimport { Component, Property, Browser, EventHandler, Event } from '@syncfusion/ej2-base';\nimport { setAttributeHtml, setAttributeSvg, createHtmlElement } from '../diagram/utility/dom-util';\nimport { createSvgElement, getNativeLayer, hasClass } from '../diagram/utility/dom-util';\nimport { Rect } from '../diagram/primitives/rect';\nimport { Size } from '../diagram/primitives/size';\nimport { SvgRenderer } from '../diagram/rendering/svg-renderer';\n/**\n * Overview control allows you to see a preview or an overall view of the entire content of a Diagram.\n * This helps you to look at the overall picture of a large Diagram\n * To navigate, pan, or zoom, on a particular position of the page.\n * ```html\n *
    \n *
    \n * ```\n * ```typescript\n * let overview: Overview;\n * let diagram: Diagram = new Diagram({\n * width:'1000px', height:'500px' });\n * diagram.appendTo('#diagram');\n * let options: OverviewModel = {};\n * options.sourceID = 'diagram';\n * options.width = '250px';\n * options.height = '500px';\n * overview = new Overview(options);\n * overview.appendTo('#overview');\n * ```\n */\nvar Overview = /** @class */ (function (_super) {\n __extends(Overview, _super);\n function Overview(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.mode = 'Canvas';\n /** @private */\n _this.id = 'overview';\n _this.actionName = '';\n _this.startPoint = null;\n _this.currentPoint = null;\n _this.prevPoint = null;\n _this.scale = null;\n _this.inAction = false;\n _this.viewPortRatio = 1;\n _this.horizontalOffset = 0;\n _this.verticalOffset = 0;\n _this.model = {};\n _this.event = true;\n _this.model = { width: _this.width, height: _this.height };\n return _this;\n }\n /**\n * Updates the overview control when the objects are changed\n * @param newProp Lists the new values of the changed properties\n * @param oldProp Lists the old values of the changed properties\n */\n Overview.prototype.onPropertyChanged = function (newProp, oldProp) {\n var objectArray = [];\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'sourceID':\n this.setParent(newProp.sourceID);\n break;\n case 'width':\n case 'height':\n this.renderCanvas();\n this.setParent(this.sourceID);\n break;\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n Overview.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initialize nodes, connectors and renderer\n */\n Overview.prototype.preRender = function () {\n this.element.style.background = 'transparent';\n this.unWireEvents();\n this.wireEvents();\n };\n Overview.prototype.render = function () {\n this.diagramRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), false);\n this.renderCanvas();\n this.setParent(this.sourceID);\n };\n Overview.prototype.getSizeValue = function (real) {\n var text;\n if (real.toString().indexOf('px') > 0 || real.toString().indexOf('%') > 0) {\n text = real.toString();\n }\n else {\n text = real.toString() + 'px';\n }\n return text;\n };\n Overview.prototype.renderCanvas = function (options) {\n var canvas = document.getElementById(this.element.id + '_canvas');\n if (!canvas) {\n canvas = createHtmlElement('div', {});\n this.element.appendChild(canvas);\n }\n var attribute = {\n 'id': this.element.id + '_canvas', 'class': 'drawing',\n 'style': 'position:relative; height:' + this.getSizeValue(this.model.height) + '; width:' +\n this.getSizeValue(this.model.width) +\n ';style:-ms-touch-action: none;touch-action: none;'\n };\n setAttributeHtml(canvas, attribute);\n this.element.setAttribute('tabindex', String(0));\n this.element.style.overflow = 'hidden';\n this.element.style.height = String(this.model.height);\n this.element.style.width = String(this.model.width);\n this.canvas = canvas;\n };\n Overview.prototype.setParent = function (id) {\n var element = document.getElementById(id);\n var instance = 'ej2_instances';\n if (this.parent) {\n var oldparent = this.parent;\n this.parent = null;\n oldparent.setOverview(null, this.element.id);\n this.removeDocument(this);\n }\n this.parent = this.getDiagram(element, instance);\n if (this.parent) {\n this.parent.setOverview(this);\n }\n };\n Overview.prototype.getDiagram = function (element, instance) {\n var diagram;\n var n = element[instance].length;\n for (var i = 0; i < n; i++) {\n if (hasClass(element[instance][i].element, 'e-diagram')) {\n diagram = element[instance][i];\n break;\n }\n }\n return diagram;\n };\n Overview.prototype.unWireEvents = function () {\n var start = Browser.touchStartEvent;\n var move = Browser.touchMoveEvent;\n var evnt;\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n var stop = Browser.touchEndEvent;\n EventHandler.remove(this.element, start, this.mouseDown);\n EventHandler.remove(this.element, move, this.mouseMove);\n EventHandler.remove(this.element, stop, this.mouseUp);\n EventHandler.remove(this.element, cancel, this.documentMouseUp);\n EventHandler.remove(window, 'resize', this.windowResize);\n var container = document.getElementById(this.sourceID + 'content');\n if (container) {\n EventHandler.remove(container, 'scroll', this.scrolled);\n }\n };\n Overview.prototype.wireEvents = function () {\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n EventHandler.add(this.element, start, this.mouseDown, this);\n EventHandler.add(this.element, move, this.mouseMove, this);\n EventHandler.add(this.element, stop, this.mouseUp, this);\n EventHandler.add(this.element, cancel, this.documentMouseUp, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n var container = document.getElementById(this.sourceID + 'content');\n if (container) {\n EventHandler.add(container, 'scroll', this.scrolled, this);\n }\n };\n /**\n * @private\n */\n /**\n * @private\n */\n Overview.prototype.renderDocument = function (view) {\n view.canvas = this.canvas;\n var g = document.getElementById(this.canvas.id + '_svg');\n if (g) {\n g.parentNode.removeChild(g);\n }\n var attr = {\n id: this.canvas.id + '_svg',\n version: '1.1',\n xlink: 'http://www.w3.org/1999/xlink',\n 'class': 'overview_svg'\n };\n var svg = createSvgElement('svg', attr);\n this.svg = svg;\n view.svg = svg;\n view.canvas.appendChild(svg);\n var ovw = document.getElementById(this.element.id);\n var element = ovw;\n var eWidth = element.clientWidth;\n var eHeight = element.clientHeight;\n var bRect = element.getBoundingClientRect();\n // Check for the window resize\n var screenX = (window.screenX < 0) ? window.screenX * -1 : window.screenX;\n var screenY = (window.screenY < 0) ? window.screenY * -1 : window.screenY;\n if (eWidth === 0) {\n eWidth = Math.floor(((window.innerWidth - screenX) - Math.floor(bRect.left)));\n }\n if (eHeight === 0) {\n eHeight = Math.floor(((window.innerHeight - screenY) - Math.floor(bRect.top)));\n }\n svg.setAttribute('width', String(eWidth));\n svg.setAttribute('height', String(eHeight));\n this.model.width = eWidth;\n this.model.height = eHeight;\n var attributes;\n if (!view.diagramLayerDiv) {\n view.diagramLayerDiv = createHtmlElement('div', {});\n var container = document.getElementById(this.element.id);\n view.diagramLayer = CanvasRenderer.createCanvas(this.element.id + '_diagramLayer', this.model.width, this.model.height);\n view.diagramLayer.setAttribute('style', 'position:absolute; left:0px; top:0px ');\n view.diagramLayerDiv.appendChild(view.diagramLayer);\n view.canvas.appendChild(view.diagramLayerDiv);\n }\n attributes = {\n 'id': this.element.id + '_diagramLayer_div',\n 'style': 'width:' + this.model.width + 'px; height:' + this.model.height + 'px;position:absolute;top:0px;left:0px'\n };\n setAttributeHtml(view.diagramLayerDiv, attributes);\n this.renderHtmlLayer(view.canvas);\n this.renderNativeLayer(view.canvas, view);\n this.addOverviewRectPanel(view);\n };\n /** @private */\n Overview.prototype.removeDocument = function (view) {\n var svg = document.getElementById(this.canvas.id + '_svg');\n this.canvas.removeChild(svg);\n var htmlLayer = document.getElementById(this.element.id + '_htmlLayer');\n this.canvas.removeChild(htmlLayer);\n var diagramLayer = document.getElementById(this.element.id + '_diagramLayer_div');\n this.canvas.removeChild(diagramLayer);\n view.diagramLayerDiv = null;\n view.diagramLayer = null;\n };\n Overview.prototype.renderHtmlLayer = function (canvas) {\n var htmlLayer = createHtmlElement('div', {\n 'id': this.element.id + '_htmlLayer', 'class': 'e-html-layer',\n 'style': 'pointer-events:none;position:absolute;top:0px;left:0px;'\n });\n var options = {\n 'id': this.element.id + '_htmlLayer_div',\n 'style': 'position:absolute;top:0px;left:0px;'\n };\n var htmlDiv = createHtmlElement('div', options);\n htmlLayer.appendChild(htmlDiv);\n canvas.appendChild(htmlLayer);\n return htmlLayer;\n };\n Overview.prototype.renderNativeLayer = function (canvas, view) {\n var nativeLayerSvg = this.parent.createSvg(this.element.id + '_nativeLayer_svg', this.model.width, this.model.height);\n var nativeLayer = createSvgElement('g', { 'id': this.element.id + '_nativeLayer' });\n nativeLayerSvg.appendChild(nativeLayer);\n view.diagramLayerDiv.appendChild(nativeLayerSvg);\n setAttributeSvg(nativeLayerSvg, { 'class': 'e-native-layer' });\n };\n Overview.prototype.addOverviewRectPanel = function (view) {\n var svg = document.getElementById(this.canvas.id + '_overviewsvg');\n if (svg) {\n svg.parentNode.removeChild(svg);\n }\n var attr = ({\n id: this.canvas.id + '_overviewsvg',\n version: '1.1',\n xlink: 'http://www.w3.org/1999/xlink',\n 'style': 'position:absolute;left:0px;top:0px; aria-label:Specifies overview',\n width: this.model.width,\n height: this.model.height\n });\n svg = createSvgElement('svg', attr);\n view.canvas.appendChild(svg);\n var ovw = createSvgElement('g', { 'id': this.element.id + '_overviewlayer', 'style': 'pointer-events:none' });\n svg.appendChild(ovw);\n var rect = createSvgElement('rect', {\n 'fill': 'transparent', 'width': '100%', 'height': '100%', 'class': 'overviewbackrect',\n 'id': this.canvas.id + 'overviewbackrect'\n });\n rect.setAttribute('style', ' pointer-events: none; ');\n ovw.appendChild(rect);\n var svgDocument = (ovw);\n var g = createSvgElement('g', { 'id': this.canvas.id + 'overviewhandle', 'style': 'pointer-events:all' });\n ovw.appendChild(g);\n var innerrect = createSvgElement('rect', { 'id': this.canvas.id + 'overviewrect', 'fill': 'transparent' });\n g.appendChild(innerrect);\n this.renderOverviewCorner('left', g);\n this.renderOverviewCorner('right', g);\n this.renderOverviewCorner('top', g);\n this.renderOverviewCorner('bottom', g);\n this.renderOverviewCorner('topleft', g);\n this.renderOverviewCorner('topright', g);\n this.renderOverviewCorner('bottomleft', g);\n this.renderOverviewCorner('bottomright', g);\n };\n Overview.prototype.renderOverviewCorner = function (name, parent) {\n var svg = this.svg;\n var shape;\n if (name === 'top' || name === 'bottom' || name === 'right' || name === 'left') {\n shape = 'rect';\n }\n else {\n shape = 'circle';\n }\n var innerrect = createSvgElement(shape, { 'id': this.canvas.id + 'visible' + name });\n parent.appendChild(innerrect);\n var transrect = createSvgElement(shape, {\n 'id': this.canvas.id + name, 'class': 'overviewresizer', 'fill': 'transparent'\n });\n parent.appendChild(transrect);\n };\n Overview.prototype.updateOverviewRectangle = function () {\n var difx = this.currentPoint.x - this.prevPoint.x;\n var dify = this.currentPoint.y - this.prevPoint.y;\n var size = new Size();\n size.width = 0;\n size.height = 0;\n var x = 0;\n var y = 0;\n var w;\n var h;\n switch (this.resizeDirection) {\n case 'left':\n size.width -= difx;\n size.height -= difx / this.viewPortRatio;\n x = difx;\n y = difx / this.viewPortRatio;\n y /= 2;\n break;\n case 'right':\n size.width += difx;\n size.height += difx / this.viewPortRatio;\n y = difx / this.viewPortRatio;\n y /= -2;\n break;\n case 'top':\n size.height -= dify;\n size.width -= dify * this.viewPortRatio;\n y = dify;\n x = dify * this.viewPortRatio;\n x /= 2;\n break;\n case 'bottom':\n size.height += dify;\n size.width += dify * this.viewPortRatio;\n x = dify * this.viewPortRatio;\n x /= -2;\n break;\n case 'topleft':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = dify * this.viewPortRatio;\n }\n else {\n dify = difx / this.viewPortRatio;\n }\n size.width -= difx;\n size.height -= dify;\n x = difx;\n y = dify;\n break;\n case 'topright':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = -dify * this.viewPortRatio;\n }\n else {\n dify = -(difx / this.viewPortRatio);\n }\n y = dify;\n size.width += difx;\n size.height -= dify;\n break;\n case 'bottomleft':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = -dify * this.viewPortRatio;\n }\n else {\n dify = -difx / this.viewPortRatio;\n }\n x = difx;\n size.width -= difx;\n size.height += dify;\n break;\n case 'bottomright':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = dify * this.viewPortRatio;\n }\n else {\n dify = difx / this.viewPortRatio;\n }\n size.width += difx;\n size.height += dify;\n break;\n }\n this.updateHelper(x, y, size, w, h);\n };\n Overview.prototype.updateHelper = function (difx, dify, size, width, height) {\n var x;\n var y;\n var bounds;\n var svg = this.element.getElementsByTagName('svg')[2];\n var rect = svg.getElementById('helper');\n if (size) {\n bounds = rect.getBBox();\n x = bounds.x + difx;\n y = bounds.y + dify;\n width = bounds.width + size.width;\n height = bounds.height + size.height;\n }\n else {\n var difx_1;\n if (this.currentPoint.x > this.startPoint.x) {\n difx_1 = this.currentPoint.x - this.prevPoint.x;\n }\n else {\n difx_1 = this.prevPoint.x - this.currentPoint.x;\n }\n var dify_1;\n if (this.currentPoint.y > this.startPoint.y) {\n dify_1 = this.currentPoint.y - this.prevPoint.y;\n }\n else {\n dify_1 = this.prevPoint.y - this.currentPoint.y;\n }\n var w = void 0;\n var h = void 0;\n if (Math.abs(dify_1) > Math.abs(difx_1)) {\n difx_1 = this.viewPortRatio * dify_1;\n h = true;\n w = false;\n }\n else {\n dify_1 = difx_1 / this.viewPortRatio;\n w = true;\n h = false;\n }\n bounds = rect.getBBox();\n x = ((this.startPoint.x > this.currentPoint.x) ?\n bounds.x - difx_1 : bounds.x);\n y = ((this.startPoint.y > this.currentPoint.y) ? bounds.y - dify_1 : bounds.y);\n width = bounds.width + difx_1;\n height = bounds.height + dify_1;\n }\n setAttributeSvg(this.helper, {\n 'id': this.helper.id, 'x': x, 'y': y,\n 'width': Math.max(0, width), 'height': Math.max(0, height)\n });\n };\n Overview.prototype.updateOverviewrect = function (x, y, width, height) {\n var rect = document.getElementById(this.canvas.id + 'overviewrect');\n var attr = { x: x, y: y, width: Math.max(1, width), height: Math.max(1, height) };\n setAttributeHtml(rect, attr);\n this.updateOverviewCorner('top', x + 8, y - 2, Math.max(0, width - 16), 2);\n this.updateOverviewCorner('bottom', x + 8, y + height, Math.max(0, width - 16), 2);\n this.updateOverviewCorner('left', x - 2, y + 8, 2, Math.max(0, height - 16));\n this.updateOverviewCorner('right', x + width, y + 8, 2, Math.max(0, height - 16));\n this.updateOverviewCorner('topleft', x, y, 5, 5);\n this.updateOverviewCorner('topright', x + width, y, 5, 5);\n this.updateOverviewCorner('bottomleft', x, y + height, 5, 5);\n this.updateOverviewCorner('bottomright', x + width, y + height, 5, 5);\n };\n Overview.prototype.updateOverviewCorner = function (name, x, y, width, height) {\n var attr;\n var transattr;\n var rectname = 'visible' + name;\n var rect = document.getElementById(this.canvas.id + rectname);\n if (name === 'top' || name === 'bottom' || name === 'right' || name === 'left') {\n attr = { x: x, y: y, width: width, height: height, fill: '#ED1C24' };\n transattr = { x: x - 2, y: y - 2, width: width === 2 ? 4 : width, height: height === 2 ? 4 : height };\n }\n else {\n attr = { cx: x, cy: y, 'r': 4, fill: '#ED1C24' };\n transattr = { cx: x, cy: y, 'r': 6, fill: 'transparent' };\n }\n setAttributeHtml(rect, attr);\n var transrect = document.getElementById(this.canvas.id + name);\n setAttributeHtml(transrect, transattr);\n };\n Overview.prototype.translateOverviewRectangle = function () {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var difx = this.currentPoint.x - this.prevPoint.x;\n var dify = this.currentPoint.y - this.prevPoint.y;\n var viewPort;\n var zoom = Math.min(this.parent.scroller.viewPortWidth / offwidth, this.parent.scroller.viewPortHeight / offheight);\n var svg = this.element.getElementsByTagName('svg')[2];\n var panel = svg.getElementById(this.canvas.id\n + 'overviewrect');\n var bounds = panel.getBBox();\n var x = bounds.x + difx;\n var y = bounds.y + dify;\n var width = bounds.width;\n var height = bounds.height;\n this.updateOverviewrect(x, y, width, height);\n this.updateParentView(this.parent.scroller.currentZoom, x, y, width, height, null);\n };\n Overview.prototype.renderOverviewRect = function (x, y, width, height) {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var viewPort;\n var viewwidth = (width / offwidth) * this.contentWidth;\n var viewheight = (height / offheight) * this.contentHeight;\n var zoom = Math.max(this.parent.scroller.viewPortWidth / viewwidth, this.parent.scroller.viewPortHeight / viewheight);\n if (zoom >= 0.25 && zoom <= 30) {\n var point = { x: 0, y: 0 };\n this.updateParentView(zoom, x, y, width, height, point);\n var bounds = this.scrollOverviewRect(this.parent.scroller.horizontalOffset, this.parent.scroller.verticalOffset, this.parent.scroller.currentZoom, true);\n if (this.helper) {\n var panel = this.element.getElementsByTagName('rect')[10];\n var svgRect = panel.getBBox();\n bounds.x = svgRect.x;\n bounds.y = svgRect.y;\n }\n this.updateOverviewrect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n };\n Overview.prototype.scrollOverviewRect = function (hoffset, voffset, currentZoom, scaled) {\n if (!(this.actionName) || scaled) {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var scale = Math.min(this.contentWidth / offwidth, this.contentHeight / offheight);\n var bounds = new Rect();\n var x = bounds.x = (hoffset / currentZoom) / scale;\n var y = bounds.y = (voffset / currentZoom) / scale;\n var viewPort = void 0;\n var width = bounds.width = (this.parent.scroller.viewPortWidth / currentZoom) / scale;\n var height = bounds.height = (this.parent.scroller.viewPortHeight / currentZoom) / scale;\n var ratio = this.parent.scroller.viewPortWidth / this.parent.scroller.viewPortHeight;\n if (scaled) {\n var rect = new Rect();\n rect.x = x;\n rect.y = y;\n rect.width = width;\n rect.height = height;\n return rect;\n }\n this.updateOverviewrect(-x, -y, width, height);\n }\n return null;\n };\n Overview.prototype.updateParentView = function (zoom, x, y, width, height, focusPoint) {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var scalex = this.contentWidth / offwidth;\n var scaley = this.contentHeight / offheight;\n var hoffset = x * scalex * zoom;\n var voffset = y * scaley * zoom;\n var delx;\n var dely;\n var bounds = this.parent.scroller.getPageBounds();\n if (zoom !== 1 || this.actionName === 'pan') {\n delx = -hoffset - this.parent.scroller.horizontalOffset;\n dely = -voffset - this.parent.scroller.verticalOffset;\n }\n if (this.actionName === 'scale' || this.actionName === 'draw') {\n this.parent.scroller.zoom(zoom / this.parent.scroller.currentZoom, delx, dely, focusPoint);\n }\n else {\n this.parent.pan(delx, dely, focusPoint);\n }\n };\n /** @private */\n Overview.prototype.updateView = function (view) {\n var width;\n var height;\n var bounds = this.parent.scroller.getPageBounds();\n width = bounds.width;\n height = bounds.height;\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var scale;\n var w = Math.max(width, this.parent.scroller.viewPortWidth);\n var h = Math.max(height, this.parent.scroller.viewPortHeight);\n this.contentWidth = w = Math.max(w, (offwidth / offheight) * h);\n this.contentHeight = h = Math.max(h, (offheight / offwidth) * w);\n scale = Math.min(offwidth / w, offheight / h);\n var htmlLayer = document.getElementById(this.element.id + '_htmlLayer');\n htmlLayer.style.webkitTransform = 'scale(' + scale + ') translate(' + -bounds.x + 'px,' + (-bounds.y) + 'px)';\n htmlLayer.style.transform = 'scale(' + scale + ') translate(' + -bounds.x + 'px,' + (-bounds.y) + 'px)';\n var ovw = document.getElementById(this.element.id + '_overviewlayer');\n ovw.setAttribute('transform', 'translate(' + (-bounds.x * scale) + ',' + (-bounds.y * scale) + ')');\n this.horizontalOffset = bounds.x * scale;\n this.verticalOffset = bounds.y * scale;\n var canvas = document.getElementById(this.element.id + '_diagramLayer');\n var nativeLayer = getNativeLayer(this.element.id);\n var context = canvas.getContext('2d');\n var widthratio = (Number(this.model.width) / this.contentWidth);\n var heightratio = (Number(this.model.height) / this.contentHeight);\n widthratio = Math.min(widthratio, heightratio);\n nativeLayer.setAttribute('transform', 'translate('\n + (0) + ',' + (0) + '),scale('\n + widthratio + ')');\n context.setTransform(widthratio, 0, 0, widthratio, 0, 0);\n context.fillStyle = 'red';\n this.scrollOverviewRect(this.parent.scroller.horizontalOffset, this.parent.scroller.verticalOffset, this.parent.scroller.currentZoom);\n };\n // region - Event Handlers\n Overview.prototype.scrolled = function (evt) {\n if (this.event) {\n var bounds = this.scrollOverviewRect(this.parent.scroller.horizontalOffset, this.parent.scroller.verticalOffset, this.parent.scroller.currentZoom, true);\n this.updateOverviewrect(-bounds.x, -bounds.y, bounds.width, bounds.height);\n }\n };\n Overview.prototype.updateCursor = function (evt) {\n if (hasClass(evt.target, ('overviewresizer'))) {\n switch (evt.target.id) {\n case this.canvas.id + 'left':\n this.canvas.style.cursor = 'w-resize';\n break;\n case this.canvas.id + 'right':\n this.canvas.style.cursor = 'e-resize';\n break;\n case this.canvas.id + 'top':\n this.canvas.style.cursor = 'n-resize';\n break;\n case this.canvas.id + 'bottom':\n this.canvas.style.cursor = 's-resize';\n break;\n case this.canvas.id + 'topleft':\n this.canvas.style.cursor = 'nw-resize';\n break;\n case this.canvas.id + 'topright':\n this.canvas.style.cursor = 'ne-resize';\n break;\n case this.canvas.id + 'bottomleft':\n this.canvas.style.cursor = 'sw-resize';\n break;\n case this.canvas.id + 'bottomright':\n this.canvas.style.cursor = 'se-resize';\n break;\n }\n }\n else {\n this.canvas.style.cursor = 'default';\n }\n };\n Overview.prototype.mouseMove = function (evt) {\n this.event = false;\n this.updateCursor(evt);\n this.currentPoint = this.mousePosition(evt);\n if (this.actionName) {\n switch (this.actionName) {\n case 'draw':\n if (!this.inAction && (this.startPoint.x !== this.currentPoint.x || this.startPoint.y !== this.currentPoint.y)) {\n this.initHelper();\n this.inAction = true;\n }\n if (this.inAction) {\n this.updateHelper();\n }\n break;\n case 'scale':\n if (!this.inAction) {\n this.initHelper();\n this.inAction = true;\n }\n this.updateOverviewRectangle();\n break;\n case 'pan':\n if ((this.startPoint.x !== this.currentPoint.x || this.startPoint.y === this.currentPoint.y) || this.inAction) {\n this.inAction = true;\n this.translateOverviewRectangle();\n }\n break;\n }\n }\n this.prevPoint = this.currentPoint;\n };\n Overview.prototype.documentMouseUp = function (evt) {\n this.inAction = false;\n this.actionName = '';\n if (this.helper) {\n this.helper.parentNode.removeChild(this.helper);\n this.helper = null;\n }\n this.event = true;\n document.getElementById(this.canvas.id + 'overviewhandle').style.pointerEvents = 'all';\n };\n Overview.prototype.windowResize = function (evt) {\n var _this = this;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n var element = document.getElementById(_this.element.id);\n var bRect = element.getBoundingClientRect();\n _this.model.width = bRect.width;\n _this.model.height = bRect.height;\n _this.renderCanvas();\n _this.setParent(_this.sourceID);\n }, 10);\n return false;\n };\n /** @private */\n Overview.prototype.mouseDown = function (evt) {\n if (evt.target.id === this.canvas.id + '_overviewsvg') {\n this.actionName = 'draw';\n }\n if (evt.target.id === this.canvas.id + 'overviewrect') {\n this.actionName = 'pan';\n }\n if (hasClass(evt.target, 'overviewresizer')) {\n this.actionName = 'scale';\n switch (evt.target.id) {\n case this.canvas.id + 'left':\n this.resizeDirection = 'left';\n break;\n case this.canvas.id + 'right':\n this.resizeDirection = 'right';\n break;\n case this.canvas.id + 'top':\n this.resizeDirection = 'top';\n break;\n case this.canvas.id + 'bottom':\n this.resizeDirection = 'bottom';\n break;\n case this.canvas.id + 'topleft':\n this.resizeDirection = 'topleft';\n break;\n case this.canvas.id + 'topright':\n this.resizeDirection = 'topright';\n break;\n case this.canvas.id + 'bottomleft':\n this.resizeDirection = 'bottomleft';\n break;\n case this.canvas.id + 'bottomright':\n this.resizeDirection = 'bottomright';\n break;\n }\n }\n this.startPoint = this.prevPoint = this.mousePosition(evt);\n this.viewPortRatio = this.parent.scroller.viewPortWidth / this.parent.scroller.viewPortHeight;\n var overViewHandle = document.getElementById(this.canvas.id + 'overviewhandle');\n overViewHandle.style.pointerEvents = 'none';\n };\n Overview.prototype.mouseUp = function (evt) {\n this.currentPoint = this.mousePosition(evt);\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n if (this.actionName) {\n if ((this.startPoint.x !== this.currentPoint.x || this.startPoint.y !== this.currentPoint.y)) {\n if (this.actionName === 'pan') {\n var i = 0;\n }\n else {\n if (this.helper) {\n var bounds = (this.element.getElementsByTagName('rect')[10]).getBBox();\n this.resizeDirection = this.resizeDirection || '';\n var x = bounds.x;\n var y = bounds.y;\n var width = bounds.width;\n var height = bounds.height;\n var adjust = this.resizeDirection === 'topleft' || this.resizeDirection === 'topright' ||\n this.resizeDirection === 'bottomleft' || this.resizeDirection === 'bottomright';\n this.renderOverviewRect(x, y, width, height);\n }\n }\n }\n else {\n if (evt.target.id === this.canvas.id + '_overviewsvg' || evt.target.id === 'helper') {\n var svg = this.element.getElementsByTagName('svg')[2];\n var g = svg.getElementById(this.canvas.id\n + 'overviewrect');\n var bounds = g.getBBox();\n var width = bounds.width;\n var height = bounds.height;\n this.inAction = true;\n this.actionName = 'pan';\n this.renderOverviewRect(this.currentPoint.x - width / 2, this.currentPoint.y - height / 2, width, height);\n this.inAction = false;\n }\n }\n }\n if (this.helper) {\n this.helper.parentNode.removeChild(this.helper);\n this.helper = null;\n }\n this.actionName = '';\n this.startPoint = null;\n this.currentPoint = null;\n this.prevPoint = null;\n this.helper = null;\n this.viewPortRatio = 1;\n this.resizeDirection = '';\n this.inAction = false;\n this.event = true;\n document.getElementById(this.canvas.id + 'overviewhandle').style.pointerEvents = 'all';\n };\n Overview.prototype.initHelper = function () {\n var g = this.element.getElementsByTagName('svg')[2];\n var scale = this.parent.scroller.currentZoom;\n var x = this.startPoint.x;\n var y = this.startPoint.y;\n var width = 1;\n var height = 1;\n if (this.actionName === 'scale') {\n var rect = g.\n getElementById(this.canvas.id + 'overviewrect');\n var bounds = rect.getBBox();\n x = bounds.x;\n y = bounds.y;\n width = bounds.width;\n height = bounds.height;\n }\n var selectionRect = createSvgElement('rect', {\n 'id': 'helper', x: x, y: y, width: width, height: height,\n 'fill': 'transparent', 'stroke': 'gray', 'stroke-dasharray': '2 2', 'shape-rendering': 'crispEdges'\n });\n var overviewLayer = g.getElementById(this.element.id + '_overviewlayer');\n overviewLayer.appendChild(selectionRect);\n this.helper = selectionRect;\n };\n Overview.prototype.mousePosition = function (evt) {\n var touchArg;\n var offsetX;\n var offsetY;\n if (evt.type.indexOf('touch') !== -1) {\n touchArg = evt;\n var pageX = touchArg.changedTouches[0].clientX;\n var pageY = touchArg.changedTouches[0].clientY;\n offsetX = pageX - this.element.offsetLeft;\n offsetY = pageY - this.element.offsetTop;\n }\n else {\n offsetX = evt.clientX;\n offsetY = evt.clientY;\n }\n var boundingRect = this.element.getBoundingClientRect();\n offsetX = offsetX - boundingRect.left;\n offsetY = offsetY - boundingRect.top;\n return { x: offsetX + this.horizontalOffset, y: offsetY + this.verticalOffset };\n };\n // end region - Event handlers\n /**\n * To destroy the Overview\n * @return {void}\n * @private\n */\n Overview.prototype.destroy = function () {\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n if (document.getElementById(this.element.id)) {\n this.element.classList.remove('e-overview');\n var content = document.getElementById(this.element.id + '_canvas');\n if (content) {\n this.element.removeChild(content);\n }\n }\n this.parent.views.splice(this.parent.views.indexOf(this.element.id), 1);\n this.diagramLayerDiv = null;\n this.canvas = null;\n this.parent = null;\n };\n /**\n * Get module name.\n */\n Overview.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Overview';\n };\n __decorate([\n Property('100%')\n ], Overview.prototype, \"width\", void 0);\n __decorate([\n Property('100%')\n ], Overview.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Overview.prototype, \"sourceID\", void 0);\n __decorate([\n Event()\n ], Overview.prototype, \"created\", void 0);\n return Overview;\n}(Component));\nexport { Overview };\n","import * as index from '@syncfusion/ej2-diagrams';\nindex.Diagram.Inject( index.HierarchicalTree,index.MindMap,index.RadialTree,index.ComplexHierarchicalTree,index.DataBinding,index.Snapping,index.PrintAndExport,index.BpmnDiagrams,index.SymmetricLayout,index.ConnectorBridging,index.UndoRedo,index.LayoutAnimation,index.DiagramContextMenu,index.ConnectorEditing);\nindex.SymbolPalette.Inject( index.BpmnDiagrams);\nexport * from '@syncfusion/ej2-diagrams';\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Dictionary = /** @class */ (function () {\n function Dictionary() {\n this.keysInternal = [];\n this.valuesInternal = [];\n this.item = [];\n }\n Object.defineProperty(Dictionary.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return this.keysInternal.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Dictionary.prototype, \"keys\", {\n /**\n * @private\n */\n get: function () {\n return this.getItem();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n Dictionary.prototype.getItem = function () {\n this.item = [];\n for (var i = 0; i < this.keysInternal.length; i++) {\n this.item.push(this.keysInternal[i]);\n }\n return this.item;\n };\n /**\n * @private\n */\n Dictionary.prototype.add = function (key, value) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key or value is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n // if (index < 0 || index > this.keysInternal.length - 1) {\n if (index < 0) {\n this.keysInternal.push(key);\n this.valuesInternal.push(value);\n }\n return 1;\n // else {\n // throw new RangeError('An item with the same key has already been added.');\n // }\n };\n /**\n * @private\n */\n Dictionary.prototype.get = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n return this.valuesInternal[index];\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.set = function (key, value) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.valuesInternal[index] = value;\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.remove = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.keysInternal.splice(index, 1);\n this.valuesInternal.splice(index, 1);\n return true;\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.containsKey = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n Dictionary.prototype.clear = function () {\n this.keysInternal = [];\n this.valuesInternal = [];\n };\n /**\n * @private\n */\n Dictionary.prototype.destroy = function () {\n this.clear();\n this.keysInternal = undefined;\n this.valuesInternal = undefined;\n };\n return Dictionary;\n}());\nexport { Dictionary };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from './dictionary';\n/**\n * @private\n */\nvar WUniqueFormat = /** @class */ (function () {\n function WUniqueFormat(type) {\n this.referenceCount = 0;\n this.uniqueFormatType = type;\n this.propertiesHash = new Dictionary();\n }\n /**\n * @private\n */\n WUniqueFormat.prototype.isEqual = function (source, property, modifiedValue) {\n var isEqual = false;\n switch (this.uniqueFormatType) {\n case 1:\n isEqual = this.isBorderEqual(source, property, modifiedValue);\n break;\n case 2:\n isEqual = this.isCharacterFormatEqual(source, property, modifiedValue);\n break;\n case 3:\n isEqual = this.isParagraphFormatEqual(source, property, modifiedValue);\n break;\n case 4:\n isEqual = this.isCellFormatEqual(source, property, modifiedValue);\n break;\n case 5:\n isEqual = this.isShadingEqual(source, property, modifiedValue);\n break;\n case 6:\n isEqual = this.isRowFormatEqual(source, property, modifiedValue);\n break;\n case 7:\n isEqual = this.isListFormatEqual(source, property, modifiedValue);\n break;\n case 8:\n isEqual = this.isTableFormatEqual(source, property, modifiedValue);\n break;\n case 9:\n isEqual = this.isListLevelEqual(source, property, modifiedValue);\n break;\n case 10:\n isEqual = this.isSectionFormatEqual(source, property, modifiedValue);\n break;\n default:\n break;\n }\n return isEqual;\n };\n // tslint:disable-next-line:max-line-length\n WUniqueFormat.prototype.isNotEqual = function (property, source, modifiedProperty, modifiedValue, uniqueFormatType) {\n var targetValue = undefined;\n var propertyType = WUniqueFormat.getPropertyType(uniqueFormatType, property);\n if (this.propertiesHash.containsKey(propertyType)) {\n targetValue = this.propertiesHash.get(propertyType);\n }\n var sourceValue = undefined;\n if (property === modifiedProperty) {\n sourceValue = modifiedValue;\n }\n else if (source.containsKey(propertyType)) {\n sourceValue = source.get(propertyType);\n }\n // tslint:disable-next-line:max-line-length\n if (!(targetValue === sourceValue || (!isNullOrUndefined(targetValue) && !isNullOrUndefined(sourceValue) && targetValue === sourceValue))) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n WUniqueFormat.getPropertyType = function (uniqueFormatType, property) {\n var type = 0;\n switch (uniqueFormatType) {\n case 1:\n type = this.getBorderPropertyType(property);\n break;\n case 2:\n type = this.getCharacterFormatPropertyType(property);\n break;\n case 3:\n type = this.getParaFormatPropertyType(property);\n break;\n case 4:\n type = this.getCellFormatPropertyType(property);\n break;\n case 5:\n type = this.getShadingPropertyType(property);\n break;\n case 6:\n type = this.getRowFormatType(property);\n break;\n case 7:\n type = this.getListFormatType(property);\n break;\n case 8:\n type = this.getTableFormatType(property);\n break;\n case 9:\n type = this.getListLevelType(property);\n break;\n case 10:\n type = this.getSectionFormatType(property);\n break;\n default:\n break;\n }\n return type;\n };\n WUniqueFormat.getRowFormatType = function (property) {\n if (property === 'allowBreakAcrossPages') {\n return 1;\n }\n if (property === 'isHeader') {\n return 2;\n }\n if (property === 'height') {\n return 3;\n }\n if (property === 'heightType') {\n return 4;\n }\n if (property === 'gridBefore') {\n return 5;\n }\n if (property === 'gridBeforeWidth') {\n return 6;\n }\n if (property === 'gridBeforeWidthType') {\n return 7;\n }\n if (property === 'gridAfter') {\n return 8;\n }\n if (property === 'gridAfterWidth') {\n return 9;\n }\n if (property === 'gridAfterWidthType') {\n return 10;\n }\n return 0;\n };\n WUniqueFormat.getListFormatType = function (property) {\n if (property === 'listId') {\n return 1;\n }\n if (property === 'listLevelNumber') {\n return 2;\n }\n return 0;\n };\n WUniqueFormat.getTableFormatType = function (property) {\n if (property === 'leftMargin') {\n return 1;\n }\n if (property === 'rightMargin') {\n return 2;\n }\n if (property === 'topMargin') {\n return 3;\n }\n if (property === 'bottomMargin') {\n return 4;\n }\n if (property === 'cellSpacing') {\n return 5;\n }\n if (property === 'leftIndent') {\n return 6;\n }\n if (property === 'tableAlignment') {\n return 7;\n }\n if (property === 'preferredWidth') {\n return 8;\n }\n if (property === 'preferredWidthType') {\n return 9;\n }\n return 0;\n };\n WUniqueFormat.getListLevelType = function (property) {\n if (property === 'listLevelPattern') {\n return 1;\n }\n if (property === 'startAt') {\n return 2;\n }\n if (property === 'followCharacter') {\n return 3;\n }\n if (property === 'numberFormat') {\n return 4;\n }\n if (property === 'restartLevel') {\n return 5;\n }\n return 0;\n };\n WUniqueFormat.getShadingPropertyType = function (property) {\n if (property === 'backgroundColor') {\n return 1;\n }\n if (property === 'foregroundColor') {\n return 2;\n }\n if (property === 'textureStyle') {\n return 3;\n }\n return 0;\n };\n WUniqueFormat.getCellFormatPropertyType = function (property) {\n if (property === 'leftMargin') {\n return 1;\n }\n if (property === 'rightMargin') {\n return 2;\n }\n if (property === 'topMargin') {\n return 3;\n }\n if (property === 'bottomMargin') {\n return 4;\n }\n if (property === 'columnSpan') {\n return 5;\n }\n if (property === 'rowSpan') {\n return 6;\n }\n if (property === 'verticalAlignment') {\n return 7;\n }\n if (property === 'preferredWidthType') {\n return 8;\n }\n if (property === 'preferredWidth') {\n return 9;\n }\n if (property === 'cellWidth') {\n return 10;\n }\n return 0;\n };\n WUniqueFormat.getBorderPropertyType = function (property) {\n if (property === 'color') {\n return 1;\n }\n if (property === 'lineStyle') {\n return 2;\n }\n if (property === 'lineWidth') {\n return 3;\n }\n if (property === 'shadow') {\n return 4;\n }\n if (property === 'space') {\n return 5;\n }\n if (property === 'hasNoneStyle') {\n return 6;\n }\n return 0;\n };\n WUniqueFormat.getCharacterFormatPropertyType = function (property) {\n if (property === 'fontColor') {\n return 1;\n }\n if (property === 'fontFamily') {\n return 2;\n }\n if (property === 'fontSize') {\n return 3;\n }\n if (property === 'bold') {\n return 4;\n }\n if (property === 'italic') {\n return 5;\n }\n if (property === 'underline') {\n return 6;\n }\n if (property === 'strikethrough') {\n return 7;\n }\n if (property === 'baselineAlignment') {\n return 8;\n }\n if (property === 'highlightColor') {\n return 9;\n }\n return 0;\n };\n WUniqueFormat.getParaFormatPropertyType = function (property) {\n if (property === 'leftIndent') {\n return 1;\n }\n if (property === 'rightIndent') {\n return 2;\n }\n if (property === 'firstLineIndent') {\n return 3;\n }\n if (property === 'textAlignment') {\n return 4;\n }\n if (property === 'beforeSpacing') {\n return 5;\n }\n if (property === 'afterSpacing') {\n return 6;\n }\n if (property === 'lineSpacing') {\n return 7;\n }\n if (property === 'lineSpacingType') {\n return 8;\n }\n if (property === 'outlineLevel') {\n return 9;\n }\n return 0;\n };\n WUniqueFormat.getSectionFormatType = function (property) {\n if (property === 'headerDistance') {\n return 1;\n }\n if (property === 'footerDistance') {\n return 2;\n }\n if (property === 'differentFirstPage') {\n return 3;\n }\n if (property === 'differentOddAndEvenPages') {\n return 4;\n }\n if (property === 'pageWidth') {\n return 5;\n }\n if (property === 'pageHeight') {\n return 6;\n }\n if (property === 'leftMargin') {\n return 7;\n }\n if (property === 'topMargin') {\n return 8;\n }\n if (property === 'rightMargin') {\n return 9;\n }\n if (property === 'bottomMargin') {\n return 10;\n }\n return 0;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isBorderEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('color', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('lineStyle', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('lineWidth', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('shadow', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('space', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('hasNoneStyle', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isCharacterFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('fontColor', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontFamily', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontSize', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('bold', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('italic', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('underline', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('strikethrough', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('baselineAlignment', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('highlightColor', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n return true;\n };\n WUniqueFormat.prototype.isParagraphFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('rightIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('firstLineIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('textAlignment', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('beforeSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('afterSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('lineSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('lineSpacingType', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('outlineLevel', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isCellFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('columnSpan', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('rowSpan', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('verticalAlignment', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('preferredWidthType', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('preferredWidth', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('cellWidth', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isShadingEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('backgroundColor', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n if (this.isNotEqual('foregroundColor', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n if (this.isNotEqual('textureStyle', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isRowFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('allowBreakAcrossPages', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('isHeader', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('height', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('heightType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBefore', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBeforeWidth', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBeforeWidthType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfter', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfterWidth', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfterWidthType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isListFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('listId', source, modifiedProperty, modifiedValue, 7)) {\n return false;\n }\n if (this.isNotEqual('listLevelNumber', source, modifiedProperty, modifiedValue, 7)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isTableFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('cellSpacing', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('leftIndent', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('tableAlignment', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('preferredWidth', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('preferredWidthType', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isListLevelEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('listLevelPattern', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('startAt', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('followCharacter', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('numberFormat', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('restartLevel', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isSectionFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('headerDistance', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('footerDistance', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('differentFirstPage', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('differentOddAndEvenPages', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('pageWidth', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('pageHeight', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.cloneItems = function (format, property, value, uniqueFormatType) {\n var propertyType = WUniqueFormat.getPropertyType(uniqueFormatType, property);\n var keys = format.propertiesHash.getItem();\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] === propertyType) {\n this.propertiesHash.add(propertyType, value);\n }\n else {\n this.propertiesHash.add(keys[i], format.propertiesHash.get(keys[i]));\n }\n }\n if (!format.propertiesHash.containsKey(propertyType)) {\n this.propertiesHash.add(propertyType, value);\n }\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.mergeProperties = function (format) {\n var hash = format.cloneProperties();\n var keys = this.propertiesHash.keys;\n for (var i = 0; i < keys.length; i++) {\n if (!hash.containsKey(keys[i])) {\n hash.add(keys[i], this.propertiesHash.get(keys[i]));\n }\n }\n return hash;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.cloneProperties = function () {\n var hash = new Dictionary();\n var keys = this.propertiesHash.keys;\n for (var i = 0; i < keys.length; i++) {\n hash.add(keys[i], this.propertiesHash.get(keys[i]));\n }\n return hash;\n };\n // public cloneItemsInternal(format: WUniqueFormat): void {\n // let keys: number[] = format.propertiesHash.getItem();\n // for (let i: number = 0; i < keys.length; i++) {\n // this.propertiesHash.add(keys[i], format.propertiesHash.get(keys[i]));\n // }\n // this.referenceCount = format.referenceCount;\n // }\n /**\n * @private\n */\n WUniqueFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.propertiesHash)) {\n this.propertiesHash.destroy();\n }\n this.propertiesHash = undefined;\n this.referenceCount = undefined;\n this.uniqueFormatType = undefined;\n };\n return WUniqueFormat;\n}());\nexport { WUniqueFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WUniqueFormat } from './unique-format';\n/**\n * @private\n */\nvar WUniqueFormats = /** @class */ (function () {\n function WUniqueFormats() {\n this.items = [];\n }\n /**\n * @private\n */\n WUniqueFormats.prototype.addUniqueFormat = function (format, type) {\n var matchedFormat = undefined;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEqual(format, undefined, undefined)) {\n matchedFormat = this.items[i];\n break;\n }\n }\n if (isNullOrUndefined(matchedFormat)) {\n matchedFormat = new WUniqueFormat(type);\n matchedFormat.propertiesHash = format;\n matchedFormat.referenceCount = 1;\n this.items.push(matchedFormat);\n }\n else {\n matchedFormat.referenceCount++;\n }\n return matchedFormat;\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.updateUniqueFormat = function (uniqueFormat, property, value) {\n var matchedFormat = undefined;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEqual(uniqueFormat.propertiesHash, property, value)) {\n matchedFormat = this.items[i];\n break;\n }\n }\n if (isNullOrUndefined(matchedFormat)) {\n matchedFormat = new WUniqueFormat(uniqueFormat.uniqueFormatType);\n matchedFormat.cloneItems(uniqueFormat, property, value, uniqueFormat.uniqueFormatType);\n matchedFormat.referenceCount = 1;\n this.items.push(matchedFormat);\n }\n else {\n matchedFormat.referenceCount++;\n }\n this.remove(uniqueFormat);\n uniqueFormat = undefined;\n return matchedFormat;\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.remove = function (uniqueFormat) {\n uniqueFormat.referenceCount--;\n if (uniqueFormat.referenceCount <= 0) {\n this.items.splice(this.items.indexOf(uniqueFormat), 1);\n uniqueFormat.destroy();\n uniqueFormat = undefined;\n }\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.clear = function () {\n if (isNullOrUndefined(this.items)) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n }\n this.items = [];\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.destroy = function () {\n this.clear();\n this.items = undefined;\n };\n return WUniqueFormats;\n}());\nexport { WUniqueFormats };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, L10n, setCulture, Browser } from '@syncfusion/ej2-base';\nimport { Save } from '@syncfusion/ej2-file-utils';\nimport { LayoutViewer, PageLayoutViewer, BulletsAndNumberingDialog } from './index';\nimport { Print } from './index';\nimport { BodyWidget, ParagraphWidget } from './index';\nimport { WSectionFormat, WParagraphFormat, WCharacterFormat } from './index';\nimport { SfdtReader } from './index';\nimport { Selection } from './index';\nimport { Editor, EditorHistory } from './index';\nimport { WStyles } from './index';\nimport { Search } from './index';\nimport { OptionsPane } from './index';\nimport { WordExport } from './index';\nimport { TextExport } from './index';\nimport { ContextMenu } from './index';\nimport { ImageResizer } from './index';\nimport { SfdtExport } from './index';\nimport { HyperlinkDialog, TableDialog, BookmarkDialog, StylesDialog, TableOfContentsDialog } from './index';\nimport { PageSetupDialog, ParagraphDialog, ListDialog, StyleDialog, FontDialog } from './index';\nimport { TablePropertiesDialog, BordersAndShadingDialog, CellOptionsDialog, TableOptionsDialog } from './index';\n/**\n * The Document editor component is used to draft, save or print rich text contents as page by page.\n */\nvar DocumentEditor = /** @class */ (function (_super) {\n __extends(DocumentEditor, _super);\n /**\n * Initialize the constructor of DocumentEditor\n */\n function DocumentEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n //Internal Variable\n _this.enableHeaderFooterIn = false;\n /**\n * @private\n */\n _this.isShiftingEnabled = false;\n /**\n * @private\n */\n _this.isLayoutEnabled = true;\n /**\n * @private\n */\n _this.isPastingContent = false;\n /**\n * @private\n */\n _this.parser = undefined;\n _this.disableHistoryIn = false;\n /**\n * @private\n */\n _this.findResultsList = undefined;\n /**\n * Gets or sets the name of the document.\n */\n _this.documentName = '';\n /**\n * @private\n */\n _this.tablePropertiesDialogModule = undefined;\n /**\n * @private\n */\n _this.bordersAndShadingDialogModule = undefined;\n /**\n * @private\n */\n _this.cellOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.tableOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.paragraphDialogModule = undefined;\n /**\n * @private\n */\n _this.imageResizerModule = undefined;\n /**\n * Gets or Sets a value indicating whether holding Ctrl key is required to follow hyperlink on click. The default value is true.\n */\n _this.useCtrlClickToFollowHyperlink = true;\n /**\n * Gets or sets the page outline color.\n */\n _this.pageOutline = '#000000';\n /**\n * Gets or sets a value indicating whether to enable cursor in document editor on read only state or not. The default value is false.\n */\n _this.enableCursorOnReadOnly = false;\n /**\n * Gets or sets a value indicating whether local paste needs to be enabled or not.\n */\n _this.enableLocalPaste = false;\n /**\n * @private\n */\n _this.defaultLocale = {\n 'Table': 'Table',\n 'Row': 'Row',\n 'Cell': 'Cell',\n 'Ok': 'Ok',\n 'Cancel': 'Cancel',\n 'Size': 'Size',\n 'Preferred Width': 'Preferred width',\n 'Points': 'Points',\n 'Percent': 'Percent',\n 'Measure in': 'Measure in',\n 'Alignment': 'Alignment',\n 'Left': 'Left',\n 'Center': 'Center',\n 'Right': 'Right',\n 'Justify': 'Justify',\n 'Indent from left': 'Indent from left',\n 'Borders and Shading': 'Borders and Shading',\n 'Options': 'Options',\n 'Specify height': 'Specify height',\n 'At least': 'At least',\n 'Exactly': 'Exactly',\n 'Row height is': 'Row height is',\n 'Allow row to break across pages': 'Allow row to break across pages',\n 'Repeat as header row at the top of each page': 'Repeat as header row at the top of each page',\n 'Vertical alignment': 'Vertical alignment',\n 'Top': 'Top',\n 'Bottom': 'Bottom',\n 'Default cell margins': 'Default cell margins',\n 'Default cell spacing': 'Default cell spacing',\n 'Allow spacing between cells': 'Allow spacing between cells',\n 'Cell margins': 'Cell margins',\n 'Same as the whole table': 'Same as the whole table',\n 'Borders': 'Borders',\n 'None': 'None',\n 'Single': 'Single',\n 'Dot': 'Dot',\n 'DashSmallGap': 'DashSmallGap',\n 'DashLargeGap': 'DashLargeGap',\n 'DashDot': 'DashDot',\n 'DashDotDot': 'DashDotDot',\n 'Double': 'Double',\n 'Triple': 'Triple',\n 'ThinThickSmallGap': 'ThinThickSmallGap',\n 'ThickThinSmallGap': 'ThickThinSmallGap',\n 'ThinThickThinSmallGap': 'ThinThickThinSmallGap',\n 'ThinThickMediumGap': 'ThinThickMediumGap',\n 'ThickThinMediumGap': 'ThickThinMediumGap',\n 'ThinThickThinMediumGap': 'ThinThickThinMediumGap',\n 'ThinThickLargeGap': 'ThinThickLargeGap',\n 'ThickThinLargeGap': 'ThickThinLargeGap',\n 'ThinThickThinLargeGap': 'ThinThickThinLargeGap',\n 'SingleWavy': 'SingleWavy',\n 'DoubleWavy': 'DoubleWavy',\n 'DashDotStroked': 'DashDotStroked',\n 'Emboss3D': 'Emboss3D',\n 'Engrave3D': 'Engrave3D',\n 'Outset': 'Outset',\n 'Inset': 'Inset',\n 'Thick': 'Thick',\n 'Style': 'Style',\n 'Width': 'Width',\n 'Height': 'Height',\n 'Letter': 'Letter',\n 'Tabloid': 'Tabloid',\n 'Legal': 'Legal',\n 'Statement': 'Statement',\n 'Executive': 'Executive',\n 'A3': 'A3',\n 'A4': 'A4',\n 'A5': 'A5',\n 'B4': 'B4',\n 'B5': 'B5',\n 'Custom Size': 'Custom size',\n 'Different odd and even': 'Different odd and even',\n 'Different first page': 'Different first page',\n 'From edge': 'From edge',\n 'Header': 'Header',\n 'Footer': 'Footer',\n 'Margin': 'Margins',\n 'Paper': 'Paper',\n 'Layout': 'Layout',\n 'Orientation': 'Orientation',\n 'Landscape': 'Landscape',\n 'Portrait': 'Portrait',\n 'Table Of Contents': 'Table Of Contents',\n 'Show page numbers': 'Show page numbers',\n 'Right align page numbers': 'Right align page numbers',\n 'Nothing': 'Nothing',\n 'Tab leader': 'Tab leader',\n 'Show levels': 'Show levels',\n 'Use hyperlinks instead of page numbers': 'Use hyperlinks instead of page numbers',\n 'Build table of contents from': 'Build table of contents from',\n 'Styles': 'Styles',\n 'Available styles': 'Available styles',\n 'TOC level': 'TOC level',\n 'Heading': 'Heading',\n 'List Paragraph': 'List Paragraph',\n 'Normal': 'Normal',\n 'Outline levels': 'Outline levels',\n 'Table entry fields': 'Table entry fields',\n 'Modify': 'Modify',\n 'Color': 'Color',\n 'Setting': 'Setting',\n 'Box': 'Box',\n 'All': 'All',\n 'Custom': 'Custom',\n 'Preview': 'Preview',\n 'Shading': 'Shading',\n 'Fill': 'Fill',\n 'Apply To': 'Apply to',\n 'Table Properties': 'Table Properties',\n 'Cell Options': 'Cell Options',\n 'Table Options': 'Table Options',\n 'Insert Table': 'Insert Table',\n 'Number of columns': 'Number of columns',\n 'Number of rows': 'Number of rows',\n 'Text to display': 'Text to display',\n 'Address': 'Address',\n 'Insert Hyperlink': 'Insert Hyperlink',\n 'Edit Hyperlink': 'Edit Hyperlink',\n 'Insert': 'Insert',\n 'General': 'General',\n 'Indentation': 'Indentation',\n 'Before text': 'Before text',\n 'Special': 'Special',\n 'First line': 'First line',\n 'Hanging': 'Hanging',\n 'After text': 'After text',\n 'By': 'By',\n 'Before': 'Before',\n 'Line Spacing': 'Line spacing',\n 'After': 'After',\n 'At': 'At',\n 'Multiple': 'Multiple',\n 'Spacing': 'Spacing',\n 'Define new Multilevel list': 'Define new Multilevel list',\n 'List level': 'List level',\n 'Choose level to modify': 'Choose level to modify',\n 'Level': 'Level',\n 'Number format': 'Number format',\n 'Number style for this level': 'Number style for this level',\n 'Enter formatting for number': 'Enter formatting for number',\n 'Start at': 'Start at',\n 'Restart list after': 'Restart list after',\n 'Position': 'Position',\n 'Text indent at': 'Text indent at',\n 'Aligned at': 'Aligned at',\n 'Follow number with': 'Follow number with',\n 'Tab character': 'Tab character',\n 'Space': 'Space',\n 'Arabic': 'Arabic',\n 'UpRoman': 'UpRoman',\n 'LowRoman': 'LowRoman',\n 'UpLetter': 'UpLetter',\n 'LowLetter': 'LowLetter',\n 'Number': 'Number',\n 'Leading zero': 'Leading zero',\n 'Bullet': 'Bullet',\n 'Ordinal': 'Ordinal',\n 'Ordinal Text': 'Ordinal Text',\n 'For East': 'For East',\n 'No Restart': 'No Restart',\n 'Font': 'Font',\n 'Font style': 'Font style',\n 'Underline style': 'Underline style',\n 'Font color': 'Font color',\n 'Effects': 'Effects',\n 'Strikethrough': 'Strikethrough',\n 'Superscript': 'Superscript',\n 'Subscript': 'Subscript',\n 'Double strikethrough': 'Double strikethrough',\n 'Regular': 'Regular',\n 'Bold': 'Bold',\n 'Italic': 'Italic',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'Hyperlink': 'Hyperlink',\n 'Open Hyperlink': 'Open Hyperlink',\n 'Copy Hyperlink': 'Copy Hyperlink',\n 'Remove Hyperlink': 'Remove Hyperlink',\n 'Paragraph': 'Paragraph',\n 'Merge Cells': 'Merge Cells',\n 'Insert Above': 'Insert Above',\n 'Insert Below': 'Insert Below',\n 'Insert Left': 'Insert Left',\n 'Insert Right': 'Insert Right',\n 'Delete': 'Delete',\n 'Delete Table': 'Delete Table',\n 'Delete Row': 'Delete Row',\n 'Delete Column': 'Delete Column',\n 'File Name': 'File Name',\n 'Format Type': 'Format Type',\n 'Save': 'Save',\n 'Navigation': 'Navigation',\n 'Results': 'Results',\n 'Replace': 'Replace',\n 'Replace All': 'Replace All',\n 'We replaced all': 'We replaced all',\n 'Find': 'Find',\n 'No matches': 'No matches',\n 'All Done': 'All Done',\n 'Result': 'Result',\n 'of': 'of',\n 'instances': 'instances',\n 'with': 'with',\n 'Click to follow link': 'Click to follow link',\n 'Continue Numbering': 'Continue Numbering',\n 'Bookmark name': 'Bookmark name',\n 'Close': 'Close',\n 'Restart At': 'Restart At',\n 'Properties': 'Properties',\n 'Name': 'Name',\n 'Style type': 'Style type',\n 'Style based on': 'Style based on',\n 'Style for following paragraph': 'Style for following paragraph',\n 'Formatting': 'Formatting',\n 'Numbering and Bullets': 'Numbering and Bullets',\n 'Numbering': 'Numbering',\n 'Update Field': 'Update Field',\n 'Edit Field': 'Edit Field',\n 'Bookmark': 'Bookmark',\n 'Page Setup': 'Page Setup',\n 'No bookmarks found': 'No bookmarks found',\n 'Number format tooltip information': 'Single-level number format:
    [PREFIX]%[LEVELNUMBER][SUFFIX]
    '\n + 'For example, \"Chapter %1.\" will display numbering like
    Chapter 1. Item
    Chapter 2. Item
    …'\n + '
    Chapter N. Item
    '\n + '
    Multilevel number format:
    [PREFIX]%[LEVELNUMBER][SUFFIX]+[PREFIX]%[LEVELNUMBER][SUFFIX]'\n + '
    For example, \"%1.%2.\" will display numbering like
    1.1. Item
    1.2. Item

    1.N. Item',\n 'Format': 'Format',\n 'Create New Style': 'Create New Style',\n 'Modify Style': 'Modify Style',\n 'New': 'New',\n 'Bullets': 'Bullets',\n 'Use bookmarks': 'Use bookmarks',\n 'Table of Contents': 'Table of Contents'\n };\n _this.viewer = new PageLayoutViewer(_this);\n _this.parser = new SfdtReader(_this.viewer);\n return _this;\n }\n DocumentEditor_1 = DocumentEditor;\n Object.defineProperty(DocumentEditor.prototype, \"enableHeaderAndFooter\", {\n /**\n * @private\n */\n get: function () {\n return this.enableHeaderFooterIn;\n },\n set: function (value) {\n this.enableHeaderFooterIn = value;\n this.viewer.updateScrollBars();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"pageCount\", {\n /**\n * Gets the total number of pages.\n */\n get: function () {\n if (!this.isDocumentLoaded || isNullOrUndefined(this.viewer)) {\n return 1;\n }\n return this.viewer.pages.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"selection\", {\n /**\n * Gets the selection object of the document editor.\n * @returns Selection\n * @default undefined\n */\n get: function () {\n return this.selectionModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editor\", {\n /**\n * Gets the editor object of the document editor.\n * @returns Editor\n * @default undefined\n */\n get: function () {\n return this.editorModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editorHistory\", {\n /**\n * Gets the editor history object of the document editor.\n * @returns EditorHistory\n */\n get: function () {\n return this.editorHistoryModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"search\", {\n /**\n * Gets the search object of the document editor.\n * @returns { Search }\n */\n get: function () {\n return this.searchModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"contextMenu\", {\n /**\n * Gets the context menu object of the document editor.\n * @returns ContextMenu\n */\n get: function () {\n return this.contextMenuModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"containerId\", {\n /**\n * @private\n */\n get: function () {\n return this.element.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isDocumentLoaded\", {\n /**\n * @private\n */\n get: function () {\n return this.isDocumentLoadedIn;\n },\n set: function (value) {\n this.isDocumentLoadedIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableHistoryMode\", {\n /**\n * Determines whether history needs to be enabled or not.\n * @default - false\n * @private\n */\n get: function () {\n return this.enableEditorHistory && !isNullOrUndefined(this.editorHistoryModule);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentStart\", {\n /**\n * Gets the start text position in the document.\n * @default undefined\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selection.getDocumentStart();\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentEnd\", {\n /**\n * Gets the end text position in the document.\n * @default undefined\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selection.getDocumentEnd();\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isReadOnlyMode\", {\n /**\n * @private\n */\n get: function () {\n return this.isReadOnly || isNullOrUndefined(this.editorModule) || isNullOrUndefined(this.selectionModule);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableImageResizerMode\", {\n /**\n * Specifies to enable image resizer option\n * default - false\n * @private\n */\n get: function () {\n return this.enableImageResizer && !isNullOrUndefined(this.imageResizerModule);\n },\n enumerable: true,\n configurable: true\n });\n DocumentEditor.prototype.preRender = function () {\n this.findResultsList = [];\n //pre render section\n };\n DocumentEditor.prototype.render = function () {\n this.viewer.initializeComponents();\n this.openBlank();\n if (!isNullOrUndefined(this.element)) {\n var container = this.element;\n container.style.minHeight = '200px';\n container.style.minWidth = '200px';\n }\n };\n /**\n * Get component name\n * @private\n */\n DocumentEditor.prototype.getModuleName = function () {\n return 'DocumentEditor';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n DocumentEditor.prototype.onPropertyChanged = function (model, oldProp) {\n for (var _i = 0, _a = Object.keys(model); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'zoomFactor':\n if (this.viewer) {\n this.viewer.zoomFactor = model.zoomFactor;\n }\n break;\n case 'locale':\n this.localizeDialogs();\n break;\n case 'isReadOnly':\n if (!isNullOrUndefined(this.optionsPaneModule) && this.optionsPaneModule.isOptionsPaneShow) {\n this.optionsPaneModule.showHideOptionsPane(false);\n }\n break;\n }\n }\n };\n DocumentEditor.prototype.localizeDialogs = function () {\n if (this.locale !== '') {\n var l10n = new L10n('documenteditor', this.defaultLocale);\n l10n.setLocale(this.locale);\n setCulture(this.locale);\n if (this.optionsPaneModule) {\n this.optionsPaneModule.initOptionsPane(l10n);\n }\n if (this.paragraphDialogModule) {\n this.paragraphDialogModule.initParagraphDialog(l10n);\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.initPageSetupDialog(l10n);\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.initFontDialog(l10n);\n }\n if (this.hyperlinkDialogModule) {\n this.hyperlinkDialogModule.initHyperlinkDialog(l10n);\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.initContextMenu(l10n);\n }\n if (this.listDialogModule) {\n this.listDialogModule.initListDialog(l10n);\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.initTablePropertyDialog(l10n);\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.initBordersAndShadingsDialog(l10n);\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.initCellMarginsDialog(l10n);\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.initTableOptionsDialog(l10n);\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.initTableDialog(l10n);\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.initStyleDialog(l10n);\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.initTableOfContentDialog(l10n);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n DocumentEditor.prototype.getPersistData = function () {\n return 'documenteditor';\n };\n DocumentEditor.prototype.clearPreservedCollectionsInViewer = function () {\n if (this.viewer instanceof LayoutViewer) {\n this.viewer.clearDocumentItems();\n }\n };\n /**\n * @private\n */\n DocumentEditor.prototype.getDocumentEditorElement = function () {\n return this.element;\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireContentChange = function () {\n var eventArgs = { source: this };\n this.trigger('contentChange', eventArgs);\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireDocumentChange = function () {\n var eventArgs = { source: this };\n this.trigger('documentChange', eventArgs);\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireSelectionChange = function () {\n if (!this.viewer.isCompositionStart && Browser.isDevice && this.editorModule) {\n this.editorModule.predictText();\n }\n var eventArgs = { source: this };\n this.trigger('selectionChange', eventArgs);\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireZoomFactorChange = function () {\n var eventArgs = { source: this };\n this.trigger('zoomFactorChange', eventArgs);\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireViewChange = function () {\n if (this.viewer && this.viewer.pages.length > 0) {\n if (this.viewer.visiblePages.length > 0) {\n var pages = this.viewer.visiblePages;\n var eventArgs = {\n startPage: pages[0].index + 1,\n endPage: pages[pages.length - 1].index + 1,\n source: this\n };\n this.trigger('viewChange', eventArgs);\n }\n }\n };\n /**\n * Shows the Paragraph dialog\n * @private\n */\n DocumentEditor.prototype.showParagraphDialog = function (paragraphFormat) {\n if (this.paragraphDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.paragraphDialogModule.show(paragraphFormat);\n }\n };\n /**\n * Shows the margin dialog\n * @private\n */\n DocumentEditor.prototype.showPageSetupDialog = function () {\n if (this.pageSetupDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.pageSetupDialogModule.show();\n }\n };\n /**\n * Shows the font dialog\n * @private\n */\n DocumentEditor.prototype.showFontDialog = function (characterFormat) {\n if (this.fontDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.fontDialogModule.showFontDialog(characterFormat);\n }\n };\n /**\n * Shows the cell option dialog\n * @private\n */\n DocumentEditor.prototype.showCellOptionsDialog = function () {\n if (this.cellOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.cellOptionsDialogModule.show();\n }\n };\n /**\n * Shows the table options dialog.\n * @private\n */\n DocumentEditor.prototype.showTableOptionsDialog = function () {\n if (this.tableOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOptionsDialogModule.show();\n }\n };\n /**\n * Shows insert table dialog\n * @private\n */\n DocumentEditor.prototype.showTableDialog = function () {\n if (this.tableDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableDialogModule.show();\n }\n };\n /**\n * Shows the table of content dialog\n * @private\n */\n DocumentEditor.prototype.showTableOfContentsDialog = function () {\n if (this.tableOfContentsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOfContentsDialogModule.show();\n }\n };\n /* tslint:enable:no-any */\n /**\n * Shows the style dialog\n * @private\n */\n DocumentEditor.prototype.showStyleDialog = function () {\n if (this.styleDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.styleDialogModule.show();\n }\n };\n /**\n * Shows the hyperlink dialog\n * @private\n */\n DocumentEditor.prototype.showHyperlinkDialog = function () {\n if (this.hyperlinkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.hyperlinkDialogModule.show();\n }\n };\n /**\n * Shows the bookmark dialog.\n * @private\n */\n DocumentEditor.prototype.showBookmarkDialog = function () {\n if (this.bookmarkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bookmarkDialogModule.show();\n }\n };\n /**\n * Shows the styles dialog.\n * @private\n */\n DocumentEditor.prototype.showStylesDialog = function () {\n if (this.stylesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.stylesDialogModule.show();\n }\n };\n /**\n * Shows the List dialog\n * @private\n */\n DocumentEditor.prototype.showListDialog = function () {\n if (this.listDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.listDialogModule.showListDialog();\n }\n };\n /**\n * Shows the table properties dialog\n * @private\n */\n DocumentEditor.prototype.showTablePropertiesDialog = function () {\n if (this.tablePropertiesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tablePropertiesDialogModule.show();\n }\n };\n /**\n * Shows the borders and shading dialog\n * @private\n */\n DocumentEditor.prototype.showBordersAndShadingDialog = function () {\n if (this.bordersAndShadingDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bordersAndShadingDialogModule.show();\n }\n };\n //tslint:disable: max-func-body-length\n DocumentEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.enablePrint) {\n modules.push({\n member: 'Print', args: []\n });\n }\n if (this.enableSfdtExport || this.enableWordExport || this.enableTextExport || this.enableSelection || this.enableEditor) {\n modules.push({\n member: 'SfdtExport', args: [this.viewer]\n });\n }\n if (this.enableWordExport) {\n modules.push({\n member: 'WordExport', args: []\n });\n }\n if (this.enableTextExport) {\n modules.push({\n member: 'TextExport', args: []\n });\n }\n if (this.enableSelection || this.enableSearch || this.enableEditor) {\n modules.push({\n member: 'Selection', args: [this]\n });\n if (this.enableContextMenu) {\n modules.push({\n member: 'ContextMenu', args: [this.viewer]\n });\n }\n }\n if (this.enableSearch) {\n modules.push({\n member: 'Search', args: [this]\n });\n if (this.enableOptionsPane) {\n modules.push({\n member: 'OptionsPane', args: [this.viewer]\n });\n }\n }\n if (this.enableEditor) {\n modules.push({\n member: 'Editor', args: [this.viewer]\n });\n if (this.enableImageResizer) {\n modules.push({\n member: 'ImageResizer', args: [this, this.viewer]\n });\n }\n if (this.enableEditorHistory) {\n modules.push({\n member: 'EditorHistory', args: [this]\n });\n }\n if (this.enableHyperlinkDialog) {\n modules.push({\n member: 'HyperlinkDialog', args: [this.viewer]\n });\n }\n if (this.enableTableDialog) {\n modules.push({\n member: 'TableDialog', args: [this.viewer]\n });\n }\n if (this.enableBookmarkDialog) {\n modules.push({\n member: 'BookmarkDialog', args: [this.viewer]\n });\n }\n if (this.enableTableOfContentsDialog) {\n modules.push({\n member: 'TableOfContentsDialog', args: [this.viewer]\n });\n }\n if (this.enablePageSetupDialog) {\n modules.push({\n member: 'PageSetupDialog', args: [this.viewer]\n });\n }\n if (this.enableStyleDialog) {\n modules.push({\n member: 'StylesDialog', args: [this.viewer]\n });\n modules.push({\n member: 'StyleDialog', args: [this.viewer]\n });\n modules.push({\n member: 'BulletsAndNumberingDialog', args: [this.viewer]\n });\n }\n if (this.enableListDialog) {\n modules.push({\n member: 'ListDialog', args: [this.viewer]\n });\n }\n if (this.enableParagraphDialog) {\n modules.push({\n member: 'ParagraphDialog', args: [this.viewer]\n });\n }\n if (this.enableFontDialog) {\n modules.push({\n member: 'FontDialog', args: [this.viewer]\n });\n }\n if (this.enableTablePropertiesDialog) {\n modules.push({\n member: 'TablePropertiesDialog', args: [this.viewer]\n });\n modules.push({\n member: 'CellOptionsDialog', args: [this.viewer]\n });\n }\n if (this.enableBordersAndShadingDialog) {\n modules.push({\n member: 'BordersAndShadingDialog', args: [this.viewer]\n });\n }\n if (this.enableTableOptionsDialog) {\n modules.push({\n member: 'TableOptionsDialog', args: [this.viewer]\n });\n }\n }\n return modules;\n };\n // Public Implementation Starts\n /**\n * Opens the given Sfdt text.\n * @param {string} sfdtText.\n */\n DocumentEditor.prototype.open = function (sfdtText) {\n if (!isNullOrUndefined(this.viewer)) {\n this.clearPreservedCollectionsInViewer();\n this.viewer.lists = [];\n this.viewer.abstractLists = [];\n this.viewer.styles = new WStyles();\n if (!isNullOrUndefined(sfdtText) && this.viewer) {\n this.viewer.onDocumentChanged(this.parser.convertJsonToDocument(sfdtText));\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n }\n }\n }\n };\n /**\n * Scrolls view to start of the given page number if exists.\n * @param {number} pageNumber.\n * @returns void\n */\n DocumentEditor.prototype.scrollToPage = function (pageNumber) {\n if (isNullOrUndefined(this.viewer) || pageNumber < 1 || pageNumber > this.viewer.pages.length) {\n return false;\n }\n this.viewer.scrollToPage(pageNumber - 1);\n return true;\n };\n /**\n * Enables all the modules.\n * @returns void\n */\n DocumentEditor.prototype.enableAllModules = function () {\n this.enablePrint = this.enableSfdtExport = this.enableWordExport = this.enableTextExport\n = this.enableSelection = this.enableContextMenu = this.enableSearch = this.enableOptionsPane\n = this.enableEditor = this.enableImageResizer = this.enableEditorHistory\n = this.enableHyperlinkDialog = this.enableTableDialog = this.enableBookmarkDialog\n = this.enableTableOfContentsDialog = this.enablePageSetupDialog = this.enableStyleDialog\n = this.enableListDialog = this.enableParagraphDialog = this.enableFontDialog\n = this.enableTablePropertiesDialog = this.enableBordersAndShadingDialog\n = this.enableTableOptionsDialog = true;\n // tslint:disable-next-line:max-line-length\n DocumentEditor_1.Inject(Print, SfdtExport, WordExport, TextExport, Selection, Search, Editor, ImageResizer, EditorHistory, ContextMenu, OptionsPane, HyperlinkDialog, TableDialog, BookmarkDialog, TableOfContentsDialog, PageSetupDialog, StyleDialog, ListDialog, ParagraphDialog, BulletsAndNumberingDialog, FontDialog, TablePropertiesDialog, BordersAndShadingDialog, TableOptionsDialog, CellOptionsDialog, StylesDialog);\n };\n /**\n * Resizes the component and its sub elements based on given size or container size.\n * @param width\n * @param height\n */\n DocumentEditor.prototype.resize = function (width, height) {\n if (this.element) {\n if (!isNullOrUndefined(width) && width > 200) {\n this.element.style.width = width + 'px';\n }\n if (!isNullOrUndefined(height) && height > 200) {\n this.element.style.height = height + 'px';\n }\n if (this.viewer) {\n this.viewer.updateViewerSize();\n }\n }\n };\n /**\n * Shifts the focus to the document.\n */\n DocumentEditor.prototype.focusIn = function () {\n if (this.viewer) {\n this.viewer.updateFocus();\n }\n };\n /**\n * Fits the page based on given fit type.\n * @param {PageFitType} pageFitType? - Default value of ‘pageFitType’ parameter is 'None'\n * @returns void\n */\n DocumentEditor.prototype.fitPage = function (pageFitType) {\n if (isNullOrUndefined(pageFitType)) {\n pageFitType = 'None';\n }\n if (this.viewer) {\n this.viewer.pageFitType = pageFitType;\n }\n };\n /**\n * Prints the document.\n * @param {Window} printWindow? - Default value of 'printWindow' parameter is undefined.\n */\n DocumentEditor.prototype.print = function (printWindow) {\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (this.printModule) {\n this.printModule.print(this.viewer, printWindow);\n }\n else {\n throw new Error('Invalid operation. Print is not enabled.');\n }\n };\n /**\n * Serialize the data to JSON string.\n */\n DocumentEditor.prototype.serialize = function () {\n var json = '';\n if (this.enableSfdtExport && this.sfdtExportModule instanceof SfdtExport) {\n json = this.sfdtExportModule.serialize();\n }\n else {\n throw new Error('Invalid operation. Sfdt export is not enabled.');\n }\n return json;\n };\n /**\n * Saves the document.\n * @param {string} fileName\n * @param {FormatType} formatType\n */\n DocumentEditor.prototype.save = function (fileName, formatType) {\n fileName = fileName || 'Untitled';\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (formatType === 'Docx' && this.wordExportModule) {\n if (this.wordExportModule) {\n this.wordExportModule.save(this.viewer, fileName);\n }\n }\n else if (formatType === 'Txt' && this.textExportModule) {\n this.textExportModule.save(this.viewer, fileName);\n }\n else if (formatType === 'Sfdt' && this.enableSfdtExport && this.sfdtExportModule) {\n var jsonString = this.serialize();\n var blob = new Blob([jsonString], {\n type: 'application/json'\n });\n Save.save(fileName + '.sfdt', blob);\n }\n else {\n throw new Error('Invalid operation. Specified export is not enabled.');\n }\n };\n /**\n * Saves the document as blob.\n * @param {FormatType} formatType\n */\n DocumentEditor.prototype.saveAsBlob = function (formatType) {\n var _this = this;\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation');\n }\n return new Promise(function (resolve, reject) {\n if (formatType === 'Docx' && _this.wordExportModule) {\n resolve(_this.wordExportModule.saveAsBlob(_this.viewer));\n }\n else if (formatType === 'Txt' && _this.textExportModule) {\n resolve(_this.textExportModule.saveAsBlob(_this.viewer));\n }\n else if (formatType === 'Sfdt' && _this.enableSfdtExport && _this.sfdtExportModule) {\n resolve(_this.sfdtExportModule.saveAsBlob(_this.viewer));\n }\n });\n };\n /**\n * Opens a blank document.\n */\n DocumentEditor.prototype.openBlank = function () {\n var section = new BodyWidget();\n section.index = 0;\n section.sectionFormat = new WSectionFormat(section);\n var paragraph = new ParagraphWidget();\n paragraph.index = 0;\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n section.childWidgets.push(paragraph);\n paragraph.containerWidget = section;\n var sections = [];\n sections.push(section);\n // tslint:disable-next-line:max-line-length\n var hfs = this.parser.parseHeaderFooter({ header: {}, footer: {}, evenHeader: {}, evenFooter: {}, firstPageHeader: {}, firstPageFooter: {} }, undefined);\n if (this.viewer) {\n this.clearPreservedCollectionsInViewer();\n this.viewer.headersFooters.push(hfs);\n this.viewer.onDocumentChanged(sections);\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n var style = this.viewer.styles.findByName('Normal');\n paragraph.paragraphFormat.baseStyle = style;\n paragraph.paragraphFormat.listFormat.baseStyle = style;\n }\n }\n };\n /**\n * Gets the style names based on given style type.\n * @param styleType\n */\n DocumentEditor.prototype.getStyleNames = function (styleType) {\n if (this.viewer) {\n return this.viewer.styles.getStyleNames(styleType);\n }\n return [];\n };\n /**\n * Gets the style objects on given style type.\n * @param styleType\n */\n DocumentEditor.prototype.getStyles = function (styleType) {\n if (this.viewer) {\n return this.viewer.styles.getStyles(styleType);\n }\n return [];\n };\n /**\n * Shows the dialog.\n * @param {DialogType} dialogType\n * @returns void\n */\n DocumentEditor.prototype.showDialog = function (dialogType) {\n switch (dialogType) {\n case 'Hyperlink':\n this.showHyperlinkDialog();\n break;\n case 'Table':\n this.showTableDialog();\n break;\n case 'Bookmark':\n this.showBookmarkDialog();\n break;\n case 'TableOfContents':\n this.showTableOfContentsDialog();\n break;\n case 'PageSetup':\n this.showPageSetupDialog();\n break;\n case 'List':\n this.showListDialog();\n break;\n case 'Styles':\n this.showStylesDialog();\n break;\n case 'Style':\n this.showStyleDialog();\n break;\n case 'Paragraph':\n this.showParagraphDialog();\n break;\n case 'Font':\n this.showFontDialog();\n break;\n case 'TableProperties':\n this.showTablePropertiesDialog();\n break;\n case 'BordersAndShading':\n this.showBordersAndShadingDialog();\n break;\n case 'TableOptions':\n this.showTableOptionsDialog();\n break;\n }\n };\n /**\n * Shows the options pane.\n */\n DocumentEditor.prototype.showOptionsPane = function () {\n if (!isNullOrUndefined(this.optionsPaneModule) && !isNullOrUndefined(this.viewer)) {\n this.optionsPaneModule.showHideOptionsPane(true);\n }\n };\n /**\n * Destroys all managed resources used by this object.\n */\n DocumentEditor.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.destroyDependentModules();\n if (!isNullOrUndefined(this.viewer)) {\n this.viewer.destroy();\n }\n this.viewer = undefined;\n if (!isNullOrUndefined(this.element)) {\n this.element.classList.remove('e-documenteditor');\n this.element.innerHTML = '';\n }\n this.element = undefined;\n this.findResultsList = [];\n this.findResultsList = undefined;\n };\n DocumentEditor.prototype.destroyDependentModules = function () {\n if (this.printModule) {\n this.printModule.destroy();\n this.printModule = undefined;\n }\n if (this.sfdtExportModule) {\n this.sfdtExportModule.destroy();\n this.sfdtExportModule = undefined;\n }\n if (this.optionsPaneModule) {\n this.optionsPaneModule.destroy();\n this.optionsPaneModule = undefined;\n }\n if (!isNullOrUndefined(this.hyperlinkDialogModule)) {\n this.hyperlinkDialogModule.destroy();\n this.hyperlinkDialogModule = undefined;\n }\n if (this.searchModule) {\n this.searchModule.destroy();\n this.searchModule = undefined;\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.destroy();\n this.contextMenuModule = undefined;\n }\n if (this.editorModule) {\n this.editorModule.destroy();\n this.editorModule = undefined;\n }\n if (this.selectionModule) {\n this.selectionModule.destroy();\n this.selectionModule = undefined;\n }\n if (this.editorHistoryModule) {\n this.editorHistoryModule.destroy();\n this.editorHistoryModule = undefined;\n }\n if (!isNullOrUndefined(this.paragraphDialogModule)) {\n this.paragraphDialogModule.destroy();\n this.paragraphDialogModule = undefined;\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.destroy();\n this.pageSetupDialogModule = undefined;\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.destroy();\n this.fontDialogModule = undefined;\n }\n if (this.listDialogModule) {\n this.listDialogModule.destroy();\n this.listDialogModule = undefined;\n }\n if (this.imageResizerModule) {\n this.imageResizerModule.destroy();\n this.imageResizerModule = undefined;\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.destroy();\n this.tablePropertiesDialogModule = undefined;\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.destroy();\n this.bordersAndShadingDialogModule = undefined;\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.destroy();\n this.cellOptionsDialogModule = undefined;\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.destroy();\n this.tableOptionsDialogModule = undefined;\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.destroy();\n this.tableDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule = undefined;\n }\n if (this.bookmarkDialogModule) {\n this.bookmarkDialogModule.destroy();\n this.bookmarkDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.destroy();\n this.styleDialogModule = undefined;\n }\n if (this.textExportModule) {\n this.textExportModule.destroy();\n this.textExportModule = undefined;\n }\n if (this.wordExportModule) {\n this.wordExportModule.destroy();\n this.wordExportModule = undefined;\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.destroy();\n this.tableOfContentsDialogModule = undefined;\n }\n };\n var DocumentEditor_1;\n __decorate([\n Property(1)\n ], DocumentEditor.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePrint\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSelection\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditor\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditorHistory\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSfdtExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableWordExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTextExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableOptionsPane\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableContextMenu\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableHyperlinkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBookmarkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOfContentsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSearch\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableParagraphDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableListDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTablePropertiesDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBordersAndShadingDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePageSetupDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableStyleDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableFontDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOptionsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableImageResizer\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"documentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"viewChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"zoomFactorChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"requestNavigate\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"contentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"keyDown\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"searchResultsChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"destroyed\", void 0);\n DocumentEditor = DocumentEditor_1 = __decorate([\n NotifyPropertyChanges\n ], DocumentEditor);\n return DocumentEditor;\n}(Component));\nexport { DocumentEditor };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Print class\n */\nvar Print = /** @class */ (function () {\n function Print() {\n }\n /**\n * Gets module name.\n */\n Print.prototype.getModuleName = function () {\n return 'Print';\n };\n /**\n * Prints the current viewer\n * @param viewer\n * @param printWindow\n * @private\n */\n Print.prototype.print = function (viewer, printWindow) {\n this.printWindow(viewer, navigator.userAgent, printWindow);\n };\n /**\n * Opens print window and displays current page to print.\n * @private\n */\n Print.prototype.printWindow = function (viewer, browserUserAgent, printWindow) {\n var height = this.getPageHeight(viewer.pages);\n var width = this.getPageWidth(viewer.pages);\n var printElement = document.createElement('div');\n printElement.style.width = '100%';\n printElement.style.height = '100%';\n printElement.style.overflow = 'scroll';\n // Rendering canvas to print\n this.generatePrintContent(viewer, printElement);\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n if ((browserUserAgent.indexOf('Chrome') !== -1) || (browserUserAgent.indexOf('Firefox')) !== -1) {\n // Chrome and Firefox\n printWindow.document.write('');\n // tslint:disable-next-line:max-line-length\n printWindow.document.write('
    ');\n }\n else {\n // Internet Explorer and Edge\n // tslint:disable-next-line:max-line-length\n printWindow.document.write('
    ');\n }\n // tslint:disable-next-line:max-line-length\n printWindow.document.write(printElement.innerHTML + '
    ');\n printElement = undefined;\n printWindow.document.close();\n printWindow.focus();\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n };\n /**\n * Generates print content.\n * @private\n */\n Print.prototype.generatePrintContent = function (viewer, element) {\n // Rendering canvas to print\n var htmlString = '';\n for (var i = 0; i < viewer.pages.length; i++) {\n var page = viewer.pages[i];\n var pageHeight = page.boundingRectangle.height;\n var pageWidth = page.boundingRectangle.width;\n viewer.render.isPrinting = true;\n viewer.render.renderWidgets(page, 0, 0, 0, 0);\n var canvasURL = viewer.render.pageCanvas.toDataURL();\n viewer.render.isPrinting = false;\n // tslint:disable-next-line:max-line-length\n htmlString += '

    ';\n }\n element.innerHTML = htmlString;\n };\n /**\n * Gets page width.\n * @param pages\n * @private\n */\n Print.prototype.getPageWidth = function (pages) {\n var width = 0;\n for (var i = 0; i < pages.length; i++) {\n if (width < pages[i].boundingRectangle.width) {\n width = pages[i].boundingRectangle.width;\n }\n }\n return width;\n };\n /**\n * Gets page height.\n * @private\n */\n Print.prototype.getPageHeight = function (pages) {\n var height = 0;\n for (var i = 0; i < pages.length; i++) {\n if (height < pages[i].boundingRectangle.height) {\n height = pages[i].boundingRectangle.height;\n }\n }\n return height;\n };\n /**\n * @private\n */\n Print.prototype.destroy = function () {\n return;\n };\n return Print;\n}());\nexport { Print };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\n/**\n * @private\n */\nvar WSectionFormat = /** @class */ (function () {\n function WSectionFormat(node) {\n this.uniqueSectionFormat = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WSectionFormat.prototype, \"headerDistance\", {\n get: function () {\n return this.getPropertyValue('headerDistance');\n },\n set: function (value) {\n this.setPropertyValue('headerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"footerDistance\", {\n get: function () {\n return this.getPropertyValue('footerDistance');\n },\n set: function (value) {\n this.setPropertyValue('footerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentFirstPage\", {\n get: function () {\n return this.getPropertyValue('differentFirstPage');\n },\n set: function (value) {\n this.setPropertyValue('differentFirstPage', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentOddAndEvenPages\", {\n get: function () {\n return this.getPropertyValue('differentOddAndEvenPages');\n },\n set: function (value) {\n this.setPropertyValue('differentOddAndEvenPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageHeight\", {\n get: function () {\n return this.getPropertyValue('pageHeight');\n },\n set: function (value) {\n this.setPropertyValue('pageHeight', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageWidth\", {\n get: function () {\n return this.getPropertyValue('pageWidth');\n },\n set: function (value) {\n this.setPropertyValue('pageWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n WSectionFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = undefined;\n };\n WSectionFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n return this.uniqueSectionFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WSectionFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'headerDistance':\n value = 36;\n break;\n case 'footerDistance':\n value = 36;\n break;\n case 'differentFirstPage':\n value = false;\n break;\n case 'differentOddAndEvenPages':\n value = false;\n break;\n case 'pageWidth':\n value = 612;\n break;\n case 'pageHeight':\n value = 792;\n break;\n case 'leftMargin':\n value = 72;\n break;\n case 'topMargin':\n value = 72;\n break;\n case 'rightMargin':\n value = 72;\n break;\n case 'bottomMargin':\n value = 72;\n break;\n }\n return value;\n };\n WSectionFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueSectionFormat) && this.uniqueSectionFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueSectionFormat.propertiesHash.get(propertyType);\n }\n }\n return WSectionFormat.getPropertyDefaultValue(property);\n };\n WSectionFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WSectionFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueSectionFormat)) {\n this.initializeUniqueSectionFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n if (this.uniqueSectionFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueSectionFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.updateUniqueFormat(this.uniqueSectionFormat, property, value);\n }\n };\n WSectionFormat.prototype.initializeUniqueSectionFormat = function (property, propValue) {\n var uniqueSectionFormatTemp = new Dictionary();\n this.addUniqueSectionFormat('headerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentFirstPage', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentOddAndEvenPages', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageWidth', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageHeight', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('leftMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('topMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('rightMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('bottomMargin', property, propValue, uniqueSectionFormatTemp);\n // tslint:disable-next-line:max-line-length\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(uniqueSectionFormatTemp, WSectionFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WSectionFormat.prototype.addUniqueSectionFormat = function (property, modifiedProperty, propValue, uniqueSectionFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueSectionFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueSectionFormatTemp.add(propertyType, WSectionFormat.getPropertyDefaultValue(property));\n }\n };\n WSectionFormat.prototype.copyFormat = function (format, history) {\n if (history && (history.isUndoing || history.isRedoing)) {\n this.uniqueSectionFormat = format.uniqueSectionFormat;\n }\n else {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueSectionFormat) && format.uniqueSectionFormat.propertiesHash) {\n this.updateUniqueSectionFormat(format);\n }\n }\n }\n };\n WSectionFormat.prototype.updateUniqueSectionFormat = function (format) {\n var hash = undefined;\n if (this.uniqueSectionFormat) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n if (this.uniqueSectionFormat.referenceCount === 0) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n this.uniqueSectionFormat = undefined;\n }\n }\n this.uniqueSectionFormat = new WUniqueFormat(WSectionFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(hash, WSectionFormat.uniqueFormatType);\n };\n WSectionFormat.prototype.cloneFormat = function () {\n var format = new WSectionFormat();\n format.uniqueSectionFormat = this.uniqueSectionFormat;\n return format;\n };\n WSectionFormat.clear = function () {\n this.uniqueSectionFormats.clear();\n };\n WSectionFormat.uniqueSectionFormats = new WUniqueFormats();\n WSectionFormat.uniqueFormatType = 10;\n return WSectionFormat;\n}());\nexport { WSectionFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WLevelOverride = /** @class */ (function () {\n function WLevelOverride() {\n }\n WLevelOverride.prototype.destroy = function () {\n if (!isNullOrUndefined(this.overrideListLevel)) {\n this.overrideListLevel.destroy();\n }\n this.levelNumber = undefined;\n this.startAt = undefined;\n this.overrideListLevel = undefined;\n };\n return WLevelOverride;\n}());\nexport { WLevelOverride };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WLevelOverride } from './level-override';\n/**\n * @private\n */\nvar WList = /** @class */ (function () {\n function WList() {\n this.listId = -1;\n this.sourceListId = -1;\n this.abstractListId = -1;\n this.abstractList = undefined;\n this.levelOverrides = [];\n }\n WList.prototype.getListLevel = function (levelNumber) {\n var listLevel = undefined;\n var levelOverride = this.getLevelOverride(levelNumber);\n if (!isNullOrUndefined(levelOverride) && !isNullOrUndefined(levelOverride.overrideListLevel)) {\n listLevel = levelOverride.overrideListLevel;\n }\n else {\n listLevel = this.abstractList.levels[levelNumber];\n }\n return listLevel;\n };\n WList.prototype.getLevelOverride = function (levelNumber) {\n for (var i = 0; i < this.levelOverrides.length; i++) {\n if (this.levelOverrides[i] instanceof WLevelOverride) {\n var levelOverride = this.levelOverrides[i];\n if (levelOverride.levelNumber === levelNumber) {\n return levelOverride;\n }\n }\n }\n return undefined;\n };\n WList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levelOverrides)) {\n this.levelOverrides = [];\n }\n this.abstractListId = undefined;\n this.listId = undefined;\n this.sourceListId = undefined;\n this.levelOverrides = undefined;\n };\n WList.prototype.mergeList = function (list) {\n if (!isNullOrUndefined(this.abstractListId) && this.abstractListId !== -1) {\n this.abstractListId = list.abstractListId;\n }\n if (!isNullOrUndefined(this.listId) && this.listId !== -1) {\n this.listId = list.listId;\n }\n if (!isNullOrUndefined(this.sourceListId) && this.sourceListId !== -1) {\n this.sourceListId = list.sourceListId;\n }\n if (!isNullOrUndefined(this.levelOverrides) && this.levelOverrides.length !== 0) {\n this.levelOverrides = list.levelOverrides;\n }\n };\n return WList;\n}());\nexport { WList };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { WList } from '../list/list';\n/**\n * @private\n */\nvar WListFormat = /** @class */ (function () {\n function WListFormat(node) {\n this.uniqueListFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.list = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WListFormat.prototype, \"listId\", {\n get: function () {\n return this.getPropertyValue('listId');\n },\n set: function (listId) {\n this.setPropertyValue('listId', listId);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevelNumber\", {\n get: function () {\n return this.getPropertyValue('listLevelNumber');\n },\n set: function (value) {\n this.setPropertyValue('listLevelNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevel\", {\n get: function () {\n var list = undefined;\n if (!isNullOrUndefined(this.list)) {\n list = this.list;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var baseListStyle = this.baseStyle;\n while (!isNullOrUndefined(baseListStyle)) {\n if (baseListStyle.paragraphFormat.listFormat.list) {\n list = baseListStyle.paragraphFormat.listFormat.list;\n break;\n }\n else {\n baseListStyle = baseListStyle.basedOn;\n }\n }\n }\n if (!isNullOrUndefined(list)) {\n return list.getListLevel(this.listLevelNumber);\n }\n else {\n return undefined;\n }\n },\n enumerable: true,\n configurable: true\n });\n WListFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n if (this.baseStyle instanceof WParagraphStyle) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.paragraphFormat.listFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n return baseStyle.paragraphFormat.listFormat.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n return WListFormat.getPropertyDefaultValue(property);\n };\n WListFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListFormat)) {\n this.initializeUniqueListFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n if (this.uniqueListFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueListFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueListFormat = WListFormat.uniqueListFormats.updateUniqueFormat(this.uniqueListFormat, property, value);\n }\n };\n WListFormat.prototype.initializeUniqueListFormat = function (property, propValue) {\n var uniqueListFormatTemp = new Dictionary();\n this.addUniqueListFormat('listId', property, propValue, uniqueListFormatTemp);\n this.addUniqueListFormat('listLevelNumber', property, propValue, uniqueListFormatTemp);\n this.uniqueListFormat = WListFormat.uniqueListFormats.addUniqueFormat(uniqueListFormatTemp, WListFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WListFormat.prototype.addUniqueListFormat = function (property, modifiedProperty, propValue, uniqueListFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueListFormatTemp.add(propertyType, propValue);\n }\n };\n WListFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'listId':\n value = -1;\n break;\n case 'listLevelNumber':\n value = 0;\n break;\n }\n return value;\n };\n WListFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueListFormat)) {\n this.listId = format.listId;\n this.listLevelNumber = format.listLevelNumber;\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.list)) {\n this.list = format.list;\n }\n }\n };\n WListFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueListFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n return this.uniqueListFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WListFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.referenceCount === 0) {\n WListFormat.uniqueListFormats.remove(this.uniqueListFormat);\n }\n this.uniqueListFormat = undefined;\n this.list = undefined;\n };\n WListFormat.prototype.destroy = function () {\n this.clearFormat();\n };\n WListFormat.clear = function () {\n this.uniqueListFormats.clear();\n };\n WListFormat.prototype.ApplyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n };\n /**\n * For internal use\n * @private\n */\n WListFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n /**\n * For internal use\n * @private\n */\n WListFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('listId'))) {\n this.listId = format.getValue('listId');\n }\n if (isNullOrUndefined(this.getValue('listLevelNumber'))) {\n this.listLevelNumber = format.getValue('listLevelNumber');\n }\n if (!isNullOrUndefined(format.list)) {\n if (isNullOrUndefined(this.list)) {\n this.list = new WList();\n }\n this.list.mergeList(format.list);\n }\n };\n WListFormat.uniqueListFormats = new WUniqueFormats();\n WListFormat.uniqueFormatType = 7;\n return WListFormat;\n}());\nexport { WListFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WListFormat } from './list-format';\nimport { WParagraphStyle } from './style';\n/**\n * @private\n */\nvar WTabStop = /** @class */ (function () {\n function WTabStop() {\n }\n Object.defineProperty(WTabStop.prototype, \"position\", {\n get: function () {\n return this.positionIn;\n },\n set: function (value) {\n this.positionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"deletePosition\", {\n get: function () {\n return this.deletePositionIn;\n },\n set: function (value) {\n this.deletePositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabJustification\", {\n get: function () {\n return this.justification;\n },\n set: function (value) {\n this.justification = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabLeader\", {\n get: function () {\n return this.leader;\n },\n set: function (value) {\n this.leader = value;\n },\n enumerable: true,\n configurable: true\n });\n WTabStop.prototype.destroy = function () {\n this.position = undefined;\n this.deletePosition = undefined;\n this.tabJustification = undefined;\n this.leader = undefined;\n };\n return WTabStop;\n}());\nexport { WTabStop };\n/**\n * @private\n */\nvar WParagraphFormat = /** @class */ (function () {\n function WParagraphFormat(node) {\n this.uniqueParagraphFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.tabs = undefined;\n this.ownerBase = node;\n this.listFormat = new WListFormat(this);\n this.tabs = [];\n }\n WParagraphFormat.prototype.getUpdatedTabs = function () {\n var inTabs = [];\n if (!isNullOrUndefined(this.baseStyle)) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseStyle;\n var tabStops = new Dictionary();\n while (!isNullOrUndefined(baseStyle)) {\n for (var _i = 0, _a = baseStyle.paragraphFormat.tabs; _i < _a.length; _i++) {\n var tab = _a[_i];\n if (!tabStops.containsKey(tab.position)) {\n tabStops.add(tab.position, tab);\n }\n }\n baseStyle = baseStyle.basedOn;\n }\n for (var _b = 0, _c = tabStops.keys; _b < _c.length; _b++) {\n var key = _c[_b];\n if (!this.hasTabStop(key)) {\n inTabs.push(tabStops.get(key));\n }\n }\n inTabs = inTabs.concat(this.tabs.filter(function (a) { return (a.position !== 0 && a.deletePosition === 0); }));\n inTabs = inTabs.sort(function (a, b) { return a.position - b.position; });\n }\n return inTabs;\n };\n WParagraphFormat.prototype.hasTabStop = function (position) {\n for (var i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i].deletePosition === position) {\n return true;\n }\n }\n return false;\n };\n Object.defineProperty(WParagraphFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"rightIndent\", {\n get: function () {\n return this.getPropertyValue('rightIndent');\n },\n set: function (value) {\n this.setPropertyValue('rightIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"firstLineIndent\", {\n get: function () {\n return this.getPropertyValue('firstLineIndent');\n },\n set: function (value) {\n this.setPropertyValue('firstLineIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"beforeSpacing\", {\n get: function () {\n return this.getPropertyValue('beforeSpacing');\n },\n set: function (value) {\n this.setPropertyValue('beforeSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"afterSpacing\", {\n get: function () {\n return this.getPropertyValue('afterSpacing');\n },\n set: function (value) {\n this.setPropertyValue('afterSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacing\", {\n get: function () {\n return this.getPropertyValue('lineSpacing');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacingType\", {\n get: function () {\n return this.getPropertyValue('lineSpacingType');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacingType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"textAlignment\", {\n get: function () {\n return this.getPropertyValue('textAlignment');\n },\n set: function (value) {\n this.setPropertyValue('textAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"outlineLevel\", {\n get: function () {\n return this.getPropertyValue('outlineLevel');\n },\n set: function (value) {\n this.setPropertyValue('outlineLevel', value);\n },\n enumerable: true,\n configurable: true\n });\n WParagraphFormat.prototype.getListFormatParagraphFormat = function (property) {\n if (this.listFormat.listId > -1 && this.listFormat.listLevelNumber > -1) {\n var level = this.listFormat.listLevel;\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(level) && !isNullOrUndefined(level.paragraphFormat.uniqueParagraphFormat) && level.paragraphFormat.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return level.paragraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n WParagraphFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var ifListFormat = this.getListFormatParagraphFormat(property);\n if (!isNullOrUndefined(ifListFormat)) {\n return ifListFormat;\n }\n else {\n if (this.baseStyle instanceof WParagraphStyle) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.paragraphFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n return baseStyle.paragraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WParagraphFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n var docParagraphFormat = this.documentParagraphFormat();\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(docParagraphFormat) && !isNullOrUndefined(docParagraphFormat.uniqueParagraphFormat) && docParagraphFormat.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return docParagraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n else {\n return WParagraphFormat.getPropertyDefaultValue(property);\n }\n };\n WParagraphFormat.prototype.documentParagraphFormat = function () {\n var docParagraphFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.bodyWidget)) {\n docParagraphFormat = this.ownerBase.bodyWidget.page.viewer.paragraphFormat;\n }\n }\n return docParagraphFormat;\n };\n WParagraphFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WParagraphFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueParagraphFormat)) {\n this.initializeUniqueParagraphFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n if (this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueParagraphFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.updateUniqueFormat(this.uniqueParagraphFormat, property, value);\n }\n };\n WParagraphFormat.prototype.initializeUniqueParagraphFormat = function (property, propValue) {\n var uniqueParaFormatTemp = new Dictionary();\n this.addUniqueParaFormat('leftIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('rightIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('firstLineIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('textAlignment', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('beforeSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('afterSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacingType', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('outlineLevel', property, propValue, uniqueParaFormatTemp);\n // tslint:disable-next-line:max-line-length\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(uniqueParaFormatTemp, WParagraphFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WParagraphFormat.prototype.addUniqueParaFormat = function (property, modifiedProperty, propValue, uniqueParaFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueParaFormatTemp.add(propertyType, propValue);\n }\n };\n WParagraphFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftIndent':\n value = 0;\n break;\n case 'rightIndent':\n value = 0;\n break;\n case 'firstLineIndent':\n value = 0;\n break;\n case 'textAlignment':\n value = 'Left';\n break;\n case 'beforeSpacing':\n value = 0;\n break;\n case 'afterSpacing':\n value = 0;\n break;\n case 'lineSpacing':\n value = 1;\n break;\n case 'lineSpacingType':\n value = 'Multiple';\n break;\n case 'styleName':\n value = 'Normal';\n break;\n case 'outlineLevel':\n value = 'BodyText';\n break;\n }\n return value;\n };\n WParagraphFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.clearFormat();\n }\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = undefined;\n this.baseStyle = undefined;\n };\n WParagraphFormat.prototype.destroy = function () {\n this.clearFormat();\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.destroy();\n }\n this.listFormat = undefined;\n if (this.tabs !== undefined) {\n for (var i = 0; i < this.tabs.length; i++) {\n this.tabs[i].destroy();\n }\n this.tabs = undefined;\n }\n };\n WParagraphFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueParagraphFormat)) {\n this.updateUniqueParagraphFormat(format);\n }\n if (!isNullOrUndefined(format.listFormat)) {\n this.listFormat.copyFormat(format.listFormat);\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.tabs)) {\n for (var i = 0; i < format.tabs.length; i++) {\n this.tabs[i] = format.tabs[i];\n }\n }\n }\n };\n WParagraphFormat.prototype.updateUniqueParagraphFormat = function (format) {\n var hash = undefined;\n if (this.uniqueParagraphFormat) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n if (this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n this.uniqueParagraphFormat = undefined;\n }\n }\n this.uniqueParagraphFormat = new WUniqueFormat(WParagraphFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(hash, WParagraphFormat.uniqueFormatType);\n };\n WParagraphFormat.prototype.cloneFormat = function () {\n var format = new WParagraphFormat(undefined);\n format.uniqueParagraphFormat = this.uniqueParagraphFormat;\n format.baseStyle = this.baseStyle;\n if (isNullOrUndefined(this.listFormat)) {\n format.listFormat = undefined;\n }\n else {\n format.listFormat = new WListFormat();\n format.listFormat.listId = this.listFormat.listId;\n format.listFormat.listLevelNumber = this.listFormat.listLevelNumber;\n }\n return format;\n };\n WParagraphFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && !isNullOrUndefined(this.uniqueParagraphFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n return this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WParagraphFormat.clear = function () {\n this.uniqueParagraphFormats.clear();\n };\n WParagraphFormat.prototype.ApplyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n this.listFormat.ApplyStyle(this.baseStyle);\n };\n /**\n * For internal use\n * @private\n */\n WParagraphFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n /**\n * For internal use\n * @private\n */\n WParagraphFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('leftIndent'))) {\n this.leftIndent = format.getValue('leftIndent');\n }\n if (isNullOrUndefined(this.getValue('rightIndent'))) {\n this.rightIndent = format.getValue('rightIndent');\n }\n if (isNullOrUndefined(this.getValue('firstLineIndent'))) {\n this.firstLineIndent = format.getValue('firstLineIndent');\n }\n if (isNullOrUndefined(this.getValue('beforeSpacing'))) {\n this.beforeSpacing = format.getValue('beforeSpacing');\n }\n if (isNullOrUndefined(this.getValue('afterSpacing'))) {\n this.afterSpacing = format.getValue('afterSpacing');\n }\n if (isNullOrUndefined(this.getValue('lineSpacing'))) {\n this.lineSpacing = format.getValue('lineSpacing');\n }\n if (isNullOrUndefined(this.getValue('lineSpacingType'))) {\n this.lineSpacingType = format.getValue('lineSpacingType');\n }\n if (isNullOrUndefined(this.getValue('textAlignment'))) {\n this.textAlignment = format.getValue('textAlignment');\n }\n if (isNullOrUndefined(this.getValue('outlineLevel'))) {\n this.outlineLevel = format.getValue('outlineLevel');\n }\n if (isNullOrUndefined(this.listFormat)) {\n this.listFormat.mergeFormat(format.listFormat);\n }\n };\n WParagraphFormat.uniqueParagraphFormats = new WUniqueFormats();\n WParagraphFormat.uniqueFormatType = 3;\n return WParagraphFormat;\n}());\nexport { WParagraphFormat };\n","import { ParagraphWidget } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WCharacterFormat = /** @class */ (function () {\n function WCharacterFormat(node) {\n this.uniqueCharacterFormat = undefined;\n this.ownerBase = undefined;\n this.baseCharStyle = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WCharacterFormat.prototype, \"bold\", {\n get: function () {\n return this.getPropertyValue('bold');\n },\n set: function (value) {\n this.setPropertyValue('bold', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"italic\", {\n get: function () {\n return this.getPropertyValue('italic');\n },\n set: function (value) {\n this.setPropertyValue('italic', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontSize\", {\n get: function () {\n return this.getPropertyValue('fontSize');\n },\n set: function (value) {\n this.setPropertyValue('fontSize', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamily\", {\n get: function () {\n return this.getPropertyValue('fontFamily');\n },\n set: function (value) {\n this.setPropertyValue('fontFamily', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"underline\", {\n get: function () {\n return this.getPropertyValue('underline');\n },\n set: function (value) {\n this.setPropertyValue('underline', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"strikethrough\", {\n get: function () {\n return this.getPropertyValue('strikethrough');\n },\n set: function (value) {\n this.setPropertyValue('strikethrough', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"baselineAlignment\", {\n get: function () {\n return this.getPropertyValue('baselineAlignment');\n },\n set: function (value) {\n this.setPropertyValue('baselineAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"highlightColor\", {\n get: function () {\n return this.getPropertyValue('highlightColor');\n },\n set: function (value) {\n this.setPropertyValue('highlightColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontColor\", {\n get: function () {\n return this.getPropertyValue('fontColor');\n },\n set: function (value) {\n this.setPropertyValue('fontColor', value);\n },\n enumerable: true,\n configurable: true\n });\n WCharacterFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var charStyleValue = this.checkCharacterStyle(property);\n if (!isNullOrUndefined(charStyleValue)) {\n return charStyleValue;\n }\n else {\n var baseStyleValue = this.checkBaseStyle(property);\n if (!isNullOrUndefined(baseStyleValue)) {\n return baseStyleValue;\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WCharacterFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n var docCharacterFormat = this.documentCharacterFormat();\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(docCharacterFormat) && !isNullOrUndefined(docCharacterFormat.uniqueCharacterFormat) && docCharacterFormat.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return docCharacterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n else {\n return WCharacterFormat.getPropertyDefaultValue(property);\n }\n };\n WCharacterFormat.prototype.documentCharacterFormat = function () {\n var docCharacterFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph)) {\n docCharacterFormat = this.ownerBase.paragraph.bodyWidget.page.viewer.characterFormat;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase.bodyWidget)) {\n docCharacterFormat = this.ownerBase.bodyWidget.page.viewer.characterFormat;\n }\n }\n }\n return docCharacterFormat;\n };\n WCharacterFormat.prototype.checkBaseStyle = function (property) {\n /* tslint:disable-next-line:no-any */\n var baseStyle;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph)) {\n baseStyle = this.ownerBase.paragraph.paragraphFormat.baseStyle;\n }\n else {\n // tslint:disable-next-line:max-line-length\n if ((this.ownerBase instanceof ParagraphWidget) && !isNullOrUndefined(this.ownerBase.paragraphFormat)) {\n baseStyle = this.ownerBase.paragraphFormat.baseStyle;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase instanceof WParagraphStyle)) {\n baseStyle = this.ownerBase.basedOn;\n }\n }\n }\n }\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.characterFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n return undefined;\n };\n WCharacterFormat.prototype.checkCharacterStyle = function (property) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseCharStyle;\n if (!isNullOrUndefined(baseStyle)) {\n while (!isNullOrUndefined(baseStyle) && baseStyle.name !== 'Default Paragraph Font') {\n var hasKey = baseStyle.characterFormat.hasValue(property);\n if (hasKey) {\n var returnPropertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(returnPropertyType);\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n }\n return undefined;\n };\n WCharacterFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCharacterFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCharacterFormat)) {\n this.initializeUniqueCharacterFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n if (this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType) &&\n // tslint:disable-next-line:max-line-length\n this.uniqueCharacterFormat.propertiesHash.get(propertyType) === value) { //Do nothing, since no change in property value and return\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.updateUniqueFormat(this.uniqueCharacterFormat, property, value);\n }\n };\n WCharacterFormat.prototype.initializeUniqueCharacterFormat = function (property, propValue) {\n var uniqueCharFormatTemp = new Dictionary();\n this.addUniqueCharacterFormat('fontColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamily', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontSize', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bold', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('italic', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('underline', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('strikethrough', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('baselineAlignment', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('highlightColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('styleName', property, propValue, uniqueCharFormatTemp);\n // tslint:disable-next-line:max-line-length\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(uniqueCharFormatTemp, WCharacterFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WCharacterFormat.prototype.addUniqueCharacterFormat = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n };\n WCharacterFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'bold':\n value = false;\n break;\n case 'italic':\n value = false;\n break;\n case 'fontSize':\n value = 11;\n break;\n case 'underline':\n value = 'None';\n break;\n case 'strikethrough':\n value = 'None';\n break;\n case 'baselineAlignment':\n value = 'Normal';\n break;\n case 'highlightColor':\n value = 'NoColor';\n break;\n case 'fontColor':\n value = '#000000';\n break;\n case 'fontFamily':\n value = 'Calibri';\n break;\n case 'styleName':\n value = 'Default Paragraph Font';\n break;\n }\n return value;\n };\n WCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.fontFamily === format.fontFamily\n && this.bold === format.bold\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.underline === format.underline\n && this.fontColor === format.fontColor\n && this.strikethrough === format.strikethrough\n && this.highlightColor === format.highlightColor);\n };\n WCharacterFormat.prototype.isSameFormat = function (format) {\n return this.baseCharStyle === format.baseCharStyle &&\n this.uniqueCharacterFormat === format.uniqueCharacterFormat;\n };\n WCharacterFormat.prototype.cloneFormat = function () {\n var format = new WCharacterFormat(undefined);\n format.uniqueCharacterFormat = this.uniqueCharacterFormat;\n format.baseCharStyle = this.baseCharStyle;\n return format;\n };\n WCharacterFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && !isNullOrUndefined(this.uniqueCharacterFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n return this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCharacterFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = undefined;\n this.baseCharStyle = undefined;\n };\n WCharacterFormat.prototype.destroy = function () {\n this.clearFormat();\n };\n WCharacterFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCharacterFormat) && format.uniqueCharacterFormat.propertiesHash) {\n this.updateUniqueCharacterFormat(format);\n }\n if (!isNullOrUndefined(format.baseCharStyle)) {\n this.baseCharStyle = format.baseCharStyle;\n }\n }\n };\n WCharacterFormat.prototype.updateUniqueCharacterFormat = function (format) {\n var hash = undefined;\n if (this.uniqueCharacterFormat) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n if (this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n this.uniqueCharacterFormat = undefined;\n }\n }\n this.uniqueCharacterFormat = new WUniqueFormat(WCharacterFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(hash, WCharacterFormat.uniqueFormatType);\n };\n WCharacterFormat.clear = function () {\n this.uniqueCharacterFormats.clear();\n };\n WCharacterFormat.prototype.ApplyStyle = function (baseCharStyle) {\n this.baseCharStyle = baseCharStyle;\n };\n /**\n * For internal use\n * @private\n */\n WCharacterFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n /**\n * For internal use\n * @private\n */\n WCharacterFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('bold'))) {\n this.bold = format.getValue('bold');\n }\n if (isNullOrUndefined(this.getValue('italic'))) {\n this.italic = format.getValue('italic');\n }\n if (isNullOrUndefined(this.getValue('fontSize'))) {\n this.fontSize = format.getValue('fontSize');\n }\n if (isNullOrUndefined(this.getValue('fontFamily'))) {\n this.fontFamily = format.getValue('fontFamily');\n }\n if (isNullOrUndefined(this.getValue('underline'))) {\n this.underline = format.getValue('underline');\n }\n if (isNullOrUndefined(this.getValue('strikethrough'))) {\n this.strikethrough = format.getValue('strikethrough');\n }\n if (isNullOrUndefined(this.getValue('baselineAlignment'))) {\n this.baselineAlignment = format.getValue('baselineAlignment');\n }\n if (isNullOrUndefined(this.getValue('highlightColor'))) {\n this.highlightColor = format.getValue('highlightColor');\n }\n if (isNullOrUndefined(this.getValue('fontColor'))) {\n this.fontColor = format.getValue('fontColor');\n }\n };\n WCharacterFormat.uniqueCharacterFormats = new WUniqueFormats();\n WCharacterFormat.uniqueFormatType = 2;\n return WCharacterFormat;\n}());\nexport { WCharacterFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FieldElementBox } from '../viewer/page';\n/**\n * @private\n */\nvar HelperMethods = /** @class */ (function () {\n function HelperMethods() {\n }\n /**\n * Inserts text at specified index in string.\n * @param {string} spanText\n * @param {number} index\n * @param {string} text\n * @private\n */\n HelperMethods.insert = function (spanText, index, text) {\n if (index >= 0) {\n return [spanText.slice(0, index) + text + spanText.slice(index)].join('');\n }\n else {\n return text + this;\n }\n };\n /**\n * Removes text from specified index in string.\n * @param {string} text\n * @param {number} index\n * @param {number} length\n * @private\n */\n HelperMethods.remove = function (text, index, length) {\n if (index === 0) {\n return text.substring(index + 1, text.length);\n }\n else {\n return text.substring(0, index) + text.substring(index + 1, text.length);\n }\n };\n /**\n * Returns the index of word split character in a string.\n * @param {string} text\n * @param {string[]} wordSplitCharacter\n * @private\n */\n /* tslint:disable:no-any */\n HelperMethods.indexOfAny = function (text, wordSplitCharacter) {\n var index = undefined;\n for (var j = 0; j < wordSplitCharacter.length; j++) {\n var temp = text.indexOf(wordSplitCharacter[j]);\n if (temp !== -1 && isNullOrUndefined(index)) {\n index = temp;\n }\n else if (temp !== -1 && temp < index) {\n index = temp;\n }\n }\n return isNullOrUndefined(index) ? -1 : index;\n };\n /**\n * Returns the last index of word split character in a string.\n * @param {string} text\n * @param {string[]} wordSplitCharacter\n * @private\n */\n HelperMethods.lastIndexOfAny = function (text, wordSplitCharacter) {\n for (var i = text.length - 1; i >= 0; i--) {\n for (var j = 0; j <= wordSplitCharacter.length - 1; j++) {\n if (text[i] === wordSplitCharacter[j]) {\n return i;\n }\n }\n }\n return -1;\n };\n /**\n * Adds css styles to document header.\n * @param {string} css\n * @private\n */\n HelperMethods.addCssStyle = function (css) {\n var style = document.createElement('style');\n if (style.style.cssText) {\n style.style.cssText = css;\n }\n else {\n style.appendChild(document.createTextNode(css));\n }\n document.getElementsByTagName('head')[0].appendChild(style);\n };\n /**\n * Gets highlight color code.\n * @param {HighlightColor} highlightColor\n * @private\n */\n HelperMethods.getHighlightColorCode = function (highlightColor) {\n var color = '#ffffff';\n switch (highlightColor) {\n case 'Yellow':\n color = '#ffff00';\n break;\n case 'BrightGreen':\n color = '#00ff00';\n break;\n case 'Turquoise':\n color = '#00ffff';\n break;\n case 'Pink':\n color = '#ff00ff';\n break;\n case 'Blue':\n color = '#0000ff';\n break;\n case 'Red':\n color = '#ff0000';\n break;\n case 'DarkBlue':\n color = '#000080';\n break;\n case 'Teal':\n color = '#008080';\n break;\n case 'Green':\n color = '#008000';\n break;\n case 'Violet':\n color = '#800080';\n break;\n case 'DarkRed':\n color = '#800000';\n break;\n case 'DarkYellow':\n color = '#808000';\n break;\n case 'Gray50':\n color = '#808080';\n break;\n case 'Gray25':\n color = '#c0c0c0';\n break;\n case 'Black':\n color = '#000000';\n break;\n }\n return color;\n };\n /**\n * Converts point to pixel.\n * @param {number} point\n * @private\n */\n HelperMethods.convertPointToPixel = function (point) {\n var pixel = HelperMethods.round((point * 96 / 72), 5);\n return pixel;\n };\n /**\n * Converts pixel to point.\n * @param {number} pixel\n * @private\n */\n HelperMethods.convertPixelToPoint = function (pixel) {\n var point = HelperMethods.round((pixel * 72 / 96), 5);\n return point;\n };\n /**\n * Return true if field linked\n * @private\n */\n HelperMethods.isLinkedFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n return !isNullOrUndefined(inline.fieldEnd);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n return !isNullOrUndefined(inline.fieldBegin) && !isNullOrUndefined(inline.fieldEnd);\n }\n else {\n return !isNullOrUndefined(inline.fieldBegin);\n }\n };\n /**\n * Removes white space in a string.\n * @param {string} text\n * @private\n */\n HelperMethods.removeSpace = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n for (var i = 0; i < text.length; i++) {\n if (text.charAt(i) === ' ') {\n //replace the space by empty string in string\n text = text.replace(' ', '');\n }\n }\n }\n return text;\n };\n /**\n * Trims white space at start of the string.\n * @param {string} text\n * @private\n */\n HelperMethods.trimStart = function (text) {\n var i = 0;\n for (i; i < text.length; i++) {\n if (text[i] !== ' ') {\n break;\n }\n }\n return text.substring(i, text.length);\n };\n /**\n * Trims white space at end of the string.\n * @param {string} text\n * @private\n */\n HelperMethods.trimEnd = function (text) {\n var i = text.length - 1;\n for (i; i >= 0; i--) {\n if (text[i] !== ' ') {\n break;\n }\n }\n return text.substring(0, i + 1);\n };\n /**\n * Checks whether string ends with whitespace.\n * @param {string} text\n * @private\n */\n HelperMethods.endsWith = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n return text[text.length - 1] === ' ';\n }\n return false;\n };\n /**\n * @private\n * Write Characterformat\n * @param {any} characterFormat\n * @param {boolean} isInline\n * @param {WCharacterFormat} format\n */\n HelperMethods.writeCharacterFormat = function (characterFormat, isInline, format) {\n characterFormat.bold = isInline ? format.bold : format.getValue('bold');\n characterFormat.italic = isInline ? format.italic : format.getValue('italic');\n characterFormat.fontSize = isInline ? format.fontSize : format.getValue('fontSize');\n characterFormat.fontFamily = isInline ? format.fontFamily : format.getValue('fontFamily');\n characterFormat.underline = isInline ? format.underline : format.getValue('underline');\n characterFormat.strikethrough = isInline ? format.strikethrough : format.getValue('strikethrough');\n characterFormat.baselineAlignment = isInline ? format.baselineAlignment : format.getValue('baselineAlignment');\n characterFormat.highlightColor = isInline ? format.highlightColor : format.getValue('highlightColor');\n characterFormat.fontColor = isInline ? format.fontColor : format.getValue('fontColor');\n characterFormat.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : undefined;\n };\n /* tslint:enable:no-any */\n /**\n * Rounds the values with specified decimal digits.\n * @param {number} value\n * @param {number} decimalDigits\n * @private\n */\n HelperMethods.round = function (value, decimalDigits) {\n var temp = value;\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp * 10;\n }\n temp = Math.round(temp);\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp / 10;\n }\n return temp;\n };\n /**\n * @private\n */\n HelperMethods.wordBefore = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordAfter = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordSplitCharacters = [' ', ',', '.', ':', ';', '<', '>', '=',\n '+', '-', '_', '{', '}', '[', ']', '`', '~', '!', '@', '#', '$', '%', '^', '&',\n '*', '(', ')', '\"', '?', '/', '|', '\\\\', '”'];\n return HelperMethods;\n}());\nexport { HelperMethods };\n/**\n * @private\n */\nvar Point = /** @class */ (function () {\n function Point(xPosition, yPosition) {\n this.xIn = 0;\n this.yIn = 0;\n this.xIn = xPosition;\n this.yIn = yPosition;\n }\n Object.defineProperty(Point.prototype, \"x\", {\n /**\n * Gets or sets x value.\n * @private\n */\n get: function () {\n return this.xIn;\n },\n set: function (value) {\n this.xIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Point.prototype, \"y\", {\n /**\n * Gets or sets y value.\n * @private\n */\n get: function () {\n return this.yIn;\n },\n set: function (value) {\n this.yIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n Point.prototype.copy = function (point) {\n this.xIn = point.xIn;\n this.yIn = point.yIn;\n };\n /**\n * Destroys the internal objects maintained.\n * @returns void\n */\n Point.prototype.destroy = function () {\n this.xIn = undefined;\n this.yIn = undefined;\n };\n return Point;\n}());\nexport { Point };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { WParagraphFormat } from './paragraph-format';\nimport { WCharacterFormat } from './character-format';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WStyle = /** @class */ (function () {\n function WStyle() {\n }\n return WStyle;\n}());\nexport { WStyle };\n/**\n * @private\n */\nvar WParagraphStyle = /** @class */ (function (_super) {\n __extends(WParagraphStyle, _super);\n function WParagraphStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n WParagraphStyle.prototype.destroy = function () {\n this.characterFormat.destroy();\n this.paragraphFormat.destroy();\n };\n WParagraphStyle.prototype.copyStyle = function (paraStyle) {\n this.name = paraStyle.name;\n this.ownerBase = paraStyle.ownerBase;\n this.type = paraStyle.type;\n this.next = paraStyle.next;\n this.basedOn = paraStyle.basedOn;\n this.link = paraStyle.link;\n this.characterFormat.copyFormat(paraStyle.characterFormat);\n this.paragraphFormat.copyFormat(paraStyle.paragraphFormat);\n };\n return WParagraphStyle;\n}(WStyle));\nexport { WParagraphStyle };\n/**\n * @private\n */\nvar WCharacterStyle = /** @class */ (function (_super) {\n __extends(WCharacterStyle, _super);\n function WCharacterStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n WCharacterStyle.prototype.destroy = function () {\n this.characterFormat.destroy();\n };\n WCharacterStyle.prototype.copyStyle = function (charStyle) {\n this.name = charStyle.name;\n this.ownerBase = charStyle.ownerBase;\n this.type = charStyle.type;\n this.next = charStyle.next;\n this.basedOn = charStyle.basedOn;\n this.characterFormat.copyFormat(charStyle.characterFormat);\n };\n return WCharacterStyle;\n}(WStyle));\nexport { WCharacterStyle };\n/**\n * @private\n */\nvar WStyles = /** @class */ (function () {\n function WStyles() {\n this.collection = [];\n /* tslint:enable:no-any */\n }\n Object.defineProperty(WStyles.prototype, \"length\", {\n get: function () {\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n WStyles.prototype.remove = function (item) {\n this.collection = this.collection.filter(function (a) { return (a.name !== item.name); });\n };\n WStyles.prototype.push = function (item) {\n if (item != null && item !== undefined) {\n this.collection.push(item);\n }\n return 1;\n };\n WStyles.prototype.getItem = function (index) {\n if (this.collection.length > index) {\n return this.collection[index];\n }\n return null;\n };\n WStyles.prototype.indexOf = function (item) {\n return this.collection.indexOf(item);\n };\n WStyles.prototype.contains = function (item) {\n var index = this.collection.indexOf(item);\n return index > -1 && index < this.collection.length;\n };\n WStyles.prototype.clear = function () {\n while (this.collection.length > 0) {\n this.collection.pop();\n }\n };\n WStyles.prototype.findByName = function (name, type) {\n var returnStyle;\n for (var _i = 0, _a = this.collection; _i < _a.length; _i++) {\n var value = _a[_i];\n if (value.name === name) {\n returnStyle = value;\n if (!isNullOrUndefined(type) && value.type === type) {\n returnStyle = value;\n }\n }\n }\n return returnStyle;\n };\n WStyles.prototype.getStyleNames = function (type) {\n return this.collection.filter(function (a) { return (a.type === type); }).map(function (a) { return a.name; });\n };\n /* tslint:disable:no-any */\n WStyles.prototype.getStyles = function (type) {\n var styles = this.collection.filter(function (a) { return (a.type === type); }).map(function (a) { return a; });\n var styleObjects = [];\n for (var _i = 0, styles_1 = styles; _i < styles_1.length; _i++) {\n var style = styles_1[_i];\n var returnStyle = {};\n var returnStyleObject = {};\n returnStyleObject.characterFormat = {};\n HelperMethods.writeCharacterFormat(returnStyleObject.characterFormat, true, style.characterFormat);\n returnStyle.name = style.name;\n returnStyle.style = JSON.stringify(returnStyleObject);\n styleObjects.push(returnStyle);\n }\n return styleObjects;\n };\n return WStyles;\n}());\nexport { WStyles };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WBorder = /** @class */ (function () {\n function WBorder(node) {\n this.uniqueBorderFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorder.prototype, \"color\", {\n get: function () {\n return this.getPropertyValue('color');\n },\n set: function (value) {\n this.setPropertyValue('color', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineStyle\", {\n get: function () {\n return this.getPropertyValue('lineStyle');\n },\n set: function (value) {\n this.setPropertyValue('lineStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineWidth\", {\n get: function () {\n return this.getPropertyValue('lineWidth');\n },\n set: function (value) {\n this.setPropertyValue('lineWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"shadow\", {\n get: function () {\n return this.getPropertyValue('shadow');\n },\n set: function (value) {\n this.setPropertyValue('shadow', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"space\", {\n get: function () {\n return this.getPropertyValue('space');\n },\n set: function (value) {\n this.setPropertyValue('space', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"hasNoneStyle\", {\n get: function () {\n return this.getPropertyValue('hasNoneStyle');\n },\n set: function (value) {\n this.setPropertyValue('hasNoneStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WBorder.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueBorderFormat) && this.uniqueBorderFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueBorderFormat.propertiesHash.get(propertyType);\n }\n }\n return WBorder.getPropertyDefaultValue(property);\n };\n WBorder.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WBorder.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueBorderFormat)) {\n this.initializeUniqueBorder(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n if (this.uniqueBorderFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueBorderFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.updateUniqueFormat(this.uniqueBorderFormat, property, value);\n }\n };\n WBorder.prototype.initializeUniqueBorder = function (property, propValue) {\n var uniqueBorderFormatTemp = new Dictionary();\n this.addUniqueBorderFormat('color', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineStyle', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineWidth', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('shadow', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('space', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('hasNoneStyle', property, propValue, uniqueBorderFormatTemp);\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.addUniqueFormat(uniqueBorderFormatTemp, WBorder.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WBorder.prototype.addUniqueBorderFormat = function (property, modifiedProperty, propValue, uniqueBorderFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueBorderFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueBorderFormatTemp.add(propertyType, WBorder.getPropertyDefaultValue(property));\n }\n };\n WBorder.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'color':\n value = '#000000';\n break;\n case 'lineStyle':\n value = 'None';\n break;\n case 'lineWidth':\n value = 0;\n break;\n case 'shadow':\n value = false;\n break;\n case 'space':\n value = 0;\n break;\n case 'hasNoneStyle':\n value = false;\n break;\n }\n return value;\n };\n WBorder.prototype.getLineWidth = function () {\n /* tslint:disable */\n switch (this.lineStyle) {\n case 'None':\n case 'Cleared':\n return 0;\n case 'Triple':\n case 'Double':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'Emboss3D':\n case 'Engrave3D':\n {\n var lineArray = this.getBorderLineWidthArray(this.lineStyle, this.lineWidth);\n var width = 0;\n for (var i = 0; i < lineArray.length; i++) {\n width += lineArray[i];\n }\n return width;\n }\n case 'Single':\n case 'DashLargeGap':\n case 'DashSmallGap':\n case 'Dot':\n case 'DashDot':\n case 'DashDotDot':\n case 'Thick':\n return this.lineWidth;\n case 'SingleWavy':\n return (this.lineWidth === 1.5 ? 3 : 2.5); //Double wave border only draw with the fixed width\n case 'DoubleWavy':\n return (6.75); //Double wave border only draw with the fixed width\n case 'DashDotStroked':\n case 'Outset':\n return this.lineWidth;\n }\n return this.lineWidth;\n /* tslint:enable */\n };\n WBorder.prototype.getBorderLineWidthArray = function (lineStyle, lineWidth) {\n var borderLineArray = [lineWidth];\n switch (lineStyle) {\n case 'Double':\n borderLineArray = [1, 1, 1];\n break;\n case 'ThinThickSmallGap':\n borderLineArray = [1, -0.75, -0.75];\n break;\n case 'ThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1];\n break;\n case 'ThinThickMediumGap':\n borderLineArray = [1, 0.5, 0.5];\n break;\n case 'ThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1];\n break;\n case 'ThinThickLargeGap':\n borderLineArray = [-1.5, 1, -0.75];\n break;\n case 'ThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5];\n break;\n case 'Triple':\n borderLineArray = [1, 1, 1, 1, 1];\n break;\n case 'ThinThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1, -0.75, -0.75];\n break;\n case 'ThinThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1, 0.5, 0.5];\n break;\n case 'ThinThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5, 1, -0.75];\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n borderLineArray = [0.25, 0, 1, 0, 0.25];\n break;\n }\n if (borderLineArray.length === 1) {\n return [lineWidth];\n }\n for (var i = 0; i < borderLineArray.length; i++) {\n if (borderLineArray[i] >= 0) {\n borderLineArray[i] = borderLineArray[i] * lineWidth;\n }\n else {\n borderLineArray[i] = Math.abs(borderLineArray[i]);\n }\n }\n return borderLineArray;\n };\n WBorder.prototype.getBorderWeight = function () {\n var weight = 0;\n var numberOfLines = this.getNumberOfLines();\n var borderNumber = this.getBorderNumber();\n switch (this.lineStyle) {\n case 'Single':\n case 'DashSmallGap':\n case 'DashDot':\n case 'DashDotDot':\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'SingleWavy':\n case 'DoubleWavy':\n case 'DashDotStroked':\n case 'Emboss3D':\n case 'Engrave3D':\n case 'Outset':\n case 'Inset':\n case 'Thick':\n weight = numberOfLines * borderNumber;\n break;\n case 'Dot':\n case 'DashLargeGap':\n weight = 1;\n break;\n }\n return weight;\n };\n WBorder.prototype.getBorderNumber = function () {\n var borderNumber = 0;\n switch (this.lineStyle) {\n case 'Single':\n borderNumber = 1;\n break;\n case 'Thick':\n borderNumber = 2;\n break;\n case 'Double':\n borderNumber = 3;\n break;\n case 'Dot':\n borderNumber = 4;\n break;\n case 'DashLargeGap': //dashed.\n borderNumber = 5;\n break;\n case 'DashDot':\n borderNumber = 6;\n break;\n case 'DashDotDot':\n borderNumber = 7;\n break;\n case 'Triple':\n borderNumber = 8;\n break;\n case 'ThinThickSmallGap':\n borderNumber = 9;\n break;\n case 'ThickThinSmallGap':\n borderNumber = 10;\n break;\n case 'ThinThickThinSmallGap':\n borderNumber = 11;\n break;\n case 'ThinThickMediumGap':\n borderNumber = 12;\n break;\n case 'ThickThinMediumGap':\n borderNumber = 13;\n break;\n case 'ThinThickThinMediumGap':\n borderNumber = 14;\n break;\n case 'ThinThickLargeGap':\n borderNumber = 15;\n break;\n case 'ThickThinLargeGap':\n borderNumber = 16;\n break;\n case 'ThinThickThinLargeGap':\n borderNumber = 17;\n break;\n case 'SingleWavy': //wave.\n borderNumber = 18;\n break;\n case 'DoubleWavy':\n borderNumber = 19;\n break;\n case 'DashSmallGap':\n borderNumber = 20;\n break;\n case 'DashDotStroked':\n borderNumber = 21;\n break;\n case 'Emboss3D':\n borderNumber = 22;\n break;\n case 'Engrave3D':\n borderNumber = 23;\n break;\n case 'Outset':\n borderNumber = 24;\n break;\n case 'Inset':\n borderNumber = 25;\n break;\n }\n return borderNumber;\n };\n WBorder.prototype.getNumberOfLines = function () {\n //ToDo: Need to analyze more on this.\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n case 'Dot':\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n value = 1;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Triple':\n value = 5;\n break;\n case 'ThinThickSmallGap':\n value = 3;\n break;\n case 'ThickThinSmallGap':\n value = 3;\n break;\n case 'ThinThickThinSmallGap':\n value = 5;\n break;\n case 'ThinThickMediumGap':\n value = 3;\n break;\n case 'ThickThinMediumGap':\n value = 3;\n break;\n case 'ThinThickThinMediumGap':\n value = 5;\n break;\n case 'ThinThickLargeGap':\n value = 3;\n break;\n case 'ThickThinLargeGap':\n value = 3;\n break;\n case 'ThinThickThinLargeGap':\n value = 5;\n break;\n case 'SingleWavy':\n value = 1;\n break;\n case 'DoubleWavy':\n value = 2;\n break;\n case 'DashDotStroked':\n value = 1;\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n value = 3;\n break;\n case 'Outset':\n case 'Inset':\n case 'Thick':\n value = 1;\n break;\n }\n return value;\n };\n WBorder.prototype.getPrecedence = function () {\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n value = 1;\n break;\n case 'Thick':\n value = 2;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Dot':\n value = 4;\n break;\n case 'DashLargeGap': //dashed.\n value = 5;\n break;\n case 'DashDot':\n value = 6;\n break;\n case 'DashDotDot':\n value = 7;\n break;\n case 'Triple':\n value = 8;\n break;\n case 'ThinThickSmallGap':\n value = 9;\n break;\n case 'ThickThinSmallGap':\n value = 10;\n break;\n case 'ThinThickThinSmallGap':\n value = 11;\n break;\n case 'ThinThickMediumGap':\n value = 12;\n break;\n case 'ThickThinMediumGap':\n value = 13;\n break;\n case 'ThinThickThinMediumGap':\n value = 14;\n break;\n case 'ThinThickLargeGap':\n value = 15;\n break;\n case 'ThickThinLargeGap':\n value = 16;\n break;\n case 'ThinThickThinLargeGap':\n value = 17;\n break;\n case 'SingleWavy': //wave.\n value = 18;\n break;\n case 'DoubleWavy':\n value = 19;\n break;\n case 'DashSmallGap':\n value = 20;\n break;\n case 'DashDotStroked':\n value = 21;\n break;\n case 'Emboss3D':\n value = 22;\n break;\n case 'Engrave3D':\n value = 23;\n break;\n case 'Outset':\n value = 24;\n break;\n case 'Inset':\n value = 25;\n break;\n }\n return value;\n };\n WBorder.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n return this.uniqueBorderFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WBorder.prototype.cloneFormat = function () {\n var border = new WBorder(undefined);\n border.color = this.color;\n border.lineStyle = this.lineStyle;\n border.lineWidth = this.lineWidth;\n border.shadow = this.shadow;\n border.space = this.space;\n return border;\n };\n WBorder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n WBorder.uniqueBorderFormats.remove(this.uniqueBorderFormat);\n }\n this.uniqueBorderFormat = undefined;\n };\n WBorder.prototype.copyFormat = function (border) {\n if (!isNullOrUndefined(border) && !isNullOrUndefined(border.uniqueBorderFormat)) {\n this.color = border.color;\n this.lineStyle = border.lineStyle;\n this.lineWidth = border.lineWidth;\n this.shadow = border.shadow;\n this.space = border.space;\n }\n };\n WBorder.clear = function () {\n this.uniqueBorderFormats.clear();\n };\n WBorder.uniqueBorderFormats = new WUniqueFormats();\n WBorder.uniqueFormatType = 1;\n return WBorder;\n}());\nexport { WBorder };\n","import { WBorder } from './border';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WBorders = /** @class */ (function () {\n function WBorders(node) {\n this.leftIn = new WBorder(this);\n this.rightIn = new WBorder(this);\n this.topIn = new WBorder(this);\n this.bottomIn = new WBorder(this);\n this.horizontalIn = new WBorder(this);\n this.verticalIn = new WBorder(this);\n this.diagonalUpIn = new WBorder(this);\n this.diagonalDownIn = new WBorder(this);\n this.lineWidthIn = 0;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorders.prototype, \"left\", {\n get: function () {\n return this.leftIn;\n },\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"right\", {\n get: function () {\n return this.rightIn;\n },\n set: function (value) {\n this.rightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"top\", {\n get: function () {\n return this.topIn;\n },\n set: function (value) {\n this.topIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"bottom\", {\n get: function () {\n return this.bottomIn;\n },\n set: function (value) {\n this.bottomIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"horizontal\", {\n get: function () {\n return this.horizontalIn;\n },\n set: function (value) {\n this.horizontalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"vertical\", {\n get: function () {\n return this.verticalIn;\n },\n set: function (value) {\n this.verticalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalUp\", {\n get: function () {\n return this.diagonalUpIn;\n },\n set: function (value) {\n this.diagonalUpIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalDown\", {\n get: function () {\n return this.diagonalDownIn;\n },\n set: function (value) {\n this.diagonalDownIn = value;\n },\n enumerable: true,\n configurable: true\n });\n WBorders.prototype.destroy = function () {\n if (!isNullOrUndefined(this.left)) {\n this.left.destroy();\n }\n if (!isNullOrUndefined(this.top)) {\n this.top.destroy();\n }\n if (!isNullOrUndefined(this.bottom)) {\n this.bottom.destroy();\n }\n if (!isNullOrUndefined(this.right)) {\n this.right.destroy();\n }\n if (!isNullOrUndefined(this.horizontal)) {\n this.horizontal.destroy();\n }\n if (!isNullOrUndefined(this.vertical)) {\n this.vertical.destroy();\n }\n if (!isNullOrUndefined(this.diagonalDown)) {\n this.diagonalDown.destroy();\n }\n if (!isNullOrUndefined(this.diagonalUp)) {\n this.diagonalUp.destroy();\n }\n this.topIn = undefined;\n this.bottomIn = undefined;\n this.leftIn = undefined;\n this.rightIn = undefined;\n this.horizontalIn = undefined;\n this.verticalIn = undefined;\n this.diagonalDownIn = undefined;\n this.diagonalUpIn = undefined;\n this.lineWidthIn = undefined;\n this.valueIn = undefined;\n };\n WBorders.prototype.cloneFormat = function () {\n var borders = new WBorders(undefined);\n borders.top = isNullOrUndefined(this.top) ? undefined : this.top.cloneFormat();\n borders.bottom = isNullOrUndefined(this.bottom) ? undefined : this.bottom.cloneFormat();\n borders.left = isNullOrUndefined(this.left) ? undefined : this.left.cloneFormat();\n borders.right = isNullOrUndefined(this.right) ? undefined : this.right.cloneFormat();\n borders.horizontal = isNullOrUndefined(this.horizontal) ? undefined : this.horizontal.cloneFormat();\n borders.vertical = isNullOrUndefined(this.vertical) ? undefined : this.vertical.cloneFormat();\n borders.diagonalUp = isNullOrUndefined(this.diagonalUp) ? undefined : this.diagonalUp.cloneFormat();\n borders.diagonalDown = isNullOrUndefined(this.diagonalDown) ? undefined : this.diagonalDown.cloneFormat();\n return borders;\n };\n WBorders.prototype.copyFormat = function (borders) {\n if (!isNullOrUndefined(borders.left) && borders.left instanceof WBorder) {\n this.left = new WBorder(this);\n this.left.copyFormat(borders.left);\n }\n if (!isNullOrUndefined(borders.right) && borders.right instanceof WBorder) {\n this.right = new WBorder(this);\n this.right.copyFormat(borders.right);\n }\n if (!isNullOrUndefined(borders.top) && borders.top instanceof WBorder) {\n this.top = new WBorder(this);\n this.top.copyFormat(borders.top);\n }\n if (!isNullOrUndefined(borders.bottom) && borders.bottom instanceof WBorder) {\n this.bottom = new WBorder(this);\n this.bottom.copyFormat(borders.bottom);\n }\n if (!isNullOrUndefined(borders.horizontal) && borders.horizontal instanceof WBorder) {\n this.horizontal = new WBorder(this);\n this.horizontal.copyFormat(borders.horizontal);\n }\n if (!isNullOrUndefined(borders.vertical) && borders.vertical instanceof WBorder) {\n this.vertical = new WBorder(this);\n this.vertical.copyFormat(borders.vertical);\n }\n if (!isNullOrUndefined(borders.diagonalDown) && borders.diagonalDown instanceof WBorder) {\n this.diagonalDown = new WBorder(this);\n this.diagonalDown.copyFormat(borders.diagonalDown);\n }\n if (!isNullOrUndefined(borders.diagonalUp) && borders.diagonalUp instanceof WBorder) {\n this.diagonalUp = new WBorder(this);\n this.diagonalUp.copyFormat(borders.diagonalUp);\n }\n };\n return WBorders;\n}());\nexport { WBorders };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { Dictionary } from '../../base/dictionary';\n/**\n * @private\n */\nvar WShading = /** @class */ (function () {\n function WShading(node) {\n this.uniqueShadingFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WShading.prototype, \"backgroundColor\", {\n get: function () {\n return this.getPropertyValue('backgroundColor');\n },\n set: function (value) {\n this.setPropertyValue('backgroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"foregroundColor\", {\n get: function () {\n return this.getPropertyValue('foregroundColor');\n },\n set: function (value) {\n this.setPropertyValue('foregroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"textureStyle\", {\n get: function () {\n return this.getPropertyValue('textureStyle');\n },\n set: function (value) {\n this.setPropertyValue('textureStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WShading.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueShadingFormat) && this.uniqueShadingFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueShadingFormat.propertiesHash.get(propertyType);\n }\n }\n return WShading.getPropertyDefaultValue(property);\n };\n WShading.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WShading.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueShadingFormat)) {\n this.initializeUniqueShading(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n if (this.uniqueShadingFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueShadingFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueShadingFormat = WShading.uniqueShadingFormats.updateUniqueFormat(this.uniqueShadingFormat, property, value);\n }\n };\n WShading.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'backgroundColor':\n value = '#ffffff';\n break;\n case 'foregroundColor':\n value = 'empty';\n break;\n case 'textureStyle':\n value = 'TextureNone';\n break;\n }\n return value;\n };\n WShading.prototype.initializeUniqueShading = function (property, propValue) {\n var uniqueShadingTemp = new Dictionary();\n this.addUniqueShading('backgroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('foregroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('textureStyle', property, propValue, uniqueShadingTemp);\n // tslint:disable-next-line:max-line-length \n this.uniqueShadingFormat = WShading.uniqueShadingFormats.addUniqueFormat(uniqueShadingTemp, WShading.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WShading.prototype.addUniqueShading = function (property, modifiedProperty, propValue, uniqueShadingTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueShadingTemp.add(propertyType, propValue);\n }\n else {\n uniqueShadingTemp.add(propertyType, WShading.getPropertyDefaultValue(property));\n }\n };\n WShading.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n WShading.uniqueShadingFormats.remove(this.uniqueShadingFormat);\n }\n this.uniqueShadingFormat = undefined;\n };\n WShading.prototype.cloneFormat = function () {\n var shading = new WShading(undefined);\n shading.backgroundColor = this.backgroundColor;\n shading.foregroundColor = this.foregroundColor;\n shading.textureStyle = this.textureStyle;\n return shading;\n };\n WShading.prototype.copyFormat = function (shading) {\n if (!isNullOrUndefined(shading) && !isNullOrUndefined(shading.uniqueShadingFormat)) {\n this.backgroundColor = shading.backgroundColor;\n this.foregroundColor = shading.foregroundColor;\n this.textureStyle = shading.textureStyle;\n }\n };\n WShading.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n return this.uniqueShadingFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WShading.clear = function () {\n this.uniqueShadingFormats.clear();\n };\n WShading.uniqueShadingFormats = new WUniqueFormats();\n WShading.uniqueFormatType = 5;\n return WShading;\n}());\nexport { WShading };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WTableFormat = /** @class */ (function () {\n function WTableFormat(owner) {\n this.uniqueTableFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = undefined;\n this.ownerBase = owner;\n this.assignTableMarginValue(5.4, 0, 5.4, 0);\n }\n Object.defineProperty(WTableFormat.prototype, \"cellSpacing\", {\n get: function () {\n return this.getPropertyValue('cellSpacing');\n },\n set: function (value) {\n if (value < 0 || value > 264.6) {\n throw new RangeError('The measurement must be between 0 px and 264.6 px.');\n }\n this.setPropertyValue('cellSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n if (value < -1440 || value > 1440) {\n throw new RangeError('The measurement must be between -1440 px and 1440 px.');\n }\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"tableAlignment\", {\n get: function () {\n return this.getPropertyValue('tableAlignment');\n },\n set: function (value) {\n this.setPropertyValue('tableAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n WTableFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueTableFormat) && this.uniqueTableFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueTableFormat.propertiesHash.get(propertyType);\n }\n }\n return WTableFormat.getPropertyDefaultValue(property);\n };\n WTableFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WTableFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueTableFormat)) {\n this.initializeUniqueTableFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n if (this.uniqueTableFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueTableFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.updateUniqueFormat(this.uniqueTableFormat, property, value);\n }\n };\n WTableFormat.prototype.initializeUniqueTableFormat = function (property, propValue) {\n var uniqueTableFormatTemp = new Dictionary();\n this.addUniqueTableFormat('cellSpacing', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('topMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('bottomMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('rightMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftIndent', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('tableAlignment', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidth', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidthType', property, propValue, uniqueTableFormatTemp);\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.addUniqueFormat(uniqueTableFormatTemp, WTableFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WTableFormat.prototype.addUniqueTableFormat = function (property, modifiedProperty, propValue, uniqueTableFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueTableFormatTemp.add(propertyType, propValue);\n }\n };\n WTableFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'cellSpacing':\n value = 0;\n break;\n case 'leftMargin':\n value = 5.4;\n break;\n case 'topMargin':\n value = 0;\n break;\n case 'bottomMargin':\n value = 0;\n break;\n case 'rightMargin':\n value = 5.4;\n break;\n case 'leftIndent':\n value = 0;\n break;\n case 'tableAlignment':\n value = 'Left';\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WTableFormat.prototype.assignTableMarginValue = function (left, top, right, bottom) {\n this.leftMargin = left;\n this.topMargin = top;\n this.rightMargin = right;\n this.bottomMargin = bottom;\n };\n WTableFormat.prototype.initializeTableBorders = function () {\n this.borders.left.lineStyle = 'Single';\n this.borders.left.lineWidth = 0.5;\n this.borders.right.lineStyle = 'Single';\n this.borders.right.lineWidth = 0.5;\n this.borders.top.lineStyle = 'Single';\n this.borders.top.lineWidth = 0.5;\n this.borders.bottom.lineStyle = 'Single';\n this.borders.bottom.lineWidth = 0.5;\n this.borders.horizontal.lineStyle = 'Single';\n this.borders.horizontal.lineWidth = 0.5;\n this.borders.vertical.lineStyle = 'Single';\n this.borders.vertical.lineWidth = 0.5;\n };\n WTableFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n WTableFormat.uniqueTableFormats.remove(this.uniqueTableFormat);\n }\n this.uniqueTableFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WTableFormat.prototype.cloneFormat = function () {\n var tableFormat = new WTableFormat(undefined);\n tableFormat.leftIndent = this.leftIndent;\n tableFormat.tableAlignment = this.tableAlignment;\n tableFormat.cellSpacing = this.cellSpacing;\n tableFormat.leftMargin = this.leftMargin;\n tableFormat.rightMargin = this.rightMargin;\n tableFormat.topMargin = this.topMargin;\n tableFormat.bottomMargin = this.bottomMargin;\n tableFormat.preferredWidth = this.preferredWidth;\n tableFormat.preferredWidthType = this.preferredWidthType;\n tableFormat.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n tableFormat.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n return tableFormat;\n };\n WTableFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n return this.uniqueTableFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WTableFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueTableFormat)) {\n this.cellSpacing = format.cellSpacing;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.leftIndent = format.leftIndent;\n this.tableAlignment = format.tableAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n }\n };\n WTableFormat.clear = function () {\n this.uniqueTableFormats.clear();\n };\n WTableFormat.uniqueTableFormats = new WUniqueFormats();\n WTableFormat.uniqueFormatType = 8;\n return WTableFormat;\n}());\nexport { WTableFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\n/**\n * @private\n */\nvar WRowFormat = /** @class */ (function () {\n function WRowFormat(node) {\n this.uniqueRowFormat = undefined;\n /**\n * @private\n */\n this.borders = new WBorders(this);\n /**\n * @private\n */\n this.ownerBase = undefined;\n /**\n * @private\n */\n this.beforeWidth = 0;\n /**\n * @private\n */\n this.afterWidth = 0;\n this.ownerBase = node;\n }\n Object.defineProperty(WRowFormat.prototype, \"gridBefore\", {\n get: function () {\n return this.getPropertyValue('gridBefore');\n },\n set: function (value) {\n this.setPropertyValue('gridBefore', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidth\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidthType\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfter\", {\n get: function () {\n return this.getPropertyValue('gridAfter');\n },\n set: function (value) {\n this.setPropertyValue('gridAfter', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidth\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidthType\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"allowBreakAcrossPages\", {\n get: function () {\n return this.getPropertyValue('allowBreakAcrossPages');\n },\n set: function (value) {\n this.setPropertyValue('allowBreakAcrossPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"isHeader\", {\n get: function () {\n return this.getPropertyValue('isHeader');\n },\n set: function (value) {\n this.setPropertyValue('isHeader', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"height\", {\n get: function () {\n return this.getPropertyValue('height');\n },\n set: function (value) {\n if (value === 0 && (this.heightType === 'AtLeast' || this.heightType === 'Exactly')) {\n value = 1;\n }\n else if (this.heightType === 'Auto') {\n value = 0;\n }\n this.setPropertyValue('height', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"heightType\", {\n get: function () {\n return this.getPropertyValue('heightType');\n },\n set: function (value) {\n if (value === 'AtLeast' || value === 'Exactly') {\n this.height = 1;\n }\n else {\n this.height = 0;\n }\n this.setPropertyValue('heightType', value);\n },\n enumerable: true,\n configurable: true\n });\n WRowFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueRowFormat) && this.uniqueRowFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueRowFormat.propertiesHash.get(propertyType);\n }\n }\n return WRowFormat.getPropertyDefaultValue(property);\n };\n WRowFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WRowFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueRowFormat)) {\n this.initializeUniqueRowFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n if (this.uniqueRowFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueRowFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.updateUniqueFormat(this.uniqueRowFormat, property, value);\n }\n };\n WRowFormat.prototype.initializeUniqueRowFormat = function (property, propValue) {\n var uniqueRowFormatTemp = new Dictionary();\n this.addUniqueRowFormat('allowBreakAcrossPages', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('isHeader', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('height', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('heightType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBefore', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfter', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridgridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.addUniqueFormat(uniqueRowFormatTemp, WRowFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WRowFormat.prototype.addUniqueRowFormat = function (property, modifiedProperty, propValue, uniqueRowFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueRowFormatTemp.add(propertyType, propValue);\n }\n };\n WRowFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'allowBreakAcrossPages':\n value = true;\n break;\n case 'isHeader':\n value = false;\n break;\n case 'height':\n value = 0;\n break;\n case 'heightType':\n value = 'Auto';\n break;\n case 'gridBefore':\n value = 0;\n break;\n case 'gridBeforeWidth':\n value = 0;\n break;\n case 'gridBeforeWidthType':\n value = 'Point';\n break;\n case 'gridAfter':\n value = 0;\n break;\n case 'gridAfterWidth':\n value = 0;\n break;\n case 'gridAfterWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WRowFormat.prototype.cloneFormat = function () {\n var format = new WRowFormat();\n format.allowBreakAcrossPages = this.allowBreakAcrossPages;\n format.heightType = this.heightType;\n format.height = this.height;\n format.isHeader = this.isHeader;\n format.gridBefore = this.gridBefore;\n format.gridBeforeWidth = this.gridBeforeWidth;\n format.gridBeforeWidthType = this.gridBeforeWidthType;\n format.gridAfter = this.gridAfter;\n format.gridAfterWidth = this.gridAfterWidth;\n format.gridAfterWidthType = this.gridAfterWidthType;\n return format;\n };\n WRowFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n return this.uniqueRowFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WRowFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueRowFormat)) {\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n this.heightType = format.heightType;\n this.height = format.height;\n this.gridBefore = format.gridBefore;\n this.gridBeforeWidth = format.gridBeforeWidth;\n this.gridBeforeWidthType = format.gridBeforeWidthType;\n this.gridAfter = format.gridAfter;\n this.gridAfterWidth = format.gridAfterWidth;\n this.gridAfterWidthType = format.gridAfterWidthType;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.ownerBase = format;\n this.borders.copyFormat(format.borders);\n }\n }\n };\n WRowFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n WRowFormat.uniqueRowFormats.remove(this.uniqueRowFormat);\n }\n this.beforeWidth = undefined;\n this.afterWidth = undefined;\n this.borders = undefined;\n this.uniqueRowFormat = undefined;\n };\n WRowFormat.clear = function () {\n this.uniqueRowFormats.clear();\n };\n WRowFormat.uniqueRowFormats = new WUniqueFormats();\n WRowFormat.uniqueFormatType = 6;\n return WRowFormat;\n}());\nexport { WRowFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\n/**\n * @private\n */\nvar WCellFormat = /** @class */ (function () {\n function WCellFormat(node) {\n this.uniqueCellFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = node;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n }\n Object.defineProperty(WCellFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"cellWidth\", {\n get: function () {\n return this.getPropertyValue('cellWidth');\n },\n set: function (value) {\n this.setPropertyValue('cellWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"columnSpan\", {\n get: function () {\n return this.getPropertyValue('columnSpan');\n },\n set: function (value) {\n this.setPropertyValue('columnSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rowSpan\", {\n get: function () {\n return this.getPropertyValue('rowSpan');\n },\n set: function (value) {\n this.setPropertyValue('rowSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"verticalAlignment\", {\n get: function () {\n return this.getPropertyValue('verticalAlignment');\n },\n set: function (value) {\n this.setPropertyValue('verticalAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n WCellFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCellFormat) && this.uniqueCellFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCellFormat.propertiesHash.get(propertyType);\n }\n }\n return WCellFormat.getPropertyDefaultValue(property);\n };\n WCellFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCellFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCellFormat)) {\n this.initializeUniqueCellFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n if (this.uniqueCellFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueCellFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.updateUniqueFormat(this.uniqueCellFormat, property, value);\n }\n };\n WCellFormat.prototype.initializeUniqueCellFormat = function (property, propValue) {\n var uniqueCellFormatTemp = new Dictionary();\n this.addUniqueCellFormat('leftMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('topMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('bottomMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rightMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('cellWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('columnSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rowSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('verticalAlignment', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidthType', property, propValue, uniqueCellFormatTemp);\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.addUniqueFormat(uniqueCellFormatTemp, WCellFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WCellFormat.prototype.addUniqueCellFormat = function (property, modifiedProperty, propValue, uniqueCellFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCellFormatTemp.add(propertyType, propValue);\n }\n };\n WCellFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftMargin':\n value = undefined;\n break;\n case 'topMargin':\n value = undefined;\n break;\n case 'bottomMargin':\n value = undefined;\n break;\n case 'rightMargin':\n value = undefined;\n break;\n case 'cellWidth':\n value = 0;\n break;\n case 'columnSpan':\n value = 1;\n break;\n case 'rowSpan':\n value = 1;\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'verticalAlignment':\n value = 'Top';\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WCellFormat.prototype.containsMargins = function () {\n return (!isNullOrUndefined(this.leftMargin)\n || !isNullOrUndefined(this.rightMargin)\n || !isNullOrUndefined(this.bottomMargin)\n || !isNullOrUndefined(this.topMargin));\n };\n WCellFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n WCellFormat.uniqueCellFormats.remove(this.uniqueCellFormat);\n }\n this.uniqueCellFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WCellFormat.prototype.cloneFormat = function () {\n var format = new WCellFormat(undefined);\n format.verticalAlignment = this.verticalAlignment;\n format.leftMargin = this.leftMargin;\n format.rightMargin = this.rightMargin;\n format.topMargin = this.topMargin;\n format.bottomMargin = this.bottomMargin;\n format.preferredWidth = this.preferredWidth;\n format.preferredWidthType = this.preferredWidthType;\n format.cellWidth = this.cellWidth;\n format.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n format.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n return format;\n };\n WCellFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n return this.uniqueCellFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCellFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCellFormat)) {\n this.cellWidth = format.cellWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.preferredWidth = format.preferredWidth;\n this.columnSpan = format.columnSpan;\n this.rowSpan = format.rowSpan;\n this.preferredWidthType = format.preferredWidthType;\n this.verticalAlignment = format.verticalAlignment;\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n }\n };\n WCellFormat.clear = function () {\n this.uniqueCellFormats.clear();\n };\n WCellFormat.uniqueCellFormats = new WUniqueFormats();\n WCellFormat.uniqueFormatType = 4;\n return WCellFormat;\n}());\nexport { WCellFormat };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { WTableFormat, WRowFormat, WCellFormat } from '../format/index';\nimport { WParagraphFormat, WCharacterFormat, WBorder, WBorders } from '../format/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n Object.defineProperty(Rect.prototype, \"right\", {\n /**\n * @private\n */\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottom\", {\n /**\n * @private\n */\n get: function () {\n return this.y + this.height;\n },\n enumerable: true,\n configurable: true\n });\n return Rect;\n}());\nexport { Rect };\n/**\n * @private\n */\nvar Margin = /** @class */ (function () {\n function Margin(leftMargin, topMargin, rightMargin, bottomMargin) {\n this.left = leftMargin;\n this.top = topMargin;\n this.right = rightMargin;\n this.bottom = bottomMargin;\n }\n /**\n * @private\n */\n Margin.prototype.clone = function () {\n return new Margin(this.left, this.top, this.right, this.bottom);\n };\n /**\n * @private\n */\n Margin.prototype.destroy = function () {\n this.left = undefined;\n this.right = undefined;\n this.top = undefined;\n this.bottom = undefined;\n };\n return Margin;\n}());\nexport { Margin };\n/**\n * @private\n */\nvar Widget = /** @class */ (function () {\n function Widget() {\n /**\n * @private\n */\n this.childWidgets = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.index = 0;\n }\n Object.defineProperty(Widget.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n if (this instanceof BodyWidget && this.page) {\n return this.page.bodyWidgets.indexOf(this);\n }\n else if (this.containerWidget && this.containerWidget.childWidgets) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"firstChild\", {\n /**\n * @private\n */\n get: function () {\n return this.childWidgets.length > 0 ? this.childWidgets[0] : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"lastChild\", {\n /**\n * @private\n */\n get: function () {\n if (this.childWidgets) {\n return this.childWidgets.length > 0 ?\n this.childWidgets[this.childWidgets.length - 1] : undefined;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (widget instanceof BodyWidget) {\n widget = index > 0 ? widget.page.bodyWidgets[index - 1] : undefined;\n }\n else {\n widget = index > 0 ? widget.containerWidget.childWidgets[index - 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index === -1) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n widget = index < widget.page.bodyWidgets.length - 1 ?\n widget.page.bodyWidgets[index + 1] : undefined;\n }\n else {\n widget = index < widget.containerWidget.childWidgets.length - 1 ?\n widget.containerWidget.childWidgets[index + 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousRenderedWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index > 0) {\n widget = widget.page.bodyWidgets[index - 1];\n }\n else {\n var page = widget.page.previousPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[page.bodyWidgets.length - 1] : undefined;\n }\n }\n else {\n if (index > 0) {\n widget = widget.containerWidget.childWidgets[index - 1];\n }\n else {\n var previousContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n previousContainer = widget.containerWidget.getPreviousSplitWidget();\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget)) {\n // Since cells are lay outed left to right, we should not navigate to previous row.\n previousContainer = widget.containerWidget.previousRenderedWidget;\n }\n while (previousContainer && previousContainer.childWidgets.length === 0) {\n previousContainer = previousContainer.previousRenderedWidget;\n if (isNullOrUndefined(previousContainer)) {\n break;\n }\n }\n widget = previousContainer && previousContainer.constructor === widget.containerWidget.constructor ?\n previousContainer.lastChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextRenderedWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index < widget.page.bodyWidgets.length - 1) {\n widget = widget.page.bodyWidgets[index + 1];\n }\n else {\n var page = widget.page.nextPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[0] : undefined;\n }\n }\n else {\n if (index < widget.containerWidget.childWidgets.length - 1) {\n widget = widget.containerWidget.childWidgets[index + 1];\n }\n else {\n var nextContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n nextContainer = widget.containerWidget.getNextSplitWidget();\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget)) {\n // Since cells are lay outed left to right, we should not navigate to next row.\n nextContainer = widget.containerWidget.nextRenderedWidget;\n }\n while (nextContainer && nextContainer.childWidgets.length === 0 && !(nextContainer instanceof TableCellWidget)) {\n nextContainer = nextContainer.nextRenderedWidget;\n if (isNullOrUndefined(nextContainer)) {\n break;\n }\n }\n widget = nextContainer && nextContainer.constructor === widget.containerWidget.constructor ?\n nextContainer.firstChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousSplitWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getPreviousSplitWidget();\n }\n else {\n var previous = widget.previousRenderedWidget;\n if (widget instanceof BodyWidget && previous instanceof BodyWidget && widget.equals(previous)) {\n return previous;\n }\n else if (previous instanceof BlockWidget && widget.index === previous.index && widget.equals(previous)) {\n return previous;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextSplitWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getNextSplitWidget();\n }\n else {\n var next = widget.nextRenderedWidget;\n if (widget instanceof BodyWidget && next instanceof BodyWidget && widget.equals(next)) {\n return next;\n }\n else if (next instanceof BlockWidget && widget.index === next.index && widget.equals(next)) {\n return next;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n Widget.prototype.getPreviousSplitWidgets = function () {\n var widgets = [];\n var widget = this.previousSplitWidget;\n while (widget) {\n widgets.unshift(widget);\n widget = widget.previousSplitWidget;\n }\n return widgets;\n };\n /**\n * @private\n */\n Widget.prototype.getSplitWidgets = function () {\n var widgets = this.getPreviousSplitWidgets();\n var widget = this;\n while (widget) {\n widgets.push(widget);\n widget = widget.nextSplitWidget;\n }\n return widgets;\n };\n /**\n * @private\n */\n Widget.prototype.combineWidget = function (viewer) {\n var root = this;\n var widgets = this.getSplitWidgets();\n if (widgets.length > 1) {\n root = widgets.shift();\n while (widgets.length > 0) {\n var splitWidget = widgets.shift();\n root.combine(splitWidget, viewer);\n }\n }\n if (root instanceof TableWidget) {\n root.combineRows(viewer);\n }\n return root;\n };\n Widget.prototype.combine = function (widget, viewer) {\n if (widget.childWidgets.length > 0) {\n var lastChild = this.lastChild;\n if (lastChild instanceof TableWidget) {\n lastChild.combineWidget(viewer);\n }\n else {\n var firstChild = widget.firstChild;\n if (!(widget instanceof TableWidget) && lastChild instanceof Widget && firstChild instanceof Widget &&\n lastChild.index === firstChild.index) {\n lastChild.combine(widget.childWidgets.shift(), viewer);\n }\n }\n this.addWidgets(widget.childWidgets);\n widget.childWidgets = [];\n }\n widget.destroyInternal(viewer);\n };\n /**\n * @private\n */\n Widget.prototype.addWidgets = function (childWidgets) {\n while (childWidgets.length > 0) {\n var widget = childWidgets.shift();\n if (widget instanceof LineWidget && this instanceof ParagraphWidget) {\n widget.paragraph = this;\n this.height += widget.height;\n }\n else if (widget instanceof Widget) {\n var lastChild = this.lastChild;\n widget.containerWidget = this;\n widget.y = lastChild instanceof Widget ? lastChild.y + lastChild.height : this.y;\n this.height += widget.height;\n }\n this.childWidgets.push(widget);\n }\n };\n /**\n * @private\n */\n Widget.prototype.removeChild = function (index) {\n if (index > -1 && index < this.childWidgets.length) {\n this.childWidgets.splice(index, 1);\n }\n };\n /**\n * @private\n */\n Widget.prototype.destroy = function () {\n if (this.childWidgets) {\n while (this.childWidgets.length > 0) {\n var child = this.childWidgets.pop();\n if (child instanceof LineWidget || child instanceof Widget) {\n child.destroy();\n }\n }\n }\n this.childWidgets = undefined;\n if (this.containerWidget) {\n this.containerWidget.removeChild(this.indexInOwner);\n }\n this.containerWidget = undefined;\n // if (this.margin) {\n // this.margin.destroy();\n // }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n this.index = undefined;\n };\n return Widget;\n}());\nexport { Widget };\n/**\n * @private\n */\nvar BlockContainer = /** @class */ (function (_super) {\n __extends(BlockContainer, _super);\n function BlockContainer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.sectionFormatIn = undefined;\n return _this;\n }\n Object.defineProperty(BlockContainer.prototype, \"sectionFormat\", {\n /**\n * @private\n */\n get: function () {\n var container = this;\n if (container instanceof BodyWidget) {\n return container.sectionFormatIn;\n }\n else if (container.page) {\n return container.page.bodyWidgets[0].sectionFormat;\n }\n return undefined;\n },\n /**\n * @private\n */\n set: function (value) {\n if (this instanceof BodyWidget) {\n this.sectionFormatIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockContainer.prototype, \"sectionIndex\", {\n /**\n * @private\n */\n get: function () {\n var container = this;\n var index = 0;\n if (container instanceof BodyWidget) {\n index = container.index;\n }\n else if (container.page) {\n index = container.page.bodyWidgets[0].index;\n }\n return index;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n BlockContainer.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var viewer = undefined;\n var node = this;\n if (node instanceof BodyWidget) {\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n }\n else {\n if (node.headerFooterType.indexOf('Header') !== -1) {\n hierarchicalIndex = 'H' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'F' + ';' + hierarchicalIndex;\n }\n }\n if (!isNullOrUndefined(node.page)) {\n viewer = this.page.viewer;\n var pageIndex = viewer.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n return BlockContainer;\n}(Widget));\nexport { BlockContainer };\n/**\n * @private\n */\nvar BodyWidget = /** @class */ (function (_super) {\n __extends(BodyWidget, _super);\n /**\n * Initialize the constructor of BodyWidget\n */\n function BodyWidget() {\n return _super.call(this) || this;\n }\n /**\n * @private\n */\n BodyWidget.prototype.equals = function (widget) {\n return widget instanceof BodyWidget && widget.sectionFormat === this.sectionFormat;\n };\n /**\n * @private\n */\n BodyWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var viewer = undefined;\n var node = this;\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n if (!isNullOrUndefined(node.page)) {\n viewer = this.page.viewer;\n var pageIndex = viewer.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n BodyWidget.prototype.getTableCellWidget = function (touchPoint) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= touchPoint.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= touchPoint.y) {\n return this.childWidgets[i].getTableCellWidget(touchPoint);\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= touchPoint.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(touchPoint);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(touchPoint);\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n BodyWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var n = 0; n < this.childWidgets.length; n++) {\n var chilgWidget = this.childWidgets[n];\n if (chilgWidget instanceof ParagraphWidget) {\n chilgWidget.destroyInternal(viewer);\n }\n else {\n chilgWidget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n n--;\n }\n this.childWidgets = undefined;\n }\n // if (this instanceof HeaderFooterWidget && ((this as HeaderFooterWidget).currentNode ))) {\n // if (((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets )) {\n // let index: number = ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.indexOf(this);\n // ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.splice(index, 1);\n // }\n // this.currentNode = undefined;\n /* tslint:disable: one-line */\n if (!isNullOrUndefined(this.page)) {\n var index = this.indexInOwner;\n if (this.indexInOwner > -1) {\n this.page.bodyWidgets.splice(index, 1);\n if (this.page.bodyWidgets.length === 0) {\n this.page.destroy();\n // }\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.headerWidget === this) {\n this.page.headerWidget = undefined;\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.footerWidget === this) {\n this.page.footerWidget = undefined;\n }\n this.page = undefined;\n }\n }\n this.destroy();\n };\n /**\n * @private\n */\n BodyWidget.prototype.destroy = function () {\n // if (this.sectionFormat) {\n // this.sectionFormat.destroy();\n // }\n this.sectionFormat = undefined;\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n return BodyWidget;\n}(BlockContainer));\nexport { BodyWidget };\n/**\n * @private\n */\nvar HeaderFooterWidget = /** @class */ (function (_super) {\n __extends(HeaderFooterWidget, _super);\n function HeaderFooterWidget(type) {\n var _this = _super.call(this) || this;\n _this.headerFooterType = type;\n return _this;\n }\n /**\n * @private\n */\n HeaderFooterWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n /**\n * @private\n */\n HeaderFooterWidget.prototype.equals = function (widget) {\n // Todo: Need to work\n return widget instanceof HeaderFooterWidget\n && widget.containerWidget === this.containerWidget;\n };\n /**\n * @private\n */\n HeaderFooterWidget.prototype.clone = function () {\n var headerFooter = new HeaderFooterWidget(this.headerFooterType);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n headerFooter.childWidgets.push(block);\n block.index = i;\n block.containerWidget = headerFooter;\n }\n headerFooter.x = this.x;\n headerFooter.y = this.y;\n headerFooter.height = 0;\n headerFooter.width = 0;\n return headerFooter;\n };\n /**\n * @private\n */\n HeaderFooterWidget.prototype.destroyInternal = function (viewer) {\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n return HeaderFooterWidget;\n}(BlockContainer));\nexport { HeaderFooterWidget };\n/**\n * @private\n */\nvar BlockWidget = /** @class */ (function (_super) {\n __extends(BlockWidget, _super);\n function BlockWidget() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(BlockWidget.prototype, \"bodyWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof BlockContainer) {\n return widget.containerWidget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"leftIndent\", {\n /**\n * @private\n */\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.leftIndent;\n }\n else if (blockAdv instanceof TableWidget && blockAdv.tableFormat instanceof WTableFormat) {\n return blockAdv.tableFormat.leftIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"rightIndent\", {\n /**\n * @private\n */\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.rightIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInsideTable\", {\n /**\n * @private\n */\n get: function () {\n return this.containerWidget instanceof TableCellWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInHeaderFooter\", {\n /**\n * @private\n */\n get: function () {\n return this.bodyWidget instanceof HeaderFooterWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"associatedCell\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableCellWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Check whether the paragraph contains only page break.\n * @private\n */\n BlockWidget.prototype.isPageBreak = function () {\n var isPageBreak = false;\n if (this instanceof ParagraphWidget) {\n var paragraph = this;\n if (paragraph != null && paragraph.childWidgets.length === 1 &&\n paragraph.firstChild.children.length === 1) {\n var pageBreak = paragraph.firstChild.children[0];\n isPageBreak = pageBreak.isPageBreak;\n }\n }\n return isPageBreak;\n };\n /**\n * @private\n */\n BlockWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.containerWidget.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (!isNullOrUndefined(node.containerWidget)) {\n if (node.containerWidget instanceof BlockWidget) {\n return node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n else if (node.containerWidget instanceof BlockContainer) {\n hierarchicalIndex = node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n BlockWidget.prototype.getIndex = function () {\n if (this instanceof ParagraphWidget || this instanceof TableWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n else if (this instanceof TableRowWidget) {\n return this.ownerTable.childWidgets.indexOf(this);\n }\n else if (this instanceof TableCellWidget) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return 0;\n };\n /**\n * @private\n */\n BlockWidget.prototype.getContainerWidth = function () {\n if (this.isInsideTable) {\n return this.associatedCell.cellFormat.cellWidth - (this.associatedCell.margin.left + this.associatedCell.margin.right);\n }\n else {\n var bodyWidget = this.bodyWidget;\n var sectionFormat = bodyWidget.sectionFormat;\n return sectionFormat.pageWidth - (sectionFormat.leftMargin + sectionFormat.rightMargin);\n }\n };\n return BlockWidget;\n}(Widget));\nexport { BlockWidget };\n/**\n * @private\n */\nvar ParagraphWidget = /** @class */ (function (_super) {\n __extends(ParagraphWidget, _super);\n /**\n * Initialize the constructor of ParagraphWidget\n */\n function ParagraphWidget() {\n var _this = _super.call(this) || this;\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n Object.defineProperty(ParagraphWidget.prototype, \"isEndsWithPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this.childWidgets.length > 0) {\n return this.lastChild.isEndsWithPageBreak;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ParagraphWidget.prototype.equals = function (widget) {\n return widget instanceof ParagraphWidget && widget.paragraphFormat === this.paragraphFormat;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.isEmpty = function () {\n if (isNullOrUndefined(this.childWidgets) || this.childWidgets.length === 0) {\n return true;\n }\n for (var j = 0; j < this.childWidgets.length; j++) {\n var inlineElement = this.childWidgets[j];\n for (var i = 0; i < inlineElement.children.length; i++) {\n var inline = inlineElement.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return false;\n }\n }\n }\n return true;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.getInline = function (offset, indexInInline) {\n var inline = undefined;\n var count = 0;\n var isStarted = false;\n var splittedWidget = this.getSplitWidgets();\n for (var k = 0; k < splittedWidget.length; k++) {\n var widget = splittedWidget[k];\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n inline = line.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || inline instanceof BookmarkElementBox || inline instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inline))) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inline.length) {\n indexInInline = (offset - count);\n return { 'element': inline, 'index': indexInInline };\n }\n count += inline.length;\n }\n }\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inline) ? offset : inline.length;\n }\n return { 'element': inline, 'index': indexInInline };\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.getLength = function () {\n var length = 0;\n for (var j = 0; j < this.childWidgets.length; j++) {\n var line = this.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n length += element.length;\n }\n }\n return length;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.clone = function () {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(this.paragraphFormat);\n paragraph.characterFormat.copyFormat(this.characterFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var line = this.childWidgets[i];\n var cloneLine = line.clone();\n paragraph.childWidgets.push(cloneLine);\n cloneLine.paragraph = paragraph;\n }\n paragraph.x = this.x;\n paragraph.y = this.y;\n paragraph.height = this.height;\n paragraph.width = this.width;\n return paragraph;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroy();\n if (this.childWidgets.length === 1 && isNullOrUndefined(this.childWidgets[0].children)) {\n this.childWidgets = undefined;\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget) && !isNullOrUndefined(this.containerWidget.childWidgets)\n && this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n this.containerWidget.height -= height;\n // if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n // && this.containerWidget instanceof BodyWidget) {\n // // (this.containerWidget as BodyWidget).destroyInternal(viewer);\n // }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.destroy = function () {\n // if (this.paragraphFormat) {\n // this.paragraphFormat.destroy();\n // }\n this.paragraphFormat = undefined;\n // if (this.characterFormat) {\n // this.characterFormat.destroy();\n // }\n this.characterFormat = undefined;\n _super.prototype.destroy.call(this);\n };\n return ParagraphWidget;\n}(BlockWidget));\nexport { ParagraphWidget };\n/**\n * @private\n */\nvar TableWidget = /** @class */ (function (_super) {\n __extends(TableWidget, _super);\n function TableWidget() {\n var _this = _super.call(this) || this;\n _this.flags = 0;\n /**\n * @private\n */\n _this.leftMargin = 0;\n /**\n * @private\n */\n _this.topMargin = 0;\n /**\n * @private\n */\n _this.rightMargin = 0;\n /**\n * @private\n */\n _this.bottomMargin = 0;\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.tableFormat = new WTableFormat(_this);\n _this.tableHolder = new WTableHolder();\n _this.spannedRowCollection = new Dictionary();\n return _this;\n }\n Object.defineProperty(TableWidget.prototype, \"isGridUpdated\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x4) >> 2) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFB) | ((value ? 1 : 0) << 2));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"continueHeader\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x2) >> 1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFD) | ((value ? 1 : 0) << 1));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"header\", {\n /**\n * @private\n */\n get: function () {\n return (this.flags & 0x1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFE) | (value ? 1 : 0));\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableWidget.prototype.equals = function (widget) {\n return widget instanceof TableWidget && widget.tableFormat === this.tableFormat;\n };\n /**\n * @private\n */\n TableWidget.prototype.combineRows = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.childWidgets.length === 0) {\n row.destroy();\n i--;\n }\n else {\n row.combineCells(viewer);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.contains = function (tableCell) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return this.equals(tableCell.ownerTable);\n };\n /**\n * @private\n */\n TableWidget.prototype.getOwnerWidth = function (isBasedOnViewer) {\n var width = this.getContainerWidth();\n // Left and right indents should be neglected.\n width = width - this.leftIndent - this.rightIndent;\n return width >= 0 ? width : 0;\n };\n TableWidget.prototype.getTableWidth = function () {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidth = 0;\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n rowWidth += row.childWidgets[j].cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableClientWidth = function (clientWidth) {\n var tableWidth = clientWidth;\n if (this.tableFormat.preferredWidthType === 'Point'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = this.tableFormat.preferredWidth;\n }\n else {\n if (this.tableFormat.preferredWidthType === 'Percent'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = tableWidth * this.tableFormat.preferredWidth / 100;\n }\n else {\n //By default, if Table preferred widthType is auto , width is set based on ClientWidth and type is set as 'Point'\n this.tableFormat.preferredWidthType = 'Point';\n this.tableFormat.preferredWidth = tableWidth;\n }\n }\n return tableWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.getCellWidth = function (preferredWidth, preferredWidthType, containerWidth, cell) {\n var cellWidth = preferredWidth;\n if (preferredWidthType === 'Percent') {\n cellWidth = (preferredWidth * containerWidth) / 100;\n }\n else if (preferredWidthType === 'Point') {\n cellWidth = preferredWidth;\n }\n // For grid before and grid after with auto width, no need to calculate minimum preferred width.\n else if (!isNullOrUndefined(cell)) {\n cellWidth = cell.getMinimumPreferredWidth();\n }\n return cellWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitCellsToClientArea = function (clientWidth) {\n var tableWidth = this.getTableWidth();\n var factor = clientWidth / tableWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.rowFormat.gridAfterWidth *= factor;\n row.rowFormat.gridBeforeWidth *= factor;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].cellFormat.cellWidth *= factor;\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableCellWidget = function (point) {\n var tableCellWidget = undefined;\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n tableCellWidget = this.childWidgets[i].getTableCellWidget(point);\n break;\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n //tslint:disable: max-func-body-length\n TableWidget.prototype.calculateGrid = function () {\n var tempGrid = [];\n var spannedCells = [];\n var containerWidth = this.getOwnerWidth(true);\n var tableWidth = this.getTableClientWidth(containerWidth);\n this.tableCellInfo = new Dictionary();\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowCellInfo = new Dictionary();\n var rowFormat = row.rowFormat;\n var cellWidth = 0;\n var columnSpan = row.rowFormat.gridBefore;\n var currOffset = 0;\n if (tempGrid.indexOf(currOffset) < 0) {\n tempGrid.push(currOffset);\n }\n //Converts the row grid before width from point to twips point by 15 factor.\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, tableWidth, null);\n currOffset += cellWidth;\n var startOffset = Math.round(currOffset);\n if (tempGrid.indexOf(startOffset) < 0) {\n tempGrid.push(startOffset);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < spannedCells.length; k++) {\n if (spannedCells[k].columnIndex < columnSpan) {\n continue;\n }\n var rowSpan = spannedCells[k].cellFormat.rowSpan;\n var removeSpannedCell = true;\n if (spannedCells[k].columnIndex > columnSpan) {\n {\n removeSpannedCell = false;\n // If the cell is the last cell in the row and the row has grid after value..\n if (j === row.childWidgets.length - 1 && row.rowFormat.gridAfter > 0) {\n // tslint:disable-next-line:max-line-length\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n }\n }\n }\n else {\n // If the table gird alone calculted then column index of the rowspanned cell will be directly taken. \n // If the gird calculation is done from the UI level opearations such as resizing then table holder \n // will have the columns at that time we can get the column index from the table holder.\n //Converts the cell width from point to twips point by 15 factor.\n // tslint:disable-next-line:max-line-length\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n columnSpan = spannedCells[k].columnIndex + spannedCells[k].cellFormat.columnSpan;\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - spannedCells[k].ownerRow.rowIndex === rowSpan - 1) {\n spannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (spannedCells.length === 0 || spannedCells[spannedCells.length - 1].columnIndex <= columnSpan) {\n spannedCells.push(cell);\n }\n else {\n for (var m = spannedCells.length; m > 0; m--) {\n if (spannedCells[m - 1].columnIndex > columnSpan) {\n spannedCells.splice(m - 1, 0, cell);\n }\n }\n }\n }\n // Add start offset of each cell based on its index\n if (!rowCellInfo.containsKey(cell.cellIndex)) {\n rowCellInfo.add(cell.cellIndex, Math.round(currOffset - startOffset));\n }\n columnSpan += cell.cellFormat.columnSpan;\n //Converts the cell width from pixel to twips point by 15 factor.\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n var offset = Math.round(currOffset);\n if (tempGrid.indexOf(offset) < 0) {\n tempGrid.push(offset);\n }\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfter > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n currOffset += cellWidth;\n if (tempGrid.indexOf(Math.round(currOffset)) < 0) {\n tempGrid.push(Math.round(currOffset));\n }\n columnSpan += rowFormat.gridAfter;\n }\n // Add rowindex and its cells info for each row\n if (!this.tableCellInfo.containsKey(row.rowIndex)) {\n this.tableCellInfo.add(row.rowIndex, rowCellInfo);\n }\n }\n }\n tempGrid.sort(function (a, b) { return a - b; });\n if (tempGrid.length - 1 !== this.tableHolder.columns.length) {\n this.updateColumnSpans(tempGrid, tableWidth);\n }\n this.tableCellInfo.clear();\n this.tableCellInfo = undefined;\n };\n TableWidget.prototype.updateColumnSpans = function (tempGrid, containerWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.rowFormat.gridBeforeWidth >= 0) {\n row.rowFormat.gridBefore = row.getGridCount(tempGrid, undefined, -1, containerWidth);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnSpan = row.getGridCount(tempGrid, cell, cell.getIndex(), containerWidth);\n if (columnSpan > 0 && cell.cellFormat.columnSpan !== columnSpan) {\n cell.cellFormat.columnSpan = columnSpan;\n }\n }\n if (row.rowFormat.gridAfterWidth >= 0) {\n row.rowFormat.gridAfter = row.getGridCount(tempGrid, undefined, row.childWidgets.length, containerWidth);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.buildTableColumns = function () {\n if (this.isGridUpdated) {\n return;\n }\n // Clear existing columns in order to start creating columns freshly.\n this.tableHolder.resetColumns();\n var containerWidth = 0;\n var tableWidth = 0;\n var rowSpannedCells = [];\n var isAutoWidth = this.tableFormat.preferredWidthType === 'Auto';\n // For continuous layout, window width should be considered. \n // If preferred width exceeds this limit, it can take upto maximum of 2112 pixels (1584 points will be assigned by Microsoft Word).\n containerWidth = this.getOwnerWidth(true);\n tableWidth = this.getTableClientWidth(containerWidth);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowFormat = row.rowFormat;\n var columnSpan = 0;\n var cellWidth = 0;\n var offset = 0;\n if (rowFormat.gridBefore > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, row.rowFormat.gridAfterWidthType, tableWidth, null);\n this.tableHolder.addColumns(columnSpan, columnSpan = rowFormat.gridBefore, cellWidth, cellWidth, offset = cellWidth);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (rowSpannedCells.length === 0) {\n cell.columnIndex = columnSpan;\n }\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.columnIndex < columnSpan) {\n cell.columnIndex = columnSpan;\n continue;\n }\n var rowSpan = 1;\n var removeSpannedCell = true;\n rowSpan = rowSpannedCell.cellFormat.rowSpan;\n if (rowSpannedCell.columnIndex > columnSpan) {\n cell.columnIndex = columnSpan;\n removeSpannedCell = false;\n }\n else {\n // tslint:disable-next-line:max-line-length\n cellWidth = this.getCellWidth(rowSpannedCell.cellFormat.preferredWidth, rowSpannedCell.cellFormat.preferredWidthType, tableWidth, rowSpannedCell);\n var minWidth_1 = rowSpannedCell.getMinimumPreferredWidth();\n // If the table gird alone calculted then column index of the rowspanned cell will be directly taken. \n // tslint:disable-next-line:max-line-length\n // If the gird calculation is done from the UI level opearations such as resizing then table holder will have the columns at that time we can get the column index from the table holder.\n // tslint:disable-next-line:max-line-length\n if (this.tableHolder.columns.length > 0) {\n this.tableHolder.addColumns(columnSpan, columnSpan = this.tableHolder.columns.indexOf(rowSpannedCell.ownerColumn) + rowSpannedCell.cellFormat.columnSpan, cellWidth, minWidth_1, offset += cellWidth);\n cell.columnIndex = columnSpan;\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.tableHolder.addColumns(columnSpan, columnSpan = rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan, cellWidth, minWidth_1, offset += cellWidth);\n cell.columnIndex = columnSpan;\n }\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - rowSpannedCell.ownerRow.rowIndex === rowSpan - 1) {\n rowSpannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (rowSpannedCells.length === 0 || rowSpannedCells[rowSpannedCells.length - 1].columnIndex <= columnSpan) {\n rowSpannedCells.push(cell);\n }\n else {\n for (var m = rowSpannedCells.length; m > 0; m--) {\n if (rowSpannedCells[m - 1].columnIndex > columnSpan) {\n rowSpannedCells.splice(m - 1, 0, cell);\n }\n }\n }\n }\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, cell);\n var minWidth = cell.getMinimumPreferredWidth();\n this.tableHolder.addColumns(columnSpan, columnSpan += cell.cellFormat.columnSpan, cellWidth, minWidth, offset += cellWidth);\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfterWidth > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n this.tableHolder.addColumns(columnSpan, columnSpan += rowFormat.gridAfter, cellWidth, cellWidth, offset += cellWidth);\n }\n }\n }\n this.tableHolder.validateColumnWidths();\n // Fits the column width based on preferred width. i.e. Fixed layout.\n this.tableHolder.fitColumns(containerWidth, tableWidth, isAutoWidth);\n //Sets the width to cells\n this.setWidthToCells(tableWidth, isAutoWidth);\n };\n /**\n * @private\n */\n TableWidget.prototype.setWidthToCells = function (tableWidth, isAutoWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rw = this.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.beforeWidth = this.tableHolder.getCellWidth(0, rowFormat.gridBefore, tableWidth, isAutoWidth);\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n // tslint:disable-next-line:max-line-length\n cell.cellFormat.cellWidth = this.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth, isAutoWidth);\n //By default, if cell preferred widthType is auto , width set based on table width and type is changed to 'Point'\n if (cell.cellFormat.preferredWidthType !== 'Percent') {\n cell.cellFormat.preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.afterWidth = this.tableHolder.getCellWidth(0, rowFormat.gridAfter, tableWidth, isAutoWidth);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getMaxRowWidth = function (clientWidth) {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, clientWidth, cell);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateWidth = function (dragValue) {\n var totalPreferredWidth = this.tableHolder.getTotalWidth();\n var containerWidth = this.getTableClientWidth(this.getOwnerWidth(true));\n if (containerWidth <= totalPreferredWidth) {\n if (this.tableFormat.preferredWidthType === 'Auto') {\n this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (this.tableFormat.preferredWidthType !== 'Auto') {\n if (this.tableFormat.preferredWidthType === 'Point') {\n this.tableFormat.preferredWidth = this.getMaxRowWidth(containerWidth);\n }\n // else\n // { //ToDo:Need to anzlyze more the Percentage calculation for table width.\n // let value:number = ConvertPixelToPercent(GetMaxRowWidth(containerWidth));\n // this.tableFormat.preferredWidth = value;\n // }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.convertPointToPercent = function (tablePreferredWidth, ownerWidth) {\n var value = 0;\n value = (tablePreferredWidth / ownerWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n /**\n * @private\n */\n TableWidget.prototype.clone = function () {\n var table = new TableWidget();\n table.tableHolder = this.tableHolder.clone();\n table.tableFormat.copyFormat(this.tableFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i].clone();\n table.childWidgets.push(row);\n row.containerWidget = table;\n row.index = i;\n }\n table.x = this.x;\n table.y = this.y;\n table.height = this.height;\n table.width = this.width;\n table.containerWidget = this.containerWidget;\n return table;\n };\n /**\n * @private\n */\n TableWidget.getTableOf = function (node) {\n if (node instanceof WBorders) {\n var row = TableRowWidget.getRowOf(node);\n if (!isNullOrUndefined(row)) {\n return row.ownerTable;\n }\n else if (node.ownerBase instanceof WTableFormat && node.ownerBase.ownerBase instanceof TableWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitChildToClientArea = function () {\n var clientWidth = this.getContainerWidth();\n if (Math.round(clientWidth) < Math.round(this.getTableWidth())) {\n this.fitCellsToClientArea(clientWidth);\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n if (cell.childWidgets[k] instanceof TableWidget) {\n cell.childWidgets[k].fitChildToClientArea();\n }\n }\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getColumnCellsForSelection = function (startCell, endCell) {\n var cells = [];\n var start = startCell.columnIndex;\n var end = endCell.columnIndex + endCell.cellFormat.columnSpan;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnIndex = cell.columnIndex;\n var columnSpan = cell.cellFormat.columnSpan;\n if ((columnIndex + columnSpan > start && columnIndex + columnSpan < end) || (columnIndex > start && columnIndex < end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if ((columnIndex > start && columnIndex < end && columnIndex + columnSpan < end)\n || (columnIndex < start && columnIndex + columnSpan > end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if (columnIndex === start || columnIndex + columnSpan === end) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n /**\n * Splits width equally for all the cells.\n * @param tableClientWidth\n * @private\n */\n TableWidget.prototype.splitWidthToTableCells = function (tableClientWidth) {\n for (var row = 0; row < this.childWidgets.length; row++) {\n this.childWidgets[row].splitWidthToRowCells(tableClientWidth);\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.insertTableRowsInternal = function (tableRows, startIndex) {\n for (var i = 0; i < tableRows.length; i++) {\n var row = tableRows.splice(i, 1)[0];\n row.containerWidget = this;\n this.childWidgets.splice(startIndex, 0, row);\n i--;\n }\n this.updateRowIndex(startIndex);\n this.isGridUpdated = false;\n this.buildTableColumns();\n this.isGridUpdated = true;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateRowIndex = function (startIndex) {\n for (var i = startIndex; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.index = i;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].index = j;\n row.childWidgets[j].rowIndex = row.rowIndex;\n }\n startIndex++;\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getCellStartOffset = function (cell) {\n var offset = 0;\n if (cell && this.tableCellInfo) {\n if (this.tableCellInfo.containsKey(cell.ownerRow.rowIndex)) {\n var rowCellInfo = this.tableCellInfo.get(cell.ownerRow.rowIndex);\n if (rowCellInfo.containsKey(cell.cellIndex)) {\n offset = rowCellInfo.get(cell.cellIndex);\n }\n }\n }\n return offset;\n };\n /**\n * @private\n */\n TableWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var j = 0; j < this.childWidgets.length; j++) {\n var widget = undefined;\n var childWidget = this.childWidgets[j];\n widget = childWidget;\n if (!isNullOrUndefined(widget)) {\n widget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n j--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n if (this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n }\n this.containerWidget.height -= height;\n // if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n // && this.containerWidget instanceof BodyWidget) {\n // // (this.containerWidget as BodyWidget).destroyInternal(viewer);\n // }\n }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableWidget.prototype.destroy = function () {\n // if (this.tableFormat) {\n // this.tableFormat.destroy();\n // }\n this.tableFormat = undefined;\n // if (this.spannedRowCollection) {\n // this.spannedRowCollection.destroy();\n // }\n this.spannedRowCollection = undefined;\n this.tableGrids = [];\n this.tableGrids = undefined;\n // if (this.tableHolder) {\n // this.tableHolder.destroy();\n // }\n this.tableHolder = undefined;\n this.flags = undefined;\n this.leftMargin = undefined;\n this.topMargin = undefined;\n this.rightMargin = undefined;\n this.bottomMargin = undefined;\n this.headerHeight = undefined;\n this.description = undefined;\n this.title = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableWidget;\n}(BlockWidget));\nexport { TableWidget };\n/**\n * @private\n */\nvar TableRowWidget = /** @class */ (function (_super) {\n __extends(TableRowWidget, _super);\n function TableRowWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.spannedRowCollection = [];\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.rowFormat = new WRowFormat(_this);\n return _this;\n }\n Object.defineProperty(TableRowWidget.prototype, \"rowIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"nextRow\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.ownerTable.childWidgets.length - 1) {\n return this.ownerTable.childWidgets[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableRowWidget.prototype.equals = function (widget) {\n return widget instanceof TableRowWidget && widget.rowFormat === this.rowFormat;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.combineCells = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n cell.combineWidget(viewer);\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n if ((this.height - this.ownerTable.tableFormat.cellSpacing) < cell.height) {\n this.height = this.ownerTable.tableFormat.cellSpacing + cell.height;\n }\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.getRowOf = function (node) {\n if (node instanceof WBorders) {\n var cell = TableCellWidget.getCellOf(node);\n if (!isNullOrUndefined(cell)) {\n return cell.ownerRow;\n }\n else if (node.ownerBase instanceof WRowFormat && node.ownerBase.ownerBase instanceof TableRowWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getCell = function (rowIndex, cellIndex) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n if (cell.rowIndex === rowIndex && cell.index === cellIndex) {\n return cell;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.splitWidthToRowCells = function (tableClientWidth) {\n var cells = this.childWidgets;\n var cellWidth = tableClientWidth / cells.length;\n for (var cell = 0; cell < cells.length; cell++) {\n cells[cell].cellFormat.preferredWidth = cellWidth;\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getGridCount = function (tableGrid, cell, index, containerWidth) {\n var prevOffset = 0;\n var width = 0;\n var ownerTable = this.ownerTable;\n var rowFormat = this.rowFormat;\n if (index === -1) {\n width = ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n }\n else {\n prevOffset += ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n if (index >= 0) {\n prevOffset += ownerTable.getCellStartOffset(cell);\n }\n if (index < this.childWidgets.length) {\n width = ownerTable.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, containerWidth, null);\n }\n else {\n width = ownerTable.getCellWidth(rowFormat.gridAfterWidth, rowFormat.gridAfterWidthType, containerWidth, null);\n }\n }\n var gridStartIndex = this.getOffsetIndex(tableGrid, prevOffset);\n var gridEndIndex = this.getOffsetIndex(tableGrid, prevOffset + width);\n return gridEndIndex - gridStartIndex;\n };\n TableRowWidget.prototype.getOffsetIndex = function (tableGrid, offset) {\n offset = Math.round(offset);\n var index = 0;\n if (tableGrid.indexOf(offset) >= 0) {\n index = tableGrid.indexOf(offset);\n }\n else {\n for (var i = 0; i < tableGrid.length; i++) {\n if (tableGrid[i] > offset) {\n return i;\n }\n }\n index = tableGrid.length - 1;\n }\n return index;\n };\n TableRowWidget.prototype.getCellOffset = function (index, containerWidth) {\n var prevOffset = 0;\n var ownerTable = this.ownerTable;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cellFormat = this.childWidgets[i].cellFormat;\n if (i === index) {\n break;\n }\n prevOffset += ownerTable.getCellWidth(cellFormat.preferredWidth, cellFormat.preferredWidthType, containerWidth, null);\n }\n return prevOffset;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.updateRowBySpannedCells = function () {\n var rowSpannedCells = this.getPreviousRowSpannedCells();\n var currentRowIndex = this.rowIndex;\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCell = rowSpannedCells[i];\n var rowSpanEnd = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n // If current row is row span end or includes spanned cells. then, decrease the rowspan\n if (rowSpanEnd >= currentRowIndex) {\n spannedCell.cellFormat.rowSpan -= 1;\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getPreviousRowSpannedCells = function (include) {\n var rowSpannedCells = [];\n var row = include ? this : this.previousWidget;\n while (!isNullOrUndefined(row)) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.splice(0, 0, cell);\n }\n }\n row = row.previousWidget;\n }\n return rowSpannedCells;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var x = Math.round(this.childWidgets[i].x);\n if (x - this.childWidgets[i].margin.left - 1 <= point.x\n && (x + this.childWidgets[i].width) >= point.x) {\n return this.childWidgets[i];\n }\n else if (i === this.childWidgets.length - 1\n && (this.childWidgets[i].x + this.childWidgets[i].width) + 1 <= point.x) {\n return this.childWidgets[i];\n }\n }\n var cellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].x <= point.x) {\n cellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n cellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return cellWidget;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroyInternal(viewer);\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n && this.containerWidget instanceof TableWidget) {\n this.containerWidget.destroyInternal(viewer);\n }\n else if (this.containerWidget.containerWidget instanceof BodyWidget) {\n this.containerWidget.containerWidget.height -= height;\n }\n this.containerWidget.height -= height;\n }\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableRowWidget.prototype.clone = function () {\n var row = new TableRowWidget();\n row.rowFormat.copyFormat(this.rowFormat);\n row.topBorderWidth = this.topBorderWidth;\n row.bottomBorderWidth = this.bottomBorderWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i].clone();\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = i;\n cell.rowIndex = this.rowIndex;\n }\n row.x = this.x;\n row.y = this.y;\n row.height = this.height;\n row.width = this.width;\n return row;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroy = function () {\n // if (this.rowFormat) {\n // this.rowFormat.destroy();\n // }\n this.rowFormat = undefined;\n this.rowFormat = undefined;\n this.spannedRowCollection = [];\n this.spannedRowCollection = undefined;\n this.topBorderWidth = undefined;\n this.bottomBorderWidth = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableRowWidget;\n}(BlockWidget));\nexport { TableRowWidget };\n/**\n * @private\n */\nvar TableCellWidget = /** @class */ (function (_super) {\n __extends(TableCellWidget, _super);\n function TableCellWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.rowIndex = -1;\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.cellFormat = new WCellFormat(_this);\n return _this;\n }\n Object.defineProperty(TableCellWidget.prototype, \"ownerColumn\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerTable.tableHolder.columns[this.columnIndex];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"leftMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.leftMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.leftMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"topMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.topMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.topMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"rightMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.rightMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.rightMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"bottomMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.bottomMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.bottomMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"cellIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.ownerRow) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableRowWidget) {\n return this.containerWidget.ownerTable;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerRow\", {\n /**\n * @private\n */\n get: function () {\n return this.containerWidget;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableCellWidget.prototype.equals = function (widget) {\n return widget instanceof TableCellWidget && widget.cellFormat === this.cellFormat;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getContainerTable = function () {\n var table = this.ownerTable;\n while (table instanceof TableWidget && table.associatedCell instanceof TableCellWidget) {\n table = table.associatedCell.getContainerTable();\n }\n return table;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousSplitWidget = function () {\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.previousRenderedWidget;\n if (isNullOrUndefined(row) || row.index < this.rowIndex) {\n break;\n }\n var previousCell = row.getCell(this.rowIndex, this.index);\n if (previousCell && this.equals(previousCell)) {\n return previousCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getNextSplitWidget = function () {\n var rowSpan = this.cellFormat.rowSpan;\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.nextRenderedWidget;\n if (isNullOrUndefined(row) || row.index > this.rowIndex + rowSpan) {\n break;\n }\n var nextCell = row.getCell(this.rowIndex, this.index);\n if (nextCell && this.equals(nextCell)) {\n return nextCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n return this.childWidgets[i].getTableCellWidget(point);\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= point.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.updateWidth = function (preferredWidth) {\n if (this.cellFormat.preferredWidthType === 'Auto') {\n this.cellFormat.preferredWidth = preferredWidth;\n this.cellFormat.preferredWidthType = 'Point';\n }\n else if (this.cellFormat.preferredWidthType === 'Point') {\n this.cellFormat.preferredWidth = preferredWidth;\n }\n else if (this.cellFormat.preferredWidthType === 'Percent') {\n this.cellFormat.preferredWidth = this.convertPointToPercent(preferredWidth);\n }\n this.cellFormat.cellWidth = preferredWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.convertPointToPercent = function (cellPreferredWidth) {\n var value = 0;\n var clientWidth = this.ownerTable.getOwnerWidth(true);\n var tableWidth = this.ownerTable.getTableClientWidth(clientWidth);\n value = (cellPreferredWidth / tableWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n /**\n * @private\n */\n TableCellWidget.getCellLeftBorder = function (tableCell) {\n var leftBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.left)) {\n leftBorder = cellBorder.left;\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n else {\n var prevCell = undefined;\n if (!isNullOrUndefined(tableCell.previousWidget)) {\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n prevCell = tableCell.previousWidget;\n }\n else if ((tableCell.cellFormat.columnSpan > 1 || tableCell.columnIndex > 1) && tableCell.ownerRow.rowIndex > 0) {\n var previousRow = tableCell.ownerRow.previousWidget;\n while (!isNullOrUndefined(previousRow) && previousRow.childWidgets.length > 0) {\n for (var i = 0; i < previousRow.childWidgets.length; i++) {\n var prevRowCell = previousRow.childWidgets[i];\n if (prevRowCell.columnIndex + prevRowCell.cellFormat.columnSpan === tableCell.columnIndex) {\n prevCell = previousRow.childWidgets[i];\n break;\n }\n }\n if (!isNullOrUndefined(prevCell)) {\n break;\n }\n previousRow = previousRow.previousWidget;\n }\n }\n leftBorder = tableCell.getPreviousCellLeftBorder(leftBorder, prevCell);\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderWidth = function () {\n var borderWidth = 0;\n //let ownerTable = this.ownerTable;\n //Added null condition check for asynchronous loading.\n // if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n // update the margins values respect to layouting of borders.\n //For normal table cells only left border is rendred. for last cell left and right border is rendred.\n // this border widths are not included in margins.\n // boderWidth = this.cellFormat.borders.GetRightBorderToRender(this).GetLineWidth();\n //need to render rightBorder specifically for all the cells when the cellSpacing is greater than zero or for last cell of each row.\n // }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderWidth = function () {\n var borderWidth = 0;\n var ownerTable = this.ownerTable;\n //Added null condition check for asynchronous loading.\n // if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n ///need to render right border specifically for all the cells when the cell spacing is \n //greater than zero or for last cell of each row.\n // let isLastCell: boolean = false;\n // isLastCell = this.cellIndex === 0;\n // if (ownerTable.tableFormat.cellSpacing > 0 || isLastCell) {\n // boderWidth = this.cellFormat.borders.getLeftBorderToRender(this).GetLineWidth();\n // }\n // }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellSpacing = function () {\n var actualCellSpacing = this.ownerTable && this.ownerTable.tableFormat ? this.ownerTable.tableFormat.cellSpacing : 0;\n var cellSpacingToLayout = actualCellSpacing;\n // Considers the left, right margins and border widths(only available for Layouted table) for Minimum width.\n if (this.ownerRow.childWidgets.length === 1) {\n cellSpacingToLayout = actualCellSpacing * 2;\n }\n else if (this.cellIndex === 0 || this.cellIndex === this.ownerRow.childWidgets.length - 1) {\n cellSpacingToLayout = actualCellSpacing + (actualCellSpacing / 2);\n }\n else {\n cellSpacingToLayout = actualCellSpacing;\n }\n return cellSpacingToLayout;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getMinimumPreferredWidth = function () {\n var defaultWidth = 0;\n defaultWidth = this.leftMargin + this.rightMargin + this.getLeftBorderWidth() + this.getRightBorderWidth() + this.getCellSpacing();\n return defaultWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellLeftBorder = function (leftBorder, previousCell) {\n // tslint:disable-next-line:max-line-length\n if ((isNullOrUndefined(previousCell) || (!isNullOrUndefined(leftBorder) && (leftBorder.lineStyle === 'None' && !leftBorder.hasNoneStyle)))) {\n if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var prevCellRightBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(previousCell.cellFormat.borders) && !isNullOrUndefined(previousCell.cellFormat.borders.right) && previousCell.cellFormat.borders.right.lineStyle !== 'None') {\n prevCellRightBorder = previousCell.cellFormat.borders.right;\n }\n if (!isNullOrUndefined(prevCellRightBorder) && prevCellRightBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(prevCellRightBorder, leftBorder);\n }\n else if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBorderBasedOnPriority = function (border, adjacentBorder) {\n // If the cell and its adjacent cell defined different borders then based on this algorithm the border choose to render.\n // Reference link :https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.wordprocessing.tablecellborders.aspx\n if (isNullOrUndefined(border)) {\n return adjacentBorder;\n }\n else if (isNullOrUndefined(adjacentBorder)) {\n return border;\n }\n var borderWeight = border.getBorderWeight();\n var adjacentBorderWeight = adjacentBorder.getBorderWeight();\n //the border with higher wight shall be displayed.\n if (borderWeight === adjacentBorderWeight) {\n //if the border is equal weight the based on the priority the border will be choosen to render.\n var borderPriority = border.getPrecedence();\n var adjacentBorderPriority = adjacentBorder.getPrecedence();\n if (borderPriority === adjacentBorderPriority) {\n //The color with the smaller brightness value shall be displayed.\n var borderColInRGB = this.convertHexToRGB(border.color);\n var R1 = borderColInRGB.r;\n var G1 = borderColInRGB.g;\n var B1 = borderColInRGB.b;\n var adjacentBorderColInRGB = this.convertHexToRGB(adjacentBorder.color);\n var R2 = adjacentBorderColInRGB.r;\n var G2 = adjacentBorderColInRGB.g;\n var B2 = adjacentBorderColInRGB.b;\n var borderBrightness = (R1 + B1 + (2 * G1));\n var adjacentBorderBrightness = (R2 + B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n borderBrightness = (B1 + (2 * G1));\n adjacentBorderBrightness = (B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n if (G1 === G2) {\n return border;\n }\n else if (G1 > G2) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderPriority > adjacentBorderPriority) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n }\n else if (borderWeight > adjacentBorderWeight) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderToRenderByHierarchy = function (leftBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(leftBorder) && (leftBorder.lineStyle !== 'None' || (leftBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(leftBorder.lineStyle === 'None' && leftBorder.lineWidth === 0 && leftBorder.color === '#000000')))) {\n return leftBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(leftBorder) && (leftBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(leftBorder.ownerBase).columnIndex === 0) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.left)) {\n leftBorder = tableBorders.left;\n }\n return leftBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.vertical) && rowBorders.vertical.lineStyle !== 'None') {\n return leftBorder = rowBorders.vertical;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.vertical) && tableBorders.vertical.lineStyle !== 'None') {\n return leftBorder = tableBorders.vertical;\n }\n else {\n return leftBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.getCellRightBorder = function (tableCell) {\n var rightBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.right)) {\n rightBorder = cellBorder.right;\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n else {\n var nextCell = undefined;\n if (!isNullOrUndefined(tableCell.nextWidget)) {\n nextCell = tableCell.nextWidget;\n }\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n rightBorder = tableCell.getAdjacentCellRightBorder(rightBorder, nextCell);\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellRightBorder = function (rightBorder, nextCell) {\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(nextCell) || (!isNullOrUndefined(rightBorder) && (rightBorder.lineStyle === 'None' && !rightBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var nextCellLeftBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(nextCell.cellFormat.borders) && !isNullOrUndefined(nextCell.cellFormat.borders.left) && nextCell.cellFormat.borders.left.lineStyle !== 'None') {\n nextCellLeftBorder = nextCell.cellFormat.borders.left;\n }\n if (!isNullOrUndefined(nextCellLeftBorder) && nextCellLeftBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(rightBorder, nextCellLeftBorder);\n }\n else if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderToRenderByHierarchy = function (rightBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(rightBorder) && (rightBorder.lineStyle !== 'None' || (rightBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(rightBorder.lineStyle === 'None' && rightBorder.lineWidth === 0 && rightBorder.color === '#000000')))) {\n return rightBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(rightBorder) && (rightBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(rightBorder.ownerBase).columnIndex === TableCellWidget.getCellOf(rightBorder.ownerBase).ownerRow.childWidgets.length - 1) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.right)) {\n rightBorder = tableBorders.right;\n }\n return rightBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.vertical) && rowBorders.vertical.lineStyle !== 'None') {\n return rightBorder = rowBorders.vertical;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.vertical) && tableBorders.vertical.lineStyle !== 'None') {\n return rightBorder = tableBorders.vertical;\n }\n else {\n return rightBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.getCellTopBorder = function (tableCell) {\n var topBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.top)) {\n topBorder = cellBorder.top;\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n else {\n var prevTopCell = undefined;\n //ToDo: Need to analyze more to get the previous cell.\n var prevRow = tableCell.ownerRow.previousWidget;\n while (!isNullOrUndefined(prevRow) && prevRow.childWidgets.length > 0) {\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n var prevRowCell = prevRow.childWidgets[i];\n if (prevRowCell.columnIndex + prevRowCell.cellFormat.columnSpan - 1 >= tableCell.columnIndex) {\n prevTopCell = prevRow.childWidgets[i];\n break;\n }\n }\n if (!isNullOrUndefined(prevTopCell)) {\n break;\n }\n prevRow = prevRow.previousWidget;\n //If all the previous rows checked and the previous top cell is null\n // then TableCell previus row matched column index cell is taken for border calculation.\n if (isNullOrUndefined(prevRow) && isNullOrUndefined(prevTopCell)) {\n prevRow = tableCell.ownerRow.previousWidget;\n if (tableCell.columnIndex < prevRow.childWidgets.length) {\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n var prevRowCell = prevRow.childWidgets[i];\n if (prevRowCell.columnIndex === tableCell.columnIndex) {\n prevTopCell = prevRow.childWidgets[i];\n break;\n }\n }\n //If table cell Column index is greater than previous row cells count then last cell is taken as previous top cell.\n }\n else {\n // tslint:disable-next-line:max-line-length\n prevTopCell = tableCell.ownerRow.previousWidget.childWidgets[tableCell.ownerRow.previousWidget.childWidgets.length - 1];\n }\n }\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n topBorder = tableCell.getPreviousCellTopBorder(topBorder, prevTopCell);\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellTopBorder = function (topBorder, previousTopCell) {\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(previousTopCell) || (!isNullOrUndefined(topBorder) && (topBorder.lineStyle === 'None' && !topBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var prevTopCellBottomBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(previousTopCell.cellFormat.borders) && !isNullOrUndefined(previousTopCell.cellFormat.borders.bottom) && previousTopCell.cellFormat.borders.bottom.lineStyle !== 'None') {\n prevTopCellBottomBorder = previousTopCell.cellFormat.borders.bottom;\n }\n if (!isNullOrUndefined(prevTopCellBottomBorder) && prevTopCellBottomBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(topBorder, prevTopCellBottomBorder);\n }\n else if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTopBorderToRenderByHierarchy = function (topBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(topBorder) && (topBorder.lineStyle !== 'None' || (topBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(topBorder.lineStyle === 'None' && topBorder.lineWidth === 0 && topBorder.color === '#000000')))) {\n return topBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(topBorder) && (topBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(topBorder.ownerBase).ownerRow.rowIndex === 0) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.top)) {\n topBorder = tableBorders.top;\n }\n return topBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.horizontal) && rowBorders.horizontal.lineStyle !== 'None') {\n return topBorder = rowBorders.horizontal;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.horizontal) && tableBorders.horizontal.lineStyle !== 'None') {\n return topBorder = tableBorders.horizontal;\n }\n else {\n return topBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.getCellBottomBorder = function (tableCell) {\n var bottomBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.bottom)) {\n bottomBorder = cellBorder.bottom;\n }\n if (isNullOrUndefined(bottomBorder)) {\n // tslint:disable-next-line:max-line-length\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders); // select the left border based on heirarchy.\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders);\n }\n else {\n var nextBottomCell = undefined;\n var nextRow = tableCell.ownerRow.nextWidget;\n if (!isNullOrUndefined(nextRow) && tableCell.columnIndex < nextRow.childWidgets.length) {\n nextBottomCell = nextRow.childWidgets[tableCell.columnIndex];\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n bottomBorder = tableCell.getAdjacentCellBottomBorder(bottomBorder, nextBottomCell);\n }\n if (isNullOrUndefined(bottomBorder)) {\n bottomBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellBottomBorder = function (bottomBorder, nextBottomCell) {\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(nextBottomCell) || (!isNullOrUndefined(bottomBorder) && (bottomBorder.lineStyle === 'None' && !bottomBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var prevBottomCellTopBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(nextBottomCell.cellFormat.borders) && !isNullOrUndefined(nextBottomCell.cellFormat.borders.top) && nextBottomCell.cellFormat.borders.top.lineStyle !== 'None') {\n prevBottomCellTopBorder = nextBottomCell.cellFormat.borders.top;\n }\n if (!isNullOrUndefined(prevBottomCellTopBorder) && prevBottomCellTopBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(bottomBorder, prevBottomCellTopBorder);\n }\n else if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBottomBorderToRenderByHierarchy = function (bottomBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(bottomBorder) && (bottomBorder.lineStyle !== 'None' || (bottomBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(bottomBorder.lineStyle === 'None' && bottomBorder.lineWidth === 0 && bottomBorder.color === '#000000')))) {\n return bottomBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(bottomBorder) && (bottomBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(bottomBorder.ownerBase).ownerRow.rowIndex + TableCellWidget.getCellOf(bottomBorder.ownerBase).cellFormat.rowSpan === TableCellWidget.getCellOf(bottomBorder.ownerBase).ownerTable.childWidgets.length) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.bottom)) {\n bottomBorder = tableBorders.bottom;\n }\n return bottomBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.horizontal) && rowBorders.horizontal.lineStyle !== 'None') {\n return bottomBorder = rowBorders.horizontal;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.horizontal) && tableBorders.horizontal.lineStyle !== 'None') {\n return bottomBorder = tableBorders.horizontal;\n }\n else {\n return bottomBorder;\n }\n };\n TableCellWidget.prototype.convertHexToRGB = function (colorCode) {\n if (colorCode) {\n colorCode = colorCode.replace(/[^0-9A-‌​F]/gi, ''); // To remove # from color code string.\n var colCodeNo = parseInt(colorCode, 16);\n var r = (colCodeNo >> 16) & 255;\n var g = (colCodeNo >> 8) & 255;\n var b = colCodeNo & 255;\n return { 'r': r, 'g': g, 'b': b };\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.getCellOf = function (node) {\n if (node instanceof WBorders) {\n if (node.ownerBase instanceof WCellFormat && node.ownerBase.ownerBase instanceof TableCellWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroyInternal = function (viewer) {\n // let viewer: LayoutViewer = undefined;\n // let page: Page = this.getPage();\n // if (!isNullOrUndefined(page ))\n // viewer = page.viewer;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n if (widget instanceof ParagraphWidget) {\n widget.destroyInternal(viewer);\n }\n else {\n widget.destroyInternal(viewer);\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableCellWidget.prototype.clone = function () {\n var cell = new TableCellWidget();\n cell.cellFormat.copyFormat(this.cellFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n cell.childWidgets.push(block);\n block.containerWidget = cell;\n block.index = i;\n }\n cell.leftBorderWidth = this.leftBorderWidth;\n cell.rightBorderWidth = this.rightBorderWidth;\n if (this.margin) {\n cell.margin = this.margin.clone();\n }\n cell.columnIndex = this.columnIndex;\n cell.x = this.x;\n cell.y = this.y;\n cell.height = this.height;\n cell.width = this.width;\n return cell;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroy = function () {\n // if (this.cellFormat) {\n // this.cellFormat.destroy();\n // }\n this.cellFormat = undefined;\n this.rowIndex = undefined;\n this.columnIndex = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableCellWidget;\n}(BlockWidget));\nexport { TableCellWidget };\n/**\n * @private\n */\nvar LineWidget = /** @class */ (function () {\n /**\n * Initialize the constructor of LineWidget\n */\n function LineWidget(paragraphWidget) {\n /**\n * @private\n */\n this.children = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n this.paragraph = paragraphWidget;\n }\n Object.defineProperty(LineWidget.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n if (this.paragraph && this.paragraph.childWidgets) {\n return this.paragraph.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"nextLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n if (lineIndex <= paragraph.childWidgets.length - 2) {\n return paragraph.childWidgets[lineIndex + 1];\n }\n else if (paragraph.nextSplitWidget) {\n var line = paragraph.nextSplitWidget.firstChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"previousLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n var splitParagraph = paragraph.previousSplitWidget;\n if (lineIndex > 0) {\n return paragraph.childWidgets[lineIndex - 1];\n }\n else if (splitParagraph instanceof ParagraphWidget) {\n var line = splitParagraph.lastChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"isEndsWithPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this.children.length > 0) {\n var lastElement = this.children[this.children.length - 1];\n if (lastElement instanceof TextElementBox) {\n return lastElement.isPageBreak;\n }\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n LineWidget.prototype.isFirstLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && this.paragraph.previousSplitWidget === undefined) {\n return index === 0;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.isLastLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && this.paragraph.nextSplitWidget === undefined) {\n return index === this.paragraph.childWidgets.length - 1;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.getOffset = function (inline, index) {\n if (isNullOrUndefined(inline)) {\n return index;\n }\n var textIndex = index;\n var line = inline.line;\n var lineIndex = inline.line.paragraph.childWidgets.indexOf(inline.line);\n for (var i = 0; i < line.children.length; i++) {\n var inlineElement = line.children[i];\n if (inline === inlineElement) {\n break;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n textIndex += inlineElement.length;\n }\n return textIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.getEndOffset = function () {\n var startOffset = 0;\n var count = 0;\n for (var i = 0; i < this.children.length; i++) {\n var inlineElement = this.children[i];\n if (inlineElement.length === 0) {\n continue;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (inlineElement instanceof TextElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof BookmarkElementBox || (inlineElement instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n startOffset = count + inlineElement.length;\n }\n count += inlineElement.length;\n }\n return startOffset;\n };\n /**\n * @private\n */\n LineWidget.prototype.getInline = function (offset, indexInInline) {\n var inlineElement = undefined;\n var count = 0;\n var isStarted = false;\n if (this.children.length === 0) {\n if (this.previousLine) {\n var elementBox = this.previousLine.children[this.previousLine.children.length - 1];\n if (elementBox instanceof TextElementBox && elementBox.text === '\\v') {\n inlineElement = this.previousLine.children[this.previousLine.children.length - 1];\n indexInInline = 1;\n return { 'element': inlineElement, 'index': indexInInline };\n }\n }\n }\n for (var i = 0; i < this.children.length; i++) {\n inlineElement = this.children[i];\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inlineElement instanceof TextElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof BookmarkElementBox\n || inlineElement instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inlineElement.length) {\n indexInInline = (offset - count);\n return { 'element': inlineElement, 'index': indexInInline };\n }\n count += inlineElement.length;\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inlineElement) ? offset : inlineElement.length;\n }\n return { 'element': inlineElement, 'index': indexInInline };\n };\n /**\n * @private\n */\n LineWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.paragraph.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (node.paragraph instanceof BlockWidget) {\n return node.paragraph.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.clone = function () {\n var line = new LineWidget(undefined);\n for (var j = 0; j < this.children.length; j++) {\n var element = this.children[j];\n var clone = element.clone();\n line.children.push(clone);\n clone.line = line;\n }\n line.width = this.width;\n line.height = this.height;\n return line;\n };\n /**\n * @private\n */\n LineWidget.prototype.destroy = function () {\n if (!isNullOrUndefined(this.children)) {\n for (var i = 0; i < this.children.length; i++) {\n this.children[i].destroy();\n }\n this.children = [];\n }\n this.children = undefined;\n if (this.paragraph) {\n this.paragraph.removeChild(this.indexInOwner);\n }\n this.paragraph = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n return LineWidget;\n}());\nexport { LineWidget };\n/**\n * @private\n */\nvar ElementBox = /** @class */ (function () {\n /**\n * Initialize the constructor of ElementBox\n */\n function ElementBox() {\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.margin = new Margin(0, 0, 0, 0);\n /**\n * @private\n */\n this.characterFormat = undefined;\n this.characterFormat = new WCharacterFormat(this);\n this.margin = new Margin(0, 0, 0, 0);\n }\n Object.defineProperty(ElementBox.prototype, \"isPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this instanceof TextElementBox) {\n return this.text === '\\f';\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.linkFieldCharacter = function (viewer) {\n if (!(this instanceof FieldElementBox)) {\n return;\n }\n if (this.fieldType === 0) {\n var fieldBegin = this;\n if (isNullOrUndefined(fieldBegin.fieldEnd)) {\n this.linkFieldTraversingForward(this.line, fieldBegin, fieldBegin);\n if (viewer.fields.indexOf(fieldBegin) === -1) {\n viewer.fields.push(fieldBegin);\n }\n }\n }\n else if (this.fieldType === 2) {\n var fieldSeparator = this;\n //Links the field begin for the current separator.\n if (isNullOrUndefined(fieldSeparator.fieldBegin)) {\n this.linkFieldTraversingBackwardSeparator(this.line, fieldSeparator, fieldSeparator);\n }\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n if (!isNullOrUndefined(fieldSeparator.fieldBegin)) {\n //Links to field end traversing from field separator.\n var isFieldEnd = this.linkFieldTraversingForward(this.line, fieldSeparator.fieldBegin, fieldSeparator);\n if (isNullOrUndefined(fieldSeparator.fieldEnd) && isFieldEnd) {\n fieldSeparator.fieldEnd = fieldSeparator.fieldBegin.fieldEnd;\n }\n if (fieldSeparator.fieldEnd) {\n fieldSeparator.fieldEnd.fieldSeparator = fieldSeparator;\n }\n }\n }\n else {\n var fieldEnd = this;\n //Links the field begin and separator for the current end.\n if (isNullOrUndefined(fieldEnd.fieldBegin)) {\n this.linkFieldTraversingBackward(this.line, fieldEnd, fieldEnd);\n }\n }\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackward = function (line, fieldEnd, previousNode) {\n var k = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n k = line.children.indexOf(previousNode) - 1;\n }\n for (var j = k; j >= 0; j--) {\n var childNode = line.children[j];\n if (childNode instanceof FieldElementBox) {\n if (childNode.fieldType === 0) {\n if (isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldEnd)) {\n childNode.fieldEnd = fieldEnd;\n }\n if (fieldEnd.fieldSeparator && isNullOrUndefined(fieldEnd.fieldSeparator.fieldBegin)) {\n fieldEnd.fieldSeparator.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldSeparator)) {\n childNode.fieldSeparator = fieldEnd.fieldSeparator;\n }\n }\n }\n return !isNullOrUndefined(fieldEnd.fieldBegin);\n }\n else if (childNode.fieldType === 2 && isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldSeparator = childNode;\n childNode.fieldEnd = fieldEnd;\n if (!isNullOrUndefined(childNode.fieldBegin)) {\n fieldEnd.fieldBegin = childNode.fieldBegin;\n }\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackward(line.previousLine, fieldEnd, this);\n }\n else if (line.paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n var prevParagraph = line.paragraph.previousRenderedWidget;\n // tslint:disable-next-line:max-line-length\n this.linkFieldTraversingBackward(prevParagraph.childWidgets[prevParagraph.childWidgets.length - 1], fieldEnd, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingForward = function (line, fieldBegin, previousNode) {\n var i = 0;\n if (line.children.indexOf(previousNode) > -1) {\n i = line.children.indexOf(previousNode) + 1;\n }\n for (var j = i; j < line.children.length; j++) {\n var node = line.children[j];\n if (node instanceof FieldElementBox) {\n if (node.fieldType === 1) {\n if (isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldEnd = node;\n }\n if (fieldBegin.fieldEnd && isNullOrUndefined(fieldBegin.fieldEnd.fieldBegin)) {\n fieldBegin.fieldEnd.fieldBegin = fieldBegin;\n }\n return true;\n }\n else if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n if (node.fieldType === 2 && isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldSeparator = node;\n if (!isNullOrUndefined(node.fieldEnd)) {\n fieldBegin.fieldEnd = node.fieldEnd;\n return true;\n }\n }\n else {\n return false;\n }\n }\n }\n }\n if (line.nextLine) {\n this.linkFieldTraversingForward(line.nextLine, fieldBegin, this);\n }\n else if (line.paragraph.nextRenderedWidget instanceof ParagraphWidget) {\n this.linkFieldTraversingForward(line.paragraph.nextRenderedWidget.childWidgets[0], fieldBegin, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackwardSeparator = function (line, fieldSeparator, previousNode) {\n var index = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n index = line.children.indexOf(previousNode) - 1;\n }\n for (var i = index; i >= 0; i--) {\n var childElement = line.children[i];\n if (childElement instanceof FieldElementBox) {\n if (childElement instanceof FieldElementBox && childElement.fieldType === 0) {\n if (isNullOrUndefined(childElement.fieldSeparator)) {\n fieldSeparator.fieldBegin = childElement;\n }\n return !isNullOrUndefined(fieldSeparator.fieldBegin);\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackwardSeparator(line.previousLine, fieldSeparator, this);\n }\n else if (line.paragraph.nextRenderedWidget instanceof ParagraphWidget) {\n // tslint:disable-next-line:max-line-length\n line = line.paragraph.previousRenderedWidget.childWidgets[line.paragraph.previousRenderedWidget.childWidgets.length - 1];\n this.linkFieldTraversingBackwardSeparator(line, fieldSeparator, this);\n }\n else {\n return true;\n }\n return true;\n };\n Object.defineProperty(ElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return this.getLength();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n return this.line instanceof LineWidget && this.line.children ? this.line.children.indexOf(this) : -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > 0 && index < this.line.children.length) {\n return this.line.children[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n else if (lineIndex < this.line.paragraph.childWidgets.length - 1) {\n return this.line.paragraph.childWidgets[lineIndex + 1].children[0];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index > 0) {\n return this.line.children[index - 1];\n }\n else if (lineIndex > 0) {\n var lineWidget = this.line.paragraph.childWidgets[lineIndex - 1];\n return lineWidget.children[lineWidget.children.length - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n if (this.line) {\n return this.line.paragraph;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.destroy = function () {\n if (!isNullOrUndefined(this.line) && this.line.children && this.line.children.indexOf(this) > -1) {\n var index = this.line.children.indexOf(this);\n this.line.children.splice(index, 1);\n }\n this.line = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n }\n this.characterFormat = undefined;\n if (this.margin) {\n this.margin.destroy();\n }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n /**\n * @private\n */\n ElementBox.objectCharacter = String.fromCharCode(65532);\n return ElementBox;\n}());\nexport { ElementBox };\n/**\n * @private\n */\nvar FieldElementBox = /** @class */ (function (_super) {\n __extends(FieldElementBox, _super);\n function FieldElementBox(type) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.fieldType = 0;\n /**\n * @private\n */\n _this.hasFieldEnd = false;\n _this.fieldBeginInternal = undefined;\n _this.fieldSeparatorInternal = undefined;\n _this.fieldEndInternal = undefined;\n _this.fieldType = type;\n return _this;\n }\n Object.defineProperty(FieldElementBox.prototype, \"fieldBegin\", {\n get: function () {\n return this.fieldBeginInternal;\n },\n set: function (field) {\n this.fieldBeginInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldSeparator\", {\n get: function () {\n return this.fieldSeparatorInternal;\n },\n set: function (field) {\n this.fieldSeparatorInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldEnd\", {\n get: function () {\n return this.fieldEndInternal;\n },\n set: function (field) {\n this.fieldEndInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.clone = function () {\n var field = new FieldElementBox(this.fieldType);\n field.characterFormat.copyFormat(this.characterFormat);\n if (this.margin) {\n field.margin = this.margin.clone();\n }\n field.width = this.width;\n field.height = this.height;\n return field;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.destroy = function () {\n this.fieldType = undefined;\n this.hasFieldEnd = undefined;\n this.fieldBeginInternal = undefined;\n this.fieldEndInternal = undefined;\n this.fieldSeparatorInternal = undefined;\n _super.prototype.destroy.call(this);\n };\n return FieldElementBox;\n}(ElementBox));\nexport { FieldElementBox };\n/**\n * @private\n */\nvar TextElementBox = /** @class */ (function (_super) {\n __extends(TextElementBox, _super);\n function TextElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.text = '';\n return _this;\n }\n /**\n * @private\n */\n TextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n TextElementBox.prototype.clone = function () {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(this.characterFormat);\n span.text = this.text;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n /**\n * @private\n */\n TextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return TextElementBox;\n}(ElementBox));\nexport { TextElementBox };\n/**\n * @private\n */\nvar FieldTextElementBox = /** @class */ (function (_super) {\n __extends(FieldTextElementBox, _super);\n function FieldTextElementBox() {\n var _this = _super.call(this) || this;\n _this.fieldText = '';\n return _this;\n }\n Object.defineProperty(FieldTextElementBox.prototype, \"text\", {\n get: function () {\n return this.fieldText;\n },\n set: function (value) {\n this.fieldText = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldTextElementBox.prototype.clone = function () {\n var span = new FieldTextElementBox();\n span.characterFormat.copyFormat(this.characterFormat);\n span.fieldBegin = this.fieldBegin;\n span.text = this.text;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n return FieldTextElementBox;\n}(TextElementBox));\nexport { FieldTextElementBox };\n/**\n * @private\n */\nvar TabElementBox = /** @class */ (function (_super) {\n __extends(TabElementBox, _super);\n function TabElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.tabText = '';\n /**\n * @private\n */\n _this.tabLeader = 'None';\n return _this;\n }\n /**\n * @private\n */\n TabElementBox.prototype.destroy = function () {\n this.tabText = undefined;\n this.tabLeader = undefined;\n };\n /**\n * @private\n */\n TabElementBox.prototype.clone = function () {\n var span = new TabElementBox();\n span.characterFormat.copyFormat(this.characterFormat);\n span.tabText = this.tabText;\n span.tabLeader = this.tabLeader;\n span.text = this.text;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n return TabElementBox;\n}(TextElementBox));\nexport { TabElementBox };\n/**\n * @private\n */\nvar BookmarkElementBox = /** @class */ (function (_super) {\n __extends(BookmarkElementBox, _super);\n function BookmarkElementBox(type) {\n var _this = _super.call(this) || this;\n _this.bookmarkTypeIn = 0;\n _this.refereneceIn = undefined;\n _this.nameIn = '';\n _this.bookmarkTypeIn = type;\n return _this;\n }\n Object.defineProperty(BookmarkElementBox.prototype, \"bookmarkType\", {\n /**\n * @private\n */\n get: function () {\n return this.bookmarkTypeIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"name\", {\n /**\n * @private\n */\n get: function () {\n return this.nameIn;\n },\n /**\n * @private\n */\n set: function (name) {\n this.nameIn = name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"reference\", {\n /**\n * @private\n */\n get: function () {\n return this.refereneceIn;\n },\n /**\n * @private\n */\n set: function (reference) {\n this.refereneceIn = reference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n BookmarkElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n BookmarkElementBox.prototype.destroy = function () {\n this.name = undefined;\n this.reference = undefined;\n this.bookmarkTypeIn = undefined;\n };\n /**\n * Clones the bookmark element box.\n * @param element - book mark element\n */\n /**\n * @private\n */\n BookmarkElementBox.prototype.clone = function () {\n var span = new BookmarkElementBox(this.bookmarkType);\n span.name = this.name;\n span.reference = this.reference;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n return BookmarkElementBox;\n}(ElementBox));\nexport { BookmarkElementBox };\n/**\n * @private\n */\nvar ImageElementBox = /** @class */ (function (_super) {\n __extends(ImageElementBox, _super);\n function ImageElementBox(isInlineImage) {\n var _this = _super.call(this) || this;\n _this.imageStr = '';\n _this.imgElement = undefined;\n _this.isInlineImageIn = true;\n /**\n * @private\n */\n _this.isMetaFile = false;\n _this.isInlineImageIn = isInlineImage;\n return _this;\n }\n Object.defineProperty(ImageElementBox.prototype, \"isInlineImage\", {\n /**\n * @private\n */\n get: function () {\n return this.isInlineImageIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"element\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.imgElement)) {\n this.imgElement = document.createElement('img');\n }\n return this.imgElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"imageString\", {\n /**\n * @private\n */\n get: function () {\n return this.imageStr;\n },\n /**\n * @private\n */\n set: function (value) {\n this.imageStr = value;\n if (!isNullOrUndefined(value)) {\n this.element.src = this.imageStr;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ImageElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.clone = function () {\n var image = new ImageElementBox(this.isInlineImage);\n image.characterFormat.copyFormat(this.characterFormat);\n image.imageString = this.imageString;\n image.isMetaFile = this.isMetaFile;\n image.width = this.width;\n image.height = this.height;\n if (this.margin) {\n image.margin = this.margin.clone();\n }\n return image;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.destroy = function () {\n this.imgElement = undefined;\n this.imageString = undefined;\n this.isInlineImageIn = undefined;\n _super.prototype.destroy.call(this);\n };\n return ImageElementBox;\n}(ElementBox));\nexport { ImageElementBox };\n/**\n * @private\n */\nvar ListTextElementBox = /** @class */ (function (_super) {\n __extends(ListTextElementBox, _super);\n function ListTextElementBox(listLevel, isListFollowCharacter) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.isFollowCharacter = false;\n _this.listLevel = listLevel;\n _this.isFollowCharacter = isListFollowCharacter;\n return _this;\n }\n /**\n * @private\n */\n ListTextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.clone = function () {\n var list = new ListTextElementBox(this.listLevel, this.isFollowCharacter);\n list.text = this.text;\n list.baselineOffset = this.baselineOffset;\n if (this.margin) {\n list.margin = this.margin.clone();\n }\n list.width = this.width;\n list.height = this.height;\n return list;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return ListTextElementBox;\n}(ElementBox));\nexport { ListTextElementBox };\n/**\n * @private\n */\nvar Page = /** @class */ (function () {\n /**\n * Initialize the constructor of Page\n */\n function Page() {\n /**\n * Specifies the Bonding Rectangle\n * @private\n */\n this.boundingRectangle = new Rect(96, 96, 816, 1056);\n /**\n * @private\n */\n this.repeatHeaderRowTableWidget = false;\n /**\n * Specifies the bodyWidgets\n * @default []\n * @private\n */\n this.bodyWidgets = [];\n /**\n * @private\n */\n this.headerWidget = undefined;\n /**\n * @private\n */\n this.footerWidget = undefined;\n // let text: string = 'DocumentEditor';\n }\n Object.defineProperty(Page.prototype, \"index\", {\n /**\n * @private\n */\n get: function () {\n if (this.viewer) {\n return this.viewer.pages.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"previousPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index > 0) {\n return this.viewer.pages[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"nextPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index < this.viewer.pages.length - 1) {\n return this.viewer.pages[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"sectionIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.bodyWidgets.length > 0) {\n return this.bodyWidgets[0].index;\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Page.prototype.destroy = function () {\n if (this.headerWidget) {\n if (this.viewer && this.viewer.owner.editor) {\n this.viewer.owner.editor.removeFieldInWidget(this.headerWidget);\n }\n this.headerWidget.destroy();\n }\n this.headerWidget = undefined;\n if (this.footerWidget) {\n if (this.viewer && this.viewer.owner.editor) {\n this.viewer.owner.editor.removeFieldInWidget(this.footerWidget);\n }\n this.footerWidget.destroy();\n }\n this.footerWidget = undefined;\n this.bodyWidgets = [];\n this.bodyWidgets = undefined;\n if (!isNullOrUndefined(this.viewer)) {\n if (!isNullOrUndefined(this.viewer.pages)) {\n this.viewer.removePage(this);\n }\n }\n this.viewer = undefined;\n };\n return Page;\n}());\nexport { Page };\n/**\n * @private\n */\nvar WTableHolder = /** @class */ (function () {\n function WTableHolder() {\n this.tableColumns = [];\n /**\n * @private\n */\n this.tableWidth = 0;\n }\n Object.defineProperty(WTableHolder.prototype, \"columns\", {\n get: function () {\n return this.tableColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n WTableHolder.prototype.resetColumns = function () {\n for (var i = 0; i < this.tableColumns.length; i++) {\n this.tableColumns[i].destroy();\n }\n this.tableColumns = [];\n };\n /**\n * @private\n */\n WTableHolder.prototype.getPreviousSpannedCellWidth = function (previousColumnIndex, curColumnIndex) {\n var width = 0;\n for (var i = previousColumnIndex; i < curColumnIndex; i++) {\n width += this.tableColumns[i].preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.addColumns = function (currentColumnIndex, columnSpan, width, minWidth, offset) {\n for (var i = this.columns.length; i < columnSpan; i++) {\n this.columns.push(new WColumn());\n }\n var availableWidth = 0;\n for (var j = currentColumnIndex; j < columnSpan; j++) {\n availableWidth += this.columns[j].preferredWidth;\n }\n // If width to add is greater than preferred width, then preferred width will be increased.\n // In case of Gridspan > 1, only last grid column width will be updated.\n var gridSpan = columnSpan - currentColumnIndex;\n if (!(gridSpan > 1) && availableWidth < width) {\n this.columns[columnSpan - 1].preferredWidth += (width - availableWidth);\n }\n if (minWidth > this.columns[columnSpan - 1].minWidth) {\n this.columns[columnSpan - 1].minWidth = minWidth;\n }\n if (offset > this.columns[columnSpan - 1].endOffset) {\n this.columns[columnSpan - 1].endOffset = offset;\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.getTotalWidth = function () {\n var width = 0;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n width += column.preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.isFitColumns = function (containerWidth, preferredTableWidth, isAutoWidth) {\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth();\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = preferredTableWidth > totalColumnWidth ? totalColumnWidth : preferredTableWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n factor = isNaN(factor) ? 1 : factor;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n //column.PreferredWidth = factor * column.PreferredWidth;\n if (factor * column.preferredWidth < column.minWidth) {\n return false;\n }\n }\n return true;\n }\n else {\n return true;\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.fitColumns = function (containerWidth, preferredTableWidth, isAutoWidth) {\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth();\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = preferredTableWidth > totalColumnWidth ? totalColumnWidth : preferredTableWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n column.preferredWidth = factor * column.preferredWidth;\n }\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.getCellWidth = function (columnIndex, columnSpan, preferredTableWidth, isAutoWidth) {\n var width = 0;\n for (var i = 0; i < columnSpan; i++) {\n width += this.tableColumns[i + columnIndex].preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.validateColumnWidths = function () {\n for (var i = 0; i < this.columns.length; i++) {\n if (i === 0) {\n if (this.columns[i].preferredWidth !== this.columns[i].endOffset) {\n this.columns[i].preferredWidth = this.columns[i].endOffset;\n }\n }\n else {\n // If Previous column offset + current column preferred width is less than current column offset, \n // Then current column preferred width is set to current column offset - previous column offset.\n if (this.columns[i - 1].endOffset + this.columns[i].preferredWidth < this.columns[i].endOffset) {\n this.columns[i].preferredWidth = this.columns[i].endOffset - this.columns[i - 1].endOffset;\n }\n }\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.clone = function () {\n var tableHolder = new WTableHolder();\n tableHolder.tableWidth = this.tableWidth;\n for (var i = 0; i < this.columns.length; i++) {\n tableHolder.columns.push(this.columns[i].clone());\n }\n return tableHolder;\n };\n /**\n * @private\n */\n WTableHolder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.tableColumns)) {\n for (var i = 0; i < this.tableColumns.length; i++) {\n var column = this.tableColumns[i];\n column.destroy();\n }\n }\n this.tableColumns = [];\n this.tableColumns = undefined;\n this.tableWidth = undefined;\n };\n return WTableHolder;\n}());\nexport { WTableHolder };\n/**\n * @private\n */\nvar WColumn = /** @class */ (function () {\n function WColumn() {\n /**\n * @private\n */\n this.preferredWidth = 0;\n /**\n * @private\n */\n this.minWidth = 0;\n /**\n * @private\n */\n this.maxWidth = 0;\n /**\n * @private\n */\n this.endOffset = 0;\n }\n /**\n * @private\n */\n WColumn.prototype.clone = function () {\n var column = new WColumn();\n column.preferredWidth = this.preferredWidth;\n column.minWidth = this.minWidth;\n column.maxWidth = this.maxWidth;\n return column;\n };\n /**\n * @private\n */\n WColumn.prototype.destroy = function () {\n this.preferredWidth = undefined;\n this.minWidth = undefined;\n this.maxWidth = undefined;\n };\n return WColumn;\n}());\nexport { WColumn };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined, L10n, setCulture, classList } from '@syncfusion/ej2-base';\nimport { FieldElementBox } from './viewer/page';\nvar CONTEXTMENU_COPY = '_contextmenu_copy';\nvar CONTEXTMENU_CUT = '_contextmenu_cut';\nvar CONTEXTMENU_PASTE = '_contextmenu_paste';\nvar CONTEXTMENU_UPDATE_FIELD = '_contextmenu_update_field';\nvar CONTEXTMENU_EDIT_FIELD = '_contextmenu_edit_field';\nvar CONTEXTMENU_HYPERLINK = '_contextmenu_hyperlink';\nvar CONTEXTMENU_OPEN_HYPERLINK = '_contextmenu_open_hyperlink';\nvar CONTEXTMENU_COPY_HYPERLINK = '_contextmenu_copy_hyperlink';\nvar CONTEXTMENU_REMOVE_HYPERLINK = '_contextmenu_remove_hyperlink';\nvar CONTEXTMENU_EDIT_HYPERLINK = '_contextmenu_edit_hyperlink';\nvar CONTEXTMENU_FONT_DIALOG = '_contextmenu_font_dialog';\nvar CONTEXTMENU_PARAGRAPH = '_contextmenu_paragraph_dialog';\nvar CONTEXTMENU_TABLE = '_contextmenu_table_dialog';\nvar CONTEXTMENU_INSERT_TABLE = '_contextmenu_insert_table';\nvar CONTEXTMENU_DELETE_TABLE = '_contextmenu_delete_table';\nvar CONTEXTMENU_INSERT_ABOVE = '_contextmenu_insert_above';\nvar CONTEXTMENU_INSERT_BELOW = '_contextmenu_insert_below';\nvar CONTEXTMENU_INSERT_RIGHT = '_contextmenu_insert_right';\nvar CONTEXTMENU_INSERT_LEFT = '_contextmenu_insert_left';\nvar CONTEXTMENU_COMPLETE_DELETE_TABLE = '_contextmenu_complete_table_delete';\nvar CONTEXTMENU_DELETE_ROW = '_contextmenu_delete_row';\nvar CONTEXTMENU_DELETE_COLUMN = '_contextmenu_delete_column';\nvar CONTEXTMENU_MERGE_CELL = '_contextmenu_merge_cell';\nvar CONTEXTMENU_CONTINUE_NUMBERING = '_contextmenu_continue_numbering';\nvar CONTEXTMENU_RESTART_AT = '_contextmenu_restart_at';\n/**\n * Context Menu class\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * @private\n */\n function ContextMenu(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.contextMenuInstance = undefined;\n /**\n * Handles on context menu key pressed.\n * @param {PointerEvent} event\n * @private\n */\n this.onContextMenuInternal = function (event) {\n if (_this.showHideElements(_this.viewer.selection)) {\n _this.contextMenuInstance.open(event.y, event.x);\n event.preventDefault();\n }\n };\n this.viewer = viewer;\n var locale = new L10n('documenteditor', this.viewer.owner.defaultLocale);\n locale.setLocale(this.viewer.owner.locale);\n setCulture(this.viewer.owner.locale);\n this.initContextMenu(locale);\n }\n /**\n * Gets module name.\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'ContextMenu';\n };\n /**\n * Initialize context menu.\n * @param localValue Localize value.\n * @private\n */\n // tslint:disable:max-func-body-length\n ContextMenu.prototype.initContextMenu = function (localValue) {\n var _this = this;\n var id = this.viewer.owner.element.id;\n this.contextMenu = document.createElement('div');\n this.contextMenu.id = this.viewer.owner.containerId + 'e-de-contextmenu';\n document.body.appendChild(this.contextMenu);\n var ul = document.createElement('ul');\n ul.style.width = 'auto';\n ul.id = this.viewer.owner.containerId + 'e-de-contextmenu-list';\n ul.style.listStyle = 'none';\n ul.style.margin = '0px';\n ul.style.padding = '0px';\n ul.style.maxHeight = 'auto';\n ul.oncontextmenu = this.disableBrowserContextmenu;\n this.contextMenu.appendChild(ul);\n var menuItems = [\n {\n text: localValue.getConstant('Cut'),\n iconCss: 'e-icons e-de-cut',\n id: id + CONTEXTMENU_CUT\n },\n {\n text: localValue.getConstant('Copy'),\n iconCss: 'e-icons e-de-copy',\n id: id + CONTEXTMENU_COPY\n },\n {\n text: localValue.getConstant('Paste'),\n iconCss: 'e-icons e-de-paste',\n id: id + CONTEXTMENU_PASTE\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Update Field'),\n iconCss: 'e-icons e-de-update_field',\n id: id + CONTEXTMENU_UPDATE_FIELD\n },\n {\n text: localValue.getConstant('Edit Field'),\n iconCss: 'e-icons e-de-edit_field',\n id: id + CONTEXTMENU_EDIT_FIELD\n },\n {\n text: localValue.getConstant('Continue Numbering'),\n iconCss: 'e-icons e-de-continue-numbering',\n id: id + CONTEXTMENU_CONTINUE_NUMBERING\n },\n {\n text: localValue.getConstant('Restart At') + ' 1',\n iconCss: 'e-icons e-de-restart-at',\n id: id + CONTEXTMENU_RESTART_AT\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Hyperlink'),\n iconCss: 'e-icons e-de-insertlink',\n id: id + CONTEXTMENU_HYPERLINK\n },\n {\n text: localValue.getConstant('Edit Hyperlink') + '...',\n iconCss: 'e-icons e-de-edit-hyperlink',\n id: id + CONTEXTMENU_EDIT_HYPERLINK\n },\n {\n text: localValue.getConstant('Open Hyperlink'),\n iconCss: 'e-icons e-de-open-hyperlink',\n id: id + CONTEXTMENU_OPEN_HYPERLINK\n },\n {\n text: localValue.getConstant('Copy Hyperlink'),\n iconCss: 'e-icons e-de-copy-hyperlink',\n id: id + CONTEXTMENU_COPY_HYPERLINK\n },\n {\n text: localValue.getConstant('Remove Hyperlink'),\n iconCss: 'e-icons e-de-remove-hyperlink',\n id: id + CONTEXTMENU_REMOVE_HYPERLINK\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Font'),\n iconCss: 'e-icons e-de-fonts',\n id: id + CONTEXTMENU_FONT_DIALOG\n },\n {\n text: localValue.getConstant('Paragraph'),\n iconCss: 'e-icons e-de-paragraph',\n id: id + CONTEXTMENU_PARAGRAPH\n },\n {\n separator: true,\n },\n {\n text: localValue.getConstant('Table Properties'),\n id: id + CONTEXTMENU_TABLE,\n iconCss: 'e-icons e-de-table'\n },\n {\n text: localValue.getConstant('Merge Cells'),\n id: id + CONTEXTMENU_MERGE_CELL,\n iconCss: 'e-icons e-de-icon-table-merge-cells'\n },\n {\n text: localValue.getConstant('Insert'),\n id: id + CONTEXTMENU_INSERT_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Insert Above'),\n id: id + CONTEXTMENU_INSERT_ABOVE,\n iconCss: 'e-icons e-de-insertabove'\n },\n {\n text: localValue.getConstant('Insert Below'),\n id: id + CONTEXTMENU_INSERT_BELOW,\n iconCss: 'e-icons e-de-insertbelow'\n },\n {\n text: localValue.getConstant('Insert Left'),\n id: id + CONTEXTMENU_INSERT_LEFT,\n iconCss: 'e-icons e-de-insertleft'\n },\n {\n text: localValue.getConstant('Insert Right'),\n id: id + CONTEXTMENU_INSERT_RIGHT,\n iconCss: 'e-icons e-de-insertright'\n }\n ]\n },\n {\n text: localValue.getConstant('Delete'),\n id: id + CONTEXTMENU_DELETE_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Delete Table'),\n id: id + CONTEXTMENU_COMPLETE_DELETE_TABLE,\n iconCss: 'e-icons e-de-delete-table'\n },\n {\n text: localValue.getConstant('Delete Row'),\n id: id + CONTEXTMENU_DELETE_ROW,\n iconCss: 'e-icons e-de-deleterow'\n },\n {\n text: localValue.getConstant('Delete Column'),\n id: id + CONTEXTMENU_DELETE_COLUMN,\n iconCss: 'e-icons e-de-deletecolumn'\n }\n ]\n },\n ];\n var menuOptions = {\n target: '#' + this.viewer.owner.containerId + 'e-de-contextmenu',\n items: menuItems,\n select: function (args) {\n var item = args.element.id;\n _this.handleContextMenuItem(item);\n },\n };\n this.contextMenuInstance = new Menu(menuOptions, '#' + this.viewer.owner.containerId + 'e-de-contextmenu-list');\n this.contextMenuInstance.beforeOpen = function () {\n if (_this.viewer && _this.viewer.selection) {\n classList(_this.viewer.selection.caret, [], ['e-de-cursor-animation']);\n _this.viewer.selection.showCaret();\n }\n };\n this.contextMenuInstance.onClose = function () {\n if (_this.viewer && _this.viewer.selection) {\n classList(_this.viewer.selection.caret, ['e-de-cursor-animation'], []);\n _this.viewer.updateFocus();\n }\n };\n };\n /**\n * Disable browser context menu.\n */\n ContextMenu.prototype.disableBrowserContextmenu = function () {\n return false;\n };\n /**\n * Handles context menu items.\n * @param {string} item Specifies which item is selected.\n * @private\n */\n ContextMenu.prototype.handleContextMenuItem = function (item) {\n var id = this.viewer.owner.element.id;\n switch (item) {\n case id + CONTEXTMENU_COPY:\n this.viewer.selection.copy();\n break;\n case id + CONTEXTMENU_CUT:\n this.viewer.owner.editor.cut();\n break;\n case id + CONTEXTMENU_PASTE:\n if (!this.viewer.owner.isReadOnlyMode) {\n this.viewer.owner.editorModule.pasteInternal(undefined);\n }\n break;\n case id + CONTEXTMENU_UPDATE_FIELD:\n if (!this.viewer.owner.isReadOnlyMode) {\n this.viewer.owner.editorModule.updateToc();\n }\n break;\n case id + CONTEXTMENU_EDIT_FIELD:\n if (!this.viewer.owner.isReadOnlyMode) {\n this.viewer.owner.tableOfContentsDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_FONT_DIALOG:\n if (this.viewer.owner.fontDialogModule) {\n this.viewer.owner.fontDialogModule.showFontDialog();\n }\n break;\n case id + CONTEXTMENU_OPEN_HYPERLINK:\n this.viewer.selection.navigateHyperlink();\n break;\n case id + CONTEXTMENU_COPY_HYPERLINK:\n this.viewer.selection.copyHyperlink();\n break;\n case id + CONTEXTMENU_EDIT_HYPERLINK:\n case id + CONTEXTMENU_HYPERLINK:\n if (this.viewer.owner.hyperlinkDialogModule) {\n this.viewer.owner.hyperlinkDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_REMOVE_HYPERLINK:\n this.viewer.owner.editor.removeHyperlink();\n break;\n case id + CONTEXTMENU_PARAGRAPH:\n if (this.viewer.owner.paragraphDialogModule) {\n this.viewer.owner.paragraphDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_TABLE:\n this.viewer.owner.tablePropertiesDialogModule.show();\n break;\n case id + CONTEXTMENU_MERGE_CELL:\n this.viewer.owner.editor.mergeCells();\n break;\n case id + CONTEXTMENU_INSERT_ABOVE:\n this.viewer.owner.editor.insertRow(true);\n break;\n case id + CONTEXTMENU_INSERT_BELOW:\n this.viewer.owner.editor.insertRow(false);\n break;\n case id + CONTEXTMENU_INSERT_LEFT:\n this.viewer.owner.editor.insertColumn(true);\n break;\n case id + CONTEXTMENU_INSERT_RIGHT:\n this.viewer.owner.editor.insertColumn(false);\n break;\n case id + CONTEXTMENU_COMPLETE_DELETE_TABLE:\n this.viewer.owner.editor.deleteTable();\n break;\n case id + CONTEXTMENU_DELETE_ROW:\n this.viewer.owner.editor.deleteRow();\n break;\n case id + CONTEXTMENU_DELETE_COLUMN:\n this.viewer.owner.editor.deleteColumn();\n break;\n case id + CONTEXTMENU_CONTINUE_NUMBERING:\n this.viewer.owner.editorModule.applyContinueNumbering(this.viewer.selection);\n break;\n case id + CONTEXTMENU_RESTART_AT:\n this.viewer.owner.editorModule.applyRestartNumbering(this.viewer.selection);\n break;\n }\n };\n ContextMenu.prototype.showHideElements = function (selection) {\n var owner = this.viewer.owner;\n var id = owner.element.id;\n var copy = document.getElementById(id + CONTEXTMENU_COPY);\n var cut = document.getElementById(id + CONTEXTMENU_CUT);\n var paste = document.getElementById(id + CONTEXTMENU_PASTE);\n var updateField = document.getElementById(id + CONTEXTMENU_UPDATE_FIELD);\n var editField = document.getElementById(id + CONTEXTMENU_EDIT_FIELD);\n var font = document.getElementById(id + CONTEXTMENU_FONT_DIALOG);\n var paragraph = document.getElementById(id + CONTEXTMENU_PARAGRAPH);\n var tableProperties = document.getElementById(id + CONTEXTMENU_TABLE);\n var insertTable = document.getElementById(id + CONTEXTMENU_INSERT_TABLE);\n var deleteTable = document.getElementById(id + CONTEXTMENU_DELETE_TABLE);\n var mergeCells = document.getElementById(id + CONTEXTMENU_MERGE_CELL);\n var hyperlink = document.getElementById(id + CONTEXTMENU_HYPERLINK);\n var openHyperlink = document.getElementById(id + CONTEXTMENU_OPEN_HYPERLINK);\n var editHyperlink = document.getElementById(id + CONTEXTMENU_EDIT_HYPERLINK);\n var copyHyperlink = document.getElementById(id + CONTEXTMENU_COPY_HYPERLINK);\n var removeHyperlink = document.getElementById(id + CONTEXTMENU_REMOVE_HYPERLINK);\n var continueNumbering = document.getElementById(id + CONTEXTMENU_CONTINUE_NUMBERING);\n var restartAt = document.getElementById(id + CONTEXTMENU_RESTART_AT);\n cut.style.display = 'none';\n paste.style.display = 'none';\n paste.nextSibling.style.display = 'none';\n hyperlink.style.display = 'none';\n openHyperlink.style.display = 'none';\n copyHyperlink.style.display = 'none';\n editHyperlink.style.display = 'none';\n removeHyperlink.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n mergeCells.style.display = 'none';\n font.style.display = 'none';\n paragraph.style.display = 'none';\n paragraph.nextSibling.style.display = 'none';\n insertTable.style.display = 'none';\n deleteTable.style.display = 'none';\n tableProperties.style.display = 'none';\n updateField.style.display = 'none';\n editField.style.display = 'none';\n continueNumbering.style.display = 'none';\n restartAt.style.display = 'none';\n restartAt.nextSibling.style.display = 'none';\n if (isNullOrUndefined(selection)) {\n return false;\n }\n selection.hideToolTip();\n if (selection.isEmpty) {\n cut.classList.add('e-disabled');\n copy.classList.add('e-disabled');\n }\n else {\n cut.classList.remove('e-disabled');\n copy.classList.remove('e-disabled');\n }\n if (owner.isReadOnlyMode) {\n return true;\n }\n cut.style.display = 'block';\n paste.style.display = 'block';\n paste.nextSibling.style.display = 'block';\n insertTable.classList.add('e-blankicon');\n deleteTable.classList.add('e-blankicon');\n updateField.classList.add('e-blankicon');\n editField.classList.add('e-blankicon');\n if (owner.enableLocalPaste && !isNullOrUndefined(owner.editor.copiedData)) {\n paste.classList.remove('e-disabled');\n }\n else {\n paste.classList.add('e-disabled');\n }\n if (selection.contextType === 'TableOfContents') {\n updateField.style.display = 'block';\n editField.style.display = 'block';\n restartAt.nextSibling.style.display = 'block';\n }\n else {\n var start = selection.start;\n var end = selection.end;\n if (selection.contextType === 'List'\n && owner.editorModule.getListLevel(start.paragraph).listLevelPattern !== 'Bullet') {\n continueNumbering.style.display = 'block';\n restartAt.style.display = 'block';\n restartAt.nextSibling.style.display = 'block';\n }\n var isCellOrRowSelected = start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end));\n if (isCellOrRowSelected) {\n hyperlink.classList.add('e-disabled');\n }\n else {\n if (hyperlink.classList.contains('e-disabled')) {\n hyperlink.classList.remove('e-disabled');\n }\n }\n var field = selection.getHyperlinkField();\n if (field instanceof FieldElementBox && !selection.isImageField()) {\n openHyperlink.style.display = 'block';\n copyHyperlink.style.display = 'block';\n if (owner.hyperlinkDialogModule) {\n editHyperlink.style.display = 'block';\n }\n removeHyperlink.style.display = 'block';\n removeHyperlink.nextSibling.style.display = 'block';\n }\n else {\n if (owner.hyperlinkDialogModule) {\n hyperlink.style.display = 'block';\n }\n }\n }\n if (this.viewer.owner.selection.start.paragraph.isInsideTable\n && this.viewer.owner.selection.end.paragraph.isInsideTable) {\n paragraph.nextSibling.style.display = 'block';\n if (owner.tablePropertiesDialogModule) {\n tableProperties.style.display = 'block';\n }\n insertTable.style.display = 'block';\n deleteTable.style.display = 'block';\n if (this.viewer.owner.editor.canMergeCells()) {\n mergeCells.style.display = 'block';\n }\n }\n else {\n if (this.viewer.owner.fontDialogModule) {\n font.style.display = 'block';\n font.previousSibling.style.display = 'block';\n }\n if (this.viewer.owner.paragraphDialogModule) {\n paragraph.style.display = 'block';\n }\n }\n if (selection.contextType === 'Image') {\n font.style.display = 'none';\n paragraph.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n }\n return true;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ContextMenu.prototype.destroy = function () {\n if (this.contextMenuInstance) {\n this.contextMenuInstance.destroy();\n }\n if (this.contextMenu) {\n if (this.contextMenu.parentElement) {\n this.contextMenu.parentElement.removeChild(this.contextMenu);\n }\n this.contextMenu.innerHTML = '';\n }\n this.contextMenu = undefined;\n this.contextMenuInstance = undefined;\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WAbstractList = /** @class */ (function () {\n function WAbstractList() {\n this.abstractListIdIn = -1;\n this.levels = [];\n }\n Object.defineProperty(WAbstractList.prototype, \"abstractListId\", {\n get: function () {\n return this.abstractListIdIn;\n },\n set: function (abstractListId) {\n this.abstractListIdIn = abstractListId;\n },\n enumerable: true,\n configurable: true\n });\n WAbstractList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levels)) {\n for (var i = 0; i < this.levels.length; i++) {\n var listLevel = this.levels[i];\n listLevel.destroy();\n this.levels.splice(this.levels.indexOf(listLevel), 1);\n i--;\n }\n this.levels = [];\n }\n this.levels = undefined;\n };\n return WAbstractList;\n}());\nexport { WAbstractList };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { WAbstractList } from './abstract-list';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WListLevel = /** @class */ (function () {\n function WListLevel(node) {\n this.uniqueListLevel = undefined;\n this.paragraphFormat = undefined;\n this.characterFormat = undefined;\n if (node instanceof WAbstractList) {\n this.ownerBase = node;\n }\n else {\n this.ownerBase = node;\n }\n this.characterFormat = new WCharacterFormat(undefined);\n this.paragraphFormat = new WParagraphFormat(undefined);\n }\n Object.defineProperty(WListLevel.prototype, \"listLevelPattern\", {\n get: function () {\n return this.getPropertyValue('listLevelPattern');\n },\n set: function (listLevelPattern) {\n this.setPropertyValue('listLevelPattern', listLevelPattern);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"followCharacter\", {\n get: function () {\n return this.getPropertyValue('followCharacter');\n },\n set: function (followCharacter) {\n this.setPropertyValue('followCharacter', followCharacter);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"startAt\", {\n get: function () {\n return this.getPropertyValue('startAt');\n },\n set: function (startAt) {\n this.setPropertyValue('startAt', startAt);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"numberFormat\", {\n get: function () {\n return this.getPropertyValue('numberFormat');\n },\n set: function (numberFormat) {\n this.setPropertyValue('numberFormat', numberFormat);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"restartLevel\", {\n get: function () {\n return this.getPropertyValue('restartLevel');\n },\n set: function (restartLevel) {\n this.setPropertyValue('restartLevel', restartLevel);\n },\n enumerable: true,\n configurable: true\n });\n WListLevel.prototype.getPropertyValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListLevel) && this.uniqueListLevel.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListLevel.propertiesHash.get(propertyType);\n }\n return WListLevel.getPropertyDefaultValue(property);\n };\n WListLevel.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListLevel.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListLevel)) {\n this.initializeUniqueWListLevel(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListLevel.uniqueFormatType, property);\n if (this.uniqueListLevel.propertiesHash.containsKey(propertyType) &&\n // tslint:disable-next-line:max-line-length\n this.uniqueListLevel.propertiesHash.get(propertyType) === value) { //Do nothing, since no change in property value and return\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueListLevel = WListLevel.uniqueListLevels.updateUniqueFormat(this.uniqueListLevel, property, value);\n }\n };\n WListLevel.prototype.initializeUniqueWListLevel = function (property, propValue) {\n var uniqueListLevelTemp = new Dictionary();\n this.addUniqueWListLevel('listLevelPattern', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('startAt', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('followCharacter', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('numberFormat', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('restartLevel', property, propValue, uniqueListLevelTemp);\n // tslint:disable-next-line:max-line-length \n this.uniqueListLevel = WListLevel.uniqueListLevels.addUniqueFormat(uniqueListLevelTemp, WListLevel.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WListLevel.prototype.addUniqueWListLevel = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueCharFormatTemp.add(propertyType, WListLevel.getPropertyDefaultValue(property));\n }\n };\n WListLevel.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'listLevelPattern':\n value = 'Arabic';\n break;\n case 'startAt':\n value = 0;\n break;\n case 'followCharacter':\n value = 'Tab';\n break;\n case 'numberFormat':\n value = '';\n break;\n case 'restartLevel':\n value = 0;\n break;\n }\n return value;\n };\n WListLevel.prototype.destroy = function () {\n if (!isNullOrUndefined(this.characterFormat)) {\n this.characterFormat.destroy();\n }\n if (!isNullOrUndefined(this.paragraphFormat)) {\n this.paragraphFormat.destroy();\n }\n if (!isNullOrUndefined(this.uniqueListLevel)) {\n WListLevel.uniqueListLevels.remove(this.uniqueListLevel);\n }\n this.uniqueListLevel = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n };\n WListLevel.clear = function () {\n this.uniqueListLevels.clear();\n };\n WListLevel.dotBullet = '\\uf0b7';\n WListLevel.squareBullet = '\\uf0a7'; //Symbol font \\u25aa.\n WListLevel.arrowBullet = '\\u27a4';\n WListLevel.circleBullet = '\\uf06f' + '\\u0020';\n WListLevel.uniqueListLevels = new WUniqueFormats();\n WListLevel.uniqueFormatType = 9;\n return WListLevel;\n}());\nexport { WListLevel };\n","import { Dictionary } from '../../base/dictionary';\nimport { WListLevel } from '../list/list-level';\nimport { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WBorder } from '../format/index';\nimport { PageLayoutViewer } from './viewer';\nimport { LineWidget, Rect, Widget, Margin, ParagraphWidget, BodyWidget, TextElementBox, ElementBox, ListTextElementBox, TableCellWidget, TableRowWidget, TableWidget, FieldElementBox, BlockWidget, HeaderFooterWidget, BlockContainer, BookmarkElementBox, FieldTextElementBox, TabElementBox } from './page';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Layout = /** @class */ (function () {\n /**\n * viewer definition\n */\n function Layout(viewer) {\n /**\n * @private\n */\n this.allowLayout = true;\n /**\n * @private\n */\n this.isInitialLoad = true;\n this.fieldBegin = undefined;\n this.maxTextHeight = 0;\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.isFieldCode = false;\n this.viewer = viewer;\n }\n /**\n * @private\n */\n Layout.prototype.layout = function () {\n // Todo: Need to handle complete document layout(relayout).\n var page = this.viewer.pages[0];\n var body = page.bodyWidgets[0];\n };\n /**\n * Releases un-managed and - optionally - managed resources.\n */\n Layout.prototype.destroy = function () {\n this.viewer = undefined;\n this.value = undefined;\n this.allowLayout = undefined;\n this.isInitialLoad = undefined;\n this.fieldBegin = undefined;\n this.maxTextHeight = undefined;\n this.maxBaseline = undefined;\n this.maxTextBaseline = undefined;\n this.isFieldCode = undefined;\n };\n /**\n * Layouts the items\n * @private\n */\n Layout.prototype.layoutItems = function (sections) {\n var _this = this;\n var page;\n for (var i = 0; i < sections.length; i++) {\n var section = sections[i];\n page = this.viewer.createNewPage(section);\n this.addBodyWidget(this.viewer.clientActiveArea, section);\n if (this.viewer.pages.length > 1) {\n var pageIndex = 0;\n for (var i_1 = 0; i_1 < this.viewer.pages.length; i_1++) {\n var prevPage = this.viewer.pages[i_1];\n var prevSectionIndex = prevPage.sectionIndex;\n var index = section.index;\n if (prevSectionIndex > index || prevPage === page) {\n break;\n }\n pageIndex++;\n }\n if (pageIndex < this.viewer.pages.length - 1) {\n this.viewer.insertPage(pageIndex, page);\n }\n }\n this.layoutSection(section, 0, this.viewer);\n }\n this.updateFieldElements();\n setTimeout(function () {\n if (_this.viewer) {\n _this.viewer.updateScrollBars();\n _this.isInitialLoad = false;\n }\n });\n };\n /**\n * Layouts the items\n * @param section\n * @param viewer\n * @private\n */\n Layout.prototype.layoutSection = function (section, index, viewer, ownerWidget) {\n var block = section.firstChild;\n var nextBlock;\n do {\n this.viewer.updateClientAreaForBlock(block, true);\n nextBlock = this.layoutBlock(block, index);\n index = 0;\n this.viewer.updateClientAreaForBlock(block, false);\n block = nextBlock;\n } while (block);\n };\n /**\n * Layouts the header footer items\n * @param section\n * @param viewer\n * @private\n */\n Layout.prototype.layoutHeaderFooter = function (section, viewer, page) {\n //Header layout\n var headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, true);\n if (headerFooterWidget) {\n var header = headerFooterWidget.clone();\n header.page = page;\n viewer.updateHFClientArea(section.sectionFormat, true);\n page.headerWidget = this.layoutHeaderFooterItems(viewer, header);\n this.updateHeaderFooterToParent(header);\n }\n //Footer Layout\n headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, false);\n if (headerFooterWidget) {\n var footer = headerFooterWidget.clone();\n footer.page = page;\n viewer.updateHFClientArea(section.sectionFormat, false);\n page.footerWidget = this.layoutHeaderFooterItems(viewer, footer);\n this.updateHeaderFooterToParent(footer);\n }\n };\n /**\n * @private\n */\n Layout.prototype.updateHeaderFooterToParent = function (node) {\n var sectionIndex = node.page.sectionIndex;\n var typeIndex = this.viewer.getHeaderFooter(node.headerFooterType);\n var clone = node.clone();\n this.viewer.headersFooters[sectionIndex][typeIndex] = clone;\n for (var j = 0; j < clone.childWidgets.length; j++) {\n var child = clone.childWidgets[j];\n if (child instanceof TableWidget) {\n this.clearTableWidget(child, false, true);\n }\n }\n return clone;\n };\n Layout.prototype.linkFieldInHeaderFooter = function (widget) {\n var firstChild = widget.firstChild;\n do {\n if (firstChild instanceof ParagraphWidget) {\n this.linkFieldInParagraph(firstChild);\n }\n else {\n this.linkFieldInTable(firstChild);\n }\n //tslint:disable:no-conditional-assignment\n } while (firstChild = firstChild.nextWidget);\n };\n /**\n * @private\n */\n Layout.prototype.linkFieldInParagraph = function (widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FieldElementBox && element.fieldType !== 0) {\n element.linkFieldCharacter(this.viewer);\n }\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.linkFieldInTable = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var row = widget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (block instanceof ParagraphWidget) {\n this.linkFieldInParagraph(block);\n }\n else {\n this.linkFieldInTable(block);\n }\n }\n }\n }\n };\n /**\n * Layouts the header footer items.\n * @param viewer\n * @param hfModule\n * @private\n */\n Layout.prototype.layoutHeaderFooterItems = function (viewer, widget) {\n this.viewer.updateClientAreaLocation(widget, viewer.clientActiveArea);\n if (widget.childWidgets.length === 0) {\n var pargaraph = new ParagraphWidget();\n var line = new LineWidget(pargaraph);\n pargaraph.childWidgets.push(line);\n widget.childWidgets.push(pargaraph);\n pargaraph.containerWidget = widget;\n }\n this.linkFieldInHeaderFooter(widget);\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n var type = widget.headerFooterType;\n if (type === 'OddFooter' || type === 'EvenFooter' || type === 'FirstPageFooter') {\n this.shiftChildLocation(viewer.clientArea.y - viewer.clientActiveArea.y, widget);\n }\n return widget;\n };\n /**\n * Shifts the child location\n * @param shiftTop\n * @param bodyWidget\n */\n Layout.prototype.shiftChildLocation = function (shiftTop, bodyWidget) {\n var widgetTop = bodyWidget.y + shiftTop;\n var footerMaxHeight = bodyWidget.page.boundingRectangle.height - (bodyWidget.page.boundingRectangle.height / 100) * 40;\n widgetTop = Math.max(widgetTop, footerMaxHeight);\n shiftTop = widgetTop - bodyWidget.y;\n bodyWidget.y = widgetTop;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var childWidget = bodyWidget.childWidgets[i];\n if (childWidget instanceof ParagraphWidget) {\n childWidget.x = childWidget.x;\n childWidget.y = childWidget.y + shiftTop;\n }\n else {\n this.shiftChildLocationForTableWidget(childWidget, shiftTop);\n }\n }\n };\n /**\n * Shifts the child location for table widget.\n * @param tableWidget\n * @param shiftTop\n */\n Layout.prototype.shiftChildLocationForTableWidget = function (tableWidget, shiftTop) {\n tableWidget.y = tableWidget.y + shiftTop;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var childWidget = tableWidget.childWidgets[i];\n if (childWidget instanceof TableRowWidget) {\n this.shiftChildLocationForTableRowWidget(childWidget, shiftTop);\n }\n }\n };\n /**\n * Shifts the child location for table row widget.\n * @param rowWidget\n * @param shiftTop\n */\n Layout.prototype.shiftChildLocationForTableRowWidget = function (rowWidget, shiftTop) {\n rowWidget.y = rowWidget.y + shiftTop;\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n this.shiftChildLocationForTableCellWidget(rowWidget.childWidgets[i], shiftTop);\n }\n };\n /**\n * Shifts the child location for table cell widget.\n * @param cellWidget\n * @param shiftTop\n */\n Layout.prototype.shiftChildLocationForTableCellWidget = function (cellWidget, shiftTop) {\n cellWidget.y = cellWidget.y + shiftTop;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n cellWidget.childWidgets[i].x = cellWidget.childWidgets[i].x;\n cellWidget.childWidgets[i].y = cellWidget.childWidgets[i].y + shiftTop;\n }\n else {\n this.shiftChildLocationForTableWidget(cellWidget.childWidgets[i], shiftTop);\n }\n }\n };\n /**\n * Layouts specified block.\n * @param block\n * @private\n */\n Layout.prototype.layoutBlock = function (block, index, moveToLine) {\n var nextBlock;\n if (block instanceof ParagraphWidget) {\n nextBlock = this.layoutParagraph(block, index);\n }\n else {\n nextBlock = this.layoutTable(block, index);\n }\n return nextBlock.nextRenderedWidget;\n };\n /**\n * Adds paragraph widget.\n * @param area\n */\n Layout.prototype.addParagraphWidget = function (area, paragraphWidget) {\n var ownerParaWidget = undefined;\n if (paragraphWidget.isEmpty() && !isNullOrUndefined(paragraphWidget.paragraphFormat) &&\n (paragraphWidget.paragraphFormat.textAlignment === 'Center' || paragraphWidget.paragraphFormat.textAlignment === 'Right') &&\n paragraphWidget.paragraphFormat.listFormat.listId === -1) {\n var top_1 = 0;\n var bottom = 0;\n var width = this.viewer.textHelper.getParagraphMarkWidth(paragraphWidget.characterFormat);\n var left = area.x;\n if (paragraphWidget.paragraphFormat.textAlignment === 'Center') {\n left += (area.width - width) / 2;\n }\n else {\n left += area.width - width;\n }\n paragraphWidget.width = width;\n paragraphWidget.x = left;\n paragraphWidget.y = area.y;\n }\n else {\n paragraphWidget.width = area.width;\n paragraphWidget.x = area.x;\n paragraphWidget.y = area.y;\n }\n return paragraphWidget;\n };\n /**\n * Adds line widget.\n * @param paragraph\n */\n Layout.prototype.addLineWidget = function (paragraphWidget) {\n var line = undefined;\n line = new LineWidget(paragraphWidget);\n line.width = paragraphWidget.width;\n paragraphWidget.childWidgets.push(line);\n line.paragraph = paragraphWidget;\n return line;\n };\n /**\n * Layouts specified paragraph.\n * @private\n * @param paragraph\n */\n Layout.prototype.layoutParagraph = function (paragraph, lineIndex) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n this.layoutListItems(paragraph);\n if (paragraph.isEmpty()) {\n this.layoutEmptyLineWidget(paragraph, true);\n }\n else {\n var line = lineIndex < paragraph.childWidgets.length ?\n paragraph.childWidgets[lineIndex] : undefined;\n while (line instanceof LineWidget) {\n if (line.isFirstLine() && isNullOrUndefined(this.fieldBegin)) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)) {\n // tslint:disable-next-line:max-line-length\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n }\n line = this.layoutLine(line, 0);\n paragraph = line.paragraph;\n line = line.nextLine;\n }\n }\n this.updateWidgetToPage(this.viewer, paragraph);\n return paragraph;\n };\n Layout.prototype.clearLineMeasures = function () {\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.maxTextHeight = 0;\n };\n Layout.prototype.moveElementFromNextLine = function (line) {\n var nextLine = line.nextLine;\n while (nextLine instanceof LineWidget) {\n if (nextLine.children.length > 0) {\n var element = nextLine.children.splice(0, 1)[0];\n line.children.push(element);\n element.line = line;\n break;\n }\n else {\n if (nextLine.paragraph.childWidgets.length === 1) {\n nextLine.paragraph.destroy();\n }\n else {\n nextLine.destroy();\n }\n nextLine = line.nextLine;\n }\n }\n };\n Layout.prototype.layoutLine = function (line, count) {\n var paragraph = line.paragraph;\n if (line.children.length === 0) {\n this.moveElementFromNextLine(line);\n }\n var element = line.children[count];\n this.clearLineMeasures();\n while (element instanceof ElementBox) {\n this.layoutElement(element, paragraph);\n line = element.line;\n element = element.nextElement;\n }\n return line;\n };\n // tslint:disable:max-func-body-length\n Layout.prototype.layoutElement = function (element, paragraph) {\n var line = element.line;\n var text = '';\n var index = element.indexInOwner;\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0 && this.viewer.fields.indexOf(element) === -1) {\n this.viewer.fields.push(element);\n }\n this.layoutFieldCharacters(element);\n if (element.line.isLastLine() && isNullOrUndefined(element.nextNode) && !this.isFieldCode) {\n if (isNullOrUndefined(element.fieldSeparator)) {\n this.layoutEmptyLineWidget(paragraph, false, element.line);\n }\n this.moveToNextLine(line);\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n if (line.paragraph.lastChild === line && !isNullOrUndefined(line.nextLine) &&\n this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n }\n return;\n }\n if (element instanceof ListTextElementBox || this.isFieldCode || element instanceof BookmarkElementBox) {\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement)) {\n if (this.hasValidElement(line.paragraph)) {\n this.moveToNextLine(line);\n }\n else {\n this.layoutEmptyLineWidget(line.paragraph, false, line, false);\n }\n }\n return;\n }\n var width = element.width;\n if (element instanceof FieldTextElementBox) {\n text = this.viewer.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n }\n else {\n text = element.text;\n }\n }\n else if (element instanceof TextElementBox) {\n this.checkAndSplitTabOrLineBreakCharacter(element.text, element);\n text = element.text;\n }\n // Here field code width and height update need to skipped based on the hidden property.\n if (element instanceof TextElementBox) {\n width = this.viewer.textHelper.getTextSize(element, element.characterFormat);\n if (element.text === '\\t') {\n element.width = this.getTabWidth(paragraph, this.viewer, index, line, element);\n }\n }\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, line);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n if (element.previousElement) {\n this.cutClientWidth(element.previousElement);\n }\n }\n if (width < this.viewer.clientActiveArea.width || !this.viewer.textWrap) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n else if (!element.line.isLastLine() && isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n if (line.paragraph.lastChild === line && this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n }\n }\n else if (element instanceof TextElementBox) {\n if (element.text === '\\t') {\n var currentLine = element.line;\n this.addSplittedLineWidget(currentLine, currentLine.children.indexOf(element));\n this.moveToNextLine(currentLine);\n // Recalculates tab width based on new client active area X position\n element.width = this.getTabWidth(paragraph, this.viewer, index, line, element);\n this.addElementToLine(paragraph, element);\n }\n else {\n //Splits the text and arrange line by line, till end of text.\n do {\n line = element.line;\n this.splitTextForClientArea(line, element, element.text, element.width, element.characterFormat);\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n }\n else {\n do {\n line = element.line;\n this.splitElementForClientArea(paragraph, element);\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n if (text === '\\v' || text === '\\f') {\n var elementIndex = line.children.indexOf(element);\n if (elementIndex > -1) {\n this.addSplittedLineWidget(line, elementIndex);\n }\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement) || text === '\\v' || text === '\\f') {\n this.moveToNextLine(element.line);\n if (text === '\\v' && isNullOrUndefined(element.nextNode)) {\n this.layoutEmptyLineWidget(paragraph, true, line, true);\n }\n else if (text === '\\f') {\n if (isNullOrUndefined(element.nextNode)) {\n this.moveToNextPage(this.viewer, element.line, true);\n }\n else {\n this.moveToNextPage(this.viewer, element.line.nextLine, false);\n }\n }\n }\n };\n /**\n * Return true if paragraph has valid inline\n * @private\n */\n Layout.prototype.hasValidElement = function (paragraph) {\n var line = paragraph.firstChild;\n if (line && !isNullOrUndefined(this.viewer.selection)) {\n var elementBox = line.children[0];\n while (elementBox) {\n if (elementBox instanceof FieldElementBox) {\n elementBox = this.viewer.selection.getNextValidElementForField(elementBox);\n if (!elementBox.line.paragraph.equals(paragraph)) {\n return false;\n }\n }\n if (elementBox instanceof TextElementBox) {\n return true;\n }\n elementBox = elementBox.nextNode;\n }\n }\n return false;\n };\n Layout.prototype.updateFieldText = function (element) {\n // tslint:disable-next-line:max-line-length\n var text = this.viewer.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n this.viewer.textHelper.getTextSize(element, element.characterFormat);\n }\n };\n Layout.prototype.checkLineWidgetWithClientArea = function (line, element) {\n if (line !== element.line || element.line === line && isNullOrUndefined(element.nextElement)\n && !element.line.isLastLine()) {\n this.moveToNextLine(line);\n }\n if (element.line !== line && this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height &&\n this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, element.line);\n }\n else if (element.line === line && isNullOrUndefined(element.nextElement)\n && line.paragraph.lastChild === line && !line.isLastLine() && this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n };\n Layout.prototype.checkAndSplitTabOrLineBreakCharacter = function (text, element) {\n var char = ['\\t', '\\v', '\\f'];\n var index = HelperMethods.indexOfAny(text, char);\n if (index > -1) {\n var character = text[index];\n if ((character === '\\t' && text !== '\\t') || (character === '\\v' && text !== '\\v')\n || (character === '\\f' && text !== '\\f')) {\n this.splitByLineBreakOrTab(this.viewer, element, index, character);\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.moveFromNextPage = function (line) {\n var nextLine = line.nextLine;\n if (nextLine && line.paragraph.childWidgets.indexOf(nextLine) === -1) {\n nextLine.paragraph.childWidgets.splice(nextLine.indexInOwner, 1);\n line.paragraph.childWidgets.push(nextLine);\n nextLine.paragraph = line.paragraph;\n }\n };\n Layout.prototype.cutClientWidth = function (currentElement) {\n this.clearLineMeasures();\n var line = currentElement.line;\n var width = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n width += element.width;\n if (currentElement === element) {\n break;\n }\n }\n var splitCurrentWidget = this.viewer.clientActiveArea.width - width < 0;\n if (!splitCurrentWidget) {\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + width);\n if (currentElement.line.paragraph.paragraphFormat.textAlignment === 'Justify' &&\n currentElement instanceof TextElementBox) {\n this.splitTextElementWordByWord(currentElement);\n }\n if (isNullOrUndefined(currentElement.nextElement) && this.viewer.clientActiveArea.width > 0\n && !currentElement.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n }\n else if (currentElement.previousElement) {\n this.cutClientWidth(currentElement.previousElement);\n }\n return splitCurrentWidget;\n };\n Layout.prototype.layoutFieldCharacters = function (element) {\n if (element.fieldType === 0) {\n if (!this.isFieldCode && (!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n this.viewer.fieldStacks.push(element);\n this.isFieldCode = true;\n element.hasFieldEnd = true;\n }\n }\n else if (this.viewer.fieldStacks.length > 0) {\n if (element.fieldType === 2) {\n var field = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n if (field.fieldSeparator === element && (!isNullOrUndefined(field.fieldEnd) || field.hasFieldEnd)) {\n this.isFieldCode = false;\n }\n }\n else {\n var field = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n if (element === field.fieldEnd) {\n this.viewer.fieldStacks.pop();\n this.isFieldCode = false;\n }\n }\n }\n };\n /**\n * Layouts empty line widget.\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.layoutEmptyLineWidget = function (paragraph, isEmptyLine, line, isShiftEnter) {\n isShiftEnter = isNullOrUndefined(isShiftEnter) ? false : isShiftEnter;\n //Calculate line height and descent based on formatting defined in paragraph.\n var paragraphMarkSize = this.viewer.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var maxHeight = paragraphMarkSize.Height;\n var beforeSpacing = this.getBeforeSpacing(paragraph);\n var lineWidget;\n if (paragraph.childWidgets.length > 0 && !isShiftEnter) {\n lineWidget = paragraph.childWidgets[0];\n }\n else {\n lineWidget = isEmptyLine ? this.addLineWidget(paragraph) : line;\n }\n //isNullOrUndefined(this.viewer.currentHeaderFooter) && \n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < beforeSpacing + maxHeight\n && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, lineWidget);\n }\n //Gets line spacing.\n var lineSpacing = this.getLineSpacing(paragraph, maxHeight);\n var maxDescent = maxHeight - paragraphMarkSize.BaselineOffset;\n //Calculate the bottom position of current line - max height + line spacing.\n if (!isNaN(this.maxTextHeight)\n && maxHeight < this.maxTextHeight) {\n maxHeight = this.maxTextHeight;\n maxDescent = maxHeight - this.maxTextBaseline;\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var height = maxHeight;\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n else if (lineSpacing > topMargin + height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += HelperMethods.convertPointToPixel(paragraph.paragraphFormat.afterSpacing);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (element instanceof ListTextElementBox) {\n var textAlignment = paragraph.paragraphFormat.textAlignment;\n if (textAlignment === 'Right') { //Aligns the text as right justified.\n leftMargin = this.viewer.clientArea.width - element.width;\n }\n else if (textAlignment === 'Center') { //Aligns the text as center justified.\n leftMargin = (this.viewer.clientArea.width - element.width) / 2;\n }\n element.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n element.line = lineWidget;\n lineWidget.height = topMargin + height + bottomMargin;\n }\n }\n lineWidget.height = topMargin + height + bottomMargin;\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + lineWidget.height);\n //Clears the previous line elements from collection. \n };\n /**\n * @private\n */\n Layout.prototype.layoutListItems = function (paragraph) {\n if (!this.isFieldCode) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)\n && !isNullOrUndefined(this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId)) &&\n paragraph.paragraphFormat.listFormat.listLevelNumber >= 0\n && paragraph.paragraphFormat.listFormat.listLevelNumber < 9) {\n this.clearListElementBox(paragraph);\n this.layoutList(paragraph, this.viewer);\n }\n else if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId === -1) {\n this.clearListElementBox(paragraph);\n }\n }\n };\n /**\n * Layouts list.\n * @param viewer\n */\n Layout.prototype.layoutList = function (paragraph, viewer) {\n var list = viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n viewer.updateClientWidth(-HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n var currentListLevel = this.getListLevel(list, paragraph.paragraphFormat.listFormat.listLevelNumber);\n // if (isNullOrUndefined(currentListLevel)) {\n // return;\n // }\n var lineWidget = paragraph.childWidgets[0];\n if (isNullOrUndefined(lineWidget)) {\n lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n }\n var element = new ListTextElementBox(currentListLevel, false);\n element.line = lineWidget;\n if (currentListLevel.listLevelPattern === 'Bullet') {\n element.text = currentListLevel.numberFormat;\n }\n else {\n element.text = this.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n viewer.textHelper.updateTextSize(element, paragraph);\n var moveToNextPage;\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n moveToNextPage = true;\n }\n viewer.cutFromLeft(viewer.clientActiveArea.x + element.width);\n //Adds the text element to the line\n lineWidget.children.splice(0, 0, element);\n if (currentListLevel.followCharacter !== 'None') {\n element = new ListTextElementBox(currentListLevel, true);\n if (currentListLevel.followCharacter === 'Tab') {\n element.text = '\\t';\n var index = lineWidget.children.indexOf(element);\n element.width = this.getTabWidth(paragraph, viewer, index, lineWidget, undefined);\n }\n else {\n element.text = ' ';\n viewer.textHelper.updateTextSize(element, paragraph);\n }\n viewer.cutFromLeft(viewer.clientActiveArea.x + element.width);\n //Adds the tabSpace to the line\n lineWidget.children.splice(1, 0, element);\n element.line = lineWidget;\n }\n if (moveToNextPage) {\n this.moveToNextPage(this.viewer, lineWidget);\n this.cutClientWidth(element);\n return;\n }\n if (currentListLevel.followCharacter !== 'None') {\n viewer.updateClientWidth(HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n }\n };\n /**\n * Adds body widget.\n * @param area\n * @param section\n * @private\n */\n Layout.prototype.addBodyWidget = function (area, widget) {\n var bodyWidget;\n if (widget) {\n bodyWidget = widget;\n }\n else {\n bodyWidget = new BodyWidget();\n }\n bodyWidget.width = area.width;\n bodyWidget.x = area.x;\n bodyWidget.y = area.y;\n // this.addSectionInDictionary(this.viewer, section, bodyWidget);\n return bodyWidget;\n };\n /**\n * Adds list level.\n * @param abstractList\n */\n Layout.prototype.addListLevels = function (abstractList) {\n for (var i = abstractList.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractList);\n var val = i % 3;\n if (abstractList.levels[0].listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = val === 0 ? '\\uf0b7' : val === 1 ? '\\uf0a7' : '\\uf0d8';\n listLevel.characterFormat.fontFamily = listLevel.numberFormat === '\\uf0a7' || '\\uf0d8' ? 'Wingdings' : 'Symbol';\n }\n else {\n listLevel.listLevelPattern = this.getListLevelPattern(val);\n listLevel.numberFormat = '%' + (i + 1).toString() + '.';\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n listLevel.paragraphFormat = new WParagraphFormat(undefined);\n listLevel.paragraphFormat.leftIndent = 48 * (i + 1);\n listLevel.paragraphFormat.firstLineIndent = -24;\n abstractList.levels.push(listLevel);\n }\n };\n Layout.prototype.addSplittedLineWidget = function (lineWidget, elementIndex, splittedElementBox) {\n var paragraph = lineWidget.paragraph;\n var movedElementBox = [];\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n if (!isNullOrUndefined(splittedElementBox)) {\n movedElementBox.push(splittedElementBox);\n }\n var newLineWidget = undefined;\n //Move Next element box to temp collection\n for (var i = elementIndex + 1; i < lineWidget.children.length; i++) {\n movedElementBox.push(lineWidget.children[i]);\n }\n if (movedElementBox.length > 0) {\n if (lineIndex === paragraph.childWidgets.length - 1) {\n newLineWidget = new LineWidget(paragraph);\n }\n else {\n newLineWidget = paragraph.childWidgets[lineIndex + 1];\n }\n for (var j = 0; j < movedElementBox.length; j++) {\n movedElementBox[j].line = newLineWidget;\n }\n lineWidget.children.splice(elementIndex + 1, lineWidget.children.length - 1);\n newLineWidget.children = movedElementBox.concat(newLineWidget.children);\n if (paragraph.childWidgets.indexOf(newLineWidget) === -1) {\n paragraph.childWidgets.splice(lineIndex + 1, 0, newLineWidget);\n }\n }\n };\n /**\n * Adds element to line.\n * @param element\n */\n Layout.prototype.addElementToLine = function (paragraph, element) {\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n if (paragraph.paragraphFormat.textAlignment === 'Justify' && element instanceof TextElementBox) {\n this.splitTextElementWordByWord(element);\n }\n };\n /**\n * Splits element for client area.\n * @param element\n */\n Layout.prototype.splitElementForClientArea = function (paragraph, element) {\n var line = element.line;\n if (element.line.children.length > 0) {\n var previousElement = element.previousElement;\n var index = element.indexInOwner;\n // if line widget contain only single image element box need to skip this from splitting\n // else move element to next line\n if (element.line.children.length > 1) {\n if (previousElement && this.viewer.clientActiveArea.x !== this.viewer.clientArea.x) {\n index -= 1;\n }\n }\n this.addSplittedLineWidget(element.line, index);\n }\n };\n /**\n * Splits by word\n * @param elementBox\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitByWord = function (lineWidget, paragraph, elementBox, text, width, characterFormat) {\n var index = this.getSplitIndexByWord(this.viewer.clientActiveArea.width, text, width, characterFormat);\n if (index > 0 && index < elementBox.length) {\n var indexOf = lineWidget.children.indexOf(elementBox);\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElementBox = new TextElementBox();\n text = text.substring(index);\n splittedElementBox.text = text;\n if (text[0] === ' ') {\n var prevLength = text.length;\n text = HelperMethods.trimStart(text); //To trim white space at starting of the text.\n index += prevLength - text.length;\n }\n splittedElementBox.characterFormat.copyFormat(elementBox.characterFormat);\n splittedElementBox.width = this.viewer.textHelper.getWidth(splittedElementBox.text, characterFormat);\n elementBox.text = elementBox.text.substr(0, index);\n elementBox.width -= splittedElementBox.width;\n splittedElementBox.height = elementBox.height;\n splittedElementBox.baselineOffset = elementBox.baselineOffset;\n this.addSplittedLineWidget(lineWidget, indexOf, splittedElementBox);\n this.addElementToLine(paragraph, elementBox);\n if (elementBox.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n };\n /**\n * Splits by character.\n * @param textElement\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitByCharacter = function (lineWidget, textElement, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n // tslint:disable-next-line:max-line-length\n var index = this.getTextSplitIndexByCharacter(this.viewer.clientArea.width, this.viewer.clientActiveArea.width, text, width, characterFormat);\n var splitWidth = 0;\n if (index < textElement.length) {\n splitWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, index), characterFormat);\n text = text.substring(index);\n }\n if (splitWidth > this.viewer.clientActiveArea.width && textElement.indexInOwner > 0) {\n this.addSplittedLineWidget(lineWidget, textElement.indexInOwner - 1);\n return;\n }\n var indexOf = lineWidget.children.indexOf(textElement);\n if (index < textElement.length) {\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElement = new TextElementBox();\n splittedElement.text = text;\n textElement.text = textElement.text.substr(0, index);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.width = this.viewer.textHelper.getWidth(splittedElement.text, characterFormat);\n textElement.width -= splittedElement.width;\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n lineWidget.children.splice(textElement.indexInOwner + 1, 0, splittedElement);\n this.addSplittedLineWidget(lineWidget, indexOf);\n this.addElementToLine(paragraph, textElement);\n if (textElement.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n else {\n //Adds the last text element on inline to line elements collection. \n this.addSplittedLineWidget(lineWidget, indexOf);\n this.addElementToLine(paragraph, textElement);\n }\n };\n /**\n * Splits text element word by word.\n * @param textElement\n */\n Layout.prototype.splitTextElementWordByWord = function (textElement) {\n var lineWidget = textElement.line;\n var indexOf = lineWidget.children.indexOf(textElement);\n var text = textElement.text;\n var format;\n var characterUptoWs = text.trim().indexOf(' ');\n if (characterUptoWs >= 0) {\n lineWidget.children.splice(indexOf, 1);\n format = textElement.characterFormat;\n var fontSize = format.fontSize;\n var index = textElement.length - HelperMethods.trimStart(text).length; //Trim start\n while (index < textElement.length) {\n index = this.getTextIndexAfterSpace(text, index);\n if (index === 0 || index === textElement.length) {\n break;\n }\n if (index < textElement.length) {\n var splittedElement = new TextElementBox();\n var splittedText = text.substring(0, index);\n text = text.substring(index);\n if (text.substring(0, 1) === ' ') {\n // start of the text is trimmed and its length is reduced from text length. \n index += text.length - HelperMethods.trimStart(text).length;\n }\n splittedElement.text = splittedText;\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.line = lineWidget;\n splittedElement.width = this.viewer.textHelper.getWidth(splittedElement.text, format);\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n lineWidget.children.splice(indexOf, 0, splittedElement);\n textElement.text = text;\n textElement.width -= splittedElement.width;\n if (textElement.width === 0) {\n lineWidget.children.splice(lineWidget.children.indexOf(textElement), 1);\n }\n index = 0;\n indexOf++;\n }\n }\n textElement.text = text;\n lineWidget.children.splice(indexOf, 0, textElement);\n }\n };\n /**\n * Splits text for client area.\n * @param element\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitTextForClientArea = function (lineWidget, element, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n var isSplitByWord = true;\n var index = -1;\n if (!(text.substring(0, 1) === ' ')) {\n var textWidth = width;\n var characterUptoWS = 0;\n characterUptoWS = HelperMethods.trimEnd(text).indexOf(' ') + 1;\n index = characterUptoWS;\n //Checks whether text not starts with white space. If starts with white space, no need to check previous text blocks.\n if (index > 0) {\n textWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, index), characterFormat);\n }\n if (this.viewer.clientActiveArea.width < textWidth) {\n //Check and split the previous text elements to next line. \n isSplitByWord = this.checkPreviousElement(lineWidget, lineWidget.children.indexOf(element), characterFormat);\n if (isSplitByWord) {\n //lineWidget = paragraph.childWidgets[paragraph.childWidgets.indexOf(lineWidget) + 1] as LineWidget;\n //isSplitByWord = textWidth <= this.viewer.clientActiveArea.width;\n return;\n }\n }\n }\n else {\n index = 1;\n }\n if (width <= this.viewer.clientActiveArea.width) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n }\n else if (isSplitByWord && (index > 0 || text.indexOf(' ') !== -1)) {\n this.splitByWord(lineWidget, paragraph, element, text, width, characterFormat);\n }\n else {\n this.splitByCharacter(lineWidget, element, text, width, characterFormat);\n }\n };\n /**\n * Handle tab or line break character splitting\n * @param {LayoutViewer} viewer\n * @param {TextElementBox} span\n * @param {number} index\n * @param {string} spiltBy\n * @private\n */\n Layout.prototype.splitByLineBreakOrTab = function (viewer, span, index, spiltBy) {\n // Splits tab character to separate SpanAdv\n var inlineIndex = span.line.children.indexOf(span);\n var value = span.text;\n var remainder = value.substring(index);\n var newSpan = spiltBy === '\\t' ? new TabElementBox() : new TextElementBox();\n newSpan.line = span.line;\n newSpan.characterFormat.copyFormat(span.characterFormat);\n span.line.children.splice(inlineIndex + 1, 0, newSpan);\n if (index > 0 && remainder.length === 1) {\n newSpan.text = value.substring(index);\n span.text = value.substring(0, index);\n }\n else if (index > 0) {\n newSpan.text = spiltBy;\n var newText = new TextElementBox();\n newText.line = span.line;\n newText.text = value.substring(index + 1);\n newText.characterFormat.copyFormat(span.characterFormat);\n span.line.children.splice(inlineIndex + 2, 0, newText);\n span.text = value.substring(0, index);\n }\n else if (remainder !== '') {\n newSpan.text = value.substring(index + 1);\n span.text = spiltBy;\n }\n };\n /**\n * Moves to next line.\n */\n Layout.prototype.moveToNextLine = function (line) {\n var paragraph = line.paragraph;\n var paraFormat = paragraph.paragraphFormat;\n var isParagraphStart = line.isFirstLine();\n var isParagraphEnd = line.isLastLine();\n var height = 0;\n var maxDescent = 0;\n var afterSpacing = 0;\n var beforeSpacing = 0;\n var lineSpacing = 0;\n var firstLineIndent = 0;\n this.updateLineWidget(line);\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n //Updates before spacing at the top of Paragraph first line.\n if (isParagraphStart) {\n beforeSpacing = this.getBeforeSpacing(paragraph);\n firstLineIndent = HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n //Updates after spacing at the bottom of Paragraph last line.\n if (isParagraphEnd) {\n afterSpacing = HelperMethods.convertPointToPixel(paraFormat.afterSpacing);\n }\n if (isNaN(this.maxTextHeight)) {\n //Calculate line height and descent based on formatting defined in paragraph.\n var measurement = this.viewer.textHelper.measureText('a', paragraph.characterFormat);\n height = measurement.Height;\n maxDescent = height - measurement.BaselineOffset;\n }\n else {\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n }\n // Gets line spacing.\n lineSpacing = this.getLineSpacing(paragraph, height);\n if (paraFormat.lineSpacingType === 'Exactly'\n && lineSpacing < maxDescent + this.maxBaseline) {\n lineSpacing = maxDescent + this.maxBaseline;\n }\n var subWidth = 0;\n var whiteSpaceCount = 0;\n var textAlignment = paraFormat.textAlignment;\n //Calculates the sub width, for text alignments - Center, Right, Justify.\n if (textAlignment !== 'Left' && this.viewer.textWrap && !(textAlignment === 'Justify' && isParagraphEnd)) {\n // tslint:disable-next-line:max-line-length\n var getWidthAndSpace = this.getSubWidth(line, textAlignment === 'Justify', whiteSpaceCount, firstLineIndent);\n subWidth = getWidthAndSpace.subWidth;\n whiteSpaceCount = getWidthAndSpace.spaceCount;\n }\n var addSubWidth = false;\n var lineSpacingType = paraFormat.lineSpacingType;\n for (var i = 0; i < line.children.length; i++) {\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var elementBox = line.children[i];\n // tslint:disable-next-line:max-line-length\n var alignElements = this.alignLineElements(elementBox, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, i === line.children.length - 1);\n topMargin = alignElements.topMargin;\n bottomMargin = alignElements.bottomMargin;\n addSubWidth = alignElements.addSubWidth;\n whiteSpaceCount = alignElements.whiteSpaceCount;\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > height) {\n bottomMargin += lineSpacing - height;\n }\n else {\n topMargin += lineSpacing - height;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n else if (lineSpacing > topMargin + elementBox.height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += afterSpacing;\n if (i === 0) {\n line.height = topMargin + elementBox.height + bottomMargin;\n if (textAlignment === 'Right') {\n //Aligns the text as right justified.\n leftMargin = subWidth;\n }\n else if (textAlignment === 'Center') {\n //Aligns the text as center justified.\n leftMargin = subWidth / 2;\n }\n }\n elementBox.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n elementBox.line = line;\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + line.height);\n };\n Layout.prototype.updateLineWidget = function (line) {\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n if (this.maxTextHeight < element.height) {\n this.maxTextHeight = element.height;\n this.maxTextBaseline = element.baselineOffset;\n }\n if (this.maxBaseline < this.maxTextBaseline) {\n this.maxBaseline = this.maxTextBaseline;\n }\n }\n else if (this.maxBaseline < element.height) {\n this.maxBaseline = element.height;\n }\n }\n };\n /**\n * @param viewer\n */\n Layout.prototype.moveToNextPage = function (viewer, line, isPageBreak) {\n var paragraphWidget = line.paragraph;\n var index = 0;\n if (!isNullOrUndefined(line)) {\n index = paragraphWidget.childWidgets.indexOf(line);\n if (index > 0 || isPageBreak) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n }\n var nextBody = this.moveBlocksToNextPage(paragraphWidget);\n this.viewer.updateClientArea(nextBody.sectionFormat, nextBody.page);\n this.viewer.updateClientAreaForBlock(paragraphWidget, true);\n if (index > 0) {\n if (line.isLastLine() && isPageBreak) {\n return;\n }\n var nextParagraph = void 0;\n if (nextBody.firstChild instanceof ParagraphWidget && nextBody.firstChild.equals(paragraphWidget)) {\n nextParagraph = nextBody.firstChild;\n }\n else {\n nextParagraph = new ParagraphWidget();\n }\n nextParagraph = this.addParagraphWidget(this.viewer.clientActiveArea, nextParagraph);\n nextParagraph.index = paragraphWidget.index;\n var insertIndex = 0;\n for (var i = index; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n lineWidget.paragraph = nextParagraph;\n nextParagraph.childWidgets.splice(insertIndex, 0, lineWidget);\n lineWidget.paragraph = nextParagraph;\n insertIndex++;\n }\n nextParagraph.paragraphFormat = paragraphWidget.paragraphFormat;\n nextParagraph.characterFormat = paragraphWidget.characterFormat;\n paragraphWidget.childWidgets.splice(index);\n paragraphWidget = nextParagraph;\n }\n else if (!isPageBreak) {\n paragraphWidget.containerWidget.removeChild(paragraphWidget.indexInOwner);\n }\n if (!isPageBreak) {\n if (nextBody.childWidgets.indexOf(paragraphWidget) === -1) {\n nextBody.childWidgets.splice(0, 0, paragraphWidget);\n }\n paragraphWidget.containerWidget = nextBody;\n this.viewer.updateClientAreaLocation(paragraphWidget, this.viewer.clientActiveArea);\n }\n };\n /**\n * Aligns line elements\n * @param element\n * @param topMargin\n * @param bottomMargin\n * @param maxDescent\n * @param addSubWidth\n * @param subWidth\n * @param textAlignment\n * @param whiteSpaceCount\n * @param isLastElement\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.alignLineElements = function (element, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, isLastElement) {\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var textElement = element instanceof TextElementBox ? element : undefined;\n //Updates the text to base line offset.\n // tslint:disable-next-line:max-line-length\n var baselineOffset = element instanceof TextElementBox ? textElement.baselineOffset : element.baselineOffset;\n topMargin += this.maxBaseline - baselineOffset;\n bottomMargin += maxDescent - (element.height - baselineOffset);\n //Updates the text to base line offset.\n if (!isNullOrUndefined(textElement) && textAlignment === 'Justify' && whiteSpaceCount > 0) {\n //Aligns the text as Justified.\n var width = textElement.width;\n var text = textElement.text;\n if (!addSubWidth) {\n text = HelperMethods.trimStart(text); // trim start\n addSubWidth = (text.length > 0);\n }\n if (addSubWidth) {\n var spaceCount = text.length - HelperMethods.removeSpace(text).length;\n if (isLastElement) {\n spaceCount -= text.length - HelperMethods.trimEnd(text).length;\n }\n if (whiteSpaceCount < spaceCount) {\n width = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text, textElement.characterFormat);\n spaceCount = whiteSpaceCount;\n }\n if (spaceCount > 0) {\n textElement.width = width + subWidth * spaceCount;\n whiteSpaceCount -= spaceCount;\n }\n }\n }\n }\n else {\n addSubWidth = true;\n //Updates the Image/UIElement to base line offset.\n topMargin += this.maxBaseline - element.height;\n bottomMargin += maxDescent;\n }\n return { 'topMargin': topMargin, 'bottomMargin': bottomMargin, 'addSubWidth': addSubWidth, 'whiteSpaceCount': whiteSpaceCount };\n };\n /**\n * Updates widget to page.\n * @param viewer\n * @param block\n * @private\n */\n Layout.prototype.updateWidgetToPage = function (viewer, paragraphWidget) {\n if (paragraphWidget.isInsideTable) {\n var cellWidget = paragraphWidget.associatedCell;\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n // if (viewer instanceof PageLayoutViewer) {\n if (isNullOrUndefined(paragraphWidget.associatedCell) || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow)\n || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.rowFormat)) {\n return;\n }\n if (paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'Exactly') {\n cellWidget.height = HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height);\n }\n else {\n // tslint:disable-next-line:max-line-length\n if ([cellWidget].length <= 1 && paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'AtLeast') {\n cellWidget.height = Math.max(HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height), this.getCellContentHeight(cellWidget));\n }\n else {\n cellWidget.height = cellWidget.height + paragraphWidget.height;\n }\n }\n // } else {\n // cellWidget.height = cellWidget.height + paragraphWidget.height;\n // }\n // cellWidget.childWidgets.push(paragraphWidget);\n paragraphWidget.containerWidget = cellWidget;\n }\n else {\n if (!paragraphWidget.isEndsWithPageBreak) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n //Adds the paragraph widget to the Header Footer/ Body widget.\n // this.updateWidgetsToBody(paragraphWidget, viewer, paragraphWidget);\n //For canvas no need to render paragraph widget here. In case of div, need to render paragraph here.\n // tslint:disable-next-line:max-line-length \n // this.render.renderParagraphWidget((paragraphWidget.containerWidget as BodyWidget).page, paragraphWidget);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget) {\n if (!paragraphWidget.isInsideTable) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n if (this.viewer.owner.enableHeaderAndFooter && paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.shiftFooterChildLocation = function (widget, viewer) {\n var pageHeight = widget.page.bodyWidgets[0].sectionFormat.pageHeight;\n if (widget.headerFooterType.indexOf('Footer') !== -1) {\n var footerDistance = widget.page.bodyWidgets[0].sectionFormat.footerDistance;\n var height = HelperMethods.convertPointToPixel(pageHeight - footerDistance);\n var top_2;\n if (widget.y + widget.height > height) {\n top_2 = height - (widget.y + widget.height);\n }\n else if (widget.y + widget.height < height) {\n top_2 = (widget.y + widget.height) - height;\n }\n if (!isNullOrUndefined(top_2)) {\n top_2 = height - (widget.y + widget.height);\n this.shiftChildLocation(top_2, widget);\n viewer.clientActiveArea.y += top_2;\n }\n }\n };\n /**\n * Checks previous element.\n * @param characterFormat\n */\n Layout.prototype.checkPreviousElement = function (line, index, characterFormat) {\n var paragraph = line.paragraph;\n var isSplitByWord = false;\n var lastTextElement = 0;\n for (var i = index - 1; i >= 0; i--) {\n var textElement = line.children[i];\n if (textElement instanceof TextElementBox) {\n var text = textElement.text;\n lastTextElement = i;\n if (text.length > 0 && text[text.length - 1] === ' ') {\n if (i === index - 1) {\n this.addSplittedLineWidget(line, index - 1);\n return true;\n }\n isSplitByWord = true;\n break;\n }\n else if (text === '\\t') {\n return false;\n }\n else if (text.indexOf(' ') >= 0) {\n isSplitByWord = true;\n var index_1 = text.lastIndexOf(' ') + 1;\n //Splits the text element by space.\n var splittedElement = new TextElementBox();\n splittedElement.text = text.substr(index_1);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n textElement.text = text.substr(0, index_1);\n this.viewer.textHelper.getTextSize(splittedElement, characterFormat);\n textElement.width -= splittedElement.width;\n textElement.height = splittedElement.height;\n if (textElement.width === 0) {\n line.children.splice(i, 1);\n }\n //Adds the text element to the line\n line.children.splice(i + 1, 0, splittedElement);\n break;\n }\n }\n else if (!(textElement instanceof ListTextElementBox)) {\n //Handled for inline images/UIelements.\n lastTextElement = i;\n isSplitByWord = true;\n break;\n }\n }\n if (isSplitByWord) {\n lastTextElement++;\n if (lastTextElement < line.children.length) {\n var splitWidth = 0;\n for (var i = lastTextElement; i < line.children.length; i++) {\n splitWidth += line.children[i].width;\n this.addSplittedLineWidget(line, i - 1);\n i--;\n }\n this.viewer.updateClientWidth(splitWidth);\n }\n }\n return isSplitByWord;\n };\n /**\n * @private\n */\n Layout.prototype.clearListElementBox = function (paragraph) {\n if (paragraph.childWidgets.length === 0) {\n return;\n }\n var line = paragraph.childWidgets[0];\n if (isNullOrUndefined(line.children)) {\n return;\n }\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof ListTextElementBox) {\n line.children.splice(i, 1);\n i--;\n }\n else {\n break;\n }\n }\n };\n /**\n * Gets list number.\n * @param listFormat\n * @param document\n * @private\n */\n Layout.prototype.getListNumber = function (listFormat) {\n var list = this.viewer.getListById(listFormat.listId);\n var levelNumber = listFormat.listLevelNumber;\n var listLevel = this.getListLevel(list, listFormat.listLevelNumber);\n // tslint:disable-next-line:max-line-length\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[levelNumber] : undefined;\n // If LevelOverride exists and have either override list level or StartAtOverride, then only list numbering will be restarted.\n // tslint:disable-next-line:max-line-length\n // if (!isNullOrUndefined(levelOverride) && !(document.renderedLevelOverrides.indexOf(levelOverride) > -1) && isNullOrUndefined(levelOverride.overrideListLevel)) {\n // //Add List Override style\n // document.renderedLevelOverrides.push(list.levelOverrides.getItem(levelNumber) as WLevelOverride);\n // if (document.renderedLists.containsKey((list.wordDocument as WordDocument).getAbstractListById(list.abstractListId))) {\n // tslint:disable-next-line:max-line-length\n // let levels: Dictionary = document.renderedLists.get((list.wordDocument as WordDocument).getAbstractListById(list.abstractListId));\n // if (levels.containsKey(levelNumber)) {\n // levels.remove(levelNumber);\n // }\n // }\n // }\n this.updateListValues(list, levelNumber);\n return this.getListText(list, levelNumber, listLevel);\n };\n /**\n * Gets list start value\n * @param listLevelNumber\n * @param list\n * @private\n */\n Layout.prototype.getListStartValue = function (listLevelNumber, list) {\n // tslint:disable-next-line:max-line-length\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[listLevelNumber] : undefined;\n if (!isNullOrUndefined(levelOverride) && isNullOrUndefined(levelOverride.overrideListLevel)) {\n return levelOverride.startAt;\n }\n var listLevel = this.getListLevel(list, listLevelNumber);\n if (isNullOrUndefined(listLevel)) {\n return 0;\n }\n else {\n return listLevel.startAt;\n }\n };\n /**\n * Updates list values.\n * @param list\n * @param listLevelNumber\n * @param document\n */\n Layout.prototype.updateListValues = function (list, listLevelNumber) {\n if (!this.viewer.renderedLists.containsKey(this.viewer.getAbstractListById(list.abstractListId))) {\n var startVal = new Dictionary();\n this.viewer.renderedLists.add(this.viewer.getAbstractListById(list.abstractListId), startVal);\n var listLevel = this.getListLevel(list, listLevelNumber);\n for (var i = 0; i <= listLevelNumber; i++) {\n startVal.add(i, this.getListStartValue(i, list));\n }\n }\n else {\n // tslint:disable-next-line:max-line-length\n var levels = this.viewer.renderedLists.get(this.viewer.getAbstractListById(list.abstractListId));\n if (levels.containsKey(listLevelNumber)) {\n var startAt = levels.get(listLevelNumber);\n levels.set(listLevelNumber, startAt + 1);\n var levelNumber = listLevelNumber + 1;\n while (levelNumber < this.viewer.getAbstractListById(list.abstractListId).levels.length) {\n var listLevel = this.getListLevel(list, levelNumber);\n // if (!isNullOrUndefined(listLevel)) {\n if (levels.containsKey(levelNumber) && listLevel.restartLevel > listLevelNumber) {\n levels.remove(levelNumber);\n // if (document.renderedListLevels.indexOf(listLevel) > -1) {\n // document.renderedListLevels.pop();\n // }\n }\n // }\n levelNumber++;\n }\n }\n else {\n var levelNumber = listLevelNumber;\n while (!levels.containsKey(levelNumber - 1) && levelNumber > 0) {\n var listLevel = this.getListLevel(list, levelNumber - 1);\n // if (!isNullOrUndefined(listLevel)) {\n levels.add(levelNumber - 1, this.getListStartValue(levelNumber - 1, list));\n // if (document.renderedListLevels.indexOf(listLevel) !== -1) {\n // document.renderedListLevels.push(listLevel);\n // }\n // }\n levelNumber--;\n }\n var startAt = this.getListStartValue(listLevelNumber, list);\n levels.add(listLevelNumber, startAt);\n }\n }\n };\n /**\n * Gets list text\n * @param listAdv\n * @param listLevelNumber\n * @param currentListLevel\n * @param document\n */\n Layout.prototype.getListText = function (listAdv, listLevelNumber, currentListLevel) {\n var listText = currentListLevel.numberFormat;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.renderedLists.containsKey(this.viewer.getAbstractListById(listAdv.abstractListId))) {\n var levels = this.viewer.renderedLists.get(this.viewer.getAbstractListById(listAdv.abstractListId));\n var keys = levels.keys;\n for (var i = 0; i < keys.length; i++) {\n var levelNumber = keys[i];\n var levelKey = '%' + (levelNumber + 1).toString();\n var listLevel = this.getListLevel(listAdv, levelNumber);\n if (listText.match(levelKey)) {\n if (levelNumber > listLevelNumber) {\n return '';\n }\n else if (levels.containsKey(levelNumber) && !isNullOrUndefined(listLevel)) {\n listText = listText.replace(levelKey, this.getListTextListLevel(listLevel, levels.get(levelNumber)));\n }\n else {\n listText = listText.replace(levelKey, '0');\n }\n }\n }\n }\n return listText;\n };\n /**\n * Gets the roman letter.\n * @param number\n * @private\n */\n Layout.prototype.getAsLetter = function (number) {\n // if (number <= 0) {\n // return '';\n // }\n var quotient = number / 26;\n var remainder = number % 26;\n if (remainder === 0) {\n //If number denotes the factor of 26, then reduce quotient by 1 and set remainder as 26.\n remainder = 26;\n quotient--;\n }\n //Index of A char in the ASCII table. \n var letter = String.fromCharCode(65 - 1 + remainder);\n var listValue = '';\n while (quotient >= 0) {\n listValue = listValue + letter.toString();\n quotient--;\n }\n return listValue;\n };\n /**\n * Gets list text using list level pattern.\n * @param listLevel\n * @param listValue\n * @private\n */\n Layout.prototype.getListTextListLevel = function (listLevel, listValue) {\n switch (listLevel.listLevelPattern) {\n case 'UpRoman':\n return this.getAsRoman(listValue).toUpperCase();\n case 'LowRoman':\n return this.getAsRoman(listValue).toLowerCase();\n case 'UpLetter':\n return this.getAsLetter(listValue).toUpperCase();\n case 'LowLetter':\n return this.getAsLetter(listValue).toLowerCase();\n case 'Arabic':\n return (listValue).toString();\n case 'LeadingZero':\n return this.getAsLeadingZero(listValue);\n case 'Number':\n return (listValue).toString();\n case 'OrdinalText':\n return (listValue).toString();\n case 'Ordinal':\n return (listValue).toString();\n case 'FarEast':\n return (listValue).toString();\n case 'Special':\n return (listValue).toString();\n default:\n return '';\n }\n };\n /**\n * Generate roman number for the specified number.\n * @param number\n * @param magnitude\n * @param letter\n */\n Layout.prototype.generateNumber = function (number, magnitude, letter) {\n var numberstring = '';\n while (number >= magnitude) {\n number -= magnitude;\n numberstring += letter;\n this.value = number;\n }\n return numberstring.toString();\n };\n /**\n * Gets list value prefixed with zero, if less than 10\n * @param listValue\n */\n Layout.prototype.getAsLeadingZero = function (listValue) {\n if (listValue < 10) {\n return '0' + listValue.toString();\n }\n else {\n return listValue.toString();\n }\n };\n /**\n * Gets the roman number\n * @param number\n * @private\n */\n Layout.prototype.getAsRoman = function (number) {\n var retval = '';\n this.value = number;\n retval += this.generateNumber(this.value, 1000, 'M');\n retval += this.generateNumber(this.value, 900, 'CM');\n retval += this.generateNumber(this.value, 500, 'D');\n retval += this.generateNumber(this.value, 400, 'CD');\n retval += this.generateNumber(this.value, 100, 'C');\n retval += this.generateNumber(this.value, 90, 'XC');\n retval += this.generateNumber(this.value, 50, 'L');\n retval += this.generateNumber(this.value, 40, 'XL');\n retval += this.generateNumber(this.value, 10, 'X');\n retval += this.generateNumber(this.value, 9, 'IX');\n retval += this.generateNumber(this.value, 5, 'V');\n retval += this.generateNumber(this.value, 4, 'IV');\n retval += this.generateNumber(this.value, 1, 'I');\n return retval.toString();\n };\n /**\n * Gets the list level\n * @param list\n * @param listLevelNumber\n * @private\n */\n Layout.prototype.getListLevel = function (list, listLevelNumber) {\n if (!isNullOrUndefined(list)) {\n var abstractList = this.viewer.getAbstractListById(list.abstractListId);\n if (!isNullOrUndefined(list) && abstractList.levels.length <= listLevelNumber\n && listLevelNumber >= 0 && listLevelNumber < 9) {\n this.addListLevels(abstractList);\n }\n var levelOverrideAdv = undefined;\n var level = false;\n level = (!isNullOrUndefined(list.levelOverrides))\n && !isNullOrUndefined(((levelOverrideAdv = list.levelOverrides[listLevelNumber])))\n && (!isNullOrUndefined(levelOverrideAdv.overrideListLevel));\n if (level) {\n return levelOverrideAdv.overrideListLevel;\n }\n else if (!isNullOrUndefined(abstractList) && listLevelNumber >= 0 && listLevelNumber < abstractList.levels.length) {\n return abstractList.levels[listLevelNumber];\n }\n }\n return undefined;\n };\n /**\n * Gets tab width\n * @param paragraph\n * @param viewer\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getTabWidth = function (paragraph, viewer, index, lineWidget, element) {\n var fposition = 0;\n var isCustomTab = false;\n var tabs = paragraph.paragraphFormat.getUpdatedTabs();\n // Calculate hanging width\n if (viewer.clientActiveArea.x < viewer.clientArea.x) {\n return viewer.clientArea.x - viewer.clientActiveArea.x;\n }\n // Calculates tabwidth based on pageleftmargin and defaulttabwidth property\n var position = viewer.clientActiveArea.x -\n (viewer.clientArea.x - HelperMethods.convertPointToPixel(paragraph.paragraphFormat.leftIndent));\n var defaultTabWidth = HelperMethods.convertPointToPixel(viewer.defaultTabWidth);\n if (tabs.length === 0 && (position === 0 || defaultTabWidth === 0)) {\n return defaultTabWidth;\n }\n else {\n if (tabs.length > 0) {\n for (var i = 0; i < tabs.length; i++) {\n var tabPosition = HelperMethods.convertPointToPixel(tabs[i].position);\n if (tabs[i].tabJustification === 'Left' && position < tabPosition) {\n fposition = tabPosition;\n isCustomTab = true;\n if (!isNullOrUndefined(element)) {\n element.tabLeader = tabs[i].tabLeader;\n element.tabText = '';\n }\n break;\n }\n else if (tabs[i].tabJustification === 'Right' && position < tabPosition) {\n var tabwidth = tabPosition - position;\n var width = this.getRightTabWidth(index + 1, lineWidget, paragraph);\n if (width < tabwidth) {\n defaultTabWidth = tabwidth - width;\n }\n else {\n defaultTabWidth = 0;\n }\n fposition = position;\n isCustomTab = true;\n if (!isNullOrUndefined(element)) {\n element.tabLeader = tabs[i].tabLeader;\n element.tabText = '';\n }\n break;\n }\n }\n }\n if (!isCustomTab) {\n var diff = ((Math.round(position) * 100) % (Math.round(defaultTabWidth) * 100)) / 100;\n var cnt = (Math.round(position) - diff) / Math.round(defaultTabWidth);\n fposition = (cnt + 1) * defaultTabWidth;\n }\n return (fposition - position) > 0 ? fposition - position : defaultTabWidth;\n }\n };\n /**\n * Returns the right tab width\n * @param index - index of starting inline\n * @param lineWidget - current line widget\n * @param paragraph - current paragraph widget\n */\n Layout.prototype.getRightTabWidth = function (index, lineWidget, paragraph) {\n var width = 0;\n var isFieldCode = false;\n while (index < lineWidget.children.length) {\n var elementBox = lineWidget.children[index];\n if ((elementBox instanceof FieldElementBox) || (elementBox instanceof BookmarkElementBox) || isFieldCode) {\n if (elementBox instanceof FieldElementBox) {\n if (elementBox.fieldType === 0) {\n isFieldCode = true;\n }\n else if (elementBox.fieldType === 2) {\n isFieldCode = false;\n }\n }\n elementBox.width = 0;\n }\n else {\n this.viewer.textHelper.getTextSize(elementBox, elementBox.characterFormat);\n }\n if (elementBox instanceof TextElementBox && elementBox.text === '\\t') {\n return width;\n }\n else {\n width = width + elementBox.width;\n }\n index++;\n }\n return width;\n };\n /**\n * Gets split index by word.\n * @param clientActiveWidth\n * @param text\n * @param width\n * @param characterFormat\n */\n Layout.prototype.getSplitIndexByWord = function (clientActiveWidth, text, width, characterFormat) {\n var index = 0;\n var length = text.length;\n while (index < length) {\n var nextIndex = this.getTextIndexAfterSpace(text, index);\n if (nextIndex === 0 || nextIndex === length) {\n nextIndex = length - 1;\n }\n var splitWidth = width;\n if ((nextIndex < length - 1 || (nextIndex === length - 1 && text[nextIndex - 1] === ' ')) && index !== nextIndex) {\n splitWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, nextIndex), characterFormat);\n }\n if (splitWidth <= clientActiveWidth) {\n index = nextIndex;\n }\n else {\n if (index === 0 && text[0] === ' ') {\n index = this.getTextIndexAfterSpace(text, 0);\n }\n break;\n }\n }\n return index;\n };\n /**\n * Gets split index by character\n * @param totalClientWidth\n * @param clientActiveAreaWidth\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getTextSplitIndexByCharacter = function (totalClientWidth, clientActiveAreaWidth, text, width, characterFormat) {\n var length = text.length;\n for (var i = 0; i < length; i++) {\n var splitWidth = width;\n if (i + 1 < length) {\n splitWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, i + 1), characterFormat);\n }\n if (splitWidth > clientActiveAreaWidth) {\n if (i === 0 && splitWidth > totalClientWidth) {\n //Handle for cell/section having client width less than a character's width.\n return (length > 1 && text[1] === ' ') ? this.getTextIndexAfterSpace(text, 1) : 1;\n }\n return i;\n }\n }\n return 0;\n };\n /**\n * Gets sub width.\n * @param justify\n * @param spaceCount\n * @param firstLineIndent\n */\n Layout.prototype.getSubWidth = function (lineWidget, justify, spaceCount, firstLineIndent) {\n var width = 0;\n var trimSpace = true;\n var lineText = '';\n for (var i = lineWidget.children.length - 1; i >= 0; i--) {\n var element = lineWidget.children[i];\n if (element instanceof TextElementBox) {\n var elementText = element.text;\n lineText = elementText + lineText;\n if (trimSpace && (elementText.trim() !== '' || elementText === '\\t')) {\n if (HelperMethods.endsWith(elementText)) {\n width += this.viewer.textHelper.measureTextExcludingSpaceAtEnd(elementText, element.characterFormat);\n }\n else {\n width += element.width;\n }\n trimSpace = false;\n }\n else if (!trimSpace) {\n width += element.width;\n }\n }\n else {\n lineText = 'a' + lineText;\n trimSpace = false;\n width += element.width;\n }\n if (!justify) {\n width = Math.round(width);\n }\n }\n lineText = lineText.trim();\n spaceCount = lineText.length - HelperMethods.removeSpace(lineText).length;\n var subWidth = (this.viewer.clientArea.width - firstLineIndent - width);\n if (subWidth <= 0 || (spaceCount === 0 && justify)) {\n spaceCount = 0;\n subWidth = 0;\n }\n else if (justify) {\n subWidth = subWidth / spaceCount;\n }\n return { 'subWidth': subWidth, 'spaceCount': spaceCount };\n };\n /**\n * Gets before spacing.\n * @param paragraph\n * @private\n */\n Layout.prototype.getBeforeSpacing = function (paragraph) {\n var beforeSpacing = 0;\n if (paragraph.previousWidget instanceof ParagraphWidget) {\n if (paragraph.previousWidget.paragraphFormat.afterSpacing < paragraph.paragraphFormat.beforeSpacing) {\n // tslint:disable-next-line:max-line-length\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing - paragraph.previousWidget.paragraphFormat.afterSpacing;\n }\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n return beforeSpacing;\n };\n /**\n * Gets line spacing.\n * @param paragraph\n * @param maxHeight\n * @private\n */\n Layout.prototype.getLineSpacing = function (paragraph, maxHeight) {\n if (isNullOrUndefined(paragraph.paragraphFormat)) {\n return 0;\n }\n var lineSpacing = 0;\n switch (paragraph.paragraphFormat.lineSpacingType) {\n case 'AtLeast':\n case 'Exactly':\n lineSpacing = paragraph.paragraphFormat.lineSpacing;\n break;\n default:\n lineSpacing = paragraph.paragraphFormat.lineSpacing * maxHeight;\n break;\n }\n return lineSpacing;\n };\n /**\n * Checks whether current line is first line in a paragraph.\n * @param paragraph\n */\n Layout.prototype.isParagraphFirstLine = function (paragraph, line) {\n var widget = paragraph;\n if (isNullOrUndefined(widget.childWidgets) || widget.childWidgets.indexOf(line) === 0) {\n //If the line elements conatins the elements from previous paragraph then need to retun false.\n //Example scenario, Field start and field end in different paragraphs.\n if (line.children.length > 0 && !isNullOrUndefined(paragraph.previousWidget)\n && paragraph.previousWidget instanceof ParagraphWidget) {\n return line.paragraph.index !== paragraph.previousWidget.index;\n }\n return true; //If the line elements count is zero then also need to return true.\n }\n return false;\n };\n /**\n * Checks whether current line is last line in a paragraph.\n * @param paragraph\n */\n Layout.prototype.isParagraphLastLine = function (element) {\n var paragraph = element.line.paragraph;\n var lastLineWidget = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n var lastInline = lastLineWidget.children[lastLineWidget.children.length - 1];\n if (element === lastInline) {\n // tslint:disable-next-line:max-line-length \n return (lastInline instanceof FieldElementBox) || ((!(lastInline instanceof TextElementBox && lastInline.text === '\\v')));\n }\n return false;\n };\n /**\n * Gets text index after space.\n * @param text\n * @param startIndex\n */\n Layout.prototype.getTextIndexAfterSpace = function (text, startIndex) {\n var length = text.length;\n var index = 0;\n index = text.indexOf(' ', startIndex) + 1;\n var nextIndex = index;\n if (nextIndex === 0 || nextIndex === length) {\n return nextIndex;\n }\n while (text[nextIndex] === ' ') {\n nextIndex++;\n if (nextIndex === length) {\n break;\n }\n }\n return nextIndex;\n };\n //#region Table\n /**\n * @private\n */\n Layout.prototype.moveNextWidgetsToTable = function (tableWidget, rowWidgets, moveFromNext) {\n var currentRow = moveFromNext ? rowWidgets[rowWidgets.length - 2] : rowWidgets[rowWidgets.length - 1];\n var rowIndex = currentRow.indexInOwner;\n var currentTable = tableWidget[tableWidget.length - 1];\n if (moveFromNext) {\n rowIndex += 1;\n }\n var nextWidgets = currentRow.containerWidget.childWidgets.splice(rowIndex);\n for (var i = 0; i < nextWidgets.length; i++) {\n currentTable.childWidgets.push(nextWidgets[i]);\n nextWidgets[i].containerWidget = currentTable;\n }\n };\n /**\n * Adds table cell widget.\n * @param cell\n * @param area\n * @param maxCellMarginTop\n * @param maxCellMarginBottom\n */\n Layout.prototype.addTableCellWidget = function (cell, area, maxCellMarginTop, maxCellMarginBottom) {\n //let tableCellWidget: TableCellWidget = new TableCellWidget(cell);\n var prevColumnIndex = 0;\n var cellspace = 0;\n var left = 0;\n var top = maxCellMarginTop;\n var right = 0;\n var bottom = maxCellMarginBottom;\n if (!isNullOrUndefined(cell.cellFormat)) {\n if (cell.cellFormat.containsMargins()) {\n // tslint:disable-next-line:max-line-length\n left = isNullOrUndefined(cell.cellFormat.leftMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.leftMargin);\n right = isNullOrUndefined(cell.cellFormat.rightMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.rightMargin);\n }\n else {\n left = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin);\n right = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin);\n }\n }\n cell.margin = new Margin(left, top, right, bottom);\n cell.width = HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n if (!isNullOrUndefined(cell.previousWidget)) {\n // tslint:disable-next-line:max-line-length\n prevColumnIndex = cell.previousWidget.columnIndex + cell.previousWidget.cellFormat.columnSpan;\n }\n // tslint:disable-next-line:max-line-length\n cellspace = !isNullOrUndefined(cell.ownerTable) && !isNullOrUndefined(cell.ownerTable.tableFormat) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) : 0;\n var prevSpannedCellWidth = 0;\n if (prevColumnIndex < cell.columnIndex) {\n // tslint:disable-next-line:max-line-length\n prevSpannedCellWidth = HelperMethods.convertPointToPixel(cell.ownerTable.tableHolder.getPreviousSpannedCellWidth(prevColumnIndex, cell.columnIndex));\n if (prevColumnIndex === 0) {\n prevSpannedCellWidth = prevSpannedCellWidth - cellspace / 2;\n }\n }\n cell.x = area.x + prevSpannedCellWidth + cell.margin.left;\n cell.y = area.y + cell.margin.top + cellspace;\n cell.width = cell.width - cell.margin.left - cell.margin.right;\n if (cellspace > 0) {\n cell.x += cellspace;\n if (cell.ownerTable.tableHolder.columns.length === 1) {\n cell.width -= cellspace * 2;\n }\n else if (cell.columnIndex === 0 || cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1) {\n cell.width -= ((cellspace * 2) - cellspace / 2);\n }\n else {\n cell.width -= cellspace;\n }\n }\n // update the margins values respect to layouting of borders.\n // tslint:disable-next-line:max-line-length\n //For normal table cells only left border is rendred. for last cell left and right border is rendred. this border widths are not included in margins.\n cell.leftBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellLeftBorder(cell).getLineWidth());\n cell.x += cell.leftBorderWidth;\n cell.width -= cell.leftBorderWidth;\n if (cellspace > 0 || cell.cellIndex === cell.ownerRow.childWidgets.length - 1) {\n cell.rightBorderWidth = TableCellWidget.getCellRightBorder(cell).getLineWidth();\n cell.width -= cell.rightBorderWidth;\n }\n //Add the border widths to respective margin side.\n cell.margin.left = cell.margin.left + cell.leftBorderWidth;\n cell.margin.right = cell.margin.right + cell.rightBorderWidth;\n //cell.ownerWidget = owner;\n return cell;\n };\n /**\n * Adds specified row widget to table.\n * @param viewer\n * @param tableRowWidget\n * @param row\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.addWidgetToTable = function (viewer, tableCollection, rowCollection, row, endRowWidget) {\n //Adds table row widget to owner table widget.\n var tableWidget = tableCollection[0];\n var index = tableWidget.childWidgets.length;\n var prevWidget = undefined;\n var rowWidgetIndex = rowCollection.indexOf(row);\n if (rowWidgetIndex > 0) {\n prevWidget = rowCollection[rowWidgetIndex - 1];\n // Need to update on this further\n }\n else if (row.previousRenderedWidget instanceof TableRowWidget &&\n row.previousRenderedWidget.ownerTable.equals(row.ownerTable)) {\n // Need to update on this further\n prevWidget = row.previousRenderedWidget;\n }\n if (!isNullOrUndefined(prevWidget)) {\n tableWidget = prevWidget.containerWidget;\n // index = tableWidget.childWidgets.length;\n index = tableWidget.childWidgets.indexOf(prevWidget) + 1;\n if (Math.round(row.y) !== Math.round(prevWidget.y + prevWidget.height)) {\n var prevIndex = tableCollection.indexOf(tableWidget);\n if (prevIndex + 1 >= tableCollection.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableCollection, true);\n }\n tableWidget = tableCollection[prevIndex + 1];\n index = tableWidget.childWidgets.length;\n }\n if (rowWidgetIndex > 0) {\n index = 0;\n }\n }\n this.updateRowHeightBySpannedCell(tableWidget, row, index);\n this.updateRowHeightByCellSpacing(tableCollection, row, viewer);\n //Remove widget from previous container after splitteing\n if (row.containerWidget && row.containerWidget !== tableWidget &&\n row.containerWidget.childWidgets.indexOf(row) !== -1) {\n row.containerWidget.childWidgets.splice(row.containerWidget.childWidgets.indexOf(row), 1);\n }\n if (tableWidget.childWidgets.indexOf(row) === -1) {\n tableWidget.childWidgets.splice(index, 0, row);\n }\n row.containerWidget = tableWidget;\n tableWidget.height = tableWidget.height + row.height;\n if (!isNullOrUndefined(tableWidget.containerWidget)\n && tableWidget.containerWidget.childWidgets.indexOf(tableWidget) >= 0 &&\n !(tableWidget.containerWidget instanceof HeaderFooterWidget)) {\n tableWidget.containerWidget.height += row.height;\n }\n this.updateHeightForRowWidget(viewer, false, tableCollection, rowCollection, row, false, endRowWidget);\n viewer.cutFromTop(row.y + row.height);\n };\n /**\n * Updates row height by spanned cell.\n * @param tableWidget\n * @param rowWidget\n * @param insertIndex\n * @param row\n * @private\n */\n Layout.prototype.updateRowHeightBySpannedCell = function (tableWidget, row, insertIndex) {\n var rowSpan = 1;\n if (tableWidget.childWidgets.length === 0 || insertIndex === 0) {\n this.updateRowHeight(row, row);\n return;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n this.updateSpannedRowCollection(rowSpan, row);\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n for (var i = 0; i < row.ownerTable.spannedRowCollection.length; i++) {\n if (row.ownerTable.spannedRowCollection.keys[i] === row.index) {\n // Back track to previous table row widgets and update it height if vertical merge ends with this row.\n for (var j = 0; j < insertIndex; j++) {\n var prevRowWidget = tableWidget.childWidgets[j];\n this.updateRowHeight(prevRowWidget, row);\n }\n row.ownerTable.spannedRowCollection.remove(row.ownerTable.spannedRowCollection.keys[i]);\n break;\n }\n }\n }\n };\n /**\n * Updates row height.\n * @param prevRowWidget\n * @param rowWidget\n * @param row\n */\n Layout.prototype.updateRowHeight = function (prevRowWidget, row) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < prevRowWidget.childWidgets.length; i++) {\n var cellWidget = prevRowWidget.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n //To update Row height- if row has row span value greater than 1, need to add it in spannedRowCollection \n this.updateSpannedRowCollection(rowSpan, row);\n if (rowIndex - cellWidget.rowIndex === rowSpan - 1) {\n var mergedCellHeight = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - row.y;\n if (row.height < mergedCellHeight) {\n row.height = mergedCellHeight;\n }\n }\n }\n };\n //if row has row span value greater than 1, need to add it in spannedRowCollection\n Layout.prototype.updateSpannedRowCollection = function (rowSpan, row) {\n if (rowSpan > 1 && !isNullOrUndefined(row.ownerTable)) {\n //Checks the rowspan is already exist in the list\n if (!row.ownerTable.spannedRowCollection.containsKey(row.index + rowSpan - 1)) {\n row.ownerTable.spannedRowCollection.add(row.index + rowSpan - 1, row.index);\n }\n }\n };\n /**\n * Updates row height by cell spacing\n * @param rowWidget\n * @param viewer\n * @param row\n */\n Layout.prototype.updateRowHeightByCellSpacing = function (tableCollection, row, viewer) {\n if (row.ownerTable.tableFormat.cellSpacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page. \n // In such case we have update the row height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n // tslint:disable-next-line:max-line-length\n if (tableCollection.length > 1 && row.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n row.height = row.height - HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) / 2;\n }\n }\n };\n /**\n * Checks whether row span is end.\n * @param row\n * @param viewer\n */\n Layout.prototype.isRowSpanEnd = function (row, viewer) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < viewer.splittedCellWidgets.length; i++) {\n var splittedCell = viewer.splittedCellWidgets[i];\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1) {\n return true;\n }\n }\n return false;\n };\n /**\n * Checks whether vertical merged cell to continue or not.\n * @param row\n * @private\n */\n Layout.prototype.isVerticalMergedCellContinue = function (row) {\n var colIndex = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (colIndex < cell.columnIndex) {\n return true;\n }\n colIndex += cell.cellFormat.columnSpan;\n }\n return colIndex < row.ownerTable.tableHolder.columns.length;\n };\n /**\n * Splits widgets.\n * @param tableRowWidget\n * @param viewer\n * @param splittedWidget\n * @param row\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitWidgets = function (tableRowWidget, viewer, tableCollection, rowCollection, splittedWidget, isLastRow) {\n if (this.isFirstLineFitForRow(viewer.clientArea.bottom, tableRowWidget) && tableRowWidget.childWidgets.length > 0) {\n splittedWidget = this.getSplittedWidgetForRow(viewer.clientArea.bottom, tableCollection, rowCollection, tableRowWidget);\n if (viewer.splittedCellWidgets.length > 0 || splittedWidget !== tableRowWidget) {\n if (isLastRow) {\n for (var i = 0; i < splittedWidget.childWidgets.length; i++) {\n var cell = splittedWidget.childWidgets[i];\n if (cell.rowIndex !== splittedWidget.index) {\n splittedWidget.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n }\n else {\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n return splittedWidget;\n };\n /**\n * Gets splitted widget for row.\n * @param bottom\n * @param tableRowWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getSplittedWidgetForRow = function (bottom, tableCollection, rowCollection, tableRowWidget) {\n var splittedWidget = undefined;\n var rowIndex = tableRowWidget.index;\n for (var i = 0; i < tableRowWidget.childWidgets.length; i++) {\n var cellWidget = tableRowWidget.childWidgets[i];\n var splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget);\n if (!isNullOrUndefined(splittedCell)) {\n if (splittedCell === cellWidget) {\n //Returns if the whole content of the row does not fit in current page.\n return tableRowWidget;\n }\n if (tableRowWidget.childWidgets.indexOf(splittedCell) !== -1) {\n tableRowWidget.childWidgets.splice(tableRowWidget.childWidgets.indexOf(splittedCell), 1);\n }\n if (i === 0 || tableRowWidget.height < cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom) {\n tableRowWidget.height = cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new TableRowWidget();\n splittedWidget.containerWidget = tableRowWidget.containerWidget;\n splittedWidget.index = tableRowWidget.index;\n splittedWidget.rowFormat = tableRowWidget.rowFormat;\n this.updateWidgetLocation(tableRowWidget, splittedWidget);\n splittedWidget.height = 0;\n rowCollection.push(splittedWidget);\n }\n var rowSpan = 1;\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1\n && splittedWidget.height < splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom) {\n splittedWidget.height = splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom;\n }\n splittedWidget.childWidgets.push(splittedCell);\n splittedCell.containerWidget = splittedWidget;\n }\n }\n return splittedWidget;\n };\n /**\n * Updates widget to table.\n * @param row\n * @param viewer\n */\n /* tslint:disable */\n Layout.prototype.updateWidgetsToTable = function (tableWidgets, rowWidgets, row) {\n var rowHeight = this.getRowHeight(row, [row]);\n var viewer = this.viewer;\n //initializing row properties with default values.\n var isHeader = row.rowFormat.isHeader;\n var isAllowBreakAcrossPages = row.rowFormat.allowBreakAcrossPages;\n var heightType = row.rowFormat.heightType;\n var cellSpacing = 0;\n var count = 0;\n var tableRowWidget = row;\n var moveRowToNextTable = false;\n if (row.ownerTable.continueHeader && !isHeader) {\n row.ownerTable.continueHeader = false;\n }\n var isLastRow = false;\n cellSpacing = (!isNullOrUndefined(row.ownerTable) && !isNullOrUndefined(row.ownerTable.tableFormat)) ? HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) : 0;\n while (count < rowWidgets.length) {\n count = rowWidgets.length;\n if (row.ownerTable.isInsideTable || (viewer.splittedCellWidgets.length === 0 && tableRowWidget.y + tableRowWidget.height + cellSpacing <= viewer.clientArea.bottom)) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n if (viewer.splittedCellWidgets.length > 0 && isNullOrUndefined(rowWidgets[rowWidgets.length - 1].nextRow)) {\n count--;\n isLastRow = true;\n }\n }\n else {\n //Split widget for next page\n if (viewer.splittedCellWidgets.length > 0 && tableRowWidget.y + tableRowWidget.height <= viewer.clientArea.bottom) {\n var isRowSpanEnd = this.isRowSpanEnd(row, viewer);\n if (!isRowSpanEnd) {\n if (this.isVerticalMergedCellContinue(row) && tableRowWidget.y == viewer.clientArea.y) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.indexInOwner - 1);\n }\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n continue;\n }\n }\n var splittedWidget = tableRowWidget;\n var tableWidget = tableWidgets[tableWidgets.length - 1];\n if (rowHeight + tableRowWidget.y > viewer.clientArea.bottom) {\n // tslint:disable-next-line:max-line-length\n if (!isAllowBreakAcrossPages || (isHeader && row.ownerTable.continueHeader) || (heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientArea.bottom)) {\n // tslint:disable-next-line:max-line-length\n if ((heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientActiveArea.height && isAllowBreakAcrossPages) || (heightType !== 'Exactly' && tableRowWidget.y === viewer.clientArea.y) || (heightType === 'Auto' && isAllowBreakAcrossPages)) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n }\n if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n count++;\n }\n if (isHeader && row.ownerTable.continueHeader) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = undefined;\n // if (viewer instanceof PageLayoutViewer) {\n pages = viewer.pages;\n // }\n if (!isNullOrUndefined(pages)) {\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n }\n else {\n if ((heightType === 'Auto' || heightType === 'AtLeast') && isAllowBreakAcrossPages) {\n // tslint:disable-next-line:max-line-length\n if (!(HelperMethods.convertPointToPixel(row.rowFormat.height) > viewer.clientArea.bottom) || tableRowWidget.y === viewer.clientArea.y) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n }\n }\n else if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n count++;\n }\n }\n }\n else {\n var isInsertSplittedWidgets = false;\n // Splitting handled for the merged cell with allowRowBreakAcross pages. \n if (this.isVerticalMergedCellContinue(row) && (isAllowBreakAcrossPages ||\n (isInsertSplittedWidgets = tableRowWidget.y == viewer.clientArea.y))) {\n if (isInsertSplittedWidgets) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n else {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n }\n }\n else if (isLastRow && !isAllowBreakAcrossPages) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n }\n }\n //Create New table for splitted widget\n if (!isNullOrUndefined(splittedWidget)) {\n if (splittedWidget !== tableRowWidget) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, tableRowWidget.nextRow);\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, tableRowWidget.nextRow);\n var index_2 = tableWidgets.indexOf(tableRowWidget.containerWidget);\n if (index_2 + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n tableRowWidget = splittedWidget;\n }\n else {\n if (row.index > 0) {\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, row);\n // Need to update on this further\n if (row.previousRenderedWidget instanceof TableRowWidget) {\n // Need to update on this further\n var prevWidget = row.previousRenderedWidget;\n if (HelperMethods.round(tableRowWidget.y, 2) === HelperMethods.round(prevWidget.y + prevWidget.height, 2)) {\n var prevIndex = tableWidgets.indexOf(prevWidget.containerWidget);\n if (prevIndex + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n moveRowToNextTable = true;\n count--;\n }\n tableWidget = tableWidgets[tableWidgets.length - 1];\n var prevBodyWidget = undefined;\n if (tableWidgets.length > 1) {\n //Get Previous Splitted Widget container\n prevBodyWidget = tableWidgets[tableWidgets.length - 2].containerWidget;\n }\n else {\n var previousBlock = row.ownerTable.previousRenderedWidget;\n prevBodyWidget = previousBlock.containerWidget;\n }\n var pageIndex = 0;\n if (!isNullOrUndefined(prevBodyWidget)) {\n pageIndex = viewer.pages.indexOf(prevBodyWidget.page);\n }\n var index = row.ownerTable.containerWidget.index;\n var bodyWidget = void 0;\n var block = void 0;\n if (moveRowToNextTable && tableWidgets.length === 1) {\n block = tableWidgets[tableWidgets.length - 1];\n }\n else {\n block = tableWidgets[tableWidgets.length - 2];\n }\n bodyWidget = this.moveBlocksToNextPage(block);\n var curretTable = tableWidgets[tableWidgets.length - 1];\n //Move Next RowWidge to next page\n if (moveRowToNextTable) {\n // tslint:disable-next-line:max-line-length\n if (row.index === 0 && curretTable.containerWidget && curretTable.containerWidget.childWidgets.indexOf(curretTable) !== -1) {\n curretTable.containerWidget.childWidgets.splice(curretTable.containerWidget.childWidgets.indexOf(curretTable), 1);\n }\n }\n if (bodyWidget.childWidgets.indexOf(curretTable) !== -1) {\n bodyWidget.childWidgets.splice(bodyWidget.childWidgets.indexOf(curretTable), 1);\n }\n bodyWidget.childWidgets.unshift(curretTable);\n curretTable.containerWidget = bodyWidget;\n if (moveRowToNextTable && row.index > 0 || rowWidgets.length > 1) {\n this.moveNextWidgetsToTable(tableWidgets, rowWidgets, !moveRowToNextTable);\n }\n moveRowToNextTable = false;\n if (row.ownerTable.header && tableRowWidget.height < viewer.clientArea.bottom) {\n // if (viewer instanceof PageLayoutViewer) {\n viewer.currentRenderingPage.repeatHeaderRowTableWidget = true;\n // }\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(row.ownerTable, true, tableWidgets);\n // tslint:disable-next-line:max-line-length\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y + row.ownerTable.headerHeight;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y + row.ownerTable.headerHeight - cellspace, splittedWidget);\n }\n else {\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(row.ownerTable, true, tableWidgets);\n // tslint:disable-next-line:max-line-length\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y - cellspace, splittedWidget);\n }\n }\n isLastRow = false;\n }\n if (isHeader && row.ownerTable.continueHeader) {\n row.ownerTable.header = true;\n row.ownerTable.headerHeight = rowHeight + row.ownerTable.headerHeight;\n }\n if (isHeader && !isNullOrUndefined(this.getHeader(row.ownerTable)) && row.index === this.getHeader(row.ownerTable).index) {\n var headerHeight = this.getHeaderHeight(row.ownerTable, row, rowWidgets);\n if (headerHeight > row.ownerTable.headerHeight || headerHeight > row.ownerTable.headerHeight) {\n row.ownerTable.headerHeight = headerHeight;\n }\n if (row.ownerTable.headerHeight > viewer.clientArea.height) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = viewer.pages;\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n if (tableWidgets.length > 2 && row.ownerTable.header && tableRowWidget.height < viewer.clientActiveArea.bottom &&\n !viewer.currentRenderingPage.repeatHeaderRowTableWidget) {\n viewer.currentRenderingPage.repeatHeaderRowTableWidget = true;\n }\n }\n };\n /* tslint:enable */\n /**\n * Gets header.\n * @param table\n * @private\n */\n Layout.prototype.getHeader = function (table) {\n var header = undefined;\n var flag = true;\n table = table.getSplitWidgets()[0];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.isHeader) {\n header = row;\n }\n else {\n flag = false;\n }\n if (!flag) {\n break;\n }\n }\n return header;\n };\n /**\n * Gets header height.\n * @param ownerTable\n * @param row\n */\n Layout.prototype.getHeaderHeight = function (ownerTable, row, rowCollection) {\n var height = 0;\n if (row.ownerTable.childWidgets.length > 0 && ownerTable.childWidgets[0].rowFormat.isHeader) {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row_1 = ownerTable.childWidgets[i];\n if (row_1.rowFormat.isHeader) {\n height = height + this.getRowHeight(row_1, rowCollection);\n }\n else {\n break;\n }\n }\n }\n return height;\n };\n /**\n * Updates widgets to row.\n * @param cell\n */\n Layout.prototype.updateWidgetToRow = function (cell) {\n var viewer = this.viewer;\n //Adds table cell widget to owner row widget.\n var rowWidget = cell.ownerRow;\n var cellLeft = rowWidget.x;\n if (rowWidget.childWidgets.length > 0) {\n var lastWidget = rowWidget.childWidgets[rowWidget.childWidgets.length - 1];\n cellLeft = lastWidget.x + lastWidget.width + lastWidget.margin.right;\n }\n // rowWidget.childWidgets.push(cell);\n cell.containerWidget = rowWidget;\n //If the row height is set as Atleast then height is set to atleast height for the first cell of the row.\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(cell.ownerRow) && cell.ownerRow.rowFormat.heightType !== 'Exactly' && HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height) > 0 && cell.cellIndex === 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height);\n }\n //Add condition not cell merged vertically.\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n if (rowWidget.height - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) < cellHeight) {\n rowWidget.height = cellHeight + HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n }\n }\n };\n /**\n * Updates height for row widget.\n * @param viewer\n * @param isUpdateVerticalPosition\n * @param rowWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.updateHeightForRowWidget = function (viewer, isUpdateVerticalPosition, tableCollection, rowCollection, rowWidget, isLayouted, endRowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellspacing = 0;\n var cellWidget = undefined;\n var childWidget = rowWidget.childWidgets[i];\n // if (childWidget instanceof TableCellWidget) {\n cellWidget = childWidget;\n // }\n var rowSpan = 1;\n rowSpan = cellWidget.cellFormat.rowSpan;\n cellspacing = HelperMethods.convertPointToPixel(cellWidget.ownerTable.tableFormat.cellSpacing);\n if (rowSpan > 1) {\n var currentRowWidgetIndex = rowWidget.containerWidget.childWidgets.indexOf(rowWidget);\n // tslint:disable-next-line:max-line-length\n var rowSpanWidgetEndIndex = currentRowWidgetIndex + rowSpan - 1 - (rowWidget.index - cellWidget.rowIndex);\n if (viewer.clientArea.bottom < cellWidget.y + cellWidget.height + cellWidget.margin.bottom\n || rowSpanWidgetEndIndex >= currentRowWidgetIndex + 1) {\n this.splitSpannedCellWidget(cellWidget, tableCollection, rowCollection, viewer);\n }\n var spanEndRowWidget = rowWidget;\n if (rowSpanWidgetEndIndex > 0) {\n if (rowSpanWidgetEndIndex < rowWidget.containerWidget.childWidgets.length) {\n var childWidget_1 = rowWidget.containerWidget.childWidgets[rowSpanWidgetEndIndex];\n if (childWidget_1 instanceof TableRowWidget) {\n spanEndRowWidget = childWidget_1;\n if (spanEndRowWidget === endRowWidget) {\n spanEndRowWidget = rowWidget;\n }\n }\n }\n else {\n // tslint:disable-next-line:max-line-length\n spanEndRowWidget = rowWidget.containerWidget.childWidgets[rowWidget.containerWidget.childWidgets.length - 1];\n }\n }\n if (cellWidget.y + cellWidget.height + cellWidget.margin.bottom < spanEndRowWidget.y + spanEndRowWidget.height) {\n cellWidget.height = spanEndRowWidget.y + spanEndRowWidget.height - cellWidget.y - cellWidget.margin.bottom;\n // tslint:disable-next-line:max-line-length\n }\n else if (isLayouted && spanEndRowWidget && (spanEndRowWidget.y !== 0 && spanEndRowWidget.height !== 0) && cellWidget.y + cellWidget.height + cellWidget.margin.bottom > spanEndRowWidget.y + spanEndRowWidget.height) {\n spanEndRowWidget.height = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - spanEndRowWidget.y;\n // tslint:disable-next-line:max-line-length\n //Update the next rowlayout widget location. Reason for the updation is previous row height is updated when cell height is greater. So already layouted next row location has to be updated again.\n // if (rowWidget === spanEndRowWidget && rowWidget.nextWidget instanceof TableRowWidget) {\n // let nextRow: TableRowWidget = rowWidget.nextWidget as TableRowWidget;\n // // Need to update on this further\n // // if (viewer.renderedElements.containsKey(nextRow)) {\n // // let nextWidget: TableRowWidget[] = viewer.renderedElements.get(nextRow) as TableRowWidget[];\n // // if (nextWidget.length > 0) {\n // // nextWidget[0].x = nextWidget[0].x;\n // // nextWidget[0].y = rowWidget.y + rowWidget.height;\n // // }\n // // }\n // }\n }\n }\n else {\n if (cellspacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page. \n // In such case we have update the cell height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n // tslint:disable-next-line:max-line-length\n if (tableCollection.length > 1 && rowWidget.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n cellspacing = cellspacing / 2;\n }\n }\n cellWidget.height = rowWidget.height - cellWidget.margin.top - cellWidget.margin.bottom - cellspacing;\n }\n this.updateHeightForCellWidget(viewer, tableCollection, rowCollection, cellWidget);\n var widget = rowWidget.containerWidget;\n while (widget.containerWidget instanceof Widget) {\n widget = widget.containerWidget;\n }\n var page = undefined;\n if (widget instanceof BodyWidget) {\n page = widget.page;\n }\n // tslint:disable-next-line:max-line-length\n if ((viewer instanceof PageLayoutViewer && viewer.visiblePages.indexOf(page) !== -1) || isUpdateVerticalPosition) {\n this.updateCellVerticalPosition(cellWidget, false, false);\n }\n //Renders the current table row contents, after relayout based on editing.\n // if (viewer instanceof PageLayoutViewer && (viewer as PageLayoutViewer).visiblePages.indexOf(page) !== -1) {\n // //Added proper undefined condition check for Asynchronous operation.\n // if (!isNullOrUndefined(rowWidget.tableRow) && !isNullOrUndefined(rowWidget.tableRow.rowFormat)) {\n // this.viewer.updateScrollBars();\n // //this.render.renderTableCellWidget(page, cellWidget);\n // }\n // }\n }\n };\n /**\n * Updates height for cell widget.\n * @param viewer\n * @param cellWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.updateHeightForCellWidget = function (viewer, tableWidget, rowCollection, cellWidget) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.updateHeightForTableWidget(tableWidget, rowCollection, cellWidget.childWidgets[i]);\n }\n }\n };\n /**\n * Gets row height.\n * @param row\n * @private\n */\n Layout.prototype.getRowHeight = function (row, rowCollection) {\n var height = 0;\n if (row.rowFormat.heightType === 'Exactly') {\n height = row.rowFormat.height;\n }\n else {\n for (var i = 0; i < rowCollection.length; i++) {\n if (rowCollection[i] instanceof TableRowWidget) {\n height = rowCollection[i].height + height;\n }\n }\n height = Math.max(height, row.rowFormat.height);\n }\n return height;\n };\n /**\n * splits spanned cell widget.\n * @param cellWidget\n * @param viewer\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitSpannedCellWidget = function (cellWidget, tableCollection, rowCollection, viewer) {\n var splittedCell = this.getSplittedWidget(viewer.clientArea.bottom, false, tableCollection, rowCollection, cellWidget);\n if (!isNullOrUndefined(splittedCell)) {\n //Adds the splitted contents of a vertical merged cell, in order preserve in next page.\n viewer.splittedCellWidgets.push(splittedCell);\n }\n };\n /**\n * Inserts splitted cell widgets.\n * @param viewer\n * @param rowWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.insertSplittedCellWidgets = function (viewer, tableCollection, rowWidget, previousRowIndex) {\n var left = rowWidget.x;\n var tableWidth = 0;\n tableWidth = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableHolder.tableWidth);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (Math.round(left) < Math.round(cellWidget.x - cellWidget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i)) {\n i--;\n continue;\n }\n var length_1 = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i, previousRowIndex);\n if (length_1 < rowWidget.childWidgets.length) {\n i--;\n continue;\n }\n }\n left += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n if (i === rowWidget.childWidgets.length - 1 && Math.round(left) < Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i + 1, previousRowIndex);\n continue;\n }\n }\n // tslint:disable-next-line:max-line-length\n // Special case: when the child widgets of row is equal to 0 then the splitted widgets in the viewer is added in the table row widgets. \n if ((isNullOrUndefined(rowWidget.childWidgets) || rowWidget.childWidgets.length === 0) && viewer.splittedCellWidgets.length > 0) {\n for (var j = 0; j < viewer.splittedCellWidgets.length; j++) {\n var widget = viewer.splittedCellWidgets[j];\n if (Math.round(left) <= Math.round(widget.x - widget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j)) {\n j--;\n continue;\n }\n var count = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j, previousRowIndex);\n if (count < rowWidget.childWidgets.length) {\n j--;\n continue;\n }\n }\n left += widget.margin.left + widget.width + widget.margin.right;\n if (j === rowWidget.childWidgets.length - 1 && Math.round(left) <\n Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j + 1, previousRowIndex);\n continue;\n }\n }\n }\n if (viewer.splittedCellWidgets.length > 0) {\n viewer.splittedCellWidgets = [];\n }\n };\n /**\n * Inserts spanned row widget.\n * @param rowWidget\n * @param viewer\n * @param left\n * @param index\n */\n Layout.prototype.insertRowSpannedWidget = function (rowWidget, viewer, left, index) {\n var cellSpacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n cellSpacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < viewer.splittedCellWidgets.length; i++) {\n var splittedCell = viewer.splittedCellWidgets[i];\n if (Math.round(left) === Math.round(splittedCell.x - splittedCell.margin.left)) {\n rowWidget.childWidgets.splice(index, 0, splittedCell);\n splittedCell.containerWidget = rowWidget;\n //If the splitted cell location differs from expected location update the location of row child widgets.\n if (splittedCell.y !== rowWidget.y + splittedCell.margin.top + cellSpacing) {\n this.updateChildLocationForRow(rowWidget.y, rowWidget);\n }\n viewer.splittedCellWidgets = [];\n return true;\n }\n }\n return false;\n };\n /**\n * Inserts empty splitted cell widgets.\n * @param rowWidget\n * @param left\n * @param index\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.insertEmptySplittedCellWidget = function (currentRow, tableCollection, left, index, previousRowIndex) {\n var tableWidget = tableCollection[tableCollection.length - 1];\n for (var i = previousRowIndex; i >= 0; i--) {\n var rowWidget = tableWidget.childWidgets[i];\n var previousLeft = rowWidget.x;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var rowSpan = 1;\n var cellWidget = rowWidget.childWidgets[j];\n if (Math.round(left) === Math.round(previousLeft)) {\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan :\n cellWidget.cellFormat.rowSpan;\n if (rowSpan > 1) {\n var emptyCellWidget = this.createCellWidget(cellWidget);\n currentRow.childWidgets.splice(index, 0, emptyCellWidget);\n emptyCellWidget.containerWidget = currentRow;\n }\n return;\n }\n previousLeft += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n }\n }\n };\n /**\n * Gets spllited widget.\n * @param bottom\n * @param splitMinimalWidget\n * @param cellWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getSplittedWidget = function (bottom, splitMinimalWidget, tableCollection, rowCollection, cellWidget) {\n var splittedWidget = undefined;\n if (cellWidget.y + cellWidget.height > bottom - cellWidget.margin.bottom) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var paragraphWidget = cellWidget.childWidgets[i];\n var splittedPara = this.getSplittedWidgetForPara(bottom - cellWidget.margin.bottom, paragraphWidget);\n if (!isNullOrUndefined(splittedPara)) {\n if (i === 0 && splittedPara === paragraphWidget) {\n //Returns if the whole content of the cell does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedPara) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedPara), 1);\n i--;\n }\n cellWidget.height -= splittedPara.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedPara.height;\n splittedWidget.childWidgets.push(splittedPara);\n splittedPara.containerWidget = splittedWidget;\n }\n }\n else {\n var tableWidget = cellWidget.childWidgets[i];\n var tableCol = [tableWidget];\n //Check for nested table.\n if (bottom - cellWidget.margin.bottom < tableWidget.y + tableWidget.height) {\n var tableHeight = tableWidget.height;\n // tslint:disable-next-line:max-line-length\n var splittedTable = this.getSplittedWidgetForTable(bottom - cellWidget.margin.bottom, tableCol, tableWidget);\n if (!isNullOrUndefined(splittedTable)) {\n if (i === 0 && splittedTable === tableWidget) {\n //Returns if the whole table does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedTable) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedTable), 1);\n i--;\n cellWidget.height -= splittedTable.height;\n }\n else {\n cellWidget.height -= tableHeight - tableWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedTable.height;\n splittedWidget.childWidgets.push(splittedTable);\n splittedTable.containerWidget = splittedWidget;\n }\n }\n }\n }\n }\n if (isNullOrUndefined(splittedWidget) && splitMinimalWidget) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n return splittedWidget;\n };\n /**\n * Gets list level pattern\n * @param value\n * @private\n */\n Layout.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case 0:\n return 'Arabic';\n case 1:\n return 'UpRoman';\n case 2:\n return 'LowRoman';\n case 3:\n return 'UpLetter';\n case 4:\n return 'LowLetter';\n case 5:\n return 'Ordinal';\n case 6:\n return 'Number';\n case 7:\n return 'OrdinalText';\n case 8:\n return 'LeadingZero';\n case 9:\n return 'Bullet';\n case 10:\n return 'FarEast';\n case 11:\n return 'Special';\n default:\n return 'None';\n }\n };\n /**\n * Creates cell widget.\n * @param cell\n */\n Layout.prototype.createCellWidget = function (cell) {\n var cellWidget = new TableCellWidget();\n cellWidget.cellFormat = cell.cellFormat;\n cellWidget.index = cell.index;\n cellWidget.rowIndex = cell.rowIndex;\n cellWidget.columnIndex = cell.columnIndex;\n cellWidget.containerWidget = cell.containerWidget;\n this.updateWidgetLocation(cell, cellWidget);\n cellWidget.margin = cell.margin;\n cellWidget.leftBorderWidth = HelperMethods.convertPointToPixel(cell.leftBorderWidth);\n cellWidget.rightBorderWidth = HelperMethods.convertPointToPixel(cell.rightBorderWidth);\n return cellWidget;\n };\n /**\n * Create Table Widget\n */\n Layout.prototype.createTableWidget = function (table) {\n var newTable = new TableWidget();\n if (table.header) {\n newTable.header = table.header;\n newTable.headerHeight = table.headerHeight;\n }\n newTable.index = table.index;\n newTable.tableFormat = table.tableFormat;\n newTable.tableHolder = table.tableHolder;\n newTable.isGridUpdated = table.isGridUpdated;\n return newTable;\n };\n /**\n * Gets splitted widget for paragraph.\n * @param bottom\n * @param paragraphWidget\n */\n Layout.prototype.getSplittedWidgetForPara = function (bottom, paragraphWidget) {\n var lineBottom = paragraphWidget.y;\n var splittedWidget = undefined;\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n if (bottom < lineBottom + lineWidget.height) {\n if (i === 0) {\n if (lineWidget.paragraph.containerWidget instanceof TableCellWidget) {\n //checks first line of the page is exceed the page height\n if (lineWidget.paragraph.containerWidget.y === paragraphWidget.y) {\n lineBottom += lineWidget.height;\n continue;\n }\n }\n splittedWidget = paragraphWidget;\n break;\n }\n if (paragraphWidget.childWidgets.indexOf(lineWidget) !== -1) {\n paragraphWidget.childWidgets.splice(paragraphWidget.childWidgets.indexOf(lineWidget), 1);\n i--;\n }\n paragraphWidget.height -= lineWidget.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new ParagraphWidget();\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.index = paragraphWidget.index;\n this.updateWidgetLocation(paragraphWidget, splittedWidget);\n splittedWidget.height = lineWidget.height;\n }\n else {\n splittedWidget.height += lineWidget.height;\n }\n splittedWidget.childWidgets.push(lineWidget);\n lineWidget.paragraph = splittedWidget;\n }\n lineBottom += lineWidget.height;\n }\n return splittedWidget;\n };\n /**\n * Gets splitted table widget.\n * @param bottom\n * @param tableWidget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getSplittedWidgetForTable = function (bottom, tableCollection, tableWidget) {\n var rowBottom = tableWidget.y;\n var splittedWidget = undefined;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = undefined;\n var childWidget = tableWidget.childWidgets[i];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n var rowHeight = rowWidget.height;\n if (bottom < rowBottom + rowHeight || !isNullOrUndefined(splittedWidget)) {\n //ToDo: Check whether row included in vertical merge or AllowRowSplitbyPage is true, if so split row.\n //Checks if atleast first line fits in the client area. \n var splittedRow = undefined;\n var allowRowBreakAcrossPages = true;\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(rowWidget.rowFormat)) {\n allowRowBreakAcrossPages = rowWidget.rowFormat.allowBreakAcrossPages;\n }\n if (allowRowBreakAcrossPages) {\n // tslint:disable-next-line:max-line-length\n splittedRow = (isNullOrUndefined(splittedWidget) && this.isFirstLineFitForRow(bottom, rowWidget)) ? this.getSplittedWidgetForRow(bottom, tableCollection, [rowWidget], rowWidget) : rowWidget;\n }\n if (!isNullOrUndefined(splittedRow)) {\n if (i === 0 && splittedRow === rowWidget) {\n //Returns if the whole table does not fit in current page.\n return tableWidget;\n }\n if (tableWidget.childWidgets.indexOf(splittedRow) !== -1) {\n tableWidget.childWidgets.splice(tableWidget.childWidgets.indexOf(splittedRow), 1);\n i--;\n tableWidget.height -= splittedRow.height;\n }\n else {\n tableWidget.height -= rowHeight - rowWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createTableWidget(tableWidget);\n this.updateWidgetLocation(tableWidget, splittedWidget);\n splittedWidget.height = splittedRow.height;\n }\n else {\n splittedWidget.height += splittedRow.height;\n }\n splittedWidget.childWidgets.push(splittedRow);\n splittedRow.containerWidget = splittedWidget;\n }\n }\n rowBottom += rowWidget.height;\n }\n return splittedWidget;\n };\n /**\n * Checks whether first line fits for paragraph or not.\n * @param bottom\n * @param paraWidget\n */\n Layout.prototype.isFirstLineFitForPara = function (bottom, paraWidget) {\n var lineWidget = paraWidget.childWidgets[0];\n var cellwidget = lineWidget.paragraph.containerWidget;\n // let document: WordDocument = undefined;\n // if (!isNullOrUndefined(lineWidget.paragraph.currentNode) && !isNullOrUndefined(cellwidget.containerWidget)) {\n // document = WordDocument.getDocumentOf(lineWidget.paragraph.currentNode);\n // }\n //checks first line of the page is exceed the page height\n if (this.viewer.isFirstLineFitInShiftWidgets) {\n if (this.viewer.clientActiveArea.y === this.viewer.clientArea.y && paraWidget.y + lineWidget.height >= bottom) {\n return true;\n }\n }\n else {\n // For nested tables,\n if (cellwidget.ownerTable.isInsideTable) {\n // Gets the container cell widgets, consider it as client area for the cell widget.\n var containerCellWidget = undefined;\n if (cellwidget.containerWidget instanceof TableRowWidget &&\n cellwidget.containerWidget.containerWidget instanceof TableWidget\n && cellwidget.containerWidget.containerWidget.containerWidget instanceof TableCellWidget) {\n containerCellWidget = cellwidget.containerWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(containerCellWidget) && cellwidget.containerWidget.y === containerCellWidget.y\n && paraWidget.y + lineWidget.height >= bottom) {\n return true;\n }\n }\n else if (cellwidget.containerWidget.y === this.viewer.clientArea.y && paraWidget.y + lineWidget.height >= bottom) {\n return true;\n }\n }\n return (paraWidget.y + lineWidget.height <= bottom);\n };\n /**\n * Checks whether first line fits for table or not.\n * @param bottom\n * @param tableWidget\n * @private\n */\n Layout.prototype.isFirstLineFitForTable = function (bottom, tableWidget) {\n var rowWidget = undefined;\n var isFit = false;\n var childWidget = tableWidget.childWidgets[0];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n if (!isNullOrUndefined(rowWidget)) {\n isFit = this.isFirstLineFitForRow(bottom, rowWidget);\n }\n return isFit;\n };\n /**\n * Checks whether first line fits for row or not.\n * @param bottom\n * @param rowWidget\n */\n Layout.prototype.isFirstLineFitForRow = function (bottom, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (!this.isFirstLineFitForCell(bottom, cellWidget)) {\n return false;\n }\n }\n return true;\n };\n /**\n * Checks whether first line fits for cell or not.\n * @param bottom\n * @param cellWidget\n */\n Layout.prototype.isFirstLineFitForCell = function (bottom, cellWidget) {\n if (cellWidget.childWidgets.length === 0) {\n return true;\n }\n if (cellWidget.childWidgets[0] instanceof ParagraphWidget) {\n var paraWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForPara(bottom - cellWidget.margin.bottom, paraWidget);\n }\n else {\n var tableWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForTable(bottom - cellWidget.margin.bottom, tableWidget);\n }\n };\n /**\n * Updates widget location.\n * @param widget\n * @param table\n */\n Layout.prototype.updateWidgetLocation = function (widget, table) {\n table.x = widget.x;\n table.y = widget.y;\n table.width = widget.width;\n };\n /**\n * Updates child location for table.\n * @param top\n * @param tableWidget\n * @private\n */\n Layout.prototype.updateChildLocationForTable = function (top, tableWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n rowWidget.x = rowWidget.x;\n rowWidget.y = top;\n this.updateChildLocationForRow(top, rowWidget);\n top += rowWidget.height;\n }\n };\n /**\n * Updates child location for row.\n * @param top\n * @param rowWidget\n * @private\n */\n Layout.prototype.updateChildLocationForRow = function (top, rowWidget) {\n var spacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n spacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n cellWidget.x = cellWidget.x;\n cellWidget.y = top + cellWidget.margin.top + spacing;\n this.updateChildLocationForCell(cellWidget.y, cellWidget);\n }\n };\n /**\n * Updates child location for cell.\n * @param top\n * @param cellWidget\n */\n Layout.prototype.updateChildLocationForCell = function (top, cellWidget) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n cellWidget.childWidgets[i].x = cellWidget.childWidgets[i].x;\n cellWidget.childWidgets[i].y = top;\n if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.updateChildLocationForTable(top, cellWidget.childWidgets[i]);\n }\n top += cellWidget.childWidgets[i].height;\n }\n };\n /**\n * Updates cell vertical position.\n * @param cellWidget\n * @param isUpdateToTop\n * @param isInsideTable\n * @private\n */\n Layout.prototype.updateCellVerticalPosition = function (cellWidget, isUpdateToTop, isInsideTable) {\n if (cellWidget.ownerTable.containerWidget instanceof BodyWidget || isInsideTable) {\n var displacement = this.getDisplacement(cellWidget, isUpdateToTop);\n //Update Y position alone for the child widget of cell\n this.updateCellContentVerticalPosition(cellWidget, displacement, isUpdateToTop);\n }\n };\n /**\n * Updates cell content vertical position.\n * @param cellWidget\n * @param displacement\n * @param isUpdateToTop\n */\n Layout.prototype.updateCellContentVerticalPosition = function (cellWidget, displacement, isUpdateToTop) {\n if (displacement === 0) {\n return;\n }\n var location = cellWidget.y + displacement;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n cellWidget.childWidgets[i].y = location;\n }\n else {\n location = this.updateTableWidgetLocation(cellWidget.childWidgets[i], location, isUpdateToTop);\n }\n location = location + cellWidget.childWidgets[i].height;\n }\n };\n /**\n * Updates table widget location.\n * @param tableWidget\n * @param location\n * @param isUpdateToTop\n */\n Layout.prototype.updateTableWidgetLocation = function (tableWidget, location, isUpdateToTop) {\n tableWidget.y = location = location + tableWidget.topBorderWidth;\n var cellSpacing = 0;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n rowWidget.y = location;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.y = location + cellWidget.margin.top + cellSpacing;\n this.updateCellVerticalPosition(cellWidget, isUpdateToTop, true);\n }\n location = location + rowWidget.height;\n }\n return location;\n };\n /**\n * Gets displacement.\n * @param cellWidget\n * @param isUpdateToTop\n */\n Layout.prototype.getDisplacement = function (cellWidget, isUpdateToTop) {\n //Gets the height of row\n var rowHeight = 0;\n var rowWidget = cellWidget.containerWidget;\n var padding = cellWidget.margin.top + cellWidget.margin.bottom;\n if (!isNullOrUndefined(cellWidget.cellFormat) && cellWidget.cellFormat.rowSpan > 1) {\n rowHeight = cellWidget.height;\n }\n else {\n rowHeight = ((!isNullOrUndefined(rowWidget) ? rowWidget.height : 0) - padding);\n }\n //Gets the height of content within the cell\n var cellContentHeight = this.getCellContentHeight(cellWidget);\n //Displacement field holds the value which has reduced from rowHeight and cellContentHeight\n var displacement = 0;\n if (rowHeight > cellContentHeight) {\n displacement = rowHeight - cellContentHeight;\n if (cellWidget.cellFormat.verticalAlignment === 'Center') {\n displacement = displacement / 2;\n }\n else if ((cellWidget.cellFormat.verticalAlignment === 'Top' || isUpdateToTop)) {\n displacement = 0;\n }\n }\n return displacement;\n };\n /**\n * Gets cell content height.\n * @param cellWidget\n */\n Layout.prototype.getCellContentHeight = function (cellWidget) {\n if (isNullOrUndefined(cellWidget.childWidgets)) {\n return 0;\n }\n var contentHeight = 0;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n contentHeight += cellWidget.childWidgets[i].height;\n }\n else {\n contentHeight += cellWidget.childWidgets[i].height;\n }\n }\n return contentHeight;\n };\n /**\n * Gets table left borders.\n * @param borders\n * @private\n */\n Layout.prototype.getTableLeftBorder = function (borders) {\n if (!isNullOrUndefined(borders.left)) {\n return borders.left;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Gets table right border.\n * @param borders\n * @private\n */\n Layout.prototype.getTableRightBorder = function (borders) {\n if (!isNullOrUndefined(borders.right)) {\n return borders.right;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Get table top border.\n * @param borders\n * @private\n */\n Layout.prototype.getTableTopBorder = function (borders) {\n if (!isNullOrUndefined(borders.top)) {\n return borders.top;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Gets table bottom border.\n * @param borders\n * @private\n */\n Layout.prototype.getTableBottomBorder = function (borders) {\n if (!isNullOrUndefined(borders.bottom)) {\n return borders.bottom;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Get diagonal cell up border.\n * @param tableCell\n * @private\n */\n Layout.prototype.getCellDiagonalUpBorder = function (tableCell) {\n var diagonalUpBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalUpBorder = cellBorder.diagonalUp;\n return diagonalUpBorder;\n };\n /**\n * Gets diagonal cell down border\n * @param tableCell\n * @private\n */\n Layout.prototype.getCellDiagonalDownBorder = function (tableCell) {\n var diagonalDownBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalDownBorder = cellBorder.diagonalDown;\n return diagonalDownBorder;\n };\n /**\n * Gets table width.\n * @param table\n * @private\n */\n Layout.prototype.getTableWidth = function (table) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n //#region shifting\n /**\n * @private\n */\n Layout.prototype.layoutNextItemsBlock = function (blockAdv, viewer) {\n var sectionIndex = blockAdv.bodyWidget.sectionIndex;\n var block = blockAdv;\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n if (isNullOrUndefined(nextBlock) || this.viewer.blockToShift === block) {\n this.viewer.blockToShift = undefined;\n }\n var updateNextBlockList = true;\n while (nextBlock instanceof BlockWidget && nextBlock.bodyWidget.sectionIndex === sectionIndex) {\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n // if (viewer.fieldEndParagraph === block) {\n // //Sets field end paragraph to undefined, inorder to hold reLayouting with this paragraph.\n // viewer.fieldEndParagraph = undefined;\n // }\n block = nextBlock;\n if (viewer.blockToShift === block) {\n viewer.blockToShift = undefined;\n }\n updateNextBlockList = false;\n var nextWidget = undefined;\n nextWidget = block.getSplitWidgets()[0];\n // tslint:disable-next-line:max-line-length\n if (viewer.fieldStacks.length === 0 && !isNullOrUndefined(nextWidget) && currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(currentWidget.y + currentWidget.height, 2))) {\n if (!isNullOrUndefined(viewer.blockToShift)) {\n viewer.blockToShift = block;\n break;\n }\n if (isNullOrUndefined(nextWidget.nextWidget)) {\n break;\n }\n }\n updateNextBlockList = true;\n if (viewer.owner.isShiftingEnabled && viewer.fieldStacks.length === 0) {\n viewer.blockToShift = block;\n break;\n }\n else if (isNullOrUndefined(this.viewer.owner.editorModule) || !this.viewer.owner.editorModule.isInsertingTOC) {\n block = block.combineWidget(this.viewer);\n var paragraph = void 0;\n if (currentWidget.containerWidget !== block.containerWidget) {\n if (!(currentWidget instanceof ParagraphWidget) ||\n (currentWidget instanceof ParagraphWidget) && !currentWidget.isEndsWithPageBreak) {\n // tslint:disable-next-line:max-line-length\n this.updateContainerWidget(block, currentWidget.containerWidget, currentWidget.indexInOwner + 1, false);\n }\n }\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n block.isGridUpdated = false;\n paragraph = this.viewer.selection.getFirstParagraphInFirstCell(block);\n }\n else {\n paragraph = block;\n }\n if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n }\n viewer.updateClientAreaForBlock(block, true);\n this.viewer.layout.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n splittedWidget = nextBlock.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (!viewer.owner.isShiftingEnabled || this.viewer.blockToShift !== block) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n };\n /**\n * @private\n */\n Layout.prototype.updateClientAreaForLine = function (paragraph, startLineWidget, elementIndex) {\n //Clears the line widget starting from current line.\n var top = this.viewer.selection.getTop(startLineWidget);\n var left = this.viewer.clientArea.x;\n this.viewer.cutFromTop(top);\n this.viewer.cutFromLeft(left);\n };\n /**\n * @private\n */\n Layout.prototype.getParentTable = function (block) {\n var widget = block;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof BlockContainer) {\n return widget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n };\n /**\n * @private\n */\n Layout.prototype.reLayoutParagraph = function (paragraphWidget, lineIndex, elementBoxIndex) {\n if (this.viewer.blockToShift === paragraphWidget) {\n this.layoutBodyWidgetCollection(paragraphWidget.index, paragraphWidget.containerWidget, paragraphWidget, false);\n }\n // let isElementMoved: boolean = elementBoxIndex > 0;\n if (paragraphWidget.isInsideTable) {\n this.reLayoutTable(paragraphWidget);\n }\n else {\n this.reLayoutLine(paragraphWidget, lineIndex);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget &&\n paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n };\n /**\n * @private\n */\n Layout.prototype.reLayoutTable = function (block) {\n //Get Top level owner of block\n var table = this.getParentTable(block);\n //Combine splitted table in to single table\n // this.combineTableWidgets(this.viewer, table, undefined);\n //Get Parent table\n var currentTable = table.combineWidget(this.viewer);\n currentTable.isGridUpdated = false;\n currentTable.buildTableColumns();\n currentTable.isGridUpdated = true;\n var bodyWidget = currentTable.containerWidget;\n if (this.viewer.owner.enableHeaderAndFooter || block.isInHeaderFooter) {\n bodyWidget.height -= currentTable.height;\n // tslint:disable-next-line:max-line-length\n this.viewer.updateHCFClientAreaWithTop(table.bodyWidget.sectionFormat, this.viewer.isBlockInHeader(table), bodyWidget.page);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n //Clear Hieght for all the content \n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n var block_1 = this.viewer.selection.getFirstParagraphInFirstCell(currentTable);\n this.viewer.owner.editorModule.updateWholeListItems(block_1);\n }\n this.viewer.updateClientAreaForBlock(currentTable, true);\n //Remove border width\n currentTable.x -= currentTable.leftBorderWidth;\n currentTable.y -= currentTable.topBorderWidth;\n //Update Client area for current position\n this.viewer.cutFromTop(currentTable.y);\n this.clearTableWidget(currentTable, true, true);\n this.layoutBlock(currentTable, 0, true);\n this.viewer.updateClientAreaForBlock(currentTable, false);\n this.layoutNextItemsBlock(currentTable, this.viewer);\n };\n /**\n * @private\n */\n Layout.prototype.clearTableWidget = function (table, clearPosition, clearHeight) {\n table.height = 0;\n if (clearPosition) {\n table.y = 0;\n table.x = 0;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n this.clearRowWidget(row, clearPosition, clearHeight);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearRowWidget = function (row, clearPosition, clearHeight) {\n row.height = 0;\n if (clearPosition) {\n row.y = 0;\n row.x = 0;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n this.clearCellWidget(cell, clearPosition, clearHeight);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearCellWidget = function (cell, clearPosition, clearHeight) {\n cell.height = 0;\n if (clearPosition) {\n cell.y = 0;\n cell.x = 0;\n }\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n if (clearHeight) {\n block.height = 0;\n }\n }\n else {\n this.clearTableWidget(block, clearPosition, clearHeight);\n }\n }\n };\n /**\n * @param blockIndex\n * @param bodyWidget\n * @param block\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.layoutBodyWidgetCollection = function (blockIndex, bodyWidget, block, shiftNextWidget) {\n if (!isNullOrUndefined(this.viewer.owner)\n && this.viewer.owner.isLayoutEnabled) {\n if (bodyWidget instanceof BlockContainer) {\n var curretBlock = this.checkAndGetBlock(bodyWidget, blockIndex);\n if (isNullOrUndefined(curretBlock)) {\n return;\n }\n if (bodyWidget instanceof HeaderFooterWidget) {\n // tslint:disable-next-line:max-line-length\n this.viewer.updateHCFClientAreaWithTop(bodyWidget.sectionFormat, bodyWidget.headerFooterType.indexOf('Header') !== -1, bodyWidget.page);\n curretBlock.containerWidget.height -= curretBlock.height;\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n if (blockIndex > 0) {\n var prevWidget = curretBlock.getSplitWidgets()[0].previousRenderedWidget;\n if (!(prevWidget instanceof ParagraphWidget) ||\n (prevWidget instanceof ParagraphWidget) && !prevWidget.isEndsWithPageBreak) {\n this.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n if (curretBlock.containerWidget !== prevWidget.containerWidget) {\n // tslint:disable-next-line:max-line-length\n this.updateContainerWidget(curretBlock, prevWidget.containerWidget, prevWidget.indexInOwner + 1, false);\n }\n }\n else if (prevWidget instanceof ParagraphWidget && prevWidget.isEndsWithPageBreak &&\n prevWidget.containerWidget === curretBlock.containerWidget) {\n this.moveBlocksToNextPage(prevWidget);\n }\n }\n var currentParagraph = void 0;\n curretBlock = curretBlock.combineWidget(this.viewer);\n if (curretBlock instanceof TableWidget) {\n this.clearTableWidget(curretBlock, true, true);\n curretBlock.isGridUpdated = false;\n currentParagraph = this.viewer.selection.getFirstParagraphInFirstCell(curretBlock);\n }\n else {\n currentParagraph = curretBlock;\n }\n if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(currentParagraph);\n }\n this.viewer.updateClientAreaForBlock(curretBlock, true);\n this.viewer.layout.layoutBlock(curretBlock, 0, true);\n this.viewer.updateClientAreaForBlock(curretBlock, false);\n if (shiftNextWidget) {\n this.shiftNextWidgets(curretBlock);\n }\n else {\n this.layoutNextItemsBlock(curretBlock, this.viewer);\n }\n }\n else if (bodyWidget instanceof TableCellWidget) {\n var table = this.viewer.layout.getParentTable(bodyWidget.ownerTable.getSplitWidgets()[0]);\n this.reLayoutTable(bodyWidget.ownerTable);\n this.layoutNextItemsBlock(table, this.viewer);\n }\n }\n };\n Layout.prototype.checkAndGetBlock = function (containerWidget, blockIndex) {\n var sectionIndex = containerWidget.index;\n while (containerWidget && containerWidget.index === sectionIndex) {\n if (containerWidget.childWidgets.length > 0 && containerWidget.firstChild.index <= blockIndex &&\n containerWidget.lastChild.index >= blockIndex) {\n for (var i = 0; i < containerWidget.childWidgets.length; i++) {\n var block = containerWidget.childWidgets[i];\n if (block.index === blockIndex) {\n return block;\n }\n }\n }\n if (containerWidget instanceof BodyWidget) {\n containerWidget = containerWidget.nextRenderedWidget;\n }\n else {\n break;\n }\n }\n return undefined;\n };\n //#endregion\n //#region Table\n /**\n * Layouts table.\n * @param table\n * @private\n */\n Layout.prototype.layoutTable = function (table, startIndex) {\n if (!table.isGridUpdated) {\n table.buildTableColumns();\n table.isGridUpdated = true;\n }\n var tableView = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tableView);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var isHeader = table.childWidgets[0].rowFormat.isHeader;\n if (table.childWidgets.length > 0) {\n table.header = isHeader;\n table.continueHeader = isHeader;\n table.headerHeight = 0;\n }\n var row = table.childWidgets[startIndex];\n while (row) {\n row = this.layoutRow(tableView, row);\n row = row.nextRow;\n }\n this.updateWidgetsToPage(tableView, [], table);\n return tableView[tableView.length - 1];\n };\n /**\n * Adds table widget.\n * @param area\n * @param table\n * @private\n */\n Layout.prototype.addTableWidget = function (area, table, create) {\n var tableWidget = table[table.length - 1];\n if (create) {\n tableWidget = this.createTableWidget(tableWidget);\n table.push(tableWidget);\n }\n tableWidget.width = area.width;\n tableWidget.x = area.x;\n tableWidget.y = area.y;\n //Update the table height of tableWidget when cell spacing has been defined. \n if (tableWidget.tableFormat.cellSpacing > 0) {\n tableWidget.height = tableWidget.height + HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n // tslint:disable-next-line:max-line-length\n tableWidget.leftBorderWidth = HelperMethods.convertPointToPixel(this.getTableLeftBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.rightBorderWidth = HelperMethods.convertPointToPixel(this.getTableRightBorder(tableWidget.tableFormat.borders).getLineWidth());\n // tslint:disable-next-line:max-line-length\n tableWidget.topBorderWidth = HelperMethods.convertPointToPixel(this.getTableTopBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(this.getTableBottomBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.x += tableWidget.leftBorderWidth;\n tableWidget.y += tableWidget.topBorderWidth;\n tableWidget.width -= tableWidget.leftBorderWidth;\n tableWidget.width -= tableWidget.rightBorderWidth;\n tableWidget.height += tableWidget.bottomBorderWidth;\n }\n return tableWidget;\n };\n /**\n * Updates widget to page.\n * @param table\n * @private\n */\n Layout.prototype.updateWidgetsToPage = function (tables, rows, table, endRowWidget) {\n var viewer = this.viewer;\n var tableWidget = tables[tables.length - 1];\n if (!table.isInsideTable) {\n this.updateHeightForTableWidget(tables, rows, tableWidget, endRowWidget);\n if (tableWidget.childWidgets.length > 0 && tableWidget.y !== tableWidget.childWidgets[0].y) {\n tableWidget.y = tableWidget.childWidgets[0].y;\n }\n // Need to update on this further\n //Adds the table widget to owner cell widget.\n // tslint:disable-next-line:max-line-length\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).childWidgets.push(tableWidget);\n // tableWidget.containerWidget = viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as BodyWidget;\n // tslint:disable-next-line:max-line-length\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height = (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height + tableWidget.height;\n }\n if (table.tableFormat.cellSpacing > 0) {\n // tslint:disable-next-line:max-line-length\n if (tableWidget.y + tableWidget.height + HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) > viewer.clientArea.bottom && viewer instanceof PageLayoutViewer) {\n //update the table height when split to next page. Which is equivalent Ms Word Behaviour. \n //In Ms Word if the Table Split to next page the bottom spacing of the table will be half of the current spacing.\n //And the Remaining space will be used in next page top of the table.\n tableWidget.height = tableWidget.height - HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) / 2;\n }\n //Update the current Y position of current clientactivearea.\n viewer.cutFromTop(tableWidget.y + tableWidget.height);\n }\n if (table.bodyWidget instanceof HeaderFooterWidget) {\n table.containerWidget.height += table.height;\n if (this.viewer.owner.enableHeaderAndFooter && table.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(table.bodyWidget, this.viewer);\n }\n }\n };\n /**\n * Updates height for table widget.\n * @param viewer\n * @param tableWidget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.updateHeightForTableWidget = function (tables, rows, tableWidget, endRowWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n if (rowWidget === endRowWidget) {\n break;\n }\n this.updateHeightForRowWidget(this.viewer, true, tables, rows, rowWidget, true, endRowWidget);\n }\n };\n //#endregion\n //#region Row\n /**\n * Layouts table row.\n * @param row\n * @private\n */\n Layout.prototype.layoutRow = function (tableWidget, row) {\n var viewer = this.viewer;\n var rowWidgets = [row];\n var widget = this.addTableRowWidget(viewer.clientActiveArea, rowWidgets);\n viewer.updateClientAreaForRow(row, true);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n this.layoutCell(cell, this.getMaxTopOrBottomCellMargin(row, 0) + row.topBorderWidth, this.getMaxTopOrBottomCellMargin(row, 1) + row.bottomBorderWidth, widget);\n }\n viewer.updateClientAreaForRow(row, false);\n var rows = [row];\n this.updateWidgetsToTable(tableWidget, rows, row);\n return rows[rows.length - 1];\n };\n /**\n * @param area\n * @param row\n */\n Layout.prototype.addTableRowWidget = function (area, row) {\n var rowWidget = row[row.length - 1];\n rowWidget.x = area.x + rowWidget.rowFormat.gridBeforeWidth;\n rowWidget.y = area.y;\n rowWidget.width = area.width;\n var borderWidth = 0;\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat)\n && rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n //Update the table height with the border width to layout the border when the cell spacing is defined..\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n if (!isNullOrUndefined(rowWidget.childWidgets[j].cellFormat)\n && !isNullOrUndefined(rowWidget.childWidgets[j].cellFormat.borders)) {\n // tslint:disable-next-line:max-line-length\n var width = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[j]).getLineWidth();\n if (width > borderWidth) {\n borderWidth = width;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n if (rowWidget.index > 0 && !isNullOrUndefined(rowWidget.previousWidget)) {\n var prevRow = rowWidget.previousWidget;\n borderWidth = 0;\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(prevRow.childWidgets[i].cellFormat) && !isNullOrUndefined(prevRow.childWidgets[i].cellFormat.borders)) {\n var value = TableCellWidget.getCellBottomBorder(prevRow.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n }\n if (!isNullOrUndefined(rowWidget.childWidgets)) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n var value = TableCellWidget.getCellTopBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n //Update the table height of tableWidget when cell spacing has been defined. \n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat) && rowWidget.ownerTable.tableFormat.cellSpacing <= 0 && rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n // Update the bottom width for last row .\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n var value = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n //tableRowWidget.ownerWidget = owner;\n return rowWidget;\n };\n /**\n * Gets maximum top or bottom cell margin.\n * @param row\n * @param topOrBottom\n */\n Layout.prototype.getMaxTopOrBottomCellMargin = function (row, topOrBottom) {\n if (isNullOrUndefined(row.childWidgets)) {\n return 0;\n }\n var value = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n if (row.childWidgets.length > 0) {\n var cellFormat = row.childWidgets[i].cellFormat;\n if (cellFormat.containsMargins()) {\n if (topOrBottom === 0 && !isNullOrUndefined(cellFormat.topMargin) &&\n HelperMethods.convertPointToPixel(cellFormat.topMargin) > value) {\n value = HelperMethods.convertPointToPixel(cellFormat.topMargin);\n }\n else if (topOrBottom === 1 && !isNullOrUndefined(cellFormat.bottomMargin) &&\n HelperMethods.convertPointToPixel(cellFormat.bottomMargin) > value) {\n value = HelperMethods.convertPointToPixel(cellFormat.bottomMargin);\n }\n }\n else {\n var tableFormat = row.childWidgets[i].ownerTable.tableFormat;\n if (topOrBottom === 0 && HelperMethods.convertPointToPixel(tableFormat.topMargin) > value) {\n value = HelperMethods.convertPointToPixel(tableFormat.topMargin);\n }\n else if (topOrBottom === 1 && HelperMethods.convertPointToPixel(tableFormat.bottomMargin) > value) {\n value = HelperMethods.convertPointToPixel(tableFormat.bottomMargin);\n }\n }\n }\n }\n return value;\n };\n //#endregion Row\n //#region cell\n /**\n * Layouts cell\n * @param cell\n * @param maxCellMarginTop\n * @param maxCellMarginBottom\n */\n Layout.prototype.layoutCell = function (cell, maxCellMarginTop, maxCellMarginBottom, owner) {\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n viewer.updateClientAreaForCell(cell, true);\n if (cell.childWidgets.length === 0) {\n var paragraphWidget = new ParagraphWidget();\n paragraphWidget.characterFormat = new WCharacterFormat();\n paragraphWidget.paragraphFormat = new WParagraphFormat();\n paragraphWidget.index = 0;\n var lineWidget = new LineWidget(undefined);\n paragraphWidget.childWidgets.push(lineWidget);\n cell.childWidgets.push(paragraphWidget);\n }\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n block.containerWidget = cell;\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n //endregion cell\n //#region Shifting\n /**\n * @private\n */\n Layout.prototype.shiftLayoutedItems = function () {\n if (isNullOrUndefined(this.viewer.blockToShift) || isNullOrUndefined(this.viewer.blockToShift.containerWidget)) {\n this.viewer.blockToShift = undefined;\n return;\n }\n var block = this.viewer.blockToShift;\n var sectionIndex = block.bodyWidget.index;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n var updateNextBlockList = true;\n // If flow layout, then all sections are in single page. Hence need to update till last block of last section.\n // Todo: For page layout and section break continuous, need to handle the same.\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n while (nextBlock instanceof BlockWidget && nextBlock.bodyWidget.index === sectionIndex) {\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n block = nextBlock;\n updateNextBlockList = false;\n var nextWidget = undefined;\n blocks = block.getSplitWidgets();\n if (block instanceof ParagraphWidget) {\n nextWidget = blocks[0];\n }\n else {\n if (block instanceof TableWidget) {\n nextWidget = blocks[0];\n }\n }\n if (currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(this.viewer.clientActiveArea.y, 2)) &&\n isNullOrUndefined(nextWidget.nextWidget)) {\n break;\n }\n updateNextBlockList = true;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n splittedWidget = block.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n this.viewer.blockToShift = undefined;\n var viewer = this.viewer;\n // if (viewer instanceof PageLayoutViewer) {\n viewer.removeEmptyPages();\n this.updateFieldElements();\n viewer.updateScrollBars();\n // }\n };\n /**\n * @private\n */\n Layout.prototype.updateFieldElements = function () {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n var fieldBegin = this.viewer.fields[i];\n if (!isNullOrUndefined(this.viewer.selection)) {\n var fieldCode = this.viewer.selection.getFieldCode(fieldBegin);\n if (!isNullOrUndefined(fieldCode) && fieldCode.toLowerCase().match('numpages')) {\n var textElement = fieldBegin.fieldSeparator.nextNode;\n if (!isNullOrUndefined(textElement)) {\n textElement.text = this.viewer.pages.length.toString();\n var paragraph = fieldBegin.line.paragraph;\n if (!isNullOrUndefined(paragraph.bodyWidget) && !isNullOrUndefined(paragraph.bodyWidget.page)) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldBegin.line);\n var elementIndex = fieldBegin.line.children.indexOf(textElement);\n this.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n }\n }\n }\n };\n Layout.prototype.reLayoutOrShiftWidgets = function (blockAdv, viewer) {\n var reLayoutItems = false;\n var block = blockAdv;\n // if (block instanceof ParagraphWidget) {\n // reLayoutItems = viewer.renderedElements.get(block as ParagraphWidget).length === 0;\n // } else {\n // reLayoutItems = viewer.renderedElements.get(block as TableWidget).length === 0;\n // }\n // if (reLayoutItems) {\n // //Handle layouting the block.\n // viewer.updateClientAreaForBlock(block, true);\n // this.layoutMod.layoutBlock(block);\n // viewer.updateClientAreaForBlock(block, false);\n // } else {\n //Handled to check client area and shift layouted widget.\n this.shiftWidgetsBlock(block, viewer);\n //Updates the list value of the rendered paragraph.\n if (this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateRenderedListItems(block);\n }\n // }\n };\n Layout.prototype.shiftWidgetsBlock = function (block, viewer) {\n if (block instanceof ParagraphWidget) {\n this.shiftWidgetsForPara(block, viewer);\n }\n else if (block instanceof TableWidget) {\n this.shiftWidgetsForTable(block, viewer);\n }\n };\n Layout.prototype.shiftWidgetsForPara = function (paragraph, viewer) {\n var prevBodyObj = this.getBodyWidgetOfPreviousBlock(paragraph, 0);\n var prevBodyWidget = prevBodyObj.bodyWidget;\n var index = prevBodyObj.index;\n var prevWidget = undefined;\n for (var i = 0; i < paragraph.getSplitWidgets().length; i++) {\n var widget = paragraph.getSplitWidgets()[i];\n if (!isNullOrUndefined(prevWidget)) {\n var isPageBreak = prevWidget.lastChild ? prevWidget.lastChild.isEndsWithPageBreak : false;\n this.shiftToPreviousWidget(widget, viewer, prevWidget, isPageBreak);\n if ((isNullOrUndefined(widget.childWidgets) || widget.childWidgets.length === 0) && !isPageBreak) {\n i--;\n continue;\n }\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n if (isPageBreak) {\n viewer.updateClientAreaByWidget(widget);\n }\n }\n }\n if (this.isFitInClientArea(widget, viewer)) {\n //Check whether this widget is moved to previous container widget.\n prevWidget = widget;\n widget.y = viewer.clientActiveArea.y;\n viewer.cutFromTop(viewer.clientActiveArea.y + widget.height);\n //Moves the paragraph widget to previous body widget.\n if (!isNullOrUndefined(prevBodyWidget) && prevBodyWidget !== widget.containerWidget) {\n index++;\n if (!prevBodyWidget.lastChild.isEndsWithPageBreak) {\n this.updateContainerWidget(widget, prevBodyWidget, index, true);\n }\n }\n if (widget.isEndsWithPageBreak) {\n var nextBodyWidget = this.createOrGetNextBodyWidget(prevBodyWidget, this.viewer);\n nextBodyWidget = this.moveBlocksToNextPage(widget);\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n }\n }\n else {\n var previousBlock = widget.previousRenderedWidget;\n var isPageBreak = false;\n if (previousBlock instanceof ParagraphWidget && previousBlock.isEndsWithPageBreak) {\n isPageBreak = true;\n }\n var isSplittedToNewPage = this.splitWidget(widget, viewer, prevBodyWidget, index + 1, isPageBreak);\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n i--;\n }\n index = prevBodyWidget.childWidgets.indexOf(widget);\n if (isSplittedToNewPage) {\n prevBodyWidget = paragraph.getSplitWidgets()[i + 1].containerWidget;\n }\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.shiftTableWidget = function (table, viewer) {\n var tables = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tables);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var row = table.childWidgets[0];\n while (row) {\n row = this.shiftRowWidget(tables, row);\n row = row.nextRow;\n }\n this.updateWidgetsToPage(tables, [], table);\n return tables[tables.length - 1];\n };\n /**\n * @private\n */\n Layout.prototype.shiftRowWidget = function (tables, row) {\n var viewer = this.viewer;\n var rows = [row];\n var widget = this.addTableRowWidget(viewer.clientActiveArea, rows);\n viewer.updateClientAreaForRow(row, true);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n this.shiftCellWidget(cell, this.getMaxTopOrBottomCellMargin(row, 0) + row.topBorderWidth, this.getMaxTopOrBottomCellMargin(row, 1) + row.bottomBorderWidth);\n }\n viewer.updateClientAreaForRow(row, false);\n this.updateWidgetsToTable(tables, rows, row);\n return rows[rows.length - 1];\n };\n /**\n * @private\n */\n Layout.prototype.shiftCellWidget = function (cell, maxCellMarginTop, maxCellMarginBottom) {\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n viewer.updateClientAreaForCell(cell, true);\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n if (block instanceof ParagraphWidget) {\n this.shiftParagraphWidget(block);\n }\n else {\n this.shiftTableWidget(block, viewer);\n }\n viewer.updateClientAreaForBlock(block, false);\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n /**\n * @private\n */\n Layout.prototype.shiftParagraphWidget = function (paragraph) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + paragraph.height);\n this.updateWidgetToPage(this.viewer, paragraph);\n };\n Layout.prototype.shiftWidgetsForTable = function (table, viewer) {\n var prevObj = this.getBodyWidgetOfPreviousBlock(table, 0);\n var prevBodyWidget = prevObj.bodyWidget;\n var index = prevObj.index;\n var isPageBreak = prevBodyWidget.lastChild.lastChild.isEndsWithPageBreak;\n if (prevBodyWidget !== table.containerWidget) {\n if (!isPageBreak) {\n this.updateContainerWidget(table, prevBodyWidget, index + 1, true);\n }\n else {\n viewer.updateClientArea(table.bodyWidget.sectionFormat, table.bodyWidget.page);\n }\n }\n if (table.isInHeaderFooter) {\n table.containerWidget.height -= table.height;\n }\n table.y = this.viewer.clientActiveArea.y;\n this.updateVerticalPositionToTop(table, true);\n var isPageLayout = viewer instanceof PageLayoutViewer;\n var combinedTable = table.combineWidget(this.viewer);\n this.viewer.layout.updateChildLocationForTable(combinedTable.y, combinedTable);\n this.clearTableWidget(combinedTable, true, false);\n this.shiftTableWidget(combinedTable, this.viewer);\n this.updateVerticalPositionToTop(table, false);\n };\n Layout.prototype.updateVerticalPositionToTop = function (table, isUpdateTop) {\n //Iterate the tableWidgets counts\n for (var i = 0; i < table.getSplitWidgets().length; i++) {\n var tablewidget = table.getSplitWidgets()[i];\n //Iterate the tableWidget child items\n for (var j = 0; j < tablewidget.childWidgets.length; j++) {\n var rowWidget = tablewidget.childWidgets[j];\n //Iterate the RowWidgets child items\n for (var k = 0; k < rowWidget.childWidgets.length; k++) {\n var cellWidget = rowWidget.childWidgets[k];\n //Iterate the RowWidgets child items\n this.viewer.layout.updateCellVerticalPosition(cellWidget, isUpdateTop, false);\n }\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitWidget = function (paragraphWidget, viewer, previousBodyWidget, index, isPageBreak) {\n var firstLine = paragraphWidget.childWidgets[0];\n var maxElementHeight = this.getMaxElementHeight(firstLine, viewer);\n var paragraphView = paragraphWidget.getSplitWidgets();\n var nextBodyWidget = paragraphWidget.containerWidget;\n if (viewer.clientActiveArea.height >= maxElementHeight && !isPageBreak) {\n var splittedWidget = undefined;\n var widgetIndex = paragraphView.indexOf(paragraphWidget);\n if (widgetIndex < (paragraphView.length - 1)) {\n splittedWidget = paragraphView[widgetIndex + 1];\n nextBodyWidget = splittedWidget.containerWidget;\n }\n else {\n splittedWidget = new ParagraphWidget();\n splittedWidget.index = paragraphWidget.index;\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.width = paragraphWidget.width;\n splittedWidget.x = paragraphWidget.x;\n splittedWidget.y = paragraphWidget.y;\n paragraphView.push(splittedWidget);\n }\n if (previousBodyWidget !== paragraphWidget.containerWidget) {\n this.updateContainerWidget(paragraphWidget, previousBodyWidget, index, true);\n }\n for (var i = paragraphWidget.childWidgets.length - 1; i > 0; i--) {\n if (this.isFitInClientArea(paragraphWidget, viewer)) {\n break;\n }\n else {\n var line = paragraphWidget.childWidgets[i];\n //Moves the line widget to next widget.\n this.updateParagraphWidgetInternal(line, splittedWidget, 0);\n }\n }\n if (isNullOrUndefined(splittedWidget.containerWidget) && splittedWidget.childWidgets.length > 0) {\n var y = viewer.clientActiveArea.y;\n // tslint:disable-next-line:max-line-length\n var clientArea = new Rect(viewer.clientArea.x, viewer.clientArea.y, viewer.clientArea.width, viewer.clientArea.height);\n var activeArea = new Rect(viewer.clientActiveArea.x, viewer.clientActiveArea.y, viewer.clientActiveArea.width, viewer.clientActiveArea.height);\n //Checks whether next node exists, else adds new page.\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget);\n // nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, viewer);\n nextBodyWidget.childWidgets.splice(0, 0, splittedWidget);\n nextBodyWidget.height += splittedWidget.height;\n splittedWidget.containerWidget = nextBodyWidget;\n if (nextBodyWidget.childWidgets.length === 1 && nextBodyWidget.firstChild instanceof ParagraphWidget &&\n nextBodyWidget.firstChild.equals(paragraphWidget)) {\n paragraphWidget.x = paragraphWidget.x;\n paragraphWidget.y = y;\n return true;\n }\n else {\n //Resetting Client area\n viewer.clientArea = clientArea;\n viewer.clientActiveArea = activeArea;\n }\n }\n }\n else {\n nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, this.viewer);\n if (paragraphWidget.containerWidget !== nextBodyWidget) {\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget);\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n }\n }\n if (previousBodyWidget === paragraphWidget.containerWidget) {\n paragraphWidget.y = viewer.clientActiveArea.y;\n viewer.cutFromTop(viewer.clientActiveArea.y + paragraphWidget.height);\n }\n else {\n //Updates client area based on next body widget.\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n }\n return false;\n };\n Layout.prototype.getMaxElementHeight = function (lineWidget, viewer) {\n var height = 0;\n // tslint:disable-next-line:max-line-length\n if (lineWidget.children.length === 0 || ((lineWidget.children.length === 1 && lineWidget.children[0] instanceof ListTextElementBox) || (lineWidget.children.length === 2 && lineWidget.children[0] instanceof ListTextElementBox && lineWidget.children[1] instanceof ListTextElementBox))) {\n var topMargin = 0;\n var bottomMargin = 0;\n height = viewer.selection.getParagraphMarkSize(lineWidget.paragraph, topMargin, bottomMargin).height;\n height += topMargin;\n if (lineWidget.children.length > 0) {\n var element = lineWidget.children[0];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n else {\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n return height;\n };\n Layout.prototype.createOrGetNextBodyWidget = function (bodyWidget, viewer) {\n var nextBodyWidget = undefined;\n var pageIndex = 0;\n pageIndex = viewer.pages.indexOf(bodyWidget.page);\n var page = undefined;\n var index = undefined;\n index = bodyWidget.index;\n if (pageIndex === viewer.pages.length - 1\n || viewer.pages[pageIndex + 1].sectionIndex !== index) {\n var currentWidget = new BodyWidget();\n currentWidget.sectionFormat = bodyWidget.sectionFormat;\n currentWidget.index = bodyWidget.index;\n page = viewer.createNewPage(currentWidget);\n if (viewer.pages[pageIndex + 1].sectionIndex !== index) {\n viewer.insertPage(pageIndex + 1, page);\n }\n nextBodyWidget = page.bodyWidgets[0];\n }\n else {\n page = viewer.pages[pageIndex + 1];\n nextBodyWidget = page.bodyWidgets[0];\n }\n return nextBodyWidget;\n };\n Layout.prototype.isFitInClientArea = function (paragraphWidget, viewer) {\n var lastLine = paragraphWidget.childWidgets[paragraphWidget.childWidgets.length - 1];\n var height = paragraphWidget.height;\n var maxElementHeight = this.getMaxElementHeight(lastLine, viewer);\n if (lastLine.height > maxElementHeight) {\n height -= lastLine.height - maxElementHeight;\n }\n return viewer.clientActiveArea.height >= height;\n };\n // tslint:disable-next-line:max-line-length\n Layout.prototype.shiftToPreviousWidget = function (paragraphWidget, viewer, previousWidget, isPageBreak) {\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var line = paragraphWidget.childWidgets[i];\n var maxElementHeight = this.getMaxElementHeight(line, viewer);\n if (viewer.clientActiveArea.height >= maxElementHeight && !isPageBreak) {\n //Moves the line widget to previous widget.\n this.updateParagraphWidgetInternal(line, previousWidget, previousWidget.childWidgets.length);\n i--;\n viewer.cutFromTop(viewer.clientActiveArea.y + line.height);\n if (isNullOrUndefined(paragraphWidget.childWidgets)) {\n break;\n }\n }\n else {\n var bodyWidget = previousWidget.containerWidget;\n var nextBodyWidget = this.createOrGetNextBodyWidget(bodyWidget, viewer);\n if (paragraphWidget.containerWidget !== nextBodyWidget) {\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget);\n }\n if (bodyWidget !== nextBodyWidget) {\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n }\n //Updates client area based on next page.\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n break;\n }\n }\n };\n Layout.prototype.updateParagraphWidgetInternal = function (lineWidget, newParagraphWidget, index) {\n if (!isNullOrUndefined(lineWidget.paragraph)) {\n lineWidget.paragraph.childWidgets.splice(lineWidget.paragraph.childWidgets.indexOf(lineWidget), 1);\n lineWidget.paragraph.height -= lineWidget.height;\n if (!isNullOrUndefined(lineWidget.paragraph.containerWidget)) {\n lineWidget.paragraph.containerWidget.height -= lineWidget.height;\n }\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(lineWidget.paragraph.childWidgets) || lineWidget.paragraph.childWidgets.length === 0) {\n lineWidget.paragraph.destroyInternal(this.viewer);\n }\n }\n newParagraphWidget.childWidgets.splice(index, 0, lineWidget);\n lineWidget.paragraph = newParagraphWidget;\n newParagraphWidget.height += lineWidget.height;\n if (!isNullOrUndefined(newParagraphWidget.containerWidget)) {\n newParagraphWidget.containerWidget.height += lineWidget.height;\n }\n };\n Layout.prototype.shiftNextWidgets = function (blockAdv) {\n var block = blockAdv;\n while (block.nextWidget instanceof BlockWidget) {\n block = block.nextWidget;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n }\n };\n /**\n * @private\n */\n Layout.prototype.updateContainerWidget = function (widget, bodyWidget, index, destroyAndScroll) {\n if (!isNullOrUndefined(widget.containerWidget)) {\n widget.containerWidget.childWidgets.splice(widget.containerWidget.childWidgets.indexOf(widget), 1);\n widget.containerWidget.height -= bodyWidget.height;\n if ((isNullOrUndefined(widget.containerWidget.childWidgets) || widget.containerWidget.childWidgets.length === 0)\n && widget.containerWidget instanceof BodyWidget && widget.containerWidget !== bodyWidget && destroyAndScroll) {\n var page = widget.containerWidget.page;\n if (this.viewer.pages[this.viewer.pages.length - 1] === page &&\n this.viewer.visiblePages.indexOf(page) !== -1) {\n this.viewer.scrollToBottom();\n }\n if (isNullOrUndefined(page.nextPage) || page.nextPage.bodyWidgets[0].index !== widget.containerWidget.index) {\n widget.containerWidget.destroyInternal(this.viewer);\n }\n }\n }\n bodyWidget.childWidgets.splice(index, 0, widget);\n bodyWidget.height += bodyWidget.height;\n widget.containerWidget = bodyWidget;\n };\n Layout.prototype.getBodyWidgetOfPreviousBlock = function (block, index) {\n index = 0;\n var prevBodyWidget = undefined;\n var previousBlock = block.previousRenderedWidget;\n prevBodyWidget = (previousBlock && previousBlock.containerWidget.equals(block.containerWidget)) ?\n previousBlock.containerWidget : block.containerWidget;\n index = previousBlock && previousBlock.containerWidget.equals(block.containerWidget) ?\n prevBodyWidget.childWidgets.indexOf(previousBlock) : block.containerWidget.childWidgets.indexOf(block);\n return { bodyWidget: prevBodyWidget, index: index };\n };\n /**\n * @private\n */\n Layout.prototype.moveBlocksToNextPage = function (block) {\n var body = block.bodyWidget;\n var page = body.page;\n var pageIndex = page.index + 1;\n var nextPage = undefined;\n var nextBody = undefined;\n var insertPage = false;\n if (this.viewer.pages.length > pageIndex) {\n nextPage = this.viewer.pages[pageIndex];\n if (nextPage.bodyWidgets.length === 0 || !body.equals(nextPage.bodyWidgets[0])) {\n nextPage = undefined;\n insertPage = true;\n }\n else {\n nextBody = nextPage.bodyWidgets[0];\n this.viewer.updateClientArea(nextBody.sectionFormat, nextBody.page);\n }\n }\n if (isNullOrUndefined(nextPage)) {\n nextBody = this.createSplitBody(body);\n nextPage = this.viewer.createNewPage(nextBody, pageIndex);\n if (insertPage) {\n this.viewer.insertPage(pageIndex, nextPage);\n }\n }\n //tslint:disable :no-constant-condition\n do {\n var lastBlock = body.lastChild;\n if (block === lastBlock) {\n break;\n }\n body.childWidgets.pop();\n nextBody.childWidgets.splice(0, 0, lastBlock);\n lastBlock.containerWidget = nextBody;\n nextBody.height += lastBlock.height;\n } while (true);\n return nextBody;\n };\n Layout.prototype.createSplitBody = function (body) {\n var newBody = this.addBodyWidget(this.viewer.clientActiveArea);\n newBody.sectionFormat = body.sectionFormat;\n newBody.index = body.index;\n return newBody;\n };\n //endregion\n //#region Relayout Parargaph \n /**\n * Relayout Paragraph from specified line widget\n * @param paragraph Paragraph to reLayout\n * @param lineIndex start line index to reLayout\n * @private\n */\n Layout.prototype.reLayoutLine = function (paragraph, lineIndex) {\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n }\n var lineWidget;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n lineWidget = paragraph.getSplitWidgets()[0].firstChild;\n }\n else {\n lineWidget = paragraph.childWidgets[lineIndex];\n }\n var lineToLayout = lineWidget.previousLine;\n if (isNullOrUndefined(lineToLayout)) {\n lineToLayout = lineWidget;\n }\n var currentParagraph = lineToLayout.paragraph;\n var bodyWidget = paragraph.containerWidget;\n bodyWidget.height -= paragraph.height;\n if (this.viewer.owner.enableHeaderAndFooter || paragraph.isInHeaderFooter) {\n // tslint:disable-next-line:max-line-length\n this.viewer.updateHCFClientAreaWithTop(paragraph.bodyWidget.sectionFormat, this.viewer.isBlockInHeader(paragraph), bodyWidget.page);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n this.viewer.updateClientAreaForBlock(paragraph, true);\n if (lineToLayout.paragraph.isEmpty()) {\n this.viewer.cutFromTop(paragraph.y);\n this.layoutParagraph(paragraph, 0);\n }\n else {\n this.updateClientAreaForLine(lineToLayout.paragraph, lineToLayout, 0);\n this.layoutListItems(lineToLayout.paragraph);\n if (lineToLayout.isFirstLine() && !isNullOrUndefined(paragraph.paragraphFormat)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n do {\n lineToLayout = this.layoutLine(lineToLayout, 0);\n paragraph = lineToLayout.paragraph;\n lineToLayout = lineToLayout.nextLine;\n } while (lineToLayout);\n this.updateWidgetToPage(this.viewer, paragraph);\n this.viewer.updateClientAreaForBlock(paragraph, false);\n }\n this.layoutNextItemsBlock(paragraph, this.viewer);\n };\n return Layout;\n}());\nexport { Layout };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Rect, ImageElementBox, ParagraphWidget, ListTextElementBox, TableRowWidget, TableWidget, TableCellWidget, FieldElementBox, TabElementBox } from './page';\nimport { Layout } from './layout';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar Renderer = /** @class */ (function () {\n function Renderer(viewer) {\n this.isPrinting = false;\n this.pageLeft = 0;\n this.pageTop = 0;\n this.isFieldCode = false;\n this.viewer = viewer;\n }\n Object.defineProperty(Renderer.prototype, \"pageCanvas\", {\n /**\n * Gets page canvas.\n * @private\n */\n get: function () {\n if (this.isPrinting) {\n if (isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn = document.createElement('canvas');\n this.pageCanvasIn.getContext('2d').save();\n }\n return this.pageCanvasIn;\n }\n return isNullOrUndefined(this.viewer) ? undefined : this.viewer.containerCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionCanvas\", {\n /**\n * Gets selection canvas.\n */\n get: function () {\n return isNullOrUndefined(this.viewer) ? undefined : this.viewer.selectionCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"pageContext\", {\n /**\n * Gets page context.\n */\n get: function () {\n return this.pageCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionContext\", {\n /**\n * Gets selection context.\n */\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the color.\n * @private\n */\n Renderer.prototype.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n if (color.length > 7) {\n return color.substr(0, 7);\n }\n }\n }\n return color;\n };\n /**\n * Renders widgets.\n * @param {Page} page\n * @param {number} left\n * @param {number} top\n * @param {number} width\n * @param {number} height\n * @private\n */\n Renderer.prototype.renderWidgets = function (page, left, top, width, height) {\n if (isNullOrUndefined(this.pageCanvas) || isNullOrUndefined(page)) {\n return;\n }\n this.pageContext.fillStyle = this.getColor(this.viewer.backgroundColor);\n this.pageContext.beginPath();\n this.pageContext.fillRect(left, top, width, height);\n this.pageContext.closePath();\n this.pageContext.strokeStyle = this.viewer.owner.pageOutline;\n this.pageContext.strokeRect(left, top, width, height);\n this.pageLeft = left;\n this.pageTop = top;\n if (this.isPrinting) {\n this.setPageSize(page);\n }\n else {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(left, top, width, height);\n this.pageContext.clip();\n }\n if (page.headerWidget) {\n this.renderHFWidgets(page, page.headerWidget, width, true);\n }\n if (page.footerWidget) {\n this.renderHFWidgets(page, page.footerWidget, width, false);\n }\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n this.render(page, page.bodyWidgets[i]);\n }\n if (this.viewer.owner.enableHeaderAndFooter && !this.isPrinting) {\n this.renderHeaderSeparator(page, this.pageLeft, this.pageTop, page.headerWidget);\n }\n this.pageLeft = 0;\n this.pageTop = 0;\n this.pageContext.restore();\n };\n /**\n * Sets page size.\n * @param {Page} page\n */\n Renderer.prototype.setPageSize = function (page) {\n this.pageContext.clearRect(0, 0, this.pageCanvas.width, this.pageCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n this.pageContext.restore();\n this.selectionContext.restore();\n var width = page.boundingRectangle.width;\n var height = page.boundingRectangle.height;\n var dpr = Math.max(1, window.devicePixelRatio || 1);\n if (this.pageCanvas.width !== width * dpr || this.pageCanvas.height !== height * dpr) {\n this.pageCanvas.height = height * dpr;\n this.pageCanvas.width = width * dpr;\n this.pageCanvas.style.height = height + 'px';\n this.pageCanvas.style.width = width + 'px';\n this.pageContext.globalAlpha = 1;\n this.pageContext.scale(dpr, dpr);\n }\n };\n /**\n * Renders header footer widget.\n * @param {Page} page\n * @param {HeaderFooterWidget} headFootWidget\n */\n Renderer.prototype.renderHFWidgets = function (page, widget, width, isHeader) {\n this.pageContext.globalAlpha = this.viewer.owner.enableHeaderAndFooter ? 1 : 0.65;\n var cliped = false;\n if (isHeader) {\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var widgetHeight = Math.max((widget.y + widget.height), topMargin);\n var headerFooterHeight = page.boundingRectangle.height / 100 * 40;\n if (widgetHeight > headerFooterHeight) {\n cliped = true;\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.pageLeft, this.pageTop, width, this.getScaledValue(headerFooterHeight));\n this.pageContext.clip();\n }\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[i];\n this.renderWidget(page, block);\n }\n if (cliped) {\n this.pageContext.restore();\n }\n this.pageContext.globalAlpha = this.viewer.owner.enableHeaderAndFooter ? 0.65 : 1;\n };\n Renderer.prototype.renderHeaderSeparator = function (page, left, top, widget) {\n //Header Widget\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var y = this.getScaledValue(Math.max((widget.y + widget.height), topMargin));\n var pageWidth = this.getScaledValue(page.boundingRectangle.width);\n var ctx = this.pageContext;\n ctx.save();\n ctx.globalAlpha = 0.65;\n var headerFooterHeight = (this.getScaledValue(page.boundingRectangle.height) / 100) * 40;\n //Maximum header height limit \n y = Math.min(y, headerFooterHeight);\n //Dash line Separator\n this.renderDashLine(ctx, left, top + y, pageWidth, '#000000', false);\n var type = this.getHeaderFooterType(page, true);\n ctx.font = '9pt Arial';\n var width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + y, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, y + top + 15);\n if (page.footerWidget) {\n //Footer Widget\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n // tslint:disable-next-line:max-line-length\n var footerHeight = this.getScaledValue(page.boundingRectangle.height) -\n this.getScaledValue(Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidget.sectionFormat.bottomMargin)));\n //Maximum footer height limit \n footerHeight = Math.max((this.getScaledValue(page.boundingRectangle.height) - headerFooterHeight), footerHeight);\n this.renderDashLine(ctx, left, top + footerHeight, pageWidth, '#000000', false);\n type = this.getHeaderFooterType(page, false);\n width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + footerHeight - 20, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, top + footerHeight - 5);\n ctx.restore();\n }\n };\n Renderer.prototype.getHeaderFooterType = function (page, isHeader) {\n var type;\n type = isHeader ? 'Header' : 'Footer';\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage && this.viewer.pages.indexOf(page) === 0) {\n type = isHeader ? 'First Page Header' : 'First Page Footer';\n }\n else if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if ((this.viewer.pages.indexOf(page) + 1) % 2 === 0) {\n type = isHeader ? 'Even Page Header' : 'Even Page Footer';\n }\n else {\n type = isHeader ? 'Odd Page Header' : 'Odd Page Footer';\n }\n }\n return type;\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderDashLine = function (ctx, x, y, width, fillStyle, isSmallDash) {\n ctx.beginPath();\n ctx.strokeStyle = fillStyle;\n ctx.lineWidth = 1;\n if (isSmallDash) {\n ctx.setLineDash([3, 2]);\n }\n else {\n ctx.setLineDash([6, 4]);\n }\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n ctx.setLineDash([]);\n ctx.closePath();\n };\n Renderer.prototype.renderHeaderFooterMark = function (ctx, x, y, w, h) {\n ctx.beginPath();\n ctx.fillStyle = 'lightgray';\n ctx.fillRect(x, y, w, h);\n ctx.strokeStyle = 'black';\n ctx.strokeRect(x, y, w, h);\n ctx.closePath();\n };\n Renderer.prototype.renderHeaderFooterMarkText = function (ctx, content, x, y) {\n ctx.beginPath();\n ctx.fillStyle = '#000000';\n ctx.textBaseline = 'alphabetic';\n ctx.fillText(content, x, y);\n ctx.closePath();\n };\n /**\n * Renders body widget.\n * @param {Page} page\n * @param {BodyWidget} bodyWidget\n */\n Renderer.prototype.render = function (page, bodyWidget) {\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var widget = bodyWidget.childWidgets[i];\n if (i === 0 && bodyWidget.childWidgets[0] instanceof TableWidget && page.repeatHeaderRowTableWidget) {\n // tslint:disable-next-line:max-line-length\n this.renderHeader(page, widget, this.viewer.layout.getHeader(bodyWidget.childWidgets[0]));\n }\n this.renderWidget(page, widget);\n }\n };\n /**\n * Renders block widget.\n * @param {Page} page\n * @param {Widget} widget\n */\n Renderer.prototype.renderWidget = function (page, widget) {\n if (widget instanceof ParagraphWidget) {\n this.renderParagraphWidget(page, widget);\n }\n else {\n this.renderTableWidget(page, widget);\n }\n };\n /**\n * Renders header.\n * @param {Page} page\n * @param {TableWidget} widget\n * @param {WRow} header\n * @private\n */\n Renderer.prototype.renderHeader = function (page, widget, header) {\n if (isNullOrUndefined(header)) {\n return;\n }\n var top = page.viewer.clientArea.y;\n for (var i = 0; i <= header.rowIndex; i++) {\n if (header.ownerTable.getSplitWidgets()[0].childWidgets.length === 0) {\n return;\n }\n var row = header.ownerTable.getSplitWidgets()[0].childWidgets[0];\n var headerWidget = row.clone();\n headerWidget.containerWidget = row.containerWidget;\n // tslint:disable-next-line:max-line-length\n page.viewer.updateClientAreaLocation(headerWidget, new Rect(page.viewer.clientArea.x, top, headerWidget.width, headerWidget.height));\n page.viewer.layout.updateChildLocationForRow(top, headerWidget);\n var cell = undefined;\n //Renders table cell outline rectangle - Border and background color.\n for (var j = 0; j < headerWidget.childWidgets.length; j++) {\n cell = headerWidget.childWidgets[j];\n this.renderTableCellWidget(page, cell);\n }\n top += headerWidget.height;\n }\n if (widget.y !== top) {\n //this.Location.Y = top;\n page.viewer.layout.updateChildLocationForTable(top, widget);\n }\n };\n /**\n * Renders paragraph widget.\n * @param {Page} page\n * @param {ParagraphWidget} paraWidget\n */\n Renderer.prototype.renderParagraphWidget = function (page, paraWidget) {\n var top = paraWidget.y;\n var left = paraWidget.x;\n for (var i = 0; i < paraWidget.childWidgets.length; i++) {\n var widget = paraWidget.childWidgets[i];\n this.renderLine(widget, page, left, top);\n top += widget.height;\n }\n };\n /**\n * Renders table widget.\n * @param {Page} page\n * @param {TableWidget} tableWidget\n */\n Renderer.prototype.renderTableWidget = function (page, tableWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var widget = tableWidget.childWidgets[i];\n this.renderTableRowWidget(page, widget);\n if (tableWidget.tableFormat.cellSpacing > 0) {\n this.renderTableOutline(tableWidget);\n }\n }\n };\n /**\n * Renders table row widget.\n * @param {Page} page\n * @param {Widget} rowWidget\n */\n Renderer.prototype.renderTableRowWidget = function (page, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n this.renderTableCellWidget(page, widget);\n }\n };\n /**\n * Renders table cell widget.\n * @param {Page} page\n * @param {TableCellWidget} cellWidget\n */\n Renderer.prototype.renderTableCellWidget = function (page, cellWidget) {\n if (!this.isPrinting) {\n if (this.getScaledValue(cellWidget.y, 2) + cellWidget.height * this.viewer.zoomFactor < 0 ||\n this.getScaledValue(cellWidget.y, 2) > this.viewer.visibleBounds.height) {\n return;\n }\n }\n var widgetHeight = 0;\n if (!this.isPrinting && page.viewer.owner.selection && page.viewer.owner.selection.selectedWidgets.length > 0) {\n page.viewer.owner.selection.addSelectionHighlightTable(this.selectionContext, cellWidget);\n }\n this.renderTableCellOutline(page.viewer, cellWidget);\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n var widget = cellWidget.childWidgets[i];\n var width = cellWidget.width + cellWidget.margin.left - cellWidget.leftBorderWidth;\n this.clipRect(cellWidget.x, cellWidget.y, this.getScaledValue(width), this.getScaledValue(cellWidget.height));\n this.renderWidget(page, widget);\n this.pageContext.restore();\n }\n };\n /**\n * Renders line widget.\n * @param {LineWidget} lineWidget\n * @param {Page} page\n * @param {number} left\n * @param {number} top\n */\n Renderer.prototype.renderLine = function (lineWidget, page, left, top) {\n if (!this.isPrinting && page.viewer.owner.selection && page.viewer.owner.selection.selectedWidgets.length > 0) {\n page.viewer.owner.selection.addSelectionHighlight(this.selectionContext, lineWidget, top);\n }\n if (lineWidget.isFirstLine()) {\n left += HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.firstLineIndent);\n }\n if (this.viewer.owner.searchModule) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(page.viewer.owner.searchModule.searchHighlighters) && page.viewer.owner.searchModule.searchHighlighters.containsKey(lineWidget)) {\n var widgetInfo = page.viewer.owner.searchModule.searchHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = '#ffe97f';\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(lineWidget.height));\n }\n }\n }\n for (var i = 0; i < lineWidget.children.length; i++) {\n var elementBox = lineWidget.children[i];\n if (elementBox instanceof FieldElementBox || this.isFieldCode ||\n (elementBox.width === 0 && elementBox.height === 0)) {\n if (this.isFieldCode) {\n elementBox.width = 0;\n }\n left += elementBox.width + elementBox.margin.left;\n this.toSkipFieldCode(elementBox);\n continue;\n }\n var underlineY = this.getUnderlineYPosition(lineWidget);\n if (!this.isPrinting) {\n if (this.getScaledValue(top + elementBox.margin.top, 2) + elementBox.height * this.viewer.zoomFactor < 0 ||\n this.getScaledValue(top + elementBox.margin.top, 2) > this.viewer.visibleBounds.height) {\n left += elementBox.width + elementBox.margin.left;\n continue;\n }\n }\n if (elementBox instanceof ListTextElementBox) {\n this.renderListTextElementBox(elementBox, left, top, underlineY);\n }\n else if (elementBox instanceof ImageElementBox) {\n this.renderImageElementBox(elementBox, left, top, underlineY);\n }\n else {\n this.renderTextElementBox(elementBox, left, top, underlineY);\n }\n left += elementBox.width + elementBox.margin.left;\n }\n };\n Renderer.prototype.toSkipFieldCode = function (element) {\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n if ((!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n this.isFieldCode = true;\n }\n }\n else if (element.fieldType === 2 || element.fieldType === 1) {\n this.isFieldCode = false;\n }\n }\n };\n /**\n * Gets underline y position.\n * @param {LineWidget} lineWidget\n * @private\n */\n Renderer.prototype.getUnderlineYPosition = function (lineWidget) {\n var height = 0;\n var lineHeight = 0;\n for (var i = 0; i < lineWidget.children.length; i++) {\n if (lineWidget.children[i] instanceof FieldElementBox ||\n (lineWidget.children[i].width === 0 && lineWidget.children[i].height === 0)) {\n continue;\n }\n if (height < lineWidget.children[i].height + lineWidget.children[i].margin.top) {\n height = lineWidget.children[i].margin.top + lineWidget.children[i].height;\n lineHeight = lineWidget.children[i].height / 20;\n }\n }\n return height - 2 * lineHeight;\n };\n /**\n * Renders list element box\n * @param {ListTextElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n */\n Renderer.prototype.renderListTextElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var format = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = elementBox.line.paragraph.characterFormat;\n var color = format.fontColor === '#000000' ? breakCharacterFormat.fontColor : format.fontColor;\n this.pageContext.textBaseline = 'top';\n var bold = '';\n var italic = '';\n var fontFamily = format.fontFamily === 'Verdana' ? breakCharacterFormat.fontFamily : format.fontFamily;\n var fontSize = format.fontSize === 11 ? breakCharacterFormat.fontSize : format.fontSize;\n // tslint:disable-next-line:max-line-length\n var baselineAlignment = format.baselineAlignment === 'Normal' ? breakCharacterFormat.baselineAlignment : format.baselineAlignment;\n bold = format.bold ? 'bold' : breakCharacterFormat.bold ? 'bold' : '';\n italic = format.italic ? 'italic' : breakCharacterFormat.italic ? 'italic' : '';\n fontSize = fontSize === 0 ? 0.5 : fontSize / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var strikethrough = format.strikethrough === 'None' ? breakCharacterFormat.strikethrough : format.strikethrough;\n var highlightColor = format.highlightColor === 'NoColor' ? breakCharacterFormat.highlightColor :\n format.highlightColor;\n if (highlightColor !== 'NoColor') {\n if (highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(highlightColor);\n }\n else {\n this.pageContext.fillStyle = this.getColor(highlightColor);\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize * this.viewer.zoomFactor + 'pt' + ' ' + fontFamily;\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n this.pageContext.fillStyle = this.getColor(color);\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillText(elementBox.text, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width));\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline)) {\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, baselineAlignment);\n }\n if (strikethrough !== 'None') {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, baselineAlignment);\n }\n };\n /**\n * Renders text element box.\n * @param {TextElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderTextElementBox = function (elementBox, left, top, underlineY) {\n var isHeightType = false;\n var containerWidget = elementBox.line.paragraph.containerWidget;\n if (containerWidget instanceof TableCellWidget) {\n isHeightType = (containerWidget.ownerRow.rowFormat.heightType === 'Exactly');\n }\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n if (isHeightType) {\n // tslint:disable-next-line:max-line-length\n this.clipRect(containerWidget.x, containerWidget.y, this.getScaledValue(containerWidget.width), this.getScaledValue(containerWidget.height));\n }\n var format = elementBox.characterFormat;\n if (format.highlightColor !== 'NoColor') {\n if (format.highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(format.highlightColor);\n }\n else {\n this.pageContext.fillStyle = this.getColor(format.highlightColor);\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n var color = format.fontColor;\n this.pageContext.textBaseline = 'top';\n var bold = '';\n var italic = '';\n var fontSize = 11;\n bold = format.bold ? 'bold' : '';\n italic = format.italic ? 'italic' : '';\n fontSize = format.fontSize === 0 ? 0.5 : format.fontSize / (format.baselineAlignment === 'Normal' ? 1 : 1.5);\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize * this.viewer.zoomFactor + 'pt' + ' ' + format.fontFamily;\n if (format.baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n this.pageContext.fillStyle = this.getColor(color);\n var scaledWidth = this.getScaledValue(elementBox.width);\n var text = elementBox.text;\n // tslint:disable-next-line:max-line-length\n if (elementBox instanceof TabElementBox) {\n var tabElement = elementBox;\n if (tabElement.tabText === '' && !isNullOrUndefined(tabElement.tabLeader) && tabElement.tabLeader !== 'None') {\n text = this.getTabLeader(elementBox);\n tabElement.tabText = text;\n }\n else if (tabElement.tabText !== '') {\n text = tabElement.tabText;\n }\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillText(text, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), scaledWidth);\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline)) {\n // tslint:disable-next-line:max-line-length\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, format.baselineAlignment);\n }\n if (format.strikethrough !== 'None' && !isNullOrUndefined(format.strikethrough)) {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, format.baselineAlignment);\n }\n if (isHeightType) {\n this.pageContext.restore();\n }\n };\n /**\n * Returns tab leader\n */\n Renderer.prototype.getTabLeader = function (elementBox) {\n var textWidth = 0;\n var tabString = this.getTabLeaderString(elementBox.tabLeader);\n var tabText = tabString;\n textWidth = this.viewer.textHelper.getWidth(tabText, elementBox.characterFormat);\n var count = Math.floor(elementBox.width / textWidth);\n for (var i = 0; i <= count; i++) {\n tabText += tabString;\n }\n return tabText.slice(0, -1);\n };\n /**\n * Returns tab leader string.\n */\n Renderer.prototype.getTabLeaderString = function (tabLeader) {\n var tabString = '';\n switch (tabLeader) {\n case 'Dot':\n tabString = '.';\n break;\n case 'Hyphen':\n tabString = '-';\n break;\n case 'Underscore':\n tabString = '_';\n break;\n }\n return tabString;\n };\n /**\n * Clips the rectangle with specified position.\n * @param {number} xPos\n * @param {number} yPos\n * @param {number} width\n * @param {number} height\n */\n Renderer.prototype.clipRect = function (xPos, yPos, width, height) {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.getScaledValue(xPos, 1), this.getScaledValue(yPos, 2), width, height);\n this.pageContext.clip();\n };\n /**\n * Renders underline.\n * @param {ElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n * @param {string} color\n * @param {Underline} underline\n * @param {BaselineAlignment} baselineAlignment\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderUnderline = function (elementBox, left, top, underlineY, color, underline, baselineAlignment) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n var underlineHeight = renderedHeight / 20;\n var y = 0;\n if (baselineAlignment === 'Subscript' || elementBox instanceof ListTextElementBox) {\n y = (renderedHeight - 2 * underlineHeight) + top;\n topMargin += elementBox.height - renderedHeight;\n y += topMargin > 0 ? topMargin : 0;\n }\n else {\n y = underlineY + top;\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y, 2), this.getScaledValue(elementBox.width), this.getScaledValue(underlineHeight));\n };\n /**\n * Renders strike through.\n * @param {ElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {Strikethrough} strikethrough\n * @param {string} color\n * @param {BaselineAlignment} baselineAlignment\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderStrikeThrough = function (elementBox, left, top, strikethrough, color, baselineAlignment) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - renderedHeight;\n }\n top += topMargin > 0 ? topMargin : 0;\n var lineHeight = renderedHeight / 20;\n var y = (renderedHeight / 2) + (0.5 * lineHeight);\n var lineCount = 0;\n if (strikethrough === 'DoubleStrike') {\n y -= lineHeight;\n }\n while (lineCount < (strikethrough === 'DoubleStrike' ? 2 : 1)) {\n lineCount++;\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y + top, 2), this.getScaledValue(elementBox.width), this.getScaledValue(lineHeight));\n y += 2 * lineHeight;\n }\n };\n /**\n * Renders image element box.\n * @param {ImageElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderImageElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var color = 'black';\n this.pageContext.textBaseline = 'top';\n var widgetWidth = 0;\n var isClipped = false;\n if (topMargin < 0 || elementBox.line.paragraph.width < elementBox.width) {\n var containerWid = elementBox.line.paragraph.containerWidget;\n // if (containerWid instanceof BodyWidget) {\n // widgetWidth = containerWid.width + containerWid.x;\n // } else \n if (containerWid instanceof TableCellWidget) {\n var leftIndent = 0;\n if (containerWid.childWidgets[0] instanceof ParagraphWidget) {\n var paraAdv = containerWid.childWidgets[0];\n leftIndent = paraAdv.paragraphFormat.leftIndent;\n }\n widgetWidth = containerWid.width + containerWid.margin.left - containerWid.leftBorderWidth - leftIndent;\n isClipped = true;\n // tslint:disable-next-line:max-line-length\n this.clipRect(left + leftMargin, top + topMargin, this.getScaledValue(widgetWidth), this.getScaledValue(containerWid.height));\n }\n }\n if (elementBox.isMetaFile) {\n /* tslint:disable:no-empty */\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n };\n /**\n * Renders table outline.\n * @param {TableWidget} tableWidget\n */\n Renderer.prototype.renderTableOutline = function (tableWidget) {\n var layout = new Layout(this.viewer);\n var table = tableWidget;\n tableWidget.width = this.viewer.layout.getTableWidth(table);\n var border = layout.getTableTopBorder(table.tableFormat.borders);\n var lineWidth = 0;\n //ToDo: Need to draw the borders based on the line style.\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth);\n // }\n border = layout.getTableTopBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y - lineWidth / 2, lineWidth);\n // }\n border = layout.getTableRightBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth);\n // }\n border = layout.getTableBottomBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y + tableWidget.height - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y + tableWidget.height - lineWidth / 2, lineWidth);\n // }\n };\n /**\n * Renders table cell outline.\n * @param {LayoutViewer} viewer\n * @param {TableCellWidget} cellWidget\n */\n Renderer.prototype.renderTableCellOutline = function (viewer, cellWidget) {\n var layout = viewer.layout;\n var borders = undefined;\n var tableCell = cellWidget;\n var cellTopMargin = 0;\n var cellBottomMargin = 0;\n var cellLeftMargin = 0;\n var cellRightMargin = 0;\n var height = 0;\n borders = tableCell.cellFormat.borders;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n cellBottomMargin = cellWidget.margin.bottom - cellWidget.containerWidget.bottomBorderWidth;\n cellTopMargin = cellWidget.margin.top - cellWidget.containerWidget.topBorderWidth;\n }\n cellLeftMargin = cellWidget.margin.left - cellWidget.leftBorderWidth;\n cellRightMargin = cellWidget.margin.right - cellWidget.rightBorderWidth;\n if (!isNullOrUndefined(tableCell.ownerRow) && tableCell.ownerRow.rowFormat.heightType === 'Exactly') {\n height = HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n if (!isNullOrUndefined(tableCell.ownerRow) && [tableCell.ownerRow].length <= 1) {\n // tslint:disable-next-line:max-line-length\n height = Math.max(HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height), cellWidget.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n height = cellWidget.height + cellTopMargin + cellBottomMargin;\n }\n }\n this.renderCellBackground(height, cellWidget);\n var border = TableCellWidget.getCellLeftBorder(tableCell);\n var lineWidth = 0;\n // if (!isNullOrUndefined(border )) { \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth()); //Renders the cell left border.\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y - cellTopMargin, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n // }\n border = TableCellWidget.getCellTopBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell top border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellWidget.margin.left, cellWidget.y - cellWidget.margin.top + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right, cellWidget.y - cellWidget.margin.top + lineWidth / 2, lineWidth);\n // }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0 || tableCell.cellIndex === tableCell.ownerRow.childWidgets.length - 1) {\n border = TableCellWidget.getCellRightBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell right border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n // }\n }\n var nextRow = tableCell.ownerRow.nextWidget;\n //Specifies the next row is within the current table widget.\n //True means current row is not rendered at page end; Otherwise False.\n var nextRowIsInCurrentTableWidget = false;\n if (!isNullOrUndefined(nextRow)) {\n var nextRowWidget = undefined;\n // if (viewer.renderedElements.containsKey(nextRow) && viewer.renderedElements.get(nextRow).length > 0) {\n nextRowWidget = nextRow;\n // }\n if (nextRowWidget instanceof TableRowWidget) {\n // tslint:disable-next-line:max-line-length\n if (cellWidget.containerWidget instanceof TableRowWidget && cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n nextRowIsInCurrentTableWidget = cellWidget.containerWidget.containerWidget.childWidgets.indexOf(nextRowWidget) !== -1;\n }\n }\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0 || tableCell.ownerRow.rowIndex === tableCell.ownerTable.childWidgets.length - 1\n || (tableCell.cellFormat.rowSpan > 1\n && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan === tableCell.ownerTable.childWidgets.length) ||\n !nextRowIsInCurrentTableWidget) {\n // tslint:disable-next-line:max-line-length\n border = (tableCell.cellFormat.rowSpan > 1 && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan === tableCell.ownerTable.childWidgets.length) ?\n //true part for vertically merged cells specifically.\n tableCell.getBorderBasedOnPriority(tableCell.cellFormat.borders.bottom, TableCellWidget.getCellBottomBorder(tableCell))\n //false part for remaining cases that has been handled inside method. \n : TableCellWidget.getCellBottomBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell bottom border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellWidget.margin.left, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, lineWidth);\n // }\n }\n border = layout.getCellDiagonalUpBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal up border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellLeftMargin, cellWidget.y + cellWidget.height + cellBottomMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y - cellTopMargin, lineWidth);\n // }\n }\n border = layout.getCellDiagonalDownBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal down border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellLeftMargin, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n }\n // }\n };\n /**\n * Renders cell background.\n * @param {number} height\n * @param {TableCellWidget} cellWidget\n */\n Renderer.prototype.renderCellBackground = function (height, cellWidget) {\n var cellFormat = cellWidget.cellFormat;\n var bgColor = cellFormat.shading.backgroundColor === '#ffffff' ?\n cellWidget.ownerTable.tableFormat.shading.backgroundColor : cellFormat.shading.backgroundColor;\n this.pageContext.beginPath();\n if (bgColor !== 'empty') {\n this.pageContext.fillStyle = this.getColor(bgColor);\n var left = cellWidget.x - cellWidget.margin.left + cellWidget.leftBorderWidth;\n var top_1 = cellWidget.y - HelperMethods.convertPointToPixel(cellWidget.topMargin);\n // tslint:disable-next-line:max-line-length\n var width = cellWidget.width + cellWidget.margin.left + cellWidget.margin.right - cellWidget.leftBorderWidth - cellWidget.rightBorderWidth;\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left, 1), this.getScaledValue(top_1, 2), this.getScaledValue(width), this.getScaledValue(height));\n this.pageContext.closePath();\n }\n };\n /**\n * Renders single border.\n * @param {WBorder} border\n * @param {number} startX\n * @param {number} startY\n * @param {number} endX\n * @param {number} endY\n * @param {number} lineWidth\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderSingleBorder = function (border, startX, startY, endX, endY, lineWidth) {\n this.pageContext.beginPath();\n this.pageContext.moveTo(this.getScaledValue(startX, 1), this.getScaledValue(startY, 2));\n this.pageContext.lineTo(this.getScaledValue(endX, 1), this.getScaledValue(endY, 2));\n this.pageContext.lineWidth = this.getScaledValue(lineWidth);\n // set line color\n this.pageContext.strokeStyle = border.color;\n if (lineWidth > 0) {\n this.pageContext.stroke();\n }\n this.pageContext.closePath();\n };\n /**\n * Gets scaled value.\n * @param {number} value\n * @param {number} type\n * @private\n */\n Renderer.prototype.getScaledValue = function (value, type) {\n if (this.isPrinting) {\n return value;\n }\n if (isNullOrUndefined(type)) {\n type = 0;\n }\n var x = value * this.viewer.zoomFactor;\n return x + (type === 1 ? this.pageLeft : (type === 2 ? this.pageTop : 0));\n };\n /**\n * Destroys the internal objects which is maintained.\n */\n Renderer.prototype.destroy = function () {\n this.viewer = undefined;\n if (!isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn.innerHTML = '';\n }\n this.pageCanvasIn = undefined;\n };\n return Renderer;\n}());\nexport { Renderer };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WCharacterFormat } from '../index';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar TextHelper = /** @class */ (function () {\n function TextHelper(viewer) {\n this.owner = viewer;\n if (!isNullOrUndefined(viewer)) {\n this.context = viewer.containerContext;\n }\n }\n Object.defineProperty(TextHelper.prototype, \"paragraphMark\", {\n get: function () {\n return '¶';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextHelper.prototype, \"lineBreakMark\", {\n get: function () {\n return '↲';\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TextHelper.prototype.getParagraphMarkWidth = function (characterFormat) {\n return this.getWidth(this.paragraphMark, characterFormat);\n };\n /**\n * @private\n */\n TextHelper.prototype.getParagraphMarkSize = function (characterFormat) {\n // Gets the text element's width;\n var width = this.getWidth(this.paragraphMark, characterFormat);\n var height = 0;\n var baselineOffset = 0;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n return {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n };\n /**\n * @private\n */\n TextHelper.prototype.getTextSize = function (elementBox, characterFormat) {\n // Gets the text element's width;\n var textTrimEndWidth = 0;\n textTrimEndWidth = this.getWidth(elementBox.text, characterFormat);\n elementBox.width = textTrimEndWidth;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n if (elementBox.text[elementBox.text.length - 1] === ' ') {\n textTrimEndWidth = this.getWidth(HelperMethods.trimEnd(elementBox.text), characterFormat);\n }\n return textTrimEndWidth;\n };\n /**\n * @private\n */\n TextHelper.prototype.getHeight = function (characterFormat) {\n // Get character format property as below predefined structure to make it easy to check and retrieve\n // Predefined static structure `[FontName];[FontSize];bold;italic` to maintain as key in the collection \n var key = this.getFormatText(characterFormat);\n if (!isNullOrUndefined(this.owner.heightInfoCollection[key])) {\n return this.owner.heightInfoCollection[key];\n }\n var sizeInfo = this.getHeightInternal(characterFormat);\n this.owner.heightInfoCollection[key] = sizeInfo;\n return sizeInfo;\n };\n /**\n * @private\n */\n TextHelper.prototype.getFormatText = function (characterFormat) {\n var formatText = characterFormat.fontFamily.toLocaleLowerCase();\n formatText += ';' + characterFormat.fontSize;\n if (characterFormat.bold) {\n formatText += ';' + 'bold';\n }\n if (characterFormat.italic) {\n formatText += ';' + 'italic';\n }\n return formatText;\n };\n /**\n * @private\n */\n TextHelper.prototype.getHeightInternal = function (characterFormat) {\n var textHeight = 0;\n var baselineOffset = 0;\n var spanElement = document.createElement('span');\n spanElement.id = 'tempSpan';\n spanElement.style.whiteSpace = 'nowrap';\n spanElement.innerText = 'm';\n this.applyStyle(spanElement, characterFormat);\n var body = document.getElementsByTagName('body');\n var parentDiv = document.createElement('div');\n parentDiv.style.display = 'inline-block';\n var tempDiv = document.createElement('div');\n tempDiv.setAttribute('style', 'display:inline-block;width: 1px; height: 0px;vertical-align: baseline;');\n parentDiv.appendChild(spanElement);\n parentDiv.appendChild(tempDiv);\n document.body.appendChild(parentDiv);\n // Sets the text element's height.\n textHeight = spanElement.offsetHeight;\n // Calculate the text element's baseline offset.\n var textTopVal = spanElement.offsetTop;\n var tempDivTopVal = tempDiv.offsetTop;\n baselineOffset = tempDivTopVal - textTopVal;\n document.body.removeChild(parentDiv);\n return { 'Height': textHeight, 'BaselineOffset': baselineOffset };\n };\n /**\n * @private\n */\n TextHelper.prototype.measureTextExcludingSpaceAtEnd = function (text, characterFormat) {\n return this.getWidth(HelperMethods.trimEnd(text), characterFormat);\n };\n /**\n * @private\n */\n TextHelper.prototype.getWidth = function (text, characterFormat) {\n if (text.match('\\v')) {\n text.replace('\\v', this.lineBreakMark);\n }\n var bold = '';\n var italic = '';\n var fontFamily = '';\n var fontSize = characterFormat.fontSize;\n bold = characterFormat.bold ? 'bold' : '';\n italic = characterFormat.italic ? 'italic' : '';\n fontFamily = characterFormat.fontFamily;\n fontSize = fontSize === 0 ? 0.5 : fontSize / (characterFormat.baselineAlignment === 'Normal' ? 1 : 1.5);\n this.context.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + fontFamily;\n return this.context.measureText(text).width;\n };\n /**\n * @private\n */\n TextHelper.prototype.applyStyle = function (spanElement, characterFormat) {\n if (!isNullOrUndefined(spanElement) && !isNullOrUndefined(characterFormat)) {\n if (characterFormat.fontFamily !== '') {\n spanElement.style.fontFamily = characterFormat.fontFamily;\n }\n var fontSize = characterFormat.fontSize;\n if (fontSize <= 0.5) {\n fontSize = 0.5;\n }\n spanElement.style.fontSize = fontSize.toString() + 'pt';\n if (characterFormat.bold) {\n spanElement.style.fontWeight = 'bold';\n }\n if (characterFormat.italic) {\n spanElement.style.fontStyle = 'italic';\n }\n }\n };\n /**\n * @private\n */\n TextHelper.prototype.measureText = function (text, characterFormat) {\n // Gets the text element's width;\n var width = this.getWidth(text, characterFormat);\n var height = 0;\n var baselineOffset = 0;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n return {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n };\n /**\n * @private\n */\n TextHelper.prototype.updateTextSize = function (elementBox, paragraph) {\n var format = new WCharacterFormat(undefined);\n var listCharacterFormat = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = paragraph.characterFormat;\n format.fontSize = listCharacterFormat.fontSize === 11 ? breakCharacterFormat.fontSize : listCharacterFormat.fontSize;\n format.fontFamily = listCharacterFormat.fontFamily === 'Verdana' ? breakCharacterFormat.fontFamily\n : listCharacterFormat.fontFamily;\n var bold = '';\n var italic = '';\n var baselineAlignment = listCharacterFormat.baselineAlignment === 'Normal' ?\n breakCharacterFormat.baselineAlignment : listCharacterFormat.baselineAlignment;\n bold = listCharacterFormat.bold ? 'bold' : breakCharacterFormat.bold ? 'bold' : '';\n italic = listCharacterFormat.italic ? 'italic' : breakCharacterFormat.italic ? 'italic' : '';\n format.baselineAlignment = baselineAlignment;\n if (bold) {\n format.bold = true;\n }\n if (italic) {\n format.italic = true;\n }\n elementBox.width = this.getWidth(elementBox.text, format);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(format);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n };\n TextHelper.prototype.destroy = function () {\n this.owner = undefined;\n this.context = undefined;\n };\n return TextHelper;\n}());\nexport { TextHelper };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Zoom = /** @class */ (function () {\n function Zoom(viewer) {\n var _this = this;\n this.onMouseWheelInternal = function (event) {\n if (event.ctrlKey === true) {\n event.preventDefault();\n var pageX = event.pageX - _this.viewer.viewerContainer.offsetLeft;\n if (pageX < _this.viewer.pageContainer.offsetWidth) {\n var wheel = navigator.userAgent.match('Firefox') ? event.detail < 0 : event.wheelDelta > 0;\n var zoomFactor = _this.viewer.zoomFactor;\n if (wheel) {\n if (zoomFactor <= 4.90) {\n zoomFactor += .10;\n }\n else {\n zoomFactor = 5.00;\n }\n }\n else {\n if (zoomFactor >= .20) {\n zoomFactor -= .10;\n }\n else {\n zoomFactor = 0.10;\n }\n }\n _this.viewer.zoomFactor = zoomFactor;\n }\n }\n };\n this.viewer = viewer;\n }\n Zoom.prototype.setZoomFactor = function (value) {\n this.onZoomFactorChanged();\n if (!isNullOrUndefined(this.viewer.selection)) {\n this.viewer.selection.updateCaretPosition();\n }\n this.viewer.updateTouchMarkPosition();\n if (!isNullOrUndefined(this.viewer.owner.imageResizerModule)) {\n this.viewer.owner.imageResizerModule.updateImageResizerPosition();\n }\n this.viewer.owner.fireZoomFactorChange();\n };\n //Zoom Implementation Starts\n Zoom.prototype.onZoomFactorChanged = function () {\n if (this.viewer.zoomFactor > 5) {\n this.viewer.zoomFactor = 5;\n }\n else if (this.viewer.zoomFactor < 0.1) {\n this.viewer.zoomFactor = 0.1;\n }\n this.zoom();\n };\n Zoom.prototype.zoom = function () {\n var viewer = this.viewer;\n viewer.clearContent();\n viewer.handleZoom();\n viewer.updateFocus();\n };\n return Zoom;\n}());\nexport { Zoom };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Dictionary } from '../../base/dictionary';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WParagraphFormat, WStyles } from '../format/index';\nimport { Layout } from './layout';\nimport { Renderer } from './render';\nimport { createElement, Browser } from '@syncfusion/ej2-base';\nimport { Page, Rect, ListTextElementBox, ParagraphWidget, HeaderFooterWidget } from './page';\nimport { LineWidget, TableWidget } from './page';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { TextHelper } from './text-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Zoom } from './zooming';\nimport { Dialog } from '@syncfusion/ej2-popups';\n/**\n * @private\n */\nvar LayoutViewer = /** @class */ (function () {\n //#endregion\n function LayoutViewer(owner) {\n var _this = this;\n /**\n * @private\n */\n this.textWrap = true;\n /**\n * @private\n */\n this.currentPage = undefined;\n this.selectionStartPageIn = undefined;\n this.selectionEndPageIn = undefined;\n /**\n * @private\n */\n this.fieldStacks = [];\n /**\n * @private\n */\n this.splittedCellWidgets = [];\n /**\n * @private\n */\n this.tableLefts = [];\n this.tapCount = 0;\n this.timer = -1;\n this.isTimerStarted = false;\n /**\n * @private\n */\n this.isFirstLineFitInShiftWidgets = false;\n /**\n * @private\n */\n this.preZoomFactor = 0;\n /**\n * @private\n */\n this.preDifference = -1;\n /**\n * @private\n */\n this.fieldEndParagraph = undefined;\n /**\n * @private\n */\n this.fieldToLayout = undefined;\n /**\n * @private\n */\n this.backgroundColor = '#FFFFFF';\n /**\n * @private\n */\n this.containerTop = 0;\n /**\n * @private\n */\n this.containerLeft = 0;\n // Event \n /**\n * @private\n */\n this.isMouseDown = false;\n /**\n * @private\n */\n this.isSelectionChangedOnMouseMoved = false;\n /**\n * @private\n */\n this.isControlPressed = false;\n /**\n * @private\n */\n this.isTouchInput = false;\n /**\n * @private\n */\n this.useTouchSelectionMark = false;\n /**\n * @private\n */\n this.touchDownOnSelectionMark = 0;\n /**\n * @private\n */\n this.isComposingIME = false;\n /**\n * @private\n */\n this.lastComposedText = '';\n /**\n * @private\n */\n this.isCompositionStart = false;\n /**\n * @private\n */\n this.isCompositionUpdated = false;\n /**\n * @private\n */\n this.isCompositionCanceled = false;\n /**\n * @private\n */\n this.isCompositionEnd = false;\n /**\n * @private\n */\n this.prefix = '';\n /**\n * @private\n */\n this.suffix = '';\n /**\n * @private\n */\n this.fields = [];\n /**\n * @private\n */\n this.heightInfoCollection = {};\n /**\n * @private\n */\n this.defaultTabWidth = 36;\n /**\n * @private\n */\n this.lists = [];\n /**\n * @private\n */\n this.abstractLists = [];\n /**\n * @private\n */\n this.styles = new WStyles();\n /**\n * @private\n */\n this.preDefinedStyles = undefined;\n /**\n * @private\n */\n this.isRowOrCellResizing = false;\n this.isMouseDownInFooterRegion = false;\n this.pageFitTypeIn = 'None';\n /**\n * @private\n */\n this.fieldCollection = [];\n /**\n * @private\n */\n this.isPageField = false;\n /**\n * @private\n */\n this.mouseDownOffset = new Point(0, 0);\n this.zoomFactorInternal = 1;\n /**\n * @private\n */\n this.onTextInput = function (event) {\n if (!_this.isComposingIME) {\n event.preventDefault();\n var text = event.data;\n _this.owner.editor.handleTextInput(text);\n }\n };\n //#region Composition Event\n /**\n * Fires when composition starts.\n * @private\n */\n this.compositionStart = function (event) {\n if (!Browser.isDevice && !_this.owner.isReadOnlyMode) {\n _this.isComposingIME = true;\n _this.positionEditableTarget();\n if (_this.owner.editorHistory) {\n _this.owner.editor.initComplexHistory('IMEInput');\n }\n }\n _this.isCompositionStart = true;\n };\n /**\n * Fires on every input during composition.\n * @private\n */\n this.compositionUpdated = function (event) {\n if (_this.isComposingIME && !_this.owner.isReadOnlyMode) {\n /* tslint:disable:align */\n setTimeout(function () {\n _this.owner.editor.insertIMEText(_this.getEditableDivTextContent(), true);\n }, 0);\n }\n _this.isCompositionUpdated = true;\n };\n /**\n * Fires when user selects a character/word and finalizes the input.\n * @private\n */\n this.compositionEnd = function (event) {\n if (_this.isComposingIME && !_this.owner.isReadOnlyMode) {\n var text = _this.getEditableDivTextContent();\n if (text !== '') {\n _this.owner.editor.insertIMEText(text, false);\n }\n _this.isComposingIME = false;\n _this.lastComposedText = '';\n _this.iframe.setAttribute('style', 'pointer-events:none;position:absolute;top:-10000px');\n _this.editableDiv.innerHTML = '';\n if (_this.owner.editorHistory) {\n _this.owner.editorHistory.updateComplexHistory();\n if (text === '') {\n // tslint:disable-next-line:max-line-length\n //When the composition in live. The Undo operation will terminate the composition and empty text will be return from text box.\n //At that time the the history should be updated. Undo the operation and clear the redo stack. This undo operation will not be saved for redo operation.\n _this.owner.editorHistory.undo();\n _this.owner.editorHistory.redoStack.pop();\n }\n }\n }\n event.preventDefault();\n _this.isCompositionUpdated = false;\n _this.isCompositionEnd = true;\n };\n // tslint:disable:no-any \n this.onImageResizer = function (args) {\n if (!isNullOrUndefined(_this.owner.imageResizerModule) && _this.owner.imageResizerModule.isImageResizerVisible\n && _this.owner.imageResizerModule.isImageResizing) {\n if (args instanceof MouseEvent) {\n _this.onMouseUpInternal(args);\n }\n else if (args instanceof TouchEvent) {\n _this.onTouchUpInternal(args);\n }\n }\n };\n // tslint:enable:no-any \n this.onKeyPressInternal = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n var key = event.keyCode || event.charCode;\n var char = '';\n if (key) {\n char = String.fromCharCode(key);\n }\n else if (event.key) {\n char = event.key;\n }\n // tslint:disable-next-line:max-line-length\n if (char !== 'Spacebar' && char !== '\\r' && char !== '\\b' && char !== '\\u001B' && !_this.owner.isReadOnlyMode && event.ctrlKey === false) {\n _this.owner.editorModule.handleTextInput(char);\n }\n else if (char === 'Spacebar') {\n _this.owner.editorModule.handleTextInput(' ');\n }\n event.preventDefault();\n }\n };\n this.onTextInputInternal = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.owner.editorModule.onTextInputInternal(event);\n }\n else {\n _this.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n * @param {ClipboardEvent} event\n * @private\n */\n this.onPaste = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.owner.editorModule.pasteInternal(event);\n }\n _this.editableDiv.innerText = '';\n event.preventDefault();\n };\n /**\n * Fires when editable div loses focus.\n * @private\n */\n this.onFocusOut = function () {\n if (!isNullOrUndefined(_this.selection)) {\n if (_this.owner.contextMenuModule && _this.owner.contextMenuModule.contextMenuInstance &&\n _this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n _this.selection.hideCaret();\n }\n };\n /**\n * Updates focus to editor area.\n * @private\n */\n this.updateFocus = function () {\n if (_this.selection) {\n _this.editableDiv.focus();\n _this.selection.showCaret();\n }\n };\n /**\n * Fires on scrolling.\n */\n this.scrollHandler = function () {\n _this.clearContent();\n _this.updateScrollBars();\n var vtHeight = _this.containerTop + _this.visibleBounds.height;\n if (vtHeight > _this.pageContainer.offsetHeight) {\n _this.viewerContainer.scrollTop = _this.containerTop - (vtHeight - _this.pageContainer.offsetHeight);\n }\n var viewer = _this;\n if (viewer instanceof PageLayoutViewer && !isNullOrUndefined(_this.owner)) {\n _this.owner.fireViewChange();\n }\n };\n /**\n * Fires when the window gets resized.\n * @private\n */\n this.onWindowResize = function () {\n var viewer = _this;\n var resizeTimer;\n /* tslint:disable:align */\n resizeTimer = setTimeout(function () {\n if (!isNullOrUndefined(viewer.owner) && !isNullOrUndefined(_this.owner.element)) {\n viewer.updateViewerSizeInternal(document.getElementById(viewer.owner.element.id));\n viewer.updateScrollBars();\n if (!isNullOrUndefined(_this.selection)) {\n _this.selection.updateCaretPosition();\n }\n viewer.updateTouchMarkPosition();\n if (viewer.owner.contextMenuModule && viewer.owner.contextMenuModule.contextMenuInstance) {\n viewer.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (resizeTimer) {\n clearTimeout(resizeTimer);\n }\n }\n }, 100);\n };\n /**\n * @private\n */\n this.onContextMenu = function (event) {\n if (_this.owner.contextMenuModule) {\n _this.owner.contextMenuModule.onContextMenuInternal(event);\n }\n };\n /**\n * Called on mouse down.\n * @param {MouseEvent} event\n * @private\n */\n this.onMouseDownInternal = function (event) {\n if (_this.isTouchInput || event.offsetX > (_this.visibleBounds.width - (_this.visibleBounds.width - _this.viewerContainer.clientWidth))\n || event.offsetY > (_this.visibleBounds.height - (_this.visibleBounds.height - _this.viewerContainer.clientHeight))) {\n return;\n }\n if (!isNullOrUndefined(_this.selection)) {\n _this.updateCursor(event);\n // tslint:disable-next-line:max-line-length\n if (_this.isLeftButtonPressed(event) && !_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n event.preventDefault();\n if (!_this.isTouchInput) {\n _this.selection.hideCaret();\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.findFocusedPage(cursorPoint, true);\n _this.mouseDownOffset.x = touchPoint.x;\n _this.mouseDownOffset.y = touchPoint.y;\n // tslint:disable-next-line:max-line-length\n _this.isMouseDownInFooterRegion = _this.selection.isCursorInsidePageRect(cursorPoint, _this.currentPage) && _this.selection.isCursorInFooterRegion(cursorPoint, _this.currentPage);\n _this.isSelectionChangedOnMouseMoved = false;\n if (!_this.owner.isReadOnlyMode && (_this.owner.editorModule.tableResize.isInCellResizerArea(touchPoint) ||\n _this.owner.editorModule.tableResize.isInRowResizerArea(touchPoint))) {\n _this.selection.hideCaret();\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n if (_this.isLeftButtonPressed(event)) {\n _this.owner.editorModule.tableResize.startingPoint.x = touchPoint.x;\n _this.owner.editorModule.tableResize.startingPoint.y = touchPoint.y;\n _this.owner.editorModule.tableResize.handleResize(touchPoint);\n }\n return;\n }\n if (event.ctrlKey) {\n _this.isControlPressed = true;\n }\n if (_this.owner.selection.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n if (event.which === 3 && !_this.owner.selection.isEmpty\n && _this.selection.checkCursorIsInSelection(_this.getLineWidget(touchPoint), touchPoint)) {\n event.preventDefault();\n return;\n }\n _this.isTouchInput = false;\n _this.isMouseDown = true;\n _this.updateFocus();\n /* tslint:disable:align */\n _this.timer = setTimeout(function () {\n _this.tapCount++;\n if (_this.tapCount === 4) {\n _this.tapCount = 1;\n }\n }, 200);\n }\n };\n /**\n * Called on mouse move.\n * @param {MouseEvent} event\n * @private\n */\n this.onMouseMoveInternal = function (event) {\n event.preventDefault();\n if (!isNullOrUndefined(_this.selection)) {\n //For image Resizing\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode\n && _this.owner.imageResizerModule.isImageResizing) {\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnMouse(event);\n }\n return;\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.findFocusedPage(cursorPoint, !_this.owner.enableHeaderAndFooter);\n if (_this.isMouseDown) {\n if (!isNullOrUndefined(_this.currentPage)) {\n var xPosition = touchPoint.x;\n var yPosition = touchPoint.y;\n if (!_this.owner.isReadOnlyMode && _this.isRowOrCellResizing) {\n _this.owner.editorModule.tableResize.handleResizing(touchPoint);\n }\n else {\n if (!(_this.isTouchInput || _this.isSelectionChangedOnMouseMoved || _this.touchDownOnSelectionMark > 0)) {\n _this.updateTextPositionForSelection(touchPoint, 1);\n }\n if (_this.isLeftButtonPressed(event)) {\n event.preventDefault();\n var touchY = yPosition;\n var textPosition = _this.owner.selection.end;\n var touchPoint_1 = new Point(xPosition, touchY);\n if (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizerVisible) {\n _this.owner.selection.moveTextPosition(touchPoint_1, textPosition);\n }\n _this.isSelectionChangedOnMouseMoved = true;\n }\n }\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!_this.isRowOrCellResizing && !_this.isSelectionChangedOnMouseMoved) {\n _this.updateCursor(event);\n }\n if (_this.isRowOrCellResizing) {\n _this.selection.hideCaret();\n }\n }\n };\n /**\n * Fired on double tap.\n * @param {MouseEvent} event\n * @private\n */\n this.onDoubleTap = function (event) {\n if (!isNullOrUndefined(_this.selection)) {\n _this.isTouchInput = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n if (_this.selection.checkAndEnableHeaderFooter(cursorPoint, _this.findFocusedPage(cursorPoint, true))) {\n return;\n }\n // tslint:disable-next-line:max-line-length\n if (_this.selection.isEmpty && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)) {\n _this.owner.selection.selectCurrentWord();\n _this.selection.checkForCursorVisibility();\n _this.tapCount = 2;\n }\n }\n };\n /**\n * Called on mouse up.\n * @param {MouseEvent} event\n * @private\n */\n this.onMouseUpInternal = function (event) {\n event.preventDefault();\n _this.isListTextSelected = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.findFocusedPage(cursorPoint, true);\n if (!isNullOrUndefined(_this.selection)) {\n var tapCount = 1;\n if (!Browser.isIE) {\n if (event.detail > 2) {\n tapCount = event.detail;\n }\n }\n else {\n tapCount = _this.tapCount;\n }\n if (_this.isRowOrCellResizing) {\n _this.owner.editorModule.tableResize.updateResizingHistory(touchPoint);\n }\n if (_this.isMouseDown && !_this.isSelectionChangedOnMouseMoved\n && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)\n && (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizing)) {\n if (_this.touchDownOnSelectionMark === 0 && !_this.isRowOrCellResizing) {\n _this.updateTextPositionForSelection(touchPoint, tapCount);\n if (Browser.isIE && tapCount === 2) {\n _this.selection.checkAndEnableHeaderFooter(cursorPoint, touchPoint);\n }\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)\n && (_this.owner.selection.isEmpty || _this.owner.selection.isImageSelected) &&\n (((event.ctrlKey && _this.owner.useCtrlClickToFollowHyperlink ||\n !_this.owner.useCtrlClickToFollowHyperlink) && _this.isLeftButtonPressed(event) === true))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, false);\n }\n if (!_this.owner.isReadOnlyMode && _this.isSelectionInListText(touchPoint)) {\n _this.selection.selectListText();\n }\n // tslint:disable-next-line:max-line-length\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.scrollToPosition(_this.owner.selection.start, _this.owner.selection.end);\n _this.owner.imageResizerModule.isImageResizing = false;\n _this.owner.imageResizerModule.updateHistoryForImageResizer();\n }\n // tslint:disable-next-line:max-line-length\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && !isNullOrUndefined(_this.selection.caret)) {\n _this.selection.caret.style.display = 'none';\n }\n _this.isMouseDown = false;\n _this.isSelectionChangedOnMouseMoved = false;\n _this.isTouchInput = false;\n _this.useTouchSelectionMark = true;\n _this.isControlPressed = false;\n _this.updateFocus();\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n if (_this.owner.enableImageResizerMode) {\n var imageResizer = _this.owner.imageResizerModule;\n imageResizer.isImageResizing = false;\n imageResizer.isImageMoveToNextPage = false;\n imageResizer.leftValue = undefined;\n imageResizer.topValue = undefined;\n }\n _this.isMouseDownInFooterRegion = false;\n }\n };\n /**\n * Fired on touch start.\n * @param {TouchEvent} event\n * @private\n */\n this.onTouchStartInternal = function (event) {\n if (_this.selection) {\n _this.isCompositionStart = false;\n _this.isCompositionEnd = false;\n _this.isCompositionUpdated = false;\n _this.isCompositionCanceled = true;\n _this.isTouchInput = true;\n if (_this.isTimerStarted) {\n if (_this.tapCount === 1) {\n _this.tapCount = 2;\n }\n else {\n _this.tapCount = 3;\n _this.isTimerStarted = false;\n }\n }\n else {\n _this.isTimerStarted = true;\n _this.tapCount = 1;\n }\n if (event.touches.length === 1) {\n _this.zoomX = event.touches[0].clientX;\n _this.zoomY = event.touches[0].clientY;\n if (_this.owner.selection.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n var point = void 0;\n if (_this.isMouseDown) {\n point = _this.getTouchOffsetValue(event);\n }\n point = _this.findFocusedPage(point, true);\n if (_this.owner.enableImageResizerMode) {\n var resizeObj = _this.owner.imageResizerModule.getImagePointOnTouch(point);\n _this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n }\n // tslint:disable-next-line:max-line-length\n if (_this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n var x = _this.owner.selection.end.location.x;\n var y = _this.selection.getCaretBottom(_this.owner.selection.end, _this.owner.selection.isEmpty) + 9;\n //TouchDownOnSelectionMark will be 2 when touch end is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 1 : 0;\n if (!_this.owner.selection.isEmpty && _this.touchDownOnSelectionMark === 0) {\n x = _this.owner.selection.start.location.x;\n y = _this.selection.getCaretBottom(_this.owner.selection.start, false) + 9;\n //TouchDownOnSelectionMark will be 1 when touch start is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 2 : 0;\n }\n }\n if (!isNullOrUndefined(_this.owner.contextMenuModule) && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (_this.touchDownOnSelectionMark || event.touches.length > 1) {\n event.preventDefault();\n }\n _this.timer = setTimeout(function () {\n _this.isTimerStarted = false;\n }, 200);\n }\n };\n /**\n * Fired on touch move.\n * @param {TouchEvent} event\n * @private\n */\n this.onTouchMoveInternal = function (event) {\n var touch = event.touches;\n var cursorPoint;\n if (!isNullOrUndefined(_this.selection)) {\n // tslint:disable-next-line:max-line-length\n if (_this.owner.editorModule && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n event.preventDefault();\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnTouch(event);\n _this.selection.caret.style.display = 'none';\n }\n return;\n }\n if (_this.isMouseDown) {\n cursorPoint = _this.getTouchOffsetValue(event);\n var touchPoint = _this.findFocusedPage(cursorPoint, true);\n if (_this.touchDownOnSelectionMark > 0 /*|| !this.useTouchSelectionMark*/) {\n event.preventDefault();\n var touchY = touchPoint.y;\n var textPosition = _this.owner.selection.end;\n var touchPointer = void 0;\n if (touchPoint.y <= 26) {\n touchY -= touchPoint.y < 0 ? 0 : touchPoint.y + 0.5;\n }\n else {\n touchY -= 36.5;\n }\n textPosition = _this.touchDownOnSelectionMark === 2 ? _this.selection.start : _this.selection.end;\n touchPoint = new Point(touchPoint.x, touchY);\n _this.owner.selection.moveTextPosition(touchPoint, textPosition);\n _this.isSelectionChangedOnMouseMoved = true;\n }\n _this.selection.checkForCursorVisibility();\n }\n }\n if (touch.length > 1) {\n event.preventDefault();\n _this.isMouseDown = false;\n _this.zoomX = (touch[0].clientX + touch[1].clientX) / 2;\n _this.zoomY = (touch[0].clientY + touch[1].clientY) / 2;\n // tslint:disable-next-line:max-line-length\n var currentDiff = Math.sqrt(Math.pow((touch[0].clientX - touch[1].clientX), 2) + Math.pow((touch[0].clientY - touch[1].clientY), 2));\n if (_this.preDifference > -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchOutInternal(event);\n }\n else if (currentDiff < _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n else if (_this.zoomFactor < 2) {\n if (_this.preDifference !== -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n else if (_this.preDifference === -1) {\n if (_this.zoomFactor > 2) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n _this.preDifference = currentDiff;\n }\n };\n /**\n * Fired on touch up.\n * @param {TouchEvent} event\n * @private\n */\n this.onTouchUpInternal = function (event) {\n if (!isNullOrUndefined(_this.selection)) {\n var point = _this.getTouchOffsetValue(event);\n var touchPoint = _this.findFocusedPage(point, true);\n if (event.changedTouches.length === 1) {\n _this.zoomX = undefined;\n _this.zoomY = undefined;\n // tslint:disable-next-line:max-line-length\n if (_this.isMouseDown && !_this.isSelectionChangedOnMouseMoved && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)) {\n if (_this.touchDownOnSelectionMark === 0) {\n _this.updateTextPositionForSelection(new Point(touchPoint.x, touchPoint.y), _this.tapCount);\n if (_this.tapCount === 2) {\n _this.selection.checkAndEnableHeaderFooter(point, touchPoint);\n }\n }\n if (_this.owner.selection.isEmpty) {\n _this.selection.updateCaretPosition();\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.selection.start)\n && !_this.isSelectionChangedOnMouseMoved && (_this.selection.isEmpty ||\n _this.selection.isImageField() && (!_this.owner.enableImageResizerMode ||\n _this.owner.enableImageResizerMode && !_this.owner.imageResizerModule.isImageResizing))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, true);\n }\n _this.isMouseDown = false;\n _this.touchDownOnSelectionMark = 0;\n _this.useTouchSelectionMark = true;\n _this.isSelectionChangedOnMouseMoved = false;\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.owner.imageResizerModule.isImageResizing = false;\n _this.owner.imageResizerModule.isImageMoveToNextPage = false;\n _this.scrollToPosition(_this.owner.selection.start, _this.owner.selection.end);\n _this.owner.imageResizerModule.updateHistoryForImageResizer();\n }\n // tslint:disable-next-line:max-line-length\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && _this.isTouchInput) {\n _this.touchStart.style.display = 'none';\n _this.touchEnd.style.display = 'none';\n }\n // if (!this.owner.isReadOnlyMode && this.isSelectionInListText(touchPoint)) {\n // this.selection.selectListText();\n // }\n event.preventDefault();\n }\n _this.preDifference = -1;\n _this.isTouchInput = false;\n if (!_this.isTimerStarted) {\n _this.tapCount = 1;\n }\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n };\n /**\n * Fired on keyup event.\n * @private\n */\n this.onKeyUpInternal = function (event) {\n if (Browser.isDevice) {\n if (window.getSelection().anchorOffset !== _this.prefix.length) {\n _this.selection.setEditableDivCaretPosition(_this.editableDiv.innerText.length);\n }\n }\n if (event.ctrlKey || (event.keyCode === 17 || event.which === 17)) {\n _this.isControlPressed = false;\n }\n };\n /**\n * Fired on keydown.\n * @private\n */\n this.onKeyDownInternal = function (event) {\n var isHandled = false;\n var keyEventArgs = { 'event': event, 'isHandled': false, source: _this.owner };\n _this.owner.trigger('keyDown', keyEventArgs);\n if (keyEventArgs.isHandled) {\n return;\n }\n var key = event.which || event.keyCode;\n var ctrl = (event.ctrlKey || event.metaKey) ? true : ((key === 17) ? true : false); // ctrl detection \n var shift = event.shiftKey ? event.shiftKey : ((key === 16) ? true : false); // Shift Key detection \n var alt = event.altKey ? event.altKey : ((key === 18) ? true : false); // alt key detection\n if (ctrl && !shift && !alt) {\n switch (key) {\n case 80:\n event.preventDefault();\n _this.owner.print();\n isHandled = true;\n break;\n case 83:\n event.preventDefault();\n _this.owner.save(_this.owner.documentName === '' ? 'sample' : _this.owner.documentName, 'Sfdt');\n isHandled = true;\n break;\n }\n }\n if (!isHandled && !isNullOrUndefined(_this.selection)) {\n _this.selection.onKeyDownInternal(event, ctrl, shift, alt);\n }\n if (isHandled) {\n event.preventDefault();\n }\n };\n this.owner = owner;\n this.pages = [];\n this.render = new Renderer(this);\n this.lists = [];\n this.abstractLists = [];\n this.characterFormat = new WCharacterFormat(this);\n this.paragraphFormat = new WParagraphFormat(this);\n this.renderedLists = new Dictionary();\n this.headersFooters = [];\n this.styles = new WStyles();\n this.preDefinedStyles = new Dictionary();\n this.initalizeStyles();\n this.bookmarks = new Dictionary();\n }\n Object.defineProperty(LayoutViewer.prototype, \"containerCanvas\", {\n //#region Properties\n /**\n * Gets container canvas.\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn = document.createElement('canvas');\n this.containerCanvasIn.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.containerCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.containerCanvasIn);\n }\n return this.containerCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionCanvas\", {\n /**\n * Gets selection canvas.\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn = document.createElement('canvas');\n this.selectionCanvas.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.selectionCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.selectionCanvasIn);\n }\n return this.selectionCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"containerContext\", {\n /**\n * Gets container context.\n * @private\n */\n get: function () {\n return this.containerCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionContext\", {\n /**\n * Gets selection context.\n * @private\n */\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"currentRenderingPage\", {\n /**\n * Gets the current rendering page.\n */\n get: function () {\n if (this.pages.length === 0) {\n return undefined;\n }\n return this.pages[this.pages.length - 1];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"visibleBounds\", {\n /**\n * Gets visible bounds.\n * @private\n */\n get: function () {\n return this.visibleBoundsIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"zoomFactor\", {\n /**\n * Gets or sets zoom factor.\n * @private\n */\n get: function () {\n return this.zoomFactorInternal;\n },\n set: function (value) {\n if (this.zoomFactorInternal !== value) {\n this.preZoomFactor = this.zoomFactor;\n this.zoomFactorInternal = value;\n this.zoomModule.setZoomFactor(value);\n this.owner.zoomFactor = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selection\", {\n /**\n * Gets the selection.\n * @private\n */\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionStartPage\", {\n /**\n * Gets or sets selection start page.\n * @private\n */\n get: function () {\n return this.selectionStartPageIn;\n },\n set: function (value) {\n this.selectionStartPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionEndPage\", {\n /**\n * Gets or sets selection end page.\n * @private\n */\n get: function () {\n return this.selectionEndPageIn;\n },\n set: function (value) {\n this.selectionEndPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"dialog\", {\n /**\n * Gets the initialized default dialog.\n * @private\n */\n get: function () {\n if (!this.dialogInternal) {\n this.initDialog();\n }\n return this.dialogInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"dialog2\", {\n /**\n * Gets the initialized default dialog.\n * @private\n */\n get: function () {\n if (!this.dialogInternal2) {\n this.initDialog2();\n }\n return this.dialogInternal2;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"pageFitType\", {\n /**\n * Gets or sets page fit type.\n * @private\n */\n get: function () {\n return this.pageFitTypeIn;\n },\n set: function (value) {\n this.pageFitTypeIn = value;\n this.onPageFitTypeChanged(this.pageFitTypeIn);\n },\n enumerable: true,\n configurable: true\n });\n LayoutViewer.prototype.initalizeStyles = function () {\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Normal', '{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 1', '{\"type\":\"Paragraph\",\"name\":\"Heading 1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 1 Char\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":12.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level1\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 2', '{\"type\":\"Paragraph\",\"name\":\"Heading 2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 2 Char\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level2\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 3', '{\"type\":\"Paragraph\",\"name\":\"Heading 3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 3 Char\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level3\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 4', '{\"type\":\"Paragraph\",\"name\":\"Heading 4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 4 Char\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level4\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 5', '{\"type\":\"Paragraph\",\"name\":\"Heading 5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 5 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level5\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 6', '{\"type\":\"Paragraph\",\"name\":\"Heading 6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 6 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level6\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Default Paragraph Font', '{\"type\":\"Character\",\"name\":\"Default Paragraph Font\"}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 1 Char', '{\"type\":\"Character\",\"name\":\"Heading 1 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 2 Char', '{\"type\":\"Character\",\"name\":\"Heading 2 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 3 Char', '{\"type\":\"Character\",\"name\":\"Heading 3 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\": \"#1F3763\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 4 Char', '{\"type\":\"Character\",\"name\":\"Heading 4 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 5 Char', '{\"type\":\"Character\",\"name\":\"Heading 5 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 6 Char', '{\"type\":\"Character\",\"name\":\"Heading 6 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Hyperlink', '{\"type\":\"Character\",\"name\":\"Hyperlink\",\"basedOn\":\"Default Paragraph Font\",\"next\":\"Normal\",\"characterFormat\":{\"fontColor\":\"#0563C1\",\"underline\": \"Single\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc1', '{\"type\":\"Paragraph\",\"name\":\"Toc1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc2', '{\"type\":\"Paragraph\",\"name\":\"Toc2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :11.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc3', '{\"type\":\"Paragraph\",\"name\":\"Toc3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :22.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc4', '{\"type\":\"Paragraph\",\"name\":\"Toc4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :33.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc5', '{\"type\":\"Paragraph\",\"name\":\"Toc5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :44.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc6', '{\"type\":\"Paragraph\",\"name\":\"Toc6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :55.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc7', '{\"type\":\"Paragraph\",\"name\":\"Toc7\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :66.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc8', '{\"type\":\"Paragraph\",\"name\":\"Toc8\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :77.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc9', '{\"type\":\"Paragraph\",\"name\":\"Toc9\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :88.0,\"afterSpacing\":5.0}}');\n };\n /**\n * @private\n */\n LayoutViewer.prototype.clearDocumentItems = function () {\n this.headersFooters = [];\n this.fields = [];\n this.bookmarks.clear();\n this.styles.clear();\n this.characterFormat.clearFormat();\n this.paragraphFormat.clearFormat();\n };\n /**\n * @private\n */\n LayoutViewer.prototype.getAbstractListById = function (id) {\n if (isNullOrUndefined(this.abstractLists)) {\n return undefined;\n }\n for (var i = 0; i < this.abstractLists.length; i++) {\n var abstractList = this.abstractLists[i];\n if (abstractList instanceof WAbstractList && abstractList.abstractListId === id) {\n return abstractList;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.getListById = function (id) {\n if (isNullOrUndefined(this.lists)) {\n return undefined;\n }\n for (var i = 0; i < this.lists.length; i++) {\n if (!isNullOrUndefined(this.lists[i]) && this.lists[i].listId === id) {\n return this.lists[i];\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n LayoutViewer.getListLevelNumber = function (listLevel) {\n if (listLevel.ownerBase instanceof WLevelOverride) {\n return listLevel.ownerBase.levelNumber;\n }\n else if (listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(listLevel.ownerBase.levels)) {\n return listLevel.ownerBase.levels.indexOf(listLevel);\n }\n else {\n return -1;\n }\n };\n /**\n * Gets the bookmarks.\n * @private\n */\n LayoutViewer.prototype.getBookmarks = function (includeHidden) {\n var bookmarks = [];\n for (var i = 0; i < this.bookmarks.keys.length; i++) {\n var bookmark = this.bookmarks.keys[i];\n if (includeHidden || bookmark.indexOf('_') !== 0) {\n bookmarks.push(bookmark);\n }\n }\n return bookmarks;\n };\n /**\n * Initializes components.\n * @private\n */\n LayoutViewer.prototype.initializeComponents = function () {\n var element = this.owner.element;\n if (isNullOrUndefined(element)) {\n return;\n }\n var viewer = this;\n this.optionsPaneContainer = createElement('div', {\n className: 'e-documenteditor-optionspane'\n });\n element.appendChild(this.optionsPaneContainer);\n this.viewerContainer = createElement('div', { id: this.owner.containerId + '_viewerContainer' });\n this.viewerContainer.style.cssText = 'position:relative;backgroundColor:#FBFBFB;overflow:auto';\n this.optionsPaneContainer.appendChild(this.viewerContainer);\n this.viewerContainer.tabIndex = 0;\n this.viewerContainer.style.outline = 'none';\n this.pageContainer = createElement('div', { id: this.owner.containerId + '_pageContainer', className: 'e-de-background' });\n this.viewerContainer.appendChild(this.pageContainer);\n this.pageContainer.style.top = '0px';\n this.pageContainer.style.left = '0px';\n this.pageContainer.style.position = 'relative';\n this.pageContainer.style.pointerEvents = 'none';\n if (Browser.isDevice) {\n this.createEditableDiv(element);\n }\n else {\n this.createEditableIFrame();\n }\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.initializeImageResizer();\n }\n this.updateViewerSizeInternal(element);\n this.layout = new Layout(this);\n this.textHelper = new TextHelper(this);\n this.zoomModule = new Zoom(this);\n // let locale: L10n = new L10n('documenteditor', this.owner.defaultLocale);\n // locale.setLocale(this.owner.locale);\n // setCulture(this.owner.locale);\n this.initTouchEllipse();\n this.wireEvent();\n };\n /**\n * @private\n */\n LayoutViewer.prototype.createEditableDiv = function (element) {\n this.editableDiv = document.createElement('div');\n this.editableDiv.contentEditable = 'true';\n this.editableDiv.style.position = 'fixed';\n this.editableDiv.style.left = '-150em';\n this.editableDiv.style.width = '100%';\n this.editableDiv.style.height = '100%';\n this.editableDiv.id = element.id + '_editableDiv';\n document.body.appendChild(this.editableDiv);\n };\n /**\n * @private\n */\n LayoutViewer.prototype.createEditableIFrame = function () {\n this.iframe = createElement('iframe', {\n attrs: {\n 'scrolling': 'no', 'src': 'javascript:false',\n 'style': 'pointer-events:none;position:absolute;top:-10000px'\n },\n className: 'e-de-text-target'\n });\n var innerHtml = ''\n + ''\n + ''\n + '
    '\n + ''\n + '';\n this.viewerContainer.appendChild(this.iframe);\n this.iframe.contentDocument.open();\n this.iframe.contentDocument.write(innerHtml);\n this.iframe.contentDocument.close();\n this.editableDiv = this.iframe.contentDocument.body.children[0];\n };\n /**\n * Wires events and methods.\n */\n LayoutViewer.prototype.wireEvent = function () {\n if (!isNullOrUndefined(this.selection)) {\n this.selection.initCaret();\n }\n this.editableDiv.addEventListener('paste', this.onPaste);\n if (!Browser.isDevice) {\n this.editableDiv.addEventListener('keypress', this.onKeyPressInternal);\n if (Browser.info.name === 'chrome') {\n this.editableDiv.addEventListener('textInput', this.onTextInput);\n }\n }\n else {\n this.editableDiv.addEventListener('input', this.onTextInputInternal);\n }\n this.editableDiv.addEventListener('blur', this.onFocusOut);\n this.editableDiv.addEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.addEventListener('compositionstart', this.compositionStart);\n this.editableDiv.addEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.addEventListener('compositionend', this.compositionEnd);\n this.viewerContainer.addEventListener('scroll', this.scrollHandler);\n this.viewerContainer.addEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.addEventListener('keydown', this.onKeyDownInternal);\n this.viewerContainer.addEventListener('mousemove', this.onMouseMoveInternal);\n this.viewerContainer.addEventListener('contextmenu', this.onContextMenu);\n this.viewerContainer.addEventListener('dblclick', this.onDoubleTap);\n this.viewerContainer.addEventListener('mouseup', this.onMouseUpInternal);\n window.addEventListener('resize', this.onWindowResize);\n window.addEventListener('keyup', this.onKeyUpInternal);\n window.addEventListener('mouseup', this.onImageResizer);\n window.addEventListener('touchend', this.onImageResizer);\n this.viewerContainer.addEventListener('touchstart', this.onTouchStartInternal);\n this.viewerContainer.addEventListener('touchmove', this.onTouchMoveInternal);\n this.viewerContainer.addEventListener('touchend', this.onTouchUpInternal);\n if (navigator.userAgent.match('Firefox')) {\n this.viewerContainer.addEventListener('DOMMouseScroll', this.zoomModule.onMouseWheelInternal);\n }\n this.viewerContainer.addEventListener('mousewheel', this.zoomModule.onMouseWheelInternal);\n };\n LayoutViewer.prototype.getEditableDivTextContent = function () {\n return this.editableDiv.textContent;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.positionEditableTarget = function () {\n var point = this.selection.getRect(this.selection.start);\n var page = this.selection.getSelectionPage(this.selection.start);\n var caretInfo = this.selection.updateCaretSize(this.owner.selection.start);\n var sectionFormat = page.bodyWidgets[0].sectionFormat;\n var left = page.boundingRectangle.x + (HelperMethods.convertPointToPixel(sectionFormat.leftMargin) * this.zoomFactor);\n var top = point.y;\n var pageWidth = sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin;\n var iframeStyle = 'left:' + left + 'px;';\n iframeStyle += 'top:' + top + 'px;';\n iframeStyle += 'width:' + (HelperMethods.convertPointToPixel(pageWidth) * this.zoomFactor) + 'px;';\n iframeStyle += 'height:250px;outline-style:none;position:absolute';\n this.iframe.setAttribute('style', iframeStyle);\n var style = 'background-color:transparent;width:100%;height:250px;padding: 0px; margin: 0px;';\n style += 'text-indent:' + (point.x - left) + 'px;';\n style += 'color:transparent;pointer-events:none;outline-style:none;';\n style += 'font-size:' + (HelperMethods.convertPointToPixel(this.selection.characterFormat.fontSize) * this.zoomFactor) + 'px;';\n style += 'font-family' + this.selection.characterFormat.fontFamily + ';';\n style += 'overflow:hidden;text-decoration:none;white-space:normal;';\n this.editableDiv.setAttribute('style', style);\n };\n /**\n * Initializes dialog template.\n */\n LayoutViewer.prototype.initDialog = function () {\n if (!this.dialogInternal) {\n this.dialogTarget = createElement('div', { className: 'e-de-dlg-target' });\n document.body.appendChild(this.dialogTarget);\n this.dialogInternal = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, visible: false, width: '1px', isModal: true, position: { X: 'center', Y: 'center' }, zIndex: 20\n });\n this.dialogInternal.open = this.selection.hideCaret;\n this.dialogInternal.beforeClose = this.updateFocus;\n this.dialogInternal.appendTo(this.dialogTarget);\n }\n };\n /**\n * Initializes dialog template.\n */\n LayoutViewer.prototype.initDialog2 = function () {\n if (!this.dialogInternal2) {\n var target = createElement('div', { className: 'e-de-dlg-target' });\n document.body.appendChild(target);\n this.dialogInternal2 = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, visible: false, width: '1px', isModal: true, position: { X: 'center', Y: 'Top' }, zIndex: 10\n });\n this.dialogInternal2.appendTo(target);\n }\n };\n /**\n * Clears the context.\n * @private\n */\n LayoutViewer.prototype.clearContent = function () {\n this.containerContext.clearRect(0, 0, this.containerCanvas.width, this.containerCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n };\n /**\n * Fired when the document gets changed.\n * @param {WordDocument} document\n */\n LayoutViewer.prototype.onDocumentChanged = function (sections) {\n this.clearContent();\n if (this.owner.editorModule) {\n this.owner.editorModule.tocStyles = {};\n this.owner.editorModule.tocBookmarkId = 0;\n }\n this.heightInfoCollection = {};\n this.owner.isDocumentLoaded = false;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].bodyWidgets[0].destroy();\n }\n this.pages = [];\n if (!isNullOrUndefined(this.renderedLists)) {\n this.renderedLists.clear();\n }\n if (!isNullOrUndefined(this.owner.editorHistory)) {\n this.owner.editorHistory.destroy();\n }\n this.owner.isDocumentLoaded = true;\n this.layout.isInitialLoad = true;\n this.layout.layoutItems(sections);\n if (this.owner.selection) {\n this.owner.selection.selectRange(this.owner.documentStart, this.owner.documentStart);\n }\n if (this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n this.owner.fireDocumentChange();\n };\n /**\n * Initialize touch ellipse.\n */\n LayoutViewer.prototype.initTouchEllipse = function () {\n var style = 'height: 30px;width: 30px;position: absolute;background-color: transparent;margin: 0px;padding: 0px;z-index:5';\n // tslint:disable-next-line:max-line-length\n var ellipse = ' height: 12px;width: 12px;border-radius: 50%;background-color: white;position: absolute;margin: 0px 6px 0px 6px;border-width: 2px;border-style: solid;border-color: #000000;';\n this.touchStart = createElement('div', { className: 'e-touch-ellipse', styles: style });\n var start = createElement('div', { styles: ellipse });\n this.touchEnd = createElement('div', { className: 'e-touch-ellipse', styles: style });\n this.touchStart.style.display = 'none';\n var end = createElement('div', { styles: ellipse });\n this.touchStart.appendChild(start);\n this.touchEnd.appendChild(end);\n this.touchEnd.style.display = 'none';\n this.viewerContainer.appendChild(this.touchStart);\n this.viewerContainer.appendChild(this.touchEnd);\n };\n /**\n * Updates touch mark position.\n * @private\n */\n LayoutViewer.prototype.updateTouchMarkPosition = function () {\n if (this.touchStart.style.display !== 'none' && !isNullOrUndefined(this.selection)) {\n if (!this.selection.isEmpty) {\n var y = this.selection.getCaretBottom(this.selection.start, false);\n var page = this.selection.getPage(this.selection.start.paragraph);\n var viewer = this;\n // tslint:disable-next-line:max-line-length\n var pageTop = (page.boundingRectangle.y - viewer.pageGap * (this.pages.indexOf(page) + 1)) * this.zoomFactor + viewer.pageGap * (this.pages.indexOf(page) + 1);\n // tslint:disable-next-line:max-line-length\n this.touchStart.style.left = page.boundingRectangle.x + (Math.round(this.selection.start.location.x) * this.zoomFactor - 14) + 'px';\n this.touchStart.style.top = pageTop + ((y) * this.zoomFactor) + 'px';\n if (!this.selection.isEmpty) {\n y = this.selection.getCaretBottom(this.selection.end, false);\n page = this.selection.getPage(this.selection.end.paragraph);\n }\n // tslint:disable-next-line:max-line-length\n this.touchEnd.style.left = page.boundingRectangle.x + (Math.round(this.selection.end.location.x) * this.zoomFactor - 14) + 'px';\n this.touchEnd.style.top = pageTop + (y * this.zoomFactor) + 'px';\n }\n else {\n this.selection.updateCaretPosition();\n }\n }\n };\n LayoutViewer.prototype.isSelectionInListText = function (cursorPoint) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget) && widget.children[0] instanceof ListTextElementBox) {\n var left = this.getLeftValue(widget);\n var width = widget.children[0].width;\n var height = widget.children[0].height;\n if (this.isInsideRect(left, widget.paragraph.y, width, height, cursorPoint)) {\n this.selectionLineWidget = widget;\n return true;\n }\n }\n return false;\n };\n /**\n * Check whether touch point is inside the rectangle or not.\n * @param x\n * @param y\n * @param width\n * @param height\n * @param touchPoint\n * @private\n */\n LayoutViewer.prototype.isInsideRect = function (x, y, width, height, touchPoint) {\n if ((touchPoint.x > x && touchPoint.x <= x + width) && (touchPoint.y > y && touchPoint.y <= y + height)) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.getLeftValue = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.selection.isParagraphFirstLine(widget)) {\n if (paragraphFormat.textAlignment === 'Right') {\n left -= HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n left -= HelperMethods.convertPointToPixel(paragraphFormat.leftIndent);\n }\n else {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n }\n var element = widget.children[0];\n if (element instanceof ListTextElementBox) {\n left += element.margin.left;\n }\n return left;\n };\n /**\n * Checks whether left mouse button is pressed or not.\n */\n LayoutViewer.prototype.isLeftButtonPressed = function (event) {\n this.isTouchInput = false;\n var button = event.which || event.button;\n return button === 1;\n };\n /**\n * Gets touch offset value.\n */\n LayoutViewer.prototype.getTouchOffsetValue = function (event) {\n var targetElement = this.viewerContainer;\n var offset = targetElement.getBoundingClientRect();\n var touchOffsetValues = event.touches[0];\n if (isNullOrUndefined(touchOffsetValues)) {\n touchOffsetValues = event.changedTouches[0];\n }\n var offsetX = touchOffsetValues.pageX - offset.left;\n var offsetY = touchOffsetValues.pageY - offset.top;\n return new Point(offsetX, offsetY);\n };\n /**\n * Fired on pinch zoom in.\n * @param {TouchEvent} event\n */\n LayoutViewer.prototype.onPinchInInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor - 0.01;\n if (updatedZoomFactor < 5 && updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor - 0.01;\n }\n if (updatedZoomFactor < 0.1) {\n updatedZoomFactor = 0.1;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n /**\n * Fired on pinch zoom out.\n * @param {TouchEvent} event\n */\n LayoutViewer.prototype.onPinchOutInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor + 0.01;\n if (updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor + 0.01;\n }\n if (updatedZoomFactor > 5) {\n updatedZoomFactor = 5;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n /**\n * Gets page width.\n * @private\n */\n LayoutViewer.prototype.getPageWidth = function (page) {\n var width = page.boundingRectangle.width;\n return width;\n };\n /**\n * Removes specified page.\n * @private\n */\n LayoutViewer.prototype.removePage = function (page) {\n if (this.currentPage === page) {\n this.currentPage = undefined;\n }\n var index = this.pages.indexOf(page);\n // if (index > -1) {\n this.pages.splice(index, 1);\n // } \n //this.removeRenderedPages();\n var viewer = this;\n if (!isNullOrUndefined(viewer.visiblePages)) {\n if ((viewer.visiblePages).indexOf(page) > -1) {\n var pageIndex = (viewer.visiblePages).indexOf(page);\n (viewer.visiblePages).splice(pageIndex, 1);\n }\n }\n //(viewer as PageLayoutViewer).visiblePages.remove(page);\n var height = 0;\n for (var i = 0; i < this.pages.length; i++) {\n height = height + this.pages[i].boundingRectangle.height;\n }\n //Updates the vertical height.\n height -= page.boundingRectangle.height + 20;\n //ToDo:Update horizontal width, if removed page has max width.\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n if (index !== -1) {\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n // tslint:disable-next-line:max-line-length\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n page.repeatHeaderRowTableWidget = false;\n }\n }\n };\n // private removeRenderedPages(): void {\n // for (let i: number = 0; i < this.pages.length; i++) {\n // this.clearContainer(this.pages[i]);\n // }\n // }\n /**\n * Updates viewer size on window resize.\n * @private\n */\n LayoutViewer.prototype.updateViewerSize = function () {\n var viewer = this;\n var element = this.owner.getDocumentEditorElement();\n viewer.updateViewerSizeInternal(element);\n viewer.updateScrollBars();\n if (!isNullOrUndefined(this.selection)) {\n this.selection.updateCaretPosition();\n }\n };\n /**\n * Updates viewer size.\n */\n LayoutViewer.prototype.updateViewerSizeInternal = function (element) {\n if (!isNullOrUndefined(element)) {\n var rect = element.getBoundingClientRect();\n var width = 0;\n var height = 0;\n height = rect.height > 0 ? rect.height : 200;\n if (this.owner.optionsPaneModule && this.owner.optionsPaneModule.isOptionsPaneShow) {\n var optionsRect = this.owner.optionsPaneModule.optionsPane.getBoundingClientRect();\n width = (rect.width - optionsRect.width) > 0 ? (rect.width - optionsRect.width) : 200;\n }\n else {\n width = rect.width > 0 ? rect.width : 200;\n }\n this.viewerContainer.style.height = height.toString() + 'px';\n this.viewerContainer.style.width = Math.ceil(width) + 'px';\n this.visibleBoundsIn = new Rect(0, 0, width, height);\n this.containerCanvas.width = width;\n this.containerCanvas.height = height;\n this.selectionCanvas.width = width;\n this.selectionCanvas.height = height;\n }\n };\n /**\n * Updates client area for block.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForBlock = function (block, beforeLayout, tableCollection) {\n var leftIndent = HelperMethods.convertPointToPixel(block.leftIndent);\n var rightIndent = HelperMethods.convertPointToPixel(block.rightIndent);\n if (beforeLayout) {\n if (block instanceof TableWidget && tableCollection) {\n var tableWidget = tableCollection[0];\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n //Updates the location of last item.\n tableWidget = tableCollection[tableCollection.length - 1];\n tableWidget.x = this.clientActiveArea.x;\n tableWidget.y = this.clientActiveArea.y;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n else {\n // tslint:disable-next-line:max-line-length\n if (block instanceof TableWidget && !isNullOrUndefined(block.tableFormat) && block.tableFormat.tableAlignment !== 'Left') {\n if (!block.isGridUpdated) {\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n var tableWidth = block.getMaxRowWidth(block.getTableClientWidth(block.getOwnerWidth(false)));\n // Fore resizing table, the tableholder table width taken for updated width. \n // Since, the columns will be cleared if we performed resizing.\n if (this.owner.editor && this.owner.editor.tableResize.currentResizingTable === block\n && this.owner.editor.tableResize.resizerPosition === 0) {\n tableWidth = block.tableHolder.tableWidth;\n }\n tableWidth = HelperMethods.convertPointToPixel(tableWidth);\n if (block.tableFormat.tableAlignment === 'Center') {\n leftIndent = (this.clientArea.width - tableWidth) / 2;\n }\n else {\n leftIndent = this.clientArea.width - tableWidth;\n }\n this.tableLefts.push(leftIndent);\n }\n this.clientActiveArea.x = this.clientArea.x = this.clientArea.x + leftIndent;\n var width = this.clientArea.width - (leftIndent + rightIndent);\n this.clientActiveArea.width = this.clientArea.width = width > 0 ? width : 0;\n // tslint:disable-next-line:max-line-length\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n }\n else {\n // tslint:disable-next-line:max-line-length\n if (block instanceof TableWidget && block.tableFormat.tableAlignment !== 'Left' && this.tableLefts.length > 0) {\n leftIndent = this.tableLefts.pop();\n }\n this.clientActiveArea.x = this.clientArea.x = this.clientArea.x - leftIndent;\n var width = this.clientArea.width + leftIndent + rightIndent;\n this.clientActiveArea.width = this.clientArea.width = width > 0 ? width : 0;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n /**\n * Updates client active area left.\n * @private\n */\n LayoutViewer.prototype.cutFromLeft = function (x) {\n if (x < this.clientActiveArea.x) {\n x = this.clientActiveArea.x;\n }\n if (x > this.clientActiveArea.right && this.textWrap) {\n x = this.clientActiveArea.right;\n }\n this.clientActiveArea.width = this.clientActiveArea.right > x ? this.clientActiveArea.right - x : 0;\n this.clientActiveArea.x = x;\n };\n /**\n * Updates client active area top.\n * @private\n */\n LayoutViewer.prototype.cutFromTop = function (y) {\n if (y < this.clientActiveArea.y) {\n y = this.clientActiveArea.y;\n }\n if (y > this.clientActiveArea.bottom) {\n y = this.clientActiveArea.bottom;\n }\n this.clientActiveArea.height = this.clientActiveArea.bottom - y;\n this.clientActiveArea.x = this.clientArea.x;\n this.clientActiveArea.width = this.clientArea.width;\n this.clientActiveArea.y = y;\n };\n /**\n * Updates client width.\n * @private\n */\n LayoutViewer.prototype.updateClientWidth = function (width) {\n this.clientActiveArea.x -= width;\n if (this.clientActiveArea.width + width > 0) {\n this.clientActiveArea.width += width;\n }\n else {\n this.clientActiveArea.width = 0;\n }\n };\n /**\n * Inserts page in specified index.\n * @private\n */\n LayoutViewer.prototype.insertPage = function (index, page) {\n if (this.pages.indexOf(page) > -1) {\n this.pages.splice(this.pages.indexOf(page), 1);\n }\n this.pages.splice(index, 0, page);\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n }\n };\n /**\n * Updates client area.\n * @private\n */\n LayoutViewer.prototype.updateClientArea = function (sectionFormat, page) {\n var top = 0;\n var headerDistance = 48;\n var footerDistance = 48;\n var pageHeight = HelperMethods.convertPointToPixel(sectionFormat.pageHeight);\n var bottomMargin = HelperMethods.convertPointToPixel(sectionFormat.bottomMargin);\n if (!isNullOrUndefined(sectionFormat)) {\n top = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n }\n if (!isNullOrUndefined(page.headerWidget)) {\n top = Math.min(Math.max(headerDistance + page.headerWidget.height, top), pageHeight / 100 * 40);\n }\n var bottom = 0.667 + bottomMargin;\n if (!isNullOrUndefined(page.footerWidget)) {\n bottom = 0.667 + Math.min(pageHeight / 100 * 40, Math.max(footerDistance + page.footerWidget.height, bottomMargin));\n }\n var width = 0;\n var height = 0;\n if (!isNullOrUndefined(sectionFormat)) {\n width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n height = pageHeight - top - bottom;\n }\n if (width < 0) {\n width = 0;\n }\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), top, width, pageHeight - top - bottom);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n };\n /**\n * Updates client area left or top position.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaTopOrLeft = function (tableWidget, beforeLayout) {\n if (beforeLayout) {\n this.clientActiveArea.y = this.clientActiveArea.y + tableWidget.topBorderWidth;\n this.clientActiveArea.x = this.clientActiveArea.x + tableWidget.leftBorderWidth;\n }\n };\n /**\n * Updates client area for table.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForTable = function (tableWidget) {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n };\n /**\n * Updates client area for row.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForRow = function (row, beforeLayout) {\n // tslint:disable-next-line:max-line-length\n var tableWidget = row.ownerTable;\n if (beforeLayout) {\n //tslint:disable:no-empty\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n /**\n * Updates client area for cell.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForCell = function (cell, beforeLayout) {\n // tslint:disable-next-line:max-line-length\n var rowWidget = cell.ownerRow;\n var cellWidget = cell;\n if (beforeLayout) {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x;\n this.clientActiveArea.y = cellWidget.y;\n this.clientActiveArea.width = this.clientArea.width = cellWidget.width > 0 ? cellWidget.width : 0;\n if (this instanceof PageLayoutViewer) {\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x + cellWidget.width + cellWidget.margin.right;\n if (rowWidget.x + rowWidget.width - this.clientArea.x < 0) {\n this.clientActiveArea.width = this.clientArea.width = 0;\n }\n else {\n this.clientActiveArea.width = this.clientArea.width = rowWidget.x + rowWidget.width - this.clientArea.x;\n }\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea.y = cellWidget.y - cellWidget.margin.top - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n if (!cell.ownerTable.isInsideTable) {\n this.clientActiveArea.height = this.clientArea.bottom - rowWidget.y > 0 ? this.clientArea.bottom - rowWidget.y : 0;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n /**\n * Updates the client area based on widget.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaByWidget = function (widget) {\n this.clientArea.x = widget.x;\n this.clientArea.y = widget.y;\n this.clientActiveArea.x = widget.x;\n this.clientActiveArea.y = widget.y;\n };\n //Widget\n /**\n * Updates client area location.\n * @param widget\n * @param area\n * @private\n */\n LayoutViewer.prototype.updateClientAreaLocation = function (widget, area) {\n widget.x = area.x;\n widget.y = area.y;\n widget.width = area.width;\n };\n /**\n * Updates text position for selection.\n * @param cursorPoint\n * @param tapCount\n * @param clearMultiSelection\n * @private\n */\n LayoutViewer.prototype.updateTextPositionForSelection = function (cursorPoint, tapCount) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n this.selection.updateTextPosition(widget, cursorPoint);\n }\n if (tapCount > 1) {\n this.isMouseDown = false;\n this.useTouchSelectionMark = false;\n if (this.pages.length === 0) {\n return;\n }\n //Double tap/triple tap selection\n if (!isNullOrUndefined(this.currentPage) && !isNullOrUndefined(this.owner.selection.start)) {\n if (tapCount % 2 === 0) {\n this.owner.selection.selectCurrentWord();\n }\n else {\n this.owner.selection.selectCurrentParagraph();\n }\n }\n }\n };\n /**\n * Scrolls to specified position.\n * @param startPosition\n * @param endPosition\n * @private\n */\n LayoutViewer.prototype.scrollToPosition = function (startPosition, endPosition) {\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizing\n || this.isMouseDownInFooterRegion || this.isRowOrCellResizing) {\n return;\n }\n var lineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, true);\n if (isNullOrUndefined(lineWidget)) {\n return;\n }\n var top = this.selection.getTop(lineWidget);\n if (this.isMouseDown) {\n var prevLineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, false);\n var prevTop = this.selection.getTop(prevLineWidget);\n if (prevLineWidget !== lineWidget && endPosition.location.y >= prevTop) {\n lineWidget = prevLineWidget;\n }\n }\n var height = lineWidget.height;\n //Gets current page.\n var endPage = this.selection.getPage(lineWidget.paragraph);\n this.currentPage = endPage;\n var x = 0;\n var y = 0;\n var viewer = this;\n var horizontalWidth = 0;\n var isPageLayout = viewer instanceof PageLayoutViewer;\n if (isPageLayout) {\n var pageLayout = viewer;\n if (isNullOrUndefined(endPage)) {\n return;\n }\n var pageWidth = endPage.boundingRectangle.width;\n x = (this.visibleBounds.width - pageWidth * this.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n // tslint:disable-next-line:max-line-length\n y = endPage.boundingRectangle.y * this.zoomFactor + (this.pages.indexOf(endPage) + 1) * viewer.pageGap * (1 - this.zoomFactor);\n }\n var scrollTop = this.containerTop;\n var scrollLeft = this.containerLeft;\n var pageHeight = this.visibleBounds.height;\n var caretInfo = this.selection.updateCaretSize(this.owner.selection.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (endPosition.location.x) * this.zoomFactor;\n y += (endPosition.location.y + topMargin) * this.zoomFactor;\n //vertical scroll bar update\n if ((scrollTop + 20) > y) {\n this.viewerContainer.scrollTop = (y - 10);\n }\n else if (scrollTop + pageHeight < y + caretHeight) {\n this.viewerContainer.scrollTop = y + caretHeight - pageHeight + 10;\n }\n else {\n this.selection.updateCaretToPage(startPosition, endPage);\n }\n this.selection.updateCaretToPage(startPosition, endPage);\n var scrollBarWidth = this.viewerContainer.offsetWidth - this.viewerContainer.clientWidth;\n if (scrollLeft > x) {\n this.viewerContainer.scrollLeft = x - (viewer.pageContainer.offsetWidth / 100) * 20;\n }\n else if (scrollLeft + this.visibleBounds.width < x + scrollBarWidth) {\n this.viewerContainer.scrollLeft = scrollLeft + (viewer.pageContainer.offsetWidth / 100) * 15 + scrollBarWidth;\n }\n };\n /**\n * Gets line widget using cursor point.\n * @private\n */\n LayoutViewer.prototype.getLineWidget = function (cursorPoint) {\n return this.getLineWidgetInternal(cursorPoint, false);\n };\n /**\n * Gets line widget.\n * @private\n */\n LayoutViewer.prototype.getLineWidgetInternal = function (cursorPoint, isMouseDragged) {\n var widget = undefined;\n if (!isNullOrUndefined(this.currentPage)) {\n var childWidgets = void 0;\n if (this.owner.enableHeaderAndFooter) {\n var page = this.currentPage;\n var pageTop = this.selection.getPageTop(page);\n var pageBottom = page.boundingRectangle.height;\n var headerHeight = Math.max((page.headerWidget.y + page.headerWidget.height), HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin)) * this.zoomFactor;\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = (page.boundingRectangle.height -\n Math.max(page.footerWidget.height + footerDistance, footerDistance * 2));\n if (isMouseDragged) {\n if (this.isBlockInHeader(this.selection.start.paragraph)) {\n childWidgets = this.currentPage.headerWidget;\n }\n else {\n childWidgets = this.currentPage.footerWidget;\n }\n }\n else {\n if (cursorPoint.y <= pageBottom && cursorPoint.y >= footerHeight) {\n childWidgets = this.currentPage.footerWidget;\n }\n else if ((cursorPoint.y) >= 0 && (cursorPoint.y) <= headerHeight) {\n childWidgets = this.currentPage.headerWidget;\n }\n }\n if (isNullOrUndefined(childWidgets)) {\n return undefined;\n }\n return this.selection.getLineWidgetBodyWidget(childWidgets, cursorPoint);\n }\n else {\n for (var i = 0; i < this.currentPage.bodyWidgets.length; i++) {\n var bodyWidgets = this.currentPage.bodyWidgets[i];\n widget = this.selection.getLineWidgetBodyWidget(bodyWidgets, cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n }\n return widget;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.isBlockInHeader = function (block) {\n while (!(block.containerWidget instanceof HeaderFooterWidget)) {\n if (!block.containerWidget) {\n return false;\n }\n block = block.containerWidget;\n }\n return block.containerWidget.headerFooterType.indexOf('Header') !== -1;\n };\n /**\n * Clears selection highlight.\n * @private\n */\n LayoutViewer.prototype.clearSelectionHighlight = function () {\n var canClear = true;\n canClear = (!this.isControlPressed || !this.isMouseDown);\n // if (this.owner.selection.selectionRanges.length > 0 && canClear) {\n if (this.owner.selection.clearSelectionHighlightInSelectedWidgets()) {\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n }\n // } else if (!isNullOrUndefined(this.owner.selection.currentSelectionRange) && this.isMouseDown) {\n // this.owner.selection.currentSelectionRange.clearSelectionHighlight();\n // }\n //this.renderVisiblePages();\n };\n /**\n * @private\n */\n LayoutViewer.prototype.removeEmptyPages = function () {\n var scrollToLastPage = false;\n var viewer = this;\n for (var j = 0; j < this.pages.length; j++) {\n var page = this.pages[j];\n if (page.bodyWidgets.length === 0 || page.bodyWidgets[0].childWidgets.length === 0) {\n // tslint:disable-next-line:max-line-length\n if (j === this.pages.length - 1 && viewer instanceof PageLayoutViewer && viewer.visiblePages.indexOf(this.pages[j]) !== -1) {\n scrollToLastPage = true;\n }\n this.removePage(this.pages[j]);\n j--;\n }\n }\n if (scrollToLastPage) {\n this.scrollToBottom();\n }\n };\n /**\n * @private\n */\n LayoutViewer.prototype.scrollToBottom = function () {\n if (this.selection.start.paragraph && this.selection.start.paragraph.bodyWidget) {\n var page = this.selection.start.paragraph.bodyWidget.page;\n var containerHeight = this.visibleBounds.height;\n this.viewerContainer.scrollTop = page.boundingRectangle.bottom - containerHeight;\n }\n };\n /**\n * Returns the field code result.\n * @private\n */\n LayoutViewer.prototype.getFieldResult = function (fieldBegin, page) {\n if (!isNullOrUndefined(page) && !isNullOrUndefined(this.selection)) {\n var fieldCode = this.selection.getFieldCode(fieldBegin);\n var fieldCodes = fieldCode.split('\\*');\n if (fieldCodes.length > 1) {\n var fieldCategory = fieldCodes[0].replace(/[^\\w\\s]/gi, '').trim().toLowerCase();\n var fieldPattern = fieldCodes[1].replace(/[^\\w\\s]/gi, '').trim();\n switch (fieldCategory) {\n case 'page':\n return this.getFieldText(fieldPattern, (page.index + 1));\n case 'numpages':\n return this.getFieldText(fieldPattern, page.viewer.pages.length);\n default:\n break;\n }\n }\n }\n return '';\n };\n /**\n * Returns field text.\n */\n LayoutViewer.prototype.getFieldText = function (pattern, value) {\n switch (pattern) {\n case 'ALPHABETIC':\n return this.layout.getAsLetter(value).toUpperCase();\n case 'alphabetic':\n return this.layout.getAsLetter(value).toLowerCase();\n case 'roman':\n return this.layout.getAsRoman(value).toLowerCase();\n case 'ROMAN':\n return this.layout.getAsRoman(value).toUpperCase();\n default:\n return value.toString();\n }\n };\n /**\n * Destroys the internal objects maintained for control.\n */\n LayoutViewer.prototype.destroy = function () {\n if (!isNullOrUndefined(this.owner)) {\n this.unWireEvent();\n }\n this.pages = [];\n this.pages = undefined;\n this.fieldStacks = [];\n this.fieldStacks = undefined;\n this.splittedCellWidgets = [];\n this.splittedCellWidgets = undefined;\n this.fields = [];\n this.fields = undefined;\n if (this.layout) {\n this.layout.destroy();\n }\n this.layout = undefined;\n if (!isNullOrUndefined(this.render)) {\n this.render.destroy();\n }\n this.render = undefined;\n if (this.dialogInternal) {\n this.dialogInternal.destroy();\n }\n this.dialogInternal = undefined;\n if (this.dialogTarget && this.dialogTarget.parentElement) {\n this.dialogTarget.parentElement.removeChild(this.dialogTarget);\n }\n this.dialogTarget = undefined;\n if (!isNullOrUndefined(this.touchStart)) {\n this.touchStart.innerHTML = '';\n }\n if (this.textHelper) {\n this.textHelper.destroy();\n }\n this.textHelper = undefined;\n this.touchStart = undefined;\n if (!isNullOrUndefined(this.touchEnd)) {\n this.touchEnd.innerHTML = '';\n }\n this.touchEnd = undefined;\n if (!isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn.innerHTML = '';\n }\n this.containerCanvasIn = undefined;\n if (!isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn.innerHTML = '';\n }\n this.selectionCanvasIn = undefined;\n if (!isNullOrUndefined(this.editableDiv)) {\n this.editableDiv.innerHTML = '';\n this.editableDiv.parentElement.removeChild(this.editableDiv);\n }\n this.editableDiv = undefined;\n if (!isNullOrUndefined(this.pageContainer)) {\n this.pageContainer.innerHTML = '';\n }\n this.pageContainer = undefined;\n if (!isNullOrUndefined(this.viewerContainer)) {\n this.viewerContainer.innerHTML = '';\n }\n this.viewerContainer = undefined;\n this.owner = undefined;\n this.heightInfoCollection = undefined;\n };\n /**\n * Un-Wires events and methods\n */\n LayoutViewer.prototype.unWireEvent = function () {\n this.viewerContainer.removeEventListener('scroll', this.scrollHandler);\n this.viewerContainer.removeEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.removeEventListener('mousemove', this.onMouseMoveInternal);\n if (!Browser.isDevice) {\n this.editableDiv.removeEventListener('keypress', this.onKeyPressInternal);\n if (Browser.info.name === 'chrome') {\n this.editableDiv.removeEventListener('textInput', this.onTextInput);\n }\n }\n else {\n this.editableDiv.removeEventListener('input', this.onTextInputInternal);\n }\n this.editableDiv.removeEventListener('paste', this.onPaste);\n this.viewerContainer.removeEventListener('contextmenu', this.onContextMenu);\n this.editableDiv.removeEventListener('blur', this.onFocusOut);\n this.editableDiv.removeEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.removeEventListener('compositionstart', this.compositionStart);\n this.editableDiv.removeEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.removeEventListener('compositionend', this.compositionEnd);\n this.viewerContainer.removeEventListener('mouseup', this.onMouseUpInternal);\n this.viewerContainer.removeEventListener('dblclick', this.onDoubleTap);\n window.removeEventListener('resize', this.onWindowResize);\n window.removeEventListener('keyup', this.onKeyUpInternal);\n window.removeEventListener('mouseup', this.onImageResizer);\n window.removeEventListener('touchend', this.onImageResizer);\n };\n return LayoutViewer;\n}());\nexport { LayoutViewer };\n/**\n * @private\n */\nvar PageLayoutViewer = /** @class */ (function (_super) {\n __extends(PageLayoutViewer, _super);\n /**\n * Initialize the constructor of PageLayoutViewer\n */\n function PageLayoutViewer(owner) {\n var _this = _super.call(this, owner) || this;\n _this.pageLeft = 30;\n /**\n * @private\n */\n _this.pageGap = 20;\n /**\n * @private\n */\n _this.visiblePages = [];\n if (isNullOrUndefined(owner) || isNullOrUndefined(owner.element)) {\n return _this;\n }\n return _this;\n }\n /**\n * Creates new page.\n * @private\n */\n PageLayoutViewer.prototype.createNewPage = function (section, index) {\n var viewer = this;\n var yPos = this.pageGap;\n if (this.pages.length > 0) {\n yPos = this.pages[this.pages.length - 1].boundingRectangle.bottom + this.pageGap;\n }\n var page = new Page();\n page.viewer = this;\n // tslint:disable-next-line:max-line-length\n var pageWidth = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth) : 816;\n // tslint:disable-next-line:max-line-length\n var pageHeight = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight) : 1056;\n var xPos = (this.visibleBounds.width - pageWidth * this.zoomFactor) / 2;\n if (xPos < this.pageLeft) {\n xPos = this.pageLeft;\n }\n page.boundingRectangle = new Rect(xPos, yPos, pageWidth, pageHeight);\n if (isNullOrUndefined(index)) {\n this.pages.push(page);\n }\n else {\n this.pages.splice(index, 0, page);\n }\n this.updateClientArea(section.sectionFormat, page);\n page.bodyWidgets.push(section);\n page.bodyWidgets[page.bodyWidgets.length - 1].page = page;\n this.layout.layoutHeaderFooter(section, viewer, page);\n this.updateClientArea(section.sectionFormat, page);\n return page;\n };\n /**\n * Updates cursor.\n */\n PageLayoutViewer.prototype.updateCursor = function (event) {\n var hyperlinkField = undefined;\n var div = this.viewerContainer;\n var point = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.findFocusedPage(point, true);\n var widget = this.getLineWidget(touchPoint);\n var widgetInfo;\n var left;\n var top;\n var editor = !this.owner.isReadOnlyMode ? this.owner.editorModule : undefined;\n var isRowResize = editor ? editor.tableResize.isInRowResizerArea(touchPoint) : false;\n var isCellResize = editor ? editor.tableResize.isInCellResizerArea(touchPoint) : false;\n var resizePosition = '';\n if (this.owner.enableImageResizerMode) {\n var resizeObj = this.owner.imageResizerModule.getImagePoint(touchPoint);\n this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n resizePosition = resizeObj.resizePosition;\n }\n var lineLeft = 0;\n if (!isNullOrUndefined(widget)) {\n lineLeft = this.selection.getLineStartLeft(widget);\n hyperlinkField = this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint);\n widgetInfo = this.selection.updateTextPositionIn(widget, undefined, 0, touchPoint, true);\n left = this.selection.getLeft(widget);\n top = this.selection.getTop(widget);\n this.selection.setHyperlinkContentToToolTip(hyperlinkField, widget, touchPoint.x);\n }\n if (!isNullOrUndefined(hyperlinkField) && (event.ctrlKey &&\n this.owner.useCtrlClickToFollowHyperlink || !this.owner.useCtrlClickToFollowHyperlink)) {\n div.style.cursor = 'pointer';\n return;\n }\n else if (touchPoint.x >= lineLeft &&\n event.offsetX < (this.visibleBounds.width - (this.visibleBounds.width - this.viewerContainer.clientWidth)) &&\n event.offsetY < (this.visibleBounds.height - (this.visibleBounds.height - this.viewerContainer.clientHeight))) {\n if (this.selection.isEmpty) {\n div.style.cursor = 'text';\n }\n else {\n div.style.cursor = this.selection.checkCursorIsInSelection(widget, touchPoint) ? 'default' : 'text';\n }\n }\n else {\n div.style.cursor = 'default';\n }\n if (!isNullOrUndefined(resizePosition) && resizePosition !== '') {\n div.style.cursor = resizePosition;\n }\n else if (!isNullOrUndefined(widgetInfo) && widgetInfo.isImageSelected && left < touchPoint.x && top < touchPoint.y &&\n left + widget.width > touchPoint.x && top + widget.height > touchPoint.y) {\n div.style.cursor = 'move';\n }\n if (isRowResize) {\n div.style.cursor = 'row-resize';\n }\n else if (isCellResize) {\n div.style.cursor = 'col-resize';\n }\n };\n /**\n * Finds focused page.\n * @private\n */\n PageLayoutViewer.prototype.findFocusedPage = function (currentPoint, updateCurrentPage) {\n var point = new Point(currentPoint.x, currentPoint.y);\n point.x += this.viewerContainer.scrollLeft;\n point.y += this.viewerContainer.scrollTop;\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n var pageTop = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.zoomFactor + this.pageGap * (i + 1);\n var pageHeight = (page.boundingRectangle.height * this.zoomFactor) + this.pageGap;\n var pageLeft = page.boundingRectangle.x;\n var pageRight = ((page.boundingRectangle.right - pageLeft) * this.zoomFactor) + pageLeft;\n if (pageTop <= point.y && pageTop + pageHeight >= point.y) {\n if (updateCurrentPage) {\n this.currentPage = page;\n }\n point.y = (point.y - (pageTop)) / this.zoomFactor;\n if (point.x > pageRight) {\n point.x = page.boundingRectangle.right;\n }\n else if (point.x < pageLeft) {\n point.x = 0;\n }\n else {\n point.x = (point.x - pageLeft) / this.zoomFactor;\n }\n return point;\n }\n }\n return point;\n };\n /**\n * Fired when page fit type changed.\n * @private\n */\n PageLayoutViewer.prototype.onPageFitTypeChanged = function (pageFitType) {\n var width = this.visibleBounds.width;\n var height = this.visibleBounds.height;\n var section = this.visiblePages[0].bodyWidgets[0];\n var pageWidth = HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth);\n var pageHeight = HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight);\n switch (pageFitType) {\n case 'FitOnePage':\n if (height > 0 && pageHeight > 0) {\n var zoomFactor = (this.visibleBounds.height - 2 * this.pageGap - (this.pageGap - 2)) / pageHeight;\n if (zoomFactor === this.zoomFactor) {\n if (!isNullOrUndefined(this.owner.selection) && !isNullOrUndefined(this.owner.selection.start) &&\n !isNullOrUndefined(this.owner.selection.end)) {\n this.scrollToPosition(this.owner.selection.start, this.owner.selection.end);\n }\n }\n else {\n this.zoomFactor = zoomFactor;\n }\n }\n break;\n case 'FitPageWidth':\n if (width > 0 && pageWidth > 0) {\n this.zoomFactor = (this.visibleBounds.width - 80) / pageWidth;\n }\n break;\n default:\n this.zoomFactor = 100 / 100;\n break;\n }\n };\n /**\n * @private\n */\n PageLayoutViewer.prototype.handleZoom = function () {\n var prevScaleFactor = this.preZoomFactor;\n var page = null;\n var verticalHeight = 0;\n var scrollToPosition = false;\n if (this.selection && isNullOrUndefined(this.zoomX && isNullOrUndefined(this.zoomY))) {\n var x = 0;\n var y = 0;\n var endPage = this.selection.getPage(this.selection.end.currentWidget.paragraph);\n x = (this.visibleBounds.width - endPage.boundingRectangle.width * prevScaleFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n // tslint:disable-next-line:max-line-length\n y = endPage.boundingRectangle.y * prevScaleFactor + (this.pages.indexOf(endPage) + 1) * this.pageGap * (1 - prevScaleFactor);\n var caretInfo = this.selection.updateCaretSize(this.owner.selection.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (this.selection.end.location.x) * prevScaleFactor;\n y += (this.selection.end.location.y + topMargin) * prevScaleFactor;\n if (x >= this.containerLeft && x <= this.visibleBounds.width &&\n y >= this.containerTop && y <= this.containerTop + this.visibleBounds.height) {\n scrollToPosition = true;\n }\n }\n for (var i = 0; i < this.pages.length; i++) {\n verticalHeight = verticalHeight + this.pages[i].boundingRectangle.height;\n }\n var horizontalWidth = 0;\n for (var i = 0; i < this.pages.length; i++) {\n if (horizontalWidth < this.pages[i].boundingRectangle.width) {\n horizontalWidth = this.pages[i].boundingRectangle.width;\n }\n }\n // tslint:disable-next-line:max-line-length\n var height = (verticalHeight * this.zoomFactor + (this.pages.length + 1) * this.pageGap * (1 - this.zoomFactor)) - this.visibleBounds.height;\n var horWidth = horizontalWidth * this.zoomFactor - this.visibleBounds.width;\n if (this.visibleBounds.width - horizontalWidth * this.zoomFactor < 60) {\n horWidth += 60;\n }\n //Update Vertical Scroll bar\n if (height > 0) {\n var value = this.containerTop;\n if (this.visiblePages.length > 0) {\n page = this.visiblePages[0];\n // tslint:disable-next-line:max-line-length\n var prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n var zoomY = this.zoomY;\n if (isNullOrUndefined) {\n zoomY = this.visibleBounds.height / 2;\n }\n var prevY = value + zoomY;\n while (prevY > prevPageTop + (page.boundingRectangle.height * prevScaleFactor)) {\n var pageIndex = page.index + 1;\n if (pageIndex === this.pages.length) {\n break;\n }\n page = this.pages[pageIndex];\n // tslint:disable-next-line:max-line-length\n prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n }\n // tslint:disable-next-line:max-line-length\n var currentY = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * this.zoomFactor + (page.index + 1) * this.pageGap\n + ((prevY - prevPageTop) < 0 ? prevY - prevPageTop : (prevY - prevPageTop) * (this.zoomFactor / prevScaleFactor));\n value = currentY - zoomY;\n zoomY = this.visibleBounds.height / 2;\n }\n this.viewerContainer.scrollTop = value;\n }\n else {\n this.viewerContainer.scrollTop = 0;\n }\n // update Horizontal Scroll Bar\n if (horWidth > 0) {\n var value = this.containerLeft;\n if (this.visiblePages.length > 0) {\n if (page === null) {\n page = this.visiblePages[0];\n }\n var zoomX = this.zoomX;\n if (isNullOrUndefined(zoomX)) {\n zoomX = this.visibleBounds.width / 2;\n }\n var prevValue = (page.boundingRectangle.width * prevScaleFactor) / page.boundingRectangle.width;\n var prevX = value + zoomX;\n // tslint:disable-next-line:max-line-length\n var currentX = page.boundingRectangle.x\n + ((prevX - page.boundingRectangle.x) < 0 ? prevX - page.boundingRectangle.x : (prevX - page.boundingRectangle.x) * (this.zoomFactor / prevValue));\n value = currentX - zoomX;\n zoomX = this.visibleBounds.width / 2;\n }\n this.viewerContainer.scrollLeft = value;\n }\n else {\n this.viewerContainer.scrollLeft = 0;\n }\n this.updateScrollBars();\n if (scrollToPosition) {\n this.scrollToPosition(this.selection.start, this.selection.end);\n }\n };\n /**\n * Gets current page header footer.\n * @private\n */\n PageLayoutViewer.prototype.getCurrentPageHeaderFooter = function (section, isHeader) {\n return this.getCurrentHeaderFooter(this.getHeaderFooterType(section, isHeader), section.index);\n };\n /**\n * Get header footer type\n * @private\n */\n PageLayoutViewer.prototype.getHeaderFooterType = function (section, isHeader) {\n var type;\n type = isHeader ? 'OddHeader' : 'OddFooter';\n // tslint:disable-next-line:max-line-length\n if (section.sectionFormat.differentFirstPage && (this.pages.length === 1 || this.pages[this.pages.length - 1].bodyWidgets[0].index !== section.index)) {\n type = isHeader ? 'FirstPageHeader' : 'FirstPageFooter';\n }\n else if (section.sectionFormat.differentOddAndEvenPages && this.pages.length % 2 === 0) {\n type = isHeader ? 'EvenHeader' : 'EvenFooter';\n }\n return type;\n };\n /**\n * Gets current header footer.\n * @param type\n * @param section\n * @private\n */\n PageLayoutViewer.prototype.getCurrentHeaderFooter = function (type, sectionIndex) {\n if (this.headersFooters[sectionIndex]) {\n var index = this.getHeaderFooter(type);\n var headerFooter = this.headersFooters[sectionIndex][index];\n if (!headerFooter) {\n headerFooter = this.createHeaderFooterWidget(type);\n this.headersFooters[sectionIndex][index] = headerFooter;\n }\n return headerFooter;\n }\n else if (sectionIndex > 0) {\n return this.getCurrentHeaderFooter(type, sectionIndex - 1);\n }\n return undefined;\n };\n PageLayoutViewer.prototype.createHeaderFooterWidget = function (type) {\n var headerFooter = new HeaderFooterWidget(type);\n var paragraph = new ParagraphWidget();\n paragraph.childWidgets.push(new LineWidget(paragraph));\n return headerFooter;\n };\n /**\n * Gets header footer.\n * @param type\n * @private\n */\n PageLayoutViewer.prototype.getHeaderFooter = function (type) {\n switch (type) {\n case 'OddHeader':\n return 0;\n case 'OddFooter':\n return 1;\n case 'EvenHeader':\n return 2;\n case 'EvenFooter':\n return 3;\n case 'FirstPageHeader':\n return 4;\n case 'FirstPageFooter':\n return 5;\n }\n };\n /**\n * Updates header footer client area.\n * @private\n */\n PageLayoutViewer.prototype.updateHFClientArea = function (sectionFormat, isHeader) {\n // tslint:disable-next-line:max-line-length\n var width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n if (width < 0) {\n width = 0;\n }\n if (isHeader) {\n // tslint:disable-next-line:max-line-length\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.headerDistance), width, Number.POSITIVE_INFINITY);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.pageHeight - sectionFormat.footerDistance), width, Number.POSITIVE_INFINITY);\n }\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n };\n /**\n * @private\n */\n PageLayoutViewer.prototype.updateHCFClientAreaWithTop = function (sectionFormat, isHeader, page) {\n this.updateHFClientArea(sectionFormat, isHeader);\n if (!isHeader) {\n if (page.footerWidget.y < this.clientActiveArea.y) {\n this.clientActiveArea.y = page.footerWidget.y;\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n }\n };\n /**\n * Scrolls to the specified page\n * @private\n */\n PageLayoutViewer.prototype.scrollToPage = function (pageIndex) {\n var top = 0;\n for (var i = 0; i < this.pages.length; i++) {\n top = this.pages[i].boundingRectangle.y - (this.pageGap / 2);\n if (i === pageIndex) {\n break;\n }\n }\n this.viewerContainer.scrollTop = top;\n this.updateScrollBars();\n };\n /**\n * Updates scroll bars.\n * @private\n */\n PageLayoutViewer.prototype.updateScrollBars = function () {\n var height = 0;\n for (var i = 0; i < this.pages.length; i++) {\n height = height + this.pages[i].boundingRectangle.height;\n }\n var width = 0;\n for (var i = 0; i < this.pages.length; i++) {\n if (width < this.pages[i].boundingRectangle.width) {\n width = this.pages[i].boundingRectangle.width;\n }\n }\n var containerWidth = (width * this.zoomFactor) + (this.pageLeft * 2);\n var containerHeight = (height * this.zoomFactor) + (this.pages.length + 1) * this.pageGap;\n var viewerWidth = this.visibleBounds.width;\n var viewerHeight = this.visibleBounds.height;\n if (this.visibleBounds.width !== this.viewerContainer.clientWidth) {\n viewerWidth -= (this.visibleBounds.width - this.viewerContainer.clientWidth);\n }\n else if (containerHeight > viewerHeight) {\n viewerWidth -= this.viewerContainer.offsetWidth - this.viewerContainer.clientWidth;\n }\n if (containerWidth > viewerWidth) {\n viewerHeight -= (this.visibleBounds.height - this.viewerContainer.clientHeight);\n }\n width = containerWidth > viewerWidth ? containerWidth : viewerWidth;\n height = containerHeight > viewerHeight ? containerHeight : viewerHeight;\n if (parseInt(this.pageContainer.style.width.replace('px', ''), 10) !== width ||\n parseInt(this.pageContainer.style.height.replace('px', ''), 10) !== width) {\n this.pageContainer.style.width = width.toString() + 'px';\n this.pageContainer.style.height = height.toString() + 'px';\n }\n // if (!isNullOrUndefined(this.selection) && !this.selection.isEmpty) {\n // this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n // }\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n if (this.containerCanvas.width !== Math.floor(viewerWidth * displayPixelRatio)\n || this.containerCanvas.height !== Math.floor(viewerHeight * displayPixelRatio)) {\n this.containerCanvas.width = viewerWidth * displayPixelRatio;\n this.containerCanvas.height = viewerHeight * displayPixelRatio;\n this.containerCanvas.style.width = viewerWidth + 'px';\n this.containerCanvas.style.height = viewerHeight + 'px';\n this.containerContext.scale(displayPixelRatio, displayPixelRatio);\n this.selectionCanvas.width = viewerWidth * displayPixelRatio;\n this.selectionCanvas.height = viewerHeight * displayPixelRatio;\n this.selectionCanvas.style.width = viewerWidth + 'px';\n this.selectionCanvas.style.height = viewerHeight + 'px';\n this.selectionContext.scale(displayPixelRatio, displayPixelRatio);\n }\n this.containerContext.globalAlpha = 1;\n this.selectionContext.globalAlpha = 0.4;\n for (var i = 0; i < this.pages.length; i++) {\n var left = (width - this.pages[i].boundingRectangle.width * this.zoomFactor) / 2;\n if (left > this.pageLeft) {\n // tslint:disable-next-line:max-line-length\n this.pages[i].boundingRectangle = new Rect(left, this.pages[i].boundingRectangle.y, this.pages[i].boundingRectangle.width, this.pages[i].boundingRectangle.height);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.pages[i].boundingRectangle = new Rect(this.pageLeft, this.pages[i].boundingRectangle.y, this.pages[i].boundingRectangle.width, this.pages[i].boundingRectangle.height);\n }\n }\n this.updateScrollBarPosition(containerWidth, containerHeight, viewerWidth, viewerHeight, width, height);\n };\n // tslint:disable-next-line:max-line-length\n PageLayoutViewer.prototype.updateScrollBarPosition = function (containerWidth, containerHeight, viewerWidth, viewerHeight, width, height) {\n var left = 0;\n var viewerHeight1 = parseFloat(this.viewerContainer.style.height);\n var containerHeight1 = parseFloat(this.pageContainer.style.height);\n this.containerTop = this.viewerContainer.scrollTop;\n this.containerCanvas.style.position = 'absolute';\n this.containerCanvas.style.top = this.containerTop.toString() + 'px';\n this.selectionCanvas.style.position = 'absolute';\n this.selectionCanvas.style.top = this.containerTop.toString() + 'px';\n this.containerLeft = this.viewerContainer.scrollLeft;\n this.containerCanvas.style.left = this.containerLeft + 'px';\n this.selectionCanvas.style.left = this.containerLeft + 'px';\n this.updateVisiblePages();\n };\n /**\n * Updates visible pages.\n * @private\n */\n PageLayoutViewer.prototype.updateVisiblePages = function () {\n var left = 0;\n var width = 0;\n // Clears the container first.\n this.visiblePages = [];\n var height = this.visibleBounds.height;\n var vertical = this.viewerContainer.scrollTop;\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.zoomFactor + this.pageGap * (i + 1);\n var pageH = page.boundingRectangle.height * this.zoomFactor;\n var left_1 = page.boundingRectangle.x;\n var isTopFit = y >= vertical && y <= vertical + height;\n var isBottomFit = y + pageH >= vertical && y + pageH <= vertical + height;\n var isMiddleFit = y <= vertical && y + pageH >= vertical + height;\n //UI Virtualization\n if (isTopFit || isBottomFit || isMiddleFit) {\n this.addVisiblePage(page, left_1, y);\n }\n }\n };\n /**\n * Adds visible pages.\n */\n PageLayoutViewer.prototype.addVisiblePage = function (page, x, y) {\n var width = page.boundingRectangle.width * this.zoomFactor;\n var height = page.boundingRectangle.height * this.zoomFactor;\n // tslint:disable-next-line:max-line-length\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.currentPage !== undefined && this.owner.imageResizerModule.currentPage === page && this.owner.imageResizerModule.isImageResizerVisible) {\n this.owner.imageResizerModule.setImageResizerPositions(x, y, width, height);\n }\n this.visiblePages.push(page);\n this.renderPage(page, x, y, width, height);\n };\n /**\n * Render specified page widgets.\n */\n PageLayoutViewer.prototype.renderPage = function (page, x, y, width, height) {\n this.render.renderWidgets(page, x - this.containerLeft, y - this.containerTop, width, height);\n };\n /**\n * Renders visible pages.\n * @private\n */\n PageLayoutViewer.prototype.renderVisiblePages = function () {\n if (isNullOrUndefined(this.visiblePages) || this.visiblePages.length < 1) {\n return;\n }\n this.clearContent();\n for (var i = 0; i < this.visiblePages.length; i++) {\n var page = this.visiblePages[i];\n var width = page.boundingRectangle.width * this.zoomFactor;\n var height = page.boundingRectangle.height * this.zoomFactor;\n var x = page.boundingRectangle.x;\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.zoomFactor + this.pageGap * (i + 1);\n this.renderPage(page, x, y, width, height);\n }\n };\n return PageLayoutViewer;\n}(LayoutViewer));\nexport { PageLayoutViewer };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WListLevel } from '../list/list-level';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WListFormat, WParagraphFormat, WCellFormat, WTableFormat, WSectionFormat, WRowFormat } from '../format/index';\nimport { WCharacterStyle, WParagraphStyle, WTabStop } from '../format/index';\nimport { LineWidget, ParagraphWidget, ImageElementBox, BodyWidget, TextElementBox, TableCellWidget, TableRowWidget, TableWidget, FieldElementBox, HeaderFooterWidget, BookmarkElementBox, FieldTextElementBox, TabElementBox } from './page';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar SfdtReader = /** @class */ (function () {\n function SfdtReader(viewer) {\n /* tslint:disable:no-any */\n this.viewer = undefined;\n this.viewer = viewer;\n }\n Object.defineProperty(SfdtReader.prototype, \"isPasting\", {\n get: function () {\n return this.viewer && this.viewer.owner.isPastingContent;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param json\n */\n SfdtReader.prototype.convertJsonToDocument = function (json) {\n var sections = [];\n var jsonObject = JSON.parse(json);\n this.parseCharacterFormat(jsonObject.characterFormat, this.viewer.characterFormat);\n this.parseParagraphFormat(jsonObject.paragraphFormat, this.viewer.paragraphFormat);\n if (!isNullOrUndefined(jsonObject.background)) {\n this.viewer.backgroundColor = this.getColor(jsonObject.background.color);\n }\n if (!isNullOrUndefined(jsonObject.abstractLists)) {\n this.parseAbstractList(jsonObject, this.viewer.abstractLists);\n }\n if (!isNullOrUndefined(jsonObject.lists)) {\n this.parseList(jsonObject, this.viewer.lists);\n }\n if (!isNullOrUndefined(jsonObject.styles)) {\n this.parseStyles(jsonObject, this.viewer.styles);\n }\n if (!isNullOrUndefined(jsonObject.sections)) {\n this.parseSections(jsonObject.sections, sections);\n }\n return sections;\n };\n SfdtReader.prototype.parseStyles = function (data, styles) {\n for (var i = 0; i < data.styles.length; i++) {\n if (isNullOrUndefined(this.viewer.styles.findByName(data.styles[i].name))) {\n this.parseStyle(data, data.styles[i], styles);\n }\n }\n };\n SfdtReader.prototype.parseStyle = function (data, style, styles) {\n var wStyle;\n if (!isNullOrUndefined(style.type)) {\n if (style.type === 'Paragraph') {\n wStyle = new WParagraphStyle();\n wStyle.type = 'Paragraph';\n }\n if (style.type === 'Character') {\n wStyle = new WCharacterStyle();\n wStyle.type = 'Character';\n }\n if (!isNullOrUndefined(style.name)) {\n wStyle.name = style.name;\n }\n styles.push(wStyle);\n if (!isNullOrUndefined(style.basedOn)) {\n var basedOn = styles.findByName(style.basedOn);\n if (!isNullOrUndefined(basedOn)) {\n if (basedOn.type === wStyle.type) {\n wStyle.basedOn = basedOn;\n }\n }\n else {\n var basedStyle = this.getStyle(style.basedOn, data);\n var styleString = void 0;\n if (!isNullOrUndefined(basedStyle) && basedStyle.type === wStyle.type) {\n styleString = basedStyle;\n }\n else {\n if (wStyle.type === 'Paragraph') {\n styleString = JSON.parse('{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n }\n else {\n styleString = JSON.parse('{\"type\": \"Character\",\"name\": \"Default Paragraph Font\"}');\n }\n }\n this.parseStyle(data, styleString, styles);\n wStyle.basedOn = styles.findByName(styleString.name);\n }\n }\n if (!isNullOrUndefined(style.link)) {\n var link = styles.findByName(style.link);\n var linkStyle = this.getStyle(style.link, data);\n var styleString = void 0;\n if (isNullOrUndefined(link)) {\n if (isNullOrUndefined(linkStyle)) {\n //Construct the CharacterStyle string\n var charaStyle = {};\n charaStyle.characterFormat = style.characterFormat;\n charaStyle.name = style.name + ' Char';\n charaStyle.type = 'Character';\n //TODO: Implement basedOn\n charaStyle.basedOn = style.basedOn === 'Normal' ? 'Default Paragraph Font' : (style.basedOn + ' Char');\n styleString = charaStyle;\n }\n else {\n styleString = linkStyle;\n }\n this.parseStyle(data, styleString, styles);\n wStyle.link = isNullOrUndefined(styles.findByName(styleString.name)) ? style.link : styles.findByName(styleString.name);\n }\n else {\n wStyle.link = link;\n }\n }\n if (!isNullOrUndefined(style.characterFormat)) {\n this.parseCharacterFormat(style.characterFormat, wStyle.characterFormat);\n }\n if (!isNullOrUndefined(style.paragraphFormat)) {\n this.parseParagraphFormat(style.paragraphFormat, wStyle.paragraphFormat);\n }\n if (!isNullOrUndefined(style.next)) {\n if (style.next === style.name) {\n wStyle.next = wStyle;\n }\n else {\n var next = styles.findByName(style.next);\n if (!isNullOrUndefined(next) && next.type === wStyle.type) {\n wStyle.next = next;\n }\n else {\n var nextStyleString = this.getStyle(style.next, data);\n if (!isNullOrUndefined(nextStyleString)) {\n this.parseStyle(data, nextStyleString, styles);\n wStyle.next = styles.findByName(nextStyleString.name);\n }\n else {\n wStyle.next = wStyle;\n }\n }\n }\n }\n }\n };\n SfdtReader.prototype.getStyle = function (name, data) {\n for (var i = 0; i < data.styles.length; i++) {\n if (data.styles[i].name === name) {\n return data.styles[i];\n }\n }\n return undefined;\n };\n SfdtReader.prototype.parseAbstractList = function (data, abstractLists) {\n for (var i = 0; i < data.abstractLists.length; i++) {\n var abstractList = new WAbstractList();\n var abstract = data.abstractLists[i];\n abstractLists.push(abstractList);\n if (!isNullOrUndefined(abstract)) {\n if (!isNullOrUndefined(abstract.abstractListId)) {\n abstractList.abstractListId = abstract.abstractListId;\n }\n if (!isNullOrUndefined(abstract.levels)) {\n for (var j = 0; j < abstract.levels.length; j++) {\n var level = abstract.levels[j];\n if (!isNullOrUndefined(level)) {\n var listLevel = this.parseListLevel(level, abstractList);\n abstractList.levels.push(listLevel);\n }\n }\n }\n }\n }\n };\n SfdtReader.prototype.parseListLevel = function (data, owner) {\n var listLevel = new WListLevel(owner);\n if (data.listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = !isNullOrUndefined(data.numberFormat) ? data.numberFormat : '';\n }\n else {\n listLevel.listLevelPattern = data.listLevelPattern;\n listLevel.startAt = data.startAt;\n listLevel.numberFormat = !isNullOrUndefined(data.numberFormat) ? data.numberFormat : '';\n if (data.restartLevel >= 0) {\n listLevel.restartLevel = data.restartLevel;\n }\n else {\n listLevel.restartLevel = data.levelNumber;\n }\n }\n listLevel.followCharacter = data.followCharacter;\n this.parseCharacterFormat(data.characterFormat, listLevel.characterFormat);\n this.parseParagraphFormat(data.paragraphFormat, listLevel.paragraphFormat);\n return listLevel;\n };\n SfdtReader.prototype.parseList = function (data, listCollection) {\n for (var i = 0; i < data.lists.length; i++) {\n var list = new WList();\n var lists = data.lists[i];\n if (!isNullOrUndefined(lists.abstractListId)) {\n list.abstractListId = lists.abstractListId;\n list.abstractList = this.viewer.getAbstractListById(lists.abstractListId);\n }\n listCollection.push(list);\n if (!isNullOrUndefined(lists.listId)) {\n list.listId = lists.listId;\n }\n if (lists.hasOwnProperty('levelOverrides')) {\n this.parseLevelOverride(lists.levelOverrides, list);\n }\n }\n };\n SfdtReader.prototype.parseLevelOverride = function (data, list) {\n if (isNullOrUndefined(data)) {\n return;\n }\n for (var i = 0; i < data.length; i++) {\n var levelOverrides = new WLevelOverride();\n var levelOverride = data[i];\n levelOverrides.startAt = levelOverride.startAt;\n levelOverrides.levelNumber = levelOverride.levelNumber;\n if (!isNullOrUndefined(levelOverride.overrideListLevel)) {\n levelOverrides.overrideListLevel = this.parseListLevel(levelOverride.overrideListLevel, levelOverrides);\n }\n list.levelOverrides.push(levelOverrides);\n }\n };\n SfdtReader.prototype.parseSections = function (data, sections) {\n for (var i = 0; i < data.length; i++) {\n var section = new BodyWidget();\n section.sectionFormat = new WSectionFormat(section);\n section.index = i;\n var item = data[i];\n if (!isNullOrUndefined(item.sectionFormat)) {\n this.parseSectionFormat(item.sectionFormat, section.sectionFormat);\n }\n if (isNullOrUndefined(item.headersFooters)) {\n item.headersFooters = {};\n }\n this.viewer.headersFooters.push(this.parseHeaderFooter(item.headersFooters, this.viewer.headersFooters));\n this.parseTextBody(item.blocks, section);\n for (var i_1 = 0; i_1 < section.childWidgets.length; i_1++) {\n section.childWidgets[i_1].containerWidget = section;\n }\n sections.push(section);\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseHeaderFooter = function (data, headersFooters) {\n var hfs = {};\n if (!isNullOrUndefined(data.header)) {\n var oddHeader = new HeaderFooterWidget('OddHeader');\n hfs[0] = oddHeader;\n this.parseTextBody(data.header.blocks, oddHeader);\n }\n if (!isNullOrUndefined(data.footer)) {\n var oddFooter = new HeaderFooterWidget('OddFooter');\n hfs[1] = oddFooter;\n this.parseTextBody(data.footer.blocks, oddFooter);\n }\n if (!isNullOrUndefined(data.evenHeader)) {\n var evenHeader = new HeaderFooterWidget('EvenHeader');\n hfs[2] = evenHeader;\n this.parseTextBody(data.evenHeader.blocks, evenHeader);\n }\n if (!isNullOrUndefined(data.evenFooter)) {\n var evenFooter = new HeaderFooterWidget('EvenFooter');\n hfs[3] = evenFooter;\n this.parseTextBody(data.evenFooter.blocks, evenFooter);\n }\n if (!isNullOrUndefined(data.firstPageHeader)) {\n var firstPageHeader = new HeaderFooterWidget('FirstPageHeader');\n hfs[4] = firstPageHeader;\n this.parseTextBody(data.firstPageHeader.blocks, firstPageHeader);\n }\n if (!isNullOrUndefined(data.firstPageFooter)) {\n var firstPageFooter = new HeaderFooterWidget('FirstPageFooter');\n hfs[5] = firstPageFooter;\n this.parseTextBody(data.firstPageFooter.blocks, firstPageFooter);\n }\n return hfs;\n };\n SfdtReader.prototype.parseTextBody = function (data, section) {\n this.parseBody(data, section.childWidgets, section);\n };\n SfdtReader.prototype.parseBody = function (data, blocks, container) {\n if (!isNullOrUndefined(data)) {\n for (var i = 0; i < data.length; i++) {\n var block = data[i];\n if (block.hasOwnProperty('inlines')) {\n var writeInlineFormat = false;\n //writeInlineFormat = this.isPasting && i === data.length - 1;\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n this.parseCharacterFormat(block.characterFormat, paragraph.characterFormat);\n this.parseParagraphFormat(block.paragraphFormat, paragraph.paragraphFormat);\n var styleObj = void 0;\n if (!isNullOrUndefined(block.paragraphFormat) && !isNullOrUndefined(block.paragraphFormat.styleName)) {\n styleObj = this.viewer.styles.findByName(block.paragraphFormat.styleName, 'Paragraph');\n if (!isNullOrUndefined(styleObj)) {\n paragraph.paragraphFormat.ApplyStyle(styleObj);\n }\n }\n if (block.inlines.length > 0) {\n this.parseParagraph(block.inlines, paragraph, writeInlineFormat);\n }\n blocks.push(paragraph);\n paragraph.index = i;\n paragraph.containerWidget = container;\n }\n else if (block.hasOwnProperty('rows')) {\n this.parseTable(block, blocks, i, container);\n }\n }\n }\n };\n SfdtReader.prototype.parseTable = function (block, blocks, index, section) {\n var table = new TableWidget();\n table.index = index;\n table.tableFormat = new WTableFormat(table);\n if (!isNullOrUndefined(block.tableFormat)) {\n this.parseTableFormat(block.tableFormat, table.tableFormat);\n }\n table.title = block.title;\n table.description = block.description;\n for (var i = 0; i < block.rows.length; i++) {\n var row = new TableRowWidget();\n row.rowFormat = new WRowFormat(row);\n var tableRow = block.rows[i];\n if (tableRow.hasOwnProperty('rowFormat')) {\n this.parseRowFormat(tableRow.rowFormat, row.rowFormat);\n this.parseRowGridValues(tableRow, row.rowFormat);\n this.parseRowGridValues(tableRow.rowFormat, row.rowFormat);\n row.index = i;\n for (var j = 0; j < block.rows[i].cells.length; j++) {\n var cell = new TableCellWidget();\n cell.cellFormat = new WCellFormat(cell);\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = j;\n cell.rowIndex = i;\n if (block.rows[i].cells[j].hasOwnProperty('cellFormat')) {\n this.parseCellFormat(block.rows[i].cells[j].cellFormat, cell.cellFormat);\n }\n this.parseTextBody(block.rows[i].cells[j].blocks, cell);\n }\n }\n table.childWidgets.push(row);\n row.containerWidget = table;\n }\n table.containerWidget = section;\n blocks.push(table);\n table.isGridUpdated = false;\n };\n SfdtReader.prototype.parseRowGridValues = function (data, rowFormat) {\n if (!isNullOrUndefined(data.gridBefore)) {\n rowFormat.gridBefore = data.gridBefore;\n }\n if (!isNullOrUndefined(data.gridBeforeWidth)) {\n rowFormat.gridBeforeWidth = data.gridBeforeWidth;\n }\n if (!isNullOrUndefined(data.gridBeforeWidthType)) {\n rowFormat.gridBeforeWidthType = data.gridBeforeWidthType;\n }\n if (!isNullOrUndefined(data.gridAfter)) {\n rowFormat.gridAfter = data.gridAfter;\n }\n if (!isNullOrUndefined(data.gridAfterWidth)) {\n rowFormat.gridAfterWidth = data.gridAfterWidth;\n }\n if (!isNullOrUndefined(data.gridAfterWidthType)) {\n rowFormat.gridAfterWidthType = data.gridAfterWidthType;\n }\n };\n SfdtReader.prototype.parseParagraph = function (data, paragraph, writeInlineFormat) {\n var lineWidget = new LineWidget(paragraph);\n for (var i = 0; i < data.length; i++) {\n var inline = data[i];\n if (inline.hasOwnProperty('text')) {\n var textElement = undefined;\n if (this.viewer.isPageField) {\n textElement = new FieldTextElementBox();\n textElement.fieldBegin = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n }\n else if (inline.text === '\\t') {\n textElement = new TabElementBox();\n }\n else {\n textElement = new TextElementBox();\n }\n textElement.characterFormat = new WCharacterFormat(textElement);\n this.parseCharacterFormat(inline.characterFormat, textElement.characterFormat, writeInlineFormat);\n /*�tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(inline.characterFormat) && !isNullOrUndefined(inline.characterFormat.styleName)) {\n var charStyle = this.viewer.styles.findByName(inline.characterFormat.styleName, 'Character');\n textElement.characterFormat.ApplyStyle(charStyle);\n }\n textElement.text = inline.text;\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n }\n else if (inline.hasOwnProperty('imageString')) {\n var image = new ImageElementBox(data[i].isInlineImage);\n image.isMetaFile = data[i].isMetaFile;\n image.characterFormat = new WCharacterFormat(image);\n image.line = lineWidget;\n lineWidget.children.push(image);\n image.imageString = inline.imageString;\n image.width = HelperMethods.convertPointToPixel(inline.width);\n image.height = HelperMethods.convertPointToPixel(inline.height);\n this.parseCharacterFormat(inline.characterFormat, image.characterFormat);\n }\n else if (inline.hasOwnProperty('hasFieldEnd') || (inline.hasOwnProperty('fieldType') && inline.fieldType === 0)) {\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.hasFieldEnd = inline.hasFieldEnd;\n this.viewer.fieldStacks.push(fieldBegin);\n fieldBegin.line = lineWidget;\n this.viewer.fields.push(fieldBegin);\n lineWidget.children.push(fieldBegin);\n }\n else if (inline.hasOwnProperty('fieldType')) {\n var field = undefined;\n if (inline.fieldType === 2) {\n field = new FieldElementBox(2);\n this.fieldSeparator = field;\n if (this.viewer.fieldStacks.length > 0) {\n field.fieldBegin = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n field.fieldBegin.fieldSeparator = field;\n //finds the whether the field is page filed or not\n var lineWidgetCount = lineWidget.children.length;\n if (lineWidgetCount >= 2 && (lineWidget.children[lineWidgetCount - 2] instanceof FieldElementBox)\n && lineWidget.children[lineWidgetCount - 2].hasFieldEnd\n && (lineWidget.children[lineWidgetCount - 1] instanceof TextElementBox)) {\n var fieldElementText = lineWidget.children[lineWidgetCount - 1].text;\n if (fieldElementText.match('PAGE')) {\n this.viewer.isPageField = true;\n }\n }\n }\n }\n else if (inline.fieldType === 1) {\n field = new FieldElementBox(1);\n //For Field End Updated begin and separator. \n if (this.viewer.fieldStacks.length > 0) {\n field.fieldBegin = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n field.fieldBegin.fieldEnd = field;\n }\n if (!isNullOrUndefined(field.fieldBegin) && field.fieldBegin.fieldSeparator) {\n field.fieldSeparator = field.fieldBegin.fieldSeparator;\n field.fieldBegin.fieldSeparator.fieldEnd = field;\n }\n //After setting all the property clear the field values\n this.viewer.fieldStacks.splice(this.viewer.fieldStacks.length - 1, 1);\n this.fieldSeparator = undefined;\n this.viewer.isPageField = false;\n this.viewer.fieldCollection.push(field.fieldBegin);\n }\n field.line = lineWidget;\n lineWidget.children.push(field);\n }\n else if (inline.hasOwnProperty('bookmarkType')) {\n var bookmark = undefined;\n bookmark = new BookmarkElementBox(inline.bookmarkType);\n bookmark.name = inline.name;\n lineWidget.children.push(bookmark);\n bookmark.line = lineWidget;\n if (inline.bookmarkType === 0) {\n this.viewer.bookmarks.add(bookmark.name, bookmark);\n }\n else if (inline.bookmarkType === 1) {\n if (this.viewer.bookmarks.containsKey(bookmark.name)) {\n var bookmarkStart = this.viewer.bookmarks.get(bookmark.name);\n bookmarkStart.reference = bookmark;\n bookmark.reference = bookmarkStart;\n }\n }\n }\n }\n paragraph.childWidgets.push(lineWidget);\n };\n SfdtReader.prototype.parseTableFormat = function (sourceFormat, tableFormat) {\n this.parseBorders(sourceFormat.borders, tableFormat.borders);\n if (!isNullOrUndefined(sourceFormat.cellSpacing)) {\n tableFormat.cellSpacing = sourceFormat.cellSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n tableFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n tableFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n tableFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n tableFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n tableFormat.leftIndent = sourceFormat.leftIndent;\n }\n this.parseShading(sourceFormat.shading, tableFormat.shading);\n if (!isNullOrUndefined(sourceFormat.tableAlignment)) {\n tableFormat.tableAlignment = sourceFormat.tableAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidth)) {\n tableFormat.preferredWidth = sourceFormat.preferredWidth;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidthType)) {\n tableFormat.preferredWidthType = sourceFormat.preferredWidthType;\n }\n };\n SfdtReader.prototype.parseCellFormat = function (sourceFormat, cellFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n this.parseBorders(sourceFormat.borders, cellFormat.borders);\n if (!sourceFormat.isSamePaddingAsTable) {\n // cellFormat.ClearMargins();\n //else\n this.parseCellMargin(sourceFormat, cellFormat);\n }\n if (!isNullOrUndefined(sourceFormat.cellWidth)) {\n cellFormat.cellWidth = sourceFormat.cellWidth;\n }\n if (!isNullOrUndefined(sourceFormat.columnSpan)) {\n cellFormat.columnSpan = sourceFormat.columnSpan;\n }\n if (!isNullOrUndefined(sourceFormat.rowSpan)) {\n cellFormat.rowSpan = sourceFormat.rowSpan;\n }\n this.parseShading(sourceFormat.shading, cellFormat.shading);\n if (!isNullOrUndefined(sourceFormat.verticalAlignment)) {\n cellFormat.verticalAlignment = sourceFormat.verticalAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidthType)) {\n cellFormat.preferredWidthType = sourceFormat.preferredWidthType;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidth)) {\n cellFormat.preferredWidth = sourceFormat.preferredWidth;\n }\n }\n };\n SfdtReader.prototype.parseCellMargin = function (sourceFormat, cellFormat) {\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n cellFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n cellFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n cellFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n cellFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n };\n SfdtReader.prototype.parseRowFormat = function (sourceFormat, rowFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat.allowBreakAcrossPages)) {\n rowFormat.allowBreakAcrossPages = sourceFormat.allowBreakAcrossPages;\n }\n if (!isNullOrUndefined(sourceFormat.isHeader)) {\n rowFormat.isHeader = sourceFormat.isHeader;\n }\n if (!isNullOrUndefined(sourceFormat.heightType)) {\n rowFormat.heightType = sourceFormat.heightType;\n }\n if (!isNullOrUndefined(sourceFormat.height)) {\n rowFormat.height = sourceFormat.height;\n }\n this.parseBorders(sourceFormat.borders, rowFormat.borders);\n }\n };\n SfdtReader.prototype.parseBorders = function (sourceBorders, destBorder) {\n if (!isNullOrUndefined(sourceBorders)) {\n this.parseBorder(sourceBorders.left, destBorder.left);\n this.parseBorder(sourceBorders.right, destBorder.right);\n this.parseBorder(sourceBorders.top, destBorder.top);\n this.parseBorder(sourceBorders.bottom, destBorder.bottom);\n this.parseBorder(sourceBorders.vertical, destBorder.vertical);\n this.parseBorder(sourceBorders.horizontal, destBorder.horizontal);\n this.parseBorder(sourceBorders.diagonalDown, destBorder.diagonalDown);\n this.parseBorder(sourceBorders.diagonalUp, destBorder.diagonalUp);\n }\n };\n SfdtReader.prototype.parseBorder = function (sourceBorder, destBorder) {\n if (!isNullOrUndefined(sourceBorder)) {\n if (!isNullOrUndefined(sourceBorder.color)) {\n destBorder.color = this.getColor(sourceBorder.color);\n }\n if (!isNullOrUndefined(sourceBorder.lineStyle)) {\n destBorder.lineStyle = sourceBorder.lineStyle;\n }\n if (!isNullOrUndefined(sourceBorder.lineWidth)) {\n destBorder.lineWidth = sourceBorder.lineWidth;\n }\n if (!isNullOrUndefined(sourceBorder.hasNoneStyle)) {\n destBorder.hasNoneStyle = sourceBorder.hasNoneStyle;\n }\n }\n };\n SfdtReader.prototype.parseShading = function (sourceShading, destShading) {\n if (!isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(sourceShading.backgroundColor)) {\n destShading.backgroundColor = this.getColor(sourceShading.backgroundColor);\n }\n if (!isNullOrUndefined(sourceShading.foregroundColor)) {\n destShading.foregroundColor = this.getColor(sourceShading.foregroundColor);\n }\n if (!isNullOrUndefined(sourceShading.texture) || !isNullOrUndefined(sourceShading.textureStyle)) {\n destShading.textureStyle = !isNullOrUndefined(sourceShading.texture) ? sourceShading.texture : sourceShading.textureStyle;\n }\n }\n };\n SfdtReader.prototype.parseCharacterFormat = function (sourceFormat, characterFormat, writeInlineFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (writeInlineFormat && sourceFormat.hasOwnProperty('inlineFormat')) {\n this.parseCharacterFormat(sourceFormat.inlineFormat, characterFormat);\n return;\n }\n if (!isNullOrUndefined(sourceFormat.baselineAlignment)) {\n characterFormat.baselineAlignment = sourceFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.underline)) {\n characterFormat.underline = sourceFormat.underline;\n }\n if (!isNullOrUndefined(sourceFormat.strikethrough)) {\n characterFormat.strikethrough = sourceFormat.strikethrough;\n }\n if (!isNullOrUndefined(sourceFormat.fontSize)) {\n characterFormat.fontSize = sourceFormat.fontSize;\n }\n if (!isNullOrUndefined(sourceFormat.fontFamily)) {\n characterFormat.fontFamily = sourceFormat.fontFamily;\n }\n if (!isNullOrUndefined(sourceFormat.bold)) {\n characterFormat.bold = sourceFormat.bold;\n }\n if (!isNullOrUndefined(sourceFormat.italic)) {\n characterFormat.italic = sourceFormat.italic;\n }\n if (!isNullOrUndefined(sourceFormat.highlightColor)) {\n characterFormat.highlightColor = sourceFormat.highlightColor;\n }\n if (!isNullOrUndefined(sourceFormat.fontColor)) {\n characterFormat.fontColor = this.getColor(sourceFormat.fontColor);\n }\n }\n };\n SfdtReader.prototype.getColor = function (color) {\n var convertColor = color;\n return convertColor || '#ffffff';\n };\n SfdtReader.prototype.parseParagraphFormat = function (sourceFormat, paragraphFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n paragraphFormat.leftIndent = sourceFormat.leftIndent;\n }\n if (!isNullOrUndefined(sourceFormat.rightIndent)) {\n paragraphFormat.rightIndent = sourceFormat.rightIndent;\n }\n if (!isNullOrUndefined(sourceFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = sourceFormat.firstLineIndent;\n }\n if (!isNullOrUndefined(sourceFormat.afterSpacing)) {\n paragraphFormat.afterSpacing = sourceFormat.afterSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.beforeSpacing)) {\n paragraphFormat.beforeSpacing = sourceFormat.beforeSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.lineSpacing)) {\n paragraphFormat.lineSpacing = sourceFormat.lineSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.lineSpacingType)) {\n paragraphFormat.lineSpacingType = sourceFormat.lineSpacingType;\n }\n if (!isNullOrUndefined(sourceFormat.textAlignment)) {\n paragraphFormat.textAlignment = sourceFormat.textAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.outlineLevel)) {\n paragraphFormat.outlineLevel = sourceFormat.outlineLevel;\n }\n paragraphFormat.listFormat = new WListFormat();\n if (sourceFormat.hasOwnProperty('listFormat')) {\n this.parseListFormat(sourceFormat, paragraphFormat.listFormat);\n }\n if (sourceFormat.hasOwnProperty('tabs')) {\n this.parseTabStop(sourceFormat.tabs, paragraphFormat.tabs);\n }\n }\n };\n SfdtReader.prototype.parseListFormat = function (block, listFormat) {\n if (!isNullOrUndefined(block.listFormat)) {\n if (!isNullOrUndefined(block.listFormat.listId)) {\n listFormat.listId = block.listFormat.listId;\n listFormat.list = this.viewer.getListById(block.listFormat.listId);\n }\n if (!isNullOrUndefined(block.listFormat.listLevelNumber)) {\n listFormat.listLevelNumber = block.listFormat.listLevelNumber;\n }\n }\n };\n SfdtReader.prototype.parseSectionFormat = function (data, sectionFormat) {\n if (!isNullOrUndefined(data.pageWidth)) {\n sectionFormat.pageWidth = data.pageWidth;\n }\n if (!isNullOrUndefined(data.pageHeight)) {\n sectionFormat.pageHeight = data.pageHeight;\n }\n if (!isNullOrUndefined(data.leftMargin)) {\n sectionFormat.leftMargin = data.leftMargin;\n }\n if (!isNullOrUndefined(data.topMargin)) {\n sectionFormat.topMargin = data.topMargin;\n }\n if (!isNullOrUndefined(data.rightMargin)) {\n sectionFormat.rightMargin = data.rightMargin;\n }\n if (!isNullOrUndefined(data.bottomMargin)) {\n sectionFormat.bottomMargin = data.bottomMargin;\n }\n if (!isNullOrUndefined(data.headerDistance)) {\n sectionFormat.headerDistance = data.headerDistance;\n }\n if (!isNullOrUndefined(data.footerDistance)) {\n sectionFormat.footerDistance = data.footerDistance;\n }\n if (!isNullOrUndefined(data.differentFirstPage)) {\n sectionFormat.differentFirstPage = data.differentFirstPage;\n }\n if (!isNullOrUndefined(data.differentOddAndEvenPages)) {\n sectionFormat.differentOddAndEvenPages = data.differentOddAndEvenPages;\n }\n };\n SfdtReader.prototype.parseTabStop = function (wTabs, tabs) {\n for (var i = 0; i < wTabs.length; i++) {\n var tabStop = new WTabStop();\n tabStop.position = wTabs[i].position;\n tabStop.tabLeader = wTabs[i].tabLeader;\n tabStop.deletePosition = wTabs[i].deletePosition;\n tabStop.tabJustification = wTabs[i].tabJustification;\n tabs.push(tabStop);\n }\n };\n return SfdtReader;\n}());\nexport { SfdtReader };\n","import { WShading } from '../format/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\n/**\n * Selection character format implementation\n */\nvar SelectionCharacterFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionCharacterFormat(selection) {\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.fontSizeIn = 0;\n this.fontColorIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontSize\", {\n /**\n * Gets or sets the font size of selected contents.\n */\n get: function () {\n return this.fontSizeIn;\n },\n set: function (value) {\n if (value === this.fontSizeIn) {\n return;\n }\n this.fontSizeIn = value;\n this.notifyPropertyChanged('fontSize');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontFamily\", {\n /**\n * Gets or sets the font family of selected contents.\n */\n get: function () {\n return this.fontFamilyIn;\n },\n set: function (value) {\n if (value === this.fontFamilyIn) {\n return;\n }\n this.fontFamilyIn = value;\n this.notifyPropertyChanged('fontFamily');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontColor\", {\n /**\n * Gets or sets the font color of selected contents.\n */\n get: function () {\n return this.fontColorIn;\n },\n set: function (value) {\n if (value === this.fontColorIn) {\n return;\n }\n this.fontColorIn = value;\n this.notifyPropertyChanged('fontColor');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"bold\", {\n /**\n * Gets or sets the bold formatting of selected contents.\n */\n get: function () {\n return this.boldIn;\n },\n set: function (value) {\n if (value === this.boldIn) {\n return;\n }\n this.boldIn = value;\n this.notifyPropertyChanged('bold');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"italic\", {\n /**\n * Gets or sets the italic formatting of selected contents.\n */\n get: function () {\n return this.italicIn;\n },\n set: function (value) {\n if (value === this.italic) {\n return;\n }\n this.italicIn = value;\n this.notifyPropertyChanged('italic');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"strikethrough\", {\n /**\n * Gets or sets the strikethrough property of selected contents.\n */\n get: function () {\n return this.strikeThroughIn;\n },\n set: function (value) {\n if (value === this.strikeThroughIn) {\n return;\n }\n this.strikeThroughIn = value;\n this.notifyPropertyChanged('strikethrough');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"baselineAlignment\", {\n /**\n * Gets or sets the baseline alignment property of selected contents.\n */\n get: function () {\n return this.baselineAlignmentIn;\n },\n set: function (value) {\n if (value === this.baselineAlignmentIn) {\n return;\n }\n this.baselineAlignmentIn = value;\n this.notifyPropertyChanged('baselineAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"underline\", {\n /**\n * Gets or sets the underline style of selected contents.\n */\n get: function () {\n return this.underlineIn;\n },\n set: function (value) {\n if (value === this.underlineIn) {\n return;\n }\n this.underlineIn = value;\n this.notifyPropertyChanged('underline');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"highlightColor\", {\n /**\n * Gets or sets the highlight color of selected contents.\n */\n get: function () {\n return this.highlightColorIn;\n },\n set: function (value) {\n if (value === this.highlightColorIn) {\n return;\n }\n this.highlightColorIn = value;\n this.notifyPropertyChanged('highlightColor');\n },\n enumerable: true,\n configurable: true\n });\n SelectionCharacterFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'bold':\n return this.bold;\n case 'italic':\n return this.italic;\n case 'fontSize':\n if (this.fontSize >= 1) {\n return this.fontSize;\n }\n return undefined;\n case 'fontFamily':\n return this.fontFamily;\n case 'strikethrough':\n return this.strikethrough;\n case 'baselineAlignment':\n return this.baselineAlignment;\n case 'highlightColor':\n return this.highlightColor;\n case 'underline':\n return this.underline;\n case 'fontColor':\n return this.fontColor;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever property gets changed.\n * @param {string} propertyName\n */\n SelectionCharacterFormat.prototype.notifyPropertyChanged = function (propertyName) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared || this.selection.owner.isReadOnlyMode || !this.selection.owner.isDocumentLoaded || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var propertyValue = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(propertyValue)) {\n this.selection.owner.editorModule.onApplyCharacterFormat(propertyName, propertyValue);\n }\n }\n };\n /**\n * Copies the source format.\n * @param {WCharacterFormat} format\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : 'Default Paragraph Font';\n this.fontSize = format.fontSize;\n this.fontFamily = format.fontFamily;\n this.bold = format.bold;\n this.italic = format.italic;\n this.baselineAlignment = format.baselineAlignment;\n this.underline = format.underline;\n this.fontColor = format.fontColor;\n this.highlightColor = format.highlightColor;\n this.strikethrough = format.strikethrough;\n };\n /**\n * Combines the format.\n * @param {WCharacterFormat} format\n * @private\n */\n SelectionCharacterFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.bold) && this.bold !== format.bold) {\n this.bold = undefined;\n }\n if (!isNullOrUndefined(this.italic) && this.italic !== format.italic) {\n this.italic = undefined;\n }\n if (this.fontSize !== 0 && this.fontSize !== format.fontSize) {\n this.fontSize = 0;\n }\n if (!isNullOrUndefined(this.fontFamily) && this.fontFamily !== format.fontFamily) {\n this.fontFamily = undefined;\n }\n if (!isNullOrUndefined(this.highlightColor) && this.highlightColor !== format.highlightColor) {\n this.highlightColor = undefined;\n }\n if (!isNullOrUndefined(this.baselineAlignment) && this.baselineAlignment !== format.baselineAlignment) {\n this.baselineAlignment = undefined;\n }\n if (!isNullOrUndefined(this.fontColor) && (this.fontColor !== format.fontColor)) {\n this.fontColor = undefined;\n }\n if (!isNullOrUndefined(this.underline) && this.underline !== format.underline) {\n this.underline = undefined;\n }\n if (!isNullOrUndefined(this.strikethrough) && this.strikethrough !== format.strikethrough) {\n this.strikethrough = undefined;\n }\n };\n /**\n * Clones the format.\n * @param {SelectionCharacterFormat} selectionCharacterFormat\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.cloneFormat = function (selectionCharacterFormat) {\n this.bold = selectionCharacterFormat.bold;\n this.italic = selectionCharacterFormat.italic;\n this.underline = selectionCharacterFormat.underline;\n this.strikethrough = selectionCharacterFormat.strikethrough;\n this.baselineAlignment = selectionCharacterFormat.baselineAlignment;\n this.highlightColor = selectionCharacterFormat.highlightColor;\n this.fontSize = selectionCharacterFormat.fontSize;\n this.fontFamily = selectionCharacterFormat.fontFamily;\n this.fontColor = selectionCharacterFormat.fontColor;\n this.styleName = selectionCharacterFormat.styleName;\n };\n /**\n * Checks whether current format is equal to the source format or not.\n * @param {SelectionCharacterFormat} format\n * @returns boolean\n * @private\n */\n SelectionCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.strikethrough === format.strikethrough\n && this.bold === format.bold\n && this.fontFamily === format.fontFamily\n && this.underline === format.underline\n && this.highlightColor === format.highlightColor\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.fontColor === format.fontColor);\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.clearFormat = function () {\n this.fontSizeIn = 0;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.highlightColorIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.styleName = undefined;\n };\n /**\n * Destroys the maintained resources.\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.destroy = function () {\n this.fontSizeIn = undefined;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n };\n return SelectionCharacterFormat;\n}());\nexport { SelectionCharacterFormat };\n/**\n * Selection paragraph format implementation\n */\nvar SelectionParagraphFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionParagraphFormat(selection, viewer) {\n // Declaring the character format properties.\n this.leftIndentIn = 0;\n this.rightIndentIn = 0;\n this.beforeSpacingIn = 0;\n this.afterSpacingIn = 0;\n this.textAlignmentIn = undefined;\n this.firstLineIndentIn = 0;\n this.lineSpacingIn = 1;\n this.lineSpacingTypeIn = undefined;\n this.listLevelNumberIn = -1;\n this.selection = selection;\n this.viewer = viewer;\n }\n Object.defineProperty(SelectionParagraphFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.leftIndentIn;\n },\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"rightIndent\", {\n /**\n * Gets or Sets the right indent for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.rightIndentIn;\n },\n set: function (value) {\n if (value === this.rightIndentIn) {\n return;\n }\n this.rightIndentIn = value;\n this.notifyPropertyChanged('rightIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or Sets the first line indent for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.firstLineIndentIn;\n },\n set: function (value) {\n if (value === this.firstLineIndentIn) {\n return;\n }\n this.firstLineIndentIn = value;\n this.notifyPropertyChanged('firstLineIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"textAlignment\", {\n /**\n * Gets or Sets the text alignment for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.textAlignmentIn;\n },\n set: function (value) {\n if (value === this.textAlignmentIn) {\n return;\n }\n this.textAlignmentIn = value;\n this.notifyPropertyChanged('textAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"afterSpacing\", {\n /**\n * Gets or Sets the after spacing for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.afterSpacingIn;\n },\n set: function (value) {\n if (value === this.afterSpacingIn) {\n return;\n }\n this.afterSpacingIn = value;\n this.notifyPropertyChanged('afterSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"beforeSpacing\", {\n /**\n * Gets or Sets the before spacing for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.beforeSpacingIn;\n },\n set: function (value) {\n if (value === this.beforeSpacingIn) {\n return;\n }\n this.beforeSpacingIn = value;\n this.notifyPropertyChanged('beforeSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or Sets the line spacing for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.lineSpacingIn;\n },\n set: function (value) {\n if (value === this.lineSpacingIn) {\n return;\n }\n this.lineSpacingIn = value;\n this.notifyPropertyChanged('lineSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacingType\", {\n /**\n * Gets or Sets the line spacing type for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.lineSpacingTypeIn;\n },\n set: function (value) {\n if (value === this.lineSpacingTypeIn) {\n return;\n }\n this.lineSpacingTypeIn = value;\n this.notifyPropertyChanged('lineSpacingType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listLevelNumber\", {\n /**\n * Gets or Sets the list level number for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.listLevelNumberIn;\n },\n set: function (value) {\n if (value === this.listLevelNumberIn) {\n return;\n }\n this.listLevelNumberIn = value;\n this.notifyPropertyChanged('listLevelNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listText\", {\n /**\n * Gets the list text for selected paragraphs.\n */\n get: function () {\n var listFormat = undefined;\n var list = this.viewer.getListById(this.listId);\n if (list instanceof WList && this.listLevelNumberIn > -1 && this.listLevelNumberIn < 9) {\n var listLevel = list.getListLevel(this.listLevelNumber);\n if (listLevel instanceof WListLevel) {\n if (listLevel.listLevelPattern === 'Bullet') {\n listFormat = listLevel.numberFormat;\n }\n else {\n listFormat = listLevel.numberFormat;\n for (var i = 0; i < 9; i++) {\n var levelPattern = '%' + (i + 1);\n if (listFormat.indexOf(levelPattern) > -1) {\n var level = i === this.listLevelNumberIn ? listLevel : list.getListLevel(i);\n var listTextElement = this.selection.getListTextElementBox(this.selection.start.paragraph);\n var listText = listTextElement ? listTextElement.text : '';\n listFormat = listText;\n }\n }\n }\n }\n }\n return listFormat;\n },\n enumerable: true,\n configurable: true\n });\n SelectionParagraphFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'leftIndent':\n return this.leftIndent;\n case 'rightIndent':\n return this.rightIndent;\n case 'firstLineIndent':\n return this.firstLineIndent;\n case 'beforeSpacing':\n return this.beforeSpacing;\n case 'afterSpacing':\n return this.afterSpacing;\n case 'textAlignment':\n return this.textAlignment;\n case 'lineSpacing':\n return this.lineSpacing;\n case 'lineSpacingType':\n return this.lineSpacingType;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever the property gets changed.\n * @param {string} propertyName\n */\n SelectionParagraphFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) &&\n (this.selection.owner.isReadOnlyMode || !this.selection.owner.isDocumentLoaded)\n && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var editorModule = this.selection.owner.editorModule;\n var value = this.getPropertyValue(propertyName);\n if ((propertyName === 'leftIndent' || propertyName === 'rightIndent' || propertyName === 'firstLineIndent')\n && !(value >= -1056 && value < 1056)) {\n return;\n }\n if (propertyName === 'listLevelNumber') {\n editorModule.onApplyListInternal(this.viewer.getListById(this.listId), this.listLevelNumber);\n }\n else {\n editorModule.onApplyParagraphFormat(propertyName, value, propertyName === 'textAlignment' ? true : false, false);\n }\n }\n };\n /**\n * Copies the format.\n * @param {WParagraphFormat} format\n * @returns void\n * @private\n */\n SelectionParagraphFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : 'Normal';\n this.leftIndent = format.leftIndent;\n this.rightIndent = format.rightIndent;\n this.firstLineIndent = format.firstLineIndent;\n this.afterSpacing = format.afterSpacing;\n this.beforeSpacing = format.beforeSpacing;\n this.lineSpacing = format.lineSpacing;\n this.lineSpacingType = format.lineSpacingType;\n this.textAlignment = format.textAlignment;\n if (!isNullOrUndefined(format.listFormat) && !isNullOrUndefined(format.listFormat.listId)) {\n this.listId = format.listFormat.listId;\n this.listLevelNumber = format.listFormat.listLevelNumber;\n }\n else {\n this.listId = undefined;\n this.listLevelNumber = 0;\n }\n };\n /**\n * Copies to format.\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.copyToFormat = function (format) {\n if (isNullOrUndefined(format)) {\n return;\n }\n if (!isNullOrUndefined(this.afterSpacing)) {\n format.afterSpacing = this.afterSpacing;\n }\n if (!isNullOrUndefined(this.beforeSpacing)) {\n format.beforeSpacing = this.beforeSpacing;\n }\n if (!isNullOrUndefined(this.leftIndent)) {\n format.leftIndent = this.leftIndent;\n }\n if (!isNullOrUndefined(this.rightIndent)) {\n format.rightIndent = this.rightIndent;\n }\n if (!isNullOrUndefined(this.textAlignment)) {\n format.textAlignment = this.textAlignment;\n }\n if (!isNullOrUndefined(this.lineSpacing)) {\n format.lineSpacing = this.lineSpacing;\n }\n if (!isNullOrUndefined(this.lineSpacingType)) {\n format.lineSpacingType = this.lineSpacingType;\n }\n if (!isNullOrUndefined(this.firstLineIndent)) {\n format.firstLineIndent = this.firstLineIndent;\n }\n };\n /**\n * Combines the format.\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftIndent) && this.leftIndent !== format.leftIndent) {\n this.leftIndent = undefined;\n }\n if (!isNullOrUndefined(this.rightIndent) && this.rightIndent !== format.rightIndent) {\n this.rightIndent = undefined;\n }\n if (!isNullOrUndefined(this.firstLineIndent) && this.firstLineIndent !== format.firstLineIndent) {\n this.firstLineIndent = undefined;\n }\n if (this.lineSpacing !== 0 && this.lineSpacing !== format.lineSpacing) {\n this.lineSpacing = 0;\n }\n if (this.beforeSpacing !== -1 && this.beforeSpacing !== format.beforeSpacing) {\n this.beforeSpacing = -1;\n }\n if (this.afterSpacing !== -1 && this.afterSpacing !== format.afterSpacing) {\n this.afterSpacing = -1;\n }\n if (!isNullOrUndefined(this.lineSpacingType) && this.lineSpacingType !== format.lineSpacingType) {\n this.lineSpacingType = undefined;\n }\n if (!isNullOrUndefined(this.textAlignment) && this.textAlignment !== format.textAlignment) {\n this.textAlignment = undefined;\n }\n // tslint:disable-next-line:max-line-length\n if (this.listLevelNumber >= 0 && !isNullOrUndefined(this.listId) && (isNullOrUndefined(format.listFormat) || format.listFormat.listLevelNumber !== this.listLevelNumber)) {\n this.listLevelNumber = -1;\n }\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(format.listFormat) || isNullOrUndefined(format.listFormat.listId) || (!isNullOrUndefined(this.listId) && this.listId !== format.listFormat.listId)) {\n this.listId = undefined;\n }\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionParagraphFormat.prototype.clearFormat = function () {\n this.leftIndent = 0;\n this.rightIndent = 0;\n this.beforeSpacing = 0;\n this.afterSpacing = 0;\n this.firstLineIndent = 0;\n this.lineSpacing = 1;\n this.textAlignment = undefined;\n this.lineSpacingType = undefined;\n this.listId = undefined;\n this.listLevelNumber = -1;\n this.styleName = undefined;\n };\n /**\n * Gets the clone of list at current selection.\n * @returns WList\n * @private\n */\n SelectionParagraphFormat.prototype.getList = function () {\n var list = this.viewer.getListById(this.listId);\n if (!isNullOrUndefined(list)) {\n var listAdv = new WList();\n var abstractList = new WAbstractList();\n var currentAbstractList = this.viewer.getAbstractListById(list.abstractListId);\n var editor = this.selection.owner.editorModule;\n if (!isNullOrUndefined(currentAbstractList)) {\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var level = editor.cloneListLevel(currentAbstractList.levels[i]);\n abstractList.levels.push(level);\n level.ownerBase = abstractList;\n }\n }\n else {\n abstractList.levels.push(new WListLevel(abstractList));\n }\n if (!isNullOrUndefined(list.levelOverrides)) {\n for (var i = 0; i < list.levelOverrides.length; i++) {\n var levelOverride = editor.cloneLevelOverride(list.levelOverrides[i]);\n listAdv.levelOverrides.push(levelOverride);\n }\n }\n listAdv.abstractList = abstractList;\n listAdv.abstractListId = abstractList.abstractListId;\n listAdv.sourceListId = list.listId;\n return listAdv;\n }\n return undefined;\n };\n /**\n * Modifies the list at current selection.\n * @param {WList} listAdv\n * @private\n */\n SelectionParagraphFormat.prototype.setList = function (listAdv) {\n if (this.viewer.owner.isReadOnlyMode || !this.viewer.owner.isDocumentLoaded) {\n return;\n }\n var list = this.viewer.getListById(this.listId);\n var collection = undefined;\n var currentAbstractList = listAdv ? this.viewer.getAbstractListById(listAdv.abstractListId) : undefined;\n if (!isNullOrUndefined(list) && !isNullOrUndefined(listAdv)\n && !isNullOrUndefined(currentAbstractList) && listAdv.sourceListId === list.listId) {\n var history_1 = this.viewer.owner.editorHistory;\n var listLevel = this.viewer.layout.getListLevel(list, 1);\n this.selection.owner.isLayoutEnabled = false;\n this.viewer.owner.editorModule.setOffsetValue(this.selection);\n if (history_1) {\n collection = history_1.updateListChangesInHistory(currentAbstractList, list);\n }\n this.viewer.owner.editorModule.updateListParagraphs();\n if (history_1) {\n history_1.applyListChanges(this.selection, collection);\n }\n this.selection.owner.isLayoutEnabled = true;\n this.viewer.renderedLists.clear();\n // this.viewer.pages = [];\n this.viewer.owner.editorModule.layoutWholeDocument();\n this.viewer.owner.editorModule.updateSelectionTextPosition(false);\n if (history_1 && history_1.currentBaseHistoryInfo) {\n if (history_1.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history_1.currentBaseHistoryInfo.updateSelection();\n }\n history_1.updateHistory();\n }\n this.viewer.owner.editorModule.fireContentChange();\n }\n else if (!isNullOrUndefined(listAdv)) {\n this.selection.owner.isLayoutEnabled = false;\n if (!isNullOrUndefined(currentAbstractList) && this.viewer.abstractLists.indexOf(currentAbstractList) === -1) {\n this.viewer.abstractLists.push(currentAbstractList);\n }\n if (this.viewer.lists.indexOf(listAdv) === -1) {\n this.viewer.lists.push(listAdv);\n }\n //currentAbstractList.listType = 'Numbering';\n this.selection.owner.isLayoutEnabled = true;\n this.selection.owner.editorModule.onApplyList(listAdv);\n }\n else {\n this.selection.owner.editorModule.onApplyList(undefined);\n }\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionParagraphFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.rightIndentIn = undefined;\n this.beforeSpacingIn = undefined;\n this.afterSpacingIn = undefined;\n this.firstLineIndentIn = undefined;\n this.lineSpacingIn = undefined;\n this.textAlignmentIn = undefined;\n this.lineSpacingTypeIn = undefined;\n this.listId = undefined;\n this.listLevelNumberIn = undefined;\n this.viewer = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n };\n return SelectionParagraphFormat;\n}());\nexport { SelectionParagraphFormat };\n/**\n * Selection section format implementation\n */\nvar SelectionSectionFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionSectionFormat(selection) {\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageHeight\", {\n /**\n * Gets or sets the page height.\n */\n get: function () {\n return this.pageHeightIn;\n },\n set: function (value) {\n this.pageHeightIn = value;\n this.notifyPropertyChanged('pageHeight');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageWidth\", {\n /**\n * Gets or sets the page width.\n */\n get: function () {\n return this.pageWidthIn;\n },\n set: function (value) {\n this.pageWidthIn = value;\n this.notifyPropertyChanged('pageWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"leftMargin\", {\n /**\n * Gets or sets the page left margin.\n */\n get: function () {\n return this.leftMarginIn;\n },\n set: function (value) {\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or sets the page bottom margin.\n */\n get: function () {\n return this.bottomMarginIn;\n },\n set: function (value) {\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"topMargin\", {\n /**\n * Gets or sets the page top margin.\n */\n get: function () {\n return this.topMarginIn;\n },\n set: function (value) {\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"rightMargin\", {\n /**\n * Gets or sets the page right margin.\n */\n get: function () {\n return this.rightMarginIn;\n },\n set: function (value) {\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"headerDistance\", {\n /**\n * Gets or sets the header distance.\n */\n get: function () {\n return this.headerDistanceIn;\n },\n set: function (value) {\n this.headerDistanceIn = value;\n this.notifyPropertyChanged('headerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"footerDistance\", {\n /**\n * Gets or sets the footer distance.\n */\n get: function () {\n return this.footerDistanceIn;\n },\n set: function (value) {\n this.footerDistanceIn = value;\n this.notifyPropertyChanged('footerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentFirstPage\", {\n /**\n * Gets or sets a value indicating whether the section has different first page.\n */\n get: function () {\n return this.differentFirstPageIn;\n },\n set: function (value) {\n this.differentFirstPageIn = value;\n this.notifyPropertyChanged('differentFirstPage');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentOddAndEvenPages\", {\n /**\n * Gets or sets a value indicating whether the section has different odd and even page.\n */\n get: function () {\n return this.differentOddAndEvenPagesIn;\n },\n set: function (value) {\n this.differentOddAndEvenPagesIn = value;\n this.notifyPropertyChanged('differentOddAndEvenPages');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Copies the format.\n * @param {WSectionFormat} format\n * @returns void\n * @private\n */\n SelectionSectionFormat.prototype.copyFormat = function (format) {\n this.pageHeight = format.pageHeight;\n this.pageWidth = format.pageWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.headerDistance = format.headerDistance;\n this.footerDistance = format.footerDistance;\n this.differentFirstPage = format.differentFirstPage;\n this.differentOddAndEvenPages = format.differentOddAndEvenPages;\n };\n SelectionSectionFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isPastingContent\n || selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded)\n && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyvalue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplySectionFormat(propertyName, value);\n }\n }\n };\n SelectionSectionFormat.prototype.getPropertyvalue = function (propertyName) {\n switch (propertyName) {\n case 'pageHeight':\n if (this.pageHeight > 0) {\n return this.pageHeight;\n }\n return undefined;\n case 'pageWidth':\n if (this.pageWidth > 0) {\n return this.pageWidth;\n }\n return undefined;\n case 'leftMargin':\n if (this.leftMargin >= 0) {\n return this.leftMargin;\n }\n return undefined;\n case 'rightMargin':\n if (this.rightMargin >= 0) {\n return this.rightMargin;\n }\n return undefined;\n case 'topMargin':\n if (this.topMargin >= 0) {\n return this.topMargin;\n }\n return undefined;\n case 'bottomMargin':\n if (this.bottomMargin >= 0) {\n return this.bottomMargin;\n }\n return undefined;\n case 'differentFirstPage':\n if (!isNullOrUndefined(this.differentFirstPage)) {\n return this.differentFirstPage;\n }\n return undefined;\n case 'differentOddAndEvenPages':\n if (!isNullOrUndefined(this.differentOddAndEvenPages)) {\n return this.differentOddAndEvenPages;\n }\n return undefined;\n case 'headerDistance':\n return this.headerDistanceIn;\n case 'footerDistance':\n return this.footerDistance;\n default:\n return undefined;\n }\n };\n /**\n * Combines the format.\n * @param {WSectionFormat} format\n * @private\n */\n SelectionSectionFormat.prototype.combineFormat = function (format) {\n if (this.pageHeight > 0 && this.pageHeight !== format.pageHeight) {\n this.pageHeight = 0;\n }\n if (this.pageWidth > 0 && this.pageWidth !== format.pageWidth) {\n this.pageWidth = 0;\n }\n if (this.leftMargin > -1 && this.leftMargin !== format.leftMargin) {\n this.leftMargin = -1;\n }\n if (this.topMargin > -1 && this.topMargin !== format.topMargin) {\n this.topMargin = -1;\n }\n if (this.rightMargin > -1 && this.rightMargin !== format.rightMargin) {\n this.rightMargin = -1;\n }\n if (this.bottomMargin > -1 && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = -1;\n }\n if (this.headerDistance !== 0 && this.headerDistance !== format.headerDistance) {\n this.headerDistance = 0;\n }\n if (this.footerDistance !== 0 && this.footerDistance !== format.footerDistance) {\n this.footerDistance = 0;\n }\n if (!isNullOrUndefined(this.differentFirstPage) && this.differentFirstPage !== format.differentFirstPage) {\n this.differentFirstPage = undefined;\n }\n if (!isNullOrUndefined(this.differentOddAndEvenPages) && this.differentOddAndEvenPages !== format.differentOddAndEvenPages) {\n this.differentOddAndEvenPages = undefined;\n }\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionSectionFormat.prototype.clearFormat = function () {\n this.headerDistance = 0;\n this.footerDistance = 0;\n this.pageHeight = 0;\n this.pageWidth = 0;\n this.leftMargin = -1;\n this.rightMargin = -1;\n this.topMargin = -1;\n this.bottomMargin = -1;\n this.differentFirstPage = undefined;\n this.differentOddAndEvenPages = undefined;\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionSectionFormat.prototype.destroy = function () {\n this.headerDistanceIn = undefined;\n this.footerDistanceIn = undefined;\n this.pageHeightIn = undefined;\n this.pageWidthIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n this.selection = undefined;\n };\n return SelectionSectionFormat;\n}());\nexport { SelectionSectionFormat };\n/**\n * Selection table format implementation\n */\nvar SelectionTableFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionTableFormat(selection) {\n this.leftIndentIn = 0;\n this.backgroundIn = undefined;\n this.tableAlignmentIn = undefined;\n this.cellSpacingIn = 0;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.preferredWidthIn = 0;\n this.selection = selection;\n }\n Object.defineProperty(SelectionTableFormat.prototype, \"table\", {\n /**\n * Gets or sets the table.\n * @private\n */\n get: function () {\n return this.tableIn;\n },\n set: function (value) {\n this.tableIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected table.\n * @private\n */\n get: function () {\n return this.leftIndentIn;\n },\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the default top margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.topMarginIn;\n },\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected table.\n * @default undefined\n */\n get: function () {\n return this.backgroundIn;\n },\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"tableAlignment\", {\n /**\n * Gets or Sets the table alignment for selected table.\n * @default undefined\n */\n get: function () {\n return this.tableAlignmentIn;\n },\n set: function (value) {\n if (value === this.tableAlignmentIn) {\n return;\n }\n this.tableAlignmentIn = value;\n this.notifyPropertyChanged('tableAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the default left margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.leftMarginIn;\n },\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the default bottom margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.bottomMarginIn;\n },\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"cellSpacing\", {\n /**\n * Gets or Sets the cell spacing for selected table.\n * @default undefined\n */\n get: function () {\n return this.cellSpacingIn;\n },\n set: function (value) {\n if (value === this.cellSpacingIn) {\n return;\n }\n this.cellSpacingIn = value;\n this.notifyPropertyChanged('cellSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the default right margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.rightMarginIn;\n },\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected table.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthIn;\n },\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidthType\", {\n /**\n * Gets or Sets the preferred width type for selected table.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n SelectionTableFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'tableAlignment':\n return this.tableAlignment;\n case 'leftIndent':\n return this.leftIndent;\n case 'cellSpacing':\n return this.cellSpacing;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n default:\n return undefined;\n }\n };\n SelectionTableFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared\n || !this.selection.owner.isDocumentLoaded || this.selection.owner.isReadOnlyMode\n || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableFormat(propertyName, value);\n }\n }\n };\n /**\n * Copies the format.\n * @param {WTableFormat} format Format to copy.\n * @returns void\n * @private\n */\n SelectionTableFormat.prototype.copyFormat = function (format) {\n this.leftIndent = format.leftIndent;\n this.background = format.shading.backgroundColor;\n this.tableAlignment = format.tableAlignment;\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.cellSpacing = format.cellSpacing;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionTableFormat.prototype.clearFormat = function () {\n this.table = undefined;\n this.leftIndent = 0;\n this.background = undefined;\n this.leftIndent = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.bottomMargin = 0;\n this.cellSpacing = 0;\n this.tableAlignment = undefined;\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionTableFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.backgroundIn = undefined;\n this.leftIndentIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.cellSpacingIn = undefined;\n this.tableAlignmentIn = undefined;\n this.tableIn = undefined;\n this.selection = undefined;\n };\n return SelectionTableFormat;\n}());\nexport { SelectionTableFormat };\n/**\n * Selection cell format implementation\n */\nvar SelectionCellFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionCellFormat(selection) {\n this.verticalAlignmentIn = undefined;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.backgroundIn = undefined;\n this.preferredWidthTypeIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCellFormat.prototype, \"verticalAlignment\", {\n /**\n * Gets or sets the vertical alignment of the selected cells.\n * @default undefined\n */\n get: function () {\n return this.verticalAlignmentIn;\n },\n set: function (value) {\n if (value === this.verticalAlignmentIn) {\n return;\n }\n this.verticalAlignmentIn = value;\n this.notifyPropertyChanged('verticalAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the left margin for selected cells.\n * @default undefined\n */\n /* tslint:disable */\n get: function () {\n return this.leftMarginIn;\n },\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the right margin for selected cells.\n * @default undefined\n */\n get: function () {\n return this.rightMarginIn;\n },\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the top margin for selected cells.\n * @default undefined\n */\n get: function () {\n return this.topMarginIn;\n },\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the bottom margin for selected cells.\n * @default undefined\n */\n get: function () {\n return this.bottomMarginIn;\n },\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected cells.\n * @default undefined\n */\n get: function () {\n return this.backgroundIn;\n },\n /* tslint:enable */\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidthType\", {\n /* tslint:disable */\n /**\n * Gets or Sets the preferred width type for selected cells.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected cells.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthIn;\n },\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n /* tslint:enable */\n SelectionCellFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection)) {\n if ((selection.isCleared || !selection.owner.isDocumentLoaded\n || selection.owner.isReadOnlyMode || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableCellFormat(propertyName, value);\n }\n }\n }\n };\n SelectionCellFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'verticalAlignment':\n return this.verticalAlignment;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n * @param {WCellFormat} format Source Format to copy.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.copyFormat = function (format) {\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.background = format.shading.backgroundColor;\n this.verticalAlignment = format.verticalAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.clearCellFormat = function () {\n this.leftMargin = undefined;\n this.rightMargin = undefined;\n this.topMargin = undefined;\n this.bottomMargin = undefined;\n this.background = undefined;\n this.verticalAlignment = undefined;\n };\n /**\n * Combines the format.\n * @param {WCellFormat} format\n * @private\n */\n SelectionCellFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftMargin) && this.leftMargin !== format.leftMargin) {\n this.leftMargin = undefined;\n }\n if (!isNullOrUndefined(this.topMargin) && this.topMargin !== format.topMargin) {\n this.topMargin = undefined;\n }\n if (!isNullOrUndefined(this.rightMargin) && this.rightMargin !== format.rightMargin) {\n this.rightMargin = undefined;\n }\n if (!isNullOrUndefined(this.bottomMargin) && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = undefined;\n }\n if (!isNullOrUndefined(this.background) && this.background !== format.shading.backgroundColor) {\n this.background = undefined;\n }\n if (!isNullOrUndefined(this.verticalAlignment) && this.verticalAlignment !== format.verticalAlignment) {\n this.verticalAlignment = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidth) && this.preferredWidth !== format.preferredWidth) {\n this.preferredWidth = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidthType) && this.preferredWidthType !== format.preferredWidthType) {\n this.preferredWidthType = undefined;\n }\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.clearFormat = function () {\n this.background = undefined;\n this.bottomMargin = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.verticalAlignment = undefined;\n };\n /**\n * Destroys the manages resources.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.destroy = function () {\n this.backgroundIn = undefined;\n this.verticalAlignmentIn = undefined;\n this.bottomMarginIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.selection = undefined;\n };\n return SelectionCellFormat;\n}());\nexport { SelectionCellFormat };\n/**\n * Selection row format implementation\n */\nvar SelectionRowFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionRowFormat(selection) {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.isHeaderIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionRowFormat.prototype, \"height\", {\n /**\n * Gets or Sets the height for selected rows.\n * @default undefined\n */\n get: function () {\n return this.heightIn;\n },\n set: function (value) {\n if (value === this.heightIn) {\n return;\n }\n this.heightIn = value;\n this.notifyPropertyChanged('height');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"heightType\", {\n /**\n * Gets or Sets the height type for selected rows.\n * @default undefined\n */\n get: function () {\n return this.heightTypeIn;\n },\n set: function (value) {\n if (value === this.heightTypeIn) {\n return;\n }\n this.heightTypeIn = value;\n this.notifyPropertyChanged('heightType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"isHeader\", {\n /**\n * Gets or Sets a value indicating whether the selected rows are header rows or not.\n * @default undefined\n */\n get: function () {\n return this.isHeaderIn;\n },\n set: function (value) {\n if (value === this.isHeaderIn) {\n return;\n }\n this.isHeaderIn = value;\n this.notifyPropertyChanged('isHeader');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"allowBreakAcrossPages\", {\n /**\n * Gets or Sets a value indicating whether to allow break across pages for selected rows.\n * @default undefined\n */\n get: function () {\n return this.allowRowBreakAcrossPagesIn;\n },\n set: function (value) {\n if (value === this.allowRowBreakAcrossPagesIn) {\n return;\n }\n this.allowRowBreakAcrossPagesIn = value;\n this.notifyPropertyChanged('allowBreakAcrossPages');\n },\n enumerable: true,\n configurable: true\n });\n SelectionRowFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isReadOnlyMode\n || !selection.owner.isDocumentLoaded || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplyTableRowFormat(propertyName, value);\n }\n }\n };\n SelectionRowFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'height':\n return this.height;\n case 'heightType':\n return this.heightType;\n case 'isHeader':\n return this.isHeader;\n case 'allowBreakAcrossPages':\n return this.allowBreakAcrossPages;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n * @param {WRowFormat} format\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.copyFormat = function (format) {\n this.height = format.height;\n this.heightType = format.heightType;\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n };\n /**\n * Combines the format.\n * @param {WRowFormat} format\n * @private\n */\n SelectionRowFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.height) && this.height !== format.height) {\n this.height = undefined;\n }\n if (!isNullOrUndefined(this.heightType) && this.heightType !== format.heightType) {\n this.heightType = undefined;\n }\n if (!isNullOrUndefined(this.allowBreakAcrossPages) && this.allowBreakAcrossPages !== format.allowBreakAcrossPages) {\n this.allowBreakAcrossPages = undefined;\n }\n if (!isNullOrUndefined(this.isHeader) && this.isHeader !== format.isHeader) {\n this.isHeader = undefined;\n }\n };\n /**\n * Clears the row format.\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.clearRowFormat = function () {\n this.height = undefined;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.clearFormat = function () {\n this.height = 0;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.destroy = function () {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.isHeaderIn = undefined;\n this.selection = undefined;\n };\n return SelectionRowFormat;\n}());\nexport { SelectionRowFormat };\n/**\n * Selection image format implementation\n */\nvar SelectionImageFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionImageFormat(selection) {\n this.selection = selection;\n }\n Object.defineProperty(SelectionImageFormat.prototype, \"width\", {\n /**\n * Gets the width of the image.\n */\n get: function () {\n if (this.image) {\n return this.image.width;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionImageFormat.prototype, \"height\", {\n /**\n * Gets the height of the image.\n */\n get: function () {\n if (this.image) {\n return this.image.height;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Resizes the image based on given size.\n * @param width\n * @param height\n */\n SelectionImageFormat.prototype.resize = function (width, height) {\n this.updateImageFormat(width, height);\n };\n /**\n * Update image width and height\n * @private\n */\n SelectionImageFormat.prototype.updateImageFormat = function (width, height) {\n if (this.image) {\n if (this.selection.owner.editorModule) {\n this.selection.owner.editorModule.onImageFormat(this.image, width, height);\n }\n }\n };\n /**\n * @private\n */\n SelectionImageFormat.prototype.copyImageFormat = function (image) {\n this.image = image;\n };\n /**\n * @private\n */\n SelectionImageFormat.prototype.clearImageFormat = function () {\n this.image = undefined;\n };\n return SelectionImageFormat;\n}());\nexport { SelectionImageFormat };\n/* tslint:enable */ \n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar HtmlExport = /** @class */ (function () {\n function HtmlExport() {\n /* tslint:disable:no-any */\n this.document = undefined;\n /* tslint:disable:no-any */\n /**\n * @private\n */\n this.fieldCheck = 0;\n /* tslint:enable:no-any */\n }\n /* tslint:disable:no-any */\n /**\n * @private\n */\n HtmlExport.prototype.writeHtml = function (document) {\n this.document = document;\n var html = '';\n for (var i = 0; i < document.sections.length; i++) {\n html = this.serializeSection(document.sections[i]);\n }\n return html;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeSection = function (section) {\n var string = '';\n for (var i = 0; i < section.blocks.length; i++) {\n var block = section.blocks[i];\n if (block.hasOwnProperty('inlines')) {\n string += this.serializeParagraph(block);\n }\n else {\n string += this.serializeTable(block);\n }\n }\n return string;\n };\n // Serialize Paragraph \n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraph = function (paragraph) {\n var blockStyle = '';\n var startString = undefined;\n var isList = false;\n var tagAttributes = [];\n tagAttributes.push('style=\"' + this.serializeParagraphStyle(paragraph, '', isList) + '\"');\n blockStyle += this.createAttributesTag('p', tagAttributes);\n if (paragraph.inlines.length === 0) {\n //Handled to preserve non breaking space for empty paragraphs similar to MS Word behavior.\n blockStyle += ' ';\n }\n else {\n blockStyle = this.serializeInlines(paragraph, blockStyle);\n }\n blockStyle += this.endTag('p');\n return blockStyle;\n };\n //SerializeInlines\n /**\n * @private\n */\n HtmlExport.prototype.serializeInlines = function (paragraph, blockStyle) {\n var inline = undefined;\n var i = 0;\n while (paragraph.inlines.length > i) {\n inline = paragraph.inlines[i];\n if (inline.hasOwnProperty('imageString')) {\n blockStyle += this.serializeImageContainer(inline);\n }\n else if (inline.hasOwnProperty('fieldType')) {\n if (inline.fieldType === 0) {\n this.fieldCheck = 1;\n var tagAttributes = [];\n tagAttributes.push('style=\"' + this.serializeInlineStyle(inline.characterFormat, '') + '\"');\n blockStyle += this.createAttributesTag('a', tagAttributes);\n }\n else if (inline.fieldType === 2) {\n this.fieldCheck = 2;\n }\n else {\n blockStyle += this.endTag('a');\n this.fieldCheck = 0;\n }\n }\n else {\n var text = isNullOrUndefined(inline.text) ? '' : inline.text;\n if (this.fieldCheck === 0) {\n blockStyle += this.serializeSpan(text, inline.characterFormat);\n }\n if (this.fieldCheck === 1) {\n var hyperLink = text.replace('\\\"', '');\n blockStyle += ' href= \\\"' + hyperLink.replace('HYPERLINK', '').trim();\n blockStyle += '\\\"';\n blockStyle += '>';\n }\n if (this.fieldCheck === 2) {\n blockStyle += text;\n }\n }\n i++;\n }\n return blockStyle;\n };\n // Serialize Span\n /**\n * @private\n */\n HtmlExport.prototype.serializeSpan = function (spanText, characterFormat) {\n var spanClass = '';\n if (spanText.indexOf('\\v') !== -1) {\n spanClass += '
    ';\n return spanClass.toString();\n }\n var tagAttributes = [];\n this.serializeInlineStyle(characterFormat, '');\n tagAttributes.push('style=\"' + this.serializeInlineStyle(characterFormat, '') + '\"');\n spanClass += this.createAttributesTag('span', tagAttributes);\n var ignoreFirstSpace = false;\n // Todo: Need to handle it.\n // If the text starts with white-space, need to check whether it is a continuous space.\n // if (characterFormat.ownerBase instanceof WInline) {\n // let inline: WInline = (characterFormat.ownerBase as WInline);\n // tslint:disable:max-line-length \n // if (inline instanceof WSpan && !isNullOrUndefined(inline.text) && inline.text !== '' && (inline as WSpan).text[0] === ' ') {\n // Check previous inline until, it has valid rendered text.\n // do {\n // inline = WInline.getPreviousTextInline((inline as WSpan));\n // } while (inline instanceof WSpan && !isNullOrUndefined(inline.text));\n // } else {\n // inline = undefined;\n // }\n // If current white-space is a continuation of consecutive spaces, this will be set true.\n // ignoreFirstSpace = inline instanceof WSpan && !isNullOrUndefined(inline.text)\n // && (inline as WSpan).text[(inline as WSpan).text.length - 1] === ' ';\n // }\n var text = this.decodeHtmlNames(spanText.toString());\n spanClass += text;\n spanClass += this.endTag('span');\n return spanClass.toString();\n };\n //Serialize Image\n /**\n * @private\n */\n HtmlExport.prototype.serializeImageContainer = function (image) {\n var imageStyle = '';\n var tagAttributes = [];\n this.serializeInlineStyle(image.characterFormat, '');\n var imageSource = '';\n if (!isNullOrUndefined(image.imageString)) {\n imageSource = image.imageString;\n }\n var width = HelperMethods.convertPointToPixel(image.width);\n var height = HelperMethods.convertPointToPixel(image.height);\n tagAttributes.push('width=\"', width.toString() + '\"');\n tagAttributes.push('height=\"', height.toString() + '\"');\n tagAttributes.push('src=\"', imageSource + '\"');\n imageStyle += this.createAttributesTag('img', tagAttributes);\n imageStyle += (this.endTag('img'));\n return imageStyle.toString();\n };\n // Serialize Table Cell\n /**\n * @private\n */\n HtmlExport.prototype.serializeCell = function (cell) {\n var blockStyle = '';\n var tagAttributes = [];\n var cellHtml = '';\n tagAttributes = [];\n if (!isNullOrUndefined(cell.cellFormat)) {\n //if (cell.cellFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n tagAttributes.push('bgcolor=\"' + cell.cellFormat.shading.backgroundColor + '\"');\n // }\n if (cell.cellFormat.columnSpan > 1) {\n tagAttributes.push('colspan=\"' + cell.cellFormat.columnSpan.toString() + '\"');\n }\n if (cell.cellFormat.rowSpan > 1) {\n tagAttributes.push('rowspan=\"' + cell.cellFormat.rowSpan.toString() + '\"');\n }\n if (cell.cellFormat.cellWidth !== 0) {\n tagAttributes.push('width=\"' + cell.cellFormat.cellWidth.toString() + '\"');\n }\n if (cell.cellFormat.verticalAlignment !== 'Top') {\n tagAttributes.push('valign=\"' + cell.cellFormat.verticalAlignment.toString().toLowerCase() + '\"');\n }\n if (!isNullOrUndefined(cell.cellFormat.leftMargin) && cell.cellFormat.leftMargin !== 0) {\n cellHtml += ('padding-left:' + cell.cellFormat.leftMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.rightMargin) && cell.cellFormat.rightMargin !== 0) {\n cellHtml += ('padding-right:' + cell.cellFormat.rightMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.topMargin) && cell.cellFormat.topMargin !== 0) {\n cellHtml += ('padding-top:' + cell.cellFormat.topMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.bottomMargin) && cell.cellFormat.bottomMargin !== 0) {\n cellHtml += ('padding-bottom:' + cell.cellFormat.bottomMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.borders)) {\n cellHtml += this.serializeCellBordersStyle(cell.cellFormat.borders);\n }\n }\n if (cellHtml.length !== 0) {\n tagAttributes.push('style=\"' + cellHtml + '\"');\n }\n blockStyle += (this.createAttributesTag('td', tagAttributes));\n for (var k = 0; k < cell.blocks.length; k++) {\n var block = cell.blocks[k];\n if (block.hasOwnProperty('rows')) {\n blockStyle += this.serializeTable(block);\n }\n else {\n blockStyle += this.serializeParagraph(block);\n }\n }\n blockStyle += (this.endTag('td'));\n return blockStyle;\n };\n // Serialize Table\n /**\n * @private\n */\n HtmlExport.prototype.serializeTable = function (table) {\n var html = '';\n html += this.createTableStartTag(table);\n for (var j = 0; j < table.rows.length; j++) {\n html += this.serializeRow(table.rows[j]);\n }\n html += this.createTableEndTag();\n return html;\n };\n // Serialize Row\n /**\n * @private\n */\n HtmlExport.prototype.serializeRow = function (row) {\n var html = '';\n html += this.createRowStartTag(row);\n for (var k = 0; k < row.cells.length; k++) {\n html += this.serializeCell(row.cells[k]);\n }\n return html;\n };\n // Serialize Styles\n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraphStyle = function (paragraph, className, isList) {\n var paragraphClass = '';\n paragraphClass += this.serializeCharacterFormat(paragraph.characterFormat);\n paragraphClass += this.serializeParagraphFormat(paragraph.paragraphFormat, isList);\n return paragraphClass;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeInlineStyle = function (characterFormat, className) {\n return this.serializeCharacterFormat(characterFormat);\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeTableBorderStyle = function (borders) {\n var borderStyle = '';\n borderStyle += ('border-left-style:' + this.convertBorderLineStyle(borders.left.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-left-width:' + borders.left.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-left-color:' + borders.left.color);\n borderStyle += ';';\n borderStyle += ('border-right-style:' + this.convertBorderLineStyle(borders.right.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-right-width:' + borders.right.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-right-color:' + borders.right.color);\n borderStyle += ';';\n borderStyle += ('border-top-style:' + this.convertBorderLineStyle(borders.top.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-top-width:' + borders.top.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-top-color:' + borders.top.color);\n borderStyle += ';';\n borderStyle += ('border-Bottom-style:' + this.convertBorderLineStyle(borders.bottom.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-Bottom-width:' + borders.bottom.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-Bottom-color:' + borders.bottom.color);\n borderStyle += ';';\n return borderStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeCellBordersStyle = function (borders) {\n var borderStyle = '';\n borderStyle = 'border:solid 1px;';\n // Todo: handle\n // let border: WBorder = undefined;\n // //LeftBorder\n // border = WCell.getCellLeftBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'left');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-left-style:none;');\n // }\n // //RightBorder\n // border = WCell.getCellRightBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'right');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-right-style:none');\n // }\n // //TopBorder\n // border = WCell.getCellTopBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'top');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-top-style:none');\n // }\n // //BottomBorder\n // border = WCell.getCellBottomBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'bottom');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-bottom-style:none');\n // }\n return borderStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeBorderStyle = function (border, borderPosition) {\n var borderStyle = '';\n borderStyle += ('border-' + borderPosition + '-style:' + this.convertBorderLineStyle(border.lineStyle));\n borderStyle += ';';\n if (border.lineWidth > 0) {\n borderStyle += ('border-' + borderPosition + '-width:' + border.lineWidth.toString() + 'pt;');\n }\n //if (border.color !== Color.FromArgb(0, 0, 0, 0))\n borderStyle += ('border-' + borderPosition + '-color:' + border.color + ';');\n return borderStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.convertBorderLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'None':\n return 'none';\n case 'Single':\n return 'solid';\n case 'Dot':\n return 'dotted';\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n return 'dashed';\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n return 'double';\n case 'SingleWavy':\n return 'solid';\n case 'DoubleWavy':\n return 'double';\n case 'DashDotStroked':\n return 'solid';\n case 'Emboss3D':\n return 'ridge';\n case 'Engrave3D':\n return 'groove';\n case 'Outset':\n return 'outset';\n case 'Inset':\n return 'inset';\n default:\n return 'solid';\n }\n };\n // Serialize Format\n /**\n * @private\n */\n HtmlExport.prototype.serializeCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat.inlineFormat)) {\n return this.serializeCharacterFormat(characterFormat.inlineFormat);\n }\n var propertyValue;\n var charStyle = '';\n if (characterFormat.bold) {\n charStyle += 'font-weight';\n charStyle += ':';\n charStyle += 'bold';\n charStyle += ';';\n }\n charStyle += 'font-style';\n charStyle += ':';\n if (characterFormat.italic) {\n charStyle += 'italic';\n }\n else {\n charStyle += 'normal';\n }\n charStyle += ';';\n // Double strike through will become Single strike through while saving HTML using MS Word.\n if (characterFormat.strikethrough === 'SingleStrike' || characterFormat.strikethrough === 'DoubleStrike') {\n charStyle += 'text-decoration';\n charStyle += ':';\n charStyle += 'line-through';\n charStyle += ';';\n }\n //Text Baseline Alignment\n // tslint:disable-next-line:max-line-length\n if (characterFormat.baselineAlignment === 'Superscript' || characterFormat.baselineAlignment === 'Subscript') {\n charStyle += 'vertical-align';\n charStyle += ':';\n charStyle += characterFormat.baselineAlignment === 'Superscript' ? 'super' : 'sub';\n charStyle += ';';\n }\n //Text Foreground and Background Color \n if (!isNullOrUndefined(characterFormat.highlightColor)) {\n charStyle += 'background-color';\n charStyle += ':';\n charStyle += characterFormat.highlightColor.toString();\n charStyle += ';';\n }\n //Font Color\n propertyValue = characterFormat.fontColor;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'color';\n charStyle += ':';\n charStyle += propertyValue;\n charStyle += ';';\n }\n if (!isNullOrUndefined(characterFormat.underline) && characterFormat.underline !== 'None') {\n charStyle += 'text-decoration';\n charStyle += ':';\n charStyle += 'underline';\n charStyle += ';';\n }\n propertyValue = characterFormat.fontSize;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-size';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += 'pt';\n charStyle += ';';\n }\n propertyValue = characterFormat.fontFamily;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-family';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += ';';\n }\n return charStyle.toString();\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraphFormat = function (paragraphFormat, isList) {\n if (!isNullOrUndefined(paragraphFormat.inlineFormat)) {\n return this.serializeParagraphFormat(paragraphFormat.inlineFormat, isList);\n }\n var propertyValue;\n var paraStyle = '';\n propertyValue = paragraphFormat.textAlignment;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'text-align:' + propertyValue.toLowerCase() + ';';\n }\n propertyValue = paragraphFormat.beforeSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-top:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.rightIndent;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-right:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.afterSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-bottom:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.leftIndent;\n if (isList) {\n if (isNullOrUndefined(propertyValue)) {\n propertyValue = -48;\n }\n else {\n propertyValue -= 48;\n }\n }\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-left:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.firstLineIndent;\n if (isList) {\n if (isNullOrUndefined(propertyValue)) {\n propertyValue = 24;\n }\n else {\n propertyValue += 24;\n }\n }\n if (!isNullOrUndefined(propertyValue) && propertyValue !== 0) {\n paraStyle += 'text-indent:' + propertyValue.toString() + 'pt;';\n }\n propertyValue = paragraphFormat.lineSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n if (paragraphFormat.lineSpacingType === 'Multiple') {\n propertyValue = (propertyValue * 100).toString() + '%;';\n }\n else {\n propertyValue = propertyValue.toString() + 'pt;';\n }\n paraStyle += 'line-height:' + propertyValue;\n }\n return paraStyle.toString();\n };\n /**\n * @private\n */\n HtmlExport.prototype.createAttributesTag = function (tagValue, localProperties) {\n var sb = '';\n sb += '<';\n sb += tagValue;\n for (var i = 0; i < localProperties.length; i++) {\n sb += ' ';\n sb += localProperties[i];\n }\n if (tagValue !== 'a') {\n sb += '>';\n }\n return sb;\n };\n /**\n * @private\n */\n HtmlExport.prototype.createTag = function (tagValue) {\n var s = '';\n s += '<';\n s += tagValue;\n s += '>';\n return s;\n };\n /**\n * @private\n */\n HtmlExport.prototype.endTag = function (tagValue) {\n var sb = '';\n sb += '<';\n sb += '/';\n sb += tagValue;\n sb += '>';\n return sb;\n };\n /**\n * @private\n */\n HtmlExport.prototype.createTableStartTag = function (table) {\n var blockStyle = '';\n var tableStyle = '';\n var tagAttributes = [];\n tagAttributes.push('border=\"' + '1\"');\n if (!isNullOrUndefined(table.tableFormat)) {\n //if (table.tableFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n tagAttributes.push('bgcolor=\"' + table.tableFormat.shading.backgroundColor + '\"');\n //}\n if (table.tableFormat.leftIndent !== 0) {\n tagAttributes.push('left-indent=\"' + table.tableFormat.leftIndent.toString() + 'pt;');\n }\n if (table.tableFormat.cellSpacing > 0) {\n tagAttributes.push('cellspacing=\"' + (((table.tableFormat.cellSpacing * 72) / 96) * 2).toString() + '\"');\n }\n else {\n tableStyle += ('border-collapse:collapse;');\n }\n tagAttributes.push('cellpadding=\"' + '0\"');\n if (!isNullOrUndefined(table.tableFormat.borders)) {\n tableStyle += this.serializeTableBorderStyle(table.tableFormat.borders);\n }\n }\n if (tableStyle.length !== 0) {\n tagAttributes.push('style=\"', tableStyle.toString() + '\"');\n }\n return blockStyle += (this.createAttributesTag('table', tagAttributes));\n };\n /**\n * @private\n */\n HtmlExport.prototype.createTableEndTag = function () {\n var blockStyle = '';\n blockStyle += (this.endTag('table'));\n return blockStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.createRowStartTag = function (row) {\n var blockStyle = '';\n var tagAttributes = [];\n if (row.rowFormat.isHeader) {\n blockStyle += (this.createTag('thead'));\n }\n if (row.rowFormat.height > 0) {\n tagAttributes.push('height=\"' + row.rowFormat.height + '\"');\n }\n return blockStyle + this.createAttributesTag('tr', tagAttributes);\n };\n /**\n * @private\n */\n HtmlExport.prototype.createRowEndTag = function (row) {\n var blockStyle = '';\n blockStyle += (this.endTag('tr'));\n if (row.rowFormat.isHeader) {\n blockStyle += (this.endTag('thead'));\n }\n return blockStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.decodeHtmlNames = function (text) {\n if (text === '\\t') {\n return ' ';\n }\n var splittedText = text.split(' ');\n var htmlText = '';\n if (splittedText.length > 0) {\n htmlText = splittedText[0];\n for (var i = 0; i < splittedText.length - 1; i++) {\n htmlText += ' ' + splittedText[i + 1];\n }\n }\n return htmlText;\n };\n return HtmlExport;\n}());\nexport { HtmlExport };\n","import { Widget, TableRowWidget, TableWidget, LineWidget, ElementBox, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockContainer, BookmarkElementBox } from '../index';\nimport { HelperMethods } from '../index';\nimport { Point } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar TextPosition = /** @class */ (function () {\n function TextPosition(owner) {\n /**\n * @private\n */\n this.location = new Point(0, 0);\n /**\n * @private\n */\n this.isUpdateLocation = true;\n this.owner = owner;\n this.viewer = this.owner.viewer;\n }\n Object.defineProperty(TextPosition.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n return this.currentWidget.paragraph;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphStart\", {\n /**\n * @private\n */\n get: function () {\n return this.offset === this.owner.selection.getStartOffset(this.paragraph);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphEnd\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selection.isParagraphLastLine(this.currentWidget)\n && this.offset === this.owner.selection.getLineLength(this.currentWidget);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"selection\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"hierarchicalPosition\", {\n /**\n * Gets the hierarchical position of logical text position in the document\n * @returns {string}\n */\n get: function () {\n return this.getHierarchicalIndexInternal();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return clone of current text position\n * @private\n */\n TextPosition.prototype.clone = function () {\n var textPosition = new TextPosition(this.owner);\n textPosition.currentWidget = this.currentWidget;\n textPosition.offset = this.offset;\n textPosition.location = this.location;\n return textPosition;\n };\n /**\n * Set text position for paragraph and inline\n * @private\n */\n TextPosition.prototype.setPositionForSelection = function (line, element, index, physicalLocation) {\n //Set the start end position\n var isParagraphEnd = false;\n if (isNullOrUndefined(element)) {\n this.currentWidget = line;\n }\n else {\n this.currentWidget = element.line;\n if (element.nextNode instanceof FieldElementBox && index > element.length) {\n isParagraphEnd = this.selection.isLastRenderedInline(element, element.length);\n }\n }\n this.location = physicalLocation;\n if (isParagraphEnd) {\n this.offset = this.selection.getParagraphLength(this.currentWidget.paragraph) + 1;\n }\n else {\n this.offset = this.currentWidget.getOffset(element, index);\n }\n };\n /**\n * Set text position\n * @private\n */\n TextPosition.prototype.setPositionFromLine = function (line, offset, location) {\n this.currentWidget = line;\n this.offset = offset;\n if (location instanceof Point) {\n this.location.copy(location);\n }\n };\n /**\n * Set text position\n * @private\n */\n TextPosition.prototype.setPosition = function (line, positionAtStart) {\n this.currentWidget = line;\n this.offset = positionAtStart ? this.selection.getStartOffset(line.paragraph)\n : this.selection.getParagraphLength(line.paragraph) + 1;\n this.updatePhysicalPosition(true);\n };\n /**\n * Set position for text position\n * @private\n */\n TextPosition.prototype.setPositionInternal = function (textPosition) {\n this.currentWidget = textPosition.currentWidget;\n this.offset = textPosition.offset;\n this.location = textPosition.location;\n };\n /**\n * Set position for current index\n * @private\n */\n TextPosition.prototype.setPositionForCurrentIndex = function (hierarchicalIndex) {\n var index = { index: hierarchicalIndex };\n var paragraph = this.getParagraphWidget(index); //ref hierarchicalIndex\n this.offset = parseFloat(index.index);\n this.setPositionParagraph(paragraph, this.offset);\n };\n /**\n * Get Page\n */\n TextPosition.prototype.getPage = function (position) {\n var page;\n var index = position.index.indexOf(';');\n var newValue = '0';\n if (index >= 0) {\n newValue = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n index = parseInt(newValue, 10);\n page = this.viewer.pages[index];\n return page;\n };\n /**\n * @private\n */\n TextPosition.prototype.getParagraphWidget = function (position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var page = this.getPage(position);\n var child = this.getLineWidget(undefined, position, page);\n return child;\n };\n /**\n * @private\n */\n TextPosition.prototype.getLineWidget = function (widget, position, page) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n if (value === 'H' || value === 'F') {\n if (value === 'H') {\n widget = page.headerWidget;\n }\n else {\n widget = page.footerWidget;\n }\n }\n else if (!isNullOrUndefined(page)) {\n widget = page.bodyWidgets[0];\n }\n index = parseInt(value, 10);\n if (widget instanceof BlockContainer) {\n index = position.index.indexOf(';');\n value = '0';\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n }\n if (widget instanceof TableRowWidget && index >= widget.childWidgets.length) {\n position.index = '0;0';\n index = widget.childWidgets.length - 1;\n }\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[index];\n if (child instanceof LineWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getLineWidget(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.getLineWidget(this.selection.getFirstParagraphInFirstCell(child), position);\n }\n else if (child instanceof TableRowWidget && position.index.indexOf(';') === -1) {\n return this.selection.getFirstParagraphInFirstCell(child.ownerTable).childWidgets[0];\n }\n return undefined;\n }\n }\n }\n else if (widget.nextRenderedWidget instanceof Widget) {\n position.index = '0';\n if (widget.nextRenderedWidget instanceof TableWidget) {\n return this.selection.getFirstParagraphInFirstCell(widget.nextRenderedWidget).firstChild;\n }\n return this.getLineWidget(widget.nextRenderedWidget, position);\n }\n return undefined;\n };\n /**\n * Update physical location of paragraph\n * @private\n */\n TextPosition.prototype.updatePhysicalPosition = function (moveNextLine) {\n if (this.currentWidget && this.owner.isLayoutEnabled && this.isUpdateLocation) {\n this.location = this.selection.getPhysicalPositionInternal(this.currentWidget, this.offset, moveNextLine);\n }\n };\n /**\n * Return true if text position are in same paragraph and offset\n * @private\n */\n TextPosition.prototype.isAtSamePosition = function (textPosition) {\n return this.currentWidget === textPosition.currentWidget\n && this.offset === textPosition.offset;\n };\n /**\n * Return true if text position is in same paragraph\n * @private\n */\n TextPosition.prototype.isInSameParagraph = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n return this.paragraph === textPosition.paragraph;\n };\n /**\n * Return true is current text position exist before given text position\n * @private\n */\n TextPosition.prototype.isExistBefore = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset < textPosition.offset;\n }\n var currentParagraph = this.currentWidget.paragraph;\n var paragraph = textPosition.currentWidget.paragraph;\n if (currentParagraph === paragraph) {\n return currentParagraph.childWidgets.indexOf(this.currentWidget) < paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n if (currentParagraph.containerWidget === paragraph.containerWidget) {\n if (currentParagraph.isInsideTable) {\n return currentParagraph.associatedCell.childWidgets.indexOf(currentParagraph) <\n paragraph.associatedCell.childWidgets.indexOf(paragraph);\n //handle after header footer implementation\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) <\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph)) <\n (paragraph.containerWidget.childWidgets.indexOf(paragraph));\n }\n }\n return this.owner.selection.isExistBefore(currentParagraph, paragraph);\n };\n /**\n * Return true is current text position exist after given text position\n * @private\n */\n TextPosition.prototype.isExistAfter = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset > textPosition.offset;\n }\n if (this.currentWidget.paragraph === textPosition.currentWidget.paragraph) {\n return this.currentWidget.paragraph.childWidgets.indexOf(this.currentWidget) >\n textPosition.currentWidget.paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n var startParagraph = this.currentWidget.paragraph;\n var endParagraph = textPosition.currentWidget.paragraph;\n if (startParagraph.containerWidget.index === endParagraph.containerWidget.index) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) >\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n (endParagraph.containerWidget.childWidgets.indexOf(endParagraph)));\n }\n }\n return this.owner.selection.isExistAfter(startParagraph, endParagraph);\n };\n /**\n * Return hierarchical index of current text position\n * @private\n */\n TextPosition.prototype.getHierarchicalIndexInternal = function () {\n return this.getHierarchicalIndex(this.currentWidget, this.offset.toString());\n };\n /**\n * @private\n */\n TextPosition.prototype.getHierarchicalIndex = function (line, hierarchicalIndex) {\n var node = line;\n if (node) {\n return node.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionParagraph = function (line, offsetInLine) {\n this.currentWidget = line;\n this.offset = offsetInLine;\n this.updatePhysicalPosition(true);\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionForLineWidget = function (lineWidget, offset) {\n var lineLength = this.selection.getLineLength(lineWidget);\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n if (lineWidget.isLastLine()) {\n lineLength = lineLength + 1;\n }\n if (offset > lineLength) {\n var nextLineWidget = void 0;\n if (lineIndex >= lineWidget.paragraph.childWidgets.length - 1) {\n var nextBlock = this.selection.getNextRenderedBlock(lineWidget.paragraph);\n if (nextBlock && nextBlock.index === lineWidget.paragraph.index) {\n nextLineWidget = nextBlock.firstChild;\n }\n }\n else {\n nextLineWidget = lineWidget.paragraph.childWidgets[lineIndex + 1];\n }\n this.setPositionForLineWidget(nextLineWidget, offset - lineLength);\n return;\n }\n else if (offset < 0) {\n var prevLine = lineWidget.paragraph.childWidgets[lineIndex - 1];\n var currentOffSet = this.selection.getLineLength(prevLine) + offset;\n this.setPositionForLineWidget(prevLine, currentOffSet);\n return;\n }\n else {\n this.currentWidget = lineWidget;\n this.offset = offset;\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move to next text position\n * @private\n */\n TextPosition.prototype.moveNextPosition = function (isNavigate) {\n if (isNullOrUndefined(isNavigate)) {\n isNavigate = true;\n }\n var inline = this.selection.getNextStartInline(this.currentWidget, this.offset);\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNavigate) {\n this.moveNextPositionInternal(inline);\n this.moveNextPosition();\n return;\n }\n else {\n var line = inline.fieldEnd.line;\n var fieldEnd = inline.fieldEnd;\n var fieldEndOffset = line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(line, fieldEndOffset.toString());\n if (TextPosition.isForwardSelection(this.selection.end.getHierarchicalIndexInternal(), fieldEndIndex)) {\n //If field end is after selection end, extend selection end to field end.\n this.selection.end.moveToInline(inline.fieldEnd, 1);\n return;\n }\n this.moveToInline(inline.fieldEnd, 1);\n }\n }\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var index = 0;\n if (nextOffset > this.offset) {\n this.offset = nextOffset;\n var info = this.currentWidget.getInline(this.offset, index);\n inline = info.element;\n index = info.index;\n if (!isNullOrUndefined(inline) && index === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1) {\n inline = nextValidInline;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n }\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n }\n else {\n this.updateOffsetToNextParagraph(index, false);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move text position to previous paragraph inside table\n * @private\n */\n TextPosition.prototype.moveToPreviousParagraphInTable = function (selection) {\n var previousParagraph;\n var currentPara = this.currentWidget.paragraph;\n if (currentPara.isInsideTable) {\n previousParagraph = selection.getPreviousSelectionCell(currentPara.associatedCell);\n }\n else {\n previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n TextPosition.prototype.updateOffsetToNextParagraph = function (indexInInline, isHighlight) {\n //Moves to owner and get next paragraph.\n var inline;\n var positionAtStart = false;\n var nextParagraph = undefined;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (!isHighlight) {\n nextParagraph = this.selection.getNextParagraphBlock(this.paragraph);\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = 0;\n }\n }\n else {\n nextParagraph = this.selection.getNextSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(nextParagraph)) {\n if (nextParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, nextParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(nextParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(nextParagraph) && nextParagraph.childWidgets.length > 0) {\n if (!positionAtStart) {\n this.currentWidget = nextParagraph.firstChild;\n this.offset = isHighlight ? 1 : this.selection.getStartLineOffset(this.currentWidget);\n }\n else {\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.selection.getLineLength(this.currentWidget) + 1;\n }\n }\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n };\n TextPosition.prototype.updateOffsetToPrevPosition = function (index, isHighlight) {\n var inlineInfo;\n var inline;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var prevOffset = this.selection.getPreviousValidOffset(this.currentWidget.paragraph, this.offset);\n if (this.offset > prevOffset) {\n this.offset = prevOffset;\n }\n else if (lineIndex > 0) {\n var prevLineWidget = this.paragraph.childWidgets[lineIndex - 1];\n if (prevLineWidget) {\n this.currentWidget = prevLineWidget;\n this.offset = this.currentWidget.getEndOffset();\n }\n }\n else {\n //Moves to owner and get previous paragraph.\n var previousParagraph = undefined;\n var positionAtStart = false;\n if (!isHighlight) {\n previousParagraph = this.selection.getPreviousParagraphBlock(this.paragraph);\n }\n else {\n previousParagraph = this.selection.getPreviousSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(previousParagraph)) {\n if (previousParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, previousParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(previousParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(previousParagraph)) {\n if (!positionAtStart) {\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n else {\n this.currentWidget = previousParagraph.firstChild;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n }\n }\n index = 0;\n inlineInfo = this.currentWidget.getInline(this.offset, index);\n inline = inlineInfo.element;\n index = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var previousInline = this.selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n inline = previousInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset--;\n }\n }\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the next paragraph.\n */\n TextPosition.prototype.moveToNextParagraphStartInternal = function () {\n var paragraph = this.currentWidget.paragraph;\n if (!isNullOrUndefined(this.selection.getNextParagraphBlock(paragraph))) {\n // tslint:disable-next-line:max-line-length\n this.currentWidget = this.selection.getNextParagraphBlock(paragraph).firstChild;\n this.offset = this.selection.getStartOffset(paragraph);\n this.updatePhysicalPosition(true);\n }\n };\n /**\n * Move to previous position\n * @private\n */\n TextPosition.prototype.movePreviousPosition = function () {\n var index = 0;\n var inlineInfo = this.currentWidget.getInline(this.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(index, false);\n };\n /**\n * Move to next position\n * @private\n */\n TextPosition.prototype.moveNextPositionInternal = function (fieldBegin) {\n var inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n // tslint:disable-next-line:max-line-length\n if (this.currentWidget === fieldBegin.fieldEnd.line && !this.selection.hasValidInline(this.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n };\n /**\n * Move text position backward\n * @private\n */\n TextPosition.prototype.moveBackward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!this.owner.selection.isEmpty && !isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n // tslint:disable-next-line:max-line-length\n var fieldEndOffset = nextInline.fieldEnd.line.getOffset(nextInline.fieldEnd, 1);\n // tslint:disable-next-line:max-line-length\n var fieldEndIndex = this.getHierarchicalIndex(nextInline.fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, hierarchicalIndex)) {\n //If field end is after selection start, move selection start to field end.\n // tslint:disable-next-line:max-line-length\n this.owner.selection.start.setPositionParagraph(nextInline.fieldEnd.line, fieldEndOffset);\n return;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var fieldEndOffset = inline.line.getOffset(inline, 1);\n var fieldEndIndex = this.getHierarchicalIndex(inline.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldEndIndex)) {\n //If field end is after selection start, extend selection end to field begin.\n // tslint:disable-next-line:max-line-length\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n this.currentWidget = inline.fieldBegin.line;\n this.offset = fieldBeginOffset;\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(indexInInline, true);\n };\n /**\n * Move text position forward\n * @private\n */\n TextPosition.prototype.moveForward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (!this.owner.selection.isEmpty && indexInInline === inline.length && inline instanceof FieldElementBox\n && inline.fieldType === 1) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n // tslint:disable-next-line:max-line-length\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n // tslint:disable-next-line:max-line-length\n var fieldBeginIndex = this.getHierarchicalIndex(inline.fieldBegin.line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldBeginIndex)) {\n //If field begin is before selection start, move selection start to field begin.\n // tslint:disable-next-line:max-line-length\n this.owner.selection.start.setPositionParagraph(inline.fieldBegin.line, fieldBeginOffset);\n return;\n }\n }\n inline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n }\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var selectionStartParagraph = this.owner.selection.start.paragraph;\n var selectionStartIndex = 0;\n // tslint:disable-next-line:max-line-length\n var selectionStartInlineObj = selectionStartParagraph.getInline(this.owner.selection.start.offset, selectionStartIndex);\n var selectionStartInline = selectionStartInlineObj.element;\n selectionStartIndex = selectionStartInlineObj.index;\n var nextRenderInline = this.selection.getNextRenderedElementBox(selectionStartInline, selectionStartIndex);\n if (nextRenderInline === inline) {\n this.moveNextPositionInternal(inline);\n }\n else {\n //If selection start is before field begin, extend selection end to field end.\n inline = inline.fieldEnd;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n }\n else if ((inline instanceof FieldElementBox)\n && (inline.fieldType === 0 || inline.fieldType === 1)) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n indexInInline = 0;\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var length = this.selection.getLineLength(this.currentWidget);\n var isParagraphEnd = this.selection.isParagraphLastLine(this.currentWidget);\n if (this.offset < nextOffset) {\n this.offset = nextOffset;\n var inlineObj_1 = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj_1.element;\n indexInInline = inlineObj_1.index;\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1) {\n inline = nextValidInline;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n }\n }\n else if (this.offset === nextOffset && this.offset < length + 1 && isParagraphEnd) {\n this.offset = length + 1;\n }\n else {\n this.updateOffsetToNextParagraph(indexInInline, true);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to given inline\n * @private\n */\n TextPosition.prototype.moveToInline = function (inline, index) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, index);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Return true is start element exist before end element\n * @private\n */\n TextPosition.isForwardSelection = function (start, end) {\n if (start === end) {\n return true;\n }\n start = start.replace(/C;/g, '');\n end = end.replace(/C;/g, '');\n start = start.replace(/H;/g, '');\n end = end.replace(/H;/g, '');\n start = start.replace(/F;/g, '');\n end = end.replace(/F;/g, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n var length = selectionStart.length;\n if (length > selectionEnd.length) {\n length = selectionEnd.length - 1;\n }\n for (var i = 0; i < length; i++) {\n var startOffset = parseFloat(selectionStart[i]);\n var endOffset = parseFloat(selectionEnd[i]);\n if (startOffset !== endOffset) {\n return startOffset < endOffset;\n }\n }\n return false;\n };\n /**\n * Move to previous position offset\n * @private\n */\n TextPosition.prototype.movePreviousPositionInternal = function (fieldEnd) {\n var inline;\n if (isNullOrUndefined(fieldEnd.fieldSeparator)) {\n inline = this.selection.getPreviousValidElement(fieldEnd.fieldBegin);\n }\n else {\n inline = this.selection.getPreviousValidElement(fieldEnd);\n }\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline instanceof FieldElementBox ? 0 : inline.length);\n };\n /**\n * Moves the text position to start of the word.\n * @private\n */\n TextPosition.prototype.moveToWordStartInternal = function (type) {\n var endOffset = this.currentWidget.getEndOffset();\n var currentPara = this.currentWidget.paragraph;\n var selection = this.selection;\n if (type === 2 && (this.offset === endOffset || this.offset === endOffset + 1)) {\n return;\n }\n if (this.offset === endOffset + 1) {\n this.offset = endOffset;\n }\n else if (this.offset === selection.getStartOffset(currentPara) && this.currentWidget === currentPara.childWidgets[0]) {\n var previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n else {\n if (this.offset === selection.getStartLineOffset(this.currentWidget)) {\n var lineIndex = currentPara.childWidgets.indexOf(this.currentWidget);\n if (lineIndex - 1 >= 0) {\n this.currentWidget = currentPara.childWidgets[lineIndex - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n }\n var isStarted = false;\n var endSelection = false;\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // tslint:disable-next-line:max-line-length \n this.getPreviousWordOffset(inline, selection, indexInInline, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, this);\n }\n if (type === 1) {\n this.calculateOffset();\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Get next word offset\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffset = function (inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (inline instanceof TextElementBox) {\n this.getNextWordOffsetSpan(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof ImageElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetImage(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldBegin(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2 || inline instanceof BookmarkElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldSeperator(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldEnd(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n /**\n * get next word offset from field begin\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetFieldBegin = function (fieldBegin, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n this.getNextWordOffsetFieldEnd(fieldBegin.fieldEnd, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (type === 0) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldSeperator(fieldBegin.fieldSeparator, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n var inline = fieldBegin.fieldSeparator;\n // tslint:disable-next-line:max-line-length\n if (inline.line.paragraph === fieldBegin.fieldEnd.line.paragraph && !this.selection.hasValidInline(inline.line.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffset(inline, 0, type, !(endPosition.paragraph === fieldBegin.line.paragraph && endPosition.offset === startOffset), endSelection, endPosition, excludeSpace);\n // tslint:disable-next-line:max-line-length\n if (endSelection && !isNullOrUndefined(fieldBegin.fieldSeparator) && (endPosition.paragraph === fieldBegin.line.paragraph) && (endPosition.offset === fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length))) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n return;\n }\n if (!endSelection) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(fieldBegin.fieldEnd.line, fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, fieldBegin.fieldEnd.length));\n }\n }\n };\n /**\n * get next word offset from image\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetImage = function (image, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n var startOffset = image.line.getOffset(image, 0);\n endSelection = true;\n if (endPosition.offset === startOffset) {\n if (isNullOrUndefined(image.nextNode)) {\n endPosition.setPositionParagraph(image.line, startOffset + image.length);\n }\n else {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n endPosition.setPositionParagraph(image.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(image.nextNode)) {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n /**\n * get next word offset from span\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetSpan = function (span, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n endSelection = true;\n var startOffset = span.line.getOffset(span, 0);\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(span.line, startOffset + span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n var wordEndIndex = 0;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0]) === -1)) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n if (isInField) {\n return;\n }\n }\n else if (indexInInline < span.length) {\n // tslint:disable-next-line:max-line-length\n var txt = indexInInline > 0 && span.text.length - 1 >= indexInInline ? span.text.slice(indexInInline, span.length) : span.text;\n wordEndIndex = HelperMethods.indexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordEndIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n var offset = span.line.getOffset(span, wordEndIndex + indexInInline);\n // tslint:disable-next-line:max-line-length\n if ((excludeSpace || txt[wordEndIndex] !== ' ') && !endSelection && span.line.paragraph === endPosition.paragraph && offset !== endPosition.offset) {\n endSelection = true;\n endPosition.setPositionParagraph(span.line, offset);\n return;\n }\n wordEndIndex++;\n while (wordEndIndex < txt.length && HelperMethods.wordSplitCharacters.indexOf(txt[wordEndIndex]) !== -1) {\n if (txt[wordEndIndex] !== ' ' && txt[wordEndIndex] !== ' ') {\n break;\n }\n wordEndIndex++;\n }\n endSelection = true;\n if (wordEndIndex < txt.length) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n };\n /**\n * get next word offset from field separator\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetFieldSeperator = function (fieldSeparator, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (!isNullOrUndefined(fieldSeparator.nextNode)) {\n this.getNextWordOffset(fieldSeparator.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n /**\n * get next word offset from field end\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetFieldEnd = function (fieldEnd, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n if (isNullOrUndefined(fieldEnd.nextNode)) {\n return;\n }\n }\n if (!isNullOrUndefined(fieldEnd.nextNode)) {\n this.getNextWordOffset(fieldEnd.nextNode, 0, type, false, endSelection, endPosition, excludeSpace);\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n }\n else {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n endSelection = true;\n };\n /**\n * Get previous word offset\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffset = function (inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (inline instanceof TextElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetSpan(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ImageElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetImage(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetFieldBegin(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetFieldSeparator(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetFieldEnd(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof BookmarkElementBox) {\n this.getPreviousWordOffsetBookMark(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ListTextElementBox && inline.previousNode) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetSpan(inline.previousNode, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetBookMark = function (bookmark, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (bookmark.previousNode) {\n if (bookmark.previousNode instanceof TextElementBox) {\n var inline = bookmark.previousNode;\n if (HelperMethods.lastIndexOfAny(inline.text, HelperMethods.wordSplitCharacters) !== inline.text.length - 1) {\n this.getPreviousWordOffset(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, bookmark.line.getOffset(bookmark, 0));\n }\n }\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, selection.getStartLineOffset(bookmark.line));\n }\n };\n /**\n * get previous word offset from field end\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetFieldEnd = function (fieldEnd, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (isNullOrUndefined(fieldEnd.fieldSeparator)) {\n this.getPreviousWordOffsetFieldBegin(fieldEnd.fieldBegin, selection, 0, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (type === 0 && !isNullOrUndefined(fieldEnd.previousNode)) {\n var inline = fieldEnd.previousNode;\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(inline, selection, inline.length, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, endPosition);\n }\n else if (!isNullOrUndefined(fieldEnd.fieldBegin) && type !== 0) {\n var inline = fieldEnd.previousNode;\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(inline) || (inline.line.paragraph === fieldEnd.fieldBegin.line.paragraph && !selection.hasValidInline(inline.line.paragraph, inline, fieldEnd.fieldBegin))) {\n inline = fieldEnd.fieldBegin;\n }\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(inline, selection, inline.length, type, !(endPosition.paragraph === fieldEnd.line.paragraph && endPosition.offset === endOffset), isStarted, endSelection, endPosition);\n if (endSelection && endPosition.paragraph === fieldEnd.line.paragraph\n && endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n return;\n }\n if (!endSelection) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(fieldEnd.fieldBegin.line, fieldEnd.fieldBegin.line.getOffset(fieldEnd.fieldBegin, 0));\n }\n }\n };\n /**\n * get previous word offset from field separator\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetFieldSeparator = function (fieldSeparator, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n this.getPreviousWordOffsetFieldBegin(fieldSeparator.fieldBegin, selection, fieldSeparator.fieldBegin.length, type, isInField, isStarted, endSelection, endPosition);\n };\n /**\n * get previous word offset from field begin\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetFieldBegin = function (fieldBegin, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n }\n if (!isNullOrUndefined(fieldBegin.previousNode)) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(fieldBegin.previousNode, selection, fieldBegin.previousNode.length, type, false, isStarted, endSelection, endPosition);\n if (endPosition.offset === startOffset) {\n if (type !== 0 && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(fieldBegin.line, fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length));\n }\n }\n }\n else {\n endPosition.setPositionParagraph(fieldBegin.line, selection.getStartLineOffset(fieldBegin.line));\n }\n };\n /**\n * get previous word offset from image\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetImage = function (image, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === image.length) {\n var endOffset = image.line.getOffset(image, image.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(image.line, endOffset - image.length);\n }\n else {\n endPosition.setPositionParagraph(image.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(image.previousNode)) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(image.previousNode, selection, image.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n /**\n * Get previous word offset from span\n * @private\n */\n // tslint:disable-next-line:max-line-length \n TextPosition.prototype.getPreviousWordOffsetSpan = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endSelection = false;\n return;\n }\n if (indexInInline === span.length) {\n endSelection = true;\n var endOffset = span.line.getOffset(span, span.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(span.line, endOffset - span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(span.previousNode)) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n var wordStartIndex = 0;\n if (!isStarted) {\n while (indexInInline > 0 && span.text[indexInInline - 1] === ' ') {\n indexInInline--;\n }\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n }\n if (indexInInline > 0) {\n isStarted = true;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0])) === -1) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = true;\n return;\n }\n var txt = span.text.length > indexInInline ? span.text.slice(0, indexInInline) : span.text;\n wordStartIndex = HelperMethods.lastIndexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordStartIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n while (wordStartIndex > 0 && endSelection && txt[wordStartIndex] !== ' '\n && (HelperMethods.wordSplitCharacters.indexOf(txt[wordStartIndex - 1])) !== -1) {\n wordStartIndex--;\n }\n if (txt[wordStartIndex] === ' ' || txt[wordStartIndex] === ' ' || !endSelection) {\n wordStartIndex++;\n }\n endSelection = true;\n if (wordStartIndex > 0) {\n var offset = span.line.getOffset(span, wordStartIndex);\n if (span.line.paragraph === endPosition.paragraph && offset === endPosition.offset) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetSpan(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, offset);\n }\n }\n else if (span.previousNode instanceof TextElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, 0));\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n };\n /**\n * set previous word offset in span\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.setPreviousWordOffset = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.previousNode instanceof ElementBox && span.line === span.previousNode.line) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, selection.getStartLineOffset(span.line));\n }\n };\n /**\n * Validate if text position is in field forward\n * @private\n */\n TextPosition.prototype.validateForwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var isPositionMoved = false;\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(currentIndex, selectionEndIndex)) {\n if (!isPositionMoved) {\n textPosition.moveNextPosition(false);\n var nextIndex = textPosition.getHierarchicalIndexInternal();\n //Handled specifically to break infinite looping, if selection ends at last paragraph mark.\n if (currentIndex === nextIndex) {\n break;\n }\n }\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n if (indexInInline === inline.length && inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var lineWidget = inline.fieldBegin.line;\n var fieldBeginOffset = lineWidget.getOffset(inline.fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(lineWidget, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n this.selection.start.setPositionParagraph(lineWidget, fieldBeginOffset);\n }\n }\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (!isNullOrUndefined(nextInline) && nextInline instanceof ElementBox) {\n inline = nextInline;\n }\n }\n isPositionMoved = (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd));\n if (isPositionMoved) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var fieldEnd = inline.fieldEnd;\n var paragraph = fieldEnd.line.paragraph;\n var fieldEndOffset = fieldEnd.line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n //If selection end is after field begin, extend selection end to field end.\n this.moveToInline(inline.fieldEnd, 1);\n return;\n }\n textPosition.moveToInline(inline.fieldEnd, 1);\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * Validate if text position is in field backward\n * @private\n */\n TextPosition.prototype.validateBackwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(selectionEndIndex, currentIndex)) {\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var paragraph = nextInline.fieldEnd.line;\n var fieldEndOffset = paragraph.getOffset(nextInline.fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(paragraph, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionStartIndex)) {\n this.selection.start.setPositionParagraph(paragraph, fieldEndOffset);\n selectionStartIndex = fieldEndIndex;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var line = inline.fieldBegin.line;\n var fieldBegin = inline.fieldBegin;\n var fieldBeginOffset = line.getOffset(fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionEndIndex, fieldBeginIndex)) {\n //If field begin is before selection end, extend selection end to field begin.\n this.moveToInline(inline.fieldBegin, 0);\n return;\n }\n textPosition.moveToInline(inline.fieldBegin, 0);\n }\n else {\n textPosition.movePreviousPosition();\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * @private\n */\n TextPosition.prototype.paragraphStartInternal = function (selection, moveToPreviousParagraph) {\n var offset = selection.getStartLineOffset(this.currentWidget);\n if (this.offset === offset && moveToPreviousParagraph) {\n var startParagraph = this.moveToNextParagraphInTableCheck();\n if (startParagraph) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var paragraphValue = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = paragraphValue.childWidgets[0];\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n }\n else {\n this.currentWidget = this.currentWidget.paragraph.getSplitWidgets()[0].childWidgets[0];\n this.offset = offset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.calculateOffset = function () {\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the paragraph.\n * @private\n */\n TextPosition.prototype.moveToParagraphStartInternal = function (selection, moveToPreviousParagraph) {\n var startOffset = selection.getStartOffset(this.paragraph);\n if (this.offset === startOffset && moveToPreviousParagraph) {\n var paragraphstart = this.moveToNextParagraphInTableCheck();\n if (paragraphstart) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.paragraph))) {\n this.currentWidget = selection.getPreviousParagraphBlock(this.paragraph).firstChild;\n this.offset = selection.getStartOffset(this.paragraph);\n }\n }\n else {\n this.currentWidget = this.paragraph.firstChild;\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(false);\n };\n /**\n * Moves the text position to end of the paragraph.\n * @private\n */\n TextPosition.prototype.moveToParagraphEndInternal = function (selection, moveToNextParagraph) {\n // tslint:disable-next-line:max-line-length\n var splittedParagraph = this.currentWidget.paragraph;\n while (splittedParagraph.nextSplitWidget) {\n splittedParagraph = splittedParagraph.nextSplitWidget;\n }\n this.currentWidget = splittedParagraph.childWidgets[splittedParagraph.childWidgets.length - 1];\n var endOffset = this.currentWidget.getEndOffset() + 1;\n if (this.offset === endOffset && moveToNextParagraph) {\n var paragraphEnd = this.moveToNextParagraphInTableCheck();\n if (paragraphEnd) {\n this.moveToNextParagraphInTable();\n }\n else if (!isNullOrUndefined(selection.getNextParagraphBlock(this.currentWidget.paragraph))) {\n var endParagraph = selection.getNextParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = endParagraph.childWidgets[endParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n }\n }\n else {\n this.offset = endOffset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.moveUp = function (selection, left) {\n var paragraph = this.currentWidget.paragraph;\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n //Moves previous line starting.\n this.movePreviousPosition();\n var prevLine = undefined;\n var currentParagraph = this.currentWidget.paragraph;\n if (paragraph.isInsideTable && paragraph !== currentParagraph && paragraph.associatedCell !== currentParagraph.associatedCell\n // tslint:disable-next-line:max-line-length\n && (!isNullOrUndefined(currentParagraph.associatedCell) && (paragraph.associatedCell.ownerRow === currentParagraph.associatedCell.ownerRow))) {\n var ownerRow = currentParagraph.associatedCell.ownerRow;\n if (ownerRow.previousRenderedWidget instanceof TableRowWidget) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getFirstCellInRegion(ownerRow.previousRenderedWidget, currentParagraph.associatedCell, left, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n var prevBlock = ownerRow.ownerTable.previousRenderedWidget;\n do {\n if (prevBlock instanceof TableWidget) {\n prevBlock = selection.getLastBlockInLastCell(prevBlock);\n }\n } while (prevBlock instanceof TableWidget);\n if (prevBlock instanceof ParagraphWidget) {\n this.setPosition(prevBlock.childWidgets[prevBlock.childWidgets.length - 1], false);\n }\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!paragraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getFirstCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n // tslint:disable-next-line:max-line-length\n }\n else if (paragraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && paragraph.associatedCell.ownerRow.previousRenderedWidget !== paragraph.associatedCell.ownerRow.previousSplitWidget &&\n paragraph.associatedCell.ownerRow.previousRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = selection.getTop(prevLine);\n selection.updateTextPositionWidget(prevLine, new Point(left, top), this, false);\n };\n /**\n * @private\n */\n TextPosition.prototype.moveDown = function (selection, left) {\n //Moves text position to end of line.\n var prevParagraph = this.currentWidget.paragraph;\n var prevOffset = this.offset;\n this.moveToLineEndInternal(selection, true);\n var length = this.selection.getParagraphLength(this.currentWidget.paragraph);\n if (this.offset > length) {\n this.offset = length;\n }\n //Moves next line starting.\n this.moveNextPosition();\n var nextLine = undefined;\n // tslint:disable-next-line:max-line-length\n if (prevParagraph.isInsideTable && prevParagraph !== this.currentWidget.paragraph && prevParagraph.associatedCell !== this.currentWidget.paragraph.associatedCell && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var ownerRow = this.currentWidget.paragraph.associatedCell.ownerRow;\n // tslint:disable-next-line:max-line-length\n if (prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable && prevParagraph.associatedCell.cellFormat.rowSpan > 1 && prevParagraph.associatedCell.cellFormat.rowSpan + prevParagraph.associatedCell.ownerRow.rowIndex === prevParagraph.associatedCell.ownerTable.childWidgets.length) {\n //If the prevParagraph owner cell is Verically merged upto the last row, then theposition moved to next column. the position moved to out of the current tabel so owner row is assigned to last row.\n // tslint:disable-next-line:max-line-length\n ownerRow = this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets[this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets.length - 1];\n }\n if (ownerRow.nextRenderedWidget instanceof TableRowWidget) {\n // tslint:disable-next-line:max-line-length\n var cell = this.selection.getLastCellInRegion(ownerRow.nextRenderedWidget, this.currentWidget.paragraph.associatedCell, left, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n }\n else {\n var nextBlock = this.selection.getNextRenderedBlock(ownerRow.ownerTable);\n do {\n if (nextBlock instanceof TableWidget) {\n nextBlock = this.selection.getFirstBlockInFirstCell(nextBlock);\n }\n } while (nextBlock instanceof TableWidget);\n if (nextBlock instanceof ParagraphWidget) {\n this.setPosition(nextBlock.childWidgets[0], true);\n }\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var cell = this.selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n // tslint:disable-next-line:max-line-length\n }\n else if (prevParagraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow.nextRenderedWidget !== prevParagraph.associatedCell.ownerRow.nextSplitWidget\n && prevParagraph.associatedCell.ownerRow.nextRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n this.setPosition(selection.getFirstParagraph(cell).childWidgets[0], false);\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = this.selection.getTop(nextLine);\n this.selection.updateTextPositionWidget(nextLine, new Point(left, top), this, false);\n };\n /**\n * Moves the text position to start of the line.\n * @private\n */\n TextPosition.prototype.moveToLineStartInternal = function (selection, moveToPreviousLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetInternal(this.currentWidget, this.offset, moveToPreviousLine);\n var firstElement = selection.getFirstElementInternal(currentLine);\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n if (isNullOrUndefined(firstElement) && this.offset > startOffset) {\n var index = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n var inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof TextElementBox && inline.text !== '\\v') {\n this.offset = startOffset;\n }\n }\n else if (!isNullOrUndefined(firstElement)) {\n var indexInInline = selection.getIndexInInline(firstElement);\n this.currentWidget = firstElement.line;\n this.offset = this.currentWidget.getOffset(firstElement, indexInInline);\n indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var prevInline = selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(prevInline)) {\n inline = prevInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox) {\n this.offset--;\n }\n }\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Check paragraph is inside table\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTableCheck = function () {\n if ((this.selection.start.paragraph.isInsideTable || this.paragraph.isInsideTable)\n && (this.selection.start.paragraph.associatedCell !== this.paragraph.associatedCell\n || this.selection.isCellSelected(this.selection.start.paragraph.associatedCell, this.selection.start, this))) {\n return true;\n }\n return false;\n };\n /**\n * Moves the text position to end of the word.\n * @private\n */\n TextPosition.prototype.moveToWordEndInternal = function (type, excludeSpace) {\n // type === 0 -------->CTRL+ARROW Navigation\n // type === 1 -------->CTRL+SHIFT+ARROW Selection\n // type === 2 -------->Double-tap Word Selection\n var incrementValue = 0;\n var endOffset = this.currentWidget.getEndOffset();\n if (this.selection.isParagraphFirstLine(this.currentWidget)) {\n if (this.currentWidget.children[0] instanceof ListTextElementBox) {\n incrementValue = 1;\n }\n if (this.currentWidget.children[1] instanceof ListTextElementBox) {\n incrementValue = 2;\n }\n }\n if (this.offset + incrementValue === endOffset || this.offset === endOffset + 1) {\n if (this.offset === endOffset && type !== 0) {\n this.setPositionParagraph(this.currentWidget, endOffset + 1);\n }\n else {\n var nextParagraph = this.selection.getNextParagraphBlock(this.currentWidget.paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[0];\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n if (type === 1) {\n // tslint:disable-next-line:max-line-length\n var nextWord = this.moveToNextParagraphInTableCheck();\n if (nextWord) {\n this.moveToNextParagraphInTable();\n }\n else {\n this.moveToWordEndInternal(type, excludeSpace);\n }\n }\n }\n }\n else {\n var indexInInline = 0;\n var endSelection = false;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.getNextWordOffset(inline, indexInInline, type, false, endSelection, this, excludeSpace);\n }\n if (type !== 0) {\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move text position to next paragraph inside table\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTable = function () {\n var paragraph = this.currentWidget.paragraph;\n var nextParagraph = (paragraph.isInsideTable) ? this.selection.getNextSelectionCell(paragraph.associatedCell) :\n this.selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n /**\n * Moves the text position to start of the previous paragraph.\n */\n TextPosition.prototype.moveToPreviousParagraph = function (selection) {\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n // tslint:disable-next-line:max-line-length\n if (this.offset === startOffset && !isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var previousParagraph = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = previousParagraph.childWidgets[0];\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n else {\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to previous line from current position\n * @private\n */\n TextPosition.prototype.moveToPreviousLine = function (selection, left) {\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveUpInTable(selection);\n }\n else {\n this.moveBackward();\n }\n var prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(prevLine);\n var lineWidth = selection.getWidth(prevLine, true);\n //Moves till the Up/Down selection width.\n if (lineWidth + lineStart >= left && currentLine !== prevLine) {\n var top_1 = selection.getTop(prevLine);\n var point = new Point(left, top_1);\n selection.updateTextPositionWidget(prevLine, point, this, true);\n }\n //Checks if the current position is between field result, then move to field begin.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateBackwardFieldSelection(currentIndex, selectionEndIndex);\n };\n /**\n * @private\n */\n TextPosition.prototype.moveToLineEndInternal = function (selection, moveToNextLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var firstElement = selection.getFirstElementInternal(currentLine);\n if (isNullOrUndefined(firstElement) && this.offset === selection.getStartLineOffset(this.currentWidget)) {\n this.offset = selection.getParagraphLength(this.paragraph) + 1;\n this.updatePhysicalPosition(true);\n }\n else if (!isNullOrUndefined(firstElement)) {\n var lastElement = currentLine.children[currentLine.children.length - 1];\n var index = 0;\n index += lastElement instanceof TextElementBox ? lastElement.length : 1;\n this.currentWidget = lastElement.line;\n if (index === lastElement.length\n && isNullOrUndefined(lastElement.nextNode) && selection.isParagraphLastLine(this.currentWidget)) {\n var length_1 = selection.getLineLength(this.currentWidget);\n this.offset = moveToNextLine ? length_1 + 1 : length_1;\n }\n else {\n var inline = lastElement;\n while (!isNullOrUndefined(inline) && inline.length === index && inline.nextNode instanceof FieldElementBox) {\n var nextInline = selection.getNextValidElement(inline.nextNode);\n if (inline !== nextInline) {\n inline = nextInline;\n index = 0;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n if (this.currentWidget === fieldBegin.fieldEnd.line\n && !selection.hasValidInline(this.currentWidget.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n }\n if (inline instanceof FieldElementBox) {\n index = 1;\n }\n }\n if (index === inline.length && isNullOrUndefined(inline.nextNode)) {\n index++;\n }\n if (!moveToNextLine && inline instanceof ElementBox && inline.text === '\\v') {\n index--;\n }\n this.offset = this.currentWidget.getOffset(inline, index);\n }\n this.updatePhysicalPosition(moveToNextLine);\n }\n };\n /**\n * Move to next line\n * @private\n */\n TextPosition.prototype.moveToNextLine = function (left) {\n var selection = this.selection;\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionInternal(this);\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var isAtLineStart = this.offset === 0 ? true : false;\n //Moves text position to end of line.\n this.moveToLineEndInternal(selection, true);\n var isMoveToLineEnd = !textPosition.isAtSamePosition(this);\n textPosition.setPositionInternal(this);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveDownInTable(selection);\n }\n else {\n this.moveNextPosition();\n this.moveForward();\n }\n var nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(nextLine);\n var firstElement = selection.getFirstElementInternal(nextLine);\n // tslint:disable-next-line:max-line-length\n var firstItemWidth = isNullOrUndefined(firstElement) ? selection.getWidth(nextLine, true) : selection.getLeftInternal(nextLine, firstElement, 1) - lineStart;\n //Moves till the Up/Down selection width.\n if (lineStart < left && (firstItemWidth / 2 < left - lineStart)) {\n var top_2 = selection.getTop(nextLine);\n var point = new Point(left, top_2);\n selection.updateTextPositionWidget(nextLine, point, this, true);\n var width = selection.getWidth(nextLine, true);\n if (width < left - lineStart) {\n this.moveToLineEndInternal(selection, true);\n }\n }\n else if (isMoveToLineEnd && this.currentWidget.paragraph.isInsideTable\n && this.currentWidget === this.owner.selection.start.currentWidget) {\n this.setPositionInternal(textPosition);\n }\n else if (!isMoveToLineEnd) {\n this.moveToLineEndInternal(selection, true);\n }\n //Checks if the current position is between field result, then move to field end.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateForwardFieldSelection(currentIndex, selectionEndIndex);\n };\n /**\n * Move upward in table\n * @private\n */\n TextPosition.prototype.moveUpInTable = function (selection) {\n var isPositionUpdated = false;\n var end = this.owner.selection.end;\n var isBackwardSelection = !this.owner.selection.isEmpty;\n isPositionUpdated = end.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.currentWidget.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(endCell, startCell);\n isPositionUpdated = containerCell.ownerTable.contains(startCell);\n if (isPositionUpdated) {\n endCell = selection.getSelectedCell(endCell, containerCell);\n startCell = selection.getSelectedCell(startCell, containerCell);\n // tslint:disable-next-line:max-line-length\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this, end);\n if (!isContainerCellSelected) {\n // tslint:disable-next-line:max-line-length\n isContainerCellSelected = this.currentWidget.paragraph === selection.getFirstParagraph(containerCell) && this.isAtParagraphStart;\n }\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(startCell.ownerRow.previousRenderedWidget)) {\n //Moves to cell in previous row.\n var row = startCell.ownerRow.previousRenderedWidget;\n // tslint:disable-next-line:max-line-length\n var cell = selection.getFirstCellInRegion(row, containerCell, this.owner.selection.upDownSelectionLength, true);\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(startCell.ownerRow.previousRenderedWidget) || !isInContainerCell) {\n if (isBackwardSelection) {\n //Moves to first cell of row.\n startCell = startCell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to last cell of row.\n startCell = startCell.ownerRow.childWidgets[startCell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to previous row / previous block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isBackwardSelection) {\n //Moves to first cell of row.\n cell = cell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n //Moves to previous row / previous block.\n this.moveBackward();\n };\n /**\n * Move down inside table\n * @private\n */\n TextPosition.prototype.moveDownInTable = function (selection) {\n var isPositionUpdated = false;\n var isForwardSelection = this.owner.selection.isEmpty || this.owner.selection.isForward;\n isPositionUpdated = this.owner.selection.start.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.owner.selection.start.paragraph.associatedCell;\n var endCell = this.currentWidget.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(startCell, endCell);\n isPositionUpdated = containerCell.ownerTable.contains(endCell);\n if (isPositionUpdated) {\n startCell = selection.getSelectedCell(startCell, containerCell);\n endCell = selection.getSelectedCell(endCell, containerCell);\n // tslint:disable-next-line:max-line-length\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this.owner.selection.start, this);\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(endCell.ownerRow.nextRenderedWidget)) {\n //Moves to cell in next row.\n var row = endCell.ownerRow.nextRenderedWidget;\n // tslint:disable-next-line:max-line-length\n var cell = selection.getLastCellInRegion(row, containerCell, this.owner.selection.upDownSelectionLength, false);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(endCell.ownerRow.nextRenderedWidget) || !isInContainerCell) {\n if (isForwardSelection) {\n //Moves to last cell of row.\n endCell = endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n //Moves to first cell of row.\n endCell = endCell.ownerRow.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to next row / next block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isForwardSelection) {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else if (cell.ownerRow.nextRenderedWidget) {\n //Moves to first cell of row.\n cell = cell.ownerRow.nextRenderedWidget.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n //Moves to next row / next block.\n this.moveForward();\n };\n /**\n * @private\n */\n TextPosition.prototype.destroy = function () {\n this.offset = undefined;\n this.isUpdateLocation = undefined;\n if (!isNullOrUndefined(this.location)) {\n this.location.destroy();\n }\n this.location = undefined;\n this.currentWidget = undefined;\n this.owner = undefined;\n this.viewer = undefined;\n };\n return TextPosition;\n}());\nexport { TextPosition };\n/**\n * @private\n */\nvar SelectionWidgetInfo = /** @class */ (function () {\n function SelectionWidgetInfo(left, width) {\n this.leftIn = 0;\n this.widthIn = 0;\n this.leftIn = left;\n this.widthIn = width;\n }\n Object.defineProperty(SelectionWidgetInfo.prototype, \"left\", {\n /**\n * @private\n */\n get: function () {\n return this.leftIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionWidgetInfo.prototype, \"width\", {\n /**\n * @private\n */\n get: function () {\n return this.widthIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n SelectionWidgetInfo.prototype.destroy = function () {\n this.widthIn = undefined;\n this.leftIn = undefined;\n };\n return SelectionWidgetInfo;\n}());\nexport { SelectionWidgetInfo };\n/**\n * @private\n */\nvar Hyperlink = /** @class */ (function () {\n function Hyperlink(fieldBeginAdv, selection) {\n this.linkInternal = '';\n this.localRef = '';\n this.opensNewWindow = false;\n var fieldCode = selection.getFieldCode(fieldBeginAdv);\n var lowercase = fieldCode.toLowerCase();\n if (lowercase.substring(0, 9) === 'hyperlink') {\n this.parseFieldValues(fieldCode.substring(9).trim(), selection);\n }\n }\n Object.defineProperty(Hyperlink.prototype, \"navigationLink\", {\n /**\n * Gets navigation link.\n * @returns string\n * @private\n */\n get: function () {\n return this.linkInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"localReference\", {\n /**\n * Gets the local reference if any.\n * @returns string\n * @private\n */\n get: function () {\n return this.localRef;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"linkType\", {\n /**\n * Gets hyper link type.\n * @returns HyperLinkType\n * @private\n */\n get: function () {\n return this.typeInternal;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Parse field values\n * @param {string} value\n * @returns Void\n */\n Hyperlink.prototype.parseFieldValues = function (value, selection) {\n var codes = value.split(' ');\n var isLocalRef = false;\n for (var i = 0; i < codes.length; i++) {\n var code = codes[i];\n if (code.length < 1) {\n continue;\n }\n if (code === '\\\\t' || code === '\\\\l') {\n isLocalRef = true;\n }\n else if (code === '\\\\n') {\n this.opensNewWindow = true;\n }\n else {\n code = this.parseFieldValue(code, code[0] === '\\\"' ? '\\\"' : undefined);\n if (isLocalRef) {\n this.localRef = code;\n isLocalRef = false;\n }\n else {\n this.linkInternal = code;\n }\n }\n }\n this.setLinkType();\n };\n Hyperlink.prototype.parseFieldValue = function (value, endChar) {\n value = value.substring(1);\n var endIndex = endChar ? value.indexOf(endChar) : -1;\n if (endIndex < 0) {\n endIndex = value.length;\n }\n return value.substring(0, endIndex).trim();\n };\n Hyperlink.prototype.setLinkType = function () {\n // If only local reference.\n if (isNullOrUndefined(this.linkInternal) || this.linkInternal.length < 1) {\n this.typeInternal = 'Bookmark';\n return;\n }\n // Validates link.\n if (this.linkInternal.substring(0, 4) === ('www.')) {\n this.linkInternal = 'http://' + this.navigationLink;\n }\n else if (this.linkInternal[0] === '@') {\n this.linkInternal = 'mailto:' + this.navigationLink;\n }\n // Finds proper link type.\n if (this.linkInternal.substring(0, 7) === 'http://'\n || this.linkInternal.substring(0, 8) === 'https://') {\n this.typeInternal = 'WebPage';\n }\n else if (this.linkInternal.substring(0, 7) === 'mailto:') {\n this.typeInternal = 'Email';\n }\n else {\n this.typeInternal = 'File';\n }\n };\n /**\n * @private\n */\n Hyperlink.prototype.destroy = function () {\n this.linkInternal = undefined;\n this.localRef = undefined;\n this.typeInternal = undefined;\n this.opensNewWindow = undefined;\n };\n return Hyperlink;\n}());\nexport { Hyperlink };\n/**\n * @private\n */\nvar ImageFormat = /** @class */ (function () {\n /**\n * Constructor for image format class\n * @param imageContainer - Specifies for image width and height values.\n */\n function ImageFormat(imageContainer) {\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n this.width = imageContainer.width;\n this.height = imageContainer.height;\n }\n /**\n * Dispose the internal objects which are maintained.\n * @private\n */\n ImageFormat.prototype.destroy = function () {\n this.width = undefined;\n this.height = undefined;\n };\n return ImageFormat;\n}());\nexport { ImageFormat };\n","import { Widget, BodyWidget, TableRowWidget, TableWidget, LineWidget, ElementBox, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockWidget, HeaderFooterWidget, BlockContainer, BookmarkElementBox } from '../viewer/page';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { SelectionCharacterFormat, SelectionCellFormat, SelectionParagraphFormat, SelectionRowFormat, SelectionSectionFormat, SelectionTableFormat, SelectionImageFormat } from './selection-format';\nimport { isNullOrUndefined, createElement, L10n } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WCharacterFormat, WParagraphFormat, WParagraphStyle } from '../index';\nimport { HtmlExport } from '../writer/html-export';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { TextPosition, SelectionWidgetInfo, Hyperlink } from './selection-helper';\n/**\n * Selection\n */\nvar Selection = /** @class */ (function () {\n /**\n * @private\n */\n function Selection(documentEditor) {\n var _this = this;\n /**\n * @private\n */\n this.upDownSelectionLength = 0;\n /**\n * @private\n */\n this.isSkipLayouting = false;\n /**\n * @private\n */\n this.isImageSelected = false;\n this.contextTypeInternal = undefined;\n /**\n * @private\n */\n this.caret = undefined;\n //Format Retrieval Field\n /**\n * @private\n */\n this.isRetrieveFormatting = false;\n /**\n * @private\n */\n this.skipFormatRetrieval = false;\n this.isMoveDownOrMoveUp = false;\n /**\n * @private\n */\n this.selectedWidgets = undefined;\n /**\n * Hides caret.\n * @private\n */\n this.hideCaret = function () {\n _this.caret.style.display = 'none';\n };\n this.owner = documentEditor;\n this.viewer = this.owner.viewer;\n this.start = new TextPosition(this.owner);\n this.end = new TextPosition(this.owner);\n this.selectedWidgets = new Dictionary();\n this.characterFormatIn = new SelectionCharacterFormat(this);\n this.paragraphFormatIn = new SelectionParagraphFormat(this, this.viewer);\n this.sectionFormatIn = new SelectionSectionFormat(this);\n this.rowFormatIn = new SelectionRowFormat(this);\n this.cellFormatIn = new SelectionCellFormat(this);\n this.tableFormatIn = new SelectionTableFormat(this);\n this.imageFormatInternal = new SelectionImageFormat(this);\n }\n Object.defineProperty(Selection.prototype, \"htmlWriter\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.htmlWriterIn)) {\n this.htmlWriterIn = new HtmlExport();\n }\n return this.htmlWriterIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"start\", {\n /**\n * Gets the start text position of last range in the selection\n * @returns {TextPosition}\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.viewer)) {\n if (isNullOrUndefined(this.startInternal)) {\n this.startInternal = this.owner.documentStart;\n }\n return this.startInternal;\n }\n return undefined;\n },\n /**\n * @private\n */\n set: function (value) {\n this.startInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"characterFormat\", {\n //Format retrieval properties\n /**\n * Gets the instance of selection character format.\n * @default undefined\n * @return {SelectionCharacterFormat}\n */\n get: function () {\n return this.characterFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"paragraphFormat\", {\n /**\n * Gets the instance of selection paragraph format.\n * @default undefined\n * @return {SelectionParagraphFormat}\n */\n get: function () {\n return this.paragraphFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"sectionFormat\", {\n /**\n * Gets the instance of selection section format.\n * @default undefined\n * @return {SelectionSectionFormat}\n */\n get: function () {\n return this.sectionFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"tableFormat\", {\n /**\n * Gets the instance of selection table format.\n * @default undefined\n * @return {SelectionTableFormat}\n */\n get: function () {\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"cellFormat\", {\n /**\n * Gets the instance of selection cell format.\n * @default undefined\n * @return {SelectionCellFormat}\n */\n get: function () {\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"rowFormat\", {\n /**\n * Gets the instance of selection row format.\n * @default undefined\n * @returns SelectionRowFormat\n */\n get: function () {\n return this.rowFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"imageFormat\", {\n /**\n * Gets the instance of selection image format.\n * @default undefined\n * @returns SelectionImageFormat\n */\n get: function () {\n return this.imageFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"end\", {\n /**\n * Gets the start text position of selection range.\n * @private\n */\n get: function () {\n return this.endInternal;\n },\n /**\n * For internal use\n * @private\n */\n set: function (value) {\n this.endInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"startPage\", {\n /**\n * Gets the page number where the selection ends.\n * @private\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || isNullOrUndefined(this.viewer.selectionStartPage)) {\n return 1;\n }\n return this.viewer.pages.indexOf(this.viewer.selectionStartPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"endPage\", {\n /**\n * Gets the page number where the selection ends.\n * @private\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || isNullOrUndefined(this.viewer.selectionEndPage)) {\n return 1;\n }\n return this.viewer.pages.indexOf(this.viewer.selectionEndPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isForward\", {\n /**\n * Determines whether the selection direction is forward or not.\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n return this.start.isExistBefore(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isEmpty\", {\n /**\n * Determines whether the start and end positions are same or not.\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.start)) {\n return true;\n }\n return this.start.isAtSamePosition(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"text\", {\n /**\n * Gets the text within selection.\n * @default ''\n * @returns {string}\n */\n get: function () {\n return this.getText(false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"contextType\", {\n /**\n * Gets the context type of the selection.\n */\n get: function () {\n return this.contextTypeInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isCleared\", {\n /**\n * @private\n */\n get: function () {\n return isNullOrUndefined(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n //Public API\n /**\n * Moves the selection to the header of current page.\n */\n Selection.prototype.goToHeader = function () {\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.headerWidget);\n };\n /**\n * Moves the selection to the footer of current page.\n */\n Selection.prototype.goToFooter = function () {\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.footerWidget);\n };\n /**\n * Closes the header and footer region.\n */\n Selection.prototype.closeHeaderFooter = function () {\n this.disableHeaderFooter();\n };\n /**\n * Moves the selection to the start of specified page number.\n */\n Selection.prototype.goToPage = function (pageNumber) {\n if (pageNumber >= 1 && pageNumber <= this.viewer.pages.length) {\n var page = this.viewer.pages[pageNumber - 1];\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n }\n };\n /**\n * Selects the entire table if the context is within table.\n */\n Selection.prototype.selectTable = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableInternal();\n };\n /**\n * Selects the entire row if the context is within table.\n */\n Selection.prototype.selectRow = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableRow();\n };\n /**\n * Selects the entire column if the context is within table.\n */\n Selection.prototype.selectColumn = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectColumnInternal();\n };\n /**\n * Selects the entire cell if the context is within table.\n */\n Selection.prototype.selectCell = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableCell();\n };\n /**\n * Select content based on selection settings\n */\n Selection.prototype.select = function (selectionSettings) {\n var point = new Point(selectionSettings.x, selectionSettings.y);\n var pageCoordinates = this.viewer.findFocusedPage(point, true);\n if (selectionSettings.extend) {\n this.moveTextPosition(pageCoordinates, this.end);\n }\n else {\n this.viewer.updateTextPositionForSelection(pageCoordinates, 1);\n }\n };\n /**\n * Toggles the bold property of selected contents.\n * @private\n */\n Selection.prototype.toggleBold = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleBold();\n }\n };\n /**\n * Toggles the italic property of selected contents.\n * @private\n */\n Selection.prototype.toggleItalic = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleItalic();\n }\n };\n /**\n * Toggles the underline property of selected contents.\n * @param underline Default value of ‘underline’ parameter is Single.\n * @private\n */\n Selection.prototype.toggleUnderline = function (underline) {\n if (this.owner.editor) {\n this.owner.editor.toggleUnderline(underline);\n }\n };\n /**\n * Toggles the strike through property of selected contents.\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n * @private\n */\n Selection.prototype.toggleStrikethrough = function (strikethrough) {\n if (this.owner.editor) {\n this.owner.editor.toggleStrikethrough(strikethrough);\n }\n };\n /**\n * Toggles the highlight color property of selected contents.\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n * @private\n */\n Selection.prototype.toggleHighlightColor = function (highlightColor) {\n if (this.owner.editor) {\n this.owner.editor.toggleHighlightColor(highlightColor);\n }\n };\n /**\n * Toggles the subscript formatting of selected contents.\n * @private\n */\n Selection.prototype.toggleSubscript = function () {\n if (this.owner.editor) {\n this.owner.editor.toggleSubscript();\n }\n };\n /**\n * Toggles the superscript formatting of selected contents.\n * @private\n */\n Selection.prototype.toggleSuperscript = function () {\n if (this.owner.editor) {\n this.owner.editor.toggleSuperscript();\n }\n };\n /**\n * Toggles the text alignment property of selected contents.\n * @param {TextAlignment} textAlignment Default value of ‘textAlignment parameter is TextAlignment.Left.\n * @private\n */\n Selection.prototype.toggleTextAlignment = function (textAlignment) {\n if (this.owner.editor) {\n this.owner.editor.toggleTextAlignment(textAlignment);\n }\n };\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n * @private\n */\n Selection.prototype.increaseIndent = function () {\n if (this.owner.editor) {\n this.owner.editor.increaseIndent();\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n * @private\n */\n Selection.prototype.decreaseIndent = function () {\n if (this.owner.editor) {\n this.owner.editor.decreaseIndent();\n }\n };\n /**\n * Fires the `requestNavigate` event if current selection context is in hyperlink.\n */\n Selection.prototype.navigateHyperlink = function () {\n var fieldBegin = this.getHyperlinkField();\n if (fieldBegin) {\n this.fireRequestNavigate(fieldBegin);\n }\n };\n /**\n * Navigate Hyperlink\n * @param fieldBegin\n * @private\n */\n Selection.prototype.fireRequestNavigate = function (fieldBegin) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n var eventArgs = {\n isHandled: false,\n navigationLink: hyperlink.navigationLink,\n linkType: hyperlink.linkType,\n localReference: hyperlink.localReference,\n source: this.owner\n };\n this.owner.trigger('requestNavigate', eventArgs);\n if (!eventArgs.isHandled) {\n this.viewer.selection.navigateBookmark(hyperlink.localReference, true);\n }\n };\n /**\n * Copies the hyperlink URL if the context is within hyperlink.\n */\n Selection.prototype.copyHyperlink = function () {\n var hyperLinkField = this.getHyperlinkField();\n var linkText = this.getLinkText(hyperLinkField);\n this.copyToClipboard(linkText);\n };\n //Selection add, Highlight, remove API starts\n /**\n * @private\n */\n Selection.prototype.highlightSelection = function (isSelectionChanged) {\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.hideImageResizer();\n }\n if (this.isEmpty) {\n this.updateCaretPosition();\n }\n else {\n if (this.isForward) {\n this.highlightSelectedContent(this.start, this.end);\n }\n else {\n this.highlightSelectedContent(this.end, this.start);\n }\n if (this.viewer.isComposingIME) {\n this.updateCaretPosition();\n }\n }\n this.viewer.updateTouchMarkPosition();\n if (isSelectionChanged) {\n this.viewer.scrollToPosition(this.start, this.end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.createHighlightBorder = function (lineWidget, width, left, top) {\n if (width < 0) {\n width = 0;\n }\n var page = this.getPage(lineWidget.paragraph);\n var height = lineWidget.height;\n var selectionWidget = undefined;\n if (!this.selectedWidgets.containsKey(lineWidget)) {\n selectionWidget = new SelectionWidgetInfo(left, width);\n this.selectedWidgets.add(lineWidget, selectionWidget);\n }\n var viewer = this.viewer;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n if (viewer.containerTop <= pageTop\n || pageTop < viewer.containerTop + viewer.selectionCanvas.height) {\n var zoomFactor = viewer.zoomFactor;\n this.clipSelection(page, pageTop);\n if (this.viewer.isComposingIME) {\n // tslint:disable-next-line:max-line-length\n this.renderDashLine(viewer.selectionContext, page, lineWidget, (pageLeft + (left * zoomFactor)) - viewer.containerLeft, top, width * zoomFactor, height);\n }\n else {\n viewer.selectionContext.fillStyle = 'gray';\n viewer.selectionContext.globalAlpha = 0.4;\n // tslint:disable-next-line:max-line-length\n viewer.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - viewer.containerLeft, (pageTop + (top * zoomFactor)) - viewer.containerTop, width * zoomFactor, height * zoomFactor);\n }\n viewer.selectionContext.restore();\n }\n };\n /**\n * Create selection highlight inside table\n * @private\n */\n Selection.prototype.createHighlightBorderInsideTable = function (cellWidget) {\n var page = this.getPage(cellWidget);\n var selectionWidget = undefined;\n var left = cellWidget.x - cellWidget.margin.left + cellWidget.leftBorderWidth;\n var width = cellWidget.width + cellWidget.margin.left\n + cellWidget.margin.right - cellWidget.leftBorderWidth - cellWidget.rightBorderWidth;\n var top = cellWidget.y;\n var height = cellWidget.height;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n var isVisiblePage = this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.viewer.selectionCanvas.height;\n if (this.selectedWidgets.containsKey(cellWidget)) {\n selectionWidget = this.selectedWidgets.get(cellWidget);\n if (isVisiblePage) {\n // tslint:disable-next-line:max-line-length\n this.viewer.selectionContext.clearRect((pageLeft + (selectionWidget.left * this.viewer.zoomFactor) - this.viewer.containerLeft), (pageTop + (top * this.viewer.zoomFactor)) - this.viewer.containerTop, selectionWidget.width * this.viewer.zoomFactor, height * this.viewer.zoomFactor);\n }\n }\n selectionWidget = new SelectionWidgetInfo(left, width);\n this.selectedWidgets.add(cellWidget, selectionWidget);\n if (isVisiblePage) {\n this.viewer.selectionContext.fillStyle = 'gray';\n this.viewer.selectionContext.globalAlpha = 0.4;\n var zoomFactor = this.viewer.zoomFactor;\n this.clipSelection(page, pageTop);\n // tslint:disable-next-line:max-line-length\n this.viewer.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (top * zoomFactor)) - this.viewer.containerTop, width * zoomFactor, height * zoomFactor);\n this.viewer.selectionContext.restore();\n }\n };\n /**\n * @private\n */\n Selection.prototype.clipSelection = function (page, pageTop) {\n var viewer = this.viewer;\n var width = page.boundingRectangle.width * viewer.zoomFactor;\n var height = page.boundingRectangle.height * viewer.zoomFactor;\n var left = page.boundingRectangle.x;\n viewer.selectionContext.beginPath();\n viewer.selectionContext.save();\n viewer.selectionContext.rect(left - viewer.containerLeft, pageTop - viewer.containerTop, width, height);\n viewer.selectionContext.clip();\n };\n /**\n * Add selection highlight\n * @private\n */\n Selection.prototype.addSelectionHighlight = function (canvasContext, widget, top) {\n if (this.selectedWidgets.containsKey(widget)) {\n var height = widget.height;\n var widgetInfo = this.selectedWidgets.get(widget);\n var width = this.viewer.render.getScaledValue(widgetInfo.width);\n var left = this.viewer.render.getScaledValue(widgetInfo.left, 1);\n var page = this.owner.selection.getPage(widget.paragraph);\n this.owner.selection.clipSelection(page, this.owner.selection.getPageTop(page));\n if (this.viewer.isComposingIME) {\n this.renderDashLine(canvasContext, page, widget, left, top, width, height);\n }\n else {\n height = this.viewer.render.getScaledValue(height);\n canvasContext.globalAlpha = 0.4;\n canvasContext.fillStyle = 'gray';\n canvasContext.fillRect(left, this.viewer.render.getScaledValue(top, 2), width, height);\n }\n canvasContext.restore();\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.renderDashLine = function (ctx, page, widget, left, top, width, height) {\n var fontColor = this.characterFormat.fontColor;\n var fillColor = fontColor ? this.viewer.render.getColor(fontColor) : '#000000';\n ctx.globalAlpha = 1;\n // Get character format copied from selection format\n var format = this.owner.editor.copyInsertFormat(new WCharacterFormat(), false);\n var heightInfo = this.viewer.textHelper.getHeight(format);\n var pageTop = this.getPageTop(page);\n var descent = heightInfo.Height - heightInfo.BaselineOffset;\n top = this.viewer.render.getUnderlineYPosition(widget) + top + 4 - descent;\n // tslint:disable-next-line:max-line-length\n this.viewer.render.renderDashLine(ctx, left, (pageTop - this.viewer.containerTop) + (top * this.viewer.zoomFactor), width, fillColor, true);\n };\n /**\n * Add Selection highlight inside table\n * @private\n */\n Selection.prototype.addSelectionHighlightTable = function (canvasContext, tableCellWidget) {\n if (this.selectedWidgets.containsKey(tableCellWidget)) {\n var selectionWidget = this.selectedWidgets.get(tableCellWidget);\n var left = this.viewer.render.getScaledValue(selectionWidget.left, 1);\n var top_1 = this.viewer.render.getScaledValue(tableCellWidget.y, 2);\n var width = this.viewer.render.getScaledValue(selectionWidget.width);\n var height = this.viewer.render.getScaledValue(tableCellWidget.height);\n canvasContext.fillStyle = 'gray';\n var page = this.owner.selection.getPage(tableCellWidget);\n this.owner.selection.clipSelection(page, this.owner.selection.getPageTop(page));\n canvasContext.fillRect(left, top_1, width, height);\n canvasContext.restore();\n }\n };\n /**\n * Remove Selection highlight\n * @private\n */\n Selection.prototype.removeSelectionHighlight = function (widget) {\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n var page = undefined;\n if (widget instanceof LineWidget) {\n var lineWidget = widget;\n var currentParaWidget = lineWidget.paragraph;\n page = !isNullOrUndefined(currentParaWidget) ?\n this.getPage((lineWidget.paragraph)) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = this.getTop(lineWidget);\n height = lineWidget.height;\n }\n else if (widget instanceof TableCellWidget) {\n page = !isNullOrUndefined(widget) ?\n this.getPage(widget) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = widget.y;\n height = widget.height;\n }\n if (isNullOrUndefined(page)) {\n return;\n }\n var widgetInfo = this.selectedWidgets.get(widget);\n width = widgetInfo.width;\n left = widgetInfo.left;\n var pageRect = page.boundingRectangle;\n var pageIndex = this.viewer.pages.indexOf(page);\n var pageGap = this.viewer.pageGap;\n var pageTop = (pageRect.y - pageGap * (pageIndex + 1)) * this.viewer.zoomFactor + pageGap * (pageIndex + 1);\n var pageLeft = pageRect.x;\n var zoomFactor = this.viewer.zoomFactor;\n if (this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.viewer.selectionCanvas.height) {\n // tslint:disable-next-line:max-line-length\n this.viewer.selectionContext.clearRect((pageLeft + (left * zoomFactor) - this.viewer.containerLeft) - 0.5, (pageTop + (top * zoomFactor)) - this.viewer.containerTop - 0.5, width * zoomFactor + 0.5, height * zoomFactor + 0.5);\n }\n };\n /**\n * Select Current word\n * @private\n */\n Selection.prototype.selectCurrentWord = function () {\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n this.selectCurrentWordRange(startPosition, endPosition, false);\n this.selectRange(startPosition, endPosition);\n };\n /**\n * Select current paragraph\n * @private\n */\n Selection.prototype.selectCurrentParagraph = function () {\n if (!isNullOrUndefined(this.start)) {\n this.start.paragraphStartInternal(this, false);\n this.end.moveToParagraphEndInternal(this, false);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select current word range\n * @private\n */\n Selection.prototype.selectCurrentWordRange = function (startPosition, endPosition, excludeSpace) {\n if (!isNullOrUndefined(startPosition)) {\n if (startPosition.offset > 0) {\n var wordStart = startPosition.clone();\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline) && inline instanceof FieldElementBox && inline.fieldType === 1) {\n // tslint:disable-next-line:max-line-length\n if (startPosition.offset > 2 && (!isNullOrUndefined(inline.fieldSeparator) || isNullOrUndefined(inline.fieldBegin))) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 2);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset - 1)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n else if (startPosition.offset > 3 && isNullOrUndefined(inline.fieldSeparator)) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 3);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n else {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 1);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n endPosition.moveToWordEndInternal(2, excludeSpace);\n }\n };\n /**\n * Extend selection to paragraph start\n * @private\n */\n Selection.prototype.extendToParagraphStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.paragraphStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to paragraph end\n * @private\n */\n Selection.prototype.extendToParagraphEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToParagraphEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to next text position\n * @private\n */\n Selection.prototype.moveNextPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.moveNextPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateForwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to next paragraph\n * @private\n */\n Selection.prototype.moveToNextParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextParagraphStartInternal();\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to previous text position\n * @private\n */\n Selection.prototype.movePreviousPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.movePreviousPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateBackwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to previous paragraph\n * @private\n */\n Selection.prototype.moveToPreviousParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousParagraph(this);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to previous line\n * @private\n */\n Selection.prototype.extendToPreviousLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousLine(this, this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to line end\n * @private\n */\n Selection.prototype.extendToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend to line start\n * @private\n */\n Selection.prototype.extendToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.moveUp = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.upDownSelectionLength = this.start.location.x;\n this.start.moveUp(this, this.upDownSelectionLength);\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.moveDown = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.start.moveDown(this, this.upDownSelectionLength);\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n Selection.prototype.updateForwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n }\n };\n Selection.prototype.updateBackwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlockInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstrow = table.childWidgets[0];\n if (firstrow.childWidgets.length > 0) {\n var firstcell = firstrow.childWidgets[0];\n if (firstcell.childWidgets.length === 0) {\n return undefined;\n }\n return firstcell.childWidgets[0];\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getFirstCellInRegion = function (row, startCell, selectionLength, isMovePrevious) {\n var cellStart = this.getCellLeft(row, startCell);\n var cellEnd = cellStart + startCell.cellFormat.cellWidth;\n var flag = true;\n if (cellStart <= selectionLength && selectionLength < cellEnd) {\n for (var k = 0; k < row.childWidgets.length; k++) {\n var left = this.getCellLeft(row, row.childWidgets[k]);\n if (HelperMethods.round(cellStart, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(cellEnd, 2)) {\n flag = false;\n return row.childWidgets[k];\n }\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cellLeft = this.getCellLeft(row, row.childWidgets[j]);\n if (cellLeft <= selectionLength && cellLeft +\n row.childWidgets[j].cellFormat.cellWidth > selectionLength) {\n flag = false;\n return row.childWidgets[j];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrevious) {\n var previousWidget = row.previousRenderedWidget;\n return this.getFirstCellInRegion(previousWidget, startCell, selectionLength, isMovePrevious);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrevious) {\n return this.getFirstCellInRegion(row.nextRenderedWidget, startCell, selectionLength, isMovePrevious);\n }\n }\n return row.childWidgets[0];\n };\n /**\n * @private\n */\n Selection.prototype.getFirstParagraph = function (tableCell) {\n while (tableCell.previousSplitWidget) {\n tableCell = tableCell.previousSplitWidget;\n }\n var firstBlock = tableCell.firstChild;\n return this.getFirstParagraphBlock(firstBlock);\n };\n /**\n * Get last block in last cell\n * @private\n */\n //Table\n Selection.prototype.getLastBlockInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastrow = table.childWidgets[table.childWidgets.length - 1];\n var lastcell = lastrow.childWidgets[lastrow.childWidgets.length - 1];\n return lastcell.childWidgets[lastcell.childWidgets.length - 1];\n }\n return undefined;\n };\n /**\n * Move to line start\n * @private\n */\n Selection.prototype.moveToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateBackwardSelection();\n this.start.moveToLineStartInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to line end\n * @private\n */\n Selection.prototype.moveToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateForwardSelection();\n this.start.moveToLineEndInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Get Page top\n * @private\n */\n Selection.prototype.getPageTop = function (page) {\n // tslint:disable-next-line:max-line-length\n return (page.boundingRectangle.y - this.viewer.pageGap * (this.viewer.pages.indexOf(page) + 1)) * this.viewer.zoomFactor + this.viewer.pageGap * (this.viewer.pages.indexOf(page) + 1);\n };\n /**\n * Move text position to cursor point\n * @private\n */\n Selection.prototype.moveTextPosition = function (cursorPoint, textPosition) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n //Updates the text position based on the cursor position.\n var widget = this.viewer.getLineWidgetInternal(cursorPoint, true);\n if (!isNullOrUndefined(widget)) {\n this.updateTextPositionWidget(widget, cursorPoint, textPosition, true);\n }\n this.upDownSelectionLength = textPosition.location.x;\n var selectionStartIndex = this.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.end.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n // Extends selection end to field begin or field end.\n if (TextPosition.isForwardSelection(selectionStartIndex, selectionEndIndex)) {\n textPosition.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n else {\n textPosition.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.fireSelectionChanged(true);\n };\n //Helper Method Implementation \n //Document\n /**\n * Get document start position\n * @private\n */\n Selection.prototype.getDocumentStart = function () {\n var textPosition = undefined;\n var block = this.viewer.pages[0].bodyWidgets[0].childWidgets[0];\n return this.setPositionForBlock(block, true);\n };\n /**\n * Get document end position\n * @private\n */\n Selection.prototype.getDocumentEnd = function () {\n var textPosition = undefined;\n var documentStart = this.owner.documentStart;\n var lastPage = this.viewer.pages[this.viewer.pages.length - 1];\n if (!isNullOrUndefined(documentStart) && lastPage.bodyWidgets[0].childWidgets.length > 0) {\n var block = undefined;\n var section = lastPage.bodyWidgets[0];\n var blocks = section.childWidgets;\n var lastBlkItem = blocks.length - 1;\n var lastBlock = blocks[lastBlkItem];\n if (lastBlock instanceof BlockWidget) {\n block = lastBlock;\n }\n textPosition = this.setPositionForBlock(block, false);\n }\n return textPosition;\n };\n //Keyboard shortcut internal API\n /**\n * @private\n * Handles control end key.\n */\n Selection.prototype.handleControlEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.owner.selection.selectContent(documentEnd, true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control home key.\n */\n Selection.prototype.handleControlHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.owner.selection.selectContent(documentStart, true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control left key.\n */\n Selection.prototype.handleControlLeftKey = function () {\n this.extendToWordStart(true);\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control right key.\n */\n Selection.prototype.handleControlRightKey = function () {\n this.extendToWordEnd(true);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control down key.\n * @private\n */\n Selection.prototype.handleControlDownKey = function () {\n this.moveToNextParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control up key.\n * @private\n */\n Selection.prototype.handleControlUpKey = function () {\n this.moveToPreviousParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles shift left key.\n */\n Selection.prototype.handleShiftLeftKey = function () {\n this.extendBackward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift up key.\n * @private\n */\n Selection.prototype.handleShiftUpKey = function () {\n this.extendToPreviousLine();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift right key.\n * @private\n */\n Selection.prototype.handleShiftRightKey = function () {\n this.extendForward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift down key.\n * @private\n */\n Selection.prototype.handleShiftDownKey = function () {\n this.extendToNextLine();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control shift left key.\n */\n Selection.prototype.handleControlShiftLeftKey = function () {\n this.extendToWordStart(false);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift up key.\n * @private\n */\n Selection.prototype.handleControlShiftUpKey = function () {\n this.extendToParagraphStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift right key\n * @private\n */\n Selection.prototype.handleControlShiftRightKey = function () {\n this.extendToWordEnd(false);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift down key.\n * @private\n */\n Selection.prototype.handleControlShiftDownKey = function () {\n this.extendToParagraphEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles left key.\n * @private\n */\n Selection.prototype.handleLeftKey = function () {\n this.movePreviousPosition();\n this.checkForCursorVisibility();\n };\n /**\n * Handles up key.\n * @private\n */\n Selection.prototype.handleUpKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveUp();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles right key.\n * @private\n */\n Selection.prototype.handleRightKey = function () {\n this.moveNextPosition();\n this.checkForCursorVisibility();\n };\n /**\n * Handles end key.\n * @private\n */\n Selection.prototype.handleEndKey = function () {\n this.moveToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles home key.\n * @private\n */\n Selection.prototype.handleHomeKey = function () {\n this.moveToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles down key.\n * @private\n */\n Selection.prototype.handleDownKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveDown();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift end key.\n * @private\n */\n Selection.prototype.handleShiftEndKey = function () {\n this.extendToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift home key.\n * @private\n */\n Selection.prototype.handleShiftHomeKey = function () {\n this.extendToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift end key.\n * @private\n */\n Selection.prototype.handleControlShiftEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.end.setPosition(documentEnd.currentWidget, false);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift home key.\n * @private\n */\n Selection.prototype.handleControlShiftHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.end.setPositionInternal(documentStart);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles tab key.\n * @param isNavigateInCell\n * @param isShiftTab\n * @private\n */\n Selection.prototype.handleTabKey = function (isNavigateInCell, isShiftTab) {\n var start = this.start;\n if (isNullOrUndefined(start)) {\n return;\n }\n if (start.paragraph.isInsideTable && this.end.paragraph.isInsideTable && (isNavigateInCell || isShiftTab)) {\n //Perform tab navigation\n if (isShiftTab) {\n this.selectPreviousCell();\n }\n else {\n this.selectNextCell();\n }\n }\n else if ((isNavigateInCell || isShiftTab) && !isNullOrUndefined(start) && start.offset === this.getStartOffset(start.paragraph)\n && !isNullOrUndefined(start.paragraph.paragraphFormat) && !isNullOrUndefined(start.paragraph.paragraphFormat.listFormat)\n && start.paragraph.paragraphFormat.listFormat.listId !== -1 && !this.owner.isReadOnlyMode) {\n this.owner.editorModule.updateListLevel(isShiftTab ? false : true);\n }\n else if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.handleTextInput('\\t');\n }\n this.checkForCursorVisibility();\n };\n Selection.prototype.selectPreviousCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.previousWidget)) {\n if (!isNullOrUndefined(tableRow.previousRenderedWidget)) {\n //Move text selection or cursor to previous row's last cell\n var prevRow = undefined;\n if (tableRow.previousRenderedWidget instanceof TableRowWidget) {\n prevRow = tableRow.previousRenderedWidget;\n }\n this.selectTableCellInternal(prevRow.childWidgets[prevRow.childWidgets.length - 1], true);\n }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var prevCell = undefined;\n if (tableCell.previousWidget instanceof TableCellWidget) {\n prevCell = tableCell.previousWidget;\n }\n this.selectTableCellInternal(prevCell, true);\n }\n };\n Selection.prototype.selectNextCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.nextWidget)) {\n if (isNullOrUndefined(tableRow.nextRenderedWidget) && !this.owner.isReadOnlyMode) {\n //Insert new row below \n this.owner.editorModule.insertRow(false);\n }\n else {\n //Move text selection or cursor to next row's first cell\n var nextRow = undefined;\n if (tableRow.nextRenderedWidget instanceof TableRowWidget) {\n nextRow = tableRow.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextRow.childWidgets[0], true);\n }\n // }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var nextCell = undefined;\n if (tableCell.nextRenderedWidget instanceof TableCellWidget) {\n nextCell = tableCell.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextCell, true);\n }\n };\n /**\n * Select given table cell\n * @private\n */\n Selection.prototype.selectTableCellInternal = function (tableCell, clearMultiSelection) {\n var firstParagraph = this.getFirstParagraph(tableCell);\n var lastParagraph = this.getLastParagraph(tableCell);\n if (firstParagraph === lastParagraph && lastParagraph.isEmpty()) {\n this.selectParagraph(lastParagraph, true);\n }\n else {\n var firstLineWidget = lastParagraph.childWidgets[0];\n this.start.setPosition(firstParagraph.childWidgets[0], true);\n this.end.setPositionParagraph(firstLineWidget, firstLineWidget.getEndOffset());\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select while table\n * @private\n */\n Selection.prototype.selectTableInternal = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.getTable(start, end))) {\n var containerCell = this.getContainerCellOf(start.paragraph.associatedCell, end.paragraph.associatedCell);\n var table = containerCell.ownerTable;\n var firstPara = this.getFirstParagraphBlock(table);\n var lastPara = this.getLastParagraphBlock(table);\n var offset = lastPara.lastChild.getEndOffset();\n this.start.setPosition(firstPara.childWidgets[0], true);\n this.end.setPositionParagraph(lastPara.lastChild, offset + 1);\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single column\n * @private\n */\n Selection.prototype.selectColumnInternal = function () {\n var startTextPos = this.start;\n var endTextPos = this.end;\n if (!this.isForward) {\n startTextPos = this.end;\n endTextPos = this.start;\n }\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(startTextPos) && !isNullOrUndefined(endTextPos) && !isNullOrUndefined(this.getTable(startTextPos, endTextPos))) {\n var containerCell = this.getContainerCellOf(startTextPos.paragraph.associatedCell, endTextPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endTextPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startTextPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endTextPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endTextPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var columnCells = containerCell.ownerTable.getColumnCellsForSelection(containerCell, containerCell);\n if (columnCells.length > 0) {\n var firstPara = this.getFirstParagraph(columnCells[0]);\n var lastPara = this.getLastParagraph(columnCells[columnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n else {\n var startCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(startCell, startCell);\n var endCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(endCell, endCell);\n if (startCellColumnCells.length > 0 && endCellColumnCells.length > 0) {\n var firstPara = this.getFirstParagraph(startCellColumnCells[0]);\n // tslint:disable-next-line:max-line-length\n var lastPara = this.getLastParagraph(endCellColumnCells[endCellColumnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single row\n * @private\n */\n Selection.prototype.selectTableRow = function () {\n var startPos = this.start;\n var endPos = this.end;\n if (!this.isForward) {\n startPos = this.end;\n endPos = this.start;\n }\n if (!isNullOrUndefined(startPos) && !isNullOrUndefined(endPos) && !isNullOrUndefined(this.getTable(startPos, endPos))) {\n var containerCell = void 0;\n containerCell = this.getContainerCellOf(startPos.paragraph.associatedCell, endPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var firstPara = this.getFirstParagraph(row.childWidgets[0]);\n var lastPara = this.getLastParagraph(row.childWidgets[row.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n var firstPara = this.getFirstParagraph(startCell.ownerRow.childWidgets[0]);\n var lastPara = void 0;\n // tslint:disable-next-line:max-line-length\n lastPara = this.getLastParagraph(endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single cell\n * @private\n */\n Selection.prototype.selectTableCell = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(this.getTable(start, end))) {\n return;\n }\n if (this.isEmpty) {\n if (start.paragraph.isInsideTable && !isNullOrUndefined(start.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(start.paragraph.associatedCell);\n var lastPara = this.getLastParagraph(end.paragraph.associatedCell);\n if (firstPara === lastPara) {\n this.start.setPosition(lastPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n else {\n var containerCell = this.getContainerCell(start.paragraph.associatedCell);\n // tslint:disable-next-line:max-line-length\n if (this.containsCell(containerCell, start.paragraph.associatedCell) && this.containsCell(containerCell, end.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(containerCell);\n var lastPara = this.getLastParagraph(containerCell);\n if (!isNullOrUndefined(firstPara) && !isNullOrUndefined(lastPara)) {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * @private\n * Selects the entire document.\n */\n Selection.prototype.selectAll = function () {\n var documentStart;\n var documentEnd;\n if (this.owner.enableHeaderAndFooter) {\n var headerFooter = this.getContainerWidget(this.start.paragraph);\n documentStart = this.setPositionForBlock(headerFooter.firstChild, true);\n documentEnd = this.setPositionForBlock(headerFooter.lastChild, false);\n }\n else {\n documentStart = this.owner.documentStart;\n documentEnd = this.owner.documentEnd;\n }\n //Selects the entire document. \n if (!isNullOrUndefined(documentStart)) {\n this.start.setPositionInternal(documentStart);\n this.end.setPositionParagraph(documentEnd.currentWidget, documentEnd.offset + 1);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Extend selection backward\n * @private\n */\n Selection.prototype.extendBackward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveBackward();\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extent selection forward\n * @private\n */\n Selection.prototype.extendForward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveForward();\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to word start and end\n * @private\n */\n Selection.prototype.extendToWordStartEnd = function () {\n if ((this.start.paragraph.isInsideTable || this.end.paragraph.isInsideTable)\n && (this.start.paragraph.associatedCell !== this.end.paragraph.associatedCell\n || this.isCellSelected(this.start.paragraph.associatedCell, this.start, this.end))) {\n return true;\n }\n return false;\n };\n /**\n * Extend selection to word start\n * @private\n */\n Selection.prototype.extendToWordStart = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelected = this.extendToWordStartEnd();\n if (isCellSelected) {\n this.end.moveToPreviousParagraphInTable(this);\n }\n else {\n this.end.moveToWordStartInternal(isNavigation ? 0 : 1);\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extent selection to word end\n * @private\n */\n Selection.prototype.extendToWordEnd = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelect = this.extendToWordStartEnd();\n if (isCellSelect) {\n this.end.moveToNextParagraphInTable();\n }\n else {\n this.end.moveToWordEndInternal(isNavigation ? 0 : 1, false);\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to next line\n * @private\n */\n Selection.prototype.extendToNextLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextLine(this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n //Selection Text get API\n //Selection add, Highlight, remove API enda\n Selection.prototype.getTextPosition = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(hierarchicalIndex);\n return textPosition;\n };\n /**\n * Get Selected text\n * @private\n */\n Selection.prototype.getText = function (includeObject) {\n if (isNullOrUndefined(this.start) || isNullOrUndefined(this.end)\n || isNullOrUndefined(this.start.paragraph) || isNullOrUndefined(this.end.paragraph)) {\n return undefined;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (startPosition.isAtSamePosition(endPosition)) {\n return '';\n }\n return this.getTextInternal(startPosition, endPosition, includeObject);\n };\n /**\n * Get selected text\n * @private\n */\n Selection.prototype.getTextInternal = function (start, end, includeObject) {\n if (start.isExistAfter(end)) {\n var temp = end;\n end = start;\n start = temp;\n }\n var startPosition = start;\n var endPosition = end;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n var startIndex = 0;\n var endIndex = 0;\n var startOffset = start.offset;\n var endOffset = end.offset;\n var startInlineObj = start.currentWidget.getInline(startOffset, startIndex);\n startIndex = startInlineObj.index;\n var inline = startInlineObj.element;\n // If the start position is at the beginning of field begin that has field end, then field code should be skipped.\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var elementInfo = this.getRenderedInline(inline, startIndex);\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n var endInlineObj = end.currentWidget.getInline(endOffset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n var text = '';\n // Retrieves the text from start inline.\n if (inline instanceof ImageElementBox && includeObject && startIndex === 0) {\n text = ElementBox.objectCharacter;\n }\n else if (inline instanceof TextElementBox) {\n // tslint:disable-next-line:max-line-length\n text = ((isNullOrUndefined(inline.text)) || (inline.text) === '') || inline.text.length < startIndex ? text : inline.text.substring(startIndex);\n }\n if (startPosition.paragraph === endPosition.paragraph) {\n if (inline instanceof ElementBox) {\n if (inline === endInline && inline instanceof TextElementBox) {\n text = text.length < endIndex - startIndex ? text : text.substring(0, endIndex - startIndex);\n }\n else if (inline.nextNode instanceof ElementBox) {\n // tslint:disable-next-line:max-line-length\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n else {\n if (inline instanceof ElementBox && inline.nextNode instanceof ElementBox) {\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, undefined, 0, includeObject);\n }\n else {\n // tslint:disable-next-line:max-line-length\n var nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(startPosition.paragraph);\n text = text + '\\r';\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endPosition.paragraph) {\n return text;\n }\n nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n // tslint:disable-next-line:max-line-length\n text = text + this.getTextInline(nextParagraphWidget.childWidgets[0].children[0], endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n // If the selection includes end paragraph mark.\n if (endOffset === (endPosition.currentWidget).getEndOffset() + 1) {\n text = text + '\\r';\n }\n return text;\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getListTextElementBox = function (paragarph) {\n if (isNullOrUndefined(paragarph)) {\n return undefined;\n }\n var listTextElement;\n if (!paragarph.isEmpty()) {\n var lineWidget = paragarph.childWidgets[0];\n if (lineWidget.children.length > 1) {\n if (lineWidget.children[0] instanceof ListTextElementBox) {\n listTextElement = lineWidget.children[0];\n }\n }\n }\n return listTextElement;\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getTextInline = function (inlineElement, endParagraphWidget, endInline, endIndex, includeObject) {\n var text = '';\n do {\n if (inlineElement === endInline) {\n if (inlineElement instanceof TextElementBox) {\n var span = inlineElement;\n if (!(isNullOrUndefined(span.text) || span.text === '')) {\n if (span.text.length < endIndex) {\n text = text + span.text;\n }\n else {\n text = text + span.text.substring(0, endIndex);\n }\n }\n // tslint:disable-next-line:max-line-length\n }\n else if (inlineElement instanceof ImageElementBox && includeObject && endIndex === inlineElement.length) {\n text = text + ElementBox.objectCharacter;\n }\n return text;\n }\n if (inlineElement instanceof TextElementBox) {\n text = text + inlineElement.text;\n }\n else if (inlineElement instanceof ImageElementBox && includeObject) {\n text = text + ElementBox.objectCharacter;\n }\n else if (inlineElement instanceof FieldElementBox && !isNullOrUndefined(inlineElement.fieldEnd)) {\n if (!isNullOrUndefined(inlineElement.fieldSeparator)) {\n inlineElement = inlineElement.fieldSeparator;\n }\n else {\n inlineElement = inlineElement.fieldEnd;\n }\n }\n if (isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n inlineElement = inlineElement.nextNode;\n } while (!isNullOrUndefined(inlineElement));\n if (endParagraphWidget === inlineElement.line.paragraph) {\n return text;\n }\n // tslint:disable-next-line:max-line-length\n var nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endParagraphWidget) {\n return text;\n }\n nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n var lineWidget = nextParagraphWidget.childWidgets[0];\n // tslint:disable-next-line:max-line-length\n text = text + '\\r' + this.getTextInline(lineWidget.children[0], endParagraphWidget, endInline, endIndex, includeObject);\n }\n return text;\n };\n /**\n * Returns field code.\n * @private\n * @param fieldBegin\n */\n Selection.prototype.getFieldCode = function (fieldBegin) {\n var fieldCode = '';\n if (!(fieldBegin.fieldEnd instanceof FieldElementBox)) {\n return fieldCode;\n }\n var paragraph = fieldBegin.paragraph;\n var endParagraph = fieldBegin.fieldEnd.paragraph;\n if (fieldBegin.fieldSeparator instanceof FieldElementBox) {\n endParagraph = fieldBegin.fieldSeparator.paragraph;\n }\n var startLineIndex = fieldBegin.line.indexInOwner;\n var startIndex = fieldBegin.indexInOwner;\n do {\n fieldCode += this.getFieldCodeInternal(paragraph, startLineIndex, startIndex);\n if (paragraph === endParagraph) {\n break;\n }\n paragraph = this.getNextParagraphBlock(paragraph);\n startLineIndex = 0;\n startIndex = 0;\n } while (paragraph instanceof ParagraphWidget);\n return fieldCode.trim();\n };\n Selection.prototype.getFieldCodeInternal = function (paragraph, startLineIndex, inlineIndex) {\n var fieldCode = '';\n for (var i = startLineIndex; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var i_1 = inlineIndex; i_1 < line.children.length; i_1++) {\n var element = line.children[i_1];\n if (element instanceof TextElementBox) {\n fieldCode += element.text;\n }\n if (element instanceof FieldElementBox\n && (element.fieldType === 2 || element.fieldType === 1)) {\n return fieldCode;\n }\n }\n inlineIndex = 0;\n }\n return fieldCode;\n };\n /**\n * @private\n */\n Selection.prototype.getTocFieldInternal = function () {\n var paragraph = this.start.paragraph;\n if (!this.isEmpty && !this.isForward) {\n paragraph = this.end.paragraph;\n }\n while (paragraph instanceof ParagraphWidget && paragraph.childWidgets.length > 0) {\n var line = paragraph.firstChild;\n if (line.children.length > 0) {\n var element = line.children[0];\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') === 0) {\n return element;\n }\n }\n paragraph = paragraph.previousRenderedWidget;\n }\n return undefined;\n };\n /**\n * Get next paragraph in bodyWidget\n * @private\n */\n Selection.prototype.getNextParagraph = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousParagraph = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var bodyWidget = section.previousRenderedWidget;\n var block = bodyWidget.childWidgets[bodyWidget.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get first paragraph in cell\n * @private\n */\n Selection.prototype.getFirstParagraphInCell = function (cell) {\n var firstBlock = cell.childWidgets[0];\n if (firstBlock instanceof ParagraphWidget) {\n return firstBlock;\n }\n else {\n return this.getFirstParagraphInFirstCell(firstBlock);\n }\n };\n /**\n * Get first paragraph in first cell\n * @private\n */\n Selection.prototype.getFirstParagraphInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstRow = table.childWidgets[0];\n var cell = firstRow.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in last cell\n * @private\n */\n Selection.prototype.getLastParagraphInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastrow = table.lastChild;\n var lastcell = lastrow.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get last paragraph in first row\n * @private\n */\n Selection.prototype.getLastParagraphInFirstRow = function (table) {\n if (table.childWidgets.length > 0) {\n var row = table.firstChild;\n var lastcell = row.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get Next start inline\n * @private\n */\n Selection.prototype.getNextStartInline = function (line, offset) {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * Get previous text inline\n * @private\n */\n Selection.prototype.getPreviousTextInline = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (inline.previousNode instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline.previousNode)) {\n if (inline.previousNode.fieldType === 0 || inline.previousNode.fieldType === 1) {\n return inline.previousNode;\n }\n return inline.previousNode.fieldBegin;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextInline((inline.previousNode));\n }\n return undefined;\n };\n /**\n * Get next text inline\n * @private\n */\n Selection.prototype.getNextTextInline = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (inline.nextNode instanceof FieldElementBox && (HelperMethods.isLinkedFieldCharacter(inline.nextNode))) {\n if (inline.nextNode.fieldType === 1 || inline.nextNode.fieldType === 0) {\n return inline.nextNode;\n }\n return inline.nextNode.fieldEnd;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextInline((inline.nextNode));\n }\n return undefined;\n };\n /**\n * Get container table\n * @private\n */\n Selection.prototype.getContainerTable = function (block) {\n if (block.isInsideTable) {\n if (block.associatedCell.ownerTable.isInsideTable) {\n block = this.getContainerTable(block.associatedCell.ownerTable);\n }\n else {\n block = block.associatedCell.ownerTable;\n }\n }\n if (block instanceof TableWidget) {\n return block;\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.isExistBefore = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) < cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex < cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n //Checks if current block exists before the block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistBefore(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistBefore(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex < cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n return this.isExistBefore(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistBefore(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistBefore(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistBefore(start, ownerTable);\n }\n else {\n {\n if (start.containerWidget === block.containerWidget) {\n return start.index <\n block.index;\n }\n if (start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget) {\n //Splitted blocks \n var startPage = this.viewer.pages.indexOf(start.containerWidget.page);\n var endPage = this.viewer.pages.indexOf(block.containerWidget.page);\n return startPage < endPage;\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isExistAfter = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n //Current paragraph in cell, paragraph in cell\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) > cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex > cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n //Checks if this block exists before block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistAfter(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistAfter(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex > cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n return this.isExistAfter(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistAfter(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistAfter(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistAfter(start, ownerTable);\n }\n else {\n if (start.containerWidget === block.containerWidget) {\n return start.index >\n block.index;\n }\n if (start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget) {\n //Splitted blocks \n var startPage = this.viewer.pages.indexOf(start.containerWidget.page);\n var endPage = this.viewer.pages.indexOf(block.containerWidget.page);\n return startPage > endPage;\n }\n // if (start.owner instanceof WHeaderFooter) {\n // return (start.owner as WHeaderFooter).childWidgets.indexOf(start) \n // > (block.owner as WHeaderFooter).childWidgets.indexOf(block);\n // } else if (start.section === block.section && start.section instanceof WSection) {\n // return (start.section as WSection).childWidgets.indexOf(start)\n // > (start.section as WSection).childWidgets.indexOf(block);\n // } else if (start.wordDocument instanceof WordDocument) {\n // tslint:disable-next-line:max-line-length\n // return (start.wordDocument as WordDocument).sections.indexOf(start.section as WSection) > (start.wordDocument as WordDocument).sections.indexOf(block.section as WSection);\n }\n return false;\n };\n /**\n * Return true if current inline in exist before inline\n * @private\n */\n Selection.prototype.isExistBeforeInline = function (currentInline, inline) {\n if (currentInline.line === inline.line) {\n return currentInline.line.children.indexOf(currentInline) <\n inline.line.children.indexOf(inline);\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n < inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) <\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) <\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistBefore(startParagraph, endParagraph);\n };\n /**\n * Return true id current inline is exist after inline\n * @private\n */\n Selection.prototype.isExistAfterInline = function (currentInline, inline) {\n if (currentInline.line === inline.line) {\n return currentInline.line.children.indexOf(currentInline) >\n inline.line.children.indexOf(inline);\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n > inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistAfter(startParagraph, endParagraph);\n };\n /**\n * Get next rendered block\n * @private\n */\n Selection.prototype.getNextRenderedBlock = function (block) {\n if (isNullOrUndefined(block.nextWidget)) {\n return block.nextRenderedWidget;\n }\n return block.nextWidget;\n };\n /**\n * Get next rendered block\n * @private\n */\n Selection.prototype.getPreviousRenderedBlock = function (block) {\n if (isNullOrUndefined(block.previousWidget)) {\n return block.previousRenderedWidget;\n }\n return block.previousWidget;\n };\n /**\n * Get Next paragraph in block\n * @private\n */\n Selection.prototype.getNextParagraphBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block.nextRenderedWidget);\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextParagraphCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n var bodyWidget = block.containerWidget;\n return this.getNextParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getFirstBlockInNextHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlockInNextHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var nextBlock;\n if (headerFooter.headerFooterType.indexOf('Header') !== -1) {\n nextBlock = headerFooter.page.footerWidget.firstChild;\n }\n else if (headerFooter.page.nextPage) {\n nextBlock = headerFooter.page.nextPage.headerWidget.firstChild;\n }\n else {\n return undefined;\n }\n if (nextBlock instanceof ParagraphWidget) {\n return nextBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(nextBlock);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getLastBlockInPreviousHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var previousBlock;\n if (headerFooter.headerFooterType.indexOf('Footer') !== -1) {\n previousBlock = headerFooter.page.headerWidget.lastChild;\n }\n else if (headerFooter.page.previousPage) {\n previousBlock = headerFooter.page.previousPage.footerWidget.lastChild;\n }\n else {\n return undefined;\n }\n if (previousBlock instanceof ParagraphWidget) {\n return previousBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(previousBlock);\n }\n };\n /**\n * Get previous paragraph in block\n * @private\n */\n Selection.prototype.getPreviousParagraphBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n return this.getLastParagraphInLastCell((block.previousRenderedWidget));\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousParagraphCell((block.containerWidget));\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getLastBlockInPreviousHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * Get first paragraph in block\n * @private\n */\n Selection.prototype.getFirstParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in block\n * @private\n */\n Selection.prototype.getLastParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getLastParagraphInLastCell(block);\n }\n return undefined;\n };\n /**\n * Return true if paragraph has valid inline\n * @private\n */\n Selection.prototype.hasValidInline = function (paragraph, start, end) {\n var index = paragraph.childWidgets.indexOf(start.line);\n for (var i = index; i < paragraph.childWidgets.length; i++) {\n for (var j = 0; j < paragraph.childWidgets[i].children.length; j++) {\n var inline = paragraph.childWidgets[i].children[j];\n if (inline.length === 0) {\n continue;\n }\n if (inline === end) {\n return false;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Get paragraph length\n * @private\n */\n Selection.prototype.getParagraphLength = function (paragraph, endLine, elementInfo) {\n var length = 0;\n for (var j = 0; j < paragraph.childWidgets.length; j++) {\n var line = paragraph.childWidgets[j];\n if (endLine instanceof LineWidget && endLine === line) {\n if (elementInfo) {\n length += this.getLineLength(line, elementInfo);\n }\n break;\n }\n length += this.getLineLength(line);\n }\n return length;\n };\n /**\n * Get Line length\n * @private\n */\n Selection.prototype.getLineLength = function (line, elementInfo) {\n var length = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (elementInfo && elementInfo.element instanceof ElementBox && elementInfo.element === element) {\n length += elementInfo.index;\n break;\n }\n length += element.length;\n }\n return length;\n };\n /**\n * Get line information\n * @private\n */\n Selection.prototype.getLineInfo = function (paragraph, offset) {\n var line = undefined;\n var length = 0;\n var childLength = paragraph.childWidgets.length;\n for (var j = 0; j < childLength; j++) {\n line = paragraph.childWidgets[j];\n length = this.getLineLength(line);\n if (offset <= length || j === childLength - 1) {\n break;\n }\n else {\n offset = offset - length;\n }\n }\n return { 'line': line, 'offset': offset };\n };\n /**\n * @private\n */\n Selection.prototype.getElementInfo = function (line, offset) {\n var index = 0;\n var element = undefined;\n for (var i = 0; i < line.children.length; i++) {\n element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (offset > element.length\n && (!(offset === element.length + 1 && isNullOrUndefined(element.nextNode)))) {\n offset = offset - element.length;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'index': offset };\n };\n /**\n * Get paragraph start offset\n * @private\n */\n Selection.prototype.getStartOffset = function (paragraph) {\n var startOffset = 0;\n if (paragraph.childWidgets.length > 0) {\n var childWidgets = paragraph.childWidgets[0];\n return this.getStartLineOffset(childWidgets);\n }\n return startOffset;\n };\n /**\n * @private\n */\n Selection.prototype.getStartLineOffset = function (line) {\n var startOffset = 0;\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return startOffset;\n }\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n startOffset += inline.length;\n }\n return startOffset;\n };\n /**\n * Get previous paragraph from selection\n * @private\n */\n Selection.prototype.getPreviousSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget)) {\n if (!this.isForward) {\n var block = cell.previousRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getFirstParagraphInLastRow(block);\n }\n }\n else {\n var widgets = cell.previousRenderedWidget.childWidgets;\n var block = widgets[widgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n // tslint:disable-next-line:max-line-length\n return this.getPreviousParagraphSelection(block.childWidgets[block.childWidgets.length - 1]);\n }\n }\n }\n return this.getPreviousSelectionRow(cell.ownerRow);\n };\n /**\n * Get previous paragraph selection in selection\n * @private\n */\n Selection.prototype.getPreviousSelectionRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n if (!this.isForward) {\n var cell = row.previousRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n else {\n return this.getPreviousParagraphSelection(row.previousRenderedWidget);\n }\n }\n return this.getPreviousSelectionBlock(row.ownerTable);\n };\n /**\n * @private\n */\n Selection.prototype.getNextSelectionBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n if (this.isEmpty || this.isForward) {\n return this.getLastParagraphInFirstRow(block.nextRenderedWidget);\n }\n else {\n return this.getNextParagraphSelection(block.nextRenderedWidget.childWidgets[0]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getNextSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get next paragraph from selected cell\n * @private\n */\n Selection.prototype.getNextSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.nextRenderedWidget)) {\n if (this.isEmpty || this.isForward) {\n // tslint:disable-next-line:max-line-length\n var block = cell.nextRenderedWidget.childWidgets[cell.nextRenderedWidget.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n else {\n //Return first paragraph in cell. \n var block = cell.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return this.getNextSelectionRow(cell.ownerRow);\n };\n /**\n * Get next paragraph in selection\n * @private\n */\n Selection.prototype.getNextSelectionRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var isForwardSelection = this.isEmpty || this.isForward;\n if (isForwardSelection) {\n // tslint:disable-next-line:max-line-length\n var cell = row.nextRenderedWidget.childWidgets[row.nextRenderedWidget.childWidgets.length - 1];\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n else {\n return this.getNextParagraphSelection(row.nextRenderedWidget);\n }\n }\n return this.getNextSelectionBlock(row.ownerTable);\n };\n /**\n * Get next block with selection\n * @private\n */\n Selection.prototype.getNextSelection = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (this.isEmpty || this.isForward) {\n return this.getLastParagraphInFirstRow(block);\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[0];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getFirstCellInRegion(row, startCell, this.upDownSelectionLength, false);\n }\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousSelectionBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n if (!this.isForward) {\n return this.getFirstParagraphInLastRow(block.previousRenderedWidget);\n }\n else {\n // tslint:disable-next-line:max-line-length\n return this.getPreviousParagraphSelection(block.previousRenderedWidget.childWidgets[block.previousRenderedWidget.childWidgets.length - 1]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get previous paragraph in selection\n * @private\n */\n Selection.prototype.getPreviousSelection = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var prevBodyWidget = section.previousRenderedWidget;\n var block = prevBodyWidget.childWidgets[prevBodyWidget.childWidgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (!this.isForward) {\n return this.getFirstParagraphInLastRow(block);\n }\n else {\n var tableWidget = block;\n // tslint:disable-next-line:max-line-length\n return this.getPreviousParagraphSelection(tableWidget.childWidgets[tableWidget.childWidgets.length - 1]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[row.childWidgets.length - 1];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getLastCellInRegion(row, startCell, this.upDownSelectionLength, true);\n }\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n };\n /**\n * Get last cell in the selected region\n * @private\n */\n Selection.prototype.getLastCellInRegion = function (row, startCell, selLength, isMovePrev) {\n var start = this.getCellLeft(row, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var flag = true;\n if (start <= selLength && selLength < end) {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n else {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (left <= selLength && left + row.childWidgets[i].cellFormat.cellWidth > selLength) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrev) {\n return this.getLastCellInRegion(row.previousRenderedWidget, startCell, selLength, isMovePrev);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrev) {\n return this.getLastCellInRegion(row.nextRenderedWidget, startCell, selLength, isMovePrev);\n }\n }\n return row.childWidgets[row.childWidgets.length - 1];\n };\n /**\n * Get Container table\n * @private\n */\n Selection.prototype.getCellInTable = function (table, tableCell) {\n while (tableCell.ownerTable.isInsideTable) {\n if (table.equals(tableCell.ownerTable)) {\n return tableCell;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return tableCell;\n };\n /**\n * Get first paragraph in last row\n * @private\n */\n Selection.prototype.getFirstParagraphInLastRow = function (table) {\n if (table.childWidgets.length > 0) {\n var lastRow = table.childWidgets[table.childWidgets.length - 1];\n var lastCell = lastRow.childWidgets[0];\n var lastBlock = lastCell.childWidgets[0];\n return this.getFirstParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get previous valid offset\n * @private\n */\n Selection.prototype.getPreviousValidOffset = function (paragraph, offset) {\n if (offset === 0) {\n return 0;\n }\n var validOffset = 0;\n var count = 0;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (inline.length === 0) {\n continue;\n }\n if (offset <= count + inline.length) {\n return offset - 1 === count ? validOffset : offset - 1;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n validOffset = count + inline.length;\n }\n count += inline.length;\n }\n }\n return offset - 1 === count ? validOffset : offset - 1;\n };\n /**\n * Get next valid offset\n * @private\n */\n Selection.prototype.getNextValidOffset = function (line, offset) {\n var count = 0;\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0 || inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset < count + inline.length) {\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return (offset > count ? offset : count) + 1;\n }\n }\n count += inline.length;\n }\n return offset;\n };\n /**\n * Get paragraph mark size info\n * @private\n */\n Selection.prototype.getParagraphMarkSize = function (paragraph, topMargin, bottomMargin) {\n var size = this.viewer.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var baselineOffset = size.BaselineOffset;\n var maxHeight = size.Height;\n var maxBaselineOffset = baselineOffset;\n if (paragraph instanceof ParagraphWidget) {\n // let paragraphWidget: ParagraphWidget[] = paragraph.renderedElement() as ParagraphWidget[];\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n }\n //Gets line spacing.\n var lineSpacing = this.viewer.layout.getLineSpacing(paragraph, maxHeight);\n var beforeSpacing = this.viewer.layout.getBeforeSpacing(paragraph);\n topMargin = maxBaselineOffset - baselineOffset;\n bottomMargin = maxHeight - maxBaselineOffset - (size.Height - baselineOffset);\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n else if (lineSpacing > topMargin + size.Height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += paragraph.paragraphFormat.afterSpacing;\n }\n return { 'width': size.Width, 'height': size.Height, 'topMargin': topMargin, 'bottomMargin': bottomMargin };\n };\n /**\n * @private\n */\n Selection.prototype.getPhysicalPositionInternal = function (line, offset, moveNextLine) {\n if (line.paragraph.isEmpty()) {\n var paragraphWidget = line.paragraph;\n var left = paragraphWidget.x;\n if (paragraphWidget.childWidgets.length > 0) {\n var lineWidget = paragraphWidget.childWidgets[0];\n left = this.getLeft(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(line.paragraph, topMargin, bottomMargin);\n if (offset > 0) {\n left += size.width;\n }\n return new Point(left, paragraphWidget.y + topMargin);\n }\n else {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline);\n var inline = inlineObj.element; //return indexInInline must\n indexInInline = inlineObj.index;\n // tslint:disable-next-line:max-line-length\n // if (inline.length === indexInInline && !isNullOrUndefined(inline.nextNode) && this.viewer.renderedElements.containsKey(inline) &&\n // this.viewer.renderedElements.get(inline).length > 0 && this.viewer.renderedElements.containsKey(inline.nextNode as WInline)\n // && this.viewer.renderedElements.get(inline.nextNode as WInline).length > 0 &&\n // tslint:disable-next-line:max-line-length\n // (this.viewer.renderedElements.get(inline)[this.viewer.renderedElements.get(inline).length - 1] as ElementBox).line !== (this.viewer.renderedElements.get(inline.nextNode as WInline)[0] as ElementBox).line) {\n // //Handled specifically to move the cursor at start of next line.\n // inline = inline.nextNode as WInline;\n // indexInInline = 0;\n // }\n return this.getPhysicalPositionInline(inline, indexInInline, moveNextLine);\n }\n };\n /**\n * Highlight selected content\n * @private\n */\n Selection.prototype.highlightSelectedContent = function (start, end) {\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || (!start.paragraph.associatedCell.equals(end.paragraph.associatedCell))\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.highlightCell(start.paragraph.associatedCell, this, start, end);\n }\n else {\n var inline = undefined;\n var index = 0;\n if (!this.owner.isReadOnlyMode && start.paragraph === end.paragraph) {\n if (start.offset + 1 === end.offset) {\n var inlineObj = end.currentWidget.getInline(end.offset, index);\n inline = inlineObj.element; // return index value\n index = inlineObj.index;\n if (inline instanceof ImageElementBox) {\n var startOffset = start.currentWidget.getOffset(inline, 0);\n if (startOffset !== start.offset) {\n inline = undefined;\n }\n }\n }\n else {\n var indexInInline = 0;\n var startInlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var startInline = startInlineObj.element; //return indexInInline\n indexInInline = startInlineObj.index;\n if (indexInInline === startInline.length) {\n startInline = this.getNextRenderedElementBox(startInline, indexInInline);\n }\n var endInlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n var endInline = endInlineObj.element; //return indexInInline\n indexInInline = endInlineObj.index;\n // tslint:disable-next-line:max-line-length\n if (startInline instanceof FieldElementBox && endInline instanceof FieldElementBox && !isNullOrUndefined(startInline.fieldSeparator)) {\n var fieldValue = startInline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n inline = fieldValue;\n }\n }\n }\n }\n if (!this.owner.isReadOnlyMode && inline instanceof ImageElementBox && this.owner.isDocumentLoaded) {\n var elementBoxObj = this.getElementBoxInternal(inline, index);\n var elementBox = elementBoxObj.element; //return index \n index = elementBoxObj.index;\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.positionImageResizer(elementBox);\n this.owner.imageResizerModule.showImageResizer();\n }\n if (this.viewer.isTouchInput) {\n this.viewer.touchStart.style.display = 'none';\n this.viewer.touchEnd.style.display = 'none';\n }\n }\n else {\n this.highlight(start.paragraph, start, end);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlight = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = undefined;\n var endElement = undefined;\n var startLineWidget = undefined;\n var endLineWidget = undefined;\n //return start Element and selection start index\n var startLineObj = this.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n startElement = startLineObj.element;\n if (isNullOrUndefined(startElement)) {\n startLineWidget = paragraph.childWidgets[0];\n }\n else {\n startLineWidget = startElement.line;\n }\n selectionStartIndex = startLineObj.index;\n var endLineObj = this.getEndLineWidget(end, endElement, selectionEndIndex);\n endElement = endLineObj.element;\n if (endElement) {\n endLineWidget = endElement.line;\n }\n else {\n endLineWidget = end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n }\n selectionEndIndex = endLineObj.index;\n var top = 0;\n var left = 0;\n if (!isNullOrUndefined(startLineWidget)) {\n top = this.getTop(startLineWidget);\n left = this.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n }\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //Selection ends in current line.\n var right = this.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n this.createHighlightBorder(startLineWidget, right - left, left, top);\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n var x = startLineWidget.paragraph.x;\n this.createHighlightBorder(startLineWidget, this.getWidth(startLineWidget, true) - (left - x), left, top);\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or selection end. \n this.highlightParagraph(paragraph, lineIndex + 1, endLineWidget, endElement, selectionEndIndex);\n if (paragraph.childWidgets.indexOf(end.currentWidget) !== -1) {\n return;\n }\n }\n this.highlightNextBlock(paragraph, start, end);\n }\n };\n Selection.prototype.highlightNextBlock = function (paragraph, start, end) {\n var block = paragraph.nextRenderedWidget;\n if (!isNullOrUndefined(block)) {\n if (block instanceof ParagraphWidget) {\n this.highlight(block, start, end);\n }\n else {\n this.highlightTable(block, start, end);\n }\n }\n };\n /**\n * Get start line widget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getStartLineWidget = function (paragraph, start, startElement, selectionStartIndex) {\n var offset = paragraph === start.paragraph ? start.offset : this.getStartOffset(paragraph);\n var startInlineObj = undefined;\n if (paragraph === start.paragraph) {\n startInlineObj = start.currentWidget.getInline(offset, selectionStartIndex);\n }\n else {\n startInlineObj = paragraph.firstChild.getInline(offset, selectionStartIndex);\n }\n startElement = startInlineObj.element; //return selectionStartIndex\n selectionStartIndex = startInlineObj.index;\n if (startElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(startElement, selectionStartIndex);\n startElement = inlineInfo.element;\n selectionStartIndex = inlineInfo.index;\n }\n if (offset === this.getParagraphLength(start.paragraph) + 1) {\n selectionStartIndex++;\n }\n return {\n 'index': selectionStartIndex, 'element': startElement\n };\n };\n /**\n * Get end line widget\n * @private\n */\n Selection.prototype.getEndLineWidget = function (end, endElement, selectionEndIndex) {\n var endInlineObj = end.currentWidget.getInline(end.offset, selectionEndIndex);\n endElement = endInlineObj.element; //return selection end index\n selectionEndIndex = endInlineObj.index;\n if (endElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(endElement, selectionEndIndex);\n endElement = inlineInfo.element;\n selectionEndIndex = inlineInfo.index;\n }\n var lineIndex = end.paragraph.childWidgets.indexOf(end.currentWidget);\n if (lineIndex === end.paragraph.childWidgets.length - 1 && end.offset === this.getLineLength(end.currentWidget) + 1) {\n selectionEndIndex = endElement ? endElement.length + 1 : 1;\n }\n return { 'index': selectionEndIndex, 'element': endElement };\n };\n /**\n * Get line widget\n * @private\n */\n Selection.prototype.getLineWidgetInternal = function (line, offset, moveToNextLine) {\n var lineWidget = undefined;\n if (line.children.length === 0 && line instanceof LineWidget) {\n lineWidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n lineWidget = inline instanceof ElementBox ? inline.line\n : this.getLineWidgetInternalInline(inline, indexInInline, moveToNextLine);\n }\n return lineWidget;\n };\n /**\n * Get last line widget\n * @private\n */\n Selection.prototype.getLineWidgetParagraph = function (offset, line) {\n var linewidget = undefined;\n if (line.children.length === 0) {\n linewidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n linewidget = this.getLineWidget(inline, indexInInline);\n }\n return linewidget;\n };\n /**\n * Highlight selected cell\n * @private\n */\n /* tslint:disable */\n // tslint:disable-next-line:max-line-length \n Selection.prototype.highlightCells = function (table, startCell, endCell) {\n var start = this.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > this.upDownSelectionLength) {\n start = this.upDownSelectionLength;\n }\n if (end < this.upDownSelectionLength) {\n end = this.upDownSelectionLength;\n }\n var tableWidgetCollection = table.getSplitWidgets();\n var startTableIndex = tableWidgetCollection.indexOf(startCell.ownerRow.ownerTable);\n var endTableIndex = tableWidgetCollection.indexOf(endCell.ownerRow.ownerTable);\n if (startTableIndex === endTableIndex) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n this.highlightRow(table.childWidgets[i], start, end);\n }\n }\n else {\n var startRowIndex = 0;\n var endRowIndex = 0;\n for (var i = startTableIndex; i <= endTableIndex; i++) {\n table = tableWidgetCollection[i];\n if (i === startTableIndex) {\n startRowIndex = table.childWidgets.indexOf(startCell.ownerRow);\n }\n else {\n startRowIndex = 0;\n }\n if (i === endTableIndex) {\n endRowIndex = table.childWidgets.indexOf(endCell.ownerRow);\n }\n else {\n endRowIndex = table.childWidgets.length - 1;\n }\n for (var j = startRowIndex; j <= endRowIndex; j++) {\n this.highlightRow(table.childWidgets[j], start, end);\n }\n }\n }\n };\n /* tslint:enable */\n /**\n * highlight selected table\n * @private\n */\n Selection.prototype.highlightTable = function (table, start, end) {\n this.highlightInternal(table.childWidgets[0], start, end);\n if (!end.paragraph.isInsideTable //Selection end is outside the table cell.\n || !table.contains(end.paragraph.associatedCell)) { //Selection end is not inside the current table.\n this.highlightNextBlock(table, start, end);\n }\n };\n /**\n * Get cell left\n * @private\n */\n Selection.prototype.getCellLeft = function (row, cell) {\n var left = 0;\n left += cell.x - cell.margin.left;\n return left;\n };\n /**\n * Get next paragraph for row\n * @private\n */\n Selection.prototype.getNextParagraphRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var cell = row.nextRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return this.getNextParagraphBlock(row.ownerTable);\n };\n /**\n * Get previous paragraph from row\n * @private\n */\n Selection.prototype.getPreviousParagraphRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n // tslint:disable-next-line:max-line-length\n var cell = row.previousRenderedWidget.lastChild;\n var block = cell.lastChild ? cell.lastChild : (cell.previousSplitWidget).lastChild;\n return this.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphBlock(row.ownerTable);\n };\n /**\n * Return true if row contain cell\n * @private\n */\n Selection.prototype.containsRow = function (row, tableCell) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return row.childWidgets.indexOf(tableCell) !== -1;\n };\n /**\n * Highlight selected row\n * @private\n */\n Selection.prototype.highlightRow = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.highlightInternal = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n else if (row.nextRenderedWidget instanceof TableRowWidget) {\n this.highlightInternal(row.nextRenderedWidget, start, end);\n }\n };\n /**\n * Get last paragraph in cell\n * @private\n */\n Selection.prototype.getLastParagraph = function (cell) {\n while (cell.nextSplitWidget) {\n if (cell.nextSplitWidget.childWidgets.length > 0) {\n cell = cell.nextSplitWidget;\n }\n else {\n break;\n }\n }\n var lastBlock;\n if (cell.childWidgets.length > 0) {\n lastBlock = cell.lastChild;\n }\n else {\n lastBlock = cell.previousSplitWidget.lastChild;\n }\n return this.getLastParagraphBlock(lastBlock);\n };\n /**\n * Return true is source cell contain cell\n * @private\n */\n Selection.prototype.containsCell = function (sourceCell, cell) {\n if (sourceCell.equals(cell)) {\n return true;\n }\n while (cell.ownerTable.isInsideTable) {\n if (sourceCell.equals(cell.ownerTable.associatedCell)) {\n return true;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return false;\n };\n /**\n * Return true if cell is selected\n * @private\n */\n Selection.prototype.isCellSelected = function (cell, startPosition, endPosition) {\n var lastParagraph = this.getLastParagraph(cell);\n // tslint:disable-next-line:max-line-length\n var isAtCellEnd = lastParagraph === endPosition.paragraph && endPosition.offset === this.getParagraphLength(lastParagraph) + 1;\n return isAtCellEnd || (!this.containsCell(cell, startPosition.paragraph.associatedCell) ||\n !this.containsCell(cell, endPosition.paragraph.associatedCell));\n };\n /**\n * Return Container cell\n * @private\n */\n Selection.prototype.getContainerCellOf = function (cell, tableCell) {\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.contains(tableCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Get Selected cell\n * @private\n */\n Selection.prototype.getSelectedCell = function (cell, containerCell) {\n if (cell.ownerTable.equals(containerCell.ownerTable)) {\n return cell;\n }\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.associatedCell.equals(containerCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * @private\n */\n Selection.prototype.getSelectedCells = function () {\n var cells = [];\n for (var i = 0; i < this.selectedWidgets.keys.length; i++) {\n var widget = this.selectedWidgets.keys[i];\n if (widget instanceof TableCellWidget) {\n cells.push(widget);\n }\n }\n return cells;\n };\n /**\n * Get Next paragraph from cell\n * @private\n */\n Selection.prototype.getNextParagraphCell = function (cell) {\n if (cell.nextRenderedWidget && cell.nextRenderedWidget instanceof TableCellWidget) {\n //Return first paragraph in cell. \n cell = cell.nextRenderedWidget;\n var block = cell.firstChild;\n if (block) {\n return this.getFirstParagraphBlock(block);\n }\n else {\n return this.getNextParagraphCell(cell);\n }\n }\n return this.getNextParagraphRow(cell.containerWidget);\n };\n /**\n * Get previous paragraph from cell\n * @private\n */\n Selection.prototype.getPreviousParagraphCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget) && cell.previousRenderedWidget instanceof TableCellWidget) {\n cell = cell.previousRenderedWidget;\n var block = cell.lastChild;\n return this.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphRow(cell.ownerRow);\n };\n /**\n * Get cell's container cell\n * @private\n */\n Selection.prototype.getContainerCell = function (cell) {\n while (!isNullOrUndefined(cell.ownerTable) && cell.ownerTable.isInsideTable) {\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Highlight selected cell\n * @private\n */\n /* tslint:disable */\n Selection.prototype.highlightCell = function (cell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n /* tslint:enable */\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.highlightCellWidget(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.highlight(start.paragraph, start, end);\n }\n else {\n this.highlightContainer(startCell, start, end);\n }\n }\n }\n else {\n //Selection end is not in container cell.\n this.highlightCellWidget(containerCell);\n if (containerCell.ownerRow.equals(endCell.ownerRow)) {\n //Highlight other selected cells in current row.\n startCell = containerCell;\n while (!isNullOrUndefined(startCell.nextRenderedWidget)) {\n startCell = startCell.nextRenderedWidget;\n this.highlightCellWidget(startCell);\n if (startCell === endCell) {\n break;\n }\n }\n }\n else {\n this.highlightCells(containerCell.ownerTable, containerCell, endCell);\n }\n }\n }\n else {\n this.highlightContainer(containerCell, start, end);\n }\n }\n else {\n var cell1 = this.getContainerCell(cell);\n this.highlightContainer(cell1, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlightContainer = function (cell, start, end) {\n this.highlightInternal(cell.containerWidget, start, end);\n this.highlightNextBlock(cell.ownerTable, start, end);\n };\n /**\n * Get previous valid element\n * @private\n */\n Selection.prototype.getPreviousValidElement = function (inline) {\n var previousValidInline = undefined;\n while (inline instanceof FieldElementBox) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n previousValidInline = inline;\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n previousValidInline = inline;\n if (isNullOrUndefined(inline.fieldSeparator)) {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n else {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n inline = inline.previousNode;\n }\n return isNullOrUndefined(previousValidInline) ? inline : previousValidInline;\n };\n /**\n * Get next valid element\n * @private\n */\n Selection.prototype.getNextValidElement = function (inline) {\n var nextValidInline = undefined;\n while (inline instanceof FieldElementBox) {\n if (inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n return isNullOrUndefined(nextValidInline) ? inline : nextValidInline;\n }\n else if (inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n nextValidInline = inline;\n }\n inline = inline.nextNode;\n }\n return (isNullOrUndefined(nextValidInline) ? inline : nextValidInline);\n };\n /**\n * Return next valid inline with index\n * @private\n */\n Selection.prototype.validateTextPosition = function (inline, index) {\n if (inline.length === index && inline.nextNode instanceof FieldElementBox) {\n //If inline is last item within field, then set field end as text position.\n var nextInline = this.getNextValidElement(inline.nextNode);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 1) {\n inline = nextInline;\n index = 1;\n }\n }\n else if (index === 0 && inline.previousNode instanceof FieldElementBox) {\n var prevInline = this.getPreviousValidElement(inline.previousNode);\n inline = prevInline;\n index = inline instanceof FieldElementBox ? 0 : inline.length;\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n index++;\n }\n }\n return { 'element': inline, 'index': index };\n };\n /**\n * Get inline physical location\n * @private\n */\n Selection.prototype.getPhysicalPositionInline = function (inline, index, moveNextLine) {\n var element = undefined;\n element = this.getElementBox(inline, index, moveNextLine).element;\n var lineWidget = undefined;\n if (isNullOrUndefined(element) || isNullOrUndefined(element.line)) {\n if (inline instanceof FieldElementBox || inline instanceof BookmarkElementBox) {\n return this.getFieldCharacterPosition(inline);\n }\n return new Point(0, 0);\n }\n var margin = element.margin;\n var top = 0;\n var left = 0;\n if (element instanceof TextElementBox && element.text === '\\v' && isNullOrUndefined(inline.nextNode)) {\n lineWidget = this.getNextLineWidget(element.line.paragraph, element);\n index = 0;\n }\n else {\n lineWidget = element.line;\n }\n top = this.getTop(lineWidget);\n if (element instanceof ImageElementBox) {\n var format = element.line.paragraph.characterFormat;\n var previousInline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n format = previousInline.characterFormat;\n }\n else {\n var nextInline = this.getNextTextElement(inline);\n if (!isNullOrUndefined(nextInline)) {\n format = nextInline.characterFormat;\n }\n }\n var measureObj = this.viewer.textHelper.getHeight(format);\n if (element.margin.top + element.height - measureObj.BaselineOffset > 0) {\n top += element.margin.top + element.height - measureObj.BaselineOffset;\n }\n }\n else if (!(element instanceof FieldElementBox)) {\n top += margin.top > 0 ? margin.top : 0;\n }\n left = (isNullOrUndefined(element) || isNullOrUndefined(lineWidget)) ? 0 : this.getLeftInternal(lineWidget, element, index);\n return new Point(left, top);\n };\n /**\n * Get field character position\n * @private\n */\n Selection.prototype.getFieldCharacterPosition = function (firstInline) {\n var nextValidInline = this.getNextValidElementForField(firstInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = firstInline.line.paragraph;\n return this.getEndPosition(nextParagraph);\n }\n else {\n return this.getPhysicalPositionInline(nextValidInline, 0, true);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getNextValidElementForField = function (firstInline) {\n if (firstInline instanceof FieldElementBox && firstInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(firstInline)) {\n var fieldBegin = firstInline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n firstInline = fieldBegin.fieldEnd;\n }\n else {\n firstInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(firstInline.nextNode)) {\n nextValidInline = this.getNextValidElement(firstInline.nextNode);\n }\n return nextValidInline;\n };\n /**\n * Get paragraph end position\n * @private\n */\n Selection.prototype.getEndPosition = function (widget) {\n var left = widget.x;\n var top = widget.y;\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n left += this.getWidth(lineWidget, false);\n }\n if (!isNullOrUndefined(lineWidget)) {\n top = this.getTop(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget, topMargin, bottomMargin);\n return new Point(left, top + size.topMargin);\n };\n /**\n * Get element box\n * @private\n */\n Selection.prototype.getElementBox = function (currentInline, index, moveToNextLine) {\n var elementBox = undefined;\n if (!(currentInline instanceof FieldElementBox || currentInline instanceof BookmarkElementBox)) {\n elementBox = currentInline;\n }\n return { 'element': elementBox, 'index': index };\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousTextElement = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextElement(inline.previousNode);\n }\n return undefined;\n };\n /**\n * Get next text inline\n * @private\n */\n Selection.prototype.getNextTextElement = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextElement(inline.nextNode);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextRenderedElementBox = function (inline, indexInInline) {\n if (inline instanceof FieldElementBox) {\n var fieldBegin = inline;\n if (fieldBegin.fieldType === 0) {\n inline = this.getRenderedField(fieldBegin);\n if (fieldBegin === inline) {\n return fieldBegin;\n }\n }\n indexInInline = 1;\n }\n while (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement((inline.nextNode));\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n var fieldBegin = nextValidInline;\n inline = this.getRenderedField(fieldBegin);\n if (!isNullOrUndefined(inline) && fieldBegin === inline) {\n return fieldBegin;\n }\n indexInInline = 1;\n }\n else {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * @private\n */\n Selection.prototype.getElementBoxInternal = function (inline, index) {\n var element = undefined;\n element = inline;\n return {\n 'element': element, 'index': index\n };\n };\n /**\n * Get Line widget\n * @private\n */\n Selection.prototype.getLineWidget = function (inline, index) {\n return this.getLineWidgetInternalInline(inline, index, true);\n };\n /**\n * @private\n */\n Selection.prototype.getLineWidgetInternalInline = function (inline, index, moveToNextLine) {\n var elementObj = this.getElementBox(inline, index, moveToNextLine);\n var element = elementObj.element; //return index\n index = elementObj.index;\n if (!isNullOrUndefined(element)) {\n if (moveToNextLine && element instanceof TextElementBox && element.text === '\\v' && index === 1) {\n return this.getNextLineWidget(element.line.paragraph, element);\n }\n else {\n return element.line;\n }\n }\n var startInline = inline;\n //ToDo: Check previous inline here.\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var lineWidget = undefined;\n var widget = startInline.line.paragraph;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n }\n return lineWidget;\n }\n else {\n return this.getLineWidget(nextValidInline, 0);\n }\n };\n /**\n * Get next line widget\n * @private\n */\n Selection.prototype.getNextLineWidget = function (paragraph, element) {\n var lineWidget = undefined;\n var widget = paragraph;\n if (widget.childWidgets.length > 0) {\n var widgetIndex = widget.childWidgets.indexOf(element.line);\n if (widgetIndex === widget.childWidgets.length - 1) {\n widget = paragraph;\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widgetIndex = -1;\n }\n else if (widgetIndex > widget.childWidgets.length - 1) {\n widget = this.getNextParagraphBlock(paragraph);\n widgetIndex = -1;\n }\n else if (widgetIndex < 0) {\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widget = paragraph;\n widgetIndex = widget.childWidgets.indexOf(element.line);\n }\n lineWidget = widget.childWidgets[widgetIndex + 1];\n }\n return lineWidget;\n };\n /**\n * Get Caret height\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getCaretHeight = function (inline, index, format, isEmptySelection, topMargin, isItalic) {\n var elementBoxInfo = this.getElementBox(inline, index, false);\n var element = elementBoxInfo.element;\n var currentInline = inline;\n if (isNullOrUndefined(element)) {\n if (currentInline instanceof FieldElementBox) {\n return this.getFieldCharacterHeight(currentInline, format, isEmptySelection, topMargin, isItalic);\n }\n return { 'height': this.viewer.textHelper.getHeight(format).Height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var margin = element.margin;\n var heightElement = element.height;\n var maxLineHeight = 0;\n if (element instanceof ImageElementBox) {\n var previousInline = this.getPreviousTextElement(inline);\n var nextInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n var top_2 = 0;\n var bottom = 0;\n var paragarph = inline.line.paragraph;\n var sizeInfo = this.getParagraphMarkSize(paragarph, top_2, bottom);\n top_2 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n maxLineHeight = sizeInfo.height;\n isItalic = paragarph.characterFormat.italic;\n if (!isEmptySelection) {\n maxLineHeight += paragarph.paragraphFormat.afterSpacing;\n }\n }\n else if (isNullOrUndefined(previousInline)) {\n isItalic = nextInline.characterFormat.italic;\n return this.getCaretHeight(nextInline, 0, nextInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n else {\n if (!isNullOrUndefined(nextInline) && element instanceof ImageElementBox) {\n //Calculates the caret size using image character format.\n var textSizeInfo = this.viewer.textHelper.getHeight(element.characterFormat);\n var charHeight = textSizeInfo.Height;\n var baselineOffset = textSizeInfo.BaselineOffset;\n // tslint:disable-next-line:max-line-length\n maxLineHeight = (element.margin.top < 0 && baselineOffset > element.margin.top + element.height) ? element.margin.top + element.height + charHeight - baselineOffset : charHeight;\n if (!isEmptySelection) {\n maxLineHeight += element.margin.bottom;\n }\n }\n else {\n isItalic = previousInline.characterFormat.italic;\n // tslint:disable-next-line:max-line-length\n return this.getCaretHeight(previousInline, previousInline.length, previousInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n }\n }\n else {\n var baselineAlignment = format.baselineAlignment;\n var elementHeight = heightElement;\n if (baselineAlignment !== 'Normal' && isEmptySelection) {\n //Set the caret height as sub/super script text height and updates the top margin for sub script text.\n elementHeight = elementHeight / 1.5;\n if (baselineAlignment === 'Subscript') {\n topMargin = heightElement - elementHeight;\n }\n }\n maxLineHeight = (margin.top < 0 ? margin.top : 0) + elementHeight;\n if (!isEmptySelection) {\n maxLineHeight += margin.bottom;\n }\n }\n if (!isEmptySelection) {\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var height = this.viewer.textHelper.getHeight(format).Height;\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n };\n /**\n * Get field characters height\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getFieldCharacterHeight = function (startInline, format, isEmptySelection, topMargin, isItalic) {\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = startInline.line.paragraph;\n var height = this.viewer.textHelper.getParagraphMarkSize(format).Height;\n var top_3 = 0;\n var bottom = 0;\n var sizeInfo = this.getParagraphMarkSize(nextParagraph, top_3, bottom);\n var maxLineHeight = sizeInfo.height;\n top_3 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n if (!isEmptySelection) {\n maxLineHeight += bottom;\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n else {\n return this.getCaretHeight(nextValidInline, 0, format, isEmptySelection, topMargin, isItalic);\n }\n };\n /**\n * Get rendered inline\n * @private\n */\n //FieldCharacter\n Selection.prototype.getRenderedInline = function (inline, inlineIndex) {\n var prevInline = this.getPreviousValidElement(inline);\n while (prevInline instanceof FieldElementBox) {\n prevInline = this.getPreviousTextElement(prevInline);\n if (prevInline instanceof FieldElementBox) {\n prevInline = prevInline.previousNode;\n }\n }\n if (!isNullOrUndefined(prevInline)) {\n inlineIndex = prevInline.length;\n return { 'element': prevInline, 'index': inlineIndex };\n }\n inlineIndex = 0;\n var nextInline = this.getNextRenderedElementBox(inline, 0);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n nextInline = nextInline.fieldSeparator;\n nextInline = nextInline.nextNode;\n while (nextInline instanceof FieldElementBox) {\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(nextInline)) {\n if (isNullOrUndefined(nextInline.fieldSeparator)) {\n nextInline = nextInline.fieldEnd;\n }\n else {\n nextInline = nextInline.fieldSeparator;\n }\n }\n nextInline = nextInline.nextNode;\n }\n }\n return { 'element': nextInline, 'index': inlineIndex };\n };\n //Field Begin\n /**\n * Get rendered field\n * @private\n */\n Selection.prototype.getRenderedField = function (fieldBegin) {\n var inline = fieldBegin;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n return inline;\n }\n }\n return inline;\n };\n /**\n * Return true is inline is tha last inline\n * @private\n */\n Selection.prototype.isLastRenderedInline = function (inline, index) {\n while (index === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n index = 0;\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n index = 1;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n index = 1;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n break;\n }\n }\n }\n }\n return index === inline.length && isNullOrUndefined(inline.nextNode);\n };\n /**\n * Get page\n * @private\n */\n Selection.prototype.getPage = function (widget) {\n var page = undefined;\n if (widget.containerWidget instanceof BlockContainer) {\n var bodyWidget = widget.containerWidget;\n page = widget.containerWidget.page;\n }\n else if (!isNullOrUndefined(widget.containerWidget)) {\n page = this.getPage(widget.containerWidget);\n }\n return page;\n };\n /**\n * Clear Selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlightInSelectedWidgets = function () {\n var isNonEmptySelection = false;\n var widgets = this.selectedWidgets.keys;\n for (var i = 0; i < widgets.length; i++) {\n this.removeSelectionHighlight(widgets[i]);\n isNonEmptySelection = true;\n }\n this.selectedWidgets.clear();\n return isNonEmptySelection;\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearChildSelectionHighlight = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i] instanceof LineWidget) {\n this.clearSelectionHighlightLineWidget(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof TableCellWidget) {\n this.clearSelectionHighlight(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof Widget) {\n this.clearChildSelectionHighlight(widget.childWidgets[i]);\n }\n }\n };\n /**\n * Get line widget from paragraph widget\n * @private\n */\n //Body Widget\n Selection.prototype.getLineWidgetBodyWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof Widget && childWidget.y <= point.y\n && (childWidget.y + childWidget.height) >= point.y) {\n if (childWidget instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(childWidget, point);\n }\n else {\n return this.getLineWidgetTableWidget(childWidget, point);\n }\n }\n }\n var line = undefined;\n if (widget.childWidgets.length > 0) {\n var firstChild = widget.childWidgets[0];\n if (firstChild instanceof Widget && firstChild.y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n // tslint:disable-next-line:max-line-length\n line = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n // tslint:disable-next-line:max-line-length\n line = this.getLineWidgetTableWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n }\n else {\n var childWidget = undefined;\n if (firstChild instanceof Widget) {\n childWidget = firstChild;\n }\n if (!isNullOrUndefined(childWidget)) {\n if (childWidget instanceof ParagraphWidget) {\n line = this.getLineWidgetParaWidget(firstChild, point);\n }\n else {\n line = this.getLineWidgetTableWidget(firstChild, point);\n }\n }\n }\n }\n return line;\n };\n //ParagraphWidget\n /**\n * Get line widget from paragraph widget\n * @private\n */\n Selection.prototype.getLineWidgetParaWidget = function (widget, point) {\n var childWidgets = widget.childWidgets;\n var top = widget.y;\n for (var i = 0; i < childWidgets.length; i++) {\n if (top <= point.y\n && (top + childWidgets[i].height) >= point.y) {\n return childWidgets[i];\n }\n top += childWidgets[i].height;\n }\n var lineWidget = undefined;\n if (childWidgets.length > 0) {\n if (widget.y <= point.y) {\n lineWidget = childWidgets[childWidgets.length - 1];\n }\n else {\n lineWidget = childWidgets[0];\n }\n }\n return lineWidget;\n };\n /**\n * highlight paragraph widget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.highlightParagraph = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n for (var i = startIndex; i < widget.childWidgets.length; i++) {\n var line = widget.childWidgets[i];\n if (i === startIndex) {\n top = this.getTop(line);\n }\n var left = this.getLeft(line);\n if (line === endLine) {\n //Selection ends in current line.\n var right = this.getLeftInternal(endLine, endElement, endIndex);\n this.createHighlightBorder(line, right - left, left, top);\n return;\n }\n this.createHighlightBorder(line, this.getWidth(line, true) - (left - widget.x), left, top);\n top += line.height;\n }\n };\n //Table Widget\n /**\n * Get line widget form table widget\n * @private\n */\n Selection.prototype.getLineWidgetTableWidget = function (widget, point) {\n var lineWidget = undefined;\n for (var i = 0; i < widget.childWidgets.length; i++) {\n //Removed the height condition check to handle the vertically merged cells.\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof TableRowWidget && childWidget.y <= point.y) {\n lineWidget = this.getLineWidgetRowWidget(childWidget, point);\n var cellWidget = undefined;\n if (!isNullOrUndefined(lineWidget) && lineWidget.paragraph.containerWidget instanceof TableCellWidget) {\n cellWidget = lineWidget.paragraph.containerWidget;\n }\n var cellSpacing = 0;\n var rowSpan = 0;\n if (!isNullOrUndefined(cellWidget)) {\n var tableWidget = cellWidget.ownerRow.containerWidget;\n cellSpacing = HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n rowSpan = cellWidget.cellFormat.rowSpan;\n }\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n var topCellSpacing = 0;\n var bottomCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = cellWidget.cellIndex === 0 ? cellSpacing : cellSpacing / 2;\n // tslint:disable-next-line:max-line-length\n rightCellSpacing = cellWidget.cellIndex === cellWidget.ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n var rowWidget = undefined;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n rowWidget = cellWidget.containerWidget;\n }\n var tableWidget = undefined;\n if (cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n tableWidget = cellWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(tableWidget)) {\n topCellSpacing = cellWidget.ownerRow.rowIndex === 0 ? cellSpacing : cellSpacing / 2;\n if (cellWidget.ownerRow.rowIndex + rowSpan === cellWidget.ownerTable.childWidgets.length) {\n bottomCellSpacing = cellSpacing;\n }\n else {\n bottomCellSpacing = cellSpacing / 2;\n }\n }\n }\n if ((!isNullOrUndefined(lineWidget) && lineWidget.paragraph.x <= point.x\n && lineWidget.paragraph.x + lineWidget.width >= point.x\n && lineWidget.paragraph.y <= point.y && this.getTop(lineWidget) + lineWidget.height >= point.y)\n || (!isNullOrUndefined(cellWidget) && cellWidget.x - cellWidget.margin.left - leftCellSpacing <= point.x\n && cellWidget.x + cellWidget.width + cellWidget.margin.right + rightCellSpacing >= point.x\n && cellWidget.y - cellWidget.margin.top - topCellSpacing <= point.y\n && cellWidget.y + cellWidget.height + cellWidget.margin.bottom + bottomCellSpacing >= point.y)) {\n break;\n }\n }\n }\n return lineWidget;\n };\n //TableRowWidget\n /**\n * Get line widget fom row\n * @private\n */\n Selection.prototype.getLineWidgetRowWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var cellSpacing = 0;\n cellSpacing = HelperMethods.convertPointToPixel(widget.ownerTable.tableFormat.cellSpacing);\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = widget.childWidgets[i].columnIndex === 0 ? cellSpacing : cellSpacing / 2;\n // tslint:disable-next-line:max-line-length\n rightCellSpacing = widget.childWidgets[i].cellIndex === widget.childWidgets[i].ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n }\n if (widget.childWidgets[i].x -\n // tslint:disable-next-line:max-line-length\n widget.childWidgets[i].margin.left - leftCellSpacing <= point.x && (widget.childWidgets[i].x +\n // tslint:disable-next-line:max-line-length\n widget.childWidgets[i].width) + widget.childWidgets[i].margin.right + rightCellSpacing >= point.x) {\n return this.getLineWidgetCellWidget(widget.childWidgets[i], point);\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].x <= point.x) {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[0], point);\n }\n }\n return lineWidget;\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlock = function (cell) {\n if (cell.childWidgets.length > 0) {\n return cell.childWidgets[0];\n }\n return undefined;\n };\n //Table Cell Widget\n /**\n * Highlight selected cell widget\n * @private\n */\n Selection.prototype.highlightCellWidget = function (widget) {\n var widgets = [];\n if (widget.previousSplitWidget || widget.nextSplitWidget) {\n widgets = widget.getSplitWidgets();\n }\n else {\n widgets.push(widget);\n }\n for (var i = 0; i < widgets.length; i++) {\n widget = widgets[i];\n //Clears Selection highlight of the child widgets.\n this.clearChildSelectionHighlight(widget);\n //Highlights the entire cell.\n this.createHighlightBorderInsideTable(widget);\n }\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlight = function (widget) {\n if (this.selectedWidgets.containsKey(widget)) {\n this.removeSelectionHighlight(widget);\n this.selectedWidgets.remove(widget);\n }\n };\n /**\n * Get line widget from cell widget\n * @private\n */\n Selection.prototype.getLineWidgetCellWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i].y <= point.y\n && (widget.childWidgets[i].y + widget.childWidgets[i].height) >= point.y) {\n if (widget.childWidgets[i] instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(widget.childWidgets[i], point);\n }\n else {\n return this.getLineWidgetTableWidget(widget.childWidgets[i], point);\n }\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n // tslint:disable-next-line:max-line-length\n lineWidget = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetTableWidget(widget.childWidgets[0], point);\n }\n }\n }\n return lineWidget;\n };\n //LineWidget\n /**\n * update text position\n * @private\n */\n Selection.prototype.updateTextPosition = function (widget, point) {\n var caretPosition = point;\n var element = undefined;\n var index = 0;\n var isImageSelected = false;\n var isImageSelectedObj = this.updateTextPositionIn(widget, element, index, point, false);\n if (!isNullOrUndefined(isImageSelectedObj)) {\n element = isImageSelectedObj.element;\n index = isImageSelectedObj.index;\n caretPosition = isImageSelectedObj.caretPosition;\n isImageSelected = isImageSelectedObj.isImageSelected;\n this.isImageSelected = isImageSelected;\n }\n if (isImageSelected) {\n this.selectInternal(widget, element, index, caretPosition);\n if (index === 0) {\n this.extendForward();\n }\n else {\n this.extendBackward();\n }\n }\n else {\n this.selectInternal(widget, element, index, caretPosition);\n }\n };\n /**\n * @private\n */\n /* tslint:disable */\n Selection.prototype.updateTextPositionIn = function (widget, inline, index, caretPosition, includeParagraphMark) {\n var isImageSelected = false;\n var top = this.getTop(widget);\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n var element = elementValues.element;\n left = elementValues.left;\n if (isNullOrUndefined(element)) {\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget.paragraph, topMargin, bottomMargin);\n topMargin = size.topMargin;\n bottomMargin = size.bottomMargin;\n var selectParaMark = this.viewer.mouseDownOffset.y >= top && this.viewer.mouseDownOffset.y < top + widget.height ? (this.viewer.mouseDownOffset.x < left + size.width) : true;\n if (selectParaMark && includeParagraphMark && caretPosition.x > left + size.width / 2) {\n left += size.width;\n if (widget.children.length > 0) {\n inline = widget.children[widget.children.length - 1];\n index = inline.length;\n }\n index++;\n }\n caretPosition = new Point(left, topMargin > 0 ? top + topMargin : top);\n }\n else {\n if (!isNullOrUndefined(element)) {\n if (caretPosition.x > left + element.margin.left) {\n for (var i = widget.children.indexOf(element); i < widget.children.length; i++) {\n element = widget.children[i];\n if (caretPosition.x < left + element.margin.left + element.width || i === widget.children.length - 1) {\n break;\n }\n left += element.margin.left + element.width;\n }\n if (caretPosition.x > left + element.margin.left + element.width) {\n //Line End\n index = element instanceof TextElementBox ? element.length : 1;\n left += element.margin.left + element.width;\n }\n else if (element instanceof TextElementBox) {\n var x = caretPosition.x - left - element.margin.left;\n left += element.margin.left;\n var prevWidth = 0;\n var charIndex = 0;\n for (var i = 1; i <= element.length; i++) {\n var width = 0;\n if (i === element.length) {\n width = element.width;\n }\n else {\n width = this.viewer.textHelper.getWidth(element.text.substr(0, i), element.characterFormat);\n }\n if (x < width || i === element.length) {\n //Updates exact left position of the caret.\n var charWidth = width - prevWidth;\n if (x - prevWidth > charWidth / 2) {\n left += width;\n charIndex = i;\n }\n else {\n left += prevWidth;\n charIndex = i - 1;\n if (i === 1 && element !== widget.children[0]) {\n var curIndex = widget.children.indexOf(element);\n if (!(widget.children[curIndex - 1] instanceof ListTextElementBox)) {\n element = widget.children[curIndex - 1];\n charIndex = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n break;\n }\n prevWidth = width;\n }\n index = charIndex;\n }\n else {\n isImageSelected = element instanceof ImageElementBox;\n if (caretPosition.x - left - element.margin.left > element.width / 2) {\n index = 1;\n left += element.margin.left + element.width;\n }\n else if (element !== widget.children[0] && !isImageSelected) {\n var curIndex = widget.children.indexOf(element);\n if (!(widget.children[curIndex - 1] instanceof ListTextElementBox)) {\n element = widget.children[curIndex - 1];\n index = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n if (element instanceof TextElementBox && element.text === '\\v') {\n index = 0;\n }\n }\n else {\n left += element.margin.left;\n }\n if (element instanceof TextElementBox) {\n top += element.margin.top > 0 ? element.margin.top : 0;\n }\n else {\n var textMetrics = this.viewer.textHelper.getHeight(element.characterFormat); //for ascent and descent\n var height = element.height;\n if (element instanceof BookmarkElementBox && !this.viewer.layout.hasValidElement(element.line.paragraph)) {\n height = textMetrics.Height; //after text helper class\n }\n top += element.margin.top + height - textMetrics.BaselineOffset;\n }\n inline = element;\n var inlineObj = this.validateTextPosition(inline, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n var isParagraphEnd = isNullOrUndefined(inline.nextNode) && index === inline.length;\n var isLineEnd = isNullOrUndefined(inline.nextNode)\n && inline instanceof TextElementBox && inline.text === '\\v';\n if (includeParagraphMark && inline.nextNode instanceof FieldElementBox && index === inline.length) {\n isParagraphEnd = this.isLastRenderedInline(inline, index);\n }\n if (includeParagraphMark && isParagraphEnd || isLineEnd) {\n var width = 0;\n //Include width of Paragraph mark.\n if (isParagraphEnd) {\n width = this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n var selectParaMark = this.viewer.mouseDownOffset.y >= top && this.viewer.mouseDownOffset.y < top + widget.height ? (this.viewer.mouseDownOffset.x < left + width) : true;\n if (selectParaMark && caretPosition.x > left + width / 2) {\n left += width;\n index = inline.length + 1;\n }\n //Include width of line break mark.\n }\n else if (isLineEnd) {\n width = element.width;\n left += width;\n index = inline.length;\n }\n }\n caretPosition = new Point(left, top);\n }\n }\n return {\n 'element': inline,\n 'index': index,\n 'caretPosition': caretPosition,\n 'isImageSelected': isImageSelected\n };\n };\n /* tslint:enable */\n /**\n * Get text length if the line widget\n * @private\n */\n // public getTextLength(viewer: LayoutViewer, widget: LineWidget, element: ElementBox): number {\n // let length: number = 0;\n // let count: number = widget.children.indexOf(element);\n // if (widget.children.length > 0 && widget.children[0] instanceof ListTextElementBox) {\n // if (widget.children[1] instanceof ListTextElementBox) {\n // count -= 2;\n // } else {\n // count -= 1;\n // }\n // }\n // for (let i: number = 1; i < count; i++) {\n // length += widget.children[i].length;\n // }\n // return length;\n // }\n /**\n * Get Line widget left\n * @private\n */\n Selection.prototype.getLeft = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !(paragraphFormat.textAlignment === 'Right')) {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n for (var i = 0; i < widget.children.length; i++) {\n var element = widget.children[i];\n if (element instanceof ListTextElementBox) { //after list implementation\n if (i === 0) {\n left += element.margin.left + element.width;\n }\n else {\n left += element.width;\n }\n }\n else {\n left += element.margin.left;\n break;\n }\n }\n return left;\n };\n /**\n * Get line widget top\n * @private\n */\n Selection.prototype.getTop = function (widget) {\n var top = widget.paragraph.y;\n var count = widget.paragraph.childWidgets.indexOf(widget);\n for (var i = 0; i < count; i++) {\n top += widget.paragraph.childWidgets[i].height;\n }\n return top;\n };\n /**\n * Get first element the widget\n * @private\n */\n Selection.prototype.getFirstElement = function (widget, left) {\n var firstLineIndent = 0;\n if (this.isParagraphFirstLine(widget)) {\n firstLineIndent = HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n left += firstLineIndent;\n var element = undefined;\n for (var i = 0; i < widget.children.length; i++) {\n element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n left += element.margin.left + element.width;\n element = undefined;\n // }\n // else if (element instanceof FieldElementBox || element instanceof BookmarkElementBox\n // || (element.nextNode instanceof FieldElementBox && ((element.nextNode as FieldElementBox).fieldType === 2))) {\n // element = undefined;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'left': left };\n };\n /**\n * Return inline index\n * @private\n */\n //ElementBox\n Selection.prototype.getIndexInInline = function (elementBox) {\n var indexInInline = 0;\n if (elementBox instanceof TextElementBox) {\n var count = elementBox.line.children.indexOf(elementBox);\n for (var i = 0; i < count; i++) {\n var element = elementBox.line.children[i];\n if (element instanceof FieldElementBox || element instanceof ListTextElementBox) {\n continue;\n }\n indexInInline += element.length;\n }\n }\n return indexInInline;\n };\n /**\n * Return true if widget is first inline of paragraph\n * @private\n */\n Selection.prototype.isParagraphFirstLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.previousSplitWidget) &&\n widget === widget.paragraph.firstChild) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isParagraphLastLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.nextSplitWidget)\n && widget === widget.paragraph.lastChild) {\n return true;\n }\n return false;\n };\n /**\n * Return line widget width\n * @private\n */\n Selection.prototype.getWidth = function (widget, includeParagraphMark) {\n var width = 0;\n if (this.isParagraphFirstLine(widget)) {\n width += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n for (var i = 0; i < widget.children.length; i++) {\n width += widget.children[i].margin.left + widget.children[i].width;\n }\n if (includeParagraphMark && widget.paragraph.childWidgets.indexOf(widget) === widget.paragraph.childWidgets.length - 1\n && isNullOrUndefined(widget.paragraph.nextSplitWidget)) {\n width += this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n return width;\n };\n /**\n * Return line widget left\n * @private\n */\n Selection.prototype.getLeftInternal = function (widget, elementBox, index) {\n var left = widget.paragraph.x;\n if (this.isParagraphFirstLine(widget)) {\n // tslint:disable-next-line:max-line-length\n left += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n var count = widget.children.indexOf(elementBox);\n if ((widget.children.length === 1 && widget.children[0] instanceof ListTextElementBox) || (widget.children.length === 2\n && widget.children[0] instanceof ListTextElementBox && widget.children[1] instanceof ListTextElementBox)) {\n count = widget.children.length;\n }\n for (var i = 0; i < count; i++) {\n var widgetInternal = widget.children[i];\n // if (widgetInternal instanceof FieldElementBox) {\n // continue;\n // }\n if (i === 1 && widget.children[i] instanceof ListTextElementBox) {\n left += widget.children[i].width;\n }\n else {\n left += widget.children[i].margin.left + widget.children[i].width;\n }\n }\n if (!isNullOrUndefined(elementBox)) {\n left += elementBox.margin.left;\n }\n if (elementBox instanceof TextElementBox) {\n if (index === elementBox.length) {\n left += elementBox.width;\n }\n else if (index > elementBox.length) {\n // tslint:disable-next-line:max-line-length\n left += elementBox.width + this.viewer.textHelper.getParagraphMarkWidth(elementBox.line.paragraph.characterFormat);\n }\n else {\n // tslint:disable-next-line:max-line-length\n left += this.viewer.textHelper.getWidth(elementBox.text.substr(0, index), elementBox.characterFormat);\n }\n }\n else if (index > 0) {\n if (!isNullOrUndefined(elementBox) && !(elementBox instanceof ListTextElementBox)) {\n left += elementBox.width;\n if (index === 2) {\n var paragraph = elementBox.line.paragraph;\n left += this.viewer.textHelper.getParagraphMarkWidth(paragraph.characterFormat);\n }\n }\n else {\n left += this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n }\n return left;\n };\n /**\n * Return line widget start offset\n * @private\n */\n Selection.prototype.getLineStartLeft = function (widget) {\n var left = widget.paragraph.x;\n if (this.isParagraphFirstLine(widget)) {\n left += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n if (widget.children.length > 0) {\n left += widget.children[0].margin.left;\n }\n return left;\n };\n /**\n * Update text position\n * @private\n */\n Selection.prototype.updateTextPositionWidget = function (widget, point, textPosition, includeParagraphMark) {\n var caretPosition = point;\n var inline = undefined;\n var index = 0;\n var updatePositionObj;\n updatePositionObj = this.updateTextPositionIn(widget, inline, index, caretPosition, includeParagraphMark);\n inline = updatePositionObj.element;\n index = updatePositionObj.index;\n caretPosition = updatePositionObj.caretPosition;\n textPosition.setPositionForSelection(widget, inline, index, caretPosition);\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlightLineWidget = function (widget) {\n if (!isNullOrUndefined(this.owner) && this.selectedWidgets.length > 0) {\n this.clearSelectionHighlight(this);\n }\n };\n /**\n * Return first element from line widget\n * @private\n */\n Selection.prototype.getFirstElementInternal = function (widget) {\n var element = undefined;\n for (var i = 0; i < widget.children.length; i++) {\n element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n element = undefined;\n }\n else {\n break;\n }\n }\n return element;\n };\n //Selection API \n /**\n * Select content between given range\n * @private\n */\n Selection.prototype.selectRange = function (startPosition, endPosition) {\n this.start.setPositionInternal(startPosition);\n this.end.setPositionInternal(endPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Selects current paragraph\n * @private\n */\n Selection.prototype.selectParagraph = function (paragraph, positionAtStart) {\n var line = paragraph.firstChild;\n if (positionAtStart) {\n this.start.setPosition(line, positionAtStart);\n }\n else {\n var endOffset = line.getEndOffset();\n this.start.setPositionParagraph(line, endOffset);\n }\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.setPositionForBlock = function (block, selectFirstBlock) {\n var position;\n if (block instanceof TableWidget) {\n if (selectFirstBlock) {\n block = this.getFirstParagraphInFirstCell(block);\n }\n else {\n block = this.getLastParagraphInLastCell(block);\n }\n }\n if (block instanceof ParagraphWidget) {\n position = new TextPosition(this.owner);\n if (selectFirstBlock) {\n position.setPosition(block.firstChild, true);\n }\n else {\n var line = block.lastChild;\n position.setPositionParagraph(line, line.getEndOffset());\n }\n }\n return position;\n };\n /**\n * Select content in given text position\n * @private\n */\n Selection.prototype.selectContent = function (textPosition, clearMultiSelection) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n this.start.setPositionInternal(textPosition);\n this.end.setPositionInternal(textPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Select paragraph\n * @private\n */\n Selection.prototype.selectInternal = function (lineWidget, element, index, physicalLocation) {\n this.start.setPositionForSelection(lineWidget, element, index, physicalLocation);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = physicalLocation.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.selects = function (lineWidget, offset, skipSelectionChange) {\n this.viewer.clearSelectionHighlight();\n this.start.setPositionForLineWidget(lineWidget, offset);\n this.end.setPositionInternal(this.start);\n if (!skipSelectionChange) {\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select content between start and end position\n * @private\n */\n Selection.prototype.selectPosition = function (startPosition, endPosition) {\n if (isNullOrUndefined(startPosition) || isNullOrUndefined(endPosition)) {\n throw new Error('TextPosition cannot be undefined');\n }\n if (isNullOrUndefined(startPosition.paragraph)\n || startPosition.offset > this.getParagraphLength(startPosition.paragraph) + 1) {\n throw new Error('Start TextPosition is not valid.');\n }\n if (isNullOrUndefined(endPosition.paragraph)\n || endPosition.offset > this.getParagraphLength(endPosition.paragraph) + 1) {\n throw new Error('End TextPosition is not valid.');\n }\n if (startPosition.isAtSamePosition(endPosition)) {\n // Select start position.\n this.selectRange(startPosition, startPosition);\n }\n else {\n // If both text position exists within same comment or outside comment, and not at same position.\n if (startPosition.isExistBefore(endPosition)) {\n // tslint:disable-next-line:max-line-length\n endPosition.validateForwardFieldSelection(startPosition.getHierarchicalIndexInternal(), endPosition.getHierarchicalIndexInternal());\n }\n else {\n // tslint:disable-next-line:max-line-length\n startPosition.validateForwardFieldSelection(endPosition.getHierarchicalIndexInternal(), startPosition.getHierarchicalIndexInternal());\n }\n this.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Notify selection change event\n * @private\n */\n Selection.prototype.fireSelectionChanged = function (isSelectionChanged) {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.updatePhysicalPosition(true);\n this.end.updatePhysicalPosition(false);\n }\n else {\n this.start.updatePhysicalPosition(false);\n this.end.updatePhysicalPosition(true);\n }\n }\n if (!this.skipFormatRetrieval) {\n this.retrieveCurrentFormatProperties();\n }\n this.viewer.clearSelectionHighlight();\n this.hideToolTip();\n if (this.owner.isLayoutEnabled && !this.owner.isShiftingEnabled) {\n this.highlightSelection(true);\n }\n if (isSelectionChanged) {\n if (this.start.paragraph.isInHeaderFooter && !this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = true;\n }\n else if (!this.start.paragraph.isInHeaderFooter && this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n }\n this.owner.fireSelectionChange();\n }\n this.viewer.updateFocus();\n };\n //Formats Retrieval\n /**\n * Retrieve all current selection format\n * @private\n */\n Selection.prototype.retrieveCurrentFormatProperties = function () {\n this.isRetrieveFormatting = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n this.retrieveImageFormat(startPosition, endPosition);\n this.retrieveCharacterFormat(startPosition, endPosition);\n this.retrieveParagraphFormat(startPosition, endPosition);\n this.retrieveSectionFormat(startPosition, endPosition);\n this.retrieveTableFormat(startPosition, endPosition);\n if (!this.isImageSelected) {\n this.imageFormat.clearImageFormat();\n }\n this.isRetrieveFormatting = false;\n this.setCurrentContextType();\n };\n /**\n * @private\n */\n Selection.prototype.retrieveImageFormat = function (start, end) {\n var image;\n if (start.currentWidget === end.currentWidget && start.offset + 1 === end.offset) {\n var elementInfo = end.currentWidget.getInline(end.offset, 0);\n image = elementInfo.element;\n var index = elementInfo.index;\n if (image instanceof ImageElementBox) {\n var startOffset = start.currentWidget.getOffset(image, 0);\n if (startOffset !== start.offset) {\n image = undefined;\n }\n }\n }\n if (image instanceof ImageElementBox) {\n this.imageFormat.copyImageFormat(image);\n }\n else {\n this.imageFormat.clearImageFormat();\n }\n };\n Selection.prototype.setCurrentContextType = function () {\n var contextIsinImage = this.imageFormat.image ? true : false;\n var contextIsinTable = (isNullOrUndefined(this.tableFormat) || isNullOrUndefined(this.tableFormat.table)) ? false : true;\n var style = this.start.paragraph.paragraphFormat.baseStyle;\n if (style instanceof WParagraphStyle && style.name.toLowerCase().indexOf('toc') === 0) {\n var tocField = this.getTocFieldInternal();\n if (!isNullOrUndefined(tocField)) {\n this.contextTypeInternal = 'TableOfContents';\n return;\n }\n }\n if (this.start.paragraph.isInHeaderFooter) {\n var isInHeader = this.start.paragraph.bodyWidget.headerFooterType.indexOf('Header') !== -1;\n if (contextIsinTable) {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderTableImage' : 'FooterTableImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderTableText' : 'FooterTableText';\n }\n }\n else {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderImage' : 'FooterImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderText' : 'FooterText';\n }\n }\n }\n else {\n if (contextIsinTable) {\n this.contextTypeInternal = contextIsinImage ? 'TableImage' : 'TableText';\n }\n else {\n this.contextTypeInternal = contextIsinImage ? 'Image' : 'Text';\n }\n }\n };\n //Table Format retrieval starts\n /**\n * Retrieve selection table format\n * @private\n */\n Selection.prototype.retrieveTableFormat = function (start, end) {\n var tableAdv = this.getTable(start, end);\n if (!isNullOrUndefined(tableAdv)) {\n this.tableFormat.copyFormat(tableAdv.tableFormat);\n this.tableFormat.table = tableAdv;\n this.retrieveCellFormat(start, end);\n this.retrieveRowFormat(start, end);\n }\n else {\n //When the selection is out of table\n this.tableFormat.clearFormat();\n }\n };\n /**\n * Retrieve selection cell format\n * @private\n */\n Selection.prototype.retrieveCellFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.cellFormat.copyFormat(start.paragraph.associatedCell.cellFormat);\n this.getCellFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.cellFormat.clearCellFormat();\n }\n };\n /**\n * Retrieve selection row format\n * @private\n */\n Selection.prototype.retrieveRowFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.rowFormat.copyFormat(start.paragraph.associatedCell.ownerRow.rowFormat);\n this.getRowFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.rowFormat.clearRowFormat();\n }\n };\n /**\n * Get selected cell format\n * @private\n */\n Selection.prototype.getCellFormat = function (table, start, end) {\n if (start.paragraph.associatedCell.equals(end.paragraph.associatedCell)) {\n return;\n }\n var isStarted = false;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === start.paragraph.associatedCell.ownerRow) {\n isStarted = true;\n }\n if (isStarted) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (this.isCellSelected(cell, start, end)) {\n this.cellFormat.combineFormat(cell.cellFormat);\n }\n if (cell === end.paragraph.associatedCell) {\n this.cellFormat.combineFormat(cell.cellFormat);\n return;\n }\n }\n }\n }\n };\n /**\n * Get selected row format\n * @private\n */\n Selection.prototype.getRowFormat = function (table, start, end) {\n var tableRow = start.paragraph.associatedCell.ownerRow;\n if (tableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n for (var i = table.childWidgets.indexOf(tableRow) + 1; i < table.childWidgets.length; i++) {\n var tempTableRow = table.childWidgets[i];\n this.rowFormat.combineFormat(tempTableRow.rowFormat);\n if (tempTableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n }\n };\n /**\n * Return table with given text position\n * @private\n */\n Selection.prototype.getTable = function (startPosition, endPosition) {\n if (!isNullOrUndefined(startPosition.paragraph.associatedCell) && !isNullOrUndefined(endPosition.paragraph.associatedCell)) {\n var startTable = startPosition.paragraph.associatedCell.ownerTable;\n var endTable = startPosition.paragraph.associatedCell.ownerTable;\n if (startTable === endTable) {\n return startTable;\n }\n else {\n if (startTable.contains(startPosition.paragraph.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startPosition.paragraph.associatedCell)) {\n return endTable;\n }\n else if (!startTable.isInsideTable || !endTable.isInsideTable) {\n return undefined;\n }\n else {\n do {\n startTable = startTable.associatedCell.ownerTable;\n if (startTable === endTable || startTable.contains(endTable.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startTable.associatedCell)) {\n return endTable;\n }\n } while (!isNullOrUndefined(startTable.associatedCell));\n }\n }\n }\n return undefined;\n };\n Selection.prototype.getContainerWidget = function (block) {\n var bodyWidget;\n if (block.containerWidget instanceof BlockContainer) {\n bodyWidget = block.containerWidget;\n }\n else {\n bodyWidget = block.containerWidget;\n while (!(bodyWidget instanceof BlockContainer)) {\n bodyWidget = bodyWidget.containerWidget;\n }\n }\n return bodyWidget;\n };\n //Table format retrieval ends\n //Section format retrieval starts\n /**\n * Retrieve selection section format\n * @private\n */\n Selection.prototype.retrieveSectionFormat = function (start, end) {\n var startParaSection = this.getContainerWidget(start.paragraph);\n var endParaSection = this.getContainerWidget(end.paragraph);\n if (!isNullOrUndefined(startParaSection)) {\n this.sectionFormat.copyFormat(startParaSection.sectionFormat);\n var startPageIndex = this.viewer.pages.indexOf(startParaSection.page);\n var endPageIndex = this.viewer.pages.indexOf(endParaSection.page);\n for (var i = startPageIndex + 1; i <= endPageIndex; i++) {\n this.sectionFormat.combineFormat(this.viewer.pages[i].bodyWidgets[0].sectionFormat);\n }\n }\n };\n //section format retrieval ends.\n //Paragraph format retrieval implementation starts.\n /**\n * Retrieve selection paragraph format\n * @private\n */\n Selection.prototype.retrieveParagraphFormat = function (start, end) {\n this.getParagraphFormatForSelection(start.paragraph, this, start, end);\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatForSelection = function (paragraph, selection, start, end) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.getParagraphFormatInternalInCell(start.paragraph.associatedCell, start, end);\n }\n else {\n this.getParagraphFormatInternalInParagraph(paragraph, start, end);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getParagraphFormatInternalInParagraph = function (paragraph, start, end) {\n if (start.paragraph === paragraph) {\n this.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n }\n else {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n }\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getParagraphFormatInternalInBlock(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInternalInParagraph(block, start, end);\n }\n else {\n this.getParagraphFormatInternalInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(table);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInCell = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getParagraphFormatInBlock(cell.childWidgets[i]);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInParagraph(block);\n }\n else {\n this.getParagraphFormatInTable(block);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInTable = function (tableAdv) {\n for (var i = 0; i < tableAdv.childWidgets.length; i++) {\n var tableRow = tableAdv.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInParagraph = function (paragraph) {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInCell = function (cellAdv, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cellAdv, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cellAdv, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getParagraphFormatInCell(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.getParagraphFormatInternalInParagraph(start.paragraph, start, end);\n }\n else {\n this.getParagraphFormatInRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getParaFormatForCell(containerCell.ownerTable, containerCell, endCell);\n }\n }\n else {\n this.getParagraphFormatInRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(cellAdv);\n this.getParagraphFormatInRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParaFormatForCell = function (table, startCell, endCell) {\n var startCellIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endCellIn = startCellIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startCellIn > endCellLeft) {\n startCellIn = endCellLeft;\n }\n if (endCellIn < endCellRight) {\n endCellIn = endCellRight;\n }\n if (startCellIn > this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n if (startCellIn < this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n var cell = tableRow.childWidgets[j];\n var left = this.getCellLeft(tableRow, cell);\n if (HelperMethods.round(startCellIn, 2) <= HelperMethods.round(left, 2)\n && HelperMethods.round(left, 2) < HelperMethods.round(endCellIn, 2)) {\n this.getParagraphFormatInCell(cell);\n }\n }\n }\n };\n /**\n * Get paragraph format ins row\n * @private\n */\n Selection.prototype.getParagraphFormatInRow = function (tableRow, start, end) {\n for (var i = tableRow.rowIndex; i < tableRow.ownerTable.childWidgets.length; i++) {\n var row = tableRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getParagraphFormatInCell(row.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRow.ownerTable);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n // paragraph format retrieval implementation ends\n // Character format retrieval implementation starts.\n /**\n * Retrieve Selection character format\n * @private\n */\n Selection.prototype.retrieveCharacterFormat = function (start, end) {\n this.characterFormat.copyFormat(start.paragraph.characterFormat);\n if (start.paragraph === end.paragraph && start.currentWidget.isLastLine()\n && start.offset === this.getLineLength(start.currentWidget) && start.offset + 1 === end.offset) {\n return;\n }\n var para = start.paragraph;\n if (start.offset === this.getParagraphLength(para) && !this.isEmpty) {\n para = this.getNextParagraphBlock(para);\n }\n while (!isNullOrUndefined(para) && para !== end.paragraph && para.isEmpty()) {\n para = this.getNextParagraphBlock(para);\n }\n var offset = para === start.paragraph ? start.offset : 0;\n var indexInInline = 0;\n if (!isNullOrUndefined(para) && !para.isEmpty()) {\n var position = new TextPosition(this.owner);\n var elemInfo = start.currentWidget.getInline(offset, indexInInline);\n var physicalLocation = this.getPhysicalPositionInternal(start.currentWidget, offset, true);\n position.setPositionForSelection(start.currentWidget, elemInfo.element, elemInfo.index, physicalLocation);\n this.getCharacterFormatForSelection(para, this, position, end);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getCharacterFormatForSelection = function (paragraph, selection, startPosition, endPosition) {\n //Selection start in cell.\n if (startPosition.paragraph instanceof ParagraphWidget && startPosition.paragraph.isInsideTable\n && (!endPosition.paragraph.isInsideTable\n || startPosition.paragraph.associatedCell !== endPosition.paragraph.associatedCell\n || this.isCellSelected(startPosition.paragraph.associatedCell, startPosition, endPosition))) {\n this.getCharacterFormatInTableCell(startPosition.paragraph.associatedCell, selection, startPosition, endPosition);\n }\n else {\n this.getCharacterFormat(paragraph, startPosition, endPosition);\n }\n };\n /**\n * Get Character format\n * @private\n */\n //Format Retrieval\n Selection.prototype.getCharacterFormatForTableRow = function (tableRowAdv, start, end) {\n for (var i = tableRowAdv.rowIndex; i < tableRowAdv.ownerTable.childWidgets.length; i++) {\n var tableRow = tableRowAdv.ownerTable.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(tableRow.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRowAdv.ownerTable);\n // //Goto the next block.\n this.getCharacterFormatForBlock(block, start, end);\n };\n /**\n * Get Character format in table\n * @private\n */\n Selection.prototype.getCharacterFormatInTableCell = function (tableCell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(tableCell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(tableCell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getCharacterFormatForSelectionCell(containerCell, start, end);\n }\n else {\n if (startCell === containerCell) {\n this.getCharacterFormat(start.paragraph, start, end);\n }\n else {\n this.getCharacterFormatForTableRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getCharacterFormatInternalInTable(containerCell.ownerTable, containerCell, endCell, start, end);\n }\n }\n else {\n this.getCharacterFormatForTableRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(tableCell);\n this.getCharacterFormatForTableRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getCharacterFormatInternalInTable = function (table, startCell, endCell, startPosition, endPosition) {\n var startIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endIn = startIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startIn > endCellLeft) {\n startIn = endCellLeft;\n }\n if (endIn < endCellRight) {\n endIn = endCellRight;\n }\n if (startIn > this.upDownSelectionLength) {\n startIn = this.upDownSelectionLength;\n }\n if (endIn < this.upDownSelectionLength) {\n endIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var left = this.getCellLeft(row, cell);\n if (HelperMethods.round(startIn, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(endIn, 2)) {\n this.getCharacterFormatForSelectionCell(cell, startPosition, endPosition);\n }\n }\n }\n };\n /**\n * Get character format with in selection\n * @private\n */\n Selection.prototype.getCharacterFormat = function (paragraph, start, end) {\n if (paragraph !== start.paragraph && paragraph !== end.paragraph) {\n this.getCharacterFormatInternal(paragraph, this);\n return;\n }\n if (end.paragraph === paragraph && start.paragraph !== paragraph && end.offset === 0) {\n return;\n }\n var startOffset = 0;\n var length = this.getParagraphLength(paragraph);\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n //Sets selection character format. \n var isUpdated = this.setCharacterFormat(paragraph, start, end, length);\n if (isUpdated) {\n return;\n }\n }\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n var endOffset = end.offset;\n if (paragraph !== end.paragraph) {\n endOffset = length;\n }\n var isFieldStartSelected = false;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = this.getStartLineOffset(lineWidget);\n }\n if (lineWidget === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = this.getLineLength(lineWidget);\n }\n var count = 0;\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (startOffset >= count + inline.length) {\n count += inline.length;\n continue;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(inline)) {\n var nextInline = isNullOrUndefined(inline.fieldSeparator) ?\n inline.fieldEnd : inline.fieldSeparator;\n do {\n count += inline.length;\n inline = inline.nextNode;\n i++;\n } while (!isNullOrUndefined(inline) && inline !== nextInline);\n isFieldStartSelected = true;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1\n && HelperMethods.isLinkedFieldCharacter(inline) && isFieldStartSelected) {\n var fieldInline = inline.fieldBegin;\n do {\n this.characterFormat.combineFormat(fieldInline.characterFormat);\n fieldInline = fieldInline.nextNode;\n } while (!(fieldInline instanceof FieldElementBox));\n }\n if (inline instanceof TextElementBox) {\n this.characterFormat.combineFormat(inline.characterFormat);\n }\n if (isNullOrUndefined(inline) || endOffset <= count + inline.length) {\n break;\n }\n count += inline.length;\n }\n }\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getCharacterFormatForBlock(block, start, end);\n }\n };\n Selection.prototype.setCharacterFormat = function (para, startPos, endPos, length) {\n var index = 0;\n var startOffset = startPos.offset;\n var inlineAndIndex = startPos.currentWidget.getInline(startOffset, index);\n index = inlineAndIndex.index;\n var inline = inlineAndIndex.element;\n if (isNullOrUndefined(inline)) {\n var currentLineIndex = startPos.paragraph.childWidgets.indexOf(startPos.currentWidget);\n if (startPos.currentWidget.previousLine) {\n inline = startPos.currentWidget.previousLine.children[startPos.currentWidget.previousLine.children.length - 1];\n this.characterFormat.copyFormat(inline.characterFormat);\n return true;\n }\n }\n if (startOffset < length) {\n if (this.isEmpty) {\n if (inline instanceof TextElementBox || (inline instanceof FieldElementBox\n && (inline.fieldType === 0 || inline.fieldType === 1))) {\n var previousNode = this.getPreviousTextElement(inline);\n if (startOffset === 0 && previousNode) {\n inline = previousNode;\n }\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else {\n if (!isNullOrUndefined(this.getPreviousTextElement(inline))) {\n this.characterFormat.copyFormat(this.getPreviousTextElement(inline).characterFormat);\n }\n else if (!isNullOrUndefined(this.getNextTextElement(inline))) {\n this.characterFormat.copyFormat(this.getNextTextElement(inline).characterFormat);\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n }\n return true;\n }\n else {\n if (index === inline.length && !isNullOrUndefined(inline.nextNode)) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormat(inline));\n }\n else if (inline instanceof TextElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else if (inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormatOfField(inline));\n }\n }\n }\n else {\n if (length === endPos.offset) {\n if (inline instanceof TextElementBox || inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else if (!isNullOrUndefined(inline)) {\n inline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(inline)) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatForBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getCharacterFormat(block, start, end);\n }\n else {\n this.getCharacterFormatInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(row.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var blockAdv = this.getNextRenderedBlock(table);\n // //Goto the next block.\n this.getCharacterFormatForBlock(blockAdv, start, end);\n };\n /**\n * Get character format in selection\n * @private\n */\n Selection.prototype.getCharacterFormatForSelectionCell = function (cell, start, end) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getCharacterFormatForBlock(cell.childWidgets[i], start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInternal = function (paragraph, selection) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var linewidget = paragraph.childWidgets[i];\n for (var j = 0; j < linewidget.children.length; j++) {\n var element = linewidget.children[j];\n if (!(element instanceof ImageElementBox || element instanceof FieldElementBox)) {\n selection.characterFormat.combineFormat(element.characterFormat);\n }\n }\n }\n };\n /**\n * Get next valid character format from inline\n * @private\n */\n Selection.prototype.getNextValidCharacterFormat = function (inline) {\n var startInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(startInline)) {\n return inline.characterFormat;\n }\n var fieldBegin = undefined;\n if (startInline instanceof FieldElementBox) {\n if (fieldBegin.fieldType === 0) {\n fieldBegin = startInline;\n }\n }\n if (isNullOrUndefined(fieldBegin)) {\n return startInline.characterFormat;\n }\n else {\n return this.getNextValidCharacterFormatOfField(fieldBegin);\n }\n };\n /**\n * Get next valid paragraph format from field\n * @private\n */\n Selection.prototype.getNextValidCharacterFormatOfField = function (fieldBegin) {\n var startInline = fieldBegin;\n if (HelperMethods.isLinkedFieldCharacter(fieldBegin)) {\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n startInline = fieldBegin.fieldEnd;\n }\n else {\n startInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(startInline.nextNode)) {\n //Check the next node is a valid and returns inline.\n nextValidInline = this.getNextValidElement(startInline.nextNode);\n }\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n return startInline.characterFormat;\n }\n return nextValidInline.characterFormat;\n };\n /**\n * Return true if cursor point with in selection range\n * @private\n */\n Selection.prototype.checkCursorIsInSelection = function (widget, point) {\n if (isNullOrUndefined(this.start) || this.isEmpty || isNullOrUndefined(widget)) {\n return false;\n }\n var isSelected = false;\n do {\n if (this.selectedWidgets.containsKey(widget)) {\n var top_4 = void 0;\n var left = void 0;\n if (widget instanceof LineWidget) {\n top_4 = this.owner.selection.getTop(widget);\n left = this.owner.selection.getLeft(widget);\n }\n else {\n top_4 = widget.y;\n left = widget.x;\n }\n var widgetInfo = this.selectedWidgets.get(widget);\n isSelected = widgetInfo.left <= point.x && top_4 <= point.y &&\n top_4 + widget.height >= point.y && widgetInfo.left + widgetInfo.width >= point.x;\n }\n widget = (widget instanceof LineWidget) ? widget.paragraph : widget.containerWidget;\n } while (!isNullOrUndefined(widget) && !isSelected);\n return isSelected;\n };\n /**\n * Copy paragraph for to selection paragraph format\n * @private\n */\n Selection.prototype.copySelectionParagraphFormat = function () {\n var format = new WParagraphFormat();\n this.paragraphFormat.copyToFormat(format);\n return format;\n };\n /**\n * Get hyperlink display text\n * @private\n */\n // tslint:disable-next-line\n Selection.prototype.getHyperlinkDisplayText = function (paragraph, fieldSeparator, fieldEnd, isNestedField, format) {\n var para = paragraph;\n if (para !== fieldEnd.line.paragraph) {\n isNestedField = true;\n return { displayText: '<>', 'isNestedField': isNestedField, 'format': format };\n }\n var displayText = '';\n var lineIndex = para.childWidgets.indexOf(fieldSeparator.line);\n var index = para.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < para.childWidgets.length; j++) {\n var lineWidget = para.childWidgets[j];\n if (j !== lineIndex) {\n index = -1;\n }\n for (var i = index + 1; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (inline === fieldEnd) {\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n }\n if (inline instanceof TextElementBox) {\n displayText += inline.text;\n format = inline.characterFormat;\n }\n else if (inline instanceof FieldElementBox) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNullOrUndefined(inline.fieldSeparator)) {\n index = lineWidget.children.indexOf(inline.fieldEnd);\n }\n else {\n index = lineWidget.children.indexOf(inline.fieldSeparator);\n }\n }\n }\n else {\n isNestedField = true;\n return { 'displayText': '<>', 'isNestedField': isNestedField, 'format': format };\n }\n }\n }\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n };\n /**\n * Navigates hyperlink on mouse Event.\n * @private\n */\n Selection.prototype.navigateHyperLinkOnEvent = function (cursorPoint, isTouchInput) {\n var _this = this;\n var widget = this.viewer.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n var hyperLinkField = this.getHyperLinkFieldInCurrentSelection(widget, cursorPoint);\n //Invokes Hyperlink navigation events.\n if (!isNullOrUndefined(hyperLinkField)) {\n this.viewer.updateTextPositionForSelection(cursorPoint, 1);\n this.fireRequestNavigate(hyperLinkField);\n setTimeout(function () {\n if (_this.viewer) {\n _this.viewer.isTouchInput = isTouchInput;\n _this.viewer.updateFocus();\n _this.viewer.isTouchInput = false;\n }\n });\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getLinkText = function (fieldBegin) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n var link = hyperlink.navigationLink;\n if (hyperlink.localReference.length > 0) {\n if (hyperlink.localReference[0] === '_' && (isNullOrUndefined(link) || link.length === 0)) {\n link = 'Current Document';\n }\n else {\n link += '#' + hyperlink.localReference;\n }\n }\n hyperlink.destroy();\n return link;\n };\n /**\n * Set Hyperlink content to tool tip element\n * @private\n */\n Selection.prototype.setHyperlinkContentToToolTip = function (fieldBegin, widget, xPos) {\n if (fieldBegin) {\n if (this.owner.contextMenuModule &&\n this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n if (!this.toolTipElement) {\n this.toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.viewer.viewerContainer.appendChild(this.toolTipElement);\n }\n this.toolTipElement.style.display = 'block';\n var l10n = new L10n('documenteditor', this.owner.defaultLocale);\n l10n.setLocale(this.owner.locale);\n var toolTipText = l10n.getConstant('Click to follow link');\n if (this.owner.useCtrlClickToFollowHyperlink) {\n toolTipText = 'Ctrl+' + toolTipText;\n }\n var linkText = this.getLinkText(fieldBegin);\n this.toolTipElement.innerHTML = linkText + '
    ' + toolTipText + '';\n var widgetTop = this.getTop(widget) * this.viewer.zoomFactor;\n var page = this.getPage(widget.paragraph);\n var containerWidth = this.viewer.viewerContainer.getBoundingClientRect().width + this.viewer.viewerContainer.scrollLeft;\n var left = page.boundingRectangle.x + xPos * this.viewer.zoomFactor;\n if ((left + this.toolTipElement.clientWidth + 10) > containerWidth) {\n left = left - ((this.toolTipElement.clientWidth - (containerWidth - left)) + 15);\n }\n var top_5 = this.getPageTop(page) + (widgetTop - this.toolTipElement.offsetHeight);\n top_5 = top_5 > this.viewer.viewerContainer.scrollTop ? top_5 : top_5 + widget.height + this.toolTipElement.offsetHeight;\n this.showToolTip(left, top_5);\n if (!isNullOrUndefined(this.toolTipField) && fieldBegin !== this.toolTipField) {\n this.toolTipObject.position = { X: left, Y: top_5 };\n }\n this.toolTipObject.show();\n this.toolTipField = fieldBegin;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * Show hyperlink tooltip\n * @private\n */\n Selection.prototype.showToolTip = function (x, y) {\n if (!this.toolTipObject) {\n this.toolTipObject = new Popup(this.toolTipElement, {\n height: 'auto',\n width: 'auto',\n relateTo: this.viewer.viewerContainer.parentElement,\n position: { X: x, Y: y }\n });\n }\n };\n /**\n * Hide tooltip object\n * @private\n */\n Selection.prototype.hideToolTip = function () {\n this.toolTipField = undefined;\n if (this.toolTipObject) {\n this.toolTipObject.hide();\n this.toolTipObject.destroy();\n this.toolTipObject = undefined;\n this.toolTipElement.style.display = 'none';\n }\n };\n /**\n * Return hyperlink field\n * @private\n */\n Selection.prototype.getHyperLinkFieldInCurrentSelection = function (widget, cursorPosition) {\n var inline = undefined;\n var top = this.getTop(widget);\n var lineStartLeft = this.getLineStartLeft(widget);\n if (cursorPosition.y < top || cursorPosition.y > top + widget.height\n || cursorPosition.x < lineStartLeft || cursorPosition.x > lineStartLeft + widget.paragraph.width) {\n return undefined;\n }\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n left = elementValues.left;\n var element = elementValues.element;\n if (isNullOrUndefined(element)) {\n var width = this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n if (cursorPosition.x <= lineStartLeft + width || cursorPosition.x >= lineStartLeft + width) {\n //Check if paragraph is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFields(widget.paragraph, checkedFields);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n else {\n if (cursorPosition.x > left + element.margin.left) {\n for (var i = widget.children.indexOf(element); i < widget.children.length; i++) {\n element = widget.children[i];\n if (cursorPosition.x < left + element.margin.left + element.width || i === widget.children.length - 1) {\n break;\n }\n left += element.margin.left + element.width;\n }\n }\n inline = element;\n var width = element.margin.left + element.width;\n if (isNullOrUndefined(inline.nextNode)) {\n //Include width of Paragraph mark.\n width += this.viewer.textHelper.getParagraphMarkWidth(inline.line.paragraph.characterFormat);\n }\n if (cursorPosition.x <= left + width) {\n //Check if inline is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFieldInternal(inline.line.paragraph, inline, checkedFields);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n return undefined;\n };\n /**\n * Return field if paragraph contain hyperlink field\n * @private\n */\n Selection.prototype.getHyperlinkField = function () {\n if (isNullOrUndefined(this.end)) {\n return undefined;\n }\n var index = 0;\n var currentInline = this.end.currentWidget.getInline(this.end.offset, index);\n index = currentInline.index;\n var inline = currentInline.element;\n var checkedFields = [];\n var field = undefined;\n if (isNullOrUndefined(inline)) {\n field = this.getHyperLinkFields(this.end.paragraph, checkedFields);\n }\n else {\n var paragraph = inline.line.paragraph;\n field = this.getHyperLinkFieldInternal(paragraph, inline, checkedFields);\n }\n checkedFields = [];\n return field;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFields = function (paragraph, checkedFields) {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n if (checkedFields.indexOf(this.viewer.fields[i]) !== -1 || isNullOrUndefined(this.viewer.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n checkedFields.push(this.viewer.fields[i]);\n }\n var field = this.getFieldCode(this.viewer.fields[i]);\n field = field.trim().toLowerCase();\n if (field.match('hyperlink ') && this.paragraphIsInFieldResult(this.viewer.fields[i], paragraph)) {\n return this.viewer.fields[i];\n }\n }\n // if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof WHeaderFooter)) {\n // return this.getHyperLinkFields((paragraph.con as WCompositeNode), checkedFields);\n // }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFieldInternal = function (paragraph, inline, fields) {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n if (fields.indexOf(this.viewer.fields[i]) !== -1 || isNullOrUndefined(this.viewer.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n fields.push(this.viewer.fields[i]);\n }\n var fieldCode = this.getFieldCode(this.viewer.fields[i]);\n fieldCode = fieldCode.trim().toLowerCase();\n if (fieldCode.match('hyperlink ') && (this.inlineIsInFieldResult(this.viewer.fields[i], inline) || this.isImageField())) {\n return this.viewer.fields[i];\n }\n }\n if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof HeaderFooterWidget)) {\n return this.getHyperLinkFieldInternal(paragraph.containerWidget, inline, fields);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getBlock = function (currentIndex) {\n if (currentIndex === '' || isNullOrUndefined(currentIndex)) {\n return undefined;\n }\n var index = { index: currentIndex };\n var page = this.start.getPage(index);\n var bodyIndex = index.index.indexOf(';');\n var value = index.index.substring(0, bodyIndex);\n index.index = index.index.substring(bodyIndex).replace(';', '');\n var bodyWidget = page.bodyWidgets[parseInt(value, 10)];\n return this.getBlockInternal(bodyWidget, index.index);\n };\n /**\n * Return Block relative to position\n * @private\n */\n Selection.prototype.getBlockInternal = function (widget, position) {\n if (position === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.indexOf(';');\n var value = position.substring(0, index);\n position = position.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof Widget && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headersFooters, position);\n // tslint:disable-next-line:max-line-length\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[(index)];\n if (position.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.indexOf(';') >= 0) {\n position = '0';\n }\n return child;\n }\n if (child instanceof BlockWidget) {\n var blockObj = this.getBlockInternal(child, position);\n return blockObj;\n }\n }\n else {\n return child;\n }\n }\n else {\n return node;\n }\n return node;\n };\n /**\n * Return true if inline is in field result\n * @private\n */\n Selection.prototype.inlineIsInFieldResult = function (fieldBegin, inline) {\n if (!isNullOrUndefined(fieldBegin.fieldEnd) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n if (this.isExistBeforeInline(fieldBegin.fieldSeparator, inline)) {\n return this.isExistAfterInline(fieldBegin.fieldEnd, inline);\n }\n }\n return false;\n };\n /**\n * Retrieve true if paragraph is in field result\n * @private\n */\n Selection.prototype.paragraphIsInFieldResult = function (fieldBegin, paragraph) {\n if (!isNullOrUndefined(fieldBegin.fieldEnd) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var fieldParagraph = fieldBegin.fieldSeparator.line.paragraph;\n if (fieldBegin.fieldSeparator.line.paragraph === paragraph\n || this.isExistBefore(fieldParagraph, paragraph)) {\n var currentParagraph = fieldBegin.fieldEnd.line.paragraph;\n return (currentParagraph !== paragraph && this.isExistAfter(fieldParagraph, paragraph));\n }\n }\n return false;\n };\n /**\n * Return true if image is In field\n * @private\n */\n Selection.prototype.isImageField = function () {\n if (this.start.paragraph.isEmpty() || this.end.paragraph.isEmpty()) {\n return false;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var indexInInline = 0;\n var inlineInfo = startPosition.paragraph.getInline(startPosition.offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (indexInInline === inline.length) {\n inline = this.getNextRenderedElementBox(inline, indexInInline);\n }\n inlineInfo = endPosition.paragraph.getInline(endPosition.offset, indexInInline);\n var endInline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && endInline instanceof FieldElementBox && endInline.fieldType === 1 && inline.fieldSeparator) {\n var fieldValue = inline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n return true;\n }\n }\n return false;\n };\n /**\n * Select List Text\n * @private\n */\n Selection.prototype.selectListText = function () {\n var lineWidget = this.viewer.selectionLineWidget;\n var endOffset = '0';\n var selectionIndex = lineWidget.getHierarchicalIndex(endOffset);\n var startPosition = this.getTextPosition(selectionIndex);\n var endPosition = this.getTextPosition(selectionIndex);\n this.selectRange(startPosition, endPosition);\n this.highlightListText(this.viewer.selectionLineWidget);\n this.contextTypeInternal = 'List';\n };\n /**\n * Manually select the list text\n * @private\n */\n Selection.prototype.highlightListText = function (linewidget) {\n var width = linewidget.children[0].width;\n var left = this.viewer.getLeftValue(linewidget);\n var top = linewidget.paragraph.y;\n this.createHighlightBorder(linewidget, width, left, top);\n this.viewer.isListTextSelected = true;\n };\n /**\n * @private\n */\n Selection.prototype.updateImageSize = function (imageFormat) {\n this.owner.isShiftingEnabled = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var inline = null;\n var index = 0;\n var paragraph = startPosition.paragraph;\n if (paragraph === endPosition.paragraph\n && startPosition.offset + 1 === endPosition.offset) {\n var inlineObj = paragraph.getInline(endPosition.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n }\n if (inline instanceof ImageElementBox) {\n var width = inline.width;\n var height = inline.height;\n inline.width = imageFormat.width;\n inline.height = imageFormat.height;\n imageFormat.width = width;\n imageFormat.height = height;\n if (paragraph != null && paragraph.containerWidget != null && this.owner.editorModule) {\n var lineIndex = paragraph.childWidgets.indexOf(inline.line);\n var elementIndex = inline.line.children.indexOf(inline);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n this.highlightSelection(false);\n }\n }\n };\n /**\n * Gets selected table content\n * @private\n */\n Selection.prototype.getSelectedCellsInTable = function (table, startCell, endCell) {\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowindex = startCell.ownerRow.index;\n var endRowIndex = endCell.ownerRow.index;\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.index >= startRowindex && row.index <= endRowIndex) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n cells.push(cell);\n }\n }\n }\n if (row.index > endRowIndex) {\n break;\n }\n }\n return cells;\n // return html;\n };\n /**\n * Copies the selected content to clipboard.\n */\n Selection.prototype.copy = function () {\n if (this.isEmpty) {\n return;\n }\n this.copySelectedContent(false);\n };\n /**\n * @private\n */\n Selection.prototype.copySelectedContent = function (isCut) {\n if (isNullOrUndefined(this.owner.sfdtExportModule)) {\n return;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n /* tslint:disable:no-any */\n // tslint:disable-next-line:max-line-length\n var document = this.owner.sfdtExportModule.write(startPosition.currentWidget, startPosition.offset, endPosition.currentWidget, endPosition.offset, true);\n /* tslint:enable:no-any */\n if (this.owner.editorModule) {\n this.owner.editorModule.copiedData = JSON.stringify(document);\n }\n var html = this.htmlWriter.writeHtml(document);\n this.copyToClipboard(html);\n if (isCut && this.owner.editorModule) {\n this.owner.editorModule.handleCut(this);\n }\n this.viewer.updateFocus();\n };\n /**\n * Copy content to clipboard\n * @private\n */\n Selection.prototype.copyToClipboard = function (htmlContent) {\n window.getSelection().removeAllRanges();\n var div = document.createElement('div');\n div.style.left = '-10000px';\n div.style.top = '-10000px';\n div.innerHTML = htmlContent;\n document.body.appendChild(div);\n var range = document.createRange();\n range.selectNodeContents(div);\n window.getSelection().addRange(range);\n var copySuccess = false;\n try {\n copySuccess = document.execCommand('copy');\n }\n catch (e) {\n // Copying data to Clipboard can potentially fail - for example, if another application is holding Clipboard open.\n }\n finally {\n window.getSelection().removeAllRanges();\n div.parentNode.removeChild(div);\n this.viewer.viewerContainer.focus();\n }\n return copySuccess;\n };\n // Caret implementation starts\n /**\n * Shows caret in current selection position.\n * @private\n */\n Selection.prototype.showCaret = function () {\n // tslint:disable-next-line:max-line-length\n var page = !isNullOrUndefined(this.viewer.currentPage) ? this.viewer.currentPage : this.viewer.currentRenderingPage;\n if (isNullOrUndefined(page) || this.viewer.isRowOrCellResizing || this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizerVisible) {\n return;\n }\n var left = page.boundingRectangle.x;\n var right = page.boundingRectangle.width * this.viewer.zoomFactor + left;\n if (!this.owner.enableImageResizerMode || !this.owner.imageResizerModule.isImageResizerVisible) {\n // tslint:disable-next-line:max-line-length\n if (this.isEmpty && (!this.owner.isReadOnlyMode || this.owner.enableCursorOnReadOnly)) {\n var caretLeft = parseInt(this.caret.style.left.replace('px', ''), 10);\n if (caretLeft < left || caretLeft > right) {\n this.caret.style.display = 'none';\n }\n else {\n this.caret.style.display = 'block';\n }\n }\n else if (this.isImageSelected && !this.owner.enableImageResizerMode) {\n this.caret.style.display = 'block';\n }\n else {\n if (this.caret.style.display === 'block' || isNullOrUndefined(this)) {\n if (!this.viewer.isComposingIME) {\n this.caret.style.display = 'none';\n }\n }\n }\n }\n if (!isNullOrUndefined(this) && this.viewer.isTouchInput && !this.owner.isReadOnlyMode) {\n var caretStartLeft = parseInt(this.viewer.touchStart.style.left.replace('px', ''), 10) + 14;\n var caretEndLeft = parseInt(this.viewer.touchEnd.style.left.replace('px', ''), 10) + 14;\n var page_1 = this.getSelectionPage(this.start);\n if (page_1) {\n if (caretEndLeft < left || caretEndLeft > right) {\n this.viewer.touchEnd.style.display = 'none';\n }\n else {\n this.viewer.touchEnd.style.display = 'block';\n }\n if (!this.isEmpty) {\n left = page_1.boundingRectangle.x;\n right = page_1.boundingRectangle.width * this.viewer.zoomFactor + left;\n }\n if (caretStartLeft < left || caretStartLeft > right) {\n this.viewer.touchStart.style.display = 'none';\n }\n else {\n this.viewer.touchStart.style.display = 'block';\n }\n }\n }\n else {\n this.viewer.touchStart.style.display = 'none';\n this.viewer.touchEnd.style.display = 'none';\n }\n };\n /**\n * To set the editable div caret position\n * @private\n */\n Selection.prototype.setEditableDivCaretPosition = function (index) {\n this.viewer.editableDiv.focus();\n var child = this.viewer.editableDiv.childNodes[this.viewer.editableDiv.childNodes.length - 1];\n if (child) {\n var range = document.createRange();\n range.setStart(child, index);\n range.collapse(true);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(range);\n }\n };\n /**\n * Initializes caret.\n * @private\n */\n Selection.prototype.initCaret = function () {\n this.caret = createElement('div', {\n styles: 'position:absolute',\n className: 'e-de-blink-cursor e-de-cursor-animation'\n });\n this.viewer.viewerContainer.appendChild(this.caret);\n };\n /**\n * Updates caret position.\n * @private\n */\n Selection.prototype.updateCaretPosition = function () {\n var caretPosition = this.end.location;\n var page = this.getSelectionPage(this.end);\n if (page) {\n this.caret.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.viewer.zoomFactor) + 'px';\n var caretInfo = this.updateCaretSize(this.owner.selection.end);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n var viewer = this.viewer;\n // tslint:disable-next-line:max-line-length\n var pageTop = (page.boundingRectangle.y - viewer.pageGap * (this.viewer.pages.indexOf(page) + 1)) * this.viewer.zoomFactor + viewer.pageGap * (this.viewer.pages.indexOf(page) + 1);\n this.caret.style.top = pageTop + (Math.round(caretPosition.y + topMargin) * this.viewer.zoomFactor) + 'px';\n if (this.owner.selection.characterFormat.baselineAlignment === 'Subscript') {\n this.caret.style.top = parseFloat(this.caret.style.top) + (parseFloat(this.caret.style.height) / 2) + 'px';\n }\n if (this.viewer.isTouchInput || this.viewer.touchStart.style.display !== 'none') {\n // tslint:disable-next-line:max-line-length\n this.viewer.touchStart.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.viewer.zoomFactor - 14) + 'px';\n this.viewer.touchStart.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.viewer.zoomFactor) + 'px';\n // tslint:disable-next-line:max-line-length\n this.viewer.touchEnd.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.viewer.zoomFactor - 14) + 'px';\n this.viewer.touchEnd.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.viewer.zoomFactor) + 'px';\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getRect = function (position) {\n var caretPosition = position.location;\n var page = this.getSelectionPage(position);\n if (page) {\n var viewer = this.viewer;\n var left = page.boundingRectangle.x + (Math.round(caretPosition.x) * viewer.zoomFactor);\n var pageGap = viewer.pageGap;\n // tslint:disable-next-line:max-line-length\n var pageTop = (page.boundingRectangle.y - pageGap * (page.index + 1)) * viewer.zoomFactor + pageGap * (page.index + 1);\n var top_6 = pageTop + (Math.round(caretPosition.y) * viewer.zoomFactor);\n return new Point(left, top_6);\n }\n return new Point(0, 0);\n };\n /**\n * Gets current selected page\n * @private\n */\n Selection.prototype.getSelectionPage = function (position) {\n var lineWidget = this.getLineWidgetInternal(position.currentWidget, position.offset, true);\n if (lineWidget) {\n return this.getPage(lineWidget.paragraph);\n }\n return undefined;\n };\n /**\n * Updates caret size.\n * @private\n */\n Selection.prototype.updateCaretSize = function (textPosition, skipUpdate) {\n var topMargin = 0;\n var isItalic = false;\n var caret;\n var index = 0;\n var caretHeight = 0;\n if (this.characterFormat.italic) {\n isItalic = this.characterFormat.italic;\n }\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var bottomMargin = 0;\n var paragraphInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = paragraphInfo.topMargin;\n bottomMargin = paragraphInfo.bottomMargin;\n var height = paragraphInfo.height;\n caretHeight = topMargin < 0 ? topMargin + height : height;\n if (!skipUpdate) {\n this.caret.style.height = caretHeight * this.viewer.zoomFactor + 'px';\n }\n topMargin = 0;\n }\n else {\n var inlineInfo = textPosition.currentWidget.getInline(textPosition.offset, index);\n index = inlineInfo.index;\n var inline = inlineInfo.element;\n if (!isNullOrUndefined(inline)) {\n caret = this.getCaretHeight(inline, index, inline.characterFormat, true, topMargin, isItalic);\n caretHeight = caret.height;\n if (!skipUpdate) {\n this.caret.style.height = caret.height * this.viewer.zoomFactor + 'px';\n }\n }\n }\n if (!skipUpdate) {\n if (isItalic) {\n this.caret.style.transform = 'rotate(13deg)';\n }\n else {\n this.caret.style.transform = '';\n }\n }\n return {\n 'topMargin': topMargin,\n 'height': caretHeight\n };\n };\n /**\n * Updates caret to page.\n * @private\n */\n Selection.prototype.updateCaretToPage = function (startPosition, endPage) {\n if (!isNullOrUndefined(endPage)) {\n this.viewer.selectionEndPage = endPage;\n if (this.owner.selection.isEmpty) {\n this.viewer.selectionStartPage = endPage;\n }\n else {\n // tslint:disable-next-line:max-line-length\n var startLineWidget = this.getLineWidgetParagraph(startPosition.offset, startPosition.paragraph.childWidgets[0]);\n //Gets start page.\n var startPage = this.getPage(startLineWidget.paragraph);\n if (!isNullOrUndefined(startPage)) {\n this.viewer.selectionStartPage = startPage;\n }\n }\n }\n this.checkForCursorVisibility();\n };\n /**\n * Gets caret bottom position.\n * @private\n */\n Selection.prototype.getCaretBottom = function (textPosition, isEmptySelection) {\n var bottom = textPosition.location.y;\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var topMargin = 0;\n var bottomMargin = 0;\n var sizeInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = sizeInfo.topMargin;\n bottomMargin = sizeInfo.bottomMargin;\n bottom += sizeInfo.height;\n bottom += topMargin;\n if (!isEmptySelection) {\n bottom += bottomMargin;\n }\n }\n else {\n var index = 0;\n var inlineInfo = textPosition.paragraph.getInline(textPosition.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var topMargin = 0;\n var isItalic = false;\n // tslint:disable-next-line:max-line-length\n var caretHeightInfo = this.getCaretHeight(inline, index, inline.characterFormat, false, topMargin, isItalic);\n topMargin = caretHeightInfo.topMargin;\n isItalic = caretHeightInfo.isItalic;\n bottom += caretHeightInfo.height;\n if (isEmptySelection) {\n bottom -= HelperMethods.convertPointToPixel(textPosition.paragraph.paragraphFormat.afterSpacing);\n }\n }\n return bottom;\n };\n /**\n * Checks for cursor visibility.\n * @param isTouch\n * @private\n */\n Selection.prototype.checkForCursorVisibility = function () {\n this.showCaret();\n };\n // caret implementation ends\n /**\n * Keyboard shortcuts\n * @private\n */\n // tslint:disable:max-func-body-length\n Selection.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n if (ctrl && !shift && !alt) {\n this.viewer.isControlPressed = true;\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.selection.handleTabKey(false, false);\n // }\n // break;\n case 35:\n this.handleControlEndKey();\n break;\n case 36:\n this.handleControlHomeKey();\n break;\n case 37:\n this.handleControlLeftKey();\n break;\n case 38:\n this.handleControlUpKey();\n break;\n case 39:\n this.handleControlRightKey();\n break;\n case 40:\n this.handleControlDownKey();\n break;\n case 65:\n this.owner.selection.selectAll();\n break;\n case 67:\n event.preventDefault();\n this.copy();\n break;\n case 70:\n event.preventDefault();\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 35:\n this.handleShiftEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleShiftHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleShiftLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleShiftUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleShiftRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleShiftDownKey();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 35:\n this.handleControlShiftEndKey();\n break;\n case 36:\n this.handleControlShiftHomeKey();\n break;\n case 37:\n this.handleControlShiftLeftKey();\n break;\n case 38:\n this.handleControlShiftUpKey();\n break;\n case 39:\n this.handleControlShiftRightKey();\n break;\n case 40:\n this.handleControlShiftDownKey();\n break;\n }\n }\n else {\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.handleTabKey(true, false);\n // }\n // break; \n case 33:\n event.preventDefault();\n this.viewer.viewerContainer.scrollTop -= this.viewer.visibleBounds.height;\n break;\n case 34:\n event.preventDefault();\n this.viewer.viewerContainer.scrollTop += this.viewer.visibleBounds.height;\n break;\n case 35:\n this.handleEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleDownKey();\n event.preventDefault();\n break;\n }\n }\n if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.onKeyDownInternal(event, ctrl, shift, alt);\n }\n if (this.owner.searchModule) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.owner.searchModule.searchHighlighters) && this.owner.searchModule.searchHighlighters.length > 0) {\n this.owner.searchModule.searchResults.clear();\n }\n }\n if (event.keyCode === 27 || event.which === 27) {\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n if (this.owner.enableHeaderAndFooter) {\n this.disableHeaderFooter();\n }\n }\n };\n //#region Enable or disable Header Footer\n /**\n * @private\n */\n Selection.prototype.checkAndEnableHeaderFooter = function (point, pagePoint) {\n var page = this.viewer.currentPage;\n if (this.isCursorInsidePageRect(point, page)) {\n if (this.isCursorInHeaderRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.headerWidget);\n }\n if (this.isCursorInFooterRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.footerWidget);\n }\n }\n if (this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n this.viewer.updateTextPositionForSelection(pagePoint, 1);\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInsidePageRect = function (point, page) {\n if ((this.viewer.containerLeft + point.x) >= page.boundingRectangle.x &&\n (this.viewer.containerLeft + point.x) <= (page.boundingRectangle.x + (page.boundingRectangle.width * this.viewer.zoomFactor))) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInHeaderRegion = function (point, page) {\n var pageTop = this.getPageTop(page);\n var headerHeight = 0;\n if (page.headerWidget) {\n headerHeight = (page.headerWidget.y + page.headerWidget.height);\n }\n var height = Math.max(headerHeight, HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin))\n * this.viewer.zoomFactor;\n if ((this.viewer.containerTop + point.y) >= pageTop && (this.viewer.containerTop + point.y) <= pageTop + height) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInFooterRegion = function (point, page) {\n var pageRect = page.boundingRectangle;\n var pageTop = this.getPageTop(page);\n var pageBottom = pageTop + (pageRect.height * this.viewer.zoomFactor);\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = 0;\n if (page.footerWidget) {\n footerHeight = page.footerWidget.height;\n }\n // tslint:disable-next-line:max-line-length\n var height = (pageRect.height -\n Math.max(footerHeight + footerDistance, HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.bottomMargin))) * this.viewer.zoomFactor;\n if ((this.viewer.containerTop + point.y) <= pageBottom && (this.viewer.containerTop + point.y) >= pageTop + height) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.enableHeadersFootersRegion = function (widget) {\n this.owner.enableHeaderAndFooter = true;\n this.updateTextPositionForBlockContainer(widget);\n return true;\n };\n /**\n * @private\n */\n Selection.prototype.updateTextPositionForBlockContainer = function (widget) {\n var block = widget.firstChild;\n if (block instanceof TableWidget) {\n block = this.getFirstBlockInFirstCell(block);\n }\n this.selectParagraph(block, true);\n };\n /**\n * Disable Header footer\n * @private\n */\n Selection.prototype.disableHeaderFooter = function () {\n var page = this.getPage(this.start.paragraph);\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n this.owner.enableHeaderAndFooter = false;\n };\n //#endregion\n /**\n * @private\n */\n Selection.prototype.destroy = function () {\n if (!isNullOrUndefined(this.contextTypeInternal)) {\n this.contextTypeInternal = undefined;\n }\n this.caret = undefined;\n this.contextTypeInternal = undefined;\n this.upDownSelectionLength = undefined;\n this.viewer = undefined;\n this.owner = undefined;\n };\n /**\n * Navigates to the specified bookmark.\n * @param name\n * @param moveToStart\n * @private\n */\n Selection.prototype.navigateBookmark = function (name, moveToStart) {\n var bookmarks = this.viewer.bookmarks;\n if (bookmarks.containsKey(name)) {\n //bookmark start element\n var bookmrkElmnt = bookmarks.get(name);\n var offset = bookmrkElmnt.line.getOffset(bookmrkElmnt, 1);\n var startPosition = new TextPosition(this.viewer.owner);\n startPosition.setPositionParagraph(bookmrkElmnt.line, offset);\n if (moveToStart) {\n this.viewer.selection.selectRange(startPosition, startPosition);\n }\n else {\n //bookmark end element\n var bookmrkEnd = bookmrkElmnt.reference;\n var endoffset = bookmrkEnd.line.getOffset(bookmrkEnd, 0);\n var endPosition = new TextPosition(this.viewer.owner);\n endPosition.setPositionParagraph(bookmrkEnd.line, endoffset);\n //selects the bookmark range\n this.viewer.selection.selectRange(startPosition, endPosition);\n }\n }\n };\n /**\n * Selects the specified bookmark.\n * @param name\n */\n Selection.prototype.selectBookmark = function (name) {\n this.navigateBookmark(name);\n };\n /**\n * Returns the toc field from the selection.\n * @private\n */\n Selection.prototype.getTocField = function () {\n var paragraph = this.start.paragraph;\n var tocPara = undefined;\n while ((paragraph !== undefined && this.isTocStyle(paragraph))) {\n tocPara = paragraph;\n paragraph = paragraph.previousRenderedWidget;\n }\n if (tocPara !== undefined) {\n var lineWidget = tocPara.childWidgets[0];\n if (lineWidget !== undefined) {\n return lineWidget.children[0];\n }\n }\n return undefined;\n };\n /**\n * Returns true if the paragraph has toc style.\n */\n Selection.prototype.isTocStyle = function (paragraph) {\n var style = paragraph.paragraphFormat.baseStyle;\n return (style !== undefined && (style.name.toLowerCase().indexOf('toc') !== -1));\n };\n return Selection;\n}());\nexport { Selection };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, ParagraphWidget, ListTextElementBox, FieldElementBox } from '../viewer/page';\n/**\n * @private\n */\nvar TextSearch = /** @class */ (function () {\n function TextSearch(owner) {\n this.wordBefore = '\\\\b';\n this.wordAfter = '\\\\b';\n this.isHeader = false;\n this.isFooter = false;\n this.owner = owner;\n }\n Object.defineProperty(TextSearch.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n TextSearch.prototype.find = function (pattern, findOption) {\n return this.findNext(pattern, findOption, '0;0;0');\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findNext = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n this.owner.searchModule.textSearchResults.clearResults();\n var results = this.owner.searchModule.textSearchResults;\n this.findDocument(results, pattern, true, findOption, hierarchicalPosition);\n return results.length > 0, results.currentSearchResult;\n };\n TextSearch.prototype.stringToRegex = function (textToFind, option) {\n if (textToFind.indexOf('\\\\') > -1) {\n textToFind = textToFind.split('\\\\').join('\\\\\\\\');\n }\n if (textToFind.indexOf('.') > -1) {\n textToFind = '\\\\' + textToFind;\n }\n if (option === 'WholeWord' || option === 'CaseSensitiveWholeWord') {\n textToFind = this.wordBefore + textToFind + this.wordAfter;\n }\n return new RegExp(textToFind, (option === 'CaseSensitive' || option === 'CaseSensitiveWholeWord') ? 'g' : 'ig');\n };\n TextSearch.prototype.isPatternEmpty = function (pattern) {\n var wordEmpty = this.wordBefore + this.wordAfter;\n var patternRegExp = pattern.toString();\n return (patternRegExp.length === 0 || patternRegExp === wordEmpty);\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findAll = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n this.owner.searchModule.textSearchResults.clearResults();\n var results = this.owner.searchModule.textSearchResults;\n this.findDocument(results, pattern, false, findOption, hierarchicalPosition);\n if (results.length > 0 && results.currentIndex < 0) {\n results.currentIndex = 0;\n }\n if (!isNullOrUndefined(results.currentSearchResult)) {\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger('searchResultsChange', eventArgs);\n return results;\n }\n return undefined;\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findDocument = function (results, pattern, isFirstMatch, findOption, hierachicalPosition) {\n if (this.isPatternEmpty(pattern)) {\n return;\n }\n if (findOption === undefined) {\n findOption = 'None';\n }\n var inline = undefined;\n var selectionEnd = undefined;\n if (hierachicalPosition !== undefined) {\n selectionEnd = this.owner.selection.end;\n }\n if (hierachicalPosition !== undefined && isFirstMatch && selectionEnd !== undefined && selectionEnd.paragraph !== undefined) {\n if (selectionEnd.paragraph instanceof ParagraphWidget) {\n var indexInInline = 0;\n // tslint:disable-next-line:max-line-length \n // IndexInInline Handled specifically for simple find operation to start from starting point\n var inlineElement = selectionEnd.currentWidget.getInline(this.owner.selection.start.offset, indexInInline);\n inline = inlineElement.element;\n indexInInline = inlineElement.index;\n if (!isNullOrUndefined(inline)) {\n var nextParagraphWidget = undefined;\n // tslint:disable-next-line:max-line-length \n nextParagraphWidget = this.findInline(inline, pattern, findOption, indexInInline, isFirstMatch, results, selectionEnd);\n while (results.length === 0 && !isNullOrUndefined(nextParagraphWidget)) {\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.childWidgets.length === 0) {\n // tslint:disable-next-line:max-line-length \n nextParagraphWidget = this.owner.selection.getNextParagraph(nextParagraphWidget.containerWidget);\n }\n if (isNullOrUndefined(nextParagraphWidget)) {\n break;\n }\n var lineWidget = nextParagraphWidget.childWidgets[0];\n if (lineWidget.children[0] instanceof ListTextElementBox) {\n inline = (lineWidget.children[2] instanceof TextElementBox) ? lineWidget.children[2] : undefined;\n }\n else {\n inline = lineWidget.children[0];\n }\n if (isNullOrUndefined(inline)) {\n break;\n }\n // tslint:disable-next-line:max-line-length \n nextParagraphWidget = this.findInline(inline, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n }\n if (results.length > 0) {\n return;\n }\n }\n }\n }\n var section;\n section = this.viewer.pages[0].bodyWidgets[0];\n while (!isNullOrUndefined(section) && section.childWidgets.length === 0) {\n section = section.nextWidget;\n }\n if (isNullOrUndefined(section) || section.childWidgets.length === 0) {\n return;\n }\n this.isHeader = false;\n this.isFooter = false;\n this.findInlineText(section, pattern, findOption, isFirstMatch, results, selectionEnd);\n for (var i = 0; i < this.viewer.pages.length; i++) {\n var headerWidget = this.viewer.pages[i].headerWidget;\n if (!isNullOrUndefined(headerWidget)) {\n this.isHeader = true;\n this.isFooter = false;\n this.findInlineText(headerWidget, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n for (var i = 0; i < this.viewer.pages.length; i++) {\n var footerWidget = this.viewer.pages[i].footerWidget;\n if (!isNullOrUndefined(footerWidget)) {\n this.isHeader = false;\n this.isFooter = true;\n this.findInlineText(footerWidget, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n // tslint:disable-next-line:max-line-length\n TextSearch.prototype.findInlineText = function (section, pattern, findOption, isFirstMatch, results, selectionEnd) {\n var paragraphWidget = this.owner.selection.getFirstParagraphBlock(section.childWidgets[0]);\n // tslint:disable-next-line:max-line-length \n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length === 1 && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n }\n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length > 0) {\n var inlineElement = paragraphWidget.childWidgets[0];\n var inlineEle = inlineElement.children[0];\n if (isNullOrUndefined(inlineEle)) {\n break;\n }\n this.findInline(inlineEle, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n // tslint:disable-next-line:max-line-length \n while (!isNullOrUndefined(paragraphWidget) && (paragraphWidget.childWidgets.length === 1) && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findInline = function (inlineElement, pattern, option, indexInInline, isFirstMatch, results, selectionEnd) {\n var inlines = inlineElement;\n var stringBuilder = '';\n var spans = new Dictionary();\n //tslint:disable no-constant-condition\n do {\n // tslint:disable-next-line:max-line-length \n if (inlineElement instanceof TextElementBox && (!isNullOrUndefined(inlineElement.text) && inlineElement.text !== '')) {\n spans.add(inlineElement, stringBuilder.length);\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (inlineElement === inlines) {\n stringBuilder = stringBuilder + (inlineElement.text.substring(indexInInline));\n }\n else {\n stringBuilder = stringBuilder + (inlineElement.text);\n }\n }\n else if (inlineElement instanceof FieldElementBox) {\n var fieldBegin = inlineElement;\n if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n // tslint:disable-next-line:max-line-length \n inlineElement = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n if (!isNullOrUndefined(inlineElement) && isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n if (!isNullOrUndefined(inlineElement)) {\n inlineElement = inlineElement.nextNode;\n }\n } while (true);\n var text = stringBuilder.toString();\n var matches = [];\n var matchObject;\n //tslint:disable no-conditional-assignment\n while (!isNullOrUndefined(matchObject = pattern.exec(text))) {\n matches.push(matchObject);\n }\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i];\n var result = results.addResult();\n var spanKeys = spans.keys;\n for (var i_1 = 0; i_1 < spanKeys.length; i_1++) {\n var span = spanKeys[i_1];\n var startIndex = spans.get(span);\n var spanLength = span.length;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n spanLength -= indexInInline;\n }\n if (isNullOrUndefined(result.start) && match.index < startIndex + spanLength) {\n var index = match.index - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.start = this.getTextPosition(span.line, offset.toString());\n result.start.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n result.start.setPositionParagraph(span.line, offset);\n }\n if (match.index + match[0].length <= startIndex + spanLength) {\n var index = (match.index + match[0].length) - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.end = this.getTextPosition(span.line, offset.toString());\n result.end.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n result.end.setPositionParagraph(span.line, offset);\n break;\n }\n }\n result.isHeader = this.isHeader;\n result.isFooter = this.isFooter;\n if (isFirstMatch) {\n results.currentIndex = 0;\n return undefined;\n }\n else if (results.currentIndex < 0 && selectionEnd.isExistBefore(result.start)) {\n results.currentIndex = results.indexOf(result);\n }\n }\n // tslint:disable-next-line:max-line-length\n var paragraphWidget = this.owner.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n return paragraphWidget;\n };\n TextSearch.prototype.getTextPosition = function (lineWidget, hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var index = textPosition.getHierarchicalIndex(lineWidget, hierarchicalIndex);\n textPosition.setPositionForCurrentIndex(index);\n return textPosition;\n };\n return TextSearch;\n}());\nexport { TextSearch };\n/**\n * @private\n */\nvar SearchWidgetInfo = /** @class */ (function () {\n function SearchWidgetInfo(left, width) {\n this.leftInternal = 0;\n this.widthInternal = 0;\n this.leftInternal = left;\n this.widthInternal = width;\n }\n Object.defineProperty(SearchWidgetInfo.prototype, \"left\", {\n get: function () {\n return this.leftInternal;\n },\n set: function (value) {\n this.leftInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchWidgetInfo.prototype, \"width\", {\n get: function () {\n return this.widthInternal;\n },\n set: function (value) {\n this.widthInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n return SearchWidgetInfo;\n}());\nexport { SearchWidgetInfo };\n","/**\n * @private\n */\nvar TextSearchResult = /** @class */ (function () {\n function TextSearchResult(owner) {\n this.startIn = undefined;\n this.endIn = undefined;\n this.owner = owner;\n }\n Object.defineProperty(TextSearchResult.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"start\", {\n get: function () {\n return this.startIn;\n },\n set: function (value) {\n this.startIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"end\", {\n get: function () {\n return this.endIn;\n },\n set: function (value) {\n this.endIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"text\", {\n get: function () {\n return this.viewer.selection.getTextInternal(this.start, this.end, false);\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResult.prototype.destroy = function () {\n this.start = undefined;\n this.end = undefined;\n };\n return TextSearchResult;\n}());\nexport { TextSearchResult };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextSearchResult } from './text-search-result';\n/**\n * @private\n */\nvar TextSearchResults = /** @class */ (function () {\n function TextSearchResults(owner) {\n this.currentIndex = -1;\n this.owner = owner;\n }\n Object.defineProperty(TextSearchResults.prototype, \"length\", {\n get: function () {\n if (this.innerList === undefined) {\n return 0;\n }\n return this.innerList.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResults.prototype, \"currentSearchResult\", {\n get: function () {\n if (this.innerList === undefined || this.currentIndex < 0 || this.currentIndex >= this.length) {\n return undefined;\n }\n return this.innerList[this.currentIndex];\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResults.prototype.addResult = function () {\n var textSearchResult = new TextSearchResult(this.owner);\n if (isNullOrUndefined(this.innerList)) {\n this.innerList = [];\n }\n this.innerList.push(textSearchResult);\n return textSearchResult;\n };\n TextSearchResults.prototype.clearResults = function () {\n this.currentIndex = -1;\n if (!isNullOrUndefined(this.innerList)) {\n for (var i = this.innerList.length - 1; i >= 0; i--) {\n this.innerList[i].destroy();\n this.innerList.splice(i, 1);\n }\n }\n };\n TextSearchResults.prototype.indexOf = function (result) {\n if (isNullOrUndefined(this.innerList)) {\n return -1;\n }\n return this.innerList.indexOf(result);\n };\n TextSearchResults.prototype.destroy = function () {\n if (!isNullOrUndefined(this.innerList)) {\n this.clearResults();\n }\n this.innerList = undefined;\n };\n return TextSearchResults;\n}());\nexport { TextSearchResults };\n","/**\n * Search Result info\n */\nvar SearchResults = /** @class */ (function () {\n /**\n * @private\n */\n function SearchResults(search) {\n this.searchModule = search;\n }\n Object.defineProperty(SearchResults.prototype, \"length\", {\n /**\n * Gets the length of search results.\n */\n get: function () {\n return this.searchModule.textSearchResults.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchResults.prototype, \"index\", {\n /**\n * Gets the index of current search result.\n */\n get: function () {\n return this.searchModule.textSearchResults.currentIndex;\n },\n /**\n * Set the index of current search result.\n */\n set: function (value) {\n if (this.length === 0 || value < 0 || value > this.searchModule.textSearchResults.length - 1) {\n return;\n }\n this.searchModule.textSearchResults.currentIndex = value;\n this.navigate(value);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Replace text in current search result.\n * @param textToReplace text to replace\n * @private\n */\n SearchResults.prototype.replace = function (textToReplace) {\n if (this.index === -1) {\n return;\n }\n this.searchModule.replaceInternal(textToReplace);\n };\n /**\n * Replace all the instance of search result.\n * @param textToReplace text to replace\n */\n SearchResults.prototype.replaceAll = function (textToReplace) {\n if (this.index === -1) {\n return;\n }\n this.searchModule.replaceAllInternal(textToReplace);\n };\n /**\n * @private\n */\n SearchResults.prototype.navigate = function (index) {\n this.searchModule.navigate(this.searchModule.textSearchResults.currentSearchResult);\n this.searchModule.highlight(this.searchModule.textSearchResults);\n };\n /**\n * Clears all the instance of search result.\n */\n SearchResults.prototype.clear = function () {\n this.searchModule.textSearchResults.clearResults();\n this.searchModule.clearSearchHighlight();\n this.searchModule.viewer.renderVisiblePages();\n };\n return SearchResults;\n}());\nexport { SearchResults };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, FieldElementBox } from '../viewer/page';\nimport { SearchWidgetInfo } from './text-search';\nimport { TextSearch } from '../search/text-search';\nimport { TextSearchResults } from '../search/text-search-results';\nimport { SearchResults } from './search-results';\n/**\n * Search module\n */\nvar Search = /** @class */ (function () {\n /**\n * @private\n */\n function Search(owner) {\n /**\n * @private\n */\n this.searchHighlighters = undefined;\n this.isHandledOddPageHeader = undefined;\n this.isHandledEvenPageHeader = undefined;\n this.isHandledOddPageFooter = undefined;\n this.isHandledEvenPageFooter = undefined;\n this.owner = owner;\n this.searchHighlighters = new Dictionary();\n this.textSearch = new TextSearch(this.owner);\n this.textSearchResults = new TextSearchResults(this.owner);\n this.searchResultsInternal = new SearchResults(this);\n }\n Object.defineProperty(Search.prototype, \"viewer\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Search.prototype, \"searchResults\", {\n /**\n * Gets the search results object.\n */\n get: function () {\n return this.searchResultsInternal;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get the module name.\n */\n Search.prototype.getModuleName = function () {\n return 'Search';\n };\n //#region Find & Find All\n /**\n * Finds the immediate occurrence of specified text from cursor position in the document.\n * @param {string} text\n * @param {FindOption} findOption? - Default value of ‘findOptions’ parameter is 'None'.\n * @private\n */\n Search.prototype.find = function (text, findOptions) {\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var result = this.textSearch.find(text, findOptions);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n }\n };\n /**\n * Finds all occurrence of specified text in the document.\n * @param {string} text\n * @param {FindOption} findOption? - Default value of ‘findOptions’ parameter is 'None'.\n */\n Search.prototype.findAll = function (text, findOptions) {\n if (isNullOrUndefined(text || text === '')) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var results = this.textSearch.findAll(text, findOptions);\n if (!isNullOrUndefined(results) && results.length > 0) {\n this.navigate(results.innerList[results.currentIndex]);\n this.highlight(results);\n }\n };\n //#endregion\n //#region Replace and Replace All \n /**\n * Replace the searched string with specified string\n * @param {string} replaceText\n * @param {TextSearchResult} result\n * @param {TextSearchResults} results\n * @private\n */\n Search.prototype.replace = function (replaceText, result, results) {\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode || isNullOrUndefined(results)) {\n return 0;\n }\n if (!isNullOrUndefined(this.viewer)) {\n this.clearSearchHighlight();\n }\n this.navigate(result);\n var endPosition = this.viewer.selection.start;\n var index = results.indexOf(result);\n if (index < 0) {\n return 0;\n }\n this.owner.editorModule.insertText(replaceText, true);\n var endTextPosition = result.end;\n var startPosition = new TextPosition(this.viewer.owner);\n startPosition.setPositionParagraph(endTextPosition.currentWidget, endPosition.offset - replaceText.length);\n this.viewer.selection.selectRange(endPosition, startPosition);\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger('searchResultsChange', eventArgs);\n return 1;\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n * @param {string} textToFind\n * @param {string} textToReplace\n * @param {FindOption} findOptions? - Default value of ‘findOptions’ parameter is FindOption.None.\n * @private\n */\n Search.prototype.replaceInternal = function (textToReplace, findOptions) {\n if ((textToReplace === '' || isNullOrUndefined(textToReplace))) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var textToFind = this.textSearchResults.currentSearchResult.text;\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(textToFind, findOptions);\n var index = this.owner.selection.end.getHierarchicalIndexInternal();\n var result = this.viewer.owner.searchModule.textSearch.findNext(pattern, findOptions, index);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n this.textSearchResults.addResult();\n this.textSearchResults.innerList[0] = result;\n this.replace(textToReplace, result, this.textSearchResults);\n index = this.owner.selection.end.getHierarchicalIndexInternal();\n result = this.textSearch.findNext(textToFind, findOptions, index);\n if (result) {\n this.textSearchResults.addResult();\n this.textSearchResults.innerList[0] = result;\n this.navigate(result);\n }\n }\n };\n /**\n * Replace all the searched string with specified string\n * @param {string} replaceText\n * @param {TextSearchResults} results\n * @private\n */\n Search.prototype.replaceAll = function (replaceText, results) {\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode || isNullOrUndefined(results)) {\n return 0;\n }\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(this.owner.selection, 'ReplaceAll');\n }\n var count = results.length;\n this.viewer.owner.isLayoutEnabled = false;\n for (var i = count - 1; i >= 0; i--) {\n var result = results.innerList[i];\n this.navigate(results.innerList[i]);\n this.owner.editorModule.insertText(replaceText, true);\n if (result.isHeader || result.isFooter) {\n this.viewer.layout.updateHeaderFooterToParent(this.viewer.selection.start.paragraph.bodyWidget);\n }\n results.innerList[i].destroy();\n }\n if (this.owner.editorHistory && !isNullOrUndefined(this.owner.editorHistory.currentHistoryInfo)) {\n this.owner.editorHistory.updateComplexHistory();\n }\n else {\n this.owner.editorModule.updateComplexWithoutHistory(2);\n }\n this.searchResults.clear();\n return count;\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n * @param {string} textToFind\n * @param {string} textToReplace\n * @param {FindOption} findOptions? - Default value of ‘findOptions’ parameter is FindOption.None.\n * @private\n */\n Search.prototype.replaceAllInternal = function (textToReplace, findOptions) {\n if ((textToReplace === '' || isNullOrUndefined(textToReplace))) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n if (this.textSearchResults.length > 0) {\n this.navigate(this.textSearchResults.innerList[this.textSearchResults.currentIndex]);\n this.highlight(this.textSearchResults);\n this.replaceAll(textToReplace, this.textSearchResults);\n }\n };\n //#endregion\n //#region Highlight Search Result\n /**\n * @private\n */\n Search.prototype.navigate = function (textSearchResult) {\n if (textSearchResult) {\n var start = textSearchResult.start;\n var end = textSearchResult.end;\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.owner.selection) && !isNullOrUndefined(start) &&\n !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n this.owner.selection.selectRange(start, end);\n }\n }\n };\n /**\n * @private\n */\n Search.prototype.highlight = function (textSearchResults) {\n this.searchHighlighters = new Dictionary();\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.highlightResult(result);\n }\n this.viewer.renderVisiblePages();\n };\n /**\n * @private\n */\n Search.prototype.highlightResult = function (result) {\n this.highlightSearchResult(result.start.paragraph, result.start, result.end);\n };\n /**\n * Highlight search result\n * @private\n */\n Search.prototype.highlightSearchResult = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = null;\n var endElement = null;\n // tslint:disable-next-line:max-line-length\n var lineWidget = this.viewer.selection.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n selectionStartIndex = lineWidget.index;\n startElement = lineWidget.element;\n var startLineWidget = startElement ? startElement.line : paragraph.childWidgets[0];\n var endLine = this.viewer.selection.getEndLineWidget(end, endElement, selectionEndIndex);\n selectionEndIndex = endLine.index;\n endElement = endLine.element;\n var endLineWidget = endElement ? endElement.line :\n end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n var top = this.viewer.selection.getTop(startLineWidget);\n var left = this.viewer.selection.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //find result ends in current line.\n var right = this.viewer.selection.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n this.createHighlightBorder(startLineWidget, right - left, left, top);\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n if (paragraph !== startLineWidget.paragraph) {\n paragraph = startLineWidget.paragraph;\n }\n // tslint:disable-next-line:max-line-length\n this.createHighlightBorder(startLineWidget, this.viewer.selection.getWidth(startLineWidget, true) - (left - startLineWidget.paragraph.x), left, top);\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or search result end.\n var startParagraphWidget = void 0;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n if (paragraph === startLineWidget.paragraph) {\n lineIndex += 1;\n }\n this.highlightSearchResultParaWidget(paragraph, lineIndex, endLineWidget, endElement, selectionEndIndex);\n if (paragraph === endLineWidget.paragraph) {\n return;\n }\n else {\n lineIndex = 0;\n }\n }\n }\n }\n };\n /**\n * @private\n */\n Search.prototype.createHighlightBorder = function (lineWidget, width, left, top) {\n var findHighLight = this.addSearchHighlightBorder(lineWidget);\n var page = this.viewer.owner.selection.getPage(lineWidget.paragraph);\n var pageTop = page.boundingRectangle.y;\n var pageLeft = page.boundingRectangle.x;\n findHighLight.left = Math.ceil(left);\n top = Math.ceil(top);\n findHighLight.width = Math.floor(width);\n var height = Math.floor(lineWidget.height);\n var context = this.viewer.containerContext;\n };\n /**\n * Adds search highlight border.\n * @private\n */\n Search.prototype.addSearchHighlightBorder = function (lineWidget) {\n var highlighters = undefined;\n if (this.searchHighlighters.containsKey(lineWidget)) {\n highlighters = this.searchHighlighters.get(lineWidget);\n }\n else {\n highlighters = [];\n this.searchHighlighters.add(lineWidget, highlighters);\n }\n var searchHighlight = new SearchWidgetInfo(0, 0);\n highlighters.push(searchHighlight);\n return searchHighlight;\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Search.prototype.highlightSearchResultParaWidget = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n for (var j = startIndex; j < widget.childWidgets.length; j++) {\n var lineWidget = widget.childWidgets[j];\n if (j === startIndex) {\n top = this.viewer.selection.getTop(lineWidget);\n }\n var left = this.viewer.selection.getLeft(lineWidget);\n if (lineWidget === endLine) {\n //Search result ends in current line.\n var right = this.viewer.selection.getLeftInternal(endLine, endElement, endIndex);\n this.createHighlightBorder(lineWidget, right - left, left, top);\n return;\n }\n this.createHighlightBorder(lineWidget, this.viewer.selection.getWidth(lineWidget, true) - (left - widget.x), left, top);\n top += lineWidget.height;\n }\n };\n //#endregion\n //#region Get find result view\n /**\n * @private\n */\n Search.prototype.addSearchResultItems = function (result) {\n if (isNullOrUndefined(result) || result === '') {\n return;\n }\n if (isNullOrUndefined(this.owner.findResultsList)) {\n this.owner.findResultsList = [];\n }\n this.owner.findResultsList.push(result);\n };\n /**\n * @private\n */\n Search.prototype.addFindResultView = function (textSearchResults) {\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.addFindResultViewForSearch(result);\n }\n this.isHandledOddPageHeader = true;\n this.isHandledOddPageFooter = true;\n this.isHandledEvenPageHeader = true;\n this.isHandledEvenPageFooter = true;\n };\n /**\n * @private\n */\n // tslint:disable:max-func-body-length\n Search.prototype.addFindResultViewForSearch = function (result) {\n if (result.start != null && result.end != null && result.start.paragraph != null && result.end.paragraph != null) {\n var prefixText = void 0;\n var suffixtext = void 0;\n var currentText = void 0;\n var startIndex = 0;\n var inlineObj = result.start.currentWidget.getInline(result.start.offset, startIndex);\n var inline = inlineObj.element;\n startIndex = inlineObj.index;\n var prefix = '';\n var lastIndex = 0;\n if (inline instanceof FieldElementBox) {\n var elementInfo = this.owner.selection.getRenderedInline(inline, startIndex);\n if (elementInfo.element.nextNode instanceof TextElementBox) {\n inline = elementInfo.element.nextNode;\n startIndex = elementInfo.index;\n }\n else {\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n }\n var boxObj = this.owner.selection.getElementBoxInternal(inline, startIndex);\n var box = boxObj.element;\n startIndex = boxObj.index;\n if (box != null) {\n if (box instanceof TextElementBox && startIndex > 0) {\n prefix = box.text.substring(0, startIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n // tslint:disable-next-line:max-line-length\n lastIndex = prefix.lastIndexOf(' ');\n while (lastIndex < 0 && boxIndex > 0 && box.line.children[boxIndex - 1] instanceof TextElementBox) {\n prefix = box.line.children[boxIndex - 1].text + prefix;\n boxIndex--;\n lastIndex = prefix.lastIndexOf(' ');\n }\n }\n var shiftIndex = prefix.lastIndexOf('\\v');\n if (shiftIndex > 0) {\n prefix = prefix.substring(0, shiftIndex);\n }\n else {\n lastIndex = prefix.lastIndexOf(' ');\n prefixText = lastIndex < 0 ? prefix : prefix.substring(lastIndex + 1);\n }\n currentText = result.text;\n var endIndex = 0;\n var endInlineObj = result.end.currentWidget.getInline(result.end.offset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n suffixtext = '';\n //Checks prefix element box is empty\n if (boxObj != null) {\n // Gets the element box using endIndex of the text and set as suffix\n boxObj = this.owner.selection.getElementBoxInternal(endInline, endIndex);\n box = boxObj.element;\n endIndex = boxObj.index;\n }\n //Checks suffix element box is empty.\n if (box != null) {\n if (box instanceof TextElementBox && endIndex < box.length) {\n suffixtext = box.text.substring(endIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n // tslint:disable-next-line:max-line-length\n while (boxIndex + 1 < box.line.children.length && (box.line.children[boxIndex + 1] instanceof TextElementBox) || (box.line.children[boxIndex + 1] instanceof FieldElementBox)) {\n if (box.line.children[boxIndex + 1] instanceof FieldElementBox) {\n boxIndex = boxIndex + 2;\n }\n else {\n suffixtext = suffixtext + box.line.children[boxIndex + 1].text;\n boxIndex = boxIndex + 1;\n }\n }\n }\n lastIndex = suffixtext.lastIndexOf(' ');\n suffixtext = suffixtext === '\\v' ? suffixtext = '' : suffixtext;\n var headerFooterString = '';\n if (result.isHeader) {\n headerFooterString = '' + 'Header' + ': ' + '';\n }\n else if (result.isFooter) {\n headerFooterString = '' + 'Footer' + ': ' + '';\n }\n else {\n headerFooterString = '';\n headerFooterString = '';\n this.isHandledOddPageHeader = true;\n this.isHandledEvenPageHeader = true;\n this.isHandledOddPageFooter = true;\n this.isHandledEvenPageFooter = true;\n }\n var listElement = '';\n var page = result.viewer.selection.getPage(result.start.paragraph);\n if (isNullOrUndefined(this.isHandledEvenPageHeader) && isNullOrUndefined(this.isHandledEvenPageFooter)) {\n this.isHandledEvenPageHeader = true;\n this.isHandledEvenPageFooter = true;\n }\n else if (isNullOrUndefined(this.isHandledOddPageHeader) && isNullOrUndefined(this.isHandledOddPageFooter)) {\n this.isHandledOddPageHeader = true;\n this.isHandledOddPageFooter = true;\n }\n if (result.isHeader) {\n if (page.headerWidget.headerFooterType === 'FirstPageHeader' && page.bodyWidgets[0].sectionFormat.differentFirstPage) {\n // tslint:disable-next-line:max-line-length\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n else if (page.headerWidget.headerFooterType === 'EvenHeader' && this.isHandledEvenPageHeader) {\n // tslint:disable-next-line:max-line-length\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledEvenPageHeader = false;\n // tslint:disable-next-line:max-line-length\n }\n else if (page.headerWidget.headerFooterType === 'OddHeader' && this.isHandledOddPageHeader) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledOddPageHeader = false;\n }\n }\n else if (result.isFooter) {\n if (page.footerWidget.headerFooterType === 'FirstPageFooter' && page.bodyWidgets[0].sectionFormat.differentFirstPage) {\n // tslint:disable-next-line:max-line-length\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n else if (page.footerWidget.headerFooterType === 'EvenFooter' && this.isHandledEvenPageFooter) {\n // tslint:disable-next-line:max-line-length\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledEvenPageFooter = false;\n // tslint:disable-next-line:max-line-length\n }\n else if (page.footerWidget.headerFooterType === 'OddFooter' && this.isHandledOddPageFooter) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.isHandledOddPageFooter = false;\n }\n // tslint:disable-next-line:max-line-length\n }\n else if (!result.isHeader && !result.isFooter) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n }\n this.addSearchResultItems(listElement);\n }\n };\n //#endregion\n /**\n * Clears search highlight.\n * @private\n */\n Search.prototype.clearSearchHighlight = function () {\n if (!isNullOrUndefined(this.searchHighlighters)) {\n this.searchHighlighters.clear();\n this.searchHighlighters = undefined;\n }\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger('searchResultsChange', eventArgs);\n };\n /**\n * @private\n */\n Search.prototype.destroy = function () {\n if (this.textSearchResults) {\n this.textSearchResults.destroy();\n }\n };\n return Search;\n}());\nexport { Search };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * Options Pane class.\n */\nvar OptionsPane = /** @class */ (function () {\n /**\n * Constructor for Options pane module\n * @param {LayoutViewer} layoutViewer\n * @private\n */\n function OptionsPane(layoutViewer) {\n var _this = this;\n /**\n * @private\n */\n this.isOptionsPaneShow = false;\n this.findOption = 'None';\n this.matchCase = undefined;\n this.wholeWord = undefined;\n // private regular: CheckBox = undefined;\n this.searchText = 'Navigation';\n this.resultsText = 'Results';\n this.messageDivText = 'No matches';\n this.replaceButtonText = 'Replace';\n this.replaceAllButtonText = 'Replace All';\n this.focusedIndex = -1;\n this.focusedElement = [];\n this.isOptionsPane = true;\n this.replacePaneText = 'Replace';\n this.findPaneText = 'Find';\n this.matchDivReplaceText = 'No matches';\n /**\n * @private\n */\n this.tabInstance = undefined;\n /**\n * @private\n */\n this.isReplace = false;\n /**\n * Gets selected tab item which tab is selected.\n * @param {SelectEventArgs} args - Specifies which tab will be opened.\n * @private\n */\n this.selectedTabItem = function (args) {\n if (args.previousIndex !== args.selectedIndex) {\n var previousTab = document.querySelector('#e-content_' + args.previousIndex);\n var nextTab = document.querySelector('#e-content_' + args.selectedIndex);\n nextTab.insertBefore(previousTab.firstElementChild, nextTab.firstChild);\n }\n if (args.selectedIndex === 0 && !isNullOrUndefined(document.querySelector('#e-content_' + args.selectedIndex))) {\n _this.isOptionsPane = true;\n _this.onFindPane();\n }\n if (args.selectedIndex === 1 && !isNullOrUndefined(document.querySelector('#e-content_' + args.selectedIndex))) {\n _this.isOptionsPane = false;\n _this.onReplacePane();\n }\n };\n this.searchOptionChange = function () {\n _this.clearSearchResultItems();\n _this.viewer.owner.searchModule.clearSearchHighlight();\n var inputText = _this.searchInput.value;\n if (inputText === '') {\n return;\n }\n var pattern = _this.viewer.owner.searchModule.textSearch.stringToRegex(inputText, _this.findOption);\n var endSelection = _this.viewer.selection.end;\n var selectionIndex = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.viewer.owner.searchModule.textSearch.findAll(pattern, _this.findOption, selectionIndex);\n if (_this.results != null && _this.results.length > 0) {\n _this.navigateSearchResult();\n }\n else {\n _this.viewer.renderVisiblePages();\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Apply find option based on whole words value.\n * @param {ChangeEventArgs} args - Specifies the search options value.\n * @private\n */\n this.wholeWordsChange = function (args) {\n if (_this.matchInput.checked && _this.wholeInput.checked) {\n _this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (_this.matchInput.checked && !(_this.wholeInput.checked)) {\n _this.findOption = 'CaseSensitive';\n }\n else if (!(_this.matchInput.checked) && _this.wholeInput.checked) {\n _this.findOption = 'WholeWord';\n }\n else {\n _this.findOption = 'None';\n }\n _this.searchOptionChange();\n };\n /**\n * Apply find option based on match value.\n * @param {ChangeEventArgs} args - Specifies the search options value.\n * @private\n */\n this.matchChange = function (args) {\n if (_this.matchInput.checked && _this.wholeInput.checked) {\n _this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (!(_this.matchInput.checked) && _this.wholeInput.checked) {\n _this.findOption = 'WholeWord';\n }\n else if (_this.matchInput.checked && !(_this.wholeInput.checked)) {\n _this.findOption = 'CaseSensitive';\n }\n else {\n _this.findOption = 'None';\n }\n _this.searchOptionChange();\n };\n /**\n * Apply find options based on regular value.\n * @param {ChangeEventArgs} args - Specifies the search options value.\n * @private\n */\n // public regularChange = (args: ChangeEventArgs): void => {\n // if (args.checked) {\n // this.matchCase.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.matchCase.checked = false;\n // this.wholeWord.checked = false;\n // this.findOption = 'None';\n // this.onKeyDownInternal();\n // } else {\n // this.matchCase.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // }\n // }\n // tslint:enable:no-any \n /**\n * Binding events from the element when optins pane creation.\n * @private\n */\n this.onWireEvents = function () {\n _this.searchIcon.addEventListener('click', _this.searchIconClickInternal);\n _this.navigateToNextResult.addEventListener('click', _this.navigateNextResultButtonClick);\n _this.navigateToPreviousResult.addEventListener('click', _this.navigatePreviousResultButtonClick);\n _this.searchInput.addEventListener('keydown', _this.onKeyDown);\n _this.searchInput.addEventListener('keyup', _this.onEnableDisableReplaceButton);\n _this.resultsListBlock.addEventListener('click', _this.resultListBlockClick);\n _this.closeButton.addEventListener('click', _this.close);\n _this.replaceButton.addEventListener('click', _this.onReplaceButtonClick);\n _this.replaceAllButton.addEventListener('click', _this.onReplaceAllButtonClick);\n };\n /**\n * Enable find pane only.\n * @private\n */\n this.onFindPane = function () {\n _this.replaceDiv.style.display = 'none';\n _this.occurrenceDiv.style.display = 'none';\n if (!isNullOrUndefined(_this.results) && _this.results.length === 0) {\n _this.resultsListBlock.innerHTML = '';\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n }\n _this.resultsListBlock.style.height = _this.resultsListBlock.offsetHeight + _this.replaceTabContentDiv.offsetHeight + 'px';\n _this.replaceTabContentDiv.style.display = 'none';\n _this.findDiv.style.display = 'block';\n _this.messageDiv.style.display = 'block';\n _this.focusedElement = [];\n // tslint:disable-next-line:max-line-length\n _this.focusedElement.push(_this.closeButton, _this.findTabButtonHeader, _this.replaceTabButtonHeader, _this.searchInput, _this.searchIcon, _this.navigateToPreviousResult, _this.navigateToNextResult, _this.matchInput, _this.wholeInput);\n _this.focusedIndex = 3;\n _this.searchInput.select();\n _this.getMessageDivHeight();\n };\n this.onEnableDisableReplaceButton = function () {\n if (_this.searchInput.value.length !== 0) {\n _this.replaceButton.disabled = false;\n _this.replaceAllButton.disabled = false;\n }\n else {\n _this.replaceButton.disabled = true;\n _this.replaceAllButton.disabled = true;\n }\n };\n /**\n * Enable replace pane only.\n * @private\n */\n this.onReplacePane = function () {\n _this.findDiv.style.display = 'block';\n _this.replaceDiv.style.display = 'block';\n _this.replaceTabContentDiv.style.display = 'block';\n _this.resultsListBlock.style.height = _this.resultsListBlock.offsetHeight - _this.replaceTabContentDiv.offsetHeight + 'px';\n _this.isOptionsPane = false;\n if (_this.searchInput.value.length !== 0) {\n _this.replaceButton.disabled = false;\n _this.replaceAllButton.disabled = false;\n }\n else {\n _this.replaceButton.disabled = true;\n _this.replaceAllButton.disabled = true;\n }\n _this.focusedElement = [];\n // tslint:disable-next-line:max-line-length\n _this.focusedElement.push(_this.closeButton, _this.findTabButtonHeader, _this.replaceTabButtonHeader, _this.searchInput, _this.searchIcon, _this.navigateToPreviousResult, _this.navigateToNextResult, _this.matchInput, _this.wholeInput, _this.replaceWith, _this.replaceButton, _this.replaceAllButton);\n _this.focusedIndex = 9;\n if (_this.searchInput.value === '') {\n _this.searchInput.select();\n }\n else {\n _this.replaceWith.select();\n }\n _this.getMessageDivHeight();\n };\n /**\n * Fires on key down on options pane.\n * @param {KeyboardEvent} event - Specifies the focus of current element.\n * @private\n */\n this.onKeyDownOnOptionPane = function (event) {\n // if (event.keyCode === 70) {\n // event.preventDefault();\n // return;\n // }\n if (event.keyCode === 9) {\n event.preventDefault();\n var focusIndex = undefined;\n if (event.shiftKey) {\n focusIndex = (_this.focusedIndex === 0 || isNullOrUndefined(_this.focusedIndex)) ?\n _this.focusedElement.length - 1 : _this.focusedIndex - 1;\n }\n else {\n focusIndex = (_this.focusedElement.length - 1 === _this.focusedIndex || isNullOrUndefined(_this.focusedIndex)) ?\n 0 : _this.focusedIndex + 1;\n }\n var element = _this.focusedElement[focusIndex];\n element.focus();\n if (element instanceof HTMLInputElement) {\n element.select();\n }\n _this.focusedIndex = focusIndex;\n if (element instanceof HTMLLIElement) {\n _this.scrollToPosition(element);\n }\n }\n else if (event.keyCode === 13) {\n // tslint:disable-next-line:max-line-length\n if (event.target !== _this.searchInput && event.target !== _this.closeButton) {\n event.preventDefault();\n var index = _this.focusedElement.indexOf(event.target);\n if (index !== -1) {\n var list = _this.focusedElement[index];\n list.click();\n list.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else if (event.keyCode === 40 || event.keyCode === 38) {\n if (_this.resultsListBlock.style.display !== 'none') {\n var index = void 0;\n var element = void 0;\n if (event.keyCode === 40) {\n if (_this.focusedIndex > 7) {\n if (_this.focusedIndex + 1 < _this.focusedElement.length) {\n element = _this.focusedElement[_this.focusedIndex + 1];\n element.focus();\n _this.focusedIndex = _this.focusedIndex + 1;\n }\n }\n else {\n index = (_this.focusedElement.length - _this.resultsListBlock.children.length) + _this.results.currentIndex + 1;\n if (index < _this.focusedElement.length) {\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else {\n if (_this.focusedIndex > 8) {\n index = _this.focusedIndex - 1;\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n }\n };\n /**\n * Fires on replace.\n * @private\n */\n this.onReplaceButtonClick = function () {\n var optionsPane = _this.optionsPane;\n var findText = _this.searchInput.value;\n var replaceText = _this.replaceWith.value;\n var results = _this.viewer.owner.searchModule.textSearchResults;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n if (_this.viewer.owner.selection != null) {\n var selectionText = _this.viewer.owner.selection.text;\n if (!_this.viewer.owner.selection.isEmpty) {\n if (_this.viewer.owner.selection.isForward) {\n _this.viewer.owner.selection.selectContent(_this.viewer.owner.selection.start, true);\n }\n else {\n _this.viewer.owner.selection.selectContent(_this.viewer.owner.selection.end, true);\n }\n }\n if (!isNullOrUndefined(results) && !isNullOrUndefined(results.currentSearchResult)) {\n var result = results.currentSearchResult;\n _this.viewer.owner.searchModule.navigate(result);\n if (result.text === selectionText) {\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n _this.viewer.owner.searchModule.replace(replace, result, results);\n var pattern = _this.viewer.owner.searchModule.textSearch.stringToRegex(findText, _this.findOption);\n var endSelection = _this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n // tslint:disable-next-line:max-line-length\n _this.viewer.owner.searchModule.textSearchResults = _this.viewer.owner.searchModule.textSearch.findAll(pattern, _this.findOption, index);\n _this.results = _this.viewer.owner.searchModule.textSearchResults;\n if (!isNullOrUndefined(_this.results) && !isNullOrUndefined(_this.results.currentSearchResult)) {\n _this.viewer.owner.searchModule.navigate(_this.results.currentSearchResult);\n }\n else {\n _this.messageDiv.style.display = 'block';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n _this.viewer.owner.findResultsList = [];\n if (!isNullOrUndefined(_this.results) && _this.results.innerList.length > 0) {\n _this.navigateSearchResult();\n }\n else {\n _this.resultsListBlock.innerHTML = '';\n }\n }\n }\n else {\n _this.messageDiv.style.display = 'block';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n }\n }\n };\n /**\n * Fires on replace all.\n * @private\n */\n this.onReplaceAllButtonClick = function () {\n _this.replaceAll();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = '';\n };\n /**\n * Fires on search icon.\n * @private\n */\n this.searchIconClickInternal = function () {\n // tslint:disable:no-any \n var inputElement = document.getElementById(_this.viewer.owner.containerId + '_option_search_text_box');\n // tslint:enable:no-any\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n inputElement.value = '';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.matchDiv.style.display = 'none';\n _this.occurrenceDiv.style.display = 'none';\n _this.onEnableDisableReplaceButton();\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n _this.clearSearchResultItems();\n _this.viewer.owner.searchModule.clearSearchHighlight();\n _this.viewer.renderVisiblePages();\n return;\n }\n if (_this.searchIcon.classList.contains('e-de-op-search-icon') && text.length >= 1) {\n _this.searchIcon.classList.add('e-de-op-search-close-icon');\n _this.searchIcon.classList.remove('e-de-op-search-icon');\n _this.onEnableDisableReplaceButton();\n }\n _this.clearSearchResultItems();\n _this.viewer.owner.searchModule.clearSearchHighlight();\n var patterns = _this.viewer.owner.searchModule.textSearch.stringToRegex(text, _this.findOption);\n var endSelection = _this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.viewer.owner.searchModule.textSearch.findAll(patterns, _this.findOption, index);\n if (_this.results != null && _this.results.length > 0) {\n _this.navigateSearchResult();\n _this.getMessageDivHeight();\n var resultsContainerHeight = _this.viewer.owner.getDocumentEditorElement().offsetHeight - 215;\n _this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n }\n else {\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Fires on getting next results.\n * @private\n */\n this.navigateNextResultButtonClick = function () {\n if (document.getElementById(_this.viewer.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.viewer.owner.containerId + '_list_box_container').style.display !== 'none') {\n if (_this.results.currentIndex < _this.results.length - 1) {\n _this.results.currentIndex = _this.results.currentIndex + 1;\n var currentelement = _this.results.innerList[_this.results.currentIndex];\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n for (var i = 0; i < _this.resultsListBlock.children.length; i++) {\n var list = _this.resultsListBlock.children[i];\n if (list.classList.contains('e-de-search-result-hglt')) {\n list.classList.remove('e-de-search-result-hglt');\n list.children[0].classList.remove('e-de-op-search-word-text');\n list.classList.add('e-de-search-result-item');\n }\n }\n var listElement = _this.resultsListBlock.children[_this.results.currentIndex];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(listElement);\n }\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n else {\n var currentelement = _this.results.innerList[0];\n _this.results.currentIndex = 0;\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n for (var j = 0; j < _this.resultsListBlock.children.length; j++) {\n var lists = _this.resultsListBlock.children[j];\n if (lists.classList.contains('e-de-search-result-hglt')) {\n lists.classList.remove('e-de-search-result-hglt');\n lists.children[0].classList.remove('e-de-op-search-word-text');\n lists.classList.add('e-de-search-result-item');\n }\n }\n var listElementsDiv = _this.resultsListBlock.children[_this.results.currentIndex];\n if (listElementsDiv.classList.contains('e-de-search-result-item')) {\n listElementsDiv.classList.remove('e-de-search-result-item');\n listElementsDiv.classList.add('e-de-search-result-hglt');\n listElementsDiv.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(listElementsDiv);\n }\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToNextResult);\n }\n };\n /**\n * Fires on getting previous results.\n * @private\n */\n this.navigatePreviousResultButtonClick = function () {\n if (document.getElementById(_this.viewer.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.viewer.owner.containerId + '_list_box_container').style.display !== 'none') {\n if (_this.results.currentIndex === 0) {\n _this.results.currentIndex = _this.results.length - 1;\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.length) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n for (var index = 0; index < _this.resultsListBlock.children.length; index++) {\n var list = _this.resultsListBlock.children[index];\n if (list.classList.contains('e-de-search-result-hglt')) {\n list.classList.remove('e-de-search-result-hglt');\n list.children[0].classList.remove('e-de-op-search-word-text');\n list.classList.add('e-de-search-result-item');\n }\n }\n var liElement = _this.resultsListBlock.children[_this.results.currentIndex];\n if (liElement.classList.contains('e-de-search-result-item')) {\n liElement.classList.remove('e-de-search-result-item');\n liElement.classList.add('e-de-search-result-hglt');\n liElement.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(liElement);\n }\n var currentelement = _this.results.innerList[_this.results.currentIndex];\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n else {\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.results.currentIndex = _this.results.currentIndex - 1;\n for (var j = 0; j < _this.resultsListBlock.children.length; j++) {\n var list = _this.resultsListBlock.children[j];\n if (list.classList.contains('e-de-search-result-hglt')) {\n list.classList.remove('e-de-search-result-hglt');\n list.children[0].classList.remove('e-de-op-search-word-text');\n list.classList.add('e-de-search-result-item');\n }\n }\n var listElements = _this.resultsListBlock.children[_this.results.currentIndex];\n if (listElements.classList.contains('e-de-search-result-item')) {\n listElements.classList.remove('e-de-search-result-item');\n listElements.classList.add('e-de-search-result-hglt');\n listElements.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(listElements);\n }\n var currentelement = _this.results.innerList[_this.results.currentIndex];\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToPreviousResult);\n }\n };\n /**\n * Fires on key down\n * @param {KeyboardEvent} event - Speficies key down actions.\n * @private\n */\n this.onKeyDown = function (event) {\n var code = event.which || event.keyCode;\n if (code === 13 && event.keyCode !== 9 && event.keyCode !== 40) {\n event.preventDefault();\n _this.findDiv.style.height = '';\n _this.onKeyDownInternal();\n }\n else if (code === 8 && (_this.searchInput.value.length === 0)) {\n _this.resultContainer.style.display = 'block';\n }\n else if (event.keyCode !== 9 && event.keyCode !== 40 && event.keyCode !== 27) {\n _this.viewer.owner.searchModule.clearSearchHighlight();\n _this.clearSearchResultItems();\n _this.viewer.renderVisiblePages();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n }\n else if (code === 27 && event.keyCode === 27) {\n _this.showHideOptionsPane(false);\n }\n };\n /**\n * Close the optios pane.\n * @private\n */\n this.close = function () {\n _this.clearFocusElement();\n _this.showHideOptionsPane(false);\n _this.resultsListBlock.innerHTML = '';\n _this.focusedIndex = 1;\n _this.isOptionsPane = true;\n };\n /**\n * Fires on results list block.\n * @param {MouseEvent} args - Specifies which list was clicked.\n * @private\n */\n this.resultListBlockClick = function (args) {\n var currentlist = args.target;\n var element = _this.resultsListBlock.children;\n var index = 0;\n for (var i = 0; i < element.length; i++) {\n var list_1 = element[i];\n if (list_1.classList.contains('e-de-search-result-hglt')) {\n list_1.classList.remove('e-de-search-result-hglt');\n list_1.children[0].classList.remove('e-de-op-search-word-text');\n list_1.classList.add('e-de-search-result-item');\n }\n }\n var list;\n for (var i = 0; i < element.length; i++) {\n if (currentlist === element[i]) {\n index = i;\n list = element[i];\n if (list.classList.contains('e-de-search-result-item')) {\n list.classList.remove('e-de-search-result-item');\n list.classList.add('e-de-search-result-hglt');\n list.children[0].classList.add('e-de-op-search-word-text');\n _this.focusedIndex = _this.focusedElement.indexOf(list);\n }\n }\n }\n var currentelement = _this.results.innerList[index];\n _this.results.currentIndex = index;\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (index + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n list.focus();\n };\n this.viewer = layoutViewer;\n }\n /**\n * Get the module name.\n */\n OptionsPane.prototype.getModuleName = function () {\n return 'OptionsPane';\n };\n /**\n * Initialize the options pane.\n * @param {L10n} localeValue - Specifies the localization based on culture.\n * @private\n */\n // tslint:disable:max-func-body-length\n OptionsPane.prototype.initOptionsPane = function (localeValue) {\n var viewer = this.viewer;\n this.localeValue = localeValue;\n this.optionsPane = createElement('div', { className: 'e-de-op', styles: 'display:none;' });\n this.optionsPane.addEventListener('keydown', this.onKeyDownOnOptionPane);\n this.searchDiv = createElement('div', {\n className: this.viewer.owner.containerId + '_searchDiv e-de-op-header',\n innerHTML: localeValue.getConstant(this.searchText)\n });\n this.optionsPane.appendChild(this.searchDiv);\n // tslint:disable-next-line:max-line-length\n this.closeButton = createElement('button', { className: 'e-de-op-close-button e-de-op-icon-btn e-btn e-flat e-icon-btn', id: 'close' });\n this.optionsPane.appendChild(this.closeButton);\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.focusedElement.push(this.closeButton);\n this.findTab = createElement('div', { id: this.viewer.owner.containerId + '_findTabDiv', className: 'e-de-op-tab' });\n this.optionsPane.appendChild(this.findTab);\n var tabHeader = createElement('div', { className: 'e-tab-header' });\n this.findTab.appendChild(tabHeader);\n this.findTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.findPaneText) });\n this.focusedElement.push(this.findTabButtonHeader);\n tabHeader.appendChild(this.findTabButton);\n this.replaceTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.replacePaneText) });\n this.focusedElement.push(this.replaceTabButtonHeader);\n tabHeader.appendChild(this.replaceTabButton);\n var tabContent = createElement('div', { className: 'e-content' });\n var findTabContent = createElement('div', { id: 'findTabContent' });\n tabContent.appendChild(findTabContent);\n this.findTabContentDiv = createElement('div', { className: 'e-de-search-tab-content' });\n this.searchTextBoxContainer = createElement('div', { className: 'e-input-group e-de-op-input-group' });\n this.findTabContentDiv.appendChild(this.searchTextBoxContainer);\n // tslint:disable-next-line:max-line-length\n this.searchInput = createElement('input', { className: 'e-input e-de-search-input', id: this.viewer.owner.containerId + '_option_search_text_box', attrs: { placeholder: 'Search for' }, styles: 'font-size:14px;' });\n this.searchTextBoxContainer.appendChild(this.searchInput);\n this.searchIcon = createElement('span', {\n className: 'e-de-op-icon e-de-op-search-icon e-input-group-icon e-icon',\n id: this.viewer.owner.containerId + '_search-icon'\n });\n this.searchIcon.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.searchIcon);\n this.focusedElement.push(this.searchIcon);\n // tslint:disable-next-line:max-line-length\n this.navigateToPreviousResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-up e-spin-up e-btn-icon e-icon e-input-group-icon' });\n this.navigateToPreviousResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToPreviousResult);\n this.focusedElement.push(this.navigateToPreviousResult);\n // tslint:disable-next-line:max-line-length\n this.navigateToNextResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-down e-spin-down e-btn-icon e-icon e-input-group-icon' });\n this.navigateToNextResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToNextResult);\n this.focusedElement.push(this.navigateToNextResult);\n var div = createElement('div', { className: 'e-de-op-more-less' });\n this.matchInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.viewer.owner.containerId + '_matchCase'\n });\n div.appendChild(this.matchInput);\n this.matchCase = new CheckBox({ label: 'Match case', checked: false, change: this.matchChange });\n this.matchCase.appendTo(this.matchInput);\n this.focusedElement.push(this.matchInput);\n this.matchInput.tabIndex = 0;\n this.wholeInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.viewer.owner.containerId + '_wholeWord',\n });\n div.appendChild(this.wholeInput);\n this.wholeWord = new CheckBox({ label: 'Whole words', checked: false, change: this.wholeWordsChange });\n this.wholeWord.appendTo(this.wholeInput);\n this.focusedElement.push(this.wholeInput);\n this.wholeInput.tabIndex = 0;\n this.findTabContentDiv.appendChild(div);\n var replaceTabContent = createElement('div');\n tabContent.appendChild(replaceTabContent);\n this.replaceTabContentDiv = createElement('div', { className: 'e-de-op-replacetabcontentdiv', styles: 'display:none;' });\n tabContent.appendChild(this.replaceTabContentDiv);\n this.findTabContentDiv.appendChild(this.replaceTabContentDiv);\n this.createReplacePane();\n this.findDiv = createElement('div', { className: 'findDiv', styles: 'height:250px;display:block;' });\n findTabContent.appendChild(this.findTabContentDiv);\n this.resultContainer = createElement('div', { styles: 'width:85%;display:block;', className: 'e-de-op-result-container' });\n this.findDiv.appendChild(this.resultContainer);\n // tslint:disable-next-line:max-line-length\n this.messageDiv = createElement('div', { className: this.viewer.owner.containerId + '_messageDiv e-de-op-msg', innerHTML: this.localeValue.getConstant(this.messageDivText), id: this.viewer.owner.containerId + '_search_status' });\n this.resultContainer.appendChild(this.messageDiv);\n // tslint:disable-next-line:max-line-length\n this.resultsListBlock = createElement('div', { id: this.viewer.owner.containerId + '_list_box_container', styles: 'display:none;width:270px;list-style:none;padding-right:5px;overflow:auto;', className: 'e-de-result-list-block' });\n this.findDiv.appendChild(this.resultsListBlock);\n this.findTabContentDiv.appendChild(this.findDiv);\n this.findTab.appendChild(tabContent);\n this.tabInstance = new Tab({ selected: this.selectedTabItem });\n this.tabInstance.appendTo(this.findTab);\n var findHeader = this.tabInstance.element.getElementsByClassName('e-item e-toolbar-item')[0];\n this.findTabButtonHeader = findHeader.getElementsByClassName('e-tab-wrap')[0];\n this.findTabButtonHeader.classList.add('e-de-op-find-tab-header');\n this.findTabButtonHeader.tabIndex = 0;\n var replaceHeader = this.tabInstance.element.getElementsByClassName('e-item e-toolbar-item')[1];\n this.replaceTabButtonHeader = replaceHeader.getElementsByClassName('e-tab-wrap')[0];\n this.replaceTabButtonHeader.classList.add('e-de-op-replace-tab-header');\n this.replaceTabButtonHeader.tabIndex = 0;\n this.onWireEvents();\n };\n /**\n * Create replace pane instances.\n */\n OptionsPane.prototype.createReplacePane = function () {\n this.replaceDiv = createElement('div');\n this.replaceTabContentDiv.appendChild(this.replaceDiv);\n this.replaceWith = createElement('input', {\n className: 'e-de-op-replacewith e-input', styles: 'font-size:14px;',\n attrs: { placeholder: 'Replace with' }\n });\n this.replaceDiv.appendChild(this.replaceWith);\n var replaceButtonDiv = createElement('div', { styles: 'text-align:right;', className: 'e-de-op-dlg-footer' });\n this.replaceDiv.appendChild(replaceButtonDiv);\n this.replaceButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replace',\n styles: 'font-size:12px;margin-right:10px;',\n innerHTML: this.localeValue.getConstant(this.replaceButtonText)\n });\n replaceButtonDiv.appendChild(this.replaceButton);\n this.replaceAllButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replaceall',\n styles: 'font-size:12px;',\n innerHTML: this.localeValue.getConstant(this.replaceAllButtonText)\n });\n replaceButtonDiv.appendChild(this.replaceAllButton);\n this.matchDiv = createElement('div', { styles: 'display:none;padding-top:10px;' });\n this.replaceDiv.appendChild(this.matchDiv);\n var emptyDiv6 = createElement('div', { className: 'e-de-op-search-replacediv' });\n this.replaceDiv.appendChild(emptyDiv6);\n this.occurrenceDiv = createElement('div', { styles: 'display:none;' });\n this.replaceDiv.appendChild(this.occurrenceDiv);\n };\n OptionsPane.prototype.navigateSearchResult = function () {\n this.viewer.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n this.viewer.owner.searchModule.highlight(this.results);\n this.viewer.owner.searchModule.addFindResultView(this.results);\n this.resultsListBlock.style.display = 'block';\n this.resultContainer.style.display = 'block';\n var lists = this.viewer.owner.findResultsList;\n var text = '';\n for (var i = 0; i < lists.length; i++) {\n text += lists[i];\n }\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = text;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var currentIndexValue = this.results.currentIndex;\n // tslint:disable-next-line:max-line-length\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result') + ' ' + (currentIndexValue + 1) + ' ' + this.localeValue.getConstant('of') + ' ' + this.resultsListBlock.children.length;\n var listElement = this.resultsListBlock.children[currentIndexValue];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n this.scrollToPosition(listElement);\n }\n };\n /**\n * Fires on key down actions done.\n * @private\n */\n OptionsPane.prototype.onKeyDownInternal = function () {\n // tslint:disable-next-line:max-line-length\n var inputElement = document.getElementById(this.viewer.owner.containerId + '_option_search_text_box');\n inputElement.blur();\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n if (text.length >= 1 && this.searchIcon.classList.contains('e-de-op-search-icon')) {\n this.searchIcon.classList.add('e-de-op-search-close-icon');\n this.searchIcon.classList.remove('e-de-op-search-icon');\n }\n var resultsContainerHeight = this.viewer.owner.getDocumentEditorElement().offsetHeight - 215;\n this.clearSearchResultItems();\n this.viewer.owner.searchModule.clearSearchHighlight();\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(text, this.findOption);\n var endSelection = this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n this.results = this.viewer.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var results = this.results;\n if (isNullOrUndefined(results)) {\n this.viewer.renderVisiblePages();\n }\n if (results != null && results.length > 0) {\n if ((this.focusedElement.indexOf(this.navigateToPreviousResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToPreviousResult);\n }\n if ((this.focusedElement.indexOf(this.navigateToNextResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToNextResult);\n }\n this.viewer.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n this.viewer.owner.searchModule.highlight(results);\n this.viewer.owner.searchModule.addFindResultView(results);\n // if (this.isOptionsPane) {\n this.resultsListBlock.style.display = 'block';\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.resultContainer.style.display = 'block';\n var list = this.viewer.owner.findResultsList;\n var text_1 = '';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n for (var i = 0; i < list.length; i++) {\n text_1 += list[i];\n }\n this.resultsListBlock.innerHTML = text_1;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var lists = this.resultsListBlock.children;\n var currentIndex = this.results.currentIndex;\n // tslint:disable-next-line:max-line-length\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result') + ' ' + (currentIndex + 1) + ' ' + this.localeValue.getConstant('of') + ' ' + this.resultsListBlock.children.length;\n var listElement = this.resultsListBlock.children[currentIndex];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n }\n this.navigateToNextResult.focus();\n this.focusedIndex = 6;\n this.getMessageDivHeight();\n // } else {\n //this.focusedIndex = 4;\n // }\n }\n else {\n this.messageDiv.innerHTML = this.localeValue.getConstant('No matches');\n this.resultContainer.style.display = 'block';\n this.resultsListBlock.style.display = 'none';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n }\n };\n OptionsPane.prototype.getMessageDivHeight = function () {\n if (!this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-msg')) {\n this.messageDiv.classList.add('e-de-op-replace-messagediv');\n this.messageDiv.classList.remove('e-de-op-msg');\n }\n else if (this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-replace-messagediv')) {\n this.messageDiv.classList.add('e-de-op-msg');\n this.messageDiv.classList.remove('e-de-op-replace-messagediv');\n }\n };\n /**\n * Replace all.\n * @private\n */\n OptionsPane.prototype.replaceAll = function () {\n var optionsPane = this.optionsPane;\n var findText = this.searchInput.value;\n var replaceText = this.replaceWith.value;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(findText, this.findOption);\n var endSelection = this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n var results = this.viewer.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n var count = isNullOrUndefined(results) ? 0 : results.length;\n this.viewer.owner.searchModule.replaceAll(replace, results);\n this.matchDiv.style.display = 'block';\n this.matchDiv.innerHTML = this.localeValue.getConstant('All Done') + '!';\n this.occurrenceDiv.style.display = 'block';\n // tslint:disable-next-line:max-line-length\n this.occurrenceDiv.innerHTML = this.localeValue.getConstant('We replaced all') + ' ' + count + ' ' + this.localeValue.getConstant('instances') + ' ' + this.localeValue.getConstant('of') + ' \"' + findText + '\" ' + this.localeValue.getConstant('with') + ' \"' + replaceText + '\" ';\n }\n };\n /**\n * Scrolls to position.\n * @param {HTMLElement} list - Specifies the list element.\n * @private\n */\n OptionsPane.prototype.scrollToPosition = function (list) {\n var rect = list.getBoundingClientRect();\n var top;\n if (rect.top > 0) {\n top = rect.top - list.parentElement.getBoundingClientRect().top;\n if ((list.parentElement.offsetHeight - top) <= list.offsetHeight) {\n if (Math.ceil(top + list.offsetHeight) === list.parentElement.scrollHeight) {\n list.parentElement.scrollTop = top;\n }\n list.parentElement.scrollTop = list.parentElement.scrollTop + (list.parentElement.offsetHeight / 100) * 30;\n }\n else if (top < 0) {\n list.parentElement.scrollTop = list.parentElement.scrollTop - (list.parentElement.offsetHeight / 100) * 30;\n }\n }\n else {\n list.parentElement.scrollTop = 0;\n }\n };\n /**\n * Clear the focus elements.\n * @private\n */\n OptionsPane.prototype.clearFocusElement = function () {\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n var index = this.focusedElement.indexOf(this.resultsListBlock.children[i]);\n if (index !== -1) {\n this.focusedElement.splice(index, 1);\n }\n }\n this.focusedIndex = 0;\n };\n /**\n * Show or hide option pane based on boolean value.\n * @param {boolean} show - Specifies showing or hiding the options pane.\n * @private\n */\n OptionsPane.prototype.showHideOptionsPane = function (show) {\n if (!isNullOrUndefined(this.viewer.owner.selectionModule)) {\n if (show) {\n this.localeValue = new L10n('documenteditor', this.viewer.owner.defaultLocale);\n this.localeValue.setLocale(this.viewer.owner.locale);\n setCulture(this.viewer.owner.locale);\n if (isNullOrUndefined(this.optionsPane)) {\n this.initOptionsPane(this.localeValue);\n //Add Option Pane\n this.viewer.optionsPaneContainer.setAttribute('style', 'display:inline-flex');\n // tslint:disable-next-line:max-line-length\n this.viewer.optionsPaneContainer.insertBefore(this.viewer.owner.optionsPaneModule.optionsPane, this.viewer.viewerContainer);\n }\n this.optionsPane.style.display = 'block';\n if (this.viewer.owner.isReadOnlyMode) {\n this.tabInstance.hideTab(1);\n }\n else {\n this.tabInstance.hideTab(1, false);\n }\n if (this.isReplace && !this.viewer.owner.isReadOnlyMode) {\n this.tabInstance.select(1);\n this.isReplace = false;\n this.isOptionsPane = false;\n }\n else {\n this.tabInstance.select(0);\n }\n this.searchDiv.innerHTML = this.localeValue.getConstant(this.searchText);\n this.isOptionsPaneShow = true;\n // tslint:disable-next-line:max-line-length\n var textBox = document.getElementById(this.viewer.owner.getDocumentEditorElement().id + '_option_search_text_box');\n var selectedText = this.viewer.owner.selection.text;\n if (!isNullOrUndefined(selectedText)) {\n var char = ['\\v', '\\r'];\n var index = HelperMethods.indexOfAny(selectedText, char);\n selectedText = index < 0 ? selectedText : selectedText.substring(0, index);\n }\n textBox.value = selectedText;\n textBox.select();\n this.messageDiv.innerHTML = '';\n if (this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n this.searchIcon.classList.add('e-de-op-search-icon');\n this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n this.viewer.selection.caret.style.display = 'none';\n this.focusedIndex = 3;\n this.focusedElement = [];\n if (this.isOptionsPane) {\n // tslint:disable-next-line:max-line-length\n this.focusedElement.push(this.closeButton, this.findTabButtonHeader, this.replaceTabButtonHeader, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.focusedElement.push(this.closeButton, this.findTabButtonHeader, this.replaceTabButtonHeader, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput, this.replaceWith, this.replaceButton, this.replaceAllButton);\n }\n this.viewer.updateViewerSize();\n }\n else {\n if (!isNullOrUndefined(this.optionsPane)) {\n this.clearSearchResultItems();\n this.viewer.owner.searchModule.clearSearchHighlight();\n this.isOptionsPaneShow = false;\n var resultListBox = document.getElementById(this.viewer.owner.containerId + '_list_box_container');\n var message = document.getElementById(this.viewer.owner.containerId + '_search_status');\n if (!isNullOrUndefined(resultListBox) && !isNullOrUndefined(message)) {\n resultListBox.style.display = 'none';\n this.clearFocusElement();\n resultListBox.innerHTML = '';\n message.innerHTML = this.localeValue.getConstant('No matches');\n }\n }\n this.viewer.updateViewerSize();\n if (!isNullOrUndefined(this.optionsPane)) {\n if (this.optionsPane.style.display !== 'none') {\n this.viewer.selection.updateCaretPosition();\n this.optionsPane.style.display = 'none';\n }\n }\n this.viewer.updateFocus();\n this.viewer.selection.caret.style.display = 'block';\n }\n }\n };\n /**\n * Clears search results.\n * @private\n */\n OptionsPane.prototype.clearSearchResultItems = function () {\n if (!isNullOrUndefined(this.viewer.owner.findResultsList)) {\n this.viewer.owner.findResultsList = [];\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n * @private\n */\n OptionsPane.prototype.destroy = function () {\n if (this.optionsPane) {\n this.optionsPane.innerHTML = '';\n this.optionsPane = undefined;\n }\n if (this.resultsListBlock) {\n this.resultsListBlock.innerHTML = '';\n this.resultsListBlock = undefined;\n }\n if (this.messageDiv) {\n this.messageDiv.innerHTML = '';\n this.messageDiv = undefined;\n }\n if (this.resultContainer) {\n this.resultContainer.innerHTML = '';\n }\n this.resultContainer = undefined;\n if (this.searchInput) {\n this.searchInput.value = '';\n this.searchInput = undefined;\n }\n if (this.searchDiv) {\n this.searchDiv.innerHTML = '';\n this.searchDiv = undefined;\n }\n if (this.searchTextBoxContainer) {\n this.searchTextBoxContainer.innerHTML = '';\n this.searchTextBoxContainer = undefined;\n }\n if (this.replaceWith) {\n this.replaceWith.innerHTML = '';\n this.replaceWith = undefined;\n }\n if (this.findDiv) {\n this.findDiv.innerHTML = '';\n this.findDiv = undefined;\n }\n if (this.replaceButton) {\n this.replaceButton.innerHTML = '';\n this.replaceButton = undefined;\n }\n if (this.replaceAllButton) {\n this.replaceAllButton.innerHTML = '';\n this.replaceAllButton = undefined;\n }\n if (this.matchInput) {\n this.matchInput.innerHTML = '';\n this.matchCase = undefined;\n }\n if (this.wholeInput) {\n this.wholeInput.innerHTML = '';\n this.wholeWord = undefined;\n }\n // if (this.regularInput) {\n // this.regularInput.innerHTML = '';\n // this.regular = undefined;\n // }\n if (!isNullOrUndefined(this.results)) {\n this.results.destroy();\n }\n if (this.focusedElement) {\n this.focusedElement = [];\n }\n this.focusedElement = undefined;\n this.destroyInternal();\n };\n /**\n * Dispose the internal objects which are maintained.\n */\n OptionsPane.prototype.destroyInternal = function () {\n if (this.searchText) {\n this.searchText = undefined;\n }\n if (this.resultsText) {\n this.resultsText = undefined;\n }\n if (this.messageDivText) {\n this.messageDivText = undefined;\n }\n if (this.replaceButtonText) {\n this.replaceButtonText = undefined;\n }\n if (this.replaceAllButtonText) {\n this.replaceAllButtonText = undefined;\n }\n };\n return OptionsPane;\n}());\nexport { OptionsPane };\n","import { TableWidget } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Point, HelperMethods } from './editor-helper';\n/**\n * @private\n */\nvar TableResizer = /** @class */ (function () {\n /**\n * @private\n */\n function TableResizer(node) {\n this.resizeNode = 0;\n this.resizerPosition = 0;\n this.currentResizingTable = undefined;\n this.owner = node;\n this.startingPoint = new Point(0, 0);\n }\n Object.defineProperty(TableResizer.prototype, \"viewer\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets module name.\n */\n TableResizer.prototype.getModuleName = function () {\n return 'TableResizer';\n };\n /**\n * @private\n */\n TableResizer.prototype.updateResizingHistory = function (touchPoint) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateResizingHistory(touchPoint, this);\n }\n this.viewer.isRowOrCellResizing = false;\n this.resizerPosition = -1;\n };\n TableResizer.prototype.handleResize = function (point) {\n this.owner.viewer.isRowOrCellResizing = true;\n this.startingPoint.x = point.x;\n this.startingPoint.y = point.y;\n //Initialize resizing history.\n this.owner.editorHistory.initResizingHistory(point, this);\n };\n //Table Resizing implementation starts\n /**\n * @private\n */\n TableResizer.prototype.isInRowResizerArea = function (touchPoint) {\n var position = this.getRowReSizerPosition(undefined, touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 1;\n this.resizerPosition = position;\n return true;\n }\n };\n TableResizer.prototype.isInCellResizerArea = function (touchPoint) {\n var position = this.getCellReSizerPosition(touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 0;\n this.resizerPosition = position;\n return true;\n }\n };\n /**\n * Gets cell resizer position.\n * @param {Point} point\n * @private\n */\n TableResizer.prototype.getCellReSizerPosition = function (touchPoint) {\n var position = -1;\n var resizerBoundaryWidth = 2;\n var tableWidget = this.getTableWidget(touchPoint);\n var cellWidget = this.getTableCellWidget(touchPoint);\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(tableWidget.x - HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) - 0.25, tableWidget.y, HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) + 0.5, tableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = tableWidget.x;\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n var preferredWidth = HelperMethods.convertPointToPixel(tableWidget.tableHolder.columns[i].preferredWidth);\n // tslint:disable-next-line:max-line-length\n if ((this.viewer.isInsideRect(startingPointX - 1, tableWidget.y, tableWidget.leftBorderWidth + resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n // tslint:disable-next-line:max-line-length\n }\n else if (i > 0 && (this.viewer.isInsideRect(startingPointX + preferredWidth - resizerBoundaryWidth / 2, tableWidget.y, resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(cellWidget)) {\n this.currentResizingTable = cellWidget.ownerTable;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(cellWidget.x - cellWidget.margin.left - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height, touchPoint)) {\n return position = cellWidget.columnIndex;\n // tslint:disable-next-line:max-line-length\n }\n else if (isNullOrUndefined(cellWidget.nextRenderedWidget)\n && this.viewer.isInsideRect(cellWidget.x + cellWidget.margin.right + cellWidget.width - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height, touchPoint)) {\n return position = (cellWidget.columnIndex + cellWidget.cellFormat.columnSpan);\n }\n else if (cellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(cellWidget, touchPoint); // Gets the nested table resizer position.\n }\n }\n }\n return position;\n };\n /**\n * Gets cell resizer position.\n * @param {TableCellWidget} cellWidget\n * @param {Point} touchPoint\n */\n TableResizer.prototype.getCellReSizerPositionInternal = function (cellWidget, touchPoint) {\n var position = -1;\n var childTableWidget = this.getTableWidgetFromWidget(touchPoint, cellWidget);\n var childCellWidget = undefined;\n if (!isNullOrUndefined(childTableWidget) && childTableWidget.tableFormat.cellSpacing > 0) {\n this.currentResizingTable = childTableWidget;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(childTableWidget.x - childTableWidget.leftBorderWidth - 0.25, childTableWidget.y, childTableWidget.leftBorderWidth + 0.5, childTableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = childTableWidget.x;\n for (var i = 0; i < childTableWidget.tableHolder.columns.length; i++) {\n // tslint:disable-next-line:max-line-length\n var preferredWidth = HelperMethods.convertPointToPixel(childTableWidget.tableHolder.columns[i].preferredWidth);\n // tslint:disable-next-line:max-line-length\n if ((this.viewer.isInsideRect(startingPointX - 1, childTableWidget.y, childTableWidget.leftBorderWidth + 2, childTableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n // tslint:disable-next-line:max-line-length\n }\n else if (i > 0 && (this.viewer.isInsideRect(startingPointX + preferredWidth - 1, childTableWidget.y, 2, childTableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(childTableWidget)) {\n childCellWidget = childTableWidget.getTableCellWidget(touchPoint);\n }\n if (!isNullOrUndefined(childCellWidget)) {\n this.currentResizingTable = childCellWidget.ownerTable;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(childCellWidget.x - childCellWidget.margin.left - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = childCellWidget.columnIndex;\n }\n else if (isNullOrUndefined(childCellWidget.nextRenderedWidget)\n // tslint:disable-next-line:max-line-length\n && this.viewer.isInsideRect(childCellWidget.x + childCellWidget.margin.right + childCellWidget.width - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = (childCellWidget.columnIndex + childCellWidget.cellFormat.columnSpan);\n }\n else if (childCellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(childCellWidget, touchPoint);\n }\n }\n }\n return position;\n };\n TableResizer.prototype.getRowReSizerPosition = function (widget, touchPoint) {\n var tableWidget = undefined;\n var cellWidget = undefined;\n if (isNullOrUndefined(widget)) {\n tableWidget = this.getTableWidget(touchPoint);\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n else {\n tableWidget = this.getTableWidgetFromWidget(touchPoint, widget);\n }\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n // tslint:disable-next-line:max-line-length\n if (this.owner.viewer.isInsideRect(tableWidget.x, tableWidget.y + tableWidget.height - cellSpacing, this.getActualWidth(tableWidget.lastChild), (isNullOrUndefined(tableWidget.nextSplitWidget) ? tableWidget.bottomBorderWidth + cellSpacing : 0), touchPoint)) {\n return tableWidget.lastChild.rowIndex;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n //Need to consider for splitted widgets\n var rowWidget = tableWidget.childWidgets[i];\n if (tableWidget.childWidgets.indexOf(rowWidget) > -1\n // tslint:disable-next-line:max-line-length\n && (this.owner.viewer.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height + cellSpacing / 2, this.getActualWidth(rowWidget), cellSpacing / 2, touchPoint))) {\n return rowWidget.rowIndex;\n }\n }\n }\n else {\n if (tableWidget && cellWidget) {\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n if (cellWidget) {\n var rowWidget = cellWidget.containerWidget;\n var height = 0;\n if (rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n height = rowWidget.bottomBorderWidth + 2;\n }\n else {\n height = rowWidget.nextRenderedWidget.topBorderWidth + 2;\n }\n // tslint:disable-next-line:max-line-length\n if (this.owner.viewer.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height - height, rowWidget.width, height * 2, touchPoint)) {\n this.currentResizingTable = rowWidget.ownerTable;\n return rowWidget.rowIndex;\n }\n else {\n if (cellWidget.childWidgets.length > 0) {\n return this.getRowReSizerPosition(cellWidget, touchPoint);\n }\n }\n }\n }\n return -1;\n };\n /**\n * To handle Table Row and cell resize\n * @param touchPoint\n * @private\n */\n TableResizer.prototype.handleResizing = function (touchPoint) {\n var dragValue = 0;\n if (this.resizeNode === 0) {\n dragValue = touchPoint.x - this.startingPoint.x;\n this.resizeTableCellColumn(dragValue);\n }\n else {\n dragValue = touchPoint.y - this.startingPoint.y;\n this.resizeTableRow(dragValue);\n }\n };\n TableResizer.prototype.resizeTableRow = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0) {\n return;\n }\n var selection = this.owner.selection;\n if (table.isInsideTable) {\n this.owner.isLayoutEnabled = false; //Layouting is disabled to skip the child table layouting. \n }\n if (this.resizerPosition > -1) {\n var row = table.childWidgets[this.resizerPosition];\n this.updateRowHeight(row, dragValue);\n selection.selectPosition(selection.start, selection.end);\n }\n if (table.isInsideTable) {\n var parentTable = this.owner.viewer.layout.getParentTable(table);\n this.owner.isLayoutEnabled = true; //layouting is enabled to layout the parent table of the nested table.\n table = parentTable;\n }\n this.startingPoint.y += HelperMethods.convertPointToPixel(dragValue);\n this.owner.viewer.layout.reLayoutTable(table);\n this.owner.editorModule.reLayout(this.owner.selection);\n };\n /**\n * Gets the table widget from given cursor point\n * @param cursorPoint\n */\n TableResizer.prototype.getTableWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.viewer.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[i];\n widget = this.getTableWidgetFromWidget(cursorPoint, bodyWidget);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.getTableWidgetFromWidget = function (point, widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n if (widget.childWidgets[j] instanceof TableWidget) {\n var childWidget = widget.childWidgets[j];\n if (childWidget.y <= point.y && (childWidget.y + childWidget.height) >= point.y) {\n return childWidget;\n }\n }\n }\n return undefined;\n };\n /**\n * Return the table cell widget from the given cursor point\n * @param cursorPoint\n * @private\n */\n TableResizer.prototype.getTableCellWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.viewer.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[i];\n widget = bodyWidget.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.updateRowHeight = function (row, dragValue) {\n var rowFormat = row.rowFormat;\n if (rowFormat.heightType === 'Auto') {\n rowFormat.heightType = 'AtLeast';\n var row_1 = rowFormat.ownerBase;\n var currentHeight = this.owner.viewer.layout.getRowHeight(row_1, [row_1]);\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (currentHeight + dragValue >= 2.7 && rowFormat.height !== currentHeight + dragValue) {\n rowFormat.height = currentHeight + dragValue;\n }\n }\n else {\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (rowFormat.height + dragValue >= 2.7 && rowFormat.height !== rowFormat.height + dragValue) {\n rowFormat.height = rowFormat.height + dragValue;\n }\n }\n };\n //Resize Table cell\n TableResizer.prototype.resizeTableCellColumn = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0 || isNullOrUndefined(table.childWidgets)) {\n return;\n }\n var selectionFlag = true;\n var selection = this.owner.selection;\n this.owner.editor.setOffsetValue(selection);\n table = table.combineWidget(this.viewer);\n this.owner.isLayoutEnabled = false;\n // table.PreserveGrid = true;\n this.setPreferredWidth(table);\n var containerWidth = table.getOwnerWidth(true);\n var newIndent = table.leftIndent;\n var tableAlignment = table.tableFormat.tableAlignment;\n if (!selection.isEmpty) {\n selectionFlag = this.resizeColumnWithSelection(selection, table, dragValue);\n }\n if (!selectionFlag) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n if (this.resizerPosition === 0) {\n // Todo: need to handle the resizing of first column and table indent.\n var columnIndex = this.resizerPosition;\n var rightColumn = table.tableHolder.columns[columnIndex];\n var width = rightColumn.preferredWidth;\n if (dragValue > 0) {\n var prevDragValue = dragValue;\n do {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minWidth) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n break;\n }\n else {\n prevDragValue = dragValue;\n dragValue += newWidth - rightColumn.minWidth;\n }\n } while (dragValue !== prevDragValue);\n }\n else {\n var prevDragValue = dragValue;\n do {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth <= 2112) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n break;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - 2112;\n }\n } while (dragValue !== prevDragValue);\n }\n var dragOffset = dragValue;\n // tslint:disable-next-line:max-line-length\n if (tableAlignment !== 'Left' && (table.tableHolder.getTotalWidth() > containerWidth) && table.tableFormat.preferredWidthType === 'Auto') {\n if (table.tableHolder.isFitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto')) {\n // tslint:disable-next-line:max-line-length\n table.tableHolder.fitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n }\n else {\n rightColumn.preferredWidth = width;\n }\n dragOffset = 0;\n }\n if (tableAlignment === 'Center'\n && (table.tableHolder.getTotalWidth() < containerWidth || table.tableFormat.preferredWidthType !== 'Auto')) {\n dragOffset = dragOffset / 2;\n }\n table.tableFormat.leftIndent = tableAlignment === 'Left' ? newIndent : 0;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth();\n this.updateCellPreferredWidths(table);\n this.updateGridValue(table, true, dragOffset);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n // Todo: need to handle the resizing of last column and table width.\n this.resizeColumnAtLastColumnIndex(table, dragValue, containerWidth);\n }\n else {\n if (this.resizerPosition === -1) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n this.resizeCellAtMiddle(table, dragValue);\n }\n // table.PreserveGrid = false;\n this.owner.isLayoutEnabled = true;\n selection.selectPosition(selection.start, selection.end);\n };\n /**\n * Resize Selected Cells\n */\n TableResizer.prototype.resizeColumnWithSelection = function (selection, table, dragValue) {\n var newIndent = table.leftIndent;\n var cellwidget = this.getTableCellWidget(this.startingPoint);\n if (cellwidget && (selection.selectedWidgets.containsKey(cellwidget) || (cellwidget.previousWidget\n && selection.selectedWidgets.containsKey((cellwidget.previousWidget))))) {\n var selectedCells = selection.getSelectedCells();\n if (this.resizerPosition === 0) {\n this.resizeColumnAtStart(table, dragValue, selectedCells);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n var leftColumnCollection = this.getColumnCells(table, this.resizerPosition, true);\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n if (selectedCells.indexOf(cell) !== -1) {\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n }\n }\n //Updates the grid after value for all the rows.\n this.updateRowsGridAfterWidth(table);\n table.updateWidth(dragValue);\n this.updateGridValue(table, true, dragValue);\n }\n else {\n if (this.resizerPosition === -1) {\n return false;\n }\n var columnIndex = this.resizerPosition;\n var leftColumnCollection = this.getColumnCells(table, columnIndex, true);\n var rightColumnCollection = this.getColumnCells(table, columnIndex, false);\n var isColumnResizing = this.isColumnSelected(table, columnIndex);\n if (leftColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n if (selectedCells.indexOf(leftColumnCollection[i]) === -1) {\n leftColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n if (rightColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n if (selectedCells.indexOf(rightColumnCollection[i]) === -1) {\n rightColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n //Getting the adjacent cell collections for left side selected cells in the right column collection.\n if (leftColumnCollection.length === 0 && rightColumnCollection.length > 0) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[i];\n if (cell.previousWidget) {\n leftColumnCollection.push(cell.previousWidget);\n }\n }\n }\n else if (rightColumnCollection.length === 0 && leftColumnCollection.length > 0) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n if (cell.nextWidget) {\n rightColumnCollection.push(cell.nextWidget);\n }\n }\n }\n this.changeWidthOfCells(table, leftColumnCollection, rightColumnCollection, dragValue, true);\n this.updateGridValue(table, true, dragValue);\n }\n selection.selectPosition(selection.start, selection.end);\n }\n return false;\n };\n /**\n * Resize selected cells at resizer position 0\n */\n TableResizer.prototype.resizeColumnAtStart = function (table, dragValue, selectedCells) {\n var newIndent = table.leftIndent;\n var rightColumnCollection = this.getColumnCells(table, this.resizerPosition, false);\n var offset = 0;\n var selectedRow = selectedCells[0].ownerRow;\n var rowFormat = selectedRow.rowFormat;\n if (rowFormat.beforeWidth > 0) {\n var newGridBefore = rowFormat.beforeWidth + dragValue;\n if (newGridBefore > 0) {\n this.updateGridBefore(selectedRow, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n if (newGridBefore < leastGridBefore && offset !== newGridBefore) {\n newIndent = table.leftIndent + newGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedRow !== tableRow) {\n this.updateGridBefore(tableRow, -newGridBefore);\n }\n }\n }\n }\n }\n else {\n if (dragValue < 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n var currentTableIndent = table.tableFormat.leftIndent;\n if (currentTableIndent === 0) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.updateGridBefore(tableRow, dragValue);\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n }\n }\n else {\n var difference = leastGridBefore - dragValue;\n if (difference > 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n newIndent = table.leftIndent + leastGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n this.updateGridBefore(tableRow, dragValue - leastGridBefore);\n }\n else {\n this.updateGridBefore(tableRow, -leastGridBefore);\n }\n }\n }\n }\n }\n }\n this.updateGridValue(table, true, dragValue);\n };\n TableResizer.prototype.updateWidthForCells = function (table, selectedCells, dragValue) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n else {\n this.updateGridBefore(tableRow, -dragValue);\n }\n }\n };\n /**\n * Resize selected cells at last column\n */\n TableResizer.prototype.resizeColumnAtLastColumnIndex = function (table, dragValue, containerWidth) {\n var tableAlignment = table.tableFormat.tableAlignment;\n var preferredWidth = table.tableFormat.preferredWidth;\n var hasTableWidth = preferredWidth;\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var prevDragValue = 0;\n while (dragValue !== prevDragValue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minWidth) {\n leftColumn.preferredWidth = newWidth;\n prevDragValue = dragValue;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - leftColumn.minWidth;\n }\n }\n this.updateCellPreferredWidths(table);\n if (hasTableWidth || table.tableHolder.getTotalWidth() > containerWidth) {\n table.updateWidth(dragValue);\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth();\n }\n var dragOffset = dragValue;\n if (tableAlignment === 'Right') {\n dragOffset = 0;\n }\n else if (tableAlignment === 'Center') {\n dragOffset = dragOffset / 2;\n }\n this.updateGridValue(table, true, dragOffset);\n };\n /**\n * Resize selected cells at middle column\n */\n TableResizer.prototype.resizeCellAtMiddle = function (table, dragValue) {\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var rightColumn = table.tableHolder.columns[columnIndex];\n if (dragValue > 0) {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minWidth) {\n rightColumn.preferredWidth = newWidth;\n leftColumn.preferredWidth = leftColumn.preferredWidth + dragValue;\n isContinue = false;\n }\n else {\n dragValue += newWidth - rightColumn.minWidth;\n }\n }\n }\n else {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minWidth) {\n leftColumn.preferredWidth = newWidth;\n rightColumn.preferredWidth = rightColumn.preferredWidth - dragValue;\n isContinue = false;\n }\n else {\n dragValue -= newWidth - leftColumn.minWidth;\n }\n }\n }\n // Update the cell widths based on the columns preferred width\n this.updateCellPreferredWidths(table);\n // table.tableFormat.AllowAutoFit = false;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth();\n this.updateGridValue(table, false, dragValue);\n };\n TableResizer.prototype.updateGridValue = function (table, isUpdate, dragValue) {\n if (isUpdate) {\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.owner.isLayoutEnabled = true;\n if (table.isInsideTable) {\n var parentTable = this.viewer.layout.getParentTable(table);\n this.viewer.layout.reLayoutTable(parentTable); // Need to optmize this.\n }\n else {\n this.viewer.layout.reLayoutTable(table);\n }\n this.owner.editor.getOffsetValue(this.viewer.selection);\n this.owner.editorModule.reLayout(this.owner.selection);\n if (dragValue) {\n this.startingPoint.x += HelperMethods.convertPointToPixel(dragValue);\n this.resizerPosition = this.getCellReSizerPosition(this.startingPoint);\n }\n };\n TableResizer.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n TableResizer.prototype.updateGridBefore = function (row, offset) {\n if (row.rowFormat.beforeWidth + offset !== row.rowFormat.beforeWidth) {\n row.rowFormat.beforeWidth = row.rowFormat.beforeWidth + offset;\n row.rowFormat.gridBeforeWidth = row.rowFormat.beforeWidth;\n }\n };\n TableResizer.prototype.getLeastGridBefore = function (table, ignoreRow) {\n var gridBefore = 0;\n var flag = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row !== ignoreRow) {\n if (flag === 0) {\n gridBefore = row.rowFormat.beforeWidth;\n flag++;\n }\n if (row.rowFormat.beforeWidth <= gridBefore) {\n gridBefore = row.rowFormat.beforeWidth;\n }\n }\n }\n return gridBefore;\n };\n TableResizer.prototype.increaseOrDecreaseWidth = function (cell, dragValue, isIncrease) {\n var preferredWidth = cell.cellFormat.preferredWidth;\n if (cell.cellFormat.preferredWidthType === 'Auto') {\n preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n var minimumWidth = cell.ownerColumn.minWidth;\n if (cell.cellFormat.preferredWidthType === 'Percent') {\n minimumWidth = cell.convertPointToPercent(minimumWidth);\n }\n // Margins properties usedd for internal purpose.\n if (isIncrease) {\n cell.cellFormat.preferredWidth = preferredWidth + dragValue > minimumWidth ? preferredWidth + dragValue : minimumWidth;\n }\n else {\n cell.cellFormat.preferredWidth = preferredWidth - dragValue > minimumWidth ? preferredWidth - dragValue : minimumWidth;\n }\n };\n // tslint:disable-next-line:max-line-length\n TableResizer.prototype.changeWidthOfCells = function (table, leftColumnCollection, rightColumnCollection, dragValue, isSelection) {\n if (leftColumnCollection.length > 0) {\n var flag = false;\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n if (cell.cellIndex === cell.ownerRow.childWidgets.length - 1) {\n flag = true;\n }\n }\n if (flag) {\n this.updateRowsGridAfterWidth(table);\n }\n }\n if (rightColumnCollection.length > 0) {\n var diff = 0;\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[i];\n if (cell.cellIndex === 0) {\n var newGridBefore = cell.ownerRow.rowFormat.beforeWidth + dragValue;\n if (newGridBefore >= 0) {\n this.updateGridBefore(cell.ownerRow, dragValue);\n }\n else {\n if (diff !== newGridBefore) {\n diff = newGridBefore;\n }\n cell.ownerRow.rowFormat.gridBeforeWidth = 0;\n cell.ownerRow.rowFormat.gridBeforeWidthType = 'Auto';\n }\n }\n this.increaseOrDecreaseWidth(cell, dragValue, false);\n }\n if (diff !== 0) {\n var newIndent = table.leftIndent + diff;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n if (rightColumnCollection.indexOf(row.childWidgets[0]) === -1) {\n this.updateGridBefore(row, diff > 0 ? diff : -diff);\n }\n }\n }\n }\n };\n TableResizer.prototype.updateRowsGridAfterWidth = function (table) {\n var maxRowWidth = this.getMaxRowWidth(table, true);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var currentRowWidth = this.getRowWidth(row, true);\n if (maxRowWidth >= currentRowWidth && row.rowFormat.afterWidth !== maxRowWidth - currentRowWidth) {\n var value = maxRowWidth - currentRowWidth;\n row.rowFormat.gridAfterWidth = value;\n row.rowFormat.afterWidth = value;\n }\n }\n };\n TableResizer.prototype.getRowWidth = function (row, toUpdateGridAfter) {\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n rowWidth += cell.cellFormat.cellWidth;\n }\n return rowWidth;\n };\n TableResizer.prototype.getMaxRowWidth = function (table, toUpdateGridAfter) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i_1 = 0; i_1 < row.childWidgets.length; i_1++) {\n var cell = row.childWidgets[i_1];\n rowWidth += cell.cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.isColumnSelected = function (table, columnIndex) {\n var selection = this.owner.selection;\n var selectedCells = selection.getSelectedCells();\n var leftColumnCells = this.getColumnCells(table, columnIndex, true);\n var rightColumnCells = this.getColumnCells(table, columnIndex, false);\n var isColumnSelected = false;\n for (var i = 0; i < leftColumnCells.length; i++) {\n var columnCell = leftColumnCells[i];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n if (!isColumnSelected) {\n for (var i = 0; i < rightColumnCells.length; i++) {\n var columnCell = rightColumnCells[i];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n }\n return isColumnSelected;\n };\n TableResizer.prototype.applyProperties = function (table, tableHistoryInfo) {\n if (isNullOrUndefined(tableHistoryInfo)) {\n return;\n }\n table = table;\n // PreserveGrid = true;\n if (tableHistoryInfo.tableHolder) {\n table.tableHolder = tableHistoryInfo.tableHolder.clone();\n }\n if (tableHistoryInfo.tableFormat !== null) {\n table.tableFormat.leftIndent = tableHistoryInfo.tableFormat.leftIndent;\n table.tableFormat.preferredWidth = tableHistoryInfo.tableFormat.preferredWidth;\n table.tableFormat.preferredWidthType = tableHistoryInfo.tableFormat.preferredWidthType;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowFormat = tableHistoryInfo.rows[i];\n row.rowFormat.gridBefore = rowFormat.gridBefore;\n row.rowFormat.gridBeforeWidth = rowFormat.gridBeforeWidth;\n row.rowFormat.gridBeforeWidthType = rowFormat.gridBeforeWidthType;\n row.rowFormat.gridAfter = rowFormat.gridAfter;\n row.rowFormat.gridAfterWidth = rowFormat.gridAfterWidth;\n row.rowFormat.gridAfterWidthType = rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellFormat = rowFormat.cells[j];\n cell.columnIndex = cellFormat.columnIndex;\n cell.cellFormat.columnSpan = cellFormat.columnSpan;\n cell.cellFormat.preferredWidth = cellFormat.preferredWidth;\n cell.cellFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n }\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n //Sets the width to cells\n table.setWidthToCells(tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n // PreserveGrid = false;\n };\n /**\n * Return table row width\n */\n TableResizer.prototype.getActualWidth = function (row) {\n var width = 0;\n if (row.childWidgets.length > 0) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n width += row.childWidgets[i].cellFormat.cellWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.setPreferredWidth = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rw = table.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n rowFormat.gridBeforeWidthType = 'Point';\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n cell.cellFormat.preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n rowFormat.gridAfterWidthType = 'Point';\n }\n }\n };\n TableResizer.prototype.updateCellPreferredWidths = function (table) {\n var tableWidth = table.tableHolder.tableWidth;\n var isAutoFit = table.tableFormat.preferredWidthType === 'Auto';\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.gridBefore > 0) {\n var width = table.tableHolder.getCellWidth(0, row.rowFormat.gridBefore, tableWidth, isAutoFit);\n this.updateGridBeforeWidth(width, row);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n cell.updateWidth(table.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth, isAutoFit));\n }\n if (row.rowFormat.gridAfter > 0) {\n // tslint:disable-next-line:max-line-length\n this.updateGridAfterWidth(table.tableHolder.getCellWidth(row.childWidgets.length, row.rowFormat.gridAfter, tableWidth, isAutoFit), row);\n }\n }\n };\n /**\n * Update grid before width value\n */\n TableResizer.prototype.updateGridBeforeWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.beforeWidth) {\n rowFormat.beforeWidth = width;\n if (rowFormat.gridBeforeWidthType === 'Auto') {\n rowFormat.gridBeforeWidthType = 'Point';\n }\n if (rowFormat.gridBeforeWidthType === 'Point') {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method. \n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.beforeWidth, ownerWidth);\n rowFormat.gridBeforeWidth = value;\n }\n }\n };\n /**\n * Update grid after width value\n */\n TableResizer.prototype.updateGridAfterWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.afterWidth) {\n rowFormat.afterWidth = width;\n }\n if (rowFormat.gridAfterWidthType === 'Auto') {\n rowFormat.gridAfterWidthType = 'Point';\n }\n if (rowFormat.gridAfterWidthType === 'Point') {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method. \n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.afterWidth, ownerWidth);\n rowFormat.gridAfterWidth = value;\n }\n };\n return TableResizer;\n}());\nexport { TableResizer };\n","import { TextPosition, ImageFormat } from '../selection/selection-helper';\nimport { ParagraphWidget, LineWidget, ElementBox, TextElementBox, Margin, ImageElementBox, BlockWidget, BlockContainer, BodyWidget, TableWidget, TableCellWidget, TableRowWidget, Widget, ListTextElementBox, BookmarkElementBox, HeaderFooterWidget, FieldTextElementBox, TabElementBox } from '../viewer/page';\nimport { WCharacterFormat } from '../format/character-format';\nimport { HelperMethods } from './editor-helper';\nimport { isNullOrUndefined, Browser, classList } from '@syncfusion/ej2-base';\nimport { WParagraphFormat, WSectionFormat, WListFormat, WTableFormat, WRowFormat, WCellFormat, WBorder, WBorders, WTabStop } from '../index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WLevelOverride } from '../list/level-override';\nimport { FieldElementBox } from '../viewer/page';\nimport { WCharacterStyle } from '../format/style';\nimport { TableResizer } from './table-resizer';\nimport { WParagraphStyle } from '../format/style';\n/**\n * Editor module\n */\nvar Editor = /** @class */ (function () {\n /**\n * Initialize the editor module\n * @param {LayoutViewer} viewer\n * @private\n */\n function Editor(viewer) {\n var _this = this;\n this.nodes = [];\n this.editHyperlinkInternal = false;\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n /**\n * @private\n */\n this.isHandledComplex = false;\n /**\n * @private\n */\n this.tableResize = undefined;\n /**\n * @private\n */\n this.tocStyles = {};\n this.refListNumber = undefined;\n this.incrementListNumber = -1;\n this.removedBookmarkElements = [];\n /**\n * @private\n */\n this.tocBookmarkId = 0;\n /**\n * @private\n */\n this.copiedData = undefined;\n this.pageRefFields = {};\n /**\n * @private\n */\n this.isInsertingTOC = false;\n /**\n * @private\n */\n this.isBordersAndShadingDialog = false;\n /**\n * @private\n */\n this.onTextInputInternal = function (event) {\n if (Browser.isDevice) {\n var viewer = _this.viewer;\n var nbsp = new RegExp(String.fromCharCode(160), 'g');\n var lineFeed = new RegExp(String.fromCharCode(10), 'g');\n viewer.prefix = viewer.prefix.replace(nbsp, ' ').replace(lineFeed, ' ');\n var text = viewer.editableDiv.textContent.replace(nbsp, ' ').replace(lineFeed, ' ');\n var textBoxText = text.substring(2);\n if (viewer.isCompositionStart && viewer.isCompositionUpdated) {\n viewer.isCompositionUpdated = false;\n if (!viewer.owner.isReadOnlyMode && viewer.owner.isDocumentLoaded) {\n if (viewer.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty) {\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionForLineWidget(viewer.selection.start.currentWidget, _this.selection.start.offset - (viewer.prefix.length - 2));\n _this.handleTextInput(textBoxText);\n viewer.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n else {\n _this.handleTextInput(textBoxText);\n viewer.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n }\n }\n return;\n }\n else if (viewer.isCompositionStart && viewer.isCompositionEnd && viewer.suffix === '') {\n if (viewer.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty && viewer.isCompositionStart) {\n viewer.isCompositionStart = false;\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionForLineWidget(viewer.selection.start.currentWidget, _this.selection.start.offset - viewer.prefix.substring(2).length);\n _this.selection.retrieveCurrentFormatProperties();\n if (viewer.suffix === '' || textBoxText === '') {\n _this.handleTextInput(textBoxText);\n }\n }\n else if (!_this.selection.isEmpty) {\n viewer.isCompositionStart = false;\n _this.handleTextInput(textBoxText);\n }\n }\n else if (textBoxText === '') {\n viewer.isCompositionStart = false;\n _this.handleBackKey();\n }\n else if (viewer.prefix.substring(2) === textBoxText && viewer.suffix === '') {\n viewer.isCompositionStart = false;\n _this.handleTextInput(' ');\n }\n viewer.isCompositionEnd = false;\n return;\n }\n else if (viewer.isCompositionEnd || viewer.isCompositionStart && !viewer.isCompositionUpdated) {\n if (textBoxText.length < viewer.prefix.length &&\n textBoxText === viewer.prefix.substring(2, viewer.prefix.length - 1) || viewer.editableDiv.innerText.length < 2) {\n _this.handleBackKey();\n return;\n }\n else if (viewer.suffix !== '' &&\n viewer.editableDiv.innerText[viewer.editableDiv.innerText.length - 1] !== String.fromCharCode(160)) {\n viewer.isCompositionStart = false;\n //When cursor is placed in between a word and chosen a word from predicted words.\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionForLineWidget(viewer.selection.start.currentWidget, _this.selection.start.offset - (viewer.prefix.length - 2));\n _this.selection.end.setPositionForLineWidget(viewer.selection.end.currentWidget, _this.selection.end.offset + viewer.suffix.length);\n //Retrieve the character format properties. Since the selection was changed manually.\n _this.selection.retrieveCurrentFormatProperties();\n _this.handleTextInput(textBoxText);\n return;\n }\n }\n // tslint:disable-next-line:max-line-length\n if (text !== '\\r' && text !== '\\b' && text !== '\\u001B' && !viewer.owner.isReadOnlyMode && viewer.isControlPressed === false) {\n if (text === '@' || text[0] !== '@' || text === '' || text.length < viewer.prefix.length &&\n textBoxText === viewer.prefix.substring(2, viewer.prefix.length - 1)) {\n _this.handleBackKey();\n if (viewer.editableDiv.innerText.length < 2) {\n _this.predictText();\n }\n }\n else if (text.indexOf(viewer.prefix) === 0 && text.length > viewer.prefix.length) {\n _this.handleTextInput(text.substring(viewer.prefix.length));\n }\n else if (text.indexOf(viewer.prefix) === -1 && text[text.length - 1] !== String.fromCharCode(160)\n && text[text.length - 1] !== ' ') {\n if ((textBoxText.charAt(0).toLowerCase() + textBoxText.slice(1)) === viewer.prefix.substring(2)) {\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionParagraph(viewer.selection.start.currentWidget, _this.selection.start.offset - (viewer.prefix.length - 2));\n }\n _this.handleTextInput(textBoxText);\n }\n else if (text.length !== 2) {\n _this.handleTextInput(' ');\n }\n }\n }\n else {\n var text = _this.viewer.editableDiv.innerText;\n if (text !== String.fromCharCode(160)) {\n // tslint:disable-next-line:max-line-length\n if (text !== '\\r' && text !== '\\b' && text !== '\\u001B' && !_this.owner.isReadOnlyMode && _this.viewer.isControlPressed === false) {\n _this.handleTextInput(text);\n }\n }\n else {\n _this.handleTextInput(' ');\n }\n _this.viewer.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n * @param {ClipboardEvent} event\n * @private\n */\n this.onPaste = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.pasteInternal(event);\n }\n event.preventDefault();\n };\n this.viewer = viewer;\n this.tableResize = new TableResizer(this.viewer.owner);\n }\n Object.defineProperty(Editor.prototype, \"editorHistory\", {\n get: function () {\n return this.viewer.owner.editorHistory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"selection\", {\n get: function () {\n if (this.viewer) {\n return this.viewer.selection;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"owner\", {\n get: function () {\n return this.viewer.owner;\n },\n enumerable: true,\n configurable: true\n });\n Editor.prototype.getModuleName = function () {\n return 'Editor';\n };\n Editor.prototype.insertField = function (code, result) {\n var fieldCode = code;\n if (isNullOrUndefined(result)) {\n fieldCode = HelperMethods.trimStart(fieldCode);\n if (fieldCode.substring(0, 10) === 'MERGEFIELD') {\n fieldCode = fieldCode.substring(10).trim();\n var index = fieldCode.indexOf('\\\\*');\n result = '«' + fieldCode.substring(0, index).trim() + '»';\n }\n }\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n line.children.push(fieldBegin);\n var fieldCodeSpan = new TextElementBox();\n fieldCodeSpan.text = code;\n line.children.push(fieldCodeSpan);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n var fieldResultSpan = new TextElementBox();\n fieldResultSpan.text = result;\n line.children.push(fieldResultSpan);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldEnd.fieldBegin = fieldBegin;\n fieldBegin.fieldEnd = fieldEnd;\n fieldSeparator.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n this.viewer.fields.push(fieldBegin);\n var widgets = [];\n widgets.push(paragraph);\n this.pasteContentsInternal(widgets);\n };\n /**\n * To update style for paragraph\n * @param style - style name\n * @param clearDirectFormatting - Removes manual formatting (formatting not applied using a style)\n * from the selected text, to match the formatting of the applied style. Default value is false.\n */\n Editor.prototype.applyStyle = function (style, clearDirectFormatting) {\n clearDirectFormatting = isNullOrUndefined(clearDirectFormatting) ? false : clearDirectFormatting;\n if (clearDirectFormatting) {\n this.initComplexHistory('ApplyStyle');\n this.clearFormatting();\n }\n var styleObj = this.viewer.styles.findByName(style);\n if (styleObj !== undefined) {\n this.onApplyParagraphFormat('styleName', styleObj, false, true);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.viewer.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.viewer.preDefinedStyles.get(style)), this.viewer.styles);\n this.applyStyle(style);\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo && this.editorHistory.currentHistoryInfo.action === 'ApplyStyle') {\n this.editorHistory.updateComplexHistory();\n }\n };\n // Public Implementation Starts\n /**\n * Moves the selected content in the document editor control to clipboard.\n */\n Editor.prototype.cut = function () {\n if (this.owner.isReadOnlyMode || this.selection.isEmpty) {\n return;\n }\n this.selection.copySelectedContent(true);\n };\n /**\n * Notify content change event\n * @private\n */\n Editor.prototype.fireContentChange = function () {\n if (this.viewer.owner.isLayoutEnabled && !this.viewer.owner.isShiftingEnabled) {\n this.viewer.owner.fireContentChange();\n }\n };\n /**\n * Update physical location for text position\n * @private\n */\n Editor.prototype.updateSelectionTextPosition = function (isSelectionChanged) {\n this.getOffsetValue(this.selection);\n this.selection.start.updatePhysicalPosition(true);\n if (this.selection.isEmpty) {\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.selection.end.updatePhysicalPosition(true);\n }\n this.selection.upDownSelectionLength = this.selection.end.location.x;\n this.selection.fireSelectionChanged(isSelectionChanged);\n };\n /**\n * Predict text\n * @private\n */\n Editor.prototype.predictText = function () {\n this.viewer.suffix = '';\n if (this.selection.start.paragraph.isEmpty() || this.selection.start.offset === 0 &&\n this.selection.start.currentWidget.isFirstLine() || this.selection.end.offset === 0 &&\n this.selection.end.currentWidget.isFirstLine()) {\n this.viewer.prefix = '';\n }\n else {\n this.getPrefixAndSuffix();\n }\n this.viewer.prefix = '@' + String.fromCharCode(160) + this.viewer.prefix; //  \n this.viewer.editableDiv.innerText = this.viewer.prefix;\n this.viewer.selection.setEditableDivCaretPosition(this.viewer.prefix.length);\n };\n /**\n * Gets prefix and suffix.\n * @private\n */\n /* tslint:disable:max-func-body-length */\n Editor.prototype.getPrefixAndSuffix = function () {\n var viewer = this.viewer;\n if (this.selection.text !== '') {\n viewer.prefix = '';\n return;\n }\n else {\n var startIndex = 0;\n var inlineInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset, startIndex);\n var inline = inlineInfo.element;\n startIndex = inlineInfo.index;\n if (inline !== undefined) {\n var boxInfo = this.selection.getElementBoxInternal(inline, startIndex);\n var box = boxInfo.element;\n startIndex = boxInfo.index;\n var spaceIndex = 0;\n if (!isNullOrUndefined(box)) {\n var prefixAdded = false;\n if (box instanceof TextElementBox && startIndex > 0 && box.line.isFirstLine()) {\n viewer.prefix = '';\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n /* tslint:disable:no-conditional-assignment */\n while ((spaceIndex = viewer.prefix.lastIndexOf(' ')) < 0 && inline instanceof TextElementBox) {\n if (inline.previousNode instanceof TextElementBox && viewer.prefix.indexOf(' ') === -1) {\n if (!prefixAdded) {\n viewer.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n viewer.prefix = inline.text + viewer.prefix;\n }\n inline = inline.previousNode;\n // If the line has no elements then break the loop to avoid the exception.\n if (inline instanceof ListTextElementBox) {\n break;\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n }\n else if (!(inline.previousNode instanceof TextElementBox)) {\n if (!prefixAdded) {\n viewer.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n viewer.prefix = inline.text + viewer.prefix;\n }\n break;\n }\n }\n if (!(viewer.prefix.length > 1 && viewer.prefix[viewer.prefix.length - 1] === ' ' &&\n viewer.prefix[viewer.prefix.length - 2] === '.')) {\n spaceIndex = viewer.prefix.lastIndexOf(' ');\n }\n else {\n spaceIndex = -1;\n viewer.prefix = '';\n }\n viewer.prefix = spaceIndex < 0 ? viewer.prefix : viewer.prefix.substring(spaceIndex);\n if (viewer.prefix.indexOf(' ') === 0 && viewer.prefix.length >= 1) {\n viewer.prefix = viewer.prefix.substring(1);\n }\n // suffix text prediction\n var endIndex = 0;\n var endInlineInfo = this.selection.end.currentWidget.getInline(this.selection.end.offset, endIndex);\n var endInline = endInlineInfo.element;\n endIndex = endInlineInfo.index;\n boxInfo = this.selection.getElementBoxInternal(endInline, endIndex);\n box = boxInfo.element;\n endIndex = boxInfo.index;\n if (box) {\n var suffixAdded = false;\n if (box instanceof TextElementBox && endIndex < box.length) {\n viewer.suffix = '';\n }\n // boxIndex = renderedElements.get(endInline).indexOf(box);\n while ((spaceIndex = viewer.suffix.indexOf(' ')) < 0 && endInline instanceof TextElementBox) {\n if (endInline.nextNode instanceof TextElementBox && viewer.suffix.indexOf(' ') === -1) {\n if (!suffixAdded) {\n viewer.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n viewer.suffix = viewer.suffix + endInline.text;\n }\n endInline = endInline.nextNode;\n }\n else if (!(endInline.nextNode instanceof TextElementBox)) {\n if (!suffixAdded) {\n viewer.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n viewer.suffix = viewer.suffix + endInline.text;\n }\n break;\n }\n }\n spaceIndex = viewer.suffix.indexOf(' ');\n viewer.suffix = spaceIndex < 0 ? viewer.suffix : viewer.suffix.substring(0, spaceIndex);\n }\n }\n }\n }\n };\n /**\n * key action\n * @private\n */\n // tslint:disable:max-func-body-length\n Editor.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n if (ctrl && !shift && !alt) {\n this.viewer.isControlPressed = true;\n switch (key) {\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, false);\n }\n break;\n case 13:\n event.preventDefault();\n this.insertPageBreak();\n break;\n case 48:\n event.preventDefault();\n this.onApplyParagraphFormat('beforeSpacing', 0, false, false);\n break;\n case 49:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('lineSpacing', 1, false, false);\n }\n break;\n case 50:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('lineSpacing', 2, false, false);\n }\n break;\n case 53:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('lineSpacing', 1.5, false, false);\n }\n break;\n case 66:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBold();\n }\n break;\n case 68:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.fontDialogModule) {\n this.owner.fontDialogModule.showFontDialog();\n }\n break;\n case 69:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Center');\n }\n event.preventDefault();\n break;\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnly && this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.isReplace = true;\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n case 73:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleItalic();\n }\n break;\n case 74:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Justify');\n }\n event.preventDefault();\n break;\n case 75:\n event.preventDefault();\n if (this.owner.hyperlinkDialogModule && !this.owner.isReadOnlyMode) {\n this.owner.hyperlinkDialogModule.show();\n }\n break;\n case 76:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Left');\n }\n event.preventDefault();\n break;\n case 77:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.increaseIndent();\n }\n event.preventDefault();\n break;\n case 78:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.openBlank();\n }\n break;\n case 82:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Right');\n }\n event.preventDefault();\n break;\n case 85:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.toggleUnderline('Single');\n }\n break;\n case 88:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.editor.cut();\n }\n break;\n case 89:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.redo();\n event.preventDefault();\n }\n break;\n case 90:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.undo();\n event.preventDefault();\n }\n break;\n case 219:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 221:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBaselineAlignment('Subscript');\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, true);\n }\n break;\n case 13:\n this.handleShiftEnter();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 68:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.toggleUnderline('Double');\n }\n break;\n case 77:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.decreaseIndent();\n }\n event.preventDefault();\n break;\n case 188:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 190:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBaselineAlignment('Superscript');\n }\n }\n }\n else if (!shift && ctrl && alt) {\n switch (key) {\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.toggleHighlightColor();\n }\n break;\n }\n }\n else {\n switch (key) {\n case 8:\n event.preventDefault();\n this.handleBackKey();\n break;\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(true, false);\n }\n break;\n case 13:\n event.preventDefault();\n this.handleEnterKey();\n break;\n case 46:\n this.handleDelete();\n event.preventDefault();\n break;\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.handleShiftEnter = function () {\n if (!this.owner.isReadOnlyMode) {\n this.handleTextInput('\\v');\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles back key.\n * @private\n */\n Editor.prototype.handleBackKey = function () {\n if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.onBackSpace();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles delete\n * @private\n */\n Editor.prototype.handleDelete = function () {\n if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.onDelete();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles enter key.\n * @private\n */\n Editor.prototype.handleEnterKey = function () {\n if (!this.owner.isReadOnlyMode) {\n if (Browser.isDevice) {\n this.viewer.isCompositionStart = false;\n }\n this.owner.editorModule.onEnter();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * @private\n */\n Editor.prototype.handleTextInput = function (text) {\n var _this = this;\n if (!this.owner.isReadOnlyMode) {\n if (this.animationTimer) {\n clearTimeout(this.animationTimer);\n }\n classList(this.selection.caret, [], ['e-de-cursor-animation']);\n this.owner.editorModule.insertText(text, false);\n /* tslint:disable:align */\n this.animationTimer = setTimeout(function () {\n if (_this.animationTimer) {\n clearTimeout(_this.animationTimer);\n }\n if (_this.selection && _this.selection.caret) {\n classList(_this.selection.caret, ['e-de-cursor-animation'], []);\n }\n }, 600);\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Copies to format.\n * @param {WCharacterFormat} format\n * @private\n */\n Editor.prototype.copyInsertFormat = function (format, copy) {\n var insertFormat = new WCharacterFormat();\n var sFormat = this.selection.characterFormat;\n if (copy) {\n insertFormat.copyFormat(format);\n }\n if (!isNullOrUndefined(sFormat.bold) && format.bold !== sFormat.bold) {\n insertFormat.bold = sFormat.bold;\n }\n if (!isNullOrUndefined(sFormat.italic) && format.italic !== sFormat.italic) {\n insertFormat.italic = sFormat.italic;\n }\n if (sFormat.fontSize > 0 && format.fontSize !== sFormat.fontSize) {\n insertFormat.fontSize = sFormat.fontSize;\n }\n if (!isNullOrUndefined(sFormat.fontFamily) && format.fontFamily !== sFormat.fontFamily) {\n insertFormat.fontFamily = sFormat.fontFamily;\n }\n if (!isNullOrUndefined(sFormat.highlightColor) && format.highlightColor !== sFormat.highlightColor) {\n insertFormat.highlightColor = sFormat.highlightColor;\n }\n if (!isNullOrUndefined(sFormat.baselineAlignment) && format.baselineAlignment !== sFormat.baselineAlignment) {\n insertFormat.baselineAlignment = sFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sFormat.fontColor) && format.fontColor !== sFormat.fontColor) {\n insertFormat.fontColor = sFormat.fontColor;\n }\n if (!isNullOrUndefined(sFormat.underline) && format.underline !== sFormat.underline) {\n insertFormat.underline = sFormat.underline;\n }\n if (!isNullOrUndefined(sFormat.strikethrough) && format.strikethrough !== sFormat.strikethrough) {\n insertFormat.strikethrough = sFormat.strikethrough;\n }\n return insertFormat;\n };\n /**\n * Inserts the specified text at cursor position\n * @param {string} text\n * @param {boolean} isReplace\n * @private\n */\n //tslint:disable: max-func-body-length\n Editor.prototype.insertText = function (text, isReplace) {\n var selection = this.viewer.selection;\n var insertPosition;\n var isRemoved = true;\n this.isListTextSelected();\n this.initHistory('Insert');\n var paragraphInfo = this.getParagraphInfo(selection.start);\n this.viewer.selection.editPosition = this.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n if ((!selection.isEmpty && !this.viewer.selection.isImageSelected) ||\n this.viewer.isListTextSelected && selection.contextType === 'List') {\n selection.isSkipLayouting = true;\n selection.skipFormatRetrieval = true;\n isRemoved = this.removeSelectedContents(selection);\n selection.skipFormatRetrieval = false;\n selection.isSkipLayouting = false;\n }\n paragraphInfo = this.getParagraphInfo(selection.start);\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n insertPosition = selection.start;\n if (insertPosition.paragraph.isEmpty()) {\n var span = new TextElementBox();\n var insertFormat = this.copyInsertFormat(insertPosition.paragraph.characterFormat, true);\n span.characterFormat.copyFormat(insertFormat);\n span.text = text;\n span.line = insertPosition.paragraph.childWidgets[0];\n span.margin = new Margin(0, 0, 0, 0);\n span.line.children.push(span);\n if ((insertPosition.paragraph.paragraphFormat.textAlignment === 'Center'\n || insertPosition.paragraph.paragraphFormat.textAlignment === 'Right') &&\n insertPosition.paragraph.paragraphFormat.listFormat.listId === -1) {\n insertPosition.paragraph.x = this.viewer.clientActiveArea.x;\n }\n this.viewer.layout.reLayoutParagraph(insertPosition.paragraph, 0, 0);\n }\n else {\n var indexInInline = 0;\n var inlineObj = insertPosition.currentWidget.getInline(insertPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // Todo: compare selection format\n var insertFormat = this.copyInsertFormat(inline.characterFormat, true);\n if (insertFormat.isSameFormat(inline.characterFormat)) {\n this.insertTextInline(inline, selection, text, indexInInline);\n }\n else {\n var tempSpan = new TextElementBox();\n tempSpan.text = text;\n tempSpan.line = inline.line;\n tempSpan.characterFormat.copyFormat(insertFormat);\n var insertIndex = inline.indexInOwner;\n if (indexInInline === inline.length) {\n inline.line.children.splice(insertIndex + 1, 0, tempSpan);\n }\n else if (indexInInline === 0) {\n inline.line.children.splice(insertIndex, 0, tempSpan);\n }\n else {\n if (inline instanceof TextElementBox) {\n var splittedSpan = new TextElementBox();\n splittedSpan.line = inline.line;\n splittedSpan.characterFormat.copyFormat(inline.characterFormat);\n splittedSpan.text = inline.text.substring(indexInInline);\n inline.text = inline.text.slice(0, indexInInline);\n inline.line.children.splice(insertIndex + 1, 0, splittedSpan);\n }\n inline.line.children.splice(insertIndex + 1, 0, tempSpan);\n }\n this.viewer.layout.reLayoutParagraph(insertPosition.paragraph, inline.line.indexInOwner, 0);\n }\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + text.length, true);\n this.updateEndPosition();\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentHistoryInfo) && (this.editorHistory.currentHistoryInfo.action === 'ListSelect') &&\n this.viewer.isListTextSelected) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n // if (!isNullOrUndefined(selection.currentHistoryInfo) && (selection.currentHistoryInfo.action === 'MultiSelection')) {\n // this.updateComplexHistory();\n // } else { \n this.reLayout(selection);\n // }\n }\n else {\n // selection.selectContent(selection.start, true);\n }\n // insertFormat.destroy();\n if (!isReplace && isRemoved && (text === ' ' || text === '\\t' || text === '\\v')) {\n var hyperlinkField = selection.getHyperlinkField();\n var isSelectionOnHyperlink = !isNullOrUndefined(hyperlinkField);\n var isList = false;\n if (!(text === '\\v')) {\n isList = this.checkAndConvertList(selection, text === '\\t');\n }\n if (isSelectionOnHyperlink) {\n return;\n }\n if (!isList) {\n //Checks if the previous text is URL, then it is auto formatted to hyperlink.\n this.checkAndConvertToHyperlink(selection, false);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.insertIMEText = function (text, isUpdate) {\n if (this.viewer.lastComposedText === text && isUpdate) {\n return;\n }\n // Clone selection start position\n var paragraphInfo = this.getParagraphInfo(this.selection.start);\n var startPosition = this.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n // Insert IME text in current selection\n this.insertText(text, false);\n this.viewer.lastComposedText = text;\n // update selection start\n var start = this.selection.start;\n this.setPositionForCurrentIndex(start, startPosition);\n // Update selection end\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionForLineWidget(start.currentWidget, start.offset + text.length);\n this.selection.selectPosition(isUpdate ? start : endPosition, endPosition);\n };\n /**\n * Insert Section break at cursor position\n */\n Editor.prototype.insertSectionBreak = function () {\n var selection = this.viewer.selection;\n if (isNullOrUndefined(selection) || this.owner.isReadOnlyMode || selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n this.initHistory('SectionBreak');\n if (!selection.isEmpty) {\n selection.selectContent(selection.isForward ? selection.start : selection.end, true);\n }\n this.viewer.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n this.insertSection(selection, true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n };\n /**\n * @private\n */\n Editor.prototype.insertSection = function (selection, selectFirstBlock) {\n var newSectionFormat = this.selection.start.paragraph.bodyWidget.sectionFormat.cloneFormat();\n var lastBlock;\n var firstBlock;\n if (selection.start.paragraph.isInsideTable) {\n var table = this.viewer.layout.getParentTable(selection.start.paragraph);\n table = table.combineWidget(this.viewer);\n var insertBefore = false;\n if (selection.start.paragraph.associatedCell.rowIndex === 0) {\n insertBefore = true;\n }\n var newParagraph = new ParagraphWidget();\n var previousBlock = table.previousRenderedWidget;\n if (!insertBefore) {\n lastBlock = this.splitTable(table, selection.start.paragraph.associatedCell.ownerRow);\n this.viewer.layout.layoutBodyWidgetCollection(lastBlock.index, lastBlock.containerWidget, lastBlock, false);\n lastBlock = lastBlock.getSplitWidgets().pop();\n }\n else {\n lastBlock = table;\n }\n var insertIndex = 0;\n if ((isNullOrUndefined(previousBlock) || !previousBlock.bodyWidget.equals(lastBlock.bodyWidget)) && insertBefore) {\n insertIndex = 0;\n newParagraph.index = 0;\n }\n else {\n insertIndex = lastBlock.indexInOwner + 1;\n newParagraph.index = lastBlock.index + 1;\n }\n lastBlock.containerWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n newParagraph.containerWidget = lastBlock.containerWidget;\n this.updateNextBlocksIndex(newParagraph, true);\n this.viewer.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.containerWidget, newParagraph, false);\n lastBlock = newParagraph;\n }\n else {\n var paragraphInfo = this.getParagraphInfo(selection.start);\n var selectionStart = this.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n //Split Paragraph\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset);\n this.setPositionForCurrentIndex(selection.start, selectionStart);\n lastBlock = selection.start.paragraph.getSplitWidgets().pop();\n }\n //Split body widget\n firstBlock = this.splitBodyWidget(lastBlock.bodyWidget, newSectionFormat, lastBlock).firstChild;\n if (firstBlock instanceof TableWidget) {\n firstBlock.updateRowIndex(0);\n }\n this.viewer.layout.layoutBodyWidgetCollection(firstBlock.index, firstBlock.containerWidget, firstBlock, false);\n if (firstBlock instanceof TableWidget) {\n firstBlock = selection.getFirstParagraphInFirstCell(firstBlock);\n }\n if (selectFirstBlock) {\n selection.selectParagraph(firstBlock, true);\n }\n return firstBlock;\n };\n Editor.prototype.splitBodyWidget = function (bodyWidget, sectionFormat, startBlock) {\n var sectionIndex;\n //Move blocks after the start block to next body widget\n var newBodyWidget = this.viewer.layout.moveBlocksToNextPage(startBlock);\n //Update SectionIndex for splitted body widget\n this.updateSectionIndex(sectionFormat, newBodyWidget, true);\n // insert New header footer widget in to section index \n this.insertRemoveHeaderFooter(newBodyWidget.sectionIndex, true);\n //update header and footer for splitted widget\n this.viewer.layout.layoutHeaderFooter(newBodyWidget, this.viewer, newBodyWidget.page);\n //Update Child item index from 0 for new Section\n this.updateBlockIndex(0, newBodyWidget.firstChild);\n // Start sinfting from first block\n this.viewer.updateClientArea(newBodyWidget.sectionFormat, newBodyWidget.page);\n return newBodyWidget;\n };\n Editor.prototype.insertRemoveHeaderFooter = function (sectionIndex, insert) {\n if (this.viewer.headersFooters[sectionIndex]) {\n // Need to handle further\n }\n else {\n this.viewer.headersFooters[sectionIndex] = {};\n }\n };\n Editor.prototype.updateBlockIndex = function (blockIndex, block) {\n var blocks;\n var sectionIndex = block.bodyWidget.sectionIndex;\n do {\n blocks = block.getSplitWidgets();\n for (var i = 0; i < blocks.length; i++) {\n blocks[i].index = blockIndex;\n }\n blockIndex++;\n block = blocks.pop().nextRenderedWidget;\n } while (!isNullOrUndefined(block) && block.bodyWidget.sectionIndex === sectionIndex);\n };\n Editor.prototype.updateSectionIndex = function (sectionFormat, startBodyWidget, increaseIndex) {\n var currentSectionIndex = startBodyWidget.sectionIndex;\n var blockIndex = 0;\n var bodyWidget = startBodyWidget;\n do {\n if (bodyWidget.index === currentSectionIndex && sectionFormat) {\n bodyWidget.sectionFormat = sectionFormat;\n }\n if (increaseIndex) {\n bodyWidget.index++;\n }\n else {\n bodyWidget.index--;\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n } while (bodyWidget);\n };\n //Auto convert List\n Editor.prototype.checkAndConvertList = function (selection, isTab) {\n var list = selection.paragraphFormat.getList();\n if (!isNullOrUndefined(list)) {\n return false;\n }\n var convertList = false;\n var isLeadingZero = false;\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return false;\n }\n var span = inline;\n var text = span.text.substring(0, indexInInline);\n var tabValue = 0;\n var length = 0;\n while (!isNullOrUndefined(span.previousNode)) {\n // tslint:disable-next-line:max-line-length\n if (span.previousNode instanceof TextElementBox && (span.previousNode.text === '\\t' || span.previousNode.text.trim().length === 0)) {\n (span.previousNode.text === '\\t') ? tabValue += 36 : length = span.previousNode.text.length * 2.5;\n span = span.previousNode;\n continue;\n }\n return false;\n }\n span = inline;\n var index = 0;\n var tabIndex = text.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousNode instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabIndex = previousText.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n text = text.substring(index);\n }\n text = HelperMethods.trimStart(text);\n var numberFormat = text.substring(1, 2);\n var listLevelPattern = this.getListLevelPattern(text.substring(0, 1));\n if (listLevelPattern !== 'None' && this.checkNumberFormat(numberFormat, listLevelPattern === 'Bullet', text)) {\n convertList = true;\n }\n else if (this.checkLeadingZero(text)) {\n isLeadingZero = true;\n convertList = true;\n }\n if (convertList) {\n this.initComplexHistory('AutoList');\n var paragraph = inline.paragraph;\n // tslint:disable-next-line:max-line-length\n selection.start.setPositionParagraph(paragraph.childWidgets[0], paragraph.childWidgets[0].getOffset(inline, indexInInline + 1));\n selection.end.setPositionParagraph(paragraph.childWidgets[0], 0);\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, false);\n var followCharacter = isTab ? 'Tab' : 'Space';\n numberFormat = !isLeadingZero ? '%1' + numberFormat : '%1' + text.substring(text.length - 1, text.length);\n var leadingZeroText = text.substring(text.length - 3, text.length - 1);\n listLevelPattern = !isLeadingZero ? listLevelPattern : this.getListLevelPattern(leadingZeroText);\n var listLevel = new WListLevel(undefined);\n listLevel.listLevelPattern = listLevelPattern;\n if (listLevelPattern === 'Bullet') {\n if (text === '*') {\n listLevel.numberFormat = '\\uf0b7';\n listLevel.characterFormat.fontFamily = 'Symbol';\n }\n else if (text === '-') {\n listLevel.numberFormat = '-';\n }\n }\n else {\n listLevel.numberFormat = numberFormat;\n }\n listLevel.followCharacter = followCharacter;\n var leftIndent = selection.paragraphFormat.leftIndent;\n if (tabValue !== 0 || length !== 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18 + tabValue + length;\n }\n else if (indexInInline > 2) {\n listLevel.paragraphFormat.leftIndent = leftIndent + (indexInInline - 2) * 2.5 + 18;\n }\n else if (leftIndent > 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n if ((!isLeadingZero && text.substring(0, 1) === '0') || leadingZeroText === '00') {\n listLevel.startAt = 0;\n }\n else {\n listLevel.startAt = 1;\n }\n this.autoConvertList(selection, listLevel);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection);\n }\n }\n return convertList;\n };\n Editor.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case '0':\n case '1':\n return 'Arabic';\n case 'I':\n return 'UpRoman';\n case 'i':\n return 'LowRoman';\n case 'A':\n return 'UpLetter';\n case 'a':\n return 'LowLetter';\n case '*':\n case '-':\n return 'Bullet';\n case '00':\n case '01':\n return 'LeadingZero';\n default:\n return 'None';\n }\n };\n Editor.prototype.autoConvertList = function (selection, listLevel) {\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var newList = new WList();\n if (this.viewer.lists.length > 0) {\n newList.listId = this.viewer.lists[this.viewer.lists.length - 1].listId + 1;\n }\n else {\n newList.listId = 0;\n }\n var newAbstractList = new WAbstractList();\n var layout = this.viewer;\n if (layout.abstractLists.length > 0) {\n newAbstractList.abstractListId = layout.abstractLists[layout.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n newAbstractList.abstractListId = 0;\n }\n newList.abstractListId = newAbstractList.abstractListId;\n newList.abstractList = newAbstractList;\n layout.abstractLists.push(newAbstractList);\n newAbstractList.levels.push(listLevel);\n listLevel.ownerBase = newAbstractList;\n selection.paragraphFormat.setList(newList);\n selection.paragraphFormat.listLevelNumber = 0;\n };\n Editor.prototype.checkNumberFormat = function (numberFormat, isBullet, text) {\n if (isBullet) {\n return numberFormat === '';\n }\n else {\n var index = text.indexOf(numberFormat);\n return (numberFormat === '.' || numberFormat === ')'\n || numberFormat === '>' || numberFormat === '-') && text.substring(index, text.length - 1) === '';\n }\n };\n Editor.prototype.checkLeadingZero = function (text) {\n var j;\n var isZero = false;\n for (var i = 0; i <= text.length - 1; i++) {\n if (text.charAt(i) === '0') {\n isZero = true;\n continue;\n }\n j = i;\n break;\n }\n var numberFormat = undefined;\n if (text.charAt(j) === '1') {\n numberFormat = text.charAt(j + 1);\n }\n else {\n numberFormat = text.charAt(j);\n }\n return isZero && this.checkNumberFormat(numberFormat, false, text);\n };\n Editor.prototype.getPageFromBlockWidget = function (block) {\n var page = undefined;\n if (block.containerWidget instanceof BodyWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof HeaderFooterWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n page = block.containerWidget.bodyWidget.page;\n }\n return page;\n };\n /**\n * @private\n */\n Editor.prototype.insertTextInline = function (element, selection, text, index) {\n if (element instanceof TextElementBox) {\n element.text = HelperMethods.insert(element.text, index, text);\n var paragraph = element.line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(element.line);\n var elementIndex = element.line.children.indexOf(element);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n else if (element instanceof ImageElementBox) {\n this.insertImageText(element, selection, text, index);\n }\n else if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n this.insertFieldBeginText(element, selection, text, index);\n }\n else if (element.fieldType === 2) {\n this.insertFieldSeparatorText(element, selection, text, index);\n }\n else {\n this.insertFieldEndText(element, selection, text, index);\n }\n }\n else if (element instanceof BookmarkElementBox) {\n this.insertBookMarkText(element, selection, text, index);\n }\n };\n Editor.prototype.insertFieldBeginText = function (fieldBegin, selection, text, index) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = fieldBegin.line.paragraph.childWidgets.indexOf(fieldBegin.line);\n var spanIndex = fieldBegin.line.children.indexOf(fieldBegin);\n spanObj.characterFormat.copyFormat(fieldBegin.characterFormat);\n fieldBegin.line.children.splice(spanIndex, 0, spanObj);\n spanObj.line = fieldBegin.line;\n this.viewer.layout.reLayoutParagraph(fieldBegin.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertBookMarkText = function (element, selection, text, index) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = element.line.paragraph.childWidgets.indexOf(element.line);\n var spanIndex = element.line.children.indexOf(element);\n spanObj.characterFormat.copyFormat(element.characterFormat);\n element.line.children.splice(spanIndex, 0, spanObj);\n spanObj.line = element.line;\n this.viewer.layout.reLayoutParagraph(element.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldSeparatorText = function (fieldSeparator, selection, text, index) {\n var previousInline = selection.getPreviousTextInline(fieldSeparator);\n var nextInline = selection.getNextTextInline(fieldSeparator);\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldSeparator.line.children.indexOf(fieldSeparator);\n if (index === fieldSeparator.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n span.characterFormat.copyFormat(fieldSeparator.line.paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInline)) {\n span.characterFormat.copyFormat(nextInline.characterFormat);\n }\n else {\n span.characterFormat.copyFormat(previousInline.characterFormat);\n }\n fieldSeparator.line.children.splice(spanIndex, 0, span);\n span.line = fieldSeparator.line;\n var lineIndex = fieldSeparator.line.paragraph.childWidgets.indexOf(fieldSeparator.line);\n this.viewer.layout.reLayoutParagraph(fieldSeparator.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldEndText = function (fieldEnd, selection, text, index) {\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldEnd.line.children.indexOf(fieldEnd);\n span.characterFormat.copyFormat(fieldEnd.characterFormat);\n fieldEnd.line.children.splice(spanIndex + 1, 0, span);\n span.line = fieldEnd.line;\n var lineIndex = fieldEnd.line.paragraph.childWidgets.indexOf(fieldEnd.line);\n this.viewer.layout.reLayoutParagraph(fieldEnd.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertImageText = function (image, selection, text, index) {\n var previousInlineObj = selection.getPreviousTextInline(image);\n var nextInlineObj = selection.getNextTextInline(image);\n var line = image.line;\n var element = new TextElementBox();\n var paragraph = line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(line);\n element.text = text;\n var spanIndex = line.children.indexOf(image);\n if (index === image.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInlineObj) && isNullOrUndefined(nextInlineObj)) {\n element.characterFormat.copyFormat(paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInlineObj)) {\n element.characterFormat.copyFormat(nextInlineObj.characterFormat);\n }\n else {\n element.characterFormat.copyFormat(previousInlineObj.characterFormat);\n }\n line.children.splice(spanIndex, 0, element);\n element.line = line;\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, spanIndex);\n };\n /**\n * @private\n */\n Editor.prototype.isListTextSelected = function () {\n if (this.viewer.isListTextSelected) {\n this.initComplexHistory('ListSelect');\n // tslint:disable-next-line:max-line-length\n if (this.viewer.selection.start.paragraph.paragraphFormat.listFormat && this.viewer.selection.start.paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n };\n //Auto Format and insert Hyperlink Implementation starts\n Editor.prototype.checkAndConvertToHyperlink = function (selection, isEnter, paragraph) {\n var text;\n var span;\n if (isEnter) {\n span = paragraph.lastChild.children[paragraph.lastChild.children.length - 1];\n text = span.text;\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return;\n }\n span = inline;\n text = span.text.substring(0, indexInInline);\n }\n var index = 0;\n var tabCharIndex = text.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousNode instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabCharIndex = previousText.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n }\n text = text.substring(index);\n var lowerCaseText = text.toLowerCase();\n var containsURL = false;\n if (lowerCaseText.substring(0, 8) === 'file:///'\n || (lowerCaseText.substring(0, 7) === 'http://' && lowerCaseText.length > 7)\n || (lowerCaseText.substring(0, 8) === 'https://' && lowerCaseText.length > 8)\n || (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4)\n || (lowerCaseText.substring(0, 3) === '\\\\' && lowerCaseText.length > 3)\n || (lowerCaseText.substring(0, 7) === 'mailto:' && lowerCaseText.length > 7)) {\n containsURL = true;\n if (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4) {\n text = 'http://' + text;\n }\n }\n else {\n var atIndex = text.indexOf('@');\n var dotIndex = text.indexOf('.');\n if (atIndex > 0 && atIndex < dotIndex && dotIndex < text.length - 1) {\n containsURL = true;\n text = 'mailto:' + text;\n }\n }\n if (containsURL) {\n var startPos = new TextPosition(this.viewer.owner);\n startPos.setPositionParagraph(span.line, span.line.getOffset(span, index));\n var endPos = new TextPosition(this.viewer.owner);\n if (isEnter) {\n endPos.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n else {\n if (selection.end.currentWidget.children.length === 0 && selection.end.offset === 0) {\n var prevLine = selection.end.currentWidget.previousLine;\n endPos.setPositionParagraph(prevLine, prevLine.getEndOffset());\n }\n else {\n endPos.setPositionParagraph(selection.end.currentWidget, selection.end.offset - 1);\n }\n }\n this.autoFormatHyperlink(selection, text, startPos, endPos);\n }\n };\n Editor.prototype.autoFormatHyperlink = function (selection, url, startPosition, endPosition) {\n this.initComplexHistory('AutoFormatHyperlink');\n var blockInfo = this.getParagraphInfo(startPosition);\n var start = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.insertPosition = start;\n }\n // Moves the selection to URL text start and end position.\n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(endPosition);\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldEnd = this.createHyperlinkElement(url, startPosition, endPosition, format);\n // Moves the selection to the end of field end position.\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 1));\n // Moves to next text position. (To achieve common behavior for space and enter).\n selection.start.moveNextPosition();\n selection.end.setPositionInternal(selection.start);\n blockInfo = this.getParagraphInfo(selection.end);\n var end = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = end;\n this.editorHistory.updateComplexHistory();\n this.reLayout(selection);\n }\n else {\n this.updateComplexWithoutHistory(0, start, end);\n }\n };\n Editor.prototype.appylingHyperlinkFormat = function (selection) {\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'Single', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', '#0563c1', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.createHyperlinkElement = function (url, startPosition, endPosition, format) {\n var selection = this.selection;\n this.viewer.layout.allowLayout = false;\n this.appylingHyperlinkFormat(selection);\n this.viewer.layout.allowLayout = true;\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n selection.start.setPositionInternal(selection.end);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(selection.start);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n fieldEnd.linkFieldCharacter(this.viewer);\n this.viewer.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n return fieldEnd;\n };\n Editor.prototype.insertHyperlinkfield = function (selection, format, url, isBookmark) {\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = new FieldElementBox(0);\n begin.characterFormat.copyFormat(format);\n begin.line = selection.start.currentWidget;\n this.initInsertInline(begin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(format);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.initInsertInline(span);\n var separator = new FieldElementBox(2);\n separator.characterFormat.copyFormat(format);\n separator.line = selection.start.currentWidget;\n this.initInsertInline(separator);\n return begin;\n };\n Editor.prototype.unLinkFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n if (inline.fieldEnd) {\n if (this.viewer) {\n this.viewer.fieldToLayout = inline;\n this.viewer.fieldEndParagraph = inline.line.paragraph;\n }\n // inline.line.paragraph.addFieldCharacter(inline.fieldEnd);\n inline.fieldEnd = undefined;\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (!isNullOrUndefined(inline.fieldEnd)) {\n if (this.viewer) {\n this.viewer.fieldToLayout = inline.fieldBegin;\n this.viewer.fieldEndParagraph = inline.line.paragraph;\n }\n inline.fieldBegin.fieldSeparator = undefined;\n inline.fieldEnd.fieldSeparator = undefined;\n }\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.fieldBegin) {\n if (!isNullOrUndefined(this.viewer)) {\n this.viewer.fieldToLayout = inline.fieldBegin;\n this.viewer.fieldEndParagraph = inline.line.paragraph;\n }\n var fieldIndex = this.viewer.fields.indexOf(inline.fieldBegin);\n if (fieldIndex !== -1) {\n this.viewer.fields.splice(fieldIndex, 1);\n }\n inline.fieldBegin = undefined;\n }\n }\n };\n Editor.prototype.getCharacterFormat = function (selection) {\n if (selection.start.paragraph.isEmpty()) {\n return selection.start.paragraph.characterFormat;\n }\n else {\n var info = selection.start.currentWidget.getInline(selection.start.offset, 0);\n return info.element.characterFormat;\n }\n };\n /**\n * Insert Hyperlink\n * @param {string} url\n * @param {string} displayText\n * @param {boolean} remove\n * @private\n */\n Editor.prototype.insertHyperlink = function (url, displayText, remove, isBookmark) {\n var selection = this.viewer.selection;\n if (selection.start.paragraph.associatedCell !== selection.end.paragraph.associatedCell) {\n return;\n }\n if (remove) {\n //Empty selection Hyperlink insert\n this.insertHyperlinkInternal(selection, url, displayText, isBookmark);\n }\n else {\n //Non-Empty Selection- change the selected text to Field \n // this.preservedFontCol = this.getFontColor();\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var fieldStartPosition = new TextPosition(this.viewer.owner);\n fieldStartPosition.setPositionInternal(startPosition);\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat(undefined);\n format.copyFormat(temp);\n this.initComplexHistory('InsertHyperlink');\n var blockInfo = this.getParagraphInfo(startPosition);\n var start = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n // tslint:disable-next-line:max-line-length\n this.editorHistory.currentHistoryInfo.insertPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.appylingHyperlinkFormat(selection);\n this.viewer.layout.allowLayout = true;\n startPosition.setPositionInternal(endPosition);\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n startPosition.setPositionInternal(endPosition);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n startPosition.setPositionInternal(fieldStartPosition);\n endPosition.setPositionInternal(startPosition);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url, isBookmark);\n fieldEnd.linkFieldCharacter(this.viewer);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n this.viewer.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n var lineWidget = fieldEnd.line;\n selection.selects(lineWidget, lineWidget.getOffset(fieldEnd, fieldEnd.length), true);\n blockInfo = this.getParagraphInfo(endPosition);\n var end = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n // tslint:disable-next-line:max-line-length\n this.editorHistory.currentHistoryInfo.endPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.updateComplexWithoutHistory(1, start, end);\n }\n }\n };\n Editor.prototype.insertHyperlinkInternal = function (selection, url, displayText, isBookmark) {\n if (isNullOrUndefined(selection.start)) {\n return;\n }\n if (this.editHyperlink(selection, url, displayText)) {\n return;\n }\n this.initHistory('InsertHyperlink');\n var isRemoved = true;\n if (!selection.isEmpty) {\n isRemoved = this.removeSelectedContents(selection);\n }\n if (isRemoved) {\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n }\n //else\n // this.Select(Start, true);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.insertHyperlinkByFormat = function (selection, url, displayText, format, isBookmark) {\n this.updateInsertPosition();\n selection.owner.isShiftingEnabled = true;\n var indexInInline = 0;\n var initial = indexInInline;\n var element = [];\n var fieldBegin = new FieldElementBox(0);\n element.push(fieldBegin);\n var span = new TextElementBox();\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n element.push(fieldSeparator);\n if (!isNullOrUndefined(displayText) && displayText !== '') {\n span = new TextElementBox();\n span.characterFormat.underline = 'Single';\n span.characterFormat.fontColor = '#0563c1';\n span.text = displayText;\n element.push(span);\n }\n var fieldEnd = new FieldElementBox(1);\n element.push(fieldEnd);\n this.insertElement(element);\n var paragraph = selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.viewer);\n if (this.viewer.fields.indexOf(fieldBegin) === -1) {\n this.viewer.fields.push(fieldBegin);\n }\n var offset = fieldEnd.line.getOffset(fieldEnd, 1);\n selection.selects(fieldEnd.line, fieldEnd.line.getOffset(fieldEnd, fieldEnd.length), true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n };\n Editor.prototype.initInsertInline = function (element, insertHyperlink) {\n this.initHistory('InsertInline');\n this.insertInlineInSelection(this.viewer.selection, element);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @private\n */\n Editor.prototype.insertElementInCurrentLine = function (selection, inline, isReLayout) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertElement([inline]);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * Edit Hyperlink\n * @param {Selection} selection\n * @param {string} url\n * @param {string} displayText\n * @private\n */\n Editor.prototype.editHyperlink = function (selection, url, displayText, isBookmark) {\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return false;\n }\n this.initHistory('InsertHyperlink');\n this.editHyperlinkInternal = isNullOrUndefined(this.editorHistory)\n || (this.editorHistory && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo));\n var fieldResult = '';\n var isNestedField = false;\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldSeparator = undefined;\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n fieldSeparator = fieldBegin.fieldSeparator;\n // tslint:disable-next-line:max-line-length\n var fieldObj = selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, isNestedField, format);\n fieldResult = fieldObj.displayText;\n isNestedField = fieldObj.isNestedField;\n format = fieldObj.format;\n }\n var offset = fieldBegin.line.getOffset(fieldBegin, 0);\n selection.start.setPositionParagraph(fieldBegin.line, offset);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n selection.end.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n this.deleteSelectedContents(selection, false);\n if (!isNestedField && fieldResult !== displayText || isNullOrUndefined(fieldSeparator)) {\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n }\n else {\n //Modify the new hyperlink url. Inserts field begin, url and field separator.\n this.updateInsertPosition();\n var newFieldBegin = new FieldElementBox(0);\n newFieldBegin.characterFormat.copyFormat(fieldBegin.characterFormat);\n newFieldBegin.line = selection.start.currentWidget;\n this.insertInlineInternal(newFieldBegin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.insertInlineInternal(span);\n var nodes = this.editorHistory && this.editorHistory.currentBaseHistoryInfo ?\n this.editorHistory.currentBaseHistoryInfo.removedNodes : this.nodes;\n this.insertClonedFieldResult(selection, nodes, fieldSeparator);\n var fieldEnd = selection.end.currentWidget.getInline(selection.end.offset, 0).element;\n fieldEnd.linkFieldCharacter(this.viewer);\n var paragraph = newFieldBegin.line.paragraph;\n var lineIndex = newFieldBegin.line.paragraph.childWidgets.indexOf(newFieldBegin.line);\n var elementIndex = newFieldBegin.line.children.indexOf(newFieldBegin);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n selection.selects(newFieldBegin.fieldEnd.line, offset, true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n }\n this.editHyperlinkInternal = false;\n this.nodes = [];\n return true;\n };\n /* tslint:disable:no-any */\n Editor.prototype.insertClonedFieldResult = function (selection, nodes, fieldSeparator) {\n var fieldEnd;\n var isStarted = false;\n for (var i = nodes.length - 1; i > -1; i--) {\n var node = nodes[i];\n /* tslint:enable:no-any */\n if (!isStarted) {\n if (fieldSeparator === node) {\n isStarted = true;\n }\n else {\n if (node instanceof ParagraphWidget && node === fieldSeparator.line.paragraph) {\n isStarted = true;\n var paragraph = undefined;\n if (i === nodes.length - 1) {\n paragraph = selection.start.paragraph;\n var fieldParagraph = fieldSeparator.line.paragraph;\n this.getClonedFieldResultWithSel(fieldParagraph, selection, fieldSeparator);\n }\n else {\n paragraph = this.getClonedFieldResult(fieldSeparator.line.paragraph, fieldSeparator);\n this.insertParagraph(paragraph, true);\n }\n selection.selectParagraph(selection.getNextParagraphBlock(paragraph), true);\n }\n continue;\n }\n }\n if (node instanceof ElementBox) {\n this.insertInlineInternal(node.clone());\n }\n else if (node instanceof BlockWidget) {\n this.insertBlock(node.clone());\n }\n // else if (node instanceof WSection)\n // editor.insertSection((node as WSection)._Clone());\n }\n };\n Editor.prototype.getClonedFieldResultWithSel = function (paragraph, selection, fieldSeparator) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = paragraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < paragraph.childWidgets.length; j++) {\n var lineWidget = paragraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n this.insertInlineInternal(lineWidget.children[i].clone());\n }\n }\n };\n Editor.prototype.getClonedFieldResult = function (curParagraph, fieldSeparator) {\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat.copyFormat(curParagraph.characterFormat);\n paragraph.paragraphFormat.copyFormat(curParagraph.paragraphFormat);\n var lineIndex = curParagraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = curParagraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < curParagraph.childWidgets.length; j++) {\n var lineWidget = curParagraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n paragraph.childWidgets[0].children.push(lineWidget.children[i]);\n }\n }\n return paragraph;\n };\n /**\n * Removes the hyperlink if selection is within hyperlink.\n */\n Editor.prototype.removeHyperlink = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var selection = this.selection;\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return;\n }\n var fieldEnd = fieldBegin.fieldEnd;\n var fieldSeparator = fieldBegin.fieldSeparator;\n var fieldStartPosition = new TextPosition(selection.owner);\n // tslint:disable-next-line:max-line-length\n fieldStartPosition.setPositionParagraph(fieldBegin.line, (fieldBegin.line).getOffset(fieldBegin, 0));\n var fieldSeparatorPosition = new TextPosition(selection.owner);\n // tslint:disable-next-line:max-line-length\n fieldSeparatorPosition.setPositionParagraph(fieldSeparator.line, (fieldSeparator.line).getOffset(fieldSeparator, fieldSeparator.length));\n this.initComplexHistory('RemoveHyperlink');\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 0));\n selection.end.setPositionInternal(selection.start);\n this.onDelete();\n selection.start.setPositionInternal(fieldSeparatorPosition);\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'None', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n selection.end.setPositionInternal(selection.start);\n selection.start.setPositionInternal(fieldStartPosition);\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, true);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n };\n //Paste Implementation starts\n /**\n * Paste copied clipboard content on Paste event\n * @param {ClipboardEvent} event\n * @param {any} pasteWindow?\n * @private\n */\n /* tslint:disable:no-any */\n Editor.prototype.pasteInternal = function (event, pasteWindow) {\n if (this.viewer.owner.enableLocalPaste) {\n this.pasteLocal();\n }\n else {\n if (isNullOrUndefined(pasteWindow)) {\n pasteWindow = window;\n }\n /* tslint:enable:no-any */\n var textContent = '';\n var clipbordData = pasteWindow.clipboardData ? pasteWindow.clipboardData : event.clipboardData;\n textContent = clipbordData.getData('Text');\n if (textContent !== '') {\n this.pasteContents(textContent);\n this.viewer.editableDiv.innerHTML = '';\n }\n }\n this.viewer.updateFocus();\n };\n /**\n * Pastes the data present in local clipboard if any.\n */\n Editor.prototype.pasteLocal = function () {\n /* tslint:disable:no-any */\n if (this.copiedData && this.owner.enableLocalPaste) {\n var document_1 = JSON.parse(this.copiedData);\n this.pasteContents(document_1);\n }\n };\n Editor.prototype.getBlocks = function (pasteContent) {\n var widgets = [];\n if (typeof (pasteContent) === 'string') {\n var startParagraph = this.selection.start.paragraph;\n if (!this.selection.isForward) {\n startParagraph = this.selection.end.paragraph;\n }\n var arr = [];\n var txt = pasteContent;\n txt = txt.replace(/\\r\\n/g, '\\r');\n arr = txt.split('\\r');\n for (var i = 0; i < arr.length; i++) {\n var insertFormat = this.copyInsertFormat(startParagraph.characterFormat, false);\n var insertParaFormat = this.viewer.selection.copySelectionParagraphFormat();\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(insertParaFormat);\n var line = new LineWidget(paragraph);\n if (arr[i].length > 0) {\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(insertFormat);\n textElement.text = arr[i];\n line.children.push(textElement);\n textElement.line = line;\n }\n paragraph.childWidgets.push(line);\n widgets.push(paragraph);\n }\n }\n else {\n for (var i = 0; i < pasteContent.sections.length; i++) {\n this.viewer.owner.parser.parseBody(pasteContent.sections[i].blocks, widgets);\n }\n }\n return widgets;\n };\n Editor.prototype.pasteContents = function (content) {\n this.pasteContentsInternal(this.getBlocks(content));\n };\n Editor.prototype.pasteContentsInternal = function (widgets) {\n /* tslint:enable:no-any */\n var selection = this.viewer.selection;\n var isRemoved = true;\n this.initComplexHistory('Paste');\n if (this.viewer.isListTextSelected) {\n var paragraph = selection.start.paragraph;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n this.initHistory('Paste');\n if (!selection.isEmpty || this.viewer.isListTextSelected) {\n isRemoved = this.removeSelectedContentInternal(selection, selection.start, selection.end);\n }\n if (isRemoved) {\n this.pasteContent(widgets);\n }\n else if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection, selection.isEmpty);\n }\n };\n /* tslint:disable:no-any */\n Editor.prototype.pasteContent = function (widgets) {\n /* tslint:enable:no-any */\n this.viewer.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n this.viewer.owner.isLayoutEnabled = true;\n this.viewer.owner.isPastingContent = true;\n this.pasteCopiedData(widgets);\n this.updateEndPosition();\n this.viewer.owner.isPastingContent = false;\n this.viewer.selection.fireSelectionChanged(true);\n };\n Editor.prototype.pasteCopiedData = function (widgets) {\n for (var j = 0; j < widgets.length; j++) {\n var widget = widgets[j];\n if (widget instanceof ParagraphWidget && widget.childWidgets.length === 0) {\n widget.childWidgets[0] = new LineWidget(widget);\n }\n if (j === widgets.length - 1 && widget instanceof ParagraphWidget) {\n var newParagraph = widget;\n if (newParagraph.childWidgets.length > 0\n && newParagraph.childWidgets[0].children.length > 0) {\n this.insertElement(newParagraph.childWidgets[0].children);\n }\n }\n else if (widget instanceof BlockWidget) {\n var startParagraph = this.selection.start.paragraph;\n if (widget instanceof TableWidget && startParagraph.isInsideTable) {\n var table = widget;\n //Handled to resize table based on parent cell width.\n var clientWidth = startParagraph.getContainerWidth();\n table.fitCellsToClientArea(clientWidth);\n }\n if (widget instanceof TableWidget && startParagraph.isEmpty()\n && startParagraph.previousWidget instanceof TableWidget) {\n this.insertTableRows(widget, startParagraph.previousWidget);\n }\n else {\n this.insertBlockInternal(widget);\n }\n }\n }\n };\n /**\n * Insert Table on undo\n * @param {WTable} table\n * @param {WTable} newTable\n * @param {boolean} moveRows\n * @private\n */\n Editor.prototype.insertTableInternal = function (table, newTable, moveRows) {\n //Gets the index of current table.\n var insertIndex = table.getIndex();\n if (moveRows) {\n //Moves the rows to table.\n for (var i = 0, index = 0; i < table.childWidgets.length; i++, index++) {\n var row = table.childWidgets[i];\n newTable.childWidgets.splice(index, 0, row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n }\n var owner = table.containerWidget;\n this.removeBlock(table);\n //Inserts table in the current table position. \n var blockAdvCollection = owner.childWidgets;\n blockAdvCollection.splice(insertIndex, 0, newTable);\n newTable.index = table.index;\n table.containerWidget = undefined;\n newTable.containerWidget = owner;\n newTable.isGridUpdated = false;\n newTable.buildTableColumns();\n newTable.isGridUpdated = true;\n this.viewer.layout.clearTableWidget(newTable, true, true);\n this.updateNextBlocksIndex(newTable, true);\n this.viewer.layout.linkFieldInTable(newTable);\n this.viewer.layout.layoutBodyWidgetCollection(newTable.index, owner, newTable, false);\n };\n /**\n * Insert Table on undo\n * @param {Selection} selection\n * @param {WBlock} block\n * @param {WTable} table\n * @private\n */\n Editor.prototype.insertBlockTable = function (selection, block, table) {\n var offset = selection.start.offset;\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(selection.start.currentWidget);\n if (block instanceof ParagraphWidget && offset > 0) {\n //Moves the inline items before selection start to the inserted paragraph.\n // tslint:disable-next-line:max-line-length\n this.moveInlines(selection.start.paragraph, block, 0, 0, selection.start.paragraph.firstChild, offset, selection.start.currentWidget);\n selection.selectParagraph(selection.start.paragraph, true);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(this.getHierarchicalIndex(block, offset.toString()), true);\n }\n }\n if (offset > 0 && this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n }\n var index = table.indexInOwner;\n table.containerWidget.childWidgets.splice(index, 0, block);\n block.containerWidget = table.containerWidget;\n block.index = table.index;\n this.updateNextBlocksIndex(block, true);\n this.viewer.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n if (block instanceof TableWidget) {\n paragraph = selection.getFirstParagraphInFirstCell(block);\n }\n this.updateHistoryPosition(this.getHierarchicalIndex(paragraph, '0'), true);\n }\n };\n /**\n * On cut handle selected content remove and relayout\n * @param {Selection} selection\n * @param {TextPosition} startPosition\n * @param {TextPosition} endPosition\n * @private\n */\n Editor.prototype.handleCut = function (selection) {\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.owner.isShiftingEnabled = true;\n var blockInfo = this.getParagraphInfo(startPosition);\n selection.editPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var image = undefined;\n if (startPosition.paragraph === endPosition.paragraph && startPosition.offset + 1 === endPosition.offset) {\n //Gets selected image and copy image to clipboard.\n var index = 0;\n var currentInline = startPosition.paragraph.getInline(endPosition.offset, index);\n var inline = currentInline.element;\n image = inline;\n }\n this.initHistory('Cut');\n selection.owner.isShiftingEnabled = true;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.editPosition, true);\n }\n }\n this.deleteSelectedContent(endPosition.paragraph, selection, startPosition, endPosition, 3);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n }\n this.reLayout(selection);\n };\n Editor.prototype.insertInlineInternal = function (element) {\n var selection = this.selection;\n var length = element.length;\n var paragraphInfo = this.getParagraphInfo(selection.start);\n if (selection.start.paragraph.isEmpty()) {\n var paragraph = selection.start.paragraph;\n if ((paragraph.paragraphFormat.textAlignment === 'Center' || paragraph.paragraphFormat.textAlignment === 'Right')\n && paragraph.paragraphFormat.listFormat.listId === -1) {\n paragraph.x = this.viewer.clientActiveArea.x;\n }\n paragraph.childWidgets[0].children.push(element);\n element.line = paragraph.childWidgets[0];\n element.linkFieldCharacter(this.viewer);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.insertElementInternal(curInline, element, indexInInline, true);\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.insertElement = function (element) {\n var selection = this.selection;\n var length = 0;\n var paragraph = undefined;\n var lineIndex = -1;\n var lineWidget = undefined;\n var insertIndex = 0;\n var paragraphInfo = this.getParagraphInfo(selection.start);\n if (selection.start.paragraph.isEmpty()) {\n paragraph = selection.start.paragraph;\n lineWidget = paragraph.childWidgets[0];\n lineIndex = 0;\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n paragraph = curInline.line.paragraph;\n lineIndex = paragraph.childWidgets.indexOf(curInline.line);\n insertIndex = curInline.indexInOwner;\n lineWidget = curInline.line;\n if (indexInInline === curInline.length) { // Add new Element in current \n insertIndex++;\n }\n else if (indexInInline === 0) {\n if (isNullOrUndefined(curInline.previousNode)) {\n insertIndex = 0;\n }\n }\n else {\n insertIndex++;\n var prevElement = new TextElementBox();\n prevElement.characterFormat.copyFormat(curInline.characterFormat);\n prevElement.text = curInline.text.substring(indexInInline);\n curInline.text = curInline.text.substr(0, indexInInline);\n lineWidget.children.splice(insertIndex, 0, prevElement);\n prevElement.line = curInline.line;\n }\n }\n for (var i = 0; i < element.length; i++) {\n length += element[i].length;\n lineWidget.children.splice(insertIndex, 0, element[i]);\n element[i].line = lineWidget;\n element[i].linkFieldCharacter(this.viewer);\n insertIndex++;\n }\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, 0);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.insertElementInternal = function (element, newElement, index, relayout) {\n var line = element.line;\n var paragraph = line.paragraph;\n var lineIndex = line.indexInOwner;\n var insertIndex = element.indexInOwner;\n if (index === element.length) { // Add new Element in current \n insertIndex++;\n line.children.splice(insertIndex, 0, newElement);\n }\n else if (index === 0) {\n if (isNullOrUndefined(element.previousNode)) {\n element.line.children.splice(0, 0, newElement);\n insertIndex = 0;\n }\n else {\n element.line.children.splice(insertIndex, 0, newElement);\n }\n }\n else {\n insertIndex++;\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(element.characterFormat);\n textElement.text = element.text.substring(index);\n element.text = element.text.substr(0, index);\n line.children.splice(insertIndex, 0, textElement);\n textElement.line = element.line;\n //Inserts the new inline.\n line.children.splice(insertIndex, 0, newElement);\n insertIndex -= 1;\n }\n newElement.line = element.line;\n newElement.linkFieldCharacter(this.viewer);\n if (relayout) {\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, insertIndex);\n }\n };\n /**\n * Insert Block on undo\n * @param {Selection} selection\n * @param {WBlock} block\n * @private\n */\n Editor.prototype.insertBlock = function (block) {\n var isRemoved = true;\n var selection = this.selection;\n if (!selection.isEmpty) {\n isRemoved = this.removeSelectedContents(selection);\n }\n if (!isRemoved) {\n selection.selectContent(selection.start, false);\n }\n this.insertBlockInternal(block);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n else {\n paragraph = this.selection.getFirstParagraphInFirstCell(block);\n }\n // tslint:disable-next-line:max-line-length\n this.updateHistoryPosition(this.getHierarchicalIndex(paragraph, '0'), true);\n }\n this.fireContentChange();\n };\n /**\n * Insert new Block on specific index\n * @param {Selection} selection\n * @param {BlockWidget} block\n * @private\n */\n Editor.prototype.insertBlockInternal = function (block) {\n var selection = this.selection;\n var isRemoved = true;\n var startPara = this.selection.start.paragraph;\n if (!selection.start.isAtParagraphStart) {\n if (block instanceof ParagraphWidget) {\n this.insertNewParagraphWidget(block, false);\n return;\n }\n this.updateInsertPosition();\n startPara = startPara.combineWidget(this.viewer);\n // tslint:disable-next-line:max-line-length\n this.splitParagraph(startPara, startPara.firstChild, 0, selection.start.currentWidget, selection.start.offset, false);\n selection.selectParagraph(this.selection.start.paragraph, true);\n }\n var bodyWidget = selection.start.paragraph.containerWidget;\n var blockIndex = selection.start.paragraph.index;\n var insertIndex = bodyWidget.childWidgets.indexOf(selection.start.paragraph);\n if (!isNullOrUndefined(bodyWidget)) {\n bodyWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = bodyWidget;\n block.index = blockIndex;\n block.height = 0;\n if (block instanceof TableWidget) {\n block.isGridUpdated = false;\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n this.updateNextBlocksIndex(block, true);\n this.viewer.layout.layoutBodyWidgetCollection(blockIndex, bodyWidget, block, false);\n }\n };\n /**\n * Inserts the image with specified size at cursor position in the document editor.\n * @param {string} imageString Base64 string, web URL or file URL.\n * @param {number} width? Image width\n * @param {number} height? Image height\n */\n Editor.prototype.insertImage = function (imageString, width, height) {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n if (isNullOrUndefined(width)) {\n width = 100;\n }\n if (isNullOrUndefined(height)) {\n height = 100;\n }\n this.insertPicture(imageString, width, height);\n };\n /**\n * Inserts a table of specified size at cursor position\n * in the document editor.\n * @param {number} rows Default value of ‘rows’ parameter is 1.\n * @param {number} columns Default value of ‘columns’ parameter is 1.\n */\n Editor.prototype.insertTable = function (rows, columns) {\n var startPos = this.selection.start;\n if (this.owner.isReadOnlyMode) {\n return;\n }\n rows = rows || 1;\n columns = columns || 1;\n var table = this.createTable(rows, columns);\n var clientWidth = startPos.paragraph.getContainerWidth();\n table.splitWidthToTableCells(clientWidth);\n var prevBlock = startPos.paragraph.previousWidget;\n if (startPos.currentWidget.isFirstLine() && startPos.offset === 0 && prevBlock instanceof TableWidget) {\n this.insertTableRows(table, prevBlock);\n table.destroy();\n return;\n }\n else {\n this.initHistory('InsertTable');\n this.viewer.owner.isShiftingEnabled = true;\n this.insertBlock(table);\n }\n var startLine = this.selection.getFirstParagraphInFirstCell(table).childWidgets[0];\n startPos.setPosition(startLine, true);\n this.selection.end.setPositionInternal(startPos);\n var lastParagraph = this.selection.getLastParagraphInLastCell(table);\n var endOffset = lastParagraph.getLength() + 1;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n // tslint:disable-next-line:max-line-length\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.getHierarchicalIndex(lastParagraph, endOffset.toString());\n }\n this.reLayout(this.selection);\n };\n /**\n * Inserts the specified number of rows to the table above or below to the row at cursor position.\n * @param {boolean} above The above parameter is optional and if omitted,\n * it takes the value as false and inserts below the row at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n */\n Editor.prototype.insertRow = function (above, count) {\n var rowPlacement = above ? 'Above' : 'Below';\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(rowPlacement === 'Above' ? 'InsertRowAbove' : 'InsertRowBelow');\n }\n this.viewer.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = this.getOwnerCell(!this.selection.isForward).getSplitWidgets()[0];\n var table = startCell.ownerTable.combineWidget(this.viewer);\n var row = rowPlacement === 'Below' ? endCell.ownerRow : startCell.ownerRow;\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n var rowCount = count ? count : this.getRowCountToInsert();\n var rows = [];\n var index = row.rowIndex;\n if (rowPlacement === 'Below') {\n index++;\n var isAffectedByRowSpannedCell = isNullOrUndefined(endCell.previousWidget)\n || endCell.columnIndex === endCell.previousWidget.columnIndex + 1;\n var isRowSpanEnd = endCell.cellIndex !== endCell.columnIndex && isAffectedByRowSpannedCell\n && row.rowIndex + startCell.cellFormat.rowSpan - 1 === endCell.ownerRow.rowIndex;\n if (!isRowSpanEnd) {\n if (endCell.cellFormat.rowSpan > 1) {\n if (!isNullOrUndefined(row.nextWidget) && row.nextWidget instanceof TableRowWidget) {\n endCell.cellFormat.rowSpan += rowCount;\n row = row.nextWidget;\n }\n }\n }\n }\n for (var i = 0; i < rowCount; i++) {\n var cellCountInfo = this.updateRowspan(row, rowPlacement === 'Below' ? endCell : startCell, rowPlacement);\n var newRow = this.createRowAndColumn(cellCountInfo.count, i);\n newRow.rowFormat.copyFormat(row.rowFormat);\n this.updateCellFormatForInsertedRow(newRow, cellCountInfo.cellFormats);\n rows.push(newRow);\n }\n table.insertTableRowsInternal(rows, index);\n var cell = undefined;\n var paragraph = undefined;\n if ((table.childWidgets[index] instanceof TableRowWidget)) {\n cell = table.childWidgets[index].firstChild;\n paragraph = this.selection.getFirstParagraph(cell);\n }\n else {\n var widget = undefined;\n while (!(widget instanceof TableWidget)) {\n widget = table.nextRenderedWidget;\n }\n paragraph = this.selection.getFirstParagraphInFirstCell(widget);\n }\n this.viewer.layout.reLayoutTable(table);\n this.selection.selectParagraph(paragraph, true);\n }\n this.reLayout(this.selection, true);\n };\n Editor.prototype.updateCellFormatForInsertedRow = function (newRow, cellFormats) {\n for (var i = 0; i < newRow.childWidgets.length; i++) {\n newRow.childWidgets[i].cellFormat.copyFormat(cellFormats[i]);\n newRow.childWidgets[i].cellFormat.rowSpan = 1;\n }\n };\n Editor.prototype.updateRowspan = function (row, startCell, rowPlacement) {\n var spannedCells = row.getPreviousRowSpannedCells(true);\n var count = 0;\n var cellFormats = [];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var isCellIncluded = false;\n // Need to check with all the row spanned cells. if the start cell contains rowspan greater than 1, \n // and when inserting below, need to increment rowspan for all row spanned cells by 1 except\n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n // and when inserting above, if cloned cell placed in the same row of start cell or\n // if the cloned cell has equal column index, need to skip updating rowspan value of cloned cell.\n // else update row span value for spanned cell except \n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n var isRowSpanned = (isNullOrUndefined(cell.previousWidget)\n || cell.columnIndex !== cell.previousWidget.columnIndex + 1);\n for (var j = 0; j < spannedCells.length; j++) {\n if (isRowSpanned) {\n var spannedCell = spannedCells[j];\n var clonedRowIndex = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n if (cell.columnIndex < spannedCell.columnIndex && cell.cellIndex !== cell.columnIndex) {\n isCellIncluded = true;\n count++;\n cellFormats.push(cell.cellFormat);\n }\n if (startCell.cellFormat.rowSpan === 1) {\n // Need to check whether cell is affected by a row spanned cell. if cell is placed on the row where it is affected \n // by row spanned cell, then if we are inserting row below, need to add new cell with spanned cell width\n // or if we are inserting above, need to update row span value of the spanned cell.\n // if cell is placed inbetween the spanned cell , \n // then if we are inserting below, need to update row span value of spanned cell or\n // if we are inserting above, need to skip updating row span value except\n // if start cell is placed on the same row of spanned cell or if start cell placed in the same column.\n if (clonedRowIndex > cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above'\n && spannedCell.ownerRow === startCell.ownerRow) {\n continue;\n }\n else {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n else if (cell.cellIndex !== cell.columnIndex && isRowSpanned && clonedRowIndex === cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above') {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n else {\n count++;\n cellFormats.push(spannedCell.cellFormat);\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n else {\n if (spannedCell !== startCell) {\n if (rowPlacement === 'Above'\n && (spannedCell.ownerRow === startCell.ownerRow || spannedCell.columnIndex === startCell.columnIndex)) {\n continue;\n }\n else {\n if (spannedCell.columnIndex !== startCell.columnIndex\n && spannedCell.ownerRow.rowIndex !== cell.ownerRow.rowIndex\n && (clonedRowIndex > startCell.ownerRow.rowIndex\n || (rowPlacement === 'Above' && clonedRowIndex === startCell.ownerRow.rowIndex))) {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n }\n }\n }\n if (spannedCells.indexOf(cell) === -1 && cell.cellFormat.rowSpan > 1) {\n isCellIncluded = true;\n }\n if (!isCellIncluded) {\n count++;\n cellFormats.push(cell.cellFormat);\n }\n }\n return { count: count, cellFormats: cellFormats };\n };\n Editor.prototype.insertTableRows = function (table, prevBlock) {\n this.initHistory('InsertRowBelow');\n table.containerWidget = prevBlock.containerWidget;\n prevBlock = prevBlock.combineWidget(this.viewer);\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(prevBlock);\n }\n var row = prevBlock.childWidgets[prevBlock.childWidgets.length - 1];\n prevBlock.insertTableRowsInternal(table.childWidgets, prevBlock.childWidgets.length);\n var paragraph = this.selection.getFirstParagraph(row.nextWidget.childWidgets[0]);\n this.viewer.layout.reLayoutTable(prevBlock);\n this.selection.selectParagraph(paragraph, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.updateHistoryPosition(this.selection.start, true);\n this.updateHistoryPosition(this.selection.end, false);\n }\n this.reLayout(this.selection);\n };\n /**\n * Inserts the specified number of columns to the table left or right to the column at cursor position.\n * @param {number} left The left parameter is optional and if omitted, it takes the value as false and\n * inserts to the right of column at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n */\n Editor.prototype.insertColumn = function (left, count) {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var columnPlacement = left ? 'Left' : 'Right';\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(columnPlacement === 'Left' ? 'InsertColumnLeft' : 'InsertColumnRight');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n this.selection.owner.isLayoutEnabled = false;\n var cellIndex = startCell.columnIndex;\n if (columnPlacement === 'Right') {\n cellIndex = endCell.columnIndex + endCell.cellFormat.columnSpan;\n }\n var startParagraph = undefined;\n var newCell = undefined;\n var columnCount = count ? count : this.getColumnCountToInsert();\n var rowSpannedCells = [];\n var rowSpanCellIndex = cellIndex;\n for (var i = 0; i < columnCount; i++) {\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n newCell = this.createColumn(this.selection.getLastParagraph(startCell));\n newCell.index = j;\n newCell.rowIndex = row.rowIndex;\n newCell.containerWidget = row;\n newCell.cellFormat.copyFormat(startCell.cellFormat);\n newCell.cellFormat.rowSpan = 1;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(newCell);\n }\n if (cellIndex === 0) {\n row.childWidgets.splice(cellIndex, 0, newCell);\n }\n else {\n var isCellInserted = false;\n for (var j_1 = 0; j_1 < row.childWidgets.length; j_1++) {\n var rowCell = row.childWidgets[j_1];\n // Add the row spanned cells to colection for adding column before / after row spnned cells.\n if (rowCell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(rowCell);\n }\n if (rowCell.columnIndex + rowCell.cellFormat.columnSpan === cellIndex) {\n row.childWidgets.splice(rowCell.cellIndex + 1, 0, newCell);\n isCellInserted = true;\n }\n else if (cellIndex > rowCell.columnIndex && rowCell.columnIndex + rowCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowCell.columnIndex + rowCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowCell.cellIndex, 0, newCell);\n isCellInserted = true;\n }\n if (isCellInserted) {\n break;\n }\n }\n // If the cell is not inserted for row, then check for row spanned cells.\n if (!isCellInserted) {\n if (rowSpannedCells.length > 0) {\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.ownerRow !== row\n && row.rowIndex <= rowSpannedCell.ownerRow.rowIndex + rowSpannedCell.cellFormat.rowSpan - 1) {\n if (rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan === cellIndex) {\n if (rowSpannedCell.cellIndex > row.childWidgets.length) {\n row.childWidgets.push(newCell);\n }\n else {\n row.childWidgets.splice(rowSpannedCell.cellIndex, 0, newCell);\n }\n isCellInserted = true;\n }\n else if (cellIndex > rowSpannedCell.columnIndex &&\n rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowSpannedCell.columnIndex, 0, newCell);\n isCellInserted = true;\n }\n }\n if (isCellInserted) {\n break;\n }\n }\n }\n }\n }\n }\n }\n table.updateRowIndex(0);\n var parentTable = this.viewer.layout.getParentTable(table);\n if (parentTable) {\n parentTable.fitChildToClientArea();\n }\n else {\n table.fitChildToClientArea();\n }\n this.selection.owner.isLayoutEnabled = true;\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n this.selection.start.setPosition(startParagraph.firstChild, true);\n this.selection.end.setPosition(this.selection.getLastParagraph(newCell).firstChild, false);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n }\n }\n };\n /**\n * Creates table with specified rows and columns.\n * @private\n */\n Editor.prototype.createTable = function (rows, columns) {\n var startPara = this.selection.start.paragraph;\n var table = new TableWidget();\n table.tableFormat = new WTableFormat(table);\n table.tableFormat.preferredWidthType = 'Auto';\n table.tableFormat.initializeTableBorders();\n var index = 0;\n while (index < rows) {\n var tableRow = this.createRowAndColumn(columns, index);\n tableRow.rowFormat.heightType = 'Auto';\n tableRow.containerWidget = table;\n table.childWidgets.push(tableRow);\n index++;\n }\n return table;\n };\n Editor.prototype.createRowAndColumn = function (columns, rowIndex) {\n var startPara = this.selection.start.paragraph;\n var tableRow = new TableRowWidget();\n tableRow.rowFormat = new WRowFormat(tableRow);\n tableRow.index = rowIndex;\n for (var i = 0; i < columns; i++) {\n var tableCell = this.createColumn(startPara);\n tableCell.index = i;\n tableCell.rowIndex = rowIndex;\n tableCell.containerWidget = tableRow;\n tableRow.childWidgets.push(tableCell);\n }\n return tableRow;\n };\n Editor.prototype.createColumn = function (paragraph) {\n var tableCell = new TableCellWidget();\n var para = new ParagraphWidget();\n para.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n para.characterFormat.copyFormat(paragraph.characterFormat);\n para.containerWidget = tableCell;\n tableCell.childWidgets.push(para);\n tableCell.cellFormat = new WCellFormat(tableCell);\n return tableCell;\n };\n Editor.prototype.getColumnCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (start && end && this.selection.getTable(start, end)) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell) {\n return count = 1;\n }\n if (start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = count + end.paragraph.associatedCell.cellIndex - start.paragraph.associatedCell.cellIndex;\n }\n else {\n count = 0;\n // tslint:disable-next-line:max-line-length\n var selectedCells = start.paragraph.associatedCell.ownerTable.getColumnCellsForSelection(start.paragraph.associatedCell, end.paragraph.associatedCell);\n for (var i = 0; i < selectedCells.length; i++) {\n if (start.paragraph.associatedCell.ownerRow === selectedCells[i].ownerRow) {\n count++;\n }\n }\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getRowCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.selection.getTable(start, end))) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell ||\n start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = 1;\n }\n else {\n return count = count +\n this.getOwnerRow(!this.selection.isForward).rowIndex - this.getOwnerRow(this.selection.isForward).rowIndex;\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getOwnerCell = function (isStart) {\n var cell = undefined;\n var startCell = isStart ? this.selection.start.paragraph.associatedCell\n : this.selection.end.paragraph.associatedCell;\n var endCell = isStart ? this.selection.end.paragraph.associatedCell\n : this.selection.start.paragraph.associatedCell;\n cell = startCell;\n var owner = cell.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endCell.ownerTable) {\n cell = owner.containerWidget;\n owner = cell.ownerTable;\n }\n return cell;\n };\n Editor.prototype.getOwnerRow = function (isStart) {\n var row;\n var startRow = isStart ? this.selection.start.paragraph.associatedCell.ownerRow\n : this.selection.end.paragraph.associatedCell.ownerRow;\n var endRow = isStart ? this.selection.end.paragraph.associatedCell.ownerRow\n : this.selection.start.paragraph.associatedCell.ownerRow;\n row = startRow;\n var owner = row.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endRow.ownerTable) {\n row = owner.containerWidget.ownerRow;\n owner = row.ownerTable;\n }\n return row;\n };\n Editor.prototype.getOwnerTable = function (isStart) {\n var table = undefined;\n var startTable = this.selection.start.paragraph.associatedCell.ownerTable;\n var endTable = this.selection.end.paragraph.associatedCell.ownerTable;\n table = isStart ? startTable : endTable;\n while (table.containerWidget instanceof TableCellWidget && table !== (isStart ? endTable : startTable)) {\n table = table.containerWidget.ownerTable;\n }\n return table;\n };\n /**\n * Merge Selected cells\n * @private\n */\n Editor.prototype.mergeSelectedCellsInTable = function () {\n if (!this.canMergeCells()) {\n return;\n }\n if (this.checkIsNotRedoing()) {\n this.initHistory('MergeCells');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n var startOwnerCell = this.getOwnerCell(this.selection.isForward);\n var endOwnerCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startOwnerCell, endOwnerCell);\n if (containerCell.ownerTable.contains(endOwnerCell)) {\n if (!this.selection.containsCell(containerCell, endOwnerCell)) {\n //Start and End are in different cells. \n var table = startOwnerCell.ownerTable.combineWidget(this.viewer);\n startOwnerCell = this.selection.getSelectedCell(startOwnerCell, containerCell);\n endOwnerCell = this.selection.getSelectedCell(endOwnerCell, containerCell);\n //Merges the selected cells. \n var mergedCell = this.mergeSelectedCells(table, startOwnerCell, endOwnerCell);\n var lastParagraph = this.selection.getLastParagraph(mergedCell);\n endPosition.setPosition(lastParagraph.lastChild, false);\n }\n }\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection, false);\n }\n };\n Editor.prototype.mergeSelectedCells = function (table, startCell, endCell) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n this.selection.owner.isLayoutEnabled = false;\n //Merges the selected cells.\n var start = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(start, end, endCellLeft, endCellRight);\n start = cellInfo.start;\n end = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var mergedCell = undefined;\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(end, 2)) {\n if (isNullOrUndefined(mergedCell)) {\n mergedCell = cell;\n }\n else {\n if (i === rowStartIndex) {\n mergedCell.cellFormat.preferredWidth += cell.cellFormat.preferredWidth;\n mergedCell.cellFormat.columnSpan += cell.cellFormat.columnSpan;\n this.mergeBorders(mergedCell, cell);\n }\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (cell.childWidgets.length === 1 && block instanceof ParagraphWidget\n && block.childWidgets.length === 0) {\n break;\n }\n mergedCell.childWidgets.push(block.clone());\n }\n row.childWidgets.splice(j, 1);\n cell.destroy();\n j--;\n }\n }\n }\n if (row.childWidgets.length === 0) {\n var rowIndex = table.childWidgets.indexOf(row);\n row.updateRowBySpannedCells();\n table.childWidgets.splice(rowIndex, 1);\n row.destroy();\n count--;\n i--;\n }\n }\n if (!isNullOrUndefined(mergedCell) && rowStartIndex < count) {\n mergedCell.cellFormat.rowSpan = count - rowStartIndex + 1;\n }\n this.updateBlockIndexAfterMerge(mergedCell);\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n //Layouts the table after merging cells.\n this.selection.owner.isLayoutEnabled = true;\n return mergedCell;\n };\n Editor.prototype.mergeBorders = function (mergedCell, tableCell) {\n var mergedCellborders = undefined;\n var cellBorders = null;\n if (!isNullOrUndefined(mergedCell.cellFormat.borders)) {\n mergedCellborders = mergedCell.cellFormat.borders;\n }\n if (!isNullOrUndefined(tableCell.cellFormat.borders)) {\n cellBorders = tableCell.cellFormat.borders;\n }\n if (isNullOrUndefined(mergedCellborders) && isNullOrUndefined(cellBorders)) {\n return;\n }\n if (isNullOrUndefined(mergedCellborders)) {\n mergedCellborders = new WBorders(mergedCell.cellFormat);\n mergedCellborders.copyFormat(cellBorders);\n }\n else if (isNullOrUndefined(cellBorders)) {\n return;\n }\n else {\n if (mergedCell.ownerRow.rowIndex === tableCell.ownerRow.rowIndex) {\n mergedCellborders.top = mergedCell.getBorderBasedOnPriority(mergedCellborders.top, cellBorders.bottom);\n mergedCellborders.bottom = mergedCell.getBorderBasedOnPriority(mergedCellborders.bottom, cellBorders.bottom);\n }\n }\n };\n Editor.prototype.updateBlockIndexAfterMerge = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n cell.childWidgets[i].index = i;\n }\n };\n /**\n * Determines whether merge cell operation can be done.\n */\n Editor.prototype.canMergeCells = function () {\n if (this.selection.isEmpty || !this.selection.start.paragraph.isInsideTable || !this.selection.end.paragraph.isInsideTable) {\n return false;\n }\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n if (!this.selection.containsCell(containerCell, endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n var rowSpan = 1;\n if (startCell.ownerRow === endCell.ownerRow) {\n var startCellIndex = startCell.ownerRow.childWidgets.indexOf(startCell);\n for (var i = startCellIndex; i <= startCell.ownerRow.childWidgets.indexOf(endCell); i++) {\n var cell = startCell.ownerRow.childWidgets[i];\n var prevCell = cell.previousWidget;\n if (i !== startCellIndex) {\n if (cell.cellFormat.rowSpan !== rowSpan) {\n return false;\n }\n if (!isNullOrUndefined(prevCell)\n && cell.columnIndex !== (prevCell.cellFormat.columnSpan + prevCell.columnIndex)) {\n return false;\n }\n }\n rowSpan = cell.cellFormat.rowSpan;\n }\n return true;\n }\n return this.canMergeSelectedCellsInTable(startCell.ownerTable, startCell, endCell);\n }\n }\n return false;\n };\n Editor.prototype.canMergeSelectedCellsInTable = function (table, startCell, endCell) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var startLeft = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var endLeft = startLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startLeft, endLeft, endCellLeft, endCellRight);\n startLeft = cellInfo.start;\n endLeft = cellInfo.end;\n var selectionLeft = 0;\n var selectionRight = 0;\n var isRowLeftWithinSel = false;\n var isRowRightWithinSel = false;\n var rowSpannedCells = [];\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n var rowLeft = 0;\n var rowRight = 0;\n var isStarted = false;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (this.checkCellWithInSelection(startLeft, endLeft, cellStart)) {\n isRowLeftWithinSel = false;\n isRowRightWithinSel = false;\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(cell);\n }\n if (!isStarted) {\n rowLeft = cellStart;\n rowRight = cellStart;\n isStarted = true;\n }\n var prevCell = cell.previousWidget;\n if (rowRight !== 0 && HelperMethods.round(rowRight, 0) !== HelperMethods.round(cellStart, 0)) {\n rowRight = cellStart;\n }\n rowRight += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n var isPrevCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, true);\n var isNextCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false);\n // When selected cell not having row spanned cells and column index is not having immediate cell index value,\n // then returned false.\n var isNoRowSpan = rowSpannedCells.length === 0 || rowSpannedCells.length === 1 && rowSpannedCells[0] === cell;\n // checks whether current cell is with in selection.\n var isCellWithInSel = this.checkCurrentCell(rowSpannedCells, cell, isPrevCellWithinSel, isNextCellWithinSel);\n // when last selected row not having equal row span then returned false.\n if (i === count && !isNullOrUndefined(prevCell) && cell.cellFormat.rowSpan > prevCell.cellFormat.rowSpan\n && !isCellWithInSel) {\n return false;\n }\n if (i !== rowStartIndex) {\n for (var m = 0; m < rowSpannedCells.length; m++) {\n {\n var rowSpan = (rowSpannedCells[m].ownerRow.rowIndex + rowSpannedCells[m].cellFormat.rowSpan) - 1;\n if (rowSpan >= row.rowIndex) {\n if (rowSpannedCells[m].columnIndex > cell.columnIndex) {\n isRowRightWithinSel = true;\n }\n else {\n isRowLeftWithinSel = true;\n }\n if (i === count && rowSpannedCells[m] !== cell\n && rowSpan > (cell.ownerRow.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return false;\n }\n if (rowSpan === row.rowIndex && !this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false)) {\n rowSpannedCells.splice(rowSpannedCells.indexOf(rowSpannedCells[m]), 1);\n }\n }\n }\n }\n }\n if (isPrevCellWithinSel && !isNullOrUndefined(prevCell)\n && isNoRowSpan\n && (cell.columnIndex !== prevCell.columnIndex + 1 && this.checkCellWidth(cell))) {\n return false;\n }\n }\n }\n if (i === rowStartIndex) {\n selectionLeft = rowLeft;\n selectionRight = rowRight;\n }\n else {\n if (rowRight > 0 && rowLeft > 0) {\n if (!((isRowLeftWithinSel || Math.round(selectionLeft) === Math.round(rowLeft))\n && (isRowRightWithinSel || Math.round(selectionRight) === Math.round(rowRight)))) {\n return false;\n }\n }\n if (i === count) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkCellWidth = function (cell) {\n var prevCell = cell.previousWidget;\n var cellLeft = this.viewer.selection.getCellLeft(cell.ownerRow, cell);\n var prevCellLeft = this.viewer.selection.getCellLeft(cell.ownerRow, prevCell);\n var left = prevCellLeft + HelperMethods.convertPointToPixel(prevCell.cellFormat.cellWidth);\n if (HelperMethods.round(left, 2) !== HelperMethods.round(cellLeft, 2)) {\n return true;\n }\n return false;\n };\n ;\n Editor.prototype.checkCellWithInSelection = function (startLeft, endLeft, cellStart) {\n if (HelperMethods.round(startLeft, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(endLeft, 2)) {\n return true;\n }\n return false;\n };\n ;\n Editor.prototype.checkPrevOrNextCellIsWithinSel = function (startLeft, endLeft, cell, isPrev) {\n var prevOrNextCell = isPrev ? cell.previousWidget : cell.nextWidget;\n var cellStart = 0;\n if (isNullOrUndefined(prevOrNextCell)) {\n return false;\n }\n cellStart = this.viewer.selection.getCellLeft(prevOrNextCell.ownerRow, prevOrNextCell);\n return this.checkCellWithInSelection(startLeft, endLeft, cellStart);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.checkCurrentCell = function (rowSpannedCells, cell, isPrevCellWithInSel, isNextCellWithinSel) {\n var cellOwner = cell.ownerRow;\n if (rowSpannedCells.length > 0) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCellOwner = rowSpannedCells[i].ownerRow;\n var rowSpan = (spannedCellOwner.rowIndex + rowSpannedCells[i].cellFormat.rowSpan) - 1;\n if (rowSpannedCells[i] === cell && (rowSpannedCells.length === 1 || this.checkRowSpannedCells(rowSpannedCells, cell))\n && !(isNextCellWithinSel || isPrevCellWithInSel)) {\n return true;\n }\n if (rowSpannedCells[i] !== cell && spannedCellOwner.rowIndex < cellOwner.rowIndex\n && rowSpan === (cellOwner.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkRowSpannedCells = function (rowSpannedCells, cell) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n if (rowSpannedCells[i] !== cell && rowSpannedCells[i].columnIndex === cell.columnIndex) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Editor.prototype.insertNewParagraphWidget = function (newParagraph, insertAfter) {\n this.updateInsertPosition();\n this.insertParagraph(newParagraph, insertAfter);\n if (!insertAfter) {\n var nextParagraph = void 0;\n var currentParagraph = newParagraph;\n do {\n nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n currentParagraph = nextParagraph;\n } while (nextParagraph && nextParagraph.equals(newParagraph));\n if (!isNullOrUndefined(nextParagraph)) {\n this.selection.selectParagraph(nextParagraph, true);\n }\n else {\n this.selection.selectParagraph(newParagraph, true);\n }\n }\n this.fireContentChange();\n };\n Editor.prototype.insertParagraph = function (newParagraph, insertAfter) {\n var lineWidget = this.selection.start.currentWidget;\n var offset = this.selection.start.offset;\n var currentParagraph = this.selection.start.paragraph;\n currentParagraph = currentParagraph.combineWidget(this.viewer);\n if (insertAfter) {\n // tslint:disable-next-line:max-line-length\n var length_1 = this.selection.getLineLength(currentParagraph.lastChild);\n var insertIndex_1 = newParagraph.firstChild ? newParagraph.firstChild.children.length : 0;\n // tslint:disable-next-line:max-line-length\n this.moveInlines(currentParagraph, newParagraph, insertIndex_1, offset, lineWidget, length_1, currentParagraph.lastChild);\n }\n else if (offset > 0) {\n this.moveInlines(currentParagraph, newParagraph, 0, 0, currentParagraph.firstChild, offset, lineWidget);\n }\n var splittedWidget = currentParagraph.getSplitWidgets();\n currentParagraph = insertAfter ? splittedWidget[splittedWidget.length - 1] : splittedWidget[0];\n var insertIndex = currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph);\n if (insertAfter) {\n insertIndex++;\n }\n var bodyWidget = currentParagraph.containerWidget;\n newParagraph.index = currentParagraph.index;\n newParagraph.containerWidget = bodyWidget;\n bodyWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n this.updateNextBlocksIndex(insertAfter ? currentParagraph : newParagraph, true);\n newParagraph.height = 0;\n this.viewer.layout.layoutBodyWidgetCollection(newParagraph.index, bodyWidget, newParagraph, false);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.moveInlines = function (currentParagraph, newParagraph, insertIndex, startOffset, startLine, endOffset, endLine) {\n if (newParagraph.childWidgets.length === 0) {\n var line = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(line);\n }\n var isMoved = false;\n this.viewer.layout.clearListElementBox(currentParagraph);\n this.viewer.layout.clearListElementBox(newParagraph);\n for (var j = 0; j < currentParagraph.childWidgets.length; j++) {\n var lineWidget = currentParagraph.childWidgets[j];\n if (startLine === lineWidget && endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, startOffset, endOffset, insertIndex, newParagraph);\n break;\n }\n if (endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, 0, endOffset, insertIndex, newParagraph);\n break;\n }\n else if (startLine === lineWidget) {\n isMoved = true;\n // tslint:disable-next-line:max-line-length\n insertIndex = this.moveContent(lineWidget, startOffset, this.viewer.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n else if (isMoved) {\n insertIndex = this.moveContent(lineWidget, 0, this.viewer.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n }\n this.removeEmptyLine(currentParagraph);\n if (!currentParagraph.isInsideTable) {\n this.viewer.layout.reLayoutParagraph(currentParagraph, 0, 0);\n }\n };\n /**\n * @private\n */\n //tslint:disable-next-line:max-line-length\n Editor.prototype.moveContent = function (lineWidget, startOffset, endOffset, insertIndex, paragraph) {\n var count = 0;\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (startOffset >= count + inline.length || inline instanceof ListTextElementBox) {\n if (!(inline instanceof ListTextElementBox)) {\n count += inline.length;\n }\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n if (endIndex > inline.length) {\n endIndex = inline.length;\n }\n if (startIndex > 0) {\n count += startIndex;\n }\n if (startIndex === 0 && endIndex === inline.length) {\n paragraph.firstChild.children.splice(insertIndex, 0, inline);\n inline.line = paragraph.firstChild;\n insertIndex++;\n // if (editAction < 4) {\n // this.unLinkFieldCharacter(inline);\n lineWidget.children.splice(i, 1);\n i--;\n // }\n }\n else if (inline instanceof TextElementBox) {\n // if (editAction < 4) {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(startIndex, endIndex - startIndex);\n paragraph.firstChild.children.splice(insertIndex, 0, span);\n span.line = paragraph.firstChild;\n insertIndex++;\n inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n }\n if (endOffset <= count + endIndex - startIndex) {\n break;\n }\n count += endIndex - startIndex;\n }\n return insertIndex;\n };\n /**\n * update complex changes when history is not preserved\n * @param {number} action?\n * @param {string} start?\n * @param {string} end?\n * @private\n */\n Editor.prototype.updateComplexWithoutHistory = function (action, start, end) {\n var selection = this.viewer.selection;\n if (action === 0) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n this.viewer.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n this.setPositionForCurrentIndex(selection.start, end);\n this.setPositionForCurrentIndex(selection.end, end);\n }\n if (action === 1) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n var endPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(endPosition, end);\n this.viewer.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.viewer.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (selection.owner.isShiftingEnabled) {\n this.viewer.layout.shiftLayoutedItems();\n if (this.viewer.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n }\n selection.owner.isShiftingEnabled = false;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.viewer.updateFocus();\n this.viewer.updateScrollBars();\n this.fireContentChange();\n this.isHandledComplex = true;\n };\n /**\n * reLayout\n * @param selection\n * @param isSelectionChanged\n * @private\n */\n Editor.prototype.reLayout = function (selection, isSelectionChanged) {\n if (!this.viewer.isComposingIME && this.editorHistory && this.editorHistory.isHandledComplexHistory()) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n || (this.editorHistory.currentBaseHistoryInfo\n && !(this.editorHistory.currentBaseHistoryInfo.action === 'ClearCharacterFormat'\n || this.editorHistory.currentBaseHistoryInfo.action === 'ClearParagraphFormat'))) {\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n this.isHandledComplex = false;\n return;\n }\n if (isNullOrUndefined(this.viewer.blockToShift)) {\n this.viewer.removeEmptyPages();\n this.viewer.layout.updateFieldElements();\n this.viewer.updateScrollBars();\n if (!selection.owner.isShiftingEnabled) {\n selection.fireSelectionChanged(true);\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n }\n if (isNullOrUndefined(isSelectionChanged)) {\n isSelectionChanged = selection.isEmpty;\n }\n if (selection.owner.isShiftingEnabled) {\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n this.viewer.layout.shiftLayoutedItems();\n if (this.viewer.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n this.getOffsetValue(selection);\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.viewer.updateFocus();\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n this.viewer.layout.allowLayout = true;\n }\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo &&\n ((this.editorHistory.currentBaseHistoryInfo.action !== 'RowResizing'\n && this.editorHistory.currentBaseHistoryInfo.action !== 'CellResizing')\n || (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (this.editorHistory.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n this.editorHistory.currentBaseHistoryInfo.updateSelection();\n }\n this.editorHistory.updateHistory();\n }\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.updateHeaderFooterWidget = function () {\n this.updateHeaderFooterWidgetToPage(this.selection.start.paragraph.bodyWidget);\n this.shiftPageContent(this.selection.start.paragraph.bodyWidget);\n };\n /**\n * @private\n */\n Editor.prototype.updateHeaderFooterWidgetToPage = function (node) {\n var currentPage = node.page;\n node = this.viewer.layout.updateHeaderFooterToParent(node);\n var isEvenPage = (node.headerFooterType === 'EvenHeader' || node.headerFooterType === 'EvenFooter');\n for (var i = 0; i < this.viewer.pages.length; i++) {\n var page = this.viewer.pages[i];\n if ((i + 1 === 1) && page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n node.headerFooterType.indexOf('FirstPage') !== -1) {\n return;\n }\n if (page.index === 0 && page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n node.headerFooterType.indexOf('FirstPage') === -1) {\n continue;\n }\n if (currentPage !== page) {\n if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if (isEvenPage && (i + 1) % 2 === 0) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n else if ((!isEvenPage && (i + 1) % 2 !== 0)) {\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage && (i + 1 !== 1)) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n }\n }\n else {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateHeaderFooterWidgetToPageInternal = function (page, widget, isHeader) {\n if (widget.page !== page) {\n var hfWidget = widget.clone();\n hfWidget.page = page;\n this.viewer.updateHFClientArea(hfWidget.sectionFormat, isHeader);\n hfWidget = this.viewer.layout.layoutHeaderFooterItems(this.viewer, hfWidget);\n var headerOrFooter = void 0;\n if (isHeader) {\n headerOrFooter = page.headerWidget;\n page.headerWidget = hfWidget;\n }\n else {\n headerOrFooter = page.footerWidget;\n page.footerWidget = hfWidget;\n }\n this.removeFieldInWidget(headerOrFooter);\n headerOrFooter.destroy();\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeFieldInWidget = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n this.removeFieldInBlock(widget.childWidgets[i]);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeFieldInBlock = function (block) {\n if (block instanceof TableWidget) {\n this.removeFieldTable(block);\n }\n else {\n this.removeField(block);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeFieldTable = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.removeFieldInWidget(row.childWidgets[j]);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.shiftPageContent = function (headerFooter) {\n var type = headerFooter.headerFooterType;\n var pageIndex;\n if (type === 'FirstPageHeader' || type === 'FirstPageFooter') {\n pageIndex = 0;\n }\n else if (headerFooter.sectionFormat.differentOddAndEvenPages) {\n if (headerFooter.sectionFormat.differentFirstPage) {\n pageIndex = (type === 'EvenHeader' || type === 'EvenFooter') ? 1 : 2;\n }\n else {\n pageIndex = (type.indexOf('Even') === -1) ? 0 : 1;\n }\n }\n else {\n pageIndex = headerFooter.sectionFormat.differentFirstPage ? 1 : 0;\n if (pageIndex === 1 && this.viewer.pages.length === 1) {\n pageIndex = 0;\n }\n }\n var page = this.viewer.pages[pageIndex];\n if (type.indexOf('Header') !== -1) {\n var firstBlock = page.bodyWidgets[0].firstChild;\n var top_1 = HelperMethods.convertPointToPixel(headerFooter.sectionFormat.topMargin);\n var headerDistance = HelperMethods.convertPointToPixel(headerFooter.sectionFormat.headerDistance);\n top_1 = Math.max(headerDistance + page.headerWidget.height, top_1);\n if (firstBlock.y !== top_1) {\n this.viewer.updateClientArea(page.bodyWidgets[0].sectionFormat, page);\n firstBlock = firstBlock.combineWidget(this.viewer);\n var prevWidget = firstBlock.previousRenderedWidget;\n if (prevWidget) {\n this.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n if (firstBlock.containerWidget !== prevWidget.containerWidget) {\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.updateContainerWidget(firstBlock, prevWidget.containerWidget, prevWidget.indexInOwner + 1, false);\n }\n }\n this.viewer.blockToShift = firstBlock;\n }\n }\n else {\n this.checkAndShiftFromBottom(page, headerFooter);\n }\n if (this.viewer.blockToShift) {\n this.viewer.renderedLists.clear();\n this.viewer.layout.shiftLayoutedItems();\n }\n };\n /**\n * @private\n */\n Editor.prototype.checkAndShiftFromBottom = function (page, footerWidget) {\n var bodyWidget = page.bodyWidgets[0];\n var blockToShift;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets[i];\n if (block.y + block.height > footerWidget.y) {\n blockToShift = block;\n break;\n }\n if (bodyWidget.childWidgets.length - 1 === i && block.y + block.height < footerWidget.y) {\n blockToShift = block;\n break;\n }\n }\n this.viewer.updateClientArea(bodyWidget.sectionFormat, page);\n this.viewer.cutFromTop(blockToShift.y);\n this.viewer.blockToShift = blockToShift;\n };\n //Paste Implementation ends\n //Character Format apply implementation starts\n /**\n * Change HighlightColor\n * @param {HighlightColor} highlightColor\n * Applies character format for selection.\n * @param {string} property\n * @param {Object} value\n * @param {boolean} update\n * @private\n */\n Editor.prototype.onApplyCharacterFormat = function (property, value, update) {\n var selection = this.viewer.selection;\n if (selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded) {\n return;\n }\n update = isNullOrUndefined(update) ? false : update;\n var action = (property[0].toUpperCase() + property.slice(1));\n var paragraph = selection.start.paragraph;\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n if (selection.isEmpty && selection.contextType !== 'List') {\n selection.skipFormatRetrieval = true;\n if (selection.end.isAtParagraphEnd) {\n this.initHistory(action);\n this.viewer.owner.isShiftingEnabled = true;\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n this.reLayout(this.viewer.selection);\n this.viewer.updateFocus();\n }\n else {\n selection.fireSelectionChanged(true);\n }\n selection.skipFormatRetrieval = false;\n return;\n }\n this.setOffsetValue(selection);\n this.initHistory(action);\n // Todo: Complete Microsoft Word behavior on apply formatting in empty selection\n // if (selection.isEmpty) {\n // this.viewer.owner.isShiftingEnabled = true;\n // this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n // this.reLayout(this.viewer.selection);\n // this.viewer.updateFocus();\n // return;\n // }\n if (selection.contextType === 'List') {\n // this.updateCharacterFormatForListText(selection, action, value, update);\n this.applyCharacterFormatForListText(selection, property, value, update);\n }\n else {\n //Iterate and update format.\n this.updateSelectionCharacterFormatting(property, value, update);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharacterFormatForListText = function (selection, property, values, update) {\n var listLevel = this.getListLevel(selection.start.paragraph);\n if (isNullOrUndefined(listLevel)) {\n return;\n }\n var characterFormat = listLevel.characterFormat;\n switch (property) {\n case 'bold':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'bold', !(characterFormat.bold));\n break;\n case 'italic':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'italic', !(characterFormat.italic));\n break;\n case 'fontColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontColor', values);\n break;\n case 'fontFamily':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontFamily', values);\n break;\n case 'fontSize':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontSize', values);\n break;\n case 'highlightColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'highlightColor', values);\n break;\n case 'baselineAlignment':\n if (characterFormat.baselineAlignment === values) {\n values = 'Normal';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'baselineAlignment', values);\n break;\n case 'strikethrough':\n if (characterFormat.strikethrough === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'strikethrough', values);\n break;\n case 'underline':\n if (characterFormat.underline === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'underline', values);\n break;\n case 'characterFormat':\n this.applyListCharacterFormatByValue(selection, characterFormat, undefined, values);\n break;\n }\n };\n Editor.prototype.applyListCharacterFormatByValue = function (selection, format, property, value) {\n this.initHistory('ListCharacterFormat');\n this.applyCharFormatValue(format, property, value, false);\n this.editorHistory.updateHistory();\n this.reLayout(selection);\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.updateListCharacterFormat = function (selection, property, value) {\n this.updateListTextSelRange(selection, property, value, false);\n };\n Editor.prototype.updateListTextSelRange = function (selection, property, value, update) {\n this.viewer.owner.isShiftingEnabled = true;\n var startPositionInternal = selection.start;\n var endPositionInternal = selection.end;\n if (!selection.isForward) {\n startPositionInternal = selection.end;\n endPositionInternal = selection.start;\n }\n this.initHistoryPosition(selection, startPositionInternal);\n var listLevel = this.getListLevel(selection.start.paragraph);\n this.applyCharFormatValue(listLevel.characterFormat, property, value, update);\n this.startSelectionReLayouting(startPositionInternal.paragraph, selection, startPositionInternal, endPositionInternal);\n };\n /**\n * @private\n */\n Editor.prototype.getListLevel = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(currentList) &&\n !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId))\n // && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels.getItem(listLevelNumber))) {\n && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels)) {\n return this.viewer.layout.getListLevel(currentList, listLevelNumber);\n }\n return undefined;\n };\n Editor.prototype.updateInsertPosition = function () {\n var selection = this.viewer.selection;\n var position = selection.start;\n if (!selection.isForward) {\n position = selection.end;\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && !isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.updateHistoryPosition(position, true);\n }\n }\n };\n /**\n * preserve paragraph and offset value for selection\n * @private\n */\n Editor.prototype.setOffsetValue = function (selection) {\n var info = this.getParagraphInfo(selection.start);\n this.startParagraph = info.paragraph;\n this.startOffset = info.offset;\n info = this.getParagraphInfo(selection.end);\n this.endParagraph = info.paragraph;\n this.endOffset = info.offset;\n };\n /**\n * Toggles the highlight color property of selected contents.\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n */\n Editor.prototype.toggleHighlightColor = function (highlightColor) {\n var selection = this.viewer.selection;\n if (isNullOrUndefined(highlightColor) || highlightColor === 'NoColor') {\n highlightColor = 'Yellow';\n }\n //In Ms Word the highlight color is took from the ribbon. So we Have given yellow as constant.\n if (selection.characterFormat.highlightColor === highlightColor) {\n highlightColor = 'NoColor';\n }\n this.selection.characterFormat.highlightColor = highlightColor;\n };\n /**\n * Toggles the subscript formatting of selected contents.\n */\n Editor.prototype.toggleSubscript = function () {\n if (!this.owner.isReadOnlyMode) {\n var value = this.selection.characterFormat.baselineAlignment === 'Subscript' ? 'Normal' : 'Subscript';\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n /**\n * Toggles the superscript formatting of selected contents.\n */\n Editor.prototype.toggleSuperscript = function () {\n if (!this.owner.isReadOnlyMode) {\n var value = this.selection.characterFormat.baselineAlignment === 'Superscript' ? 'Normal' : 'Superscript';\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n /**\n * Toggles the text alignment property of selected contents.\n * @param {TextAlignment} textAlignment Default value of ‘textAlignment parameter is TextAlignment.Left.\n */\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n */\n Editor.prototype.increaseIndent = function () {\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('leftIndent', this.viewer.defaultTabWidth, true, false);\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n */\n Editor.prototype.decreaseIndent = function () {\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('leftIndent', -this.viewer.defaultTabWidth, true, false);\n }\n };\n /**\n * Clears the list format for selected paragraphs.\n */\n Editor.prototype.clearList = function () {\n this.selection.owner.editorModule.onApplyList(undefined);\n };\n /**\n * Applies the bullet list to selected paragraphs.\n * @param {string} bullet Bullet character\n * @param {string} fontFamily Bullet font family\n */\n Editor.prototype.applyBullet = function (bullet, fontFamily) {\n if (!this.owner.isReadOnlyMode) {\n this.applyBulletOrNumbering(bullet, 'Bullet', fontFamily);\n }\n };\n /**\n * Applies the numbering list to selected paragraphs.\n * @param numberFormat “%n” representations in ‘numberFormat’ parameter will be replaced by respective list level’s value.\n * `“%1)” will be displayed as “1)” `\n * @param listLevelPattern Default value of ‘listLevelPattern’ parameter is ListLevelPattern.Arabic\n */\n Editor.prototype.applyNumbering = function (numberFormat, listLevelPattern) {\n if (!this.owner.isReadOnlyMode) {\n this.applyBulletOrNumbering(numberFormat, listLevelPattern, 'Verdana');\n }\n };\n /**\n * Toggles the baseline alignment property of selected contents.\n * @param {Selection} selection\n * @param {BaselineAlignment} baseAlignment\n */\n Editor.prototype.toggleBaselineAlignment = function (baseAlignment) {\n this.updateProperty(2, baseAlignment);\n };\n /**\n * Clears the formatting.\n */\n Editor.prototype.clearFormatting = function () {\n var selection = this.viewer.selection;\n this.initComplexHistory('ClearFormat');\n // let startIndex: string = selection.start.getHierarchicalIndexInternal();\n // let endIndex: string = selection.end.getHierarchicalIndexInternal();\n if (selection.isEmpty) {\n selection.start.moveToParagraphStartInternal(selection, false);\n selection.end.moveToParagraphEndInternal(selection, false);\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearCharacterFormat');\n }\n this.updateSelectionCharacterFormatting('ClearCharacterFormat', undefined, false);\n this.getOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearParagraphFormat');\n }\n this.updateParagraphFormatInternal('ClearParagraphFormat', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.getOffsetValue(selection);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n // else {\n // this.checkAndUpdatedSelection(startIndex, endIndex);\n // }\n };\n /**\n * Toggles the specified property. If property is assigned already. Then property will be changed\n * @param {Selection} selection\n * @param {number} type\n * @param {Object} value\n * @private\n */\n Editor.prototype.updateProperty = function (type, value) {\n var selection = this.selection;\n if (selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded) {\n return;\n }\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n var paragraph = startPosition.paragraph;\n if (!isNullOrUndefined(inline) && inline.length === indexInInline && !this.selection.isEmpty) {\n inline = inline.nextNode;\n }\n if (type === 1) {\n var currentUnderline = 'None';\n if (!isNullOrUndefined(inline)) {\n currentUnderline = inline.characterFormat.underline;\n }\n else if (!isNullOrUndefined(paragraph)) {\n currentUnderline = paragraph.characterFormat.underline;\n }\n this.selection.characterFormat.underline = value === currentUnderline ? 'None' : value;\n }\n else {\n var script = 'Normal';\n if (!isNullOrUndefined(inline)) {\n script = inline.characterFormat.baselineAlignment;\n }\n else if (!isNullOrUndefined(paragraph)) {\n script = paragraph.characterFormat.baselineAlignment;\n }\n if (script === value) {\n value = 'Normal';\n }\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n Editor.prototype.getCompleteStyles = function () {\n var completeStylesString = '{\"styles\":[';\n for (var _i = 0, _a = this.viewer.preDefinedStyles.getItem(); _i < _a.length; _i++) {\n var name_1 = _a[_i];\n completeStylesString += (this.viewer.preDefinedStyles.get(name_1) + ',');\n }\n return completeStylesString.slice(0, -1) + ']}';\n };\n /**\n * Initialize default styles\n * @private\n */\n Editor.prototype.intializeDefaultStyles = function () {\n var existingStyles = this.owner.getStyleNames('Paragraph');\n var defaultStyleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'];\n var styleNames = defaultStyleNames.filter(function (val) {\n return existingStyles.indexOf(val) === -1;\n });\n for (var _i = 0, styleNames_1 = styleNames; _i < styleNames_1.length; _i++) {\n var name_2 = styleNames_1[_i];\n this.createStyle(this.viewer.preDefinedStyles.get(name_2));\n }\n };\n /**\n * Creates a new instance of Style.\n */\n Editor.prototype.createStyle = function (styleString) {\n this.createStyleIn(styleString);\n };\n /**\n * Create a Style.\n * @private\n */\n Editor.prototype.createStyleIn = function (styleString) {\n /* tslint:disable:no-any */\n var style = JSON.parse(styleString);\n var styleObj = this.viewer.styles.findByName(style.name);\n if (styleObj !== undefined) {\n //Create a new style with new name and add it to collection.\n style.name = this.getUniqueStyleName(style.name);\n }\n this.viewer.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), style, this.viewer.styles);\n return this.viewer.styles.findByName(style.name);\n };\n /**\n * @private\n */\n Editor.prototype.getUniqueStyleName = function (name) {\n var uniqueName = this.getUniqueName(name);\n var style = this.viewer.styles.findByName(uniqueName);\n while (!isNullOrUndefined(style)) {\n uniqueName = this.getUniqueStyleName(style.name);\n style = this.viewer.styles.findByName(uniqueName);\n }\n return uniqueName;\n };\n Editor.prototype.getUniqueName = function (name) {\n var matchArray = name.match(/\\d+$/);\n var returnName;\n if (!isNullOrUndefined(matchArray) && matchArray.length > 0) {\n return name.replace(matchArray[0], (parseInt(matchArray[0], 10) + 1).toString());\n }\n else {\n return name + '_1';\n }\n };\n /**\n * Update Character format for selection\n * @private\n */\n Editor.prototype.updateSelectionCharacterFormatting = function (property, values, update) {\n if (isNullOrUndefined(property)) {\n property = 'CharacterFormat';\n }\n switch (property) {\n case 'bold':\n this.updateCharacterFormat('bold', values);\n break;\n case 'italic':\n this.updateCharacterFormat('italic', values);\n break;\n case 'fontColor':\n this.updateCharacterFormat('fontColor', values);\n break;\n case 'fontFamily':\n this.updateCharacterFormat('fontFamily', values);\n break;\n case 'fontSize':\n this.updateCharacterFormatWithUpdate(this.viewer.selection, 'fontSize', values, update);\n break;\n case 'highlightColor':\n this.updateCharacterFormat('highlightColor', values);\n break;\n case 'baselineAlignment':\n this.updateCharacterFormat('baselineAlignment', values);\n break;\n case 'strikethrough':\n this.updateCharacterFormat('strikethrough', values);\n break;\n case 'underline':\n this.updateCharacterFormat('underline', values);\n break;\n case 'styleName':\n this.updateCharacterFormatWithUpdate(this.viewer.selection, 'styleName', values, true);\n break;\n case 'CharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n case 'ClearCharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n }\n this.reLayout(this.viewer.selection);\n };\n /**\n * Update character format for selection range\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @returns void\n * @private\n */\n Editor.prototype.updateCharacterFormat = function (property, value) {\n this.updateCharacterFormatWithUpdate(this.viewer.selection, property, value, false);\n };\n Editor.prototype.updateCharacterFormatWithUpdate = function (selection, property, value, update) {\n this.viewer.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n this.applyCharFormatSelectedContent(startPosition.paragraph, selection, startPosition, endPosition, property, value, update);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatSelectedContent = function (paragraph, selection, start, end, property, value, update) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyCharFormatCell(cell, selection, start, end, property, value, update);\n var table = cell.ownerTable;\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n this.applyCharFormat(paragraph, selection, start, end, property, value, update);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForSelectedPara = function (paragraph, selection, property, value, update) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n this.applyCharFormatValue(element.characterFormat, property, value, update);\n }\n }\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n };\n Editor.prototype.splittedLastParagraph = function (paragraph) {\n var splittedWidets = paragraph.getSplitWidgets();\n return splittedWidets[splittedWidets.length - 1];\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.getNextParagraphForCharacterFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.viewer.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n this.applyCharFormat(block, this.viewer.selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatForTable(0, block, this.viewer.selection, start, end, property, value, update);\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormat = function (paragraph, selection, start, end, property, value, update) {\n paragraph = paragraph.combineWidget(this.viewer);\n var startOffset = 0;\n var length = selection.getParagraphLength(paragraph);\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endOffset = end.offset;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n if (!isNullOrUndefined(selection)) {\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n }\n }\n if (!paragraph.equals(end.paragraph)) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n endOffset = length;\n }\n else {\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n if (selection.isParagraphLastLine(lastLine) && end.currentWidget === lastLine\n && ((endOffset === selection.getLineLength(lastLine) + 1) || (selection.isEmpty && selection.end.isAtParagraphEnd))) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n }\n }\n // let count: number = 0;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var line = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = selection.getStartLineOffset(line);\n }\n if (line === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = selection.getLineLength(line);\n }\n var count = 0;\n for (var j = 0; j < line.children.length; j++) {\n var inlineObj = line.children[j];\n if (inlineObj instanceof ListTextElementBox) {\n continue;\n }\n if (startOffset >= count + inlineObj.length) {\n count += inlineObj.length;\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n var inlineLength = inlineObj.length;\n if (endIndex > inlineLength) {\n endIndex = inlineLength;\n }\n j += this.applyCharFormatInline(inlineObj, selection, startIndex, endIndex, property, value, update);\n if (endOffset <= count + inlineLength) {\n break;\n }\n count += inlineLength;\n }\n }\n var endParagraph = end.paragraph;\n this.viewer.layout.reLayoutParagraph(paragraph, startLineWidget, 0);\n if (paragraph.equals(endParagraph)) {\n return;\n }\n this.getNextParagraphForCharacterFormatting(paragraph, start, end, property, value, update);\n };\n /**\n * Toggles the bold property of selected contents.\n */\n Editor.prototype.toggleBold = function () {\n if (this.viewer.owner.isReadOnlyMode) {\n return;\n }\n var value = this.getCurrentSelectionValue('bold');\n this.selection.characterFormat.bold = value;\n };\n /**\n * Toggles the bold property of selected contents.\n */\n Editor.prototype.toggleItalic = function () {\n if (this.viewer.owner.isReadOnlyMode) {\n return;\n }\n var value = this.getCurrentSelectionValue('italic');\n this.selection.characterFormat.italic = value;\n };\n Editor.prototype.getCurrentSelectionValue = function (property) {\n var value = false;\n if ((property === 'bold' || property === 'italic')) {\n var index = 0;\n var start = this.selection.start;\n if (!this.selection.isForward) {\n start = this.selection.end;\n }\n var lineWidget = start.currentWidget;\n var inlineObj = lineWidget.getInline(start.offset, index);\n var inline = inlineObj.element;\n // inline.ownerBase\n index = inlineObj.index;\n var characterFormat = lineWidget.paragraph.characterFormat;\n if (!isNullOrUndefined(inline)) {\n if (!this.selection.isEmpty && index === inline.length) {\n characterFormat = isNullOrUndefined(inline.nextNode) ? lineWidget.paragraph.characterFormat\n : inline.nextNode.characterFormat;\n }\n else {\n characterFormat = inline.characterFormat;\n }\n }\n if (property === 'bold') {\n value = !(characterFormat.bold);\n }\n if (property === 'italic') {\n value = !(characterFormat.italic);\n }\n }\n return value;\n };\n /**\n * Toggles the underline property of selected contents.\n * @param underline Default value of ‘underline’ parameter is Single.\n */\n Editor.prototype.toggleUnderline = function (underline) {\n if (!this.owner.isReadOnlyMode) {\n this.updateProperty(1, underline);\n }\n };\n /**\n * Toggles the strike through property of selected contents.\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n */\n Editor.prototype.toggleStrikethrough = function (strikethrough) {\n if (!this.owner.isReadOnlyMode) {\n var value = void 0;\n if (isNullOrUndefined(strikethrough)) {\n value = this.selection.characterFormat.strikethrough === 'SingleStrike' ? 'None' : 'SingleStrike';\n }\n else {\n value = strikethrough;\n }\n this.selection.characterFormat.strikethrough = value;\n }\n };\n Editor.prototype.updateFontSize = function (format, value) {\n if (typeof (value) === 'number' && !(value < 0 && format.fontSize === 1)) {\n return format.fontSize + value;\n }\n var fontsizeCollection = [8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 26, 28, 36, 48, 72];\n if (typeof (value) === 'string' && value === 'increment') {\n if (format.fontSize < 8) {\n return format.fontSize + 1;\n }\n else if (format.fontSize >= 72 && format.fontSize < 80) {\n return 80;\n }\n else if (format.fontSize >= 80) {\n return format.fontSize + 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize < fontsizeCollection[i]) {\n return fontsizeCollection[i];\n }\n }\n }\n }\n else if (typeof (value) === 'string' && value === 'decrement' && format.fontSize > 1) {\n if (format.fontSize <= 8) {\n return format.fontSize - 1;\n }\n else if (format.fontSize > 72 && format.fontSize <= 80) {\n return 72;\n }\n else if (format.fontSize > 80) {\n return format.fontSize - 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize <= fontsizeCollection[i]) {\n return fontsizeCollection[i - 1];\n }\n }\n }\n }\n return format.fontSize;\n };\n // Inline\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n if (startIndex === 0 && endIndex === inline.length) {\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n return 0;\n }\n else if (inline instanceof TextElementBox) {\n return this.formatInline(inline, selection, startIndex, endIndex, property, value, update);\n }\n return 0;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.formatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n var x = 0;\n var node = inline;\n var index = inline.line.children.indexOf(node);\n var paragraph = inline.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(inline.line);\n var textElement;\n if (startIndex > 0) {\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n textElement.line = inline.line;\n textElement.text = inline.text.substr(startIndex, endIndex - startIndex);\n this.applyCharFormatValue(textElement.characterFormat, property, value, update);\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n // this.addToLinkedFields(span); \n }\n if (endIndex < node.length) {\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n textElement.text = node.text.substring(endIndex);\n textElement.line = inline.line;\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n // this.addToLinkedFields(span); \n }\n if (startIndex === 0) {\n inline.text = inline.text.substr(0, endIndex);\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n }\n else {\n inline.text = inline.text.substr(0, startIndex);\n }\n return x;\n };\n // Cell\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatCell = function (cell, selection, start, end, property, value, update) {\n if (end.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, containerCell);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n value = this.getCharacterFormatValueOfCell(cell, selection, value, property);\n this.applyCharFormatForSelectedCell(containerCell, selection, property, value, update);\n }\n else {\n if (startCell === containerCell) {\n this.applyCharFormat(start.paragraph, selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatRow(startCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n }\n else { //Format other selected cells in current table.\n this.applyCharFormatForTableCell(containerCell.ownerTable, selection, containerCell, endCell, property, value, update);\n }\n }\n else {\n this.applyCharFormatRow(containerCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n else {\n var tableCell = selection.getContainerCell(cell);\n this.applyCharFormatRow(tableCell.ownerRow, selection, start, end, property, value, update);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForSelectedCell = function (cell, selection, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyCharFormatForSelectedPara(block, selection, property, value, update);\n }\n else {\n this.applyCharFormatForSelTable(block, selection, property, value, update);\n }\n }\n };\n // Row\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatRow = function (row, selection, start, end, property, value, update) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[0], selection, value, property);\n this.applyCharFormatForTable(row.rowIndex, row.ownerTable, selection, start, end, property, value, update);\n };\n // Table\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForTable = function (index, table, selection, start, end, property, value, update) {\n table = table.combineWidget(this.viewer);\n for (var i = index; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForCharacterFormatting(table, start, end, property, value, update);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForSelTable = function (tableWidget, selection, property, value, update) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForTableCell = function (table, selection, startCell, endCell, property, value, update) {\n var startCellLeft = selection.getCellLeft(startCell.ownerRow, startCell);\n var startCellRight = startCellLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startCellLeft, startCellRight, endCellLeft, endCellRight);\n startCellLeft = cellInfo.start;\n startCellRight = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (HelperMethods.round(startCellLeft, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(startCellRight, 2)) {\n if (!isStarted) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[j], selection, value, property);\n isStarted = true;\n }\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n }\n };\n Editor.prototype.updateSelectedCellsInTable = function (start, end, endCellLeft, endCellRight) {\n var selection = this.viewer.selection;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > selection.upDownSelectionLength) {\n start = selection.upDownSelectionLength;\n }\n if (end < selection.upDownSelectionLength) {\n end = selection.upDownSelectionLength;\n }\n return { start: start, end: end };\n };\n Editor.prototype.getCharacterFormatValueOfCell = function (cell, selection, value, property) {\n if (typeof (value) === 'boolean' || (value === undefined && (property === 'bold' || property === 'italic'))) {\n var firstParagraph = selection.getFirstParagraph(cell);\n var format = firstParagraph.characterFormat;\n if (firstParagraph.childWidgets.length > 0 && firstParagraph.childWidgets[0].children.length > 0) {\n format = firstParagraph.childWidgets[0].children[0].characterFormat;\n }\n value = !format.getPropertyValue(property);\n }\n return value;\n };\n /**\n * Apply Character format for selection\n * @private\n */\n Editor.prototype.applyCharFormatValueInternal = function (selection, format, property, value) {\n this.applyCharFormatValue(format, property, value, false);\n };\n Editor.prototype.copyInlineCharacterFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueCharacterFormat = sourceFormat.uniqueCharacterFormat;\n destFormat.baseCharStyle = sourceFormat.baseCharStyle;\n };\n Editor.prototype.applyCharFormatValue = function (format, property, value, update) {\n if (update && property === 'fontSize') {\n value = this.updateFontSize(format, value);\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedProperties(format, property, value);\n }\n if (value instanceof WCharacterFormat) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyInlineCharacterFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n return;\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n return;\n }\n if (property === 'bold') {\n format.bold = value;\n }\n else if (property === 'italic') {\n format.italic = value;\n }\n else if (property === 'fontColor') {\n format.fontColor = value;\n }\n else if (property === 'fontFamily') {\n format.fontFamily = value;\n }\n else if (property === 'fontSize') {\n format.fontSize = value;\n }\n else if (property === 'highlightColor') {\n format.highlightColor = value;\n }\n else if (property === 'baselineAlignment') {\n format.baselineAlignment = value;\n }\n else if (property === 'strikethrough') {\n format.strikethrough = value;\n }\n else if (property === 'underline') {\n format.underline = value;\n }\n else if (property === 'styleName') {\n format.baseCharStyle = value;\n }\n };\n /**\n * @private\n */\n Editor.prototype.onImageFormat = function (elementBox, width, height) {\n var modifiedFormat = new ImageFormat(elementBox);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ImageResizing');\n this.editorHistory.currentBaseHistoryInfo.modifiedProperties.push(modifiedFormat);\n }\n this.setOffsetValue(this.selection);\n elementBox.width = width;\n elementBox.height = height;\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.reLayoutParagraph(elementBox.line.paragraph, elementBox.line.indexInOwner, 0);\n this.reLayout(this.selection, false);\n if (this.viewer.owner.imageResizerModule) {\n this.viewer.owner.imageResizerModule.positionImageResizer(elementBox);\n }\n };\n /**\n * Toggles the text alignment of selected paragraphs.\n * @param {TextAlignment} textAlignment\n */\n Editor.prototype.toggleTextAlignment = function (textAlignment) {\n if (this.viewer.owner.isReadOnlyMode || !this.viewer.owner.isDocumentLoaded) {\n return;\n }\n // Toggle performed based on current selection format similar to MS word behavior.\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.viewer.selection.paragraphFormat.textAlignment) && this.viewer.selection.paragraphFormat.textAlignment === textAlignment) {\n if (textAlignment === 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Justify', false, true);\n }\n else {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n }\n }\n else {\n this.onApplyParagraphFormat('textAlignment', textAlignment, false, true);\n }\n };\n /**\n * Applies paragraph format for the selection ranges.\n * @param {string} property\n * @param {Object} value\n * @param {boolean} update\n * @param {boolean} isSelectionChanged\n * @private\n */\n Editor.prototype.onApplyParagraphFormat = function (property, value, update, isSelectionChanged) {\n var action = (property[0].toUpperCase() + property.slice(1));\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n this.initHistory(action);\n if (this.viewer.owner.isReadOnlyMode || !this.viewer.owner.isDocumentLoaded) {\n return;\n }\n if (property === 'leftIndent') {\n if (selection.paragraphFormat.listId !== -1 && update) {\n this.updateListLevel(value > 0);\n return;\n }\n }\n if (selection.isEmpty) {\n this.setOffsetValue(selection);\n if (update && property === 'leftIndent') {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n var para = selection.start.paragraph.combineWidget(this.viewer);\n this.applyParaFormatProperty(para, property, value, update);\n this.layoutItemBlock(para, false);\n }\n else {\n //Iterate and update formatting's. \n this.setOffsetValue(selection);\n this.updateSelectionParagraphFormatting(property, value, update);\n }\n this.reLayout(selection);\n };\n /**\n * Update the list level\n * @param {boolean} increaseLevel\n * @private\n */\n Editor.prototype.updateListLevel = function (increaseLevel) {\n // Increment or Decrement list level for Multilevel lists.\n var viewer = this.viewer;\n var listFormat = this.viewer.selection.start.paragraph.paragraphFormat.listFormat;\n var paragraphFormat = this.viewer.selection.start.paragraph.paragraphFormat;\n var list = viewer.getListById(paragraphFormat.listFormat.listId);\n var listLevel = viewer.layout.getListLevel(list, paragraphFormat.listFormat.listLevelNumber);\n var levelNumber;\n if (increaseLevel) {\n levelNumber = paragraphFormat.listFormat.listLevelNumber + 1;\n }\n else {\n levelNumber = paragraphFormat.listFormat.listLevelNumber - 1;\n }\n var nextListLevel = viewer.layout.getListLevel(list, levelNumber);\n if (!isNullOrUndefined(nextListLevel)) {\n this.onApplyListInternal(list, levelNumber);\n viewer.selection.start.updatePhysicalPosition(true);\n viewer.selection.end.updatePhysicalPosition(true);\n viewer.selection.updateCaretPosition();\n }\n };\n /**\n * Applies list\n * @param {WList} list\n * @param {number} listLevelNumber\n * @private\n */\n Editor.prototype.onApplyListInternal = function (list, listLevelNumber) {\n var selection = this.viewer.selection;\n var listFormat = new WListFormat();\n if (!isNullOrUndefined(list) && listLevelNumber >= 0 && listLevelNumber < 9) {\n listFormat.listId = list.listId;\n listFormat.listLevelNumber = listLevelNumber;\n }\n this.onApplyParagraphFormat('listFormat', listFormat, false, false);\n };\n /**\n * Apply paragraph format to selection range\n * @private\n */\n Editor.prototype.updateSelectionParagraphFormatting = function (property, value, update) {\n var selection = this.viewer.selection;\n if (property === 'leftIndent' && update) {\n if (!isNullOrUndefined(selection.start) && selection.start.isExistBefore(selection.end)) {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n else {\n value = this.getIndentIncrementValue(selection.end.paragraph, value);\n }\n }\n this.updateParagraphFormatInternal(property, value, update);\n };\n Editor.prototype.getIndentIncrementValue = function (currentParagraph, incrementFactor) {\n var currentParagraphIndent = currentParagraph.paragraphFormat.leftIndent;\n if (currentParagraphIndent < 0) {\n // In MS Word, if the current paragraph left indent is lesser that or equal to 0\n // then performing decrement indent will set left indent to 0. \n if (incrementFactor < 0 || currentParagraphIndent + incrementFactor >= 0) {\n return -currentParagraphIndent;\n }\n else {\n var incrementValue = -this.getIndentIncrementValueInternal(-currentParagraphIndent, -incrementFactor);\n return incrementValue % incrementFactor === 0 ? incrementValue : incrementValue + incrementFactor;\n }\n }\n else {\n return this.getIndentIncrementValueInternal(currentParagraphIndent, incrementFactor);\n }\n };\n Editor.prototype.getIndentIncrementValueInternal = function (position, incrementFactor) {\n var tabValue = Math.abs(incrementFactor);\n if (position === 0 || tabValue === 0) {\n return incrementFactor > 0 ? tabValue : 0;\n }\n else {\n var diff = ((Math.round(position) * 100) % (Math.round(tabValue) * 100)) / 100;\n var cnt = (Math.round(position) - diff) / Math.round(tabValue);\n var fPosition = cnt * tabValue;\n if (incrementFactor > 0) {\n fPosition += tabValue;\n }\n return (fPosition - position) === 0 ? incrementFactor : fPosition - position;\n }\n };\n Editor.prototype.updateParagraphFormatInternal = function (property, value, update) {\n if (isNullOrUndefined(property)) {\n property = 'ParagraphFormat';\n }\n switch (property) {\n case 'afterSpacing':\n this.updateParagraphFormat('afterSpacing', value, false);\n break;\n case 'beforeSpacing':\n this.updateParagraphFormat('beforeSpacing', value, false);\n break;\n case 'rightIndent':\n this.updateParagraphFormat('rightIndent', value, false);\n break;\n case 'leftIndent':\n this.updateParagraphFormat('leftIndent', value, update);\n break;\n case 'firstLineIndent':\n this.updateParagraphFormat('firstLineIndent', value, false);\n break;\n case 'lineSpacing':\n this.updateParagraphFormat('lineSpacing', value, false);\n break;\n case 'lineSpacingType':\n this.updateParagraphFormat('lineSpacingType', value, false);\n break;\n case 'textAlignment':\n this.updateParagraphFormat('textAlignment', value, false);\n break;\n case 'listFormat':\n this.updateParagraphFormat('listFormat', value, false);\n break;\n case 'ParagraphFormat':\n this.updateParagraphFormat(undefined, value, false);\n break;\n case 'styleName':\n this.updateParagraphFormat('styleName', value, false);\n break;\n case 'ClearParagraphFormat':\n // this.initializeHistory('ClearParagraphFormat', selectionRange);\n this.updateParagraphFormat(undefined, value, false);\n break;\n }\n };\n /**\n * Update paragraph format on undo\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @param {boolean} update\n * @private\n */\n Editor.prototype.updateParagraphFormat = function (property, value, update) {\n var selection = this.viewer.selection;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.updateInsertPosition(selection, startPosition);\n this.applyParaFormatSelectedContent(startPosition, endPosition, property, value, update);\n // this.startSelectionReLayouting(startPosition.paragraph, selection, startPosition, endPosition);\n };\n Editor.prototype.applyParaFormatSelectedContent = function (start, end, property, value, update) {\n var selection = this.viewer.selection;\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyParaFormatInCell(cell, start, end, property, value, update);\n var table = cell.ownerTable;\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(value) && !this.selection.isEmpty && property === 'styleName' && this.applyCharacterStyle(start.paragraph, start, end, property, value, update)) {\n return;\n }\n else {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n }\n };\n /**\n * Apply Paragraph format\n * @private\n */\n Editor.prototype.applyParaFormatProperty = function (paragraph, property, value, update) {\n var format = paragraph.paragraphFormat;\n if (update && property === 'leftIndent') {\n value = format.leftIndent + value;\n }\n if (property === 'listFormat' && value instanceof WListFormat) {\n var listFormat = value;\n if (!listFormat.hasValue('listLevelNumber')) {\n listFormat.listLevelNumber = format.listFormat.listLevelNumber;\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForParagraphFormat(format, property, value);\n }\n if (value instanceof WParagraphFormat) {\n if (isNullOrUndefined(property)) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyParagraphFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n }\n else if (property === 'listFormat') {\n format.listFormat = value.listFormat;\n // this.handleListFormat(format, value as WParagraphFormat);\n }\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n this.viewer.layout.reLayoutParagraph(format.ownerBase, 0, 0);\n return;\n }\n if (property === 'afterSpacing') {\n format.afterSpacing = value;\n }\n else if (property === 'beforeSpacing') {\n format.beforeSpacing = value;\n }\n else if (property === 'leftIndent') {\n format.leftIndent = value;\n }\n else if (property === 'lineSpacingType') {\n format.lineSpacingType = value;\n }\n else if (property === 'lineSpacing') {\n format.lineSpacing = value;\n }\n else if (property === 'rightIndent') {\n format.rightIndent = value;\n }\n else if (property === 'firstLineIndent') {\n format.firstLineIndent = value;\n }\n else if (property === 'textAlignment') {\n format.textAlignment = value;\n this.viewer.layout.allowLayout = false;\n }\n else if (property === 'styleName') {\n if (typeof (value) === 'string') {\n value = this.viewer.styles.findByName(value);\n }\n format.ApplyStyle(value);\n }\n else if (property === 'listFormat') {\n if (value instanceof WParagraphFormat) {\n this.copyFromListLevelParagraphFormat(format, value);\n value = value.listFormat;\n }\n format.listFormat.copyFormat(value);\n this.viewer.layout.clearListElementBox(format.ownerBase);\n this.onListFormatChange(format.ownerBase, value, format);\n this.layoutItemBlock(format.ownerBase, false);\n return;\n }\n };\n Editor.prototype.copyParagraphFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueParagraphFormat = sourceFormat.uniqueParagraphFormat;\n destFormat.listFormat = sourceFormat.listFormat;\n destFormat.baseStyle = sourceFormat.baseStyle;\n };\n Editor.prototype.onListFormatChange = function (paragraph, listFormat, paraFormat) {\n if (listFormat instanceof WListFormat) {\n var currentFormat = listFormat;\n // currentFormat.setOwnerBase(paraFormat);\n this.updateListParagraphFormat(paragraph, listFormat);\n }\n };\n Editor.prototype.updateListParagraphFormat = function (paragraph, listFormat) {\n var list = this.viewer.getListById(listFormat.listId);\n var listlevel = undefined;\n if (!isNullOrUndefined(list)) {\n listlevel = this.viewer.layout.getListLevel(list, listFormat.listLevelNumber);\n }\n var isUpdateIndent = !this.editorHistory || (this.editorHistory && !this.editorHistory.isUndoing);\n if (isUpdateIndent) {\n if (paragraph instanceof ParagraphWidget && !isNullOrUndefined(listlevel)\n && !isNullOrUndefined(listlevel.paragraphFormat) && !isNullOrUndefined(paragraph.containerWidget)) {\n this.copyFromListLevelParagraphFormat(paragraph.paragraphFormat, listlevel.paragraphFormat);\n }\n else if (isNullOrUndefined(list)) {\n paragraph.paragraphFormat.leftIndent = undefined;\n paragraph.paragraphFormat.firstLineIndent = undefined;\n }\n }\n };\n /**\n * Copies list level paragraph format\n * @param {WParagraphFormat} oldFormat\n * @param {WParagraphFormat} newFormat\n * @private\n */\n Editor.prototype.copyFromListLevelParagraphFormat = function (oldFormat, newFormat) {\n if (!isNullOrUndefined(newFormat.leftIndent)) {\n oldFormat.leftIndent = newFormat.leftIndent;\n }\n if (!isNullOrUndefined(newFormat.firstLineIndent)) {\n oldFormat.firstLineIndent = newFormat.firstLineIndent;\n }\n };\n /**\n * @private\n */\n Editor.prototype.applyContinueNumbering = function (selection) {\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ContinueNumbering');\n }\n this.applyContinueNumberingInternal(selection);\n };\n /**\n * @private\n */\n Editor.prototype.applyContinueNumberingInternal = function (selection) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n var paraFormat = this.getParagraphFormat(paragraph, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.changeListId(numberingInfo.currentList, paragraph, paraFormat, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n this.viewer.updateFocus();\n };\n /**\n * @private\n */\n Editor.prototype.getContinueNumberingInfo = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n var listPattern = 'None';\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n var viewer = this.viewer;\n if (listLevelNumber !== 0 && !isNullOrUndefined(currentList) &&\n !isNullOrUndefined(viewer.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(viewer.getAbstractListById(currentList.abstractListId).levels[listLevelNumber])) {\n var listLevel = this.viewer.layout.getListLevel(currentList, listLevelNumber);\n if (!isNullOrUndefined(listLevel)) {\n listPattern = listLevel.listLevelPattern;\n }\n }\n return {\n currentList: currentList,\n listLevelNumber: listLevelNumber,\n listPattern: listPattern\n };\n };\n /**\n * @private\n */\n Editor.prototype.revertContinueNumbering = function (selection, format) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n this.changeListId(numberingInfo.currentList, paragraph, format, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n };\n Editor.prototype.changeListId = function (list, block, format, levelNum, listType) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId\n && levelNum === block.paragraphFormat.listFormat.listLevelNumber) {\n if (this.editorHistory) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n format = baseHistoryInfo.addModifiedPropertiesForContinueNumbering(block.paragraphFormat, format);\n }\n }\n block.paragraphFormat.copyFormat(format);\n this.viewer.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeListId(list, block.nextRenderedWidget, format, levelNum, listType);\n };\n Editor.prototype.getParagraphFormat = function (paragraph, levelNumber, listType) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget)) {\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget.paragraphFormat.listFormat)\n && paragraph.previousRenderedWidget.paragraphFormat.listFormat.listId !== -1) {\n var listLevel = this.getListLevel(paragraph.previousRenderedWidget);\n if (levelNumber === 0) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else if (listType === listLevel.listLevelPattern\n || this.checkNumberArabic(listType, listLevel.listLevelPattern)) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n }\n return undefined;\n };\n Editor.prototype.checkNumberArabic = function (listType, levelPattern) {\n if ((listType === 'Number' && levelPattern === 'Arabic')\n || (levelPattern === 'Number' && listType === 'Arabic')) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Editor.prototype.applyRestartNumbering = function (selection) {\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('RestartNumbering');\n }\n this.restartListAt(selection);\n };\n /**\n * @private\n */\n Editor.prototype.restartListAt = function (selection) {\n var currentListLevel = this.getListLevel(selection.start.paragraph);\n var list = new WList();\n list.listId = this.viewer.lists[(this.viewer.lists.length - 1)].listId + 1;\n var abstractList = new WAbstractList();\n abstractList.abstractListId = this.viewer.abstractLists[(this.viewer.abstractLists.length - 1)].abstractListId + 1;\n list.abstractListId = abstractList.abstractListId;\n list.abstractList = abstractList;\n this.viewer.abstractLists.push(abstractList);\n this.createListLevels(abstractList, currentListLevel, list);\n this.viewer.lists.push(list);\n this.restartListAtInternal(selection, list.listId);\n };\n /**\n * @private\n */\n Editor.prototype.restartListAtInternal = function (selection, listId) {\n var numberingInfo = this.getContinueNumberingInfo(selection.start.paragraph);\n this.changeRestartNumbering(numberingInfo.currentList, selection.start.paragraph, listId);\n this.reLayout(selection, false);\n this.incrementListNumber = -1;\n this.refListNumber = undefined;\n this.viewer.updateFocus();\n };\n Editor.prototype.changeRestartNumbering = function (list, block, listId) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId) {\n if (this.editorHistory) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n listId = baseHistoryInfo.addModifiedPropertiesForRestartNumbering(block.paragraphFormat.listFormat, listId);\n }\n }\n block.paragraphFormat.listFormat.listId = listId;\n if (this.refListNumber !== block.paragraphFormat.listFormat.listLevelNumber) {\n this.incrementListNumber += 1;\n this.refListNumber = block.paragraphFormat.listFormat.listLevelNumber;\n }\n block.paragraphFormat.listFormat.listLevelNumber = this.incrementListNumber;\n this.viewer.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeRestartNumbering(list, block.nextRenderedWidget, listId);\n };\n Editor.prototype.createListLevels = function (abstractList, currentListLevel, list) {\n var levelPattern = currentListLevel.listLevelPattern;\n var levelPatterns = [];\n var currentAbstractList = currentListLevel.ownerBase;\n for (var i = 0; i < 3; i++) {\n var listLevel = currentAbstractList.levels[i];\n if (!isNullOrUndefined(listLevel)) {\n levelPatterns.push(listLevel.listLevelPattern);\n }\n }\n var indexOfLevelPattern = levelPatterns.indexOf(levelPattern) === -1 ? 0 : levelPatterns.indexOf(levelPattern);\n var numberFormat = currentListLevel.numberFormat.charAt(currentListLevel.numberFormat.length - 1);\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var listLevel = new WListLevel(abstractList);\n if (i === 0) {\n listLevel.listLevelPattern = levelPattern;\n }\n else {\n if (indexOfLevelPattern === 0 || indexOfLevelPattern < levelPatterns.length - 1) {\n indexOfLevelPattern++;\n }\n else {\n indexOfLevelPattern = 0;\n }\n listLevel.listLevelPattern = levelPatterns[indexOfLevelPattern];\n }\n listLevel.numberFormat = '%' + (i + 1) + numberFormat;\n listLevel.startAt = 1;\n listLevel.characterFormat.copyFormat(currentListLevel.characterFormat);\n listLevel.paragraphFormat.copyFormat(currentListLevel.paragraphFormat);\n listLevel.restartLevel = i;\n abstractList.levels.push(listLevel);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormat = function (paragraph, start, end, property, value, update) {\n this.setOffsetValue(this.selection);\n paragraph = paragraph.combineWidget(this.viewer);\n //Apply Paragraph Format for spitted paragraph\n this.applyParaFormatProperty(paragraph, property, value, update);\n this.layoutItemBlock(paragraph, false);\n this.getOffsetValue(this.selection);\n if (paragraph.equals(end.paragraph)) {\n return;\n }\n this.getNextParagraphForFormatting(paragraph, start, end, property, value, update);\n };\n /* tslint:disable-next-line:max-line-length */\n Editor.prototype.applyCharacterStyle = function (paragraph, start, end, property, value, update) {\n var paragraphWidget = paragraph.getSplitWidgets();\n if ((end.paragraph === paragraph || paragraphWidget.indexOf(end.paragraph) !== -1)) {\n if (((value.type === 'Paragraph') && ((value.link) instanceof WCharacterStyle)) || (value.type === 'Character')) {\n var obj = (value.type === 'Character') ? value : value.link;\n this.updateSelectionCharacterFormatting(property, obj, update);\n return true;\n }\n }\n return false;\n };\n // Cell\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormatInCell = function (cell, start, end, property, value, update) {\n var selection = this.viewer.selection;\n if (end.paragraph.isInsideTable) {\n var cellContainer = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (cellContainer.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, cellContainer);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, cellContainer);\n if (selection.containsCell(cellContainer, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(cellContainer, start, end)) {\n value = this.getParaFormatValueInCell(cellContainer, property, value);\n this.applyParaFormatCellInternal(cellContainer, property, value, update);\n }\n else {\n if (startCell === cellContainer) {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n else {\n this.applyParagraphFormatRow(startCell.ownerRow, start, end, property, value, update);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.applyParaFormatTableCell(cellContainer.ownerTable, cellContainer, endCell, property, value, update);\n }\n }\n else {\n this.applyParagraphFormatRow(cellContainer.ownerRow, start, end, property, value, update);\n }\n }\n else {\n var wCell = selection.getContainerCell(cell);\n this.applyParagraphFormatRow(wCell.ownerRow, start, end, property, value, update);\n }\n };\n Editor.prototype.applyParaFormatCellInternal = function (cell, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyParaFormatProperty(block, property, value, update);\n }\n else {\n this.applyParagraphFormatTableInternal(block, property, value, update);\n }\n }\n };\n Editor.prototype.getParaFormatValueInCell = function (cell, property, value) {\n if (typeof value === 'boolean') {\n var firstPara = this.viewer.selection.getFirstParagraph(cell);\n value = !firstPara.paragraphFormat.getPropertyValue(property);\n }\n return value;\n };\n // Row\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParagraphFormatRow = function (wRow, start, end, property, value, update) {\n value = this.getParaFormatValueInCell(wRow.childWidgets[0], property, value);\n for (var i = wRow.rowIndex; i < wRow.ownerTable.childWidgets.length; i++) {\n var row = wRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n if (end.paragraph.isInsideTable && this.viewer.selection.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n this.getNextParagraphForFormatting(wRow.ownerTable, start, end, property, value, update);\n };\n // Table\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormatTableCell = function (table, startCell, endCell, property, value, update) {\n var selection = this.viewer.selection;\n var startValue = selection.getCellLeft(startCell.ownerRow, startCell);\n var endValue = startValue + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startValue, endValue, endCellLeft, endCellRight);\n startValue = cellInfo.start;\n endValue = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var m = table.childWidgets.indexOf(startCell.ownerRow); m <= count; m++) {\n var row = table.childWidgets[m];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (Math.round(startValue) <= Math.round(left) && Math.round(left) < Math.round(endValue)) {\n if (!isStarted) {\n value = this.getParaFormatValueInCell(row.childWidgets[j], property, value);\n isStarted = true;\n }\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormatTable = function (table, start, end, property, value, update) {\n table = table.combineWidget(this.viewer);\n var selection = this.viewer.selection;\n for (var m = 0; m < table.childWidgets.length; m++) {\n var tableRow = table.childWidgets[m];\n for (var k = 0; k < tableRow.childWidgets.length; k++) {\n this.applyParaFormatCellInternal(tableRow.childWidgets[k], property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(tableRow, end.paragraph.associatedCell)) {\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForFormatting(table, start, end, property, value, update);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.getNextParagraphForFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.viewer.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n this.applyParaFormat(block, start, end, property, value, update);\n }\n else {\n this.applyParaFormatTable(block, start, end, property, value, update);\n }\n }\n };\n Editor.prototype.applyParagraphFormatTableInternal = function (table, property, value, update) {\n for (var x = 0; x < table.childWidgets.length; x++) {\n var row = table.childWidgets[x];\n for (var y = 0; y < row.childWidgets.length; y++) {\n this.applyParaFormatCellInternal(row.childWidgets[y], property, value, update);\n }\n }\n };\n //Paragraph Format apply implementation Ends\n // Apply Selection Section Format Option Implementation Starts\n /**\n * Apply section format selection changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplySectionFormat = function (property, value) {\n if (!isNullOrUndefined(property)) {\n var action = (property[0].toUpperCase() + property.slice(1));\n this.initHistory(action);\n }\n else {\n this.initHistory('SectionFormat');\n }\n this.updateSectionFormat(property, value);\n };\n /**\n * Update section format\n * @param {string} property\n * @param {Object} value\n * @returns TextPosition\n * @private\n */\n Editor.prototype.updateSectionFormat = function (property, value) {\n var selection = this.viewer.selection;\n selection.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var startPageIndex;\n var endPageIndex;\n this.viewer.clearContent();\n var startSectionIndex = startPosition.paragraph.containerWidget.index;\n var endSectionIndex = endPosition.paragraph.containerWidget.index;\n for (var i = 0; i < this.viewer.pages.length; i++) {\n if (this.viewer.pages[i].bodyWidgets[0].index === startSectionIndex) {\n startPageIndex = i;\n break;\n }\n }\n for (var i = startPageIndex; i < this.viewer.pages.length; i++) {\n var bodyWidget = this.viewer.pages[i].bodyWidgets[0];\n endPageIndex = i;\n if ((bodyWidget.index === startSectionIndex)) {\n continue;\n }\n else if ((bodyWidget.index >= startSectionIndex) && bodyWidget.index <= endSectionIndex) {\n continue;\n }\n else {\n endPageIndex = i - 1;\n break;\n }\n }\n // let startPageIndex: number = this.viewer.pages.indexOf((selection.start.paragraph.containerWidget as BodyWidget).page);\n // let endPageIndex: number = this.viewer.pages.indexOf((selection.end.paragraph.containerWidget as BodyWidget).page);\n var update = true;\n var index = 0;\n for (var i = startPageIndex; i <= endPageIndex; i++) {\n if (index !== this.viewer.pages[i].bodyWidgets[0].index && !update) {\n update = true;\n }\n this.applyPropertyValueForSection(this.viewer.pages[i].bodyWidgets[0].sectionFormat, property, value, update);\n index = this.viewer.pages[i].bodyWidgets[0].index;\n update = false;\n }\n this.layoutWholeDocument();\n this.fireContentChange();\n };\n //Apply Selection Table Format option implementation starts\n /**\n * Apply table format property changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplyTableFormat = function (property, value) {\n var action = this.getTableFormatAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyTablePropertyValue(selection, property, value, table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.viewer.layout.reLayoutTable(table);\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableFormatAction = function (property) {\n switch (property) {\n case 'tableAlignment':\n return 'TableAlignment';\n case 'leftIndent':\n return 'TableLeftIndent';\n case 'leftMargin':\n return 'DefaultCellLeftMargin';\n case 'rightMargin':\n return 'DefaultCellRightMargin';\n case 'bottomMargin':\n return 'DefaultCellBottomMargin';\n case 'topMargin':\n return 'DefaultCellTopMargin';\n case 'preferredWidth':\n return 'TablePreferredWidth';\n case 'preferredWidthType':\n return 'TablePreferredWidthType';\n case 'shading':\n return 'Shading';\n default:\n return 'DefaultCellSpacing';\n }\n };\n // Apply Selection Row Format Option Implementation Starts\n /**\n * Apply table row format property changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplyTableRowFormat = function (property, value) {\n var action = this.getRowAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n this.initHistory(action);\n var table = selection.start.paragraph.associatedCell.ownerRow.ownerTable;\n this.applyRowPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.ownerRow);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getRowAction = function (property) {\n switch (property) {\n case 'height':\n return 'RowHeight';\n case 'heightType':\n return 'RowHeightType';\n case 'isHeader':\n return 'RowHeader';\n default:\n return 'AllowBreakAcrossPages';\n }\n };\n /**\n * Apply table cell property changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplyTableCellFormat = function (property, value) {\n var action = this.getTableCellAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyCellPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.cellFormat);\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.viewer.layout.reLayoutTable(table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableCellAction = function (property) {\n switch (property) {\n case 'verticalAlignment':\n return 'CellContentVerticalAlignment';\n case 'leftMargin':\n return 'CellLeftMargin';\n case 'rightMargin':\n return 'CellRightMargin';\n case 'bottomMargin':\n return 'CellBottomMargin';\n case 'topMargin':\n return 'CellTopMargin';\n case 'preferredWidth':\n return 'CellPreferredWidth';\n case 'shading':\n return 'Shading';\n default:\n return 'CellPreferredWidthType';\n }\n };\n Editor.prototype.applyPropertyValueForSection = function (sectionFormat, property, value, update) {\n var selection = this.viewer.selection;\n if (update && this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForSection(sectionFormat, property, value);\n }\n if (isNullOrUndefined(value)) {\n return;\n }\n if (value instanceof WSectionFormat) {\n if (isNullOrUndefined(property)) {\n sectionFormat.copyFormat(value, this.editorHistory);\n }\n return;\n }\n if (property === 'pageHeight') {\n sectionFormat.pageHeight = value;\n }\n else if (property === 'pageWidth') {\n sectionFormat.pageWidth = value;\n }\n else if (property === 'leftMargin') {\n sectionFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sectionFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sectionFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sectionFormat.bottomMargin = value;\n }\n else if (property === 'differentFirstPage') {\n sectionFormat.differentFirstPage = value;\n }\n else if (property === 'differentOddAndEvenPages') {\n sectionFormat.differentOddAndEvenPages = value;\n }\n else if (property === 'headerDistance') {\n sectionFormat.headerDistance = value;\n }\n else if (property === 'footerDistance') {\n sectionFormat.footerDistance = value;\n }\n };\n /**\n * @private\n */\n Editor.prototype.layoutWholeDocument = function () {\n var startPosition = this.viewer.selection.start;\n var endPosition = this.viewer.selection.end;\n if (startPosition.isExistAfter(endPosition)) {\n startPosition = this.viewer.selection.end;\n endPosition = this.viewer.selection.start;\n }\n var startInfo = this.getParagraphInfo(startPosition);\n var endInfo = this.getParagraphInfo(startPosition);\n var startIndex = this.getHierarchicalIndex(startInfo.paragraph, startInfo.offset.toString());\n var endIndex = this.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString());\n this.viewer.renderedLists.clear();\n // this.viewer.owner.isLayoutEnabled = true;\n var sections = this.combineSection();\n this.viewer.clearContent();\n this.viewer.layout.layoutItems(sections);\n this.viewer.owner.isShiftingEnabled = false;\n this.setPositionForCurrentIndex(startPosition, startIndex);\n this.setPositionForCurrentIndex(endPosition, endIndex);\n this.viewer.selection.selectPosition(startPosition, endPosition);\n this.reLayout(this.viewer.selection);\n };\n Editor.prototype.combineSection = function () {\n var sections = [];\n var nextSection = this.viewer.pages[0].bodyWidgets[0];\n do {\n nextSection = this.combineSectionChild(nextSection, sections);\n } while (nextSection);\n return sections;\n };\n Editor.prototype.combineSectionChild = function (bodyWidget, sections) {\n var previousBodyWidget = bodyWidget;\n var temp = new BodyWidget();\n temp.sectionFormat = bodyWidget.sectionFormat;\n temp.index = previousBodyWidget.index;\n do {\n previousBodyWidget = bodyWidget;\n if (bodyWidget.lastChild) {\n bodyWidget.lastChild.combineWidget(this.viewer);\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n for (var j = 0; j < previousBodyWidget.childWidgets.length; j++) {\n var block = previousBodyWidget.childWidgets[j];\n if (block instanceof TableWidget) {\n this.viewer.layout.clearTableWidget(block, true, true);\n }\n else {\n block.x = 0;\n block.y = 0;\n block.width = 0;\n block.height = 0;\n }\n temp.childWidgets.push(block);\n previousBodyWidget.childWidgets.splice(j, 1);\n j--;\n block.containerWidget = temp;\n }\n previousBodyWidget.page.destroy();\n // this.viewer.pages.splice(previousBodyWidget.page.index, 1);\n } while (bodyWidget && previousBodyWidget.equals(bodyWidget));\n sections.push(temp);\n return bodyWidget;\n };\n Editor.prototype.updateSelectionTableFormat = function (selection, action, value) {\n switch (action) {\n case 'TableAlignment':\n this.editorHistory.initializeHistory('TableAlignment');\n this.updateTableFormat(selection, 'tableAlignment', value);\n break;\n case 'TableLeftIndent':\n this.editorHistory.initializeHistory('TableLeftIndent');\n this.updateTableFormat(selection, 'leftIndent', value);\n break;\n case 'DefaultCellSpacing':\n this.editorHistory.initializeHistory('DefaultCellSpacing');\n this.updateTableFormat(selection, 'cellSpacing', value);\n break;\n case 'DefaultCellLeftMargin':\n this.editorHistory.initializeHistory('DefaultCellLeftMargin');\n this.updateTableFormat(selection, 'leftMargin', value);\n break;\n case 'DefaultCellRightMargin':\n this.editorHistory.initializeHistory('DefaultCellRightMargin');\n this.updateTableFormat(selection, 'rightMargin', value);\n break;\n case 'DefaultCellTopMargin':\n this.editorHistory.initializeHistory('DefaultCellTopMargin');\n this.updateTableFormat(selection, 'topMargin', value);\n break;\n case 'TablePreferredWidth':\n this.editorHistory.initializeHistory('TablePreferredWidth');\n this.updateTableFormat(selection, 'preferredWidth', value);\n break;\n case 'TablePreferredWidthType':\n this.editorHistory.initializeHistory('TablePreferredWidthType');\n this.updateTableFormat(selection, 'preferredWidthType', value);\n break;\n case 'DefaultCellBottomMargin':\n this.editorHistory.initializeHistory('DefaultCellBottomMargin');\n this.updateTableFormat(selection, 'bottomMargin', value);\n break;\n case 'CellContentVerticalAlignment':\n this.editorHistory.initializeHistory('CellContentVerticalAlignment');\n this.updateCellFormat(selection, 'verticalAlignment', value);\n break;\n case 'CellLeftMargin':\n this.editorHistory.initializeHistory('CellLeftMargin');\n this.updateCellFormat(selection, 'leftMargin', value);\n break;\n case 'CellRightMargin':\n this.editorHistory.initializeHistory('CellRightMargin');\n this.updateCellFormat(selection, 'rightMargin', value);\n break;\n case 'CellTopMargin':\n this.editorHistory.initializeHistory('CellTopMargin');\n this.updateCellFormat(selection, 'topMargin', value);\n break;\n case 'CellBottomMargin':\n this.editorHistory.initializeHistory('CellBottomMargin');\n this.updateCellFormat(selection, 'bottomMargin', value);\n break;\n case 'CellPreferredWidth':\n this.editorHistory.initializeHistory('CellPreferredWidth');\n this.updateCellFormat(selection, 'preferredWidth', value);\n break;\n case 'CellPreferredWidthType':\n this.editorHistory.initializeHistory('CellPreferredWidthType');\n this.updateCellFormat(selection, 'preferredWidthType', value);\n break;\n case 'Shading':\n this.editorHistory.initializeHistory('Shading');\n this.updateCellFormat(selection, 'shading', value);\n break;\n case 'RowHeight':\n this.editorHistory.initializeHistory('RowHeight');\n this.updateRowFormat(selection, 'height', value);\n break;\n case 'RowHeightType':\n this.editorHistory.initializeHistory('RowHeightType');\n this.updateRowFormat(selection, 'heightType', value);\n break;\n case 'RowHeader':\n this.editorHistory.initializeHistory('RowHeader');\n this.updateRowFormat(selection, 'isHeader', value);\n break;\n case 'AllowBreakAcrossPages':\n this.editorHistory.initializeHistory('AllowBreakAcrossPages');\n this.updateRowFormat(selection, 'allowBreakAcrossPages', value);\n break;\n }\n };\n // Update Table Properties\n /**\n * Update Table Format on undo\n * @param {Selection} selection\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {object} value\n * @private\n */\n Editor.prototype.updateTableFormat = function (selection, property, value) {\n var tableStartPosition = selection.start;\n var tableEndPosition = selection.end;\n if (!selection.isForward) {\n tableStartPosition = selection.end;\n tableEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, tableStartPosition);\n // tslint:disable-next-line:max-line-length\n this.applyTablePropertyValue(selection, property, value, tableStartPosition.paragraph.associatedCell.ownerTable);\n };\n /**\n * update cell format on undo\n * @param {Selection} selection\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.updateCellFormat = function (selection, property, value) {\n selection.owner.isShiftingEnabled = true;\n var newStartPosition = selection.start;\n var newEndPosition = selection.end;\n if (!selection.isForward) {\n newStartPosition = selection.end;\n newEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, newStartPosition);\n this.updateFormatForCell(selection, property, value);\n };\n /**\n * update row format on undo\n * @param {Selection} selection\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.updateRowFormat = function (selection, property, value) {\n var rowStartPosition = selection.start;\n var rowEndPosition = selection.end;\n if (!selection.isForward) {\n rowStartPosition = selection.end;\n rowEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, rowStartPosition);\n // tslint:disable-next-line:max-line-length\n this.applyRowFormat(rowStartPosition.paragraph.associatedCell.ownerRow, rowStartPosition, rowEndPosition, property, value);\n };\n Editor.prototype.initHistoryPosition = function (selection, position) {\n if (this.viewer.owner.editorHistoryModule && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (!isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = position.getHierarchicalIndexInternal();\n }\n }\n else if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.start.getHierarchicalIndexInternal();\n }\n }\n };\n Editor.prototype.startSelectionReLayouting = function (paragraph, selection, start, end) {\n selection.owner.isLayoutEnabled = true;\n if (start.paragraph.isInsideTable) {\n var table = start.paragraph.associatedCell.ownerTable;\n while (table.isInsideTable) {\n table = table.associatedCell.ownerTable;\n }\n this.reLayoutSelectionOfTable(table, selection, start, end);\n }\n else {\n this.reLayoutSelection(paragraph, selection, start, end);\n }\n };\n Editor.prototype.reLayoutSelectionOfTable = function (table, selection, start, end) {\n var isEnded = false;\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n // If the selection ends in the current table, need to stop relayouting.\n if (!isNullOrUndefined(end.paragraph.associatedCell) && table.contains(end.paragraph.associatedCell)) {\n return true;\n }\n var block = selection.getNextRenderedBlock(table);\n // Relayout the next block.\n if (!isNullOrUndefined(block)) {\n isEnded = this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return isEnded;\n };\n Editor.prototype.reLayoutSelection = function (paragraph, selection, start, end) {\n if (start.paragraph === paragraph) {\n var startOffset = start.offset;\n var length_2 = selection.getParagraphLength(paragraph);\n var indexInInline = 0;\n var index = 0;\n var inlineObj = paragraph.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n }\n index = inline.line.children.indexOf(inline);\n }\n var lineIndex = 0;\n if (start.currentWidget.paragraph === paragraph) {\n lineIndex = paragraph.childWidgets.indexOf(start.currentWidget);\n index = start.currentWidget.children.indexOf(inline);\n }\n // If selection start inline is at new inline, need to relayout from the previous inline.\n if (inline instanceof TextElementBox && !inline.line && index > 0) {\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, index - 1);\n }\n else {\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, index);\n }\n }\n else {\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n // If the selection ends at the current paragraph, need to stop relayouting.\n if (end.paragraph === paragraph) {\n return true;\n }\n // _Relayout the next block.\n var block = selection.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n return this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return false;\n };\n //Relayouting Start \n Editor.prototype.reLayoutSelectionOfBlock = function (block, selection, start, end) {\n if (block instanceof ParagraphWidget) {\n return this.reLayoutSelection(block, selection, start, end);\n }\n else {\n return undefined;\n // return this.reLayoutSelectionOfTable(block as TableWidget, selection, start, end);\n }\n };\n /**\n * @private\n */\n Editor.prototype.layoutItemBlock = function (block, shiftNextWidget) {\n var section = undefined;\n if (block.containerWidget instanceof BlockContainer) {\n section = block.containerWidget;\n var index = section.childWidgets.indexOf(block);\n if (!isNullOrUndefined(this.viewer.owner)\n && this.viewer.owner.isLayoutEnabled) {\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(block.index, section, block, false);\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cell = block.containerWidget;\n cell = this.viewer.selection.getContainerCell(cell);\n if (!isNullOrUndefined(this.viewer.owner)\n && this.viewer.owner.isLayoutEnabled) {\n this.viewer.layout.reLayoutTable(block);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeSelectedContents = function (selection) {\n return this.removeSelectedContentInternal(selection, selection.start, selection.end);\n };\n Editor.prototype.removeSelectedContentInternal = function (selection, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n // tslint:disable-next-line:max-line-length\n if (startPos.paragraph === endPos.paragraph && startPos.paragraph.childWidgets.indexOf(startPos.currentWidget) === startPos.paragraph.childWidgets.length - 1 &&\n startPos.offset === selection.getParagraphLength(startPos.paragraph) && startPos.offset + 1 === endPos.offset) {\n selection.owner.isShiftingEnabled = true;\n selection.selectContent(startPos, true);\n return true;\n }\n var paragraphInfo = this.getParagraphInfo(startPos);\n selection.editPosition = this.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var isRemoved = this.removeSelectedContent(endPos.paragraph, selection, startPos, endPos);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n return isRemoved;\n };\n Editor.prototype.removeSelectedContent = function (paragraph, selection, start, end) {\n //If end is not table end and start is outside the table, then skip removing the contents and move caret to start position.\n if (end.paragraph.isInsideTable\n && end.paragraph !== selection.getLastParagraphInLastCell(end.paragraph.associatedCell.ownerTable)\n && (!start.paragraph.isInsideTable || start.paragraph.associatedCell.ownerTable !== end.paragraph.associatedCell.ownerTable)) {\n return false;\n }\n selection.owner.isShiftingEnabled = true;\n this.deleteSelectedContent(paragraph, selection, start, end, 2);\n return true;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteSelectedContent = function (paragraph, selection, start, end, editAction) {\n var indexInInline = 0;\n var inlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldBegin && !isNullOrUndefined((inline as WFieldBegin).fieldEnd)) {\n // tslint:disable-next-line:max-line-length\n // let fieldEndOffset: number = ((inline as WFieldBegin).fieldEnd.owner as WParagraph).getOffset((inline as WFieldBegin).fieldEnd, 1);\n // let fieldEndIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldBegin).fieldEnd.owner as WParagraph, fieldEndOffset.toString());\n // let selectionEndIndex: string = end.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n // //If selection end is after field begin, moves selection start to field separator.\n // start.moveToInline((inline as WFieldBegin).fieldSeparator, 1);\n // selection.editPosition = start.getHierarchicalIndexInternal();\n // if (!isNullOrUndefined(selection.currentBaseHistoryInfo)) {\n // selection.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n // }\n // }\n // }\n indexInInline = 0;\n inlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldEnd && !isNullOrUndefined((inline as WFieldEnd).fieldBegin)) {\n // tslint:disable-next-line:max-line-length\n // let fieldBeginOffset: number = ((inline as WFieldEnd).fieldBegin.owner as WParagraph).getOffset((inline as WFieldEnd).fieldBegin, 0);\n // let fieldBeginIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldEnd).fieldBegin.owner as WParagraph, fieldBeginOffset.toString());\n // let selectionStartIndex: string = start.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n // //If field begin is before selection start, move selection end to inline item before field end.\n // let prevInline: WInline = selection.getPreviousTextInline(inline);\n // if (isNullOrUndefined(prevInline)) {\n // end.moveBackward();\n // } else {\n // end.moveToInline(prevInline, prevInline.length);\n // }\n // }\n // }\n if (end.paragraph !== paragraph) {\n this.deleteSelectedContent(end.paragraph, selection, start, end, editAction);\n return;\n }\n // Selection start in cell.\n if (end.paragraph.isInsideTable && (!start.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(end.paragraph.associatedCell, start, end))) {\n end.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n this.deleteTableCell(end.paragraph.associatedCell, selection, start, end, editAction);\n }\n else {\n this.deletePara(paragraph, start, end, editAction);\n }\n };\n /**\n * Merge the selected cells.\n */\n Editor.prototype.mergeCells = function () {\n if (this.owner.isReadOnlyMode || !this.owner.isDocumentLoaded) {\n return;\n }\n if (!isNullOrUndefined(this.viewer) && !this.selection.isEmpty) {\n this.mergeSelectedCellsInTable();\n }\n };\n /**\n * Deletes the entire table at selection.\n */\n Editor.prototype.deleteTable = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n if (startPos.paragraph.isInsideTable) {\n var table = this.getOwnerTable(this.selection.isForward).combineWidget(this.viewer);\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n this.initHistory('DeleteTable');\n //Sets the insert position in history info as current table. \n this.updateHistoryPosition(startPos, true);\n }\n var paragraph = this.getParagraphForSelection(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(table.clone());\n }\n this.removeBlock(table);\n this.selection.selectParagraph(paragraph, true);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n }\n }\n };\n /**\n * Deletes the selected column(s).\n */\n Editor.prototype.deleteColumn = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n this.initHistory('DeleteColumn');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerTable.combineWidget(this.viewer);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (endCell.nextWidget) {\n var nextCell = endCell.nextWidget;\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n else if (startCell.previousWidget) {\n var previousCell = startCell.previousWidget;\n paragraph = this.selection.getFirstParagraph(previousCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n //retrieve the cell collection based on start and end cell to remove. \n var deleteCells = table.getColumnCellsForSelection(startCell, endCell);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.childWidgets.length === 1) {\n if (deleteCells.indexOf(row.childWidgets[0]) >= 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n i--;\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var tableCell = row.childWidgets[j];\n if (deleteCells.indexOf(tableCell) >= 0) {\n row.childWidgets.splice(j, 1);\n tableCell.destroy();\n j--;\n }\n }\n if (row.childWidgets.length === 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n i--;\n }\n }\n }\n if (table.childWidgets.length === 0) {\n // Before disposing table reset the paragrph.\n paragraph = this.getParagraphForSelection(table);\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n }\n this.selection.selectParagraph(paragraph, true);\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n }\n }\n };\n /**\n * Deletes the selected row(s).\n */\n Editor.prototype.deleteRow = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = !this.selection.isForward ? this.selection.end : this.selection.start;\n var endPos = !this.selection.isForward ? this.selection.start : this.selection.end;\n if (startPos.paragraph.isInsideTable) {\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n if (this.checkIsNotRedoing()) {\n this.initHistory('DeleteRow');\n }\n this.selection.owner.isShiftingEnabled = true;\n var table = startCell.ownerTable.combineWidget(this.viewer);\n var row = this.getOwnerRow(true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (row.nextWidget) {\n var nextCell = row.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n if (!this.selection.isEmpty) {\n //tslint:disable-next-line:max-line-length\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n if (this.selection.containsCell(containerCell, endCell)) {\n row = startCell.ownerRow;\n this.removeRow(row);\n }\n else {\n row = startCell.ownerRow;\n var endRow = endCell.ownerRow;\n //Update the selection paragraph.\n paragraph = undefined;\n if (endRow.nextWidget) {\n var nextCell = endRow.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (tableRow.rowIndex >= row.rowIndex && tableRow.rowIndex <= endRow.rowIndex) {\n table.childWidgets.splice(i, 1);\n tableRow.destroy();\n i--;\n }\n }\n if (table.childWidgets.length === 0) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n this.updateTable(table);\n }\n }\n }\n }\n else {\n this.removeRow(row);\n }\n this.selection.selectParagraph(paragraph, true);\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n }\n }\n };\n Editor.prototype.removeRow = function (row) {\n var table = row.ownerTable;\n if (table.childWidgets.length === 1) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'Delete';\n }\n table.destroy();\n }\n else {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n this.updateTable(table);\n }\n };\n Editor.prototype.updateTable = function (table) {\n table.updateRowIndex(0);\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n };\n Editor.prototype.getParagraphForSelection = function (table) {\n var paragraph = undefined;\n var nextWidget = table.nextWidget ? table.nextWidget : table.nextRenderedWidget;\n var previousWidget = table.previousWidget ? table.previousWidget : table.previousRenderedWidget;\n if (nextWidget) {\n paragraph = nextWidget instanceof ParagraphWidget ? nextWidget\n : this.selection.getFirstParagraphInFirstCell(nextWidget);\n }\n else if (previousWidget) {\n paragraph = previousWidget instanceof ParagraphWidget ? previousWidget\n : this.selection.getLastParagraphInLastCell(previousWidget);\n }\n return paragraph;\n };\n Editor.prototype.deletePara = function (paragraph, start, end, editAction) {\n paragraph = paragraph.combineWidget(this.viewer);\n var selection = this.viewer.selection;\n var paragraphStart = selection.getStartOffset(paragraph);\n var endParagraphStartOffset = selection.getStartOffset(end.paragraph);\n var startOffset = paragraphStart;\n var endOffset = 0;\n var isCombineNextParagraph = false;\n var lastLinelength = this.selection.getLineLength(paragraph.lastChild);\n var currentParagraph = paragraph;\n var section = paragraph.bodyWidget instanceof BodyWidget ? paragraph.bodyWidget : undefined;\n var startLine = undefined;\n var endLineWidget = undefined;\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n startLine = start.currentWidget;\n if (end.paragraph.isInsideTable) {\n isCombineNextParagraph = this.isEndInAdjacentTable(paragraph, end.paragraph);\n }\n }\n else {\n startLine = paragraph.firstChild;\n }\n if (paragraph !== start.paragraph && selection.isSkipLayouting) {\n selection.isSkipLayouting = false;\n }\n if (paragraph === end.paragraph) {\n endLineWidget = end.currentWidget;\n endOffset = end.offset;\n }\n else {\n endLineWidget = paragraph.lastChild;\n endOffset = this.viewer.selection.getLineLength(paragraph.lastChild);\n }\n var block = paragraph.previousRenderedWidget;\n if (startOffset > paragraphStart && start.currentWidget === paragraph.lastChild &&\n startOffset === lastLinelength && (paragraph === end.paragraph && end.offset === startOffset + 1 ||\n paragraph.nextRenderedWidget === end.paragraph && end.offset === endParagraphStartOffset) ||\n (this.editorHistory && this.editorHistory.isUndoing && this.editorHistory.currentHistoryInfo &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak' && block && block.isPageBreak()\n && (startOffset === 0 && !start.currentWidget.isFirstLine || startOffset > 0))) {\n isCombineNextParagraph = true;\n }\n if (end.paragraph === paragraph && end.currentWidget !== paragraph.lastChild ||\n (end.currentWidget === paragraph.lastChild && end.offset <= selection.getLineLength(paragraph.lastChild))) {\n var isStartParagraph = start.paragraph === paragraph;\n if (end.currentWidget.isFirstLine() && end.offset > paragraphStart || !end.currentWidget.isFirstLine()) {\n //If selection end with this paragraph and selection doesnot include paragraph mark. \n this.removeInlines(paragraph, startLine, startOffset, endLineWidget, endOffset, editAction);\n //Removes the splitted paragraph.\n }\n if (!isNullOrUndefined(block) && !isStartParagraph) {\n var nextSection = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n if (nextSection && !section.equals(nextSection) && section.index !== nextSection.index) {\n this.deleteSection(selection, nextSection, section, editAction);\n }\n this.deleteBlock(block, selection, start, end, editAction);\n }\n }\n else if (start.paragraph === paragraph && (start.currentWidget !== paragraph.firstChild ||\n (start.currentWidget === paragraph.firstChild && startOffset > paragraphStart))) {\n // If selection start is after paragraph start\n //And selection does not end with this paragraph Or selection include paragraph mark.\n if (editAction === 4) {\n return;\n }\n else {\n currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, startLine, startOffset, true);\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction);\n this.addRemovedNodes(paragraph);\n return;\n }\n }\n else {\n var newParagraph = undefined;\n var previousBlock = paragraph.previousWidget;\n var prevParagraph = (previousBlock instanceof ParagraphWidget) ? previousBlock : undefined;\n var nextWidget = paragraph.nextRenderedWidget;\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner text body and previousBlock is not paragraph.\n newParagraph = this.checkAndInsertBlock(paragraph, start, end, editAction, prevParagraph);\n this.removeBlock(paragraph);\n if (this.viewer.blockToShift === paragraph) {\n this.viewer.blockToShift = undefined;\n }\n this.addRemovedNodes(paragraph);\n if (!isNullOrUndefined(newParagraph)) {\n selection.editPosition = this.getHierarchicalIndex(newParagraph, '0');\n var offset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n //tslint:disable-next-line:max-line-length\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.getHierarchicalIndex(newParagraph, offset.toString());\n }\n }\n else if (paragraph === start.paragraph && isNullOrUndefined(nextWidget) && !isNullOrUndefined(prevParagraph)) {\n var offset = this.selection.getParagraphLength(prevParagraph);\n // if (isNullOrUndefined(block)) {\n selection.editPosition = this.getHierarchicalIndex(prevParagraph, offset.toString());\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.editPosition, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n // } else {\n // let offset: number = selection.getParagraphLength(paragraph) + 1;\n // if (block instanceof ParagraphWidget) {\n // prevParagraph = block as ParagraphWidget;\n // }\n // // if (block instanceof WTable) {\n // // prevParagraph = (block as WTable).getFirstParagraphInFirstCell();\n // // }\n // selection.editPosition = prevLineWidget.getHierarchicalIndex('0');\n // }\n }\n }\n if (start.paragraph !== paragraph && !isNullOrUndefined(block)) {\n var nextSection = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n // if (section !== nextSection) {\n // this.deleteSection(selection, section, nextSection, editAction);\n // }\n this.deleteBlock(block, selection, start, end, editAction);\n }\n }\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction);\n };\n Editor.prototype.deleteSection = function (selection, section, nextSection, editAction) {\n if (editAction < 4) {\n this.combineSectionInternal(selection, section, nextSection);\n }\n //Copies the section properties, if this is last paragraph of section.\n if (editAction > 2) {\n section.sectionFormat.copyFormat(nextSection.sectionFormat);\n }\n };\n Editor.prototype.combineSectionInternal = function (selection, section, nextSection) {\n // if (section.sectionFormat.isEqualFormat(nextSection.sectionFormat)) {\n // } else {\n var bodyWidget = section.getSplitWidgets()[0];\n var currentSection = [];\n this.combineSectionChild(bodyWidget, currentSection);\n bodyWidget = currentSection[0];\n var lastBlockIndex = bodyWidget.lastChild.index;\n this.updateBlockIndex(lastBlockIndex + 1, nextSection.firstChild);\n var insertIndex = 0;\n var containerWidget = nextSection;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets.splice(i, 1)[0];\n containerWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = containerWidget;\n this.viewer.layout.layoutBodyWidgetCollection(block.index, block.bodyWidget, block, false);\n block = block.getSplitWidgets().pop();\n containerWidget = block.containerWidget;\n insertIndex = block.indexInOwner + 1;\n i--;\n }\n this.updateSectionIndex(undefined, nextSection, false);\n this.addRemovedNodes(bodyWidget);\n // this.insert\n // }\n };\n //tslint:disable:max-line-length\n /**\n * @private\n */\n Editor.prototype.checkAndInsertBlock = function (block, start, end, editAction, previousParagraph) {\n if (block instanceof ParagraphWidget && block === start.paragraph || block instanceof TableWidget) {\n var newParagraph = void 0; //Adds an empty paragraph, to ensure minimal content.\n if (isNullOrUndefined(block.nextWidget) && (isNullOrUndefined(previousParagraph) || previousParagraph.nextRenderedWidget instanceof TableWidget)) {\n newParagraph = new ParagraphWidget();\n if (editAction === 1 && block instanceof ParagraphWidget) {\n newParagraph.characterFormat.copyFormat(block.characterFormat);\n newParagraph.paragraphFormat.copyFormat(block.paragraphFormat);\n }\n newParagraph.index = block.index + 1;\n newParagraph.containerWidget = block.containerWidget;\n this.viewer.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.bodyWidget, newParagraph, false);\n if (block.containerWidget instanceof Widget) {\n block.containerWidget.childWidgets.push(newParagraph);\n }\n }\n return newParagraph;\n }\n return undefined;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.splitParagraph = function (paragraphAdv, startLine, startOffset, endLine, endOffset, removeBlock) {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n var blockIndex = paragraphAdv.index;\n var insertIndex = paragraphAdv.indexInOwner;\n this.moveInlines(paragraphAdv, paragraph, 0, startOffset, startLine, endOffset, endLine);\n //Inserts new paragraph in the current text position.\n paragraphAdv.containerWidget.childWidgets.splice(insertIndex, 0, paragraph);\n paragraph.index = blockIndex;\n paragraph.containerWidget = paragraphAdv.containerWidget;\n this.updateNextBlocksIndex(paragraph, true);\n if (removeBlock) {\n this.removeBlock(paragraphAdv);\n }\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(blockIndex, paragraph.containerWidget, paragraph, false);\n return paragraph;\n };\n /**\n * @private\n */\n Editor.prototype.removeBlock = function (block) {\n var index;\n var blockCollection;\n var containerWidget;\n this.removeFieldInBlock(block);\n if (block.isInsideTable) {\n containerWidget = block.associatedCell;\n index = block.associatedCell.childWidgets.indexOf(block);\n blockCollection = block.associatedCell.childWidgets;\n this.updateNextBlocksIndex(block, false);\n block.associatedCell.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n this.viewer.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false);\n }\n else {\n containerWidget = block.containerWidget;\n index = containerWidget.childWidgets.indexOf(block);\n blockCollection = containerWidget.childWidgets;\n this.updateNextBlocksIndex(block, false);\n containerWidget.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n containerWidget.height -= block.height;\n this.viewer.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false);\n }\n };\n Editor.prototype.removeField = function (block) {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n var field = this.viewer.fields[i];\n if (field.line.paragraph === block) {\n this.viewer.fields.splice(i, 1);\n i--;\n }\n }\n };\n Editor.prototype.addRemovedNodes = function (node) {\n if (node instanceof FieldElementBox && node.fieldType === 0) {\n if (this.viewer.fields.indexOf(node) !== -1) {\n this.viewer.fields.splice(this.viewer.fields.indexOf(node), 1);\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(node);\n }\n else if (this.editHyperlinkInternal) {\n this.nodes.push(node);\n }\n };\n Editor.prototype.deleteBlock = function (block, selection, start, end, editAction) {\n if (block instanceof ParagraphWidget) {\n this.deletePara(block, start, end, editAction);\n }\n else {\n this.deleteTableBlock(block, selection, start, end, editAction);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteTableCell = function (cellAdv, selection, start, end, editAction) {\n var deletePreviousBlock = !(start.paragraph.isInsideTable && cellAdv.ownerTable.contains(start.paragraph.associatedCell));\n var previousBlock = cellAdv.ownerTable.previousRenderedWidget;\n if (start.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cellAdv, start.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(start.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cellAdv, containerCell);\n var endCell = selection.getSelectedCell(start.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, start.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n //Container cell is completely selected.\n this.updateEditPosition(containerCell, selection);\n if (editAction === 1) {\n //Specifically handled for backspace. Delete selected cell in current table.\n this.deleteCellsInTable(cellAdv.ownerRow.ownerTable, selection, start, end, editAction);\n }\n else {\n //Delete contents within table cell or Copy contents within table cell to clipboard.\n var isCellCleared = this.deleteCell(containerCell, selection, editAction, true);\n if (!isCellCleared && editAction !== 2 && this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (startCell === containerCell) {\n this.deletePara(end.paragraph, start, end, editAction);\n }\n else {\n this.deleteContainer(startCell, selection, start, end, editAction);\n }\n }\n }\n else {\n if (editAction === 2) {\n //Delete contents within table cell.\n this.deleteCell(cellAdv, selection, 2, false);\n }\n else {\n //Delete other selected cells in current table.\n this.deleteCellsInTable(containerCell.ownerTable, selection, start, end, editAction);\n }\n }\n }\n else {\n //Selection end is different table.\n this.deleteContainer(containerCell, selection, start, end, editAction);\n }\n }\n else {\n //Selection end is outside table.\n var cell = selection.getContainerCell(cellAdv);\n this.deleteContainer(cell, selection, start, end, editAction);\n }\n if (deletePreviousBlock) {\n var sectionAdv = previousBlock.bodyWidget instanceof BodyWidget ? previousBlock.bodyWidget : undefined;\n // this.deleteContent(cellAdv.ownerTable, selection, editAction);\n if (!isNullOrUndefined(previousBlock)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(previousBlock, selection, start, end, editAction);\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteCellsInTable = function (table, selection, start, end, editAction) {\n var clonedTable = undefined;\n var isDeleteCells = false;\n var action = 'Delete';\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n action = this.editorHistory.currentBaseHistoryInfo.action;\n //tslint:disable-next-line:max-line-length\n isDeleteCells = this.editorHistory.currentBaseHistoryInfo.action === 'BackSpace' || this.editorHistory.currentBaseHistoryInfo.action === 'DeleteCells'\n || this.editorHistory.currentBaseHistoryInfo.action === 'InsertTable' || (isNullOrUndefined(startCell.ownerRow.previousWidget)\n && isNullOrUndefined(endCell.ownerRow.nextWidget) && this.editorHistory.currentBaseHistoryInfo.action === 'Cut');\n this.editorHistory.currentBaseHistoryInfo.action = isDeleteCells ? 'DeleteCells' : 'ClearCells';\n clonedTable = this.cloneTableToHistoryInfo(table);\n selection.owner.isLayoutEnabled = false;\n }\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowIndex = startCell.rowIndex;\n var endRowIndex = endCell.rowIndex;\n var cells = [];\n var isStarted = false;\n var isCellCleared = false;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.index >= startRowIndex && row.index <= endRowIndex) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n if (!isStarted) {\n this.updateEditPosition(cell, selection);\n isStarted = true;\n }\n if (isDeleteCells) {\n //Specific for Backspace and Cut if selection includes all rows.\n var cell_1 = row.childWidgets[j];\n this.updateNextBlocksIndex(cell_1, false);\n row.childWidgets.splice(j, 1);\n j--;\n }\n else if (editAction < 4) {\n isCellCleared = this.deleteCell(cell, selection, editAction, false);\n }\n }\n }\n if (row.childWidgets.length === 0) {\n this.updateNextBlocksIndex(table.childWidgets[i], false);\n table.childWidgets.splice(i, 1);\n i--;\n endRowIndex--;\n }\n }\n }\n //Layouts the table after delete cells.\n selection.owner.isLayoutEnabled = true;\n if (table.childWidgets.length === 0) {\n selection.editPosition = this.getHierarchicalIndex(table, '0');\n this.setActionInternal(selection, action);\n this.removeBlock(table);\n }\n else {\n // Before lay outing need to update table grid.\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n }\n };\n Editor.prototype.deleteCell = function (cell, selection, editAction, copyChildToClipboard) {\n //Checks whether this is last paragraph of owner textbody.\n var block = cell.childWidgets[0];\n if (cell.childWidgets.length === 1 && block instanceof ParagraphWidget && block.isEmpty()) {\n return false;\n }\n for (var i = 0; i < cell.childWidgets.length; i++) {\n block = cell.childWidgets[i];\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner textbody.\n if (block instanceof ParagraphWidget && cell.childWidgets.length === 1) {\n //Preserves empty paragraph, to ensure minimal content.\n var paragraph = block;\n //Removes all the inlines in the paragraph.\n for (var j = 0; j < paragraph.childWidgets.length; j++) {\n var inline = paragraph.childWidgets[j];\n for (var k = 0; k < inline.children.length; k++) {\n var element = inline.children[k];\n this.unLinkFieldCharacter(element);\n inline.children.splice(k, 1);\n // this.layoutInlineCollection(true, paragraph.inlines.indexOf(inline), paragraph.inlines, inline);\n k--;\n if (this.checkClearCells(selection)) {\n this.addRemovedNodes(element);\n }\n }\n if (paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(j, 1);\n j--;\n }\n }\n if (this.checkClearCells(selection)) {\n //Add Index for line Widget\n selection.editPosition = this.getHierarchicalIndex(paragraph, '0');\n this.updateHistoryPosition(selection.editPosition, true);\n }\n break;\n }\n this.removeBlock(block);\n i--;\n if (this.checkClearCells(selection)) {\n this.addRemovedNodes(block);\n }\n }\n }\n return true;\n };\n Editor.prototype.deleteContainer = function (cell, selection, start, end, editAction) {\n var ownerTable = cell.ownerTable;\n if (selection.containsRow(ownerTable.lastChild, end.paragraph.associatedCell)) {\n this.deleteContent(ownerTable, selection, editAction);\n }\n else {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row = ownerTable.childWidgets[i];\n if (editAction < 4) {\n this.updateNextBlocksIndex(row, false);\n ownerTable.childWidgets.splice(i, 1);\n this.addRemovedNodes(row);\n i--;\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.viewer.layout.reLayoutTable(ownerTable);\n return;\n }\n }\n }\n };\n Editor.prototype.deleteTableBlock = function (table, selection, start, end, editAction) {\n table = table.combineWidget(this.viewer);\n if (start.paragraph.isInsideTable && table.contains(start.paragraph.associatedCell)) {\n var block = table.previousRenderedWidget;\n // tslint:disable-next-line:max-line-length\n var previousBlock = this.checkAndInsertBlock(table, start, end, editAction, block instanceof ParagraphWidget ? block : undefined);\n if (selection.containsRow(table.firstChild, start.paragraph.associatedCell)) {\n this.deleteContent(table, selection, editAction);\n }\n else {\n var newTable = this.splitTable(table, start.paragraph.associatedCell.ownerRow);\n this.deleteContent(table, selection, editAction);\n this.viewer.layout.layoutBodyWidgetCollection(newTable.index, newTable.containerWidget, newTable, false);\n }\n if (!isNullOrUndefined(previousBlock)) {\n selection.editPosition = this.getHierarchicalIndex(previousBlock, '0');\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n }\n }\n else {\n var blockAdv = table.previousRenderedWidget;\n var sectionAdv = table.bodyWidget instanceof BodyWidget ? table.bodyWidget : undefined;\n this.deleteContent(table, selection, editAction);\n if (!isNullOrUndefined(blockAdv)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(blockAdv, selection, start, end, editAction);\n }\n }\n };\n Editor.prototype.splitTable = function (table, splitEndRow) {\n var newTable = new TableWidget();\n newTable.tableFormat.copyFormat(table.tableFormat);\n newTable.index = table.index;\n //Moves the rows to new table.\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === splitEndRow) {\n break;\n }\n newTable.childWidgets.push(row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n //Inserts new table in the current text position.\n var insertIndex = table.getIndex();\n table.containerWidget.childWidgets.splice(insertIndex, 0, newTable);\n newTable.containerWidget = table.containerWidget;\n this.updateNextBlocksIndex(newTable, true);\n return newTable;\n };\n Editor.prototype.updateEditPosition = function (cell, selection) {\n var firstParagraph = selection.getFirstParagraphInCell(cell);\n selection.editPosition = this.getHierarchicalIndex(firstParagraph, '0');\n };\n /**\n * @private\n */\n Editor.prototype.deleteContent = function (table, selection, editAction) {\n if (editAction < 4) {\n this.removeBlock(table);\n this.addRemovedNodes(table);\n }\n };\n Editor.prototype.setActionInternal = function (selection, action) {\n if (this.viewer.owner.enableHistoryMode && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.action = action;\n }\n };\n Editor.prototype.checkClearCells = function (selection) {\n // tslint:disable-next-line:max-line-length\n return this.editorHistory && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action !== 'ClearCells';\n };\n Editor.prototype.isEndInAdjacentTable = function (paragraph, endParagraph) {\n var start = this.getHierarchicalIndex(paragraph, '');\n var end = this.getHierarchicalIndex(endParagraph, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n return selectionStart.length < selectionEnd.length;\n };\n Editor.prototype.cloneTableToHistoryInfo = function (table) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n //Clones the entire table to preserve in history.\n var clonedTable = table.clone();\n //Preserves the cloned table in history info, for future undo operation.\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(clonedTable);\n //Sets the insert position in history info as current table.\n if (this.viewer.selection.start.paragraph.isInsideTable &&\n this.viewer.selection.start.paragraph.associatedCell.ownerTable === table) {\n this.updateHistoryPosition(this.getHierarchicalIndex(table, '0'), true);\n }\n return clonedTable;\n }\n return undefined;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.insertParagraphPaste = function (paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing) && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n var nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n if (nextParagraph) {\n if (start.offset > 0 && nextParagraph === end.paragraph && paragraph === start.paragraph\n && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n //Combines the current paragraph with end paragraph specific for undo/redo paste action.\n var insertIndex = 0;\n this.removeBlock(currentParagraph);\n this.viewer.layout.clearListElementBox(nextParagraph);\n this.viewer.layout.clearListElementBox(currentParagraph);\n for (var i = 0; i < currentParagraph.childWidgets.length; i++) {\n var line = currentParagraph.childWidgets[i];\n nextParagraph.childWidgets.splice(insertIndex, 0, line);\n currentParagraph.childWidgets.splice(i, 1);\n i--;\n insertIndex++;\n line.paragraph = nextParagraph;\n }\n this.viewer.layout.reLayoutParagraph(nextParagraph, 0, 0);\n isCombineNextParagraph = false;\n var offset = this.selection.editPosition.substring(this.selection.editPosition.lastIndexOf(';') + 1);\n this.selection.editPosition = this.getHierarchicalIndex(nextParagraph, offset);\n }\n }\n }\n if (isCombineNextParagraph) {\n this.deleteParagraphMark(currentParagraph, this.selection, editAction);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.removeInlines = function (paragraph, startLine, startOffset, endLine, endOffset, editAction) {\n var isRemoved = false;\n this.viewer.layout.clearListElementBox(paragraph);\n var startIndex = paragraph.childWidgets.indexOf(startLine);\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var lineWidget = paragraph.childWidgets[i];\n if (startLine === lineWidget && endLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, endOffset);\n isRemoved = true;\n break;\n }\n if (endLine === lineWidget) {\n isRemoved = true;\n this.removeContent(lineWidget, 0, endOffset);\n }\n else if (startLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, this.viewer.selection.getLineLength(lineWidget));\n break;\n }\n else if (isRemoved) {\n this.removeContent(lineWidget, 0, this.viewer.selection.getLineLength(lineWidget));\n }\n }\n if (isRemoved) {\n this.removeEmptyLine(paragraph);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeContent = function (lineWidget, startOffset, endOffset) {\n var count = this.selection.getLineLength(lineWidget);\n for (var i = lineWidget.children.length - 1; i >= 0; i--) {\n var inline = lineWidget.children[i];\n if (endOffset <= count - inline.length) {\n count -= inline.length;\n continue;\n }\n var endIndex = inline.length;\n if (count > endOffset && (count - endIndex < endOffset)) {\n endIndex = endOffset - (count - inline.length);\n }\n var startIndex = 0;\n if (count - inline.length < startOffset) {\n startIndex = startOffset - (count - inline.length);\n }\n if (count > endOffset) {\n count -= (inline.length - endIndex);\n }\n if (startIndex === 0 && endIndex === inline.length) {\n if (!(this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (inline instanceof BookmarkElementBox) {\n this.removedBookmarkElements.push(inline);\n }\n }\n // if (editAction < 4) {\n this.unLinkFieldCharacter(inline);\n this.addRemovedNodes(lineWidget.children[i]);\n lineWidget.children.splice(i, 1);\n // }\n }\n else if (inline instanceof TextElementBox) {\n // if (editAction < 4) {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(startIndex, endIndex - startIndex);\n this.addRemovedNodes(span);\n inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n }\n if (startOffset >= count - (endIndex - startIndex)) {\n break;\n }\n count -= (endIndex - startIndex);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeEmptyLine = function (paragraph) {\n if (paragraph.childWidgets.length > 1) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (lineWidget.children.length === 0 && paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n };\n //#endregion\n /**\n * clone the list level\n * @param {WListLevel} source\n * @private\n */\n Editor.prototype.cloneListLevel = function (source) {\n var listLevel = new WListLevel(undefined);\n this.copyListLevel(listLevel, source);\n return listLevel;\n };\n /**\n * Copies the list level\n * @param {WListLevel} destination\n * @param {WListLevel} listLevel\n * @private\n */\n Editor.prototype.copyListLevel = function (destination, listLevel) {\n if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n destination.paragraphFormat = new WParagraphFormat(destination);\n destination.paragraphFormat.copyFormat(listLevel.paragraphFormat);\n }\n if (!isNullOrUndefined(listLevel.characterFormat)) {\n destination.characterFormat = new WCharacterFormat(destination);\n destination.characterFormat.copyFormat(listLevel.characterFormat);\n }\n if (!isNullOrUndefined(listLevel.followCharacter)) {\n destination.followCharacter = listLevel.followCharacter;\n }\n if (!isNullOrUndefined(listLevel.listLevelPattern)) {\n destination.listLevelPattern = listLevel.listLevelPattern;\n }\n if (!isNullOrUndefined(listLevel.numberFormat)) {\n destination.numberFormat = listLevel.numberFormat;\n }\n if (!isNullOrUndefined(listLevel.restartLevel)) {\n destination.restartLevel = listLevel.restartLevel;\n }\n if (!isNullOrUndefined(listLevel.startAt)) {\n destination.startAt = listLevel.startAt;\n }\n };\n /**\n * Clone level override\n * @param {WLevelOverride} source\n * @private\n */\n Editor.prototype.cloneLevelOverride = function (source) {\n var levelOverride = new WLevelOverride();\n if (!isNullOrUndefined(source.startAt)) {\n levelOverride.startAt = source.startAt;\n }\n if (!isNullOrUndefined(source.overrideListLevel)) {\n levelOverride.overrideListLevel = source.overrideListLevel;\n }\n if (!isNullOrUndefined(source.levelNumber)) {\n levelOverride.levelNumber = source.levelNumber;\n }\n return levelOverride;\n };\n /**\n * Update List Paragraph\n * @private\n */\n Editor.prototype.updateListParagraphs = function () {\n this.viewer.listParagraphs = [];\n for (var j = 0; j < this.viewer.pages.length; j++) {\n var bodyWidget = this.viewer.pages[j].bodyWidgets[0];\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n this.updateListParagraphsInBlock(bodyWidget.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateListParagraphsInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n if (!isNullOrUndefined(block.paragraphFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat.listId)) {\n if (isNullOrUndefined(this.viewer.listParagraphs)) {\n this.viewer.listParagraphs = [];\n }\n this.viewer.listParagraphs.push(block);\n }\n }\n else if (block instanceof TableWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n for (var j = 0; j < block.childWidgets[i].childWidgets.length; j++) {\n var cell = block.childWidgets[i].childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n this.updateListParagraphsInBlock(cell.childWidgets[k]);\n }\n }\n }\n }\n };\n /**\n * Applies list format\n * @param {WList} list\n * @private\n */\n Editor.prototype.onApplyList = function (list) {\n var selection = this.viewer.selection;\n this.setOffsetValue(this.viewer.selection);\n this.initHistory('ListFormat');\n var format = new WListFormat();\n if (!isNullOrUndefined(list)) {\n format.listId = list.listId;\n }\n this.viewer.owner.isShiftingEnabled = true;\n if (selection.isEmpty) {\n this.applyParaFormatProperty(selection.start.paragraph, 'listFormat', format, false);\n this.layoutItemBlock(selection.start.paragraph, false);\n }\n else {\n this.updateSelectionParagraphFormatting('listFormat', format, false);\n }\n this.reLayout(selection);\n };\n /**\n * Applies bullets or numbering list\n * @param {string} format\n * @param {ListLevelPattern} listLevelPattern\n * @param {string} fontFamily\n * @private\n */\n Editor.prototype.applyBulletOrNumbering = function (format, listLevelPattern, fontFamily) {\n var selection = this.viewer.selection;\n var list = selection.paragraphFormat.getList();\n var isUpdate = false;\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var currentParagraph = start.paragraph;\n if (isNullOrUndefined(list)) {\n while (!isNullOrUndefined(currentParagraph.previousWidget) && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.isEmpty() && currentParagraph.previousWidget.paragraphFormat.listFormat.listId === -1) {\n currentParagraph = currentParagraph.previousWidget;\n }\n if (currentParagraph.previousWidget && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.paragraphFormat.listFormat.listId !== -1) {\n currentParagraph = currentParagraph.previousWidget;\n list = this.viewer.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n isUpdate = true;\n }\n }\n var startListLevel = undefined;\n if (!isNullOrUndefined(list)) {\n var tempList = this.viewer.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n startListLevel = this.viewer.layout.getListLevel(tempList, currentParagraph.paragraphFormat.listFormat.listLevelNumber);\n }\n if (isNullOrUndefined(list) || (!isNullOrUndefined(list) && ((startListLevel.listLevelPattern !== listLevelPattern) ||\n startListLevel.numberFormat !== format || (startListLevel.characterFormat.fontFamily !== fontFamily\n && startListLevel.listLevelPattern === 'Bullet')))) {\n isUpdate = false;\n list = new WList();\n if (this.viewer.lists.length > 0) {\n list.listId = this.viewer.lists[this.viewer.lists.length - 1].listId + 1;\n }\n else {\n list.listId = 0;\n }\n var abstractList = new WAbstractList();\n if (this.viewer.abstractLists.length > 0) {\n abstractList.abstractListId = this.viewer.abstractLists[this.viewer.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n abstractList.abstractListId = 0;\n }\n list.abstractListId = abstractList.abstractListId;\n list.abstractList = abstractList;\n this.viewer.abstractLists.push(abstractList);\n if (format === 'bullet' || format === 'multiLevel' || format === 'numbering') {\n this.addListLevels(abstractList, format, selection);\n }\n else {\n var listLevel = new WListLevel(abstractList);\n listLevel.listLevelPattern = listLevelPattern;\n listLevel.numberFormat = format;\n if (listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n else {\n listLevel.characterFormat.fontFamily = fontFamily;\n }\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractList.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = 0;\n }\n selection.paragraphFormat.setList(list);\n }\n else if (!isNullOrUndefined(list) && isUpdate) {\n selection.paragraphFormat.setList(list);\n }\n else {\n selection.paragraphFormat.setList(undefined);\n }\n };\n Editor.prototype.addListLevels = function (abstractListAdv, listName, selection) {\n var bulletCharacters = ['\\uf076', '\\uf0d8', '\\uf0a7', '\\uf0b7', '\\uf0a8'];\n for (var i = abstractListAdv.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractListAdv);\n if (listName.match('bullet')) {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = bulletCharacters[i < 5 ? i % 5 : i % 5 + 1];\n listLevel.characterFormat.fontFamily = i < 3 || i === 5 ? 'Wingdings' : 'Symbol';\n }\n else {\n if (listName.match('multiLevel')) {\n for (var j = 0; j < i + 1; j++) {\n listLevel.numberFormat += '%' + (j + 1).toString() + '.';\n }\n listLevel.listLevelPattern = 'Number';\n }\n else {\n listLevel.numberFormat = '%' + (i + 1).toString() + ')';\n listLevel.listLevelPattern = i % 3 === 0 ? 'Number'\n : i % 3 === 1 ? 'LowLetter' : 'LowRoman';\n }\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n if (i === 0) {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36 * i;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractListAdv.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = i;\n }\n };\n /**\n * Insert page break at cursor position\n */\n Editor.prototype.insertPageBreak = function () {\n if (!this.owner.isReadOnlyMode) {\n if (this.viewer.selection.start.paragraph.isInsideTable ||\n this.viewer.selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n this.initComplexHistory('PageBreak');\n this.onEnter(true);\n if (this.editorHistory && this.editorHistory.currentHistoryInfo != null) {\n this.editorHistory.updateComplexHistory();\n }\n this.selection.checkForCursorVisibility();\n }\n };\n /**\n * @private\n */\n Editor.prototype.onEnter = function (isInsertPageBreak) {\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n //ToDo: Need to handle the CTRL + Enter (Page Break) and SHIFT + Enter (Line Break) behavior.\n var hyperlinkField = selection.getHyperlinkField();\n var isSelectionOnHyperlink = !isNullOrUndefined(hyperlinkField);\n if (isSelectionOnHyperlink) {\n selection.fireRequestNavigate(hyperlinkField);\n return;\n }\n var paragraph = selection.start.paragraph;\n if (paragraph.isEmpty() && paragraph.paragraphFormat.listFormat.listId !== -1) {\n // tslint:disable-next-line:max-line-length\n this.onApplyListInternal(this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId), paragraph.paragraphFormat.listFormat.listLevelNumber - 1);\n return;\n }\n }\n this.initHistory('Enter');\n var isRemoved = true;\n if (!selection.isEmpty) {\n // this.initHistoryWithSelection(selection, 'Enter');\n isRemoved = this.removeSelectedContents(selection);\n }\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n var blockInfo = this.getParagraphInfo(selection.start);\n var initialStart = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset);\n this.setPositionForCurrentIndex(selection.start, initialStart);\n if (isInsertPageBreak) {\n var currentParagraph = selection.start.paragraph;\n var breakParagraph = new ParagraphWidget();\n breakParagraph.characterFormat.copyFormat(currentParagraph.characterFormat);\n breakParagraph.paragraphFormat.copyFormat(currentParagraph.paragraphFormat);\n var pageBreak = new TextElementBox();\n pageBreak.text = '\\f';\n var line = new LineWidget(breakParagraph);\n line.children.push(pageBreak);\n pageBreak.line = line;\n breakParagraph.childWidgets.push(line);\n this.insertParagraph(breakParagraph, true);\n selection.selectParagraph(breakParagraph, true);\n }\n var nextNode = selection.start.paragraph.nextWidget;\n if (isNullOrUndefined(nextNode)) {\n nextNode = selection.getNextRenderedBlock(selection.start.paragraph);\n }\n selection.selectParagraph(nextNode, true);\n this.updateEndPosition();\n if (isInsertPageBreak && this.editorHistory) {\n this.owner.editorHistory.updateHistory();\n }\n // if (!isNullOrUndefined(selection.currentHistoryInfo)) {\n // this.updateComplexHistory();\n // } else {\n this.reLayout(selection);\n // }\n var paragraph = selection.start.paragraph.previousWidget;\n if (!isNullOrUndefined(paragraph) && !paragraph.isEmpty() &&\n // tslint:disable-next-line:max-line-length\n paragraph.lastChild.children[paragraph.lastChild.children.length - 1] instanceof TextElementBox) {\n this.checkAndConvertToHyperlink(selection, true, paragraph);\n }\n }\n };\n Editor.prototype.splitParagraphInternal = function (selection, paragraphAdv, currentLine, offset) {\n var insertIndex = 0;\n var blockIndex = paragraphAdv.index;\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n //Copies the format to new paragraph.\n paragraph.paragraphFormat.ownerBase = paragraph;\n if (currentLine === paragraphAdv.lastChild && offset === selection.getLineLength(currentLine)) {\n // tslint:disable-next-line:max-line-length\n if (paragraphAdv.paragraphFormat.baseStyle\n && paragraphAdv.paragraphFormat.baseStyle.name !== 'Normal' && paragraphAdv.paragraphFormat.baseStyle.next instanceof WParagraphStyle) {\n if (paragraphAdv.paragraphFormat.baseStyle.name === paragraphAdv.paragraphFormat.baseStyle.next.name) {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n else {\n paragraph.paragraphFormat.baseStyle = paragraphAdv.paragraphFormat.baseStyle.next;\n }\n this.selection.skipFormatRetrieval = false;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n //ToDo in future: Need to skip copying formattings to new paragraph, if the style for following paragraph is same style.\n insertIndex++;\n blockIndex++;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n if (offset > 0 || !currentLine.isFirstLine()) {\n paragraphAdv = paragraphAdv.combineWidget(this.viewer);\n this.moveInlines(paragraphAdv, paragraph, 0, 0, paragraphAdv.firstChild, offset, currentLine);\n }\n paragraphAdv = paragraphAdv.getSplitWidgets()[0];\n }\n insertIndex += paragraphAdv.getIndex();\n var container = paragraphAdv.containerWidget;\n var childNodes = container.childWidgets;\n childNodes.splice(insertIndex, 0, paragraph);\n paragraph.containerWidget = container;\n paragraph.index = blockIndex;\n this.updateNextBlocksIndex(paragraph, true);\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(blockIndex, container, paragraph, false);\n };\n /**\n * @private\n */\n Editor.prototype.updateNextBlocksIndex = function (block, increaseIndex) {\n var nextIndex = block.containerWidget.childWidgets.indexOf(block) + 1;\n if (block.containerWidget instanceof BodyWidget) {\n var currentSectionIndex = block.containerWidget.index;\n for (var j = this.viewer.pages.indexOf(block.containerWidget.page); j < this.viewer.pages.length; j++) {\n var page = this.viewer.pages[j];\n if (page.bodyWidgets[0].index === currentSectionIndex) {\n for (var k = nextIndex; k < page.bodyWidgets[0].childWidgets.length; k++) {\n var childWidget = page.bodyWidgets[0].childWidgets[k];\n this.updateIndex(childWidget, increaseIndex);\n }\n nextIndex = 0;\n }\n else {\n return;\n }\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cells = block.containerWidget.getSplitWidgets();\n var currentCellIndex = cells.indexOf(block.containerWidget);\n for (var x = currentCellIndex; x < cells.length; x++) {\n var blocks = cells[x].childWidgets;\n for (var y = nextIndex; y < blocks.length; y++) {\n this.updateIndex(blocks[y], increaseIndex);\n }\n currentCellIndex = 0;\n nextIndex = 0;\n }\n }\n else if (block.containerWidget instanceof TableRowWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var cell = block.containerWidget.childWidgets[i];\n if (cell.rowIndex === block.containerWidget.index) {\n this.updateIndex(cell, increaseIndex);\n }\n }\n }\n else if (block.containerWidget instanceof TableWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var row = block.containerWidget.childWidgets[i];\n this.updateIndex(row, increaseIndex);\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].rowIndex = row.index;\n }\n }\n //update Row index of all the cell\n }\n else if (block.containerWidget instanceof HeaderFooterWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var nextBlock = block.containerWidget.childWidgets[i];\n this.updateIndex(nextBlock, increaseIndex);\n }\n }\n };\n Editor.prototype.updateIndex = function (widget, increment) {\n if (increment) {\n widget.index++;\n }\n else {\n widget.index--;\n }\n };\n Editor.prototype.updateEndPosition = function () {\n var selection = this.viewer.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, false);\n }\n };\n /**\n * @private\n */\n Editor.prototype.onBackSpace = function () {\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n this.singleBackspace(selection, false);\n }\n else {\n this.initHistory('BackSpace');\n var skipBackSpace = this.deleteSelectedContents(selection, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (skipBackSpace) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n else {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.insertRemoveBookMarkElements = function () {\n var isHandledComplexHistory = false;\n for (var i = 0; i < this.removedBookmarkElements.length; i++) {\n var bookMark = this.removedBookmarkElements[i];\n if (bookMark.bookmarkType === 0) {\n var bookMarkStart = bookMark;\n if (bookMarkStart && bookMarkStart.reference && this.removedBookmarkElements.indexOf(bookMarkStart.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkStart.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkStart);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n }\n else {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n this.initInsertInline(bookMarkStart.clone());\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n else {\n var bookMarkEnd = bookMark;\n if (bookMarkEnd && bookMarkEnd.reference && this.removedBookmarkElements.indexOf(bookMarkEnd.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkEnd.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkEnd);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n }\n else {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n this.initInsertInline(bookMarkEnd.clone());\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n this.removedBookmarkElements = [];\n return isHandledComplexHistory;\n };\n /**\n * @private\n */\n Editor.prototype.deleteSelectedContents = function (selection, isBackSpace) {\n var skipBackSpace = this.deleteSelectedContentInternal(selection, isBackSpace, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n var blockInfo = this.getParagraph({ index: selection.editPosition });\n var lineInfo = this.getLineInfo(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n selection.selectContent(textPosition, true);\n return skipBackSpace;\n };\n /**\n * @private\n */\n Editor.prototype.singleBackspace = function (selection, isRedoing) {\n var history = this.editorHistory;\n // If backspace is pressed after auto format to hyperlink is done, need to undo auto format.\n if (history && !isRedoing && !history.canRedo() && history.canUndo()) {\n var historyInfo = history.undoStack[history.undoStack.length - 1];\n var startBlockInfo = this.getParagraphInfo(selection.start);\n var endBlockInfo = this.getParagraphInfo(selection.end);\n // tslint:disable-next-line:max-line-length\n if (historyInfo.action === 'AutoFormatHyperlink' && historyInfo.insertPosition === this.getHierarchicalIndex(startBlockInfo.paragraph, startBlockInfo.offset.toString()) &&\n historyInfo.endPosition === this.getHierarchicalIndex(endBlockInfo.paragraph, endBlockInfo.offset.toString())) {\n history.undo();\n return;\n }\n }\n var paragraph = selection.start.paragraph;\n var currentLineWidget = selection.start.currentWidget;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = currentLineWidget.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n var previousInline = inline;\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n var begin = inline.fieldBegin;\n var end = inline.fieldEnd;\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n selection.fireSelectionChanged(true);\n return;\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n var prevInline = selection.getPreviousValidElement(inline);\n if (prevInline instanceof FieldElementBox) {\n inline = prevInline.fieldBegin;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n selection.end.setPositionParagraph(inline.line, offset); //Selects the entire field.\n selection.fireSelectionChanged(true);\n return;\n }\n else if (prevInline !== inline) {\n inline = prevInline; //Updates the offset to delete next content.\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n }\n if (inline && (inline instanceof BookmarkElementBox && inline.bookmarkType === 1\n || inline.previousNode instanceof BookmarkElementBox)) {\n if (inline instanceof BookmarkElementBox) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox && inline.previousNode instanceof BookmarkElementBox) {\n var begin = inline.previousNode;\n var end = inline.nextNode;\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.initHistory('BackSpace');\n this.deleteSelectedContents(selection, true);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n return;\n }\n }\n if (!isRedoing) {\n this.initHistory('BackSpace');\n }\n if (offset === selection.getStartOffset(paragraph) && selection.start.currentWidget.isFirstLine()) {\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n return;\n }\n if (paragraph.paragraphFormat.firstLineIndent !== 0) {\n this.onApplyParagraphFormat('firstLineIndent', 0, false, false);\n return;\n }\n if (paragraph.paragraphFormat.leftIndent !== 0) {\n this.onApplyParagraphFormat('leftIndent', 0, false, false);\n return;\n }\n if (paragraph.paragraphFormat.textAlignment !== 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n return;\n }\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n selection.owner.isShiftingEnabled = true;\n var previousParagraph = paragraph.previousRenderedWidget;\n // if (isNullOrUndefined(previousParagraph)) {\n // previousParagraph = this.viewer.selection.getPreviousBlock(paragraph) as ParagraphWidget;\n // }\n if (previousParagraph.isEmpty()) {\n this.removeBlock(previousParagraph);\n this.addRemovedNodes(previousParagraph);\n }\n else {\n this.removeBlock(paragraph);\n var endOffset = this.viewer.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n var lineWidget = void 0;\n if (!paragraph.isEmpty()) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n lineWidget = paragraph.childWidgets[i];\n previousParagraph.childWidgets.push(lineWidget);\n paragraph.childWidgets.splice(i, 1);\n i--;\n lineWidget.paragraph = previousParagraph;\n }\n }\n this.viewer.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n this.setPositionForHistory();\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n }\n var paragraphInfo = this.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = offset - 1;\n if (removeOffset < 0) {\n lineWidget = lineWidget.previousLine;\n removeOffset = this.viewer.selection.getLineLength(lineWidget) + removeOffset;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset - 1, false);\n this.setPositionForHistory();\n if (!isRedoing) {\n this.reLayout(selection);\n }\n else {\n this.fireContentChange();\n }\n }\n };\n Editor.prototype.setPositionForHistory = function (editPosition) {\n var selection = this.viewer.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (isNullOrUndefined(editPosition)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = editPosition;\n this.editorHistory.currentBaseHistoryInfo.endPosition = editPosition;\n }\n }\n };\n Editor.prototype.removeAtOffset = function (lineWidget, selection, offset) {\n var count = 0;\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset < count + inline.length) {\n var indexInInline = offset - count;\n if (offset === count && inline.length === 1) {\n this.unLinkFieldCharacter(inline);\n lineWidget.children.splice(i, 1);\n this.viewer.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i);\n this.addRemovedNodes(inline);\n }\n else {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(indexInInline, 1);\n inline.text = HelperMethods.remove(inline.text, indexInInline, 1);\n this.viewer.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i);\n this.addRemovedNodes(span);\n }\n break;\n }\n count += inline.length;\n }\n };\n /**\n * @private\n */\n Editor.prototype.onDelete = function () {\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n this.singleDelete(selection, false);\n }\n else {\n // this.initComplexHistory('MultiSelection');\n // for (let i: number = 0; i < selection.selectionRanges.length; i++) {\n // let selectionRange: SelectionRange = selection.selectionRanges.getRange(i);\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n // if (this.viewer.owner.enableEditorHistory) {\n this.reLayout(selection);\n // }\n // this.updateSelectionRangeOffSet(selection.start, selection.end);\n // }\n // let textPosition: TextPosition = new TextPosition(selection.owner, this.viewer);\n // this.setPositionForCurrentIndex(textPosition,selection.editPosition);\n // selection.selectContent(textPosition, true);\n // if (!isNullOrUndefined(selection.currentHistoryInfo)) {\n // this.updateComplexHistory();\n // } else {\n // this.updateComplexWithoutHistory();\n // }\n }\n };\n /**\n * Remove single character on right of cursor position\n * @param {Selection} selection\n * @param {boolean} isRedoing\n * @private\n */\n Editor.prototype.singleDelete = function (selection, isRedoing) {\n // tslint:disable-next-line:max-line-length\n var paragraph = selection.start.paragraph;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = paragraph.getInline(selection.start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1 &&\n this.viewer.isListTextSelected && selection.contextType === 'List') {\n this.onApplyList(undefined);\n return;\n }\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n indexInInline = 0;\n }\n if (!isNullOrUndefined(inline)) {\n var nextRenderedInline = undefined;\n var nextInline = selection.getNextValidElement(inline);\n if (nextInline instanceof ElementBox) {\n nextRenderedInline = nextInline;\n }\n if (!isNullOrUndefined(nextRenderedInline) && nextRenderedInline instanceof FieldElementBox\n && nextRenderedInline.fieldType === 0) { //Selects the entire field.\n inline = nextRenderedInline.fieldEnd;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 1);\n selection.end.setPositionParagraph(inline.line, offset);\n selection.fireSelectionChanged(true);\n return;\n }\n else if (inline !== nextRenderedInline) { //Updates the offset to delete next content. \n inline = nextRenderedInline;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n offset++;\n }\n }\n }\n if (inline && (inline instanceof BookmarkElementBox && inline.bookmarkType === 0\n || inline.nextNode instanceof BookmarkElementBox)) {\n if (inline instanceof BookmarkElementBox) {\n inline = inline.nextNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox\n && inline.previousNode instanceof BookmarkElementBox) {\n var bookMarkBegin = inline.previousNode;\n var bookMarkEnd = inline.nextNode;\n selection.start.setPositionParagraph(bookMarkBegin.line, bookMarkBegin.line.getOffset(bookMarkBegin, 0));\n selection.end.setPositionParagraph(bookMarkEnd.line, bookMarkEnd.line.getOffset(bookMarkEnd, 0) + 1);\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n return;\n }\n }\n if (selection.start.currentWidget.isLastLine() && offset === this.viewer.selection.getLineLength(selection.start.currentWidget)) {\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget)) {\n return;\n }\n var previousParagraph = undefined;\n var newParagraph = undefined;\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (offset > 0) {\n return;\n }\n else {\n if (paragraph.previousWidget instanceof ParagraphWidget) {\n previousParagraph = paragraph.previousWidget;\n }\n if (paragraph.previousWidget instanceof TableWidget) {\n return;\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n //Adds an empty paragraph, to ensure minimal content.\n }\n }\n }\n if (!isRedoing) {\n this.initHistory('Delete');\n }\n var blockInfo = this.getParagraphInfo(selection.start);\n selection.editPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.checkInsertPosition(selection)) {\n this.setPositionForHistory(selection.editPosition);\n }\n selection.owner.isShiftingEnabled = true;\n if (paragraph.isEmpty()) {\n this.removeBlock(paragraph);\n this.addRemovedNodes(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (isNullOrUndefined(previousParagraph)) {\n // selection.selectParagraph(newParagraph, true, true);\n var paraEndOffset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, true);\n //tslint:disable-next-line:max-line-length\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.getHierarchicalIndex(newParagraph, paraEndOffset.toString());\n }\n }\n else {\n selection.selectParagraph(previousParagraph, false);\n this.setPositionForHistory();\n }\n }\n else {\n selection.selectParagraph(nextParagraph, true);\n }\n }\n else {\n paragraph = paragraph.combineWidget(this.viewer);\n // tslint:disable-next-line:max-line-length\n var currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, selection.start.currentWidget, selection.start.offset, true);\n this.deleteParagraphMark(currentParagraph, selection, 0);\n this.addRemovedNodes(paragraph);\n this.setPositionForCurrentIndex(selection.start, selection.editPosition);\n selection.selectContent(selection.start, true);\n }\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n this.singleDeleteInternal(selection, isRedoing, paragraph);\n }\n };\n Editor.prototype.singleDeleteInternal = function (selection, isRedoing, paragraph) {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n this.initHistory('Delete');\n }\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n var paragraphInfo = this.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = selection.start.offset;\n var lineLength = selection.getLineLength(selection.start.currentWidget);\n if (removeOffset >= lineLength) {\n lineWidget = lineWidget.nextLine;\n removeOffset = removeOffset - lineLength;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset, false);\n if (!isRedoing) {\n this.reLayout(selection);\n }\n else {\n this.fireContentChange();\n }\n };\n Editor.prototype.deleteParagraphMark = function (paragraph, selection, editAction) {\n if (isNullOrUndefined(paragraph.containerWidget)) {\n return;\n }\n paragraph = paragraph.combineWidget(this.viewer);\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget) || isNullOrUndefined(nextParagraph)) {\n return;\n }\n //BodyWidget\n var section = paragraph.containerWidget instanceof BodyWidget ? paragraph.containerWidget : undefined;\n var table = undefined;\n if (selection.getNextRenderedBlock(paragraph) instanceof TableWidget) {\n table = selection.getNextRenderedBlock(paragraph);\n }\n else {\n table = undefined;\n }\n if (nextParagraph.isInsideTable && !isNullOrUndefined(table) && table.contains(nextParagraph.associatedCell)) {\n if (editAction < 4) {\n // let nextSection: BodyWidget = table.containerWidget instanceof BodyWidget ? table.containerWidget : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // }\n var offset = 0;\n this.removeBlock(paragraph);\n this.viewer.layout.clearListElementBox(nextParagraph);\n this.viewer.layout.clearListElementBox(paragraph);\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var line = paragraph.childWidgets[i];\n for (var j = line.children.length - 1; j >= 0; j--) {\n var element = line.children[j];\n offset += element.length;\n nextParagraph.firstChild.children.unshift(element);\n element.line = nextParagraph.firstChild;\n // this.layoutInlineCollection(false, 0, nextParagraph.inlines, inline);\n }\n }\n this.viewer.layout.reLayoutParagraph(nextParagraph, 0, 0);\n if (offset > 0) {\n selection.editPosition = this.getHierarchicalIndex(nextParagraph, offset.toString());\n }\n }\n }\n else {\n if (editAction < 4) {\n // let nextSection: WSection = nextParagraph.section instanceof WSection ? nextParagraph.section as WSection : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // }\n var prevLength = paragraph.childWidgets.length - 1;\n var nextPara = nextParagraph.getSplitWidgets();\n nextParagraph = nextParagraph.combineWidget(this.viewer);\n this.viewer.layout.clearListElementBox(nextParagraph);\n this.viewer.layout.clearListElementBox(paragraph);\n this.updateEditPositionOnMerge(paragraph, nextParagraph);\n for (var i = 0; i < nextParagraph.childWidgets.length; i++) {\n var inline = nextParagraph.childWidgets[i];\n nextParagraph.childWidgets.splice(i, 1);\n paragraph.childWidgets.push(inline);\n inline.paragraph = paragraph;\n i--;\n }\n if (nextParagraph.childWidgets.length === 0) {\n nextParagraph.childWidgets.push(new LineWidget(nextParagraph));\n }\n this.removeBlock(nextParagraph);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n this.addRemovedNodes(nextParagraph);\n }\n }\n };\n Editor.prototype.updateEditPositionOnMerge = function (currentParagraph, nextParagraph) {\n if (this.viewer.selection.editPosition === this.getHierarchicalIndex(nextParagraph, '0') &&\n nextParagraph.nextRenderedWidget === undefined) {\n // tslint:disable-next-line:max-line-length\n this.viewer.selection.editPosition = this.getHierarchicalIndex(currentParagraph, this.viewer.selection.getLineLength(currentParagraph.lastChild).toString());\n }\n };\n Editor.prototype.checkEndPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.endPosition));\n };\n Editor.prototype.checkInsertPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition));\n };\n Editor.prototype.checkIsNotRedoing = function () {\n return this.viewer.owner.enableHistoryMode && !this.editorHistory.isRedoing;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteSelectedContentInternal = function (selection, isBackSpace, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n var blockInfo = this.getParagraphInfo(startPos);\n selection.editPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var skipBackSpace = false;\n if (isBackSpace && startPos.isInSameParagraph(endPos)) {\n //Handled specifically to skip removal of contents, if selection is only paragraph mark and next rendered block is table.\n if (startPos.offset < endPos.offset && startPos.offset === selection.getParagraphLength(endPos.paragraph)) {\n var nextBlock = selection.getNextRenderedBlock(startPos.paragraph);\n skipBackSpace = nextBlock instanceof TableWidget;\n }\n //Handled specifically to remove paragraph completely (Delete behavior), if the selected paragraph is empty.\n if (endPos.offset === 1 && endPos.offset > selection.getParagraphLength(endPos.paragraph)\n && !(endPos.paragraph.isInsideTable && isNullOrUndefined(endPos.paragraph.nextWidget))) {\n isBackSpace = false;\n }\n }\n if (!skipBackSpace) {\n selection.owner.isShiftingEnabled = true;\n if (this.checkInsertPosition(selection)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n }\n var editAction = (isBackSpace ? 1 : 0);\n this.deleteSelectedContent(endPos.paragraph, selection, startPos, endPos, editAction);\n }\n return skipBackSpace;\n };\n /**\n * Init EditorHistory\n * @private\n */\n Editor.prototype.initHistory = function (action) {\n if (this.viewer.owner.enableHistoryMode) {\n this.editorHistory.initializeHistory(action);\n }\n };\n /**\n * Init Complex EditorHistory\n * @private\n */\n Editor.prototype.initComplexHistory = function (action) {\n if (this.viewer.owner.enableHistoryMode) {\n this.editorHistory.initComplexHistory(this.viewer.selection, action);\n }\n };\n //Insert Picture implementation starts\n /**\n * Insert image\n * @param {string} base64String\n * @param {number} width\n * @param {number} height\n * @private\n */\n Editor.prototype.insertPicture = function (base64String, width, height) {\n var imageElementBox = new ImageElementBox(true);\n imageElementBox.imageString = base64String;\n imageElementBox.width = width;\n imageElementBox.height = height;\n this.insertPictureInternal(imageElementBox);\n };\n Editor.prototype.insertPictureInternal = function (imageElementBox) {\n var selection = this.viewer.selection;\n this.initHistory('InsertInline');\n this.fitImageToPage(selection, imageElementBox);\n this.insertInlineInSelection(selection, imageElementBox);\n this.reLayout(selection);\n };\n Editor.prototype.fitImageToPage = function (selection, imageElementBox) {\n var section = selection.start.paragraph.bodyWidget;\n var pageWidth = section.sectionFormat.pageWidth - section.sectionFormat.leftMargin - section.sectionFormat.rightMargin;\n var pageHeight = section.sectionFormat.pageHeight - section.sectionFormat.topMargin - section.sectionFormat.topMargin;\n //Resizes image to page size.\n if (imageElementBox.width > pageWidth) {\n imageElementBox.height = imageElementBox.height * pageWidth / imageElementBox.width;\n imageElementBox.width = pageWidth;\n }\n if (imageElementBox.height > pageHeight) {\n imageElementBox.width = imageElementBox.width * pageHeight / imageElementBox.height;\n imageElementBox.height = pageHeight;\n }\n };\n //Insert Picture implementation ends\n /**\n * @private\n */\n Editor.prototype.insertInlineInSelection = function (selection, elementBox) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertInlineInternal(elementBox);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.onPortrait = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.viewer.selection.sectionFormat.pageWidth;\n var height = this.viewer.selection.sectionFormat.pageHeight;\n if (width > height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @private\n */\n Editor.prototype.onLandscape = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.viewer.selection.sectionFormat.pageWidth;\n var height = this.viewer.selection.sectionFormat.pageHeight;\n if (width < height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n Editor.prototype.copyValues = function () {\n var format = new WSectionFormat();\n format.bottomMargin = this.viewer.selection.sectionFormat.bottomMargin;\n format.topMargin = this.viewer.selection.sectionFormat.topMargin;\n format.leftMargin = this.viewer.selection.sectionFormat.leftMargin;\n format.rightMargin = this.viewer.selection.sectionFormat.rightMargin;\n format.pageHeight = this.viewer.selection.sectionFormat.pageHeight;\n format.pageWidth = this.viewer.selection.sectionFormat.pageWidth;\n format.footerDistance = this.viewer.selection.sectionFormat.footerDistance;\n format.headerDistance = this.viewer.selection.sectionFormat.headerDistance;\n return format;\n };\n /**\n * @private\n */\n Editor.prototype.changeMarginValue = function (property) {\n var sectionFormat = this.copyValues();\n if (property === 'lastCustomSetting' || property === 'normal') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 72;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'narrow') {\n sectionFormat.topMargin = 36;\n sectionFormat.bottomMargin = 36;\n sectionFormat.leftMargin = 36;\n sectionFormat.rightMargin = 36;\n }\n else if (property === 'moderate') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 54;\n sectionFormat.rightMargin = 54;\n }\n else if (property === 'wide') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 144;\n sectionFormat.rightMargin = 144;\n }\n else if (property === 'mirrored') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'office2003Default') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 90;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @private\n */\n Editor.prototype.onPaperSize = function (property) {\n var sectionFormat = this.copyValues();\n var width = this.viewer.selection.sectionFormat.pageWidth;\n var height = this.viewer.selection.sectionFormat.pageHeight;\n if (property === 'letter') {\n if (width < height) {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 791.9;\n }\n else {\n sectionFormat.pageWidth = 791.9;\n sectionFormat.pageHeight = 611.9;\n }\n }\n else if (property === 'tabloid') {\n if (width < height) {\n sectionFormat.pageWidth = 791.9;\n sectionFormat.pageHeight = 1223.9;\n }\n else {\n sectionFormat.pageWidth = 1223.9;\n sectionFormat.pageHeight = 791.9;\n }\n }\n else if (property === 'legal') {\n if (width < height) {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 1007.9;\n }\n else {\n sectionFormat.pageWidth = 1007.9;\n sectionFormat.pageHeight = 611.9;\n }\n }\n else if (property === 'statement') {\n if (width < height) {\n sectionFormat.pageWidth = 396;\n sectionFormat.pageHeight = 611.9;\n }\n else {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 396;\n }\n }\n else if (property === 'executive') {\n if (width < height) {\n sectionFormat.pageWidth = 521.9;\n sectionFormat.pageHeight = 755.9;\n }\n else {\n sectionFormat.pageWidth = 755.9;\n sectionFormat.pageHeight = 521.9;\n }\n }\n else if (property === 'a3') {\n if (width < height) {\n sectionFormat.pageWidth = 841.8;\n sectionFormat.pageHeight = 1190.4;\n }\n else {\n sectionFormat.pageWidth = 1190.4;\n sectionFormat.pageHeight = 841.8;\n }\n }\n else if (property === 'a4') {\n if (width < height) {\n sectionFormat.pageWidth = 595.2;\n sectionFormat.pageHeight = 841.8;\n }\n else {\n sectionFormat.pageWidth = 841.8;\n sectionFormat.pageHeight = 595.2;\n }\n }\n else if (property === 'a5') {\n if (width < height) {\n sectionFormat.pageWidth = 419.5;\n sectionFormat.pageHeight = 595.2;\n }\n else {\n sectionFormat.pageWidth = 595.2;\n sectionFormat.pageHeight = 419.5;\n }\n }\n else if (property === 'b4') {\n if (width < height) {\n sectionFormat.pageWidth = 728.4;\n sectionFormat.pageHeight = 1031.7;\n }\n else {\n sectionFormat.pageWidth = 1031.7;\n sectionFormat.pageHeight = 728.4;\n }\n }\n else if (property === 'b5') {\n if (width < height) {\n sectionFormat.pageWidth = 515.8;\n sectionFormat.pageHeight = 728.4;\n }\n else {\n sectionFormat.pageWidth = 728.4;\n sectionFormat.pageHeight = 515.8;\n }\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n //Update List Items\n /**\n * @private\n */\n Editor.prototype.updateListItemsTillEnd = function (blockAdv, updateNextBlockList) {\n var block = updateNextBlockList ? this.viewer.selection.getNextRenderedBlock(blockAdv) : blockAdv;\n while (!isNullOrUndefined(block)) {\n //Updates the list value of the rendered paragraph. \n this.updateRenderedListItems(block);\n block = block.getSplitWidgets().pop().nextRenderedWidget;\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateWholeListItems = function (block) {\n this.viewer.renderedLists.clear();\n var sectionIndex = block.bodyWidget.index;\n var currentBlock;\n for (var j = 0; j < this.viewer.pages.length; j++) {\n var page = this.viewer.pages[j];\n if (page.bodyWidgets[0].index === sectionIndex) {\n currentBlock = page.bodyWidgets[0].firstChild;\n break;\n }\n }\n var isListUpdated = false;\n do {\n isListUpdated = this.updateListItems(currentBlock, block);\n if (isListUpdated) {\n break;\n }\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n Editor.prototype.updateListItems = function (blockAdv, block) {\n var isListUpdated = false;\n if (blockAdv instanceof ParagraphWidget) {\n isListUpdated = this.updateListItemsForPara(blockAdv, block);\n }\n else {\n isListUpdated = this.updateListItemsForTable(blockAdv, block);\n }\n return isListUpdated;\n };\n Editor.prototype.updateListItemsForTable = function (table, block) {\n if (block instanceof TableWidget && table.equals(block)) {\n return true;\n }\n var row = table.firstChild;\n do {\n var isListUpdated = this.updateListItemsForRow(row, block);\n if (isListUpdated) {\n return true;\n }\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n return false;\n };\n Editor.prototype.updateListItemsForRow = function (row, block) {\n if (block.isInsideTable && row.childWidgets.indexOf(this.viewer.selection.getContainerCell(block.associatedCell)) !== -1) {\n //Returns as list updated, inorder to start list numbering from first list paragraph of this row.\n return true;\n }\n var cell = row.firstChild;\n do {\n this.updateListItemsForCell(cell, block);\n cell = cell.nextRenderedWidget;\n } while (cell);\n return false;\n };\n Editor.prototype.updateListItemsForCell = function (cell, block) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateListItems(currentBlock, block);\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n // public abstract updateListParagraphs(): void;\n /**\n * @private\n */\n Editor.prototype.updateRenderedListItems = function (block) {\n if (block instanceof ParagraphWidget) {\n this.updateRenderedListItemsForPara(block);\n }\n else {\n this.updateRenderedListItemsForTable(block);\n }\n };\n Editor.prototype.updateRenderedListItemsForTable = function (table) {\n var row = table.firstChild;\n do {\n this.updateRenderedListItemsForRow(row);\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n };\n Editor.prototype.updateRenderedListItemsForRow = function (row) {\n var cell = row.firstChild;\n do {\n this.updateRenderedListItemsForCell(cell);\n cell = cell.nextRenderedWidget;\n } while (cell);\n };\n Editor.prototype.updateRenderedListItemsForCell = function (cell) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateRenderedListItems(currentBlock);\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n Editor.prototype.updateListItemsForPara = function (paragraph, block) {\n if (paragraph.equals(block)) {\n return true;\n }\n else {\n var currentList = undefined;\n var listLevelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId))\n // tslint:disable-next-line:max-line-length\n && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels[listLevelNumber])) {\n var currentListLevel = this.viewer.layout.getListLevel(currentList, listLevelNumber);\n //Updates the list numbering from document start for reLayouting.\n if (currentListLevel.listLevelPattern !== 'Bullet') {\n this.viewer.layout.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n }\n }\n return false;\n };\n Editor.prototype.updateRenderedListItemsForPara = function (paragraph) {\n if (!isNullOrUndefined(this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId))) {\n var currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n var listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId))\n // tslint:disable-next-line:max-line-length\n && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels[paragraph.paragraphFormat.listFormat.listLevelNumber])) {\n var currentListLevel = this.viewer.layout.getListLevel(currentList, listLevelNumber);\n //Updates the list numbering from document start for reLayouting.\n if (currentListLevel.listLevelPattern !== 'Bullet') {\n var element = undefined;\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n if (lineWidget.children.length > 0) {\n element = lineWidget.children[0];\n }\n }\n if (!isNullOrUndefined(element)) {\n element.text = this.viewer.layout.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n }\n }\n }\n };\n /**\n * Get logical offset of paragraph.\n * @private\n */\n Editor.prototype.getParagraphInfo = function (position) {\n return this.getParagraphInfoInternal(position.currentWidget, position.offset);\n };\n /**\n * @private\n */\n Editor.prototype.getParagraphInfoInternal = function (line, lineOffset) {\n var paragraph = line.paragraph;\n var offset = this.selection.getParagraphLength(paragraph, line) + lineOffset;\n var previous = paragraph.previousSplitWidget;\n while (previous instanceof ParagraphWidget) {\n paragraph = previous;\n offset += this.viewer.selection.getParagraphLength(paragraph);\n previous = paragraph.previousSplitWidget;\n }\n return { 'paragraph': paragraph, 'offset': offset };\n };\n /**\n * Get offset value to update in selection\n * @private\n */\n Editor.prototype.getOffsetValue = function (selection) {\n if (this.startParagraph) {\n var lineInfo = this.getLineInfo(this.startParagraph, this.startOffset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n if (this.endParagraph) {\n var lineInfo = this.getLineInfo(this.endParagraph, this.endOffset);\n selection.end.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.end.updatePhysicalPosition(true);\n }\n };\n /**\n * Get offset value to update in selection\n * @private\n */\n Editor.prototype.getLineInfo = function (paragraph, offset) {\n var position = undefined;\n var element = undefined;\n var length = this.selection.getParagraphLength(paragraph);\n var next = paragraph.nextSplitWidget;\n if (offset > length + 1 && isNullOrUndefined(next)) {\n offset = length;\n }\n while (offset > length && next instanceof ParagraphWidget) {\n offset -= length;\n paragraph = next;\n length = this.selection.getParagraphLength(paragraph);\n next = paragraph.nextSplitWidget;\n }\n return this.selection.getLineInfo(paragraph, offset);\n };\n /**\n * @private\n */\n Editor.prototype.setPositionParagraph = function (paragraph, offset, skipSelectionChange) {\n var selection = this.viewer.selection;\n var lineInfo = this.getLineInfo(paragraph, offset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n selection.end.setPositionInternal(selection.start);\n if (!skipSelectionChange) {\n selection.fireSelectionChanged(true);\n }\n };\n /**\n * @private\n */\n Editor.prototype.setPositionForCurrentIndex = function (textPosition, editPosition) {\n var blockInfo = this.getParagraph({ index: editPosition });\n var lineInfo = this.getLineInfo(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n };\n /**\n * @private\n */\n Editor.prototype.insertPageNumber = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\\\*' + numberFormat;\n }\n var fieldCode = 'PAGE ' + numberFormat + ' \\\\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n /**\n * @private\n */\n Editor.prototype.insertPageCount = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\*' + numberFormat;\n }\n var fieldCode = 'NUMPAGES ' + numberFormat + ' \\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n Editor.prototype.createFields = function (fieldCode) {\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n line.children.push(fieldBegin);\n var fieldtext = new FieldTextElementBox();\n fieldtext.fieldBegin = fieldBegin;\n fieldtext.text = '1';\n var text = new TextElementBox();\n text.text = fieldCode;\n line.children.push(text);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n line.children.push(fieldtext);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldSeparator.fieldEnd = fieldEnd;\n fieldBegin.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n var widgets = [];\n widgets.push(paragraph);\n this.viewer.fields.push(fieldBegin);\n this.pasteContentsInternal(widgets);\n };\n /**\n * @private\n */\n Editor.prototype.insertBookmark = function (name) {\n var bookmark = new BookmarkElementBox(0);\n bookmark.name = name;\n var bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.name = name;\n bookmark.reference = bookmarkEnd;\n bookmarkEnd.reference = bookmark;\n this.viewer.bookmarks.add(name, bookmark);\n this.initComplexHistory('InsertBookmark');\n this.insertElements([bookmarkEnd], [bookmark]);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n this.selection.start.setPositionForSelection(bookmark.line, bookmark, 1, this.selection.start.location);\n this.selection.end.setPositionForSelection(bookmarkEnd.line, bookmarkEnd, 0, this.selection.end.location);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.deleteBookmark = function (bookmarkName) {\n var bookmarks = this.viewer.bookmarks;\n var bookmark = bookmarks.get(bookmarkName);\n if (bookmark instanceof BookmarkElementBox) {\n var bookmarkEnd = bookmark.reference;\n this.initHistory('DeleteBookmark');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.setBookmarkInfo(bookmark);\n this.editorHistory.updateHistory();\n }\n this.deleteBookmarkInternal(bookmark);\n }\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.deleteBookmarkInternal = function (bookmark) {\n this.viewer.bookmarks.remove(bookmark.name);\n bookmark.line.children.splice(bookmark.indexInOwner, 1);\n bookmark.reference.line.children.splice(bookmark.reference.indexInOwner, 1);\n };\n /**\n * @private\n */\n Editor.prototype.getSelectionInfo = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n var isEmpty = this.selection.isEmpty;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n var startElementInfo = start.currentWidget.getInline(start.offset, 0);\n var endElementInfo = end.currentWidget.getInline(end.offset, 0);\n // tslint:disable-next-line:max-line-length\n return { 'start': start.clone(), 'end': end.clone(), 'startElementInfo': startElementInfo, 'endElementInfo': endElementInfo, 'isEmpty': isEmpty };\n };\n /**\n * @private\n */\n Editor.prototype.insertElements = function (endElements, startElements) {\n var info = this.getSelectionInfo();\n if (!isNullOrUndefined(startElements)) {\n this.insertElementsInternal(info.start, startElements);\n }\n if (!isNullOrUndefined(endElements)) {\n this.insertElementsInternal(info.end, endElements);\n }\n };\n /**\n * @private\n */\n Editor.prototype.insertElementsInternal = function (position, elements) {\n this.selection.selectPosition(position, position);\n this.initHistory('InsertElements');\n this.updateInsertPosition();\n var indexInInline = 0;\n var paragraphInfo = this.getParagraphInfo(this.selection.start);\n if (this.selection.start.paragraph.isEmpty()) {\n var paragraph = this.selection.start.paragraph;\n paragraph.childWidgets[0].children.push(elements[0]);\n elements[0].line = paragraph.childWidgets[0];\n elements[0].linkFieldCharacter(this.viewer);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n position.setPositionForSelection(elements[0].line, elements[0], elements[0].length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n }\n else {\n var inlineObj = this.selection.start.currentWidget.getInline(this.viewer.selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n var firstElement = elements[0];\n this.insertElementInternal(curInline, firstElement, indexInInline, true);\n var index = firstElement.indexInOwner;\n var lastElement = firstElement;\n for (var i = 1; i < elements.length; i++) {\n lastElement = elements[i];\n firstElement.line.children.splice(index + i, 0, lastElement);\n }\n position.setPositionForSelection(lastElement.line, lastElement, lastElement.length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n }\n if (this.editorHistory) {\n if (this.checkEndPosition()) {\n this.updateHistoryPosition(this.selection.start, false);\n }\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @private\n */\n Editor.prototype.getHierarchicalIndex = function (block, offset) {\n var index;\n if (block) {\n if (block instanceof HeaderFooterWidget) {\n var hfString = block.headerFooterType.indexOf('Header') !== -1 ? 'H' : 'F';\n var pageIndex = block.page.index.toString();\n var headerFooterIndex = this.viewer.getHeaderFooter(block.headerFooterType).toString();\n var sectionIndex = block.page.sectionIndex;\n index = sectionIndex + ';' + hfString + ';' + pageIndex + ';' + offset;\n }\n else {\n index = block.index + ';' + offset;\n }\n if (block.containerWidget) {\n if (block instanceof TableCellWidget && block.rowIndex !== block.containerWidget.index) {\n index = block.rowIndex + ';' + index;\n block = block.containerWidget;\n }\n return this.getHierarchicalIndex(block.containerWidget, index);\n }\n }\n return index;\n };\n /**\n * @private\n */\n Editor.prototype.getBlock = function (position) {\n var bodyWidget = this.getBodyWidget(position);\n return this.getBlockInternal(bodyWidget, position);\n };\n /**\n * Return Block relative to position\n * @private\n */\n Editor.prototype.getBlockInternal = function (widget, position) {\n if (position.index === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof WSection && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headerFooters, position);\n // tslint:disable-next-line:max-line-length\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n var childWidget = this.getBlockByIndex(widget, index);\n if (childWidget) {\n var child = childWidget;\n if (position.index.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') >= 0) {\n position.index = '0';\n }\n return { 'node': child, 'position': position };\n }\n if (child instanceof Widget) {\n var blockObj = this.getBlockInternal(child, position);\n // tslint:disable-next-line:max-line-length\n return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n }\n }\n else {\n return { 'node': child, 'position': position };\n }\n }\n else {\n return { 'node': node, 'position': position };\n }\n return { 'node': node, 'position': position };\n };\n /**\n * @private\n */\n Editor.prototype.getParagraph = function (position) {\n var paragraph = this.getParagraphInternal(this.getBodyWidget(position), position);\n return { paragraph: paragraph, offset: parseInt(position.index, 10) };\n };\n /**\n * Get paragraph relative to position\n * @private\n */\n Editor.prototype.getParagraphInternal = function (container, position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n // let ins: Widget = container;\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n // if (container instanceof BodyWidget && value === 'HF') {\n // return this.getParagraph(container.headerFooters, position);\n // }\n index = parseInt(value, 10);\n if (container instanceof TableRowWidget && index >= container.childWidgets.length) {\n position.index = '0;0';\n index = container.childWidgets.length - 1;\n }\n var childWidget = this.getBlockByIndex(container, index);\n if (childWidget) {\n var child = childWidget;\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getParagraphInternal(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.viewer.selection.getFirstParagraphInFirstCell(child);\n }\n return undefined;\n }\n }\n }\n else if (container) {\n var nextWidget = container.getSplitWidgets().pop().nextRenderedWidget;\n if (nextWidget instanceof Widget) {\n position.index = '0';\n if (nextWidget instanceof TableWidget) {\n return this.viewer.selection.getFirstParagraphInFirstCell(nextWidget);\n }\n return nextWidget;\n }\n }\n return undefined;\n };\n Editor.prototype.getBodyWidget = function (position) {\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var sectionIndex = parseInt(value, 10);\n index = parseInt(value, 10);\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n // position = position.substring(index).replace(';', '');\n if (value === 'H' || value === 'F') {\n return this.getHeaderFooterWidget(position);\n }\n index = parseInt(value, 10);\n return this.getBodyWidgetInternal(sectionIndex, index);\n };\n Editor.prototype.getHeaderFooterWidget = function (position) {\n //HEADER OR FOOTER WIDGET\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var isHeader = value === 'H';\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n var page = this.viewer.pages[index];\n if (isHeader) {\n return page.headerWidget;\n }\n else {\n return page.footerWidget;\n }\n };\n Editor.prototype.getBodyWidgetInternal = function (sectionIndex, blockIndex) {\n for (var i = 0; i < this.viewer.pages.length; i++) {\n var bodyWidget = this.viewer.pages[i].bodyWidgets[0];\n if (bodyWidget.index === sectionIndex) {\n if (bodyWidget.firstChild.index <= blockIndex && bodyWidget.lastChild.index >= blockIndex) {\n return bodyWidget;\n }\n }\n if (bodyWidget.index > sectionIndex) {\n break;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Editor.prototype.getBlockByIndex = function (container, blockIndex) {\n var childWidget;\n if (container) {\n for (var j = 0; j < container.childWidgets.length; j++) {\n if (container.childWidgets[j].index === blockIndex) {\n childWidget = container.childWidgets[j];\n break;\n }\n }\n if (!childWidget && !(container instanceof HeaderFooterWidget)) {\n return this.getBlockByIndex(container.nextSplitWidget, blockIndex);\n }\n }\n return childWidget;\n };\n /**\n * @private\n */\n Editor.prototype.updateHistoryPosition = function (position, isInsertPosition) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n var hierarchicalIndex = void 0;\n if (position instanceof TextPosition) {\n var blockInfo = this.getParagraphInfo(position);\n hierarchicalIndex = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n else {\n hierarchicalIndex = position;\n }\n if (isInsertPosition) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = hierarchicalIndex;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.endPosition = hierarchicalIndex;\n }\n }\n };\n /**\n * Applies the borders based on given settings.\n * @param {BorderSettings} settings\n */\n Editor.prototype.applyBorders = function (settings) {\n this.initHistory('Borders');\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var cells;\n var border = this.getBorder(settings.borderColor, settings.lineWidth, settings.borderStyle);\n if (this.selection.isEmpty) {\n //Apply borders for current selected cell initially. \n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'LeftBorder') {\n endCell.cellFormat.borders.left.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'TopBorder') {\n endCell.cellFormat.borders.top.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'RightBorder') {\n endCell.cellFormat.borders.right.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'BottomBorder') {\n endCell.cellFormat.borders.bottom.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideVerticalBorder') {\n endCell.cellFormat.borders.vertical.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideHorizontalBorder') {\n endCell.cellFormat.borders.horizontal.copyFormat(border);\n }\n if (settings.type === 'NoBorder') {\n this.clearAllBorderValues(endCell.cellFormat.borders);\n }\n }\n else {\n if (settings.type === 'OutsideBorders' || settings.type === 'TopBorder') {\n var selectedCell = this.getTopBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.top.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'LeftBorder') {\n var selectedCell = this.getLeftBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.left.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'RightBorder') {\n var selectedCell = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.right.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'BottomBorder') {\n var selectedCell = this.getBottomBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n }\n //Apply Only borders property to selected cells \n if (settings.type === 'BottomBorder' || settings.type === 'AllBorders' || settings.type === 'OutsideBorders'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyBottomBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'OutsideBorders' || settings.type === 'RightBorder'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyRightBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'NoBorder') {\n this.applyAllBorders(border, settings.type);\n }\n if (settings.type === 'InsideBorders' || settings.type === 'InsideVerticalBorder'\n || settings.type === 'InsideHorizontalBorder' || settings.type === 'NoBorder') {\n this.applyInsideBorders(border, settings.type, table);\n }\n this.updateGridForTableDialog(table, false);\n this.reLayout(this.selection, false);\n this.editorHistory.updateHistory();\n };\n Editor.prototype.applyAllBorders = function (border, borderType) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (borderType === 'NoBorder') {\n cells[i].cellFormat.borders.left.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.right.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.top.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n cells[i].cellFormat.borders.left.copyFormat(border);\n cells[i].cellFormat.borders.right.copyFormat(border);\n cells[i].cellFormat.borders.top.copyFormat(border);\n cells[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n };\n Editor.prototype.applyInsideBorders = function (border, borderType, table) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var isLastSelectedRow = cell.ownerRow === cells[cells.length - 1].ownerRow;\n var isLastRightCell = (cell.columnIndex + cell.cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex;\n if (borderType === 'NoBorder') {\n cell.cellFormat.borders.right.copyFormat(this.clearBorder());\n cell.cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n cell.cellFormat.borders.right.copyFormat(border);\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n cell.cellFormat.borders.bottom.copyFormat(border);\n }\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n // Apply adjacent bottom borders.\n var nextRowIndex = cell.ownerRow.rowIndex + cell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n var selectedCells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, cell, true);\n for (var j = 0; j < selectedCells.length; j++) {\n if (borderType === 'NoBorder') {\n selectedCells[j].cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n selectedCells[j].cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n }\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n // Apply adjacent right borders.\n var rightBorderCells = this.getSelectedCellsNextWidgets(cell, table);\n for (var k = 0; k < rightBorderCells.length; k++) {\n if (borderType === 'NoBorder') {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.getTopBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var topBorderCells = [];\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === startCell.ownerRow) {\n topBorderCells.push(cells[i]);\n }\n }\n return topBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.getLeftBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var leftBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].columnIndex === startCell.columnIndex) {\n leftBorderCells.push(cells[i]);\n }\n }\n return leftBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.getRightBorderCellsOnSelection = function () {\n var cells = this.selection.getSelectedCells();\n var rightBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if ((cells[i].columnIndex + cells[i].cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex) {\n rightBorderCells.push(cells[i]);\n }\n }\n return rightBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.getBottomBorderCellsOnSelection = function () {\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var endCell = endPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var bottomBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === endCell.ownerRow) {\n bottomBorderCells.push(cells[i]);\n }\n }\n return bottomBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.clearAllBorderValues = function (borders) {\n var border = this.clearBorder();\n borders.bottom.copyFormat(border);\n borders.left.copyFormat(border);\n borders.right.copyFormat(border);\n borders.top.copyFormat(border);\n borders.vertical.copyFormat(border);\n borders.horizontal.copyFormat(border);\n };\n Editor.prototype.clearBorder = function () {\n var border = new WBorder();\n border.lineStyle = 'Cleared';\n return border;\n };\n /**\n * @private\n */\n Editor.prototype.getAdjacentCellToApplyBottomBorder = function () {\n var cells = [];\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var nextRowIndex = endCell.ownerRow.rowIndex + endCell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n if (endCell.cellFormat.columnSpan > 1) {\n for (var i = endCell.columnIndex; i < endCell.columnIndex + endCell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n cells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, endCell);\n if (!this.selection.isEmpty) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n var nextCellColIndex = nextRow.childWidgets[i].columnIndex;\n if (nextCellColIndex >= startCell.columnIndex && nextCellColIndex <= endCell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getAdjacentBottomBorderOnEmptyCells = function (nextRow, cell, isSingleCell) {\n var cells = [];\n if (cell.cellFormat.columnSpan > 1) {\n for (var i = cell.columnIndex; i < cell.columnIndex + cell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n if (this.selection.isEmpty || isSingleCell) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n if (nextRow.childWidgets[i].columnIndex === cell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n return cells;\n };\n /**\n * @private\n */\n Editor.prototype.getAdjacentCellToApplyRightBorder = function () {\n var cells = [];\n var startPosIn = this.selection.start;\n var endPosIn = this.selection.end;\n if (!this.selection.isForward) {\n startPosIn = this.selection.end;\n endPosIn = this.selection.start;\n }\n var table = startPosIn.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n var startCell = startPosIn.paragraph.associatedCell;\n var endCell = endPosIn.paragraph.associatedCell;\n if (this.selection.isEmpty) {\n var selectedCell = startPosIn.paragraph.associatedCell;\n cells = this.getSelectedCellsNextWidgets(selectedCell, table);\n }\n else {\n // tslint:disable-next-line:max-line-length\n var selectedCells = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCells.length; i++) {\n var cell = selectedCells[i];\n cells = cells.concat(this.getSelectedCellsNextWidgets(cell, table));\n }\n }\n return cells;\n };\n Editor.prototype.getSelectedCellsNextWidgets = function (selectedCell, table) {\n var cells = [];\n if (selectedCell.nextWidget) {\n cells.push(selectedCell.nextWidget);\n }\n if (selectedCell.cellFormat.rowSpan > 1) {\n var nextRowIndex = selectedCell.ownerRow.rowIndex + selectedCell.cellFormat.rowSpan;\n for (var i = selectedCell.ownerRow.rowIndex + 1; i < nextRowIndex; i++) {\n var nextRow = table.childWidgets[i];\n if (nextRow) {\n for (var j = 0; j < nextRow.childWidgets.length; j++) {\n if (nextRow.childWidgets[j].columnIndex ===\n selectedCell.nextWidget.columnIndex) {\n cells.push(nextRow.childWidgets[j]);\n }\n }\n }\n }\n }\n return cells;\n };\n /**\n * @private\n */\n Editor.prototype.getBorder = function (borderColor, lineWidth, borderStyle) {\n var border = new WBorder();\n border.color = borderColor || '#000000';\n border.lineWidth = lineWidth || 1;\n border.lineStyle = borderStyle || 'Single';\n return border;\n };\n /**\n * Applies borders\n * @param {WBorders} sourceBorders\n * @param {WBorders} applyBorders\n * @private\n */\n Editor.prototype.applyBordersInternal = function (sourceBorders, applyBorders) {\n if (!isNullOrUndefined(sourceBorders) && !isNullOrUndefined(sourceBorders)) {\n if (!isNullOrUndefined(sourceBorders.top)) {\n this.applyBorder(sourceBorders.top, applyBorders.top);\n }\n if (!isNullOrUndefined(sourceBorders.bottom)) {\n this.applyBorder(sourceBorders.bottom, applyBorders.bottom);\n }\n if (!isNullOrUndefined(sourceBorders.left)) {\n this.applyBorder(sourceBorders.left, applyBorders.left);\n }\n if (!isNullOrUndefined(sourceBorders.right)) {\n this.applyBorder(sourceBorders.right, applyBorders.right);\n }\n if (!isNullOrUndefined(sourceBorders.horizontal)) {\n this.applyBorder(sourceBorders.horizontal, applyBorders.horizontal);\n }\n if (!isNullOrUndefined(sourceBorders.vertical)) {\n this.applyBorder(sourceBorders.vertical, applyBorders.vertical);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalUp)) {\n this.applyBorder(sourceBorders.diagonalUp, applyBorders.diagonalUp);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalDown)) {\n this.applyBorder(sourceBorders.diagonalDown, applyBorders.diagonalDown);\n }\n }\n };\n /**\n * Apply shading to table\n * @param {WShading} sourceShading\n * @param {WShading} applyShading\n * @private\n */\n Editor.prototype.applyShading = function (sourceShading, applyShading) {\n if (!isNullOrUndefined(applyShading) && !isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(applyShading.backgroundColor)\n && sourceShading.backgroundColor !== applyShading.backgroundColor) {\n sourceShading.backgroundColor = applyShading.backgroundColor;\n }\n if (!isNullOrUndefined(applyShading.foregroundColor)\n && sourceShading.foregroundColor !== applyShading.foregroundColor) {\n sourceShading.foregroundColor = applyShading.foregroundColor;\n }\n if (!isNullOrUndefined(applyShading.textureStyle)\n && sourceShading.textureStyle !== applyShading.textureStyle) {\n sourceShading.textureStyle = applyShading.textureStyle;\n }\n }\n };\n Editor.prototype.applyBorder = function (sourceBorder, applyBorder) {\n if (!isNullOrUndefined(sourceBorder) && !isNullOrUndefined(applyBorder)) {\n if (!isNullOrUndefined(applyBorder.color)\n && sourceBorder.color !== applyBorder.color) {\n sourceBorder.color = applyBorder.color;\n }\n if (!isNullOrUndefined(applyBorder.lineStyle)\n && sourceBorder.lineStyle !== applyBorder.lineStyle) {\n sourceBorder.lineStyle = applyBorder.lineStyle;\n }\n if (!isNullOrUndefined(applyBorder.lineWidth)\n && sourceBorder.lineWidth !== applyBorder.lineWidth) {\n sourceBorder.lineWidth = applyBorder.lineWidth;\n }\n if (!isNullOrUndefined(applyBorder.shadow)\n && sourceBorder.shadow !== applyBorder.shadow) {\n sourceBorder.shadow = applyBorder.shadow;\n }\n if (!isNullOrUndefined(applyBorder.space)\n && sourceBorder.space !== applyBorder.space) {\n sourceBorder.space = applyBorder.space;\n }\n }\n };\n /**\n * Apply Table Format changes\n * @param {Selection} selection\n * @param {WTableFormat} format\n * @private\n */\n Editor.prototype.onTableFormat = function (format) {\n if (!isNullOrUndefined(this.selection.tableFormat)) {\n this.viewer.owner.isShiftingEnabled = true;\n this.editorHistory.initializeHistory('TableFormat');\n var table = this.selection.start.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n this.applyTableFormat(table, undefined, format);\n this.reLayout(this.selection, false);\n }\n };\n /**\n * @private\n */\n Editor.prototype.applyTableFormat = function (table, property, value) {\n this.applyTablePropertyValue(this.viewer.selection, undefined, value, table);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyTablePropertyValue = function (selection, property, value, table) {\n var sourceFormat = table.tableFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedTableProperties(sourceFormat, property, value);\n }\n if (value instanceof WTableFormat) {\n if (isNullOrUndefined(property)) {\n this.handleTableFormat(sourceFormat, value);\n }\n return;\n }\n if (property === 'preferredWidth') {\n sourceFormat.preferredWidth = value;\n }\n else if (property === 'leftIndent') {\n sourceFormat.leftIndent = value;\n }\n else if (property === 'tableAlignment') {\n sourceFormat.tableAlignment = value;\n }\n else if (property === 'cellSpacing') {\n sourceFormat.cellSpacing = value;\n }\n else if (property === 'leftMargin') {\n sourceFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sourceFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sourceFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sourceFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidthType') {\n sourceFormat.preferredWidthType = value;\n }\n if (property === 'shading') {\n sourceFormat.shading = value;\n }\n else if (property === 'borders') {\n sourceFormat.borders = value;\n }\n // if (!isNullOrUndefined(table)) {\n // this.layoutItemBlock(table, true);\n // }\n };\n Editor.prototype.handleTableFormat = function (tableFormat, applyFormat) {\n if (this.isBordersAndShadingDialog || this.editorHistory.isUndoing\n || this.editorHistory.isRedoing) {\n if (!isNullOrUndefined(tableFormat.borders)) {\n this.applyBordersInternal(tableFormat.borders, applyFormat.borders);\n }\n if (!isNullOrUndefined(tableFormat.shading)) {\n this.applyShading(tableFormat.shading, applyFormat.shading);\n }\n }\n if (!this.isBordersAndShadingDialog) {\n if (applyFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== tableFormat.preferredWidth) {\n tableFormat.preferredWidth = applyFormat.preferredWidth;\n }\n if (applyFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== tableFormat.preferredWidthType) {\n tableFormat.preferredWidthType = applyFormat.preferredWidthType;\n }\n if (applyFormat.hasValue('tableAlignment') && applyFormat.tableAlignment !== tableFormat.tableAlignment) {\n tableFormat.tableAlignment = applyFormat.tableAlignment;\n }\n if (applyFormat.hasValue('leftIndent') && applyFormat.leftIndent !== tableFormat.leftIndent) {\n tableFormat.leftIndent = applyFormat.leftIndent;\n }\n }\n this.updateGridForTableDialog(tableFormat.ownerBase, false);\n };\n Editor.prototype.updateGridForTableDialog = function (table, shiftNextItem) {\n if (table.tableHolder) {\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n this.viewer.layout.reLayoutTable(table);\n };\n /**\n * Applies Row Format Changes\n * @param {Selection} selection\n * @param {WRowFormat} format\n * @param {WRow} row\n * @private\n */\n Editor.prototype.onRowFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('RowFormat');\n this.viewer.owner.isShiftingEnabled = true;\n var rowStartPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var rowEndPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = rowStartPos.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n this.applyRowFormat(rowStartPos.paragraph.associatedCell.ownerRow, rowStartPos, rowEndPos, undefined, format);\n this.reLayout(this.selection, false);\n };\n Editor.prototype.applyRowFormat = function (row, start, end, property, value) {\n this.applyRowPropertyValue(this.viewer.selection, property, value, row);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyRowFormat(newRow, start, end, property, value);\n }\n };\n Editor.prototype.applyRowPropertyValue = function (selection, property, value, row) {\n var applyFormat = row.rowFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedRowProperties(applyFormat, property, value);\n }\n if (value instanceof WRowFormat) {\n if (isNullOrUndefined(property)) {\n this.handleRowFormat(value, applyFormat);\n }\n return;\n }\n if (property === 'heightType') {\n applyFormat.heightType = value;\n }\n else if (property === 'height') {\n applyFormat.height = value;\n }\n else if (property === 'isHeader') {\n applyFormat.isHeader = value;\n }\n else if (property === 'allowBreakAcrossPages') {\n applyFormat.allowBreakAcrossPages = value;\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n this.layoutItemBlock(row.ownerTable, true);\n }\n };\n Editor.prototype.handleRowFormat = function (format, applyFormat) {\n if (format.hasValue('allowBreakAcrossPages') && format.allowBreakAcrossPages !== applyFormat.allowBreakAcrossPages) {\n applyFormat.allowBreakAcrossPages = format.allowBreakAcrossPages;\n }\n if (format.hasValue('isHeader') && format.isHeader !== applyFormat.isHeader) {\n applyFormat.isHeader = format.isHeader;\n }\n if (format.hasValue('heightType') && format.heightType !== applyFormat.heightType) {\n applyFormat.heightType = format.heightType;\n }\n if (format.hasValue('height') && format.height !== applyFormat.height) {\n applyFormat.height = format.height;\n }\n this.updateGridForTableDialog(applyFormat.ownerBase.ownerTable, true);\n };\n /**\n * Applies Cell Format changes\n * @param {Selection} selection\n * @param {WCellFormat} format\n * @param {WCell} cell\n * @private\n */\n Editor.prototype.onCellFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('CellFormat');\n this.updateFormatForCell(this.selection, undefined, format);\n this.reLayout(this.selection, false);\n };\n /**\n * @private\n */\n Editor.prototype.updateCellMargins = function (selection, value) {\n var cellStartPosition = selection.start;\n var cellEndPosition = selection.end;\n if (!selection.isForward) {\n cellStartPosition = selection.end;\n cellEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, cellStartPosition);\n // tslint:disable-next-line:max-line-length\n this.viewer.owner.cellOptionsDialogModule.applyCellmarginsValue(cellStartPosition.paragraph.associatedCell.ownerRow, cellStartPosition, cellEndPosition, value);\n };\n /**\n * @private\n */\n Editor.prototype.updateFormatForCell = function (selection, property, value) {\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n }\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var cells;\n var table = startCell.ownerTable.combineWidget(this.viewer);\n var appliedFormat;\n for (var k = startCell.columnIndex; k <= endCell.columnIndex; k++) {\n cells = this.getSelectedCellInColumn(startCell.ownerTable, startCell.ownerRow.rowIndex, k, endCell.ownerRow.rowIndex);\n for (var i = 0; i < cells.length; i++) {\n appliedFormat = this.applyCellPropertyValue(this.viewer.selection, property, value, cells[i].cellFormat);\n }\n }\n this.updateGridForTableDialog(table, false);\n };\n /**\n * @private\n */\n Editor.prototype.getSelectedCellInColumn = function (table, rowStartIndex, columnIndex, rowEndIndex) {\n var cells = [];\n for (var i = rowStartIndex; i <= rowEndIndex; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n if (row.childWidgets[j].columnIndex === columnIndex) {\n cells.push(row.childWidgets[j]);\n }\n }\n }\n return cells;\n };\n Editor.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var k = 0; k < table.childWidgets.length; k++) {\n var row = table.childWidgets[k];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n /**\n * @private\n */\n Editor.prototype.getTableWidth = function (table) {\n if (table.tableFormat.preferredWidth !== 0 || table.tableFormat.preferredWidthType === 'Percent') {\n if (table.tableFormat.preferredWidthType === 'Auto' || table.tableFormat.preferredWidthType === 'Point') {\n return table.tableFormat.preferredWidth;\n }\n else {\n if (table.tableFormat.preferredWidth === 0) {\n return 0;\n }\n else {\n return HelperMethods.convertPixelToPoint(this.viewer.clientArea.width) / 100 * table.tableFormat.preferredWidth;\n }\n }\n }\n return HelperMethods.convertPixelToPoint(this.viewer.layout.getTableWidth(table));\n };\n Editor.prototype.applyCellPropertyValue = function (selection, property, value, applyFormat) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedCellProperties(applyFormat, property, value);\n }\n if (value instanceof WCellFormat) {\n if (isNullOrUndefined(property)) {\n this.handleCellFormat(value, applyFormat);\n }\n return value;\n }\n if (property === 'leftMargin') {\n applyFormat.leftMargin = value;\n }\n else if (property === 'topMargin') {\n applyFormat.topMargin = value;\n }\n else if (property === 'rightMargin') {\n applyFormat.rightMargin = value;\n }\n else if (property === 'bottomMargin') {\n applyFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidth') {\n applyFormat.preferredWidth = value;\n applyFormat.cellWidth = value;\n }\n else if (property === 'cellWidth') {\n applyFormat.cellWidth = value;\n }\n else if (property === 'columnSpan') {\n applyFormat.columnSpan = value;\n }\n else if (property === 'rowSpan') {\n applyFormat.rowSpan = value;\n }\n else if (property === 'preferredWidthType') {\n applyFormat.preferredWidthType = value;\n }\n else if (property === 'verticalAlignment') {\n applyFormat.verticalAlignment = value;\n }\n if (property === 'shading') {\n applyFormat.shading = value;\n }\n else if (property === 'borders') {\n applyFormat.borders = value;\n }\n return undefined;\n };\n Editor.prototype.handleCellFormat = function (cellFormat, applyFormat) {\n if (!isNullOrUndefined(cellFormat) && !isNullOrUndefined(applyFormat)) {\n if (this.isBordersAndShadingDialog) {\n if (!isNullOrUndefined(cellFormat.borders)) {\n this.applyBordersInternal(applyFormat.borders, cellFormat.borders);\n }\n if (!isNullOrUndefined(cellFormat.shading)) {\n this.applyShading(applyFormat.shading, cellFormat.shading);\n }\n // this.layoutRow((applyFormat.ownerBase as TableCellWidget).ownerRow, this.viewer, false);\n }\n else {\n if (cellFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== cellFormat.preferredWidth) {\n applyFormat.preferredWidth = cellFormat.preferredWidth;\n }\n if (cellFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== cellFormat.preferredWidthType) {\n applyFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n if (cellFormat.hasValue('verticalAlignment') && applyFormat.verticalAlignment !== cellFormat.verticalAlignment) {\n applyFormat.verticalAlignment = cellFormat.verticalAlignment;\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.destroy = function () {\n this.viewer = undefined;\n this.nodes = [];\n };\n Editor.prototype.isTocField = function (element) {\n if (element instanceof FieldElementBox) {\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') === 0) {\n return true;\n }\n }\n return false;\n };\n /**\n * Updates the table of contents.\n * @private\n */\n Editor.prototype.updateToc = function (tocField) {\n if (isNullOrUndefined(tocField)) {\n tocField = this.selection.getTocFieldInternal();\n }\n if (!this.isTocField(tocField)) {\n return;\n }\n // Decode field code to get parameters\n var code = this.selection.getFieldCode(tocField);\n if (code.toLocaleLowerCase().indexOf('toc') !== -1) {\n this.insertTableOfContents(this.validateTocSettings(this.getTocSettings(code, tocField)));\n }\n };\n Editor.prototype.getTocSettings = function (code, tocField) {\n var tocSettings = {};\n tocSettings.includePageNumber = true;\n tocSettings.rightAlign = true;\n // Decode field code to get parameters\n if (code.toLowerCase() === 'toc \\\\mergeformat') {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 3;\n }\n else {\n var swtiches = code.split('\\\\');\n for (var i = 0; i < swtiches.length; i++) {\n var swtch = swtiches[i];\n if (swtch.length === 0) {\n continue;\n }\n switch (swtch[0]) {\n case 'o':\n if (!isNullOrUndefined(swtch.match(/\\d+/g))) {\n var levels = swtch.match(/\\d+/g).map(Number);\n tocSettings.startLevel = levels[0];\n tocSettings.endLevel = levels[1];\n }\n else {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 9;\n }\n break;\n case 'h':\n tocSettings.includeHyperlink = true;\n break;\n case 'n':\n tocSettings.includePageNumber = false;\n break;\n case 'p':\n tocSettings.rightAlign = false;\n break;\n case 'u':\n tocSettings.includeOutlineLevels = true;\n break;\n case 't':\n this.decodeTSwitch(tocSettings, swtch);\n break;\n }\n }\n }\n //assigns tab leader.\n var tabs = tocField.paragraph.paragraphFormat.getUpdatedTabs();\n if (tabs.length > 0) {\n tocSettings.tabLeader = tabs[tabs.length - 1].tabLeader;\n }\n if (tocSettings.rightAlign && isNullOrUndefined(tocSettings.tabLeader)) {\n tocSettings.tabLeader = 'Dot';\n }\n return tocSettings;\n };\n Editor.prototype.decodeTSwitch = function (tocSettings, tSwitch) {\n tocSettings.levelSettings = {};\n tSwitch = tSwitch.replace('t', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.trim();\n var levels = tSwitch.split(',');\n for (var index = 0; index < levels.length; index++) {\n tocSettings.levelSettings[levels[index]] = parseInt(levels[index + 1], 10);\n index++;\n }\n };\n /**\n * Inserts, modifies or updates the table of contents based on given settings.\n * @param {TableOfContentsSettings} tableOfContentsSettings\n */\n Editor.prototype.insertTableOfContents = function (tableOfContentsSettings) {\n this.isInsertingTOC = true;\n this.initComplexHistory('TOC');\n if (isNullOrUndefined(tableOfContentsSettings)) {\n //Initializes with default value.\n tableOfContentsSettings = {};\n tableOfContentsSettings.startLevel = 1;\n tableOfContentsSettings.endLevel = 3;\n tableOfContentsSettings.includeHyperlink = true;\n tableOfContentsSettings.includeOutlineLevels = true;\n tableOfContentsSettings.includePageNumber = true;\n tableOfContentsSettings.rightAlign = true;\n tableOfContentsSettings.tabLeader = 'Dot';\n }\n var tocField = undefined;\n var code = undefined;\n if (this.selection.contextType === 'TableOfContents') {\n tocField = this.selection.getTocFieldInternal();\n }\n if (tocField instanceof FieldElementBox) {\n this.selection.start.setPositionForSelection(tocField.line, tocField, 0, this.selection.start.location);\n this.selection.end.setPositionForSelection(tocField.fieldEnd.line, tocField.fieldEnd, 2, this.selection.end.location);\n this.onDelete();\n }\n // Build TOC field code based on parameter\n code = this.constructTocFieldCode(tableOfContentsSettings);\n var isStartParagraph = this.selection.start.isAtParagraphStart;\n var blockInfo = this.getParagraphInfo(this.selection.start);\n var initialStart = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n // Build TOC fields\n // tslint:disable-next-line:max-line-length\n var widgets = this.buildToc(this.validateTocSettings(tableOfContentsSettings), code, true, isStartParagraph);\n if (widgets.length > 0) {\n var tocLastPara = new ParagraphWidget();\n var tocLastLine = new LineWidget(tocLastPara);\n tocLastPara.childWidgets.push(tocLastLine);\n var index = 0;\n if (!isStartParagraph) {\n index = 1;\n }\n var line = widgets[index].childWidgets[0];\n var fieldBegin = line.children[0];\n this.appendEndField(fieldBegin, tocLastLine);\n widgets.push(tocLastPara);\n this.appendEmptyPara(widgets);\n }\n this.setPositionForCurrentIndex(this.selection.start, initialStart);\n this.selection.end.setPositionInternal(this.selection.start);\n this.pasteContentsInternal(widgets);\n this.isInsertingTOC = false;\n this.updatePageRef();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n };\n Editor.prototype.appendEmptyPara = function (widgets) {\n var emptyPara = new ParagraphWidget();\n var emptyLine = new LineWidget(emptyPara);\n emptyPara.childWidgets.push(emptyLine);\n widgets.push(emptyPara);\n };\n Editor.prototype.constructTocFieldCode = function (tocSettings) {\n var tocFieldCode = 'TOC';\n //appends styles level\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(tocSettings.startLevel) && tocSettings.startLevel !== 0 && !isNullOrUndefined(tocSettings.endLevel) && tocSettings.endLevel !== 0) {\n tocFieldCode = tocFieldCode + ' \\\\o \"' + tocSettings.startLevel + '-' + tocSettings.endLevel + '\"';\n }\n if (tocSettings.includePageNumber && !tocSettings.rightAlign) {\n tocFieldCode = tocFieldCode + ' \\\\p \" \"';\n }\n if (!tocSettings.includePageNumber) {\n tocFieldCode = tocFieldCode + ' \\\\n';\n }\n if (tocSettings.includeHyperlink) {\n tocFieldCode = tocFieldCode + ' \\\\h \\\\z';\n }\n if (tocSettings.includeOutlineLevels) {\n tocFieldCode = tocFieldCode + ' \\\\u';\n }\n var tSwitch = this.constructTSwitch(tocSettings);\n if (tSwitch.length > 6) {\n tocFieldCode = tocFieldCode + tSwitch;\n }\n return tocFieldCode;\n };\n Editor.prototype.constructTSwitch = function (tocSettings) {\n var tSwitch = '';\n var prefix = ' \\\\t ';\n if (!isNullOrUndefined(tocSettings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(tocSettings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n tSwitch = tSwitch + key + ',' + tocSettings.levelSettings[key].toString() + ',';\n }\n }\n tSwitch = tSwitch.slice(0, -1);\n tSwitch = prefix + '\"' + tSwitch + '\"';\n return tSwitch;\n };\n /**\n * Appends the end filed to the given line.\n */\n Editor.prototype.appendEndField = function (fieldBegin, lineWidget) {\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldSeparator = fieldBegin.fieldSeparator;\n fieldBegin.fieldSeparator.fieldEnd = fieldEnd;\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldBegin.fieldEnd = fieldEnd;\n fieldEnd.line = lineWidget;\n lineWidget.children.push(fieldEnd);\n };\n Editor.prototype.validateTocSettings = function (tocSettings) {\n if (isNullOrUndefined(tocSettings.startLevel) || tocSettings.startLevel < 1) {\n tocSettings.startLevel = 1;\n }\n if (isNullOrUndefined(tocSettings.endLevel) || tocSettings.endLevel < tocSettings.endLevel) {\n tocSettings.endLevel = tocSettings.startLevel > 3 ? tocSettings.startLevel : 3;\n }\n if (isNullOrUndefined(tocSettings.includeHyperlink)) {\n tocSettings.includeHyperlink = false;\n }\n if (isNullOrUndefined(tocSettings.includePageNumber)) {\n tocSettings.includePageNumber = false;\n }\n if (isNullOrUndefined(tocSettings.rightAlign)) {\n tocSettings.rightAlign = false;\n }\n if (isNullOrUndefined(tocSettings.levelSettings)) {\n tocSettings.levelSettings = {};\n }\n return tocSettings;\n };\n /**\n * Builds the TOC\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.buildToc = function (tocSettings, fieldCode, isFirstPara, isStartParagraph) {\n var tocDomBody = this.viewer.pages[0].bodyWidgets[0];\n var widgets = [];\n this.createHeadingLevels(tocSettings);\n if (tocSettings.includeOutlineLevels) {\n this.createOutlineLevels(tocSettings);\n }\n var widget = tocDomBody.childWidgets[0];\n while (widget !== undefined) {\n // tslint:disable-next-line:max-line-length\n if (widget instanceof ParagraphWidget && (this.isHeadingStyle(widget) || (tocSettings.includeOutlineLevels && this.isOutlineLevelStyle(widget)))) {\n var bookmarkName = this.insertTocBookmark(widget);\n // tslint:disable-next-line:max-line-length\n this.createTOCWidgets(widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph);\n isFirstPara = false;\n }\n widget = this.selection.getNextParagraphBlock(widget);\n }\n this.tocStyles = {};\n return widgets;\n };\n Editor.prototype.createOutlineLevels = function (settings) {\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var levelStyle = 'Level' + i.toString();\n if (isNullOrUndefined(this.tocStyles[levelStyle])) {\n this.tocStyles[levelStyle] = i;\n }\n }\n };\n /**\n * Creates TOC heading styles\n * @param start - lower heading level\n * @param end - higher heading level\n */\n Editor.prototype.createHeadingLevels = function (settings) {\n var normalStyle = 'Normal';\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var headingStyle = 'Heading ' + i.toString();\n if (isNullOrUndefined(this.tocStyles[headingStyle])) {\n this.tocStyles[headingStyle] = i;\n }\n }\n if (!isNullOrUndefined(settings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(settings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n this.tocStyles[key] = settings.levelSettings[key];\n }\n }\n };\n /**\n * Checks the current style is heading style.\n */\n Editor.prototype.isHeadingStyle = function (para) {\n var style = para.paragraphFormat.baseStyle;\n if (style !== undefined) {\n return isNullOrUndefined(this.tocStyles[style.name]) ? false : true;\n }\n return false;\n };\n Editor.prototype.isOutlineLevelStyle = function (para) {\n var styleName = para.paragraphFormat.outlineLevel;\n return isNullOrUndefined(this.tocStyles[styleName]) ? false : true;\n };\n /**\n * Creates TOC field element.\n */\n Editor.prototype.createTocFieldElement = function (lineWidget, fieldCode) {\n //begin\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.hasFieldEnd = true;\n fieldBegin.line = lineWidget;\n lineWidget.children.push(fieldBegin);\n //format toc\n var textElement = new TextElementBox();\n textElement.text = fieldCode;\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n //field separator\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n fieldSeparator.line = lineWidget;\n lineWidget.children.push(fieldSeparator);\n return fieldBegin;\n };\n /**\n * Updates TOC para\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.createTOCWidgets = function (widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph) {\n var fieldBegin = undefined;\n var tocPara = undefined;\n var tocLine = undefined;\n // tslint:disable-next-line:max-line-length\n if (widgets.length === 1 && widgets[0].childWidgets[0].children.length === 3 && !isNullOrUndefined(isFirstPara) && !isFirstPara) {\n tocLine = widgets[0].childWidgets[0];\n }\n else {\n tocPara = new ParagraphWidget();\n var styleName = undefined;\n //Adds toc syles into paragraph\n var headingStyleName = widget.paragraphFormat.baseStyle.name;\n if (tocSettings.includeOutlineLevels && isNullOrUndefined(this.tocStyles[headingStyleName])) {\n styleName = widget.paragraphFormat.outlineLevel;\n }\n else {\n styleName = headingStyleName;\n }\n var tocStyleName = 'Toc' + this.tocStyles[styleName];\n var paraStyle = this.viewer.styles.findByName(tocStyleName, 'Paragraph');\n if (isNullOrUndefined(paraStyle)) {\n // tslint:disable-next-line:max-line-length\n this.viewer.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.viewer.preDefinedStyles.get(tocStyleName)), this.viewer.styles);\n paraStyle = this.viewer.styles.findByName(tocStyleName, 'Paragraph');\n }\n tocPara.paragraphFormat.ApplyStyle(paraStyle);\n //Creates right tab for page number.\n if (tocSettings.rightAlign && tocSettings.includePageNumber) {\n var tabStop = new WTabStop();\n tabStop.position = HelperMethods.convertPixelToPoint(this.viewer.clientArea.width);\n tabStop.tabLeader = tocSettings.tabLeader;\n tabStop.deletePosition = 0;\n tabStop.tabJustification = 'Right';\n tocPara.paragraphFormat.tabs.push(tabStop);\n }\n tocLine = new LineWidget(tocPara);\n tocPara.childWidgets.push(tocLine);\n }\n //creates toc field element if it is insert\n if ((isFirstPara !== undefined) && isFirstPara) {\n if (!isNullOrUndefined(isStartParagraph) && !isStartParagraph) {\n this.appendEmptyPara(widgets);\n }\n this.createTocFieldElement(tocLine, fieldCode);\n }\n var text = '';\n for (var lineIndex = 0; lineIndex < widget.childWidgets.length; lineIndex++) {\n var lineWidget = widget.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var element = lineWidget.children[elementIndex];\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var temp = element.text;\n var tabChar = '\\t';\n if (temp.indexOf(tabChar) !== -1) {\n temp = temp.replace(new RegExp(tabChar, 'g'), ' ');\n }\n text = text + temp;\n }\n }\n }\n if (text !== '') {\n // inserts hyperlink\n if (tocSettings.includeHyperlink && (bookmarkName !== undefined)) {\n fieldBegin = this.insertTocHyperlink(tocLine, bookmarkName, text);\n }\n else {\n var span = new TextElementBox();\n span.text = text;\n span.line = tocLine;\n tocLine.children.push(span);\n }\n //inserts page number\n if (tocSettings.includePageNumber && (bookmarkName !== undefined)) {\n if (tocSettings.rightAlign) {\n var tabText = new TabElementBox();\n tabText.text = '\\t';\n tabText.line = tocLine;\n tocLine.children.push(tabText);\n }\n var pageField = this.insertTocPageNumber(bookmarkName, tocLine, tocSettings.rightAlign, widget);\n this.appendEndField(pageField, tocLine);\n }\n if (tocSettings.includeHyperlink && fieldBegin !== undefined) {\n this.appendEndField(fieldBegin, tocLine);\n }\n }\n if (!isNullOrUndefined(tocPara) && (text !== '' || isFirstPara)) {\n widgets.push(tocPara);\n }\n };\n /**\n * Inserts toc hyperlink.\n */\n Editor.prototype.insertTocHyperlink = function (lineWidget, bookmarkName, text) {\n var fieldCode = ' HYPERLINK \\\\l \\\"' + bookmarkName + '\\\" ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode);\n //text element.\n var span = new TextElementBox();\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n return fieldBegin;\n };\n /**\n * Inserts toc page number.\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.insertTocPageNumber = function (bookMarkname, lineWidget, isRightAlign, widget) {\n var fieldCode = ' PAGEREF' + bookMarkname + ' \\\\h ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode);\n var text = (this.viewer.pages.indexOf(widget.bodyWidget.page) + 1).toString();\n //text element.\n var span = new FieldTextElementBox();\n span.fieldBegin = fieldBegin;\n if (!isRightAlign) {\n text = ' ' + text;\n }\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n this.pageRefFields[bookMarkname] = span;\n return fieldBegin;\n };\n Editor.prototype.updatePageRef = function () {\n for (var _i = 0, _a = Object.keys(this.pageRefFields); _i < _a.length; _i++) {\n var key = _a[_i];\n var bookmark = this.viewer.bookmarks.get(key);\n var pageRef = (bookmark.paragraph.bodyWidget.page.index + 1).toString();\n var span = this.pageRefFields[key];\n if (pageRef !== span.text) {\n span.text = pageRef;\n var paragraph = span.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(span.line);\n var elementIndex = span.line.children.indexOf(span);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n };\n /**\n * Inserts toc bookmark.\n */\n Editor.prototype.insertTocBookmark = function (widget) {\n var bookmarkName = undefined;\n var lineLength = widget.childWidgets.length;\n if (lineLength > 0) {\n var startLine = widget.childWidgets[0];\n var endLine = widget.childWidgets[lineLength - 1];\n if ((startLine !== undefined) && (endLine !== undefined)) {\n var startElement = startLine.children[0];\n //Returns the bookmark if already present for paragraph.\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(startElement) && startElement instanceof BookmarkElementBox && startElement.bookmarkType === 0 && (startElement.name.toLowerCase().match('^_toc'))) {\n return startElement.name;\n }\n var endElement = endLine.children[endLine.children.length - 1];\n if ((startElement !== undefined) && (endElement !== undefined)) {\n this.selection.start.setPositionForSelection(startLine, startElement, 0, this.selection.start.location);\n this.selection.end.setPositionForSelection(endLine, endElement, endElement.length, this.selection.end.location);\n bookmarkName = this.generateBookmarkName();\n this.insertBookmark(bookmarkName);\n }\n }\n }\n return bookmarkName;\n };\n /**\n * Generates bookmark id.\n */\n Editor.prototype.generateBookmarkName = function () {\n this.tocBookmarkId++;\n var count = 10 - this.tocBookmarkId.toString().length;\n var formatString = '';\n while (count - 1 > 0) {\n formatString = '0' + formatString;\n count--;\n }\n var bookmarkName = '_Toc' + formatString + this.tocBookmarkId;\n return bookmarkName;\n };\n /**\n * Change cell content alignment\n * @private\n */\n Editor.prototype.onCellContentAlignment = function (verticalAlignment, textAlignment) {\n this.owner.isShiftingEnabled = true;\n var selection = this.owner.selection;\n if (selection.isEmpty && selection.start.paragraph.isInsideTable) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(selection, 'MultiSelection');\n }\n //Selecting the table cell to update the all the paragraph format.\n selection.selectTableCell();\n this.initHistory('CellContentVerticalAlignment');\n var cellFormat = selection.start.paragraph.associatedCell.cellFormat;\n this.applyCellPropertyValue(selection, 'verticalAlignment', verticalAlignment, cellFormat);\n this.reLayout(selection, false);\n this.initHistory('TextAlignment');\n this.updateParagraphFormat('textAlignment', textAlignment, false);\n this.reLayout(this.owner.selection, false);\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n }\n else {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(selection, 'MultiSelection');\n }\n if (!isNullOrUndefined(selection.getTable(selection.start, selection.end))) {\n //Table cell vertical alignment.\n this.updateSelectionTableFormat(selection, 'CellContentVerticalAlignment', verticalAlignment);\n this.reLayout(this.owner.selection, false);\n this.initHistory('TextAlignment');\n //Paragraph text alignment.\n this.updateSelectionParagraphFormatting('textAlignment', textAlignment, false);\n this.reLayout(selection, false);\n }\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateComplexHistory();\n }\n }\n };\n return Editor;\n}());\nexport { Editor };\n","import { WTableHolder } from '../viewer/page';\n/**\n * @private\n */\nvar ModifiedLevel = /** @class */ (function () {\n function ModifiedLevel(owner, modified) {\n this.ownerListLevelIn = undefined;\n this.modifiedListLevelIn = undefined;\n this.ownerListLevel = owner;\n this.modifiedListLevel = modified;\n }\n Object.defineProperty(ModifiedLevel.prototype, \"ownerListLevel\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerListLevelIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.ownerListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedLevel.prototype, \"modifiedListLevel\", {\n /**\n * @private\n */\n get: function () {\n return this.modifiedListLevelIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.modifiedListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ModifiedLevel.prototype.destroy = function () {\n this.ownerListLevel = undefined;\n this.modifiedListLevel = undefined;\n };\n return ModifiedLevel;\n}());\nexport { ModifiedLevel };\n/**\n * @private\n */\nvar ModifiedParagraphFormat = /** @class */ (function () {\n function ModifiedParagraphFormat(ownerFormat, modifiedFormat) {\n this.ownerFormatIn = undefined;\n this.modifiedFormatIn = undefined;\n this.ownerFormat = ownerFormat;\n this.modifiedFormat = modifiedFormat;\n }\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"ownerFormat\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.ownerFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"modifiedFormat\", {\n /**\n * hidden\n */\n get: function () {\n return this.modifiedFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.modifiedFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ModifiedParagraphFormat.prototype.destroy = function () {\n this.ownerFormat = undefined;\n this.modifiedFormat.destroy();\n this.modifiedFormat = undefined;\n };\n return ModifiedParagraphFormat;\n}());\nexport { ModifiedParagraphFormat };\n/**\n * @private\n */\nvar RowHistoryFormat = /** @class */ (function () {\n function RowHistoryFormat(startingPoint, rowFormat) {\n this.startingPoint = startingPoint;\n this.rowFormat = rowFormat;\n this.rowHeightType = rowFormat.heightType;\n }\n RowHistoryFormat.prototype.revertChanges = function (isRedo, owner) {\n //backup current format values.\n var currentRowHeightType = this.rowFormat.heightType;\n //Restore old values.\n owner.editorModule.tableResize.updateRowHeight(this.rowFormat.ownerBase, isRedo ? this.displacement : (-this.displacement));\n owner.viewer.layout.reLayoutTable(this.rowFormat.ownerBase.ownerTable);\n if (this.rowFormat.heightType !== this.rowHeightType) {\n this.rowFormat.heightType = this.rowHeightType;\n }\n //backup the current format values for redo.\n this.rowHeightType = currentRowHeightType;\n };\n return RowHistoryFormat;\n}());\nexport { RowHistoryFormat };\n/**\n * @private\n */\nvar TableHistoryInfo = /** @class */ (function () {\n function TableHistoryInfo(table, owner) {\n this.tableHolder = new WTableHolder();\n this.tableFormat = new TableFormatHistoryInfo();\n this.rows = [];\n this.owner = owner;\n this.copyProperties(table);\n }\n TableHistoryInfo.prototype.copyProperties = function (table) {\n if (table.tableHolder) {\n this.tableHolder = table.tableHolder.clone();\n }\n if (table.tableFormat) {\n this.tableFormat.leftIndent = table.tableFormat.leftIndent;\n this.tableFormat.preferredWidth = table.tableFormat.preferredWidth;\n this.tableFormat.preferredWidthType = table.tableFormat.preferredWidthType;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowFormat = new RowFormatHistoryInfo();\n rowFormat.gridBefore = row.rowFormat.gridBefore;\n rowFormat.gridBeforeWidth = row.rowFormat.gridBeforeWidth;\n rowFormat.gridBeforeWidthType = row.rowFormat.gridBeforeWidthType;\n rowFormat.gridAfter = row.rowFormat.gridAfter;\n rowFormat.gridAfterWidth = row.rowFormat.gridAfterWidth;\n rowFormat.gridAfterWidthType = row.rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellFormat = new CellFormatHistoryInfo();\n cellFormat.columnIndex = cell.columnIndex;\n cellFormat.columnSpan = cell.cellFormat.columnSpan;\n cellFormat.preferredWidth = cell.cellFormat.preferredWidth;\n cellFormat.preferredWidthType = cell.cellFormat.preferredWidthType;\n rowFormat.cells.push(cellFormat);\n }\n this.rows.push(rowFormat);\n }\n this.tableHierarchicalIndex = this.owner.editorModule.getHierarchicalIndex(table, '0');\n };\n TableHistoryInfo.prototype.destroy = function () {\n this.tableHierarchicalIndex = undefined;\n if (this.tableHolder) {\n this.tableHolder.destroy();\n this.tableHolder = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat = null;\n }\n if (this.rows) {\n this.rows = [];\n this.rows = undefined;\n }\n };\n return TableHistoryInfo;\n}());\nexport { TableHistoryInfo };\n/**\n * @private\n */\nvar TableFormatHistoryInfo = /** @class */ (function () {\n function TableFormatHistoryInfo() {\n /* tslint:disable:no-empty */\n }\n return TableFormatHistoryInfo;\n}());\nexport { TableFormatHistoryInfo };\n/**\n * @private\n */\nvar RowFormatHistoryInfo = /** @class */ (function () {\n function RowFormatHistoryInfo() {\n this.cells = [];\n }\n return RowFormatHistoryInfo;\n}());\nexport { RowFormatHistoryInfo };\n/**\n * @private\n */\nvar CellFormatHistoryInfo = /** @class */ (function () {\n function CellFormatHistoryInfo() {\n /* tslint:disable:no-empty */\n }\n return CellFormatHistoryInfo;\n}());\nexport { CellFormatHistoryInfo };\n/**\n * @private\n */\nvar CellHistoryFormat = /** @class */ (function () {\n function CellHistoryFormat(point) {\n this.startingPoint = point; // starting point preserved to calculate the displacement on after cell resizing finished.\n }\n return CellHistoryFormat;\n}());\nexport { CellHistoryFormat };\n","import { WParagraphFormat } from '../format/paragraph-format';\nimport { WSectionFormat } from '../format/section-format';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WListFormat } from '../format/list-format';\nimport { ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { BlockWidget, ParagraphWidget, BodyWidget, TableCellWidget, TableWidget, TableRowWidget, HeaderFooterWidget } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { TextPosition, ImageFormat } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ElementBox } from '../viewer/page';\nimport { WTableFormat, WRowFormat, WCellFormat, WParagraphStyle } from '../format/index';\n/**\n * @private\n */\nvar BaseHistoryInfo = /** @class */ (function () {\n function BaseHistoryInfo(node) {\n this.ownerIn = node;\n this.viewer = node.viewer;\n this.modifiedPropertiesIn = [];\n this.modifiedNodeLength = [];\n this.removedNodesIn = [];\n }\n Object.defineProperty(BaseHistoryInfo.prototype, \"owner\", {\n //Properties\n //gets owner control\n /**\n * gets the owner control\n * @private\n */\n get: function () { return this.ownerIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"editorHistory\", {\n /**\n * gets or sets action\n * @private\n */\n get: function () {\n return this.owner.editorHistory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"action\", {\n /**\n * gets or sets action\n * @private\n */\n get: function () { return this.actionIn; },\n set: function (value) { this.actionIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"modifiedProperties\", {\n /**\n * gets modified properties\n * @returns Object\n * @private\n */\n get: function () { return this.modifiedPropertiesIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"removedNodes\", {\n /**\n * @private\n */\n get: function () {\n return this.removedNodesIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionStart\", {\n /**\n * Gets or Sets the selection start\n * @private\n */\n //gets or sets selection start\n get: function () { return this.selectionStartIn; },\n set: function (value) { this.selectionStartIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionEnd\", {\n /**\n * Gets or Sets the selection end\n * @private\n */\n get: function () { return this.selectionEndIn; },\n set: function (value) { this.selectionEndIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"insertPosition\", {\n /**\n * Gets or sets the insert position\n * @private\n */\n get: function () { return this.insertPositionIn; },\n set: function (value) { this.insertPositionIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"endPosition\", {\n /**\n * Gets or sets end position\n * @private\n */\n get: function () { return this.endPositionIn; },\n set: function (value) { this.endPositionIn = value; },\n enumerable: true,\n configurable: true\n });\n /**\n * Update the selection\n * @param selection\n * @private\n */\n BaseHistoryInfo.prototype.updateSelection = function () {\n var blockInfo = this.owner.editorModule.getParagraphInfo(this.owner.selection.start);\n this.selectionStart = this.owner.editorModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.owner.editorModule.getParagraphInfo(this.owner.selection.end);\n this.selectionEnd = this.owner.editorModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n };\n BaseHistoryInfo.prototype.setBookmarkInfo = function (bookmark) {\n this.removedNodes.push({ 'bookmark': bookmark, 'startIndex': bookmark.indexInOwner, 'endIndex': bookmark.reference.indexInOwner });\n };\n BaseHistoryInfo.prototype.revertBookmark = function () {\n var bookmarkInfo = this.removedNodes[0];\n var bookmark = bookmarkInfo.bookmark;\n if (this.editorHistory.isUndoing) {\n this.viewer.bookmarks.add(bookmark.name, bookmark);\n bookmark.line.children.splice(bookmarkInfo.startIndex, 0, bookmark);\n bookmark.reference.line.children.splice(bookmarkInfo.endIndex, 0, bookmark.reference);\n this.editorHistory.recordChanges(this);\n }\n else {\n this.owner.editorModule.deleteBookmarkInternal(bookmark);\n this.editorHistory.undoStack.push(this);\n }\n };\n /**\n * Reverts this instance\n * @private\n */\n // tslint:disable: max-func-body-length\n BaseHistoryInfo.prototype.revert = function () {\n if (this.action === 'DeleteBookmark') {\n this.revertBookmark();\n return;\n }\n this.owner.isShiftingEnabled = true;\n var selectionStartTextPosition = undefined;\n var selectionEndTextPosition = undefined;\n var start = this.selectionStart;\n var end = this.selectionEnd;\n var isForwardSelection = TextPosition.isForwardSelection(start, end);\n if (this.modifiedProperties.length > 0 || this.action === 'Selection' || this.action === 'ClearCharacterFormat'\n || this.action === 'ClearParagraphFormat') {\n selectionStartTextPosition = this.getTextPosition(start);\n selectionEndTextPosition = this.getTextPosition(end);\n this.revertModifiedProperties(selectionStartTextPosition, selectionEndTextPosition);\n }\n else {\n var deletedNodes = this.removedNodes;\n this.removedNodesIn = [];\n var isForward = TextPosition.isForwardSelection(this.insertPosition, this.endPosition);\n var insertTextPosition = this.getTextPosition(isForward ? this.insertPosition : this.endPosition);\n var endTextPosition = this.getTextPosition(isForward ? this.endPosition : this.insertPosition);\n if (insertTextPosition.isAtSamePosition(endTextPosition)) {\n this.owner.selection.selectContent(insertTextPosition, true);\n }\n else {\n this.owner.selection.selectPosition(insertTextPosition, endTextPosition);\n }\n if (this.action === 'InsertHyperlink' && this.editorHistory.isRedoing) {\n var fieldBegin = this.owner.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n var offset = (fieldBegin.line).getOffset(fieldBegin, 0);\n insertTextPosition.setPositionParagraph(fieldBegin.line, offset);\n this.owner.selection.start.setPositionInternal(insertTextPosition);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n endTextPosition.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n }\n }\n this.editorHistory.currentBaseHistoryInfo = this;\n this.selectionStart = this.insertPosition;\n this.insertPosition = undefined;\n this.selectionEnd = this.endPosition;\n this.endPosition = undefined;\n var isRemoveContent = false;\n if (!insertTextPosition.isAtSamePosition(endTextPosition)) {\n isRemoveContent = this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'ClearCells'\n || this.action === 'DeleteCells';\n if (!(isRemoveContent) && this.action !== 'MergeCells' && this.action !== 'InsertRowAbove'\n && this.action !== 'InsertRowBelow' && this.action !== 'InsertColumnLeft'\n && this.action !== 'InsertColumnRight' && this.action !== 'Borders'\n && this.action !== 'DeleteTable' && this.action !== 'DeleteColumn' && this.action !== 'DeleteRow') {\n this.owner.selection.end.setPositionInternal(endTextPosition);\n if (!this.owner.selection.isEmpty) {\n if (this.editorHistory.isRedoing) {\n this.owner.editorModule.removeSelectedContents(this.owner.selection);\n }\n else {\n this.owner.editorModule.deleteSelectedContents(this.owner.selection, true);\n }\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak' && this.viewer.blockToShift) {\n this.viewer.layout.shiftLayoutedItems();\n }\n }\n }\n }\n var isRedoAction = this.editorHistory.isRedoing && !isRemoveContent;\n this.revertModifiedNodes(deletedNodes, isRedoAction, isForwardSelection ? start : end, start === end);\n if (isRemoveContent) {\n this.removeContent(insertTextPosition, endTextPosition);\n }\n //this.owner.editorModule.reLayout(this.viewer.selection);\n }\n var isSelectionChanged = false;\n if ((this.editorHistory.isUndoing && isNullOrUndefined(this.editorHistory.currentHistoryInfo)) ||\n ((this.action === 'InsertRowAbove' || this.action === 'Borders' || this.action === 'InsertRowBelow'\n || this.action === 'InsertColumnLeft'\n || this.action === 'InsertColumnRight') && (this.editorHistory.isRedoing\n || this.editorHistory.currentHistoryInfo.action === 'Paste'))) {\n selectionStartTextPosition = this.getTextPosition(start);\n selectionEndTextPosition = this.getTextPosition(end);\n this.owner.selection.selectRange(selectionStartTextPosition, selectionEndTextPosition);\n isSelectionChanged = true;\n }\n // Updates insert position of history info instance.\n this.insertPosition = start;\n this.endPosition = end;\n this.owner.editorModule.reLayout(this.owner.selection, this.owner.selection.isEmpty);\n if (isSelectionChanged) {\n this.viewer.scrollToPosition(this.owner.selection.start, this.owner.selection.end);\n }\n this.highlightListText();\n };\n BaseHistoryInfo.prototype.highlightListText = function () {\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n if (this.action === 'ListCharacterFormat' || (this.editorHistory.currentHistoryInfo.action === 'ListSelect' && this.action === 'ListFormat')) {\n var selectionStartTextPosition = this.getTextPosition(this.selectionStart);\n var widget = selectionStartTextPosition.currentWidget;\n this.viewer.selection.highlightListText(widget);\n }\n }\n };\n BaseHistoryInfo.prototype.removeContent = function (insertTextPosition, endTextPosition) {\n //If the base parent of the insert text position and end text position is null \n //then the paragraphs already removed.\n //Example scenario: In table editing that is delete cells operation \n // we will backed up the entire table ad it will be replaced on undo operation.\n //At that time if the positions are in table \n //which is already replaced in undo (revert modified nodes method) then the base parent of the paragraph will be null.\n //So again, selecting the content and deleting is unnecessary\n // and it will cause improper position updates and null reference exceptions. \n if ((!isNullOrUndefined(insertTextPosition.paragraph.containerWidget) &&\n insertTextPosition.paragraph.containerWidget instanceof BodyWidget &&\n (!isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && endTextPosition.paragraph.containerWidget instanceof BodyWidget))\n || (!isNullOrUndefined(insertTextPosition.paragraph.containerWidget)\n && !isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && insertTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && endTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && !isNullOrUndefined(insertTextPosition.paragraph.bodyWidget))) {\n //Removes if any empty paragraph is added while delete.\n this.owner.selection.selectRange(insertTextPosition, endTextPosition);\n var isDelete = (this.action === 'BackSpace') ? true : false;\n this.owner.editorModule.deleteSelectedContents(this.owner.selection, isDelete);\n }\n };\n BaseHistoryInfo.prototype.revertModifiedProperties = function (start, end) {\n if (this.action === 'CellFormat' || this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.owner.isShiftingEnabled = false;\n }\n this.owner.selection.selectRange(start, end);\n if (this.action === 'RowResizing' || this.action === 'CellResizing') {\n this.revertResizing();\n }\n else if (this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.revertTableDialogProperties(this.action);\n }\n else if (this.action !== 'Selection') {\n this.revertProperties();\n }\n };\n // Redoes the Action\n BaseHistoryInfo.prototype.redoAction = function () {\n var editor = this.owner.editorModule;\n switch (this.action) {\n case 'BackSpace':\n editor.singleBackspace(this.owner.selection, true);\n break;\n case 'Delete':\n editor.singleDelete(this.owner.selection, true);\n break;\n case 'DeleteTable':\n editor.deleteTable();\n break;\n case 'DeleteColumn':\n editor.deleteColumn();\n break;\n case 'DeleteRow':\n editor.deleteRow();\n break;\n case 'MergeCells':\n editor.mergeSelectedCellsInTable();\n break;\n case 'InsertRowAbove':\n editor.insertRow(true);\n break;\n case 'InsertRowBelow':\n editor.insertRow(false);\n break;\n case 'InsertColumnLeft':\n editor.insertColumn(true);\n break;\n case 'InsertColumnRight':\n editor.insertColumn(true);\n break;\n case 'SectionBreak':\n editor.insertSection(this.owner.selection, true);\n break;\n }\n };\n /**\n * Revert the modified nodes\n * @param {WNode[]} deletedNodes\n * @param {boolean} isRedoAction\n * @param {string} start\n * @param {boolean} isEmptySelection\n */\n BaseHistoryInfo.prototype.revertModifiedNodes = function (deletedNodes, isRedoAction, start, isEmptySelection) {\n if (isRedoAction && (this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'DeleteTable'\n || this.action === 'DeleteColumn' || this.action === 'DeleteRow' || this.action === 'InsertRowAbove' ||\n this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft' || this.action === 'InsertColumnRight'\n || this.action === 'MergeCells' || this.action === 'SectionBreak')) {\n this.redoAction();\n if (this.action === 'SectionBreak') {\n return;\n }\n }\n if (deletedNodes.length > 0) {\n if ((this.editorHistory.isUndoing && (this.action === 'DeleteCells' || this.action === 'DeleteColumn'\n || this.action === 'DeleteRow' || this.action === 'MergeCells'))\n || (this.action === 'InsertRowAbove' || this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft'\n || this.action === 'ClearCells' || this.action === 'InsertColumnRight' || this.action === 'Borders')) {\n var insertIndex = this.selectionStart;\n var block = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n var lastNode = deletedNodes[deletedNodes.length - 1];\n if ((block instanceof TableWidget || block.previousRenderedWidget instanceof TableWidget || block.isInsideTable)\n && lastNode instanceof TableWidget) {\n if (block instanceof ParagraphWidget && !block.isInsideTable) {\n block = block.previousRenderedWidget;\n }\n block = block.combineWidget(this.viewer);\n this.owner.editorModule.insertTableInternal(block, lastNode, false);\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n }\n else if (lastNode instanceof TableWidget) {\n this.owner.editorModule.insertBlock(lastNode);\n }\n }\n else {\n var initialStart = start;\n var block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n // initialStart = blockObj.position;\n if (deletedNodes.length > 0 && (this.action === 'BackSpace' && isEmptySelection\n || (!(block instanceof TableWidget) && !(block instanceof HeaderFooterWidget)))) {\n var lastNode = deletedNodes[0];\n if (this.action === 'SectionBreak' && lastNode instanceof BodyWidget ||\n !isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak') {\n lastNode = deletedNodes[1];\n }\n if (lastNode instanceof ParagraphWidget && this.owner.selection.start.offset > 0) {\n this.owner.editorModule.insertNewParagraphWidget(lastNode, true);\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n if (isNullOrUndefined(block)) {\n // tslint:disable-next-line:max-line-length\n var nextBlock = this.viewer.selection.getNextParagraphBlock(lastNode.getSplitWidgets().pop());\n this.owner.selection.getNextRenderedBlock(lastNode);\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selection.selectParagraph(lastNode, true);\n }\n }\n }\n if (lastNode instanceof TableWidget && this.owner.selection.start.offset > 0) {\n var firstBlock = deletedNodes[deletedNodes.length - 1];\n if (firstBlock instanceof ParagraphWidget) {\n this.owner.editorModule.insertNewParagraphWidget(firstBlock, true);\n deletedNodes.splice(deletedNodes.indexOf(firstBlock), 1);\n if (isNullOrUndefined(block)) {\n // tslint:disable-next-line:max-line-length\n var nextBlock = this.viewer.selection.getNextParagraphBlock(firstBlock.getSplitWidgets().pop());\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selection.selectParagraph(firstBlock, true);\n }\n }\n }\n }\n }\n if (deletedNodes.length > 0) {\n var firstNode = deletedNodes[deletedNodes.length - 1];\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n if (firstNode instanceof TableWidget) {\n this.owner.editorModule.insertTableInternal(block, firstNode, true);\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n this.insertPosition = start;\n var nextWidget = firstNode.getSplitWidgets().pop();\n if (nextWidget.nextRenderedWidget instanceof TableWidget) {\n block = nextWidget.nextRenderedWidget;\n }\n else {\n initialStart = start;\n block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n }\n }\n }\n //Checks if first node is paragraph and current insert position is paragraph end.\n // tslint:disable-next-line:max-line-length\n if (firstNode instanceof ParagraphWidget && this.owner.selection.start.offset > 0\n && this.owner.selection.start.offset === this.owner.selection.getLineLength(this.owner.selection.start.paragraph.lastChild)) {\n var editor = this.owner.editorModule;\n editor.insertNewParagraphWidget(firstNode, false);\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n //Removes the intermediate empty paragraph instance.\n if (this.action !== 'Paste') {\n editor.removeBlock(this.owner.selection.start.paragraph);\n }\n // tslint:disable-next-line:max-line-length\n var paragraph = this.viewer.selection.getNextParagraphBlock(firstNode.getSplitWidgets().pop());\n if (!isNullOrUndefined(paragraph)) {\n this.owner.selection.selectParagraph(paragraph, true);\n }\n }\n else if (deletedNodes[0] instanceof TableWidget && deletedNodes.length !== 1) {\n var nextNode = deletedNodes[1];\n if (nextNode instanceof ParagraphWidget && nextNode.isEmpty()) {\n deletedNodes.splice(deletedNodes.indexOf(nextNode), 1);\n }\n }\n }\n if (deletedNodes.length > 0) {\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n }\n this.insertRemovedNodes(deletedNodes, block);\n }\n }\n }\n };\n BaseHistoryInfo.prototype.insertRemovedNodes = function (deletedNodes, block) {\n for (var i = deletedNodes.length - 1, index = 0; i > -1; i--) {\n var node = deletedNodes[i];\n if (node instanceof ElementBox) {\n this.owner.editorModule.insertInlineInSelection(this.owner.selection, node);\n }\n else if (node instanceof BlockWidget) {\n if (node instanceof TableRowWidget) {\n if (block instanceof TableWidget) {\n block.childWidgets.splice(index, 0, node);\n this.owner.editorModule.updateNextBlocksIndex(node, true);\n if (i === 0 || !(deletedNodes[i - 1] instanceof TableRowWidget)) {\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n }\n }\n }\n else if (block instanceof TableWidget) {\n this.owner.editorModule.insertBlockTable(this.owner.selection, node, block);\n }\n else {\n this.owner.editorModule.insertBlock(node);\n }\n }\n else if (node instanceof BodyWidget) {\n this.owner.editorModule.insertSection(this.owner.selection, false);\n }\n }\n deletedNodes = [];\n };\n BaseHistoryInfo.prototype.revertResizing = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n if (this.action === 'RowResizing') {\n if (this.modifiedProperties[0] instanceof RowHistoryFormat) {\n // tslint:disable-next-line:max-line-length\n this.modifiedProperties[0].revertChanges(this.editorHistory.isRedoing, this.owner);\n }\n }\n else {\n if (this.modifiedProperties[0] instanceof TableHistoryInfo) {\n //selected cell resizing the condition checks done based on the selected widgets only. so need to highlight the selection.\n if (this.owner.selection.selectedWidgets.length === 0) {\n this.owner.selection.highlightSelection(true);\n }\n var prevTableHistoryInfo = this.modifiedProperties[0];\n var position = prevTableHistoryInfo.tableHierarchicalIndex;\n var block = this.owner.editorModule.getBlock({ index: position }).node;\n if (block instanceof TableWidget) {\n var tableResize = this.owner.editorModule.tableResize;\n this.owner.editor.setOffsetValue(this.owner.selection);\n block = block.combineWidget(this.owner.viewer);\n tableResize.currentResizingTable = block;\n this.modifiedProperties.splice(0, 1);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var tableHistoryInfoCurrent = new TableHistoryInfo(block, this.owner);\n this.modifiedProperties.splice(0, 0, tableHistoryInfoCurrent);\n this.owner.isLayoutEnabled = false;\n tableResize.applyProperties(tableResize.currentResizingTable, prevTableHistoryInfo);\n tableResize.currentResizingTable.isGridUpdated = true;\n this.owner.isLayoutEnabled = true;\n tableResize.updateGridValue(tableResize.currentResizingTable, false);\n prevTableHistoryInfo.destroy();\n prevTableHistoryInfo = undefined;\n }\n }\n }\n }\n };\n BaseHistoryInfo.prototype.revertTableDialogProperties = function (action) {\n this.owner.isShiftingEnabled = false;\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n if (action === 'CellOptions') {\n var selection = this.owner.selection;\n var cellFormat = this.modifiedProperties[0];\n this.owner.editorModule.updateCellMargins(selection, cellFormat);\n }\n else if (action === 'TableOptions') {\n this.owner.tableOptionsDialogModule.applyTableOptionsHelper(this.modifiedProperties[0]);\n }\n this.currentPropertyIndex = 0;\n this.owner.isShiftingEnabled = true;\n };\n BaseHistoryInfo.prototype.getTextPosition = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var blockInfo = this.owner.editorModule.getParagraph({ index: hierarchicalIndex });\n var lineInfo = this.owner.editorModule.getLineInfo(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n return textPosition;\n };\n /**\n * Add modified properties for section format\n * @param {WSectionFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForSection = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var modifiedProperties = this.modifiedProperties;\n var previousFormat = (this.currentPropertyIndex < modifiedProperties.length ?\n modifiedProperties[this.currentPropertyIndex] : modifiedProperties[modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n else {\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(format);\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WSectionFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n /**\n * Add the modified properties for character format\n * @param {WCharacterFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length \n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n var skipRemove = false;\n if (format.ownerBase instanceof ElementBox) {\n var prevLength = this.modifiedNodeLength[this.currentPropertyIndex];\n if (format.ownerBase.length < prevLength) {\n skipRemove = true;\n this.modifiedNodeLength[this.currentPropertyIndex] = format.ownerBase.length;\n this.modifiedNodeLength.splice(this.currentPropertyIndex + 1, 0, prevLength - format.ownerBase.length);\n //Adds a copy of character format at next position for splitted inline.\n var nextFormat = new WCharacterFormat(undefined);\n nextFormat.copyFormat(previousFormat);\n this.modifiedProperties.splice(this.currentPropertyIndex + 1, 0, nextFormat);\n }\n }\n if (this.action === 'ClearCharacterFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n if (!skipRemove) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n }\n else {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WCharacterFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n if (format.ownerBase instanceof ElementBox) {\n this.modifiedNodeLength.push(format.ownerBase.length);\n }\n else {\n this.modifiedNodeLength.push(0);\n }\n }\n return value;\n };\n /**\n * Add the modified properties for paragraph format\n * @param {WParagraphFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForParagraphFormat = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.action === 'ClearParagraphFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'listFormat') {\n value = new WParagraphFormat(undefined);\n value.copyFormat(previousFormat);\n previousFormat.listFormat = new WListFormat();\n previousFormat.listFormat.copyFormat(format.listFormat);\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'styleName') {\n if (!isNullOrUndefined(previousFormat.baseStyle)) {\n value = new WParagraphStyle();\n value.copyStyle(previousFormat.baseStyle);\n this.currentPropertyIndex++;\n return value;\n }\n else {\n return undefined;\n }\n }\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WParagraphFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForContinueNumbering = function (paragraphFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = paragraphFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = paragraphFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n var currentFormat = new WParagraphFormat();\n currentFormat.copyFormat(paragraphFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * @param listFormat\n * @param value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForRestartNumbering = function (listFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var listId = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = listId;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = listFormat.listId;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = listFormat.listId;\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n this.modifiedProperties.push(listFormat.listId);\n }\n return value;\n };\n /**\n * Add modified properties for list format\n * @param {WListLevel} listLevel\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForList = function (listLevel) {\n var value;\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousLevel = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousLevel;\n previousLevel = new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel));\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = previousLevel;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = previousLevel;\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel)));\n value = listLevel;\n }\n return value;\n };\n /**\n * Revert the properties\n * @param {SelectionRange} selectionRange\n */\n BaseHistoryInfo.prototype.revertProperties = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n var property = this.getProperty();\n this.viewer.owner.editorModule.setOffsetValue(this.viewer.selection);\n if (this.action === 'ClearCharacterFormat' || this.modifiedProperties[0] instanceof WCharacterFormat) {\n if (this.action === 'ListCharacterFormat') {\n this.owner.editorModule.updateListCharacterFormat(this.viewer.selection, property, undefined);\n return;\n }\n this.owner.editorModule.updateSelectionCharacterFormatting(property, undefined, false);\n }\n else if (this.action === 'ClearParagraphFormat' || this.modifiedProperties[0] instanceof WParagraphFormat) {\n if (this.action === 'ContinueNumbering') {\n // tslint:disable-next-line:max-line-length\n this.owner.editorModule.revertContinueNumbering(this.owner.selection, this.modifiedProperties[0]);\n return;\n }\n if (this.action === 'StyleName' && this.modifiedProperties[0] instanceof WParagraphFormat) {\n // tslint:disable-next-line:max-line-length\n this.owner.editorModule.updateSelectionParagraphFormatting(property, this.modifiedProperties[0].baseStyle, false);\n return;\n }\n this.owner.editorModule.updateSelectionParagraphFormatting(property, undefined, false);\n }\n else if (this.modifiedProperties[0] instanceof WSectionFormat) {\n this.owner.editorModule.updateSectionFormat(property, undefined);\n }\n else if (this.action === 'RestartNumbering') {\n this.owner.editorModule.restartListAtInternal(this.owner.selection, this.modifiedProperties[0]);\n return;\n }\n else if (this.modifiedProperties[0] instanceof ImageFormat) {\n this.owner.selection.updateImageSize(this.modifiedProperties[0]);\n }\n else if (this.modifiedProperties[0] instanceof ModifiedLevel) {\n var modified = new Dictionary();\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var modifiedLevel = this.modifiedProperties[i];\n // modified.modifiedLevels.add(modifiedLevel.ownerListLevel.levelNumber, modifiedLevel);\n modified.add(i, modifiedLevel);\n }\n this.editorHistory.updateListChanges(modified);\n modified.destroy();\n modified = undefined;\n }\n else if (this.modifiedProperties[0] instanceof WTableFormat) {\n this.owner.editorModule.updateTableFormat(this.owner.selection, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WCellFormat) {\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.updateCellFormat(this.owner.selection, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WRowFormat) {\n this.owner.editorModule.updateRowFormat(this.owner.selection, property, undefined);\n }\n this.currentPropertyIndex = 0;\n if (this.action === 'ClearCharacterFormat' || this.action === 'ClearParagraphFormat') {\n this.owner.editorModule.getOffsetValue(this.viewer.selection);\n }\n };\n /**\n * Add modified properties for cell options dialog\n * @param {WCellFormat} format\n * @param {WTable} table\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedCellOptions = function (applyFormat, format, table) {\n var currentFormat;\n if (isNullOrUndefined(applyFormat.bottomMargin) && isNullOrUndefined(applyFormat.topMargin)\n && isNullOrUndefined(applyFormat.rightMargin) && isNullOrUndefined(applyFormat.leftMargin)) {\n currentFormat = this.copyCellOptions(table.tableFormat);\n }\n else {\n currentFormat = this.copyCellOptions(applyFormat);\n }\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n format = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = this.copyCellOptions(applyFormat);\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = this.copyCellOptions(applyFormat);\n }\n this.currentPropertyIndex++;\n return format;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n return format;\n };\n BaseHistoryInfo.prototype.copyCellOptions = function (format) {\n var cellFormat = new WCellFormat();\n cellFormat.topMargin = format.topMargin;\n cellFormat.rightMargin = format.rightMargin;\n cellFormat.bottomMargin = format.bottomMargin;\n cellFormat.leftMargin = format.leftMargin;\n return cellFormat;\n };\n /**\n * Add modified properties for cell options dialog\n * @param {WTableFormat} format\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedTableOptions = function (format) {\n var currentFormat = this.copyTableOptions(format);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length \n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1, currentFormat);\n }\n else {\n this.modifiedProperties.splice(this.modifiedProperties.length - 1, 1, currentFormat);\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n };\n BaseHistoryInfo.prototype.copyTableOptions = function (format) {\n var tableFormat = new WTableFormat();\n tableFormat.topMargin = format.topMargin;\n tableFormat.rightMargin = format.rightMargin;\n tableFormat.bottomMargin = format.bottomMargin;\n tableFormat.leftMargin = format.leftMargin;\n tableFormat.cellSpacing = format.cellSpacing;\n return tableFormat;\n };\n BaseHistoryInfo.prototype.getProperty = function () {\n switch (this.action) {\n case 'Bold':\n return 'bold';\n case 'Italic':\n return 'italic';\n case 'FontColor':\n return 'fontColor';\n case 'FontFamily':\n return 'fontFamily';\n case 'FontSize':\n return 'fontSize';\n case 'HighlightColor':\n return 'highlightColor';\n case 'BaselineAlignment':\n return 'baselineAlignment';\n case 'Strikethrough':\n return 'strikethrough';\n case 'Underline':\n return 'underline';\n case 'AfterSpacing':\n return 'afterSpacing';\n case 'BeforeSpacing':\n return 'beforeSpacing';\n case 'LeftIndent':\n return 'leftIndent';\n case 'RightIndent':\n return 'rightIndent';\n case 'FirstLineIndent':\n return 'firstLineIndent';\n case 'LineSpacingType':\n return 'lineSpacingType';\n case 'LineSpacing':\n return 'lineSpacing';\n case 'TextAlignment':\n return 'textAlignment';\n case 'ListFormat':\n return 'listFormat';\n case 'PageHeight':\n return 'pageHeight';\n case 'PageWidth':\n return 'pageWidth';\n case 'TableAlignment':\n return 'tableAlignment';\n case 'TableLeftIndent':\n return 'leftIndent';\n case 'DefaultCellSpacing':\n return 'cellSpacing';\n case 'LeftMargin':\n case 'CellLeftMargin':\n case 'DefaultCellLeftMargin':\n return 'leftMargin';\n case 'RightMargin':\n case 'CellRightMargin':\n case 'DefaultCellRightMargin':\n return 'rightMargin';\n case 'TopMargin':\n case 'CellTopMargin':\n case 'DefaultCellTopMargin':\n return 'topMargin';\n case 'BottomMargin':\n case 'CellBottomMargin':\n case 'DefaultCellBottomMargin':\n return 'bottomMargin';\n case 'CellContentVerticalAlignment':\n return 'verticalAlignment';\n case 'RowHeight':\n return 'height';\n case 'RowHeightType':\n return 'heightType';\n case 'RowHeader':\n return 'isHeader';\n case 'AllowBreakAcrossPages':\n return 'allowBreakAcrossPages';\n case 'TablePreferredWidth':\n case 'CellPreferredWidth':\n return 'preferredWidth';\n case 'TablePreferredWidthType':\n case 'CellPreferredWidthType':\n return 'preferredWidthType';\n case 'Shading':\n return 'shading';\n case 'StyleName':\n return 'styleName';\n }\n return undefined;\n };\n BaseHistoryInfo.prototype.getCharacterPropertyValue = function (property, modifiedProperty) {\n var value;\n if (property === 'bold') {\n value = modifiedProperty.bold;\n }\n else if (property === 'italic') {\n value = modifiedProperty.italic;\n }\n else if (property === 'fontColor') {\n value = modifiedProperty.fontColor;\n }\n else if (property === 'fontFamily') {\n value = modifiedProperty.fontFamily;\n }\n else if (property === 'fontSize') {\n value = modifiedProperty.fontSize;\n }\n else if (property === 'highlightColor') {\n value = modifiedProperty.highlightColor;\n }\n else if (property === 'baselineAlignment') {\n value = modifiedProperty.baselineAlignment;\n }\n else if (property === 'strikethrough') {\n value = modifiedProperty.strikethrough;\n }\n else if (property === 'underline') {\n value = modifiedProperty.underline;\n }\n return value;\n };\n /**\n * Add modified properties for table format\n * @param {WTableFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedTableProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousTableFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousTableFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousTableFormat.shading;\n }\n else {\n value = previousTableFormat.getPropertyValue(property);\n }\n previousTableFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WTableFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * Add modified properties for row format\n * @param {WRowFormat} rowFormat\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedRowProperties = function (rowFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = rowFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = rowFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(rowFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WRowFormat();\n currentFormat.copyFormat(rowFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * Add modified properties for cell format\n * @param {WCellFormat} cellFormat\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedCellProperties = function (cellFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = cellFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = cellFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousFormat.shading;\n }\n else {\n value = previousFormat.getPropertyValue(property);\n }\n previousFormat.copyFormat(cellFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WCellFormat();\n currentFormat.copyFormat(cellFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.destroy = function () {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.insertPosition = undefined;\n this.endPosition = undefined;\n if (!isNullOrUndefined(this.modifiedNodeLength)) {\n this.modifiedNodeLength = [];\n this.modifiedNodeLength = undefined;\n }\n if (!isNullOrUndefined(this.modifiedProperties)) {\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var property = this.modifiedProperties[i];\n if (property instanceof WCharacterFormat) {\n property.destroy();\n }\n else if (property instanceof WParagraphFormat) {\n property.destroy();\n }\n else if (property instanceof WSectionFormat) {\n property.destroy();\n }\n else if (property instanceof ModifiedLevel) {\n property.destroy();\n }\n this.modifiedProperties.splice(this.modifiedProperties.indexOf(property), 1);\n i--;\n }\n this.modifiedPropertiesIn = undefined;\n }\n if (!isNullOrUndefined(this.removedNodes)) {\n for (var i = 0; i < this.removedNodes.length; i++) {\n var node = this.removedNodes[i];\n if (node instanceof ParagraphWidget) {\n node.destroyInternal(this.viewer);\n }\n else if (node instanceof ElementBox) {\n node.destroy();\n }\n this.removedNodes.splice(this.removedNodes.indexOf(node), 1);\n i--;\n }\n this.removedNodesIn = undefined;\n }\n this.ownerIn = undefined;\n };\n return BaseHistoryInfo;\n}());\nexport { BaseHistoryInfo };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { PageLayoutViewer } from '../index';\nimport { Dictionary } from '../../base/dictionary';\nimport { ImageFormat } from '../selection/selection-helper';\nimport { Point, HelperMethods } from './editor-helper';\nimport { BaseHistoryInfo } from '../editor-history/base-history-info';\n/**\n * Image resizer implementation.\n */\nvar ImageResizer = /** @class */ (function () {\n /**\n * Constructor for image resizer module.\n * @param {DocumentEditor} node\n * @param {LayoutViewer} viewer\n * @private\n */\n function ImageResizer(node, viewer) {\n /**\n * @private\n */\n this.resizeContainerDiv = undefined;\n /**\n * @private\n */\n this.topLeftRect = undefined;\n /**\n * @private\n */\n this.topMiddleRect = undefined;\n /**\n * @private\n */\n this.topRightRect = undefined;\n /**\n * @private\n */\n this.bottomLeftRect = undefined;\n /**\n * @private\n */\n this.bottomMiddleRect = undefined;\n /**\n * @private\n */\n this.bottomRightRect = undefined;\n /**\n * @private\n */\n this.leftMiddleRect = undefined;\n /**\n * @private\n */\n this.rightMiddleRect = undefined;\n /**\n * @private\n */\n this.topLeftRectParent = undefined;\n /**\n * @private\n */\n this.topMiddleRectParent = undefined;\n /**\n * @private\n */\n this.topRightRectParent = undefined;\n /**\n * @private\n */\n this.bottomLeftRectParent = undefined;\n /**\n * @private\n */\n this.bottomMiddleRectParent = undefined;\n /**\n * @private\n */\n this.bottomRightRectParent = undefined;\n /**\n * @private\n */\n this.leftMiddleRectParent = undefined;\n /**\n * @private\n */\n this.rightMiddleRectParent = undefined;\n /**\n * @private\n */\n this.resizeMarkSizeIn = 7;\n /**\n * @private\n */\n this.selectedImageWidget = undefined;\n /**\n * @private\n */\n this.baseHistoryInfo = undefined;\n /**\n * @private\n */\n this.isImageResizing = false;\n /**\n * @private\n */\n this.isImageResizerVisible = false;\n /**\n * @private\n */\n this.isImageMoveToNextPage = false;\n /**\n * @private\n */\n this.selectedResizeElement = undefined;\n /**\n * @private\n */\n this.topValue = undefined;\n /**\n * @private\n */\n this.leftValue = undefined;\n this.owner = node;\n this.selectedImageWidget = new Dictionary();\n this.viewer = viewer;\n this.imageResizerPoints = new ImageResizingPoints();\n if (isNullOrUndefined(this.imageResizerDiv) && this.viewer && this.viewer.pageContainer) {\n this.initializeImageResizer();\n }\n }\n Object.defineProperty(ImageResizer.prototype, \"currentImageElementBox\", {\n /**\n * Gets or Sets the current image element box.\n * @private\n */\n get: function () {\n return this.currentImageElementBoxIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.currentImageElementBoxIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"resizeMarkSize\", {\n /**\n * Gets or Sets the resize mark size.\n * @private\n */\n get: function () {\n return this.resizeMarkSizeIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.resizeMarkSizeIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets module name.\n */\n ImageResizer.prototype.getModuleName = function () {\n return 'ImageResizer';\n };\n //Image Resizing Methods\n /**\n * Sets image resizer position.\n * @param {number} x - Specifies for image resizer left value.\n * @param {number} y - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @private\n */\n ImageResizer.prototype.setImageResizerPositions = function (x, y, width, height) {\n this.imageResizerDivElement.style.top = y.toString() + 'px';\n this.imageResizerDivElement.style.left = x.toString() + 'px';\n this.imageResizerDivElement.style.borderWidth = '0px';\n this.imageResizerDivElement.style.height = height + 'px';\n this.imageResizerDivElement.style.width = width + 'px';\n this.imageResizerDivElement.style.backgroundColor = 'transparent';\n this.imageResizerDivElement.style.overflow = 'hidden';\n this.imageResizerDivElement.style.position = 'absolute';\n };\n /**\n * Creates image resizer DOM element.\n * @private\n */\n ImageResizer.prototype.initializeImageResizer = function () {\n this.imageResizerDivElement = document.createElement('div');\n this.imageResizerDivElement.style.zIndex = '1';\n this.imageResizerDivElement.style.display = 'none';\n this.viewer.pageContainer.appendChild(this.imageResizerDivElement);\n };\n /**\n * Position an image resizer\n * @param {ImageElementBox} elementBox - Specifies the image position.\n * @private\n */\n ImageResizer.prototype.positionImageResizer = function (elementBox) {\n this.selectedImageWidget.clear();\n // Initializes the image resizer on demand, i.e at the time of selecting an image for the first time.\n var resizeDiv;\n if (!isNullOrUndefined(this.viewer.currentPage)) {\n resizeDiv = this.imageResizerDivElement;\n }\n if (!isNullOrUndefined(resizeDiv) && !resizeDiv.contains(this.imageResizerDiv)) {\n this.imageResizerDiv = this.initResizeMarks(resizeDiv, this);\n }\n this.imageResizerDiv.style.width = (elementBox.width) + 'px';\n this.imageResizerDiv.style.height = (elementBox.height) + 'px';\n this.currentImageElementBox = elementBox;\n var lineWidget = elementBox.line;\n var top = this.viewer.selection.getTop(lineWidget) + elementBox.margin.top;\n var left = this.viewer.selection.getLeftInternal(lineWidget, elementBox, 0);\n var page = this.viewer.selection.getPage(lineWidget.paragraph);\n this.currentPage = page;\n var x = 0;\n var y = 0;\n if (!isNullOrUndefined(resizeDiv)) {\n this.imageResizerDivElement.style.display = 'block';\n resizeDiv.style.width = page.boundingRectangle.width + 'px';\n resizeDiv.style.height = page.boundingRectangle.height + 'px';\n resizeDiv.style.left = page.boundingRectangle.x + 'px';\n resizeDiv.style.top = page.boundingRectangle.y + 'px';\n resizeDiv.style.borderWidth = '0px';\n resizeDiv.style.backgroundColor = 'transparent';\n resizeDiv.style.overflow = 'hidden';\n resizeDiv.style.position = 'absolute';\n }\n var horizontalWidth = 0;\n var pageWidth = this.viewer.getPageWidth(page);\n var pagelayout = this.viewer;\n // tslint:disable-next-line:max-line-length\n horizontalWidth = parseFloat(this.imageResizerDivElement.style.width);\n x = (this.viewer.visibleBounds.width - horizontalWidth * this.viewer.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n if (pageWidth < horizontalWidth) {\n x += (horizontalWidth - pageWidth) * this.viewer.zoomFactor / 2;\n }\n // tslint:disable-next-line:max-line-length \n y = page.boundingRectangle.y * this.viewer.zoomFactor + (this.viewer.pages.indexOf(page) + 1) * 20 * (1 - this.viewer.zoomFactor);\n var currentPageDiv = this.imageResizerDivElement;\n var currentPageDivWidth = parseFloat(currentPageDiv.style.width);\n var currentPageDivHeight = parseFloat(currentPageDiv.style.height);\n var imageResizerDivWidth = parseFloat(this.imageResizerDiv.style.width);\n var imageResizerDivHeight = parseFloat(this.imageResizerDiv.style.height);\n var margin = (this.resizeMarkSize - 1) / 2;\n var width = imageResizerDivWidth + 2 * margin;\n var height = imageResizerDivHeight + 2 * margin;\n if (width > (currentPageDivWidth - left) * this.viewer.zoomFactor + margin) {\n width = (currentPageDivWidth - left) * this.viewer.zoomFactor;\n }\n if (height > (currentPageDivHeight - top) * this.viewer.zoomFactor + margin) {\n height = (currentPageDivHeight - top) * this.viewer.zoomFactor;\n }\n // if (width < imageResizerDivHeight + margin || height < imageResizerDivHeight + margin) {\n // }\n // tslint:disable-next-line:max-line-length\n this.imageResizerDivElement.style.width = parseInt(this.imageResizerDivElement.style.width.replace('px', ''), 10) * this.viewer.zoomFactor + 'px';\n this.imageResizerDivElement.style.height = parseInt(this.imageResizerDivElement.style.height.replace('px', ''), 10) * this.viewer.zoomFactor + 'px';\n height = this.viewer.render.getScaledValue(elementBox.height);\n width = this.viewer.render.getScaledValue(elementBox.width);\n left = this.viewer.render.getScaledValue(left);\n top = this.viewer.render.getScaledValue(top);\n this.setImageResizerPosition(left, top, width, height, this);\n if (!this.selectedImageWidget.containsKey(lineWidget)) {\n var selectedImageInfo = new SelectedImageInfo(elementBox.height, elementBox.width);\n this.selectedImageWidget.add(lineWidget, selectedImageInfo);\n }\n };\n /**\n * Shows the image resizer.\n * @private\n */\n ImageResizer.prototype.showImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = '';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = '';\n this.bottomLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = '';\n this.bottomRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = '';\n this.bottomMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = '';\n this.rightMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = '';\n this.topRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = '';\n this.topLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = '';\n this.leftMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = '';\n this.topMiddleRectParent.style.display = '';\n }\n this.isImageResizerVisible = true;\n };\n /**\n * Hides the image resizer.\n * @private\n */\n ImageResizer.prototype.hideImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = 'none';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = 'none';\n this.bottomLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = 'none';\n this.bottomRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = 'none';\n this.bottomMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = 'none';\n this.rightMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = 'none';\n this.topRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = 'none';\n this.topLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = 'none';\n this.leftMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = 'none';\n this.topMiddleRectParent.style.display = 'none';\n }\n this.isImageResizerVisible = false;\n this.currentPage = undefined;\n };\n /**\n * Initialize the resize marks.\n * @param {HTMLElement} resizeDiv - Specifies to appending resizer container div element.\n * @param {ImageResizer} imageResizer - Specifies to creating div element of each position.\n * @private\n */\n // tslint:disable:max-func-body-length\n ImageResizer.prototype.initResizeMarks = function (resizeDiv, imageResizer) {\n this.initResizeContainerDiv(imageResizer);\n resizeDiv.appendChild(imageResizer.resizeContainerDiv);\n imageResizer.topRightRectParent = document.createElement('div');\n imageResizer.topRightRectParent.style.cursor = 'ne-resize';\n imageResizer.topRightRectParent.id = this.viewer.owner.containerId + '_TopRightRectParent';\n this.applyProperties(imageResizer.topRightRectParent);\n imageResizer.topRightRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topRightRectParent);\n imageResizer.topRightRect = document.createElement('div');\n imageResizer.topRightRect.id = this.viewer.owner.containerId + '_TopRightRect';\n imageResizer.topRightRect.style.cursor = 'ne-resize';\n this.applyProperties(imageResizer.topRightRect);\n resizeDiv.appendChild(imageResizer.topRightRect);\n imageResizer.topLeftRectParent = document.createElement('div');\n imageResizer.topLeftRectParent.style.cursor = 'nw-resize';\n imageResizer.topLeftRectParent.id = this.viewer.owner.containerId + '_TopLeftRectParent';\n this.applyProperties(imageResizer.topLeftRectParent);\n imageResizer.topLeftRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topLeftRectParent);\n imageResizer.topLeftRect = document.createElement('div');\n imageResizer.topLeftRect.id = this.viewer.owner.containerId + '_TopLeftRect';\n imageResizer.topLeftRect.style.cursor = 'nw-resize';\n this.applyProperties(imageResizer.topLeftRect);\n resizeDiv.appendChild(imageResizer.topLeftRect);\n imageResizer.topMiddleRectParent = document.createElement('div');\n imageResizer.topMiddleRectParent.style.cursor = 'n-resize';\n imageResizer.topMiddleRectParent.id = this.viewer.owner.containerId + '_TopMiddleRectParent';\n this.applyProperties(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRect = document.createElement('div');\n imageResizer.topMiddleRect.id = this.viewer.owner.containerId + '_TopMiddleRect';\n imageResizer.topMiddleRect.style.cursor = 'n-resize';\n this.applyProperties(imageResizer.topMiddleRect);\n resizeDiv.appendChild(imageResizer.topMiddleRect);\n imageResizer.bottomRightRectParent = document.createElement('div');\n imageResizer.bottomRightRectParent.style.cursor = 'se-resize';\n imageResizer.bottomRightRectParent.id = this.viewer.owner.containerId + '_BottomRightRectParent';\n this.applyProperties(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRect = document.createElement('div');\n imageResizer.bottomRightRect.id = this.viewer.owner.containerId + '_BottomRightRect';\n imageResizer.bottomRightRect.style.cursor = 'se-resize';\n this.applyProperties(imageResizer.bottomRightRect);\n resizeDiv.appendChild(imageResizer.bottomRightRect);\n imageResizer.bottomLeftRectParent = document.createElement('div');\n imageResizer.bottomLeftRectParent.style.cursor = 'sw-resize';\n imageResizer.bottomLeftRectParent.id = this.viewer.owner.containerId + '_BottomLeftRectParent';\n this.applyProperties(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRect = document.createElement('div');\n imageResizer.bottomLeftRect.id = this.viewer.owner.containerId + '_BottomLeftRect';\n imageResizer.bottomLeftRect.style.cursor = 'sw-resize';\n this.applyProperties(imageResizer.bottomLeftRect);\n resizeDiv.appendChild(imageResizer.bottomLeftRect);\n imageResizer.bottomMiddleRectParent = document.createElement('div');\n imageResizer.bottomMiddleRectParent.style.cursor = 's-resize';\n imageResizer.bottomMiddleRectParent.id = this.viewer.owner.containerId + '_BottomMiddleRectParent';\n this.applyProperties(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRect = document.createElement('div');\n imageResizer.bottomMiddleRect.id = this.viewer.owner.containerId + '_BottomMiddleRect';\n imageResizer.bottomMiddleRect.style.cursor = 's-resize';\n this.applyProperties(imageResizer.bottomMiddleRect);\n resizeDiv.appendChild(imageResizer.bottomMiddleRect);\n imageResizer.rightMiddleRectParent = document.createElement('div');\n imageResizer.rightMiddleRectParent.style.cursor = 'e-resize';\n imageResizer.rightMiddleRectParent.id = this.viewer.owner.containerId + '_RightMiddleRectParent';\n this.applyProperties(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRect = document.createElement('div');\n imageResizer.rightMiddleRect.id = this.viewer.owner.containerId + '_RightMiddleRect';\n imageResizer.rightMiddleRect.style.cursor = 'e-resize';\n this.applyProperties(imageResizer.rightMiddleRect);\n resizeDiv.appendChild(imageResizer.rightMiddleRect);\n imageResizer.leftMiddleRectParent = document.createElement('div');\n imageResizer.leftMiddleRectParent.style.cursor = 'w-resize';\n imageResizer.leftMiddleRectParent.id = this.viewer.owner.containerId + '_LeftMiddleRectParent';\n this.applyProperties(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRect = document.createElement('div');\n imageResizer.leftMiddleRect.id = this.viewer.owner.containerId + '_LeftMiddleRect';\n imageResizer.leftMiddleRect.style.cursor = 'w-resize';\n this.applyProperties(imageResizer.leftMiddleRect);\n resizeDiv.appendChild(imageResizer.leftMiddleRect);\n return imageResizer.resizeContainerDiv;\n };\n /**\n * Sets the image resizer position.\n * @param {number} left - Specifies for image resizer left value.\n * @param {number} top - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @private\n */\n ImageResizer.prototype.setImageResizerPosition = function (left, top, width, height, imageResizer) {\n //Positions Updating For Image Resize Div\n imageResizer.resizeContainerDiv.style.width = width + 'px';\n imageResizer.resizeContainerDiv.style.height = height + 'px';\n imageResizer.resizeContainerDiv.style.left = left - 1 + 'px';\n imageResizer.resizeContainerDiv.style.top = top + 'px';\n //Positions Updating For Image Resizing Points\n imageResizer.topRightRect.style.left = ((left + width) - 5) + 'px';\n imageResizer.topRightRect.style.top = (top - 4) + 'px';\n imageResizer.topLeftRect.style.left = (left - 5) + 'px';\n imageResizer.topLeftRect.style.top = (top - 4) + 'px';\n imageResizer.topMiddleRect.style.left = ((parseFloat(imageResizer.topLeftRect.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRect.style.top = (top - 4) + 'px';\n imageResizer.bottomRightRect.style.left = imageResizer.topRightRect.style.left;\n imageResizer.bottomRightRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + height) + 'px';\n imageResizer.bottomLeftRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.bottomLeftRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + height) + 'px';\n imageResizer.bottomMiddleRect.style.left = imageResizer.topMiddleRect.style.left;\n imageResizer.bottomMiddleRect.style.top = (parseFloat(imageResizer.topMiddleRect.style.top) + height) + 'px';\n imageResizer.rightMiddleRect.style.left = ((left + width) - 4) + 'px';\n imageResizer.rightMiddleRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.leftMiddleRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + (height / 2)) + 'px';\n imageResizer.topRightRectParent.style.left = !this.viewer.isTouchInput ? ((left + width) - 8) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.topRightRectParent.style.top = !this.viewer.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topLeftRectParent.style.left = !this.viewer.isTouchInput ? (left - 8) + 'px' : (left - 15) + 'px';\n imageResizer.topLeftRectParent.style.top = !this.viewer.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topMiddleRectParent.style.left = ((parseFloat(imageResizer.topLeftRectParent.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRectParent.style.top = !this.viewer.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.bottomRightRectParent.style.left = imageResizer.topRightRectParent.style.left;\n imageResizer.bottomRightRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + height) + 'px';\n imageResizer.bottomLeftRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.bottomLeftRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + height) + 'px';\n imageResizer.bottomMiddleRectParent.style.left = imageResizer.topMiddleRectParent.style.left;\n imageResizer.bottomMiddleRectParent.style.top = (parseFloat(imageResizer.topMiddleRectParent.style.top) + height) + 'px';\n // tslint:disable-next-line:max-line-length \n imageResizer.rightMiddleRectParent.style.left = !this.viewer.isTouchInput ? ((left + width) - 7) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.rightMiddleRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.leftMiddleRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + (height / 2)) + 'px';\n this.setImageResizingPoints(imageResizer);\n if (this.viewer.isTouchInput) {\n this.applyPropertiesForTouch();\n }\n else {\n this.applyPropertiesForMouse();\n }\n };\n /**\n * Sets the image resizing points.\n * @param {ImageResizer} imageResizer - Specifies for position of each resizing elements.\n * @private\n */\n ImageResizer.prototype.setImageResizingPoints = function (imageResizer) {\n this.imageResizerPoints.resizeContainerDiv.x = parseFloat(imageResizer.resizeContainerDiv.style.left);\n this.imageResizerPoints.resizeContainerDiv.y = parseFloat(imageResizer.resizeContainerDiv.style.top);\n this.imageResizerPoints.bottomLeftRectParent.x = parseFloat(imageResizer.bottomLeftRectParent.style.left);\n this.imageResizerPoints.bottomLeftRectParent.y = parseFloat(imageResizer.bottomLeftRectParent.style.top);\n this.imageResizerPoints.bottomRightRectParent.x = parseFloat(imageResizer.bottomRightRectParent.style.left);\n this.imageResizerPoints.bottomRightRectParent.y = parseFloat(imageResizer.bottomRightRectParent.style.top);\n this.imageResizerPoints.bottomMiddleRectParent.x = parseFloat(imageResizer.bottomMiddleRectParent.style.left);\n this.imageResizerPoints.bottomMiddleRectParent.y = parseFloat(imageResizer.bottomMiddleRectParent.style.top);\n this.imageResizerPoints.topLeftRectParent.x = parseFloat(imageResizer.topLeftRectParent.style.left);\n this.imageResizerPoints.topLeftRectParent.y = parseFloat(imageResizer.topLeftRectParent.style.top);\n this.imageResizerPoints.topRightRectParent.x = parseFloat(imageResizer.topRightRectParent.style.left);\n this.imageResizerPoints.topRightRectParent.y = parseFloat(imageResizer.topRightRectParent.style.top);\n this.imageResizerPoints.topMiddleRectParent.x = parseFloat(imageResizer.topMiddleRectParent.style.left);\n this.imageResizerPoints.topMiddleRectParent.y = parseFloat(imageResizer.topMiddleRectParent.style.top);\n this.imageResizerPoints.leftMiddleRectParent.x = parseFloat(imageResizer.leftMiddleRectParent.style.left);\n this.imageResizerPoints.leftMiddleRectParent.y = parseFloat(imageResizer.leftMiddleRectParent.style.top);\n this.imageResizerPoints.rightMiddleRectParent.x = parseFloat(imageResizer.rightMiddleRectParent.style.left);\n this.imageResizerPoints.rightMiddleRectParent.y = parseFloat(imageResizer.rightMiddleRectParent.style.top);\n };\n /**\n * Initialize the resize container div element.\n * @param {ImageResizer} imageResizer - Specifies for creating resize container div element.\n * @private\n */\n ImageResizer.prototype.initResizeContainerDiv = function (imageResizer) {\n imageResizer.resizeContainerDiv = document.createElement('div');\n imageResizer.resizeContainerDiv.id = this.viewer.owner.containerId + '_ResizeDivElement';\n imageResizer.resizeContainerDiv.style.position = 'absolute';\n imageResizer.resizeContainerDiv.style.border = '1px solid #bfbfbf';\n imageResizer.resizeContainerDiv.style.zIndex = '30';\n imageResizer.resizeContainerDiv.style.backgroundColor = 'transparent';\n imageResizer.resizeContainerDiv.style.display = 'block';\n };\n /**\n * Apply the properties of each resize rectangle element.\n * @param {HTMLDivElement} resizeRectElement - Specifies for applying properties to resize rectangle element.\n * @private\n */\n ImageResizer.prototype.applyProperties = function (resizeRectElement) {\n resizeRectElement.style.position = 'absolute';\n resizeRectElement.style.width = '8px';\n resizeRectElement.style.height = '8px';\n resizeRectElement.style.fontSize = '0px';\n resizeRectElement.style.zIndex = ' 551';\n resizeRectElement.style.backgroundColor = '#ffffff';\n resizeRectElement.style.border = '1px solid #bfbfbf';\n resizeRectElement.style.boxShadow = '0 1px 2px 0 #bfbfbf 0.35';\n resizeRectElement.style.color = '#000000';\n };\n /**\n * Handles an image resizing.\n * @param {number} x - Specifies for left value while resizing.\n * @param {number} y - Specifies for top value while resizing.\n */\n ImageResizer.prototype.handleImageResizing = function (touchPoint, prevX, prevY) {\n prevX = prevX / this.viewer.zoomFactor;\n prevY = prevY / this.viewer.zoomFactor;\n this.leftValue = isNullOrUndefined(this.leftValue) ? prevX : this.leftValue;\n this.topValue = isNullOrUndefined(this.topValue) ? prevY : this.topValue;\n var points;\n switch (this.selectedResizeElement.id.split('_')[1]) {\n case 'TopRightRectParent':\n points = this.topRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'TopLeftRectParent':\n points = this.topLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'TopMiddleRectParent':\n prevX = 0;\n prevY = this.topMiddleResizing(touchPoint);\n break;\n case 'BottomRightRectParent':\n points = this.bottomRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'BottomLeftRectParent':\n points = this.bottomLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'BottomMiddleRectParent':\n prevY = touchPoint.y - prevY;\n prevX = 0;\n break;\n case 'RightMiddleRectParent':\n prevX = touchPoint.x - prevX;\n prevY = 0;\n break;\n case 'LeftMiddleRectParent':\n prevX = this.leftMiddleResizing(touchPoint);\n prevY = 0;\n break;\n default:\n break;\n }\n if (prevX !== 0 || prevY !== 0) {\n var widget = this.currentImageElementBox.line.paragraph;\n var image = this.currentImageElementBox;\n if (!isNullOrUndefined(widget) && widget.isInsideTable) {\n var cellWidget = widget.containerWidget;\n if (!isNullOrUndefined(cellWidget)) {\n var rowWidget = cellWidget.containerWidget;\n var imageHeight = HelperMethods.convertPointToPixel(image.height);\n var widgetHeight = rowWidget.height - imageHeight;\n if (prevY > 0 && rowWidget.y + widgetHeight + imageHeight + prevY > this.viewer.clientArea.bottom) {\n this.isImageMoveToNextPage = true;\n }\n }\n }\n // tslint:disable-next-line:max-line-length \n if (this.owner.enableHistoryMode) {\n this.initHistoryForImageResizer(this.currentImageElementBox);\n }\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n // tslint:disable-next-line:max-line-length \n var width = this.currentImageElementBox.width + prevX > 10 ? this.currentImageElementBox.width + prevX : 10;\n // tslint:disable-next-line:max-line-length \n var height = this.currentImageElementBox.height + prevY > 10 ? this.currentImageElementBox.height + prevY : 10;\n if (this.selectedResizeElement.id.split('_')[1] === 'BottomRightRectParent'\n || this.selectedResizeElement.id.split('_')[1] === 'TopRightRectParent'\n || this.selectedResizeElement.id.split('_')[1] === 'BottomLeftRectParent'\n || this.selectedResizeElement.id.split('_')[1] === 'TopLeftRectParent') {\n height = this.currentImageElementBox.height / this.currentImageElementBox.width * width;\n width = this.currentImageElementBox.width / this.currentImageElementBox.height * height;\n }\n this.currentImageElementBox.width = width;\n this.currentImageElementBox.height = height;\n var owner = this.currentImageElementBox.line.paragraph;\n this.positionImageResizer(this.currentImageElementBox);\n }\n this.isImageResizing = true;\n }\n };\n /**\n * Handles image resizing on mouse.\n * @param {MouseEvent} event - Specifies for image resizing using mouse event.\n * @private\n */\n ImageResizer.prototype.handleImageResizingOnMouse = function (event) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left);\n var prevY = parseFloat(this.selectedResizeElement.style.top);\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n ImageResizer.prototype.topMiddleResizing = function (touchPoint) {\n var prevY;\n if (this.topValue >= touchPoint.y) {\n prevY = this.topValue / touchPoint.y;\n this.topValue = touchPoint.y;\n if (this.viewer instanceof PageLayoutViewer) {\n if (this.topValue <= this.viewer.pageGap) {\n prevY = 1;\n }\n }\n }\n else {\n prevY = -(touchPoint.y / this.topValue);\n this.topValue = touchPoint.y;\n if (this.topValue === 0) {\n prevY = -1;\n }\n }\n return prevY;\n };\n ImageResizer.prototype.leftMiddleResizing = function (touchPoint) {\n var prevX;\n if (this.leftValue >= touchPoint.x) {\n prevX = this.leftValue / touchPoint.x;\n this.leftValue = touchPoint.x;\n if (this.leftValue === 0) {\n prevX = 1;\n this.leftValue = parseFloat(this.selectedResizeElement.style.left);\n }\n }\n else {\n prevX = -(touchPoint.x / this.leftValue);\n this.leftValue = touchPoint.x;\n }\n return prevX;\n };\n ImageResizer.prototype.topRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.topLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.getOuterResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = touchPoint.x - this.leftValue;\n this.leftValue = touchPoint.x;\n prevY = touchPoint.y - this.topValue;\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n ImageResizer.prototype.getInnerResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = -(this.leftValue - touchPoint.x);\n this.leftValue = touchPoint.x;\n prevY = -(this.topValue - touchPoint.y);\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n /**\n * Handles image resizing on touch.\n * @param {TouchEvent} touchEvent - Specifies for image resizing using touch event.\n * @private\n */\n ImageResizer.prototype.handleImageResizingOnTouch = function (touchEvent) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left) + 24;\n var prevY = parseFloat(this.selectedResizeElement.style.top) + 24;\n var touch = touchEvent.touches;\n var cursorPoint = new Point(touch[0].clientX, touch[0].clientY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n if (isNullOrUndefined(this.currentImageElementBox) || isNullOrUndefined(this.currentImageElementBox)) {\n return;\n }\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n /**\n * Gets the image point of mouse.\n * @param {Point} touchPoint - Specifies for resizer cursor position.\n * @private\n */\n ImageResizer.prototype.getImagePoint = function (touchPoint) {\n var x = this.viewer.render.getScaledValue(touchPoint.x, 1);\n var y = this.viewer.render.getScaledValue(touchPoint.y, 2);\n touchPoint = new Point(x, y);\n var imageResizingPoints = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElement = undefined;\n var bottomMiddle = imageResizingPoints.bottomMiddleRectParent;\n var bottomRight = imageResizingPoints.bottomRightRectParent;\n var bottomLeft = imageResizingPoints.bottomLeftRectParent;\n var topMiddle = imageResizingPoints.topMiddleRectParent;\n var topRight = imageResizingPoints.topRightRectParent;\n var topLeft = imageResizingPoints.topLeftRectParent;\n var rightMiddle = imageResizingPoints.rightMiddleRectParent;\n var leftMiddle = imageResizingPoints.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n // tslint:disable-next-line:max-line-length \n if ((touchPoint.x > bottomMiddle.x && touchPoint.x <= bottomMiddle.x + 15) && (touchPoint.y > bottomMiddle.y && touchPoint.y <= bottomMiddle.y + 15)) {\n selectedElement = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > bottomRight.x && touchPoint.x <= bottomRight.x + 15) && (touchPoint.y > bottomRight.y && touchPoint.y <= bottomRight.y + 15)) {\n selectedElement = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > bottomLeft.x && touchPoint.x <= bottomLeft.x + 15) && (touchPoint.y > bottomLeft.y && touchPoint.y <= bottomLeft.y + 15)) {\n selectedElement = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > topMiddle.x && touchPoint.x <= topMiddle.x + 15) && (touchPoint.y > topMiddle.y && touchPoint.y <= topMiddle.y + 15)) {\n selectedElement = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > topRight.x && touchPoint.x <= topRight.x + 15) && (touchPoint.y > topRight.y && touchPoint.y <= topRight.y + 15)) {\n selectedElement = this.topRightRectParent;\n resizePosition = 'ne-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > topLeft.x && touchPoint.x <= topLeft.x + 15) && (touchPoint.y > topLeft.y && touchPoint.y <= topLeft.y + 15)) {\n selectedElement = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > leftMiddle.x && touchPoint.x <= leftMiddle.x + 15) && (touchPoint.y > leftMiddle.y && touchPoint.y <= leftMiddle.y + 15)) {\n selectedElement = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > rightMiddle.x && touchPoint.x <= rightMiddle.x + 15) && (touchPoint.y > rightMiddle.y && touchPoint.y <= rightMiddle.y + 15)) {\n selectedElement = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoint.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoint.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoint.y > parseFloat(this.resizeContainerDiv.style.top)\n // tslint:disable-next-line:max-line-length \n && touchPoint.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElement, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForMouse = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '14px';\n this.bottomMiddleRectParent.style.height = '14px';\n this.bottomRightRectParent.style.width = '14px';\n this.bottomRightRectParent.style.height = '14px';\n this.bottomLeftRectParent.style.width = '14px';\n this.bottomLeftRectParent.style.height = '14px';\n this.topMiddleRectParent.style.width = '14px';\n this.topMiddleRectParent.style.height = '14px';\n this.topRightRectParent.style.width = '14px';\n this.topRightRectParent.style.height = '14px';\n this.topLeftRectParent.style.width = '14px';\n this.topLeftRectParent.style.height = '14px';\n this.leftMiddleRectParent.style.width = '14px';\n this.leftMiddleRectParent.style.height = '14px';\n this.rightMiddleRectParent.style.width = '14px';\n this.rightMiddleRectParent.style.height = '14px';\n }\n };\n /**\n * Gets the image point of touch.\n * @param {Point} touchPoints - Specifies for resizer cursor position.\n * @private\n */\n ImageResizer.prototype.getImagePointOnTouch = function (touchPoints) {\n var x = this.viewer.render.getScaledValue(touchPoints.x, 1);\n var y = this.viewer.render.getScaledValue(touchPoints.y, 2);\n touchPoints = new Point(x, y);\n var imageResizingPointsOnTouch = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElements = undefined;\n var bottomMiddle = imageResizingPointsOnTouch.bottomMiddleRectParent;\n var bottomRight = imageResizingPointsOnTouch.bottomRightRectParent;\n var bottomLeft = imageResizingPointsOnTouch.bottomLeftRectParent;\n var topMiddle = imageResizingPointsOnTouch.topMiddleRectParent;\n var topRight = imageResizingPointsOnTouch.topRightRectParent;\n var topLeft = imageResizingPointsOnTouch.topLeftRectParent;\n var rightMiddle = imageResizingPointsOnTouch.rightMiddleRectParent;\n var leftMiddle = imageResizingPointsOnTouch.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n // tslint:disable-next-line:max-line-length \n if ((touchPoints.x > bottomMiddle.x && touchPoints.x <= bottomMiddle.x + 25) && (touchPoints.y > bottomMiddle.y && touchPoints.y <= bottomMiddle.y + 25)) {\n selectedElements = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > bottomRight.x && touchPoints.x <= bottomRight.x + 25) && (touchPoints.y > bottomRight.y && touchPoints.y <= bottomRight.y + 25)) {\n selectedElements = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > bottomLeft.x && touchPoints.x <= bottomLeft.x + 25) && (touchPoints.y > bottomLeft.y && touchPoints.y <= bottomLeft.y + 25)) {\n selectedElements = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > topMiddle.x && touchPoints.x <= topMiddle.x + 25) && (touchPoints.y > topMiddle.y && touchPoints.y <= topMiddle.y + 25)) {\n selectedElements = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > topRight.x && touchPoints.x <= topRight.x + 25) && (touchPoints.y > topRight.y && touchPoints.y <= topRight.y + 25)) {\n selectedElements = this.topRightRectParent;\n resizePosition = 'ne-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > topLeft.x && touchPoints.x <= topLeft.x + 25) && (touchPoints.y > topLeft.y && touchPoints.y <= topLeft.y + 25)) {\n selectedElements = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > leftMiddle.x && touchPoints.x <= leftMiddle.x + 25) && (touchPoints.y > leftMiddle.y && touchPoints.y <= leftMiddle.y + 25)) {\n selectedElements = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > rightMiddle.x && touchPoints.x <= rightMiddle.x + 25) && (touchPoints.y > rightMiddle.y && touchPoints.y <= rightMiddle.y + 25)) {\n selectedElements = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoints.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoints.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoints.y > parseFloat(this.resizeContainerDiv.style.top)\n // tslint:disable-next-line:max-line-length \n && touchPoints.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElements, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForTouch = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '30px';\n this.bottomMiddleRectParent.style.height = '30px';\n this.bottomRightRectParent.style.width = '30px';\n this.bottomRightRectParent.style.height = '30px';\n this.bottomLeftRectParent.style.width = '30px';\n this.bottomLeftRectParent.style.height = '30px';\n this.topMiddleRectParent.style.width = '30px';\n this.topMiddleRectParent.style.height = '30px';\n this.topRightRectParent.style.width = '30px';\n this.topRightRectParent.style.height = '30px';\n this.topLeftRectParent.style.width = '30px';\n this.topLeftRectParent.style.height = '30px';\n this.leftMiddleRectParent.style.width = '30px';\n this.leftMiddleRectParent.style.height = '30px';\n this.rightMiddleRectParent.style.width = '30px';\n this.rightMiddleRectParent.style.height = '30px';\n }\n };\n /**\n * @private\n */\n ImageResizer.prototype.mouseUpInternal = function () {\n this.currentImageElementBox.width = parseFloat(this.imageResizerDiv.style.width) / this.viewer.zoomFactor;\n this.currentImageElementBox.height = parseFloat(this.imageResizerDiv.style.height) / this.viewer.zoomFactor;\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.setOffsetValue(this.owner.selection);\n this.viewer.layout.reLayoutParagraph(this.currentImageElementBox.line.paragraph, 0, 0);\n this.owner.editorModule.reLayout(this.owner.selection, true);\n this.viewer.updateScrollBars();\n };\n /**\n * Initialize history for image resizer.\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @param {WImage} imageContainer - Specifies for an image.\n * @private\n */\n ImageResizer.prototype.initHistoryForImageResizer = function (imageContainer) {\n if (!isNullOrUndefined(this.owner) && isNullOrUndefined(this.baseHistoryInfo)) {\n this.baseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.baseHistoryInfo.action = 'ImageResizing';\n this.baseHistoryInfo.updateSelection();\n this.baseHistoryInfo.modifiedProperties.push(new ImageFormat(imageContainer));\n }\n };\n /**\n * Updates histroy for image resizer.\n * @private\n */\n ImageResizer.prototype.updateHistoryForImageResizer = function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.baseHistoryInfo)) {\n var imageFormat = this.baseHistoryInfo.modifiedProperties[0];\n if (this.currentImageElementBox.width === imageFormat.width\n && this.currentImageElementBox.height === imageFormat.height) {\n this.baseHistoryInfo.modifiedProperties.pop();\n }\n else {\n //Records the image size modifications\n this.owner.editorHistory.recordChanges(this.baseHistoryInfo);\n }\n //Fires the content changed event for the image size modifications\n this.baseHistoryInfo = undefined;\n }\n };\n /**\n * Updates image resize container when applying zooming\n * @private\n */\n ImageResizer.prototype.updateImageResizerPosition = function () {\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n var elementBox = this.currentImageElementBox;\n var lineWidget = elementBox.line;\n var top_1 = this.viewer.selection.getTop(lineWidget) + elementBox.margin.top;\n var left = this.viewer.selection.getLeftInternal(lineWidget, elementBox, 0);\n var topValue = top_1 * this.viewer.zoomFactor;\n var leftValue = left * this.viewer.zoomFactor;\n var height = this.viewer.render.getScaledValue(elementBox.height, 2);\n var width = this.viewer.render.getScaledValue(elementBox.width, 1);\n this.setImageResizerPosition(leftValue, topValue, width, height, this);\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n * @private\n */\n ImageResizer.prototype.destroy = function () {\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.imageResizerDiv)) {\n this.imageResizerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.selectedImageWidget)) {\n this.selectedImageWidget.destroy();\n }\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.innerHTML = '';\n }\n this.imageResizerDivElement = undefined;\n this.resizeContainerDiv = undefined;\n this.topLeftRect = undefined;\n this.topMiddleRect = undefined;\n this.topRightRect = undefined;\n this.bottomLeftRect = undefined;\n this.bottomMiddleRect = undefined;\n this.bottomRightRect = undefined;\n this.leftMiddleRect = undefined;\n this.rightMiddleRect = undefined;\n this.imageResizerDiv = undefined;\n this.selectedImageWidget = undefined;\n this.isImageResizing = false;\n this.isImageResizerVisible = false;\n this.currentImageElementBoxIn = undefined;\n //this.baseHistoryInfo = undefined;\n this.resizeMarkSizeIn = undefined;\n this.viewer = undefined;\n this.owner = undefined;\n };\n return ImageResizer;\n}());\nexport { ImageResizer };\n/**\n * @private\n */\nvar ImageResizingPoints = /** @class */ (function () {\n /**\n * Constructor for image resizing points class.\n */\n function ImageResizingPoints() {\n /**\n * @private\n */ this.resizeContainerDiv = new Point(0, 0);\n /**\n * @private\n */\n this.topLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.leftMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.rightMiddleRectParent = new Point(0, 0);\n var text = 'DocumentEditor';\n }\n return ImageResizingPoints;\n}());\nexport { ImageResizingPoints };\n/**\n * @private\n */\nvar SelectedImageInfo = /** @class */ (function () {\n /**\n * Constructor for selected image info class.\n * @param {number} height - Specifies for height value.\n * @param {number} width - Specifies for width value.\n */\n function SelectedImageInfo(height, width) {\n this.heightIn = 0;\n this.widthIn = 0;\n this.heightIn = height;\n this.widthIn = width;\n }\n Object.defineProperty(SelectedImageInfo.prototype, \"height\", {\n /**\n * Gets or Sets the height value.\n * @private\n */\n get: function () {\n return this.heightIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.heightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectedImageInfo.prototype, \"width\", {\n /**\n * Gets or Sets the width value.\n * @private\n */\n get: function () {\n return this.widthIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n return SelectedImageInfo;\n}());\nexport { SelectedImageInfo };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo } from './base-history-info';\n/**\n * EditorHistory preservation class\n */\n/**\n * @private\n */\nvar HistoryInfo = /** @class */ (function (_super) {\n __extends(HistoryInfo, _super);\n function HistoryInfo(node, isChild) {\n var _this = _super.call(this, node) || this;\n _this.isChildHistoryInfo = false;\n _this.isChildHistoryInfo = isChild;\n return _this;\n }\n Object.defineProperty(HistoryInfo.prototype, \"hasAction\", {\n /**\n * @private\n */\n get: function () {\n return !isNullOrUndefined(this.modifiedActions);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Adds the modified actions\n * @param {BaseHistoryInfo} baseHistoryInfo\n * @private\n */\n HistoryInfo.prototype.addModifiedAction = function (baseHistoryInfo) {\n // For complex actions such as Replace text, Insert/Remove Hyperlink etc.\n if (!(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n if (isNullOrUndefined(this.modifiedActions)) {\n this.modifiedActions = [];\n }\n this.modifiedActions.push(baseHistoryInfo);\n }\n };\n /**\n * Reverts this instance\n * @private\n */\n HistoryInfo.prototype.revert = function () {\n this.editorHistory.currentHistoryInfo = this;\n if (this.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n if (!isNullOrUndefined(this.modifiedActions)) {\n if (this.editorHistory.isUndoing) {\n var i = this.modifiedActions.length;\n while (i > 0) {\n var baseHistoryInfo = this.modifiedActions[i - 1];\n baseHistoryInfo.revert();\n i = i - 1;\n }\n }\n else {\n var i = 0;\n while (i < this.modifiedActions.length) {\n var baseHistoryInfo = this.modifiedActions[i];\n baseHistoryInfo.revert();\n i = i + 1;\n }\n }\n }\n if (!this.isChildHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.editorHistory.updateComplexHistoryInternal();\n }\n };\n /**\n * @private\n */\n HistoryInfo.prototype.destroy = function () {\n if (!isNullOrUndefined(this.modifiedActions)) {\n while (this.modifiedActions.length > 0) {\n var baseHistoryInfo = this.modifiedActions[this.modifiedActions.length - 1];\n baseHistoryInfo.destroy();\n this.modifiedActions.splice(this.modifiedActions.indexOf(baseHistoryInfo), 1);\n }\n this.modifiedActions = undefined;\n }\n _super.prototype.destroy.call(this);\n };\n return HistoryInfo;\n}(BaseHistoryInfo));\nexport { HistoryInfo };\n","import { Dictionary } from '../../base/dictionary';\nimport { TextPosition } from '../selection/selection-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo, } from './base-history-info';\nimport { ModifiedParagraphFormat, ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { HistoryInfo } from './history-info';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * `EditorHistory` Module class is used to handle history preservation\n */\nvar EditorHistory = /** @class */ (function () {\n /**\n * @private\n */\n function EditorHistory(node) {\n //Fields\n this.undoStackIn = [];\n this.redoStackIn = [];\n this.historyInfoStack = [];\n /**\n * @private\n */\n this.isUndoing = false;\n /**\n * @private\n */\n this.isRedoing = false;\n this.owner = node;\n this.viewer = node.viewer;\n this.modifiedParaFormats = new Dictionary();\n this.undoLimitIn = 500;\n this.redoLimitIn = 500;\n }\n Object.defineProperty(EditorHistory.prototype, \"currentHistoryInfo\", {\n /**\n * @private\n */\n get: function () {\n return this.historyInfoStack && this.historyInfoStack.length > 0 ?\n this.historyInfoStack[this.historyInfoStack.length - 1] : undefined;\n },\n set: function (value) {\n if (value instanceof HistoryInfo) {\n this.historyInfoStack.push(value);\n }\n else {\n this.historyInfoStack.pop();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoStack\", {\n //Properties\n /**\n * gets undo stack\n * @private\n */\n get: function () { return this.undoStackIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoStack\", {\n /**\n * gets redo stack\n * @private\n */\n get: function () { return this.redoStackIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoLimit\", {\n /**\n * Gets or Sets the limit of undo operations can be done.\n */\n get: function () {\n return isNullOrUndefined(this.undoLimitIn) ? 0 : this.undoLimitIn;\n },\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.undoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoLimit\", {\n /**\n * Gets or Sets the limit of redo operations can be done.\n */\n get: function () {\n return isNullOrUndefined(this.redoLimitIn) ? 0 : this.redoLimitIn;\n },\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.redoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n EditorHistory.prototype.getModuleName = function () {\n return 'EditorHistory';\n };\n /**\n * Determines whether undo operation can be done.\n * @returns boolean\n */\n EditorHistory.prototype.canUndo = function () {\n return !isNullOrUndefined(this.undoStack) && this.undoStack.length > 0;\n };\n /**\n * Determines whether redo operation can be done.\n * @returns boolean\n */\n EditorHistory.prototype.canRedo = function () {\n return !isNullOrUndefined(this.redoStack) && this.redoStack.length > 0;\n };\n //EditorHistory Initialization \n /**\n * initialize EditorHistory\n * @param {Selection} selection\n * @param {Action} action\n * @param {SelectionRange} selectionRange\n * @private\n */\n EditorHistory.prototype.initializeHistory = function (action) {\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.currentBaseHistoryInfo.action = action;\n this.currentBaseHistoryInfo.updateSelection();\n };\n /**\n * Initialize complex history\n * @param {Selection} selection\n * @param {Action} action\n * @private\n */\n EditorHistory.prototype.initComplexHistory = function (selection, action) {\n this.currentHistoryInfo = new HistoryInfo(selection.owner, !isNullOrUndefined(this.currentHistoryInfo));\n this.currentHistoryInfo.action = action;\n this.currentHistoryInfo.updateSelection();\n };\n /**\n * @private\n */\n EditorHistory.prototype.initResizingHistory = function (startingPoint, tableResize) {\n if (tableResize.resizeNode === 1) {\n this.initializeHistory('RowResizing');\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n this.currentBaseHistoryInfo.modifiedProperties.push(new RowHistoryFormat(startingPoint, tableResize.currentResizingTable.childWidgets[tableResize.resizerPosition].rowFormat));\n }\n }\n else {\n this.initializeHistory('CellResizing');\n if (this.currentBaseHistoryInfo) {\n tableResize.currentResizingTable = tableResize.currentResizingTable.combineWidget(this.viewer);\n var tableHistoryInfo = new TableHistoryInfo(tableResize.currentResizingTable, this.owner);\n tableHistoryInfo.startingPoint = startingPoint;\n this.currentBaseHistoryInfo.modifiedProperties.push(tableHistoryInfo);\n }\n }\n };\n /**\n * Update resizing history\n * @param {Point} point\n * @param {Selection} selection\n * @private\n */\n EditorHistory.prototype.updateResizingHistory = function (point, tableResize) {\n if (tableResize.resizeNode === 1) {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var rowHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (rowHistoryFormat.startingPoint.y === point.y) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n rowHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.y - rowHistoryFormat.startingPoint.y);\n this.recordChanges(this.currentBaseHistoryInfo);\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var cellHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (cellHistoryFormat.startingPoint.x === point.x) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n cellHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.x - cellHistoryFormat.startingPoint.x);\n cellHistoryFormat.endIndex = tableResize.getCellReSizerPosition(point);\n this.owner.editorHistory.recordChanges(this.currentBaseHistoryInfo);\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n };\n /**\n * Record the changes\n * @param {BaseHistoryInfo} baseHistoryInfo\n * @private\n */\n EditorHistory.prototype.recordChanges = function (baseHistoryInfo) {\n if (!this.owner.enableHistoryMode) {\n return;\n }\n if (this.isUndoing) {\n if (isNullOrUndefined(this.redoStack)) {\n this.redoStackIn = [];\n }\n if (this.redoStack.length === this.redoLimit && this.redoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.redoStackIn.splice(0, count);\n }\n if (this.redoStack.length < this.redoLimit) {\n this.redoStack.push(baseHistoryInfo);\n }\n }\n else {\n if (!this.isRedoing) {\n this.clearRedoStack();\n }\n if (isNullOrUndefined(this.undoStack)) {\n this.undoStackIn = [];\n }\n if (this.undoStack.length === this.undoLimit && this.undoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.undoStackIn.splice(0, count);\n }\n if (this.undoStack.length < this.undoLimit) {\n this.undoStackIn.push(baseHistoryInfo);\n }\n }\n };\n /**\n * update EditorHistory\n * @private\n */\n EditorHistory.prototype.updateHistory = function () {\n if (this.viewer.owner.enableHistoryMode && !isNullOrUndefined(this.currentBaseHistoryInfo)) {\n //Updates the current end position\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)\n && isNullOrUndefined(this.currentBaseHistoryInfo.endPosition)) {\n this.currentBaseHistoryInfo.endPosition = this.currentBaseHistoryInfo.insertPosition;\n }\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n this.currentHistoryInfo.addModifiedAction(this.currentBaseHistoryInfo);\n }\n else {\n this.recordChanges(this.currentBaseHistoryInfo);\n }\n this.currentBaseHistoryInfo = undefined;\n }\n };\n /**\n * @private\n */\n EditorHistory.prototype.isHandledComplexHistory = function () {\n var isHandledComplexHistory = false;\n if (!(this.isUndoing || this.isRedoing)) {\n isHandledComplexHistory = this.owner.editorModule.insertRemoveBookMarkElements();\n }\n if (this.viewer.owner.enableHistoryMode && !isNullOrUndefined(this.currentHistoryInfo)) {\n this.updateHistory();\n isHandledComplexHistory = true;\n }\n else if (this.owner.editorModule.isHandledComplex) {\n isHandledComplexHistory = true;\n }\n return isHandledComplexHistory;\n };\n /**\n * Update complex history\n * @private\n */\n EditorHistory.prototype.updateComplexHistory = function () {\n var selection = this.viewer.selection;\n if (this.currentHistoryInfo.hasAction) {\n if (this.currentHistoryInfo.action === 'AutoFormatHyperlink') {\n var startPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(startPosition, this.currentHistoryInfo.insertPosition);\n // this.reLayoutParagraph(startPosition.paragraph, 0);\n if (selection.owner.editorHistory.isUndoing) {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.selectionStart);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.selectionEnd);\n }\n else {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.endPosition);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.endPosition);\n }\n }\n if (this.currentHistoryInfo.action === 'InsertHyperlink') {\n var startPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(startPosition, this.currentHistoryInfo.insertPosition);\n var endPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(endPosition, this.currentHistoryInfo.endPosition);\n this.viewer.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.viewer.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (this.currentHistoryInfo.action === 'ReplaceAll') {\n this.owner.editorModule.layoutWholeDocument();\n }\n else if (selection.owner.isShiftingEnabled) {\n this.viewer.layout.shiftLayoutedItems();\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editorModule.updateHeaderFooterWidget();\n }\n this.viewer.removeEmptyPages();\n }\n }\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n // // selection.addMultipleSelectionRanges();\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n this.viewer.updateScrollBars();\n selection.fireSelectionChanged(true);\n this.viewer.updateFocus();\n this.updateComplexHistoryInternal();\n this.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n */\n EditorHistory.prototype.updateComplexHistoryInternal = function () {\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n //Updates the current end position\n if (isNullOrUndefined(this.currentHistoryInfo.endPosition)) {\n this.currentHistoryInfo.endPosition = this.currentHistoryInfo.insertPosition;\n }\n if (this.historyInfoStack.length > 1) {\n var historyInfo = this.historyInfoStack[this.historyInfoStack.length - 2];\n historyInfo.addModifiedAction(this.currentHistoryInfo);\n }\n else {\n this.recordChanges(this.currentHistoryInfo);\n }\n this.currentHistoryInfo = undefined;\n }\n };\n //List history preservation undo API\n /**\n * update list changes for history preservation\n * @param {Selection} selection\n * @param {WAbstractList} currentAbstractList\n * @param {WList} list\n * @private\n */\n EditorHistory.prototype.updateListChangesInHistory = function (currentAbstractList, list) {\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.viewer.owner);\n this.currentBaseHistoryInfo.action = 'List';\n this.currentBaseHistoryInfo.updateSelection();\n var collection = new Dictionary();\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var levels = this.viewer.getAbstractListById(list.abstractListId).levels[i];\n var value = this.currentBaseHistoryInfo.addModifiedPropertiesForList(levels);\n var modifiedLevel = new ModifiedLevel(levels, currentAbstractList.levels[i]);\n if (!isNullOrUndefined(levels)) {\n this.viewer.owner.editorModule.copyListLevel(levels, currentAbstractList.levels[i]);\n }\n collection.add(i, modifiedLevel);\n }\n return collection;\n };\n /**\n * Apply list changes\n * @param {Selection} selection\n * @param {Dictionary} modifiedLevelsInternal\n * @private\n */\n EditorHistory.prototype.applyListChanges = function (selection, modifiedLevelsInternal) {\n if (isNullOrUndefined(this.modifiedParaFormats)) {\n this.modifiedParaFormats = new Dictionary();\n }\n var collection = [];\n for (var i = 0; i < this.viewer.listParagraphs.length; i++) {\n var paragraph = this.viewer.listParagraphs[i];\n var paraFormat = paragraph.paragraphFormat;\n var currentList = this.viewer.getListById(paraFormat.listFormat.listId);\n var listLevel = this.viewer.layout.getListLevel(currentList, paraFormat.listFormat.listLevelNumber);\n // tslint:disable-next-line:max-line-length\n if (modifiedLevelsInternal.containsKey(paraFormat.listFormat.listLevelNumber)\n && modifiedLevelsInternal.get(paraFormat.listFormat.listLevelNumber).ownerListLevel === listLevel) {\n var modifiedFormat = new WParagraphFormat(null);\n modifiedFormat.leftIndent = paraFormat.leftIndent;\n modifiedFormat.firstLineIndent = paraFormat.firstLineIndent;\n var modified = new ModifiedParagraphFormat(paraFormat, modifiedFormat);\n collection.push(modified);\n this.owner.editorModule.copyFromListLevelParagraphFormat(paraFormat, listLevel.paragraphFormat);\n }\n }\n this.modifiedParaFormats.add(this.currentBaseHistoryInfo, collection);\n };\n /**\n * Update list changes\n * @param {Dictionary} modifiedCollection\n * @param {Selection} selection\n * @private\n */\n EditorHistory.prototype.updateListChanges = function (modifiedCollection) {\n this.viewer.owner.isLayoutEnabled = false;\n this.owner.editorModule.updateListParagraphs();\n for (var i = 0; i < modifiedCollection.keys.length; i++) {\n var levelNumber = modifiedCollection.keys[0];\n var modifiedLevel = modifiedCollection.get(levelNumber);\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n modifiedLevel = this.currentBaseHistoryInfo.addModifiedPropertiesForList(modifiedLevel.ownerListLevel);\n }\n this.owner.editorModule.copyListLevel(modifiedLevel.ownerListLevel, modifiedLevel.modifiedListLevel);\n }\n this.revertListChanges();\n this.viewer.owner.isLayoutEnabled = true;\n this.viewer.renderedLists.clear();\n this.viewer.pages = [];\n this.viewer.layout.layout();\n var selection = this.viewer.selection;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(false);\n this.updateHistory();\n };\n /**\n * Revert list changes\n * @param {Selection} selection\n */\n EditorHistory.prototype.revertListChanges = function () {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)\n && this.viewer.owner.editorHistory.modifiedParaFormats.containsKey(this.currentBaseHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n var collection = this.modifiedParaFormats.get(this.currentBaseHistoryInfo);\n for (var i = 0; i < collection.length; i++) {\n var modified = new WParagraphFormat(null);\n modified.leftIndent = collection[i].ownerFormat.leftIndent;\n modified.firstLineIndent = collection[i].ownerFormat.firstLineIndent;\n collection[i].ownerFormat.copyFormat(collection[i].modifiedFormat);\n collection[i].modifiedFormat.leftIndent = modified.leftIndent;\n collection[i].modifiedFormat.firstLineIndent = modified.firstLineIndent;\n }\n }\n };\n /**\n * Reverts the last editing action.\n */\n EditorHistory.prototype.undo = function () {\n if (this.owner.isReadOnlyMode || !this.canUndo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.undoStack.pop();\n this.isUndoing = true;\n historyInfo.revert();\n this.isUndoing = false;\n this.owner.selection.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * Performs the last reverted action.\n */\n EditorHistory.prototype.redo = function () {\n if (this.owner.isReadOnlyMode || !this.canRedo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.redoStack.pop();\n if (historyInfo.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n this.isRedoing = true;\n historyInfo.revert();\n this.isRedoing = false;\n this.owner.selection.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * @private\n */\n EditorHistory.prototype.destroy = function () {\n this.clearHistory();\n this.undoStackIn = undefined;\n this.redoStackIn = undefined;\n };\n EditorHistory.prototype.clearHistory = function () {\n this.clearUndoStack();\n this.clearRedoStack();\n };\n EditorHistory.prototype.clearUndoStack = function () {\n if (this.canUndo()) {\n while (this.undoStack.length > 0) {\n var historyInfo = this.undoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n EditorHistory.prototype.clearRedoStack = function () {\n if (this.canRedo()) {\n while (this.redoStack.length > 0) {\n var historyInfo = this.redoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n return EditorHistory;\n}());\nexport { EditorHistory };\n","import { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { XmlWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../index';\n/**\n * Exports the document to Word format.\n */\nvar WordExport = /** @class */ (function () {\n function WordExport() {\n //Part path\n this.documentPath = 'word/document.xml';\n this.stylePath = 'word/styles.xml';\n this.numberingPath = 'word/numbering.xml';\n this.settingsPath = 'word/settings.xml';\n this.headerPath = 'word/header';\n this.footerPath = 'word/footer';\n //private commentsPath: string = 'word/comments.xml';\n this.imagePath = 'word/media/image';\n // private footnotesPath: string = 'word/footnotes.xml';\n // private endnotesPath: string = 'word/endnotes.xml';\n this.appPath = 'docProps/app.xml';\n this.corePath = 'docProps/core.xml';\n // private CustomPath: string = 'docProps/custom.xml';\n // private FontTablePath: string = 'word/fontTable.xml';\n this.contentTypesPath = '[Content_Types].xml';\n // private ChartsPath: string = 'word/charts/';\n // private DefaultEmbeddingPath: string = 'word/embeddings/';\n // private EmbeddingPath:string = 'word\\embeddings\\';\n // private DrawingPath:string = 'word\\drawings\\';\n // private ThemePath: string = 'word/theme/theme1.xml';\n // private FontsPath:string = 'word\\fonts\\';\n // private DiagramPath:string = \"word/diagrams/';\n // private ControlPath:string = \"word/activeX/';\n // private VbaProject: string = 'vbaProject.bin';\n // private VbaData: string = 'vbaData.xml';\n // private VbaProjectPath: string = 'word/vbaProject.bin';\n // private VbaDataPath: string = 'word/vbaData.xml';\n // private CustomXMLPath:string = 'customXml\\';\n //Relationship path\n this.generalRelationPath = '_rels/.rels';\n this.wordRelationPath = 'word/_rels/document.xml.rels';\n // private FontRelationPath: string = 'word/_rels/fontTable.xml.rels';\n // private CommentsRelationPath: string = 'word/_rels/comments.xml.rels';\n // private FootnotesRelationPath: string = 'word/_rels/footnotes.xml.rels';\n // private EndnotesRelationPath: string = 'word/_rels/endnotes.xml.rels';\n // private NumberingRelationPath: string = 'word/_rels/numbering.xml.rels';\n this.headerRelationPath = 'word/_rels/header';\n this.footerRelationPath = 'word/_rels/footer';\n // private SettingsRelationpath: string = 'word/_rels/settings.xml.rels';\n // private VbaProjectRelsPath: string = 'word/_rels/vbaProject.bin.rels';\n //Content type of the parts\n this.xmlContentType = 'application/xml';\n this.fontContentType = 'application/vnd.openxmlformats-officedocument.obfuscatedFont';\n this.documentContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml';\n // private TemplateContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml';\n // private CommentsContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';\n this.settingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml';\n // private EndnoteContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml';\n // private FontTableContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml';\n this.footerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml';\n // private FootnoteContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml';\n // private GlossaryDocumentContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml';\n this.headerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml';\n this.numberingContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml';\n this.stylesContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml';\n this.webSettingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml';\n this.appContentType = 'application/vnd.openxmlformats-officedocument.extended-properties+xml';\n this.coreContentType = 'application/vnd.openxmlformats-package.core-properties+xml';\n this.customContentType = 'application/vnd.openxmlformats-officedocument.custom-properties+xml';\n this.customXmlContentType = 'application/vnd.openxmlformats-officedocument.customXmlProperties+xml';\n this.relationContentType = 'application/vnd.openxmlformats-package.relationships+xml';\n // private DiagramColor: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml';\n // private DiagramData: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml';\n // private DiagramLayout: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml';\n // private DiagramStyle: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml';\n // private ChartsContentType: string = 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml';\n // private ThemeContentType: string = 'application/vnd.openxmlformats-officedocument.theme+xml';\n // private ChartDrawingContentType: string = 'application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml';\n // private ActiveXContentType: string = 'application/vnd.ms-office.activeX+xml';\n // private ActiveXBinContentType: string = 'application/vnd.ms-office.activeX';\n this.tableStyleContentType = 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml';\n // private ChartStyleContentType: string = 'application/vnd.ms-office.chartstyle+xml';\n // private ChartColorStyleContentType: string = 'application/vnd.ms-office.chartcolorstyle+xml';\n // private VbaProjectContentType: string = 'application/vnd.ms-office.vbaProject';\n // private VbaDataContentType: string = 'application/vnd.ms-word.vbaData+xml';\n // private MacroDocumentContentType: string = 'application/vnd.ms-word.document.macroEnabled.main+xml';\n // private MacroTemplateContentType: string = 'application/vnd.ms-word.template.macroEnabledTemplate.main+xml';\n // private OleObjectContentType: string = 'application/vnd.openxmlformats-officedocument.oleObject';\n // Relationship types of document parts\n // private AltChunkRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk';\n // private CommentsRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments';\n this.settingsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings';\n // private EndnoteRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes';\n // private FontTableRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable';\n this.footerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer';\n // private FootnoteRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes';\n this.headerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/header';\n this.documentRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument';\n this.numberingRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering';\n this.stylesRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles';\n // private OleObjectRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject';\n // private ChartRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart';\n // private ThemeRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme';\n this.fontRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/font';\n this.tableStyleRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles';\n this.coreRelType = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n this.appRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n this.customRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n this.imageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image';\n this.hyperlinkRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink';\n this.controlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/control';\n this.packageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // private VbaProjectRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/vbaProject';\n // private VbaDataRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/wordVbaData';\n this.customXmlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml';\n this.customUIRelType = 'http://schemas.microsoft.com/office/2006/relationships/ui/extensibility';\n this.attachedTemplateRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate';\n // private ChartColorStyleRelType: string = 'http://schemas.microsoft.com/office/2011/relationships/chartColorStyle';\n // private ChartStyleRelType: string = 'http://schemas.microsoft.com/office/2011/relationships/chartStyle';\n // private ChartUserShapesRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes';\n // private ChartContentType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // Namespaces\n // private PKG_namespace: string = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.wNamespace = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\n this.wpNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing';\n this.pictureNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/picture';\n this.aNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/main';\n this.a14Namespace = 'http://schemas.microsoft.com/office/drawing/2010/main';\n // private SVG_namespace: string = 'http://schemas.microsoft.com/office/drawing/2016/SVG/main';\n this.rNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\n this.rpNamespace = 'http://schemas.openxmlformats.org/package/2006/relationships';\n this.vNamespace = 'urn:schemas-microsoft-com:vml';\n this.oNamespace = 'urn:schemas-microsoft-com:office:office';\n this.xmlNamespace = 'http://www.w3.org/XML/1998/namespace';\n this.w10Namespace = 'urn:schemas-microsoft-com:office:word';\n this.cpNamespace = 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties';\n this.dcNamespace = 'http://purl.org/dc/elements/1.1/';\n // private DCTERMS_namespace: string = 'http://purl.org/dc/terms/';\n // private XSI_namespace: string = 'http://www.w3.org/2001/XMLSchema-instance';\n this.docPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties';\n this.veNamespace = 'http://schemas.openxmlformats.org/markup-compatibility/2006';\n this.mNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/math';\n this.wneNamespace = 'http://schemas.microsoft.com/office/word/2006/wordml';\n // private DCMI_namespace: string = 'http://purl.org/dc/dcmitype/';\n this.customPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/custom-properties';\n this.vtNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes';\n this.chartNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\n this.slNamespace = 'http://schemas.openxmlformats.org/schemaLibrary/2006/main';\n //2003WML namespace\n // private amlNamespace: string = 'http://schemas.microsoft.com/aml/2001/core';\n this.dtNamespace = 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882';\n this.wmlNamespace = 'http://schemas.microsoft.com/office/word/2003/wordml';\n //2010 namespaces\n this.w14Namespace = 'http://schemas.microsoft.com/office/word/2010/wordml';\n this.wpCanvasNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas';\n this.wpDrawingNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing';\n this.wpGroupNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingGroup';\n this.wpInkNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingInk';\n this.wpShapeNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape';\n //2013 namespaces\n this.w15Namespace = 'http://schemas.microsoft.com/office/word/2012/wordml';\n this.diagramNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/diagram';\n //Encryption namespaces\n this.eNamespace = 'http://schemas.microsoft.com/office/2006/encryption';\n this.pNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/password';\n this.certNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/certificate';\n // Dls xml tags\n this.cRelationshipsTag = 'Relationships';\n this.cRelationshipTag = 'Relationship';\n this.cIdTag = 'Id';\n this.cTypeTag = 'Type';\n this.cTargetTag = 'Target';\n this.cUserShapesTag = 'userShapes';\n this.cExternalData = 'externalData';\n this.twipsInOnePoint = 20;\n this.twentiethOfPoint = 20;\n this.borderMultiplier = 8;\n this.percentageFactor = 50;\n this.emusPerPoint = 12700;\n // private const TOC_SYMBOL:string = (char)0x01;\n // private const FOOTNOTE_SYMBOL:string = (char)0x02;\n // private const PAGENUMBER_SYMBOL:string = (char)0xB;\n // private DEF_FIT_TEXT_TO_SHAPE: string = 'mso-fit-shape-to-text:t';\n // Document tags\n this.cConditionalTableStyleTag = 'tblStylePr';\n this.cTableFormatTag = 'tblPr';\n this.cTowFormatTag = 'trPr';\n this.cCellFormatTag = 'tcPr';\n this.cParagraphFormatTag = 'pPr';\n this.cCharacterFormatTag = 'rPr';\n this.packageType = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.relsPartPath = '/_rels/.rels';\n this.documentRelsPartPath = '/word/_rels/document.xml.rels';\n this.webSettingsPath = '/word/webSettings.xml';\n this.wordMLDocumentPath = '/word/document.xml';\n this.wordMLStylePath = '/word/styles.xml';\n this.wordMLNumberingPath = '/word/numbering.xml';\n this.wordMLSettingsPath = '/word/settings.xml';\n this.wordMLHeaderPath = '/word/header';\n this.wordMLFooterPath = '/word/footer';\n this.wordMLCommentsPath = '/word/comments.xml';\n this.wordMLImagePath = '/word/media/image';\n this.wordMLFootnotesPath = '/word/footnotes.xml';\n this.wordMLEndnotesPath = '/word/endnotes.xml';\n this.wordMLAppPath = '/docProps/app.xml';\n this.wordMLCorePath = '/docProps/core.xml';\n this.wordMLCustomPath = '/docProps/custom.xml';\n this.wordMLFontTablePath = '/word/fontTable.xml';\n this.wordMLChartsPath = '/word/charts/';\n this.wordMLDefaultEmbeddingPath = '/word/embeddings/';\n this.wordMLEmbeddingPath = '/word/embeddings/';\n this.wordMLDrawingPath = '/word/drawings/';\n this.wordMLThemePath = '/word/theme/theme1.xml';\n this.wordMLFontsPath = '/word/fonts/';\n this.wordMLDiagramPath = '/word/diagrams/';\n this.wordMLControlPath = '/word/activeX/';\n this.wordMLVbaProject = '/vbaProject.bin';\n this.wordMLVbaData = '/vbaData.xml';\n this.wordMLVbaProjectPath = '/word/vbaProject.bin';\n this.wordMLVbaDataPath = '/word/vbaData.xml';\n // private WordMLCustomXMLPath: string = '/customXml/';\n this.wordMLWebSettingsPath = '/word/webSettings.xml';\n this.wordMLCustomItemProp1Path = '/customXml/itemProps1.xml';\n // private WordMLCustomXMLRelPath: string = '/customXml/_rels/item1.xml.rels';\n this.wordMLFootnoteRelPath = '/word/_rels/footnotes.xml.rels';\n this.wordMLEndnoteRelPath = '/word/_rels/endnotes.xml.rels';\n this.wordMLSettingsRelPath = '/word/_rels/settings.xml.rels';\n this.wordMLNumberingRelPath = '/word/_rels/numbering.xml.rels';\n this.wordMLFontTableRelPath = '/word/_rels/fontTable.xml.rels';\n this.wordMLCustomXmlPropsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps';\n this.wordMLControlRelType = 'http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary';\n this.wordMLDiagramContentType = 'application/vnd.ms-office.drawingml.diagramDrawing+xml';\n this.lastSection = false;\n this.mRelationShipID = 0;\n this.mDocPrID = 0;\n this.mDifferentFirstPage = false;\n this.mBookmarks = undefined;\n /* tslint:enable:no-any */\n }\n WordExport.prototype.getModuleName = function () {\n return 'WordExport';\n };\n Object.defineProperty(WordExport.prototype, \"bookmarks\", {\n // Gets the bookmark name\n get: function () {\n if (isNullOrUndefined(this.mBookmarks)) {\n this.mBookmarks = [];\n }\n return this.mBookmarks;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"documentImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mDocumentImages === undefined) {\n this.mDocumentImages = new Dictionary();\n }\n return this.mDocumentImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"externalImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mExternalLinkImages === undefined) {\n this.mExternalLinkImages = new Dictionary();\n }\n return this.mExternalLinkImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headerFooterImages\", {\n // Gets the collections of images present in the HeaderFooters\n get: function () {\n if (this.mHeaderFooterImages === undefined) {\n this.mHeaderFooterImages = new Dictionary();\n }\n return this.mHeaderFooterImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headersFooters\", {\n /// Gets the HeaderFooter Collection\n get: function () {\n if (this.mHeaderFooterColl === undefined) {\n this.mHeaderFooterColl = new Dictionary();\n }\n return this.mHeaderFooterColl;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n WordExport.prototype.save = function (viewer, fileName) {\n this.serialize(viewer);\n this.mArchive.save(fileName + '.docx').then(function (mArchive) {\n mArchive.destroy();\n });\n this.close();\n };\n /**\n * @private\n */\n WordExport.prototype.saveAsBlob = function (viewer) {\n var _this = this;\n this.serialize(viewer);\n return new Promise(function (resolve, reject) {\n _this.mArchive.saveAsBlob().then(function (blob) {\n _this.mArchive.destroy();\n blob = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n resolve(blob);\n });\n });\n };\n /**\n * @private\n */\n WordExport.prototype.destroy = function () {\n this.clearDocument();\n this.mRelationShipID = undefined;\n this.mDocPrID = undefined;\n this.mDifferentFirstPage = undefined;\n if (this.mArchive) {\n this.mArchive.destroy();\n this.mArchive = undefined;\n }\n };\n // Saves the word document in the stream\n WordExport.prototype.serialize = function (viewer) {\n /* tslint:disable:no-any */\n var document = viewer.owner.sfdtExportModule.write();\n this.setDocument(document);\n this.mArchive = new ZipArchive();\n this.mArchive.compressionLevel = 'Normal';\n this.mVerticalMerge = new Dictionary();\n this.mGridSpans = new Dictionary();\n var contenttype;\n //document.xml\n this.serializeDocument();\n //Styles.xml\n this.serializeStyles();\n //numbering.xml\n this.serializeNumberings();\n //theme.xml\n // if (m_document.DocHasThemes && !isNullOrUndefined(m_document.Themes))\n // SerializeThemes();\n // else\n // this.serializeDefaultThemes();\n //settings.xml\n this.serializeSettings();\n //core.xml\n this.serializeCoreProperties();\n //app.xml\n this.serializeAppProperties();\n //fontTable.xml\n this.serializeFontTable(contenttype);\n //custom.xml\n // if (!isNullOrUndefined(this.wordDocument.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0) {\n // SerializeCustomProperties();\n // }\n //Settings Relations\n this.serializeSettingsRelation();\n //Numbering relation if the document has picture bullet\n // if (PictureBullets.length > 0) {\n // SerializeNumberingsRelation();\n // }\n this.serializeHeaderFooters();\n //document relations\n this.serializeDocumentRelations();\n // // Add controls to archieve.\n // if (ControlsPathNames.length > 0) {\n // AddControlsToZip(m_document.DocxPackage);\n // }\n // if (!isNullOrUndefined(m_document.CustomUIPartContainer))\n // AddPartContainerToArchive(m_document.CustomUIPartContainer);\n // if (!isNullOrUndefined(m_document.CustomXMLContainer))\n // AddPartContainerToArchive(m_document.CustomXMLContainer);\n //general relations\n this.serializeGeneralRelations();\n //[ContentTypes].xml\n this.serializeContentTypes(contenttype);\n // Clears the internal fields maintained for serializing.\n this.clearDocument();\n };\n // Sets the document\n WordExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n this.mLists = document.lists;\n this.mAbstractLists = document.abstractLists;\n this.defCharacterFormat = document.characterFormat;\n this.defParagraphFormat = document.paragraphFormat;\n this.defaultTabWidthValue = document.defaultTabWidth;\n this.mStyles = document.styles;\n };\n // Clears the document\n WordExport.prototype.clearDocument = function () {\n // Owner Nodes\n this.section = undefined;\n this.lastSection = undefined;\n this.blockOwner = undefined;\n this.paragraph = undefined;\n this.table = undefined;\n this.row = undefined;\n this.headerFooter = undefined;\n this.document = undefined;\n this.mSections = undefined;\n this.mLists = undefined;\n this.mAbstractLists = undefined;\n this.defCharacterFormat = undefined;\n this.defParagraphFormat = undefined;\n this.defaultTabWidthValue = undefined;\n this.mRelationShipID = 0;\n this.mDocPrID = 0;\n this.mDifferentFirstPage = false;\n if (this.mHeaderFooterColl) {\n this.mHeaderFooterColl.destroy();\n this.mHeaderFooterColl = undefined;\n }\n if (this.mVerticalMerge) {\n this.mVerticalMerge.destroy();\n this.mVerticalMerge = undefined;\n }\n if (this.mGridSpans) {\n this.mGridSpans.destroy();\n this.mGridSpans = undefined;\n }\n if (this.mDocumentImages) {\n this.mDocumentImages.destroy();\n this.mDocumentImages = undefined;\n }\n if (this.mExternalLinkImages) {\n this.mExternalLinkImages.destroy();\n this.mExternalLinkImages = undefined;\n }\n if (this.mHeaderFooterImages) {\n this.mHeaderFooterImages.destroy();\n this.mHeaderFooterImages = undefined;\n }\n };\n // Serializes the document elements (document.xml)\n WordExport.prototype.serializeDocument = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'document', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n this.serializeDocumentBody(writer);\n writer.writeEndElement(); //end of document tag\n var archiveItem = new ZipArchiveItem(writer.buffer, this.documentPath);\n this.mArchive.addItem(archiveItem);\n };\n WordExport.prototype.writeCommonAttributeStrings = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n this.writeCustom(writer);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n WordExport.prototype.writeDup = function (writer) {\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'wpg', undefined, this.wpGroupNamespace);\n writer.writeAttributeString('xmlns', 'wpi', undefined, this.wpInkNamespace);\n };\n WordExport.prototype.writeCustom = function (writer) {\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n };\n // Serializes the document body\n WordExport.prototype.serializeDocumentBody = function (writer) {\n writer.writeStartElement(undefined, 'body', this.wNamespace);\n var count = this.document.sections.length;\n for (var i = 0; i < count; i++) {\n this.section = this.document.sections[i];\n this.lastSection = i === count - 1;\n this.serializeSection(writer, this.section, i === count - 1);\n this.section = undefined;\n }\n writer.writeEndElement();\n };\n // Serializes the Section.\n WordExport.prototype.serializeSection = function (writer, section, last) {\n this.blockOwner = section;\n this.serializeBodyItems(writer, section.blocks, last);\n if (last) {\n this.serializeSectionProperties(writer, section);\n }\n this.blockOwner = undefined;\n };\n // Serialize the section properties.\n WordExport.prototype.serializeSectionProperties = function (writer, section) {\n writer.writeStartElement('w', 'sectPr', this.wNamespace);\n if (section.headersFooters) {\n this.serializeHFReference(writer, section.headersFooters);\n }\n // if (IsNeedToSerializeSectionFootNoteProperties(section))\n // SerializeFootnoteProperties(section);\n // if (IsNeedToSerializeSectionEndNoteProperties(section))\n // SerializeEndnoteProperties(section);\n this.serializeSectionType(writer, 'nextPage');\n this.serializePageSetup(writer, section.sectionFormat);\n this.serializeColumns(writer, section);\n // this.serializeSectionProtection(section);\n // if (section.PageSetup.VerticalAlignment !== PageAlignment.Top) {\n // writer.writeStartElement('vAlign', this.wNamespace);\n // switch (section.PageSetup.VerticalAlignment) {\n // case PageAlignment.Top:\n // writer.WriteAttributeString('val', this.wNamespace, 'top');\n // break;\n // case PageAlignment.Middle:\n // writer.WriteAttributeString('val', this.wNamespace, 'center');\n // break;\n // case PageAlignment.Justified:\n // writer.WriteAttributeString('val', this.wNamespace, 'both');\n // break;\n // case PageAlignment.Bottom:\n // writer.WriteAttributeString('val', this.wNamespace, 'bottom');\n // break;\n // }\n // writer.WriteEndElement();\n // }\n if (section.sectionFormat !== undefined && section.sectionFormat.differentFirstPage) {\n writer.writeStartElement(undefined, 'titlePg', this.wNamespace);\n writer.writeEndElement();\n }\n // SerializeTextDirection(section);\n // if (section.PageSetup.Bidi) {\n // writer.WriteStartElement('bidi', this.wNamespace);\n // writer.WriteEndElement();\n // }\n //rtlGutter\n // SerializeDocGrid(section);\n //printerSettings\n writer.writeEndElement(); //end of sectPr tag\n };\n // Serialize the column properties of section.\n WordExport.prototype.serializeColumns = function (writer, section) {\n writer.writeStartElement(undefined, 'cols', this.wNamespace);\n writer.writeAttributeString(undefined, 'equalWidth', this.wNamespace, '1');\n writer.writeAttributeString(undefined, 'space', this.wNamespace, '0');\n writer.writeEndElement();\n // ColumnCollection columns = section.Columns;\n // writer.WriteStartElement('cols', this.wNamespace);\n // if (columns.length > 0)\n // {\n // writer.WriteAttributeString('num', this.wNamespace, columns.length.ToString());\n // }\n // if (section.PageSetup.DrawLinesBetweenCols)\n // writer.WriteAttributeString('sep', this.wNamespace, '1');\n // if (columns.OwnerSection.PageSetup.EqualColumnWidth)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '1');\n // //When the column count is negative, MS word just reset the column's count to zero\n // //To avoid index out of exception, checked the columns count\n // tslint:disable-next-line:max-line-length\n // writer.WriteAttributeString('space', this.wNamespace, ToString(columns.length > 0 ? columns[0].Space * this.TwentiethOfPoint : 0));\n // }\n // else if (columns.length > 0)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '0');\n // foreach (Column column in columns)\n // {\n // writer.WriteStartElement('col', this.wNamespace);\n // writer.WriteAttributeString('w', this.wNamespace, ToString(column.Width * this.TwentiethOfPoint));\n // tslint:disable-next-line:max-line-length\n // writer.WriteAttributeString('space', this.wNamespace, ToString(column.Space * this.TwentiethOfPoint));\n // writer.WriteEndElement();\n // }\n // }\n // writer.WriteEndElement();\n };\n // Serialize the page setup properties.\n WordExport.prototype.serializePageSetup = function (writer, pageSetup) {\n if (pageSetup !== undefined) {\n this.serializePageSize(writer, pageSetup);\n this.serializePageMargins(writer, pageSetup);\n }\n // // StartElement paperSrc (if any)\n // if (pageSetup.FirstPageTray > 0 || pageSetup.OtherPagesTray > 0) {\n // writer.WriteStartElement('paperSrc', this.wNamespace);\n // if (pageSetup.FirstPageTray > 0) {\n // writer.WriteAttributeString('first', this.wNamespace, pageSetup.FirstPageTray.ToString());\n // }\n // if (pageSetup.OtherPagesTray > 0) {\n // writer.WriteAttributeString('other', this.wNamespace, pageSetup.OtherPagesTray.ToString());\n // }\n // writer.WriteEndElement();\n // }\n writer.writeStartElement(undefined, 'pgBorders', this.wNamespace);\n // //zOrder\n // if (pageSetup.PageBordersApplyType === PageBordersApplyType.FirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'firstPage');\n // else if (pageSetup.PageBordersApplyType === PageBordersApplyType.AllExceptFirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'notFirstPage');\n // if (pageSetup.PageBorderOffsetFrom === PageBorderOffsetFrom.PageEdge) {\n // writer.WriteAttributeString('offsetFrom', this.wNamespace, 'page');\n // }\n // //Serializing zOrder of the front page border\n // if (!pageSetup.IsFrontPageBorder) {\n // writer.WriteAttributeString('zOrder', this.wNamespace, 'back');\n // }\n // SerializePageBorders(pageSetup.Borders);\n writer.writeEndElement();\n // this.serializeLineNumberType(writer, pageSetup);\n //this.serializePageNumberType(writer, pageSetup);\n };\n // serialize the page size\n WordExport.prototype.serializePageSize = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgSz', this.wNamespace);\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(pageSetup.pageWidth * this.twentiethOfPoint).toString());\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'h', this.wNamespace, this.roundToTwoDecimal(pageSetup.pageHeight * this.twentiethOfPoint).toString());\n // if (pageSetup.Orientation === PageOrientation.Landscape)\n // {\n // writer.WriteAttributeString('orient', this.wNamespace, 'landscape');\n // }\n writer.writeEndElement();\n };\n // Serialize the border.\n WordExport.prototype.serializePageMargins = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgMar', this.wNamespace);\n var marginValue = Math.round(pageSetup.topMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'top', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.rightMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'right', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.bottomMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'bottom', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.leftMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'left', this.wNamespace, marginValue.toString());\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'header', this.wNamespace, this.roundToTwoDecimal(pageSetup.headerDistance * this.twentiethOfPoint).toString());\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'footer', this.wNamespace, this.roundToTwoDecimal(pageSetup.footerDistance * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'gutter', this.wNamespace, '0');\n writer.writeEndElement();\n };\n // Serialize the section type.\n WordExport.prototype.serializeSectionType = function (writer, sectionBreakCode) {\n writer.writeStartElement('w', 'type', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, sectionBreakCode); //GetSectionBreakCode(sectionBreakCode));\n writer.writeEndElement();\n };\n // Serialize the heeader/footer reference.\n WordExport.prototype.serializeHFReference = function (writer, headersFooters) {\n var hfId = '';\n if (headersFooters !== undefined) {\n this.mDifferentFirstPage = this.section.sectionFormat.differentOddAndEvenPages;\n var hf = headersFooters.firstPageHeader;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.firstPageFooter;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.evenHeader;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.evenFooter;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.header;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.footer;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddFooter', hfId);\n writer.writeEndElement();\n }\n }\n };\n // Adds the header footer details to the collection.\n WordExport.prototype.addHeaderFooter = function (hf, hfType, id) {\n var hfColl = new Dictionary();\n this.headersFooters.add(hfType, hfColl);\n this.headersFooters.get(hfType).add(id, hf);\n };\n // Serializes the bodyItems\n WordExport.prototype.serializeBodyItems = function (writer, blockCollection, isLastSection) {\n for (var i = 0; i < blockCollection.length; i++) {\n this.serializeBodyItem(writer, blockCollection[i], isLastSection);\n }\n };\n // Serialize the TextBody item\n WordExport.prototype.serializeBodyItem = function (writer, item, isLastSection) {\n if (isNullOrUndefined(item)) {\n throw new Error('BodyItem should not be undefined');\n }\n if (item.hasOwnProperty('inlines')) {\n this.paragraph = item;\n this.serializeParagraph(writer, item, isLastSection);\n this.paragraph = undefined;\n }\n else {\n var table = item;\n for (var i = 0; i < table.rows.length; i++) {\n if (table.rows[i].cells.length > 0) {\n this.serializeTable(writer, table);\n break;\n }\n }\n }\n };\n // Serialize the paragraph\n WordExport.prototype.serializeParagraph = function (writer, paragraph, isLastSection) {\n if (isNullOrUndefined(paragraph)) {\n throw new Error('Paragraph should not be undefined');\n }\n var sec = this.blockOwner;\n //Need to write the Section Properties if the Paragraph is last item in the section\n if (!isLastSection && sec.hasOwnProperty('sectionFormat')\n && sec.blocks.indexOf(paragraph) === sec.blocks.length - 1) {\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeSectionProperties(writer, sec);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n // if (paragraph.ParagraphFormat.PageBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.PageBreak);\n // if (paragraph.ParagraphFormat.ColumnBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.ColumnBreak);\n //Splits the paragraph based on the newline character\n // paragraph.SplitTextRange();\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, paragraph.paragraphFormat, paragraph);\n writer.writeEndElement(); //end of pPr\n // Serialize watermark if paragraph is the first item of Header document.\n // EnsureWatermark(paragraph);\n this.serializeParagraphItems(writer, paragraph.inlines);\n writer.writeEndElement(); //end of paragraph tag.\n };\n // Serialize the paragraph items\n WordExport.prototype.serializeParagraphItems = function (writer, paraItems) {\n var previousNode = undefined;\n for (var i = 0; i < paraItems.length; i++) {\n var item = paraItems[i];\n if (item.hasOwnProperty('fieldType')) {\n this.serializeFieldCharacter(writer, item);\n }\n else if (item.hasOwnProperty('imageString')) {\n this.serializePicture(writer, item);\n }\n else if (item.hasOwnProperty('bookmarkType')) {\n this.serializeBookMark(writer, item);\n }\n else {\n this.serializeTextRange(writer, item, previousNode);\n }\n previousNode = item;\n }\n };\n // Serialize the book mark\n WordExport.prototype.serializeBookMark = function (writer, bookmark) {\n var bookmarkId = this.getBookmarkId(bookmark.name);\n var bookmarkName = bookmark.name;\n if (bookmark.bookmarkType === 0) {\n writer.writeStartElement('w', 'bookmarkStart', this.wNamespace);\n writer.writeAttributeString('w', 'name', this.wNamespace, bookmarkName);\n }\n else if (bookmark.bookmarkType === 1) {\n writer.writeStartElement('w', 'bookmarkEnd', this.wNamespace);\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, bookmarkId.toString());\n writer.writeEndElement();\n };\n WordExport.prototype.getBookmarkId = function (name) {\n var index = this.bookmarks.indexOf(name);\n if (index < 0) {\n index = this.bookmarks.length;\n this.bookmarks.push(name);\n }\n return index;\n };\n // Serialize the picture.\n WordExport.prototype.serializePicture = function (writer, image) {\n if (image.width >= 0 && image.height >= 0) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, image.characterFormat);\n this.serializeDrawing(writer, image);\n writer.writeEndElement(); //end of run element\n }\n };\n // Serialize the drawing element.\n WordExport.prototype.serializeDrawing = function (writer, image) {\n writer.writeStartElement(undefined, 'drawing', this.wNamespace);\n this.serializeInlinePicture(writer, image);\n writer.writeEndElement();\n };\n // Serialize the inline picture.\n WordExport.prototype.serializeInlinePicture = function (writer, image) {\n writer.writeStartElement(undefined, 'inline', this.wpNamespace);\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(image.width * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(image.height * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n // double borderWidth = (double)picture.PictureShape.PictureDescriptor.BorderLeft.LineWidth / DLSConstants.BorderLineFactor;\n // if (borderWidth > 0 && picture.DocxProps.length === 0) {\n // long leftTop = 0, rightBottom = 0;\n // picture.PictureShape.GetEffectExtent(borderWidth, ref leftTop, ref rightBottom);\n // m_writer.WriteStartElement('effectExtent', WP_namespace);\n // m_writer.WriteAttributeString('l', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('t', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('r', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('b', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteEndElement();\n // }\n //this.serializePicProperties(writer, image);\n this.serializeDrawingGraphics(writer, image);\n writer.writeEndElement();\n };\n WordExport.prototype.startsWith = function (sourceString, startString) {\n return startString.length > 0 && sourceString.substring(0, startString.length) === startString;\n };\n // Serialize the graphics element for pictures.\n WordExport.prototype.serializeDrawingGraphics = function (writer, picture) {\n var id = '';\n id = this.updateShapeId(picture);\n // picture.ShapeId = this.getNextDocPrID();\n // Processing picture\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n // if (!isNullOrUndefined(picture.AlternativeText))\n // m_writer.WriteAttributeString('descr', picture.AlternativeText);\n writer.writeAttributeString(undefined, 'name', undefined, '1'.toString());\n // if (!string.IsNullOrEmpty(picture.Title))\n // m_writer.WriteAttributeString('title', picture.Title);\n // else\n writer.writeAttributeString(undefined, 'title', undefined, '');\n // if (!picture.Visible)\n // m_writer.WriteAttributeString('hidden', '1');\n // SerializePictureHyperlink(picture);\n writer.writeEndElement();\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.pictureNamespace);\n writer.writeStartElement('pic', 'pic', this.pictureNamespace);\n writer.writeStartElement('pic', 'nvPicPr', this.pictureNamespace);\n writer.writeStartElement('pic', 'cNvPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, '0');\n writer.writeAttributeString(undefined, 'name', undefined, '');\n writer.writeAttributeString(undefined, 'descr', undefined, '');\n writer.writeEndElement();\n writer.writeStartElement('pic', 'cNvPicPr', this.pictureNamespace);\n writer.writeStartElement('a', 'picLocks', this.aNamespace);\n writer.writeAttributeString(undefined, 'noChangeAspect', undefined, '1');\n writer.writeAttributeString(undefined, 'noChangeArrowheads', undefined, '1');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'blipFill', this.pictureNamespace);\n writer.writeStartElement('a', 'blip', this.aNamespace);\n if (this.startsWith(picture.imageString, 'data:image')) {\n writer.writeAttributeString('r', 'embed', this.rNamespace, id);\n }\n else {\n if (this.documentImages.containsKey(id)) {\n //Remove the image document images collection for this particular key\n //If the picture image data has href means MS Word contains the image in media folder as well as \n //it is having external relationship id\n // if (!this.startsWith(picture.imageString, 'data:image')) {\n this.documentImages.remove(id);\n this.externalImages.add(id, picture.imageString);\n writer.writeAttributeString(undefined, 'link', this.rNamespace, id);\n }\n }\n //End Element Blip\n writer.writeEndElement();\n writer.writeStartElement('a', 'srcRect', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'stretch', this.aNamespace);\n writer.writeStartElement('a', 'fillRect', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'spPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'bwMode', undefined, 'auto');\n writer.writeStartElement('a', 'xfrm', this.aNamespace);\n // if (picture.Rotation !== 0)\n // m_writer.WriteAttributeString('rot', picture.Rotation.ToString());\n writer.writeStartElement('a', 'off', this.aNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('a', 'ext', this.aNamespace);\n var cx = Math.round((picture.width * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round((picture.height * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'prstGeom', this.aNamespace);\n writer.writeAttributeString(undefined, 'prst', undefined, 'rect');\n writer.writeStartElement('a', 'avLst', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n //When the picture border has been added next to effect list\n //if not, Picture border has not been preserved\n // if (picture.HasBorder)\n // {\n // if (picture.TextWrappingStyle === TextWrappingStyle.Inline && picture.IsShape)\n // SerializeInlineShapeLine(picture.PictureShape);\n // else\n // SerializeShapeLine(picture.PictureShape);\n // }\n // if (picture.DocxProps.length > 0)\n // SerializeDocxProps(picture.DocxProps, 'effectLst');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n /// Update the shape id.\n WordExport.prototype.updateShapeId = function (picture) {\n var id = '';\n var tOwner = this.paragraph;\n // Adding picture byte data to the corresponding picture collection \n // depending on its owner subdocument\n if (this.headerFooter) {\n id = this.updateHFImageRels(this.headerFooter, picture);\n }\n else {\n if (id === '') {\n if (tOwner.hasOwnProperty('sectionFormat') || tOwner.hasOwnProperty('inlines')) {\n id = this.addImageRelation(this.documentImages, picture);\n // if (owner is WFootnote)\n // {\n // if ((owner as WFootnote).FootnoteType === FootnoteType.Footnote)\n // id = AddImageRelation(FootnoteImages, picture.ImageRecord);\n // else\n // id = AddImageRelation(EndnoteImages, picture.ImageRecord);\n // }\n // if (owner is WComment)\n // id = AddImageRelation(CommentImages, picture.ImageRecord);\n }\n }\n }\n return id;\n };\n // Adds the image relation.\n WordExport.prototype.addImageRelation = function (imageCollection, image) {\n var relationId = '';\n // if (imageCollection.ContainsValue(imageRecord)) {\n // foreach(string key in imageCollection.keys)\n // {\n // if (imageRecord === imageCollection[key]) {\n // relationId = key;\n // break;\n // }\n // }\n // }\n // else {\n relationId = this.getNextRelationShipID();\n imageCollection.add(relationId, image);\n // }\n return relationId;\n };\n // Update the HeaderFooter image relations.\n WordExport.prototype.updateHFImageRels = function (hf, image) {\n var id = '';\n // UpdateImages(image);\n var headerId = '';\n var types = this.headersFooters.keys;\n for (var i = 0; i < types.length; i++) {\n var hfColl = this.headersFooters.get(types[i]);\n var hfKeys = hfColl.keys;\n for (var j = 0; j < hfKeys.length; j++) {\n if (hfColl.get(hfKeys[j]) === hf) {\n headerId = hfKeys[j];\n var headerImages = void 0;\n if (this.headerFooterImages.containsKey(headerId)) {\n headerImages = this.headerFooterImages.get(headerId);\n id = this.addImageRelation(headerImages, image);\n }\n else {\n headerImages = new Dictionary();\n id = this.addImageRelation(headerImages, image);\n this.headerFooterImages.add(headerId, headerImages);\n }\n }\n }\n }\n return id;\n };\n // Serialize the table\n WordExport.prototype.serializeTable = function (writer, table) {\n if (table.rows.length <= 0) {\n return;\n }\n var owner = this.table;\n this.table = table;\n writer.writeStartElement(undefined, 'tbl', this.wNamespace);\n var tableFormat = table.rows[0].rowFormat;\n this.serializeTableFormat(writer, tableFormat, table);\n this.serializeTableGrid(writer, table);\n this.serializeTableRows(writer, table.rows);\n writer.writeEndElement();\n this.table = owner;\n };\n // Serialize the table grid\n WordExport.prototype.serializeTableGrid = function (writer, table) {\n writer.writeStartElement(undefined, 'tblGrid', this.wNamespace);\n if (table.grid.length !== 0) {\n this.serializeGridColumns(writer, table.grid);\n }\n writer.writeEndElement();\n };\n // Serialize the table rows\n WordExport.prototype.serializeTableRows = function (writer, rows) {\n if (rows.length > 0) {\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (row.cells.length > 0) {\n this.serializeRow(writer, row);\n }\n }\n }\n };\n // Serialize the table row\n WordExport.prototype.serializeRow = function (writer, row) {\n var owner = this.row;\n this.row = row;\n writer.writeStartElement(undefined, 'tr', this.wNamespace);\n this.serializeRowFormat(writer, row);\n this.serializeCells(writer, row.cells);\n writer.writeEndElement(); //end od table row 'tr'\n this.row = owner;\n };\n // Serialize the row format\n WordExport.prototype.serializeRowFormat = function (writer, row) {\n writer.writeStartElement(undefined, 'trPr', this.wNamespace);\n //Serialize Row Height\n if (row.rowFormat.height > 0) {\n writer.writeStartElement(undefined, 'trHeight', this.wNamespace);\n if (row.rowFormat.heightType === 'Exactly') {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'exact');\n }\n else if (row.rowFormat.heightType === 'AtLeast') {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'atLeast');\n }\n var height = this.roundToTwoDecimal(row.rowFormat.height * this.twentiethOfPoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, height);\n writer.writeEndElement();\n }\n var rowFormat = row.rowFormat;\n // //Serialize 'gridBefore' element\n var gridBefore = rowFormat.gridBefore;\n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'gridBefore', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridBefore.toString());\n writer.writeEndElement();\n }\n // //Serialize 'gridAfter' element\n var gridAfter = rowFormat.gridAfter;\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'gridAfter', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridAfter.toString());\n writer.writeEndElement();\n }\n // //Serialize 'wBefore' element \n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'wBefore', this.wNamespace);\n switch (rowFormat.gridBeforeWidthType) {\n case 'Percent':\n var width = this.roundToTwoDecimal(rowFormat.gridBeforeWidth * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n var pointWidth = this.roundToTwoDecimal(rowFormat.gridBeforeWidth * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'wAfter' element\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'wAfter', this.wNamespace);\n switch (rowFormat.gridAfterWidthType) {\n case 'Percent':\n var width = this.roundToTwoDecimal(rowFormat.gridAfterWidth * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n var pointWidth = this.roundToTwoDecimal(rowFormat.gridAfterWidth * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'cantSplit' element \n if (!rowFormat.allowBreakAcrossPages) {\n writer.writeStartElement(undefined, 'cantSplit', this.wNamespace);\n writer.writeEndElement();\n }\n // //Serialize 'tblHeader' element \n if (rowFormat.isHeader) {\n writer.writeStartElement(undefined, 'tblHeader', this.wNamespace);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n // serialize the table cells\n WordExport.prototype.serializeCells = function (writer, cells) {\n for (var i = 0; i < cells.length; i++) {\n this.serializeCell(writer, cells[i]);\n }\n };\n // Serialize the table cell\n WordExport.prototype.serializeCell = function (writer, cell) {\n var owner = this.blockOwner;\n this.blockOwner = cell;\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n this.serializeCellFormat(writer, cell.cellFormat);\n if (cell.blocks.length > 0) {\n var itemIndex = 0;\n var item = undefined;\n while (itemIndex < cell.blocks.length) {\n item = cell.blocks[itemIndex];\n this.serializeBodyItem(writer, item, false);\n itemIndex += 1;\n }\n }\n else {\n writer.writeStartElement(undefined, 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'Normal');\n writer.writeEndElement(); //end of pStyle\n writer.writeEndElement(); //end of pPr\n writer.writeEndElement(); //end of P\n }\n writer.writeEndElement(); //end of table cell 'tc' \n this.blockOwner = owner;\n };\n // Serialize the cell formatting\n WordExport.prototype.serializeCellFormat = function (writer, cellFormat) {\n var cell = this.blockOwner;\n //Get the table fomat\n var tf = this.table.tableFormat;\n //Get the row format\n var rf = this.row.rowFormat;\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n //w:cnfStyle - Table Cell Conditional Formatting\n // SerializeCnfStyleElement(cell);\n //w:tcW - Preferred Table Cell Width\n this.serializeCellWidth(writer, cell);\n //w:hMerge - Horizontally Merged Cell and w:vMerge - Vertically Merged Cell\n this.serializeCellMerge(writer, cellFormat);\n //w:gridSpan - Grid Columns Spanned by Current Table Cell\n this.serializeGridSpan(writer, cell);\n //w:tcBorders - Table Cell Borders\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cellFormat.borders, 8);\n writer.writeEndElement();\n //w:shd - Table Cell Shading\n this.serializeShading(writer, cell.cellFormat.shading);\n // //w:noWrap - Don't Wrap Cell Content\n // if (cellFormat.HasValue(CellFormat.TextWrapKey)) {\n // m_writer.WriteStartElement('noWrap', W_namespace);\n // if (cellFormat.TextWrap)\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'false');\n // m_writer.WriteEndElement();\n // }\n // //w:tcMar - Single Table Cell Margins\n // if (!cellFormat.SamePaddingsAsTable) {\n // m_writer.WriteStartElement('tcMar', W_namespace);\n // SerializePaddings(cellFormat.Paddings);\n // m_writer.WriteEndElement();\n // }\n //w:textDirection - Table Cell Text Flow Direction\n this.serializeTableCellDirection(writer, cellFormat);\n // //w:tcFitText - Fit Text Within Cell\n // if (cellFormat.FitText) {\n // m_writer.WriteStartElement('tcFitText', W_namespace);\n // m_writer.WriteEndElement();\n // }\n // //w:hideMark \n // if (cellFormat.HideMark) {\n // m_writer.WriteStartElement('hideMark', W_namespace);\n // m_writer.WriteEndElement();\n // }\n //w:vAlign - Table Cell Vertical Alignment\n // if (cellFormat.HasValue(CellFormat.VrAlignmentKey))\n this.serializeCellVerticalAlign(writer, cellFormat.verticalAlignment);\n // //w:hideMark - Ignore End Of Cell Marker In Row Height Calculation\n // SerializeDocxProps(tempDocxProps, 'hideMark');\n // //w:cellIns - Table Cell Insertion\n // SerializeDocxProps(tempDocxProps, 'cellIns');\n // //w:cellDel - Table Cell Deletion\n // SerializeDocxProps(tempDocxProps, 'cellDel');\n // //w:cellMerge - Vertically Merged/Split Table Cells\n // SerializeDocxProps(tempDocxProps, 'cellMerge');\n // if (cellFormat.OldPropertiesHash.length > 0 && !m_isAlternativeCellFormat) {\n // m_isAlternativeCellFormat = true;\n // SerializeTrackChangeProps('tcPrChange', cellFormat.FormatChangeAuthorName, cellFormat.FormatChangeDateTime);\n // Dictionary < int, object > oldPropertyHash = new Dictionary(cellFormat.OldPropertiesHash);\n // Dictionary < int, object > propertyHash = new Dictionary(cellFormat.PropertiesHash);\n // cellFormat.PropertiesHash.Clear();\n // cellFormat.OldPropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // SerializeCellFormat(cellFormat);\n // cellFormat.PropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in propertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.OldPropertiesHash[keyValue.Key] = keyValue.Value;\n // m_writer.WriteEndElement();\n // m_isAlternativeCellFormat = false;\n // }\n writer.writeEndElement();\n };\n // Serialize the cell width\n WordExport.prototype.serializeCellWidth = function (writer, cell) {\n var cf = cell.cellFormat;\n writer.writeStartElement(undefined, 'tcW', this.wNamespace);\n if (cf.preferredWidthType === 'Percent') {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf.preferredWidth * this.percentageFactor).toString());\n }\n else if (cf.preferredWidthType === 'Point') {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf.preferredWidth * this.twipsInOnePoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n else {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n }\n writer.writeEndElement();\n };\n // Serialize cell merge\n WordExport.prototype.serializeCellMerge = function (writer, cellFormat) {\n var cell = this.blockOwner;\n var isserialized = false;\n var collKey;\n var currentIndex = cell.columnIndex;\n var cellIndex = this.row.cells.indexOf(cell);\n var prevIndex = cellIndex > 0 ? this.row.cells[cellIndex - 1].columnIndex : cell.columnIndex;\n if (cell.columnIndex === cellIndex) {\n collKey = cell.columnIndex;\n isserialized = true;\n }\n else {\n isserialized = false;\n }\n if (!isserialized) {\n if (cellIndex === 0) {\n currentIndex = cell.columnIndex;\n prevIndex = -1;\n }\n for (var i = prevIndex; i < currentIndex; i++) {\n collKey = prevIndex + 1;\n prevIndex += 1;\n if (this.mVerticalMerge.containsKey(collKey)) {\n this.createMerge(writer, collKey, cell);\n }\n }\n }\n if (cellFormat.rowSpan > 1) {\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n this.mVerticalMerge.add(collKey, cellFormat.rowSpan - 1);\n if (cellFormat.columnSpan > 1) {\n this.mGridSpans.add(collKey, cellFormat.columnSpan);\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, 'restart');\n writer.writeEndElement();\n }\n else if (this.mVerticalMerge.containsKey(collKey) && isserialized) {\n this.createMerge(writer, collKey, cell);\n }\n else if (this.mVerticalMerge.containsKey(cellIndex + 1) && isserialized && cell.nextNode === undefined) {\n collKey = cell.columnIndex + 1;\n writer.writeEndElement();\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n this.checkMergeCell(collKey);\n }\n };\n WordExport.prototype.createMerge = function (writer, collKey, cell) {\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n writer.writeEndElement(); //end tcPr\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement();\n writer.writeEndElement(); //end tc\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeCellWidth(writer, cell);\n this.checkMergeCell(collKey);\n };\n WordExport.prototype.serializeColumnSpan = function (collKey, writer) {\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.mGridSpans.get(collKey).toString());\n writer.writeEndElement();\n }\n };\n WordExport.prototype.checkMergeCell = function (collKey) {\n if ((this.mVerticalMerge.get(collKey) - 1) === 0) {\n this.mVerticalMerge.remove(collKey);\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n this.mGridSpans.remove(collKey);\n }\n }\n else {\n this.mVerticalMerge.set(collKey, this.mVerticalMerge.get(collKey) - 1);\n }\n };\n // Serialize the grid span element of cell.\n WordExport.prototype.serializeGridSpan = function (writer, cell) {\n // int gridSpan = cell.cellFormat.GridSpan;\n if (cell.cellFormat.columnSpan > 1) {\n var num = cell.cellFormat.columnSpan;\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, num.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the table cell direction\n WordExport.prototype.serializeTableCellDirection = function (writer, cellFormat) {\n // if (cellFormat..textDirection !== TextDirection.Horizontal)\n // {\n // m_writer.WriteStartElement('textDirection', W_namespace);\n // switch (cellFormat.TextDirection)\n // {\n // case TextDirection.Horizontal:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTb');\n // break;\n // case TextDirection.VerticalBottomToTop:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'btLr');\n // break;\n // case TextDirection.VerticalTopToBottom:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRl');\n // break;\n // case TextDirection.HorizontalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTbV');\n // break;\n // case TextDirection.Vertical:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbLrV');\n // break;\n // case TextDirection.VerticalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRlV');\n // break;\n // }\n // m_writer.WriteEndElement();\n // }\n };\n // Serialize the cell vertical alignment\n WordExport.prototype.serializeCellVerticalAlign = function (writer, alignment) {\n writer.writeStartElement(undefined, 'vAlign', this.wNamespace);\n switch (alignment) {\n case 'Top':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'top');\n break;\n case 'Center':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'bottom');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the table grid columns.\n WordExport.prototype.serializeGridColumns = function (writer, grid) {\n for (var i = 1, count = grid.length; i < count; i++) {\n var gridValue = Math.round(grid[i] * 20);\n writer.writeStartElement(undefined, 'gridCol', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, gridValue.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the row formattings.\n // Table parameter is passed for serializing table format and undefined for serializing row format.\n WordExport.prototype.serializeTableFormat = function (writer, format, table) {\n // if (!isNullOrUndefined(table))\n // {\n // List tempDocxProps = new List();\n // for (int i = 0, cnt = table.DocxTableFormat.NodeArray.length; i < cnt; i++)\n // tempDocxProps.Add(table.DocxTableFormat.NodeArray[i]);\n writer.writeStartElement(undefined, 'tblPr', this.wNamespace);\n // SerializeTableStlye(format);\n // if (format.WrapTextAround &&!((table.OwnerTextBody.Owner is WTextBox) || \n //(table.OwnerTextBody.Owner is WComment) || (table.OwnerTextBody.Owner is WFootnote)))\n // {\n // SerializeTablePositioning(format.Positioning);\n // if (!format.Positioning.AllowOverlap)\n // {\n // m_writer.WriteStartElement('tblOverlap', W_namespace);\n // m_writer.WriteAttributeString('val', W_namespace, 'never');\n // m_writer.WriteEndElement();\n // }\n // }\n // if (format.Bidi)\n // {\n // m_writer.WriteStartElement('bidiVisual', W_namespace);\n // m_writer.WriteEndElement();\n // }\n // SerializeDocxProps(tempDocxProps, 'tblStyleRowBandSize');\n // SerializeDocxProps(tempDocxProps, 'tblStyleColBandSize');\n this.serializeTableWidth(writer, table);\n this.serializeTableAlignment(writer, table.tableFormat);\n this.serializeCellSpacing(writer, table.tableFormat);\n this.serializeTableIndentation(writer, table.tableFormat);\n this.serializeTableBorders(writer, table.tableFormat);\n this.serializeShading(writer, table.tableFormat.shading);\n this.serializeTblLayout(writer, table.tableFormat);\n // this.serializeTableCellMargin(writer, table.tableFormat);\n // SerializeTableLook(table);\n // if (!isNullOrUndefined(table.Title))\n // SerializeTableTitle(table);\n // if (!isNullOrUndefined(table.Description))\n // SerializeTableDescription(table);\n // }\n // else\n // {\n // SerializeCellSpacing(format);\n // SerializeTableIndentation(format);\n // SerializeTableBorders(format);\n // SerializeTableShading(format);\n // SerializeTblLayout(format);\n // SerializeTableCellMargin(format);\n // }\n // if (!isNullOrUndefined(format.OwnerBase) && format.OwnerBase is WTable\n // && format.OldPropertiesHash.length > 0 && !m_isAlternativeTableFormat)\n // {\n // m_isAlternativeTableFormat = true;\n // SerializeTrackChangeProps('tblPrChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, format.OwnerBase as WTable);\n // m_writer.WriteEndElement();\n // m_isAlternativeTableFormat = false;\n // }\n // if (!isNullOrUndefined(format.OwnerRow) && format.OldPropertiesHash.length > 0)\n // {\n // SerializeTrackChangeProps('tblPrExChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, undefined);\n // m_writer.WriteEndElement();\n // }\n // SerializeTblTrackChanges(format);\n if (!isNullOrUndefined(table)) {\n writer.writeEndElement(); //end of tblPr\n }\n };\n // Serialize the table borders\n WordExport.prototype.serializeShading = function (writer, format) {\n // if (format.textureStyle !== 'TextureNone') {\n writer.writeStartElement(undefined, 'shd', this.wNamespace);\n writer.writeAttributeString(undefined, 'fill', this.wNamespace, this.getColor(format.backgroundColor));\n if (format.foregroundColor === 'empty') {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n }\n else {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(format.foregroundColor));\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTextureStyle(format.textureStyle));\n writer.writeEndElement();\n // }\n };\n WordExport.prototype.getTextureStyle = function (textureStyle) {\n switch (textureStyle) {\n case 'Texture5Percent':\n case 'Texture2Pt5Percent':\n case 'Texture7Pt5Percent':\n return 'pct5';\n case 'Texture10Percent':\n return 'pct10';\n case 'Texture12Pt5Percent':\n return 'pct12';\n case 'Texture15Percent':\n case 'Texture17Pt5Percent':\n return 'pct15';\n case 'Texture20Percent':\n case 'Texture22Pt5Percent':\n return 'pct20';\n case 'Texture25Percent':\n case 'Texture27Pt5Percent':\n return 'pct25';\n case 'Texture30Percent':\n case 'Texture32Pt5Percent':\n return 'pct30';\n case 'Texture35Percent':\n return 'pct35';\n case 'Texture37Pt5Percent':\n return 'pct37';\n case 'Texture40Percent':\n case 'Texture42Pt5Percent':\n return 'pct40';\n case 'Texture45Percent':\n case 'Texture47Pt5Percent':\n return 'pct45';\n case 'Texture50Percent':\n case 'Texture52Pt5Percent':\n return 'pct50';\n case 'Texture55Percent':\n case 'Texture57Pt5Percent':\n return 'pct55';\n case 'Texture60Percent':\n return 'pct60';\n case 'Texture62Pt5Percent':\n return 'pct62';\n case 'Texture65Percent':\n case 'Texture67Pt5Percent':\n return 'pct65';\n case 'Texture70Percent':\n case 'Texture72Pt5Percent':\n return 'pct70';\n case 'Texture75Percent':\n case 'Texture77Pt5Percent':\n return 'pct75';\n case 'Texture80Percent':\n case 'Texture82Pt5Percent':\n return 'pct80';\n case 'Texture85Percent':\n return 'pct85';\n case 'Texture87Pt5Percent':\n return 'pct87';\n case 'Texture90Percent':\n case 'Texture92Pt5Percent':\n return 'pct90';\n case 'Texture95Percent':\n case 'Texture97Pt5Percent':\n return 'pct95';\n case 'TextureCross':\n return 'thinHorzCross';\n case 'TextureDarkCross':\n return 'horzCross';\n case 'TextureDarkDiagonalCross':\n return 'diagCross';\n case 'TextureDarkDiagonalDown':\n return 'reverseDiagStripe';\n case 'TextureDarkDiagonalUp':\n return 'diagStripe';\n case 'TextureDarkHorizontal':\n return 'horzStripe';\n case 'TextureDarkVertical':\n return 'vertStripe';\n case 'TextureDiagonalCross':\n return 'thinDiagCross';\n case 'TextureDiagonalDown':\n return 'thinReverseDiagStripe';\n case 'TextureDiagonalUp':\n return 'thinDiagStripe';\n case 'TextureHorizontal':\n return 'thinHorzStripe';\n case 'TextureSolid':\n return 'solid';\n case 'TextureVertical':\n return 'thinVertStripe';\n default:\n return 'clear';\n }\n };\n // Serialize the table borders\n WordExport.prototype.serializeTableBorders = function (writer, format) {\n var borders = format.borders;\n // if (IsNoneBorder(borders))\n // return;\n writer.writeStartElement(undefined, 'tblBorders', this.wNamespace);\n this.serializeBorders(writer, format.borders, 8);\n writer.writeEndElement();\n };\n // Serialize the borders.\n WordExport.prototype.serializeBorders = function (writer, borders, multipler) {\n this.serializeBorder(writer, borders.top, 'top', multipler);\n this.serializeBorder(writer, borders.left, 'left', multipler);\n this.serializeBorder(writer, borders.bottom, 'bottom', multipler);\n this.serializeBorder(writer, borders.right, 'right', multipler);\n this.serializeBorder(writer, borders.horizontal, 'insideH', multipler);\n this.serializeBorder(writer, borders.vertical, 'insideV', multipler);\n this.serializeBorder(writer, borders.diagonalDown, 'tl2br', multipler);\n this.serializeBorder(writer, borders.diagonalUp, 'tr2bl', multipler);\n };\n // Serialize the table layout element\n WordExport.prototype.serializeTblLayout = function (writer, format) {\n //TODO: AUTO size property is not mapped yet\n // if (!format.IsAutoResized)\n // {\n // writer.writeStartElement(undefined, 'tblLayout', this.wNamespace);\n // writer.writeAttributeString(undefined, 'type', this.wNamespace, 'fixed');\n // writer.writeEndElement();\n // }\n };\n // Serializes the Border\n WordExport.prototype.serializeBorder = function (writer, border, tagName, multiplier) {\n var borderStyle = border.lineStyle;\n var sz = (border.lineWidth * multiplier);\n var space = border.space;\n if (borderStyle === 'Cleared') {\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'nil');\n writer.writeEndElement();\n return;\n }\n else if ((borderStyle === 'None' && !border.hasNoneStyle) || sz <= 0) {\n return;\n }\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getBorderStyle(borderStyle));\n // if (border.color === '#000000')\n // {\n // writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n // }\n // else\n // {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(border.color));\n // }\n writer.writeAttributeString(undefined, 'sz', this.wNamespace, this.roundToTwoDecimal(sz).toString());\n writer.writeAttributeString(undefined, 'space', this.wNamespace, space.toString());\n if (border.shadow) {\n writer.writeAttributeString(undefined, 'shadow', this.wNamespace, 'on');\n }\n writer.writeEndElement();\n };\n // Get the border style as string\n WordExport.prototype.getBorderStyle = function (borderStyle) {\n switch (borderStyle) {\n case 'Cleared':\n return 'cleared';\n case 'DashSmallGap':\n return 'dashSmallGap';\n case 'Triple':\n return 'triple';\n case 'Dot':\n return 'dotted';\n case 'DashDot':\n return 'dotDash';\n case 'DashLargeGap':\n return 'dashed';\n case 'DashDotDot':\n return 'dotDotDash';\n case 'Double':\n return 'double';\n case 'ThinThickSmallGap':\n return 'thinThickSmallGap';\n case 'ThickThinSmallGap':\n return 'thickThinSmallGap';\n case 'ThinThickThinSmallGap':\n return 'thinThickThinSmallGap';\n case 'ThickThinMediumGap':\n return 'thickThinMediumGap';\n case 'ThinThickMediumGap':\n return 'thinThickMediumGap';\n case 'ThinThickThinMediumGap':\n return 'thinThickThinMediumGap';\n case 'ThickThinLargeGap':\n return 'thickThinLargeGap';\n case 'ThinThickLargeGap':\n return 'thinThickLargeGap';\n case 'ThinThickThinLargeGap':\n return 'thinThickThinLargeGap';\n case 'Thick':\n return 'thick';\n case 'SingleWavy':\n return 'wave';\n case 'DoubleWavy':\n return 'doubleWave';\n case 'DashDotStroked':\n return 'dashDotStroked';\n case 'Engrave3D':\n return 'threeDEngrave';\n case 'Emboss3D':\n return 'threeDEmboss';\n case 'Outset':\n return 'outset';\n case 'Inset':\n return 'inset';\n // case 'None':\n // return 'none';\n default:\n return 'single';\n }\n };\n // Serialize the table indentation.\n WordExport.prototype.serializeTableIndentation = function (writer, format) {\n writer.writeStartElement(undefined, 'tblInd', this.wNamespace);\n var tableIndent = Math.round(format.leftIndent * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableIndent.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n };\n // Serialize the cell spacing.\n WordExport.prototype.serializeCellSpacing = function (writer, format) {\n if (!isNullOrUndefined(format.cellSpacing) && format.cellSpacing >= 0) {\n writer.writeStartElement(undefined, 'tblCellSpacing', this.wNamespace);\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(format.cellSpacing * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n };\n // Serialize the table width\n WordExport.prototype.serializeTableWidth = function (writer, table) {\n writer.writeStartElement(undefined, 'tblW', this.wNamespace);\n if (table.tableFormat.preferredWidthType === 'Percent') {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, (table.tableFormat.preferredWidth * this.percentageFactor).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n }\n else if (table.tableFormat.preferredWidthType === 'Point') {\n var tableWidth = Math.round(table.tableFormat.preferredWidth * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableWidth.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n else {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n }\n writer.writeEndElement();\n };\n // Serialize the table alignment\n WordExport.prototype.serializeTableAlignment = function (writer, format) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n switch (format.tableAlignment) {\n case 'Right':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'right');\n break;\n case 'Center':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'left');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the field\n WordExport.prototype.serializeFieldCharacter = function (writer, field) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, field.characterFormat);\n writer.writeStartElement(undefined, 'fldChar', this.wNamespace);\n var type = field.fieldType === 0 ? 'begin'\n : field.fieldType === 1 ? 'end' : 'separate';\n writer.writeAttributeString(undefined, 'fldCharType', this.wNamespace, type);\n writer.writeEndElement();\n writer.writeEndElement();\n };\n // Serialize the text range.\n WordExport.prototype.serializeTextRange = function (writer, span, previousNode) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, span.characterFormat);\n if (span.text === '\\t') {\n writer.writeElementString(undefined, 'tab', this.wNamespace, undefined);\n }\n else if (span.text === '\\v') {\n writer.writeElementString(undefined, 'br', this.wNamespace, undefined);\n }\n else if (span.text === '\\f') {\n writer.writeStartElement(undefined, 'br', this.wNamespace);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'page');\n writer.writeEndElement();\n }\n else {\n var isField = !isNullOrUndefined(previousNode)\n && previousNode.hasOwnProperty('fieldType') && previousNode.fieldType !== 2;\n writer.writeStartElement(undefined, isField ? 'instrText' : 't', this.wNamespace);\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString(span.text);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n // Serializes the paragraph format\n WordExport.prototype.serializeParagraphFormat = function (writer, paragraphFormat, paragraph) {\n if (!isNullOrUndefined(paragraphFormat.styleName)) {\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, paragraphFormat.styleName);\n writer.writeEndElement(); //end of pStyle\n }\n if (!isNullOrUndefined(paragraph)) {\n this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n }\n else {\n this.serializeListFormat(writer, paragraphFormat.listFormat);\n }\n this.serializeParagraphSpacing(writer, paragraphFormat);\n this.serializeIndentation(writer, paragraphFormat);\n this.serializeParagraphAlignment(writer, paragraphFormat.textAlignment);\n if (!isNullOrUndefined(paragraphFormat.tabs) && paragraphFormat.tabs.length > 0) {\n this.serializeTabs(writer, paragraphFormat.tabs);\n }\n };\n // Serialize Tabs\n WordExport.prototype.serializeTabs = function (writer, tabStops) {\n writer.writeStartElement('w', 'tabs', this.wNamespace);\n for (var i = 0; i < tabStops.length; i++) {\n this.serializeTab(writer, tabStops[i]);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializeTab = function (writer, tabStop) {\n var position = 0;\n writer.writeStartElement('w', 'tab', this.wNamespace);\n if (tabStop.position === 0 && tabStop.deletePosition !== 0) {\n position = tabStop.deletePosition * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, 'clear');\n }\n else {\n position = tabStop.position * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTabJustification(tabStop.tabJustification));\n }\n if (!isNullOrUndefined(tabStop.tabLeader) && (tabStop.tabLeader !== 'None')) {\n writer.writeAttributeString('w', 'leader', this.wNamespace, this.getTabLeader(tabStop.tabLeader));\n }\n writer.writeAttributeString('w', 'pos', this.wNamespace, position.toString() + '');\n writer.writeEndElement();\n };\n WordExport.prototype.getTabLeader = function (tabLeader) {\n switch (tabLeader) {\n case 'Dot':\n return 'dot';\n case 'Hyphen':\n return 'hyphen';\n case 'Underscore':\n return 'underscore';\n default:\n return 'none';\n }\n };\n WordExport.prototype.getTabJustification = function (tabJustification) {\n switch (tabJustification) {\n case 'Bar':\n return 'bar';\n case 'Center':\n return 'center';\n case 'Decimal':\n return 'decimal';\n case 'Left':\n return 'left';\n case 'List':\n return 'num';\n case 'Right':\n return 'right';\n default:\n return 'clear';\n }\n };\n // // Seraializes the pargraph list format\n // private serializeListParagraph(writer: XmlWriter, paragraph: any): void {\n // if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n // this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n // }\n // }\n // Serialize the list format\n WordExport.prototype.serializeListFormat = function (writer, lf) {\n // let pStyleName = undefined;\n // if (lf.CurrentListStyle.IsBuiltInStyle && !isNullOrUndefined(lf.OwnerParagraph))\n // {\n // pStyleName = lf.OwnerParagraph.StyleName;\n // }\n // int listId = GetListId(lf);\n // if (!isNullOrUndefined(pStyleName) && string.IsNullOrEmpty(lf.LFOStyleName)) \n // {\n // WordDocument doc = lf.OwnerParagraph.Document;\n // WParagraphStyle style = doc.Styles.FindByName(pStyleName, StyleType.ParagraphStyle) as WParagraphStyle;\n // if (style.ListIndex === -1)\n // {\n // ListStyle lstStyle = lf.OwnerParagraph.Document.ListStyles.FindByName(lf.CustomStyleName);\n // style.ListIndex = listId;\n // if (lstStyle.Levels.length > 1)\n // {\n // style.ListLevel = lf.ListLevelNumber;\n // }\n // pStyleName = pStyleName.Replace(' ', '');\n // lstStyle.Levels[lf.ListLevelNumber].ParaStyleName = pStyleName;\n // }\n // }\n // else\n // {\n // if (!isNullOrUndefined(lf.listId) && !isNullOrUndefined(lf.listLevelNumber)) {\n // this.serializeNumPr(writer, lf.listId, lf.listLevelNumber);\n // }\n // }\n if (!isNullOrUndefined(lf.listId) || !isNullOrUndefined(lf.listLevelNumber)) {\n writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n if (!isNullOrUndefined(lf.listLevelNumber) && lf.listLevelNumber !== -1) {\n writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, lf.listLevelNumber.toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(lf.listId) && lf.listId !== -1) {\n writer.writeStartElement(undefined, 'numId', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, (lf.listId + 1).toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // // Serializes the numbering properties to the paragraph\n // private serializeNumPr(writer: XmlWriter, listId: number, listLevel: number): void {\n // writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n // if (listLevel !== -1) {\n // writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listLevel.toString());\n // writer.writeEndElement();\n // }\n // if (listId !== -1) {\n // writer.writeStartElement(undefined, 'numId', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listId.toString());\n // writer.writeEndElement();\n // }\n // writer.writeEndElement();\n // }\n WordExport.prototype.serializeParagraphAlignment = function (writer, txtAlignment) {\n if (!isNullOrUndefined(txtAlignment)) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n var alignment = void 0;\n switch (txtAlignment) {\n case 'Center':\n alignment = 'center';\n break;\n case 'Right':\n alignment = 'right';\n break;\n case 'Justify':\n alignment = 'both';\n break;\n default:\n alignment = 'left';\n break;\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, alignment);\n writer.writeEndElement();\n }\n };\n // Serializes the paragraph spacings\n WordExport.prototype.serializeParagraphSpacing = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'spacing', this.wNamespace);\n // if (paragraphFormat.HasValue(WParagraphFormat.BeforeLinesKey))\n // {\n // short beforeLines = (short)Math.Round(paragraphFormat.BeforeLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('beforeLines', this.wNamespace, ToString((float)beforeLines)); \n // }\n // if (paragraphFormat.HasValue(WParagraphFormat.AfterLinesKey))\n // {\n // short afterLines = (short)Math.Round(paragraphFormat.AfterLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('afterLines', this.wNamespace, ToString((float)afterLines)); \n // }\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(paragraphFormat.beforeSpacing)) {\n writer.writeAttributeString(undefined, 'before', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n }\n //TODO:ISSUEFIX(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingBeforeAutoKey))\n // {\n // if (paragraphFormat.SpaceBeforeAuto)\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '0');\n // }\n // }\n if (!isNullOrUndefined(paragraphFormat.afterSpacing)) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'after', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n }\n //TODO:ISSUEFIX(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingAfterAutoKey))\n // {\n // if (paragraphFormat.SpaceAfterAuto)\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '0');\n // }\n // }\n writer.writeAttributeString(undefined, 'line', this.wNamespace, '240');\n //TODO:ISSUEFIX((paragraphFormat.lineSpacing) * this.twentiethOfPoint).toString());\n switch (paragraphFormat.lineSpacingType) {\n case 'AtLeast':\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, 'atLeast');\n break;\n case 'Exactly':\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, 'exact');\n break;\n default:\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, 'auto');\n break;\n }\n writer.writeEndElement();\n };\n // Serializes the paragraph indentation\n WordExport.prototype.serializeIndentation = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'ind', this.wNamespace);\n if (!isNullOrUndefined(paragraphFormat.leftIndent)) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'left', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.leftIndent * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.rightIndent)) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'right', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.rightIndent * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n if (paragraphFormat.firstLineIndent < 0) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'hanging', this.wNamespace, this.roundToTwoDecimal(-1 * paragraphFormat.firstLineIndent * this.twipsInOnePoint).toString());\n }\n else {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'firstLine', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.firstLineIndent * this.twipsInOnePoint).toString());\n }\n }\n writer.writeEndElement();\n };\n // Serialize the styles (styles.xml)\n WordExport.prototype.serializeStyles = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'styles', this.wNamespace);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n //writes the document defaults, latent styles and default styles.\n this.serializeDefaultStyles(writer);\n //writes the document styles\n this.serializeDocumentStyles(writer);\n writer.writeEndElement(); //end of styles tag\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.stylePath);\n this.mArchive.addItem(zipArchiveItem); //this.stylePath, styleStream, false, FileAttributes.Archive);\n };\n // Serializes the default styles (document default paragraph and character format)\n WordExport.prototype.serializeDefaultStyles = function (writer) {\n writer.writeStartElement(undefined, 'docDefaults', this.wNamespace);\n //if (HasDefaultCharFormat())\n //{\n writer.writeStartElement(undefined, 'rPrDefault', this.wNamespace);\n // if (!isNullOrUndefined(this.mDocument.characterFormat)) {\n this.serializeCharacterFormat(writer, this.defCharacterFormat);\n writer.writeEndElement(); // end of rPrDefault\n // }\n // else {\n // writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n // writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n // if (!string.IsNullOrEmpty(m_document.StandardAsciiFont))\n // writer.WriteAttributeString('ascii', this.wNamespace, m_document.StandardAsciiFont);\n // if (!string.IsNullOrEmpty(m_document.StandardFarEastFont))\n // writer.WriteAttributeString('eastAsia', this.wNamespace, m_document.StandardFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardNonFarEastFont))\n // writer.WriteAttributeString('hAnsi', this.wNamespace, m_document.StandardNonFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardBidiFont))\n // writer.WriteAttributeString('cs', this.wNamespace, m_document.StandardBidiFont);\n // writer.WriteEndElement();\n // float fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('sz', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeBidiKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('szCs', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // //}\n writer.writeStartElement(undefined, 'pPrDefault', this.wNamespace);\n if (!isNullOrUndefined(this.defParagraphFormat)) {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, this.defParagraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n }\n writer.writeEndElement(); //end of pPrDefault\n // writer.WriteEndElement();\n // SerializeLatentStyles();\n // //Default styles\n // if (m_document.Styles.length === 0 || isNullOrUndefined(m_document.Styles.FindByName('Normal')))\n // {\n // SerializeDefaultParagraphStyle();\n // }\n // if (!IsDocumentContainsDefaultTableStyle())\n // {\n // SerializeTableNormalStyle();\n // }\n // if (isNullOrUndefined(m_document.Styles.FindByName('No List')) && isNullOrUndefined(m_document.Styles.FindByName('NoList')))\n // SerializeNoListStyle();\n // tslint:disable-next-line:max-line-length\n // if (isNullOrUndefined(m_document.Styles.FindByName('Table Grid')) && isNullOrUndefined(m_document.Styles.FindByName('TableGrid')))\n // {\n // SerializeTableGridStyle();\n // }\n // } \n writer.writeEndElement();\n };\n WordExport.prototype.serializeDocumentStyles = function (writer) {\n for (var i = 0; i < this.mStyles.length; i++) {\n var style = this.mStyles[i];\n writer.writeStartElement(undefined, 'style', this.wNamespace);\n var type = style.type === 'Paragraph' ? 'paragraph' : 'character';\n writer.writeAttributeString('w', 'type', this.wNamespace, type);\n writer.writeAttributeString('w', 'styleId', this.wNamespace, style.name);\n //name\n writer.writeStartElement(undefined, 'name', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.name);\n writer.writeEndElement();\n //basedOn\n if (!isNullOrUndefined(style.basedOn)) {\n writer.writeStartElement(undefined, 'basedOn', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.basedOn);\n writer.writeEndElement();\n }\n //next\n if (!isNullOrUndefined(style.next)) {\n writer.writeStartElement(undefined, 'next', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.next);\n writer.writeEndElement();\n }\n //link\n if (!isNullOrUndefined(style.link)) {\n writer.writeStartElement(undefined, 'link', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.link);\n writer.writeEndElement();\n }\n if (style.type === 'Paragraph') {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, style.paragraphFormat, undefined);\n writer.writeEndElement();\n }\n // let value = (style.characterFormat as WCharacterFormat).newgetCharacterFormat();\n this.serializeCharacterFormat(writer, style.characterFormat);\n writer.writeEndElement(); //end of Style\n }\n };\n // Serializes the Character format\n WordExport.prototype.serializeCharacterFormat = function (writer, characterFormat) {\n writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n if (!isNullOrUndefined(characterFormat.styleName)) {\n writer.writeStartElement(undefined, 'rStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, characterFormat.styleName);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontFamily)) {\n writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n writer.writeAttributeString(undefined, 'ascii', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'hAnsi', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'eastAsia', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'cs', this.wNamespace, characterFormat.fontFamily);\n writer.writeEndElement(); //end \n }\n if (!isNullOrUndefined(characterFormat.bold)) {\n this.serializeBoolProperty(writer, 'b', characterFormat.bold);\n }\n if (!isNullOrUndefined(characterFormat.italic)) {\n this.serializeBoolProperty(writer, 'i', characterFormat.italic);\n }\n if (!isNullOrUndefined(characterFormat.strikethrough)) {\n switch (characterFormat.strikethrough) {\n case 'SingleStrike':\n this.serializeBoolProperty(writer, 'strike', true);\n break;\n case 'DoubleStrike':\n this.serializeBoolProperty(writer, 'dstrike', true);\n break;\n default:\n this.serializeBoolProperty(writer, 'strike', false);\n this.serializeBoolProperty(writer, 'dstrike', false);\n break;\n }\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n writer.writeStartElement(undefined, 'color', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getColor(characterFormat.fontColor));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n writer.writeStartElement(undefined, 'sz', this.wNamespace);\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString('w', 'val', this.wNamespace, this.roundToTwoDecimal(characterFormat.fontSize * 2).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.highlightColor) && characterFormat.highlightColor !== 'NoColor') {\n writer.writeStartElement(undefined, 'highlight', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getHighlightColor(characterFormat.highlightColor));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.underline) && characterFormat.underline !== 'None') {\n writer.writeStartElement(undefined, 'u', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getUnderlineStyle(characterFormat.underline));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.baselineAlignment)) {\n writer.writeStartElement(undefined, 'vertAlign', this.wNamespace);\n switch (characterFormat.baselineAlignment) {\n case 'Subscript':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'subscript');\n break;\n case 'Superscript':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'superscript');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'baseline');\n break;\n }\n writer.writeEndElement();\n }\n writer.writeEndElement(); //end of rPrChange\n };\n WordExport.prototype.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n color = color.substr(1);\n }\n if (color.length > 6) {\n color = color.substr(0, 6);\n }\n }\n return color;\n };\n // Get the underline style as string\n WordExport.prototype.getUnderlineStyle = function (underlineStyle) {\n switch (underlineStyle) {\n case 'DotDotDashHeavy':\n return 'dashDotDotHeavy';\n case 'DotDashHeavy':\n return 'dashDotHeavy';\n case 'DashHeavy':\n return 'dashedHeavy';\n case 'DashLong':\n return 'dashLong';\n case 'DashLongHeavy':\n return 'dashLongHeavy';\n case 'DotDash':\n return 'dotDash';\n case 'DotDotDash':\n return 'dotDotDash';\n case 'Dotted':\n return 'dotted';\n case 'DottedHeavy':\n return 'dottedHeavy';\n case 'Double':\n return 'double';\n case 'Single':\n return 'single';\n case 'Thick':\n return 'thick';\n case 'Wavy':\n return 'wave';\n case 'WavyDouble':\n return 'wavyDouble';\n case 'WavyHeavy':\n return 'wavyHeavy';\n case 'Words':\n return 'words';\n default:\n return 'dash';\n }\n };\n WordExport.prototype.getHighlightColor = function (highlight) {\n switch (highlight) {\n // Highlights the content with bright green (#ff00ff00) color.\n case 'BrightGreen':\n return 'green';\n // Highlights the content with turquoise (#ff00ffff) color.\n case 'Turquoise':\n return 'cyan';\n // Highlights the content with pink (#ffff00ff) color.\n case 'Pink':\n return 'magenta';\n // Highlights the content with blue (#ff0000ff) color.\n case 'Blue':\n return 'blue';\n // Highlights the content with red (#ffff0000) color.\n case 'Red':\n return 'red';\n // Highlights the content with dark blue (#ff000080) color.\n case 'DarkBlue':\n return 'darkBlue';\n // Highlights the content with teal (#ff008080) color.\n case 'Teal':\n return 'darkCyan';\n // Highlights the content with green (#ff008000) color.\n case 'Green':\n return 'darkGreen';\n // Highlights the content with violet (#ff800080) color.\n case 'Violet':\n return 'darkMagenta';\n // Highlights the content with dark red (#ff800000) color.\n case 'DarkRed':\n return 'darkRed';\n // Highlights the content with dark yellow (#ff808000) color.\n case 'DarkYellow':\n return 'darkYellow';\n // Highlights the content with gray 50 (#ff808080) color.\n case 'Gray50':\n return 'darkGray';\n // Highlights the content with gray 25 (#ffc0c0c0) color.\n case 'Gray25':\n return 'lightGray';\n // Highlights the content with black (#ff000000) color.\n case 'Black':\n return 'black';\n // Highlights the content with yellow (#ffffff00) color.\n default:\n return 'yellow';\n }\n };\n /*private toggleFirstCahar(text: string) {\n return text.charAt(0).toLowerCase() + text.slice(1);\n }*/\n // Serializes the bool character format property\n WordExport.prototype.serializeBoolProperty = function (writer, tag, value) {\n writer.writeStartElement(undefined, tag, this.wNamespace);\n if (!value) {\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n };\n // Serialize the list styles and numberings (numberings.xml)\n WordExport.prototype.serializeNumberings = function () {\n if (this.document.lists.length === 0) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'numbering', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n // this.serializePictureBullets(writer, this.mDocument.lists);\n this.serializeAbstractListStyles(writer, this.document.abstractLists);\n this.serializeListInstances(writer, this.document.lists);\n // SerializeListOverrides(writer, this.mDocument.ridesm_document.ListOverrides);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.numberingPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the abstract list styles\n WordExport.prototype.serializeAbstractListStyles = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var abstractList = listStyles[i];\n writer.writeStartElement(undefined, 'abstractNum', this.wNamespace);\n writer.writeAttributeString(undefined, 'abstractNumId', this.wNamespace, abstractList.abstractListId.toString());\n writer.writeStartElement(undefined, 'nsid', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.generateHex());\n writer.writeEndElement();\n for (var ilvl = 0, cnt = abstractList.levels.length; ilvl < cnt; ilvl++) {\n this.serializeListLevel(writer, abstractList.levels[ilvl], ilvl);\n }\n writer.writeEndElement(); //end of abstractNum\n }\n };\n // Serializes the list styles\n WordExport.prototype.serializeListInstances = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var list = listStyles[i];\n writer.writeStartElement(undefined, 'num', this.wNamespace);\n writer.writeAttributeString(undefined, 'numId', this.wNamespace, (list.listId + 1).toString());\n writer.writeStartElement(undefined, 'abstractNumId', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, list.abstractListId.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n WordExport.prototype.generateHex = function () {\n return (Math.floor(Math.random() * (4000000000 - 270000000)) + 270000000).toString(16).toUpperCase();\n };\n WordExport.prototype.roundToTwoDecimal = function (num) {\n return Math.round(num); // * 100) / 100;\n };\n // Serialize the list level\n WordExport.prototype.serializeListLevel = function (writer, listLevel, levelIndex) {\n writer.writeStartElement(undefined, 'lvl', this.wNamespace);\n writer.writeAttributeString(undefined, 'ilvl', this.wNamespace, levelIndex.toString());\n writer.writeStartElement(undefined, 'start', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, listLevel.startAt.toString());\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getLevelPattern(listLevel.listLevelPattern));\n writer.writeEndElement();\n if (listLevel.restartLevel > 0) {\n writer.writeStartElement(undefined, 'lvlRestart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n writer.writeEndElement();\n }\n // if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n // string name = listLevel.ParaStyleName.Substring(0, 1).ToUpper() + listLevel.ParaStyleName.Remove(0, 1);\n // writer.WriteStartElement('pStyle', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, name);\n // writer.WriteEndElement();\n // }\n // if (listLevel.IsLegalStyleNumbering) {\n // writer.WriteStartElement('isLgl', this.wNamespace);\n // writer.WriteEndElement();\n // }\n this.serializeLevelFollow(writer, listLevel);\n this.serializeLevelText(writer, listLevel, levelIndex + 1);\n // SerializeLegacyProperties(listLevel);\n // if (listLevel.PicBulletId > 0) {\n // writer.WriteStartElement('lvlPicBulletId', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, listLevel.PicBulletId.ToString());\n // writer.WriteEndElement();\n // }\n // //lvlJc\n // if (listLevel.NumberAlignment !== ListNumberAlignment.Left) {\n // writer.WriteStartElement('lvlJc', this.wNamespace);\n // string alignment = string.Empty;\n // if (listLevel.NumberAlignment === ListNumberAlignment.Right) {\n // alignment = 'right';\n // }\n // else {\n // alignment = 'center';\n // }\n // writer.WriteAttributeString('val', this.wNamespace, alignment);\n // writer.WriteEndElement();\n // }\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, listLevel.paragraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n this.serializeCharacterFormat(writer, listLevel.characterFormat);\n writer.writeEndElement();\n };\n WordExport.prototype.getLevelPattern = function (levelPattern) {\n var patternType;\n switch (levelPattern) {\n case 'Arabic':\n patternType = 'decimal';\n break;\n case 'UpRoman':\n patternType = 'upperRoman';\n break;\n case 'LowRoman':\n patternType = 'lowerRoman';\n break;\n case 'UpLetter':\n patternType = 'upperLetter';\n break;\n case 'LowLetter':\n patternType = 'lowerLetter';\n break;\n // case 'Ordinal':\n // patternType = 'ordinal';\n // break;\n // case 'Number':\n // patternType = 'cardinalText';\n // break;\n // case 'OrdinalText':\n // patternType = 'ordinalText';\n // break;\n // case 'LeadingZero':\n // patternType = 'decimalZero';\n // break;\n // case 'Bullet':\n default:\n patternType = 'bullet';\n break;\n // case 'FarEast':\n // patternType = 'aiueoFullWidth';\n // break;\n // case 'Special':\n // patternType = 'russianLower';\n // break;\n // case 'None':\n // patternType = 'none';\n // break;\n }\n return patternType;\n };\n // Serializes the level text\n WordExport.prototype.serializeLevelText = function (writer, listLevel, lvlIndex) {\n writer.writeStartElement(undefined, 'lvlText', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (listLevel.numberFormat));\n writer.writeEndElement();\n };\n // Serialize the level follow character\n WordExport.prototype.serializeLevelFollow = function (writer, listLevel) {\n var fc;\n //TODO:Type issue returns number instead of string\n if (listLevel.followCharacter === 'Tab') {\n fc = 'tab';\n }\n else if (listLevel.followCharacter === 'Space') {\n fc = 'space';\n }\n else {\n fc = 'nothing';\n }\n writer.writeStartElement(undefined, 'suff', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, fc);\n writer.writeEndElement();\n };\n WordExport.prototype.serializeSettings = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'settings', this.wNamespace);\n this.writeCustom(writer);\n // writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n // writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n // writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n // writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n // writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'sl', undefined, this.slNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n // //w:writeProtection - Write Protection\n // if (m_document.WriteProtected)\n // {\n // writer.writeStartElement('w', 'writeProtection', this.wNamespace);\n // writer.writeAttributeString('recommended', this.wNamespace, '1');\n // writer.writeEndElement();\n // }\n //w:view - Document View Setting\n // if (this.mDocument.ViewSetup.DocumentViewType !== DocumentViewType.PrintLayout &&\n // m_document.ViewSetup.DocumentViewType !== DocumentViewType.NormalLayout)\n // {\n // writer.writeStartElement('view', this.wNamespace);\n // string viewTypeStr = string.Empty;\n // if (m_document.ViewSetup.DocumentViewType === DocumentViewType.OutlineLayout)\n // {\n // viewTypeStr = 'outline';\n // }\n // else if (m_document.ViewSetup.DocumentViewType === DocumentViewType.WebLayout)\n // {\n // viewTypeStr = 'web';\n // }\n // writer.writeAttributeString('val', this.wNamespace, viewTypeStr);\n // writer.writeEndElement();\n // }\n //w:zoom - Magnification Setting\n writer.writeStartElement('w', 'zoom', this.wNamespace);\n // switch (m_document.ViewSetup.ZoomType)\n // {\n // case ZoomType.FullPage:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'fullPage');\n // break;\n // case ZoomType.PageWidth:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'bestFit');\n // break;\n // case ZoomType.TextFit:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'textFit');\n // break;\n // default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'none');\n // break;\n // }\n writer.writeAttributeString('w', 'percent', this.wNamespace, '100');\n writer.writeEndElement();\n //w:displayBackgroundShape - Display Background Objects When Displaying Document\n // if (m_document.Background.Type !== BackgroundType.NoBackground)\n // {\n writer.writeStartElement(undefined, 'displayBackgroundShape', this.wNamespace);\n writer.writeEndElement();\n // }\n //w:defaultTabStop - Distance Between Automatic Tab Stops\n writer.writeStartElement(undefined, 'defaultTabStop', this.wNamespace);\n var tabWidth = Math.round(this.defaultTabWidthValue * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, tabWidth.toString());\n writer.writeEndElement();\n //w:evenAndOddHeaders - Different Even/Odd Page Headers and Footers \n if (this.mDifferentFirstPage) {\n writer.writeStartElement(undefined, 'evenAndOddHeaders', this.wNamespace);\n writer.writeEndElement();\n }\n //w:footnotePr - Document-Wide Footnote Properties and w:endnotePr - Document-Wide Endnote Properties\n // SerializeFootnoteSettings();\n //w:compat - Compatibility Settings\n writer.writeStartElement(undefined, 'compat', this.wNamespace);\n writer.writeStartElement(undefined, 'compatSetting', this.wNamespace);\n writer.writeAttributeString(undefined, 'name', this.wNamespace, 'compatibilityMode');\n writer.writeAttributeString(undefined, 'uri', this.wNamespace, 'http://schemas.microsoft.com/office/word');\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '15');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.settingsPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCoreProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeAppProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeFontTable = function (contentType) {\n //implementation\n };\n WordExport.prototype.serializeSettingsRelation = function () {\n //implementation\n };\n WordExport.prototype.serializeHeaderFooters = function () {\n this.serializeHeaderFooter('EvenFooter');\n this.serializeHeaderFooter('EvenHeader');\n this.serializeHeaderFooter('FirstPageFooter');\n this.serializeHeaderFooter('FirstPageHeader');\n this.serializeHeaderFooter('OddFooter');\n this.serializeHeaderFooter('OddHeader');\n };\n // Serializes the Header/Footer\n WordExport.prototype.serializeHeaderFooter = function (hfType) {\n if (this.headersFooters.length === 0) {\n return;\n }\n var headerFooterPath;\n var headerFooterRelsPath;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n var hf = undefined;\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n hf = hfColl.get(id);\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = this.headerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.headerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeHeader(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n else {\n headerFooterPath = this.footerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.footerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeFooter(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n }\n };\n // Serialize the header part\n WordExport.prototype.serializeHeader = function (header, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = header;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'hdr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n var owner = this.blockOwner;\n this.blockOwner = header;\n this.serializeBodyItems(writer, header.blocks, true);\n this.blockOwner = owner;\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n this.headerFooter = undefined;\n };\n // Serializes the HeaderFooter relations\n WordExport.prototype.serializeHFRelations = function (hfId, headerFooterRelsPath) {\n var hasHFImage = this.headerFooterImages.containsKey(hfId);\n // let hasHFHyperlinks = HeaderFooterHyperlinks.ContainsKey(hfId);\n // let hasHFInclPics = HeaderFooterInclPicUrls.ContainsKey(hfId);\n // let hasHFAlternateChunks = HeaderFooterAlternateChunks.ContainsKey(hfId);\n if (hasHFImage) { // || hasHFHyperlinks ||hasHFAlternateChunks\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeImagesRelations(this.headerFooterImages.get(hfId), writer);\n // if (hasHFHyperlinks)\n // SerializeHyperlinkRelations(stream, HeaderFooterHyperlinks[hfId]);\n // if (hasHFAlternateChunks)\n // SerializeAltChunkRelations(stream, HeaderFooterAlternateChunks[hfId]);\n // if (hasHFInclPics)\n // SerializeIncludePictureUrlRelations(stream, HeaderFooterInclPicUrls[hfId]);\n // if (HFOleContainers.ContainsKey(hfId))\n // {\n // AddOLEToZip(HFOleContainers[hfId]);\n // }\n // if (HFRelations.ContainsKey(hfId))\n // SerializeHFCommonRelations(stream, HFRelations[hfId]);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterRelsPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n else {\n return;\n }\n };\n WordExport.prototype.writeHFCommonAttributes = function (writer) {\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 've', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString('xmlns', 'pic', undefined, this.pictureNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('ve', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n // Serailize the footer and its relations\n WordExport.prototype.serializeFooter = function (footer, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = footer;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'ftr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n this.serializeBodyItems(writer, footer.blocks, true);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n };\n WordExport.prototype.serializeDocumentRelations = function () {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.stylesRelType, 'styles.xml');\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.settingsRelType, 'settings.xml');\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.ThemeRelType, 'theme/theme1.xml');\n if (this.document.lists.length > 0) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.numberingRelType, 'numbering.xml');\n }\n this.serializeHeaderFooterRelations(writer);\n // if (HasFontTable) {\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.FontTableRelType, 'fontTable.xml');\n // }\n // SerializeIncludePictureUrlRelations(docRelstream, InclPicFieldUrl);\n // //// Creating relationships for every hyperlink and image containing in the document\n this.serializeImagesRelations(this.documentImages, writer);\n // SerializeSvgImageRelation();\n //this.serializeExternalLinkImages(writer);\n // if (HasHyperlink && HyperlinkTargets.length > 0) {\n // SerializeHyperlinkRelations(docRelstream, HyperlinkTargets);\n // }\n // if (m_document.HasMacros\n // && IsMacroEnabled)\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.VbaProjectRelType, this.VbaProject);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.wordRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n this.headerFooter = undefined;\n };\n // Serializes the image relations\n WordExport.prototype.serializeImagesRelations = function (images, writer) {\n if (images.length > 0) {\n var imagePath = '';\n var base64ImageString = void 0;\n var keys = images.keys;\n for (var i = 0; i < keys.length; i++) {\n var mImage = images.get(keys[i]);\n base64ImageString = mImage.imageString;\n if (isNullOrUndefined(base64ImageString)) {\n imagePath = this.imagePath + '/0.jpeg';\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n }\n else {\n var extension = '';\n var formatClippedString = '';\n if (this.startsWith(base64ImageString, 'data:image/bmp;base64,')) {\n extension = '.bmp';\n formatClippedString = base64ImageString.replace('data:image/bmp;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-emf;base64,')) {\n extension = '.emf';\n formatClippedString = base64ImageString.replace('data:image/x-emf;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/exif;base64,')) {\n extension = '.exif';\n formatClippedString = base64ImageString.replace('data:image/exif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/gif;base64,')) {\n extension = '.gif';\n formatClippedString = base64ImageString.replace('data:image/gif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/icon;base64,')) {\n extension = '.ico';\n formatClippedString = base64ImageString.replace('data:image/icon;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpeg;base64,')) {\n extension = '.jpeg';\n formatClippedString = base64ImageString.replace('data:image/jpeg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpg;base64,')) {\n extension = '.jpg';\n formatClippedString = base64ImageString.replace('data:image/jpg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/png;base64,')) {\n extension = '.png';\n formatClippedString = base64ImageString.replace('data:image/png;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/tiff;base64,')) {\n extension = '.tif';\n formatClippedString = base64ImageString.replace('data:image/tiff;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-wmf;base64,')) {\n extension = '.wmf';\n formatClippedString = base64ImageString.replace('data:image/x-wmf;base64,', '');\n }\n else {\n extension = '.jpeg';\n }\n imagePath = this.imagePath + keys[i] + extension;\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n //if (m_archive.Find(imagePath.Replace('\\\\', '/')) === -1)\n // {\n var imageBlob = new Blob([this.encodedString(formatClippedString)]);\n var zipArchiveItem = new ZipArchiveItem(imageBlob, imagePath);\n // let TestArchive = new ZipArchive();\n this.mArchive.addItem(zipArchiveItem);\n // TestArchive.save('image.zip').then(function (): void {\n // TestArchive.destroy();\n // });\n // }\n }\n }\n }\n };\n /**\n * @private\n */\n WordExport.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = keyStr.indexOf(input.charAt(i++));\n enc2 = keyStr.indexOf(input.charAt(i++));\n enc3 = keyStr.indexOf(input.charAt(i++));\n enc4 = keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n if (enc3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (enc4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n WordExport.prototype.serializeExternalLinkImages = function (writer) {\n var imagePath = '';\n var keys = this.externalImages.keys;\n for (var i = 0; i < this.externalImages.keys.length; i++) {\n this.serializeRelationShip(writer, keys[i], this.imageRelType, this.externalImages.get(keys[i]));\n }\n };\n // Serializes the HeaderFooters relations to the document relations stream\n WordExport.prototype.serializeHeaderFooterRelations = function (writer) {\n this.serializeHFRelation(writer, 'EvenFooter');\n this.serializeHFRelation(writer, 'EvenHeader');\n this.serializeHFRelation(writer, 'FirstPageFooter');\n this.serializeHFRelation(writer, 'FirstPageHeader');\n this.serializeHFRelation(writer, 'OddFooter');\n this.serializeHFRelation(writer, 'OddHeader');\n };\n // Serializes the headers footers relations.\n WordExport.prototype.serializeHFRelation = function (writer, hfType) {\n var headerFooterPath = '';\n var relType;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = 'header' + id.replace('rId', '') + '.xml';\n relType = this.headerRelType;\n }\n else {\n headerFooterPath = 'footer' + id.replace('rId', '') + '.xml';\n relType = this.footerRelType;\n }\n this.serializeRelationShip(writer, id, relType, headerFooterPath);\n }\n };\n // Serializes the relationship\n WordExport.prototype.serializeRelationShip = function (writer, relationshipID, relationshipType, targetPath) {\n writer.writeStartElement(undefined, 'Relationship', undefined);\n writer.writeAttributeString(undefined, 'Id', undefined, relationshipID);\n writer.writeAttributeString(undefined, 'Type', undefined, relationshipType);\n writer.writeAttributeString(undefined, 'Target', undefined, targetPath.replace('\\\\', '/').replace('\\v', ''));\n // tslint:disable-next-line:max-line-length\n if (relationshipType === this.hyperlinkRelType || this.startsWith(targetPath, 'http://') || this.startsWith(targetPath, 'https://') || this.startsWith(targetPath, 'file:///')) {\n // Uri targetUri;\n // if ((!targetPath.StartsWith('file:///')) && Uri.TryCreate(targetPath, UriKind.Absolute, out targetUri))\n // {\n // //Handled using Try catch to avoid exception if the Host name type is None because in \n //Silverlight 'HostNameType' property is not available.\n // try\n // {\n // m_writer.WriteAttributeString('Target', targetUri.AbsoluteUri);\n // }\n // catch\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n // }\n // else\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n writer.writeAttributeString(undefined, 'TargetMode', undefined, 'External');\n }\n writer.writeEndElement();\n };\n // Get the next relationship ID\n WordExport.prototype.getNextRelationShipID = function () {\n return 'rId' + (++this.mRelationShipID);\n };\n WordExport.prototype.serializeGeneralRelations = function () {\n var writer = new XmlWriter();\n this.resetRelationShipID();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.documentRelType, this.documentPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.AppRelType, this.appPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.CoreRelType, this.corePath);\n //End of Relationships tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.generalRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeContentTypes = function (contentType) {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Types', 'http://schemas.openxmlformats.org/package/2006/content-types');\n //if (m_hasOleObject)\n //{\n // //\n // SerializeDefaultContentType(contentStream, 'bin', 'application/vnd.openxmlformats-officedocument.oleObject');\n //}\n this.serializeDefaultContentType(writer, 'rels', this.relationContentType);\n this.serializeDefaultContentType(writer, 'xml', this.xmlContentType);\n // if (m_hasEmbedFonts && !string.IsNullOrEmpty(type))\n // {\n // SerializeDefaultContentType(contentStream,type, this.fontContentType);\n // }\n if (this.documentImages.length > 0 || this.externalImages.length > 0 || this.headerFooterImages.length > 0) {\n this.serializeDefaultContentType(writer, 'png', 'image/png');\n this.serializeDefaultContentType(writer, 'bmp', 'image/bmp');\n this.serializeDefaultContentType(writer, 'emf', 'image/x-emf');\n this.serializeDefaultContentType(writer, 'wmf', 'image/x-wmf');\n this.serializeDefaultContentType(writer, 'gif', 'image/gif');\n this.serializeDefaultContentType(writer, 'ico', 'image/x-icon');\n this.serializeDefaultContentType(writer, 'tif', 'image/tiff');\n this.serializeDefaultContentType(writer, 'tiff', 'image/tiff');\n this.serializeDefaultContentType(writer, 'jpeg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'jpg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'svg', 'image/svg+xml');\n }\n // if (m_document.HasMacros\n // && IsMacroEnabled && !m_isSkipBinExtension)\n // {\n // SerializeDefaultContentType(contentStream, 'bin', this.VbaProjectContentType);\n // m_isSkipBinExtension = true;\n // }\n // if (m_hasOleObject)\n // {\n // SerializeOleContentType(contentStream);\n // }\n //document.xml\n this.serializeOverrideContentType(writer, this.documentPath, this.documentContentType);\n // tslint:disable-next-line:max-line-length\n //\n // if (HasNumbering) {\n this.serializeOverrideContentType(writer, this.numberingPath, this.numberingContentType);\n // }\n //Add the header/footer Alternate chunks\n // if (HeaderFooterAlternateChunks.length > 0) {\n // foreach(Dictionary < string, string > item in m_headerFooterAlternateChunks.Values)\n // AddAlternateChunkItem(item);\n // }\n //styles.xml\n this.serializeOverrideContentType(writer, this.stylePath, this.stylesContentType);\n //settings.xml\n this.serializeOverrideContentType(writer, this.settingsPath, this.settingsContentType);\n // //core.xml\n // SerializeOverrideContentType(contentStream, this.corePath, this.CoreContentType);\n // //app.xml\n // SerializeOverrideContentType(contentStream, this.appPath, this.AppContentType);\n // //custom.xml\n // if (!isNullOrUndefined(m_document.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0)\n // SerializeOverrideContentType(contentStream, this.CustomPath, this.CustomContentType);\n // #if Chart\n // if (m_hasChart)\n // SerializeChartContentType(contentStream);\n // #endif\n this.serializeHFContentTypes(writer);\n // WriteXmlItemsContentTypes(contentStream);\n //End of Types tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.contentTypesPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the HeaderFooter content types\n WordExport.prototype.serializeHFContentTypes = function (writer) {\n this.serializeHeaderFootersContentType(writer, 'EvenFooter');\n this.serializeHeaderFootersContentType(writer, 'EvenHeader');\n this.serializeHeaderFootersContentType(writer, 'FirstPageFooter');\n this.serializeHeaderFootersContentType(writer, 'FirstPageHeader');\n this.serializeHeaderFootersContentType(writer, 'OddFooter');\n this.serializeHeaderFootersContentType(writer, 'OddHeader');\n };\n // Serializes the HeaderFooter content types.\n WordExport.prototype.serializeHeaderFootersContentType = function (writer, headerFooterType) {\n var contentType;\n var partName;\n if (!this.headersFooters.containsKey(headerFooterType)) {\n return;\n }\n var hfColl = this.headersFooters.get(headerFooterType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (headerFooterType === 'EvenHeader' || headerFooterType === 'FirstPageHeader' ||\n headerFooterType === 'OddHeader') {\n partName = this.headerPath + id.replace('rId', '') + '.xml';\n contentType = this.headerContentType;\n }\n else {\n partName = this.footerPath + id.replace('rId', '') + '.xml';\n contentType = this.footerContentType;\n }\n this.serializeOverrideContentType(writer, partName, contentType);\n }\n };\n // Serializes the Override content type.\n WordExport.prototype.serializeOverrideContentType = function (writer, partName, contentType) {\n writer.writeStartElement(undefined, 'Override', undefined);\n writer.writeAttributeString(undefined, 'PartName', undefined, '/' + partName.replace('\\\\', '/'));\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Serializes the default content type\n WordExport.prototype.serializeDefaultContentType = function (writer, extension, contentType) {\n writer.writeStartElement(undefined, 'Default', undefined);\n writer.writeAttributeString(undefined, 'Extension', undefined, extension);\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Reset the relationship id counter\n WordExport.prototype.resetRelationShipID = function () {\n this.mRelationShipID = 0;\n };\n WordExport.prototype.close = function () {\n //Implement\n };\n return WordExport;\n}());\nexport { WordExport };\n","import { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Exports the document to Text format.\n */\nvar TextExport = /** @class */ (function () {\n function TextExport() {\n this.text = '';\n this.curSectionIndex = 0;\n this.inField = false;\n }\n TextExport.prototype.getModuleName = function () {\n return 'TextExport';\n };\n /**\n * @private\n */\n TextExport.prototype.save = function (viewer, fileName) {\n this.serialize(viewer);\n var writer = new StreamWriter();\n this.writeInternal(writer);\n writer.save(fileName + '.txt');\n };\n /**\n * @private\n */\n TextExport.prototype.saveAsBlob = function (viewer) {\n this.serialize(viewer);\n var streamWriter = new StreamWriter();\n this.writeInternal(streamWriter);\n var blob = streamWriter.buffer;\n streamWriter.destroy();\n var promise;\n return new Promise(function (resolve, reject) {\n resolve(blob);\n });\n };\n TextExport.prototype.serialize = function (viewer) {\n var document = viewer.owner.sfdtExportModule.write();\n this.setDocument(document);\n };\n TextExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n };\n TextExport.prototype.writeInternal = function (streamWriter) {\n var section = undefined;\n var sectionCount = this.document.sections.length - 1;\n var isLastSection = false;\n this.updateLastParagraph();\n for (var i = 0; i <= sectionCount; i++) {\n section = this.document.sections[i];\n isLastSection = (i === sectionCount) ? true : false;\n this.writeBody(streamWriter, section.blocks);\n this.writeNewLine(streamWriter);\n this.writeSectionEnd(section, isLastSection);\n }\n for (var j = 0; j <= sectionCount; j++) {\n section = this.document.sections[j];\n this.writeHeadersFooters(streamWriter, section);\n }\n };\n /// \n /// Writes the specified document content to the text file.\n /// \n TextExport.prototype.writeBody = function (streamWriter, body) {\n var bodyItemsCount = body.length - 1;\n var bodyItem = undefined;\n for (var i = 0; i <= bodyItemsCount; i++) {\n bodyItem = body[i];\n if (bodyItem.hasOwnProperty('inlines')) {\n var isLastPara = (bodyItem === this.lastPara) ? true : false;\n this.writeParagraph(streamWriter, bodyItem, isLastPara);\n }\n else {\n this.writeTable(streamWriter, bodyItem);\n }\n }\n };\n TextExport.prototype.writeParagraph = function (streamWriter, paragraph, isLastPara) {\n for (var i = 0; i < paragraph.inlines.length; i++) {\n var item = paragraph.inlines[i];\n if (item.hasOwnProperty('fieldType')) {\n this.inField = item.fieldType === 0;\n }\n else if (item.hasOwnProperty('text') && !this.inField) {\n this.writeText(streamWriter, item.text);\n }\n }\n if (!isLastPara) {\n this.writeNewLine(streamWriter);\n }\n };\n /// }\n /// \n /// Writes the specified table text content to the text file.\n /// \n TextExport.prototype.writeTable = function (streamWriter, table) {\n for (var i = 0; i < table.rows.length; i++) {\n var row = table.rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n var cell = row.cells[j];\n this.writeBody(streamWriter, cell.blocks);\n }\n }\n };\n /// \n /// Writes the specified Header Footer text content to the text file.\n /// \n TextExport.prototype.writeHeadersFooters = function (streamWriter, section) {\n var headersFooters = section.headersFooters;\n if (isNullOrUndefined(headersFooters)) {\n return;\n }\n this.writeHeaderFooter(streamWriter, section.headersFooters.header);\n this.writeHeaderFooter(streamWriter, section.headersFooters.footer);\n this.writeHeaderFooter(streamWriter, section.headersFooters.evenFooter);\n this.writeHeaderFooter(streamWriter, section.headersFooters.evenHeader);\n this.writeHeaderFooter(streamWriter, section.headersFooters.firstPageHeader);\n this.writeHeaderFooter(streamWriter, section.headersFooters.firstPageFooter);\n };\n TextExport.prototype.writeHeaderFooter = function (streamWriter, headerFooter) {\n if (headerFooter && headerFooter.blocks) {\n this.writeBody(streamWriter, headerFooter.blocks);\n }\n };\n /// \n /// Writes the end of the section.\n /// \n TextExport.prototype.writeSectionEnd = function (section, lastSection) {\n this.curSectionIndex++;\n };\n TextExport.prototype.writeNewLine = function (writer) {\n writer.writeLine('');\n };\n TextExport.prototype.writeText = function (writer, text) {\n writer.write(text);\n };\n TextExport.prototype.updateLastParagraph = function () {\n var cnt = this.document.sections.length;\n var sec;\n if (cnt > 0) {\n sec = this.document.sections[cnt - 1];\n }\n if (!isNullOrUndefined(sec)) {\n var paragraphs = [];\n for (var i = 0; i < sec.blocks.length; i++) {\n if (sec.blocks[i].hasOwnProperty('inlines')) {\n paragraphs.push(sec.blocks[i]);\n }\n }\n var pCount = paragraphs.length;\n if (pCount > 0) {\n this.lastPara = paragraphs[pCount - 1];\n }\n }\n };\n /**\n * @private\n */\n TextExport.prototype.destroy = function () {\n this.document = undefined;\n this.lastPara = undefined;\n this.mSections = undefined;\n this.sections = undefined;\n };\n return TextExport;\n}());\nexport { TextExport };\n","import { LineWidget, ParagraphWidget, BodyWidget, TextElementBox, FieldElementBox, TableRowWidget, TableCellWidget, ImageElementBox, ListTextElementBox, BookmarkElementBox } from '../viewer/page';\nimport { BlockWidget } from '../viewer/page';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { StreamWriter } from '@syncfusion/ej2-file-utils';\n/**\n * Exports the document to Sfdt format.\n */\nvar SfdtExport = /** @class */ (function () {\n /**\n * @private\n */\n function SfdtExport(owner) {\n /* tslint:disable:no-any */\n this.endLine = undefined;\n this.endOffset = undefined;\n this.endCell = undefined;\n this.startColumnIndex = undefined;\n this.endColumnIndex = undefined;\n this.lists = undefined;\n this.viewer = undefined;\n this.document = undefined;\n this.writeInlineStyles = undefined;\n this.viewer = owner;\n }\n SfdtExport.prototype.getModuleName = function () {\n return 'SfdtExport';\n };\n SfdtExport.prototype.clear = function () {\n this.writeInlineStyles = undefined;\n this.endLine = undefined;\n this.lists = undefined;\n this.document = undefined;\n };\n /**\n * Serialize the data as Syncfusion document text.\n * @private\n */\n SfdtExport.prototype.serialize = function () {\n return JSON.stringify(this.write());\n };\n /**\n * @private\n */\n SfdtExport.prototype.saveAsBlob = function (viewer) {\n var streamWriter = new StreamWriter();\n streamWriter.write(this.serialize());\n var blob = streamWriter.buffer;\n streamWriter.destroy();\n var promise;\n return new Promise(function (resolve, reject) {\n resolve(blob);\n });\n };\n // tslint:disable-next-line:max-line-length\n /**\n * @private\n */\n SfdtExport.prototype.write = function (line, startOffset, endLine, endOffset, writeInlineStyles) {\n if (writeInlineStyles) {\n this.writeInlineStyles = true;\n }\n this.lists = [];\n this.document = {};\n this.document.sections = [];\n this.document.characterFormat = this.writeCharacterFormat(this.viewer.characterFormat);\n this.document.paragraphFormat = this.writeParagraphFormat(this.viewer.paragraphFormat);\n if (line instanceof LineWidget && endLine instanceof LineWidget) {\n // For selection\n var startPara = line.paragraph;\n var endPara = endLine.paragraph;\n var startCell = startPara.associatedCell;\n var endCell = endPara.associatedCell;\n // Creates section\n var bodyWidget = startPara.bodyWidget;\n var section = this.createSection(line.paragraph.bodyWidget);\n this.document.sections.push(section);\n if (startCell === endCell || isNullOrUndefined(endCell)) {\n this.endLine = endLine;\n this.endOffset = endOffset;\n }\n else {\n // Todo: Handle nested table cases\n if (startCell instanceof TableCellWidget) {\n var startTable = startCell.getContainerTable();\n var endTable = endCell.getContainerTable();\n if (startTable.tableFormat === endTable.tableFormat) {\n this.endCell = endCell;\n this.endColumnIndex = this.endCell.columnIndex + this.endCell.cellFormat.columnSpan;\n this.startColumnIndex = startCell.columnIndex;\n }\n }\n else {\n this.endCell = endCell;\n }\n }\n if (startCell === endCell || isNullOrUndefined(startCell)) {\n var paragraph = this.createParagraph(line.paragraph);\n section.blocks.push(paragraph);\n if (!this.writeParagraph(line.paragraph, paragraph, section.blocks, line.indexInOwner, startOffset)) {\n // Todo:continue in next section\n }\n }\n else {\n var table = this.createTable(startCell.ownerTable);\n section.blocks.push(table);\n this.writeTable(startCell.ownerTable, table, startCell.ownerRow.indexInOwner, section.blocks);\n }\n }\n else {\n if (this.viewer.pages.length > 0) {\n var page = this.viewer.pages[0];\n if (page.bodyWidgets.length > 0) {\n this.writeBodyWidget(page.bodyWidgets[0], 0);\n }\n }\n }\n this.writeStyles(this.viewer);\n this.writeLists(this.viewer);\n var doc = this.document;\n this.clear();\n return doc;\n };\n SfdtExport.prototype.writeBodyWidget = function (bodyWidget, index) {\n if (!(bodyWidget instanceof BodyWidget)) {\n return true;\n }\n var section = this.createSection(bodyWidget);\n this.document.sections.push(section);\n this.writeHeaderFooters(this.viewer.headersFooters[bodyWidget.index], section);\n if (this.writeBlock(bodyWidget.childWidgets[index], 0, section.blocks)) {\n return true;\n }\n var next = bodyWidget;\n do {\n bodyWidget = next;\n next = next.nextRenderedWidget;\n } while (next instanceof BodyWidget && next.index === bodyWidget.index);\n return this.writeBodyWidget(next, index);\n };\n SfdtExport.prototype.writeHeaderFooters = function (hfs, section) {\n if (isNullOrUndefined(hfs)) {\n return;\n }\n section.headersFooters.header = this.writeHeaderFooter(hfs[0]);\n section.headersFooters.footer = this.writeHeaderFooter(hfs[1]);\n section.headersFooters.evenHeader = this.writeHeaderFooter(hfs[2]);\n section.headersFooters.evenFooter = this.writeHeaderFooter(hfs[3]);\n section.headersFooters.firstPageHeader = this.writeHeaderFooter(hfs[4]);\n section.headersFooters.firstPageFooter = this.writeHeaderFooter(hfs[5]);\n };\n SfdtExport.prototype.writeHeaderFooter = function (widget) {\n if (isNullOrUndefined(widget)) {\n return undefined;\n }\n var headerFooter = {};\n if (widget && widget.childWidgets && widget.childWidgets.length > 0) {\n headerFooter.blocks = [];\n this.writeBlock(widget.firstChild, 0, headerFooter.blocks);\n }\n return headerFooter;\n };\n SfdtExport.prototype.createSection = function (bodyWidget) {\n var section = {};\n section.sectionFormat = {};\n section.sectionFormat.pageWidth = bodyWidget.sectionFormat.pageWidth;\n section.sectionFormat.pageHeight = bodyWidget.sectionFormat.pageHeight;\n section.sectionFormat.leftMargin = bodyWidget.sectionFormat.leftMargin;\n section.sectionFormat.rightMargin = bodyWidget.sectionFormat.rightMargin;\n section.sectionFormat.topMargin = bodyWidget.sectionFormat.topMargin;\n section.sectionFormat.bottomMargin = bodyWidget.sectionFormat.bottomMargin;\n section.sectionFormat.differentFirstPage = bodyWidget.sectionFormat.differentFirstPage;\n section.sectionFormat.differentOddAndEvenPages = bodyWidget.sectionFormat.differentOddAndEvenPages;\n section.sectionFormat.headerDistance = bodyWidget.sectionFormat.headerDistance;\n section.sectionFormat.footerDistance = bodyWidget.sectionFormat.footerDistance;\n section.blocks = [];\n section.headersFooters = {};\n return section;\n };\n SfdtExport.prototype.writeBlock = function (widget, index, blocks) {\n if (!(widget instanceof BlockWidget)) {\n return true;\n }\n if (widget instanceof ParagraphWidget) {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n if (this.writeParagraph(widget, paragraph, blocks)) {\n return true;\n }\n }\n else {\n var tableWidget = widget;\n var table = this.createTable(tableWidget);\n blocks.push(table);\n if (this.writeTable(tableWidget, table, 0, blocks)) {\n return true;\n }\n }\n return false;\n };\n SfdtExport.prototype.writeNextBlock = function (widget, blocks) {\n var next = widget.nextRenderedWidget;\n if (next instanceof BlockWidget && next.containerWidget.index === widget.containerWidget.index) {\n return this.writeBlock(widget.nextRenderedWidget, 0, blocks);\n }\n return false;\n };\n SfdtExport.prototype.writeParagraph = function (paragraphWidget, paragraph, blocks, lineIndex, start) {\n if (isNullOrUndefined(lineIndex)) {\n lineIndex = 0;\n }\n if (isNullOrUndefined(start)) {\n start = 0;\n }\n var next = paragraphWidget;\n while (next instanceof ParagraphWidget) {\n if (this.writeLines(next, lineIndex, start, paragraph.inlines)) {\n return true;\n }\n lineIndex = 0;\n start = 0;\n paragraphWidget = next;\n next = paragraphWidget.nextSplitWidget;\n }\n return this.writeNextBlock(paragraphWidget, blocks);\n };\n SfdtExport.prototype.writeInlines = function (line, inlines) {\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(inline)) {\n inlines.push(inline);\n }\n }\n };\n SfdtExport.prototype.writeInline = function (element) {\n var inline = {};\n inline.characterFormat = this.writeCharacterFormat(element.characterFormat);\n if (element instanceof FieldElementBox) {\n inline.fieldType = element.fieldType;\n }\n else if (element instanceof ImageElementBox) {\n inline.imageString = element.imageString;\n inline.width = HelperMethods.convertPixelToPoint(element.width);\n inline.height = HelperMethods.convertPixelToPoint(element.height);\n }\n else if (element instanceof BookmarkElementBox) {\n inline.bookmarkType = element.bookmarkType;\n inline.name = element.name;\n }\n else if (element instanceof TextElementBox) {\n inline.text = element.text;\n }\n else {\n inline = undefined;\n }\n return inline;\n };\n SfdtExport.prototype.writeLines = function (paragraph, lineIndex, offset, inlines) {\n var startIndex = lineIndex;\n var endParagraph = this.endLine instanceof LineWidget && this.endLine.paragraph === paragraph;\n var endIndex = endParagraph ? this.endLine.indexInOwner : paragraph.childWidgets.length - 1;\n for (var i = startIndex; i <= endIndex; i++) {\n var child = paragraph.childWidgets[i];\n if (this.endLine === child || (lineIndex === i && offset !== 0)) {\n this.writeLine(child, offset, inlines);\n }\n else {\n this.writeInlines(child, inlines);\n }\n }\n return endParagraph;\n };\n SfdtExport.prototype.writeLine = function (line, offset, inlines) {\n var isEnd = line === this.endLine;\n var started = false;\n var ended = false;\n var length = 0;\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n var inline = undefined;\n length += element.length;\n started = length > offset;\n ended = isEnd && length >= this.endOffset;\n if (!started) {\n continue;\n }\n inline = this.writeInline(element);\n inlines[inlines.length] = inline;\n if (length > offset || ended) {\n if (inline.hasOwnProperty('text')) {\n var startIndex = length - element.length;\n var indexInInline = offset - startIndex;\n var endIndex = ended ? this.endOffset - startIndex : element.length;\n inline.text = inline.text.substring(indexInInline, endIndex);\n }\n offset = -1;\n }\n if (ended) {\n break;\n }\n }\n };\n SfdtExport.prototype.createParagraph = function (paragraphWidget) {\n var paragraph = {};\n paragraph.paragraphFormat = this.writeParagraphFormat(paragraphWidget.paragraphFormat);\n paragraph.characterFormat = this.writeCharacterFormat(paragraphWidget.characterFormat);\n paragraph.inlines = [];\n return paragraph;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeCharacterFormat = function (format, isInline) {\n var characterFormat = {};\n HelperMethods.writeCharacterFormat(characterFormat, isInline, format);\n if (this.writeInlineStyles && !isInline) {\n characterFormat.inlineFormat = this.writeCharacterFormat(format, true);\n }\n return characterFormat;\n };\n SfdtExport.prototype.writeParagraphFormat = function (format, isInline) {\n var paragraphFormat = {};\n paragraphFormat.leftIndent = isInline ? format.leftIndent : format.getValue('leftIndent');\n paragraphFormat.rightIndent = isInline ? format.rightIndent : format.getValue('rightIndent');\n paragraphFormat.firstLineIndent = isInline ? format.firstLineIndent : format.getValue('firstLineIndent');\n paragraphFormat.textAlignment = isInline ? format.textAlignment : format.getValue('textAlignment');\n paragraphFormat.beforeSpacing = isInline ? format.beforeSpacing : format.getValue('beforeSpacing');\n paragraphFormat.afterSpacing = isInline ? format.afterSpacing : format.getValue('afterSpacing');\n paragraphFormat.lineSpacing = isInline ? format.lineSpacing : format.getValue('lineSpacing');\n paragraphFormat.lineSpacingType = isInline ? format.lineSpacingType : format.getValue('lineSpacingType');\n paragraphFormat.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : undefined;\n paragraphFormat.outlineLevel = isInline ? format.outlineLevel : format.getValue('outlineLevel');\n paragraphFormat.listFormat = this.writeListFormat(format.listFormat, isInline);\n paragraphFormat.tabs = this.writeTabs(format.tabs);\n if (this.writeInlineStyles && !isInline) {\n paragraphFormat.inlineFormat = this.writeParagraphFormat(format, true);\n }\n return paragraphFormat;\n };\n SfdtExport.prototype.writeTabs = function (tabStops) {\n if (isNullOrUndefined(tabStops) || tabStops.length < 1) {\n return undefined;\n }\n var tabs = [];\n for (var i = 0; i < tabStops.length; i++) {\n var tabStop = tabStops[i];\n var tab = {};\n tab.position = tabStop.position;\n tab.deletePosition = tabStop.deletePosition;\n tab.tabJustification = tabStop.tabJustification;\n tab.tabLeader = tabStop.tabLeader;\n tabs.push(tab);\n }\n return tabs;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeListFormat = function (format, isInline) {\n var listFormat = {};\n var listIdValue = format.getValue('listId');\n if (!isNullOrUndefined(listIdValue) && listIdValue > -1) {\n listFormat.listId = listIdValue;\n listFormat.listLevelNumber = format.getValue('listLevelNumber');\n if (this.lists.indexOf(format.listId) < 0) {\n this.lists.push(format.listId);\n }\n }\n return listFormat;\n };\n SfdtExport.prototype.writeTable = function (tableWidget, table, index, blocks) {\n var widget = tableWidget.childWidgets[index];\n if (widget instanceof TableRowWidget) {\n if (this.writeRow(widget, table.rows)) {\n return true;\n }\n }\n var next = tableWidget;\n do {\n tableWidget = next;\n next = tableWidget.nextSplitWidget;\n } while (next instanceof BlockWidget);\n return this.writeNextBlock(tableWidget, blocks);\n };\n SfdtExport.prototype.writeRow = function (rowWidget, rows) {\n if (!(rowWidget instanceof TableRowWidget)) {\n return false;\n }\n var row = this.createRow(rowWidget);\n rows.push(row);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n if (widget instanceof TableCellWidget) {\n if (rowWidget.index === widget.rowIndex\n && (isNullOrUndefined(this.startColumnIndex) || widget.columnIndex >= this.startColumnIndex)\n && (isNullOrUndefined(this.endColumnIndex) || widget.columnIndex < this.endColumnIndex)) {\n if (this.writeCell(widget, row.cells)) {\n return true;\n }\n }\n }\n }\n var next = rowWidget;\n do {\n rowWidget = next;\n next = rowWidget.nextRenderedWidget;\n } while (next instanceof TableRowWidget && next.index === rowWidget.index);\n return this.writeRow(next, rows);\n };\n SfdtExport.prototype.writeCell = function (cellWidget, cells) {\n var cell = this.createCell(cellWidget);\n cells.push(cell);\n if (this.writeBlock(cellWidget.firstChild, 0, cell.blocks)) {\n return true;\n }\n return this.endCell instanceof TableCellWidget ? this.endCell.cellFormat === cellWidget.cellFormat : false;\n };\n SfdtExport.prototype.createTable = function (tableWidget) {\n var table = {};\n table.rows = [];\n table.grid = [];\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n table.grid[i] = tableWidget.tableHolder.columns[i].preferredWidth;\n }\n table.tableFormat = this.writeTableFormat(tableWidget.tableFormat);\n table.description = tableWidget.description;\n table.title = tableWidget.title;\n return table;\n };\n SfdtExport.prototype.createRow = function (rowWidget) {\n var row = {};\n row.cells = [];\n row.rowFormat = this.writeRowFormat(rowWidget.rowFormat);\n return row;\n };\n SfdtExport.prototype.createCell = function (cellWidget) {\n var cell = {};\n cell.blocks = [];\n cell.cellFormat = this.writeCellFormat(cellWidget.cellFormat);\n cell.columnIndex = cellWidget.columnIndex;\n return cell;\n };\n SfdtExport.prototype.writeShading = function (wShading) {\n var shading = {};\n shading.backgroundColor = wShading.backgroundColor;\n shading.foregroundColor = wShading.foregroundColor;\n shading.textureStyle = wShading.textureStyle;\n return shading;\n };\n SfdtExport.prototype.writeBorder = function (wBorder) {\n var border = {};\n border.color = wBorder.color;\n border.hasNoneStyle = wBorder.hasNoneStyle;\n border.lineStyle = wBorder.lineStyle;\n border.lineWidth = wBorder.lineWidth;\n border.shadow = wBorder.shadow;\n border.space = wBorder.space;\n return border;\n };\n SfdtExport.prototype.writeBorders = function (wBorders) {\n var borders = {};\n borders.top = this.writeBorder(wBorders.top);\n borders.left = this.writeBorder(wBorders.left);\n borders.right = this.writeBorder(wBorders.right);\n borders.bottom = this.writeBorder(wBorders.bottom);\n borders.diagonalDown = this.writeBorder(wBorders.diagonalDown);\n borders.diagonalUp = this.writeBorder(wBorders.diagonalUp);\n borders.horizontal = this.writeBorder(wBorders.horizontal);\n borders.vertical = this.writeBorder(wBorders.vertical);\n return borders;\n };\n SfdtExport.prototype.writeCellFormat = function (wCellFormat) {\n var cellFormat = {};\n cellFormat.borders = this.writeBorders(wCellFormat.borders);\n cellFormat.shading = this.writeShading(wCellFormat.shading);\n cellFormat.topMargin = wCellFormat.topMargin;\n cellFormat.rightMargin = wCellFormat.rightMargin;\n cellFormat.leftMargin = wCellFormat.leftMargin;\n cellFormat.bottomMargin = wCellFormat.bottomMargin;\n cellFormat.preferredWidth = wCellFormat.preferredWidth;\n cellFormat.preferredWidthType = wCellFormat.preferredWidthType;\n cellFormat.cellWidth = wCellFormat.cellWidth;\n cellFormat.columnSpan = wCellFormat.columnSpan;\n cellFormat.rowSpan = wCellFormat.rowSpan;\n cellFormat.verticalAlignment = wCellFormat.verticalAlignment;\n return cellFormat;\n };\n SfdtExport.prototype.writeRowFormat = function (wRowFormat) {\n var rowFormat = {};\n rowFormat.height = wRowFormat.height;\n rowFormat.allowBreakAcrossPages = wRowFormat.allowBreakAcrossPages;\n rowFormat.heightType = wRowFormat.heightType;\n rowFormat.isHeader = wRowFormat.isHeader;\n rowFormat.borders = this.writeBorders(wRowFormat.borders);\n rowFormat.gridBefore = wRowFormat.gridBefore;\n rowFormat.gridBeforeWidth = wRowFormat.gridBeforeWidth;\n rowFormat.gridBeforeWidthType = wRowFormat.gridBeforeWidthType;\n rowFormat.gridAfter = wRowFormat.gridAfter;\n rowFormat.gridAfterWidth = wRowFormat.gridAfterWidth;\n rowFormat.gridAfterWidthType = wRowFormat.gridAfterWidthType;\n return rowFormat;\n };\n SfdtExport.prototype.writeTableFormat = function (wTableFormat) {\n var tableFormat = {};\n tableFormat.borders = this.writeBorders(wTableFormat.borders);\n tableFormat.shading = this.writeShading(wTableFormat.shading);\n tableFormat.cellSpacing = wTableFormat.cellSpacing;\n tableFormat.leftIndent = wTableFormat.leftIndent;\n tableFormat.tableAlignment = wTableFormat.tableAlignment;\n tableFormat.topMargin = wTableFormat.topMargin;\n tableFormat.rightMargin = wTableFormat.rightMargin;\n tableFormat.leftMargin = wTableFormat.leftMargin;\n tableFormat.bottomMargin = wTableFormat.bottomMargin;\n tableFormat.preferredWidth = wTableFormat.preferredWidth;\n tableFormat.preferredWidthType = wTableFormat.preferredWidthType;\n return tableFormat;\n };\n SfdtExport.prototype.writeStyles = function (viewer) {\n var styles = [];\n this.document.styles = [];\n for (var i = 0; i < viewer.styles.length; i++) {\n this.document.styles.push(this.writeStyle(viewer.styles.getItem(i)));\n }\n };\n SfdtExport.prototype.writeStyle = function (style) {\n var wStyle = {};\n wStyle.name = style.name;\n if (style.type === 'Paragraph') {\n wStyle.type = 'Paragraph';\n wStyle.paragraphFormat = this.writeParagraphFormat(style.paragraphFormat);\n wStyle.characterFormat = this.writeCharacterFormat(style.characterFormat);\n }\n if (style.type === 'Character') {\n wStyle.type = 'Character';\n wStyle.characterFormat = this.writeCharacterFormat(style.characterFormat);\n }\n if (!isNullOrUndefined(style.basedOn)) {\n wStyle.basedOn = style.basedOn.name;\n }\n if (!isNullOrUndefined(style.link)) {\n wStyle.link = style.link.name;\n }\n if (!isNullOrUndefined(style.next)) {\n wStyle.next = style.next.name;\n }\n return wStyle;\n };\n SfdtExport.prototype.writeLists = function (viewer) {\n var abstractLists = [];\n this.document.lists = [];\n for (var i = 0; i < viewer.lists.length; i++) {\n var list = viewer.lists[i];\n if (this.lists.indexOf(list.listId) > -1) {\n this.document.lists.push(this.writeList(list));\n if (abstractLists.indexOf(list.abstractListId) < 0) {\n abstractLists.push(list.abstractListId);\n }\n }\n }\n this.document.abstractLists = [];\n for (var i = 0; i < viewer.abstractLists.length; i++) {\n var abstractList = viewer.abstractLists[i];\n if (this.lists.indexOf(abstractList.abstractListId) > -1) {\n this.document.abstractLists.push(this.writeAbstractList(abstractList));\n }\n }\n };\n SfdtExport.prototype.writeAbstractList = function (wAbstractList) {\n var abstractList = {};\n abstractList.abstractListId = wAbstractList.abstractListId;\n abstractList.levels = [];\n for (var i = 0; i < wAbstractList.levels.length; i++) {\n abstractList.levels[i] = this.writeListLevel(wAbstractList.levels[i]);\n }\n return abstractList;\n };\n SfdtExport.prototype.writeList = function (wList) {\n var list = {};\n list.abstractListId = wList.abstractListId;\n //list.levelOverrides = wList.levelOverrides;\n list.listId = wList.listId;\n return list;\n };\n SfdtExport.prototype.writeListLevel = function (wListLevel) {\n var listLevel = {};\n listLevel.characterFormat = this.writeCharacterFormat(wListLevel.characterFormat);\n listLevel.paragraphFormat = this.writeParagraphFormat(wListLevel.paragraphFormat);\n listLevel.followCharacter = wListLevel.followCharacter;\n listLevel.listLevelPattern = wListLevel.listLevelPattern;\n listLevel.numberFormat = wListLevel.numberFormat;\n listLevel.restartLevel = wListLevel.restartLevel;\n listLevel.startAt = wListLevel.startAt;\n return listLevel;\n };\n /**\n * @private\n */\n SfdtExport.prototype.destroy = function () {\n this.lists = undefined;\n this.endLine = undefined;\n this.endOffset = undefined;\n this.viewer = undefined;\n };\n return SfdtExport;\n}());\nexport { SfdtExport };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, addClass, append, Property, Event, L10n, compile } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend, removeClass, prepend, isNullOrUndefined, detach, getValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, rippleEffect, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\nexport var dropDownBaseClasses = {\n root: 'e-dropdownbase',\n rtl: 'e-rtl',\n content: 'e-content',\n selected: 'e-active',\n hover: 'e-hover',\n noData: 'e-nodata',\n fixedHead: 'e-fixed-head',\n focus: 'e-item-focus',\n li: ListBaseClasses.li,\n group: ListBaseClasses.group,\n disabled: ListBaseClasses.disabled,\n grouping: 'e-dd-group'\n};\n/**\n * DropDownBase component will generate the list items based on given data and act as base class to drop-down related components\n */\nvar DropDownBase = /** @class */ (function (_super) {\n __extends(DropDownBase, _super);\n /**\n * * Constructor for DropDownBase class\n */\n function DropDownBase(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n DropDownBase.prototype.getPropObject = function (prop, newProp, oldProp) {\n var newProperty = new Object();\n var oldProperty = new Object();\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var propName = new Function('prop', 'return prop');\n newProperty[propName(prop)] = newProp[propName(prop)];\n oldProperty[propName(prop)] = oldProp[propName(prop)];\n var data = new Object();\n data.newProperty = newProperty;\n data.oldProperty = oldProperty;\n return data;\n };\n DropDownBase.prototype.getValueByText = function (text, ignoreCase, ignoreAccent) {\n var value = null;\n if (!isNullOrUndefined(this.listData)) {\n if (ignoreCase) {\n value = this.checkValueCase(text, true, ignoreAccent);\n }\n else {\n value = this.checkValueCase(text, false, ignoreAccent);\n }\n }\n return value;\n };\n ;\n DropDownBase.prototype.checkValueCase = function (text, ignoreCase, ignoreAccent, isTextByValue) {\n var _this = this;\n var value = null;\n if (isTextByValue) {\n value = text;\n }\n var dataSource = this.listData;\n var fields = this.fields;\n var type = this.typeOfData(dataSource).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n if (!isNullOrUndefined(item)) {\n if (ignoreAccent) {\n value = this.checkingAccent(String(item), text, ignoreCase);\n }\n else {\n if (ignoreCase) {\n if (this.checkIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase, isTextByValue);\n }\n }\n }\n }\n }\n }\n else {\n if (ignoreCase) {\n dataSource.filter(function (item) {\n if (_this.checkIgnoreCase(getValue(fields.text, item).toString(), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n else {\n if (isTextByValue) {\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && itemValue.toString() === value.toString()) {\n value = getValue(fields.text, item);\n }\n });\n }\n else {\n dataSource.filter(function (item) {\n if (_this.checkNonIgnoreCase(getValue(fields.text, item), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n }\n }\n return value;\n };\n DropDownBase.prototype.checkingAccent = function (item, text, ignoreCase) {\n var dataItem = DataUtil.ignoreDiacritics(String(item));\n var textItem = DataUtil.ignoreDiacritics(text.toString());\n var value = null;\n if (ignoreCase) {\n if (this.checkIgnoreCase(dataItem, textItem)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n return value;\n };\n DropDownBase.prototype.checkIgnoreCase = function (item, text) {\n return String(item).toLowerCase() === text.toString().toLowerCase() ? true : false;\n };\n DropDownBase.prototype.checkNonIgnoreCase = function (item, text) {\n return String(item) === text.toString() ? true : false;\n };\n DropDownBase.prototype.getItemValue = function (dataItem, typedText, ignoreCase, isTextByValue) {\n var value = null;\n var dataSource = this.listData;\n var type = this.typeOfData(dataSource).typeof;\n if (isTextByValue) {\n value = dataItem.toString();\n }\n else {\n if (ignoreCase) {\n value = type === 'string' ? String(dataItem) : this.getFormattedValue(String(dataItem));\n }\n else {\n value = type === 'string' ? typedText : this.getFormattedValue(typedText);\n }\n }\n return value;\n };\n DropDownBase.prototype.l10nUpdate = function (actionFailure) {\n if (this.noRecordsTemplate !== 'No Records Found' || this.actionFailureTemplate !== 'The Request Failed') {\n var template = actionFailure ? this.actionFailureTemplate : this.noRecordsTemplate;\n var compiledString = void 0;\n this.list.innerHTML = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.list.appendChild(item);\n }\n }\n else {\n var l10nLocale = { noRecordsTemplate: 'No Records Found', actionFailureTemplate: 'The Request Failed' };\n this.l10n = new L10n('dropdowns', l10nLocale, this.locale);\n this.list.innerHTML = actionFailure ?\n this.l10n.getConstant('actionFailureTemplate') : this.l10n.getConstant('noRecordsTemplate');\n }\n };\n DropDownBase.prototype.getTextByValue = function (value) {\n var text;\n text = this.checkValueCase(value, false, false, true);\n return text;\n };\n DropDownBase.prototype.getFormattedValue = function (value) {\n if (this.listData && this.listData.length) {\n var item = this.typeOfData(this.listData);\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'number'\n || item.typeof === 'number') {\n return parseInt(value, 10);\n }\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'boolean'\n || item.typeof === 'boolean') {\n return (value === 'true');\n }\n }\n return value;\n };\n /**\n * Sets RTL to dropdownbase wrapper\n */\n DropDownBase.prototype.setEnableRtl = function () {\n if (this.list) {\n this.enableRtlElements.push(this.list);\n }\n this.enableRtl ? addClass(this.enableRtlElements, dropDownBaseClasses.rtl) :\n removeClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n };\n ;\n /**\n * Initialize the Component.\n */\n DropDownBase.prototype.initialize = function () {\n this.bindEvent = true;\n if (this.element.tagName === 'UL') {\n var jsonElement = ListBase.createJsonFromElement(this.element);\n this.setProperties({ fields: { text: 'text', value: 'text' } }, true);\n this.resetList(jsonElement, this.fields);\n }\n else if (this.element.tagName === 'SELECT') {\n var dataSource = this.dataSource instanceof Array ? (this.dataSource.length > 0 ? true : false)\n : !isNullOrUndefined(this.dataSource) ? true : false;\n if (!dataSource) {\n this.renderItemsBySelect();\n }\n }\n else {\n this.setListData(this.dataSource, this.fields, this.query);\n }\n };\n ;\n /**\n * Get the properties to be maintained in persisted state.\n */\n DropDownBase.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n ;\n /**\n * Sets the enabled state to DropDownBase.\n */\n DropDownBase.prototype.setEnabled = function () {\n if (this.enabled) {\n this.element.setAttribute('aria-disabled', 'false');\n }\n else {\n this.element.setAttribute('aria-disabled', 'true');\n }\n };\n ;\n DropDownBase.prototype.renderItemsBySelect = function () {\n var element = this.element;\n var fields = { value: 'value', text: 'text' };\n var jsonElement = [];\n var group = element.querySelectorAll('select>optgroup');\n var option = element.querySelectorAll('select>option');\n this.getJSONfromOption(jsonElement, option, fields);\n if (group.length) {\n for (var i = 0; i < group.length; i++) {\n var item = group[i];\n var optionGroup = {};\n optionGroup[fields.text] = item.label;\n optionGroup.isHeader = true;\n var child = item.querySelectorAll('option');\n jsonElement.push(optionGroup);\n this.getJSONfromOption(jsonElement, child, fields);\n }\n var items = element.querySelectorAll('select>option');\n }\n this.fields.text = fields.text;\n this.fields.value = fields.value;\n this.resetList(jsonElement, fields);\n };\n DropDownBase.prototype.getJSONfromOption = function (items, options, fields) {\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var option = options_1[_i];\n var json = {};\n json[fields.text] = option.innerText;\n json[fields.value] = option.getAttribute(fields.value) ? option.getAttribute(fields.value) : option.innerText;\n items.push(json);\n }\n };\n /**\n * Execute before render the list items\n * @private\n */\n DropDownBase.prototype.preRender = function () {\n // there is no event handler\n this.scrollTimer = -1;\n this.enableRtlElements = [];\n this.isRequested = false;\n this.isDataFetched = false;\n };\n /**\n * Creates the list items of DropDownBase component.\n */\n DropDownBase.prototype.setListData = function (dataSource, fields, query) {\n var _this = this;\n fields = fields ? fields : this.fields;\n var ulElement;\n this.isActive = true;\n var eventArgs = { cancel: false, data: dataSource, query: query };\n this.trigger('actionBegin', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.showSpinner();\n if (dataSource instanceof DataManager) {\n this.isRequested = true;\n if (this.isDataFetched) {\n this.emptyDataRequest(fields);\n return;\n }\n eventArgs.data.executeQuery(this.getQuery(eventArgs.query)).then(function (e) {\n _this.trigger('actionComplete', e);\n if (e.cancel) {\n return;\n }\n var listItems = e.result;\n if (listItems.length === 0) {\n _this.isDataFetched = true;\n }\n ulElement = _this.renderItems(listItems, fields);\n _this.onActionComplete(ulElement, listItems, e);\n _this.isRequested = false;\n _this.hideSpinner();\n _this.trigger('dataBound', { items: listItems, e: e });\n }).catch(function (e) {\n _this.isRequested = false;\n _this.onActionFailure(e);\n _this.hideSpinner();\n });\n }\n else {\n var dataManager = new DataManager(eventArgs.data);\n var listItems = void 0;\n listItems = (this.getQuery(eventArgs.query)).executeLocal(dataManager);\n var localDataArgs = { cancel: false, result: listItems };\n this.trigger('actionComplete', localDataArgs);\n if (localDataArgs.cancel) {\n return;\n }\n ulElement = this.renderItems(localDataArgs.result, fields);\n this.onActionComplete(ulElement, localDataArgs.result);\n this.hideSpinner();\n this.trigger('dataBound', { items: localDataArgs.result });\n }\n };\n DropDownBase.prototype.emptyDataRequest = function (fields) {\n var listItems = [];\n this.onActionComplete(this.renderItems(listItems, fields), listItems);\n this.isRequested = false;\n this.hideSpinner();\n };\n DropDownBase.prototype.showSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.hideSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.onActionFailure = function (e) {\n this.liCollections = [];\n this.trigger('actionFailure', e);\n this.l10nUpdate(true);\n addClass([this.list], dropDownBaseClasses.noData);\n };\n DropDownBase.prototype.onActionComplete = function (ulElement, list, e) {\n this.listData = list;\n this.list.innerHTML = '';\n this.list.appendChild(ulElement);\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n this.postRender(this.list, list, this.bindEvent);\n };\n DropDownBase.prototype.postRender = function (listElement, list, bindEvent) {\n var focusItem = listElement.querySelector('.' + dropDownBaseClasses.li);\n var selectedItem = listElement.querySelector('.' + dropDownBaseClasses.selected);\n if (focusItem && !selectedItem) {\n addClass([focusItem], dropDownBaseClasses.focus);\n }\n if (list.length <= 0) {\n this.l10nUpdate();\n addClass([listElement], dropDownBaseClasses.noData);\n }\n else {\n listElement.classList.remove(dropDownBaseClasses.noData);\n }\n if (this.groupTemplate) {\n this.renderGroupTemplate(listElement);\n }\n };\n /**\n * Get the query to do the data operation before list item generation.\n */\n DropDownBase.prototype.getQuery = function (query) {\n return query ? query : this.query ? this.query : new Query();\n };\n /**\n * To render the template content for group header element.\n */\n DropDownBase.prototype.renderGroupTemplate = function (listEle) {\n if (this.fields.groupBy !== null && this.dataSource || this.element.querySelector('.' + dropDownBaseClasses.group)) {\n var dataSource = this.dataSource;\n var headerItems = listEle.querySelectorAll('.' + dropDownBaseClasses.group);\n var tempHeaders = ListBase.renderGroupTemplate(this.groupTemplate, dataSource, this.fields.properties, headerItems);\n }\n };\n /**\n * To create the ul li list items\n */\n DropDownBase.prototype.createListItems = function (dataSource, fields) {\n if (dataSource && fields.groupBy || this.element.querySelector('optgroup')) {\n if (fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n addClass([this.list], dropDownBaseClasses.grouping);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n var options = this.listOption(dataSource, fields);\n return ListBase.createList(this.createElement, dataSource, options, true);\n };\n ;\n DropDownBase.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldValues = !isNullOrUndefined(fields.properties) ?\n fields.properties : fields;\n var options = (fields.text !== null || fields.value !== null) ? {\n fields: fieldValues,\n showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n return extend({}, options, fields, true);\n };\n ;\n DropDownBase.prototype.setFloatingHeader = function (e) {\n if (isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement = this.createElement('div', { className: dropDownBaseClasses.fixedHead });\n if (!this.list.querySelector('li').classList.contains(dropDownBaseClasses.group)) {\n this.fixedHeaderElement.style.display = 'none';\n }\n prepend([this.fixedHeaderElement], this.list);\n this.setFixedHeader();\n }\n if (!isNullOrUndefined(this.fixedHeaderElement) && this.fixedHeaderElement.style.zIndex === '0') {\n this.setFixedHeader();\n }\n this.scrollStop(e);\n };\n DropDownBase.prototype.scrollStop = function (e) {\n var target = e.target;\n var liHeight = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n var topIndex = Math.round(target.scrollTop / liHeight);\n var liCollections = this.ulElement.querySelectorAll('li');\n for (var i = topIndex; i > -1; i--) {\n if (!isNullOrUndefined(liCollections[i]) && liCollections[i].classList.contains(dropDownBaseClasses.group)) {\n var currentLi = liCollections[i];\n this.fixedHeaderElement.innerHTML = currentLi.innerHTML;\n this.fixedHeaderElement.style.top = e.target.scrollTop + 'px';\n this.fixedHeaderElement.style.display = 'block';\n break;\n }\n else {\n this.fixedHeaderElement.style.display = 'none';\n this.fixedHeaderElement.style.top = 'none';\n }\n }\n };\n /**\n * To render the list items\n */\n DropDownBase.prototype.renderItems = function (listData, fields) {\n var ulElement;\n if (this.itemTemplate && listData) {\n var dataSource = listData;\n if (dataSource && fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n ulElement = this.templateListItem(dataSource, fields);\n }\n else {\n ulElement = this.createListItems(listData, fields);\n }\n return ulElement;\n };\n ;\n DropDownBase.prototype.templateListItem = function (dataSource, fields) {\n var option = this.listOption(dataSource, fields);\n return ListBase.renderContentTemplate(this.createElement, this.itemTemplate, dataSource, fields.properties, option);\n };\n DropDownBase.prototype.typeOfData = function (items) {\n var item = { typeof: null, item: null };\n for (var i = 0; (!isNullOrUndefined(items) && i < items.length); i++) {\n if (!isNullOrUndefined(items[i])) {\n return item = { typeof: typeof items[i], item: items[i] };\n }\n }\n return item;\n };\n DropDownBase.prototype.setFixedHeader = function () {\n this.list.parentElement.style.display = 'block';\n var liWidth = this.liCollections[0].offsetWidth;\n this.fixedHeaderElement.style.width = liWidth.toString() + 'px';\n setStyleAttribute(this.fixedHeaderElement, { zIndex: 10 });\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n };\n DropDownBase.prototype.getSortedDataSource = function (dataSource) {\n if (dataSource && this.sortOrder !== 'None') {\n var textField = this.fields.text ? this.fields.text : 'text';\n dataSource = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, textField));\n }\n return dataSource;\n };\n /**\n * Return the index of item which matched with given value in data source\n */\n DropDownBase.prototype.getIndexByValue = function (value) {\n var index;\n var listItems = this.getItems();\n for (var i = 0; i < listItems.length; i++) {\n if (!isNullOrUndefined(value) && listItems[i].getAttribute('data-value') === value.toString()) {\n index = i;\n break;\n }\n }\n return index;\n };\n ;\n /**\n * To dispatch the event manually\n */\n DropDownBase.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n };\n /**\n * To set the current fields\n */\n DropDownBase.prototype.setFields = function () {\n var fields = this.fields;\n if (this.fields.value && !this.fields.text) {\n this.fields.text = this.fields.value;\n }\n else if (!fields.value && fields.text) {\n this.fields.value = this.fields.text;\n }\n else if (!this.fields.value && !this.fields.text) {\n this.fields.value = this.fields.text = 'text';\n }\n };\n /**\n * reset the items list.\n */\n DropDownBase.prototype.resetList = function (dataSource, fields, query) {\n if (this.list) {\n this.setListData(dataSource, fields, query);\n }\n };\n DropDownBase.prototype.updateSelection = function () {\n // This is for after added the item, need to update the selected index values.\n };\n DropDownBase.prototype.renderList = function () {\n // This is for render the list items.\n this.render();\n };\n DropDownBase.prototype.updateDataSource = function (props) {\n this.resetList(this.dataSource);\n };\n DropDownBase.prototype.setUpdateInitial = function (props, newProp) {\n this.isDataFetched = false;\n var updateData = {};\n for (var j = 0; props.length > j; j++) {\n if (newProp[props[j]] && props[j] === 'fields') {\n this.setFields();\n }\n else if (newProp[props[j]]) {\n updateData[props[j]] = newProp[props[j]];\n }\n }\n if (Object.keys(updateData).length > 0) {\n this.updateDataSource(updateData);\n }\n };\n /**\n * When property value changes happened, then onPropertyChanged method will execute the respective changes in this component.\n * @private\n */\n DropDownBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'dropdownbase') {\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n this.setUpdateInitial(['sortOrder', 'itemTemplate'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'sortOrder':\n case 'dataSource':\n case 'itemTemplate':\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'groupTemplate':\n this.renderGroupTemplate(this.list);\n if (this.ulElement && this.fixedHeaderElement) {\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n }\n break;\n case 'locale':\n if (this.list && (!isNullOrUndefined(this.liCollections) && this.liCollections.length === 0)) {\n this.l10nUpdate();\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n }\n }\n };\n ;\n /**\n * Build and render the component\n * @private\n */\n DropDownBase.prototype.render = function (isEmptyData) {\n this.list = this.createElement('div', { className: dropDownBaseClasses.content, attrs: { 'tabindex': '0' } });\n this.list.classList.add(dropDownBaseClasses.root);\n this.setFields();\n var rippleModel = { duration: 300, selector: '.' + dropDownBaseClasses.li };\n this.rippleFun = rippleEffect(this.list, rippleModel);\n var group = this.element.querySelector('select>optgroup');\n if (this.fields.groupBy || !isNullOrUndefined(group)) {\n EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n }\n if (this.getModuleName() === 'dropdownbase') {\n if (this.element.getAttribute('tabindex')) {\n this.list.setAttribute('tabindex', this.element.getAttribute('tabindex'));\n }\n removeClass([this.element], dropDownBaseClasses.root);\n this.element.style.display = 'none';\n var wrapperElement = this.createElement('div');\n this.element.parentElement.insertBefore(wrapperElement, this.element);\n wrapperElement.appendChild(this.element);\n wrapperElement.appendChild(this.list);\n }\n this.setEnableRtl();\n this.setEnabled();\n if (!isEmptyData) {\n this.initialize();\n }\n };\n ;\n /**\n * Return the module name of this component.\n * @private\n */\n DropDownBase.prototype.getModuleName = function () {\n return 'dropdownbase';\n };\n ;\n /**\n * Gets all the list items bound on this component.\n * @returns Element[].\n */\n DropDownBase.prototype.getItems = function () {\n return this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li);\n };\n ;\n /**\n * Adds a new item to the popup list. By default, new item appends to the list as the last item,\n * but you can insert based on the index parameter.\n * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n * @return {void}.\n */\n DropDownBase.prototype.addItem = function (items, itemIndex) {\n if (!this.list || this.list.textContent === this.noRecordsTemplate) {\n this.renderList();\n }\n var itemsCount = this.getItems().length;\n var selectedItemValue = this.list.querySelector('.' + dropDownBaseClasses.selected);\n items = (items instanceof Array ? items : [items]);\n var index;\n index = (isNullOrUndefined(itemIndex) || itemIndex < 0 || itemIndex > itemsCount - 1) ? itemsCount : itemIndex;\n var fields = this.fields;\n var liCollections = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var li = this.createElement('li', { className: dropDownBaseClasses.li, id: 'option-add-' + i });\n li.setAttribute('data-value', getValue(fields.value, item));\n li.setAttribute('role', 'option');\n li.appendChild(document.createTextNode(getValue(fields.text, item)));\n this.notify('addItem', { module: 'CheckBoxSelection', item: li });\n liCollections.push(li);\n this.listData.push(item);\n this.updateActionCompleteData(li, item);\n }\n if (itemsCount === 0 && isNullOrUndefined(this.list.querySelector('ul'))) {\n this.list.innerHTML = '';\n this.list.appendChild(this.ulElement);\n append(liCollections, this.ulElement);\n }\n else {\n for (var i = 0; i < items.length; i++) {\n if (this.liCollections[index]) {\n this.liCollections[index].parentNode.insertBefore(liCollections[i], this.liCollections[index]);\n }\n else {\n this.ulElement.appendChild(liCollections[i]);\n }\n var tempLi = [].slice.call(this.liCollections);\n tempLi.splice(index, 0, liCollections[i]);\n this.liCollections = tempLi;\n index += 1;\n }\n }\n if (selectedItemValue || itemIndex === 0) {\n this.updateSelection();\n }\n };\n DropDownBase.prototype.validationAttribute = function (target, hidden) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n hidden.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (!target.getAttribute(attributes[i])) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n hidden.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n DropDownBase.prototype.setZIndex = function () {\n // this is for component wise\n };\n DropDownBase.prototype.updateActionCompleteData = function (li, item) {\n // this is for ComboBox custom value\n };\n /**\n * Gets the data Object that matches the given value.\n * @param { string | number } value - Specifies the value of the list item.\n * @returns Object.\n */\n DropDownBase.prototype.getDataByValue = function (value) {\n if (!isNullOrUndefined(this.listData)) {\n var type = this.typeOfData(this.listData).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, _a = this.listData; _i < _a.length; _i++) {\n var item = _a[_i];\n if (!isNullOrUndefined(item) && item === value) {\n return item;\n }\n }\n }\n else {\n for (var _b = 0, _c = this.listData; _b < _c.length; _b++) {\n var item = _c[_b];\n if (!isNullOrUndefined(item) && getValue((this.fields.value ? this.fields.value : 'value'), item) === value) {\n return item;\n }\n }\n }\n }\n return null;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n DropDownBase.prototype.destroy = function () {\n if (document.body.contains(this.list)) {\n EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n if (!isNullOrUndefined(this.rippleFun)) {\n this.rippleFun();\n }\n detach(this.list);\n }\n _super.prototype.destroy.call(this);\n };\n ;\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], DropDownBase.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property('No Records Found')\n ], DropDownBase.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property('The Request Failed')\n ], DropDownBase.prototype, \"actionFailureTemplate\", void 0);\n __decorate([\n Property('None')\n ], DropDownBase.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(true)\n ], DropDownBase.prototype, \"enabled\", void 0);\n __decorate([\n Property([])\n ], DropDownBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"query\", void 0);\n __decorate([\n Property(1000)\n ], DropDownBase.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"destroyed\", void 0);\n DropDownBase = __decorate([\n NotifyPropertyChanges\n ], DropDownBase);\n return DropDownBase;\n}(Component));\nexport { DropDownBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Event, compile, KeyboardEvents, append } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, getUniqueID, formatUnit, isUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Animation, Browser, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, setStyleAttribute, closest, prepend, detach, classList } from '@syncfusion/ej2-base';\nimport { Popup, isCollide, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { incrementalSearch } from '../common/incremental-search';\nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\n/* tslint:disable */\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n// don't use space in classnames \nexport var dropDownListClasses = {\n root: 'e-dropdownlist',\n hover: dropDownBaseClasses.hover,\n selected: dropDownBaseClasses.selected,\n rtl: dropDownBaseClasses.rtl,\n li: dropDownBaseClasses.li,\n disable: dropDownBaseClasses.disabled,\n base: dropDownBaseClasses.root,\n focus: dropDownBaseClasses.focus,\n input: 'e-input-group',\n inputFocus: 'e-input-focus',\n icon: 'e-input-group-icon e-ddl-icon',\n iconAnimation: 'e-icon-anim',\n value: 'e-input-value',\n device: 'e-ddl-device',\n backIcon: 'e-input-group-icon e-back-icon e-icons',\n filterBarClearIcon: 'e-input-group-icon e-clear-icon e-icons',\n filterInput: 'e-input-filter',\n filterParent: 'e-filter-parent',\n mobileFilter: 'e-ddl-device-filter',\n footer: 'e-ddl-footer',\n header: 'e-ddl-header',\n clearIcon: 'e-clear-icon',\n clearIconHide: 'e-clear-icon-hide',\n popupFullScreen: 'e-popup-full-page',\n disableIcon: 'e-ddl-disable-icon',\n hiddenElement: 'e-ddl-hidden'\n};\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The DropDownList component contains a list of predefined values from which you can\n * choose a single value.\n * ```html\n * \n * ```\n * ```typescript\n * let dropDownListObj:DropDownList = new DropDownList();\n * dropDownListObj.appendTo(\"#list\");\n * ```\n */\nvar DropDownList = /** @class */ (function (_super) {\n __extends(DropDownList, _super);\n /**\n * * Constructor for creating the DropDownList component.\n */\n function DropDownList(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n return _this;\n }\n ;\n /**\n * Initialize the event handler.\n * @private\n */\n DropDownList.prototype.preRender = function () {\n this.element.style.opacity = '0';\n this.initializeData();\n _super.prototype.preRender.call(this);\n this.activeIndex = this.index;\n this.queryString = '';\n };\n DropDownList.prototype.initializeData = function () {\n this.isPopupOpen = false;\n this.isDocumentClick = false;\n this.isInteracted = false;\n this.isFilterFocus = false;\n this.beforePopupOpen = false;\n this.initial = true;\n this.initRemoteRender = false;\n this.isNotSearchList = false;\n this.isTyped = false;\n this.isSelected = false;\n this.preventFocus = false;\n this.preventAutoFill = false;\n this.isValidKey = false;\n this.typedString = '';\n this.isEscapeKey = false;\n this.isPreventBlur = false;\n this.isTabKey = false;\n this.actionCompleteData = { isUpdated: false };\n this.prevSelectPoints = {};\n this.isSelectCustom = false;\n this.isDropDownClick = false;\n this.preventAltUp = false;\n this.isCustomFilter = false;\n this.isSecondClick = false;\n this.keyConfigure = {\n tab: 'tab',\n enter: '13',\n escape: '27',\n end: '35',\n home: '36',\n down: '40',\n up: '38',\n pageUp: '33',\n pageDown: '34',\n open: 'alt+40',\n close: 'shift+tab',\n hide: 'alt+38',\n space: '32'\n };\n };\n DropDownList.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n DropDownList.prototype.renderList = function (isEmptyData) {\n _super.prototype.render.call(this, isEmptyData);\n this.wireListEvents();\n };\n DropDownList.prototype.floatLabelChange = function () {\n if (this.getModuleName() === 'dropdownlist' && this.floatLabelType === 'Auto') {\n var floatElement = this.inputWrapper.container.querySelector('.e-float-text');\n if (this.inputElement.value !== '' || this.isInteracted) {\n classList(floatElement, ['e-label-top'], ['e-label-bottom']);\n }\n else {\n classList(floatElement, ['e-label-bottom'], ['e-label-top']);\n }\n }\n };\n DropDownList.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n this.onChangeEvent(e);\n };\n DropDownList.prototype.resetFocusElement = function () {\n this.removeHover();\n this.removeSelection();\n this.removeFocus();\n this.list.scrollTop = 0;\n if (this.getModuleName() !== 'autocomplete') {\n var li = this.ulElement.querySelector('.' + dropDownListClasses.li);\n if (li) {\n li.classList.add(dropDownListClasses.focus);\n }\n }\n };\n DropDownList.prototype.clear = function (e, properties) {\n if (isNullOrUndefined(properties) || (!isNullOrUndefined(properties) && isNullOrUndefined(properties.dataSource))) {\n this.resetSelection();\n }\n var dataItem = this.getItemData();\n if (this.previousValue === dataItem.value) {\n return;\n }\n this.onChangeEvent(e);\n };\n DropDownList.prototype.resetSelection = function () {\n if (this.list) {\n if (this.allowFiltering && this.getModuleName() !== 'autocomplete'\n && !isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n this.onActionComplete(this.actionCompleteData.ulElement.cloneNode(true), this.actionCompleteData.list);\n }\n this.resetFocusElement();\n }\n this.hiddenElement.innerHTML = '';\n this.inputElement.value = '';\n this.value = null;\n this.itemData = null;\n this.text = null;\n this.index = null;\n this.activeIndex = null;\n this.item = null;\n this.queryString = '';\n if (this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n this.valueTempElement = null;\n }\n this.setSelection(null, null);\n this.isSelectCustom = false;\n this.updateIconState();\n };\n DropDownList.prototype.setHTMLAttributes = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n this.inputWrapper.container.classList.add(this.htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && this.htmlAttributes[htmlAttr] === 'disabled') {\n this.enabled = false;\n this.setEnable();\n }\n else if (htmlAttr === 'readonly' && this.htmlAttributes[htmlAttr] === 'readonly') {\n this.readonly = true;\n this.dataBind();\n }\n else if (htmlAttr === 'style') {\n this.inputWrapper.container.setAttribute('style', this.htmlAttributes[htmlAttr]);\n }\n else {\n var defaultAttr = ['title', 'id', 'placeholder'];\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (defaultAttr.indexOf(htmlAttr) > -1) {\n htmlAttr === 'placeholder' ? Input.setPlaceholder(this.htmlAttributes[htmlAttr], this.inputElement) :\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.inputWrapper.container.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n };\n DropDownList.prototype.getAriaAttributes = function () {\n return {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false',\n 'aria-activedescendant': 'null',\n 'aria-labelledby': this.hiddenElement.id\n };\n };\n DropDownList.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputElement.parentElement]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n DropDownList.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hidePopup();\n addClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.targetElement().tabIndex = -1;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n DropDownList.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ;\n DropDownList.prototype.preventTabIndex = function (element) {\n if (this.getModuleName() === 'dropdownlist') {\n element.tabIndex = -1;\n }\n };\n DropDownList.prototype.targetElement = function () {\n return this.inputWrapper.container;\n };\n DropDownList.prototype.getNgDirective = function () {\n return 'EJS-DROPDOWNLIST';\n };\n DropDownList.prototype.getElementByText = function (text) {\n return this.getElementByValue(this.getValueByText(text));\n };\n DropDownList.prototype.getElementByValue = function (value) {\n var item;\n var listItems = this.getItems();\n for (var _i = 0, listItems_1 = listItems; _i < listItems_1.length; _i++) {\n var liItem = listItems_1[_i];\n if (this.getFormattedValue(liItem.getAttribute('data-value')) === value) {\n item = liItem;\n break;\n }\n }\n return item;\n };\n ;\n DropDownList.prototype.initValue = function () {\n this.renderList();\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n else {\n this.updateValues();\n }\n };\n DropDownList.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n this.setSelection(this.getElementByValue(this.value), null);\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var element = this.getElementByText(this.text);\n if (isNullOrUndefined(element)) {\n this.setProperties({ text: null });\n return;\n }\n else {\n this.setSelection(element, null);\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DropDownList.prototype.onBlur = function (e) {\n if (!this.enabled) {\n return;\n }\n var target = e.relatedTarget;\n var currentTarget = e.target;\n var isPreventBlur = this.isPreventBlur;\n this.isPreventBlur = false;\n //IE 11 - issue\n if (isPreventBlur && !this.isDocumentClick && this.isPopupOpen && (!isNullOrUndefined(currentTarget) ||\n !this.isFilterLayout() && isNullOrUndefined(target))) {\n if (this.getModuleName() === 'dropdownlist' && this.allowFiltering && this.isPopupOpen) {\n this.filterInput.focus();\n }\n else {\n this.targetElement().focus();\n }\n return;\n }\n if (this.isDocumentClick || (!isNullOrUndefined(this.popupObj)\n && document.body.contains(this.popupObj.element) &&\n this.popupObj.element.classList.contains(dropDownListClasses.mobileFilter))) {\n if (!this.beforePopupOpen) {\n this.isDocumentClick = false;\n }\n return;\n }\n if (((this.getModuleName() === 'dropdownlist' && !this.isFilterFocus && target !== this.inputElement)\n && (document.activeElement !== target || (document.activeElement === target &&\n currentTarget.classList.contains(dropDownListClasses.inputFocus)))) ||\n (isNullOrUndefined(target) && this.getModuleName() === 'dropdownlist' && this.allowFiltering &&\n currentTarget !== this.inputWrapper.container) || this.getModuleName() !== 'dropdownlist' &&\n !this.inputWrapper.container.contains(target) || this.isTabKey) {\n this.isDocumentClick = this.isPopupOpen ? true : false;\n this.focusOutAction();\n this.isTabKey = false;\n }\n if (this.isRequested && !this.isPopupOpen && !this.isPreventBlur) {\n this.isActive = false;\n this.beforePopupOpen = false;\n }\n };\n DropDownList.prototype.focusOutAction = function () {\n this.isInteracted = false;\n this.focusOut();\n this.onFocusOut();\n };\n DropDownList.prototype.onFocusOut = function () {\n if (!this.enabled) {\n return;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(null);\n }\n this.floatLabelChange();\n this.dispatchEvent(this.hiddenElement, 'change');\n if (this.getModuleName() === 'dropdownlist' && this.element.tagName !== 'INPUT') {\n this.dispatchEvent(this.inputElement, 'blur');\n }\n if (this.inputWrapper.clearButton) {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n this.trigger('blur');\n };\n DropDownList.prototype.onFocus = function () {\n if (!this.isInteracted) {\n this.isInteracted = true;\n this.trigger('focus');\n }\n this.updateIconState();\n };\n DropDownList.prototype.resetValueHandler = function (e) {\n var formElement = closest(this.inputElement, 'form');\n if (formElement && e.target === formElement) {\n this.value = null;\n }\n };\n DropDownList.prototype.wireEvent = function () {\n EventHandler.add(this.inputWrapper.container, 'mousedown', this.dropDownClick, this);\n EventHandler.add(this.inputWrapper.container, 'focus', this.focusIn, this);\n EventHandler.add(this.inputWrapper.container, 'keypress', this.onSearch, this);\n this.bindCommonEvent();\n };\n DropDownList.prototype.bindCommonEvent = function () {\n EventHandler.add(this.targetElement(), 'blur', this.onBlur, this);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\n if (!Browser.isDevice) {\n this.keyboardModule = new KeyboardEvents(this.targetElement(), {\n keyAction: this.keyActionHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n }\n this.bindClearEvent();\n };\n DropDownList.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DropDownList.prototype.unBindCommonEvent = function () {\n EventHandler.remove(this.targetElement(), 'blur', this.onBlur);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\n if (!Browser.isDevice) {\n this.keyboardModule.destroy();\n }\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown', this.resetHandler);\n }\n };\n DropDownList.prototype.updateIconState = function () {\n if (this.showClearButton) {\n if (this.inputElement.value !== '') {\n removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n else {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n };\n /**\n * Event binding for list\n */\n DropDownList.prototype.wireListEvents = function () {\n EventHandler.add(this.list, 'click', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n };\n ;\n DropDownList.prototype.onSearch = function (e) {\n if (e.charCode !== 32 && e.charCode !== 13) {\n if (this.list === undefined) {\n this.renderList();\n }\n this.searchKeyEvent = e;\n if (!this.isRequested && !isNullOrUndefined(this.list.querySelector('li'))) {\n this.incrementalSearch(e);\n }\n }\n };\n DropDownList.prototype.onMouseClick = function (e) {\n var target = e.target;\n var classList = target.classList;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (!this.isValidLI(li)) {\n return;\n }\n this.setSelection(li, e);\n if (Browser.isDevice && this.isFilterLayout()) {\n history.back();\n }\n else {\n var delay = 100;\n this.closePopup(delay);\n }\n };\n DropDownList.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.setHover(currentLi);\n };\n ;\n DropDownList.prototype.setHover = function (li) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.hover)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n ;\n DropDownList.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n ;\n DropDownList.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n ;\n DropDownList.prototype.isValidLI = function (li) {\n return (li && li.hasAttribute('role') && li.getAttribute('role') === 'option');\n };\n ;\n DropDownList.prototype.incrementalSearch = function (e) {\n if (this.liCollections.length > 0) {\n var li = incrementalSearch(e.charCode, this.liCollections, this.activeIndex, true);\n if (!isNullOrUndefined(li)) {\n this.setSelection(li, e);\n this.setScrollPosition();\n }\n }\n };\n ;\n /**\n * Hides the spinner loader.\n * @returns void.\n */\n DropDownList.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n this.spinnerElement.innerHTML = '';\n this.spinnerElement = null;\n }\n };\n /**\n * Shows the spinner loader.\n * @returns void.\n */\n DropDownList.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = Browser.isDevice && !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[1] ||\n !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[0] || this.inputWrapper.buttons[0];\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n }, this.createElement);\n showSpinner(this.spinnerElement);\n }\n };\n DropDownList.prototype.keyActionHandler = function (e) {\n var preventAction = e.action === 'pageUp' || e.action === 'pageDown';\n var preventHomeEnd = this.getModuleName() !== 'dropdownlist' && (e.action === 'home' || e.action === 'end');\n this.isEscapeKey = e.action === 'escape';\n this.isTabKey = !this.isPopupOpen && e.action === 'tab';\n var isNavigation = (e.action === 'down' || e.action === 'up' || e.action === 'pageUp' || e.action === 'pageDown'\n || e.action === 'home' || e.action === 'end');\n if ((this.isEditTextBox() || preventAction || preventHomeEnd) && !this.isPopupOpen) {\n return;\n }\n if (!this.readonly) {\n var isTabAction = e.action === 'tab' || e.action === 'close';\n if (this.list === undefined && !this.isRequested && !isTabAction && e.action !== 'escape') {\n this.searchKeyEvent = e;\n this.renderList();\n }\n if (isNullOrUndefined(this.list) || (!isNullOrUndefined(this.liCollections) &&\n isNavigation && this.liCollections.length === 0) || this.isRequested) {\n return;\n }\n if (isTabAction && this.isPopupOpen || e.action === 'escape') {\n e.preventDefault();\n }\n this.isSelected = e.action === 'escape' ? false : this.isSelected;\n this.isTyped = (isNavigation || e.action === 'escape') ? false : this.isTyped;\n switch (e.action) {\n case 'down':\n case 'up':\n var focusEle = this.list.querySelector('.' + dropDownListClasses.focus);\n if (this.isSelectFocusItem(focusEle)) {\n this.setSelection(focusEle, e);\n }\n else {\n var nextItem = void 0;\n var index = e.action === 'down' ? this.activeIndex + 1 : this.activeIndex - 1;\n var startIndex = 0;\n if (this.getModuleName() === 'autocomplete') {\n startIndex = e.action === 'down' && isNullOrUndefined(this.activeIndex) ? 0 : this.liCollections.length - 1;\n index = index < 0 ? this.liCollections.length - 1 : index === this.liCollections.length ? 0 : index;\n }\n nextItem = isNullOrUndefined(this.activeIndex) ? this.liCollections[startIndex] : this.liCollections[index];\n this.setSelection(nextItem, e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.pageUpSelection(this.activeIndex - this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'pageDown':\n this.pageDownSelection(this.activeIndex + this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'home':\n if (this.getModuleName() === 'dropdownlist') {\n e.preventDefault();\n if (this.activeIndex === 0) {\n return;\n }\n this.setSelection(this.liCollections[0], e);\n }\n break;\n case 'end':\n if (this.getModuleName() === 'dropdownlist') {\n e.preventDefault();\n var lastLi = this.getItems().length - 1;\n if (this.activeIndex === lastLi) {\n return;\n }\n this.setSelection(this.liCollections[lastLi], e);\n }\n break;\n case 'space':\n if (this.getModuleName() === 'dropdownlist') {\n if (!this.beforePopupOpen) {\n this.showPopup();\n }\n }\n break;\n case 'open':\n this.showPopup();\n break;\n case 'hide':\n this.preventAltUp = this.isPopupOpen;\n this.hidePopup();\n this.focusDropDown(e);\n break;\n case 'enter':\n this.selectCurrentItem(e);\n break;\n case 'escape':\n case 'tab':\n case 'close':\n if (this.isPopupOpen) {\n this.hidePopup();\n this.focusDropDown(e);\n }\n break;\n }\n }\n };\n DropDownList.prototype.selectCurrentItem = function (e) {\n if (this.isPopupOpen) {\n var li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n this.hidePopup();\n this.focusDropDown(e);\n }\n else {\n this.showPopup();\n }\n };\n DropDownList.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n DropDownList.prototype.getPageCount = function () {\n var liHeight = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.getBoundingClientRect().height / parseInt(liHeight, 10));\n };\n DropDownList.prototype.pageUpSelection = function (steps, event) {\n var previousItem = steps >= 0 ? this.liCollections[steps + 1] : this.liCollections[0];\n this.setSelection(previousItem, event);\n };\n ;\n DropDownList.prototype.pageDownSelection = function (steps, event) {\n var list = this.getItems();\n var previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];\n this.setSelection(previousItem, event);\n };\n ;\n DropDownList.prototype.unWireEvent = function () {\n EventHandler.remove(this.inputWrapper.container, 'mousedown', this.dropDownClick);\n EventHandler.remove(this.inputWrapper.container, 'keypress', this.onSearch);\n EventHandler.remove(this.inputWrapper.container, 'focus', this.focusIn);\n this.unBindCommonEvent();\n };\n /**\n * Event un binding for list items.\n */\n DropDownList.prototype.unWireListEvents = function () {\n EventHandler.remove(this.list, 'click', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n };\n ;\n DropDownList.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, '#' + this.popupObj.element.id)) &&\n !this.inputWrapper.container.contains(e.target)) {\n if (this.inputWrapper.container.classList.contains(dropDownListClasses.inputFocus) || this.isPopupOpen) {\n this.isDocumentClick = true;\n var isActive = this.isRequested;\n this.isInteracted = false;\n this.hidePopup();\n if (!isActive) {\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n }\n }\n else if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput)\n && !(this.getModuleName() === 'combobox' &&\n !this.allowFiltering && Browser.isDevice && target === this.inputWrapper.buttons[0])) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.targetElement() ||\n document.activeElement === this.filterInput);\n e.preventDefault();\n }\n };\n DropDownList.prototype.activeStateChange = function () {\n if (this.isDocumentClick) {\n this.hidePopup();\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n };\n DropDownList.prototype.focusDropDown = function (e) {\n if (!this.initial && this.isFilterLayout()) {\n this.focusIn();\n }\n };\n DropDownList.prototype.dropDownClick = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable) || this.inputWrapper.clearButton === e.target) {\n return;\n }\n var target = e.target;\n if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput) && this.getModuleName() !== 'combobox') {\n e.preventDefault();\n }\n if (!this.readonly) {\n if (this.isPopupOpen) {\n this.hidePopup();\n if (this.isFilterLayout()) {\n this.focusDropDown(e);\n }\n }\n else {\n this.focusIn();\n this.floatLabelChange();\n this.queryString = this.inputElement.value.trim() === '' ? null : this.inputElement.value;\n this.isDropDownClick = true;\n this.showPopup();\n }\n var proxy_1 = this;\n if (!this.isSecondClick) {\n setTimeout(function () { proxy_1.cloneElements(); }, 100);\n }\n }\n else {\n this.focusIn();\n }\n };\n DropDownList.prototype.cloneElements = function () {\n if (this.list) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n ulElement = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.actionCompleteData.ulElement = ulElement;\n this.isSecondClick = true;\n }\n }\n };\n DropDownList.prototype.updateSelectedItem = function (li, e, preventSelect) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n this.item = li;\n this.itemData = this.getDataByValue(value);\n if (!this.initial && !preventSelect) {\n var items = this.detachChanges();\n this.isSelected = true;\n var eventArgs = {\n e: e,\n item: this.item,\n itemData: items,\n isInteracted: e ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return true;\n }\n }\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (focusedItem) {\n removeClass([focusedItem], dropDownBaseClasses.focus);\n }\n li.setAttribute('aria-selected', 'true');\n this.activeIndex = this.getIndexByValue(value);\n return false;\n };\n DropDownList.prototype.activeItem = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n li.setAttribute('aria-selected', 'true');\n }\n };\n DropDownList.prototype.setValue = function (e) {\n var dataItem = this.getItemData();\n if (dataItem.value === null) {\n Input.setValue(null, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dataItem.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n else if (this.inputElement.previousSibling === this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n }\n if (this.previousValue === dataItem.value) {\n this.isSelected = false;\n return true;\n }\n else {\n this.isSelected = !this.initial ? true : false;\n this.isSelectCustom = false;\n if (this.getModuleName() === 'dropdownlist') {\n this.updateIconState();\n }\n return false;\n }\n };\n DropDownList.prototype.setSelection = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n this.previousItemData = (!isNullOrUndefined(this.itemData)) ? this.itemData : null;\n var argsCancel = this.updateSelectedItem(li, e, false);\n if (argsCancel) {\n return;\n }\n }\n if (this.list) {\n this.removeHover();\n }\n this.previousSelectedLI = (!isNullOrUndefined(this.selectedLI)) ? this.selectedLI : null;\n this.selectedLI = li;\n if (this.setValue(e)) {\n return;\n }\n if (this.isPopupOpen) {\n attributes(this.targetElement(), { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n if (this.isFilterLayout()) {\n attributes(this.filterInput, { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n }\n }\n if ((!this.isPopupOpen && !isNullOrUndefined(li)) || (this.isPopupOpen && !isNullOrUndefined(e) &&\n (e.type !== 'keydown' || e.type === 'keydown' && e.action === 'enter'))) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n if (this.isPopupOpen && !isNullOrUndefined(this.selectedLI) && this.itemData !== null && (!e || e.type !== 'click')) {\n this.setScrollPosition(e);\n }\n };\n DropDownList.prototype.setValueTemplate = function () {\n var compiledString;\n if (!this.valueTempElement) {\n this.valueTempElement = this.createElement('span', { className: dropDownListClasses.value });\n this.inputElement.parentElement.insertBefore(this.valueTempElement, this.inputElement);\n this.inputElement.style.display = 'none';\n }\n this.valueTempElement.innerHTML = '';\n compiledString = compile(this.valueTemplate);\n for (var _i = 0, _a = compiledString(this.itemData); _i < _a.length; _i++) {\n var item = _a[_i];\n this.valueTempElement.appendChild(item);\n }\n };\n DropDownList.prototype.removeSelection = function () {\n var selectedItems = this.list.querySelectorAll('.' + dropDownBaseClasses.selected);\n if (selectedItems.length) {\n removeClass(selectedItems, dropDownBaseClasses.selected);\n selectedItems[0].removeAttribute('aria-selected');\n }\n };\n ;\n DropDownList.prototype.getItemData = function () {\n var fields = this.fields;\n var dataItem = null;\n dataItem = this.itemData;\n var dataValue;\n var dataText;\n if (!isNullOrUndefined(dataItem)) {\n dataValue = getValue(fields.value, dataItem);\n dataText = getValue(fields.text, dataItem);\n }\n var value = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataValue : dataItem);\n var text = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataText : dataItem);\n return { value: value, text: text };\n };\n /**\n * To trigger the change event for list.\n */\n DropDownList.prototype.onChangeEvent = function (eve) {\n var dataItem = this.getItemData();\n var index = this.isSelectCustom ? null : this.activeIndex;\n this.setProperties({ 'value': dataItem.value, 'index': index, 'text': dataItem.text }, true);\n this.detachChangeEvent(eve);\n };\n ;\n DropDownList.prototype.detachChanges = function () {\n var items;\n if (typeof this.itemData === 'string' ||\n typeof this.itemData === 'boolean' ||\n typeof this.itemData === 'number') {\n items = Object.defineProperties({}, {\n value: {\n value: this.itemData,\n enumerable: true\n },\n text: {\n value: this.itemData,\n enumerable: true\n }\n });\n }\n else {\n items = this.itemData;\n }\n return items;\n };\n DropDownList.prototype.detachChangeEvent = function (eve) {\n this.isSelected = false;\n this.previousValue = this.value;\n this.activeIndex = this.index;\n this.typedString = !isNullOrUndefined(this.text) ? this.text : '';\n if (!this.initial) {\n var items = this.detachChanges();\n var preItems = void 0;\n if (typeof this.previousItemData === 'string' ||\n typeof this.previousItemData === 'boolean' ||\n typeof this.previousItemData === 'number') {\n preItems = Object.defineProperties({}, {\n value: {\n value: this.previousItemData,\n enumerable: true\n },\n text: {\n value: this.previousItemData,\n enumerable: true\n }\n });\n }\n else {\n preItems = this.previousItemData;\n }\n this.setHiddenValue();\n var eventArgs = {\n e: eve,\n item: this.item,\n itemData: items,\n previousItem: this.previousSelectedLI,\n previousItemData: preItems,\n isInteracted: eve ? true : false,\n value: this.value,\n element: this.element\n };\n this.trigger('change', eventArgs);\n }\n };\n DropDownList.prototype.setHiddenValue = function () {\n if (!isNullOrUndefined(this.value)) {\n this.hiddenElement.innerHTML = '';\n var selectedElement = this.hiddenElement.querySelector('option');\n selectedElement.setAttribute('value', this.value.toString());\n }\n else {\n this.hiddenElement.innerHTML = '';\n }\n };\n /**\n * Filter bar implementation\n */\n DropDownList.prototype.onFilterUp = function (e) {\n this.isValidKey = e.keyCode === 40 || e.keyCode === 38 || this.isValidKey;\n if (this.isValidKey) {\n this.isValidKey = false;\n switch (e.keyCode) {\n case 38: //up arrow \n case 40: //down arrow \n if (this.getModuleName() === 'autocomplete' && !this.isPopupOpen && !this.preventAltUp && !this.isRequested) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else {\n this.preventAutoFill = false;\n }\n this.preventAltUp = false;\n e.preventDefault();\n break;\n case 46: //delete\n case 8: //backspace\n this.typedString = this.filterInput.value;\n if (!this.isPopupOpen && this.typedString !== '' || this.isPopupOpen && this.queryString.length > 0) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else if (this.typedString === '') {\n this.resetFocusElement();\n this.activeIndex = null;\n if (this.getModuleName() === 'autocomplete') {\n this.hidePopup();\n }\n }\n e.preventDefault();\n break;\n default:\n this.typedString = this.filterInput.value;\n this.preventAutoFill = false;\n this.searchLists(e);\n break;\n }\n }\n };\n DropDownList.prototype.onFilterDown = function (e) {\n switch (e.keyCode) {\n case 13: //enter\n break;\n case 40: //down arrow\n case 38: //up arrow \n this.queryString = this.filterInput.value;\n e.preventDefault();\n break;\n case 9: //tab \n if (this.isPopupOpen) {\n e.preventDefault();\n }\n break;\n default:\n this.prevSelectPoints = this.getSelectionPoints();\n this.queryString = this.filterInput.value;\n break;\n }\n };\n DropDownList.prototype.removeFillSelection = function () {\n if (this.isInteracted) {\n var selection = this.getSelectionPoints();\n this.inputElement.setSelectionRange(selection.end, selection.end);\n }\n };\n DropDownList.prototype.getSelectionPoints = function () {\n var input = this.inputElement;\n return { start: Math.abs(input.selectionStart), end: Math.abs(input.selectionEnd) };\n };\n DropDownList.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.activeIndex = null;\n if (this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon)) {\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n clearElement.style.visibility = this.filterInput.value === '' ? 'hidden' : 'visible';\n }\n this.isDataFetched = false;\n if (this.isFiltering()) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isCustomFilter = true;\n _this.filteringAction(dataSource, query, fields);\n },\n baseEventArgs: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isCustomFilter && !eventArgs_1.preventDefaultAction) {\n var filterQuery = this.query ? this.query.clone() : new Query();\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n this.filteringAction(this.dataSource, filterQuery, this.fields);\n }\n }\n };\n DropDownList.prototype.filteringAction = function (dataSource, query, fields) {\n if (!isNullOrUndefined(this.filterInput)) {\n this.beforePopupOpen = true;\n if (this.filterInput.value.trim() === '') {\n this.actionCompleteData.isUpdated = false;\n this.isTyped = false;\n if (!isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list);\n }\n this.isTyped = true;\n if (!isNullOrUndefined(this.itemData) && this.getModuleName() === 'dropdownlist') {\n this.focusIndexItem();\n this.setScrollPosition();\n }\n this.isNotSearchList = true;\n }\n else {\n this.isNotSearchList = false;\n this.resetList(dataSource, fields, query);\n }\n }\n };\n DropDownList.prototype.setSearchBox = function (popupElement) {\n if (this.isFiltering()) {\n var parentElement = this.createElement('span', {\n className: dropDownListClasses.filterParent\n });\n this.filterInput = this.createElement('input', {\n attrs: { type: 'text' },\n className: dropDownListClasses.filterInput\n });\n this.element.parentNode.insertBefore(this.filterInput, this.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ?\n [dropDownListClasses.backIcon, dropDownListClasses.filterBarClearIcon] : [dropDownListClasses.filterBarClearIcon],\n properties: { placeholder: this.filterBarPlaceholder }\n }, this.createElement);\n append([this.filterInputObj.container], parentElement);\n prepend([parentElement], popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null,\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n if (!Browser.isDevice) {\n this.searchKeyModule = new KeyboardEvents(this.filterInput, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n }\n EventHandler.add(this.filterInput, 'input', this.onInput, this);\n EventHandler.add(this.filterInput, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.filterInput, 'keydown', this.onFilterDown, this);\n EventHandler.add(this.filterInput, 'blur', this.onBlur, this);\n return this.filterInputObj;\n }\n else {\n return inputObject;\n }\n };\n ;\n DropDownList.prototype.onInput = function () {\n this.isValidKey = true;\n };\n DropDownList.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n };\n DropDownList.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n if (this.isNotSearchList) {\n this.isNotSearchList = false;\n return;\n }\n if (this.isActive) {\n var selectedItem = this.selectedLI ? this.selectedLI.cloneNode(true) : null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent) && this.searchKeyEvent.type === 'keydown') {\n this.isRequested = false;\n this.keyActionHandler(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent)) {\n this.incrementalSearch(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n this.list.scrollTop = 0;\n if (!isNullOrUndefined(ulElement)) {\n attributes(ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n }\n if (this.initRemoteRender) {\n this.initial = true;\n this.activeIndex = this.index;\n this.updateValues();\n this.initRemoteRender = false;\n this.initial = false;\n }\n if (this.getModuleName() !== 'autocomplete' && this.isFiltering() && !this.isTyped) {\n if (!this.actionCompleteData.isUpdated || ((!this.isCustomFilter\n && !this.isFilterFocus)\n && ((this.dataSource instanceof DataManager)\n || (!isNullOrUndefined(this.dataSource.length) && this.dataSource.length !== 0)))) {\n this.actionCompleteData = { ulElement: ulElement.cloneNode(true), list: list, isUpdated: true };\n }\n this.addNewItem(list, selectedItem);\n if (!isNullOrUndefined(this.itemData)) {\n this.focusIndexItem();\n }\n }\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n }\n };\n DropDownList.prototype.addNewItem = function (listData, newElement) {\n var _this = this;\n if (!isNullOrUndefined(this.itemData) && !isNullOrUndefined(newElement)) {\n var value_1 = this.getItemData().value;\n var isExist = listData.some(function (data) {\n return (((typeof data === 'string' || typeof data === 'number') && data === value_1) ||\n (getValue(_this.fields.value, data) === value_1));\n });\n if (!isExist) {\n this.addItem(this.itemData);\n }\n }\n };\n DropDownList.prototype.updateActionCompleteData = function (li, item) {\n if (this.getModuleName() !== 'autocomplete' && this.actionCompleteData.ulElement) {\n this.actionCompleteData.ulElement.appendChild(li.cloneNode(true));\n if (this.isFiltering()) {\n this.actionCompleteData.list.push(item);\n }\n }\n };\n DropDownList.prototype.focusIndexItem = function () {\n var value = this.getItemData().value;\n this.activeIndex = this.getIndexByValue(value);\n var element = this.list.querySelector('[data-value=\"' + value + '\"]');\n this.selectedLI = element;\n this.activeItem(element);\n this.removeFocus();\n };\n DropDownList.prototype.updateSelection = function () {\n var selectedItem = this.list.querySelector('.' + dropDownBaseClasses.selected);\n if (selectedItem) {\n this.setProperties({ 'index': this.getIndexByValue(selectedItem.getAttribute('data-value')) });\n this.activeIndex = this.index;\n }\n else {\n this.removeFocus();\n this.list.querySelector('.' + dropDownBaseClasses.li).classList.add(dropDownListClasses.focus);\n }\n };\n DropDownList.prototype.removeFocus = function () {\n var highlightedItem = this.list.querySelectorAll('.' + dropDownListClasses.focus);\n if (highlightedItem && highlightedItem.length) {\n removeClass(highlightedItem, dropDownListClasses.focus);\n }\n };\n ;\n DropDownList.prototype.renderPopup = function () {\n if (this.popupObj && document.body.contains(this.popupObj.element)) {\n this.refreshPopup();\n return;\n }\n var args = { cancel: false };\n this.trigger('beforeOpen', args);\n if (args.cancel) {\n return;\n }\n var popupEle = this.createElement('div', {\n id: this.element.id + '_popup', className: 'e-ddl e-popup ' + (this.cssClass != null ? this.cssClass : '')\n });\n var searchBox = this.setSearchBox(popupEle);\n this.listHeight = formatUnit(this.popupHeight);\n if (this.headerTemplate) {\n this.setHeaderTemplate(popupEle);\n }\n append([this.list], popupEle);\n if (this.footerTemplate) {\n this.setFooterTemplate(popupEle);\n }\n document.body.appendChild(popupEle);\n popupEle.style.visibility = 'hidden';\n if (this.popupHeight !== 'auto') {\n this.searchBoxHeight = 0;\n if (!isNullOrUndefined(searchBox.container)) {\n this.searchBoxHeight = (searchBox.container.parentElement).getBoundingClientRect().height;\n this.listHeight = (parseInt(this.listHeight, 10) - (this.searchBoxHeight)).toString() + 'px';\n }\n if (this.headerTemplate) {\n var height = Math.round(this.header.getBoundingClientRect().height);\n this.listHeight = (parseInt(this.listHeight, 10) - (height + this.searchBoxHeight)).toString() + 'px';\n }\n if (this.footerTemplate) {\n var height = Math.round(this.footer.getBoundingClientRect().height);\n this.listHeight = (parseInt(this.listHeight, 10) - (height + this.searchBoxHeight)).toString() + 'px';\n }\n this.list.style.maxHeight = (parseInt(this.listHeight, 10) - 2).toString() + 'px'; // due to box-sizing property\n popupEle.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n popupEle.style.height = 'auto';\n }\n var offsetValue = 0;\n var left;\n if (!isNullOrUndefined(this.selectedLI) && (!isNullOrUndefined(this.activeIndex) && this.activeIndex >= 0)) {\n this.setScrollPosition();\n }\n else {\n this.list.scrollTop = 0;\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n offsetValue = this.getOffsetValue(popupEle);\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10));\n }\n this.getFocusElement();\n this.createPopup(popupEle, offsetValue, left);\n this.checkCollision(popupEle);\n if (Browser.isDevice) {\n this.popupObj.element.classList.add(dropDownListClasses.device);\n if (this.getModuleName() === 'dropdownlist' || (this.getModuleName() === 'combobox'\n && !this.allowFiltering && this.isDropDownClick)) {\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n if (this.isFilterLayout()) {\n this.popupObj.element.classList.add(dropDownListClasses.mobileFilter);\n this.popupObj.position = { X: 0, Y: 0 };\n this.popupObj.dataBind();\n attributes(this.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n this.setSearchBoxPosition();\n this.backIconElement = searchBox.container.querySelector('.e-back-icon');\n this.clearIconElement = searchBox.container.querySelector('.' + dropDownListClasses.clearIcon);\n EventHandler.add(this.backIconElement, 'click', this.clickOnBackIcon, this);\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n }\n }\n popupEle.style.visibility = 'visible';\n addClass([popupEle], 'e-popup-close');\n var scrollParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollParentElements_1 = scrollParentElements; _i < scrollParentElements_1.length; _i++) {\n var element = scrollParentElements_1[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n EventHandler.add(this.list, 'scroll', this.listScroll, this);\n }\n attributes(this.targetElement(), { 'aria-expanded': 'true' });\n var inputParent = this.isFiltering() ? this.filterInput.parentElement : this.inputWrapper.container;\n addClass([inputParent], [dropDownListClasses.inputFocus]);\n var animModel = { name: 'FadeIn', duration: 100 };\n this.beforePopupOpen = true;\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.iconAnimation]);\n this.popupObj.show(new Animation(eventArgs.animation), (this.zIndex === 1000) ? this.element : null);\n };\n DropDownList.prototype.checkCollision = function (popupEle) {\n if (!Browser.isDevice || (Browser.isDevice && !(this.getModuleName() === 'dropdownlist' || this.isDropDownClick))) {\n var collision = isCollide(popupEle);\n if (collision.length > 0) {\n popupEle.style.marginTop = -parseInt(getComputedStyle(popupEle).marginTop, 10) + 'px';\n }\n }\n };\n DropDownList.prototype.getOffsetValue = function (popupEle) {\n var popupStyles = getComputedStyle(popupEle);\n var borderTop = parseInt(popupStyles.borderTop, 10);\n var borderBottom = parseInt(popupStyles.borderBottom, 10);\n return this.setPopupPosition(borderTop + borderBottom);\n };\n DropDownList.prototype.createPopup = function (element, offsetValue, left) {\n var _this = this;\n this.popupObj = new Popup(element, {\n width: this.setWidth(), targetType: 'relative',\n relateTo: this.inputWrapper.container, collision: { X: 'flip', Y: 'flip' }, offsetY: offsetValue,\n enableRtl: this.enableRtl, offsetX: left, position: { X: 'left', Y: 'bottom' },\n zIndex: this.zIndex,\n close: function () {\n if (!_this.isDocumentClick) {\n _this.focusDropDown();\n }\n _this.isDocumentClick = false;\n _this.destroyPopup();\n },\n open: function () {\n EventHandler.add(document, 'mousedown', _this.onDocumentClick, _this);\n _this.isPopupOpen = true;\n if (_this.isFilterLayout()) {\n removeClass([_this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n _this.isFilterFocus = true;\n _this.filterInput.focus();\n if (_this.inputWrapper.clearButton) {\n addClass([_this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n _this.activeStateChange();\n }\n });\n };\n DropDownList.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0;\n };\n DropDownList.prototype.getFocusElement = function () {\n // combo-box used this method\n };\n DropDownList.prototype.isFilterLayout = function () {\n return this.getModuleName() === 'dropdownlist' && this.allowFiltering;\n };\n DropDownList.prototype.scrollHandler = function () {\n if (Browser.isDevice && ((this.getModuleName() === 'dropdownlist' &&\n !this.isFilterLayout()) || (this.getModuleName() === 'combobox' && !this.allowFiltering && this.isDropDownClick))) {\n this.hidePopup();\n }\n if (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement.style.zIndex = '0';\n this.fixedHeaderElement.style.display = 'none';\n }\n };\n DropDownList.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.popupObj.element.style.maxHeight = '100%';\n this.popupObj.element.style.width = '100%';\n this.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n DropDownList.prototype.setPopupPosition = function (border) {\n var offsetValue;\n var popupOffset = border;\n var selectedLI = this.list.querySelector('.' + dropDownListClasses.focus) || this.selectedLI;\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n var lastItem = this.isEmptyList() ? this.list : this.liCollections[this.getItems().length - 1];\n var liHeight = firstItem.getBoundingClientRect().height;\n var listHeight = this.list.offsetHeight / 2;\n var height = isNullOrUndefined(selectedLI) ? firstItem.offsetTop : selectedLI.offsetTop;\n var lastItemOffsetValue = lastItem.offsetTop;\n if (lastItemOffsetValue - listHeight < height && !isNullOrUndefined(this.liCollections) &&\n this.liCollections.length > 0 && !isNullOrUndefined(selectedLI)) {\n var count = this.list.offsetHeight / liHeight;\n var paddingBottom = parseInt(getComputedStyle(this.list).paddingBottom, 10);\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - popupOffset + paddingBottom;\n this.list.scrollTop = selectedLI.offsetTop;\n }\n else if (height > listHeight) {\n offsetValue = listHeight - liHeight / 2;\n this.list.scrollTop = height - listHeight + liHeight / 2;\n }\n else {\n offsetValue = height;\n }\n var inputHeight = this.inputWrapper.container.offsetHeight;\n offsetValue = offsetValue + liHeight + popupOffset - ((liHeight - inputHeight) / 2);\n return -offsetValue;\n };\n DropDownList.prototype.setWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.inputWrapper.container.offsetWidth * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n DropDownList.prototype.scrollBottom = function (isInitial) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n nextOffset = isInitial ? nextOffset + parseInt(getComputedStyle(this.list).paddingTop, 10) * 2 : nextOffset;\n var boxRange = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n boxRange = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset || !(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n DropDownList.prototype.scrollTop = function () {\n var nextOffset = this.selectedLI.offsetTop - this.list.scrollTop;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop);\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = this.selectedLI.offsetTop - (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n };\n DropDownList.prototype.isEditTextBox = function () {\n return false;\n };\n DropDownList.prototype.isFiltering = function () {\n return this.allowFiltering;\n };\n DropDownList.prototype.isPopupButton = function () {\n return true;\n };\n DropDownList.prototype.setScrollPosition = function (e) {\n if (!isNullOrUndefined(e)) {\n switch (e.action) {\n case 'pageDown':\n case 'down':\n case 'end':\n this.scrollBottom();\n break;\n default:\n this.scrollTop();\n break;\n }\n }\n else {\n this.scrollBottom(true);\n }\n };\n DropDownList.prototype.clearText = function () {\n this.filterInput.value = '';\n this.searchLists(null);\n };\n DropDownList.prototype.listScroll = function () {\n this.filterInput.blur();\n };\n DropDownList.prototype.closePopup = function (delay) {\n this.isTyped = false;\n if (!(this.popupObj && document.body.contains(this.popupObj.element) && this.beforePopupOpen)) {\n return;\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n this.isActive = false;\n this.filterInputObj = null;\n this.isDropDownClick = false;\n this.preventAutoFill = false;\n var scrollableParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollableParentElements_1 = scrollableParentElements; _i < scrollableParentElements_1.length; _i++) {\n var element = scrollableParentElements_1[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n removeClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n EventHandler.remove(this.list, 'scroll', this.listScroll);\n }\n if (this.isFilterLayout()) {\n if (!Browser.isDevice) {\n this.searchKeyModule.destroy();\n if (this.clearIconElement) {\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n }\n if (this.backIconElement) {\n EventHandler.remove(this.backIconElement, 'click', this.clickOnBackIcon);\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n EventHandler.remove(this.filterInput, 'input', this.onInput);\n EventHandler.remove(this.filterInput, 'keyup', this.onFilterUp);\n EventHandler.remove(this.filterInput, 'keydown', this.onFilterDown);\n EventHandler.remove(this.filterInput, 'blur', this.onBlur);\n this.filterInput = null;\n }\n attributes(this.targetElement(), { 'aria-expanded': 'false', 'aria-activedescendant': null });\n this.inputWrapper.container.classList.remove(dropDownListClasses.iconAnimation);\n if (this.isFiltering()) {\n this.actionCompleteData.isUpdated = false;\n }\n this.beforePopupOpen = false;\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (this.getModuleName() === 'autocomplete') {\n this.rippleFun();\n }\n if (this.isPopupOpen) {\n this.popupObj.hide(new Animation(eventArgs.animation));\n }\n else {\n this.destroyPopup();\n }\n };\n DropDownList.prototype.destroyPopup = function () {\n this.isPopupOpen = false;\n this.isFilterFocus = false;\n this.popupObj.destroy();\n detach(this.popupObj.element);\n };\n DropDownList.prototype.clickOnBackIcon = function () {\n this.hidePopup();\n this.focusIn();\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n DropDownList.prototype.render = function () {\n if (this.element.tagName === 'INPUT') {\n this.inputElement = this.element;\n }\n else {\n this.inputElement = this.createElement('input');\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n this.element.parentElement.insertBefore(this.inputElement, this.element);\n this.preventTabIndex(this.inputElement);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n buttons: this.isPopupButton() ? [dropDownListClasses.icon] : null,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.getModuleName() === 'dropdownlist' ? true : this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n }, this.createElement);\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.inputWrapper.container);\n }\n else {\n this.inputElement.parentElement.insertBefore(this.element, this.inputElement);\n }\n this.hiddenElement = this.createElement('select', {\n attrs: { 'aria-hidden': 'true', 'tabindex': '-1', 'class': dropDownListClasses.hiddenElement }\n });\n prepend([this.hiddenElement], this.inputWrapper.container);\n this.validationAttribute(this.element, this.hiddenElement);\n this.setFields();\n this.inputWrapper.container.style.width = formatUnit(this.width);\n this.inputWrapper.container.classList.add('e-ddl');\n this.wireEvent();\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement.id = id + '_hidden';\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n attributes(this.targetElement(), this.getAriaAttributes());\n this.setHTMLAttributes();\n if (this.value !== null || this.activeIndex !== null || this.text !== null) {\n this.initValue();\n }\n else if (this.element.tagName === 'SELECT' && this.element.options[0]) {\n var selectElement = this.element;\n this.value = selectElement.options[selectElement.selectedIndex].value;\n this.text = isNullOrUndefined(this.value) ? null : selectElement.options[selectElement.selectedIndex].textContent;\n this.initValue();\n }\n this.preventTabIndex(this.element);\n if (!this.enabled) {\n this.targetElement().tabIndex = -1;\n }\n this.initial = false;\n this.element.style.opacity = '';\n this.inputElement.onselect = function (e) { e.stopImmediatePropagation(); };\n this.inputElement.onchange = function (e) { e.stopImmediatePropagation(); };\n if (this.element.hasAttribute('autofocus')) {\n this.focusIn();\n }\n };\n ;\n DropDownList.prototype.setFooterTemplate = function (popupEle) {\n var compiledString;\n if (this.footer) {\n this.footer.innerHTML = '';\n }\n else {\n this.footer = this.createElement('div');\n addClass([this.footer], dropDownListClasses.footer);\n }\n compiledString = compile(this.footerTemplate);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.footer.appendChild(item);\n }\n append([this.footer], popupEle);\n };\n DropDownList.prototype.setHeaderTemplate = function (popupEle) {\n var compiledString;\n if (this.header) {\n this.header.innerHTML = '';\n }\n else {\n this.header = this.createElement('div');\n addClass([this.header], dropDownListClasses.header);\n }\n compiledString = compile(this.headerTemplate);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.header.appendChild(item);\n }\n var contentEle = popupEle.querySelector('div.e-content');\n popupEle.insertBefore(this.header, contentEle);\n };\n DropDownList.prototype.setOldText = function (text) {\n this.text = text;\n };\n DropDownList.prototype.setOldValue = function (value) {\n this.value = value;\n };\n DropDownList.prototype.refreshPopup = function () {\n if (!isNullOrUndefined(this.popupObj) && document.body.contains(this.popupObj.element) &&\n ((this.allowFiltering && !(Browser.isDevice && this.isFilterLayout())) || this.getModuleName() === 'autocomplete')) {\n this.popupObj.refreshPosition(this.inputWrapper.container);\n }\n };\n DropDownList.prototype.updateDataSource = function (props) {\n this.clear(null, props);\n this.resetList(this.dataSource);\n if (!this.isCustomFilter && !this.isFilterFocus && document.activeElement !== this.filterInput) {\n this.itemData = this.getDataByValue(this.value);\n var dataItem = this.getItemData();\n this.setProperties({ 'value': dataItem.value, 'text': dataItem.text });\n }\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n DropDownList.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'dropdownlist') {\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'dataSource':\n break;\n case 'htmlAttributes':\n this.setHTMLAttributes();\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': formatUnit(newProp.width) });\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'filterBarPlaceholder':\n if (this.filterInput) {\n Input.setPlaceholder(newProp.filterBarPlaceholder, this.filterInput);\n }\n break;\n case 'readonly':\n if (this.getModuleName() !== 'dropdownlist') {\n Input.setReadonly(newProp.readonly, this.inputElement);\n }\n break;\n case 'cssClass':\n this.setCssClass(newProp, oldProp);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'text':\n if (newProp.text === null) {\n this.clear();\n break;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var li = this.getElementByText(newProp.text);\n if (this.isValidLI(li)) {\n this.setSelection(li, null);\n }\n else {\n this.setOldText(oldProp.text);\n }\n }\n break;\n case 'value':\n if (newProp.value === null) {\n this.clear();\n break;\n }\n this.notify('beforeValueChange', { newProp: newProp }); // gird component value type change\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var item = this.getElementByValue(newProp.value);\n if (this.isValidLI(item)) {\n this.setSelection(item, null);\n }\n else {\n this.setOldValue(oldProp.value);\n }\n }\n break;\n case 'index':\n if (newProp.index === null) {\n this.clear();\n break;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var element = this.liCollections[newProp.index];\n if (this.isValidLI(element)) {\n this.setSelection(element, null);\n }\n else {\n this.index = oldProp.index;\n }\n }\n break;\n case 'footerTemplate':\n if (this.popupObj) {\n this.setFooterTemplate(this.popupObj.element);\n }\n break;\n case 'headerTemplate':\n if (this.popupObj) {\n this.setHeaderTemplate(this.popupObj.element);\n }\n break;\n case 'valueTemplate':\n if (!isNullOrUndefined(this.itemData) && this.valueTemplate != null) {\n this.setValueTemplate();\n }\n break;\n case 'floatLabelType':\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, newProp.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.inputElement, this.inputWrapper, null, this.createElement);\n this.bindClearEvent();\n break;\n default:\n var ddlProps = void 0;\n ddlProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, ddlProps.newProperty, ddlProps.oldProperty);\n break;\n }\n }\n };\n DropDownList.prototype.setCssClass = function (newProp, oldProp) {\n this.inputWrapper.container.classList.remove(oldProp.cssClass);\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.element.classList.remove(oldProp.cssClass);\n this.popupObj.element.classList.add(newProp.cssClass);\n }\n };\n /**\n * Return the module name.\n * @private\n */\n DropDownList.prototype.getModuleName = function () {\n return 'dropdownlist';\n };\n /**\n * Opens the popup that displays the list of items.\n * @returns void.\n */\n DropDownList.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n if (this.isFiltering() && !this.isActive && this.actionCompleteData.list && this.actionCompleteData.list[0]) {\n this.isActive = true;\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list, null, true);\n }\n else if (isNullOrUndefined(this.list) || !isUndefined(this.list) && this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderList();\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n var proxy_2 = this;\n window.onpopstate = function () {\n proxy_2.hidePopup();\n };\n history.pushState({}, '');\n }\n if (!isNullOrUndefined(this.list.children[0]) || this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderPopup();\n }\n attributes(this.targetElement(), { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n };\n /**\n * Hides the popup if it is in an open state.\n * @returns void.\n */\n DropDownList.prototype.hidePopup = function () {\n if (this.isEscapeKey && this.getModuleName() === 'dropdownlist') {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n if (!isNullOrUndefined(this.index)) {\n this.selectedLI = this.liCollections[this.index];\n this.updateSelectedItem(this.selectedLI, null, true);\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n }\n else {\n this.resetSelection();\n }\n }\n this.closePopup();\n var dataItem = this.getItemData();\n if (this.inputElement.value.trim() === '' && !this.isInteracted && (this.isSelectCustom ||\n !isNullOrUndefined(this.selectedLI) && this.inputElement.value !== dataItem.text)) {\n this.isSelectCustom = false;\n this.clear();\n }\n };\n /**\n * Sets the focus on the component for interaction.\n * @returns void.\n */\n DropDownList.prototype.focusIn = function () {\n if (!this.enabled) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable)) {\n return;\n }\n var isFocused = false;\n if (this.preventFocus && Browser.isDevice) {\n this.inputWrapper.container.tabIndex = 1;\n this.inputWrapper.container.focus();\n this.preventFocus = false;\n isFocused = true;\n }\n if (!isFocused) {\n this.targetElement().focus();\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n this.onFocus();\n };\n /**\n * Moves the focus from the component if the component is already focused.\n * @returns void.\n */\n DropDownList.prototype.focusOut = function () {\n if (!this.enabled) {\n return;\n }\n this.isTyped = true;\n this.hidePopup();\n this.targetElement().blur();\n removeClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n DropDownList.prototype.destroy = function () {\n var _this = this;\n this.isActive = false;\n this.hidePopup();\n this.unWireEvent();\n if (this.list) {\n this.unWireListEvents();\n }\n if (this.element && !this.element.classList.contains('e-' + this.getModuleName())) {\n return;\n }\n var attrArray = ['readonly', 'aria-disabled', 'aria-placeholder',\n 'placeholder', 'aria-owns', 'aria-labelledby', 'aria-haspopup', 'aria-expanded',\n 'aria-activedescendant', 'autocomplete', 'aria-readonly', 'autocorrect',\n 'autocapitalize', 'spellcheck', 'aria-autocomplete'];\n attrArray.forEach(function (value) {\n _this.inputElement.removeAttribute(value);\n });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n this.inputElement.classList.remove('e-input');\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.element.style.display = 'block';\n if (this.inputWrapper.container.parentElement.tagName === this.getNgDirective()) {\n detach(this.inputWrapper.container);\n }\n else {\n this.inputWrapper.container.parentElement.insertBefore(this.element, this.inputWrapper.container);\n detach(this.inputWrapper.container);\n }\n _super.prototype.destroy.call(this);\n };\n ;\n /**\n * Gets all the list items bound on this component.\n * @returns Element[].\n */\n DropDownList.prototype.getItems = function () {\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n return this.ulElement ? _super.prototype.getItems.call(this) : [];\n };\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], DropDownList.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], DropDownList.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], DropDownList.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"focus\", void 0);\n DropDownList = __decorate([\n NotifyPropertyChanges\n ], DropDownList);\n return DropDownList;\n}(DropDownBase));\nexport { DropDownList };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Event, addClass, Browser, removeClass, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, NotifyPropertyChanges, getValue, setValue } from '@syncfusion/ej2-base';\nimport { DropDownList, dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { Search } from '../common/incremental-search';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\n/* tslint:enable */\nvar SPINNER_CLASS = 'e-atc-spinner-icon';\ndropDownListClasses.root = 'e-combobox';\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The ComboBox component allows the user to type a value or choose an option from the list of predefined options.\n * ```html\n * \n * ```\n * ```typescript\n * let games:ComboBox = new ComboBox();\n * games.appendTo(\"#list\");\n * ```\n */\nvar ComboBox = /** @class */ (function (_super) {\n __extends(ComboBox, _super);\n /**\n * *Constructor for creating the component\n */\n function ComboBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n /**\n * Initialize the event handler\n * @private\n */\n ComboBox.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ComboBox.prototype.wireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur, this);\n EventHandler.add(this.inputWrapper.container, 'blur', this.onBlur, this);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick, this);\n }\n EventHandler.add(this.inputElement, 'focus', this.targetFocus, this);\n if (!this.readonly) {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\n this.bindCommonEvent();\n };\n ComboBox.prototype.preventBlur = function (e) {\n if ((!this.allowFiltering && document.activeElement !== this.inputElement &&\n !document.activeElement.classList.contains(dropDownListClasses.input) && Browser.isDevice || !Browser.isDevice)) {\n e.preventDefault();\n }\n };\n ComboBox.prototype.targetElement = function () {\n return this.inputElement;\n };\n ComboBox.prototype.setOldText = function (text) {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n this.removeSelection();\n };\n ComboBox.prototype.setOldValue = function (value) {\n if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n this.removeSelection();\n this.setHiddenValue();\n };\n ComboBox.prototype.valueMuteChange = function (value) {\n var inputValue = isNullOrUndefined(value) ? null : value.toString();\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value, text: value, index: null }, true);\n this.activeIndex = this.index;\n var fields = this.fields;\n var dataItem = {};\n dataItem[fields.text] = isNullOrUndefined(value) ? null : value.toString();\n dataItem[fields.value] = isNullOrUndefined(value) ? null : value.toString();\n this.itemData = dataItem;\n this.item = null;\n if (this.previousValue !== this.value) {\n this.detachChangeEvent(null);\n }\n };\n ComboBox.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n var li = this.getElementByValue(this.value);\n if (li) {\n this.setSelection(li, null);\n }\n else if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var li = this.getElementByText(this.text);\n if (li) {\n this.setSelection(li, null);\n }\n else {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n ComboBox.prototype.updateIconState = function () {\n if (this.showClearButton) {\n if (this.inputElement.value !== '' && !this.readonly) {\n removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n else {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n };\n ComboBox.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-owns': this.element.id + '_options',\n 'role': 'combobox',\n 'aria-autocomplete': 'both',\n 'aria-labelledby': this.hiddenElement.id,\n 'aria-hasPopup': 'true',\n 'aria-expanded': 'false',\n 'aria-readonly': this.readonly.toString(),\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n };\n return ariaAttributes;\n };\n ComboBox.prototype.searchLists = function (e) {\n this.isTyped = true;\n if (this.isFiltering()) {\n _super.prototype.searchLists.call(this, e);\n if (this.filterInput.value.trim() === '') {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n }\n else {\n if (this.ulElement && this.inputElement.value === '' && this.preventAutoFill) {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n this.incrementalSearch(e);\n }\n };\n ComboBox.prototype.getNgDirective = function () {\n return 'EJS-COMBOBOX';\n };\n ComboBox.prototype.setSearchBox = function () {\n this.filterInput = this.inputElement;\n return (this.isFiltering() ? this.inputWrapper : inputObject);\n };\n ComboBox.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isSelectCustom) {\n this.removeSelection();\n }\n if (!this.preventAutoFill && this.getModuleName() === 'combobox' && this.isTyped) {\n this.inlineSearch();\n }\n };\n ComboBox.prototype.getFocusElement = function () {\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = this.list.querySelector('.' + dropDownListClasses.selected);\n var isSelected = dataItem.text === this.inputElement.value && !isNullOrUndefined(selected);\n if (isSelected) {\n return selected;\n }\n if ((Browser.isDevice && !this.isDropDownClick || !Browser.isDevice) &&\n !isNullOrUndefined(this.liCollections) && this.liCollections.length > 0) {\n var inputValue = this.inputElement.value;\n var activeItem = Search(inputValue, this.liCollections, 'StartsWith', true);\n var activeElement = activeItem.item;\n if (!isNullOrUndefined(activeElement)) {\n var count = this.getIndexByValue(activeElement.getAttribute('data-value')) - 1;\n var height = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n if (!isNaN(height) && this.getModuleName() !== 'autocomplete') {\n this.removeFocus();\n var fixedHead = this.fields.groupBy ? this.liCollections[0].offsetHeight : 0;\n this.list.scrollTop = count * height + fixedHead;\n addClass([activeElement], dropDownListClasses.focus);\n }\n }\n else {\n if (this.isSelectCustom && this.inputElement.value.trim() !== '') {\n this.removeFocus();\n this.list.scrollTop = 0;\n }\n }\n return activeElement;\n }\n else {\n return null;\n }\n };\n ComboBox.prototype.setValue = function (e) {\n if (e && e.type === 'keydown' && e.action === 'enter') {\n this.removeFillSelection();\n }\n if (this.autofill && this.getModuleName() === 'combobox' && e && e.type === 'keydown' && e.action !== 'enter') {\n this.preventAutoFill = false;\n this.inlineSearch(e);\n return false;\n }\n else {\n return _super.prototype.setValue.call(this, e);\n }\n };\n /**\n * Shows the spinner loader.\n * @returns void.\n */\n ComboBox.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = (this.getModuleName() === 'autocomplete') ? (this.inputWrapper.buttons[0] ||\n this.inputWrapper.clearButton ||\n Input.appendSpan('e-input-group-icon ' + SPINNER_CLASS, this.inputWrapper.container, this.createElement)) :\n (this.inputWrapper.buttons[0] || this.inputWrapper.clearButton);\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n }, this.createElement);\n showSpinner(this.spinnerElement);\n }\n };\n /**\n * Hides the spinner loader.\n * @returns void.\n */\n ComboBox.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n ComboBox.prototype.setAutoFill = function (activeElement, isHover) {\n if (!isHover) {\n this.setHoverList(activeElement);\n }\n if (this.autofill && !this.preventAutoFill) {\n var currentValue = this.getTextByValue(activeElement.getAttribute('data-value')).toString();\n var currentFillValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n if (this.getModuleName() === 'combobox') {\n if (!this.isSelected && this.previousValue !== currentFillValue) {\n this.updateSelectedItem(activeElement, null);\n this.isSelected = true;\n this.previousValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n }\n else {\n this.updateSelectedItem(activeElement, null, true);\n }\n }\n if (!this.isAndroidAutoFill(currentValue)) {\n this.setAutoFillSelection(currentValue);\n }\n }\n };\n ComboBox.prototype.isAndroidAutoFill = function (value) {\n if (Browser.isAndroid) {\n var currentPoints = this.getSelectionPoints();\n var prevEnd = this.prevSelectPoints.end;\n var curEnd = currentPoints.end;\n var prevStart = this.prevSelectPoints.start;\n var curStart = currentPoints.start;\n if (prevEnd !== 0 && ((prevEnd === value.length && prevStart === value.length) ||\n (prevStart > curStart && prevEnd > curEnd) || (prevEnd === curEnd && prevStart === curStart))) {\n return true;\n }\n else {\n return false;\n }\n }\n else {\n return false;\n }\n };\n ComboBox.prototype.clear = function (e, property) {\n if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n _super.prototype.clear.call(this, e);\n }\n };\n ComboBox.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n ComboBox.prototype.inlineSearch = function (e) {\n var isKeyNavigate = (e && (e.action === 'down' || e.action === 'up' ||\n e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown'));\n var activeElement = isKeyNavigate ? this.liCollections[this.activeIndex] : this.getFocusElement();\n if (!isNullOrUndefined(activeElement)) {\n if (!isKeyNavigate) {\n var value = this.getFormattedValue(activeElement.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.activeIndex = !isNullOrUndefined(this.activeIndex) ? this.activeIndex : null;\n }\n this.preventAutoFill = this.inputElement.value === '' ? false : this.preventAutoFill;\n this.setAutoFill(activeElement, isKeyNavigate);\n }\n else if (this.inputElement.value === '') {\n this.activeIndex = null;\n this.list.scrollTop = 0;\n var focusItem = this.list.querySelector('.' + dropDownListClasses.li);\n this.setHoverList(focusItem);\n }\n else {\n this.activeIndex = null;\n this.removeSelection();\n this.removeFocus();\n }\n };\n ComboBox.prototype.incrementalSearch = function (e) {\n this.showPopup();\n if (!isNullOrUndefined(this.listData)) {\n this.inlineSearch(e);\n e.preventDefault();\n }\n };\n ;\n ComboBox.prototype.setAutoFillSelection = function (currentValue) {\n var selection = this.getSelectionPoints();\n var value = this.inputElement.value.substr(0, selection.start);\n if (value && (value.toLowerCase() === currentValue.substr(0, selection.start).toLowerCase())) {\n var inputValue = value + currentValue.substr(value.length, currentValue.length);\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(selection.start, this.inputElement.value.length);\n }\n else {\n Input.setValue(currentValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(0, this.inputElement.value.length);\n }\n };\n ;\n ComboBox.prototype.getValueByText = function (text) {\n return _super.prototype.getValueByText.call(this, text, true, this.ignoreAccent);\n };\n ComboBox.prototype.unWireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur);\n EventHandler.remove(this.inputWrapper.container, 'blur', this.onBlur);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick);\n }\n EventHandler.remove(this.inputElement, 'focus', this.targetFocus);\n if (!this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n this.unBindCommonEvent();\n };\n ComboBox.prototype.setSelection = function (li, e) {\n _super.prototype.setSelection.call(this, li, e);\n if (!isNullOrUndefined(li) && !this.autofill && !this.isDropDownClick) {\n this.removeFocus();\n }\n };\n ComboBox.prototype.selectCurrentItem = function (e) {\n var li;\n if (this.isPopupOpen) {\n li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n }\n if (e.action === 'enter' && this.inputElement.value.trim() === '') {\n this.clear(e);\n }\n else if (this.isTyped && !this.isSelected && isNullOrUndefined(li)) {\n this.customValue();\n }\n this.hidePopup();\n };\n ComboBox.prototype.setHoverList = function (li) {\n this.removeSelection();\n if (this.isValidLI(li) && !li.classList.contains(dropDownListClasses.selected)) {\n this.removeFocus();\n li.classList.add(dropDownListClasses.focus);\n }\n };\n ;\n ComboBox.prototype.targetFocus = function (e) {\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = false;\n }\n this.onFocus();\n };\n ComboBox.prototype.dropDownClick = function (e) {\n e.preventDefault();\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.dropDownClick.call(this, e);\n };\n ComboBox.prototype.customValue = function () {\n var value = this.getValueByText(this.inputElement.value);\n if (!this.allowCustom && this.inputElement.value !== '') {\n this.setProperties({ value: value });\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n else if (this.inputElement.value.trim() !== '') {\n var previousValue = this.value;\n if (isNullOrUndefined(value)) {\n var value_1 = this.inputElement.value === '' ? null : this.inputElement.value;\n var fields = this.fields;\n var eventArgs = void 0;\n eventArgs = { text: value_1, item: {} };\n if (!this.initial) {\n this.trigger('customValueSpecifier', eventArgs);\n }\n var item = eventArgs.item;\n var dataItem = {};\n if (item && getValue(fields.text, item) && getValue(fields.value, item)) {\n dataItem = item;\n }\n else {\n setValue(fields.text, value_1, dataItem);\n setValue(fields.value, value_1, dataItem);\n }\n this.itemData = dataItem;\n var changeData = {\n text: getValue(fields.text, this.itemData),\n value: getValue(fields.value, this.itemData),\n index: null\n };\n this.setProperties(changeData, true);\n this.setSelection(null, null);\n this.isSelectCustom = true;\n }\n else {\n this.isSelectCustom = false;\n this.setProperties({ value: value });\n }\n if (previousValue !== this.value) {\n this.onChangeEvent(null);\n }\n }\n else if (this.allowCustom) {\n this.isSelectCustom = true;\n }\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n ComboBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'combobox') {\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n if (this.readonly) {\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n else {\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\n break;\n case 'allowFiltering':\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n break;\n case 'allowCustom':\n break;\n default:\n var comboProps = void 0;\n comboProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, comboProps.newProperty, comboProps.oldProperty);\n break;\n }\n }\n };\n /**\n * To initialize the control rendering.\n * @private\n */\n ComboBox.prototype.render = function () {\n _super.prototype.render.call(this);\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n };\n ;\n /**\n * Return the module name of this component.\n * @private\n */\n ComboBox.prototype.getModuleName = function () {\n return 'combobox';\n };\n /**\n * Hides the popup if it is in open state.\n * @returns void.\n */\n ComboBox.prototype.hidePopup = function () {\n var inputValue = this.inputElement.value === '' ? null : this.inputElement.value;\n if (!isNullOrUndefined(this.listData)) {\n var isEscape = this.isEscapeKey;\n if (this.isEscapeKey) {\n Input.setValue(this.typedString, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n }\n if (this.autofill) {\n this.removeFillSelection();\n }\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = this.list.querySelector('.' + dropDownListClasses.selected);\n if (dataItem.text === this.inputElement.value && !isNullOrUndefined(selected)) {\n if (this.isSelected) {\n this.onChangeEvent(null);\n this.isSelectCustom = false;\n }\n _super.prototype.hidePopup.call(this);\n return;\n }\n if (this.getModuleName() === 'combobox' && this.inputElement.value.trim() !== '') {\n var searchItem = Search(this.inputElement.value, this.liCollections, 'Equal', true);\n this.selectedLI = searchItem.item;\n if (isNullOrUndefined(searchItem.index)) {\n searchItem.index = Search(this.inputElement.value, this.liCollections, 'StartsWith', true).index;\n }\n this.activeIndex = searchItem.index;\n if (!isNullOrUndefined(this.selectedLI)) {\n this.updateSelectedItem(this.selectedLI, null, true);\n }\n else if (isEscape) {\n this.isSelectCustom = true;\n this.removeSelection();\n }\n }\n if (!this.isEscapeKey && this.isTyped && !this.isInteracted) {\n this.customValue();\n }\n }\n if (isNullOrUndefined(this.listData) && this.allowCustom && !isNullOrUndefined(inputValue) && inputValue !== this.value) {\n this.customValue();\n }\n _super.prototype.hidePopup.call(this);\n };\n /**\n * Sets the focus to the component for interaction.\n * @returns void.\n */\n ComboBox.prototype.focusIn = function () {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.focusIn.call(this);\n };\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"autofill\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"allowCustom\", void 0);\n __decorate([\n Property({})\n ], ComboBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"index\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"customValueSpecifier\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property('Never')\n ], ComboBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"filterBarPlaceholder\", void 0);\n ComboBox = __decorate([\n NotifyPropertyChanges\n ], ComboBox);\n return ComboBox;\n}(DropDownList));\nexport { ComboBox };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, EventHandler, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { Event, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, attributes, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { ComboBox } from '../combo-box/combo-box';\nimport { highlightSearch } from '../common/highlight-search';\nimport { Search } from '../common/incremental-search';\nimport { FieldSettings } from '../drop-down-base/drop-down-base';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n/* tslint:enable */\ndropDownListClasses.root = 'e-autocomplete';\ndropDownListClasses.icon = 'e-input-group-icon e-ddl-icon e-search-icon';\n/**\n * The AutoComplete component provides the matched suggestion list when type into the input,\n * from which the user can select one.\n * ```html\n * \n * ```\n * ```typescript\n * let atcObj:AutoComplete = new AutoComplete();\n * atcObj.appendTo(\"#list\");\n * ```\n */\nvar AutoComplete = /** @class */ (function (_super) {\n __extends(AutoComplete, _super);\n /**\n * * Constructor for creating the widget\n */\n function AutoComplete(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFiltered = false;\n return _this;\n }\n ;\n /**\n * Initialize the event handler\n * @private\n */\n AutoComplete.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n AutoComplete.prototype.getNgDirective = function () {\n return 'EJS-AUTOCOMPLETE';\n };\n AutoComplete.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n var filterType = (this.queryString === '' && !isNullOrUndefined(this.value)) ? 'equal' : this.filterType;\n var queryString = (this.queryString === '' && !isNullOrUndefined(this.value)) ? this.value : this.queryString;\n if (this.isFiltered) {\n return filterQuery;\n }\n if (this.queryString !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n else {\n var mapping = !isNullOrUndefined(this.fields.value) ? this.fields.value : '';\n filterQuery.where(mapping, filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (!isNullOrUndefined(this.suggestionCount)) {\n filterQuery.take(this.suggestionCount);\n }\n return filterQuery;\n };\n AutoComplete.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.isSelectCustom = false;\n this.isDataFetched = false;\n if (isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this, true);\n }\n var isDownUpKey = e.keyCode === 40 || e.keyCode === 38;\n this.queryString = this.filterInput.value;\n if (isDownUpKey) {\n this.queryString = this.queryString === '' ? null : this.queryString;\n this.beforePopupOpen = true;\n this.resetList(this.dataSource, this.fields);\n return;\n }\n this.isSelected = false;\n this.activeIndex = null;\n var eventArgs = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs.cancel) {\n return;\n }\n _this.isFiltered = true;\n _this.filterAction(dataSource, query, fields);\n },\n cancel: false\n };\n this.trigger('filtering', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (!this.isFiltered && !eventArgs.preventDefaultAction) {\n this.filterAction(this.dataSource, null, this.fields);\n }\n };\n AutoComplete.prototype.filterAction = function (dataSource, query, fields) {\n this.beforePopupOpen = true;\n if (this.queryString !== '' && (this.queryString.length >= this.minLength)) {\n this.resetList(dataSource, fields, query);\n }\n else {\n this.hidePopup();\n }\n };\n AutoComplete.prototype.clear = function (e, property) {\n if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n _super.prototype.clear.call(this, e);\n }\n if (this.beforePopupOpen) {\n this.hidePopup();\n }\n };\n AutoComplete.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n this.fixedHeaderElement = null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n var item = this.list.querySelector('.' + dropDownListClasses.li);\n if (!isNullOrUndefined(item)) {\n removeClass([item], dropDownListClasses.focus);\n }\n this.postBackAction();\n };\n AutoComplete.prototype.postBackAction = function () {\n if (this.autofill && !isNullOrUndefined(this.liCollections[0])) {\n var items = [this.liCollections[0]];\n var searchItem = Search(this.inputElement.value, items, 'StartsWith', this.ignoreCase);\n if (!isNullOrUndefined(searchItem.item)) {\n _super.prototype.setAutoFill.call(this, this.liCollections[0], true);\n }\n }\n };\n AutoComplete.prototype.setSelection = function (li, e) {\n if (!this.isValidLI(li)) {\n return;\n }\n if (!isNullOrUndefined(e) && e.type === 'keydown' && e.action !== 'enter' && this.isValidLI(li)) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.setHoverList(li);\n this.selectedLI = li;\n this.setScrollPosition(e);\n if (this.autofill) {\n this.preventAutoFill = false;\n _super.prototype.setAutoFill.call(this, li);\n }\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n }\n else {\n _super.prototype.setSelection.call(this, li, e);\n }\n };\n AutoComplete.prototype.listOption = function (dataSource, fieldsSettings) {\n var _this = this;\n var fields = _super.prototype.listOption.call(this, dataSource, fieldsSettings);\n if (isNullOrUndefined(fields.itemCreated)) {\n fields.itemCreated = function (e) {\n if (_this.highlight) {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }\n };\n }\n else {\n var itemCreated_1 = fields.itemCreated;\n fields.itemCreated = function (e) {\n if (_this.highlight) {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }\n itemCreated_1.apply(_this, [e]);\n };\n }\n return fields;\n };\n ;\n AutoComplete.prototype.isFiltering = function () {\n return true;\n };\n AutoComplete.prototype.renderPopup = function () {\n this.list.scrollTop = 0;\n _super.prototype.renderPopup.call(this);\n };\n AutoComplete.prototype.isEditTextBox = function () {\n return true && this.inputElement.value.trim() !== '';\n };\n AutoComplete.prototype.isPopupButton = function () {\n return this.showPopupButton;\n };\n AutoComplete.prototype.isSelectFocusItem = function (element) {\n return false;\n };\n /**\n * Search the entered text and show it in the suggestion list if available.\n * @returns void.\n */\n AutoComplete.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n this.preventAutoFill = true;\n if (isNullOrUndefined(this.list)) {\n this.renderList();\n }\n else {\n this.resetList(this.dataSource, this.fields);\n }\n };\n /**\n * Hides the popup if it is in open state.\n * @returns void.\n */\n AutoComplete.prototype.hidePopup = function () {\n _super.prototype.hidePopup.call(this);\n this.activeIndex = -1;\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n AutoComplete.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'autocomplete') {\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'showPopupButton':\n if (this.showPopupButton) {\n var button = Input.appendSpan(dropDownListClasses.icon, this.inputWrapper.container, this.createElement);\n this.inputWrapper.buttons[0] = button;\n EventHandler.add(this.inputWrapper.buttons[0], 'click', this.dropDownClick, this);\n }\n else {\n detach(this.inputWrapper.buttons[0]);\n this.inputWrapper.buttons[0] = null;\n }\n break;\n default:\n var atcProps = void 0;\n atcProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, atcProps.newProperty, atcProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Return the module name of this component.\n * @private\n */\n AutoComplete.prototype.getModuleName = function () {\n return 'autocomplete';\n };\n /**\n * To initialize the control rendering\n * @private\n */\n AutoComplete.prototype.render = function () {\n _super.prototype.render.call(this);\n };\n ;\n __decorate([\n Complex({ value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], AutoComplete.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], AutoComplete.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"showPopupButton\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"highlight\", void 0);\n __decorate([\n Property(20)\n ], AutoComplete.prototype, \"suggestionCount\", void 0);\n __decorate([\n Property({})\n ], AutoComplete.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"query\", void 0);\n __decorate([\n Property(1)\n ], AutoComplete.prototype, \"minLength\", void 0);\n __decorate([\n Property('Contains')\n ], AutoComplete.prototype, \"filterType\", void 0);\n __decorate([\n Event()\n ], AutoComplete.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], AutoComplete.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"text\", void 0);\n AutoComplete = __decorate([\n NotifyPropertyChanges\n ], AutoComplete);\n return AutoComplete;\n}(ComboBox));\nexport { AutoComplete };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nimport { Popup, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { attributes, setValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, extend } from '@syncfusion/ej2-base';\nimport { EventHandler, Property, Event, compile, L10n } from '@syncfusion/ej2-base';\nimport { Animation, Browser, prepend } from '@syncfusion/ej2-base';\nimport { Search } from '../common/incremental-search';\nimport { append, addClass, removeClass, setStyleAttribute, closest, detach, remove } from '@syncfusion/ej2-base';\nimport { getUniqueID, formatUnit, isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\n/* tslint:disable */\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { createFloatLabel, removeFloating, floatLabelFocus, floatLabelBlur } from './float-label';\n/* tslint:enable */\nvar FOCUS = 'e-input-focus';\nvar DISABLED = 'e-disabled';\nvar OVER_ALL_WRAPPER = 'e-multiselect e-input-group';\nvar ELEMENT_WRAPPER = 'e-multi-select-wrapper';\nvar ELEMENT_MOBILE_WRAPPER = 'e-mob-wrapper';\nvar HIDE_LIST = 'e-hide-listitem';\nvar DELIMITER_VIEW = 'e-delim-view';\nvar CHIP_WRAPPER = 'e-chips-collection';\nvar CHIP = 'e-chips';\nvar CHIP_CONTENT = 'e-chipcontent';\nvar CHIP_CLOSE = 'e-chips-close';\nvar CHIP_SELECTED = 'e-chip-selected';\nvar SEARCHBOX_WRAPPER = 'e-searcher';\nvar DELIMITER_VIEW_WRAPPER = 'e-delimiter';\nvar ZERO_SIZE = 'e-zero-size';\nvar REMAIN_WRAPPER = 'e-remain';\nvar CLOSEICON_CLASS = 'e-chips-close e-close-hooker';\nvar DELIMITER_WRAPPER = 'e-delim-values';\nvar POPUP_WRAPPER = 'e-ddl e-popup e-multi-select-list-wrapper';\nvar INPUT_ELEMENT = 'e-dropdownbase';\nvar RTL_CLASS = 'e-rtl';\nvar CLOSE_ICON_HIDE = 'e-close-icon-hide';\nvar MOBILE_CHIP = 'e-mob-chip';\nvar FOOTER = 'e-ddl-footer';\nvar HEADER = 'e-ddl-header';\nvar DISABLE_ICON = 'e-ddl-disable-icon';\nvar SPINNER_CLASS = 'e-ms-spinner-icon';\nvar HIDDEN_ELEMENT = 'e-multi-hidden';\nvar destroy = 'destroy';\nvar dropdownIcon = 'e-input-group-icon e-ddl-icon';\nvar iconAnimation = 'e-icon-anim';\n/**\n * The Multiselect allows the user to pick a more than one value from list of predefined values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MultiSelect = /** @class */ (function (_super) {\n __extends(MultiSelect, _super);\n /**\n * Constructor for creating the DropDownList widget.\n */\n function MultiSelect(option, element) {\n var _this = _super.call(this, option, element) || this;\n _this.isValidKey = false;\n _this.selectAllEventData = [];\n _this.selectAllEventEle = [];\n _this.scrollFocusStatus = false;\n _this.keyDownStatus = false;\n return _this;\n }\n ;\n MultiSelect.prototype.enableRTL = function (state) {\n if (state) {\n this.overAllWrapper.classList.add(RTL_CLASS);\n }\n else {\n this.overAllWrapper.classList.remove(RTL_CLASS);\n }\n if (this.popupObj) {\n this.popupObj.enableRtl = state;\n this.popupObj.dataBind();\n }\n };\n MultiSelect.prototype.requiredModules = function () {\n var modules = [];\n if (this.mode === 'CheckBox') {\n this.allowCustomValue = false;\n this.hideSelectedItem = false;\n this.closePopupOnSelect = false;\n this.allowFiltering = true;\n modules.push({\n member: 'CheckBoxSelection',\n args: [this]\n });\n }\n return modules;\n };\n MultiSelect.prototype.updateHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n switch (htmlAttr) {\n case 'class':\n this.overAllWrapper.classList.add(this.htmlAttributes[htmlAttr]);\n this.popupWrapper.classList.add(this.htmlAttributes[htmlAttr]);\n break;\n case 'disabled':\n this.enable(false);\n break;\n case 'placeholder':\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n break;\n default:\n var defaultAttr = ['id'];\n var validateAttr = ['name', 'required', 'aria-required', 'form'];\n var containerAttr = ['title', 'role', 'style', 'class'];\n if (defaultAttr.indexOf(htmlAttr) > -1) {\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (containerAttr.indexOf(htmlAttr) > -1) {\n this.overAllWrapper.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n break;\n }\n }\n }\n };\n MultiSelect.prototype.updateReadonly = function (state) {\n if (state || this.mode === 'CheckBox') {\n this.inputElement.setAttribute('readonly', 'true');\n }\n else {\n this.inputElement.removeAttribute('readonly');\n }\n };\n MultiSelect.prototype.updateClearButton = function (state) {\n if (state) {\n if (this.overAllClear.parentNode) {\n this.overAllClear.style.display = '';\n }\n else {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n this.componentWrapper.classList.remove(CLOSE_ICON_HIDE);\n }\n else {\n this.overAllClear.style.display = 'none';\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n };\n MultiSelect.prototype.updateCssClass = function () {\n if (this.cssClass) {\n this.popupWrapper.classList.add(this.cssClass);\n this.overAllWrapper.classList.add(this.cssClass);\n }\n };\n MultiSelect.prototype.onPopupShown = function () {\n if (Browser.isDevice && (this.mode === 'CheckBox' && this.allowFiltering)) {\n var proxy_1 = this;\n window.onpopstate = function () {\n proxy_1.hidePopup();\n };\n history.pushState({}, '');\n }\n var animModel = { name: 'FadeIn', duration: 100 };\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.focusAtFirstListItem();\n document.body.appendChild(this.popupObj.element);\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], [iconAnimation]);\n }\n this.popupObj.show(eventArgs.animation, (this.zIndex === 1000) ? this.element : null);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n if (!this.isFirstClick) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n }\n this.isFirstClick = true;\n }\n this.refreshListItems(null);\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n };\n MultiSelect.prototype.focusAtFirstListItem = function () {\n if (this.ulElement && this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li)) {\n var element = void 0;\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n return;\n }\n else {\n element = this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\n }\n if (element !== null) {\n this.removeFocus();\n this.addListFocus(element);\n }\n }\n };\n MultiSelect.prototype.focusAtLastListItem = function (data) {\n var activeElement;\n if (data) {\n activeElement = Search(data, this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n if (this.value && this.value.length) {\n Search(this.value[this.value.length - 1], this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n activeElement = null;\n }\n }\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.scrollBottom(activeElement.item, activeElement.index);\n }\n };\n MultiSelect.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-multiselectable': 'true',\n 'aria-activedescendant': 'null',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false'\n };\n return ariaAttributes;\n };\n MultiSelect.prototype.updateListARIA = function () {\n attributes(this.ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n var disableStatus = (this.inputElement.disabled) ? true : false;\n attributes(this.inputElement, this.getAriaAttributes());\n if (disableStatus) {\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n };\n MultiSelect.prototype.removelastSelection = function (e) {\n var elements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n var value = elements[elements.length - 1].getAttribute('data-value');\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n this.removeValue(value, e);\n this.removeChipSelection();\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n if (this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n this.renderPopup();\n this.onPopupShown();\n };\n MultiSelect.prototype.targetElement = function () {\n this.targetInputElement = this.inputElement;\n if (this.mode === 'CheckBox') {\n this.notify('targetElement', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n return this.targetInputElement.value;\n };\n MultiSelect.prototype.getForQuery = function (valuecheck) {\n var predicate;\n var field = isNullOrUndefined(this.fields.value) ? this.fields.text : this.fields.value;\n for (var i = 0; i < valuecheck.length; i++) {\n if (i === 0) {\n predicate = new Predicate(field, 'equal', valuecheck[i]);\n }\n else {\n predicate = predicate.or(field, 'equal', valuecheck[i]);\n }\n }\n return new Query().where(predicate);\n };\n MultiSelect.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n var proxy = this;\n var valuecheck = [];\n if (!isNullOrUndefined(this.value) && !this.allowCustomValue) {\n for (var i = 0; i < this.value.length; i++) {\n var checkEle = ((this.allowFiltering && !isNullOrUndefined(this.mainList)) ?\n this.mainList : ulElement).querySelector('li[data-value=\"' + proxy.value[i] + '\"]');\n if (!checkEle) {\n valuecheck.push(proxy.value[i]);\n }\n }\n }\n if (valuecheck.length > 0 && this.dataSource instanceof DataManager && !isNullOrUndefined(this.value)) {\n this.dataSource.executeQuery(this.getForQuery(valuecheck)).then(function (e) {\n proxy.addItem(e.result, list.length);\n proxy.updateActionList(ulElement, list, e);\n });\n }\n else {\n this.updateActionList(ulElement, list, e);\n }\n };\n MultiSelect.prototype.updateActionList = function (ulElement, list, e, isUpdated) {\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n if (!this.mainList && !this.mainData) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.mainData = list;\n this.mainListCollection = this.liCollections;\n }\n else if (!isNullOrUndefined(this.mainData) && this.mainData.length === 0) {\n this.mainData = list;\n }\n if ((this.remoteCustomValue || list.length <= 0) && this.allowCustomValue && this.inputFocus && this.allowFiltering) {\n this.checkForCustomValue(this.tempQuery, this.fields);\n return;\n }\n if (this.value && this.value.length && ((this.mode !== 'CheckBox' && this.inputElement.value !== '') ||\n this.mode === 'CheckBox')) {\n this.refreshSelection();\n }\n this.updateListARIA();\n this.unwireListEvents();\n this.wireListEvents();\n if (!isNullOrUndefined(this.setInitialValue)) {\n this.setInitialValue();\n }\n if (!isNullOrUndefined(this.selectAllAction)) {\n this.selectAllAction();\n }\n if (this.setDynValue) {\n this.initialValueUpdate();\n this.initialUpdate();\n this.refreshPlaceHolder();\n this.updateValueState(null, this.value, null);\n }\n this.renderPopup();\n if (this.beforePopupOpen) {\n this.beforePopupOpen = false;\n this.onPopupShown();\n }\n };\n MultiSelect.prototype.refreshSelection = function () {\n var value;\n var element;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n value = this.value[index];\n element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n if (element) {\n addClass([element], className);\n if (this.hideSelectedItem && element.previousSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group)\n && (!element.nextElementSibling ||\n element.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n addClass([element.previousElementSibling], className);\n }\n if (this.hideSelectedItem && this.fields.groupBy && !element.previousElementSibling.classList.contains(HIDE_LIST)) {\n this.hideGroupItem(value);\n }\n if (this.hideSelectedItem && element.classList.contains(dropDownBaseClasses.focus)) {\n removeClass([element], dropDownBaseClasses.focus);\n var listEle = element.parentElement.querySelectorAll('.' +\n dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')');\n if (listEle.length > 0) {\n addClass([listEle[0]], dropDownBaseClasses.focus);\n }\n else {\n this.ulElement = this.ulElement.cloneNode ? this.ulElement.cloneNode(true) : this.ulElement;\n this.l10nUpdate();\n addClass([this.list], dropDownBaseClasses.noData);\n }\n }\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox' && element.classList.contains('e-active')) {\n var ariaValue = element.firstElementChild.getAttribute('aria-checked');\n if (isNullOrUndefined(ariaValue) || ariaValue === 'false') {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n li: element,\n e: null\n };\n this.notify('updatelist', args);\n }\n }\n }\n }\n }\n this.checkSelectAll();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.hideGroupItem = function (value) {\n var element;\n var element1;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n element1 = element = this.ulElement.querySelector('li[data-value=\"' + value + '\"]');\n var i = 0;\n var j = 0;\n var temp = true;\n var temp1 = true;\n do {\n if (element && element.previousElementSibling\n && (!element.previousElementSibling.classList.contains(HIDE_LIST) &&\n element.previousElementSibling.classList.contains(dropDownBaseClasses.li))) {\n temp = false;\n }\n if (!temp || !element || (element.previousElementSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group))) {\n i = 10;\n }\n else {\n element = element.previousElementSibling;\n }\n if (element1 && element1.nextElementSibling\n && (!element1.nextElementSibling.classList.contains(HIDE_LIST) &&\n element1.nextElementSibling.classList.contains(dropDownBaseClasses.li))) {\n temp1 = false;\n }\n if (!temp1 || !element1 || (element1.nextElementSibling\n && element1.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n j = 10;\n }\n else {\n element1 = element1.nextElementSibling;\n }\n } while (i < 10 || j < 10);\n if (temp && temp1 && !element.previousElementSibling.classList.contains(HIDE_LIST)) {\n addClass([element.previousElementSibling], className);\n }\n else if (temp && temp1 && element.previousElementSibling.classList.contains(HIDE_LIST)) {\n removeClass([element.previousElementSibling], className);\n }\n };\n MultiSelect.prototype.checkSelectAll = function () {\n var searchCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.li).length;\n var searchActiveCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.selected).length;\n if ((searchCount === searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'check' });\n }\n if ((searchCount !== searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n };\n MultiSelect.prototype.openClick = function (e) {\n if (!this.openOnClick && this.mode !== 'CheckBox') {\n if (this.targetElement() !== '') {\n this.showPopup();\n }\n else {\n this.hidePopup();\n }\n }\n else if (!this.openOnClick && this.mode === 'CheckBox' && !this.isPopupOpen()) {\n this.showPopup();\n }\n };\n MultiSelect.prototype.KeyUp = function (e) {\n var _this = this;\n if (this.mode === 'CheckBox' && !this.openOnClick) {\n var char = String.fromCharCode(e.keyCode);\n var isWordCharacter = char.match(/\\w/);\n if (!isNullOrUndefined(isWordCharacter)) {\n this.isValidKey = true;\n }\n }\n this.isValidKey = (this.isPopupOpen() && e.keyCode === 8) || this.isValidKey;\n if (this.isValidKey) {\n this.isValidKey = false;\n this.expandTextbox();\n this.showOverAllClear();\n switch (e.keyCode) {\n default:\n if (!this.isPopupOpen() && this.openOnClick) {\n this.showPopup();\n }\n this.openClick(e);\n if (this.checkTextLength() && !this.allowFiltering && (e.keyCode !== 8)) {\n this.focusAtFirstListItem();\n }\n else {\n var text = this.targetElement();\n this.keyCode = e.keyCode;\n if (this.allowFiltering) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.targetElement(),\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isFiltered = true;\n _this.remoteFilterAction = true;\n _this.dataUpdater(dataSource, query, fields);\n },\n event: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isFiltered && !eventArgs_1.preventDefaultAction) {\n this.filterAction = true;\n this.dataUpdater(this.dataSource, null, this.fields);\n }\n }\n else if (this.allowCustomValue) {\n var query = new Query();\n query = (text !== '') ? query.where(this.fields.text, 'startswith', text, this.ignoreCase, this.ignoreAccent) : query;\n this.dataUpdater(this.mainData, query, this.fields);\n break;\n }\n else {\n var liCollections = void 0;\n liCollections = this.list.querySelectorAll('li.' + dropDownBaseClasses.li + ':not(.e-hide-listitem)');\n var activeElement = Search(this.targetElement(), liCollections, 'StartsWith', this.ignoreCase);\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.list.scrollTop =\n activeElement.item.offsetHeight * activeElement.index;\n }\n else if (this.targetElement() !== '') {\n this.removeFocus();\n }\n else {\n this.focusAtFirstListItem();\n }\n }\n }\n }\n }\n };\n MultiSelect.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n if (this.filterAction) {\n if (this.targetElement() !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.targetElement(), this.ignoreCase, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.targetElement(), this.ignoreCase, this.ignoreAccent);\n }\n }\n return filterQuery;\n }\n else {\n return query ? query : this.query ? this.query : new Query();\n }\n };\n MultiSelect.prototype.dataUpdater = function (dataSource, query, fields) {\n this.isDataFetched = false;\n if (this.targetElement().trim() === '') {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n if (this.backCommand) {\n this.remoteCustomValue = false;\n this.onActionComplete(list, this.mainData);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n if (this.keyCode !== 8) {\n this.focusAtFirstListItem();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n }\n }\n else {\n this.resetList(dataSource, fields, query);\n if (this.allowCustomValue) {\n if (!(dataSource instanceof DataManager)) {\n this.checkForCustomValue(query, fields);\n }\n else {\n this.remoteCustomValue = true;\n this.tempQuery = query;\n }\n }\n }\n this.refreshPopup();\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n }\n };\n MultiSelect.prototype.checkForCustomValue = function (query, fields) {\n var dataChecks = !this.getValueByText(this.inputElement.value, this.ignoreCase);\n if (this.allowCustomValue && dataChecks) {\n var value = this.inputElement.value;\n var customData = (!isNullOrUndefined(this.mainData) && this.mainData.length > 0) ?\n this.mainData[0] : this.mainData;\n if (typeof (customData) !== 'string') {\n var dataItem = {};\n setValue(fields.text, value, dataItem);\n setValue(fields.value, value, dataItem);\n var tempData = JSON.parse(JSON.stringify(this.listData));\n tempData.splice(0, 0, dataItem);\n this.resetList(tempData, fields ? fields : this.fields, query);\n }\n else {\n var tempData = [this.inputElement.value];\n this.resetList(tempData, fields ? fields : this.fields);\n }\n }\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.getNgDirective = function () {\n return 'EJS-MULTISELECT';\n };\n MultiSelect.prototype.wrapperClick = function (e) {\n this.setDynValue = false;\n if (this.readonly || !this.enabled) {\n return;\n }\n if (e.target === this.overAllClear) {\n e.preventDefault();\n return;\n }\n if (!this.inputFocus && this.mode !== 'CheckBox') {\n this.dispatchEvent(this.inputElement, 'focus');\n }\n if (!this.inputFocus && this.mode === 'CheckBox') {\n this.focusIn();\n }\n if (e.target && e.target.classList.toString().indexOf(CHIP_CLOSE) !== -1) {\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n return;\n }\n if (!this.isPopupOpen() && this.openOnClick) {\n this.showPopup();\n }\n else {\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.showOverAllClear();\n this.inputFocus = true;\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\n }\n }\n e.preventDefault();\n };\n MultiSelect.prototype.enable = function (state) {\n if (state) {\n this.overAllWrapper.classList.remove(DISABLED);\n this.inputElement.removeAttribute('disabled');\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.overAllWrapper.classList.add(DISABLED);\n this.inputElement.setAttribute('disabled', 'true');\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n if (this.enabled !== state) {\n this.enabled = state;\n }\n this.hidePopup();\n };\n MultiSelect.prototype.onBlur = function (eve) {\n var target;\n if (!isNullOrUndefined(eve)) {\n target = eve.relatedTarget;\n }\n if (this.popupObj && document.body.contains(this.popupObj.element) && this.popupObj.element.contains(target)) {\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n }\n if (this.mode === 'CheckBox' && Browser.isIE && !isNullOrUndefined(eve)) {\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n return;\n }\n if (this.scrollFocusStatus) {\n if (!isNullOrUndefined(eve)) {\n eve.preventDefault();\n }\n this.inputElement.focus();\n this.scrollFocusStatus = false;\n return;\n }\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n if (this.mode !== 'Box' && this.mode !== 'CheckBox') {\n this.refreshListItems(null);\n this.updateDelimView();\n }\n this.updateValueState(eve, this.value, this.tempValues);\n this.dispatchEvent(this.hiddenElement, 'change');\n this.overAllClear.style.display = 'none';\n if (this.isPopupOpen()) {\n this.hidePopup();\n }\n this.makeTextBoxEmpty();\n this.trigger('blur');\n this.focused = true;\n if (Browser.isDevice && this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.removeChipFocus();\n }\n this.removeChipSelection();\n this.refreshInputHight();\n floatLabelBlur(this.overAllWrapper, this.componentWrapper, this.value, this.floatLabelType, this.placeholder);\n this.refreshPlaceHolder();\n if (this.allowFiltering && !isNullOrUndefined(this.mainList)) {\n this.ulElement = this.mainList;\n }\n };\n MultiSelect.prototype.refreshInputHight = function () {\n if (!this.value || !this.value.length) {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n else {\n this.searchWrapper.classList.add(ZERO_SIZE);\n }\n };\n MultiSelect.prototype.validateValues = function (newValue, oldValue) {\n return JSON.stringify(newValue.slice().sort()) !== JSON.stringify(oldValue.slice().sort());\n };\n MultiSelect.prototype.updateValueState = function (event, newVal, oldVal) {\n var newValue = newVal ? newVal : [];\n var oldValue = oldVal ? oldVal : [];\n if (this.initStatus && this.validateValues(newValue, oldValue)) {\n var eventArgs = {\n e: event,\n oldValue: oldVal,\n value: newVal,\n isInteracted: event ? true : false,\n element: this.element\n };\n this.trigger('change', eventArgs);\n }\n };\n MultiSelect.prototype.getPagingCount = function () {\n var height = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.offsetHeight / parseInt(height, 10));\n };\n MultiSelect.prototype.pageUpSelection = function (steps) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var previousItem;\n previousItem = steps >= 0 ? collection[steps + 1] : collection[0];\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n ;\n MultiSelect.prototype.pageDownSelection = function (steps) {\n var list = this.getItems();\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var previousItem;\n previousItem = steps <= collection.length ? collection[steps - 1] : collection[collection.length - 1];\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n MultiSelect.prototype.getItems = function () {\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n return this.ulElement ? this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')') : null;\n };\n MultiSelect.prototype.focusIn = function () {\n if (this.enabled && !this.readonly) {\n this.showOverAllClear();\n this.inputFocus = true;\n if (!this.value) {\n this.tempValues = this.value;\n }\n else {\n this.tempValues = this.value.slice();\n }\n if (this.value && this.value.length) {\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n if (this.mode !== 'CheckBox') {\n this.viewWrapper.style.display = 'none';\n }\n }\n if (this.mode !== 'CheckBox') {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.focused) {\n this.inputElement.focus();\n this.trigger('focus');\n this.focused = false;\n }\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\n floatLabelFocus(this.overAllWrapper, this.componentWrapper);\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n return true;\n }\n else {\n return false;\n }\n };\n MultiSelect.prototype.showDelimWrapper = function () {\n if (this.mode === 'CheckBox') {\n this.viewWrapper.style.display = '';\n }\n else {\n this.delimiterWrapper.style.display = '';\n }\n this.componentWrapper.classList.add(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.hideDelimWrapper = function () {\n this.delimiterWrapper.style.display = 'none';\n this.componentWrapper.classList.remove(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.expandTextbox = function () {\n var size = 5;\n if (this.placeholder) {\n size = size > this.inputElement.placeholder.length ? size : this.inputElement.placeholder.length;\n }\n if (this.inputElement.value.length > size) {\n this.inputElement.size = this.inputElement.value.length;\n }\n else {\n this.inputElement.size = size;\n }\n };\n MultiSelect.prototype.isPopupOpen = function () {\n return ((this.popupWrapper !== null) && (this.popupWrapper.parentElement !== null));\n };\n MultiSelect.prototype.refreshPopup = function () {\n if (this.popupObj && this.mobFilter) {\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n this.popupObj.refreshPosition(this.overAllWrapper);\n }\n };\n MultiSelect.prototype.checkTextLength = function () {\n return this.targetElement().length < 1;\n };\n MultiSelect.prototype.popupKeyActions = function (keyCode) {\n switch (keyCode) {\n case 38:\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n break;\n case 40:\n if (!this.isPopupOpen()) {\n this.showPopup();\n }\n break;\n }\n };\n MultiSelect.prototype.updateAriaAttribute = function () {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (!isNullOrUndefined(focusedItem)) {\n this.inputElement.setAttribute('aria-activedescendant', focusedItem.id);\n }\n };\n MultiSelect.prototype.onKeyDown = function (e) {\n if (this.readonly || !this.enabled && this.mode !== 'CheckBox') {\n return;\n }\n this.keyDownStatus = true;\n if (e.keyCode > 111 && e.keyCode < 124) {\n return;\n }\n if (e.altKey) {\n this.popupKeyActions(e.keyCode);\n e.preventDefault();\n return;\n }\n else if (this.isPopupOpen()) {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n var activeIndex = void 0;\n switch (e.keyCode) {\n case 36:\n case 35: break;\n case 33:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageUpSelection(activeIndex - this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 34:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageDownSelection(activeIndex + this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 38:\n this.arrowUp(e);\n break;\n case 40:\n this.arrowDown(e);\n break;\n case 27:\n e.preventDefault();\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n case 13:\n e.preventDefault();\n if (this.mode !== 'CheckBox') {\n this.selectByKey(e);\n }\n return;\n case 32:\n this.spaceKeySelection(e);\n return;\n case 9:\n e.preventDefault();\n this.hidePopup();\n this.inputElement.focus();\n this.overAllWrapper.classList.add(FOCUS);\n }\n }\n else {\n switch (e.keyCode) {\n case 13:\n case 9:\n case 16:\n case 17:\n case 20:\n return;\n case 40:\n if (this.openOnClick) {\n this.showPopup();\n }\n break;\n case 27:\n e.preventDefault();\n this.escapeAction();\n return;\n }\n }\n if (this.checkTextLength()) {\n this.keyNavigation(e);\n }\n if (this.mode === 'CheckBox' && this.enableSelectionOrder) {\n this.checkBackCommand(e);\n }\n this.expandTextbox();\n this.refreshPopup();\n };\n MultiSelect.prototype.arrowDown = function (e) {\n e.preventDefault();\n this.moveByList(1);\n this.keyAction = true;\n if (document.activeElement.classList.contains('e-input-filter')) {\n this.list.focus();\n EventHandler.add(this.list, 'keydown', this.onKeyDown, this);\n }\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.arrowUp = function (e) {\n e.preventDefault();\n this.keyAction = true;\n var list = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var focuseElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var index = Array.prototype.slice.call(list).indexOf(focuseElem);\n if (index <= 0) {\n this.keyAction = false;\n this.notify('inputFocus', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'focus' });\n }\n else {\n this.list.focus();\n }\n this.moveByList(-1);\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.spaceKeySelection = function (e) {\n if (this.mode === 'CheckBox') {\n if (!document.activeElement.classList.contains('e-input-filter')) {\n e.preventDefault();\n this.keyAction = true;\n this.list.focus();\n }\n this.selectByKey(e);\n }\n };\n MultiSelect.prototype.checkBackCommand = function (e) {\n if (e.keyCode === 8 && this.targetElement() === '') {\n this.backCommand = false;\n }\n else {\n this.backCommand = true;\n }\n };\n MultiSelect.prototype.keyNavigation = function (e) {\n if ((this.mode !== 'Delimiter' && this.mode !== 'CheckBox') && this.value && this.value.length) {\n switch (e.keyCode) {\n case 37: //left arrow \n e.preventDefault();\n this.moveBy(-1, e);\n break;\n case 39: //right arrow \n e.preventDefault();\n this.moveBy(1, e);\n break;\n case 8:\n this.removelastSelection(e);\n break;\n case 46: //del\n this.removeSelectedChip(e);\n break;\n }\n }\n else if (e.keyCode === 8 && this.mode === 'Delimiter') {\n if (this.value && this.value.length) {\n e.preventDefault();\n var temp = this.value[this.value.length - 1];\n this.removeValue(temp, e);\n this.updateDelimeter(this.delimiterChar);\n this.focusAtLastListItem(temp);\n }\n }\n };\n MultiSelect.prototype.selectByKey = function (e) {\n this.removeChipSelection();\n this.selectListByKey(e);\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n };\n MultiSelect.prototype.escapeAction = function () {\n var temp = this.tempValues ? this.tempValues.slice() : [];\n if (this.value && this.validateValues(this.value, temp)) {\n this.value = temp;\n this.initialValueUpdate();\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n this.refreshPlaceHolder();\n if (this.value.length) {\n this.showOverAllClear();\n }\n else {\n this.hideOverAllClear();\n }\n }\n this.makeTextBoxEmpty();\n };\n MultiSelect.prototype.scrollBottom = function (selectedLI, activeIndex) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop);\n boxRange = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset) {\n this.list.scrollTop = nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n MultiSelect.prototype.scrollTop = function (selectedLI, activeIndex) {\n var nextOffset = selectedLI.offsetTop - this.list.scrollTop;\n var nextBottom = selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop);\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = selectedLI.offsetTop - (this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n };\n MultiSelect.prototype.selectListByKey = function (e) {\n var li = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li !== null) {\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (this.isValidLI(li) && limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.makeTextBoxEmpty();\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(li.textContent);\n }\n this.refreshPopup();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshListItems = function (data) {\n if ((this.allowFiltering || this.allowCustomValue) && this.mainList && this.listData) {\n var list = void 0;\n if (this.sortOrder === 'Descending' || this.sortOrder === 'Ascending') {\n list = this.ulElement.cloneNode ? this.ulElement.cloneNode(true) : this.ulElement;\n }\n else {\n list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n }\n this.onActionComplete(list, this.mainData);\n this.focusAtLastListItem(data);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n }\n };\n MultiSelect.prototype.removeSelectedChip = function (e) {\n var selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n var temp;\n if (selectedElem !== null) {\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n temp = selectedElem.nextElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp, e);\n }\n this.removeValue(selectedElem.getAttribute('data-value'), e);\n this.makeTextBoxEmpty();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n };\n MultiSelect.prototype.moveByTop = function (state) {\n var elements = this.list.querySelectorAll('li.' + dropDownBaseClasses.li);\n var index;\n if (elements.length > 1) {\n this.removeFocus();\n index = state ? 0 : (elements.length - 1);\n this.addListFocus(elements[index]);\n this.scrollBottom(elements[index], index);\n }\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.moveByList = function (position) {\n if (this.list) {\n var elements = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var selectedElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var temp = -1;\n if (elements.length) {\n for (var index = 0; index < elements.length; index++) {\n if (elements[index] === selectedElem) {\n temp = index;\n break;\n }\n }\n if (position > 0) {\n if (temp < (elements.length - 1)) {\n this.removeFocus();\n this.addListFocus(elements[++temp]);\n this.scrollBottom(elements[temp], temp);\n }\n }\n else {\n if (temp > 0) {\n this.removeFocus();\n this.addListFocus(elements[--temp]);\n this.scrollTop(elements[temp], temp);\n }\n }\n }\n }\n };\n MultiSelect.prototype.moveBy = function (position, e) {\n var elements;\n var selectedElem;\n var temp;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n if (selectedElem === null) {\n if (position < 0) {\n this.addChipSelection(elements[elements.length - 1], e);\n }\n }\n else {\n if (position < 0) {\n temp = selectedElem.previousElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp, e);\n }\n }\n else {\n temp = selectedElem.nextElementSibling;\n this.removeChipSelection();\n if (temp !== null) {\n this.addChipSelection(temp, e);\n }\n }\n }\n };\n MultiSelect.prototype.chipClick = function (e) {\n if (this.enabled) {\n var elem = closest(e.target, '.' + CHIP);\n this.removeChipSelection();\n this.addChipSelection(elem, e);\n }\n };\n MultiSelect.prototype.removeChipSelection = function () {\n if (this.chipCollectionWrapper) {\n this.removeChipFocus();\n }\n };\n MultiSelect.prototype.addChipSelection = function (element, e) {\n addClass([element], CHIP_SELECTED);\n this.trigger('chipSelection', e);\n };\n MultiSelect.prototype.onChipRemove = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.enabled && !this.readonly) {\n var element = e.target.parentElement;\n var value = this.getFormattedValue(element.getAttribute('data-value'));\n if (this.isPopupOpen() && this.mode !== 'CheckBox') {\n this.hidePopup();\n }\n if (!this.inputFocus) {\n this.inputElement.focus();\n }\n this.removeValue(value, e);\n if (isNullOrUndefined(this.list.querySelector('li[data-value=\"' + value + '\"]')) && this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.makeTextBoxEmpty = function () {\n this.inputElement.value = '';\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshPlaceHolder = function () {\n if (this.placeholder && this.floatLabelType === 'Never') {\n if (this.value && this.value.length) {\n this.inputElement.placeholder = '';\n }\n else {\n this.inputElement.placeholder = this.placeholder;\n }\n }\n else {\n this.setFloatLabelType();\n }\n this.expandTextbox();\n };\n MultiSelect.prototype.removeValue = function (value, eve, length) {\n var index = this.value.indexOf(this.getFormattedValue(value));\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (index !== -1) {\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n var val = this.getDataByValue(value);\n var eventArgs = {\n e: eve,\n item: element,\n itemData: val,\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('removing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.value.splice(index, 1);\n this.setProperties({ value: [].concat([], this.value) }, true);\n if (element !== null) {\n var hideElement = this.mainList.querySelector('li[data-value=\"' + value + '\"]');\n element.setAttribute('aria-selected', 'false');\n hideElement.setAttribute('aria-selected', 'false');\n removeClass([element, hideElement], className);\n this.notify('activeList', {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox', li: element,\n e: this, index: index\n });\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: eve });\n attributes(this.inputElement, { 'aria-activedescendant': element.id });\n if ((this.value.length !== this.mainData.length) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n }\n if (this.hideSelectedItem && this.fields.groupBy) {\n this.hideGroupItem(value);\n }\n this.updateMainList(true, value);\n this.removeChip(value);\n this.updateChipStatus();\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit < this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n removeClass(collection, 'e-disable');\n }\n this.trigger('removed', eventArgs);\n if (length) {\n this.selectAllEventData.push(val);\n this.selectAllEventEle.push(element);\n }\n if (length === 1) {\n var args = {\n event: eve,\n items: this.selectAllEventEle,\n itemData: this.selectAllEventData,\n isInteracted: eve ? true : false,\n isChecked: false\n };\n this.trigger('selectedAll', args);\n this.selectAllEventData = [];\n this.selectAllEventEle = [];\n }\n }\n };\n MultiSelect.prototype.updateMainList = function (state, value) {\n if (this.allowFiltering) {\n var element2 = this.mainList.querySelector('li[data-value=\"' + value + '\"]');\n if (element2) {\n if (state) {\n element2.setAttribute('aria-selected', 'false');\n removeClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n else {\n element2.setAttribute('aria-selected', 'true');\n addClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'true');\n addClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n }\n }\n };\n MultiSelect.prototype.removeChip = function (value) {\n if (this.chipCollectionWrapper) {\n var element = this.chipCollectionWrapper.querySelector('span[data-value=\"' + value + '\"]');\n if (element) {\n remove(element);\n }\n }\n };\n MultiSelect.prototype.updateChipStatus = function () {\n if (this.value.length) {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n (this.chipCollectionWrapper.style.display = '');\n }\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n this.showOverAllClear();\n }\n else {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(this.delimiterWrapper)) {\n (this.delimiterWrapper.style.display = 'none');\n }\n this.hideOverAllClear();\n }\n };\n MultiSelect.prototype.addValue = function (value, text, eve) {\n if (!this.value) {\n this.value = [];\n }\n this.setProperties({ value: [].concat([], this.value, [value]) }, true);\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n this.removeFocus();\n if (element) {\n this.addListFocus(element);\n this.addListSelection(element);\n }\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.addChip(text, value, eve);\n }\n if (this.hideSelectedItem && this.fields.groupBy) {\n this.hideGroupItem(value);\n }\n this.updateChipStatus();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.checkMaxSelection = function () {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit === this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n addClass(collection, 'e-disable');\n }\n };\n MultiSelect.prototype.dispatchSelect = function (value, eve, element, isNotTrigger, length) {\n if (this.initStatus && !isNotTrigger) {\n var val = this.getDataByValue(value);\n var eventArgs = {\n e: eve,\n item: element,\n itemData: val,\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return true;\n }\n if (length) {\n this.selectAllEventData.push(val);\n this.selectAllEventEle.push(element);\n }\n if (length === 1) {\n var args = {\n event: eve,\n items: this.selectAllEventEle,\n itemData: this.selectAllEventData,\n isInteracted: eve ? true : false,\n isChecked: true\n };\n this.trigger('selectedAll', args);\n this.selectAllEventData = [];\n }\n }\n return false;\n };\n MultiSelect.prototype.addChip = function (text, value, e) {\n if (this.chipCollectionWrapper) {\n var item = this.getChip(text, value, e);\n if (item.cancel) {\n return;\n }\n this.chipCollectionWrapper.appendChild(item.element);\n }\n };\n MultiSelect.prototype.removeChipFocus = function () {\n var elements;\n var closeElements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n closeElements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP_CLOSE.split(' ')[0]);\n removeClass(elements, CHIP_SELECTED);\n if (Browser.isDevice) {\n for (var index = 0; index < closeElements.length; index++) {\n closeElements[index].style.display = 'none';\n }\n }\n };\n MultiSelect.prototype.onMobileChipInteraction = function (e) {\n var chipElem = closest(e.target, '.' + CHIP);\n var chipClose = chipElem.querySelector('span.' + CHIP_CLOSE.split(' ')[0]);\n if (this.enabled && !this.readonly) {\n if (!chipElem.classList.contains(CHIP_SELECTED)) {\n this.removeChipFocus();\n chipClose.style.display = '';\n chipElem.classList.add(CHIP_SELECTED);\n }\n this.refreshPopup();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.getChip = function (data, value, e) {\n var itemData = { text: value, value: value };\n var chip = this.createElement('span', {\n className: CHIP,\n attrs: { 'data-value': value, 'title': data }\n });\n var chipContent = this.createElement('span', { className: CHIP_CONTENT });\n var chipClose = this.createElement('span', { className: CHIP_CLOSE });\n if (this.mainData) {\n itemData = this.getDataByValue(value);\n }\n if (this.valueTemplate && !isNullOrUndefined(itemData)) {\n var compiledString = compile(this.valueTemplate);\n for (var _i = 0, _a = compiledString(itemData); _i < _a.length; _i++) {\n var item = _a[_i];\n chipContent.appendChild(item);\n }\n }\n else {\n chipContent.innerHTML = data;\n }\n chip.appendChild(chipContent);\n var eventArgs = {\n isInteracted: e ? true : false,\n itemData: itemData,\n e: e,\n setClass: function (classes) {\n addClass([chip], classes);\n },\n cancel: false\n };\n this.trigger('tagging', eventArgs);\n if (eventArgs.cancel) {\n return { cancel: true, element: chip };\n }\n if (Browser.isDevice) {\n chip.classList.add(MOBILE_CHIP);\n append([chipClose], chip);\n chipClose.style.display = 'none';\n EventHandler.add(chip, 'click', this.onMobileChipInteraction, this);\n }\n else {\n EventHandler.add(chip, 'mousedown', this.chipClick, this);\n if (this.showClearButton) {\n chip.appendChild(chipClose);\n }\n }\n EventHandler.add(chipClose, 'mousedown', this.onChipRemove, this);\n return { cancel: false, element: chip };\n };\n MultiSelect.prototype.calcPopupWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = (this.componentWrapper.offsetWidth) * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n MultiSelect.prototype.mouseIn = function () {\n if (this.enabled && !this.readonly) {\n this.showOverAllClear();\n }\n };\n MultiSelect.prototype.mouseOut = function () {\n if (!this.inputFocus) {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldProperty = fields.properties;\n this.listCurrentOptions = (fields.text !== null || fields.value !== null) ? {\n fields: fieldProperty, showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n extend(this.listCurrentOptions, this.listCurrentOptions, fields, true);\n if (this.mode === 'CheckBox') {\n this.notify('listoption', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', dataSource: dataSource, fieldProperty: fieldProperty });\n }\n return this.listCurrentOptions;\n };\n MultiSelect.prototype.renderPopup = function () {\n var _this = this;\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n if (!this.popupObj) {\n var args = { cancel: false };\n this.trigger('beforeOpen', args);\n if (args.cancel) {\n return;\n }\n document.body.appendChild(this.popupWrapper);\n var overAllHeight = parseInt(this.popupHeight, 10);\n this.popupWrapper.style.visibility = 'hidden';\n if (this.headerTemplate) {\n this.setHeaderTemplate();\n overAllHeight -= this.header.offsetHeight;\n }\n append([this.list], this.popupWrapper);\n if (this.footerTemplate) {\n this.setFooterTemplate();\n overAllHeight -= this.footer.offsetHeight;\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight -= this.selectAllHeight;\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll && (!this.headerTemplate || !this.footerTemplate)) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n if (this.headerTemplate && this.header) {\n overAllHeight -= this.header.offsetHeight;\n }\n if (this.footerTemplate && this.footer) {\n overAllHeight -= this.footer.offsetHeight;\n }\n }\n if (this.mode === 'CheckBox') {\n var args_1 = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n popupElement: this.popupWrapper\n };\n this.notify('searchBox', args_1);\n overAllHeight -= this.searchBoxHeight;\n addClass([this.popupWrapper], 'e-checkbox');\n }\n if (this.popupHeight !== 'auto') {\n this.list.style.maxHeight = formatUnit(overAllHeight);\n this.popupWrapper.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n this.list.style.maxHeight = formatUnit(this.popupHeight);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.calcPopupWidth(), targetType: 'relative', position: { X: 'left', Y: 'bottom' },\n relateTo: this.overAllWrapper, collision: { X: 'flip', Y: 'flip' }, offsetY: 1,\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n close: function () {\n if (_this.popupObj.element.parentElement) {\n detach(_this.popupObj.element);\n }\n },\n open: function () {\n _this.notify('inputFocus', { module: 'CheckBoxSelection', enable: _this.mode === 'CheckBox', value: 'focus' });\n }\n });\n this.popupObj.close();\n this.popupWrapper.style.visibility = '';\n if (this.mode === 'CheckBox' && Browser.isDevice) {\n this.notify('deviceSearchBox', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n }\n };\n MultiSelect.prototype.setHeaderTemplate = function () {\n var compiledString;\n if (this.header) {\n this.header.remove();\n }\n this.header = this.createElement('div');\n addClass([this.header], HEADER);\n compiledString = compile(this.headerTemplate);\n var elements = compiledString({});\n for (var temp = 0; temp < elements.length; temp++) {\n this.header.appendChild(elements[temp]);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n prepend([this.header], this.popupWrapper);\n }\n else {\n append([this.header], this.popupWrapper);\n }\n EventHandler.add(this.header, 'mousedown', this.onListMouseDown, this);\n };\n MultiSelect.prototype.setFooterTemplate = function () {\n var compiledString;\n if (this.footer) {\n this.footer.remove();\n }\n this.footer = this.createElement('div');\n addClass([this.footer], FOOTER);\n compiledString = compile(this.footerTemplate);\n var elements = compiledString({});\n for (var temp = 0; temp < elements.length; temp++) {\n this.footer.appendChild(elements[temp]);\n }\n append([this.footer], this.popupWrapper);\n EventHandler.add(this.footer, 'mousedown', this.onListMouseDown, this);\n };\n MultiSelect.prototype.ClearAll = function (e) {\n if (this.enabled && !this.readonly) {\n var temp = void 0;\n var tempValues = this.value ? this.value.slice() : [];\n if (this.value) {\n for (temp = this.value[0]; this.value.length !== 0; temp = this.value[0]) {\n this.removeValue(temp, e);\n }\n }\n if (this.mainList && this.listData && this.allowFiltering) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.focusAtFirstListItem();\n this.updateDelimeter(this.delimiterChar);\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.makeTextBoxEmpty();\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n if (!this.inputFocus) {\n this.updateValueState(e, this.value, tempValues);\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n }\n if (this.mode === 'CheckBox') {\n this.refreshPlaceHolder();\n this.refreshInputHight();\n }\n e.preventDefault();\n }\n };\n MultiSelect.prototype.windowResize = function () {\n this.refreshPopup();\n if (!this.inputFocus && this.viewWrapper && this.viewWrapper.parentElement) {\n this.updateDelimView();\n }\n };\n MultiSelect.prototype.resetValueHandler = function (e) {\n var formElement = closest(this.inputElement, 'form');\n if (formElement && e.target === formElement) {\n this.value = null;\n }\n };\n MultiSelect.prototype.wireEvent = function () {\n EventHandler.add(this.componentWrapper, 'mousedown', this.wrapperClick, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n EventHandler.add(this.inputElement, 'focus', this.focusIn, this);\n EventHandler.add(this.inputElement, 'keydown', this.onKeyDown, this);\n EventHandler.add(this.inputElement, 'keyup', this.KeyUp, this);\n if (this.mode !== 'CheckBox') {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n }\n EventHandler.add(this.inputElement, 'blur', this.onBlur, this);\n EventHandler.add(this.componentWrapper, 'mousemove', this.mouseIn, this);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\n EventHandler.add(this.componentWrapper, 'mouseout', this.mouseOut, this);\n EventHandler.add(this.overAllClear, 'mouseup', this.ClearAll, this);\n };\n MultiSelect.prototype.onInput = function () {\n if (this.keyDownStatus) {\n this.isValidKey = true;\n }\n else {\n this.isValidKey = false;\n }\n this.keyDownStatus = false;\n };\n MultiSelect.prototype.preRender = function () {\n this.initializeData();\n _super.prototype.preRender.call(this);\n };\n MultiSelect.prototype.initializeData = function () {\n this.mainListCollection = [];\n this.beforePopupOpen = false;\n this.filterAction = false;\n this.remoteFilterAction = false;\n this.isFirstClick = false;\n this.mobFilter = true;\n this.isFiltered = false;\n this.focused = true;\n this.initial = true;\n this.backCommand = true;\n };\n MultiSelect.prototype.updateData = function (delimiterChar) {\n var data = '';\n var delim = this.mode === 'Delimiter' || this.mode === 'CheckBox';\n var text = [];\n var temp;\n var tempData = this.listData;\n this.listData = this.mainData;\n this.hiddenElement.innerHTML = '';\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n if (this.listData) {\n temp = this.getTextByValue(this.value[index]);\n }\n else {\n temp = this.value[index];\n }\n data += temp + delimiterChar + ' ';\n text.push(temp);\n this.hiddenElement.innerHTML += '';\n }\n }\n this.text = text.toString();\n if (delim) {\n this.delimiterWrapper.innerHTML = data;\n }\n this.listData = tempData;\n };\n MultiSelect.prototype.initialValueUpdate = function () {\n if (this.list) {\n var text = void 0;\n var textField = void 0;\n var valueField = void 0;\n var element = void 0;\n var value = void 0;\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.innerHTML = '';\n }\n this.removeListSelection();\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n value = this.value[index];\n element = this.hideSelectedItem ? this.ulElement.querySelector('li[data-value=\"' + value + '\"]')\n : this.list.querySelector('li[data-value=\"' + value + '\"]');\n text = this.getTextByValue(value);\n if ((element && (element.getAttribute('aria-selected') !== 'true')) ||\n (element && (element.getAttribute('aria-selected') === 'true' && this.hideSelectedItem) &&\n (this.mode === 'Box' || this.mode === 'Default'))) {\n this.addChip(text, value);\n this.addListSelection(element);\n }\n else if (value && this.allowCustomValue) {\n var indexItem = this.listData.length;\n var newValue = {};\n setValue(this.fields.text, value, newValue);\n setValue(this.fields.value, value, newValue);\n this.addItem(newValue, indexItem);\n this.addChip(text, value);\n this.addListSelection(element);\n }\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.updateValueState(null, this.value, this.tempValues);\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll && isNullOrUndefined(this.value)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n if (!this.inputFocus) {\n if (this.mode === 'Box') {\n this.chipCollectionWrapper.style.display = '';\n }\n else if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n }\n }\n };\n MultiSelect.prototype.isValidLI = function (li) {\n return (li && !li.classList.contains(dropDownBaseClasses.disabled) && !li.classList.contains(dropDownBaseClasses.group) &&\n li.classList.contains(dropDownBaseClasses.li));\n };\n ;\n MultiSelect.prototype.updateListSelection = function (li, e, length) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n var text = this.getTextByValue(value);\n this.removeHover();\n if (!this.value || this.value.indexOf(value) === -1) {\n var argsCancel = this.dispatchSelect(value, e, li, (li.getAttribute('aria-selected') === 'true'), length);\n if (argsCancel) {\n return;\n }\n if ((this.allowCustomValue || this.allowFiltering) && !this.mainList.querySelector('li[data-value=\"' + value + '\"]')) {\n var temp = li.cloneNode(true);\n var data = this.getDataByValue(value);\n append([temp], this.mainList);\n this.mainData.push(data);\n var eventArgs = {\n newData: data,\n cancel: false\n };\n this.trigger('customValueSelection', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.remoteCustomValue = false;\n this.addValue(value, text, e);\n }\n else {\n this.removeValue(value, e, length);\n }\n };\n MultiSelect.prototype.removeListSelection = function () {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n var selectedItems = this.list.querySelectorAll('.' + className);\n var temp = selectedItems.length;\n if (selectedItems && selectedItems.length) {\n removeClass(selectedItems, className);\n while (temp > 0) {\n selectedItems[temp - 1].setAttribute('aria-selected', 'false');\n temp--;\n }\n }\n if (!isNullOrUndefined(this.mainList)) {\n var selectItems = this.mainList.querySelectorAll('.' + className);\n var temp1 = selectItems.length;\n if (selectItems && selectItems.length) {\n removeClass(selectItems, className);\n while (temp1 > 0) {\n selectItems[temp1 - 1].setAttribute('aria-selected', 'false');\n if (this.mode === 'CheckBox') {\n selectItems[temp1 - 1].firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([selectItems[temp1 - 1].firstElementChild.lastElementChild], 'e-check');\n }\n temp1--;\n }\n }\n }\n };\n ;\n MultiSelect.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.removeFocus = function () {\n if (this.list) {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.focus);\n var mainlist = this.mainList.querySelectorAll('.' + dropDownBaseClasses.focus);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.focus);\n removeClass(mainlist, dropDownBaseClasses.focus);\n }\n }\n };\n ;\n MultiSelect.prototype.addListHover = function (li) {\n if (this.enabled && this.isValidLI(li)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.addListFocus = function (element) {\n if (this.enabled && this.isValidLI(element)) {\n this.removeFocus();\n addClass([element], dropDownBaseClasses.focus);\n }\n };\n MultiSelect.prototype.addListSelection = function (element) {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (this.isValidLI(element) && !element.classList.contains(dropDownBaseClasses.hover)) {\n addClass([element], className);\n this.updateMainList(false, element.getAttribute('data-value'));\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox') {\n var ariaCheck = element.firstElementChild.getAttribute('aria-checked');\n if (ariaCheck === 'false' || isNullOrUndefined(ariaCheck)) {\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n }\n }\n this.notify('activeList', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n if (this.chipCollectionWrapper !== null) {\n this.removeChipSelection();\n }\n attributes(this.inputElement, { 'aria-activedescendant': element.id });\n }\n };\n MultiSelect.prototype.updateDelimeter = function (delimChar) {\n this.updateData(delimChar);\n };\n MultiSelect.prototype.onMouseClick = function (e) {\n this.scrollFocusStatus = false;\n var target = e.target;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (this.isValidLI(li)) {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if ((this.allowCustomValue || this.allowFiltering) && this.mainList && this.listData) {\n if (this.mode !== 'CheckBox') {\n this.focusAtLastListItem(li.getAttribute('data-value'));\n }\n this.refreshSelection();\n }\n else {\n this.makeTextBoxEmpty();\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.checkSelectAll();\n this.refreshPopup();\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n else {\n e.preventDefault();\n }\n this.makeTextBoxEmpty();\n }\n else {\n e.preventDefault();\n }\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(isNullOrUndefined(li) ? null : li.textContent);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.addListHover(currentLi);\n };\n MultiSelect.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n MultiSelect.prototype.onListMouseDown = function (e) {\n e.preventDefault();\n this.scrollFocusStatus = true;\n };\n MultiSelect.prototype.onDocumentClick = function (e) {\n if (this.mode !== 'CheckBox') {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, '#' + this.popupObj.element.id)) &&\n !this.overAllWrapper.contains(e.target)) {\n this.scrollFocusStatus = false;\n }\n else {\n this.scrollFocusStatus = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n }\n }\n };\n MultiSelect.prototype.wireListEvents = function () {\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n EventHandler.add(this.list, 'mousedown', this.onListMouseDown, this);\n EventHandler.add(this.list, 'mouseup', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n };\n ;\n MultiSelect.prototype.unwireListEvents = function () {\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n if (this.list) {\n EventHandler.remove(this.list, 'mousedown', this.onListMouseDown);\n EventHandler.remove(this.list, 'mouseup', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n }\n };\n ;\n MultiSelect.prototype.hideOverAllClear = function () {\n if (!this.value || !this.value.length || this.inputElement.value === '') {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.showOverAllClear = function () {\n if (((this.value && this.value.length) || this.inputElement.value !== '') && this.showClearButton) {\n this.overAllClear.style.display = '';\n }\n else {\n this.overAllClear.style.display = 'none';\n }\n };\n /**\n * Shows the spinner loader.\n * @returns void.\n */\n MultiSelect.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n if (this.overAllClear.style.display !== 'none') {\n this.spinnerElement = this.overAllClear;\n }\n else {\n this.spinnerElement = this.createElement('span', { className: CLOSEICON_CLASS + ' ' + SPINNER_CLASS });\n this.componentWrapper.appendChild(this.spinnerElement);\n }\n createSpinner({ target: this.spinnerElement, width: Browser.isDevice ? '16px' : '14px' }, this.createElement);\n addClass([this.spinnerElement], DISABLE_ICON);\n showSpinner(this.spinnerElement);\n }\n };\n /**\n * Hides the spinner loader.\n * @returns void.\n */\n MultiSelect.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], DISABLE_ICON);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n MultiSelect.prototype.updateDelimView = function () {\n if (this.delimiterWrapper) {\n this.hideDelimWrapper();\n }\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n this.viewWrapper.style.display = '';\n if (this.value && this.value.length) {\n var data = '';\n var temp = void 0;\n var tempData = void 0;\n var tempIndex = 1;\n var wrapperleng = void 0;\n var remaining = void 0;\n this.viewWrapper.innerHTML = '';\n var l10nLocale = {\n noRecordsTemplate: 'No Records Found',\n actionFailureTemplate: 'The Request Failed',\n overflowCountTemplate: '+${count} more..'\n };\n var l10n = new L10n('dropdowns', l10nLocale, this.locale);\n var remainContent = l10n.getConstant('overflowCountTemplate');\n var raminElement = this.createElement('span', {\n className: REMAIN_WRAPPER\n });\n var compiledString = compile(remainContent);\n raminElement.appendChild(compiledString({ 'count': this.value.length })[0]);\n this.viewWrapper.appendChild(raminElement);\n var remainSize = raminElement.offsetWidth;\n remove(raminElement);\n this.viewWrapper.innerHTML = '';\n var inputleng = this.searchWrapper.offsetWidth;\n var overAllContainer = parseInt(window.getComputedStyle(this.componentWrapper).width, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingLeft, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingRight, 10);\n var remainValue = void 0;\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n data += (index === 0) ? '' : this.delimiterChar + ' ';\n if (this.mainData && this.mainData.length) {\n if (this.mode === 'CheckBox') {\n remainValue = 110;\n var newTemp = this.listData;\n this.listData = this.mainData;\n temp = this.getTextByValue(this.value[index]);\n this.listData = newTemp;\n }\n else {\n remainValue = 0;\n temp = this.getTextByValue(this.value[index]);\n }\n }\n else {\n temp = this.value[index];\n }\n data += temp;\n temp = this.viewWrapper.innerHTML;\n this.viewWrapper.innerHTML = data;\n wrapperleng = this.viewWrapper.offsetWidth;\n if ((wrapperleng) > overAllContainer - remainValue) {\n if (tempData !== undefined) {\n temp = tempData;\n index = tempIndex + 1;\n }\n this.viewWrapper.innerHTML = temp;\n remaining = this.value.length - index;\n break;\n }\n else if ((wrapperleng + remainSize) <= overAllContainer) {\n tempData = data;\n tempIndex = index;\n }\n else if (index === 0) {\n tempData = '';\n tempIndex = -1;\n }\n }\n }\n if (remaining > 0) {\n raminElement.innerHTML = '';\n raminElement.appendChild(compiledString({ 'count': remaining })[0]);\n this.viewWrapper.appendChild(raminElement);\n }\n }\n else {\n this.viewWrapper.innerHTML = '';\n this.viewWrapper.style.display = 'none';\n }\n };\n MultiSelect.prototype.unWireEvent = function () {\n EventHandler.remove(this.componentWrapper, 'mousedown', this.wrapperClick);\n EventHandler.remove(window, 'resize', this.windowResize);\n EventHandler.remove(this.inputElement, 'focus', this.focusIn);\n EventHandler.remove(this.inputElement, 'keydown', this.onKeyDown);\n if (this.mode !== 'CheckBox') {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.KeyUp);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.onBlur);\n EventHandler.remove(this.componentWrapper, 'mousemove', this.mouseIn);\n EventHandler.remove(this.componentWrapper, 'mouseout', this.mouseOut);\n EventHandler.remove(this.overAllClear, 'mousedown', this.ClearAll);\n };\n MultiSelect.prototype.selectAllItem = function (state) {\n var li;\n li = this.list.querySelectorAll(state ?\n 'li.e-list-item:not([aria-selected=\"true\"]):not(.e-reorder-hide)' :\n 'li[aria-selected=\"true\"]:not(.e-reorder-hide)');\n var length = li.length;\n if (li && li.length) {\n while (length > 0) {\n this.updateListSelection(li[length - 1], null, length);\n length--;\n }\n }\n if (this.mode !== 'Box' && !this.isPopupOpen()) {\n this.updateDelimView();\n }\n else {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n MultiSelect.prototype.updateDataSource = function (prop) {\n if (isNullOrUndefined(this.list)) {\n this.renderPopup();\n }\n else {\n this.resetList(this.dataSource);\n }\n if (this.value && this.value.length) {\n this.setProperties({ 'value': this.value });\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.onLoadSelect = function () {\n this.setDynValue = true;\n this.renderPopup();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n MultiSelect.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ;\n /**\n * Dynamically change the value of properties.\n * @private\n */\n MultiSelect.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource))) {\n this.mainList = null;\n this.mainData = null;\n }\n if (this.getModuleName() === 'multiselect') {\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'dataSource':\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n if (!isNullOrUndefined(this.popupObj)) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttribute();\n break;\n case 'showClearButton':\n this.updateClearButton(newProp.showClearButton);\n break;\n case 'value':\n if (!this.list) {\n this.onLoadSelect();\n }\n else if (!this.inputFocus) {\n this.initialValueUpdate();\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.refreshInputHight();\n this.refreshPlaceHolder();\n this.updateValueState(null, this.value, oldProp.value);\n }\n break;\n case 'width':\n setStyleAttribute(this.overAllWrapper, { 'width': formatUnit(newProp.width) });\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n break;\n case 'placeholder':\n this.refreshPlaceHolder();\n break;\n case 'filterBarPlaceholder':\n this.notify('filterBarPlaceholder', { filterBarPlaceholder: newProp.filterBarPlaceholder });\n break;\n case 'delimiterChar':\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateData(newProp.delimiterChar);\n break;\n case 'cssClass':\n this.popupWrapper.classList.remove(oldProp.cssClass);\n this.overAllWrapper.classList.remove(oldProp.cssClass);\n this.updateCssClass();\n break;\n case 'enableRtl':\n this.enableRTL(newProp.enableRtl);\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n case 'readonly':\n this.updateReadonly(newProp.readonly);\n this.hidePopup();\n break;\n case 'enabled':\n this.hidePopup();\n this.enable(newProp.enabled);\n break;\n case 'showSelectAll':\n if (this.popupObj) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n break;\n case 'showDropDownIcon':\n this.dropDownIcon();\n break;\n case 'floatLabelType':\n this.setFloatLabelType();\n break;\n case 'enableSelectionOrder':\n break;\n case 'selectAllText':\n this.notify('selectAllText', false);\n break;\n case 'popupHeight':\n case 'headerTemplate':\n case 'footerTemplate':\n if (this.popupObj) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n break;\n default:\n var msProps = void 0;\n msProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, msProps.newProperty, msProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Hides the popup, if the popup in a open state.\n * @returns void\n */\n MultiSelect.prototype.hidePopup = function () {\n var delay = 100;\n if (this.isPopupOpen()) {\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.beforePopupOpen = false;\n this.overAllWrapper.classList.remove(iconAnimation);\n this.popupObj.hide(new Animation(eventArgs.animation));\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.notify('inputFocus', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'clear' });\n this.popupObj.hide();\n removeClass([document.body, this.popupObj.element], 'e-popup-full-page');\n EventHandler.remove(this.list, 'keydown', this.onKeyDown);\n }\n };\n /**\n * Shows the popup, if the popup in a closed state.\n * @returns void\n */\n MultiSelect.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.ulElement) {\n this.beforePopupOpen = true;\n _super.prototype.render.call(this);\n return;\n }\n var mainLiLength = this.ulElement.querySelectorAll('li.' + 'e-list-item').length;\n var liLength = this.ulElement.querySelectorAll('li.'\n + dropDownBaseClasses.li + '.' + HIDE_LIST).length;\n if (mainLiLength > 0 && (mainLiLength === liLength) && (liLength === this.mainData.length)) {\n this.beforePopupOpen = false;\n return;\n }\n this.onPopupShown();\n };\n /**\n * Based on the state parameter, entire list item will be selected/deselected.\n * parameter\n * `true` - Selects entire list items.\n * `false` - Un Selects entire list items.\n * @returns void\n */\n MultiSelect.prototype.selectAll = function (state) {\n var _this = this;\n if (isNullOrUndefined(this.list)) {\n this.selectAllAction = function () {\n if (_this.mode === 'CheckBox' && _this.showSelectAll) {\n var args = {\n module: 'CheckBoxSelection',\n enable: _this.mode === 'CheckBox',\n value: state ? 'check' : 'uncheck'\n };\n _this.notify('checkSelectAll', args);\n }\n _this.selectAllItem(state);\n _this.selectAllAction = null;\n };\n _super.prototype.render.call(this);\n }\n else {\n this.selectAllAction = null;\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n value: state ? 'check' : 'uncheck'\n };\n this.notify('checkSelectAll', args);\n }\n this.selectAllItem(state);\n }\n };\n MultiSelect.prototype.getModuleName = function () {\n return 'multiselect';\n };\n ;\n /**\n * To Initialize the control rendering\n * @private\n */\n MultiSelect.prototype.render = function () {\n var _this = this;\n this.initStatus = false;\n this.setDynValue = false;\n this.searchWrapper = this.createElement('span', { className: SEARCHBOX_WRAPPER });\n this.viewWrapper = this.createElement('span', { className: DELIMITER_VIEW + ' ' + DELIMITER_WRAPPER, styles: 'display:none;' });\n var iconClass;\n this.overAllClear = this.createElement('span', {\n className: CLOSEICON_CLASS, styles: 'display:none;'\n });\n this.componentWrapper = this.createElement('div', { className: ELEMENT_WRAPPER });\n this.overAllWrapper = this.createElement('div', { className: OVER_ALL_WRAPPER });\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], 'e-checkbox');\n }\n if (Browser.isDevice) {\n this.componentWrapper.classList.add(ELEMENT_MOBILE_WRAPPER);\n }\n this.overAllWrapper.style.width = formatUnit(this.width);\n this.overAllWrapper.appendChild(this.componentWrapper);\n this.popupWrapper = this.createElement('div', { id: this.element.id + '_popup', className: POPUP_WRAPPER });\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.delimiterWrapper = this.createElement('span', { className: DELIMITER_WRAPPER, styles: 'display:none' });\n this.componentWrapper.appendChild(this.delimiterWrapper);\n }\n else {\n this.chipCollectionWrapper = this.createElement('span', {\n className: CHIP_WRAPPER,\n styles: 'display:none'\n });\n this.componentWrapper.appendChild(this.chipCollectionWrapper);\n }\n if (this.mode !== 'Box') {\n this.componentWrapper.appendChild(this.viewWrapper);\n }\n this.componentWrapper.appendChild(this.searchWrapper);\n if (this.showClearButton && !Browser.isDevice) {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n else {\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n this.dropDownIcon();\n this.inputElement = this.createElement('input', {\n className: INPUT_ELEMENT,\n attrs: {\n spellcheck: 'false',\n type: 'text',\n autocomplete: 'off',\n tabindex: '0'\n }\n });\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.overAllWrapper);\n this.searchWrapper.appendChild(this.inputElement);\n }\n else {\n this.element.parentElement.insertBefore(this.overAllWrapper, this.element);\n this.searchWrapper.appendChild(this.inputElement);\n this.searchWrapper.appendChild(this.element);\n this.element.removeAttribute('tabindex');\n }\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n else if (this.floatLabelType === 'Never') {\n this.refreshPlaceHolder();\n }\n this.element.style.opacity = '';\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement = this.createElement('select', {\n attrs: { 'aria-hidden': 'true', 'class': HIDDEN_ELEMENT, 'tabindex': '-1', 'multiple': 'true' }\n });\n this.componentWrapper.appendChild(this.hiddenElement);\n this.validationAttribute(this.element, this.hiddenElement);\n if (this.mode !== 'CheckBox') {\n this.hideOverAllClear();\n }\n this.wireEvent();\n this.enable(this.enabled);\n this.enableRTL(this.enableRtl);\n if (this.value && this.value.length) {\n this.renderPopup();\n if (!(this.dataSource instanceof DataManager)) {\n this.initialValueUpdate();\n this.initialUpdate();\n }\n else {\n this.setInitialValue = function () {\n _this.initStatus = false;\n _this.initialValueUpdate();\n _this.initialUpdate();\n _this.setInitialValue = null;\n _this.initStatus = true;\n };\n }\n }\n else {\n this.initialUpdate();\n }\n this.initStatus = true;\n this.checkAutoFocus();\n };\n MultiSelect.prototype.checkAutoFocus = function () {\n if (this.element.hasAttribute('autofocus')) {\n this.focusIn();\n }\n };\n MultiSelect.prototype.setFloatLabelType = function () {\n removeFloating(this.overAllWrapper, this.componentWrapper, this.searchWrapper, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n };\n MultiSelect.prototype.dropDownIcon = function () {\n if (this.mode === 'CheckBox' && this.showDropDownIcon) {\n this.dropIcon = this.createElement('span', { className: dropdownIcon });\n this.componentWrapper.appendChild(this.dropIcon);\n addClass([this.componentWrapper], ['e-down-icon']);\n }\n else {\n if (!isNullOrUndefined(this.dropIcon)) {\n this.dropIcon.parentElement.removeChild(this.dropIcon);\n removeClass([this.componentWrapper], ['e-down-icon']);\n }\n }\n };\n MultiSelect.prototype.initialUpdate = function () {\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateCssClass();\n this.updateHTMLAttribute();\n this.updateReadonly(this.readonly);\n this.refreshInputHight();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n MultiSelect.prototype.destroy = function () {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n this.notify(destroy, {});\n this.unwireListEvents();\n this.unWireEvent();\n this.list = null;\n this.popupObj = null;\n this.mainList = null;\n this.mainData = null;\n _super.prototype.destroy.call(this);\n var temp = ['readonly', 'aria-disabled', 'aria-placeholder', 'placeholder'];\n var length = temp.length;\n while (length > 0) {\n this.inputElement.removeAttribute(temp[length - 1]);\n length--;\n }\n this.element.style.display = 'block';\n if (this.overAllWrapper.parentElement) {\n if (this.overAllWrapper.parentElement.tagName === this.getNgDirective()) {\n remove(this.overAllWrapper);\n }\n else {\n this.overAllWrapper.parentElement.insertBefore(this.element, this.overAllWrapper);\n remove(this.overAllWrapper);\n }\n }\n };\n ;\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], MultiSelect.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], MultiSelect.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowCustomValue\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(1000)\n ], MultiSelect.prototype, \"maximumSelectionLength\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"value\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"hideSelectedItem\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"closePopupOnSelect\", void 0);\n __decorate([\n Property('Default')\n ], MultiSelect.prototype, \"mode\", void 0);\n __decorate([\n Property(',')\n ], MultiSelect.prototype, \"delimiterChar\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showDropDownIcon\", void 0);\n __decorate([\n Property('Never')\n ], MultiSelect.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showSelectAll\", void 0);\n __decorate([\n Property('Select All')\n ], MultiSelect.prototype, \"selectAllText\", void 0);\n __decorate([\n Property('Unselect All')\n ], MultiSelect.prototype, \"unSelectAllText\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"enableSelectionOrder\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"openOnClick\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"selectedAll\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"chipSelection\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"tagging\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"customValueSelection\", void 0);\n MultiSelect = __decorate([\n NotifyPropertyChanges\n ], MultiSelect);\n return MultiSelect;\n}(DropDownBase));\nexport { MultiSelect };\n","import { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { EventHandler, select, removeClass, addClass, detach, compile, L10n } from '@syncfusion/ej2-base';\nimport { Browser, attributes, isNullOrUndefined, append, closest, prepend } from '@syncfusion/ej2-base';\nimport { dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nvar ICON = 'e-icons';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECK = 'e-check';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar INDETERMINATE = 'e-stop';\nvar checkAllParent = 'e-selectall-parent';\nvar searchBackIcon = 'e-input-group-icon e-back-icon e-icons';\nvar filterBarClearIcon = 'e-input-group-icon e-clear-icon e-icons';\nvar filterInput = 'e-input-filter';\nvar filterParent = 'e-filter-parent';\nvar mobileFilter = 'e-ddl-device-filter';\nvar clearIcon = 'e-clear-icon';\nvar popupFullScreen = 'e-popup-full-page';\nvar device = 'e-ddl-device';\nvar FOCUS = 'e-input-focus';\n/**\n * The Multiselect enable CheckBoxSelection call this inject module.\n */\nvar CheckBoxSelection = /** @class */ (function () {\n function CheckBoxSelection(parent) {\n this.activeLi = [];\n this.activeEle = [];\n this.parent = parent;\n this.addEventListener();\n }\n CheckBoxSelection.prototype.getModuleName = function () {\n return 'CheckBoxSelection';\n };\n CheckBoxSelection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('updatelist', this.listSelection, this);\n this.parent.on('listoption', this.listOption, this);\n this.parent.on('selectAll', this.setSelectAll, this);\n this.parent.on('checkSelectAll', this.checkSelectAll, this);\n this.parent.on('searchBox', this.setSearchBox, this);\n this.parent.on('blur', this.onBlur, this);\n this.parent.on('targetElement', this.targetElement, this);\n this.parent.on('deviceSearchBox', this.setDeviceSearchBox, this);\n this.parent.on('inputFocus', this.getFocus, this);\n this.parent.on('reOrder', this.setReorder, this);\n this.parent.on('activeList', this.getActiveList, this);\n this.parent.on('selectAllText', this.setLocale, this);\n this.parent.on('filterBarPlaceholder', this.setPlaceholder, this);\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n this.parent.on('addItem', this.checboxCreate, this);\n };\n CheckBoxSelection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updatelist', this.listSelection);\n this.parent.off('listoption', this.listOption);\n this.parent.off('selectAll', this.setSelectAll);\n this.parent.off('checkSelectAll', this.checkSelectAll);\n this.parent.off('searchBox', this.setSearchBox);\n this.parent.off('blur', this.onBlur);\n this.parent.off('targetElement', this.targetElement);\n this.parent.off('deviceSearchBox', this.setDeviceSearchBox);\n this.parent.off('inputFocus', this.getFocus);\n this.parent.off('reOrder', this.setReorder);\n this.parent.off('activeList', this.getActiveList);\n this.parent.off('selectAllText', this.setLocale);\n this.parent.off('filterBarPlaceholder', this.setPlaceholder);\n this.parent.off('addItem', this.checboxCreate);\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n };\n CheckBoxSelection.prototype.listOption = function (args) {\n var _this = this;\n if (isNullOrUndefined(this.parent.listCurrentOptions.itemCreated)) {\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n };\n }\n else {\n var itemCreated_1 = this.parent.listCurrentOptions.itemCreated;\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n itemCreated_1.apply(_this, [e]);\n };\n }\n };\n ;\n CheckBoxSelection.prototype.setPlaceholder = function (props) {\n Input.setPlaceholder(props.filterBarPlaceholder, this.filterInput);\n };\n CheckBoxSelection.prototype.checboxCreate = function (e) {\n var item;\n if (!isNullOrUndefined(e.item)) {\n item = e.item;\n }\n else {\n item = e;\n }\n if (item.className !== 'e-list-group-item ' && item.className !== 'e-list-group-item') {\n var checkboxEle = createCheckBox(this.parent.createElement, true);\n var icon = select('div.' + ICON, item);\n var id = item.getAttribute('data-uid');\n item.insertBefore(checkboxEle, item.childNodes[isNullOrUndefined(icon) ? 0 : 1]);\n select('.' + CHECKBOXFRAME, checkboxEle);\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n return item;\n }\n else {\n return item;\n }\n };\n CheckBoxSelection.prototype.setSelectAll = function () {\n if (this.parent.showSelectAll) {\n if (isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent = this.parent.createElement('div', {\n className: checkAllParent\n });\n this.selectAllSpan = this.parent.createElement('span', {\n className: 'e-all-text'\n });\n this.selectAllSpan.textContent = '';\n this.checkAllParent.appendChild(this.selectAllSpan);\n this.setLocale();\n this.checboxCreate(this.checkAllParent);\n if (this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.filterParent)) {\n append([this.checkAllParent], this.filterParent);\n }\n else {\n append([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n if (!this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.filterParent)) {\n this.filterParent.parentNode.insertBefore(this.checkAllParent, this.filterParent.nextSibling);\n }\n else {\n prepend([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n EventHandler.add(this.checkAllParent, 'mousedown', this.clickHandler, this);\n }\n if (this.parent.list.classList.contains('e-nodata')) {\n this.checkAllParent.style.display = 'none';\n }\n else {\n this.checkAllParent.style.display = 'block';\n }\n this.parent.selectAllHeight = this.checkAllParent.getBoundingClientRect().height;\n }\n else if (!isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent.parentElement.removeChild(this.checkAllParent);\n this.checkAllParent = null;\n }\n };\n CheckBoxSelection.prototype.destroy = function () {\n this.removeEventListener();\n };\n CheckBoxSelection.prototype.listSelection = function (args) {\n var target;\n if (!isNullOrUndefined(args.e)) {\n target = !isNullOrUndefined(args.e.target) ?\n args.e.target.classList.contains('e-frame') ?\n args.e.target : args.li.querySelector('.e-checkbox-wrapper').childNodes[1]\n : args.li.querySelector('.e-checkbox-wrapper').childNodes[1];\n }\n else {\n target = args.li.lastElementChild.childNodes[1];\n }\n if (this.parent.itemTemplate) {\n target = args.li.firstElementChild.childNodes[1];\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n var selectAll = false;\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), args.li, args.e, selectAll);\n }\n };\n CheckBoxSelection.prototype.validateCheckNode = function (checkWrap, isCheck, li, e, selectAll) {\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true, selectAll);\n };\n CheckBoxSelection.prototype.clickHandler = function (e) {\n var target;\n if (e.currentTarget.classList.contains(this.checkAllParent.className)) {\n target = e.currentTarget.firstElementChild.lastElementChild;\n }\n else {\n target = e.currentTarget;\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n var selectAll = true;\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), null, e, selectAll);\n }\n e.preventDefault();\n };\n CheckBoxSelection.prototype.changeState = function (wrapper, state, e, isPrevent, selectAll) {\n var ariaState;\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n ariaState = 'true';\n if (selectAll) {\n this.parent.selectAll(true);\n this.setLocale(true);\n }\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n ariaState = 'false';\n if (selectAll) {\n this.parent.selectAll(false);\n this.setLocale();\n }\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNullOrUndefined(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n };\n CheckBoxSelection.prototype.setSearchBox = function (args) {\n if (isNullOrUndefined(this.filterParent)) {\n this.filterParent = this.parent.createElement('span', {\n className: filterParent\n });\n this.filterInput = this.parent.createElement('input', {\n attrs: { type: 'text' },\n className: filterInput\n });\n this.parent.element.parentNode.insertBefore(this.filterInput, this.parent.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n this.parent.mobFilter = false;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ? [searchBackIcon, filterBarClearIcon] : [filterBarClearIcon],\n properties: { placeholder: this.parent.filterBarPlaceholder }\n }, this.parent.createElement);\n append([this.filterInputObj.container], this.filterParent);\n prepend([this.filterParent], args.popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'aria-owns': this.parent.element.id + '_options',\n 'role': 'listbox',\n 'aria-activedescendant': null,\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'mousedown', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n EventHandler.add(this.filterInput, 'input', this.parent.onInput, this.parent);\n EventHandler.add(this.filterInput, 'keyup', this.parent.KeyUp, this.parent);\n EventHandler.add(this.filterInput, 'keydown', this.parent.onKeyDown, this.parent);\n EventHandler.add(this.filterInput, 'blur', this.onBlur, this);\n this.parent.searchBoxHeight = (this.filterInputObj.container.parentElement).getBoundingClientRect().height;\n return this.filterInputObj;\n }\n };\n ;\n CheckBoxSelection.prototype.clickOnBackIcon = function (e) {\n this.parent.hidePopup();\n removeClass([document.body, this.parent.popupObj.element], popupFullScreen);\n };\n CheckBoxSelection.prototype.clearText = function (e) {\n this.parent.targetInputElement.value = '';\n this.parent.refreshPopup();\n this.parent.refreshListItems(null);\n this.clearIconElement.style.visibility = 'hidden';\n this.filterInput.focus();\n this.setReorder(e);\n e.preventDefault();\n };\n CheckBoxSelection.prototype.setDeviceSearchBox = function () {\n this.parent.popupObj.element.classList.add(device);\n this.parent.popupObj.element.classList.add(mobileFilter);\n this.parent.popupObj.position = { X: 0, Y: 0 };\n this.parent.popupObj.dataBind();\n attributes(this.parent.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, this.parent.popupObj.element], popupFullScreen);\n this.setSearchBoxPosition();\n this.backIconElement = this.filterInputObj.container.querySelector('.e-back-icon');\n this.clearIconElement = this.filterInputObj.container.querySelector('.' + clearIcon);\n this.clearIconElement.style.visibility = 'hidden';\n EventHandler.add(this.backIconElement, 'click', this.clickOnBackIcon, this);\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n };\n CheckBoxSelection.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.parent.popupObj.element.style.maxHeight = '100%';\n this.parent.popupObj.element.style.width = '100%';\n this.parent.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.parent.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n CheckBoxSelection.prototype.targetElement = function () {\n this.parent.targetInputElement = this.filterInput;\n this.clearIconElement.style.visibility = this.parent.targetInputElement.value === '' ? 'hidden' : 'visible';\n return this.parent.targetInputElement.value;\n };\n CheckBoxSelection.prototype.onBlur = function (e) {\n var target;\n if (this.parent.keyAction) {\n return;\n }\n if (Browser.isIE) {\n target = !isNullOrUndefined(e) && e.target;\n }\n if (!Browser.isIE) {\n target = !isNullOrUndefined(e) && e.relatedTarget;\n }\n if (document.body.contains(this.parent.popupObj.element) && this.parent.popupObj.element.contains(target) && !Browser.isIE) {\n this.filterInput.focus();\n return;\n }\n if (this.parent.scrollFocusStatus) {\n e.preventDefault();\n this.filterInput.focus();\n this.parent.scrollFocusStatus = false;\n return;\n }\n if (document.body.contains(this.parent.popupObj.element) && !this.parent.popupObj.element.classList.contains('e-popup-close')) {\n this.parent.inputFocus = false;\n this.parent.updateValueState(e, this.parent.value, this.parent.tempValues);\n this.parent.dispatchEvent(this.parent.hiddenElement, 'change');\n }\n if (document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close')) {\n this.parent.inputFocus = false;\n this.parent.overAllWrapper.classList.remove(FOCUS);\n this.parent.trigger('blur');\n this.parent.focused = true;\n }\n if (document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close') && !Browser.isDevice) {\n this.parent.hidePopup();\n }\n };\n CheckBoxSelection.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.parent.popupObj) && closest(target, '#' + this.parent.popupObj.element.id)) {\n e.preventDefault();\n }\n if (!(!isNullOrUndefined(this.parent.popupObj) && closest(target, '#' + this.parent.popupObj.element.id)) &&\n !this.parent.overAllWrapper.contains(e.target)) {\n if (this.parent.overAllWrapper.classList.contains(dropDownBaseClasses.focus) || this.parent.isPopupOpen()) {\n this.parent.inputFocus = false;\n this.parent.scrollFocusStatus = false;\n this.parent.hidePopup();\n this.parent.onBlur();\n this.parent.focused = true;\n }\n }\n else {\n this.parent.scrollFocusStatus = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.filterInput);\n }\n if (!this.parent.overAllWrapper.contains(e.target) && this.parent.overAllWrapper.classList.contains('e-input-focus') &&\n !this.parent.isPopupOpen()) {\n this.parent.onBlur(e);\n }\n if (this.filterInput === target) {\n this.filterInput.focus();\n }\n };\n CheckBoxSelection.prototype.getFocus = function (e) {\n this.parent.overAllWrapper.classList.remove(FOCUS);\n if (this.parent.keyAction && e.value !== 'clear') {\n this.parent.keyAction = false;\n return;\n }\n if (e.value === 'focus') {\n this.filterInput.focus();\n this.parent.removeFocus();\n EventHandler.remove(this.parent.list, 'keydown', this.parent.onKeyDown);\n }\n if (e.value === 'clear') {\n this.filterInput.value = '';\n this.clearIconElement.style.visibility = 'hidden';\n }\n };\n CheckBoxSelection.prototype.checkSelectAll = function (e) {\n if (e.value === 'check' && this.checkAllParent.getAttribute('aria-checked') !== 'true') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale(true);\n }\n if (e.value === 'uncheck') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale();\n }\n };\n CheckBoxSelection.prototype.setLocale = function (unSelect) {\n if (this.parent.selectAllText !== 'Select All' || this.parent.unSelectAllText !== 'Unselect All') {\n var template = unSelect ? this.parent.unSelectAllText : this.parent.selectAllText;\n var compiledString = void 0;\n this.selectAllSpan.textContent = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.selectAllSpan.textContent = item.textContent;\n }\n }\n else {\n var l10nLocale = { selectAllText: 'Select All', unSelectAllText: 'Unselect All' };\n var l10n = new L10n('dropdowns', l10nLocale, this.parent.locale);\n this.selectAllSpan.textContent = unSelect ? l10n.getConstant('unSelectAllText') : l10n.getConstant('selectAllText');\n }\n };\n CheckBoxSelection.prototype.getActiveList = function (args) {\n if (args.li.classList.contains('e-active')) {\n this.activeLi.push(args.li.cloneNode(true));\n }\n else {\n this.activeLi.splice(args.index, 1);\n }\n };\n CheckBoxSelection.prototype.setReorder = function (args) {\n if (this.parent.enableSelectionOrder && !isNullOrUndefined(this.parent.value)) {\n var activeLiCount = this.parent.ulElement.querySelectorAll('li.e-active').length;\n var remLi = void 0;\n var ulEle = this.parent.createElement('ul', {\n className: 'e-list-parent e-ul e-reorder'\n });\n var removeEle = this.parent.createElement('div');\n if (activeLiCount > 0) {\n append(this.parent.ulElement.querySelectorAll('li.e-active'), ulEle);\n remLi = this.parent.ulElement.querySelectorAll('li.e-active');\n addClass(remLi, 'e-reorder-hide');\n prepend([ulEle], this.parent.list);\n }\n this.parent.focusAtFirstListItem();\n }\n };\n return CheckBoxSelection;\n}());\nexport { CheckBoxSelection };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * The Hyperlink dialog is used to insert or edit hyperlink at selection.\n */\n/* tslint:disable:max-line-length */\nvar HyperlinkDialog = /** @class */ (function () {\n /**\n * @private\n */\n function HyperlinkDialog(viewer) {\n var _this = this;\n this.displayText = '';\n this.navigationUrl = undefined;\n this.bookmarkDropdown = undefined;\n this.bookmarkCheckbox = undefined;\n this.bookmarks = [];\n /**\n * @private\n */\n this.onKeyUpOnUrlBox = function (event) {\n if (event.keyCode === 13) {\n if (_this.displayTextBox.value !== '' && _this.urlTextBox.value !== '') {\n _this.onInsertHyperlink();\n }\n return;\n }\n var selectedText = _this.owner.selection.text;\n var urlValue = _this.urlTextBox.value;\n if (urlValue.substring(0, 4).toLowerCase() === 'www.') {\n _this.urlTextBox.value = 'http://' + urlValue;\n }\n if (_this.displayText === '') {\n _this.displayTextBox.value = urlValue;\n }\n _this.enableOrDisableInsertButton();\n };\n /**\n * @private\n */\n this.onKeyUpOnDisplayBox = function () {\n _this.displayText = _this.displayTextBox.value;\n _this.enableOrDisableInsertButton();\n };\n /**\n * @private\n */\n this.onInsertButtonClick = function () {\n _this.onInsertHyperlink();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.clearValue();\n };\n /**\n * @private\n */\n this.loadHyperlinkDialog = function () {\n _this.owner.updateFocus();\n _this.bookmarks = [];\n for (var i = 0; i < _this.owner.bookmarks.keys.length; i++) {\n var bookmark = _this.owner.bookmarks.keys[i];\n if (bookmark.indexOf('_') !== 0) {\n _this.bookmarks.push(bookmark);\n }\n }\n var fieldBegin = _this.owner.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var format = undefined;\n // tslint:disable-next-line:max-line-length\n var fieldObj = _this.owner.selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, false, format);\n _this.displayText = fieldObj.displayText;\n _this.displayTextBox.disabled = fieldObj.isNestedField;\n }\n _this.displayTextBox.value = _this.displayText;\n var link = _this.owner.selection.getLinkText(fieldBegin);\n _this.urlTextBox.value = _this.navigationUrl = link;\n _this.owner.dialog.header = _this.localObj.getConstant('Edit Hyperlink');\n }\n else {\n _this.displayText = _this.owner.selection.getText(true);\n if (_this.displayText !== '') {\n if (_this.displayText.indexOf(String.fromCharCode(65532)) !== -1 ||\n _this.displayText.indexOf('\\r') !== -1 && (_this.displayText.lastIndexOf('\\r') !== -1 &&\n _this.displayText.slice(0, -1).indexOf('\\r') !== -1)) {\n _this.displayTextBox.value = '<>';\n _this.displayTextBox.disabled = true;\n }\n else {\n _this.displayTextBox.value = _this.displayText;\n }\n }\n }\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n _this.bookmarkCheckbox.checked = false;\n _this.bookmarkDropdown.dataSource = _this.owner.bookmarks.keys;\n _this.insertButton = document.getElementsByClassName('e-hyper-insert')[0];\n _this.enableOrDisableInsertButton();\n _this.urlTextBox.focus();\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n */\n this.closeHyperlinkDialog = function () {\n _this.clearValue();\n _this.owner.updateFocus();\n };\n /* tslint:disable:no-any */\n this.onUseBookmarkChange = function (args) {\n if (args.checked) {\n _this.bookmarkDiv.style.display = 'block';\n _this.bookmarkDropdown.dataSource = _this.bookmarks;\n _this.addressText.style.display = 'none';\n _this.urlTextBox.style.display = 'none';\n }\n else {\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n }\n };\n this.onBookmarkchange = function (args) {\n if (_this.bookmarkDropdown.value !== '') {\n _this.insertButton.disabled = false;\n }\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n HyperlinkDialog.prototype.getModuleName = function () {\n return 'HyperlinkDialog';\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.initHyperlinkDialog = function (localValue) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_hyperlink';\n this.target = createElement('div', { id: id, className: 'e-de-hyperlink' });\n var container = createElement('div');\n var displayText = createElement('div', { className: 'e-de-hyperlink-dlg-title', innerHTML: localValue.getConstant('Text to display') });\n this.displayTextBox = createElement('input', { id: this.owner.owner.containerId + '_display_text', className: 'e-input e-de-hyperlink-dlg-input' });\n this.displayTextBox.addEventListener('keyup', instance.onKeyUpOnDisplayBox);\n container.appendChild(displayText);\n container.appendChild(this.displayTextBox);\n this.addressText = createElement('div', { className: 'e-de-hyperlink-dlg-title', innerHTML: localValue.getConstant('Address') });\n this.urlTextBox = createElement('input', { id: this.owner.owner.containerId + '_url_text', className: 'e-input e-de-hyperlink-dlg-input', attrs: { autofocus: 'true' } });\n this.urlTextBox.addEventListener('input', instance.onKeyUpOnUrlBox);\n this.urlTextBox.addEventListener('keyup', instance.onKeyUpOnUrlBox);\n container.appendChild(this.addressText);\n container.appendChild(this.urlTextBox);\n this.bookmarkDiv = createElement('div', { styles: 'display:none;' });\n var bookmarkText = createElement('div', { className: 'e-de-hyperlink-dlg-title', innerHTML: localValue.getConstant('Bookmark') });\n var bookmarkTextElement = createElement('div', { className: 'e-de-hyperlink-dlg-bookmark' });\n // tslint:disable-next-line:max-line-length\n var bookmarkValue = createElement('input', { id: 'e-de-hyperlink-dlg-bookmark-value' });\n bookmarkTextElement.appendChild(bookmarkValue);\n // tslint:disable-next-line:max-line-length\n this.bookmarkDropdown = new DropDownList({ dataSource: [], change: this.onBookmarkchange, popupHeight: '230px', width: '230px', noRecordsTemplate: localValue.getConstant('No bookmarks found') });\n this.bookmarkDropdown.appendTo(bookmarkValue);\n this.bookmarkDiv.appendChild(bookmarkText);\n this.bookmarkDiv.appendChild(bookmarkTextElement);\n container.appendChild(this.bookmarkDiv);\n // tslint:disable-next-line:max-line-length\n var bookmarkCheckDiv = createElement('div', { className: 'e-de-hyperlink-bookmark-check e-de-hyperlink-dlg-title' });\n var bookmarkCheck = createElement('input', { attrs: { type: 'checkbox' }, id: this.target.id + '_bookmark', className: this.target.id + '_bookmarkcheck' });\n bookmarkCheckDiv.appendChild(bookmarkCheck);\n this.bookmarkCheckbox = new CheckBox({ label: localValue.getConstant('Use bookmarks'), change: this.onUseBookmarkChange });\n this.bookmarkCheckbox.appendTo(bookmarkCheck);\n container.appendChild(bookmarkCheckDiv);\n this.target.appendChild(container);\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.show = function () {\n this.localObj = new L10n('documenteditor', this.owner.owner.defaultLocale);\n this.localObj.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initHyperlinkDialog(this.localObj);\n }\n this.owner.dialog.header = this.localObj.getConstant('Insert Hyperlink');\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.buttons = [{\n click: this.onInsertButtonClick,\n buttonModel: { content: this.localObj.getConstant('Ok'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.beforeOpen = this.loadHyperlinkDialog;\n this.owner.dialog.close = this.closeHyperlinkDialog;\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.hide = function () {\n this.closeHyperlinkDialog();\n };\n HyperlinkDialog.prototype.enableOrDisableInsertButton = function () {\n if (!isNullOrUndefined(this.insertButton)) {\n // tslint:disable-next-line:max-line-length\n this.insertButton.disabled = (this.urlTextBox.value === '' || this.displayTextBox.value === '');\n }\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.onInsertHyperlink = function () {\n var displayText = this.displayTextBox.value.trim();\n var address = this.urlTextBox.value.trim();\n var isBookmark = false;\n if (!isNullOrUndefined(this.bookmarkDropdown.value) && this.bookmarkDropdown.value !== '') {\n address = this.bookmarkDropdown.value;\n isBookmark = true;\n }\n if (address === '') {\n this.owner.dialog.hide();\n return;\n }\n if (displayText === '' && address !== '') {\n displayText = address;\n }\n else {\n displayText = this.displayTextBox.value;\n }\n if (!isNullOrUndefined(this.navigationUrl)) {\n this.owner.owner.editorModule.editHyperlink(this.owner.selection, address, displayText, isBookmark);\n }\n else {\n var remove = this.owner.selection.text !== displayText && !this.displayTextBox.disabled;\n this.owner.owner.editorModule.insertHyperlink(address, displayText, remove, isBookmark);\n }\n this.owner.dialog.hide();\n this.navigationUrl = undefined;\n };\n /* tslint:enable:no-any */\n /**\n * @private\n */\n HyperlinkDialog.prototype.clearValue = function () {\n this.displayTextBox.value = '';\n this.urlTextBox.value = '';\n this.displayText = '';\n this.displayTextBox.disabled = false;\n this.bookmarks = [];\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.destroy = function () {\n if (this.displayTextBox) {\n this.displayTextBox.innerHTML = '';\n this.displayTextBox = undefined;\n }\n if (this.urlTextBox) {\n this.urlTextBox.parentElement.removeChild(this.urlTextBox);\n this.urlTextBox = undefined;\n }\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n this.target.innerHTML = '';\n this.target = undefined;\n }\n };\n return HyperlinkDialog;\n}());\nexport { HyperlinkDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { L10n, createElement, setCulture, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * The Table dialog is used to insert table at selection.\n */\nvar TableDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TableDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.keyUpInsertTable = function (event) {\n if (event.keyCode === 13) {\n if (_this.rowsCountBox.value !== '' && _this.columnsCountBox.value !== '') {\n _this.onInsertTableClick();\n }\n }\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.onInsertTableClick = function () {\n var rowCount = _this.rowValueTextBox.value;\n var columnCount = _this.columnValueTexBox.value;\n if (!(isNullOrUndefined(rowCount) && isNullOrUndefined(columnCount))) {\n _this.owner.owner.editor.insertTable(rowCount, columnCount);\n }\n _this.owner.dialog.hide();\n };\n this.owner = viewer;\n }\n TableDialog.prototype.getModuleName = function () {\n return 'TableDialog';\n };\n /**\n * @private\n */\n TableDialog.prototype.initTableDialog = function (localValue) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_Table';\n this.target = createElement('div', { id: id, className: 'e-de-insert-table' });\n var parentDiv = createElement('div');\n var columnContainer = createElement('div', {\n className: 'e-de-insert-table-dlg-sub-header', innerHTML: localValue.getConstant('Number of columns')\n });\n var columnValue = createElement('div', { className: 'e-de-insert-table-dlg-input' });\n this.columnsCountBox = createElement('input', {\n attrs: { type: 'text' }, id: this.owner.owner.containerId + '_column'\n });\n columnValue.appendChild(this.columnsCountBox);\n var rowContainer = createElement('div', {\n className: 'e-de-insert-table-dlg-sub-header', innerHTML: localValue.getConstant('Number of rows')\n });\n var rowValue = createElement('div', { className: 'e-de-insert-table-dlg-input' });\n this.rowsCountBox = createElement('input', {\n attrs: { type: 'text' }, id: this.owner.owner.containerId + 'row'\n });\n rowValue.appendChild(this.rowsCountBox);\n parentDiv.appendChild(columnContainer);\n parentDiv.appendChild(columnValue);\n parentDiv.appendChild(rowContainer);\n parentDiv.appendChild(rowValue);\n this.target.appendChild(parentDiv);\n this.columnsCountBox.addEventListener('keyup', instance.keyUpInsertTable);\n this.rowsCountBox.addEventListener('keyup', instance.keyUpInsertTable);\n this.rowValueTextBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n max: 32767,\n enablePersistence: false\n });\n this.rowValueTextBox.appendTo(this.rowsCountBox);\n this.columnValueTexBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n max: 63,\n enablePersistence: false\n });\n this.columnValueTexBox.appendTo(this.columnsCountBox);\n };\n /**\n * @private\n */\n TableDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTableDialog(localValue);\n }\n if (this.owner.selection.caret.style.display !== 'none') {\n this.owner.selection.caret.style.display = 'none';\n }\n this.owner.dialog.header = localValue.getConstant('Insert Table');\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.buttons = [{\n click: this.onInsertTableClick,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ok', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cancel' }\n }];\n this.rowValueTextBox.value = 2;\n this.columnValueTexBox.value = 2;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n TableDialog.prototype.destroy = function () {\n if (this.columnsCountBox) {\n if (this.columnsCountBox.parentElement) {\n this.columnsCountBox.parentElement.removeChild(this.columnsCountBox);\n }\n this.columnsCountBox = undefined;\n }\n if (this.rowsCountBox) {\n if (this.rowsCountBox.parentElement) {\n this.rowsCountBox.parentElement.removeChild(this.rowsCountBox);\n }\n this.rowsCountBox = undefined;\n }\n if (this.columnValueTexBox) {\n this.columnValueTexBox.destroy();\n this.columnValueTexBox = undefined;\n }\n if (this.rowValueTextBox) {\n this.rowValueTextBox.destroy();\n this.rowValueTextBox = undefined;\n }\n this.columnsCountBox = undefined;\n this.rowsCountBox = undefined;\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var i = 0; i < this.target.childNodes.length; i++) {\n this.target.removeChild(this.target.childNodes[i]);\n i--;\n }\n this.target = undefined;\n }\n };\n return TableDialog;\n}());\nexport { TableDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\n/**\n * The Bookmark dialog is used to add, navigate or delete bookmarks.\n */\nvar BookmarkDialog = /** @class */ (function () {\n /**\n * @private\n */\n function BookmarkDialog(viewer) {\n var _this = this;\n this.addBookmark = function () {\n _this.owner.owner.editorModule.insertBookmark(_this.textBoxInput.value);\n _this.owner.dialog.hide();\n };\n /* tslint:disable:no-any */\n this.selectHandler = function (args) {\n _this.textBoxInput.value = args.text;\n /* tslint:disable:no-any */\n var value = document.getElementById('bookmark_text_box');\n value.setSelectionRange(0, args.text.length);\n value.focus();\n };\n this.gotoBookmark = function () {\n _this.owner.selection.selectBookmark(_this.textBoxInput.value);\n };\n this.deleteBookmark = function () {\n _this.owner.owner.editorModule.deleteBookmark(_this.textBoxInput.value);\n _this.show();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n BookmarkDialog.prototype.getModuleName = function () {\n return 'BookmarkDialog';\n };\n /**\n * @private\n */\n BookmarkDialog.prototype.initBookmarkDialog = function (localValue, bookmarks) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_bookmark';\n this.target = createElement('div', { id: id, className: 'e-de-bookmark' });\n var headerValue = localValue.getConstant('Bookmark name') + ':';\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-bookmark-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-bookmark-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-bookmark-list' });\n commonDiv.appendChild(searchDiv);\n var textBoxDiv = createElement('div', { className: 'e-bookmark-textboxdiv' });\n searchDiv.appendChild(textBoxDiv);\n // tslint:disable-next-line:max-line-length\n this.textBoxInput = createElement('input', { className: 'e-input e-bookmark-textbox-input', id: 'bookmark_text_box' });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listviewDiv = createElement('div', { className: 'e-bookmark-listViewDiv', id: 'bookmark_listview' });\n searchDiv.appendChild(listviewDiv);\n var arts = this.owner.bookmarks.keys;\n this.listviewInstance = new ListView({\n dataSource: bookmarks,\n cssClass: 'e-bookmark-listview',\n });\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-bookmark-button' });\n commonDiv.appendChild(buttonDiv);\n var addbuttonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n buttonDiv.appendChild(addbuttonDiv);\n var addButtonElement = createElement('button', { innerHTML: 'Add', id: 'add' });\n addbuttonDiv.appendChild(addButtonElement);\n var addbutton = new Button({ cssClass: 'e-button-custom' });\n addbutton.appendTo(addButtonElement);\n addButtonElement.addEventListener('click', this.addBookmark);\n var deleteButtonDiv = createElement('div', { className: 'e-bookmark-deletebutton' });\n buttonDiv.appendChild(deleteButtonDiv);\n var deleteButtonElement = createElement('button', { innerHTML: 'Delete', id: 'delete' });\n deleteButtonDiv.appendChild(deleteButtonElement);\n var deletebutton = new Button({ cssClass: 'e-button-custom' });\n deletebutton.appendTo(deleteButtonElement);\n deleteButtonElement.addEventListener('click', this.deleteBookmark);\n var gotoButtonDiv = createElement('div', { className: 'e-bookmark-gotobutton' });\n buttonDiv.appendChild(gotoButtonDiv);\n var gotoButtonElement = createElement('button', { innerHTML: 'Go To', id: 'goto' });\n gotoButtonDiv.appendChild(gotoButtonElement);\n var gotobutton = new Button({ cssClass: 'e-button-custom' });\n gotobutton.appendTo(gotoButtonElement);\n gotoButtonElement.addEventListener('click', this.gotoBookmark);\n };\n /**\n * @private\n */\n BookmarkDialog.prototype.show = function () {\n var bookmarks = this.owner.getBookmarks();\n var localObj = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localObj.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n // if (!this.target) {\n this.initBookmarkDialog(localObj, bookmarks);\n //}\n this.owner.dialog.header = 'Bookmark';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.buttons = [{\n click: this.removeObjects.bind(this),\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n BookmarkDialog.prototype.removeObjects = function () {\n this.owner.dialog.hide();\n };\n /**\n * @private\n */\n BookmarkDialog.prototype.destroy = function () {\n if (this.textBoxInput) {\n this.textBoxInput.remove();\n this.textBoxInput = undefined;\n }\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n };\n return BookmarkDialog;\n}());\nexport { BookmarkDialog };\n","import { L10n, setCulture, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { ListView } from '@syncfusion/ej2-lists';\n/**\n * The Table of contents dialog is used to insert or edit table of contents at selection.\n */\nvar TableOfContentsDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TableOfContentsDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.loadTableofContentDialog = function () {\n _this.owner.updateFocus();\n _this.pageNumber.checked = true;\n _this.rightAlign.disabled = false;\n _this.rightAlign.checked = true;\n _this.tabLeader.enabled = true;\n _this.hyperlink.checked = true;\n _this.style.checked = true;\n _this.outline.checked = true;\n _this.outline.disabled = false;\n _this.showLevel.enabled = true;\n };\n /**\n * @private\n */\n this.closeTableOfContentDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /* tslint:disable:no-any */\n this.selectHandler = function (args) {\n _this.textBoxInput.value = args.text;\n /* tslint:disable:no-any */\n var value = document.getElementById('toclist');\n value.setSelectionRange(0, args.text.length);\n value.focus();\n };\n this.showStyleDialog = function () {\n if (!isNullOrUndefined(_this.owner.owner.styleDialogModule)) {\n _this.owner.owner.styleDialogModule.show(_this.textBoxInput.value);\n }\n };\n this.changeShowLevelValue = function (event) {\n var levels = event.value;\n var values = [];\n switch (levels) {\n case 1:\n values = ['1', null, null, null, null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 2:\n values = ['1', '2', null, null, null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 3:\n values = ['1', '2', '3', null, null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 4:\n values = ['1', '2', '3', '4', null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 5:\n values = ['1', '2', '3', '4', '5', null, null, null, null];\n _this.changeByValue(values);\n break;\n case 6:\n values = ['1', '2', '3', '4', '5', '6', null, null, null];\n _this.changeByValue(values);\n break;\n case 7:\n values = ['1', '2', '3', '4', '5', '6', '7', null, null];\n _this.changeByValue(values);\n break;\n case 8:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', null];\n _this.changeByValue(values);\n break;\n case 9:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];\n _this.changeByValue(values);\n break;\n }\n };\n this.changeByValue = function (headings) {\n _this.heading1.value = headings[0];\n _this.heading2.value = headings[1];\n _this.heading3.value = headings[2];\n _this.heading4.value = headings[3];\n _this.heading5.value = headings[4];\n _this.heading6.value = headings[5];\n _this.heading7.value = headings[6];\n _this.heading8.value = headings[7];\n _this.heading9.value = headings[8];\n };\n this.reset = function () {\n _this.showLevel.enabled = true;\n _this.showLevel.value = 3;\n _this.outline.disabled = false;\n _this.outline.checked = true;\n var values = ['1', '2', '3', null, null, null, null, null, null];\n _this.changeByValue(values);\n _this.normal.value = null;\n };\n this.changeStyle = function (args) {\n var headingValue = args.srcElement.value;\n var value = _this.getElementValue(args.srcElement);\n if (headingValue !== value && headingValue !== '') {\n _this.showLevel.enabled = false;\n }\n else {\n _this.showLevel.enabled = true;\n _this.checkLevel();\n }\n };\n this.changeHeadingStyle = function (args) {\n var headingValue = args.srcElement.value;\n if (headingValue === '') {\n _this.showLevel.enabled = true;\n }\n else {\n _this.showLevel.enabled = false;\n }\n if (_this.normal === args.srcElement) {\n _this.outline.checked = false;\n _this.outline.disabled = true;\n }\n };\n /**\n * @private\n */\n this.changePageNumberValue = function (args) {\n if (args.checked) {\n _this.rightAlign.checked = true;\n _this.rightAlign.disabled = false;\n _this.tabLeader.enabled = true;\n }\n else {\n _this.rightAlign.disabled = true;\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @private\n */\n this.changeRightAlignValue = function (args) {\n if (args.checked) {\n _this.tabLeader.enabled = true;\n }\n else {\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @private\n */\n this.changeStyleValue = function (args) {\n if (args.checked) {\n _this.heading1.disabled = false;\n _this.heading2.disabled = false;\n _this.heading3.disabled = false;\n _this.heading4.disabled = false;\n _this.heading5.disabled = false;\n _this.heading6.disabled = false;\n _this.heading7.disabled = false;\n _this.heading8.disabled = false;\n _this.heading9.disabled = false;\n _this.normal.disabled = false;\n }\n else {\n _this.heading1.disabled = true;\n _this.heading2.disabled = true;\n _this.heading3.disabled = true;\n _this.heading4.disabled = true;\n _this.heading5.disabled = true;\n _this.heading6.disabled = true;\n _this.heading7.disabled = true;\n _this.heading8.disabled = true;\n _this.heading9.disabled = true;\n _this.normal.disabled = true;\n }\n };\n /**\n * @private\n */\n this.applyTableOfContentProperties = function () {\n var tocSettings = {\n startLevel: 1,\n endLevel: _this.showLevel.value,\n includeHyperlink: _this.hyperlink.checked,\n includePageNumber: _this.pageNumber.checked,\n rightAlign: _this.rightAlign.checked,\n tabLeader: _this.tabLeader.value,\n includeOutlineLevels: _this.outline.checked\n };\n _this.applyLevelSetting(tocSettings);\n _this.owner.owner.editorModule.insertTableOfContents(tocSettings);\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.unWireEventsAndBindings = function () {\n _this.pageNumber.checked = false;\n _this.rightAlign.checked = false;\n _this.tabLeader.value = '';\n _this.hyperlink.checked = false;\n _this.style.checked = false;\n _this.outline.checked = false;\n _this.normal.value = '';\n };\n this.owner = viewer;\n }\n TableOfContentsDialog.prototype.getModuleName = function () {\n return 'TableOfContentsDialog';\n };\n /*tslint:disable max-func-body-length*/\n /**\n * @private\n */\n TableOfContentsDialog.prototype.initTableOfContentDialog = function (locale) {\n var instance = this;\n var ownerId = this.owner.owner.containerId;\n var id = ownerId + '_toc_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-toc-dlg-container' });\n this.owner.owner.element.appendChild(this.target);\n // tslint:disable-next-line:max-line-length\n var generalDiv = createElement('div', { id: 'general_div', className: 'e-de-toc-dlg-sub-container' });\n this.target.appendChild(generalDiv);\n // tslint:disable-next-line:max-line-length\n var genLabel = createElement('div', { id: ownerId + '_genLabel', className: 'e-de-toc-dlg-main-heading', styles: 'margin-bottom: 13px;', innerHTML: locale.getConstant('General') });\n generalDiv.appendChild(genLabel);\n // tslint:disable-next-line:max-line-length\n var leftGeneralDiv = createElement('div', { id: 'left_general', styles: 'float:left;position:relative;' });\n generalDiv.appendChild(leftGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var rightGeneralDiv = createElement('div', { styles: 'position:relative;', className: 'e-de-toc-dlg-right-general-div' });\n generalDiv.appendChild(rightGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var leftBottomGeneralDiv = createElement('div', { id: 'leftBottom_general', styles: 'float:left;position:absolute;top:210px;' });\n generalDiv.appendChild(leftBottomGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var rightBottomGeneralDiv = createElement('div', { className: 'e-de-toc-dlg-right-sub-container', styles: 'float:right;' });\n generalDiv.appendChild(rightBottomGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var pageNumberDiv = createElement('div', { id: 'pageNumber_div', className: 'e-de-toc-dlg-sub-container' });\n var pageNumber = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_pageNumber'\n });\n pageNumberDiv.appendChild(pageNumber);\n // tslint:disable-next-line:max-line-length\n var rightAlignDiv = createElement('div', { id: 'rightAlign_div', className: 'e-de-toc-dlg-sub-container' });\n var rightAlign = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_rightAlign'\n });\n rightAlignDiv.appendChild(rightAlign);\n // tslint:disable-next-line:max-line-length\n this.pageNumber = new CheckBox({ label: locale.getConstant('Show page numbers'), checked: true, change: this.changePageNumberValue });\n // tslint:disable-next-line:max-line-length\n this.rightAlign = new CheckBox({ label: locale.getConstant('Right align page numbers'), checked: true, change: this.changeRightAlignValue });\n this.pageNumber.appendTo(pageNumber);\n this.rightAlign.appendTo(rightAlign);\n var tabDiv = createElement('div', { id: 'tab_div', className: 'e-de-toc-dlg-tab-div' });\n // tslint:disable-next-line:max-line-length\n var tabLeaderLabelDiv = createElement('div', { id: 'tabLeaderLabel_div' });\n // tslint:disable-next-line:max-line-length\n var tabLeaderLabel = createElement('label', { id: ownerId + '_tabLeaderLabel', className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Tab leader') + ':' });\n tabLeaderLabelDiv.appendChild(tabLeaderLabel);\n var tabLeaderDiv = createElement('div', { id: 'tabLeader_div' });\n var tabLeader = createElement('select', {\n id: ownerId + '_tabLeader',\n innerHTML: ''\n });\n tabLeaderDiv.appendChild(tabLeader);\n tabDiv.appendChild(tabLeaderLabelDiv);\n tabDiv.appendChild(tabLeaderDiv);\n leftGeneralDiv.appendChild(pageNumberDiv);\n leftGeneralDiv.appendChild(rightAlignDiv);\n leftGeneralDiv.appendChild(tabDiv);\n this.tabLeader = new DropDownList({ width: 210 });\n this.tabLeader.appendTo(tabLeader);\n var hyperlink = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_hyperlink'\n });\n rightGeneralDiv.appendChild(hyperlink);\n this.hyperlink = new CheckBox({ label: locale.getConstant('Use hyperlinks instead of page numbers'), checked: true });\n this.hyperlink.appendTo(hyperlink);\n // tslint:disable-next-line:max-line-length\n var showDiv = createElement('div', { id: 'show_div', className: 'e-de-toc-dlg-style-label' });\n // tslint:disable-next-line:max-line-length\n var showLevelLabelDiv = createElement('div', { id: 'showLevelLabel_div', className: 'e-de-toc-dlg-show-level-div' });\n // tslint:disable-next-line:max-line-length\n var showLevelLabel = createElement('label', { id: ownerId + '_showLevelLabel', className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Show levels') + ':' });\n showLevelLabelDiv.appendChild(showLevelLabel);\n // tslint:disable-next-line:max-line-length\n var showLevelDiv = createElement('div', { id: 'showLevel_div', className: 'e-de-toc-dlg-showlevel-div' });\n // tslint:disable-next-line:max-line-length\n var showLevel = createElement('input', { id: ownerId + '_showLevel', attrs: { 'type': 'text' } });\n showLevelDiv.appendChild(showLevel);\n showDiv.appendChild(showLevelLabelDiv);\n showDiv.appendChild(showLevelDiv);\n rightGeneralDiv.appendChild(showDiv);\n this.showLevel = new NumericTextBox({ format: '#', value: 3, min: 1, max: 9, width: 210, change: this.changeShowLevelValue });\n this.showLevel.appendTo(showLevel);\n // tslint:disable-next-line:max-line-length\n var buildTableDiv = createElement('div', { id: 'buildTable_div', className: 'e-de-toc-dlg-sub-container' });\n // tslint:disable-next-line:max-line-length\n var buildTableLabel = createElement('div', { id: ownerId + '_buildTableLabel', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-build-table', styles: 'margin-bottom: 13px;', innerHTML: locale.getConstant('Build table of contents from') + ':' });\n leftBottomGeneralDiv.appendChild(buildTableDiv);\n leftBottomGeneralDiv.appendChild(buildTableLabel);\n var style = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_style',\n });\n leftBottomGeneralDiv.appendChild(style);\n this.style = new CheckBox({ label: locale.getConstant('Styles'), checked: true, change: this.changeStyleValue });\n this.style.appendTo(style);\n var table = createElement('TABLE', { styles: 'margin-top:3px;' });\n var tr1 = createElement('tr');\n var td1 = createElement('td', { styles: 'width:120px;padding-left:10px;' });\n var availableLabel = createElement('label', {\n // tslint:disable-next-line:max-line-length\n innerHTML: locale.getConstant('Available styles'), className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading', id: this.target.id + '_availableLabel'\n });\n td1.appendChild(availableLabel);\n var td2 = createElement('td');\n var tocLabel = createElement('label', {\n innerHTML: locale.getConstant('TOC level') + ':', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading',\n id: this.target.id + '_tocLabel'\n });\n td2.appendChild(tocLabel);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n table.appendChild(tr1);\n // tslint:disable-next-line:max-line-length\n var tableDiv = createElement('div', { id: 'table_div', className: 'e-de-toc-table-div' });\n var table1 = createElement('TABLE');\n var tr2 = createElement('tr');\n var td3 = createElement('td');\n var heading1Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 1',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading1Label'\n });\n td3.appendChild(heading1Label);\n var td4 = createElement('td');\n this.heading1 = createElement('input', { id: '_heading1', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading1.value = '1';\n this.heading1.addEventListener('keyup', this.changeStyle);\n td4.appendChild(this.heading1);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var heading2Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 2',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading2Label'\n });\n td5.appendChild(heading2Label);\n var td6 = createElement('td');\n this.heading2 = createElement('input', { id: '_heading2', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading2.value = '2';\n this.heading2.addEventListener('keyup', this.changeStyle);\n td6.appendChild(this.heading2);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n var tr4 = createElement('tr');\n var td7 = createElement('td');\n var heading3Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 3',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading3Label'\n });\n td7.appendChild(heading3Label);\n var td8 = createElement('td');\n this.heading3 = createElement('input', { id: '_heading3', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading3.value = '3';\n this.heading3.addEventListener('keyup', this.changeStyle);\n td8.appendChild(this.heading3);\n tr4.appendChild(td7);\n tr4.appendChild(td8);\n var tr5 = createElement('tr');\n var td9 = createElement('td');\n var heading4Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 4',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading4Label'\n });\n td9.appendChild(heading4Label);\n var td10 = createElement('td');\n this.heading4 = createElement('input', { id: '_heading4', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading4.addEventListener('keyup', this.changeStyle);\n td10.appendChild(this.heading4);\n tr5.appendChild(td9);\n tr5.appendChild(td10);\n var tr6 = createElement('tr');\n var td11 = createElement('td');\n var heading5Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 5',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading5Label'\n });\n td11.appendChild(heading5Label);\n var td12 = createElement('td');\n this.heading5 = createElement('input', { id: '_heading5', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading5.addEventListener('keyup', this.changeStyle);\n td12.appendChild(this.heading5);\n tr6.appendChild(td11);\n tr6.appendChild(td12);\n var tr7 = createElement('tr');\n var td13 = createElement('td');\n var heading6Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 6',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading6Label'\n });\n td13.appendChild(heading6Label);\n var td14 = createElement('td');\n this.heading6 = createElement('input', { id: '_heading6', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading6.addEventListener('keyup', this.changeStyle);\n td14.appendChild(this.heading6);\n tr7.appendChild(td13);\n tr7.appendChild(td14);\n var tr8 = createElement('tr');\n var td15 = createElement('td');\n var heading7Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 7',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading7Label'\n });\n td15.appendChild(heading7Label);\n var td16 = createElement('td');\n this.heading7 = createElement('input', { id: '_heading7', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading7.addEventListener('keyup', this.changeStyle);\n td16.appendChild(this.heading7);\n tr8.appendChild(td15);\n tr8.appendChild(td16);\n var tr9 = createElement('tr');\n var td17 = createElement('td');\n var heading8Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 8',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading8Label'\n });\n td17.appendChild(heading8Label);\n var td18 = createElement('td');\n this.heading8 = createElement('input', { id: '_heading8', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading8.addEventListener('keyup', this.changeStyle);\n td18.appendChild(this.heading8);\n tr9.appendChild(td17);\n tr9.appendChild(td18);\n var tr10 = createElement('tr');\n var td19 = createElement('td');\n var heading9Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 9',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading9Label'\n });\n td19.appendChild(heading9Label);\n var td20 = createElement('td');\n this.heading9 = createElement('input', { id: '_heading9', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading9.addEventListener('keyup', this.changeStyle);\n td20.appendChild(this.heading9);\n tr10.appendChild(td19);\n tr10.appendChild(td20);\n var tr12 = createElement('tr');\n var td23 = createElement('td');\n var normalLabel = createElement('label', {\n innerHTML: locale.getConstant('Normal'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_normalLabel'\n });\n td23.appendChild(normalLabel);\n var td24 = createElement('td');\n this.normal = createElement('input', { id: '_normal', className: 'e-input e-de-toc-dlg-toc-level' });\n this.normal.addEventListener('keyup', this.changeHeadingStyle);\n td24.appendChild(this.normal);\n tr12.appendChild(td23);\n tr12.appendChild(td24);\n table1.appendChild(tr2);\n table1.appendChild(tr3);\n table1.appendChild(tr4);\n table1.appendChild(tr5);\n table1.appendChild(tr6);\n table1.appendChild(tr7);\n table1.appendChild(tr8);\n table1.appendChild(tr9);\n table1.appendChild(tr10);\n table1.appendChild(tr12);\n tableDiv.appendChild(table1);\n var stylesLevelDiv = createElement('div', { className: 'e-de-toc-styles-table-div' });\n stylesLevelDiv.appendChild(table);\n stylesLevelDiv.appendChild(tableDiv);\n leftBottomGeneralDiv.appendChild(stylesLevelDiv);\n //leftBottomGeneralDiv.appendChild(table); leftBottomGeneralDiv.appendChild(tableDiv);\n var fieldsDiv = createElement('div', { id: 'fields_div', styles: 'display: flex;' });\n leftBottomGeneralDiv.appendChild(fieldsDiv);\n var outDiv = createElement('div', { id: 'out_div' });\n // tslint:disable-next-line:max-line-length\n var outlineDiv = createElement('div', { id: 'outline_div', className: 'e-de-toc-dlg-sub-container e-de-toc-dlg-outline-levels' });\n var outline = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: '_outline'\n });\n outlineDiv.appendChild(outline);\n outDiv.appendChild(outlineDiv);\n fieldsDiv.appendChild(outDiv);\n this.outline = new CheckBox({ label: locale.getConstant('Outline levels'), checked: true });\n this.outline.appendTo(outline);\n var resetButtonDiv = createElement('div', { className: 'e-de-toc-reset-button' });\n fieldsDiv.appendChild(resetButtonDiv);\n var resetElement = createElement('button', { innerHTML: 'Reset', id: 'reset' });\n resetButtonDiv.appendChild(resetElement);\n var resetButton = new Button({ cssClass: 'e-btn e-flat' });\n resetButton.appendTo(resetElement);\n resetElement.addEventListener('click', this.reset);\n // tslint:disable-next-line:max-line-length\n var tocStylesDiv = createElement('div', { id: 'tocStyles_div', className: 'e-de-toc-dlg-sub-container' });\n // tslint:disable-next-line:max-line-length\n var tocStylesLabel = createElement('div', {\n id: ownerId + '_tocStylesLabel', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-styles',\n innerHTML: locale.getConstant('Styles') + ':'\n });\n rightBottomGeneralDiv.appendChild(tocStylesDiv);\n rightBottomGeneralDiv.appendChild(tocStylesLabel);\n var textBoxDiv = createElement('div', { className: 'e-de-toc-dlg-style-input' });\n rightBottomGeneralDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input', id: 'toclist' });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listViewDiv = createElement('div', { className: 'e-de-toc-list-view' });\n var styleValues = ['TOC 1', 'TOC 2', 'TOC 3', 'TOC 4', 'TOC 5', 'TOC 6', 'TOC 7', 'TOC 8', 'TOC 9'];\n this.listViewInstance = new ListView({ dataSource: styleValues, cssClass: 'e-toc-list-view' });\n this.listViewInstance.appendTo(listViewDiv);\n this.listViewInstance.addEventListener('select', this.selectHandler);\n rightBottomGeneralDiv.appendChild(listViewDiv);\n var modifyButtonDiv = createElement('div', { className: 'e-de-toc-modify-button' });\n rightBottomGeneralDiv.appendChild(modifyButtonDiv);\n var modifyElement = createElement('button', { innerHTML: 'Modify', id: 'modify' });\n modifyButtonDiv.appendChild(modifyElement);\n var modifyButton = new Button({ cssClass: 'e-btn e-flat' });\n modifyButton.appendTo(modifyElement);\n modifyElement.addEventListener('click', this.showStyleDialog);\n };\n /**\n * @private\n */\n TableOfContentsDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTableOfContentDialog(localValue);\n }\n this.owner.dialog.header = localValue.getConstant('Table of Contents');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadTableofContentDialog;\n this.owner.dialog.close = this.closeTableOfContentDialog;\n this.owner.dialog.buttons = [{\n click: this.applyTableOfContentProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-toc-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-toc-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n TableOfContentsDialog.prototype.checkLevel = function () {\n if (this.heading1.value !== '') {\n this.showLevel.value = 1;\n }\n if (this.heading2.value !== '') {\n this.showLevel.value = 2;\n }\n if (this.heading3.value !== '') {\n this.showLevel.value = 3;\n }\n if (this.heading4.value !== '') {\n this.showLevel.value = 4;\n }\n if (this.heading5.value !== '') {\n this.showLevel.value = 5;\n }\n if (this.heading6.value !== '') {\n this.showLevel.value = 6;\n }\n if (this.heading7.value !== '') {\n this.showLevel.value = 7;\n }\n if (this.heading8.value !== '') {\n this.showLevel.value = 8;\n }\n if (this.heading9.value !== '') {\n this.showLevel.value = 9;\n }\n };\n TableOfContentsDialog.prototype.getElementValue = function (element) {\n switch (element) {\n case this.heading1:\n return '1';\n case this.heading2:\n return '2';\n case this.heading3:\n return '3';\n case this.heading4:\n return '4';\n case this.heading5:\n return '5';\n case this.heading6:\n return '6';\n case this.heading7:\n return '7';\n case this.heading8:\n return '8';\n case this.heading9:\n return '9';\n default:\n return '1';\n }\n };\n TableOfContentsDialog.prototype.getHeadingLevel = function (index) {\n switch (index) {\n case 1:\n return parseInt(this.heading1.value);\n case 2:\n return parseInt(this.heading2.value);\n case 3:\n return parseInt(this.heading3.value);\n case 4:\n return parseInt(this.heading4.value);\n case 5:\n return parseInt(this.heading5.value);\n case 6:\n return parseInt(this.heading6.value);\n case 7:\n return parseInt(this.heading7.value);\n case 8:\n return parseInt(this.heading8.value);\n case 9:\n return parseInt(this.heading9.value);\n default:\n return 0;\n }\n };\n TableOfContentsDialog.prototype.applyLevelSetting = function (tocSettings) {\n tocSettings.levelSettings = {};\n var headingPrefix = 'Heading ';\n var newStartLevel = 0;\n var newEndLevel = 0;\n var isEndLevel = false;\n for (var i = 1; i <= tocSettings.endLevel; i++) {\n var outlineLevel = this.getHeadingLevel(i);\n if (i === outlineLevel) {\n if (newStartLevel === 0) {\n newStartLevel = i;\n isEndLevel = false;\n }\n if (!isEndLevel) {\n newEndLevel = i;\n }\n }\n else {\n isEndLevel = true;\n if (outlineLevel !== 0) {\n var headingStyle = headingPrefix + i.toString();\n tocSettings.levelSettings[headingStyle] = outlineLevel;\n }\n }\n }\n tocSettings.startLevel = newStartLevel;\n tocSettings.endLevel = newEndLevel;\n if (this.normal.value !== '') {\n tocSettings.levelSettings['Normal'] = +this.normal.value;\n }\n };\n /**\n * @private\n */\n TableOfContentsDialog.prototype.destroy = function () {\n if (this.pageNumber) {\n this.pageNumber.destroy();\n this.pageNumber = undefined;\n }\n if (this.rightAlign) {\n this.rightAlign.destroy();\n this.rightAlign = undefined;\n }\n if (this.tabLeader) {\n this.tabLeader.destroy();\n this.tabLeader = undefined;\n }\n if (this.showLevel) {\n this.showLevel.destroy();\n this.showLevel = undefined;\n }\n if (this.hyperlink) {\n this.hyperlink.destroy();\n this.hyperlink = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.outline) {\n this.outline.destroy();\n this.outline = undefined;\n }\n if (this.listViewInstance) {\n this.listViewInstance.destroy();\n this.listViewInstance = undefined;\n }\n this.heading1 = undefined;\n this.heading2 = undefined;\n this.heading3 = undefined;\n this.heading4 = undefined;\n this.heading5 = undefined;\n this.heading6 = undefined;\n this.heading7 = undefined;\n this.heading8 = undefined;\n this.heading9 = undefined;\n this.normal = undefined;\n this.textBoxInput = undefined;\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var count = 0; count < this.target.childNodes.length; count++) {\n this.target.removeChild(this.target.childNodes[count]);\n count--;\n }\n this.target = undefined;\n }\n };\n return TableOfContentsDialog;\n}());\nexport { TableOfContentsDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WSectionFormat } from './../../implementation/format/index';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * The Page setup dialog is used to modify formatting of selected sections.\n */\nvar PageSetupDialog = /** @class */ (function () {\n /**\n * @private\n */\n function PageSetupDialog(viewer) {\n var _this = this;\n this.isPortrait = true;\n /**\n * @private\n */\n this.loadPageSetupDialog = function () {\n _this.owner.updateFocus();\n var sectionFormat = _this.owner.selection.sectionFormat;\n _this.topMarginBox.value = sectionFormat.topMargin;\n _this.leftMarginBox.value = sectionFormat.leftMargin;\n _this.bottomMarginBox.value = sectionFormat.bottomMargin;\n _this.rightMarginBox.value = sectionFormat.rightMargin;\n _this.widthBox.value = sectionFormat.pageWidth;\n _this.heightBox.value = sectionFormat.pageHeight;\n _this.checkBox1.checked = sectionFormat.differentOddAndEvenPages;\n _this.checkBox2.checked = sectionFormat.differentFirstPage;\n _this.headerBox.value = sectionFormat.headerDistance;\n _this.footerBox.value = sectionFormat.footerDistance;\n if (_this.widthBox.value > _this.heightBox.value) {\n _this.landscape.checked = true;\n }\n else {\n _this.portrait.checked = true;\n }\n };\n /**\n * @private\n */\n this.closePageSetupDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n */\n this.keyUpInsertPageSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyPageSetupProperties();\n }\n };\n /**\n * @private\n */\n this.applyPageSetupProperties = function () {\n var sectionFormat = new WSectionFormat();\n sectionFormat.bottomMargin = _this.bottomMarginBox.value;\n sectionFormat.topMargin = _this.topMarginBox.value;\n sectionFormat.leftMargin = _this.leftMarginBox.value;\n sectionFormat.rightMargin = _this.rightMarginBox.value;\n sectionFormat.pageWidth = _this.widthBox.value;\n sectionFormat.pageHeight = _this.heightBox.value;\n sectionFormat.differentOddAndEvenPages = _this.checkBox1.checked;\n sectionFormat.differentFirstPage = _this.checkBox2.checked;\n sectionFormat.headerDistance = _this.headerBox.value;\n sectionFormat.footerDistance = _this.footerBox.value;\n _this.owner.owner.editorModule.onApplySectionFormat(undefined, sectionFormat);\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.changeByPaperSize = function (event) {\n var value = event.value;\n var sectionFormat = _this.owner.selection.sectionFormat;\n var width = sectionFormat.pageWidth;\n var height = sectionFormat.pageHeight;\n if (_this.owner.selection.sectionFormat.pageWidth > _this.owner.selection.sectionFormat.pageHeight || _this.landscape.checked) {\n _this.isPortrait = false;\n }\n else {\n _this.isPortrait = true;\n }\n if (value === 'letter') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 792;\n }\n else {\n _this.widthBox.value = 792;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'tabloid') {\n if (_this.isPortrait) {\n _this.widthBox.value = 792;\n _this.heightBox.value = 1224;\n }\n else {\n _this.widthBox.value = 1224;\n _this.heightBox.value = 792;\n }\n }\n else if (value === 'legal') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 1008;\n }\n else {\n _this.widthBox.value = 1008;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'statement') {\n if (_this.isPortrait) {\n _this.widthBox.value = 392;\n _this.heightBox.value = 612;\n }\n else {\n _this.widthBox.value = 612;\n _this.heightBox.value = 392;\n }\n }\n else if (value === 'executive') {\n if (_this.isPortrait) {\n _this.widthBox.value = 522;\n _this.heightBox.value = 756;\n }\n else {\n _this.widthBox.value = 756;\n _this.heightBox.value = 522;\n }\n }\n else if (value === 'a3') {\n if (_this.isPortrait) {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 1190.55;\n }\n else {\n _this.widthBox.value = 1190.55;\n _this.heightBox.value = 841.9;\n }\n }\n else if (value === 'a4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 841.9;\n }\n else {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 595.3;\n }\n }\n else if (value === 'a5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 419.55;\n _this.heightBox.value = 595.3;\n }\n else {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 419.55;\n }\n }\n else if (value === 'b4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 1031.8;\n }\n else {\n _this.widthBox.value = 1031.8;\n _this.heightBox.value = 728.5;\n }\n }\n else if (value === 'b5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 515.9;\n _this.heightBox.value = 728.5;\n }\n else {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 515.9;\n }\n }\n else if (value === 'customsize') {\n if (_this.isPortrait) {\n _this.widthBox.value = 515.9;\n _this.heightBox.value = 728.5;\n }\n else {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 515.9;\n }\n }\n };\n /**\n * @private\n */\n this.onPortrait = function (event) {\n _this.landscape.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width > height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n */\n this.onLandscape = function (event) {\n _this.portrait.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width < height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n */\n this.unWireEventsAndBindings = function () {\n _this.paperSize.value = undefined;\n _this.topMarginBox.value = undefined;\n _this.bottomMarginBox.value = undefined;\n _this.leftMarginBox.value = undefined;\n _this.rightMarginBox.value = undefined;\n _this.headerBox.value = undefined;\n _this.footerBox.value = undefined;\n _this.widthBox.value = undefined;\n _this.heightBox.value = undefined;\n _this.checkBox1.checked = false;\n _this.checkBox2.checked = false;\n _this.portrait.checked = false;\n _this.landscape.checked = false;\n };\n this.owner = viewer;\n }\n PageSetupDialog.prototype.getModuleName = function () {\n return 'PageSetupDialog';\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initPageSetupDialog = function (locale) {\n var id = this.owner.owner.containerId + '_pagesetup_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-pagesetup-dlg-container' });\n this.owner.owner.element.appendChild(this.target);\n var ejtabContainer = createElement('div', { id: this.target.id + '_MarginTabContainer' });\n this.target.appendChild(ejtabContainer);\n this.marginTab = createElement('div', {\n id: this.target.id + '_marginPropertyTab', styles: 'position: relative;width:400px;'\n });\n this.paperTab = createElement('div', {\n id: this.target.id + '_paperSizePropertyTab', styles: 'position: relative;width:400px;'\n });\n this.layoutTab = createElement('div', {\n id: this.target.id + '_CellPropertiesDialogTab', styles: 'position: relative;width:400px;'\n });\n // tslint:disable-next-line:max-line-length\n var ejtab = createElement('div', { id: this.target.id + '_PageSetupDialogTab', className: 'e-de-page-setup-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var marginHeader = createElement('div', {\n id: this.target.id + '_marginHeader', innerHTML: locale.getConstant('Margin')\n });\n var paperHeader = createElement('div', {\n id: this.target.id + '_paperHeader', innerHTML: locale.getConstant('Paper')\n });\n var layoutHeader = createElement('div', {\n id: this.target.id + '_layoutHeader', innerHTML: locale.getConstant('Layout')\n });\n headerContainer.appendChild(marginHeader);\n headerContainer.appendChild(paperHeader);\n headerContainer.appendChild(layoutHeader);\n var contentContainer = createElement('div', { className: 'e-content' });\n var marginContent = createElement('div', { id: this.target.id + '_marginContent' });\n var paperContent = createElement('div', { id: this.target.id + '_paperContent' });\n var layoutContent = createElement('div', { id: this.target.id + '_layoutContent' });\n marginContent.appendChild(this.marginTab);\n paperContent.appendChild(this.paperTab);\n layoutContent.appendChild(this.layoutTab);\n contentContainer.appendChild(marginContent);\n contentContainer.appendChild(paperContent);\n contentContainer.appendChild(layoutContent);\n ejtab.appendChild(headerContainer);\n ejtab.appendChild(contentContainer);\n ejtabContainer.appendChild(ejtab);\n this.initMarginProperties(this.marginTab, locale);\n this.initPaperSizeProperties(this.paperTab, locale);\n this.initLayoutProperties(this.layoutTab, locale);\n var tabObj = new Tab({}, ejtab);\n this.target.addEventListener('keyup', this.keyUpInsertPageSettings);\n var marginTabHeader = tabObj.element.getElementsByClassName('e-item e-toolbar-item')[0];\n var marginTabHeaderItem = marginTabHeader.getElementsByClassName('e-tab-wrap')[0];\n marginTabHeaderItem.classList.add('e-de-page-setup-dlg-margin-tab-header');\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initMarginProperties = function (element, locale) {\n var marginDiv = createElement('div', {\n id: 'margin_div',\n className: 'e-de-page-setup-dlg-sub-container', styles: 'height:135px;'\n });\n // tslint:disable-next-line:max-line-length\n var leftMarginDiv = createElement('div', { id: 'left_margin', className: 'e-de-page-setup-dlg-left-sub-container' });\n marginDiv.appendChild(leftMarginDiv);\n // tslint:disable-next-line:max-line-length\n var rightMarginDiv = createElement('div', { className: 'e-de-page-setup-dlg-right-sub-container' });\n marginDiv.appendChild(rightMarginDiv);\n var topLabel = createElement('label', {\n innerHTML: locale.getConstant('Top'), className: 'e-de-page-setup-dlg-sub-header',\n id: this.target.id + '_TopLabel', styles: 'padding-top:0px;width:190px;'\n });\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_Top'\n });\n var bottomBoxLabel = createElement('label', {\n innerHTML: locale.getConstant('Bottom'),\n className: 'e-de-page-setup-dlg-sub-title-header', id: this.target.id + '_bottomLabel'\n });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n id: this.target.id + '_bottom'\n });\n leftMarginDiv.appendChild(topLabel);\n leftMarginDiv.appendChild(topTextBox);\n leftMarginDiv.appendChild(bottomBoxLabel);\n leftMarginDiv.appendChild(bottomTextBox);\n var leftBoxLabel = createElement('label', {\n innerHTML: locale.getConstant('Left'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;width:190px;',\n id: this.target.id + '_leftLabel'\n });\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_left'\n });\n var rightLabel = createElement('label', {\n innerHTML: locale.getConstant('Right'),\n id: this.target.id + '_rightLabel', className: 'e-de-page-setup-dlg-sub-title-header'\n });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n id: this.target.id + '_right'\n });\n rightMarginDiv.appendChild(leftBoxLabel);\n rightMarginDiv.appendChild(leftTextBox);\n rightMarginDiv.appendChild(rightLabel);\n rightMarginDiv.appendChild(rightTextBox);\n element.appendChild(marginDiv);\n this.topMarginBox = new NumericTextBox({ value: 71, width: 170, decimals: 2 });\n this.topMarginBox.appendTo(topTextBox);\n this.leftMarginBox = new NumericTextBox({ value: 73, width: 170, decimals: 2 });\n this.leftMarginBox.appendTo(leftTextBox);\n this.bottomMarginBox = new NumericTextBox({ value: 72, width: 170, decimals: 2 });\n this.bottomMarginBox.appendTo(bottomTextBox);\n this.rightMarginBox = new NumericTextBox({ value: 74, width: 170, decimals: 2 });\n this.rightMarginBox.appendTo(rightTextBox);\n // tslint:disable-next-line:max-line-length\n var orientationDiv = createElement('div', { id: 'orientation_div', className: 'e-de-page-setup-dlg-sub-container-port' });\n // tslint:disable-next-line:max-line-length\n var orientationLabeldiv = createElement('div', { id: '_orientationLabelDiv', className: 'e-de-page-setup-dlg-sub-label', innerHTML: locale.getConstant('Orientation') });\n var orientationPropDiv = createElement('div', { id: '_orientationPropDiv', styles: 'display: flex;', className: 'e-de-page-setup-dlg-orientation-prop' });\n var portraitDiv = createElement('div', { id: '_portraitDiv', styles: 'padding-right: 30px;' });\n var portrait = createElement('input', {\n attrs: { 'type': 'radiobutton' }, id: this.target.id + '_portrait'\n });\n var landscapeDiv = createElement('div', { id: '_landscapeDiv' });\n var landscape = createElement('input', {\n attrs: { 'type': 'radiobutton' }, id: this.target.id + '_landscape'\n });\n portraitDiv.appendChild(portrait);\n landscapeDiv.appendChild(landscape);\n orientationPropDiv.appendChild(portraitDiv);\n orientationPropDiv.appendChild(landscapeDiv);\n orientationDiv.appendChild(orientationLabeldiv);\n orientationDiv.appendChild(orientationPropDiv);\n this.portrait = new RadioButton({ label: locale.getConstant('Portrait'), checked: true, change: this.onPortrait });\n this.landscape = new RadioButton({ label: locale.getConstant('Landscape'), change: this.onLandscape });\n this.portrait.appendTo(portrait);\n this.landscape.appendTo(landscape);\n element.appendChild(orientationDiv);\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initPaperSizeProperties = function (element, locale) {\n var sizeDiv = createElement('div', {\n id: 'size_div',\n className: 'e-de-page-setup-dlg-sub-size-container'\n });\n // tslint:disable-next-line:max-line-length\n var leftSizeDiv = createElement('div', { id: 'left_size', className: 'e-de-page-setup-dlg-left-sub-container' });\n sizeDiv.appendChild(leftSizeDiv);\n // tslint:disable-next-line:max-line-length\n var rightSizeDiv = createElement('div', { className: 'e-de-page-setup-dlg-right-sub-container' });\n sizeDiv.appendChild(rightSizeDiv);\n var widthLabel = createElement('label', {\n innerHTML: locale.getConstant('Width'), className: 'e-de-page-setup-dlg-sub-header',\n id: this.target.id + '_widthLabel', styles: 'padding-top:0px;width:190px;'\n });\n var widthTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_Width'\n });\n leftSizeDiv.appendChild(widthLabel);\n leftSizeDiv.appendChild(widthTextBox);\n var heightLabel = createElement('label', {\n innerHTML: locale.getConstant('Height'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;width:190px;',\n id: this.target.id + '_heightLabel'\n });\n var heightTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_height'\n });\n rightSizeDiv.appendChild(heightLabel);\n rightSizeDiv.appendChild(heightTextBox);\n element.appendChild(sizeDiv);\n this.widthBox = new NumericTextBox({ value: 612, width: 170, decimals: 2 });\n this.widthBox.appendTo(widthTextBox);\n this.heightBox = new NumericTextBox({ value: 792, width: 170, decimals: 2 });\n this.heightBox.appendTo(heightTextBox);\n // tslint:disable-next-line:max-line-length\n var paperSizeDiv = createElement('div', { id: '_paperSizeDiv', styles: 'height:37px;', className: 'e-de-page-setup-dlg-sub-container' });\n var paperSize = createElement('select', {\n id: this.target.id + '_papersize', styles: 'width:170px;padding-bottom: 20px;',\n innerHTML: ''\n });\n paperSizeDiv.appendChild(paperSize);\n this.paperSize = new DropDownList({ change: this.changeByPaperSize, width: '170px' });\n this.paperSize.appendTo(paperSize);\n element.appendChild(paperSizeDiv);\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initLayoutProperties = function (element, locale) {\n // tslint:disable-next-line:max-line-length\n var layoutDiv = createElement('div', { id: '_layoutDiv', className: 'e-de-page-setup-dlg-layout-sub-container', });\n // tslint:disable-next-line:max-line-length\n var firstPageDiv = createElement('div', { id: '_firstPageDiv', styles: 'height: 27px;', className: 'e-de-page-setup-dlg-first-page-prop' });\n var checkBox1 = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_oddoreven'\n });\n firstPageDiv.appendChild(checkBox1);\n // tslint:disable-next-line:max-line-length\n var oddOrEvenDiv = createElement('div', { id: '_oddOrEvenDiv', styles: 'height: 27px;', className: 'e-de-page-setup-dlg-odd-or-even-prop' });\n var checkBox2 = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_even'\n });\n oddOrEvenDiv.appendChild(checkBox2);\n layoutDiv.appendChild(firstPageDiv);\n layoutDiv.appendChild(oddOrEvenDiv);\n this.checkBox1 = new CheckBox({ label: locale.getConstant('Different odd and even') });\n this.checkBox2 = new CheckBox({ label: locale.getConstant('Different first page') });\n this.checkBox1.appendTo(checkBox1);\n this.checkBox2.appendTo(checkBox2);\n element.appendChild(layoutDiv);\n // tslint:disable-next-line:max-line-length\n var textLabelDiv = createElement('div', { id: '_textLabelDiv', className: 'e-de-page-setup-dlg-sub-label' });\n var textLabel = createElement('label', {\n innerHTML: locale.getConstant('From edge'), id: this.target.id + '_textLabel'\n });\n textLabelDiv.appendChild(textLabel);\n element.appendChild(textLabelDiv);\n // tslint:disable-next-line:max-line-length\n var propertyDiv = createElement('div', { id: '_headerFooeterPropDiv', className: 'e-de-page-setup-dlg-sub-container', styles: 'height: 65px;' });\n // tslint:disable-next-line:max-line-length\n var leftLayoutDiv = createElement('div', { id: '_leftLayoutDiv', className: 'e-de-page-setup-dlg-left-layout-container' });\n propertyDiv.appendChild(leftLayoutDiv);\n // tslint:disable-next-line:max-line-length\n var rightLayoutDiv = createElement('div', { className: 'e-de-page-setup-dlg-right-layout-container' });\n propertyDiv.appendChild(rightLayoutDiv);\n var headerLabel = createElement('label', {\n innerHTML: locale.getConstant('Header'), className: 'e-de-page-setup-dlg-sub-header',\n id: this.target.id + '_headerLabel', styles: 'padding-top:0px;width:190px;'\n });\n var headerBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_header'\n });\n leftLayoutDiv.appendChild(headerLabel);\n leftLayoutDiv.appendChild(headerBox);\n var footerLabel = createElement('label', {\n innerHTML: locale.getConstant('Footer'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;width:190px;',\n id: this.target.id + '_footerLabel'\n });\n var footerBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_footer'\n });\n rightLayoutDiv.appendChild(footerLabel);\n rightLayoutDiv.appendChild(footerBox);\n element.appendChild(propertyDiv);\n this.headerBox = new NumericTextBox({ value: 612, width: 170, decimals: 2 });\n this.headerBox.appendTo(headerBox);\n this.footerBox = new NumericTextBox({ value: 792, width: 170, decimals: 2 });\n this.footerBox.appendTo(footerBox);\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initPageSetupDialog(localValue);\n }\n this.owner.dialog.header = localValue.getConstant('Page Setup');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadPageSetupDialog;\n this.owner.dialog.close = this.closePageSetupDialog;\n this.owner.dialog.buttons = [{\n click: this.applyPageSetupProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-layout-ppty-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-layout-ppty-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.destroy = function () {\n if (this.topMarginBox) {\n this.topMarginBox.destroy();\n this.topMarginBox = undefined;\n }\n if (this.leftMarginBox) {\n this.leftMarginBox.destroy();\n this.leftMarginBox = undefined;\n }\n if (this.bottomMarginBox) {\n this.bottomMarginBox.destroy();\n this.bottomMarginBox = undefined;\n }\n if (this.rightMarginBox) {\n this.rightMarginBox.destroy();\n this.rightMarginBox = undefined;\n }\n if (this.headerBox) {\n this.headerBox.destroy();\n this.headerBox = undefined;\n }\n if (this.footerBox) {\n this.footerBox.destroy();\n this.footerBox = undefined;\n }\n if (this.widthBox) {\n this.widthBox.destroy();\n this.widthBox = undefined;\n }\n if (this.heightBox) {\n this.heightBox.destroy();\n this.heightBox = undefined;\n }\n if (this.paperSize) {\n this.paperSize.destroy();\n this.paperSize = undefined;\n }\n if (this.checkBox1) {\n this.checkBox1.destroy();\n this.checkBox1 = undefined;\n }\n if (this.checkBox2) {\n this.checkBox2.destroy();\n this.checkBox2 = undefined;\n }\n if (this.portrait) {\n this.portrait.destroy();\n this.portrait = undefined;\n }\n if (this.landscape) {\n this.landscape.destroy();\n this.landscape = undefined;\n }\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[s]);\n s--;\n }\n this.target = undefined;\n }\n };\n return PageSetupDialog;\n}());\nexport { PageSetupDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { WParagraphFormat } from '../index';\n/**\n * The Paragraph dialog is used to modify formatting of selected paragraphs.\n */\nvar ParagraphDialog = /** @class */ (function () {\n /**\n * @private\n */\n function ParagraphDialog(viewer) {\n var _this = this;\n //paragraph Format properties\n this.leftIndent = undefined;\n this.rightIndent = undefined;\n this.beforeSpacing = undefined;\n this.afterSpacing = undefined;\n this.textAlignment = undefined;\n this.firstLineIndent = undefined;\n this.lineSpacingIn = undefined;\n this.lineSpacingType = undefined;\n this.paragraphFormat = undefined;\n /**\n * @private\n */\n this.keyUpParagraphSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyParagraphFormat();\n }\n };\n this.changeBeforeSpacing = function (event) {\n _this.beforeSpacing = event.value;\n };\n this.changeAfterSpacing = function (event) {\n _this.afterSpacing = event.value;\n };\n this.changeLeftIndent = function (event) {\n _this.leftIndent = event.value;\n };\n this.changeRightIndent = function (event) {\n _this.rightIndent = event.value;\n };\n this.changeLineSpacingValue = function (event) {\n _this.lineSpacingIn = event.value;\n };\n this.changeFirstLineIndent = function (event) {\n _this.firstLineIndent = event.value;\n };\n this.changeByTextAlignment = function (args) {\n _this.textAlignment = args.value;\n };\n /**\n * @private\n */\n this.changeByValue = function (event) {\n var paragraphFormat = _this.owner.selection.paragraphFormat;\n switch (_this.special.index) {\n case 0:\n if (paragraphFormat.firstLineIndent !== 0) {\n _this.byIn.value = 0;\n }\n break;\n case 1:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n _this.byIn.value = 0.1;\n }\n else if (paragraphFormat.firstLineIndent < 0) {\n _this.byIn.value = -(paragraphFormat.firstLineIndent);\n }\n break;\n case 2:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = -0.1;\n }\n else if (paragraphFormat.firstLineIndent > 0) {\n _this.byIn.value = -(paragraphFormat.firstLineIndent);\n }\n break;\n }\n };\n /**\n * @private\n */\n this.changeBySpacing = function (event) {\n if (isNullOrUndefined(_this.lineSpacing)) {\n return;\n }\n switch (_this.lineSpacing.index) {\n case 0:\n _this.lineSpacingType = 'AtLeast';\n _this.atIn.value = 12;\n break;\n case 1:\n _this.lineSpacingType = 'Exactly';\n _this.atIn.value = 12;\n break;\n case 2:\n _this.lineSpacingType = 'Multiple';\n _this.atIn.value = 1;\n break;\n }\n };\n /* tslint:enable */\n /**\n * @private\n */\n this.loadParagraphDialog = function () {\n var selectionFormat;\n if (_this.paragraphFormat) {\n selectionFormat = _this.paragraphFormat;\n }\n else {\n selectionFormat = _this.owner.selection.paragraphFormat;\n }\n var alignValue = _this.alignment.index;\n if (selectionFormat.textAlignment === 'Center') {\n alignValue = 0;\n }\n else if (selectionFormat.textAlignment === 'Left') {\n alignValue = 1;\n }\n else if (selectionFormat.textAlignment === 'Right') {\n alignValue = 2;\n }\n else {\n alignValue = 3;\n }\n _this.alignment.index = alignValue;\n _this.beforeSpacingIn.value = selectionFormat.beforeSpacing;\n _this.afterSpacingIn.value = selectionFormat.afterSpacing;\n _this.leftIndentIn.value = selectionFormat.leftIndent;\n _this.rightIndentIn.value = selectionFormat.rightIndent;\n _this.byIn.value = selectionFormat.firstLineIndent;\n var lineSpaceValue = _this.lineSpacing.index;\n if (selectionFormat.lineSpacingType === 'AtLeast') {\n lineSpaceValue = 0;\n }\n else if (selectionFormat.lineSpacingType === 'Exactly') {\n lineSpaceValue = 1;\n }\n else {\n lineSpaceValue = 2;\n }\n _this.lineSpacing.index = lineSpaceValue;\n _this.atIn.value = selectionFormat.lineSpacing;\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n */\n this.applyParagraphFormat = function () {\n var paraFormat;\n var isApply;\n if (_this.paragraphFormat) {\n paraFormat = _this.paragraphFormat;\n isApply = false;\n }\n else {\n paraFormat = new WParagraphFormat();\n isApply = true;\n }\n if (!isNullOrUndefined(_this.beforeSpacing)) {\n paraFormat.beforeSpacing = _this.beforeSpacing;\n }\n if (!isNullOrUndefined(_this.afterSpacing)) {\n paraFormat.afterSpacing = _this.afterSpacing;\n }\n if (!isNullOrUndefined(_this.lineSpacingType)) {\n paraFormat.lineSpacingType = _this.lineSpacingType;\n }\n if (!isNullOrUndefined(_this.leftIndent)) {\n paraFormat.leftIndent = _this.leftIndent;\n }\n if (!isNullOrUndefined(_this.rightIndent)) {\n paraFormat.rightIndent = _this.rightIndent;\n }\n if (!isNullOrUndefined(_this.lineSpacingIn)) {\n paraFormat.lineSpacing = _this.lineSpacingIn;\n }\n if (!isNullOrUndefined(_this.firstLineIndent)) {\n paraFormat.firstLineIndent = _this.firstLineIndent;\n }\n if (!isNullOrUndefined(_this.textAlignment)) {\n paraFormat.textAlignment = _this.textAlignment;\n }\n if (isApply) {\n _this.onParagraphFormat(paraFormat);\n }\n else {\n _this.owner.owner.styleDialogModule.updateParagraphFormat();\n }\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.closeParagraphDialog = function () {\n _this.leftIndent = undefined;\n _this.afterSpacing = undefined;\n _this.beforeSpacing = undefined;\n _this.firstLineIndent = undefined;\n _this.textAlignment = undefined;\n _this.rightIndent = undefined;\n _this.lineSpacingIn = undefined;\n _this.lineSpacingType = undefined;\n _this.paragraphFormat = undefined;\n _this.owner.dialog.hide();\n _this.owner.updateFocus();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n ParagraphDialog.prototype.getModuleName = function () {\n return 'ParagraphDialog';\n };\n /*tslint:disable max-func-body-length*/\n /**\n * @private\n */\n ParagraphDialog.prototype.initParagraphDialog = function (locale) {\n var instance = this;\n var ownerId = this.owner.owner.containerId;\n var id = ownerId + '_paragraph_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-para-dlg-container' });\n // tslint:disable-next-line:max-line-length\n var div = createElement('div', { id: 'property_div', styles: 'width:400px;' });\n var generalDiv = createElement('div', { id: 'genral_div', styles: 'width:200px;height:85px;', className: 'e-de-para-dlg-sub-container' });\n // tslint:disable-next-line:max-line-length\n var genLabel = createElement('div', { id: ownerId + '_genLabel', className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('General') });\n var alignLabel = createElement('div', { id: ownerId + '_AlignLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Alignment') });\n var alignment = createElement('select', {\n id: ownerId + '_Alignment',\n innerHTML: ''\n });\n generalDiv.appendChild(genLabel);\n generalDiv.appendChild(alignLabel);\n generalDiv.appendChild(alignment);\n // tslint:disable-next-line:max-line-length\n var indentionDiv = createElement('div', { id: 'indention_div', styles: 'width: 400px;height: 150px;', className: 'e-de-para-dlg-sub-container' });\n var leftIndentionDiv = createElement('div', { id: 'left_indention', styles: 'float:left;position:relative;' });\n indentionDiv.appendChild(leftIndentionDiv);\n // tslint:disable-next-line:max-line-length\n var rightIndentionDiv = createElement('div', { className: 'e-de-para-dlg-right-sub-container', styles: 'float:right;position:relative;' });\n indentionDiv.appendChild(rightIndentionDiv);\n // tslint:disable-next-line:max-line-length\n var spacingDiv = createElement('div', { id: 'spacing_div', styles: 'width: 400px;height: 150px;', className: 'e-de-para-dlg-sub-container' });\n var leftSpacingDiv = createElement('div', { id: 'left_spacing', styles: 'float:left;position:relative;' });\n spacingDiv.appendChild(leftSpacingDiv);\n // tslint:disable-next-line:max-line-length\n var rightSpacingDiv = createElement('div', { className: 'e-de-para-dlg-right-sub-container', styles: 'float:right;position:relative;' });\n spacingDiv.appendChild(rightSpacingDiv);\n // tslint:disable-next-line:max-line-length\n var indentLabel = createElement('div', {\n id: ownerId + '_indentLabel', className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Indentation')\n });\n var beforeTextLabel = createElement('div', {\n id: ownerId + '_bfTextLabel',\n className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Before text')\n });\n // tslint:disable-next-line:max-line-length\n var leftIndent = createElement('input', { id: ownerId + '_leftIndent', attrs: { 'type': 'text' } });\n var specialLabel = createElement('div', { id: ownerId + '_specialLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Special') });\n var special = createElement('select', {\n id: ownerId + '_special',\n innerHTML: ' '\n });\n leftIndentionDiv.appendChild(indentLabel);\n leftIndentionDiv.appendChild(beforeTextLabel);\n leftIndentionDiv.appendChild(leftIndent);\n leftIndentionDiv.appendChild(specialLabel);\n leftIndentionDiv.appendChild(special);\n // tslint:disable-next-line:max-line-length\n var afterTextLabel = createElement('div', { id: ownerId + '_afTextLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('After text') });\n var rightIndent = createElement('input', { id: ownerId + '_rightIndent', attrs: { 'type': 'text' } });\n // tslint:disable-next-line:max-line-length\n var byLabel = createElement('label', { id: ownerId + '_byLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('By') });\n var by = createElement('input', { id: ownerId + '_By', attrs: { 'type': 'text' } });\n rightIndentionDiv.appendChild(afterTextLabel);\n rightIndentionDiv.appendChild(rightIndent);\n rightIndentionDiv.appendChild(byLabel);\n rightIndentionDiv.appendChild(by);\n // tslint:disable-next-line:max-line-length\n var spaceLabel = createElement('div', { innerHTML: locale.getConstant('Spacing'), className: 'e-de-para-dlg-heading', id: ownerId + '_spaceLabel' });\n var beforeLabel = createElement('div', { className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Before'), id: ownerId + '_beforeLabel' });\n // tslint:disable-next-line:max-line-length\n var beforeSpacing = createElement('input', { id: ownerId + '_beforeSpacing', attrs: { 'type': 'text' } });\n var lineSpaceLabel = createElement('div', { id: ownerId + '_lineSpaceLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Line Spacing') });\n // tslint:disable-next-line:max-line-length\n var lineSpacing = createElement('select', {\n id: ownerId + '_lineSpacing', styles: 'width:180px;',\n innerHTML: ''\n });\n leftSpacingDiv.appendChild(spaceLabel);\n leftSpacingDiv.appendChild(beforeLabel);\n leftSpacingDiv.appendChild(beforeSpacing);\n leftSpacingDiv.appendChild(lineSpaceLabel);\n leftSpacingDiv.appendChild(lineSpacing);\n // tslint:disable-next-line:max-line-length\n var afterLabel = createElement('div', { innerHTML: locale.getConstant('After'), className: 'e-de-dlg-sub-header', id: ownerId + '_afterLabel' });\n var afterSpacing = createElement('input', { id: ownerId + '_afterSpacing', attrs: { 'type': 'text' } });\n // tslint:disable-next-line:max-line-length\n var atLabel = createElement('div', { innerHTML: locale.getConstant('At'), id: ownerId + '_atLabel', className: 'e-de-dlg-sub-header' });\n var lineSpacingAt = createElement('input', { id: ownerId + '_lineSpacingAt', attrs: { 'type': 'text' } });\n rightSpacingDiv.appendChild(afterLabel);\n rightSpacingDiv.appendChild(afterSpacing);\n rightSpacingDiv.appendChild(atLabel);\n rightSpacingDiv.appendChild(lineSpacingAt);\n div.appendChild(generalDiv);\n div.appendChild(indentionDiv);\n div.appendChild(spacingDiv);\n this.target.appendChild(div);\n this.leftIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, width: 180, enablePersistence: false, change: this.changeLeftIndent\n });\n this.leftIndentIn.appendTo(leftIndent);\n this.rightIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, width: 180, enablePersistence: false, change: this.changeRightIndent\n });\n this.rightIndentIn.appendTo(rightIndent);\n this.byIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, width: 180, enablePersistence: false, change: this.changeFirstLineIndent\n });\n this.byIn.appendTo(by);\n this.beforeSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, width: 180, step: 6, enablePersistence: false,\n change: this.changeBeforeSpacing\n });\n this.beforeSpacingIn.appendTo(beforeSpacing);\n this.afterSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, width: 180, step: 6, enablePersistence: false,\n change: this.changeAfterSpacing\n });\n this.afterSpacingIn.appendTo(afterSpacing);\n this.atIn = new NumericTextBox({\n format: 'n1', value: 0, min: 1, max: 1584, width: 180, step: 0.5, enablePersistence: false, change: this.changeLineSpacingValue\n });\n this.special = new DropDownList({ change: this.changeByValue, width: 180 });\n this.special.appendTo(special);\n this.lineSpacing = new DropDownList({ change: this.changeBySpacing, width: '180px' });\n this.lineSpacing.appendTo(lineSpacing);\n this.alignment = new DropDownList({ width: 180, change: this.changeByTextAlignment });\n this.alignment.appendTo(alignment);\n this.atIn.appendTo(lineSpacingAt);\n this.target.addEventListener('keyup', instance.keyUpParagraphSettings);\n };\n /**\n * Applies Paragraph Format\n * @param {WParagraphFormat} paragraphFormat\n * @private\n */\n ParagraphDialog.prototype.onParagraphFormat = function (paragraphFormat) {\n this.owner.owner.editorModule.initHistory('ParagraphFormat');\n var selection = this.owner.selection;\n this.owner.owner.isShiftingEnabled = true;\n if (this.owner.selection.isEmpty) {\n this.owner.owner.editorModule.applyParaFormatProperty(selection.start.paragraph, undefined, paragraphFormat, false);\n this.owner.owner.editor.layoutItemBlock(selection.start.paragraph, false);\n }\n else {\n this.owner.owner.editorModule.updateSelectionParagraphFormatting('ParagraphFormat', paragraphFormat, false);\n }\n this.owner.owner.editorModule.reLayout(selection);\n };\n /**\n * @private\n */\n ParagraphDialog.prototype.show = function (paragraphFormat) {\n if (paragraphFormat) {\n this.paragraphFormat = paragraphFormat;\n }\n var local = new L10n('documenteditor', this.owner.owner.defaultLocale);\n local.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initParagraphDialog(local);\n }\n this.loadParagraphDialog();\n this.owner.dialog.header = 'Paragraph';\n this.owner.dialog.content = this.target;\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.buttons = [{\n click: this.applyParagraphFormat,\n buttonModel: { content: local.getConstant('Ok'), cssClass: 'e-flat e-para-okay', isPrimary: true }\n },\n {\n click: this.closeParagraphDialog,\n buttonModel: { content: local.getConstant('Cancel'), cssClass: 'e-flat e-para-cancel' }\n }];\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n ParagraphDialog.prototype.destroy = function () {\n if (this.afterSpacingIn) {\n this.afterSpacingIn.destroy();\n this.afterSpacingIn = undefined;\n }\n if (this.beforeSpacingIn) {\n this.beforeSpacingIn.destroy();\n this.beforeSpacingIn = undefined;\n }\n if (this.leftIndentIn) {\n this.leftIndentIn.destroy();\n this.leftIndentIn = undefined;\n }\n if (this.rightIndentIn) {\n this.rightIndentIn.destroy();\n this.rightIndentIn = undefined;\n }\n if (this.byIn) {\n this.byIn.destroy();\n this.byIn = undefined;\n }\n if (this.atIn) {\n this.atIn.destroy();\n this.atIn = undefined;\n }\n if (this.alignment) {\n this.alignment.change = undefined;\n this.alignment.destroy();\n }\n this.alignment = undefined;\n if (this.lineSpacing) {\n this.lineSpacing.change = undefined;\n this.lineSpacing.destroy();\n }\n this.lineSpacing = undefined;\n if (this.special) {\n this.special.change = undefined;\n this.special.destroy();\n }\n this.special = undefined;\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var q = 0; q < this.target.childNodes.length; q++) {\n this.target.removeChild(this.target.childNodes[q]);\n q--;\n }\n this.target = undefined;\n }\n };\n return ParagraphDialog;\n}());\nexport { ParagraphDialog };\n","import { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * List view model implementation\n * @private\n */\nvar ListViewModel = /** @class */ (function () {\n /**\n * @private\n */\n function ListViewModel() {\n this.listIn = undefined;\n this.levelNumberIn = undefined;\n /**\n * @private\n */\n this.dialog = undefined;\n this.levelNumber = 0;\n }\n Object.defineProperty(ListViewModel.prototype, \"levelNumber\", {\n /**\n * @private\n */\n get: function () {\n return this.levelNumberIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.levelNumberIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"list\", {\n /**\n * @private\n */\n get: function () {\n return this.listIn;\n },\n /**\n * @private\n */\n set: function (value) {\n if (isNullOrUndefined(value)) {\n this.createList();\n }\n else {\n this.listIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevel\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.list) && this.levelNumber >= 0 && this.levelNumber < 9) {\n if (!isNullOrUndefined(this.dialog.owner.getAbstractListById(this.list.abstractListId))) {\n if (this.dialog.owner.getAbstractListById(this.list.abstractListId).levels.length <= this.levelNumber) {\n this.addListLevels();\n }\n return this.dialog.owner.getAbstractListById(this.list.abstractListId).levels[this.levelNumber];\n }\n else {\n this.dialog.owner.lists.push(this.list);\n var abstractList = this.list.abstractList;\n if (!this.list.abstractList) {\n abstractList = new WAbstractList();\n abstractList.abstractListId = this.list.abstractListId;\n }\n var listLevelAdv = new WListLevel(abstractList);\n listLevelAdv.characterFormat = new WCharacterFormat(listLevelAdv);\n listLevelAdv.paragraphFormat = new WParagraphFormat(listLevelAdv);\n listLevelAdv.paragraphFormat.leftIndent = (1) * 48;\n listLevelAdv.paragraphFormat.firstLineIndent = -24;\n listLevelAdv.numberFormat = '%' + (1).toString() + '.';\n listLevelAdv.listLevelPattern = 'UpRoman';\n listLevelAdv.followCharacter = 'Tab';\n listLevelAdv.startAt = 1;\n listLevelAdv.restartLevel = 1;\n this.dialog.owner.abstractLists.push(abstractList);\n return this.dialog.owner.getAbstractListById(this.list.abstractListId).levels[0];\n // return this.dialog.owner.getAbstractListById(this.list.abstractListId).levels.getItem(0);\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevelPattern\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.listLevelPattern;\n }\n return 'Arabic';\n },\n /**\n * @private\n */\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.listLevelPattern = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"followCharacter\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.followCharacter;\n }\n return 'None';\n },\n /**\n * @private\n */\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.followCharacter = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n ListViewModel.prototype.createList = function () {\n this.list = new WList();\n this.list.listId = this.dialog.owner.lists.length + 1;\n var abstractList = new WAbstractList();\n abstractList.abstractListId = this.dialog.owner.abstractLists.length + 1;\n this.list.abstractListId = abstractList.abstractListId;\n this.dialog.owner.lists.push(this.list);\n var listLevel = new WListLevel(abstractList);\n listLevel.paragraphFormat = new WParagraphFormat(listLevel);\n listLevel.paragraphFormat.leftIndent = 48;\n listLevel.paragraphFormat.firstLineIndent = -24;\n listLevel.characterFormat = new WCharacterFormat(listLevel);\n listLevel.numberFormat = '%1.';\n listLevel.startAt = 1;\n abstractList.levels.push(listLevel);\n this.dialog.owner.abstractLists.push(abstractList);\n };\n ListViewModel.prototype.addListLevels = function () {\n if (!isNullOrUndefined(this.list) && !isNullOrUndefined(this.list.abstractListId)) {\n for (var i = this.dialog.owner.getAbstractListById(this.list.abstractListId).levels.length; i < 9; i++) {\n var listLevelAdv = new WListLevel(this.dialog.owner.getAbstractListById(this.list.abstractListId));\n listLevelAdv.characterFormat = new WCharacterFormat(listLevelAdv);\n listLevelAdv.paragraphFormat = new WParagraphFormat(listLevelAdv);\n listLevelAdv.paragraphFormat.leftIndent = (i + 1) * 48;\n listLevelAdv.paragraphFormat.firstLineIndent = -24;\n listLevelAdv.numberFormat = '%' + (i + 1).toString() + '.';\n listLevelAdv.listLevelPattern = 'Arabic';\n listLevelAdv.followCharacter = 'Tab';\n listLevelAdv.startAt = 1;\n listLevelAdv.restartLevel = i;\n (this.dialog.owner).getAbstractListById(this.list.abstractListId).levels.push(listLevelAdv);\n }\n }\n };\n /**\n * @private\n */\n ListViewModel.prototype.destroy = function () {\n this.list = undefined;\n this.followCharacter = undefined;\n this.levelNumber = undefined;\n this.listLevelPattern = undefined;\n };\n return ListViewModel;\n}());\nexport { ListViewModel };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n// tslint:disable-next-line:max-line-length\nimport { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { ListViewModel } from './list-view-model';\n/**\n * The List dialog is used to create or modify lists.\n */\n/* tslint:disable:no-any */\nvar ListDialog = /** @class */ (function () {\n /**\n * @private\n */\n function ListDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.dialog = undefined;\n this.target = undefined;\n /**\n * @private\n */\n this.owner = undefined;\n this.viewModel = undefined;\n this.startAt = undefined;\n this.textIndent = undefined;\n this.alignedAt = undefined;\n this.listLevelElement = undefined;\n this.followNumberWith = undefined;\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n this.restartBy = undefined;\n /**\n * @private\n */\n this.isListCharacterFormat = false;\n this.onTextIndentChanged = function (args) {\n _this.viewModel.listLevel.paragraphFormat.leftIndent = args.value;\n };\n this.onStartValueChanged = function (args) {\n _this.viewModel.listLevel.startAt = args.value;\n };\n this.onListLevelValueChanged = function (args) {\n _this.viewModel.levelNumber = parseInt(args.value.slice(args.value.length - 1), 10) - 1;\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n if (isNullOrUndefined(_this.listLevel.characterFormat)) {\n _this.listLevel.characterFormat = new WCharacterFormat(_this.viewModel.listLevel);\n }\n if (!isNullOrUndefined(_this.listLevel.paragraphFormat)) {\n _this.listLevel.paragraphFormat = new WParagraphFormat(_this.viewModel.listLevel);\n }\n _this.updateDialogValues();\n _this.updateRestartLevelBox();\n };\n this.onNumberFormatChanged = function (args) {\n _this.viewModel.listLevel.numberFormat = args.target.value;\n };\n this.onAlignedAtValueChanged = function (args) {\n _this.viewModel.listLevel.paragraphFormat.firstLineIndent = args.value;\n };\n this.onFollowCharacterValueChanged = function (args) {\n if (args.value) {\n _this.viewModel.followCharacter = args.value;\n }\n };\n this.onLevelPatternValueChanged = function (args) {\n _this.viewModel.listLevelPattern = args.value;\n var numberFormat = '%' + (_this.levelNumber + 1).toString();\n // tslint:disable-next-line:max-line-length\n var numberFormatTextBox = document.getElementById(_this.owner.owner.containerId + '_numberFormat');\n if (_this.listLevel.listLevelPattern === 'Bullet') {\n _this.listLevel.numberFormat = '\\uf0b7';\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n _this.listLevel.characterFormat.fontFamily = 'Wingdings';\n }\n else {\n if (_this.listLevel.listLevelPattern === 'None') {\n _this.listLevel.numberFormat = '';\n }\n if (!_this.listLevel.numberFormat.match(numberFormat) && _this.listLevel.listLevelPattern !== 'None') {\n _this.listLevel.numberFormat = numberFormat + '.';\n }\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n }\n };\n this.loadListDialog = function () {\n _this.owner.updateFocus();\n if (isNullOrUndefined(_this.owner.owner)) {\n return;\n }\n _this.viewModel = new ListViewModel();\n _this.viewModel.dialog = _this;\n if (_this.owner.selection.paragraphFormat.listLevelNumber > 0) {\n _this.viewModel.levelNumber = _this.owner.selection.paragraphFormat.listLevelNumber;\n }\n _this.viewModel.list = _this.owner.selection.paragraphFormat.getList();\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n if (isNullOrUndefined(_this.listLevel.characterFormat)) {\n _this.listLevel.characterFormat = new WCharacterFormat(_this.viewModel.listLevel);\n }\n if (isNullOrUndefined(_this.listLevel.paragraphFormat)) {\n _this.listLevel.paragraphFormat = new WParagraphFormat(_this.viewModel.listLevel);\n }\n _this.updateDialogValues();\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n this.showFontDialog = function () {\n _this.owner.owner.fontDialogModule.showFontDialog(_this.listLevel.characterFormat);\n };\n this.onApplyList = function () {\n if (!isNullOrUndefined(_this.owner)) {\n _this.owner.selection.paragraphFormat.setList(_this.list);\n }\n _this.owner.dialog2.hide();\n _this.owner.updateFocus();\n };\n this.onCancelButtonClick = function () {\n _this.disposeBindingForListUI();\n _this.owner.dialog2.hide();\n _this.owner.updateFocus();\n _this.isListCharacterFormat = false;\n };\n this.closeListDialog = function () {\n _this.disposeBindingForListUI();\n _this.owner.updateFocus();\n _this.isListCharacterFormat = false;\n };\n this.owner = viewer;\n this.viewModel = new ListViewModel();\n }\n Object.defineProperty(ListDialog.prototype, \"listLevel\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.listLevel;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"list\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.list;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"levelNumber\", {\n /**\n * @private\n */\n get: function () {\n if (this.listLevel.ownerBase instanceof WLevelOverride) {\n return this.listLevel.ownerBase.levelNumber;\n // tslint:disable-next-line:max-line-length\n }\n else if (this.listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(this.listLevel.ownerBase.levels)) {\n return this.listLevel.ownerBase.levels.indexOf(this.listLevel);\n }\n else {\n return -1;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ListDialog.prototype.getModuleName = function () {\n return 'ListDialog';\n };\n /**\n * @private\n */\n ListDialog.prototype.showListDialog = function () {\n var locale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n locale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initListDialog(locale);\n }\n this.isListCharacterFormat = true;\n this.owner.dialog2.header = locale.getConstant('Define new Multilevel list');\n this.owner.dialog2.height = 'auto';\n this.owner.dialog2.width = 'auto';\n this.owner.dialog2.content = this.target;\n this.owner.dialog2.buttons = [{\n click: this.showFontDialog,\n buttonModel: { content: locale.getConstant('Font'), cssClass: 'e-flat e-list-dlg-font e-font' }\n }, {\n click: this.onApplyList,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-list-dlg', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-list-dlg' }\n }];\n this.owner.dialog2.dataBind();\n this.owner.dialog2.beforeOpen = this.loadListDialog;\n this.owner.dialog2.close = this.closeListDialog;\n this.owner.dialog2.position = { X: 'center', Y: 'top' };\n this.owner.dialog2.show();\n };\n /**\n * Shows the table properties dialog\n * @private\n */\n ListDialog.prototype.initListDialog = function (locale) {\n var instance = this;\n var containerId = this.owner.owner.containerId;\n var id = containerId + '_insert_list';\n this.target = createElement('div', { id: id, className: 'e-de-list-dlg' });\n this.owner.owner.element.appendChild(this.target);\n // tslint:disable-next-line:max-line-length\n var listLevelDiv = createElement('div', { innerHTML: '' });\n this.target.appendChild(listLevelDiv);\n var div = createElement('div');\n // tslint:disable-next-line:max-line-length\n var numberStyleDiv = createElement('div', { innerHTML: '
    ' });\n div.appendChild(numberStyleDiv);\n // tslint:disable-next-line:max-line-length\n var numberFormatDiv = createElement('div', { className: 'e-de-list-dlg-subdiv', innerHTML: '
    ' });\n div.appendChild(numberFormatDiv);\n this.target.appendChild(div);\n // tslint:disable-next-line:max-line-length\n var indentsDiv = createElement('div', { innerHTML: '
    ', });\n this.target.appendChild(indentsDiv);\n var startAtTextBox = document.getElementById(containerId + '_startAt');\n var textIndentAtTextBox = document.getElementById(containerId + '_textIndent');\n var alignedAtTextBox = document.getElementById(containerId + '_alignedAt');\n this.startAt = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 50,\n width: '180px',\n enablePersistence: false,\n });\n this.startAt.addEventListener('change', instance.onStartValueChanged);\n this.startAt.appendTo(startAtTextBox);\n this.textIndent = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 1584,\n width: '180px',\n step: 4,\n enablePersistence: false\n });\n this.textIndent.addEventListener('change', instance.onTextIndentChanged);\n this.textIndent.appendTo(textIndentAtTextBox);\n this.alignedAt = new NumericTextBox({\n format: '#',\n max: 1584,\n step: 6,\n width: '180px',\n enablePersistence: false\n });\n this.alignedAt.addEventListener('change', instance.onAlignedAtValueChanged);\n this.alignedAt.appendTo(alignedAtTextBox);\n var listLevel = document.getElementById(containerId + '_listLevel');\n this.listLevelElement = new DropDownList({ popupHeight: '150px', width: '180px', change: instance.onListLevelValueChanged });\n this.listLevelElement.appendTo(listLevel);\n var followCharacterElement = document.getElementById(containerId + '_followCharacter');\n this.followNumberWith = new DropDownList({ popupHeight: '150px', width: '180px', change: instance.onFollowCharacterValueChanged });\n this.followNumberWith.appendTo(followCharacterElement);\n var numberStyleEle = document.getElementById(containerId + '_numberStyle');\n this.numberStyle = new DropDownList({ popupHeight: '150px', width: '180px', change: instance.onLevelPatternValueChanged });\n this.numberStyle.appendTo(numberStyleEle);\n this.numberFormat = document.getElementById(containerId + '_numberFormat');\n this.numberFormat.addEventListener('change', instance.onNumberFormatChanged);\n var restartElement = document.getElementById(containerId + '_restartBy');\n this.restartBy = new DropDownList({ popupHeight: '150px', width: '180px' });\n this.restartBy.appendTo(restartElement);\n var button = document.getElementById(containerId + '_list_info');\n this.formatInfoToolTip = new Tooltip({ width: 200 });\n // tslint:disable-next-line:max-line-length\n this.formatInfoToolTip.content = locale.getConstant('Number format tooltip information');\n this.formatInfoToolTip.position = 'RightTop';\n this.formatInfoToolTip.appendTo(button);\n };\n ListDialog.prototype.updateRestartLevelBox = function () {\n var containerId = this.owner.owner.containerId;\n var listLevel = document.getElementById(containerId + '_listLevel');\n var restartBy = document.getElementById(containerId + '_restartBy');\n for (var i = 0; i < restartBy.options.length; i) {\n restartBy.options.remove(i);\n }\n if (listLevel.selectedIndex === 0) {\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n else {\n for (var i = listLevel.selectedIndex; i > 0; i--) {\n var option_1 = document.createElement('option');\n option_1.value = 'Level ' + i;\n option_1.innerHTML = 'Level ' + i;\n restartBy.appendChild(option_1);\n }\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n restartBy.selectedIndex = 0;\n };\n ListDialog.prototype.listPatternConverter = function (listLevelPattern) {\n switch (listLevelPattern) {\n case 'Arabic': return 0;\n case 'UpRoman': return 1;\n case 'LowRoman': return 2;\n case 'UpLetter': return 3;\n case 'LowLetter': return 4;\n case 'Number': return 5;\n case 'LeadingZero': return 6;\n case 'Bullet': return 7;\n case 'Ordinal': return 8;\n case 'OrdinalText': return 9;\n case 'Special': return 10;\n case 'FarEast': return 11;\n default: return 12;\n }\n };\n ListDialog.prototype.followCharacterConverter = function (followCharacter) {\n switch (followCharacter) {\n case 'Tab':\n return 0;\n case 'Space':\n return 1;\n default:\n return 2;\n }\n };\n ListDialog.prototype.updateDialogValues = function () {\n // tslint:disable-next-line:max-line-length\n var restartByTextBox = document.getElementById(this.owner.owner.containerId + '_restartBy');\n this.startAt.value = this.viewModel.listLevel.startAt;\n this.textIndent.value = this.viewModel.listLevel.paragraphFormat.leftIndent;\n this.alignedAt.value = this.viewModel.listLevel.paragraphFormat.firstLineIndent;\n this.followNumberWith.index = this.followCharacterConverter(this.viewModel.followCharacter);\n this.numberFormat.value = this.viewModel.listLevel.numberFormat;\n this.numberStyle.index = this.listPatternConverter(this.viewModel.listLevelPattern);\n this.listLevelElement.index = this.viewModel.levelNumber;\n this.viewModel.levelNumber = this.viewModel.levelNumber;\n };\n ListDialog.prototype.disposeBindingForListUI = function () {\n this.followNumberWith.index = -1;\n this.numberFormat.value = ' ';\n this.numberStyle.index = -1;\n this.listLevelElement.index = -1;\n this.restartBy.index = -1;\n this.viewModel.destroy();\n };\n /**\n * @private\n */\n ListDialog.prototype.destroy = function () {\n if (this.alignedAt) {\n this.alignedAt.destroy();\n }\n this.alignedAt = undefined;\n this.dialog = undefined;\n if (this.followNumberWith) {\n this.followNumberWith.destroy();\n }\n this.followNumberWith = undefined;\n if (this.listLevelElement) {\n this.listLevelElement.destroy();\n }\n this.listLevelElement = undefined;\n if (this.textIndent) {\n this.textIndent.destroy();\n }\n this.textIndent = undefined;\n if (this.startAt) {\n this.startAt.destroy();\n }\n this.startAt = undefined;\n if (this.numberStyle) {\n this.numberStyle.destroy();\n }\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n if (this.restartBy) {\n this.restartBy.destroy();\n }\n this.restartBy = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var l = 0; l < this.target.childNodes.length; l++) {\n this.target.removeChild(this.target.childNodes[l]);\n l--;\n }\n this.target = undefined;\n }\n this.owner = undefined;\n this.viewModel = undefined;\n };\n return ListDialog;\n}());\nexport { ListDialog };\n/* tslint:enable:no-any */ \n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { WCharacterStyle, WParagraphStyle } from '../../implementation/format/style';\nimport { BulletsAndNumberingDialog } from './index';\nimport { WAbstractList } from '../list/abstract-list';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * The Style dialog is used to create or modify styles.\n */\nvar StyleDialog = /** @class */ (function () {\n /**\n * @private\n */\n function StyleDialog(viewer) {\n var _this = this;\n this.target = undefined;\n this.styleType = undefined;\n this.styleBasedOn = undefined;\n this.styleParagraph = undefined;\n this.onlyThisDocument = undefined;\n this.template = undefined;\n this.fontFamily = undefined;\n this.fontSize = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n /* tslint:disable-next-line:no-any */\n this.openDialog = function (args) {\n switch (args.item.id) {\n case 'style_font':\n _this.showFontDialog();\n break;\n case 'style_paragraph':\n _this.showParagraphDialog();\n break;\n case 'style_numbering':\n _this.showNumberingBulletDialog();\n break;\n }\n };\n this.setBoldProperty = function () {\n _this.characterFormat.bold = !_this.characterFormat.bold;\n _this.fontButtonClicked(undefined);\n };\n this.setItalicProperty = function () {\n _this.characterFormat.italic = !_this.characterFormat.italic;\n _this.fontButtonClicked(undefined);\n };\n this.setUnderlineProperty = function () {\n _this.characterFormat.underline = _this.characterFormat.underline === 'None' ? 'Single' : 'None';\n _this.fontButtonClicked(undefined);\n };\n /* tslint:disable-next-line:no-any */\n this.fontButtonClicked = function (args) {\n if (_this.characterFormat.bold) {\n if (!_this.bold.classList.contains('e-active')) {\n _this.bold.classList.add('e-active');\n }\n }\n else {\n if (_this.bold.classList.contains('e-active')) {\n _this.bold.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.italic) {\n if (!_this.italic.classList.contains('e-active')) {\n _this.italic.classList.add('e-active');\n }\n }\n else {\n if (_this.italic.classList.contains('e-active')) {\n _this.italic.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.underline !== undefined && _this.characterFormat.underline !== 'None') {\n if (!_this.underline.classList.contains('e-active')) {\n _this.underline.classList.add('e-active');\n _this.characterFormat.underline = 'Single';\n }\n }\n else {\n if (_this.underline.classList.contains('e-active')) {\n _this.underline.classList.remove('e-active');\n _this.characterFormat.underline = 'None';\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n this.fontSizeUpdate = function (args) {\n _this.characterFormat.fontSize = args.value;\n };\n /* tslint:disable-next-line:no-any */\n this.fontFamilyChanged = function (args) {\n _this.characterFormat.fontFamily = args.value;\n };\n /* tslint:disable-next-line:no-any */\n this.fontColorUpdate = function (args) {\n _this.characterFormat.fontColor = args.currentValue.rgba;\n };\n this.setLeftAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Left') {\n _this.paragraphFormat.textAlignment = 'Justify';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n _this.updateParagraphFormat();\n };\n this.setRightAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Right') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Right';\n }\n _this.updateParagraphFormat();\n };\n this.setCenterAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Center') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Center';\n }\n _this.updateParagraphFormat();\n };\n this.setJustifyAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Justify') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Justify';\n }\n _this.updateParagraphFormat();\n };\n this.increaseBeforeAfterSpacing = function () {\n _this.paragraphFormat.beforeSpacing += 6;\n _this.paragraphFormat.afterSpacing += 6;\n };\n this.decreaseBeforeAfterSpacing = function () {\n if (_this.paragraphFormat.beforeSpacing >= 6) {\n _this.paragraphFormat.beforeSpacing -= 6;\n }\n else {\n _this.paragraphFormat.beforeSpacing = 0;\n }\n if (_this.paragraphFormat.afterSpacing >= 6) {\n _this.paragraphFormat.afterSpacing -= 6;\n }\n else {\n _this.paragraphFormat.afterSpacing = 0;\n }\n };\n /**\n * @private\n */\n this.updateNextStyle = function (args) {\n var typedName = args.srcElement.value;\n if (_this.getTypeValue() === 'Paragraph' && !isNullOrUndefined(typedName) && typedName !== '' && !_this.isUserNextParaUpdated) {\n var styles = _this.owner.owner.viewer.styles.getStyleNames(_this.getTypeValue());\n if (_this.isEdit) {\n styles = styles.filter(function (e) { return e !== _this.editStyleName; });\n }\n styles.push(typedName);\n _this.styleParagraph.dataSource = styles;\n _this.styleParagraph.index = null;\n _this.styleParagraph.index = styles.indexOf(typedName);\n _this.styleParagraph.dataBind();\n }\n };\n /**\n * @private\n */\n this.updateOkButton = function () {\n var styleName = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0).value;\n _this.enableOrDisableOkButton();\n };\n /**\n * @private\n */\n /* tslint:disable-next-line:no-any */\n this.styleTypeChange = function (args) {\n if (args.isInteracted) {\n var type = void 0;\n if (args.value === 'Character') {\n _this.style = new WCharacterStyle();\n type = 'Character';\n }\n if (args.value === 'Paragraph' || args.value === 'Linked(Paragraph and Character)') {\n _this.style = new WParagraphStyle();\n type = 'Paragraph';\n }\n _this.toggleDisable();\n _this.updateStyleNames(type);\n }\n };\n /* tslint:disable-next-line:no-any */\n this.styleBasedOnChange = function (args) {\n //Based on change\n };\n /**\n * @private\n */\n /* tslint:disable-next-line:no-any */\n this.styleParagraphChange = function (args) {\n if (args.isInteracted) {\n _this.isUserNextParaUpdated = true;\n }\n //Next change\n };\n /**\n * @private\n */\n this.showFontDialog = function () {\n if (!isNullOrUndefined(_this.owner.owner.fontDialogModule)) {\n _this.owner.owner.showFontDialog(_this.characterFormat);\n }\n _this.updateCharacterFormat();\n };\n /**\n * @private\n */\n this.showParagraphDialog = function () {\n if (!isNullOrUndefined(_this.owner.owner.paragraphDialogModule)) {\n _this.owner.owner.showParagraphDialog(_this.paragraphFormat);\n }\n };\n /**\n * @private\n */\n this.showNumberingBulletDialog = function () {\n _this.numberingBulletDialog = new BulletsAndNumberingDialog(_this.owner.owner.viewer);\n if (_this.style instanceof WParagraphStyle && (!isNullOrUndefined(_this.style.paragraphFormat))) {\n // tslint:disable-next-line:max-line-length\n _this.numberingBulletDialog.showNumberBulletDialog(_this.style.paragraphFormat.listFormat, _this.abstractList);\n }\n };\n /**\n * @private\n */\n this.onOkButtonClick = function () {\n var styleName = _this.styleNameElement.value;\n if (styleName.length > 0) {\n var style = _this.owner.owner.viewer.styles.findByName(styleName);\n var name_1;\n if (!isNullOrUndefined(style)) {\n _this.style.type = _this.getTypeValue();\n _this.style.basedOn = _this.owner.owner.viewer.styles.findByName(_this.styleBasedOn.value);\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked(Paragraph and Character)') {\n _this.style.next = _this.owner.owner.viewer.styles.findByName(_this.styleParagraph.value);\n _this.style.characterFormat.mergeFormat(style.characterFormat);\n _this.style.paragraphFormat.mergeFormat(style.paragraphFormat);\n _this.updateList();\n // tslint:disable-next-line:max-line-length\n _this.style.link = (_this.styleType.value === 'Linked(Paragraph and Character)') ? _this.createLinkStyle(styleName, _this.isEdit) : undefined;\n }\n //Updating existing style implementation\n _this.style.name = style.name;\n name_1 = style.name;\n style = _this.style;\n _this.owner.owner.isShiftingEnabled = true;\n _this.owner.owner.editorModule.layoutWholeDocument();\n _this.owner.owner.isShiftingEnabled = false;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var basedOn = _this.owner.owner.viewer.styles.findByName(_this.styleBasedOn.value);\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked(Paragraph and Character)') {\n if (styleName === _this.styleParagraph.value) {\n _this.style.next = _this.style;\n }\n else {\n _this.style.next = _this.owner.owner.viewer.styles.findByName(_this.styleParagraph.value);\n }\n _this.updateList();\n }\n // tslint:disable-next-line:max-line-length\n _this.style.link = (_this.styleType.value === 'Linked(Paragraph and Character)') ? _this.createLinkStyle(styleName) : undefined;\n _this.style.type = _this.getTypeValue();\n _this.style.name = styleName;\n _this.style.basedOn = basedOn;\n /* tslint:disable-next-line:no-any */\n _this.owner.owner.viewer.styles.push(_this.style);\n name_1 = styleName;\n _this.owner.owner.editorModule.applyStyle(name_1);\n }\n _this.owner.owner.viewer.dialog2.hide();\n }\n else {\n throw new Error('Enter valid Style name');\n }\n if (_this.style) {\n //this.style.destroy();\n }\n };\n /* tslint:disable-next-line:no-any */\n this.loadStyleDialog = function (args) {\n _this.owner.owner.viewer.updateFocus();\n _this.isUserNextParaUpdated = false;\n /* tslint:disable-next-line:max-line-length */\n _this.styleNameElement = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0);\n _this.styleNameElement.value = null;\n if (!_this.isEdit) {\n _this.styleType.index = 0; //Set to paragraph \n }\n var name;\n if (_this.isEdit) {\n _this.styleNameElement.value = _this.editStyleName;\n name = _this.editStyleName;\n }\n /* tslint:disable-next-line:max-line-length */\n _this.okButton = _this.owner.dialog2.element.getElementsByClassName('e-flat e-style-okay').item(0);\n _this.enableOrDisableOkButton();\n _this.updateStyleNames(_this.getTypeValue(), name);\n _this.updateCharacterFormat(_this.style.characterFormat);\n _this.updateParagraphFormat(_this.style.paragraphFormat);\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n if (!_this.isEdit && _this.style) {\n _this.style.destroy();\n }\n _this.owner.owner.viewer.dialog2.hide();\n };\n /**\n * @private\n */\n this.closeStyleDialog = function () {\n _this.owner.owner.viewer.updateFocus();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n StyleDialog.prototype.getModuleName = function () {\n return 'StyleDialog';\n };\n /**\n * @private\n */\n //tslint:disable: max-func-body-length\n StyleDialog.prototype.initStyleDialog = function (localValue) {\n var instance = this;\n var id = this.owner.owner.containerId + '_style';\n this.target = createElement('div', { id: id, className: 'e-de-style-dialog' });\n var container = createElement('div');\n // tslint:disable-next-line:max-line-length\n var properties = createElement('div', { className: 'e-de-style-properties', innerHTML: localValue.getConstant('Properties') });\n container.appendChild(properties);\n var styleNameTypeDiv = createElement('div', { styles: 'display:flex', className: 'e-de-style-nametype-div' });\n container.appendChild(styleNameTypeDiv);\n var nameWholeDiv = createElement('div', { className: 'e-de-style-left-div' });\n styleNameTypeDiv.appendChild(nameWholeDiv);\n var name = createElement('div', { className: 'e-de-style-name', innerHTML: localValue.getConstant('Name') + ':' });\n nameWholeDiv.appendChild(name);\n // tslint:disable-next-line:max-line-length\n var nameValue = createElement('input', { id: this.owner.owner.containerId + '_style_name', styles: 'width:210px;', className: 'e-input e-de-style-dlg-name-input' });\n nameValue.addEventListener('keyup', this.updateOkButton);\n nameValue.addEventListener('input', this.updateOkButton);\n nameValue.addEventListener('blur', this.updateNextStyle);\n nameWholeDiv.appendChild(nameValue);\n var styleTypeWholeDiv = createElement('div');\n styleNameTypeDiv.appendChild(styleTypeWholeDiv);\n // tslint:disable-next-line:max-line-length\n var styleType = createElement('div', { className: 'e-de-style-styletype', innerHTML: localValue.getConstant('Style type') + ':' });\n styleTypeWholeDiv.appendChild(styleType);\n var styleTypeDivElement = createElement('div', { className: 'e-de-style-style-type-div' });\n var styleTypeValue = createElement('select', { id: 'e-de-style-style-type' });\n // tslint:disable-next-line:max-line-length\n styleTypeValue.innerHTML = ''; //';\n styleTypeDivElement.appendChild(styleTypeValue);\n this.styleType = new DropDownList({ change: this.styleTypeChange, popupHeight: '253px', width: '210px' });\n this.styleType.appendTo(styleTypeValue);\n styleTypeWholeDiv.appendChild(styleTypeDivElement);\n // tslint:disable-next-line:max-line-length\n var styleBasedParaDiv = createElement('div', { styles: 'display:flex', className: 'e-de-style-based-para-div' });\n container.appendChild(styleBasedParaDiv);\n var styleBasedOnWholeDiv = createElement('div', { className: 'e-de-style-left-div' });\n styleBasedParaDiv.appendChild(styleBasedOnWholeDiv);\n // tslint:disable-next-line:max-line-length\n var styleBasedOn = createElement('div', { className: 'e-de-style-style-based-on', innerHTML: localValue.getConstant('Style based on') + ':' });\n styleBasedOnWholeDiv.appendChild(styleBasedOn);\n var styleBasedOnDivElement = createElement('div', { className: 'e-de-style-style-based-on-div' });\n // tslint:disable-next-line:max-line-length\n var styleBasedOnValue = createElement('input', { id: 'e-de-style-style-based-on-value' });\n //styleBasedOnValue.innerHTML = '';\n styleBasedOnDivElement.appendChild(styleBasedOnValue);\n this.styleBasedOn = new DropDownList({ dataSource: [], select: this.styleBasedOnChange, popupHeight: '253px', width: '210px' });\n this.styleBasedOn.appendTo(styleBasedOnValue);\n styleBasedOnWholeDiv.appendChild(styleBasedOnDivElement);\n var styleParagraphWholeDiv = createElement('div', { className: 'e-de-style-left-div' });\n styleBasedParaDiv.appendChild(styleParagraphWholeDiv);\n // tslint:disable-next-line:max-line-length\n var styleParagraph = createElement('div', { className: 'e-de-style-style-paragraph', innerHTML: localValue.getConstant('Style for following paragraph') + ':' });\n styleParagraphWholeDiv.appendChild(styleParagraph);\n var styleParagraphDivElement = createElement('div', { className: 'e-de-style-style-paragraph-div' });\n // tslint:disable-next-line:max-line-length\n var styleParagraphValue = createElement('input', { id: 'e-de-style-style-paragraph-value' });\n // tslint:disable-next-line:max-line-length\n //styleParagraphValue.innerHTML = '';\n styleParagraphDivElement.appendChild(styleParagraphValue);\n this.styleParagraph = new DropDownList({ dataSource: [], select: this.styleParagraphChange, popupHeight: '253px', width: '210px' });\n this.styleParagraph.appendTo(styleParagraphValue);\n styleParagraphWholeDiv.appendChild(styleParagraphDivElement);\n // tslint:disable-next-line:max-line-length\n var formatting = createElement('div', { className: 'e-de-style-formatting', innerHTML: localValue.getConstant('Formatting') });\n container.appendChild(formatting);\n var optionsDiv = createElement('div', { className: 'e-de-style-options-div' });\n container.appendChild(optionsDiv);\n var fontOptionsDiv = createElement('div', { styles: 'display:flex;margin-bottom: 15px;' });\n optionsDiv.appendChild(fontOptionsDiv);\n this.createFontOptions(fontOptionsDiv);\n var paragraphOptionsDiv = createElement('div', { styles: 'display:flex', className: 'e-style-paragraph' });\n optionsDiv.appendChild(paragraphOptionsDiv);\n this.createParagraphOptions(paragraphOptionsDiv);\n // let radioOptionsDiv: HTMLElement = createElement('div', { styles: 'display:flex' });\n // container.appendChild(radioOptionsDiv);\n // let onlyThisDocumentDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // tslint:disable-next-line:max-line-length\n // let onlyThisDocument: HTMLInputElement = createElement('input', { className: 'e-de-style-only-this-doc', attrs: { type: 'radio' } }) as HTMLInputElement;\n // onlyThisDocumentDiv.appendChild(onlyThisDocument);\n // tslint:disable-next-line:max-line-length\n // this.onlyThisDocument = new RadioButton({ label: 'Only in this document', value: 'only in this document', checked: true, name: 'styles' });\n // this.onlyThisDocument.appendTo(onlyThisDocument);\n // radioOptionsDiv.appendChild(onlyThisDocumentDiv);\n // let templateDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // tslint:disable-next-line:max-line-length\n // let template: HTMLInputElement = createElement('input', { className: 'e-de-style-temp', attrs: { type: 'radio' } }) as HTMLInputElement;\n // templateDiv.appendChild(template);\n // this.template = new RadioButton({ label: 'Template', value: 'template', name: 'styles' });\n // this.template.appendTo(template);\n // radioOptionsDiv.appendChild(templateDiv);\n this.createFormatDropdown(container, localValue);\n this.target.appendChild(container);\n };\n StyleDialog.prototype.createFormatDropdown = function (parentDiv, localValue) {\n var _this = this;\n var formatBtn = createElement('button', { id: 'style_format_dropdown', innerHTML: localValue.getConstant('Format') });\n formatBtn.style.height = '35px';\n parentDiv.appendChild(formatBtn);\n var items = [{ text: localValue.getConstant('Font') + '..', id: 'style_font' },\n { text: localValue.getConstant('Paragraph') + '..', id: 'style_paragraph' },\n { text: localValue.getConstant('Numbering') + '..', id: 'style_numbering' }];\n var dropDownbtn = new DropDownButton({\n items: items, cssClass: 'e-de-style-format-dropdwn',\n beforeItemRender: function (args) {\n if (_this.styleType.value === 'Character') {\n if (args.item.text === 'Paragraph') {\n args.element.classList.add('e-disabled');\n }\n if (args.item.text === 'Numbering') {\n args.element.classList.add('e-disabled');\n }\n }\n else {\n if (args.item.text === 'Paragraph') {\n args.element.classList.remove('e-disabled');\n }\n if (args.item.text === 'Numbering') {\n args.element.classList.remove('e-disabled');\n }\n }\n }\n });\n dropDownbtn.appendTo(formatBtn);\n dropDownbtn.addEventListener('select', this.openDialog);\n };\n StyleDialog.prototype.createFontOptions = function (parentDiv) {\n var fontFamilyElement = createElement('select', { id: this.target.id + '_fontName' });\n fontFamilyElement.innerHTML = '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '';\n parentDiv.appendChild(fontFamilyElement);\n this.fontFamily = new ComboBox({\n width: '123px', popupWidth: '123px',\n cssClass: 'e-style-font-fmaily-right', change: this.fontFamilyChanged\n });\n this.fontFamily.showClearButton = false;\n this.fontFamily.appendTo(fontFamilyElement);\n var fontSizeElement = createElement('input');\n parentDiv.appendChild(fontSizeElement);\n var sizeDataSource = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72];\n this.fontSize = new ComboBox({\n dataSource: sizeDataSource, width: '73px', cssClass: 'e-style-font-fmaily-right',\n change: this.fontSizeUpdate\n });\n this.fontSize.showClearButton = false;\n this.fontSize.appendTo(fontSizeElement);\n var fontGroupButton = createElement('div', { className: 'e-de-style-font-group-button' });\n parentDiv.appendChild(fontGroupButton);\n // tslint:disable-next-line:max-line-length\n this.bold = this.createButtonElement(fontGroupButton, 'e-de-bold', 'e-de-style-bold-button-size', this.owner.owner.containerId + '_style_bold');\n this.bold.addEventListener('click', this.setBoldProperty);\n // tslint:disable-next-line:max-line-length\n this.italic = this.createButtonElement(fontGroupButton, 'e-de-italic', 'e-de-style-icon-button-size', this.owner.owner.containerId + '_style_italic');\n this.italic.addEventListener('click', this.setItalicProperty);\n // tslint:disable-next-line:max-line-length\n this.underline = this.createButtonElement(fontGroupButton, 'e-de-underline', 'e-de-style-icon-button-size', this.owner.owner.containerId + '_style_underline');\n this.underline.addEventListener('click', this.setUnderlineProperty);\n var fontColorElement = createElement('input', { attrs: { type: 'color' }, className: 'e-de-style-icon-button-size' });\n parentDiv.appendChild(fontColorElement);\n this.fontColor = new ColorPicker({ cssClass: 'e-de-style-font-color-picker', change: this.fontColorUpdate });\n this.fontColor.appendTo(fontColorElement);\n };\n StyleDialog.prototype.createParagraphOptions = function (parentDiv) {\n var _this = this;\n var alignmentDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(alignmentDiv);\n this.leftAlign = this.createButtonElement(alignmentDiv, 'e-de-align-left', 'e-de-style-icon-button-size');\n this.leftAlign.addEventListener('click', this.setLeftAlignment);\n this.centerAlign = this.createButtonElement(alignmentDiv, 'e-de-align-center', 'e-de-style-icon-button-size');\n this.centerAlign.addEventListener('click', this.setCenterAlignment);\n this.rightAlign = this.createButtonElement(alignmentDiv, 'e-de-align-right', 'e-de-style-icon-button-size');\n this.rightAlign.addEventListener('click', this.setRightAlignment);\n this.justify = this.createButtonElement(alignmentDiv, 'e-de-justify', 'e-de-style-icon-button-last-size');\n this.justify.addEventListener('click', this.setJustifyAlignment);\n var lineSpacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(lineSpacingDiv);\n this.singleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-single-spacing', 'e-de-style-icon-button-first-size');\n this.singleLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 1;\n _this.updateParagraphFormat();\n });\n // tslint:disable-next-line:max-line-length\n this.onePointFiveLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-one-point-five-spacing', 'e-de-style-icon-button-size');\n this.onePointFiveLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 1.5;\n _this.updateParagraphFormat();\n });\n this.doubleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-double-spacing', 'e-de-style-icon-button-last-size');\n this.doubleLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 2;\n _this.updateParagraphFormat();\n });\n var spacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(spacingDiv);\n var beforeSpacing = this.createButtonElement(spacingDiv, 'e-de-before-spacing', 'e-de-style-icon-button-first-size');\n var afterSpacing = this.createButtonElement(spacingDiv, 'e-de-after-spacing', 'e-de-style-icon-button-last-size');\n beforeSpacing.addEventListener('click', this.increaseBeforeAfterSpacing);\n afterSpacing.addEventListener('click', this.decreaseBeforeAfterSpacing);\n var indentingDiv = createElement('div', { className: 'e-de-style-paragraph-indent-group-button' });\n parentDiv.appendChild(indentingDiv);\n var decreaseIndent = this.createButtonElement(indentingDiv, 'e-de-indent', 'e-de-style-icon-button-first-size');\n decreaseIndent.addEventListener('click', function () {\n if (_this.paragraphFormat.leftIndent >= 36) {\n _this.paragraphFormat.leftIndent -= 36;\n }\n else {\n _this.paragraphFormat.leftIndent = 0;\n }\n });\n var increaseindent = this.createButtonElement(indentingDiv, 'e-de-outdent', 'e-de-style-icon-button-size');\n increaseindent.addEventListener('click', function () {\n _this.paragraphFormat.leftIndent += 36;\n });\n };\n StyleDialog.prototype.createButtonElement = function (parentDiv, iconCss, className, id) {\n var buttonElement = createElement('button');\n if (!isNullOrUndefined(id)) {\n buttonElement.id = id;\n }\n parentDiv.appendChild(buttonElement);\n var button = new Button({ iconCss: iconCss, cssClass: className });\n button.appendTo(buttonElement);\n return buttonElement;\n };\n StyleDialog.prototype.toggleDisable = function () {\n if (this.styleType.value === 'Character') {\n this.styleParagraph.enabled = false;\n // tslint:disable-next-line:max-line-length\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex;pointer-events:none;opacity:0.5');\n }\n else {\n this.styleParagraph.enabled = true;\n this.target.getElementsByClassName('e-style-paragraph').item(0).removeAttribute('style');\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex');\n }\n this.styleBasedOn.enabled = true;\n };\n /**\n * @private\n */\n StyleDialog.prototype.show = function (styleName, header) {\n var localObj = new L10n('documenteditor', this.owner.owner.defaultLocale);\n this.isEdit = (!isNullOrUndefined(styleName) && styleName.length > 0) ? true : false;\n this.editStyleName = styleName;\n this.abstractList = new WAbstractList();\n // tslint:disable-next-line:max-line-length\n var style = this.owner.owner.viewer.styles.findByName(styleName);\n this.style = !this.isEdit ? new WParagraphStyle() : style ? style : this.getStyle(styleName);\n localObj.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initStyleDialog(localObj);\n }\n if (isNullOrUndefined(header)) {\n header = localObj.getConstant('Create New Style');\n }\n this.owner.owner.viewer.dialog2.header = header;\n this.owner.owner.viewer.dialog2.height = 'auto';\n this.owner.owner.viewer.dialog2.width = 'auto';\n this.owner.owner.viewer.dialog2.content = this.target;\n this.owner.owner.viewer.dialog2.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-style-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-style-cancel' }\n }];\n this.toggleDisable();\n this.owner.owner.viewer.dialog2.dataBind();\n this.owner.owner.viewer.dialog2.beforeOpen = this.loadStyleDialog;\n this.owner.owner.viewer.dialog2.close = this.closeStyleDialog;\n this.owner.owner.viewer.dialog2.position = { X: 'center', Y: 'center' };\n this.owner.owner.viewer.dialog2.show();\n };\n StyleDialog.prototype.updateList = function () {\n var listId = this.style.paragraphFormat.listFormat.listId;\n if (listId > -1) {\n if (this.owner.owner.viewer.lists.filter(function (a) { return (a.listId === listId); }).length === 0) {\n this.owner.owner.viewer.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n else {\n this.owner.owner.viewer.lists = this.owner.owner.viewer.lists.filter(function (a) { return (a.listId !== listId); });\n this.owner.owner.viewer.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n }\n if (this.abstractList.abstractListId !== -1) {\n this.owner.owner.viewer.abstractLists.push(this.abstractList);\n }\n };\n StyleDialog.prototype.createLinkStyle = function (name, isEdit) {\n var charStyle;\n if (isEdit) {\n charStyle = this.owner.owner.viewer.styles.findByName((name + ' Char'), 'Character');\n }\n else {\n charStyle = new WCharacterStyle();\n }\n charStyle.type = 'Character';\n charStyle.name = name + ' Char';\n charStyle.characterFormat = this.style.characterFormat.cloneFormat();\n charStyle.basedOn = this.style.basedOn;\n if (!isEdit) {\n this.owner.owner.viewer.styles.push(charStyle);\n }\n return this.owner.owner.viewer.styles.findByName(charStyle.name, 'Character');\n };\n /**\n * @private\n */\n StyleDialog.prototype.updateCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat)) {\n this.characterFormat = characterFormat;\n }\n this.fontFamily.value = this.characterFormat.fontFamily;\n this.fontSize.value = this.characterFormat.fontSize;\n this.fontColor.value = this.characterFormat.fontColor;\n this.fontButtonClicked(undefined);\n };\n /**\n * @private\n */\n StyleDialog.prototype.updateParagraphFormat = function (paragraphFOrmat) {\n if (!isNullOrUndefined(paragraphFOrmat)) {\n this.paragraphFormat = paragraphFOrmat;\n }\n if (this.paragraphFormat.textAlignment === 'Left') {\n if (!this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.add('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Right') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (!this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.add('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Center') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (!this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.add('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Justify') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (!this.justify.classList.contains('e-active')) {\n this.justify.classList.add('e-active');\n }\n }\n if (this.paragraphFormat.lineSpacing === 1) {\n this.singleLineSpacing.classList.add('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.paragraphFormat.lineSpacing === 1.5) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.add('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.paragraphFormat.lineSpacing === 2) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.add('e-active');\n }\n else {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n };\n StyleDialog.prototype.enableOrDisableOkButton = function () {\n if (!isNullOrUndefined(this.okButton)) {\n this.okButton.disabled = (this.styleNameElement.value === '');\n }\n };\n StyleDialog.prototype.getTypeValue = function () {\n var type;\n if (this.styleType.value === 'Linked(Paragraph and Character)' || this.styleType.value === 'Paragraph') {\n return 'Paragraph';\n }\n else {\n return 'Character';\n }\n };\n StyleDialog.prototype.updateStyleNames = function (type, name) {\n var styles = this.owner.owner.viewer.styles.getStyleNames(type);\n this.styleParagraph.dataSource = styles;\n this.styleParagraph.index = null;\n if (name) {\n this.styleBasedOn.dataSource = styles.filter(function (e) { return e !== name; });\n this.styleBasedOn.index = null;\n var style = this.getStyle(name);\n if (style.basedOn instanceof String || isNullOrUndefined(style.basedOn)) {\n this.styleBasedOn.enabled = false;\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n this.styleBasedOn.index = styles.indexOf(style.basedOn.name) > -1 ? styles.indexOf(style.basedOn.name) : 0;\n }\n if (style.type === 'Paragraph') {\n if (!isNullOrUndefined(style.link)) {\n this.styleType.index = 2;\n }\n else {\n this.styleType.index = 0;\n }\n }\n else {\n this.styleType.index = 1;\n }\n if (!isNullOrUndefined(style.next)) {\n var nxtName = style.next.name;\n var index = 0;\n if (styles.indexOf(nxtName) > -1) {\n index = styles.indexOf(nxtName);\n }\n this.styleParagraph.index = index;\n this.isUserNextParaUpdated = (nxtName === name) ? false : true;\n }\n }\n else {\n this.styleBasedOn.dataSource = styles;\n this.styleBasedOn.index = null;\n var basedOnIndex = 0;\n if (this.owner.owner.selectionModule) {\n var styleName = void 0;\n if (type === 'Character') {\n styleName = this.owner.owner.selection.characterFormat.styleName;\n }\n else {\n styleName = this.owner.owner.selection.paragraphFormat.styleName;\n }\n basedOnIndex = styles.indexOf(styleName);\n }\n this.styleBasedOn.index = basedOnIndex;\n this.styleParagraph.index = 0;\n }\n if (this.isEdit) {\n this.styleType.enabled = false;\n }\n else {\n this.styleType.enabled = true;\n }\n this.styleBasedOn.dataBind();\n this.styleParagraph.dataBind();\n };\n StyleDialog.prototype.getStyle = function (styleName) {\n /* tslint:disable-next-line:max-line-length */\n if (isNullOrUndefined(this.owner.owner.viewer.styles.findByName(styleName))) {\n /* tslint:disable-next-line:max-line-length */\n this.owner.owner.editor.createStyle(this.owner.owner.viewer.preDefinedStyles.get(styleName));\n }\n return this.owner.owner.viewer.styles.findByName(styleName);\n };\n /**\n * @private\n */\n StyleDialog.prototype.destroy = function () {\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var n = 0; n < this.target.childNodes.length; n++) {\n this.target.removeChild(this.target.childNodes[n]);\n n--;\n }\n this.target = undefined;\n }\n if (this.styleType) {\n this.styleType.destroy();\n }\n this.styleType = undefined;\n if (this.styleBasedOn) {\n this.styleBasedOn.destroy();\n }\n this.styleBasedOn = undefined;\n if (this.styleParagraph) {\n this.styleParagraph.destroy();\n }\n this.styleParagraph = undefined;\n if (this.onlyThisDocument) {\n this.onlyThisDocument.destroy();\n }\n this.onlyThisDocument = undefined;\n if (this.template) {\n this.template.destroy();\n }\n this.template = undefined;\n if (this.style) {\n this.style = undefined;\n }\n if (this.abstractList) {\n this.abstractList = undefined;\n }\n if (this.numberingBulletDialog) {\n this.numberingBulletDialog.destroy();\n }\n this.numberingBulletDialog = undefined;\n };\n return StyleDialog;\n}());\nexport { StyleDialog };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WListFormat } from '../../implementation/format/list-format';\n/**\n * The Bullets and Numbering dialog is used to apply list format for a paragraph style.\n */\n/* tslint:disable:no-any */\nvar BulletsAndNumberingDialog = /** @class */ (function () {\n /**\n * @private\n */\n function BulletsAndNumberingDialog(layoutViewer) {\n var _this = this;\n this.isBullet = false;\n /**\n * @private\n */\n this.numberListClick = function (args) {\n _this.isBullet = false;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-de-list-numbered-none')) {\n _this.numberFormat = undefined;\n _this.listLevelPattern = undefined;\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpRoman';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-letter')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-letter-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-numbered-low-letter-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowRoman';\n }\n };\n /**\n * @private\n */\n this.bulletListClick = function (args) {\n _this.isBullet = true;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-bullet-none')) {\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n }\n else if (args.currentTarget.classList.contains('e-bullet-dot')) {\n _this.symbol = '\\uf0b7';\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-circle')) {\n _this.symbol = '\\uf06f' + '\\u0020';\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-square')) {\n _this.symbol = '\\uf0a7';\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-flower')) {\n _this.symbol = '\\uf076';\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-arrow')) {\n _this.symbol = '\\uf0d8';\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-tick')) {\n _this.symbol = '\\uf0fc';\n _this.fontFamily = 'Wingdings';\n }\n };\n /**\n * @private\n */\n this.loadNumberingBulletDialog = function () {\n //Load \n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.closeNumberingBulletDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.isBullet = false;\n _this.listLevelPattern = undefined;\n _this.numberFormat = undefined;\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n */\n this.onOkButtonClick = function () {\n if (_this.owner.owner.viewer.lists.length > 0) {\n _this.listFormat.list.listId = _this.owner.owner.viewer.lists[_this.owner.owner.viewer.lists.length - 1].listId + 1;\n _this.listFormat.listId = _this.listFormat.list.listId;\n }\n else {\n _this.listFormat.list.listId = 0;\n _this.listFormat.listId = 0;\n }\n if (_this.owner.owner.viewer.abstractLists.length > 0) {\n /* tslint:disable-next-line:max-line-length */\n _this.abstractList.abstractListId = _this.owner.owner.viewer.abstractLists[_this.owner.owner.viewer.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n _this.abstractList.abstractListId = 0;\n }\n _this.listFormat.list.abstractListId = _this.abstractList.abstractListId;\n var listLevel = new WListLevel(_this.abstractList);\n listLevel.listLevelPattern = !isNullOrUndefined(_this.listLevelPattern) ? _this.listLevelPattern : 'Bullet';\n listLevel.numberFormat = _this.isBullet ? _this.symbol : _this.numberFormat;\n if (listLevel.listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n listLevel.characterFormat.fontFamily = !isNullOrUndefined(_this.fontFamily) ? _this.fontFamily : 'Verdana';\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n _this.abstractList.levels.push(listLevel);\n _this.listFormat.listLevelNumber = 0;\n _this.listFormat.list.abstractList = _this.abstractList;\n _this.owner.dialog.hide();\n };\n this.owner = layoutViewer;\n }\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.getModuleName = function () {\n return 'BulletsAndNumberingDialog';\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.initNumberingBulletDialog = function (locale) {\n var instance = this;\n var id = this.owner.owner.containerId;\n this.target = createElement('div', { id: id + '_insertNumberBulletDialog', className: 'e-de-number-bullet-dlg' });\n var tabTarget = createElement('div', { id: id + '_tabNumberBulletDialog', className: 'e-de-tab-number-bullet-dlg' });\n this.target.appendChild(tabTarget);\n this.createNumberList(id);\n this.createBulletList(id);\n //Initialize Tab component\n var tabObj = new Tab({\n items: [\n {\n header: { 'text': locale.getConstant('Numbering') },\n /* tslint:disable-next-line:max-line-length */\n content: ('#' + id + '_Number'),\n },\n {\n header: { 'text': locale.getConstant('Bullets') },\n /* tslint:disable-next-line:max-line-length */\n content: ('#' + id + '_Bullet'),\n },\n ],\n heightAdjustMode: 'None',\n width: 272,\n });\n //Render initialized Tab component\n tabObj.appendTo(tabTarget);\n this.owner.owner.element.appendChild(this.target);\n tabObj.refresh();\n };\n BulletsAndNumberingDialog.prototype.createNumberList = function (id) {\n var numberListDiv = createElement('div', { className: 'e-de-style-numbered-list', id: id + '_Number' });\n numberListDiv.style.display = 'none';\n numberListDiv.style.height = '270px';\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;',\n id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n numberListDiv.appendChild(ulTag);\n var numberedNone = this.createNumberNoneListTag(ulTag);\n var numberedNumberDot = this.createNumberListTag(ulTag, '1.', '2.', '3.', 'e-de-list-numbered-number-dot');\n var numberedNumberBrace = this.createNumberListTag(ulTag, '1)', '2)', '3)', 'e-de-list-numbered-number-brace');\n var numberedUpRoman = this.createNumberListTag(ulTag, 'I.', 'II.', 'III.', 'e-de-list-numbered-up-roman');\n var numberedUpLettter = this.createNumberListTag(ulTag, 'A.', 'B.', 'C.', 'e-de-list-numbered-up-letter');\n var numberedLowLetterDot = this.createNumberListTag(ulTag, 'a.', 'b.', 'c.', 'e-de-numbered-low-letter-dot');\n var numberedLowLetterBrace = this.createNumberListTag(ulTag, 'a)', 'b)', 'c)', 'e-de-list-numbered-low-letter-brace');\n var numberedLowRoman = this.createNumberListTag(ulTag, 'i.', 'ii.', 'iii.', 'e-de-list-numbered-low-roman');\n numberedNone.addEventListener('click', this.numberListClick);\n numberedNumberDot.addEventListener('click', this.numberListClick);\n numberedNumberBrace.addEventListener('click', this.numberListClick);\n numberedUpRoman.addEventListener('click', this.numberListClick);\n numberedUpLettter.addEventListener('click', this.numberListClick);\n numberedLowLetterBrace.addEventListener('click', this.numberListClick);\n numberedLowLetterDot.addEventListener('click', this.numberListClick);\n numberedLowRoman.addEventListener('click', this.numberListClick);\n this.target.appendChild(numberListDiv);\n };\n BulletsAndNumberingDialog.prototype.createNumberListTag = function (ulTag, text1, text2, text3, className) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n /* tslint:disable-next-line:max-line-length */\n var innerHTML = '
    ' + text1 + '
    ' + text2 + '';\n innerHTML += '
    ' + text3 + '
    ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createNumberNoneListTag = function (ulTag) {\n var liTag = createElement('li', {\n styles: 'display:block',\n /* tslint:disable-next-line:max-line-length */\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size e-de-list-numbered-none'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
    None
    ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletListTag = function (ulTag, iconCss, className) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-bullet-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n /* tslint:disable-next-line:max-line-length */\n var liInnerDiv = createElement('div', { className: 'e-de-ui-bullet-list-header-presetmenu e-de-bullet-icon-size', id: 'e-de-ui-zlist0' });\n var liNextDiv = createElement('div', { className: iconCss });\n liInnerDiv.appendChild(liNextDiv);\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletList = function (id) {\n var bulletListDiv = createElement('div', { className: 'e-de-ui-bullet-list-header-presetmenu', id: id + '_Bullet' });\n bulletListDiv.style.display = 'none';\n bulletListDiv.style.height = '270px';\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;', id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n bulletListDiv.appendChild(ulTag);\n var bulletNone = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-none e-de-bullet-icons', 'e-bullet-none');\n var bulletDot = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-dot e-de-bullet-icons', 'e-bullet-dot');\n /* tslint:disable-next-line:max-line-length */\n var bulletCircle = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-circle e-de-bullet-icons', 'e-bullet-circle');\n var bulletSquare = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-square e-de-bullet-icons', 'e-bullet-square');\n /* tslint:disable-next-line:max-line-length */\n var bulletFlower = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-flower e-de-bullet-icons', 'e-bullet-flower');\n var bulletArrow = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-arrow e-de-bullet-icons', 'e-bullet-arrow');\n var bulletTick = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-tick e-de-bullet-icons', 'e-bullet-tick');\n bulletNone.addEventListener('click', this.bulletListClick);\n bulletDot.addEventListener('click', this.bulletListClick);\n bulletCircle.addEventListener('click', this.bulletListClick);\n bulletSquare.addEventListener('click', this.bulletListClick);\n bulletFlower.addEventListener('click', this.bulletListClick);\n bulletArrow.addEventListener('click', this.bulletListClick);\n bulletTick.addEventListener('click', this.bulletListClick);\n // bulletListDiv.appendChild(table1); \n this.target.appendChild(bulletListDiv);\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.showNumberBulletDialog = function (listFormat, abstractList) {\n if (!isNullOrUndefined(listFormat)) {\n this.listFormat = listFormat;\n }\n else {\n this.listFormat = new WListFormat();\n }\n if (isNullOrUndefined(this.listFormat.list)) {\n this.listFormat.list = new WList();\n }\n if (!isNullOrUndefined(abstractList)) {\n this.abstractList = abstractList;\n }\n else {\n this.abstractList = new WAbstractList();\n }\n var locale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n locale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initNumberingBulletDialog(locale);\n }\n this.owner.dialog.header = locale.getConstant('Numbering and Bullets');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadNumberingBulletDialog;\n this.owner.dialog.close = this.closeNumberingBulletDialog;\n this.owner.dialog.position = { X: 'center', Y: 'center' };\n this.owner.dialog.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-numbering-bullet-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-numbering-bullet-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n BulletsAndNumberingDialog.prototype.setActiveElement = function (args) {\n var html = args.currentTarget.parentElement;\n for (var i = 0; i < html.childElementCount; i++) {\n if (html.childNodes[i].classList.contains('e-de-list-active')) {\n html.childNodes[i].classList.remove('e-de-list-active');\n }\n }\n args.currentTarget.classList.add('e-de-list-active');\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.unWireEventsAndBindings = function () {\n //Unwire events\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.destroy = function () {\n this.owner = undefined;\n if (this.listFormat) {\n this.listFormat.destroy();\n this.listFormat = undefined;\n }\n if (this.abstractList) {\n this.abstractList.destroy();\n this.abstractList = undefined;\n }\n if (this.target && this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n };\n return BulletsAndNumberingDialog;\n}());\nexport { BulletsAndNumberingDialog };\n/* tslint:enable:no-any */ \n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { WCharacterFormat } from '../format/character-format';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * The Font dialog is used to modify formatting of selected text.\n */\n/* tslint:disable:no-any */\nvar FontDialog = /** @class */ (function () {\n /**\n * @private\n */\n function FontDialog(layoutViewer) {\n var _this = this;\n this.fontStyleInternal = undefined;\n this.fontNameList = undefined;\n this.fontStyleText = undefined;\n this.fontSizeText = undefined;\n this.colorPicker = undefined;\n this.underlineDrop = undefined;\n this.strikethroughBox = undefined;\n this.doublestrikethrough = undefined;\n this.superscript = undefined;\n this.subscript = undefined;\n //Character Format Property\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n this.fontColor = undefined;\n /**\n * @private\n */\n this.characterFormat = undefined;\n /**\n * @private\n */\n this.loadFontDialog = function () {\n _this.owner.updateFocus();\n var characterFormat;\n if (_this.characterFormat) {\n characterFormat = _this.characterFormat;\n }\n else {\n characterFormat = _this.owner.owner.selection.characterFormat;\n }\n _this.fontNameList.value = characterFormat.fontFamily;\n if (!characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 0;\n }\n else if (characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 1;\n }\n else if (!characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 2;\n }\n else if (characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 3;\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n for (var i = 0; i <= 15; i++) {\n var items = _this.fontSizeText.getItems();\n if (characterFormat.fontSize.toString() === items[i].innerHTML) {\n _this.fontSizeText.value = characterFormat.fontSize;\n _this.fontSizeText.index = i;\n break;\n }\n }\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n _this.colorPicker.value = characterFormat.fontColor;\n }\n else {\n _this.colorPicker.value = '#000000';\n }\n if (characterFormat.underline === 'None') {\n _this.underlineDrop.index = 0;\n }\n else if (characterFormat.underline === 'Single') {\n _this.underlineDrop.index = 1;\n }\n if (characterFormat.strikethrough === 'SingleStrike') {\n _this.strikethroughBox.checked = true;\n }\n else if (characterFormat.strikethrough === 'DoubleStrike') {\n _this.doublestrikethrough.checked = true;\n }\n else {\n _this.strikethroughBox.checked = false;\n _this.doublestrikethrough.checked = false;\n }\n if (characterFormat.baselineAlignment === 'Superscript') {\n _this.superscript.checked = true;\n }\n else if (characterFormat.baselineAlignment === 'Subscript') {\n _this.subscript.checked = true;\n }\n else {\n _this.superscript.checked = false;\n _this.subscript.checked = false;\n }\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n */\n this.closeFontDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n */\n this.onInsertFontFormat = function () {\n var format;\n if (_this.characterFormat) {\n format = _this.characterFormat;\n }\n else {\n format = new WCharacterFormat(undefined);\n }\n if (!isNullOrUndefined(_this.bold)) {\n format.bold = _this.bold;\n }\n if (!isNullOrUndefined(_this.italic)) {\n format.italic = _this.italic;\n }\n if (!isNullOrUndefined(_this.fontSize) && _this.fontSize > 0) {\n format.fontSize = _this.fontSize;\n }\n if (!isNullOrUndefined(_this.fontColor)) {\n format.fontColor = _this.fontColor;\n }\n if (!isNullOrUndefined(_this.baselineAlignment)) {\n format.baselineAlignment = _this.baselineAlignment;\n }\n if (!isNullOrUndefined(_this.strikethrough)) {\n format.strikethrough = _this.strikethrough;\n }\n if (!isNullOrUndefined(_this.underline)) {\n format.underline = _this.underline;\n }\n if (!isNullOrUndefined(_this.fontFamily)) {\n format.fontFamily = _this.fontFamily;\n }\n if (!_this.characterFormat) {\n _this.onCharacterFormat(_this.owner.selection, format);\n }\n else {\n _this.owner.owner.styleDialogModule.updateCharacterFormat();\n }\n _this.owner.dialog.hide();\n };\n this.fontSizeUpdate = function (args) {\n _this.fontSize = args.value;\n };\n this.fontStyleUpdate = function (args) {\n _this.fontStyle = args.value;\n };\n this.fontFamilyUpdate = function (args) {\n _this.fontFamily = args.value;\n };\n this.underlineUpdate = function (args) {\n _this.underline = args.value;\n };\n this.fontColorUpdate = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n _this.fontColor = args.currentValue.hex;\n }\n };\n this.singleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'SingleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n this.doubleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'DoubleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n this.superscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Superscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n this.subscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Subscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n this.owner = layoutViewer;\n }\n Object.defineProperty(FontDialog.prototype, \"fontStyle\", {\n /**\n * @private\n */\n get: function () {\n return this.fontStyleInternal;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontStyleInternal = value;\n switch (this.fontStyle) {\n case 'Bold':\n this.bold = true;\n this.italic = false;\n break;\n case 'Italic':\n this.bold = false;\n this.italic = true;\n break;\n case 'BoldItalic':\n this.bold = true;\n this.italic = true;\n break;\n case 'Regular':\n this.bold = false;\n this.italic = false;\n break;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FontDialog.prototype.getModuleName = function () {\n return 'FontDialog';\n };\n FontDialog.prototype.createInputElement = function (type, id, className) {\n var element = createElement('input', {\n attrs: { type: type },\n id: id,\n className: className\n });\n return element;\n };\n /**\n * @private\n */\n FontDialog.prototype.initFontDialog = function (locale) {\n var instance = this;\n var effectLabel;\n var strikeThroughElement;\n var superScriptElement;\n var subScriptElement;\n var doubleStrikeThroughElement;\n var id = this.owner.owner.containerId;\n this.target = createElement('div', { id: id + '_insertFontDialog', className: 'e-de-font-dlg' });\n var fontDiv = this.getFontDiv(locale);\n this.target.appendChild(fontDiv);\n var sizeDiv = this.getFontSizeDiv(locale);\n this.target.appendChild(sizeDiv);\n var colorDiv = createElement('div', { id: id + '_fontColor', styles: 'margin-top:15px;' });\n this.fontColorDiv = createElement('div', { id: id + '_fontColorDiv', className: 'e-de-font-dlg-display' });\n var fontColorLabel = createElement('label', {\n className: 'e-de-font-dlg-header-font-color e-de-font-color-margin', innerHTML: locale.getConstant('Font color')\n });\n this.fontColorDiv.appendChild(fontColorLabel);\n var fontColorElement = this.createInputElement('color', this.target.id + '_ColorDiv', 'e-de-font-dlg-color');\n this.fontColorDiv.appendChild(fontColorElement);\n colorDiv.appendChild(this.fontColorDiv);\n this.target.appendChild(colorDiv);\n var fontEffectsDiv = createElement('div', { id: id + '_fontEffectsDiv' });\n var fontEffectSubDiv1 = createElement('div', {\n className: 'e-de-font-color-label e-de-font-dlg-display',\n id: this.target.id + '_fontEffectsSubDiv1'\n });\n effectLabel = createElement('label', { className: 'e-de-font-dlg-header-effects', innerHTML: locale.getConstant('Effects') });\n fontEffectSubDiv1.appendChild(effectLabel);\n strikeThroughElement = this.createInputElement('checkbox', this.target.id + '_strikeThrough', '');\n fontEffectSubDiv1.appendChild(strikeThroughElement);\n superScriptElement = this.createInputElement('checkbox', this.target.id + '_superScript', '');\n fontEffectSubDiv1.appendChild(superScriptElement);\n fontEffectsDiv.appendChild(fontEffectSubDiv1);\n var fontEffectSubDiv2 = createElement('div', { className: 'e-de-font-checkbox', id: id + '_fontEffectsSubDiv2' });\n subScriptElement = this.createInputElement('checkbox', this.target.id + '_subScript', '');\n fontEffectSubDiv2.appendChild(subScriptElement);\n doubleStrikeThroughElement = this.createInputElement('checkbox', this.target.id + '_doubleStrikeThrough', '');\n fontEffectSubDiv2.appendChild(doubleStrikeThroughElement);\n fontEffectsDiv.appendChild(fontEffectSubDiv2);\n this.target.appendChild(fontEffectsDiv);\n this.owner.owner.element.appendChild(this.target);\n this.colorPicker = new ColorPicker({\n change: this.fontColorUpdate, value: '#000000',\n });\n this.colorPicker.appendTo(fontColorElement);\n this.strikethroughBox = new CheckBox({\n change: this.singleStrikeUpdate,\n cssClass: 'e-de-font-content-label',\n label: locale.getConstant('Strikethrough')\n });\n this.strikethroughBox.appendTo(strikeThroughElement);\n this.doublestrikethrough = new CheckBox({\n change: this.doubleStrikeUpdate,\n cssClass: 'e-de-font-content-checkbox-label',\n label: locale.getConstant('Double strikethrough')\n });\n this.doublestrikethrough.appendTo(doubleStrikeThroughElement);\n this.subscript = new CheckBox({\n label: locale.getConstant('Subscript'),\n change: this.subscriptUpdate\n });\n this.subscript.appendTo(subScriptElement);\n this.superscript = new CheckBox({\n label: locale.getConstant('Superscript'),\n cssClass: 'e-de-font-content-label', change: this.superscriptUpdate\n });\n this.superscript.appendTo(superScriptElement);\n };\n FontDialog.prototype.getFontSizeDiv = function (locale) {\n var fontSize;\n var sizeDiv;\n var id = this.owner.owner.containerId;\n sizeDiv = createElement('div', { id: id + '_fontSizeAndUnderlineDiv', className: 'e-de-font-dlg-padding e-de-font-dlg-display' });\n var sizeSubDiv1 = createElement('div', { id: id + '_fontSizeAndUnderlineSubDiv1' });\n var sizeLabel = createElement('label', { className: 'e-de-font-dlg-header', innerHTML: locale.getConstant('Size') });\n var styles = 'font-family:Roboto;font-size:14px;opacity:0.8;';\n fontSize = createElement('select', { id: this.target.id + '_fontSize', styles: styles });\n fontSize.innerHTML = '' +\n '' +\n '';\n sizeSubDiv1.appendChild(sizeLabel);\n sizeSubDiv1.appendChild(fontSize);\n sizeDiv.appendChild(sizeSubDiv1);\n var sizeSubDiv2 = createElement('div', {\n className: 'e-de-font-dlg-cb-right',\n id: id + '_fontSizeAndUnderlineSubDiv2'\n });\n var html = locale.getConstant('Underline style');\n var underlineLabel = createElement('label', { className: 'e-de-font-dlg-header', innerHTML: html });\n var underlineElement;\n underlineElement = createElement('select', { id: this.target.id + '_underLine', styles: styles });\n underlineElement.innerHTML = '';\n sizeSubDiv2.appendChild(underlineLabel);\n sizeSubDiv2.appendChild(underlineElement);\n sizeDiv.appendChild(sizeSubDiv2);\n this.fontSizeText = new ComboBox({ change: this.fontSizeUpdate, popupHeight: '170px', width: '170px' });\n this.fontSizeText.showClearButton = false;\n this.fontSizeText.appendTo(fontSize);\n this.underlineDrop = new DropDownList({ change: this.underlineUpdate, popupHeight: '100px', width: '170px' });\n this.underlineDrop.appendTo(underlineElement);\n return sizeDiv;\n };\n FontDialog.prototype.getFontDiv = function (locale) {\n var id = this.owner.owner.containerId;\n var fontDiv = createElement('div', { id: id + '_fontDiv', className: 'e-de-font-dlg-display' });\n var fontSubDiv1 = createElement('div', { id: id + '_fontSubDiv1' });\n var fontNameLabel = createElement('label', {\n className: 'e-de-font-dlg-header',\n innerHTML: locale.getConstant('Font')\n });\n var fontNameValues = createElement('select', { id: this.target.id + '_fontName' });\n fontNameValues.innerHTML = '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '';\n fontSubDiv1.appendChild(fontNameLabel);\n fontSubDiv1.appendChild(fontNameValues);\n fontDiv.appendChild(fontSubDiv1);\n var fontSubDiv2;\n var fontStyleLabel;\n var fontStyleValues;\n fontSubDiv2 = createElement('div', { className: 'e-de-font-dlg-cb-right', id: id + '_fontSubDiv2', styles: 'float:right;' });\n fontStyleLabel = createElement('label', { className: 'e-de-font-dlg-header', innerHTML: locale.getConstant('Font style') });\n var fontStyle = 'font-family:Roboto;font-size:14px;opacity:0.8;';\n fontStyleValues = createElement('select', { id: this.target.id + '_fontStyle', styles: fontStyle });\n fontStyleValues.innerHTML = '';\n fontSubDiv2.appendChild(fontStyleLabel);\n fontSubDiv2.appendChild(fontStyleValues);\n fontDiv.appendChild(fontSubDiv2);\n this.fontNameList = new ComboBox({ change: this.fontFamilyUpdate, popupHeight: '200px', width: '170px' });\n this.fontNameList.showClearButton = false;\n this.fontNameList.appendTo(fontNameValues);\n this.fontStyleText = new DropDownList({ change: this.fontStyleUpdate, popupHeight: '170px', width: '170px' });\n this.fontStyleText.appendTo(fontStyleValues);\n return fontDiv;\n };\n /**\n * @private\n */\n FontDialog.prototype.showFontDialog = function (characterFormat) {\n if (characterFormat) {\n this.characterFormat = characterFormat;\n }\n var locale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n locale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initFontDialog(locale);\n }\n this.owner.dialog.header = locale.getConstant('Font');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadFontDialog;\n this.owner.dialog.close = this.closeFontDialog;\n this.owner.dialog.buttons = [{\n click: this.onInsertFontFormat,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-font-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-font-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * Applies character format\n * @param {Selection} selection\n * @param {WCharacterFormat} format\n * @private\n */\n FontDialog.prototype.onCharacterFormat = function (selection, format) {\n this.owner.owner.editorModule.initHistory('CharacterFormat');\n if (selection.isEmpty) {\n if (selection.start.offset === selection.getParagraphLength(selection.start.paragraph)) {\n // tslint:disable-next-line:max-line-length\n this.owner.owner.editorModule.applyCharFormatValueInternal(selection, selection.start.paragraph.characterFormat, undefined, format);\n this.owner.owner.editorModule.reLayout(selection);\n }\n this.owner.updateFocus();\n return;\n }\n else {\n //Iterate and update formating.\n this.owner.owner.editorModule.setOffsetValue(this.owner.selection);\n this.owner.owner.editorModule.updateSelectionCharacterFormatting('CharacterFormat', format, false);\n }\n };\n /**\n * @private\n */\n FontDialog.prototype.enableCheckBoxProperty = function (args) {\n if (this.strikethroughBox.checked && this.doublestrikethrough.checked) {\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_doubleStrikeThrough') {\n this.doublestrikethrough.checked = true;\n }\n else {\n this.strikethroughBox.checked = true;\n }\n }\n if (this.superscript.checked && this.subscript.checked) {\n this.subscript.checked = false;\n this.superscript.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_subScript') {\n this.subscript.checked = true;\n }\n else {\n this.superscript.checked = true;\n }\n }\n };\n /**\n * @private\n */\n FontDialog.prototype.unWireEventsAndBindings = function () {\n this.fontNameList.value = '';\n this.fontSizeText.value = '';\n this.fontStyleText.value = '';\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n this.superscript.checked = false;\n this.subscript.checked = false;\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontColor = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n };\n /**\n * @private\n */\n FontDialog.prototype.destroy = function () {\n this.owner = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n if (this.fontNameList) {\n this.fontNameList.destroy();\n }\n this.fontNameList = undefined;\n if (this.fontStyleText) {\n this.fontStyleText.destroy();\n }\n this.fontStyleText = undefined;\n if (this.fontSizeText) {\n this.fontSizeText.destroy();\n }\n this.fontSizeText = undefined;\n if (this.colorPicker) {\n this.colorPicker.destroy();\n }\n this.colorPicker = undefined;\n if (this.underlineDrop) {\n this.underlineDrop.destroy();\n }\n this.underlineDrop = undefined;\n if (this.strikethroughBox) {\n this.strikethroughBox.destroy();\n }\n this.strikethroughBox = undefined;\n if (this.doublestrikethrough) {\n this.doublestrikethrough.destroy();\n }\n this.doublestrikethrough = undefined;\n if (this.superscript) {\n this.superscript.destroy();\n }\n this.superscript = undefined;\n if (this.subscript) {\n this.subscript.destroy();\n }\n this.subscript = undefined;\n };\n return FontDialog;\n}());\nexport { FontDialog };\n/* tslint:enable:no-any */ \n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WRowFormat, WCellFormat } from '../format/index';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { classList } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * The Table properties dialog is used to modify properties of selected table.\n */\nvar TablePropertiesDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TablePropertiesDialog(viewer) {\n var _this = this;\n this.hasTableWidth = false;\n this.hasCellWidth = false;\n /**\n * @private\n */\n this.isTableBordersAndShadingUpdated = false;\n /**\n * @private\n */\n this.isCellBordersAndShadingUpdated = false;\n this.tabObj = undefined;\n /**\n * @private\n */\n this.isCellOptionsUpdated = false;\n /**\n * @private\n */\n this.isTableOptionsUpdated = false;\n this.onBeforeOpen = function () {\n _this.owner.updateFocus();\n _this.loadTableProperties();\n };\n /**\n * @private\n */\n this.onCloseTablePropertyDialog = function () {\n _this.unWireEvent.bind(_this);\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.applyTableProperties = function () {\n var selection = _this.owner.selection;\n if (!_this.preferCheckBox.checked && !_this.preferCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.tableFormat.preferredWidth) || selection.tableFormat.preferredWidth !== 0) {\n _this.tableFormat.preferredWidth = 0;\n _this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (_this.tableFormat.hasValue('tableAlignment') && _this.tableFormat.tableAlignment !== 'Left') {\n if (isNullOrUndefined(selection.tableFormat.leftIndent) || selection.tableFormat.leftIndent !== 0) {\n _this.tableFormat.leftIndent = 0;\n }\n }\n if (!_this.rowHeightCheckBox.checked && !_this.rowHeightCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.rowFormat.height) || selection.rowFormat.height !== 0) {\n _this.rowFormat.heightType = 'AtLeast';\n _this.rowFormat.height = 0;\n }\n }\n if (!_this.preferredCellWidthCheckBox.checked && !_this.preferredCellWidthCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.cellFormat.preferredWidth) || selection.cellFormat.preferredWidth === 0) {\n _this.cellFormat.preferredWidthType = 'Point';\n _this.cellFormat.preferredWidth = 0;\n }\n }\n else {\n if (_this.cellFormat.preferredWidthType === 'Percent') {\n if (!_this.tableFormat.hasValue('preferredWidth') && !_this.tableFormat.hasValue('preferredWidthType')\n && _this.owner.selection.start.paragraph.associatedCell.ownerTable.tableFormat.preferredWidth === 0) {\n // tslint:disable-next-line:max-line-length\n var containerWidth = _this.owner.selection.start.paragraph.associatedCell.ownerTable.getOwnerWidth(true);\n var tableWidth = _this.owner.selection.start.paragraph.associatedCell.ownerTable.getTableClientWidth(containerWidth);\n _this.tableFormat.preferredWidthType = 'Percent';\n _this.tableFormat.preferredWidth = tableWidth / HelperMethods.convertPixelToPoint(_this.owner.clientArea.width) * 100;\n }\n }\n }\n if (_this.rowHeightValue) {\n _this.rowFormat.height = _this.rowHeightValue;\n }\n _this.owner.owner.editorModule.initComplexHistory('TableProperties');\n _this.owner.owner.editorModule.onTableFormat(_this.tableFormat);\n _this.owner.owner.editorModule.onRowFormat(_this.rowFormat);\n _this.owner.owner.editorModule.onCellFormat(_this.cellFormat);\n _this.owner.owner.editorHistory.updateComplexHistory();\n _this.closeTablePropertiesDialog();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.applyTableSubProperties = function () {\n if (_this.isCellOptionsUpdated) {\n var cellFormat = _this.owner.owner.cellOptionsDialogModule.cellFormat;\n _this.owner.owner.cellOptionsDialogModule.applySubCellOptions(cellFormat);\n }\n if (_this.isTableOptionsUpdated) {\n var tableFormat = _this.owner.owner.tableOptionsDialogModule.tableFormat;\n _this.owner.owner.tableOptionsDialogModule.applySubTableOptions(tableFormat);\n }\n _this.isCellOptionsUpdated = false;\n _this.isTableOptionsUpdated = false;\n };\n /**\n * @private\n */\n this.unWireEvent = function () {\n //Table Format\n _this.preferCheckBox.change = undefined;\n _this.tableWidthBox.change = undefined;\n _this.tableWidthType.change = undefined;\n _this.leftIndentBox.change = undefined;\n //Row Format\n _this.rowHeightCheckBox.change = undefined;\n _this.rowHeightBox.change = undefined;\n _this.rowHeightType.change = undefined;\n _this.repeatHeader.change = undefined;\n _this.allowRowBreak.change = undefined;\n //Cell Format\n _this.preferredCellWidthCheckBox.change = undefined;\n _this.cellWidthBox.change = undefined;\n _this.cellWidthType.change = undefined;\n _this.cellFormat.destroy();\n _this.rowFormat.destroy();\n _this.tableFormat.destroy();\n _this.rowHeightValue = undefined;\n _this.owner.dialog2.open = _this.owner.selection.hideCaret.bind(_this.owner);\n };\n /**\n * @private\n */\n this.closeTablePropertiesDialog = function () {\n _this.owner.dialog2.hide();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.changeTableCheckBox = function () {\n var enable = (_this.preferCheckBox.checked || _this.preferCheckBox.indeterminate);\n _this.tableWidthBox.enabled = enable;\n _this.tableWidthType.enabled = enable;\n if (enable) {\n _this.tableFormat.preferredWidthType = (_this.tableWidthType.value === 'Points') ?\n 'Point' : _this.tableWidthType.value;\n }\n else {\n _this.tableFormat.preferredWidthType = _this.owner.selection.tableFormat.preferredWidthType;\n }\n };\n /**\n * @private\n */\n this.changeTableAlignment = function (event) {\n _this.updateClassForAlignmentProperties(_this.tableTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n if (element.classList.contains('e-de-table-left-alignment')) {\n _this.leftIndentBox.enabled = true;\n }\n else {\n _this.leftIndentBox.enabled = false;\n }\n _this.tableFormat.tableAlignment = _this.getTableAlignment();\n };\n /**\n * @private\n */\n this.changeTableRowCheckBox = function () {\n _this.rowHeightType.enabled = _this.rowHeightCheckBox.checked;\n _this.rowHeightBox.enabled = _this.rowHeightCheckBox.checked;\n if (_this.rowHeightType.enabled) {\n _this.rowFormat.heightType = _this.rowHeightType.value;\n }\n else {\n _this.rowFormat.heightType = _this.owner.selection.rowFormat.heightType;\n }\n };\n /**\n * @private\n */\n this.changeTableCellCheckBox = function () {\n _this.cellWidthType.enabled = _this.preferredCellWidthCheckBox.checked;\n _this.cellWidthBox.enabled = _this.preferredCellWidthCheckBox.checked;\n };\n /**\n * @private\n */\n this.changeCellAlignment = function (event) {\n _this.updateClassForCellAlignment(_this.cellTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n _this.cellFormat.verticalAlignment = _this.getCellAlignment();\n };\n //#endregion\n /**\n * @private\n */\n this.showTableOptionsDialog = function () {\n _this.owner.owner.tableOptionsDialogModule.show();\n _this.owner.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n */\n this.showBordersShadingsPropertiesDialog = function () {\n _this.owner.owner.bordersAndShadingDialogModule.show();\n _this.owner.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n */\n this.showCellOptionsDialog = function () {\n _this.owner.owner.cellOptionsDialogModule.show();\n _this.owner.dialog2.element.style.pointerEvents = 'none';\n };\n this.owner = viewer;\n }\n Object.defineProperty(TablePropertiesDialog.prototype, \"cellFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.cellFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"tableFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n this.tableFormatIn = new WTableFormat();\n return this.tableFormatIn;\n }\n return this.tableFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.tableFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"rowFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.rowFormatInternal)) {\n this.rowFormatInternal = new WRowFormat();\n return this.rowFormatInternal;\n }\n return this.rowFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n TablePropertiesDialog.prototype.getModuleName = function () {\n return 'TablePropertiesDialog';\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.initTablePropertyDialog = function (localValue) {\n var id = this.owner.owner.containerId + '_TablePropertiesDialog';\n this.target = createElement('div', { id: id, className: 'e-de-table-properties-dlg' });\n this.owner.owner.element.appendChild(this.target);\n var ejtabContainer = createElement('div', { id: this.target.id + '_TabContainer' });\n this.target.appendChild(ejtabContainer);\n this.tableTab = createElement('div', {\n id: this.target.id + '_TablePropertiesContentDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.rowTab = createElement('div', {\n id: this.target.id + '_RowPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.cellTab = createElement('div', {\n id: this.target.id + '_CellPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n var separatorLine = createElement('div', { className: 'e-de-table-dialog-separator-line' });\n // tslint:disable-next-line:max-line-length\n var ejtab = createElement('div', { id: this.target.id + '_TablePropertiesDialogTab', className: 'e-de-table-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var tableHeader = createElement('div', {\n id: this.target.id + '_tableHeader', innerHTML: localValue.getConstant('Table')\n });\n var rowHeader = createElement('div', {\n id: this.target.id + '_rowHeader', innerHTML: localValue.getConstant('Row')\n });\n var cellHeader = createElement('div', {\n id: this.target.id + '_cellHeader', innerHTML: localValue.getConstant('Cell')\n });\n headerContainer.appendChild(tableHeader);\n headerContainer.appendChild(rowHeader);\n headerContainer.appendChild(cellHeader);\n var contentContainer = createElement('div', { className: 'e-content' });\n var tableContent = createElement('div', { id: this.target.id + '_tableContent' });\n var rowContent = createElement('div', { id: this.target.id + '_rowContent' });\n var cellContent = createElement('div', { id: this.target.id + '_cellContent' });\n tableContent.appendChild(this.tableTab);\n rowContent.appendChild(this.rowTab);\n cellContent.appendChild(this.cellTab);\n contentContainer.appendChild(tableContent);\n contentContainer.appendChild(rowContent);\n contentContainer.appendChild(cellContent);\n ejtab.appendChild(headerContainer);\n ejtab.appendChild(contentContainer);\n ejtabContainer.appendChild(ejtab);\n this.initTableProperties(this.tableTab, localValue);\n this.initTableRowProperties(this.rowTab, localValue);\n this.initTableCellProperties(this.cellTab, localValue);\n this.tabObj = new Tab({}, ejtab);\n this.target.appendChild(separatorLine);\n var alignMentButtons = this.tableTab.getElementsByClassName(this.tableTab.id + 'e-de-table-alignment');\n for (var i = 0; i < alignMentButtons.length; i++) {\n alignMentButtons[i].addEventListener('click', this.changeTableAlignment);\n }\n var cellAlignment = this.cellTab.getElementsByClassName(this.cellTab.id + 'e-de-table-cell-alignment');\n for (var i = 0; i < cellAlignment.length; i++) {\n cellAlignment[i].addEventListener('click', this.changeCellAlignment);\n }\n var tableTabHeader = this.tabObj.element.getElementsByClassName('e-item e-toolbar-item')[0];\n var tableTabHeaderItem = tableTabHeader.getElementsByClassName('e-tab-wrap')[0];\n tableTabHeaderItem.classList.add('e-de-table-ppty-dlg-table-header');\n var rowTabHeader = this.tabObj.element.getElementsByClassName('e-item e-toolbar-item')[1];\n var rowTabHeaderItem = rowTabHeader.getElementsByClassName('e-tab-wrap')[0];\n rowTabHeaderItem.classList.add('e-de-table-ppty-dlg-row-header');\n var cellTabHeader = this.tabObj.element.getElementsByClassName('e-item e-toolbar-item')[2];\n var cellTabHeaderItem = cellTabHeader.getElementsByClassName('e-tab-wrap')[0];\n cellTabHeaderItem.classList.add('e-de-table-ppty-dlg-cell-header');\n this.tabObj.element.getElementsByClassName('e-indicator')[0].style.right = '155px';\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTablePropertyDialog(localValue);\n }\n if (this.owner.selection.caret.style.display !== 'none') {\n this.owner.selection.caret.style.display = 'none';\n }\n this.owner.dialog2.header = localValue.getConstant('Table Properties');\n this.owner.dialog2.position = { X: 'center', Y: 'center' };\n this.owner.dialog2.width = 'auto';\n this.owner.dialog2.height = 'auto';\n this.owner.dialog2.content = this.target;\n this.owner.dialog2.beforeOpen = this.onBeforeOpen;\n this.owner.dialog2.close = this.onCloseTablePropertyDialog;\n this.owner.dialog2.open = this.wireEvent.bind(this);\n this.owner.dialog2.buttons = [{\n click: this.applyTableProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ppty-okay', isPrimary: true }\n },\n {\n click: this.closeTablePropertiesDialog,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-ppty-cancel' }\n }];\n //this.tabObj.select(0);\n this.owner.dialog2.dataBind();\n this.owner.dialog2.show();\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.calculateGridValue = function (table) {\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.owner.selection.owner.isLayoutEnabled = true;\n this.owner.layout.reLayoutTable(table);\n this.owner.owner.editorModule.reLayout(this.owner.selection);\n this.owner.owner.editorModule.updateSelectionTextPosition(true);\n var history = this.owner.owner.editorHistory;\n if (history && history.currentBaseHistoryInfo) {\n if (history.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history.currentBaseHistoryInfo.updateSelection();\n }\n history.updateHistory();\n }\n this.owner.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.loadTableProperties = function () {\n this.setTableProperties();\n this.setTableRowProperties();\n this.setTableCellProperties();\n if (!this.owner.owner.bordersAndShadingDialogModule) {\n this.bordersAndShadingButton.disabled = true;\n }\n else {\n this.bordersAndShadingButton.disabled = false;\n }\n // if (!this.owner.owner.tableOptionsDialogModule) {\n // this.tableOptionButton.disabled = true;\n // } else {\n this.tableOptionButton.disabled = false;\n // }\n // if (!this.owner.owner.cellOptionsDialogModule) {\n // this.cellOptionButton.disabled = true;\n // } else {\n this.cellOptionButton.disabled = false;\n // }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.wireEvent = function () {\n this.owner.selection.hideCaret();\n //Table Format\n this.preferCheckBox.change = this.changeTableCheckBox.bind(this);\n this.tableWidthBox.change = this.onTableWidthChange.bind(this);\n this.tableWidthType.change = this.onTableWidthTypeChange.bind(this);\n this.leftIndentBox.change = this.onLeftIndentChange.bind(this);\n //Row Format\n this.rowHeightCheckBox.change = this.changeTableRowCheckBox.bind(this);\n this.rowHeightBox.change = this.onRowHeightChange.bind(this);\n this.rowHeightType.change = this.onRowHeightTypeChange.bind(this);\n this.allowRowBreak.change = this.onAllowBreakAcrossPage.bind(this);\n this.repeatHeader.change = this.onRepeatHeader.bind(this);\n //Cell Format\n this.preferredCellWidthCheckBox.change = this.changeTableCellCheckBox.bind(this);\n this.cellWidthBox.change = this.onCellWidthChange.bind(this);\n this.cellWidthType.change = this.onCellWidthTypeChange.bind(this);\n };\n //#region Table Format\n /**\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n TablePropertiesDialog.prototype.initTableProperties = function (element, localValue) {\n var container = createElement('div', { id: element.id + '_table_TabContainer' });\n var sizeHeader = createElement('div', {\n id: container.id + '_sizeLabel', innerHTML: localValue.getConstant('Size'),\n styles: 'width:100%;margin:0px;padding-top: 20px;padding-bottom: 0px;', className: 'e-de-table-dialog-options-label'\n });\n var parentContainer = createElement('div', { styles: 'display: inline-flex;' });\n var childContainer1 = createElement('div', {\n styles: 'float: left;',\n className: 'e-de-table-container-div'\n });\n var childContainer2 = createElement('div', {\n className: 'e-de-table-ppty-dlg-preferred-width-div'\n });\n var child1 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-ppty-dlg-measure-div'\n });\n var child2 = createElement('div', {\n styles: 'display: inline;position: absolute;',\n className: 'e-de-table-ppty-dlg-measure-drop-down-div'\n });\n var childContainer3 = createElement('div');\n var preferCheckBox = createElement('input', {\n id: element.id + '_Prefer_Width_CheckBox', attrs: { 'type': 'checkbox' }\n });\n this.preferredWidth = createElement('input', { id: element.id + 'preferred_Width' });\n var controlDiv = createElement('div');\n var tableWidthType = createElement('select', {\n innerHTML: '', id: element.id + '_width_dropdown'\n });\n var labeltext = createElement('label', {\n innerHTML: localValue.getConstant('Measure in'), styles: 'width: 60px;font-size: 11px; font-weight: normal;'\n });\n var alignmentHeader = createElement('div', {\n innerHTML: localValue.getConstant('Alignment'), className: 'e-de-table-dialog-options-label',\n styles: 'width: 100%;margin: 0px;padding-bottom: 15px'\n });\n var alignmentContainer = createElement('div', { styles: 'height:70px;' });\n var classDivName = element.id + 'e-de-table-alignment';\n var leftAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.left = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-left-alignment ' + classDivName,\n id: element.id + '_left_alignment', styles: 'width:54px;height:54px;margin:2px'\n });\n leftAlignDiv.appendChild(this.left);\n var centerAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.center = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-center-alignment ' + classDivName,\n id: element.id + '_center_alignment', styles: 'width:54px;height:54px;margin:2px'\n });\n centerAlignDiv.appendChild(this.center);\n this.right = createElement('div', {\n styles: 'width:54px;height:54px;margin:2px', id: element.id + '_right_alignment',\n className: 'e-icons e-de-table-properties-alignment e-de-table-right-alignment ' + classDivName\n });\n var rightAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n rightAlignDiv.appendChild(this.right);\n var leftlabel = createElement('label', {\n innerHTML: localValue.getConstant('Left'), className: 'e-de-table-dia-align-label'\n });\n var centerlabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var rightlabel = createElement('label', {\n innerHTML: localValue.getConstant('Right'), className: 'e-de-table-dia-align-label'\n });\n var leftIndenetContainer = createElement('div', {\n className: 'e-de-table-ppty-dlg-left-indent-container'\n });\n var leftIndentLabel = createElement('label', {\n innerHTML: localValue.getConstant('Indent from left'),\n styles: 'font-weight: normal;font-size: 11px;float:right;margin-right:121px;'\n });\n var leftIndentBox = createElement('div', {\n styles: 'margin-top: 27px;'\n });\n this.leftIndent = createElement('input', { id: element.id + '_left_indent' });\n var tableOptionContiner = createElement('div', {\n className: 'e-de-tbl-dlg-border-btn'\n });\n this.bordersAndShadingButton = createElement('button', {\n innerHTML: localValue.getConstant('Borders and Shading'),\n id: element.id + '_borders_and_shadings', className: 'e-control e-btn e-flat e-de-ok-button'\n });\n this.tableOptionButton = createElement('button', {\n className: 'e-control e-btn e-flat', innerHTML: localValue.getConstant('Options'),\n id: element.id + '_table_cellmargin'\n });\n this.tableOptionButton.addEventListener('click', this.showTableOptionsDialog);\n this.bordersAndShadingButton.addEventListener('click', this.showBordersShadingsPropertiesDialog);\n tableOptionContiner.appendChild(this.bordersAndShadingButton);\n tableOptionContiner.appendChild(this.tableOptionButton);\n leftIndenetContainer.appendChild(leftIndentLabel);\n leftIndentBox.appendChild(this.leftIndent);\n leftIndenetContainer.appendChild(leftIndentBox);\n alignmentContainer.appendChild(leftAlignDiv);\n alignmentContainer.appendChild(centerAlignDiv);\n alignmentContainer.appendChild(rightAlignDiv);\n leftAlignDiv.appendChild(leftlabel);\n centerAlignDiv.appendChild(centerlabel);\n rightAlignDiv.appendChild(rightlabel);\n alignmentContainer.appendChild(leftIndenetContainer);\n container.appendChild(sizeHeader);\n element.appendChild(container);\n childContainer1.appendChild(preferCheckBox);\n parentContainer.appendChild(childContainer1);\n childContainer2.appendChild(this.preferredWidth);\n parentContainer.appendChild(childContainer2);\n controlDiv.appendChild(tableWidthType);\n child1.appendChild(labeltext);\n child2.appendChild(controlDiv);\n childContainer3.appendChild(child1);\n childContainer3.appendChild(child2);\n parentContainer.appendChild(childContainer3);\n element.appendChild(parentContainer);\n element.appendChild(alignmentHeader);\n element.appendChild(alignmentContainer);\n element.appendChild(tableOptionContiner);\n this.tableWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, width: 120, enablePersistence: false\n });\n this.tableWidthBox.appendTo(this.preferredWidth);\n this.leftIndentBox = new NumericTextBox({\n value: 0, decimals: 2, min: -1584, max: 1584, width: 140, enablePersistence: false\n });\n this.leftIndentBox.appendTo(this.leftIndent);\n this.preferCheckBox = new CheckBox({\n label: localValue.getConstant('Preferred Width')\n });\n this.preferCheckBox.appendTo(preferCheckBox);\n this.tableWidthType = new DropDownList({ width: '120px' });\n this.tableWidthType.appendTo(tableWidthType);\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onTableWidthChange = function () {\n this.tableFormat.preferredWidth = this.tableWidthBox.value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onTableWidthTypeChange = function () {\n var value;\n var table = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n var width = HelperMethods.convertPixelToPoint(this.owner.clientArea.width);\n if (this.tableWidthType.text === 'Percent' && this.owner.selection.tableFormat.preferredWidthType !== 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n this.formatNumericTextBox(this.tableWidthBox, 'Percent', value);\n }\n else if (this.tableWidthType.text === 'Points' && this.owner.selection.tableFormat.preferredWidthType !== 'Point') {\n value = width / 100 * this.tableWidthBox.value;\n this.formatNumericTextBox(this.tableWidthBox, 'Point', value);\n }\n else {\n if (this.tableWidthBox.format === '#\\'\\%\\'') {\n if (this.tableWidthType.text === 'Points') {\n value = width / 100 * this.tableWidthBox.value;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n else {\n if (this.tableWidthType.text === 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n // tslint:disable-next-line:max-line-length\n this.formatNumericTextBox(this.tableWidthBox, (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text, value);\n }\n this.tableFormat.preferredWidthType = (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onLeftIndentChange = function () {\n this.tableFormat.leftIndent = this.leftIndentBox.value;\n };\n TablePropertiesDialog.prototype.setTableProperties = function () {\n //instance of Table Property values\n var tableFormat = this.owner.selection.tableFormat;\n var tableHasWidth = tableFormat.preferredWidth > 0;\n var preferredWidth = tableFormat.preferredWidth;\n if (isNullOrUndefined(tableFormat.preferredWidth)) {\n this.preferCheckBox.indeterminate = true;\n var startTable = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n var table = startTable.combineWidget(this.owner);\n preferredWidth = table.tableFormat.preferredWidth;\n }\n else {\n this.preferCheckBox.checked = tableHasWidth;\n }\n this.tableWidthBox.enabled = tableHasWidth;\n this.tableWidthType.enabled = tableHasWidth;\n this.formatNumericTextBox(this.tableWidthBox, tableFormat.preferredWidthType, preferredWidth);\n if (tableFormat.preferredWidthType === 'Auto' || tableFormat.preferredWidthType === 'Point') {\n this.tableWidthType.index = 0;\n }\n else {\n this.tableWidthType.index = 1;\n }\n this.leftIndentBox.value = tableFormat.leftIndent;\n this.leftIndentBox.enabled = tableFormat.tableAlignment === 'Left';\n classList(this.left, [], ['e-de-table-alignment-active']);\n classList(this.right, [], ['e-de-table-alignment-active']);\n classList(this.center, [], ['e-de-table-alignment-active']);\n if (tableFormat.tableAlignment === 'Left') {\n this.left.classList.add('e-de-table-alignment-active');\n }\n else if (tableFormat.tableAlignment === 'Center') {\n this.center.classList.add('e-de-table-alignment-active');\n }\n else if (tableFormat.tableAlignment === 'Right') {\n this.right.classList.add('e-de-table-alignment-active');\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.getTableAlignment = function () {\n var id = this.tableTab.id;\n var groupButtons = this.tableTab.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return 'Left';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return 'Right';\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.updateClassForAlignmentProperties = function (element) {\n var id = element.id;\n var groupButtons = element.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n classList(groupButton, ['e-de-table-properties-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n //#endregion\n //#region Row Format\n /**\n * @private\n */\n TablePropertiesDialog.prototype.initTableRowProperties = function (element, localValue) {\n var rowDiv = createElement('div', { styles: 'width: 100%;' });\n var sizeLabeldiv = createElement('div', {\n innerHTML: localValue.getConstant('Size'),\n styles: 'width: 100%;padding-top: 20px;padding-bottom: 10px;',\n className: 'e-de-table-dialog-options-label'\n });\n var parentDiv = createElement('div', { styles: 'display: inline;width: 100%;' });\n var childDiv1 = createElement('div', {\n styles: 'display: inline;float: left;',\n className: 'e-de-table-header-div'\n });\n var rowHeightCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: element.id + '_height_CheckBox'\n });\n var childdiv2 = createElement('div', {\n styles: 'display: inline-block;',\n className: 'e-de-row-ht-top'\n });\n this.rowHeight = createElement('input', {\n attrs: { 'type': 'text' }, 'id': element.id + '_table_row_height'\n });\n var child2 = createElement('div', {\n styles: 'float: right;display: inline;width: auto;margin-top: 5px;'\n });\n var child3 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-ppty-dlg-row-height-label'\n });\n var child4 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-subheader-div'\n });\n var controlDiv = createElement('div');\n var rowHeightType = createElement('select', {\n innerHTML: '',\n id: element.id + '_height_type'\n });\n var labeltext = createElement('label', {\n innerHTML: localValue.getConstant('Row height is'), styles: 'font-size: 11px;font-weight: normal;width: 75px;'\n });\n rowDiv.appendChild(sizeLabeldiv);\n element.appendChild(rowDiv);\n childDiv1.appendChild(rowHeightCheckBox);\n parentDiv.appendChild(childDiv1);\n childdiv2.appendChild(this.rowHeight);\n parentDiv.appendChild(childdiv2);\n controlDiv.appendChild(rowHeightType);\n child3.appendChild(labeltext);\n child4.appendChild(controlDiv);\n child2.appendChild(child3);\n child2.appendChild(child4);\n parentDiv.appendChild(child2);\n element.appendChild(parentDiv);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Options'), styles: 'width: 100%;',\n className: 'e-de-table-dialog-options-label'\n });\n // tslint:disable-next-line:max-line-length\n var allowRowContainer = createElement('div', { className: 'e-de-table-ppty-options-break' });\n var repeatHeaderContaniner = createElement('div', { className: 'e-de-table-ppty-options-header-row' });\n var allowRowBreak = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: element.id + '_allow_row_break'\n });\n var repeatHeader = createElement('input', {\n attrs: { 'type': 'checkbox' }, 'id': element.id + '_repeat_header'\n });\n allowRowContainer.appendChild(allowRowBreak);\n repeatHeaderContaniner.appendChild(repeatHeader);\n element.appendChild(alignmentDiv);\n element.appendChild(allowRowContainer);\n element.appendChild(repeatHeaderContaniner);\n this.rowHeightBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, width: 120, enablePersistence: false\n });\n this.rowHeightBox.appendTo(this.rowHeight);\n this.rowHeightCheckBox = new CheckBox({\n label: localValue.getConstant('Specify height')\n });\n this.rowHeightCheckBox.appendTo(rowHeightCheckBox);\n this.rowHeightType = new DropDownList({ width: '120px' });\n this.rowHeightType.appendTo(rowHeightType);\n this.allowRowBreak = new CheckBox({\n label: localValue.getConstant('Allow row to break across pages')\n });\n this.allowRowBreak.appendTo(allowRowBreak);\n this.repeatHeader = new CheckBox({\n label: localValue.getConstant('Repeat as header row at the top of each page')\n });\n this.repeatHeader.appendTo(repeatHeader);\n };\n TablePropertiesDialog.prototype.setTableRowProperties = function () {\n var rowFormat = this.owner.selection.rowFormat;\n var enableRowHeight = (rowFormat.height > 0 || rowFormat.heightType === 'Exactly');\n //instance of table row values\n if (enableRowHeight) {\n this.rowHeightCheckBox.checked = true;\n }\n else {\n if (rowFormat.heightType === undefined) {\n this.rowHeightCheckBox.indeterminate = true;\n enableRowHeight = true;\n }\n else {\n this.rowHeightCheckBox.checked = false;\n }\n }\n this.rowHeightBox.enabled = enableRowHeight;\n this.rowHeightType.enabled = enableRowHeight;\n // let enabledHeader: boolean = this.enableRepeatHeader() ? false : true;\n var enabledHeader = true;\n if (isNullOrUndefined(this.owner.selection.rowFormat.isHeader)) {\n this.repeatHeader.indeterminate = true;\n this.repeatHeader.disabled = true;\n }\n else if (this.owner.selection.rowFormat.isHeader) {\n this.repeatHeader.checked = !enabledHeader;\n this.repeatHeader.indeterminate = enabledHeader;\n this.repeatHeader.disabled = enabledHeader;\n }\n else {\n this.repeatHeader.checked = false;\n this.repeatHeader.indeterminate = false;\n this.repeatHeader.disabled = enabledHeader;\n }\n if (isNullOrUndefined(rowFormat.allowBreakAcrossPages)) {\n this.allowRowBreak.indeterminate = true;\n }\n else {\n this.allowRowBreak.checked = rowFormat.allowBreakAcrossPages;\n }\n this.rowHeightBox.value = rowFormat.height;\n if (rowFormat.heightType === 'Auto' || rowFormat.heightType === 'AtLeast') {\n this.rowHeightType.index = 0;\n }\n else {\n this.rowHeightType.index = 1;\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onRowHeightChange = function () {\n this.rowHeightValue = this.rowHeightBox.value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onRowHeightTypeChange = function () {\n this.rowFormat.heightType = this.rowHeightType.text;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onAllowBreakAcrossPage = function () {\n this.rowFormat.allowBreakAcrossPages = this.allowRowBreak.checked;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onRepeatHeader = function () {\n this.rowFormat.isHeader = this.repeatHeader.checked;\n };\n /**\n * @private\n */\n // public enableRepeatHeader(): boolean {\n // let isFirstRow: number = 0;\n // for (let i: number = 0; i < this.owner.selection.selectionRanges.length; i++) {\n // let range: SelectionRange = this.owner.selection.selectionRanges.getRange(i);\n // let table: WTable = range.start.paragraph.associatedCell.ownerTable;\n // if (table.childNodes.indexOf(range.start.paragraph.associatedCell.ownerRow) === 0 ||\n // table.childNodes.indexOf(range.start.paragraph.associatedCell.ownerRow) === 0) {\n // isFirstRow++;\n // }\n // }\n // return isFirstRow === this.owner.selection.selectionRanges.length;\n // }\n //#endregion\n //#region Cell Format\n /**\n * @private\n */\n TablePropertiesDialog.prototype.initTableCellProperties = function (element, localValue) {\n var sizeDiv = createElement('div', { styles: 'width: 100%;' });\n var div = createElement('div', {\n innerHTML: localValue.getConstant('Size'), className: 'e-de-table-dialog-options-label',\n styles: 'width: 100%;padding-top: 20px;padding-bottom: 10px;',\n });\n var parentdiv = createElement('div', { styles: 'display: inline;width: 100%;' });\n var childdiv1 = createElement('div', {\n styles: 'display: inline;float: left;',\n className: 'e-de-table-cell-header-div'\n });\n var preferredCellWidthCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: element.id + '_Prefer_Width_CheckBox_cell'\n });\n var childdiv2 = createElement('div', {\n styles: 'display: inline-block;',\n className: 'e-de-cell-width-top'\n });\n this.preferredCellWidth = createElement('input', {\n id: element.id + 'tablecell_Width_textBox', attrs: { 'type': 'text' }\n });\n var child2 = createElement('div', {\n styles: 'float: right;display: inline;width: auto;margin-top: 5px;'\n });\n var child3 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-ppty-dlg-cell-tab-measure-label'\n });\n var child4 = createElement('div', {\n styles: 'display: inline;float: right;', className: 'e-de-table-cell-subheader-div'\n });\n var controlDiv = createElement('div');\n var cellWidthType = createElement('select', {\n innerHTML: '', 'id': element.id + '_measure_type_cell'\n });\n var labeltext = createElement('label', {\n innerHTML: localValue.getConstant('Measure in'),\n styles: 'font-size: 11px;font-weight: normal;'\n });\n sizeDiv.appendChild(div);\n element.appendChild(sizeDiv);\n childdiv1.appendChild(preferredCellWidthCheckBox);\n parentdiv.appendChild(childdiv1);\n childdiv2.appendChild(this.preferredCellWidth);\n parentdiv.appendChild(childdiv2);\n controlDiv.appendChild(cellWidthType);\n child3.appendChild(labeltext);\n child4.appendChild(controlDiv);\n child2.appendChild(child3);\n child2.appendChild(child4);\n parentdiv.appendChild(child2);\n element.appendChild(parentdiv);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Vertical alignment'),\n styles: 'width: 100%;margin: 0px;',\n className: 'e-de-table-dialog-options-label'\n });\n var classDivName = element.id + 'e-de-table-cell-alignment';\n var divAlignment = createElement('div', {\n styles: 'width: 100%;height: 100px;'\n });\n var divStyle = 'width:54px;height:54px;margin:2px;border-style:solid;border-width:1px';\n var topAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.cellTopAlign = createElement('div', {\n styles: divStyle, id: element.id + '_cell_top-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-top-alignment ' + classDivName\n });\n topAlignDiv.appendChild(this.cellTopAlign);\n var centerAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.cellCenterAlign = createElement('div', {\n styles: divStyle, id: element.id + '_cell_center-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-center-alignment ' + classDivName\n });\n centerAlignDiv.appendChild(this.cellCenterAlign);\n var bottomAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.cellBottomAlign = createElement('div', {\n styles: divStyle, id: element.id + '_cell_bottom-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-bottom-alignment ' + classDivName\n });\n bottomAlignDiv.appendChild(this.cellBottomAlign);\n var topLabel = createElement('label', {\n innerHTML: localValue.getConstant('Top'), className: 'e-de-table-dia-align-label'\n });\n var centerLabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var bottomLabel = createElement('label', {\n innerHTML: localValue.getConstant('Bottom'), className: 'e-de-table-dia-align-label'\n });\n this.cellOptionButton = createElement('button', {\n innerHTML: localValue.getConstant('Options'), id: element.id + '_table_cellmargin',\n className: 'e-de-tbl-dlg-op-btn e-control e-btn e-flat e-de-cell-options',\n });\n divAlignment.appendChild(topAlignDiv);\n divAlignment.appendChild(centerAlignDiv);\n divAlignment.appendChild(bottomAlignDiv);\n topAlignDiv.appendChild(topLabel);\n centerAlignDiv.appendChild(centerLabel);\n bottomAlignDiv.appendChild(bottomLabel);\n element.appendChild(alignmentDiv);\n element.appendChild(divAlignment);\n element.appendChild(this.cellOptionButton);\n this.cellOptionButton.addEventListener('click', this.showCellOptionsDialog);\n this.cellWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, width: 120, enablePersistence: false\n });\n this.cellWidthBox.appendTo(this.preferredCellWidth);\n this.preferredCellWidthCheckBox = new CheckBox({ label: localValue.getConstant('Preferred Width') });\n this.preferredCellWidthCheckBox.appendTo(preferredCellWidthCheckBox);\n this.cellWidthType = new DropDownList({ width: '120px' });\n this.cellWidthType.appendTo(cellWidthType);\n };\n TablePropertiesDialog.prototype.setTableCellProperties = function () {\n var cellFormat = this.owner.selection.cellFormat;\n //instance of table cell Values\n this.hasCellWidth = cellFormat.preferredWidth > 0;\n var preferredWidth = cellFormat.preferredWidth;\n if (isNullOrUndefined(cellFormat.preferredWidth)) {\n this.preferredCellWidthCheckBox.indeterminate = true;\n preferredWidth = this.owner.selection.start.paragraph.associatedCell.cellFormat.preferredWidth;\n }\n else {\n this.preferredCellWidthCheckBox.checked = this.hasCellWidth;\n }\n this.cellWidthBox.enabled = this.hasCellWidth;\n this.cellWidthType.enabled = this.hasCellWidth;\n if (cellFormat.preferredWidthType === 'Auto' || cellFormat.preferredWidthType === 'Point') {\n this.cellWidthType.index = 0;\n }\n else {\n this.cellWidthType.index = 1;\n }\n this.formatNumericTextBox(this.cellWidthBox, cellFormat.preferredWidthType, preferredWidth);\n classList(this.cellTopAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellCenterAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellBottomAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n if (cellFormat.verticalAlignment === 'Top') {\n this.cellTopAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Center') {\n this.cellCenterAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Bottom') {\n this.cellBottomAlign.classList.add('e-de-table-alignment-active');\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.updateClassForCellAlignment = function (element) {\n var cellAlignments = element.getElementsByClassName(element.id + 'e-de-table-cell-alignment');\n for (var j = 0; j < cellAlignments.length; j++) {\n var cellAlignment = cellAlignments[j];\n if (cellAlignment.classList.contains('e-de-table-alignment-active')) {\n classList(cellAlignment, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.formatNumericTextBox = function (textBox, format, value) {\n if (format === 'Auto' || format === 'Point') {\n textBox.format = 'n2';\n }\n else {\n textBox.format = '#\\'\\%\\'';\n }\n textBox.step = 1;\n textBox.decimals = 2;\n textBox.value = value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.getCellAlignment = function () {\n var id = this.cellTab.id;\n var groupButtons = this.cellTab.getElementsByClassName(id + 'e-de-table-cell-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return 'Top';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return 'Bottom';\n }\n }\n }\n return this.owner.selection.cellFormat.verticalAlignment;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onCellWidthChange = function () {\n this.cellFormat.preferredWidth = this.cellWidthBox.value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onCellWidthTypeChange = function () {\n var value;\n var table = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n if (this.cellWidthType.text === 'Percent' && this.owner.selection.cellFormat.preferredWidthType !== 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n this.formatNumericTextBox(this.cellWidthBox, 'Percent', value);\n }\n else if (this.cellWidthType.text === 'Points' && this.owner.selection.cellFormat.preferredWidthType !== 'Point') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n this.formatNumericTextBox(this.cellWidthBox, 'Point', value);\n }\n else {\n if (this.cellWidthBox.format === '#\\'\\%\\'') {\n if (this.cellWidthType.text === 'Points') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n else {\n if (this.cellWidthType.text === 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n // tslint:disable-next-line:max-line-length\n this.formatNumericTextBox(this.cellWidthBox, (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text, value);\n }\n this.cellFormat.preferredWidthType = (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[s]);\n s--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.cellAlignment = undefined;\n this.tableAlignment = undefined;\n this.owner = undefined;\n this.preferCheckBox = undefined;\n this.tableWidthType = undefined;\n this.preferredWidth = undefined;\n this.rowHeightType = undefined;\n this.rowHeightCheckBox = undefined;\n this.rowHeight = undefined;\n this.cellWidthType = undefined;\n this.preferredCellWidthCheckBox = undefined;\n this.preferredCellWidth = undefined;\n this.tableTab = undefined;\n this.rowTab = undefined;\n this.cellTab = undefined;\n this.left = undefined;\n this.center = undefined;\n this.right = undefined;\n this.leftIndent = undefined;\n this.allowRowBreak = undefined;\n this.repeatHeader = undefined;\n this.cellTopAlign = undefined;\n this.cellCenterAlign = undefined;\n this.cellBottomAlign = undefined;\n this.tableFormat.destroy();\n this.cellFormat.destroy();\n this.tableFormat = undefined;\n this.cellFormat = undefined;\n };\n return TablePropertiesDialog;\n}());\nexport { TablePropertiesDialog };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WBorder, WBorders, WShading, WCellFormat } from '../format/index';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * The Borders and Shading dialog is used to modify borders and shading options for selected table or cells.\n */\nvar BordersAndShadingDialog = /** @class */ (function () {\n /**\n * @private\n */\n function BordersAndShadingDialog(viewer) {\n var _this = this;\n this.cellFormat = new WCellFormat();\n this.tableFormat = new WTableFormat();\n this.applyBordersShadingsProperties = function () {\n var tablePropertiesDialog = _this.owner.owner.tablePropertiesDialogModule;\n var selectedCell = _this.owner.selection.start.paragraph.associatedCell;\n //Need to bind the properties with current cell and current table formats.\n var borders = undefined;\n if (_this.checkClassName(_this.previewDivTopTop) || _this.checkClassName(_this.previewDivTopBottom)\n || _this.checkClassName(_this.previewDivTopCenter) || _this.checkClassName(_this.previewDivBottomcenter)\n || _this.checkClassName(_this.previewDivBottomLeft) || _this.checkClassName(_this.previewDivBottomRight)\n || _this.checkClassName(_this.previewDivDiagonalRight) || _this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders = new WBorders();\n if (_this.checkClassName(_this.previewDivTopTop)) {\n borders.top = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivTopBottom)) {\n borders.bottom = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivBottomLeft)) {\n borders.left = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivBottomRight)) {\n borders.right = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivTopCenter)) {\n borders.horizontal = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivBottomcenter)) {\n borders.vertical = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders.diagonalDown = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivDiagonalRight)) {\n borders.diagonalUp = _this.getBorder();\n }\n }\n var shading = new WShading();\n var editorModule = _this.owner.owner.editorModule;\n shading.backgroundColor = _this.shadingColorPicker.value;\n if (_this.ulelementShading.index === 0) {\n _this.applyTo = 0;\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isCellBordersAndShadingUpdated = true;\n }\n _this.cellFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(selectedCell.cellFormat.shading)) {\n shading.foregroundColor = selectedCell.cellFormat.shading.foregroundColor;\n shading.textureStyle = selectedCell.cellFormat.shading.textureStyle;\n }\n _this.cellFormat.shading = new WShading();\n editorModule.applyShading(_this.cellFormat.shading, shading);\n }\n else {\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isTableBordersAndShadingUpdated = true;\n }\n _this.applyTo = 1;\n var currentTableFormat = _this.owner.owner.selection.tableFormat.table.tableFormat;\n _this.tableFormat.copyFormat(currentTableFormat);\n _this.tableFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(currentTableFormat.shading)) {\n shading.foregroundColor = currentTableFormat.shading.foregroundColor;\n shading.textureStyle = currentTableFormat.shading.textureStyle;\n }\n _this.tableFormat.shading = new WShading();\n editorModule.applyShading(_this.tableFormat.shading, shading);\n }\n _this.applyFormat();\n _this.closeDialog();\n };\n /**\n * @private\n */\n this.closeDialog = function () {\n _this.owner.dialog.hide();\n _this.closeBordersShadingsDialog();\n };\n this.closeBordersShadingsDialog = function () {\n _this.owner.dialog2.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n this.handleSettingCheckBoxAction = function (event) {\n var targetId = event.target.id;\n var tableBorderDialogId = _this.target.id;\n var targetDiv;\n if (targetId === tableBorderDialogId + '_None_Div' || targetId === tableBorderDialogId + '_None_Div_Container'\n || targetId === tableBorderDialogId + '_None_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('none');\n }\n else if (targetId === tableBorderDialogId + '_Box_Div' || targetId === tableBorderDialogId + '_Box_Div_Container'\n || targetId === tableBorderDialogId + '_Box_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('box');\n }\n else if (targetId === tableBorderDialogId + '_All_Div' || targetId === tableBorderDialogId + '_All_Div_Container'\n || targetId === tableBorderDialogId + '_All_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('all');\n }\n else {\n _this.updateClassForSettingDivElements();\n _this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('customDiv');\n }\n };\n this.handlePreviewCheckBoxAction = function (event) {\n var target = event.target;\n var targetId = target.id;\n var tableBorderDialog = _this.target;\n var tableBorderDialogId = _this.target.id;\n var checkBox;\n var compareClass = 'e-de-table-border-inside-preview-click';\n _this.customDiv.click();\n if (targetId === tableBorderDialogId + '_Preview_Div_TopTop_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopTop'\n || targetId === tableBorderDialogId + '_previewDivTopTopTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopTop);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopTop', 'TopTop');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_TopCenter'\n || targetId === tableBorderDialogId + '_previewDivTopCenterTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopCenter);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Horizontal', '_Preview_Div_TopCenter', 'TopCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopBottom_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopBottom'\n || targetId === tableBorderDialogId + '_previewDivTopBottomTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopBottom);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopBottom', 'TopBottom');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal'\n || targetId === tableBorderDialogId + '_previewDivLeftDiagonalTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivLeftDiagonal);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Left_Diagonal', '_Preview_Div_LeftDiagonal', 'LeftDiagonal');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomLeft_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomLeft'\n || targetId === tableBorderDialogId + '_previewDivBottomLeftTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomLeft);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomLeft', 'BottomLeft');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_BottomCenter'\n || targetId === tableBorderDialogId + '_previewDivBottomcenterTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomcenter);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Vertical', '_Preview_Div_BottomCenter', 'BottomCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomRight_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomRight'\n || targetId === tableBorderDialogId + '_previewDivBottomRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomRight);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomRight', 'BottomRight');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal'\n || targetId === tableBorderDialogId + '_previewDivDiagonalRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivDiagonalRight);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Right_Diagonal', '_Preview_Div_RightDiagonal', 'RightDiagonal');\n }\n };\n this.applyTableCellPreviewBoxes = function () {\n _this.customDiv.click();\n if (!isNullOrUndefined(_this.ulelementShading)) {\n if (_this.ulelementShading.index === 0) {\n _this.previewDivBottomcenterContainer.style.display = 'none';\n _this.previewDivTopCenterContainer.style.display = 'none';\n _this.previewVerticalDiv.style.display = 'none';\n _this.previewHorizontalDiv.style.display = 'none';\n _this.previewDivLeftDiagonal.style.display = '';\n _this.previewDivDiagonalRight.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '80px';\n }\n else {\n _this.previewDivLeftDiagonal.style.display = 'none';\n _this.previewDivDiagonalRight.style.display = 'none';\n _this.previewDivBottomcenterContainer.style.display = '';\n _this.previewDivTopCenterContainer.style.display = '';\n _this.previewVerticalDiv.style.display = '';\n _this.previewHorizontalDiv.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '110px';\n }\n }\n };\n this.applyPreviewTableBackgroundColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.backgroundColor = color;\n }\n };\n this.applyPreviewTableBorderColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.borderColor = color;\n _this.previewRightDiagonalDiv.style.backgroundColor = color;\n _this.previewLeftDiagonalDiv.style.backgroundColor = color;\n _this.previewVerticalDiv.style.backgroundColor = color;\n _this.previewHorizontalDiv.style.backgroundColor = color;\n }\n };\n this.owner = viewer;\n }\n BordersAndShadingDialog.prototype.getModuleName = function () {\n return 'BordersAndShadingDialog';\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n BordersAndShadingDialog.prototype.initBordersAndShadingsDialog = function (localeValue) {\n var instance = this;\n this.target = createElement('div', {\n id: instance.owner.owner.containerId + '_table_border_shadings',\n className: 'e-de-table-border-shading-dlg'\n });\n this.owner.owner.element.appendChild(this.target);\n var displayText = createElement('div', {\n innerHTML: localeValue.getConstant('Borders'), styles: 'position: absolute;top: 65px;',\n id: this.target.id + '_border_label', className: 'e-de-table-border-heading'\n });\n var settingsContiner = createElement('div', {\n styles: 'display: inline-block;position: absolute;top: 105px;width: 100px;height: 235px;border-style: none;',\n id: this.target.id + '_border_settings'\n });\n var styleContainer = createElement('div', {\n // tslint:disable-next-line:max-line-length\n styles: 'display: inline-block;position: absolute;left: 125px;top: 125px;width: 150px;height: 235px;padding-left: 40px;border-style: none;padding-right: 40px;',\n id: this.target.id + '_border_style'\n });\n var previewContiner = createElement('div', {\n // tslint:disable-next-line:max-line-length\n styles: 'display: inline-block;position: absolute;left: 345px;top: 87px;width: 180px;height: 235px;padding: 0px;border-style: none;',\n id: this.target.id + '_border_preview'\n });\n var styleText = createElement('div', {\n innerHTML: localeValue.getConstant('Style'), styles: 'width: 100%;padding-bottom: 10px;',\n className: 'e-de-table-element-subheading'\n });\n var dropDownList = createElement('select', {\n id: this.target.id + '_border_style_dropDown'\n });\n dropDownList.innerHTML = '';\n var widthText = createElement('div', {\n innerHTML: localeValue.getConstant('Width'), styles: 'width:100%;padding-top: 20px;padding-bottom: 10px;',\n className: 'e-de-table-element-subheading'\n });\n var widthNumeric = createElement('input', {\n id: this.target.id + '_width'\n });\n var colorText = createElement('div', {\n innerHTML: localeValue.getConstant('Color'), styles: 'padding-top: 25px;',\n className: 'e-de-table-setting-heading'\n });\n var borderColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n id: this.target.id + '_border_color',\n styles: 'width: 30px;position: absolute;left: 90px;',\n className: 'e-dlg-clr-pkr-top'\n });\n var settingText = createElement('div', {\n innerHTML: localeValue.getConstant('Setting'), styles: 'width: 100%;position: absolute;',\n className: 'e-de-table-setting-heading'\n });\n var noneDivContainer = createElement('div', {\n id: this.target.id + '_None_Div_Container', className: 'e-de-table-border-none'\n });\n this.noneDiv = createElement('div', {\n id: this.target.id + '_None_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var noneDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('None'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 20px;position: absolute;',\n id: this.target.id + '_None_Div_Label'\n });\n var boxDivContainer = createElement('div', {\n id: this.target.id + '_Box_Div_Container', className: 'e-de-table-border-box'\n });\n this.boxDiv = createElement('div', {\n id: this.target.id + '_Box_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var boxDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Box'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 20px;position: absolute;',\n id: this.target.id + '_Box_Div_Label'\n });\n var allDivContainer = createElement('div', {\n id: this.target.id + '_All_Div_Container', className: 'e-de-table-border-all'\n });\n this.allDiv = createElement('div', {\n id: this.target.id + '_All_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var allDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('All'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 25px;position: absolute;',\n id: this.target.id + '_All_Div_Label'\n });\n var customDivContainer = createElement('div', {\n id: this.target.id + '_Custom_Div_Container', className: 'e-de-table-border-custom'\n });\n this.customDiv = createElement('div', {\n id: this.target.id + '_Custom_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var customDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Custom'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 25px;position: absolute;',\n id: this.target.id + '_Custom_Div_Label'\n });\n this.noneDivTransparent = createElement('div', {\n id: this.target.id + '_None_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-none-setting'\n });\n this.boxDivTransparent = createElement('div', {\n id: this.target.id + '_Box_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-box-setting'\n });\n this.allDivTransparent = createElement('div', {\n id: this.target.id + '_All_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-all-setting'\n });\n this.customDivTransparent = createElement('div', {\n id: this.target.id + '_Custom_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-custom-setting'\n });\n var previewText = createElement('div', {\n innerHTML: localeValue.getConstant('Preview'), className: 'e-de-table-setting-heading',\n styles: 'position: absolute;top: 20px;left: 10px;'\n });\n this.previewDiv = createElement('div', {\n styles: 'width: 80px;height: 80px;position: absolute; left: 50px;top: 50px;',\n id: this.target.id + '_Preview_Div', className: 'e-de-border-dlg-preview-div'\n });\n this.previewRightDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width:1px;height:113px;left: 90px;top: 34px;transform: rotate(135deg);',\n id: this.target.id + '_Preview_Div_Right_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewLeftDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width: 1px;height: 113px;left: 90px;top: 34px;transform:rotate(45deg);',\n id: this.target.id + '_Preview_Div_Left_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewVerticalDiv = createElement('div', {\n styles: 'width: 1px;height: 81px;position: absolute;left: 90px;top: 50px;',\n id: this.target.id + '_Preview_Div_Vertical',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewHorizontalDiv = createElement('div', {\n styles: 'width: 81px;height: 1px;position: absolute;left: 50px;top: 90px;',\n id: this.target.id + '_Preview_Div_Horizontal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewDivTopTopContainer = createElement('div', {\n styles: 'top: 50px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_TopTop_Container'\n });\n this.previewDivTopTop = createElement('div', {\n id: this.target.id + '_Preview_Div_TopTop',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopCenterContainer = createElement('div', {\n styles: 'top: 80px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_TopCenter_Container'\n });\n this.previewDivTopCenter = createElement('div', {\n id: this.target.id + '_Preview_Div_TopCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopBottomContainer = createElement('div', {\n styles: 'top: 110px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_TopBottom_Container'\n });\n this.previewDivTopBottom = createElement('div', {\n id: this.target.id + '_Preview_Div_TopBottom',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivLeftDiagonalContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_LeftDiagonal_Container'\n });\n this.previewDivLeftDiagonal = createElement('div', {\n id: this.target.id + '_Preview_Div_LeftDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomLeftContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 50px', id: this.target.id + '_Preview_Div_BottomLeft_Container'\n });\n this.previewDivBottomLeft = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomLeft',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomcenterContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 80px;', id: this.target.id + '_Preview_Div_BottomCenter_Container'\n });\n this.previewDivBottomcenter = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomRightContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 110px;', id: this.target.id + '_Preview_Div_BottomRight_Container'\n });\n this.previewDivBottomRight = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomRight',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivDiagonalRightContainer = createElement('div', {\n styles: 'top: 145px; position: absolute; left: 110px;', id: this.target.id + '_Preview_Div_RightDiagonal_Container'\n });\n this.previewDivDiagonalRight = createElement('div', {\n id: this.target.id + '_Preview_Div_RightDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopTopTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopTopTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-toptop-alignment'\n });\n this.previewDivTopCenterTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopCenterTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topcenter-alignment'\n });\n this.previewDivTopBottomTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopBottomTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topbottom-alignment'\n });\n this.previewDivLeftDiagonalTransParent = createElement('div', {\n id: this.target.id + '_previewDivLeftDiagonalTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionalup-alignment'\n });\n this.previewDivBottomLeftTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomLeftTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomleft-alignment'\n });\n this.previewDivBottomcenterTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomcenterTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomcenter-alignment'\n });\n this.previewDivBottomRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomright-alignment'\n });\n this.previewDivDiagonalRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivDiagonalRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionaldown-alignment'\n });\n this.shadingContiner = createElement('div', {\n /* tslint:disable:max-line-length */\n styles: 'display:inline-block;position:absolute;left:17px;width:400px;height:100px;padding:0px;border-style: none;margin-left:10px;',\n id: this.target.id + '_shading_preview', className: 'e-de-table-shading-preview'\n });\n var shadingText = createElement('div', {\n innerHTML: localeValue.getConstant('Shading'), className: 'e-de-table-border-heading',\n styles: 'padding-top: 30px;left: 5px;'\n });\n var shadings = createElement('div', { styles: 'display:flex;' });\n var label = createElement('div', {\n innerHTML: localeValue.getConstant('Fill'), className: 'e-de-table-setting-heading e-de-table-border-fill',\n styles: 'top: 50px;left: 10px;'\n });\n var shadingColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n id: this.target.id + '_shading_color', styles: 'position: absolute;top: 75px;left: 40px;width: 30px;'\n });\n var shdApply = createElement('div', {\n styles: 'position:absolute;top:41px;left:150px;width:180px;'\n });\n var div = createElement('div', {\n styles: 'width:100px;padding-bottom: 10px;', innerHTML: localeValue.getConstant('Apply To'),\n className: 'e-de-table-element-subheading'\n });\n var divsion = createElement('div', { styles: 'width:100px;position:absolute;' });\n var ulelementShading = createElement('select', {\n innerHTML: ''\n + '',\n id: this.target.id + '_shading'\n });\n divsion.appendChild(ulelementShading);\n this.noneDiv.appendChild(this.noneDivTransparent);\n this.boxDiv.appendChild(this.boxDivTransparent);\n this.allDiv.appendChild(this.allDivTransparent);\n this.customDiv.appendChild(this.customDivTransparent);\n noneDivContainer.appendChild(this.noneDiv);\n noneDivContainer.appendChild(noneDivLabel);\n boxDivContainer.appendChild(this.boxDiv);\n boxDivContainer.appendChild(boxDivLabel);\n allDivContainer.appendChild(this.allDiv);\n allDivContainer.appendChild(allDivLabel);\n customDivContainer.appendChild(this.customDiv);\n customDivContainer.appendChild(customDivLabel);\n settingsContiner.appendChild(settingText);\n settingsContiner.appendChild(noneDivContainer);\n settingsContiner.appendChild(boxDivContainer);\n settingsContiner.appendChild(allDivContainer);\n settingsContiner.appendChild(customDivContainer);\n this.previewDivBottomcenter.appendChild(this.previewDivBottomcenterTransparent);\n this.previewDivBottomRight.appendChild(this.previewDivBottomRightTransparent);\n this.previewDivBottomLeft.appendChild(this.previewDivBottomLeftTransparent);\n this.previewDivTopTop.appendChild(this.previewDivTopTopTransParent);\n this.previewDivTopCenter.appendChild(this.previewDivTopCenterTransParent);\n this.previewDivTopBottom.appendChild(this.previewDivTopBottomTransParent);\n this.previewDivDiagonalRight.appendChild(this.previewDivDiagonalRightTransparent);\n this.previewDivLeftDiagonal.appendChild(this.previewDivLeftDiagonalTransParent);\n this.previewDivBottomcenterContainer.appendChild(this.previewDivBottomcenter);\n this.previewDivBottomLeftContainer.appendChild(this.previewDivBottomLeft);\n this.previewDivBottomRightContainer.appendChild(this.previewDivBottomRight);\n this.previewDivDiagonalRightContainer.appendChild(this.previewDivDiagonalRight);\n this.previewDivLeftDiagonalContainer.appendChild(this.previewDivLeftDiagonal);\n this.previewDivTopBottomContainer.appendChild(this.previewDivTopBottom);\n this.previewDivTopCenterContainer.appendChild(this.previewDivTopCenter);\n this.previewDivTopTopContainer.appendChild(this.previewDivTopTop);\n previewContiner.appendChild(previewText);\n previewContiner.appendChild(this.previewDiv);\n previewContiner.appendChild(this.previewRightDiagonalDiv);\n previewContiner.appendChild(this.previewHorizontalDiv);\n previewContiner.appendChild(this.previewLeftDiagonalDiv);\n previewContiner.appendChild(this.previewVerticalDiv);\n previewContiner.appendChild(this.previewDivBottomcenterContainer);\n previewContiner.appendChild(this.previewDivBottomLeftContainer);\n previewContiner.appendChild(this.previewDivBottomRightContainer);\n previewContiner.appendChild(this.previewDivDiagonalRightContainer);\n previewContiner.appendChild(this.previewDivLeftDiagonalContainer);\n previewContiner.appendChild(this.previewDivTopBottomContainer);\n previewContiner.appendChild(this.previewDivTopCenterContainer);\n previewContiner.appendChild(this.previewDivTopTopContainer);\n shdApply.appendChild(div);\n shdApply.appendChild(divsion);\n shadings.appendChild(label);\n shadings.appendChild(shadingColorPickerElement);\n shadings.appendChild(shdApply);\n this.shadingContiner.appendChild(shadingText);\n this.shadingContiner.appendChild(shadings);\n styleContainer.appendChild(styleText);\n styleContainer.appendChild(dropDownList);\n styleContainer.appendChild(widthText);\n styleContainer.appendChild(widthNumeric);\n styleContainer.appendChild(colorText);\n styleContainer.appendChild(borderColorPickerElement);\n this.target.appendChild(displayText);\n this.target.appendChild(settingsContiner);\n this.target.appendChild(styleContainer);\n this.target.appendChild(previewContiner);\n this.target.appendChild(this.shadingContiner);\n // Handling Setting Container\n noneDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n boxDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n allDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n customDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n // Handling Preview Div Container\n this.previewDivBottomcenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomLeftContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopTopContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopBottomContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopCenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivDiagonalRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivLeftDiagonalContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n // handling dropdown change\n this.borderWidth = new NumericTextBox({\n value: 0, min: 0, max: 6, decimals: 2,\n width: 150, enablePersistence: false\n });\n this.borderWidth.appendTo(widthNumeric);\n this.borderStyle = new DropDownList({\n width: '150px', popupHeight: '150px', index: 1\n });\n this.borderStyle.appendTo(dropDownList);\n this.ulelementShading = new DropDownList({\n width: '150px', change: this.applyTableCellPreviewBoxes, index: 1\n });\n this.ulelementShading.appendTo(ulelementShading);\n this.borderColorPicker = new ColorPicker({\n value: '#000000', change: this.applyPreviewTableBorderColor\n });\n this.borderColorPicker.appendTo(borderColorPickerElement);\n this.shadingColorPicker = new ColorPicker({\n value: '#000000', change: this.applyPreviewTableBackgroundColor\n });\n this.shadingColorPicker.appendTo(shadingColorPickerElement);\n };\n BordersAndShadingDialog.prototype.applyFormat = function () {\n var selection = this.owner.selection;\n var editorModule = this.owner.owner.editorModule;\n editorModule.initComplexHistory('BordersAndShading');\n editorModule.isBordersAndShadingDialog = true;\n if (this.applyTo === 0) {\n editorModule.onCellFormat(this.cellFormat);\n }\n else {\n editorModule.onTableFormat(this.tableFormat);\n }\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentHistoryInfo)) {\n this.owner.owner.editorHistory.updateComplexHistory();\n }\n editorModule.isBordersAndShadingDialog = false;\n };\n BordersAndShadingDialog.prototype.getBorder = function () {\n var border = new WBorder();\n border.color = this.borderColorPicker.value;\n border.lineStyle = this.borderStyle.text;\n border.lineWidth = this.borderWidth.value;\n return border;\n };\n BordersAndShadingDialog.prototype.checkClassName = function (element) {\n return element.classList.contains('e-de-table-border-inside-preview-click');\n };\n /**\n * @private\n */\n BordersAndShadingDialog.prototype.show = function () {\n var localeValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localeValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initBordersAndShadingsDialog(localeValue);\n }\n this.loadBordersShadingsPropertiesDialog();\n this.owner.dialog.content = this.target;\n this.owner.dialog.header = localeValue.getConstant('Borders and Shading');\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.closeBordersShadingsDialog;\n this.owner.dialog.position = { X: 'center', Y: 'center' };\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.buttons = [{\n click: this.applyBordersShadingsProperties,\n buttonModel: { content: localeValue.getConstant('Ok'), cssClass: 'e-flat e-table-border-shading-okay', isPrimary: true }\n },\n {\n click: this.closeDialog,\n buttonModel: { content: localeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-border-shading-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n BordersAndShadingDialog.prototype.updateClassForSettingDivElements = function () {\n var settingDivs = this.target.getElementsByClassName('e-de-table-border-inside-setting');\n for (var j = 0; j < settingDivs.length; j++) {\n if (settingDivs[j].className.indexOf('e-de-table-border-inside-setting-click') !== -1) {\n var tempClassName = settingDivs[j].className;\n tempClassName = tempClassName.replace('e-de-table-border-inside-setting-click', '');\n settingDivs[j].className = tempClassName;\n }\n }\n };\n BordersAndShadingDialog.prototype.setSettingPreviewDivElement = function (position) {\n switch (position) {\n case 'none':\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('none');\n break;\n case 'box':\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('box');\n break;\n case 'all':\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('all');\n break;\n }\n };\n BordersAndShadingDialog.prototype.isShowHidePreviewTableElements = function (settingDiv) {\n switch (settingDiv) {\n case 'none':\n this.previewDiv.style.border = 'none';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'box':\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'all':\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'block';\n this.previewVerticalDiv.style.display = 'block';\n break;\n }\n };\n BordersAndShadingDialog.prototype.handlePreviewCheckBoxShowHide = function (tableBorderDialogId, compareClass, element) {\n if (element.classList.contains(compareClass)) {\n element.classList.remove(compareClass);\n }\n else {\n element.classList.add(compareClass);\n }\n };\n // tslint:disable-next-line:max-line-length\n BordersAndShadingDialog.prototype.showHidePreviewDivElements = function (tableBorderDialogId, compareClass, elementClass, compareElementClass, position) {\n var setElement = document.getElementById(tableBorderDialogId + elementClass);\n var compareElement = document.getElementById(tableBorderDialogId + compareElementClass);\n if (position === 'TopTop') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-top');\n }\n else if (position === 'TopCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'TopBottom') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-bottom');\n }\n else if (position === 'LeftDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomLeft') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-left');\n }\n else if (position === 'BottomCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomRight') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-right');\n }\n else if (position === 'RightDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n };\n BordersAndShadingDialog.prototype.setPropertyPreviewDivElement = function (ele, compareElement, compareClass, property) {\n if (compareElement.classList.contains(compareClass) && property.split('-')[0] === 'border') {\n /* tslint:disable:no-any */\n ele.style[property] = '1px solid rgba(0, 0, 0, .54)';\n }\n else if (compareElement.classList.contains(compareClass) && property === 'display') {\n ele.style[property] = 'block';\n }\n else {\n ele.style[property] = 'none';\n /* tslint:enable:no-any */\n }\n };\n BordersAndShadingDialog.prototype.loadBordersShadingsPropertiesDialog = function () {\n var tableFormat = this.owner.selection.tableFormat.table.tableFormat;\n var lineStyle;\n var borderColor;\n var fillColor;\n var borderWidth;\n if (!isNullOrUndefined(tableFormat) && !isNullOrUndefined(tableFormat.borders)) {\n this.cloneBorders(tableFormat.borders);\n if (isNullOrUndefined(tableFormat.borders) || isNullOrUndefined(tableFormat.borders.top)) {\n lineStyle = 1;\n borderColor = '#000000';\n borderWidth = 0;\n fillColor = '#000000';\n }\n else {\n lineStyle = this.getLineStyle(tableFormat.borders.top.lineStyle);\n borderColor = tableFormat.borders.top.color;\n borderWidth = tableFormat.borders.top.getLineWidth();\n fillColor = tableFormat.shading.backgroundColor;\n }\n }\n this.borderColorPicker.value = borderColor;\n this.shadingColorPicker.value = fillColor;\n /* tslint:disable:no-any */\n var colorPickerEvent = {\n target: this.borderColorPicker, ctrlKey: false,\n shiftKey: false, which: 0\n };\n var fillColorEvent = {\n target: this.shadingColorPicker, ctrlKey: false,\n shiftKey: false, which: 0\n };\n /* tslint:enable:no-any */\n this.applyPreviewTableBackgroundColor(fillColorEvent);\n this.applyPreviewTableBorderColor(colorPickerEvent);\n this.ulelementShading.index = 1;\n this.previewDivLeftDiagonal.style.display = 'none';\n this.previewDivDiagonalRight.style.display = 'none';\n this.borderWidth.value = borderWidth;\n this.borderStyle.index = lineStyle;\n };\n // tslint:disable:max-func-body-length\n BordersAndShadingDialog.prototype.cloneBorders = function (borders) {\n var topBorder = false;\n var bottomBorder = false;\n var leftBorder = false;\n var rightBorder = false;\n var horizontalBorder = false;\n var verticalBorder = false;\n var diagonalDownBorder = false;\n var customBorder = false;\n var diagonalUpBorder = false;\n if (borders !== null) {\n if (borders.top && (borders.top.hasNoneStyle || borders.top.lineStyle !== 'None')) {\n topBorder = true;\n }\n if (borders.bottom && (borders.bottom.hasNoneStyle || borders.bottom.lineStyle !== 'None')) {\n bottomBorder = true;\n }\n if (borders.left && (borders.left.hasNoneStyle || borders.left.lineStyle !== 'None')) {\n leftBorder = true;\n }\n if (borders.right && (borders.right.hasNoneStyle || borders.right.lineStyle !== 'None')) {\n rightBorder = true;\n }\n if (borders.horizontal && (borders.horizontal.hasNoneStyle || borders.horizontal.lineStyle !== 'None')) {\n horizontalBorder = true;\n }\n if (borders.vertical && (borders.vertical.hasNoneStyle || borders.vertical.lineStyle !== 'None')) {\n verticalBorder = true;\n }\n if (borders.diagonalDown && (borders.diagonalDown.hasNoneStyle || borders.diagonalDown.lineStyle !== 'None')) {\n diagonalDownBorder = true;\n }\n if (borders.diagonalUp && (borders.diagonalUp.hasNoneStyle || borders.diagonalUp.lineStyle !== 'None')) {\n diagonalUpBorder = true;\n }\n if (!(!topBorder || !bottomBorder || !leftBorder || !rightBorder)) {\n if (!(!topBorder || !bottomBorder || !leftBorder || !rightBorder || !horizontalBorder\n || !verticalBorder || diagonalUpBorder || diagonalDownBorder)) {\n if ((topBorder && bottomBorder && leftBorder && rightBorder && horizontalBorder && verticalBorder\n && !diagonalUpBorder && !diagonalDownBorder)) {\n if (borders.top.hasNoneStyle && borders.bottom.hasNoneStyle && borders.left.hasNoneStyle\n && borders.right.hasNoneStyle && borders.horizontal.hasNoneStyle && borders.vertical.hasNoneStyle) {\n this.setSettingPreviewDivElement('none');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('all');\n this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n }\n else if ((leftBorder && bottomBorder && topBorder && rightBorder && !horizontalBorder && !verticalBorder)) {\n if (borders.top.hasNoneStyle && borders.bottom.hasNoneStyle && borders.left.hasNoneStyle\n && borders.right.hasNoneStyle && borders.horizontal.hasNoneStyle && borders.vertical.hasNoneStyle) {\n this.setSettingPreviewDivElement('none');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('box');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n else {\n customBorder = true;\n }\n }\n else {\n customBorder = true;\n }\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n if (customBorder) {\n this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n if (topBorder) {\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (bottomBorder) {\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (leftBorder) {\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (rightBorder) {\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (verticalBorder) {\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (horizontalBorder) {\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n }\n };\n BordersAndShadingDialog.prototype.getLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'Single': return 1;\n case 'Dot': return 2;\n case 'DashSmallGap': return 3;\n case 'DashLargeGap': return 4;\n case 'DashDot': return 5;\n case 'DashDotDot': return 6;\n case 'Double': return 7;\n case 'Triple': return 8;\n case 'ThinThickSmallGap': return 9;\n case 'ThickThinSmallGap': return 10;\n case 'ThinThickThinSmallGap': return 11;\n case 'ThinThickMediumGap': return 12;\n case 'ThickThinMediumGap': return 13;\n case 'ThinThickThinMediumGap': return 14;\n case 'ThinThickLargeGap': return 15;\n case 'ThickThinLargeGap': return 16;\n case 'ThinThickThinLargeGap': return 17;\n case 'SingleWavy': return 18;\n case 'DoubleWavy': return 19;\n case 'DashDotStroked': return 20;\n case 'Emboss3D': return 21;\n case 'Engrave3D': return 22;\n case 'Outset': return 23;\n case 'Inset': return 24;\n case 'Thick': return 25;\n }\n return 0;\n };\n /**\n * @private\n */\n BordersAndShadingDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var k = 0; k < this.target.childNodes.length; k++) {\n this.target.removeChild(this.target.childNodes[k]);\n k--;\n }\n this.target = undefined;\n }\n if (this.cellFormat) {\n this.cellFormat.destroy();\n this.cellFormat = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat.destroy();\n this.tableFormat = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n if (!isNullOrUndefined(this.borderStyle)) {\n this.borderStyle.destroy();\n }\n this.borderStyle = undefined;\n if (!isNullOrUndefined(this.borderColorPicker)) {\n this.borderColorPicker.destroy();\n }\n this.borderColorPicker = undefined;\n if (!isNullOrUndefined(this.shadingColorPicker)) {\n this.shadingColorPicker.destroy();\n }\n this.shadingColorPicker = undefined;\n if (!isNullOrUndefined(this.ulelementShading)) {\n this.ulelementShading.destroy();\n }\n this.ulelementShading = undefined;\n this.noneDivTransparent = undefined;\n this.boxDivTransparent = undefined;\n this.allDivTransparent = undefined;\n this.customDivTransparent = undefined;\n this.previewDiv = undefined;\n this.previewRightDiagonalDiv = undefined;\n this.previewLeftDiagonalDiv = undefined;\n this.previewVerticalDiv = undefined;\n this.previewHorizontalDiv = undefined;\n this.previewDivTopTopContainer = undefined;\n this.previewDivTopTop = undefined;\n this.previewDivTopCenterContainer = undefined;\n this.previewDivTopCenter = undefined;\n this.previewDivTopBottomContainer = undefined;\n this.previewDivTopBottom = undefined;\n this.previewDivLeftDiagonalContainer = undefined;\n this.previewDivLeftDiagonal = undefined;\n this.previewDivBottomLeftContainer = undefined;\n this.previewDivBottomLeft = undefined;\n this.previewDivBottomcenterContainer = undefined;\n this.previewDivBottomcenter = undefined;\n this.previewDivBottomRightContainer = undefined;\n this.previewDivBottomRight = undefined;\n this.previewDivDiagonalRightContainer = undefined;\n this.previewDivDiagonalRight = undefined;\n this.previewDivTopTopTransParent = undefined;\n this.previewDivTopCenterTransParent = undefined;\n this.previewDivTopBottomTransParent = undefined;\n this.previewDivLeftDiagonalTransParent = undefined;\n this.previewDivBottomLeftTransparent = undefined;\n this.previewDivBottomcenterTransparent = undefined;\n this.previewDivBottomRightTransparent = undefined;\n this.previewDivDiagonalRightTransparent = undefined;\n this.shadingContiner = undefined;\n this.noneDiv = undefined;\n this.customDiv = undefined;\n this.allDiv = undefined;\n this.boxDiv = undefined;\n };\n return BordersAndShadingDialog;\n}());\nexport { BordersAndShadingDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement, setCulture } from '@syncfusion/ej2-base';\nimport { CellOptionsDialog } from './index';\n/**\n * The Table options dialog is used to modify default cell margins and cell spacing of selected table.\n */\nvar TableOptionsDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TableOptionsDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.applyTableCellProperties = function () {\n var tableFormat = _this.owner.selection.tableFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value || _this.cellSpaceTextBox.value)\n && (tableFormat.bottomMargin !== _this.bottomMarginBox.value\n || tableFormat.leftMargin !== _this.leftMarginBox.value\n || tableFormat.rightMargin !== _this.rightMarginBox.value\n || tableFormat.topMargin !== _this.topMarginBox.value\n || tableFormat.cellSpacing !== _this.cellSpaceTextBox.value)) {\n _this.owner.owner.tablePropertiesDialogModule.isTableOptionsUpdated = true;\n _this.applyTableOptions(_this.tableFormat);\n _this.owner.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n */\n this.closeCellMarginsDialog = function () {\n _this.owner.dialog.hide();\n _this.owner.dialog.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.changeAllowSpaceCheckBox = function () {\n if (_this.allowSpaceCheckBox.checked) {\n _this.cellSpaceTextBox.enabled = true;\n }\n else {\n _this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n */\n this.removeEvents = function () {\n _this.owner.dialog2.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n this.owner = viewer;\n }\n Object.defineProperty(TableOptionsDialog.prototype, \"tableFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n return this.tableFormatIn = new WTableFormat();\n }\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableOptionsDialog.prototype.getModuleName = function () {\n return 'TableOptionsDialog';\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.initTableOptionsDialog = function (localValue) {\n var instance = this.owner;\n this.target = createElement('div', {\n id: this.owner.owner.containerId + '_insertCellMarginsDialog', className: 'e-de-table-options-dlg'\n });\n this.owner.owner.element.appendChild(this.target);\n var innerDiv = createElement('div', { styles: 'width: 475px;position: relative;height: 180px;' });\n var innerDivLabel = createElement('Label', {\n id: this.target.id + '_innerDivLabel', className: 'e-de-cell-dia-options-label',\n innerHTML: localValue.getConstant('Default cell margins')\n });\n innerDiv.appendChild(innerDivLabel);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue);\n var div = createElement('div', { styles: 'width: 475px; position: relative;' });\n var cellSpaceLabel = createElement('Label', {\n className: 'e-de-cell-dia-options-label',\n id: this.target.id + '_cellSpaceLabel'\n });\n cellSpaceLabel.innerHTML = localValue.getConstant('Default cell spacing');\n div.appendChild(cellSpaceLabel);\n var table2 = createElement('TABLE', {\n styles: 'height: 30px;padding-bottom: 15px;'\n });\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var allowSpaceCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_cellcheck'\n });\n var td6 = createElement('td', { styles: 'padding-left: 15px;', });\n this.cellspacingTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_cellspacing'\n });\n td5.appendChild(allowSpaceCheckBox);\n td6.appendChild(this.cellspacingTextBox);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n table2.appendChild(tr3);\n div.appendChild(table2);\n var divBtn = document.createElement('div');\n this.target.appendChild(div);\n this.target.appendChild(divBtn);\n this.cellSpaceTextBox = new NumericTextBox({\n value: 0, min: 0, max: 264.5, width: 150,\n decimals: 2, enablePersistence: false\n });\n this.cellSpaceTextBox.appendTo(this.cellspacingTextBox);\n this.allowSpaceCheckBox = new CheckBox({\n label: localValue.getConstant('Allow spacing between cells'),\n change: this.changeAllowSpaceCheckBox,\n cssClass: 'e-de-tbl-margin-sub-header',\n });\n this.allowSpaceCheckBox.appendTo(allowSpaceCheckBox);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var tableFormat = this.owner.selection.tableFormat;\n this.cellSpaceTextBox.value = tableFormat.cellSpacing;\n this.bottomMarginBox.value = tableFormat.bottomMargin;\n this.topMarginBox.value = tableFormat.topMargin;\n this.rightMarginBox.value = tableFormat.rightMargin;\n this.leftMarginBox.value = tableFormat.leftMargin;\n if (tableFormat.cellSpacing > 0) {\n this.allowSpaceCheckBox.checked = true;\n this.cellSpaceTextBox.enabled = true;\n }\n else {\n this.allowSpaceCheckBox.checked = false;\n this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applySubTableOptions = function (tableFormat) {\n this.owner.owner.editorHistory.initComplexHistory(this.owner.selection, 'TableMarginsSelection');\n this.applyTableOptionsHistory(tableFormat);\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentHistoryInfo)) {\n this.owner.owner.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applyTableOptionsHelper = function (tableFormat) {\n this.applySubTableOptionsHelper(tableFormat);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applyTableOptionsHistory = function (tableFormat) {\n this.owner.owner.editorModule.initHistory('TableOptions');\n this.applySubTableOptionsHelper(tableFormat);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applySubTableOptionsHelper = function (tableFormat) {\n var ownerTable = this.owner.selection.start.currentWidget.paragraph.associatedCell.ownerTable;\n ownerTable = ownerTable.combineWidget(this.owner);\n var currentTableFormat = ownerTable.tableFormat;\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentBaseHistoryInfo)) {\n this.owner.owner.editorHistory.currentBaseHistoryInfo.addModifiedTableOptions(currentTableFormat);\n }\n currentTableFormat.cellSpacing = tableFormat.cellSpacing;\n currentTableFormat.leftMargin = tableFormat.leftMargin;\n currentTableFormat.topMargin = tableFormat.topMargin;\n currentTableFormat.rightMargin = tableFormat.rightMargin;\n currentTableFormat.bottomMargin = tableFormat.bottomMargin;\n this.owner.owner.tablePropertiesDialogModule.calculateGridValue(ownerTable);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applyTableOptions = function (tableFormat) {\n tableFormat.leftMargin = this.leftMarginBox.value;\n tableFormat.topMargin = this.topMarginBox.value;\n tableFormat.bottomMargin = this.bottomMarginBox.value;\n tableFormat.rightMargin = this.rightMarginBox.value;\n if (this.allowSpaceCheckBox.checked) {\n tableFormat.cellSpacing = this.cellSpaceTextBox.value;\n }\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.show = function () {\n var documentLocale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n documentLocale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTableOptionsDialog(documentLocale);\n }\n this.loadCellMarginsDialog();\n this.owner.dialog.header = documentLocale.getConstant('Table Options');\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = undefined;\n this.owner.dialog.position = { X: 'center', Y: 'center' };\n // this.owner.dialog.cssClass = 'e-de-table-margin-size';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.open = undefined;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.removeEvents;\n this.owner.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: documentLocale.getConstant('Ok'), cssClass: 'e-flat e-table-cell-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: documentLocale.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var p = 0; p < this.target.childNodes.length; p++) {\n this.target.removeChild(this.target.childNodes[p]);\n p--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.owner = undefined;\n this.cellspacingTextBox = undefined;\n this.allowSpaceCheckBox = undefined;\n };\n return TableOptionsDialog;\n}());\nexport { TableOptionsDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WCellFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement, setCulture } from '@syncfusion/ej2-base';\n/**\n * The Cell options dialog is used to modify margins of selected cells.\n */\nvar CellOptionsDialog = /** @class */ (function () {\n /**\n * @private\n */\n function CellOptionsDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.removeEvents = function () {\n _this.owner.dialog2.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.changeSameAsTable = function () {\n if (_this.sameAsTableCheckBox.checked) {\n _this.leftMarginBox.enabled = false;\n _this.rightMarginBox.enabled = false;\n _this.bottomMarginBox.enabled = false;\n _this.topMarginBox.enabled = false;\n }\n else {\n _this.leftMarginBox.enabled = true;\n _this.rightMarginBox.enabled = true;\n _this.bottomMarginBox.enabled = true;\n _this.topMarginBox.enabled = true;\n }\n };\n /**\n * @private\n */\n this.applyTableCellProperties = function () {\n var cellFormat = _this.owner.selection.cellFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value) &&\n (cellFormat.bottomMargin !== _this.bottomMarginBox.value || cellFormat.leftMargin !== _this.leftMarginBox.value\n || cellFormat.rightMargin !== _this.rightMarginBox.value || cellFormat.topMargin !== _this.topMarginBox.value)) {\n _this.owner.owner.tablePropertiesDialogModule.isCellOptionsUpdated = true;\n _this.applyTableOptions(_this.cellFormat);\n _this.owner.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n */\n this.closeCellMarginsDialog = function () {\n _this.owner.dialog.hide();\n _this.owner.dialog.element.style.pointerEvents = '';\n };\n this.owner = viewer;\n }\n Object.defineProperty(CellOptionsDialog.prototype, \"cellFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n CellOptionsDialog.prototype.getModuleName = function () {\n return 'CellOptionsDialog';\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.initCellMarginsDialog = function (localValue) {\n var instance = this.owner;\n this.target = createElement('div', {\n id: this.owner.owner.containerId + '_tableCellMarginsDialog', className: 'e-de-table-cell-margin-dlg'\n });\n this.owner.owner.element.appendChild(this.target);\n var innerDiv = createElement('div', { styles: 'width: 475px;position: relative;height: 165px;' });\n var innerDivLabel = createElement('Label', {\n className: 'e-de-cell-dia-options-label', id: this.target.id + '_innerDivLabel'\n });\n innerDivLabel.innerHTML = localValue.getConstant('Cell margins');\n innerDiv.appendChild(innerDivLabel);\n var table = createElement('TABLE', {\n styles: 'height: 40px;padding-bottom: 0px;', className: 'e-de-cell-margin-top'\n });\n var tr = createElement('tr');\n var td = createElement('td', { className: 'e-de-tbl-btn-seperator' });\n var sameAsTableCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_sameAsCheckBox'\n });\n td.appendChild(sameAsTableCheckBox);\n tr.appendChild(td);\n table.appendChild(tr);\n innerDiv.appendChild(table);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue);\n var divBtn = document.createElement('div');\n this.target.appendChild(divBtn);\n this.sameAsTableCheckBox = new CheckBox({\n label: localValue.getConstant('Same as the whole table'),\n change: this.changeSameAsTable\n });\n this.sameAsTableCheckBox.appendTo(sameAsTableCheckBox);\n this.sameAsTableCheckBox.addEventListener('change', this.changeSameAsTable);\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.show = function () {\n var localizeValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localizeValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initCellMarginsDialog(localizeValue);\n }\n this.loadCellMarginsDialog();\n this.owner.dialog.header = localizeValue.getConstant('Cell Options');\n this.owner.dialog.position = { X: 'center', Y: 'top' };\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = undefined;\n this.owner.dialog.open = undefined;\n this.owner.dialog.close = this.removeEvents;\n this.owner.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: localizeValue.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: localizeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var cellFormat = this.owner.selection.cellFormat;\n this.sameAsTable = isNullOrUndefined(cellFormat.leftMargin || cellFormat.topMargin\n || cellFormat.rightMargin || cellFormat.bottomMargin);\n if (this.sameAsTable) {\n var tableFormat = this.owner.selection.tableFormat;\n this.loadCellProperties(tableFormat, false, true);\n }\n else {\n this.loadCellProperties(cellFormat, true, false);\n }\n };\n CellOptionsDialog.prototype.loadCellProperties = function (format, enableTextBox, enableCheckBox) {\n this.leftMarginBox.value = format.leftMargin;\n this.rightMarginBox.value = format.rightMargin;\n this.topMarginBox.value = format.topMargin;\n this.bottomMarginBox.value = format.bottomMargin;\n this.leftMarginBox.enabled = enableTextBox;\n this.rightMarginBox.enabled = enableTextBox;\n this.topMarginBox.enabled = enableTextBox;\n this.bottomMarginBox.enabled = enableTextBox;\n this.sameAsTableCheckBox.checked = enableCheckBox;\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applySubCellOptions = function (cellFormat) {\n this.owner.owner.editorHistory.initComplexHistory(this.owner.selection, 'CellMarginsSelection');\n this.owner.owner.editorModule.initHistory('CellOptions');\n /* tslint:disable:max-line-length */\n var startTable = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n startTable = startTable.combineWidget(this.owner);\n this.applyCellmarginsValue(this.owner.selection.start.paragraph.associatedCell.ownerRow.combineWidget(this.owner), this.owner.selection.start, this.owner.selection.end, cellFormat);\n this.owner.owner.editorModule.reLayout(this.owner.selection, false);\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentHistoryInfo)) {\n this.owner.owner.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applyCellmarginsValue = function (row, start, end, cellFormat) {\n this.applyCellMarginsInternal(row, cellFormat);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyCellmarginsValue(newRow, start, end, cellFormat);\n }\n };\n CellOptionsDialog.prototype.applyCellMarginsInternal = function (row, cellFormat) {\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentBaseHistoryInfo)) {\n var currentFormat = row.childWidgets[0].cellFormat;\n /* tslint:disable:max-line-length */\n cellFormat = this.owner.owner.editorHistory.currentBaseHistoryInfo.addModifiedCellOptions(currentFormat, cellFormat, row.ownerTable);\n }\n if (!isNullOrUndefined(cellFormat)) {\n this.applyCellMarginsForCells(row, cellFormat);\n }\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applyCellMarginsForCells = function (row, cellFormat) {\n var rowCells = row.childWidgets;\n this.iterateCells(rowCells, cellFormat);\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.iterateCells = function (cells, cellFormat) {\n for (var i = 0; i < cells.length; i++) {\n this.applySubCellMargins(cells[i].cellFormat, cellFormat);\n }\n this.owner.owner.tablePropertiesDialogModule.calculateGridValue(cells[0].ownerTable);\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applySubCellMargins = function (sourceFormat, cellFormat) {\n sourceFormat.leftMargin = cellFormat.leftMargin;\n sourceFormat.topMargin = cellFormat.topMargin;\n sourceFormat.rightMargin = cellFormat.rightMargin;\n sourceFormat.bottomMargin = cellFormat.bottomMargin;\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applyTableOptions = function (cellFormat) {\n if (!this.sameAsTableCheckBox.checked) {\n cellFormat.leftMargin = this.leftMarginBox.value;\n cellFormat.topMargin = this.topMarginBox.value;\n cellFormat.bottomMargin = this.bottomMarginBox.value;\n cellFormat.rightMargin = this.rightMarginBox.value;\n }\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var y = 0; y < this.target.childNodes.length; y++) {\n this.target.removeChild(this.target.childNodes[y]);\n y--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.owner = undefined;\n this.sameAsTableCheckBox = undefined;\n };\n /**\n * @private\n */\n CellOptionsDialog.getCellMarginDialogElements = function (dialog, div, locale) {\n if (!isNullOrUndefined(dialog)) {\n var table = createElement('TABLE', { className: 'e-de-cell-margin-top' });\n var tr1 = createElement('tr', { styles: 'height: 50px;color:black;' });\n var td1 = createElement('td');\n var topLabel = createElement('label', {\n innerHTML: locale.getConstant('Top'), className: 'e-de-cell-dia-label-common',\n id: dialog.target.id + '_TopLabel'\n });\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%', id: dialog.target.id + '_Top'\n });\n td1.appendChild(topLabel);\n td1.appendChild(topTextBox);\n var td2 = createElement('td', { className: 'e-de-tbl-btn-seperator' });\n var leftLabel = createElement('label', {\n innerHTML: locale.getConstant('Left'), className: 'e-de-cell-dia-label-common',\n id: dialog.target.id + '_leftLabel'\n });\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n styles: 'width:100%', id: dialog.target.id + '_left'\n });\n td2.appendChild(leftLabel);\n td2.appendChild(leftTextBox);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n var tr2 = createElement('tr', { styles: 'height: 50px;color:black;' });\n var td3 = createElement('td', { styles: 'width:40%;' });\n var bottomLabel = createElement('label', {\n innerHTML: locale.getConstant('Bottom'),\n className: 'e-de-cell-dia-label-common', id: dialog.target.id + '_bottomLabel'\n });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n styles: 'width:100%', id: dialog.target.id + '_bottom'\n });\n td3.appendChild(bottomLabel);\n td3.appendChild(bottomTextBox);\n var td4 = createElement('td', { styles: 'width:40%;' });\n var rightLabel = createElement('label', {\n innerHTML: locale.getConstant('Right'), id: dialog.target.id + '_rightLabel',\n className: 'e-de-cell-dia-label-common'\n });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n styles: 'width:100%', id: dialog.target.id + '_right'\n });\n td4.appendChild(rightLabel);\n td4.appendChild(rightTextBox);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n table.appendChild(tr1);\n table.appendChild(tr2);\n div.appendChild(table);\n dialog.target.appendChild(div);\n dialog.topMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150, decimals: 2,\n enablePersistence: false\n });\n dialog.topMarginBox.appendTo(topTextBox);\n dialog.leftMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150,\n decimals: 2, enablePersistence: false\n });\n dialog.leftMarginBox.appendTo(leftTextBox);\n dialog.bottomMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150, decimals: 2,\n enablePersistence: false\n });\n dialog.bottomMarginBox.appendTo(bottomTextBox);\n dialog.rightMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150,\n decimals: 2, enablePersistence: false\n });\n dialog.rightMarginBox.appendTo(rightTextBox);\n }\n };\n return CellOptionsDialog;\n}());\nexport { CellOptionsDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\n/**\n * The Styles dialog is used to create or modify styles.\n */\nvar StylesDialog = /** @class */ (function () {\n /**\n * @private\n */\n function StylesDialog(viewer) {\n var _this = this;\n this.updateStyleNames = function () {\n var collection = _this.owner.owner.viewer.styles.getStyleNames('Paragraph');\n var defaultStyleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'];\n var finalList = collection.concat(defaultStyleNames).filter(function (v, i, a) { return a.indexOf(v) === i; });\n return finalList;\n };\n this.modifyStyles = function () {\n _this.owner.dialog.hide();\n _this.owner.owner.styleDialogModule.show(_this.styleName, _this.localValue.getConstant('Modify Style'));\n };\n /* tslint:disable:no-any */\n this.selectHandler = function (args) {\n _this.styleName = args.text;\n };\n this.addNewStyles = function () {\n _this.owner.dialog.hide();\n _this.owner.owner.styleDialogModule.show();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n StylesDialog.prototype.getModuleName = function () {\n return 'StylesDialog';\n };\n /**\n * @private\n */\n StylesDialog.prototype.initStylesDialog = function (localValue, styles) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_styles';\n this.target = createElement('div', { id: id, className: 'e-de-styles' });\n var headerValue = localValue.getConstant('Styles');\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-styles-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-styles-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-styles-list' });\n commonDiv.appendChild(searchDiv);\n var listviewDiv = createElement('div', { className: 'e-styles-listViewDiv', id: 'styles_listview' });\n searchDiv.appendChild(listviewDiv);\n this.listviewInstance = new ListView({\n dataSource: styles,\n cssClass: 'e-styles-listview',\n });\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-styles-button' });\n commonDiv.appendChild(buttonDiv);\n var newButtonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(newButtonDiv);\n var newButtonElement = createElement('button', { innerHTML: localValue.getConstant('New'), id: 'new' });\n newButtonDiv.appendChild(newButtonElement);\n var newbutton = new Button({ cssClass: 'e-button-custom' });\n newbutton.appendTo(newButtonElement);\n newButtonElement.addEventListener('click', this.addNewStyles);\n var modifybuttonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(modifybuttonDiv);\n var modifyButtonElement = createElement('button', { innerHTML: localValue.getConstant('Modify'), id: 'modify' });\n modifybuttonDiv.appendChild(modifyButtonElement);\n var addbutton = new Button({ cssClass: 'e-button-custom' });\n addbutton.appendTo(modifyButtonElement);\n modifyButtonElement.addEventListener('click', this.modifyStyles);\n };\n /**\n * @private\n */\n StylesDialog.prototype.show = function () {\n var styles = this.updateStyleNames();\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n this.localValue = localValue;\n this.initStylesDialog(localValue, styles);\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.header = 'Styles';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.buttons = [{\n click: this.hideObjects.bind(this),\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n StylesDialog.prototype.hideObjects = function () {\n this.owner.dialog.hide();\n };\n /**\n * @private\n */\n StylesDialog.prototype.destroy = function () {\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n };\n return StylesDialog;\n}());\nexport { StylesDialog };\n","import * as index from '@syncfusion/ej2-documenteditor';\nindex.DocumentEditor.Inject( index.Print,index.SfdtExport,index.WordExport,index.TextExport,index.Selection,index.Search,index.Editor,index.EditorHistory,index.OptionsPane,index.ContextMenu,index.ImageResizer,index.HyperlinkDialog,index.TableDialog,index.BookmarkDialog,index.TableOfContentsDialog,index.PageSetupDialog,index.ParagraphDialog,index.ListDialog,index.StyleDialog,index.StylesDialog,index.BulletsAndNumberingDialog,index.FontDialog,index.TablePropertiesDialog,index.BordersAndShadingDialog,index.TableOptionsDialog,index.CellOptionsDialog);\nexport * from '@syncfusion/ej2-documenteditor';\n","import * as index from '@syncfusion/ej2-dropdowns';\nindex.MultiSelect.Inject( index.CheckBoxSelection);\nexport * from '@syncfusion/ej2-dropdowns';\n","/**\n * Defines types of Cell\n * @hidden\n */\nexport var CellType;\n(function (CellType) {\n /** Defines CellType as Data */\n CellType[CellType[\"Data\"] = 0] = \"Data\";\n /** Defines CellType as Header */\n CellType[CellType[\"Header\"] = 1] = \"Header\";\n /** Defines CellType as Summary */\n CellType[CellType[\"Summary\"] = 2] = \"Summary\";\n /** Defines CellType as GroupSummary */\n CellType[CellType[\"GroupSummary\"] = 3] = \"GroupSummary\";\n /** Defines CellType as CaptionSummary */\n CellType[CellType[\"CaptionSummary\"] = 4] = \"CaptionSummary\";\n /** Defines CellType as Filter */\n CellType[CellType[\"Filter\"] = 5] = \"Filter\";\n /** Defines CellType as Indent */\n CellType[CellType[\"Indent\"] = 6] = \"Indent\";\n /** Defines CellType as GroupCaption */\n CellType[CellType[\"GroupCaption\"] = 7] = \"GroupCaption\";\n /** Defines CellType as GroupCaptionEmpty */\n CellType[CellType[\"GroupCaptionEmpty\"] = 8] = \"GroupCaptionEmpty\";\n /** Defines CellType as Expand */\n CellType[CellType[\"Expand\"] = 9] = \"Expand\";\n /** Defines CellType as HeaderIndent */\n CellType[CellType[\"HeaderIndent\"] = 10] = \"HeaderIndent\";\n /** Defines CellType as StackedHeader */\n CellType[CellType[\"StackedHeader\"] = 11] = \"StackedHeader\";\n /** Defines CellType as DetailHeader */\n CellType[CellType[\"DetailHeader\"] = 12] = \"DetailHeader\";\n /** Defines CellType as DetailExpand */\n CellType[CellType[\"DetailExpand\"] = 13] = \"DetailExpand\";\n /** Defines CellType as CommandColumn */\n CellType[CellType[\"CommandColumn\"] = 14] = \"CommandColumn\";\n})(CellType || (CellType = {}));\n/**\n * Defines types of Render\n * @hidden\n */\nexport var RenderType;\n(function (RenderType) {\n /** Defines RenderType as Header */\n RenderType[RenderType[\"Header\"] = 0] = \"Header\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Summary */\n RenderType[RenderType[\"Summary\"] = 2] = \"Summary\";\n})(RenderType || (RenderType = {}));\n/**\n * Defines Predefined toolbar items.\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Print\"] = 5] = \"Print\";\n ToolbarItem[ToolbarItem[\"Search\"] = 6] = \"Search\";\n ToolbarItem[ToolbarItem[\"ColumnChooser\"] = 7] = \"ColumnChooser\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 8] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"WordExport\"] = 11] = \"WordExport\";\n})(ToolbarItem || (ToolbarItem = {}));\n","/**\n * CellStyle class\n * @private\n */\nvar CellStyle = /** @class */ (function () {\n function CellStyle() {\n this.numFmtId = 0;\n this.backColor = 'none';\n this.fontName = 'Calibri';\n this.fontSize = 14;\n this.fontColor = '#000000';\n this.italic = false;\n this.bold = false;\n this.underline = false;\n this.wrapText = false;\n this.hAlign = 'general';\n this.vAlign = 'bottom';\n this.indent = 0;\n this.numberFormat = 'GENERAL';\n this.type = 'datetime';\n this.borders = new Borders();\n this.isGlobalStyle = false;\n }\n return CellStyle;\n}());\nexport { CellStyle };\n/**\n * Font Class\n * @private\n */\nvar Font = /** @class */ (function () {\n function Font() {\n this.sz = 14;\n this.name = 'Calibri';\n this.u = false;\n this.b = false;\n this.i = false;\n this.color = 'FF000000';\n }\n return Font;\n}());\nexport { Font };\n/**\n * CellXfs class\n * @private\n */\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\n/**\n * Alignment class\n * @private\n */\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\n/**\n * CellStyleXfs class\n * @private\n */\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\n/**\n * CellStyles class\n * @private\n */\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\n/**\n * NumFmt class\n * @private\n */\nvar NumFmt = /** @class */ (function () {\n function NumFmt(id, code) {\n this.numFmtId = id;\n this.formatCode = code;\n }\n return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n * @private\n */\nvar Border = /** @class */ (function () {\n function Border(mLine, mColor) {\n this.lineStyle = mLine;\n this.color = mColor;\n }\n return Border;\n}());\nexport { Border };\n/**\n * Borders class\n * @private\n */\nvar Borders = /** @class */ (function () {\n function Borders() {\n this.left = new Border('none', '#FFFFFF');\n this.right = new Border('none', '#FFFFFF');\n this.top = new Border('none', '#FFFFFF');\n this.bottom = new Border('none', '#FFFFFF');\n this.all = new Border('none', '#FFFFFF');\n }\n return Borders;\n}());\nexport { Borders };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * Worksheet class\n * @private\n */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Cells class\n * @private\n */\nvar Cells = /** @class */ (function (_super) {\n __extends(Cells, _super);\n function Cells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (cell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.index === cell.index) {\n _this[count] = cell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(cell);\n }\n };\n return _this;\n }\n return Cells;\n}(Array));\nexport { Cells };\n","/**\n * Column class\n * @private\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * Row class\n * @private\n */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\n * @private\n */\nvar Rows = /** @class */ (function (_super) {\n __extends(Rows, _super);\n function Rows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (row) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var r = _a[_i];\n if (r.index === row.index) {\n _this[count] = row;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(row);\n }\n };\n return _this;\n }\n return Rows;\n}(Array));\nexport { Rows };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * Worksheets class\n * @private\n */\nvar Worksheets = /** @class */ (function (_super) {\n __extends(Worksheets, _super);\n function Worksheets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Worksheets;\n}(Array));\nexport { Worksheets };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\n/**\n * Worksheet class\n * @private\n */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n this.showGridLines = true;\n }\n return Worksheet;\n}());\nexport { Worksheet };\n/**\n * Hyperlink class\n * @private\n */\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\n/**\n * Grouping class\n * @private\n */\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\n/**\n * FreezePane class\n * @private\n */\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\n/**\n * MergeCell\n * @private\n */\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n * @private\n */\nvar MergeCells = /** @class */ (function (_super) {\n __extends(MergeCells, _super);\n function MergeCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (mergeCell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var mCell = _a[_i];\n if (MergeCells.isIntersecting(mCell, mergeCell)) {\n var intersectingCell = new MergeCell();\n intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n _this[count] = intersectingCell;\n mergeCell = intersectingCell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(mergeCell);\n }\n return mergeCell;\n };\n return _this;\n }\n MergeCells.isIntersecting = function (base, compare) {\n return (base.x <= compare.x + compare.width)\n && (compare.x <= base.x + base.width)\n && (base.y <= compare.y + compare.height)\n && (compare.y <= base.y + base.height);\n };\n return MergeCells;\n}(Array));\nexport { MergeCells };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n// import { IValueFormatter } from '../base/interface';\n/**\n * ValueFormatter class to globalize the value.\n * @private\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n // if (!isNullOrUndefined(cultureName)) {\n // this.intl.culture = cultureName;\n // }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n // if ((format).type) {\n // return this.intl.getDateParser(format);\n // } else {\n // return this.intl.getNumberParser(format);\n // }\n // }\n // public fromView(value: string, format: Function, type?: string): string | number | Date {\n // if (type === 'date' || type === 'datetime' || type === 'number') {\n // return format(value);\n // } else {\n // return value;\n // }\n // }\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n // public setCulture(cultureName: string): void {\n // if (!isNullOrUndefined(cultureName)) {\n // setCulture(cultureName);\n // }\n // }\n /* tslint:disable:no-any */\n ValueFormatter.prototype.displayText = function (value, format) {\n return this.toView(value, this.getFormatFunction(format));\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\n/**\n * CsvHelper class\n * @private\n */\nvar CsvHelper = /** @class */ (function () {\n /* tslint:disable:no-any */\n function CsvHelper(json) {\n this.csvStr = '';\n this.formatter = new ValueFormatter();\n this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n if (json.styles !== null && json.styles !== undefined) {\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parseWorksheet(json.worksheets[0]);\n }\n //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n }\n CsvHelper.prototype.parseWorksheet = function (json) {\n //Rows\n if (json.rows !== null && json.rows !== undefined) {\n this.parseRows(json.rows);\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRows = function (rows) {\n var count = 1;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n //Row index\n if (row.index !== null && row.index !== undefined) {\n while (count < row.index) {\n this.csvStr += '\\n';\n count++;\n }\n this.parseRow(row);\n }\n else {\n throw Error('Row index is missing.');\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRow = function (row) {\n if (row.cells !== null && row.cells !== undefined) {\n var count = 1;\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n //cell index\n if (cell.index !== null && cell.index !== undefined) {\n while (count < cell.index) {\n this.csvStr += ',';\n count++;\n }\n this.parseCell(cell);\n }\n else {\n throw Error('Cell index is missing.');\n }\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseCell = function (cell) {\n var csv = this.csvStr;\n if (cell.value !== undefined) {\n if (cell.value instanceof Date) {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else if (typeof (cell.value) === 'boolean') {\n csv += cell.value ? 'TRUE' : 'FALSE';\n }\n else if (typeof (cell.value) === 'number') {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else {\n csv += this.parseCellValue(cell.value);\n }\n }\n this.csvStr = csv;\n };\n CsvHelper.prototype.parseCellValue = function (value) {\n if (value.indexOf(',') !== -1) {\n return value = '\\\"' + value + '\\\"';\n }\n else {\n return value;\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n */\n CsvHelper.prototype.save = function (fileName) {\n this.buffer = new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(this.buffer, fileName);\n }\n else {\n var dataUrl_1 = window.URL.createObjectURL(this.buffer);\n var dwlLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n dwlLink.download = fileName;\n dwlLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n dwlLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n });\n }\n };\n CsvHelper.prototype.saveAsBlob = function () {\n return new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n };\n return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\n * @private\n */\nvar BlobHelper = /** @class */ (function () {\n function BlobHelper() {\n /* tslint:disable:no-any */\n this.parts = [];\n }\n /* tslint:disable:no-any */\n BlobHelper.prototype.append = function (part) {\n this.parts.push(part);\n this.blob = undefined; // Invalidate the blob\n };\n BlobHelper.prototype.getBlob = function () {\n return new Blob(this.parts, { type: 'text/plain' });\n };\n return BlobHelper;\n}());\nexport { BlobHelper };\n","import { Worksheets } from './worksheets';\nimport { Worksheet, FreezePane, MergeCell, MergeCells, HyperLink, Grouping } from './worksheet';\nimport { CellStyle, Font, Borders, CellXfs, Alignment, NumFmt, CellStyleXfs, CellStyles } from './cell-style';\nimport { Column } from './column';\nimport { Row, Rows } from './row';\nimport { Cell, Cells } from './cell';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { CsvHelper } from './csv-helper';\nimport { Internationalization, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BlobHelper } from './blob-helper';\n/**\n * Workbook class\n */\nvar Workbook = /** @class */ (function () {\n /* tslint:disable:no-any */\n function Workbook(json, saveType, culture, currencyString) {\n this.sharedStringCount = 0;\n this.unitsProportions = [\n 96 / 75.0,\n 96 / 300.0,\n 96,\n 96 / 25.4,\n 96 / 2.54,\n 1,\n 96 / 72.0,\n 96 / 72.0 / 12700,\n ];\n /* tslint:disable:no-any */\n this.hyperlinkStyle = { fontColor: '#0000FF', underline: true };\n if (culture !== undefined) {\n this.culture = culture;\n }\n else {\n this.culture = 'en-US';\n }\n if (currencyString !== undefined) {\n this.currency = currencyString;\n }\n else {\n this.currency = 'USD';\n }\n this.intl = new Internationalization(this.culture);\n this.mSaveType = saveType;\n if (saveType === 'xlsx') {\n this.mArchive = new ZipArchive();\n this.sharedString = [];\n this.mFonts = [];\n this.mBorders = [];\n this.mStyles = [];\n this.printTitles = new Map();\n this.cellStyles = new Map();\n this.mNumFmt = new Map();\n this.mFills = new Map();\n this.mStyles.push(new CellStyle());\n this.mFonts.push(new Font());\n /* tslint:disable */\n this.cellStyles.set('Normal', new CellStyles());\n /* tslint:enable */\n this.mCellXfs = [];\n this.mCellStyleXfs = [];\n if (json.styles !== null && json.styles !== undefined) {\n /* tslint:disable-next-line:no-any */\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined) {\n if (!this.cellStyles.has(json.styles[i].name)) {\n var cellStyle = new CellStyle();\n cellStyle.isGlobalStyle = true;\n this.parserCellStyle(json.styles[i], cellStyle, 'none');\n var cellStylesIn = new CellStyles();\n cellStylesIn.name = cellStyle.name;\n cellStylesIn.xfId = (cellStyle.index - 1);\n this.cellStyles.set(cellStylesIn.name, cellStylesIn);\n /* tslint:disable-next-line:no-any */\n var tFormat = {};\n if (json.styles[i].numberFormat !== undefined) {\n tFormat.format = json.styles[i].numberFormat;\n }\n if (json.styles[i].type !== undefined) {\n tFormat.type = json.styles[i].type;\n }\n else {\n tFormat.type = 'datetime';\n }\n if (tFormat.format !== undefined) {\n this.globalStyles.set(json.styles[i].name, tFormat);\n }\n }\n else {\n throw Error('Style name ' + json.styles[i].name + ' is already existed');\n }\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parserWorksheets(json.worksheets);\n }\n else {\n throw Error('Worksheet is expected.');\n }\n // Parses the BuiltInProperties data to DOM. \n if (json.builtInProperties !== null && json.builtInProperties !== undefined) {\n this.builtInProperties = new BuiltInProperties();\n this.parserBuiltInProperties(json.builtInProperties, this.builtInProperties);\n }\n }\n else {\n this.csvHelper = new CsvHelper(json);\n }\n }\n /* tslint:disable:no-any */\n Workbook.prototype.parserBuiltInProperties = function (jsonBuiltInProperties, builtInProperties) {\n //Author\n if (jsonBuiltInProperties.author !== null && jsonBuiltInProperties.author !== undefined) {\n builtInProperties.author = jsonBuiltInProperties.author;\n }\n //Comments\n if (jsonBuiltInProperties.comments !== null && jsonBuiltInProperties.comments !== undefined) {\n builtInProperties.comments = jsonBuiltInProperties.comments;\n }\n //Category\n if (jsonBuiltInProperties.category !== null && jsonBuiltInProperties.category !== undefined) {\n builtInProperties.category = jsonBuiltInProperties.category;\n }\n //Company\n if (jsonBuiltInProperties.company !== null && jsonBuiltInProperties.company !== undefined) {\n builtInProperties.company = jsonBuiltInProperties.company;\n }\n //Manager\n if (jsonBuiltInProperties.manager !== null && jsonBuiltInProperties.manager !== undefined) {\n builtInProperties.manager = jsonBuiltInProperties.manager;\n }\n //Subject\n if (jsonBuiltInProperties.subject !== null && jsonBuiltInProperties.subject !== undefined) {\n builtInProperties.subject = jsonBuiltInProperties.subject;\n }\n //Title\n if (jsonBuiltInProperties.title !== null && jsonBuiltInProperties.title !== undefined) {\n builtInProperties.title = jsonBuiltInProperties.title;\n }\n //Creation date\n if (jsonBuiltInProperties.createdDate !== null && jsonBuiltInProperties.createdDate !== undefined) {\n builtInProperties.createdDate = jsonBuiltInProperties.createdDate;\n }\n //Modified date\n if (jsonBuiltInProperties.modifiedDate !== null && jsonBuiltInProperties.modifiedDate !== undefined) {\n builtInProperties.modifiedDate = jsonBuiltInProperties.modifiedDate;\n }\n //Tags\n if (jsonBuiltInProperties.tags !== null && jsonBuiltInProperties.tags !== undefined) {\n builtInProperties.tags = jsonBuiltInProperties.tags;\n }\n //Status\n if (jsonBuiltInProperties.status !== null && jsonBuiltInProperties.status !== undefined) {\n builtInProperties.status = jsonBuiltInProperties.status;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserWorksheets = function (json) {\n this.worksheets = new Worksheets();\n var length = json.length;\n for (var i = 0; i < length; i++) {\n var jsonSheet = json[i];\n var sheet = new Worksheet();\n this.mergeCells = new MergeCells();\n this.mergedCellsStyle = new Map();\n this.mHyperLinks = [];\n //Name\n if (jsonSheet.name !== null && jsonSheet.name !== undefined) {\n sheet.name = jsonSheet.name;\n }\n else {\n sheet.name = 'Sheet' + (i + 1).toString();\n }\n sheet.index = (i + 1);\n //Columns\n if (jsonSheet.columns !== null && jsonSheet.columns !== undefined) {\n this.parserColumns(jsonSheet.columns, sheet);\n }\n //Rows\n if (jsonSheet.rows !== null && jsonSheet.rows !== undefined) {\n this.parserRows(jsonSheet.rows, sheet);\n }\n //showGridLines\n if (jsonSheet.showGridLines !== null && jsonSheet.showGridLines !== undefined) {\n sheet.showGridLines = jsonSheet.showGridLines;\n }\n //FreezePanes\n if (jsonSheet.freeze !== null && jsonSheet.freeze !== undefined) {\n this.parserFreezePanes(jsonSheet.freeze, sheet);\n }\n //Print Title\n if (jsonSheet.printTitle !== null && jsonSheet.printTitle !== undefined) {\n this.parserPrintTitle(jsonSheet.printTitle, sheet);\n }\n if (jsonSheet.pageSetup !== undefined) {\n if (jsonSheet.pageSetup.isSummaryRowBelow !== undefined) {\n sheet.isSummaryRowBelow = jsonSheet.pageSetup.isSummaryRowBelow;\n }\n }\n sheet.index = (i + 1);\n sheet.mergeCells = this.mergeCells;\n sheet.hyperLinks = this.mHyperLinks;\n this.worksheets.push(sheet);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.mergeOptions = function (fromJson, toJson) {\n /* tslint:disable:no-any */\n var result = {};\n this.applyProperties(fromJson, result);\n this.applyProperties(toJson, result);\n return result;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.applyProperties = function (sourceJson, destJson) {\n var keys = Object.keys(sourceJson);\n for (var index = 0; index < keys.length; index++) {\n if (keys[index] !== 'name') {\n destJson[keys[index]] = sourceJson[keys[index]];\n }\n }\n };\n Workbook.prototype.getCellName = function (row, column) {\n return this.getColumnName(column) + row.toString();\n };\n Workbook.prototype.getColumnName = function (col) {\n col--;\n var strColumnName = '';\n do {\n var iCurrentDigit = col % 26;\n col = col / 26 - 1;\n strColumnName = String.fromCharCode(65 + iCurrentDigit) + strColumnName;\n } while (col >= 0);\n return strColumnName;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserPrintTitle = function (json, sheet) {\n var printTitleName = '';\n var titleRowName;\n if (json.fromRow !== null && json.fromRow !== undefined) {\n var fromRow = json.fromRow;\n var toRow = void 0;\n if (json.toRow !== null && json.toRow !== undefined) {\n toRow = json.toRow;\n }\n else {\n toRow = json.fromRow;\n }\n titleRowName = '$' + fromRow + ':$' + toRow;\n }\n var titleColName;\n if (json.fromColumn !== null && json.fromColumn !== undefined) {\n var fromColumn = json.fromColumn;\n var toColumn = void 0;\n if (json.toColumn !== null && json.toColumn !== undefined) {\n toColumn = json.toColumn;\n }\n else {\n toColumn = json.fromColumn;\n }\n titleColName = '$' + this.getColumnName(fromColumn) + ':$' + this.getColumnName(toColumn);\n }\n if (titleRowName !== undefined) {\n printTitleName += (sheet.name + '!' + titleRowName);\n }\n if (titleColName !== undefined && titleRowName !== undefined) {\n printTitleName += ',' + (sheet.name + '!' + titleColName);\n }\n else if (titleColName !== undefined) {\n printTitleName += (sheet.name + '!' + titleColName);\n }\n if (printTitleName !== '') {\n this.printTitles.set(sheet.index - 1, printTitleName);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserFreezePanes = function (json, sheet) {\n sheet.freezePanes = new FreezePane();\n if (json.row !== null && json.row !== undefined) {\n sheet.freezePanes.row = json.row;\n }\n else {\n sheet.freezePanes.row = 0;\n }\n if (json.column !== null && json.column !== undefined) {\n sheet.freezePanes.column = json.column;\n }\n else {\n sheet.freezePanes.column = 0;\n }\n sheet.freezePanes.leftCell = this.getCellName(sheet.freezePanes.row + 1, sheet.freezePanes.column + 1);\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserColumns = function (json, sheet) {\n var columnsLength = json.length;\n sheet.columns = [];\n for (var column = 0; column < columnsLength; column++) {\n var col = new Column();\n if (json[column].index !== null && json[column].index !== undefined) {\n col.index = json[column].index;\n }\n else {\n throw Error('Column index is missing.');\n }\n if (json[column].width !== null && json[column].width !== undefined) {\n col.width = json[column].width;\n }\n sheet.columns.push(col);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRows = function (json, sheet) {\n var rowsLength = json.length;\n sheet.rows = new Rows();\n var rowId = 0;\n for (var r = 0; r < rowsLength; r++) {\n var row = this.parserRow(json[r], rowId);\n rowId = row.index;\n sheet.rows.add(row);\n }\n this.insertMergedCellsStyle(sheet);\n };\n Workbook.prototype.insertMergedCellsStyle = function (sheet) {\n var _this = this;\n if (this.mergeCells.length > 0) {\n this.mergedCellsStyle.forEach(function (value, key) {\n var row = sheet.rows.filter(function (item) {\n return item.index === value.y;\n })[0];\n if (!isNullOrUndefined(row)) {\n var cell = row.cells.filter(function (item) {\n return item.index === value.x;\n })[0];\n if (!isNullOrUndefined(cell)) {\n cell.styleIndex = value.styleIndex;\n }\n else {\n var cells = row.cells.filter(function (item) {\n return item.index <= value.x;\n });\n var insertIndex = 0;\n if (cells.length > 0) {\n insertIndex = row.cells.indexOf(cells[cells.length - 1]) + 1;\n }\n row.cells.splice(insertIndex, 0, _this.createCell(value, key));\n }\n }\n else {\n var rows = sheet.rows.filter(function (item) {\n return item.index <= value.y;\n });\n var rowToInsert = new Row();\n rowToInsert.index = value.y;\n rowToInsert.cells = new Cells();\n rowToInsert.cells.add(_this.createCell(value, key));\n var insertIndex = 0;\n if (rows.length > 0) {\n insertIndex = sheet.rows.indexOf(rows[rows.length - 1]) + 1;\n }\n sheet.rows.splice(insertIndex, 0, rowToInsert);\n }\n });\n }\n };\n Workbook.prototype.createCell = function (value, key) {\n var cellToInsert = new Cell();\n cellToInsert.refName = key;\n cellToInsert.index = value.x;\n cellToInsert.cellStyle = new CellStyle();\n cellToInsert.styleIndex = value.styleIndex;\n return cellToInsert;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRow = function (json, rowIndex) {\n var row = new Row();\n //Row Height\n if (json.height !== null && json.height !== undefined) {\n row.height = json.height;\n }\n //Row index\n if (json.index !== null && json.index !== undefined) {\n row.index = json.index;\n }\n else {\n throw Error('Row index is missing.');\n }\n if (json.grouping !== null && json.grouping !== undefined) {\n this.parseGrouping(json.grouping, row);\n }\n this.parseCells(json.cells, row);\n return row;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseGrouping = function (json, row) {\n row.grouping = new Grouping();\n if (json.outlineLevel !== undefined) {\n row.grouping.outlineLevel = json.outlineLevel;\n }\n if (json.isCollapsed !== undefined) {\n row.grouping.isCollapsed = json.isCollapsed;\n }\n if (json.isHidden !== undefined) {\n row.grouping.isHidden = json.isHidden;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseCells = function (json, row) {\n row.cells = new Cells();\n var cellsLength = json !== undefined ? json.length : 0;\n var spanMin = 1;\n var spanMax = 1;\n var curCellIndex = 0;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable:no-any */\n var jsonCell = json[cellId];\n var cell = new Cell();\n //cell index\n if (jsonCell.index !== null && jsonCell.index !== undefined) {\n cell.index = jsonCell.index;\n }\n else {\n throw Error('Cell index is missing.');\n }\n if (cell.index < spanMin) {\n spanMin = cell.index;\n }\n else if (cell.index > spanMax) {\n spanMax = cell.index;\n }\n //Update the Cell name\n cell.refName = this.getCellName(row.index, cell.index);\n //Row span\n if (jsonCell.rowSpan !== null && jsonCell.rowSpan !== undefined) {\n cell.rowSpan = jsonCell.rowSpan - 1;\n }\n else {\n cell.rowSpan = 0;\n }\n //Column span\n if (jsonCell.colSpan !== null && jsonCell.colSpan !== undefined) {\n cell.colSpan = jsonCell.colSpan - 1;\n }\n else {\n cell.colSpan = 0;\n }\n //Hyperlink\n if (jsonCell.hyperlink !== null && jsonCell.hyperlink !== undefined) {\n var hyperLink = new HyperLink();\n if (jsonCell.hyperlink.target !== undefined) {\n hyperLink.target = jsonCell.hyperlink.target;\n if (jsonCell.hyperlink.displayText !== undefined) {\n cell.value = jsonCell.hyperlink.displayText;\n }\n else {\n cell.value = jsonCell.hyperlink.target;\n }\n cell.type = this.getCellValueType(cell.value);\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n cell.cellStyle = new CellStyle();\n /* tslint:disable-next-line:max-line-length */\n this.parserCellStyle((jsonCell.style !== undefined ? this.mergeOptions(jsonCell.style, this.hyperlinkStyle) : this.hyperlinkStyle), cell.cellStyle, 'string');\n cell.styleIndex = cell.cellStyle.index;\n }\n }\n //Cell value\n if (jsonCell.value !== null && jsonCell.value !== undefined) {\n cell.value = jsonCell.value;\n cell.type = this.getCellValueType(cell.value);\n }\n if (jsonCell.style !== null && jsonCell.style !== undefined && cell.styleIndex === undefined) {\n cell.cellStyle = new CellStyle();\n if (cell.value instanceof Date) {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type, 14);\n }\n else {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type);\n }\n cell.styleIndex = cell.cellStyle.index;\n }\n else if (cell.value instanceof Date) {\n cell.cellStyle = new CellStyle();\n this.parserCellStyle({}, cell.cellStyle, cell.type, 14);\n cell.styleIndex = cell.cellStyle.index;\n }\n this.parseCellType(cell);\n this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\n row.cells.add(cell);\n curCellIndex = (cell.index + 1);\n }\n row.spans = (spanMin) + ':' + (spanMax);\n };\n Workbook.prototype.applyGlobalStyle = function (json, cellStyle) {\n var index = 0;\n if (this.cellStyles.has(json.name)) {\n cellStyle.index = this.mStyles.filter(function (a) { return (a.name === json.name); })[0].index;\n cellStyle.name = json.name;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserCellStyle = function (json, cellStyle, cellType, defStyleIndex) {\n //name\n if (json.name !== null && json.name !== undefined) {\n if (cellStyle.isGlobalStyle) {\n cellStyle.name = json.name;\n }\n else {\n this.applyGlobalStyle(json, cellStyle);\n return;\n }\n }\n //background color\n if (json.backColor !== null && json.backColor !== undefined) {\n cellStyle.backColor = json.backColor;\n }\n //borders\n //leftBorder\n cellStyle.borders = new Borders();\n //AllBorder\n if (json.borders !== null && json.borders !== undefined) {\n this.parserBorder(json.borders, cellStyle.borders.all);\n }\n //leftborder\n if (json.leftBorder !== null && json.leftBorder !== undefined) {\n this.parserBorder(json.leftBorder, cellStyle.borders.left);\n }\n //rightBorder\n if (json.rightBorder !== null && json.rightBorder !== undefined) {\n this.parserBorder(json.rightBorder, cellStyle.borders.right);\n }\n //topBorder\n if (json.topBorder !== null && json.topBorder !== undefined) {\n this.parserBorder(json.topBorder, cellStyle.borders.top);\n }\n //bottomBorder\n if (json.bottomBorder !== null && json.bottomBorder !== undefined) {\n this.parserBorder(json.bottomBorder, cellStyle.borders.bottom);\n }\n //fontName\n if (json.fontName !== null && json.fontName !== undefined) {\n cellStyle.fontName = json.fontName;\n }\n //fontSize\n if (json.fontSize !== null && json.fontSize !== undefined) {\n cellStyle.fontSize = json.fontSize;\n }\n //fontColor\n if (json.fontColor !== null && json.fontColor !== undefined) {\n cellStyle.fontColor = json.fontColor;\n }\n //italic\n if (json.italic !== null && json.italic !== undefined) {\n cellStyle.italic = json.italic;\n }\n //bold\n if (json.bold !== null && json.bold !== undefined) {\n cellStyle.bold = json.bold;\n }\n //hAlign\n if (json.hAlign !== null && json.hAlign !== undefined) {\n cellStyle.hAlign = json.hAlign;\n }\n //indent\n if (json.indent !== null && json.indent !== undefined) {\n cellStyle.indent = json.indent;\n if (!(cellStyle.hAlign === 'left' || cellStyle.hAlign === 'right')) {\n cellStyle.hAlign = 'left';\n }\n }\n //vAlign\n if (json.vAlign !== null && json.vAlign !== undefined) {\n cellStyle.vAlign = json.vAlign;\n }\n //underline\n if (json.underline !== null && json.underline !== undefined) {\n cellStyle.underline = json.underline;\n }\n //wrapText\n if (json.wrapText !== null && json.wrapText !== undefined) {\n cellStyle.wrapText = json.wrapText;\n }\n //numberFormat\n if (json.numberFormat !== null && json.numberFormat !== undefined) {\n if (json.type !== null && json.type !== undefined) {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, json.type);\n }\n else {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, cellType);\n }\n }\n else if (defStyleIndex !== undefined) {\n cellStyle.numFmtId = 14;\n cellStyle.numberFormat = 'GENERAL';\n }\n else {\n cellStyle.numberFormat = 'GENERAL';\n }\n cellStyle.index = this.processCellStyle(cellStyle);\n };\n Workbook.prototype.switchNumberFormat = function (numberFormat, type) {\n var format = this.getNumberFormat(numberFormat, type);\n if (format !== numberFormat) {\n var numFmt = this.mNumFmt.get(numberFormat);\n if (numFmt !== undefined) {\n numFmt.formatCode = format;\n if (this.mNumFmt.has(format)) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXfs = _a[_i];\n if (cellStyleXfs.numFmtId === numFmt.numFmtId) {\n cellStyleXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n for (var _b = 0, _c = this.mCellXfs; _b < _c.length; _b++) {\n var cellXfs = _c[_b];\n if (cellXfs.numFmtId === numFmt.numFmtId) {\n cellXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n }\n }\n }\n };\n Workbook.prototype.getNumberFormat = function (numberFormat, type) {\n var returnFormat;\n switch (type) {\n case 'number':\n try {\n returnFormat = this.intl.getNumberPattern({ format: numberFormat, currency: this.currency });\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'datetime':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'date':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'time':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n default:\n returnFormat = numberFormat;\n break;\n }\n return returnFormat;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserBorder = function (json, border) {\n if (json.color !== null && json.color !== undefined) {\n border.color = json.color;\n }\n else {\n border.color = '#000000';\n }\n if (json.lineStyle !== null && json.lineStyle !== undefined) {\n border.lineStyle = json.lineStyle;\n }\n else {\n border.lineStyle = 'thin';\n }\n };\n Workbook.prototype.processCellStyle = function (style) {\n if (style.isGlobalStyle) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n var compareResult = this.compareStyle(style);\n if (!compareResult.result) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n //Return the index of the already existing style.\n return compareResult.index;\n }\n }\n };\n Workbook.prototype.processNumFormatId = function (style) {\n if (style.numberFormat !== 'GENERAL' && !this.mNumFmt.has(style.numberFormat)) {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n }\n };\n Workbook.prototype.isNewFont = function (toCompareStyle) {\n var result = false;\n var index = 0;\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n index++;\n var fontColor = undefined;\n if (toCompareStyle.fontColor !== undefined) {\n fontColor = ('FF' + toCompareStyle.fontColor.replace('#', ''));\n }\n result = font.color === fontColor &&\n font.b === toCompareStyle.bold &&\n font.i === toCompareStyle.italic &&\n font.u === toCompareStyle.underline &&\n font.name === toCompareStyle.fontName &&\n font.sz === toCompareStyle.fontSize;\n if (result) {\n break;\n }\n }\n index = index - 1;\n return { index: index, result: result };\n };\n Workbook.prototype.isNewBorder = function (toCompareStyle) {\n var bStyle = new CellStyle();\n if (this.isAllBorder(toCompareStyle.borders)) {\n return (bStyle.borders.all.color === toCompareStyle.borders.all.color &&\n bStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle);\n }\n else {\n return (bStyle.borders.left.color === toCompareStyle.borders.left.color &&\n bStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n bStyle.borders.right.color === toCompareStyle.borders.right.color &&\n bStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n bStyle.borders.top.color === toCompareStyle.borders.top.color &&\n bStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n bStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n bStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n }\n };\n Workbook.prototype.isAllBorder = function (toCompareBorder) {\n var allBorderStyle = new CellStyle();\n return allBorderStyle.borders.all.color !== toCompareBorder.all.color &&\n allBorderStyle.borders.all.lineStyle !== toCompareBorder.all.lineStyle;\n };\n Workbook.prototype.compareStyle = function (toCompareStyle) {\n var result = true;\n var index = 0;\n var globalStyleIndex = 0;\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.isGlobalStyle ? false : (baseStyle.backColor === toCompareStyle.backColor &&\n baseStyle.bold === toCompareStyle.bold &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.numberFormat === toCompareStyle.numberFormat &&\n baseStyle.type === toCompareStyle.type &&\n baseStyle.fontColor === toCompareStyle.fontColor &&\n baseStyle.fontName === toCompareStyle.fontName &&\n baseStyle.fontSize === toCompareStyle.fontSize &&\n baseStyle.hAlign === toCompareStyle.hAlign &&\n baseStyle.italic === toCompareStyle.italic &&\n baseStyle.underline === toCompareStyle.underline &&\n baseStyle.vAlign === toCompareStyle.vAlign &&\n baseStyle.indent === toCompareStyle.indent &&\n baseStyle.wrapText === toCompareStyle.wrapText &&\n (baseStyle.borders.all.color === toCompareStyle.borders.all.color &&\n baseStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle) &&\n (baseStyle.borders.left.color === toCompareStyle.borders.left.color &&\n baseStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n baseStyle.borders.right.color === toCompareStyle.borders.right.color &&\n baseStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n baseStyle.borders.top.color === toCompareStyle.borders.top.color &&\n baseStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n baseStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n baseStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle));\n if (result) {\n index = baseStyle.index;\n break;\n }\n }\n return { index: index, result: result };\n };\n Workbook.prototype.contains = function (array, item) {\n var index = array.indexOf(item);\n return index > -1 && index < array.length;\n };\n Workbook.prototype.getCellValueType = function (value) {\n if (value instanceof Date) {\n return 'datetime';\n }\n else if (typeof (value) === 'boolean') {\n return 'boolean';\n }\n else if (typeof (value) === 'number') {\n return 'number';\n }\n else {\n return 'string';\n }\n };\n Workbook.prototype.parseCellType = function (cell) {\n var type = cell.type;\n var saveType;\n var value = cell.value;\n switch (type) {\n case 'datetime':\n value = this.toOADate(value);\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n var value_1 = this.globalStyles.get(cell.cellStyle.name);\n this.switchNumberFormat(value_1.format, value_1.type);\n }\n }\n saveType = 'n';\n break;\n //TODO: Update the number format index and style\n case 'boolean':\n value = value ? 1 : 0;\n saveType = 'b';\n break;\n case 'number':\n saveType = 'n';\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n this.switchNumberFormat(this.globalStyles.get(cell.cellStyle.name).format, 'number');\n }\n }\n break;\n case 'string':\n this.sharedStringCount++;\n saveType = 's';\n if (!this.contains(this.sharedString, value)) {\n this.sharedString.push(value);\n }\n value = this.sharedString.indexOf(value);\n break;\n default:\n break;\n }\n cell.saveType = saveType;\n cell.value = value;\n };\n Workbook.prototype.saveAsBlob = function (blobSaveType) {\n var _this = this;\n switch (blobSaveType) {\n case 'text/csv':\n return new Promise(function (resolve, reject) {\n var obj = {};\n obj.blobData = _this.csvHelper.saveAsBlob();\n resolve(obj);\n });\n default:\n return new Promise(function (resolve, reject) {\n _this.saveInternal();\n _this.mArchive.saveAsBlob().then(function (blob) {\n var obj = {};\n obj.blobData = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n resolve(obj);\n });\n });\n }\n };\n Workbook.prototype.save = function (fileName, proxyUrl) {\n var _this = this;\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('Argument Null Exception: fileName cannot be null or empty');\n }\n var xlsxMatch = fileName.match('.xlsx$');\n var csvMatch = fileName.match('.csv$');\n if (xlsxMatch !== null && xlsxMatch[0] === ('.' + this.mSaveType)) {\n this.saveInternal();\n this.mArchive.save(fileName).then(function () {\n _this.mArchive.destroy();\n });\n }\n else if (csvMatch !== null && csvMatch[0] === ('.' + this.mSaveType)) {\n this.csvHelper.save(fileName);\n }\n else {\n throw Error('Save type and file extension is different.');\n }\n };\n Workbook.prototype.saveInternal = function () {\n this.saveWorkbook();\n this.saveWorksheets();\n this.saveSharedString();\n this.saveStyles();\n this.saveApp(this.builtInProperties);\n this.saveCore(this.builtInProperties);\n this.saveContentType();\n this.saveTopLevelRelation();\n this.saveWorkbookRelation();\n };\n Workbook.prototype.saveWorkbook = function () {\n /* tslint:disable-next-line:max-line-length */\n var workbookTemp = '';\n var sheets = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheets += '';\n }\n sheets += '';\n workbookTemp += sheets;\n if (this.printTitles.size > 0) {\n var printTitle_1 = '';\n this.printTitles.forEach(function (value, key) {\n printTitle_1 += '' + value + '';\n });\n printTitle_1 += '';\n workbookTemp += printTitle_1;\n }\n this.addToArchive(workbookTemp + '', 'xl/workbook.xml');\n };\n Workbook.prototype.saveWorksheets = function () {\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n this.saveWorksheet(this.worksheets[i], i);\n }\n };\n Workbook.prototype.saveWorksheet = function (sheet, index) {\n var sheetBlob = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetString = '';\n if (!sheet.isSummaryRowBelow) {\n sheetString += ('' + '' + '' + '');\n }\n else {\n sheetString += ('');\n }\n sheetString += this.saveSheetView(sheet);\n if (sheet.columns !== undefined) {\n var colString = '';\n for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n if (column.width !== undefined) {\n colString += '';\n }\n else {\n colString += '';\n }\n }\n sheetString += (colString + '');\n }\n sheetString += ('');\n sheetBlob.append(sheetString);\n sheetString = '';\n if (sheet.rows !== undefined) {\n for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n var row = _c[_b];\n var rowString = '');\n for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n var cell = _e[_d];\n if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n rowString += ('');\n if (cell.value !== undefined) {\n rowString += ('' + cell.value + '');\n }\n else {\n rowString += ('');\n }\n }\n }\n rowString += ('');\n sheetBlob.append(rowString);\n }\n }\n sheetString += ('');\n if (sheet.mergeCells.length > 0) {\n sheetString += ('');\n for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n var mCell = _g[_f];\n sheetString += ('');\n }\n sheetString += ('');\n }\n if (sheet.hyperLinks.length > 0) {\n sheetString += ('');\n for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n var hLink = _j[_h];\n sheetString += ('');\n }\n sheetString += ('');\n this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n }\n /* tslint:disable-next-line:max-line-length */\n sheetString += ('');\n sheetBlob.append(sheetString);\n this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n };\n Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n var dDigitWidth = 7;\n var val = (pixels > dDigitWidth + 5) ?\n this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n pixels / (dDigitWidth + 5);\n return (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n };\n Workbook.prototype.trunc = function (x) {\n var n = x - x % 1;\n return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n };\n Workbook.prototype.pixelsToRowHeight = function (pixels) {\n return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n };\n Workbook.prototype.saveSheetRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var relStr = '';\n for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n var hLink = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n relStr += '';\n return relStr;\n };\n Workbook.prototype.saveSheetView = function (sheet) {\n var paneString = ' 0) {\n /* tslint:disable-next-line:max-line-length */\n var sstStart = '';\n var si = '';\n for (var i = 0; i < length; i++) {\n si += '';\n si += this.processString(this.sharedString[i]);\n si += '';\n }\n si += '';\n this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n }\n };\n Workbook.prototype.processString = function (value) {\n if (value.indexOf('&') !== -1) {\n value = value.replace(/&/g, '&');\n }\n if (value.indexOf('<') !== -1) {\n value = value.replace(/') !== -1) {\n value = value.replace(/>/g, '>');\n }\n return value;\n };\n Workbook.prototype.saveStyles = function () {\n this.updateCellXfsStyleXfs();\n /* tslint:disable-next-line:max-line-length */\n var styleTemp = '';\n styleTemp += this.saveNumberFormats();\n styleTemp += this.saveFonts();\n styleTemp += this.saveFills();\n styleTemp += this.saveBorders();\n styleTemp += this.saveCellStyleXfs();\n styleTemp += this.saveCellXfs();\n styleTemp += this.saveCellStyles();\n this.addToArchive(styleTemp + '', 'xl/styles.xml');\n };\n Workbook.prototype.updateCellXfsStyleXfs = function () {\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var style = _a[_i];\n var cellXfs = undefined;\n if (style.isGlobalStyle) {\n cellXfs = new CellStyleXfs();\n cellXfs.xfId = (style.index - 1);\n }\n else {\n cellXfs = new CellXfs();\n cellXfs.xfId = 0;\n }\n //Add font\n var compareFontResult = this.isNewFont(style);\n if (!compareFontResult.result) {\n var font = new Font();\n font.b = style.bold;\n font.i = style.italic;\n font.name = style.fontName;\n font.sz = style.fontSize;\n font.u = style.underline;\n font.color = ('FF' + style.fontColor.replace('#', ''));\n this.mFonts.push(font);\n cellXfs.fontId = this.mFonts.length - 1;\n }\n else {\n cellXfs.fontId = compareFontResult.index;\n }\n //Add fill\n if (style.backColor !== 'none') {\n var backColor = 'FF' + style.backColor.replace('#', '');\n if (this.mFills.has(backColor)) {\n var fillId = this.mFills.get(backColor);\n cellXfs.fillId = fillId;\n }\n else {\n var fillId = this.mFills.size + 2;\n this.mFills.set(backColor, fillId);\n cellXfs.fillId = (fillId);\n }\n }\n else {\n cellXfs.fillId = 0;\n }\n //Add border \n if (!this.isNewBorder(style)) {\n this.mBorders.push(style.borders);\n cellXfs.borderId = this.mBorders.length;\n }\n else {\n cellXfs.borderId = 0;\n }\n //Add Number Format \n if (style.numberFormat !== 'GENERAL') {\n if (this.mNumFmt.has(style.numberFormat)) {\n var numFmt = this.mNumFmt.get(style.numberFormat);\n cellXfs.numFmtId = numFmt.numFmtId;\n }\n else {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n cellXfs.numFmtId = id;\n }\n }\n else {\n if (style.numberFormat === 'GENERAL' && style.numFmtId === 14) {\n cellXfs.numFmtId = 14;\n }\n else {\n cellXfs.numFmtId = 0;\n }\n }\n //Add alignment \n if (!style.isGlobalStyle) {\n cellXfs.applyAlignment = 1;\n }\n cellXfs.alignment = new Alignment();\n cellXfs.alignment.indent = style.indent;\n cellXfs.alignment.horizontal = style.hAlign;\n cellXfs.alignment.vertical = style.vAlign;\n cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n if (style.isGlobalStyle) {\n this.mCellStyleXfs.push(cellXfs);\n this.mCellXfs.push(cellXfs);\n }\n else {\n //Add cellxfs\n this.mCellXfs.push(cellXfs);\n }\n }\n };\n Workbook.prototype.saveNumberFormats = function () {\n if (this.mNumFmt.size >= 1) {\n var numFmtStyle_1 = '';\n this.mNumFmt.forEach(function (value, key) {\n numFmtStyle_1 += '';\n });\n return (numFmtStyle_1 += '');\n }\n else {\n return '';\n }\n };\n Workbook.prototype.saveFonts = function () {\n /* tslint:disable-next-line:max-line-length */\n var fontStyle = '';\n if (this.mFonts.length >= 1) {\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n fontStyle += '';\n if (font.b) {\n fontStyle += '';\n }\n if (font.i) {\n fontStyle += '';\n }\n if (font.u) {\n fontStyle += '';\n }\n fontStyle += '';\n fontStyle += '';\n fontStyle += '';\n }\n }\n return fontStyle + '';\n };\n Workbook.prototype.saveFills = function () {\n /* tslint:disable-next-line:max-line-length */\n var fillsStyle = '';\n if (this.mFills.size >= 1) {\n this.mFills.forEach(function (value, key) {\n /* tslint:disable-next-line:max-line-length */\n fillsStyle += '';\n });\n }\n return fillsStyle + '';\n };\n Workbook.prototype.saveBorders = function () {\n /* tslint:disable-next-line:max-line-length */\n var bordersStyle = '';\n if (this.mBorders.length >= 1) {\n for (var _i = 0, _a = this.mBorders; _i < _a.length; _i++) {\n var borders = _a[_i];\n if (this.isAllBorder(borders)) {\n var color = borders.all.color.replace('#', '');\n var lineStyle = borders.all.lineStyle;\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n }\n }\n return bordersStyle + '';\n };\n Workbook.prototype.saveCellStyles = function () {\n var _this = this;\n var cellStyleString = '';\n this.cellStyles.forEach(function (value, key) {\n cellStyleString += '';\n if (this.mCellStyleXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n else {\n cellXfsStyle += ' />';\n }\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveCellXfs = function () {\n /* tslint:disable-next-line:max-line-length */\n var cellXfsStyle = '';\n if (this.mCellXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var cellXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveAlignment = function (cellXf) {\n var alignString = '';\n return alignString;\n };\n Workbook.prototype.saveApp = function (builtInProperties) {\n /* tslint:disable-next-line:max-line-length */\n var appString = 'Essential XlsIO';\n if (builtInProperties !== undefined) {\n if (builtInProperties.manager !== undefined) {\n appString += '' + builtInProperties.manager + '';\n }\n if (builtInProperties.company !== undefined) {\n appString += '' + builtInProperties.company + '';\n }\n }\n this.addToArchive((appString + ''), 'docProps/app.xml');\n };\n Workbook.prototype.saveCore = function (builtInProperties) {\n var createdDate = new Date();\n /* tslint:disable-next-line:max-line-length */\n var coreString = '';\n if (this.builtInProperties !== undefined) {\n if (builtInProperties.author !== undefined) {\n coreString += '' + builtInProperties.author + '';\n }\n if (builtInProperties.subject !== undefined) {\n coreString += '' + builtInProperties.subject + '';\n }\n if (builtInProperties.category !== undefined) {\n coreString += '' + builtInProperties.category + '';\n }\n if (builtInProperties.comments !== undefined) {\n coreString += '' + builtInProperties.comments + '';\n }\n if (builtInProperties.title !== undefined) {\n coreString += '' + builtInProperties.title + '';\n }\n if (builtInProperties.tags !== undefined) {\n coreString += '' + builtInProperties.tags + '';\n }\n if (builtInProperties.status !== undefined) {\n coreString += '' + builtInProperties.status + '';\n }\n if (builtInProperties.createdDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.createdDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n if (builtInProperties.modifiedDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.modifiedDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n coreString += '' + createdDate.toISOString() + '';\n }\n /* tslint:disable-next-line:max-line-length */\n coreString += '';\n this.addToArchive(coreString, 'docProps/core.xml');\n };\n Workbook.prototype.saveTopLevelRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var topRelation = '';\n this.addToArchive(topRelation, '_rels/.rels');\n };\n Workbook.prototype.saveWorkbookRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var wbRelation = '';\n var length = this.worksheets.length;\n var count = 0;\n for (var i = 0; i < length; i++, count++) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n this.addToArchive((wbRelation + ''), 'xl/_rels/workbook.xml.rels');\n };\n Workbook.prototype.saveContentType = function () {\n /* tslint:disable-next-line:max-line-length */\n var contentTypeString = '';\n var sheetsOverride = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n }\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n contentTypeString += '';\n }\n this.addToArchive((contentTypeString + sheetsOverride + ''), '[Content_Types].xml');\n };\n Workbook.prototype.addToArchive = function (xmlString, itemName) {\n if (typeof (xmlString) === 'string') {\n var blob = new Blob([xmlString], { type: 'text/plain' });\n var archiveItem = new ZipArchiveItem(blob, itemName);\n this.mArchive.addItem(archiveItem);\n }\n else {\n var archiveItem = new ZipArchiveItem(xmlString, itemName);\n this.mArchive.addItem(archiveItem);\n }\n };\n Workbook.prototype.processMergeCells = function (cell, rowIndex, mergeCells) {\n if (cell.rowSpan !== 0 || cell.colSpan !== 0) {\n var mCell = new MergeCell();\n mCell.x = cell.index;\n mCell.width = cell.colSpan;\n mCell.y = rowIndex;\n mCell.height = cell.rowSpan;\n var startCell = this.getCellName(mCell.y, mCell.x);\n var endCell = this.getCellName(rowIndex + mCell.height, cell.index + mCell.width);\n mCell.ref = startCell + ':' + endCell;\n var mergedCell = mergeCells.add(mCell);\n var start = { x: mCell.x, y: mCell.y };\n var end = {\n x: (cell.index + mCell.width), y: (rowIndex + mCell.height)\n };\n this.updatedMergedCellStyles(start, end, cell);\n }\n return mergeCells;\n };\n Workbook.prototype.updatedMergedCellStyles = function (sCell, eCell, cell) {\n for (var x = sCell.x; x <= eCell.x; x++) {\n for (var y = sCell.y; y <= eCell.y; y++) {\n this.mergedCellsStyle.set(this.getCellName(y, x), { x: x, y: y, styleIndex: cell.styleIndex });\n }\n }\n };\n /**\n * Returns the tick count corresponding to the given year, month, and day.\n * @param year number value of year\n * @param month number value of month\n * @param day number value of day\n */\n Workbook.prototype.dateToTicks = function (year, month, day) {\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysToMonth365 = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n var daysToMonth366 = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];\n if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {\n var days = this.isLeapYear(year) ? daysToMonth366 : daysToMonth365;\n var y = year - 1;\n var n = y * 365 + ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0) + days[month - 1] + day - 1;\n return n * ticksPerDay;\n }\n throw new Error('Not a valid date');\n };\n /**\n * Return the tick count corresponding to the given hour, minute, second.\n * @param hour number value of hour\n * @param minute number value if minute\n * @param second number value of second\n */\n Workbook.prototype.timeToTicks = function (hour, minute, second) {\n if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60) {\n var totalSeconds = hour * 3600 + minute * 60 + second;\n return totalSeconds * 10000 * 1000;\n }\n throw new Error('Not valid time');\n };\n /**\n * Checks if given year is a leap year.\n * @param year Year value.\n */\n Workbook.prototype.isLeapYear = function (year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n };\n /**\n * Converts `DateTime` to the equivalent OLE Automation date.\n */\n Workbook.prototype.toOADate = function (date) {\n var ticks = 0;\n /* tslint:disable-next-line:max-line-length */\n ticks = this.dateToTicks(date.getFullYear(), (date.getMonth() + 1), date.getDate()) + this.timeToTicks(date.getHours(), date.getMinutes(), date.getSeconds());\n if (ticks === 0) {\n return 0.0;\n }\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysTo1899 = (((365 * 4 + 1) * 25 - 1) * 4 + 1) * 4 + ((365 * 4 + 1) * 25 - 1) * 3 - 367;\n var doubleDateOffset = daysTo1899 * ticksPerDay;\n var oaDateMinAsTicks = (((365 * 4 + 1) * 25 - 1) - 365) * ticksPerDay;\n if (ticks < oaDateMinAsTicks) {\n throw new Error('Arg_OleAutDateInvalid');\n }\n var millisPerDay = 1000 * 60 * 60 * 24;\n return ((ticks - doubleDateOffset) / 10000) / millisPerDay;\n };\n return Workbook;\n}());\nexport { Workbook };\n/**\n * BuiltInProperties Class\n * @private\n */\nvar BuiltInProperties = /** @class */ (function () {\n function BuiltInProperties() {\n }\n return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization, setCulture } from '@syncfusion/ej2-base';\n/**\n * ValueFormatter class to globalize the value.\n * @hidden\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n if (!isNullOrUndefined(cultureName)) {\n this.intl.culture = cultureName;\n }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n ValueFormatter.prototype.getParserFunction = function (format) {\n if (format.type) {\n return this.intl.getDateParser(format);\n }\n else {\n return this.intl.getNumberParser(format);\n }\n };\n ValueFormatter.prototype.fromView = function (value, format, type) {\n if ((type === 'date' || type === 'datetime' || type === 'number') && (!isNullOrUndefined(format))) {\n return format(value);\n }\n else {\n return value;\n }\n };\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n ValueFormatter.prototype.setCulture = function (cultureName) {\n if (!isNullOrUndefined(cultureName)) {\n setCulture(cultureName);\n }\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { merge, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getUid, templateCompiler, getForeignData, getObject } from '../base/util';\n/**\n * Represents Grid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n var _this = this;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n * @default true\n */\n this.allowResizing = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowGrouping` set to false, then it disables grouping of a particular column.\n * By default all columns are groupable.\n * @default true\n */\n this.allowGrouping = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `enableGroupByFormat` set to true, then it groups the particular column by formatted values.\n * @default true\n */\n this.enableGroupByFormat = false;\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n * @default true\n */\n this.allowEditing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu or checkbox.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n * {% codeBlock src=\"grid/filter-menu-api/index.ts\" %}{% endcodeBlock %}\n *\n * > Check the [`Filter UI`](./filtering.html#custom-component-in-filter-menu) for its customization.\n * @default null\n */\n this.filter = {};\n /**\n * If `showInColumnChooser` set to false, then hide the particular column in column chooser.\n * By default all columns are displayed in column Chooser.\n * @default true\n */\n this.showInColumnChooser = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n * @default {}\n */\n this.edit = {};\n this.sortDirection = 'Descending';\n /** @hidden */\n this.getEditTemplate = function () { return _this.editTemplateFn; };\n /** @hidden */\n this.getFilterTemplate = function () { return _this.filterTemplateFn; };\n merge(this, options);\n this.uid = getUid('grid-column');\n var valueFormatter = new ValueFormatter();\n if (options.format && (options.format.skeleton || options.format.format)) {\n this.setFormatter(valueFormatter.getFormatFunction(options.format));\n this.setParser(valueFormatter.getParserFunction(options.format));\n }\n if (!this.field) {\n this.allowFiltering = false;\n this.allowGrouping = false;\n this.allowSorting = false;\n }\n if (this.commands && !this.textAlign) {\n this.textAlign = 'Right';\n }\n if (this.template || this.commandsTemplate) {\n this.templateFn = templateCompiler(this.template || this.commandsTemplate);\n }\n if (this.headerTemplate) {\n this.headerTemplateFn = templateCompiler(this.headerTemplate);\n }\n if (this.filter.itemTemplate) {\n this.fltrTemplateFn = templateCompiler(this.filter.itemTemplate);\n }\n if (this.editTemplate) {\n this.editTemplateFn = templateCompiler(this.editTemplate);\n }\n if (this.filterTemplate) {\n this.filterTemplateFn = templateCompiler(this.filterTemplate);\n }\n if (this.isForeignColumn() && (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit')) {\n this.editType = 'dropdownedit';\n this.edit.params = extend({\n dataSource: this.dataSource,\n query: new Query(), fields: { value: this.foreignKeyField || this.field, text: this.foreignKeyValue }\n }, this.edit.params);\n }\n if (this.sortComparer) {\n var a_1 = this.sortComparer;\n this.sortComparer = function comparer(x, y) {\n if (typeof a_1 === 'string') {\n a_1 = getObject(a_1, window);\n }\n if (this.sortDirection === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return a_1(x, y);\n };\n }\n if (!this.sortComparer && this.isForeignColumn()) {\n this.sortComparer = function (x, y) {\n x = getObject(_this.foreignKeyValue, getForeignData(_this, {}, x)[0]);\n y = getObject(_this.foreignKeyValue, getForeignData(_this, {}, y)[0]);\n return _this.sortDirection === 'Descending' ? DataUtil.fnDescending(x, y) : DataUtil.fnAscending(x, y);\n };\n }\n }\n /** @hidden */\n Column.prototype.getSortDirection = function () {\n return this.sortDirection;\n };\n /** @hidden */\n Column.prototype.setSortDirection = function (direction) {\n this.sortDirection = direction;\n };\n /** @hidden */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n }\n };\n /**\n * @hidden\n * It defines the column is foreign key column or not.\n */\n Column.prototype.isForeignColumn = function () {\n return !!(this.dataSource && this.foreignKeyValue);\n };\n /** @hidden */\n Column.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /** @hidden */\n Column.prototype.setFormatter = function (value) {\n this.formatFn = value;\n };\n /** @hidden */\n Column.prototype.getParser = function () {\n return this.parserFn;\n };\n /** @hidden */\n Column.prototype.setParser = function (value) {\n this.parserFn = value;\n };\n /** @hidden */\n Column.prototype.getColumnTemplate = function () {\n return this.templateFn;\n };\n /** @hidden */\n Column.prototype.getHeaderTemplate = function () {\n return this.headerTemplateFn;\n };\n /** @hidden */\n Column.prototype.getFilterItemTemplate = function () {\n return this.fltrTemplateFn;\n };\n /** @hidden */\n Column.prototype.getDomSetter = function () {\n return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n };\n return Column;\n}());\nexport { Column };\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var headerCellInfo = 'headerCellInfo';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var cellSelecting = 'cellSelecting';\n/** @hidden */\nexport var cellSelected = 'cellSelected';\n/** @hidden */\nexport var cellDeselecting = 'cellDeselecting';\n/** @hidden */\nexport var cellDeselected = 'cellDeselected';\n/** @hidden */\nexport var columnDragStart = 'columnDragStart';\n/** @hidden */\nexport var columnDrag = 'columnDrag';\n/** @hidden */\nexport var columnDrop = 'columnDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var beforePrint = 'beforePrint';\n/** @hidden */\nexport var printComplete = 'printComplete';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var endAdd = 'endAdd';\n/** @hidden */\nexport var endDelete = 'endDelete';\n/** @hidden */\nexport var endEdit = 'endEdit';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var recordClick = 'recordClick';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var beforeOpenColumnChooser = 'beforeOpenColumnChooser';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var onResize = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var checkBoxChange = 'checkBoxChange';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var filterChoiceRequest = 'filterchoicerequest';\n/** @hidden */\nexport var filterAfterOpen = 'filterafteropen';\n/** @hidden */\nexport var filterBeforeOpen = 'filterbeforeopen';\n/** @hidden */\nexport var filterSearchBegin = 'filtersearchbegin';\n/**\n * Specifies grid internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var onEmpty = 'on-empty';\n/** @hidden */\nexport var inBoundModelChanged = 'inbound-model-changed';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var colGroupRefresh = 'colgroup-refresh';\n/** @hidden */\nexport var headerRefreshed = 'header-refreshed';\n/** @hidden */\nexport var pageBegin = 'paging-begin';\n/** @hidden */\nexport var pageComplete = 'paging-complete';\n/** @hidden */\nexport var sortBegin = 'sorting-begin';\n/** @hidden */\nexport var sortComplete = 'sorting-complete';\n/** @hidden */\nexport var filterBegin = 'filtering-begin';\n/** @hidden */\nexport var filterComplete = 'filtering-complete';\n/** @hidden */\nexport var searchBegin = 'searching-begin';\n/** @hidden */\nexport var searchComplete = 'searching-complete';\n/** @hidden */\nexport var reorderBegin = 'reorder-begin';\n/** @hidden */\nexport var reorderComplete = 'reorder-complete';\n/** @hidden */\nexport var rowDragAndDropBegin = 'rowdraganddrop-begin';\n/** @hidden */\nexport var rowDragAndDropComplete = 'rowdraganddrop-complete';\n/** @hidden */\nexport var groupBegin = 'grouping-begin';\n/** @hidden */\nexport var groupComplete = 'grouping-complete';\n/** @hidden */\nexport var ungroupBegin = 'ungrouping-begin';\n/** @hidden */\nexport var ungroupComplete = 'ungrouping-complete';\n/** @hidden */\nexport var groupAggregates = 'group-aggregates';\n/** @hidden */\nexport var refreshFooterRenderer = 'refresh-footer-rendered';\n/** @hidden */\nexport var refreshAggregateCell = 'refresh-aggregate-cell';\n/** @hidden */\nexport var refreshAggregates = 'refresh-aggregates';\n/** @hidden */\nexport var rowSelectionBegin = 'rowselecting';\n/** @hidden */\nexport var rowSelectionComplete = 'rowselected';\n/** @hidden */\nexport var columnSelectionBegin = 'columnselecting';\n/** @hidden */\nexport var columnSelectionComplete = 'columnselected';\n/** @hidden */\nexport var cellSelectionBegin = 'cellselecting';\n/** @hidden */\nexport var cellSelectionComplete = 'cellselected';\n/** @hidden */\nexport var beforeCellFocused = 'beforecellfocused';\n/** @hidden */\nexport var cellFocused = 'cellfocused';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var click = 'click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var columnVisibilityChanged = 'column-visible-changed';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var columnWidthChanged = 'column-width-changed';\n/** @hidden */\nexport var columnPositionChanged = 'column-position-changed';\n/** @hidden */\nexport var rowDragAndDrop = 'row-drag-and-drop';\n/** @hidden */\nexport var rowsAdded = 'rows-added';\n/** @hidden */\nexport var rowsRemoved = 'rows-removed';\n/** @hidden */\nexport var columnDragStop = 'column-drag-stop';\n/** @hidden */\nexport var headerDrop = 'header-drop';\n/** @hidden */\nexport var dataSourceModified = 'datasource-modified';\n/** @hidden */\nexport var refreshComplete = 'refresh-complete';\n/** @hidden */\nexport var refreshVirtualBlock = 'refresh-virtual-block';\n/** @hidden */\nexport var dblclick = 'dblclick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var bulkSave = 'bulk-save';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var tooltipDestroy = 'tooltip-destroy';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var editBegin = 'edit-begin';\n/** @hidden */\nexport var editComplete = 'edit-complete';\n/** @hidden */\nexport var addBegin = 'add-begin';\n/** @hidden */\nexport var addComplete = 'add-complete';\n/** @hidden */\nexport var saveComplete = 'save-complete';\n/** @hidden */\nexport var deleteBegin = 'delete-begin';\n/** @hidden */\nexport var deleteComplete = 'delete-complete';\n/** @hidden */\nexport var preventBatch = 'prevent-batch';\n/** @hidden */\nexport var dialogDestroy = 'dialog-destroy';\n/** @hidden */\nexport var crudAction = 'crud-Action';\n/** @hidden */\nexport var addDeleteAction = 'add-delete-Action';\n/** @hidden */\nexport var destroyForm = 'destroy-form';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var excelExportComplete = 'excelExportComplete';\n/** @hidden */\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\nexport var excelHeaderQueryCellInfo = 'excelHeaderQueryCellInfo';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var pdfExportComplete = 'pdfExportComplete';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\nexport var pdfHeaderQueryCellInfo = 'pdfHeaderQueryCellInfo';\n/** @hidden */\nexport var accessPredicate = 'access-predicate';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var freezeRender = 'freezerender';\n/** @hidden */\nexport var freezeRefresh = 'freezerefresh';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var columnMenuClick = 'columnMenuClick';\n/** @hidden */\nexport var columnMenuOpen = 'columnMenuOpen';\n/** @hidden */\nexport var filterOpen = 'filterOpen';\n/** @hidden */\nexport var filterDialogCreated = 'filterDialogCreated';\n/** @hidden */\nexport var filterMenuClose = 'filter-menu-close';\n/** @hidden */\nexport var initForeignKeyColumn = 'initForeignKeyColumn';\n/** @hidden */\nexport var getForeignKeyData = 'getForeignKeyData';\n/** @hidden */\nexport var generateQuery = 'generateQuery';\n/** @hidden */\nexport var showEmptyGrid = 'showEmptyGrid';\n/** @hidden */\nexport var foreignKeyData = 'foreignKeyData';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var dataSourceChanged = 'dataSourceChanged';\n/** @hidden */\nexport var rtlUpdated = 'rtl-updated';\n/** @hidden */\nexport var beforeFragAppend = 'beforeFragAppend';\n/** @hidden */\nexport var frozenHeight = 'frozenHeight';\n/** @hidden */\nexport var recordAdded = 'recordAdded';\n/** @hidden */\nexport var cancelBegin = 'cancel-Begin';\n/** @hidden */\nexport var editNextValCell = 'editNextValCell';\n","/* tslint:disable-next-line:max-line-length */\nimport { EventHandler, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, isActionPrevent, appendChildren, getDatePredicate } from '../base/util';\nimport { remove, debounce } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate, UrlAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getForeignData } from '../base/util';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { getFilterMenuPostion, toogleCheckbox, createCboxWithWrap, removeAddCboxClasses, getColumnByForeignKeyValue } from '../base/util';\n/**\n * @hidden\n * `CheckBoxFilter` module is used to handle filtering action.\n */\nvar CheckBoxFilter = /** @class */ (function () {\n /**\n * Constructor for checkbox filtering module\n * @hidden\n */\n function CheckBoxFilter(parent, filterSettings, serviceLocator) {\n this.existingPredicate = {};\n this.foreignKeyQuery = new Query();\n this.filterState = true;\n this.values = {};\n this.renderEmpty = false;\n this.parent = parent;\n this.id = this.parent.element.id;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.valueFormatter = new ValueFormatter(this.parent.locale);\n this.cBoxTrue = createCheckBox(this.parent.createElement, false, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n this.cBoxTrue.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden', attrs: { 'type': 'checkbox' }\n }), this.cBoxFalse.firstChild);\n this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n if (this.parent.enableRtl) {\n addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n }\n }\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n CheckBoxFilter.prototype.destroy = function () {\n this.closeDialog();\n };\n CheckBoxFilter.prototype.wireEvents = function () {\n EventHandler.add(this.dlg, 'click', this.clickHandler, this);\n this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n EventHandler.add(this.dlg.querySelector('.e-searchinput'), 'keyup', this.searchHandler, this);\n };\n CheckBoxFilter.prototype.unWireEvents = function () {\n EventHandler.remove(this.dlg, 'click', this.clickHandler);\n var elem = this.dlg.querySelector('.e-searchinput');\n if (elem) {\n EventHandler.remove(elem, 'keyup', this.searchHandler);\n }\n };\n CheckBoxFilter.prototype.foreignKeyFilter = function (args, fColl, mPredicate) {\n var _this = this;\n var fPredicate = {};\n var filterCollection = [];\n var query = this.foreignKeyQuery.clone();\n this.options.column.dataSource.\n executeQuery(query.where(mPredicate)).then(function (e) {\n _this.options.column.columnData = e.result;\n _this.parent.notify(events.generateQuery, { predicate: fPredicate, column: _this.options.column });\n args.ejpredicate = fPredicate.predicate.predicates;\n fPredicate.predicate.predicates.forEach(function (fpred) {\n filterCollection.push({\n field: fpred.field,\n predicate: 'or',\n matchCase: fpred.ignoreCase,\n ignoreAccent: fpred.ignoreAccent,\n operator: fpred.operator,\n value: fpred.value,\n type: _this.options.type\n });\n });\n args.filterCollection = filterCollection.length ? filterCollection :\n fColl.filter(function (col) { return col.field = _this.options.field; });\n _this.options.handler(args);\n });\n };\n CheckBoxFilter.prototype.foreignFilter = function (args, value) {\n var operator = this.parent.getDataModule().isRemote() ?\n (this.options.column.type === 'string' ? 'contains' : 'equal') : (this.options.column.type ? 'startswith' : 'contains');\n var initalPredicate = new Predicate(this.options.column.foreignKeyValue, operator, value, true, this.parent.filterSettings.ignoreAccent);\n this.foreignKeyFilter(args, [args.filterCollection], initalPredicate);\n };\n CheckBoxFilter.prototype.searchBoxClick = function (e) {\n var target = e.target;\n if (target.classList.contains('e-searchclear')) {\n this.sInput.value = '';\n this.refreshCheckboxes();\n this.updateSearchIcon();\n this.sInput.focus();\n }\n };\n CheckBoxFilter.prototype.searchBoxKeyUp = function (e) {\n this.refreshCheckboxes();\n this.updateSearchIcon();\n };\n CheckBoxFilter.prototype.updateSearchIcon = function () {\n if (this.sInput.value.length) {\n classList(this.sIcon, ['e-chkcancel-icon'], ['e-search-icon']);\n }\n else {\n classList(this.sIcon, ['e-search-icon'], ['e-chkcancel-icon']);\n }\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n CheckBoxFilter.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n CheckBoxFilter.prototype.updateDataSource = function () {\n var dataSource = this.options.dataSource;\n var str = 'object';\n if (!(dataSource instanceof DataManager)) {\n for (var i = 0; i < dataSource.length; i++) {\n if (typeof dataSource !== str) {\n var obj = {};\n obj[this.options.field] = dataSource[i];\n dataSource[i] = obj;\n }\n }\n }\n };\n CheckBoxFilter.prototype.updateModel = function (options) {\n this.options = options;\n this.existingPredicate = options.actualPredicate || {};\n this.options.dataSource = options.dataSource;\n this.updateDataSource();\n this.options.type = options.type || 'string';\n this.options.format = options.format || '';\n this.options.filteredColumns = options.filteredColumns || this.parent.filterSettings.columns;\n this.options.sortedColumns = options.sortedColumns || this.parent.sortSettings.columns;\n this.options.query = options.query || new Query();\n this.options.allowCaseSensitive = options.allowCaseSensitive || false;\n this.values = {};\n this.localeObj = options.localeObj;\n this.isFiltered = options.filteredColumns.length;\n };\n CheckBoxFilter.prototype.getAndSetChkElem = function (options) {\n this.dlg = this.parent.createElement('div', {\n id: this.id + this.options.type + '_excelDlg',\n className: 'e-checkboxfilter e-filter-popup'\n });\n this.sBox = this.parent.createElement('div', { className: 'e-searchcontainer' });\n if (!options.hideSearchbox) {\n this.sInput = this.parent.createElement('input', {\n id: this.id + '_SearchBox',\n className: 'e-searchinput'\n });\n this.sIcon = this.parent.createElement('span', {\n className: 'e-searchclear e-search-icon e-icons e-input-group-icon', attrs: {\n type: 'text', title: this.getLocalizedLabel('Search')\n }\n });\n this.searchBox = this.parent.createElement('span', { className: 'e-searchbox e-fields' });\n this.searchBox.appendChild(this.sInput);\n this.sBox.appendChild(this.searchBox);\n var inputargs = {\n element: this.sInput, floatLabelType: 'Never', properties: {\n placeholder: this.getLocalizedLabel('Search')\n }\n };\n Input.createInput(inputargs, this.parent.createElement);\n this.searchBox.querySelector('.e-input-group').appendChild(this.sIcon);\n }\n this.spinner = this.parent.createElement('div', { className: 'e-spinner' }); //for spinner\n this.cBox = this.parent.createElement('div', {\n id: this.id + this.options.type + '_CheckBoxList',\n className: 'e-checkboxlist e-fields'\n });\n this.spinner.appendChild(this.cBox);\n this.sBox.appendChild(this.spinner);\n return this.sBox;\n };\n CheckBoxFilter.prototype.showDialog = function (options) {\n var args = {\n requestType: events.filterBeforeOpen, filterModel: this,\n columnName: this.options.field, columnType: this.options.type, cancel: false\n };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n this.dialogObj = new Dialog({\n visible: false, content: this.sBox,\n close: this.closeDialog.bind(this),\n width: (!isNullOrUndefined(parentsUntil(options.target, 'e-bigger')))\n || this.parent.element.classList.contains('e-device') ? 260 : 255,\n target: this.parent.element, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: {\n content: this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton'),\n cssClass: 'e-primary', isPrimary: true\n }\n },\n {\n click: this.btnClick.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.getLocalizedLabel(this.isExcel ? 'CancelButton' : 'ClearButton') }\n }],\n created: this.dialogCreated.bind(this),\n open: this.dialogOpen.bind(this)\n });\n this.dialogObj.appendTo(this.dlg);\n this.dialogObj.element.style.maxHeight = '800px';\n this.dialogObj.show();\n this.wireEvents();\n createSpinner({ target: this.spinner }, this.parent.createElement);\n showSpinner(this.spinner);\n this.getAllData();\n };\n CheckBoxFilter.prototype.dialogCreated = function (e) {\n if (!Browser.isDevice) {\n getFilterMenuPostion(this.options.target, this.dialogObj, this.parent);\n }\n else {\n this.dialogObj.position = { X: 'center', Y: 'center' };\n }\n this.parent.notify(events.filterDialogCreated, e);\n };\n CheckBoxFilter.prototype.openDialog = function (options) {\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n };\n CheckBoxFilter.prototype.closeDialog = function () {\n if (this.dialogObj && !this.dialogObj.isDestroyed) {\n var filterTemplateCol = this.parent.getColumns().filter(function (col) { return col.getFilterItemTemplate(); });\n if (filterTemplateCol.length) {\n this.parent.destroyTemplate(['filterItemTemplate']);\n }\n this.parent.notify(events.filterMenuClose, { field: this.options.field });\n this.dialogObj.destroy();\n this.unWireEvents();\n remove(this.dlg);\n this.dlg = null;\n }\n };\n CheckBoxFilter.prototype.clearFilter = function () {\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFilter });\n return;\n }\n this.options.handler({ action: 'clear-filter', field: this.options.field });\n };\n CheckBoxFilter.prototype.btnClick = function (e) {\n if (this.filterState) {\n if (e.target.tagName.toLowerCase() === 'input') {\n var value = e.target.value;\n var args = {\n action: 'filtering', filterCollection: {\n field: this.options.field,\n operator: this.parent.getDataModule().isRemote() ?\n (this.options.column.type === 'string' ? 'contains' : 'equal') :\n (this.options.column.type === 'date' || this.options.column.type === 'datetime' ||\n this.options.column.type === 'boolean' ? 'equal' : 'contains'),\n value: value, matchCase: false, type: this.options.column.type\n },\n field: this.options.field\n };\n value ? this.options.column.isForeignColumn() ? this.foreignFilter(args, value) :\n this.options.handler(args) : this.closeDialog();\n }\n else {\n var text = e.target.firstChild.textContent.toLowerCase();\n if (this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton').toLowerCase() === text) {\n this.fltrBtnHandler();\n }\n else if (this.getLocalizedLabel('ClearButton').toLowerCase() === text) {\n this.clearFilter();\n }\n }\n this.closeDialog();\n }\n else if (!(e.target.tagName.toLowerCase() === 'input')) {\n this.clearFilter();\n this.closeDialog();\n }\n };\n CheckBoxFilter.prototype.fltrBtnHandler = function () {\n var checked = [].slice.call(this.cBox.querySelectorAll('.e-check:not(.e-selectall)'));\n var optr = 'equal';\n var caseSen = this.options.type === 'string' ?\n this.options.allowCaseSensitive : true;\n var defaults = {\n field: this.options.field, predicate: 'or',\n operator: optr, type: this.options.type, matchCase: caseSen, ignoreAccent: this.parent.filterSettings.ignoreAccent\n };\n var isNotEqual = this.itemsCnt !== checked.length && this.itemsCnt - checked.length < checked.length;\n if (isNotEqual) {\n optr = 'notequal';\n checked = [].slice.call(this.cBox.querySelectorAll('.e-uncheck:not(.e-selectall)'));\n defaults.predicate = 'and';\n defaults.operator = 'notequal';\n }\n var value;\n var fObj;\n var coll = [];\n var searchInput = this.searchBox.querySelector('.e-searchinput');\n if (checked.length !== this.itemsCnt || (searchInput.value && searchInput.value !== '')) {\n for (var i = 0; i < checked.length; i++) {\n value = this.values[parentsUntil(checked[i], 'e-ftrchk').getAttribute('uid')];\n fObj = extend({}, { value: value }, defaults);\n if (value && !value.toString().length) {\n fObj.operator = isNotEqual ? 'notequal' : 'equal';\n }\n coll.push(fObj);\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\n instance: this, handler: this.fltrBtnHandler, arg1: fObj.field, arg2: fObj.predicate, arg3: fObj.operator,\n arg4: fObj.matchCase, arg5: fObj.ignoreAccent, arg6: fObj.value\n });\n return;\n }\n }\n this.initiateFilter(coll);\n }\n else {\n this.clearFilter();\n }\n };\n CheckBoxFilter.prototype.initiateFilter = function (fColl) {\n var firstVal = fColl[0];\n var predicate;\n if (!isNullOrUndefined(firstVal)) {\n predicate = firstVal.ejpredicate ? firstVal.ejpredicate :\n new Predicate(firstVal.field, firstVal.operator, firstVal.value, !firstVal.matchCase, firstVal.ignoreAccent);\n for (var j = 1; j < fColl.length; j++) {\n predicate = fColl[j].ejpredicate !== undefined ?\n predicate[fColl[j].predicate](fColl[j].ejpredicate) :\n predicate[fColl[j].predicate](fColl[j].field, fColl[j].operator, fColl[j].value, !fColl[j].matchCase, fColl[j].ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: Predicate.or(predicate)\n };\n this.options.handler(args);\n }\n };\n CheckBoxFilter.prototype.refreshCheckboxes = function () {\n var _this = this;\n var val = this.sInput.value;\n var column = this.options.column;\n var query = column.isForeignColumn() ? this.foreignKeyQuery.clone() : this.options.query.clone();\n var foreignQuery = this.options.query.clone();\n var parsed = (this.options.type !== 'string' && parseFloat(val)) ? parseFloat(val) : val;\n var operator = this.parent.getDataModule().isRemote() ?\n (this.options.type === 'string' ? 'contains' : 'equal') : (this.options.type ? 'startswith' : 'contains');\n var matchCase = true;\n var ignoreAccent = this.parent.filterSettings.ignoreAccent;\n var field = column.isForeignColumn() ? column.foreignKeyValue : column.field;\n parsed = (parsed === '' || parsed === undefined) ? undefined : parsed;\n var predicte;\n if (this.options.type === 'boolean') {\n if (parsed !== undefined &&\n this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'true';\n }\n else if (parsed !== undefined &&\n this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'false';\n }\n parsed = parsed === 'true';\n operator = 'equal';\n }\n this.addDistinct(query);\n var args = {\n requestType: events.filterSearchBegin,\n filterModel: this, columnName: field, column: column,\n operator: operator, matchCase: matchCase, ignoreAccent: ignoreAccent, filterChoiceCount: null,\n query: query\n };\n this.parent.trigger(events.actionBegin, args);\n predicte = new Predicate(field, args.operator, parsed, args.matchCase, args.ignoreAccent);\n if (this.options.type === 'date' || this.options.type === 'datetime') {\n parsed = this.valueFormatter.fromView(val, this.options.parserFn, this.options.type);\n operator = 'equal';\n if (isNullOrUndefined(parsed) && val.length) {\n return;\n }\n var filterObj = {\n field: field, operator: operator, value: parsed, matchCase: matchCase,\n ignoreAccent: ignoreAccent\n };\n predicte = getDatePredicate(filterObj, this.options.type);\n }\n if (val.length) {\n query.where(predicte);\n }\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n var fPredicate = {};\n showSpinner(this.spinner);\n this.renderEmpty = false;\n if (column.isForeignColumn() && val.length) {\n // tslint:disable-next-line:no-any\n column.dataSource.executeQuery(query).then(function (e) {\n var columnData = _this.options.column.columnData;\n _this.options.column.columnData = e.result;\n _this.parent.notify(events.generateQuery, { predicate: fPredicate, column: column });\n if (fPredicate.predicate.predicates.length) {\n foreignQuery.where(fPredicate.predicate);\n }\n else {\n _this.renderEmpty = true;\n }\n _this.options.column.columnData = columnData;\n foreignQuery.take(args.filterChoiceCount);\n _this.search(args, foreignQuery);\n });\n }\n else {\n query.take(args.filterChoiceCount);\n this.search(args, query);\n }\n };\n CheckBoxFilter.prototype.search = function (args, query) {\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.filterEvent(args, query);\n }\n else {\n this.processSearch(query);\n }\n };\n CheckBoxFilter.prototype.getPredicateFromCols = function (columns) {\n var predicates = CheckBoxFilter.getPredicate(columns);\n var predicateList = [];\n var fPredicate = {};\n var foreignColumn = this.parent.getForeignKeyColumns();\n for (var _i = 0, _a = Object.keys(predicates); _i < _a.length; _i++) {\n var prop = _a[_i];\n var col = getColumnByForeignKeyValue(prop, foreignColumn);\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(Predicate.or(fPredicate.predicate.predicates));\n }\n }\n else {\n predicateList.push(predicates[prop]);\n }\n }\n return predicateList.length && Predicate.and(predicateList);\n };\n CheckBoxFilter.prototype.addDistinct = function (query) {\n var filteredColumn = DataUtil.distinct(this.parent.filterSettings.columns, 'field');\n if (filteredColumn.indexOf(this.options.column.field) <= -1) {\n filteredColumn = filteredColumn.concat(this.options.column.field);\n }\n query.distinct(filteredColumn);\n return query;\n };\n CheckBoxFilter.prototype.getAllData = function () {\n var query = this.parent.query.clone();\n query.requiresCount(); //consider take query\n this.addDistinct(query);\n var args = {\n requestType: events.filterChoiceRequest, filterModel: this, query: query, filterChoiceCount: null\n };\n this.parent.trigger(events.actionBegin, args);\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n query.take(args.filterChoiceCount);\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.filterEvent(args, query);\n }\n else {\n this.processDataOperation(query, true);\n }\n };\n CheckBoxFilter.prototype.filterEvent = function (args, query) {\n var _this = this;\n var def = this.eventPromise(args, query);\n def.promise.then(function (e) {\n _this.dataSuccess(e);\n });\n };\n CheckBoxFilter.prototype.eventPromise = function (args, query) {\n var state;\n state = this.getStateEventArgument(query);\n var def = new Deferred();\n state.dataSource = def.resolve;\n state.action = args;\n this.parent.trigger(events.dataStateChange, state);\n return def;\n };\n ;\n CheckBoxFilter.prototype.getStateEventArgument = function (query) {\n var adaptr = new UrlAdaptor();\n var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n var state = adaptr.processQuery(dm, query);\n var data = JSON.parse(state.data);\n return data;\n };\n ;\n CheckBoxFilter.prototype.processDataOperation = function (query, isInitial) {\n var _this = this;\n this.options.dataSource = this.options.dataSource instanceof DataManager ?\n this.options.dataSource : new DataManager(this.options.dataSource);\n var allPromise = [];\n var runArray = [];\n if (this.options.column.isForeignColumn() && isInitial) {\n allPromise.push(this.options.column.dataSource.executeQuery(this.foreignKeyQuery));\n runArray.push(function (data) { return _this.foreignKeyData = data; });\n }\n allPromise.push(this.options.dataSource.executeQuery(query));\n runArray.push(this.dataSuccess.bind(this));\n var i = 0;\n Promise.all(allPromise).then(function (e) {\n e.forEach(function (data) {\n runArray[i++](data.result);\n });\n });\n };\n CheckBoxFilter.prototype.dataSuccess = function (e) {\n this.fullData = e;\n var query = new Query();\n if ((this.options.filteredColumns.length)) {\n var cols = [];\n for (var i = 0; i < this.options.filteredColumns.length; i++) {\n if (!(this.options.filteredColumns[i].field === this.options.field ||\n this.options.filteredColumns[i].field === this.options.foreignKeyValue)) {\n cols.push(this.options.filteredColumns[i]);\n }\n }\n var predicate = this.getPredicateFromCols(cols);\n if (predicate) {\n query.where(predicate);\n }\n }\n // query.select(this.options.field);\n var result = new DataManager(this.fullData).executeLocal(query);\n var col = this.options.column;\n this.filteredData = CheckBoxFilter.\n getDistinct(result, this.options.field, col, this.foreignKeyData).records || [];\n this.processDataSource(null, true, this.filteredData);\n this.sInput.focus();\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: this.options.field, columnType: this.options.type\n };\n this.parent.trigger(events.actionComplete, args);\n };\n CheckBoxFilter.prototype.processDataSource = function (query, isInitial, dataSource) {\n showSpinner(this.spinner);\n // query = query ? query : this.options.query.clone();\n // query.requiresCount();\n // let result: Object = new DataManager(dataSource as JSON[]).executeLocal(query);\n // let res: { result: Object[] } = result as { result: Object[] };\n this.updateResult();\n this.createFilterItems(dataSource, isInitial);\n };\n CheckBoxFilter.prototype.processSearch = function (query) {\n this.processDataOperation(query);\n };\n CheckBoxFilter.prototype.updateResult = function () {\n this.result = {};\n var predicate = this.getPredicateFromCols(this.options.filteredColumns);\n var query = new Query();\n if (predicate) {\n query.where(predicate);\n }\n var result = new DataManager(this.fullData).executeLocal(query);\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n this.result[getValue(this.options.field, res)] = true;\n }\n };\n CheckBoxFilter.prototype.clickHandler = function (e) {\n var target = e.target;\n var elem = parentsUntil(target, 'e-checkbox-wrapper');\n if (parentsUntil(target, 'e-searchbox')) {\n this.searchBoxClick(e);\n }\n if (elem) {\n var selectAll = elem.querySelector('.e-selectall');\n if (selectAll) {\n this.updateAllCBoxes(!selectAll.classList.contains('e-check'));\n }\n else {\n toogleCheckbox(elem.parentElement);\n }\n this.updateIndeterminatenBtn();\n elem.querySelector('.e-chk-hidden').focus();\n }\n };\n CheckBoxFilter.prototype.updateAllCBoxes = function (checked) {\n var cBoxes = [].slice.call(this.cBox.querySelectorAll('.e-frame'));\n for (var _i = 0, cBoxes_1 = cBoxes; _i < cBoxes_1.length; _i++) {\n var cBox = cBoxes_1[_i];\n removeAddCboxClasses(cBox, checked);\n }\n };\n CheckBoxFilter.prototype.dialogOpen = function () {\n if (this.parent.element.classList.contains('e-device')) {\n this.dialogObj.element.querySelector('.e-input-group').classList.remove('e-input-focus');\n this.dialogObj.element.querySelector('.e-btn').focus();\n }\n };\n CheckBoxFilter.prototype.createCheckbox = function (value, checked, data) {\n var elem = checked ? this.cBoxTrue.cloneNode(true) :\n this.cBoxFalse.cloneNode(true);\n var label = elem.querySelector('.e-label');\n label.innerHTML = !isNullOrUndefined(value) && value.toString().length ? value :\n this.getLocalizedLabel('Blanks');\n addClass([label], ['e-checkboxfiltertext']);\n if (this.options.template) {\n label.innerHTML = '';\n appendChildren(label, this.options.template(data, this.parent, 'filterItemTemplate'));\n }\n return elem;\n };\n CheckBoxFilter.prototype.updateIndeterminatenBtn = function () {\n var cnt = this.cBox.children.length - 1;\n var className = [];\n var elem = this.cBox.querySelector('.e-selectall');\n var selected = this.cBox.querySelectorAll('.e-check:not(.e-selectall)').length;\n var btn = this.dialogObj.btnObj[0];\n btn.disabled = false;\n if (cnt === selected) {\n className = ['e-check'];\n }\n else if (selected) {\n className = ['e-stop'];\n }\n else {\n className = ['e-uncheck'];\n btn.disabled = true;\n }\n this.filterState = !btn.disabled;\n btn.dataBind();\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n addClass([elem], className);\n };\n CheckBoxFilter.prototype.createFilterItems = function (data, isInitial) {\n var _a;\n var cBoxes = this.parent.createElement('div');\n var btn = this.dialogObj.btnObj[0];\n this.itemsCnt = data.length;\n if (data.length && !this.renderEmpty) {\n var selectAllValue = this.getLocalizedLabel('SelectAll');\n var checkBox = this.createCheckbox(selectAllValue, false, (_a = {}, _a[this.options.field] = selectAllValue, _a));\n var selectAll = createCboxWithWrap(getUid('cbox'), checkBox, 'e-ftrchk');\n selectAll.querySelector('.e-frame').classList.add('e-selectall');\n cBoxes.appendChild(selectAll);\n var predicate = new Predicate('field', 'equal', this.options.field);\n if (this.options.foreignKeyValue) {\n predicate = predicate.or('field', 'equal', this.options.foreignKeyValue);\n }\n var isColFiltered = new DataManager(this.options.filteredColumns).executeLocal(new Query().where(predicate)).length;\n for (var i = 0; i < data.length; i++) {\n var uid = getUid('cbox');\n this.values[uid] = getValue('ejValue', data[i]);\n var value = this.valueFormatter.toView(getValue(this.options.field, data[i]), this.options.formatFn);\n var checkbox = this.createCheckbox(value, this.getCheckedState(isColFiltered, this.values[uid]), getValue('dataObj', data[i]));\n cBoxes.appendChild(createCboxWithWrap(uid, checkbox, 'e-ftrchk'));\n }\n this.cBox.innerHTML = '';\n appendChildren(this.cBox, [].slice.call(cBoxes.children));\n this.updateIndeterminatenBtn();\n btn.disabled = false;\n }\n else {\n cBoxes.appendChild(this.parent.createElement('span', { innerHTML: this.getLocalizedLabel('NoResult') }));\n this.cBox.innerHTML = '';\n appendChildren(this.cBox, [].slice.call(cBoxes.children));\n btn.disabled = true;\n }\n this.filterState = !btn.disabled;\n btn.dataBind();\n var args = { requestType: events.filterChoiceRequest, filterModel: this, dataSource: this.renderEmpty ? [] : data };\n this.parent.trigger(events.actionComplete, args);\n hideSpinner(this.spinner);\n };\n CheckBoxFilter.prototype.getCheckedState = function (isColFiltered, value) {\n if (!this.isFiltered || !isColFiltered) {\n return true;\n }\n else {\n return this.result[value];\n }\n };\n CheckBoxFilter.getDistinct = function (json, field, column, foreignKeyData) {\n var len = json.length;\n var result = [];\n var value;\n var ejValue = 'ejValue';\n var lookup = {};\n var isForeignKey = column && column.isForeignColumn();\n while (len--) {\n value = json[len];\n value = getValue(field, value); //local remote diff, check with mdu \n if (!isNullOrUndefined(value)) {\n if (!(value in lookup)) {\n var obj = {};\n obj[ejValue] = value;\n lookup[value] = true;\n if (isForeignKey) {\n var foreignDataObj = getForeignData(column, {}, value, foreignKeyData)[0];\n setValue(events.foreignKeyData, foreignDataObj, json[len]);\n value = getValue(column.foreignKeyValue, foreignDataObj);\n }\n setValue(field, isNullOrUndefined(value) ? null : value, obj);\n setValue('dataObj', json[len], obj);\n result.push(obj);\n }\n }\n }\n return DataUtil.group(DataUtil.sort(result, field, DataUtil.fnAscending), 'ejValue');\n };\n CheckBoxFilter.getPredicate = function (columns) {\n var cols = DataUtil.distinct(columns, 'field', true) || [];\n var collection = [];\n var pred = {};\n for (var i = 0; i < cols.length; i++) {\n collection = new DataManager(columns).executeLocal(new Query().where('field', 'equal', cols[i].field));\n if (collection.length !== 0) {\n pred[cols[i].field] = CheckBoxFilter.generatePredicate(collection);\n }\n }\n return pred;\n };\n CheckBoxFilter.generatePredicate = function (cols) {\n var len = cols ? cols.length : 0;\n var predicate;\n var first;\n first = CheckBoxFilter.updateDateFilter(cols[0]);\n first.ignoreAccent = !isNullOrUndefined(first.ignoreAccent) ? first.ignoreAccent : false;\n if (first.type === 'date' || first.type === 'datetime') {\n predicate = getDatePredicate(first, first.type);\n }\n else {\n predicate = first.ejpredicate ? first.ejpredicate :\n new Predicate(first.field, first.operator, first.value, !CheckBoxFilter.getCaseValue(first), first.ignoreAccent);\n }\n for (var p = 1; p < len; p++) {\n cols[p] = CheckBoxFilter.updateDateFilter(cols[p]);\n if (len > 2 && p > 1 && cols[p].predicate === 'or') {\n if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n predicate.predicates.push(getDatePredicate(cols[p], cols[p].type));\n }\n else {\n predicate.predicates.push(new Predicate(cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilter.getCaseValue(cols[p]), cols[p].ignoreAccent));\n }\n }\n else {\n if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n predicate = predicate[(cols[p].predicate)](getDatePredicate(cols[p]), cols[p].type, cols[p].ignoreAccent);\n }\n else {\n predicate = cols[p].ejpredicate ?\n predicate[cols[p].predicate](cols[p].ejpredicate) :\n predicate[(cols[p].predicate)](cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilter.getCaseValue(cols[p]), cols[p].ignoreAccent);\n }\n }\n }\n return predicate || null;\n };\n CheckBoxFilter.getCaseValue = function (filter) {\n if (isNullOrUndefined(filter.matchCase)) {\n return true;\n }\n else {\n return filter.matchCase;\n }\n };\n CheckBoxFilter.updateDateFilter = function (filter) {\n if ((filter.type === 'date' || filter.type === 'datetime' || filter.value instanceof Date)) {\n filter.type = filter.type || 'date';\n }\n return filter;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n CheckBoxFilter.prototype.getModuleName = function () {\n return 'checkboxFilter';\n };\n return CheckBoxFilter;\n}());\nexport { CheckBoxFilter };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate, Deferred, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { setFormatter, getDatePredicate, getColumnByForeignKeyValue } from '../base/util';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\n/**\n * Grid data module is used to generate query and data source.\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module.\n * @hidden\n */\n function Data(parent, serviceLocator) {\n this.dataState = { isPending: false, resolver: null, group: [] };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.initDataManager();\n if (this.parent.isDestroyed || this.getModuleName() === 'foreignKey') {\n return;\n }\n this.parent.on(events.rowsAdded, this.addRows, this);\n this.parent.on(events.rowsRemoved, this.removeRows, this);\n this.parent.on(events.dataSourceModified, this.initDataManager, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.updateData, this.crudActions, this);\n this.parent.on(events.addDeleteAction, this.getData, this);\n }\n Data.prototype.getModuleName = function () {\n return 'data';\n };\n /**\n * The function used to initialize dataManager and external query\n * @return {void}\n */\n Data.prototype.initDataManager = function () {\n var gObj = this.parent;\n this.dataManager = gObj.dataSource instanceof DataManager ? gObj.dataSource :\n (isNullOrUndefined(gObj.dataSource) ? new DataManager() : new DataManager(gObj.dataSource));\n gObj.query = gObj.query instanceof Query ? gObj.query : new Query();\n };\n /**\n * The function is used to generate updated Query from Grid model.\n * @return {Query}\n * @hidden\n */\n Data.prototype.generateQuery = function (skipPage) {\n var gObj = this.parent;\n var query = gObj.query.clone();\n if (this.parent.columnQueryMode === 'ExcludeHidden') {\n query.select(this.parent.getColumns().filter(function (column) { return !(column.isPrimaryKey !== true && column.visible === false || column.field === undefined); }).map(function (column) { return column.field; }));\n }\n else if (this.parent.columnQueryMode === 'Schema') {\n var selectQueryFields = [];\n var columns = this.parent.columns;\n for (var i = 0; i < columns.length; i++) {\n selectQueryFields.push(columns[i].field);\n }\n query.select(selectQueryFields);\n }\n this.filterQuery(query);\n this.searchQuery(query);\n this.aggregateQuery(query);\n this.sortQuery(query);\n this.pageQuery(query, skipPage);\n this.groupQuery(query);\n return query;\n };\n Data.prototype.aggregateQuery = function (query, isForeign) {\n this.parent.aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) { return query.aggregate(type.toLowerCase(), column.field); });\n });\n });\n return query;\n };\n Data.prototype.pageQuery = function (query, skipPage) {\n var gObj = this.parent;\n if ((gObj.allowPaging || gObj.enableVirtualization) && skipPage !== true) {\n gObj.pageSettings.currentPage = Math.max(1, gObj.pageSettings.currentPage);\n if (gObj.pageSettings.pageCount <= 0) {\n gObj.pageSettings.pageCount = 8;\n }\n if (gObj.pageSettings.pageSize <= 0) {\n gObj.pageSettings.pageSize = 12;\n }\n query.page(gObj.pageSettings.currentPage, gObj.pageSettings.pageSize);\n }\n return query;\n };\n Data.prototype.groupQuery = function (query) {\n var gObj = this.parent;\n if (gObj.allowGrouping && gObj.groupSettings.columns.length) {\n var columns = gObj.groupSettings.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n var column = this.getColumnByField(columns[i]);\n var isGrpFmt = column.enableGroupByFormat;\n var format = column.format;\n if (isGrpFmt) {\n query.group(columns[i], this.formatGroupColumn.bind(this), format);\n }\n else {\n query.group(columns[i], null);\n }\n }\n }\n return query;\n };\n Data.prototype.sortQuery = function (query) {\n var gObj = this.parent;\n if ((gObj.allowSorting || gObj.allowGrouping) && gObj.sortSettings.columns.length) {\n var columns = gObj.sortSettings.columns;\n var sortGrp = [];\n for (var i = columns.length - 1; i > -1; i--) {\n var col = this.getColumnByField(columns[i].field);\n if (col) {\n col.setSortDirection(columns[i].direction);\n }\n var fn = col.sortComparer && !this.isRemote() ? col.sortComparer.bind(col) :\n columns[i].direction;\n if (gObj.groupSettings.columns.indexOf(columns[i].field) === -1) {\n query.sortBy(col.field, fn);\n }\n else {\n sortGrp.push({ direction: fn, field: col.field });\n }\n }\n for (var i = 0, len = sortGrp.length; i < len; i++) {\n query.sortBy(sortGrp[i].field, sortGrp[i].direction);\n }\n }\n return query;\n };\n Data.prototype.searchQuery = function (query) {\n var _this = this;\n var sSettings = this.parent.searchSettings;\n var fields = sSettings.fields.length ? sSettings.fields : this.parent.getColumns().map(function (f) { return f.field; });\n var predicateList = [];\n var needForeignKeySearch = false;\n if (this.parent.searchSettings.key.length) {\n needForeignKeySearch = this.parent.getForeignKeyColumns().some(function (col) { return fields.indexOf(col.field) > -1; });\n if (needForeignKeySearch && !(this.dataManager.adaptor.getModulename &&\n this.dataManager.adaptor.getModulename() === 'ODataV4Adaptor')) {\n fields.forEach(function (columnName) {\n var column = _this.getColumnByField(columnName);\n if (column.isForeignColumn()) {\n predicateList = _this.fGeneratePredicate(column, predicateList);\n }\n else {\n predicateList.push(new Predicate(column.field, sSettings.operator, sSettings.key, sSettings.ignoreCase, sSettings.ignoreAccent));\n }\n });\n query.where(Predicate.or(predicateList));\n }\n else {\n query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n }\n }\n return query;\n };\n Data.prototype.filterQuery = function (query, column, skipFoerign) {\n var gObj = this.parent;\n var predicateList = [];\n var fPredicate = {};\n var actualFilter = [];\n var foreignColumn = this.parent.getForeignKeyColumns();\n if (gObj.allowFiltering && gObj.filterSettings.columns.length) {\n var columns = column ? column : gObj.filterSettings.columns;\n var colType = {};\n for (var _i = 0, _a = gObj.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n colType[col.field] = col.filter.type ? col.filter.type : gObj.filterSettings.type;\n }\n var checkBoxCols = [];\n var defaultFltrCols = [];\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var col = columns_1[_b];\n if (colType[col.field] === 'CheckBox' || colType[col.field] === 'Excel') {\n checkBoxCols.push(col);\n }\n else {\n defaultFltrCols.push(col);\n }\n }\n if (checkBoxCols.length) {\n var excelPredicate = CheckBoxFilter.getPredicate(checkBoxCols);\n for (var _c = 0, _d = Object.keys(excelPredicate); _c < _d.length; _c++) {\n var prop = _d[_c];\n var col = getColumnByForeignKeyValue(prop, foreignColumn);\n if (col && !skipFoerign) {\n predicateList = this.fGeneratePredicate(col, predicateList);\n actualFilter.push(col);\n }\n else {\n predicateList.push(excelPredicate[prop]);\n }\n }\n }\n if (defaultFltrCols.length) {\n for (var _e = 0, defaultFltrCols_1 = defaultFltrCols; _e < defaultFltrCols_1.length; _e++) {\n var col = defaultFltrCols_1[_e];\n var column_1 = this.getColumnByField(col.field) ||\n getColumnByForeignKeyValue(col.field, this.parent.getForeignKeyColumns());\n var sType = column_1.type;\n if (getColumnByForeignKeyValue(col.field, foreignColumn) && !skipFoerign) {\n actualFilter.push(col);\n predicateList = this.fGeneratePredicate(column_1, predicateList);\n }\n else {\n if (sType !== 'date' && sType !== 'datetime') {\n predicateList.push(new Predicate(col.field, col.operator, col.value, !col.matchCase, this.parent.filterSettings.ignoreAccent));\n }\n else {\n predicateList.push(getDatePredicate(col, sType));\n }\n }\n }\n }\n if (predicateList.length) {\n query.where(Predicate.and(predicateList));\n }\n else {\n this.parent.notify(events.showEmptyGrid, {});\n }\n }\n return query;\n };\n Data.prototype.fGeneratePredicate = function (col, predicateList) {\n var fPredicate = {};\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(fPredicate.predicate);\n }\n }\n return predicateList;\n };\n /**\n * The function is used to get dataManager promise by executing given Query.\n * @param {Query} query - Defines the query which will execute along with data processing.\n * @return {Promise}\n * @hidden\n */\n Data.prototype.getData = function (args, query) {\n var _this = this;\n if (args === void 0) { args = { requestType: '' }; }\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ?\n args.foreignKeyData : this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n var def = this.eventPromise(args, query, key);\n return def.promise;\n }\n else {\n var crud = void 0;\n switch (args.requestType) {\n case 'delete':\n query = query ? query : this.generateQuery();\n var len = Object.keys(args.data).length;\n if (len === 1) {\n crud = this.dataManager.remove(key, args.data[0], query.fromTable, query);\n }\n else {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n changes.deletedRecords = args.data;\n crud = this.dataManager.saveChanges(changes, key, query.fromTable, query.requiresCount());\n }\n break;\n case 'save':\n query = query ? query : this.generateQuery();\n args.index = isNullOrUndefined(args.index) ? 0 : args.index;\n crud = this.dataManager.insert(args.data, query.fromTable, query, args.index);\n break;\n }\n if (crud && !Array.isArray(crud) && !crud.hasOwnProperty('deletedRecords')) {\n return crud.then(function (result) {\n return _this.insert(query, args);\n });\n }\n else {\n return this.insert(query, args);\n }\n }\n };\n Data.prototype.insert = function (query, args) {\n if (args.requestType === 'save') {\n this.parent.notify(events.recordAdded, args);\n }\n return this.executeQuery(query);\n };\n Data.prototype.executeQuery = function (query) {\n var _this = this;\n if (this.dataManager.ready) {\n var deferred_1 = new Deferred();\n var ready = this.dataManager.ready;\n ready.then(function (e) {\n _this.dataManager.executeQuery(query).then(function (result) {\n deferred_1.resolve(result);\n });\n }).catch(function (e) {\n deferred_1.reject(e);\n });\n return deferred_1.promise;\n }\n else {\n return this.dataManager.executeQuery(query);\n }\n };\n Data.prototype.formatGroupColumn = function (value, field) {\n var gObj = this.parent;\n var serviceLocator = this.serviceLocator;\n var column = this.getColumnByField(field);\n var date = value;\n if (!column.type) {\n column.type = date.getDay ? (date.getHours() > 0 || date.getMinutes() > 0 ||\n date.getSeconds() > 0 || date.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n if (isNullOrUndefined(column.getFormatter())) {\n setFormatter(serviceLocator, column);\n }\n var formatVal = ValueFormatter.prototype.toView(value, column.getFormatter());\n return formatVal;\n };\n Data.prototype.crudActions = function (args) {\n var query = this.generateQuery();\n var promise = null;\n var pr = 'promise';\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ? args.foreignKeyData :\n this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.eventPromise(args, query, key);\n }\n switch (args.requestType) {\n case 'save':\n promise = this.dataManager.update(key, args.data, query.fromTable, query, args.previousData);\n break;\n }\n args[pr] = promise;\n this.parent.notify(events.crudAction, args);\n };\n /** @hidden */\n Data.prototype.saveChanges = function (changes, key, original) {\n var query = this.generateQuery().requiresCount();\n if ('result' in this.parent.dataSource) {\n var state = void 0;\n state = this.getStateEventArgument(query);\n var deff = new Deferred();\n var args = {\n requestType: 'batchsave', changes: changes, key: key, query: query,\n endEdit: deff.resolve\n };\n this.setState({ isPending: true, resolver: deff.resolve });\n this.parent.trigger(events.dataSourceChanged, args);\n return deff.promise;\n }\n else {\n var promise = this.dataManager.saveChanges(changes, key, query.fromTable, query, original);\n return promise;\n }\n };\n Data.prototype.getKey = function (keys) {\n if (keys && keys.length) {\n return keys[0];\n }\n return undefined;\n };\n /** @hidden */\n Data.prototype.isRemote = function () {\n return this.dataManager.dataSource.offline !== true && this.dataManager.dataSource.url !== undefined;\n };\n Data.prototype.addRows = function (e) {\n for (var i = e.records.length; i > 0; i--) {\n this.dataManager.dataSource.json.splice(e.toIndex, 0, e.records[i - 1]);\n }\n };\n Data.prototype.removeRows = function (e) {\n var json = this.dataManager.dataSource.json;\n this.dataManager.dataSource.json = json.filter(function (value, index) { return e.records.indexOf(value) === -1; });\n };\n Data.prototype.getColumnByField = function (field) {\n var col;\n return (this.parent.columnModel).some(function (column) {\n col = column;\n return column.field === field;\n }) && col;\n };\n Data.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowsAdded, this.addRows);\n this.parent.off(events.rowsRemoved, this.removeRows);\n this.parent.off(events.dataSourceModified, this.initDataManager);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.updateData, this.crudActions);\n this.parent.off(events.addDeleteAction, this.getData);\n };\n Data.prototype.getState = function () {\n return this.dataState;\n };\n Data.prototype.setState = function (state) {\n return this.dataState = state;\n };\n Data.prototype.getStateEventArgument = function (query) {\n var adaptr = new UrlAdaptor();\n var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n var state = adaptr.processQuery(dm, query);\n var data = JSON.parse(state.data);\n return extend(data, state.pvtData);\n };\n Data.prototype.eventPromise = function (args, query, key) {\n var _this = this;\n var state;\n var dataArgs = args;\n state = this.getStateEventArgument(query);\n var def = new Deferred();\n var deff = new Deferred();\n if (args.requestType !== undefined && this.dataState.isDataChanged !== false) {\n state.action = args;\n if (args.requestType === 'save' || args.requestType === 'delete') {\n var editArgs = args;\n editArgs.key = key;\n editArgs.state = state;\n this.setState({ isPending: true, resolver: deff.resolve });\n dataArgs.endEdit = deff.resolve;\n this.parent.trigger(events.dataSourceChanged, editArgs);\n deff.promise.then(function (e) {\n _this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n _this.parent.trigger(events.dataStateChange, state);\n });\n }\n else {\n this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n this.parent.trigger(events.dataStateChange, state);\n }\n }\n else {\n this.setState({});\n def.resolve(this.parent.dataSource);\n }\n return def;\n };\n return Data;\n}());\nexport { Data };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Row\n * @hidden\n */\nvar Row = /** @class */ (function () {\n function Row(options) {\n merge(this, options);\n }\n Row.prototype.clone = function () {\n var row = new Row({});\n merge(row, this);\n row.cells = this.cells.map(function (cell) { return cell.clone(); });\n return row;\n };\n return Row;\n}());\nexport { Row };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Cell\n * @hidden\n */\nvar Cell = /** @class */ (function () {\n function Cell(options) {\n this.isSpanned = false;\n merge(this, options);\n }\n Cell.prototype.clone = function () {\n var cell = new Cell({});\n merge(cell, this);\n return cell;\n };\n return Cell;\n}());\nexport { Cell };\n","import { isNullOrUndefined, attributes } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject } from '../base/util';\nimport { CellType } from '../base/enum';\n/**\n * `CellMergeRender` module.\n * @hidden\n */\nvar CellMergeRender = /** @class */ (function () {\n function CellMergeRender(serviceLocator, parent) {\n this.serviceLocator = serviceLocator;\n this.parent = parent;\n }\n CellMergeRender.prototype.render = function (cellArgs, row, i, td) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || CellType.Data);\n var span = row.cells[i].cellSpan ? row.cells[i].cellSpan :\n (cellArgs.colSpan + i) <= row.cells.length ? cellArgs.colSpan : row.cells.length - i;\n var visible = 0;\n for (var j = i + 1; j < i + span && j < row.cells.length; j++) {\n if (row.cells[j].visible === false) {\n visible++;\n }\n else {\n row.cells[j].isSpanned = true;\n }\n }\n if (visible > 0) {\n for (var j = i + span; j < i + span + visible && j < row.cells.length; j++) {\n row.cells[j].isSpanned = true;\n }\n if (i + span + visible >= row.cells.length) {\n span -= (i + span + visible) - row.cells.length;\n }\n }\n if (row.cells[i].cellSpan) {\n row.data[cellArgs.column.field] = row.cells[i].spanText;\n td = cellRenderer.render(row.cells[i], row.data, { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' });\n }\n if (span > 1) {\n attributes(td, { 'colSpan': span.toString(), 'aria-colSpan': span.toString() });\n }\n if (this.parent.enableColumnVirtualization && !row.cells[i].cellSpan &&\n !this.containsKey(cellArgs.column.field, cellArgs.data[cellArgs.column.field])) {\n this.backupMergeCells(cellArgs.column.field, cellArgs.data[cellArgs.column.field], cellArgs.colSpan);\n }\n return td;\n };\n CellMergeRender.prototype.backupMergeCells = function (fName, data, span) {\n this.setMergeCells(this.generteKey(fName, data), span);\n };\n CellMergeRender.prototype.generteKey = function (fname, data) {\n return fname + '__' + data.toString();\n };\n CellMergeRender.prototype.splitKey = function (key) {\n return key.split('__');\n };\n CellMergeRender.prototype.containsKey = function (fname, data) {\n return this.getMergeCells().hasOwnProperty(this.generteKey(fname, data));\n };\n CellMergeRender.prototype.getMergeCells = function () {\n return this.parent.mergeCells;\n };\n CellMergeRender.prototype.setMergeCells = function (key, span) {\n this.parent.mergeCells[key] = span;\n };\n CellMergeRender.prototype.updateVirtualCells = function (rows) {\n var mCells = this.getMergeCells();\n for (var _i = 0, _a = Object.keys(mCells); _i < _a.length; _i++) {\n var key = _a[_i];\n var value = mCells[key];\n var merge = this.splitKey(key);\n var columnIndex = this.getIndexFromAllColumns(merge[0]);\n var vColumnIndices = this.parent.getColumnIndexesInView();\n var span = value - (vColumnIndices[0] - columnIndex);\n if (columnIndex < vColumnIndices[0] && span > 1) {\n for (var _b = 0, rows_1 = rows; _b < rows_1.length; _b++) {\n var row = rows_1[_b];\n if (row.data[merge[0]].toString() === merge[1].toString()) {\n row.cells[0].cellSpan = span;\n row.cells[0].spanText = merge[1];\n break;\n }\n }\n }\n }\n return rows;\n };\n CellMergeRender.prototype.getIndexFromAllColumns = function (field) {\n var index = iterateArrayOrObject(this.parent.getVisibleColumns(), function (item, index) {\n if (item.field === field) {\n return index;\n }\n return undefined;\n })[0];\n return index;\n };\n return CellMergeRender;\n}());\nexport { CellMergeRender };\n","import { isNullOrUndefined, extend, addClass } from '@syncfusion/ej2-base';\nimport { attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, getObject } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { CellMergeRender } from './cell-merge-renderer';\n/**\n * RowRenderer class which responsible for building row content.\n * @hidden\n */\nvar RowRenderer = /** @class */ (function () {\n function RowRenderer(serviceLocator, cellType, parent) {\n this.cellType = cellType;\n this.serviceLocator = serviceLocator;\n this.parent = parent;\n this.element = this.parent.createElement('tr', { attrs: { role: 'row' } });\n }\n /**\n * Function to render the row content based on Column[] and data.\n * @param {Column[]} columns\n * @param {Object} data?\n * @param {{[x:string]:Object}} attributes?\n * @param {string} rowTemplate?\n */\n RowRenderer.prototype.render = function (row, columns, attributes, rowTemplate, cloneNode) {\n return this.refreshRow(row, columns, attributes, rowTemplate, cloneNode);\n };\n /**\n * Function to refresh the row content based on Column[] and data.\n * @param {Column[]} columns\n * @param {Object} data?\n * @param {{[x:string]:Object}} attributes?\n * @param {string} rowTemplate?\n */\n RowRenderer.prototype.refresh = function (row, columns, isChanged, attributes, rowTemplate) {\n if (isChanged) {\n row.data = extend({}, row.changes);\n this.refreshMergeCells(row);\n }\n var node = this.parent.element.querySelector('[data-uid=' + row.uid + ']');\n var tr = this.refreshRow(row, columns, attributes, rowTemplate);\n var cells = [].slice.call(tr.cells);\n node.innerHTML = '';\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n node.appendChild(cell);\n }\n };\n RowRenderer.prototype.refreshRow = function (row, columns, attributes, rowTemplate, cloneNode) {\n var tr = !isNullOrUndefined(cloneNode) ? cloneNode : this.element.cloneNode();\n var rowArgs = { data: row.data };\n var cellArgs = { data: row.data };\n var attrCopy = extend({}, attributes, {});\n var chekBoxEnable = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox' && col.field; })[0];\n var value = false;\n if (chekBoxEnable) {\n value = getObject(chekBoxEnable.field, rowArgs.data);\n }\n if (row.isDataRow) {\n row.isSelected = this.parent.getSelectedRowIndexes().indexOf(row.index) > -1 || value;\n }\n if (row.isDataRow && this.parent.isCheckBoxSelection\n && this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n row.isSelected = true;\n if (this.parent.getSelectedRowIndexes().indexOf(row.index) === -1) {\n this.parent.getSelectedRowIndexes().push(row.index);\n }\n }\n this.buildAttributeFromRow(tr, row);\n addAttributes(tr, attrCopy);\n setStyleAndAttributes(tr, row.attributes);\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n for (var i = 0, len = row.cells.length; i < len; i++) {\n var cell = row.cells[i];\n cell.isSelected = row.isSelected;\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || CellType.Data);\n var attrs = { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' };\n if (row.isExpand && row.cells[i].cellType === CellType.DetailExpand) {\n attrs['class'] = 'e-detailrowexpand';\n }\n var td = cellRenderer.render(row.cells[i], row.data, attrs);\n if (row.cells[i].cellType !== CellType.Filter) {\n if (row.cells[i].cellType === CellType.Data || row.cells[i].cellType === CellType.CommandColumn) {\n this.parent.trigger(queryCellInfo, extend(cellArgs, {\n cell: td, column: cell.column, colSpan: 1,\n foreignKeyData: row.cells[i].foreignKeyData\n }));\n if (cellArgs.colSpan > 1 || row.cells[i].cellSpan > 1) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n td = cellMerge.render(cellArgs, row, i, td);\n }\n }\n if (!row.cells[i].isSpanned) {\n tr.appendChild(td);\n }\n }\n }\n var args = { row: tr, rowHeight: this.parent.rowHeight };\n if (row.isDataRow) {\n this.parent.trigger(rowDataBound, extend(rowArgs, args));\n }\n if (this.parent.enableVirtualization) {\n rowArgs.rowHeight = this.parent.rowHeight;\n }\n if (rowArgs.rowHeight) {\n tr.style.height = rowArgs.rowHeight + 'px';\n }\n else if (this.parent.rowHeight && (tr.querySelector('.e-headercell') || tr.querySelector('.e-groupcaption'))) {\n tr.style.height = this.parent.rowHeight + 'px';\n }\n if (row.cssClass) {\n tr.classList.add(row.cssClass);\n }\n if (this.parent.element.scrollHeight > this.parent.height && this.parent.aggregates.length) {\n for (var i = 0; i < this.parent.aggregates.length; i++) {\n var property = 'properties';\n var column = 'columns';\n if (this.parent.aggregates[i][property][column][0].footerTemplate) {\n var summarycell = tr.querySelectorAll('.e-summarycell');\n if (summarycell.length) {\n var lastSummaryCell = (summarycell[summarycell.length - 1]);\n addClass([lastSummaryCell], ['e-lastsummarycell']);\n }\n }\n }\n }\n return tr;\n };\n RowRenderer.prototype.refreshMergeCells = function (row) {\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n cell.isSpanned = false;\n }\n return row;\n };\n /**\n * Function to check and add alternative row css class.\n * @param {Element} tr\n * @param {{[x:string]:Object}} attr\n */\n RowRenderer.prototype.buildAttributeFromRow = function (tr, row) {\n var attr = {};\n var prop = { 'rowindex': 'aria-rowindex', 'dataUID': 'data-uid', 'ariaSelected': 'aria-selected' };\n var classes = [];\n if (row.isDataRow) {\n classes.push('e-row');\n }\n if (row.isAltRow) {\n classes.push('e-altrow');\n }\n if (!isNullOrUndefined(row.index)) {\n attr[prop.rowindex] = row.index;\n }\n if (row.rowSpan) {\n attr.rowSpan = row.rowSpan;\n }\n if (row.uid) {\n attr[prop.dataUID] = row.uid;\n }\n if (row.isSelected) {\n attr[prop.ariaSelected] = true;\n }\n if (row.visible === false) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(tr, attr);\n };\n return RowRenderer;\n}());\nexport { RowRenderer };\n","import { isNullOrUndefined, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Row } from '../models/row';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\nimport { getUid } from '../base/util';\nimport { getForeignData } from '../../grid/base/util';\n/**\n * RowModelGenerator is used to generate grid data rows.\n * @hidden\n */\nvar RowModelGenerator = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n */\n function RowModelGenerator(parent) {\n this.parent = parent;\n }\n RowModelGenerator.prototype.generateRows = function (data, args) {\n var rows = [];\n var startIndex = this.parent.enableVirtualization ? args.startIndex : 0;\n for (var i = 0, len = Object.keys(data).length; i < len; i++, startIndex++) {\n rows[i] = this.generateRow(data[i], startIndex);\n }\n return rows;\n };\n RowModelGenerator.prototype.ensureColumns = function () {\n //TODO: generate dummy column for group, detail here;\n var cols = [];\n if (this.parent.detailTemplate || this.parent.childGrid) {\n cols.push(this.generateCell({}, null, CellType.DetailExpand));\n }\n return cols;\n };\n RowModelGenerator.prototype.generateRow = function (data, index, cssClass, indent) {\n var options = {};\n options.foreignKeyData = {};\n options.uid = getUid('grid-row');\n options.data = data;\n options.index = index;\n options.indent = indent;\n options.isDataRow = true;\n options.isExpand = false;\n options.cssClass = cssClass;\n options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n options.isSelected = this.parent.getSelectedRowIndexes().indexOf(index) > -1;\n this.refreshForeignKeyRow(options);\n var cells = this.ensureColumns();\n var row = new Row(options);\n row.cells = cells.concat(this.generateCells(options));\n return row;\n };\n RowModelGenerator.prototype.refreshForeignKeyRow = function (options) {\n this.parent.getForeignKeyColumns().forEach(function (col) {\n setValue(col.field, getForeignData(col, options.data), options.foreignKeyData);\n });\n };\n RowModelGenerator.prototype.generateCells = function (options) {\n var _this = this;\n var dummies = this.parent.getColumns();\n var tmp = [];\n dummies.forEach(function (dummy, index) {\n return tmp.push(_this.generateCell(dummy, options.uid, isNullOrUndefined(dummy.commands) ? undefined : CellType.CommandColumn, null, index, options.foreignKeyData));\n });\n return tmp;\n };\n RowModelGenerator.prototype.generateCell = function (column, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': !isNullOrUndefined(column.field || column.template),\n 'isTemplate': !isNullOrUndefined(column.template),\n 'rowID': rowId,\n 'column': column,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': column.commands,\n 'isForeignKey': column.isForeignColumn && column.isForeignColumn(),\n 'foreignKeyData': column.isForeignColumn && column.isForeignColumn() && getValue(column.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox') {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n RowModelGenerator.prototype.refreshRows = function (input) {\n var _this = this;\n input.forEach(function (row) {\n _this.refreshForeignKeyRow(row);\n row.cells = _this.generateCells(row);\n });\n return input;\n };\n return RowModelGenerator;\n}());\nexport { RowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Row } from '../models/row';\nimport { Column } from '../models/column';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { calculateAggregate, getUid } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\n/**\n * Summary row model generator\n * @hidden\n */\nvar SummaryModelGenerator = /** @class */ (function () {\n /**\n * Constructor for Summary row model generator\n */\n function SummaryModelGenerator(parent) {\n this.parent = parent;\n }\n SummaryModelGenerator.prototype.getData = function () {\n var _this = this;\n var rows = [];\n this.parent.aggregates.slice().forEach(function (row) {\n var columns = row.columns.filter(function (column) {\n return !(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)\n || _this.columnSelector(column);\n });\n if (columns.length) {\n rows.push({ columns: columns });\n }\n });\n return rows;\n };\n SummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.footerTemplate !== undefined;\n };\n SummaryModelGenerator.prototype.getColumns = function (start, end) {\n var columns = [];\n if (this.parent.allowGrouping) {\n this.parent.groupSettings.columns.forEach(function (value) { return columns.push(new Column({})); });\n }\n if (this.parent.detailTemplate || !isNullOrUndefined(this.parent.childGrid)) {\n columns.push(new Column({}));\n }\n columns.push.apply(columns, this.parent.getColumns());\n return isNullOrUndefined(start) ? columns : columns.slice(start, end);\n };\n SummaryModelGenerator.prototype.generateRows = function (input, args, start, end) {\n var _this = this;\n if (this.parent.currentViewData.length === 0) {\n return [];\n }\n var data = this.buildSummaryData(input, args);\n var rows = [];\n this.getData().forEach(function (row, index) {\n rows.push(_this.getGeneratedRow(row, data[index], args ? args.level : undefined, start, end));\n });\n return rows;\n };\n SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end) {\n var _this = this;\n var tmp = [];\n var indents = this.getIndentByLevel(raw);\n var isDetailGridAlone = !isNullOrUndefined(this.parent.childGrid);\n var indentLength = this.parent.groupSettings.columns.length + (this.parent.detailTemplate ||\n !isNullOrUndefined(this.parent.childGrid) ? 1 : 0);\n this.getColumns(start, end).forEach(function (value, index) { return tmp.push(_this.getGeneratedCell(value, summaryRow, index >= indentLength ? _this.getCellType() : CellType.Indent, indents[index], isDetailGridAlone)); });\n var row = new Row({ data: data, attributes: { class: 'e-summaryrow' } });\n row.cells = tmp;\n row.uid = getUid('grid-row');\n row.visible = tmp.some(function (cell) { return cell.isDataCell && cell.visible; });\n return row;\n };\n SummaryModelGenerator.prototype.getGeneratedCell = function (column, summaryRow, cellType, indent, isDetailGridAlone) {\n //Get the summary column by display\n var sColumn = summaryRow.columns.filter(function (scolumn) { return scolumn.columnName === column.field; })[0];\n var attrs = { 'style': { 'textAlign': column.textAlign } };\n if (indent) {\n attrs.class = indent;\n }\n if (isNullOrUndefined(indent) && isDetailGridAlone) {\n attrs.class = 'e-detailindentcelltop';\n }\n var opt = {\n 'visible': column.visible,\n 'isDataCell': !isNullOrUndefined(sColumn),\n 'isTemplate': sColumn && !isNullOrUndefined(sColumn.footerTemplate\n || sColumn.groupFooterTemplate || sColumn.groupCaptionTemplate),\n 'column': sColumn || {},\n 'attributes': attrs,\n 'cellType': cellType\n };\n return new Cell(opt);\n };\n SummaryModelGenerator.prototype.buildSummaryData = function (data, args) {\n var _this = this;\n var dummy = [];\n var summaryRows = this.getData();\n var single = {};\n var key = '';\n summaryRows.forEach(function (row) {\n single = {};\n row.columns.forEach(function (column) {\n single = _this.setTemplate(column, (args && args.aggregates) ? args : data, single);\n });\n dummy.push(single);\n });\n return dummy;\n };\n SummaryModelGenerator.prototype.getIndentByLevel = function (data) {\n return this.parent.groupSettings.columns.map(function () { return 'e-indentcelltop'; });\n };\n SummaryModelGenerator.prototype.setTemplate = function (column, data, single) {\n var _this = this;\n var types = column.type;\n var helper = {};\n var formatFn = column.getFormatter() || (function () { return function (a) { return a; }; })();\n var group = data;\n if (!(types instanceof Array)) {\n types = [column.type];\n }\n types.forEach(function (type) {\n var key = column.field + ' - ' + type.toLowerCase();\n var disp = column.columnName;\n var val = type !== 'Custom' && group.aggregates && key in group.aggregates ? group.aggregates[key] :\n calculateAggregate(type, group.aggregates ? group : data, column, _this.parent);\n single[disp] = single[disp] || {};\n single[disp][key] = val;\n single[disp][type] = !isNullOrUndefined(val) ? formatFn(val) : ' ';\n if (group.field) {\n single[disp].field = group.field;\n single[disp].key = group.key;\n }\n });\n helper.format = column.getFormatter();\n column.setTemplate(helper);\n return single;\n };\n SummaryModelGenerator.prototype.getCellType = function () {\n return CellType.Summary;\n };\n return SummaryModelGenerator;\n}());\nexport { SummaryModelGenerator };\nvar GroupSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(GroupSummaryModelGenerator, _super);\n function GroupSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GroupSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupFooterTemplate !== undefined;\n };\n GroupSummaryModelGenerator.prototype.getIndentByLevel = function (level) {\n if (level === void 0) { level = this.parent.groupSettings.columns.length; }\n return this.parent.groupSettings.columns.map(function (v, indx) { return indx <= level - 1 ? '' : 'e-indentcelltop'; });\n };\n GroupSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.GroupSummary;\n };\n return GroupSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { GroupSummaryModelGenerator };\nvar CaptionSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(CaptionSummaryModelGenerator, _super);\n function CaptionSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CaptionSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupCaptionTemplate !== undefined;\n };\n CaptionSummaryModelGenerator.prototype.getData = function () {\n var initVal = { columns: [] };\n return [_super.prototype.getData.call(this).reduce(function (prev, cur) {\n prev.columns = prev.columns.concat(cur.columns);\n return prev;\n }, initVal)];\n };\n CaptionSummaryModelGenerator.prototype.isEmpty = function () {\n return (this.getData()[0].columns || []).length === 0;\n };\n CaptionSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.CaptionSummary;\n };\n return CaptionSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { CaptionSummaryModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Row } from '../models/row';\nimport { isNullOrUndefined, extend, setValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { getForeignData, getUid } from '../../grid/base/util';\n/**\n * GroupModelGenerator is used to generate group caption rows and data rows.\n * @hidden\n */\nvar GroupModelGenerator = /** @class */ (function (_super) {\n __extends(GroupModelGenerator, _super);\n function GroupModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.rows = [];\n _this.index = 0;\n _this.parent = parent;\n _this.summaryModelGen = new GroupSummaryModelGenerator(parent);\n _this.captionModelGen = new CaptionSummaryModelGenerator(parent);\n return _this;\n }\n GroupModelGenerator.prototype.generateRows = function (data, args) {\n if (this.parent.groupSettings.columns.length === 0) {\n return _super.prototype.generateRows.call(this, data, args);\n }\n this.rows = [];\n this.index = this.parent.enableVirtualization ? args.startIndex : 0;\n for (var i = 0, len = data.length; i < len; i++) {\n this.getGroupedRecords(0, data[i], data.level);\n }\n this.index = 0;\n return this.rows;\n };\n GroupModelGenerator.prototype.getGroupedRecords = function (index, data, raw) {\n var _a;\n var level = raw;\n if (isNullOrUndefined(data.items)) {\n if (isNullOrUndefined(data.GroupGuid)) {\n this.rows = this.rows.concat(this.generateDataRows(data, index));\n }\n else {\n for (var j = 0, len = data.length; j < len; j++) {\n this.getGroupedRecords(index, data[j], data.level);\n }\n }\n }\n else {\n this.rows = this.rows.concat(this.generateCaptionRow(data, index));\n if (data.items && data.items.length) {\n this.getGroupedRecords(index + 1, data.items, data.items.level);\n }\n if (this.parent.aggregates.length) {\n (_a = this.rows).push.apply(_a, this.summaryModelGen.generateRows(data, { level: level }));\n }\n }\n };\n GroupModelGenerator.prototype.getCaptionRowCells = function (field, indent, data) {\n var _this = this;\n var cells = [];\n var visibles = [];\n var column = this.parent.getColumnByField(field);\n var indexes = this.parent.getColumnIndexesInView();\n if (this.parent.enableColumnVirtualization) {\n column = this.parent.columns.filter(function (c) { return c.field === field; })[0];\n }\n var groupedLen = this.parent.groupSettings.columns.length;\n var gObj = this.parent;\n if (!this.parent.enableColumnVirtualization || indexes.indexOf(indent) !== -1) {\n for (var i = 0; i < indent; i++) {\n cells.push(this.generateIndentCell());\n }\n cells.push(this.generateCell({}, null, CellType.Expand));\n }\n indent = this.parent.enableColumnVirtualization ? 1 :\n (this.parent.getVisibleColumns().length + groupedLen + (gObj.detailTemplate || gObj.childGrid ? 1 : 0) -\n indent + (this.parent.getVisibleColumns().length ? -1 : 0));\n //Captionsummary cells will be added here. \n if (this.parent.aggregates.length && !this.captionModelGen.isEmpty()) {\n var captionCells = this.captionModelGen.generateRows(data)[0];\n extend(data, captionCells.data);\n var cIndex_1 = 0;\n captionCells.cells.some(function (cell, index) { cIndex_1 = index; return cell.visible && cell.isDataCell; });\n visibles = captionCells.cells.slice(cIndex_1).filter(function (cell) { return cell.visible; });\n if (captionCells.visible && visibles[0].column.field === this.parent.getVisibleColumns()[0].field) {\n visibles = visibles.slice(1);\n }\n if (this.parent.getVisibleColumns().length === 1) {\n visibles = [];\n }\n indent = indent - visibles.length;\n }\n var cols = (!this.parent.enableColumnVirtualization ? [column] : this.parent.getColumns());\n var wFlag = true;\n cols.forEach(function (col, index) {\n var tmpFlag = wFlag && indexes.indexOf(indent) !== -1;\n if (tmpFlag) {\n wFlag = false;\n }\n var cellType = !_this.parent.enableColumnVirtualization || tmpFlag ?\n CellType.GroupCaption : CellType.GroupCaptionEmpty;\n indent = _this.parent.enableColumnVirtualization && cellType === CellType.GroupCaption ? indent + groupedLen : indent;\n cells.push(_this.generateCell(column, null, cellType, indent));\n });\n cells.push.apply(cells, visibles);\n return cells;\n };\n GroupModelGenerator.prototype.generateCaptionRow = function (data, indent) {\n var options = {};\n var tmp = [];\n var col = this.parent.getColumnByField(data.field);\n options.data = extend({}, data);\n if (col) {\n options.data.field = data.field;\n }\n options.isDataRow = false;\n options.uid = getUid('grid-row');\n var row = new Row(options);\n row.indent = indent;\n this.getForeignKeyData(row);\n row.cells = this.getCaptionRowCells(data.field, indent, row.data);\n return row;\n };\n GroupModelGenerator.prototype.getForeignKeyData = function (row) {\n var data = row.data;\n var col = this.parent.getColumnByField(data.field);\n if (col && col.isForeignColumn && col.isForeignColumn()) {\n setValue('foreignKey', col.valueAccessor(col.foreignKeyValue, getForeignData(col, {}, data.key)[0], col), row.data);\n }\n };\n GroupModelGenerator.prototype.generateDataRows = function (data, indent) {\n var rows = [];\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = data.length; i < len; i++) {\n rows[i] = this.generateRow(data[i], this.index, i ? undefined : 'e-firstchildrow', indent);\n for (var j = 0; j < indent; j++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(indent) === -1) {\n continue;\n }\n rows[i].cells.unshift(this.generateIndentCell());\n }\n this.index++;\n }\n return rows;\n };\n GroupModelGenerator.prototype.generateIndentCell = function () {\n return this.generateCell({}, null, CellType.Indent);\n };\n GroupModelGenerator.prototype.refreshRows = function (input) {\n var _this = this;\n var indexes = this.parent.getColumnIndexesInView();\n input.forEach(function (row) {\n if (row.isDataRow) {\n row.cells = _this.generateCells(row);\n for (var j = 0; j < row.indent; j++) {\n if (_this.parent.enableColumnVirtualization && indexes.indexOf(row.indent) === -1) {\n continue;\n }\n row.cells.unshift(_this.generateIndentCell());\n }\n }\n else {\n var cRow = _this.generateCaptionRow(row.data, row.indent);\n row.cells = cRow.cells;\n }\n });\n return input;\n };\n return GroupModelGenerator;\n}(RowModelGenerator));\nexport { GroupModelGenerator };\n","import { Droppable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from './row-renderer';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { getScrollBarWidth } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n var _this = this;\n this.rows = [];\n this.freezeRows = [];\n this.movableRows = [];\n this.isLoaded = true;\n this.drop = function (e) {\n _this.parent.notify(events.columnDrop, { target: e.target, droppedElement: e.droppedElement });\n remove(e.droppedElement);\n };\n this.rafCallback = function (args) {\n var arg = args;\n return function () {\n _this.ariaService.setBusy(_this.getPanel().firstChild, false);\n if (_this.parent.isDestroyed) {\n return;\n }\n var rows = _this.rows.slice(0);\n if (_this.parent.getFrozenColumns() !== 0) {\n rows = args.isFrozen ? _this.freezeRows : _this.movableRows;\n }\n _this.parent.notify(events.contentReady, { rows: rows, args: arg });\n if (_this.isLoaded) {\n _this.parent.trigger(events.dataBound, {});\n if (_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n }\n if (arg) {\n var action = (arg.requestType || '').toLowerCase() + '-complete';\n _this.parent.notify(action, arg);\n if (args.requestType === 'batchsave') {\n args.cancel = false;\n _this.parent.trigger(events.actionComplete, args);\n }\n }\n if (_this.isLoaded) {\n _this.parent.hideSpinner();\n }\n };\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.generator = this.getModelGenerator();\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n this.parent.on(events.colGroupRefresh, this.colGroupRefresh, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n }\n /**\n * The function is used to render grid content div\n */\n ContentRender.prototype.renderPanel = function () {\n var gObj = this.parent;\n var div = this.parent.createElement('div', { className: 'e-gridcontent' });\n var innerDiv = this.parent.createElement('div', {\n className: 'e-content'\n });\n this.ariaService.setOptions(innerDiv, { busy: false });\n div.appendChild(innerDiv);\n this.setPanel(div);\n gObj.element.appendChild(div);\n };\n /**\n * The function is used to render grid content table\n */\n ContentRender.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n contentDiv.appendChild(this.createContentTable('_content_table'));\n this.setTable(contentDiv.querySelector('.e-table'));\n this.ariaService.setOptions(this.getTable(), {\n multiselectable: this.parent.selectionSettings.type === 'Multiple'\n });\n this.initializeContentDrop();\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().classList.add('e-frozenhdrcont');\n }\n };\n /**\n * The function is used to create content table elements\n * @return {Element}\n * @hidden\n */\n ContentRender.prototype.createContentTable = function (id) {\n var innerDiv = this.getPanel().firstChild;\n var table = this.parent.createElement('table', {\n className: 'e-table', attrs: {\n cellspacing: '0.25px', role: 'grid',\n id: this.parent.element.id + id\n }\n });\n this.setColGroup(this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true));\n table.appendChild(this.getColGroup());\n table.appendChild(this.parent.createElement('tbody'));\n innerDiv.appendChild(table);\n return innerDiv;\n };\n ContentRender.prototype.splitRows = function (idx) {\n if (this.parent.getFrozenColumns()) {\n if (idx === 0) {\n this.freezeRows = this.rows;\n this.freezeRowElements = this.rowElements;\n }\n else {\n this.movableRows = this.rows;\n }\n }\n };\n /**\n * Refresh the content of the Grid.\n * @return {void}\n */\n // tslint:disable-next-line:max-func-body-length\n ContentRender.prototype.refreshContentRows = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n var gObj = this.parent;\n if (gObj.currentViewData.length === 0) {\n return;\n }\n var dataSource = gObj.currentViewData;\n var frag = document.createDocumentFragment();\n var hdrfrag = document.createDocumentFragment();\n var columns = gObj.getColumns();\n var tr;\n var hdrTbody;\n var frzCols = gObj.getFrozenColumns();\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n this.rowElements = [];\n this.rows = [];\n var fCont = this.getPanel().querySelector('.e-frozencontent');\n var mCont = this.getPanel().querySelector('.e-movablecontent');\n var cont = this.getPanel().querySelector('.e-content');\n var modelData = this.generator.generateRows(dataSource, args);\n if (isNullOrUndefined(modelData[0].cells[0])) {\n mCont.querySelector('tbody').innerHTML = '';\n }\n var idx = modelData[0].cells[0].index;\n // tslint:disable-next-line:no-any\n if (this.parent.registeredTemplate && this.parent.registeredTemplate.template && !args.isFrozen) {\n this.parent.destroyTemplate(['template']);\n }\n if (this.parent.enableColumnVirtualization) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n cellMerge.updateVirtualCells(modelData);\n }\n if (frzCols && idx >= frzCols) {\n this.tbody = mCont.querySelector('tbody');\n }\n else {\n this.tbody = this.getTable().querySelector('tbody');\n }\n for (var i = 0, len = modelData.length; i < len; i++) {\n if (!gObj.rowTemplate) {\n tr = row.render(modelData[i], columns);\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n }\n else {\n var elements = gObj.getRowTemplate()(extend({ index: i }, dataSource[i]), gObj, 'rowTemplate');\n if (elements[0].tagName === 'TBODY') {\n for (var j = 0; j < elements.length; j++) {\n var isTR = elements[j].nodeName.toLowerCase() === 'tr';\n if (isTR || (elements[j].querySelectorAll && elements[j].querySelectorAll('tr').length)) {\n tr = isTR ? elements[j] : elements[j].querySelector('tr');\n }\n }\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n }\n else {\n if (gObj.frozenRows && i < gObj.frozenRows) {\n tr = appendChildren(hdrfrag, elements);\n }\n else {\n // frag.appendChild(tr);\n tr = appendChildren(frag, elements);\n }\n }\n }\n this.rows.push(modelData[i]);\n if (modelData[i].isDataRow) {\n //detailrowvisible \n var td = tr.querySelectorAll('.e-rowcell:not(.e-hide)')[0];\n if (td) {\n td.classList.add('e-detailrowvisible');\n }\n this.rowElements.push(tr);\n }\n this.ariaService.setOptions(this.getTable(), { colcount: gObj.getColumns().length.toString() });\n }\n this.splitRows(idx);\n if (gObj.frozenRows) {\n hdrTbody = frzCols ? gObj.getHeaderContent().querySelector(idx === 0 ? '.e-frozenheader'\n : '.e-movableheader').querySelector('tbody') : gObj.getHeaderTable().querySelector('tbody');\n hdrTbody.innerHTML = '';\n hdrTbody.appendChild(hdrfrag);\n }\n if (gObj.frozenRows && idx === 0 && cont.offsetHeight === Number(gObj.height)) {\n cont.style.height = (cont.offsetHeight - hdrTbody.offsetHeight) + 'px';\n }\n if (frzCols && idx === 0) {\n this.getPanel().firstChild.style.overflowY = 'hidden';\n }\n args.rows = this.rows.slice(0);\n args.isFrozen = this.parent.getFrozenColumns() !== 0 && !args.isFrozen;\n this.index = idx;\n getUpdateUsingRaf(function () {\n _this.parent.notify(events.beforeFragAppend, args);\n if (!_this.parent.enableVirtualization) {\n remove(_this.tbody);\n _this.tbody = _this.parent.createElement('tbody');\n }\n if (frzCols) {\n _this.tbody.appendChild(frag);\n if (_this.index === 0) {\n _this.isLoaded = false;\n fCont.querySelector('table').appendChild(_this.tbody);\n }\n else {\n if (_this.tbody.childElementCount < 1) {\n _this.tbody.appendChild(_this.parent.createElement('tr').appendChild(_this.parent.createElement('td')));\n }\n _this.isLoaded = true;\n mCont.querySelector('table').appendChild(_this.tbody);\n fCont.style.height = ((mCont.offsetHeight) - getScrollBarWidth()) + 'px';\n mCont.style.overflowY = _this.parent.height !== 'auto' ? 'scroll' : 'auto';\n fCont.style.borderRightWidth = '1px';\n }\n }\n else {\n _this.appendContent(_this.tbody, frag, args);\n }\n if (frzCols && idx === 0) {\n _this.refreshContentRows(extend({}, args));\n }\n frag = null;\n }, this.rafCallback(extend({}, args)));\n };\n ContentRender.prototype.appendContent = function (tbody, frag, args) {\n tbody.appendChild(frag);\n this.getTable().appendChild(tbody);\n };\n /**\n * Get the content div element of grid\n * @return {Element}\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Set the content div element of grid\n * @param {Element} panel\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the content table element of grid\n * @return {Element}\n */\n ContentRender.prototype.getTable = function () {\n return this.contentTable;\n };\n /**\n * Set the content table element of grid\n * @param {Element} table\n */\n ContentRender.prototype.setTable = function (table) {\n this.contentTable = table;\n };\n /**\n * Get the Row collection in the Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n ContentRender.prototype.getRows = function () {\n return this.parent.getFrozenColumns() ? this.freezeRows : this.rows;\n };\n /**\n * Get the Movable Row collection in the Freeze pane Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n ContentRender.prototype.getMovableRows = function () {\n return this.movableRows;\n };\n /**\n * Get the content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.getRowElements = function () {\n return this.parent.getFrozenColumns() ? this.freezeRowElements : this.rowElements;\n };\n /**\n * Get the Freeze pane movable content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.getMovableRowElements = function () {\n return this.rowElements;\n };\n /**\n * Get the content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.setRowElements = function (elements) {\n this.rowElements = elements;\n };\n /**\n * Get the header colgroup element\n * @returns {Element}\n */\n ContentRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n * @param {Element} colgroup\n * @returns {Element}\n */\n ContentRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Function to hide content table column based on visible property\n * @param {Column[]} columns?\n */\n ContentRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var rows = [];\n if (frzCols) {\n var fRows = this.freezeRows;\n var mRows = this.movableRows;\n var rowLen = fRows.length;\n var cellLen = void 0;\n for (var i = 0, row = void 0; i < rowLen; i++) {\n cellLen = mRows[i].cells.length;\n row = fRows[i].clone();\n for (var j = 0; j < cellLen; j++) {\n row.cells.push(mRows[i].cells[j]);\n }\n rows.push(row);\n }\n }\n else {\n rows = this.getRows();\n }\n var element;\n var testRow;\n rows.some(function (r) { if (r.isDataRow) {\n testRow = r;\n } return r.isDataRow; });\n var tasks = [];\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[c];\n var idx = this.parent.getNormalizedColumnIndex(column.uid);\n //used canSkip method to skip unwanted visible toggle operation. \n if (this.canSkip(column, testRow, idx)) {\n continue;\n }\n var displayVal = column.visible === true ? '' : 'none';\n if (frzCols) {\n if (idx < frzCols) {\n setStyleAttribute(this.getColGroup().childNodes[idx], { 'display': displayVal });\n }\n else {\n var mTable = gObj.getContent().querySelector('.e-movablecontent').querySelector('colgroup');\n setStyleAttribute(mTable.childNodes[idx - frzCols], { 'display': displayVal });\n }\n }\n else {\n setStyleAttribute(this.getColGroup().childNodes[idx], { 'display': displayVal });\n }\n }\n this.refreshContentRows({ requestType: 'refresh' });\n };\n ContentRender.prototype.colGroupRefresh = function () {\n if (this.getColGroup()) {\n var colGroup = this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n this.getTable().replaceChild(colGroup, this.getColGroup());\n this.setColGroup(colGroup);\n }\n };\n ContentRender.prototype.initializeContentDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n ContentRender.prototype.canSkip = function (column, row, index) {\n /**\n * Skip the toggle visiblity operation when one of the following success\n * 1. Grid has empty records\n * 2. column visible property is unchanged\n * 3. cell`s isVisible property is same as column`s visible property.\n */\n return isNullOrUndefined(row) || //(1)\n isNullOrUndefined(column.visible) || //(2) \n row.cells[index].visible === column.visible; //(3)\n };\n ContentRender.prototype.getModelGenerator = function () {\n return this.generator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n };\n ContentRender.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector('tbody').innerHTML = '';\n }\n };\n ContentRender.prototype.setSelection = function (uid, set, clearAll) {\n if (this.parent.getFrozenColumns()) {\n this.getMovableRows().filter(function (row) { return clearAll || uid === row.uid; }).forEach(function (row) { return row.isSelected = set; });\n }\n this.getRows().filter(function (row) { return clearAll || uid === row.uid; })\n .forEach(function (row) {\n row.isSelected = set;\n row.cells.forEach(function (cell) { return cell.isSelected = set; });\n });\n };\n ContentRender.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows()[index];\n };\n ContentRender.prototype.getVirtualRowIndex = function (index) {\n return index;\n };\n ContentRender.prototype.getMovableRowByIndex = function (index) {\n return this.parent.getMovableDataRows()[index];\n };\n ContentRender.prototype.enableAfterRender = function (e) {\n if (e.module === 'group' && e.enable) {\n this.generator = this.getModelGenerator();\n }\n };\n ContentRender.prototype.setRowObjects = function (rows) {\n this.rows = rows;\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, closest as getClosest, remove } from '@syncfusion/ej2-base';\nimport { classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from './row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport * as events from '../base/constant';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { parentsUntil, wrap } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar HeaderRender = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n */\n function HeaderRender(parent, serviceLocator) {\n var _this = this;\n this.frzIdx = 0;\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var parentEle = parentsUntil(target, 'e-headercell');\n if (!(gObj.allowReordering || gObj.allowGrouping) || (!isNullOrUndefined(parentEle)\n && parentEle.querySelectorAll('.e-checkselectall').length > 0)) {\n return false;\n }\n var visualElement = _this.parent.createElement('div', { className: 'e-cloneproperties e-dragclone e-headerclone' });\n var element = target.classList.contains('e-headercell') ? target : parentEle;\n if (!element || (!gObj.allowReordering && element.classList.contains('e-stackedheadercell'))) {\n return false;\n }\n var height = element.offsetHeight;\n var headercelldiv = element.querySelector('.e-headercelldiv') || element.querySelector('.e-stackedheadercelldiv');\n var col;\n if (headercelldiv) {\n if (element.querySelector('.e-stackedheadercelldiv')) {\n col = gObj.getStackedHeaderColumnByHeaderText(headercelldiv.innerText.trim(), gObj.columns);\n }\n else {\n col = gObj.getColumnByUid(headercelldiv.getAttribute('e-mappinguid'));\n }\n _this.column = col;\n visualElement.setAttribute('e-mappinguid', _this.column.uid);\n }\n if (col && !isNullOrUndefined(col.headerTemplate)) {\n if (col.headerTemplate.indexOf('#') !== -1) {\n visualElement.innerHTML = document.querySelector(col.headerTemplate).innerHTML.trim();\n }\n else {\n visualElement.innerHTML = col.headerTemplate;\n }\n }\n else {\n visualElement.innerHTML = headercelldiv ?\n col.headerText : element.firstElementChild.innerHTML;\n }\n visualElement.style.width = element.offsetWidth + 'px';\n visualElement.style.height = element.offsetHeight + 'px';\n visualElement.style.lineHeight = (height - 6).toString() + 'px';\n gObj.element.appendChild(visualElement);\n return visualElement;\n };\n this.dragStart = function (e) {\n var gObj = _this.parent;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n gObj.notify(events.columnDragStart, { target: e.target, column: _this.column, event: e.event });\n };\n this.drag = function (e) {\n var gObj = _this.parent;\n var target = e.target;\n if (target) {\n var closest = getClosest(target, '.e-grid');\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n if (!closest || closest.getAttribute('id') !== gObj.element.getAttribute('id')) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n if (gObj.allowReordering) {\n gObj.element.querySelector('.e-reorderuparrow').style.display = 'none';\n gObj.element.querySelector('.e-reorderdownarrow').style.display = 'none';\n }\n return;\n }\n gObj.notify(events.columnDrag, { target: e.target, column: _this.column, event: e.event });\n }\n };\n this.dragStop = function (e) {\n var gObj = _this.parent;\n var cancel;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n if ((!parentsUntil(e.target, 'e-headercell') && !parentsUntil(e.target, 'e-groupdroparea')) ||\n (!gObj.allowReordering && parentsUntil(e.target, 'e-headercell')) ||\n (!e.helper.getAttribute('e-mappinguid') && parentsUntil(e.target, 'e-groupdroparea'))) {\n remove(e.helper);\n cancel = true;\n }\n gObj.notify(events.columnDragStop, { target: e.target, event: e.event, column: _this.column, cancel: cancel });\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var uid = e.droppedElement.getAttribute('e-mappinguid');\n var closest = getClosest(e.target, '.e-grid');\n remove(e.droppedElement);\n if (closest && closest.getAttribute('id') !== gObj.element.getAttribute('id') ||\n !(gObj.allowReordering || gObj.allowGrouping)) {\n return;\n }\n gObj.notify(events.headerDrop, { target: e.target, uid: uid });\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.widthService = this.serviceLocator.getService('widthService');\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n this.parent.on(events.columnPositionChanged, this.colPosRefresh, this);\n }\n /**\n * The function is used to render grid header div\n */\n HeaderRender.prototype.renderPanel = function () {\n var div = this.parent.createElement('div', { className: 'e-gridheader' });\n var innerDiv = this.parent.createElement('div', { className: 'e-headercontent' });\n div.appendChild(innerDiv);\n this.setPanel(div);\n this.parent.element.appendChild(div);\n };\n /**\n * The function is used to render grid header table\n */\n HeaderRender.prototype.renderTable = function () {\n var headerDiv = this.getPanel();\n headerDiv.appendChild(this.createHeaderTable());\n this.setTable(headerDiv.querySelector('.e-table'));\n if (!this.parent.getFrozenColumns()) {\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n }\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n };\n /**\n * Get the header content div element of grid\n * @return {Element}\n */\n HeaderRender.prototype.getPanel = function () {\n return this.headerPanel;\n };\n /**\n * Set the header content div element of grid\n * @param {Element} panel\n */\n HeaderRender.prototype.setPanel = function (panel) {\n this.headerPanel = panel;\n };\n /**\n * Get the header table element of grid\n * @return {Element}\n */\n HeaderRender.prototype.getTable = function () {\n return this.headerTable;\n };\n /**\n * Set the header table element of grid\n * @param {Element} table\n */\n HeaderRender.prototype.setTable = function (table) {\n this.headerTable = table;\n };\n /**\n * Get the header colgroup element\n * @returns {Element}\n */\n HeaderRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n * @param {Element} colgroup\n * @returns {Element}\n */\n HeaderRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Get the header row element collection.\n * @return {Element[]}\n */\n HeaderRender.prototype.getRows = function () {\n var table = this.getTable();\n return table.tHead.rows;\n };\n /**\n * The function is used to create header table elements\n * @return {Element}\n * @hidden\n */\n HeaderRender.prototype.createHeaderTable = function () {\n var table = this.createTable();\n var innerDiv = this.getPanel().firstChild;\n innerDiv.appendChild(table);\n return innerDiv;\n };\n /**\n * @hidden\n */\n HeaderRender.prototype.createTable = function () {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var table = this.parent.createElement('table', { className: 'e-table', attrs: { cellspacing: '0.25px', role: 'grid' } });\n var innerDiv = this.getPanel().firstChild;\n var findHeaderRow = this.createHeaderContent();\n var thead = findHeaderRow.thead;\n var tbody = this.parent.createElement('tbody', { className: this.parent.frozenRows ? '' : 'e-hide' });\n this.caption = this.parent.createElement('caption', { innerHTML: this.parent.element.id + '_header_table', className: 'e-hide' });\n var colGroup = this.parent.createElement('colgroup');\n var rowBody = this.parent.createElement('tr');\n var bodyCell;\n var rows = this.rows = findHeaderRow.rows;\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, this.parent);\n for (var i = 0, len = rows.length; i < len; i++) {\n for (var j = 0, len_1 = rows[i].cells.length; j < len_1; j++) {\n var cell = rows[i].cells[j];\n bodyCell = this.parent.createElement('td');\n rowBody.appendChild(bodyCell);\n }\n }\n if (gObj.allowFiltering || gObj.allowSorting || gObj.allowGrouping) {\n table.classList.add('e-sortfilter');\n }\n this.updateColGroup(colGroup);\n tbody.appendChild(rowBody);\n table.appendChild(this.setColGroup(colGroup));\n table.appendChild(thead);\n table.appendChild(tbody);\n table.appendChild(this.caption);\n this.ariaService.setOptions(table, { colcount: gObj.getColumns().length.toString() });\n return table;\n };\n HeaderRender.prototype.createHeaderContent = function () {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var thead = this.parent.createElement('thead');\n var colHeader = this.parent.createElement('tr', { className: 'e-columnheader' });\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, gObj);\n rowRenderer.element = colHeader;\n var rows = [];\n var headerRow;\n this.colDepth = this.getObjDepth();\n for (var i = 0, len = this.colDepth; i < len; i++) {\n rows[i] = this.generateRow(i);\n rows[i].cells = [];\n }\n rows = this.ensureColumns(rows);\n rows = this.getHeaderCells(rows);\n for (var i = 0, len = this.colDepth; i < len; i++) {\n headerRow = rowRenderer.render(rows[i], columns);\n if (this.parent.rowHeight && headerRow.querySelector('.e-headercell')) {\n headerRow.style.height = this.parent.rowHeight + 'px';\n }\n thead.appendChild(headerRow);\n }\n var findHeaderRow = {\n thead: thead,\n rows: rows\n };\n return findHeaderRow;\n };\n HeaderRender.prototype.updateColGroup = function (colGroup) {\n var cols = this.parent.getColumns();\n var col;\n var indexes = this.parent.getColumnIndexesInView();\n if (this.parent.allowGrouping) {\n for (var i = 0, len = this.parent.groupSettings.columns.length; i < len; i++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n continue;\n }\n col = this.parent.createElement('col');\n colGroup.appendChild(col);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n col = this.parent.createElement('col');\n colGroup.appendChild(col);\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n col = this.parent.createElement('col');\n if (cols[i].visible === false) {\n setStyleAttribute(col, { 'display': 'none' });\n }\n colGroup.appendChild(col);\n }\n return colGroup;\n };\n HeaderRender.prototype.ensureColumns = function (rows) {\n //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n var gObj = this.parent;\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (gObj.allowGrouping) {\n for (var c = 0, len_2 = gObj.groupSettings.columns.length; c < len_2; c++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(c) === -1) {\n continue;\n }\n rows[i].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gObj.detailTemplate || gObj.childGrid) {\n rows[i].cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n }\n return rows;\n };\n HeaderRender.prototype.getHeaderCells = function (rows) {\n var column;\n var thead = this.parent.getHeaderTable() && this.parent.getHeaderTable().querySelector('thead');\n var cols = this.parent.enableColumnVirtualization ? this.parent.getColumns() : this.parent.columns;\n this.frzIdx = 0;\n for (var i = 0, len = cols.length; i < len; i++) {\n rows = this.appendCells(cols[i], rows, 0, i === 0, false, i === (len - 1), thead);\n }\n return rows;\n };\n HeaderRender.prototype.appendCells = function (cols, rows, index, isFirstObj, isFirstCol, isLastCol, isMovable) {\n var lastCol = isLastCol ? 'e-lastcell' : '';\n var frzCols = this.parent.getFrozenColumns();\n if (!cols.columns) {\n if (!frzCols || (frzCols\n && ((!isMovable && (this.frzIdx < this.parent.frozenColumns || cols.isFrozen))\n || (isMovable && this.frzIdx >= this.parent.frozenColumns && !cols.isFrozen)))) {\n rows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n }\n this.frzIdx++;\n }\n else {\n var colSpan = this.getCellCnt(cols, 0);\n if (colSpan) {\n var frzObj = this.refreshFrozenHdr(cols.columns, { isPartial: false, isComp: true, cnt: 0 });\n if (!frzCols || (frzCols\n && ((!isMovable && (this.parent.frozenColumns - this.frzIdx > 0 || (frzObj.isPartial)))\n || (isMovable && (colSpan + this.frzIdx > this.parent.frozenColumns && !frzObj.isComp))))) {\n rows[index].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols,\n colSpan: this.getColSpan(colSpan, isMovable, frzObj.cnt)\n }));\n }\n }\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n rows = this.appendCells(cols.columns[i], rows, index + 1, isFirstObj, i === 0, i === (len - 1) && isLastCol, isMovable);\n }\n }\n return rows;\n };\n HeaderRender.prototype.refreshFrozenHdr = function (cols, frzObj) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].columns) {\n frzObj = this.refreshFrozenHdr(cols[i].columns, frzObj);\n }\n else {\n if (cols[i].isFrozen) {\n frzObj.isPartial = true;\n frzObj.cnt++;\n }\n frzObj.isComp = frzObj.isComp && (cols[i].isFrozen ||\n this.parent.getColumnIndexByField(cols[i].field) < this.parent.frozenColumns);\n }\n }\n return frzObj;\n };\n HeaderRender.prototype.getColSpan = function (colSpan, isMovable, frozenCnt) {\n var frzCol = this.parent.frozenColumns;\n if (this.parent.getFrozenColumns() && this.frzIdx + colSpan > frzCol) {\n if (isMovable) {\n colSpan = colSpan - (frzCol > this.frzIdx ? frzCol - this.frzIdx : 0) - frozenCnt;\n }\n else {\n colSpan = colSpan - (colSpan - (frzCol > this.frzIdx ? frzCol + frozenCnt - this.frzIdx : frozenCnt));\n }\n }\n return colSpan;\n };\n HeaderRender.prototype.generateRow = function (index) {\n return new Row({});\n };\n HeaderRender.prototype.generateCell = function (column, cellType, rowSpan, className, rowIndex, colIndex) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': false,\n 'isTemplate': !isNullOrUndefined(column.headerTemplate),\n 'rowID': '',\n 'column': column,\n 'cellType': cellType,\n 'rowSpan': rowSpan,\n 'className': className,\n 'index': rowIndex,\n 'colIndex': colIndex\n };\n if (!opt.rowSpan || opt.rowSpan < 2) {\n delete opt.rowSpan;\n }\n return new Cell(opt);\n };\n /**\n * Function to hide header table column based on visible property\n * @param {Column[]} columns?\n */\n HeaderRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var rows = [].slice.call(this.getRows()); //NodeList -> Array \n var displayVal = '';\n var idx;\n var className;\n var element;\n var frzCols = gObj.getFrozenColumns();\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[c];\n idx = gObj.getNormalizedColumnIndex(column.uid);\n if (column.visible === false) {\n displayVal = 'none';\n }\n if (frzCols) {\n if (idx < frzCols) {\n setStyleAttribute(this.getColGroup().children[idx], { 'display': displayVal });\n }\n else {\n var mTblColGrp = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup');\n setStyleAttribute(mTblColGrp.children[idx - frzCols], { 'display': displayVal });\n }\n }\n else {\n setStyleAttribute(this.getColGroup().children[idx], { 'display': displayVal });\n }\n this.refreshUI();\n }\n };\n HeaderRender.prototype.colPosRefresh = function () {\n this.refreshUI();\n };\n /**\n * Refresh the header of the Grid.\n * @returns {void}\n */\n HeaderRender.prototype.refreshUI = function () {\n var headerDiv = this.getPanel();\n var table = this.getTable();\n var frzCols = this.parent.getFrozenColumns();\n if (this.getTable()) {\n remove(this.getTable());\n table.removeChild(table.firstChild);\n table.removeChild(table.childNodes[0]);\n var colGroup = this.parent.createElement('colgroup');\n var findHeaderRow = this.createHeaderContent();\n this.rows = findHeaderRow.rows;\n table.insertBefore(findHeaderRow.thead, table.firstChild);\n this.updateColGroup(colGroup);\n table.insertBefore(this.setColGroup(colGroup), table.firstChild);\n this.setTable(table);\n this.appendContent(table);\n this.parent.notify(events.colGroupRefresh, {});\n this.widthService.setWidthToColumns();\n this.parent.updateDefaultCursor();\n if (!frzCols) {\n this.initializeHeaderDrag();\n }\n var rows = [].slice.call(headerDiv.querySelectorAll('tr.e-columnheader'));\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n var gCells = [].slice.call(row.querySelectorAll('.e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n }\n if (!frzCols) {\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n }\n if (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {\n wrap(rows, true);\n }\n }\n };\n HeaderRender.prototype.appendContent = function (table) {\n this.getPanel().firstChild.appendChild(table);\n };\n HeaderRender.prototype.getObjDepth = function () {\n var max = 0;\n var cols = this.parent.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n var depth = this.checkDepth(cols[i], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n };\n HeaderRender.prototype.checkDepth = function (col, index) {\n var max = index;\n var indices = [];\n if (col.columns) {\n index++;\n for (var i = 0, len = col.columns.length; i < len; i++) {\n indices[i] = this.checkDepth(col.columns[i], index);\n }\n for (var j = 0; j < indices.length; j++) {\n if (max < indices[j]) {\n max = indices[j];\n }\n }\n index = max;\n }\n return index;\n };\n HeaderRender.prototype.getCellCnt = function (col, cnt) {\n if (col.columns) {\n for (var i = 0, len = col.columns.length; i < len; i++) {\n cnt = this.getCellCnt(col.columns[i], cnt);\n }\n }\n else {\n if (col.visible) {\n cnt++;\n }\n }\n return cnt;\n };\n HeaderRender.prototype.initializeHeaderDrag = function () {\n var gObj = this.parent;\n if (!(this.parent.allowReordering || (this.parent.allowGrouping && this.parent.groupSettings.showDropArea))) {\n return;\n }\n var headerRows = [].slice.call(gObj.getHeaderContent().querySelectorAll('.e-columnheader'));\n for (var i = 0, len = headerRows.length; i < len; i++) {\n var drag = new Draggable(headerRows[i], {\n dragTarget: '.e-headercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop,\n abort: '.e-rhandler'\n });\n }\n };\n HeaderRender.prototype.initializeHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getHeaderContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n return HeaderRender;\n}());\nexport { HeaderRender };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { doesImplementInterface, setStyleAndAttributes, appendChildren } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { foreignKeyData } from '../base/constant';\n/**\n * CellRenderer class which responsible for building cell content.\n * @hidden\n */\nvar CellRenderer = /** @class */ (function () {\n function CellRenderer(parent, locator) {\n this.localizer = locator.getService('localization');\n this.formatter = locator.getService('valueFormatter');\n this.parent = parent;\n this.element = this.parent.createElement('TD', { className: 'e-rowcell', attrs: { role: 'gridcell', tabindex: '-1' } });\n this.rowChkBox = this.parent.createElement('input', { className: 'e-checkselect', attrs: { 'type': 'checkbox' } });\n }\n /**\n * Function to return the wrapper for the TD content\n * @returns string\n */\n CellRenderer.prototype.getGui = function () {\n return '';\n };\n /**\n * Function to format the cell value.\n * @param {Column} column\n * @param {Object} value\n * @param {Object} data\n */\n CellRenderer.prototype.format = function (column, value, data) {\n if (!isNullOrUndefined(column.format)) {\n value = this.formatter.toView(value, column.getFormatter());\n }\n return isNullOrUndefined(value) ? '' : value.toString();\n };\n CellRenderer.prototype.evaluate = function (node, cell, data, attributes, fData) {\n var _a;\n var result;\n if (cell.column.template) {\n var literals = ['index'];\n var dummyData = extend({}, data, (_a = {}, _a[foreignKeyData] = fData, _a));\n result = cell.column.getColumnTemplate()(extend({ 'index': attributes[literals[0]] }, dummyData), this.parent, 'template');\n appendChildren(node, result);\n result = null;\n node.setAttribute('aria-label', node.innerText + ' is template cell' + ' column header ' +\n cell.column.headerText);\n return false;\n }\n return true;\n };\n /**\n * Function to invoke the custom formatter available in the column object.\n * @param {Column} column\n * @param {Object} value\n * @param {Object} data\n */\n CellRenderer.prototype.invokeFormatter = function (column, value, data) {\n if (!isNullOrUndefined(column.formatter)) {\n if (doesImplementInterface(column.formatter, 'getValue')) {\n var formatter = column.formatter;\n value = new formatter().getValue(column, data);\n }\n else if (typeof column.formatter === 'function') {\n value = column.formatter(column, data);\n }\n else {\n value = column.formatter.getValue(column, data);\n }\n }\n return value;\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CellRenderer.prototype.render = function (cell, data, attributes) {\n return this.refreshCell(cell, data, attributes);\n };\n /**\n * Function to refresh the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CellRenderer.prototype.refreshTD = function (td, cell, data, attributes) {\n var node = this.refreshCell(cell, data, attributes);\n td.innerHTML = '';\n var elements = [].slice.call(node.childNodes);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n td.appendChild(elem);\n }\n };\n CellRenderer.prototype.refreshCell = function (cell, data, attributes) {\n var _a;\n var node = this.element.cloneNode();\n var column = cell.column;\n var fData;\n if (cell.isForeignKey) {\n fData = cell.foreignKeyData[0] || (_a = {}, _a[column.foreignKeyValue] = column.format ? null : '', _a);\n }\n //Prepare innerHtml\n var innerHtml = this.getGui();\n var value = cell.isForeignKey ? this.getValue(column.foreignKeyValue, fData, column) :\n this.getValue(column.field, data, column);\n if ((column.type === 'date' || column.type === 'datetime') && !isNullOrUndefined(value)) {\n value = new Date(value);\n }\n value = this.format(column, value, data);\n innerHtml = value.toString();\n if (column.type === 'boolean' && !column.displayAsCheckBox) {\n var localeStr = (value !== 'true' && value !== 'false') ? null : value === 'true' ? 'True' : 'False';\n innerHtml = localeStr ? this.localizer.getConstant(localeStr) : innerHtml;\n }\n var fromFormatter = this.invokeFormatter(column, value, data);\n innerHtml = !isNullOrUndefined(column.formatter) ? isNullOrUndefined(fromFormatter) ? '' : fromFormatter.toString() : innerHtml;\n node.setAttribute('aria-label', (innerHtml === '' ? 'empty' : innerHtml) + ' column header ' + cell.column.headerText);\n if (!isNullOrUndefined(cell.column.headerText)) {\n node.setAttribute('aria-label', innerHtml + ' column header ' + cell.column.headerText);\n }\n if (this.evaluate(node, cell, data, attributes, fData) && column.type !== 'checkbox') {\n this.appendHtml(node, innerHtml, column.getDomSetter ? column.getDomSetter() : 'innerHTML');\n }\n else if (column.type === 'checkbox') {\n node.classList.add('e-gridchkbox');\n node.setAttribute('aria-label', 'checkbox');\n if (this.parent.selectionSettings.persistSelection) {\n value = value === 'true';\n }\n else {\n value = false;\n }\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.insertBefore(this.rowChkBox.cloneNode(), checkWrap.firstChild);\n node.appendChild(checkWrap);\n }\n if (this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n cell.isSelected = true;\n }\n this.setAttributes(node, cell, attributes);\n if (column.type === 'boolean' && column.displayAsCheckBox) {\n var checked = isNaN(parseInt(value.toString(), 10)) ? value === 'true' : parseInt(value.toString(), 10) > 0;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: checked, label: ' ' });\n node.innerHTML = '';\n checkWrap.classList.add('e-checkbox-disabled');\n node.appendChild(checkWrap);\n node.setAttribute('aria-label', checked + ' column header ' + cell.column.headerText);\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHtml\n * @returns Element\n */\n CellRenderer.prototype.appendHtml = function (node, innerHtml, property) {\n if (property === void 0) { property = 'innerHTML'; }\n node[property] = innerHtml;\n return node;\n };\n /**\n * @hidden\n */\n CellRenderer.prototype.setAttributes = function (node, cell, attributes) {\n var column = cell.column;\n this.buildAttributeFromCell(node, cell, column.type === 'checkbox');\n setStyleAndAttributes(node, attributes);\n setStyleAndAttributes(node, cell.attributes);\n if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (column.textAlign) {\n node.style.textAlign = column.textAlign;\n }\n if (column.clipMode === 'Clip') {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip') {\n node.classList.add('e-ellipsistooltip');\n }\n };\n CellRenderer.prototype.buildAttributeFromCell = function (node, cell, isCheckBoxType) {\n var attr = {};\n var prop = { 'colindex': 'aria-colindex' };\n var classes = [];\n if (cell.colSpan) {\n attr.colSpan = cell.colSpan;\n }\n if (cell.rowSpan) {\n attr.rowSpan = cell.rowSpan;\n }\n if (cell.isTemplate) {\n classes.push('e-templatecell');\n }\n if (cell.isSelected) {\n classes.push.apply(classes, ['e-selectionbackground', 'e-active']);\n if (isCheckBoxType) {\n node.querySelector('.e-frame').classList.add('e-check');\n }\n }\n if (!isNullOrUndefined(cell.index)) {\n attr[prop.colindex] = cell.index;\n }\n if (!cell.visible) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(node, attr);\n };\n CellRenderer.prototype.getValue = function (field, data, column) {\n return column.valueAccessor(field, data, column);\n };\n return CellRenderer;\n}());\nexport { CellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { attributes } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes, appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { AriaService } from '../services/aria-service';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { headerCellInfo } from '../base/constant';\n/**\n * HeaderCellRenderer class which responsible for building header cell content.\n * @hidden\n */\nvar HeaderCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderCellRenderer, _super);\n function HeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent\n .createElement('TH', { className: 'e-headercell', attrs: { role: 'columnheader', tabindex: '-1' } });\n _this.ariaService = new AriaService();\n _this.hTxtEle = _this.parent.createElement('span', { className: 'e-headertext' });\n _this.sortEle = _this.parent.createElement('div', { className: 'e-sortfilterdiv e-icons' });\n _this.gui = _this.parent.createElement('div');\n _this.chkAllBox = _this.parent.createElement('input', { className: 'e-checkselectall', attrs: { 'type': 'checkbox' } });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n * @returns string\n */\n HeaderCellRenderer.prototype.getGui = function () {\n return this.gui.cloneNode();\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {Element}\n */\n HeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var fltrMenuEle = this.parent.createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter' });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n /**\n * Function to refresh the cell content based on Column object.\n * @param {Cell} cell\n * @param {Element} node\n */\n HeaderCellRenderer.prototype.refresh = function (cell, node) {\n this.clean(node);\n var fltrMenuEle = this.parent.createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter' });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n HeaderCellRenderer.prototype.clean = function (node) {\n node.innerHTML = '';\n };\n HeaderCellRenderer.prototype.prepareHeader = function (cell, node, fltrMenuEle) {\n var column = cell.column;\n var ariaAttr = {};\n //Prepare innerHtml\n var innerDIV = this.getGui();\n attributes(innerDIV, {\n 'e-mappinguid': column.uid,\n 'class': 'e-headercelldiv'\n });\n if (column.type !== 'checkbox') {\n var value = column.headerText;\n var headerText = this.hTxtEle.cloneNode();\n headerText[column.getDomSetter()] = value;\n innerDIV.appendChild(headerText);\n }\n else {\n column.editType = 'booleanedit';\n var checkAllWrap = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n checkAllWrap.insertBefore(this.chkAllBox.cloneNode(), checkAllWrap.firstChild);\n innerDIV.appendChild(checkAllWrap);\n innerDIV.classList.add('e-headerchkcelldiv');\n }\n this.buildAttributeFromCell(node, cell);\n this.appendHtml(node, innerDIV);\n node.appendChild(this.sortEle.cloneNode());\n if ((this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') &&\n (column.allowFiltering && !isNullOrUndefined(column.field)) &&\n !(this.parent.showColumnMenu && column.showColumnMenu)) {\n attributes(fltrMenuEle, {\n 'e-mappinguid': 'e-flmenu-' + column.uid,\n });\n node.classList.add('e-fltr-icon');\n var matchFlColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFlColumns.length) {\n for (var index = 0; index < this.parent.columns.length; index++) {\n for (var count = 0; count < this.parent.filterSettings.columns.length; count++) {\n if (this.parent.filterSettings.columns[count].field === column.field) {\n fltrMenuEle.classList.add('e-filtered');\n matchFlColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.appendChild(fltrMenuEle.cloneNode());\n }\n if (cell.className) {\n node.classList.add(cell.className);\n }\n if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (column.allowSorting) {\n ariaAttr.sort = 'none';\n }\n if (column.allowGrouping) {\n ariaAttr.grabbed = false;\n }\n node = this.extendPrepareHeader(column, node);\n var result;\n var gridObj = this.parent;\n var colIndex = gridObj.getColumnIndexByField(column.field);\n if (!isNullOrUndefined(column.headerTemplate)) {\n result = column.getHeaderTemplate()(extend({ 'index': colIndex }, column), gridObj, 'headerTemplate');\n node.firstElementChild.innerHTML = '';\n appendChildren(node.firstElementChild, result);\n }\n this.ariaService.setOptions(node, ariaAttr);\n if (!isNullOrUndefined(column.headerTextAlign) || !isNullOrUndefined(column.textAlign)) {\n var alignment = column.headerTextAlign || column.textAlign;\n innerDIV.style.textAlign = alignment;\n if (alignment === 'Right' || alignment === 'Left') {\n node.classList.add(alignment === 'Right' ? 'e-rightalign' : 'e-leftalign');\n }\n else if (alignment === 'Center') {\n node.classList.add('e-centeralign');\n }\n }\n if (column.clipMode === 'Clip') {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip') {\n node.classList.add('e-ellipsistooltip');\n }\n node.setAttribute('aria-rowspan', (!isNullOrUndefined(cell.rowSpan) ? cell.rowSpan : 1).toString());\n node.setAttribute('aria-colspan', '1');\n this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n return node;\n };\n HeaderCellRenderer.prototype.extendPrepareHeader = function (column, node) {\n if (this.parent.showColumnMenu && column.showColumnMenu && !isNullOrUndefined(column.field)) {\n var element = (this.parent.createElement('div', { className: 'e-icons e-columnmenu' }));\n var matchFilteredColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFilteredColumns.length) {\n for (var i = 0; i < this.parent.columns.length; i++) {\n for (var j = 0; j < this.parent.filterSettings.columns.length; j++) {\n if (this.parent.filterSettings.columns[j].field === column.field) {\n element.classList.add('e-filtered');\n matchFilteredColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.classList.add('e-fltr-icon');\n node.appendChild(element);\n }\n if (this.parent.allowResizing) {\n var handler = this.parent.createElement('div');\n handler.className = column.allowResizing ? 'e-rhandler e-rcursor' : 'e-rsuppress';\n node.appendChild(handler);\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHtml\n * @returns Element\n */\n HeaderCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n return HeaderCellRenderer;\n}(CellRenderer));\nexport { HeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { headerCellInfo } from '../base/constant';\n/**\n * StackedHeaderCellRenderer class which responsible for building stacked header cell content.\n * @hidden\n */\nvar StackedHeaderCellRenderer = /** @class */ (function (_super) {\n __extends(StackedHeaderCellRenderer, _super);\n function StackedHeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', {\n className: 'e-headercell e-stackedheadercell', attrs: {\n role: 'columnheader',\n tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {Element}\n */\n StackedHeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var div = this.parent.createElement('div', { className: 'e-stackedheadercelldiv' });\n node.appendChild(div);\n div.innerHTML = cell.column.headerText;\n if (cell.column.toolTip) {\n node.setAttribute('title', cell.column.toolTip);\n }\n if (!isNullOrUndefined(cell.column.textAlign)) {\n div.style.textAlign = cell.column.textAlign;\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-colspan', cell.colSpan.toString());\n node.setAttribute('aria-rowspan', '1');\n this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n return node;\n };\n return StackedHeaderCellRenderer;\n}(CellRenderer));\nexport { StackedHeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * IndentCellRenderer class which responsible for building group indent cell.\n * @hidden\n */\nvar IndentCellRenderer = /** @class */ (function (_super) {\n __extends(IndentCellRenderer, _super);\n function IndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', { className: 'e-indentcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n IndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n setStyleAndAttributes(node, cell.attributes);\n return node;\n };\n return IndentCellRenderer;\n}(CellRenderer));\nexport { IndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren, templateCompiler } from '../base/util';\n/**\n * GroupCaptionCellRenderer class which responsible for building group caption cell.\n * @hidden\n */\nvar GroupCaptionCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionCellRenderer, _super);\n function GroupCaptionCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent\n .createElement('TD', { className: 'e-groupcaption', attrs: { role: 'gridcell', tabindex: '-1' } });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n GroupCaptionCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n var gObj = this.parent;\n var result;\n var helper = {};\n var fKeyValue;\n data.headerText = cell.column.headerText;\n if (cell.isForeignKey) {\n fKeyValue = this.format(cell.column, cell.column.valueAccessor('foreignKey', data, cell.column));\n }\n var value = cell.isForeignKey ? fKeyValue : cell.column.enableGroupByFormat ? data.key :\n this.format(cell.column, cell.column.valueAccessor('key', data, cell.column));\n if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n if (gObj.groupSettings.captionTemplate.indexOf('#') !== -1) {\n result = templateCompiler(document.querySelector(gObj.groupSettings.captionTemplate).innerHTML.trim())(data);\n }\n else {\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data);\n }\n appendChildren(node, result);\n }\n else {\n node.innerHTML = cell.column.headerText + ': ' + value + ' - ' + data.count + ' ' +\n (data.count < 2 ? this.localizer.getConstant('Item') : this.localizer.getConstant('Items'));\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-label', node.innerHTML + ' is groupcaption cell');\n node.setAttribute('title', node.innerHTML);\n return node;\n };\n return GroupCaptionCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionCellRenderer };\n/**\n * GroupCaptionEmptyCellRenderer class which responsible for building group caption empty cell.\n * @hidden\n */\nvar GroupCaptionEmptyCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionEmptyCellRenderer, _super);\n function GroupCaptionEmptyCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', { className: 'e-groupcaption' });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n GroupCaptionEmptyCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.innerHTML = ' ';\n node.setAttribute('colspan', cell.colSpan.toString());\n return node;\n };\n return GroupCaptionEmptyCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionEmptyCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { IndentCellRenderer } from './indent-cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\nvar ExpandCellRenderer = /** @class */ (function (_super) {\n __extends(ExpandCellRenderer, _super);\n function ExpandCellRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Function to render the expand cell\n * @param {Cell} cell\n * @param {Object} data\n */\n ExpandCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.className = 'e-recordplusexpand';\n node.setAttribute('ej-mappingname', data.field);\n node.setAttribute('ej-mappingvalue', data.key);\n node.setAttribute('aria-expanded', 'true');\n node.setAttribute('tabindex', '-1');\n node.appendChild(this.parent.createElement('div', { className: 'e-icons e-gdiagonaldown e-icon-gdownarrow' }));\n return node;\n };\n return ExpandCellRenderer;\n}(IndentCellRenderer));\nexport { ExpandCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * HeaderIndentCellRenderer class which responsible for building header indent cell.\n * @hidden\n */\nvar HeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderIndentCellRenderer, _super);\n function HeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-grouptopleftcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n HeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(this.parent.createElement('div', { className: 'e-headercelldiv e-emptycell', innerHTML: '' }));\n return node;\n };\n return HeaderIndentCellRenderer;\n}(CellRenderer));\nexport { HeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n * @hidden\n */\nvar DetailHeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(DetailHeaderIndentCellRenderer, _super);\n function DetailHeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-detailheadercell' });\n return _this;\n }\n /**\n * Function to render the detail indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n DetailHeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(this.parent.createElement('div', { className: 'e-emptycell' }));\n return node;\n };\n return DetailHeaderIndentCellRenderer;\n}(CellRenderer));\nexport { DetailHeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\nvar DetailExpandCellRenderer = /** @class */ (function (_super) {\n __extends(DetailExpandCellRenderer, _super);\n function DetailExpandCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', {\n className: 'e-detailrowcollapse',\n attrs: { 'aria-expanded': 'false', role: 'gridcell', tabindex: '-1' }\n });\n return _this;\n }\n /**\n * Function to render the detail expand cell\n */\n DetailExpandCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n if (attributes && !isNullOrUndefined(attributes['class'])) {\n node.className = '';\n node.className = attributes['class'];\n node.appendChild(this.parent.createElement('div', { className: 'e-icons e-dtdiagonaldown e-icon-gdownarrow' }));\n }\n else {\n node.appendChild(this.parent.createElement('div', { className: 'e-icons e-dtdiagonalright e-icon-grightarrow' }));\n }\n return node;\n };\n return DetailExpandCellRenderer;\n}(CellRenderer));\nexport { DetailExpandCellRenderer };\n","import { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RenderType, CellType } from '../base/enum';\nimport { Data } from '../actions/data';\nimport { Column } from '../models/column';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport * as events from '../base/constant';\nimport { prepareColumns, setFormatter, getDatePredicate, getObject } from '../base/util';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { HeaderRender } from '../renderer/header-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\nimport { StackedHeaderCellRenderer } from '../renderer/stacked-cell-renderer';\nimport { IndentCellRenderer } from '../renderer/indent-cell-renderer';\nimport { GroupCaptionCellRenderer, GroupCaptionEmptyCellRenderer } from '../renderer/caption-cell-renderer';\nimport { ExpandCellRenderer } from '../renderer/expand-cell-renderer';\nimport { HeaderIndentCellRenderer } from '../renderer/header-indent-renderer';\nimport { DetailHeaderIndentCellRenderer } from '../renderer/detail-header-indent-renderer';\nimport { DetailExpandCellRenderer } from '../renderer/detail-expand-cell-renderer';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.emptyGrid = false;\n this.parent = parent;\n this.locator = locator;\n this.data = new Data(parent, locator);\n this.l10n = locator.getService('localization');\n this.ariaService = this.locator.getService('ariaService');\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize grid header, content and footer rendering\n */\n Render.prototype.render = function () {\n var gObj = this.parent;\n this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.headerRenderer.renderPanel();\n this.contentRenderer.renderPanel();\n if (gObj.getColumns().length) {\n this.isLayoutRendered = true;\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.emptyRow(false);\n }\n this.refreshDataManager();\n };\n /**\n * Refresh the entire Grid.\n * @return {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n this.parent.trigger(events.actionBegin, e);\n if (e.cancel) {\n this.parent.notify(events.cancelBegin, e);\n return;\n }\n this.refreshDataManager(e);\n };\n Render.prototype.refreshComplete = function (e) {\n this.parent.trigger(events.actionComplete, e);\n };\n /**\n * The function is used to refresh the dataManager\n * @return {void}\n */\n Render.prototype.refreshDataManager = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n if (args.requestType !== 'virtualscroll') {\n this.parent.showSpinner();\n }\n this.emptyGrid = false;\n var dataManager;\n var isFActon = this.isNeedForeignAction();\n this.ariaService.setBusy(this.parent.getContent().firstChild, true);\n if (isFActon) {\n var deffered = new Deferred();\n dataManager = this.getFData(deffered);\n }\n if (!dataManager) {\n dataManager = this.data.getData(args, this.data.generateQuery().requiresCount());\n }\n else {\n dataManager = dataManager.then(function (e) {\n var query = _this.data.generateQuery().requiresCount();\n if (_this.emptyGrid) {\n var def = new Deferred();\n def.resolve({ result: [], count: 0 });\n return def.promise;\n }\n return _this.data.getData(args, query);\n });\n }\n if (this.parent.getForeignKeyColumns().length && (!isFActon || this.parent.searchSettings.key.length)) {\n var deffered_1 = new Deferred();\n dataManager = dataManager.then(function (e) {\n _this.parent.notify(events.getForeignKeyData, { dataManager: dataManager, result: e, promise: deffered_1 });\n return deffered_1.promise;\n });\n }\n if (this.parent.groupSettings.disablePageWiseAggregates && this.parent.groupSettings.columns.length) {\n dataManager = dataManager.then(function (e) { return _this.validateGroupRecords(e); });\n }\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, args); })\n .catch(function (e) { return _this.dataManagerFailure(e, args); });\n };\n Render.prototype.getFData = function (deferred) {\n this.parent.notify(events.getForeignKeyData, { isComplex: true, promise: deferred });\n return deferred.promise;\n };\n Render.prototype.isNeedForeignAction = function () {\n var gObj = this.parent;\n return !!((gObj.allowFiltering && gObj.filterSettings.columns.length) ||\n (gObj.searchSettings.key.length)) && this.foreignKey(this.parent.getForeignKeyColumns());\n };\n Render.prototype.foreignKey = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n var fbool = false;\n fbool = _this.parent.filterSettings.columns.some(function (value) {\n return col.foreignKeyValue === value.field;\n });\n return !!(fbool || _this.parent.searchSettings.key.length);\n });\n };\n Render.prototype.sendBulkRequest = function (args) {\n var _this = this;\n args.requestType = 'batchsave';\n var promise = this.data.saveChanges(args.changes, this.parent.getPrimaryKeyFieldNames()[0], args.original);\n var query = this.data.generateQuery().requiresCount();\n if (this.data.dataManager.dataSource.offline) {\n this.refreshDataManager({ requestType: 'batchsave' });\n return;\n }\n else {\n promise.then(function (e) {\n _this.data.getData(args, query)\n .then(function (e) { return _this.dmSuccess(e, args); })\n .catch(function (e) { return _this.dmFailure(e, args); });\n })\n .catch(function (e) { return _this.dmFailure(e, args); });\n }\n };\n Render.prototype.dmSuccess = function (e, args) {\n this.dataManagerSuccess(e, args);\n };\n Render.prototype.dmFailure = function (e, args) {\n this.dataManagerFailure(e, args);\n };\n /**\n * Render empty row to Grid which is used at the time to represent to no records.\n * @return {void}\n * @hidden\n */\n Render.prototype.renderEmptyRow = function () {\n this.emptyRow(true);\n };\n Render.prototype.emptyRow = function (isTrigger) {\n var gObj = this.parent;\n var tbody = this.contentRenderer.getTable().querySelector('tbody');\n var tr;\n if (!isNullOrUndefined(tbody)) {\n remove(tbody);\n }\n tbody = this.parent.createElement('tbody');\n tr = this.parent.createElement('tr', { className: 'e-emptyrow' });\n tr.appendChild(this.parent.createElement('td', {\n innerHTML: this.l10n.getConstant('EmptyRecord'),\n attrs: { colspan: gObj.getColumns().length.toString() }\n }));\n tbody.appendChild(tr);\n this.contentRenderer.renderEmpty(tbody);\n if (isTrigger) {\n this.parent.trigger(events.dataBound, {});\n this.parent.notify(events.onEmpty, { rows: [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })] });\n }\n };\n Render.prototype.dynamicColumnChange = function () {\n if (this.parent.getCurrentViewRecords().length) {\n this.updateColumnType(this.parent.getCurrentViewRecords()[0]);\n }\n };\n Render.prototype.updateColumnType = function (record) {\n var columns = this.parent.getColumns();\n var value;\n var data = record && record.items ? record.items[0] : record;\n var fmtr = this.locator.getService('valueFormatter');\n for (var i = 0, len = columns.length; i < len; i++) {\n value = getObject(columns[i].field || '', data);\n if (columns[i].isForeignColumn() && columns[i].columnData) {\n value = getObject(columns[i].foreignKeyValue || '', columns[i].columnData[0]);\n }\n if (!isNullOrUndefined(value)) {\n this.isColTypeDef = true;\n if (!columns[i].type) {\n columns[i].type = value.getDay ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n }\n else {\n columns[i].type = columns[i].type || null;\n }\n var valueFormatter = new ValueFormatter();\n if (columns[i].format && (columns[i].format.skeleton || columns[i].format.format)) {\n columns[i].setFormatter(valueFormatter.getFormatFunction(columns[i].format));\n columns[i].setParser(valueFormatter.getParserFunction(columns[i].format));\n }\n if (typeof (columns[i].format) === 'string') {\n setFormatter(this.locator, columns[i]);\n }\n else if (!columns[i].format && columns[i].type === 'number') {\n columns[i].setParser(fmtr.getParserFunction({ format: 'n2' }));\n }\n }\n };\n Render.prototype.dataManagerSuccess = function (e, args) {\n var gObj = this.parent;\n gObj.trigger(events.beforeDataBound, e);\n var len = Object.keys(e.result).length;\n if (this.parent.isDestroyed) {\n return;\n }\n if ((!gObj.getColumns().length && !len) && !(gObj.columns.length && gObj.columns[0] instanceof Column)) {\n gObj.hideSpinner();\n return;\n }\n this.parent.isEdit = false;\n this.parent.notify(events.tooltipDestroy, {});\n gObj.currentViewData = e.result;\n if (!len && e.count && gObj.allowPaging) {\n gObj.prevPageMoving = true;\n gObj.pageSettings.totalRecordsCount = e.count;\n gObj.pageSettings.currentPage = Math.ceil(e.count / gObj.pageSettings.pageSize);\n gObj.dataBind();\n return;\n }\n if (!gObj.getColumns().length && len || !this.isLayoutRendered) {\n this.updatesOnInitialRender(e);\n }\n if (!this.isColTypeDef && gObj.getCurrentViewRecords()) {\n this.updateColumnType(gObj.getCurrentViewRecords()[0]);\n }\n this.parent.notify(events.dataReady, extend({ count: e.count, result: e.result, aggregates: e.aggregates }, args));\n if (gObj.groupSettings.columns.length || (args && args.requestType === 'ungrouping')) {\n this.headerRenderer.refreshUI();\n }\n if (len) {\n this.contentRenderer.refreshContentRows(args);\n }\n else {\n if (!gObj.getColumns().length) {\n gObj.element.innerHTML = '';\n alert(this.l10n.getConstant('EmptyDataSourceError')); //ToDO: change this alert as dialog\n return;\n }\n this.contentRenderer.setRowElements([]);\n this.contentRenderer.setRowObjects([]);\n this.renderEmptyRow();\n if (args) {\n var action = (args.requestType || '').toLowerCase() + '-complete';\n this.parent.notify(action, args);\n }\n this.parent.hideSpinner();\n }\n this.parent.notify(events.toolbarRefresh, {});\n };\n Render.prototype.dataManagerFailure = function (e, args) {\n this.ariaService.setOptions(this.parent.getContent().firstChild, { busy: false, invalid: true });\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\n if (args.requestType === 'save' || args.requestType === 'delete'\n || args.name === 'bulk-save') {\n return;\n }\n this.parent.currentViewData = [];\n this.renderEmptyRow();\n };\n Render.prototype.updatesOnInitialRender = function (e) {\n this.isLayoutRendered = true;\n if (this.parent.columns.length < 1) {\n this.buildColumns(e.result[0]);\n }\n prepareColumns(this.parent.columns);\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.parent.notify(events.autoCol, {});\n };\n Render.prototype.buildColumns = function (record) {\n var columns = Object.keys(record);\n var cols = [];\n for (var i = 0, len = columns.length; i < len; i++) {\n cols[i] = { 'field': columns[i] };\n if (this.parent.enableColumnVirtualization) {\n cols[i].width = !isNullOrUndefined(cols[i].width) ? cols[i].width : 200;\n }\n }\n this.parent.columns = cols;\n };\n Render.prototype.instantiateRenderer = function () {\n this.renderer.addRenderer(RenderType.Header, new HeaderRender(this.parent, this.locator));\n this.renderer.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n var cellrender = this.locator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Header, new HeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Data, new CellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Indent, new IndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaption, new GroupCaptionCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaptionEmpty, new GroupCaptionEmptyCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Expand, new ExpandCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.HeaderIndent, new HeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailHeader, new DetailHeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailExpand, new DetailExpandCellRenderer(this.parent, this.locator));\n };\n Render.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.refreshComplete, this.refreshComplete, this);\n this.parent.on(events.bulkSave, this.sendBulkRequest, this);\n this.parent.on(events.showEmptyGrid, function () { _this.emptyGrid = true; }, this);\n this.parent.on(events.autoCol, this.dynamicColumnChange, this);\n };\n /** @hidden */\n Render.prototype.validateGroupRecords = function (e) {\n var _this = this;\n var index = e.result.length - 1;\n if (index < 0) {\n return Promise.resolve(e);\n }\n var group0 = e.result[0];\n var groupN = e.result[index];\n var predicate = [];\n var addWhere = function (input) {\n [group0, groupN].forEach(function (group) {\n return predicate.push(new Predicate('field', '==', group.field).and(_this.getPredicate('key', 'equal', group.key)));\n });\n input.where(Predicate.or(predicate));\n };\n var query = new Query();\n addWhere(query);\n var curDm = new DataManager(e.result);\n var curFilter = curDm.executeLocal(query);\n var newQuery = this.data.generateQuery(true);\n var rPredicate = [];\n if (this.data.isRemote()) {\n [group0, groupN].forEach(function (group) {\n return rPredicate.push(_this.getPredicate(group.field, 'equal', group.key));\n });\n newQuery.where(Predicate.or(rPredicate));\n }\n else {\n addWhere(newQuery);\n }\n var deferred = new Deferred();\n this.data.getData({}, newQuery).then(function (r) {\n _this.updateGroupInfo(curFilter, r.result);\n deferred.resolve(e);\n }).catch(function (e) { return deferred.reject(e); });\n return deferred.promise;\n };\n Render.prototype.getPredicate = function (key, operator, value) {\n if (value instanceof Date) {\n return getDatePredicate({ field: key, operator: operator, value: value });\n }\n return new Predicate(key, operator, value);\n };\n Render.prototype.updateGroupInfo = function (current, untouched) {\n var _this = this;\n var dm = new DataManager(untouched);\n current.forEach(function (element, index, array) {\n var uGroup = dm.executeLocal(new Query()\n .where(new Predicate('field', '==', element.field).and(_this.getPredicate('key', 'equal', element.key))))[0];\n element.count = uGroup.count;\n var itemGroup = element.items;\n var uGroupItem = uGroup.items;\n if (itemGroup.GroupGuid) {\n element.items = _this.updateGroupInfo(element.items, uGroup.items);\n }\n _this.parent.aggregates.forEach(function (row) {\n return row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) {\n var key = column.field + ' - ' + type.toLowerCase();\n var data = itemGroup.level ? uGroupItem.records : uGroup.items;\n var context = _this.parent;\n if (type === 'Custom') {\n var data_1 = itemGroup.level ? uGroupItem : uGroup;\n element.aggregates[key] = column.customAggregate ?\n column.customAggregate.call(context, data_1, column) : '';\n }\n else {\n element.aggregates[key] = DataUtil.aggregates[type.toLowerCase()](data, column.field);\n }\n });\n });\n });\n });\n return current;\n };\n return Render;\n}());\nexport { Render };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\n/**\n * CellRendererFactory\n * @hidden\n */\nvar CellRendererFactory = /** @class */ (function () {\n function CellRendererFactory() {\n this.cellRenderMap = {};\n }\n CellRendererFactory.prototype.addCellRenderer = function (name, type) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[name])) {\n this.cellRenderMap[name] = type;\n }\n };\n CellRendererFactory.prototype.getCellRenderer = function (name) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[name])) {\n throw \"The cellRenderer \" + name + \" is not found\";\n }\n else {\n return this.cellRenderMap[name];\n }\n };\n return CellRendererFactory;\n}());\nexport { CellRendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[name])) {\n this.services[name] = type;\n }\n };\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n this.rendererMap[rName] = type;\n }\n };\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { columnWidthChanged } from '../base/constant';\nimport { Column } from '../models/column';\n/**\n * ColumnWidthService\n * @hidden\n */\nvar ColumnWidthService = /** @class */ (function () {\n function ColumnWidthService(parent) {\n this.parent = parent;\n }\n ColumnWidthService.prototype.setWidthToColumns = function () {\n var _this = this;\n var i = 0;\n var indexes = this.parent.getColumnIndexesInView();\n var wFlag = true;\n if (this.parent.allowGrouping) {\n for (var len = this.parent.groupSettings.columns.length; i < len; i++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n wFlag = false;\n continue;\n }\n this.setColumnWidth(new Column({ width: '30px' }), i);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }), i);\n }\n this.parent.getColumns().forEach(function (column, index) {\n _this.setColumnWidth(column, wFlag ? undefined : index);\n });\n };\n ColumnWidthService.prototype.setColumnWidth = function (column, index, module) {\n var columnIndex = isNullOrUndefined(index) ? this.parent.getNormalizedColumnIndex(column.uid) : index;\n var cWidth = this.getWidth(column);\n if (cWidth !== null) {\n this.setWidth(cWidth, columnIndex);\n if ((this.parent.allowResizing && module === 'resize') || (this.parent.getFrozenColumns() && this.parent.allowResizing)) {\n this.setWidthToTable();\n }\n this.parent.notify(columnWidthChanged, { index: columnIndex, width: cWidth, column: column, module: module });\n }\n };\n ColumnWidthService.prototype.setWidth = function (width, index) {\n var chrome = 'chrome';\n var webstore = 'webstore';\n if (typeof (width) === 'string' && width.indexOf('%') !== -1 &&\n !(Boolean(window[chrome]) && Boolean(window[chrome][webstore])) && this.parent.allowGrouping) {\n var elementWidth = this.parent.element.offsetWidth;\n width = parseInt(width, 10) / 100 * (elementWidth);\n }\n var header = this.parent.getHeaderTable();\n var content = this.parent.getContentTable();\n var fWidth = formatUnit(width);\n var headerCol;\n var frzCols = this.parent.getFrozenColumns();\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n if (frzCols && index >= frzCols && mHdr && mHdr.querySelector('colgroup')) {\n headerCol = mHdr.querySelector('colgroup').children[index - frzCols];\n }\n else {\n headerCol = header.querySelector('colgroup').children[index];\n }\n if (headerCol) {\n headerCol.style.width = fWidth;\n }\n var contentCol;\n if (frzCols && index >= frzCols) {\n contentCol = this.parent.getContent().querySelector('.e-movablecontent')\n .querySelector('colgroup').children[index - frzCols];\n }\n else {\n contentCol = content.querySelector('colgroup').children[index];\n }\n if (contentCol) {\n contentCol.style.width = fWidth;\n }\n var edit = content.querySelector('.e-table.e-inline-edit');\n if (edit) {\n if (edit.querySelector('colgroup').children[index]) {\n edit.querySelector('colgroup').children[index].style.width = fWidth;\n }\n }\n };\n ColumnWidthService.prototype.getSiblingsHeight = function (element) {\n var previous = this.getHeightFromDirection(element, 'previous');\n var next = this.getHeightFromDirection(element, 'next');\n return previous + next;\n };\n ColumnWidthService.prototype.getHeightFromDirection = function (element, direction) {\n var sibling = element[direction + 'ElementSibling'];\n var result = 0;\n var classList = ['e-gridheader', 'e-gridfooter', 'e-groupdroparea', 'e-gridpager', 'e-toolbar'];\n while (sibling) {\n if (classList.some(function (value) { return sibling.classList.contains(value); })) {\n result += sibling.offsetHeight;\n }\n sibling = sibling[direction + 'ElementSibling'];\n }\n return result;\n };\n ColumnWidthService.prototype.getWidth = function (column) {\n if (isNullOrUndefined(column.width) && this.parent.allowResizing) {\n column.width = 200;\n }\n if (!column.width) {\n return null;\n }\n var width = parseInt(column.width.toString(), 10);\n if (column.minWidth && width < parseInt(column.minWidth.toString(), 10)) {\n return column.minWidth;\n }\n else if ((column.maxWidth && width > parseInt(column.maxWidth.toString(), 10))) {\n return column.maxWidth;\n }\n else {\n return column.width;\n }\n };\n ColumnWidthService.prototype.getTableWidth = function (columns) {\n var tWidth = 0;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n var cWidth = this.getWidth(column);\n if (column.visible !== false && cWidth !== null) {\n tWidth += parseInt(cWidth.toString(), 10);\n }\n }\n return tWidth;\n };\n ColumnWidthService.prototype.setWidthToFrozenTable = function () {\n var columns = this.parent.getColumns();\n columns.splice(this.parent.getFrozenColumns(), columns.length);\n var freezeWidth = formatUnit(this.getTableWidth(columns));\n this.parent.getHeaderTable().style.width = freezeWidth;\n this.parent.getContentTable().style.width = freezeWidth;\n };\n ColumnWidthService.prototype.setWidthToMovableTable = function () {\n var columns = this.parent.getColumns();\n columns.splice(0, this.parent.getFrozenColumns());\n var movableWidth = formatUnit(this.getTableWidth(columns));\n if (this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild) {\n this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild.style.width\n = movableWidth;\n }\n this.parent.getContent().querySelector('.e-movablecontent').firstElementChild.style.width =\n movableWidth;\n };\n ColumnWidthService.prototype.setWidthToTable = function () {\n var tWidth = formatUnit(this.getTableWidth(this.parent.getColumns()));\n if (this.parent.getFrozenColumns()) {\n this.setWidthToFrozenTable();\n this.setWidthToMovableTable();\n }\n else {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }));\n }\n this.parent.getHeaderTable().style.width = tWidth;\n this.parent.getContentTable().style.width = tWidth;\n }\n var edit = this.parent.element.querySelector('.e-table.e-inline-edit');\n if (edit) {\n edit.style.width = tWidth;\n }\n };\n return ColumnWidthService;\n}());\nexport { ColumnWidthService };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { EventHandler, getValue, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, extend, Browser } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport * as event from '../base/constant';\n/**\n * FocusStrategy class\n * @hidden\n */\nvar FocusStrategy = /** @class */ (function () {\n function FocusStrategy(parent) {\n this.currentInfo = {};\n this.oneTime = true;\n this.swap = {};\n this.forget = true;\n this.skipFocus = true;\n this.focusByClick = false;\n this.prevIndexes = {};\n this.parent = parent;\n this.addEventListener();\n }\n FocusStrategy.prototype.focusCheck = function (e) {\n var target = e.target;\n this.focusByClick = true;\n this.skipFocus = target.classList.contains('e-grid');\n };\n FocusStrategy.prototype.onFocus = function () {\n if (this.parent.isDestroyed || Browser.isDevice || this.parent.enableVirtualization) {\n return;\n }\n this.setActive(this.parent.frozenRows === 0, this.parent.frozenColumns !== 0);\n var current = this.getContent().matrix.get(0, -1, [0, 1], null, this.getContent().validator());\n this.getContent().matrix.select(current[0], current[1]);\n if (this.skipFocus) {\n this.focus();\n this.skipFocus = false;\n }\n };\n FocusStrategy.prototype.passiveFocus = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n if (e.target && e.target.classList.contains('e-detailcell')) {\n this.currentInfo.skipAction = false;\n addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n }\n };\n FocusStrategy.prototype.onBlur = function (e) {\n if ((this.parent.isEdit || e && (!e.relatedTarget || closest(e.relatedTarget, '.e-grid')))) {\n return;\n }\n this.removeFocus();\n this.skipFocus = false;\n this.currentInfo.skipAction = false;\n if (this.getContent().getFocusInfo().elementToFocus) {\n this.getContent().getFocusInfo().elementToFocus.tabIndex = 0;\n }\n };\n FocusStrategy.prototype.onClick = function (e, force) {\n var isContent = !isNullOrUndefined(closest(e.target, '.e-gridcontent'));\n var isHeader = !isNullOrUndefined(closest(e.target, '.e-gridheader'));\n isContent = isContent && isHeader ? !isContent : isContent;\n var isFrozen = !isNullOrUndefined(closest(e.target, '.e-frozencontent')) ||\n !isNullOrUndefined(closest(e.target, '.e-frozenheader'));\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) ||\n e.target.classList.contains('e-content')) {\n return;\n }\n this.setActive(isContent, isFrozen);\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) ||\n e.target.classList.contains('e-filtermenudiv')) {\n this.clearOutline();\n return;\n }\n var beforeArgs = { cancel: false, byKey: false, byClick: !isNullOrUndefined(e.target), clickArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel || closest(e.target, '.e-inline-edit')) {\n return;\n }\n this.setActive(isContent, isFrozen);\n if (this.getContent()) {\n var returnVal = this.getContent().onClick(e, force);\n if (returnVal === false) {\n return;\n }\n this.focus();\n }\n };\n FocusStrategy.prototype.onKeyPress = function (e) {\n if (this.skipOn(e)) {\n return;\n }\n var beforeArgs = { cancel: false, byKey: true, byClick: false, keyArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel) {\n return;\n }\n var bValue = this.getContent().matrix.current;\n this.currentInfo.outline = true;\n var swapInfo = this.getContent().jump(e.action, bValue);\n this.swap = swapInfo;\n if (swapInfo.swap) {\n this.setActive(!swapInfo.toHeader, swapInfo.toFrozen);\n this.getContent().matrix.current = this.getContent().getNextCurrent(bValue, swapInfo, this.active, e.action);\n this.prevIndexes = {};\n }\n this.setActiveByKey(e.action, this.getContent());\n var returnVal = this.getContent().onKeyPress(e);\n if (returnVal === false) {\n this.clearIndicator();\n return;\n }\n e.preventDefault();\n this.focus(e);\n };\n FocusStrategy.prototype.skipOn = function (e) {\n var target = e.target;\n if (!target) {\n return false;\n }\n if (this.currentInfo.skipAction) {\n this.clearIndicator();\n return true;\n }\n if (['pageUp', 'pageDown'].indexOf(e.action) > -1) {\n this.clearIndicator();\n return true;\n }\n return (e.action === 'delete'\n || (this.parent.editSettings.mode !== 'Batch' && (this.parent.isEdit || ['insert', 'f2'].indexOf(e.action) > -1))\n || (closest(document.activeElement, '.e-filterbarcell') !== null ||\n closest(document.activeElement, '#' + this.parent.element.id + '_searchbar') !== null\n && ['enter', 'leftArrow', 'rightArrow',\n 'shiftLeft', 'shiftRight', 'ctrlPlusA'].indexOf(e.action) > -1)\n || (closest(target, '.e-gridcontent') === null && closest(target, '.e-gridheader') === null)\n || (e.action === 'space' && (!target.classList.contains('e-gridchkbox') && closest(target, '.e-gridchkbox') === null\n && closest(target, '.e-headerchkcelldiv') === null)));\n };\n FocusStrategy.prototype.getFocusedElement = function () {\n return this.currentInfo.elementToFocus;\n };\n FocusStrategy.prototype.getContent = function () {\n return this.active || this.content;\n };\n FocusStrategy.prototype.setActive = function (content, isFrozen) {\n this.active = content ? isFrozen ? this.fContent : this.content :\n isFrozen ? this.fHeader : this.header;\n };\n FocusStrategy.prototype.setFocusedElement = function (element) {\n var _this = this;\n this.currentInfo.elementToFocus = element;\n setTimeout(function () { return _this.currentInfo.elementToFocus.focus(); }, 0);\n };\n FocusStrategy.prototype.focus = function (e) {\n this.removeFocus();\n this.addFocus(this.getContent().getFocusInfo(), e);\n };\n FocusStrategy.prototype.removeFocus = function (e) {\n if (!this.currentInfo.element) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n this.currentInfo.element.tabIndex = -1;\n };\n FocusStrategy.prototype.addFocus = function (info, e) {\n this.currentInfo = info;\n this.currentInfo.outline = info.outline && !isNullOrUndefined(e);\n if (!info.element) {\n return;\n }\n var isFocused = info.elementToFocus.classList.contains('e-focus');\n if (isFocused) {\n return;\n }\n if (this.currentInfo.outline) {\n addClass([info.element], ['e-focused']);\n }\n addClass([info.elementToFocus], ['e-focus']);\n info.element.tabIndex = 0;\n if (!isFocused) {\n this.setFocusedElement(info.elementToFocus);\n }\n this.parent.notify(event.cellFocused, {\n element: info.elementToFocus,\n parent: info.element,\n indexes: this.getContent().matrix.current,\n byKey: !isNullOrUndefined(e),\n byClick: isNullOrUndefined(e),\n keyArgs: e,\n isJump: this.swap.swap,\n container: this.getContent().getInfo(e),\n outline: !isNullOrUndefined(e),\n swapInfo: this.swap\n });\n var _a = this.getContent().matrix.current, rowIndex = _a[0], cellIndex = _a[1];\n this.prevIndexes = { rowIndex: rowIndex, cellIndex: cellIndex };\n this.focusedColumnUid = this.parent.getColumnByIndex(cellIndex).uid;\n this.focusByClick = false;\n };\n FocusStrategy.prototype.refreshMatrix = function (content) {\n var _this = this;\n return function (e) {\n if (content && (e.args && e.args.isFrozen) && !_this.fContent) {\n _this.fContent = new FixedContentFocus(_this.parent);\n }\n else if (content && !_this.content) {\n _this.content = new ContentFocus(_this.parent);\n }\n if (!content && (e.args && e.args.isFrozen) && !_this.fHeader) {\n _this.fHeader = new FixedHeaderFocus(_this.parent);\n }\n else if (!content && !_this.header) {\n _this.header = new HeaderFocus(_this.parent);\n }\n var cFocus = content ? (e.args && e.args.isFrozen) ? _this.fContent : _this.content :\n (e.args && e.args.isFrozen) ? _this.fHeader : _this.header;\n var rows = content ? e.rows.slice(_this.parent.frozenRows) : e.rows;\n var updateRow = content ? e.rows.slice(0, _this.parent.frozenRows) : e.rows;\n var matrix = cFocus.matrix.generate(updateRow, cFocus.selector);\n cFocus.matrix.generate(rows, cFocus.selector);\n cFocus.generateRows(updateRow, { matrix: matrix, handlerInstance: (e.args && e.args.isFrozen) ? _this.fHeader : _this.header });\n if (!Browser.isDevice && !_this.focusByClick && e && e.args && e.args.requestType === 'paging') {\n _this.skipFocus = false;\n _this.parent.element.focus();\n }\n if (e && e.args && e.args.requestType === 'virtualscroll') {\n if (_this.currentInfo.uid) {\n var index_1;\n var bool = e.rows.some(function (row, i) {\n index_1 = i;\n return row.uid === _this.currentInfo.uid;\n });\n if (bool) {\n _this.content.matrix.current[0] = index_1;\n _this.content.matrix.current[1] = _this.parent.getColumnIndexByUid(_this.focusedColumnUid) || 0;\n var focusElement = _this.getContent().getFocusInfo().elementToFocus;\n if (focusElement) {\n var cellPosition = focusElement.getBoundingClientRect();\n var gridPosition = _this.parent.element.getBoundingClientRect();\n if (cellPosition.top >= 0 && cellPosition.left >= 0 &&\n cellPosition.right <= Math.min(gridPosition.right, window.innerWidth ||\n document.documentElement.clientWidth) &&\n cellPosition.bottom <= Math.min(gridPosition.bottom, window.innerHeight ||\n document.documentElement.clientHeight)) {\n _this.focus();\n }\n }\n }\n }\n else if (e.args.focusElement && e.args.focusElement.classList.contains('e-filtertext')) {\n var focusElement = _this.parent.element.querySelector('#' + e.args.focusElement.id);\n if (focusElement) {\n focusElement.focus();\n }\n }\n }\n };\n };\n FocusStrategy.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.add(this.parent.element, 'mousedown', this.focusCheck, this);\n EventHandler.add(this.parent.element, 'focus', this.onFocus, this);\n this.parent.element.addEventListener('focus', this.passiveHandler = function (e) { return _this.passiveFocus(e); }, true);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n this.parent.on(event.keyPressed, this.onKeyPress, this);\n this.parent.on(event.click, this.onClick, this);\n this.parent.on(event.contentReady, this.refreshMatrix(true), this);\n this.parent.on(event.headerRefreshed, this.refreshMatrix(), this);\n this.parent.on('close-edit', this.restoreFocus, this);\n ['start-edit', 'start-add'].forEach(function (evt) { return _this.parent.on(evt, _this.clearIndicator, _this); });\n ['sorting'].forEach(function (action) { return _this.parent.on(action + \"-complete\", _this.restoreFocus, _this); });\n this.parent.on(event.batchAdd, this.refreshMatrix(true), this);\n this.parent.on(event.batchCancel, this.refreshMatrix(true), this);\n this.parent.on(event.batchDelete, this.refreshMatrix(true), this);\n this.parent.on(event.detailDataBound, this.refreshMatrix(true), this);\n this.parent.on(event.onEmpty, this.refreshMatrix(true), this);\n this.parent.on(event.cellFocused, this.internalCellFocus, this);\n };\n FocusStrategy.prototype.removeEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, 'mousedown', this.focusCheck);\n EventHandler.remove(this.parent.element, 'focus', this.onFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n this.parent.element.removeEventListener('focus', this.passiveHandler, true);\n this.parent.off(event.keyPressed, this.onKeyPress);\n this.parent.off(event.click, this.onClick);\n this.parent.off(event.contentReady, this.refreshMatrix(true));\n this.parent.off(event.headerRefreshed, this.refreshMatrix());\n this.parent.off('close-edit', this.restoreFocus);\n ['start-edit', 'start-add'].forEach(function (evt) { return _this.parent.off(evt, _this.clearOutline); });\n ['sorting'].forEach(function (action) { return _this.parent.off(action + \"-complete\", _this.restoreFocus); });\n this.parent.off(event.batchAdd, this.refreshMatrix(true));\n this.parent.off(event.batchDelete, this.refreshMatrix(true));\n this.parent.off(event.batchCancel, this.refreshMatrix(true));\n this.parent.off(event.detailDataBound, this.refreshMatrix(true));\n this.parent.off(event.onEmpty, this.refreshMatrix(true));\n this.parent.off(event.cellFocused, this.internalCellFocus);\n };\n FocusStrategy.prototype.destroy = function () {\n this.removeEventListener();\n };\n FocusStrategy.prototype.restoreFocus = function () {\n this.addFocus(this.getContent().getFocusInfo());\n };\n FocusStrategy.prototype.clearOutline = function () {\n this.getContent().matrix.current = this.getContent().matrix.get(0, -1, [0, 1], 'downArrow', this.getContent().validator());\n this.clearIndicator();\n };\n FocusStrategy.prototype.clearIndicator = function () {\n if (!this.currentInfo.element || !this.currentInfo.elementToFocus) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focus', 'e-focused']);\n };\n FocusStrategy.prototype.getPrevIndexes = function () {\n var forget = this.forget;\n this.forget = false;\n return forget ? { rowIndex: null, cellIndex: null } : this.prevIndexes;\n };\n FocusStrategy.prototype.forgetPrevious = function () {\n this.forget = true;\n };\n FocusStrategy.prototype.setActiveByKey = function (action, active) {\n var _this = this;\n if (this.parent.frozenColumns === 0 && this.parent.frozenRows === 0) {\n return;\n }\n var info;\n var actions = {\n 'home': function () { return ({ toHeader: !info.isContent, toFrozen: true }); },\n 'end': function () { return ({ toHeader: !info.isContent, toFrozen: false }); },\n 'ctrlHome': function () { return ({ toHeader: true, toFrozen: _this.parent.frozenColumns !== 0 }); },\n 'ctrlEnd': function () { return ({ toHeader: false, toFrozen: false }); }\n };\n if (!(action in actions)) {\n return;\n }\n info = active.getInfo();\n var swap = actions[action]();\n this.setActive(!swap.toHeader, swap.toFrozen);\n this.getContent().matrix.current = active.matrix.current;\n };\n FocusStrategy.prototype.internalCellFocus = function (e) {\n if (!(e.byKey && e.container.isContent && e.keyArgs.action === 'enter'\n && (e.parent.classList.contains('e-detailcell') ||\n e.parent.classList.contains('e-unboundcell') || e.parent.classList.contains('e-templatecell')))) {\n return;\n }\n this.clearIndicator();\n var focusEle = this.getContent().getFocusable(this.getFocusedElement());\n this.setFocusedElement(focusEle);\n this.currentInfo.skipAction = true;\n };\n return FocusStrategy;\n}());\nexport { FocusStrategy };\n/**\n * Create matrix from row collection which act as mental model for cell navigation\n * @hidden\n */\nvar Matrix = /** @class */ (function () {\n function Matrix() {\n this.matrix = [];\n this.current = [];\n }\n Matrix.prototype.set = function (rowIndex, columnIndex, allow) {\n rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex, this.columns));\n this.matrix[rowIndex] = this.matrix[rowIndex] || [];\n this.matrix[rowIndex][columnIndex] = allow ? 1 : 0;\n };\n Matrix.prototype.get = function (rowIndex, columnIndex, navigator, action, validator) {\n var tmp = columnIndex;\n if (rowIndex + navigator[0] < 0) {\n return [rowIndex, columnIndex];\n }\n rowIndex = Math.max(0, Math.min(rowIndex + navigator[0], this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex + navigator[1], this.matrix[rowIndex].length - 1));\n if (tmp + navigator[1] > this.matrix[rowIndex].length - 1 && validator(rowIndex, columnIndex, action)) {\n return [rowIndex, tmp];\n }\n var first = this.first(this.matrix[rowIndex], columnIndex, navigator, true, action);\n columnIndex = first === null ? tmp : first;\n var val = getValue(rowIndex + \".\" + columnIndex, this.matrix);\n if (rowIndex === this.rows && action === 'downArrow') {\n navigator[0] = -1;\n }\n return this.inValid(val) || !validator(rowIndex, columnIndex, action) ?\n this.get(rowIndex, tmp, navigator, action, validator) : [rowIndex, columnIndex];\n };\n Matrix.prototype.first = function (vector, index, navigator, moveTo, action) {\n if (((index < 0 || index === vector.length) && this.inValid(vector[index])\n && (action !== 'upArrow' && action !== 'downArrow')) || !vector.some(function (v) { return v === 1; })) {\n return null;\n }\n return !this.inValid(vector[index]) ? index :\n this.first(vector, (['upArrow', 'downArrow', 'shiftUp', 'shiftDown'].indexOf(action) !== -1) ? moveTo ? 0 : ++index : index + navigator[1], navigator, false, action);\n };\n Matrix.prototype.select = function (rowIndex, columnIndex) {\n rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex, this.matrix[rowIndex].length - 1));\n this.current = [rowIndex, columnIndex];\n };\n Matrix.prototype.generate = function (rows, selector) {\n var _this = this;\n this.rows = rows.length - 1;\n this.matrix = [];\n rows.forEach(function (row, rIndex) {\n var cells = row.cells.filter(function (c) { return c.isSpanned !== true; });\n _this.columns = Math.max(cells.length - 1, _this.columns | 0);\n cells.forEach(function (cell, cIndex) {\n _this.set(rIndex, cIndex, selector(row, cell));\n });\n });\n return this.matrix;\n };\n Matrix.prototype.inValid = function (value) {\n return value === 0 || value === undefined;\n };\n return Matrix;\n}());\nexport { Matrix };\n/**\n * @hidden\n */\nvar ContentFocus = /** @class */ (function () {\n function ContentFocus(parent) {\n var _this = this;\n this.matrix = new Matrix();\n this.parent = parent;\n this.keyActions = {\n 'rightArrow': [0, 1],\n 'tab': [0, 1],\n 'leftArrow': [0, -1],\n 'shiftTab': [0, -1],\n 'upArrow': [-1, 0],\n 'downArrow': [1, 0],\n 'shiftUp': [-1, 0],\n 'shiftDown': [1, 0],\n 'shiftRight': [0, 1],\n 'shiftLeft': [0, -1],\n 'enter': [1, 0],\n 'shiftEnter': [-1, 0]\n };\n this.indexesByKey = function (action) {\n var opt = {\n 'home': [_this.matrix.current[0], -1, 0, 1],\n 'end': [_this.matrix.current[0], _this.matrix.columns + 1, 0, -1],\n 'ctrlHome': [0, -1, 0, 1],\n 'ctrlEnd': [_this.matrix.rows, _this.matrix.columns + 1, 0, -1]\n };\n return opt[action] || null;\n };\n }\n ContentFocus.prototype.getTable = function () {\n return (this.parent.frozenColumns ?\n this.parent.getContent().querySelector('.e-movablecontent .e-table') :\n this.parent.getContentTable());\n };\n ContentFocus.prototype.onKeyPress = function (e) {\n var navigator = this.keyActions[e.action];\n var current = this.getCurrentFromAction(e.action, navigator, e.action in this.keyActions, e);\n if (!current) {\n return;\n }\n if ((['tab', 'shiftTab'].indexOf(e.action) > -1 && this.matrix.current || []).toString() === current.toString()) {\n if (current.toString() === [this.matrix.rows, this.matrix.columns].toString() ||\n current.toString() === [0, 0].toString()) {\n return false;\n }\n }\n this.matrix.select(current[0], current[1]);\n };\n ContentFocus.prototype.getCurrentFromAction = function (action, navigator, isPresent, e) {\n if (navigator === void 0) { navigator = [0, 0]; }\n if (!isPresent && !this.indexesByKey(action)) {\n return null;\n }\n if (!this.shouldFocusChange(e)) {\n return this.matrix.current;\n }\n var _a = this.indexesByKey(action) || this.matrix.current.concat(navigator), rowIndex = _a[0], cellIndex = _a[1], rN = _a[2], cN = _a[3];\n var current = this.matrix.get(rowIndex, cellIndex, [rN, cN], action, this.validator());\n return current;\n };\n ContentFocus.prototype.onClick = function (e, force) {\n var target = e.target;\n target = (target.classList.contains('e-rowcell') ? target : closest(target, 'td'));\n target = target ? target : closest(e.target, 'td.e-detailrowcollapse')\n || closest(e.target, 'td.e-detailrowexpand');\n target = closest(e.target, 'td.e-detailcell') ?\n isNullOrUndefined(closest(closest(e.target, '.e-grid'), 'td.e-detailcell')) ? null : target : target;\n target = target && closest(target, 'table').classList.contains('e-table') ? target : null;\n if (!target) {\n return false;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var _b = this.matrix.current, oRowIndex = _b[0], oCellIndex = _b[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val) || (!force && oRowIndex === rowIndex && oCellIndex === cellIndex)) {\n return false;\n }\n this.matrix.select(rowIndex, cellIndex);\n };\n ContentFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n this.matrix.current = [rowIndex, cellIndex];\n info.element = !isNullOrUndefined(this.getTable().rows[rowIndex]) ? this.getTable().rows[rowIndex].cells[cellIndex] : null;\n if (!info.element) {\n return info;\n }\n info.elementToFocus = !info.element.classList.contains('e-unboundcell') && !info.element.classList.contains('e-detailcell')\n ? this.getFocusable(info.element) : info.element;\n info.outline = true;\n info.uid = info.element.parentElement.getAttribute('data-uid');\n return info;\n };\n ContentFocus.prototype.getFocusable = function (element) {\n var query = 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n if (this.parent.isEdit) {\n query = 'input:not([type=\"hidden\"]), select:not([aria-hidden=\"true\"]), textarea';\n }\n var child = [].slice.call(element.querySelectorAll(query));\n /* Select the first focusable child element\n * if no child found then select the cell itself.\n * if Grid is in editable state, check for editable control inside child.\n */\n return child.length ? child[0] : element;\n };\n ContentFocus.prototype.selector = function (row, cell) {\n var types = [CellType.Expand, CellType.GroupCaption, CellType.CaptionSummary, CellType.GroupSummary];\n return ((row.isDataRow && cell.visible && (cell.isDataCell || cell.isTemplate))\n || (row.isDataRow && cell.cellType === CellType.DetailExpand)\n || (!row.isDataRow && types.indexOf(cell.cellType) > -1)\n || (cell.column && cell.column.type === 'checkbox')\n || (cell.cellType === CellType.CommandColumn))\n && !(row.edit === 'delete' && row.isDirty);\n };\n ContentFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 &&\n ((action === 'leftArrow' || action === 'shiftTab') && current[1] === 0);\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n var info = {\n swap: ((action === 'upArrow' || enterFrozen) && current[0] === 0) || frozenSwap,\n toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n toFrozen: frozenSwap\n };\n return info;\n };\n ContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current = [];\n if (action === 'rightArrow' || action === 'tab') {\n current[0] = previous[0];\n current[1] = -1;\n }\n else if (action === 'downArrow' || action === 'enter') {\n current[0] = -1;\n current[1] = previous[1];\n }\n return current;\n };\n ContentFocus.prototype.generateRows = function (rows, optionals) {\n var _a;\n var matrix = optionals.matrix, handlerInstance = optionals.handlerInstance;\n var len = handlerInstance.matrix.matrix.length;\n var defaultLen = this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar' ? len + 1 : len;\n handlerInstance.matrix.matrix = handlerInstance.matrix.matrix.slice(0, defaultLen); //Header matrix update.\n handlerInstance.matrix.rows = defaultLen;\n (_a = handlerInstance.matrix.matrix).push.apply(_a, matrix);\n handlerInstance.matrix.rows += matrix.length;\n };\n ContentFocus.prototype.getInfo = function (e) {\n var info = this.getFocusInfo();\n var _a = this.matrix.current, rIndex = _a[0], cIndex = _a[1];\n var isData = info.element.classList.contains('e-rowcell');\n var isSelectable = isData || (e && e.action !== 'enter' && (info.element.classList.contains('e-detailrowcollapse')\n || info.element.classList.contains('e-detailrowexpand')));\n var _b = [Math.min(parseInt(info.element.parentElement.getAttribute('aria-rowindex'), 10), rIndex),\n Math.min(parseInt(info.element.getAttribute('aria-colindex'), 10), cIndex)], rowIndex = _b[0], cellIndex = _b[1];\n return { isContent: true, isDataCell: isData, indexes: [rowIndex, cellIndex], isSelectable: isSelectable };\n };\n ContentFocus.prototype.validator = function () {\n var table = this.getTable();\n return function (rowIndex, cellIndex, action) {\n var cell = table.rows[rowIndex].cells[cellIndex];\n if (action === 'enter' || action === 'shiftEnter') {\n return cell.classList.contains('e-rowcell');\n }\n if ((action === 'shiftUp' || action === 'shiftDown') && cell.classList.contains('e-rowcell')) {\n return true;\n }\n else if (action !== 'shiftUp' && action !== 'shiftDown') {\n return cell.getBoundingClientRect().width !== 0;\n }\n return false;\n };\n };\n ContentFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, _b = _a[0], rIndex = _b === void 0 ? -1 : _b, _c = _a[1], cIndex = _c === void 0 ? -1 : _c;\n if (rIndex < 0 || cIndex < 0) {\n return true;\n }\n var cell = getValue(rIndex + \".cells.\" + cIndex, this.getTable().rows);\n if (!cell) {\n return true;\n }\n return e.action === 'enter' || e.action === 'shiftEnter' ?\n cell.classList.contains('e-rowcell') && !cell.classList.contains('e-unboundcell')\n && !cell.classList.contains('e-templatecell') && !cell.classList.contains('e-detailcell') : true;\n };\n return ContentFocus;\n}());\nexport { ContentFocus };\n/**\n * @hidden\n */\nvar HeaderFocus = /** @class */ (function (_super) {\n __extends(HeaderFocus, _super);\n function HeaderFocus(parent) {\n return _super.call(this, parent) || this;\n }\n HeaderFocus.prototype.getTable = function () {\n return (this.parent.getFrozenColumns() ?\n this.parent.getHeaderContent().querySelector('.e-movableheader .e-table') :\n this.parent.getHeaderTable());\n };\n HeaderFocus.prototype.onClick = function (e) {\n var target = e.target;\n target = (target.classList.contains('e-headercell') ? target : closest(target, 'th'));\n if (!target && this.parent.frozenRows !== 0) {\n target = (e.target.classList.contains('e-rowcell') ? e.target :\n closest(e.target, 'td'));\n }\n if (!target) {\n return;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val)) {\n return false;\n }\n this.matrix.select(target.parentElement.rowIndex, target.cellIndex);\n };\n HeaderFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n info.element = this.getTable().rows[rowIndex].cells[cellIndex];\n info.elementToFocus = this.getFocusable(info.element);\n info.outline = !info.element.classList.contains('e-filterbarcell');\n return info;\n };\n HeaderFocus.prototype.selector = function (row, cell) {\n return (cell.visible && (cell.column.field !== undefined || cell.isTemplate)) || cell.column.type === 'checkbox' ||\n cell.cellType === CellType.StackedHeader;\n };\n HeaderFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 &&\n (action === 'leftArrow' || action === 'shiftTab') && current[1] === 0;\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n return {\n swap: ((action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1) ||\n frozenSwap,\n toHeader: frozenSwap,\n toFrozen: frozenSwap\n };\n };\n HeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current1 = [];\n if (action === 'upArrow' || action === 'shiftEnter') {\n current1[0] = this.matrix.matrix.length;\n current1[1] = previous[1];\n }\n else if (action === 'rightArrow' || action === 'tab') {\n current1[0] = previous[0];\n current1[1] = -1;\n }\n return current1;\n };\n HeaderFocus.prototype.generateRows = function (rows) {\n var _this = this;\n var length = this.matrix.matrix.length;\n if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar') {\n this.matrix.rows = ++this.matrix.rows;\n rows[0].cells.forEach(function (cell, cIndex) {\n return _this.matrix.set(length, cIndex, cell.visible && cell.column.allowFiltering !== false);\n });\n }\n };\n HeaderFocus.prototype.getInfo = function (e) {\n return extend(_super.prototype.getInfo.call(this, e), { isContent: false, isHeader: true });\n };\n HeaderFocus.prototype.validator = function () {\n return function () { return true; };\n };\n HeaderFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, rowIndex = _a[0], columnIndex = _a[1];\n if (rowIndex < 0 || columnIndex < 0) {\n return true;\n }\n var cell = getValue(rowIndex + \".cells.\" + columnIndex, this.getTable().rows);\n if (!cell) {\n return true;\n }\n return e.action === 'enter' || e.action === 'altDownArrow' ? !cell.classList.contains('e-headercell') : true;\n };\n return HeaderFocus;\n}(ContentFocus));\nexport { HeaderFocus };\nvar FixedContentFocus = /** @class */ (function (_super) {\n __extends(FixedContentFocus, _super);\n function FixedContentFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedContentFocus.prototype.getTable = function () {\n return this.parent.getContent().querySelector('.e-frozencontent .e-table');\n };\n FixedContentFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n return {\n swap: (action === 'upArrow' || enterFrozen) && current[0] === 0\n || ((action === 'tab' || action === 'rightArrow') && current[1] === this.matrix.columns),\n toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n toFrozen: (action === 'upArrow' || enterFrozen) && current[0] === 0\n };\n };\n FixedContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current2 = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current2[0] = previous[0];\n current2[1] = active.matrix.columns + 1;\n }\n else if (action === 'downArrow' || action === 'enter') {\n current2[0] = -1;\n current2[1] = previous[1];\n }\n return current2;\n };\n return FixedContentFocus;\n}(ContentFocus));\nexport { FixedContentFocus };\nvar FixedHeaderFocus = /** @class */ (function (_super) {\n __extends(FixedHeaderFocus, _super);\n function FixedHeaderFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedHeaderFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n return {\n swap: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\n || ((action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns),\n toHeader: (action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns,\n toFrozen: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\n };\n };\n FixedHeaderFocus.prototype.getTable = function () {\n return (this.parent.getHeaderContent().querySelector('.e-frozenheader .e-table'));\n };\n FixedHeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current3 = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current3[0] = previous[0];\n current3[1] = active.matrix.columns + 1;\n }\n else if (action === 'upArrow' || action === 'shiftEnter') {\n current3[0] = this.matrix.matrix.length;\n current3[1] = previous[1];\n }\n return current3;\n };\n return FixedHeaderFocus;\n}(HeaderFocus));\nexport { FixedHeaderFocus };\n/** @hidden */\nvar SearchBox = /** @class */ (function () {\n function SearchBox(searchBox) {\n this.searchBox = searchBox;\n }\n SearchBox.prototype.searchFocus = function (args) {\n args.target.parentElement.classList.add('e-input-focus');\n };\n SearchBox.prototype.searchBlur = function (args) {\n args.target.parentElement.classList.remove('e-input-focus');\n };\n SearchBox.prototype.wireEvent = function () {\n if (this.searchBox) {\n EventHandler.add(this.searchBox, 'focus', this.searchFocus, this);\n EventHandler.add(this.searchBox, 'blur', this.searchBlur, this);\n }\n };\n SearchBox.prototype.unWireEvent = function () {\n if (this.searchBox) {\n EventHandler.remove(this.searchBox, 'focus', this.searchFocus);\n EventHandler.remove(this.searchBox, 'blur', this.searchBlur);\n }\n };\n return SearchBox;\n}());\nexport { SearchBox };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the Grid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(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))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, closest } from '@syncfusion/ej2-base';\nimport { Query } from '@syncfusion/ej2-data';\nimport { setCssInGridPopUp, getPosition, parentsUntil, addRemoveActiveClasses, removeAddCboxClasses } from '../base/util';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { iterateExtend } from '../base/util';\n/**\n * The `Selection` module is used to handle cell and row selection.\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for the Grid selection module\n * @hidden\n */\n function Selection(parent, selectionSettings, locator) {\n //Internal variables \n /**\n * @hidden\n */\n this.selectedRowIndexes = [];\n /**\n * @hidden\n */\n this.selectedRowCellIndexes = [];\n /**\n * @hidden\n */\n this.selectedRecords = [];\n this.preventFocus = false;\n this.isMultiShiftRequest = false;\n this.isMultiCtrlRequest = false;\n this.enableSelectMultiTouch = false;\n this.selectedRowState = {};\n this.totalRecordsCount = 0;\n this.chkAllCollec = [];\n this.isCheckedOnAdd = false;\n this.persistSelectedData = [];\n this.isCancelDeSelect = false;\n this.isPreventCellSelect = false;\n this.disableUI = false;\n this.parent = parent;\n this.selectionSettings = selectionSettings;\n this.factory = locator.getService('rendererFactory');\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n Selection.prototype.initializeSelection = function () {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n };\n /**\n * The function used to trigger onActionBegin\n * @return {void}\n * @hidden\n */\n Selection.prototype.onActionBegin = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n Selection.prototype.fDataUpdate = function (args) {\n if (args.cellIndex || args.rowIndex) {\n var rowObj = this.getRowObj(isNullOrUndefined(args.rowIndex) ? isNullOrUndefined(args.cellIndex) ?\n this.currentIndex : args.cellIndex.rowIndex : args.rowIndex);\n args.foreignKeyData = rowObj.foreignKeyData;\n }\n return args;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Selection.prototype.onActionComplete = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n /**\n * To destroy the selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.hidePopUp();\n this.clearSelection();\n this.removeEventListener();\n EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n };\n Selection.prototype.isEditing = function () {\n return (this.parent.editSettings.mode === 'Normal' || (this.parent.editSettings.mode === 'Batch' &&\n this.parent.editModule.formObj && !this.parent.editModule.formObj.validate())) &&\n this.parent.isEdit && !this.parent.isPersistSelection;\n };\n Selection.prototype.getSelectedMovableRow = function (index) {\n var gObj = this.parent;\n if (gObj.getFrozenColumns()) {\n return gObj.getMovableRowByIndex(index);\n }\n return null;\n };\n Selection.prototype.getCurrentBatchRecordChanges = function () {\n var gObj = this.parent;\n var added = 'addedRecords';\n var deleted = 'deletedRecords';\n if (gObj.editSettings.mode === 'Batch') {\n var currentRecords = iterateExtend(this.parent.getCurrentViewRecords());\n currentRecords = this.parent.editModule.getBatchChanges()[added].concat(currentRecords);\n var deletedRecords = this.parent.editModule.getBatchChanges()[deleted];\n var primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n for (var i = 0; i < (deletedRecords.length); i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (deletedRecords[i][primaryKey] === currentRecords[j][primaryKey]) {\n currentRecords.splice(j, 1);\n break;\n }\n }\n }\n return currentRecords;\n }\n else {\n return gObj.getCurrentViewRecords();\n }\n };\n /**\n * Selects a row by the given index.\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Selection.prototype.selectRow = function (index, isToggle) {\n var gObj = this.parent;\n var selectedRow = gObj.getRowByIndex(index);\n var selectedMovableRow = this.getSelectedMovableRow(index);\n var selectData = this.getCurrentBatchRecordChanges()[index];\n if (gObj.enableVirtualization && gObj.allowGrouping && gObj.groupSettings.columns.length && selectedRow) {\n selectData = gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')).data;\n }\n if (!this.isRowType() || !selectedRow || this.isEditing()) {\n // if (this.isEditing()) {\n // gObj.selectedRowIndex = index;\n // }\n return;\n }\n var isRowSelected = selectedRow.hasAttribute('aria-selected');\n isToggle = !isToggle ? isToggle :\n !this.selectedRowIndexes.length ? false :\n (this.selectedRowIndexes.length === 1 ? (index === this.selectedRowIndexes[0]) : false);\n var args;\n var can = 'cancel';\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, row: selectedRow,\n previousRow: gObj.getRowByIndex(this.prevRowIndex), previousRowIndex: this.prevRowIndex, target: this.target, cancel: false\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n }\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n if (!this.selectionSettings.persistSelection) {\n this.clearRow();\n }\n if (!isToggle) {\n this.updateRowSelection(selectedRow, index);\n if (gObj.getFrozenColumns()) {\n this.updateRowSelection(selectedMovableRow, index);\n }\n gObj.selectedRowIndex = index;\n }\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index,\n row: selectedRow, previousRow: gObj.getRowByIndex(this.prevRowIndex),\n previousRowIndex: this.prevRowIndex, target: this.target\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n }\n this.updateRowProps(index);\n };\n Selection.prototype.addMovableArgs = function (targetObj, mRow) {\n if (this.parent.getFrozenColumns()) {\n var mObj = { mRow: mRow, previousMovRow: this.parent.getMovableRows()[this.prevRowIndex] };\n targetObj = __assign({}, targetObj, mObj);\n }\n return targetObj;\n };\n /**\n * Selects a range of rows from start and end row indexes.\n * @param {number} startIndex - Specifies the start row index.\n * @param {number} endIndex - Specifies the end row index.\n * @return {void}\n */\n Selection.prototype.selectRowsByRange = function (startIndex, endIndex) {\n this.selectRows(this.getCollectionFromIndexes(startIndex, endIndex));\n this.parent.selectedRowIndex = endIndex;\n };\n /**\n * Selects a collection of rows by index.\n * @param {number[]} rowIndexes - Specifies an array of row indexes.\n * @return {void}\n */\n Selection.prototype.selectRows = function (rowIndexes) {\n var gObj = this.parent;\n var rowIndex = !this.isSingleSel() ? rowIndexes[0] : rowIndexes[rowIndexes.length - 1];\n var selectedRow = gObj.getRowByIndex(rowIndex);\n var selectedMovableRow = this.getSelectedMovableRow(rowIndex);\n var frzCols = gObj.getFrozenColumns();\n var can = 'cancel';\n var selectedData = this.getCurrentBatchRecordChanges()[rowIndexes[0]];\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n var args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n data: selectedData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n this.clearRow();\n gObj.selectedRowIndex = rowIndexes.slice(-1)[0];\n if (!this.isSingleSel()) {\n for (var _i = 0, rowIndexes_1 = rowIndexes; _i < rowIndexes_1.length; _i++) {\n var rowIdx = rowIndexes_1[_i];\n this.updateRowSelection(gObj.getRowByIndex(rowIdx), rowIdx);\n if (frzCols) {\n this.updateRowSelection(gObj.getMovableRowByIndex(rowIdx), rowIdx);\n }\n this.updateRowProps(rowIndex);\n }\n }\n else {\n this.updateRowSelection(gObj.getRowByIndex(rowIndex), rowIndex);\n if (frzCols) {\n this.updateRowSelection(gObj.getMovableRowByIndex(rowIndex), rowIndex);\n }\n this.updateRowProps(rowIndex);\n }\n args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n data: selectedData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n };\n /**\n * Select rows with existing row selection by passing row indexes.\n * @param {number} startIndex - Specifies the row indexes.\n * @return {void}\n * @hidden\n */\n Selection.prototype.addRowsToSelection = function (rowIndexes) {\n var gObj = this.parent;\n var can = 'cancel';\n var selectedRow = !this.isSingleSel() ? gObj.getRowByIndex(rowIndexes[0]) :\n gObj.getRowByIndex(rowIndexes[rowIndexes.length - 1]);\n var selectedMovableRow = !this.isSingleSel() ? this.getSelectedMovableRow(rowIndexes[0]) :\n this.getSelectedMovableRow(rowIndexes[rowIndexes.length - 1]);\n var frzCols = gObj.getFrozenColumns();\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n var args;\n for (var _i = 0, rowIndexes_2 = rowIndexes; _i < rowIndexes_2.length; _i++) {\n var rowIndex = rowIndexes_2[_i];\n var rowObj = this.getRowObj(rowIndex);\n var isUnSelected = this.selectedRowIndexes.indexOf(rowIndex) > -1;\n gObj.selectedRowIndex = rowIndex;\n if (isUnSelected) {\n this.rowDeselect(events.rowDeselecting, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData]);\n this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(rowIndex), 1);\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedRow), 1);\n selectedRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedRow, false, null, 'e-selectionbackground', 'e-active');\n if (selectedMovableRow) {\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedMovableRow), 1);\n selectedMovableRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedMovableRow, false, null, 'e-selectionbackground', 'e-active');\n }\n this.rowDeselect(events.rowDeselected, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], [selectedMovableRow]);\n }\n else {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n foreignKeyData: rowObj.foreignKeyData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n if (this.isSingleSel()) {\n this.clearRow();\n }\n this.updateRowSelection(selectedRow, rowIndex);\n if (frzCols) {\n this.updateRowSelection(selectedMovableRow, rowIndex);\n }\n }\n if (!isUnSelected) {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n foreignKeyData: rowObj.foreignKeyData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n }\n this.updateRowProps(rowIndex);\n if (this.isSingleSel()) {\n break;\n }\n }\n };\n Selection.prototype.getCollectionFromIndexes = function (startIndex, endIndex) {\n var indexes = [];\n var _a = (startIndex < endIndex) ?\n { i: startIndex, max: endIndex } : { i: endIndex, max: startIndex }, i = _a.i, max = _a.max;\n for (; i <= max; i++) {\n indexes.push(i);\n }\n if (startIndex > endIndex) {\n indexes.reverse();\n }\n return indexes;\n };\n Selection.prototype.clearRow = function () {\n this.clearRowSelection();\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.parent.selectedRowIndex = -1;\n if (this.isSingleSel() && this.parent.isPersistSelection) {\n this.selectedRowState = {};\n }\n };\n Selection.prototype.updateRowProps = function (startIndex) {\n this.prevRowIndex = startIndex;\n this.isRowSelected = this.selectedRowIndexes.length && true;\n };\n Selection.prototype.updatePersistCollection = function (selectedRow, chkState) {\n var _this = this;\n if (this.parent.isPersistSelection && !isNullOrUndefined(selectedRow)) {\n var rowObj = this.getRowObj(selectedRow);\n var pKey_1 = rowObj.data ? rowObj.data[this.primaryKey] : null;\n if (pKey_1 === null) {\n return;\n }\n rowObj.isSelected = chkState;\n if (chkState) {\n this.selectedRowState[pKey_1] = chkState;\n if (!this.persistSelectedData.some(function (data) { return data[_this.primaryKey] === pKey_1; })) {\n this.persistSelectedData.push(rowObj.data);\n }\n }\n else {\n this.updatePersistDelete(pKey_1);\n }\n }\n };\n Selection.prototype.updatePersistDelete = function (pKey) {\n var _this = this;\n delete (this.selectedRowState[pKey]);\n var index;\n var isPresent = this.persistSelectedData.some(function (data, i) {\n index = i;\n return data[_this.primaryKey] === pKey;\n });\n if (isPresent) {\n this.persistSelectedData.splice(index, 1);\n }\n };\n Selection.prototype.updateCheckBoxes = function (row, chkState) {\n if (!isNullOrUndefined(row)) {\n var chkBox = row.querySelector('.e-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n removeAddCboxClasses(chkBox.nextElementSibling, chkState);\n if (isNullOrUndefined(this.checkedTarget) || (!isNullOrUndefined(this.checkedTarget)\n && !this.checkedTarget.classList.contains('e-checkselectall'))) {\n this.setCheckAllState(parseInt(row.getAttribute('aria-rowindex'), 10));\n }\n }\n }\n };\n Selection.prototype.updateRowSelection = function (selectedRow, startIndex) {\n if (!selectedRow) {\n return;\n }\n this.selectedRowIndexes.push(startIndex);\n var len = this.selectedRowIndexes.length;\n if (this.parent.getFrozenColumns() && len > 1) {\n if ((this.selectedRowIndexes[len - 2] === this.selectedRowIndexes[len - 1])) {\n this.selectedRowIndexes.pop();\n }\n }\n this.selectedRecords.push(selectedRow);\n selectedRow.setAttribute('aria-selected', 'true');\n this.updatePersistCollection(selectedRow, true);\n this.updateCheckBoxes(selectedRow, true);\n this.addRemoveClassesForRow(selectedRow, true, null, 'e-selectionbackground', 'e-active');\n if (!this.preventFocus) {\n var target = this.focus.getPrevIndexes().cellIndex ?\n selectedRow.cells[this.focus.getPrevIndexes().cellIndex] :\n selectedRow.querySelector('.e-selectionbackground:not(.e-hide)');\n if (!target) {\n return;\n }\n this.focus.onClick({ target: target }, true);\n }\n };\n /**\n * Deselects the currently selected rows and cells.\n * @return {void}\n */\n Selection.prototype.clearSelection = function () {\n if (!this.parent.isPersistSelection || (this.parent.isPersistSelection && !this.parent.isEdit) ||\n (!isNullOrUndefined(this.checkedTarget) && this.checkedTarget.classList.contains('e-checkselectall'))) {\n var span = this.parent.element.querySelector('.e-gridpopup').querySelector('span');\n if (span.classList.contains('e-rowselect')) {\n span.classList.remove('e-spanclicked');\n }\n this.clearRowSelection();\n this.clearCellSelection();\n this.enableSelectMultiTouch = false;\n }\n };\n /**\n * Deselects the currently selected rows.\n * @return {void}\n */\n Selection.prototype.clearRowSelection = function () {\n var _this = this;\n if (this.isRowSelected) {\n var gObj = this.parent;\n var rows = this.parent.getDataRows();\n var data = [];\n var row = [];\n var mRow = [];\n var rowIndex = [];\n var frzCols = gObj.getFrozenColumns();\n var foreignKeyData = [];\n var currentViewData = this.parent.getCurrentViewRecords();\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var currentRow = this.parent.getDataRows()[this.selectedRowIndexes[i]];\n var rowObj = this.getRowObj(currentRow);\n if (rowObj) {\n data.push(rowObj.data);\n row.push(currentRow);\n rowIndex.push(this.selectedRowIndexes[i]);\n foreignKeyData.push(rowObj.foreignKeyData);\n }\n if (frzCols) {\n mRow.push(gObj.getMovableRows()[this.selectedRowIndexes[i]]);\n }\n }\n this.rowDeselect(events.rowDeselecting, rowIndex, data, row, foreignKeyData, mRow);\n if (this.isCancelDeSelect === true) {\n return;\n }\n rows.filter(function (record) { return record.hasAttribute('aria-selected'); }).forEach(function (ele) {\n if (!_this.disableUI) {\n ele.removeAttribute('aria-selected');\n _this.addRemoveClassesForRow(ele, false, true, 'e-selectionbackground', 'e-active');\n }\n _this.updatePersistCollection(ele, false);\n _this.updateCheckBoxes(ele);\n });\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var movableRow = this.getSelectedMovableRow(this.selectedRowIndexes[i]);\n if (movableRow) {\n if (!this.disableUI) {\n movableRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(movableRow, false, true, 'e-selectionbackground', 'e-active');\n }\n this.updatePersistCollection(movableRow, false);\n }\n }\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.isRowSelected = false;\n this.parent.selectedRowIndex = -1;\n this.rowDeselect(events.rowDeselected, rowIndex, data, row, foreignKeyData, mRow);\n }\n };\n Selection.prototype.rowDeselect = function (type, rowIndex, data, row, foreignKeyData, mRow) {\n var cancl = 'cancel';\n this.updatePersistCollection(row[0], false);\n var rowDeselectObj = { rowIndex: rowIndex, data: data, row: row, foreignKeyData: foreignKeyData, cancel: false };\n this.parent.trigger(type, this.parent.getFrozenColumns() ? __assign({}, rowDeselectObj, { mRow: mRow }) : rowDeselectObj);\n this.isCancelDeSelect = rowDeselectObj[cancl];\n this.updateCheckBoxes(row[0]);\n };\n Selection.prototype.getRowObj = function (row) {\n if (row === void 0) { row = this.currentIndex; }\n if (isNullOrUndefined(row)) {\n return {};\n }\n if (typeof row === 'number') {\n row = this.parent.getRowByIndex(row);\n }\n if (row) {\n return this.parent.getRowObjectFromUID(row.getAttribute('data-uid')) || {};\n }\n return {};\n };\n Selection.prototype.getSelectedMovableCell = function (cellIndex) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n if (frzCols) {\n if (cellIndex.cellIndex >= frzCols) {\n return gObj.getMovableCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n return null;\n }\n return null;\n };\n /**\n * Selects a cell by the given index.\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Selection.prototype.selectCell = function (cellIndex, isToggle) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(cellIndex);\n var args;\n var cncl = 'cancel';\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n var selectedTable;\n var cIdx;\n this.currentIndex = cellIndex.rowIndex;\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (!this.isCellType() || !selectedCell || this.isEditing()) {\n return;\n }\n var isCellSelected = selectedCell.classList.contains('e-cellselectionbackground');\n isToggle = !isToggle ? isToggle : (!isUndefined(this.prevCIdxs) &&\n cellIndex.rowIndex === this.prevCIdxs.rowIndex && cellIndex.cellIndex === this.prevCIdxs.cellIndex &&\n isCellSelected);\n if (!isToggle) {\n args = {\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n cancel: false\n };\n this.onActionBegin(args, events.cellSelecting);\n }\n if (!isNullOrUndefined(args) && args[cncl] === true) {\n return;\n }\n this.clearCell();\n if (!isToggle) {\n this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n this.updateCellProps(cellIndex, cellIndex);\n if (!isToggle) {\n this.onActionComplete({\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n }\n };\n Selection.prototype.getCellIndex = function (rIdx, cIdx) {\n return (this.parent.getFrozenColumns() ? (cIdx >= this.parent.getFrozenColumns() ? this.parent.getMovableCellFromIndex(rIdx, cIdx)\n : this.parent.getCellFromIndex(rIdx, cIdx)) : this.parent.getCellFromIndex(rIdx, cIdx));\n };\n /**\n * Selects a range of cells from start and end indexes.\n * @param {IIndex} startIndex - Specifies the row and column's start index.\n * @param {IIndex} endIndex - Specifies the row and column's end index.\n * @return {void}\n */\n Selection.prototype.selectCellsByRange = function (startIndex, endIndex) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(startIndex);\n var frzCols = gObj.getFrozenColumns();\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(startIndex.rowIndex, startIndex.cellIndex);\n }\n var min;\n var max;\n var stIndex = startIndex;\n var edIndex = endIndex = endIndex ? endIndex : startIndex;\n var cellIndexes;\n this.currentIndex = startIndex.rowIndex;\n var cncl = 'cancel';\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var args = {\n data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n this.onActionBegin(args, events.cellSelecting);\n if (!isNullOrUndefined(args) && args[cncl] === true) {\n return;\n }\n this.clearCell();\n if (startIndex.rowIndex > endIndex.rowIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex.rowIndex; i <= endIndex.rowIndex; i++) {\n if (this.selectionSettings.cellSelectionMode !== 'Box') {\n min = i === startIndex.rowIndex ? (startIndex.cellIndex) : 0;\n max = i === endIndex.rowIndex ? (endIndex.cellIndex) : this.getLastColIndex(i);\n }\n else {\n min = startIndex.cellIndex;\n max = endIndex.cellIndex;\n }\n cellIndexes = [];\n for (var j = min < max ? min : max, len = min > max ? min : max; j <= len; j++) {\n if (frzCols) {\n if (j < frzCols) {\n selectedCell = gObj.getCellFromIndex(i, j);\n }\n else {\n selectedCell = gObj.getMovableCellFromIndex(i, j);\n }\n }\n else {\n selectedCell = gObj.getCellFromIndex(i, j);\n }\n if (!selectedCell) {\n continue;\n }\n cellIndexes.push(j);\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n }\n this.selectedRowCellIndexes.push({ rowIndex: i, cellIndexes: cellIndexes });\n }\n this.updateCellProps(stIndex, edIndex);\n this.onActionComplete({\n data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n };\n /**\n * Selects a collection of cells by row and column indexes.\n * @param {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n * @return {void}\n */\n Selection.prototype.selectCells = function (rowCellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(rowCellIndexes[0]);\n var frzCols = gObj.getFrozenColumns();\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[0].rowIndex, rowCellIndexes[0].cellIndexes[0]);\n }\n this.currentIndex = rowCellIndexes[0].rowIndex;\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n this.onActionBegin({\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelecting);\n for (var i = 0, len = rowCellIndexes.length; i < len; i++) {\n for (var j = 0, cellLen = rowCellIndexes[i].cellIndexes.length; j < cellLen; j++) {\n if (frzCols) {\n if (rowCellIndexes[i].cellIndexes[j] < frzCols) {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n else {\n selectedCell = gObj.getMovableCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n }\n else {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n if (!selectedCell) {\n continue;\n }\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n this.addRowCellIndex({ rowIndex: rowCellIndexes[i].rowIndex, cellIndex: rowCellIndexes[i].cellIndexes[j] });\n }\n }\n this.updateCellProps({ rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] }, { rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] });\n this.onActionComplete({\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n };\n /**\n * Select cells with existing cell selection by passing row and column index.\n * @param {IIndex} startIndex - Defines the collection of row and column index.\n * @return {void}\n * @hidden\n */\n Selection.prototype.addCellsToSelection = function (cellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedTable;\n var cIdx;\n var selectedCell;\n var frzCols = gObj.getFrozenColumns();\n var index;\n this.currentIndex = cellIndexes[0].rowIndex;\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var rowObj;\n if (frzCols && cellIndexes[0].cellIndex >= frzCols) {\n rowObj = gObj.getMovableRowsObject()[cellIndexes[0].rowIndex];\n }\n else {\n rowObj = this.getRowObj(cellIndexes[0].rowIndex);\n }\n var foreignKeyData = [];\n for (var _i = 0, cellIndexes_1 = cellIndexes; _i < cellIndexes_1.length; _i++) {\n var cellIndex = cellIndexes_1[_i];\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[i].rowIndex === cellIndex.rowIndex) {\n index = i;\n break;\n }\n }\n selectedCell = this.getSelectedMovableCell(cellIndex);\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n foreignKeyData.push(rowObj.cells[frzCols && cellIndexes[0].cellIndex >= frzCols\n ? cellIndex.cellIndex - frzCols : cellIndex.cellIndex].foreignKeyData);\n var args = {\n data: selectedData, cellIndex: cellIndexes[0],\n isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n previousRowCell: this.prevECIdxs ?\n gObj.getCellFromIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n };\n var isUnSelected = index > -1;\n if (isUnSelected) {\n var selectedCellIdx = this.selectedRowCellIndexes[index].cellIndexes;\n if (selectedCellIdx.indexOf(cellIndex.cellIndex) > -1) {\n this.cellDeselect(events.cellDeselecting, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n selectedCellIdx.splice(selectedCellIdx.indexOf(cellIndex.cellIndex), 1);\n selectedCell.classList.remove('e-cellselectionbackground');\n selectedCell.removeAttribute('aria-selected');\n this.cellDeselect(events.cellDeselected, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n }\n else {\n isUnSelected = false;\n this.onActionBegin(args, events.cellSelecting);\n this.addRowCellIndex({ rowIndex: cellIndex.rowIndex, cellIndex: cellIndex.cellIndex });\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n }\n }\n else {\n this.onActionBegin(args, events.cellSelecting);\n this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n this.updateCellProps(cellIndex, cellIndex);\n if (!isUnSelected) {\n this.onActionComplete({\n data: selectedData, cellIndex: cellIndexes[0], currentCell: selectedCell,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) :\n undefined, previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes\n }, events.cellSelected);\n }\n }\n };\n Selection.prototype.getColIndex = function (rowIndex, index) {\n var cells;\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (index >= frzCols) {\n cells = this.parent.getMovableDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n }\n }\n if (!cells) {\n cells = this.parent.getDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 10);\n if (colIndex === index) {\n if (frzCols) {\n if (index >= frzCols) {\n m += frzCols;\n }\n }\n return m;\n }\n }\n return -1;\n };\n Selection.prototype.getLastColIndex = function (rowIndex) {\n var cells = this.parent.getFrozenColumns() ? this.parent.getMovableDataRows()[rowIndex].querySelectorAll('td.e-rowcell')\n : this.parent.getDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n return parseInt(cells[cells.length - 1].getAttribute('aria-colindex'), 10);\n };\n Selection.prototype.clearCell = function () {\n this.clearCellSelection();\n };\n Selection.prototype.cellDeselect = function (type, cellIndexes, data, cells, foreignKeyData) {\n var cancl = 'cancel';\n if (cells[0] && cells[0].classList.contains('e-gridchkbox')) {\n this.updateCheckBoxes(closest(cells[0], 'tr'));\n }\n var args = {\n cells: cells, data: data, cellIndexes: cellIndexes, foreignKeyData: foreignKeyData, cancel: false\n };\n this.parent.trigger(type, args);\n this.isPreventCellSelect = args[cancl];\n };\n Selection.prototype.updateCellSelection = function (selectedCell, rowIndex, cellIndex) {\n if (!isNullOrUndefined(rowIndex)) {\n this.addRowCellIndex({ rowIndex: rowIndex, cellIndex: cellIndex });\n }\n selectedCell.classList.add('e-cellselectionbackground');\n if (selectedCell.classList.contains('e-gridchkbox')) {\n this.updateCheckBoxes(closest(selectedCell, 'tr'), true);\n }\n this.addAttribute(selectedCell);\n };\n Selection.prototype.addAttribute = function (cell) {\n this.target = cell;\n if (!isNullOrUndefined(cell)) {\n cell.setAttribute('aria-selected', 'true');\n if (!this.preventFocus) {\n this.focus.onClick({ target: cell }, true);\n }\n }\n };\n Selection.prototype.updateCellProps = function (startIndex, endIndex) {\n this.prevCIdxs = startIndex;\n this.prevECIdxs = endIndex;\n this.isCellSelected = this.selectedRowCellIndexes.length && true;\n };\n Selection.prototype.addRowCellIndex = function (rowCellIndex) {\n var isRowAvail;\n var index;\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[i].rowIndex === rowCellIndex.rowIndex) {\n isRowAvail = true;\n index = i;\n break;\n }\n }\n if (isRowAvail) {\n if (this.selectedRowCellIndexes[index].cellIndexes.indexOf(rowCellIndex.cellIndex) < 0) {\n this.selectedRowCellIndexes[index].cellIndexes.push(rowCellIndex.cellIndex);\n }\n }\n else {\n this.selectedRowCellIndexes.push({ rowIndex: rowCellIndex.rowIndex, cellIndexes: [rowCellIndex.cellIndex] });\n }\n };\n /**\n * Deselects the currently selected cells.\n * @return {void}\n */\n Selection.prototype.clearCellSelection = function () {\n if (this.isCellSelected) {\n var gObj = this.parent;\n var selectedCells = this.getSelectedCellsElement();\n var rowCell = this.selectedRowCellIndexes;\n var data = [];\n var cells = [];\n var foreignKeyData = [];\n var currentViewData = this.getCurrentBatchRecordChanges();\n var selectedTable = void 0;\n var frzCols = gObj.getFrozenColumns();\n for (var i = 0, len = rowCell.length; i < len; i++) {\n data.push(currentViewData[rowCell[i].rowIndex]);\n var rowObj = this.getRowObj(rowCell[i].rowIndex);\n for (var j = 0, cLen = rowCell[i].cellIndexes.length; j < cLen; j++) {\n if (frzCols) {\n if (rowCell[i].cellIndexes[j] < frzCols) {\n cells.push(gObj.getCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n else {\n cells.push(gObj.getMovableCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n }\n else {\n foreignKeyData.push(rowObj.cells[rowCell[i].cellIndexes[j]].foreignKeyData);\n cells.push(gObj.getCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n }\n }\n this.cellDeselect(events.cellDeselecting, rowCell, data, cells, foreignKeyData);\n if (this.isPreventCellSelect === true) {\n return;\n }\n for (var i = 0, len = selectedCells.length; i < len; i++) {\n selectedCells[i].classList.remove('e-cellselectionbackground');\n selectedCells[i].removeAttribute('aria-selected');\n }\n this.selectedRowCellIndexes = [];\n this.isCellSelected = false;\n this.cellDeselect(events.cellDeselected, rowCell, data, cells, foreignKeyData);\n this.prevECIdxs = undefined;\n }\n };\n Selection.prototype.getSelectedCellsElement = function () {\n var gObj = this.parent;\n var rows = gObj.getDataRows();\n var mRows;\n if (gObj.getFrozenColumns()) {\n mRows = gObj.getMovableDataRows();\n rows = gObj.addMovableRows(rows, mRows);\n }\n var cells = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n cells = cells.concat([].slice.call(rows[i].querySelectorAll('.e-cellselectionbackground')));\n }\n return cells;\n };\n Selection.prototype.mouseMoveHandler = function (e) {\n e.preventDefault();\n var gBRect = this.parent.element.getBoundingClientRect();\n var x1 = this.x;\n var y1 = this.y;\n var position = getPosition(e);\n var x2 = position.x - gBRect.left;\n var y2 = position.y - gBRect.top;\n var tmp;\n var target = closest(e.target, 'tr');\n this.isDragged = true;\n if (!this.isCellDrag) {\n if (!target) {\n target = closest(document.elementFromPoint(this.parent.element.offsetLeft + 2, e.clientY), 'tr');\n }\n if (x1 > x2) {\n tmp = x2;\n x2 = x1;\n x1 = tmp;\n }\n if (y1 > y2) {\n tmp = y2;\n y2 = y1;\n y1 = tmp;\n }\n this.element.style.left = x1 + 'px';\n this.element.style.top = y1 + 'px';\n this.element.style.width = x2 - x1 + 'px';\n this.element.style.height = y2 - y1 + 'px';\n }\n if (target && !e.ctrlKey && !e.shiftKey) {\n var rowIndex = parseInt(target.getAttribute('aria-rowindex'), 10);\n if (!this.isCellDrag) {\n this.selectRowsByRange(this.startIndex, rowIndex);\n }\n else {\n var td = parentsUntil(e.target, 'e-rowcell');\n if (td) {\n this.selectLikeExcel(rowIndex, parseInt(td.getAttribute('aria-colindex'), 10));\n }\n }\n }\n };\n Selection.prototype.selectLikeExcel = function (rowIndex, cellIndex) {\n this.clearCellSelection();\n this.selectCellsByRange({ rowIndex: this.startIndex, cellIndex: this.startCellIndex }, { rowIndex: rowIndex, cellIndex: cellIndex });\n };\n Selection.prototype.mouseUpHandler = function (e) {\n document.body.classList.remove('e-disableuserselect');\n if (this.element) {\n remove(this.element);\n }\n EventHandler.remove(this.parent.getContent(), 'mousemove', this.mouseMoveHandler);\n EventHandler.remove(document.body, 'mouseup', this.mouseUpHandler);\n this.isDragged = false;\n };\n Selection.prototype.mouseDownHandler = function (e) {\n var target = e.target;\n var gObj = this.parent;\n var isDrag;\n var gridElement = parentsUntil(target, 'e-grid');\n if (gridElement && gridElement.id !== gObj.element.id) {\n return;\n }\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (target.classList.contains('e-rowcell') && !e.shiftKey && !e.ctrlKey) {\n if (gObj.selectionSettings.cellSelectionMode === 'Box' && !this.isRowType() && !this.isSingleSel()) {\n this.isCellDrag = true;\n isDrag = true;\n }\n else if (gObj.allowRowDragAndDrop) {\n if (!this.isRowType() || this.isSingleSel() || closest(target, 'td').classList.contains('e-selectionbackground')) {\n this.isDragged = false;\n return;\n }\n isDrag = true;\n this.element = this.parent.createElement('div', { className: 'e-griddragarea' });\n gObj.getContent().appendChild(this.element);\n }\n if (isDrag) {\n var tr = closest(e.target, 'tr');\n this.startIndex = parseInt(tr.getAttribute('aria-rowindex'), 10);\n this.startCellIndex = parseInt(parentsUntil(target, 'e-rowcell').getAttribute('aria-colindex'), 10);\n document.body.classList.add('e-disableuserselect');\n var gBRect = gObj.element.getBoundingClientRect();\n var postion = getPosition(e);\n this.x = postion.x - gBRect.left;\n this.y = postion.y - gBRect.top;\n EventHandler.add(gObj.getContent(), 'mousemove', this.mouseMoveHandler, this);\n EventHandler.add(document.body, 'mouseup', this.mouseUpHandler, this);\n }\n }\n };\n Selection.prototype.clearSelAfterRefresh = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n /**\n * @hidden\n */\n Selection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.initialEnd, this.initializeSelection, this);\n this.parent.on(events.rowSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.cellSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.parent.on(events.beforeFragAppend, this.clearSelAfterRefresh, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.actionBeginFunction = this.actionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.on(events.rowsRemoved, this.rowsRemoved, this);\n this.parent.on(events.headerRefreshed, this.refreshHeader, this);\n this.addEventListener_checkbox();\n };\n /**\n * @hidden\n */\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.initialEnd, this.initializeSelection);\n this.parent.off(events.rowSelectionComplete, this.onActionComplete);\n this.parent.off(events.cellSelectionComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.off(events.beforeFragAppend, this.clearSelAfterRefresh);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.off(events.rowsRemoved, this.rowsRemoved);\n this.parent.off(events.headerRefreshed, this.refreshHeader);\n this.removeEventListener_checkbox();\n };\n Selection.prototype.columnPositionChanged = function () {\n if (!this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n Selection.prototype.refreshHeader = function () {\n this.setCheckAllState();\n };\n Selection.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n delete (this.selectedRowState[e.records[i][this.primaryKey]]);\n --this.totalRecordsCount;\n }\n this.setCheckAllState();\n };\n ;\n Selection.prototype.beforeFragAppend = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n ;\n Selection.prototype.getCheckAllBox = function () {\n return this.parent.getHeaderContent().querySelector('.e-checkselectall');\n };\n Selection.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n Selection.prototype.render = function (e) {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n };\n Selection.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n if (!isNullOrUndefined(e.properties.type) && this.selectionSettings.type === 'Single') {\n if (this.selectedRowCellIndexes.length > 1) {\n this.clearCellSelection();\n }\n if (this.selectedRowIndexes.length > 1) {\n this.clearRowSelection();\n }\n this.enableSelectMultiTouch = false;\n this.hidePopUp();\n }\n if (!isNullOrUndefined(e.properties.mode) ||\n !isNullOrUndefined(e.properties.cellSelectionMode)) {\n this.clearSelection();\n }\n this.checkBoxSelectionChanged();\n this.initPerisistSelection();\n var checkboxColumn = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length) {\n gObj.isCheckBoxSelection = !(this.selectionSettings.checkboxMode === 'ResetOnRowClick');\n }\n };\n Selection.prototype.hidePopUp = function () {\n if (this.parent.element.querySelector('.e-gridpopup').querySelectorAll('.e-rowselect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Selection.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n this.selectRow(this.parent.selectedRowIndex);\n };\n Selection.prototype.checkBoxSelectionChanged = function () {\n this.parent.off(events.contentReady, this.checkBoxSelectionChanged);\n var gobj = this.parent;\n var checkboxColumn = gobj.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length > 0) {\n gobj.isCheckBoxSelection = true;\n this.chkField = checkboxColumn[0].field;\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n if (isNullOrUndefined(this.totalRecordsCount)) {\n this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n }\n if (this.isSingleSel()) {\n gobj.selectionSettings.type = 'Multiple';\n gobj.dataBind();\n }\n else {\n this.initPerisistSelection();\n }\n }\n if (!gobj.isCheckBoxSelection) {\n this.chkField = null;\n this.initPerisistSelection();\n }\n };\n Selection.prototype.initPerisistSelection = function () {\n var gobj = this.parent;\n if (this.parent.selectionSettings.persistSelection && this.parent.getPrimaryKeyFieldNames().length > 0) {\n gobj.isPersistSelection = true;\n this.ensureCheckboxFieldSelection();\n }\n else if (this.parent.getPrimaryKeyFieldNames().length > 0) {\n gobj.isPersistSelection = false;\n this.ensureCheckboxFieldSelection();\n }\n else {\n gobj.isPersistSelection = false;\n this.selectedRowState = {};\n }\n };\n Selection.prototype.ensureCheckboxFieldSelection = function () {\n var gobj = this.parent;\n this.primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n if (!gobj.enableVirtualization && this.chkField\n && ((gobj.isPersistSelection && Object.keys(this.selectedRowState).length === 0) ||\n !gobj.isPersistSelection)) {\n var data = this.parent.getDataModule();\n var query = new Query().where(this.chkField, 'equal', true);\n var dataManager = data.getData({}, query);\n var proxy_1 = this;\n this.parent.showSpinner();\n dataManager.then(function (e) {\n proxy_1.dataSuccess(e.result);\n proxy_1.refreshPersistSelection();\n proxy_1.parent.hideSpinner();\n });\n }\n };\n Selection.prototype.dataSuccess = function (res) {\n for (var i = 0; i < res.length; i++) {\n if (isNullOrUndefined(this.selectedRowState[res[i][this.primaryKey]]) && res[i][this.chkField]) {\n this.selectedRowState[res[i][this.primaryKey]] = res[i][this.chkField];\n }\n }\n this.persistSelectedData = res;\n };\n Selection.prototype.setRowSelection = function (state) {\n if (!this.parent.getDataModule().isRemote()) {\n if (state) {\n for (var _i = 0, _a = this.getData(); _i < _a.length; _i++) {\n var data = _a[_i];\n this.selectedRowState[data[this.primaryKey]] = true;\n }\n }\n else {\n this.selectedRowState = {};\n }\n // (this.getData()).forEach(function (data) {\n // this.selectedRowState[data[this.primaryKey]] = true;\n // })\n }\n };\n Selection.prototype.getData = function () {\n return this.parent.getDataModule().dataManager.dataSource.json;\n };\n Selection.prototype.refreshPersistSelection = function () {\n var rows = this.parent.getRows();\n if (rows.length > 0 && (this.parent.isPersistSelection || this.chkField)) {\n var indexes = [];\n for (var j = 0; j < rows.length; j++) {\n var rowObj = this.getRowObj(rows[j]);\n var pKey = rowObj ? rowObj.data[this.primaryKey] : null;\n if (pKey === null) {\n return;\n }\n var checkState = void 0;\n var chkBox = rows[j].querySelector('.e-checkselect');\n if (this.selectedRowState[pKey] || (this.parent.checkAllRows === 'Check' && this.chkAllCollec.indexOf(pKey) < 0)\n || (this.parent.checkAllRows === 'Uncheck' && this.chkAllCollec.indexOf(pKey) > 0)\n || (this.parent.checkAllRows === 'Intermediate' && !isNullOrUndefined(this.chkField) && rowObj.data[this.chkField])) {\n indexes.push(parseInt(rows[j].getAttribute('aria-rowindex'), 10));\n checkState = true;\n }\n else {\n checkState = false;\n if (this.checkedTarget !== chkBox && this.parent.isCheckBoxSelection) {\n removeAddCboxClasses(chkBox.nextElementSibling, checkState);\n }\n }\n this.updatePersistCollection(rows[j], checkState);\n }\n this.isSingleSel() && indexes.length > 0 ? this.selectRow(indexes[0], true) : this.selectRows(indexes);\n }\n if (this.parent.isCheckBoxSelection && this.getCurrentBatchRecordChanges().length > 0) {\n this.setCheckAllState();\n }\n };\n Selection.prototype.actionBegin = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n var editChkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(editChkBox)) {\n var row = closest(editChkBox, '.e-editedrow');\n if (row) {\n if (this.parent.editSettings.mode === 'Dialog') {\n row = this.parent.element.querySelector('.e-dlgeditrow');\n }\n var rowObj = this.getRowObj(row);\n if (!rowObj) {\n return;\n }\n this.selectedRowState[rowObj.data[this.primaryKey]] = rowObj.isSelected = editChkBox.checked;\n }\n else {\n this.isCheckedOnAdd = editChkBox.checked;\n }\n }\n }\n };\n Selection.prototype.actionComplete = function (e) {\n var _this = this;\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n if (e.action === 'add' && this.isCheckedOnAdd) {\n var rowObj = this.parent.getRowObjectFromUID(this.parent.getRows()[e.selectedRow].getAttribute('data-uid'));\n this.selectedRowState[rowObj.data[this.primaryKey]] = rowObj.isSelected = this.isCheckedOnAdd;\n }\n this.refreshPersistSelection();\n }\n if (e.requestType === 'delete' && this.parent.isPersistSelection) {\n e.data.slice().forEach(function (data) {\n if (!isNullOrUndefined(data[_this.primaryKey])) {\n _this.updatePersistDelete(data[_this.primaryKey]);\n }\n });\n this.setCheckAllState();\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n }\n };\n Selection.prototype.onDataBound = function () {\n if (!this.parent.enableVirtualization && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n };\n Selection.prototype.checkSelectAllAction = function (checkState) {\n var cRenderer = this.getRenderer();\n var editForm = this.parent.element.querySelector('.e-gridform');\n this.checkedTarget = this.getCheckAllBox();\n if (checkState && this.getCurrentBatchRecordChanges().length) {\n this.selectRowsByRange(cRenderer.getVirtualRowIndex(0), cRenderer.getVirtualRowIndex(this.getCurrentBatchRecordChanges().length));\n this.parent.checkAllRows = 'Check';\n }\n else {\n this.clearSelection();\n this.parent.checkAllRows = 'Uncheck';\n }\n this.chkAllCollec = [];\n if (this.parent.isPersistSelection) {\n var rows = this.parent.getRows();\n for (var i = 0; i < rows.length; i++) {\n this.updatePersistCollection(rows[i], checkState);\n }\n if (this.parent.checkAllRows === 'Uncheck') {\n this.setRowSelection(false);\n this.persistSelectedData = this.parent.getDataModule().isRemote() ? this.persistSelectedData : [];\n }\n else if (this.parent.checkAllRows === 'Check') {\n this.setRowSelection(true);\n this.persistSelectedData = !this.parent.getDataModule().isRemote() ? this.getData().slice() : this.persistSelectedData;\n }\n }\n if (!isNullOrUndefined(editForm)) {\n var editChkBox = editForm.querySelector('.e-edit-checkselect');\n removeAddCboxClasses(editChkBox.nextElementSibling, checkState);\n }\n };\n Selection.prototype.checkSelectAll = function (checkBox) {\n var _this = this;\n var stateStr = this.getCheckAllStatus(checkBox);\n var state = stateStr === 'Check';\n if (stateStr === 'Intermediate') {\n state = this.getCurrentBatchRecordChanges().some(function (data) {\n return data[_this.primaryKey] in _this.selectedRowState;\n });\n }\n this.checkSelectAllAction(!state);\n this.target = null;\n if (this.getCurrentBatchRecordChanges().length > 0) {\n this.setCheckAllState();\n }\n this.triggerChkChangeEvent(checkBox, !state);\n };\n Selection.prototype.getCheckAllStatus = function (ele) {\n var classes = ele ? ele.nextElementSibling.classList :\n this.getCheckAllBox().nextElementSibling.classList;\n var status;\n if (classes.contains('e-check')) {\n status = 'Check';\n }\n else if (classes.contains('e-uncheck')) {\n status = 'Uncheck';\n }\n else if (classes.contains('e-stop')) {\n status = 'Intermediate';\n }\n else {\n status = 'None';\n }\n return status;\n };\n Selection.prototype.checkSelect = function (checkBox) {\n var target = closest(this.checkedTarget, '.e-rowcell');\n var checkObj = checkBox;\n this.isMultiCtrlRequest = true;\n var rIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n if (this.parent.isPersistSelection && this.parent.element.querySelectorAll('.e-addedrow').length > 0) {\n ++rIndex;\n }\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\n this.moveIntoUncheckCollection(closest(target, '.e-row'));\n this.setCheckAllState();\n this.isMultiCtrlRequest = false;\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'));\n };\n Selection.prototype.moveIntoUncheckCollection = function (row) {\n if (this.parent.checkAllRows === 'Check' || this.parent.checkAllRows === 'Uncheck') {\n var rowObj = this.getRowObj(row);\n var pKey = rowObj && rowObj.data ? rowObj.data[this.primaryKey] : null;\n if (!pKey) {\n return;\n }\n if (this.chkAllCollec.indexOf(pKey) < 0) {\n this.chkAllCollec.push(pKey);\n }\n else {\n this.chkAllCollec.splice(this.chkAllCollec.indexOf(pKey), 1);\n }\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState) {\n this.parent.trigger(events.checkBoxChange, {\n checked: checkState, selectedRowIndexes: this.parent.getSelectedRowIndexes(),\n target: checkBox\n });\n if (!this.parent.isEdit) {\n this.checkedTarget = null;\n }\n };\n Selection.prototype.updateSelectedRowIndex = function (index) {\n if (this.parent.isCheckBoxSelection && this.parent.enableVirtualization && !this.parent.getDataModule().isRemote()) {\n if (this.parent.checkAllRows === 'Check') {\n this.selectedRowIndexes = [];\n for (var data = 0; data < this.getData().length; data++) {\n this.selectedRowIndexes.push(data);\n }\n }\n else if (this.parent.checkAllRows === 'Uncheck') {\n this.selectedRowIndexes = [];\n }\n else {\n if (index && this.parent.getRowByIndex(index).getAttribute('aria-selected') === 'false') {\n var selectedVal = this.selectedRowIndexes.indexOf(index);\n this.selectedRowIndexes.splice(selectedVal, 1);\n }\n }\n }\n };\n ;\n Selection.prototype.setCheckAllState = function (index, isInteraction) {\n if (this.parent.isCheckBoxSelection || this.parent.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n var checkedLen = Object.keys(this.selectedRowState).length;\n if (!this.parent.isPersistSelection) {\n checkedLen = this.selectedRecords.length;\n this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n }\n if (this.getCheckAllBox()) {\n var spanEle = this.getCheckAllBox().nextElementSibling;\n removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n if (checkedLen === this.totalRecordsCount && this.totalRecordsCount || (this.parent.enableVirtualization\n && !this.parent.allowPaging && !this.parent.getDataModule().isRemote() && checkedLen === this.getData().length)) {\n addClass([spanEle], ['e-check']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, true, true);\n }\n this.parent.checkAllRows = 'Check';\n }\n else if (checkedLen === 0 || this.getCurrentBatchRecordChanges().length === 0) {\n addClass([spanEle], ['e-uncheck']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, false, true);\n }\n this.parent.checkAllRows = 'Uncheck';\n if (checkedLen === 0 && this.getCurrentBatchRecordChanges().length === 0) {\n addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n else {\n removeClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n }\n else {\n addClass([spanEle], ['e-stop']);\n this.parent.checkAllRows = 'Intermediate';\n }\n if (this.parent.enableVirtualization && !this.parent.allowPaging && !this.parent.getDataModule().isRemote()) {\n this.updateSelectedRowIndex(index);\n }\n }\n }\n };\n Selection.prototype.clickHandler = function (e) {\n var target = e.target;\n this.isMultiCtrlRequest = e.ctrlKey || this.enableSelectMultiTouch;\n this.isMultiShiftRequest = e.shiftKey;\n this.popUpClickHandler(e);\n var chkSelect = false;\n this.preventFocus = true;\n var checkBox;\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n if (checkWrap && checkWrap.querySelectorAll('.e-checkselect,.e-checkselectall').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n chkSelect = true;\n }\n target = parentsUntil(target, 'e-rowcell');\n if ((target && target.parentElement.classList.contains('e-row') && !this.parent.selectionSettings.checkboxOnly) || chkSelect) {\n if (this.parent.isCheckBoxSelection) {\n this.isMultiCtrlRequest = true;\n }\n this.target = target;\n if (!isNullOrUndefined(checkBox)) {\n this.checkedTarget = checkBox;\n if (checkBox.classList.contains('e-checkselectall')) {\n this.checkSelectAll(checkBox);\n }\n else {\n this.checkSelect(checkBox);\n this.target = closest(target, '.e-rowcell');\n }\n }\n else {\n var rIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n if (this.parent.isPersistSelection && this.parent.element.querySelectorAll('.e-addedrow').length > 0) {\n ++rIndex;\n }\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\n if (this.parent.isCheckBoxSelection) {\n this.moveIntoUncheckCollection(closest(target, '.e-row'));\n this.setCheckAllState();\n }\n }\n if (!this.parent.isCheckBoxSelection && Browser.isDevice && !this.isSingleSel()) {\n this.showPopup(e);\n }\n }\n this.isMultiCtrlRequest = false;\n this.isMultiShiftRequest = false;\n this.preventFocus = false;\n };\n Selection.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains('e-rowcell') ||\n closest(target, '.e-gridpopup')) {\n if (target.classList.contains('e-rowselect')) {\n if (!target.classList.contains('e-spanclicked')) {\n target.classList.add('e-spanclicked');\n this.enableSelectMultiTouch = true;\n }\n else {\n target.classList.remove('e-spanclicked');\n this.enableSelectMultiTouch = false;\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n }\n }\n else {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Selection.prototype.showPopup = function (e) {\n setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-rowselect e-icons e-icon-rowselect' +\n (!this.isSingleSel() && (this.selectedRecords.length > (this.parent.getFrozenColumns() ? 2 : 1)\n || this.selectedRowCellIndexes.length > 1) ? ' e-spanclicked' : ''));\n };\n Selection.prototype.rowCellSelectionHandler = function (rowIndex, cellIndex) {\n if ((!this.isMultiCtrlRequest && !this.isMultiShiftRequest) || this.isSingleSel()) {\n if (!this.isDragged) {\n this.selectRow(rowIndex, true);\n }\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n else if (this.isMultiShiftRequest) {\n if (this.parent.isCheckBoxSelection || (!this.parent.isCheckBoxSelection && !this.target.classList.contains('e-gridchkbox'))) {\n this.selectRowsByRange(isUndefined(this.prevRowIndex) ? rowIndex : this.prevRowIndex, rowIndex);\n }\n else {\n this.addRowsToSelection([rowIndex]);\n }\n this.selectCellsByRange(isUndefined(this.prevCIdxs) ? { rowIndex: rowIndex, cellIndex: cellIndex } : this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n else {\n this.addRowsToSelection([rowIndex]);\n this.addCellsToSelection([{ rowIndex: rowIndex, cellIndex: cellIndex }]);\n }\n this.isDragged = false;\n };\n Selection.prototype.onCellFocused = function (e) {\n if (this.parent.frozenRows && e.container.isHeader && e.byKey) {\n if (e.keyArgs.action === 'upArrow') {\n if (this.parent.allowFiltering) {\n e.isJump = e.element.tagName === 'INPUT' ? true : false;\n }\n else {\n e.isJump = e.element.tagName === 'TH' ? true : false;\n }\n }\n else {\n if (e.keyArgs.action === 'downArrow') {\n var rIdx = Number(e.element.parentElement.getAttribute('aria-rowindex'));\n e.isJump = rIdx === 0 ? true : false;\n }\n else {\n if (e.keyArgs.action === 'ctrlHome') {\n e.isJump = true;\n }\n }\n }\n }\n var clear = this.parent.getFrozenColumns() ? (((e.container.isHeader && e.element.tagName !== 'TD' && e.isJump) ||\n ((e.container.isContent || e.element.tagName === 'TD') && !(e.container.isSelectable || e.element.tagName === 'TD')))\n && !(e.byKey && e.keyArgs.action === 'space')) : ((e.container.isHeader && e.isJump) ||\n (e.container.isContent && !e.container.isSelectable)) && !(e.byKey && e.keyArgs.action === 'space');\n var headerAction = (e.container.isHeader && e.element.tagName !== 'TD' && !closest(e.element, '.e-rowcell'))\n && !(e.byKey && e.keyArgs.action === 'space');\n if (!e.byKey || clear) {\n if (clear && !this.parent.isCheckBoxSelection) {\n this.clearSelection();\n }\n return;\n }\n var _a = e.container.isContent ? e.container.indexes : e.indexes, rowIndex = _a[0], cellIndex = _a[1];\n var prev = this.focus.getPrevIndexes();\n if (this.parent.frozenRows) {\n if (e.container.isHeader && (e.element.tagName === 'TD' || closest(e.element, '.e-rowcell'))) {\n var thLen = this.parent.getHeaderTable().querySelector('thead').childElementCount;\n rowIndex -= thLen;\n prev.rowIndex = prev.rowIndex ? prev.rowIndex - thLen : null;\n }\n else {\n rowIndex += this.parent.frozenRows;\n prev.rowIndex = prev.rowIndex === 0 || !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex + this.parent.frozenRows : null;\n }\n if (this.parent.getFrozenColumns()) {\n var cIdx = Number(e.element.getAttribute('aria-colindex'));\n prev.cellIndex = prev.cellIndex ? (prev.cellIndex === cellIndex ? cIdx : cIdx - 1) : null;\n cellIndex = cIdx;\n }\n }\n if (headerAction || (['ctrlPlusA', 'escape'].indexOf(e.keyArgs.action) === -1 && e.keyArgs.action !== 'space' &&\n rowIndex === prev.rowIndex && cellIndex === prev.cellIndex)) {\n return;\n }\n this.preventFocus = true;\n switch (e.keyArgs.action) {\n case 'downArrow':\n case 'upArrow':\n case 'enter':\n case 'shiftEnter':\n this.applyDownUpKey(rowIndex, cellIndex);\n break;\n case 'rightArrow':\n case 'leftArrow':\n this.applyRightLeftKey(rowIndex, cellIndex);\n break;\n case 'shiftDown':\n case 'shiftUp':\n this.shiftDownKey(rowIndex, cellIndex);\n break;\n case 'shiftLeft':\n case 'shiftRight':\n this.applyShiftLeftRightKey(rowIndex, cellIndex);\n break;\n case 'home':\n case 'end':\n cellIndex = e.keyArgs.action === 'end' ? this.getLastColIndex(rowIndex) : 0;\n this.applyHomeEndKey(rowIndex, cellIndex);\n break;\n case 'ctrlHome':\n case 'ctrlEnd':\n this.applyCtrlHomeEndKey(rowIndex, cellIndex);\n break;\n case 'escape':\n this.clearSelection();\n break;\n case 'ctrlPlusA':\n this.ctrlPlusA();\n break;\n case 'space':\n this.applySpaceSelection(e.element);\n break;\n }\n this.preventFocus = false;\n };\n /**\n * Apply ctrl + A key selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.ctrlPlusA = function () {\n if (this.isRowType() && !this.isSingleSel()) {\n this.selectRowsByRange(0, this.parent.getRows().length - 1);\n }\n if (this.isCellType() && !this.isSingleSel()) {\n this.selectCellsByRange({ rowIndex: 0, cellIndex: 0 }, { rowIndex: this.parent.getRows().length - 1, cellIndex: this.parent.getColumns().length - 1 });\n }\n };\n Selection.prototype.applySpaceSelection = function (target) {\n if (target.classList.contains('e-checkselectall')) {\n this.checkedTarget = target;\n this.checkSelectAll(this.checkedTarget);\n }\n else {\n if (target.classList.contains('e-checkselect')) {\n this.checkedTarget = target;\n this.checkSelect(this.checkedTarget);\n }\n }\n };\n Selection.prototype.applyDownUpKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n if (this.parent.isCheckBoxSelection && this.parent.checkAllRows === 'Check' && !this.selectionSettings.persistSelection) {\n this.checkSelectAllAction(false);\n this.checkedTarget = null;\n }\n if (this.isRowType()) {\n if (this.parent.frozenRows) {\n this.selectRow(rowIndex, true);\n this.applyUpDown(gObj.selectedRowIndex);\n }\n else {\n this.selectRow(rowIndex, true);\n this.applyUpDown(gObj.selectedRowIndex);\n }\n }\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n };\n Selection.prototype.applyUpDown = function (rowIndex) {\n if (rowIndex < 0) {\n return;\n }\n if (!this.target) {\n this.target = this.parent.getRows()[0].children[this.parent.groupSettings.columns.length || 0];\n }\n var cIndex = parseInt(this.target.getAttribute('aria-colindex'), 10);\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (cIndex >= frzCols) {\n this.target =\n this.contentRenderer.getMovableRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex - frzCols];\n }\n else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex];\n }\n }\n else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex];\n }\n this.addAttribute(this.target);\n };\n Selection.prototype.applyRightLeftKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n this.addAttribute(this.target);\n }\n };\n Selection.prototype.applyHomeEndKey = function (rowIndex, cellIndex) {\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n else {\n this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n }\n };\n /**\n * Apply shift+down key selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.shiftDownKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n this.isMultiShiftRequest = true;\n if (this.isRowType() && !this.isSingleSel()) {\n if (!isUndefined(this.prevRowIndex)) {\n this.selectRowsByRange(this.prevRowIndex, rowIndex);\n this.applyUpDown(rowIndex);\n }\n else {\n this.selectRow(0, true);\n }\n }\n if (this.isCellType() && !this.isSingleSel()) {\n this.selectCellsByRange(this.prevCIdxs || { rowIndex: 0, cellIndex: 0 }, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n this.isMultiShiftRequest = false;\n };\n Selection.prototype.applyShiftLeftRightKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n this.isMultiShiftRequest = true;\n this.selectCellsByRange(this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n this.isMultiShiftRequest = false;\n };\n Selection.prototype.applyCtrlHomeEndKey = function (rowIndex, cellIndex) {\n if (this.isRowType()) {\n this.selectRow(rowIndex, true);\n this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n }\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n };\n Selection.prototype.addRemoveClassesForRow = function (row, isAdd, clearAll) {\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n if (row) {\n var cells = [].slice.call(row.querySelectorAll('.e-rowcell'));\n var cell = row.querySelector('.e-detailrowcollapse') || row.querySelector('.e-detailrowexpand');\n if (cell) {\n cells.push(cell);\n }\n addRemoveActiveClasses.apply(void 0, [cells, isAdd].concat(args));\n }\n this.getRenderer().setSelection(row ? row.getAttribute('data-uid') : null, isAdd, clearAll);\n };\n Selection.prototype.isRowType = function () {\n return this.selectionSettings.mode === 'Row' || this.selectionSettings.mode === 'Both';\n };\n Selection.prototype.isCellType = function () {\n return this.selectionSettings.mode === 'Cell' || this.selectionSettings.mode === 'Both';\n };\n Selection.prototype.isSingleSel = function () {\n return this.selectionSettings.type === 'Single';\n };\n Selection.prototype.getRenderer = function () {\n if (isNullOrUndefined(this.contentRenderer)) {\n this.contentRenderer = this.factory.getRenderer(RenderType.Content);\n }\n return this.contentRenderer;\n };\n /**\n * Gets the collection of selected records.\n * @return {Object[]}\n */\n Selection.prototype.getSelectedRecords = function () {\n var selectedData = [];\n if (!this.selectionSettings.persistSelection) {\n selectedData = this.parent.getRowsObject().filter(function (row) { return row.isSelected; })\n .map(function (m) { return m.data; });\n }\n else {\n selectedData = this.persistSelectedData;\n }\n return selectedData;\n };\n Selection.prototype.addEventListener_checkbox = function () {\n this.parent.on(events.dataReady, this.dataReady, this);\n this.onDataBoundFunction = this.onDataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.onDataBoundFunction);\n this.parent.on(events.contentReady, this.checkBoxSelectionChanged, this);\n this.actionCompleteFunc = this.actionCompleteHandler.bind(this);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.on(events.click, this.clickHandler, this);\n };\n Selection.prototype.removeEventListener_checkbox = function () {\n this.parent.off(events.dataReady, this.dataReady);\n this.parent.removeEventListener(events.dataBound, this.onDataBoundFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.off(events.click, this.clickHandler);\n };\n Selection.prototype.dataReady = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.disableUI = true;\n this.clearSelection();\n this.disableUI = false;\n }\n };\n Selection.prototype.actionCompleteHandler = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n };\n return Selection;\n}());\nexport { Selection };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\n/**\n * The `Search` module is used to handle search action.\n */\nvar Search = /** @class */ (function () {\n /**\n * Constructor for Grid search module.\n * @hidden\n */\n function Search(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * Searches Grid records by given key.\n *\n * > You can customize the default search action by using [`searchSettings`](./api-grid.html#searchsettings-searchsettingsmodel).\n * @param {string} searchString - Defines the key.\n * @return {void}\n */\n Search.prototype.search = function (searchString) {\n var gObj = this.parent;\n searchString = isNullOrUndefined(searchString) ? '' : searchString;\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.search, arg1: searchString });\n return;\n }\n if (searchString !== gObj.searchSettings.key) {\n gObj.searchSettings.key = searchString.toString();\n gObj.dataBind();\n }\n else if (this.refreshSearch) {\n gObj.refresh();\n }\n };\n /**\n * @hidden\n */\n Search.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.searchComplete, this.onSearchComplete, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.actionCompleteFunc = this.onActionComplete.bind(this);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.on(events.cancelBegin, this.cancelBeginEvent, this);\n };\n /**\n * @hidden\n */\n Search.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.searchComplete, this.onSearchComplete);\n this.parent.off(events.destroy, this.destroy);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.off(events.cancelBegin, this.cancelBeginEvent);\n };\n /**\n * To destroy the print\n * @return {void}\n * @hidden\n */\n Search.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n */\n Search.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (!isNullOrUndefined(e.properties.key)) {\n this.parent.notify(events.modelChanged, {\n requestType: 'searching', type: events.actionBegin, searchString: this.parent.searchSettings.key\n });\n }\n else {\n this.parent.notify(events.modelChanged, {\n requestType: 'searching', type: events.actionBegin\n });\n }\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Search.prototype.onSearchComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n searchString: this.parent.searchSettings.key, requestType: 'searching', type: events.actionComplete\n }));\n };\n Search.prototype.onActionComplete = function (e) {\n this.refreshSearch = e.requestType !== 'searching';\n };\n Search.prototype.cancelBeginEvent = function (e) {\n if (e.requestType === 'searching') {\n this.parent.setProperties({ searchSettings: { key: '' } }, true);\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Search.prototype.getModuleName = function () {\n return 'search';\n };\n return Search;\n}());\nexport { Search };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * The `ShowHide` module is used to control column visibility.\n */\nvar ShowHide = /** @class */ (function () {\n /**\n * Constructor for the show hide module.\n * @hidden\n */\n function ShowHide(parent) {\n this.parent = parent;\n }\n /**\n * Shows a column by column name.\n * @param {string|string[]} columnName - Defines a single or collection of column names to show.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n ShowHide.prototype.show = function (columnName, showBy) {\n var keys = this.getToggleFields(columnName);\n var columns = this.getColumns(keys, showBy);\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n columns.forEach(function (value) {\n value.visible = true;\n });\n this.setVisible(columns);\n };\n /**\n * Hides a column by column name.\n * @param {string|string[]} columnName - Defines a single or collection of column names to hide.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n ShowHide.prototype.hide = function (columnName, hideBy) {\n var keys = this.getToggleFields(columnName);\n var columns = this.getColumns(keys, hideBy);\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n columns.forEach(function (value) {\n value.visible = false;\n });\n this.setVisible(columns);\n };\n ShowHide.prototype.getToggleFields = function (key) {\n var finalized = [];\n if (typeof key === 'string') {\n finalized = [key];\n }\n else {\n finalized = key;\n }\n return finalized;\n };\n ShowHide.prototype.getColumns = function (keys, getKeyBy) {\n var _this = this;\n var columns = iterateArrayOrObject(keys, function (key, index) {\n return iterateArrayOrObject(_this.parent.getColumns(), function (item, index) {\n if (item[getKeyBy] === key) {\n return item;\n }\n return undefined;\n })[0];\n });\n return columns;\n };\n /**\n * Shows or hides columns by given column collection.\n * @private\n * @param {Column[]} columns - Specifies the columns.\n * @return {void}\n */\n ShowHide.prototype.setVisible = function (columns) {\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\n instance: this, handler: this.setVisible,\n arg1: columns\n });\n return;\n }\n columns = isNullOrUndefined(columns) ? this.parent.getColumns() : columns;\n if (this.parent.allowSelection && this.parent.getSelectedRecords().length) {\n this.parent.clearSelection();\n }\n this.parent.notify(events.columnVisibilityChanged, columns);\n if (this.parent.columnQueryMode !== 'All') {\n this.parent.refresh();\n }\n };\n return ShowHide;\n}());\nexport { ShowHide };\n","import { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getScrollBarWidth, getUpdateUsingRaf } from '../base/util';\nimport { scroll, contentReady, uiUpdate, onEmpty, headerRefreshed } from '../base/constant';\nimport { ColumnWidthService } from '../services/width-controller';\n/**\n * The `Scroll` module is used to handle scrolling behaviour.\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the Grid scrolling.\n * @hidden\n */\n function Scroll(parent) {\n this.lastScrollTop = 0;\n //To maintain scroll state on grid actions.\n this.previousValues = { top: 0, left: 0 };\n this.oneTimeReady = true;\n this.parent = parent;\n this.widthService = new ColumnWidthService(parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * @hidden\n */\n Scroll.prototype.setWidth = function () {\n this.parent.element.style.width = formatUnit(this.parent.width);\n if (this.parent.toolbarModule && this.parent.toolbarModule.toolbar &&\n this.parent.toolbarModule.toolbar.element) {\n this.parent.toolbarModule.toolbar.refreshOverflow();\n }\n };\n /**\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n var mHdrHeight = 0;\n var content = this.parent.getContent().firstChild;\n if (this.parent.frozenRows && this.parent.height !== 'auto') {\n mHdrHeight =\n this.parent.getHeaderContent().querySelector('tbody').offsetHeight;\n content.style.height = formatUnit(this.parent.height - mHdrHeight);\n }\n else {\n content.style.height = formatUnit(this.parent.height);\n }\n this.ensureOverflow(content);\n };\n /**\n * @hidden\n */\n Scroll.prototype.setPadding = function () {\n var content = this.parent.getHeaderContent();\n var scrollWidth = Scroll.getScrollBarWidth() - this.getThreshold();\n var cssProps = this.getCssProperties();\n content.firstChild.style[cssProps.border] = scrollWidth > 0 ? '1px' : '0px';\n content.style[cssProps.padding] = scrollWidth > 0 ? scrollWidth + 'px' : '0px';\n };\n /**\n * @hidden\n */\n Scroll.prototype.removePadding = function (rtl) {\n var cssProps = this.getCssProperties(rtl);\n this.parent.getHeaderContent().firstChild.style[cssProps.border] = '';\n this.parent.getHeaderContent().firstChild.parentElement.style[cssProps.padding] = '';\n };\n /**\n * Refresh makes the Grid adoptable with the height of parent container.\n *\n * > The [`height`](./api-grid.html#height) must be set to 100%.\n * @return\n */\n Scroll.prototype.refresh = function () {\n if (this.parent.height !== '100%') {\n return;\n }\n var content = this.parent.getContent();\n this.parent.element.style.height = '100%';\n var height = this.widthService.getSiblingsHeight(content);\n content.style.height = 'calc(100% - ' + height + 'px)'; //Set the height to the '.e-gridcontent';\n };\n Scroll.prototype.getThreshold = function () {\n /* Some browsers places the scroller outside the content,\n * hence the padding should be adjusted.*/\n var appName = Browser.info.name;\n if (appName === 'mozilla') {\n return 0.5;\n }\n return 1;\n };\n /**\n * @hidden\n */\n Scroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(onEmpty, this.wireEvents, this);\n this.parent.on(contentReady, this.wireEvents, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n this.parent.on(headerRefreshed, this.setScrollLeft, this);\n };\n /**\n * @hidden\n */\n Scroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(onEmpty, this.wireEvents);\n this.parent.off(contentReady, this.wireEvents);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n this.parent.off(headerRefreshed, this.setScrollLeft);\n };\n Scroll.prototype.setScrollLeft = function () {\n if (this.parent.frozenColumns) {\n this.parent.headerModule.getMovableHeader().scrollLeft = this.previousValues.left;\n }\n };\n Scroll.prototype.onContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n var isHeader = element.classList.contains('e-headercontent');\n return function (e) {\n if (_this.content.querySelector('tbody') === null || _this.parent.isPreventScrollEvent) {\n return;\n }\n var target = e.target;\n var left = target.scrollLeft;\n var sLimit = target.scrollWidth;\n var isFooter = target.classList.contains('e-summarycontent');\n if (_this.previousValues.left === left) {\n _this.previousValues.top = !isHeader ? _this.previousValues.top : target.scrollTop;\n return;\n }\n element.scrollLeft = left;\n if (isFooter) {\n _this.header.scrollLeft = left;\n }\n _this.previousValues.left = left;\n _this.parent.notify(scroll, { left: left });\n };\n };\n Scroll.prototype.onFreezeContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var target = e.target;\n var top = target.scrollTop;\n if (_this.previousValues.top === top) {\n return;\n }\n element.scrollTop = top;\n _this.previousValues.top = top;\n if (_this.parent.isDestroyed) {\n return;\n }\n };\n };\n Scroll.prototype.onWheelScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var top = element.scrollTop + (e.deltaMode === 1 ? e.deltaY * 30 : e.deltaY);\n if (_this.previousValues.top === top) {\n return;\n }\n e.preventDefault();\n _this.parent.getContent().querySelector('.e-frozencontent').scrollTop = top;\n element.scrollTop = top;\n _this.previousValues.top = top;\n };\n };\n Scroll.prototype.onTouchScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n var cont;\n var mHdr;\n var pageXY = _this.getPointXY(e);\n var top = element.scrollTop + (_this.pageXY.y - pageXY.y);\n var left = element.scrollLeft + (_this.pageXY.x - pageXY.x);\n if (_this.parent.getHeaderContent().contains(e.target)) {\n mHdr = _this.parent.getFrozenColumns() ?\n _this.parent.getHeaderContent().querySelector('.e-movableheader') : _this.parent.getHeaderContent().firstChild;\n if (_this.previousValues.left === left || (left < 0 || (mHdr.scrollWidth - mHdr.clientWidth) < left)) {\n return;\n }\n e.preventDefault();\n mHdr.scrollLeft = left;\n element.scrollLeft = left;\n _this.pageXY.x = pageXY.x;\n _this.previousValues.left = left;\n }\n else {\n cont = _this.parent.getContent().querySelector('.e-frozencontent');\n if (_this.previousValues.top === top || (top < 0 || (cont.scrollHeight - cont.clientHeight) < top)) {\n return;\n }\n e.preventDefault();\n cont.scrollTop = top;\n element.scrollTop = top;\n _this.pageXY.y = pageXY.y;\n _this.previousValues.top = top;\n }\n };\n };\n Scroll.prototype.setPageXY = function () {\n var _this = this;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n _this.pageXY = _this.getPointXY(e);\n };\n };\n Scroll.prototype.getPointXY = function (e) {\n var pageXY = { x: 0, y: 0 };\n if (e.touches && e.touches.length) {\n pageXY.x = e.touches[0].pageX;\n pageXY.y = e.touches[0].pageY;\n }\n else {\n pageXY.x = e.pageX;\n pageXY.y = e.pageY;\n }\n return pageXY;\n };\n Scroll.prototype.wireEvents = function () {\n var _this = this;\n if (this.oneTimeReady) {\n var frzCols = this.parent.getFrozenColumns();\n this.content = this.parent.getContent().firstChild;\n this.header = this.parent.getHeaderContent().firstChild;\n var mCont = this.content.querySelector('.e-movablecontent');\n var fCont = this.content.querySelector('.e-frozencontent');\n var mHdr = this.header.querySelector('.e-movableheader');\n if (this.parent.frozenRows) {\n EventHandler.add(frzCols ? mHdr : this.header, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(frzCols ? mHdr : this.header, 'touchmove pointermove', this.onTouchScroll(frzCols ? mCont : this.content), this);\n }\n if (frzCols) {\n EventHandler.add(mCont, 'scroll', this.onContentScroll(mHdr), this);\n EventHandler.add(mCont, 'scroll', this.onFreezeContentScroll(fCont), this);\n EventHandler.add(fCont, 'scroll', this.onFreezeContentScroll(mCont), this);\n EventHandler.add(mHdr, 'scroll', this.onContentScroll(mCont), this);\n EventHandler.add(fCont, 'wheel', this.onWheelScroll(mCont), this);\n EventHandler.add(fCont, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(fCont, 'touchmove pointermove', this.onTouchScroll(mCont), this);\n }\n else {\n EventHandler.add(this.content, 'scroll', this.onContentScroll(this.header), this);\n EventHandler.add(this.header, 'scroll', this.onContentScroll(this.content), this);\n }\n if (this.parent.aggregates.length) {\n EventHandler.add(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll(this.content), this);\n }\n this.refresh();\n this.oneTimeReady = false;\n }\n var table = this.parent.getContentTable();\n var sLeft;\n var sHeight;\n var clientHeight;\n getUpdateUsingRaf(function () {\n sLeft = _this.header.scrollLeft;\n sHeight = table.scrollHeight;\n clientHeight = _this.parent.getContent().clientHeight;\n }, function () {\n if (!_this.parent.enableVirtualization) {\n if (sHeight < clientHeight) {\n addClass(table.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n if (_this.parent.getFrozenColumns()) {\n addClass(_this.parent.getContent().querySelector('.e-movablecontent').querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n }\n }\n if ((_this.parent.frozenRows > 0 || _this.parent.frozenColumns > 0) && _this.header.querySelector('.e-movableheader')) {\n _this.header.querySelector('.e-movableheader').scrollLeft = _this.previousValues.left;\n }\n else {\n _this.header.scrollLeft = _this.previousValues.left;\n }\n _this.content.scrollLeft = _this.previousValues.left;\n _this.content.scrollTop = _this.previousValues.top;\n }\n if (!_this.parent.enableColumnVirtualization) {\n _this.content.scrollLeft = sLeft;\n }\n if (_this.parent.frozenColumns && _this.header.querySelector('.e-movableheader')) {\n _this.header.querySelector('.e-movableheader').scrollLeft =\n _this.content.querySelector('.e-movablecontent').scrollLeft;\n }\n });\n this.parent.isPreventScrollEvent = false;\n };\n /**\n * @hidden\n */\n Scroll.prototype.getCssProperties = function (rtl) {\n var css = {};\n var enableRtl = isNullOrUndefined(rtl) ? this.parent.enableRtl : rtl;\n css.border = enableRtl ? 'borderLeftWidth' : 'borderRightWidth';\n css.padding = enableRtl ? 'paddingLeft' : 'paddingRight';\n return css;\n };\n Scroll.prototype.ensureOverflow = function (content) {\n if (this.parent.getFrozenColumns()) {\n content.querySelector('.e-movablecontent').style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\n else {\n content.style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\n };\n Scroll.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n this.setPadding();\n this.oneTimeReady = true;\n if (this.parent.height === 'auto') {\n this.removePadding();\n }\n this.wireEvents();\n this.setHeight();\n this.setWidth();\n };\n /**\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.removeEventListener();\n //Remove padding\n this.removePadding();\n removeClass([this.parent.getHeaderContent().firstChild], 'e-headercontent');\n removeClass([this.parent.getContent().firstChild], 'e-content');\n //Remove height\n this.parent.getContent().firstChild.style.height = '';\n //Remove width\n this.parent.element.style.width = '';\n //Remove Dom event\n EventHandler.remove(this.parent.getContent().firstChild, 'scroll', this.onContentScroll);\n };\n /**\n * Function to get the scrollbar width of the browser.\n * @return {number}\n * @hidden\n */\n Scroll.getScrollBarWidth = function () {\n return getScrollBarWidth();\n };\n return Scroll;\n}());\nexport { Scroll };\n","import { print as printWindow, createElement, detach } from '@syncfusion/ej2-base';\nimport { removeElement, getActualProperties, getActualPropFromColl } from '../base/util';\nimport { Grid } from '../base/grid';\nimport * as events from '../base/constant';\n/**\n *\n * The `Print` module is used to handle print action.\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for the Grid print module\n * @hidden\n */\n function Print(parent, scrollModule) {\n this.isAsyncPrint = false;\n this.printing = 'isPrinting';\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.contentReady.bind(this));\n this.parent.addEventListener(events.actionBegin, this.actionBegin.bind(this));\n this.parent.on(events.onEmpty, this.onEmpty.bind(this));\n this.scrollModule = scrollModule;\n }\n /**\n * By default, prints all the Grid pages and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./api-grid.html#printmode-string).\n * @return {void}\n */\n Print.prototype.print = function () {\n this.renderPrintGrid();\n this.printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWind.moveTo(0, 0);\n this.printWind.resizeTo(screen.availWidth, screen.availHeight);\n };\n Print.prototype.onEmpty = function () {\n if (this.isPrintGrid()) {\n this.contentReady();\n }\n };\n Print.prototype.actionBegin = function () {\n if (this.isPrintGrid()) {\n this.isAsyncPrint = true;\n }\n };\n Print.prototype.renderPrintGrid = function () {\n var gObj = this.parent;\n var elem = 'element';\n var printGridModel = {};\n var element = createElement('div', {\n id: this.parent.element.id + '_print', className: gObj.element.className + ' e-print-grid'\n });\n document.body.appendChild(element);\n for (var _i = 0, _a = Print.printGridProp; _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'columns') {\n printGridModel[key] = getActualPropFromColl(gObj[key]);\n }\n else if (key === 'allowPaging') {\n printGridModel[key] = this.parent.printMode === 'CurrentPage';\n }\n else {\n printGridModel[key] = getActualProperties(gObj[key]);\n }\n }\n var printGrid = new Grid(printGridModel);\n printGrid.appendTo(element);\n printGrid.registeredTemplate = this.parent.registeredTemplate;\n printGrid[this.printing] = true;\n printGrid.trigger = gObj.trigger;\n };\n Print.prototype.contentReady = function () {\n if (this.isPrintGrid()) {\n var gObj = this.parent;\n if (this.isAsyncPrint) {\n this.printGrid();\n return;\n }\n var args = {\n requestType: 'print',\n element: gObj.element,\n selectedRows: gObj.getContentTable().querySelectorAll('tr[aria-selected=\"true\"]'),\n cancel: false\n };\n if (!this.isAsyncPrint) {\n gObj.trigger(events.beforePrint, args);\n }\n if (args.cancel) {\n detach(gObj.element);\n return;\n }\n else if (!this.isAsyncPrint) {\n this.printGrid();\n }\n }\n };\n Print.prototype.printGrid = function () {\n var gObj = this.parent;\n // Pager eleement process based on primt mode\n if (gObj.allowPaging && gObj.printMode === 'CurrentPage') {\n gObj.element.querySelector('.e-gridpager').style.display = 'none';\n }\n // Height adjustment on print grid\n if (gObj.height !== 'auto') { // if scroller enabled\n var cssProps = this.scrollModule.getCssProperties();\n var contentDiv = gObj.element.querySelector('.e-content');\n var headerDiv = gObj.element.querySelector('.e-gridheader');\n contentDiv.style.height = 'auto';\n contentDiv.style.overflowY = 'auto';\n headerDiv.style[cssProps.padding] = '';\n headerDiv.firstElementChild.style[cssProps.border] = '';\n }\n // Grid alignment adjustment on grouping\n if (gObj.allowGrouping) {\n if (!gObj.groupSettings.columns.length) {\n gObj.element.querySelector('.e-groupdroparea').style.display = 'none';\n }\n else {\n this.removeColGroup(gObj.groupSettings.columns.length, gObj.element);\n removeElement(gObj.element, '.e-grouptopleftcell');\n removeElement(gObj.element, '.e-recordpluscollapse');\n removeElement(gObj.element, '.e-indentcell');\n removeElement(gObj.element, '.e-recordplusexpand');\n }\n }\n // hide horizontal scroll\n gObj.element.querySelector('.e-content').style.overflowX = 'hidden';\n //hide filter bar in print grid\n if (gObj.allowFiltering && gObj.filterSettings.type === 'FilterBar') {\n gObj.element.querySelector('.e-filterbar').style.display = 'none';\n }\n // Hide the waiting popup\n var waitingPop = gObj.element.querySelectorAll('.e-spin-show');\n if (waitingPop.length > 0) {\n waitingPop[0].classList.add('e-spin-hide');\n waitingPop[0].classList.remove('e-spin-show');\n }\n if (gObj[this.printing]) {\n detach(gObj.element);\n }\n gObj.element.classList.remove('e-print-grid');\n this.printWind = printWindow(gObj.element, this.printWind);\n gObj[this.printing] = false;\n var args = {\n element: gObj.element\n };\n gObj.trigger(events.printComplete, args);\n };\n Print.prototype.removeColGroup = function (depth, element) {\n var groupCaption = element.querySelectorAll('.e-groupcaption');\n var colSpan = groupCaption[depth - 1].getAttribute('colspan');\n for (var i = 0; i < groupCaption.length; i++) {\n groupCaption[i].setAttribute('colspan', colSpan);\n }\n var colGroups = element.querySelectorAll('colgroup');\n for (var i = 0; i < colGroups.length; i++) {\n for (var j = 0; j < depth; j++) {\n colGroups[i].childNodes[j].style.display = 'none';\n }\n }\n };\n Print.prototype.isPrintGrid = function () {\n return this.parent.element.id.indexOf('_print') > 0 && this.parent[this.printing];\n };\n /**\n * To destroy the print\n * @return {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.contentReady, this.contentReady.bind(this));\n this.parent.removeEventListener(events.actionBegin, this.actionBegin.bind(this));\n this.parent.off(events.onEmpty, this.onEmpty.bind(this));\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n Print.printGridProp = [\n 'aggregates', 'allowGrouping', 'allowFiltering', 'allowMultiSorting', 'allowReordering', 'allowSorting',\n 'allowTextWrap', 'childGrid', 'columns', 'currentViewData', 'dataSource', 'detailTemplate', 'enableAltRow',\n 'enableColumnVirtualization', 'filterSettings', 'gridLines',\n 'groupSettings', 'height', 'locale', 'pageSettings', 'printMode', 'query', 'queryString',\n 'rowHeight', 'rowTemplate', 'sortSettings', 'textWrapSettings', 'allowPaging',\n events.beforePrint, events.printComplete\n ];\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { compile } from '@syncfusion/ej2-base';\nimport { getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { Property, Collection, ChildProperty } from '@syncfusion/ej2-base';\nimport { ValueFormatter } from '../services/value-formatter';\n/**\n * Configures the Grid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.templateFn = {};\n return _this;\n }\n /**\n * @hidden\n */\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n var valueFormatter = new ValueFormatter(cultureName);\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = valueFormatter.getFormatFunction(this.format);\n }\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n if (this.groupFooterTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.GroupSummary)] = { fn: compile(this.groupFooterTemplate, helper),\n property: 'groupFooterTemplate' };\n }\n if (this.groupCaptionTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = { fn: compile(this.groupCaptionTemplate, helper),\n property: 'groupCaptionTemplate' };\n }\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupFooterTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupCaptionTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\n/**\n * Configures the aggregate rows.\n */\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","import { Browser, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n */\nvar Clipboard = /** @class */ (function () {\n /**\n * Constructor for the Grid clipboard module\n * @hidden\n */\n function Clipboard(parent) {\n this.copyContent = '';\n this.isSelect = false;\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n Clipboard.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.keyPressed, this.keyDownHandler, this);\n };\n /**\n * @hidden\n */\n Clipboard.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.keyPressed, this.keyDownHandler);\n };\n Clipboard.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n this.clipBoardTextArea = this.parent.createElement('textarea', {\n className: 'e-clipboard',\n styles: 'opacity: 0',\n attrs: { readonly: 'true', tabindex: '-1', 'aria-label': 'clipboard' }\n });\n this.parent.element.appendChild(this.clipBoardTextArea);\n };\n Clipboard.prototype.keyDownHandler = function (e) {\n if (e.action === 'ctrlPlusC') {\n this.copy();\n }\n else if (e.action === 'ctrlShiftPlusH') {\n this.copy(true);\n }\n };\n Clipboard.prototype.setCopyData = function (withHeader) {\n if (window.getSelection().toString() === '') {\n var isFrozen = this.parent.getFrozenColumns();\n this.clipBoardTextArea.value = this.copyContent = '';\n var mRows = void 0;\n var rows = this.parent.getRows();\n if (isFrozen) {\n mRows = this.parent.getMovableDataRows();\n }\n if (this.parent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.parent.getSelectedRowIndexes().sort(function (a, b) { return a - b; });\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.parent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.parent.getVisibleColumns()[i].headerText;\n }\n this.getCopyData(headerTextArray, false, '\\t', withHeader);\n this.copyContent += '\\n';\n }\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.copyContent += '\\n';\n }\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[selectedIndexes[i]].querySelectorAll('.e-rowcell')));\n }\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n }\n else {\n var obj = this.checkBoxSelection();\n if (obj.status) {\n if (withHeader) {\n var headers = [];\n for (var i = 0; i < obj.colIndexes.length; i++) {\n headers.push(this.parent.getColumnHeaderByIndex(obj.colIndexes[i]));\n }\n this.getCopyData(headers, false, '\\t', withHeader);\n this.copyContent += '\\n';\n }\n for (var i = 0; i < obj.rowIndexes.length; i++) {\n if (i > 0) {\n this.copyContent += '\\n';\n }\n var cells = [].slice.call(rows[obj.rowIndexes[i]].\n querySelectorAll('.e-cellselectionbackground'));\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[obj.rowIndexes[i]].querySelectorAll('.e-cellselectionbackground')));\n }\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n }\n else {\n this.getCopyData([].slice.call(this.parent.element.querySelectorAll('.e-cellselectionbackground')), true, '\\n', withHeader);\n }\n }\n var args = {\n data: this.copyContent,\n cancel: false,\n };\n this.parent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this.copyContent = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this.isSelect = true;\n }\n };\n Clipboard.prototype.getCopyData = function (cells, isCell, splitKey, withHeader) {\n var isElement = typeof cells[0] !== 'string';\n for (var j = 0; j < cells.length; j++) {\n if (withHeader && isCell) {\n this.copyContent += this.parent.getColumns()[parseInt(cells[j].getAttribute('aria-colindex'), 10)].headerText + '\\n';\n }\n if (isElement) {\n if (!cells[j].classList.contains('e-hide')) {\n this.copyContent += cells[j].textContent;\n }\n }\n else {\n this.copyContent += cells[j];\n }\n if (j < cells.length - 1) {\n this.copyContent += splitKey;\n }\n }\n };\n /**\n * Copy selected rows or cells data into clipboard.\n * @param {boolean} withHeader - Specifies whether the column header data need to be copied or not.\n */\n Clipboard.prototype.copy = function (withHeader) {\n if (document.queryCommandSupported('copy')) {\n this.setCopyData(withHeader);\n document.execCommand('copy');\n this.clipBoardTextArea.blur();\n }\n if (this.isSelect) {\n window.getSelection().removeAllRanges();\n this.isSelect = false;\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Clipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n * @return {void}\n * @hidden\n */\n Clipboard.prototype.destroy = function () {\n this.removeEventListener();\n if (this.clipBoardTextArea) {\n remove(this.clipBoardTextArea);\n }\n };\n Clipboard.prototype.checkBoxSelection = function () {\n var gridObj = this.parent;\n var obj = { status: false };\n if (gridObj.selectionSettings.mode === 'Cell') {\n var rowCellIndxes = gridObj.getSelectedRowCellIndexes();\n var str = void 0;\n var isBox = void 0;\n var rowIndexes = [];\n var i = void 0;\n for (i = 0; i < rowCellIndxes.length; i++) {\n if (rowCellIndxes[i].cellIndexes.length) {\n rowIndexes.push(rowCellIndxes[i].rowIndex);\n }\n if (rowCellIndxes[i].cellIndexes.length) {\n if (!str) {\n str = JSON.stringify(rowCellIndxes[i].cellIndexes.sort());\n }\n if (str !== JSON.stringify(rowCellIndxes[i].cellIndexes.sort())) {\n break;\n }\n }\n }\n rowIndexes.sort();\n if (i === rowCellIndxes.length && rowIndexes[rowIndexes.length - 1] - rowIndexes[0] === rowIndexes.length - 1) {\n obj = { status: true, rowIndexes: rowIndexes, colIndexes: rowCellIndxes[0].cellIndexes };\n }\n }\n return obj;\n };\n return Clipboard;\n}());\nexport { Clipboard };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, ChildProperty, Browser, closest, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, append, classList } from '@syncfusion/ej2-base';\nimport { Property, Collection, Complex, Event, NotifyPropertyChanges, L10n } from '@syncfusion/ej2-base';\nimport { EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner, Tooltip } from '@syncfusion/ej2-popups';\nimport { iterateArrayOrObject, prepareColumns, parentsUntil, wrap, templateCompiler, refreshForeignData, getRowHeight } from './util';\nimport * as events from '../base/constant';\nimport { Render } from '../renderer/render';\nimport { RenderType } from './enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { CellRendererFactory } from '../services/cell-render-factory';\nimport { ServiceLocator } from '../services/service-locator';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { ColumnWidthService } from '../services/width-controller';\nimport { AriaService } from '../services/aria-service';\nimport { FocusStrategy } from '../services/focus-strategy';\nimport { PageSettings } from '../models/page-settings';\nimport { Selection } from '../actions/selection';\nimport { Search } from '../actions/search';\nimport { ShowHide } from '../actions/show-hide';\nimport { Scroll } from '../actions/scroll';\nimport { Print } from '../actions/print';\nimport { AggregateRow } from '../models/aggregate';\nimport { Clipboard } from '../actions/clipboard';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of Grid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n/**\n * Represents the predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the Grid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n/**\n * Configures the selection behavior of the Grid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * Configures the search behavior of the Grid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('')\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreAccent\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n/**\n * Configures the row drop settings of the Grid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n/**\n * Configures the text wrap settings of the Grid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n/**\n * Configures the group behavior of the Grid.\n */\nvar GroupSettings = /** @class */ (function (_super) {\n __extends(GroupSettings, _super);\n function GroupSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showDropArea\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showToggleButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showGroupedColumn\", void 0);\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showUngroupButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"disablePageWiseAggregates\", void 0);\n __decorate([\n Property([])\n ], GroupSettings.prototype, \"columns\", void 0);\n __decorate([\n Property()\n ], GroupSettings.prototype, \"captionTemplate\", void 0);\n return GroupSettings;\n}(ChildProperty));\nexport { GroupSettings };\n/**\n * Configures the edit behavior of the Grid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Normal')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n/**\n * Represents the Grid component.\n * ```html\n *
    \n * \n * ```\n */\nvar Grid = /** @class */ (function (_super) {\n __extends(Grid, _super);\n /**\n * Constructor for creating the component\n * @hidden\n */\n function Grid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isPreventScrollEvent = false;\n _this.inViewIndexes = [];\n _this.freezeRefresh = Component.prototype.refresh;\n /**\n * Gets the currently visible records of the Grid.\n */\n _this.currentViewData = [];\n /** @hidden */\n _this.prevPageMoving = false;\n _this.needsID = true;\n setValue('mergePersistData', _this.mergePersistGridData, _this);\n return _this;\n }\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n * @hidden\n */\n Grid.prototype.getPersistData = function () {\n var _this = this;\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'groupSettings', 'columns', 'searchSettings', 'selectedRowIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent'],\n groupSettings: ['showDropArea', 'showToggleButton', 'showGroupedColumn', 'showUngroupButton',\n 'disablePageWiseAggregates', 'hideCaptionCount'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n keyEntity.forEach(function (value) {\n var currentObject = _this[value];\n for (var _i = 0, _a = ignoreOnPersist[value]; _i < _a.length; _i++) {\n var val = _a[_i];\n delete currentObject[val];\n }\n });\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n Grid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n var _this = this;\n columns.forEach(function (column) {\n if (column.columns) {\n _this.ignoreInColumn(ignoreOnColumn, column);\n _this.ignoreInArrays(ignoreOnColumn, column.columns);\n }\n else {\n _this.ignoreInColumn(ignoreOnColumn, column);\n }\n });\n };\n Grid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n ignoreOnColumn.forEach(function (val) {\n delete column[val];\n column.filter = {};\n });\n };\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n Grid.prototype.requiredModules = function () {\n var modules = [];\n if (this.isDestroyed) {\n return modules;\n }\n if (this.allowFiltering) {\n modules.push({\n member: 'filter',\n args: [this, this.filterSettings, this.serviceLocator]\n });\n }\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport',\n args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this, this.sortSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this, this.selectionSettings, this.serviceLocator]\n });\n }\n modules.push({\n member: 'resize',\n args: [this]\n });\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.allowGrouping) {\n modules.push({\n member: 'group',\n args: [this, this.groupSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.aggregates.length) {\n modules.push({ member: 'aggregate', args: [this, this.serviceLocator] });\n }\n if (this.isDetail()) {\n modules.push({\n member: 'detailRow',\n args: [this, this.serviceLocator]\n });\n }\n if (this.toolbar || this.toolbarTemplate) {\n modules.push({\n member: 'toolbar',\n args: [this, this.serviceLocator]\n });\n }\n if (this.enableVirtualization || this.enableColumnVirtualization) {\n modules.push({\n member: 'virtualscroll',\n args: [this, this.serviceLocator]\n });\n }\n if (this.getFrozenColumns() || this.frozenRows) {\n modules.push({ member: 'freeze', args: [this, this.serviceLocator] });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this, this.serviceLocator]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this, this.serviceLocator]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n Grid.prototype.extendRequiredModules = function (modules) {\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'columnChooser',\n args: [this, this.serviceLocator]\n });\n }\n if (this.isForeignKeyEnabled(this.columns)) {\n modules.push({ member: 'foreignKey', args: [this, this.serviceLocator] });\n }\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n Grid.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator;\n this.initProperties();\n this.initializeServices();\n };\n Grid.prototype.initProperties = function () {\n /* tslint:disable */\n this.isInitial = true;\n this.sortedColumns = [];\n this.inViewIndexes = [];\n this.mediaCol = [];\n this.isInitialLoad = false;\n this.mergeCells = {};\n this.isEdit = false;\n this.checkAllRows = 'None';\n this.isCheckBoxSelection = false;\n this.isPersistSelection = false;\n this.freezeRefresh = Component.prototype.refresh;\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith'\n };\n this.defaultLocale = {\n EmptyRecord: 'No records to display',\n True: 'true',\n False: 'false',\n InvalidFilterMessage: 'Invalid Filter Data',\n GroupDropArea: 'Drag a column header here to group its column',\n UnGroup: 'Click here to ungroup',\n GroupDisable: 'Grouping is disabled for this column',\n FilterbarTitle: '\\'s filter bar cell',\n EmptyDataSourceError: 'DataSource must not be empty at initial load since columns are generated from dataSource in AutoGenerate Column Grid',\n // Toolbar Items\n Add: 'Add',\n Edit: 'Edit',\n Cancel: 'Cancel',\n Update: 'Update',\n Delete: 'Delete',\n Print: 'Print',\n Pdfexport: 'PDF Export',\n Excelexport: 'Excel Export',\n Wordexport: 'Word Export',\n Csvexport: 'CSV Export',\n Search: 'Search',\n Columnchooser: 'Columns',\n Save: 'Save',\n Item: 'item',\n Items: 'items',\n EditOperationAlert: 'No records selected for edit operation',\n DeleteOperationAlert: 'No records selected for delete operation',\n SaveButton: 'Save',\n OKButton: 'OK',\n CancelButton: 'Cancel',\n EditFormTitle: 'Details of ',\n AddFormTitle: 'Add New Record',\n BatchSaveConfirm: 'Are you sure you want to save changes?',\n BatchSaveLostChanges: 'Unsaved changes will be lost. Are you sure you want to continue?',\n ConfirmDelete: 'Are you sure you want to Delete Record?',\n CancelEdit: 'Are you sure you want to Cancel the changes?',\n ChooseColumns: 'Choose Column',\n SearchColumns: 'search columns',\n Matchs: 'No Matches Found',\n FilterButton: 'Filter',\n ClearButton: 'Clear',\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n ChooseDate: 'Choose a Date',\n EnterValue: 'Enter the value',\n Copy: 'Copy',\n Group: 'Group by this column',\n Ungroup: 'Ungroup by this column',\n autoFitAll: 'Auto Fit all columns',\n autoFit: 'Auto Fit this column',\n Export: 'Export',\n FirstPage: 'First Page',\n LastPage: 'Last Page',\n PreviousPage: 'Previous Page',\n NextPage: 'Next Page',\n SortAscending: 'Sort Ascending',\n SortDescending: 'Sort Descending',\n EditRecord: 'Edit Record',\n DeleteRecord: 'Delete Record',\n FilterMenu: 'Filter',\n SelectAll: 'Select All',\n Blanks: 'Blanks',\n FilterTrue: 'True',\n FilterFalse: 'False',\n NoResult: 'No Matches Found',\n ClearFilter: 'Clear Filter',\n NumberFilter: 'Number Filters',\n TextFilter: 'Text Filters',\n DateFilter: 'Date Filters',\n DateTimeFilter: 'DateTime Filters',\n MatchCase: 'Match Case',\n Between: 'Between',\n CustomFilter: 'Custom Filter',\n CustomFilterPlaceHolder: 'Enter the value',\n CustomFilterDatePlaceHolder: 'Choose a date',\n AND: 'AND',\n OR: 'OR',\n ShowRowsWhere: 'Show rows where:'\n };\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftRight: 'shift+rightarrow',\n shiftLeft: 'shift+leftarrow',\n home: 'home',\n end: 'end',\n escape: 'escape',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n ctrlAltPageUp: 'ctrl+alt+pageup',\n ctrlAltPageDown: 'ctrl+alt+pagedown',\n altPageUp: 'alt+pageup',\n altPageDown: 'alt+pagedown',\n altDownArrow: 'alt+downarrow',\n altUpArrow: 'alt+uparrow',\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlPlusA: 'ctrl+A',\n ctrlPlusP: 'ctrl+P',\n insert: 'insert',\n delete: 'delete',\n f2: 'f2',\n enter: 'enter',\n ctrlEnter: 'ctrl+enter',\n shiftEnter: 'shift+enter',\n tab: 'tab',\n shiftTab: 'shift+tab',\n space: 'space',\n ctrlPlusC: 'ctrl+C',\n ctrlShiftPlusH: 'ctrl+shift+H'\n };\n /* tslint:enable */\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n */\n Grid.prototype.render = function () {\n this.ariaService.setOptions(this.element, { role: 'grid' });\n createSpinner({ target: this.element }, this.createElement);\n this.renderModule = new Render(this, this.serviceLocator);\n this.getMediaColumns();\n this.searchModule = new Search(this);\n this.scrollModule = new Scroll(this);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n prepareColumns(this.columns, this.enableColumnVirtualization);\n this.getColumns();\n this.processModel();\n this.gridRender();\n this.wireEvents();\n this.addListener();\n this.updateDefaultCursor();\n this.updateStackedFilter();\n this.showSpinner();\n this.notify(events.initialEnd, {});\n };\n /**\n * By default, grid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n */\n Grid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually showed spinner needs to hide by `hideSpinnner`.\n */\n Grid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n Grid.prototype.updateStackedFilter = function () {\n if (this.allowFiltering && this.filterSettings.type === 'FilterBar' &&\n this.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.getHeaderContent().classList.add('e-stackedfilter');\n }\n else {\n this.getHeaderContent().classList.remove('e-stackedfilter');\n }\n };\n Grid.prototype.getMediaColumns = function () {\n if (!this.enableColumnVirtualization) {\n var gcol = this.getColumns();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n if (!isNullOrUndefined(gcol)) {\n for (var index = 0; index < gcol.length; index++) {\n if (!isNullOrUndefined(gcol[index].hideAtMedia)) {\n this.mediaCol.push(gcol[index]);\n var media = window.matchMedia(gcol[index].hideAtMedia);\n this.mediaQueryUpdate(index, media);\n media.addListener(this.mediaQueryUpdate.bind(this, index));\n }\n }\n }\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.mediaQueryUpdate = function (columnIndex, e) {\n var col = this.getColumns()[columnIndex];\n col.visible = e.matches;\n if (this.isInitialLoad) {\n if (col.visible) {\n this.showHider.show(col.headerText, 'headerText');\n }\n else {\n this.showHider.hide(col.headerText, 'headerText');\n }\n }\n };\n Grid.prototype.refreshMediaCol = function () {\n this.isInitialLoad = true;\n if (this.aggregates.length && this.element.scrollHeight > this.height) {\n var footerContent = this.element.querySelector('.e-gridfooter');\n addClass([footerContent], ['e-footerpadding']);\n }\n var checkboxColumn = this.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length && this.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n this.isCheckBoxSelection = false;\n this.refreshHeader();\n }\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n */\n Grid.prototype.eventInitializer = function () {\n //eventInitializer\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n * @method destroy\n * @return {void}\n */\n Grid.prototype.destroy = function () {\n var gridElement = this.element;\n if (!gridElement) {\n return;\n }\n var hasGridChild = gridElement.querySelector('.e-gridheader') &&\n gridElement.querySelector('.e-gridcontent') ? true : false;\n if (hasGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n if (hasGridChild) {\n _super.prototype.destroy.call(this);\n }\n this.toolTipObj.destroy();\n var modules = ['renderModule', 'headerModule', 'contentModule', 'valueFormatterService',\n 'serviceLocator', 'ariaService', 'keyboardModule', 'widthService', 'searchModule', 'showHider',\n 'scrollModule', 'printModule', 'clipboardModule', 'focusModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n classList(this.element, [], ['e-rtl', 'e-gridhover', 'e-responsive', 'e-default', 'e-device', 'e-grid-min-height']);\n };\n Grid.prototype.destroyDependentModules = function () {\n var gridElement = this.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.scrollModule.destroy();\n this.keyboardModule.destroy();\n this.focusModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Grid.prototype.getModuleName = function () {\n return 'grid';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n /* tslint:disable-next-line:max-line-length */\n // tslint:disable-next-line:max-func-body-length\n Grid.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n var requireGridRefresh = false;\n var freezeRefresh = false;\n var checkCursor;\n var args = { requestType: 'refresh' };\n if (this.isDestroyed) {\n return;\n }\n var properties = Object.keys(newProp);\n if (properties.indexOf('columns') > -1) {\n this.updateColumnObject();\n requireGridRefresh = true;\n }\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'allowPaging':\n this.notify(events.uiUpdate, { module: 'pager', enable: this.allowPaging });\n requireRefresh = true;\n break;\n case 'pageSettings':\n this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n if (isNullOrUndefined(newProp.pageSettings.currentPage) && isNullOrUndefined(newProp.pageSettings.totalRecordsCount)\n || !isNullOrUndefined(oldProp.pageSettings) &&\n ((newProp.pageSettings.currentPage !== oldProp.pageSettings.currentPage)\n && !this.enableColumnVirtualization && !this.enableVirtualization\n && this.pageSettings.totalRecordsCount <= this.pageSettings.pageSize)) {\n requireRefresh = true;\n }\n break;\n case 'currencyCode':\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'allowSorting':\n this.notify(events.uiUpdate, { module: 'sort', enable: this.allowSorting });\n requireRefresh = true;\n checkCursor = true;\n break;\n case 'allowFiltering':\n this.updateStackedFilter();\n this.notify(events.uiUpdate, { module: 'filter', enable: this.allowFiltering });\n requireRefresh = true;\n if (this.filterSettings.type !== 'FilterBar') {\n this.refreshHeader();\n }\n break;\n case 'height':\n case 'width':\n this.notify(events.uiUpdate, { module: 'scroll', properties: { width: newProp.width, height: newProp.height } });\n break;\n case 'allowReordering':\n this.headerModule.refreshUI();\n checkCursor = true;\n break;\n case 'allowRowDragAndDrop':\n this.notify(events.uiUpdate, { module: 'rowDragAndDrop', enable: this.allowRowDragAndDrop });\n break;\n case 'allowSelection':\n this.notify(events.uiUpdate, { module: 'selection', enable: this.allowSelection });\n break;\n case 'rowTemplate':\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n requireRefresh = true;\n break;\n case 'detailTemplate':\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n requireRefresh = true;\n break;\n case 'allowGrouping':\n this.notify(events.uiUpdate, { module: 'group', enable: this.allowGrouping });\n this.headerModule.refreshUI();\n requireRefresh = true;\n checkCursor = true;\n break;\n case 'childGrid':\n requireRefresh = true;\n break;\n case 'toolbar':\n this.notify(events.uiUpdate, { module: 'toolbar' });\n break;\n case 'groupSettings':\n this.notify(events.inBoundModelChanged, {\n module: 'group', properties: newProp.groupSettings,\n oldProperties: oldProp.groupSettings\n });\n break;\n case 'aggregates':\n if (!this.aggregates.length && this.allowGrouping && this.groupSettings.columns.length) {\n requireRefresh = true;\n }\n this.notify(events.uiUpdate, { module: 'aggregate', properties: newProp });\n break;\n case 'frozenColumns':\n case 'frozenRows':\n freezeRefresh = true;\n requireGridRefresh = true;\n break;\n case 'enableVirtualization':\n _super.prototype.refresh.call(this);\n break;\n default:\n this.extendedPropertyChange(prop, newProp);\n }\n }\n if (checkCursor) {\n this.updateDefaultCursor();\n }\n if (requireGridRefresh) {\n if (freezeRefresh || this.frozenColumns || this.frozenRows) {\n this.freezeRefresh();\n }\n else {\n this.refresh();\n }\n }\n else if (requireRefresh) {\n this.notify(events.modelChanged, args);\n requireRefresh = false;\n }\n };\n /* tslint:disable-next-line:max-line-length */\n Grid.prototype.extendedPropertyChange = function (prop, newProp) {\n switch (prop) {\n case 'enableRtl':\n this.updateRTL();\n if (this.allowPaging) {\n this.element.querySelector('.e-gridpager').ej2_instances[0].enableRtl = newProp.enableRtl;\n this.element.querySelector('.e-gridpager').ej2_instances[0].dataBind();\n }\n if (this.height !== 'auto') {\n this.scrollModule.removePadding(!newProp.enableRtl);\n this.scrollModule.setPadding();\n }\n if (this.toolbar) {\n this.toolbarModule.getToolbar().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.toolbarModule.getToolbar().ej2_instances[0].dataBind();\n }\n if (this.contextMenuItems) {\n this.contextMenuModule.getContextMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.contextMenuModule.getContextMenu().ej2_instances[0].dataBind();\n }\n if (this.showColumnMenu) {\n this.columnMenuModule.getColumnMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.columnMenuModule.getColumnMenu().ej2_instances[0].dataBind();\n }\n this.notify(events.rtlUpdated, {});\n break;\n case 'enableAltRow':\n this.renderModule.refresh();\n break;\n case 'allowResizing':\n this.headerModule.refreshUI();\n this.updateResizeLines();\n break;\n case 'rowHeight':\n if (this.rowHeight) {\n addClass([this.element], 'e-grid-min-height');\n }\n else {\n removeClass([this.element], 'e-grid-min-height');\n }\n this.renderModule.refresh();\n this.headerModule.refreshUI();\n break;\n case 'gridLines':\n this.updateGridLines();\n break;\n case 'showColumnMenu':\n this.headerModule.refreshUI();\n this.notify(events.uiUpdate, { module: 'columnMenu', enable: true });\n break;\n case 'columnMenuItems':\n this.notify(events.uiUpdate, { module: 'columnMenu', enable: this.columnMenuItems });\n break;\n case 'contextMenuItems':\n this.notify(events.uiUpdate, { module: 'contextMenu', enable: this.contextMenuItems });\n break;\n case 'showColumnChooser':\n this.notify(events.uiUpdate, { module: 'columnChooser', enable: this.showColumnChooser });\n break;\n case 'filterSettings':\n this.updateStackedFilter();\n this.notify(events.inBoundModelChanged, { module: 'filter', properties: newProp.filterSettings });\n break;\n case 'searchSettings':\n this.notify(events.inBoundModelChanged, { module: 'search', properties: newProp.searchSettings });\n break;\n case 'sortSettings':\n this.notify(events.inBoundModelChanged, { module: 'sort' });\n break;\n case 'selectionSettings':\n this.notify(events.inBoundModelChanged, { module: 'selection', properties: newProp.selectionSettings });\n break;\n case 'editSettings':\n this.notify(events.inBoundModelChanged, { module: 'edit', properties: newProp.editSettings });\n break;\n case 'allowTextWrap':\n case 'textWrapSettings':\n if (this.allowTextWrap) {\n this.applyTextWrap();\n }\n else {\n this.removeTextWrap();\n }\n this.notify(events.freezeRender, { case: 'textwrap', isModeChg: (prop === 'textWrapSettings') });\n break;\n case 'dataSource':\n var pending_1 = this.getDataModule().getState();\n if (pending_1.isPending) {\n var gResult_1 = !isNullOrUndefined(this.dataSource) ? this.dataSource.result : [];\n (pending_1.group || []).forEach(function (name) {\n gResult_1 = DataUtil.group(gResult_1, name, pending_1.aggregates || []);\n });\n this.dataSource = {\n result: gResult_1, count: this.dataSource.count,\n aggregates: this.dataSource.aggregates\n };\n pending_1.resolver(this.dataSource);\n }\n else {\n this.getDataModule().setState({ isDataChanged: false });\n this.notify(events.dataSourceModified, {});\n this.renderModule.refresh();\n }\n break;\n case 'enableHover':\n var action = newProp.enableHover ? addClass : removeClass;\n action([this.element], 'e-gridhover');\n break;\n }\n };\n /**\n * @private\n */\n Grid.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n if (this.filterModule && muteOnChange) {\n this.filterModule.refreshFilter();\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.updateDefaultCursor = function () {\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n for (var _i = 0, headerRows_1 = headerRows; _i < headerRows_1.length; _i++) {\n var row = headerRows_1[_i];\n if (this.allowSorting || (this.allowGrouping && this.groupSettings.showDropArea) || this.allowReordering) {\n row.classList.remove('e-defaultcursor');\n }\n else {\n row.classList.add('e-defaultcursor');\n }\n }\n };\n Grid.prototype.updateColumnModel = function (columns) {\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].columns) {\n this.updateColumnModel(columns[i].columns);\n }\n else {\n this.columnModel.push(columns[i]);\n }\n }\n this.updateFrozenColumns();\n };\n Grid.prototype.updateFrozenColumns = function () {\n var cols = this.columnModel;\n var count = 0;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].isFrozen) {\n cols.splice(this.frozenColumns + count, 0, cols.splice(i, 1)[0]);\n count++;\n }\n }\n };\n /**\n * Gets the columns from the Grid.\n * @return {Column[]}\n */\n Grid.prototype.getColumns = function (isRefresh) {\n var _this = this;\n var inview = this.inViewIndexes.map(function (v) { return v - _this.groupSettings.columns.length; }).filter(function (v) { return v > -1; });\n var vLen = inview.length;\n if (!this.enableColumnVirtualization || isNullOrUndefined(this.columnModel) || this.columnModel.length === 0 || isRefresh) {\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n }\n var columns = vLen === 0 ? this.columnModel :\n this.columnModel.slice(inview[0], inview[vLen - 1] + 1);\n return columns;\n };\n /**\n * @private\n */\n Grid.prototype.getStackedHeaderColumnByHeaderText = function (stackedHeader, col) {\n for (var i = 0; i < col.length; i++) {\n var individualColumn = col[i];\n if (individualColumn.field === stackedHeader || individualColumn.headerText === stackedHeader) {\n this.stackedColumn = individualColumn;\n break;\n }\n else if (individualColumn.columns) {\n this.getStackedHeaderColumnByHeaderText(stackedHeader, individualColumn.columns);\n }\n }\n return this.stackedColumn;\n };\n /**\n * @private\n */\n Grid.prototype.getColumnIndexesInView = function () {\n return this.inViewIndexes;\n };\n /**\n * @private\n */\n Grid.prototype.getLocaleConstants = function () {\n return this.defaultLocale;\n };\n /**\n * @private\n */\n Grid.prototype.setColumnIndexesInView = function (indexes) {\n this.inViewIndexes = indexes;\n };\n /**\n * Gets the visible columns from the Grid.\n * @return {Column[]}\n */\n Grid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * Gets the header div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getHeaderContent = function () {\n return this.headerModule.getPanel();\n };\n /**\n * Sets the header div of the Grid to replace the old header.\n * @param {Element} element - Specifies the Grid header.\n * @return {void}\n */\n Grid.prototype.setGridHeaderContent = function (element) {\n this.headerModule.setPanel(element);\n };\n /**\n * Gets the content table of the Grid.\n * @return {Element}\n */\n Grid.prototype.getContentTable = function () {\n return this.contentModule.getTable();\n };\n /**\n * Sets the content table of the Grid to replace the old content table.\n * @param {Element} element - Specifies the Grid content table.\n * @return {void}\n */\n Grid.prototype.setGridContentTable = function (element) {\n this.contentModule.setTable(element);\n };\n /**\n * Gets the content div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Sets the content div of the Grid to replace the old Grid content.\n * @param {Element} element - Specifies the Grid content.\n * @return {void}\n */\n Grid.prototype.setGridContent = function (element) {\n this.contentModule.setPanel(element);\n };\n /**\n * Gets the header table element of the Grid.\n * @return {Element}\n */\n Grid.prototype.getHeaderTable = function () {\n return this.headerModule.getTable();\n };\n /**\n * Sets the header table of the Grid to replace the old one.\n * @param {Element} element - Specifies the Grid header table.\n * @return {void}\n */\n Grid.prototype.setGridHeaderTable = function (element) {\n this.headerModule.setTable(element);\n };\n /**\n * Gets the footer div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getFooterContent = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n return this.footerElement;\n };\n /**\n * Gets the footer table element of the Grid.\n * @return {Element}\n */\n Grid.prototype.getFooterContentTable = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n return this.footerElement.firstChild.firstChild;\n };\n /**\n * Gets the pager of the Grid.\n * @return {Element}\n */\n Grid.prototype.getPager = function () {\n return this.gridPager; //get element from pager\n };\n /**\n * Sets the pager of the Grid to replace the old pager.\n * @param {Element} element - Specifies the Grid pager.\n * @return {void}\n */\n Grid.prototype.setGridPager = function (element) {\n this.gridPager = element;\n };\n /**\n * Gets a row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n Grid.prototype.getRowByIndex = function (index) {\n return this.contentModule.getRowByIndex(index);\n };\n /**\n * Gets a movable tables row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n Grid.prototype.getMovableRowByIndex = function (index) {\n return this.contentModule.getMovableRowByIndex(index);\n };\n /**\n * Gets all the data rows of the Grid.\n * @return {Element[]}\n */\n Grid.prototype.getRows = function () {\n return this.contentModule.getRowElements();\n };\n /**\n * Get a row information based on cell\n * @param {Element}\n * @return RowInfo\n */\n Grid.prototype.getRowInfo = function (target) {\n var ele = target;\n var args = { target: target };\n if (!isNullOrUndefined(target) && isNullOrUndefined(parentsUntil(ele, 'e-detailrowcollapse')\n && isNullOrUndefined(parentsUntil(ele, 'e-recordplusexpand'))) && !this.isEdit) {\n var cell = closest(ele, '.e-rowcell');\n if (!cell) {\n return args;\n }\n var cellIndex = parseInt(cell.getAttribute('aria-colindex'), 10);\n if (!isNullOrUndefined(cell) && !isNaN(cellIndex)) {\n var row_1 = closest(cell, '.e-row');\n var rowIndex = parseInt(row_1.getAttribute('aria-rowindex'), 10);\n var frzCols = this.getFrozenColumns();\n var isMovable = frzCols ? cellIndex >= frzCols : false;\n var rows = (isMovable ?\n this.contentModule.getMovableRows() : this.contentModule.getRows());\n var rowsObject = rows.filter(function (r) { return r.uid === row_1.getAttribute('data-uid'); });\n var rowData = rowsObject[0].data;\n var column = rowsObject[0].cells[isMovable ? cellIndex - frzCols : cellIndex].column;\n args = { cell: cell, cellIndex: cellIndex, row: row_1, rowIndex: rowIndex, rowData: rowData, column: column, target: target };\n }\n }\n return args;\n };\n /**\n * Gets the Grid's movable content rows from frozen grid.\n * @return {Element[]}\n */\n Grid.prototype.getMovableRows = function () {\n return this.contentModule.getMovableRowElements();\n };\n /**\n * Gets all the Grid's data rows.\n * @return {Element[]}\n */\n Grid.prototype.getDataRows = function () {\n var rows = [].slice.call(this.getContentTable().querySelector('tbody').children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderTable().querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * @hidden\n */\n Grid.prototype.addMovableRows = function (fRows, mrows) {\n for (var i = 0, len = mrows.length; i < len; i++) {\n fRows.push(mrows[i]);\n }\n return fRows;\n };\n Grid.prototype.generateDataRows = function (rows) {\n var dRows = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Gets all the Grid's movable table data rows.\n * @return {Element[]}\n */\n Grid.prototype.getMovableDataRows = function () {\n var rows = [].slice.call(this.getContent().querySelector('.e-movablecontent').querySelector('tbody').children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n */\n Grid.prototype.setCellValue = function (key, field, value) {\n var cells = 'cells';\n var rowData = 'data';\n var rowIdx = 'index';\n var rowuID = 'uid';\n var fieldIdx;\n var col;\n var tr;\n var mTr;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var cell = new CellRenderer(this, this.serviceLocator);\n var selectedRow = {};\n var movableSelectedRow = {};\n var rowObjects = this.contentModule.getRows();\n var movableRowObjects = this.contentModule.getMovableRows();\n fieldIdx = this.getColumnIndexByField(field);\n if (this.groupSettings.columns.length > 0 || this.childGrid || this.detailTemplate) {\n fieldIdx = fieldIdx + 1;\n }\n col = this.getColumnByField(field);\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n movableSelectedRow = movableRowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n tr = !isNullOrUndefined(selectedRow) ? this.element.querySelector('[data-uid=' + selectedRow[rowuID] + ']') : null;\n mTr = !isNullOrUndefined(movableSelectedRow) ? this.element.querySelector('[data-uid=' + movableSelectedRow[rowuID] + ']') : null;\n if (!isNullOrUndefined(tr)) {\n setValue(field, value, selectedRow[rowData]);\n var td = !isNullOrUndefined(tr.childNodes[fieldIdx]) ?\n tr.childNodes[fieldIdx] : mTr.childNodes[fieldIdx - this.frozenColumns];\n if (!isNullOrUndefined(td)) {\n var sRow = selectedRow[cells][fieldIdx];\n var mRow = void 0;\n if (this.frozenColumns) {\n mRow = movableSelectedRow[cells][fieldIdx - this.frozenColumns];\n }\n cell.refreshTD(td, !isNullOrUndefined(sRow) ? sRow : mRow, selectedRow[rowData], { index: selectedRow[rowIdx] });\n if (this.aggregates.length > 0) {\n this.notify(events.refreshFooterRenderer, {});\n if (this.groupSettings.columns.length > 0) {\n this.notify(events.groupAggregates, {});\n }\n }\n /* tslint:disable:no-string-literal */\n if (!isNullOrUndefined(movableSelectedRow) && !isNullOrUndefined(movableSelectedRow['changes'])) {\n movableSelectedRow['changes'][field] = value;\n }\n /* tslint:disable:no-string-literal */\n this.trigger(events.queryCellInfo, {\n cell: td, column: col, data: selectedRow[rowData]\n });\n }\n }\n else {\n return;\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n */\n Grid.prototype.setRowData = function (key, rowData) {\n var rwdata = 'data';\n var rowuID = 'uid';\n var rowObjects = this.contentModule.getRows();\n var selectedRow;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this);\n if (this.groupSettings.columns.length > 0 && this.aggregates.length > 0) {\n rowObjects = rowObjects.filter(function (row) { return row.isDataRow; });\n }\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n if (!isNullOrUndefined(selectedRow) && this.element.querySelectorAll('[data-uid=' + selectedRow[rowuID] + ']').length) {\n selectedRow.changes = rowData;\n refreshForeignData(selectedRow, this.getForeignKeyColumns(), selectedRow.changes);\n rowRenderer.refresh(selectedRow, this.getColumns(), true);\n if (this.aggregates.length > 0) {\n this.notify(events.refreshFooterRenderer, {});\n if (this.groupSettings.columns.length > 0) {\n this.notify(events.groupAggregates, {});\n }\n }\n }\n else {\n return;\n }\n };\n /**\n * Gets a cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.getDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex];\n };\n /**\n * Gets a movable table cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.getMovableDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex - this.getFrozenColumns()];\n };\n /**\n * Gets a column header by column index.\n * @param {number} index - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByIndex = function (index) {\n return this.getHeaderTable().querySelectorAll('.e-headercell')[index];\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowObjectFromUID = function (uid) {\n var rows = this.contentModule.getRows();\n var row = this.rowObject(rows, uid);\n if (this.getFrozenColumns()) {\n if (!row) {\n row = this.rowObject(this.contentModule.getMovableRows(), uid);\n return row;\n }\n }\n return row;\n };\n Grid.prototype.rowObject = function (rows, uid) {\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.uid === uid) {\n return row;\n }\n }\n return null;\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * @hidden\n */\n Grid.prototype.getMovableRowsObject = function () {\n return this.contentModule.getMovableRows();\n };\n /**\n * Gets a column header by column name.\n * @param {string} field - Specifies the column name.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByField = function (field) {\n return this.getColumnHeaderByUid(this.getColumnByField(field).uid);\n };\n /**\n * Gets a column header by UID.\n * @param {string} field - Specifies the column uid.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByUid = function (uid) {\n return this.getHeaderContent().querySelector('[e-mappinguid=' + uid + ']').parentElement;\n };\n /**\n * @hidden\n */\n Grid.prototype.getColumnByIndex = function (index) {\n var column;\n this.getColumns().some(function (col, i) {\n column = col;\n return i === index;\n });\n return column;\n };\n /**\n * Gets a Column by column name.\n * @param {string} field - Specifies the column name.\n * @return {Column}\n */\n Grid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column index by column name.\n * @param {string} field - Specifies the column name.\n * @return {number}\n */\n Grid.prototype.getColumnIndexByField = function (field) {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Gets a column by UID.\n * @param {string} uid - Specifies the column UID.\n * @return {Column}\n */\n Grid.prototype.getColumnByUid = function (uid) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column index by UID.\n * @param {string} uid - Specifies the column UID.\n * @return {number}\n */\n Grid.prototype.getColumnIndexByUid = function (uid) {\n var index = iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets UID by column name.\n * @param {string} field - Specifies the column name.\n * @return {string}\n */\n Grid.prototype.getUidByColumnField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return item.uid;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets TH index by column uid value.\n * @private\n * @param {string} uid - Specifies the column uid.\n * @return {number}\n */\n Grid.prototype.getNormalizedColumnIndex = function (uid) {\n var index = this.getColumnIndexByUid(uid);\n if (this.allowGrouping) {\n index += this.groupSettings.columns.length;\n }\n if (this.isDetail()) {\n index++;\n }\n /**\n * TODO: index normalization based on the stacked header, grouping and detailTemplate\n * and frozen should be handled here\n */\n return index;\n };\n /**\n * Gets the collection of column fields.\n * @return {string[]}\n */\n Grid.prototype.getColumnFieldNames = function () {\n var columnNames = [];\n var column;\n for (var i = 0, len = this.getColumns().length; i < len; i++) {\n column = this.getColumns()[i];\n if (column.visible) {\n columnNames.push(column.field);\n }\n }\n return columnNames;\n };\n /**\n * Gets a compiled row template.\n * @return {Function}\n * @private\n */\n Grid.prototype.getRowTemplate = function () {\n return this.rowTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n * @private\n * @return {Function}\n */\n Grid.prototype.getDetailTemplate = function () {\n return this.detailTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n * @private\n * @return {Function}\n */\n Grid.prototype.getEditTemplate = function () {\n return this.editTemplateFn;\n };\n /**\n * Get the names of the primary key columns of the Grid.\n * @return {string[]}\n */\n Grid.prototype.getPrimaryKeyFieldNames = function () {\n var keys = [];\n for (var k = 0; k < this.columnModel.length; k++) {\n if (this.columnModel[k].isPrimaryKey) {\n keys.push(this.columnModel[k].field);\n }\n }\n return keys;\n };\n /**\n * Refreshes the Grid header and content.\n */\n Grid.prototype.refresh = function () {\n this.headerModule.refreshUI();\n this.updateStackedFilter();\n this.renderModule.refresh();\n };\n /**\n * Refreshes the Grid header.\n */\n Grid.prototype.refreshHeader = function () {\n this.headerModule.refreshUI();\n };\n /**\n * Gets the collection of selected rows.\n * @return {Element[]}\n */\n Grid.prototype.getSelectedRows = function () {\n return this.selectionModule ? this.selectionModule.selectedRecords : [];\n };\n /**\n * Gets the collection of selected row indexes.\n * @return {number[]}\n */\n Grid.prototype.getSelectedRowIndexes = function () {\n return this.selectionModule ? this.selectionModule.selectedRowIndexes : [];\n };\n /**\n * Gets the collection of selected row and cell indexes.\n * @return {number[]}\n */\n Grid.prototype.getSelectedRowCellIndexes = function () {\n return this.selectionModule.selectedRowCellIndexes;\n };\n /**\n * Gets the collection of selected records.\n * @return {Object[]}\n */\n Grid.prototype.getSelectedRecords = function () {\n return this.selectionModule ? this.selectionModule.getSelectedRecords() : [];\n };\n /**\n * Gets the data module.\n * @return {Data}\n */\n Grid.prototype.getDataModule = function () {\n return this.renderModule.data;\n };\n /**\n * Shows a column by its column name.\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n Grid.prototype.showColumns = function (keys, showBy) {\n showBy = showBy ? showBy : 'headerText';\n this.showHider.show(keys, showBy);\n };\n /**\n * Hides a column by column name.\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n Grid.prototype.hideColumns = function (keys, hideBy) {\n hideBy = hideBy ? hideBy : 'headerText';\n this.showHider.hide(keys, hideBy);\n };\n /**\n * @hidden\n */\n Grid.prototype.getFrozenColumns = function () {\n return this.frozenColumns + this.getFrozenCount(this.columns, 0);\n };\n /**\n * @hidden\n */\n Grid.prototype.getVisibleFrozenColumns = function () {\n return this.getVisibleFrozenColumnsCount() + this.getVisibleFrozenCount(this.columns, 0);\n };\n Grid.prototype.getVisibleFrozenColumnsCount = function () {\n var visibleFrozenColumns = 0;\n var col = this.columns;\n for (var i = 0; i < this.frozenColumns; i++) {\n if (col[i].visible) {\n visibleFrozenColumns++;\n }\n }\n return visibleFrozenColumns;\n };\n Grid.prototype.getVisibleFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getVisibleFrozenCount(cols[i].columns, cnt);\n }\n else {\n if (cols[i].isFrozen && cols[i].visible) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n Grid.prototype.getFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getFrozenCount(cols[i].columns, cnt);\n }\n else {\n if (cols[i].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Navigates to the specified target page.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n Grid.prototype.goToPage = function (pageNo) {\n this.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of external message.\n * @param {string} message - Defines the message to update.\n * @return {void}\n */\n Grid.prototype.updateExternalMessage = function (message) {\n this.pagerModule.updateExternalMessage(message);\n };\n /**\n * Sorts a column with the given options.\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @return {void}\n */\n Grid.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n };\n /**\n * Clears all the sorted columns of the Grid.\n * @return {void}\n */\n Grid.prototype.clearSorting = function () {\n this.sortModule.clearSorting();\n };\n /**\n * Remove sorted column by field name.\n * @param {string} field - Defines the column field name to remove sort.\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeSortColumn = function (field) {\n this.sortModule.removeSortColumn(field);\n };\n /**\n * Filters grid row by column name with the given options.\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the grid filters the records with exact match. if false, it filters case\n * insensitive records (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true,\n * then filter ignores the diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for the filter column.\n * @param {string} actualOperator - Defines the actual filter operator for the filter column.\n * @return {void}\n */\n Grid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.filterModule.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n Grid.prototype.clearFiltering = function () {\n this.filterModule.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.filterModule.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Grid.prototype.selectRow = function (index, isToggle) {\n this.selectionModule.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @return {void}\n */\n Grid.prototype.selectRows = function (rowIndexes) {\n this.selectionModule.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n * @return {void}\n */\n Grid.prototype.clearSelection = function () {\n this.selectionModule.clearSelection();\n };\n /**\n * Selects a cell by the given index.\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Grid.prototype.selectCell = function (cellIndex, isToggle) {\n this.selectionModule.selectCell(cellIndex, isToggle);\n };\n /**\n * Searches Grid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./api-searchSettings.html).\n * @param {string} searchString - Defines the key.\n * @return {void}\n */\n Grid.prototype.search = function (searchString) {\n this.searchModule.search(searchString);\n };\n /**\n * By default, prints all the pages of the Grid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./api-grid.html#printmode-string).\n * @return {void}\n */\n Grid.prototype.print = function () {\n this.printModule.print();\n };\n /**\n * Delete a record with Given options. If fieldname and data is not given then grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n * @param {string} fieldname - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n */\n Grid.prototype.deleteRecord = function (fieldname, data) {\n this.editModule.deleteRecord(fieldname, data);\n };\n /**\n * To edit any particular row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n */\n Grid.prototype.startEdit = function () {\n this.editModule.startEdit();\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n */\n Grid.prototype.endEdit = function () {\n this.editModule.endEdit();\n };\n /**\n * Cancels edited state.\n */\n Grid.prototype.closeEdit = function () {\n this.editModule.closeEdit();\n };\n /**\n * Adds a new record to the Grid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n */\n Grid.prototype.addRecord = function (data, index) {\n this.editModule.addRecord(data, index);\n };\n /**\n * Delete any visible row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n */\n Grid.prototype.deleteRow = function (tr) {\n this.editModule.deleteRow(tr);\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n */\n Grid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * @hidden\n */\n Grid.prototype.recalcIndentWidth = function () {\n if (!this.getHeaderTable().querySelector('.e-emptycell')) {\n return;\n }\n if ((!this.groupSettings.columns.length && !this.isDetail()) ||\n this.getHeaderTable().querySelector('.e-emptycell').getAttribute('indentRefreshed') ||\n !this.getContentTable()) {\n return;\n }\n var indentWidth = this.getHeaderTable().querySelector('.e-emptycell').parentElement.offsetWidth;\n var headerCol = [].slice.call(this.getHeaderTable().querySelector('colgroup').childNodes);\n var contentCol = [].slice.call(this.getContentTable().querySelector('colgroup').childNodes);\n var perPixel = indentWidth / 30;\n var i = 0;\n if (perPixel >= 1) {\n indentWidth = (30 / perPixel);\n }\n if (this.enableColumnVirtualization) {\n indentWidth = 30;\n }\n while (i < this.groupSettings.columns.length) {\n headerCol[i].style.width = indentWidth + 'px';\n contentCol[i].style.width = indentWidth + 'px';\n this.notify(events.columnWidthChanged, { index: i, width: indentWidth });\n i++;\n }\n if (this.isDetail()) {\n headerCol[i].style.width = indentWidth + 'px';\n contentCol[i].style.width = indentWidth + 'px';\n this.notify(events.columnWidthChanged, { index: i, width: indentWidth });\n }\n this.getHeaderTable().querySelector('.e-emptycell').setAttribute('indentRefreshed', 'true');\n };\n /**\n * Changes the Grid column positions by field names.\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @return {void}\n */\n Grid.prototype.reorderColumns = function (fromFName, toFName) {\n this.reorderModule.reorderColumns(fromFName, toFName);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n * @param {string |string[]} fieldNames - Defines the column names.\n * @return {void}\n *\n *\n * ```typescript\n *
    \n * \n * ```\n *\n */\n Grid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n };\n /**\n * @hidden\n */\n Grid.prototype.createColumnchooser = function (x, y, target) {\n this.columnChooserModule.renderColumnChooser(x, y, target);\n };\n Grid.prototype.initializeServices = function () {\n this.serviceLocator.register('widthService', this.widthService = new ColumnWidthService(this));\n this.serviceLocator.register('cellRendererFactory', new CellRendererFactory);\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('localization', this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale));\n this.serviceLocator.register('valueFormatter', this.valueFormatterService = new ValueFormatter(this.locale));\n this.serviceLocator.register('showHideService', this.showHider = new ShowHide(this));\n this.serviceLocator.register('ariaService', this.ariaService = new AriaService());\n this.serviceLocator.register('focus', this.focusModule = new FocusStrategy(this));\n };\n Grid.prototype.processModel = function () {\n var _this = this;\n var gCols = this.groupSettings.columns;\n var sCols = this.sortSettings.columns;\n var flag;\n var j;\n if (this.allowGrouping) {\n var _loop_1 = function (i, len) {\n j = 0;\n for (var sLen = sCols.length; j < sLen; j++) {\n if (sCols[j].field === gCols[i]) {\n flag = true;\n break;\n }\n }\n if (!flag) {\n sCols.push({ field: gCols[i], direction: 'Ascending' });\n }\n else {\n if (this_1.allowSorting) {\n this_1.sortedColumns.push(sCols[j].field);\n }\n else {\n sCols[j].direction = 'Ascending';\n }\n }\n if (!this_1.groupSettings.showGroupedColumn) {\n var column = this_1.enableColumnVirtualization ?\n this_1.columns.filter(function (c) { return c.field === gCols[i]; })[0] : this_1.getColumnByField(gCols[i]);\n column.visible = false;\n }\n };\n var this_1 = this;\n for (var i = 0, len = gCols.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n if (!gCols.length) {\n sCols.forEach(function (col) {\n _this.sortedColumns.push(col.field);\n });\n }\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n this.editTemplateFn = templateCompiler(this.editSettings.template);\n if (!isNullOrUndefined(this.parentDetails)) {\n var value = isNullOrUndefined(this.parentDetails.parentKeyFieldValue) ? 'undefined' :\n this.parentDetails.parentKeyFieldValue;\n this.query.where(this.queryString, 'equal', value, true);\n }\n this.initForeignColumn();\n };\n Grid.prototype.initForeignColumn = function () {\n if (this.isForeignKeyEnabled(this.getColumns())) {\n this.notify(events.initForeignKeyColumn, this.getForeignKeyColumns());\n }\n };\n Grid.prototype.gridRender = function () {\n this.updateRTL();\n if (this.enableHover) {\n this.element.classList.add('e-gridhover');\n }\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n if (this.rowHeight) {\n this.element.classList.add('e-grid-min-height');\n }\n classList(this.element, ['e-responsive', 'e-default'], []);\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.headerModule = rendererFactory.getRenderer(RenderType.Header);\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.printModule = new Print(this, this.scrollModule);\n this.clipboardModule = new Clipboard(this);\n this.renderModule.render();\n this.eventInitializer();\n this.createGridPopUpElement();\n this.widthService.setWidthToColumns();\n this.updateGridLines();\n this.applyTextWrap();\n this.createTooltip(); //for clip mode ellipsis\n };\n Grid.prototype.dataReady = function () {\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n if (this.height !== 'auto') {\n this.scrollModule.setPadding();\n }\n };\n Grid.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Grid.prototype.createGridPopUpElement = function () {\n var popup = this.createElement('div', { className: 'e-gridpopup', styles: 'display:none;' });\n var content = this.createElement('div', { className: 'e-content', attrs: { tabIndex: '-1' } });\n append([content, this.createElement('div', { className: 'e-uptail e-tail' })], popup);\n content.appendChild(this.createElement('span'));\n append([content, this.createElement('div', { className: 'e-downtail e-tail' })], popup);\n this.element.appendChild(popup);\n };\n Grid.prototype.updateGridLines = function () {\n classList(this.element, [], ['e-verticallines', 'e-horizontallines', 'e-hidelines', 'e-bothlines']);\n switch (this.gridLines) {\n case 'Horizontal':\n this.element.classList.add('e-horizontallines');\n break;\n case 'Vertical':\n this.element.classList.add('e-verticallines');\n break;\n case 'None':\n this.element.classList.add('e-hidelines');\n break;\n case 'Both':\n this.element.classList.add('e-bothlines');\n break;\n }\n this.updateResizeLines();\n };\n Grid.prototype.updateResizeLines = function () {\n if (this.allowResizing &&\n !(this.gridLines === 'Vertical' || this.gridLines === 'Both')) {\n this.element.classList.add('e-resize-lines');\n }\n else {\n this.element.classList.remove('e-resize-lines');\n }\n };\n /**\n * The function is used to apply text wrap\n * @return {void}\n * @hidden\n */\n Grid.prototype.applyTextWrap = function () {\n if (this.allowTextWrap) {\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n switch (this.textWrapSettings.wrapMode) {\n case 'Header':\n wrap(this.element, false);\n wrap(this.getContent(), false);\n wrap(headerRows, true);\n break;\n case 'Content':\n wrap(this.getContent(), true);\n wrap(this.element, false);\n wrap(headerRows, false);\n break;\n default:\n wrap(this.element, true);\n wrap(this.getContent(), false);\n wrap(headerRows, false);\n }\n }\n };\n /**\n * The function is used to remove text wrap\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeTextWrap = function () {\n wrap(this.element, false);\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n wrap(headerRows, false);\n wrap(this.getContent(), false);\n };\n /**\n * The function is used to add Tooltip to the grid cell that has ellipsiswithtooltip clip mode.\n * @return {void}\n * @hidden\n */\n Grid.prototype.createTooltip = function () {\n this.toolTipObj = new Tooltip({ opensOn: 'custom', content: '' }, this.element);\n };\n Grid.prototype.getTooltipStatus = function (element) {\n var width;\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var htable = this.createTable(headerTable, headerDivTag, 'header');\n var ctable = this.createTable(headerTable, headerDivTag, 'content');\n var td = element;\n var table = headerTable.contains(element) ? htable : ctable;\n var ele = headerTable.contains(element) ? 'th' : 'tr';\n table.querySelector(ele).className = element.className;\n table.querySelector(ele).innerHTML = element.innerHTML;\n width = table.querySelector(ele).getBoundingClientRect().width;\n document.body.removeChild(htable);\n document.body.removeChild(ctable);\n if (width > element.getBoundingClientRect().width) {\n return true;\n }\n return false;\n };\n Grid.prototype.mouseMoveHandler = function (e) {\n if (this.isEllipsisTooltip()) {\n var element = parentsUntil(e.target, 'e-ellipsistooltip');\n if (element) {\n if (element.getAttribute('aria-describedby')) {\n return;\n }\n if (this.getTooltipStatus(element)) {\n if (element.getElementsByClassName('e-headertext').length) {\n this.toolTipObj.content = element.getElementsByClassName('e-headertext')[0].innerText;\n }\n else {\n this.toolTipObj.content = element.innerText;\n }\n this.toolTipObj.open(element);\n }\n else {\n this.toolTipObj.close();\n }\n }\n else {\n this.toolTipObj.close();\n }\n }\n };\n Grid.prototype.isEllipsisTooltip = function () {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].clipMode === 'EllipsisWithTooltip') {\n return true;\n }\n }\n return false;\n };\n Grid.prototype.scrollHandler = function () {\n if (this.isEllipsisTooltip()) {\n this.toolTipObj.close();\n }\n };\n /**\n * To create table for ellipsiswithtooltip\n * @hidden\n */\n Grid.prototype.createTable = function (table, tag, type) {\n var myTableDiv = this.createElement('div');\n myTableDiv.className = this.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = this.createElement('div');\n mySubDiv.className = tag;\n var myTable = this.createElement('table');\n myTable.className = table.className;\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var ele = (type === 'header') ? 'th' : 'td';\n var myTr = this.createElement('tr');\n var mytd = this.createElement(ele);\n myTr.appendChild(mytd);\n myTable.appendChild(myTr);\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n return myTableDiv;\n };\n Grid.prototype.keyPressed = function (e) {\n if (e.action === 'tab' || e.action === 'shiftTab') {\n this.toolTipObj.close();\n }\n };\n /**\n * Binding events to the element while component creation.\n * @hidden\n */\n Grid.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(this.getContent(), 'dblclick', this.dblClickHandler, this);\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.getContent().firstElementChild, 'scroll', this.scrollHandler, this);\n EventHandler.add(this.element, 'mousemove', this.mouseMoveHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy.\n * @hidden\n */\n Grid.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.mouseClickHandler);\n EventHandler.remove(this.element, 'touchend', this.mouseClickHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.getContent().firstElementChild, 'scroll', this.scrollHandler);\n EventHandler.remove(this.element, 'mousemove', this.mouseMoveHandler);\n };\n /**\n * @hidden\n */\n Grid.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.on(events.dataReady, this.dataReady, this);\n this.on(events.contentReady, this.recalcIndentWidth, this);\n this.on(events.headerRefreshed, this.recalcIndentWidth, this);\n this.dataBoundFunction = this.refreshMediaCol.bind(this);\n this.addEventListener(events.dataBound, this.dataBoundFunction);\n this.on(events.keyPressed, this.keyPressed, this);\n };\n /**\n * @hidden\n */\n Grid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.dataReady, this.dataReady);\n this.off(events.contentReady, this.recalcIndentWidth);\n this.off(events.headerRefreshed, this.recalcIndentWidth);\n this.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.off(events.keyPressed, this.keyPressed);\n };\n /**\n * Get current visible data of grid.\n * @return {Object[]}\n * @hidden\n */\n Grid.prototype.getCurrentViewRecords = function () {\n return (this.allowGrouping && this.groupSettings.columns.length && this.currentViewData.length) ?\n this.currentViewData.records : this.currentViewData;\n };\n Grid.prototype.mouseClickHandler = function (e) {\n if (this.isChildGrid(e) || (parentsUntil(e.target, 'e-gridpopup') && e.touches) ||\n this.element.querySelectorAll('.e-cloneproperties').length || this.checkEdit(e)) {\n return;\n }\n if (((!this.allowRowDragAndDrop && (parentsUntil(e.target, 'e-gridcontent') ||\n e.target.tagName === 'TD')) || (!(this.allowGrouping || this.allowReordering) &&\n parentsUntil(e.target, 'e-gridheader'))) && e.touches) {\n return;\n }\n if (parentsUntil(e.target, 'e-gridheader') && this.allowRowDragAndDrop) {\n e.preventDefault();\n }\n this.notify(events.click, e);\n };\n Grid.prototype.checkEdit = function (e) {\n var tr = parentsUntil(e.target, 'e-row');\n var isEdit = this.editSettings.mode !== 'Batch' &&\n this.isEdit && tr && (tr.classList.contains('e-editedrow') || tr.classList.contains('e-addedrow'));\n return !parentsUntil(e.target, 'e-unboundcelldiv') && (isEdit || (parentsUntil(e.target, 'e-rowcell') &&\n parentsUntil(e.target, 'e-rowcell').classList.contains('e-editedbatchcell')));\n };\n Grid.prototype.dblClickHandler = function (e) {\n var grid = parentsUntil(e.target, 'e-grid');\n if (isNullOrUndefined(grid) || grid.id !== this.element.id || closest(e.target, '.e-unboundcelldiv')) {\n return;\n }\n var args = this.getRowInfo(e.target);\n args.target = e.target;\n this.trigger(events.recordDoubleClick, args);\n this.notify(events.dblclick, e);\n };\n Grid.prototype.focusOutHandler = function (e) {\n if (this.isChildGrid(e)) {\n return;\n }\n if (!parentsUntil(e.target, 'e-grid')) {\n this.element.querySelector('.e-gridpopup').style.display = 'None';\n }\n var filterClear = this.element.querySelector('.e-cancel:not(.e-hide)');\n if (filterClear) {\n filterClear.classList.add('e-hide');\n }\n if ((!e.relatedTarget || !parentsUntil(e.relatedTarget, 'e-grid'))\n && !this.keyPress && this.editSettings.mode === 'Batch' && this.isEdit && !Browser.isDevice) {\n this.editModule.saveCell();\n this.notify(events.editNextValCell, {});\n }\n this.keyPress = false;\n };\n Grid.prototype.isChildGrid = function (e) {\n var gridElement = parentsUntil(e.target, 'e-grid');\n if (gridElement && gridElement.id !== this.element.id) {\n return true;\n }\n return false;\n };\n Grid.prototype.mergePersistGridData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n var dataObj = JSON.parse(data);\n var keys = Object.keys(dataObj);\n this.isProtectedOnChange = true;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if ((typeof this[key] === 'object') && !isNullOrUndefined(this[key])) {\n if (Array.isArray(this[key]) && key === 'columns') {\n this.mergeColumns(dataObj[key], this[key]);\n this[key] = dataObj[key];\n }\n else {\n extend(this[key], dataObj[key]);\n }\n }\n else {\n this[key] = dataObj[key];\n }\n }\n this.isProtectedOnChange = false;\n }\n };\n Grid.prototype.mergeColumns = function (storedColumn, columns) {\n var _this = this;\n storedColumn.forEach(function (col, index, arr) {\n var ind;\n var localCol = _this.getColumnByField(col.field) ||\n columns.some(function (element, i) {\n ind = i;\n return element.headerText === col.headerText;\n }) && columns[ind];\n if (!isNullOrUndefined(localCol)) {\n if (localCol.columns && localCol.columns.length) {\n _this.mergeColumns(col.columns, localCol.columns);\n }\n else {\n arr[index] = extend({}, localCol, col, true);\n }\n }\n });\n };\n Grid.prototype.isDetail = function () {\n return !isNullOrUndefined(this.detailTemplate) || !isNullOrUndefined(this.childGrid);\n };\n Grid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n Grid.prototype.isForeignKeyEnabled = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isForeignKeyEnabled(col.columns);\n }\n return !!(col.dataSource && col.foreignKeyValue);\n });\n };\n Grid.prototype.keyActionHandler = function (e) {\n this.keyPress = e.action !== 'space';\n if (this.isChildGrid(e) ||\n (this.isEdit && e.action !== 'escape' && e.action !== 'enter' && e.action !== 'shiftEnter'\n && e.action !== 'tab' && e.action !== 'shiftTab')) {\n return;\n }\n if (this.allowKeyboard) {\n if (e.action === 'ctrlPlusP') {\n e.preventDefault();\n this.print();\n }\n this.notify(events.keyPressed, e);\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.setInjectedModules = function (modules) {\n this.injectedModules = modules;\n };\n Grid.prototype.updateColumnObject = function () {\n prepareColumns(this.columns, this.enableColumnVirtualization);\n this.initForeignColumn();\n this.notify(events.autoCol, {});\n };\n /**\n * Gets the foreign columns from Grid.\n * @return {Column[]}\n */\n Grid.prototype.getForeignKeyColumns = function () {\n return this.getColumns().filter(function (col) {\n return col.isForeignColumn();\n });\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowHeight = function () {\n return this.rowHeight ? this.rowHeight : getRowHeight(this.element);\n };\n /**\n * Refreshes the Grid column changes.\n */\n Grid.prototype.refreshColumns = function () {\n this.isPreventScrollEvent = true;\n this.updateColumnObject();\n this.refresh();\n };\n /**\n * Export Grid data to Excel file(.xlsx).\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n */\n Grid.prototype.excelExport = function (excelExportProperties, isMultipleExport, \n /* tslint:disable-next-line:no-any */\n workbook, isBlob) {\n return this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, false, isBlob);\n };\n /**\n * Export Grid data to CSV file.\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n *\n */\n Grid.prototype.csvExport = function (excelExportProperties, \n /* tslint:disable-next-line:no-any */\n isMultipleExport, workbook, isBlob) {\n return this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, true, isBlob);\n };\n /**\n * Export Grid data to PDF document.\n * @param {pdfExportProperties} PdfExportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Define to enable multiple export.\n * @param {pdfDoc} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n *\n */\n Grid.prototype.pdfExport = function (pdfExportProperties, \n /* tslint:disable-next-line:no-any */\n isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(this, pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n Grid.prototype.groupColumn = function (columnName) {\n this.groupModule.groupColumn(columnName);\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n Grid.prototype.ungroupColumn = function (columnName) {\n this.groupModule.ungroupColumn(columnName);\n };\n /**\n * @hidden\n */\n Grid.prototype.isContextMenuOpen = function () {\n return this.contextMenuModule && this.contextMenuModule.isOpen;\n };\n /**\n * @hidden\n */\n Grid.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n /**\n * Destroys the given template reference.\n * @param {string[]} propertyNames - Defines the collection of template name.\n */\n Grid.prototype.destroyTemplate = function (propertyNames) {\n this.clearTemplate(propertyNames);\n };\n __decorate([\n Property([])\n ], Grid.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], Grid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowPaging\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], Grid.prototype, \"pageSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], Grid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], Grid.prototype, \"sortSettings\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowSelection\", void 0);\n __decorate([\n Property(-1)\n ], Grid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], Grid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], Grid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], Grid.prototype, \"filterSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowGrouping\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Complex({}, GroupSettings)\n ], Grid.prototype, \"groupSettings\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], Grid.prototype, \"editSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], Grid.prototype, \"aggregates\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property('auto')\n ], Grid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Grid.prototype, \"width\", void 0);\n __decorate([\n Property('Default')\n ], Grid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"childGrid\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"queryString\", void 0);\n __decorate([\n Property('AllPages')\n ], Grid.prototype, \"printMode\", void 0);\n __decorate([\n Property([])\n ], Grid.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], Grid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"query\", void 0);\n __decorate([\n Property('USD')\n ], Grid.prototype, \"currencyCode\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(0)\n ], Grid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], Grid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('All')\n ], Grid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeOpenColumnChooser\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"checkBoxChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataSourceChanged\", void 0);\n Grid = __decorate([\n NotifyPropertyChanges\n ], Grid);\n return Grid;\n}(Component));\nexport { Grid };\nGrid.Inject(Selection);\n","import { Browser } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, classList } from '@syncfusion/ej2-base';\nimport { setCssInGridPopUp, getActualPropFromColl, isActionPrevent, iterateExtend } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\n/**\n *\n * The `Sort` module is used to handle sorting action.\n */\nvar Sort = /** @class */ (function () {\n /**\n * Constructor for Grid sorting module\n * @hidden\n */\n function Sort(parent, sortSettings, sortedColumns, locator) {\n this.contentRefresh = true;\n this.isModelChanged = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.sortSettings = sortSettings;\n this.sortedColumns = sortedColumns;\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n /**\n * The function used to update sortSettings\n * @return {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n var sortedColumn = { field: this.columnName, direction: this.direction };\n var index;\n var gCols = this.parent.groupSettings.columns;\n var flag = false;\n if (!this.isMultiSort) {\n if (!gCols.length) {\n this.sortSettings.columns = [sortedColumn];\n }\n else {\n var sortedCols = [];\n for (var i = 0, len = gCols.length; i < len; i++) {\n index = this.getSortedColsIndexByField(gCols[i], sortedCols);\n if (this.columnName === gCols[i]) {\n flag = true;\n sortedCols.push(sortedColumn);\n }\n else {\n var sCol = this.getSortColumnFromField(gCols[i]);\n sortedCols.push({ field: sCol.field, direction: sCol.direction });\n }\n }\n if (!flag) {\n sortedCols.push(sortedColumn);\n }\n this.sortSettings.columns = sortedCols;\n }\n }\n else {\n index = this.getSortedColsIndexByField(this.columnName);\n if (index > -1) {\n this.sortSettings.columns.splice(index, 1);\n }\n this.sortSettings.columns.push(sortedColumn);\n this.sortSettings.columns = this.sortSettings.columns;\n }\n this.parent.dataBind();\n this.lastSortedCol = this.columnName;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Sort.prototype.onActionComplete = function (e) {\n var args = !this.isRemove ? {\n columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionComplete\n } : { requestType: 'sorting', type: events.actionComplete };\n this.isRemove = false;\n this.parent.trigger(events.actionComplete, extend(e, args));\n };\n /**\n * Sorts a column with the given options.\n * @param {string} columnName - Defines the column name to sort.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previously sorted columns are to be maintained.\n * @return {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n var gObj = this.parent;\n if (this.parent.getColumnByField(columnName).allowSorting === false || this.parent.isContextMenuOpen()) {\n return;\n }\n if (!gObj.allowMultiSorting) {\n isMultiSort = gObj.allowMultiSorting;\n }\n if (this.isActionPrevent()) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.sortColumn,\n arg1: columnName, arg2: direction, arg3: isMultiSort\n });\n return;\n }\n this.backupSettings();\n this.columnName = columnName;\n this.direction = direction;\n this.isMultiSort = isMultiSort;\n this.removeSortIcons();\n var column = gObj.getColumnHeaderByField(columnName);\n this.updateSortedCols(columnName, isMultiSort);\n this.updateModel();\n };\n Sort.prototype.backupSettings = function () {\n this.lastSortedCols = iterateExtend(this.sortSettings.columns);\n this.lastCols = this.sortedColumns;\n };\n Sort.prototype.restoreSettings = function () {\n this.isModelChanged = false;\n this.isMultiSort = true;\n this.parent.setProperties({ sortSettings: { columns: this.lastSortedCols } }, true);\n //this.parent.sortSettings.columns = this.lastSortedCols; \n this.sortedColumns = this.lastCols;\n this.isModelChanged = true;\n };\n Sort.prototype.updateSortedCols = function (columnName, isMultiSort) {\n if (!isMultiSort) {\n if (this.parent.allowGrouping) {\n for (var i = 0, len = this.sortedColumns.length; i < len; i++) {\n if (this.parent.groupSettings.columns.indexOf(this.sortedColumns[i]) < 0) {\n this.sortedColumns.splice(i, 1);\n len--;\n i--;\n }\n }\n }\n else {\n this.sortedColumns.splice(0, this.sortedColumns.length);\n }\n }\n if (this.sortedColumns.indexOf(columnName) < 0) {\n this.sortedColumns.push(columnName);\n }\n };\n /**\n * @hidden\n */\n Sort.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.contentRefresh) {\n var args = this.sortSettings.columns.length ? {\n columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionBegin\n } : { requestType: 'sorting', type: events.actionBegin, cancel: false };\n this.parent.notify(events.modelChanged, args);\n }\n this.refreshSortSettings();\n this.removeSortIcons();\n this.addSortIcons();\n };\n Sort.prototype.refreshSortSettings = function () {\n var _this = this;\n this.sortedColumns = [];\n this.sortSettings.columns.forEach(function (e) {\n _this.sortedColumns.push(e.field);\n });\n };\n /**\n * Clears all the sorted columns of the Grid.\n * @return {void}\n */\n Sort.prototype.clearSorting = function () {\n var cols = getActualPropFromColl(this.sortSettings.columns);\n if (this.isActionPrevent()) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearSorting });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeSortColumn(cols[i].field);\n }\n };\n Sort.prototype.isActionPrevent = function () {\n return isActionPrevent(this.parent);\n };\n /**\n * Remove sorted column by field name.\n * @param {string} field - Defines the column field name to remove sort.\n * @return {void}\n * @hidden\n */\n Sort.prototype.removeSortColumn = function (field) {\n var gObj = this.parent;\n var cols = this.sortSettings.columns;\n if (this.sortedColumns.indexOf(field) < 0) {\n return;\n }\n if (this.isActionPrevent()) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.removeSortColumn, arg1: field });\n return;\n }\n this.backupSettings();\n this.removeSortIcons();\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === field) {\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1) {\n continue;\n }\n this.sortedColumns.splice(this.sortedColumns.indexOf(cols[i].field), 1);\n cols.splice(i, 1);\n this.isRemove = true;\n if (this.isModelChanged) {\n this.parent.notify(events.modelChanged, {\n requestType: 'sorting', type: events.actionBegin\n });\n }\n break;\n }\n }\n this.addSortIcons();\n };\n Sort.prototype.getSortedColsIndexByField = function (field, sortedColumns) {\n var cols = sortedColumns ? sortedColumns : this.sortSettings.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n Sort.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.sortSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n this.isMultiSort = this.sortSettings.columns.length > 1;\n for (var _i = 0, _a = gObj.sortSettings.columns.slice(); _i < _a.length; _i++) {\n var col = _a[_i];\n if (this.sortedColumns.indexOf(col.field) > -1) {\n this.sortColumn(col.field, col.direction, true);\n }\n }\n this.isMultiSort = false;\n this.contentRefresh = true;\n }\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.sortComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressed, this);\n this.parent.on(events.cancelBegin, this.cancelBeginEvent, this);\n };\n /**\n * @hidden\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.sortComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressed);\n this.parent.off(events.cancelBegin, this.cancelBeginEvent);\n };\n /**\n * To destroy the sorting\n * @return {void}\n * @hidden\n */\n Sort.prototype.destroy = function () {\n this.isModelChanged = false;\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n if (this.parent.element.querySelector('.e-gridpopup').querySelectorAll('.e-sortdirect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n this.clearSorting();\n this.isModelChanged = true;\n this.removeEventListener();\n };\n Sort.prototype.cancelBeginEvent = function (e) {\n if (e.requestType === 'sorting') {\n this.restoreSettings();\n this.refreshSortIcons();\n this.isMultiSort = true;\n }\n };\n Sort.prototype.clickHandler = function (e) {\n this.popUpClickHandler(e);\n var target = closest(e.target, '.e-headercell');\n if (target && !e.target.classList.contains('e-grptogglebtn') &&\n !e.target.classList.contains('e-stackedheadercell') &&\n !e.target.classList.contains('e-stackedheadercelldiv') &&\n !(target.classList.contains('e-resized')) &&\n !e.target.classList.contains('e-rhandler') &&\n !e.target.classList.contains('e-columnmenu') &&\n !e.target.classList.contains('e-filtermenudiv')) {\n var gObj = this.parent;\n var colObj = gObj.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n var direction = !target.querySelectorAll('.e-ascending').length ? 'Ascending' :\n 'Descending';\n if (colObj.type !== 'checkbox') {\n this.initiateSort(target, e, colObj);\n if (Browser.isDevice) {\n this.showPopUp(e);\n }\n }\n }\n if (target) {\n target.classList.remove('e-resized');\n }\n };\n Sort.prototype.keyPressed = function (e) {\n var ele = e.target;\n if (!this.parent.isEdit && (e.action === 'enter' || e.action === 'ctrlEnter' || e.action === 'shiftEnter')\n && closest(ele, '.e-headercell')) {\n var target = this.focus.getFocusedElement();\n if (isNullOrUndefined(target) || !target.classList.contains('e-headercell')\n || !target.querySelector('.e-headercelldiv')) {\n return;\n }\n var col = this.parent.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n this.initiateSort(target, e, col);\n }\n };\n Sort.prototype.initiateSort = function (target, e, column) {\n var gObj = this.parent;\n var field = column.field;\n var direction = !target.querySelectorAll('.e-ascending').length ? 'Ascending' :\n 'Descending';\n if (e.shiftKey || (this.sortSettings.allowUnsort && target.querySelectorAll('.e-descending').length)\n && !(gObj.groupSettings.columns.indexOf(field) > -1)) {\n this.removeSortColumn(field);\n }\n else {\n this.sortColumn(field, direction, e.ctrlKey || this.enableSortMultiTouch);\n }\n };\n Sort.prototype.showPopUp = function (e) {\n var target = closest(e.target, '.e-headercell');\n if (!isNullOrUndefined(target) || this.parent.isContextMenuOpen()) {\n setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-sortdirect e-icons e-icon-sortdirect' + (this.sortedColumns.length > 1 ? ' e-spanclicked' : ''));\n }\n };\n Sort.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains('e-rowcell') ||\n closest(target, '.e-gridpopup')) {\n if (target.classList.contains('e-sortdirect')) {\n if (!target.classList.contains('e-spanclicked')) {\n target.classList.add('e-spanclicked');\n this.enableSortMultiTouch = true;\n }\n else {\n target.classList.remove('e-spanclicked');\n this.enableSortMultiTouch = false;\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n }\n }\n else {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Sort.prototype.addSortIcons = function () {\n var gObj = this.parent;\n var header;\n var filterElement;\n var cols = this.sortSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\n this.aria.setSort(header, cols[i].direction);\n if (this.isMultiSort && cols.length > 1) {\n header.querySelector('.e-headercelldiv').insertBefore(this.parent.createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }), header.querySelector('.e-headertext'));\n }\n filterElement = header.querySelector('.e-sortfilterdiv');\n if (cols[i].direction === 'Ascending') {\n classList(filterElement, ['e-ascending', 'e-icon-ascending'], []);\n }\n else {\n classList(filterElement, ['e-descending', 'e-icon-descending'], []);\n }\n }\n };\n Sort.prototype.removeSortIcons = function (position) {\n var gObj = this.parent;\n var header;\n var cols = this.sortSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = position ? position : 0, len = !isNullOrUndefined(position) ? position + 1 : cols.length; i < len; i++) {\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1 &&\n (isNullOrUndefined(header) || !header.querySelector('.e-sortfilterdiv'))) {\n continue;\n }\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n this.aria.setSort(header, 'none');\n classList(header.querySelector('.e-sortfilterdiv'), [], ['e-descending', 'e-icon-descending', 'e-ascending', 'e-icon-ascending']);\n if (header.querySelector('.e-sortnumber')) {\n header.querySelector('.e-headercelldiv').removeChild(header.querySelector('.e-sortnumber'));\n }\n }\n };\n Sort.prototype.getSortColumnFromField = function (field) {\n for (var i = 0, len = this.sortSettings.columns.length; i < len; i++) {\n if (this.sortSettings.columns[i].field === field) {\n return this.sortSettings.columns[i];\n }\n }\n return false;\n };\n Sort.prototype.updateAriaAttr = function () {\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var _i = 0, _a = this.sortedColumns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (fieldNames.indexOf(col) === -1) {\n continue;\n }\n var header = this.parent.getColumnHeaderByField(col);\n this.aria.setSort(header, this.getSortColumnFromField(col).direction);\n }\n };\n Sort.prototype.refreshSortIcons = function (params) {\n if (params === void 0) { params = { args: { isFrozen: false } }; }\n if (!params.args.isFrozen) {\n this.removeSortIcons();\n this.isMultiSort = true;\n this.removeSortIcons();\n this.addSortIcons();\n this.isMultiSort = false;\n this.updateAriaAttr();\n }\n };\n return Sort;\n}());\nexport { Sort };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { createElement, classList, append } from '@syncfusion/ej2-base';\n/**\n * `NumericContainer` module handles rendering and refreshing numeric container.\n */\nvar NumericContainer = /** @class */ (function () {\n /**\n * Constructor for numericContainer module\n * @hidden\n */\n function NumericContainer(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render numericContainer\n * @hidden\n */\n NumericContainer.prototype.render = function () {\n this.pagerElement = this.pagerModule.element;\n this.renderNumericContainer();\n this.refreshNumericLinks();\n this.wireEvents();\n };\n /**\n * Refreshes the numeric container of Pager.\n */\n NumericContainer.prototype.refresh = function () {\n this.pagerModule.updateTotalPages();\n if (this.links.length) {\n this.updateLinksHtml();\n }\n this.updateStyles();\n };\n /**\n * The function is used to refresh refreshNumericLinks\n * @hidden\n */\n NumericContainer.prototype.refreshNumericLinks = function () {\n var link;\n var pagerObj = this.pagerModule;\n var div = pagerObj.element.querySelector('.e-numericcontainer');\n var frag = document.createDocumentFragment();\n div.innerHTML = '';\n for (var i = 1; i <= pagerObj.pageCount; i++) {\n link = createElement('a', {\n className: 'e-link e-numericitem e-spacing e-pager-default',\n attrs: { role: 'link', tabindex: '-1', 'aria-label': 'Goto Page ' + i,\n href: 'javascript:void(0);', name: 'Goto page' + i }\n });\n if (pagerObj.currentPage === i) {\n classList(link, ['e-currentitem', 'e-active'], ['e-pager-default']);\n }\n frag.appendChild(link);\n }\n div.appendChild(frag);\n this.links = [].slice.call(div.childNodes);\n };\n /**\n * Binding events to the element while component creation\n * @hidden\n */\n NumericContainer.prototype.wireEvents = function () {\n EventHandler.add(this.pagerElement, 'click', this.clickHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy\n * @hidden\n */\n NumericContainer.prototype.unwireEvents = function () {\n EventHandler.remove(this.pagerElement, 'click', this.clickHandler);\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n NumericContainer.prototype.destroy = function () {\n this.unwireEvents();\n };\n NumericContainer.prototype.renderNumericContainer = function () {\n this.element = createElement('div', {\n className: 'e-pagercontainer', attrs: { 'role': 'navigation' }\n });\n this.renderFirstNPrev(this.element);\n this.renderPrevPagerSet(this.element);\n this.element.appendChild(createElement('div', { className: 'e-numericcontainer' }));\n this.renderNextPagerSet(this.element);\n this.renderNextNLast(this.element);\n this.pagerModule.element.appendChild(this.element);\n };\n NumericContainer.prototype.renderFirstNPrev = function (pagerContainer) {\n this.first = createElement('div', {\n className: 'e-first e-icons e-icon-first',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n tabindex: '-1'\n }\n });\n this.prev = createElement('div', {\n className: 'e-prev e-icons e-icon-prev',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n tabindex: '-1'\n }\n });\n append([this.first, this.prev], pagerContainer);\n };\n NumericContainer.prototype.renderPrevPagerSet = function (pagerContainer) {\n var prevPager = createElement('div');\n this.PP = createElement('a', {\n className: 'e-link e-pp e-spacing', innerHTML: '...',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPagerTooltip'), role: 'link',\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n href: 'javascript:void(0);'\n }\n });\n prevPager.appendChild(this.PP);\n pagerContainer.appendChild(prevPager);\n };\n NumericContainer.prototype.renderNextPagerSet = function (pagerContainer) {\n var nextPager = createElement('div');\n this.NP = createElement('a', {\n className: 'e-link e-np e-spacing',\n innerHTML: '...', attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPagerTooltip'), role: 'link',\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n href: 'javascript:void(0);'\n }\n });\n nextPager.appendChild(this.NP);\n pagerContainer.appendChild(nextPager);\n };\n NumericContainer.prototype.renderNextNLast = function (pagerContainer) {\n this.next = createElement('div', {\n className: 'e-next e-icons e-icon-next',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n tabindex: '-1'\n }\n });\n this.last = createElement('div', {\n className: 'e-last e-icons e-icon-last',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n tabindex: '-1'\n }\n });\n append([this.next, this.last], pagerContainer);\n };\n NumericContainer.prototype.clickHandler = function (e) {\n var pagerObj = this.pagerModule;\n var target = e.target;\n pagerObj.previousPageNo = pagerObj.currentPage;\n if (!target.classList.contains('e-disable') && !isNullOrUndefined(target.getAttribute('index'))) {\n pagerObj.currentPage = parseInt(target.getAttribute('index'), 10);\n pagerObj.dataBind();\n }\n return false;\n };\n NumericContainer.prototype.updateLinksHtml = function () {\n var pagerObj = this.pagerModule;\n var currentPageSet;\n var pageNo;\n pagerObj.currentPage = pagerObj.totalPages === 1 ? 1 : pagerObj.currentPage;\n if (pagerObj.currentPage > pagerObj.totalPages && pagerObj.totalPages) {\n pagerObj.currentPage = pagerObj.totalPages;\n }\n currentPageSet = parseInt((pagerObj.currentPage / pagerObj.pageCount).toString(), 10);\n if (pagerObj.currentPage % pagerObj.pageCount === 0 && currentPageSet > 0) {\n currentPageSet = currentPageSet - 1;\n }\n for (var i = 0; i < pagerObj.pageCount; i++) {\n pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n if (pageNo <= pagerObj.totalPages) {\n this.links[i].style.display = '';\n this.links[i].setAttribute('index', pageNo.toString());\n this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n if (pagerObj.currentPage !== pageNo) {\n this.links[i].classList.add('e-pager-default');\n }\n else {\n this.links[i].classList.remove('e-pager-default');\n }\n }\n else {\n this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n this.links[i].style.display = 'none';\n }\n classList(this.links[i], [], ['e-currentitem', 'e-active']);\n }\n this.first.setAttribute('index', '1');\n this.last.setAttribute('index', pagerObj.totalPages.toString());\n this.prev.setAttribute('index', (pagerObj.currentPage - 1).toString());\n this.next.setAttribute('index', (pagerObj.currentPage + 1).toString());\n this.pagerElement.querySelector('.e-mfirst').setAttribute('index', '1');\n this.pagerElement.querySelector('.e-mlast').setAttribute('index', pagerObj.totalPages.toString());\n this.pagerElement.querySelector('.e-mprev').setAttribute('index', (pagerObj.currentPage - 1).toString());\n this.pagerElement.querySelector('.e-mnext').setAttribute('index', (pagerObj.currentPage + 1).toString());\n this.PP.setAttribute('index', (parseInt(this.links[0].getAttribute('index'), 10) - pagerObj.pageCount).toString());\n this.NP.setAttribute('index', (parseInt(this.links[this.links.length - 1].getAttribute('index'), 10) + 1).toString());\n };\n NumericContainer.prototype.updateStyles = function () {\n this.updateFirstNPrevStyles();\n this.updatePrevPagerSetStyles();\n this.updateNextPagerSetStyles();\n this.updateNextNLastStyles();\n if (this.links.length) {\n classList(this.links[(this.pagerModule.currentPage - 1) % this.pagerModule.pageCount], ['e-currentitem', 'e-active'], []);\n }\n };\n NumericContainer.prototype.updateFirstNPrevStyles = function () {\n var firstPage = ['e-firstpage', 'e-pager-default'];\n var firstPageDisabled = ['e-firstpagedisabled', 'e-disable'];\n var prevPage = ['e-prevpage', 'e-pager-default'];\n var prevPageDisabled = ['e-prevpagedisabled', 'e-disable'];\n if (this.pagerModule.totalPages > 0 && this.pagerModule.currentPage > 1) {\n classList(this.prev, prevPage, prevPageDisabled);\n classList(this.first, firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPage, prevPageDisabled);\n }\n else {\n classList(this.prev, prevPageDisabled, prevPage);\n classList(this.first, firstPageDisabled, firstPage);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPageDisabled, prevPage);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPageDisabled, firstPage);\n }\n };\n NumericContainer.prototype.updatePrevPagerSetStyles = function () {\n if (this.pagerModule.currentPage > this.pagerModule.pageCount) {\n classList(this.PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n else {\n classList(this.PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n };\n NumericContainer.prototype.updateNextPagerSetStyles = function () {\n var pagerObj = this.pagerModule;\n var firstPage = this.links[0].innerHTML.replace(pagerObj.customText, '');\n if (!firstPage.length || !this.links.length || (parseInt(firstPage, 10) + pagerObj.pageCount > pagerObj.totalPages)) {\n classList(this.NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n else {\n classList(this.NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n };\n NumericContainer.prototype.updateNextNLastStyles = function () {\n var lastPage = ['e-lastpage', 'e-pager-default'];\n var lastPageDisabled = ['e-lastpagedisabled', 'e-disable'];\n var nextPage = ['e-nextpage', 'e-pager-default'];\n var nextPageDisabled = ['e-nextpagedisabled', 'e-disable'];\n var pagerObj = this.pagerModule;\n if (pagerObj.currentPage === pagerObj.totalPages || pagerObj.totalRecordsCount === 0) {\n classList(this.last, lastPageDisabled, lastPage);\n classList(this.next, nextPageDisabled, nextPage);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPageDisabled, lastPage);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPageDisabled, nextPage);\n }\n else {\n classList(this.last, lastPage, lastPageDisabled);\n classList(this.next, nextPage, nextPageDisabled);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPage, lastPageDisabled);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPage, nextPageDisabled);\n }\n };\n return NumericContainer;\n}());\nexport { NumericContainer };\n","import { createElement, append } from '@syncfusion/ej2-base';\n/**\n * `PagerMessage` module is used to display pager information.\n */\nvar PagerMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n * @hidden\n */\n function PagerMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render pager message\n * @hidden\n */\n PagerMessage.prototype.render = function () {\n var div = createElement('div', { className: 'e-parentmsgbar', attrs: { 'aria-label': 'Pager Information' } });\n this.pageNoMsgElem = createElement('span', { className: 'e-pagenomsg', styles: 'textalign:right' });\n this.pageCountMsgElem = createElement('span', { className: 'e-pagecountmsg', styles: 'textalign:right' });\n append([this.pageNoMsgElem, this.pageCountMsgElem], div);\n this.pagerModule.element.appendChild(div);\n this.refresh();\n };\n /**\n * Refreshes the pager information.\n */\n PagerMessage.prototype.refresh = function () {\n var pagerObj = this.pagerModule;\n this.pageNoMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('currentPageInfo'), [pagerObj.totalRecordsCount === 0 ? 0 :\n pagerObj.currentPage, pagerObj.totalPages || 0]) + ' ';\n this.pageCountMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('totalItemsInfo'), [pagerObj.totalRecordsCount || 0]);\n this.pageNoMsgElem.parentElement.setAttribute('aria-label', this.pageNoMsgElem.textContent + this.pageCountMsgElem.textContent);\n };\n /**\n * Hides the Pager information.\n */\n PagerMessage.prototype.hideMessage = function () {\n if (this.pageNoMsgElem) {\n this.pageNoMsgElem.style.display = 'none';\n }\n if (this.pageCountMsgElem) {\n this.pageCountMsgElem.style.display = 'none';\n }\n };\n /**\n * Shows the Pager information.\n */\n PagerMessage.prototype.showMessage = function () {\n if (!this.pageNoMsgElem) {\n this.render();\n }\n this.pageNoMsgElem.style.display = '';\n this.pageCountMsgElem.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n PagerMessage.prototype.destroy = function () {\n //destroy\n };\n PagerMessage.prototype.format = function (str, args) {\n var regx;\n for (var i = 0; i < args.length; i++) {\n regx = new RegExp('\\\\{' + (i) + '\\\\}', 'gm');\n str = str.replace(regx, args[i].toString());\n }\n return str;\n };\n return PagerMessage;\n}());\nexport { PagerMessage };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, L10n, Browser } from '@syncfusion/ej2-base';\nimport { createElement, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, Event, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { NumericContainer } from './numeric-container';\nimport { PagerMessage } from './pager-message';\nimport { appendChildren } from '../grid/base/util';\n/**\n * Represents the `Pager` component.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Pager = /** @class */ (function (_super) {\n __extends(Pager, _super);\n /**\n * Constructor for creating the component.\n * @hidden\n */\n function Pager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultConstants = {\n currentPageInfo: '{0} of {1} pages',\n totalItemsInfo: '({0} items)',\n firstPageTooltip: 'Go to first page',\n lastPageTooltip: 'Go to last page',\n nextPageTooltip: 'Go to next page',\n previousPageTooltip: 'Go to previous page',\n nextPagerTooltip: 'Go to next pager',\n previousPagerTooltip: 'Go to previous pager',\n pagerDropDown: 'Items per page',\n pagerAllDropDown: 'Items',\n All: 'All'\n };\n /**\n * `containerModule` is used to manipulate numeric container behavior of Pager.\n */\n _this.containerModule = new NumericContainer(_this);\n /**\n * `pagerMessageModule` is used to manipulate pager message of Pager.\n */\n _this.pagerMessageModule = new PagerMessage(_this);\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n * @hidden\n */\n Pager.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableExternalMessage) {\n modules.push({\n member: 'externalMessage',\n args: [this]\n });\n }\n if (this.checkpagesizes()) {\n modules.push({\n member: 'pagerdropdown',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initialize the event handler\n * @hidden\n */\n Pager.prototype.preRender = function () {\n //preRender\n };\n /**\n * To Initialize the component rendering\n */\n Pager.prototype.render = function () {\n if (this.template) {\n this.pagerTemplate();\n }\n else {\n this.initLocalization();\n this.updateRTL();\n this.totalRecordsCount = this.totalRecordsCount || 0;\n this.renderFirstPrevDivForDevice();\n this.containerModule.render();\n if (this.enablePagerMessage) {\n this.pagerMessageModule.render();\n }\n this.renderNextLastDivForDevice();\n if (this.checkpagesizes() && this.pagerdropdownModule) {\n this.pagerdropdownModule.render();\n }\n this.addAriaLabel();\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.render();\n }\n this.refresh();\n this.trigger('created', { 'currentPage': this.currentPage, 'totalRecordsCount': this.totalRecordsCount });\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @hidden\n */\n Pager.prototype.getPersistData = function () {\n var keyEntity = ['currentPage', 'pageSize'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To destroy the Pager component.\n * @method destroy\n * @return {void}\n */\n Pager.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.containerModule.destroy();\n this.pagerMessageModule.destroy();\n this.element.innerHTML = '';\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Pager.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n Pager.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.isDestroyed) {\n return;\n }\n if (newProp.pageCount !== oldProp.pageCount) {\n this.containerModule.refreshNumericLinks();\n this.containerModule.refresh();\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'currentPage':\n if (this.checkGoToPage(newProp.currentPage, oldProp.currentPage)) {\n this.currentPageChanged();\n }\n break;\n case 'pageSize':\n case 'totalRecordsCount':\n case 'customText':\n if (this.checkpagesizes() && this.pagerdropdownModule) {\n this.pagerdropdownModule.setDropDownValue('value', this.pageSize);\n }\n this.refresh();\n break;\n case 'pageSizes':\n if (this.checkpagesizes()) {\n this.pagerdropdownModule.destroy();\n this.pagerdropdownModule.render();\n }\n this.refresh();\n break;\n case 'template':\n this.templateFn = this.compile(this.template);\n this.refresh();\n break;\n case 'locale':\n this.initLocalization();\n this.refresh();\n break;\n case 'enableExternalMessage':\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.render();\n }\n break;\n case 'externalMessage':\n if (this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'enablePagerMessage':\n if (this.enablePagerMessage) {\n this.pagerMessageModule.showMessage();\n }\n else {\n this.pagerMessageModule.hideMessage();\n }\n break;\n }\n }\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Pager.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n /**\n * Navigate to target page by given number.\n * @param {number} pageNo - Defines page number.\n * @return {void}\n */\n Pager.prototype.goToPage = function (pageNo) {\n if (this.checkGoToPage(pageNo)) {\n this.currentPage = pageNo;\n this.dataBind();\n }\n };\n Pager.prototype.checkpagesizes = function () {\n if (this.pageSizes === true || this.pageSizes.length) {\n return true;\n }\n return false;\n };\n Pager.prototype.checkGoToPage = function (newPageNo, oldPageNo) {\n if (newPageNo !== this.currentPage) {\n this.previousPageNo = this.currentPage;\n }\n if (!isNullOrUndefined(oldPageNo)) {\n this.previousPageNo = oldPageNo;\n }\n if (this.previousPageNo !== newPageNo && (newPageNo >= 1 && newPageNo <= this.totalPages)) {\n return true;\n }\n return false;\n };\n Pager.prototype.currentPageChanged = function () {\n if (this.enableQueryString) {\n this.updateQueryString(this.currentPage);\n }\n var args = { currentPage: this.currentPage, cancel: false };\n this.trigger('click', args);\n if (!args.cancel) {\n this.refresh();\n }\n };\n Pager.prototype.pagerTemplate = function () {\n var result;\n this.element.classList.add('e-pagertemplate');\n this.compile(this.template);\n var data = {\n currentPage: this.currentPage, pageSize: this.pageSize, pageCount: this.pageCount,\n totalRecordsCount: this.totalRecordsCount, totalPages: this.totalPages\n };\n result = this.getPagerTemplate()(data);\n appendChildren(this.element, result);\n };\n /** @hidden */\n Pager.prototype.updateTotalPages = function () {\n this.totalPages = (this.totalRecordsCount % this.pageSize === 0) ? (this.totalRecordsCount / this.pageSize) :\n (parseInt((this.totalRecordsCount / this.pageSize).toString(), 10) + 1);\n };\n /** @hidden */\n Pager.prototype.getPagerTemplate = function () {\n return this.templateFn;\n };\n Pager.prototype.compile = function (template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n this.templateFn = templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n this.templateFn = templateCompiler(template);\n }\n }\n return undefined;\n };\n /**\n * Refreshes page count, pager information and external message.\n * @return {void}\n */\n Pager.prototype.refresh = function () {\n if (this.template) {\n this.element.innerHTML = '';\n this.updateTotalPages();\n this.pagerTemplate();\n }\n else {\n this.updateRTL();\n this.containerModule.refresh();\n if (this.enablePagerMessage) {\n this.pagerMessageModule.refresh();\n }\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\n }\n };\n Pager.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Pager.prototype.initLocalization = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultConstants, this.locale);\n };\n Pager.prototype.updateQueryString = function (value) {\n var updatedUrl = this.getUpdatedURL(window.location.href, 'page', value.toString());\n window.history.pushState({ path: updatedUrl }, '', updatedUrl);\n };\n Pager.prototype.getUpdatedURL = function (uri, key, value) {\n var regx = new RegExp('([?|&])' + key + '=.*?(&|#|$)', 'i');\n if (uri.match(regx)) {\n return uri.replace(regx, '$1' + key + '=' + value + '$2');\n }\n else {\n var hash = '';\n if (uri.indexOf('#') !== -1) {\n hash = uri.replace(/.*#/, '#');\n uri = uri.replace(/#.*/, '');\n }\n return uri + (uri.indexOf('?') !== -1 ? '&' : '?') + key + '=' + value + hash;\n }\n };\n Pager.prototype.renderFirstPrevDivForDevice = function () {\n this.element.appendChild(createElement('div', {\n className: 'e-mfirst e-icons e-icon-first',\n attrs: { title: this.getLocalizedLabel('firstPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(createElement('div', {\n className: 'e-mprev e-icons e-icon-prev',\n attrs: { title: this.getLocalizedLabel('previousPageTooltip'), tabindex: '-1' }\n }));\n };\n Pager.prototype.renderNextLastDivForDevice = function () {\n this.element.appendChild(createElement('div', {\n className: 'e-mnext e-icons e-icon-next',\n attrs: { title: this.getLocalizedLabel('nextPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(createElement('div', {\n className: 'e-mlast e-icons e-icon-last',\n attrs: { title: this.getLocalizedLabel('lastPageTooltip'), tabindex: '-1' }\n }));\n };\n Pager.prototype.addAriaLabel = function () {\n var _this = this;\n var classList = ['.e-mfirst', '.e-mprev', '.e-mnext', '.e-mlast'];\n if (!Browser.isDevice) {\n classList.forEach(function (value) {\n var element = _this.element.querySelector(value);\n element.setAttribute('aria-label', element.getAttribute('title'));\n });\n }\n };\n __decorate([\n Property(false)\n ], Pager.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], Pager.prototype, \"enableExternalMessage\", void 0);\n __decorate([\n Property(true)\n ], Pager.prototype, \"enablePagerMessage\", void 0);\n __decorate([\n Property(12)\n ], Pager.prototype, \"pageSize\", void 0);\n __decorate([\n Property(10)\n ], Pager.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], Pager.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"externalMessage\", void 0);\n __decorate([\n Property(false)\n ], Pager.prototype, \"pageSizes\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], Pager.prototype, \"customText\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"dropDownChanged\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"created\", void 0);\n Pager = __decorate([\n NotifyPropertyChanges\n ], Pager);\n return Pager;\n}(Component));\nexport { Pager };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * `PagerDropDown` module handles selected pageSize from DropDownList.\n */\nvar PagerDropDown = /** @class */ (function () {\n /**\n * Constructor for pager module\n * @hidden\n */\n function PagerDropDown(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n * @hidden\n */\n PagerDropDown.prototype.getModuleName = function () {\n return 'pagerdropdown';\n };\n /**\n * The function is used to render pager dropdown\n * @hidden\n */\n PagerDropDown.prototype.render = function () {\n var pagerObj = this.pagerModule;\n this.pagerDropDownDiv = createElement('div', { className: 'e-pagesizes' });\n var dropDownDiv = createElement('div', { className: 'e-pagerdropdown' });\n var defaultTextDiv = createElement('div', { className: 'e-pagerconstant' });\n var input = createElement('input', { attrs: { type: 'text', tabindex: '1' } });\n this.pagerCons = createElement('span', { className: 'e-constant', innerHTML: this.pagerModule.getLocalizedLabel('pagerDropDown') });\n dropDownDiv.appendChild(input);\n defaultTextDiv.appendChild(this.pagerCons);\n this.pagerDropDownDiv.appendChild(dropDownDiv);\n this.pagerDropDownDiv.appendChild(defaultTextDiv);\n this.pagerModule.element.appendChild(this.pagerDropDownDiv);\n var pageSizesModule = this.pagerModule.pageSizes;\n var pageSizesArray = (pageSizesModule.length ? this.convertValue(pageSizesModule) :\n [this.pagerModule.getLocalizedLabel('All'), '5', '10', '12', '20']);\n var defaultValue = this.pagerModule.pageSize;\n this.dropDownListObject = new DropDownList({\n dataSource: pageSizesArray,\n value: defaultValue.toString(),\n change: this.onChange.bind(this),\n cssClass: 'e-alldrop'\n });\n this.dropDownListObject.appendTo(input);\n if (pageSizesModule.length) {\n this.dropDownListObject.element.value = this.pagerModule.pageSize.toString();\n }\n pagerObj.pageSize = defaultValue;\n pagerObj.dataBind();\n pagerObj.trigger('dropDownChanged', { pageSize: defaultValue });\n this.addEventListener();\n };\n /**\n * For internal use only - Get the pagesize.\n * @private\n * @hidden\n */\n PagerDropDown.prototype.onChange = function (e) {\n if (this.dropDownListObject.value === this.pagerModule.getLocalizedLabel('All')) {\n this.pagerModule.pageSize = this.pagerModule.totalRecordsCount;\n this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerAllDropDown');\n e.value = this.pagerModule.pageSize;\n if (document.getElementsByClassName('e-popup-open e-alldrop').length) {\n document.getElementsByClassName('e-popup-open e-alldrop')[0].style.display = 'none';\n }\n }\n else {\n this.pagerModule.pageSize = parseInt(this.dropDownListObject.value, 10);\n if (this.pagerCons.innerHTML !== this.pagerModule.getLocalizedLabel('pagerDropDown')) {\n this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerDropDown');\n }\n }\n this.pagerModule.dataBind();\n this.pagerModule.trigger('dropDownChanged', { pageSize: this.dropDownListObject.value });\n };\n PagerDropDown.prototype.beforeValueChange = function (prop) {\n if (typeof prop.newProp.value === 'number') {\n var val = prop.newProp.value.toString();\n prop.newProp.value = val;\n }\n };\n PagerDropDown.prototype.convertValue = function (pageSizeValue) {\n var item = pageSizeValue;\n for (var i = 0; i < item.length; i++) {\n item[i] = typeof item[i] === 'number' ? item[i].toString() : item[i];\n }\n return item;\n };\n PagerDropDown.prototype.setDropDownValue = function (prop, value) {\n if (this.dropDownListObject) {\n this.dropDownListObject[prop] = value;\n }\n };\n PagerDropDown.prototype.addEventListener = function () {\n this.dropDownListObject.on('beforeValueChange', this.beforeValueChange, this);\n };\n PagerDropDown.prototype.removeEventListener = function () {\n this.dropDownListObject.off('beforeValueChange', this.beforeValueChange);\n };\n /**\n * To destroy the Pagerdropdown\n * @method destroy\n * @return {void}\n * @hidden\n */\n PagerDropDown.prototype.destroy = function (args) {\n if (this.dropDownListObject && !this.dropDownListObject.isDestroyed) {\n this.removeEventListener();\n this.dropDownListObject.destroy();\n remove(this.pagerDropDownDiv);\n }\n };\n return PagerDropDown;\n}());\nexport { PagerDropDown };\n","import { createElement, remove } from '@syncfusion/ej2-base';\n/**\n * `ExternalMessage` module is used to display user provided message.\n */\nvar ExternalMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n * @param {Pager} pagerModule?\n * @returns defaultType\n * @hidden\n */\n function ExternalMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExternalMessage.prototype.getModuleName = function () {\n return 'externalMessage';\n };\n /**\n * The function is used to render pager externalMessage\n * @hidden\n */\n ExternalMessage.prototype.render = function () {\n this.element = createElement('div', { className: 'e-pagerexternalmsg', attrs: { 'aria-label': 'Pager external message' } });\n this.pagerModule.element.appendChild(this.element);\n this.refresh();\n };\n /**\n * Refreshes the external message of Pager.\n */\n ExternalMessage.prototype.refresh = function () {\n if (this.pagerModule.externalMessage && this.pagerModule.externalMessage.toString().length) {\n this.showMessage();\n this.element.innerHTML = this.pagerModule.externalMessage;\n }\n else {\n this.hideMessage();\n }\n };\n /**\n * Hides the external message of Pager.\n */\n ExternalMessage.prototype.hideMessage = function () {\n this.element.style.display = 'none';\n };\n /**\n * Shows the external message of the Pager.\n */\n ExternalMessage.prototype.showMessage = function () {\n this.element.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n ExternalMessage.prototype.destroy = function () {\n remove(this.element);\n };\n return ExternalMessage;\n}());\nexport { ExternalMessage };\n","import { extend } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Pager } from '../../pager/pager';\nimport { PagerDropDown } from '../../pager/pager-dropdown';\nimport { ExternalMessage } from '../../pager/external-message';\nimport { extend as gridExtend, getActualProperties, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nPager.Inject(ExternalMessage, PagerDropDown);\n/**\n * The `Page` module is used to render pager and handle paging action.\n */\nvar Page = /** @class */ (function () {\n /**\n * Constructor for the Grid paging module\n * @hidden\n */\n function Page(parent, pageSettings) {\n this.parent = parent;\n this.pageSettings = pageSettings;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * The function used to render pager from grid pageSettings\n * @return {void}\n * @hidden\n */\n Page.prototype.render = function () {\n var gObj = this.parent;\n var pagerObj;\n this.pagerDestroy();\n if (!isNullOrUndefined(this.parent.pagerTemplate)) {\n this.pageSettings.template = this.parent.pagerTemplate;\n }\n this.element = this.parent.createElement('div', { className: 'e-gridpager' });\n pagerObj = gridExtend({}, extend({}, getActualProperties(this.pageSettings)), {\n click: this.clickHandler.bind(this),\n dropDownChanged: this.onSelect.bind(this),\n enableRtl: gObj.enableRtl, locale: gObj.locale,\n created: this.addAriaAttr.bind(this)\n }, ['parentObj', 'propName']);\n this.pagerObj = new Pager(pagerObj);\n };\n Page.prototype.onSelect = function (e) {\n this.pageSettings.pageSize = e.pageSize;\n this.pageSettings.currentPage = 1;\n };\n Page.prototype.addAriaAttr = function () {\n var _this = this;\n if (!(this.pageSettings.template)) {\n var numericContainerNew = this.parent.createElement('div', { className: 'e-numericcontainer' });\n var pagerContainer = this.element.querySelector('.e-pagercontainer');\n var frag = document.createDocumentFragment();\n var numericContainer = this.element.querySelector('.e-numericcontainer');\n var links = numericContainer.querySelectorAll('a');\n for (var i = 0; i < links.length; i++) {\n if (this.parent.getContentTable()) {\n links[i].setAttribute('aria-owns', this.parent.getContentTable().id);\n }\n else {\n links[i].setAttribute('aria-owns', this.parent.element.getAttribute('id') + '_content_table');\n }\n var numericContainerDiv = this.parent.createElement('div');\n numericContainerDiv.appendChild(links[i]);\n frag.appendChild(numericContainerDiv);\n }\n numericContainerNew.appendChild(frag);\n pagerContainer.replaceChild(numericContainerNew, numericContainer);\n var classList = ['.e-mfirst', '.e-mprev', '.e-first', '.e-prev', '.e-next', '.e-last', '.e-mnext', '.e-mlast'];\n classList.forEach(function (value) {\n var element = _this.element.querySelector(value);\n if (_this.parent.getContentTable()) {\n element.setAttribute('aria-owns', _this.parent.getContentTable().id);\n }\n });\n }\n };\n Page.prototype.dataReady = function (e) {\n this.updateModel(e);\n };\n /**\n * Refreshes the page count, pager information, and external message.\n * @return {void}\n */\n Page.prototype.refresh = function () {\n this.pagerObj.refresh();\n };\n /**\n * Navigates to the target page according to the given number.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.pagerObj.goToPage(pageNo);\n };\n /**\n * The function used to update pageSettings model\n * @return {void}\n * @hidden\n */\n Page.prototype.updateModel = function (e) {\n this.parent.pageSettings.totalRecordsCount = e.count;\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Page.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n currentPage: this.parent.pageSettings.currentPage, requestType: 'paging',\n type: events.actionComplete\n }));\n };\n /**\n * @hidden\n */\n Page.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.pagerObj[prop] = newProp[prop];\n }\n this.pagerObj.dataBind();\n };\n Page.prototype.clickHandler = function (e) {\n var gObj = this.parent;\n if (this.isForceCancel || isActionPrevent(gObj) && !gObj.prevPageMoving) {\n if (!this.isForceCancel) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.goToPage, arg1: e.currentPage });\n this.isForceCancel = true;\n this.pagerObj.currentPage = gObj.pageSettings.currentPage;\n this.pagerObj.dataBind();\n }\n else {\n this.isForceCancel = false;\n }\n e.cancel = true;\n return;\n }\n gObj.prevPageMoving = false;\n var prevPage = this.pageSettings.currentPage;\n this.pageSettings.currentPage = e.currentPage;\n this.parent.notify(events.modelChanged, {\n requestType: 'paging',\n previousPage: prevPage,\n currentPage: e.currentPage,\n type: events.actionBegin\n });\n };\n Page.prototype.keyPressHandler = function (e) {\n if (e.action in keyActions) {\n e.preventDefault();\n this.element.querySelector(keyActions[e.action]).click();\n }\n };\n /**\n * Defines the text of the external message.\n * @param {string} message - Defines the message to update.\n * @return {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n if (!this.pagerObj.enableExternalMessage) {\n this.pagerObj.enableExternalMessage = true;\n this.pagerObj.dataBind();\n }\n this.pagerObj.externalMessage = message;\n this.pagerObj.dataBind();\n };\n Page.prototype.appendToElement = function (e) {\n this.parent.element.appendChild(this.element);\n this.parent.setGridPager(this.element);\n this.pagerObj.appendTo(this.element);\n };\n Page.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n this.appendToElement();\n }\n };\n /**\n * @hidden\n */\n Page.prototype.addEventListener = function () {\n this.handlers = {\n load: this.render,\n end: this.appendToElement,\n ready: this.dataReady,\n complete: this.onActionComplete,\n updateLayout: this.enableAfterRender,\n inboundChange: this.onPropertyChanged,\n keyPress: this.keyPressHandler\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.handlers.load, this);\n this.parent.on(events.initialEnd, this.handlers.end, this); //For initial rendering\n this.parent.on(events.dataReady, this.handlers.ready, this);\n this.parent.on(events.pageComplete, this.handlers.complete, this);\n this.parent.on(events.uiUpdate, this.handlers.updateLayout, this);\n this.parent.on(events.inBoundModelChanged, this.handlers.inboundChange, this);\n this.parent.on(events.keyPressed, this.handlers.keyPress, this);\n };\n /**\n * @hidden\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.handlers.load);\n this.parent.off(events.initialEnd, this.handlers.end); //For initial rendering\n this.parent.off(events.dataReady, this.handlers.ready);\n this.parent.off(events.pageComplete, this.handlers.complete);\n this.parent.off(events.uiUpdate, this.handlers.updateLayout);\n this.parent.off(events.inBoundModelChanged, this.handlers.inboundChange);\n this.parent.off(events.keyPressed, this.handlers.keyPress);\n };\n /**\n * To destroy the pager\n * @return {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n this.pagerDestroy();\n };\n Page.prototype.pagerDestroy = function () {\n if (this.pagerObj && !this.pagerObj.isDestroyed) {\n this.pagerObj.destroy();\n remove(this.element);\n }\n };\n return Page;\n}());\nexport { Page };\n/**\n * @hidden\n */\nvar keyActions = {\n pageUp: '.e-prev',\n pageDown: '.e-next',\n ctrlAltPageDown: '.e-last',\n ctrlAltPageUp: '.e-first',\n altPageUp: '.e-pp',\n altPageDown: '.e-np'\n};\n","import { EventHandler, closest } from '@syncfusion/ej2-base';\nimport { extend, getValue } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { EditRender } from '../renderer/edit-renderer';\nimport { BooleanEditCell } from '../renderer/boolean-edit-cell';\nimport { DropDownEditCell } from '../renderer/dropdown-edit-cell';\nimport { NumericEditCell } from '../renderer/numeric-edit-cell';\nimport { DefaultEditCell } from '../renderer/default-edit-cell';\nimport { InlineEdit } from './inline-edit';\nimport { BatchEdit } from './batch-edit';\nimport { DialogEdit } from './dialog-edit';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { parentsUntil, getComplexFieldID, setComplexFieldID } from '../base/util';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { DatePickerEditCell } from '../renderer/datepicker-edit-cell';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { TemplateEditCell } from '../renderer/template-edit-cell';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for the Grid editing module\n * @hidden\n */\n function Edit(parent, serviceLocator) {\n this.editCellType = {\n 'dropdownedit': DropDownEditCell, 'numericedit': NumericEditCell,\n 'datepickeredit': DatePickerEditCell, 'datetimepickeredit': DatePickerEditCell,\n 'booleanedit': BooleanEditCell, 'defaultedit': DefaultEditCell,\n 'templateedit': TemplateEditCell\n };\n this.editType = { 'Inline': InlineEdit, 'Normal': InlineEdit, 'Batch': BatchEdit, 'Dialog': DialogEdit };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.l10n = this.serviceLocator.getService('localization');\n this.addEventListener();\n this.updateEditObj();\n this.createAlertDlg();\n this.createConfirmDlg();\n }\n Edit.prototype.updateColTypeObj = function () {\n var _this = this;\n this.parent.columnModel.forEach(function (col) {\n if (_this.parent.editSettings.template || col.editTemplate) {\n var templteCell = 'templateedit';\n col.edit = extend(new _this.editCellType[templteCell](_this.parent), col.edit || {});\n }\n else {\n col.edit = extend(new _this.editCellType[col.editType && _this.editCellType[col.editType] ?\n col.editType : 'defaultedit'](_this.parent, _this.serviceLocator), col.edit || {});\n }\n });\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n */\n Edit.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowAdding':\n case 'allowDeleting':\n case 'allowEditing':\n if (gObj.editSettings.allowAdding || gObj.editSettings.allowEditing || gObj.editSettings.allowDeleting) {\n this.initialEnd();\n }\n break;\n case 'mode':\n this.updateEditObj();\n gObj.isEdit = false;\n gObj.refresh();\n break;\n }\n }\n };\n Edit.prototype.updateEditObj = function () {\n if (this.editModule) {\n this.editModule.destroy();\n }\n this.renderer = new EditRender(this.parent, this.serviceLocator);\n this.editModule = new this.editType[this.parent.editSettings.mode](this.parent, this.serviceLocator, this.renderer);\n };\n Edit.prototype.initialEnd = function () {\n this.updateColTypeObj();\n };\n Edit.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getContent(), 'touchstart', this.tapEvent, this);\n };\n Edit.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getContent(), 'touchstart', this.tapEvent);\n };\n Edit.prototype.tapEvent = function (e) {\n if (this.getUserAgent()) {\n if (!Global.timer) {\n Global.timer = setTimeout(function () {\n Global.timer = null;\n }, 300);\n }\n else {\n clearTimeout(Global.timer);\n Global.timer = null;\n this.parent.notify(events.doubleTap, e);\n }\n }\n };\n Edit.prototype.getUserAgent = function () {\n var userAgent = window.navigator.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n /**\n * Edits any bound record in the Grid by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n */\n Edit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowEditing || gObj.isEdit || gObj.editSettings.mode === 'Batch') {\n return;\n }\n if (!gObj.getSelectedRows().length) {\n if (!tr) {\n this.showDialog('EditOperationAlert', this.alertDObj);\n return;\n }\n }\n else if (!tr) {\n tr = gObj.getSelectedRows()[0];\n }\n if (tr.style.display === 'none') {\n return;\n }\n this.editModule.startEdit(tr);\n this.refreshToolbar();\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n this.parent.notify('start-edit', {});\n };\n /**\n * Cancels edited state.\n */\n Edit.prototype.closeEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog\n && this.parent.element.querySelectorAll('.e-updatedtd').length) {\n this.showDialog('CancelEdit', this.dialogObj);\n return;\n }\n this.editModule.closeEdit();\n this.refreshToolbar();\n this.parent.notify('close-edit', {});\n };\n Edit.prototype.refreshToolbar = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * To adds a new row at the top with the given data. When data is not passed, it will add empty rows.\n * > `editSettings.allowEditing` should be true.\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n */\n Edit.prototype.addRecord = function (data, index) {\n if (!this.parent.editSettings.allowAdding) {\n return;\n }\n this.editModule.addRecord(data, index);\n this.refreshToolbar();\n this.parent.notify('start-add', {});\n };\n /**\n * Deletes a record with the given options. If fieldname and data are not given, the Grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n * @param {string} fieldname - Defines the primary key field name of the column.\n * @param {Object} data - Defines the JSON data record to be deleted.\n */\n Edit.prototype.deleteRecord = function (fieldname, data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowDeleting) {\n return;\n }\n if (!data) {\n if (!gObj.getSelectedRecords().length) {\n this.showDialog('DeleteOperationAlert', this.alertDObj);\n return;\n }\n }\n if (gObj.editSettings.showDeleteConfirmDialog) {\n this.showDialog('ConfirmDelete', this.dialogObj);\n return;\n }\n this.editModule.deleteRecord(fieldname, data);\n };\n /**\n * Deletes a visible row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n */\n Edit.prototype.deleteRow = function (tr) {\n this.deleteRecord(null, this.parent.getCurrentViewRecords()[parseInt(tr.getAttribute('aria-rowindex'), 10)]);\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n */\n Edit.prototype.endEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog &&\n (isNullOrUndefined(this.formObj) || this.formObj.validate())) {\n this.parent.editModule.saveCell();\n this.parent.notify(events.editNextValCell, {});\n if (isNullOrUndefined(this.formObj) || this.formObj.validate()) {\n this.showDialog('BatchSaveConfirm', this.dialogObj);\n return;\n }\n }\n this.endEditing();\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n */\n Edit.prototype.updateCell = function (rowIndex, field, value) {\n this.editModule.updateCell(rowIndex, field, value);\n };\n /**\n * To update the specified row by given values without changing into edited state.\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n */\n Edit.prototype.updateRow = function (index, data) {\n this.editModule.updateRow(index, data);\n };\n /**\n * Resets added, edited, and deleted records in the batch mode.\n */\n Edit.prototype.batchCancel = function () {\n this.closeEdit();\n };\n /**\n * Bulk saves added, edited, and deleted records in the batch mode.\n */\n Edit.prototype.batchSave = function () {\n this.endEdit();\n };\n /**\n * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.\n * @param {number} index - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform batch edit.\n */\n Edit.prototype.editCell = function (index, field) {\n this.editModule.editCell(index, field);\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n * @return {boolean}\n */\n Edit.prototype.editFormValidate = function () {\n if (this.formObj) {\n return this.formObj.validate();\n }\n return false;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n * @return {Object}\n */\n Edit.prototype.getBatchChanges = function () {\n return this.editModule.getBatchChanges ? this.editModule.getBatchChanges() : {};\n };\n /**\n * Gets the current value of the edited component.\n */\n Edit.prototype.getCurrentEditCellData = function () {\n var obj = this.getCurrentEditedData(this.formObj.element, {});\n return obj[Object.keys(obj)[0]];\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n */\n Edit.prototype.saveCell = function () {\n this.editModule.saveCell();\n };\n Edit.prototype.endEditing = function () {\n this.editModule.endEdit();\n this.refreshToolbar();\n };\n Edit.prototype.showDialog = function (content, obj) {\n obj.content = '
    ' + this.l10n.getConstant(content) + '
    ';\n obj.dataBind();\n obj.show();\n };\n Edit.prototype.getValueFromType = function (col, value) {\n var val = value;\n switch (col.type) {\n case 'number':\n val = !isNaN(parseFloat(value)) ? parseFloat(value) : null;\n break;\n case 'boolean':\n if (col.editType !== 'booleanedit') {\n val = value === this.l10n.getConstant('True') || value === true ? true : false;\n }\n break;\n case 'date':\n case 'datetime':\n if (col.editType !== 'datepickeredit' && col.editType !== 'datetimepickeredit') {\n val = (value && value.length) ? new Date(value) : null;\n }\n break;\n }\n return val;\n };\n Edit.prototype.destroyToolTip = function () {\n var elements = [].slice.call(this.parent.element.querySelectorAll('.e-griderror'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n this.parent.getContent().firstElementChild.style.position = 'relative';\n };\n Edit.prototype.createConfirmDlg = function () {\n this.dialogObj = this.dlgWidget([\n {\n click: this.dlgOk.bind(this),\n buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-primary', isPrimary: true }\n },\n {\n click: this.dlgCancel.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.l10n.getConstant('CancelButton') }\n }\n ], 'EditConfirm');\n };\n Edit.prototype.createAlertDlg = function () {\n this.alertDObj = this.dlgWidget([\n {\n click: this.alertClick.bind(this), buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-flat', isPrimary: true }\n }\n ], 'EditAlert');\n };\n Edit.prototype.alertClick = function () {\n this.alertDObj.hide();\n };\n Edit.prototype.dlgWidget = function (btnOptions, name) {\n var div = this.parent.createElement('div', { id: this.parent.element.id + name });\n this.parent.element.appendChild(div);\n var options = {\n showCloseIcon: false,\n isModal: true,\n visible: false,\n closeOnEscape: true,\n target: this.parent.element,\n width: '320px',\n animationSettings: { effect: 'None' }\n };\n options.buttons = btnOptions;\n var obj = new Dialog(options);\n obj.appendTo(div);\n return obj;\n };\n Edit.prototype.dlgCancel = function () {\n this.dialogObj.hide();\n };\n Edit.prototype.dlgOk = function (e) {\n switch (this.dialogObj.element.querySelector('.e-dlg-content').firstElementChild.innerText) {\n case this.l10n.getConstant('ConfirmDelete'):\n this.editModule.deleteRecord();\n break;\n case this.l10n.getConstant('CancelEdit'):\n this.editModule.closeEdit();\n break;\n case this.l10n.getConstant('BatchSaveConfirm'):\n this.endEditing();\n break;\n case this.l10n.getConstant('BatchSaveLostChanges'):\n if (this.parent.editSettings.mode === 'Batch') {\n this.editModule.addCancelWhilePaging();\n }\n this.executeAction();\n break;\n }\n this.dlgCancel();\n };\n /**\n * @hidden\n */\n Edit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.initialEnd, this.initialEnd, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.autoCol, this.updateColTypeObj, this);\n this.parent.on(events.tooltipDestroy, this.destroyToolTip, this);\n this.parent.on(events.preventBatch, this.preventBatch, this);\n this.parent.on(events.destroyForm, this.destroyForm, this);\n this.actionBeginFunction = this.onActionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n /**\n * @hidden\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.initialEnd, this.initialEnd);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.autoCol, this.updateColTypeObj);\n this.parent.off(events.tooltipDestroy, this.destroyToolTip);\n this.parent.off(events.preventBatch, this.preventBatch);\n this.parent.off(events.destroyForm, this.destroyForm);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.off(events.initialEnd, this.unwireEvents);\n };\n Edit.prototype.actionComplete = function (e) {\n var actions = ['add', 'beginEdit', 'save', 'delete', 'cancel'];\n if (actions.indexOf(e.requestType) < 0) {\n this.parent.isEdit = false;\n }\n this.refreshToolbar();\n };\n /**\n * @hidden\n */\n Edit.prototype.getCurrentEditedData = function (form, editedData) {\n var _this = this;\n var gObj = this.parent;\n if (gObj.editSettings.template) {\n [].slice.call(form.elements).forEach(function (element) {\n if (element.hasAttribute('name')) {\n var field = setComplexFieldID(element.getAttribute('name'));\n var column = gObj.getColumnByField(field) || { field: field, type: element.getAttribute('type') };\n var value = void 0;\n if (column.type === 'checkbox' || column.type === 'boolean') {\n value = element.checked;\n }\n else if (element.value) {\n value = element.value;\n if (element.ej2_instances &&\n element.ej2_instances.length &&\n !isNullOrUndefined(element.ej2_instances[0].value)) {\n element.blur();\n value = element.ej2_instances[0].value;\n }\n }\n if (column.edit && typeof column.edit.read === 'string') {\n value = getValue(column.edit.read, window)(element, value);\n }\n else if (column.edit && column.edit.read) {\n value = column.edit.read(element, value);\n }\n value = gObj.editModule.getValueFromType(column, value);\n DataUtil.setValue(column.field, value, editedData);\n }\n });\n return editedData;\n }\n gObj.columnModel.filter(function (col) { return col.editTemplate; }).forEach(function (col) {\n if (form[getComplexFieldID(col.field)]) {\n var inputElements = [].slice.call(form[getComplexFieldID(col.field)]);\n inputElements = inputElements.length ? inputElements : [form[getComplexFieldID(col.field)]];\n inputElements.forEach(function (input) {\n var value = _this.getValue(col, input);\n DataUtil.setValue(col.field, value, editedData);\n });\n }\n });\n var inputs = [].slice.call(form.querySelectorAll('.e-field'));\n for (var i = 0, len = inputs.length; i < len; i++) {\n var col = gObj.getColumnByUid(inputs[i].getAttribute('e-mappinguid'));\n if (col && col.field) {\n var value = this.getValue(col, inputs[i]);\n DataUtil.setValue(col.field, value, editedData);\n }\n }\n return editedData;\n };\n Edit.prototype.getValue = function (col, input) {\n var value = input.value;\n var gObj = this.parent;\n var temp = col.edit.read;\n if (!(col.type === 'checkbox' || col.type === 'boolean')) {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n value = gObj.editModule.getValueFromType(col, (temp)(input, value));\n }\n else {\n value = gObj.editModule.getValueFromType(col, col.edit.read(input, value));\n }\n }\n else {\n value = input.checked;\n }\n return value;\n };\n /**\n * @hidden\n */\n Edit.prototype.onActionBegin = function (e) {\n var restrictedRequestTypes = ['filterafteropen', 'filterbeforeopen', 'filterchoicerequest', 'save'];\n if (this.parent.editSettings.mode !== 'Batch' && this.formObj && !this.formObj.isDestroyed\n && restrictedRequestTypes.indexOf(e.requestType) === -1) {\n this.destroyWidgets();\n this.destroyForm();\n }\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyWidgets = function (cols) {\n var gObj = this.parent;\n if (gObj.editSettings.template) {\n this.parent.destroyTemplate(['editSettingsTemplate']);\n }\n if (gObj.columnModel.some(function (column) { return !isNullOrUndefined(column.editTemplate); })) {\n this.parent.destroyTemplate(['editTemplate']);\n }\n cols = cols ? cols : this.parent.getColumns();\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n var temp = col.edit.destroy;\n if (col.edit.destroy) {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp();\n }\n else {\n col.edit.destroy();\n }\n }\n }\n [].slice.call(this.formObj.element.elements).forEach(function (element) {\n if (element.hasAttribute('name')) {\n if (element.ej2_instances &&\n element.ej2_instances.length &&\n !element.ej2_instances[0].isDestroyed) {\n element.ej2_instances[0].destroy();\n }\n }\n });\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyForm = function () {\n this.destroyToolTip();\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n this.destroyToolTip();\n };\n /**\n * To destroy the editing.\n * @return {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement) {\n return;\n }\n var hasGridChild = gridElement.querySelector('.e-gridheader') &&\n gridElement.querySelector('.e-gridcontent') ? true : false;\n if (hasGridChild) {\n this.destroyForm();\n }\n this.removeEventListener();\n var elem = this.dialogObj.element;\n if (elem.childElementCount > 0) {\n this.dialogObj.destroy();\n remove(elem);\n }\n elem = this.alertDObj.element;\n if (elem.childElementCount > 0) {\n this.alertDObj.destroy();\n remove(elem);\n }\n if (!hasGridChild) {\n return;\n }\n this.unwireEvents();\n if (this.editModule) {\n this.editModule.destroy();\n }\n };\n Edit.prototype.keyPressHandler = function (e) {\n switch (e.action) {\n case 'insert':\n this.addRecord();\n break;\n case 'delete':\n if ((e.target.tagName !== 'INPUT' || e.target.classList.contains('e-checkselect'))\n && !document.querySelector('.e-popup-open')) {\n this.deleteRecord();\n }\n break;\n case 'f2':\n this.startEdit();\n break;\n case 'enter':\n if (!parentsUntil(e.target, '.e-unboundcelldiv') && this.parent.editSettings.mode !== 'Batch' &&\n (parentsUntil(e.target, 'e-gridcontent') || (this.parent.frozenRows\n && parentsUntil(e.target, 'e-headercontent')))\n && !document.querySelectorAll('.e-popup-open').length) {\n e.preventDefault();\n this.endEdit();\n }\n break;\n case 'escape':\n this.closeEdit();\n break;\n }\n };\n Edit.prototype.preventBatch = function (args) {\n this.preventObj = args;\n this.showDialog('BatchSaveLostChanges', this.dialogObj);\n };\n Edit.prototype.executeAction = function () {\n this.preventObj.handler.call(this.preventObj.instance, this.preventObj.arg1, this.preventObj.arg2, this.preventObj.arg3, this.preventObj.arg4, this.preventObj.arg5, this.preventObj.arg6, this.preventObj.arg7, this.preventObj.arg8);\n };\n /**\n * @hidden\n */\n Edit.prototype.applyFormValidation = function (cols) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var form = gObj.element.querySelector('.e-gridform');\n var mForm = gObj.element.querySelectorAll('.e-gridform')[1];\n var rules = {};\n var mRules = {};\n cols = cols ? cols : gObj.columns;\n cols.forEach(function (col, index) {\n if (!col.visible) {\n return;\n }\n if (index < frzCols && col.validationRules) {\n rules[getComplexFieldID(col.field)] = col.validationRules;\n }\n else if (index >= frzCols && col.validationRules) {\n mRules[getComplexFieldID(col.field)] = col.validationRules;\n }\n });\n if (frzCols && this.parent.editSettings.mode !== 'Dialog') {\n this.parent.editModule.mFormObj = this.createFormObj(mForm, mRules);\n }\n else {\n rules = extend(rules, mRules);\n }\n this.parent.editModule.formObj = this.createFormObj(form, rules);\n };\n Edit.prototype.createFormObj = function (form, rules) {\n var _this = this;\n return new FormValidator(form, {\n rules: rules,\n validationComplete: function (args) {\n _this.validationComplete(args);\n },\n customPlacement: function (inputElement, error) {\n _this.valErrorPlacement(inputElement, error);\n }\n });\n };\n Edit.prototype.valErrorPlacement = function (inputElement, error) {\n if (this.parent.isEdit) {\n var id = error.getAttribute('for');\n var elem = this.getElemTable(inputElement).querySelector('#' + id + '_Error');\n if (!elem) {\n this.createTooltip(inputElement, error, id, '');\n }\n else {\n elem.querySelector('.e-tip-content').innerHTML = error.outerHTML;\n }\n }\n };\n Edit.prototype.getElemTable = function (inputElement) {\n var isFHdr;\n if (this.parent.editSettings.mode !== 'Dialog') {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(inputElement, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n return this.parent.editSettings.mode !== 'Dialog' ? isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable() :\n this.parent.element.querySelector('#' + this.parent.element.id + '_dialogEdit_wrapper');\n };\n Edit.prototype.validationComplete = function (args) {\n if (this.parent.isEdit) {\n var elem = this.getElemTable(args.element).querySelector('#' + args.inputName + '_Error');\n if (elem) {\n if (args.status === 'failure') {\n elem.style.display = '';\n }\n else {\n elem.style.display = 'none';\n }\n }\n }\n };\n Edit.prototype.createTooltip = function (element, error, name, display) {\n var gcontent = this.parent.getContent().firstElementChild;\n var isScroll = gcontent.scrollHeight > gcontent.clientHeight || gcontent.scrollWidth > gcontent.clientWidth;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isFHdr;\n if (isInline) {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(element, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n var fCont = this.parent.getContent().querySelector('.e-frozencontent');\n var table = isInline ?\n (isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable()) :\n this.parent.element.querySelector('#' + this.parent.element.id + '_dialogEdit_wrapper').querySelector('.e-dlg-content');\n var client = table.getBoundingClientRect();\n var left = isInline ?\n this.parent.element.getBoundingClientRect().left : client.left;\n var input = closest(element, 'td');\n var inputClient = input ? input.getBoundingClientRect() : element.parentElement.getBoundingClientRect();\n var div = this.parent.createElement('div', {\n className: 'e-tooltip-wrap e-control e-popup e-griderror',\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n ((isFHdr ? inputClient.top + inputClient.height : inputClient.bottom - client.top\n - (this.parent.getFrozenColumns() ? fCont.scrollTop : 0)) + table.scrollTop + 9) + 'px;left:' +\n (inputClient.left - left + table.scrollLeft + inputClient.width / 2) + 'px;' +\n 'max-width:' + inputClient.width + 'px;text-align:center;'\n });\n var content = this.parent.createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow = this.parent.createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n div.appendChild(content);\n div.appendChild(arrow);\n table.appendChild(div);\n var lineHeight = parseInt(document.defaultView.getComputedStyle(div, null).getPropertyValue('font-size'), 10);\n if (div.getBoundingClientRect().width < inputClient.width &&\n div.querySelector('label').getBoundingClientRect().height / (lineHeight * 1.2) >= 2) {\n div.style.width = div.style.maxWidth;\n }\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n if (!isScroll && isInline && !this.parent.allowPaging) {\n gcontent.style.position = 'static';\n var pos = calculateRelativeBasedPosition(input, div);\n div.style.top = pos.top + inputClient.height + 9 + 'px';\n }\n };\n return Edit;\n}());\nexport { Edit };\n/** @hidden */\nexport var Global;\n(function (Global) {\n Global.timer = null;\n})(Global || (Global = {}));\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { attributes } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { appendChildren } from '../base/util';\n/**\n * FilterCellRenderer class which responsible for building filter cell.\n * @hidden\n */\nvar FilterCellRenderer = /** @class */ (function (_super) {\n __extends(FilterCellRenderer, _super);\n function FilterCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-filterbarcell' });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n * @returns string\n */\n FilterCellRenderer.prototype.getGui = function () {\n return this.parent.createElement('div');\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n FilterCellRenderer.prototype.render = function (cell, data) {\n var tr = this.parent.element.querySelector('.e-filterbar');\n var node = this.element.cloneNode();\n var innerDIV = this.getGui();\n var input;\n var column = cell.column;\n tr.appendChild(node);\n node.setAttribute('e-mappinguid', column.uid);\n if (column.filterTemplate) {\n var fltrData = {};\n if (data) {\n fltrData[column.field] = data[column.field];\n }\n var col = 'column';\n fltrData[col] = column;\n if (column.visible) {\n var element = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate');\n appendChildren(node, element);\n }\n else {\n node.classList.add('e-hide');\n }\n }\n else {\n if (column.type !== 'checkbox') {\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n node.classList.add('e-fltrtemp');\n attributes(innerDIV, {\n 'class': 'e-fltrtempdiv'\n });\n if (isNullOrUndefined(column.filterBarTemplate.create)) {\n input = this.parent.createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filterUi_input e-filtertext e-fltrTemp',\n attrs: { type: 'search', title: column.headerText }\n });\n innerDIV.appendChild(input);\n }\n else {\n var args = { column: column, node: Element };\n var temp = column.filterBarTemplate.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n input = temp(args);\n if (typeof input === 'string') {\n var div = this.parent.createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n attributes(innerDIV, {\n class: 'e-filterUi_input e-filtertext e-fltrTemp',\n title: column.headerText,\n id: column.field + '_filterBarcell',\n });\n innerDIV.appendChild(input);\n }\n }\n else {\n attributes(innerDIV, {\n 'class': 'e-filterdiv e-fltrinputdiv'\n });\n input = this.parent.createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filtertext',\n attrs: {\n type: 'search', title: column.headerText + cell.attributes.title,\n value: data[cell.column.field] ? data[cell.column.field] : '', role: 'search'\n }\n });\n innerDIV.appendChild(input);\n var args = {\n element: input, floatLabelType: 'Never',\n properties: {\n enableRtl: this.parent.enableRtl, showClearButton: true\n }\n };\n Input.createInput(args, this.parent.createElement);\n }\n //TODO: apply intial filtering\n if (column.allowFiltering === false || column.field === '' || isNullOrUndefined(column.field)) {\n input.setAttribute('disabled', 'true');\n input.classList.add('e-disable');\n }\n if (!column.visible) {\n node.classList.add('e-hide');\n }\n this.appendHtml(node, innerDIV);\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n var templateWrite = column.filterBarTemplate.write;\n var args = { element: input, column: column };\n if (typeof templateWrite === 'string') {\n templateWrite = getValue(templateWrite, window);\n }\n templateWrite.call(this, args);\n }\n }\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHTML\n * @returns Element\n */\n FilterCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n return FilterCellRenderer;\n}(CellRenderer));\nexport { FilterCellRenderer };\n","import { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * `filter operators` render boolean column.\n * @hidden\n */\nvar FlMenuOptrUI = /** @class */ (function () {\n function FlMenuOptrUI(parent, customFltrOperators, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.customFilterOperators = customFltrOperators;\n }\n /**\n * @hidden\n */\n FlMenuOptrUI.prototype.renderOperatorUI = function (dlgConetntEle, target, column, dlgObj) {\n this.dialogObj = dlgObj;\n var optr = column.type + 'Operator';\n this.optrData = this.customOptr = (!isNullOrUndefined(this.parent.filterSettings.operators) &&\n !isNullOrUndefined(this.parent.filterSettings.operators[optr])) ?\n this.parent.filterSettings.operators[optr] : this.customFilterOperators[optr];\n var dropDatasource = this.customOptr;\n var selectedValue = this.dropSelectedVal(column, optr);\n var optrDiv = this.parent.createElement('div', { className: 'e-flm_optrdiv' });\n dlgConetntEle.appendChild(optrDiv);\n var optrInput = this.parent.createElement('input', { id: column.uid + '-floptr' });\n optrDiv.appendChild(optrInput);\n this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n open: this.dropDownOpen.bind(this),\n text: selectedValue\n });\n this.dropOptr.appendTo('#' + column.uid + '-floptr');\n };\n FlMenuOptrUI.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n FlMenuOptrUI.prototype.dropSelectedVal = function (col, optr) {\n var selValue = '';\n var columns = this.parent.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.field === column.field || (col.isForeignColumn() && col.foreignKeyValue === column.field)) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', column.operator));\n selValue = !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n }\n }\n if (selValue === '') { // rewuired or not\n selValue = this.optrData[0].text;\n }\n return selValue;\n };\n /**\n * @hidden\n */\n FlMenuOptrUI.prototype.getFlOperator = function () {\n return this.dropOptr.value;\n };\n return FlMenuOptrUI;\n}());\nexport { FlMenuOptrUI };\n","import { AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getZIndexCalcualtion } from '../base/util';\n/**\n * `string filterui` render string column.\n * @hidden\n */\nvar StringFilterUI = /** @class */ (function () {\n function StringFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serLocator = serviceLocator;\n this.filterSettings = filterSettings;\n }\n StringFilterUI.prototype.create = function (args) {\n var data;\n var floptr;\n this.instance = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'strui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.dialogObj = args.dialogObj;\n this.actObj = new AutoComplete(this.getAutoCompleteOptions(args));\n this.actObj.appendTo(this.instance);\n };\n StringFilterUI.prototype.getAutoCompleteOptions = function (args) {\n var _this = this;\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = { value: isForeignColumn ? args.column.foreignKeyValue : args.column.field };\n return {\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n query: this.parent.query.clone(),\n sortOrder: 'Ascending',\n open: this.openPopup.bind(this),\n cssClass: 'e-popup-flmenu',\n focus: function () {\n _this.actObj.filterType = args.getOptrInstance.getFlOperator();\n },\n autofill: true,\n placeholder: args.localizeText.getConstant('EnterValue'),\n actionComplete: function (e) {\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObj) {\n return mapObj[_this.actObj.fields.value];\n }).indexOf(obj[_this.actObj.fields.value]) === index;\n });\n }\n };\n };\n StringFilterUI.prototype.write = function (args) {\n var columns = this.filterSettings.columns;\n if (args.filteredValue !== '' && !isNullOrUndefined(args.filteredValue)) {\n var struiObj = document.querySelector('#strui-' + args.column.uid).ej2_instances[0];\n struiObj.value = args.filteredValue;\n }\n };\n StringFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var actuiObj = document.querySelector('#strui-' + column.uid).ej2_instances[0];\n if (Browser.isDevice) {\n actuiObj.hidePopup();\n actuiObj.focusOut();\n }\n var filterValue = actuiObj.value;\n if (isNullOrUndefined(filterValue) || filterValue === '') {\n filterValue = null;\n }\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n StringFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return StringFilterUI;\n}());\nexport { StringFilterUI };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\n/**\n * `numberfilterui` render number column.\n * @hidden\n */\nvar NumberFilterUI = /** @class */ (function () {\n function NumberFilterUI(parent, serviceLocator, filterSettings) {\n this.filterSettings = filterSettings;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n NumberFilterUI.prototype.create = function (args) {\n this.instance = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'numberui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.numericTxtObj = new NumericTextBox({\n format: args.column.format,\n locale: this.parent.locale,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('EnterValue'),\n enableRtl: this.parent.enableRtl,\n });\n this.numericTxtObj.appendTo(this.instance);\n };\n NumberFilterUI.prototype.write = function (args) {\n var numberuiObj = document.querySelector('#numberui-' + args.column.uid).ej2_instances[0];\n numberuiObj.value = args.filteredValue;\n };\n NumberFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var numberuiObj = document.querySelector('#numberui-' + column.uid).ej2_instances[0];\n var filterValue = numberuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n return NumberFilterUI;\n}());\nexport { NumberFilterUI };\n","import { getZIndexCalcualtion } from '../base/util';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `boolfilterui` render boolean column.\n * @hidden\n */\nvar BooleanFilterUI = /** @class */ (function () {\n function BooleanFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n }\n BooleanFilterUI.prototype.create = function (args) {\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = isForeignColumn ? args.column.foreignKeyValue : args.column.field;\n this.elem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'bool-ui-' + args.column.uid });\n args.target.appendChild(this.elem);\n this.dialogObj = args.dialogObj;\n this.dropInstance = new DropDownList({\n dataSource: dataSource instanceof DataManager ?\n dataSource : new DataManager(dataSource),\n query: new Query().select(fields),\n fields: { text: fields, value: fields },\n placeholder: args.localizeText.getConstant('SelectValue'),\n cssClass: 'e-popup-flmenu',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n actionComplete: function (e) {\n e.result = DataUtil.distinct(e.result, fields, true);\n }\n });\n this.dropInstance.appendTo(this.elem);\n };\n BooleanFilterUI.prototype.write = function (args) {\n var drpuiObj = document.querySelector('#bool-ui-' + args.column.uid).ej2_instances[0];\n if (!isNullOrUndefined(args.filteredValue)) {\n drpuiObj.text = args.filteredValue;\n }\n };\n BooleanFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var drpuiObj = document.querySelector('#bool-ui-' + column.uid).ej2_instances[0];\n var filterValue = drpuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n BooleanFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return BooleanFilterUI;\n}());\nexport { BooleanFilterUI };\n","import { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getCustomDateFormat } from '../base/util';\n/**\n * `datefilterui` render date column.\n * @hidden\n */\nvar DateFilterUI = /** @class */ (function () {\n function DateFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.fltrSettings = filterSettings;\n }\n DateFilterUI.prototype.create = function (args) {\n var format = getCustomDateFormat(args.column.format, args.column.type);\n this.dialogObj = args.dialogObj;\n this.inputElem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'dateui-' + args.column.uid });\n args.target.appendChild(this.inputElem);\n if (args.column.type === 'date') {\n this.datePickerObj = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n });\n }\n else if (args.column.type === 'datetime') {\n this.datePickerObj = new DateTimePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n });\n }\n this.datePickerObj.appendTo(this.inputElem);\n };\n DateFilterUI.prototype.write = function (args) {\n var columns = this.fltrSettings.columns;\n var dateuiObj = document.querySelector('#dateui-' + args.column.uid).ej2_instances[0];\n dateuiObj.value = !isNullOrUndefined(args.filteredValue) ? new Date(args.filteredValue) : null;\n };\n DateFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var dateuiObj = document.querySelector('#dateui-' + column.uid).ej2_instances[0];\n var filterValue = dateuiObj.value;\n filterValue = isNullOrUndefined(filterValue) ? null : filterValue;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n DateFilterUI.prototype.openPopup = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n return DateFilterUI;\n}());\nexport { DateFilterUI };\n","import { isNullOrUndefined, getValue, remove } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { FlMenuOptrUI } from './filter-menu-operator';\nimport { StringFilterUI } from './string-filter-ui';\nimport { NumberFilterUI } from './number-filter-ui';\nimport { BooleanFilterUI } from './boolean-filter-ui';\nimport { DateFilterUI } from './date-filter-ui';\nimport { getFilterMenuPostion, parentsUntil, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * `filter menu` render boolean column.\n * @hidden\n */\nvar FilterMenuRenderer = /** @class */ (function () {\n function FilterMenuRenderer(parent, filterSettings, serviceLocator, customFltrOperators, fltrObj) {\n this.isDialogOpen = false;\n this.colTypes = {\n 'string': StringFilterUI, 'number': NumberFilterUI, 'date': DateFilterUI, 'boolean': BooleanFilterUI, 'datetime': DateFilterUI\n };\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.customFilterOperators = customFltrOperators;\n this.filterObj = fltrObj;\n this.flMuiObj = new FlMenuOptrUI(this.parent, this.customFilterOperators, this.serviceLocator);\n this.l10n = this.serviceLocator.getService('localization');\n }\n FilterMenuRenderer.prototype.openDialog = function (args) {\n this.col = this.parent.getColumnByField(args.field);\n if (isNullOrUndefined(this.col.filter) || (isNullOrUndefined(this.col.filter.type) || this.col.filter.type === 'Menu')) { ///\n this.renderDlgContent(args.target, this.col);\n }\n };\n FilterMenuRenderer.prototype.closeDialog = function () {\n if (!this.dlgObj) {\n return;\n }\n var elem = document.getElementById(this.dlgObj.element.id);\n if (this.dlgObj && !this.dlgObj.isDestroyed && elem) {\n this.parent.notify(events.filterMenuClose, { field: this.col.field });\n this.isDialogOpen = false;\n this.dlgObj.destroy();\n remove(elem);\n }\n };\n FilterMenuRenderer.prototype.renderDlgContent = function (target, column) {\n var args = {\n requestType: events.filterBeforeOpen, filterModel: this,\n columnName: column.field, columnType: column.type\n };\n this.parent.trigger(events.actionBegin, args);\n var mainDiv = this.parent.createElement('div', { className: 'e-flmenu-maindiv', id: column.uid + '-flmenu' });\n this.dlgDiv = this.parent.createElement('div', { className: 'e-flmenu', id: column.uid + '-flmdlg' });\n this.parent.element.appendChild(this.dlgDiv);\n this.dlgObj = new Dialog({\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n created: this.dialogCreated.bind(this, target, column),\n position: this.parent.element.classList.contains('e-device') ? { X: 'center', Y: 'center' } : { X: '', Y: '' },\n target: this.parent.element.classList.contains('e-device') ? document.body : this.parent.element,\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.l10n.getConstant('FilterButton'), isPrimary: true, cssClass: 'e-flmenu-okbtn'\n }\n },\n {\n click: this.clearBtnClick.bind(this, column),\n buttonModel: { content: this.l10n.getConstant('ClearButton'), cssClass: 'e-flmenu-cancelbtn' }\n }],\n content: mainDiv,\n width: (!isNullOrUndefined(parentsUntil(target, 'e-bigger'))) || this.parent.element.classList.contains('e-device') ? 260 : 250,\n animationSettings: { effect: 'None' },\n cssClass: 'e-filter-popup'\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n FilterMenuRenderer.prototype.dialogCreated = function (target, column) {\n if (!Browser.isDevice) {\n getFilterMenuPostion(target, this.dlgObj, this.parent);\n }\n this.renderFilterUI(target, column);\n this.parent.notify(events.filterDialogCreated, {});\n this.dlgObj.element.style.maxHeight = '350px';\n this.dlgObj.show();\n if (!column.filterTemplate) {\n this.writeMethod(column, this.dlgObj.element.querySelector('#' + column.uid + '-flmenu'));\n }\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: column.field, columnType: column.type\n };\n this.isDialogOpen = true;\n this.parent.trigger(events.actionComplete, args);\n };\n FilterMenuRenderer.prototype.renderFilterUI = function (target, col) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-flmenu-maindiv');\n this.renderOperatorUI(dlgConetntEle, target, col);\n this.renderFlValueUI(dlgConetntEle, target, col);\n };\n FilterMenuRenderer.prototype.renderOperatorUI = function (dlgConetntEle, target, column) {\n this.flMuiObj.renderOperatorUI(dlgConetntEle, target, column, this.dlgObj);\n };\n FilterMenuRenderer.prototype.renderFlValueUI = function (dlgConetntEle, target, column) {\n var valueDiv = this.parent.createElement('div', { className: 'e-flmenu-valuediv' });\n var fObj = this.filterObj;\n dlgConetntEle.appendChild(valueDiv);\n var args = { target: valueDiv, column: column, getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj };\n var instanceofFilterUI = new this.colTypes[column.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (column.filterTemplate) {\n var fltrData = {};\n fltrData[column.field] = fObj.values[column.field];\n if (column.foreignKeyValue) {\n fltrData[column.foreignKeyValue] = fObj.values[column.foreignKeyValue];\n }\n var col = 'column';\n fltrData[col] = column;\n var compElement = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate');\n appendChildren(valueDiv, compElement);\n }\n else {\n if (!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n && !isNullOrUndefined(column.filter.ui.create)) {\n var temp = column.filter.ui.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n temp({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj\n });\n }\n else {\n instanceofFilterUI.create({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, localizeText: this.l10n, dialogObj: this.dlgObj\n });\n }\n }\n };\n FilterMenuRenderer.prototype.writeMethod = function (col, dlgContentEle) {\n var flValue;\n var target = dlgContentEle.querySelector('.e-flmenu-valinput');\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.field === column.field || col.foreignKeyValue === column.field) {\n flValue = column.value;\n }\n }\n if (!isNullOrUndefined(col.filter) && !isNullOrUndefined(col.filter.ui)\n && !isNullOrUndefined(col.filter.ui.write)) {\n var temp = col.filter.ui.write;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n temp({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n else {\n instanceofFilterUI.write({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n };\n FilterMenuRenderer.prototype.filterBtnClick = function (col) {\n var flValue;\n var flOptrValue;\n var targ = this.dlgObj.element.querySelector('.e-flmenu-valuediv input');\n flOptrValue = this.flMuiObj.getFlOperator();\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (col.filterTemplate) {\n var element = this.dlgDiv.querySelector('.e-flmenu-valuediv');\n var fltrValue = void 0;\n if (element.children[0].value) {\n fltrValue = element.children[0].value;\n }\n else {\n fltrValue = element.children[0].ej2_instances[0].value;\n }\n this.filterObj.filterByColumn(col.field, flOptrValue, fltrValue);\n }\n else {\n if (!isNullOrUndefined(col.filter) &&\n !isNullOrUndefined(col.filter.ui) && !isNullOrUndefined(col.filter.ui.read)) {\n var temp = col.filter.ui.read;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n flValue = temp({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n }\n else {\n instanceofFilterUI.read(targ, col, flOptrValue, this.filterObj);\n }\n }\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var column = this.parent.element.querySelector('[e-mappinguid=\"' + col.uid + '\"]').parentElement;\n var flIcon = column.querySelector(iconClass);\n if (flIcon) {\n flIcon.classList.add('e-filtered');\n }\n this.closeDialog();\n };\n FilterMenuRenderer.prototype.clearBtnClick = function (column) {\n this.filterObj.removeFilteredColsByField(column.field);\n this.closeDialog();\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var col = this.parent.element.querySelector('[e-mappinguid=\"' + column.uid + '\"]').parentElement;\n var flIcon = col.querySelector(iconClass);\n if (flIcon) {\n flIcon.classList.remove('e-filtered');\n }\n };\n FilterMenuRenderer.prototype.destroy = function () {\n this.closeDialog();\n };\n return FilterMenuRenderer;\n}());\nexport { FilterMenuRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { EventHandler, remove, Browser } from '@syncfusion/ej2-base';\nimport { parentsUntil, isActionPrevent, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { isNullOrUndefined, } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { distinctStringValues, isComplexField, getComplexFieldID, getCustomDateFormat } from '../base/util';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilter = /** @class */ (function (_super) {\n __extends(ExcelFilter, _super);\n /**\n * Constructor for excel filtering module\n * @hidden\n */\n function ExcelFilter(parent, filterSettings, serviceLocator, customFltrOperators) {\n var _this = _super.call(this, parent, filterSettings, serviceLocator) || this;\n _this.customFilterOperators = customFltrOperators;\n _this.isExcel = true;\n return _this;\n }\n ExcelFilter.prototype.getCMenuDS = function (type, operator) {\n var options = {\n number: ['Equal', 'NotEqual', '', 'LessThan', 'LessThanOrEqual', 'GreaterThan',\n 'GreaterThanOrEqual', 'Between', '', 'CustomFilter'],\n string: ['Equal', 'NotEqual', '', 'StartsWith', 'EndsWith', '', 'Contains', '', 'CustomFilter'],\n };\n options.date = options.number;\n options.datetime = options.number;\n var model = [];\n for (var i = 0; i < options[type].length; i++) {\n if (options[type][i].length) {\n if (operator) {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...',\n iconCss: 'e-icons e-icon-check ' + (operator === options[type][i].toLowerCase() ? '' : 'e-emptyicon')\n });\n }\n else {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...'\n });\n }\n }\n else {\n model.push({ separator: true });\n }\n }\n return model;\n };\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n ExcelFilter.prototype.destroy = function () {\n if (this.dlg) {\n this.unwireExEvents();\n _super.prototype.destroy.call(this);\n }\n if (this.cmenu && this.cmenu.parentElement) {\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.createMenu = function (type, isFiltered, isCheckIcon) {\n var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n this.menu = this.parent.createElement('div', { className: 'e-contextmenu-wrapper' });\n if (this.parent.enableRtl) {\n this.menu.classList.add('e-rtl');\n }\n else {\n this.menu.classList.remove('e-rtl');\n }\n var ul = this.parent.createElement('ul');\n var icon = isFiltered ? 'e-excl-filter-icon e-filtered' : 'e-excl-filter-icon';\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel('ClearFilter'), isFiltered ? '' : 'e-disabled', icon));\n if (type !== 'boolean') {\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel(options[type]), 'e-submenu', isCheckIcon && this.ensureTextFilter() ? 'e-icon-check' : icon + ' e-emptyicon', true));\n }\n this.menu.appendChild(ul);\n };\n ExcelFilter.prototype.createMenuElem = function (val, className, iconName, isSubMenu) {\n var li = this.parent.createElement('li', { className: className + ' e-menu-item' });\n li.innerHTML = val;\n li.insertBefore(this.parent.createElement('span', { className: 'e-menu-icon e-icons ' + iconName }), li.firstChild);\n if (isSubMenu) {\n li.appendChild(this.parent.createElement('span', { className: 'e-icons e-caret' }));\n }\n return li;\n };\n ExcelFilter.prototype.wireExEvents = function () {\n EventHandler.add(this.dlg, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.dlg, 'click', this.clickExHandler, this);\n };\n ExcelFilter.prototype.unwireExEvents = function () {\n EventHandler.remove(this.dlg, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.dlg, 'click', this.clickExHandler);\n };\n ExcelFilter.prototype.clickExHandler = function (e) {\n var menuItem = parentsUntil(e.target, 'e-menu-item');\n if (menuItem && this.getLocalizedLabel('ClearFilter') === menuItem.innerText.trim()) {\n this.clearFilter();\n this.closeDialog();\n }\n };\n ExcelFilter.prototype.destroyCMenu = function () {\n if (this.menuObj && !this.menuObj.isDestroyed) {\n this.menuObj.destroy();\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.hoverHandler = function (e) {\n var target = e.target.querySelector('.e-contextmenu');\n var li = parentsUntil(e.target, 'e-menu-item');\n var focused = this.menu.querySelector('.e-focused');\n var isSubMenu;\n if (focused) {\n focused.classList.remove('e-focused');\n }\n if (li) {\n li.classList.add('e-focused');\n isSubMenu = li.classList.contains('e-submenu');\n }\n if (target) {\n return;\n }\n if (!isSubMenu) {\n var submenu = this.menu.querySelector('.e-submenu');\n if (!isNullOrUndefined(submenu)) {\n submenu.classList.remove('e-selected');\n }\n this.isCMenuOpen = false;\n this.destroyCMenu();\n }\n var selectedMenu = this.ensureTextFilter();\n if (!this.isCMenuOpen && isSubMenu) {\n li.classList.add('e-selected');\n this.isCMenuOpen = true;\n var menuOptions = {\n items: this.getCMenuDS(this.options.type, selectedMenu ? selectedMenu.replace(/\\s/g, '') : undefined),\n select: this.selectHandler.bind(this),\n onClose: this.destroyCMenu.bind(this),\n enableRtl: this.parent.enableRtl,\n beforeClose: this.preventClose\n };\n this.parent.element.appendChild(this.cmenu);\n this.menuObj = new ContextMenu(menuOptions, this.cmenu);\n var client = this.menu.querySelector('.e-submenu').getBoundingClientRect();\n var pos = { top: 0, left: 0 };\n if (Browser.isDevice) {\n var contextRect = this.getContextBounds(this.menuObj);\n pos.top = (window.innerHeight - contextRect.height) / 2;\n pos.left = (window.innerWidth - contextRect.width) / 2;\n this.closeDialog();\n }\n else {\n pos.top = client.top;\n pos.left = this.getCMenuYPosition(this.dlg, this.menuObj);\n }\n this.menuObj.open(pos.top, pos.left, e.target);\n }\n };\n ExcelFilter.prototype.ensureTextFilter = function () {\n var selectedMenu;\n var predicates = this.existingPredicate[this.options.field];\n if (predicates && predicates.length === 2) {\n if (predicates[0].operator === 'greaterThanOrEqual' && predicates[1].operator === 'lessThanOrEqual') {\n selectedMenu = 'Between';\n }\n else {\n selectedMenu = 'CustomFilter';\n }\n }\n else {\n if (predicates && predicates.length === 1) {\n this.optrData = this.customFilterOperators[this.options.type + 'Operator'];\n selectedMenu = predicates[0].operator;\n }\n }\n return selectedMenu;\n };\n ExcelFilter.prototype.preventClose = function (args) {\n if (args.event instanceof MouseEvent && args.event.target.classList.contains('e-submenu')) {\n args.cancel = true;\n }\n };\n ExcelFilter.prototype.getContextBounds = function (context) {\n var elementVisible = this.menuObj.element.style.display;\n this.menuObj.element.style.display = 'block';\n return this.menuObj.element.getBoundingClientRect();\n };\n ExcelFilter.prototype.getCMenuYPosition = function (target, context) {\n var contextWidth = this.getContextBounds(context).width;\n var targetPosition = target.getBoundingClientRect();\n var leftPos = targetPosition.right + contextWidth - this.parent.element.clientWidth;\n return (leftPos < 1) ? (targetPosition.right + 1) : (targetPosition.left - contextWidth - 1);\n };\n ExcelFilter.prototype.openDialog = function (options) {\n var _this = this;\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n this.dialogObj.dataBind();\n var filterLength = (this.existingPredicate[options.field] && this.existingPredicate[options.field].length) ||\n this.options.filteredColumns.filter(function (col) {\n return _this.options.field === col.field;\n }).length;\n this.createMenu(options.type, filterLength > 0, (filterLength === 1 || filterLength === 2));\n this.dlg.insertBefore(this.menu, this.dlg.firstChild);\n this.dlg.classList.add('e-excelfilter');\n this.dlg.classList.remove('e-checkboxfilter');\n this.cmenu = this.parent.createElement('ul', { className: 'e-excel-menu' });\n this.wireExEvents();\n };\n ExcelFilter.prototype.closeDialog = function () {\n _super.prototype.closeDialog.call(this);\n };\n ExcelFilter.prototype.selectHandler = function (e) {\n if (e.item) {\n this.menuItem = e.item;\n this.renderDialogue(e);\n }\n };\n ExcelFilter.prototype.renderDialogue = function (e) {\n var _this = this;\n var target = e.element;\n var column = this.options.field;\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var mainDiv = this.parent.createElement('div', {\n className: 'e-xlfl-maindiv',\n id: isComplex ? complexFieldName + '-xlflmenu' : column + '-xlflmenu'\n });\n this.dlgDiv = this.parent.createElement('div', {\n className: 'e-xlflmenu',\n id: isComplex ? complexFieldName + '-xlfldlg' : column + '-xlfldlg'\n });\n this.parent.element.appendChild(this.dlgDiv);\n this.dlgObj = new Dialog({\n header: this.getLocalizedLabel('CustomFilter'),\n isModal: true,\n overlayClick: this.removeDialog.bind(this),\n showCloseIcon: true,\n closeOnEscape: false,\n target: document.body,\n // target: this.parent.element,\n visible: false,\n enableRtl: this.parent.enableRtl,\n open: function () {\n var row = _this.dlgObj.element.querySelector('table.e-xlfl-table>tr');\n if (_this.options.column.filterTemplate) {\n row.querySelector('#' + _this.options.column.field + '-xlfl-frstvalue').focus();\n }\n else {\n row.cells[1].querySelector('input:not([type=hidden])').focus();\n }\n },\n close: this.removeDialog.bind(this),\n created: this.createdDialog.bind(this, target, column),\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.getLocalizedLabel('OKButton'), isPrimary: true, cssClass: 'e-xlfl-okbtn'\n }\n },\n {\n click: this.removeDialog.bind(this),\n buttonModel: { content: this.getLocalizedLabel('CancelButton'), cssClass: 'e-xlfl-cancelbtn' }\n }],\n content: mainDiv,\n width: 430,\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n ExcelFilter.prototype.removeDialog = function () {\n this.removeObjects([this.dropOptr, this.datePicker, this.dateTimePicker, this.actObj, this.numericTxtObj, this.dlgObj]);\n remove(this.dlgDiv);\n };\n ExcelFilter.prototype.createdDialog = function (target, column) {\n this.renderCustomFilter(target, column);\n this.dlgObj.element.style.left = '0px';\n this.dlgObj.element.style.top = '0px';\n if (Browser.isDevice && window.innerWidth < 440) {\n this.dlgObj.element.style.width = '90%';\n }\n this.dlgObj.show();\n };\n ExcelFilter.prototype.renderCustomFilter = function (target, column) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-xlfl-maindiv');\n /* tslint:disable-next-line:max-line-length */\n var dlgFields = this.parent.createElement('div', { innerHTML: this.getLocalizedLabel('ShowRowsWhere'), className: 'e-xlfl-dlgfields' });\n dlgConetntEle.appendChild(dlgFields);\n //column name\n var fieldSet = this.parent.createElement('div', { innerHTML: this.options.displayName, className: 'e-xlfl-fieldset' });\n dlgConetntEle.appendChild(fieldSet);\n this.renderFilterUI(column, dlgConetntEle);\n };\n ExcelFilter.prototype.filterBtnClick = function (col) {\n var isComplex = !isNullOrUndefined(col) && isComplexField(col);\n var complexFieldName = !isNullOrUndefined(col) && getComplexFieldID(col);\n var colValue = isComplex ? complexFieldName : col;\n var fValue = this.dlgDiv.querySelector('#' + colValue + '-xlfl-frstvalue').ej2_instances[0];\n var fOperator = this.dlgDiv.querySelector('#' + colValue + '-xlfl-frstoptr').ej2_instances[0];\n var sValue = this.dlgDiv.querySelector('#' + colValue + '-xlfl-secndvalue').ej2_instances[0];\n var sOperator = this.dlgDiv.querySelector('#' + colValue + '-xlfl-secndoptr').ej2_instances[0];\n var checkBoxValue;\n if (this.options.type === 'string') {\n var checkBox = this.dlgDiv.querySelector('#' + colValue + '-xlflmtcase').ej2_instances[0];\n checkBoxValue = checkBox.checked;\n }\n var andRadio = this.dlgDiv.querySelector('#' + colValue + 'e-xlfl-frstpredicate').ej2_instances[0];\n var orRadio = this.dlgDiv.querySelector('#' + colValue + 'e-xlfl-secndpredicate').ej2_instances[0];\n var predicate = (andRadio.checked ? 'and' : 'or');\n if (sValue.value === null) {\n predicate = 'or';\n }\n this.filterByColumn(this.options.field, fOperator.value, fValue.value, predicate, checkBoxValue, this.parent.filterSettings.ignoreAccent, sOperator.value, sValue.value);\n this.removeDialog();\n };\n /**\n * Filters grid row by column name with given options.\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} firstOperator - Defines the first operator by how to filter records.\n * @param {string | number | Date | boolean} firstValue - Defines the first value which is used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If ignore case set to true, then filter records with exact match or else\n * filter records with case insensitive(uppercase and lowercase letters treated as same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then ignores the diacritic characters or accents when filtering.\n * @param {string} secondOperator - Defines the second operator by how to filter records.\n * @param {string | number | Date | boolean} secondValue - Defines the first value which is used to filter records.\n */\n ExcelFilter.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n var col = this.parent.getColumnByField(fieldName);\n var field = col.isForeignColumn() ? col.foreignKeyValue : fieldName;\n var fColl = [];\n var mPredicate;\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: firstOperator,\n value: firstValue,\n type: this.options.type\n });\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: firstOperator, arg3: firstValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: secondOperator, arg8: secondValue\n });\n return;\n }\n mPredicate = new Predicate(field, firstOperator.toLowerCase(), firstValue, !matchCase, ignoreAccent);\n if (secondValue) {\n secondOperator = !isNullOrUndefined(secondOperator) ? secondOperator : 'equal';\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: secondOperator,\n value: secondValue,\n type: this.options.type\n });\n /* tslint:disable-next-line:max-line-length */\n mPredicate = mPredicate[predicate](field, secondOperator.toLowerCase(), secondValue, !matchCase, ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: mPredicate, actualPredicate: fColl\n };\n if (col.isForeignColumn()) {\n this.foreignKeyFilter(args, fColl, mPredicate);\n }\n else {\n this.options.handler(args);\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderOperatorUI = function (column, table, elementID, predicates, isFirst) {\n var fieldElement = this.parent.createElement('tr', { className: 'e-xlfl-fields' });\n table.appendChild(fieldElement);\n var xlfloptr = this.parent.createElement('td', { className: 'e-xlfl-optr' });\n fieldElement.appendChild(xlfloptr);\n var optrDiv = this.parent.createElement('div', { className: 'e-xlfl-optrdiv' });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var optrInput = this.parent\n .createElement('input', { id: isComplex ? complexFieldName + elementID : column + elementID });\n optrDiv.appendChild(optrInput);\n xlfloptr.appendChild(optrDiv);\n var optr = this.options.type + 'Operator';\n var dropDatasource = this.customFilterOperators[optr];\n this.optrData = dropDatasource;\n var selectedValue = this.dropSelectedVal(column, predicates, isFirst);\n //Trailing three dots are sliced.\n var menuText = '';\n if (this.menuItem) {\n menuText = this.menuItem.text.slice(0, -3);\n if (menuText !== this.getLocalizedLabel('CustomFilter')) {\n selectedValue = isFirst ? menuText : undefined;\n }\n if (menuText === this.getLocalizedLabel('Between')) {\n selectedValue = this.getLocalizedLabel(isFirst ? 'GreaterThanOrEqual' : 'LessThanOrEqual');\n }\n }\n this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n text: selectedValue,\n open: this.dropDownOpen.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.dropOptr.appendTo(optrInput);\n var operator = this.getSelectedValue(selectedValue);\n return { fieldElement: fieldElement, operator: operator };\n };\n ExcelFilter.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n ExcelFilter.prototype.getSelectedValue = function (text) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('text', 'equal', text));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].value : '';\n };\n ExcelFilter.prototype.dropSelectedVal = function (col, predicates, isFirst) {\n var operator;\n if (predicates && predicates.length > 0) {\n operator = predicates.length === 2 ?\n (isFirst ? predicates[0].operator : predicates[1].operator) :\n (isFirst ? predicates[0].operator : undefined);\n }\n else {\n operator = isFirst ? 'equal' : undefined;\n }\n return this.getSelectedText(operator);\n };\n ExcelFilter.prototype.getSelectedText = function (operator) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', operator));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n };\n ExcelFilter.prototype.renderFilterUI = function (column, dlgConetntEle) {\n var predicates = this.existingPredicate[column];\n var table = this.parent.createElement('table', { className: 'e-xlfl-table' });\n dlgConetntEle.appendChild(table);\n var colGroup = this.parent.createElement('colGroup');\n colGroup.innerHTML = '';\n table.appendChild(colGroup);\n //Renders first dropdown\n /* tslint:disable-next-line:max-line-length */\n var optr = this.renderOperatorUI(column, table, '-xlfl-frstoptr', predicates, true);\n //Renders first value\n this.renderFlValueUI(column, optr, '-xlfl-frstvalue', predicates, true);\n var predicate = this.parent.createElement('tr', { className: 'e-xlfl-predicate' });\n table.appendChild(predicate);\n //Renders first radion button\n this.renderRadioButton(column, predicate, predicates);\n //Renders second dropdown\n optr = this.renderOperatorUI(column, table, '-xlfl-secndoptr', predicates, false);\n //Renders second text box\n this.renderFlValueUI(column, optr, '-xlfl-secndvalue', predicates, false);\n };\n ExcelFilter.prototype.renderRadioButton = function (column, tr, predicates) {\n var td = this.parent.createElement('td', { className: 'e-xlfl-radio', attrs: { 'colSpan': '2' } });\n tr.appendChild(td);\n var radioDiv = this.parent\n .createElement('div', { className: 'e-xlfl-radiodiv', attrs: { 'style': 'display: inline-block' } });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n /* tslint:disable-next-line:max-line-length */\n var frstpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-frstpredicate' : column + 'e-xlfl-frstpredicate', attrs: { 'type': 'radio' } });\n /* tslint:disable-next-line:max-line-length */\n var secndpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-secndpredicate' : column + 'e-xlfl-secndpredicate', attrs: { 'type': 'radio' } });\n //appends into div\n radioDiv.appendChild(frstpredicate);\n radioDiv.appendChild(secndpredicate);\n td.appendChild(radioDiv);\n if (this.options.type === 'string') {\n this.renderMatchCase(column, tr, td, '-xlflmtcase', predicates);\n }\n // Initialize AND RadioButton component.\n /* tslint:disable-next-line:max-line-length */\n var andRadio = new RadioButton({ label: this.getLocalizedLabel('AND'), name: 'default', cssClass: 'e-xlfl-radio-and', checked: true, enableRtl: this.parent.enableRtl });\n // Initialize OR RadioButton component.\n /* tslint:disable-next-line:max-line-length */\n var orRadio = new RadioButton({ label: this.getLocalizedLabel('OR'), name: 'default', cssClass: 'e-xlfl-radio-or', enableRtl: this.parent.enableRtl });\n var flValue = predicates && predicates.length === 2 ? predicates[1].predicate : 'and';\n if (flValue === 'and') {\n andRadio.checked = true;\n orRadio.checked = false;\n }\n else {\n orRadio.checked = true;\n andRadio.checked = false;\n }\n // Render initialized RadioButton.\n andRadio.appendTo(frstpredicate);\n orRadio.appendTo(secndpredicate);\n };\n /* tslint:disable-next-line:no-any */\n ExcelFilter.prototype.removeObjects = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var obj = elements_1[_i];\n if (obj && !obj.isDestroyed) {\n obj.destroy();\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderFlValueUI = function (column, optr, elementId, predicates, isFirst) {\n var value = this.parent.createElement('td', { className: 'e-xlfl-value' });\n optr.fieldElement.appendChild(value);\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var valueDiv = this.parent.createElement('div', { className: 'e-xlfl-valuediv' });\n var isFilteredCol = this.filterSettings.columns.some(function (col) { return column === col.field; });\n var fltrPredicates = this.options.filteredColumns.filter(function (col) { return col.field === column; });\n if (this.options.column.filterTemplate) {\n var data = {};\n var columnObj = this.parent.getColumnByField(column);\n if (isFilteredCol && elementId === '-xlfl-frstvalue') {\n data = { column: predicates instanceof Array ? predicates[0] : predicates };\n var indx = this.options.column.columnData && fltrPredicates.length > 1 ?\n (this.options.column.columnData.length === 1 ? 0 : 1) : 0;\n data[this.options.field] = columnObj.foreignKeyValue ? this.options.column.columnData[indx][columnObj.foreignKeyValue] :\n fltrPredicates[indx].value;\n if (this.options.foreignKeyValue) {\n data[this.options.foreignKeyValue] = this.options.column.columnData[indx][columnObj.foreignKeyValue];\n }\n }\n var element = this.options.column.getFilterTemplate()(data, this.parent, 'filterTemplate');\n appendChildren(valueDiv, element);\n valueDiv.children[0].id = isComplex ? complexFieldName + elementId : column + elementId;\n value.appendChild(valueDiv);\n }\n else {\n var valueInput = this.parent\n .createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId });\n valueDiv.appendChild(valueInput);\n value.appendChild(valueDiv);\n var flValue = void 0;\n var predicate = void 0;\n if (predicates && predicates.length > 0) {\n predicate = predicates.length === 2 ?\n (isFirst ? predicates[0] : predicates[1]) :\n (isFirst ? predicates[0] : undefined);\n flValue = (predicate && predicate.operator === optr.operator) ? predicate.value : undefined;\n }\n var types = {\n 'string': this.renderAutoComplete.bind(this),\n 'number': this.renderNumericTextBox.bind(this),\n 'date': this.renderDate.bind(this),\n 'datetime': this.renderDateTime.bind(this)\n };\n types[this.options.type](this.options, column, valueInput, flValue, this.parent.enableRtl);\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderMatchCase = function (column, tr, matchCase, elementId, predicates) {\n /* tslint:disable-next-line:max-line-length */\n var matchCaseDiv = this.parent.createElement('div', { className: 'e-xlfl-matchcasediv', attrs: { 'style': 'display: inline-block' } });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var matchCaseInput = this.parent.createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId, attrs: { 'type': 'checkbox' } });\n matchCaseDiv.appendChild(matchCaseInput);\n matchCase.appendChild(matchCaseDiv);\n var flValue = predicates && predicates.length > 0 ?\n (predicates && predicates.length === 2 ? predicates[1].matchCase : predicates[0].matchCase) :\n false;\n // Initialize Match Case check box.\n var checkbox = new CheckBox({\n label: this.getLocalizedLabel('MatchCase'),\n enableRtl: this.parent.enableRtl, checked: flValue\n });\n // Render initialized CheckBox.\n checkbox.appendTo(matchCaseInput);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderDate = function (options, column, inputValue, fValue, isRtl) {\n var format = getCustomDateFormat(options.format, options.type);\n this.datePicker = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n });\n this.datePicker.appendTo(inputValue);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderDateTime = function (options, column, inputValue, fValue, isRtl) {\n var format = getCustomDateFormat(options.format, options.type);\n this.dateTimePicker = new DateTimePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n });\n this.dateTimePicker.appendTo(inputValue);\n };\n ExcelFilter.prototype.completeAction = function (e) {\n e.result = distinctStringValues(e.result);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderNumericTextBox = function (options, column, inputValue, fValue, isRtl) {\n this.numericTxtObj = new NumericTextBox({\n format: options.format,\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n value: fValue\n });\n this.numericTxtObj.appendTo(inputValue);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderAutoComplete = function (options, column, inputValue, fValue, isRtl) {\n var _this = this;\n var colObj = this.parent.getColumnByField(column);\n var isForeignColumn = colObj.isForeignColumn();\n var dataSource = isForeignColumn ? colObj.dataSource : options.dataSource;\n var fields = { value: isForeignColumn ? colObj.foreignKeyValue : column };\n var actObj = new AutoComplete({\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n query: this.parent.query.clone(),\n sortOrder: 'Ascending',\n locale: this.parent.locale,\n autofill: true,\n focus: function () {\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var columnvalue = isComplex ? complexFieldName : column;\n actObj.filterType = _this.dlgDiv.querySelector('#' + columnvalue +\n (inputValue.id === (columnvalue + '-xlfl-frstvalue') ?\n '-xlfl-frstoptr' :\n '-xlfl-secndoptr')).ej2_instances[0].value;\n actObj.ignoreCase = options.type === 'string' ?\n !_this.dlgDiv.querySelector('#' + columnvalue + '-xlflmtcase').ej2_instances[0].checked :\n true;\n actObj.filterType = !isNullOrUndefined(actObj.filterType) ? actObj.filterType :\n 'equal';\n },\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n actionComplete: function (e) {\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObject) {\n return isComplex ? _this.performComplexDataOperation(actObj.fields.value, mapObject)\n : mapObject[actObj.fields.value];\n }).indexOf(isComplex ? _this.performComplexDataOperation(actObj.fields.value, obj) :\n obj[_this.actObj.fields.value]) === index;\n });\n },\n value: fValue\n });\n actObj.appendTo(inputValue);\n this.actObj = actObj;\n };\n ExcelFilter.prototype.performComplexDataOperation = function (value, mapObject) {\n var returnObj;\n var length = value.split('.').length;\n var splits = value.split('.');\n var duplicateMap = mapObject;\n for (var i = 0; i < length; i++) {\n returnObj = duplicateMap[splits[i]];\n duplicateMap = returnObj;\n }\n return returnObj;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExcelFilter.prototype.getModuleName = function () {\n return 'excelFilter';\n };\n return ExcelFilter;\n}(CheckBoxFilter));\nexport { ExcelFilter };\n","import { EventHandler, isNullOrUndefined, extend, closest, getValue } from '@syncfusion/ej2-base';\nimport { getActualPropFromColl, isActionPrevent, getColumnByForeignKeyValue } from '../base/util';\nimport { remove, matches } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport { FilterCellRenderer } from '../renderer/filter-cell-renderer';\nimport { parentsUntil } from '../base/util';\nimport { FilterMenuRenderer } from '../renderer/filter-menu-renderer';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { ExcelFilter } from '../actions/excel-filter';\n/**\n *\n * The `Filter` module is used to handle filtering action.\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Grid filtering module\n * @hidden\n */\n function Filter(parent, filterSettings, serviceLocator) {\n this.predicate = 'and';\n this.contentRefresh = true;\n this.values = {};\n this.cellText = {};\n this.nextFlMenuOpen = '';\n this.type = { 'Menu': FilterMenuRenderer, 'CheckBox': CheckBoxFilter, 'Excel': ExcelFilter };\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith'\n };\n this.fltrDlgDetails = { field: '', isOpen: false };\n this.actualPredicate = {};\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * To render filter bar when filtering enabled.\n * @return {void}\n * @hidden\n */\n Filter.prototype.render = function (e) {\n if (DataUtil.getObject('args.isFrozen', e)) {\n return;\n }\n var gObj = this.parent;\n this.l10n = this.serviceLocator.getService('localization');\n this.getLocalizedCustomOperators();\n if (this.parent.filterSettings.type === 'FilterBar') {\n if (gObj.columns.length) {\n var fltrElem = this.parent.element.querySelector('.e-filterbar');\n if (fltrElem) {\n remove(fltrElem);\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Filter, gObj);\n var row = void 0;\n var cellrender = this.serviceLocator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Filter, new FilterCellRenderer(this.parent, this.serviceLocator));\n this.valueFormatter = this.serviceLocator.getService('valueFormatter');\n rowRenderer.element = this.parent.createElement('tr', { className: 'e-filterbar' });\n row = this.generateRow();\n row.data = this.values;\n this.parent.getHeaderContent().querySelector('thead').appendChild(rowRenderer.element);\n this.element = rowRenderer.render(row, gObj.getColumns(), null, null, rowRenderer.element);\n var detail = this.element.querySelector('.e-detailheadercell');\n if (detail) {\n detail.className = 'e-filterbarcell e-mastercell';\n }\n var gCells = [].slice.call(this.element.querySelectorAll('.e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n this.wireEvents();\n this.parent.notify(events.freezeRender, { case: 'filter' });\n }\n }\n };\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.destroy();\n }\n this.filterSettings.columns = [];\n this.updateFilterMsg();\n this.removeEventListener();\n this.unWireEvents();\n if (this.element) {\n remove(this.element);\n var filterBarElement = this.parent.getHeaderContent().querySelector('.e-filterbar');\n if (this.parent.getFrozenColumns() && filterBarElement) {\n remove(filterBarElement);\n }\n }\n };\n Filter.prototype.generateRow = function (index) {\n var options = {};\n var row = new Row(options);\n row.cells = this.generateCells();\n return row;\n };\n Filter.prototype.generateCells = function () {\n //TODO: generate dummy column for group, detail, stacked row here for filtering;\n var cells = [];\n if (this.parent.allowGrouping) {\n for (var c = 0, len = this.parent.groupSettings.columns.length; c < len; c++) {\n cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var dummy = _a[_i];\n cells.push(this.generateCell(dummy));\n }\n return cells;\n };\n Filter.prototype.generateCell = function (column, cellType) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': false,\n 'rowId': '',\n 'column': column,\n 'cellType': cellType ? cellType : CellType.Filter,\n 'attributes': { title: this.l10n.getConstant('FilterbarTitle') }\n };\n return new Cell(opt);\n };\n /**\n * To update filterSettings when applying filter.\n * @return {void}\n * @hidden\n */\n Filter.prototype.updateModel = function () {\n var col = this.parent.getColumnByField(this.fieldName);\n var field = col.isForeignColumn() ? col.foreignKeyValue : this.fieldName;\n this.currentFilterObject = {\n field: field, operator: this.operator, value: this.value, predicate: this.predicate,\n matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n };\n var index = this.getFilteredColsIndexByField(col);\n if (index > -1) {\n this.filterSettings.columns[index] = this.currentFilterObject;\n }\n else {\n this.filterSettings.columns.push(this.currentFilterObject);\n }\n this.filterSettings.columns = this.filterSettings.columns;\n this.parent.dataBind();\n };\n Filter.prototype.getFilteredColsIndexByField = function (col) {\n var cols = this.filterSettings.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === col.field || (col.isForeignColumn() && cols[i].field === col.foreignKeyValue)) {\n return i;\n }\n }\n return -1;\n };\n /**\n * To trigger action complete event.\n * @return {void}\n * @hidden\n */\n Filter.prototype.onActionComplete = function (e) {\n var args = !this.isRemove ? {\n currentFilterObject: this.currentFilterObject,\n /* tslint:disable:no-string-literal */\n currentFilteringColumn: !isNullOrUndefined(this.column) ? this.column.field : undefined,\n /* tslint:enable:no-string-literal */\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionComplete\n } : {\n requestType: 'filtering', type: events.actionComplete\n };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.isRemove = false;\n };\n Filter.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), 'keyup', this.keyUpHandler, this);\n };\n Filter.prototype.unWireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), 'keyup', this.keyUpHandler);\n };\n Filter.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n Filter.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.filterSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n for (var _i = 0, _a = gObj.filterSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.filterByColumn(col.field, col.operator, col.value, col.predicate, col.matchCase, col.ignoreAccent, col.actualFilterValue, col.actualOperator);\n }\n this.updateFilterMsg();\n this.contentRefresh = true;\n }\n };\n /**\n * @hidden\n */\n Filter.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.filterComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.keyPressed, this.keyUpHandler, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.headerRefreshed, this.render, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.filterMenuClose, this.filterMenuClose, this);\n EventHandler.add(document, 'click', this.clickHandler, this);\n this.parent.on(events.filterOpen, this.columnMenuFilter, this);\n this.parent.on(events.click, this.filterIconClickHandler, this);\n };\n /**\n * @hidden\n */\n Filter.prototype.removeEventListener = function () {\n EventHandler.remove(document, 'click', this.clickHandler);\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.filterComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.keyPressed, this.keyUpHandler);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.off(events.headerRefreshed, this.render);\n this.parent.off(events.filterOpen, this.columnMenuFilter);\n this.parent.off(events.filterMenuClose, this.filterMenuClose);\n this.parent.off(events.click, this.filterIconClickHandler);\n };\n Filter.prototype.filterMenuClose = function (args) {\n this.fltrDlgDetails.isOpen = false;\n };\n /**\n * Filters the Grid row by fieldName, filterOperator, and filterValue.\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value which is used to filter records.\n * @param {string} predicate - Defines the relationship of one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, then the filter records\n * the exact match or
    filters records that are case insensitive (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then filter ignores the diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for the filter column.\n * @param {string} actualOperator - Defines the actual filter operator for the filter column.\n * @return {void}\n */\n Filter.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n var gObj = this.parent;\n var filterCell;\n this.column = gObj.getColumnByField(fieldName);\n if (this.filterSettings.type === 'FilterBar') {\n filterCell = gObj.getHeaderContent().querySelector('[id=\\'' + this.column.field + '_filterBarcell\\']');\n }\n if (!isNullOrUndefined(this.column.allowFiltering) && !this.column.allowFiltering) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: filterOperator, arg3: filterValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: actualFilterValue, arg8: actualOperator\n });\n return;\n }\n this.value = filterValue;\n this.matchCase = matchCase || false;\n this.ignoreAccent = this.ignoreAccent = !isNullOrUndefined(ignoreAccent) ? ignoreAccent : this.parent.filterSettings.ignoreAccent;\n this.fieldName = fieldName;\n this.predicate = predicate || 'and';\n this.operator = filterOperator;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (this.column.type === 'number' || this.column.type === 'date') {\n this.matchCase = true;\n }\n gObj.getColumnHeaderByField(fieldName).setAttribute('aria-filtered', 'true');\n if (filterValue.length < 1 || this.checkForSkipInput(this.column, filterValue)) {\n this.filterStatusMsg = filterValue.length < 1 ? '' : this.l10n.getConstant('InvalidFilterMessage');\n this.updateFilterMsg();\n return;\n }\n if (filterCell && this.filterSettings.type === 'FilterBar' && filterCell.value !== filterValue) {\n filterCell.value = filterValue;\n }\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n this.values[this.column.field] = filterValue; //this line should be above updateModel\n }\n this.actualPredicate[this.fieldName] = [{\n field: this.fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: this.operator,\n value: this.value,\n type: this.column.type\n }];\n this.addFilteredClass(this.fieldName);\n if (this.checkAlreadyColFiltered(this.column.field)) {\n return;\n }\n this.updateModel();\n };\n Filter.prototype.applyColumnFormat = function (filterValue) {\n var getFlvalue = (this.column.type === 'date' || this.column.type === 'datetime') ?\n new Date(filterValue) : parseFloat(filterValue);\n this.values[this.column.field] = this.setFormatForFlColumn(getFlvalue, this.column);\n };\n Filter.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'columns':\n if (this.contentRefresh) {\n this.parent.notify(events.modelChanged, {\n currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column ?\n this.column.field : undefined,\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionBegin\n });\n this.refreshFilterSettings();\n this.updateFilterMsg();\n this.updateFilter();\n }\n break;\n case 'showFilterBarStatus':\n if (e.properties[prop]) {\n this.updateFilterMsg();\n }\n else if (this.parent.allowPaging) {\n this.parent.updateExternalMessage('');\n }\n break;\n case 'type':\n this.parent.refreshHeader();\n this.refreshFilterSettings();\n break;\n }\n }\n };\n Filter.prototype.refreshFilterSettings = function () {\n if (this.filterSettings.type === 'FilterBar') {\n for (var i = 0; i < this.filterSettings.columns.length; i++) {\n this.column = this.parent.getColumnByField(this.filterSettings.columns[i].field) ||\n getColumnByForeignKeyValue(this.filterSettings.columns[i].field, this.parent.getForeignKeyColumns());\n var filterValue = this.filterSettings.columns[i].value;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n var key = this.filterSettings.columns[i].field;\n this.values[key] = this.filterSettings.columns[i].value;\n }\n var filterElement = this.getFilterBarElement(this.filterSettings.columns[i].field);\n if (filterElement) {\n if (!isNullOrUndefined(this.cellText[this.filterSettings.columns[i].field])) {\n filterElement.value = this.cellText[this.filterSettings.columns[i].field];\n }\n else {\n filterElement.value = this.filterSettings.columns[i].value;\n }\n }\n }\n if (this.filterSettings.columns.length === 0) {\n var col = this.parent.getColumns();\n for (var i = 0; i < col.length; i++) {\n var filterElement = this.getFilterBarElement(col[i].field);\n if (filterElement && filterElement.value !== '') {\n filterElement.value = '';\n delete this.values[col[i].field];\n }\n }\n }\n }\n };\n Filter.prototype.getFilterBarElement = function (col) {\n var selector = '[id=\\'' + col + '_filterBarcell\\']';\n var filterElement;\n if (selector && !isNullOrUndefined(this.element)) {\n filterElement = this.element.querySelector(selector);\n }\n return filterElement;\n };\n /**\n * @private\n */\n Filter.prototype.refreshFilter = function () {\n this.refreshFilterSettings();\n this.updateFilterMsg();\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n Filter.prototype.clearFiltering = function () {\n var cols = getActualPropFromColl(this.filterSettings.columns);\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFiltering });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeFilteredColsByField(cols[i].field, false);\n }\n if (this.parent.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n var fltrElement = [].slice.call(this.parent.element.querySelectorAll('.e-filtered'));\n for (var i = 0, len = fltrElement.length; i < len; i++) {\n fltrElement[0].removeAttribute('aria-filtered');\n fltrElement[0].classList.remove('e-filtered');\n }\n }\n this.isRemove = true;\n this.filterStatusMsg = '';\n this.updateFilterMsg();\n };\n Filter.prototype.checkAlreadyColFiltered = function (field) {\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n if (col.field === field && col.value === this.value &&\n col.operator === this.operator && col.predicate === this.predicate) {\n return true;\n }\n }\n return false;\n };\n Filter.prototype.columnMenuFilter = function (args) {\n this.column = args.col;\n var ele = closest(args.target, '#' + args.id);\n if (args.isClose && !ele) {\n this.filterModule.closeDialog();\n }\n else if (ele) {\n this.filterDialogOpen(this.column, args.target);\n }\n };\n Filter.prototype.filterDialogOpen = function (col, target, left, top) {\n var gObj = this.parent;\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.filterModule = new this.type[col.filter.type || this.parent.filterSettings.type](this.parent, gObj.filterSettings, this.serviceLocator, this.customOperators, this);\n var dataSource = col.filter.dataSource || gObj.getDataModule().dataManager;\n this.filterModule.openDialog({\n type: col.type, field: col.field, displayName: col.headerText,\n dataSource: dataSource, format: col.format,\n filteredColumns: gObj.filterSettings.columns, target: target,\n sortedColumns: gObj.sortSettings.columns, formatFn: col.getFormatter(),\n parserFn: col.getParser(), query: gObj.query, template: col.getFilterItemTemplate(),\n hideSearchbox: isNullOrUndefined(col.filter.hideSearchbox) ? false : col.filter.hideSearchbox,\n handler: this.filterHandler.bind(this), localizedStrings: gObj.getLocaleConstants(),\n position: { X: left, Y: top }, column: col, foreignKeyValue: col.foreignKeyValue,\n actualPredicate: this.actualPredicate, localeObj: this.parent.localeObj\n });\n };\n /**\n * Removes filtered column by field name.\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @return {void}\n * @hidden\n */\n Filter.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n var fCell;\n var cols = this.filterSettings.columns;\n if (isActionPrevent(this.parent)) {\n var args = { instance: this, handler: this.removeFilteredColsByField, arg1: field, arg2: isClearFilterBar };\n this.parent.notify(events.preventBatch, args);\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n var column = this.parent.getColumnByField(field) ||\n getColumnByForeignKeyValue(field, this.parent.getForeignKeyColumns());\n if (cols[i].field === field || cols[i].field === column.foreignKeyValue) {\n if (this.filterSettings.type === 'FilterBar' && !isClearFilterBar) {\n var selector = '[id=\\'' + cols[i].field + '_filterBarcell\\']';\n fCell = this.parent.getHeaderContent().querySelector(selector);\n fCell.value = '';\n delete this.values[field];\n }\n cols.splice(i, 1);\n var fltrElement = this.parent.getColumnHeaderByField(column.field);\n fltrElement.removeAttribute('aria-filtered');\n if (this.filterSettings.type !== 'FilterBar') {\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n fltrElement.querySelector(iconClass).classList.remove('e-filtered');\n }\n this.isRemove = true;\n if (this.actualPredicate[field]) {\n delete this.actualPredicate[field];\n }\n if (this.values[field]) {\n delete this.values[field];\n }\n this.parent.notify(events.modelChanged, {\n requestType: 'filtering', type: events.actionBegin, currentFilterObject: {\n field: column.field, operator: this.operator, value: this.value, predicate: this.predicate,\n matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n }, currentFilterColumn: column\n });\n break;\n }\n }\n this.updateFilterMsg();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n Filter.prototype.keyUpHandler = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (target && matches(target, '.e-filterbar input')) {\n var closeHeaderEle = closest(target, 'th.e-filterbarcell');\n this.column = gObj.getColumnByUid(closeHeaderEle.getAttribute('e-mappinguid'));\n if (!this.column) {\n return;\n }\n if ((this.filterSettings.mode === 'Immediate' || e.keyCode === 13) && e.keyCode !== 9) {\n this.value = target.value.trim();\n this.processFilter(e);\n }\n }\n };\n Filter.prototype.updateCrossIcon = function (element) {\n if (element.value.length) {\n element.nextElementSibling.classList.remove('e-hide');\n }\n };\n Filter.prototype.updateFilterMsg = function () {\n if (this.filterSettings.type === 'FilterBar') {\n var gObj = this.parent;\n var getFormatFlValue = void 0;\n var columns = this.filterSettings.columns;\n var formater = this.serviceLocator.getService('valueFormatter');\n var column = void 0;\n var value = void 0;\n if (!this.filterSettings.showFilterBarStatus) {\n return;\n }\n if (columns.length > 0 && this.filterStatusMsg !== this.l10n.getConstant('InvalidFilterMessage')) {\n this.filterStatusMsg = '';\n for (var index = 0; index < columns.length; index++) {\n column = gObj.getColumnByField(columns[index].field) ||\n getColumnByForeignKeyValue(columns[index].field, this.parent.getForeignKeyColumns());\n if (index) {\n this.filterStatusMsg += ' && ';\n }\n if (!isNullOrUndefined(column.format)) {\n var flValue = (column.type === 'date' || column.type === 'datetime') ?\n new Date(this.values[column.field]) :\n this.values[column.field];\n if (!(column.type === 'date' || column.type === 'datetime')) {\n var formater_1 = this.serviceLocator.getService('valueFormatter');\n getFormatFlValue = formater_1.toView(flValue, column.getParser()).toString();\n }\n else {\n getFormatFlValue = this.setFormatForFlColumn(flValue, column);\n }\n this.filterStatusMsg += column.headerText + ': ' + getFormatFlValue;\n }\n else {\n this.filterStatusMsg += column.headerText + ': ' + this.values[column.field];\n }\n }\n }\n if (gObj.allowPaging) {\n gObj.updateExternalMessage(this.filterStatusMsg);\n }\n //TODO: virtual paging \n this.filterStatusMsg = '';\n }\n };\n Filter.prototype.setFormatForFlColumn = function (value, column) {\n var formater = this.serviceLocator.getService('valueFormatter');\n return formater.toView(value, column.getFormatter()).toString();\n };\n Filter.prototype.checkForSkipInput = function (column, value) {\n var isSkip;\n var skipInput;\n if (column.type === 'number') {\n skipInput = ['=', ' ', '!'];\n if (DataUtil.operatorSymbols[value] || skipInput.indexOf(value) > -1) {\n isSkip = true;\n }\n }\n else if (column.type === 'string') {\n skipInput = ['>', '<', '=', '!'];\n for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {\n var val = value_1[_i];\n if (skipInput.indexOf(val) > -1) {\n isSkip = true;\n }\n }\n }\n return isSkip;\n };\n Filter.prototype.processFilter = function (e) {\n this.stopTimer();\n this.startTimer(e);\n };\n Filter.prototype.startTimer = function (e) {\n var _this = this;\n this.timer = window.setInterval(function () { _this.onTimerTick(); }, e.keyCode === 13 ? 0 : this.filterSettings.immediateModeDelay);\n };\n Filter.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Filter.prototype.onTimerTick = function () {\n var selector = '[id=\\'' + this.column.field + '_filterBarcell\\']';\n var filterElement = this.element.querySelector(selector);\n if (!filterElement && this.parent.getFrozenColumns()) {\n filterElement = this.parent.getHeaderContent().querySelector(selector);\n }\n var filterValue;\n this.cellText[this.column.field] = filterElement.value;\n this.stopTimer();\n if (!isNullOrUndefined(this.column.filterBarTemplate)) {\n var templateRead = this.column.filterBarTemplate.read;\n if (typeof templateRead === 'string') {\n templateRead = getValue(templateRead, window);\n }\n if (!isNullOrUndefined(templateRead)) {\n this.value = templateRead.call(this, filterElement);\n }\n }\n else {\n filterValue = JSON.parse(JSON.stringify(filterElement.value));\n }\n if (isNullOrUndefined(this.value) || this.value === '') {\n this.removeFilteredColsByField(this.column.field);\n return;\n }\n this.validateFilterValue(this.value);\n this.filterByColumn(this.column.field, this.operator, this.value, this.predicate, this.matchCase, this.ignoreAccent);\n filterElement.value = filterValue;\n this.updateFilterMsg();\n };\n Filter.prototype.validateFilterValue = function (value) {\n var gObj = this.parent;\n var skipInput;\n var index;\n this.matchCase = true;\n switch (this.column.type) {\n case 'number':\n this.operator = this.filterOperators.equal;\n skipInput = ['>', '<', '=', '!'];\n for (var i = 0; i < value.length; i++) {\n if (skipInput.indexOf(value[i]) > -1) {\n index = i;\n break;\n }\n }\n this.getOperator(value.substring(index));\n if (index !== 0) {\n this.value = value.substring(0, index);\n }\n if (this.value !== '' && value.length >= 1) {\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n }\n if (isNaN(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n break;\n case 'date':\n case 'datetime':\n this.operator = this.filterOperators.equal;\n if (this.value !== '' && !(this.value instanceof Date)) {\n this.getOperator(value);\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n if (isNullOrUndefined(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n }\n break;\n case 'string':\n this.matchCase = false;\n if (value.charAt(0) === '*') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(value.length - 1) === '%') {\n this.value = this.value.slice(0, -1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(0) === '%') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.endsWith;\n }\n else {\n this.operator = this.filterOperators.startsWith;\n }\n break;\n case 'boolean':\n if (value.toLowerCase() === 'true' || value === '1') {\n this.value = true;\n }\n else if (value.toLowerCase() === 'false' || value === '0') {\n this.value = false;\n }\n else if (value.length) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n this.operator = this.filterOperators.equal;\n break;\n default:\n this.operator = this.filterOperators.equal;\n }\n };\n Filter.prototype.getOperator = function (value) {\n var singleOp = value.charAt(0);\n var multipleOp = value.slice(0, 2);\n var operators = extend({ '=': this.filterOperators.equal, '!': this.filterOperators.notEqual }, DataUtil.operatorSymbols);\n if (operators.hasOwnProperty(singleOp) || operators.hasOwnProperty(multipleOp)) {\n this.operator = operators[singleOp];\n this.value = value.substring(1);\n if (!this.operator) {\n this.operator = operators[multipleOp];\n this.value = value.substring(2);\n }\n }\n if (this.operator === this.filterOperators.lessThan || this.operator === this.filterOperators.greaterThan) {\n if (this.value.charAt(0) === '=') {\n this.operator = this.operator + 'orequal';\n this.value = this.value.substring(1);\n }\n }\n };\n Filter.prototype.columnPositionChanged = function (e) {\n if (this.parent.filterSettings.type !== 'FilterBar') {\n return;\n }\n };\n Filter.prototype.getLocalizedCustomOperators = function () {\n var numOptr = [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', text: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', text: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', text: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', text: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', text: this.l10n.getConstant('StartsWith') },\n { value: 'endswith', text: this.l10n.getConstant('EndsWith') },\n { value: 'contains', text: this.l10n.getConstant('Contains') },\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: numOptr,\n dateOperator: numOptr,\n datetimeOperator: numOptr,\n booleanOperator: [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ]\n };\n };\n ;\n Filter.prototype.filterIconClickHandler = function (e) {\n var target = e.target;\n if (target.classList.contains('e-filtermenudiv') && (this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel')) {\n var gObj = this.parent;\n var col = gObj.getColumnByUid(parentsUntil(target, 'e-headercell').firstElementChild.getAttribute('e-mappinguid'));\n var gClient = gObj.element.getBoundingClientRect();\n var fClient = target.getBoundingClientRect();\n this.column = col;\n if (this.fltrDlgDetails.field === col.field && this.fltrDlgDetails.isOpen) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.fltrDlgDetails = { field: col.field, isOpen: true };\n this.filterDialogOpen(this.column, target, fClient.right - gClient.left, fClient.bottom - gClient.top);\n }\n };\n Filter.prototype.clickHandler = function (e) {\n if (this.filterSettings.mode === 'Immediate' || this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel') {\n var gObj = this.parent;\n var target = e.target;\n var datepickerEle = target.classList.contains('e-day'); // due to datepicker popup cause\n if (parentsUntil(target, 'e-filter-popup') || target.classList.contains('e-filtermenudiv')) {\n return;\n }\n else if (this.filterModule &&\n (!parentsUntil(target, 'e-popup-wrapper')\n && (!closest(target, '.e-filter-item.e-menu-item'))\n && (!parentsUntil(target, 'e-popup'))) && !datepickerEle) {\n this.filterModule.closeDialog(target);\n }\n if (this.filterSettings.mode === 'Immediate' && target.classList.contains('e-clear-icon')) {\n var targetText = target.previousElementSibling;\n this.removeFilteredColsByField(targetText.id.slice(0, -14)); //Length of _filterBarcell = 14\n }\n }\n };\n Filter.prototype.filterHandler = function (args) {\n var filterIconElement;\n this.actualPredicate[args.field] = args.actualPredicate;\n var dataManager = new DataManager(this.filterSettings.columns);\n var query = new Query().where('field', this.filterOperators.equal, args.field);\n var result = dataManager.executeLocal(query);\n for (var i = 0; i < result.length; i++) {\n var index = -1;\n for (var j = 0; j < this.filterSettings.columns.length; j++) {\n if (result[i].field === this.filterSettings.columns[j].field) {\n index = j;\n break;\n }\n }\n if (index !== -1) {\n this.filterSettings.columns.splice(index, 1);\n }\n }\n if (this.values[args.field]) {\n delete this.values[args.field];\n }\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n filterIconElement = this.parent.getColumnHeaderByField(args.field).querySelector(iconClass);\n if (args.action === 'filtering') {\n this.filterSettings.columns = this.filterSettings.columns.concat(args.filterCollection);\n if (this.filterSettings.columns.length && filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n }\n else {\n if (filterIconElement) {\n filterIconElement.classList.remove('e-filtered');\n }\n this.parent.renderModule.refresh(); //hot-fix onpropertychanged not working for object { array } \n }\n this.parent.dataBind();\n };\n Filter.prototype.updateFilter = function () {\n var cols = this.filterSettings.columns;\n for (var i = 0; i < cols.length; i++) {\n this.column = this.parent.getColumnByField(cols[i].field) ||\n getColumnByForeignKeyValue(cols[i].field, this.parent.getForeignKeyColumns());\n var fieldName = cols[i].field;\n if (!this.parent.getColumnByField(cols[i].field)) {\n fieldName = getColumnByForeignKeyValue(cols[i].field, this.parent.getForeignKeyColumns()).field;\n }\n /* tslint:disable-next-line:max-line-length */\n this.refreshFilterIcon(fieldName, cols[i].operator, cols[i].value, cols[i].type, cols[i].predicate, cols[i].matchCase, cols[i].ignoreAccent);\n }\n };\n /* tslint:disable-next-line:max-line-length */\n Filter.prototype.refreshFilterIcon = function (fieldName, operator, value, type, predicate, matchCase, ignoreAccent) {\n this.actualPredicate[fieldName] = [{\n field: fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: operator,\n value: value,\n type: type\n }];\n this.addFilteredClass(fieldName);\n };\n Filter.prototype.addFilteredClass = function (fieldName) {\n var filterIconElement;\n filterIconElement = this.parent.getColumnHeaderByField(fieldName).querySelector('.e-icon-filter');\n if (filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n };\n return Filter;\n}());\nexport { Filter };\n","import { EventHandler, detach, formatUnit, Browser, closest } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as events from '../base/constant';\nimport { getScrollBarWidth, parentsUntil } from '../base/util';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var resizeClassList = {\n root: 'e-rhandler',\n suppress: 'e-rsuppress',\n icon: 'e-ricon',\n helper: 'e-rhelper',\n header: 'th.e-headercell',\n cursor: 'e-rcursor'\n};\n/**\n * `Resize` module is used to handle Resize to fit for columns.\n * @hidden\n * @private\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for the Grid resize module\n * @hidden\n */\n function Resize(parent) {\n this.tapped = false;\n this.isDblClk = true;\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.widthService = new ColumnWidthService(parent);\n this.addEventListener();\n }\n /**\n * Resize by field names.\n * @param {string|string[]} fName - Defines the field name.\n * @return {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n var columnName = (fName === undefined || fName === null || fName.length <= 0) ?\n this.parent.getColumns().map(function (x) { return x.field; }) : (typeof fName === 'string') ? [fName] : fName;\n this.findColumn(columnName);\n };\n Resize.prototype.resizeColumn = function (fName, index, id) {\n var gObj = this.parent;\n var tWidth = 0;\n var headerTable;\n var contentTable;\n var footerTable;\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var indentWidth = 0;\n var uid = id ? id : this.parent.getUidByColumnField(fName);\n var columnIndex = this.parent.getNormalizedColumnIndex(uid);\n var headerTextClone;\n var contentTextClone;\n var frzCols = gObj.getFrozenColumns();\n if (!isNullOrUndefined(gObj.getFooterContent())) {\n footerTable = gObj.getFooterContentTable();\n }\n if (frzCols) {\n if (index < frzCols) {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \")\");\n }\n else {\n headerTable = gObj.getHeaderContent().querySelector('.e-movableheader').children[0];\n contentTable = gObj.getContent().querySelector('.e-movablecontent').children[0];\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex - frzCols].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + ((columnIndex - frzCols) + 1) + \")\");\n }\n }\n else {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \"):not(.e-groupcaption)\");\n }\n var indentWidthClone = headerTable.querySelector('tr').querySelectorAll('.e-grouptopleftcell');\n if (indentWidthClone.length > 0) {\n for (var i = 0; i < indentWidthClone.length; i++) {\n indentWidth += indentWidthClone[i].offsetWidth;\n }\n }\n var detailsElement = contentTable.querySelector('.e-detailrowcollapse') ||\n contentTable.querySelector('.e-detailrowexpand');\n if ((this.parent.detailTemplate || this.parent.childGrid) && detailsElement) {\n indentWidth += detailsElement.offsetWidth;\n }\n var headerText = [headerTextClone];\n var contentText = [];\n for (var i = 0; i < contentTextClone.length; i++) {\n contentText[i] = contentTextClone[i].cloneNode(true);\n }\n var wHeader = this.createTable(headerTable, headerText, headerDivTag);\n var wContent = this.createTable(contentTable, contentText, contentDivTag);\n var columnbyindex = gObj.getColumns()[index];\n var result;\n var width = (wHeader > wContent) ? columnbyindex.width = formatUnit(wHeader) : columnbyindex.width = formatUnit(wContent);\n this.widthService.setColumnWidth(gObj.getColumns()[index]);\n result = gObj.getColumns().some(function (x) { return x.width === null || x.width === undefined || x.width.length <= 0; });\n if (result === false) {\n gObj.getColumns().forEach(function (element) {\n if (element.visible) {\n tWidth = tWidth + parseInt(element.width, 10);\n }\n });\n }\n var calcTableWidth = tWidth + indentWidth;\n if (tWidth > 0 && !gObj.getFrozenColumns()) {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.widthService.setColumnWidth(new Column({ width: '30px' }));\n }\n headerTable.style.width = formatUnit(calcTableWidth);\n contentTable.style.width = formatUnit(calcTableWidth);\n if (!isNullOrUndefined(footerTable)) {\n footerTable.style.width = formatUnit(calcTableWidth);\n }\n }\n var tableWidth = headerTable.offsetWidth;\n var contentwidth = (gObj.getContent().scrollWidth);\n if (contentwidth > tableWidth) {\n headerTable.classList.add('e-tableborder');\n contentTable.classList.add('e-tableborder');\n }\n else {\n headerTable.classList.remove('e-tableborder');\n contentTable.classList.remove('e-tableborder');\n }\n if (!isNullOrUndefined(footerTable)) {\n footerTable.classList.add('e-tableborder');\n }\n };\n /**\n * To destroy the resize\n * @return {void}\n * @hidden\n */\n Resize.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.widthService = null;\n this.unwireEvents();\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n Resize.prototype.findColumn = function (fName) {\n var _this = this;\n fName.forEach(function (element) {\n var fieldName = element;\n var columnIndex = _this.parent.getColumnIndexByField(fieldName);\n if (_this.parent.getColumns()[columnIndex].visible === true) {\n _this.resizeColumn(fieldName, columnIndex);\n }\n });\n };\n /**\n * To create table for autofit\n * @hidden\n */\n Resize.prototype.createTable = function (table, text, tag) {\n var myTableDiv = this.parent.createElement('div');\n myTableDiv.className = this.parent.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = this.parent.createElement('div');\n mySubDiv.className = tag;\n var myTable = this.parent.createElement('table');\n myTable.className = table.className;\n myTable.classList.add('e-resizetable');\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var myTr = this.parent.createElement('tr');\n text.forEach(function (element) {\n var tr = myTr.cloneNode();\n tr.className = table.querySelector('tr').className;\n tr.appendChild(element);\n myTable.appendChild(tr);\n });\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n var offsetWidthValue = myTable.getBoundingClientRect().width;\n document.body.removeChild(myTableDiv);\n return Math.ceil(offsetWidthValue);\n };\n /**\n * @hidden\n */\n Resize.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerRefreshed, this.refreshHeight, this);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n /**\n * @hidden\n */\n Resize.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.headerRefreshed, this.refreshHeight);\n this.parent.off(events.initialEnd, this.wireEvents);\n };\n /**\n * @hidden\n */\n Resize.prototype.render = function () {\n this.unwireEvents();\n this.wireEvents();\n this.setHandlerHeight();\n };\n Resize.prototype.refreshHeight = function () {\n this.getResizeHandlers().forEach(function (ele) {\n if (ele.parentElement.offsetHeight > 0) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n }\n });\n this.setHandlerHeight();\n };\n Resize.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), Browser.touchStartEvent, this.resizeStart, this);\n EventHandler.add(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit, this);\n };\n Resize.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), Browser.touchStartEvent, this.resizeStart);\n EventHandler.remove(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit);\n };\n Resize.prototype.getResizeHandlers = function () {\n return this.parent.getFrozenColumns() ?\n [].slice.call(this.parent.getHeaderContent().querySelectorAll('.' + resizeClassList.root))\n : [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + resizeClassList.root));\n };\n Resize.prototype.setHandlerHeight = function () {\n [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + resizeClassList.suppress)).forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n Resize.prototype.callAutoFit = function (e) {\n if (e.target.classList.contains('e-rhandler')) {\n var col = this.getTargetColumn(e);\n this.resizeColumn(col.field, this.parent.getNormalizedColumnIndex(col.uid), col.uid);\n var header = closest(e.target, resizeClassList.header);\n header.classList.add('e-resized');\n }\n };\n Resize.prototype.resizeStart = function (e) {\n if (e.target.classList.contains('e-rhandler')) {\n if (!this.helper) {\n if (this.getScrollBarWidth() === 0) {\n for (var _i = 0, _a = this.refreshColumnWidth(); _i < _a.length; _i++) {\n var col = _a[_i];\n this.widthService.setColumnWidth(col);\n }\n this.widthService.setWidthToTable();\n }\n this.element = e.target;\n if (this.parent.getVisibleFrozenColumns()) {\n var mtbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n var ftbody = this.parent.getContent().querySelector('.e-frozencontent').querySelector('tbody');\n var mtr = mtbody.querySelectorAll('tr');\n var ftr = ftbody.querySelectorAll('tr');\n for (var i = 0; i < mtr.length; i++) {\n if (this.parent.rowHeight) {\n mtr[i].style.height = this.parent.rowHeight + 'px';\n ftr[i].style.height = this.parent.rowHeight + 'px';\n }\n else {\n mtr[i].style.removeProperty('height');\n ftr[i].style.removeProperty('height');\n }\n }\n }\n this.parentElementWidth = this.parent.element.getBoundingClientRect().width;\n this.appendHelper();\n this.column = this.getTargetColumn(e);\n this.pageX = this.getPointX(e);\n if (this.parent.enableRtl) {\n this.minMove = parseInt(this.column.width.toString(), 10)\n - (this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0);\n }\n else {\n this.minMove = (this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0)\n - parseInt(this.column.width.toString(), 10);\n }\n this.minMove += this.pageX;\n }\n if (Browser.isDevice && !this.helper.classList.contains(resizeClassList.icon)) {\n this.helper.classList.add(resizeClassList.icon);\n EventHandler.add(document, Browser.touchStartEvent, this.removeHelper, this);\n EventHandler.add(this.helper, Browser.touchStartEvent, this.resizeStart, this);\n }\n else {\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.resizeStart, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n EventHandler.add(document, Browser.touchEndEvent, this.resizeEnd, this);\n EventHandler.add(this.parent.element, Browser.touchMoveEvent, this.resizing, this);\n this.updateCursor('add');\n }\n }\n };\n Resize.prototype.cancelResizeAction = function (removeEvents) {\n if (removeEvents) {\n EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n this.updateCursor('remove');\n }\n if (Browser.isDevice) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n }\n detach(this.helper);\n this.refresh();\n };\n Resize.prototype.getWidth = function (width, minWidth, maxWidth) {\n if (minWidth && width < minWidth) {\n return minWidth;\n }\n else if ((maxWidth && width > maxWidth)) {\n return maxWidth;\n }\n else {\n return width;\n }\n };\n Resize.prototype.resizing = function (e) {\n if (this.parent.allowTextWrap) {\n this.element.style.height = this.element.parentElement.offsetHeight + 'px';\n this.setHelperHeight();\n }\n var pageX = this.getPointX(e);\n var mousemove = this.parent.enableRtl ? -(pageX - this.pageX) : (pageX - this.pageX);\n var colData = {\n width: parseInt(this.widthService.getWidth(this.column).toString(), 10) + mousemove,\n minWidth: this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : null,\n maxWidth: this.column.maxWidth ? parseInt(this.column.maxWidth.toString(), 10) : null\n };\n var width = this.getWidth(colData.width, colData.minWidth, colData.maxWidth);\n if ((!this.parent.enableRtl && this.minMove >= pageX) || (this.parent.enableRtl && this.minMove <= pageX)) {\n width = this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0;\n this.pageX = pageX = this.minMove;\n }\n if (width !== parseInt(this.column.width.toString(), 10)) {\n this.pageX = pageX;\n this.column.width = formatUnit(width);\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.onResize, args);\n if (args.cancel) {\n this.cancelResizeAction(true);\n return;\n }\n this.widthService.setColumnWidth(this.column, null, 'resize');\n this.updateHelper();\n }\n this.isDblClk = false;\n };\n Resize.prototype.resizeEnd = function (e) {\n if (!this.helper || this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n this.updateCursor('remove');\n detach(this.helper);\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.resizeStop, args);\n closest(this.element, '.e-headercell').classList.add('e-resized');\n if (parentsUntil(this.element, 'e-frozenheader')) {\n this.isFrozenColResized = true;\n }\n else {\n this.isFrozenColResized = false;\n }\n if (this.parent.getFrozenColumns()) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n this.refresh();\n this.doubleTapEvent(e);\n this.isDblClk = true;\n };\n Resize.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Resize.prototype.refreshColumnWidth = function () {\n var columns = this.parent.getColumns();\n for (var _i = 0, _a = [].slice.apply(this.parent.getHeaderTable().querySelectorAll('th.e-headercell')); _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var column = columns_1[_b];\n if (ele.querySelector('[e-mappinguid]') &&\n ele.querySelector('[e-mappinguid]').getAttribute('e-mappinguid') === column.uid && column.visible) {\n column.width = ele.getBoundingClientRect().width;\n break;\n }\n }\n }\n return columns;\n };\n Resize.prototype.getTargetColumn = function (e) {\n var cell = closest(e.target, resizeClassList.header);\n var uid = cell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n };\n Resize.prototype.updateCursor = function (action) {\n var headerRows = [].slice.call(this.parent.getHeaderContent().querySelectorAll('th'));\n headerRows.push(this.parent.element);\n for (var _i = 0, headerRows_1 = headerRows; _i < headerRows_1.length; _i++) {\n var row = headerRows_1[_i];\n row.classList[action](resizeClassList.cursor);\n }\n };\n Resize.prototype.refresh = function () {\n this.column = null;\n this.pageX = null;\n this.element = null;\n this.helper = null;\n };\n Resize.prototype.appendHelper = function () {\n this.helper = this.parent.createElement('div', {\n className: resizeClassList.helper\n });\n this.parent.element.appendChild(this.helper);\n this.setHelperHeight();\n };\n Resize.prototype.setHelperHeight = function () {\n var height = this.parent.getContent().offsetHeight - this.getScrollBarWidth();\n var rect = closest(this.element, resizeClassList.header);\n var tr = [].slice.call(this.parent.getHeaderContent().querySelectorAll('tr'));\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (rect.parentElement.children.length !== frzCols) {\n tr.splice(0, tr.length / 2);\n }\n else {\n tr.splice(tr.length / 2, tr.length / 2);\n }\n }\n for (var i = tr.indexOf(rect.parentElement); i < tr.length; i++) {\n height += tr[i].offsetHeight;\n }\n var pos = this.calcPos(rect);\n pos.left += (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2);\n this.helper.style.cssText = 'height: ' + height + 'px; top: ' + pos.top + 'px; left:' + Math.floor(pos.left) + 'px;';\n };\n Resize.prototype.getScrollBarWidth = function (height) {\n var ele = this.parent.getFrozenColumns() ? this.parent.getContent().querySelector('.e-movablecontent')\n : this.parent.getContent().firstChild;\n return (ele.scrollHeight > ele.clientHeight && height) ||\n ele.scrollWidth > ele.clientWidth ? getScrollBarWidth() : 0;\n };\n Resize.prototype.removeHelper = function (e) {\n var cls = e.target.classList;\n if (!(cls.contains(resizeClassList.root) || cls.contains(resizeClassList.icon)) && this.helper) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n detach(this.helper);\n this.refresh();\n }\n };\n Resize.prototype.updateHelper = function () {\n var rect = closest(this.element, resizeClassList.header);\n var left = Math.floor(this.calcPos(rect).left + (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2));\n var borderWidth = 2; // to maintain the helper inside of grid element.\n if (left > this.parentElementWidth) {\n left = this.parentElementWidth - borderWidth;\n }\n if (this.parent.getFrozenColumns()) {\n var table = closest(rect, '.e-table');\n var fLeft = table.offsetLeft;\n if (left < fLeft) {\n left = fLeft;\n }\n }\n this.helper.style.left = left + 'px';\n };\n Resize.prototype.calcPos = function (elem) {\n var parentOffset = {\n top: 0,\n left: 0\n };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = elem.offsetParent || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Resize.prototype.doubleTapEvent = function (e) {\n if (this.getUserAgent() && this.isDblClk) {\n if (!this.tapped) {\n this.tapped = setTimeout(this.timeoutHandler(), 300);\n }\n else {\n clearTimeout(this.tapped);\n this.callAutoFit(e);\n this.tapped = null;\n }\n }\n };\n Resize.prototype.getUserAgent = function () {\n var userAgent = Browser.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n Resize.prototype.timeoutHandler = function () {\n this.tapped = null;\n };\n return Resize;\n}());\nexport { Resize };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest as closestElement, removeClass, classList, remove } from '@syncfusion/ej2-base';\nimport { getElementIndex, inArray, parentsUntil, getPosition, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\n/**\n *\n * The `Reorder` module is used for reordering columns.\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for the Grid reorder module\n * @hidden\n */\n function Reorder(parent) {\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.reorderComplete, this.onActionComplete, this);\n this.parent.on(events.columnDrag, this.drag, this);\n this.parent.on(events.columnDragStart, this.dragStart, this);\n this.parent.on(events.columnDragStop, this.dragStop, this);\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.headerRefreshed, this.createReorderElement, this);\n }\n Reorder.prototype.chkDropPosition = function (srcElem, destElem) {\n return (srcElem.parentElement.isEqualNode(destElem.parentElement) || (this.parent.getFrozenColumns()\n && Array.prototype.indexOf.call(closestElement(srcElem, 'thead').children, srcElem.parentElement)\n === Array.prototype.indexOf.call(closestElement(destElem, 'thead').children, destElem.parentElement)))\n && this.targetParentContainerIndex(srcElem, destElem) > -1;\n };\n Reorder.prototype.chkDropAllCols = function (srcElem, destElem) {\n var isFound;\n var headers = this.getHeaderCells();\n var header;\n while (!isFound && headers.length > 0) {\n header = headers.pop();\n isFound = srcElem !== header && this.targetParentContainerIndex(srcElem, destElem) > -1;\n }\n return isFound;\n };\n Reorder.prototype.findColParent = function (col, cols, parent) {\n parent = parent;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (col === cols[i]) {\n return true;\n }\n else if (cols[i].columns) {\n var cnt = parent.length;\n parent.push(cols[i]);\n if (!this.findColParent(col, cols[i].columns, parent)) {\n parent.splice(cnt, parent.length - cnt);\n }\n else {\n return true;\n }\n }\n }\n return false;\n };\n Reorder.prototype.getColumnsModel = function (cols) {\n var columnModel = [];\n var subCols = [];\n for (var i = 0, len = cols.length; i < len; i++) {\n columnModel.push(cols[i]);\n if (cols[i].columns) {\n subCols = subCols.concat(cols[i].columns);\n }\n }\n if (subCols.length) {\n columnModel = columnModel.concat(this.getColumnsModel(subCols));\n }\n return columnModel;\n };\n Reorder.prototype.headerDrop = function (e) {\n var gObj = this.parent;\n var dropElement = this.element.querySelector('.e-headercelldiv') || this.element.querySelector('.e-stackedheadercelldiv');\n var uId = dropElement.getAttribute('e-mappinguid');\n var column = gObj.getColumnByUid(uId);\n if (!closestElement(e.target, 'th') || (!isNullOrUndefined(column) && column.allowReordering === false)) {\n return;\n }\n var destElem = closestElement(e.target, '.e-headercell');\n var destElemDiv = destElem.querySelector('.e-headercelldiv') || destElem.querySelector('.e-stackedheadercelldiv');\n var destElemUid = destElemDiv.getAttribute('e-mappinguid');\n if (!isNullOrUndefined(destElemUid)) {\n var destColumn = gObj.getColumnByUid(destElemUid);\n if (isNullOrUndefined(destColumn) || destColumn.allowReordering === false) {\n return;\n }\n }\n if (destElem && !(!this.chkDropPosition(this.element, destElem) || !this.chkDropAllCols(this.element, destElem))) {\n if (this.parent.enableColumnVirtualization) {\n var columns = this.parent.columns;\n var sourceUid_1 = this.element.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var col = this.parent.getColumns(true).filter(function (col) { return col.uid === sourceUid_1; });\n var colMatchIndex_1 = null;\n var column_1 = col[0];\n var destUid_1 = destElem.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var bool = columns.some(function (col, index) {\n if (col.uid === destUid_1) {\n colMatchIndex_1 = index;\n return col.uid === destUid_1;\n }\n return false;\n });\n if (!isNullOrUndefined(colMatchIndex_1)) {\n this.moveColumns(colMatchIndex_1, column_1);\n }\n }\n else {\n var headers = this.getHeaderCells();\n var oldIdx = getElementIndex(this.element, headers);\n var columns = this.getColumnsModel(this.parent.columns);\n var column_2 = columns[oldIdx];\n var newIndex = this.targetParentContainerIndex(this.element, destElem);\n this.moveColumns(newIndex, column_2);\n }\n }\n };\n Reorder.prototype.isActionPrevent = function (gObj) {\n return isActionPrevent(gObj);\n };\n Reorder.prototype.moveColumns = function (destIndex, column) {\n var gObj = this.parent;\n if (this.isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.moveColumns, arg1: destIndex, arg2: column });\n return;\n }\n var parent = this.getColParent(column, this.parent.columns);\n var cols = parent ? parent.columns : this.parent.columns;\n var srcIdx = inArray(column, cols);\n if (!gObj.allowReordering || srcIdx === destIndex || srcIdx === -1 || destIndex === -1) {\n return;\n }\n cols.splice(destIndex, 0, cols.splice(srcIdx, 1)[0]);\n gObj.getColumns(true);\n gObj.notify(events.columnPositionChanged, { fromIndex: destIndex, toIndex: srcIdx });\n gObj.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'reorder'\n });\n };\n Reorder.prototype.targetParentContainerIndex = function (srcElem, destElem) {\n var headers = this.getHeaderCells();\n var cols = this.parent.columns;\n var flatColumns = this.getColumnsModel(cols);\n var parent = this.getColParent(flatColumns[getElementIndex(srcElem, headers)], cols);\n cols = parent ? parent.columns : cols;\n return inArray(flatColumns[getElementIndex(destElem, headers)], cols);\n };\n Reorder.prototype.getHeaderCells = function () {\n if (this.parent.getFrozenColumns()) {\n var fTh = void 0;\n var mTh = void 0;\n var fHeaders = [];\n var fRows = [].slice.call(this.parent.getHeaderTable().querySelectorAll('.e-columnheader'));\n var mRows = [].slice.call(this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelectorAll('.e-columnheader'));\n for (var i = 0; i < fRows.length; i++) {\n fTh = [].slice.call(fRows[i].getElementsByClassName('e-headercell'));\n mTh = [].slice.call(mRows[i].getElementsByClassName('e-headercell'));\n fHeaders = fHeaders.concat(fTh);\n for (var j = 0; j < mTh.length; j++) {\n if (!fTh.length || j !== 0 || fTh[fTh.length - 1].innerText !== mTh[0].innerText) {\n fHeaders.push(mTh[j]);\n }\n }\n }\n return fHeaders;\n }\n else {\n return [].slice.call(this.parent.element.getElementsByClassName('e-headercell'));\n }\n };\n Reorder.prototype.getColParent = function (column, columns) {\n var parents = [];\n this.findColParent(column, columns, parents);\n return parents[parents.length - 1];\n };\n /**\n * Changes the position of the Grid columns by field names.\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @return {void}\n */\n Reorder.prototype.reorderColumns = function (fromFName, toFName) {\n var fColumn = this.parent.getColumnByField(fromFName);\n var toColumn = this.parent.getColumnByField(toFName);\n if ((!isNullOrUndefined(fColumn) && !fColumn.allowReordering) || (!isNullOrUndefined(toColumn) && !toColumn.allowReordering)) {\n return;\n }\n var column = this.parent.getColumnByField(toFName);\n var parent = this.getColParent(column, this.parent.columns);\n var columns = parent ? parent.columns : this.parent.columns;\n var destIndex = inArray(column, columns);\n if (destIndex > -1) {\n this.moveColumns(destIndex, this.parent.getColumnByField(fromFName));\n }\n };\n Reorder.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.createReorderElement();\n }\n };\n Reorder.prototype.createReorderElement = function () {\n var header = this.parent.element.querySelector('.e-headercontent');\n this.upArrow = header.appendChild(this.parent\n .createElement('div', { className: 'e-icons e-icon-reorderuparrow e-reorderuparrow', attrs: { style: 'display:none' } }));\n this.downArrow = header.appendChild(this.parent\n .createElement('div', { className: 'e-icons e-icon-reorderdownarrow e-reorderdownarrow', attrs: { style: 'display:none' } }));\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Reorder.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.e-gridheader') &&\n !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n remove(this.upArrow);\n remove(this.downArrow);\n this.parent.off(events.headerDrop, this.headerDrop);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.reorderComplete, this.onActionComplete);\n this.parent.off(events.columnDrag, this.drag);\n this.parent.off(events.columnDragStart, this.dragStart);\n this.parent.off(events.columnDragStop, this.dragStop);\n this.parent.off(events.headerRefreshed, this.createReorderElement);\n //call ejdrag and drop destroy\n };\n Reorder.prototype.drag = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (e.column.allowReordering === false) {\n return;\n }\n var closest = closestElement(target, '.e-headercell:not(.e-stackedHeaderCell)');\n var cloneElement = gObj.element.querySelector('.e-cloneproperties');\n var isLeft = this.x > getPosition(e.event).x + gObj.getContent().firstElementChild.scrollLeft;\n removeClass(gObj.getHeaderTable().querySelectorAll('.e-reorderindicate'), ['e-reorderindicate']);\n this.setDisplay('none');\n this.stopTimer();\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n this.updateScrollPostion(e.event);\n if (closest && !closest.isEqualNode(this.element)) {\n target = closest;\n //consider stacked, detail header cell \n if (!(!this.chkDropPosition(this.element, target) || !this.chkDropAllCols(this.element, target))) {\n this.updateArrowPosition(target, isLeft);\n classList(target, ['e-allowDrop', 'e-reorderindicate'], []);\n }\n else if (!(gObj.allowGrouping && parentsUntil(e.target, 'e-groupdroparea'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n }\n gObj.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: e.column });\n };\n Reorder.prototype.updateScrollPostion = function (e) {\n var _this = this;\n var frzCols = this.parent.getFrozenColumns();\n var x = getPosition(e).x;\n var cliRect = this.parent.element.getBoundingClientRect();\n var cliRectBaseLeft = frzCols ? this.parent.element.querySelector('.e-movableheader')\n .getBoundingClientRect().left : cliRect.left;\n var cliRectBaseRight = cliRect.right;\n var scrollElem = frzCols ? this.parent.getContent().querySelector('.e-movablecontent')\n : this.parent.getContent().firstElementChild;\n if (x > cliRectBaseLeft && x < cliRectBaseLeft + 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, true); }, 50);\n }\n else if (x < cliRectBaseRight && x > cliRectBaseRight - 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, false); }, 50);\n }\n };\n Reorder.prototype.setScrollLeft = function (scrollElem, isLeft) {\n var scrollLeft = scrollElem.scrollLeft;\n scrollElem.scrollLeft = scrollElem.scrollLeft + (isLeft ? -5 : 5);\n if (scrollLeft !== scrollElem.scrollLeft) {\n this.setDisplay('none');\n }\n };\n Reorder.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Reorder.prototype.updateArrowPosition = function (target, isLeft) {\n var cliRect = target.getBoundingClientRect();\n var cliRectBase = this.parent.element.getBoundingClientRect();\n if ((isLeft && cliRect.left < cliRectBase.left) || (!isLeft && cliRect.right > cliRectBase.right)) {\n return;\n }\n this.upArrow.style.top = cliRect.top + cliRect.height - cliRectBase.top + 'px';\n this.downArrow.style.top = cliRect.top - cliRectBase.top - 4 + 'px';\n this.upArrow.style.left = this.downArrow.style.left = (isLeft ? cliRect.left : cliRect.right) - cliRectBase.left - 4 + 'px';\n this.setDisplay('');\n };\n Reorder.prototype.dragStart = function (e) {\n var gObj = this.parent;\n var target = e.target;\n this.element = target.classList.contains('e-headercell') ? target :\n parentsUntil(target, 'e-headercell');\n if (e.column.allowReordering === false) {\n return;\n }\n this.x = getPosition(e.event).x + gObj.getContent().firstElementChild.scrollLeft;\n gObj.trigger(events.columnDragStart, {\n target: target, draggableType: 'headercell', column: e.column\n });\n };\n Reorder.prototype.dragStop = function (e) {\n var gObj = this.parent;\n this.setDisplay('none');\n this.stopTimer();\n if (!e.cancel) {\n gObj.trigger(events.columnDrop, { target: e.target, draggableType: 'headercell', column: e.column });\n }\n removeClass(gObj.getHeaderTable().querySelectorAll('.e-reorderindicate'), ['e-reorderindicate']);\n };\n Reorder.prototype.setDisplay = function (display) {\n this.upArrow.style.display = display;\n this.downArrow.style.display = display;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Draggable } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { remove, closest as closestElement, classList } from '@syncfusion/ej2-base';\nimport { parentsUntil, removeElement, getPosition } from '../base/util';\nimport * as events from '../base/constant';\n/**\n *\n * Reorder module is used to handle row reordering.\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for the Grid print module\n * @hidden\n */\n function RowDD(parent) {\n var _this = this;\n //Internal variables \n this.selectedRows = [];\n this.helper = function (e) {\n var gObj = _this.parent;\n if (document.getElementsByClassName('e-griddragarea').length ||\n (!e.sender.target.classList.contains('e-selectionbackground') && gObj.selectionSettings.type !== 'Single')) {\n return false;\n }\n var visualElement = _this.parent.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-grid e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + gObj.element.offsetWidth\n });\n var table = _this.parent.createElement('table', { styles: 'width:' + gObj.element.offsetWidth });\n var tbody = _this.parent.createElement('tbody');\n if (gObj.selectionSettings.mode === 'Row' && gObj.selectionSettings.type === 'Single') {\n var index = parseInt(e.sender.target.parentElement.getAttribute('aria-rowindex'), 10);\n gObj.selectRow(index);\n }\n var selectedRows = gObj.getSelectedRows();\n for (var i = 0, len = selectedRows.length; i < len; i++) {\n var selectedRow = selectedRows[i].cloneNode(true);\n removeElement(selectedRow, '.e-indentcell');\n removeElement(selectedRow, '.e-detailrowcollapse');\n removeElement(selectedRow, '.e-detailrowexpand');\n tbody.appendChild(selectedRow);\n }\n table.appendChild(tbody);\n visualElement.appendChild(table);\n gObj.element.appendChild(visualElement);\n return visualElement;\n };\n this.dragStart = function (e) {\n var gObj = _this.parent;\n if (document.getElementsByClassName('e-griddragarea').length) {\n return;\n }\n gObj.trigger(events.rowDragStart, {\n rows: gObj.getSelectedRows(),\n target: e.target, draggableType: 'rows', data: gObj.getSelectedRecords()\n });\n var dropElem = document.getElementById(gObj.rowDropSettings.targetID);\n if (gObj.rowDropSettings.targetID && dropElem && dropElem.ej2_instances) {\n dropElem.ej2_instances[0].getContent().classList.add('e-allowRowDrop');\n }\n _this.isDragStop = false;\n };\n this.drag = function (e) {\n var gObj = _this.parent;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n var target = _this.getElementFromPosition(cloneElement, e.event);\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n gObj.trigger(events.rowDrag, {\n rows: gObj.getSelectedRows(),\n target: target, draggableType: 'rows', data: gObj.getSelectedRecords()\n });\n gObj.element.classList.add('e-rowdrag');\n if (!parentsUntil(target, 'e-gridcontent') ||\n parentsUntil(cloneElement.parentElement, 'e-grid').id === parentsUntil(target, 'e-grid').id) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n };\n this.dragStop = function (e) {\n var gObj = _this.parent;\n if (_this.parent.isDestroyed) {\n return;\n }\n var target = _this.getElementFromPosition(e.helper, e.event);\n gObj.element.classList.remove('e-rowdrag');\n var dropElem = document.getElementById(gObj.rowDropSettings.targetID);\n if (gObj.rowDropSettings.targetID && dropElem && dropElem.ej2_instances) {\n dropElem.ej2_instances[0].getContent().classList.remove('e-allowRowDrop');\n }\n var args = {\n target: target, draggableType: 'rows', cancel: false,\n rows: gObj.getSelectedRows(), data: gObj.getSelectedRecords()\n };\n gObj.trigger(events.rowDrop, args);\n if (!parentsUntil(target, 'e-gridcontent') || args.cancel) {\n remove(e.helper);\n return;\n }\n };\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeDrag, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.parent.on(events.rowDragAndDropComplete, this.onActionComplete, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n }\n RowDD.prototype.initializeDrag = function () {\n var gObj = this.parent;\n var column;\n var drag;\n drag = new Draggable(gObj.getContent(), {\n dragTarget: '.e-rowcell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n RowDD.prototype.getElementFromPosition = function (element, event) {\n var target;\n var position = getPosition(event);\n element.style.display = 'none';\n target = document.elementFromPoint(position.x, position.y);\n element.style.display = '';\n return target;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n RowDD.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n if (e.droppedElement.getAttribute('action') !== 'grouping') {\n var targetRow = closestElement(e.target, 'tr');\n var srcControl = void 0;\n var currentIndex = void 0;\n if (e.droppedElement.parentElement.id !== gObj.element.id) {\n srcControl = e.droppedElement.parentElement.ej2_instances[0];\n }\n else {\n return;\n }\n if (srcControl.element.id !== gObj.element.id && srcControl.rowDropSettings.targetID !== gObj.element.id) {\n return;\n }\n var records = srcControl.getSelectedRecords();\n var targetIndex = currentIndex = this.getTargetIdx(targetRow);\n var count = 0;\n if (isNaN(targetIndex)) {\n targetIndex = currentIndex = 0;\n }\n if (gObj.allowPaging) {\n targetIndex = targetIndex + (gObj.pageSettings.currentPage * gObj.pageSettings.pageSize) - gObj.pageSettings.pageSize;\n }\n //Todo: drag and drop mapper & BatchChanges \n gObj.notify(events.rowsAdded, { toIndex: targetIndex, records: records });\n gObj.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'rowdraganddrop'\n });\n var selectedRows = srcControl.getSelectedRowIndexes();\n var skip = srcControl.allowPaging ?\n (srcControl.pageSettings.currentPage * srcControl.pageSettings.pageSize) - srcControl.pageSettings.pageSize : 0;\n this.selectedRows = [];\n for (var i = 0, len = records.length; i < len; i++) {\n this.selectedRows.push(skip + selectedRows[i]);\n }\n srcControl.notify(events.rowsRemoved, { indexes: this.selectedRows, records: records });\n srcControl.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'rowdraganddrop'\n });\n }\n };\n RowDD.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.initializeDrag();\n }\n };\n /**\n * To destroy the print\n * @return {void}\n * @hidden\n */\n RowDD.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.e-gridheader') &&\n !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeDrag);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.rowDragAndDropComplete, this.onActionComplete);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n //destory ejdrag and drop\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","import { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { createElement, closest, remove, classList, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { parentsUntil, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n *\n * The `Group` module is used to handle group action.\n */\nvar Group = /** @class */ (function () {\n /**\n * Constructor for Grid group module\n * @hidden\n */\n function Group(parent, groupSettings, sortedColumns, serviceLocator) {\n var _this = this;\n this.isAppliedGroup = false;\n this.isAppliedUnGroup = false;\n this.visualElement = createElement('div', {\n className: 'e-cloneproperties e-dragclone e-gdclone',\n styles: 'line-height:23px', attrs: { action: 'grouping' }\n });\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var element = target.classList.contains('e-groupheadercell') ? target :\n parentsUntil(target, 'e-groupheadercell');\n if (!element) {\n return false;\n }\n _this.column = gObj.getColumnByField(element.firstElementChild.getAttribute('ej-mappingname'));\n _this.visualElement.textContent = element.textContent;\n _this.visualElement.style.width = element.offsetWidth + 2 + 'px';\n _this.visualElement.style.height = element.offsetHeight + 2 + 'px';\n _this.visualElement.setAttribute('e-mappinguid', _this.column.uid);\n gObj.element.appendChild(_this.visualElement);\n return _this.visualElement;\n };\n this.dragStart = function () {\n _this.parent.element.classList.add('e-ungroupdrag');\n };\n this.drag = function (e) {\n var target = e.target;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n _this.parent.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: _this.column });\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!(parentsUntil(target, 'e-gridcontent') || parentsUntil(target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n };\n this.dragStop = function (e) {\n _this.parent.element.classList.remove('e-ungroupdrag');\n if (!(parentsUntil(e.target, 'e-gridcontent') || parentsUntil(e.target, 'e-gridheader'))) {\n remove(e.helper);\n return;\n }\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n _this.element.classList.remove('e-hover');\n remove(e.droppedElement);\n _this.aria.setDropTarget(_this.parent.element.querySelector('.e-groupdroparea'), false);\n _this.aria.setGrabbed(_this.parent.getHeaderTable().querySelector('[aria-grabbed=true]'), false);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n _this.groupColumn(column.field);\n };\n this.contentRefresh = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.groupSettings = groupSettings;\n this.serviceLocator = serviceLocator;\n this.sortedColumns = sortedColumns;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n this.groupGenerator = new GroupModelGenerator(this.parent);\n }\n Group.prototype.columnDrag = function (e) {\n var gObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!parentsUntil(e.target, 'e-groupdroparea') &&\n !(this.parent.allowReordering && parentsUntil(e.target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n e.target.classList.contains('e-groupdroparea') ? this.element.classList.add('e-hover') : this.element.classList.remove('e-hover');\n };\n Group.prototype.columnDragStart = function (e) {\n if (e.target.classList.contains('e-stackedheadercell')) {\n return;\n }\n var gObj = this.parent;\n var dropArea = this.parent.element.querySelector('.e-groupdroparea');\n this.aria.setDropTarget(dropArea, e.column.allowGrouping);\n var element = e.target.classList.contains('e-headercell') ? e.target : parentsUntil(e.target, 'e-headercell');\n this.aria.setGrabbed(element, true, !e.column.allowGrouping);\n };\n Group.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n if (e.droppedElement.getAttribute('action') === 'grouping') {\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n this.ungroupColumn(column.field);\n }\n };\n /**\n * @hidden\n */\n Group.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.groupComplete, this.onActionComplete, this);\n this.parent.on(events.ungroupComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.columnDrag, this.columnDrag, this);\n this.parent.on(events.columnDragStart, this.columnDragStart, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.sortComplete, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.onEmpty, this.initialEnd, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.groupAggregates, this.onGroupAggregates, this);\n };\n /**\n * @hidden\n */\n Group.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.groupComplete, this.onActionComplete);\n this.parent.off(events.ungroupComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.columnDrag, this.columnDrag);\n this.parent.off(events.columnDragStart, this.columnDragStart);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.sortComplete, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.groupAggregates, this.onGroupAggregates);\n };\n Group.prototype.initialEnd = function () {\n var gObj = this.parent;\n this.parent.off(events.contentReady, this.initialEnd);\n this.parent.off(events.onEmpty, this.initialEnd);\n if (this.parent.getColumns().length && this.groupSettings.columns.length) {\n this.contentRefresh = false;\n for (var _i = 0, _a = gObj.groupSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.groupColumn(col);\n }\n this.contentRefresh = true;\n }\n };\n Group.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n if ((!this.groupSettings.columns.length ||\n ['altDownArrow', 'altUpArrow', 'ctrlDownArrow', 'ctrlUpArrow', 'enter'].indexOf(e.action) === -1)) {\n return;\n }\n e.preventDefault();\n switch (e.action) {\n case 'altDownArrow':\n case 'altUpArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var rows = gObj.getContentTable().querySelector('tbody').children;\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var grpRow = void 0;\n for (var i = dataRow.rowIndex; i >= 0; i--) {\n if (!rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-detailrow')) {\n grpRow = rows[i];\n break;\n }\n }\n this.expandCollapseRows(grpRow.querySelector(e.action === 'altUpArrow' ?\n '.e-recordplusexpand' : '.e-recordpluscollapse'));\n }\n break;\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'enter':\n if (this.parent.isEdit || (closest(e.target, '#' + this.parent.element.id + '_searchbar') !== null)) {\n return;\n }\n var element = this.focus.getFocusedElement();\n var row = element ? element.parentElement.querySelector('[class^=\"e-record\"]') : null;\n if (!row) {\n break;\n }\n this.expandCollapseRows(row);\n break;\n }\n };\n Group.prototype.clickHandler = function (e) {\n this.expandCollapseRows(e.target);\n this.applySortFromTarget(e.target);\n this.unGroupFromTarget(e.target);\n this.toogleGroupFromHeader(e.target);\n };\n Group.prototype.unGroupFromTarget = function (target) {\n if (target.classList.contains('e-ungroupbutton')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n };\n Group.prototype.toogleGroupFromHeader = function (target) {\n if (this.groupSettings.showToggleButton) {\n if (target.classList.contains('e-grptogglebtn')) {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n else {\n this.groupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n }\n else {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n }\n }\n };\n Group.prototype.applySortFromTarget = function (target) {\n var gObj = this.parent;\n var gHeader = closest(target, '.e-groupheadercell');\n if (gObj.allowSorting && gHeader && !target.classList.contains('e-ungroupbutton') &&\n !target.classList.contains('e-toggleungroup')) {\n var field = gHeader.firstElementChild.getAttribute('ej-mappingname');\n if (gObj.getColumnHeaderByField(field).querySelectorAll('.e-ascending').length) {\n gObj.sortColumn(field, 'Descending', true);\n }\n else {\n gObj.sortColumn(field, 'Ascending', true);\n }\n }\n };\n /**\n * Expands or collapses grouped rows by target element.\n * @param {Element} target - Defines the target element of the grouped row.\n * @return {void}\n */\n Group.prototype.expandCollapseRows = function (target) {\n var trgt = parentsUntil(target, 'e-recordplusexpand') ||\n parentsUntil(target, 'e-recordpluscollapse');\n if (trgt) {\n var cellIdx = trgt.cellIndex;\n var rowIdx = trgt.parentElement.rowIndex;\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var rows = [].slice.call(rowNodes).slice(rowIdx + 1, rowNodes.length);\n var isHide = void 0;\n var expandElem = void 0;\n var toExpand = [];\n var indent = trgt.parentElement.querySelectorAll('.e-indentcell').length;\n var expand = false;\n if (trgt.classList.contains('e-recordpluscollapse')) {\n addClass([trgt], 'e-recordplusexpand');\n removeClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gdiagonaldown e-icon-gdownarrow';\n expand = true;\n }\n else {\n isHide = true;\n removeClass([trgt], 'e-recordplusexpand');\n addClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n }\n this.aria.setExpand(trgt, expand);\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].querySelectorAll('td')[cellIdx] &&\n rows[i].querySelectorAll('td')[cellIdx].classList.contains('e-indentcell') && rows) {\n if (isHide) {\n rows[i].style.display = 'none';\n }\n else {\n if (rows[i].querySelectorAll('.e-indentcell').length === indent + 1) {\n rows[i].style.display = '';\n expandElem = rows[i].querySelector('.e-recordplusexpand');\n if (expandElem) {\n toExpand.push(expandElem);\n }\n if (rows[i].classList.contains('e-detailrow')) {\n if (rows[i - 1].querySelectorAll('.e-detailrowcollapse').length) {\n rows[i].style.display = 'none';\n }\n }\n }\n }\n }\n else {\n break;\n }\n }\n for (var i = 0, len = toExpand.length; i < len; i++) {\n removeClass([toExpand[i]], 'e-recordplusexpand');\n addClass([toExpand[i]], 'e-recordpluscollapse');\n toExpand[i].firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n this.expandCollapseRows(toExpand[i]);\n }\n }\n };\n Group.prototype.expandCollapse = function (isExpand) {\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var row;\n for (var i = 0, len = rowNodes.length; i < len; i++) {\n if (rowNodes[i].querySelectorAll('.e-recordplusexpand, .e-recordpluscollapse').length) {\n row = rowNodes[i].querySelector(isExpand ? '.e-recordpluscollapse' : '.e-recordplusexpand');\n if (row) {\n row.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n row.firstElementChild.className = isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' :\n 'e-icons e-gnextforward e-icon-grightarrow';\n }\n if (!(rowNodes[i].firstElementChild.classList.contains('e-recordplusexpand') ||\n rowNodes[i].firstElementChild.classList.contains('e-recordpluscollapse'))) {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n else {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n };\n /**\n * Expands all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n /**\n * The function is used to render grouping\n * @return {Element}\n * @hidden\n */\n Group.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderGroupDropArea();\n this.initDragAndDrop();\n this.refreshToggleBtn();\n };\n Group.prototype.renderGroupDropArea = function () {\n var groupElem = this.parent.element.querySelector('.e-groupdroparea');\n if (groupElem) {\n remove(groupElem);\n }\n this.element = this.parent.createElement('div', { className: 'e-groupdroparea', attrs: { 'tabindex': '-1' } });\n this.updateGroupDropArea();\n this.parent.element.insertBefore(this.element, this.parent.element.firstChild);\n if (!this.groupSettings.showDropArea) {\n this.element.style.display = 'none';\n }\n };\n Group.prototype.updateGroupDropArea = function (clear) {\n if (this.groupSettings.showDropArea && !this.groupSettings.columns.length) {\n var dragLabel = this.l10n.getConstant('GroupDropArea');\n this.element.innerHTML = dragLabel;\n this.element.classList.remove('e-grouped');\n }\n else {\n if ((this.element.innerHTML === this.l10n.getConstant('GroupDropArea') && (this.groupSettings.columns.length === 1\n || !this.isAppliedGroup && !this.isAppliedUnGroup)) || clear) {\n this.element.innerHTML = '';\n }\n this.element.classList.add('e-grouped');\n }\n };\n Group.prototype.initDragAndDrop = function () {\n this.initializeGHeaderDrop();\n this.initializeGHeaderDrag();\n };\n Group.prototype.initializeGHeaderDrag = function () {\n var drag = new Draggable(this.element, {\n dragTarget: '.e-groupheadercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n Group.prototype.initializeGHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(this.element, {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n Group.prototype.groupColumn = function (columnName) {\n var gObj = this.parent;\n var column = gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n (this.contentRefresh && this.groupSettings.columns.indexOf(columnName) > -1)) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.groupColumn, arg1: columnName });\n return;\n }\n column.visible = gObj.groupSettings.showGroupedColumn;\n this.colName = columnName;\n this.isAppliedGroup = true;\n if (this.contentRefresh) {\n this.updateModel();\n }\n else {\n this.addColToGroupDrop(columnName);\n }\n this.updateGroupDropArea();\n this.isAppliedGroup = false;\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n Group.prototype.ungroupColumn = function (columnName) {\n var gObj = this.parent;\n var column = this.parent.enableColumnVirtualization ?\n this.parent.columns.filter(function (c) { return c.field === columnName; })[0] : gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false || this.groupSettings.columns.indexOf(columnName) < 0) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.ungroupColumn, arg1: columnName });\n return;\n }\n column.visible = true;\n this.colName = column.field;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.splice(columns.indexOf(this.colName), 1);\n if (this.sortedColumns.indexOf(columnName) < 0) {\n for (var i = 0, len = gObj.sortSettings.columns.length; i < len; i++) {\n if (columnName === gObj.sortSettings.columns[i].field) {\n gObj.sortSettings.columns.splice(i, 1);\n break;\n }\n }\n }\n this.groupSettings.columns = columns;\n if (gObj.allowGrouping) {\n this.isAppliedUnGroup = true;\n this.parent.dataBind();\n }\n };\n /**\n * The function used to update groupSettings\n * @return {void}\n * @hidden\n */\n Group.prototype.updateModel = function () {\n var gObj = this.parent;\n var i = 0;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.push(this.colName);\n this.groupSettings.columns = columns;\n this.groupAddSortingQuery(this.colName);\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Group.prototype.onActionComplete = function (e) {\n var gObj = this.parent;\n if (e.requestType === 'grouping') {\n this.addColToGroupDrop(this.colName);\n }\n else {\n this.removeColFromGroupDrop(this.colName);\n }\n var args = this.groupSettings.columns.indexOf(this.colName) > -1 ? {\n columnName: this.colName, requestType: 'grouping', type: events.actionComplete\n } : { requestType: 'ungrouping', type: events.actionComplete };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.colName = null;\n };\n Group.prototype.groupAddSortingQuery = function (colName) {\n var i = 0;\n while (i < this.parent.sortSettings.columns.length) {\n if (this.parent.sortSettings.columns[i].field === colName) {\n break;\n }\n i++;\n }\n if (this.parent.sortSettings.columns.length === i) {\n this.parent.sortSettings.columns.push({ field: colName, direction: 'Ascending' });\n }\n else if (!this.parent.allowSorting) {\n this.parent.sortSettings.columns[i].direction = 'Ascending';\n }\n };\n Group.prototype.addColToGroupDrop = function (field) {\n var gObj = this.parent;\n var direction = 'Ascending';\n var groupedColumn = this.parent.createElement('div', { className: 'e-grid-icon e-groupheadercell' });\n var childDiv = this.parent.createElement('div', { attrs: { 'ej-mappingname': field } });\n var column = this.parent.getColumnByField(field);\n if (isNullOrUndefined(column)) {\n return;\n }\n //Todo headerTemplateID for grouped column, disableHtmlEncode \n var headerCell = gObj.getColumnHeaderByUid(column.uid);\n if (!isNullOrUndefined(column.headerTemplate)) {\n if (column.headerTemplate.indexOf('#') !== -1) {\n childDiv.innerHTML = document.querySelector(column.headerTemplate).innerHTML.trim();\n }\n else {\n childDiv.innerHTML = column.headerTemplate;\n }\n childDiv.firstElementChild.classList.add('e-grouptext');\n }\n else {\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-grouptext', innerHTML: column.headerText,\n attrs: { tabindex: '-1', 'aria-label': 'sort the grouped column' }\n }));\n }\n if (this.groupSettings.showToggleButton) {\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-togglegroupbutton e-icons e-icon-ungroup e-toggleungroup', innerHTML: ' ',\n attrs: { tabindex: '-1', 'aria-label': 'ungroup button' }\n }));\n }\n if (headerCell.querySelectorAll('.e-ascending,.e-descending').length) {\n direction = headerCell.querySelector('.e-ascending') ? 'Ascending' : 'Descending';\n }\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-groupsort e-icons ' +\n ('e-' + direction.toLowerCase() + ' e-icon-' + direction.toLowerCase()), innerHTML: ' ',\n attrs: { tabindex: '-1', 'aria-label': 'sort the grouped column' }\n }));\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-ungroupbutton e-icons e-icon-hide', innerHTML: ' ',\n attrs: { title: this.l10n.getConstant('UnGroup'), tabindex: '-1', 'aria-label': 'ungroup the grouped column' },\n styles: this.groupSettings.showUngroupButton ? '' : 'display:none'\n }));\n groupedColumn.appendChild(childDiv);\n this.element.appendChild(groupedColumn);\n //Todo: rtl \n };\n Group.prototype.refreshToggleBtn = function (isRemove) {\n if (this.groupSettings.showToggleButton) {\n var headers = [].slice.call(this.parent.element.getElementsByClassName('e-headercelldiv'));\n for (var i = 0, len = headers.length; i < len; i++) {\n if (!((headers[i].classList.contains('e-emptycell')) || (headers[i].classList.contains('e-headerchkcelldiv')))) {\n var column = this.parent.getColumnByUid(headers[i].getAttribute('e-mappinguid'));\n if (!this.parent.showColumnMenu || (this.parent.showColumnMenu && !column.showColumnMenu)) {\n if (headers[i].querySelectorAll('.e-grptogglebtn').length) {\n remove(headers[i].querySelectorAll('.e-grptogglebtn')[0]);\n }\n if (!isRemove) {\n headers[i].appendChild(this.parent.createElement('span', {\n className: 'e-grptogglebtn e-icons ' +\n (this.groupSettings.columns.indexOf(column.field) > -1 ? 'e-toggleungroup e-icon-ungroup'\n : 'e-togglegroup e-icon-group'), attrs: { tabindex: '-1', 'aria-label': 'Group button' }\n }));\n }\n }\n }\n }\n }\n };\n Group.prototype.removeColFromGroupDrop = function (field) {\n if (!isNullOrUndefined(this.getGHeaderCell(field))) {\n remove(this.getGHeaderCell(field));\n this.updateGroupDropArea();\n }\n this.isAppliedUnGroup = false;\n };\n Group.prototype.onPropertyChanged = function (e) {\n var _this = this;\n if (e.module !== this.getModuleName()) {\n return;\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'columns':\n var args = void 0;\n if (this_1.contentRefresh) {\n if (!this_1.isAppliedUnGroup) {\n if (!this_1.isAppliedGroup) {\n this_1.updateGroupDropArea(true);\n for (var i = 0; i < this_1.groupSettings.columns.length; i++) {\n this_1.colName = this_1.groupSettings.columns[i];\n var col = this_1.parent.getColumnByField(this_1.colName);\n col.visible = this_1.parent.groupSettings.showGroupedColumn;\n this_1.groupAddSortingQuery(this_1.colName);\n if (i < this_1.groupSettings.columns.length - 1) {\n this_1.addColToGroupDrop(this_1.groupSettings.columns[i]);\n }\n }\n }\n args = { columnName: this_1.colName, requestType: e.properties[prop].length ? 'grouping' : 'ungrouping',\n type: events.actionBegin };\n }\n else {\n args = { requestType: 'ungrouping', type: events.actionBegin };\n }\n if (!this_1.groupSettings.showGroupedColumn) {\n e.oldProperties[prop].forEach(function (column) {\n if (e.properties[prop].indexOf(column) === -1) {\n _this.parent.getColumnByField(column).visible = true;\n }\n });\n }\n this_1.parent.notify(events.modelChanged, args);\n }\n break;\n case 'showDropArea':\n this_1.updateGroupDropArea();\n this_1.groupSettings.showDropArea ? this_1.element.style.display = '' : this_1.element.style.display = 'none';\n break;\n case 'showGroupedColumn':\n this_1.updateGroupedColumn(this_1.groupSettings.showGroupedColumn);\n this_1.parent.notify(events.modelChanged, { requestType: 'refresh' });\n break;\n case 'showUngroupButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showUngroupButton, 'e-ungroupbutton');\n break;\n case 'showToggleButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showToggleButton, 'e-togglegroupbutton ');\n this_1.parent.refreshHeader();\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n Group.prototype.updateGroupedColumn = function (isVisible) {\n for (var i = 0; i < this.groupSettings.columns.length; i++) {\n this.parent.getColumnByField(this.groupSettings.columns[i]).visible = isVisible;\n }\n };\n Group.prototype.updateButtonVisibility = function (isVisible, className) {\n var gHeader = [].slice.call(this.element.querySelectorAll('.' + className));\n for (var i = 0; i < gHeader.length; i++) {\n gHeader[i].style.display = isVisible ? '' : 'none';\n }\n };\n Group.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Group.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n if (!this.parent.isDestroyed) {\n this.clearGrouping();\n }\n this.removeEventListener();\n this.refreshToggleBtn(true);\n remove(this.element);\n //call ejdrag and drop destroy\n };\n /**\n * Clears all the grouped columns of the Grid.\n * @return {void}\n */\n Group.prototype.clearGrouping = function () {\n var cols = JSON.parse(JSON.stringify(this.groupSettings.columns));\n this.contentRefresh = false;\n for (var i = 0, len = cols.length; i < len; i++) {\n this.ungroupColumn(cols[i]);\n }\n this.contentRefresh = true;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Group.prototype.getModuleName = function () {\n return 'group';\n };\n Group.prototype.refreshSortIcons = function (e) {\n var gObj = this.parent;\n var header;\n var cols = gObj.sortSettings.columns;\n var gCols = gObj.groupSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n this.refreshToggleBtn();\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (!gObj.allowSorting && (this.sortedColumns.indexOf(cols[i].field) > -1 ||\n this.groupSettings.columns.indexOf(cols[i].field) > -1)) {\n classList(header.querySelector('.e-sortfilterdiv'), ['e-ascending', 'e-icon-ascending'], []);\n if (cols.length > 1) {\n header.querySelector('.e-headercelldiv').appendChild(this.parent.createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }));\n }\n }\n else if (this.getGHeaderCell(cols[i].field) && this.getGHeaderCell(cols[i].field).querySelectorAll('.e-groupsort').length) {\n if (cols[i].direction === 'Ascending') {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-ascending', 'e-icon-ascending'], ['e-descending', 'e-icon-descending']);\n }\n else {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-descending', 'e-icon-descending'], ['e-ascending', 'e-icon-ascending']);\n }\n }\n }\n for (var i = 0, len = gCols.length; i < len; i++) {\n if (fieldNames.indexOf(gCols[i]) === -1) {\n continue;\n }\n gObj.getColumnHeaderByField(gCols[i]).setAttribute('aria-grouped', 'true');\n }\n };\n Group.prototype.getGHeaderCell = function (field) {\n if (this.element && this.element.querySelector('[ej-mappingname=\"' + field + '\"]')) {\n return this.element.querySelector('[ej-mappingname=\"' + field + '\"]').parentElement;\n }\n return null;\n };\n Group.prototype.onGroupAggregates = function (editedData) {\n var _this = this;\n var aggregates = this.iterateGroupAggregates(editedData);\n var rowData = this.groupGenerator.generateRows(aggregates, {});\n var summaryRows = this.parent.getRowsObject().filter(function (row) { return !row.isDataRow; });\n var updateSummaryRows = rowData.filter(function (data) { return !data.isDataRow; });\n updateSummaryRows.forEach(function (row, indx) {\n var cells = row.cells.filter(function (cell) { return cell.isDataCell; });\n var args = { cells: cells, data: row.data, dataUid: summaryRows[indx] ? summaryRows[indx].uid : '' };\n _this.parent.notify(events.refreshAggregateCell, args);\n });\n };\n Group.prototype.iterateGroupAggregates = function (editedData) {\n var updatedData = editedData instanceof Array ? editedData : [];\n var rows = this.parent.getRowsObject();\n var initData = this.parent.getCurrentViewRecords();\n var deletedCols = [];\n var changeds = rows.map(function (row) {\n if (row.edit === 'delete') {\n deletedCols.push(row.data);\n }\n return row.changes instanceof Object ? row.changes : row.data;\n });\n var field = this.parent.getPrimaryKeyFieldNames()[0];\n changeds = updatedData.length === 0 ? changeds : updatedData;\n var mergeData = initData.map(function (item) {\n var pKeyVal = DataUtil.getObject(field, item);\n var value;\n var hasVal = changeds.some(function (cItem) {\n value = cItem;\n return pKeyVal === DataUtil.getObject(field, cItem);\n });\n return hasVal ? value : item;\n });\n var eData = editedData;\n if (!(eData.type && eData.type === 'cancel') && deletedCols.length > 0) {\n deletedCols.forEach(function (row) {\n var index = mergeData.indexOf(row);\n mergeData.splice(index, 1);\n });\n }\n var aggregates = [];\n var aggregateRows = this.parent.aggregates;\n aggregateRows.forEach(function (row) {\n row.columns.forEach(function (col) {\n var aggr = {};\n var type = col.type.toString();\n aggr = { type: type.toLowerCase(), field: col.field };\n aggregates.push(aggr);\n });\n });\n var result;\n var aggrds;\n var groupedCols = this.parent.groupSettings.columns;\n groupedCols.forEach(function (field) {\n aggrds = result ? result : mergeData;\n result = DataUtil.group(aggrds, field, aggregates, null, null);\n });\n return result;\n };\n return Group;\n}());\nexport { Group };\n","import { closest, classList } from '@syncfusion/ej2-base';\nimport { Grid } from '../base/grid';\nimport { parents, getUid, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { CellType } from '../base/enum';\n/**\n * The `DetailRow` module is used to handle detail template and hierarchy Grid operations.\n */\nvar DetailRow = /** @class */ (function () {\n /**\n * Constructor for the Grid detail template module\n * @hidden\n */\n function DetailRow(parent, locator) {\n //Internal variables\n this.aria = new AriaService();\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.focus = locator.getService('focus');\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n }\n DetailRow.prototype.clickHandler = function (e) {\n this.toogleExpandcollapse(closest(e.target, 'td'));\n };\n DetailRow.prototype.toogleExpandcollapse = function (target) {\n var gObj = this.parent;\n var parent = 'parentDetails';\n if (target && (target.classList.contains('e-detailrowcollapse') || target.classList.contains('e-detailrowexpand'))) {\n var tr = target.parentElement;\n var uid_1 = tr.getAttribute('data-uid');\n var nextRow = this.parent.getContentTable().querySelector('tbody').children[tr.rowIndex + 1];\n if (target.classList.contains('e-detailrowcollapse')) {\n var key = 'records';\n var currentViewData = gObj.allowGrouping && gObj.groupSettings.columns.length ?\n gObj.currentViewData[key] : gObj.currentViewData;\n var data = currentViewData[tr.getAttribute('aria-rowindex')];\n if (this.isDetailRow(nextRow)) {\n nextRow.style.display = '';\n }\n else if (gObj.getDetailTemplate() || gObj.childGrid) {\n var detailRow = this.parent.createElement('tr', { className: 'e-detailrow' });\n var detailCell = this.parent.createElement('td', { className: 'e-detailcell' });\n detailCell.setAttribute('colspan', this.parent.getVisibleColumns().length.toString());\n var row = new Row({\n isDataRow: true,\n isExpand: true,\n cells: [new Cell({ cellType: CellType.Indent }), new Cell({ isDataCell: true, visible: true })]\n });\n for (var i = 0, len = gObj.groupSettings.columns.length; i < len; i++) {\n detailRow.appendChild(this.parent.createElement('td', { className: 'e-indentcell' }));\n row.cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n detailRow.appendChild(this.parent.createElement('td', { className: 'e-detailindentcell' }));\n detailRow.appendChild(detailCell);\n tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n if (gObj.detailTemplate) {\n appendChildren(detailCell, gObj.getDetailTemplate()(data, gObj, 'detailTemplate'));\n }\n else {\n gObj.childGrid[parent] = {\n parentID: gObj.element.id,\n parentPrimaryKeys: gObj.getPrimaryKeyFieldNames(),\n parentKeyField: gObj.childGrid.queryString,\n parentKeyFieldValue: data[gObj.childGrid.queryString],\n parentRowData: data\n };\n var grid = new Grid(gObj.childGrid);\n var modules = grid.getInjectedModules();\n var injectedModues = gObj.getInjectedModules();\n if (!modules || modules.length !== injectedModues.length) {\n grid.setInjectedModules(injectedModues);\n }\n var gridElem = this.parent.createElement('div', {\n id: 'child' + parents(tr, 'e-grid').length +\n '_grid' + tr.rowIndex + getUid('')\n });\n detailCell.appendChild(gridElem);\n grid.appendTo(gridElem);\n }\n detailRow.appendChild(detailCell);\n tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n var idx_1;\n this.parent.getRowsObject().some(function (r, rIndex) { idx_1 = rIndex; return r.uid === uid_1; });\n gObj.getRows().splice(tr.rowIndex + 1, 0, detailRow);\n this.parent.getRowsObject().splice(idx_1 + 1, 0, row);\n gObj.trigger(events.detailDataBound, { detailElement: detailCell, data: data });\n gObj.notify(events.detailDataBound, { rows: this.parent.getRowsObject() });\n }\n classList(target, ['e-detailrowexpand'], ['e-detailrowcollapse']);\n classList(target.firstElementChild, ['e-dtdiagonaldown', 'e-icon-gdownarrow'], ['e-dtdiagonalright', 'e-icon-grightarrow']);\n this.parent.getRowsObject()[tr.rowIndex].isExpand = true;\n this.aria.setExpand(target, true);\n }\n else {\n if (this.isDetailRow(nextRow)) {\n nextRow.style.display = 'none';\n }\n classList(target, ['e-detailrowcollapse'], ['e-detailrowexpand']);\n classList(target.firstElementChild, ['e-dtdiagonalright', 'e-icon-grightarrow'], ['e-dtdiagonaldown', 'e-icon-gdownarrow']);\n this.parent.getRowsObject()[tr.rowIndex].isExpand = false;\n this.aria.setExpand(target, false);\n }\n }\n };\n DetailRow.prototype.isDetailRow = function (row) {\n return row && row.classList.contains('e-detailrow');\n };\n DetailRow.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.e-gridheader') &&\n !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n };\n DetailRow.prototype.getTDfromIndex = function (index, className) {\n var tr = this.parent.getDataRows()[index];\n if (tr && tr.querySelector(className)) {\n return tr.querySelector(className);\n }\n return null;\n };\n /**\n * Expands a detail row with the given target.\n * @param {Element} target - Defines the collapsed element to expand.\n * @return {void}\n */\n DetailRow.prototype.expand = function (target) {\n if (!isNaN(target)) {\n target = this.getTDfromIndex(target, '.e-detailrowcollapse');\n }\n if (target && target.classList.contains('e-detailrowcollapse')) {\n this.toogleExpandcollapse(target);\n }\n };\n /**\n * Collapses a detail row with the given target.\n * @param {Element} target - Defines the expanded element to collapse.\n * @return {void}\n */\n DetailRow.prototype.collapse = function (target) {\n if (!isNaN(target)) {\n target = this.getTDfromIndex(target, '.e-detailrowexpand');\n }\n if (target && target.classList.contains('e-detailrowexpand')) {\n this.toogleExpandcollapse(target);\n }\n };\n /**\n * Expands all the detail rows of the Grid.\n * @return {void}\n */\n DetailRow.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the detail rows of the Grid.\n * @return {void}\n */\n DetailRow.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n DetailRow.prototype.expandCollapse = function (isExpand) {\n var td;\n var rows = this.parent.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n td = rows[i].querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n isExpand ? this.expand(td) : this.collapse(td);\n }\n };\n DetailRow.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'altUpArrow':\n case 'altDownArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var td = dataRow.querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n e.action === 'altDownArrow' ? this.expand(td) : this.collapse(td);\n }\n break;\n case 'enter':\n if (this.parent.isEdit) {\n return;\n }\n var element = this.focus.getFocusedElement();\n if (!e.target.classList.contains('e-detailrowcollapse') &&\n !e.target.classList.contains('e-detailrowexpand')) {\n break;\n }\n this.toogleExpandcollapse(element);\n break;\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","import { EventHandler, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { Toolbar as tool } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { templateCompiler, appendChildren } from '../base/util';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `Toolbar` module is used to handle ToolBar actions.\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.predefinedItems = {};\n this.items = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print', 'Search',\n 'ColumnChooser', 'PdfExport', 'ExcelExport', 'CsvExport', 'WordExport'];\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n var preItems = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print',\n 'PdfExport', 'ExcelExport', 'WordExport', 'CsvExport'];\n for (var _i = 0, preItems_1 = preItems; _i < preItems_1.length; _i++) {\n var item = preItems_1[_i];\n var itemStr = item.toLowerCase();\n var localeName = itemStr[0].toUpperCase() + itemStr.slice(1);\n this.predefinedItems[item] = {\n id: this.gridID + '_' + itemStr, prefixIcon: 'e-' + itemStr,\n text: this.l10n.getConstant(localeName), tooltipText: this.l10n.getConstant(localeName)\n };\n }\n this.predefinedItems.Search = {\n id: this.gridID + '_search',\n template: '
    \\\n \\\n \\\n
    ',\n tooltipText: this.l10n.getConstant('Search'), align: 'Right', cssClass: 'e-search-wrapper'\n };\n this.predefinedItems.ColumnChooser = {\n id: this.gridID + '_' + 'columnchooser', cssClass: 'e-cc e-ccdiv e-cc-toolbar', suffixIcon: 'e-' + 'columnchooser-btn',\n text: this.l10n.getConstant('Columnchooser'), tooltipText: this.l10n.getConstant('Columnchooser'), align: 'Right',\n };\n this.createToolbar();\n };\n /**\n * Gets the toolbar of the Grid.\n * @return {Element}\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.toolbar.element;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Toolbar.prototype.destroy = function () {\n if (this.toolbar && !this.toolbar.isDestroyed) {\n if (!this.toolbar.element) {\n this.parent.destroyTemplate(['toolbarTemplate']);\n }\n else {\n this.toolbar.destroy();\n }\n this.unWireEvent();\n this.removeEventListener();\n remove(this.element);\n }\n };\n Toolbar.prototype.createToolbar = function () {\n var items = this.getItems();\n this.toolbar = new tool({\n items: items,\n clicked: this.toolbarClickHandler.bind(this),\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n });\n var viewStr = 'viewContainerRef';\n var registerTemp = 'registeredTemplate';\n if (this.parent[viewStr]) {\n this.toolbar[registerTemp] = {};\n this.toolbar[viewStr] = this.parent[viewStr];\n }\n this.element = this.parent.createElement('div', { id: this.gridID + '_toolbarItems' });\n if (this.parent.toolbarTemplate) {\n if (typeof (this.parent.toolbarTemplate) === 'string') {\n this.toolbar.appendTo(this.parent.toolbarTemplate);\n this.element = this.toolbar.element;\n }\n else {\n appendChildren(this.element, templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate'));\n }\n }\n else {\n this.toolbar.appendTo(this.element);\n }\n this.parent.element.insertBefore(this.element, this.parent.getHeaderContent());\n this.searchElement = this.element.querySelector('#' + this.gridID + '_searchbar');\n this.wireEvent();\n this.refreshToolbarItems();\n if (this.parent.searchSettings) {\n this.updateSearchBox();\n }\n };\n Toolbar.prototype.refreshToolbarItems = function (args) {\n var gObj = this.parent;\n var enableItems = [];\n var disableItems = [];\n var edit = gObj.editSettings;\n var hasData = gObj.currentViewData && gObj.currentViewData.length;\n edit.allowAdding ? enableItems.push(this.gridID + '_add') : disableItems.push(this.gridID + '_add');\n edit.allowEditing && hasData ? enableItems.push(this.gridID + '_edit') : disableItems.push(this.gridID + '_edit');\n edit.allowDeleting && hasData ? enableItems.push(this.gridID + '_delete') : disableItems.push(this.gridID + '_delete');\n if (gObj.editSettings.mode === 'Batch') {\n if (gObj.element.querySelectorAll('.e-updatedtd').length && (edit.allowAdding || edit.allowEditing)) {\n enableItems.push(this.gridID + '_update');\n enableItems.push(this.gridID + '_cancel');\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n else {\n if (gObj.isEdit && (edit.allowAdding || edit.allowEditing)) {\n enableItems = [this.gridID + '_update', this.gridID + '_cancel'];\n disableItems = [this.gridID + '_add', this.gridID + '_edit', this.gridID + '_delete'];\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n this.enableItems(enableItems, true);\n this.enableItems(disableItems, false);\n };\n Toolbar.prototype.getItems = function () {\n var items = [];\n var toolbarItems = this.parent.toolbar || [];\n if (typeof (this.parent.toolbar) === 'string') {\n return [];\n }\n for (var _i = 0, toolbarItems_1 = toolbarItems; _i < toolbarItems_1.length; _i++) {\n var item = toolbarItems_1[_i];\n switch (typeof item) {\n case 'number':\n items.push(this.getItemObject(this.items[item]));\n break;\n case 'string':\n items.push(this.getItemObject(item));\n break;\n default:\n items.push(this.getItem(item));\n }\n }\n return items;\n };\n Toolbar.prototype.getItem = function (itemObject) {\n var item = this.predefinedItems[itemObject.text];\n return item ? extend(item, item, itemObject) : itemObject;\n };\n Toolbar.prototype.getItemObject = function (itemName) {\n return this.predefinedItems[itemName] || { text: itemName, id: this.gridID + '_' + itemName };\n };\n /**\n * Enables or disables ToolBar items.\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @return {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n var element = this.element.querySelector('#' + item);\n if (element) {\n this.toolbar.enableItems(element.parentElement, isEnable);\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var gObj = this.parent;\n var gID = this.gridID;\n extend(args, { cancel: false });\n gObj.trigger(events.toolbarClick, args);\n if (args.cancel) {\n return;\n }\n switch (!isNullOrUndefined(args.item) && args.item.id) {\n case gID + '_print':\n gObj.print();\n break;\n case gID + '_edit':\n gObj.startEdit();\n break;\n case gID + '_update':\n gObj.endEdit();\n break;\n case gID + '_cancel':\n gObj.closeEdit();\n break;\n case gID + '_add':\n gObj.addRecord();\n break;\n case gID + '_delete':\n gObj.deleteRecord();\n break;\n case gID + '_search':\n if (args.originalEvent.target.id === gID + '_searchbutton') {\n this.search();\n }\n break;\n case gID + '_columnchooser':\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n var y = tarElement.getBoundingClientRect().top;\n var x = tarElement.getBoundingClientRect().left;\n var targetEle = args.originalEvent.target;\n y = tarElement.getBoundingClientRect().top + tarElement.offsetTop;\n gObj.createColumnchooser(x, y, targetEle);\n break;\n }\n };\n Toolbar.prototype.modelChanged = function (e) {\n if (e.module === 'edit') {\n this.refreshToolbarItems();\n }\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() || !this.parent.toolbar) {\n return;\n }\n if (this.element) {\n remove(this.element);\n }\n this.render();\n };\n Toolbar.prototype.keyUpHandler = function (e) {\n if (e.keyCode === 13) {\n this.search();\n }\n };\n Toolbar.prototype.search = function () {\n this.parent.search(this.searchElement.value);\n };\n Toolbar.prototype.updateSearchBox = function () {\n if (this.searchElement) {\n this.searchElement.value = this.parent.searchSettings.key;\n }\n };\n Toolbar.prototype.wireEvent = function () {\n if (this.searchElement) {\n this.searchBoxObj = new SearchBox(this.searchElement);\n EventHandler.add(this.searchElement, 'keyup', this.keyUpHandler, this);\n this.searchBoxObj.wireEvent();\n }\n };\n Toolbar.prototype.unWireEvent = function () {\n if (this.searchElement) {\n EventHandler.remove(this.searchElement, 'keyup', this.keyUpHandler);\n this.searchBoxObj.unWireEvent();\n }\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.uiUpdate, this.onPropertyChanged, this);\n this.parent.on(events.inBoundModelChanged, this.updateSearchBox.bind(this));\n this.parent.on(events.modelChanged, this.refreshToolbarItems, this);\n this.parent.on(events.toolbarRefresh, this.refreshToolbarItems, this);\n this.parent.on(events.inBoundModelChanged, this.modelChanged, this);\n this.parent.on(events.dataBound, this.refreshToolbarItems, this);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.onPropertyChanged);\n this.parent.off(events.inBoundModelChanged, this.updateSearchBox);\n this.parent.off(events.modelChanged, this.refreshToolbarItems);\n this.parent.off(events.toolbarRefresh, this.refreshToolbarItems);\n this.parent.off(events.inBoundModelChanged, this.modelChanged);\n this.parent.off(events.dataBound, this.refreshToolbarItems);\n };\n /**\n * For internal use only - Get the module name.\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { colGroupRefresh, columnWidthChanged, scroll, columnVisibilityChanged, refreshFooterRenderer } from '../base/constant';\nimport { ContentRender } from './content-renderer';\nimport { RowRenderer } from './row-renderer';\nimport { SummaryModelGenerator } from '../services/summary-model-generator';\nimport { renderMovable, calculateAggregate } from '../base/util';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Footer module is used to render grid content\n * @hidden\n */\nvar FooterRenderer = /** @class */ (function (_super) {\n __extends(FooterRenderer, _super);\n function FooterRenderer(gridModule, serviceLocator) {\n var _this = _super.call(this, gridModule, serviceLocator) || this;\n _this.aggregates = {};\n _this.parent = gridModule;\n _this.locator = serviceLocator;\n _this.modelGenerator = new SummaryModelGenerator(_this.parent);\n _this.addEventListener();\n return _this;\n }\n /**\n * The function is used to render grid footer div\n */\n FooterRenderer.prototype.renderPanel = function () {\n var div = this.parent.createElement('div', { className: 'e-gridfooter' });\n var innerDiv = this.parent.createElement('div', { className: 'e-summarycontent' });\n var movableContent = innerDiv;\n if (this.parent.getFrozenColumns()) {\n var fDiv = this.parent.createElement('div', { className: 'e-frozenfootercontent' });\n var mDiv = this.parent.createElement('div', { className: 'e-movablefootercontent' });\n innerDiv.appendChild(fDiv);\n innerDiv.appendChild(mDiv);\n this.frozenContent = fDiv;\n this.movableContent = mDiv;\n movableContent = mDiv;\n }\n if (Browser.isDevice) {\n movableContent.style.overflowX = 'scroll';\n }\n div.appendChild(innerDiv);\n this.setPanel(div);\n if (this.parent.getPager() != null) {\n this.parent.element.insertBefore(div, this.parent.getPager());\n }\n else {\n this.parent.element.appendChild(div);\n }\n };\n /**\n * The function is used to render grid footer table\n */\n FooterRenderer.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n var innerDiv = this.createContentTable('_footer_table');\n var table = innerDiv.querySelector('.e-table');\n var tFoot = this.parent.createElement('tfoot');\n table.appendChild(tFoot);\n if (this.parent.getFrozenColumns()) {\n var freezeTable = table.cloneNode(true);\n this.frozenContent.appendChild(freezeTable);\n this.freezeTable = freezeTable;\n this.movableContent.appendChild(table);\n remove(table.querySelector('colgroup'));\n var colGroup = ((this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup')).cloneNode(true));\n table.insertBefore(colGroup, table.querySelector('tbody'));\n this.setColGroup(colGroup);\n }\n this.setTable(table);\n };\n FooterRenderer.prototype.renderSummaryContent = function (e, table, cStart, cEnd) {\n var input = this.parent.dataSource instanceof Array ? this.parent.dataSource : this.parent.currentViewData;\n var summaries = this.modelGenerator.getData();\n var dummies = isNullOrUndefined(cStart) ? this.modelGenerator.getColumns() :\n this.modelGenerator.getColumns(cStart, cEnd);\n var rows = isNullOrUndefined(cStart) ? this.modelGenerator.generateRows(input, e || this.aggregates) :\n this.modelGenerator.generateRows(input, e || this.aggregates, cStart, cEnd);\n var fragment = document.createDocumentFragment();\n var rowrenderer = new RowRenderer(this.locator, null, this.parent);\n rowrenderer.element = this.parent.createElement('TR', { className: 'e-summaryrow' });\n for (var srow = 0, len = summaries.length; srow < len; srow++) {\n var row = rows[srow];\n if (!row) {\n continue;\n }\n var tr = rowrenderer.render(row, dummies);\n fragment.appendChild(tr);\n }\n table.tFoot.appendChild(fragment);\n this.aggregates = e;\n };\n FooterRenderer.prototype.refresh = function (e) {\n if (this.parent.getFrozenColumns()) {\n remove(this.getPanel());\n this.renderPanel();\n this.renderTable();\n this.freezeTable.tFoot.innerHTML = '';\n this.renderSummaryContent(e, this.freezeTable, 0, this.parent.getFrozenColumns());\n }\n this.getTable().tFoot.innerHTML = '';\n this.renderSummaryContent(e, this.getTable(), this.parent.getFrozenColumns());\n // check freeze content have no row case\n if (this.parent.getFrozenColumns()) {\n var frozenDiv = this.frozenContent;\n if (!frozenDiv.offsetHeight) {\n frozenDiv.style.height = this.getTable().offsetHeight + 'px';\n }\n }\n this.onScroll();\n };\n FooterRenderer.prototype.refreshCol = function () {\n // frozen table \n var mheaderCol;\n var fheaderCol = mheaderCol = this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n if (this.parent.getFrozenColumns()) {\n mheaderCol = renderMovable(fheaderCol, this.parent.getFrozenColumns());\n this.freezeTable.replaceChild(fheaderCol, this.freezeTable.querySelector('colGroup'));\n }\n this.getTable().replaceChild(mheaderCol, this.getColGroup());\n this.setColGroup(mheaderCol);\n };\n FooterRenderer.prototype.onWidthChange = function (args) {\n this.getColFromIndex(args.index).style.width = formatUnit(args.width);\n if (this.parent.allowResizing && args.module === 'resize') {\n this.updateFooterTableWidth(this.getTable());\n }\n };\n FooterRenderer.prototype.onScroll = function (e) {\n if (e === void 0) { e = { left: this.parent.getContent().firstChild.scrollLeft }; }\n this.getTable().parentElement.scrollLeft = e.left;\n };\n FooterRenderer.prototype.getColFromIndex = function (index) {\n var fCol = this.parent.getFrozenColumns();\n if (fCol && fCol > index) {\n return this.freezeTable.querySelector('colGroup').children[index];\n }\n return this.getColGroup().children[index - fCol];\n };\n FooterRenderer.prototype.columnVisibilityChanged = function () {\n this.refresh();\n };\n FooterRenderer.prototype.addEventListener = function () {\n this.parent.on(colGroupRefresh, this.refreshCol, this);\n this.parent.on(columnWidthChanged, this.onWidthChange, this);\n this.parent.on(scroll, this.onScroll, this);\n this.parent.on(columnVisibilityChanged, this.columnVisibilityChanged, this);\n this.parent.on(refreshFooterRenderer, this.refreshFooterRenderer, this);\n };\n FooterRenderer.prototype.removeEventListener = function () {\n this.parent.off(colGroupRefresh, this.refreshCol);\n this.parent.off(columnWidthChanged, this.onWidthChange);\n this.parent.off(scroll, this.onScroll);\n this.parent.off(columnVisibilityChanged, this.columnVisibilityChanged);\n this.parent.off(refreshFooterRenderer, this.refreshFooterRenderer);\n };\n FooterRenderer.prototype.updateFooterTableWidth = function (tFoot) {\n var tHead = this.parent.getHeaderTable();\n if (tHead && tFoot) {\n tFoot.style.width = tHead.style.width;\n }\n };\n FooterRenderer.prototype.refreshFooterRenderer = function (editedData) {\n var aggregates = this.onAggregates(editedData);\n this.refresh(aggregates);\n };\n FooterRenderer.prototype.onAggregates = function (editedData) {\n var _this = this;\n editedData = editedData instanceof Array ? editedData : [];\n var field = this.parent.getPrimaryKeyFieldNames()[0];\n var deletedCols = [];\n var mergeds;\n var rows = this.parent.frozenColumns > 0 ? this.parent.getMovableRowsObject() : this.parent.getRowsObject();\n var initds = this.parent.dataSource instanceof Array ? this.parent.dataSource : this.parent.getCurrentViewRecords();\n var addrow = [];\n var changeds = rows.map(function (row) {\n if (row.changes && row.edit === 'add') {\n addrow.push(row.changes);\n }\n if (row.edit === 'delete') {\n deletedCols.push(row.data);\n }\n return row.isDirty && row.changes ? row.changes : row.data;\n });\n changeds = editedData.length === 0 ? changeds : editedData;\n mergeds = initds.map(function (item) {\n var idVal = DataUtil.getObject(field, item);\n var value;\n var hasVal = changeds.some(function (cItem) {\n value = cItem;\n return idVal === DataUtil.getObject(field, cItem);\n });\n return hasVal ? value : item;\n });\n var currentData = this.parent.groupSettings.columns.length > 0 && 'records' in this.parent.currentViewData ?\n this.parent.getCurrentViewRecords() : this.parent.currentViewData;\n var currentds;\n currentds = currentData.map(function (item) {\n var idVal = DataUtil.getObject(field, item);\n var value;\n var hasVal = mergeds.some(function (cItem) {\n value = cItem;\n return idVal === DataUtil.getObject(field, cItem);\n });\n return hasVal ? value : item;\n });\n if (addrow.length > 0) {\n addrow.forEach(function (row) { mergeds.push(row); currentds.push(row); });\n }\n var eData = editedData;\n if (!(eData.type && eData.type === 'cancel') && deletedCols.length > 0) {\n deletedCols.forEach(function (row) {\n var index = mergeds.indexOf(row);\n var curIndx = currentData.indexOf(row);\n mergeds.splice(index, 1);\n if (currentds && currentds.length) {\n currentds.splice(curIndx, 1);\n }\n });\n }\n var aggregate = {};\n var agrVal;\n var aggregateRows = this.parent.aggregates;\n aggregateRows.forEach(function (row) {\n row.columns.forEach(function (col) {\n var data = [];\n var type = col.type.toString();\n data = type.toLowerCase() === 'custom' && !isNullOrUndefined(currentds) ? currentds : mergeds;\n agrVal = calculateAggregate(type, data, col, _this.parent);\n aggregate[col.field + ' - ' + type.toLowerCase()] = agrVal;\n });\n });\n var result = {\n result: this.parent.groupSettings.columns.length > 0 ? mergeds : currentds,\n count: mergeds.length,\n aggregates: aggregate\n };\n return result;\n };\n return FooterRenderer;\n}(ContentRender));\nexport { FooterRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { refreshAggregateCell } from '../base/constant';\n/**\n * SummaryCellRenderer class which responsible for building summary cell content.\n * @hidden\n */\nvar SummaryCellRenderer = /** @class */ (function (_super) {\n __extends(SummaryCellRenderer, _super);\n function SummaryCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent\n .createElement('TD', { className: 'e-summarycell', attrs: { role: 'gridcell', tabindex: '-1' } });\n return _this;\n }\n SummaryCellRenderer.prototype.getValue = function (field, data, column) {\n var key;\n key = !isNullOrUndefined(column.type) ?\n column.field + ' - ' + (typeof column.type === 'string' ? column.type.toLowerCase() : '') : column.columnName;\n return data[column.columnName] ? data[column.columnName][key] : '';\n };\n SummaryCellRenderer.prototype.evaluate = function (node, cell, data, attributes) {\n var column = cell.column;\n this.parent.on(refreshAggregateCell, this.refreshWithAggregate(node, cell), this);\n if (!(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)) {\n return true;\n }\n var tempObj = column.getTemplate(cell.cellType);\n appendChildren(node, tempObj.fn(data[column.columnName], this.parent, tempObj.property));\n return false;\n };\n SummaryCellRenderer.prototype.refreshWithAggregate = function (node, cell) {\n var _this = this;\n var cellNode = cell;\n return function (args) {\n var cell = cellNode;\n var field = cell.column.columnName ? cell.column.columnName : null;\n var curCell = (!isNullOrUndefined(field) ? args.cells.filter(function (cell) {\n return cell.column.columnName === field;\n })[0] : null);\n if (node.parentElement && node.parentElement.getAttribute('data-uid') === args.dataUid && field &&\n field === curCell.column.columnName) {\n _this.refreshTD(node, curCell, args.data);\n }\n };\n };\n return SummaryCellRenderer;\n}(CellRenderer));\nexport { SummaryCellRenderer };\n","import { EventHandler } from '@syncfusion/ej2-base';\nimport { debounce } from '@syncfusion/ej2-base';\n/**\n * InterSectionObserver - class watch whether it enters the viewport.\n * @hidden\n */\nvar InterSectionObserver = /** @class */ (function () {\n function InterSectionObserver(element, options) {\n var _this = this;\n this.fromWheel = false;\n this.touchMove = false;\n this.options = {};\n this.sentinelInfo = {\n 'up': {\n check: function (rect, info) {\n var top = rect.top - _this.containerRect.top;\n info.entered = top >= 0;\n return top + (_this.options.pageHeight / 2) >= 0;\n },\n axis: 'Y'\n },\n 'down': {\n check: function (rect, info) {\n var cHeight = _this.options.container.clientHeight;\n var top = rect.bottom;\n info.entered = rect.bottom <= _this.containerRect.bottom;\n return top - (_this.options.pageHeight / 2) <= _this.options.pageHeight / 2;\n }, axis: 'Y'\n },\n 'right': {\n check: function (rect, info) {\n var right = rect.right;\n info.entered = right < _this.containerRect.right;\n return right - _this.containerRect.width <= _this.containerRect.right;\n }, axis: 'X'\n },\n 'left': {\n check: function (rect, info) {\n var left = rect.left;\n info.entered = left > 0;\n return left + _this.containerRect.width >= _this.containerRect.left;\n }, axis: 'X'\n }\n };\n this.element = element;\n this.options = options;\n }\n InterSectionObserver.prototype.observe = function (callback, onEnterCallback) {\n var _this = this;\n this.containerRect = this.options.container.getBoundingClientRect();\n EventHandler.add(this.options.container, 'wheel', function () { return _this.fromWheel = true; }, this);\n EventHandler.add(this.options.container, 'scroll', this.virtualScrollHandler(callback, onEnterCallback), this);\n };\n InterSectionObserver.prototype.check = function (direction) {\n var info = this.sentinelInfo[direction];\n return info.check(this.element.getBoundingClientRect(), info);\n };\n InterSectionObserver.prototype.virtualScrollHandler = function (callback, onEnterCallback) {\n var _this = this;\n var prevTop = 0;\n var prevLeft = 0;\n var debounced100 = debounce(callback, 100);\n var debounced50 = debounce(callback, 50);\n return function (e) {\n var top = e.target.scrollTop;\n var left = e.target.scrollLeft;\n var direction = prevTop < top ? 'down' : 'up';\n direction = prevLeft === left ? direction : prevLeft < left ? 'right' : 'left';\n prevTop = top;\n prevLeft = left;\n var current = _this.sentinelInfo[direction];\n if (_this.options.axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered) {\n onEnterCallback(_this.element, current, direction, { top: top, left: left });\n }\n if (check) {\n var fn = debounced100; //this.fromWheel ? this.options.debounceEvent ? debounced100 : callback : debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n }\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n _this.fromWheel = false;\n };\n };\n InterSectionObserver.prototype.setPageHeight = function (value) {\n this.options.pageHeight = value;\n };\n return InterSectionObserver;\n}());\nexport { InterSectionObserver };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\n/**\n * Content module is used to render grid content\n */\nvar VirtualRowModelGenerator = /** @class */ (function () {\n function VirtualRowModelGenerator(parent) {\n this.cOffsets = {};\n this.cache = {};\n this.data = {};\n this.groups = {};\n this.parent = parent;\n this.model = this.parent.pageSettings;\n this.rowModelGenerator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n }\n VirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var _this = this;\n var info = notifyArgs.virtualInfo = notifyArgs.virtualInfo || this.getData();\n var xAxis = info.sentinelInfo && info.sentinelInfo.axis === 'X';\n var page = !xAxis && info.loadNext && !info.loadSelf ? info.nextInfo.page : info.page;\n var result = [];\n var center = ~~(this.model.pageSize / 2);\n var indexes = this.getBlockIndexes(page);\n var loadedBlocks = [];\n this.checkAndResetCache(notifyArgs.requestType);\n if (this.parent.enableColumnVirtualization) {\n info.blockIndexes.forEach(function (value) {\n if (_this.isBlockAvailable(value)) {\n _this.cache[value] = _this.rowModelGenerator.refreshRows(_this.cache[value]);\n }\n });\n }\n info.blockIndexes.forEach(function (value) {\n if (!_this.isBlockAvailable(value)) {\n var rows = _this.rowModelGenerator.generateRows(data, {\n virtualInfo: info, startIndex: _this.getStartIndex(value, data)\n });\n var median = ~~Math.max(rows.length, _this.model.pageSize) / 2;\n if (!_this.isBlockAvailable(indexes[0])) {\n _this.cache[indexes[0]] = rows.slice(0, median);\n }\n if (!_this.isBlockAvailable(indexes[1])) {\n _this.cache[indexes[1]] = rows.slice(median);\n }\n }\n if (_this.parent.groupSettings.columns.length && !xAxis && _this.cache[value]) {\n _this.cache[value] = _this.updateGroupRow(_this.cache[value], value);\n }\n result.push.apply(result, _this.cache[value]);\n if (_this.isBlockAvailable(value)) {\n loadedBlocks.push(value);\n }\n });\n info.blockIndexes = loadedBlocks;\n var grouping = 'records';\n if (this.parent.allowGrouping) {\n this.parent.currentViewData[grouping] = result.map(function (m) { return m.data; });\n }\n else {\n this.parent.currentViewData = result.map(function (m) { return m.data; });\n }\n return result;\n };\n VirtualRowModelGenerator.prototype.getBlockIndexes = function (page) {\n return [page + (page - 1), page * 2];\n };\n VirtualRowModelGenerator.prototype.getPage = function (block) {\n return block % 2 === 0 ? block / 2 : (block + 1) / 2;\n };\n VirtualRowModelGenerator.prototype.isBlockAvailable = function (value) {\n return value in this.cache;\n };\n VirtualRowModelGenerator.prototype.getData = function () {\n return {\n page: this.model.currentPage,\n blockIndexes: this.getBlockIndexes(this.model.currentPage),\n direction: 'down',\n columnIndexes: this.parent.getColumnIndexesInView()\n };\n };\n VirtualRowModelGenerator.prototype.getStartIndex = function (blk, data, full) {\n if (full === void 0) { full = true; }\n var page = this.getPage(blk);\n var even = blk % 2 === 0;\n var index = (page - 1) * this.model.pageSize;\n return full || !even ? index : index + ~~(this.model.pageSize / 2);\n };\n VirtualRowModelGenerator.prototype.getColumnIndexes = function (content) {\n var _this = this;\n if (content === void 0) { content = this.parent.getHeaderContent().firstChild; }\n var indexes = [];\n var sLeft = content.scrollLeft | 0;\n var keys = Object.keys(this.cOffsets);\n var cWidth = content.getBoundingClientRect().width;\n sLeft = Math.min(this.cOffsets[keys.length - 1] - cWidth, sLeft);\n var calWidth = Browser.isDevice ? 2 * cWidth : cWidth / 2;\n var left = sLeft + cWidth + (sLeft === 0 ? calWidth : 0);\n keys.some(function (offset, indx, input) {\n var iOffset = Number(offset);\n var offsetVal = _this.cOffsets[offset];\n var border = sLeft - calWidth <= offsetVal && left + calWidth >= offsetVal;\n if (border) {\n indexes.push(iOffset);\n }\n return left + calWidth < offsetVal;\n });\n return indexes;\n };\n VirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder']\n .some(function (value) { return action === value; });\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n return clear;\n };\n VirtualRowModelGenerator.prototype.refreshColOffsets = function () {\n var _this = this;\n var col = 0;\n this.cOffsets = {};\n var gLen = this.parent.groupSettings.columns.length;\n var cols = this.parent.columns;\n var cLen = cols.length;\n var isVisible = function (column) { return column.visible &&\n (!_this.parent.groupSettings.showGroupedColumn ? _this.parent.groupSettings.columns.indexOf(column.field) < 0 : column.visible); };\n this.parent.groupSettings.columns.forEach(function (c, n) { return _this.cOffsets[n] = (_this.cOffsets[n - 1] | 0) + 30; });\n Array.apply(null, Array(cLen)).map(function () { return col++; }).forEach(function (block, i) {\n block = block + gLen;\n _this.cOffsets[block] = (_this.cOffsets[block - 1] | 0) + (isVisible(cols[i]) ? parseInt(cols[i].width, 10) : 0);\n });\n };\n VirtualRowModelGenerator.prototype.updateGroupRow = function (current, block) {\n var _this = this;\n var currentFirst = current[0];\n var rows = [];\n Object.keys(this.cache).forEach(function (key) {\n if (Number(key) < block) {\n rows = rows.concat(_this.cache[key]);\n }\n });\n if ((currentFirst && currentFirst.isDataRow) || block % 2 === 0) {\n return current;\n }\n return this.iterateGroup(current, rows);\n };\n VirtualRowModelGenerator.prototype.iterateGroup = function (current, rows) {\n var currentFirst = current[0];\n var offset = 0;\n if (currentFirst && currentFirst.isDataRow) {\n return current;\n }\n var isPresent = current.some(function (row) {\n return rows.some(function (oRow, index) {\n var res = oRow && oRow.data.field !== undefined && oRow.data.field === row.data.field &&\n oRow.data.key === row.data.key;\n if (res) {\n offset = index;\n }\n return res;\n });\n });\n if (isPresent) {\n current.shift();\n current = this.iterateGroup(current, rows.slice(offset));\n }\n return current;\n };\n VirtualRowModelGenerator.prototype.getRows = function () {\n var _this = this;\n var rows = [];\n Object.keys(this.cache).forEach(function (key) { return rows = rows.concat(_this.cache[key]); });\n return rows;\n };\n return VirtualRowModelGenerator;\n}());\nexport { VirtualRowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { remove, createElement, closest, formatUnit } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { dataReady, modelChanged, refreshVirtualBlock, contentReady } from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { ContentRender } from './content-renderer';\nimport { HeaderRender } from './header-renderer';\nimport { InterSectionObserver } from '../services/intersection-observer';\nimport { VirtualRowModelGenerator } from '../services/virtual-row-model-generator';\n/**\n * VirtualContentRenderer\n * @hidden\n */\nvar VirtualContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualContentRenderer, _super);\n function VirtualContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.prevHeight = 0;\n _this.currentInfo = {};\n _this.preventEvent = false;\n _this.actions = ['filtering', 'searching', 'grouping', 'ungrouping'];\n _this.offsets = {};\n _this.tmpOffsets = {};\n _this.virtualEle = new VirtualElementHandler();\n _this.offsetKeys = [];\n _this.isFocused = false;\n _this.locator = locator;\n _this.eventListener('on');\n _this.vgenerator = _this.generator;\n return _this;\n }\n VirtualContentRenderer.prototype.renderTable = function () {\n this.header = this.locator.getService('rendererFactory').getRenderer(RenderType.Header);\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.content = this.getPanel().firstChild;\n this.virtualEle.renderWrapper(this.parent.height);\n this.virtualEle.renderPlaceHolder();\n this.virtualEle.wrapper.style.position = 'absolute';\n var debounceEvent = (this.parent.dataSource instanceof DataManager && !this.parent.dataSource.dataSource.offline);\n var opt = {\n container: this.content, pageHeight: this.getBlockHeight() * 2, debounceEvent: debounceEvent,\n axes: this.parent.enableColumnVirtualization ? ['X', 'Y'] : ['Y']\n };\n this.observer = new InterSectionObserver(this.virtualEle.wrapper, opt);\n };\n VirtualContentRenderer.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n this.virtualEle.adjustTable(0, 0);\n };\n VirtualContentRenderer.prototype.scrollListener = function (scrollArgs) {\n if (this.preventEvent || this.parent.isDestroyed) {\n this.preventEvent = false;\n return;\n }\n this.isFocused = this.content === closest(document.activeElement, '.e-content') || this.content === document.activeElement;\n var info = scrollArgs.sentinel;\n var viewInfo = this.currentInfo = this.getInfoFromView(scrollArgs.direction, info, scrollArgs.offset);\n if (this.prevInfo && ((info.axis === 'Y' && this.prevInfo.blockIndexes.toString() === viewInfo.blockIndexes.toString())\n || (info.axis === 'X' && this.prevInfo.columnIndexes.toString() === viewInfo.columnIndexes.toString()))) {\n return;\n }\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n this.parent.pageSettings.currentPage = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n };\n VirtualContentRenderer.prototype.block = function (blk) {\n return this.vgenerator.isBlockAvailable(blk);\n };\n VirtualContentRenderer.prototype.getInfoFromView = function (direction, info, e) {\n var tempBlocks = [];\n var infoType = { direction: direction, sentinelInfo: info, offsets: e };\n infoType.page = this.getPageFromTop(e.top, infoType);\n infoType.blockIndexes = tempBlocks = this.vgenerator.getBlockIndexes(infoType.page);\n infoType.loadSelf = !this.vgenerator.isBlockAvailable(tempBlocks[infoType.block]);\n var blocks = this.ensureBlocks(infoType);\n infoType.blockIndexes = blocks;\n infoType.loadNext = !blocks.filter(function (val) { return tempBlocks.indexOf(val) === -1; })\n .every(this.block.bind(this));\n infoType.event = (infoType.loadNext || infoType.loadSelf) ? modelChanged : refreshVirtualBlock;\n infoType.nextInfo = infoType.loadNext ? { page: Math.max(1, infoType.page + (direction === 'down' ? 1 : -1)) } : {};\n infoType.columnIndexes = info.axis === 'X' ? this.vgenerator.getColumnIndexes() : this.parent.getColumnIndexesInView();\n if (this.parent.enableColumnVirtualization && info.axis === 'X') {\n infoType.event = refreshVirtualBlock;\n }\n return infoType;\n };\n VirtualContentRenderer.prototype.ensureBlocks = function (info) {\n var _this = this;\n var index = info.blockIndexes[info.block];\n var mIdx;\n var old = index;\n var max = Math.max;\n var indexes = info.direction === 'down' ? [max(index, 1), ++index, ++index] : [max(index - 1, 1), index, index + 1];\n indexes = indexes.filter(function (val, ind) { return indexes.indexOf(val) === ind; });\n if (this.prevInfo.blockIndexes.toString() === indexes.toString()) {\n return indexes;\n }\n if (info.loadSelf || (info.direction === 'down' && this.isEndBlock(old))) {\n indexes = this.vgenerator.getBlockIndexes(info.page);\n }\n indexes.some(function (val, ind) {\n var result = val === _this.getTotalBlocks();\n if (result) {\n mIdx = ind;\n }\n return result;\n });\n if (mIdx !== undefined) {\n indexes = indexes.slice(0, mIdx + 1);\n if (info.block === 0 && indexes.length === 1 && this.vgenerator.isBlockAvailable(indexes[0] - 1)) {\n indexes = [indexes[0] - 1, indexes[0]];\n }\n }\n return indexes;\n };\n VirtualContentRenderer.prototype.appendContent = function (target, newChild, e) {\n // currentInfo value will be used if there are multiple dom updates happened due to mousewheel\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' && this.currentInfo.page &&\n this.currentInfo.page !== e.virtualInfo.page ? this.currentInfo : e.virtualInfo;\n this.prevInfo = this.prevInfo || e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width;\n var blocks = info.blockIndexes;\n if (this.parent.groupSettings.columns.length) {\n this.refreshOffsets();\n }\n var translate = this.getTranslateY(this.content.scrollTop, this.content.getBoundingClientRect().height, info);\n this.virtualEle.adjustTable(cOffset, translate);\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n }\n if (this.parent.enableColumnVirtualization) {\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, this.parent.enableColumnVirtualization);\n remove(target);\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n this.getTable().appendChild(target);\n if (this.parent.groupSettings.columns.length) {\n if (info.direction === 'up') {\n var blk = this.offsets[this.getTotalBlocks()] - this.prevHeight;\n this.preventEvent = true;\n var sTop = this.content.scrollTop;\n this.content.scrollTop = sTop + blk;\n }\n this.setVirtualHeight();\n this.observer.setPageHeight(this.getOffset(blocks[blocks.length - 1]) - this.getOffset(blocks[0] - 1));\n }\n this.prevInfo = info;\n if (this.isFocused) {\n this.content.focus();\n }\n };\n VirtualContentRenderer.prototype.onDataReady = function (e) {\n if (!isNullOrUndefined(e.count)) {\n this.count = e.count;\n this.maxPage = Math.ceil(e.count / this.parent.pageSettings.pageSize);\n }\n this.vgenerator.checkAndResetCache(e.requestType);\n if (['refresh', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder', undefined]\n .some(function (value) { return e.requestType === value; })) {\n this.refreshOffsets();\n }\n this.setVirtualHeight();\n this.resetScrollPosition(e.requestType);\n };\n VirtualContentRenderer.prototype.setVirtualHeight = function () {\n var width = this.parent.enableColumnVirtualization ?\n this.getColumnOffset(this.parent.columns.length + this.parent.groupSettings.columns.length - 1) + 'px' : '100%';\n this.virtualEle.setVirtualHeight(this.offsets[this.getTotalBlocks()], width);\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.setVirtualHeight(1, width);\n }\n };\n VirtualContentRenderer.prototype.getPageFromTop = function (sTop, info) {\n var _this = this;\n var total = this.getTotalBlocks();\n var page = 0;\n var extra = this.offsets[total] - this.prevHeight;\n this.offsetKeys.some(function (offset) {\n var iOffset = Number(offset);\n var border = sTop < _this.offsets[offset] || (iOffset === total && sTop > _this.offsets[offset]);\n if (border) {\n info.block = iOffset % 2 === 0 ? 1 : 0;\n page = Math.max(1, Math.min(_this.vgenerator.getPage(iOffset), _this.maxPage));\n }\n return border;\n });\n return page;\n };\n VirtualContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if (info === undefined) {\n info = { page: this.getPageFromTop(sTop, {}) };\n info.blockIndexes = this.vgenerator.getBlockIndexes(info.page);\n }\n var block = (info.blockIndexes[0] || 1) - 1;\n var translate = this.getOffset(block);\n var endTranslate = this.getOffset(info.blockIndexes[info.blockIndexes.length - 1]);\n if (isOnenter) {\n info = this.prevInfo;\n }\n var result = translate > sTop ?\n this.getOffset(block - 1) : endTranslate < (sTop + cHeight) ? this.getOffset(block + 1) : translate;\n var blockHeight = this.offsets[info.blockIndexes[info.blockIndexes.length - 1]] -\n this.tmpOffsets[info.blockIndexes[0]];\n if (result + blockHeight > this.offsets[this.getTotalBlocks()]) {\n result -= (result + blockHeight) - this.offsets[this.getTotalBlocks()];\n }\n return result;\n };\n VirtualContentRenderer.prototype.getOffset = function (block) {\n return Math.min(this.offsets[block] | 0, this.offsets[this.maxBlock] | 0);\n };\n VirtualContentRenderer.prototype.onEntered = function () {\n var _this = this;\n return function (element, current, direction, e) {\n var xAxis = current.axis === 'X';\n var top = _this.prevInfo.offsets ? _this.prevInfo.offsets.top : null;\n var height = _this.content.getBoundingClientRect().height;\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0] - 1);\n var y = _this.getTranslateY(e.top, height, xAxis && top === e.top ? _this.prevInfo : undefined, true);\n _this.virtualEle.adjustTable(x, Math.min(y, _this.offsets[_this.maxBlock]));\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n };\n };\n VirtualContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n this.parent[action](dataReady, this.onDataReady, this);\n this.parent[action](refreshVirtualBlock, this.refreshContentRows, this);\n this.actions.forEach(function (event) { return _this.parent[action](event + \"-begin\", _this.onActionBegin, _this); });\n var fn = function () {\n _this.observer.observe(function (scrollArgs) { return _this.scrollListener(scrollArgs); }, _this.onEntered());\n _this.parent.off(contentReady, fn);\n };\n this.parent.on(contentReady, fn, this);\n };\n VirtualContentRenderer.prototype.getBlockSize = function () {\n return this.parent.pageSettings.pageSize >> 1;\n };\n VirtualContentRenderer.prototype.getBlockHeight = function () {\n return this.getBlockSize() * this.parent.getRowHeight();\n };\n VirtualContentRenderer.prototype.isEndBlock = function (index) {\n var totalBlocks = this.getTotalBlocks();\n return index >= totalBlocks || index === totalBlocks - 1;\n };\n VirtualContentRenderer.prototype.getTotalBlocks = function () {\n return Math.ceil(this.count / this.getBlockSize());\n };\n VirtualContentRenderer.prototype.getColumnOffset = function (block) {\n return this.vgenerator.cOffsets[block] | 0;\n };\n VirtualContentRenderer.prototype.getModelGenerator = function () {\n return new VirtualRowModelGenerator(this.parent);\n };\n VirtualContentRenderer.prototype.resetScrollPosition = function (action) {\n if (this.actions.some(function (value) { return value === action; })) {\n this.preventEvent = this.content.scrollTop !== 0;\n this.content.scrollTop = 0;\n }\n };\n VirtualContentRenderer.prototype.onActionBegin = function (e) {\n //Update property silently..\n this.parent.setProperties({ pageSettings: { currentPage: 1 } }, true);\n };\n VirtualContentRenderer.prototype.getRows = function () {\n return this.vgenerator.getRows();\n };\n VirtualContentRenderer.prototype.getRowByIndex = function (index) {\n var prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n return this.parent.getDataRows()[index - startIdx];\n };\n VirtualContentRenderer.prototype.getVirtualRowIndex = function (index) {\n var prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n return startIdx + index;\n };\n VirtualContentRenderer.prototype.refreshOffsets = function () {\n var _this = this;\n var row = 0;\n var bSize = this.getBlockSize();\n var total = this.getTotalBlocks();\n this.prevHeight = this.offsets[total];\n this.maxBlock = total % 2 === 0 ? total - 2 : total - 1;\n this.offsets = {};\n //Row offset update\n Array.apply(null, Array(total)).map(function () { return ++row; })\n .forEach(function (block) {\n var tmp = (_this.vgenerator.cache[block] || []).length;\n var rem = _this.count % bSize;\n var size = block in _this.vgenerator.cache ?\n tmp * _this.parent.getRowHeight() : rem && block === total ? rem * _this.parent.getRowHeight() : _this.getBlockHeight();\n // let size: number = this.parent.groupSettings.columns.length && block in this.vgenerator.cache ?\n // tmp * getRowHeight() : this.getBlockHeight();\n _this.offsets[block] = (_this.offsets[block - 1] | 0) + size;\n _this.tmpOffsets[block] = _this.offsets[block - 1] | 0;\n });\n this.offsetKeys = Object.keys(this.offsets);\n //Column offset update\n if (this.parent.enableColumnVirtualization) {\n this.vgenerator.refreshColOffsets();\n }\n };\n VirtualContentRenderer.prototype.refreshVirtualElement = function () {\n this.vgenerator.refreshColOffsets();\n this.setVirtualHeight();\n };\n return VirtualContentRenderer;\n}(ContentRender));\nexport { VirtualContentRenderer };\n/**\n * @hidden\n */\nvar VirtualHeaderRenderer = /** @class */ (function (_super) {\n __extends(VirtualHeaderRenderer, _super);\n function VirtualHeaderRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.virtualEle = new VirtualElementHandler();\n _this.gen = new VirtualRowModelGenerator(_this.parent);\n _this.parent.on(refreshVirtualBlock, function (e) { return e.virtualInfo.sentinelInfo.axis === 'X' ? _this.refreshUI() : null; }, _this);\n return _this;\n }\n VirtualHeaderRenderer.prototype.renderTable = function () {\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().firstChild));\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.getPanel().firstChild;\n this.virtualEle.content.style.position = 'relative';\n this.virtualEle.renderWrapper();\n this.virtualEle.renderPlaceHolder('absolute');\n };\n VirtualHeaderRenderer.prototype.appendContent = function (table) {\n this.virtualEle.wrapper.appendChild(table);\n };\n VirtualHeaderRenderer.prototype.refreshUI = function () {\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().firstChild));\n _super.prototype.refreshUI.call(this);\n };\n return VirtualHeaderRenderer;\n}(HeaderRender));\nexport { VirtualHeaderRenderer };\n/**\n * @hidden\n */\nvar VirtualElementHandler = /** @class */ (function () {\n function VirtualElementHandler() {\n }\n VirtualElementHandler.prototype.renderWrapper = function (height) {\n this.wrapper = createElement('div', { className: 'e-virtualtable', styles: \"min-height:\" + formatUnit(height) });\n this.wrapper.appendChild(this.table);\n this.content.appendChild(this.wrapper);\n };\n VirtualElementHandler.prototype.renderPlaceHolder = function (position) {\n if (position === void 0) { position = 'relative'; }\n this.placeholder = createElement('div', { className: 'e-virtualtrack', styles: \"position:\" + position });\n this.content.appendChild(this.placeholder);\n };\n VirtualElementHandler.prototype.adjustTable = function (xValue, yValue) {\n this.wrapper.style.transform = \"translate(\" + xValue + \"px, \" + yValue + \"px)\";\n };\n VirtualElementHandler.prototype.setWrapperWidth = function (width, full) {\n this.wrapper.style.width = width ? width + \"px\" : full ? '100%' : '';\n };\n VirtualElementHandler.prototype.setVirtualHeight = function (height, width) {\n this.placeholder.style.height = height + \"px\";\n this.placeholder.style.width = width;\n };\n return VirtualElementHandler;\n}());\nexport { VirtualElementHandler };\n","import { initialLoad } from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { VirtualContentRenderer, VirtualHeaderRenderer } from '../renderer/virtual-content-renderer';\nimport * as events from '../base/constant';\n/**\n * Virtual Scrolling class\n */\nvar VirtualScroll = /** @class */ (function () {\n function VirtualScroll(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualscroll';\n };\n VirtualScroll.prototype.instantiateRenderer = function () {\n var renderer = this.locator.getService('rendererFactory');\n if (this.parent.enableColumnVirtualization) {\n renderer.addRenderer(RenderType.Header, new VirtualHeaderRenderer(this.parent, this.locator));\n }\n renderer.addRenderer(RenderType.Content, new VirtualContentRenderer(this.parent, this.locator));\n this.ensurePageSize();\n };\n VirtualScroll.prototype.ensurePageSize = function () {\n var rowHeight = this.parent.getRowHeight();\n this.blockSize = ~~(this.parent.height / rowHeight);\n var height = this.blockSize * 2;\n var size = this.parent.pageSettings.pageSize;\n this.parent.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.columnWidthChanged, this.refreshVirtualElement, this);\n };\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(initialLoad, this.instantiateRenderer);\n this.parent.off(events.columnWidthChanged, this.refreshVirtualElement);\n };\n VirtualScroll.prototype.refreshVirtualElement = function (args) {\n if (this.parent.enableColumnVirtualization && args.module === 'resize') {\n var renderer = this.locator.getService('rendererFactory');\n renderer.getRenderer(RenderType.Content).refreshVirtualElement();\n }\n };\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\n","import { isNullOrUndefined, addClass, extend, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { appendChildren } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar InlineEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function InlineEditRender(parent) {\n this.parent = parent;\n }\n InlineEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n var mTbody;\n var tbody;\n if (this.parent.frozenRows) {\n tbody = this.parent.getHeaderContent().querySelector('tbody');\n }\n else {\n tbody = this.parent.getContentTable().querySelector('tbody');\n }\n args.row = this.parent.createElement('tr', { className: 'e-row e-addedrow' });\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n tbody.insertBefore(args.row, tbody.firstChild);\n args.row.appendChild(this.getEditElement(elements, false, undefined, args, true));\n if (this.parent.getFrozenColumns()) {\n var mEle = this.renderMovableform(args.row, args);\n if (this.parent.frozenRows) {\n mTbody = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n mTbody.insertBefore(mEle, mTbody.firstChild);\n args.row.querySelector('.e-normaledit').setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');\n mEle.setAttribute('colspan', '' + (this.parent.getVisibleColumns().length - this.parent.getVisibleFrozenColumns()));\n if (this.parent.height === 'auto') {\n this.parent.notify(events.frozenHeight, {});\n }\n }\n };\n InlineEditRender.prototype.renderMovableform = function (ele, args) {\n var mEle = ele.cloneNode(true);\n var form = args.movableForm = mEle.querySelector('form');\n if (this.parent.editSettings.template) {\n form.innerHTML = '';\n this.appendChildren(form, args.rowData, false);\n return mEle;\n }\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n return mEle;\n };\n InlineEditRender.prototype.updateFreezeEdit = function (row, td) {\n td = td.concat([].slice.call(this.getFreezeRow(row).querySelectorAll('td.e-rowcell')));\n return td;\n };\n InlineEditRender.prototype.getFreezeRow = function (row) {\n if (this.parent.getFrozenColumns()) {\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n var fCont = this.parent.getContent().querySelector('.e-frozencontent').querySelector('tbody');\n var mCont = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n var fHdr = this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n if (this.parent.frozenRows && idx >= this.parent.frozenRows) {\n idx -= this.parent.frozenRows;\n }\n if (fCont.contains(row)) {\n return mCont.children[idx];\n }\n else if (mCont.contains(row)) {\n return fCont.children[idx];\n }\n else if (fHdr.contains(row)) {\n return mHdr.children[idx];\n }\n else if (mHdr.contains(row)) {\n return fHdr.children[idx];\n }\n }\n return row;\n };\n InlineEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n if (closest(args.row, '.e-movablecontent')) {\n args.row = this.getFreezeRow(args.row);\n }\n var tdElement = [].slice.call(args.row.querySelectorAll('td.e-rowcell'));\n args.row.innerHTML = '';\n tdElement = this.updateFreezeEdit(args.row, tdElement);\n args.row.appendChild(this.getEditElement(elements, true, tdElement, args, true));\n args.row.classList.add('e-editedrow');\n this.refreshFreezeEdit(args.row, args);\n };\n InlineEditRender.prototype.refreshFreezeEdit = function (row, args) {\n var td = row.firstChild;\n var fCls;\n var cont;\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n if (this.parent.getFrozenColumns()) {\n if (idx < this.parent.frozenRows) {\n cont = this.parent.getHeaderContent();\n fCls = '.e-frozenheader';\n }\n else {\n cont = this.parent.getContent();\n fCls = '.e-frozencontent';\n }\n var mTd = td.cloneNode(true);\n var form = args.movableForm = mTd.querySelector('form');\n if (this.parent.editSettings.template) {\n form.innerHTML = '';\n this.appendChildren(form, args.rowData, false);\n }\n var fRows = void 0;\n if (cont.querySelector(fCls).contains(row)) {\n fRows = this.parent.getMovableRowByIndex(idx);\n this.updateFrozenCont(fRows, td, mTd);\n }\n else {\n fRows = this.parent.getRowByIndex(idx);\n this.updateFrozenCont(fRows, mTd, td);\n }\n fRows.appendChild(mTd);\n fRows.classList.add('e-editedrow');\n }\n };\n InlineEditRender.prototype.updateFrozenCont = function (row, ele, mEle) {\n row.innerHTML = '';\n if (!this.parent.editSettings.template) {\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n }\n ele.setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');\n mEle.setAttribute('colspan', this.parent.getVisibleColumns().length - this.parent.getVisibleFrozenColumns() + '');\n };\n InlineEditRender.prototype.renderMovable = function (ele, mEle) {\n var frzCols = this.parent.getFrozenColumns();\n for (var i = 0; i < frzCols; i++) {\n mEle.querySelector('tr').removeChild(mEle.querySelector('tr').children[0]);\n }\n for (var i = frzCols, len = ele.querySelector('tr').childElementCount; i < len; i++) {\n ele.querySelector('tr').removeChild(ele.querySelector('tr').children[ele.querySelector('tr').childElementCount - 1]);\n }\n };\n InlineEditRender.prototype.getEditElement = function (elements, isEdit, tdElement, args, isFrozen) {\n var gObj = this.parent;\n var gLen = 0;\n var isDetail = !isNullOrUndefined(gObj.detailTemplate) || !isNullOrUndefined(gObj.childGrid) ? 1 : 0;\n if (gObj.allowGrouping) {\n gLen = gObj.groupSettings.columns.length;\n }\n var td = this.parent.createElement('td', {\n className: 'e-editcell e-normaledit',\n attrs: { colspan: (gObj.getVisibleColumns().length - gObj.getVisibleFrozenColumns() + gLen + isDetail).toString() }\n });\n var form = args.form =\n this.parent.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n if (this.parent.editSettings.template) {\n this.appendChildren(form, args.rowData, isFrozen);\n td.appendChild(form);\n return td;\n }\n var table = this.parent.createElement('table', { className: 'e-table e-inline-edit', attrs: { cellspacing: '0.25' } });\n table.appendChild(gObj.getContentTable().querySelector('colgroup').cloneNode(true));\n var tbody = this.parent.createElement('tbody');\n var tr = this.parent.createElement('tr');\n var i = 0;\n if (isDetail) {\n tr.insertBefore(this.parent.createElement('td', { className: 'e-detailrowcollapse' }), tr.firstChild);\n }\n while (i < gLen) {\n tr.appendChild(this.parent.createElement('td', { className: 'e-indentcell' }));\n i++;\n }\n var m = 0;\n i = 0;\n while ((isEdit && m < tdElement.length && i < gObj.getColumns().length) || i < gObj.getColumns().length) {\n var span = isEdit ? tdElement[m].getAttribute('colspan') : null;\n var col = gObj.getColumns()[i];\n var td_1 = this.parent.createElement('td', {\n className: 'e-rowcell', attrs: { style: 'text-align:' + (col.textAlign ? col.textAlign : ''), 'colspan': span ? span : '' }\n });\n if (col.visible) {\n td_1.appendChild(elements[col.uid]);\n if (col.editType === 'booleanedit') {\n td_1.classList.add('e-boolcell');\n }\n else if (col.commands || col.commandsTemplate) {\n addClass([td_1], 'e-unboundcell');\n }\n }\n else {\n td_1.classList.add('e-hide');\n }\n tr.appendChild(td_1);\n i = span ? i + parseInt(span, 10) : i + 1;\n m++;\n }\n tbody.appendChild(tr);\n table.appendChild(tbody);\n form.appendChild(table);\n td.appendChild(form);\n return td;\n };\n InlineEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n InlineEditRender.prototype.appendChildren = function (form, data, isFrozen) {\n var dummyData = extend({}, data, { isAdd: !this.isEdit, isFrozen: isFrozen }, true);\n appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate'));\n };\n return InlineEditRender;\n}());\nexport { InlineEditRender };\n","import { classList } from '@syncfusion/ej2-base';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar BatchEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function BatchEditRender(parent) {\n this.parent = parent;\n }\n BatchEditRender.prototype.update = function (elements, args) {\n args.cell.innerHTML = '';\n args.cell.appendChild(this.getEditElement(elements, args));\n args.cell.classList.add('e-editedbatchcell');\n classList(args.row, ['e-editedrow', 'e-batchrow'], []);\n };\n BatchEditRender.prototype.getEditElement = function (elements, args) {\n var gObj = this.parent;\n var form = this.parent\n .createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n form.appendChild(elements[args.columnObject.uid]);\n if (args.columnObject.editType === 'booleanedit') {\n args.cell.classList.add('e-boolcell');\n }\n if (!args.columnObject.editType) {\n args.cell.classList.add('e-inputbox');\n }\n return form;\n };\n BatchEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n return BatchEditRender;\n}());\nexport { BatchEditRender };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { remove, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { appendChildren } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar DialogEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function DialogEditRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.dialogDestroy, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n DialogEditRender.prototype.setLocaleObj = function () {\n this.l10n = this.serviceLocator.getService('localization');\n };\n DialogEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.createDialog = function (elements, args) {\n var gObj = this.parent;\n this.dialog = this.parent.createElement('div', { id: gObj.element.id + '_dialogEdit_wrapper', styles: 'width: auto' });\n gObj.element.appendChild(this.dialog);\n this.setLocaleObj();\n var position = this.parent.element.getBoundingClientRect().height < 400 ?\n { X: 'center', Y: 'top' } : { X: 'center', Y: 'center' };\n this.dialogObj = args.dialog = new Dialog({\n header: this.isEdit ? this.l10n.getConstant('EditFormTitle') + args.primaryKeyValue[0] :\n this.l10n.getConstant('AddFormTitle'), isModal: true, visible: true, cssClass: 'e-edit-dialog',\n content: this.getEditElement(elements, args),\n showCloseIcon: true,\n allowDragging: true,\n position: position,\n close: this.dialogClose.bind(this),\n closeOnEscape: true, width: gObj.editSettings.template ? 'auto' : '330px',\n target: gObj.element, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: { content: this.l10n.getConstant('SaveButton'), cssClass: 'e-primary', isPrimary: true }\n },\n { click: this.btnClick.bind(this), buttonModel: { cssClass: 'e-flat', content: this.l10n.getConstant('CancelButton') } }]\n });\n this.dialogObj.appendTo(this.dialog);\n };\n DialogEditRender.prototype.btnClick = function (e) {\n if (this.l10n.getConstant('CancelButton').toLowerCase() === e.target.innerText.trim().toLowerCase()) {\n this.dialogClose();\n }\n else {\n this.parent.endEdit();\n }\n };\n DialogEditRender.prototype.dialogClose = function () {\n this.parent.closeEdit();\n this.destroy();\n };\n DialogEditRender.prototype.destroy = function (args) {\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.parent.notify(events.toolbarRefresh, {});\n if (this.dialog && !this.dialogObj.isDestroyed) {\n this.dialogObj.destroy();\n remove(this.dialog);\n }\n };\n DialogEditRender.prototype.getEditElement = function (elements, args) {\n var gObj = this.parent;\n var div = this.parent.createElement('div', { className: this.isEdit ? 'e-editedrow' : 'e-insertedrow' });\n var form = args.form =\n this.parent.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n if (this.parent.editSettings.template) {\n var dummyData = extend({}, args.rowData, { isAdd: !this.isEdit }, true);\n appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate'));\n div.appendChild(form);\n return div;\n }\n var table = this.parent.createElement('table', { className: 'e-table', attrs: { cellspacing: '6px' } });\n var tbody = this.parent.createElement('tbody');\n var cols = gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (!cols[i].visible || cols[i].commands || cols[i].commandsTemplate) {\n continue;\n }\n var tr = this.parent.createElement('tr');\n var dataCell = this.parent.createElement('td', {\n className: 'e-rowcell', attrs: {\n style: 'text-align:' + (this.parent.enableRtl ? 'right' : 'left') + ';width:190px'\n }\n });\n var label = this.parent.createElement('label', { innerHTML: cols[i].field });\n elements[cols[i].uid].classList.remove('e-input');\n dataCell.appendChild(elements[cols[i].uid]);\n tr.appendChild(dataCell);\n tbody.appendChild(tr);\n }\n table.appendChild(tbody);\n form.appendChild(table);\n div.appendChild(form);\n return div;\n };\n DialogEditRender.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.dialogDestroy, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return DialogEditRender;\n}());\nexport { DialogEditRender };\n","import { isNullOrUndefined, closest, extend } from '@syncfusion/ej2-base';\nimport { InlineEditRender } from './inline-edit-renderer';\nimport { BatchEditRender } from './batch-edit-renderer';\nimport { DialogEditRender } from './dialog-edit-renderer';\nimport { attributes, classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { getComplexFieldID, getObject, appendChildren } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar EditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function EditRender(parent, serviceLocator) {\n //Internal variables \n this.editType = {\n 'Inline': InlineEditRender,\n 'Normal': InlineEditRender, 'Batch': BatchEditRender, 'Dialog': DialogEditRender\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = new this.editType[this.parent.editSettings.mode](parent, serviceLocator);\n this.focus = serviceLocator.getService('focus');\n }\n EditRender.prototype.addNew = function (args) {\n this.renderer.addNew(this.getEditElements(args), args);\n this.convertWidget(args);\n };\n EditRender.prototype.update = function (args) {\n this.renderer.update(this.getEditElements(args), args);\n this.convertWidget(args);\n };\n EditRender.prototype.convertWidget = function (args) {\n var gObj = this.parent;\n var isFocused;\n var cell;\n var value;\n var fForm;\n var frzCols = gObj.getFrozenColumns();\n var form = gObj.element.querySelector('.e-gridform');\n if (frzCols && gObj.editSettings.mode === 'Normal') {\n var rowIndex = parseInt(args.row.getAttribute('aria-rowindex'), 10);\n if (gObj.frozenRows && (args.requestType === 'add' || rowIndex < gObj.frozenRows)) {\n fForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');\n }\n else {\n fForm = gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform');\n }\n }\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n if (this.parent.editSettings.template && !isNullOrUndefined(col.field)) {\n var cellArgs = extend({}, args);\n cellArgs.element = form.querySelector('[name=' + getComplexFieldID(col.field) + ']');\n if (isNullOrUndefined(cellArgs.element) && frzCols) {\n cellArgs.element = fForm.querySelector('[name=' + getComplexFieldID(col.field) + ']');\n }\n if (typeof col.edit.write === 'string') {\n getObject(col.edit.write, window)(cellArgs);\n }\n else {\n col.edit.write(cellArgs);\n }\n continue;\n }\n if (!col.visible || col.commands) {\n continue;\n }\n value = (col.valueAccessor(col.field, args.rowData, col));\n if (frzCols && cols.indexOf(col) >= frzCols && gObj.editSettings.mode === 'Normal') {\n cell = fForm.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n else {\n cell = form.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n var temp = col.edit.write;\n if (!isNullOrUndefined(cell)) {\n if (typeof temp === 'string') {\n temp = getObject(temp, window);\n temp({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getObject(col.field, args.foreignKeyData)\n });\n }\n else {\n col.edit.write({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getObject(col.field, args.foreignKeyData)\n });\n }\n if (!isFocused && !cell.getAttribute('disabled')) {\n this.focusElement(cell, args.type);\n isFocused = true;\n }\n }\n }\n };\n EditRender.prototype.focusElement = function (elem, type) {\n var chkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n chkBox.nextElementSibling.classList.add('e-focus');\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.focus.onClick({ target: closest(elem, 'td') }, true);\n }\n else {\n elem.focus();\n }\n if (elem.classList.contains('e-defaultcell')) {\n elem.setSelectionRange(elem.value.length, elem.value.length);\n }\n };\n EditRender.prototype.getEditElements = function (args) {\n var gObj = this.parent;\n var elements = {};\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n if (this.parent.editSettings.template) {\n return {};\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n var col = cols[i];\n if (!col.visible) {\n continue;\n }\n if (col.commands || col.commandsTemplate) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var model = new RowModelGenerator(this.parent);\n var cellRenderer = cellRendererFact.getCellRenderer(CellType.CommandColumn);\n var cells = model.generateRows(args.rowData)[0].cells;\n var cell = cells.filter(function (cell) { return cell.commands; })[0];\n var td = cellRenderer.render(cell, args.rowData, { 'index': args.row ? args.row.getAttribute('aria-rowindex') : 0 });\n var div = td.firstElementChild;\n div.setAttribute('textAlign', td.getAttribute('textAlign'));\n elements[col.uid] = div;\n continue;\n }\n var value = (col.valueAccessor(col.field, args.rowData, col));\n var tArgs = { column: col, value: value, type: args.requestType, data: args.rowData };\n var temp = col.edit.create;\n var input = void 0;\n if (col.editTemplate) {\n input = this.parent.createElement('span', { attrs: { 'e-mappinguid': col.uid } });\n appendChildren(input, col.getEditTemplate()(args.rowData, this.parent, 'editTemplate'));\n }\n else {\n if (typeof temp === 'string') {\n temp = getObject(temp, window);\n input = temp(tArgs);\n }\n else {\n input = col.edit.create(tArgs);\n }\n if (typeof input === 'string') {\n var div = this.parent.createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n var isInput = input.tagName !== 'input' && input.querySelectorAll('input').length;\n var complexFieldName = getComplexFieldID(col.field);\n attributes(isInput ? input.querySelector('input') : input, {\n name: complexFieldName, 'e-mappinguid': col.uid,\n id: gObj.element.id + complexFieldName\n });\n classList(input, ['e-input', 'e-field'], []);\n if (col.textAlign === 'Right') {\n input.classList.add('e-ralign');\n }\n if ((col.isPrimaryKey || col.isIdentity) && args.requestType === 'beginEdit' ||\n (col.isIdentity && args.requestType === 'add')) { // already disabled in cell plugins\n input.setAttribute('disabled', 'true');\n }\n }\n elements[col.uid] = input;\n }\n return elements;\n };\n EditRender.prototype.destroy = function () {\n this.renderer.removeEventListener();\n };\n return EditRender;\n}());\nexport { EditRender };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { extend } from '@syncfusion/ej2-base';\nimport { isEditable, addRemoveActiveClasses, getComplexFieldID, getObject } from '../base/util';\n/**\n * `BooleanEditCell` is used to handle boolean cell type editing.\n * @hidden\n */\nvar BooleanEditCell = /** @class */ (function () {\n function BooleanEditCell(parent) {\n this.activeClasses = ['e-selectionbackground', 'e-active'];\n this.parent = parent;\n }\n BooleanEditCell.prototype.create = function (args) {\n var col = args.column;\n var classNames = 'e-field e-boolcell';\n if (col.type === 'checkbox') {\n classNames = 'e-field e-boolcell e-edit-checkselect';\n }\n var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: classNames, attrs: {\n type: 'checkbox', value: args.value, 'e-mappinguid': col.uid,\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName\n }\n });\n };\n BooleanEditCell.prototype.read = function (element) {\n return element.checked;\n };\n BooleanEditCell.prototype.write = function (args) {\n var selectChkBox;\n var chkState;\n var isAddRow = args.requestType === 'add' || args.row.classList.contains('e-addedrow');\n if (!isNullOrUndefined(args.row)) {\n selectChkBox = args.row.querySelector('.e-edit-checkselect');\n }\n if (getObject(args.column.field, args.rowData)) {\n chkState = JSON.parse(getObject(args.column.field, args.rowData).toString().toLowerCase());\n }\n if (!isNullOrUndefined(selectChkBox)) {\n this.editType = this.parent.editSettings.mode;\n this.editRow = args.row;\n if (args.requestType !== 'add') {\n var row = this.parent.getRowObjectFromUID(args.row.getAttribute('data-uid'));\n chkState = row ? row.isSelected : false;\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(args.row.querySelectorAll('.e-rowcell')), chkState].concat(this.activeClasses));\n }\n this.obj = new CheckBox(extend({\n label: this.parent.editSettings.mode !== 'Dialog' ? '' : args.column.headerText,\n checked: chkState,\n disabled: !isEditable(args.column, args.requestType, args.element), enableRtl: this.parent.enableRtl,\n change: this.checkBoxChange.bind(this)\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n };\n BooleanEditCell.prototype.checkBoxChange = function (args) {\n if (this.editRow && this.editType !== 'Dialog') {\n var add = false;\n if (!args.checked) {\n this.editRow.removeAttribute('aria-selected');\n }\n else {\n add = true;\n this.editRow.setAttribute('aria-selected', add.toString());\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(this.editRow.querySelectorAll('.e-rowcell')), add].concat(this.activeClasses));\n }\n };\n BooleanEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return BooleanEditCell;\n}());\nexport { BooleanEditCell };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { isEditable, getComplexFieldID, getObject } from '../base/util';\nimport { parentsUntil } from '../base/util';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n * @hidden\n */\nvar DropDownEditCell = /** @class */ (function () {\n function DropDownEditCell(parent) {\n //constructor\n this.parent = parent;\n }\n DropDownEditCell.prototype.create = function (args) {\n //create\n var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName, type: 'text', 'e-mappinguid': args.column.uid,\n }\n });\n };\n DropDownEditCell.prototype.write = function (args) {\n this.column = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.obj = new DropDownList(extend({\n dataSource: this.parent.dataSource instanceof DataManager ?\n this.parent.dataSource : new DataManager(this.parent.dataSource),\n query: new Query().select(args.column.field), enabled: isEditable(args.column, args.requestType, args.element),\n fields: { value: args.column.field },\n value: getObject(args.column.field, args.rowData),\n enableRtl: this.parent.enableRtl, actionComplete: this.ddActionComplete.bind(this),\n placeholder: isInline ? '' : args.column.headerText, popupHeight: '200px',\n floatLabelType: isInline ? 'Never' : 'Always', open: this.dropDownOpen.bind(this),\n sortOrder: 'Ascending'\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n /* tslint:disable-next-line:no-any */\n args.element.setAttribute('name', getComplexFieldID(args.column.field));\n };\n DropDownEditCell.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DropDownEditCell.prototype.ddActionComplete = function (e) {\n e.result = DataUtil.distinct(e.result, this.obj.fields.value, true);\n if (this.column.dataSource) {\n this.column.dataSource.dataSource.json = e.result;\n }\n };\n DropDownEditCell.prototype.dropDownOpen = function (args) {\n var dlgElement = parentsUntil(this.obj.element, 'e-dialog');\n if (this.parent.editSettings.mode === 'Dialog' && !isNullOrUndefined(dlgElement)) {\n var dlgObj = this.parent.element.querySelector('#' + dlgElement.id).ej2_instances[0];\n args.popup.element.style.zIndex = (dlgObj.zIndex + 1).toString();\n }\n };\n DropDownEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return DropDownEditCell;\n}());\nexport { DropDownEditCell };\n","import { extend, Internationalization } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { isEditable, getComplexFieldID, getObject } from '../base/util';\n/**\n * `NumericEditCell` is used to handle numeric cell type editing.\n * @hidden\n */\nvar NumericEditCell = /** @class */ (function () {\n function NumericEditCell(parent) {\n this.parent = parent;\n }\n NumericEditCell.prototype.create = function (args) {\n var complexFieldName = getComplexFieldID(args.column.field);\n this.instances = new Internationalization(this.parent.locale);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName, 'e-mappinguid': args.column.uid\n }\n });\n };\n NumericEditCell.prototype.read = function (element) {\n var value = this.instances.getNumberParser({ format: 'n' })(element.value);\n return value;\n };\n NumericEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.obj = new NumericTextBox(extend({\n value: parseFloat(getObject(args.column.field, args.rowData)),\n enableRtl: this.parent.enableRtl,\n placeholder: isInline ? '' : args.column.headerText,\n enabled: isEditable(args.column, args.requestType, args.element),\n floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n }, col.edit.params));\n this.obj.appendTo(args.element);\n args.element.setAttribute('name', getComplexFieldID(args.column.field));\n };\n NumericEditCell.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n this.obj.destroy();\n }\n };\n return NumericEditCell;\n}());\nexport { NumericEditCell };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { isEditable, getComplexFieldID } from '../base/util';\n/**\n * `DefaultEditCell` is used to handle default cell type editing.\n * @hidden\n */\nvar DefaultEditCell = /** @class */ (function () {\n function DefaultEditCell(parent) {\n this.parent = parent;\n }\n DefaultEditCell.prototype.create = function (args) {\n var col = args.column;\n var input = this.parent.createElement('input', {\n className: 'e-field e-input e-defaultcell', attrs: {\n type: 'text', value: !isNullOrUndefined(args.value) ? args.value : '', 'e-mappinguid': col.uid,\n id: this.parent.element.id + getComplexFieldID(col.field), name: getComplexFieldID(col.field),\n style: 'text-align:' + col.textAlign,\n }\n });\n return input;\n };\n DefaultEditCell.prototype.read = function (element) {\n return element.value;\n };\n DefaultEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var inputargs = {\n element: args.element, floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n properties: {\n enableRtl: this.parent.enableRtl, enabled: isEditable(args.column, args.requestType, args.element),\n placeholder: isInline ? '' : args.column.headerText\n }\n };\n Input.createInput(inputargs, this.parent.createElement);\n };\n return DefaultEditCell;\n}());\nexport { DefaultEditCell };\n","import { extend } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { parentsUntil, refreshForeignData, getObject } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * `NormalEdit` module is used to handle normal('inline, dialog, external') editing actions.\n * @hidden\n */\nvar NormalEdit = /** @class */ (function () {\n function NormalEdit(parent, serviceLocator, renderer) {\n this.args = {};\n this.parent = parent;\n this.renderer = renderer;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n NormalEdit.prototype.clickHandler = function (e) {\n var target = e.target;\n var gObj = this.parent;\n if ((((parentsUntil(target, 'e-gridcontent') &&\n parentsUntil(parentsUntil(target, 'e-gridcontent'), 'e-grid').id === gObj.element.id)) || (gObj.frozenRows\n && parentsUntil(target, 'e-headercontent'))) && !parentsUntil(target, 'e-unboundcelldiv')) {\n this.rowIndex = parentsUntil(target, 'e-rowcell') ? parseInt(target.parentElement.getAttribute('aria-rowindex'), 10) : -1;\n if (gObj.isEdit) {\n gObj.editModule.endEdit();\n }\n }\n };\n NormalEdit.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') && this.parent.editSettings.allowEditOnDblClick) {\n this.parent.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n /**\n * The function used to trigger editComplete\n * @return {void}\n * @hidden\n */\n NormalEdit.prototype.editComplete = function (e) {\n this.parent.isEdit = false;\n switch (e.requestType) {\n case 'save':\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n this.parent.selectRow(0);\n }\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'save',\n type: events.actionComplete\n }));\n break;\n case 'delete':\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'delete',\n type: events.actionComplete\n }));\n this.parent.selectRow(this.editRowIndex);\n break;\n }\n };\n NormalEdit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n var primaryKeys = gObj.getPrimaryKeyFieldNames();\n var primaryKeyValues = [];\n this.rowIndex = this.editRowIndex = parseInt(tr.getAttribute('aria-rowindex'), 10);\n this.previousData = gObj.getCurrentViewRecords()[this.rowIndex];\n for (var i = 0; i < primaryKeys.length; i++) {\n primaryKeyValues.push(this.previousData[primaryKeys[i]]);\n }\n this.uid = tr.getAttribute('data-uid');\n var rowObj = gObj.getRowObjectFromUID(this.uid);\n var args = {\n row: tr, primaryKey: primaryKeys, primaryKeyValue: primaryKeyValues, requestType: 'beginEdit',\n rowData: this.previousData, rowIndex: this.rowIndex, type: 'edit', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n gObj.trigger(events.beginEdit, args);\n args.type = 'actionBegin';\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.clearSelection();\n }\n if (gObj.editSettings.mode === 'Dialog') {\n gObj.selectionModule.preventFocus = true;\n args.row.classList.add('e-dlgeditrow');\n }\n this.renderer.update(args);\n this.uid = tr.getAttribute('data-uid');\n gObj.editModule.applyFormValidation();\n args.type = 'actionComplete';\n gObj.trigger(events.actionComplete, args);\n this.args = args;\n if (this.parent.allowTextWrap) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n };\n NormalEdit.prototype.updateRow = function (index, data) {\n var gObj = this.parent;\n var args = {\n requestType: 'save', type: events.actionBegin, data: data, cancel: false,\n previousData: gObj.getCurrentViewRecords()[index]\n };\n gObj.showSpinner();\n gObj.notify(events.updateData, args);\n gObj.refresh();\n };\n NormalEdit.prototype.editFormValidate = function () {\n var gObj = this.parent;\n var form1 = gObj.editModule.formObj.validate();\n var form2 = gObj.editModule.mFormObj ? gObj.editModule.mFormObj.validate() : true;\n return (form1 && form2);\n };\n NormalEdit.prototype.endEdit = function () {\n var gObj = this.parent;\n if (!this.parent.isEdit || !this.editFormValidate()) {\n return;\n }\n var editedData = extend({}, {}, this.previousData, true);\n var args = extend(this.args, {\n requestType: 'save', type: events.actionBegin, data: editedData, cancel: false,\n previousData: this.previousData, selectedRow: gObj.selectedRowIndex, foreignKeyData: {}\n });\n editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-gridform'), editedData);\n if (gObj.getFrozenColumns() && gObj.editSettings.mode === 'Normal') {\n var mForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');\n if (gObj.frozenRows && mForm) {\n editedData = gObj.editModule.getCurrentEditedData(mForm, editedData);\n }\n else {\n editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform'), editedData);\n }\n }\n if (gObj.element.querySelectorAll('.e-editedrow').length) {\n args.action = 'edit';\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.showSpinner();\n gObj.notify(events.updateData, args);\n }\n else {\n args.action = 'add';\n args.selectedRow = 0;\n args.index = this.addedRowIndex;\n gObj.notify(events.modelChanged, args);\n this.addedRowIndex = null;\n if (args.cancel) {\n return;\n }\n }\n };\n NormalEdit.prototype.destroyElements = function () {\n var gObj = this.parent;\n gObj.editModule.destroyWidgets();\n gObj.editModule.destroyForm();\n this.parent.notify(events.dialogDestroy, {});\n };\n NormalEdit.prototype.editHandler = function (args) {\n var _this = this;\n if (args.promise) {\n args.promise.then(function (e) { return _this.edSucc(e, args); }).catch(function (e) { return _this.edFail(e); });\n }\n else {\n this.editSuccess(args.data, args);\n }\n };\n NormalEdit.prototype.edSucc = function (e, args) {\n this.editSuccess(e, args);\n };\n NormalEdit.prototype.edFail = function (e) {\n this.editFailure(e);\n };\n NormalEdit.prototype.updateCurrentViewData = function (data) {\n this.parent.getCurrentViewRecords()[this.editRowIndex] = data;\n };\n NormalEdit.prototype.requestSuccess = function (args) {\n if (this.parent.editModule.formObj && !this.parent.editModule.formObj.isDestroyed) {\n this.destroyElements();\n this.stopEditStatus();\n if (this.parent.editSettings.mode === 'Dialog' && args.action !== 'add') {\n this.parent.element.querySelector('.e-dlgeditrow').classList.remove('e-dlgeditrow');\n }\n }\n };\n NormalEdit.prototype.editSuccess = function (e, args) {\n if (!isNullOrUndefined(e)) {\n args.data = e;\n }\n this.requestSuccess(args);\n this.parent.trigger(events.beforeDataBound, args);\n args.type = events.actionComplete;\n this.parent.isEdit = false;\n this.refreshRow(args.data);\n this.updateCurrentViewData(args.data);\n this.parent.trigger(events.actionComplete, args);\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n if (this.parent.editSettings.mode !== 'Dialog') {\n this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);\n }\n }\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.editFailure = function (e) {\n this.parent.trigger(events.actionFailure, e);\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.refreshRow = function (data) {\n var frzCols = this.parent.getFrozenColumns();\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var rowObj = this.parent.getRowObjectFromUID(this.uid);\n if (rowObj) {\n rowObj.changes = data;\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n row.refresh(rowObj, this.parent.getColumns(), true);\n if (frzCols) {\n var uid = void 0;\n var tr = this.parent.element.querySelector('[data-uid=' + rowObj.uid + ']');\n if ((parentsUntil(tr, 'e-frozencontent')) || (parentsUntil(tr, 'e-frozenheader'))) {\n uid = this.parent.getMovableRows()[rowObj.index].getAttribute('data-uid');\n }\n else {\n uid = this.parent.getRows()[rowObj.index].getAttribute('data-uid');\n }\n rowObj = this.parent.getRowObjectFromUID(uid);\n rowObj.changes = data;\n row.refresh(rowObj, this.parent.columns, true);\n }\n }\n };\n NormalEdit.prototype.closeEdit = function () {\n if (!this.parent.isEdit) {\n return;\n }\n var gObj = this.parent;\n var args = extend(this.args, {\n requestType: 'cancel', type: events.actionBegin, data: this.previousData, selectedRow: gObj.selectedRowIndex\n });\n gObj.trigger(events.actionBegin, args);\n if (this.parent.editSettings.mode === 'Dialog') {\n this.parent.notify(events.dialogDestroy, {});\n }\n gObj.isEdit = false;\n this.stopEditStatus();\n args.type = events.actionComplete;\n if (gObj.editSettings.mode !== 'Dialog') {\n this.refreshRow(args.data);\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.selectRow(this.rowIndex);\n }\n gObj.trigger(events.actionComplete, args);\n };\n NormalEdit.prototype.addRecord = function (data, index) {\n var _this = this;\n var gObj = this.parent;\n this.addedRowIndex = index = !isNullOrUndefined(index) ? index : 0;\n if (data) {\n gObj.notify(events.modelChanged, {\n requestType: 'save', type: events.actionBegin, data: data, selectedRow: 0, action: 'add', index: index\n });\n return;\n }\n if (gObj.isEdit) {\n return;\n }\n this.previousData = {};\n this.uid = '';\n gObj.columns.forEach(function (col) {\n if (col.field) {\n DataUtil.setValue(col.field, col.defaultValue, _this.previousData);\n }\n });\n var args = {\n cancel: false, foreignKeyData: {},\n requestType: 'add', data: this.previousData, type: events.actionBegin, index: index,\n rowData: this.previousData\n };\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.clearSelection();\n }\n this.renderer.addNew(args);\n gObj.editModule.applyFormValidation();\n args.type = events.actionComplete;\n args.row = gObj.element.querySelector('.e-addedrow');\n gObj.trigger(events.actionComplete, args);\n this.args = args;\n };\n NormalEdit.prototype.deleteRecord = function (fieldname, data) {\n this.editRowIndex = this.parent.selectedRowIndex;\n if (data) {\n data = (data instanceof Array) ? data : [data];\n var gObj = this.parent;\n var index = 0;\n var dataLen = Object.keys(data).length;\n fieldname = fieldname || this.parent.getPrimaryKeyFieldNames()[0];\n var _loop_1 = function (i) {\n var _a;\n var tmpRecord;\n var contained = gObj.currentViewData.some(function (record) {\n tmpRecord = record;\n return data[i] === getObject(fieldname, record) || data[i] === record;\n });\n data[i] = contained ? tmpRecord : (_a = {}, _a[fieldname] = data[i], _a);\n };\n for (var i = 0; i < dataLen; i++) {\n _loop_1(i);\n }\n }\n this.parent.notify(events.modelChanged, {\n requestType: 'delete', type: events.actionBegin, foreignKeyData: {},\n data: data ? data : this.parent.getSelectedRecords(), tr: this.parent.getSelectedRows(), cancel: false\n });\n };\n NormalEdit.prototype.stopEditStatus = function () {\n var gObj = this.parent;\n var elem = gObj.element.querySelector('.e-addedrow');\n var mElem;\n var editMElem;\n if (gObj.getFrozenColumns()) {\n mElem = gObj.element.querySelectorAll('.e-addedrow')[1];\n editMElem = gObj.element.querySelectorAll('.e-editedrow')[1];\n if (mElem) {\n remove(mElem);\n }\n if (editMElem) {\n editMElem.classList.remove('e-editedrow');\n }\n }\n if (elem) {\n remove(elem);\n }\n elem = gObj.element.querySelector('.e-editedrow');\n if (elem) {\n elem.classList.remove('e-editedrow');\n }\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.crudAction, this.editHandler, this);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.recordAdded, this.requestSuccess, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.deleteComplete, this.editComplete, this);\n this.parent.on(events.saveComplete, this.editComplete, this);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.editHandler);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.recordAdded, this.requestSuccess);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.deleteComplete, this.editComplete);\n this.parent.off(events.saveComplete, this.editComplete);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.destroy = function () {\n this.removeEventListener();\n this.renderer.destroy();\n };\n return NormalEdit;\n}());\nexport { NormalEdit };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `InlineEdit` module is used to handle inline editing actions.\n * @hidden\n */\nvar InlineEdit = /** @class */ (function (_super) {\n __extends(InlineEdit, _super);\n function InlineEdit(parent, serviceLocator, renderer) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n InlineEdit.prototype.closeEdit = function () {\n _super.prototype.closeEdit.call(this);\n };\n InlineEdit.prototype.addRecord = function (data, index) {\n _super.prototype.addRecord.call(this, data, index);\n };\n InlineEdit.prototype.endEdit = function () {\n _super.prototype.endEdit.call(this);\n };\n InlineEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n InlineEdit.prototype.deleteRecord = function (fieldname, data) {\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n InlineEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return InlineEdit;\n}(NormalEdit));\nexport { InlineEdit };\n","import { extend, addClass, removeClass, setValue } from '@syncfusion/ej2-base';\nimport { remove, classList } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { parentsUntil, inArray, refreshForeignData, getObject } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent, serviceLocator, renderer) {\n this.cellDetails = {};\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = renderer;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n }\n /**\n * @hidden\n */\n BatchEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.beforeCellFocused, this.onBeforeCellFocused, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.dataBoundFunction = this.dataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.keyPressed, this.keyDownHandler, this);\n this.parent.on(events.editNextValCell, this.editNextValCell, this);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.beforeCellFocused, this.onBeforeCellFocused);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.keyPressed, this.keyDownHandler);\n this.parent.off(events.editNextValCell, this.editNextValCell);\n };\n BatchEdit.prototype.dataBound = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n BatchEdit.prototype.clickHandler = function (e) {\n if (!parentsUntil(e.target, this.parent.element.id + '_add', true)) {\n if (this.parent.isEdit) {\n this.saveCell();\n this.editNextValCell();\n }\n if (parentsUntil(e.target, 'e-rowcell') && !this.parent.isEdit) {\n this.setCellIdx(e.target);\n }\n }\n };\n BatchEdit.prototype.dblClickHandler = function (e) {\n var target = parentsUntil(e.target, 'e-rowcell');\n var tr = parentsUntil(e.target, 'e-row');\n if (target && tr && !isNaN(parseInt(target.getAttribute('aria-colindex'), 10))\n && !target.parentElement.classList.contains('e-editedrow')) {\n this.editCell(parseInt(tr.getAttribute('aria-rowindex'), 10), this.parent.getColumns()[parseInt(target.getAttribute('aria-colindex'), 10)].field, this.isAddRow(parseInt(tr.getAttribute('aria-rowindex'), 10)));\n }\n };\n BatchEdit.prototype.onBeforeCellFocused = function (e) {\n if (this.parent.isEdit && this.validateFormObj() &&\n (e.byClick || (['tab', 'shiftTab', 'enter', 'shiftEnter'].indexOf(e.keyArgs.action) > -1))) {\n e.cancel = true;\n if (e.byClick) {\n e.clickArgs.preventDefault();\n }\n else {\n e.keyArgs.preventDefault();\n }\n }\n };\n BatchEdit.prototype.onCellFocused = function (e) {\n var frzCols = this.parent.getFrozenColumns();\n var mCont = this.parent.getContent().querySelector('.e-movablecontent');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n var clear = (!e.container.isContent || !e.container.isDataCell) && !(this.parent.frozenRows && e.container.isHeader);\n if (!e.byKey || clear) {\n return;\n }\n var _a = e.container.indexes, rowIndex = _a[0], cellIndex = _a[1];\n if (frzCols && (mCont.contains(e.element) || (this.parent.frozenRows && mHdr.contains(e.element)))) {\n cellIndex += frzCols;\n }\n if (this.parent.frozenRows && e.container.isContent) {\n rowIndex += this.parent.frozenRows;\n }\n var isEdit = this.parent.isEdit;\n if (!this.parent.element.querySelectorAll('.e-popup-open').length) {\n isEdit = isEdit && !this.validateFormObj();\n switch (e.keyArgs.action) {\n case 'tab':\n case 'shiftTab':\n if (isEdit || this.parent.isLastCellPrimaryKey) {\n this.editCellFromIndex(rowIndex, cellIndex);\n }\n break;\n case 'enter':\n case 'shiftEnter':\n e.keyArgs.preventDefault();\n if (isEdit) {\n this.editCell(rowIndex, this.cellDetails.column.field);\n }\n break;\n case 'f2':\n this.editCellFromIndex(rowIndex, cellIndex);\n this.focus.focus();\n break;\n }\n }\n };\n BatchEdit.prototype.isAddRow = function (index) {\n return this.parent.getDataRows()[index].classList.contains('e-insertedrow');\n };\n BatchEdit.prototype.editCellFromIndex = function (rowIdx, cellIdx) {\n this.cellDetails.rowIndex = rowIdx;\n this.cellDetails.cellIndex = cellIdx;\n this.editCell(rowIdx, this.parent.getColumns()[cellIdx].field, this.isAddRow(rowIdx));\n };\n BatchEdit.prototype.closeEdit = function () {\n var gObj = this.parent;\n var rows = this.parent.getRowsObject();\n if (gObj.frozenColumns && rows.length < this.parent.currentViewData.length * 2) {\n rows.push.apply(rows, this.parent.getMovableRowsObject());\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this.parent);\n var tr;\n var mTr;\n var movObj;\n if (gObj.isEdit) {\n this.saveCell(true);\n }\n this.isAdded = false;\n gObj.clearSelection();\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].isDirty) {\n if (gObj.frozenColumns) {\n movObj = gObj.getMovableRowsObject()[rows[i].index];\n movObj.isDirty = true;\n }\n tr = gObj.getContentTable().querySelector('[data-uid=' + rows[i].uid + ']');\n if (gObj.frozenRows) {\n tr = gObj.getHeaderContent().querySelector('[data-uid=' + rows[i].uid + ']');\n }\n if (gObj.frozenColumns) {\n if (gObj.frozenRows) {\n mTr = gObj.getHeaderContent().querySelector('.e-movableheader')\n .querySelector('[data-uid=' + rows[i].uid + ']');\n }\n else {\n mTr = gObj.getContent().querySelector('.e-movablecontent')\n .querySelector('[data-uid=' + rows[i].uid + ']');\n }\n }\n if (tr || mTr) {\n if (tr && tr.classList.contains('e-insertedrow') || mTr && mTr.classList.contains('e-insertedrow')) {\n if (tr) {\n remove(tr);\n }\n if (mTr && (gObj.frozenColumns || gObj.frozenRows)) {\n remove(mTr);\n }\n this.removeRowObjectFromUID(rows[i].uid);\n i--;\n }\n else {\n refreshForeignData(rows[i], this.parent.getForeignKeyColumns(), rows[i].data);\n delete rows[i].changes;\n rows[i].isDirty = false;\n var ftr = mTr ? mTr : tr;\n classList(ftr, [], ['e-hiddenrow', 'e-updatedtd']);\n rowRenderer.refresh(rows[i], gObj.getColumns(), false);\n if (this.parent.aggregates.length > 0) {\n var type = 'type';\n var editType = [];\n editType[type] = 'cancel';\n this.parent.notify(events.refreshFooterRenderer, editType);\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(events.groupAggregates, editType);\n }\n }\n }\n }\n }\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n var args = {\n requestType: 'batchCancel', rows: this.parent.getRowsObject()\n };\n gObj.notify(events.batchCancel, {\n rows: this.parent.getRowsObject().length ? this.parent.getRowsObject() :\n [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })]\n });\n gObj.selectRow(this.cellDetails.rowIndex);\n this.refreshRowIdx();\n gObj.notify(events.toolbarRefresh, {});\n this.parent.notify(events.tooltipDestroy, {});\n args = { requestType: 'batchCancel', rows: this.parent.getRowsObject() };\n gObj.trigger(events.batchCancel, args);\n if (gObj.frozenColumns) {\n rows.splice(this.parent.getMovableRowsObject().length, rows.length);\n }\n };\n BatchEdit.prototype.deleteRecord = function (fieldname, data) {\n this.saveCell();\n if (this.validateFormObj()) {\n this.saveCell(true);\n }\n this.isAdded = false;\n this.bulkDelete(fieldname, data);\n if (this.parent.aggregates.length > 0) {\n this.parent.notify(events.refreshFooterRenderer, {});\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(events.groupAggregates, {});\n }\n }\n };\n BatchEdit.prototype.addRecord = function (data) {\n this.bulkAddRow(data);\n };\n BatchEdit.prototype.endEdit = function (data) {\n if (this.parent.isEdit && this.validateFormObj()) {\n return;\n }\n this.batchSave();\n };\n BatchEdit.prototype.validateFormObj = function () {\n return this.parent.editModule.formObj && !this.parent.editModule.formObj.validate();\n };\n BatchEdit.prototype.batchSave = function () {\n var gObj = this.parent;\n var deletedRecords = 'deletedRecords';\n this.saveCell();\n if (gObj.isEdit || this.editNextValCell() || gObj.isEdit) {\n return;\n }\n var changes = this.getBatchChanges();\n if (this.parent.selectionSettings.type === 'Multiple' && changes[deletedRecords].length) {\n changes[deletedRecords] = changes[deletedRecords].concat(this.parent.getSelectedRecords());\n }\n var original = {\n changedRecords: this.parent.getRowsObject()\n .filter(function (row) { return row.isDirty && ['add', 'delete'].indexOf(row.edit) === -1; })\n .map(function (row) { return row.data; })\n };\n var args = { batchChanges: changes, cancel: false };\n gObj.trigger(events.beforeBatchSave, args);\n if (args.cancel) {\n return;\n }\n gObj.showSpinner();\n gObj.notify(events.bulkSave, { changes: changes, original: original });\n };\n BatchEdit.prototype.getBatchChanges = function () {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n var rows = this.parent.getRowsObject();\n var mRows = this.parent.getMovableRowsObject();\n var frzCols = this.parent.getFrozenColumns();\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (frzCols) {\n this.mergeBatchChanges(row, mRows[row.index], frzCols);\n }\n if (row.isDirty) {\n switch (row.edit) {\n case 'add':\n changes.addedRecords.push(row.changes);\n break;\n case 'delete':\n changes.deletedRecords.push(row.data);\n break;\n default:\n changes.changedRecords.push(row.changes);\n }\n }\n }\n return changes;\n };\n BatchEdit.prototype.mergeBatchChanges = function (row, mRow, frzCols) {\n if (row.isDirty) {\n if (mRow.isDirty) {\n var i_1 = 0;\n Object.keys(row.changes).forEach(function (key) {\n if (i_1 >= frzCols) {\n row.changes[key] = mRow.changes[key];\n }\n i_1++;\n });\n }\n }\n else if (mRow.isDirty) {\n row.changes = mRow.changes;\n row.isDirty = mRow.isDirty;\n }\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeRowObjectFromUID = function (uid) {\n var rows = this.parent.getRowsObject();\n var i = 0;\n for (var len = rows.length; i < len; i++) {\n if (rows[i].uid === uid) {\n break;\n }\n }\n rows.splice(i, 1);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.addRowObject = function (row) {\n this.parent.getRowsObject().unshift(row);\n };\n BatchEdit.prototype.bulkDelete = function (fieldname, data) {\n var gObj = this.parent;\n var index = data ? this.getIndexFromData(data) : gObj.selectedRowIndex;\n var selectedRows = gObj.getSelectedRows();\n var args = {\n primaryKey: this.parent.getPrimaryKeyFieldNames(),\n rowIndex: index,\n rowData: data ? data : gObj.getSelectedRecords()[0],\n row: data ? gObj.getRows()[index] : selectedRows[0], cancel: false\n };\n if (!args.row) {\n return;\n }\n gObj.trigger(events.beforeBatchDelete, args);\n if (args.cancel) {\n return;\n }\n gObj.clearSelection();\n var uid = args.row.getAttribute('data-uid');\n if (args.row.classList.contains('e-insertedrow')) {\n this.removeRowObjectFromUID(uid);\n remove(args.row);\n }\n else {\n var rowObj = gObj.getRowObjectFromUID(uid);\n rowObj.isDirty = true;\n rowObj.edit = 'delete';\n classList(args.row, ['e-hiddenrow', 'e-updatedtd'], []);\n if (gObj.getFrozenColumns()) {\n classList(data ? gObj.getMovableRows()[index] : selectedRows[1], ['e-hiddenrow', 'e-updatedtd'], []);\n if (gObj.frozenRows && index < gObj.frozenRows) {\n gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody')\n .appendChild(gObj.getMovableRowByIndex(gObj.frozenRows - 1));\n gObj.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody')\n .appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n else if (gObj.frozenRows && index < gObj.frozenRows) {\n gObj.getHeaderContent().querySelector('tbody').appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n if (!this.parent.frozenColumns && selectedRows.length > 1) {\n for (var i = 0; i < selectedRows.length; i++) {\n classList(selectedRows[i], ['e-hiddenrow', 'e-updatedtd'], []);\n var uniqueid = selectedRows[i].getAttribute('data-uid');\n var selectedRow = gObj.getRowObjectFromUID(uniqueid);\n selectedRow.isDirty = true;\n selectedRow.edit = 'delete';\n delete selectedRows[i];\n }\n }\n else {\n delete args.row;\n }\n this.refreshRowIdx();\n gObj.selectRow(index);\n gObj.trigger(events.batchDelete, args);\n gObj.notify(events.batchDelete, { rows: this.parent.getRowsObject() });\n gObj.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.refreshRowIdx = function () {\n var rows = [];\n var mRows = [];\n var nonMovableRows = [];\n var frzCols = this.parent.getFrozenColumns();\n if (this.parent.frozenRows) {\n rows = [].slice.call(this.parent.getHeaderTable().querySelector('tbody').children);\n if (frzCols) {\n mRows = [].slice.call(this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').children);\n for (var i = 0; i < mRows.length; i++) {\n nonMovableRows[i] = this.parent.createElement('tr', { className: 'emptynonmv' });\n }\n }\n }\n if (frzCols) {\n mRows = mRows.concat([].slice.call(this.parent.getContentTable().querySelector('tbody').children));\n nonMovableRows = nonMovableRows.concat([].slice.call(this.parent.element.querySelector('.e-movablecontent').querySelector('tbody').children));\n }\n rows = rows.concat([].slice.call(this.parent.getContentTable().querySelector('tbody').children));\n for (var i = 0, j = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n rows[i].setAttribute('aria-rowindex', j.toString());\n if (frzCols) {\n mRows[i].setAttribute('aria-rowindex', j.toString());\n if (nonMovableRows[i].classList.contains('e-row')) {\n nonMovableRows[i].setAttribute('aria-rowindex', j.toString());\n }\n }\n j++;\n }\n else {\n rows[i].removeAttribute('aria-rowindex');\n if (frzCols) {\n mRows[i].removeAttribute('aria-rowindex');\n }\n }\n }\n };\n BatchEdit.prototype.getIndexFromData = function (data) {\n return inArray(data, this.parent.getCurrentViewRecords());\n };\n BatchEdit.prototype.bulkAddRow = function (data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowAdding) {\n return;\n }\n if (gObj.isEdit) {\n this.saveCell();\n this.parent.notify(events.editNextValCell, {});\n }\n if (gObj.isEdit) {\n return;\n }\n var defaultData = data ? data : this.getDefaultData();\n var args = {\n defaultData: defaultData,\n primaryKey: gObj.getPrimaryKeyFieldNames(),\n cancel: false\n };\n gObj.trigger(events.beforeBatchAdd, args);\n if (args.cancel) {\n return;\n }\n this.isAdded = true;\n gObj.clearSelection();\n var mTr;\n var mTbody;\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var model = new RowModelGenerator(this.parent);\n var modelData = model.generateRows([args.defaultData]);\n var tr = row.render(modelData[0], gObj.getColumns());\n var col;\n var index;\n for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n tr.insertBefore(this.parent.createElement('td', { className: 'e-indentcell' }), tr.firstChild);\n modelData[0].cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n var tbody = gObj.getContentTable().querySelector('tbody');\n tr.classList.add('e-insertedrow');\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n if (gObj.getFrozenColumns()) {\n mTr = this.renderMovable(tr);\n if (gObj.frozenRows) {\n mTbody = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = gObj.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n mTbody.insertBefore(mTr, mTbody.firstChild);\n addClass(mTr.querySelectorAll('.e-rowcell'), ['e-updatedtd']);\n if (this.parent.height === 'auto') {\n this.parent.notify(events.frozenHeight, {});\n }\n }\n if (gObj.frozenRows) {\n tbody = gObj.getHeaderContent().querySelector('tbody');\n }\n tbody.insertBefore(tr, tbody.firstChild);\n addClass(tr.querySelectorAll('.e-rowcell'), ['e-updatedtd']);\n modelData[0].isDirty = true;\n modelData[0].changes = extend({}, {}, modelData[0].data, true);\n modelData[0].edit = 'add';\n this.addRowObject(modelData[0]);\n this.refreshRowIdx();\n this.focus.forgetPrevious();\n gObj.notify(events.batchAdd, { rows: this.parent.getRowsObject() });\n gObj.selectRow(0);\n if (!data) {\n index = this.findNextEditableCell(0, true);\n col = gObj.getColumns()[index];\n this.editCell(0, col.field, true);\n }\n if (this.parent.aggregates.length > 0 && data) {\n this.parent.notify(events.refreshFooterRenderer, {});\n }\n var args1 = {\n defaultData: args.defaultData, row: tr,\n columnObject: col, columnIndex: index, primaryKey: args.primaryKey, cell: tr.cells[index]\n };\n gObj.trigger(events.batchAdd, args1);\n };\n BatchEdit.prototype.renderMovable = function (ele) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < this.parent.frozenColumns; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = this.parent.frozenColumns, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n };\n BatchEdit.prototype.findNextEditableCell = function (columnIndex, isAdd, isValOnly) {\n var cols = this.parent.getColumns();\n var endIndex = cols.length;\n var validation;\n for (var i = columnIndex; i < endIndex; i++) {\n validation = isValOnly ? isNullOrUndefined(cols[i].validationRules) : false;\n if (!isAdd && this.checkNPCell(cols[i])) {\n return i;\n }\n else if (isAdd && !cols[i].template && cols[i].visible && cols[i].allowEditing &&\n !(cols[i].isIdentity && cols[i].isPrimaryKey) && !validation) {\n return i;\n }\n }\n return -1;\n };\n BatchEdit.prototype.checkNPCell = function (col) {\n return !col.template && col.visible && !col.isPrimaryKey && !col.isIdentity && col.allowEditing;\n };\n BatchEdit.prototype.getDefaultData = function () {\n var gObj = this.parent;\n var data = {};\n var dValues = { 'number': 0, 'string': null, 'boolean': false, 'date': null, 'datetime': null };\n for (var _i = 0, _a = gObj.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.field) {\n setValue(col.field, col.defaultValue ? col.defaultValue : dValues[col.type], data);\n }\n }\n return data;\n };\n BatchEdit.prototype.setCellIdx = function (target) {\n var gLen = 0;\n if (this.parent.allowGrouping) {\n gLen = this.parent.groupSettings.columns.length;\n }\n this.cellDetails.cellIndex = target.cellIndex - gLen;\n this.cellDetails.rowIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n };\n BatchEdit.prototype.editCell = function (index, field, isAdd) {\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n var keys = gObj.getPrimaryKeyFieldNames();\n if (gObj.editSettings.allowEditing && col.allowEditing) {\n if (gObj.isEdit && !(this.cellDetails.column.field === field\n && (this.cellDetails.rowIndex === index && this.parent.getDataRows().length - 1 !== index))) {\n this.saveCell();\n if (this.cellDetails.rowIndex === index && this.cellDetails.column.field === field) {\n return;\n }\n }\n if (gObj.isEdit) {\n return;\n }\n var row = void 0;\n var rowData = void 0;\n var mRowData = void 0;\n var colIdx = gObj.getColumnIndexByField(field);\n var frzCols = gObj.getFrozenColumns();\n if (frzCols && colIdx >= frzCols) {\n row = gObj.getMovableDataRows()[index];\n mRowData = this.parent.getRowObjectFromUID(this.parent.getMovableDataRows()[index].getAttribute('data-uid'));\n rowData = mRowData.changes ? extend({}, {}, mRowData.changes, true) : extend({}, {}, this.getDataByIndex(index), true);\n }\n else {\n row = gObj.getDataRows()[index];\n rowData = extend({}, {}, this.getDataByIndex(index), true);\n }\n if ((keys[0] === col.field && !row.classList.contains('e-insertedrow')) || col.columns ||\n (col.isPrimaryKey && col.isIdentity)) {\n this.parent.isLastCellPrimaryKey = true;\n return;\n }\n this.parent.isLastCellPrimaryKey = false;\n var rowObj = gObj.getRowObjectFromUID(row.getAttribute('data-uid'));\n var cells = [].slice.apply(row.cells);\n var args = {\n cell: cells[this.getColIndex(cells, this.getCellIdx(col.uid))], row: row,\n columnName: col.field, columnObject: col, isForeignKey: !isNullOrUndefined(col.foreignKeyValue),\n primaryKey: keys, rowData: rowData,\n validationRules: extend({}, col.validationRules ? col.validationRules : {}),\n value: getObject(col.field, rowData),\n type: !isAdd ? 'edit' : 'add', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n if (!args.cell) {\n return;\n }\n gObj.trigger(events.cellEdit, args);\n if (args.cancel) {\n return;\n }\n this.cellDetails = {\n rowData: rowData, column: col, value: args.value, isForeignKey: args.isForeignKey, rowIndex: index,\n cellIndex: parseInt(args.cell.getAttribute('aria-colindex'), 10),\n foreignKeyData: args.foreignKeyData\n };\n if (args.cell.classList.contains('e-updatedtd')) {\n this.isColored = true;\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n if (!gObj.isCheckBoxSelection || !gObj.isPersistSelection) {\n gObj.selectRow(this.cellDetails.rowIndex, true);\n }\n this.renderer.update(args);\n this.form = gObj.element.querySelector('#' + gObj.element.id + 'EditForm');\n gObj.editModule.applyFormValidation([col]);\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n BatchEdit.prototype.updateCell = function (rowIndex, field, value) {\n var col = this.parent.getColumnByField(field);\n if (col && !col.isPrimaryKey) {\n var td = this.parent.getDataRows()[rowIndex].cells[this.parent.getColumnIndexByField(field)];\n var rowObj = this.parent.getRowObjectFromUID(td.parentElement.getAttribute('data-uid'));\n this.refreshTD(td, col, rowObj, value);\n this.parent.trigger(events.queryCellInfo, {\n cell: td, column: col, data: rowObj.changes\n });\n }\n };\n BatchEdit.prototype.setChanges = function (rowObj, field, value) {\n if (!rowObj.changes) {\n rowObj.changes = extend({}, {}, rowObj.data, true);\n }\n if (!isNullOrUndefined(field)) {\n DataUtil.setValue(field, value, rowObj.changes);\n }\n if (rowObj.data[field] !== value) {\n rowObj.isDirty = true;\n }\n };\n BatchEdit.prototype.updateRow = function (index, data) {\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var col = keys_1[_i];\n this.updateCell(index, col, data[col]);\n }\n };\n BatchEdit.prototype.getCellIdx = function (uid) {\n var cIdx = this.parent.getColumnIndexByUid(uid) + this.parent.groupSettings.columns.length;\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n return cIdx;\n };\n BatchEdit.prototype.refreshTD = function (td, column, rowObj, value) {\n var cell = new CellRenderer(this.parent, this.serviceLocator);\n var rowcell;\n this.setChanges(rowObj, column.field, value);\n var frzCols = this.parent.getFrozenColumns();\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n if (frzCols && this.getCellIdx(column.uid) >= frzCols && this.parent.getColumns().length === rowObj.cells.length) {\n rowcell = rowObj.cells.slice(frzCols, rowObj.cells.length);\n }\n else {\n rowcell = rowObj.cells;\n }\n cell.refreshTD(td, rowcell[this.getCellIdx(column.uid) - (this.getCellIdx(column.uid) >= frzCols ? frzCols : 0)], rowObj.changes, { 'index': this.getCellIdx(column.uid) });\n td.classList.add('e-updatedtd');\n this.parent.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.getColIndex = function (cells, index) {\n var cIdx = 0;\n if (this.parent.allowGrouping && this.parent.groupSettings.columns) {\n cIdx = this.parent.groupSettings.columns.length;\n }\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 10);\n if (colIndex === index - cIdx) {\n return m;\n }\n }\n return -1;\n };\n BatchEdit.prototype.editNextValCell = function () {\n var gObj = this.parent;\n if (this.isAdded && !gObj.isEdit) {\n for (var i = this.cellDetails.cellIndex; i < gObj.getColumns().length; i++) {\n if (gObj.isEdit) {\n return;\n }\n var index = this.findNextEditableCell(this.cellDetails.cellIndex + 1, true, true);\n var col = gObj.getColumns()[index];\n if (col) {\n this.editCell(0, col.field, true);\n this.saveCell();\n }\n }\n if (!gObj.isEdit) {\n this.isAdded = false;\n }\n }\n };\n BatchEdit.prototype.saveCell = function (isForceSave) {\n var gObj = this.parent;\n if (!isForceSave && (!gObj.isEdit || this.validateFormObj())) {\n return;\n }\n var tr = parentsUntil(this.form, 'e-row');\n var column = this.cellDetails.column;\n var editedData = gObj.editModule.getCurrentEditedData(this.form, {});\n var cloneEditedData = extend({}, editedData);\n editedData = extend({}, editedData, this.cellDetails.rowData);\n var value = getObject(column.field, cloneEditedData);\n if (!isNullOrUndefined(column.field)) {\n setValue(column.field, value, editedData);\n }\n var args = {\n columnName: column.field,\n value: getObject(column.field, editedData),\n rowData: this.cellDetails.rowData,\n previousValue: this.cellDetails.value,\n columnObject: column,\n cell: this.form.parentElement,\n isForeignKey: this.cellDetails.isForeignKey, cancel: false\n };\n if (!isForceSave) {\n gObj.trigger(events.cellSave, args);\n }\n if (args.cancel) {\n return;\n }\n gObj.editModule.destroyForm();\n gObj.isEdit = false;\n gObj.editModule.destroyWidgets([column]);\n this.parent.notify(events.tooltipDestroy, {});\n this.refreshTD(args.cell, column, gObj.getRowObjectFromUID(tr.getAttribute('data-uid')), args.value);\n removeClass([tr], ['e-editedrow', 'e-batchrow']);\n removeClass([args.cell], ['e-editedbatchcell', 'e-boolcell']);\n if (!isNullOrUndefined(args.value) && args.value.toString() ===\n (!isNullOrUndefined(this.cellDetails.value) ? this.cellDetails.value : '').toString() && !this.isColored\n || (isNullOrUndefined(args.value) && isNullOrUndefined(this.cellDetails.value) &&\n !args.cell.parentElement.classList.contains('e-insertedrow'))) {\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.trigger(events.cellSaved, args);\n gObj.notify(events.toolbarRefresh, {});\n this.isColored = false;\n if (this.parent.aggregates.length > 0) {\n this.parent.notify(events.refreshFooterRenderer, {});\n if (this.parent.groupSettings.columns.length > 0 && !this.isAddRow(this.cellDetails.rowIndex)) {\n this.parent.notify(events.groupAggregates, {});\n }\n }\n };\n BatchEdit.prototype.getDataByIndex = function (index) {\n var row = this.parent.getRowObjectFromUID(this.parent.getDataRows()[index].getAttribute('data-uid'));\n return row.changes ? row.changes : row.data;\n };\n BatchEdit.prototype.keyDownHandler = function (e) {\n if (e.action === 'tab' && this.parent.isEdit) {\n var rowcell = parentsUntil(e.target, 'e-rowcell');\n if (rowcell) {\n var cell = rowcell.querySelector('.e-field');\n if (cell) {\n var visibleColumns = this.parent.getVisibleColumns();\n if (visibleColumns[visibleColumns.length - 1].field === cell.getAttribute('name')) {\n this.saveCell();\n }\n }\n }\n }\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.addCancelWhilePaging = function () {\n if (this.validateFormObj()) {\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.isColored = false;\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `DialogEdit` module is used to handle dialog editing actions.\n * @hidden\n */\nvar DialogEdit = /** @class */ (function (_super) {\n __extends(DialogEdit, _super);\n function DialogEdit(parent, serviceLocator, renderer) {\n var _this = \n //constructor\n _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n DialogEdit.prototype.closeEdit = function () {\n //closeEdit\n _super.prototype.closeEdit.call(this);\n };\n DialogEdit.prototype.addRecord = function (data, index) {\n //addRecord\n _super.prototype.addRecord.call(this, data, index);\n };\n DialogEdit.prototype.endEdit = function () {\n //endEdit\n _super.prototype.endEdit.call(this);\n };\n DialogEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n DialogEdit.prototype.deleteRecord = function (fieldname, data) {\n //deleteRecord\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n DialogEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return DialogEdit;\n}(NormalEdit));\nexport { DialogEdit };\n","/**\n * `TemplateEditCell` is used to handle template cell.\n * @hidden\n */\nvar TemplateEditCell = /** @class */ (function () {\n function TemplateEditCell(parent) {\n this.parent = parent;\n }\n TemplateEditCell.prototype.read = function (element, value) {\n return value;\n };\n TemplateEditCell.prototype.write = function () {\n //\n };\n TemplateEditCell.prototype.destroy = function () {\n //\n };\n return TemplateEditCell;\n}());\nexport { TemplateEditCell };\n","import { classList, addClass, removeClass, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { EventHandler, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { Dialog, calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { createCboxWithWrap, toogleCheckbox, parentsUntil } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `ColumnChooser` module is used to show or hide columns dynamically.\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for the Grid ColumnChooser module\n * @hidden\n */\n function ColumnChooser(parent, serviceLocator) {\n this.showColumn = [];\n this.hideColumn = [];\n this.isDlgOpen = false;\n this.dlghide = false;\n this.initialOpenDlg = true;\n this.stateChangeColumns = [];\n this.isInitialOpen = false;\n this.isCustomizeOpenCC = false;\n this.searchOperator = 'startswith';\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n this.cBoxTrue = createCheckBox(this.parent.createElement, true, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(this.parent.createElement, true, { checked: false, label: ' ' });\n this.cBoxTrue.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', attrs: { 'type': 'checkbox' }\n }), this.cBoxFalse.firstChild);\n this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n if (this.parent.enableRtl) {\n addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n }\n }\n ColumnChooser.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.removeEventListener();\n this.unWireEvents();\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.element && !this.dlgObj.isDestroyed) {\n this.dlgObj.destroy();\n }\n };\n ColumnChooser.prototype.rtlUpdate = function () {\n if (this.parent.enableRtl) {\n addClass(this.innerDiv.querySelectorAll('.e-checkbox-wrapper'), ['e-rtl']);\n }\n else {\n removeClass(this.innerDiv.querySelectorAll('.e-checkbox-wrapper'), ['e-rtl']);\n }\n };\n /**\n * @hidden\n */\n ColumnChooser.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.uiUpdate, this.enableAfterRenderEle, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.addEventListener(events.dataBound, this.hideDialog.bind(this));\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.rtlUpdated, this.rtlUpdate, this);\n };\n /**\n * @hidden\n */\n ColumnChooser.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.uiUpdate, this.enableAfterRenderEle);\n this.parent.off(events.rtlUpdated, this.rtlUpdate);\n };\n ColumnChooser.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderDlgContent();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n };\n ColumnChooser.prototype.clickHandler = function (e) {\n var targetElement = e.target;\n if (!this.isCustomizeOpenCC) {\n if (!isNullOrUndefined(closest(targetElement, '.e-cc')) || !isNullOrUndefined(closest(targetElement, '.e-cc-toolbar'))) {\n if (targetElement.classList.contains('e-columnchooser-btn') || targetElement.classList.contains('e-cc-toolbar')) {\n if ((this.initialOpenDlg && this.dlgObj.visible) || !this.isDlgOpen) {\n this.isDlgOpen = true;\n return;\n }\n }\n else if (targetElement.classList.contains('e-cc-cancel')) {\n targetElement.parentElement.querySelector('.e-ccsearch').value = '';\n this.columnChooserSearch('');\n this.removeCancelIcon();\n this.refreshCheckboxButton();\n }\n }\n else {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible && !targetElement.classList.contains('e-toolbar-items')) {\n this.dlgObj.hide();\n this.clearActions();\n this.refreshCheckboxState();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.targetdlg = e.target;\n }\n }\n if (this.isCustomizeOpenCC && e.target.classList.contains('e-cc-cancel')) {\n this.refreshCheckboxState();\n }\n this.rtlUpdate();\n };\n ColumnChooser.prototype.hideDialog = function () {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible) {\n this.dlgObj.hide();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n };\n /**\n * To render columnChooser when showColumnChooser enabled.\n * @return {void}\n * @hidden\n */\n ColumnChooser.prototype.renderColumnChooser = function (x, y, target) {\n if (!this.dlgObj.visible && (this.parent.detailTemplate || this.parent.childGrid)) {\n this.hideOpenedDialog();\n }\n if (!this.dlgObj.visible) {\n var pos = { X: null, Y: null };\n var args1 = {\n requestType: 'beforeOpenColumnChooser', element: this.parent.element,\n columns: this.getColumns(), cancel: false, searchOperator: this.searchOperator\n };\n this.parent.trigger(events.beforeOpenColumnChooser, args1);\n if (args1.cancel) {\n return;\n }\n this.searchOperator = args1.searchOperator;\n if (target) {\n this.targetdlg = target;\n }\n this.refreshCheckboxState();\n this.dlgObj.dataBind();\n this.dlgObj.element.style.maxHeight = '430px';\n var elementVisible = this.dlgObj.element.style.display;\n this.dlgObj.element.style.display = 'block';\n var newpos = calculateRelativeBasedPosition(closest(target, '.e-toolbar-item'), this.dlgObj.element);\n this.dlgObj.element.style.display = elementVisible;\n this.dlgObj.element.style.top = newpos.top + closest(target, '.e-cc-toolbar').getBoundingClientRect().height + 'px';\n var dlgWidth = 250;\n if (!isNullOrUndefined(closest(target, '.e-bigger'))) {\n this.dlgObj.width = 258;\n }\n if (Browser.isDevice) {\n this.dlgObj.target = document.body;\n this.dlgObj.position = { X: 'center', Y: 'center' };\n this.dlgObj.refreshPosition();\n this.dlgObj.open = this.mOpenDlg.bind(this);\n }\n else {\n if (this.parent.enableRtl) {\n this.dlgObj.element.style.left = target.offsetLeft + 'px';\n }\n else {\n this.dlgObj.element.style.left = ((newpos.left - dlgWidth) + closest(target, '.e-cc-toolbar').clientWidth) + 2 + 'px';\n }\n }\n this.removeCancelIcon();\n this.dlgObj.show();\n }\n else {\n // this.unWireEvents();\n this.hideDialog();\n this.addcancelIcon();\n }\n this.rtlUpdate();\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @return {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n this.isCustomizeOpenCC = true;\n if (this.dlgObj.visible) {\n this.hideDialog();\n return;\n }\n if (!this.isInitialOpen) {\n this.dlgObj.content = this.renderChooserList();\n }\n else {\n this.refreshCheckboxState();\n }\n this.dlgObj.dataBind();\n this.dlgObj.position = { X: 'center', Y: 'center' };\n if (isNullOrUndefined(X)) {\n this.dlgObj.position = { X: 'center', Y: 'center' };\n this.dlgObj.refreshPosition();\n }\n else {\n this.dlgObj.element.style.top = '';\n this.dlgObj.element.style.left = '';\n this.dlgObj.element.style.top = Y + 'px';\n this.dlgObj.element.style.left = X + 'px';\n }\n this.dlgObj.beforeOpen = this.customDialogOpen.bind(this);\n this.dlgObj.show();\n this.isInitialOpen = true;\n this.dlgObj.beforeClose = this.customDialogClose.bind(this);\n };\n ColumnChooser.prototype.enableAfterRenderEle = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n ColumnChooser.prototype.customDialogOpen = function () {\n var searchElement = this.dlgObj.content.querySelector('input.e-ccsearch');\n EventHandler.add(searchElement, 'keyup', this.columnChooserManualSearch, this);\n };\n ColumnChooser.prototype.customDialogClose = function () {\n var searchElement = this.dlgObj.content.querySelector('input.e-ccsearch');\n EventHandler.remove(searchElement, 'keyup', this.columnChooserManualSearch);\n };\n ColumnChooser.prototype.getColumns = function () {\n var columns = this.parent.getColumns().filter(function (column) { return (column.type !== 'checkbox'\n && column.showInColumnChooser === true) || (column.type === 'checkbox' && column.field !== undefined); });\n return columns;\n };\n ColumnChooser.prototype.renderDlgContent = function () {\n var y;\n this.dlgDiv = this.parent.createElement('div', { className: 'e-ccdlg e-cc', id: this.parent.element.id + '_ccdlg' });\n this.parent.element.appendChild(this.dlgDiv);\n var xpos = this.parent.element.getBoundingClientRect().width - 250;\n var dialoPos = this.parent.enableRtl ? 'left' : 'right';\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n if (!isNullOrUndefined(tarElement)) {\n y = tarElement.getBoundingClientRect().top;\n }\n var pos = { X: null, Y: null };\n this.dlgObj = new Dialog({\n header: this.l10n.getConstant('ChooseColumns'),\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n target: document.getElementById(this.parent.element.id),\n buttons: [{\n click: this.confirmDlgBtnClick.bind(this),\n buttonModel: {\n content: this.l10n.getConstant('OKButton'), isPrimary: true,\n cssClass: 'e-cc e-cc_okbtn',\n }\n },\n {\n click: this.clearActions.bind(this),\n buttonModel: { cssClass: 'e-flat e-cc e-cc-cnbtn', content: this.l10n.getConstant('CancelButton') }\n }],\n content: this.renderChooserList(),\n width: 250,\n cssClass: 'e-cc',\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n this.wireEvents();\n };\n ColumnChooser.prototype.renderChooserList = function () {\n this.mainDiv = this.parent.createElement('div', { className: 'e-main-div e-cc' });\n var searchDiv = this.parent.createElement('div', { className: 'e-cc-searchdiv e-cc e-input-group' });\n var ccsearchele = this.parent.createElement('input', {\n className: 'e-ccsearch e-cc e-input',\n attrs: { placeholder: this.l10n.getConstant('Search') }\n });\n var ccsearchicon = this.parent.createElement('span', { className: 'e-ccsearch-icon e-icons e-cc e-input-group-icon',\n attrs: { title: this.l10n.getConstant('Search') } });\n var conDiv = this.parent.createElement('div', { className: 'e-cc-contentdiv' });\n this.innerDiv = this.parent.createElement('div', { className: 'e-innerdiv e-cc' });\n searchDiv.appendChild(ccsearchele);\n searchDiv.appendChild(ccsearchicon);\n this.searchBoxObj = new SearchBox(ccsearchele);\n var innerDivContent = this.refreshCheckboxList(this.parent.getColumns());\n this.innerDiv.appendChild(innerDivContent);\n conDiv.appendChild(this.innerDiv);\n this.mainDiv.appendChild(searchDiv);\n this.mainDiv.appendChild(conDiv);\n return this.mainDiv;\n };\n ColumnChooser.prototype.confirmDlgBtnClick = function (args) {\n this.stateChangeColumns = [];\n if (!isNullOrUndefined(args)) {\n if (this.hideColumn.length) {\n this.columnStateChange(this.hideColumn, false);\n }\n if (this.showColumn.length) {\n this.columnStateChange(this.showColumn, true);\n }\n var params = {\n requestType: 'columnstate', element: this.parent.element,\n columns: this.stateChangeColumns, dialogInstance: this.dlgObj\n };\n this.parent.trigger(events.actionComplete, params);\n this.getShowHideService.setVisible(this.stateChangeColumns);\n this.clearActions();\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n }\n };\n ColumnChooser.prototype.columnStateChange = function (stateColumns, state) {\n for (var index = 0; index < stateColumns.length; index++) {\n var colUid = stateColumns[index];\n var currentCol = this.parent.getColumnByUid(colUid);\n currentCol.visible = state;\n this.stateChangeColumns.push(currentCol);\n }\n };\n ColumnChooser.prototype.clearActions = function () {\n this.hideColumn = [];\n this.showColumn = [];\n // this.unWireEvents();\n this.hideDialog();\n this.addcancelIcon();\n };\n ColumnChooser.prototype.checkstatecolumn = function (isChecked, coluid) {\n if (isChecked) {\n if (this.hideColumn.indexOf(coluid) !== -1) {\n this.hideColumn.splice(this.hideColumn.indexOf(coluid), 1);\n }\n if (this.showColumn.indexOf(coluid) === -1) {\n this.showColumn.push(coluid);\n }\n }\n else {\n if (this.showColumn.indexOf(coluid) !== -1) {\n this.showColumn.splice(this.showColumn.indexOf(coluid), 1);\n }\n if (this.hideColumn.indexOf(coluid) === -1) {\n this.hideColumn.push(coluid);\n }\n }\n };\n ColumnChooser.prototype.columnChooserSearch = function (searchVal) {\n var clearSearch = false;\n var fltrCol;\n var okButton;\n var buttonEle = this.dlgDiv.querySelector('.e-footer-content');\n if (buttonEle) {\n okButton = buttonEle.querySelector('.e-btn').ej2_instances[0];\n }\n if (searchVal === '') {\n this.removeCancelIcon();\n fltrCol = this.getColumns();\n clearSearch = true;\n }\n else {\n fltrCol = new DataManager(this.getColumns()).executeLocal(new Query()\n .where('headerText', this.searchOperator, searchVal, true));\n }\n if (fltrCol.length) {\n this.innerDiv.innerHTML = ' ';\n this.innerDiv.classList.remove('e-ccnmdiv');\n this.innerDiv.appendChild(this.refreshCheckboxList(fltrCol, searchVal));\n if (!clearSearch) {\n this.addcancelIcon();\n this.refreshCheckboxButton();\n }\n else {\n if (okButton) {\n okButton.disabled = false;\n }\n }\n }\n else {\n var nMatchele = this.parent.createElement('span', { className: 'e-cc e-nmatch' });\n nMatchele.innerHTML = this.l10n.getConstant('Matchs');\n this.innerDiv.innerHTML = ' ';\n this.innerDiv.appendChild(nMatchele);\n this.innerDiv.classList.add('e-ccnmdiv');\n if (okButton) {\n okButton.disabled = true;\n }\n }\n this.flag = true;\n this.stopTimer();\n };\n ColumnChooser.prototype.wireEvents = function () {\n EventHandler.add(this.dlgObj.element, 'click', this.checkBoxClickHandler, this);\n EventHandler.add(this.searchBoxObj.searchBox, 'keyup', this.columnChooserManualSearch, this);\n this.searchBoxObj.wireEvent();\n };\n ColumnChooser.prototype.unWireEvents = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.dlgObj.element) {\n EventHandler.remove(this.dlgObj.element, 'click', this.checkBoxClickHandler);\n }\n EventHandler.remove(this.searchBoxObj.searchBox, 'keyup', this.columnChooserManualSearch);\n this.searchBoxObj.unWireEvent();\n };\n ColumnChooser.prototype.checkBoxClickHandler = function (e) {\n var checkstate;\n var elem = parentsUntil(e.target, 'e-checkbox-wrapper');\n if (elem) {\n toogleCheckbox(elem.parentElement);\n elem.querySelector('.e-chk-hidden').focus();\n if (elem.querySelector('.e-check')) {\n checkstate = true;\n }\n else if (elem.querySelector('.e-uncheck')) {\n checkstate = false;\n }\n else {\n return;\n }\n var columnUid = parentsUntil(elem, 'e-ccheck').getAttribute('uid');\n this.checkstatecolumn(checkstate, columnUid);\n this.refreshCheckboxButton();\n }\n };\n ColumnChooser.prototype.refreshCheckboxButton = function () {\n var searchValue = this.dlgObj.element.querySelector('.e-cc.e-input').value;\n var selected = this.innerDiv.querySelectorAll('.e-check').length;\n var btn = this.dlgDiv.querySelector('.e-footer-content').querySelector('.e-btn').ej2_instances[0];\n btn.disabled = false;\n var srchShowCols = [];\n var searchData = this.parent.element.querySelectorAll('.e-cc-chbox');\n for (var i = 0, itemsLen = searchData.length; i < itemsLen; i++) {\n var element = searchData[i];\n var columnUID = parentsUntil(element, 'e-ccheck').getAttribute('uid');\n srchShowCols.push(columnUID);\n }\n var hideCols = this.showColumn.filter(function (column) { return srchShowCols.indexOf(column) !== -1; });\n if (selected === 0 && hideCols.length === 0) {\n btn.disabled = true;\n }\n btn.dataBind();\n };\n ColumnChooser.prototype.refreshCheckboxList = function (gdCol, searchVal) {\n this.ulElement = this.parent.createElement('ul', { className: 'e-ccul-ele e-cc' });\n for (var i = 0; i < gdCol.length; i++) {\n var columns = gdCol[i];\n this.renderCheckbox(columns);\n }\n return this.ulElement;\n };\n ColumnChooser.prototype.refreshCheckboxState = function () {\n this.dlgObj.element.querySelector('.e-cc.e-input').value = '';\n this.columnChooserSearch('');\n var gridObject = this.parent;\n var currentCheckBoxColls = this.dlgObj.element.querySelectorAll('.e-cc-chbox');\n for (var i = 0, itemLen = currentCheckBoxColls.length; i < itemLen; i++) {\n var element = currentCheckBoxColls[i];\n var columnUID = void 0;\n if (this.parent.childGrid || this.parent.detailTemplate) {\n columnUID = parentsUntil(this.dlgObj.element.querySelectorAll('.e-cc-chbox')[i], 'e-ccheck').getAttribute('uid');\n }\n else {\n columnUID = parentsUntil(element, 'e-ccheck').getAttribute('uid');\n }\n var column = gridObject.getColumnByUid(columnUID);\n if (column.visible) {\n element.checked = true;\n this.checkState(element.parentElement.querySelector('.e-icons'), true);\n }\n else {\n element.checked = false;\n this.checkState(element.parentElement.querySelector('.e-icons'), false);\n }\n }\n };\n ColumnChooser.prototype.checkState = function (element, state) {\n state ? classList(element, ['e-check'], ['e-uncheck']) : classList(element, ['e-uncheck'], ['e-check']);\n };\n ColumnChooser.prototype.createCheckBox = function (label, checked, uid) {\n var cbox = checked ? this.cBoxTrue.cloneNode(true) : this.cBoxFalse.cloneNode(true);\n cbox.querySelector('.e-label').innerHTML = label;\n return createCboxWithWrap(uid, cbox, 'e-ccheck');\n };\n ColumnChooser.prototype.renderCheckbox = function (column) {\n var cclist;\n var hideColState;\n var showColState;\n var checkBoxObj;\n if (column.showInColumnChooser) {\n cclist = this.parent.createElement('li', { className: 'e-cclist e-cc', styles: 'list-style:None', id: 'e-ccli_' + column.uid });\n hideColState = this.hideColumn.indexOf(column.uid) === -1 ? false : true;\n showColState = this.showColumn.indexOf(column.uid) === -1 ? false : true;\n var cccheckboxlist = this.createCheckBox(column.headerText, (column.visible && !hideColState) || showColState, column.uid);\n cclist.appendChild(cccheckboxlist);\n this.ulElement.appendChild(cclist);\n }\n };\n ColumnChooser.prototype.columnChooserManualSearch = function (e) {\n this.addcancelIcon();\n this.searchValue = e.target.value;\n var proxy = this;\n this.stopTimer();\n this.startTimer(e);\n };\n ColumnChooser.prototype.startTimer = function (e) {\n var proxy = this;\n var interval = !proxy.flag && e.keyCode !== 13 ? 500 : 0;\n this.timer = window.setInterval(function () { proxy.columnChooserSearch(proxy.searchValue); }, interval);\n };\n ColumnChooser.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n ColumnChooser.prototype.addcancelIcon = function () {\n this.dlgDiv.querySelector('.e-cc.e-ccsearch-icon').classList.add('e-cc-cancel');\n };\n ColumnChooser.prototype.removeCancelIcon = function () {\n this.dlgDiv.querySelector('.e-cc.e-ccsearch-icon').classList.remove('e-cc-cancel');\n };\n ColumnChooser.prototype.mOpenDlg = function () {\n if (Browser.isDevice) {\n this.dlgObj.element.querySelector('.e-cc-searchdiv').classList.remove('e-input-focus');\n this.dlgObj.element.querySelectorAll('.e-cc-chbox')[0].focus();\n }\n };\n // internally use\n ColumnChooser.prototype.getModuleName = function () {\n return 'columnChooser';\n };\n ColumnChooser.prototype.hideOpenedDialog = function () {\n var openCC = [].slice.call(document.getElementsByClassName('e-ccdlg')).filter(function (dlgEle) {\n return dlgEle.classList.contains('e-popup-open');\n });\n for (var i = 0, dlgLen = openCC.length; i < dlgLen; i++) {\n if (openCC[i].classList.contains('e-dialog') || this.parent.element.id + '_ccdlg' !== openCC[i].id) {\n openCC[i].ej2_instances[0].hide();\n }\n }\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Row } from './../models/row';\nimport { CellType } from '../base/enum';\nimport { isNullOrUndefined, Internationalization, getValue } from '@syncfusion/ej2-base';\nimport { Cell } from '../models/cell';\nimport { ValueFormatter } from './../services/value-formatter';\nimport { Query } from '@syncfusion/ej2-data';\nimport { getForeignData } from '../base/util';\n/**\n * @hidden\n * `ExportHelper` for `PdfExport` & `ExcelExport`\n */\nvar ExportHelper = /** @class */ (function () {\n function ExportHelper(parent) {\n this.hideColumnInclude = false;\n this.foreignKeyData = {};\n this.parent = parent;\n }\n ExportHelper.getQuery = function (parent, data) {\n return data.isRemote() ?\n data.generateQuery(true).requiresCount().take(parent.pageSettings.totalRecordsCount) :\n data.generateQuery(true).requiresCount();\n };\n ExportHelper.prototype.getFData = function (value, column) {\n var foreignKeyData = getForeignData(column, {}, value, this.foreignKeyData[column.field])[0];\n return foreignKeyData;\n };\n ExportHelper.prototype.getColumnData = function (gridObj) {\n var _this = this;\n var columnPromise = [];\n var promise;\n var fColumns = gridObj.getForeignKeyColumns();\n if (fColumns.length) {\n fColumns.forEach(function (col) {\n columnPromise.push(col.dataSource.executeQuery(new Query()));\n });\n promise = Promise.all(columnPromise).then(function (e) {\n fColumns.forEach(function (col, index) {\n _this.foreignKeyData[col.field] = e[index].result;\n });\n // tslint:disable-next-line:no-any\n });\n }\n return promise;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.getHeaders = function (column, isHideColumnInclude) {\n if (isHideColumnInclude) {\n this.hideColumnInclude = true;\n }\n else {\n this.hideColumnInclude = false;\n }\n var cols = column;\n this.colDepth = this.measureColumnDepth(cols);\n var rows = [];\n var actualColumns = [];\n for (var i = 0; i < this.colDepth; i++) {\n rows[i] = new Row({});\n rows[i].cells = [];\n }\n rows = this.processColumns(rows);\n rows = this.processHeaderCells(rows);\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n for (var i = 0; i < row.cells.length; i++) {\n var cell = row.cells[i];\n if (cell.visible === undefined && cell.cellType !== CellType.StackedHeader) {\n row.cells = this.removeCellFromRow(row.cells, i);\n i = i - 1;\n }\n if ((!isHideColumnInclude) && cell.visible !== undefined && (!cell.visible)) {\n row.cells = this.removeCellFromRow(row.cells, i);\n i = i - 1;\n }\n }\n }\n for (var i = 0; i < cols.length; i++) {\n this.generateActualColumns(cols[i], actualColumns);\n }\n return { rows: rows, columns: actualColumns };\n };\n ExportHelper.prototype.getConvertedWidth = function (input) {\n var value = parseFloat(input);\n /* tslint:disable-next-line:max-line-length */\n return (input.indexOf('%') !== -1) ? (this.parent.element.getBoundingClientRect().width * value / 100) : value;\n };\n ExportHelper.prototype.generateActualColumns = function (column, actualColumns) {\n if (column.commands) {\n return;\n }\n if (!column.columns) {\n if (column.visible || this.hideColumnInclude) {\n actualColumns.push(column);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n var colSpan = this.getCellCount(column, 0);\n if (colSpan !== 0) {\n for (var i = 0; i < column.columns.length; i++) {\n /* tslint:disable-next-line:max-line-length */\n this.generateActualColumns(column.columns[i], actualColumns);\n }\n }\n }\n }\n };\n ExportHelper.prototype.removeCellFromRow = function (cells, cellIndex) {\n var resultCells = [];\n for (var i = 0; i < cellIndex; i++) {\n resultCells.push(cells[i]);\n }\n for (var i = (cellIndex + 1); i < cells.length; i++) {\n resultCells.push(cells[i]);\n }\n return resultCells;\n };\n ExportHelper.prototype.processHeaderCells = function (rows) {\n var columns = this.parent.enableColumnVirtualization ? this.parent.getColumns() : this.parent.columns;\n for (var i = 0; i < columns.length; i++) {\n if (!columns[i].commands) {\n rows = this.appendGridCells(columns[i], rows, 0, i === 0, false, i === (columns.length - 1));\n }\n }\n return rows;\n };\n /* tslint:disable */\n ExportHelper.prototype.appendGridCells = function (cols, gridRows, index, isFirstObj, isFirstColumn, isLastColumn) {\n /* tslint:enable */\n var lastCol = isLastColumn ? 'e-lastcell' : '';\n if (!cols.columns) {\n gridRows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstColumn ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n }\n else {\n var colSpan = this.getCellCount(cols, 0);\n if (colSpan) {\n gridRows[index].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols, colSpan: colSpan\n }));\n }\n var isFirstCell = void 0;\n var isIgnoreFirstCell = void 0;\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n isFirstCell = false;\n if (cols.columns[i].visible && !isIgnoreFirstCell) {\n isFirstCell = true;\n isIgnoreFirstCell = true;\n }\n /* tslint:disable-next-line:max-line-length */\n gridRows = this.appendGridCells(cols.columns[i], gridRows, index + 1, isFirstObj, i === 0, i === (len - 1) && isLastColumn);\n }\n }\n return gridRows;\n };\n ExportHelper.prototype.generateCell = function (gridColumn, cellType, rowSpan, className, rowIndex, columnIndex) {\n var option = {\n 'visible': gridColumn.visible,\n 'isDataCell': false,\n 'isTemplate': !isNullOrUndefined(gridColumn.headerTemplate),\n 'rowID': '',\n 'column': gridColumn,\n 'cellType': cellType,\n 'rowSpan': rowSpan,\n 'className': className,\n 'index': rowIndex,\n 'colIndex': columnIndex\n };\n if (!option.rowSpan || option.rowSpan < 2) {\n delete option.rowSpan;\n }\n return new Cell(option);\n };\n ExportHelper.prototype.processColumns = function (rows) {\n //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n var gridObj = this.parent;\n var columnIndexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (gridObj.allowGrouping) {\n for (var j = 0, len_1 = gridObj.groupSettings.columns.length; j < len_1; j++) {\n if (this.parent.enableColumnVirtualization && columnIndexes.indexOf(j) === -1) {\n continue;\n }\n rows[i].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gridObj.detailTemplate || gridObj.childGrid) {\n rows[i].cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n }\n return rows;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.getCellCount = function (column, count) {\n if (column.columns) {\n for (var i = 0; i < column.columns.length; i++) {\n count = this.getCellCount(column.columns[i], count);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n count++;\n }\n }\n return count;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.measureColumnDepth = function (column) {\n var max = 0;\n for (var i = 0; i < column.length; i++) {\n var depth = this.checkDepth(column[i], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.checkDepth = function (col, index) {\n var max = index;\n var indices = [];\n if (col.columns) {\n index++;\n for (var i = 0; i < col.columns.length; i++) {\n indices[i] = this.checkDepth(col.columns[i], index);\n }\n for (var j = 0; j < indices.length; j++) {\n if (max < indices[j]) {\n max = indices[j];\n }\n }\n index = max;\n }\n return index;\n };\n ;\n return ExportHelper;\n}());\nexport { ExportHelper };\n/**\n * @hidden\n * `ExportValueFormatter` for `PdfExport` & `ExcelExport`\n */\nvar ExportValueFormatter = /** @class */ (function () {\n function ExportValueFormatter(culture) {\n this.valueFormatter = new ValueFormatter(culture);\n this.internationalization = new Internationalization(culture);\n }\n /* tslint:disable-next-line:no-any */\n ExportValueFormatter.prototype.returnFormattedValue = function (args, customFormat) {\n if (!isNullOrUndefined(args.value) && args.value) {\n return this.valueFormatter.getFormatFunction(customFormat)(args.value);\n }\n else {\n return '';\n }\n };\n /* tslint:disable-next-line:no-any */\n ExportValueFormatter.prototype.formatCellValue = function (args) {\n if (args.isForeignKey) {\n args.value = getValue(args.column.foreignKeyValue, getForeignData(args.column, {}, args.value)[0]);\n }\n if (args.column.type === 'number' && args.column.format !== undefined && args.column.format !== '') {\n return args.value ? this.internationalization.getNumberFormat({ format: args.column.format })(args.value) : '';\n }\n else if (args.column.type === 'boolean') {\n return args.value ? 'true' : 'false';\n /* tslint:disable-next-line:max-line-length */\n }\n else if ((args.column.type === 'date' || args.column.type === 'datetime' || args.column.type === 'time') && args.column.format !== undefined) {\n if (typeof args.column.format === 'string') {\n var format = void 0;\n if (args.column.type === 'date') {\n format = { type: 'date', skeleton: args.column.format };\n }\n else if (args.column.type === 'time') {\n format = { type: 'time', skeleton: args.column.format };\n }\n else {\n format = { type: 'dateTime', skeleton: args.column.format };\n }\n return this.returnFormattedValue(args, format);\n }\n else {\n if (args.column.format instanceof Object && args.column.format.type === undefined) {\n return (args.value.toString());\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n var customFormat = void 0;\n if (args.column.type === 'date') {\n /* tslint:disable-next-line:max-line-length */\n customFormat = { type: args.column.format.type, format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else if (args.column.type === 'time') {\n customFormat = { type: 'time', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else {\n customFormat = { type: 'dateTime', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n return this.returnFormattedValue(args, customFormat);\n }\n }\n }\n else {\n if ((!isNullOrUndefined(args.column.type) && !isNullOrUndefined(args.value)) || !isNullOrUndefined(args.value)) {\n return (args.value).toString();\n }\n else {\n return '';\n }\n }\n };\n return ExportValueFormatter;\n}());\nexport { ExportValueFormatter };\n","import * as events from '../base/constant';\nimport { Workbook } from '@syncfusion/ej2-excel-export';\nimport { isNullOrUndefined, getEnumValue, compile, extend, getValue } from '@syncfusion/ej2-base';\nimport { Data } from '../actions/data';\nimport { ExportHelper, ExportValueFormatter } from './export-helper';\nimport { SummaryModelGenerator, GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { CellType } from '../base/enum';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * @hidden\n * `ExcelExport` module is used to handle the Excel export action.\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for the Grid Excel Export module.\n * @hidden\n */\n function ExcelExport(parent) {\n /* tslint:disable-next-line:no-any */\n this.book = {};\n /* tslint:disable-next-line:no-any */\n this.workSheet = [];\n /* tslint:disable-next-line:no-any */\n this.rows = [];\n /* tslint:disable-next-line:no-any */\n this.columns = [];\n /* tslint:disable-next-line:no-any */\n this.styles = [];\n this.rowLength = 1;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.isCsvExport = false;\n this.isElementIdChanged = false;\n this.foreignKeyData = {};\n this.parent = parent;\n this.helper = new ExportHelper(parent);\n }\n /**\n * For internal use only - Get the module name.\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n ExcelExport.prototype.init = function (gObj) {\n if (gObj.element !== null && gObj.element.id === '') {\n gObj.element.id = new Date().toISOString();\n this.isElementIdChanged = true;\n }\n this.parent = gObj;\n if (this.parent.isDestroyed) {\n return;\n }\n this.isExporting = undefined;\n this.book = {};\n /* tslint:disable-next-line:no-any */\n this.workSheet = [];\n /* tslint:disable-next-line:no-any */\n this.rows = [];\n /* tslint:disable-next-line:no-any */\n this.columns = [];\n /* tslint:disable-next-line:no-any */\n this.styles = [];\n this.rowLength = 1;\n /* tslint:disable-next-line:no-any */\n this.footer = undefined;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.exportValueFormatter = new ExportValueFormatter(gObj.locale);\n };\n /**\n * Export Grid to Excel file.\n * @param {exportProperties} exportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Defines is multiple Grid's are exported.\n * @param {workbook} workbook - Defined the Workbook if multiple Grid is exported.\n * @param {isCsv} isCsv - true if export to CSV.\n * @return {Promise}\n */\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.Map = function (grid, exportProperties, isMultipleExport, workbook, isCsv, isBlob) {\n var gObj = grid;\n var cancel = 'cancel';\n var isBlb = 'isBlob';\n var csv = 'isCsv';\n var workbk = 'workbook';\n var isMultiEx = 'isMultipleExport';\n var args = {\n requestType: 'beforeExcelExport', gridObject: gObj, cancel: false,\n isMultipleExport: isMultipleExport, workbook: workbook, isCsv: isCsv, isBlob: isBlob\n };\n gObj.trigger(events.beforeExcelExport, args);\n this.data = new Data(gObj);\n this.isExporting = true;\n this.isBlob = args[isBlb];\n if (args[csv]) {\n this.isCsvExport = args[csv];\n }\n else {\n this.isCsvExport = false;\n }\n return this.processRecords(gObj, exportProperties, args[isMultiEx], args[workbk]);\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecords = function (gObj, exportProperties, isMultipleExport, workbook) {\n var _this = this;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) &&\n exportProperties.dataSource instanceof DataManager) {\n /* tslint:disable-next-line:no-any */\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n var dataManager = exportProperties.dataSource.executeQuery(new Query());\n dataManager.then(function (r) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, r);\n resolve(_this.book);\n });\n });\n }\n else {\n /* tslint:disable-next-line:no-any */\n var allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(gObj, this.data)));\n allPromise.push(this.helper.getColumnData(gObj));\n return Promise.all(allPromise).then(function (e) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, e[0]);\n return _this.book;\n }).catch(function (e) {\n _this.parent.trigger(events.actionFailure, e);\n });\n }\n };\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processInnerRecords = function (gObj, exportProperties, isMultipleExport, workbook, r) {\n this.groupedColLength = gObj.groupSettings.columns.length;\n var blankRows = 5;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.multipleExport)) {\n /* tslint:disable-next-line:max-line-length */\n this.expType = (!isNullOrUndefined(exportProperties.multipleExport.type) ? exportProperties.multipleExport.type : 'AppendToSheet');\n if (!isNullOrUndefined(exportProperties.multipleExport.blankRows)) {\n blankRows = exportProperties.multipleExport.blankRows;\n }\n }\n if (isNullOrUndefined(workbook)) {\n this.workSheet = [];\n this.rows = [];\n this.columns = [];\n this.styles = [];\n }\n else if (this.expType === 'NewSheet') {\n this.workSheet = workbook.worksheets;\n this.rows = [];\n this.columns = [];\n this.styles = workbook.styles;\n }\n else {\n this.workSheet = [];\n this.rows = workbook.worksheets[0].rows;\n this.columns = workbook.worksheets[0].columns;\n this.styles = workbook.styles;\n this.rowLength = (this.rows[this.rows.length - 1].index + blankRows);\n this.rowLength++;\n }\n if (!isNullOrUndefined(exportProperties)) {\n if (!isNullOrUndefined(isMultipleExport)) {\n if (!isNullOrUndefined(exportProperties.header) && (isMultipleExport || this.expType === 'NewSheet')) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n if (this.expType === 'AppendToSheet') {\n if (!isMultipleExport) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n else {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n else {\n if (!isNullOrUndefined(exportProperties.header)) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n this.includeHiddenColumn = (!isNullOrUndefined(exportProperties) ? exportProperties.includeHiddenColumn : false);\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n var headerRow = this.helper.getHeaders(gObj.columns, this.includeHiddenColumn);\n var groupIndent = 0;\n /* tslint:disable:no-any */\n if (!isNullOrUndefined((r.result).level)) {\n groupIndent += (r.result).level;\n groupIndent += (r.result).childLevels;\n }\n /* tslint:enable:no-any */\n this.processHeaderContent(gObj, headerRow, exportProperties, groupIndent);\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) && !(exportProperties.dataSource instanceof DataManager)) {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, exportProperties, exportProperties.dataSource);\n }\n else if (!isNullOrUndefined(exportProperties) && exportProperties.exportType === 'CurrentPage') {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, exportProperties, gObj.currentViewData);\n }\n else {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, exportProperties);\n }\n this.isExporting = false;\n gObj.trigger(events.excelExportComplete, this.isBlob ? { promise: this.blobPromise } : {});\n };\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecordContent = function (gObj, returnType, headerRow, isMultipleExport, exportProperties, currentViewRecords) {\n /* tslint:disable-next-line:no-any */\n var column = gObj.columns;\n /* tslint:disable-next-line:no-any */\n var record = undefined;\n if (!isNullOrUndefined(currentViewRecords)) {\n record = currentViewRecords;\n }\n else {\n record = returnType.result;\n }\n if (!isNullOrUndefined(record.level)) {\n this.processGroupedRows(gObj, record, headerRow, record.level);\n }\n else {\n this.processRecordRows(gObj, record, headerRow, 0);\n }\n if (!isNullOrUndefined(returnType.aggregates)) {\n if (!isNullOrUndefined(currentViewRecords)) {\n this.processAggregates(gObj, returnType.result, currentViewRecords);\n }\n else {\n this.processAggregates(gObj, returnType.result);\n }\n }\n //footer template add\n if (!isNullOrUndefined(this.footer)) {\n if ((this.expType === 'AppendToSheet' && !isMultipleExport) || (this.expType === 'NewSheet')) {\n this.processExcelFooter(this.footer);\n }\n }\n /* tslint:disable-next-line:no-any */\n var sheet = {};\n if (this.columns.length > 0) {\n sheet.columns = this.columns;\n }\n sheet.rows = this.rows;\n this.workSheet.push(sheet);\n this.book.worksheets = this.workSheet;\n this.book.styles = this.styles;\n if (!isMultipleExport) {\n if (this.isCsvExport) {\n var book = new Workbook(this.book, 'csv', gObj.locale);\n if (!this.isBlob) {\n if (!isNullOrUndefined(exportProperties) && exportProperties.fileName) {\n book.save(exportProperties.fileName);\n }\n else {\n book.save('Export.csv');\n }\n }\n else {\n this.blobPromise = book.saveAsBlob('text/csv');\n }\n }\n else {\n var book = new Workbook(this.book, 'xlsx', gObj.locale);\n if (!this.isBlob) {\n if (!isNullOrUndefined(exportProperties) && exportProperties.fileName) {\n book.save(exportProperties.fileName);\n }\n else {\n book.save('Export.xlsx');\n }\n }\n else {\n this.blobPromise = book.saveAsBlob('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n }\n }\n if (this.isElementIdChanged) {\n gObj.element.id = '';\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processGroupedRows = function (gObj, dataSource, headerRow, level) {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n /* tslint:disable-next-line:no-any */\n var cells = [];\n var index = 1;\n /* tslint:disable-next-line:no-any */\n var cell = {};\n cell.index = index + level;\n var col = gObj.getColumnByField(item.field);\n /* tslint:disable-next-line:no-any */\n var args = {\n value: item.key,\n column: col,\n style: undefined,\n isForeignKey: col.isForeignColumn(),\n };\n cell.value = this.parent.getColumnByField(item.field).headerText +\n ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ';\n if (item.count > 1) {\n cell.value += item.count + ' items';\n }\n else {\n cell.value += item.count + ' item';\n }\n cell.style = this.getCaptionThemeStyle(this.theme);\n var captionModelGen = new CaptionSummaryModelGenerator(gObj);\n var groupCaptionSummaryRows = captionModelGen.generateRows(item);\n this.fillAggregates(gObj, groupCaptionSummaryRows, dataSource.level + dataSource.childLevels, this.rowLength);\n cells.push(cell);\n if (this.rows[this.rows.length - 1].cells.length > 0) {\n var lIndex = dataSource.level + dataSource.childLevels + groupCaptionSummaryRows[0].cells.length;\n var hIndex = 0;\n for (var _a = 0, _b = this.rows[this.rows.length - 1].cells; _a < _b.length; _a++) {\n var tCell = _b[_a];\n if (tCell.index < lIndex) {\n lIndex = tCell.index;\n }\n if (tCell.index > hIndex) {\n hIndex = tCell.index;\n }\n tCell.style = this.getCaptionThemeStyle(this.theme);\n if (cells[cells.length - 1].index !== tCell.index) {\n cells.push(tCell);\n }\n }\n if ((lIndex - cell.index) > 1) {\n cell.colSpan = lIndex - cell.index;\n }\n while (hIndex < (headerRow.columns.length + level + dataSource.childLevels)) {\n /* tslint:disable-next-line:no-any */\n var sCell = {};\n sCell.index = (hIndex + 1);\n sCell.style = this.getCaptionThemeStyle(this.theme);\n cells.push(sCell);\n hIndex++;\n }\n }\n else {\n var span = 0;\n //Calculation for column span when group caption dont have aggregates\n for (var _c = 0, _d = headerRow.columns; _c < _d.length; _c++) {\n var col_1 = _d[_c];\n if (col_1.visible) {\n span++;\n }\n }\n cell.colSpan = (dataSource.childLevels + span);\n }\n this.rows[this.rows.length - 1].cells = cells;\n this.rowLength++;\n if (this.groupedColLength < 8 && level > 1) {\n var grouping = { outlineLevel: level - 1, isCollapsed: true };\n this.rows[this.rows.length - 1].grouping = grouping;\n }\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processGroupedRows(gObj, item.items, headerRow, item.items.level);\n }\n else {\n this.processRecordRows(gObj, item.items, headerRow, (level));\n this.processAggregates(gObj, item, undefined, (level), true);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecordRows = function (gObj, record, headerRow, level) {\n var rLen = Object.keys(record).length;\n var index = 1;\n /* tslint:disable-next-line:no-any */\n var cells = [];\n for (var r = 0; r < rLen; r++) {\n cells = [];\n index = 1;\n for (var c = 0, len = headerRow.columns.length; c < len; c++) {\n /* tslint:disable-next-line:no-any */\n var value = !isNullOrUndefined(headerRow.columns[c].field) ? getValue(headerRow.columns[c].field, record[r]) : '';\n var column = headerRow.columns[c];\n var foreignKeyData = void 0;\n // tslint:disable-next-line:max-line-length\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = this.helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n if (!isNullOrUndefined(value)) {\n /* tslint:disable-next-line:no-any */\n var excelCellArgs = { data: record[r], column: headerRow.columns[c], foreignKeyData: foreignKeyData };\n var cell = {};\n gObj.trigger(events.excelQueryCellInfo, extend(excelCellArgs, {\n column: headerRow.columns[c], data: record[r],\n value: value, style: undefined, colSpan: 1, cell: cell\n }));\n cell = excelCellArgs.cell;\n cell.index = index + level;\n cell.value = excelCellArgs.value;\n if (excelCellArgs.colSpan > 1) {\n cell.colSpan = excelCellArgs.colSpan;\n }\n if (!isNullOrUndefined(excelCellArgs.style)) {\n var styleIndex = this.getColumnStyle(gObj, index + level);\n cell.style = this.mergeOptions(this.styles[styleIndex], excelCellArgs.style);\n }\n else {\n cell.style = { name: gObj.element.id + 'column' + (index + level) };\n }\n cells.push(cell);\n }\n index++;\n }\n if (this.groupedColLength < 8 && level > 0) {\n var grouping = { outlineLevel: level, isCollapsed: true };\n this.rows.push({ index: this.rowLength++, cells: cells, grouping: grouping });\n }\n else {\n this.rows.push({ index: this.rowLength++, cells: cells });\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processAggregates = function (gObj, rec, currentViewRecords, indent, byGroup) {\n var summaryModel = new SummaryModelGenerator(gObj);\n /* tslint:disable-next-line:no-any */\n var data = undefined;\n if (!isNullOrUndefined(currentViewRecords)) {\n data = currentViewRecords;\n }\n else {\n data = rec;\n }\n if (indent === undefined) {\n indent = 0;\n }\n if (gObj.groupSettings.columns.length > 0 && byGroup) {\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n var groupSummaryRows = groupSummaryModel.generateRows(data, { level: data.level });\n if (groupSummaryRows.length > 0) {\n this.fillAggregates(gObj, groupSummaryRows, indent);\n }\n }\n else {\n indent = gObj.groupSettings.columns.length > 0 && !byGroup ? gObj.groupSettings.columns.length : indent;\n var sRows = summaryModel.generateRows(data, rec.aggregates);\n if (sRows.length > 0 && !byGroup) {\n this.fillAggregates(gObj, sRows, indent);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.fillAggregates = function (gObj, cells, indent, customIndex) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var row = cells_1[_i];\n /* tslint:disable-next-line:no-any */\n var cells_2 = [];\n var index = 0;\n for (var _a = 0, _b = row.cells; _a < _b.length; _a++) {\n var cell = _b[_a];\n /* tslint:disable-next-line:no-any */\n var eCell = {};\n if ((cell.visible || this.includeHiddenColumn)) {\n index++;\n if (cell.isDataCell) {\n eCell.index = index + indent;\n if (!isNullOrUndefined(cell.column.footerTemplate)) {\n eCell.value = this.getAggreateValue(CellType.Summary, cell.column.footerTemplate, cell, row);\n }\n else if (!isNullOrUndefined(cell.column.groupFooterTemplate)) {\n eCell.value = this.getAggreateValue(CellType.GroupSummary, cell.column.groupFooterTemplate, cell, row);\n }\n else if (!isNullOrUndefined(cell.column.groupCaptionTemplate)) {\n eCell.value = this.getAggreateValue(CellType.CaptionSummary, cell.column.groupCaptionTemplate, cell, row);\n }\n else {\n for (var _c = 0, _d = Object.keys(row.data[cell.column.field]); _c < _d.length; _c++) {\n var key = _d[_c];\n if (key === cell.column.type) {\n if (!isNullOrUndefined(row.data[cell.column.field].Sum)) {\n eCell.value = row.data[cell.column.field].Sum;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Average)) {\n eCell.value = row.data[cell.column.field].Average;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Max)) {\n eCell.value = row.data[cell.column.field].Max;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Min)) {\n eCell.value = row.data[cell.column.field].Min;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Count)) {\n eCell.value = row.data[cell.column.field].Count;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].TrueCount)) {\n eCell.value = row.data[cell.column.field].TrueCount;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].FalseCount)) {\n eCell.value = row.data[cell.column.field].FalseCount;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Custom)) {\n eCell.value = row.data[cell.column.field].Custom;\n }\n }\n }\n }\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n if (cell.attributes.style.textAlign) {\n eCell.style.hAlign = cell.attributes.style.textAlign;\n }\n cells_2.push(eCell);\n }\n else {\n if (customIndex === undefined) {\n eCell.index = index + indent;\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n cells_2.push(eCell);\n }\n }\n }\n }\n if (!isNullOrUndefined(customIndex)) {\n this.rows.push({ index: customIndex, cells: cells_2 });\n }\n else {\n var row_1 = {};\n if (this.groupedColLength < 8 && this.groupedColLength > 0) {\n var dummyOutlineLevel = 'outlineLevel';\n var dummyGrouping = 'grouping';\n var level = this.rows[this.rows.length - 1][dummyGrouping][dummyOutlineLevel];\n var grouping = { outlineLevel: level, isCollapsed: true };\n row_1 = { index: this.rowLength++, cells: cells_2, grouping: grouping };\n }\n else {\n row_1 = { index: this.rowLength++, cells: cells_2 };\n }\n this.rows.push(row_1);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getAggreateValue = function (cellType, template, cell, row) {\n var templateFn = {};\n templateFn[getEnumValue(CellType, cell.cellType)] = compile(template);\n /* tslint:disable-next-line:max-line-length */\n var txt = (templateFn[getEnumValue(CellType, cell.cellType)](row.data[cell.column.field ? cell.column.field : cell.column.columnName]));\n return txt[0].wholeText;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.mergeOptions = function (JSON1, JSON2) {\n /* tslint:disable-next-line:no-any */\n var result = {};\n /* tslint:disable-next-line:no-any */\n var attrname = Object.keys(JSON1);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[index] !== 'name') {\n result[attrname[index]] = JSON1[attrname[index]];\n }\n }\n attrname = Object.keys(JSON2);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[index] !== 'name') {\n result[attrname[index]] = JSON2[attrname[index]];\n }\n }\n return result;\n };\n ExcelExport.prototype.getColumnStyle = function (gObj, columnIndex) {\n var index = 0;\n for (var _i = 0, _a = this.styles; _i < _a.length; _i++) {\n var style = _a[_i];\n if (style.name === gObj.element.id + 'column' + columnIndex) {\n return index;\n }\n index++;\n }\n return undefined;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processHeaderContent = function (gObj, headerRow, exportProperties, indent) {\n /* tslint:disable-next-line:no-any */\n var column = gObj.columns;\n var rowIndex = 1;\n /* tslint:disable-next-line:no-any */\n var returnValue = headerRow;\n /* tslint:enable:no-any */\n var gridRows = returnValue.rows;\n // Column collection with respect to the records in the grid\n var gridColumns = returnValue.columns;\n /* tslint:disable-next-line:no-any */\n var spannedCells = [];\n if (indent > 0) {\n var index = 0;\n while (index !== indent) {\n this.columns.push({ index: index + 1, width: 30 });\n index++;\n }\n }\n for (var row = 0; row < gridRows.length; row++) {\n var currentCellIndex = 1 + indent;\n /* tslint:disable-next-line:no-any */\n var cells = [];\n for (var column_1 = 0; column_1 < gridRows[row].cells.length; column_1++) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n /* tslint:disable-next-line:no-any */\n var cell = {};\n /* tslint:disable-next-line:no-any */\n var gridCell = gridRows[row].cells[column_1];\n /* tslint:disable-next-line:no-any */\n var result = { contains: true, index: 1 };\n while (result.contains) {\n result = this.getIndex(spannedCells, rowIndex, currentCellIndex);\n currentCellIndex = result.index;\n if (!result.contains) {\n cell.index = result.index;\n break;\n }\n }\n if (!isNullOrUndefined(gridCell.rowSpan) && gridCell.rowSpan !== 1) {\n cell.rowSpan = gridCell.rowSpan;\n for (var i = rowIndex; i < gridCell.rowSpan + rowIndex; i++) {\n /* tslint:disable-next-line:no-any */\n var spannedCell = { rowIndex: 0, columnIndex: 0 };\n spannedCell.rowIndex = i;\n spannedCell.columnIndex = currentCellIndex;\n spannedCells.push(spannedCell);\n }\n }\n if (!isNullOrUndefined(gridCell.colSpan) && gridCell.colSpan !== 1) {\n cell.colSpan = gridCell.colSpan;\n currentCellIndex = currentCellIndex + cell.colSpan - 1;\n }\n cell.value = gridCell.column.headerText;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.theme)) {\n this.theme = exportProperties.theme;\n }\n style = this.getHeaderThemeStyle(this.theme);\n if (!isNullOrUndefined(gridCell.column.textAlign)) {\n style.hAlign = gridCell.column.textAlign;\n }\n if (!isNullOrUndefined(gridCell.column.headerTextAlign)) {\n style.hAlign = gridCell.column.headerTextAlign;\n }\n /* tslint:disable-next-line:no-any */\n var excelHeaderCellArgs = { cell: cell, gridCell: gridCell, setStyle: style };\n gObj.trigger(events.excelHeaderQueryCellInfo, extend(excelHeaderCellArgs, {\n cell: cell, setStyle: style\n }));\n cell.style = style;\n cells.push(cell);\n currentCellIndex++;\n }\n this.rows.push({ index: this.rowLength++, cells: cells });\n }\n for (var col = 0; col < gridColumns.length; col++) {\n this.parseStyles(gObj, gridColumns[col], this.getRecordThemeStyle(this.theme), indent + col + 1);\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getHeaderThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n style.fontSize = 12;\n style.borders = { color: '#E0E0E0' };\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.header)) {\n style = this.updateThemeStyle(theme.header, style);\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.updateThemeStyle = function (themestyle, style) {\n if (!isNullOrUndefined(themestyle.fontColor)) {\n style.fontColor = themestyle.fontColor;\n }\n if (!isNullOrUndefined(themestyle.fontName)) {\n style.fontName = themestyle.fontName;\n }\n if (!isNullOrUndefined(themestyle.fontSize)) {\n style.fontSize = themestyle.fontSize;\n }\n if (!isNullOrUndefined(themestyle.borders)) {\n if (!isNullOrUndefined(themestyle.borders.color)) {\n style.borders.color = themestyle.borders.color;\n }\n if (!isNullOrUndefined(themestyle.borders.lineStyle)) {\n style.borders.lineStyle = themestyle.borders.lineStyle;\n }\n }\n if (themestyle.bold !== false) {\n style.bold = themestyle.bold;\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getCaptionThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n style.fontSize = 13;\n style.backColor = '#F6F6F6';\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.caption)) {\n style = this.updateThemeStyle(theme.caption, style);\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getRecordThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n style.fontSize = 13;\n style.borders = { color: '#E0E0E0' };\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.record)) {\n style = this.updateThemeStyle(theme.record, style);\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processExcelHeader = function (header) {\n if (!isNullOrUndefined(header.rows) && (this.expType === 'NewSheet' || this.rowLength === 1)) {\n var noRows = void 0;\n if (header.headerRows === undefined) {\n this.rowLength = header.rows.length;\n }\n else {\n this.rowLength = header.headerRows;\n }\n if (this.rowLength < header.rows.length) {\n noRows = this.rowLength;\n }\n else {\n noRows = header.rows.length;\n }\n this.rowLength++;\n for (var row = 0; row < noRows; row++) {\n /* tslint:disable-next-line:no-any */\n var json = header.rows[row];\n //Row index\n if (!(json.index !== null && !isNullOrUndefined(json.index))) {\n json.index = (row + 1);\n }\n this.updatedCellIndex(json);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.updatedCellIndex = function (json) {\n var cellsLength = json.cells.length;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable-next-line:no-any */\n var jsonCell = json.cells[cellId];\n //cell index\n if (!(jsonCell.index !== null && !isNullOrUndefined(jsonCell.index))) {\n jsonCell.index = (cellId + 1);\n }\n }\n this.rows.push(json);\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processExcelFooter = function (footer) {\n if (!isNullOrUndefined(footer.rows)) {\n var noRows = void 0;\n if (footer.footerRows === undefined) {\n this.rowLength += footer.rows.length;\n }\n else {\n if (footer.footerRows > footer.rows.length) {\n this.rowLength += (footer.footerRows - footer.rows.length);\n noRows = footer.rows.length;\n }\n else {\n noRows = footer.footerRows;\n }\n }\n for (var row = 0; row < noRows; row++) {\n /* tslint:disable-next-line:no-any */\n var json = footer.rows[row];\n //Row index\n if (json.index === null || json.index === undefined) {\n json.index = this.rowLength++;\n }\n else {\n json.index += this.rowLength;\n }\n this.updatedCellIndex(json);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getIndex = function (spannedCells, rowIndex, columnIndex) {\n for (var _i = 0, spannedCells_1 = spannedCells; _i < spannedCells_1.length; _i++) {\n var spannedCell = spannedCells_1[_i];\n if ((spannedCell.rowIndex === rowIndex) && (spannedCell.columnIndex === columnIndex)) {\n columnIndex = columnIndex + 1;\n return { contains: true, index: columnIndex };\n }\n }\n return { contains: false, index: columnIndex };\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.parseStyles = function (gObj, col, style, index) {\n if (!isNullOrUndefined(col.format)) {\n if (typeof col.format === 'object') {\n style.numberFormat = !isNullOrUndefined(col.format.format) ? col.format.format : col.format.skeleton;\n if (!isNullOrUndefined(col.format.type)) {\n style.type = col.format.type;\n }\n }\n else {\n style.numberFormat = col.format;\n style.type = col.type;\n }\n }\n if (!isNullOrUndefined(col.textAlign)) {\n style.hAlign = col.textAlign;\n }\n if (Object.keys(style).length > 0) {\n style.name = gObj.element.id + 'column' + index;\n this.styles.push(style);\n }\n if (!isNullOrUndefined(col.width)) {\n /* tslint:disable-next-line:max-line-length */\n this.columns.push({ index: index, width: typeof col.width === 'number' ? col.width : this.helper.getConvertedWidth(col.width) });\n }\n };\n /**\n * To destroy the excel export\n * @return {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n //destroy for exporting\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import * as events from '../base/constant';\nimport { PdfDocument, PdfGrid, PdfBorders, PdfPen } from '@syncfusion/ej2-pdf-export';\nimport { PdfStandardFont, PdfFontFamily, PdfFontStyle, PdfBitmap } from '@syncfusion/ej2-pdf-export';\nimport { PdfStringFormat, PdfTextAlignment, PdfColor, PdfSolidBrush } from '@syncfusion/ej2-pdf-export';\nimport { PdfVerticalAlignment, RectangleF, PdfPageTemplateElement } from '@syncfusion/ej2-pdf-export';\nimport { PointF, PdfPageNumberField, PdfCompositeField } from '@syncfusion/ej2-pdf-export';\nimport { PdfPageCountField, SizeF, PdfPageSettings, PdfPageOrientation } from '@syncfusion/ej2-pdf-export';\nimport { ExportHelper, ExportValueFormatter } from './export-helper';\nimport { Data } from '../actions/data';\nimport { SummaryModelGenerator, GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { compile, getEnumValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { getValue } from '@syncfusion/ej2-base';\n/**\n * `PDF Export` module is used to handle the exportToPDF action.\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for the Grid PDF Export module\n * @hidden\n */\n function PdfExport(parent) {\n this.hideColumnInclude = false;\n this.currentViewData = false;\n this.customDataSource = false;\n this.isGrouping = false;\n this.parent = parent;\n this.helper = new ExportHelper(parent);\n }\n /**\n * For internal use only - Get the module name.\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n PdfExport.prototype.init = function (parent) {\n this.exportValueFormatter = new ExportValueFormatter(parent.locale);\n this.pdfDocument = undefined;\n this.hideColumnInclude = false;\n this.currentViewData = false;\n this.parent = parent;\n var gObj = parent;\n var can = 'cancel';\n this.isGrouping = false;\n this.isExporting = true;\n var args = {\n requestType: 'beforePdfExport', gridObject: gObj, cancel: false\n };\n gObj.trigger(events.beforePdfExport, args);\n if (args[can] === true) {\n return;\n }\n };\n /**\n * Used to map the input data\n * @return {void}\n */\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.Map = function (parent, pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n this.data = new Data(this.parent);\n this.isBlob = isBlob;\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource) && pdfExportProperties.dataSource instanceof DataManager) {\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n new DataManager({ url: pdfExportProperties.dataSource.dataSource.url, adaptor: pdfExportProperties.dataSource.adaptor }).executeQuery(new Query()).then(function (returnType) {\n _this.init(parent);\n if (!isNullOrUndefined(pdfDoc)) {\n _this.pdfDocument = pdfDoc;\n }\n else {\n _this.pdfDocument = new PdfDocument();\n }\n _this.processExport(parent, returnType, pdfExportProperties, isMultipleExport);\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n resolve(_this.pdfDocument);\n });\n });\n }\n else {\n var allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(parent, this.data)));\n allPromise.push(this.helper.getColumnData(parent));\n return Promise.all(allPromise).then(function (e) {\n _this.init(parent);\n if (!isNullOrUndefined(pdfDoc)) {\n _this.pdfDocument = pdfDoc;\n }\n else {\n _this.pdfDocument = new PdfDocument();\n }\n _this.processExport(parent, e[0], pdfExportProperties, isMultipleExport);\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n return _this.pdfDocument;\n // tslint:disable-next-line:no-any\n });\n }\n };\n /* tslint:disable:no-any */\n PdfExport.prototype.processExport = function (gObj, returnType, pdfExportProperties, isMultipleExport) {\n if (!isNullOrUndefined(pdfExportProperties)) {\n this.gridTheme = pdfExportProperties.theme;\n }\n var columns = gObj.columns;\n var dataSource = returnType.result;\n /* tslint:enable:no-any */\n var section = this.pdfDocument.sections.add();\n /* tslint:disable-next-line:no-any */\n var result = this.processExportProperties(pdfExportProperties, dataSource, section);\n dataSource = result.dataSource;\n /* tslint:disable-next-line:no-any */\n if (!isNullOrUndefined(dataSource.GroupGuid)) {\n this.isGrouping = true;\n }\n section = result.section;\n var pdfPage = section.pages.add();\n // create a grid\n var pdfGrid = new PdfGrid();\n // get header theme style\n /* tslint:disable-next-line:no-any */\n var headerThemeStyle = this.getHeaderThemeStyle();\n var border = headerThemeStyle.border;\n var headerFont = headerThemeStyle.font;\n var headerBrush = headerThemeStyle.brush;\n /* tslint:disable-next-line:no-any */\n var returnValue = this.helper.getHeaders(columns, this.hideColumnInclude);\n var rows = returnValue.rows;\n // Column collection with respect to the records in the grid\n var gridColumns = returnValue.columns;\n // process grid header content\n pdfGrid = this.processGridHeaders(dataSource.childLevels, pdfGrid, rows, gridColumns, border, headerFont, headerBrush);\n // set alignment, width and type of the values of the column\n this.setColumnProperties(gridColumns, pdfGrid);\n /* tslint:disable-next-line:no-any */\n var captionThemeStyle = this.getSummaryCaptionThemeStyle();\n if (!isNullOrUndefined(dataSource) && dataSource.length > 0) {\n if (this.isGrouping) {\n /* tslint:disable-next-line:max-line-length */\n this.processGroupedRecords(pdfGrid, dataSource, gridColumns, gObj, border, 0, captionThemeStyle.font, captionThemeStyle.brush, captionThemeStyle.backgroundBrush, returnType);\n }\n else {\n this.processRecord(border, gridColumns, gObj, dataSource, pdfGrid);\n }\n if (!isNullOrUndefined(returnType.aggregates)) {\n var summaryModel = new SummaryModelGenerator(gObj);\n var sRows = void 0;\n if (this.customDataSource) {\n sRows = summaryModel.generateRows(dataSource, returnType.aggregates);\n }\n else if (this.currentViewData) {\n sRows = summaryModel.generateRows(this.parent.getCurrentViewRecords(), returnType.aggregates);\n }\n else if (this.isGrouping) {\n sRows = summaryModel.generateRows(dataSource.records, returnType.aggregates);\n }\n else {\n sRows = summaryModel.generateRows(returnType.result, returnType.aggregates);\n }\n /* tslint:disable-next-line:max-line-length */\n this.processAggregates(sRows, pdfGrid, border, captionThemeStyle.font, captionThemeStyle.brush, captionThemeStyle.backgroundBrush, false);\n }\n }\n else {\n var row = pdfGrid.rows.addRow();\n row.style.setBorder(border);\n }\n // draw the grid\n pdfGrid.draw(pdfPage, 20, 20);\n if (!isMultipleExport) {\n // save the PDF\n if (!this.isBlob) {\n if (!isNullOrUndefined(pdfExportProperties) && pdfExportProperties.fileName) {\n this.pdfDocument.save(pdfExportProperties.fileName);\n }\n else {\n this.pdfDocument.save('Export.pdf');\n }\n }\n else {\n this.blobPromise = this.pdfDocument.save();\n }\n this.pdfDocument.destroy();\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getSummaryCaptionThemeStyle = function () {\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.caption) && this.gridTheme.caption !== null) {\n var fontSize = !isNullOrUndefined(this.gridTheme.caption.fontSize) ? this.gridTheme.caption.fontSize : 9.75;\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.caption.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.caption.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n /* tslint:disable-next-line:max-line-length */\n return { font: new PdfStandardFont(PdfFontFamily.Helvetica, 10.5), brush: new PdfSolidBrush(new PdfColor(pdfColor)), backgroundBrush: new PdfSolidBrush(new PdfColor(246, 246, 246)) };\n }\n else {\n //Material theme\n /* tslint:disable-next-line:max-line-length */\n return { font: new PdfStandardFont(PdfFontFamily.Helvetica, 9.75), brush: new PdfSolidBrush(new PdfColor(0, 0, 0)), backgroundBrush: new PdfSolidBrush(new PdfColor(246, 246, 246)) };\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getHeaderThemeStyle = function () {\n var border = new PdfBorders();\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.header)) {\n if (!isNullOrUndefined(this.gridTheme.header.borders) && !isNullOrUndefined(this.gridTheme.header.borders.color)) {\n var borderColor = this.hexToRgb(this.gridTheme.header.borders.color);\n border.all = new PdfPen(new PdfColor(borderColor.r, borderColor.g, borderColor.b));\n }\n var fontSize = !isNullOrUndefined(this.gridTheme.header.fontSize) ? this.gridTheme.header.fontSize : 10.5;\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.header.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.header.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n /* tslint:disable-next-line:max-line-length */\n return { border: border, font: new PdfStandardFont(PdfFontFamily.Helvetica, fontSize), brush: new PdfSolidBrush(pdfColor) };\n }\n else {\n //Material theme\n border.all = new PdfPen(new PdfColor(234, 234, 234));\n /* tslint:disable-next-line:max-line-length */\n return { border: border, font: new PdfStandardFont(PdfFontFamily.Helvetica, 10.5), brush: new PdfSolidBrush(new PdfColor(102, 102, 102)) };\n }\n };\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processGroupedRecords = function (pdfGrid, dataSource, gridColumns, gObj, border, level, font, brush, backgroundBrush, returnType) {\n var groupIndex = level;\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var dataSourceItems = dataSource_1[_i];\n var row = pdfGrid.rows.addRow();\n var col = gObj.getColumnByField(dataSourceItems.field);\n /* tslint:disable-next-line:no-any */\n var args = {\n value: dataSourceItems.key,\n column: col,\n style: undefined,\n isForeignKey: col.isForeignColumn(),\n };\n /* tslint:disable-next-line:max-line-length */\n var value = this.parent.getColumnByField(dataSourceItems.field).headerText + ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ' + dataSourceItems.count + (dataSource.count > 1 ? ' items' : ' item');\n row.cells.getCell(groupIndex).value = value;\n row.cells.getCell(groupIndex + 1).style.stringFormat = new PdfStringFormat(PdfTextAlignment.Left);\n row.style.setBorder(border);\n row.style.setFont(font);\n row.style.setTextBrush(brush);\n row.style.setBackgroundBrush(backgroundBrush);\n var sRows = void 0;\n var captionSummaryModel = new CaptionSummaryModelGenerator(gObj);\n if (!isNullOrUndefined(dataSourceItems.items.records)) {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items.records, dataSourceItems);\n }\n else {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items, dataSourceItems);\n }\n if (!isNullOrUndefined(sRows) && sRows.length === 0) {\n row.cells.getCell(groupIndex + 1).columnSpan = pdfGrid.columns.count - (groupIndex + 1);\n }\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, true, row, groupIndex);\n /* tslint:disable-next-line:max-line-length */\n this.processGroupedRecords(pdfGrid, dataSourceItems.items, gridColumns, gObj, border, (groupIndex + 1), font, brush, backgroundBrush, returnType);\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items.records, dataSourceItems);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n else {\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, true, row, groupIndex);\n this.processRecord(border, gridColumns, gObj, dataSourceItems.items, pdfGrid, (groupIndex + 1));\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items, dataSourceItems);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processGridHeaders = function (childLevels, pdfGrid, rows, gridColumns, border, headerFont, headerBrush) {\n var columnCount = gridColumns.length;\n var gObj = this.parent;\n if (this.isGrouping) {\n columnCount += (childLevels + 1);\n }\n // add columns\n pdfGrid.columns.add(columnCount);\n if (this.isGrouping) {\n for (var i = 0; i < (childLevels + 1); i++) {\n pdfGrid.columns.getColumn(i).width = 20;\n }\n }\n // add header\n pdfGrid.headers.add(rows.length);\n // set cell values of each rows in the header\n for (var i = 0; i < rows.length; i++) {\n var gridHeader = pdfGrid.headers.getHeader(i);\n gridHeader.style.setBorder(border);\n gridHeader.style.setFont(headerFont);\n gridHeader.style.setTextBrush(headerBrush);\n var cellIndex = this.isGrouping ? (childLevels + 1) : 0;\n if (rows[i].cells.length === 0) {\n for (var j = 0; j < gridHeader.cells.count; j++) {\n var cell = gridHeader.cells.getCell(j);\n cell.value = '';\n }\n }\n else {\n for (var j = 0; j < cellIndex; j++) {\n var cell = gridHeader.cells.getCell(j);\n cell.value = '';\n }\n for (var j = 0; j < rows[i].cells.length; j++) {\n var cell = gridHeader.cells.getCell(cellIndex);\n /* tslint:disable-next-line:no-any */\n var args = {\n cell: cell,\n gridCell: rows[i].cells[j],\n style: cell.style\n };\n /* tslint:enable:no-any */\n gObj.trigger(events.pdfHeaderQueryCellInfo, args);\n if (cell.value !== null) {\n cell.value = rows[i].cells[j].column.headerText;\n if (!isNullOrUndefined(rows[i].cells[j].column.headerTextAlign)) {\n cell.style.stringFormat = this.getHorizontalAlignment(rows[i].cells[j].column.headerTextAlign);\n }\n if (!isNullOrUndefined(rows[i].cells[j].rowSpan)) {\n cell.rowSpan = rows[i].cells[j].rowSpan;\n /* tslint:disable-next-line:max-line-length */\n cell.style.stringFormat = this.getVerticalAlignment('Bottom', cell.style.stringFormat, rows[i].cells[j].column.textAlign);\n for (var k = 1; k < rows[i].cells[j].rowSpan; k++) {\n pdfGrid.headers.getHeader(i + k).cells.getCell(cellIndex).value = null;\n }\n }\n if (!isNullOrUndefined(rows[i].cells[j].colSpan)) {\n cell.columnSpan = rows[i].cells[j].colSpan;\n }\n cellIndex += cell.columnSpan;\n }\n else {\n cell.value = '';\n cellIndex += cell.columnSpan;\n j = j - 1;\n }\n }\n }\n }\n if (pdfGrid.columns.count >= 6) {\n pdfGrid.style.allowHorizontalOverflow = true;\n }\n return pdfGrid;\n };\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processExportProperties = function (pdfExportProperties, dataSource, section) {\n if (!isNullOrUndefined(pdfExportProperties)) {\n if (!isNullOrUndefined(pdfExportProperties.theme)) {\n this.gridTheme = pdfExportProperties.theme;\n }\n if (!isNullOrUndefined(pdfExportProperties.pageOrientation) || !isNullOrUndefined(pdfExportProperties.pageSize)) {\n var pdfPageSettings = new PdfPageSettings();\n /* tslint:disable-next-line:max-line-length */\n pdfPageSettings.orientation = (pdfExportProperties.pageOrientation === 'Landscape') ? PdfPageOrientation.Landscape : PdfPageOrientation.Portrait;\n pdfPageSettings.size = this.getPageSize(pdfExportProperties.pageSize);\n section.setPageSettings(pdfPageSettings);\n }\n var clientSize = this.pdfDocument.pageSettings.size;\n if (!isNullOrUndefined(pdfExportProperties.header)) {\n /* tslint:disable-next-line:no-any */\n var header = pdfExportProperties.header;\n var position = new PointF(0, header.fromTop);\n var size = new SizeF((clientSize.width - 80), (header.height * 0.75));\n var bounds = new RectangleF(position, size);\n this.pdfDocument.template.top = this.drawPageTemplate(new PdfPageTemplateElement(bounds), header);\n }\n if (!isNullOrUndefined(pdfExportProperties.footer)) {\n /* tslint:disable-next-line:no-any */\n var footer = pdfExportProperties.footer;\n var position = new PointF(0, ((clientSize.width - 80) - (footer.fromBottom * 0.75)));\n var size = new SizeF((clientSize.width - 80), (footer.height * 0.75));\n var bounds = new RectangleF(position, size);\n this.pdfDocument.template.bottom = this.drawPageTemplate(new PdfPageTemplateElement(bounds), footer);\n }\n if (!isNullOrUndefined(pdfExportProperties.includeHiddenColumn) && !this.isGrouping) {\n this.hideColumnInclude = pdfExportProperties.includeHiddenColumn;\n }\n if (!isNullOrUndefined(pdfExportProperties.dataSource)) {\n if (!(pdfExportProperties.dataSource instanceof DataManager)) {\n dataSource = pdfExportProperties.dataSource;\n }\n this.customDataSource = true;\n this.currentViewData = false;\n }\n else if (!isNullOrUndefined(pdfExportProperties.exportType)) {\n if (pdfExportProperties.exportType === 'CurrentPage') {\n dataSource = this.parent.currentViewData;\n this.currentViewData = true;\n this.customDataSource = false;\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n return { dataSource: dataSource, section: section };\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawPageTemplate = function (template, element) {\n for (var _i = 0, _a = element.contents; _i < _a.length; _i++) {\n var content = _a[_i];\n this.processContentValidation(content);\n switch (content.type) {\n case 'Text':\n /* tslint:disable-next-line:max-line-length */\n if (content.value === '' || content.value === undefined || content.value === null || typeof content.value !== 'string') {\n throw new Error('please enter the valid input value in text content...');\n }\n this.drawText(template, content);\n break;\n case 'PageNumber':\n this.drawPageNumber(template, content);\n break;\n case 'Image':\n if (content.src === undefined || content.src === null || content.src === '') {\n throw new Error('please enter the valid base64 string in image content...');\n }\n this.drawImage(template, content);\n break;\n case 'Line':\n this.drawLine(template, content);\n break;\n default:\n throw new Error('Please set valid content type...');\n }\n }\n return template;\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processContentValidation = function (content) {\n if (content.type === undefined || content.type === null) {\n throw new Error('please set valid content type...');\n }\n else {\n if (content.type === 'Line') {\n if (content.points === undefined || content.points === null) {\n throw new Error('please enter valid points in ' + content.type + ' content...');\n }\n else {\n if (content.points.x1 === undefined || content.points.x1 === null || typeof content.points.x1 !== 'number') {\n throw new Error('please enter valid x1 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.y1 === undefined || content.points.y1 === null || typeof content.points.y1 !== 'number') {\n throw new Error('please enter valid y1 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.x2 === undefined || content.points.x2 === null || typeof content.points.x2 !== 'number') {\n throw new Error('please enter valid x2 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.y2 === undefined || content.points.y2 === null || typeof content.points.y2 !== 'number') {\n throw new Error('please enter valid y2 co-ordinate in ' + content.type + ' points...');\n }\n }\n }\n else {\n if (content.position === undefined || content.position === null) {\n throw new Error('please enter valid position in ' + content.type + ' content...');\n }\n else {\n if (content.position.x === undefined || content.position.x === null || typeof content.position.x !== 'number') {\n throw new Error('please enter valid x co-ordinate in ' + content.type + ' position...');\n }\n if (content.position.y === undefined || content.position.y === null || typeof content.position.y !== 'number') {\n throw new Error('please enter valid y co-ordinate in ' + content.type + ' position...');\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawText = function (pageTemplate, content) {\n var font = this.getFont(content);\n var brush = this.getBrushFromContent(content);\n var pen = null;\n if (!isNullOrUndefined(content.style.textPenColor)) {\n var penColor = this.hexToRgb(content.style.textPenColor);\n pen = new PdfPen(new PdfColor(penColor.r, penColor.g, penColor.b));\n }\n if (brush == null && pen == null) {\n brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var value = content.value.toString();\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var format;\n var result = this.setContentFormat(content, format);\n if (result !== null && !isNullOrUndefined(result.format) && !isNullOrUndefined(result.size)) {\n pageTemplate.graphics.drawString(value, font, pen, brush, x, y, result.size.width, result.size.height, result.format);\n }\n else {\n pageTemplate.graphics.drawString(value, font, pen, brush, x, y, format);\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawPageNumber = function (documentHeader, content) {\n var font = this.getFont(content);\n var brush = null;\n if (!isNullOrUndefined(content.style.textBrushColor)) {\n /* tslint:disable-next-line:max-line-length */\n var brushColor = this.hexToRgb(content.style.textBrushColor);\n brush = new PdfSolidBrush(new PdfColor(brushColor.r, brushColor.g, brushColor.b));\n }\n else {\n brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var pageNumber = new PdfPageNumberField(font, brush);\n pageNumber.numberStyle = this.getPageNumberStyle(content.pageNumberType);\n var compositeField;\n var format;\n if (!isNullOrUndefined(content.format)) {\n if (content.format.indexOf('$total') !== -1 && content.format.indexOf('$current') !== -1) {\n var pageCount = new PdfPageCountField(font);\n if (content.format.indexOf('$total') > content.format.indexOf('$current')) {\n format = content.format.replace('$current', '0');\n format = format.replace('$total', '1');\n }\n else {\n format = content.format.replace('$current', '1');\n format = format.replace('$total', '0');\n }\n compositeField = new PdfCompositeField(font, brush, format, pageNumber, pageCount);\n }\n else if (content.format.indexOf('$current') !== -1 && content.format.indexOf('$total') === -1) {\n format = content.format.replace('$current', '0');\n compositeField = new PdfCompositeField(font, brush, format, pageNumber);\n }\n else {\n var pageCount = new PdfPageCountField(font);\n format = content.format.replace('$total', '0');\n compositeField = new PdfCompositeField(font, brush, format, pageCount);\n }\n }\n else {\n format = '{0}';\n compositeField = new PdfCompositeField(font, brush, format, pageNumber);\n }\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var result = this.setContentFormat(content, compositeField.stringFormat);\n if (result !== null && !isNullOrUndefined(result.format) && !isNullOrUndefined(result.size)) {\n compositeField.stringFormat = result.format;\n compositeField.bounds = new RectangleF(x, y, result.size.width, result.size.height);\n }\n compositeField.draw(documentHeader.graphics, x, y);\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawImage = function (documentHeader, content) {\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var width = (!isNullOrUndefined(content.size)) ? (content.size.width * 0.75) : undefined;\n var height = (!isNullOrUndefined(content.size)) ? (content.size.height * 0.75) : undefined;\n var image = new PdfBitmap(content.src);\n if (!isNullOrUndefined(width)) {\n documentHeader.graphics.drawImage(image, x, y, width, height);\n }\n else {\n documentHeader.graphics.drawImage(image, x, y);\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawLine = function (documentHeader, content) {\n var x1 = content.points.x1 * 0.75;\n var y1 = content.points.y1 * 0.75;\n var x2 = content.points.x2 * 0.75;\n var y2 = content.points.y2 * 0.75;\n var pen = this.getPenFromContent(content);\n if (!isNullOrUndefined(content.style) && content.style !== null) {\n if (!isNullOrUndefined(content.style.penSize) && content.style.penSize !== null && typeof content.style.penSize === 'number') {\n pen.width = content.style.penSize * 0.75;\n }\n pen.dashStyle = this.getDashStyle(content.style.dashStyle);\n }\n documentHeader.graphics.drawLine(pen, x1, y1, x2, y2);\n };\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processAggregates = function (sRows, pdfGrid, border, font, brush, backgroundBrush, isCaption, captionRow, groupIndex) {\n for (var _i = 0, sRows_1 = sRows; _i < sRows_1.length; _i++) {\n var row = sRows_1[_i];\n var startIndex = 0;\n var leastCaptionSummaryIndex = -1;\n var index = 0;\n var isEmpty = true;\n /* tslint:disable-next-line:no-any */\n var value = [];\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n /* tslint:disable-next-line:no-any */\n var cell = row.cells[index];\n if (!this.hideColumnInclude) {\n while (cell.visible === undefined) {\n if (!isNullOrUndefined(captionRow)) {\n if (!isNullOrUndefined(captionRow.cells.getCell(i).value)) {\n value.push('');\n value.push(captionRow.cells.getCell(i).value);\n isEmpty = false;\n i += 1;\n }\n else {\n value.push('');\n }\n }\n else {\n value.push('');\n }\n i += 1;\n index = index + 1;\n cell = row.cells[index];\n }\n while (!isNullOrUndefined(cell.visible) && !cell.visible) {\n index = index + 1;\n cell = row.cells[index];\n }\n }\n if (cell.isDataCell) {\n var templateFn = {};\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(cell.column.footerTemplate) || !isNullOrUndefined(cell.column.groupCaptionTemplate) || !isNullOrUndefined(cell.column.groupFooterTemplate)) {\n /* tslint:disable-next-line:no-any */\n var result = this.getTemplateFunction(templateFn, i, leastCaptionSummaryIndex, cell.column);\n templateFn = result.templateFunction;\n leastCaptionSummaryIndex = result.leastCaptionSummaryIndex;\n /* tslint:disable-next-line:max-line-length */\n var txt = (templateFn[getEnumValue(CellType, cell.cellType)](row.data[cell.column.field ? cell.column.field : cell.column.columnName]));\n value.push(txt[0].wholeText);\n isEmpty = false;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var result = this.getSummaryWithoutTemplate(row.data[cell.column.field]);\n if (!isNullOrUndefined(result)) {\n value.push(result);\n }\n }\n }\n else {\n value.push('');\n }\n if (isEmpty && value[i] !== '' && !isNullOrUndefined(value[i]) && value[i] !== null) {\n isEmpty = false;\n }\n index += 1;\n }\n if (!isEmpty) {\n if (!isCaption) {\n var gridRow = pdfGrid.rows.addRow();\n gridRow.style.setBorder(border);\n gridRow.style.setFont(font);\n gridRow.style.setTextBrush(brush);\n gridRow.style.setBackgroundBrush(backgroundBrush);\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n gridRow.cells.getCell(i).value = value[i].toString();\n }\n }\n else {\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n captionRow.cells.getCell(i).value = value[i].toString();\n if (i === (groupIndex + 1) && leastCaptionSummaryIndex !== -1) {\n captionRow.cells.getCell(i).columnSpan = leastCaptionSummaryIndex - (groupIndex + 1);\n }\n else if (i === (groupIndex + 1) && leastCaptionSummaryIndex === -1) {\n captionRow.cells.getCell(i).columnSpan = pdfGrid.columns.count - (groupIndex + 1);\n }\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getTemplateFunction = function (templateFn, index, leastCaptionSummaryIndex, column) {\n if (!isNullOrUndefined(column.footerTemplate)) {\n templateFn[getEnumValue(CellType, CellType.Summary)] = compile(column.footerTemplate);\n }\n else if (!isNullOrUndefined(column.groupCaptionTemplate)) {\n if (leastCaptionSummaryIndex === -1) {\n leastCaptionSummaryIndex = index;\n }\n templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = compile(column.groupCaptionTemplate);\n }\n else {\n templateFn[getEnumValue(CellType, CellType.GroupSummary)] = compile(column.groupFooterTemplate);\n }\n return { templateFunction: templateFn, leastCaptionSummaryIndex: leastCaptionSummaryIndex };\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getSummaryWithoutTemplate = function (data) {\n if (!isNullOrUndefined(data.Sum)) {\n return data.Sum;\n }\n else if (!isNullOrUndefined(data.Average)) {\n return data.Average;\n }\n else if (!isNullOrUndefined(data.Max)) {\n return data.Max;\n }\n else if (!isNullOrUndefined(data.Min)) {\n return data.Min;\n }\n else if (!isNullOrUndefined(data.Count)) {\n return data.Count;\n }\n else if (!isNullOrUndefined(data.TrueCount)) {\n return data.TrueCount;\n }\n else if (!isNullOrUndefined(data.FalseCount)) {\n return data.FalseCount;\n }\n else if (!isNullOrUndefined(data.Custom)) {\n return data.Custom;\n }\n };\n // Set alignment, width and type of the values of the column\n /* tslint:disable:no-any */\n /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.setColumnProperties = function (gridColumns, pdfGrid) {\n var startIndex = this.isGrouping ? (pdfGrid.columns.count - gridColumns.length) : 0;\n for (var i = 0; i < gridColumns.length; i++) {\n if (!isNullOrUndefined(gridColumns[i].textAlign)) {\n pdfGrid.columns.getColumn(i + startIndex).format = this.getHorizontalAlignment(gridColumns[i].textAlign);\n }\n // Need to add width consideration with % value\n if (pdfGrid.style.allowHorizontalOverflow && !isNullOrUndefined(gridColumns[i].width)) {\n /* tslint:disable-next-line:max-line-length */\n pdfGrid.columns.getColumn(i + startIndex).width = typeof gridColumns[i].width === 'number' ? gridColumns[i].width * 0.75 : this.helper.getConvertedWidth(gridColumns[i].width) * 0.75;\n }\n }\n };\n /**\n * set default style properties of each rows in exporting grid\n * @private\n */\n PdfExport.prototype.setRecordThemeStyle = function (row, border) {\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.record) && this.gridTheme.record !== null) {\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.record.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.record.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n row.style.setTextBrush(new PdfSolidBrush(pdfColor));\n }\n else {\n row.style.setTextBrush(new PdfSolidBrush(new PdfColor(0, 0, 0)));\n }\n row.style.setBorder(border);\n return row;\n };\n /**\n * generate the formatted cell values\n * @private\n */\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processRecord = function (border, columns, gObj, dataSource, pdfGrid, groupIndex) {\n var startIndex = this.isGrouping ? groupIndex : 0;\n for (var _i = 0, _a = dataSource; _i < _a.length; _i++) {\n var items = _a[_i];\n // create a new row and set default style properties\n var gridRow = this.setRecordThemeStyle(pdfGrid.rows.addRow(), border);\n for (var j = 0; j < columns.length; j++) {\n /* tslint:disable:no-any */\n var value = (!isNullOrUndefined(columns[j].field) && getValue(columns[j].field, items)) || '';\n var column = columns[j];\n var foreignKeyData = void 0;\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = this.helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n var data = items;\n var args = {\n data: data,\n value: value,\n column: column,\n style: undefined,\n colSpan: 1\n };\n args.value = this.exportValueFormatter.formatCellValue(args);\n /* tslint:enable:no-any */\n gObj.trigger(events.pdfQueryCellInfo, args);\n var cell = gridRow.cells.getCell(j + startIndex);\n cell.value = args.value;\n if (!isNullOrUndefined(args.style)) {\n this.processCellStyle(cell, args);\n }\n if (args.colSpan > 1) {\n if ((j + startIndex + 1 + args.colSpan) > gridRow.cells.count) {\n args.colSpan = gridRow.cells.count - (j + startIndex + 1);\n }\n cell.columnSpan = args.colSpan;\n for (var i = 1; i < cell.columnSpan; i++) {\n var spanCell = gridRow.cells.getCell(j + startIndex + i);\n spanCell.value = '';\n }\n j += (args.colSpan - 1);\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processCellStyle = function (cell, args) {\n if (!isNullOrUndefined(args.style.backgroundColor)) {\n /* tslint:disable-next-line:max-line-length */\n var backColor = this.hexToRgb(args.style.backgroundColor);\n cell.style.backgroundBrush = new PdfSolidBrush(new PdfColor(backColor.r, backColor.g, backColor.b));\n }\n if (!isNullOrUndefined(args.style.textAlignment)) {\n cell.style.stringFormat = this.getHorizontalAlignment(args.style.textAlignment);\n }\n if (!isNullOrUndefined(args.style.verticalAlignment)) {\n cell.style.stringFormat = this.getVerticalAlignment(args.style.verticalAlignment, cell.style.stringFormat);\n }\n if (!isNullOrUndefined(args.style.textBrushColor)) {\n var textBrushColor = this.hexToRgb(args.style.textBrushColor);\n cell.style.textBrush = new PdfSolidBrush(new PdfColor(textBrushColor.r, textBrushColor.g, textBrushColor.b));\n }\n if (!isNullOrUndefined(args.style.textPenColor)) {\n var textPenColor = this.hexToRgb(args.style.textPenColor);\n cell.style.textPen = new PdfPen(new PdfColor(textPenColor.r, textPenColor.g, textPenColor.b));\n }\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(args.style.fontFamily) || !isNullOrUndefined(args.style.fontSize) || !isNullOrUndefined(args.style.bold) || !isNullOrUndefined(args.style.italic) || !isNullOrUndefined(args.style.underline) || !isNullOrUndefined(args.style.strikeout)) {\n cell.style.font = this.getFont(args);\n }\n if (!isNullOrUndefined(args.style.border)) {\n var border = new PdfBorders();\n var borderWidth = args.style.border.width;\n // set border width\n var width = (!isNullOrUndefined(borderWidth) && typeof borderWidth === 'number') ? (borderWidth * 0.75) : (undefined);\n // set border color\n var color = new PdfColor(196, 196, 196);\n if (!isNullOrUndefined(args.style.border.color)) {\n var borderColor = this.hexToRgb(args.style.border.color);\n color = new PdfColor(borderColor.r, borderColor.g, borderColor.b);\n }\n var pen = new PdfPen(color, width);\n // set border dashStyle 'Solid , Dash, Dot, DashDot, DashDotDot'\n if (!isNullOrUndefined(args.style.border.dashStyle)) {\n pen.dashStyle = this.getDashStyle(args.style.border.dashStyle);\n }\n border.all = pen;\n cell.style.borders = border;\n }\n if (!isNullOrUndefined(args.style.paragraphIndent)) {\n cell.style.stringFormat = new PdfStringFormat();\n cell.style.stringFormat.paragraphIndent = args.style.paragraphIndent;\n }\n };\n /**\n * set text alignment of each columns in exporting grid\n * @private\n */\n PdfExport.prototype.getHorizontalAlignment = function (textAlign, format) {\n if (format === undefined) {\n format = new PdfStringFormat();\n }\n switch (textAlign) {\n case 'Right':\n format.alignment = PdfTextAlignment.Right;\n break;\n case 'Center':\n format.alignment = PdfTextAlignment.Center;\n break;\n case 'Justify':\n format.alignment = PdfTextAlignment.Justify;\n break;\n case 'Left':\n format.alignment = PdfTextAlignment.Left;\n break;\n }\n return format;\n };\n /**\n * set vertical alignment of each columns in exporting grid\n * @private\n */\n PdfExport.prototype.getVerticalAlignment = function (verticalAlign, format, textAlign) {\n if (format === undefined) {\n format = new PdfStringFormat();\n format = this.getHorizontalAlignment(textAlign, format);\n }\n switch (verticalAlign) {\n case 'Bottom':\n format.lineAlignment = PdfVerticalAlignment.Bottom;\n break;\n case 'Middle':\n format.lineAlignment = PdfVerticalAlignment.Middle;\n break;\n case 'Top':\n format.lineAlignment = PdfVerticalAlignment.Top;\n break;\n }\n return format;\n };\n PdfExport.prototype.getFontFamily = function (fontFamily) {\n switch (fontFamily) {\n case 'TimesRoman':\n return 2;\n case 'Courier':\n return 1;\n case 'Symbol':\n return 3;\n case 'ZapfDingbats':\n return 4;\n default:\n return 0;\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getFont = function (content) {\n var fontSize = (!isNullOrUndefined(content.style.fontSize)) ? (content.style.fontSize * 0.75) : 9.75;\n /* tslint:disable-next-line:max-line-length */\n var fontFamily = (!isNullOrUndefined(content.style.fontFamily)) ? (this.getFontFamily(content.style.fontFamily)) : PdfFontFamily.Helvetica;\n var fontStyle = PdfFontStyle.Regular;\n if (!isNullOrUndefined(content.style.bold) && content.style.bold) {\n fontStyle |= PdfFontStyle.Bold;\n }\n if (!isNullOrUndefined(content.style.italic) && content.style.italic) {\n fontStyle |= PdfFontStyle.Italic;\n }\n if (!isNullOrUndefined(content.style.underline) && content.style.underline) {\n fontStyle |= PdfFontStyle.Underline;\n }\n if (!isNullOrUndefined(content.style.strikeout) && content.style.strikeout) {\n fontStyle |= PdfFontStyle.Strikeout;\n }\n return new PdfStandardFont(fontFamily, fontSize, fontStyle);\n };\n PdfExport.prototype.getPageNumberStyle = function (pageNumberType) {\n switch (pageNumberType) {\n case 'LowerLatin':\n return 2;\n case 'LowerRoman':\n return 3;\n case 'UpperLatin':\n return 4;\n case 'UpperRoman':\n return 5;\n default:\n return 1;\n }\n };\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.setContentFormat = function (content, format) {\n if (!isNullOrUndefined(content.size)) {\n var width = content.size.width * 0.75;\n var height = content.size.height * 0.75;\n format = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle);\n if (!isNullOrUndefined(content.style.hAlign)) {\n switch (content.style.hAlign) {\n case 'Right':\n format.alignment = PdfTextAlignment.Right;\n break;\n case 'Center':\n format.alignment = PdfTextAlignment.Center;\n break;\n case 'Justify':\n format.alignment = PdfTextAlignment.Justify;\n break;\n default:\n format.alignment = PdfTextAlignment.Left;\n }\n }\n if (!isNullOrUndefined(content.style.vAlign)) {\n format = this.getVerticalAlignment(content.style.vAlign, format);\n }\n return { format: format, size: new SizeF(width, height) };\n }\n return null;\n };\n PdfExport.prototype.getPageSize = function (pageSize) {\n switch (pageSize) {\n case 'Letter':\n return new SizeF(612, 792);\n case 'Note':\n return new SizeF(540, 720);\n case 'Legal':\n return new SizeF(612, 1008);\n case 'A0':\n return new SizeF(2380, 3368);\n case 'A1':\n return new SizeF(1684, 2380);\n case 'A2':\n return new SizeF(1190, 1684);\n case 'A3':\n return new SizeF(842, 1190);\n case 'A5':\n return new SizeF(421, 595);\n case 'A6':\n return new SizeF(297, 421);\n case 'A7':\n return new SizeF(210, 297);\n case 'A8':\n return new SizeF(148, 210);\n case 'A9':\n return new SizeF(105, 148);\n // case 'A10':\n // return new SizeF(74, 105);\n case 'B0':\n return new SizeF(2836, 4008);\n case 'B1':\n return new SizeF(2004, 2836);\n case 'B2':\n return new SizeF(1418, 2004);\n case 'B3':\n return new SizeF(1002, 1418);\n case 'B4':\n return new SizeF(709, 1002);\n case 'B5':\n return new SizeF(501, 709);\n case 'Archa':\n return new SizeF(648, 864);\n case 'Archb':\n return new SizeF(864, 1296);\n case 'Archc':\n return new SizeF(1296, 1728);\n case 'Archd':\n return new SizeF(1728, 2592);\n case 'Arche':\n return new SizeF(2592, 3456);\n case 'Flsa':\n return new SizeF(612, 936);\n case 'HalfLetter':\n return new SizeF(396, 612);\n case 'Letter11x17':\n return new SizeF(792, 1224);\n case 'Ledger':\n return new SizeF(1224, 792);\n default:\n return new SizeF(595, 842);\n }\n };\n PdfExport.prototype.getDashStyle = function (dashStyle) {\n switch (dashStyle) {\n case 'Dash':\n return 1;\n case 'Dot':\n return 2;\n case 'DashDot':\n return 3;\n case 'DashDotDot':\n return 4;\n default:\n return 0;\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getPenFromContent = function (content) {\n var pen = new PdfPen(new PdfColor(0, 0, 0));\n if (!isNullOrUndefined(content.style) && content.style !== null && !isNullOrUndefined(content.style.penColor)) {\n var penColor = this.hexToRgb(content.style.penColor);\n pen = new PdfPen(new PdfColor(penColor.r, penColor.g, penColor.b));\n }\n return pen;\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getBrushFromContent = function (content) {\n var brush = null;\n if (!isNullOrUndefined(content.style.textBrushColor)) {\n /* tslint:disable-next-line:max-line-length */\n var brushColor = this.hexToRgb(content.style.textBrushColor);\n brush = new PdfSolidBrush(new PdfColor(brushColor.r, brushColor.g, brushColor.b));\n }\n return brush;\n };\n PdfExport.prototype.hexToRgb = function (hex) {\n if (hex === null || hex === '' || hex.length !== 7) {\n throw new Error('please set valid hex value for color...');\n }\n hex = hex.substring(1);\n var bigint = parseInt(hex, 16);\n var r = (bigint >> 16) & 255;\n var g = (bigint >> 8) & 255;\n var b = bigint & 255;\n return { r: r, g: g, b: b };\n };\n /**\n * To destroy the pdf export\n * @return {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n //destroy for exporting\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { addClass, removeClass, attributes, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren } from '../base/util';\n/**\n * `CommandColumn` used to render command column in grid\n * @hidden\n */\nvar CommandColumnRenderer = /** @class */ (function (_super) {\n __extends(CommandColumnRenderer, _super);\n function CommandColumnRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.buttonElement = _this.parent.createElement('button', {});\n _this.unbounDiv = _this.parent.createElement('div', { className: 'e-unboundcelldiv', styles: 'display: inline-block' });\n _this.element = _this.parent.createElement('TD', {\n className: 'e-rowcell e-unboundcell', attrs: {\n role: 'gridcell', tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CommandColumnRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n node.appendChild(this.unbounDiv.cloneNode());\n node.setAttribute('aria-label', 'is Command column column header ' + cell.column.headerText);\n if (cell.column.commandsTemplate) {\n appendChildren(node.firstElementChild, cell.column.getColumnTemplate()(data));\n }\n else {\n for (var _i = 0, _a = cell.commands; _i < _a.length; _i++) {\n var command = _a[_i];\n node = this.renderButton(node, command, attributes.index);\n }\n }\n this.setAttributes(node, cell, attributes);\n if (this.parent.isEdit) {\n addClass(node.querySelectorAll('.e-edit-delete'), 'e-hide');\n removeClass(node.querySelectorAll('.e-save-cancel'), 'e-hide');\n }\n else {\n addClass(node.querySelectorAll('.e-save-cancel'), 'e-hide');\n removeClass(node.querySelectorAll('.e-edit-delete'), 'e-hide');\n }\n return node;\n };\n CommandColumnRenderer.prototype.renderButton = function (node, buttonOption, index) {\n var button = this.buttonElement.cloneNode();\n attributes(button, {\n 'id': this.parent.element.id + (buttonOption.type || '') + '_' + index, 'type': 'button',\n title: !isNullOrUndefined(buttonOption.title) ? buttonOption.title :\n buttonOption.buttonOption.content || this.localizer.getConstant(buttonOption.type) || buttonOption.type\n });\n button.onclick = buttonOption.buttonOption.click;\n var buttonObj = new Button(buttonOption.buttonOption, button);\n buttonObj.commandType = buttonOption.type;\n node.firstElementChild.appendChild(buttonObj.element);\n switch (buttonOption.type) {\n case 'Edit':\n case 'Delete':\n addClass([button], ['e-edit-delete', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n break;\n case 'Cancel':\n case 'Save':\n addClass([button], ['e-save-cancel', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n break;\n }\n return node;\n };\n return CommandColumnRenderer;\n}(CellRenderer));\nexport { CommandColumnRenderer };\n","import { closest } from '@syncfusion/ej2-base';\nimport { initialEnd, click, keyPressed } from '../base/constant';\nimport { CellType } from '../base/enum';\nimport { CommandColumnRenderer } from '../renderer/command-column-renderer';\n/**\n * `CommandColumn` used to handle the command column actions.\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n CommandColumn.prototype.initiateRender = function () {\n var cellFac = this.locator.getService('cellRendererFactory');\n cellFac.addCellRenderer(CellType.CommandColumn, new CommandColumnRenderer(this.parent, this.locator));\n };\n CommandColumn.prototype.commandClickHandler = function (e) {\n var gObj = this.parent;\n var gID = gObj.element.id;\n var target = closest(e.target, 'button');\n if (!target || !gObj.editModule || !closest(e.target, '.e-unboundcell')) {\n return;\n }\n var buttonObj = target.ej2_instances[0];\n var type = buttonObj.commandType;\n if (buttonObj.disabled) {\n return;\n }\n switch (type) {\n case 'Edit':\n gObj.editModule.endEdit();\n gObj.editModule.startEdit(closest(target, 'tr'));\n break;\n case 'Cancel':\n gObj.editModule.closeEdit();\n break;\n case 'Save':\n gObj.editModule.endEdit();\n break;\n case 'Delete':\n gObj.editModule.endEdit();\n gObj.clearSelection();\n //for toogle issue when dbl click\n gObj.selectRow(parseInt(closest(target, 'tr').getAttribute('aria-rowindex'), 10), false);\n gObj.editModule.deleteRecord();\n break;\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * To destroy CommandColumn.\n * @method destroy\n * @return {void}\n */\n CommandColumn.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n CommandColumn.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(click, this.commandClickHandler);\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(keyPressed, this.keyPressHandler);\n };\n CommandColumn.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(click, this.commandClickHandler, this);\n this.parent.on(initialEnd, this.initiateRender, this);\n this.parent.on(keyPressed, this.keyPressHandler, this);\n };\n CommandColumn.prototype.keyPressHandler = function (e) {\n if (e.action === 'enter' && closest(e.target, '.e-unboundcelldiv')) {\n this.commandClickHandler(e);\n e.preventDefault();\n }\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { closest, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { Resize } from '../actions/resize';\nimport { Page } from '../actions/page';\nimport { parentsUntil } from '../base/util';\nimport { Group } from '../actions/group';\nimport { Sort } from '../actions/sort';\nimport { PdfExport } from '../actions/pdf-export';\nimport { ExcelExport } from '../actions/excel-export';\nexport var menuClass = {\n header: '.e-gridheader',\n content: '.e-gridcontent',\n edit: '.e-inline-edit',\n batchEdit: '.e-editedbatchcell',\n editIcon: 'e-edit',\n pager: '.e-gridpager',\n delete: 'e-delete',\n save: 'e-save',\n cancel: 'e-cancel',\n copy: 'e-copy',\n pdf: 'e-pdfexport',\n group: 'e-icon-group',\n ungroup: 'e-icon-ungroup',\n csv: 'e-csvexport',\n excel: 'e-excelexport',\n fPage: 'e-icon-first',\n nPage: 'e-icon-next',\n lPage: 'e-icon-last',\n pPage: 'e-icon-prev',\n ascending: 'e-icon-ascending',\n descending: 'e-icon-descending',\n groupHeader: 'e-groupdroparea',\n touchPop: 'e-gridpopup'\n};\n/**\n * The `ContextMenu` module is used to handle context menu actions.\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent, serviceLocator) {\n this.defaultItems = {};\n this.disableItems = [];\n this.hiddenItems = [];\n this.localeText = this.setLocaleKey();\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n ContextMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRenderMenu, this);\n this.parent.on(events.initialLoad, this.render, this);\n };\n /**\n * @hidden\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRenderMenu);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler.bind(this));\n };\n ContextMenu.prototype.keyDownHandler = function (e) {\n if (e.code === 'Tab' || e.which === 9) {\n this.contextMenu.close();\n }\n };\n ContextMenu.prototype.render = function () {\n this.parent.element.classList.add('e-noselect');\n this.l10n = this.serviceLocator.getService('localization');\n this.element = this.parent.createElement('ul', { id: this.gridID + '_cmenu' });\n EventHandler.add(this.element, 'keydown', this.keyDownHandler.bind(this));\n this.parent.element.appendChild(this.element);\n var target = '#' + this.gridID;\n this.contextMenu = new Menu({\n items: this.getMenuItems(),\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n target: target,\n select: this.contextMenuItemClick.bind(this),\n beforeOpen: this.contextMenuBeforeOpen.bind(this),\n onOpen: this.contextMenuOpen.bind(this),\n onClose: this.contextMenuOnClose.bind(this),\n cssClass: 'e-grid-menu'\n });\n this.contextMenu.appendTo(this.element);\n };\n ContextMenu.prototype.enableAfterRenderMenu = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n if (this.contextMenu) {\n this.contextMenu.destroy();\n remove(this.element);\n this.parent.element.classList.remove('e-noselect');\n }\n this.render();\n }\n };\n ContextMenu.prototype.getMenuItems = function () {\n var menuItems = [];\n var exportItems = [];\n for (var _i = 0, _a = this.parent.contextMenuItems; _i < _a.length; _i++) {\n var item = _a[_i];\n if (typeof item === 'string' && this.getDefaultItems().indexOf(item) !== -1) {\n if (item.toLocaleLowerCase().indexOf('export') !== -1) {\n exportItems.push(this.buildDefaultItems(item));\n }\n else {\n menuItems.push(this.buildDefaultItems(item));\n }\n }\n else if (typeof item !== 'string') {\n menuItems.push(item);\n }\n }\n if (exportItems.length > 0) {\n var exportGroup = this.buildDefaultItems('export');\n exportGroup.items = exportItems;\n menuItems.push(exportGroup);\n }\n return menuItems;\n };\n ContextMenu.prototype.getLastPage = function () {\n var totalpage = Math.floor(this.parent.pageSettings.totalRecordsCount / this.parent.pageSettings.pageSize);\n if (this.parent.pageSettings.totalRecordsCount % this.parent.pageSettings.pageSize) {\n totalpage += 1;\n }\n return totalpage;\n };\n ContextMenu.prototype.contextMenuOpen = function () {\n this.isOpen = true;\n };\n ContextMenu.prototype.contextMenuItemClick = function (args) {\n var item = this.getKeyFromId(args.item.id);\n switch (item) {\n case 'AutoFitAll':\n this.parent.autoFitColumns([]);\n break;\n case 'AutoFit':\n this.parent.autoFitColumns(this.targetColumn.field);\n break;\n case 'Group':\n this.parent.groupColumn(this.targetColumn.field);\n break;\n case 'Ungroup':\n this.parent.ungroupColumn(this.targetColumn.field);\n break;\n case 'Edit':\n if (this.parent.editSettings.mode === 'Batch') {\n if (this.row && this.cell && !isNaN(parseInt(this.cell.getAttribute('aria-colindex'), 10))) {\n this.parent.editModule.editCell(parseInt(this.row.getAttribute('aria-rowindex'), 10), this.parent.getColumns()[parseInt(this.cell.getAttribute('aria-colindex'), 10)].field);\n }\n }\n else {\n this.parent.editModule.endEdit();\n this.parent.editModule.startEdit(this.row);\n }\n break;\n case 'Delete':\n if (this.parent.editSettings.mode !== 'Batch') {\n this.parent.editModule.endEdit();\n }\n if (this.parent.getSelectedRecords().length === 1) {\n this.parent.editModule.deleteRow(this.row);\n }\n else {\n this.parent.deleteRecord();\n }\n break;\n case 'Save':\n this.parent.editModule.endEdit();\n break;\n case 'Cancel':\n this.parent.editModule.closeEdit();\n break;\n case 'Copy':\n this.parent.copy();\n break;\n case 'PdfExport':\n this.parent.pdfExport();\n break;\n case 'ExcelExport':\n this.parent.excelExport();\n break;\n case 'CsvExport':\n this.parent.csvExport();\n break;\n case 'SortAscending':\n this.isOpen = false;\n this.parent.sortColumn(this.targetColumn.field, 'Ascending');\n break;\n case 'SortDescending':\n this.isOpen = false;\n this.parent.sortColumn(this.targetColumn.field, 'Descending');\n break;\n case 'FirstPage':\n this.parent.goToPage(1);\n break;\n case 'PrevPage':\n this.parent.goToPage(this.parent.pageSettings.currentPage - 1);\n break;\n case 'LastPage':\n this.parent.goToPage(this.getLastPage());\n break;\n case 'NextPage':\n this.parent.goToPage(this.parent.pageSettings.currentPage + 1);\n break;\n }\n args.column = this.targetColumn;\n this.parent.trigger(events.contextMenuClick, args);\n };\n ContextMenu.prototype.contextMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.updateItemStatus();\n }\n };\n ContextMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n ContextMenu.prototype.updateItemStatus = function () {\n this.contextMenu.showItems(this.hiddenItems);\n this.contextMenu.enableItems(this.disableItems);\n this.hiddenItems = [];\n this.disableItems = [];\n this.isOpen = false;\n };\n ContextMenu.prototype.contextMenuBeforeOpen = function (args) {\n var changedRecords = 'changedRecords';\n var addedRecords = 'addedRecords';\n var deletedRecords = 'deletedRecords';\n var closestGrid = closest(args.event.target, '.e-grid');\n if (args.event && closestGrid && closestGrid !== this.parent.element) {\n args.cancel = true;\n }\n else if (args.event && (closest(args.event.target, '.' + menuClass.groupHeader)\n || closest(args.event.target, '.' + menuClass.touchPop) ||\n closest(args.event.target, '.e-summarycell') ||\n closest(args.event.target, '.e-groupcaption') ||\n closest(args.event.target, '.e-filterbarcell'))) {\n args.cancel = true;\n }\n else {\n this.targetColumn = this.getColumn(args.event);\n this.selectRow(args.event, this.parent.selectionSettings.type !== 'Multiple');\n var hiddenSepItems = [];\n var showSepItems = [];\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (this.ensureDisabledStatus(key)) {\n this.disableItems.push(item.text);\n }\n if (args.event && (this.ensureTarget(args.event.target, menuClass.edit) ||\n this.ensureTarget(args.event.target, menuClass.batchEdit))) {\n if (key !== 'Save' && key !== 'Cancel') {\n this.hiddenItems.push(item.text);\n }\n }\n else if (this.parent.editSettings.mode === 'Batch' && ((closest(args.event.target, '.e-gridform')) ||\n this.parent.editModule.getBatchChanges()[changedRecords].length ||\n this.parent.editModule.getBatchChanges()[addedRecords].length ||\n this.parent.editModule.getBatchChanges()[deletedRecords].length) && (key === 'Save' || key === 'Cancel')) {\n continue;\n }\n else if (isNullOrUndefined(args.parentItem) && args.event\n && !this.ensureTarget(args.event.target, dItem.target)) {\n this.hiddenItems.push(item.text);\n }\n }\n else if (item.target && args.event &&\n !this.ensureTarget(args.event.target, item.target)) {\n if (item.separator) {\n hiddenSepItems.push(item.id);\n }\n else {\n this.hiddenItems.push(item.text);\n }\n }\n else if (this.ensureTarget(args.event.target, item.target) && item.separator) {\n showSepItems.push(item.id);\n }\n }\n if (showSepItems.length > 0) {\n this.contextMenu.showItems(showSepItems, true);\n }\n this.contextMenu.enableItems(this.disableItems, false);\n this.contextMenu.hideItems(this.hiddenItems);\n if (hiddenSepItems.length > 0) {\n this.contextMenu.hideItems(hiddenSepItems, true);\n }\n this.eventArgs = args.event;\n args.column = this.targetColumn;\n this.parent.trigger(events.contextMenuOpen, args);\n if (this.hiddenItems.length === args.items.length) {\n this.updateItemStatus();\n args.cancel = true;\n }\n }\n };\n ContextMenu.prototype.ensureTarget = function (targetElement, selector) {\n var target = targetElement;\n if (this.ensureFrozenHeader(targetElement) && (selector === menuClass.header || selector === menuClass.content)) {\n target = closest(targetElement, selector === menuClass.header ? 'thead' : 'tbody');\n }\n else if (selector === menuClass.content || selector === menuClass.header) {\n target = parentsUntil(closest(targetElement, '.e-table'), selector.substr(1, selector.length));\n }\n else {\n target = closest(targetElement, selector);\n }\n return target && parentsUntil(target, 'e-grid') === this.parent.element;\n };\n ContextMenu.prototype.ensureFrozenHeader = function (targetElement) {\n return (this.parent.getFrozenColumns() || this.parent.frozenRows)\n && closest(targetElement, menuClass.header) ? true : false;\n };\n ContextMenu.prototype.ensureDisabledStatus = function (item) {\n var _this = this;\n var status = false;\n switch (item) {\n case 'AutoFitAll':\n case 'AutoFit':\n status = !(this.parent.ensureModuleInjected(Resize) && !this.parent.isEdit);\n break;\n case 'Group':\n if (!this.parent.allowGrouping || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) >= 0)) {\n status = true;\n }\n break;\n case 'Ungroup':\n if (!this.parent.allowGrouping || !this.parent.ensureModuleInjected(Group)\n || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) < 0)) {\n status = true;\n }\n break;\n case 'Edit':\n case 'Delete':\n case 'Save':\n case 'Cancel':\n if (!this.parent.editModule || (this.parent.getDataRows().length === 0)) {\n status = true;\n }\n break;\n case 'Copy':\n if (this.parent.getSelectedRowIndexes().length === 0 ||\n this.parent.getCurrentViewRecords().length === 0) {\n status = true;\n }\n break;\n case 'export':\n if ((!this.parent.allowExcelExport || !this.parent.excelExport) ||\n !this.parent.ensureModuleInjected(PdfExport) && !this.parent.ensureModuleInjected(ExcelExport)) {\n status = true;\n }\n break;\n case 'PdfExport':\n if (!(this.parent.allowPdfExport) || !this.parent.ensureModuleInjected(PdfExport)) {\n status = true;\n }\n break;\n case 'ExcelExport':\n case 'CsvExport':\n if (!(this.parent.allowExcelExport) || !this.parent.ensureModuleInjected(ExcelExport)) {\n status = true;\n }\n break;\n case 'SortAscending':\n case 'SortDescending':\n if ((!this.parent.allowSorting) || !this.parent.ensureModuleInjected(Sort)) {\n status = true;\n }\n else if (this.parent.ensureModuleInjected(Sort) && this.parent.sortSettings.columns.length > 0 && this.targetColumn) {\n this.parent.sortSettings.columns.forEach(function (element) {\n if (element.field === _this.targetColumn.field\n && element.direction.toLowerCase() === item.toLowerCase().replace('sort', '').toLocaleLowerCase()) {\n status = true;\n }\n });\n }\n break;\n case 'FirstPage':\n case 'PrevPage':\n if (!this.parent.allowPaging || !this.parent.ensureModuleInjected(Page) ||\n this.parent.getCurrentViewRecords().length === 0 ||\n (this.parent.ensureModuleInjected(Page) && this.parent.pageSettings.currentPage === 1)) {\n status = true;\n }\n break;\n case 'LastPage':\n case 'NextPage':\n if (!this.parent.allowPaging || !this.parent.ensureModuleInjected(Page) ||\n this.parent.getCurrentViewRecords().length === 0 ||\n (this.parent.ensureModuleInjected(Page) && this.parent.pageSettings.currentPage === this.getLastPage())) {\n status = true;\n }\n break;\n }\n return status;\n };\n /**\n * Gets the context menu element from the Grid.\n * @return {Element}\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.element;\n };\n /**\n * Destroys the context menu component in the Grid.\n * @method destroy\n * @return {void}\n * @hidden\n */\n ContextMenu.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.contextMenu.destroy();\n remove(this.element);\n this.removeEventListener();\n this.parent.element.classList.remove('e-noselect');\n };\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n ContextMenu.prototype.generateID = function (item) {\n return this.gridID + '_cmenu_' + item;\n };\n ContextMenu.prototype.getKeyFromId = function (id) {\n return id.replace(this.gridID + '_cmenu_', '');\n };\n ContextMenu.prototype.buildDefaultItems = function (item) {\n var menuItem;\n switch (item) {\n case 'AutoFitAll':\n case 'AutoFit':\n menuItem = { target: menuClass.header };\n break;\n case 'Group':\n menuItem = { target: menuClass.header, iconCss: menuClass.group };\n break;\n case 'Ungroup':\n menuItem = { target: menuClass.header, iconCss: menuClass.ungroup };\n break;\n case 'Edit':\n menuItem = { target: menuClass.content, iconCss: menuClass.editIcon };\n break;\n case 'Delete':\n menuItem = { target: menuClass.content, iconCss: menuClass.delete };\n break;\n case 'Save':\n menuItem = { target: menuClass.edit, iconCss: menuClass.save };\n break;\n case 'Cancel':\n menuItem = { target: menuClass.edit, iconCss: menuClass.cancel };\n break;\n case 'Copy':\n menuItem = { target: menuClass.content, iconCss: menuClass.copy };\n break;\n case 'export':\n menuItem = { target: menuClass.content };\n break;\n case 'PdfExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.pdf };\n break;\n case 'ExcelExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.excel };\n break;\n case 'CsvExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.csv };\n break;\n case 'SortAscending':\n menuItem = { target: menuClass.header, iconCss: menuClass.ascending };\n break;\n case 'SortDescending':\n menuItem = { target: menuClass.header, iconCss: menuClass.descending };\n break;\n case 'FirstPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.fPage };\n break;\n case 'PrevPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.pPage };\n break;\n case 'LastPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.lPage };\n break;\n case 'NextPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.nPage };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n target: menuItem.target, iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : ''\n };\n return this.defaultItems[item];\n };\n ContextMenu.prototype.getDefaultItems = function () {\n return ['AutoFitAll', 'AutoFit',\n 'Group', 'Ungroup', 'Edit', 'Delete', 'Save', 'Cancel', 'Copy', 'export',\n 'PdfExport', 'ExcelExport', 'CsvExport', 'SortAscending', 'SortDescending',\n 'FirstPage', 'PrevPage', 'LastPage', 'NextPage'];\n };\n ContextMenu.prototype.setLocaleKey = function () {\n return {\n 'AutoFitAll': 'autoFitAll',\n 'AutoFit': 'autoFit',\n 'Copy': 'Copy',\n 'Group': 'Group',\n 'Ungroup': 'Ungroup',\n 'Edit': 'EditRecord',\n 'Delete': 'DeleteRecord',\n 'Save': 'Save',\n 'Cancel': 'CancelButton',\n 'PdfExport': 'Pdfexport',\n 'ExcelExport': 'Excelexport',\n 'CsvExport': 'Csvexport',\n 'export': 'Export',\n 'SortAscending': 'SortAscending',\n 'SortDescending': 'SortDescending',\n 'FirstPage': 'FirstPage',\n 'LastPage': 'LastPage',\n 'PrevPage': 'PreviousPage',\n 'NextPage': 'NextPage'\n };\n };\n ContextMenu.prototype.getColumn = function (e) {\n var cell = closest(e.target, 'th.e-headercell');\n if (cell) {\n var uid = cell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ContextMenu.prototype.selectRow = function (e, isSelectable) {\n this.cell = e.target;\n this.row = closest(e.target, 'tr.e-row') || this.row;\n if (this.row && isSelectable && !parentsUntil(e.target, 'e-gridpager')) {\n this.parent.selectRow(parseInt(this.row.getAttribute('aria-rowindex'), 10));\n }\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { RowModelGenerator } from '../services/row-model-generator';\n/**\n * FreezeRowModelGenerator is used to generate grid data rows with freeze row and column.\n * @hidden\n */\nvar FreezeRowModelGenerator = /** @class */ (function () {\n function FreezeRowModelGenerator(parent) {\n this.isFrzLoad = 1;\n this.parent = parent;\n this.rowModelGenerator = new RowModelGenerator(this.parent);\n }\n FreezeRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var frzCols = this.parent.getFrozenColumns();\n var row = this.rowModelGenerator.generateRows(data, notifyArgs);\n for (var i = 0, len = row.length; i < len; i++) {\n if (this.isFrzLoad % 2 === 0) {\n row[i].cells = row[i].cells.slice(frzCols, row[i].cells.length);\n }\n else {\n row[i].cells = row[i].cells.slice(0, frzCols);\n }\n }\n this.isFrzLoad++;\n return row;\n };\n return FreezeRowModelGenerator;\n}());\nexport { FreezeRowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { remove, addClass } from '@syncfusion/ej2-base';\nimport { HeaderRender } from './header-renderer';\nimport { ContentRender } from './content-renderer';\nimport { FreezeRowModelGenerator } from '../services/freeze-row-model-generator';\nimport * as events from '../base/constant';\nimport { renderMovable, getScrollBarWidth } from '../base/util';\n/**\n * Freeze module is used to render grid content with frozen rows and columns\n * @hidden\n */\nvar FreezeContentRender = /** @class */ (function (_super) {\n __extends(FreezeContentRender, _super);\n function FreezeContentRender(parent, locator) {\n return _super.call(this, parent, locator) || this;\n }\n FreezeContentRender.prototype.renderPanel = function () {\n _super.prototype.renderPanel.call(this);\n var fDiv = this.parent.createElement('div', { className: 'e-frozencontent' });\n var mDiv = this.parent.createElement('div', { className: 'e-movablecontent' });\n this.getPanel().firstChild.appendChild(fDiv);\n this.getPanel().firstChild.appendChild(mDiv);\n this.setFrozenContent(fDiv);\n this.setMovableContent(mDiv);\n };\n FreezeContentRender.prototype.renderEmpty = function (tbody) {\n _super.prototype.renderEmpty.call(this, tbody);\n this.getMovableContent().querySelector('tbody').innerHTML = '';\n this.getFrozenContent().querySelector('.e-emptyrow').querySelector('td').colSpan = this.parent.getFrozenColumns();\n this.getFrozenContent().style.borderRightWidth = '0px';\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody').innerHTML = '';\n this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').innerHTML = '';\n }\n };\n FreezeContentRender.prototype.setFrozenContent = function (ele) {\n this.frozenContent = ele;\n };\n FreezeContentRender.prototype.setMovableContent = function (ele) {\n this.movableContent = ele;\n };\n FreezeContentRender.prototype.getFrozenContent = function () {\n return this.frozenContent;\n };\n FreezeContentRender.prototype.getMovableContent = function () {\n return this.movableContent;\n };\n FreezeContentRender.prototype.getModelGenerator = function () {\n return new FreezeRowModelGenerator(this.parent);\n };\n FreezeContentRender.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n this.getFrozenContent().appendChild(this.getTable());\n var mTbl = this.getTable().cloneNode(true);\n this.getMovableContent().appendChild(mTbl);\n remove(this.getMovableContent().querySelector('colgroup'));\n var colGroup = ((this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup')).cloneNode(true));\n mTbl.insertBefore(colGroup, mTbl.querySelector('tbody'));\n };\n return FreezeContentRender;\n}(ContentRender));\nexport { FreezeContentRender };\nvar FreezeRender = /** @class */ (function (_super) {\n __extends(FreezeRender, _super);\n function FreezeRender(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.addEventListener();\n return _this;\n }\n FreezeRender.prototype.addEventListener = function () {\n this.parent.on(events.freezeRender, this.refreshFreeze, this);\n this.parent.on(events.frozenHeight, this.setFrozenHeight, this);\n };\n FreezeRender.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.frozenHeight, this.setFrozenHeight);\n };\n FreezeRender.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n this.rfshMovable();\n this.updateColgroup();\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });\n };\n FreezeRender.prototype.renderPanel = function () {\n _super.prototype.renderPanel.call(this);\n var fDiv = this.parent.createElement('div', { className: 'e-frozenheader' });\n var mDiv = this.parent.createElement('div', { className: 'e-movableheader' });\n this.getPanel().firstChild.appendChild(fDiv);\n this.getPanel().firstChild.appendChild(mDiv);\n this.setFrozenHeader(fDiv);\n this.setMovableHeader(mDiv);\n };\n FreezeRender.prototype.refreshUI = function () {\n var tbody = this.getMovableHeader().querySelector('tbody');\n remove(this.getMovableHeader().querySelector('table'));\n _super.prototype.refreshUI.call(this);\n this.rfshMovable();\n this.getMovableHeader().querySelector('tbody').innerHTML = tbody.innerHTML;\n this.updateColgroup();\n this.parent.updateDefaultCursor();\n renderMovable(this.parent.getContentTable().querySelector('colgroup'), this.parent.getFrozenColumns());\n this.initializeHeaderDrag();\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });\n };\n FreezeRender.prototype.rfshMovable = function () {\n this.getFrozenHeader().appendChild(this.getTable());\n this.getMovableHeader().appendChild(this.createTable());\n this.refreshStackedHdrHgt();\n this.addMovableFirstCls();\n };\n FreezeRender.prototype.addMovableFirstCls = function () {\n if (this.parent.getVisibleFrozenColumns()) {\n var movablefirstcell = this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('.e-columnheader');\n var len = this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('.e-columnheader').length;\n for (var i = 0; i < len; i++) {\n var cells = 'cells';\n var element = movablefirstcell[i][cells][0];\n if (element) {\n addClass([element], ['e-movablefirst']);\n if (movablefirstcell[i][cells][0].rowSpan > 1) {\n i = i + (movablefirstcell[i][cells][0].rowSpan - 1);\n }\n }\n }\n }\n };\n FreezeRender.prototype.refreshFreeze = function (obj) {\n if (obj.case === 'filter') {\n var filterRow = this.getTable().querySelector('.e-filterbar');\n if (this.parent.allowFiltering && filterRow && this.getMovableHeader().querySelector('thead')) {\n this.getMovableHeader().querySelector('thead')\n .appendChild(renderMovable(filterRow, this.parent.getFrozenColumns()));\n }\n }\n else if (obj.case === 'textwrap') {\n var fRows = void 0;\n var mRows = void 0;\n var fHdr = this.getFrozenHeader();\n var mHdr = this.getMovableHeader();\n var cont = this.parent.getContent();\n var wrapMode = this.parent.textWrapSettings.wrapMode;\n var hdrClassList = this.parent.getHeaderContent().firstChild.classList;\n if (wrapMode !== 'Header' || obj.isModeChg) {\n fRows = cont.querySelector('.e-frozencontent').querySelectorAll('tr');\n mRows = cont.querySelector('.e-movablecontent').querySelectorAll('tr');\n this.setWrapHeight(fRows, mRows, obj.isModeChg, true);\n }\n if (wrapMode === 'Content' && this.parent.allowTextWrap) {\n hdrClassList.add('e-wrap');\n }\n else {\n hdrClassList.remove('e-wrap');\n }\n if (wrapMode === 'Both' || obj.isModeChg) {\n fRows = fHdr.querySelectorAll('tr');\n mRows = mHdr.querySelectorAll('tr');\n }\n else {\n fRows = fHdr.querySelector(wrapMode === 'Content' ? 'tbody' : 'thead').querySelectorAll('tr');\n mRows = mHdr.querySelector(wrapMode === 'Content' ? 'tbody' : 'thead').querySelectorAll('tr');\n }\n if (!this.parent.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.setWrapHeight(fRows, mRows, obj.isModeChg, false, this.colDepth > 1);\n }\n this.refreshStackedHdrHgt();\n }\n };\n FreezeRender.prototype.updateResizeHandler = function () {\n [].slice.call(this.parent.getHeaderContent().querySelectorAll('.e-rhandler')).forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n FreezeRender.prototype.setWrapHeight = function (fRows, mRows, isModeChg, isContReset, isStackedHdr) {\n var fRowHgt;\n var mRowHgt;\n var isWrap = this.parent.allowTextWrap;\n var wrapMode = this.parent.textWrapSettings.wrapMode;\n var tHead = this.parent.getHeaderContent().querySelector('thead');\n var tBody = this.parent.getHeaderContent().querySelector('tbody');\n var height = [];\n var width = [];\n for (var i = 0, len = fRows.length; i < len; i++) { //separate loop for performance issue \n height[i] = fRows[i].offsetHeight; //https://pagebuildersandwich.com/increased-plugins-performance-200/\n width[i] = mRows[i].offsetHeight;\n }\n for (var i = 0, len = fRows.length; i < len; i++) {\n if (isModeChg && ((wrapMode === 'Header' && isContReset) || ((wrapMode === 'Content' && tHead.contains(fRows[i]))\n || (wrapMode === 'Header' && tBody.contains(fRows[i])))) || isStackedHdr) {\n fRows[i].style.height = null;\n mRows[i].style.height = null;\n }\n fRowHgt = height[i];\n mRowHgt = width[i];\n if (fRows[i].childElementCount && ((isWrap && fRowHgt < mRowHgt) || (!isWrap && fRowHgt > mRowHgt) ||\n (this.parent.allowResizing && !this.parent.resizeModule.isFrozenColResized))) {\n fRows[i].style.height = mRowHgt + 'px';\n }\n if (mRows[i].childElementCount && ((isWrap && fRowHgt > mRowHgt) || (!isWrap && fRowHgt < mRowHgt) ||\n (this.parent.allowResizing && this.parent.resizeModule.isFrozenColResized))) {\n mRows[i].style.height = fRowHgt + 'px';\n }\n }\n if (isWrap) {\n this.setFrozenHeight();\n }\n };\n FreezeRender.prototype.setFrozenHeight = function () {\n var movableContentHeight = this.parent.element.querySelector('.e-movablecontent').getBoundingClientRect().height;\n var frozenContentHeight = this.parent.element.querySelector('.e-frozencontent').getBoundingClientRect().height;\n if (movableContentHeight > frozenContentHeight) {\n this.parent.element.querySelector('.e-frozencontent').style.height = movableContentHeight -\n getScrollBarWidth() + 'px';\n }\n };\n FreezeRender.prototype.refreshStackedHdrHgt = function () {\n var fRowSpan;\n var mRowSpan;\n var fTr = this.getFrozenHeader().querySelectorAll('.e-columnheader');\n var mTr = this.getMovableHeader().querySelectorAll('.e-columnheader');\n for (var i = 0, len = fTr.length; i < len; i++) {\n fRowSpan = this.getRowSpan(fTr[i]);\n mRowSpan = this.getRowSpan(mTr[i]);\n if (fRowSpan.min > 1) {\n this.updateStackedHdrRowHgt(i, fRowSpan.max, fTr[i], mTr);\n }\n else if (mRowSpan.min > 1) {\n this.updateStackedHdrRowHgt(i, mRowSpan.max, mTr[i], fTr);\n }\n }\n if (this.parent.allowResizing) {\n this.updateResizeHandler();\n }\n };\n FreezeRender.prototype.getRowSpan = function (row) {\n var rSpan;\n var minRowSpan;\n var maxRowSpan;\n for (var i = 0, len = row.childElementCount; i < len; i++) {\n if (i === 0) {\n minRowSpan = row.children[0].rowSpan;\n }\n rSpan = row.children[i].rowSpan;\n minRowSpan = Math.min(rSpan, minRowSpan);\n maxRowSpan = Math.max(rSpan, minRowSpan);\n }\n return { min: minRowSpan, max: maxRowSpan };\n };\n FreezeRender.prototype.updateStackedHdrRowHgt = function (idx, maxRowSpan, row, rows) {\n var height = 0;\n for (var i = 0; i < maxRowSpan; i++) {\n height += rows[idx + i].style.height ?\n parseInt(rows[idx + i].style.height, 10) : rows[idx + i].offsetHeight;\n }\n row.style.height = height + 'px';\n };\n FreezeRender.prototype.setFrozenHeader = function (ele) {\n this.frozenHeader = ele;\n };\n FreezeRender.prototype.setMovableHeader = function (ele) {\n this.movableHeader = ele;\n };\n FreezeRender.prototype.getFrozenHeader = function () {\n return this.frozenHeader;\n };\n FreezeRender.prototype.getMovableHeader = function () {\n return this.movableHeader;\n };\n FreezeRender.prototype.updateColgroup = function () {\n var mTable = this.getMovableHeader().querySelector('table');\n remove(this.getMovableHeader().querySelector('colgroup'));\n mTable.insertBefore(renderMovable(this.getFrozenHeader().querySelector('colgroup'), this.parent.getFrozenColumns()), mTable.querySelector('thead'));\n };\n return FreezeRender;\n}(HeaderRender));\nexport { FreezeRender };\n","import * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { parentsUntil } from '../base/util';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { FreezeRender, FreezeContentRender } from '../renderer/freeze-renderer';\n/**\n * `Freeze` module is used to handle Frozen rows and columns.\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n function Freeze(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n Freeze.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n Freeze.prototype.wireEvents = function () {\n if (this.parent.frozenRows) {\n EventHandler.add(this.parent.getHeaderContent(), 'dblclick', this.dblClickHandler, this);\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-grid').id !== this.parent.element.id) {\n return;\n }\n this.parent.notify(events.dblclick, e);\n };\n Freeze.prototype.instantiateRenderer = function () {\n var renderer = this.locator.getService('rendererFactory');\n if (this.parent.getFrozenColumns()) {\n renderer.addRenderer(RenderType.Header, new FreezeRender(this.parent, this.locator));\n renderer.addRenderer(RenderType.Content, new FreezeContentRender(this.parent, this.locator));\n }\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { EventHandler, closest, Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { parentsUntil } from '../base/util';\nimport * as events from '../base/constant';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Group } from '../actions/group';\nimport { Sort } from '../actions/sort';\nimport { Filter } from '../actions/filter';\nimport { Resize } from '../actions/resize';\n/**\n * 'column menu module used to handle column menu actions'\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n function ColumnMenu(parent, serviceLocator) {\n this.defaultItems = {};\n this.localeText = this.setLocaleKey();\n this.disableItems = [];\n this.hiddenItems = [];\n this.isOpen = false;\n // default class names\n this.GROUP = 'e-icon-group';\n this.UNGROUP = 'e-icon-ungroup';\n this.ASCENDING = 'e-icon-ascending';\n this.DESCENDING = 'e-icon-descending';\n this.ROOT = 'e-columnmenu';\n this.FILTER = 'e-icon-filter';\n this.POP = 'e-filter-popup';\n this.WRAP = 'e-col-menu';\n this.CHOOSER = '_chooser_';\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n ColumnMenu.prototype.wireEvents = function () {\n var _this = this;\n this.getColumnMenuHandlers().forEach(function (ele) {\n EventHandler.add(ele, 'mousedown', _this.columnMenuHandlerDown, _this);\n });\n };\n ColumnMenu.prototype.unwireEvents = function () {\n var _this = this;\n this.getColumnMenuHandlers().forEach(function (ele) {\n EventHandler.remove(ele, 'mousedown', _this.columnMenuHandlerDown);\n });\n };\n /**\n * To destroy the resize\n * @return {void}\n * @hidden\n */\n ColumnMenu.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.columnMenu.destroy();\n this.removeEventListener();\n this.unwireFilterEvents();\n this.unwireEvents();\n remove(this.element);\n };\n ColumnMenu.prototype.columnMenuHandlerClick = function (e) {\n if (e.target.classList.contains('e-columnmenu')) {\n if ((this.isOpen && this.headerCell !== this.getHeaderCell(e)) || document.querySelector('.e-grid-menu .e-menu-parent.e-ul')) {\n this.columnMenu.close();\n this.openColumnMenu(e);\n }\n else if (!this.isOpen) {\n this.openColumnMenu(e);\n }\n else {\n this.columnMenu.close();\n }\n }\n };\n ColumnMenu.prototype.openColumnMenu = function (e) {\n var pos = { top: 0, left: 0 };\n this.element.style.cssText = 'display:block;visibility:hidden';\n var elePos = this.element.getBoundingClientRect();\n this.element.style.cssText = 'display:none;visibility:visible';\n this.headerCell = this.getHeaderCell(e);\n if (Browser.isDevice) {\n pos.top = ((window.innerHeight / 2) - (elePos.height / 2));\n pos.left = ((window.innerWidth / 2) - (elePos.width / 2));\n }\n else {\n if (this.parent.enableRtl) {\n pos = calculatePosition(this.headerCell, 'left', 'bottom');\n }\n else {\n pos = calculatePosition(this.headerCell, 'right', 'bottom');\n pos.left -= elePos.width;\n }\n }\n this.columnMenu.open(pos.top, pos.left);\n e.preventDefault();\n };\n ColumnMenu.prototype.columnMenuHandlerDown = function (e) {\n this.isOpen = !(this.element.style.display === 'none' || this.element.style.display === '');\n };\n ColumnMenu.prototype.getColumnMenuHandlers = function () {\n return [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + this.ROOT));\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerRefreshed, this.wireEvents, this);\n this.parent.on(events.uiUpdate, this.enableAfterRenderMenu, this);\n this.parent.on(events.initialEnd, this.render, this);\n if (this.isFilterItemAdded()) {\n this.parent.on(events.filterDialogCreated, this.filterPosition, this);\n }\n this.parent.on(events.click, this.columnMenuHandlerClick, this);\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.headerRefreshed, this.unwireEvents);\n this.parent.off(events.uiUpdate, this.enableAfterRenderMenu);\n this.parent.off(events.initialEnd, this.render);\n if (this.isFilterItemAdded()) {\n this.parent.off(events.filterDialogCreated, this.filterPosition);\n }\n this.parent.off(events.click, this.columnMenuHandlerClick);\n };\n ColumnMenu.prototype.enableAfterRenderMenu = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n if (this.columnMenu) {\n this.columnMenu.destroy();\n remove(this.element);\n }\n this.render();\n }\n };\n ColumnMenu.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.element = this.parent.createElement('ul', { id: this.gridID + '_columnmenu', className: 'e-colmenu' });\n this.parent.element.appendChild(this.element);\n this.columnMenu = new Menu({\n cssClass: 'e-grid-menu',\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n items: this.getItems(),\n select: this.columnMenuItemClick.bind(this),\n beforeOpen: this.columnMenuBeforeOpen.bind(this),\n onClose: this.columnMenuOnClose.bind(this),\n beforeItemRender: this.beforeMenuItemRender.bind(this),\n beforeClose: this.columnMenuBeforeClose.bind(this)\n });\n this.columnMenu.appendTo(this.element);\n this.wireFilterEvents();\n };\n ColumnMenu.prototype.wireFilterEvents = function () {\n if (!Browser.isDevice && this.isFilterItemAdded()) {\n EventHandler.add(this.element, 'mouseover', this.appendFilter, this);\n }\n };\n ColumnMenu.prototype.unwireFilterEvents = function () {\n if (!Browser.isDevice && this.isFilterItemAdded()) {\n EventHandler.remove(this.element, 'mouseover', this.appendFilter);\n }\n };\n ColumnMenu.prototype.beforeMenuItemRender = function (args) {\n if (this.isChooserItem(args.item)) {\n var field = this.getKeyFromId(args.item.id, this.CHOOSER);\n var column = this.parent.getColumnByField(field);\n var check = createCheckBox(this.parent.createElement, false, {\n label: args.item.text,\n checked: column.visible\n });\n if (this.parent.enableRtl) {\n check.classList.add('e-rtl');\n }\n args.element.innerHTML = '';\n args.element.appendChild(check);\n }\n else if (args.item.id && this.getKeyFromId(args.item.id) === 'Filter') {\n args.element.appendChild(this.parent.createElement('span', { className: 'e-icons e-caret' }));\n args.element.className += 'e-filter-item e-menu-caret-icon';\n }\n };\n ColumnMenu.prototype.columnMenuBeforeClose = function (args) {\n var colChooser = args.event ? closest(args.event.target, '.e-menu-item') : null;\n if (!isNullOrUndefined(args.parentItem) &&\n this.getKeyFromId(args.parentItem.id) === 'ColumnChooser' &&\n colChooser && this.isChooserItem(colChooser)) {\n args.cancel = true;\n }\n else if (args.event && (closest(args.event.target, '.' + this.POP)\n || (args.event.currentTarget && args.event.currentTarget.activeElement &&\n parentsUntil(args.event.currentTarget.activeElement, 'e-filter-popup'))\n || parentsUntil(args.event.target, 'e-popup') ||\n (parentsUntil(args.event.target, 'e-popup-wrapper'))) && !Browser.isDevice) {\n args.cancel = true;\n }\n };\n ColumnMenu.prototype.isChooserItem = function (item) {\n return item.id && item.id.indexOf('_colmenu_') >= 0 &&\n this.getKeyFromId(item.id, this.CHOOSER).indexOf('_colmenu_') === -1;\n };\n ColumnMenu.prototype.columnMenuBeforeOpen = function (args) {\n args.column = this.targetColumn = this.getColumn();\n this.parent.trigger(events.columnMenuOpen, args);\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (this.ensureDisabledStatus(key) && !dItem.hide) {\n this.disableItems.push(item.text);\n }\n else if (item.hide) {\n this.hiddenItems.push(item.text);\n }\n }\n }\n this.columnMenu.enableItems(this.disableItems, false);\n this.columnMenu.hideItems(this.hiddenItems);\n };\n ColumnMenu.prototype.ensureDisabledStatus = function (item) {\n var _this = this;\n var status = false;\n switch (item) {\n case 'Group':\n if (!this.parent.allowGrouping || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) >= 0)) {\n status = true;\n }\n break;\n case 'AutoFitAll':\n case 'AutoFit':\n status = !this.parent.ensureModuleInjected(Resize);\n break;\n case 'Ungroup':\n if (!this.parent.ensureModuleInjected(Group) || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) < 0)) {\n status = true;\n }\n break;\n case 'SortDescending':\n case 'SortAscending':\n if (this.parent.allowSorting && this.parent.ensureModuleInjected(Sort)\n && this.parent.sortSettings.columns.length > 0 && this.targetColumn) {\n this.parent.sortSettings.columns.forEach(function (ele) {\n if (ele.field === _this.targetColumn.field\n && ele.direction.toLocaleLowerCase() === item.toLocaleLowerCase().replace('sort', '')) {\n status = true;\n }\n });\n }\n else if (!this.parent.allowSorting || !this.parent.ensureModuleInjected(Sort)) {\n status = true;\n }\n break;\n case 'Filter':\n status = !(this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar')\n && this.parent.ensureModuleInjected(Filter));\n }\n return status;\n };\n ColumnMenu.prototype.columnMenuItemClick = function (args) {\n var item = this.isChooserItem(args.item) ? 'ColumnChooser' : this.getKeyFromId(args.item.id);\n switch (item) {\n case 'AutoFit':\n this.parent.autoFitColumns(this.targetColumn.field);\n break;\n case 'AutoFitAll':\n this.parent.autoFitColumns([]);\n break;\n case 'Ungroup':\n this.parent.ungroupColumn(this.targetColumn.field);\n break;\n case 'Group':\n this.parent.groupColumn(this.targetColumn.field);\n break;\n case 'SortAscending':\n this.parent.sortColumn(this.targetColumn.field, 'Ascending');\n break;\n case 'SortDescending':\n this.parent.sortColumn(this.targetColumn.field, 'Descending');\n break;\n case 'ColumnChooser':\n var key = this.getKeyFromId(args.item.id, this.CHOOSER);\n var checkbox = args.element.querySelector('.e-checkbox-wrapper .e-frame');\n if (checkbox && checkbox.classList.contains('e-check')) {\n checkbox.classList.remove('e-check');\n this.parent.hideColumns(key, 'field');\n }\n else if (checkbox) {\n this.parent.showColumns(key, 'field');\n checkbox.classList.add('e-check');\n }\n break;\n case 'Filter':\n this.getFilter(args.element, args.item.id);\n break;\n }\n args.column = this.targetColumn;\n this.parent.trigger(events.columnMenuClick, args);\n };\n ColumnMenu.prototype.columnMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.columnMenu.enableItems(this.disableItems);\n this.disableItems = [];\n this.columnMenu.showItems(this.hiddenItems);\n this.hiddenItems = [];\n if (this.isFilterPopupOpen()) {\n this.getFilter(args.element, args.element.id, true);\n }\n }\n };\n ColumnMenu.prototype.getDefaultItems = function () {\n return ['AutoFitAll', 'AutoFit', 'SortAscending', 'SortDescending', 'Group', 'Ungroup', 'ColumnChooser', 'Filter'];\n };\n ColumnMenu.prototype.getItems = function () {\n var items = [];\n var defultItems = this.parent.columnMenuItems ? this.parent.columnMenuItems : this.getDefault();\n for (var _i = 0, defultItems_1 = defultItems; _i < defultItems_1.length; _i++) {\n var item = defultItems_1[_i];\n if (typeof item === 'string') {\n if (item === 'ColumnChooser') {\n var col = this.getDefaultItem(item);\n col.items = this.createChooserItems();\n items.push(col);\n }\n else {\n items.push(this.getDefaultItem(item));\n }\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n ColumnMenu.prototype.getDefaultItem = function (item) {\n var menuItem = {};\n switch (item) {\n case 'SortAscending':\n menuItem = { iconCss: this.ASCENDING };\n break;\n case 'SortDescending':\n menuItem = { iconCss: this.DESCENDING };\n break;\n case 'Group':\n menuItem = { iconCss: this.GROUP };\n break;\n case 'Ungroup':\n menuItem = { iconCss: this.UNGROUP };\n break;\n case 'Filter':\n menuItem = { iconCss: this.FILTER };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : null\n };\n return this.defaultItems[item];\n };\n ColumnMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n ColumnMenu.prototype.generateID = function (item, append) {\n return this.gridID + '_colmenu_' + (append ? append + item : item);\n };\n ColumnMenu.prototype.getKeyFromId = function (id, append) {\n return id.indexOf('_colmenu_') > 0 &&\n id.replace(this.gridID + '_colmenu_' + (append ? append : ''), '');\n };\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.element;\n };\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n ColumnMenu.prototype.setLocaleKey = function () {\n return {\n 'AutoFitAll': 'autoFitAll',\n 'AutoFit': 'autoFit',\n 'Group': 'Group',\n 'Ungroup': 'Ungroup',\n 'SortAscending': 'SortAscending',\n 'SortDescending': 'SortDescending',\n 'ColumnChooser': 'Columnchooser',\n 'Filter': 'FilterMenu'\n };\n };\n ColumnMenu.prototype.getHeaderCell = function (e) {\n return closest(e.target, 'th.e-headercell');\n };\n ColumnMenu.prototype.getColumn = function () {\n if (this.headerCell) {\n var uid = this.headerCell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ColumnMenu.prototype.createChooserItems = function () {\n var items = [];\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.showInColumnChooser && col.field) {\n items.push({ id: this.generateID(col.field, this.CHOOSER), text: col.headerText ? col.headerText : col.field });\n }\n }\n return items;\n };\n ColumnMenu.prototype.appendFilter = function (e) {\n var filter = 'Filter';\n if (!this.defaultItems[filter]) {\n return;\n }\n else {\n var key = this.defaultItems[filter].id;\n if (closest(e.target, '#' + key) && !this.isFilterPopupOpen()) {\n this.getFilter(e.target, key);\n }\n else if (!closest(e.target, '#' + key) && this.isFilterPopupOpen()) {\n this.getFilter(e.target, key, true);\n }\n }\n };\n ColumnMenu.prototype.getFilter = function (target, id, isClose) {\n var filterPopup = this.getFilterPop();\n if (filterPopup) {\n filterPopup.style.display = !Browser.isDevice && isClose ? 'none' : 'block';\n }\n else {\n this.parent.notify(events.filterOpen, {\n col: this.targetColumn, target: target, isClose: isClose, id: id\n });\n }\n };\n ColumnMenu.prototype.setPosition = function (li, ul) {\n var gridPos = this.parent.element.getBoundingClientRect();\n var liPos = li.getBoundingClientRect();\n var left = liPos.left - gridPos.left;\n var top = liPos.top - gridPos.top;\n if (gridPos.height < top) {\n top = top - ul.offsetHeight + liPos.height;\n }\n else if (gridPos.height < top + ul.offsetHeight) {\n top = gridPos.height - ul.offsetHeight;\n }\n if (window.innerHeight < ul.offsetHeight + top + gridPos.top) {\n top = window.innerHeight - ul.offsetHeight - gridPos.top;\n }\n left += (this.parent.enableRtl ? -ul.offsetWidth : liPos.width);\n if (gridPos.width <= left + ul.offsetWidth) {\n left -= liPos.width + ul.offsetWidth;\n }\n else if (left < 0) {\n left += ul.offsetWidth + liPos.width;\n }\n ul.style.top = top + 'px';\n ul.style.left = left + 'px';\n };\n ColumnMenu.prototype.filterPosition = function (e) {\n var filterPopup = this.getFilterPop();\n filterPopup.classList.add(this.WRAP);\n if (!Browser.isDevice) {\n var disp = filterPopup.style.display;\n filterPopup.style.cssText += 'display:block;visibility:hidden';\n var li = this.element.querySelector('.' + this.FILTER);\n if (li) {\n this.setPosition(li.parentElement, filterPopup);\n filterPopup.style.cssText += 'display:' + disp + ';visibility:visible';\n }\n }\n };\n ColumnMenu.prototype.getDefault = function () {\n var items = [];\n if (this.parent.ensureModuleInjected(Resize)) {\n items.push('AutoFitAll');\n items.push('AutoFit');\n }\n if (this.parent.allowGrouping && this.parent.ensureModuleInjected(Group)) {\n items.push('Group');\n items.push('Ungroup');\n }\n if (this.parent.allowSorting && this.parent.ensureModuleInjected(Sort)) {\n items.push('SortAscending');\n items.push('SortDescending');\n }\n items.push('ColumnChooser');\n if (this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar') &&\n this.parent.ensureModuleInjected(Filter)) {\n items.push('Filter');\n }\n return items;\n };\n ColumnMenu.prototype.isFilterPopupOpen = function () {\n var filterPopup = this.getFilterPop();\n return filterPopup && filterPopup.style.display !== 'none';\n };\n ColumnMenu.prototype.getFilterPop = function () {\n return this.parent.element.querySelector('.' + this.POP);\n };\n ColumnMenu.prototype.isFilterItemAdded = function () {\n return (this.parent.columnMenuItems &&\n this.parent.columnMenuItems.indexOf('Filter') >= 0) || !this.parent.columnMenuItems;\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { initForeignKeyColumn, getForeignKeyData, generateQuery } from '../base/constant';\nimport { getDatePredicate } from '../base/util';\nimport { Data } from './data';\n/**\n * `ForeignKey` module is used to handle foreign key column's actions.\n */\nvar ForeignKey = /** @class */ (function (_super) {\n __extends(ForeignKey, _super);\n function ForeignKey(parent, serviceLocator) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.initEvent();\n return _this;\n }\n ForeignKey.prototype.initEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initForeignKeyColumn, this.initForeignKeyColumns, this);\n this.parent.on(getForeignKeyData, this.getForeignKeyData, this);\n this.parent.on(generateQuery, this.generateQueryFormData, this);\n };\n ForeignKey.prototype.initForeignKeyColumns = function (columns) {\n columns.forEach(function (column) {\n column.dataSource = (column.dataSource instanceof DataManager ? column.dataSource :\n (isNullOrUndefined(column.dataSource) ? new DataManager() : new DataManager(column.dataSource)));\n });\n };\n ForeignKey.prototype.getForeignKeyData = function (args) {\n var _this = this;\n var foreignColumns = args.column ? [args.column] : this.parent.getForeignKeyColumns();\n var allPromise = [];\n foreignColumns.forEach(function (col) {\n var promise;\n var query = args.isComplex ? _this.genarateColumnQuery(col) :\n _this.genarateQuery(col, args.result.result, false, true);\n var dataSource = col.dataSource;\n if (!dataSource.ready || dataSource.dataSource.offline) {\n promise = dataSource.executeQuery(query);\n }\n else {\n promise = dataSource.ready.then(function () {\n return dataSource.executeQuery(query);\n });\n }\n allPromise.push(promise);\n });\n Promise.all(allPromise).then(function (responses) {\n responses.forEach(function (data, index) {\n foreignColumns[index].columnData = data.result;\n });\n args.promise.resolve(args.result);\n }).catch(function (e) {\n if (args.promise && args.promise.reject) {\n args.promise.reject(e);\n }\n return e;\n });\n };\n ForeignKey.prototype.generateQueryFormData = function (args) {\n args.predicate.predicate = this.genarateQuery(args.column, args.column.columnData, true);\n };\n ForeignKey.prototype.genarateQuery = function (column, e, fromData, needQuery) {\n var gObj = this.parent;\n var predicates = [];\n var predicate;\n var query = new Query();\n var field = fromData ? column.foreignKeyField : column.field;\n if (gObj.allowPaging || gObj.enableVirtualization || fromData) {\n e = new DataManager(((gObj.allowGrouping && gObj.groupSettings.columns.length && !fromData) ?\n e.records : e)).executeLocal(new Query().select(field));\n var filteredValue = DataUtil.distinct(e, field, false);\n field = fromData ? column.field : column.foreignKeyField;\n filteredValue.forEach(function (obj) {\n if (obj && obj.getDay) {\n predicates.push(getDatePredicate({ field: field, operator: 'equal', value: obj, matchCase: false }));\n }\n else {\n predicates.push(new Predicate(field, 'equal', obj, false));\n }\n });\n }\n if (needQuery) {\n return predicates.length ? query.where(Predicate.or(predicates)) : query;\n }\n predicate = (predicates.length ? Predicate.or(predicates) : { predicates: [] });\n return predicate;\n };\n ForeignKey.prototype.genarateColumnQuery = function (column) {\n var gObj = this.parent;\n var query = new Query();\n var predicate = [];\n var queryColumn = this.isFiltered(column);\n if (queryColumn.isTrue) {\n query = this.filterQuery(query, queryColumn.column, true);\n }\n if (gObj.searchSettings.key.length) {\n var sSettings = gObj.searchSettings;\n query.search(sSettings.key, column.foreignKeyValue, sSettings.operator, sSettings.ignoreCase);\n }\n return query;\n };\n ForeignKey.prototype.isFiltered = function (column) {\n var filterColumn = this.parent.filterSettings.columns.filter(function (fColumn) {\n return (fColumn.field === column.foreignKeyValue);\n });\n return {\n column: filterColumn, isTrue: !!filterColumn.length\n };\n };\n ForeignKey.prototype.getModuleName = function () {\n return 'foreignKey';\n };\n ForeignKey.prototype.destroy = function () {\n this.destroyEvent();\n };\n ForeignKey.prototype.destroyEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(initForeignKeyColumn, this.initForeignKeyColumns);\n this.parent.off(getForeignKeyData, this.getForeignKeyData);\n this.parent.off(generateQuery, this.generateQueryFormData);\n };\n return ForeignKey;\n}(Data));\nexport { ForeignKey };\n","import * as index from '@syncfusion/ej2-grids';\nindex.Grid.Inject( index.Filter,index.Page,index.Selection,index.Sort,index.Group,index.Reorder,index.RowDD,index.DetailRow,index.Toolbar,index.Aggregate,index.Search,index.VirtualScroll,index.Edit,index.Resize,index.ExcelExport,index.PdfExport,index.CommandColumn,index.ContextMenu,index.Freeze,index.ColumnMenu,index.ColumnChooser,index.ForeignKey);\nexport * from '@syncfusion/ej2-grids';\n","/**\n * Specifies HeatMaps Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.heatMapTitleFont = {\n size: '15px',\n fontWeight: '500',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisTitleFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI',\n textOverflow: 'None',\n };\n /** @private */\n Theme.rectLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI',\n textOverflow: 'None',\n };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n heatMapTitle: '#ffffff',\n axisTitle: '#ffffff',\n axisLabel: '#ffffff',\n cellBorder: '#EEEEEE',\n background: '#000000',\n cellTextColor: '#000000',\n emptyCellColor: '#EEEEEE',\n legendLabel: '#ffffff',\n palette: [{ 'color': '#BEE7EE' },\n { 'color': '#85c4cf' },\n { 'color': '#4CA1AF' }]\n };\n break;\n default:\n style = {\n heatMapTitle: '#424242',\n axisTitle: '#424242',\n axisLabel: '#686868',\n cellBorder: '#EEEEEE',\n cellTextColor: '#000000',\n background: '#FFFFFF',\n emptyCellColor: '#EEEEEE',\n legendLabel: '#353535',\n palette: [{ 'color': '#BEE7EE' },\n { 'color': '#85c4cf' },\n { 'color': '#4CA1AF' }]\n };\n break;\n }\n return style;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Configures the fonts in heat map.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property('Center')\n ], Font.prototype, \"textAlignment\", void 0);\n __decorate([\n Property('Trim')\n ], Font.prototype, \"textOverflow\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the heat map margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the borders in the heat map.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Border.prototype, \"radius\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the mapping name for size and color in SizeAndColor type.\n */\nvar BubbleData = /** @class */ (function (_super) {\n __extends(BubbleData, _super);\n function BubbleData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], BubbleData.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], BubbleData.prototype, \"color\", void 0);\n return BubbleData;\n}(ChildProperty));\nexport { BubbleData };\n/**\n * class used to maintain Title styles.\n */\nvar Title = /** @class */ (function (_super) {\n __extends(Title, _super);\n function Title() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Title.prototype, \"text\", void 0);\n __decorate([\n Complex({}, Font)\n ], Title.prototype, \"textStyle\", void 0);\n return Title;\n}(ChildProperty));\nexport { Title };\n/**\n * class used to maintain palette information.\n */\nvar PaletteCollection = /** @class */ (function (_super) {\n __extends(PaletteCollection, _super);\n function PaletteCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], PaletteCollection.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], PaletteCollection.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], PaletteCollection.prototype, \"label\", void 0);\n return PaletteCollection;\n}(ChildProperty));\nexport { PaletteCollection };\n/**\n * Internal class used to maintain colorcollection.\n */\nvar ColorCollection = /** @class */ (function () {\n function ColorCollection(value, color, label) {\n this.value = value;\n this.color = color;\n this.label = label;\n }\n return ColorCollection;\n}());\nexport { ColorCollection };\n/**\n * class used to maintain color and value collection.\n */\nvar BubbleTooltipData = /** @class */ (function () {\n function BubbleTooltipData(mappingName, bubbleData, valueType) {\n this.mappingName = mappingName;\n this.bubbleData = bubbleData;\n this.valueType = valueType;\n }\n return BubbleTooltipData;\n}());\nexport { BubbleTooltipData };\n/**\n * Internal class used to maintain legend colorcollection.\n */\nvar LegendColorCollection = /** @class */ (function () {\n function LegendColorCollection(value, color, label, isHidden) {\n this.value = value;\n this.color = color;\n this.label = label;\n this.isHidden = isHidden;\n }\n return LegendColorCollection;\n}());\nexport { LegendColorCollection };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, extend, ChildProperty, Collection, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ColorCollection, LegendColorCollection, PaletteCollection } from '../model/base';\nimport { PaletterColor } from './helper';\n/**\n * Configures the color property in Heatmap.\n */\nvar PaletteSettings = /** @class */ (function (_super) {\n __extends(PaletteSettings, _super);\n function PaletteSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([{}], PaletteCollection)\n ], PaletteSettings.prototype, \"palette\", void 0);\n __decorate([\n Property('Gradient')\n ], PaletteSettings.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], PaletteSettings.prototype, \"emptyPointColor\", void 0);\n return PaletteSettings;\n}(ChildProperty));\nexport { PaletteSettings };\n/**\n * Helper class for colormapping\n */\nvar RgbColor = /** @class */ (function () {\n function RgbColor(r, g, b) {\n this.R = r;\n this.G = g;\n this.B = b;\n }\n return RgbColor;\n}());\nexport { RgbColor };\nvar CellColor = /** @class */ (function () {\n function CellColor(heatMap) {\n this.heatMap = heatMap;\n }\n /**\n * To convert hexa color to RGB.\n * @return {RGB}\n * @private\n */\n CellColor.prototype.convertToRGB = function (value, colorMapping) {\n var previousOffset = colorMapping[0].value;\n var nextOffset = 0;\n for (var i = 1; i < colorMapping.length; i++) {\n var offset = Number(colorMapping[i].value);\n if (value <= offset) {\n nextOffset = offset;\n break;\n }\n else {\n nextOffset = offset;\n previousOffset = offset;\n }\n }\n var percent = 0;\n var full = nextOffset - previousOffset;\n percent = (value - previousOffset) / full;\n var previousColor = this.getEqualColor(colorMapping, previousOffset);\n var nextColor = this.getEqualColor(colorMapping, nextOffset);\n return this.getPercentageColor(percent, previousColor, nextColor);\n };\n /**\n * To convert RGB to HEX.\n * @return {string}\n * @private\n */\n CellColor.prototype.rgbToHex = function (r, g, b) {\n return '#' + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\n };\n /**\n * To convert Component to HEX.\n * @return {string}\n * @private\n */\n CellColor.prototype.componentToHex = function (c) {\n var hex = c.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n /**\n * To get similar color.\n * @return {string}\n * @private\n */\n CellColor.prototype.getEqualColor = function (list, offset) {\n for (var i = 0; i < list.length; i++) {\n if (Number(list[i].value) === offset) {\n var color = list[i].color;\n if (color.indexOf('rgb') !== -1) {\n color = this.convertToHex(color);\n }\n else if (color.indexOf('#') === -1) {\n color = '#FFFFFF';\n }\n return color;\n }\n }\n return '#00000';\n };\n /**\n * To convert RGB to HEX.\n * @return {string}\n * @private\n */\n CellColor.prototype.convertToHex = function (color) {\n var itemColor = color.substr(3);\n itemColor = itemColor.split('(')[1].split(')')[0];\n var colorSplit = itemColor.split(',');\n itemColor = this.rgbToHex(parseInt(colorSplit[0], 10), parseInt(colorSplit[1], 10), parseInt(colorSplit[2], 10));\n return itemColor;\n };\n /**\n * To get RGB for percentage value.\n * @return {RGB}\n * @private\n */\n CellColor.prototype.getPercentageColor = function (percent, previous, next) {\n var nextColor = next.split('#')[1];\n var prevColor = previous.split('#')[1];\n var r = this.getPercentage(percent, parseInt(prevColor.substr(0, 2), 16), parseInt(nextColor.substr(0, 2), 16));\n var g = this.getPercentage(percent, parseInt(prevColor.substr(2, 2), 16), parseInt(nextColor.substr(2, 2), 16));\n var b = this.getPercentage(percent, parseInt(prevColor.substr(4, 2), 16), parseInt(nextColor.substr(4, 2), 16));\n return new RgbColor(r, g, b);\n };\n /**\n * To convert numbet to percentage.\n * @return {RGB}\n * @private\n */\n CellColor.prototype.getPercentage = function (percent, previous, next) {\n var full = next - previous;\n return Math.round((previous + (full * percent)));\n };\n /**\n * To get complete color Collection.\n * @private\n */\n CellColor.prototype.getColorCollection = function () {\n var heatMap = this.heatMap;\n heatMap.colorCollection = [];\n heatMap.legendColorCollection = [];\n var range;\n var minValue = heatMap.bubbleSizeWithColor ? heatMap.minColorValue : heatMap.dataSourceMinValue;\n var maxValue = heatMap.bubbleSizeWithColor ? heatMap.maxColorValue : heatMap.dataSourceMaxValue;\n heatMap.emptyPointColor = heatMap.paletteSettings.emptyPointColor ? heatMap.paletteSettings.emptyPointColor :\n heatMap.themeStyle.emptyCellColor;\n var tempcolorMapping = this.orderbyOffset(heatMap.paletteSettings.palette && heatMap.paletteSettings.palette.length > 1 ?\n heatMap.paletteSettings.palette : heatMap.themeStyle.palette);\n if (!tempcolorMapping.isCompact) {\n if (heatMap.paletteSettings.type === 'Gradient') {\n range = (maxValue - minValue) / (tempcolorMapping.offsets.length - 1);\n }\n else {\n range = (maxValue - minValue) / (tempcolorMapping.offsets.length);\n }\n if (tempcolorMapping.offsets.length >= 2) {\n for (var index = 0; index < tempcolorMapping.offsets.length; index++) {\n heatMap.colorCollection.push(new ColorCollection(Math.round(((minValue) + (index * range)) * 100) / 100, tempcolorMapping.offsets[index].color, tempcolorMapping.offsets[index].label));\n heatMap.legendColorCollection.push(new LegendColorCollection(Math.round(((minValue) + (index * range)) * 100) / 100, tempcolorMapping.offsets[index].color, tempcolorMapping.offsets[index].label, false));\n }\n }\n }\n else {\n heatMap.colorCollection = tempcolorMapping.offsets;\n heatMap.legendColorCollection = extend([], tempcolorMapping.offsets, null, true);\n }\n this.updateLegendColorCollection(minValue, maxValue);\n };\n /**\n * To update legend color Collection.\n * @private\n */\n CellColor.prototype.updateLegendColorCollection = function (minValue, maxValue) {\n if (minValue < this.heatMap.legendColorCollection[0].value) {\n this.heatMap.legendColorCollection.unshift(new LegendColorCollection(minValue, this.heatMap.legendColorCollection[0].color, this.heatMap.legendColorCollection[0].label, true));\n }\n if (maxValue > this.heatMap.legendColorCollection[this.heatMap.legendColorCollection.length - 1].value) {\n this.heatMap.legendColorCollection.push(new LegendColorCollection(maxValue, this.heatMap.legendColorCollection[this.heatMap.legendColorCollection.length - 1].color, this.heatMap.legendColorCollection[this.heatMap.legendColorCollection.length - 1].label, true));\n }\n };\n /**\n * To get ordered palette color collection.\n * @private\n */\n CellColor.prototype.orderbyOffset = function (offsets) {\n var returnCollection = new PaletterColor();\n var key = 'value';\n returnCollection.isCompact = true;\n // tslint:disable-next-line:no-any \n returnCollection.offsets = offsets.sort(function (a, b) {\n if (!isNullOrUndefined(a[key]) && !isNullOrUndefined(b[key])) {\n return a[key] - b[key];\n }\n else {\n returnCollection.isCompact = false;\n return a;\n }\n });\n if (!returnCollection.isCompact) {\n returnCollection.offsets = this.heatMap.paletteSettings.palette && this.heatMap.paletteSettings.palette.length > 1 ?\n this.heatMap.paletteSettings.palette : this.heatMap.themeStyle.palette;\n }\n return returnCollection;\n };\n /**\n * To get color depends to value.\n * @private\n */\n CellColor.prototype.getColorByValue = function (text) {\n var color = '';\n var rbg;\n var compareValue = 0;\n if (text.toString() !== '') {\n if (this.heatMap.cellSettings.tileType === 'Bubble' &&\n (this.heatMap.cellSettings.bubbleType === 'Size' || this.heatMap.cellSettings.bubbleType === 'Sector')) {\n color = this.heatMap.colorCollection[0].color;\n }\n else if (this.heatMap.paletteSettings.type === 'Fixed') {\n for (var y = 0; y < this.heatMap.colorCollection.length; y++) {\n compareValue = this.heatMap.colorCollection[y + 1] ? this.heatMap.colorCollection[y + 1].value :\n this.heatMap.colorCollection[y].value;\n if (text < compareValue || (text >= compareValue && y === this.heatMap.colorCollection.length - 1)) {\n color = this.heatMap.colorCollection[y].color;\n break;\n }\n }\n }\n else {\n if (text < this.heatMap.colorCollection[0].value) {\n color = this.heatMap.colorCollection[0].color;\n }\n else if (text > this.heatMap.colorCollection[this.heatMap.colorCollection.length - 1].value) {\n color = this.heatMap.colorCollection[this.heatMap.colorCollection.length - 1].color;\n }\n else {\n rbg = this.convertToRGB(text, this.heatMap.colorCollection);\n color = this.rgbToHex(rbg.R, rbg.G, rbg.B);\n }\n }\n }\n else {\n color = this.heatMap.emptyPointColor;\n }\n return color;\n };\n return CellColor;\n}());\nexport { CellColor };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * HeatMap Axis file\n */\nimport { Property, Complex, ChildProperty, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { Font, Title } from '../model/base';\nimport { Theme } from '../model/theme';\nimport { Rect, measureText, Size, rotateTextSize, increaseDateTimeInterval } from '../utils/helper';\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.rect = new Rect(undefined, undefined, 0, 0);\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n /** @private */\n _this.maxLabelSize = new Size(0, 0);\n /** @private */\n _this.titleSize = new Size(0, 0);\n /** @private */\n _this.axisLabels = [];\n /** @private */\n _this.tooltipLabels = [];\n /** @private */\n _this.labelValue = [];\n /** @private */\n _this.axisLabelSize = 0;\n /** @private */\n _this.axisLabelInterval = 0;\n /** @private */\n _this.dateTimeAxisLabelInterval = [];\n /** @private */\n _this.maxLength = 0;\n /** @private */\n _this.min = 0;\n /** @private */\n _this.max = 0;\n /** @private */\n _this.isIntersect = false;\n return _this;\n }\n /**\n * measure the axis title and label size\n * @param axis\n * @param heatmap\n * @private\n */\n Axis.prototype.computeSize = function (axis, heatmap) {\n var width = 0;\n var innerPadding = 10;\n this.titleSize = axis.getTitleSize(axis, innerPadding);\n this.maxLabelSize = axis.getMaxLabelSize(axis, heatmap);\n };\n Axis.prototype.getTitleSize = function (axis, innerPadding) {\n var titleSize = new Size(0, 0);\n if (this.title.text) {\n titleSize = measureText(this.title.text, this.title.textStyle);\n titleSize.height += innerPadding;\n }\n if (axis.opposedPosition) {\n this.farSizes.push(titleSize.height);\n }\n else {\n this.nearSizes.push(titleSize.height);\n }\n return titleSize;\n };\n Axis.prototype.getMaxLabelSize = function (axis, heatmap) {\n var labelSize = new Size(0, 0);\n var labels = this.axisLabels;\n axis.angle = axis.labelRotation;\n axis.isIntersect = false;\n if (axis.orientation === 'Horizontal' && (axis.labelIntersectAction === 'Rotate45' ||\n (axis.labelRotation % 180 === 0 && axis.labelIntersectAction === 'Trim'))) {\n var interval = heatmap.initialClipRect.width / axis.axisLabels.length;\n var startX = heatmap.initialClipRect.x + ((!axis.isInversed) ? 0 : heatmap.initialClipRect.width);\n var previousEnd = void 0;\n for (var i = 0, len = labels.length; i < len; i++) {\n var label = labels[i];\n var elementSize = measureText(label, axis.textStyle);\n var startPoint = startX + (!axis.isInversed ?\n ((interval - elementSize.width) / 2) : -((interval + elementSize.width) / 2));\n startPoint = startPoint < heatmap.initialClipRect.x ? heatmap.initialClipRect.x : startPoint;\n var endPoint = startPoint + elementSize.width;\n if (isNullOrUndefined(previousEnd)) {\n previousEnd = endPoint;\n }\n else {\n if (startPoint < previousEnd) {\n if (axis.labelIntersectAction === 'Rotate45') {\n axis.angle = 45;\n }\n else {\n axis.isIntersect = true;\n }\n break;\n }\n previousEnd = endPoint;\n }\n startX += axis.isInversed ? -interval : interval;\n }\n }\n for (var i = 0; i < labels.length; i++) {\n var size = (axis.angle % 180 === 0) ?\n measureText(labels[i], axis.textStyle) : rotateTextSize(axis.textStyle, labels[i], axis.angle);\n labelSize.width = (labelSize.width > size.width) ? labelSize.width : size.width;\n labelSize.height = (labelSize.height > size.height) ? labelSize.height : size.height;\n }\n if (axis.opposedPosition) {\n this.farSizes.push((axis.orientation === 'Horizontal') ? labelSize.height : labelSize.width);\n }\n else {\n this.nearSizes.push((axis.orientation === 'Horizontal') ? labelSize.height : labelSize.width);\n }\n return labelSize;\n };\n /**\n * Generate the axis lables for numeric axis\n * @param heatmap\n * @private\n */\n Axis.prototype.calculateNumericAxisLabels = function (heatmap) {\n //Axis Min\n var min = 0;\n var max = 0;\n var interval = this.interval ? this.interval : 1;\n var adaptorMin;\n var adaptorMax;\n if (heatmap.adaptorModule && heatmap.isCellData) {\n adaptorMin = this.orientation === 'Horizontal' ?\n heatmap.adaptorModule.adaptiveXMinMax.min : heatmap.adaptorModule.adaptiveYMinMax.min;\n adaptorMax = this.orientation === 'Horizontal' ?\n heatmap.adaptorModule.adaptiveXMinMax.max : heatmap.adaptorModule.adaptiveYMinMax.max;\n }\n min = !isNullOrUndefined(this.minimum) ? this.minimum : ((adaptorMin) ? adaptorMin : 0);\n max = !isNullOrUndefined(this.maximum) ? this.maximum :\n ((adaptorMax) ? adaptorMax : (this.maxLength * this.increment));\n var temp;\n if (this.minimum && this.maximum && min > max) {\n temp = min;\n min = max;\n max = temp;\n }\n max = !isNullOrUndefined(this.maximum) ? max : (adaptorMax ? adaptorMax : (max + min));\n var format = this.labelFormat;\n var isCustom = format.match('{value}') !== null;\n this.format = heatmap.intl.getNumberFormat({\n format: isCustom ? '' : format\n });\n for (var i = min; i <= max; i = i + (interval * this.increment)) {\n var value = this.formatValue(isCustom, format, i);\n this.axisLabels.push(value);\n }\n this.min = 0;\n this.axisLabelSize = Math.floor(((max - min) / this.increment) + 1);\n this.max = this.axisLabelSize - 1;\n this.axisLabelInterval = interval;\n for (var i = min; i <= max; i = i + this.increment) {\n var value = this.formatValue(isCustom, format, i);\n this.tooltipLabels.push(value);\n this.labelValue.push(i);\n }\n this.labelValue = this.isInversed ? this.labelValue.reverse() : this.labelValue;\n };\n /**\n * Generate the axis lables for category axis\n * @private\n */\n Axis.prototype.calculateCategoryAxisLabels = function () {\n var labels = this.labels ? this.labels : [];\n var min = !isNullOrUndefined(this.minimum) ? this.minimum : 0;\n var max = !isNullOrUndefined(this.maximum) ? this.maximum : this.maxLength;\n var interval = this.interval ? this.interval : 1;\n var temp;\n if (!isNullOrUndefined(this.minimum) && !isNullOrUndefined(this.maximum) && min > max) {\n temp = min;\n min = max;\n max = temp;\n }\n if (labels && labels.length > 0) {\n for (var i = min; i <= max; i = i + interval) {\n var value = labels[i] ? labels[i].toString() : i.toString();\n this.axisLabels.push(value);\n }\n }\n else {\n for (var i = min; i <= max; i = i + interval) {\n this.axisLabels.push(i.toString());\n }\n }\n for (var i = min; i <= max; i++) {\n this.tooltipLabels.push(labels[i] ? labels[i].toString() : i.toString());\n this.labelValue.push(labels[i] ? labels[i].toString() : i.toString());\n }\n this.min = min;\n this.max = max;\n this.axisLabelSize = max - min + 1;\n this.axisLabelInterval = interval;\n this.labelValue = this.isInversed ? this.labelValue.reverse() : this.labelValue;\n };\n /**\n * Generate the axis labels for date time axis.\n * @param heatmap\n * @private\n */\n Axis.prototype.calculateDateTimeAxisLabel = function (heatmap) {\n var interval = this.interval ? this.interval : 1;\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = heatmap.intl.getDateParser(option);\n var dateFormatter = heatmap.intl.getDateFormat(option);\n var min;\n var max;\n var adaptorMin = null;\n var adaptorMax = null;\n if (heatmap.adaptorModule && heatmap.isCellData) {\n adaptorMin = this.orientation === 'Horizontal' ? heatmap.adaptorModule.adaptiveXMinMax.min :\n heatmap.adaptorModule.adaptiveYMinMax.min;\n adaptorMax = this.orientation === 'Horizontal' ? heatmap.adaptorModule.adaptiveXMinMax.max :\n heatmap.adaptorModule.adaptiveYMinMax.max;\n }\n var minimum = this.minimum ? this.minimum : (adaptorMin ? adaptorMin : null);\n var maximum = this.maximum ? this.maximum : (adaptorMax ? adaptorMax : null);\n if (minimum === null && maximum === null) {\n min = 0;\n max = this.maxLength * this.increment;\n for (var i = min; i <= max; i = i + (interval * this.increment)) {\n this.axisLabels.push(i.toString());\n this.tooltipLabels.push(i.toString());\n this.labelValue.push(i.toString());\n }\n this.min = 0;\n this.max = this.maxLength;\n this.axisLabelSize = (max - min) / this.increment + 1;\n this.axisLabelInterval = interval;\n }\n else {\n if (minimum !== null && maximum === null) {\n min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: minimum }).val))));\n max = increaseDateTimeInterval(min, this.maxLength, this.intervalType, this.increment).getTime();\n }\n else if (minimum === null && maximum !== null) {\n max = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: maximum }).val))));\n min = increaseDateTimeInterval(max, -this.maxLength, this.intervalType, this.increment).getTime();\n }\n else {\n min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: minimum }).val))));\n max = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: maximum }).val))));\n }\n this.format = heatmap.intl.getDateFormat({\n format: this.labelFormat, skeleton: this.getSkeleton()\n });\n var tempInterval = min;\n while (tempInterval <= max) {\n var value = this.format(new Date(tempInterval));\n this.axisLabels.push(value);\n if (this.showLabelOn !== 'None') {\n interval = this.calculateLabelInterval(tempInterval);\n this.dateTimeAxisLabelInterval.push(interval);\n }\n tempInterval = increaseDateTimeInterval(tempInterval, interval, this.intervalType, this.increment).getTime();\n }\n this.min = 0;\n this.axisLabelInterval = interval;\n this.axisLabelSize = this.getTotalLabelLength(min, max); // this.tooltipLabels.length;\n this.max = this.axisLabelSize - 1;\n tempInterval = min;\n while (tempInterval <= max) {\n var value = this.format(new Date(tempInterval));\n this.tooltipLabels.push(value);\n this.labelValue.push(new Date(tempInterval));\n tempInterval = increaseDateTimeInterval(tempInterval, 1, this.intervalType, this.increment).getTime();\n }\n }\n this.labelValue = this.isInversed ? this.labelValue.reverse() : this.labelValue;\n };\n Axis.prototype.calculateLabelInterval = function (interval) {\n var year = new Date(interval).getFullYear();\n var month = new Date(interval).getMonth() + 1;\n var day = new Date(interval).getDate();\n var numberOfDays;\n var tempInterval;\n if (this.showLabelOn === 'Years' || this.showLabelOn === 'Months') {\n if (this.showLabelOn === 'Years' && this.intervalType === 'Months') {\n tempInterval = Math.ceil(12 / this.increment);\n }\n else {\n numberOfDays = this.showLabelOn === 'Years' ? year % 4 === 0 ? 366 : 365 : new Date(year, month, 0).getDate();\n numberOfDays += 1 - day;\n tempInterval = this.intervalType === 'Days' ? Math.ceil(numberOfDays / this.increment) : this.intervalType === 'Hours' ?\n Math.ceil((numberOfDays * 24) / this.increment) : this.intervalType === 'Minutes' ?\n Math.ceil((numberOfDays * 24 * 60) / this.increment) : 1;\n }\n }\n else if (this.showLabelOn === 'Days') {\n tempInterval = this.intervalType === 'Hours' ? Math.ceil(24 / this.increment) : this.intervalType === 'Minutes' ?\n Math.ceil((24 * 60) / this.increment) : 1;\n }\n else if (this.showLabelOn === 'Hours') {\n var minutes = new Date(interval).getMinutes();\n tempInterval = this.intervalType === 'Minutes' ? Math.ceil((60 - minutes) / this.increment) : 1;\n }\n else {\n tempInterval = 1;\n }\n return tempInterval;\n };\n /**\n * @private\n */\n Axis.prototype.getSkeleton = function () {\n var skeleton;\n if (this.intervalType === 'Years') {\n skeleton = 'yMMM';\n }\n else if (this.intervalType === 'Months') {\n skeleton = 'MMMd';\n }\n else if (this.intervalType === 'Days') {\n skeleton = 'yMd';\n }\n else if (this.intervalType === 'Hours') {\n skeleton = 'EHm';\n }\n else if (this.intervalType === 'Minutes') {\n skeleton = 'Hms';\n }\n else {\n skeleton = 'Hms';\n }\n return skeleton;\n };\n /**\n * Formatted the axis label.\n * @private\n */\n Axis.prototype.formatValue = function (isCustom, format, tempInterval) {\n return isCustom ? format.replace('{value}', this.format(tempInterval))\n : this.format(tempInterval);\n };\n /** @private */\n Axis.prototype.getTotalLabelLength = function (min, max) {\n var length = 0;\n var minimum = new Date(min);\n var maximum = new Date(max);\n var difference;\n var days;\n switch (this.intervalType) {\n case 'Years':\n var years = ((maximum.getFullYear() - minimum.getFullYear()) / this.increment) + 1;\n length = Math.floor(years);\n break;\n case 'Months':\n var months = (maximum.getFullYear() - minimum.getFullYear()) * 12;\n months -= minimum.getMonth();\n months += maximum.getMonth();\n length = months <= 0 ? 1 : Math.floor((months / this.increment) + 1);\n break;\n case 'Days':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n days = Math.floor(difference / (1000 * 3600 * 24));\n length = Math.floor((days / this.increment) + 1);\n break;\n case 'Hours':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n var hours = Math.floor(difference / (1000 * 3600));\n length = Math.floor(hours / this.increment) + 1;\n break;\n case 'Minutes':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n var minutes = Math.floor(difference / (1000 * 60));\n length = Math.floor(minutes / this.increment) + 1;\n break;\n }\n return length;\n };\n __decorate([\n Complex({ text: '', textStyle: Theme.axisTitleFont }, Title)\n ], Axis.prototype, \"title\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"labels\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Axis.prototype, \"textStyle\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"labelRotation\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property('Category')\n ], Axis.prototype, \"valueType\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"increment\", void 0);\n __decorate([\n Property('None')\n ], Axis.prototype, \"showLabelOn\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"interval\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('Days')\n ], Axis.prototype, \"intervalType\", void 0);\n __decorate([\n Property('Trim')\n ], Axis.prototype, \"labelIntersectAction\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { Rect, measureText, TextOption, rotateTextSize, textTrim, CanvasTooltip } from '../utils/helper';\nimport { sum, titlePositionX, LineOption, Line, DrawSvgCanvas, TextBasic, titlePositionY } from '../utils/helper';\nimport { extend, Browser } from '@syncfusion/ej2-base';\nvar AxisHelper = /** @class */ (function () {\n function AxisHelper(heatMap) {\n this.heatMap = heatMap;\n this.padding = 10;\n this.drawSvgCanvas = new DrawSvgCanvas(heatMap);\n }\n /**\n * To render the x and y axis.\n * @private\n */\n AxisHelper.prototype.renderAxes = function () {\n this.initialClipRect = this.heatMap.initialClipRect;\n var heatMap = this.heatMap;\n var axisElement;\n var element;\n if (!heatMap.enableCanvasRendering) {\n axisElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'AxisCollection' });\n }\n var axes = this.heatMap.axisCollections;\n for (var i = 0, len = axes.length; i < len; i++) {\n var axis = axes[i];\n var optionsLine = {};\n if (axis.orientation === 'Horizontal') {\n if (!heatMap.enableCanvasRendering) {\n element = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'XAxisGroup' });\n }\n this.drawXAxisLine(element, axis);\n this.drawXAxisTitle(axis, element, axis.rect);\n this.drawXAxisLabels(axis, element, axis.rect);\n }\n else {\n element = heatMap.renderer.createGroup({ id: heatMap.element.id + 'YAxisGroup' });\n this.drawYAxisLine(element, axis);\n this.drawYAxisTitle(axis, element, axis.rect);\n this.drawYAxisLabels(axis, element, axis.rect);\n }\n if (!heatMap.enableCanvasRendering) {\n axisElement.appendChild(element);\n }\n }\n if (!heatMap.enableCanvasRendering) {\n this.heatMap.svgObject.appendChild(axisElement);\n }\n };\n AxisHelper.prototype.drawXAxisLine = function (parent, axis) {\n var y = this.initialClipRect.y + (!axis.opposedPosition ? this.initialClipRect.height : 0);\n var line = new LineOption(this.heatMap.element.id + '_XAxisLine', new Line(this.initialClipRect.x, y, this.initialClipRect.x + this.initialClipRect.width, y), 'transparent', 0);\n this.drawSvgCanvas.drawLine(line, parent);\n };\n AxisHelper.prototype.drawYAxisLine = function (parent, axis) {\n var x = this.initialClipRect.x + ((!axis.opposedPosition) ? 0 : this.initialClipRect.width);\n var line = new LineOption(this.heatMap.element.id + '_YAxisLine', new Line(x, this.initialClipRect.y, x, this.initialClipRect.height + this.initialClipRect.y), 'transparent', 0);\n this.drawSvgCanvas.drawLine(line, parent);\n };\n AxisHelper.prototype.drawXAxisTitle = function (axis, parent, rect) {\n var y = rect.y + (!axis.opposedPosition ?\n (axis.maxLabelSize.height + this.padding) : -(axis.maxLabelSize.height + this.padding));\n if (axis.title.text) {\n var heatMap = this.heatMap;\n var title = axis.title;\n var elementSize = measureText(title.text, title.textStyle);\n var padding = this.padding;\n var anchor = title.textStyle.textAlignment === 'Near' ? 'start' :\n title.textStyle.textAlignment === 'Far' ? 'end' : 'middle';\n padding = axis.opposedPosition ? -(padding + elementSize.height / 4) : (padding + (3 * elementSize.height / 4));\n var options = new TextOption(heatMap.element.id + '_XAxisTitle', new TextBasic(rect.x + titlePositionX(rect.width, 0, 0, title.textStyle), y + padding, anchor, title.text), title.textStyle, title.textStyle.color || heatMap.themeStyle.axisTitle);\n this.drawSvgCanvas.createText(options, parent, title.text);\n }\n };\n AxisHelper.prototype.drawYAxisTitle = function (axis, parent, rect) {\n if (axis.title.text) {\n var title = axis.title;\n var heatMap = this.heatMap;\n var labelRotation = (axis.opposedPosition) ? 90 : -90;\n var elementSize = measureText(title.text, title.textStyle);\n var anchor = title.textStyle.textAlignment === 'Near' ? 'start' :\n title.textStyle.textAlignment === 'Far' ? 'end' : 'middle';\n var padding = 10;\n padding = axis.opposedPosition ? padding : -padding;\n var x = rect.x + padding + ((axis.opposedPosition) ? axis.maxLabelSize.width : -axis.maxLabelSize.width);\n var y = rect.y + titlePositionY(rect, 0, 0, title.textStyle) + (axis.opposedPosition ? this.padding : -this.padding);\n var options = new TextOption(heatMap.element.id + '_YAxisTitle', new TextBasic(x, y - this.padding, anchor, title.text, labelRotation, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')', 'auto'), title.textStyle, title.textStyle.color || heatMap.themeStyle.axisTitle);\n if (!this.heatMap.enableCanvasRendering) {\n this.drawSvgCanvas.createText(options, parent, title.text);\n }\n else {\n this.drawSvgCanvas.canvasDrawText(options, title.text, x, y);\n }\n }\n };\n /**\n * Get the visible labels for both x and y axis\n * @private\n */\n AxisHelper.prototype.calculateVisibleLabels = function () {\n var heatmap = this.heatMap;\n var axis;\n var axisCollection = heatmap.axisCollections;\n for (var i = 0, len = axisCollection.length; i < len; i++) {\n axis = axisCollection[i];\n axis.axisLabels = [];\n axis.tooltipLabels = [];\n axis.dateTimeAxisLabelInterval = [];\n axis.labelValue = [];\n if (axis.valueType === 'Numeric') {\n axis.calculateNumericAxisLabels(this.heatMap);\n }\n else if (axis.valueType === 'DateTime') {\n axis.calculateDateTimeAxisLabel(this.heatMap);\n }\n else {\n axis.calculateCategoryAxisLabels();\n }\n axis.tooltipLabels = axis.isInversed ? axis.tooltipLabels.reverse() : axis.tooltipLabels;\n }\n };\n /**\n * Measure the title and labels rendering position for both X and Y axis.\n * @param rect\n * @private\n */\n AxisHelper.prototype.measureAxis = function (rect) {\n var heatmap = this.heatMap;\n var axis;\n var axisCollection = heatmap.axisCollections;\n for (var i = axisCollection.length - 1; i >= 0; i--) {\n axis = axisCollection[i];\n var padding = axis.textStyle.size === '0px' ? 0 : this.padding;\n axis.nearSizes = [];\n axis.farSizes = [];\n axis.computeSize(axis, heatmap);\n if (!axis.opposedPosition) {\n if (axis.orientation === 'Horizontal') {\n rect.height -= (sum(axis.nearSizes) + padding);\n }\n else {\n rect.x += sum(axis.nearSizes) + padding;\n rect.width -= sum(axis.nearSizes) + padding;\n }\n }\n else {\n if (axis.orientation === 'Horizontal') {\n rect.y += sum(axis.farSizes) + padding;\n rect.height -= sum(axis.farSizes) + padding;\n }\n else {\n rect.width -= sum(axis.farSizes) + padding;\n }\n }\n }\n };\n /**\n * Calculate the X and Y axis line position\n * @param rect\n * @private\n */\n AxisHelper.prototype.calculateAxisSize = function (rect) {\n var heatmap = this.heatMap;\n var axis;\n var axisCollection = heatmap.axisCollections;\n for (var i = 0, len = axisCollection.length; i < len; i++) {\n var axis_1 = axisCollection[i];\n axis_1.rect = extend({}, rect, null, true);\n if (axis_1.orientation === 'Horizontal' && !axis_1.opposedPosition) {\n axis_1.rect.y = rect.y + rect.height;\n axis_1.rect.height = 0;\n }\n if (axis_1.orientation === 'Vertical' && axis_1.opposedPosition) {\n axis_1.rect.x = rect.x + rect.width;\n axis_1.rect.width = 0;\n }\n }\n };\n AxisHelper.prototype.drawXAxisLabels = function (axis, parent, rect) {\n var heatMap = this.heatMap;\n var labels = axis.axisLabels;\n var interval = rect.width / axis.axisLabelSize;\n var compactInterval = 0;\n var axisInterval = axis.interval ? axis.interval : 1;\n var tempintervel = rect.width / (axis.axisLabelSize / axis.axisLabelInterval);\n var temp = axis.axisLabelInterval;\n if (tempintervel > 0) {\n while (tempintervel < parseInt(axis.textStyle.size, 10)) {\n temp = temp + 1;\n tempintervel = rect.width / (axis.axisLabelSize / temp);\n }\n }\n else {\n temp = axis.tooltipLabels.length;\n }\n if (axis.axisLabelInterval < temp) {\n compactInterval = temp;\n labels = axis.tooltipLabels;\n axisInterval = temp;\n }\n var padding = 10;\n var lableStrtX = rect.x + (!axis.isInversed ? 0 : rect.width);\n var labelPadding;\n var angle = axis.angle;\n padding = this.padding;\n var anglePadding = ((angle === 90 || angle === -90)) ? -2 : 0;\n var labelElement;\n if (!heatMap.enableCanvasRendering) {\n labelElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'XAxisLabels' });\n }\n for (var i = 0, len = labels.length; i < len; i++) {\n var lableRect = new Rect(lableStrtX, rect.y, interval, rect.height);\n var label = (axis.labelIntersectAction === 'Trim' && axis.isIntersect) ? axis.valueType !== 'DateTime' ||\n axis.showLabelOn === 'None' ? textTrim(interval * axisInterval, labels[i], axis.textStyle) :\n textTrim(axis.dateTimeAxisLabelInterval[i] * interval, labels[i], axis.textStyle) : labels[i];\n var elementSize = measureText(label, axis.textStyle);\n var transform = void 0;\n labelPadding = (axis.opposedPosition) ?\n -(padding)\n : padding + (3 * (elementSize.height / 4));\n var x = lableRect.x + ((!axis.isInversed) ?\n (lableRect.width / 2) - (elementSize.width / 2) : -((lableRect.width / 2) + (elementSize.width / 2)));\n if (axis.labelIntersectAction === 'Trim') {\n x = (!axis.isInversed) ? (x >= lableRect.x ? x : lableRect.x) : (x > (lableStrtX - interval) ? x : (lableStrtX - interval));\n }\n else if (angle % 180 === 0) {\n x = x < rect.x ? rect.x : x;\n x = ((x + elementSize.width) > (rect.x + rect.width)) ? (rect.x + rect.width - elementSize.width) : x;\n }\n var y = rect.y + labelPadding;\n if (angle % 360 !== 0) {\n angle = (angle > 360) ? angle % 360 : angle;\n var rotateSize = rotateTextSize(axis.textStyle, label, angle);\n var diffHeight = axis.maxLabelSize.height - Math.ceil(rotateSize.height - elementSize.height);\n var yLocation = axis.opposedPosition ? diffHeight / 2 : -diffHeight / 2;\n x = lableRect.x + (axis.isInversed ? -(lableRect.width / 2) : (lableRect.width / 2));\n y = y + (axis.opposedPosition ? -(rotateSize.height / 2) : ((rotateSize.height - elementSize.height) / 2));\n transform = 'rotate(' + angle + ',' + x + ','\n + y + ')';\n }\n var options = new TextOption(heatMap.element.id + '_XAxis_Label' + i, new TextBasic(x, y, (angle % 360 === 0) ? 'start' : 'middle', label, angle, transform), axis.textStyle, axis.textStyle.color || heatMap.themeStyle.axisLabel);\n if (angle !== 0 && this.heatMap.enableCanvasRendering) {\n this.drawSvgCanvas.canvasDrawText(options, label);\n }\n else {\n this.drawSvgCanvas.createText(options, labelElement, label);\n }\n if (compactInterval === 0) {\n var labelInterval = (axis.valueType === 'DateTime' && axis.showLabelOn !== 'None') ?\n axis.dateTimeAxisLabelInterval[i] : axis.axisLabelInterval;\n lableStrtX = lableStrtX + (!axis.isInversed ? (labelInterval * interval) :\n -(labelInterval * interval));\n }\n else {\n lableStrtX = lableStrtX + (!axis.isInversed ? (compactInterval * interval) : -(compactInterval * interval));\n }\n if (label.indexOf('...') !== -1 && this.heatMap.enableCanvasRendering) {\n this.heatMap.tooltipCollection.push(new CanvasTooltip(labels[i], new Rect(x, y - elementSize.height, elementSize.width, elementSize.height)));\n }\n if (compactInterval !== 0) {\n i = i + (compactInterval - 1);\n }\n }\n if (!heatMap.enableCanvasRendering) {\n parent.appendChild(labelElement);\n }\n };\n AxisHelper.prototype.drawYAxisLabels = function (axis, parent, rect) {\n var heatMap = this.heatMap;\n var labels = axis.axisLabels;\n var interval = rect.height / axis.axisLabelSize;\n var compactInterval = 0;\n var tempintervel = rect.height / (axis.axisLabelSize / axis.axisLabelInterval);\n var temp = axis.axisLabelInterval;\n if (tempintervel > 0) {\n while (tempintervel < parseInt(axis.textStyle.size, 10)) {\n temp = temp + 1;\n tempintervel = rect.height / (axis.axisLabelSize / temp);\n }\n }\n else {\n temp = axis.tooltipLabels.length;\n }\n if (axis.axisLabelInterval < temp) {\n compactInterval = temp;\n labels = axis.tooltipLabels;\n }\n var padding = 10;\n var lableStartY = rect.y + (axis.isInversed ? 0 : rect.height);\n var anchor = axis.opposedPosition ? 'start' : 'end';\n padding = axis.opposedPosition ? padding : -padding;\n var labelElement;\n if (!heatMap.enableCanvasRendering) {\n labelElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'YAxisLabels' });\n }\n for (var i = 0, len = labels.length; i < len; i++) {\n var labelRect = new Rect(rect.x, lableStartY, rect.width, interval);\n var position = labelRect.height / 2; //titlePositionY(lableRect, 0, 0, axis.textStyle);\n var x = labelRect.x + padding;\n var y = labelRect.y + (axis.isInversed ? position : -position);\n var options = new TextOption(heatMap.element.id + '_YAxis_Label' + i, new TextBasic(x, y, anchor, labels[i], 0, 'rotate(' + 0 + ',' + (x) + ',' + (y) + ')', 'middle'), axis.textStyle, axis.textStyle.color || heatMap.themeStyle.axisLabel);\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n options.dy = '1ex';\n }\n this.drawSvgCanvas.createText(options, labelElement, labels[i]);\n if (compactInterval === 0) {\n var labelInterval = (axis.valueType === 'DateTime' && axis.showLabelOn !== 'None') ?\n axis.dateTimeAxisLabelInterval[i] : axis.axisLabelInterval;\n lableStartY = lableStartY + (axis.isInversed ? (labelInterval * interval) :\n -(labelInterval * interval));\n }\n else {\n lableStartY = lableStartY + (axis.isInversed ? (compactInterval * interval) : -(compactInterval * interval));\n i = i + (compactInterval - 1);\n }\n }\n if (!heatMap.enableCanvasRendering) {\n parent.appendChild(labelElement);\n }\n };\n return AxisHelper;\n}());\nexport { AxisHelper };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, extend, merge, Complex, Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Rect, TextBasic, Path, PathAttributes, RectOption, CircleOption, TextOption, CurrentRect, DrawSvgCanvas } from '../utils/helper';\nimport { convertHexToColor, colorNameToHex } from '../utils/helper';\nimport { CellColor } from '../utils/colorMapping';\nimport { Border, Font, BubbleTooltipData } from '../model/base';\nimport { Theme } from '../model/theme';\n/**\n * Configures the CellSettings property in the Heatmap.\n */\nvar CellSettings = /** @class */ (function (_super) {\n __extends(CellSettings, _super);\n function CellSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], CellSettings.prototype, \"showLabel\", void 0);\n __decorate([\n Property('')\n ], CellSettings.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], CellSettings.prototype, \"enableCellHighlighting\", void 0);\n __decorate([\n Complex({}, Border)\n ], CellSettings.prototype, \"border\", void 0);\n __decorate([\n Complex(Theme.rectLabelFont, Font)\n ], CellSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Rect')\n ], CellSettings.prototype, \"tileType\", void 0);\n __decorate([\n Property('Color')\n ], CellSettings.prototype, \"bubbleType\", void 0);\n __decorate([\n Property(false)\n ], CellSettings.prototype, \"isInversedBubbleSize\", void 0);\n return CellSettings;\n}(ChildProperty));\nexport { CellSettings };\nvar Series = /** @class */ (function () {\n function Series(heatMap) {\n this.heatMap = heatMap;\n this.drawSvgCanvas = new DrawSvgCanvas(this.heatMap);\n this.cellColor = new CellColor(this.heatMap);\n }\n /**\n * To render rect series.\n * @return {void}\n * @private\n */\n Series.prototype.renderRectSeries = function () {\n this.createSeriesGroup();\n var heatMap = this.heatMap;\n heatMap.xLength = heatMap.axisCollections[0].axisLabelSize;\n heatMap.yLength = heatMap.axisCollections[1].axisLabelSize; // Series Part\n var tempX = Math.round(heatMap.initialClipRect.x * 100) / 100;\n var tempY = Math.round(heatMap.initialClipRect.y * 100) / 100;\n var dataXIndex = 0;\n var dataYIndex = 0;\n var cellSetting = heatMap.cellSettings;\n var tempWidth = Math.round(((heatMap.initialClipRect.width -\n (cellSetting.border.width / 2)) / heatMap.xLength) * 100) / 100;\n var tempHeight = Math.round(((heatMap.initialClipRect.height -\n (cellSetting.border.width / 2)) / heatMap.yLength) * 100) / 100;\n var tempVal = 0;\n var themeStyle = heatMap.themeStyle;\n var tempBorder;\n var tempRectPosition = [];\n var circleRadius;\n tempBorder = cellSetting.border;\n var borderColor;\n this.rectPositionCollection = [];\n this.color = '';\n this.bubbleColorValue = [];\n if (heatMap.yAxis.opposedPosition) {\n tempX = Math.round((heatMap.initialClipRect.x + (parseFloat(tempBorder.width.toString()) / 2)) * 100) / 100;\n }\n circleRadius = this.getBubbleRadius(tempWidth, tempHeight);\n for (var x = 0; x < (heatMap.xLength * heatMap.yLength); x++) {\n this.setTextAndColor(dataXIndex, dataYIndex);\n var rectPosition = new CurrentRect(0, 0, 0, 0, 0, '');\n borderColor = tempBorder.color;\n if ((heatMap.renderingMode === 'Canvas' && parseFloat(tempBorder.width.toString()) === 0) || (!borderColor &&\n cellSetting.tileType === 'Bubble' && cellSetting.bubbleType === 'Sector')) {\n borderColor = this.color;\n }\n if (this.heatMap.bubbleSizeWithColor) {\n this.updateRectDetails(rectPosition, tempX, tempY, tempWidth, tempHeight, extend('', this.bubbleColorValue, null, true), x);\n }\n else {\n this.updateRectDetails(rectPosition, tempX, tempY, tempWidth, tempHeight, this.text, x);\n }\n if (cellSetting.tileType === 'Rect') { // Rectangle/Tile Series\n this.renderTileCell(rectPosition, tempBorder, x, this.color, borderColor);\n this.updateLabelVisibleStatus(tempWidth, tempHeight);\n }\n else {\n if (cellSetting.bubbleType === 'Color') { // Bubble by same size and different color Series\n this.renderBubbleCell(rectPosition, tempBorder, x, this.color, borderColor, circleRadius);\n this.updateLabelVisibleStatus((circleRadius * 2) - 12, (circleRadius * 2) - 6); // 6, 12 - circle padding\n }\n else if (!isNullOrUndefined(this.text) && (cellSetting.bubbleType === 'Size' || cellSetting.bubbleType === 'SizeAndColor')\n && this.text.toString() !== '') { // Bubble by same color and different size Series\n var tempCircleRadius = this.getRadiusBypercentage(parseFloat(this.text.toString()), heatMap.dataSourceMinValue, heatMap.dataSourceMaxValue, circleRadius);\n this.renderBubbleCell(rectPosition, tempBorder, x, this.color, borderColor, tempCircleRadius);\n this.updateLabelVisibleStatus((tempCircleRadius * 2) - 12, (tempCircleRadius * 2) - 6);\n }\n else if (cellSetting.bubbleType === 'Sector' && !isNullOrUndefined(this.text) && this.text.toString() !== '') {\n this.renderSectorCell(rectPosition, tempBorder, x.toString(), this.color, borderColor, circleRadius, this.text);\n this.checkLabelXDisplay = false;\n this.checkLabelYDisplay = false;\n }\n }\n tempRectPosition.push(rectPosition);\n if (cellSetting.showLabel && this.checkLabelYDisplay && this.checkLabelXDisplay) {\n var displayText = this.getFormatedText(this.text, cellSetting.format);\n var themeCellTextStyle = cellSetting.textStyle;\n var options = new TextOption(heatMap.element.id + '_HeatMapRectLabels_' + x, new TextBasic(Math.round((tempX + tempWidth / 2) * 100) / 100, Math.round((tempY + tempHeight / 2) * 100) / 100, 'middle', displayText, null, null, 'middle'), themeCellTextStyle, themeCellTextStyle.color || this.getSaturatedColor(this.color));\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n options.dy = this.heatMap.cellSettings.tileType === 'Bubble' ? '0.5ex' : '1ex';\n }\n this.drawSvgCanvas.createText(options, this.containerTextObject, displayText);\n }\n if (tempVal === heatMap.xLength - 1) {\n tempY = Math.round((tempY + tempHeight) * 100) / 100;\n tempVal = 0;\n dataYIndex = 0;\n if (heatMap.yAxis.opposedPosition) {\n tempX = Math.round((heatMap.initialClipRect.x + (parseFloat(tempBorder.width.toString()) / 2)) * 100) / 100;\n }\n else {\n tempX = Math.round(heatMap.initialClipRect.x * 100) / 100;\n }\n this.rectPositionCollection.push(tempRectPosition);\n tempRectPosition = [];\n dataXIndex++;\n }\n else {\n tempX = Math.round((tempX + tempWidth) * 100) / 100;\n tempVal++;\n dataYIndex++;\n }\n }\n if (!heatMap.enableCanvasRendering) {\n heatMap.svgObject.appendChild(this.containerRectObject);\n if (cellSetting.showLabel && !(cellSetting.tileType === 'Bubble' && cellSetting.bubbleType === 'Sector')) {\n heatMap.svgObject.appendChild(this.containerTextObject);\n }\n }\n };\n /**\n * To set color and text details.\n * @private\n */\n Series.prototype.setTextAndColor = function (dataXIndex, dataYIndex) {\n var cellSetting = this.heatMap.cellSettings;\n this.bubbleColorValue = [];\n var adaptData = this.heatMap.dataSource;\n // tslint:disable-next-line:no-any\n var clonedDataSource = this.heatMap.clonedDataSource;\n if (this.heatMap.bubbleSizeWithColor) {\n this.text = !isNullOrUndefined(clonedDataSource[dataXIndex][dataYIndex][0]) &&\n clonedDataSource[dataXIndex][dataYIndex][0].toString() !== '' ? clonedDataSource[dataXIndex][dataYIndex][0] : '';\n this.color = !isNullOrUndefined(clonedDataSource[dataXIndex][dataYIndex][1]) &&\n clonedDataSource[dataXIndex][dataYIndex][1].toString() !== '' ?\n this.cellColor.getColorByValue(clonedDataSource[dataXIndex][dataYIndex][1])\n : this.heatMap.isColorValueExist ? this.heatMap.emptyPointColor : this.cellColor.getColorByValue(this.text);\n var tempBubbleCollection = new BubbleTooltipData(adaptData.isJsonData && adaptData.adaptorType === 'Cell' ? this.heatMap.dataSource.bubbleDataMapping.size : null, this.text, 'Size');\n this.bubbleColorValue.push(tempBubbleCollection);\n this.bubbleColorValue.push({\n mappingName: adaptData.isJsonData && adaptData.adaptorType === 'Cell' ?\n this.heatMap.dataSource.bubbleDataMapping.color : null,\n bubbleData: !isNullOrUndefined(clonedDataSource[dataXIndex][dataYIndex][1]) &&\n clonedDataSource[dataXIndex][dataYIndex][1].toString() !== '' ? clonedDataSource[dataXIndex][dataYIndex][1] : '',\n valueType: 'Color'\n });\n }\n else {\n this.text = clonedDataSource[dataXIndex][dataYIndex];\n this.color = this.cellColor.getColorByValue(this.text);\n }\n };\n /**\n * To update rect details.\n * @private\n */\n Series.prototype.createSeriesGroup = function () {\n if (!this.heatMap.enableCanvasRendering) {\n this.containerRectObject = this.heatMap.renderer.createGroup({\n id: this.heatMap.element.id + '_Container_RectGroup',\n x: this.heatMap.initialClipRect.x, y: this.heatMap.initialClipRect.y, transform: 'translate( 0, 0)'\n });\n if (this.heatMap.cellSettings.showLabel &&\n !(this.heatMap.cellSettings.tileType === 'Bubble' && this.heatMap.cellSettings.bubbleType === 'Sector')) {\n this.containerTextObject = this.heatMap.renderer.createGroup({ id: this.heatMap.element.id + '_Container_TextGroup', transform: 'translate( 0, 0)' });\n }\n }\n };\n /**\n * To update rect details.\n * @private\n */\n Series.prototype.updateRectDetails = function (rectPosition, tempX, tempY, tempWidth, tempHeight, text, x) {\n rectPosition.x = tempX;\n rectPosition.y = tempY;\n rectPosition.width = tempWidth;\n rectPosition.height = tempHeight;\n rectPosition.value = text;\n rectPosition.id = this.heatMap.element.id + '_HeatMapRect_' + x;\n };\n /**\n * To Render Tile Cell.\n * @private\n */\n Series.prototype.renderTileCell = function (rectPosition, tempBorder, x, color, borderColor) {\n var rect = new RectOption(this.heatMap.element.id + '_HeatMapRect_' + x, color, tempBorder, 1, new Rect(rectPosition.x, rectPosition.y, rectPosition.width, rectPosition.height), borderColor || this.heatMap.themeStyle.cellBorder, tempBorder.radius, tempBorder.radius);\n this.drawSvgCanvas.drawRectangle(rect, this.containerRectObject, true);\n };\n /**\n * To get bubble radius.\n * @private\n */\n Series.prototype.getBubbleRadius = function (width, height) {\n var radius = (width / 2) - 2;\n if (height / 2 < width / 2) {\n radius = (height / 2) - 2;\n }\n return radius < 0 ? 0 : radius;\n };\n /**\n * To Render Bubble Cell.\n * @private\n */\n Series.prototype.renderSectorCell = function (bubblePosition, tempBorder, x, color, borderColor, circleRadius, text) {\n var curve;\n var startAngle;\n var endAngle;\n var cX;\n var cY;\n var X1;\n var Y1;\n var tempcX;\n var tempcY;\n var pathBorderWidth;\n var centerX = Math.round((bubblePosition.x + (bubblePosition.width / 2)) * 100) / 100;\n var centerY = Math.round((bubblePosition.y + (bubblePosition.height / 2)) * 100) / 100;\n var tempColor = color;\n var sectorContibution = this.getRadiusBypercentage(text, this.heatMap.dataSourceMinValue, this.heatMap.dataSourceMaxValue, 360); // Circle total angle.\n for (var y = 0; y < 2; y++) {\n pathBorderWidth = parseFloat(tempBorder.width.toString());\n if (y === 0) {\n curve = sectorContibution >= 180 ? 1 : 0;\n startAngle = -90;\n if (sectorContibution === 0) {\n endAngle = 270; // (360 - 90) for zero position adjustment.\n }\n else {\n endAngle = (sectorContibution - 90);\n }\n cX = Math.round((centerX + circleRadius * Math.cos((sectorContibution - 90) * (Math.PI / 180))) * 100) / 100;\n cY = Math.round((centerY + circleRadius * Math.sin((sectorContibution - 90) * (Math.PI / 180))) * 100) / 100;\n X1 = Math.round(centerX * 100) / 100;\n Y1 = Math.round((centerY - circleRadius) * 100) / 100;\n if (sectorContibution === 0) {\n tempColor = this.heatMap.emptyPointColor;\n }\n }\n else {\n curve = sectorContibution >= 180 ? 0 : 1;\n startAngle = endAngle;\n endAngle = 270; // (360 - 90) for zero position adjustment.\n tempColor = this.heatMap.emptyPointColor;\n x = x + '_Unfilled';\n tempcX = cX;\n tempcY = cY;\n cX = X1;\n cY = Y1;\n X1 = tempcX;\n Y1 = tempcY;\n if (sectorContibution === 0) {\n pathBorderWidth = 1;\n borderColor = color;\n }\n }\n var path = new Path('', false, centerX, centerY, X1, Y1, cX, cY, startAngle, endAngle, circleRadius, true);\n var sector = new PathAttributes(this.heatMap.element.id + '_HeatMapRect_' + x, path, tempColor, tempBorder, pathBorderWidth, 1, borderColor);\n this.calculateShapes(sector, path, sectorContibution, curve);\n this.drawSvgCanvas.drawPath(sector, path, this.containerRectObject);\n if (sectorContibution === 360) {\n break;\n }\n }\n };\n /**\n * To Render sector Cell.\n * @private\n */\n Series.prototype.calculateShapes = function (options, path, sectorContibution, curve) {\n var pathString;\n var clockWise;\n switch (sectorContibution) {\n case 360:\n case 0:\n if (sectorContibution === 0 && path.start === path.end) {\n pathString = 'M' + ' ' + options.x + ' ' + options.y + ' ' + 'L' + ' ' + path.x + ' ' + (path.y - path.radius);\n }\n else {\n pathString = !this.heatMap.enableCanvasRendering ? 'M' + ' ' + options.x + ' ' + options.y + ' ' : '';\n pathString = pathString + 'm' + ' ' + (-path.radius) + ' ' + '0' + ' ' +\n 'a' + ' ' + path.radius + ' ' + path.radius + ' ' + '0' + ' ' + '1' + ' ' + '0' +\n ' ' + (path.radius * 2) + ' ' + '0' + ' ' + 'a' + ' ' + path.radius +\n ' ' + path.radius + ' ' + '0' + ' ' + '1' + ' ' + '0' +\n ' ' + (-(path.radius * 2)) + ' ' + '0' + ' ';\n }\n merge(options, { 'd': pathString });\n break;\n default:\n pathString = 'M' + ' ' + options.x + ' ' + options.y + ' ' + 'L' + ' ' + path.x1 + ' ' + path.y1 + ' ' +\n 'A' + ' ' + path.radius + ' ' + path.radius + ' ' + '0' + ' ' + curve + ' ' + '1' + ' ' +\n path.cx + ' ' + path.cy + ' ' + 'Z';\n merge(options, { 'd': pathString });\n break;\n }\n };\n /**\n * To Render Bubble Cell.\n * @private\n */\n Series.prototype.renderBubbleCell = function (bubblePosition, tempBorder, x, color, borderColor, circleRadius) {\n var circle = new CircleOption(this.heatMap.element.id + '_HeatMapRect_' + x, color, tempBorder, 1, borderColor || this.heatMap.themeStyle.cellBorder, Math.round((bubblePosition.x + (bubblePosition.width / 2)) * 100) / 100, Math.round((bubblePosition.y + (bubblePosition.height / 2)) * 100) / 100, circleRadius);\n this.drawSvgCanvas.drawCircle(circle, this.containerRectObject);\n };\n /**\n * To find whether the X,Y Label need to display or not.\n * @private\n */\n Series.prototype.updateLabelVisibleStatus = function (tempWidth, tempHeight) {\n var tempMaxString = this.getFormatedText(this.text, this.heatMap.cellSettings.format);\n this.checkLabelYDisplay = tempHeight > parseInt(this.heatMap.cellSettings.textStyle.size, 10) ? true : false;\n this.checkLabelXDisplay = tempWidth > (tempMaxString.length *\n (parseInt(this.heatMap.cellSettings.textStyle.size, 10) / 2)) ? true : false;\n };\n /**\n * To find percentage value.\n * @private\n */\n Series.prototype.getRadiusBypercentage = function (text, min, max, radius) {\n var valueInPrecentage = ((text - min) /\n (max - min)) * 100;\n radius = ((this.heatMap.bubbleSizeWithColor ||\n (this.heatMap.cellSettings.tileType === 'Bubble' && this.heatMap.cellSettings.bubbleType === 'Size'))\n && this.heatMap.cellSettings.isInversedBubbleSize) ? radius - (radius * (valueInPrecentage / 100))\n : radius * (valueInPrecentage / 100);\n return (Math.round(radius * 100) / 100) < 0 ? 0 : (Math.round(radius * 100) / 100);\n };\n /**\n * To find saturated color for datalabel.\n * @return {string}\n * @private\n */\n Series.prototype.getSaturatedColor = function (color) {\n var saturatedColor = color;\n saturatedColor = (saturatedColor === 'transparent') ? window.getComputedStyle(document.body, null).backgroundColor : saturatedColor;\n var rgbValue = convertHexToColor(colorNameToHex(saturatedColor));\n var contrast = Math.round((rgbValue.R * 299 + rgbValue.G * 587 + rgbValue.B * 114) / 1000);\n return contrast >= 128 ? 'black' : 'white';\n };\n /**\n * To highlight the mouse hovered rect cell.\n * @return {void}\n * @private\n */\n Series.prototype.highlightSvgRect = function (tempID) {\n if (tempID.indexOf('Celltooltip') === -1) {\n if (tempID.indexOf('_HeatMapRect') !== -1) {\n if (tempID.indexOf('_HeatMapRectLabels_') !== -1) {\n var tempIndex = tempID.indexOf('_HeatMapRectLabels_') + 19;\n tempID = this.heatMap.element.id + '_HeatMapRect_' + tempID.slice(tempIndex);\n }\n var element = document.getElementById(tempID);\n if (this.heatMap.tempRectHoverClass !== tempID) {\n if (this.heatMap.cellSettings.enableCellHighlighting) {\n var oldElement = document.getElementById(this.heatMap.tempRectHoverClass);\n if (oldElement) {\n oldElement.style.opacity = '1';\n }\n if (element) {\n element.style.opacity = '0.65';\n }\n }\n this.heatMap.tempRectHoverClass = tempID;\n }\n }\n else {\n if (this.heatMap.cellSettings.enableCellHighlighting) {\n var oldElement = document.getElementById(this.heatMap.tempRectHoverClass);\n if (oldElement) {\n oldElement.style.opacity = '1';\n this.heatMap.tempRectHoverClass = '';\n }\n }\n }\n }\n };\n /**\n * To get the value depends to format.\n * @return {string}\n * @private\n */\n Series.prototype.getFormatedText = function (val, getFormat) {\n var format = getFormat;\n var isCustom = format.match('{value}') !== null;\n this.format = this.heatMap.intl.getNumberFormat({\n format: isCustom ? '' : format\n });\n var value = '';\n if (val.toString() !== '') {\n value = this.formatValue(isCustom, format, val);\n }\n return value;\n };\n /**\n * To get mouse hovered cell details.\n * @return {CurrentRect}\n * @private\n */\n Series.prototype.getCurrentRect = function (x, y) {\n var currentRect;\n var firstRectDetails = [];\n firstRectDetails.push(this.heatMap.heatMapSeries.rectPositionCollection[0][0]);\n var rectX = Math.ceil((x - firstRectDetails[0].x) / firstRectDetails[0].width) <\n this.heatMap.axisCollections[0].axisLabelSize ?\n Math.ceil((x - firstRectDetails[0].x) / firstRectDetails[0].width) :\n this.heatMap.axisCollections[0].axisLabelSize;\n var rectY = Math.floor(((y - firstRectDetails[0].y) / firstRectDetails[0].height)) <\n this.heatMap.axisCollections[1].axisLabelSize ?\n Math.floor(((y - firstRectDetails[0].y) / firstRectDetails[0].height)) :\n this.heatMap.axisCollections[1].axisLabelSize - 1;\n rectX = rectX === 0 ? 1 : rectX;\n currentRect = this.heatMap.heatMapSeries.rectPositionCollection[rectY][rectX - 1];\n this.hoverXAxisLabel = this.heatMap.axisCollections[0].tooltipLabels[rectX - 1];\n this.hoverXAxisValue = this.heatMap.axisCollections[0].labelValue[rectX - 1];\n this.hoverYAxisLabel = this.heatMap.axisCollections[1].tooltipLabels[(this.heatMap.axisCollections[1].tooltipLabels.length - 1) - rectY];\n this.hoverYAxisValue = this.heatMap.axisCollections[1].labelValue[(this.heatMap.axisCollections[1].labelValue.length - 1) - rectY];\n return currentRect;\n };\n /**\n * Format the cell label.\n * @private\n */\n Series.prototype.formatValue = function (isCustom, format, tempInterval) {\n return isCustom ? format.replace('{value}', this.format(tempInterval))\n : this.format(tempInterval);\n };\n return Series;\n}());\nexport { Series };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar TwoDimensional = /** @class */ (function () {\n function TwoDimensional(heatMap) {\n this.heatMap = heatMap;\n }\n /**\n * To reconstruct proper two dimensional dataSource depends on min and max values.\n * @private\n */\n TwoDimensional.prototype.processDataSource = function (dataSource) {\n // tslint:disable-next-line:no-any\n var tempCloneData = extend([], dataSource, null, true);\n this.heatMap.clonedDataSource = [];\n this.completeDataSource = [];\n var axis = this.heatMap.axisCollections;\n var dataLength = axis[0].maxLength + 1;\n var labelLength = axis[0].axisLabelSize + (axis[0].min > 0 ? axis[0].min : 0);\n var xLength = dataLength > labelLength ? dataLength : labelLength;\n var minVal;\n var maxVal;\n dataLength = axis[1].maxLength + 1;\n labelLength = axis[1].axisLabelSize + (axis[1].min > 0 ? axis[1].min : 0);\n var yLength = dataLength > labelLength ? dataLength : labelLength;\n // tslint:disable-next-line:no-any \n var tempVariable;\n var cloneDataIndex = 0;\n var minMaxDatasource = [];\n this.tempSizeArray = [];\n this.tempColorArray = [];\n this.heatMap.minColorValue = null;\n this.heatMap.maxColorValue = null;\n for (var z = axis[1].valueType === 'Category' ? axis[1].min : 0; z < yLength; z++) {\n var tempIndex = axis[0].valueType === 'Category' ? axis[0].min : 0;\n this.completeDataSource.push([]);\n while (tempIndex < xLength) {\n if (tempIndex >= axis[0].min && tempIndex <= axis[0].max) {\n this.processDataArray(tempCloneData, tempIndex, z, cloneDataIndex);\n }\n tempIndex++;\n }\n tempVariable = extend([], this.completeDataSource[cloneDataIndex], null, true);\n var minMaxVal = this.getMinMaxValue(minVal, maxVal, tempVariable);\n minVal = minMaxVal[0];\n maxVal = minMaxVal[1];\n if (this.heatMap.xAxis.isInversed) {\n this.completeDataSource[cloneDataIndex] = this.completeDataSource[cloneDataIndex].reverse();\n }\n if (z >= this.heatMap.axisCollections[1].min && z <= this.heatMap.axisCollections[1].max) {\n minMaxDatasource.push(this.completeDataSource[cloneDataIndex]);\n }\n cloneDataIndex++;\n }\n if (!this.heatMap.yAxis.isInversed) {\n this.completeDataSource.reverse();\n minMaxDatasource.reverse();\n }\n this.heatMap.clonedDataSource = minMaxDatasource;\n this.heatMap.dataSourceMinValue = isNullOrUndefined(minVal) ? 0 : parseFloat(minVal.toString());\n this.heatMap.dataSourceMaxValue = isNullOrUndefined(maxVal) ? 0 : parseFloat(maxVal.toString());\n this.heatMap.isColorValueExist = isNullOrUndefined(this.heatMap.minColorValue) ? false : true;\n this.heatMap.minColorValue = isNullOrUndefined(this.heatMap.minColorValue) ?\n this.heatMap.dataSourceMinValue : parseFloat(this.heatMap.minColorValue.toString());\n this.heatMap.maxColorValue = isNullOrUndefined(this.heatMap.maxColorValue) ?\n this.heatMap.dataSourceMaxValue : parseFloat(this.heatMap.maxColorValue.toString());\n };\n /**\n * To process and create a proper data array.\n * @private\n */\n // tslint:disable-next-line:no-any\n TwoDimensional.prototype.processDataArray = function (tempCloneData, tempIndex, z, cloneDataIndex) {\n if (this.heatMap.bubbleSizeWithColor) {\n if (tempCloneData[tempIndex] && !isNullOrUndefined(tempCloneData[tempIndex][z])\n && typeof (tempCloneData[tempIndex][z]) === 'object') {\n // tslint:disable-next-line:no-any \n var internalArray = tempCloneData[tempIndex][z];\n for (var tempx = 0; tempx < internalArray.length; tempx++) {\n if (isNullOrUndefined(internalArray[tempx])) {\n internalArray[tempx] = '';\n }\n if (tempx === 0) {\n this.tempSizeArray.push(internalArray[tempx]);\n }\n else if (tempx === 1) {\n this.tempColorArray.push(internalArray[tempx]);\n break;\n }\n }\n this.completeDataSource[cloneDataIndex].push(internalArray);\n }\n else {\n if (!isNullOrUndefined(tempCloneData[tempIndex]) && (tempCloneData[tempIndex][z] ||\n (tempCloneData[tempIndex][z] === 0 &&\n tempCloneData[tempIndex][z].toString() !== ''))) {\n this.completeDataSource[cloneDataIndex].push([tempCloneData[tempIndex][z]]);\n this.tempSizeArray.push(tempCloneData[tempIndex][z]);\n }\n else {\n this.completeDataSource[cloneDataIndex].push('');\n }\n }\n }\n else {\n if (tempCloneData[tempIndex] && (tempCloneData[tempIndex][z] ||\n (tempCloneData[tempIndex][z] === 0 &&\n tempCloneData[tempIndex][z].toString() !== ''))) {\n if (typeof (tempCloneData[tempIndex][z]) === 'object') {\n if (tempCloneData[tempIndex][z].length > 0 && !isNullOrUndefined(tempCloneData[tempIndex][z][0])) {\n this.completeDataSource[cloneDataIndex].push(tempCloneData[tempIndex][z][0]);\n }\n else {\n this.completeDataSource[cloneDataIndex].push('');\n }\n }\n else {\n this.completeDataSource[cloneDataIndex].push(tempCloneData[tempIndex][z]);\n }\n }\n else {\n this.completeDataSource[cloneDataIndex].push('');\n }\n }\n };\n /**\n * To get minimum and maximum value\n * @private\n */\n TwoDimensional.prototype.getMinMaxValue = function (minVal, maxVal, tempVariable) {\n var minMaxValue = [];\n if (this.heatMap.bubbleSizeWithColor) {\n minMaxValue.push(this.getMinValue(minVal, this.tempSizeArray));\n minMaxValue.push(this.getMaxValue(maxVal, this.tempSizeArray));\n this.heatMap.minColorValue = this.getMinValue(this.heatMap.minColorValue, this.tempColorArray);\n this.heatMap.maxColorValue = this.getMaxValue(this.heatMap.maxColorValue, this.tempColorArray);\n }\n else {\n minMaxValue.push(this.getMinValue(minVal, tempVariable));\n minMaxValue.push(this.getMaxValue(maxVal, tempVariable));\n }\n return minMaxValue;\n };\n /**\n * To get minimum value\n * @private\n */\n TwoDimensional.prototype.getMinValue = function (minVal, tempVariable) {\n if (isNullOrUndefined(minVal)) {\n minVal = this.performSort(tempVariable);\n }\n else if (this.performSort(tempVariable) < minVal) {\n minVal = this.performSort(tempVariable);\n }\n return !isNullOrUndefined(minVal) ? parseFloat(minVal.toString()) : minVal;\n };\n /**\n * To get maximum value\n * @private\n */\n TwoDimensional.prototype.getMaxValue = function (maxVal, tempVariable) {\n if (isNullOrUndefined(maxVal) && tempVariable.length > 0) {\n maxVal = Math.max.apply(Math, tempVariable);\n }\n else if (Math.max.apply(Math, tempVariable) > maxVal) {\n maxVal = Math.max.apply(Math, tempVariable);\n }\n return !isNullOrUndefined(maxVal) ? parseFloat(maxVal.toString()) : maxVal;\n };\n /**\n * To perform sort operation.\n * @private\n */\n // tslint:disable-next-line:no-any\n TwoDimensional.prototype.performSort = function (tempVariable) {\n return tempVariable.sort(function (a, b) { return a - b; }).filter(this.checkmin)[0];\n };\n /**\n * To get minimum value\n * @private\n */\n TwoDimensional.prototype.checkmin = function (val) {\n return !isNullOrUndefined(val) && val.toString() !== '';\n };\n return TwoDimensional;\n}());\nexport { TwoDimensional };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex, Browser, createElement } from '@syncfusion/ej2-base';\nimport { DrawSvgCanvas, TextOption, TextBasic, PathOption, Line, LineOption, GradientPointer, CurrentLegendRect } from '../utils/helper';\nimport { Size, measureText, getTitle, getElement, CanvasTooltip } from '../utils/helper';\nimport { Font } from '../model/base';\nimport { Rect, RectOption, Gradient, GradientColor, showTooltip, stringToNumber } from '../utils/helper';\nimport { Theme } from '../model/theme';\nimport { Tooltip as tool } from '@syncfusion/ej2-svg-base';\n/**\n * Configures the Legend\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property('Right')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"showLabel\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"showGradientPointer\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"enableSmartLegend\", void 0);\n __decorate([\n Property('All')\n ], LegendSettings.prototype, \"labelDisplayType\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n *\n * The `Legend` module is used to render legend for the heatmap.\n */\nvar Legend = /** @class */ (function () {\n function Legend(heatMap) {\n this.maxLegendLabelSize = new Size(0, 0);\n this.gradientScaleSize = 10;\n this.segmentCollections = [];\n this.textWrapCollections = [];\n this.labelCollections = [];\n this.legendSize = 10;\n this.previousOptions = new GradientPointer(0, 0, 0, 0, 0, 0);\n this.listPerPage = 0;\n this.numberOfPages = 1;\n this.listWidth = 0;\n this.fillRect = new Rect(0, 0, 0, 0);\n this.legendRect = new Rect(0, 0, 0, 0);\n this.currentPage = 1;\n this.lastList = [];\n this.navigationCollections = [];\n this.pagingRect = new Rect(0, 0, 0, 0);\n this.listInterval = 10; // padding between two lists\n this.legendLabelTooltip = [];\n this.labelXCollections = [];\n this.labelYCollections = [];\n this.legendXCollections = [];\n this.legendYCollections = [];\n /** @private */\n this.legendRectPositionCollection = [];\n this.heatMap = heatMap;\n this.drawSvgCanvas = new DrawSvgCanvas(heatMap);\n }\n ;\n /**\n * Get module name\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (heatMap) {\n /**\n * destory code\n */\n };\n ;\n /**\n * @private\n */\n Legend.prototype.renderLegendItems = function () {\n var heatMap = this.heatMap;\n var tempBorder = {\n color: 'transparent',\n width: 0,\n };\n this.legend = heatMap.renderer.createGroup({ id: heatMap.element.id + '_Heatmap_Legend' });\n var rectItems = new RectOption(heatMap.element.id + '_LegendBound', 'none', tempBorder, 1, this.legendGroup);\n this.drawSvgCanvas.drawRectangle(rectItems, this.legend);\n var legendBound = this.legendRectScale;\n var rectItemsSvg = new Rect(legendBound.x, legendBound.y, legendBound.width, legendBound.height);\n if (heatMap.paletteSettings.type === 'Gradient' || (heatMap.paletteSettings.type === 'Fixed' &&\n heatMap.legendSettings.enableSmartLegend === true)) {\n if (heatMap.paletteSettings.type === 'Gradient') {\n var fill = void 0;\n if (heatMap.enableCanvasRendering) {\n var grd = void 0;\n var ctx = heatMap.canvasRenderer.ctx;\n if (heatMap.horizontalGradient) {\n grd = ctx.createLinearGradient(legendBound.x, 0, legendBound.x + legendBound.width, 0);\n }\n else {\n grd = ctx.createLinearGradient(0, legendBound.y, 0, legendBound.y + legendBound.height);\n }\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n var value = ((heatMap.legendColorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue));\n value = isNaN(value) ? 0 : value;\n grd.addColorStop(value, heatMap.legendColorCollection[i].color);\n }\n ctx.fillStyle = grd;\n fill = grd.toString();\n }\n else {\n var gradientOptions = void 0;\n var gradientColor = void 0;\n var cgradientColors = [];\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n var gradientPercentage = ((heatMap.legendColorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n gradientPercentage = isNaN(gradientPercentage) ? 0 : gradientPercentage;\n gradientColor = new GradientColor(heatMap.legendColorCollection[i].color, gradientPercentage + '%');\n cgradientColors.push(gradientColor);\n }\n if (heatMap.horizontalGradient) {\n gradientOptions = new Gradient(heatMap.element.id + '_lineargradient', '0%', '100%', '0%', '0%');\n }\n else {\n gradientOptions = new Gradient(heatMap.element.id + '_lineargradient', '0%', '0%', '0%', '100%');\n }\n var linearGradient = heatMap.renderer.drawGradient('linearGradient', gradientOptions, cgradientColors);\n this.legend.appendChild(linearGradient);\n fill = 'url(#' + heatMap.element.id + '_lineargradient)';\n }\n var rectItem = new RectOption(heatMap.element.id + '_Gradient_Legend', fill, tempBorder, 1, rectItemsSvg);\n this.drawSvgCanvas.drawRectangle(rectItem, this.legend);\n this.renderColorAxisGrid(rectItemsSvg);\n }\n else {\n this.renderSmartLegend();\n }\n if (!heatMap.enableCanvasRendering) {\n heatMap.svgObject.appendChild(this.legend);\n }\n if (heatMap.legendSettings.showLabel && (heatMap.paletteSettings.type === 'Gradient' ||\n (heatMap.paletteSettings.type === 'Fixed' && heatMap.legendSettings.labelDisplayType !== 'None'))) {\n this.renderLegendLabel(rectItemsSvg);\n }\n }\n else {\n this.legendScale = heatMap.renderer.createGroup({ id: heatMap.element.id + 'Heatmap_GradientScale' });\n var listRect = new RectOption(heatMap.element.id + '_Gradient_Scale', 'none', tempBorder, 1, this.legendRectScale);\n this.drawSvgCanvas.drawRectangle(listRect, this.legendScale);\n if (!heatMap.enableCanvasRendering) {\n this.legend.appendChild(this.legendScale);\n }\n this.translategroup = heatMap.renderer.createGroup({ id: heatMap.element.id + '_translate' });\n this.calculateListPerPage(rectItemsSvg);\n if (this.numberOfPages > 1) {\n this.paginggroup = heatMap.renderer.createGroup({ id: heatMap.element.id + '_navigation' });\n }\n this.renderListLegendMode(rectItemsSvg);\n }\n };\n Legend.prototype.renderSmartLegend = function () {\n var heatMap = this.heatMap;\n var colorCollection = heatMap.colorCollection;\n var smartLegendRect;\n var tempBorder = {\n color: 'transparent',\n width: 0,\n };\n var legendBound = this.legendRectScale;\n var legendX;\n var legendY;\n var legendWidth;\n var legendHeight;\n var width = legendBound.width / colorCollection.length;\n var height = legendBound.height / colorCollection.length;\n this.legendRectPositionCollection = [];\n for (var i = 0; i < colorCollection.length; i++) {\n var rectPosition = new CurrentLegendRect(0, 0, 0, 0, '', '');\n if (heatMap.horizontalGradient) {\n legendX = legendBound.x + (i * width);\n legendY = legendBound.y;\n legendWidth = width;\n legendHeight = legendBound.height;\n this.segmentCollections.push((heatMap.legendSettings.labelDisplayType === 'Edge' &&\n i === colorCollection.length - 1) ? legendX + width : legendX);\n }\n else {\n legendX = legendBound.x;\n legendY = legendBound.y + (i * height);\n legendWidth = legendBound.width;\n legendHeight = height;\n this.segmentCollections.push((heatMap.legendSettings.labelDisplayType === 'Edge' &&\n i === colorCollection.length - 1) ? legendY + height : legendY);\n }\n smartLegendRect = new Rect(legendX, legendY, legendWidth, legendHeight);\n var rectItem = new RectOption(heatMap.element.id + '_Smart_Legend' + i, colorCollection[i].color, tempBorder, 1, smartLegendRect);\n this.drawSvgCanvas.drawRectangle(rectItem, this.legend);\n rectPosition.x = legendX;\n rectPosition.y = legendY;\n rectPosition.width = legendWidth;\n rectPosition.height = legendHeight;\n rectPosition.label = this.labelCollections[i];\n rectPosition.id = heatMap.element.id + '_Smart_Legend' + i;\n this.legendRectPositionCollection.push(rectPosition);\n var text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, this.textWrapCollections[i]);\n if (text.length !== 0 && heatMap.enableCanvasRendering) {\n var elementSize = measureText(this.labelCollections[i], heatMap.legendSettings.textStyle);\n this.legendLabelTooltip.push(new CanvasTooltip(this.labelCollections[i], new Rect(rectPosition.x, rectPosition.y, elementSize.width, elementSize.height)));\n }\n }\n };\n Legend.prototype.renderLegendLabel = function (rect) {\n var heatMap = this.heatMap;\n var anchor;\n var dominantBaseline;\n var legendLabel;\n var textWrapWidth = 0;\n var text;\n this.legendLabelTooltip = [];\n var colorCollection = heatMap.paletteSettings.type === 'Gradient' ?\n heatMap.legendColorCollection : heatMap.colorCollection;\n if (heatMap.enableCanvasRendering) {\n var ctx = heatMap.canvasRenderer.ctx;\n ctx.rect(this.legendGroup.x, this.legendGroup.y, this.legendGroup.width, this.legendGroup.height);\n ctx.clip();\n }\n else {\n legendLabel = heatMap.renderer.createGroup({ id: heatMap.element.id + '_Heatmap_LegendLabel' });\n }\n var labelX;\n var labelY;\n for (var i = 0; i < colorCollection.length; i++) {\n var value = ((colorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n if (heatMap.horizontalGradient) {\n labelX = this.segmentCollections[i];\n labelY = rect.y + rect.height + this.labelPadding;\n anchor = (value === 0) || (heatMap.paletteSettings.type === 'Fixed') ?\n (heatMap.legendSettings.labelDisplayType === 'Edge' &&\n i === colorCollection.length - 1) ? 'end' : 'start' : (i === colorCollection.length - 1) ? 'end' : 'middle';\n dominantBaseline = 'hanging';\n }\n else {\n labelX = rect.x + rect.width + this.labelPadding;\n labelY = this.segmentCollections[i];\n dominantBaseline = (value === 0) || (heatMap.paletteSettings.type === 'Fixed') ?\n (heatMap.legendSettings.labelDisplayType === 'Edge' &&\n i === colorCollection.length - 1) ? 'baseline' : 'hanging' :\n (i === colorCollection.length - 1) ? 'baseline' : 'middle';\n }\n textWrapWidth = heatMap.horizontalGradient ? this.textWrapCollections[i] : this.width - (this.legendRectScale.width +\n this.labelPadding + this.legendRectPadding);\n if (this.labelCollections[i] !== '') {\n text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, textWrapWidth);\n if (text.length !== 0 && text[0].indexOf('...') !== -1 && heatMap.enableCanvasRendering) {\n var elementSize = measureText(text[0], heatMap.legendSettings.textStyle);\n this.legendLabelTooltip.push(new CanvasTooltip(this.labelCollections[i], new Rect(labelX, labelY, elementSize.width, elementSize.height)));\n }\n var textBasic = new TextBasic(labelX, labelY, anchor, text, 0, 'translate(0,0)', dominantBaseline);\n var options = new TextOption(heatMap.element.id + '_Legend_Label' + i, textBasic, heatMap.legendSettings.textStyle, heatMap.legendSettings.textStyle.color || heatMap.themeStyle.legendLabel);\n if (text.length > 1) {\n this.drawSvgCanvas.createWrapText(options, heatMap.legendSettings.textStyle, legendLabel);\n }\n else {\n this.drawSvgCanvas.createText(options, legendLabel, text[0]);\n }\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n if (dominantBaseline === 'middle') {\n legendLabel.lastChild.setAttribute('dy', '0.6ex');\n }\n else if (dominantBaseline === 'hanging') {\n legendLabel.lastChild.setAttribute('dy', '1.5ex');\n }\n }\n }\n }\n if (!heatMap.enableCanvasRendering) {\n this.legendGroup.height = this.legendGroup.height > 0 ? this.legendGroup.height : 0;\n this.legendGroup.width = this.legendGroup.width > 0 ? this.legendGroup.width : 0;\n this.legend.appendChild(legendLabel);\n var clippath = heatMap.renderer.createClipPath({ id: heatMap.element.id + '_clipPath' });\n var clipRect = heatMap.renderer.drawRectangle(this.legendGroup);\n clippath.appendChild(clipRect);\n heatMap.svgObject.appendChild(clippath);\n this.legend.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n }\n };\n /**\n * @private\n */\n Legend.prototype.renderGradientPointer = function (e, pageX, pageY) {\n var heatMap = this.heatMap;\n var currentRect = heatMap.heatMapSeries.getCurrentRect(pageX, pageY);\n var cellValue = heatMap.bubbleSizeWithColor ? currentRect.value[0].bubbleData.toString() !== '' ?\n !this.heatMap.isColorValueExist ? currentRect.value[0].bubbleData.toString() :\n currentRect.value[1].bubbleData.toString() : '' : currentRect.value.toString();\n var rect = this.legendRectScale;\n var legendPart;\n var direction;\n var options;\n var legendPath;\n var pathX1;\n var pathY1;\n var pathX2;\n var pathY2;\n var pathX3;\n var pathY3;\n if (cellValue.toString() !== '') {\n if (!heatMap.horizontalGradient) {\n legendPart = rect.height / 100;\n legendPath = legendPart * ((Number(cellValue) - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n pathX1 = rect.x - 1;\n pathY1 = rect.y + legendPath;\n pathX2 = pathX3 = rect.x - 8;\n pathY2 = rect.y - 5 + legendPath;\n pathY3 = rect.y + 5 + legendPath;\n }\n else {\n legendPart = rect.width / 100;\n legendPath = legendPart * ((Number(cellValue) - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n pathX1 = rect.x + legendPath;\n pathY1 = rect.y + rect.height;\n pathX2 = rect.x - 5 + legendPath;\n pathY2 = pathY3 = rect.y + rect.height + 8;\n pathX3 = rect.x + 5 + legendPath;\n }\n direction = 'M' + ' ' + pathX1 + ' ' + pathY1 + ' ' +\n 'L' + ' ' + pathX2 + ' ' + pathY2 + ' ' + 'L' + ' ' + pathX3 + ' ' + pathY3 + ' ' + 'Z';\n options = new PathOption(heatMap.element.id + '_Gradient_Pointer', 'gray', 0.01, '#A0A0A0', 1, '0,0', direction);\n if (!heatMap.enableCanvasRendering) {\n this.gradientPointer = heatMap.renderer.drawPath(options);\n this.gradientPointer.style.visibility = 'visible';\n this.legend.appendChild(this.gradientPointer);\n }\n else {\n this.removeGradientPointer();\n var canvasTranslate = void 0;\n heatMap.canvasRenderer.drawPath(options, canvasTranslate);\n this.previousOptions.pathX1 = pathX1;\n this.previousOptions.pathY1 = pathY1;\n this.previousOptions.pathX2 = pathX2;\n this.previousOptions.pathY2 = pathY2;\n this.previousOptions.pathX3 = pathX3;\n this.previousOptions.pathY3 = pathY3;\n }\n }\n else {\n this.removeGradientPointer();\n }\n };\n /**\n * @private\n */\n Legend.prototype.removeGradientPointer = function () {\n var heatMap = this.heatMap;\n if (this.gradientPointer && !heatMap.enableCanvasRendering) {\n this.gradientPointer.style.visibility = 'hidden';\n }\n else if (heatMap.enableCanvasRendering) {\n if (Object.keys(this.previousOptions).length !== 0) {\n if (heatMap.horizontalGradient) {\n this.fillRect.x = this.previousOptions.pathX2 - 1;\n this.fillRect.y = this.previousOptions.pathY1;\n this.fillRect.width = this.previousOptions.pathX3 - this.previousOptions.pathX2 + 2;\n this.fillRect.height = this.previousOptions.pathY2 + 1 - this.previousOptions.pathY1;\n }\n else {\n this.fillRect.x = this.previousOptions.pathX2 - 1;\n this.fillRect.y = this.previousOptions.pathY2 - 1;\n this.fillRect.width = this.previousOptions.pathX1 - this.previousOptions.pathX2 + 1;\n this.fillRect.height = this.previousOptions.pathY3 - this.previousOptions.pathY2 + 2;\n }\n }\n heatMap.canvasRenderer.ctx.fillStyle = heatMap.themeStyle.background;\n heatMap.canvasRenderer.ctx.fillRect(this.fillRect.x, this.fillRect.y, this.fillRect.width, this.fillRect.height);\n }\n };\n /**\n * @private\n */\n Legend.prototype.calculateLegendBounds = function (rect) {\n var heatMap = this.heatMap;\n var legendSettings = heatMap.legendSettings;\n var colorCollection = heatMap.legendColorCollection;\n this.labelCollections = [];\n if (legendSettings.position !== 'Bottom' && legendSettings.position !== 'Top' &&\n legendSettings.position !== 'Right' && legendSettings.position !== 'Left') {\n legendSettings.position = 'Right';\n }\n heatMap.horizontalGradient = legendSettings.position === 'Bottom' || legendSettings.position === 'Top';\n this.legendRectPadding = heatMap.horizontalGradient ? 16 : 10; // padding between rect and legend\n this.labelPadding = legendSettings.showLabel ? this.heatMap.horizontalGradient ? 10 : 6 : 0; // padding between list and label\n this.legendHeight = legendSettings.height;\n this.legendWidth = legendSettings.width;\n if (heatMap.paletteSettings.type === 'Fixed') {\n var paletteCollection = heatMap.colorCollection;\n for (var i = 0; i < paletteCollection.length; i++) {\n var label = paletteCollection[i].label ? paletteCollection[i].label :\n paletteCollection[i].value.toString();\n if (heatMap.legendSettings.enableSmartLegend && heatMap.legendSettings.labelDisplayType === 'Edge'\n && i > 0 && i < paletteCollection.length - 1) {\n this.labelCollections.push('');\n }\n else {\n this.labelCollections.push(label);\n }\n }\n }\n else {\n for (var i = 0; i < colorCollection.length; i++) {\n var label = colorCollection[i].isHidden ? '' : colorCollection[i].label ?\n colorCollection[i].label : colorCollection[i].value.toString();\n this.labelCollections.push(label);\n }\n }\n if (heatMap.paletteSettings.type === 'Gradient' || (heatMap.paletteSettings.type === 'Fixed' &&\n heatMap.legendSettings.enableSmartLegend)) {\n this.maxLegendLabelSize = this.getMaxLabelSize();\n if (heatMap.horizontalGradient && legendSettings.height === '') {\n this.legendHeight = ((2 * this.legendRectPadding) + this.legendSize + this.maxLegendLabelSize.height).toString();\n }\n else if (!heatMap.horizontalGradient && legendSettings.width === '' && (legendSettings.textStyle.textOverflow === 'None' ||\n (heatMap.paletteSettings.type === 'Fixed' && heatMap.legendSettings.enableSmartLegend &&\n heatMap.legendSettings.labelDisplayType === 'None'))) {\n this.legendWidth = ((2 * this.legendRectPadding) + this.legendSize + this.maxLegendLabelSize.width).toString();\n }\n }\n else {\n this.calculateListLegendBounds(rect);\n }\n this.legendHeight = this.legendHeight ? this.legendHeight : heatMap.horizontalGradient ? '50' : '100%';\n this.legendWidth = this.legendWidth ? this.legendWidth : heatMap.horizontalGradient ?\n '100%' : heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend ? '70' : '50';\n this.height = stringToNumber(this.legendHeight, rect.height);\n this.width = stringToNumber(this.legendWidth, rect.width);\n if (heatMap.horizontalGradient) {\n this.height = heatMap.paletteSettings.type === 'Gradient' ? this.height < 50 ? 50 : this.height : this.height;\n if (legendSettings.position === 'Top') {\n rect.y += this.height;\n }\n rect.height -= this.height;\n }\n else {\n this.width = heatMap.paletteSettings.type === 'Gradient' ? this.width < 50 ? 50 : this.width : this.width;\n if (legendSettings.position === 'Left') {\n rect.x += this.width;\n }\n rect.width -= this.width;\n }\n };\n Legend.prototype.calculateListLegendBounds = function (rect) {\n var heatMap = this.heatMap;\n this.listWidth = 0;\n this.listHeight = 0;\n this.currentPage = 1;\n var padding = 10; // padding of paging elements\n if (heatMap.horizontalGradient) {\n for (var i = 0; i < heatMap.colorCollection.length; i++) {\n var size = 0;\n if (heatMap.legendSettings.showLabel) {\n var text = this.labelCollections[i];\n size = measureText(text, heatMap.legendSettings.textStyle).width;\n }\n var perListWidth = this.legendSize + this.labelPadding + size + this.listInterval;\n this.listWidth += perListWidth;\n }\n this.listWidth += this.listInterval + padding;\n if (this.legendWidth === '') {\n this.legendWidth = this.listWidth > rect.width ? rect.width.toString() : this.listWidth.toString();\n }\n if (this.legendHeight === '') {\n this.numberOfRows = Math.ceil(this.listWidth / stringToNumber(this.legendWidth, rect.width));\n this.numberOfRows = this.numberOfRows > 3 ? 3 : this.numberOfRows;\n this.legendHeight = (this.listWidth > rect.width || this.listWidth > stringToNumber(this.legendWidth, rect.width)) &&\n this.numberOfRows > 3 ? (((this.legendSize + this.listInterval) * this.numberOfRows) + this.legendRectPadding +\n parseInt(heatMap.legendSettings.textStyle.size, 10) + padding).toString() :\n (((this.legendSize + this.listInterval) * this.numberOfRows) + this.legendRectPadding).toString();\n }\n }\n else {\n this.listHeight = ((this.legendSize + this.listInterval) * heatMap.colorCollection.length) + this.listInterval;\n if (this.legendHeight === '') {\n this.legendHeight = this.listHeight > rect.height ? rect.height.toString() : this.listHeight.toString();\n }\n if (this.legendWidth === '' && heatMap.legendSettings.textStyle.textOverflow !== 'Trim') {\n this.maxLegendLabelSize = this.getMaxLabelSize();\n this.legendWidth = ((2 * this.legendRectPadding) + this.legendSize + this.labelPadding +\n this.maxLegendLabelSize.width).toString();\n }\n }\n if (stringToNumber(this.legendHeight, rect.height) < 50) {\n this.legendHeight = '50';\n }\n if (stringToNumber(this.legendWidth, rect.width) < 70) {\n this.legendWidth = '70';\n }\n };\n Legend.prototype.getMaxLabelSize = function () {\n var heatMap = this.heatMap;\n this.maxLegendLabelSize = new Size(0, 0);\n if (!heatMap.legendSettings.showLabel || (heatMap.horizontalGradient && heatMap.paletteSettings.type === 'Fixed' &&\n !heatMap.legendSettings.enableSmartLegend) || (heatMap.paletteSettings.type === 'Fixed' &&\n heatMap.legendSettings.labelDisplayType === 'None')) {\n return this.maxLegendLabelSize;\n }\n else {\n var labelSize = this.maxLegendLabelSize;\n for (var i = 0; i < heatMap.colorCollection.length; i++) {\n var size = measureText(this.labelCollections[i], heatMap.legendSettings.textStyle);\n labelSize.width = (labelSize.width > size.width) ? labelSize.width : size.width;\n labelSize.height = (labelSize.height > size.height) ? labelSize.height : size.height;\n }\n return labelSize;\n }\n };\n /**\n * @private\n */\n Legend.prototype.calculateLegendSize = function (rect, legendTop) {\n var heatMap = this.heatMap;\n var legendSettings = heatMap.legendSettings;\n var left;\n var top;\n var padding = 10; // inner padding for axis title and axil labels\n var alignment = legendSettings.alignment;\n var height = stringToNumber(this.legendHeight, rect.height);\n var width = stringToNumber(this.legendWidth, rect.width);\n var axis = heatMap.axisCollections;\n var axisTitlePadding = 0;\n if (heatMap.horizontalGradient) {\n width = width > rect.width ? rect.width : width;\n height = heatMap.paletteSettings.type === 'Gradient' ? height > 50 ? height : 50 : this.height;\n left = alignment === 'Near' ? rect.x : alignment === 'Far' ? rect.x + rect.width - width :\n rect.x + (rect.width / 2) - (width / 2);\n if (heatMap.xAxis.title.text !== '') {\n axisTitlePadding = measureText(heatMap.xAxis.title.text, heatMap.xAxis.textStyle).height + padding;\n }\n var axisHeight = axis[0].opposedPosition ? 0 : axis[0].maxLabelSize.height + axisTitlePadding + padding;\n top = legendSettings.position === 'Top' ? heatMap.titleSettings.text ? legendTop :\n heatMap.margin.top : rect.y + rect.height + axisHeight;\n }\n else {\n height = height > rect.height ? rect.height : height;\n width = heatMap.paletteSettings.type === 'Gradient' ? width > 50 ? width : 50 : width;\n top = alignment === 'Near' ? rect.y : alignment === 'Far' ? rect.y + rect.height - height :\n rect.y + (rect.height / 2) - (height / 2);\n if (heatMap.yAxis.title.text !== '') {\n axisTitlePadding = measureText(heatMap.yAxis.title.text, heatMap.yAxis.textStyle).height + padding;\n }\n var axisWidth = axis[1].opposedPosition ? axis[1].maxLabelSize.width + axisTitlePadding + padding : 0;\n left = legendSettings.position === 'Right' ? rect.x + rect.width + axisWidth : heatMap.margin.left;\n }\n this.legendGroup = new Rect(left, top, width, height);\n this.calculateGradientScale(this.legendGroup);\n };\n // calculating number of lists per page\n Legend.prototype.measureListLegendBound = function (rect) {\n var heatMap = this.heatMap;\n var padding = 15; // padding of paging element\n this.numberOfPages = 1;\n if (heatMap.horizontalGradient) {\n if (this.listWidth > this.width) {\n this.numberOfRows = Math.ceil(this.listWidth / this.width);\n this.listHeight = ((this.legendSize + this.listInterval) * this.numberOfRows);\n this.listPerPage = this.numberOfRows <= 3 ? this.numberOfRows : Math.ceil((this.height - padding -\n parseInt(heatMap.legendSettings.textStyle.size, 10) -\n this.legendRectPadding) / (this.legendSize + this.listInterval));\n this.numberOfPages = Math.ceil(this.numberOfRows / this.listPerPage);\n }\n else {\n this.listPerPage = 1;\n }\n }\n else {\n if (this.listHeight > rect.height || this.listHeight > this.height) {\n var maxHeight = stringToNumber(this.legendHeight, rect.height);\n maxHeight = maxHeight > rect.height ? rect.height : maxHeight;\n this.listPerPage = Math.floor(maxHeight / (this.legendSize + this.listInterval) - 1);\n this.numberOfPages = Math.max(1, Math.ceil(heatMap.colorCollection.length / this.listPerPage));\n }\n else {\n this.listPerPage = heatMap.colorCollection.length;\n this.legendHeight = this.listHeight.toString();\n }\n }\n };\n Legend.prototype.renderPagingElements = function () {\n var heatMap = this.heatMap;\n if (this.numberOfPages > 1) {\n this.navigationCollections = [];\n this.legend.appendChild(this.paginggroup);\n var iconSize = 10;\n var rightArrowX = this.legendGroup.x + this.legendGroup.width - iconSize;\n var rightArrowY = this.legendGroup.y + this.legendGroup.height - iconSize;\n var text = this.currentPage + '/' + this.numberOfPages;\n var textSize = measureText(text, heatMap.legendSettings.textStyle);\n var textX = rightArrowX - textSize.width - 15;\n var textBasic = new TextBasic(textX, rightArrowY, 'start', text, 0, 'translate(0,0)', 'middle');\n var options = new TextOption(heatMap.element.id + '_paging', textBasic, heatMap.legendSettings.textStyle, heatMap.legendSettings.textStyle.color || heatMap.themeStyle.legendLabel);\n this.drawSvgCanvas.createText(options, this.paginggroup, text);\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n this.paginggroup.lastChild.setAttribute('dy', '0.6ex');\n }\n this.pagingRect = new Rect(textX, rightArrowY - textSize.height / 2, textSize.width, textSize.height);\n var pagingTextRect = new RectOption(heatMap.element.id + '_pagingText', 'none', { color: 'transparent', width: 0 }, 1, this.pagingRect);\n this.drawSvgCanvas.drawRectangle(pagingTextRect, this.paginggroup);\n var rightArrowRect = new RectOption(heatMap.element.id + '_rightArrow', 'none', { color: 'transparent', width: 0 }, 1, new Rect(rightArrowX - iconSize, rightArrowY - iconSize / 2, iconSize, iconSize));\n this.drawSvgCanvas.drawRectangle(rightArrowRect, this.paginggroup);\n var rightArrow = 'M' + ' ' + (rightArrowX) + ' ' + rightArrowY + ' ' +\n 'L' + ' ' + (rightArrowX - iconSize) + ' ' + (rightArrowY - iconSize / 2) + ' ' + 'L' + ' ' +\n (rightArrowX - iconSize) + ' ' + (rightArrowY + (iconSize / 2)) + 'Z';\n var leftX = textX - 15;\n var leftArrow = 'M' + ' ' + leftX + ' ' + rightArrowY + ' ' +\n 'L' + ' ' + (leftX + iconSize) + ' ' + (rightArrowY - iconSize / 2) + ' ' + 'L' + ' ' +\n (leftX + iconSize) + ' ' + (rightArrowY + (iconSize / 2)) + 'Z';\n var leftArrowRect = new RectOption(heatMap.element.id + '_leftArrow', 'none', { color: 'transparent', width: 0 }, 1, new Rect(leftX, rightArrowY - iconSize / 2, iconSize, iconSize));\n this.drawSvgCanvas.drawRectangle(leftArrowRect, this.paginggroup);\n var leftOption = new PathOption(heatMap.element.id + '_Legend_leftarrow', 'gray', 0.01, '#A0A0A0', 1, '0,0', leftArrow);\n var rightOption = new PathOption(heatMap.element.id + '_Legend_rightarrow', 'gray', 0.01, '#A0A0A0', 1, '0,0', rightArrow);\n this.navigationCollections.push(rightArrowRect);\n this.navigationCollections.push(leftArrowRect);\n if (!heatMap.enableCanvasRendering) {\n var arrow = heatMap.renderer.drawPath(leftOption);\n var rightarrow = heatMap.renderer.drawPath(rightOption);\n this.paginggroup.appendChild(arrow);\n this.paginggroup.appendChild(rightarrow);\n }\n else {\n var canvasTranslate = void 0;\n heatMap.canvasRenderer.drawPath(leftOption, canvasTranslate);\n heatMap.canvasRenderer.drawPath(rightOption, canvasTranslate);\n }\n }\n };\n Legend.prototype.calculateGradientScale = function (scale) {\n var heatMap = this.heatMap;\n var padding = 10; // padding between legend bounds and gradient scale\n var left;\n var top;\n var height;\n var width;\n if (heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend) {\n this.measureListLegendBound(heatMap.initialClipRect);\n }\n if (heatMap.horizontalGradient) {\n left = scale.x + padding;\n top = scale.y + this.legendRectPadding;\n width = heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend ?\n scale.width - (2 * this.listInterval) : scale.width - 2 * padding;\n height = heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend ?\n (this.legendSize + this.listInterval) * this.listPerPage - this.listInterval : this.gradientScaleSize;\n }\n else {\n left = scale.x + this.legendRectPadding;\n top = scale.y + padding;\n width = (heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend) ?\n scale.width - padding : this.gradientScaleSize;\n height = heatMap.paletteSettings.type === 'Fixed' && !heatMap.legendSettings.enableSmartLegend ?\n (this.legendSize + this.listInterval) * this.listPerPage - this.listInterval : scale.height - 2 * padding;\n }\n this.legendRectScale = new Rect(left, top, width, height);\n if (heatMap.paletteSettings.type === 'Gradient' || heatMap.paletteSettings.type === 'Fixed' &&\n heatMap.legendSettings.enableSmartLegend) {\n this.calculateColorAxisGrid(this.legendRectScale);\n }\n };\n Legend.prototype.calculateColorAxisGrid = function (legendRect) {\n var heatMap = this.heatMap;\n var rect = this.legendRectScale;\n var legendPart;\n var text;\n var maxTextWrapLength = 0;\n this.segmentCollections = [];\n this.textWrapCollections = [];\n var pathX1;\n var pathY1;\n var colorCollection = heatMap.paletteSettings.type === 'Gradient' ?\n heatMap.legendColorCollection : heatMap.colorCollection;\n var minValue = heatMap.bubbleSizeWithColor ? heatMap.minColorValue : heatMap.dataSourceMinValue;\n var maxValue = heatMap.bubbleSizeWithColor ? heatMap.maxColorValue : heatMap.dataSourceMaxValue;\n this.legendMinValue = colorCollection[0].value > minValue ? minValue : colorCollection[0].value;\n this.legendMaxValue = colorCollection[colorCollection.length - 1].value < maxValue ? maxValue :\n colorCollection[colorCollection.length - 1].value;\n if (heatMap.paletteSettings.type === 'Gradient') {\n for (var index = 0; index < colorCollection.length; index++) {\n var value = ((colorCollection[index].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n value = isNaN(value) ? 0 : value;\n if (!heatMap.horizontalGradient) {\n legendPart = rect.height / 100;\n pathY1 = legendRect.y + (legendPart * value);\n this.segmentCollections.push(pathY1);\n }\n else {\n legendPart = rect.width / 100;\n pathX1 = legendRect.x + (legendPart * value);\n this.segmentCollections.push(pathX1);\n }\n }\n }\n var textWrapWidth;\n if (heatMap.horizontalGradient) {\n for (var i = 0; i < colorCollection.length; i++) {\n if (heatMap.paletteSettings.type === 'Gradient') {\n var previousSegmentWidth = (this.segmentCollections[i] - this.segmentCollections[i - 1]) / 2;\n var nextSegmentWidth = (this.segmentCollections[i + 1] - this.segmentCollections[i]) / 2;\n if (i === colorCollection.length - 1) {\n textWrapWidth = previousSegmentWidth;\n }\n else if (i === 0) {\n textWrapWidth = nextSegmentWidth;\n }\n else {\n textWrapWidth = previousSegmentWidth < nextSegmentWidth ? previousSegmentWidth : nextSegmentWidth;\n }\n }\n else {\n textWrapWidth = this.legendRectScale.width / heatMap.colorCollection.length;\n }\n this.textWrapCollections.push(textWrapWidth);\n text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, textWrapWidth);\n maxTextWrapLength = text.length > maxTextWrapLength ? text.length : maxTextWrapLength;\n }\n if (heatMap.legendSettings.position === 'Bottom') {\n heatMap.initialClipRect.height -= (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n this.legendGroup.y -= (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n this.legendRectScale.y = this.legendGroup.y + this.legendRectPadding;\n this.legendGroup.height = parseInt(this.legendHeight, 10) + (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n }\n else {\n heatMap.initialClipRect.y += (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n heatMap.initialClipRect.height -= (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n this.legendRectScale.y = this.legendGroup.y + this.legendRectPadding;\n this.legendGroup.height = parseInt(this.legendHeight, 10) + (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n }\n }\n };\n Legend.prototype.renderColorAxisGrid = function (legendRect) {\n var heatMap = this.heatMap;\n var legendElement;\n var pathX1;\n var pathY1;\n var pathX2;\n var pathY2;\n if (!heatMap.enableCanvasRendering) {\n legendElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + '_ColorAxis_Grid' });\n }\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n if (!heatMap.horizontalGradient) {\n pathX1 = legendRect.x;\n pathY1 = pathY2 = this.segmentCollections[i];\n pathX2 = legendRect.x + legendRect.width;\n }\n else {\n pathX1 = pathX2 = this.segmentCollections[i];\n pathY1 = legendRect.y;\n pathY2 = legendRect.y + legendRect.height;\n }\n var direction = new Line(pathX1, pathY1, pathX2, pathY2);\n var line = new LineOption(this.heatMap.element.id + '_ColorAxis_Grid' + i, direction, '#EEEEEE', 1);\n this.drawSvgCanvas.drawLine(line, legendElement);\n if (!heatMap.enableCanvasRendering) {\n this.legend.appendChild(legendElement);\n }\n }\n };\n /**\n * @private\n */\n Legend.prototype.renderLegendLabelTooltip = function (e) {\n var x = this.heatMap.mouseX;\n var y = this.heatMap.mouseY;\n if (e.target.id.indexOf('_Legend_Label') !== -1 && event.target.textContent.indexOf('...') > -1) {\n var targetId = event.target.id.split(this.heatMap.element.id + '_Legend_Label');\n if (targetId.length === 2) {\n var index = void 0;\n if (targetId[1].length === 1 || this.heatMap.legendSettings.textStyle.textOverflow === 'Trim') {\n index = parseInt(targetId[1], 10);\n }\n else {\n index = parseInt(targetId[1].substring(0, targetId[1].length - 1), 10);\n }\n showTooltip(this.labelCollections[index], x, y, this.heatMap.element.offsetWidth, this.heatMap.element.id + '_LegendLabel_Tooltip', getElement(this.heatMap.element.id + '_Secondary_Element'), null, this.heatMap);\n document.getElementById(this.heatMap.element.id + '_LegendLabel_Tooltip').style.visibility = 'visible';\n }\n }\n else {\n var element = document.getElementById(this.heatMap.element.id + '_LegendLabel_Tooltip');\n if (element) {\n element.style.visibility = 'hidden';\n }\n }\n };\n Legend.prototype.calculateListPerPage = function (rect) {\n var heatMap = this.heatMap;\n if (heatMap.horizontalGradient) {\n this.lastList = [];\n var legendX = rect.x;\n var legendY = rect.y;\n var size = 0;\n var division = 0;\n var labelX = 0;\n var labelY = 0;\n var interval = 20;\n var i = void 0;\n var legendSize = 10;\n var padding = 5;\n this.labelXCollections = [];\n this.labelYCollections = [];\n this.legendXCollections = [];\n this.legendYCollections = [];\n for (i = 0; i < heatMap.colorCollection.length; i++) {\n if (heatMap.legendSettings.showLabel) {\n var text = this.labelCollections[i];\n size = measureText(text, heatMap.legendSettings.textStyle).width;\n }\n labelX = legendX + legendSize + padding;\n labelY = legendY + padding;\n var maxWidth = heatMap.legendSettings.showLabel ? labelX + size : legendX + this.legendSize + this.listInterval;\n if (i !== 0 && maxWidth > this.legendGroup.width + this.legendGroup.x - this.listInterval) {\n division += 1;\n legendX = rect.x;\n legendY = rect.y + (division * interval);\n labelX = legendX + legendSize + padding;\n labelY = legendY + padding;\n if (division % (this.listPerPage) === 0) {\n this.lastList.push(i);\n legendY = rect.y;\n labelY = legendY + padding;\n division = 0;\n }\n }\n this.labelXCollections.push(labelX);\n this.labelYCollections.push(labelY);\n this.legendXCollections.push(legendX);\n this.legendYCollections.push(legendY);\n legendX = legendX + this.legendSize + this.labelPadding + size + this.listInterval;\n }\n this.lastList.push(i);\n this.numberOfPages = this.lastList.length;\n }\n };\n Legend.prototype.renderListLegendMode = function (rect) {\n var heatMap = this.heatMap;\n var legendSize = 10;\n var tempBorder = {\n color: 'transparent',\n width: 0,\n };\n var padding = 5; // padding for legend label from top\n this.legendLabelTooltip = [];\n var listRect;\n var size = new Size(0, 0);\n var division = 0;\n var labelX = 0;\n var labelY = 0;\n var legendX = rect.x;\n var legendY = rect.y;\n this.renderPagingElements();\n var x;\n var y;\n var textWrapWidth = this.legendGroup.width - (this.legendSize +\n this.legendRectPadding + this.labelPadding);\n if (!heatMap.horizontalGradient) {\n x = (this.currentPage * (this.listPerPage)) - (this.listPerPage);\n y = x + this.listPerPage;\n y = y < heatMap.colorCollection.length ? y : heatMap.colorCollection.length;\n }\n else {\n x = this.currentPage === 1 ? 0 : this.lastList[this.currentPage - 2];\n y = this.lastList[this.currentPage - 1];\n }\n for (var i = x; i < y; i++) {\n if (heatMap.legendSettings.showLabel) {\n var text = this.labelCollections[i];\n size = measureText(text, heatMap.legendSettings.textStyle);\n }\n if (heatMap.horizontalGradient) {\n legendX = this.legendXCollections[i];\n legendY = this.legendYCollections[i];\n labelX = this.labelXCollections[i];\n labelY = this.labelYCollections[i];\n }\n if (heatMap.legendSettings.showLabel) {\n labelX = legendX + this.legendSize + this.labelPadding;\n labelY = legendY + padding;\n var text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, textWrapWidth);\n if (text[0].indexOf('...') !== -1 && heatMap.enableCanvasRendering) {\n this.legendLabelTooltip.push(new CanvasTooltip(this.labelCollections[i], new Rect(labelX, labelY, size.width, size.height)));\n }\n var textBasic = new TextBasic(labelX, labelY, 'start', text, 0, 'translate(0,0)', 'middle');\n var options = new TextOption(heatMap.element.id + '_Legend_Label' + i, textBasic, heatMap.legendSettings.textStyle, heatMap.legendSettings.textStyle.color || heatMap.themeStyle.legendLabel);\n if (text.length > 1) {\n this.drawSvgCanvas.createWrapText(options, heatMap.legendSettings.textStyle, this.translategroup);\n }\n else {\n this.drawSvgCanvas.createText(options, this.translategroup, text[0]);\n }\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n this.translategroup.lastChild.setAttribute('dy', '0.6ex');\n }\n }\n listRect = new Rect(legendX, legendY, legendSize, legendSize);\n var rectItems = new RectOption(heatMap.element.id + '_legend_list' + i, heatMap.colorCollection[i].color, tempBorder, 1, listRect);\n this.drawSvgCanvas.drawRectangle(rectItems, this.translategroup);\n heatMap.horizontalGradient ? legendX = legendX + this.legendSize + this.labelPadding + size.width + this.listInterval :\n legendY += this.legendSize + this.listInterval;\n }\n if (!heatMap.enableCanvasRendering) {\n this.legendGroup.height = this.legendGroup.height > 0 ? this.legendGroup.height : 0;\n this.legendGroup.width = this.legendGroup.width > 0 ? this.legendGroup.width : 0;\n var clippath = heatMap.renderer.createClipPath({ id: heatMap.element.id + '_LegendScale_ClipPath' });\n var clipRect = heatMap.renderer.drawRectangle(this.legendGroup);\n clippath.appendChild(clipRect);\n this.translategroup.appendChild(clippath);\n this.translategroup.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n this.legendScale.appendChild(this.translategroup);\n heatMap.svgObject.appendChild(this.legend);\n }\n };\n /**\n * @private\n */\n Legend.prototype.translatePage = function (heatMap, page, isNext) {\n var padding = 5;\n if ((isNext && page >= 1 && page < this.numberOfPages) || (!isNext && page > 1 && page <= this.numberOfPages)) {\n if (isNext) {\n this.currentPage += 1;\n this.legendRect.y += this.legendRect.height;\n }\n else {\n this.currentPage -= 1;\n this.legendRect.y -= this.legendRect.height;\n }\n if (!heatMap.enableCanvasRendering) {\n this.paginggroup.removeChild(this.paginggroup.firstChild);\n while (this.translategroup.childNodes.length) {\n this.translategroup.removeChild(this.translategroup.firstChild);\n }\n }\n else {\n var ctx = heatMap.canvasRenderer.ctx;\n ctx.fillRect(this.legendRectScale.x - padding, this.legendRectScale.y - padding, this.legendRectScale.width +\n padding, this.legendRectScale.height + (2 * padding));\n ctx.fillRect(this.pagingRect.x, this.pagingRect.y, this.pagingRect.width, this.pagingRect.height);\n }\n this.renderListLegendMode(this.legendRectScale);\n }\n };\n /**\n * To create div container for tooltip which appears on hovering the smart legend.\n * @param heatmap\n * @private\n */\n Legend.prototype.createTooltipDiv = function (heatMap) {\n var element = createElement('div', {\n id: this.heatMap.element.id + 'legendLabelTooltipContainer',\n styles: 'position:absolute'\n });\n this.heatMap.element.appendChild(element);\n };\n /**\n * To render tooltip for smart legend.\n * @private\n */\n Legend.prototype.renderTooltip = function (currentLegendRect) {\n var heatMap = this.heatMap;\n var tempTooltipText = [currentLegendRect.label];\n var offset = null;\n offset = parseInt(heatMap.legendSettings.textStyle.size, 10) / 2;\n this.tooltipObject = new tool({\n offset: offset,\n theme: heatMap.theme,\n content: tempTooltipText,\n location: {\n x: currentLegendRect.x + (currentLegendRect.width / 2),\n y: currentLegendRect.y + (currentLegendRect.height / 2)\n },\n inverted: heatMap.horizontalGradient ? false : true,\n areaBounds: {\n height: this.legendGroup.height + this.legendGroup.y,\n width: this.legendGroup.width + this.legendGroup.x,\n x: heatMap.legendSettings.position === 'Right' ? 0 : this.legendGroup.x,\n y: heatMap.legendSettings.position === 'Top' ? heatMap.titleSettings.text === '' ? this.legendGroup.height -\n this.legendGroup.y : this.legendGroup.y : 0\n }\n }, '#' + this.heatMap.element.id + 'legendLabelTooltipContainer');\n this.tooltipObject.element.style.visibility = 'visible';\n };\n /**\n * To create tooltip for smart legend.\n * @private\n */\n Legend.prototype.createTooltip = function (pageX, pageY) {\n var currentLegendRect;\n for (var i = 0; i < this.heatMap.colorCollection.length; i++) {\n var position = this.legendRectPositionCollection[i];\n if (pageX > position.x && pageX < position.width + position.x &&\n pageY > position.y && pageY < position.height + position.y) {\n currentLegendRect = this.legendRectPositionCollection[i];\n break;\n }\n }\n var ele = document.getElementById(this.heatMap.element.id + 'legendLabelTooltipContainer');\n if (ele && ele.style.visibility === 'visible' && this.tooltipObject && !this.heatMap.isTouch) {\n this.tooltipObject.fadeOut();\n ele.style.visibility = 'hidden';\n }\n if (currentLegendRect) {\n this.renderTooltip(currentLegendRect);\n }\n };\n return Legend;\n}());\nexport { Legend };\n","/**\n * Heat Map Component\n */\nvar __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Internationalization, Complex } from '@syncfusion/ej2-base';\nimport { remove, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { SvgRenderer, CanvasRenderer, Browser } from '@syncfusion/ej2-base';\nimport { Size, stringToNumber, RectOption, Rect, TextBasic, measureText } from './utils/helper';\nimport { DrawSvgCanvas, TextOption, titlePositionX, getTitle, showTooltip, getElement } from './utils/helper';\nimport { removeElement, CanvasTooltip, getTooltipText } from './utils/helper';\nimport { Margin, Title } from './model/base';\nimport { Theme, getThemeColor } from './model/theme';\nimport { Axis } from './axis/axis';\nimport { AxisHelper } from './axis/axis-helpers';\nimport { Series, CellSettings } from './series/series';\nimport { PaletteSettings, CellColor } from './utils/colorMapping';\nimport { TwoDimensional } from './datasource/twodimensional';\nimport { LegendSettings } from '../heatmap/legend/legend';\nvar HeatMap = /** @class */ (function (_super) {\n __extends(HeatMap, _super);\n function HeatMap() {\n /**\n * The width of the heatmap as a string accepts input as both like '100px' or '100%'.\n * If specified as '100%, heatmap renders to the full width of its parent element.\n * @default null\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.enableCanvasRendering = false;\n /** @private */\n _this.horizontalGradient = _this.legendSettings.position === 'Bottom' || _this.legendSettings.position === 'Top';\n /**\n * @private\n */\n _this.tooltipCollection = [];\n /**\n * @private\n */\n _this.isCellData = false;\n return _this;\n }\n HeatMap.prototype.preRender = function () {\n this.initPrivateVariable();\n this.unWireEvents();\n this.wireEvents();\n };\n HeatMap.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.canvasRenderer = new CanvasRenderer(this.element.id);\n this.heatMapAxis = new AxisHelper(this);\n this.heatMapSeries = new Series(this);\n this.drawSvgCanvas = new DrawSvgCanvas(this);\n this.twoDimensional = new TwoDimensional(this);\n this.cellColor = new CellColor(this);\n this.tempRectHoverClass = '';\n this.tempTooltipRectId = '';\n this.setCulture();\n };\n /**\n * Method to set culture for heatmap\n */\n HeatMap.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n HeatMap.prototype.render = function () {\n this.updateBubbleHelperProperty();\n this.trigger('load', { heatmap: this });\n this.processInitData();\n this.setTheme();\n this.initAxis();\n this.calculateMaxLength();\n this.heatMapAxis.calculateVisibleLabels();\n this.twoDimensional.processDataSource(this.completeAdaptDataSource);\n this.createSvg();\n this.cellColor.getColorCollection();\n this.calculateBounds();\n this.renderElements();\n this.element.appendChild(this.svgObject);\n if (this.tooltipModule) {\n this.tooltipModule.showHideTooltip(false);\n }\n this.trigger('created', { heatmap: this });\n };\n /**\n * To re-calculate the datasource while changing datasource property dynamically.\n * @private\n */\n HeatMap.prototype.reRenderDatasource = function () {\n this.dataSourceMinValue = null;\n this.dataSourceMaxValue = null;\n this.processInitData();\n this.calculateMaxLength();\n this.heatMapAxis.calculateVisibleLabels();\n this.twoDimensional.processDataSource(this.completeAdaptDataSource);\n this.cellColor.getColorCollection();\n this.calculateBounds();\n };\n /**\n * To process datasource property.\n * @private\n */\n HeatMap.prototype.processInitData = function () {\n if (this.adaptorModule) {\n this.adaptorModule.constructDatasource(this.dataSource);\n }\n else {\n this.completeAdaptDataSource = this.dataSource;\n }\n };\n /**\n * To set render mode of heatmap as SVG or Canvas.\n * @private\n */\n HeatMap.prototype.setRenderMode = function () {\n if (this.renderingMode === 'Canvas') {\n this.enableCanvasRendering = true;\n }\n else if (this.renderingMode === 'Auto' &&\n (this.axisCollections[0].axisLabelSize * this.axisCollections[1].axisLabelSize) >= 10000) {\n this.enableCanvasRendering = true;\n }\n else {\n this.enableCanvasRendering = false;\n }\n };\n /**\n * To set bubble helper private property.\n * @private\n */\n HeatMap.prototype.updateBubbleHelperProperty = function () {\n if (this.cellSettings.tileType === 'Bubble' &&\n (this.cellSettings.bubbleType === 'Size' || this.cellSettings.bubbleType === 'Sector')) {\n this.legendVisibilityByCellType = false;\n }\n else if (this.legendModule && this.legendSettings.visible) {\n this.legendVisibilityByCellType = true;\n }\n if (this.cellSettings.tileType === 'Bubble' && this.cellSettings.bubbleType === 'SizeAndColor') {\n this.bubbleSizeWithColor = true;\n }\n else {\n this.bubbleSizeWithColor = false;\n }\n };\n HeatMap.prototype.renderElements = function () {\n this.renderSecondaryElement();\n this.renderBorder();\n this.renderTitle();\n this.heatMapAxis.renderAxes();\n if (this.tooltipModule && this.showTooltip) {\n this.tooltipModule.tooltipObject = null;\n this.tooltipModule.createTooltipDiv(this);\n }\n this.heatMapSeries.renderRectSeries();\n if (this.legendModule && this.legendSettings.visible\n && this.legendVisibilityByCellType) {\n this.legendModule.renderLegendItems();\n if (this.paletteSettings.type === 'Fixed' && this.legendSettings.enableSmartLegend &&\n this.legendSettings.labelDisplayType === 'None') {\n this.legendModule.createTooltipDiv(this);\n }\n }\n };\n /**\n * Get component name\n */\n HeatMap.prototype.getModuleName = function () {\n return 'heatmap';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n HeatMap.prototype.getPersistData = function () {\n return '';\n };\n HeatMap.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'renderingMode':\n renderer = true;\n break;\n case 'cellSettings':\n this.updateBubbleHelperProperty();\n this.reRenderDatasource();\n refreshBounds = true;\n break;\n case 'showTooltip':\n refreshBounds = true;\n break;\n case 'dataSource':\n this.isCellData = false;\n this.updateBubbleHelperProperty();\n this.reRenderDatasource();\n renderer = true;\n break;\n case 'titleSettings':\n case 'width':\n case 'height':\n case 'margin':\n case 'legendSettings':\n refreshBounds = true;\n break;\n case 'yAxis':\n case 'xAxis':\n this.reRenderDatasource();\n refreshBounds = true;\n break;\n case 'paletteSettings':\n this.cellColor.getColorCollection();\n this.calculateBounds();\n renderer = true;\n break;\n case 'theme':\n this.setTheme();\n renderer = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.createSvg();\n this.renderElements();\n this.element.appendChild(this.svgObject);\n this.trigger('created', { heatmap: this });\n }\n else if (refreshBounds) {\n this.createSvg();\n this.refreshBound();\n this.element.appendChild(this.svgObject);\n this.trigger('created', { heatmap: this });\n }\n };\n HeatMap.prototype.createSvg = function () {\n this.removeSvg();\n this.setRenderMode();\n this.calculateSize();\n if (!this.enableCanvasRendering) {\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n if (this.cellSettings.border.width.toString() === '0' && this.cellSettings.tileType === 'Rect') {\n this.svgObject.setAttribute('shape-rendering', 'crispEdges');\n }\n }\n else {\n this.svgObject = this.canvasRenderer.createCanvas({\n id: this.element.id + '_canvas',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n }\n };\n /**\n * To Remove the SVG.\n * @private\n */\n HeatMap.prototype.removeSvg = function () {\n if (document.getElementById(this.element.id + '_Secondary_Element')) {\n remove(document.getElementById(this.element.id + '_Secondary_Element'));\n }\n if (document.getElementById(this.element.id + 'Celltooltipcontainer')) {\n remove(document.getElementById(this.element.id + 'Celltooltipcontainer'));\n }\n if (document.getElementById(this.element.id + 'legendLabelTooltipContainer')) {\n remove(document.getElementById(this.element.id + 'legendLabelTooltipContainer'));\n }\n if (this.svgObject) {\n var svgElement = document.getElementById(this.svgObject.id);\n if (svgElement) {\n while (this.svgObject.childNodes.length) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n remove(this.svgObject);\n }\n }\n };\n HeatMap.prototype.renderSecondaryElement = function () {\n var tooltipDiv = this.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return{ModuleDeclaration[]}\n * @private\n */\n HeatMap.prototype.requiredModules = function () {\n var modules = [];\n if (this.showTooltip) {\n modules.push({\n member: 'Tooltip',\n args: [this]\n });\n }\n if (this.legendSettings) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.dataSource) {\n modules.push({\n member: 'Adaptor',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of Heatmap\n */\n HeatMap.prototype.destroy = function () {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n this.element.classList.remove('e-heatmap');\n };\n /**\n * Applies all the pending property changes and render the component again.\n * @method destroy\n * @return {void}.\n */\n HeatMap.prototype.refresh = function () {\n _super.prototype.refresh.call(this);\n this.element.classList.add('e-heatmap');\n };\n HeatMap.prototype.renderBorder = function () {\n this.border = {\n width: 0\n };\n var width = 0;\n var rect = new RectOption(this.element.id + '_HeatmapBorder', this.themeStyle.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.drawSvgCanvas.drawRectangle(rect, this.svgObject);\n };\n HeatMap.prototype.calculateSize = function () {\n var width = stringToNumber(this.width, this.element.offsetWidth) || this.element.offsetWidth || 600;\n var height = stringToNumber(this.height, this.element.offsetHeight) || this.element.offsetHeight || 450;\n this.availableSize = new Size(width, height);\n };\n HeatMap.prototype.renderTitle = function () {\n if (this.titleSettings.text) {\n var titleStyle = this.titleSettings.textStyle;\n var anchor = titleStyle.textAlignment === 'Near' ? 'start' :\n titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n this.elementSize = measureText(this.titleCollection[0], titleStyle);\n var options = new TextOption(this.element.id + '_HeatmapTitle', new TextBasic(titlePositionX(this.availableSize.width - this.margin.left - this.margin.right, this.margin.left, this.margin.right, titleStyle), this.margin.top + ((this.elementSize.height) * 3 / 4), anchor, this.titleCollection), titleStyle, titleStyle.color || this.themeStyle.heatMapTitle);\n if (this.titleCollection.length > 1) {\n this.drawSvgCanvas.createWrapText(options, titleStyle, this.svgObject);\n }\n else {\n this.drawSvgCanvas.createText(options, this.svgObject, this.titleCollection[0]);\n if (this.titleCollection[0].indexOf('...') !== -1 && this.enableCanvasRendering) {\n this.tooltipCollection.push(new CanvasTooltip(this.titleSettings.text, new Rect(this.margin.left, this.margin.top, this.elementSize.width, this.elementSize.height)));\n }\n }\n }\n };\n HeatMap.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId === (this.element.id + '_HeatmapTitle')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.titleSettings.text, x, y, this.element.offsetWidth, this.element.id + '_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch, this);\n }\n else {\n removeElement(this.element.id + '_Title_Tooltip');\n }\n };\n HeatMap.prototype.axisTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId.indexOf(this.element.id + '_XAxis_Label') !== -1) && (event.target.textContent.indexOf('...') > -1)) {\n var index = parseInt(targetId.replace(this.element.id + '_XAxis_Label', ''), 10);\n showTooltip(this.axisCollections[0].axisLabels[index], x, y, this.element.offsetWidth, this.element.id + '_axis_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch, this);\n }\n else {\n removeElement(this.element.id + '_axis_Tooltip');\n }\n };\n HeatMap.prototype.isHeatmapRect = function (x, y) {\n var firstRectDetails = [];\n var lastRectDetails = [];\n var isRect;\n firstRectDetails.push(this.heatMapSeries.rectPositionCollection[0][0]);\n lastRectDetails.push(this.heatMapSeries.rectPositionCollection[this.yLength - 1][this.xLength - 1]);\n isRect = (x >= firstRectDetails[0].x && y >= firstRectDetails[0].y &&\n x <= (lastRectDetails[0].x + lastRectDetails[0].width) &&\n y <= (lastRectDetails[0].y + lastRectDetails[0].height)) ? true : false;\n return isRect;\n };\n HeatMap.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getThemeColor(this.theme);\n };\n HeatMap.prototype.calculateBounds = function () {\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n var padding = (this.legendModule && this.legendSettings.position === 'Top'\n && this.legendVisibilityByCellType) || this.titleSettings.textStyle.size === '0px' ? 0 : 16; // title padding\n var left = margin.left;\n var width = this.availableSize.width - left - margin.right;\n if (this.titleSettings.text) {\n this.titleCollection = getTitle(this.titleSettings.text, this.titleSettings.textStyle, width);\n titleHeight = (measureText(this.titleSettings.text, this.titleSettings.textStyle).height * this.titleCollection.length) +\n padding;\n }\n var top = margin.top + titleHeight;\n var height = this.availableSize.height - top - margin.bottom;\n this.initialClipRect = new Rect(left, top, width, height);\n var legendTop = this.initialClipRect.y;\n if (this.legendModule && this.legendSettings.visible && this.legendVisibilityByCellType) {\n this.legendModule.calculateLegendBounds(this.initialClipRect);\n }\n this.heatMapAxis.measureAxis(this.initialClipRect);\n if (this.legendModule && this.legendSettings.visible && this.legendVisibilityByCellType) {\n this.legendModule.calculateLegendSize(this.initialClipRect, legendTop);\n }\n this.heatMapAxis.calculateAxisSize(this.initialClipRect);\n };\n HeatMap.prototype.refreshBound = function () {\n this.updateBubbleHelperProperty();\n this.calculateBounds();\n this.renderElements();\n };\n HeatMap.prototype.initAxis = function () {\n var axis;\n var axes = [this.xAxis, this.yAxis];\n this.axisCollections = [];\n for (var i = 0, len = axes.length; i < len; i++) {\n axis = axes[i];\n axis.orientation = (i === 0) ? 'Horizontal' : 'Vertical';\n this.axisCollections.push(axis);\n }\n };\n /**\n * Method to bind events for HeatMap\n */\n HeatMap.prototype.wireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n EventHandler.add(this.element, Browser.isDevice ? start : 'click', this.heatMapMouseClick, this);\n EventHandler.add(this.element, start, this.heatMapMouseMove, this);\n EventHandler.add(this.element, stop, this.heatMapMouseLeave, this);\n EventHandler.add(this.element, move, this.heatMapMouseMove, this);\n EventHandler.add(this.element, cancel, this.heatMapMouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.heatMapResize.bind(this));\n this.setStyle(this.element);\n };\n /**\n * Applying styles for heatmap element\n */\n HeatMap.prototype.setStyle = function (element) {\n element.style.touchAction = 'element';\n element.style.msTouchAction = 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n element.style.display = 'block';\n };\n /**\n * Method to unbind events for HeatMap\n */\n HeatMap.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n EventHandler.remove(this.element, Browser.isDevice ? start : 'click', this.heatMapMouseClick);\n EventHandler.remove(this.element, start, this.heatMapMouseMove);\n EventHandler.remove(this.element, move, this.heatMapMouseLeave);\n EventHandler.remove(this.element, move, this.heatMapMouseMove);\n EventHandler.remove(this.element, cancel, this.heatMapMouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.heatMapResize);\n };\n /**\n * Handles the heatmap resize.\n * @return {boolean}\n * @private\n */\n HeatMap.prototype.heatMapResize = function (e) {\n var _this = this;\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer);\n }\n this.resizeTimer = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTimer);\n return;\n }\n _this.createSvg();\n _this.refreshBound();\n _this.element.appendChild(_this.svgObject);\n }, 500);\n return false;\n };\n /**\n * Get the maximum length of data source for both horizontal and vertical\n * @private\n */\n HeatMap.prototype.calculateMaxLength = function () {\n var dataSource = this.completeAdaptDataSource;\n if (dataSource && dataSource.length > 0) {\n var xAxisMax = dataSource.length - 1;\n var yAxisMax = 0;\n for (var i = 0; i <= xAxisMax; i++) {\n var length_1 = dataSource[i].length;\n yAxisMax = yAxisMax > length_1 ? yAxisMax : length_1;\n }\n this.axisCollections[0].maxLength = xAxisMax;\n this.axisCollections[1].maxLength = yAxisMax - 1;\n }\n else {\n this.axisCollections[0].maxLength = 0;\n this.axisCollections[1].maxLength = 0;\n }\n };\n /**\n * To find mouse x, y for aligned heatmap element svg position\n */\n HeatMap.prototype.setMouseXY = function (pageX, pageY) {\n var rect = this.element.getBoundingClientRect();\n var svgCanvasRect;\n if (this.enableCanvasRendering) {\n svgCanvasRect = document.getElementById(this.element.id + '_canvas').getBoundingClientRect();\n }\n else {\n svgCanvasRect = document.getElementById(this.element.id + '_svg').getBoundingClientRect();\n }\n this.mouseX = (pageX - rect.left) - Math.max(svgCanvasRect.left - rect.left, 0);\n this.mouseY = (pageY - rect.top) - Math.max(svgCanvasRect.top - rect.top, 0);\n };\n HeatMap.prototype.heatMapMouseClick = function (e) {\n var pageX;\n var pageY;\n var tooltipText;\n var touchArg;\n var elementRect = this.element.getBoundingClientRect();\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = false;\n pageY = e.clientY;\n pageX = e.clientX;\n }\n pageX -= elementRect.left;\n pageY -= elementRect.top;\n var isheatmapRect = this.isHeatmapRect(pageX, pageY);\n if (isheatmapRect) {\n var currentRect = this.heatMapSeries.getCurrentRect(pageX, pageY);\n this.trigger('cellClick', {\n heatmap: this,\n value: currentRect.value,\n x: currentRect.x,\n y: currentRect.y,\n xLabel: this.heatMapSeries.hoverXAxisLabel,\n yLabel: this.heatMapSeries.hoverYAxisLabel,\n xValue: this.heatMapSeries.hoverXAxisValue,\n yValue: this.heatMapSeries.hoverYAxisValue,\n cellElement: this.enableCanvasRendering ? null : document.getElementById(currentRect.id)\n });\n }\n this.notify('click', e);\n if (this.paletteSettings.type !== 'Gradient' && this.legendModule\n && this.legendSettings.visible && this.legendVisibilityByCellType) {\n var page = this.legendModule.navigationCollections;\n if (page.length && pageX > page[0].x && pageX < page[0].x + page[0].width &&\n pageY > page[0].y && pageY < page[0].y + page[0].height) {\n this.legendModule.translatePage(this, this.legendModule.currentPage, true);\n }\n else if (page.length && pageX > page[1].x && pageX < page[1].x + page[1].width &&\n pageY > page[1].y && pageY < page[1].y + page[1].height) {\n this.legendModule.translatePage(this, this.legendModule.currentPage, false);\n }\n }\n return false;\n };\n /**\n * Handles the mouse Move.\n * @return {boolean}\n * @private\n */\n HeatMap.prototype.heatMapMouseMove = function (e) {\n var _this = this;\n var pageX;\n var pageY;\n var tooltipText;\n var touchArg;\n var elementRect = this.element.getBoundingClientRect();\n if (e.type === 'touchmove' || e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = false;\n pageX = e.clientX;\n pageY = e.clientY;\n }\n pageX -= elementRect.left;\n pageY -= elementRect.top;\n this.setMouseXY(pageX, pageY);\n if (e.target && e.target.id) {\n var isheatmapRect = this.isHeatmapRect(pageX, pageY);\n if (this.legendModule) {\n if (isheatmapRect) {\n if (this.paletteSettings.type === 'Gradient' &&\n this.legendSettings.showGradientPointer && this.legendSettings.visible && this.legendVisibilityByCellType) {\n this.legendModule.renderGradientPointer(e, pageX, pageY);\n }\n }\n else {\n this.legendModule.removeGradientPointer();\n }\n }\n var isshowTooltip = void 0;\n isshowTooltip = this.showTooltip && this.tooltipModule ? this.isHeatmapRect(pageX, pageY) : false;\n if (isshowTooltip) {\n var currentRect = void 0;\n currentRect = this.heatMapSeries.getCurrentRect(pageX, pageY);\n if (this.tempTooltipRectId !== currentRect.id) {\n if (this.showTooltip) {\n if ((this.cellSettings.enableCellHighlighting || (this.tooltipModule && this.showTooltip))\n && !this.enableCanvasRendering) {\n this.heatMapSeries.highlightSvgRect(currentRect.id);\n }\n this.tooltipModule.renderTooltip(currentRect);\n if (this.isTouch) {\n if (this.tooltipTimer) {\n window.clearTimeout(this.tooltipTimer);\n }\n this.tooltipTimer = setTimeout(function () {\n _this.tooltipModule.tooltipObject.fadeOut();\n _this.tooltipModule.isFadeout = true;\n }, 1500);\n if (e.type === 'touchmove') {\n e.preventDefault();\n }\n }\n }\n this.tempTooltipRectId = currentRect.id;\n }\n }\n else {\n if (e.target.id.indexOf('Celltooltip') === -1) {\n if ((this.cellSettings.enableCellHighlighting || this.showTooltip) && !this.enableCanvasRendering) {\n this.heatMapSeries.highlightSvgRect(e.target.id);\n }\n if (this.tooltipModule && this.showTooltip) {\n this.tooltipModule.showHideTooltip(false, true);\n }\n }\n this.tempTooltipRectId = '';\n }\n if (this.legendModule && this.legendSettings.visible && this.paletteSettings.type === 'Fixed' &&\n this.legendSettings.enableSmartLegend && this.legendSettings.labelDisplayType === 'None') {\n this.legendModule.createTooltip(pageX, pageY);\n }\n if (!this.enableCanvasRendering) {\n if (this.titleSettings.text && this.titleSettings.textStyle.textOverflow === 'Trim') {\n this.titleTooltip(e, pageX, pageY, this.isTouch);\n }\n this.axisTooltip(e, pageX, pageY, this.isTouch);\n if (this.legendModule && this.legendSettings.visible && this.legendSettings.showLabel && this.legendVisibilityByCellType) {\n this.legendModule.renderLegendLabelTooltip(e);\n }\n }\n else {\n elementRect = this.element.getBoundingClientRect();\n var tooltipRect = (this.paletteSettings.type === 'Fixed' && this.legendSettings.enableSmartLegend &&\n this.legendSettings.labelDisplayType === 'None') ? false : true;\n tooltipText = getTooltipText(this.tooltipCollection, pageX, pageY) ||\n (this.legendModule && tooltipRect && getTooltipText(this.legendModule.legendLabelTooltip, pageX, pageY));\n if (tooltipText) {\n showTooltip(tooltipText, this.mouseX, this.mouseY, this.element.offsetWidth, this.element.id + '_canvas_Tooltip', getElement(this.element.id + '_Secondary_Element'), this.isTouch, this);\n }\n else {\n removeElement(this.element.id + '_canvas_Tooltip');\n }\n }\n }\n return true;\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n HeatMap.prototype.heatMapMouseLeave = function (e) {\n var _this = this;\n if (e.target && e.target.id &&\n (this.cellSettings.enableCellHighlighting || (this.tooltipModule && this.showTooltip))\n && !this.enableCanvasRendering) {\n this.heatMapSeries.highlightSvgRect(this.tempTooltipRectId);\n }\n if (this.tooltipModule && this.showTooltip && e.type === 'mouseleave') {\n this.tooltipModule.showHideTooltip(false);\n }\n this.tempTooltipRectId = '';\n if (this.legendModule && this.legendSettings.visible && this.legendModule.tooltipObject &&\n this.legendModule.tooltipObject.element) {\n var tooltipElement_1 = this.legendModule.tooltipObject.element.firstChild;\n if (e.type === 'mouseleave') {\n tooltipElement_1.setAttribute('opacity', '0');\n }\n else {\n if (this.legendTooltipTimer) {\n window.clearTimeout(this.legendTooltipTimer);\n }\n this.legendTooltipTimer = setTimeout(function () {\n tooltipElement_1.setAttribute('opacity', '0');\n }, 1500);\n }\n }\n if (this.paletteSettings.type === 'Gradient' && this.legendModule && this.legendSettings.showGradientPointer &&\n this.legendSettings.visible && this.legendVisibilityByCellType) {\n if (e.type === 'mouseleave') {\n this.legendModule.removeGradientPointer();\n }\n else {\n if (this.gradientTimer) {\n window.clearTimeout(this.gradientTimer);\n }\n this.gradientTimer = setTimeout(function () { _this.legendModule.removeGradientPointer(); }, 1500);\n }\n }\n if (this.enableCanvasRendering) {\n var main = document.getElementById(this.element.id + '_hoverRect_canvas');\n if (main) {\n main.style.visibility = 'hidden';\n this.tempRectHoverClass = '';\n }\n }\n if (this.titleSettings.text && this.titleCollection[0].indexOf('...') !== -1) {\n if (!this.enableCanvasRendering) {\n removeElement(this.element.id + '_Title_Tooltip');\n }\n else {\n removeElement(this.element.id + '_canvas_Tooltip');\n }\n }\n return true;\n };\n __decorate([\n Property(null)\n ], HeatMap.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], HeatMap.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], HeatMap.prototype, \"showTooltip\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"tooltipRender\", void 0);\n __decorate([\n Property('SVG')\n ], HeatMap.prototype, \"renderingMode\", void 0);\n __decorate([\n Property(null)\n ], HeatMap.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Material')\n ], HeatMap.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, Margin)\n ], HeatMap.prototype, \"margin\", void 0);\n __decorate([\n Complex({ text: '', textStyle: Theme.heatMapTitleFont }, Title)\n ], HeatMap.prototype, \"titleSettings\", void 0);\n __decorate([\n Complex({}, Axis)\n ], HeatMap.prototype, \"xAxis\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], HeatMap.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, PaletteSettings)\n ], HeatMap.prototype, \"paletteSettings\", void 0);\n __decorate([\n Complex({}, Axis)\n ], HeatMap.prototype, \"yAxis\", void 0);\n __decorate([\n Complex({}, CellSettings)\n ], HeatMap.prototype, \"cellSettings\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"cellClick\", void 0);\n HeatMap = __decorate([\n NotifyPropertyChanges\n ], HeatMap);\n return HeatMap;\n}(Component));\nexport { HeatMap };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isNullOrUndefined, Complex } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { increaseDateTimeInterval } from '../utils/helper';\nimport { BubbleData } from '../model/base';\n/**\n * Configures the Adaptor Property in the Heatmap.\n */\nvar Data = /** @class */ (function (_super) {\n __extends(Data, _super);\n function Data() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Data.prototype, \"data\", void 0);\n __decorate([\n Property(false)\n ], Data.prototype, \"isJsonData\", void 0);\n __decorate([\n Property('cell')\n ], Data.prototype, \"adaptorType\", void 0);\n __decorate([\n Property('')\n ], Data.prototype, \"xDataMapping\", void 0);\n __decorate([\n Property('')\n ], Data.prototype, \"yDataMapping\", void 0);\n __decorate([\n Property('')\n ], Data.prototype, \"valueMapping\", void 0);\n __decorate([\n Complex({}, BubbleData)\n ], Data.prototype, \"bubbleDataMapping\", void 0);\n return Data;\n}(ChildProperty));\nexport { Data };\nvar AdaptiveMinMax = /** @class */ (function () {\n function AdaptiveMinMax() {\n }\n return AdaptiveMinMax;\n}());\nexport { AdaptiveMinMax };\n/**\n *\n * The `Adaptor` module is used to handle JSON and Table data.\n */\nvar Adaptor = /** @class */ (function () {\n function Adaptor(heatMap) {\n this.reconstructedXAxis = [];\n this.reconstructedYAxis = [];\n this.adaptiveXMinMax = new AdaptiveMinMax();\n this.adaptiveYMinMax = new AdaptiveMinMax();\n this.heatMap = heatMap;\n }\n /**\n * Method to construct Two Dimentional Datasource.\n * @return {void}\n * @private\n */\n Adaptor.prototype.constructDatasource = function (adaptData) {\n if (adaptData && adaptData.data === undefined) {\n this.heatMap.completeAdaptDataSource = adaptData;\n }\n else if (!adaptData.isJsonData && adaptData.adaptorType === 'Table' || adaptData.data === null) {\n this.heatMap.completeAdaptDataSource = adaptData.data;\n }\n else if (adaptData.isJsonData && adaptData.adaptorType === 'Table') {\n this.heatMap.completeAdaptDataSource = this.processJsonTableData(adaptData);\n }\n else if (adaptData.isJsonData && adaptData.adaptorType === 'Cell') {\n this.heatMap.completeAdaptDataSource = this.processJsonCellData(adaptData);\n }\n else if (!adaptData.isJsonData && adaptData.adaptorType === 'Cell') {\n var xAxis = this.heatMap.xAxis;\n var yAxis = this.heatMap.yAxis;\n this.adaptiveXMinMax.min = xAxis.minimum;\n this.adaptiveXMinMax.max = xAxis.maximum;\n this.adaptiveYMinMax.min = yAxis.minimum;\n this.adaptiveYMinMax.max = yAxis.maximum;\n if (((xAxis.valueType === 'Numeric' || xAxis.valueType === 'DateTime') &&\n (isNullOrUndefined(xAxis.minimum) || isNullOrUndefined(xAxis.maximum))) ||\n ((yAxis.valueType === 'Numeric' || yAxis.valueType === 'DateTime') &&\n (isNullOrUndefined(yAxis.minimum) || isNullOrUndefined(yAxis.maximum)))) {\n this.getMinMaxValue(adaptData.data, xAxis, yAxis);\n }\n this.constructAdaptiveAxis();\n this.heatMap.completeAdaptDataSource = this.processCellData(adaptData);\n this.heatMap.isCellData = true;\n }\n };\n /**\n * Method to construct Axis Collection.\n * @return {void}\n * @private\n */\n Adaptor.prototype.constructAdaptiveAxis = function () {\n var xAxis = this.heatMap.xAxis;\n var yAxis = this.heatMap.yAxis;\n var intervalType;\n if (xAxis.valueType === 'Numeric') {\n this.reconstructedXAxis = this.getNumericAxisCollection(this.adaptiveXMinMax.min, this.adaptiveXMinMax.max, xAxis.increment);\n }\n if (yAxis.valueType === 'Numeric') {\n this.reconstructedYAxis = this.getNumericAxisCollection(this.adaptiveYMinMax.min, this.adaptiveYMinMax.max, yAxis.increment);\n }\n if (xAxis.valueType === 'DateTime') {\n this.reconstructedXAxis = this.getDateAxisCollection(this.adaptiveXMinMax.min, this.adaptiveXMinMax.max, xAxis.intervalType, xAxis.increment);\n }\n if (yAxis.valueType === 'DateTime') {\n this.reconstructedYAxis = this.getDateAxisCollection(this.adaptiveYMinMax.min, this.adaptiveYMinMax.max, yAxis.intervalType, yAxis.increment);\n }\n };\n /**\n * Method to calculate Numeric Axis Collection.\n * @return {string[]}\n * @private\n */\n Adaptor.prototype.getNumericAxisCollection = function (min, max, increment) {\n var loopIndex = min;\n var tempAxisColl = [];\n while (loopIndex <= max) {\n tempAxisColl.push(loopIndex.toString());\n loopIndex = loopIndex + increment;\n }\n return tempAxisColl;\n };\n /**\n * Method to calculate DateTime Axis Collection.\n * @return {string[]}\n * @private\n */\n Adaptor.prototype.getDateAxisCollection = function (min, max, intervalType, increment) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.heatMap.intl.getDateParser(option);\n var dateFormatter = this.heatMap.intl.getDateFormat(option);\n min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: min }).val))));\n var tempInterval = min;\n var tempAxisColl = [];\n while (tempInterval <= max) {\n tempAxisColl.push(new Date(tempInterval).toString());\n tempInterval = increaseDateTimeInterval(tempInterval, 1, intervalType, increment).getTime();\n }\n return tempAxisColl;\n };\n /**\n * Method to calculate Maximum and Minimum Value from datasource.\n * @return {void}\n * @private\n */\n Adaptor.prototype.getMinMaxValue = function (data, xAxis, yAxis) {\n if (data.length > 0) {\n this.adaptiveXMinMax.min = !isNullOrUndefined(xAxis.minimum) ? xAxis.minimum : data[0][0];\n this.adaptiveYMinMax.min = !isNullOrUndefined(yAxis.minimum) ? yAxis.minimum : data[0][1];\n this.adaptiveXMinMax.max = !isNullOrUndefined(xAxis.maximum) ? xAxis.maximum : data[0][0];\n this.adaptiveYMinMax.max = !isNullOrUndefined(yAxis.maximum) ? yAxis.maximum : data[0][1];\n }\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n if (data[dataIndex][0] < this.adaptiveXMinMax.min && isNullOrUndefined(xAxis.minimum)) {\n this.adaptiveXMinMax.min = data[dataIndex][0];\n }\n if (data[dataIndex][0] > this.adaptiveXMinMax.max && isNullOrUndefined(xAxis.maximum)) {\n this.adaptiveXMinMax.max = data[dataIndex][0];\n }\n if (data[dataIndex][1] < this.adaptiveYMinMax.min && isNullOrUndefined(yAxis.minimum)) {\n this.adaptiveYMinMax.min = data[dataIndex][1];\n }\n if (data[dataIndex][1] > this.adaptiveYMinMax.max && isNullOrUndefined(yAxis.maximum)) {\n this.adaptiveYMinMax.max = data[dataIndex][1];\n }\n }\n };\n /**\n * Method to process Cell datasource.\n * @return {Object}\n * @private\n */\n Adaptor.prototype.processCellData = function (adaptordata) {\n // tslint:disable-next-line:no-any \n var tempDataCollection = adaptordata.data;\n var xLabels = this.reconstructedXAxis;\n var yLabels = this.reconstructedYAxis;\n var currentDataXIndex = 0;\n var currentDataYIndex = 0;\n if (tempDataCollection.length) {\n this.reconstructData = [];\n for (var xindex = 0; xindex < tempDataCollection.length; xindex++) {\n if (this.heatMap.xAxis.valueType === 'Category') {\n currentDataXIndex = tempDataCollection[xindex][0];\n }\n else {\n currentDataXIndex = xLabels.indexOf(tempDataCollection[xindex][0].toString());\n }\n if (currentDataXIndex > -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n if (this.heatMap.yAxis.valueType === 'Category') {\n currentDataYIndex = tempDataCollection[xindex][1];\n }\n else {\n currentDataYIndex = yLabels.indexOf(tempDataCollection[xindex][1].toString());\n }\n if (currentDataYIndex !== -1) {\n while (this.reconstructData[currentDataXIndex][currentDataYIndex] !== '') {\n this.reconstructData[currentDataXIndex].push('');\n }\n this.reconstructData[currentDataXIndex][currentDataYIndex] = isNullOrUndefined(tempDataCollection[xindex][2]) ?\n '' : tempDataCollection[xindex][2];\n }\n }\n }\n }\n return this.reconstructData;\n };\n /**\n * Method to process JSON Cell datasource.\n * @return {Object}\n * @private\n */\n Adaptor.prototype.processJsonCellData = function (adaptordata) {\n // tslint:disable-next-line:no-any \n var tempDataCollection = adaptordata.data;\n var xLabels = this.heatMap.xAxis.labels ? this.heatMap.xAxis.labels : [];\n var yLabels = this.heatMap.yAxis.labels ? this.heatMap.yAxis.labels : [];\n var currentDataXIndex = 0;\n var currentDataYIndex = 0;\n if (tempDataCollection.length) {\n this.reconstructData = [];\n for (var index = 0; index < tempDataCollection.length; index++) {\n currentDataXIndex = this.getSplitDataValue(tempDataCollection[index], adaptordata, xLabels, adaptordata.xDataMapping.split('.'));\n if (currentDataXIndex !== -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n currentDataYIndex = this.getSplitDataValue(tempDataCollection[index], adaptordata, yLabels, adaptordata.yDataMapping.split('.'));\n if (currentDataYIndex !== -1) {\n while (isNullOrUndefined(this.reconstructData[currentDataXIndex][currentDataYIndex])) {\n this.reconstructData[currentDataXIndex].push('');\n }\n if (this.heatMap.bubbleSizeWithColor) {\n this.reconstructData[currentDataXIndex][currentDataYIndex] = [\n this.getSplitDataValue(tempDataCollection[index], adaptordata, null, adaptordata.bubbleDataMapping.size.split('.')),\n this.getSplitDataValue(tempDataCollection[index], adaptordata, null, adaptordata.bubbleDataMapping.color.split('.'))\n ];\n }\n else {\n this.reconstructData[currentDataXIndex][currentDataYIndex] = this.getSplitDataValue(tempDataCollection[index], adaptordata, null, adaptordata.valueMapping.split('.'));\n }\n }\n }\n }\n }\n return this.reconstructData;\n };\n /**\n * Method to get data from complex mapping.\n * @return {number|string}\n * @private\n */\n Adaptor.prototype.getSplitDataValue = function (\n // tslint:disable-next-line:no-any \n tempSplitDataCollection, adaptordata, labels, tempSplitData) {\n var value = -1;\n this.tempSplitDataCollection = tempSplitDataCollection;\n for (var splitIndex = 0; splitIndex < tempSplitData.length; splitIndex++) {\n value = !isNullOrUndefined(labels) ? labels.indexOf(this.tempSplitDataCollection[tempSplitData[splitIndex]]) : null;\n if (!isNullOrUndefined(this.tempSplitDataCollection)) {\n this.tempSplitDataCollection = value !== -1 && !isNullOrUndefined(labels) ?\n this.tempSplitDataCollection : this.tempSplitDataCollection[tempSplitData[splitIndex]];\n }\n if (isNullOrUndefined(this.tempSplitDataCollection)) {\n break;\n }\n }\n value = !isNullOrUndefined(labels) ? value : isNullOrUndefined(this.tempSplitDataCollection) ||\n this.tempSplitDataCollection.toString() === '' ? '' : parseFloat(this.tempSplitDataCollection.toString());\n return value;\n };\n /**\n * Method to process JSON Table datasource.\n * @return {Object}\n * @private\n */\n Adaptor.prototype.processJsonTableData = function (adaptordata) {\n // tslint:disable-next-line:no-any \n var tempDataCollection = adaptordata.data;\n var currentDataXIndex = 0;\n var currentDataYIndex = 0;\n var xLabels = this.heatMap.xAxis.labels ? this.heatMap.xAxis.labels : [];\n var yLabels = this.heatMap.yAxis.labels ? this.heatMap.yAxis.labels : [];\n var key;\n if (tempDataCollection.length) {\n this.reconstructData = [];\n for (var xindex = 0; xindex < tempDataCollection.length; xindex++) {\n currentDataXIndex = this.getSplitDataValue(tempDataCollection[xindex], adaptordata, xLabels, adaptordata.xDataMapping.split('.'));\n if (currentDataXIndex !== -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n for (var index = 0; index < Object.keys(this.tempSplitDataCollection).length; index++) {\n key = Object.keys(this.tempSplitDataCollection)[index];\n currentDataYIndex = key !== adaptordata.xDataMapping ? yLabels.indexOf(key) : -1;\n if (currentDataYIndex !== -1) {\n while (isNullOrUndefined(this.reconstructData[currentDataXIndex][currentDataYIndex])) {\n this.reconstructData[currentDataXIndex].push('');\n }\n this.reconstructData[currentDataXIndex][currentDataYIndex] =\n isNullOrUndefined(this.tempSplitDataCollection[key]) ?\n '' : this.tempSplitDataCollection[key];\n }\n }\n }\n }\n }\n return this.reconstructData;\n };\n /**\n * To destroy the Adaptor.\n * @return {void}\n * @private\n */\n Adaptor.prototype.destroy = function (heatMap) {\n /**\n * No Lines\n */\n };\n ;\n /**\n * To get Module name\n */\n Adaptor.prototype.getModuleName = function () {\n return 'Adaptor';\n };\n return Adaptor;\n}());\nexport { Adaptor };\n","/**\n * HeatMap tool tip file\n */\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Tooltip as tool } from '@syncfusion/ej2-svg-base';\n/**\n *\n * The `Tooltip` module is used to render the tooltip for heatmap series.\n */\nvar Tooltip = /** @class */ (function () {\n function Tooltip(heatMap) {\n /* private */\n this.isFirst = true;\n /* private */\n this.isFadeout = false;\n this.heatMap = heatMap;\n }\n /**\n * Get module name\n */\n Tooltip.prototype.getModuleName = function () {\n return 'Tooltip';\n };\n /**\n * To show/hide Tooltip.\n * @private\n */\n Tooltip.prototype.showHideTooltip = function (isShow, isFadeout) {\n var ele = document.getElementById(this.heatMap.element.id + 'Celltooltipcontainer');\n if (!isShow) {\n if (ele && ele.style.visibility !== 'hidden') {\n if (this.tooltipObject && isFadeout) {\n this.tooltipObject.fadeOut();\n }\n else {\n if (this.tooltipObject && this.tooltipObject.element) {\n var tooltipElement = this.tooltipObject.element.firstChild;\n tooltipElement.setAttribute('opacity', '0');\n }\n }\n ele.style.visibility = 'hidden';\n }\n this.isFadeout = true;\n }\n else {\n ele.style.visibility = 'visible';\n }\n };\n /**\n * To destroy the Tooltip.\n * @return {void}\n * @private\n */\n Tooltip.prototype.destroy = function (heatMap) {\n /**\n * Destroy method performed here\n */\n };\n ;\n /**\n * To add Tooltip to the rect cell.\n * @return {void}\n * @private\n */\n Tooltip.prototype.createTooltip = function (x, y, tempTooltipText) {\n var offset = null;\n if (this.heatMap.cellSettings.showLabel && this.heatMap.heatMapSeries.checkLabelXDisplay &&\n this.heatMap.heatMapSeries.checkLabelYDisplay) {\n offset = parseInt(this.heatMap.cellSettings.textStyle.size, 10) / 2;\n }\n this.tooltipObject = new tool({\n enableAnimation: false,\n offset: offset,\n location: { x: x, y: y },\n theme: this.heatMap.theme,\n content: tempTooltipText,\n areaBounds: {\n height: this.heatMap.initialClipRect.height + this.heatMap.initialClipRect.y,\n width: this.heatMap.initialClipRect.width, x: this.heatMap.initialClipRect.x\n }\n }, '#' + this.heatMap.element.id + 'Celltooltipcontainer');\n };\n /**\n * To create div container for tooltip.\n * @return {void}\n * @private\n */\n Tooltip.prototype.createTooltipDiv = function (heatMap) {\n var element2 = createElement('div', {\n id: this.heatMap.element.id + 'Celltooltipcontainer',\n styles: 'position:absolute'\n });\n this.heatMap.element.appendChild(createElement('div', {\n id: this.heatMap.element.id + 'Celltooltipparent',\n styles: 'position:relative'\n })\n .appendChild(element2));\n };\n /**\n * To get default tooltip content.\n * @private\n */\n Tooltip.prototype.getTooltipContent = function (currentRect, hetmapSeries) {\n var value;\n var content;\n var heatMap = this.heatMap;\n var adaptData = this.heatMap.dataSource;\n if (heatMap.bubbleSizeWithColor) {\n var xAxis = heatMap.xAxis.title && heatMap.xAxis.title.text !== '' ? heatMap.xAxis.title.text : 'X-Axis';\n var yAxis = heatMap.yAxis.title && heatMap.yAxis.title.text !== '' ? heatMap.yAxis.title.text : 'Y-Axis';\n var value1 = adaptData.isJsonData && adaptData.adaptorType === 'Cell' ?\n heatMap.dataSource.bubbleDataMapping.size : 'Value 1';\n var value2 = adaptData.isJsonData && adaptData.adaptorType === 'Cell' ?\n heatMap.dataSource.bubbleDataMapping.color : 'Value 2';\n value = hetmapSeries.getFormatedText(currentRect.value[0].bubbleData, this.heatMap.cellSettings.format);\n content = [xAxis + ' : ' + hetmapSeries.hoverXAxisLabel + '
    '\n + yAxis + ' : ' + hetmapSeries.hoverYAxisLabel + '
    '\n + value1 + ' : ' + value + '
    '\n + value2 + ' : '\n + hetmapSeries.getFormatedText(currentRect.value[1].bubbleData, this.heatMap.cellSettings.format)];\n }\n else {\n value = currentRect.value;\n content = [hetmapSeries.hoverXAxisLabel + ' | ' + hetmapSeries.hoverYAxisLabel + ' : ' +\n hetmapSeries.getFormatedText(value, this.heatMap.cellSettings.format)];\n }\n return content;\n };\n /**\n * To render tooltip.\n * @private\n */\n Tooltip.prototype.renderTooltip = function (currentRect) {\n var hetmapSeries = this.heatMap.heatMapSeries;\n var tempTooltipText = [''];\n var showTooltip = this.heatMap.bubbleSizeWithColor ?\n !isNullOrUndefined(currentRect.value) && !isNullOrUndefined(currentRect.value[0].bubbleData)\n && currentRect.value[0].bubbleData.toString() !== '' ? true : false\n : isNullOrUndefined(currentRect.value) || (!isNullOrUndefined(currentRect.value) &&\n currentRect.value.toString() === '') ? false : true;\n if (!showTooltip) {\n this.showHideTooltip(false, false);\n }\n else {\n if (!isNullOrUndefined(this.heatMap.tooltipRender)) {\n // this.tooltipObject.header = '';\n // this.tooltipObject.content = this.getTemplateText(\n // currentRect, this.heatMap.tooltipTemplate, hetmapSeries.hoverXAxisLabel,\n // hetmapSeries.hoverYAxisLabel);\n var content = this.getTooltipContent(currentRect, hetmapSeries);\n var argData = {\n heatmap: this.heatMap,\n cancel: false,\n name: 'tooltipRender',\n value: currentRect.value,\n xValue: this.heatMap.heatMapSeries.hoverXAxisValue,\n yValue: this.heatMap.heatMapSeries.hoverYAxisValue,\n xLabel: this.heatMap.heatMapSeries.hoverXAxisLabel ?\n this.heatMap.heatMapSeries.hoverXAxisLabel.toString() : null,\n yLabel: this.heatMap.heatMapSeries.hoverYAxisLabel ?\n this.heatMap.heatMapSeries.hoverYAxisLabel.toString() : null,\n content: content\n };\n this.heatMap.trigger('tooltipRender', argData);\n if (!argData.cancel) {\n tempTooltipText = argData.content;\n }\n else {\n if (this.tooltipObject) {\n this.showHideTooltip(false);\n }\n return;\n }\n }\n else {\n // this.tooltipObject.header = hetmapSeries.hoverYAxisLabel.toString();\n tempTooltipText = this.getTooltipContent(currentRect, hetmapSeries);\n }\n if (!this.tooltipObject) {\n this.createTooltip(currentRect.x + (currentRect.width / 2), currentRect.y + (currentRect.height / 2), tempTooltipText);\n }\n else {\n this.tooltipObject.content = tempTooltipText;\n }\n this.showHideTooltip(true);\n this.tooltipObject.enableAnimation = (this.isFirst || this.isFadeout) ? false : true;\n this.isFirst = (this.isFirst) ? false : this.isFirst;\n this.isFadeout = (this.isFadeout) ? false : this.isFadeout;\n this.tooltipObject.location.x = currentRect.x + (currentRect.width / 2);\n this.tooltipObject.location.y = currentRect.y + (currentRect.height / 2);\n }\n };\n return Tooltip;\n}());\nexport { Tooltip };\n","import * as index from '@syncfusion/ej2-heatmap';\nindex.HeatMap.Inject( index.Legend,index.Tooltip,index.Adaptor);\nexport * from '@syncfusion/ej2-heatmap';\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Options for customizing the fonts.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Regular')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the margin of linear gauge.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the border in linear gauge.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Options for customizing the annotation.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(0)\n ], Annotation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Annotation.prototype, \"y\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n __decorate([\n Complex({ size: '12px', color: null }, Font)\n ], Annotation.prototype, \"font\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"axisIndex\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"axisValue\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Options for customizing the container of linear gauge.\n */\nvar Container = /** @class */ (function (_super) {\n __extends(Container, _super);\n function Container() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Normal')\n ], Container.prototype, \"type\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"height\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], Container.prototype, \"roundedCornerRadius\", void 0);\n __decorate([\n Property('transparent')\n ], Container.prototype, \"backgroundColor\", void 0);\n __decorate([\n Complex({ width: 1, color: '#bfbfbf' }, Border)\n ], Container.prototype, \"border\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"offset\", void 0);\n return Container;\n}(ChildProperty));\nexport { Container };\n/**\n * Options for customizing the tooltip in linear gauge.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#000000')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#ffffff', size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({}, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\n/** Options for customizing the axis line. */\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Line.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], Line.prototype, \"height\", void 0);\n __decorate([\n Property(2)\n ], Line.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Line.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Line.prototype, \"offset\", void 0);\n return Line;\n}(ChildProperty));\nexport { Line };\n/**\n * Options for customizing the axis labels appearance.\n */\nvar Label = /** @class */ (function (_super) {\n __extends(Label, _super);\n function Label() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ size: '12px', color: null }, Font)\n ], Label.prototype, \"font\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"useRangeColor\", void 0);\n __decorate([\n Property('')\n ], Label.prototype, \"format\", void 0);\n __decorate([\n Property(0)\n ], Label.prototype, \"offset\", void 0);\n return Label;\n}(ChildProperty));\nexport { Label };\n/**\n * Options for customizing the ranges of an axis.\n */\nvar Range = /** @class */ (function (_super) {\n __extends(Range, _super);\n function Range() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Range.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"end\", void 0);\n __decorate([\n Property('Outside')\n ], Range.prototype, \"position\", void 0);\n __decorate([\n Property('')\n ], Range.prototype, \"color\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"startWidth\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"endWidth\", void 0);\n __decorate([\n Property(0)\n ], Range.prototype, \"offset\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], Range.prototype, \"border\", void 0);\n return Range;\n}(ChildProperty));\nexport { Range };\n/**\n * Options for customizing the minor tick lines.\n */\nvar Tick = /** @class */ (function (_super) {\n __extends(Tick, _super);\n function Tick() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(20)\n ], Tick.prototype, \"height\", void 0);\n __decorate([\n Property(2)\n ], Tick.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"interval\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"offset\", void 0);\n return Tick;\n}(ChildProperty));\nexport { Tick };\n/**\n * Options for customizing the pointers of an axis.\n */\nvar Pointer = /** @class */ (function (_super) {\n __extends(Pointer, _super);\n function Pointer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.animationComplete = true;\n /** @private */\n _this.currentValue = null;\n return _this;\n }\n __decorate([\n Property('Marker')\n ], Pointer.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"value\", void 0);\n __decorate([\n Property('InvertedTriangle')\n ], Pointer.prototype, \"markerType\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"imageUrl\", void 0);\n __decorate([\n Complex({ color: '#808080' }, Border)\n ], Pointer.prototype, \"border\", void 0);\n __decorate([\n Property(10)\n ], Pointer.prototype, \"roundedCornerRadius\", void 0);\n __decorate([\n Property('Far')\n ], Pointer.prototype, \"placement\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"height\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Pointer.prototype, \"opacity\", void 0);\n __decorate([\n Property(0)\n ], Pointer.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(false)\n ], Pointer.prototype, \"enableDrag\", void 0);\n __decorate([\n Property(0)\n ], Pointer.prototype, \"offset\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"description\", void 0);\n return Pointer;\n}(ChildProperty));\nexport { Pointer };\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Specifies the minimum value of an axis.\n * @default 0\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n return _this;\n }\n __decorate([\n Property(0)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(100)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Complex({}, Line)\n ], Axis.prototype, \"line\", void 0);\n __decorate([\n Collection([{}], Range)\n ], Axis.prototype, \"ranges\", void 0);\n __decorate([\n Collection([{}], Pointer)\n ], Axis.prototype, \"pointers\", void 0);\n __decorate([\n Complex({ width: 2, height: 20 }, Tick)\n ], Axis.prototype, \"majorTicks\", void 0);\n __decorate([\n Complex({ width: 1, height: 10 }, Tick)\n ], Axis.prototype, \"minorTicks\", void 0);\n __decorate([\n Complex({}, Label)\n ], Axis.prototype, \"labelStyle\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { axisLabelRender } from '../model/constant';\nimport { VisibleLabels, Size, measureText, getLabelFormat, Rect } from '../utils/helper';\nimport { valueToCoefficient, Align, getRangePalette, VisibleRange, withInRange, calculateNiceInterval } from '../utils/helper';\n/**\n * @private\n * To calculate the overall axis bounds for gauge.\n */\nvar AxisLayoutPanel = /** @class */ (function () {\n function AxisLayoutPanel(gauge) {\n this.gauge = gauge;\n }\n /**\n * To calculate the axis bounds\n */\n AxisLayoutPanel.prototype.calculateAxesBounds = function () {\n var axis;\n var bounds;\n var pointer;\n this.gauge.nearSizes = [];\n this.gauge.farSizes = [];\n var x;\n var y;\n var width;\n var height;\n var axisPadding = 8;\n var containerRect = this.gauge.containerBounds;\n this.checkThermometer();\n for (var i = 0; i < this.gauge.axes.length; i++) {\n axis = this.gauge.axes[i];\n axis.checkAlign = new Align(i, ((!axis.opposedPosition) ? 'Near' : 'Far'));\n (!axis.opposedPosition) ? this.gauge.nearSizes.push(1) : this.gauge.farSizes.push(1);\n this.calculateLineBounds(axis, i);\n this.calculateTickBounds(axis, i);\n this.calculateLabelBounds(axis, i);\n if (axis.pointers.length > 0) {\n this.calculatePointerBounds(axis, i);\n }\n if (axis.ranges.length > 0) {\n this.calculateRangesBounds(axis, i);\n }\n bounds = axis.labelBounds;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition) ? bounds.x - axisPadding : axis.lineBounds.x;\n y = axis.lineBounds.y;\n height = axis.lineBounds.height;\n width = Math.abs((!axis.opposedPosition) ? (axis.lineBounds.x - x) : ((bounds.x + bounds.width + axisPadding) - x));\n }\n else {\n y = (!axis.opposedPosition) ? bounds.y - bounds.height - axisPadding : axis.lineBounds.y;\n x = axis.lineBounds.x;\n width = axis.lineBounds.width;\n height = Math.abs((!axis.opposedPosition) ? Math.abs(axis.lineBounds.y - y) : (bounds.y + axisPadding) - y);\n }\n axis.bounds = new Rect(x, y, width, height);\n }\n };\n /**\n * Calculate axis line bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateLineBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var index;\n var prevAxis;\n var lineHeight = axis.line.height;\n var orientation = this.gauge.orientation;\n var containerRect = this.gauge.containerBounds;\n lineHeight = (axis.line.width > 0) ? lineHeight : null;\n if (orientation === 'Vertical') {\n y = (isNullOrUndefined(lineHeight)) ? containerRect.y :\n containerRect.y + ((containerRect.height / 2) - (lineHeight / 2));\n width = axis.line.width;\n height = (isNullOrUndefined(lineHeight)) ? containerRect.height : lineHeight;\n }\n else {\n x = (isNullOrUndefined(lineHeight)) ? containerRect.x :\n containerRect.x + ((containerRect.width / 2) - (lineHeight / 2));\n height = axis.line.width;\n width = (isNullOrUndefined(lineHeight)) ? containerRect.width : lineHeight;\n }\n index = this.checkPreviousAxes(axis, axisIndex);\n if (isNullOrUndefined(index)) {\n if (orientation === 'Vertical') {\n x = (!axis.opposedPosition ? containerRect.x : containerRect.x + containerRect.width) + axis.line.offset;\n }\n else {\n y = (!axis.opposedPosition ? containerRect.y : containerRect.y + containerRect.height) + axis.line.offset;\n }\n }\n else {\n prevAxis = this.gauge.axes[index];\n if (orientation === 'Vertical') {\n x = ((!axis.opposedPosition) ? prevAxis.bounds.x : (prevAxis.bounds.x + prevAxis.bounds.width)) + axis.line.offset;\n }\n else {\n y = ((!axis.opposedPosition) ? prevAxis.bounds.y : (prevAxis.bounds.y + prevAxis.bounds.height)) + axis.line.offset;\n }\n }\n axis.lineBounds = new Rect(x, y, width, height);\n };\n /**\n * Calculate axis tick bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateTickBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var major;\n var minor;\n var min = Math.min(axis.minimum, axis.maximum);\n var max = Math.max(axis.minimum, axis.maximum);\n min = (min === max) ? max - 1 : min;\n var interval = axis.majorTicks.interval;\n var bounds = axis.lineBounds;\n major = axis.majorTicks;\n minor = axis.minorTicks;\n axis.majorInterval = major.interval;\n axis.minorInterval = minor.interval;\n var size = (this.gauge.orientation === 'Vertical' ? bounds.height : bounds.width);\n var lineSize = (this.gauge.orientation === 'Vertical' ? bounds.width : bounds.height) / 2;\n axis.majorInterval = isNullOrUndefined(axis.majorInterval) ? calculateNiceInterval(min, max, size, this.gauge.orientation)\n : major.interval;\n axis.visibleRange = new VisibleRange(min, max, axis.majorInterval, (max - min));\n axis.minorInterval = (isNullOrUndefined(axis.minorInterval)) ? axis.majorInterval / 2 : axis.minorInterval;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition ? (bounds.x - lineSize - major.height) : bounds.x + lineSize) + major.offset;\n axis.majorTickBounds = new Rect(x, bounds.y, major.height, bounds.height);\n x = (!axis.opposedPosition ? (bounds.x - lineSize - minor.height) : bounds.x + lineSize) + minor.offset;\n axis.minorTickBounds = new Rect(x, bounds.y, minor.height, bounds.height);\n }\n else {\n y = (!axis.opposedPosition ? (bounds.y - lineSize - major.height) : bounds.y + lineSize) + major.offset;\n axis.majorTickBounds = new Rect(bounds.x, y, bounds.width, major.height);\n y = (!axis.opposedPosition ? (bounds.y - lineSize - minor.height) : bounds.y + lineSize) + minor.offset;\n axis.minorTickBounds = new Rect(bounds.x, y, bounds.width, minor.height);\n }\n };\n /**\n * To Calculate axis label bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateLabelBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var padding = 5;\n var bounds = axis.majorTickBounds;\n var offset = axis.labelStyle.offset;\n this.calculateVisibleLabels(axis);\n width = axis.maxLabelSize.width;\n height = axis.maxLabelSize.height / 2;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition ? (bounds.x - width - padding) : (bounds.x + bounds.width + padding)) + offset;\n y = axis.lineBounds.y;\n }\n else {\n y = (!axis.opposedPosition ? (bounds.y - padding) : ((bounds.y + bounds.height + padding) + height)) + offset;\n x = axis.lineBounds.x;\n }\n axis.labelBounds = new Rect(x, y, width, height);\n };\n /**\n * Calculate pointer bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculatePointerBounds = function (axis, axisIndex) {\n var pointer;\n var actualValue;\n var length;\n var val = [];\n var range = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var bounds;\n var line = axis.lineBounds;\n var label = axis.labelBounds;\n var currentVal;\n var type;\n var markerType;\n var nearX;\n var farX;\n var nearY;\n var farY;\n var minimumValue = Math.min(range.min, range.max);\n var maximumValue = Math.max(range.min, range.max);\n for (var i = 0; i < axis.pointers.length; i++) {\n pointer = axis.pointers[i];\n pointer.currentValue = pointer.value !== null ?\n pointer.value < minimumValue ? minimumValue : pointer.value > maximumValue ? maximumValue : pointer.value\n : minimumValue;\n if (pointer.width > 0 && withInRange(pointer.currentValue, null, null, range.max, range.min, 'pointer')) {\n this['calculate' + pointer.type + 'Bounds'](axisIndex, axis, i, pointer);\n }\n }\n };\n /**\n * Calculate marker pointer bounds\n * @param axisIndex\n * @param axis\n * @param pointerIndex\n * @param pointer\n */\n AxisLayoutPanel.prototype.calculateMarkerBounds = function (axisIndex, axis, pointerIndex, pointer) {\n var x;\n var y;\n var line = axis.lineBounds;\n var offset = pointer.offset;\n var range = axis.visibleRange;\n var placement = pointer.placement;\n var tick = axis.majorTickBounds;\n var label = axis.labelBounds;\n var border = pointer.border.width;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition) ? (placement === 'Near') ? label.x : (placement === 'Center') ? tick.x : line.x :\n placement === 'Far' ? label.x + label.width : (placement === 'Center' ? tick.x + tick.width : line.x);\n x = !axis.opposedPosition ? ((pointer.placement === 'Far' ? x + border : x - border) + (offset)) :\n ((pointer.placement === 'Near' ? x - border : x + border) + (offset));\n y = ((valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * line.height) + line.y);\n }\n else {\n y = (!axis.opposedPosition) ? (placement === 'Near') ? label.y - label.height : (placement === 'Center') ? tick.y :\n line.y : (placement === 'Far') ? label.y : (placement === 'Center') ? tick.y + tick.height : line.y;\n y = !axis.opposedPosition ? ((pointer.placement === 'Far' ? y + border : y - border) + (offset)) :\n ((pointer.placement === 'Near' ? y - border : y + border) + (offset));\n x = ((valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * line.width) + line.x);\n }\n pointer.bounds = new Rect(x, y, pointer.width, pointer.height);\n };\n /**\n * Calculate bar pointer bounds\n * @param axisIndex\n * @param axis\n * @param pointerIndex\n * @param pointer\n */\n AxisLayoutPanel.prototype.calculateBarBounds = function (axisIndex, axis, pointerIndex, pointer) {\n var x1;\n var x2;\n var y1;\n var y2;\n var height;\n var width;\n var line = axis.lineBounds;\n var padding = 10;\n var range = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var offset = pointer.offset;\n var container = this.gauge.containerBounds;\n if (orientation === 'Vertical') {\n x1 = (container.width > 0) ? container.x + ((container.width / 2) - (pointer.width / 2)) :\n (!axis.opposedPosition) ? (line.x + padding) : (line.x - pointer.width - padding);\n x1 += (offset);\n y1 = ((valueToCoefficient(pointer.currentValue, axis, orientation, range) * line.height) + line.y);\n y2 = ((valueToCoefficient(range.min, axis, orientation, range) * line.height) + line.y);\n height = Math.abs(y2 - y1);\n y1 = (!axis.isInversed) ? y1 : y2;\n width = pointer.width;\n }\n else {\n x1 = ((valueToCoefficient(range.min, axis, orientation, range) * line.width) + line.x);\n y1 = (container.height > 0) ? (container.y + (container.height / 2) - (pointer.height) / 2) :\n (!axis.opposedPosition) ? (line.y + padding) : (line.y - pointer.height - padding);\n y1 += (offset);\n height = pointer.height;\n x2 = ((valueToCoefficient(pointer.currentValue, axis, orientation, range) * line.width) + line.x);\n width = Math.abs(x2 - x1);\n x1 = (!axis.isInversed) ? x1 : x2;\n }\n pointer.bounds = new Rect(x1, y1, width, height);\n };\n /**\n * Calculate ranges bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateRangesBounds = function (axis, axisIndex) {\n var range;\n var start;\n var end;\n var line = axis.lineBounds;\n var visibleRange = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var startVal;\n var endVal;\n var pointX;\n var pointY;\n var width;\n var height;\n var position;\n var startWidth;\n var endWidth;\n var colors;\n for (var i = 0; i < axis.ranges.length; i++) {\n range = axis.ranges[i];\n if (withInRange(null, range.start, range.end, visibleRange.max, visibleRange.min, 'range')) {\n start = Math.min(range.start, range.end);\n end = Math.max(range.start, range.end);\n position = range.position;\n startWidth = range.startWidth;\n endWidth = range.endWidth;\n colors = this.gauge.rangePalettes.length ? this.gauge.rangePalettes : getRangePalette();\n range.interior = range.color ? range.color : colors[i % colors.length];\n if (this.gauge.orientation === 'Vertical') {\n pointX = line.x + (range.offset);\n pointY = (valueToCoefficient(end, axis, orientation, visibleRange) * line.height) + line.y;\n height = (valueToCoefficient(start, axis, orientation, visibleRange) * line.height) + line.y;\n height -= pointY;\n startVal = !axis.opposedPosition ? position === 'Inside' ? (pointX + startWidth) : (pointX - startWidth)\n : position === 'Inside' ? (pointX - startWidth) : (pointX + startWidth);\n endVal = !axis.opposedPosition ? position === 'Inside' ? (pointX + endWidth) : (pointX - endWidth) :\n position === 'Inside' ? (pointX - endWidth) : (pointX + endWidth);\n range.path = 'M' + pointX + ' ' + pointY + ' L ' + pointX + ' ' + (pointY + height) +\n ' L ' + startVal + ' ' + (pointY + height) + ' L ' + endVal + ' ' + pointY +\n ' L ' + pointX + ' ' + pointY + ' z ';\n }\n else {\n pointX = (valueToCoefficient(end, axis, orientation, visibleRange) * line.width) + line.x;\n pointY = axis.lineBounds.y + (range.offset);\n width = (valueToCoefficient(start, axis, orientation, visibleRange) * line.width) + line.x;\n width = pointX - width;\n startVal = !axis.opposedPosition ? position === 'Inside' ? (pointY + startWidth) :\n (pointY - startWidth) : (position === 'Inside') ? (pointY - startWidth) :\n (pointY + startWidth);\n endVal = !axis.opposedPosition ? position === 'Inside' ? (pointY + endWidth) : (pointY - endWidth) :\n (position === 'Inside') ? (pointY - endWidth) : (pointY + endWidth);\n range.path = 'M' + pointX + ' ' + pointY + ' L ' + (pointX - width) + ' ' + pointY +\n ' L ' + (pointX - width) + ' ' + startVal + ' L ' + pointX + ' ' + endVal +\n ' L ' + pointX + ' ' + pointY + ' z ';\n }\n }\n }\n };\n AxisLayoutPanel.prototype.checkPreviousAxes = function (currentAxis, axisIndex) {\n var index = axisIndex - 1;\n var prevAxis;\n var isPositive = (index >= 0) ? true : false;\n if (isPositive) {\n prevAxis = this.gauge.axes[index];\n index = (prevAxis.checkAlign.align === currentAxis.checkAlign.align) ? index : this.checkPreviousAxes(currentAxis, index);\n }\n else {\n index = null;\n }\n return index;\n };\n /**\n *\n * @param axis To calculate the visible labels\n */\n AxisLayoutPanel.prototype.calculateVisibleLabels = function (axis) {\n axis.visibleLabels = [];\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var interval = axis.visibleRange.interval;\n var format;\n var argsData;\n var style = axis.labelStyle;\n var text;\n var labelSize;\n var customLabelFormat = style.format && style.format.match('{value}') !== null;\n format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(style.format), useGrouping: this.gauge.useGroupingSeparator\n });\n for (var i = min; (i <= max && interval > 0); i += interval) {\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: customLabelFormat ? style.format.replace(new RegExp('{value}', 'g'), format(i)) :\n format(i),\n value: i\n };\n this.gauge.trigger(axisLabelRender, argsData);\n labelSize = measureText(argsData.text, axis.labelStyle.font);\n if (!argsData.cancel) {\n axis.visibleLabels.push(new VisibleLabels(argsData.text, i, labelSize));\n }\n }\n this.getMaxLabelWidth(this.gauge, axis);\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.getMaxLabelWidth = function (gauge, axis) {\n axis.maxLabelSize = new Size(0, 0);\n var label;\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n label = axis.visibleLabels[i];\n label.size = measureText(label.text, axis.labelStyle.font);\n if (label.size.width > axis.maxLabelSize.width) {\n axis.maxLabelSize.width = label.size.width;\n }\n if (label.size.height > axis.maxLabelSize.height) {\n axis.maxLabelSize.height = label.size.height;\n }\n }\n };\n AxisLayoutPanel.prototype.checkThermometer = function () {\n if (this.gauge.container.type === 'Thermometer') {\n this.gauge.axes.map(function (axis, index) {\n if (axis.isInversed) {\n axis.pointers.map(function (pointer, index) {\n if (pointer.type === 'Bar') {\n axis.isInversed = false;\n }\n });\n }\n });\n }\n };\n return AxisLayoutPanel;\n}());\nexport { AxisLayoutPanel };\n","/**\n * Specifies the linear gauge constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var annotationRender = 'annotationRender';\n/** @private */\nexport var gaugeMouseMove = 'gaugeMouseMove';\n/** @private */\nexport var gaugeMouseLeave = 'gaugeMouseLeave';\n/** @private */\nexport var gaugeMouseDown = 'gaugeMouseDown';\n/** @private */\nexport var gaugeMouseUp = 'gaugeMouseUp';\n/** @private */\nexport var valueChange = 'valueChange';\n/** @private */\nexport var resized = 'resized';\n","import { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../model/constant';\nimport { Size, valueToCoefficient, PathOption } from '../utils/helper';\nimport { calculateShapes, getBox } from '../utils/helper';\n/**\n * @private\n * To handle the animation for gauge\n */\nvar Animations = /** @class */ (function () {\n function Animations(gauge) {\n this.gauge = gauge;\n }\n /**\n * To do the marker pointer animation.\n * @return {void}\n * @private\n */\n Animations.prototype.performMarkerAnimation = function (element, axis, pointer) {\n var _this = this;\n var markerElement = element;\n var options;\n var timeStamp;\n var range = axis.visibleRange;\n var rectHeight = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.height : axis.lineBounds.width;\n var rectY = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.y : axis.lineBounds.x;\n if (this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * rectHeight) + rectY;\n }\n else {\n pointer.bounds.x = (valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * rectHeight) + rectY;\n }\n options = new PathOption(markerElement.id, null, null, null);\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.gauge.orientation, axis, pointer);\n var currentValue;\n var start = pointer.startValue;\n var end = pointer.currentValue;\n start = (start === end) ? range.min : start;\n var val = Math.abs(start - end);\n var currentPath = options.d;\n new Animation({}).animate(markerElement, {\n duration: pointer.animationDuration,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n timeStamp = ((args.timeStamp - args.delay) / args.duration);\n currentValue = (start < end) ? start + (timeStamp * val) : start - (timeStamp * val);\n if (_this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) *\n rectHeight) + rectY;\n }\n else {\n pointer.bounds.x = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) *\n rectHeight) + rectY;\n }\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, _this.gauge.orientation, axis, pointer);\n markerElement.setAttribute('d', options.d);\n }\n },\n end: function (model) {\n markerElement.setAttribute('d', currentPath);\n pointer.startValue = pointer.currentValue;\n pointer.animationComplete = true;\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n /**\n * Perform the bar pointer animation\n * @param element\n * @param axis\n * @param pointer\n */\n Animations.prototype.performBarAnimation = function (element, axis, pointer) {\n var _this = this;\n var val;\n var radix = 10;\n var timeStamp;\n var value2;\n var value1;\n var height;\n var currentValue;\n var clipHeight;\n var clipY;\n var clipX;\n var clipVal;\n var rectHeight;\n var rectY;\n var rectX;\n var rectWidth;\n var clipWidth;\n var currentHeight;\n var clipElement;\n var range = axis.visibleRange;\n var pointerElement = element;\n var pathElement;\n var svgPathElement;\n var clipRect;\n var lineHeight = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.height : axis.lineBounds.width;\n var lineY = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.y : axis.lineBounds.x;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var start = pointer.startValue;\n var end = pointer.currentValue;\n start = (start === end) ? range.min : start;\n var path = '';\n var currentPath = '';\n var tagName = pointerElement.tagName;\n val = Math.abs(start - end);\n var pointerValue = (valueToCoefficient(end, axis, this.gauge.orientation, range) * lineHeight) + lineY;\n var startPointerVal = (valueToCoefficient(range.min, axis, this.gauge.orientation, range) *\n lineHeight) + lineY;\n rectY = (this.gauge.orientation === 'Vertical') ? !axis.isInversed ? pointerValue : startPointerVal :\n axis.isInversed ? pointerValue : startPointerVal;\n rectHeight = Math.abs(startPointerVal - pointerValue);\n if (this.gauge.container.type === 'Thermometer' && start === 0) {\n clipElement = pointerElement.parentElement.childNodes[1].childNodes[0].childNodes[0];\n if (this.gauge.orientation === 'Vertical') {\n clipY = clipElement.getAttribute('y');\n clipHeight = clipElement.getAttribute('height');\n clipVal = parseInt(clipY, radix) + parseInt(clipHeight, radix);\n clipElement.setAttribute('y', clipVal.toString());\n }\n else {\n clipX = clipElement.getAttribute('x');\n clipWidth = clipElement.getAttribute('width');\n clipVal = parseInt(clipX, radix) + parseInt(clipWidth, radix);\n clipElement.setAttribute('width', '0');\n }\n }\n path = getBox(pointer.bounds, this.gauge.container.type, this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.gauge.container.width, axis, pointer.roundedCornerRadius);\n new Animation({}).animate(pointerElement, {\n duration: pointer.animationDuration,\n progress: function (animate) {\n if (animate.timeStamp >= animate.delay) {\n timeStamp = ((animate.timeStamp - animate.delay) / animate.duration);\n currentValue = (start < end) ? start + (timeStamp * val) : start - (timeStamp * val);\n value2 = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) * lineHeight) + lineY;\n value1 = (valueToCoefficient(range.min, axis, _this.gauge.orientation, range) * lineHeight) + lineY;\n currentHeight = Math.abs(value2 - value1);\n if (_this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (!axis.isInversed) ? value2 : value1;\n pointer.bounds.height = currentHeight;\n }\n else {\n pointer.bounds.x = (axis.isInversed) ? value2 : value1;\n pointer.bounds.width = currentHeight;\n }\n if (tagName === 'path') {\n if (start === 0 && _this.gauge.container.type === 'Thermometer') {\n (_this.gauge.orientation === 'Vertical') ?\n clipElement.setAttribute('y', (clipVal - (timeStamp * parseInt(clipHeight, radix))).toString()) :\n clipElement.setAttribute('width', (timeStamp * parseInt(clipWidth, radix)).toString());\n }\n currentPath = getBox(pointer.bounds, _this.gauge.container.type, _this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', _this.gauge.container.width, axis, pointer.roundedCornerRadius);\n pointerElement.setAttribute('d', currentPath);\n }\n else {\n if (_this.gauge.orientation === 'Vertical') {\n pointerElement.setAttribute('y', pointer.bounds.y.toString());\n pointerElement.setAttribute('height', pointer.bounds.height.toString());\n }\n else {\n pointerElement.setAttribute('x', pointer.bounds.x.toString());\n pointerElement.setAttribute('width', pointer.bounds.width.toString());\n }\n }\n }\n },\n end: function (model) {\n if (tagName === 'path') {\n if (start === 0 && _this.gauge.container.type === 'Thermometer') {\n pointerElement.parentElement.children[1].remove();\n }\n else {\n pointerElement.setAttribute('d', path);\n }\n }\n else {\n if (_this.gauge.orientation === 'Vertical') {\n pointerElement.setAttribute('y', rectY.toString());\n pointerElement.setAttribute('height', rectHeight.toString());\n }\n else {\n pointerElement.setAttribute('x', rectY.toString());\n pointerElement.setAttribute('width', rectHeight.toString());\n }\n }\n pointer.startValue = pointer.currentValue;\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n return Animations;\n}());\nexport { Animations };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { Animations } from './animation';\nimport { Size, valueToCoefficient, PathOption, textElement, getElement } from '../utils/helper';\nimport { TextOption, RectOption, calculateShapes, getBox, getPathToRect, getRangeColor } from '../utils/helper';\n/**\n * @private\n * To render the axis elements\n */\nvar AxisRenderer = /** @class */ (function (_super) {\n __extends(AxisRenderer, _super);\n function AxisRenderer(gauge) {\n return _super.call(this, gauge) || this;\n }\n AxisRenderer.prototype.renderAxes = function () {\n var _this = this;\n var axis;\n var major;\n var minor;\n this.axisElements = [];\n var gaugeAxesG = this.gauge.svgObject.querySelector('#' + this.gauge.element.id + '_Axis_Collections');\n if (gaugeAxesG) {\n remove(gaugeAxesG);\n }\n this.axisObject = this.gauge.renderer.createGroup({\n id: this.gauge.element.id + '_Axis_Collections',\n transform: 'translate( 0, 0 )'\n });\n for (var i = 0; i < this.gauge.axes.length; i++) {\n axis = this.gauge.axes[i];\n major = axis.majorTicks;\n minor = axis.minorTicks;\n this.htmlObject = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_Axis_Group_' + i });\n this.drawAxisLine(axis, this.htmlObject, i);\n this.drawRanges(axis, this.htmlObject, i);\n this.drawTicks(axis, major, this.htmlObject, 'MajorTicks', axis.majorTickBounds);\n this.drawTicks(axis, minor, this.htmlObject, 'MinorTicks', axis.minorTickBounds);\n this.drawAxisLabels(axis, this.htmlObject);\n this.drawPointers(axis, this.htmlObject, i);\n this.axisElements.push(this.htmlObject);\n }\n this.axisElements.forEach(function (axisElement) {\n _this.axisObject.appendChild(axisElement);\n });\n this.gauge.svgObject.appendChild(this.axisObject);\n if (this.gauge.nearSizes.length !== this.gauge.farSizes.length && this.gauge.axes.length > 1) {\n this.axisAlign(this.gauge.axes);\n }\n };\n AxisRenderer.prototype.axisAlign = function (axes) {\n var nearAxisWidth = 0;\n var farAxisWidth = 0;\n var axis;\n var tranX;\n var transY;\n if (this.gauge.orientation === 'Vertical') {\n axes.forEach(function (axis, axisIndex) {\n if (!axis.opposedPosition) {\n nearAxisWidth += axis.bounds.width;\n }\n else {\n farAxisWidth += axis.bounds.width;\n }\n });\n nearAxisWidth += this.gauge.containerBounds.width / 2;\n farAxisWidth += this.gauge.containerBounds.width / 2;\n tranX = (nearAxisWidth / 2) - (farAxisWidth / 2);\n this.axisObject.setAttribute('transform', 'translate(' + tranX + ',0)');\n if (!(isNullOrUndefined(this.gauge.containerObject))) {\n this.gauge.containerObject.setAttribute('transform', 'translate(' + tranX + ',0)');\n }\n }\n else {\n axes.forEach(function (axis, axisIndex) {\n if (!axis.opposedPosition) {\n nearAxisWidth += axis.bounds.height;\n }\n else {\n farAxisWidth += axis.bounds.height;\n }\n });\n nearAxisWidth += (this.gauge.containerBounds.height / 2);\n farAxisWidth += (this.gauge.containerBounds.height / 2);\n transY = (nearAxisWidth / 2) - (farAxisWidth / 2);\n this.axisObject.setAttribute('transform', 'translate(0,' + transY + ')');\n if (!(isNullOrUndefined(this.gauge.containerObject))) {\n this.gauge.containerObject.setAttribute('transform', 'translate(0,' + transY + ')');\n }\n }\n };\n AxisRenderer.prototype.drawAxisLine = function (axis, axisObject, axisIndex) {\n var options;\n var rect = axis.lineBounds;\n var path = '';\n if (axis.line.width > 0) {\n path = 'M' + rect.x + ' ' + rect.y + ' L ' + (this.gauge.orientation === 'Vertical' ? rect.x : rect.x + rect.width) +\n ' ' + (this.gauge.orientation === 'Vertical' ? rect.y + rect.height : rect.y) + 'z';\n options = new PathOption(this.gauge.element.id + '_AxisLine_' + axisIndex, axis.line.color, axis.line.width, axis.line.color, 1, axis.line.dashArray, path);\n axisObject.appendChild(this.gauge.renderer.drawPath(options));\n }\n };\n AxisRenderer.prototype.drawTicks = function (axis, ticks, axisObject, tickID, tickBounds) {\n var tickPath = '';\n var pointY;\n var pointX;\n var options;\n var range = axis.visibleRange;\n var line = axis.lineBounds;\n var interval = ((tickID === 'MajorTicks') ? axis.majorInterval : axis.minorInterval);\n for (var i = range.min; (i <= range.max && interval > 0); i += interval) {\n if ((tickID === 'MajorTicks') || (tickID === 'MinorTicks' && i !== range.min && i !== range.max\n && (i % axis.majorInterval) !== 0)) {\n if (this.gauge.orientation === 'Vertical') {\n pointX = tickBounds.x;\n pointY = (valueToCoefficient(i, axis, this.gauge.orientation, range) * line.height) + line.y;\n tickPath = tickPath.concat('M' + pointX + ' ' + pointY + ' ' + 'L' + (pointX + ticks.height) + ' ' + pointY + ' ');\n }\n else {\n pointX = (valueToCoefficient(i, axis, this.gauge.orientation, range) * line.width) + line.x;\n pointY = tickBounds.y;\n tickPath = tickPath.concat('M' + pointX + ' ' + pointY + ' ' + 'L' + pointX + ' ' + (pointY + ticks.height) + ' ');\n }\n }\n }\n options = new PathOption(this.gauge.element.id + '_' + tickID + 'Line_' + 0, ticks.color, ticks.width, ticks.color, 1, null, tickPath);\n axisObject.appendChild(this.gauge.renderer.drawPath(options));\n };\n AxisRenderer.prototype.drawAxisLabels = function (axis, axisObject) {\n var options;\n var pointX;\n var pointY;\n var rect = axis.lineBounds;\n var bounds = axis.labelBounds;\n var tick = axis.majorTickBounds;\n var labelSize;\n var range = axis.visibleRange;\n var anchor;\n var baseline;\n var padding = 5;\n var labelColor;\n var offset = axis.labelStyle.offset;\n var labelElement = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_AxisLabelsGroup' });\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n labelSize = axis.visibleLabels[i].size;\n labelColor = axis.labelStyle.useRangeColor ? getRangeColor(axis.visibleLabels[i].value, axis.ranges) :\n null;\n labelColor = isNullOrUndefined(labelColor) ? axis.labelStyle.font.color : labelColor;\n if (this.gauge.orientation === 'Vertical') {\n pointY = (valueToCoefficient(axis.visibleLabels[i].value, axis, this.gauge.orientation, range) *\n rect.height) + rect.y;\n pointX = (!axis.opposedPosition ? (tick.x - labelSize.width - padding) + offset : bounds.x);\n pointY += (labelSize.height / 4);\n }\n else {\n pointX = (valueToCoefficient(axis.visibleLabels[i].value, axis, this.gauge.orientation, range) *\n rect.width) + rect.x;\n pointY = bounds.y;\n anchor = 'middle';\n baseline = '';\n }\n options = new TextOption(this.gauge.element.id + '_AxisLabel_' + i, pointX, pointY, anchor, axis.visibleLabels[i].text, null, baseline);\n textElement(options, axis.labelStyle.font, labelColor, labelElement);\n }\n axisObject.appendChild(labelElement);\n };\n AxisRenderer.prototype.drawPointers = function (axis, axisObject, axisIndex) {\n var pointer;\n var clipId;\n var pointesGroup;\n var pointerClipRectGroup;\n pointesGroup = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_PointersGroup' });\n for (var i = 0; i < axis.pointers.length; i++) {\n pointer = axis.pointers[i];\n clipId = 'url(#' + this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + '_' + pointer.type + 'ClipRect_' + i + ')';\n if (!(isNullOrUndefined(pointer.bounds))) {\n pointerClipRectGroup = this.gauge.renderer.createGroup({\n 'id': this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer_' + i,\n 'clip-path': clipId\n });\n if (isNullOrUndefined(pointer.startValue)) {\n pointer.startValue = axis.visibleRange.min;\n }\n this['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointer, i, pointerClipRectGroup);\n pointesGroup.appendChild(pointerClipRectGroup);\n }\n }\n axisObject.appendChild(pointesGroup);\n };\n AxisRenderer.prototype.drawMarkerPointer = function (axis, axisIndex, pointer, pointerIndex, parentElement) {\n var options;\n var pointerID = this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer' + '_' + pointerIndex;\n var transform = 'translate( 0, 0 )';\n var pointerElement;\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n remove(getElement(pointerID));\n }\n options = new PathOption(pointerID, pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, null, transform);\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.gauge.orientation, axis, pointer);\n pointerElement = ((pointer.markerType === 'Circle' ? this.gauge.renderer.drawCircle(options)\n : (pointer.markerType === 'Image') ? this.gauge.renderer.drawImage(options) :\n this.gauge.renderer.drawPath(options)));\n parentElement.appendChild(pointerElement);\n if (pointer.animationDuration > 0 && !this.gauge.gaugeResized) {\n pointer.animationComplete = false;\n this.performMarkerAnimation(pointerElement, axis, pointer);\n }\n pointerElement.setAttribute('aria-label', pointer.description || 'Pointer:' + Number(pointer.currentValue).toString());\n };\n AxisRenderer.prototype.drawBarPointer = function (axis, axisIndex, pointer, pointerIndex, parentElement) {\n var rectOptions;\n var clipRectElement;\n var pointerElement;\n var path = '';\n var options;\n var box;\n var radius;\n var bottomRadius;\n var topRadius;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var pointerID = this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer' + '_' + pointerIndex;\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n remove(getElement(pointerID));\n }\n if (this.gauge.container.type === 'Normal') {\n rectOptions = new RectOption(pointerID, pointer.color, pointer.border, pointer.opacity, pointer.bounds, null, null);\n box = pointer.bounds;\n pointerElement = this.gauge.renderer.drawRectangle(rectOptions);\n }\n else {\n path = getBox(pointer.bounds, this.gauge.container.type, this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.gauge.container.width, axis, pointer.roundedCornerRadius);\n options = new PathOption(pointerID, pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, path);\n pointerElement = this.gauge.renderer.drawPath(options);\n box = getPathToRect(pointerElement.cloneNode(true), size, this.gauge.element);\n }\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n var element = getElement(pointerID).firstElementChild;\n if (this.gauge.container.type === 'Normal') {\n element.setAttribute('x', rectOptions.x + '');\n element.setAttribute('y', rectOptions.y + '');\n element.setAttribute('width', rectOptions.width + '');\n element.setAttribute('height', rectOptions.height + '');\n }\n else {\n element.setAttribute('d', options.d);\n }\n }\n else {\n parentElement.appendChild(pointerElement);\n }\n pointerElement.setAttribute('aria-label', pointer.description || 'Pointer:' + Number(pointer.currentValue).toString());\n if (pointer.animationDuration > 0 && !this.gauge.gaugeResized) {\n if (this.gauge.container.type === 'Thermometer' && pointer.startValue === 0) {\n clipRectElement = this.gauge.renderer.drawClipPath(new RectOption(this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + '_' + pointer.type + 'ClipRect_' + pointerIndex, 'transparent', { width: 1, color: 'Gray' }, 1, box));\n parentElement.appendChild(clipRectElement);\n }\n this.performBarAnimation(pointerElement, axis, pointer);\n }\n };\n AxisRenderer.prototype.drawRanges = function (axis, axisObject, axisIndex) {\n var range;\n var options;\n var rangeElement = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_RangesGroup' });\n for (var j = 0; j < axis.ranges.length; j++) {\n range = axis.ranges[j];\n if (!(isNullOrUndefined(range.path))) {\n options = new PathOption(this.gauge.element.id + '_AxisIndex_' + axisIndex + '_Range_' + j, range.interior, range.border.width, range.border.color, 1, null, range.path);\n rangeElement.appendChild(this.gauge.renderer.drawPath(options));\n }\n }\n axisObject.appendChild(rangeElement);\n };\n return AxisRenderer;\n}(Animations));\nexport { AxisRenderer };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, getElement, getElementOffset } from '../utils/helper';\nimport { getFontStyle, valueToCoefficient } from '../utils/helper';\nimport { annotationRender } from '../model/constant';\n/**\n * Represent the Annotation rendering for gauge\n */\nvar Annotations = /** @class */ (function () {\n function Annotations(gauge) {\n this.gauge = gauge;\n }\n /**\n * To render annotation elements\n */\n Annotations.prototype.renderAnnotationElements = function () {\n var _this = this;\n var secondaryID = this.gauge.element.id + '_Secondary_Element';\n var annotationGroup = createElement('div', { id: this.gauge.element.id + '_AnnotationsGroup' });\n annotationGroup.style.position = 'absolute';\n annotationGroup.style.top = '0px';\n annotationGroup.style.left = '0px';\n this.gauge.annotations.map(function (annotation, index) {\n if (annotation.content !== null) {\n _this.createAnnotationTemplate(annotationGroup, index);\n }\n });\n if (annotationGroup.childElementCount > 0 && !(isNullOrUndefined(getElement(secondaryID)))) {\n getElement(secondaryID).appendChild(annotationGroup);\n }\n };\n /**\n * To create annotation elements\n */\n Annotations.prototype.createAnnotationTemplate = function (element, annotationIndex) {\n var left;\n var top;\n var templateFn;\n var renderAnnotation = false;\n var templateElement;\n var axis;\n var axisIndex;\n var axisValue;\n var id = this.gauge.element.id + '_Annotation_' + annotationIndex;\n var annotation = this.gauge.annotations[annotationIndex];\n var childElement;\n childElement = createElement('div', {\n id: this.gauge.element.id + '_Annotation_' + annotationIndex, styles: 'position: absolute; z-index:' + annotation.zIndex + ';'\n });\n var argsData = {\n cancel: false, name: annotationRender, content: annotation.content,\n annotation: annotation, textStyle: annotation.font\n };\n this.gauge.trigger(annotationRender, argsData);\n if (!argsData.cancel) {\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(this.gauge).length) {\n templateElement = templateFn(this.gauge);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content,\n styles: getFontStyle(argsData.textStyle)\n }));\n }\n var offset = getElementOffset(childElement.cloneNode(true), this.gauge.element);\n if (!(isNullOrUndefined(annotation.axisValue))) {\n axisIndex = isNullOrUndefined(annotation.axisIndex) ? 0 : annotation.axisIndex;\n axis = this.gauge.axes[axisIndex];\n var range = axis.visibleRange;\n renderAnnotation = (annotation.axisValue >= range.min && annotation.axisValue <= range.max) ? true : false;\n var line = axis.lineBounds;\n if (this.gauge.orientation === 'Vertical') {\n left = line.x + annotation.x;\n top = ((valueToCoefficient(annotation.axisValue, axis, this.gauge.orientation, range) * line.height) + line.y);\n top += annotation.y;\n }\n else {\n left = ((valueToCoefficient(annotation.axisValue, axis, this.gauge.orientation, range) * line.width) + line.x);\n left += annotation.x;\n top = line.y + annotation.y;\n }\n left -= (offset.width / 2);\n top -= (offset.height / 2);\n }\n else {\n var elementRect = this.gauge.element.getBoundingClientRect();\n var bounds = this.gauge.svgObject.getBoundingClientRect();\n renderAnnotation = true;\n left = Math.abs(bounds.left - elementRect.left);\n top = Math.abs(bounds.top - elementRect.top);\n left = (annotation.horizontalAlignment === 'None') ? (left + annotation.x) : left;\n top = (annotation.verticalAlignment === 'None') ? top + annotation.y : top;\n switch (annotation.verticalAlignment) {\n case 'Near':\n top = top + annotation.y;\n break;\n case 'Center':\n top = top + annotation.y + ((bounds.height / 2) - (offset.height / 2));\n break;\n case 'Far':\n top = (top + bounds.height) + annotation.y - offset.height;\n break;\n }\n switch (annotation.horizontalAlignment) {\n case 'Near':\n left = left + annotation.x;\n break;\n case 'Center':\n left = left + annotation.x + ((bounds.width / 2) - (offset.width / 2));\n break;\n case 'Far':\n left = (left + bounds.width) + annotation.x - offset.width;\n break;\n }\n }\n childElement.style.left = left + 'px';\n childElement.style.top = top + 'px';\n if (renderAnnotation) {\n element.appendChild(childElement);\n }\n }\n };\n /*\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","import { createElement, Browser } from '@syncfusion/ej2-base';\nimport { tooltipRender } from '../model/constant';\nimport { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { getElement, GaugeLocation, Size, textFormatter, formatValue, Rect } from '../utils/helper';\nimport { getPointer } from '../utils/helper';\n/**\n * Represent the tooltip rendering for gauge\n */\nvar GaugeTooltip = /** @class */ (function () {\n function GaugeTooltip(gauge) {\n this.gauge = gauge;\n this.element = gauge.element;\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.tooltipId = this.gauge.element.id + '_LinearGauge_Tooltip';\n this.addEventListener();\n }\n /**\n * Internal use for tooltip rendering\n * @param pointerElement\n */\n /* tslint:disable:no-string-literal */\n GaugeTooltip.prototype.renderTooltip = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].pageX;\n pageY = touchArg.changedTouches[0].pageY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n var tooltipEle;\n var tooltipContent = [];\n if (target.id.indexOf('Pointer') > -1) {\n this.pointerElement = target;\n var areaRect = this.gauge.element.getBoundingClientRect();\n var current = getPointer(this.pointerElement, this.gauge);\n this.currentAxis = current.axis;\n this.axisIndex = current.axisIndex;\n this.currentPointer = current.pointer;\n tooltipContent = [textFormatter(this.tooltip.format, { value: this.currentPointer.currentValue }, this.gauge) ||\n formatValue(this.currentPointer.currentValue, this.gauge).toString()];\n if (document.getElementById(this.tooltipId)) {\n tooltipEle = document.getElementById(this.tooltipId);\n }\n else {\n tooltipEle = createElement('div', {\n id: this.tooltipId,\n className: 'EJ2-LinearGauge-Tooltip',\n styles: 'position: absolute;pointer-events:none;'\n });\n document.getElementById(this.gauge.element.id + '_Secondary_Element').appendChild(tooltipEle);\n }\n var location_1 = this.getTooltipLocation();\n var args = {\n name: tooltipRender, cancel: false, gauge: this.gauge, event: e, location: location_1, content: tooltipContent[0],\n tooltip: this.tooltip, axis: this.currentAxis, pointer: this.currentPointer\n };\n var tooltipPos = this.getTooltipPosition();\n location_1.y += (this.tooltip.template && tooltipPos === 'Top') ? 20 : 0;\n location_1.x += (this.tooltip.template && tooltipPos === 'Right') ? 20 : 0;\n this.gauge.trigger(tooltipRender, args);\n var template = args.tooltip.template;\n if (template !== null && Object.keys(template).length === 1) {\n template = template[Object.keys(template)[0]];\n }\n if (!args.cancel) {\n args['tooltip']['properties']['textStyle']['color'] = (this.gauge.theme === 'Highcontrast') ? '#00000' : '#FFFFFF';\n this.svgTooltip = new Tooltip({\n enable: true,\n header: '',\n data: { value: args.pointer.currentValue },\n template: template,\n content: [args.content],\n shapes: [],\n location: args.location,\n palette: [],\n inverted: !(args.gauge.orientation === 'Horizontal'),\n enableAnimation: args.tooltip.enableAnimation,\n fill: (this.gauge.theme === 'Highcontrast') ? '#FFFFFF' : args.tooltip.fill,\n areaBounds: new Rect(areaRect.left, tooltipPos === 'Bottom' ? location_1.y : areaRect.top, tooltipPos === 'Right' ? Math.abs(areaRect.left - location_1.x) : areaRect.width, areaRect.height),\n textStyle: args.tooltip.textStyle,\n border: args.tooltip.border,\n theme: args.gauge.theme\n });\n this.svgTooltip.appendTo(tooltipEle);\n }\n }\n else {\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n }\n };\n GaugeTooltip.prototype.getTooltipPosition = function () {\n var position;\n if (this.gauge.orientation === 'Vertical') {\n position = (!this.currentAxis.opposedPosition) ? 'Left' : 'Right';\n }\n else {\n position = (this.currentAxis.opposedPosition) ? 'Top' : 'Bottom';\n }\n return position;\n };\n GaugeTooltip.prototype.getTooltipLocation = function () {\n var location;\n var bounds;\n var radix = 10;\n var lineX;\n var lineY;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var x;\n var y;\n var height;\n var width;\n var lineId = this.gauge.element.id + '_AxisLine_' + this.axisIndex;\n var tickID = this.gauge.element.id + '_MajorTicksLine_' + this.axisIndex;\n var lineBounds;\n if (getElement(lineId)) {\n lineBounds = getElement(lineId).getBoundingClientRect();\n lineX = lineBounds.left;\n lineY = lineBounds.top;\n }\n else {\n lineBounds = getElement(tickID).getBoundingClientRect();\n lineX = (!this.currentAxis.opposedPosition) ? (lineBounds.left + lineBounds.width) : lineBounds.left;\n lineY = (!this.currentAxis.opposedPosition) ? (lineBounds.top + lineBounds.height) : lineBounds.top;\n }\n bounds = this.pointerElement.getBoundingClientRect();\n var elementRect = this.gauge.element.getBoundingClientRect();\n x = bounds.left - elementRect.left;\n y = bounds.top - elementRect.top;\n height = bounds.height;\n width = bounds.width;\n if (this.gauge.orientation === 'Vertical') {\n x = (lineX - elementRect.left);\n y = (this.currentPointer.type === 'Marker') ? y + (height / 2) : (!this.currentAxis.isInversed) ? y : y + height;\n }\n else {\n y = (lineY - elementRect.top);\n x = (this.currentPointer.type === 'Marker') ? (x + width / 2) : (!this.currentAxis.isInversed) ? x + width : x;\n }\n location = new GaugeLocation(x, y);\n return location;\n };\n GaugeTooltip.prototype.removeTooltip = function () {\n if (document.getElementsByClassName('EJ2-LinearGauge-Tooltip').length > 0) {\n document.getElementsByClassName('EJ2-LinearGauge-Tooltip')[0].remove();\n }\n };\n GaugeTooltip.prototype.mouseUpHandler = function (e) {\n this.renderTooltip(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n };\n /**\n * To bind events for tooltip module\n */\n GaugeTooltip.prototype.addEventListener = function () {\n if (this.gauge.isDestroyed) {\n return;\n }\n this.gauge.on(Browser.touchMoveEvent, this.renderTooltip, this);\n this.gauge.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * To unbind events for tooltip module\n */\n GaugeTooltip.prototype.removeEventListener = function () {\n if (this.gauge.isDestroyed) {\n return;\n }\n this.gauge.off(Browser.touchMoveEvent, this.renderTooltip);\n this.gauge.off(Browser.touchEndEvent, this.mouseUpHandler);\n };\n /*\n * Get module name.\n */\n GaugeTooltip.prototype.getModuleName = function () {\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n GaugeTooltip.prototype.destroy = function (gauge) {\n // Destroy method performed here\n this.removeEventListener();\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { SvgRenderer, Browser } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection, isNullOrUndefined, remove, createElement } from '@syncfusion/ej2-base';\nimport { Border, Font, Container, Margin, Annotation, TooltipSettings } from './model/base';\nimport { Axis } from './axes/axis';\nimport { load, loaded, gaugeMouseMove, gaugeMouseLeave, gaugeMouseDown, gaugeMouseUp, resized, valueChange } from './model/constant';\nimport { Size, valueToCoefficient, calculateShapes, stringToNumber, removeElement, getElement } from './utils/helper';\nimport { measureText, Rect, TextOption, textElement, GaugeLocation, RectOption, PathOption } from './utils/helper';\nimport { getBox, withInRange, getPointer, convertPixelToValue, isPointerDrag } from './utils/helper';\nimport { AxisLayoutPanel } from './axes/axis-panel';\nimport { AxisRenderer } from './axes/axis-renderer';\nimport { Annotations } from './annotations/annotations';\nimport { GaugeTooltip } from './user-interaction/tooltip';\n/**\n * Represents the EJ2 Linear gauge control.\n * ```html\n *
    \n * \n * ```\n */\nvar LinearGauge = /** @class */ (function (_super) {\n __extends(LinearGauge, _super);\n /**\n * @private\n * Constructor for creating the widget\n * @hidden\n */\n function LinearGauge(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.pointerDrag = false;\n /** @private */\n _this.mouseX = 0;\n /** @private */\n _this.mouseY = 0;\n /** @private */\n _this.gaugeResized = false;\n return _this;\n }\n /**\n * Initialize the preRender method.\n */\n LinearGauge.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger(load, { gauge: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.setCulture();\n this.createSvg();\n this.wireEvents();\n };\n LinearGauge.prototype.themeEffect = function () {\n if (this.theme === 'Highcontrast') {\n this.titleStyle.color = this.titleStyle.color || '#FFFFFF';\n this.setThemeColors('#FFFFFF', '#FFFFFF');\n }\n else {\n this.titleStyle.color = this.titleStyle.color || '#424242';\n this.setThemeColors('#686868', '#a6a6a6');\n }\n };\n LinearGauge.prototype.setThemeColors = function (labelcolor, others) {\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.line.color = axis.line.color || others;\n axis.labelStyle.font.color = axis.labelStyle.font.color || labelcolor;\n axis.majorTicks.color = axis.majorTicks.color || others;\n axis.minorTicks.color = axis.minorTicks.color || others;\n for (var _b = 0, _c = axis.pointers; _b < _c.length; _b++) {\n var pointer = _c[_b];\n pointer.color = pointer.color || others;\n }\n }\n for (var _d = 0, _e = this.annotations; _d < _e.length; _d++) {\n var annotation = _e[_d];\n annotation.font.color = annotation.font.color || labelcolor;\n }\n };\n LinearGauge.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.gaugeAxisLayoutPanel = new AxisLayoutPanel(this);\n this.axisRenderer = new AxisRenderer(this);\n };\n /**\n * Method to set culture for chart\n */\n LinearGauge.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Methods to create svg element\n */\n LinearGauge.prototype.createSvg = function () {\n this.removeSvg();\n this.calculateSize();\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (!(isNullOrUndefined(this.svgObject)) && !isNullOrUndefined(this.svgObject.parentNode)) {\n remove(this.svgObject);\n }\n };\n /**\n * Method to calculate the size of the gauge\n */\n LinearGauge.prototype.calculateSize = function () {\n var width = stringToNumber(this.width, this.element.offsetWidth) || this.element.offsetWidth || 600;\n var height = stringToNumber(this.height, this.element.offsetHeight) || this.element.offsetHeight || 450;\n this.availableSize = new Size(width, height);\n };\n /**\n * To Initialize the control rendering\n */\n LinearGauge.prototype.render = function () {\n this.renderGaugeElements();\n this.calculateBounds();\n this.renderAxisElements();\n this.trigger(loaded, { gauge: this });\n };\n /**\n * @private\n * To render the gauge elements\n */\n LinearGauge.prototype.renderGaugeElements = function () {\n this.appendSecondaryElement();\n this.renderBorder();\n this.renderTitle();\n this.renderContainer();\n };\n LinearGauge.prototype.appendSecondaryElement = function () {\n if (isNullOrUndefined(getElement(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div');\n secondaryElement.id = this.element.id + '_Secondary_Element';\n secondaryElement.setAttribute('style', 'position: relative');\n this.element.appendChild(secondaryElement);\n }\n };\n /**\n * @private\n * To calculate axes bounds\n */\n LinearGauge.prototype.calculateBounds = function () {\n this.gaugeAxisLayoutPanel.calculateAxesBounds();\n };\n /**\n * @private\n * To render axis elements\n */\n LinearGauge.prototype.renderAxisElements = function () {\n this.axisRenderer.renderAxes();\n this.element.appendChild(this.svgObject);\n if (this.annotationsModule) {\n this.annotationsModule.renderAnnotationElements();\n }\n };\n LinearGauge.prototype.renderBorder = function () {\n var width = this.border.width;\n if (width > 0) {\n var rect = new RectOption(this.element.id + '_LinearGaugeBorder', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width), null, null);\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n }\n };\n LinearGauge.prototype.renderTitle = function () {\n var x;\n var y;\n var height;\n var width;\n var titleBounds;\n if (this.title) {\n var size = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_LinearGaugeTitle', this.availableSize.width / 2, this.margin.top + (size.height / 2), 'middle', this.title);\n titleBounds = {\n x: options.x - (size.width / 2),\n y: options.y,\n width: size.width,\n height: size.height\n };\n var element = textElement(options, this.titleStyle, this.titleStyle.color, this.svgObject);\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n x = this.margin.left;\n y = (isNullOrUndefined(titleBounds)) ? this.margin.top : titleBounds.y;\n height = (this.availableSize.height - y - this.margin.bottom);\n width = (this.availableSize.width - this.margin.left - this.margin.right);\n this.actualRect = { x: x, y: y, width: width, height: height };\n };\n /*\n * Method to unbind the gauge events\n */\n LinearGauge.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'contextmenu', this.gaugeRightClick);\n EventHandler.remove(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave);\n EventHandler.remove(window, (Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize.bind(this));\n };\n /*\n * Method to bind the gauge events\n */\n LinearGauge.prototype.wireEvents = function () {\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'contextmenu', this.gaugeRightClick, this);\n EventHandler.add(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave, this);\n EventHandler.add(window, (Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize, this);\n this.setStyle(this.element);\n };\n LinearGauge.prototype.setStyle = function (element) {\n element.style.touchAction = isPointerDrag(this.axes) ? 'none' : 'element';\n element.style.msTouchAction = isPointerDrag(this.axes) ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Handles the gauge resize.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeResize = function (e) {\n var _this = this;\n var args = {\n gauge: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-lineargauge')) {\n this.resizeTo = setTimeout(function () {\n _this.gaugeResized = true;\n _this.createSvg();\n _this.refreshing = true;\n args.currentSize = new Size(_this.availableSize.width, _this.availableSize.height);\n _this.trigger(resized, args);\n _this.render();\n }, 500);\n }\n return false;\n };\n /**\n * To destroy the gauge element from the DOM.\n */\n LinearGauge.prototype.destroy = function () {\n this.unWireEvents();\n this.removeSvg();\n _super.prototype.destroy.call(this);\n };\n /**\n * @private\n * To render the gauge container\n */\n LinearGauge.prototype.renderContainer = function () {\n var width;\n var height;\n var x;\n var y;\n var options;\n var path = '';\n var topRadius;\n var bottomRadius;\n var fill = this.container.backgroundColor;\n var rect;\n var radius = this.container.width;\n bottomRadius = radius + ((radius / 2) / Math.PI);\n topRadius = radius / 2;\n if (this.orientation === 'Vertical') {\n height = this.actualRect.height;\n height = (this.container.height > 0 ? this.container.height : ((height / 2) - ((height / 2) / 4)) * 2);\n width = this.container.width;\n height = (this.container.type === 'Thermometer') ? height - (bottomRadius * 2) - topRadius : height;\n x = (this.actualRect.x + ((this.actualRect.width / 2) - (this.container.width / 2))) + this.container.offset;\n y = this.actualRect.y + ((this.actualRect.height / 2) - ((this.container.type === 'Thermometer') ?\n ((height + (bottomRadius * 2) - topRadius)) / 2 : height / 2));\n height = height;\n }\n else {\n width = (this.container.height > 0) ? this.container.height :\n ((this.actualRect.width / 2) - ((this.actualRect.width / 2) / 4)) * 2;\n width = (this.container.type === 'Thermometer') ? width - (bottomRadius * 2) - topRadius : width;\n x = this.actualRect.x + ((this.actualRect.width / 2) - ((this.container.type === 'Thermometer') ?\n (width - (bottomRadius * 2) + topRadius) / 2 : width / 2));\n y = (this.actualRect.y + ((this.actualRect.height / 2) - (this.container.width / 2))) + this.container.offset;\n height = this.container.width;\n }\n this.containerBounds = { x: x, y: y, width: width, height: height };\n if (this.containerBounds.width > 0) {\n this.containerObject = this.renderer.createGroup({ id: this.element.id + '_Container_Group', transform: 'translate( 0, 0)' });\n if (this.container.type === 'Normal') {\n rect = new RectOption(this.element.id + '_' + this.container.type + '_Layout', fill, this.container.border, 1, new Rect(x, y, width, height));\n this.containerObject.appendChild(this.renderer.drawRectangle(rect));\n }\n else {\n path = getBox(this.containerBounds, this.container.type, this.orientation, new Size(this.container.height, this.container.width), 'container', null, null, this.container.roundedCornerRadius);\n options = new PathOption(this.element.id + '_' + this.container.type + '_Layout', fill, this.container.border.width, this.container.border.color, 1, '', path);\n this.containerObject.appendChild(this.renderer.drawPath(options));\n }\n this.svgObject.appendChild(this.containerObject);\n }\n };\n /**\n * Handles the mouse down on gauge.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var element = e.target;\n var split = [];\n var clientRect = this.element.getBoundingClientRect();\n var axis;\n var isPointer = false;\n var pointer;\n var current;\n var top;\n var left;\n var pointerElement;\n var svgPath;\n var dragProcess = false;\n var args = this.getMouseArgs(e, 'touchstart', gaugeMouseDown);\n this.trigger(gaugeMouseDown, args);\n this.mouseX = args.x;\n this.mouseY = args.y;\n if (args.target) {\n if (!args.cancel && ((args.target.id.indexOf('MarkerPointer') > -1) || (args.target.id.indexOf('BarPointer') > -1))) {\n current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.pointerDrag = true;\n this.mouseElement = args.target;\n }\n }\n }\n return true;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseMove = function (e) {\n var current;\n var element;\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseMove);\n this.trigger(gaugeMouseMove, args);\n this.mouseX = args.x;\n this.mouseY = args.y;\n if (args.target && !args.cancel) {\n if ((args.target.id.indexOf('MarkerPointer') > -1) || (args.target.id.indexOf('BarPointer') > -1)) {\n current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.element.style.cursor = current.style;\n }\n }\n else {\n this.element.style.cursor = (this.pointerDrag) ? this.element.style.cursor : 'auto';\n }\n this.gaugeOnMouseMove(e);\n }\n this.notify(Browser.touchMoveEvent, e);\n return false;\n };\n /**\n * To find the mouse move on pointer.\n * @param element\n */\n LinearGauge.prototype.moveOnPointer = function (element) {\n var current;\n var clientRect = this.element.getBoundingClientRect();\n var axis;\n var isPointer = false;\n var pointer;\n var top;\n var left;\n var pointerElement = getElement(element.id);\n var svgPath = pointerElement;\n var cursorStyle;\n var process;\n current = getPointer(element, this);\n axis = current.axis;\n pointer = current.pointer;\n if (pointer.enableDrag) {\n if (pointer.type === 'Bar') {\n if (this.orientation === 'Vertical') {\n top = pointerElement.getBoundingClientRect().top - clientRect.top;\n top = (!axis.isInversed) ? top : top + svgPath.getBBox().height;\n isPointer = !axis.isInversed ? (this.mouseY < (top + 10) && this.mouseY >= top) :\n (this.mouseY <= top && this.mouseY > (top - 10));\n cursorStyle = 'n-resize';\n }\n else {\n left = pointerElement.getBoundingClientRect().left - clientRect.left;\n left = (!axis.isInversed) ? left + svgPath.getBBox().width : left;\n isPointer = !axis.isInversed ? (this.mouseX > (left - 10) && this.mouseX <= left) :\n (this.mouseX >= left && this.mouseX < (left + 10));\n cursorStyle = 'e-resize';\n }\n }\n else {\n isPointer = true;\n cursorStyle = 'pointer';\n }\n }\n if (isPointer) {\n process = { pointer: isPointer, style: cursorStyle };\n }\n return process;\n };\n /**\n * @private\n * Handle the right click\n * @param event\n */\n LinearGauge.prototype.gaugeRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseLeave = function (e) {\n var parentNode;\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseLeave);\n if (!isNullOrUndefined(this.mouseElement)) {\n parentNode = this.element;\n parentNode.style.cursor = '';\n this.mouseElement = null;\n this.pointerDrag = false;\n }\n return false;\n };\n /**\n * Handles the mouse move on gauge.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeOnMouseMove = function (e) {\n var current;\n if (this.pointerDrag) {\n current = getPointer(this.mouseElement, this);\n if (current.pointer.enableDrag && current.pointer.animationComplete) {\n this[current.pointer.type.toLowerCase() + 'Drag'](current.axis, current.pointer);\n }\n }\n return true;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseEnd = function (e) {\n var parentNode;\n var tooltipInterval;\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || e.type === 'touchend';\n var args = this.getMouseArgs(e, 'touchend', gaugeMouseUp);\n this.trigger(gaugeMouseUp, args);\n if (!isNullOrUndefined(this.mouseElement)) {\n parentNode = this.element;\n parentNode.style.cursor = '';\n this.mouseElement = null;\n this.pointerDrag = false;\n }\n this.notify(Browser.touchEndEvent, e);\n return true;\n };\n /**\n * Handles the mouse event arguments.\n * @return {IMouseEventArgs}\n * @private\n */\n LinearGauge.prototype.getMouseArgs = function (e, type, name) {\n var rect = this.element.getBoundingClientRect();\n var location = new GaugeLocation(-rect.left, -rect.top);\n var isTouch = (e.type === type);\n location.x += isTouch ? e.changedTouches[0].clientX : e.clientX;\n location.y += isTouch ? e.changedTouches[0].clientY : e.clientY;\n return {\n cancel: false, name: name,\n model: this,\n x: location.x, y: location.y,\n target: isTouch ? e.target : e.target\n };\n };\n /**\n * @private\n * @param axis\n * @param pointer\n */\n LinearGauge.prototype.markerDrag = function (axis, pointer) {\n var options;\n var value = convertPixelToValue(this.element, this.mouseElement, this.orientation, axis, 'drag', new GaugeLocation(this.mouseX, this.mouseY));\n var process = withInRange(value, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer');\n if (withInRange(value, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer')) {\n this.triggerDragEvent(this.mouseElement);\n options = new PathOption('pointerID', pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, null, '');\n if (this.orientation === 'Vertical') {\n pointer.bounds.y = this.mouseY;\n }\n else {\n pointer.bounds.x = this.mouseX;\n }\n pointer.currentValue = value;\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.orientation, axis, pointer);\n if (pointer.markerType === 'Image') {\n this.mouseElement.setAttribute('x', (pointer.bounds.x - (pointer.bounds.width / 2)).toString());\n this.mouseElement.setAttribute('y', (pointer.bounds.y - (pointer.bounds.height / 2)).toString());\n }\n else {\n this.mouseElement.setAttribute('d', options.d);\n }\n }\n };\n /**\n * @private\n * @param axis\n * @param pointer\n */\n LinearGauge.prototype.barDrag = function (axis, pointer) {\n var line = axis.lineBounds;\n var range = axis.visibleRange;\n var value1;\n var value2;\n var isDrag;\n var lineHeight = (this.orientation === 'Vertical') ? line.height : line.width;\n var lineY = (this.orientation === 'Vertical') ? line.y : line.x;\n var path;\n value1 = ((valueToCoefficient(range.min, axis, this.orientation, range) * lineHeight) + lineY);\n value2 = ((valueToCoefficient(range.max, axis, this.orientation, range) * lineHeight) + lineY);\n if (this.orientation === 'Vertical') {\n isDrag = (!axis.isInversed) ? (this.mouseY > value2 && this.mouseY < value1) : (this.mouseY > value1 && this.mouseY < value2);\n if (isDrag) {\n if (this.container.type === 'Normal') {\n if (!axis.isInversed) {\n this.mouseElement.setAttribute('y', this.mouseY.toString());\n }\n this.mouseElement.setAttribute('height', Math.abs(value1 - this.mouseY).toString());\n }\n else {\n if (!axis.isInversed) {\n pointer.bounds.y = this.mouseY;\n }\n pointer.bounds.height = Math.abs(value1 - this.mouseY);\n }\n }\n }\n else {\n isDrag = (!axis.isInversed) ? (this.mouseX > value1 && this.mouseX < value2) : (this.mouseX > value2 && this.mouseX < value1);\n if (isDrag) {\n if (this.container.type === 'Normal') {\n if (axis.isInversed) {\n this.mouseElement.setAttribute('x', this.mouseX.toString());\n }\n this.mouseElement.setAttribute('width', Math.abs(value1 - this.mouseX).toString());\n }\n else {\n if (axis.isInversed) {\n pointer.bounds.x = this.mouseX;\n }\n pointer.bounds.width = Math.abs(value1 - this.mouseX);\n }\n }\n }\n if (isDrag && this.mouseElement.tagName === 'path') {\n this.triggerDragEvent(this.mouseElement);\n path = getBox(pointer.bounds, this.container.type, this.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.container.width, axis, pointer.roundedCornerRadius);\n this.mouseElement.setAttribute('d', path);\n }\n };\n /**\n * Triggers when drag the pointer\n * @param activeElement\n */\n LinearGauge.prototype.triggerDragEvent = function (activeElement) {\n var active = getPointer(this.mouseElement, this);\n var value = convertPixelToValue(this.element, this.mouseElement, this.orientation, active.axis, 'tooltip', null);\n var dragArgs = {\n name: 'valueChange',\n gauge: this,\n element: this.mouseElement,\n axisIndex: active.axisIndex,\n axis: active.axis,\n pointerIndex: active.pointerIndex,\n pointer: active.pointer,\n value: value\n };\n this.trigger(valueChange, dragArgs);\n };\n /**\n * To set the pointer value using this method\n * @param axisIndex\n * @param pointerIndex\n * @param value\n */\n LinearGauge.prototype.setPointerValue = function (axisIndex, pointerIndex, value) {\n var axis = this.axes[axisIndex];\n var pointer = axis.pointers[pointerIndex];\n var id = this.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer_' + pointerIndex;\n var pointerElement = getElement(id);\n pointer.currentValue = value;\n if ((pointerElement !== null) && withInRange(pointer.currentValue, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer')) {\n this.gaugeAxisLayoutPanel['calculate' + pointer.type + 'Bounds'](axisIndex, axis, pointerIndex, pointer);\n this.axisRenderer['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointer, pointerIndex, pointerElement.parentElement);\n }\n };\n /**\n * To set the annotation value using this method.\n * @param annotationIndex\n * @param content\n */\n LinearGauge.prototype.setAnnotationValue = function (annotationIndex, content) {\n var elementExist = getElement(this.element.id + '_Annotation_' + annotationIndex) === null;\n var element = getElement(this.element.id + '_AnnotationsGroup') ||\n createElement('div', {\n id: this.element.id + '_AnnotationsGroup'\n });\n var annotation = this.annotations[annotationIndex];\n if (content !== null) {\n if (getElement(this.element.id + '_Annotation_' + annotationIndex)) {\n getElement(this.element.id + '_Annotation_' + annotationIndex).remove();\n }\n annotation.content = content;\n this.annotationsModule.createAnnotationTemplate(element, annotationIndex);\n if (!elementExist) {\n element.appendChild(getElement(this.element.id + '_Annotation_' + annotationIndex));\n }\n }\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n LinearGauge.prototype.requiredModules = function () {\n var modules = [];\n var annotationEnable = false;\n var tooltipEnable = false;\n this.annotations.map(function (annotation, index) {\n annotationEnable = annotation.content != null;\n });\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this, GaugeTooltip]\n });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n LinearGauge.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n */\n LinearGauge.prototype.getModuleName = function () {\n return 'lineargauge';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n LinearGauge.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n case 'width':\n case 'margin':\n this.createSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = (newProp.title === '' || oldProp.title === '');\n renderer = !(newProp.title === '' || oldProp.title === '');\n break;\n case 'titleStyle':\n if (newProp.titleStyle && newProp.titleStyle.size) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'container':\n refreshBounds = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderGaugeElements();\n this.renderAxisElements();\n }\n if (refreshBounds) {\n this.createSvg();\n this.renderGaugeElements();\n this.calculateBounds();\n this.renderAxisElements();\n }\n };\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"height\", void 0);\n __decorate([\n Property('Vertical')\n ], LinearGauge.prototype, \"orientation\", void 0);\n __decorate([\n Complex({}, Margin)\n ], LinearGauge.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '', width: 0 }, Border)\n ], LinearGauge.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], LinearGauge.prototype, \"background\", void 0);\n __decorate([\n Property('')\n ], LinearGauge.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '15px', color: null }, Font)\n ], LinearGauge.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Container)\n ], LinearGauge.prototype, \"container\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], LinearGauge.prototype, \"axes\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], LinearGauge.prototype, \"tooltip\", void 0);\n __decorate([\n Collection([{}], Annotation)\n ], LinearGauge.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], LinearGauge.prototype, \"rangePalettes\", void 0);\n __decorate([\n Property(false)\n ], LinearGauge.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], LinearGauge.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"format\", void 0);\n __decorate([\n Property('Material')\n ], LinearGauge.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseMove\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseLeave\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseDown\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseUp\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"valueChange\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"resized\", void 0);\n LinearGauge = __decorate([\n NotifyPropertyChanges\n ], LinearGauge);\n return LinearGauge;\n}(Component));\nexport { LinearGauge };\n","import * as index from '@syncfusion/ej2-lineargauge';\nindex.LinearGauge.Inject( index.GaugeTooltip,index.Annotations);\nexport * from '@syncfusion/ej2-lineargauge';\n","import * as index from '@syncfusion/ej2-lists';\nindex.ListView.Inject( index.Virtualization);\nexport * from '@syncfusion/ej2-lists';\n","/**\n * Specifies Maps Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Medium',\n color: '#424242',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#424242',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n Theme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n})(Theme || (Theme = {}));\nexport var FabricTheme;\n(function (FabricTheme) {\n /** @private */\n FabricTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Semibold',\n color: '#424242',\n fontStyle: 'Semibold',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Regular',\n color: '#424242',\n fontStyle: 'Regular',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n FabricTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n})(FabricTheme || (FabricTheme = {}));\nexport var BootstrapTheme;\n(function (BootstrapTheme) {\n /** @private */\n BootstrapTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Semibold',\n color: '#424242',\n fontStyle: 'Semibold',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Regular',\n color: '#424242',\n fontStyle: 'Regular',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n BootstrapTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n})(BootstrapTheme || (BootstrapTheme = {}));\n/**\n * Internal use of Method to getting colors based on themes.\n * @private\n * @param theme\n */\nexport function getShapeColor(theme) {\n return ['#B5E485', '#7BC1E8', '#DF819C', '#EC9B79', '#78D0D3',\n '#D6D572', '#9178E3', '#A1E5B4', '#87A4B4', '#E4C16C'];\n}\n/**\n * HighContrast Theme configuration\n */\nexport var HighContrastTheme;\n(function (HighContrastTheme) {\n /** @private */\n HighContrastTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n HighContrastTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n})(HighContrastTheme || (HighContrastTheme = {}));\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Maps base document\n */\nimport { Property, ChildProperty, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Theme } from './theme';\nimport { Point } from '../utils/helper';\n/**\n * Options for customizing the annotation.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property('0px')\n ], Annotation.prototype, \"x\", void 0);\n __decorate([\n Property('0px')\n ], Annotation.prototype, \"y\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\nvar Arrow = /** @class */ (function (_super) {\n __extends(Arrow, _super);\n function Arrow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Start')\n ], Arrow.prototype, \"position\", void 0);\n __decorate([\n Property('false')\n ], Arrow.prototype, \"showArrow\", void 0);\n __decorate([\n Property(2)\n ], Arrow.prototype, \"size\", void 0);\n __decorate([\n Property('black')\n ], Arrow.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Arrow.prototype, \"offSet\", void 0);\n return Arrow;\n}(ChildProperty));\nexport { Arrow };\n/**\n * Configures the fonts in maps.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the borders in the maps.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * To configure the tooltip settings of the maps.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property('#363F4C')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex(Theme.tooltipLabelFont, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"valuePath\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n/**\n * Configures the maps margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * To configure ColorMapping in Maps\n */\nvar ColorMappingSettings = /** @class */ (function (_super) {\n __extends(ColorMappingSettings, _super);\n function ColorMappingSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"from\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"to\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"label\", void 0);\n return ColorMappingSettings;\n}(ChildProperty));\nexport { ColorMappingSettings };\n/**\n * To configure the selection settings\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#D2691E')\n ], SelectionSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SelectionSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enableMultiSelect\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], SelectionSettings.prototype, \"border\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * To configure the highlight settings\n */\nvar HighlightSettings = /** @class */ (function (_super) {\n __extends(HighlightSettings, _super);\n function HighlightSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#6B8E23')\n ], HighlightSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], HighlightSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(1)\n ], HighlightSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], HighlightSettings.prototype, \"border\", void 0);\n return HighlightSettings;\n}(ChildProperty));\nexport { HighlightSettings };\n/**\n * NavigationSelectedLine\n */\nvar NavigationLineSettings = /** @class */ (function (_super) {\n __extends(NavigationLineSettings, _super);\n function NavigationLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], NavigationLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], NavigationLineSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NavigationLineSettings.prototype, \"longitude\", void 0);\n __decorate([\n Property(null)\n ], NavigationLineSettings.prototype, \"latitude\", void 0);\n __decorate([\n Property('')\n ], NavigationLineSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property('black')\n ], NavigationLineSettings.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], NavigationLineSettings.prototype, \"angle\", void 0);\n __decorate([\n Complex({ showArrow: false, position: 'Start', size: 5, color: 'black' }, Arrow)\n ], NavigationLineSettings.prototype, \"arrowSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], NavigationLineSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], NavigationLineSettings.prototype, \"highlightSettings\", void 0);\n return NavigationLineSettings;\n}(ChildProperty));\nexport { NavigationLineSettings };\n/**\n * Bubble settings model class\n */\nvar BubbleSettings = /** @class */ (function (_super) {\n __extends(BubbleSettings, _super);\n function BubbleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Border)\n ], BubbleSettings.prototype, \"border\", void 0);\n __decorate([\n Property(false)\n ], BubbleSettings.prototype, \"visible\", void 0);\n __decorate([\n Property([])\n ], BubbleSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property(1000)\n ], BubbleSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(0)\n ], BubbleSettings.prototype, \"animationDelay\", void 0);\n __decorate([\n Property('')\n ], BubbleSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(10)\n ], BubbleSettings.prototype, \"minRadius\", void 0);\n __decorate([\n Property(20)\n ], BubbleSettings.prototype, \"maxRadius\", void 0);\n __decorate([\n Property(1)\n ], BubbleSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], BubbleSettings.prototype, \"valuePath\", void 0);\n __decorate([\n Property('Circle')\n ], BubbleSettings.prototype, \"bubbleType\", void 0);\n __decorate([\n Property(null)\n ], BubbleSettings.prototype, \"colorValuePath\", void 0);\n __decorate([\n Collection([], ColorMappingSettings)\n ], BubbleSettings.prototype, \"colorMapping\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], BubbleSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], BubbleSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], BubbleSettings.prototype, \"highlightSettings\", void 0);\n return BubbleSettings;\n}(ChildProperty));\nexport { BubbleSettings };\n/**\n * To configure title of the maps.\n */\nvar CommonTitleSettings = /** @class */ (function (_super) {\n __extends(CommonTitleSettings, _super);\n function CommonTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"description\", void 0);\n return CommonTitleSettings;\n}(ChildProperty));\nexport { CommonTitleSettings };\n/**\n * To configure subtitle of the maps.\n */\nvar SubTitleSettings = /** @class */ (function (_super) {\n __extends(SubTitleSettings, _super);\n function SubTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Font)\n ], SubTitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], SubTitleSettings.prototype, \"alignment\", void 0);\n return SubTitleSettings;\n}(CommonTitleSettings));\nexport { SubTitleSettings };\n/**\n * To configure title of the maps.\n */\nvar TitleSettings = /** @class */ (function (_super) {\n __extends(TitleSettings, _super);\n function TitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Font)\n ], TitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], TitleSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({}, SubTitleSettings)\n ], TitleSettings.prototype, \"subtitleSettings\", void 0);\n return TitleSettings;\n}(CommonTitleSettings));\nexport { TitleSettings };\n/**\n * Options to configure maps Zooming Settings.\n */\nvar ZoomSettings = /** @class */ (function (_super) {\n __extends(ZoomSettings, _super);\n function ZoomSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('Horizontal')\n ], ZoomSettings.prototype, \"toolBarOrientation\", void 0);\n __decorate([\n Property(null)\n ], ZoomSettings.prototype, \"color\", void 0);\n __decorate([\n Property('#e61576')\n ], ZoomSettings.prototype, \"highlightColor\", void 0);\n __decorate([\n Property('#e61576')\n ], ZoomSettings.prototype, \"selectionColor\", void 0);\n __decorate([\n Property('Far')\n ], ZoomSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Near')\n ], ZoomSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(['ZoomIn', 'ZoomOut', 'Reset'])\n ], ZoomSettings.prototype, \"toolbars\", void 0);\n __decorate([\n Property(true)\n ], ZoomSettings.prototype, \"mouseWheelZoom\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"doubleClickZoom\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"pinchZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"zoomOnClick\", void 0);\n __decorate([\n Property(1)\n ], ZoomSettings.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(10)\n ], ZoomSettings.prototype, \"maxZoom\", void 0);\n __decorate([\n Property(1)\n ], ZoomSettings.prototype, \"minZoom\", void 0);\n return ZoomSettings;\n}(ChildProperty));\nexport { ZoomSettings };\n/**\n * Configures the legend settings.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property('Layers')\n ], LegendSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"invertedPointer\", void 0);\n __decorate([\n Property('After')\n ], LegendSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"labelDisplayMode\", void 0);\n __decorate([\n Property('Circle')\n ], LegendSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"shapeBorder\", void 0);\n __decorate([\n Complex({}, CommonTitleSettings)\n ], LegendSettings.prototype, \"title\", void 0);\n __decorate([\n Complex({}, Font)\n ], LegendSettings.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('Bottom')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"orientation\", void 0);\n __decorate([\n Property({ x: 0, y: 0 })\n ], LegendSettings.prototype, \"location\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Default')\n ], LegendSettings.prototype, \"mode\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Customization for Data label settings.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n __extends(DataLabelSettings, _super);\n function DataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Complex({ width: 0, color: 'transparent' }, Border)\n ], DataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Property('black')\n ], DataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], DataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Complex({}, Font)\n ], DataLabelSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('')\n ], DataLabelSettings.prototype, \"labelPath\", void 0);\n __decorate([\n Property('None')\n ], DataLabelSettings.prototype, \"smartLabelMode\", void 0);\n __decorate([\n Property('None')\n ], DataLabelSettings.prototype, \"intersectionAction\", void 0);\n __decorate([\n Property('')\n ], DataLabelSettings.prototype, \"template\", void 0);\n return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n * To configure the shapeSettings in the maps.\n */\nvar ShapeSettings = /** @class */ (function (_super) {\n __extends(ShapeSettings, _super);\n function ShapeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#A6A6A6')\n ], ShapeSettings.prototype, \"fill\", void 0);\n __decorate([\n Property([])\n ], ShapeSettings.prototype, \"palette\", void 0);\n __decorate([\n Property(5)\n ], ShapeSettings.prototype, \"circleRadius\", void 0);\n __decorate([\n Complex({ width: 0, color: '#000000' }, Border)\n ], ShapeSettings.prototype, \"border\", void 0);\n __decorate([\n Property('')\n ], ShapeSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(1)\n ], ShapeSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], ShapeSettings.prototype, \"colorValuePath\", void 0);\n __decorate([\n Property(null)\n ], ShapeSettings.prototype, \"valuePath\", void 0);\n __decorate([\n Collection([], ColorMappingSettings)\n ], ShapeSettings.prototype, \"colorMapping\", void 0);\n __decorate([\n Property(false)\n ], ShapeSettings.prototype, \"autofill\", void 0);\n return ShapeSettings;\n}(ChildProperty));\nexport { ShapeSettings };\n/**\n * To configure the marker settings for the maps.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n __extends(MarkerSettings, _super);\n function MarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], MarkerSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('#FF471A')\n ], MarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(10)\n ], MarkerSettings.prototype, \"height\", void 0);\n __decorate([\n Property(10)\n ], MarkerSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], MarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('Balloon')\n ], MarkerSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"legendText\", void 0);\n __decorate([\n Property(new Point(0, 0))\n ], MarkerSettings.prototype, \"offset\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"template\", void 0);\n __decorate([\n Property([])\n ], MarkerSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], MarkerSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Property(1000)\n ], MarkerSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(0)\n ], MarkerSettings.prototype, \"animationDelay\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], MarkerSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], MarkerSettings.prototype, \"highlightSettings\", void 0);\n return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n * To configure the layers of the maps.\n */\nvar LayerSettings = /** @class */ (function (_super) {\n __extends(LayerSettings, _super);\n function LayerSettings() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.isBaseLayer = false;\n return _this;\n }\n __decorate([\n Property(null)\n ], LayerSettings.prototype, \"shapeData\", void 0);\n __decorate([\n Property()\n ], LayerSettings.prototype, \"query\", void 0);\n __decorate([\n Complex({}, ShapeSettings)\n ], LayerSettings.prototype, \"shapeSettings\", void 0);\n __decorate([\n Property([])\n ], LayerSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Layer')\n ], LayerSettings.prototype, \"type\", void 0);\n __decorate([\n Property('Geographic')\n ], LayerSettings.prototype, \"geometryType\", void 0);\n __decorate([\n Property('Aerial')\n ], LayerSettings.prototype, \"bingMapType\", void 0);\n __decorate([\n Property('')\n ], LayerSettings.prototype, \"key\", void 0);\n __decorate([\n Property('Geometry')\n ], LayerSettings.prototype, \"layerType\", void 0);\n __decorate([\n Property('http://a.tile.openstreetmap.org/level/tileX/tileY.png')\n ], LayerSettings.prototype, \"urlTemplate\", void 0);\n __decorate([\n Property(true)\n ], LayerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('name')\n ], LayerSettings.prototype, \"shapeDataPath\", void 0);\n __decorate([\n Property('name')\n ], LayerSettings.prototype, \"shapePropertyPath\", void 0);\n __decorate([\n Property(0)\n ], LayerSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Collection([], MarkerSettings)\n ], LayerSettings.prototype, \"markerSettings\", void 0);\n __decorate([\n Complex({}, DataLabelSettings)\n ], LayerSettings.prototype, \"dataLabelSettings\", void 0);\n __decorate([\n Collection([], BubbleSettings)\n ], LayerSettings.prototype, \"bubbleSettings\", void 0);\n __decorate([\n Collection([], NavigationLineSettings)\n ], LayerSettings.prototype, \"navigationLineSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], LayerSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], LayerSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], LayerSettings.prototype, \"highlightSettings\", void 0);\n return LayerSettings;\n}(ChildProperty));\nexport { LayerSettings };\n/**\n * Internal use for bing type layer rendering\n */\nvar Tile = /** @class */ (function () {\n function Tile(x, y, height, width, top, left, src) {\n if (height === void 0) { height = 256; }\n if (width === void 0) { width = 256; }\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (src === void 0) { src = null; }\n this.x = x;\n this.y = y;\n this.top = top;\n this.left = left;\n this.height = height;\n this.width = width;\n this.src = src;\n }\n return Tile;\n}());\nexport { Tile };\n/**\n * Maps area configuration\n */\nvar MapsAreaSettings = /** @class */ (function (_super) {\n __extends(MapsAreaSettings, _super);\n function MapsAreaSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MapsAreaSettings.prototype, \"background\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], MapsAreaSettings.prototype, \"border\", void 0);\n return MapsAreaSettings;\n}(ChildProperty));\nexport { MapsAreaSettings };\n","/**\n * Maps constants doc\n */\n/**\n * Specifies maps load event name.\n * @private\n */\nexport var load = 'load';\n/**\n * Specifies maps loaded event name.\n * @private\n */\nexport var loaded = 'loaded';\n/**\n * Specifies maps click event name.\n * @private\n */\nexport var click = 'click';\n/**\n * Specifies maps loaded event name.\n * @private\n */\nexport var rightClick = 'rightClick';\n/**\n * Specifies maps double click event name.\n * @private\n */\nexport var doubleClick = 'doubleClick';\n/**\n * Specifies maps resize event name.\n * @private\n */\nexport var resize = 'resize';\n/**\n * Specifies the map tooltip render event\n */\nexport var tooltipRender = 'tooltipRender';\n/**\n * Specifies the map shapeSelected event\n */\nexport var shapeSelected = 'shapeSelected';\n/**\n * Specifies the map shapeHighlight event\n */\nexport var shapeHighlight = 'shapeHighlight';\n/**\n * Specifies maps mousemove event name.\n * @private\n */\nexport var mousemove = 'mousemove';\n/**\n * Specifies maps mouseup event name.\n * @private\n */\nexport var mouseup = 'mouseup';\n/**\n * Specifies maps mousedown event name.\n * @private\n */\nexport var mousedown = 'mousedown';\n/**\n * Specifies maps layerRendering event name.\n * @private\n */\nexport var layerRendering = 'layerRendering';\n/**\n * Specifies maps shapeRendering event name.\n * @private\n */\nexport var shapeRendering = 'shapeRendering';\n/**\n * Specifies maps markerRendering event name.\n * @private\n */\nexport var markerRendering = 'markerRendering';\n/**\n * Specifies maps markerClick event name.\n * @private\n */\nexport var markerClick = 'markerClick';\n/**\n * Specifies maps markerMouseMove event name.\n * @private\n */\nexport var markerMouseMove = 'markerMouseMove';\n/**\n * Specifies maps dataLabelRendering event name.\n * @private\n */\nexport var dataLabelRendering = 'dataLabelRendering';\n/**\n * Specifies maps bubbleRendering event name.\n * @private\n */\nexport var bubbleRendering = 'bubbleRendering';\n/**\n * Specifies maps bubbleClick event name.\n * @private\n */\nexport var bubbleClick = 'bubbleClick';\n/**\n * Specifies maps bubbleMouseMove event name.\n * @private\n */\nexport var bubbleMouseMove = 'bubbleMouseMove';\n/**\n * Specifies maps animationComplete event name.\n * @private\n */\nexport var animationComplete = 'animationComplete';\n/**\n * Specifies maps legendRendering event name.\n * @private\n */\nexport var legendRendering = 'legendRendering';\n/**\n * Specifies maps annotationRendering event name.\n * @private\n */\nexport var annotationRendering = 'annotationRendering';\n/**\n * Specifies maps itemSelection event name\n * @private\n */\nexport var itemSelection = 'itemSelection';\n/**\n * Specifies maps itemHighlight event name\n */\nexport var itemHighlight = 'itemHighlight';\n/**\n * Specifies maps beforePrint event name\n */\nexport var beforePrint = 'beforePrint';\n","/**\n * Bing map src doc\n */\nvar BingMap = /** @class */ (function () {\n function BingMap(maps) {\n this.maps = maps;\n }\n BingMap.prototype.getBingMap = function (tile, key, type, language, imageUrl, subDomains) {\n var quadKey = '';\n var subDomain;\n var maxZoom = Math.min(this.maps.tileZoomLevel, parseInt(this.maxZoom, 10));\n for (var i = maxZoom; i > 0; i--) {\n var digit = 0;\n var mask = 1 << (i - 1);\n if ((tile.x & mask) !== 0) {\n digit++;\n }\n if ((tile.y & mask) !== 0) {\n digit += 2;\n }\n quadKey = quadKey + '' + digit;\n }\n subDomain = subDomains[Math.min(parseInt(quadKey.substr(quadKey.length - 1, 1), 10), subDomains.length)];\n imageUrl = imageUrl.replace('{quadkey}', quadKey).replace('{subdomain}', subDomain);\n return imageUrl += '&mkt=' + language + '&ur=IN&Key=' + key;\n };\n return BingMap;\n}());\nexport { BingMap };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ColorMapping class\n */\nvar ColorMapping = /** @class */ (function () {\n function ColorMapping(maps) {\n this.maps = maps;\n }\n /**\n * To get color based on shape settings.\n * @private\n */\n ColorMapping.prototype.getShapeColorMapping = function (shapeSettings, layerData, color) {\n var colorValuePath = shapeSettings.colorValuePath ? shapeSettings.colorValuePath : shapeSettings.valuePath;\n var equalValue = layerData[colorValuePath];\n var colorValue = Number(equalValue);\n var shapeColor = this.getColorByValue(shapeSettings.colorMapping, colorValue, equalValue);\n return shapeColor ? shapeColor : color;\n };\n /**\n * To color by value and color mapping\n */\n ColorMapping.prototype.getColorByValue = function (colorMapping, colorValue, equalValue) {\n if (isNaN(colorValue) && isNullOrUndefined(equalValue)) {\n return null;\n }\n var fill = '';\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n if ((colorMap.from && colorMap.to && (colorValue >= colorMap.from && colorValue <= colorMap.to)) ||\n (colorMap.value === equalValue)) {\n fill = colorMap.color;\n }\n }\n return fill || ((!colorMapping.length) ? equalValue : null);\n };\n return ColorMapping;\n}());\nexport { ColorMapping };\n","import { isNullOrUndefined, extend, createElement, Ajax } from '@syncfusion/ej2-base';\nimport { getShapeColor } from '../model/theme';\nimport { GeoLocation, isCustomPath, convertGeoToPoint, Point, PathOption, Size, PolylineOption, getElementByID } from '../utils/helper';\nimport { MapLocation, RectOption, getTranslate, convertTileLatLongToPoint, checkShapeDataFields, CircleOption } from '../utils/helper';\nimport { Tile } from '../model/base';\nimport { BingMap } from './bing-map';\nimport { ColorMapping } from './color-mapping';\nimport { layerRendering, shapeRendering } from '../index';\n/**\n * To calculate and render the shape layer\n */\nvar LayerPanel = /** @class */ (function () {\n function LayerPanel(map) {\n this.tileTranslatePoint = new MapLocation(0, 0);\n this.isMapCoordinates = true;\n this.ajaxProcessCount = 0;\n this.mapObject = map;\n this.ajaxModule = new Ajax();\n this.ajaxResponse = [];\n }\n /* tslint:disable:no-string-literal */\n LayerPanel.prototype.measureLayerPanel = function () {\n var _this = this;\n var imageSize = 30;\n var layerCollection = this.mapObject.layersCollection;\n var areaRect = this.mapObject.mapAreaRect;\n var padding = 10;\n var secondaryEle = getElementByID(this.mapObject.element.id + '_Secondary_Element');\n if (this.mapObject.isTileMap && secondaryEle) {\n this.tileSvgObject = this.mapObject.renderer.createSvg({\n id: this.mapObject.element.id + '_Tile_SVG', width: areaRect.width,\n height: areaRect.height,\n style: 'pointer-events:none'\n });\n secondaryEle.appendChild(this.tileSvgObject);\n }\n this.layerGroup = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_Layer_Collections',\n 'clip-path': 'url(#' + this.mapObject.element.id + '_MapArea_ClipRect)'\n }));\n this.clipRectElement = this.mapObject.renderer.drawClipPath(new RectOption(this.mapObject.element.id + '_MapArea_ClipRect', 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: this.mapObject.isTileMap ? 0 : areaRect.x, y: this.mapObject.isTileMap ? 0 : areaRect.y,\n width: areaRect.width, height: areaRect.height\n }));\n this.layerGroup.appendChild(this.clipRectElement);\n this.mapObject.baseMapBounds = null;\n this.mapObject.baseMapRectBounds = null;\n this.mapObject.baseSize = null;\n var layerCount = layerCollection.length - 1;\n layerCollection.forEach(function (layer, index) {\n _this.currentLayer = layer;\n _this.processLayers(layer, index);\n });\n };\n LayerPanel.prototype.renderTileLayer = function (panel, layer, layerIndex, bing) {\n var center = new Point(panel.mapObject.centerPosition.longitude, panel.mapObject.centerPosition.latitude);\n panel.currentFactor = panel.calculateFactor(layer);\n if (isNullOrUndefined(panel.mapObject.tileZoomLevel)) {\n panel.mapObject.tileZoomLevel = panel.mapObject.zoomSettings.zoomFactor;\n }\n panel.mapObject.tileTranslatePoint = panel.panTileMap(panel.mapObject.availableSize.width, panel.mapObject.availableSize.height, center);\n panel.generateTiles(panel.mapObject.tileZoomLevel, panel.mapObject.tileTranslatePoint, bing);\n if (panel.mapObject.markerModule) {\n panel.mapObject.markerModule.markerRender(panel.layerObject, layerIndex, panel.mapObject.tileZoomLevel);\n }\n if (panel.mapObject.navigationLineModule) {\n panel.layerObject.appendChild(panel.mapObject.navigationLineModule.renderNavigation(panel.currentLayer, panel.mapObject.tileZoomLevel, layerIndex));\n }\n panel.translateLayerElements(panel.layerObject, layerIndex);\n panel.layerGroup.appendChild(panel.layerObject);\n };\n LayerPanel.prototype.processLayers = function (layer, layerIndex) {\n this.layerObject = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_LayerIndex_' + layerIndex\n }));\n var eventArgs = {\n cancel: false, name: layerRendering, index: layerIndex,\n layer: layer, maps: this.mapObject\n };\n this.mapObject.trigger(layerRendering, eventArgs);\n if (!eventArgs.cancel) {\n if (layer.layerType !== 'Geometry') {\n if (layer.layerType !== 'Bing' || this.bing) {\n this.renderTileLayer(this, layer, layerIndex);\n }\n else if (layer.key && layer.key.length > 1) {\n var proxy_1 = this;\n var bing_1 = new BingMap(this.mapObject);\n var url = 'http://dev.virtualearth.net/REST/V1/Imagery/Metadata/' + layer.bingMapType;\n var ajax = new Ajax({\n url: url + '?output=json&include=ImageryProviders&key=' + layer.key\n });\n ajax.onSuccess = function (json) {\n var jsonObject = JSON.parse(json);\n var resource = jsonObject['resourceSets'][0]['resources'][0];\n var imageUrl = resource['imageUrl'];\n var subDomains = resource['imageUrlSubdomains'];\n var maxZoom = resource['zoomMax'];\n if (imageUrl !== null && imageUrl !== undefined && imageUrl !== bing_1.imageUrl) {\n bing_1.imageUrl = imageUrl;\n }\n if (subDomains !== null && subDomains !== undefined && subDomains !== bing_1.subDomains) {\n bing_1.subDomains = subDomains;\n }\n if (maxZoom !== null && maxZoom !== undefined && maxZoom !== bing_1.maxZoom) {\n bing_1.maxZoom = maxZoom;\n }\n proxy_1.mapObject['bingMap'] = bing_1;\n proxy_1.renderTileLayer(proxy_1, layer, layerIndex, bing_1);\n };\n ajax.send();\n }\n }\n else {\n if (!isNullOrUndefined(layer.shapeData) && (!isNullOrUndefined(layer.shapeData['geometries']) ||\n !isNullOrUndefined(layer.shapeData['features']))) {\n var featureData = (!isNullOrUndefined(layer.shapeData['geometries']) &&\n layer.shapeData['geometries'].length > 0 ? layer.shapeData['geometries'] :\n layer.shapeData['features']);\n layer.layerData = [];\n var bbox = layer.shapeData['bbox'];\n if (!isNullOrUndefined(bbox) && layer.isBaseLayer) {\n this.mapObject.baseMapBounds = new GeoLocation({ min: bbox[0][1], max: bbox[1][1] }, { min: bbox[0][0], max: bbox[1][0] });\n }\n else if (isNullOrUndefined(this.mapObject.baseMapBounds) && !isCustomPath(featureData)) {\n this.calculateRectBounds(featureData);\n // if (isNullOrUndefined(this.mapObject.baseSize)) {\n // let minSize: Point = convertGeoToPoint(\n // this.mapObject.baseMapBounds.latitude.min,\n // this.mapObject.baseMapBounds.longitude.min, this.calculateFactor(layer), layer, this.mapObject\n // );\n // let maxSize: Point = convertGeoToPoint(\n // this.mapObject.baseMapBounds.latitude.max,\n // this.mapObject.baseMapBounds.longitude.max, this.calculateFactor(layer), layer, this.mapObject\n // );\n // this.mapObject.baseSize = new Size(Math.abs(minSize.x - maxSize.x), Math.abs(minSize.y - maxSize.y));\n // }\n }\n this.calculatePathCollection(layerIndex, featureData);\n }\n }\n }\n if (!this.mapObject.isTileMap) {\n this.mapObject.svgObject.appendChild(this.layerGroup);\n }\n else if (this.tileSvgObject) {\n this.tileSvgObject.appendChild(this.layerGroup);\n }\n };\n //tslint:disable:max-func-body-length\n LayerPanel.prototype.bubbleCalculation = function (bubbleSettings, range) {\n if (bubbleSettings.dataSource != null && bubbleSettings != null) {\n if (bubbleSettings.colorValuePath == null) {\n return;\n }\n for (var i = 0; i < bubbleSettings.dataSource.length; i++) {\n var bubbledata = parseFloat(bubbleSettings.dataSource[i][bubbleSettings.valuePath]);\n if (i !== 0) {\n if (bubbledata > range.max) {\n range.max = bubbledata;\n }\n else if (bubbledata < range.min) {\n range.min = bubbledata;\n }\n }\n else {\n range.max = range.min = bubbledata;\n }\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n LayerPanel.prototype.calculatePathCollection = function (layerIndex, renderData) {\n var _this = this;\n this.groupElements = [];\n if ((!isCustomPath(renderData))) {\n this.currentFactor = this.calculateFactor(this.currentLayer);\n }\n this.rectBounds = null;\n var shapeSettings = this.currentLayer.shapeSettings;\n renderData.forEach(function (geometryData, index) {\n if (!isNullOrUndefined(geometryData['geometry']) || !isNullOrUndefined(geometryData['coordinates'])) {\n var type = !isNullOrUndefined(geometryData['geometry']) ? geometryData['geometry']['type'] : geometryData['type'];\n var coords = !isNullOrUndefined(geometryData['geometry']) ? geometryData['geometry']['coordinates'] :\n geometryData['coordinates'];\n var data = geometryData['geometry'];\n var properties = geometryData['properties'];\n _this.generatePoints(type, coords, data, properties);\n }\n });\n this.currentLayer.rectBounds = this.rectBounds;\n if (isNullOrUndefined(this.mapObject.baseMapRectBounds) && this.currentLayer.isBaseLayer) {\n this.mapObject.baseMapRectBounds = this.rectBounds;\n }\n var colors = shapeSettings.palette.length > 1 ? shapeSettings.palette : getShapeColor(this.mapObject.theme);\n var labelTemplateEle = createElement('div', {\n id: this.mapObject.element.id + '_LayerIndex_' + layerIndex + '_Label_Template_Group',\n className: 'template',\n styles: 'pointer-events: none; overflow: hidden; position: absolute;' +\n 'top:' + this.mapObject.mapAreaRect.y + 'px;' +\n 'left:' + this.mapObject.mapAreaRect.x + 'px;' +\n 'height:' + this.mapObject.mapAreaRect.height + 'px;' +\n 'width:' + this.mapObject.mapAreaRect.width + 'px;'\n });\n var _loop_1 = function (i) {\n var k = void 0;\n var currentShapeData = this_1.currentLayer.layerData[i];\n var pathOptions = void 0;\n var polyLineOptions = void 0;\n var circleOptions = void 0;\n var groupElement = void 0;\n var drawObject = void 0;\n var path = '';\n var points = '';\n var fill = (shapeSettings.autofill) ? colors[i % colors.length] : shapeSettings.fill;\n if (shapeSettings.colorValuePath !== null && !isNullOrUndefined(currentShapeData['property'])) {\n k = checkShapeDataFields(this_1.currentLayer.dataSource, currentShapeData['property'], this_1.currentLayer.shapeDataPath, this_1.currentLayer.shapePropertyPath);\n if (k !== null && shapeSettings.colorMapping.length === 0) {\n fill = this_1.currentLayer.dataSource[k][shapeSettings.colorValuePath];\n }\n else if (currentShapeData['property'][shapeSettings.colorValuePath] &&\n this_1.currentLayer.dataSource.length === 0 && shapeSettings.colorMapping.length === 0) {\n fill = currentShapeData['property'][shapeSettings.colorValuePath];\n }\n }\n var shapeID = this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_ShapeIndex_' + i + '_dataIndex_' + k;\n fill = this_1.getShapeColorMapping(this_1.currentLayer, currentShapeData['property'], fill);\n var eventArgs = {\n cancel: false, name: shapeRendering, index: i,\n data: this_1.currentLayer.dataSource ? this_1.currentLayer.dataSource[k] : null, maps: this_1.mapObject,\n shape: shapeSettings, fill: fill, border: { width: shapeSettings.border.width, color: shapeSettings.border.color }\n };\n this_1.mapObject.trigger(shapeRendering, eventArgs);\n var drawingType = !isNullOrUndefined(currentShapeData['_isMultiPolygon'])\n ? 'MultiPolygon' : isNullOrUndefined(currentShapeData['type']) ? currentShapeData[0]['type'] : currentShapeData['type'];\n drawingType = (drawingType === 'Polygon' || drawingType === 'MultiPolygon') ? 'Polygon' : drawingType;\n if (this_1.groupElements.length < 1) {\n groupElement = this_1.mapObject.renderer.createGroup({\n id: this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_' + drawingType + '_Group', transform: ''\n });\n this_1.groupElements.push(groupElement);\n }\n else {\n for (var i_1 = 0; i_1 < this_1.groupElements.length; i_1++) {\n var ele = this_1.groupElements[i_1];\n if (ele.id.indexOf(drawingType) > -1) {\n groupElement = ele;\n break;\n }\n else if (i_1 >= this_1.groupElements.length - 1) {\n groupElement = this_1.mapObject.renderer.createGroup({\n id: this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_' + drawingType + '_Group'\n });\n this_1.groupElements.push(groupElement);\n break;\n }\n }\n }\n var pathEle = void 0;\n switch (drawingType) {\n case 'Polygon':\n if (!currentShapeData['_isMultiPolygon']) {\n path += 'M' + (currentShapeData[0]['point']['x']) + ' ' + (currentShapeData[0]['point']['y']);\n currentShapeData.map(function (shapeData) {\n path += ' L ' + (shapeData['point']['x']) + ' ' + (shapeData['point']['y']);\n });\n }\n else {\n path = this_1.generateMultiPolygonPath(currentShapeData);\n }\n path += ' z ';\n if (path.length > 3) {\n pathOptions = new PathOption(shapeID, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray, path);\n pathEle = this_1.mapObject.renderer.drawPath(pathOptions);\n }\n break;\n case 'LineString':\n currentShapeData.map(function (lineData) {\n points += lineData['point']['x'] + ' , ' + lineData['point']['y'] + ' ';\n });\n polyLineOptions = new PolylineOption(shapeID, points, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray);\n pathEle = this_1.mapObject.renderer.drawPolyline(polyLineOptions);\n break;\n case 'Point':\n var pointData = currentShapeData['point'];\n circleOptions = new CircleOption(shapeID, eventArgs.fill, eventArgs.border, shapeSettings.opacity, pointData['x'], pointData['y'], shapeSettings.circleRadius, null);\n pathEle = this_1.mapObject.renderer.drawCircle(circleOptions);\n break;\n case 'Path':\n path = currentShapeData['point'];\n pathOptions = new PathOption(shapeID, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray, path);\n pathEle = this_1.mapObject.renderer.drawPath(pathOptions);\n break;\n }\n if (!isNullOrUndefined(pathEle)) {\n pathEle.setAttribute('aria-label', ((!isNullOrUndefined(currentShapeData['property'])) ?\n (currentShapeData['property'][this_1.currentLayer.shapePropertyPath]) : ''));\n pathEle.setAttribute('tabindex', (this_1.mapObject.tabIndex + i + 2).toString());\n groupElement.appendChild(pathEle);\n }\n };\n var this_1 = this;\n for (var i = 0; i < this.currentLayer.layerData.length; i++) {\n _loop_1(i);\n }\n var bubbleG;\n if (this.currentLayer.bubbleSettings.length && this.mapObject.bubbleModule) {\n var length_1 = this.currentLayer.bubbleSettings.length;\n var bubble_1;\n var _loop_2 = function (j) {\n bubble_1 = this_2.currentLayer.bubbleSettings[j];\n bubbleG = this_2.mapObject.renderer.createGroup({\n id: this_2.mapObject.element.id + '_LayerIndex_' + layerIndex + '_bubble_Group_' + j\n });\n var range = { min: 0, max: 0 };\n this_2.bubbleCalculation(bubble_1, range);\n bubble_1.dataSource.map(function (bubbleData, i) {\n _this.renderBubble(_this.currentLayer, bubbleData, colors[i % colors.length], range, j, i, bubbleG, layerIndex, bubble_1);\n });\n this_2.groupElements.push(bubbleG);\n };\n var this_2 = this;\n for (var j = 0; j < length_1; j++) {\n _loop_2(j);\n }\n }\n var group = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_layerIndex_' + layerIndex + '_dataLableIndex_Group', style: 'pointer-events: none;'\n }));\n if (this.mapObject.dataLabelModule && this.currentLayer.dataLabelSettings.visible) {\n renderData.map(function (currentShapeData, i) {\n _this.renderLabel(_this.currentLayer, layerIndex, currentShapeData, group, i, labelTemplateEle);\n });\n this.groupElements.push(group);\n }\n if (this.mapObject.navigationLineModule) {\n this.groupElements.push(this.mapObject.navigationLineModule.renderNavigation(this.currentLayer, this.currentFactor, layerIndex));\n }\n this.groupElements.map(function (element) {\n _this.layerObject.appendChild(element);\n });\n if (this.mapObject.markerModule) {\n this.mapObject.markerModule.markerRender(this.layerObject, layerIndex, this.currentFactor);\n }\n this.translateLayerElements(this.layerObject, layerIndex);\n this.layerGroup.appendChild(this.layerObject);\n };\n /**\n * render datalabel\n */\n LayerPanel.prototype.renderLabel = function (layer, layerIndex, shape, group, shapeIndex, labelTemplateEle) {\n this.mapObject.dataLabelModule.renderLabel(layer, layerIndex, shape, layer.layerData, group, labelTemplateEle, shapeIndex);\n };\n /**\n * To render path for multipolygon\n */\n LayerPanel.prototype.generateMultiPolygonPath = function (currentShapeData) {\n var path = '';\n var shape;\n for (var j = 0; j < currentShapeData.length; j++) {\n path += 'M' + (currentShapeData[j][0]['point']['x']) + ' ' + (currentShapeData[j][0]['point']['y']);\n shape = currentShapeData[j];\n shape.map(function (shapeData) {\n path += ' L ' + (shapeData['point']['x']) + ' ' + (shapeData['point']['y']);\n });\n }\n return path;\n };\n /**\n * To render bubble\n */\n LayerPanel.prototype.renderBubble = function (layer, bubbleData, color, range, bubbleIndex, dataIndex, group, layerIndex, bubbleSettings) {\n if (isNullOrUndefined(this.mapObject.bubbleModule) || !bubbleSettings.visible) {\n return null;\n }\n color = bubbleSettings.fill ? bubbleSettings.fill : color;\n this.mapObject.bubbleModule.id = this.mapObject.element.id + '_LayerIndex_' + layerIndex + '_BubbleIndex_' +\n bubbleIndex + '_dataIndex_' + dataIndex;\n this.mapObject.bubbleModule.renderBubble(bubbleSettings, bubbleData, color, range, bubbleIndex, dataIndex, layerIndex, layer, group);\n };\n /**\n * To get the shape color from color mapping module\n */\n LayerPanel.prototype.getShapeColorMapping = function (layer, shape, color) {\n color = color ? color : layer.shapeSettings.fill;\n if (layer.shapeSettings.colorMapping.length === 0 && isNullOrUndefined(layer.dataSource)) {\n return color;\n }\n var index = checkShapeDataFields(layer.dataSource, shape, layer.shapeDataPath, layer.shapePropertyPath);\n var colorMapping = new ColorMapping(this.mapObject);\n if (isNullOrUndefined(layer.dataSource[index])) {\n return color;\n }\n return colorMapping.getShapeColorMapping(layer.shapeSettings, layer.dataSource[index], color);\n };\n LayerPanel.prototype.generatePoints = function (type, coordinates, data, properties) {\n var _this = this;\n var latitude;\n var longitude;\n var newData = [];\n switch (type.toLowerCase()) {\n case 'polygon':\n newData = this.calculatePolygonBox(coordinates[0], data, properties);\n if (newData.length > 0) {\n newData['property'] = properties;\n newData['type'] = type;\n newData['_isMultiPolygon'] = false;\n this.currentLayer.layerData.push(newData);\n }\n break;\n case 'multipolygon':\n var multiPolygonDatas = [];\n for (var i = 0; i < coordinates.length; i++) {\n newData = this.calculatePolygonBox(coordinates[i][0], data, properties);\n if (newData.length > 0) {\n multiPolygonDatas.push(newData);\n }\n }\n multiPolygonDatas['property'] = properties;\n multiPolygonDatas['type'] = type;\n multiPolygonDatas['_isMultiPolygon'] = true;\n this.currentLayer.layerData.push(multiPolygonDatas);\n break;\n case 'linestring':\n coordinates.map(function (points, index) {\n latitude = points[1];\n longitude = points[0];\n var point = convertGeoToPoint(latitude, longitude, _this.currentFactor, _this.currentLayer, _this.mapObject);\n newData.push({\n point: point, lat: latitude, lng: longitude\n });\n });\n newData['property'] = properties;\n newData['type'] = type;\n this.currentLayer.layerData.push(newData);\n break;\n case 'point':\n latitude = coordinates[1];\n longitude = coordinates[0];\n var point = convertGeoToPoint(latitude, longitude, this.currentFactor, this.currentLayer, this.mapObject);\n this.currentLayer.layerData.push({\n point: point, type: type, lat: latitude, lng: longitude, property: properties\n });\n break;\n case 'path':\n this.currentLayer.layerData.push({\n point: data['d'], type: type, property: properties\n });\n break;\n }\n };\n LayerPanel.prototype.calculateFactor = function (layer) {\n var horFactor;\n var verFactor = 1;\n var divide = 10;\n var exp = 'e+1';\n var bounds = this.mapObject.baseMapBounds;\n var mapSize = new Size(this.mapObject.mapAreaRect.width, this.mapObject.mapAreaRect.height - 5);\n var mapHeight;\n var mapWidth;\n if (bounds) {\n var start = convertGeoToPoint(bounds.latitude.min, bounds.longitude.min, null, layer, this.mapObject);\n var end = convertGeoToPoint(bounds.latitude.max, bounds.longitude.max, null, layer, this.mapObject);\n mapHeight = end.y - start.y;\n mapWidth = end.x - start.x;\n }\n else {\n mapHeight = mapWidth = 500;\n }\n if (mapHeight < mapSize.height) {\n horFactor = parseFloat(Math.abs(Number(mapSize.height / Number(mapHeight.toString() + exp)) * 100).toString().split('.')[0])\n / divide;\n }\n else {\n horFactor = mapSize.height / mapHeight;\n }\n if (mapWidth < mapSize.width) {\n verFactor = parseFloat(Math.abs(Number(mapSize.width / Number(mapWidth.toString() + exp)) * 100).toString().split('.')[0])\n / divide;\n }\n else {\n verFactor = mapSize.width / mapWidth;\n }\n return (Math.min(verFactor, horFactor));\n };\n LayerPanel.prototype.translateLayerElements = function (layerElement, index) {\n var childNode;\n if (!isNullOrUndefined(this.mapObject.baseMapRectBounds)) {\n var duration = this.currentLayer.animationDuration;\n var animate = duration !== 0 || isNullOrUndefined(this.mapObject.zoomModule);\n var translate = getTranslate(this.mapObject, this.currentLayer, animate);\n var scale = this.mapObject.previousScale = translate['scale'];\n var location_1 = this.mapObject.previousPoint = translate['location'];\n this.mapObject.baseTranslatePoint = this.mapObject.translatePoint = location_1;\n this.mapObject.baseScale = this.mapObject.scale = scale;\n for (var i = 0; i < layerElement.childElementCount; i++) {\n childNode = layerElement.childNodes[i];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1))) {\n var transform = 'scale( ' + scale + ' ) '\n + 'translate( ' + location_1.x + ' ' + location_1.y + ' ) ';\n childNode.setAttribute('transform', transform);\n if (duration > 0 && !isNullOrUndefined(this.mapObject.zoomModule)) {\n translate = getTranslate(this.mapObject, this.currentLayer);\n this.mapObject.scale = translate['scale'];\n this.mapObject.translatePoint = translate['location'];\n }\n }\n }\n }\n else if (this.mapObject.isTileMap) {\n for (var j = 0; j < layerElement.childElementCount; j++) {\n childNode = layerElement.childNodes[j];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1)) &&\n (!(childNode.id.indexOf('_line_Group') > -1))) {\n var transform = 'scale( ' + this.mapObject.scale + ' ) ' + 'translate( ' + this.mapObject.translatePoint.x\n + ' ' + this.mapObject.translatePoint.y + ' ) ';\n childNode.setAttribute('transform', transform);\n }\n }\n }\n };\n LayerPanel.prototype.calculateRectBounds = function (layerData) {\n var _this = this;\n layerData.forEach(function (obj, index) {\n if (!isNullOrUndefined(obj['geometry']) || !isNullOrUndefined(obj['coordinates'])) {\n var type = !isNullOrUndefined(obj['geometry']) ? obj['geometry']['type'] : obj['type'];\n var coordinates = !isNullOrUndefined(obj['geometry']) ? obj['geometry']['coordinates'] : obj['coordinates'];\n switch (type.toLowerCase()) {\n case 'polygon':\n _this.calculateRectBox(coordinates[0]);\n break;\n case 'multipolygon':\n coordinates.map(function (point, index) {\n _this.calculateRectBox(point[0]);\n });\n break;\n }\n }\n });\n };\n LayerPanel.prototype.calculatePolygonBox = function (coordinates, data, properties) {\n var _this = this;\n var newData = [];\n var bounds = this.mapObject.baseMapBounds;\n coordinates.map(function (currentPoint, index) {\n var latitude = currentPoint[1];\n var longitude = currentPoint[0];\n if ((longitude >= bounds.longitude.min && longitude <= bounds.longitude.max)\n && (latitude >= bounds.latitude.min && latitude <= bounds.latitude.max)) {\n var point = convertGeoToPoint(latitude, longitude, _this.currentFactor, _this.currentLayer, _this.mapObject);\n if (isNullOrUndefined(_this.rectBounds)) {\n _this.rectBounds = { min: { x: point.x, y: point.y }, max: { x: point.x, y: point.y } };\n }\n else {\n _this.rectBounds['min']['x'] = Math.min(_this.rectBounds['min']['x'], point.x);\n _this.rectBounds['min']['y'] = Math.min(_this.rectBounds['min']['y'], point.y);\n _this.rectBounds['max']['x'] = Math.max(_this.rectBounds['max']['x'], point.x);\n _this.rectBounds['max']['y'] = Math.max(_this.rectBounds['max']['y'], point.y);\n }\n newData.push({\n point: point,\n lat: latitude,\n lng: longitude\n });\n }\n });\n return newData;\n };\n LayerPanel.prototype.calculateRectBox = function (coordinates) {\n var _this = this;\n coordinates.forEach(function (currentCoords) {\n if (isNullOrUndefined(_this.mapObject.baseMapBounds)) {\n _this.mapObject.baseMapBounds = new GeoLocation({ min: currentCoords[1], max: currentCoords[1] }, { min: currentCoords[0], max: currentCoords[0] });\n }\n else {\n _this.mapObject.baseMapBounds.latitude.min = Math.min(_this.mapObject.baseMapBounds.latitude.min, currentCoords[1]);\n _this.mapObject.baseMapBounds.latitude.max = Math.max(_this.mapObject.baseMapBounds.latitude.max, currentCoords[1]);\n _this.mapObject.baseMapBounds.longitude.min = Math.min(_this.mapObject.baseMapBounds.longitude.min, currentCoords[0]);\n _this.mapObject.baseMapBounds.longitude.max = Math.max(_this.mapObject.baseMapBounds.longitude.max, currentCoords[0]);\n }\n });\n };\n LayerPanel.prototype.generateTiles = function (zoomLevel, tileTranslatePoint, bing) {\n var userLang = this.mapObject.locale;\n var size = this.mapObject.availableSize;\n this.tiles = [];\n var xcount;\n var ycount;\n xcount = ycount = Math.pow(2, zoomLevel);\n var width = size.width / 2;\n var height = size.height / 2;\n var baseLayer = this.mapObject.layers[this.mapObject.baseLayerIndex];\n this.urlTemplate = baseLayer.urlTemplate;\n var endY = Math.min(ycount, ((-tileTranslatePoint.y + size.height) / 256) + 1);\n var endX = Math.min(xcount, ((-tileTranslatePoint.x + size.width) / 256) + 1);\n var startX = (-(tileTranslatePoint.x + 256) / 256);\n var startY = (-(tileTranslatePoint.y + 256) / 256);\n bing = bing || this.bing || this.mapObject['bingMap'];\n for (var i = Math.round(startX); i < Math.round(endX); i++) {\n for (var j = Math.round(startY); j < Math.round(endY); j++) {\n var x = 256 * i + tileTranslatePoint.x;\n var y = 256 * j + tileTranslatePoint.y;\n if (x > -256 && x <= size.width && y > -256 && y < size.height) {\n if (i >= 0 && j >= 0) {\n var tile = new Tile(i, j);\n tile.left = x;\n tile.top = y;\n if (baseLayer.layerType === 'Bing') {\n var key = baseLayer.key;\n tile.src = bing.getBingMap(tile, key, baseLayer.bingMapType, userLang, bing.imageUrl, bing.subDomains);\n }\n else {\n tile.src = this.urlTemplate.replace('level', zoomLevel.toString()).replace('tileX', tile.x.toString())\n .replace('tileY', tile.y.toString());\n }\n this.tiles.push(tile);\n }\n }\n }\n }\n var proxTiles = extend([], this.tiles, [], true);\n for (var _i = 0, _a = this.mapObject.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n if (!(layer.type === 'SubLayer' && layer.visible)) {\n continue;\n }\n if (layer.layerType === 'OSM' || layer.layerType === 'Bing') {\n for (var _b = 0, proxTiles_1 = proxTiles; _b < proxTiles_1.length; _b++) {\n var baseTile = proxTiles_1[_b];\n var subtile = extend(baseTile, {}, {}, true);\n if (layer.layerType === 'Bing') {\n subtile.src = bing.getBingMap(subtile, layer.key, layer.bingMapType, userLang, bing.imageUrl, bing.subDomains);\n }\n else {\n subtile.src = layer.urlTemplate.replace('level', zoomLevel.toString()).replace('tileX', baseTile.x.toString())\n .replace('tileY', baseTile.y.toString());\n }\n this.tiles.push(subtile);\n }\n }\n }\n this.arrangeTiles();\n };\n LayerPanel.prototype.arrangeTiles = function () {\n var htmlString = this.templateCompiler(this.tiles);\n if (getElementByID(this.mapObject.element.id + '_tile_parent')) {\n document.getElementById(this.mapObject.element.id + '_tile_parent').innerHTML = htmlString;\n }\n };\n LayerPanel.prototype.templateCompiler = function (tiles) {\n var tileElment = '';\n for (var _i = 0, tiles_1 = tiles; _i < tiles_1.length; _i++) {\n var tile = tiles_1[_i];\n tileElment += '
    ';\n }\n return tileElment;\n };\n LayerPanel.prototype.panTileMap = function (factorX, factorY, centerPosition) {\n var level = this.mapObject.tileZoomLevel;\n var padding = 20;\n var x;\n var y;\n var totalSize = Math.pow(2, level) * 256;\n x = (factorX / 2) - (totalSize / 2);\n y = (factorY / 2) - (totalSize / 2);\n var position = convertTileLatLongToPoint(centerPosition, level, { x: x, y: y }, this.isMapCoordinates);\n x -= position.x - (factorX / 2);\n y = (y - (position.y - (factorY / 2))) + padding;\n this.mapObject.scale = Math.pow(2, level - 1);\n this.mapObject.translatePoint = new Point(((x - (0.5 * this.mapObject.scale)) / this.mapObject.scale), ((y - (0.5 * this.mapObject.scale)) / this.mapObject.scale));\n return new Point(x, y);\n };\n return LayerPanel;\n}());\nexport { LayerPanel };\n","import { annotationRendering } from '../index';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, getElementOffset, getElementByID } from '../utils/helper';\n/**\n * Represent the annotation rendering for map\n */\nvar Annotations = /** @class */ (function () {\n function Annotations(map) {\n this.map = map;\n }\n Annotations.prototype.renderAnnotationElements = function () {\n var _this = this;\n var secondaryID = this.map.element.id + '_Secondary_Element';\n var annotationGroup = createElement('div', { id: this.map.element.id + '_Annotations_Group' });\n annotationGroup.style.position = 'absolute';\n annotationGroup.style.top = '0px';\n annotationGroup.style.left = '0px';\n this.map.annotations.map(function (annotation, index) {\n if (annotation.content !== null) {\n _this.createAnnotationTemplate(annotationGroup, annotation, index);\n }\n });\n if (annotationGroup.childElementCount > 0 && !(isNullOrUndefined(getElementByID(secondaryID)))) {\n getElementByID(secondaryID).appendChild(annotationGroup);\n }\n };\n /**\n * To create annotation elements\n */\n Annotations.prototype.createAnnotationTemplate = function (parentElement, annotation, annotationIndex) {\n var left;\n var top;\n var templateFn;\n var map = this.map;\n var templateElement;\n var availSize = map.availableSize;\n var id = map.element.id + '_Annotation_' + annotationIndex;\n var childElement = createElement('div', {\n id: map.element.id + '_Annotation_' + annotationIndex, styles: 'position: absolute; z-index:' + annotation.zIndex + ';'\n });\n var argsData = {\n cancel: false, name: annotationRendering, content: annotation.content,\n annotation: annotation\n };\n this.map.trigger(annotationRendering, argsData);\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(this.map).length) {\n templateElement = templateFn(this.map);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content\n }));\n }\n var offset = getElementOffset(childElement.cloneNode(true), map.element);\n var elementRect = map.element.getBoundingClientRect();\n var bounds = map.svgObject.getBoundingClientRect();\n left = Math.abs(bounds.left - elementRect.left);\n top = Math.abs(bounds.top - elementRect.top);\n var annotationXValue = (annotation.x.indexOf('%') > -1) ? (availSize.width / 100) * parseFloat(annotation.x) :\n parseFloat(annotation.x);\n var annotationYValue = (annotation.y.indexOf('%') > -1) ? (availSize.height / 100) * parseFloat(annotation.y) :\n parseFloat(annotation.y);\n left = (annotation.horizontalAlignment === 'None') ? (left + annotationXValue) : left;\n top = (annotation.verticalAlignment === 'None') ? (top + annotationYValue) : top;\n switch (annotation.verticalAlignment) {\n case 'Near':\n top = (top + annotationYValue);\n break;\n case 'Center':\n top = (top + annotationYValue) + ((bounds.height / 2) - (offset.height / 2));\n break;\n case 'Far':\n top = (top + bounds.height + annotationYValue) - offset.height;\n break;\n }\n switch (annotation.horizontalAlignment) {\n case 'Near':\n left = (left + annotationXValue);\n break;\n case 'Center':\n left = (left + annotationXValue) + ((bounds.width / 2) - (offset.width / 2));\n break;\n case 'Far':\n left = (left + bounds.width + annotationXValue) - offset.width;\n break;\n }\n childElement.style.left = left + 'px';\n childElement.style.top = top + 'px';\n parentElement.appendChild(childElement);\n };\n /*\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (map) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","import { print as printWindow, createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\n/**\n * Annotation Module handles the Annotation for Maps\n */\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for Maps\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the Maps\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWindow.moveTo(0, 0);\n this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n };\n this.control.trigger(beforePrint, argsData);\n if (!argsData.cancel) {\n printWindow(argsData.htmlContent, this.printWindow);\n }\n };\n /**\n * To get the html string of the Maps\n * @param elements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (elements) {\n var div = createElement('div');\n if (elements) {\n if (elements instanceof Array) {\n elements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (elements instanceof Element) {\n div.appendChild(elements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(elements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (type, fileName, orientation) {\n var _this = this;\n var element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': this.control.availableSize.width.toString(),\n 'height': this.control.availableSize.height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n this.control.svgObject.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(this.control.svgObject)], { type: 'image/svg+xml' }));\n if (type === 'SVG') {\n this.triggerDownload(fileName, type, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = element.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (type === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = element.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, (_this.control.availableSize.width - 60), _this.control.availableSize.height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, type, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + type.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Maps Component file\n */\nimport { Component, NotifyPropertyChanges, Property, Ajax } from '@syncfusion/ej2-base';\nimport { EventHandler, Browser, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nimport { SvgRenderer, Event, remove, L10n, Collection, Internationalization, Complex } from '@syncfusion/ej2-base';\nimport { Size, createSvg, Point, removeElement, triggerShapeEvent, showTooltip, getElement } from './utils/helper';\nimport { ZoomSettings, LegendSettings } from './model/base';\nimport { LayerSettings, TitleSettings, Border, Margin, MapsAreaSettings, Annotation } from './model/base';\nimport { load, click, loaded, resize, shapeSelected } from './model/constants';\nimport { Theme, BootstrapTheme, FabricTheme, HighContrastTheme } from './model/theme';\nimport { LayerPanel } from './layers/layer-panel';\nimport { Rect, RectOption, measureText, getElementByID, MapAjax } from '../maps/utils/helper';\nimport { findPosition, textTrim, TextOption, renderTextElement, convertGeoToPoint } from '../maps/utils/helper';\nimport { Annotations } from '../maps/user-interaction/annotation';\nimport { MarkerSettings } from './index';\nimport { changeBorderWidth } from './index';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { ExportUtils } from '../maps/utils/export';\n/**\n * Represents the Maps control.\n * ```html\n *
    \n * \n * ```\n */\nvar Maps = /** @class */ (function (_super) {\n __extends(Maps, _super);\n /**\n * Constructor for creating the widget\n */\n function Maps(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Check layer whether is normal or tile\n * @private\n */\n _this.isTileMap = false;\n /** @private */\n _this.baseSize = new Size(0, 0);\n /** @private */\n _this.translatePoint = new Point(0, 0);\n /** @private */\n _this.baseTranslatePoint = new Point(0, 0);\n /** @private */\n _this.tileTranslatePoint = new Point(0, 0);\n /** @private */\n _this.baseTileTranslatePoint = new Point(0, 0);\n /** @private */\n _this.isDevice = Browser.isDevice;\n return _this;\n }\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Maps.prototype.getLocalizedLabel = function (key) {\n return this.localeObject.getConstant(key);\n };\n /**\n * Initializing pre-required values.\n */\n Maps.prototype.preRender = function () {\n this.initPrivateVariable();\n this.trigger(load, { maps: this });\n this.themeEffect();\n this.unWireEVents();\n this.createSVG();\n this.wireEVents();\n this.setCulture();\n };\n Maps.prototype.setTextStyle = function (theme, font) {\n font.color = font.color || theme.color;\n font.size = font.size || theme.size;\n font.fontFamily = font.fontFamily || theme.fontFamily;\n font.fontStyle = font.fontStyle || theme.fontStyle;\n font.fontWeight = font.fontWeight || theme.fontWeight;\n };\n /**\n * To change font styles of map based on themes\n */\n Maps.prototype.themeEffect = function () {\n this.setBackgroundValue(this.theme);\n switch (this.theme) {\n case 'Material':\n this.setTextStyle(Theme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(Theme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(Theme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(Theme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, Theme.dataLabelFont);\n break;\n case 'Bootstrap':\n this.setTextStyle(BootstrapTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(BootstrapTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(BootstrapTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(BootstrapTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, BootstrapTheme.dataLabelFont);\n break;\n case 'Fabric':\n this.setTextStyle(FabricTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(FabricTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(FabricTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(FabricTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, FabricTheme.dataLabelFont);\n break;\n case 'Highcontrast':\n this.setTextStyle(HighContrastTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(HighContrastTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(HighContrastTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(HighContrastTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, HighContrastTheme.dataLabelFont);\n break;\n }\n };\n /**\n * Maps background and area background colors change as per theme.\n * @param theme based on theme background colors will change.\n */\n Maps.prototype.setBackgroundValue = function (theme) {\n var color = theme === 'Highcontrast' ? '#000000' : '#FFFFFF';\n this.background = this.background ? this.background : color;\n this.mapsArea.background = this.mapsArea.background ? this.mapsArea.background : color;\n color = theme !== 'Highcontrast' ? '#737373' : '#FFFFFF';\n this.zoomSettings.color = (this.zoomSettings.color) ? this.zoomSettings.color : color;\n };\n /**\n * To change datalabel font\n * @param layers\n * @param style\n */\n Maps.prototype.setLabelFont = function (layers, style) {\n for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {\n var layer = layers_1[_i];\n this.setTextStyle(style, layer.dataLabelSettings.textStyle);\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Maps.prototype.render = function () {\n this.findBaseAndSubLayers();\n this.createSecondaryElement();\n this.addTabIndex();\n this.renderBorder();\n this.renderTitle(this.titleSettings, 'title', null, null);\n this.renderArea();\n this.processRequestJsonData();\n };\n /* tslint:disable:no-string-literal */\n Maps.prototype.processRequestJsonData = function () {\n var _this = this;\n var length = this.layersCollection.length - 1;\n this.serverProcess = { request: 0, response: 0 };\n var queryModule;\n var localAjax;\n var ajaxModule;\n var dataModule;\n this.layersCollection.forEach(function (layer, layerIndex) {\n if (layer.shapeData instanceof DataManager) {\n _this.serverProcess['request']++;\n dataModule = layer.shapeData;\n queryModule = layer.query instanceof Query ? layer.query : new Query();\n var dataManager = dataModule.executeQuery(queryModule);\n dataManager.then(function (e) {\n _this.processResponseJsonData('DataManager', e, layer, 'ShapeData');\n });\n }\n else if (layer.shapeData instanceof MapAjax) {\n _this.processAjaxRequest(layer, layer.shapeData, 'ShapeData');\n }\n if (layer.dataSource instanceof MapAjax) {\n _this.processAjaxRequest(layer, layer.dataSource, 'DataSource');\n }\n if (_this.serverProcess['request'] === _this.serverProcess['response'] && length === layerIndex) {\n _this.processResponseJsonData(null);\n }\n });\n };\n Maps.prototype.processAjaxRequest = function (layer, localAjax, type) {\n var _this = this;\n var ajaxModule;\n this.serverProcess['request']++;\n ajaxModule = new Ajax(localAjax.dataOptions, localAjax.type, localAjax.async, localAjax.contentType);\n ajaxModule.onSuccess = function (args) {\n _this.processResponseJsonData('Ajax', args, layer, type);\n };\n ajaxModule.send(localAjax.sendData);\n };\n /* tslint:disable:no-eval */\n Maps.prototype.processResponseJsonData = function (processType, data, layer, dataType) {\n this.serverProcess['response']++;\n if (processType) {\n if (dataType === 'ShapeData') {\n layer.shapeData = (processType === 'DataManager') ? !isNullOrUndefined(data['result']) ? data['result'] : data['actual'] :\n JSON.parse(data);\n }\n else {\n layer.dataSource = (processType === 'DataManager') ? !isNullOrUndefined(data['result']) ? data['result'] : data['actual'] :\n JSON.parse('[' + data + ']')[0];\n }\n }\n if (!isNullOrUndefined(processType) && this.serverProcess['request'] === this.serverProcess['response']) {\n var collection = this.layersCollection;\n this.layersCollection = [];\n for (var i = 0; i < collection.length; i++) {\n if (collection[i].isBaseLayer) {\n this.layersCollection.push(collection[i]);\n }\n }\n for (var j = 0; j < collection.length; j++) {\n if (!collection[j].isBaseLayer) {\n this.layersCollection.push(collection[j]);\n }\n }\n this.renderMap();\n }\n else if (isNullOrUndefined(processType)) {\n this.renderMap();\n }\n };\n Maps.prototype.renderMap = function () {\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.renderLegend();\n }\n this.createTile();\n if (this.zoomSettings.enable && this.zoomModule) {\n this.zoomModule.createZoomingToolbars();\n }\n this.mapLayerPanel.measureLayerPanel();\n this.element.appendChild(this.svgObject);\n //this.setSecondaryElementPosition();\n this.arrangeTemplate();\n if (this.annotationsModule) {\n this.annotationsModule.renderAnnotationElements();\n }\n this.zoomingChange();\n this.trigger(loaded, { maps: this });\n };\n /**\n * Render the map area border\n */\n Maps.prototype.renderArea = function () {\n var rect = new RectOption(this.element.id + '_MapAreaBorder', this.mapsArea.background, this.mapsArea.border, 1, this.mapAreaRect);\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n };\n /**\n * To add tab index for map element\n */\n Maps.prototype.addTabIndex = function () {\n this.element.setAttribute('aria-label', this.description || 'Maps Element');\n this.element.setAttribute('tabindex', this.tabIndex.toString());\n };\n // private setSecondaryElementPosition(): void {\n // if (!this.isTileMap) {\n // let element: HTMLDivElement = getElementByID(this.element.id + '_Secondary_Element') as HTMLDivElement;\n // let rect: ClientRect = this.element.getBoundingClientRect();\n // let svgRect: ClientRect = getElementByID(this.element.id + '_svg').getBoundingClientRect();\n // element.style.marginLeft = Math.max(svgRect.left - rect.left, 0) + 'px';\n // element.style.marginTop = Math.max(svgRect.top - rect.top, 0) + 'px';\n // }\n // }\n Maps.prototype.zoomingChange = function () {\n var left;\n var top;\n if (getElementByID(this.element.id + '_Layer_Collections') && this.zoomModule) {\n this.zoomModule.layerCollectionEle = getElementByID(this.element.id + '_Layer_Collections');\n }\n if (this.isTileMap && getElementByID(this.element.id + '_Tile_SVG') && getElementByID(this.element.id + '_tile_parent')) {\n var tileRect = getElementByID(this.element.id + '_tile_parent').getBoundingClientRect();\n var tileSvgRect = getElementByID(this.element.id + '_Tile_SVG').getBoundingClientRect();\n left = (tileRect.left - tileSvgRect.left);\n top = (tileRect.top - tileSvgRect.top);\n getElementByID(this.element.id + '_Tile_SVG').setAttribute('transform', 'translate(' + left + ' ' + top + ')');\n var markerTemplateElements = document.getElementsByClassName('template');\n if (!isNullOrUndefined(markerTemplateElements) && markerTemplateElements.length > 0) {\n for (var i = 0; i < markerTemplateElements.length; i++) {\n var templateGroupEle = markerTemplateElements[i];\n templateGroupEle.style.left = left + 'px';\n templateGroupEle.style.top = top + 'px';\n }\n }\n }\n if (this.zoomSettings.zoomFactor >= 1) {\n if (this.zoomModule && this.zoomModule.toolBarGroup && this.zoomSettings.enable) {\n this.zoomModule.alignToolBar();\n }\n var elements = document.getElementById(this.element.id + '_Layer_Collections');\n if (!isNullOrUndefined(elements) && elements.childElementCount > 0) {\n for (var i = 0; i < elements.childNodes.length; i++) {\n var childElement = elements.childNodes[i];\n if (childElement.tagName === 'g') {\n var layerIndex = parseFloat(childElement.id.split('_')[2]);\n for (var j = 0; j < childElement.childNodes.length; j++) {\n var childNode = childElement.childNodes[j];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1))) {\n changeBorderWidth(childNode, layerIndex, this.scale, this);\n }\n }\n }\n }\n }\n if (this.zoomModule && (this.previousScale !== this.scale)) {\n this.zoomModule.applyTransform(true);\n }\n }\n };\n Maps.prototype.createSecondaryElement = function () {\n if (isNullOrUndefined(document.getElementById(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: absolute;z-index:1;'\n });\n this.element.appendChild(secondaryElement);\n }\n };\n Maps.prototype.arrangeTemplate = function () {\n var secondaryEle = getElementByID(this.element.id + '_Secondary_Element');\n if (document.getElementById(this.element.id + '_Legend_Border')) {\n document.getElementById(this.element.id + '_Legend_Border').style.pointerEvents = 'none';\n }\n var templateElements = document.getElementsByClassName('template');\n if (!isNullOrUndefined(templateElements) && templateElements.length > 0 && getElementByID(this.element.id + '_Layer_Collections')) {\n for (var i = 0; i < templateElements.length; i++) {\n var templateGroupEle = templateElements[i];\n if (!isNullOrUndefined(templateGroupEle) && templateGroupEle.childElementCount > 0) {\n var layerOffset = getElementByID(this.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementOffset = getElementByID(templateGroupEle.id).getBoundingClientRect();\n for (var j = 0; j < templateGroupEle.childElementCount; j++) {\n var currentTemplate = templateGroupEle.childNodes[j];\n var templateOffset = currentTemplate.getBoundingClientRect();\n currentTemplate.style.left = ((this.isTileMap ? parseFloat(currentTemplate.style.left) :\n ((layerOffset.left < elementOffset.left ? (parseFloat(currentTemplate.style.left) -\n Math.abs(elementOffset.left - layerOffset.left)) : (parseFloat(currentTemplate.style.left) +\n Math.abs(elementOffset.left - layerOffset.left))))) - (templateOffset.width / 2)) + 'px';\n currentTemplate.style.top = ((this.isTileMap ? parseFloat(currentTemplate.style.top) :\n ((layerOffset.top < elementOffset.top ? (parseFloat(currentTemplate.style.top) -\n Math.abs(elementOffset.top - layerOffset.top)) : (parseFloat(currentTemplate.style.top) +\n Math.abs(elementOffset.top - layerOffset.top))))) - (templateOffset.height / 2)) + 'px';\n }\n }\n }\n }\n };\n Maps.prototype.createTile = function () {\n var mainLayer = this.layersCollection[0];\n var padding = 0;\n if (mainLayer.isBaseLayer && (mainLayer.layerType === 'OSM' || mainLayer.layerType === 'Bing')) {\n removeElement(this.element.id + '_tile_parent');\n var elementRect = this.element.getBoundingClientRect();\n var parentRect = this.element.parentElement.getBoundingClientRect();\n var left = Math.abs(elementRect.left - parentRect.left);\n var top_1 = Math.abs(elementRect.top - parentRect.top);\n var ele = createElement('div', {\n id: this.element.id + '_tile_parent', styles: 'position: absolute; left: ' +\n (this.mapAreaRect.x + left) + 'px; top: ' + (this.mapAreaRect.y + top_1 + padding) + 'px; height: ' +\n (this.mapAreaRect.height) + 'px; width: '\n + (this.mapAreaRect.width) + 'px; overflow: hidden;'\n });\n this.element.appendChild(ele);\n }\n };\n /**\n * To initilize the private varibales of maps.\n */\n Maps.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.mapLayerPanel = new LayerPanel(this);\n };\n Maps.prototype.findBaseAndSubLayers = function () {\n var _this = this;\n var baseIndex = this.baseLayerIndex;\n var mainLayers = [];\n var subLayers = [];\n this.layersCollection = [];\n this.layers.forEach(function (layer) {\n (layer.type === 'Layer') ? mainLayers.push(layer) : subLayers.push(layer);\n });\n for (var i = 0; i < mainLayers.length; i++) {\n var baseLayer = mainLayers[i];\n if (baseLayer.visible && baseIndex === i) {\n baseLayer.isBaseLayer = true;\n this.isTileMap = (baseLayer.layerType === 'Geometry') ? false : true;\n this.layersCollection.push(baseLayer);\n break;\n }\n else if (i === mainLayers.length - 1) {\n this.layersCollection.push(mainLayers[0]);\n break;\n }\n }\n subLayers.map(function (subLayer, subLayerIndex) {\n if (subLayer.visible) {\n _this.layersCollection.push(subLayer);\n }\n });\n };\n /**\n * @private\n * Render the map border\n */\n Maps.prototype.renderBorder = function () {\n var width = this.border.width;\n var borderElement = this.svgObject.querySelector('#' + this.element.id + '_MapBorder');\n if ((width > 0 || this.background) && isNullOrUndefined(borderElement)) {\n var borderRect = new RectOption(this.element.id + '_MapBorder', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.svgObject.appendChild(this.renderer.drawRectangle(borderRect));\n }\n else {\n borderElement.setAttribute('fill', this.background);\n }\n };\n /**\n * @private\n * Render the title and subtitle\n */\n Maps.prototype.renderTitle = function (title, type, bounds, groupEle) {\n var style = title.textStyle;\n var height;\n var width = Math.abs((this.margin.left + this.margin.right) - this.availableSize.width);\n if (title.text) {\n if (isNullOrUndefined(groupEle)) {\n groupEle = this.renderer.createGroup({ id: this.element.id + '_Title_Group' });\n }\n var trimmedTitle = textTrim(width, title.text, style);\n var elementSize = measureText(trimmedTitle, style);\n var rect = (isNullOrUndefined(bounds)) ? new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height) : bounds;\n var location_1 = findPosition(rect, title.alignment, elementSize, type);\n var options = new TextOption(this.element.id + '_Map_' + type, location_1.x, location_1.y, 'start', trimmedTitle);\n var titleBounds = new Rect(location_1.x, location_1.y, elementSize.width, elementSize.height);\n var element = renderTextElement(options, style, style.color, groupEle);\n element.setAttribute('aria-label', this.description || title.text);\n element.setAttribute('tabindex', (this.tabIndex + (type === 'title' ? 1 : 2)).toString());\n if ((type === 'title' && !title.subtitleSettings.text) || (type === 'subtitle')) {\n height = Math.abs((titleBounds.y + this.margin.bottom) - this.availableSize.height);\n this.mapAreaRect = new Rect(this.margin.left, titleBounds.y + 10, width, height - 10);\n }\n if (type !== 'subtitle' && title.subtitleSettings.text) {\n this.renderTitle(title.subtitleSettings, 'subtitle', titleBounds, groupEle);\n }\n else {\n this.svgObject.appendChild(groupEle);\n }\n }\n else {\n height = Math.abs((this.margin.top + this.margin.bottom) - this.availableSize.height);\n this.mapAreaRect = new Rect(this.margin.left, this.margin.top, width, height);\n }\n };\n /**\n * To create svg element for maps\n */\n Maps.prototype.createSVG = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the SVG\n */\n Maps.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n removeElement(this.element.id + '_tile_parent');\n if (document.getElementsByClassName('e-tooltip-wrap')[0]) {\n remove(document.getElementsByClassName('e-tooltip-wrap')[0]);\n }\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /**\n * To bind event handlers for maps.\n */\n Maps.prototype.wireEVents = function () {\n //let cancelEvent: string = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n EventHandler.add(this.element, 'click', this.mapsOnClick, this);\n // EventHandler.add(this.element, 'contextmenu', this.mapsOnRightClick, this);\n EventHandler.add(this.element, 'dblclick', this.mapsOnDoubleClick, this);\n EventHandler.add(this.element, Browser.touchStartEvent, this.mouseDownOnMap, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMoveOnMap, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEndOnMap, this);\n // EventHandler.add(this.element, cancelEvent, this.mouseLeaveOnMap, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.mapsOnResize.bind(this));\n };\n /**\n * To unbind event handlers from maps.\n */\n Maps.prototype.unWireEVents = function () {\n //let cancelEvent: string = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n EventHandler.remove(this.element, 'click', this.mapsOnClick);\n // EventHandler.remove(this.element, 'contextmenu', this.mapsOnRightClick);\n EventHandler.remove(this.element, 'dblclick', this.mapsOnDoubleClick);\n EventHandler.remove(this.element, Browser.touchStartEvent, this.mouseDownOnMap);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMoveOnMap);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEndOnMap);\n //EventHandler.remove(this.element, cancelEvent, this.mouseLeaveOnMap);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.mapsOnResize);\n };\n /**\n * To handle the click event for the maps.\n */\n /* tslint:disable:no-string-literal */\n Maps.prototype.mapsOnClick = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var eventArgs = {\n cancel: false, name: click, target: targetId, x: e.clientX, y: e.clientY\n };\n this.trigger(click, eventArgs);\n if (targetEle.id.indexOf('ShapeIndex') !== -1) {\n var layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n triggerShapeEvent(targetId, this.layers[layerIndex].selectionSettings, this, shapeSelected);\n }\n if (this.markerModule) {\n this.markerModule.markerClick(e);\n }\n if (this.bubbleModule) {\n this.bubbleModule.bubbleClick(e);\n }\n if (!eventArgs.cancel) {\n this.notify(click, targetEle);\n }\n };\n /**\n *\n */\n Maps.prototype.mouseEndOnMap = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].pageX;\n pageY = touchArg.changedTouches[0].pageY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n if (this.isTouch) {\n this.titleTooltip(e, pageX, pageY, true);\n }\n this.notify(Browser.touchEndEvent, e);\n e.preventDefault();\n return false;\n };\n /**\n *\n */\n Maps.prototype.mouseDownOnMap = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n this.notify(Browser.touchStartEvent, e);\n };\n /**\n * To handle the double click event for the maps.\n */\n Maps.prototype.mapsOnDoubleClick = function (e) {\n this.notify('dblclick', e);\n };\n /**\n *\n */\n /* tslint:disable:no-string-literal */\n Maps.prototype.mouseMoveOnMap = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n var target;\n var touches = null;\n target = (e.type === 'touchmove') ? e.target :\n target = e.target;\n // if (target.id.indexOf('ShapeIndex') !== -1 && !this.highlightSettings.enable) {\n // triggerShapeEvent(target.id, this.highlightSettings, this, shapeHighlight);\n // }\n if (this.markerModule) {\n this.markerModule.markerMove(e);\n }\n if (this.bubbleModule) {\n this.bubbleModule.bubbleMove(e);\n }\n this.onMouseMove(e);\n this.notify(Browser.touchMoveEvent, e);\n };\n Maps.prototype.onMouseMove = function (e) {\n var element = e.target;\n var pageX;\n var pageY;\n var target;\n var touchArg;\n if (!this.isTouch) {\n this.titleTooltip(e, e.pageX, e.pageY);\n }\n return false;\n };\n Maps.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId === (this.element.id + '_Map_title')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.titleSettings.text, this.titleSettings.textStyle.size, x, y, this.element.offsetWidth, this.element.offsetHeight, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n /*\n\n /**\n * To handle the window resize event on maps.\n */\n Maps.prototype.mapsOnResize = function (e) {\n var _this = this;\n var args = {\n name: resize,\n previousSize: this.availableSize,\n currentSize: new Size(0, 0),\n maps: this\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-maps')) {\n this.resizeTo = setTimeout(function () {\n _this.unWireEVents();\n _this.createSVG();\n _this.refreshing = true;\n _this.wireEVents();\n args.currentSize = _this.availableSize;\n _this.trigger(resize, args);\n _this.render();\n }, 500);\n }\n return false;\n };\n Maps.prototype.zoomByPosition = function (centerPosition, zoomFactor) {\n var lattitude = centerPosition.latitude;\n var longitude = centerPosition.longitude;\n var factor = this.mapLayerPanel.calculateFactor(this.layersCollection[0]);\n var position = convertGeoToPoint(lattitude, longitude, factor, this.layersCollection[0], this);\n if (this.zoomModule) {\n this.zoomModule.performZooming(position, zoomFactor, 'ZoomIn');\n }\n };\n /**\n * To add layers to maps\n */\n Maps.prototype.addLayer = function (layer) {\n this.layers.push(new LayerSettings(this.layers[0], 'layers', layer));\n this.refresh();\n };\n /**\n * To remove layers from maps\n */\n Maps.prototype.removeLayer = function (index) {\n this.layers.splice(index, 1);\n this.refresh();\n };\n /**\n * To add marker to layers\n */\n Maps.prototype.addMarker = function (layerIndex, marker) {\n var currentMarker = this.layers[layerIndex].markerSettings;\n currentMarker.push(new MarkerSettings(currentMarker[0], 'markerSettings', marker));\n this.refresh();\n };\n /**\n * Method to set culture for maps\n */\n Maps.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.setLocaleConstants();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * Method to set locale constants\n */\n Maps.prototype.setLocaleConstants = function () {\n // Need to modify after the api confirm\n this.defaultLocalConstants = {\n ZoomIn: 'Zoom In',\n Zoom: 'Zoom',\n ZoomOut: 'Zoom Out',\n Pan: 'Pan',\n Reset: 'Reset',\n };\n };\n /**\n * To destroy maps control.\n */\n Maps.prototype.destroy = function () {\n this.unWireEVents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Get component name\n */\n Maps.prototype.getModuleName = function () {\n return 'maps';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Maps.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Maps.prototype.onPropertyChanged = function (newProp, oldProp) {\n var render = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'background':\n this.renderBorder();\n break;\n case 'height':\n case 'width':\n this.createSVG();\n render = true;\n break;\n }\n }\n if (render) {\n this.render();\n }\n };\n /**\n * To provide the array of modules needed for maps rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Maps.prototype.requiredModules = function () {\n var modules = [];\n var isVisible = this.findVisibleLayers(this.layers);\n var annotationEnable = false;\n this.annotations.map(function (annotation, index) {\n annotationEnable = annotation.content != null;\n });\n if (this.isBubbleVisible()) {\n modules.push({\n member: 'Bubble',\n args: [this]\n });\n }\n if (isVisible.highlight) {\n modules.push({\n member: 'Highlight',\n args: [this]\n });\n }\n if (isVisible.selection) {\n modules.push({\n member: 'Selection',\n args: [this]\n });\n }\n if (this.legendSettings.visible) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.zoomSettings.enable || this.zoomSettings.zoomFactor > this.zoomSettings.minZoom) {\n modules.push({\n member: 'Zoom',\n args: [this]\n });\n }\n if (this.isMarkersVisible()) {\n modules.push({\n member: 'Marker',\n args: [this]\n });\n }\n if (this.isDataLabelVisible()) {\n modules.push({\n member: 'DataLabel',\n args: [this]\n });\n }\n if (this.isNavigationVisible()) {\n modules.push({\n member: 'NavigationLine',\n args: [this]\n });\n }\n if (isVisible.tooltip) {\n modules.push({\n member: 'MapsTooltip',\n args: [this]\n });\n }\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n return modules;\n };\n /**\n * To find marker visibility\n */\n Maps.prototype.isMarkersVisible = function () {\n var isVisible = false;\n this.layers.forEach(function (layer, layerIndex) {\n for (var i = 0; i < layer.markerSettings.length; i++) {\n if (layer.markerSettings[i].visible) {\n isVisible = true;\n break;\n }\n }\n });\n return isVisible;\n };\n /**\n * To find DataLabel visibility\n */\n Maps.prototype.isDataLabelVisible = function () {\n var isVisible = false;\n for (var i = 0; i < this.layers.length; i++) {\n if (this.layers[i].dataLabelSettings.visible) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * To find navigation line visibility\n */\n Maps.prototype.isNavigationVisible = function () {\n var isVisible = false;\n this.layers.forEach(function (layer, layerIndex) {\n for (var i = 0; i < layer.navigationLineSettings.length; i++) {\n if (layer.navigationLineSettings[i].visible) {\n isVisible = true;\n break;\n }\n }\n });\n return isVisible;\n };\n /**\n * To find marker visibility\n */\n Maps.prototype.isBubbleVisible = function () {\n var isVisible = false;\n for (var _i = 0, _a = this.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n if (this.getBubbleVisible(layer)) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * To find the bubble visibility from layer\n * @private\n */\n Maps.prototype.getBubbleVisible = function (layer) {\n var isVisible = false;\n for (var _i = 0, _a = layer.bubbleSettings; _i < _a.length; _i++) {\n var bubble = _a[_i];\n if (bubble.visible) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * Handles the print method for chart control.\n */\n Maps.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n Maps.prototype.export = function (type, fileName, orientation) {\n var exportMap = new ExportUtils(this);\n exportMap.export(type, fileName, orientation);\n };\n /**\n * To find visibility of layers and markers for required modules load.\n */\n Maps.prototype.findVisibleLayers = function (layers, isLayerVisible, isBubblevisible, istooltipVisible, isSelection, isHighlight) {\n if (isLayerVisible === void 0) { isLayerVisible = false; }\n if (isBubblevisible === void 0) { isBubblevisible = false; }\n if (istooltipVisible === void 0) { istooltipVisible = false; }\n if (isSelection === void 0) { isSelection = false; }\n if (isHighlight === void 0) { isHighlight = false; }\n var bubbles;\n var markers;\n var navigationLine;\n for (var _i = 0, layers_2 = layers; _i < layers_2.length; _i++) {\n var layer = layers_2[_i];\n isLayerVisible = layer.visible || isLayerVisible;\n if (layer.visible) {\n bubbles = layer.bubbleSettings;\n markers = layer.markerSettings;\n navigationLine = layer.navigationLineSettings;\n for (var _a = 0, navigationLine_1 = navigationLine; _a < navigationLine_1.length; _a++) {\n var navigation = navigationLine_1[_a];\n if (navigation.visible) {\n isSelection = navigation.highlightSettings.enable || isSelection;\n isHighlight = navigation.selectionSettings.enable || isHighlight;\n }\n }\n for (var _b = 0, markers_1 = markers; _b < markers_1.length; _b++) {\n var marker = markers_1[_b];\n if (marker.visible) {\n istooltipVisible = marker.tooltipSettings.visible || istooltipVisible;\n isSelection = marker.selectionSettings.enable || isSelection;\n isHighlight = marker.highlightSettings.enable || isHighlight;\n }\n if (istooltipVisible) {\n break;\n }\n }\n for (var _c = 0, bubbles_1 = bubbles; _c < bubbles_1.length; _c++) {\n var bubble = bubbles_1[_c];\n if (bubble.visible) {\n istooltipVisible = bubble.tooltipSettings.visible || istooltipVisible;\n isSelection = bubble.selectionSettings.enable || isSelection;\n isHighlight = bubble.highlightSettings.enable || isHighlight;\n }\n if (istooltipVisible) {\n break;\n }\n }\n istooltipVisible = layer.tooltipSettings.visible || istooltipVisible;\n isSelection = layer.selectionSettings.enable || isSelection;\n isHighlight = layer.highlightSettings.enable || isHighlight;\n }\n if (isLayerVisible && isBubblevisible && istooltipVisible) {\n break;\n }\n }\n return {\n layer: isLayerVisible, bubble: isBubblevisible, tooltip: istooltipVisible,\n selection: isSelection, highlight: isHighlight\n };\n };\n __decorate([\n Property(null)\n ], Maps.prototype, \"background\", void 0);\n __decorate([\n Property(false)\n ], Maps.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"height\", void 0);\n __decorate([\n Complex({}, TitleSettings)\n ], Maps.prototype, \"titleSettings\", void 0);\n __decorate([\n Complex({}, ZoomSettings)\n ], Maps.prototype, \"zoomSettings\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], Maps.prototype, \"legendSettings\", void 0);\n __decorate([\n Collection([], LayerSettings)\n ], Maps.prototype, \"layers\", void 0);\n __decorate([\n Collection([], Annotation)\n ], Maps.prototype, \"annotations\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Maps.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Maps.prototype, \"border\", void 0);\n __decorate([\n Property('Material')\n ], Maps.prototype, \"theme\", void 0);\n __decorate([\n Property('Mercator')\n ], Maps.prototype, \"projectionType\", void 0);\n __decorate([\n Property(0)\n ], Maps.prototype, \"baseLayerIndex\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], Maps.prototype, \"tabIndex\", void 0);\n __decorate([\n Property({ latitude: null, longitude: null })\n ], Maps.prototype, \"centerPosition\", void 0);\n __decorate([\n Complex({}, MapsAreaSettings)\n ], Maps.prototype, \"mapsArea\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"doubleClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"rightClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"resize\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeSelected\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"itemSelection\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"itemHighlight\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeHighlight\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"layerRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerMouseMove\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"dataLabelRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleMouseMove\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"annotationRendering\", void 0);\n Maps = __decorate([\n NotifyPropertyChanges\n ], Maps);\n return Maps;\n}(Component));\nexport { Maps };\n","import { ColorMapping, bubbleRendering } from '../index';\nimport { bubbleClick, bubbleMouseMove } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CircleOption, MapLocation, findMidPointOfPolygon, Point, drawCircle, elementAnimate, getTranslate } from '../utils/helper';\nimport { RectOption, Rect, drawRectangle } from '../utils/helper';\n/**\n * Bubble module class\n */\nvar Bubble = /** @class */ (function () {\n function Bubble(maps) {\n /**\n * Bubble Id for current layer\n */\n this.id = '';\n this.maps = maps;\n this.bubbleCollection = [];\n }\n /**\n * To render bubble\n */\n /* tslint:disable:no-string-literal */\n Bubble.prototype.renderBubble = function (bubbleSettings, shapeData, color, range, bubbleIndex, dataIndex, layerIndex, layer, group) {\n var layerData = layer.layerData;\n var colorValuePath = bubbleSettings.colorValuePath;\n var equalValue = shapeData[colorValuePath];\n var colorValue = Number(shapeData[colorValuePath]);\n var bubbleValue = Number(shapeData[bubbleSettings.valuePath]);\n if (isNaN(bubbleValue) && isNaN(colorValue) && isNullOrUndefined(equalValue)) {\n return null;\n }\n var radius = this.getRatioOfBubble(bubbleSettings.minRadius, bubbleSettings.maxRadius, bubbleValue, range.min, range.max);\n var colorMapping = new ColorMapping(this.maps);\n var shapeColor = colorMapping.getColorByValue(bubbleSettings.colorMapping, colorValue, equalValue);\n shapeColor = shapeColor ? shapeColor : color;\n var shapePoints = [[]];\n var midIndex = 0;\n var pointsLength = 0;\n var currentLength = 0;\n for (var i = 0, len = layerData.length; i < len; i++) {\n var shape = layerData[i];\n shape = shape['property'];\n if (shapeData[layer.shapeDataPath] === shape[layer.shapePropertyPath]) {\n if (!layerData[i]['_isMultiPolygon']) {\n shapePoints.push(this.getPoints(layerData[i], []));\n currentLength = shapePoints[shapePoints.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoints.length - 1;\n }\n }\n else {\n var layer_1 = layerData[i];\n for (var j = 0; j < layer_1.length; j++) {\n shapePoints.push(this.getPoints(layer_1[j], []));\n currentLength = shapePoints[shapePoints.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoints.length - 1;\n }\n }\n }\n }\n }\n var center = findMidPointOfPolygon(shapePoints[midIndex]);\n if (!isNullOrUndefined(center)) {\n var centerY = this.maps.projectionType === 'Mercator' ? center['y'] : (-center['y']);\n var eventArgs = {\n cancel: false, name: bubbleRendering, border: bubbleSettings.border,\n cx: center['x'], cy: centerY, data: shapeData, fill: shapeColor, maps: this.maps,\n radius: radius\n };\n this.maps.trigger(bubbleRendering, eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var bubbleElement = void 0;\n if (bubbleSettings.bubbleType === 'Circle') {\n var circle = new CircleOption(this.id, eventArgs.fill, eventArgs.border, bubbleSettings.opacity, 0, 0, eventArgs.radius, null);\n bubbleElement = drawCircle(this.maps, circle, group);\n }\n else {\n var y = this.maps.projectionType === 'Mercator' ? (eventArgs.cy - radius) : (eventArgs.cy + radius);\n var rectangle = new RectOption(this.id, eventArgs.fill, eventArgs.border, bubbleSettings.opacity, new Rect(0, 0, radius * 2, radius * 2), 2, 2);\n eventArgs.cx -= radius;\n eventArgs.cy = y;\n bubbleElement = drawRectangle(this.maps, rectangle, group);\n }\n this.bubbleCollection.push({\n LayerIndex: layerIndex,\n BubbleIndex: bubbleIndex,\n DataIndex: dataIndex,\n element: bubbleElement,\n center: { x: eventArgs.cx, y: eventArgs.cy }\n });\n var animate = layer.animationDuration !== 0 || isNullOrUndefined(this.maps.zoomModule);\n var translate = getTranslate(this.maps, layer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n var position = new MapLocation((this.maps.isTileMap ? (eventArgs.cx) : ((eventArgs.cx + transPoint.x) * scale)), (this.maps.isTileMap ? (eventArgs.cy) : ((eventArgs.cy + transPoint.y) * scale)));\n bubbleElement.setAttribute('transform', 'translate( ' + (position.x) + ' ' + (position.y) + ' )');\n var bubble = (bubbleSettings.dataSource.length - 1) === dataIndex ? 'bubble' : null;\n if (bubbleSettings.bubbleType === 'Square') {\n position.x += radius;\n position.y += radius * (this.maps.projectionType === 'Mercator' ? 1 : -1);\n }\n else {\n radius = 0;\n }\n if (bubbleSettings.animationDuration > 0) {\n elementAnimate(bubbleElement, bubbleSettings.animationDelay, bubbleSettings.animationDuration, position, this.maps, bubble, radius);\n }\n }\n };\n Bubble.prototype.getPoints = function (shape, points) {\n shape.map(function (current, index) {\n points.push(new Point(current['point']['x'], current['point']['y']));\n });\n return points;\n };\n Bubble.prototype.getRatioOfBubble = function (min, max, value, minValue, maxValue) {\n var percent = (100 / (maxValue - minValue)) * (value - minValue);\n var bubbleRadius = (((max - min) / 100) * percent) + min;\n if (maxValue === minValue) {\n bubbleRadius = (((max - min) / 100)) + min;\n }\n return bubbleRadius;\n };\n /**\n * To check and trigger bubble click event\n */\n Bubble.prototype.bubbleClick = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var data = this.getbubble(target);\n if (isNullOrUndefined(data)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: bubbleClick, data: data, maps: this.maps,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(bubbleClick, eventArgs);\n };\n /**\n * To get bubble from target id\n */\n Bubble.prototype.getbubble = function (target) {\n var id = target.split('_LayerIndex_');\n var index = parseInt(id[1].split('_')[0], 10);\n var layer = this.maps.layers[index];\n var data;\n if (target.indexOf('_BubbleIndex_') > -1) {\n var bubbleIndex = parseInt(id[1].split('_BubbleIndex_')[1], 10);\n if (!isNaN(bubbleIndex)) {\n data = layer.dataSource[bubbleIndex];\n return data;\n }\n }\n return null;\n };\n /**\n * To check and trigger bubble move event\n */\n Bubble.prototype.bubbleMove = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var data = this.getbubble(target);\n if (isNullOrUndefined(data)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: bubbleMouseMove, data: data, maps: this.maps,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(bubbleMouseMove, eventArgs);\n };\n /**\n * Get module name.\n */\n Bubble.prototype.getModuleName = function () {\n return 'Bubble';\n };\n /**\n * To destroy the bubble.\n * @return {void}\n * @private\n */\n Bubble.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return Bubble;\n}());\nexport { Bubble };\n","import { markerRendering, convertTileLatLongToPoint, MapLocation } from '../index';\nimport { markerClick, markerMouseMove } from '../index';\nimport { isNullOrUndefined, merge, createElement } from '@syncfusion/ej2-base';\nimport { CircleOption, PathOption, Point, getTranslate, convertGeoToPoint } from '../utils/helper';\nimport { getTemplateFunction, getElementByID, convertElement, calculateShapes, Size, RectOption, Rect, elementAnimate } from '../utils/helper';\n/**\n * Marker class\n */\nvar Marker = /** @class */ (function () {\n function Marker(maps) {\n this.maps = maps;\n this.trackElements = [];\n }\n /* tslint:disable:no-string-literal */\n Marker.prototype.markerRender = function (layerElement, layerIndex, factor) {\n var _this = this;\n var templateFn;\n var currentLayer = this.maps.layersCollection[layerIndex];\n this.markerSVGObject = this.maps.renderer.createGroup({ id: this.maps.element.id + '_Markers_Group',\n style: 'pointer-events: auto;' });\n var markerTemplateEle = createElement('div', {\n id: this.maps.element.id + '_LayerIndex_' + layerIndex + '_Markers_Template_Group',\n className: 'template',\n styles: 'overflow: hidden; position: absolute;pointer-events: none;' +\n 'top:' + (this.maps.isTileMap ? 0 : this.maps.mapAreaRect.y) + 'px;' +\n 'left:' + (this.maps.isTileMap ? 0 : this.maps.mapAreaRect.x) + 'px;' +\n 'height:' + this.maps.mapAreaRect.height + 'px;' +\n 'width:' + this.maps.mapAreaRect.width + 'px;'\n });\n currentLayer.markerSettings.map(function (markerSettings, markerIndex) {\n var markerData = markerSettings.dataSource;\n markerData.forEach(function (data, dataIndex) {\n var eventArgs = {\n cancel: false, name: markerRendering, fill: markerSettings.fill, height: markerSettings.height,\n width: markerSettings.width, imageUrl: markerSettings.imageUrl, shape: markerSettings.shape,\n template: markerSettings.template, data: data, maps: _this.maps, marker: markerSettings,\n border: markerSettings.border\n };\n _this.maps.trigger(markerRendering, eventArgs);\n var lng = data['longitude'];\n var lat = data['latitude'];\n var offset = markerSettings.offset;\n if (!eventArgs.cancel && markerSettings.visible && !isNullOrUndefined(lng) && !isNullOrUndefined(lat)) {\n var markerID = _this.maps.element.id + '_LayerIndex_' + layerIndex + '_MarkerIndex_'\n + markerIndex + '_DataIndex_' + dataIndex;\n var location_1 = (_this.maps.isTileMap) ? convertTileLatLongToPoint(new MapLocation(lng, lat), factor, _this.maps.tileTranslatePoint, true) : convertGeoToPoint(lat, lng, factor, currentLayer, _this.maps);\n var animate = currentLayer.animationDuration !== 0 || isNullOrUndefined(_this.maps.zoomModule);\n var translate = (_this.maps.isTileMap) ? new Object() : getTranslate(_this.maps, currentLayer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n if (eventArgs.template) {\n templateFn = getTemplateFunction(eventArgs.template);\n if (templateFn && templateFn(_this.maps).length) {\n var templateElement = templateFn(_this.maps);\n var markerElement = convertElement(templateElement, markerID, data, markerIndex, _this.maps);\n for (var i = 0; i < markerElement.children.length; i++) {\n markerElement.children[i].style.pointerEvents = 'none';\n }\n markerElement.style.left = ((_this.maps.isTileMap ? location_1.x :\n ((Math.abs(_this.maps.baseMapRectBounds['min']['x'] - location_1.x)) * scale)) + offset.x) + 'px';\n markerElement.style.top = ((_this.maps.isTileMap ? location_1.y :\n ((Math.abs(_this.maps.baseMapRectBounds['min']['y'] - location_1.y)) * scale)) + offset.y) + 'px';\n markerTemplateEle.appendChild(markerElement);\n }\n }\n else {\n var shapeCustom = {\n size: new Size(eventArgs.width, eventArgs.height),\n fill: eventArgs.fill, borderColor: eventArgs.border.color,\n borderWidth: eventArgs.border.width, opacity: markerSettings.opacity,\n dashArray: markerSettings.dashArray\n };\n var ele = _this.drawSymbol(eventArgs.shape, eventArgs.imageUrl, { x: 0, y: 0 }, markerID, shapeCustom);\n var x = (_this.maps.isTileMap ? location_1.x : (location_1.x + transPoint.x) * scale) + offset.x;\n var y = (_this.maps.isTileMap ? location_1.y : (location_1.y + transPoint.y) * scale) + offset.y;\n ele.setAttribute('transform', 'translate( ' + x + ' ' + y + ' )');\n _this.markerSVGObject.appendChild(ele);\n var element = (markerData.length - 1) === dataIndex ? 'marker' : null;\n var markerPoint = new Point(x, y);\n if (markerSettings.animationDuration > 0) {\n elementAnimate(ele, markerSettings.animationDelay, markerSettings.animationDuration, markerPoint, _this.maps, element);\n }\n }\n }\n });\n });\n if (this.markerSVGObject.childElementCount > 0) {\n layerElement.appendChild(this.markerSVGObject);\n }\n if (markerTemplateEle.childElementCount > 0 && getElementByID(this.maps.element.id + '_Secondary_Element')) {\n getElementByID(this.maps.element.id + '_Secondary_Element').appendChild(markerTemplateEle);\n }\n };\n Marker.prototype.drawSymbol = function (shape, imageUrl, location, markerID, shapeCustom) {\n var markerEle;\n var x;\n var y;\n var size = shapeCustom['size'];\n var borderColor = shapeCustom['borderColor'];\n var borderWidth = parseFloat(shapeCustom['borderWidth']);\n var fill = shapeCustom['fill'];\n var dashArray = shapeCustom['dashArray'];\n var border = { color: borderColor, width: borderWidth };\n var opacity = shapeCustom['opacity'];\n var circleOptions;\n var pathOptions;\n var rectOptions;\n pathOptions = new PathOption(markerID, fill, borderWidth, borderColor, opacity, dashArray, '');\n if (shape === 'Circle') {\n var radius = (size.width + size.height) / 4;\n circleOptions = new CircleOption(markerID, fill, border, opacity, location.x, location.y, radius, dashArray);\n markerEle = this.maps.renderer.drawCircle(circleOptions);\n }\n else if (shape === 'Rectangle') {\n x = location.x - (size.width / 2);\n y = location.y - (size.height / 2);\n rectOptions = new RectOption(markerID, fill, border, opacity, new Rect(x, y, size.width, size.height), null, null, '', dashArray);\n markerEle = this.maps.renderer.drawRectangle(rectOptions);\n }\n else if (shape === 'Image') {\n x = location.x - (size.width / 2);\n y = location.y - (size.height / 2);\n merge(pathOptions, { 'href': imageUrl, 'height': size.height, 'width': size.width, x: x, y: y });\n markerEle = this.maps.renderer.drawImage(pathOptions);\n }\n else {\n markerEle = calculateShapes(this.maps, shape, pathOptions, size, location, this.markerSVGObject);\n }\n return markerEle;\n };\n /**\n * To check and trigger marker click event\n */\n Marker.prototype.markerClick = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var options = this.getMarker(target);\n if (isNullOrUndefined(options)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: markerClick, data: options.data, maps: this.maps, marker: options.marker,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(markerClick, eventArgs);\n };\n /**\n * To get marker from target id\n */\n Marker.prototype.getMarker = function (target) {\n var id = target.split('_LayerIndex_');\n var index = parseInt(id[1].split('_')[0], 10);\n var layer = this.maps.layers[index];\n var data;\n var marker;\n if (target.indexOf('_MarkerIndex_') > -1) {\n var markerIndex = parseInt(id[1].split('_MarkerIndex_')[1].split('_')[0], 10);\n var dataIndex = parseInt(id[1].split('_DataIndex_')[1].split('_')[0], 10);\n marker = layer.markerSettings[markerIndex];\n if (!isNaN(markerIndex)) {\n data = marker.dataSource[dataIndex];\n return { marker: marker, data: data };\n }\n }\n return null;\n };\n /**\n * To check and trigger marker move event\n */\n Marker.prototype.markerMove = function (e) {\n var targetId = e.target.id;\n if (targetId.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var options = this.getMarker(targetId);\n if (isNullOrUndefined(options)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: markerMouseMove, data: options.data, maps: this.maps,\n target: targetId, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(markerMouseMove, eventArgs);\n };\n /**\n * Get module name.\n */\n Marker.prototype.getModuleName = function () {\n return 'Marker';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n Marker.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return Marker;\n}());\nexport { Marker };\n","import { findMidPointOfPolygon, Rect, filter, getTemplateFunction, getTranslate, RectOption, convertElementFromLabel, Point, TextOption, renderTextElement, textTrim, measureText, Internalize } from '../utils/helper';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { dataLabelRendering } from '../model/constants';\n/**\n * DataLabel Module used to render the maps datalabel\n */\nvar DataLabel = /** @class */ (function () {\n function DataLabel(maps) {\n this.intersect = [];\n this.value = { rightWidth: 0, leftWidth: 0, heightTop: 0, heightBottom: 0 };\n this.maps = maps;\n this.dataLabelCollections = [];\n }\n //tslint:disable:max-func-body-length\n DataLabel.prototype.getDataLabel = function (dataSource, labelPath, shapeName, shapeDataPath) {\n var text;\n for (var i = 0; i < dataSource.length; i++) {\n var data = dataSource[i];\n if ((data[shapeDataPath]) === shapeName) {\n text = data;\n break;\n }\n }\n return text;\n };\n /**\n * To render label for maps\n * @param layer\n * @param layerIndex\n * @param shape\n * @param layerData\n * @param group\n * @param labelTemplateElement\n * @param index\n */\n DataLabel.prototype.renderLabel = function (layer, layerIndex, shape, layerData, group, labelTemplateElement, index) {\n var dataLabel = layer.dataLabelSettings;\n var style = layer.dataLabelSettings.textStyle;\n var markerEle;\n var templateFn;\n var options;\n var dataLabelSettings = layer.dataLabelSettings;\n var labelpath = layer.dataLabelSettings.labelPath;\n var shapePoint = [[]];\n var midIndex = 0;\n var pointsLength = 0;\n var shapeData = shape;\n var element;\n var data;\n var text = '';\n var datasrcObj;\n var currentLength = 0;\n var location;\n var labelId = this.maps.element.id + '_LayerIndex_' + layerIndex + '_shapeIndex_' + index + '_LabelIndex_' + index;\n var textLocation = new Point(0, 0);\n /* tslint:disable:no-string-literal */\n for (var i = 0, len = layerData.length; i < len; i++) {\n var shapes = layerData[i];\n shape = shapes['property'];\n if (!isNullOrUndefined(shapes['property']) &&\n (shapeData['properties'][layer.shapePropertyPath] === shape[layer.shapePropertyPath])) {\n if (!layerData[i]['_isMultiPolygon']) {\n shapePoint.push(this.getPoint(layerData[i], []));\n currentLength = shapePoint[shapePoint.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoint.length - 1;\n }\n }\n else {\n var layer_1 = layerData[i];\n for (var j = 0; j < layer_1.length; j++) {\n shapePoint.push(this.getPoint(layer_1[j], []));\n currentLength = shapePoint[shapePoint.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoint.length - 1;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(layer.dataSource) && layer.dataSource.length > 0) {\n var localData = extend([], layer.dataSource, null, true);\n datasrcObj = this.getDataLabel(localData, labelpath, shapeData['properties'][layer.shapePropertyPath], layer.shapeDataPath);\n if (isNullOrUndefined(datasrcObj) || isNullOrUndefined(datasrcObj[labelpath])) {\n text = undefined;\n }\n else {\n datasrcObj[labelpath] = datasrcObj[labelpath];\n text = datasrcObj[labelpath].toString();\n }\n }\n else {\n text = shapeData['properties'][labelpath] ? shapeData['properties'][labelpath].toString() : undefined;\n }\n location = findMidPointOfPolygon(shapePoint[midIndex]);\n if (!isNullOrUndefined(text) && !isNullOrUndefined(location)) {\n location['y'] = (this.maps.projectionType === 'Mercator') ? location['y'] : (-location['y']);\n data = location;\n if (!isNullOrUndefined(this.maps.format) && !isNaN(parseFloat(text))) {\n text = Internalize(this.maps, parseFloat(text));\n if (!isNullOrUndefined(datasrcObj)) {\n datasrcObj[labelpath] = text;\n }\n }\n var eventargs = {\n name: dataLabelRendering, maps: this.maps, cancel: false, border: dataLabel.border, datalabel: dataLabel,\n fill: dataLabel.fill, template: dataLabel.template, text: text\n };\n this.maps.trigger(dataLabelRendering, eventargs);\n var border = { color: 'yellow' };\n var position = [];\n var width = location['rightMax']['x'] - location['leftMax']['x'];\n var textSize = measureText(text, style);\n var trimmedLable = textTrim(width, text, style);\n var elementSize = measureText(trimmedLable, style);\n var startY = location['y'] - textSize['height'] / 4;\n var endY = location['y'] + textSize['height'] / 4;\n var start = location['y'] - textSize['height'] / 4;\n var end = location['y'] + textSize['height'] / 4;\n position = filter(shapePoint[midIndex], startY, endY);\n if (position.length > 5 && (!isNullOrUndefined(shapeData['geometry']) ? shapeData['geometry']['type'] !== 'MultiPolygon' :\n shapeData['type'] !== 'MultiPolygon')) {\n var location1 = findMidPointOfPolygon(position);\n location['x'] = location1['x'];\n width = location1['rightMax']['x'] - location1['leftMax']['x'];\n }\n var xpositionEnds = location['x'] + textSize['width'] / 2;\n var xpositionStart = location['x'] - textSize['width'] / 2;\n trimmedLable = textTrim(width, text, style);\n elementSize = measureText(trimmedLable, style);\n this.value[index] = { rightWidth: xpositionEnds, leftWidth: xpositionStart, heightTop: start, heightBottom: end };\n var animate = layer.animationDuration !== 0 || isNullOrUndefined(this.maps.zoomModule);\n var translate = getTranslate(this.maps, layer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n var labelElement = void 0;\n if (eventargs.template !== '') {\n templateFn = getTemplateFunction(eventargs.template);\n var templateElement = templateFn(this.maps);\n labelElement = convertElementFromLabel(templateElement, labelId, !isNullOrUndefined(datasrcObj) ? datasrcObj : shapeData['properties'], index, this.maps);\n labelElement.style.left = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location['x'])) * scale) + 'px';\n labelElement.style.top = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location['y'])) * scale) + 'px';\n labelTemplateElement.appendChild(labelElement);\n var labelWidth = labelElement.offsetWidth;\n var labelHeight = labelElement.offsetHeight;\n // if (labelWidth > width || labelWidth === 0 || labelHeight > location['height']) {\n // labelElement.style.display = 'None';\n // }\n }\n else {\n if (dataLabelSettings.smartLabelMode === 'Trim') {\n options = new TextOption(labelId, textLocation.x, textLocation.y, 'middle', trimmedLable, '', '');\n }\n if (dataLabelSettings.smartLabelMode === 'None') {\n options = new TextOption(labelId, (textLocation.x), textLocation.y, 'middle', text, '', '');\n }\n if (dataLabelSettings.smartLabelMode === 'Hide') {\n text = (width >= textSize['width']) ? text : '';\n options = new TextOption(labelId, (textLocation.x), (textLocation.y), 'middle', text, '', '');\n }\n text = options['text'];\n if (dataLabelSettings.intersectionAction === 'Hide') {\n for (var i = 0; i < this.intersect.length; i++) {\n if (!isNullOrUndefined(this.intersect[i])) {\n if (this.value[index]['leftWidth'] > this.intersect[i]['rightWidth']\n || this.value[index]['rightWidth'] < this.intersect[i]['leftWidth']\n || this.value[index]['heightTop'] > this.intersect[i]['heightBottom']\n || this.value[index]['heightBottom'] < this.intersect[i]['heightTop']) {\n text = text;\n }\n else {\n text = '';\n break;\n }\n }\n }\n this.intersect.push(this.value[index]);\n options = new TextOption(labelId, textLocation.x, textLocation.y, 'middle', text, '', '');\n }\n var difference = void 0;\n if (dataLabelSettings.intersectionAction === 'Trim') {\n for (var j = 0; j < this.intersect.length; j++) {\n if (!isNullOrUndefined(this.intersect[j])) {\n if (this.intersect[j]['rightWidth'] < this.value[index]['leftWidth']\n || this.intersect[j]['leftWidth'] > this.value[index]['rightWidth']\n || this.intersect[j]['heightBottom'] < this.value[index]['heightTop']\n || this.intersect[j]['heightTop'] > this.value[index]['heightBottom']) {\n trimmedLable = text;\n difference = 0;\n }\n else {\n if (this.value[index]['leftWidth'] > this.intersect[j]['leftWidth']) {\n width = this.intersect[j]['rightWidth'] - this.value[index]['leftWidth'];\n difference = width - (this.value[index]['rightWidth'] - this.value[index]['leftWidth']);\n trimmedLable = textTrim(difference, text, style);\n break;\n }\n if (this.value[index]['leftWidth'] < this.intersect[j]['leftWidth']) {\n width = this.value[index]['rightWidth'] - this.intersect[j]['leftWidth'];\n difference = Math.abs(width - (this.value[index]['rightWidth'] - this.value[index]['leftWidth']));\n trimmedLable = textTrim(difference, text, style);\n break;\n }\n }\n }\n }\n this.intersect.push(this.value[index]);\n options = new TextOption(labelId, textLocation.x, (textLocation.y), 'middle', trimmedLable, '', '');\n }\n if (dataLabelSettings.intersectionAction === 'None') {\n options = new TextOption(labelId, (textLocation.x), (textLocation.y), 'middle', text, '', '');\n }\n if (trimmedLable.length > 1) {\n var border_1 = eventargs.border;\n if (border_1['width'] > 1) {\n var fill = eventargs.fill;\n var opacity = dataLabelSettings.opacity;\n var rx = dataLabelSettings.rx;\n var ry = dataLabelSettings.ry;\n var x = location['x'] - textSize['width'] / 2;\n var y = location['y'] - textSize['height'] / 2;\n var rectOptions = new RectOption(this.maps.element.id + '_LayerIndex_' + layerIndex + '_shapeIndex_' + index + '_rectIndex_' + index, fill, border_1, opacity, new Rect(x, y, textSize['width'], textSize['height']), rx, ry);\n var rect = this.maps.renderer.drawRectangle(rectOptions);\n group.appendChild(rect);\n }\n }\n element = renderTextElement(options, style, style.color, group);\n element.setAttribute('transform', 'translate( ' + ((location['x'] + transPoint.x) * scale) + ' '\n + (((location['y'] + transPoint.y) * scale) + (elementSize.height / 4)) + ' )');\n group.appendChild(element);\n }\n this.dataLabelCollections.push({\n location: { x: location['x'], y: (location['y'] + elementSize.height / 4) },\n element: isNullOrUndefined(labelElement) ? element : labelElement,\n layerIndex: layerIndex,\n shapeIndex: index,\n labelIndex: index\n });\n if (labelTemplateElement.childElementCount > 0 && !this.maps.element.contains(labelTemplateElement)) {\n document.getElementById(this.maps.element.id + '_Secondary_Element').appendChild(labelTemplateElement);\n }\n }\n };\n DataLabel.prototype.getPoint = function (shapes, points) {\n shapes.map(function (current, index) {\n points.push(new Point(current['point']['x'], current['point']['y']));\n });\n return points;\n };\n /**\n * Get module name.\n */\n DataLabel.prototype.getModuleName = function () {\n return 'DataLabel';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n DataLabel.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { convertTileLatLongToPoint } from '../index';\nimport { convertGeoToPoint, Point, PathOption } from '../utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * navigation-selected-line\n */\nvar NavigationLine = /** @class */ (function () {\n function NavigationLine(maps) {\n this.maps = maps;\n }\n /* tslint:disable:no-string-literal */\n //tslint:disable:max-func-body-length\n /**\n * To render navigation line for maps\n */\n NavigationLine.prototype.renderNavigation = function (layer, factor, layerIndex) {\n var navigationEle;\n var navigation;\n navigation = layer.navigationLineSettings;\n var longitude;\n var point = [];\n var latitude;\n var visible;\n var angle;\n var width;\n var color;\n var dashArray;\n var pathOption;\n var direction;\n var markerWidth;\n var arcId;\n var radius;\n var showArrow;\n var arrowColor;\n var arrowSize;\n var arrowSettings;\n var arrowPosition;\n var startArrow;\n var endArrow;\n var offSet;\n var offSetValue;\n var navigationGroup;\n var d;\n var group = (this.maps.renderer.createGroup({\n id: this.maps.element.id + '_layerIndex_' + layerIndex + '_line_Group'\n }));\n for (var i = 0; i < navigation.length; i++) {\n latitude = navigation[i]['properties']['latitude'];\n longitude = navigation[i]['properties']['longitude'];\n visible = navigation[i]['properties']['visible'];\n angle = navigation[i]['properties']['angle'];\n width = navigation[i]['width'] || 1;\n color = navigation[i]['color'];\n dashArray = navigation[i]['properties']['dashArray'];\n arrowSettings = navigation[i]['properties']['arrowSettings'];\n showArrow = (isNullOrUndefined(arrowSettings)) ? false : arrowSettings['properties']['showArrow'];\n if (longitude['length'] === latitude['length'] && visible) {\n for (var i_1 = 0; i_1 < longitude['length']; i_1++) {\n var location_1 = (this.maps.isTileMap) ? convertTileLatLongToPoint(new Point(longitude[i_1], latitude[i_1]), factor, this.maps.tileTranslatePoint, true) : convertGeoToPoint(latitude[i_1], longitude[i_1], factor, layer, this.maps);\n point.push(location_1);\n }\n }\n navigationGroup = (this.maps.renderer.createGroup({\n id: this.maps.element.id + '_layerIndex_' + layerIndex + '_NavigationGroup' + i + ''\n }));\n for (var j = 0; j < point['length'] - 1; j++) {\n angle = (-1 > angle) ? -1 : angle;\n angle = (1 < angle) ? 1 : angle;\n var arcId_1 = this.maps.element.id + '_LayerIndex_' + layerIndex + '_NavigationIndex_' + i + '_Line' + j + '';\n var radius_1 = this.convertRadius(point[j], point[j + 1]);\n if (angle <= 1 && angle > 0) {\n direction = 0;\n if (point[j]['x'] > point[j + 1]['x']) {\n direction = 1;\n }\n }\n if (angle >= -1 && angle < 0) {\n direction = 1;\n if (point[j]['x'] > point[j + 1]['x']) {\n direction = 0;\n }\n }\n if (point[j]['x'] !== point[j + 1]['x']) {\n if (showArrow) {\n arrowColor = arrowSettings['properties']['color'];\n arrowSize = arrowSettings['properties']['size'];\n offSetValue = (arrowSettings['properties']['offSet'] === undefined) ? 0 : arrowSettings['properties']['offSet'];\n var divide = (Math.round(arrowSize / 2));\n arrowPosition = arrowSettings['properties']['position'];\n startArrow = (arrowPosition === 'Start') ? 'url(#triangle' + i + ')' : null;\n endArrow = (arrowPosition === 'End') ? 'url(#triangle' + i + ')' : null;\n if (offSet !== 0 && angle === 0) {\n offSet = (arrowPosition === 'Start') ? offSetValue : -(offSetValue);\n }\n offSet = (isNullOrUndefined(offSet)) ? 0 : offSet;\n var triId = this.maps.element.id + '_triangle';\n var defElement = this.maps.renderer.createDefs();\n var xmlns = 'http://www.w3.org/2000/svg';\n var markerEle = document.createElementNS(xmlns, 'marker');\n markerEle.setAttribute('id', 'triangle' + i);\n markerEle.setAttribute('markerWidth', (arrowSize.toString()));\n markerEle.setAttribute('markerHeight', (arrowSize.toString()));\n markerEle.setAttribute('refX', (divide - offSet).toString());\n markerEle.setAttribute('refY', divide.toString());\n markerEle.setAttribute('orient', 'auto');\n var d2 = 'M 0,0 L 0,' + arrowSize + ' L ' + divide + ', ' + divide + ' Z';\n pathOption = new PathOption(triId, arrowColor, width, color, 1, dashArray, d2);\n navigationEle = this.maps.renderer.drawPath(pathOption);\n markerEle.appendChild(navigationEle);\n defElement.appendChild(markerEle);\n navigationGroup.appendChild(defElement);\n }\n d = (angle === 0) ? 'M ' + point[j]['x'] + ',' + point[j]['y'] + 'L ' + point[j + 1]['x']\n + ',' + point[j + 1]['y'] + '' :\n 'M ' + point[j]['x'] + ',' + point[j]['y'] + ' A ' + (angle * radius_1) + ' ' +\n (angle * radius_1) + ' ' + 0 + ',' + 0 + ',' + direction + ' , ' + point[j + 1]['x'] + ',' + point[j + 1]['y'] + ' ';\n pathOption = new PathOption(arcId_1, 'none', 2, color, 1, dashArray, d);\n navigationEle = this.maps.renderer.drawPath(pathOption);\n if (!isNullOrUndefined(arrowPosition)) {\n (arrowPosition === 'Start') ? navigationEle.setAttribute('marker-start', startArrow)\n : navigationEle.setAttribute('marker-end', endArrow);\n }\n navigationGroup.appendChild(navigationEle);\n group.appendChild(navigationGroup);\n }\n }\n point = [];\n }\n return group;\n };\n NavigationLine.prototype.convertRadius = function (point1, point2) {\n var value1 = point2['x'] - point1['x'];\n var value2 = point2['y'] - point1['y'];\n var value = Math.sqrt((Math.pow(value1, 2) + Math.pow(value2, 2)));\n return value;\n };\n /**\n * Get module name.\n */\n NavigationLine.prototype.getModuleName = function () {\n return 'NavigationLine';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n NavigationLine.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return NavigationLine;\n}());\nexport { NavigationLine };\n","import { legendRendering } from '../index';\nimport { Rect, measureText, PathOption, textTrim, querySelector, getTemplateFunction } from '../utils/helper';\nimport { RectOption, Size, TextOption, Point, renderTextElement, drawSymbol } from '../utils/helper';\nimport { isNullOrUndefined, Browser, EventHandler, remove } from '@syncfusion/ej2-base';\n/**\n * Legend module is used to render legend for the maps\n */\nvar Legend = /** @class */ (function () {\n function Legend(maps) {\n this.legendBorderRect = new Rect(0, 0, 0, 0);\n this.totalPages = [];\n this.page = 0;\n this.currentPage = 0;\n this.interactiveLocation = new Point(0, 0);\n this.legendItemRect = new Rect(0, 0, 0, 0);\n this.heightIncrement = 0;\n this.widthIncrement = 0;\n this.textMaxWidth = 0;\n this.areaRect = new Rect(0, 0, 0, 0);\n this.maps = maps;\n this.addEventListener();\n }\n /**\n * To calculate legend bounds and draw the legend shape and text.\n */\n Legend.prototype.renderLegend = function () {\n this.calculateLegendBounds();\n this.drawLegend();\n };\n /* tslint:disable-next-line:max-func-body-length */\n Legend.prototype.calculateLegendBounds = function () {\n var _this = this;\n var map = this.maps;\n var legend = map.legendSettings;\n this.legendCollection = [];\n var spacing = 10;\n var leftPadding = 10;\n var topPadding = map.mapAreaRect.y;\n this.legendRenderingCollections = [];\n map.layersCollection.forEach(function (layer, layerIndex) {\n if (!isNullOrUndefined(layer.shapeData)) {\n var layerData = layer.shapeData['features'];\n var dataPath = layer.shapeDataPath;\n var propertyPath = layer.shapePropertyPath;\n var dataSource = layer.dataSource;\n var colorValuePath = void 0;\n var colorMapping = void 0;\n if (legend.type === 'Layers' && layer.visible) {\n colorValuePath = layer.shapeSettings.colorValuePath;\n colorMapping = layer.shapeSettings.colorMapping;\n _this.getLegends(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n }\n else if (legend.type === 'Bubbles') {\n for (var _i = 0, _a = layer.bubbleSettings; _i < _a.length; _i++) {\n var bubble = _a[_i];\n if (bubble.visible) {\n colorValuePath = bubble.colorValuePath;\n colorMapping = bubble.colorMapping;\n dataSource = bubble.dataSource;\n _this.getLegends(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n }\n }\n }\n else {\n _this.getMarkersLegendCollections(layerIndex, layer.markerSettings);\n }\n }\n });\n var defaultSize = 25;\n var legendTitle = map.legendSettings.title.text;\n var titleTextStyle = map.legendSettings.titleStyle;\n if (this.legendCollection.length > 0) {\n var legendMode = legend.mode;\n var shapeX = 0;\n var shapeY = 0;\n var textX = 0;\n var textY = 0;\n var shapePadding = legend.shapePadding;\n var textPadding = 10;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapeLocation = [];\n var textLocation = [];\n var legendRectCollection = [];\n var location_1;\n var position = legend.position;\n var labelAction = legend.labelDisplayMode;\n var arrangement = (legend.orientation === 'None') ? ((position === 'Top' || position === 'Bottom')\n ? 'Horizontal' : 'Vertical') : legend.orientation;\n var legendWidth = (legend.width.length > 1) ? (legend.width.indexOf('%') > -1) ? (map.availableSize.width / 100)\n * parseInt(legend.width, 10) : parseInt(legend.width, 10) : null;\n var legendHeight = (legend.height.length > 1) ? (legend.height.indexOf('%') > -1) ? (map.availableSize.height / 100) *\n parseInt(legend.height, 10) : parseInt(legend.height, 10) : null;\n var legendItemStartX_1;\n var legendItemStartY_1;\n var startX = 0;\n var startY = 0;\n var legendtitleSize = measureText(legendTitle, titleTextStyle);\n if (legendMode === 'Interactive') {\n var itemTextStyle = legend.textStyle;\n var rectWidth = void 0;\n var rectHeight = void 0;\n var legendLength = this.legendCollection.length;\n rectWidth = (arrangement === 'Horizontal') ? (isNullOrUndefined(legendWidth)) ? (map.mapAreaRect.width / legendLength) :\n (legendWidth / legendLength) : (isNullOrUndefined(legendWidth)) ? defaultSize : legendWidth;\n rectHeight = (arrangement === 'Horizontal') ? (isNullOrUndefined(legendHeight)) ? defaultSize : legendHeight :\n (isNullOrUndefined(legendHeight)) ? (map.mapAreaRect.height / legendLength) : (legendHeight / legendLength);\n startX = 0;\n startY = legendtitleSize.height + spacing;\n var position_1 = legend.labelPosition;\n var textX_1 = 0;\n var textY_1 = 0;\n var textPadding_1 = 10;\n var itemStartX = 0;\n var itemStartY = 0;\n var maxTextHeight = 0;\n var maxTextWidth = 0;\n for (var i = 0; i < this.legendCollection.length; i++) {\n startX = (arrangement === 'Horizontal') ? (startX + rectWidth) : startX;\n startY = (arrangement === 'Horizontal') ? startY : (startY + rectHeight);\n var legendText = this.legendCollection[i]['text'];\n var itemTextSize = new Size(0, 0);\n if (labelAction === 'None') {\n itemTextSize = measureText(legendText, itemTextStyle);\n }\n else if (labelAction === 'Trim') {\n legendText = textTrim((arrangement === 'Horizontal' ? rectWidth : rectHeight), legendText, itemTextStyle);\n itemTextSize = measureText(legendText, itemTextStyle);\n }\n else {\n legendText = '';\n }\n maxTextHeight = Math.max(maxTextHeight, itemTextSize.height);\n maxTextWidth = Math.max(maxTextWidth, itemTextSize.width);\n if (itemTextSize.width > 0 && itemTextSize.height > 0) {\n if (arrangement === 'Horizontal') {\n textX_1 = startX + (rectWidth / 2);\n textY_1 = (position_1 === 'After') ? (startY + rectHeight + (itemTextSize.height / 2)) + textPadding_1 :\n (startY - textPadding_1);\n }\n else {\n textX_1 = (position_1 === 'After') ? startX - (itemTextSize.width / 2) - textPadding_1\n : (startX + rectWidth + itemTextSize.width / 2) + textPadding_1;\n textY_1 = startY + (rectHeight / 2) + (itemTextSize.height / 4);\n }\n }\n if (i === 0) {\n itemStartX = (arrangement === 'Horizontal') ? startX : (position_1 === 'After') ?\n textX_1 - (itemTextSize.width / 2) : startX;\n itemStartY = (arrangement === 'Horizontal') ? (position_1 === 'After') ? startY :\n textY_1 - (itemTextSize.height / 2) : startY;\n }\n else if (i === this.legendCollection.length - 1) {\n legendWidth = (arrangement === 'Horizontal') ? Math.abs((startX + rectWidth) - itemStartX) :\n (rectWidth + maxTextWidth + textPadding_1);\n legendHeight = (arrangement === 'Horizontal') ? (rectHeight + (maxTextHeight / 2) + textPadding_1) :\n Math.abs((startY + rectHeight) - itemStartY);\n }\n this.legendRenderingCollections.push({\n fill: this.legendCollection[i]['fill'], x: startX, y: startY,\n width: rectWidth, height: rectHeight,\n text: legendText, textX: textX_1, textY: textY_1,\n textWidth: itemTextSize.width, textHeight: itemTextSize.height\n });\n }\n this.legendItemRect = { x: itemStartX, y: itemStartY, width: legendWidth, height: legendHeight };\n }\n else {\n legendWidth = (isNullOrUndefined(legendWidth)) ? map.mapAreaRect.width : legendWidth;\n legendHeight = (isNullOrUndefined(legendHeight)) ? map.mapAreaRect.height : legendHeight;\n var j = 0;\n for (var i = 0; i < this.legendCollection.length; i++) {\n var legendItem = this.legendCollection[i];\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n var legendTextSize = measureText(legendItem['text'], legend.textStyle);\n this.textMaxWidth = Math.max(this.textMaxWidth, legendTextSize.width);\n if (i === 0) {\n startX = shapeX = (leftPadding + (shapeWidth / 2));\n startY = shapeY = topPadding + legendtitleSize.height + (shapeHeight > legendTextSize.height ? shapeHeight / 2\n : (legendTextSize.height / 4));\n }\n else {\n var maxSize = (legendTextSize.height > shapeHeight) ? legendTextSize.height : shapeHeight;\n if (arrangement === 'Horizontal') {\n var prvePositionX = (textLocation[j - 1].x + textLocation[j - 1].width) + textPadding + shapeWidth;\n if ((prvePositionX + shapePadding + legendTextSize.width) > legendWidth) {\n var nextPositionY = (textLocation[j - 1].y > (shapeLocation[j - 1].y + (shapeHeight / 2)) ?\n textLocation[j - 1].y : (shapeLocation[j - 1].y + (shapeHeight / 2))) + topPadding;\n if ((nextPositionY + maxSize) > legendHeight) {\n this.getPageChanged();\n j = 0;\n shapeLocation = [];\n textLocation = [];\n legendRectCollection = [];\n shapeX = startX;\n shapeY = startY;\n }\n else {\n shapeX = (shapeLocation[0].x);\n shapeY = (nextPositionY + (maxSize / 2));\n }\n }\n else {\n shapeX = (prvePositionX - (shapeWidth / 2));\n shapeY = (shapeLocation[j - 1]).y;\n }\n }\n else {\n var prevPositionY = textLocation[j - 1].y > shapeLocation[j - 1].y + (shapeHeight / 2) ?\n textLocation[j - 1].y : shapeLocation[j - 1].y + (shapeHeight / 2);\n if ((prevPositionY + topPadding + maxSize) > legendHeight) {\n var nextPositionX = (textLocation[j - 1].x + this.textMaxWidth + textPadding);\n if ((nextPositionX + shapePadding + legendTextSize.width) > legendWidth) {\n shapeX = startX;\n shapeY = startY;\n legendRectCollection = [];\n textLocation = [];\n shapeLocation = [];\n this.getPageChanged();\n j = 0;\n }\n else {\n shapeX = nextPositionX + (shapeWidth / 2);\n shapeY = (shapeLocation[0].y);\n }\n }\n else {\n shapeX = shapeLocation[j - 1].x;\n shapeY = prevPositionY + topPadding + (shapeHeight / 2);\n }\n }\n }\n textX = shapeX + (shapeWidth / 2) + shapePadding;\n textY = shapeY + (legendTextSize.height / 4);\n shapeLocation.push({ x: shapeX, y: shapeY });\n textLocation.push({ x: textX, y: textY, width: legendTextSize.width, height: (legendTextSize.height / 2) });\n this.totalPages[this.page]['Collection'].push({\n DisplayText: legendItem['text'],\n ImageSrc: legendItem['imageSrc'],\n Shape: { x: shapeX, y: shapeY },\n Text: { x: textX, y: textY },\n Fill: legendItem['fill'],\n Rect: {\n x: shapeLocation[j].x - (shapeWidth / 2),\n y: (shapeLocation[j].y - (shapeHeight / 2)) < (textY - legendTextSize.height) ?\n (shapeLocation[j].y - (shapeHeight / 2)) : (textY - legendTextSize.height),\n width: Math.abs((shapeLocation[j].x - (shapeWidth / 2)) - (textX + legendTextSize.width)),\n height: ((shapeHeight > legendTextSize.height) ? shapeHeight : legendTextSize.height)\n }\n });\n j++;\n }\n var collection = this.totalPages[0]['Collection'];\n collection.forEach(function (legendObj, index) {\n var legendRect = new Rect(legendObj['Rect']['x'], legendObj['Rect']['y'], legendObj['Rect']['width'], legendObj['Rect']['height']);\n if (index === 0) {\n legendItemStartX_1 = legendRect.x;\n legendItemStartY_1 = legendRect.y;\n }\n _this.widthIncrement = Math.max(_this.widthIncrement, Math.abs(legendItemStartX_1 - (legendRect.x + legendRect.width)));\n _this.heightIncrement = Math.max(_this.heightIncrement, Math.abs(legendItemStartY_1 - (legendRect.y + legendRect.height)));\n });\n legendWidth = ((this.widthIncrement < legendWidth) ? this.widthIncrement : legendWidth);\n legendHeight = ((this.heightIncrement < legendHeight) ? this.heightIncrement : legendHeight);\n this.legendItemRect = {\n x: collection[0]['Rect']['x'], y: collection[0]['Rect']['y'],\n width: legendWidth, height: legendHeight\n };\n }\n }\n };\n /**\n *\n */\n Legend.prototype.getLegends = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n this.getRangeLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n this.getEqualLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n this.getDataLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n };\n Legend.prototype.getPageChanged = function () {\n this.page++;\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n };\n /**\n * To draw the legend shape and text.\n */\n Legend.prototype.drawLegend = function () {\n var map = this.maps;\n var legend = map.legendSettings;\n var render = map.renderer;\n var textOptions;\n var textFont = legend.textStyle;\n this.legendGroup = render.createGroup({ id: map.element.id + '_Legend_Group' });\n var eventArgs = {\n name: legendRendering, cancel: false, fill: '', shape: legend.shape,\n shapeBorder: legend.shapeBorder\n };\n if (legend.mode === 'Interactive') {\n for (var i = 0; i < this.legendRenderingCollections.length; i++) {\n var itemId = map.element.id + '_Legend_Index_' + i;\n var textId = map.element.id + '_Legend_Index_' + i + '_Text';\n var item = this.legendRenderingCollections[i];\n var bounds = new Rect(item['x'], item['y'], item['width'], item['height']);\n var textLocation = new Point(item['textX'], item['textY']);\n eventArgs.fill = item['fill'];\n map.trigger(legendRendering, eventArgs);\n var rectOptions = new RectOption(itemId, eventArgs.fill, eventArgs.shapeBorder, 1, bounds);\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'middle', item['text'], '', '');\n renderTextElement(textOptions, textFont, textFont.color, this.legendGroup);\n this.legendGroup.appendChild(render.drawRectangle(rectOptions));\n }\n this.renderLegendBorder();\n }\n else {\n this.drawLegendItem(this.currentPage);\n }\n };\n Legend.prototype.drawLegendItem = function (page) {\n var map = this.maps;\n var legend = map.legendSettings;\n var spacing = 10;\n var shapeSize = new Size(legend.shapeWidth, legend.shapeHeight);\n var textOptions;\n var renderOptions;\n var render = map.renderer;\n var shapeBorder = legend.shapeBorder;\n var eventArgs = {\n name: legendRendering, cancel: false, fill: '', shape: legend.shape\n };\n if (page >= 0 && page < this.totalPages.length) {\n if (querySelector(this.legendGroup.id, this.maps.element.id)) {\n remove(querySelector(this.legendGroup.id, this.maps.element.id));\n }\n var strokeColor = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine'\n || legend.shape === 'Cross') ? isNullOrUndefined(legend.fill) ? '#000000' : legend.fill : shapeBorder.color;\n var strokeWidth = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine'\n || legend.shape === 'Cross') ? (shapeBorder.width === 0) ?\n 1 : shapeBorder.width : shapeBorder.width;\n eventArgs.shapeBorder = { width: strokeWidth, color: strokeColor };\n for (var i = 0; i < this.totalPages[page]['Collection'].length; i++) {\n var collection = this.totalPages[page]['Collection'][i];\n var legendElement = render.createGroup({ id: map.element.id + '_Legend_Index_' + i });\n var legendText = collection['DisplayText'];\n eventArgs.fill = collection['Fill'];\n eventArgs.shape = ((legend.type === 'Markers') ? ((isNullOrUndefined(collection['ImageSrc'])) ?\n legend.shape : 'Image') : legend.shape);\n map.trigger(legendRendering, eventArgs);\n var shapeId = map.element.id + '_Legend_Shape_Index_' + i;\n var textId = map.element.id + '_Legend_Text_Index_' + i;\n var shapeLocation = collection['Shape'];\n var textLocation = collection['Text'];\n var imageUrl = ((isNullOrUndefined(collection['ImageSrc'])) ? legend.shape : collection['ImageSrc']);\n var renderOptions_1 = new PathOption(shapeId, eventArgs.fill, eventArgs.shapeBorder.width, eventArgs.shapeBorder.color, 1, '');\n legendElement.appendChild(drawSymbol(shapeLocation, eventArgs.shape, shapeSize, collection['ImageSrc'], renderOptions_1));\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'start', legendText, '', '');\n renderTextElement(textOptions, legend.textStyle, legend.textStyle.color, legendElement);\n this.legendGroup.appendChild(legendElement);\n }\n var pagingGroup = void 0;\n var width = spacing;\n var height = (spacing / 2);\n if (this.page !== 0) {\n var pagingText = (page + 1) + '/' + this.totalPages.length;\n var pagingFont = legend.textStyle;\n var pagingTextSize = measureText(pagingText, pagingFont);\n var leftPageX = (this.legendItemRect.x + this.legendItemRect.width) - pagingTextSize.width -\n (width * 2) - spacing;\n var rightPageX = (this.legendItemRect.x + this.legendItemRect.width);\n var locY = (this.legendItemRect.y + this.legendItemRect.height) + (height / 2) + spacing;\n var pageTextX = rightPageX - width - (pagingTextSize.width / 2) - (spacing / 2);\n pagingGroup = render.createGroup({ id: map.element.id + '_Legend_Paging_Group' });\n var leftPageElement = render.createGroup({ id: map.element.id + '_Legend_Left_Paging_Group' });\n var rightPageElement = render.createGroup({ id: map.element.id + '_Legend_Right_Paging_Group' });\n var rightPath = ' M ' + rightPageX + ' ' + locY + ' L ' + (rightPageX - width) + ' ' + (locY - height) +\n ' L ' + (rightPageX - width) + ' ' + (locY + height) + ' z ';\n var leftPath = ' M ' + leftPageX + ' ' + locY + ' L ' + (leftPageX + width) + ' ' + (locY - height) +\n ' L ' + (leftPageX + width) + ' ' + (locY + height) + ' z ';\n var leftPageOptions = new PathOption(map.element.id + '_Left_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', leftPath);\n leftPageElement.appendChild(render.drawPath(leftPageOptions));\n var leftRectPageOptions = new RectOption(map.element.id + '_Left_Page_Rect', 'transparent', {}, 1, new Rect(leftPageX - (width / 2), (locY - (height * 2)), width * 2, spacing * 2), null, null, '', '');\n leftPageElement.appendChild(render.drawRectangle(leftRectPageOptions));\n this.wireEvents(leftPageElement);\n var rightPageOptions = new PathOption(map.element.id + '_Right_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', rightPath);\n rightPageElement.appendChild(render.drawPath(rightPageOptions));\n var rightRectPageOptions = new RectOption(map.element.id + '_Right_Page_Rect', 'transparent', {}, 1, new Rect((rightPageX - width), (locY - height), width, spacing), null, null, '', '');\n rightPageElement.appendChild(render.drawRectangle(rightRectPageOptions));\n this.wireEvents(rightPageElement);\n pagingGroup.appendChild(leftPageElement);\n pagingGroup.appendChild(rightPageElement);\n var pageTextOptions = {\n 'id': map.element.id + '_Paging_Text',\n 'x': pageTextX,\n 'y': locY + (pagingTextSize.height / 4),\n 'fill': '#a6a6a6',\n 'font-size': '14px',\n 'font-style': pagingFont.fontStyle,\n 'font-family': pagingFont.fontFamily,\n 'font-weight': pagingFont.fontWeight,\n 'text-anchor': 'middle',\n 'transform': '',\n 'opacity': 1,\n 'dominant-baseline': ''\n };\n pagingGroup.appendChild(render.createText(pageTextOptions, pagingText));\n this.legendGroup.appendChild(pagingGroup);\n }\n this.renderLegendBorder();\n }\n };\n Legend.prototype.renderLegendBorder = function () {\n var map = this.maps;\n var legend = map.legendSettings;\n var legendTitle = legend.title.text;\n var textStyle = legend.titleStyle;\n var textOptions;\n var spacing = 10;\n var trimTitle = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);\n var textSize = measureText(trimTitle, textStyle);\n this.legendBorderRect = new Rect((this.legendItemRect.x - spacing), (this.legendItemRect.y - spacing - textSize.height), (this.legendItemRect.width) + (spacing * 2), (this.legendItemRect.height) + (spacing * 2) + textSize.height +\n (legend.mode === 'Interactive' ? 0 : (this.page !== 0) ? spacing : 0));\n if (legendTitle) {\n textOptions = new TextOption(map.element.id + '_LegendTitle', (this.legendItemRect.x) + (this.legendItemRect.width / 2), this.legendItemRect.y - (textSize.height / 2), 'middle', trimTitle, '');\n renderTextElement(textOptions, textStyle, textStyle.color, this.legendGroup);\n }\n var renderOptions = new RectOption(map.element.id + '_Legend_Border', legend.background, legend.border, 1, this.legendBorderRect, null, null, '', '');\n this.legendGroup.appendChild(map.renderer.drawRectangle(renderOptions));\n this.translate = (legend.position !== 'Float') ?\n this.getLegendAlignment(map, this.legendBorderRect.width, this.legendBorderRect.height, legend) : legend.location;\n this.legendGroup.setAttribute('transform', 'translate( ' + (this.translate.x + (-(this.legendBorderRect.x))) + ' ' +\n (this.translate.y + (-(this.legendBorderRect.y))) + ' )');\n map.svgObject.appendChild(this.legendGroup);\n };\n Legend.prototype.changeNextPage = function (e) {\n this.currentPage = (e.target.id.indexOf('_Left_Page_') > -1) ? (this.currentPage - 1) :\n (this.currentPage + 1);\n this.legendGroup = this.maps.renderer.createGroup({ id: this.maps.element.id + '_Legend_Group' });\n this.drawLegendItem(this.currentPage);\n if (querySelector(this.maps.element.id + '_Legend_Border', this.maps.element.id)) {\n querySelector(this.maps.element.id + '_Legend_Border', this.maps.element.id).style.pointerEvents = 'none';\n }\n };\n Legend.prototype.getLegendAlignment = function (map, width, height, legend) {\n var x;\n var y;\n var spacing = 10;\n var totalWidth = map.availableSize.width;\n var totalHeight = map.availableSize.height;\n switch (legend.position) {\n case 'Top':\n case 'Bottom':\n map.mapAreaRect.height = (map.mapAreaRect.height - height);\n x = (totalWidth / 2) - (width / 2);\n y = (legend.position === 'Top') ? map.mapAreaRect.y : (map.mapAreaRect.y + map.mapAreaRect.height);\n map.mapAreaRect.y = (legend.position === 'Top') ? map.mapAreaRect.y + height + spacing : map.mapAreaRect.y;\n break;\n case 'Left':\n case 'Right':\n map.mapAreaRect.width = (map.mapAreaRect.width - width);\n x = (legend.position === 'Left') ? map.mapAreaRect.x : map.mapAreaRect.x + map.mapAreaRect.width;\n y = (totalHeight / 2) - (height / 2);\n map.mapAreaRect.x = (legend.position === 'Left') ? map.mapAreaRect.x + width : map.mapAreaRect.x;\n break;\n }\n switch (legend.alignment) {\n case 'Near':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = map.mapAreaRect.x;\n }\n else {\n y = map.mapAreaRect.y;\n }\n break;\n case 'Far':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = totalWidth - width;\n }\n else {\n y = totalHeight - height;\n }\n break;\n }\n return new Point(x, y);\n };\n Legend.prototype.getMarkersLegendCollections = function (layerIndex, markers) {\n var _this = this;\n markers.forEach(function (marker, markerIndex) {\n var dataSource = marker.dataSource;\n var field = marker.legendText;\n var templateFn;\n dataSource.forEach(function (data, dataIndex) {\n var imageSrc = null;\n if (marker.visible && (!isNullOrUndefined(data['latitude'])) && (!isNullOrUndefined(data['longitude']))) {\n if (marker.template) {\n templateFn = getTemplateFunction(marker.template);\n var templateElement = templateFn(_this.maps);\n var markerEle = isNullOrUndefined(templateElement.childElementCount) ? templateElement[0] :\n templateElement;\n imageSrc = markerEle.querySelector('img').src;\n }\n var text = isNullOrUndefined(data[field]) ? '' : data[field];\n _this.legendCollection.push({\n layerIndex: layerIndex, markerIndex: markerIndex, dataIndex: dataIndex,\n fill: marker.fill, text: text, imageSrc: imageSrc\n });\n }\n });\n });\n };\n Legend.prototype.getRangeLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var legendText;\n var fill = this.maps.legendSettings.fill;\n var _loop_1 = function (colorMap) {\n if (!isNullOrUndefined(colorMap.from) && !isNullOrUndefined(colorMap.to)) {\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.from + ' - ' + colorMap.to;\n var rangeData_1 = [];\n var colorMapProcess_1 = false;\n dataSource.forEach(function (data, dataIndex) {\n var colorValue = parseFloat(data[colorValuePath]);\n if (colorValue >= colorMap.from && colorValue <= colorMap.to) {\n colorMapProcess_1 = true;\n rangeData_1.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, colorValue));\n }\n });\n if (!colorMapProcess_1) {\n rangeData_1.push({\n layerIndex: layerIndex, shapeIndex: null, dataIndex: null,\n name: null, value: null\n });\n }\n var legendFill = (isNullOrUndefined(fill)) ? colorMap.color : fill;\n this_1.getOverallLegendItemsCollection(legendText, legendFill, rangeData_1);\n }\n };\n var this_1 = this;\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n _loop_1(colorMap);\n }\n };\n Legend.prototype.getOverallLegendItemsCollection = function (legendText, legendFill, legendData) {\n var newColllection = [];\n if (legendData.length > 0) {\n for (var i = 0; i < legendData.length; i++) {\n var collection = legendData[i];\n if (collection.length > 0) {\n for (var j = 0; j < collection.length; j++) {\n newColllection.push(collection[j]);\n }\n }\n else {\n newColllection.push(legendData[i]);\n }\n newColllection['_isVisible'] = true;\n }\n this.legendCollection.push({ text: legendText, fill: legendFill, data: newColllection });\n }\n };\n Legend.prototype.getEqualLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var fill = this.maps.legendSettings.fill;\n var legendText;\n var _loop_2 = function (colorMap) {\n if (!isNullOrUndefined(colorMap.value)) {\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.value;\n var equalData_1 = [];\n var eqaulColorProcess_1 = false;\n dataSource.forEach(function (data, dataIndex) {\n var equalValue = data[colorValuePath];\n if (equalValue === colorMap.value) {\n eqaulColorProcess_1 = true;\n equalData_1.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, equalValue));\n }\n });\n if (!eqaulColorProcess_1) {\n equalData_1.push({\n layerIndex: layerIndex, shapeIndex: null, dataIndex: null,\n name: null, value: null\n });\n }\n var legendFill = (isNullOrUndefined(fill)) ? colorMap.color : fill;\n this_2.getOverallLegendItemsCollection(legendText, legendFill, equalData_1);\n }\n };\n var this_2 = this;\n for (var _i = 0, colorMapping_2 = colorMapping; _i < colorMapping_2.length; _i++) {\n var colorMap = colorMapping_2[_i];\n _loop_2(colorMap);\n }\n };\n Legend.prototype.getDataLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var legendText;\n var fill = this.maps.legendSettings.fill;\n if (!isNullOrUndefined(colorValuePath)) {\n dataSource.forEach(function (data, dataIndex) {\n var dataValue = data[colorValuePath];\n var newData = [];\n var legendFill = (isNullOrUndefined(fill)) ? dataValue : fill;\n if (!isNullOrUndefined(dataValue) && colorMapping.length === 0) {\n legendText = data[dataPath];\n newData.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, dataValue));\n }\n _this.getOverallLegendItemsCollection(legendText, legendFill, newData);\n });\n }\n };\n Legend.prototype.interactiveHandler = function (e) {\n var target = e.target;\n var legend = this.maps.legendSettings;\n var id = this.maps.element.id + '_Interactive_Legend';\n var hoverId = legend.type === 'Layers' ? '_ShapeIndex_' : (legend.type === 'Markers') ? '_MarkerIndex_' :\n '_BubbleIndex_';\n if (target.id.indexOf(hoverId) > 1) {\n var layerIndex = parseFloat(target.id.split('_')[2]);\n var dataIndex = parseFloat(target.id.split('_')[6]);\n var fill = void 0;\n var stroke = void 0;\n var strokeWidth = void 0;\n if (!(isNullOrUndefined(querySelector(id, this.maps.element.id)))) {\n remove(querySelector(id, this.maps.element.id));\n }\n var layer = this.maps.layersCollection[layerIndex];\n if (legend.visible && this.legendRenderingCollections.length > 0\n && legend.mode === 'Interactive' && (legend.type === 'Layers' ? layer.visible :\n legend.type === 'Markers' ? layer.markerSettings[parseFloat(target.id.split('_')[4])].visible :\n (this.maps.getBubbleVisible(this.maps.layersCollection[layerIndex])))) {\n var svgRect = this.maps.svgObject.getBoundingClientRect();\n for (var i = 0; i < this.legendCollection.length; i++) {\n var currentData = this.legendCollection[i];\n var legendElement = querySelector(this.maps.element.id + '_Legend_Index_' + i, this.maps.element.id);\n var legendRect = legendElement.getBoundingClientRect();\n var rect = new Rect(Math.abs(legendRect.left - svgRect.left), Math.abs(legendRect.top - svgRect.top), legendRect.width, legendRect.height);\n fill = legendElement.getAttribute('fill');\n stroke = legend.shapeBorder.color;\n strokeWidth = legend.shapeBorder.width;\n if (!isNullOrUndefined(currentData['data'])) {\n var data = currentData['data'];\n for (var j = 0; j < data.length; j++) {\n if (dataIndex === data[j]['dataIndex'] && layerIndex === data[j]['layerIndex']) {\n this.renderInteractivePointer(legend, fill, stroke, id, strokeWidth, rect);\n break;\n }\n }\n }\n }\n }\n }\n else {\n if (!(isNullOrUndefined(querySelector(id, this.maps.element.id)))) {\n remove(querySelector(id, this.maps.element.id));\n }\n }\n };\n Legend.prototype.renderInteractivePointer = function (legend, fill, stroke, id, strokeWidth, rect) {\n var path;\n var pathOptions;\n var locX;\n var locY;\n var height = 10;\n var width = 10;\n var direction = (legend.orientation === 'None') ? (legend.position === 'Top' || legend.position === 'Bottom')\n ? 'Horizontal' : 'Vertical' : legend.orientation;\n if (direction === 'Horizontal') {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width / 2);\n locY = rect.y;\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY - height) + ' Z ';\n }\n else {\n locX = rect.x + (rect.width / 2);\n locY = rect.y + (rect.height);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY + height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' Z ';\n }\n }\n else {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width);\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX + width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' z ';\n }\n else {\n locX = rect.x;\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX - width) + ' ' + (locY + height) + ' z ';\n }\n }\n pathOptions = new PathOption(id, fill, strokeWidth, stroke, 1, '', path);\n this.maps.svgObject.appendChild(this.maps.renderer.drawPath(pathOptions));\n };\n Legend.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.changeNextPage, this);\n };\n Legend.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.interactiveHandler, this);\n this.maps.on(Browser.touchEndEvent, this.interactiveHandler, this);\n // this.maps.on(click, this.legendClick, this);\n };\n // private legendClick(targetEle: Element): void {\n // if (targetEle.parentElement.id.indexOf(this.maps.element.id + '_Legend_Index_') > -1) {\n // let mapElement: Element;\n // let data: object;\n // let legendIndex: number = parseFloat(targetEle.parentElement.id.substr((this.maps.element.id + '_Legend_Index_').length));\n // let selectedItem: object[] = this.legendCollection[legendIndex]['data'];\n // let childElement: Element;\n // let isVisible: boolean = selectedItem['_isVisible'];\n // if (this.maps.legendSettings.toggleVisibility) {\n // for (let i: number = 0; i < selectedItem.length; i++) {\n // data = this.legendCollection[legendIndex]['data'][i];\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // if (isVisible) {\n // mapElement.setAttribute('opacity', '0');\n // } else {\n // mapElement.setAttribute('opacity', '1');\n // }\n // }\n // selectedItem['_isVisible'] = isVisible ? false : true;\n // } else if (this.maps.legendSettings.legendSelection && this.maps.selectionSettings.enable) {\n // this.selectShapes(targetEle, legendIndex);\n // }\n // }\n // }\n // private selectShapes(targetEle: Element, legendIndex: number): void {\n // let mapElement: Element;\n // let selectedElements: NodeListOf;\n // let selectedLength: number;\n // let childElement: HTMLElement = targetEle.parentElement.childNodes[0] as HTMLElement;\n // let legendSelected: boolean = targetEle.parentElement.id.indexOf('_Legend_Index_') &&\n // childElement.getAttribute('class') ? true : false;\n // if (!this.maps.selectionSettings.enableMultiSelect) {\n // selectedElements = querySelectorAll('selectionMapStyle', document.body);\n // selectedLength = selectedElements.length;\n // for (let i: number = 0; i < selectedLength; i++) {\n // removeClass(selectedElements[selectedElements.length - 1]);\n // }\n // if (!legendSelected) {\n // this.select(legendIndex, targetEle);\n // }\n // } else {\n // if (legendSelected) {\n // for (let data of this.legendCollection[legendIndex]['data']) {\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // removeClass(mapElement);\n // }\n // removeClass(childElement);\n // } else {\n // this.select(legendIndex, targetEle);\n // }\n // }\n // }\n // private select(legendIndex: number, targetEle: Element): void {\n // let mapElement: Element;\n // let childElement: HTMLElement = targetEle.parentElement.childNodes[0] as HTMLElement;\n // for (let i: number = 0; i < this.legendCollection.length; i++) {\n // if (i === legendIndex && !childElement.getAttribute('class')) {\n // for (let data of this.legendCollection[i]['data']) {\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // let eventArgs: IShapeSelectedEventArgs = {\n // cancel: false,\n // name: shapeSelected,\n // fill: this.maps.selectionSettings.fill,\n // opacity: this.maps.selectionSettings.opacity,\n // border: this.maps.selectionSettings.border\n // };\n // if (!document.getElementById('selectionMap')) {\n // document.body.appendChild(createStyle('selectionMap', 'selectionMapStyle', eventArgs));\n // }\n // mapElement.setAttribute('class', 'selectionMapStyle');\n // }\n // childElement.setAttribute('class', 'selectionMapStyle');\n // }\n // }\n // }\n Legend.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.interactiveHandler);\n this.maps.off(Browser.touchEndEvent, this.interactiveHandler);\n // this.maps.off(click, this.legendClick);\n };\n Legend.prototype.getLegendData = function (layerIndex, dataIndex, data, dataPath, layerData, shapePropertyPath, value) {\n var legendData = [];\n if (Object.prototype.toString.call(layerData) === '[object Array]') {\n for (var i = 0; i < layerData.length; i++) {\n var shapeData = layerData[i];\n if (shapeData['properties'][shapePropertyPath] === data[dataPath]) {\n legendData.push({\n layerIndex: layerIndex, shapeIndex: i, dataIndex: dataIndex,\n name: data[dataPath], value: value\n });\n }\n }\n }\n return legendData;\n };\n /**\n * Get module name.\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Legend;\n}());\nexport { Legend };\n","import { itemHighlight } from '../index';\nimport { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getElementsByClassName, getElement, removeClass, createStyle, customizeStyle, getTargetElement } from '../utils/helper';\n/**\n * Highlight module class\n */\n/* tslint:disable:no-string-literal */\nvar Highlight = /** @class */ (function () {\n function Highlight(maps) {\n this.maps = maps;\n this.addEventListener();\n }\n /**\n * To bind events for highlight module\n */\n Highlight.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.maps.on(Browser.touchStartEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for highlight module\n */\n Highlight.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.mouseMove);\n this.maps.off(Browser.touchStartEvent, this.mouseMove);\n };\n /**\n * Public method for highlight module\n */\n Highlight.prototype.addHighlight = function (layerIndex, name, enable) {\n var targetEle = getTargetElement(layerIndex, name, enable, this.maps);\n if (enable) {\n this.mapHighlight(targetEle, null, null);\n }\n else {\n removeClass(targetEle);\n }\n };\n Highlight.prototype.mouseMove = function (e) {\n var targetEle = e.target;\n var layerIndex;\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || (e.type.indexOf('touch') > -1);\n if ((targetEle.id.indexOf('LayerIndex') !== -1 || targetEle.id.indexOf('NavigationIndex') > -1) &&\n targetEle.getAttribute('class') !== 'ShapeselectionMapStyle' && !isTouch) {\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n var shapeData = void 0;\n var data = void 0;\n var shapeIn = void 0;\n var dataIndex = void 0;\n if (targetEle.id.indexOf('ShapeIndex') > -1) {\n shapeIn = parseInt(targetEle.id.split('_ShapeIndex_')[1].split('_')[0], 10);\n shapeData = this.maps.layers[layerIndex].shapeData['features'] ?\n this.maps.layers[layerIndex].shapeData['features'][shapeIn]['properties'] : null;\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = isNullOrUndefined(dataIndex) ? null : this.maps.layers[layerIndex].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].highlightSettings;\n }\n else if (targetEle.id.indexOf('BubbleIndex') > -1) {\n var bubble = parseInt(targetEle.id.split('_BubbleIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].bubbleSettings[bubble].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].bubbleSettings[bubble].highlightSettings;\n }\n else if (targetEle.id.indexOf('MarkerIndex') > -1) {\n var marker = parseInt(targetEle.id.split('_MarkerIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_DataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].markerSettings[marker].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].markerSettings[marker].highlightSettings;\n }\n else {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n shapeData = null;\n data = {\n latitude: this.maps.layers[layerIndex].navigationLineSettings[index].latitude,\n longitude: this.maps.layers[layerIndex].navigationLineSettings[index].longitude\n };\n this.highlightSettings = this.maps.layers[layerIndex].navigationLineSettings[index].highlightSettings;\n }\n if (this.highlightSettings.enable) {\n this.mapHighlight(targetEle, shapeData, data);\n }\n else {\n var element = document.getElementsByClassName('highlightMapStyle')[0];\n if (!isNullOrUndefined(element)) {\n removeClass(element);\n if (element.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(element.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex_1 = parseInt(element.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n element.setAttribute('stroke-width', this.maps.layers[layerIndex_1].navigationLineSettings[index].width.toString());\n element.setAttribute('stroke', this.maps.layers[layerIndex_1].navigationLineSettings[index].color);\n }\n }\n }\n }\n else if (getElementsByClassName('highlightMapStyle').length > 0) {\n targetEle = getElementsByClassName('highlightMapStyle')[0];\n if (targetEle.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n targetEle.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n targetEle.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n removeClass(targetEle);\n }\n };\n Highlight.prototype.mapHighlight = function (targetEle, shapeData, data) {\n var eventArgs = {\n opacity: this.highlightSettings.opacity,\n fill: targetEle.id.indexOf('NavigationIndex') === -1 ? this.highlightSettings.fill : 'none',\n border: { color: this.highlightSettings.border.color, width: this.highlightSettings.border.width },\n name: itemHighlight,\n target: targetEle.id,\n cancel: false,\n shapeData: shapeData,\n data: data\n };\n this.maps.trigger(itemHighlight, eventArgs);\n this.highlightMap(targetEle, eventArgs);\n };\n Highlight.prototype.highlightMap = function (targetEle, eventArgs) {\n var parentElement;\n var children;\n if (targetEle.getAttribute('class') === 'highlightMapStyle') {\n return;\n }\n else {\n if (getElementsByClassName('highlightMapStyle').length > 0) {\n var elem = getElementsByClassName('highlightMapStyle')[0];\n removeClass(elem);\n if (elem.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(elem.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(elem.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n elem.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n elem.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n if (!getElement('highlightMap')) {\n document.body.appendChild(createStyle('highlightMap', 'highlightMapStyle', eventArgs));\n }\n else {\n customizeStyle('highlightMap', 'highlightMapStyle', eventArgs);\n }\n targetEle.setAttribute('stroke-width', eventArgs.border.width.toString());\n targetEle.setAttribute('stroke', eventArgs.border.color);\n targetEle.setAttribute('class', 'highlightMapStyle');\n }\n };\n /**\n * Get module name.\n */\n Highlight.prototype.getModuleName = function () {\n return 'Highlight';\n };\n /**\n * To destroy the highlight.\n * @return {void}\n * @private\n */\n Highlight.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Highlight;\n}());\nexport { Highlight };\n","import { click, itemSelection } from '../index';\nimport { getElementsByClassName, getElement, createStyle, customizeStyle, removeClass, getTargetElement } from '../utils/helper';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\n/**\n * Selection module class\n */\nvar Selection = /** @class */ (function () {\n /* tslint:disable:no-string-literal */\n function Selection(maps) {\n this.maps = maps;\n this.addEventListener();\n }\n /**\n * For binding events to selection module\n */\n Selection.prototype.addEventListener = function () {\n if (!this.maps.isDestroyed) {\n this.maps.on(click, this.mouseClick, this);\n this.maps.on(Browser.touchEndEvent, this.mouseClick, this);\n }\n };\n /**\n * For removing events from selection modue\n */\n Selection.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(click, this.mouseClick);\n this.maps.off(Browser.touchEndEvent, this.mouseClick);\n };\n Selection.prototype.mouseClick = function (targetEle) {\n if (!isNullOrUndefined(targetEle['type']) && targetEle['type'].indexOf('touch') !== -1 && isNullOrUndefined(targetEle.id)) {\n targetEle = targetEle['target'];\n }\n if (!isNullOrUndefined(targetEle.id) && (targetEle.id.indexOf('LayerIndex') > -1 || targetEle.id.indexOf('NavigationIndex') > -1)) {\n var layerIndex = void 0;\n var shapeData = void 0;\n var data = void 0;\n var shapeIndex = void 0;\n var dataIndex = void 0;\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n if (targetEle.id.indexOf('ShapeIndex') > -1) {\n shapeIndex = parseInt(targetEle.id.split('_ShapeIndex_')[1].split('_')[0], 10);\n shapeData = this.maps.layers[layerIndex].shapeData['features'] ?\n this.maps.layers[layerIndex].shapeData['features'][shapeIndex]['properties'] : null;\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = isNullOrUndefined(dataIndex) ? null : this.maps.layers[layerIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].selectionSettings;\n this.selectionType = 'Shape';\n }\n else if (targetEle.id.indexOf('BubbleIndex') > -1) {\n var bubbleIndex = parseInt(targetEle.id.split('_BubbleIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].bubbleSettings[bubbleIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].bubbleSettings[bubbleIndex].selectionSettings;\n this.selectionType = 'Bubble';\n }\n else if (targetEle.id.indexOf('MarkerIndex') > -1) {\n var markerIndex = parseInt(targetEle.id.split('_MarkerIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_DataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].markerSettings[markerIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].markerSettings[markerIndex].selectionSettings;\n this.selectionType = 'Marker';\n }\n else {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n shapeData = null;\n data = {\n latitude: this.maps.layers[layerIndex].navigationLineSettings[index].latitude,\n longitude: this.maps.layers[layerIndex].navigationLineSettings[index].longitude\n };\n this.selectionsettings = this.maps.layers[layerIndex].navigationLineSettings[index].selectionSettings;\n this.selectionType = 'navigationline';\n }\n if (this.selectionsettings.enable) {\n this.selectMap(targetEle, shapeData, data);\n }\n }\n };\n /**\n * Public method for selection\n */\n Selection.prototype.addSelection = function (layerIndex, name, enable) {\n var targetEle = getTargetElement(layerIndex, name, enable, this.maps);\n if (enable) {\n this.selectMap(targetEle, null, null);\n }\n else {\n removeClass(targetEle);\n }\n };\n /**\n * Method for selection\n */\n Selection.prototype.selectMap = function (targetEle, shapeData, data) {\n var parentElement;\n var children;\n var selectionsettings = this.selectionsettings;\n var eventArgs = {\n opacity: this.selectionsettings.opacity,\n fill: this.selectionType !== 'navigationline' ? this.selectionsettings.fill : 'none',\n border: { color: this.selectionsettings.border.color, width: this.selectionsettings.border.width },\n name: itemSelection,\n target: targetEle.id,\n cancel: false,\n shapeData: shapeData,\n data: data\n };\n this.maps.trigger(itemSelection, eventArgs);\n // if (this.maps.legendSettings.visible && !this.maps.legendSettings.toggleVisibility && this.maps.legendSettings.legendSelection) {\n // this.removeLegendSelection(this.maps.legendModule.legendCollection, targetEle);\n // }\n if (targetEle.getAttribute('class') === this.selectionType + 'selectionMapStyle') {\n removeClass(targetEle);\n if (targetEle.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n targetEle.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n targetEle.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n else {\n if (!this.selectionsettings.enableMultiSelect && getElementsByClassName(this.selectionType + 'selectionMapStyle').length > 0) {\n var ele = getElementsByClassName(this.selectionType + 'selectionMapStyle')[0];\n removeClass(ele);\n if (ele.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n ele.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n ele.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n if (!getElement(this.selectionType + 'selectionMap')) {\n document.body.appendChild(createStyle(this.selectionType + 'selectionMap', this.selectionType + 'selectionMapStyle', eventArgs));\n }\n else {\n customizeStyle(this.selectionType + 'selectionMap', this.selectionType + 'selectionMapStyle', eventArgs);\n }\n targetEle.setAttribute('stroke-width', eventArgs.border.width.toString());\n targetEle.setAttribute('stroke', eventArgs.border.color);\n targetEle.setAttribute('class', this.selectionType + 'selectionMapStyle');\n }\n };\n /**\n * Remove legend selection\n */\n // private removeLegendSelection(legendCollection: Object[], targetEle: Element): void {\n // let shape: Element;\n // if (!this.selectionsettings.enableMultiSelect) {\n // for (let i: number = 0; i < legendCollection.length; i++) {\n // for (let data of legendCollection[i]['data']) {\n // shape = getElement(this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex']);\n // removeClass(shape);\n // }\n // }\n // }\n // }\n /**\n * Get module name.\n */\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Selection;\n}());\nexport { Selection };\n","import { tooltipRender } from '../index';\nimport { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { createElement, Browser, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { checkShapeDataFields, getMousePosition, Internalize } from '../utils/helper';\n/**\n * Map Tooltip\n */\nvar MapsTooltip = /** @class */ (function () {\n function MapsTooltip(maps) {\n this.maps = maps;\n this.tooltipId = this.maps.element.id + '_mapsTooltip';\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n //tslint:disable:max-func-body-length\n MapsTooltip.prototype.renderTooltip = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var tootipArgs;\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].pageX;\n pageY = touchArg.changedTouches[0].pageY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n var formatFunction;\n var value;\n var option;\n var currentData = '';\n var targetId = target.id;\n var item = {};\n var tooltipEle;\n var location;\n var toolTipData = {};\n var templateData = [];\n var index = parseFloat(targetId.split('_')[2]);\n var layer = this.maps.layersCollection[index];\n var tooltipContent = [];\n var markerFill;\n location = getMousePosition(pageX, pageY, this.maps.svgObject);\n var istooltipRender = (targetId.indexOf('_ShapeIndex_') > -1)\n || (targetId.indexOf('_MarkerIndex_') > -1) || (targetId.indexOf('_BubbleIndex_') > -1);\n if (istooltipRender) {\n if (targetId.indexOf('_ShapeIndex_') > -1) {\n option = layer.tooltipSettings;\n var shape = parseInt(targetId.split('_')[4], 10);\n if (isNullOrUndefined(layer.shapeData['features'])) {\n return;\n }\n var value_1 = layer.shapeData['features'][shape]['properties'];\n index = checkShapeDataFields(layer.dataSource, value_1, layer.shapeDataPath, layer.shapePropertyPath);\n templateData = layer.dataSource[index];\n if (option.visible && ((!isNullOrUndefined(index) && !isNaN(index)) || (!isNullOrUndefined(value_1)))) {\n if (layer.tooltipSettings.format) {\n currentData = this.formatter(layer.tooltipSettings.format, layer.dataSource[index]);\n }\n else {\n currentData = ((!isNullOrUndefined(layer.dataSource)) && ((!isNullOrUndefined(index)))) ?\n this.formatValue(layer.dataSource[index][option.valuePath], this.maps) : value_1[layer.shapePropertyPath];\n }\n }\n //location.y = this.template(option, location);\n }\n else if (targetId.indexOf('_MarkerIndex_') > -1) {\n var markerIdex = parseInt(targetId.split('_')[4], 10);\n var dataIndex = parseInt(targetId.split('_')[6], 10);\n var marker = layer.markerSettings[markerIdex];\n option = marker.tooltipSettings;\n templateData = marker.dataSource[dataIndex];\n if (option.visible && !isNaN(markerIdex)) {\n if (marker.tooltipSettings.format) {\n currentData = this.formatter(marker.tooltipSettings.format, marker.dataSource[dataIndex]);\n }\n else {\n currentData = this.formatValue(marker.dataSource[dataIndex][marker.tooltipSettings.valuePath], this.maps);\n }\n }\n //location.y = this.template(option, location);\n }\n else if (targetId.indexOf('_BubbleIndex_') > -1) {\n var bubbleIndex = parseInt(targetId.split('_')[4], 10);\n var dataIndex = parseInt(targetId.split('_')[6], 10);\n var bubble = layer.bubbleSettings[bubbleIndex];\n option = bubble.tooltipSettings;\n templateData = bubble.dataSource[dataIndex];\n if (option.visible && !isNaN(dataIndex)) {\n if (bubble.tooltipSettings.format) {\n currentData = this.formatter(bubble.tooltipSettings.format, bubble.dataSource[dataIndex]);\n }\n else {\n currentData = this.formatValue(bubble.dataSource[dataIndex][bubble.tooltipSettings.valuePath], this.maps);\n }\n }\n //location.y = this.template(option, location);\n }\n if (document.getElementById(this.tooltipId)) {\n tooltipEle = document.getElementById(this.tooltipId);\n }\n else {\n tooltipEle = createElement('div', {\n id: this.maps.element.id + '_mapsTooltip',\n className: 'EJ2-maps-Tooltip',\n styles: 'position: absolute;pointer-events:none;'\n });\n document.getElementById(this.maps.element.id + '_Secondary_Element').appendChild(tooltipEle);\n }\n var content = void 0;\n if (option.template !== null && Object.keys(option.template).length === 1) {\n option.template = option.template[Object.keys(option.template)[0]];\n }\n templateData = this.setTooltipContent(option, templateData);\n tootipArgs = {\n cancel: false, name: tooltipRender,\n options: {\n location: location, text: tooltipContent, data: templateData,\n textStyle: option.textStyle,\n template: option.template\n },\n maps: this.maps,\n element: target, eventArgs: e\n };\n this.maps.trigger(tooltipRender, tootipArgs);\n if (!tootipArgs.cancel && option.visible && !isNullOrUndefined(currentData)) {\n tootipArgs.options['textStyle']['color'] = (this.maps.theme === 'Highcontrast') ? '#00000' : '#FFFFFF';\n this.svgTooltip = new Tooltip({\n enable: true,\n header: '',\n data: tootipArgs.options['data'],\n template: tootipArgs.options['template'],\n content: [currentData.toString()],\n shapes: [],\n location: tootipArgs.options['location'],\n palette: [markerFill],\n areaBounds: this.maps.mapAreaRect,\n textStyle: tootipArgs.options['textStyle'],\n theme: this.maps.theme,\n fill: (this.maps.theme === 'Highcontrast') ? '#FFFFFF' : '#00000'\n });\n this.svgTooltip.appendTo(tooltipEle);\n }\n else {\n this.removeTooltip();\n }\n }\n else {\n this.removeTooltip();\n }\n };\n /**\n * To get content for the current toolitp\n */\n MapsTooltip.prototype.setTooltipContent = function (options, templateData) {\n var localData = extend({}, templateData, null, true);\n if (this.maps.format && !isNaN(Number(localData[options.valuePath]))) {\n localData[options.valuePath] = Internalize(this.maps, Number(localData[options.valuePath]));\n }\n else {\n localData = Object.keys(localData).length ? localData : undefined;\n }\n return localData;\n };\n MapsTooltip.prototype.formatValue = function (value, maps) {\n var formatValue;\n var formatFunction;\n if (maps.format && !isNaN(Number(value))) {\n formatFunction = maps.intl.getNumberFormat({ format: maps.format, useGrouping: maps.useGroupingSeparator });\n formatValue = formatFunction(Number(value));\n }\n else {\n formatValue = value;\n }\n return formatValue;\n };\n /*private template(tooltip: TooltipSettingsModel, location: MapLocation): number {\n location.y = (tooltip.template) ? location.y + 10 : location.y;\n return location.y;\n }*/\n MapsTooltip.prototype.formatter = function (format, data) {\n if (data === void 0) { data = {}; }\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n format = format.split('${' + key + '}').join(this.formatValue(data[key], this.maps));\n }\n return format;\n };\n MapsTooltip.prototype.mouseUpHandler = function (e) {\n this.renderTooltip(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n };\n MapsTooltip.prototype.removeTooltip = function () {\n if (document.getElementsByClassName('EJ2-maps-Tooltip').length > 0) {\n document.getElementsByClassName('EJ2-maps-Tooltip')[0].remove();\n }\n };\n /**\n * To bind events for tooltip module\n */\n MapsTooltip.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.renderTooltip, this);\n this.maps.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.maps.on(Browser.touchCancelEvent, this.removeTooltip, this);\n };\n MapsTooltip.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.renderTooltip);\n this.maps.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.maps.off(Browser.touchCancelEvent, this.removeTooltip);\n };\n /**\n * Get module name.\n */\n MapsTooltip.prototype.getModuleName = function () {\n return 'MapsTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n MapsTooltip.prototype.destroy = function (maps) {\n this.removeEventListener();\n };\n return MapsTooltip;\n}());\nexport { MapsTooltip };\n","import { doubleClick } from '../../index';\nimport { Point, getElementByID, PathOption, Rect, convertGeoToPoint, CircleOption, convertTileLatLongToPoint } from '../utils/helper';\nimport { RectOption, createTooltip, calculateScale, getTouchCenter, getTouches, targetTouches } from '../utils/helper';\nimport { MapLocation, zoomAnimate, smoothTranslate } from '../utils/helper';\nimport { isNullOrUndefined, EventHandler, Browser, remove, createElement } from '@syncfusion/ej2-base';\nimport { changeBorderWidth } from '../index';\n/**\n * Zoom module used to process the zoom for maps\n */\n/* tslint:disable:max-line-length */\nvar Zoom = /** @class */ (function () {\n function Zoom(maps) {\n this.isPanning = false;\n this.mouseEnter = false;\n this.isTouch = false;\n this.rectZoomingStart = false;\n this.pinchRect = new Rect(0, 0, 0, 0);\n this.browserName = Browser.info.name;\n this.isPointer = Browser.isPointer;\n this.handled = false;\n this.pinchFactor = 1;\n this.startTouches = [];\n this.maps = maps;\n this.wheelEvent = this.browserName === 'mozilla' ? (this.isPointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n this.cancelEvent = this.isPointer ? 'pointerleave' : 'mouseleave';\n this.selectionColor = this.maps.zoomSettings.selectionColor;\n this.fillColor = this.maps.zoomSettings.color;\n this.addEventListener();\n this.groupElements = [];\n }\n /* tslint:disable:no-string-literal */\n /**\n * To perform zooming for maps\n * @param position\n * @param newZoomFactor\n * @param type\n */\n Zoom.prototype.performZooming = function (position, newZoomFactor, type) {\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? newZoomFactor >= minZoom && newZoomFactor <= maxZoom : newZoomFactor >= minZoom)) {\n var availSize = map.mapAreaRect;\n var minBounds = map.baseMapRectBounds['min'];\n var maxBounds = map.baseMapRectBounds['max'];\n var mapTotalWidth = Math.abs(minBounds['x'] - maxBounds['x']);\n var mapTotalHeight = Math.abs(minBounds['y'] - maxBounds['y']);\n var point = map.translatePoint;\n var translatePointX = point.x - (((availSize.width / prevScale) - (availSize.width / newZoomFactor)) / (availSize.width / position.x));\n var translatePointY = point.y - (((availSize.height / prevScale) - (availSize.height / newZoomFactor)) / (availSize.height / position.y));\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * newZoomFactor;\n translatePointX = (currentHeight < map.mapAreaRect.height) ? (availSize.x + ((-(minBounds['x'])) + ((availSize.width / 2) - (mapTotalWidth / 2)))) : translatePointX;\n translatePointY = (currentHeight < map.mapAreaRect.height) ? (availSize.y + ((-(minBounds['y'])) + ((availSize.height / 2) - (mapTotalHeight / 2)))) : translatePointY;\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = newZoomFactor;\n }\n else if ((map.isTileMap) && (newZoomFactor >= minZoom && newZoomFactor <= maxZoom)) {\n this.getTileTranslatePosition(prevLevel, newZoomFactor, position);\n map.tileZoomLevel = newZoomFactor;\n map.scale = Math.pow(2, newZoomFactor - 1);\n map.mapLayerPanel.generateTiles(newZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * map.scale)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * map.scale)) / map.scale;\n }\n this.applyTransform();\n map.trigger(doubleClick, this);\n };\n Zoom.prototype.getTileTranslatePosition = function (prevLevel, currentLevel, position) {\n var map = this.maps;\n var tileDefaultSize = 256;\n var bounds = getElementByID(this.maps.element.id).getBoundingClientRect();\n var prevSize = Math.pow(2, prevLevel) * 256;\n var totalSize = Math.pow(2, currentLevel) * 256;\n var x = ((position.x - map.tileTranslatePoint.x) / prevSize) * 100;\n var y = ((position.y - map.tileTranslatePoint.y) / prevSize) * 100;\n map.tileTranslatePoint.x = (currentLevel === 1) ? (bounds.width / 2) - ((tileDefaultSize * 2) / 2) :\n position.x - ((x * totalSize) / 100);\n map.tileTranslatePoint.y = (currentLevel === 1) ? (bounds.height / 2) - ((tileDefaultSize * 2) / 2) :\n position.y - ((y * totalSize) / 100);\n };\n Zoom.prototype.performRectZooming = function () {\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var zoomRect = this.zoomingRect;\n if (zoomRect.height > 0 && zoomRect.width > 0) {\n var x = this.zoomingRect.x + (this.zoomingRect.width / 2);\n var y = this.zoomingRect.y + (this.zoomingRect.height / 2);\n var zoomCalculationFactor = void 0;\n if (!map.isTileMap) {\n var scale = map.previousScale = map.scale;\n zoomCalculationFactor = scale + Math.round((((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2));\n var translatePoint = map.previousPoint = map.translatePoint;\n var translatePointX = translatePoint.x - (((size.width / scale) - (size.width / zoomCalculationFactor)) / (size.width / x));\n var translatePointY = translatePoint.y - (((size.height / scale) - (size.height / zoomCalculationFactor)) / (size.height / y));\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = zoomCalculationFactor;\n }\n else {\n zoomCalculationFactor = prevLevel + (Math.round(prevLevel + (((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2)));\n this.getTileTranslatePosition(prevLevel, zoomCalculationFactor, { x: x, y: y });\n map.tileZoomLevel = zoomCalculationFactor;\n map.mapLayerPanel.generateTiles(zoomCalculationFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, zoomCalculationFactor))) /\n (Math.pow(2, zoomCalculationFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, zoomCalculationFactor))) /\n (Math.pow(2, zoomCalculationFactor));\n map.scale = (Math.pow(2, zoomCalculationFactor));\n }\n this.applyTransform(true);\n this.zoomingRect = null;\n }\n };\n Zoom.prototype.setInteraction = function (newInteraction) {\n this.lastScale = 1;\n this.interaction = newInteraction;\n };\n Zoom.prototype.updateInteraction = function () {\n if (this.fingers === 2) {\n this.setInteraction('zoom');\n }\n else {\n this.setInteraction(null);\n }\n };\n Zoom.prototype.performPinchZooming = function (e) {\n var touches = null;\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var availSize = map.mapAreaRect;\n var scale = calculateScale(this.touchStartList, this.touchMoveList);\n var touchCenter = getTouchCenter(getTouches(this.touchMoveList, this.maps));\n var newScale = scale / this.lastScale;\n this.lastScale = scale;\n this.pinchFactor *= newScale;\n this.pinchFactor = Math.min(this.maps.zoomSettings.maxZoom, Math.max(this.pinchFactor, this.maps.zoomSettings.minZoom));\n var zoomCalculationFactor = this.pinchFactor;\n var translatePointX;\n var translatePointY;\n if (!map.isTileMap) {\n var minBounds = map.baseMapRectBounds['min'];\n var maxBounds = map.baseMapRectBounds['max'];\n var mapTotalWidth = Math.abs(minBounds['x'] - maxBounds['x']);\n var mapTotalHeight = Math.abs(minBounds['y'] - maxBounds['y']);\n var translatePoint = map.translatePoint;\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * zoomCalculationFactor;\n var translatePointX_1 = translatePoint.x - (((availSize.width / map.scale) - (availSize.width / zoomCalculationFactor)) / (availSize.width / touchCenter.x));\n var translatePointY_1 = translatePoint.y - (((availSize.height / map.scale) - (availSize.height / zoomCalculationFactor)) / (availSize.height / touchCenter.y));\n // translatePointX = (currentHeight < map.mapAreaRect.height) ? (availSize.x + ((-(minBounds['x'])) + ((availSize.width / 2) - (mapTotalWidth / 2)))) : translatePointX;\n //translatePointY = (currentHeight < map.mapAreaRect.height) ? (availSize.y + ((-(minBounds['y'])) + ((availSize.height / 2) - (mapTotalHeight / 2)))) : translatePointY;\n map.translatePoint = new Point(translatePointX_1, translatePointY_1);\n map.scale = zoomCalculationFactor;\n }\n else {\n var newTileFactor = zoomCalculationFactor;\n this.getTileTranslatePosition(prevLevel, newTileFactor, { x: touchCenter.x, y: touchCenter.y });\n map.tileZoomLevel = newTileFactor;\n map.mapLayerPanel.generateTiles(newTileFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, newTileFactor))) /\n (Math.pow(2, newTileFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, newTileFactor))) /\n (Math.pow(2, newTileFactor));\n map.scale = (Math.pow(2, newTileFactor));\n }\n this.applyTransform();\n };\n Zoom.prototype.drawZoomRectangle = function () {\n var map = this.maps;\n var down = this.mouseDownPoints;\n var move = this.mouseMovePoints;\n var x;\n var y;\n var width;\n var height;\n var border = { width: 1, color: '#009900' };\n width = Math.abs(move.x - down.x);\n height = Math.abs(move.y - down.y);\n x = ((move.x > down.x) ? down.x : down.x - width);\n y = ((move.y > down.y) ? down.y : down.y - height);\n var elementRect = getElementByID(map.element.id).getBoundingClientRect();\n if ((x > map.mapAreaRect.x && x < (map.mapAreaRect.x + map.mapAreaRect.width)) &&\n (y > map.mapAreaRect.y) && (y < map.mapAreaRect.y + map.mapAreaRect.height)) {\n this.zoomingRect = new Rect(x, y, width, height);\n var rectSVGObject = map.renderer.createSvg({\n id: map.element.id + '_Selection_Rect_Zooming',\n width: map.availableSize.width,\n height: map.availableSize.height,\n });\n var rectOption = new RectOption(map.element.id + '_ZoomRect', '#d3d3d3', border, 0.5, this.zoomingRect, 0, 0, '', '3');\n rectSVGObject.appendChild(map.renderer.drawRectangle(rectOption));\n getElementByID(map.element.id + '_Secondary_Element').appendChild(rectSVGObject);\n }\n };\n /**\n * To animate the zooming process\n */\n Zoom.prototype.animateTransform = function (element, animate, x, y, scale) {\n var duration = this.currentLayer.animationDuration;\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'scale(' + (scale) + ') translate( ' + x + ' ' + y + ' )');\n return;\n }\n zoomAnimate(element, 0, duration, new MapLocation(x, y), scale, this.maps.mapAreaRect, this.maps);\n };\n Zoom.prototype.applyTransform = function (animate) {\n var layerIndex;\n this.templateCount = 0;\n var scale = this.maps.scale;\n var x = this.maps.translatePoint.x;\n var y = this.maps.translatePoint.y;\n var collection = [];\n if (this.layerCollectionEle) {\n for (var i = 0; i < this.layerCollectionEle.childElementCount; i++) {\n var layerElement = this.layerCollectionEle.childNodes[i];\n if (layerElement.tagName === 'g') {\n this.templateCount++;\n var index = parseFloat(layerElement.id.split('_')[2]);\n this.currentLayer = this.maps.layersCollection[index];\n var factor = this.maps.mapLayerPanel.calculateFactor(this.currentLayer);\n for (var j = 0; j < layerElement.childElementCount; j++) {\n var currentEle = layerElement.childNodes[j];\n if (!(currentEle.id.indexOf('_Markers_Group') > -1) && (!(currentEle.id.indexOf('_bubble_Group') > -1))\n && (!(currentEle.id.indexOf('_dataLableIndex_Group') > -1))) {\n if (this.maps.isTileMap && (currentEle.id.indexOf('_line_Group') > -1)) {\n currentEle.remove();\n layerElement.appendChild(this.maps.navigationLineModule.renderNavigation(this.currentLayer, this.maps.tileZoomLevel, index));\n }\n else {\n changeBorderWidth(currentEle, index, scale, this.maps);\n this.animateTransform(currentEle, animate, x, y, scale);\n }\n }\n else if (currentEle.id.indexOf('_Markers_Group') > -1) {\n for (var k = 0; k < currentEle.childElementCount; k++) {\n this.markerTranslate(currentEle.childNodes[k], factor, x, y, scale, 'Marker', animate);\n }\n }\n else if (currentEle.id.indexOf('_bubble_Group') > -1) {\n var childElement = void 0;\n for (var k = 0; k < currentEle.childElementCount; k++) {\n childElement = currentEle.childNodes[k];\n var bubbleTransform = childElement.getAttribute('transform');\n layerIndex = parseFloat(childElement.id.split('_')[2]);\n var bubleIndex = parseFloat(childElement.id.split('_')[4]);\n var dataIndex = parseFloat(childElement.id.split('_')[6]);\n for (var l = 0; l < this.maps.bubbleModule.bubbleCollection.length; l++) {\n var bubbleCollection = this.maps.bubbleModule.bubbleCollection[l];\n if (bubbleCollection['LayerIndex'] === layerIndex && bubbleCollection['BubbleIndex'] === bubleIndex &&\n bubbleCollection['DataIndex'] === dataIndex) {\n var centerX = bubbleCollection['center']['x'];\n var centerY = bubbleCollection['center']['y'];\n var currentX = ((centerX + x) * scale);\n var currentY = ((centerY + y) * scale);\n var duration = this.currentLayer.animationDuration;\n if (!animate || duration === 0) {\n childElement.setAttribute('transform', 'translate( ' + currentX + ' ' + currentY + ' )');\n }\n else {\n smoothTranslate(childElement, 0, duration, new MapLocation(currentX, currentY));\n }\n break;\n }\n }\n }\n }\n else if (currentEle.id.indexOf('_dataLableIndex_Group') > -1) {\n for (var k = 0; k < currentEle.childElementCount; k++) {\n this.dataLabelTranslate(currentEle.childNodes[k], factor, x, y, scale, 'DataLabel', animate);\n }\n }\n }\n }\n }\n if (!animate || this.currentLayer.animationDuration === 0) {\n this.processTemplate(x, y, scale, this.maps);\n }\n }\n };\n /**\n * To translate the layer template elements\n * @private\n */\n Zoom.prototype.processTemplate = function (x, y, scale, maps) {\n for (var i = 0; i < this.templateCount; i++) {\n this.currentLayer = maps.layersCollection[i];\n var factor = maps.mapLayerPanel.calculateFactor(this.currentLayer);\n var markerTemplateElement = getElementByID(maps.element.id + '_LayerIndex_' +\n i + '_Markers_Template_Group');\n var datalabelTemplateElemement = getElementByID(maps.element.id + '_LayerIndex_'\n + i + '_Label_Template_Group');\n if ((!isNullOrUndefined(markerTemplateElement)) && markerTemplateElement.childElementCount > 0) {\n for (var k = 0; k < markerTemplateElement.childElementCount; k++) {\n this.markerTranslate(markerTemplateElement.childNodes[k], factor, x, y, scale, 'Template');\n }\n }\n if ((!isNullOrUndefined(datalabelTemplateElemement)) && datalabelTemplateElemement.childElementCount > 0) {\n for (var k = 0; k < datalabelTemplateElemement.childElementCount; k++) {\n this.dataLabelTranslate(datalabelTemplateElemement.childNodes[k], factor, x, y, scale, 'Template');\n }\n }\n }\n };\n Zoom.prototype.dataLabelTranslate = function (element, factor, x, y, scale, type, animate) {\n if (animate === void 0) { animate = false; }\n var labelCollection = this.maps.dataLabelModule.dataLabelCollections;\n var layerIndex = parseFloat(element.id.split('_')[2]);\n var shapeIndex = parseFloat(element.id.split('_')[4]);\n var labelIndex = parseFloat(element.id.split('_')[6]);\n var duration = this.currentLayer.animationDuration;\n for (var l = 0; l < labelCollection.length; l++) {\n var label = labelCollection[l];\n if (label['layerIndex'] === layerIndex && label['shapeIndex'] === shapeIndex\n && label['labelIndex'] === labelIndex) {\n var labelX = label['location']['x'];\n var labelY = label['location']['y'];\n if (type === 'Template') {\n var layerEle = getElementByID(this.maps.element.id + '_Layer_Collections');\n labelX = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - labelX)) * scale);\n labelY = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - labelY)) * scale);\n var templateOffset = element.getBoundingClientRect();\n var layerOffset = layerEle.getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n var x_1 = ((labelX) + (layerOffset.left - elementOffset.left) - (templateOffset.width / 2));\n var y_1 = ((labelY) + (layerOffset.top - elementOffset.top) - (templateOffset.height / 2));\n element.style.left = x_1 + 'px';\n element.style.top = y_1 + 'px';\n }\n else {\n labelX = ((labelX + x) * scale);\n labelY = ((labelY + y) * scale);\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'translate( ' + labelX + ' ' + labelY + ' )');\n }\n else {\n smoothTranslate(element, 0, duration, new MapLocation(labelX, labelY));\n }\n }\n }\n }\n };\n Zoom.prototype.markerTranslate = function (element, factor, x, y, scale, type, animate) {\n if (animate === void 0) { animate = false; }\n var layerIndex = parseInt(element.id.split('_')[2], 10);\n var markerIndex = parseInt(element.id.split('_')[4], 10);\n var dataIndex = parseInt(element.id.split('_')[6], 10);\n var layer = this.maps.layersCollection[layerIndex];\n var marker = layer.markerSettings[markerIndex];\n if (!isNullOrUndefined(marker) && !isNullOrUndefined(marker.dataSource) && !isNullOrUndefined(marker.dataSource[dataIndex])) {\n var lng = marker.dataSource[dataIndex]['longitude'];\n var lat = marker.dataSource[dataIndex]['latitude'];\n var duration = this.currentLayer.animationDuration;\n var location_1 = (this.maps.isTileMap) ? convertTileLatLongToPoint(new Point(lng, lat), this.maps.tileZoomLevel, this.maps.tileTranslatePoint, true) : convertGeoToPoint(lat, lng, factor, layer, this.maps);\n if (this.maps.isTileMap) {\n if (type === 'Template') {\n var templateOffset = element.getBoundingClientRect();\n element.style.left = (location_1.x - (templateOffset.width / 2)) + 'px';\n element.style.top = (location_1.y - (templateOffset.height / 2)) + 'px';\n }\n else {\n element.setAttribute('transform', 'translate( ' + location_1.x + ' ' + location_1.y + ' )');\n }\n }\n else {\n if (type === 'Template') {\n location_1.x = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location_1.x)) * scale);\n location_1.y = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location_1.y)) * scale);\n var templateOffset = element.getBoundingClientRect();\n var layerOffset = getElementByID(this.maps.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n element.style.left = (((location_1.x) + (layerOffset.left - elementOffset.left) -\n (templateOffset.width / 2)) + marker.offset.x) + 'px';\n element.style.top = (((location_1.y) + (layerOffset.top - elementOffset.top)\n - (templateOffset.height / 2)) + marker.offset.y) + 'px';\n }\n else {\n location_1.x = (((location_1.x + x) * scale) + marker.offset.x);\n location_1.y = (((location_1.y + y) * scale) + marker.offset.y);\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'translate( ' + location_1.x + ' ' + location_1.y + ' )');\n }\n else {\n smoothTranslate(element, 0, duration, location_1);\n }\n }\n }\n }\n };\n Zoom.prototype.panning = function () {\n var map = this.maps;\n var areaRect = map.mapAreaRect;\n var down = this.mouseDownPoints;\n var move = this.mouseMovePoints;\n var scale = map.scale;\n var translatePoint = map.translatePoint;\n var x;\n var y;\n var transY;\n var transX;\n if (!map.isTileMap) {\n var x_2 = translatePoint.x - (down.x - move.x) / scale;\n var y_2 = translatePoint.y - (down.y - move.y) / scale;\n var layerRect = getElementByID(map.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementRect = getElementByID(map.element.id + '_svg').getBoundingClientRect();\n var panningXDirection = (((down.x - move.x) < 0 ? layerRect.left <= (elementRect.left + map.mapAreaRect.x) :\n ((layerRect.left + layerRect.width) >= (elementRect.left + elementRect.width) + map.mapAreaRect.x + map.margin.left)));\n var panningYDirection = (((down.y - move.y) < 0 ? layerRect.top <= (elementRect.top + map.mapAreaRect.y) :\n ((layerRect.top + layerRect.height) >= (elementRect.top + elementRect.height) + map.mapAreaRect.y + map.margin.top)));\n if (panningXDirection && panningYDirection) {\n map.translatePoint = new Point(x_2, y_2);\n this.applyTransform();\n }\n }\n else if (this.maps.tileZoomLevel > 1) {\n x = map.tileTranslatePoint.x - (down.x - move.x);\n y = map.tileTranslatePoint.y - (down.y - move.y);\n map.tileTranslatePoint.x = x;\n map.tileTranslatePoint.y = y;\n map.mapLayerPanel.generateTiles(map.tileZoomLevel, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (down.x - move.x)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (down.y - move.y)) / map.scale;\n this.applyTransform();\n }\n this.mouseDownPoints = this.mouseMovePoints;\n };\n Zoom.prototype.toolBarZooming = function (zoomFactor, type) {\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var scale = map.previousScale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n var size = map.mapAreaRect;\n zoomFactor = (type === 'ZoomOut') ? (Math.round(zoomFactor) === 1 ? 1 : zoomFactor) : zoomFactor;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? zoomFactor >= minZoom && zoomFactor <= maxZoom : zoomFactor >= minZoom)) {\n var translatePoint = map.previousPoint = map.translatePoint;\n var min = map.baseMapRectBounds['min'];\n var max = map.baseMapRectBounds['max'];\n var mapWidth = Math.abs(max['x'] - min['x']);\n var mapHeight = Math.abs(min['y'] - max['y']);\n var translatePointX = translatePoint.x - (((size.width / scale) - (size.width / zoomFactor)) / 2);\n var translatePointY = translatePoint.y - (((size.height / scale) - (size.height / zoomFactor)) / 2);\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * zoomFactor;\n translatePointX = (currentHeight < map.mapAreaRect.height) ? (size.x + ((-(min['x'])) + ((size.width / 2) - (mapWidth / 2))))\n : translatePointX;\n translatePointY = (currentHeight < map.mapAreaRect.height) ? (size.y + ((-(min['y'])) + ((size.height / 2) - (mapHeight / 2))))\n : translatePointY;\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = zoomFactor;\n }\n else if ((map.isTileMap) && (zoomFactor >= minZoom && zoomFactor <= maxZoom)) {\n var tileZoomFactor = zoomFactor;\n map.scale = Math.pow(2, tileZoomFactor - 1);\n map.tileZoomLevel = tileZoomFactor;\n var position = { x: map.availableSize.width / 2, y: map.availableSize.height / 2 };\n this.getTileTranslatePosition(prevLevel, tileZoomFactor, position);\n map.mapLayerPanel.generateTiles(tileZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * map.scale)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * map.scale)) / map.scale;\n }\n this.applyTransform(true);\n };\n /* tslint:disable:max-func-body-length */\n Zoom.prototype.createZoomingToolbars = function () {\n var map = this.maps;\n this.toolBarGroup = map.renderer.createGroup({\n id: map.element.id + '_Zooming_KitCollection',\n opacity: 0.3,\n });\n var kitHeight = 16;\n var kitWidth = 16;\n var xSpacing = 15;\n var ySpacing = 15;\n var padding = 20;\n var orientation = map.zoomSettings.toolBarOrientation;\n var toolbarsCollection = map.zoomSettings.toolbars;\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n var toolBarLength = map.zoomSettings.toolbars.length;\n var toolWidth = (map.zoomSettings.toolBarOrientation === 'Horizontal') ? (toolBarLength * kitWidth) + (toolBarLength * padding) : (kitWidth * 2);\n var toolHeight = (map.zoomSettings.toolBarOrientation === 'Horizontal') ? (kitHeight * 2) : (toolBarLength * kitHeight) + (toolBarLength * padding);\n this.toolBarGroup.appendChild(map.renderer.drawRectangle(new RectOption(map.element.id + '_Zooming_Rect', 'transparent', { color: 'transparent', width: 1 }, 1, new Rect(0, 0, toolWidth, toolHeight), 0, 0)));\n var defElement = map.renderer.createDefs();\n defElement.innerHTML = shadowElement;\n this.toolBarGroup.appendChild(defElement);\n var outerElement = map.renderer.drawRectangle(new RectOption(map.element.id + '_Zooming_Rect', 'transparent', { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, toolWidth, toolHeight), 0, 0));\n outerElement.setAttribute('filter', 'url(#chart_shadow)');\n this.toolBarGroup.appendChild(outerElement);\n var performFunction;\n for (var i = 0; i < toolbarsCollection.length; i++) {\n var toolbar_1 = toolbarsCollection[i];\n var pathOptions = void 0;\n var polyOptions = void 0;\n this.currentToolbarEle = map.renderer.createGroup({\n id: map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Group',\n transform: 'translate( ' + xSpacing + ' ' + ySpacing + ' ) '\n });\n this.currentToolbarEle.setAttribute('class', 'e-maps-toolbar');\n var fillColor = '';\n var direction = '';\n var polygonDirection = '';\n switch (toolbar_1.toLowerCase()) {\n case 'zoom':\n direction = 'M0.001,14.629L1.372,16l4.571-4.571v-0.685l0.228-0.274c1.051,0.868,2.423,1.417,3.885,1.417c3.291,0,';\n direction += '5.943-2.651,5.943-5.943S13.395,0,10.103,0S4.16,2.651,4.16,5.943c0,1.508,0.503,2.834,1.417,3.885l-0.274,0.228H4.571';\n direction = direction + 'L0.001,14.629L0.001,14.629z M5.943,5.943c0-2.285,1.828-4.114,4.114-4.114s4.114,1.828,4.114,';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, 1, this.fillColor, 1, null, direction + '4.114s-1.828,4.114-4.114,4.114S5.943,8.229,5.943,5.943z')));\n this.zoomElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'zoomin':\n direction = 'M 8, 0 L 8, 16 M 0, 8 L 16, 8';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Path', this.fillColor, 3, this.fillColor, 1, null, direction)));\n this.zoomInElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'zoomout':\n direction = 'M 0, 8 L 16, 8';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, 3, this.fillColor, 1, null, direction)));\n this.zoomOutElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'pan':\n direction = 'M5,3h2.3L7.275,5.875h1.4L8.65,3H11L8,0L5,3z M3,11V8.7l2.875,0.025v-1.4L3,7.35V5L0,8L3,';\n direction += '11z M11,13H8.7l0.025-2.875h-1.4L7.35,13H5l3,3L11,13z M13,5v2.3l-2.875-0.025v1.4L13,8.65V11l3-3L13,5z';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.selectionColor, 1, this.selectionColor, 1, null, direction)));\n this.panColor = this.selectionColor;\n this.panElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'reset':\n direction = 'M12.364,8h-2.182l2.909,3.25L16,8h-2.182c0-3.575-2.618-6.5-5.818-6.5c-1.128,0-2.218,0.366-3.091,';\n direction += '1.016l1.055,1.178C6.581,3.328,7.272,3.125,8,3.125C10.4,3.125,12.363,5.319,12.364,8L12.364,8z M11.091,';\n direction += '13.484l-1.055-1.178C9.419,12.672,8.728,12.875,8,12.875c-2.4,0-4.364-2.194-4.364-4.875h2.182L2.909,4.75L0,8h2.182c0,';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, null, null, 1, null, direction + '3.575,2.618,6.5,5.818,6.5C9.128,14.5,10.219,14.134,11.091,13.484L11.091,13.484z')));\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n }\n this.currentToolbarEle.appendChild(map.renderer.drawCircle(new CircleOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Rect', 'transparent', { color: this.fillColor, width: 1 }, 1, 8, 8, 16, '')));\n xSpacing = (orientation === 'Horizontal') ? (xSpacing + (kitWidth + padding)) : xSpacing;\n ySpacing = (orientation === 'Horizontal') ? ySpacing : (ySpacing + (kitHeight + padding));\n this.toolBarGroup.appendChild(this.currentToolbarEle);\n }\n };\n Zoom.prototype.performToolBarAction = function (e) {\n var target = e.target;\n e.stopImmediatePropagation();\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || (e.type.indexOf('touch') > -1);\n var toolbar = target.id.split('_')[3];\n if (isTouch) {\n this.handled = true;\n this.performZoomingByToolBar(toolbar);\n }\n else if ((e.type === 'mousedown' || e.type === 'pointerdown') && !this.handled) {\n this.handled = false;\n this.performZoomingByToolBar(toolbar);\n }\n else {\n this.handled = false;\n }\n };\n /**\n *\n * @private\n */\n Zoom.prototype.performZoomingByToolBar = function (type) {\n var map = this.maps;\n switch (type.toLowerCase()) {\n case 'zoom':\n this.panColor = this.fillColor;\n this.zoomColor = this.selectionColor;\n this.applySelection(this.zoomElements, this.selectionColor);\n this.applySelection(this.panElements, this.fillColor);\n break;\n case 'pan':\n this.panColor = this.selectionColor;\n this.zoomColor = this.fillColor;\n this.applySelection(this.zoomElements, this.fillColor);\n this.applySelection(this.panElements, this.selectionColor);\n break;\n case 'zoomin':\n this.toolBarZooming((map.isTileMap ? map.tileZoomLevel : map.scale) + 1, 'ZoomIn');\n break;\n case 'zoomout':\n this.toolBarZooming((map.isTileMap ? map.tileZoomLevel : map.scale) - 1, 'ZoomOut');\n break;\n case 'reset':\n this.toolBarZooming(1, 'ZoomOut');\n this.applySelection(this.zoomElements, this.fillColor);\n this.applySelection(this.panElements, this.selectionColor);\n }\n this.panningStyle(type.toLowerCase());\n };\n Zoom.prototype.panningStyle = function (toolbar) {\n var svg = getElementByID(this.maps.element.id + '_svg');\n if (toolbar === 'pan' || this.isPanning) {\n svg.setAttribute('class', 'e-maps-panning');\n }\n else {\n svg.setAttribute('class', '');\n }\n };\n Zoom.prototype.applySelection = function (elements, color) {\n if (!elements) {\n return;\n }\n var childElement;\n for (var i = 0; i < elements.childElementCount; i++) {\n childElement = elements.childNodes[i];\n if (childElement.tagName !== 'circle') {\n childElement.setAttribute('fill', color);\n childElement.setAttribute('stroke', color);\n }\n }\n };\n Zoom.prototype.showTooltip = function (e) {\n var text = e.target.id.split('_')[3];\n if (!this.isTouch) {\n createTooltip('EJ2_Map_Toolbar_Tip', this.maps.getLocalizedLabel(text), (e.pageY + 10), (e.pageX + 10), '10px');\n }\n };\n Zoom.prototype.removeTooltip = function () {\n if (getElementByID('EJ2_Map_Toolbar_Tip')) {\n remove(getElementByID('EJ2_Map_Toolbar_Tip'));\n }\n };\n Zoom.prototype.alignToolBar = function () {\n var map = this.maps;\n var padding = 10;\n var element = createElement('div', { id: map.element.id + '_ToolBar', styles: 'position:absolute;z-index:2' });\n var rectSVGObject = map.renderer.createSvg({\n id: map.element.id + '_Zooming_ToolBar', width: 10, height: 10,\n });\n rectSVGObject.appendChild(this.toolBarGroup);\n element.appendChild(rectSVGObject);\n if (getElementByID(map.element.id + '_Secondary_Element')) {\n getElementByID(map.element.id + '_Secondary_Element').appendChild(element);\n }\n var toolBarSize = this.toolBarGroup.getBoundingClientRect();\n rectSVGObject.setAttribute('height', (toolBarSize.height + padding / 2).toString());\n rectSVGObject.setAttribute('width', (toolBarSize.width + padding / 2).toString());\n var size = map.mapAreaRect;\n var x = 0;\n var y = 0;\n switch (map.zoomSettings.verticalAlignment) {\n case 'Near':\n y = size.y;\n break;\n case 'Center':\n y = (size.height / 2) - (toolBarSize.height / 2);\n break;\n case 'Far':\n y = (size.height - toolBarSize.height) - padding;\n break;\n }\n switch (map.zoomSettings.horizontalAlignment) {\n case 'Near':\n x = size.x;\n break;\n case 'Center':\n x = (size.width / 2) - (toolBarSize.width / 2);\n break;\n case 'Far':\n x = (size.width - toolBarSize.width) - padding;\n break;\n }\n element.style.left = x + 'px';\n element.style.top = y + 'px';\n var color = this.maps.zoomSettings.highlightColor;\n var css = ' .e-maps-toolbar:hover > circle { stroke:' + color + '; } .e-maps-toolbar:hover > path { fill: ' + color + ' ; stroke: ' + color + '; }';\n var style = document.createElement('style');\n style.appendChild(document.createTextNode(css));\n element.appendChild(style);\n };\n /**\n * To bind events.\n * @return {void}\n * @private\n */\n Zoom.prototype.wireEvents = function (element, process) {\n EventHandler.add(element, Browser.touchStartEvent, process, this);\n EventHandler.add(element, 'mouseover', this.showTooltip, this);\n EventHandler.add(element, 'mouseout', this.removeTooltip, this);\n };\n Zoom.prototype.mapMouseWheel = function (e) {\n if (this.maps.zoomSettings.enable && this.maps.zoomSettings.mouseWheelZoom) {\n var position = this.getMousePosition(e.pageX, e.pageY);\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var delta = 1;\n var value = (map.isTileMap) ? prevLevel : prevScale;\n if (((position.x > map.mapAreaRect.x) && (position.x < (map.mapAreaRect.x + map.mapAreaRect.width))) &&\n (position.y > map.mapAreaRect.y) && position.y < (map.mapAreaRect.y + map.mapAreaRect.height)) {\n e.preventDefault();\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 'ZoomIn' : 'ZoomOut' : (e.wheelDelta / 120) > 0 ? 'ZoomIn' : 'ZoomOut';\n if (direction === 'ZoomIn') {\n this.performZooming(position, (value + delta), direction);\n }\n else {\n this.performZooming(position, (value - delta), direction);\n }\n }\n }\n };\n Zoom.prototype.doubleClick = function (e) {\n var pageX = e.pageX;\n var pageY = e.pageY;\n var target = e.target;\n if (this.maps.zoomSettings.enable && this.maps.zoomSettings.doubleClickZoom) {\n var position = this.getMousePosition(pageX, pageY);\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var value = (map.isTileMap) ? prevLevel : prevScale;\n if (((position.x > map.mapAreaRect.x) && (position.x < (map.mapAreaRect.x + map.mapAreaRect.width))) &&\n (position.y > map.mapAreaRect.y) && position.y < (map.mapAreaRect.y + map.mapAreaRect.height)) {\n this.performZooming(position, (value + 1), 'ZoomIn');\n }\n }\n };\n Zoom.prototype.mouseDownHandler = function (e) {\n var pageX;\n var pageY;\n var target;\n var touches = null;\n var element = e.target;\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touches = e.touches;\n target = e.target;\n pageX = touches[0].clientX;\n pageY = touches[0].clientY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n this.isPanning = this.panColor === this.selectionColor ? true : this.zoomColor !== this.selectionColor;\n this.rectZoomingStart = ((!this.isPanning) && this.maps.zoomSettings.enable);\n this.mouseDownPoints = this.getMousePosition(pageX, pageY);\n if (this.isTouch) {\n this.firstMove = true;\n this.pinchFactor = this.maps.scale;\n this.fingers = touches.length;\n }\n };\n Zoom.prototype.mouseMoveHandler = function (e) {\n var pageX;\n var pageY;\n var map = this.maps;\n var touchArg;\n var target;\n var touches = null;\n var zoom = this.maps.zoomSettings;\n if (e.type === 'touchmove') {\n this.isTouch = true;\n target = e.target;\n touches = e.touches;\n pageX = touches[0].clientX;\n pageY = touches[0].clientY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n if (getElementByID(map.element.id + '_Zooming_KitCollection')) {\n if (target.id.indexOf('_Zooming_') > -1) {\n getElementByID(map.element.id + '_Zooming_KitCollection').setAttribute('opacity', '1');\n }\n else {\n getElementByID(map.element.id + '_Zooming_KitCollection').setAttribute('opacity', '0.3');\n }\n }\n if (this.isTouch) {\n if (this.maps.zoomSettings.pinchZooming) {\n if (this.firstMove && touches.length === 2) {\n this.rectZoomingStart = false;\n this.updateInteraction();\n this.touchStartList = targetTouches(e);\n }\n else if (this.touchStartList.length === 2 && touches.length === 2) {\n this.touchMoveList = targetTouches(e);\n e.preventDefault();\n this.rectZoomingStart = false;\n this.performPinchZooming(e);\n }\n this.firstMove = false;\n }\n }\n this.mouseMovePoints = this.getMousePosition(pageX, pageY);\n var targetId = e.target['id'];\n var targetEle = e.target;\n if (zoom.enable && this.isPanning) {\n e.preventDefault();\n this.maps.element.style.cursor = 'pointer';\n this.panning();\n }\n if (this.isTouch ? (touches.length === 1 && this.rectZoomingStart) : this.rectZoomingStart) {\n e.preventDefault();\n this.drawZoomRectangle();\n }\n };\n Zoom.prototype.mouseUpHandler = function (e) {\n var map = this.maps;\n this.rectZoomingStart = false;\n this.isPanning = false;\n this.isTouch = false;\n this.touchStartList = [];\n this.touchMoveList = [];\n this.lastScale = 1;\n this.maps.element.style.cursor = 'auto';\n var zoomRectElement = getElementByID(this.maps.element.id + '_Selection_Rect_Zooming');\n if (zoomRectElement && this.maps.zoomSettings.enable) {\n remove(zoomRectElement);\n this.performRectZooming();\n }\n };\n Zoom.prototype.mouseCancelHandler = function (e) {\n this.isPanning = false;\n this.isTouch = false;\n this.rectZoomingStart = false;\n var zoomRectElement = getElementByID(this.maps.element.id + '_Selection_Rect_Zooming');\n if (zoomRectElement && this.maps.zoomSettings.enable) {\n remove(zoomRectElement);\n this.performRectZooming();\n }\n };\n /**\n * To handle the click event for maps.\n * @param e\n */\n Zoom.prototype.click = function (e) {\n var map = this.maps;\n if (map.zoomSettings.zoomOnClick && e.target.id.indexOf('_ShapeIndex_') > -1 && !map.zoomSettings.doubleClickZoom\n && (this.zoomColor === this.selectionColor && this.zoomElements)) {\n var bounds = e.target.getBBox();\n var boundwidth = bounds.width;\n var boundHeight = bounds.height;\n var layerScale = void 0;\n var baseScale = 1;\n var availWidth = map.availableSize.width;\n var availHeight = map.availableSize.height;\n layerScale = ((availWidth - 100) / (availHeight - 100) > boundwidth / boundHeight) ? (availHeight - 100) / boundHeight :\n (availWidth - 100) / boundwidth;\n var zoomFactor = (layerScale - baseScale + 1);\n var leftPos = ((availWidth / 2) - ((boundwidth * map.scale) / 2)) / layerScale;\n var topPos = ((availHeight / 2) - ((boundHeight * map.scale) / 2)) / layerScale;\n var translatePointX = (-bounds.x) + leftPos;\n var translatePointY = (-bounds.y) + topPos;\n map.previousScale = map.scale;\n map.previousPoint = map.translatePoint;\n map.scale = layerScale;\n map.translatePoint = { x: translatePointX, y: translatePointY };\n this.applyTransform(true);\n }\n };\n Zoom.prototype.getMousePosition = function (pageX, pageY) {\n var map = this.maps;\n var elementRect = map.element.getBoundingClientRect();\n var pageXOffset = map.element.ownerDocument.defaultView.pageXOffset;\n var pageYOffset = map.element.ownerDocument.defaultView.pageYOffset;\n var clientTop = map.element.ownerDocument.documentElement.clientTop;\n var clientLeft = map.element.ownerDocument.documentElement.clientLeft;\n var positionX = elementRect.left + pageXOffset - clientLeft;\n var positionY = elementRect.top + pageYOffset - clientTop;\n return new Point((pageX - positionX), (pageY - positionY));\n };\n Zoom.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n EventHandler.add(this.maps.element, this.wheelEvent, this.mapMouseWheel, this);\n EventHandler.add(this.maps.element, 'click', this.click, this);\n EventHandler.add(this.maps.element, 'dblclick', this.doubleClick, this);\n this.maps.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.maps.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.maps.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n EventHandler.add(this.maps.element, this.cancelEvent, this.mouseCancelHandler, this);\n };\n Zoom.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n EventHandler.remove(this.maps.element, this.wheelEvent, this.mapMouseWheel);\n EventHandler.remove(this.maps.element, 'click', this.click);\n EventHandler.remove(this.maps.element, 'dblclick', this.doubleClick);\n this.maps.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.maps.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.maps.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.maps.off(this.cancelEvent, this.mouseCancelHandler);\n };\n /**\n * Get module name.\n */\n Zoom.prototype.getModuleName = function () {\n return 'Zoom';\n };\n /**\n * To destroy the zoom.\n * @return {void}\n * @private\n */\n Zoom.prototype.destroy = function (maps) {\n this.removeEventListener();\n /**\n * Destroy method performed here\n */\n };\n return Zoom;\n}());\nexport { Zoom };\n","import * as index from '@syncfusion/ej2-maps';\nindex.Maps.Inject( index.Bubble,index.Legend,index.Marker,index.Highlight,index.Selection,index.MapsTooltip,index.Zoom,index.DataLabel,index.NavigationLine,index.Annotations);\nexport * from '@syncfusion/ej2-maps';\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges, Animation } from '@syncfusion/ej2-base';\nimport { Browser, isNullOrUndefined as isNOU, getUniqueID, formatUnit, EventHandler } from '@syncfusion/ej2-base';\nimport { Collection, Complex, setStyleAttribute, Event, detach } from '@syncfusion/ej2-base';\nimport { attributes, extend, closest, compile as templateCompiler, classList, isUndefined } from '@syncfusion/ej2-base';\nimport { Touch } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getZindexPartial } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-toast';\nvar CONTAINER = 'e-toast-container';\nvar TITLE = 'e-toast-title';\nvar WIDTHFULL = 'e-toast-full-width';\nvar CONTENT = 'e-toast-content';\nvar MESSAGE = 'e-toast-message';\nvar ICON = 'e-toast-icon';\nvar PROGRESS = 'e-toast-progress';\nvar ACTIOBUTTONS = 'e-toast-actions';\nvar CLOSEBTN = 'e-toast-close-icon';\nvar RTL = 'e-rtl';\n/**\n * An object that is used to configure the Toast X Y positions.\n */\nvar ToastPosition = /** @class */ (function (_super) {\n __extends(ToastPosition, _super);\n function ToastPosition() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Left')\n ], ToastPosition.prototype, \"X\", void 0);\n __decorate([\n Property('Top')\n ], ToastPosition.prototype, \"Y\", void 0);\n return ToastPosition;\n}(ChildProperty));\nexport { ToastPosition };\n/**\n * An object that is used to configure the action button model properties and event.\n */\nvar ButtonModelProps = /** @class */ (function (_super) {\n __extends(ButtonModelProps, _super);\n function ButtonModelProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ButtonModelProps.prototype, \"model\", void 0);\n __decorate([\n Property(null)\n ], ButtonModelProps.prototype, \"click\", void 0);\n return ButtonModelProps;\n}(ChildProperty));\nexport { ButtonModelProps };\n/**\n * An object that is used to configure the animation object of Toast.\n */\nvar ToastAnimations = /** @class */ (function (_super) {\n __extends(ToastAnimations, _super);\n function ToastAnimations() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('FadeIn')\n ], ToastAnimations.prototype, \"effect\", void 0);\n __decorate([\n Property(600)\n ], ToastAnimations.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], ToastAnimations.prototype, \"easing\", void 0);\n return ToastAnimations;\n}(ChildProperty));\nexport { ToastAnimations };\n/**\n * An object that is used to configure the show/hide animation settings of Toast.\n */\nvar ToastAnimationSettings = /** @class */ (function (_super) {\n __extends(ToastAnimationSettings, _super);\n function ToastAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'FadeIn', duration: 600, easing: 'ease' }, ToastAnimations)\n ], ToastAnimationSettings.prototype, \"show\", void 0);\n __decorate([\n Complex({ effect: 'FadeOut', duration: 600, easing: 'ease' }, ToastAnimations)\n ], ToastAnimationSettings.prototype, \"hide\", void 0);\n return ToastAnimationSettings;\n}(ChildProperty));\nexport { ToastAnimationSettings };\n/**\n * The Toast is a notification pop-up that showing on desired position which can provide an information to the user.\n * * ```html\n *
    \n * \n * ```\n */\nvar Toast = /** @class */ (function (_super) {\n __extends(Toast, _super);\n /**\n * Initializes a new instance of the Toast class.\n * @param options - Specifies Toast model properties as options.\n * @param element - Specifies the element that is rendered as a Toast.\n */\n function Toast(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Gets the Component module name.\n * @private\n */\n Toast.prototype.getModuleName = function () {\n return 'toast';\n };\n /**\n * Gets the persisted state properties of the Component.\n */\n Toast.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers, attributes and classes.\n */\n Toast.prototype.destroy = function () {\n this.hide('All');\n this.element.classList.remove(CONTAINER);\n setStyleAttribute(this.element, { 'position': '', 'z-index': '' });\n _super.prototype.destroy.call(this);\n };\n /**\n * Initialize the event handler\n * @private\n */\n Toast.prototype.preRender = function () {\n //There is no event handler\n this.isDevice = Browser.isDevice;\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n };\n /**\n * Initialize the component rendering\n * @private\n */\n Toast.prototype.render = function () {\n this.progressObj = [];\n this.intervalId = [];\n this.titleTemplate = null;\n this.contentTemplate = null;\n this.toastTemplate = null;\n if (this.isDevice && screen.width < 768) {\n new Touch(this.element, { swipe: this.swipeHandler.bind(this) });\n }\n };\n /**\n * To show Toast element on a document with the relative position.\n * @param {ToastModel} toastObj? - To show Toast element on screen.\n * @returns void\n */\n Toast.prototype.show = function (toastObj) {\n if (!isNOU(toastObj)) {\n this.templateChanges(toastObj);\n extend(this, this, toastObj);\n }\n if (isNOU(this.toastContainer)) {\n this.toastContainer = this.getContainer();\n var target = typeof (this.target) === 'string' ? document.querySelector(this.target) : this.target;\n if (isNOU(target)) {\n return;\n }\n if (target.tagName === 'BODY') {\n this.toastContainer.style.position = 'fixed';\n }\n else {\n this.toastContainer.style.position = 'absolute';\n target.style.position = 'relative';\n }\n this.setPositioning(this.position);\n target.appendChild(this.toastContainer);\n }\n this.toastEle = this.createElement('div', { className: ROOT, id: getUniqueID('toast') });\n this.setWidthHeight();\n this.setCSSClass(this.cssClass);\n (isNOU(this.template) || this.template === '') ? this.personalizeToast() : this.templateRendering();\n this.setProgress();\n this.setCloseButton();\n this.setAria();\n this.appendToTarget();\n };\n Toast.prototype.swipeHandler = function (e) {\n var toastEle = closest(e.originalEvent.target, '.' + ROOT + ':not(.' + CONTAINER + ')');\n var hideAnimation = this.animation.hide.effect;\n if (!isNOU(toastEle)) {\n if (e.swipeDirection === 'Right') {\n this.animation.hide.effect = 'SlideRightOut';\n this.hide(toastEle);\n }\n else if (e.swipeDirection === 'Left') {\n this.animation.hide.effect = 'SlideLeftOut';\n this.hide(toastEle);\n }\n this.animation.hide.effect = hideAnimation;\n }\n };\n Toast.prototype.templateChanges = function (toastObj) {\n if (!isUndefined(toastObj.content) && !isNOU(this.contentTemplate) && this.content !== toastObj.content) {\n this.clearContentTemplate();\n }\n if (!isUndefined(toastObj.title) && !isNOU(this.titleTemplate) && this.title !== toastObj.title) {\n this.clearTitleTemplate();\n }\n if (!isUndefined(toastObj.template) && !isNOU(this.toastTemplate) && this.template !== toastObj.template) {\n this.clearToastTemplate();\n }\n };\n Toast.prototype.setCSSClass = function (cssClass) {\n if (!isNOU(cssClass)) {\n var split = cssClass.indexOf(',') !== -1 ? ',' : ' ';\n classList(this.toastEle, cssClass.split(split), []);\n }\n };\n Toast.prototype.setWidthHeight = function () {\n if (this.width === '300px') {\n this.toastEle.style.width = formatUnit(this.width);\n }\n else if (this.width === '100%') {\n this.toastContainer.classList.add(WIDTHFULL);\n }\n else {\n this.toastEle.style.width = formatUnit(this.width);\n this.toastContainer.classList.remove(WIDTHFULL);\n }\n this.toastEle.style.height = formatUnit(this.height);\n };\n Toast.prototype.templateRendering = function () {\n this.fetchEle(this.toastEle, this.template, 'template');\n };\n /**\n * To Hide Toast element on a document.\n * To Hide all toast element when passing 'All'.\n * @param {HTMLElement| Element| string} element? - To Hide Toast element on screen.\n * @returns void\n */\n Toast.prototype.hide = function (element) {\n if (isNOU(this.toastContainer) || this.toastContainer.childElementCount === 0) {\n return;\n }\n if (typeof element === 'string' && element === 'All') {\n for (var i = 0; i < this.toastContainer.childElementCount; i++) {\n this.destroyToast(this.toastContainer.children[i]);\n }\n return;\n }\n if (isNOU(element)) {\n element = (this.newestOnTop ? this.toastContainer.lastElementChild : this.toastContainer.firstElementChild);\n }\n this.destroyToast(element);\n };\n Toast.prototype.fetchEle = function (ele, value, prob) {\n var templateFn;\n var tempVar;\n var tempArray;\n prob === 'title' ? tempVar = this.titleTemplate : prob === 'content' ? tempVar = this.contentTemplate : tempVar = this.toastTemplate;\n if (!isNOU(tempVar)) {\n ele.appendChild(tempVar.cloneNode(true));\n return ele;\n }\n try {\n if (document.querySelectorAll(value).length > 0) {\n var elem = document.querySelector(value);\n ele.appendChild(elem);\n elem.style.display = '';\n var clo = elem.cloneNode(true);\n prob === 'title' ? this.titleTemplate = clo : prob === 'content' ? this.contentTemplate = clo : this.toastTemplate = clo;\n }\n }\n catch (e) {\n templateFn = templateCompiler(value);\n }\n if (!isNOU(templateFn)) {\n tempArray = templateFn({}, this, prob);\n }\n if (!isNOU(tempArray) && tempArray.length > 0 && !(isNOU(tempArray[0].tagName) && tempArray.length === 1)) {\n [].slice.call(tempArray).forEach(function (el) {\n if (!isNOU(el.tagName)) {\n el.style.display = '';\n }\n ele.appendChild(el);\n });\n }\n else if (ele.childElementCount === 0) {\n ele.innerHTML = value;\n }\n return ele;\n };\n Toast.prototype.clearProgress = function (intervalId) {\n if (!isNOU(this.intervalId[intervalId])) {\n clearInterval(this.intervalId[intervalId]);\n delete this.intervalId[intervalId];\n }\n if (!isNOU(this.progressObj[intervalId])) {\n clearInterval(this.progressObj[intervalId].intervalId);\n delete this.progressObj[intervalId];\n }\n };\n Toast.prototype.clearContainerPos = function () {\n var _this = this;\n if (this.customPosition) {\n setStyleAttribute(this.toastContainer, { 'left': '', 'top': '' });\n this.toastContainer = null;\n this.customPosition = false;\n }\n else {\n [ROOT + '-top-left',\n ROOT + '-top-right',\n ROOT + '-bottom-left',\n ROOT + '-bottom-right',\n ROOT + '-bottom-center',\n ROOT + '-top-center',\n ROOT + '-full-width'].forEach(function (pos) {\n if (!isNOU(_this.toastContainer) && _this.toastContainer.classList.contains(pos)) {\n _this.toastContainer.classList.remove(pos);\n }\n });\n this.toastContainer = null;\n }\n if (!isNOU(this.titleTemplate)) {\n this.clearTitleTemplate();\n }\n if (!isNOU(this.contentTemplate)) {\n this.clearContentTemplate();\n }\n if (!isNOU(this.toastTemplate)) {\n this.clearToastTemplate();\n }\n };\n Toast.prototype.clearTitleTemplate = function () {\n this.titleTemplate.style.display = 'none';\n document.body.appendChild(this.titleTemplate);\n this.titleTemplate = null;\n };\n Toast.prototype.clearContentTemplate = function () {\n this.contentTemplate.style.display = 'none';\n document.body.appendChild(this.contentTemplate);\n this.contentTemplate = null;\n };\n Toast.prototype.clearToastTemplate = function () {\n this.toastTemplate.style.display = 'none';\n document.body.appendChild(this.toastTemplate);\n this.toastTemplate = null;\n };\n Toast.prototype.destroyToast = function (toastEle) {\n var _this = this;\n var hideAnimate = this.animation.hide;\n var animate = {\n duration: hideAnimate.duration, name: hideAnimate.effect, timingFunction: hideAnimate.easing\n };\n var intervalId = parseInt(toastEle.id.split('toast_')[1], 10);\n var toastClose = {\n toastContainer: this.toastContainer,\n toastObj: this,\n };\n if (!isNOU(this.progressObj[intervalId]) && !isNOU(toastEle.querySelector('.' + PROGRESS))) {\n this.progressObj[intervalId].progressEle.style.width = '0%';\n }\n animate.end = function () {\n _this.clearProgress(intervalId);\n detach(toastEle);\n _this.trigger('close', toastClose);\n if (_this.toastContainer.childElementCount === 0) {\n _this.clearContainerPos();\n }\n };\n new Animation({}).animate(toastEle, animate);\n };\n Toast.prototype.personalizeToast = function () {\n this.setIcon();\n this.setTitle();\n this.setContent();\n this.actionButtons();\n };\n Toast.prototype.setAria = function () {\n attributes(this.toastEle, { 'role': 'alert' });\n };\n Toast.prototype.setPositioning = function (pos) {\n if (typeof (pos.X) === 'number' || typeof (pos.Y) === 'number' || pos.X.indexOf('%') !== -1 || pos.Y.indexOf('%') !== -1) {\n setStyleAttribute(this.toastContainer, { 'left': formatUnit(pos.X), 'top': formatUnit(pos.Y) });\n this.customPosition = true;\n }\n else {\n this.toastContainer.classList.add(ROOT + '-' + pos.Y.toString().toLowerCase() + '-' + pos.X.toString().toLowerCase());\n }\n };\n Toast.prototype.setCloseButton = function () {\n if (!this.showCloseButton) {\n return;\n }\n var closeBtn = this.createElement('div', { className: CLOSEBTN + ' e-icons ' });\n this.toastEle.appendChild(closeBtn);\n };\n Toast.prototype.setProgress = function () {\n if (this.timeOut > 0) {\n var id = parseInt(this.toastEle.id.split('toast_')[1], 10);\n this.intervalId[id] = window.setTimeout(this.destroyToast.bind(this, this.toastEle), this.timeOut);\n this.progressObj[id] = { hideEta: null, intervalId: null, maxHideTime: null, element: null, timeOutId: null, progressEle: null };\n this.progressObj[id].maxHideTime = parseFloat(this.timeOut + '');\n this.progressObj[id].hideEta = new Date().getTime() + this.progressObj[id].maxHideTime;\n this.progressObj[id].element = this.toastEle;\n if (this.extendedTimeout > 0) {\n EventHandler.add(this.toastEle, 'mouseover', this.toastHoverAction.bind(this, id));\n EventHandler.add(this.toastEle, 'mouseleave', this.delayedToastProgress.bind(this, id));\n this.progressObj[id].timeOutId = this.intervalId[id];\n }\n if (this.showProgressBar) {\n this.progressBarEle = this.createElement('div', { className: PROGRESS });\n this.toastEle.insertBefore(this.progressBarEle, this.toastEle.children[0]);\n this.progressObj[id].intervalId = setInterval(this.updateProgressBar.bind(this, this.progressObj[id]), 10);\n this.progressObj[id].progressEle = this.progressBarEle;\n }\n }\n };\n Toast.prototype.toastHoverAction = function (id) {\n clearTimeout(this.progressObj[id].timeOutId);\n clearInterval(this.progressObj[id].intervalId);\n this.progressObj[id].hideEta = 0;\n var toastEle = this.progressObj[id].element;\n if (!isNOU(toastEle.querySelector('.' + PROGRESS))) {\n this.progressObj[id].progressEle.style.width = '0%';\n }\n };\n Toast.prototype.delayedToastProgress = function (id) {\n var progress = this.progressObj[id];\n var toastEle = progress.element;\n progress.timeOutId = window.setTimeout(this.destroyToast.bind(this, toastEle), this.extendedTimeout);\n progress.maxHideTime = parseFloat(this.extendedTimeout + '');\n progress.hideEta = new Date().getTime() + progress.maxHideTime;\n if (!isNOU(toastEle.querySelector('.' + PROGRESS))) {\n progress.intervalId = setInterval(this.updateProgressBar.bind(this, progress), 10);\n }\n };\n Toast.prototype.updateProgressBar = function (progressObj) {\n var percentage = ((progressObj.hideEta - (new Date().getTime())) / progressObj.maxHideTime) * 100;\n progressObj.progressEle.style.width = percentage + '%';\n };\n Toast.prototype.setIcon = function () {\n if (isNOU(this.icon) || this.icon.length === 0) {\n return;\n }\n var iconEle = this.createElement('div', { className: ICON + ' e-icons ' + this.icon });\n this.toastEle.appendChild(iconEle);\n };\n Toast.prototype.setTitle = function () {\n if (isNOU(this.title)) {\n return;\n }\n var titleEle = this.createElement('div', { className: TITLE });\n titleEle = this.fetchEle(titleEle, this.title, 'title');\n var msgContainer = this.createElement('div', { className: MESSAGE });\n msgContainer.appendChild(titleEle);\n this.toastEle.appendChild(msgContainer);\n };\n Toast.prototype.setContent = function () {\n var contentEle = this.createElement('div', { className: CONTENT });\n var ele = this.element;\n if (isNOU(this.content) || this.content === '') {\n var isContent = this.element.innerHTML.replace(/\\s/g, '') !== '';\n if ((ele.children.length > 0 || isContent) && !ele.firstElementChild.classList.contains(ROOT)) {\n this.innerEle = document.createDocumentFragment();\n var tempEle_1 = this.createElement('div');\n while (ele.childNodes.length !== 0) {\n this.innerEle.appendChild(this.element.childNodes[0]);\n }\n contentEle.appendChild(this.innerEle);\n [].slice.call(contentEle.children).forEach(function (ele) {\n tempEle_1.appendChild(ele.cloneNode(true));\n });\n this.content = tempEle_1;\n this.appendMessageContainer(contentEle);\n }\n }\n else {\n if (typeof (this.content) === 'object' && !isNOU(this.content.tagName)) {\n contentEle.appendChild(this.content);\n this.content = this.content.cloneNode(true);\n this.appendMessageContainer(contentEle);\n }\n else {\n contentEle = this.fetchEle(contentEle, this.content, 'content');\n this.appendMessageContainer(contentEle);\n }\n }\n };\n Toast.prototype.appendMessageContainer = function (element) {\n if (this.toastEle.querySelectorAll('.' + MESSAGE).length > 0) {\n this.toastEle.querySelector('.' + MESSAGE).appendChild(element);\n }\n else {\n var msgContainer = this.createElement('div', { className: MESSAGE });\n msgContainer.appendChild(element);\n this.toastEle.appendChild(msgContainer);\n }\n };\n Toast.prototype.actionButtons = function () {\n var _this = this;\n var actionBtnContainer = this.createElement('div', { className: ACTIOBUTTONS });\n [].slice.call(this.buttons).forEach(function (actionBtn) {\n if (isNOU(actionBtn.model)) {\n return;\n }\n var btnDom = _this.createElement('button');\n btnDom.setAttribute('type', 'button');\n if (isNOU(actionBtn.model.cssClass) || actionBtn.model.cssClass.length === 0) {\n actionBtn.model.cssClass = 'e-primary';\n }\n btnDom.classList.add('e-small');\n new Button(actionBtn.model, btnDom);\n if (!isNOU(actionBtn.click) && typeof (actionBtn.click) === 'function') {\n EventHandler.add(btnDom, 'click', actionBtn.click);\n }\n actionBtnContainer.appendChild(btnDom);\n });\n if (actionBtnContainer.childElementCount > 0) {\n this.appendMessageContainer(actionBtnContainer);\n }\n };\n Toast.prototype.appendToTarget = function () {\n var toastBeforeOpen = {\n toastObj: this,\n element: this.toastEle,\n cancel: false\n };\n this.trigger('beforeOpen', toastBeforeOpen);\n if (toastBeforeOpen.cancel) {\n return;\n }\n this.toastEle.style.display = 'none';\n if (this.newestOnTop && this.toastContainer.childElementCount !== 0) {\n this.toastContainer.insertBefore(this.toastEle, this.toastContainer.children[0]);\n }\n else {\n this.toastContainer.appendChild(this.toastEle);\n }\n EventHandler.add(this.toastEle, 'click', this.clickHandler, this);\n this.toastContainer.style.zIndex = getZindexPartial(this.toastContainer) + '';\n this.displayToast(this.toastEle);\n };\n Toast.prototype.clickHandler = function (e) {\n e.stopPropagation();\n var target = e.target;\n var toastEle = closest(target, '.' + ROOT);\n var clickArgs = {\n element: toastEle, cancel: false, clickToClose: false, originalEvent: e, toastObj: this\n };\n var isCloseIcon = target.classList.contains(CLOSEBTN);\n this.trigger('click', clickArgs);\n if ((isCloseIcon && !clickArgs.cancel) || clickArgs.clickToClose) {\n this.destroyToast(toastEle);\n }\n };\n Toast.prototype.displayToast = function (toastEle) {\n var _this = this;\n var showAnimate = this.animation.show;\n var animate = {\n duration: showAnimate.duration, name: showAnimate.effect, timingFunction: showAnimate.easing\n };\n var toastOpen = {\n toastObj: this,\n element: this.toastEle,\n };\n animate.begin = function () {\n toastEle.style.display = '';\n };\n animate.end = function () {\n _this.trigger('open', toastOpen);\n };\n new Animation(animate).animate(toastEle);\n };\n Toast.prototype.getContainer = function () {\n this.element.classList.add(CONTAINER);\n return this.element;\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Toast.prototype.onPropertyChanged = function (newProp, oldProp) {\n var container = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n newProp.enableRtl ? container.classList.add(RTL) : container.classList.remove(RTL);\n break;\n }\n }\n };\n __decorate([\n Property((Browser.isDevice && screen.width < 768) ? '100%' : '300px')\n ], Toast.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toast.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"title\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"content\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"icon\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Toast.prototype, \"newestOnTop\", void 0);\n __decorate([\n Property(false)\n ], Toast.prototype, \"showCloseButton\", void 0);\n __decorate([\n Property(false)\n ], Toast.prototype, \"showProgressBar\", void 0);\n __decorate([\n Property(5000)\n ], Toast.prototype, \"timeOut\", void 0);\n __decorate([\n Property(1000)\n ], Toast.prototype, \"extendedTimeout\", void 0);\n __decorate([\n Complex({}, ToastAnimationSettings)\n ], Toast.prototype, \"animation\", void 0);\n __decorate([\n Complex({}, ToastPosition)\n ], Toast.prototype, \"position\", void 0);\n __decorate([\n Collection([{}], ButtonModelProps)\n ], Toast.prototype, \"buttons\", void 0);\n __decorate([\n Property(document.body)\n ], Toast.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"click\", void 0);\n Toast = __decorate([\n NotifyPropertyChanges\n ], Toast);\n return Toast;\n}(Component));\nexport { Toast };\n","/**\n * This is a file to perform common utility for OLAP and Relational datasource\n * @hidden\n */\nvar PivotUtil = /** @class */ (function () {\n function PivotUtil() {\n }\n PivotUtil.getType = function (value) {\n var val;\n val = (value && value.getDay) ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n return val;\n };\n PivotUtil.resetTime = function (date) {\n date.setHours(0, 0, 0, 0);\n return date;\n };\n return PivotUtil;\n}());\nexport { PivotUtil };\n","import { extend, Internationalization } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { PivotUtil } from './util';\n/**\n * PivotEngine is used to manipulate the relational or Multi-Dimensional data as pivoting values.\n */\n/** @hidden */\nvar PivotEngine = /** @class */ (function () {\n /**\n * Constructor for PivotEngine class\n * @param {DataOptions} dataSource?\n * @param {string} mode?\n * @hidden\n */\n /* tslint:disable:align */\n function PivotEngine(dataSource, mode, savedFieldList, pageSettings, enableValueSoring) {\n /** @hidden */\n this.formatFields = {};\n /** @hidden */\n this.calculatedFields = {};\n /** @hidden */\n this.calculatedFormulas = {};\n /** @hidden */\n this.valueAxis = 0;\n /** @hidden */\n this.saveDataHeaders = {};\n /** @hidden */\n this.columnCount = 0;\n /** @hidden */\n this.rowCount = 0;\n /** @hidden */\n this.colFirstLvl = 0;\n /** @hidden */\n this.rowFirstLvl = 0;\n /** @hidden */\n this.rowStartPos = 0;\n /** @hidden */\n this.colStartPos = 0;\n /** @hidden */\n this.enableValueSorting = false;\n /** @hidden */\n this.headerCollection = { rowHeaders: [], columnHeaders: [], rowHeadersCount: 0, columnHeadersCount: 0 };\n this.valueMatrix = [];\n this.indexMatrix = [];\n this.rMembers = [];\n this.cMembers = [];\n this.memberCnt = -1;\n this.pageInLimit = false;\n this.endPos = 0;\n this.colHdrBufferCalculated = false;\n this.colValuesLength = 1;\n this.rowValuesLength = 1;\n this.slicedHeaders = [];\n this.fieldFilterMem = {};\n this.filterPosObj = {};\n /* tslint:enable:align */\n var fields;\n var val;\n var filterRw;\n this.globalize = new Internationalization();\n this.enableSort = dataSource.enableSorting;\n this.allowValueFilter = dataSource.allowValueFilter;\n this.isValueFilterEnabled = false;\n this.enableValueSorting = enableValueSoring;\n fields = dataSource.data[0];\n this.fields = Object.keys(fields);\n this.rows = dataSource.rows ? dataSource.rows : [];\n this.columns = dataSource.columns ? dataSource.columns : [];\n this.filters = dataSource.filters ? dataSource.filters : [];\n this.formats = dataSource.formatSettings ? dataSource.formatSettings : [];\n this.values = dataSource.values ? dataSource.values : [];\n this.calculatedFieldSettings = dataSource.calculatedFieldSettings ? dataSource.calculatedFieldSettings : [];\n this.enableSort = dataSource.enableSorting === undefined ? true : dataSource.enableSorting;\n this.validateFilters(dataSource);\n this.isExpandAll = (this.isValueFiltersAvail && dataSource.allowValueFilter) ? true : dataSource.expandAll;\n this.drilledMembers =\n dataSource.drilledMembers ? (this.isValueFiltersAvail && dataSource.allowValueFilter) ? [] : dataSource.drilledMembers : [];\n this.isMutiMeasures = this.values.length > 1 ? true : false;\n this.valueAxis = dataSource.valueAxis === 'row' ? 1 : 0;\n this.rowValuesLength = this.valueAxis === 1 ? this.values.length : 1;\n this.colValuesLength = this.valueAxis === 0 ? this.values.length : 1;\n this.valueSortSettings = dataSource.valueSortSettings ||\n { sortOrder: 'None', headerDelimiter: '.', headerText: '', columnIndex: undefined };\n this.valueSortData = [];\n this.savedFieldList = savedFieldList;\n this.getFieldList(fields, this.enableSort, dataSource.allowValueFilter);\n this.fillFieldMembers(dataSource.data, this.indexMatrix);\n this.updateSortSettings(dataSource.sortSettings, this.enableSort);\n this.pageSettings = pageSettings ? pageSettings : this.pageSettings;\n this.valueMatrix = this.generateValueMatrix(dataSource.data);\n this.filterMembers = [];\n this.updateFilterMembers(dataSource);\n this.generateGridData(dataSource);\n return this;\n }\n PivotEngine.prototype.getFormattedFields = function (fields) {\n var cnt = this.formats.length;\n while (cnt--) {\n this.formatFields[this.formats[cnt].name] = this.formats[cnt];\n // for (let len: number = 0, lnt: number = fields.length; len < lnt; len++) {\n // if (fields[len] && fields[len].name === this.formats[cnt].name) {\n // this.formatFields[fields[len].name] = this.formats[cnt];\n // }\n // }\n }\n };\n PivotEngine.prototype.getFieldList = function (fields, isSort, isValueFilteringEnabled) {\n var type;\n var keys = this.fields;\n var dataFields = extend([], this.rows, null, true);\n dataFields = dataFields.concat(this.columns, this.values, this.filters);\n this.getFormattedFields(dataFields);\n this.getCalculatedField(keys);\n var len = keys.length;\n if (this.savedFieldList) {\n this.fieldList = this.savedFieldList;\n while (len--) { /** while is used for better performance than for */\n var key = keys[len];\n if (this.fieldList[key]) {\n this.fieldList[key].isSelected = false;\n this.fieldList[key].index = len;\n this.fieldList[key].filter = [];\n this.fieldList[key].isExcelFilter = false;\n if (this.isValueFiltersAvail && isValueFilteringEnabled) {\n this.fieldList[key].dateMember = [];\n this.fieldList[key].formattedMembers = {};\n this.fieldList[key].members = {};\n }\n }\n else {\n this.fieldList[key] = {\n id: key,\n caption: key,\n type: (type === undefined || type === 'undefined') ? 'number' : type,\n index: len,\n filter: [],\n sort: isSort ? 'Ascending' : 'None',\n isSelected: false\n };\n }\n }\n }\n else {\n while (len--) { /** while is used for better performance than for */\n var key = keys[len];\n type = PivotUtil.getType(fields[key]);\n if (!this.fieldList) {\n this.fieldList = {};\n }\n this.fieldList[key] = {\n id: key,\n caption: key,\n type: (type === undefined || type === 'undefined') ? 'number' : type,\n index: len,\n filter: [],\n sort: isSort ? 'Ascending' : 'None',\n isSelected: false\n };\n }\n }\n this.updateTreeViewData(dataFields);\n };\n PivotEngine.prototype.updateFieldList = function (savedFieldList) {\n var keys = this.fields;\n var len = keys.length;\n while (len--) { /** while is used for better performance than for */\n this.fieldList[keys[len]].isExcelFilter = savedFieldList[keys[len]].isExcelFilter;\n }\n };\n PivotEngine.prototype.updateTreeViewData = function (fields) {\n var cnt = fields.length;\n var lnt = this.calculatedFieldSettings.length;\n while (cnt--) {\n if (this.fieldList[fields[cnt].name]) {\n this.fieldList[fields[cnt].name].caption = fields[cnt].caption ? fields[cnt].caption : fields[cnt].name;\n this.fieldList[fields[cnt].name].isSelected = true;\n this.fieldList[fields[cnt].name].aggregateType = fields[cnt].type;\n this.fieldList[fields[cnt].name].showNoDataItems = fields[cnt].showNoDataItems;\n }\n }\n while (lnt--) {\n this.fieldList[this.calculatedFieldSettings[lnt].name].aggregateType = 'CalculatedField';\n this.fieldList[this.calculatedFieldSettings[lnt].name].formula = this.calculatedFieldSettings[lnt].formula;\n }\n };\n PivotEngine.prototype.getCalculatedField = function (keys) {\n for (var _i = 0, _a = this.calculatedFieldSettings; _i < _a.length; _i++) {\n var field = _a[_i];\n this.calculatedFields[field.name] = extend({}, field, null, true);\n this.calculatedFields[field.name].actualFormula = field.formula;\n }\n var fieldKeys = Object.keys(this.calculatedFields);\n for (var calc = 0, cnt = fieldKeys.length; calc < cnt; calc++) {\n var field = this.calculatedFields[fieldKeys[calc]];\n var calcProperties = field.properties;\n var actualFormula = (calcProperties ? calcProperties.formula : field.formula).replace(/ +/g, '');\n var formula = actualFormula.replace(/\"/g, '');\n field.formula = formula.indexOf('^') > -1 ? this.powerFunction(formula) : formula;\n field.name = calcProperties ? calcProperties.name : field.name;\n keys.push(field.name);\n var formulaType = actualFormula.split('\\\"');\n for (var len = 0, lmt = formulaType.length; len < lmt; len++) {\n var type = formulaType[len];\n var aggregateValue = type.split(/[ .:;?!~,`\"&|()<>{}\\[\\]\\r\\n/\\\\]+/);\n if (['Sum', 'Count', 'Min', 'Max', 'Avg'].indexOf(aggregateValue[0]) !== -1) {\n var index = keys.indexOf(aggregateValue[1]);\n if (!this.calculatedFormulas[field.name]) {\n this.calculatedFormulas[field.name] = [{\n index: index,\n type: aggregateValue[0],\n formula: type,\n }];\n }\n else {\n this.calculatedFormulas[field.name].push({\n index: index,\n type: aggregateValue[0],\n formula: type,\n });\n }\n }\n }\n }\n };\n PivotEngine.prototype.validateFilters = function (data) {\n this.isValueFiltersAvail = false;\n var filterElements = data.filterSettings ? data.filterSettings : [];\n var dataFields = extend([], this.rows, null, true);\n dataFields = dataFields.concat(this.columns);\n for (var _i = 0, filterElements_1 = filterElements; _i < filterElements_1.length; _i++) {\n var filter = filterElements_1[_i];\n for (var _a = 0, dataFields_1 = dataFields; _a < dataFields_1.length; _a++) {\n var field = dataFields_1[_a];\n if (filter.name === field.name && filter.type === 'Value') {\n this.isValueFiltersAvail = true;\n break;\n }\n }\n if (this.isValueFiltersAvail) {\n break;\n }\n }\n };\n PivotEngine.prototype.fillFieldMembers = function (data, indMat) {\n var keys = this.fields;\n var dlen = data.length;\n var fList = this.fieldList;\n var kLn = keys.length;\n for (var kl = 0; kl < kLn; kl++) {\n var key = keys[kl];\n if (!fList[key].members) {\n fList[key].members = {};\n }\n if (!fList[key].formattedMembers) {\n fList[key].formattedMembers = {};\n }\n if (!fList[key].dateMember) {\n fList[key].dateMember = [];\n }\n var members = fList[key].members;\n var isDataAvail = Object.keys(members).length > 0 ? true : false;\n var formattedMembers = fList[key].formattedMembers;\n var dateMember = fList[key].dateMember;\n var membersCnt = 0;\n var fmembersCnt = 0;\n //let sort: string[] = [];\n for (var dl = 0; dl < dlen; dl++) {\n var mkey = data[dl][key];\n if (!isDataAvail) {\n var fKey = mkey;\n var formattedValue = this.getFormattedValue(mkey, key);\n if (formattedValue.formattedText) {\n fKey = formattedValue.formattedText;\n }\n if (!members.hasOwnProperty(mkey)) {\n membersCnt++;\n members[mkey] = {\n index: [dl], ordinal: membersCnt,\n isDrilled: this.isExpandAll ? true : false\n };\n dateMember.push({ formattedText: formattedValue.formattedText, actualText: formattedValue.actualText });\n //sort.push(mkey);\n }\n else {\n members[mkey].index.push(dl);\n }\n if (!formattedMembers.hasOwnProperty(fKey)) {\n fmembersCnt++;\n formattedMembers[fKey] = {\n index: [dl], ordinal: fmembersCnt,\n isDrilled: this.isExpandAll ? true : false\n };\n }\n else {\n formattedMembers[fKey].index.push(dl);\n }\n }\n if (!(indMat[dl])) {\n indMat[dl] = [];\n indMat[dl][kl] = members[mkey].ordinal;\n }\n else {\n indMat[dl][kl] = members[mkey].ordinal;\n }\n }\n /*sort = Object.keys(members).sort();\n let sortedMembers: Members = {};\n for (let sln: number = 0, slt: number = sort.length; sln < slt; sln++) {\n sortedMembers[sort[sln]] = members[sort[sln]];\n }\n fList[key].members = sortedMembers; */\n }\n this.fillDrilledInfo();\n };\n PivotEngine.prototype.fillDrilledInfo = function () {\n for (var key = 0; key < this.drilledMembers.length; key++) {\n var fieldName = this.drilledMembers[key].name;\n for (var mem = 0; mem < this.drilledMembers[key].items.length; mem++) {\n var memberName = this.drilledMembers[key].items[mem];\n var field = this.fieldList[fieldName];\n if (field && field.members[memberName]) {\n field.members[memberName].isDrilled = this.isExpandAll ? false : true;\n }\n }\n }\n };\n PivotEngine.prototype.generateValueMatrix = function (data) {\n var keys = this.fields;\n var len = data.length;\n var vMat = [];\n var keyLen = keys.length;\n var flList = this.fieldList;\n while (len--) {\n var record = data[len];\n var tkln = keyLen;\n //if (isNullOrUndefined(vMat[len])) {\n vMat[len] = [];\n //}\n while (tkln--) {\n var key = keys[tkln];\n vMat[len][tkln] = (flList[key].type === 'number') ? data[len][key] : 1;\n }\n }\n return vMat;\n };\n PivotEngine.prototype.updateSortSettings = function (sortSettings, isSort) {\n for (var sln = 0, slt = sortSettings ? sortSettings.length : 0; sln < slt && isSort; sln++) {\n this.fieldList[sortSettings[sln].name].sort = sortSettings[sln].order;\n }\n };\n PivotEngine.prototype.updateFilterMembers = function (source) {\n var filterRw = this.filterMembers;\n var list = {};\n //let eList: {[key: string] : number} = {};\n var isInclude = this.getFilters(source, list);\n //this.getFilterExcludeList(source.rows, flist);\n //this.getFilterExcludeList(source.columns, flist);\n //this.getFilterExcludeList(source.filters, flist);\n // let filters: Iterator = isInclude ? iList : eList;\n var dln = this.indexMatrix.length;\n if (isInclude) {\n var keys = list.include.index;\n for (var ln = 0; ln < keys.length; ln++) {\n if (list.exclude === undefined || list.exclude.indexObject[keys[ln]] === undefined) {\n filterRw.push(keys[ln]);\n }\n }\n }\n else {\n for (var ln = 0; ln < dln; ln++) {\n if (list.exclude === undefined || list.exclude.indexObject[ln] === undefined) {\n filterRw.push(ln);\n }\n }\n }\n };\n PivotEngine.prototype.getFilters = function (source, ilist) {\n var filterElements = source.filterSettings ? source.filterSettings : [];\n var filters = this.filters;\n var isInclude = false;\n var filter = [];\n //let type: string;\n for (var rln = 0, rlt = filterElements.length; rln < rlt; rln++) {\n var filterElement = filterElements[rln].properties ?\n filterElements[rln].properties : filterElements[rln];\n if (this.fieldList[filterElement.name].isSelected && this.isValidFilterField(filterElement, source.allowLabelFilter)) {\n this.applyLabelFilter(filterElement);\n filter = filterElement ? filterElement.items : [];\n if (filterElement.type && filterElement.type === 'Include') {\n /* tslint:disable-next-line:max-line-length */\n this.frameFilterList(filter, filterElement.name, ilist, 'include', filterElement.showLabelFilter, isInclude);\n isInclude = true;\n }\n else {\n this.frameFilterList(filter, filterElement.name, ilist, 'exclude', filterElement.showLabelFilter);\n }\n if (filterElement.showLabelFilter) {\n filterElement.items = [];\n filterElement.type = filterElement.showDateFilter ? 'Date' : filterElement.showNumberFilter ? 'Number' : 'Label';\n }\n }\n }\n /* for (let cln: number = 0, clt: number = cols.length; cln < clt; cln ++) {\n filter = cols[cln].filter ? cols[cln].filter.items : [];\n if (filter.length && cols[cln].filter.type && cols[cln].filter.type === 'include') {\n //type = cols[cln].filter.type;\n this.frameFilterList(filter, cols[cln].name, ilist, 'include', isInclude);\n isInclude = true;\n } else {\n this.frameFilterList(filter, cols[cln].name, ilist, 'exclude');\n }\n }\n for (let vln: number = 0, vlt: number = filters.length; vln < vlt; vln ++) {\n filter = filters[vln].filter ? filters[vln].filter.items : [];\n if (filter.length && filters[vln].filter.type && filters[vln].filter.type === 'include') {\n this.frameFilterList(filter, filters[vln].name, ilist, 'include', isInclude);\n isInclude = true;\n } else {\n this.frameFilterList(filter, filters[vln].name, ilist, 'exclude');\n }\n } */\n return isInclude;\n };\n PivotEngine.prototype.isValidFilterField = function (filterElement, allowLabelFiltering) {\n var isValidFilterElement = false;\n var filterTypes = ['Include', 'Exclude'];\n var dataFields = extend([], this.rows, null, true);\n dataFields = dataFields.concat(this.columns);\n if (this.fieldList[filterElement.name].isSelected && filterTypes.indexOf(filterElement.type) >= 0) {\n var isNotValidFilterElement = false;\n for (var _i = 0, _a = this.values; _i < _a.length; _i++) {\n var field = _a[_i];\n if (filterElement.name === field.name) {\n isNotValidFilterElement = true;\n break;\n }\n }\n if (!isNotValidFilterElement) {\n isValidFilterElement = true;\n }\n }\n else {\n for (var _b = 0, dataFields_2 = dataFields; _b < dataFields_2.length; _b++) {\n var field = dataFields_2[_b];\n if (filterElement.name === field.name && allowLabelFiltering &&\n (['Label', 'Date', 'Number'].indexOf(filterElement.type) >= 0)) {\n isValidFilterElement = true;\n break;\n }\n }\n }\n return isValidFilterElement;\n };\n PivotEngine.prototype.applyLabelFilter = function (filterElement) {\n if (['Label', 'Date', 'Number'].indexOf(filterElement.type) >= 0) {\n var members = Object.keys(this.fieldList[filterElement.name].members);\n filterElement.showLabelFilter = true;\n if (filterElement.type === 'Label') {\n /* tslint:disable-next-line:max-line-length */\n filterElement.items = this.getLabelFilterMembers(members, filterElement.condition, filterElement.value1, filterElement.value2);\n }\n else if (filterElement.type === 'Date') {\n filterElement.showDateFilter = true;\n /* tslint:disable-next-line:max-line-length */\n filterElement.items = this.getDateFilterMembers(members, filterElement.name, filterElement.condition, filterElement.value1, filterElement.value2);\n }\n else {\n filterElement.showNumberFilter = true;\n filterElement.items = [];\n for (var _i = 0, members_1 = members; _i < members_1.length; _i++) {\n var member = members_1[_i];\n var operand1 = this.getParsedValue(filterElement.name, filterElement.value1);\n var operand2 = this.getParsedValue(filterElement.name, filterElement.value2);\n /* tslint:disable-next-line:max-line-length */\n if (this.validateFilterValue(parseInt(member, 10), filterElement.condition, operand1, operand2)) {\n filterElement.items.push(member);\n }\n }\n }\n var excludeOperators = ['DoesNotBeginWith', 'DoesNotContains', 'DoesNotEndsWith', 'DoesNotEquals', 'NotBetween'];\n filterElement.type = (excludeOperators.indexOf(filterElement.condition) > -1 &&\n !filterElement.showNumberFilter) ? 'Exclude' : 'Include';\n }\n else {\n filterElement.showLabelFilter = false;\n }\n };\n PivotEngine.prototype.getLabelFilterMembers = function (members, operator, value1, value2) {\n var items = [];\n for (var _i = 0, members_2 = members; _i < members_2.length; _i++) {\n var member = members_2[_i];\n var filterValue = member.toLowerCase();\n if (value1.toString()) {\n switch (operator) {\n case 'Equals':\n case 'DoesNotEquals':\n if (filterValue === value1.toLowerCase()) {\n items.push(member);\n }\n break;\n case 'BeginWith':\n case 'DoesNotBeginWith':\n if (filterValue.indexOf(value1.toLowerCase()) === 0) {\n items.push(member);\n }\n break;\n case 'EndsWith':\n case 'DoesNotEndsWith':\n if (filterValue.match(value1.toLowerCase() + '$') != null) {\n items.push(member);\n }\n break;\n case 'Contains':\n case 'DoesNotContains':\n if (filterValue.indexOf(value1.toLowerCase()) > -1) {\n items.push(member);\n }\n break;\n case 'GreaterThan':\n if (filterValue > value1.toLowerCase()) {\n items.push(member);\n }\n break;\n case 'GreaterThanOrEqualTo':\n if (filterValue >= value1.toLowerCase()) {\n items.push(member);\n }\n break;\n case 'LessThan':\n if (filterValue < value1.toLowerCase()) {\n items.push(member);\n }\n break;\n case 'LessThanOrEqualTo':\n if (filterValue <= value1.toLowerCase()) {\n items.push(member);\n }\n break;\n case 'Between':\n case 'NotBetween':\n if ((filterValue >= value1.toLowerCase()) && (filterValue <= value2.toLowerCase())) {\n items.push(member);\n }\n break;\n }\n }\n }\n return items;\n };\n PivotEngine.prototype.getDateFilterMembers = function (members, name, operator, value1, value2) {\n var items = [];\n for (var _i = 0, members_3 = members; _i < members_3.length; _i++) {\n var member = members_3[_i];\n var filterValue = new Date(member);\n if (value1) {\n switch (operator) {\n case 'Equals':\n case 'DoesNotEquals':\n if ((PivotUtil.resetTime(filterValue)).getTime() === (PivotUtil.resetTime(value1)).getTime()) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n case 'After':\n if ((PivotUtil.resetTime(filterValue)).getTime() > (PivotUtil.resetTime(value1)).getTime()) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n case 'AfterOrEqualTo':\n if ((PivotUtil.resetTime(filterValue)).getTime() >= (PivotUtil.resetTime(value1)).getTime()) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n case 'Before':\n if ((PivotUtil.resetTime(filterValue)).getTime() < (PivotUtil.resetTime(value1)).getTime()) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n case 'BeforeOrEqualTo':\n if ((PivotUtil.resetTime(filterValue)).getTime() <= (PivotUtil.resetTime(value1)).getTime()) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n case 'Between':\n case 'NotBetween':\n if (((PivotUtil.resetTime(filterValue)).getTime() >= (PivotUtil.resetTime(value1)).getTime()) &&\n ((PivotUtil.resetTime(filterValue)).getTime() <= (PivotUtil.resetTime(value2)).getTime())) {\n items.push(this.getFormattedValue(member, name).formattedText);\n }\n break;\n }\n }\n }\n return items;\n };\n PivotEngine.prototype.validateFilterValue = function (val, operator, value1, value2) {\n var isMemberInclude = false;\n if (typeof (value1) === 'number') {\n switch (operator) {\n case 'Equals':\n if (val === value1) {\n isMemberInclude = true;\n }\n break;\n case 'DoesNotEquals':\n if (val !== value1) {\n isMemberInclude = true;\n }\n break;\n case 'GreaterThan':\n if (val > value1) {\n isMemberInclude = true;\n }\n break;\n case 'GreaterThanOrEqualTo':\n if (val >= value1) {\n isMemberInclude = true;\n }\n break;\n case 'LessThan':\n if (val < value1) {\n isMemberInclude = true;\n }\n break;\n case 'LessThanOrEqualTo':\n if (val <= value1) {\n isMemberInclude = true;\n }\n break;\n case 'Between':\n if ((val >= value1) && (val <= value2)) {\n isMemberInclude = true;\n }\n break;\n case 'NotBetween':\n if (!((val >= value1) && (val <= value2))) {\n isMemberInclude = true;\n }\n break;\n }\n }\n return isMemberInclude;\n };\n /* tslint:disable-next-line:max-line-length */\n PivotEngine.prototype.frameFilterList = function (filter, name, list, type, isLabelFilter, isInclude) {\n var _this = this;\n var updateFilter = function () {\n var fln = 0;\n var field = _this.fieldList[name];\n field.filter = filter;\n field.type = type;\n field.isExcelFilter = isLabelFilter;\n var members = field.formattedMembers;\n var allowFil = isInclude;\n var final = {};\n var filterObj = {};\n final[type] = { indexObject: {}, index: [] };\n _this.fieldFilterMem[name] = { memberObj: {} };\n while (filter[fln]) {\n var indx = members[filter[fln]].index;\n if (type === 'include') {\n for (var iln = 0, ilt = indx.length; iln < ilt; iln++) {\n if (!allowFil || list[type].indexObject[indx[iln]] !== undefined) {\n final[type].indexObject[indx[iln]] = indx[iln];\n final[type].index.push(indx[iln]);\n }\n }\n }\n else {\n for (var iln = 0, ilt = indx.length; iln < ilt; iln++) {\n if (list[type].indexObject[indx[iln]] === undefined) {\n list[type].indexObject[indx[iln]] = indx[iln];\n list[type].index.push(indx[iln]);\n }\n }\n _this.fieldFilterMem[name].memberObj[filter[fln]] = filter[fln];\n }\n fln++;\n }\n if (type === 'include') {\n list[type] = final[type];\n for (var iln = 0; iln < filter.length; iln++) {\n filterObj[filter[iln]] = filter[iln];\n }\n var items = Object.keys(members);\n for (var iln = 0, ilt = items.length; iln < ilt; iln++) {\n if (filterObj[items[iln]] === undefined) {\n _this.fieldFilterMem[name].memberObj[items[iln]] = items[iln];\n }\n }\n }\n };\n if (!list[type]) {\n list[type] = { indexObject: {}, index: [] };\n updateFilter();\n }\n else {\n updateFilter();\n }\n // }\n };\n /* tslint:disable-next-line:max-line-length */\n PivotEngine.prototype.applyValueFiltering = function (rowData, level, rows, columns, valueFilter, rowFilterData, type) {\n this.isValueFiltered = false;\n var allMember = extend({}, rows[rows.length - 1], null, true);\n this.getFilteredData(rows, columns, valueFilter, rowFilterData, level, rowData.name, allMember, type);\n if (this.isValueFiltered) {\n rowFilterData.push(allMember);\n rows = rowFilterData;\n }\n return rows;\n };\n /* tslint:disable-next-line:max-line-length */\n PivotEngine.prototype.getFilteredData = function (rows, columns, filterSettings, rowFilterData, level, fieldName, allMember, type) {\n var rLen = rows.length;\n for (var i = 0; i < rLen; i++) {\n if (filterSettings[fieldName]) {\n if (rows[i].level === level) {\n this.isValueFiltered = true;\n this.fieldList[fieldName].isExcelFilter = true;\n var value = 0;\n var measure = filterSettings[fieldName].measure;\n var mPos = this.fieldList[measure].index;\n var aggregate = this.fieldList[measure].aggregateType;\n value = (type === 'row' ? this.getAggregateValue(rows[i].index, columns.indexObject, mPos, aggregate) :\n this.getAggregateValue(columns.index, rows[i].indexObject, mPos, aggregate));\n var operand1 = this.getParsedValue(measure, filterSettings[fieldName].value1);\n var operand2 = this.getParsedValue(measure, filterSettings[fieldName].value2);\n /* tslint:disable-next-line:max-line-length */\n if (!this.validateFilterValue(value, filterSettings[fieldName].condition, operand1, operand2) && rows[i].type !== 'grand sum') {\n var data = this.removefilteredData(rows[i], this.valueFilteredData);\n var row = data ? data : rows[i];\n this.validateFilteredParentData(row, this.valueFilteredData, allMember, 0, level, type);\n }\n else if (rows[i].type !== 'grand sum') {\n rowFilterData.push(extend({}, rows[i], null, true));\n rowFilterData[rowFilterData.length - 1].isLevelFiltered = true;\n }\n }\n else if (rows[i].hasChild && rows[i].members.length > 0 && rows[i].type !== 'grand sum') {\n rowFilterData.push(extend({}, rows[i], null, true));\n rowFilterData[rowFilterData.length - 1].members = [];\n rowFilterData[rowFilterData.length - 1].isLevelFiltered = true;\n /* tslint:disable-next-line:max-line-length */\n this.getFilteredData(rows[i].members, columns, filterSettings, rowFilterData[rowFilterData.length - 1].members, level, fieldName, allMember, type);\n }\n }\n }\n };\n PivotEngine.prototype.getParsedValue = function (measure, value) {\n if (this.formatFields[measure] && value) {\n var formatSetting = extend({}, this.formatFields[measure], null, true);\n delete formatSetting.name;\n return this.globalize.parseNumber(value, formatSetting);\n }\n else {\n return parseInt(value, 10);\n }\n };\n PivotEngine.prototype.removefilteredData = function (row, rowFilterData) {\n var rows = extend([], rowFilterData, null, true);\n var filteredData;\n for (var i = 0; i < rows.length; i++) {\n if (row.isLevelFiltered && row.axis === rows[i].axis &&\n row.valueSort.levelName === rows[i].valueSort.levelName &&\n row.actualText === rows[i].actualText && row.axis === rows[i].axis &&\n row.level === rows[i].level && row.ordinal === rows[i].ordinal) {\n filteredData = rows[i];\n rowFilterData.splice(i, 1);\n break;\n }\n else if (rowFilterData[i].hasChild && rowFilterData[i].members.length > 0) {\n this.removefilteredData(row, rowFilterData[i].members);\n }\n }\n return filteredData;\n };\n /* tslint:disable-next-line:max-line-length */\n PivotEngine.prototype.validateFilteredParentData = function (row, rows, allMemberData, i, level, type) {\n if (rows.length > 0) {\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var rowFilteredData = rows_1[_i];\n if (rowFilteredData.level === i) {\n if (type === 'row') {\n var index = row.index;\n for (var _a = 0, index_1 = index; _a < index_1.length; _a++) {\n var key = index_1[_a];\n if (allMemberData.index.indexOf(key) >= 0) {\n allMemberData.index.splice(allMemberData.index.indexOf(key), 1);\n }\n if (((row.valueSort.levelName.toString()).indexOf(rowFilteredData.valueSort.levelName.toString()) >= 0) &&\n rowFilteredData.level !== level && rowFilteredData.index.indexOf(key) >= 0) {\n rowFilteredData.index.splice(rowFilteredData.index.indexOf(key), 1);\n }\n }\n }\n else {\n var index = row.indexObject;\n for (var _b = 0, _c = Object.keys(index); _b < _c.length; _b++) {\n var key = _c[_b];\n if (index.hasOwnProperty(key)) {\n delete allMemberData.indexObject[key];\n if (((row.valueSort.levelName.toString()).indexOf(rowFilteredData.valueSort.levelName.toString()) >= 0) &&\n rowFilteredData.level !== level) {\n delete rowFilteredData.indexObject[key];\n }\n }\n }\n }\n if (rowFilteredData && rowFilteredData.members.length > 0 &&\n rowFilteredData.members[0].level === i + 1 && rowFilteredData.members[0].level !== level) {\n this.validateFilteredParentData(row, rowFilteredData.members, allMemberData, i + 1, level, type);\n }\n }\n }\n }\n else {\n if (type === 'row') {\n var index = row.index;\n for (var _d = 0, index_2 = index; _d < index_2.length; _d++) {\n var key = index_2[_d];\n if (allMemberData.index.indexOf(key) >= 0) {\n allMemberData.index.splice(allMemberData.index.indexOf(key), 1);\n }\n }\n }\n else {\n var index = row.indexObject;\n for (var _e = 0, _f = Object.keys(index); _e < _f.length; _e++) {\n var key = _f[_e];\n if (index.hasOwnProperty(key)) {\n delete allMemberData.indexObject[key];\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n PivotEngine.prototype.updateFramedHeaders = function (framedHeaders, dataHeaders, filteredHeaders, headers, type) {\n for (var _i = 0, framedHeaders_1 = framedHeaders; _i < framedHeaders_1.length; _i++) {\n var dHeader = framedHeaders_1[_i];\n this.isHeaderAvail = false;\n if (this.validateFilteredHeaders(dHeader, filteredHeaders, type) || dHeader.type === 'grand sum') {\n if (type === 'row') {\n this.rowCount += this.rowValuesLength;\n }\n else {\n this.columnCount += this.colValuesLength;\n }\n headers.push(extend({}, dHeader, null, true));\n headers[headers.length - 1].members = [];\n if (dHeader.hasChild && dHeader.isDrilled && dHeader.members.length > 0) {\n this.updateFramedHeaders(dHeader.members, dataHeaders, filteredHeaders, headers[headers.length - 1].members, type);\n }\n }\n }\n return this.filterFramedHeaders;\n };\n PivotEngine.prototype.validateFilteredHeaders = function (dHeader, filteredHeaders, type) {\n for (var _i = 0, filteredHeaders_1 = filteredHeaders; _i < filteredHeaders_1.length; _i++) {\n var vHeader = filteredHeaders_1[_i];\n if (!this.isHeaderAvail) {\n if (dHeader.actualText === vHeader.actualText &&\n dHeader.level === vHeader.level &&\n dHeader.valueSort.levelName === vHeader.valueSort.levelName) {\n if (type === 'row') {\n if (vHeader.index.length > 0) {\n this.isHeaderAvail = true;\n dHeader.index = vHeader.index;\n return true;\n }\n else {\n this.isHeaderAvail = false;\n dHeader.index = vHeader.index;\n return false;\n }\n }\n else {\n if (Object.keys(vHeader.indexObject).length > 0) {\n this.isHeaderAvail = true;\n dHeader.indexObject = vHeader.indexObject;\n return true;\n }\n else {\n this.isHeaderAvail = false;\n dHeader.indexObject = vHeader.indexObject;\n return false;\n }\n }\n }\n else if (vHeader.hasChild && vHeader.members.length > 0 && vHeader.type !== 'grand sum') {\n this.validateFilteredHeaders(dHeader, vHeader.members, type);\n }\n }\n }\n return this.isHeaderAvail;\n };\n PivotEngine.prototype.isEmptyDataAvail = function (rowHeaders, columnHeaders) {\n this.isEmptyData = false;\n if (rowHeaders.length > 0 && rowHeaders[rowHeaders.length - 1].type === 'grand sum' &&\n rowHeaders[rowHeaders.length - 1].index.length === 0) {\n this.isEmptyData = true;\n }\n if (columnHeaders.length > 0 && columnHeaders[columnHeaders.length - 1].type === 'grand sum' &&\n Object.keys(columnHeaders[columnHeaders.length - 1].indexObject).length === 0) {\n this.isEmptyData = true;\n }\n };\n /* tslint:disable */\n PivotEngine.prototype.generateGridData = function (dataSource, headerCollection) {\n var keys = this.fields;\n var columns = dataSource.columns ? dataSource.columns : [];\n var data = dataSource.data;\n var rows = dataSource.rows ? dataSource.rows : [];\n var filterSettings = dataSource.filterSettings;\n var values = dataSource.values;\n var size = 1;\n this.isExpandAll = dataSource.expandAll;\n this.drilledMembers = dataSource.drilledMembers ? dataSource.drilledMembers : [];\n this.isEmptyData = false;\n var filterMembers = [];\n var showNoDataItems = (rows[0] && rows[0].showNoDataItems) || (columns[0] && columns[0].showNoDataItems);\n if (showNoDataItems) {\n for (var ln = 0; ln < this.indexMatrix.length; ln++) {\n filterMembers.push(ln);\n }\n }\n for (var ln = 0; ln < this.filterMembers.length; ln++) {\n this.filterPosObj[this.filterMembers[ln]] = this.filterMembers[ln];\n }\n //let childrens: Field = this.fieldList[rows[0].name + ''];\n this.valueSortSettings.columnIndex = undefined;\n var st1 = new Date().getTime();\n if (!this.isValueFilterEnabled) {\n if (!headerCollection || this.enableValueSorting) {\n this.columnCount = 0;\n this.rowCount = 0;\n this.cMembers = [];\n this.rMembers = [];\n if (rows.length !== 0) {\n this.rMembers =\n this.getIndexedHeaders(rows, data, 0, rows[0].showNoDataItems ? filterMembers : this.filterMembers, 'row', '');\n }\n if (columns.length !== 0) {\n this.cMembers = this.getIndexedHeaders(columns, data, 0, columns[0].showNoDataItems ?\n filterMembers : this.filterMembers, 'column', '');\n }\n this.insertAllMembersCommon();\n }\n this.saveDataHeaders = (this.isValueFiltersAvail && dataSource.allowValueFilter) ? {\n rowHeaders: extend([], this.rMembers, null, true),\n columnHeaders: extend([], this.cMembers, null, true)\n } : {};\n }\n this.pivotValues = [];\n var gridData = [];\n this.headerContent = [];\n this.valueContent = [];\n this.valueFilteredData = [];\n this.filterFramedHeaders = [];\n var rowheads = [];\n var colheads = [];\n var rowFilteredData = [];\n var columnFilteredData = [];\n var valuesCount = (this.values.length);\n if ((this.isValueFiltersAvail && dataSource.allowValueFilter)) {\n this.valueFilteredData = [];\n var rowHeaders = this.saveDataHeaders.rowHeaders;\n var columnHeaders = this.saveDataHeaders.columnHeaders;\n if (filterSettings.length > 0) {\n var valueFilters = {};\n var valueFields = {};\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n valueFields[value.name] = value;\n }\n for (var _a = 0, filterSettings_1 = filterSettings; _a < filterSettings_1.length; _a++) {\n var filter = filterSettings_1[_a];\n rowHeaders = (rowFilteredData.length > 0 ? rowFilteredData : rowHeaders);\n columnHeaders = (columnFilteredData.length > 0 ? columnFilteredData : columnHeaders);\n this.valueFilteredData = [];\n var filterElement = filter.properties ?\n filter.properties : filter;\n if (filterElement.type === 'Value' && this.fieldList[filter.name].isSelected) {\n valueFilters[filter.name] = filter;\n filterElement.items = [];\n var isAvail = false;\n var rLen = rows.length;\n var cLen = columns.length;\n for (var i = 0; i < rLen; i++) {\n if (filterElement.name === rows[i].name && valueFields[filterElement.measure] && !isAvail) {\n isAvail = true;\n /* tslint:disable-next-line:max-line-length */\n rowFilteredData = this.applyValueFiltering(rows[i], i, rowHeaders, columnHeaders[columnHeaders.length - 1], valueFilters, this.valueFilteredData, 'row');\n break;\n }\n }\n for (var j = 0; j < cLen; j++) {\n if (filterElement.name === columns[j].name && valueFields[filterElement.measure] && !isAvail) {\n isAvail = true;\n /* tslint:disable-next-line:max-line-length */\n columnFilteredData = this.applyValueFiltering(columns[j], j, columnHeaders, rowHeaders[rowHeaders.length - 1], valueFilters, this.valueFilteredData, 'column');\n break;\n }\n }\n }\n }\n }\n rowFilteredData = (rowFilteredData.length > 0 ? rowFilteredData : rowHeaders);\n columnFilteredData = (columnFilteredData.length > 0 ? columnFilteredData : columnHeaders);\n this.isEmptyDataAvail(rowFilteredData, columnFilteredData);\n var savedFieldList = extend({}, this.fieldList, null, true);\n this.indexMatrix = [];\n var fields = dataSource.data[0];\n this.getFieldList(fields, this.enableSort, dataSource.allowValueFilter);\n this.fillFieldMembers(dataSource.data, this.indexMatrix);\n this.updateSortSettings(dataSource.sortSettings, this.enableSort);\n this.valueMatrix = this.generateValueMatrix(dataSource.data);\n this.filterMembers = [];\n var pageSize = 1;\n this.updateFilterMembers(dataSource);\n this.rMembers = rows.length !== 0 ?\n this.getIndexedHeaders(rows, data, 0, rows[0].showNoDataItems ?\n filterMembers : this.filterMembers, 'row', '') : this.rMembers;\n this.cMembers = columns.length !== 0 ?\n this.getIndexedHeaders(columns, data, 0, columns[0].showNoDataItems ?\n filterMembers : this.filterMembers, 'column', '') : this.cMembers;\n this.insertAllMembersCommon();\n this.updateFieldList(savedFieldList);\n this.rowCount = 0;\n this.columnCount = 0;\n this.rMembers = this.updateFramedHeaders(this.rMembers, this.rMembers, rowFilteredData, this.filterFramedHeaders, 'row');\n this.filterFramedHeaders = [];\n this.cMembers = this.updateFramedHeaders(this.cMembers, this.cMembers, columnFilteredData, this.filterFramedHeaders, 'column');\n this.isValueFilterEnabled = true;\n }\n this.applyValueSorting();\n if (this.pageSettings) {\n if (!headerCollection || this.enableValueSorting) {\n this.headerCollection.rowHeaders = extend([], this.rMembers, null, true);\n this.headerCollection.columnHeaders = extend([], this.cMembers, null, true);\n this.headerCollection.rowHeadersCount = this.rowCount;\n this.headerCollection.columnHeadersCount = this.columnCount;\n }\n else {\n this.rMembers = headerCollection.rowHeaders;\n this.cMembers = headerCollection.columnHeaders;\n this.rowCount = headerCollection.rowHeadersCount;\n this.columnCount = headerCollection.columnHeadersCount;\n if (this.columns.length > 1 || this.rows.length > 1 || this.allowValueFilter) {\n this.headerCollection = extend({}, headerCollection, null, true);\n }\n }\n this.calculatePagingValues();\n if (!this.enableValueSorting || !this.allowValueFilter) {\n if (rows.length > 0) {\n this.insertPosition(rows, data, 0, this.filterMembers, 'row', '', this.rMembers);\n }\n if (columns.length > 0) {\n this.insertPosition(columns, data, 0, this.filterMembers, 'column', '', this.cMembers);\n }\n this.rMembers = this.insertTotalPosition(this.rMembers);\n this.cMembers = this.insertTotalPosition(this.cMembers);\n }\n }\n this.getHeaderData(this.cMembers, colheads, this.pivotValues, 0, this.valueAxis ? 1 : valuesCount);\n this.insertSubTotals();\n //this.getHeaderData(rmembers, rowheads, gridData, 0); \n this.getTableData(this.rMembers, rowheads, colheads, 0, this.pivotValues, valuesCount);\n if (this.pageSettings) {\n this.removeIndexProperties();\n }\n this.isEngineUpdated = true;\n var st2 = new Date().getTime();\n // console.log(st1 - st2);\n };\n /* tslint:enable */\n PivotEngine.prototype.applyValueSorting = function () {\n if (this.valueSortSettings.headerText && this.valueSortSettings.headerText !== '' && this.values.length > 0) {\n var textArray = this.valueSortSettings.headerText.split(this.valueSortSettings.headerDelimiter);\n var hText = '';\n var mIndex = void 0;\n var mType = void 0;\n var caption = void 0;\n for (var i = 0; i < this.values.length; i++) {\n if (this.values[i].caption === textArray[textArray.length - 1]) {\n caption = this.values[i].name;\n break;\n }\n else {\n caption = textArray[textArray.length - 1];\n }\n }\n if (this.values.length > 1 && caption && this.fieldList[caption]) {\n for (var i = 0; i < textArray.length - 1; i++) {\n hText = hText === '' ? textArray[i] : (hText + this.valueSortSettings.headerDelimiter + textArray[i]);\n }\n mIndex = this.fieldList[caption].index;\n mType = this.fieldList[caption].aggregateType;\n }\n else {\n hText = this.valueSortSettings.headerText;\n mIndex = this.fieldList[this.values[0].name].index;\n mType = this.fieldList[this.values[0].name].aggregateType;\n }\n var member = void 0;\n if (this.valueAxis === 0) {\n member = this.getMember(this.cMembers, hText);\n if (member) {\n this.sortByValueRow(this.rMembers, member, this.valueSortSettings.sortOrder, mIndex, mType);\n }\n }\n else {\n member = this.getMember(this.rMembers, hText);\n if (member) {\n this.sortByValueRow(this.cMembers, member, this.valueSortSettings.sortOrder, mIndex, mType);\n }\n }\n }\n };\n PivotEngine.prototype.getMember = function (cMembers, headerText) {\n var vlen = cMembers.length;\n var member;\n for (var j = 0; j < vlen; j++) {\n if (cMembers[j].valueSort.levelName === headerText) {\n member = cMembers[j];\n break;\n }\n else if (cMembers[j].members.length > 0) {\n member = this.getMember(cMembers[j].members, headerText);\n }\n if (member) {\n return member;\n }\n }\n return member;\n };\n PivotEngine.prototype.sortByValueRow = function (rMembers, member, sortOrder, mIndex, mType) {\n var sort = false;\n var vlen = rMembers.length;\n for (var j = 0; j < vlen; j++) {\n for (var k = j; k < vlen && rMembers[j].type !== 'grand sum' && rMembers[k].type !== 'grand sum'; k++) {\n if (sortOrder === 'Descending') {\n sort = this.getAggregateValue(rMembers[j].index, member.indexObject, mIndex, mType) <\n this.getAggregateValue(rMembers[k].index, member.indexObject, mIndex, mType);\n }\n else {\n sort = this.getAggregateValue(rMembers[j].index, member.indexObject, mIndex, mType) >\n this.getAggregateValue(rMembers[k].index, member.indexObject, mIndex, mType);\n }\n if (sort) {\n var temp = {};\n temp = rMembers[j];\n rMembers[j] = rMembers[k];\n rMembers[k] = temp;\n }\n }\n if (rMembers[j].members.length > 0) {\n this.sortByValueRow(rMembers[j].members, member, sortOrder, mIndex, mType);\n }\n }\n };\n PivotEngine.prototype.insertAllMembersCommon = function () {\n /* inserting the row grant-total members */\n this.insertAllMember(this.rMembers, this.filterMembers, '', 'row');\n /* inserting the column gran-total members */\n this.insertAllMember(this.cMembers, this.filterMembers, '', 'column');\n };\n PivotEngine.prototype.removeIndexProperties = function () {\n for (var rCnt = 0; rCnt < this.headerContent.length; rCnt++) {\n if (this.headerContent[rCnt]) {\n for (var cCnt = 0; cCnt < Object.keys(this.headerContent[rCnt]).length; cCnt++) {\n var key = Number(Object.keys(this.headerContent[rCnt])[cCnt]);\n this.headerContent[rCnt][key].index = [];\n this.headerContent[rCnt][key].indexObject = {};\n this.pivotValues[rCnt][key].index = [];\n this.pivotValues[rCnt][key].indexObject = {};\n }\n }\n }\n for (var rCnt = this.headerContent.length; rCnt < this.pivotValues.length; rCnt++) {\n if (this.headerContent[rCnt]) {\n this.valueContent[rCnt - this.headerContent.length][0].index = [];\n this.valueContent[rCnt - this.headerContent.length][0].indexObject = {};\n this.pivotValues[rCnt][0].index = [];\n this.pivotValues[rCnt][0].indexObject = {};\n }\n }\n };\n PivotEngine.prototype.insertSubTotals = function () {\n var rowLength = this.pivotValues.length;\n for (var rowCnt = 0; rowCnt < rowLength; rowCnt++) {\n var rowCells = this.pivotValues[rowCnt];\n if (rowCells) {\n var savedCell = void 0;\n var spanCnt = 1;\n var colLength = rowCells.length;\n var indexObj = void 0;\n for (var colCnt = colLength - 1; colCnt > 0; colCnt--) {\n var cell = rowCells[colCnt];\n if (cell) {\n if (savedCell) {\n savedCell.colSpan = spanCnt;\n savedCell.colIndex = savedCell.colIndex - (spanCnt - 1);\n }\n indexObj = { index: cell.index, indexObject: cell.indexObject };\n cell.index = [];\n cell.indexObject = {};\n savedCell = extend({}, cell, null, true);\n cell.index = indexObj.index;\n cell.indexObject = indexObj.indexObject;\n var rowPos = rowCnt + 1;\n while (this.pivotValues[rowPos] && !this.pivotValues[rowPos][colCnt]) {\n if (!this.pivotValues[rowCnt][colCnt].isDrilled) {\n this.pivotValues[rowCnt][colCnt].rowSpan = (rowPos - rowCnt) + 1;\n savedCell.rowSpan = (rowPos - rowCnt) + 1;\n }\n var cellType = (cell.type === 'sum' || cell.type === 'grand sum') ? cell.type : 'sum';\n this.pivotValues[rowPos][colCnt] = this.headerContent[rowPos][colCnt] = {\n type: cellType, formattedText: ((cell.type === 'sum' || cell.type === 'grand sum') ? cell.formattedText :\n (cell.formattedText + ' Total')),\n axis: 'column', level: -1, colIndex: colCnt, rowIndex: rowPos, valueSort: cell.valueSort\n };\n if (cell.valueSort && cell.valueSort[this.valueSortSettings.headerText]) {\n this.valueSortSettings.columnIndex = colCnt;\n }\n var isSpanned = false;\n if (cellType === 'grand sum') {\n this.pivotValues[rowCnt][colCnt].rowSpan = (rowPos - rowCnt) + 1;\n savedCell.rowSpan = (rowPos - rowCnt) + 1;\n }\n else if (this.pivotValues[rowCnt][colCnt].type !== 'sum' &&\n this.pivotValues[rowCnt][colCnt].isDrilled) {\n this.pivotValues[rowCnt + 1][colCnt].rowSpan = rowPos - rowCnt;\n isSpanned = true;\n }\n else {\n this.pivotValues[rowPos][colCnt].rowSpan = -1;\n }\n if (rowPos > (rowCnt + 1) && (this.pivotValues[rowCnt][colCnt].type === 'sum' ||\n isSpanned)) {\n this.pivotValues[rowPos][colCnt].rowSpan = -1;\n }\n rowPos++;\n }\n spanCnt = 1;\n }\n else {\n rowCells[colCnt] = this.headerContent[rowCnt][colCnt] = extend({}, savedCell, null, true);\n rowCells[colCnt].index = this.headerContent[rowCnt][colCnt].index = indexObj.index;\n rowCells[colCnt].indexObject = this.headerContent[rowCnt][colCnt].indexObject = indexObj.indexObject;\n spanCnt++;\n rowCells[colCnt].colSpan = spanCnt;\n rowCells[colCnt].colIndex = rowCells[colCnt].colIndex - (spanCnt - 1);\n }\n if (colCnt === 1 && savedCell) {\n savedCell.colSpan = spanCnt;\n savedCell.colIndex = savedCell.colIndex - (spanCnt - 1);\n }\n }\n }\n }\n };\n /* tslint:disable:max-func-body-length */\n PivotEngine.prototype.getIndexedHeaders = function (keys, data, keyInd, position, axis, parentMember) {\n var hierarchy = [];\n var showPosition = this.enableValueSorting || this.allowValueFilter || !this.pageSettings;\n if (keys) {\n var rlen = keys.length;\n var decisionObj = {};\n var fieldName = keys[keyInd].name;\n var field = keys[keyInd];\n // let members: string[] = Object.keys(this.fieldList[field].members);\n var childrens = this.fieldList[fieldName];\n var index = {};\n var isNoData = false;\n var showNoDataItems = (position.length < 1 && keyInd > 0) || field.showNoDataItems;\n var savedMembers = {};\n if (showNoDataItems) {\n for (var pos = 0, lt = childrens.dateMember.length; pos < lt; pos++) {\n savedMembers[childrens.dateMember[pos].actualText] =\n childrens.dateMember[pos].actualText;\n }\n if (position.length < 1) {\n isNoData = true;\n position.length = childrens.dateMember.length;\n }\n }\n for (var pos = 0, lt = position.length; pos < lt; pos++) {\n var member = {};\n member.hasChild = keyInd < rlen - 1;\n member.level = keyInd;\n member.axis = axis;\n member.colSpan = 1;\n var memInd = isNoData ? childrens.members[Object.keys(savedMembers)[0]].ordinal :\n this.indexMatrix[position[pos]][childrens.index];\n var headerValue = isNoData ? Object.keys(savedMembers)[0] :\n data[position[pos]][fieldName];\n delete savedMembers[headerValue];\n if (showNoDataItems && this.fieldFilterMem[fieldName] &&\n this.fieldFilterMem[fieldName].memberObj[headerValue] === headerValue) {\n continue;\n }\n member.isDrilled = member.hasChild ? childrens.members[headerValue].isDrilled : false;\n var formattedValue = this.getFormattedValue(headerValue, fieldName);\n member.actualText = formattedValue.actualText;\n member.formattedText = formattedValue.formattedText;\n var availData = showNoDataItems ? (this.filterPosObj[position[pos]] !== undefined &&\n !isNoData ? true : false) : true;\n //member.name = members[memInd];\n // member.type = member.hasChild ? 'All' : 'Single';\n var pindx = void 0;\n if (!(decisionObj && decisionObj[memInd])) {\n decisionObj[memInd] = { index: [], indexObject: {} };\n member.index = decisionObj[memInd].index;\n member.indexObject = decisionObj[memInd].indexObject;\n if (availData) {\n if (showPosition) {\n member.index = decisionObj[memInd].index = [position[pos]];\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n member.indexObject = decisionObj[memInd].indexObject;\n }\n else {\n index[memInd] = [position[pos]];\n }\n }\n member.ordinal = memInd;\n member.valueSort = {};\n if (showPosition) {\n if (keyInd !== 0) {\n member.valueSort.levelName = parentMember + this.valueSortSettings.headerDelimiter + member.formattedText;\n member.valueSort[parentMember + this.valueSortSettings.headerDelimiter + member.formattedText] = 1;\n }\n else {\n member.valueSort[member.formattedText] = 1;\n member.valueSort.levelName = member.formattedText;\n }\n }\n //if (!member.members) {\n member.members = [];\n //}\n //let copyObj: AxisSet = Object.create(member);\n hierarchy.push(member);\n }\n else if (availData) {\n if (showPosition) {\n decisionObj[memInd].index.push(position[pos]);\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n }\n else {\n if (index[memInd] === undefined) {\n index[memInd] = [position[pos]];\n }\n else {\n index[memInd].push(position[pos]);\n }\n }\n }\n if (showNoDataItems && !isNoData && keyInd > 0 && pos + 1 === position.length &&\n Object.keys(savedMembers).length > 0) {\n isNoData = true;\n lt = Object.keys(savedMembers).length;\n pos = -1;\n }\n }\n for (var iln = 0, ilt = hierarchy.length; iln < ilt; iln++) {\n if (axis === 'row') {\n this.rowCount += this.rowValuesLength;\n }\n else {\n this.columnCount += this.colValuesLength;\n }\n if (rlen - 1 > keyInd && hierarchy[iln].isDrilled) {\n if (showPosition) {\n var level = null;\n if (hierarchy[iln].valueSort && hierarchy[iln].valueSort.levelName) {\n level = hierarchy[iln].valueSort.levelName;\n }\n parentMember = (level || hierarchy[iln].formattedText);\n }\n var filterPosition = !showPosition ? index[hierarchy[iln].ordinal] : hierarchy[iln].index;\n /* tslint:disable:align */\n hierarchy[iln].members = this.getIndexedHeaders(keys, data, keyInd + 1, (filterPosition === undefined ? [] : filterPosition), axis, parentMember);\n /* tslint:enable:align */\n }\n }\n if (this.enableSort) {\n return new DataManager(hierarchy).executeLocal(new Query().sortBy('actualText', childrens.sort.toLowerCase()));\n }\n else {\n return hierarchy;\n }\n }\n else {\n return hierarchy;\n }\n };\n PivotEngine.prototype.getOrderedIndex = function (headers) {\n var orderedIndex = {};\n for (var i = 0; i < headers.length; i++) {\n if (headers[i].type !== 'grand sum') {\n orderedIndex[headers[i].ordinal] = i;\n }\n }\n return orderedIndex;\n };\n PivotEngine.prototype.insertPosition = function (keys, data, keyInd, position, axis, parentMember, slicedHeaders) {\n var hierarchy = [];\n var orderedIndex = this.getOrderedIndex(slicedHeaders);\n if (keys) {\n var decisionObj = {};\n var field = keys[keyInd].name;\n var childrens = this.fieldList[field];\n for (var pos = 0, lt = position.length; pos < lt; pos++) {\n var member = {};\n var memInd = this.indexMatrix[position[pos]][childrens.index];\n var slicedHeader = slicedHeaders[orderedIndex[memInd]];\n var formattedValue = this.getFormattedValue(data[position[pos]][field], field);\n if (!(slicedHeader && slicedHeader.formattedText === formattedValue.formattedText)) {\n continue;\n }\n if (!(decisionObj && decisionObj[memInd])) {\n decisionObj[memInd] = { index: [], indexObject: {} };\n slicedHeader.index = decisionObj[memInd].index = [position[pos]];\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n slicedHeader.indexObject = decisionObj[memInd].indexObject;\n slicedHeader.valueSort = {};\n if (keyInd !== 0) {\n slicedHeader.valueSort.levelName = parentMember + this.valueSortSettings.headerDelimiter +\n slicedHeader.formattedText;\n slicedHeader.valueSort[parentMember + this.valueSortSettings.headerDelimiter +\n slicedHeader.formattedText] = 1;\n }\n else {\n slicedHeader.valueSort[slicedHeader.formattedText] = 1;\n slicedHeader.valueSort.levelName = slicedHeader.formattedText;\n }\n member.members = [];\n hierarchy.push(member);\n }\n else {\n decisionObj[memInd].index.push(position[pos]);\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n }\n }\n var diff = slicedHeaders.length - hierarchy.length;\n while (diff > 0) {\n hierarchy.push({ members: [] });\n diff--;\n }\n for (var iln = 0, ilt = hierarchy.length; iln < ilt; iln++) {\n if (slicedHeaders[iln].members.length > 0) {\n var level = null;\n if (slicedHeaders[iln].valueSort && slicedHeaders[iln].valueSort.levelName) {\n level = slicedHeaders[iln].valueSort.levelName;\n }\n parentMember = (level || slicedHeaders[iln].formattedText);\n /* tslint:disable:align */\n hierarchy[iln].members =\n this.insertPosition(keys, data, keyInd + 1, slicedHeaders[iln].index, axis, parentMember, slicedHeaders[iln].members);\n /* tslint:enable:align */\n }\n }\n return hierarchy;\n }\n else {\n return hierarchy;\n }\n };\n PivotEngine.prototype.insertTotalPosition = function (headers) {\n var summCell = headers[headers.length - 1];\n if (summCell && summCell.type === 'grand sum') {\n summCell.index = this.filterMembers;\n /* tslint:disable:typedef */\n var lt = void 0;\n for (var ln = 0, lt_1 = this.filterMembers.length; ln < lt_1; ln++) {\n summCell.indexObject[this.filterMembers[ln]] = this.filterMembers[ln];\n }\n /* tslint:enable:typedef */\n }\n return headers;\n };\n PivotEngine.prototype.calculatePagingValues = function () {\n var isValueSorting = ((this.valueSortSettings.sortOrder !== 'None' &&\n this.valueSortSettings.headerText !== '') || this.enableValueSorting) ? true : false;\n if (this.pageSettings) {\n if (this.valueAxis === 1) {\n this.rowValuesLength = this.values.length;\n }\n else {\n this.colValuesLength = this.values.length;\n }\n this.memberCnt = -this.rowValuesLength;\n this.rowStartPos = ((this.pageSettings.rowCurrentPage * this.pageSettings.rowSize) -\n (this.pageSettings.rowSize)) * this.rowValuesLength;\n var exactStartPos = (this.rowStartPos + (this.pageSettings.rowSize * 3 * this.rowValuesLength)) > this.rowCount ?\n (this.rowCount - (this.pageSettings.rowSize * 3 * this.rowValuesLength)) : this.rowStartPos;\n if (exactStartPos < 0) {\n exactStartPos = this.rowStartPos = 0;\n this.pageSettings.rowCurrentPage = 1;\n }\n this.rowFirstLvl = (this.rowStartPos - exactStartPos) % this.pageSettings.rowSize;\n this.rowStartPos = exactStartPos;\n this.endPos = this.rowStartPos + (this.pageSettings.rowSize * 3 * this.rowValuesLength);\n this.endPos = this.endPos > this.rowCount ? this.rowCount : this.endPos;\n this.rMembers = isValueSorting ? this.rMembers : this.performSlicing(this.rMembers, [], this.rowStartPos, 'row');\n this.memberCnt = -this.colValuesLength;\n this.pageInLimit = false;\n this.colHdrBufferCalculated = false;\n this.colStartPos = ((this.pageSettings.columnCurrentPage * this.pageSettings.columnSize) -\n (this.pageSettings.columnSize)) * this.colValuesLength;\n exactStartPos = (this.colStartPos + (this.pageSettings.columnSize * 3 * this.colValuesLength)) >\n this.columnCount ?\n (this.columnCount - (this.pageSettings.columnSize * 3 * this.colValuesLength)) : this.colStartPos;\n if (exactStartPos < 0) {\n exactStartPos = this.colStartPos = 0;\n this.pageSettings.columnCurrentPage = 1;\n }\n this.colFirstLvl = (this.colStartPos - exactStartPos) % this.pageSettings.columnSize;\n this.colStartPos = exactStartPos;\n if (!isValueSorting) {\n this.endPos = this.colStartPos + (this.pageSettings.columnSize * 3 * this.colValuesLength);\n this.endPos = this.endPos > this.columnCount ? this.columnCount : this.endPos;\n this.cMembers = this.performSlicing(this.cMembers, [], this.colStartPos, 'column');\n }\n this.memberCnt = -1;\n this.pageInLimit = false;\n }\n };\n PivotEngine.prototype.performSlicing = function (headers, slicedHeaders, startPos, axis) {\n var pos = 0;\n while (headers[pos]) {\n this.memberCnt += axis === 'column' ? this.colValuesLength : this.rowValuesLength;\n if (startPos <= this.memberCnt && this.endPos >= this.memberCnt && !this.pageInLimit) {\n if (axis === 'column') {\n this.colFirstLvl = this.colFirstLvl + headers[pos].level;\n }\n else {\n this.rowFirstLvl = this.rowFirstLvl + headers[pos].level;\n }\n this.pageInLimit = true;\n }\n if (this.pageInLimit) {\n if (this.endPos <= this.memberCnt) {\n if (axis === 'column') {\n if (headers[pos].members.length === 0) {\n if (this.colHdrBufferCalculated) {\n break;\n }\n this.colHdrBufferCalculated = true;\n this.endPos += (headers[pos].level * this.colValuesLength);\n }\n else if (this.colHdrBufferCalculated) {\n break;\n }\n }\n else {\n break;\n }\n }\n }\n var members = headers[pos].members;\n slicedHeaders.push(headers[pos]);\n if (headers[pos].members.length > 0) {\n slicedHeaders[slicedHeaders.length - 1].members = [];\n slicedHeaders[slicedHeaders.length - 1].members =\n this.performSlicing(members, [], startPos, axis);\n }\n if (!this.pageInLimit) {\n slicedHeaders.pop();\n }\n if (headers[pos].level === 0 && this.pageInLimit && this.endPos <= this.memberCnt) {\n break;\n }\n pos++;\n }\n return slicedHeaders;\n };\n PivotEngine.prototype.insertAllMember = function (set, filter, customText, axis) {\n var len = set.length;\n var showPosition = this.enableValueSorting || this.allowValueFilter || !this.pageSettings;\n customText = ' Total';\n set[len] = {\n hasChild: false,\n index: !showPosition ? [] : filter,\n level: 0,\n axis: axis,\n isDrilled: false,\n indexObject: {},\n members: [],\n formattedText: 'Grand' + customText,\n ordinal: len,\n type: 'grand sum',\n valueSort: {}\n };\n set[len].valueSort[set[len].formattedText] = 1;\n set[len].valueSort.levelName = set[len].formattedText;\n if (showPosition) {\n for (var ln = 0, lt = filter.length; ln < lt; ln++) {\n set[len].indexObject[filter[ln]] = filter[ln];\n }\n }\n if (axis === 'row') {\n this.rowCount += this.rowValuesLength;\n }\n else {\n this.columnCount += this.colValuesLength;\n }\n };\n PivotEngine.prototype.getTableData = function (rows, reformAxis, columns, tnum, data, vlt) {\n for (var rlt = rows.length, rln = 0; rln < rlt; rln++) {\n tnum = data.length;\n reformAxis[tnum] = rows[rln];\n var actCnt = tnum - Number(Object.keys(reformAxis)[0]);\n //let rplus: number = rln + 1;\n //let lvl: number = rows[rln].level;\n var isLeastNode = !reformAxis[tnum].members.length;\n rows[rln].colIndex = 0;\n rows[rln].rowIndex = tnum;\n if (!data[tnum]) {\n data[tnum] = [];\n this.valueContent[actCnt] = {};\n //data[tnum][0] = rows[rln].name;\n data[tnum][0] = this.valueContent[actCnt][0] = rows[rln];\n }\n else {\n // data[tnum][0] = rows[rln].name;\n data[tnum][0] = this.valueContent[actCnt][0] = rows[rln];\n }\n if (this.valueAxis && this.isMutiMeasures) {\n var hpos = tnum;\n var actpos = actCnt;\n for (var vln = 0; vln < vlt; vln++) {\n tnum++;\n actCnt++;\n var name_1 = this.values[vln].caption ? this.values[vln].caption : this.values[vln].name;\n var calObj = {\n axis: 'row',\n formattedText: name_1,\n level: 0,\n valueSort: {},\n colIndex: 0,\n rowIndex: tnum,\n type: 'value'\n };\n if (!data[tnum]) {\n data[tnum] = [];\n this.valueContent[actCnt] = {};\n data[tnum][0] = this.valueContent[actCnt][0] = calObj;\n }\n var vData = data[tnum][0].valueSort;\n vData[data[tnum - vln - 1][0].valueSort.levelName + this.valueSortSettings.headerDelimiter + name_1] = 1;\n vData.levelName = data[tnum - vln - 1][0].valueSort.levelName + this.valueSortSettings.headerDelimiter\n + name_1;\n for (var cln = 0, dln = 1, clt = columns.length; cln < clt; ++cln) {\n //for (let vln: number = 0; (!this.valueAxis && vln < vlt); vln++) {\n this.updateRowData(rows, columns, tnum, data, vln, rln, cln, dln, actCnt);\n dln = data[tnum].length;\n data[hpos][dln - 1] = this.valueContent[actpos][dln - 1] = {\n axis: 'value', actualText: '', colSpan: 1,\n colIndex: dln, formattedText: '', hasChild: false\n };\n // }\n }\n }\n this.recursiveRowData(rows, reformAxis, columns, tnum, data, vlt, isLeastNode, rln, vlt);\n }\n else {\n for (var cln = 0, dln = 1, clt = columns.length; cln < clt; ++cln) {\n for (var vln = 0; vln < vlt; vln++) {\n this.updateRowData(rows, columns, tnum, data, vln, rln, cln, dln, actCnt);\n dln = data[tnum].length;\n }\n }\n this.recursiveRowData(rows, reformAxis, columns, tnum, data, vlt, isLeastNode, rln, 0);\n }\n }\n /* for (let rlt: number = rows.length, rln: number = 0; rln < rlt; rln++) {\n if (!data[rln]) {\n data[rln] = [];\n data[rln][0] = rows[rln].name;\n } else {\n data[rln][0] = rows[rln].name;\n }\n for (let cln: number = 0, dln: number = 1, clt: number = columns.length; cln < clt; dln = ++cln) {\n data[rln][dln] = this.getAggregateValue(rows[rln].index, columns[cln].index, 11);\n }\n } */\n };\n PivotEngine.prototype.recursiveRowData = function (rows, reformAxis, columns, tnum, data, vlt, isLeastNode, rln, vln) {\n if (!isLeastNode) {\n this.getTableData(reformAxis[tnum - vln].members, reformAxis, columns, tnum, data, vlt);\n }\n reformAxis[tnum - vln].members = [];\n };\n PivotEngine.prototype.updateRowData = function (rows, columns, tnum, data, vln, rln, cln, dln, actCnt) {\n var mPos = this.fieldList[this.values[vln].name].index;\n var aggregate = this.fieldList[this.values[vln].name].aggregateType;\n var field = this.values[vln].name;\n var value = 0;\n // let isLeast: boolean = isLeastNode && (vln === vlt - 1);\n value = this.getAggregateValue(rows[rln].index, columns[cln].indexObject, mPos, aggregate);\n var isSum = rows[rln].hasChild || columns[cln].hasChild ||\n rows[rln].type === 'grand sum' || columns[cln].type === 'grand sum';\n var formattedText = this.getFormattedValue(value, field).formattedText;\n //dln = data[tnum].length;\n data[tnum][dln] = this.valueContent[actCnt][dln] = {\n axis: 'value', actualText: field,\n formattedText: formattedText, value: value, rowIndex: tnum, colIndex: dln, isSum: isSum\n };\n };\n PivotEngine.prototype.getHeaderData = function (axis, reformAxis, data, tnum, vcnt) {\n var rlt = axis.length;\n var colItmLn = this.columns.length;\n var sortText = this.valueSortSettings.headerText;\n //let valueLn: number = this.values.length;\n for (var rln = 0; rln < rlt; rln++) {\n if (axis[rln].members.length) {\n this.getHeaderData(axis[rln].members, reformAxis, data, tnum, vcnt);\n }\n tnum = reformAxis.length;\n reformAxis[tnum] = axis[rln];\n // let rplus: number = rln + 1;\n var lvl = axis[rln].level;\n axis[rln].rowIndex = lvl;\n axis[rln].colIndex = (tnum * vcnt) + vcnt;\n if (!data[lvl]) {\n data[lvl] = [];\n this.headerContent[lvl] = {};\n data[lvl][(tnum * vcnt) + vcnt] = this.headerContent[lvl][(tnum * vcnt) + vcnt] = axis[rln];\n }\n else {\n data[lvl][(tnum * vcnt) + vcnt] = this.headerContent[lvl][(tnum * vcnt) + vcnt] = axis[rln];\n }\n if (this.isMutiMeasures && !this.valueAxis) {\n for (var vln = 0; vln < vcnt; vln++) {\n var name_2 = this.values[vln].caption ? this.values[vln].caption : this.values[vln].name;\n var calObj = {\n axis: 'column',\n formattedText: name_2,\n level: 0,\n valueSort: {},\n colIndex: (tnum * vcnt) + 1 + vln,\n rowIndex: colItmLn\n };\n if (!data[colItmLn]) {\n data[colItmLn] = [];\n this.headerContent[colItmLn] = {};\n data[colItmLn][(tnum * vcnt) + 1 + vln] = this.headerContent[colItmLn][(tnum * vcnt) + 1 + vln] = calObj;\n }\n else {\n data[colItmLn][(tnum * vcnt) + 1 + vln] = this.headerContent[colItmLn][(tnum * vcnt) + 1 + vln] = calObj;\n }\n var vData = data[colItmLn][(tnum * vcnt) + 1 + vln].valueSort;\n vData[axis[rln].valueSort.levelName + this.valueSortSettings.headerDelimiter + name_2] = 1;\n vData.levelName = axis[rln].valueSort.levelName + this.valueSortSettings.headerDelimiter + name_2;\n if (vData && vData[sortText]) {\n this.valueSortSettings.columnIndex = (tnum * vcnt) + 1 + vln;\n }\n }\n }\n else if (axis[rln].valueSort && axis[rln].valueSort[sortText]) {\n this.valueSortSettings.columnIndex = (tnum * vcnt) + 1;\n }\n reformAxis[tnum].members = [];\n }\n };\n PivotEngine.prototype.getAggregateValue = function (rowIndex, columnIndex, value, type) {\n //rowIndex = rowIndex.sort();\n //columnIndex = columnIndex.sort();\n var rlt = rowIndex.length;\n //let clt: number = columnIndex.length;\n var mirror = {};\n var ri = 0;\n var ci = 0;\n var cellValue = 0;\n var avgCnt = 0;\n if (type && type.toLowerCase() === 'count') {\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n cellValue += 1;\n }\n ri++;\n }\n }\n else if (type && type.toLowerCase() === 'min') {\n var isFirst = true;\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n if (isFirst) {\n cellValue = this.valueMatrix[rowIndex[ri]][value];\n isFirst = false;\n }\n else {\n cellValue = this.valueMatrix[rowIndex[ri]][value] < cellValue ? this.valueMatrix[rowIndex[ri]][value] : cellValue;\n }\n }\n ri++;\n }\n }\n else if (type && type.toLowerCase() === 'max') {\n var isMaxFirst = true;\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n if (isMaxFirst) {\n cellValue = this.valueMatrix[rowIndex[ri]][value];\n isMaxFirst = false;\n }\n else {\n cellValue = this.valueMatrix[rowIndex[ri]][value] > cellValue ? this.valueMatrix[rowIndex[ri]][value] : cellValue;\n }\n }\n ri++;\n }\n }\n else if (type && type.toLowerCase() === 'calculatedfield') {\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n var calcField = this.calculatedFields[this.fields[value]];\n var actualFormula = calcField.formula;\n var aggregateField = {};\n if (this.calculatedFormulas[calcField.name]) {\n var calculatedFormulas = this.calculatedFormulas[calcField.name];\n for (var len = 0, lmt = calculatedFormulas.length; len < lmt; len++) {\n var aggregatedValue = calculatedFormulas[len];\n var value_1 = aggregateField[aggregatedValue.formula];\n if (value_1 === undefined) {\n var type_1 = aggregatedValue.type;\n value_1 = this.getAggregateValue(rowIndex, columnIndex, aggregatedValue.index, type_1);\n aggregateField[aggregatedValue.formula] = value_1;\n }\n actualFormula = (actualFormula).replace(aggregatedValue.formula, value_1.toString());\n }\n }\n cellValue = this.evaluate(actualFormula);\n JSON.parse(cellValue.toString());\n }\n ri++;\n }\n }\n else {\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n //let cIndx: number = isLeastLevel ? columnIndex.splice(columnIndex.indexOf(rowIndex[ri]), 1)[0] : rowIndex[ri];\n cellValue += this.valueMatrix[rowIndex[ri]][value];\n avgCnt++;\n }\n ri++;\n }\n }\n /* if (rlt > clt) {\n this.makeMirrorObject(rowIndex, mirror);\n while (columnIndex[ci] !== undefined) {\n if (mirror[columnIndex[ci]]) {\n let cIndx: number = isLeastLevel ? columnIndex.splice(ci, 1)[0] : columnIndex[ci];\n //rowIndex.splice\n sum += this.valueMatrix[cIndx][value];\n }\n ci++;\n }\n } else {\n this.makeMirrorObject(columnIndex, mirror);\n while (rowIndex[ri] !== undefined) {\n if (mirror[rowIndex[ri]]) {\n let cIndx: number = isLeastLevel ? columnIndex.splice(columnIndex.indexOf(rowIndex[ri]), 1)[0] : rowIndex[ri];\n sum += this.valueMatrix[rowIndex[ri]][value];\n }\n ri++;\n }\n } */\n return ((type && type.toLowerCase() === 'avg' && cellValue !== 0) ? (cellValue / avgCnt) : cellValue);\n };\n PivotEngine.prototype.getFormattedValue = function (value, fieldName) {\n var formattedValue = {\n formattedText: value !== undefined ? value === null ? 'null' : value.toString() : undefined,\n actualText: value !== undefined ? value === null ? 'null' : value : undefined\n };\n if (this.formatFields[fieldName] && value) {\n var formatSetting = extend({}, this.formatFields[fieldName], null, true);\n delete formatSetting.name;\n if (!formatSetting.minimumSignificantDigits && formatSetting.minimumSignificantDigits < 1) {\n delete formatSetting.minimumSignificantDigits;\n }\n if (!formatSetting.maximumSignificantDigits && formatSetting.maximumSignificantDigits < 1) {\n delete formatSetting.maximumSignificantDigits;\n }\n if (formatSetting.type) {\n formattedValue.formattedText = this.globalize.formatDate(new Date(value), formatSetting);\n }\n else {\n formattedValue.formattedText = this.globalize.formatNumber(value, formatSetting);\n }\n formattedValue.actualText = value;\n if (formatSetting.type && this.formatFields[fieldName].type === 'date') {\n formatSetting.format = 'yyyy/MM/dd/HH/mm/ss';\n formattedValue.actualText = this.globalize.formatDate(new Date(value), formatSetting);\n }\n }\n return formattedValue;\n };\n PivotEngine.prototype.powerFunction = function (formula) {\n if (formula.indexOf('^') > -1) {\n var items_1 = [];\n while (formula.indexOf('(') > -1) {\n formula = formula.replace(/(\\([^\\(\\)]*\\))/g, function (text, item) {\n items_1.push(item);\n return ('~' + (items_1.length - 1));\n });\n }\n items_1.push(formula);\n formula = '~' + (items_1.length - 1);\n while (formula.indexOf('~') > -1) {\n formula = formula.replace(new RegExp('~' + '(\\\\d+)', 'g'), function (text, index) {\n return items_1[index].replace(/(\\w*)\\^(\\w*)/g, 'Math.pow' + '($1,$2)');\n });\n }\n }\n return formula;\n };\n PivotEngine.prototype.evaluate = function (obj) {\n return Function('\"use strict\";return (' + obj + ')')();\n };\n ;\n return PivotEngine;\n}());\nexport { PivotEngine };\n","/**\n * Specifies pivot external events\n * @hidden\n */\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var enginePopulating = 'enginePopulating';\n/** @hidden */\nexport var enginePopulated = 'enginePopulated';\n/** @hidden */\nexport var onFieldDropped = 'onFieldDropped';\n/** @hidden */\nexport var beforePivotTableRender = 'beforePivotTableRender';\n/** @hidden */\nexport var afterPivotTableRender = 'afterPivotTableRender';\n/** @hidden */\nexport var beforeExport = 'beforeExport';\n/** @hidden */\nexport var excelHeaderQueryCellInfo = 'excelHeaderQueryCellInfo';\n/** @hidden */\nexport var pdfHeaderQueryCellInfo = 'pdfHeaderQueryCellInfo';\n/** @hidden */\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var headerCellInfo = 'headerCellInfo';\n/** @hidden */\nexport var resizing = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var cellClick = 'cellClick';\n/**\n * Specifies pivot internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var initSubComponent = 'init-groupingbar';\n/** @hidden */\nexport var treeViewUpdate = 'tree-view-update';\n/** @hidden */\nexport var pivotButtonUpdate = 'pivot-button-update';\n/** @hidden */\nexport var initCalculatedField = 'init-calculatedfield';\n/** @hidden */\nexport var click = 'click';\n","/**\n * CSS Constants\n * @hidden\n */\n/** @hidden */\nexport var ROOT = 'e-pivotfieldlist';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DEVICE = 'e-device';\n/** @hidden */\nexport var ICON = 'e-icons';\n/** @hidden */\nexport var ICON_DISABLE = 'e-disable';\n/** @hidden */\nexport var ICON_HIDDEN = 'e-hide';\n/** @hidden */\nexport var WRAPPER_CLASS = 'e-pivotfieldlist-wrapper';\n/** @hidden */\nexport var CONTAINER_CLASS = 'e-field-list-container';\n/** @hidden */\nexport var TOGGLE_FIELD_LIST_CLASS = 'e-toggle-field-list';\n/** @hidden */\nexport var STATIC_FIELD_LIST_CLASS = 'e-static';\n/** @hidden */\nexport var TOGGLE_SELECT_CLASS = 'e-select-table';\n/** @hidden */\nexport var FIELD_TABLE_CLASS = 'e-field-table';\n/** @hidden */\nexport var FIELD_LIST_CLASS = 'e-field-list';\n/** @hidden */\nexport var FIELD_LIST_TREE_CLASS = 'e-field-list-tree';\n/** @hidden */\nexport var FIELD_HEADER_CLASS = 'e-field-header';\n/** @hidden */\nexport var FIELD_LIST_TITLE_CLASS = 'e-field-list-title';\n/** @hidden */\nexport var FIELD_LIST_TITLE_CONTENT_CLASS = 'e-title-content';\n/** @hidden */\nexport var FIELD_LIST_FOOTER_CLASS = 'e-field-list-footer';\n/** @hidden */\nexport var CALCULATED_FIELD_CLASS = 'e-calculated-field';\n/** @hidden */\nexport var FLAT_CLASS = 'e-flat e-primary';\n/** @hidden */\nexport var OUTLINE_CLASS = 'e-outline';\n/** @hidden */\nexport var AXIS_TABLE_CLASS = 'e-axis-table';\n/** @hidden */\nexport var LEFT_AXIS_PANEL_CLASS = 'e-left-axis-fields';\n/** @hidden */\nexport var RIGHT_AXIS_PANEL_CLASS = 'e-right-axis-fields';\n/** @hidden */\nexport var AXIS_HEADER_CLASS = 'e-axis-header';\n/** @hidden */\nexport var AXIS_CONTENT_CLASS = 'e-axis-content';\n/** @hidden */\nexport var AXIS_PROMPT_CLASS = 'e-draggable-prompt';\n/** @hidden */\nexport var PIVOT_BUTTON_WRAPPER_CLASS = 'e-pvt-btn-div';\n/** @hidden */\nexport var PIVOT_BUTTON_CLASS = 'e-pivot-button';\n/** @hidden */\nexport var PIVOT_BUTTON_CONTENT_CLASS = 'e-content';\n/** @hidden */\nexport var DRAG_CLONE_CLASS = 'e-button-drag-clone';\n/** @hidden */\nexport var SORT_CLASS = 'e-sort';\n/** @hidden */\nexport var SORT_DESCEND_CLASS = 'e-descend';\n/** @hidden */\nexport var FILTER_COMMON_CLASS = 'e-btn-filter';\n/** @hidden */\nexport var FILTER_CLASS = 'e-pv-filter';\n/** @hidden */\nexport var FILTERED_CLASS = 'e-pv-filtered';\n/** @hidden */\nexport var REMOVE_CLASS = 'e-remove';\n/** @hidden */\nexport var DRAG_CLASS = 'e-drag';\n/** @hidden */\nexport var DROP_INDICATOR_CLASS = 'e-drop-indicator';\n/** @hidden */\nexport var INDICATOR_HOVER_CLASS = 'e-drop-hover';\n/** @hidden */\nexport var MEMBER_EDITOR_DIALOG_CLASS = 'e-member-editor-dialog';\n/** @hidden */\nexport var EDITOR_TREE_WRAPPER_CLASS = 'e-member-editor-wrapper';\n/** @hidden */\nexport var EDITOR_TREE_CONTAINER_CLASS = 'e-member-editor-container';\n/** @hidden */\nexport var CHECK_BOX_FRAME_CLASS = 'e-frame';\n/** @hidden */\nexport var NODE_CHECK_CLASS = 'e-check';\n/** @hidden */\nexport var NODE_STOP_CLASS = 'e-stop';\n/** @hidden */\nexport var OK_BUTTON_CLASS = 'e-ok-btn';\n/** @hidden */\nexport var CANCEL_BUTTON_CLASS = 'e-cancel-btn';\n/** @hidden */\nexport var ERROR_DIALOG_CLASS = 'e-pivot-error-dialog';\n/** @hidden */\nexport var DROPPABLE_CLASS = 'e-droppable';\n/** @hidden */\nexport var ROW_AXIS_CLASS = 'e-rows';\n/** @hidden */\nexport var COLUMN_AXIS_CLASS = 'e-columns';\n/** @hidden */\nexport var VALUE_AXIS_CLASS = 'e-values';\n/** @hidden */\nexport var FILTER_AXIS_CLASS = 'e-filters';\n/** @hidden */\nexport var GROUPING_BAR_CLASS = 'e-grouping-bar';\n/** @hidden */\nexport var VALUE_COLUMN_CLASS = 'e-value-column';\n/** @hidden */\nexport var GROUP_ROW_CLASS = 'e-group-rows';\n/** @hidden */\nexport var GROUP_COLUMN_CLASS = 'e-group-columns';\n/** @hidden */\nexport var GROUP_FLEX_CLASS = 'e-group-flex';\n/** @hidden */\nexport var GROUP_VALUE_CLASS = 'e-group-values';\n/** @hidden */\nexport var GROUP_FILTER_CLASS = 'e-group-filters';\n/** @hidden */\nexport var DIALOG_CLOSE_ICON_CLASS = 'e-icon-btn';\n/** @hidden */\nexport var NO_DRAG_CLASS = 'e-drag-restrict';\n/** @hidden */\nexport var SELECTED_NODE_CLASS = 'e-list-selected';\n/** @hidden */\nexport var TITLE_HEADER_CLASS = 'e-title-header';\n/** @hidden */\nexport var TITLE_CONTENT_CLASS = 'e-title-content';\n/** @hidden */\nexport var TEXT_CONTENT_CLASS = 'e-text-content';\n/** @hidden */\nexport var FOOTER_CONTENT_CLASS = 'e-footer-content';\n/** @hidden */\nexport var ADAPTIVE_CONTAINER_CLASS = 'e-adaptive-container';\n/** @hidden */\nexport var ADAPTIVE_FIELD_LIST_BUTTON_CLASS = 'e-field-list-btn';\n/** @hidden */\nexport var ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS = 'e-calculated-field-btn';\n/** @hidden */\nexport var BUTTON_SMALL_CLASS = 'e-small';\n/** @hidden */\nexport var BUTTON_ROUND_CLASS = 'e-round';\n/** @hidden */\nexport var ADD_ICON_CLASS = 'e-add-icon';\n/** @hidden */\nexport var BUTTON_FLAT_CLASS = 'e-flat';\n/** @hidden */\nexport var STATIC_CENTER_DIV_CLASS = 'e-center-div';\n/** @hidden */\nexport var STATIC_CENTER_HEADER_CLASS = 'e-center-title';\n/** @hidden */\nexport var ADAPTIVE_FIELD_LIST_DIALOG_CLASS = 'e-adaptive-field-list-dialog';\n/** @hidden */\nexport var LIST_TEXT_CLASS = 'e-list-text';\n/** @hidden */\nexport var LIST_SELECT_CLASS = 'e-selected-node';\n/** @hidden */\nexport var LIST_FRAME_CLASS = 'e-frame';\n/** @hidden */\nexport var EXCEL_FILTER_ICON_CLASS = 'e-excl-filter-icon';\n/** @hidden */\nexport var SELECTED_MENU_ICON_CLASS = 'e-selected-menu-icon';\n/** @hidden */\nexport var EMPTY_ICON_CLASS = 'e-emptyicon';\n/** @hidden */\nexport var SUB_MENU_CLASS = 'e-submenu';\n/** @hidden */\nexport var FOCUSED_CLASS = 'e-focused';\n/** @hidden */\nexport var SELECTED_CLASS = 'e-selected';\n/** @hidden */\nexport var MENU_ITEM_CLASS = 'e-menu-item';\n/** @hidden */\nexport var FILTER_MENU_OPTIONS_CLASS = 'e-filtermenu-options';\n/** @hidden */\nexport var SELECTED_OPTION_ICON_CLASS = 'e-selected-option-icon';\n/** @hidden */\nexport var FILTER_DIV_CONTENT_CLASS = 'e-filter-div-content';\n/** @hidden */\nexport var FILTER_TEXT_DIV_CLASS = 'e-filter-text-div';\n/** @hidden */\nexport var BETWEEN_TEXT_DIV_CLASS = 'e-between-text-div';\n/** @hidden */\nexport var SEPARATOR_DIV_CLASS = 'e-separator-div';\n/** @hidden */\nexport var FILTER_OPTION_WRAPPER_1_CLASS = 'e-filter-option-wrapper-1';\n/** @hidden */\nexport var FILTER_OPTION_WRAPPER_2_CLASS = 'e-filter-option-wrapper-2';\n/** @hidden */\nexport var FILTER_INPUT_DIV_1_CLASS = 'e-filter-input-div-1';\n/** @hidden */\nexport var FILTER_INPUT_DIV_2_CLASS = 'e-filter-input-div-2';\n/** @hidden */\nexport var VALUE_OPTIONS_CLASS = 'e-value-options';\n/** @hidden */\nexport var FILTER_OPERATOR_CLASS = 'e-filter-operator';\n/** @hidden */\nexport var COLLAPSE = 'e-collapse';\n/** @hidden */\nexport var EXPAND = 'e-expand';\n/** @hidden */\nexport var TABLE = 'e-table';\n/** @hidden */\nexport var BODY = 'e-body';\n/** @hidden */\nexport var PIVOTBODY = 'e-pivotbody';\n/** @hidden */\nexport var COLUMNSHEADER = 'e-columnsheader';\n/** @hidden */\nexport var ROWSHEADER = 'e-rowsheader';\n/** @hidden */\nexport var VALUESCONTENT = 'e-valuescontent';\n/** @hidden */\nexport var VALUECELL = 'e-valuecell';\n/** @hidden */\nexport var PIVOTHEADER = 'e-pivotheader';\n/** @hidden */\nexport var PGHEADERS = 'e-pgheaders';\n/** @hidden */\nexport var TOPHEADER = 'e-topheader';\n/** @hidden */\nexport var HEADERCELL = 'e-headercell';\n/** @hidden */\nexport var SUMMARY = 'e-summary';\n/** @hidden */\nexport var CELLVALUE = 'e-cellvalue';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var PIVOTTOOLTIP = 'e-pivottooltip';\n/** @hidden */\nexport var TOOLTIP_HEADER = 'e-tooltipheader';\n/** @hidden */\nexport var TOOLTIP_CONTENT = 'e-tooltipcontent';\n/** @hidden */\nexport var NEXTSPAN = 'e-nextspan';\n/** @hidden */\nexport var LASTSPAN = 'e-lastspan';\n/** @hidden */\nexport var EDITOR_SEARCH_WRAPPER_CLASS = 'e-editor-search-wrapper';\n/** @hidden */\nexport var EDITOR_SEARCH_CLASS = 'e-editor-search';\n/** @hidden */\nexport var SELECT_ALL_WRAPPER_CLASS = 'e-select-all-wrapper';\n/** @hidden */\nexport var SELECT_ALL_CLASS = 'e-select-all';\n/** @hidden */\nexport var PIVOTCALC = 'e-pivot-calc';\n/** @hidden */\nexport var CALCDIALOG = 'e-pivot-calc-dialog-div';\n/** @hidden */\nexport var CALCRADIO = 'e-pivot-calc-radio';\n/** @hidden */\nexport var CALCCHECK = 'e-pivot-calc-check';\n/** @hidden */\nexport var CALCINPUT = 'e-pivot-calc-input';\n/** @hidden */\nexport var CALCINPUTDIV = 'e-pivot-calc-input-div';\n/** @hidden */\nexport var CALCOUTERDIV = 'e-pivot-calc-outer-div';\n/** @hidden */\nexport var FLAT = 'e-flat';\n/** @hidden */\nexport var FORMAT = 'e-format';\n/** @hidden */\nexport var FORMULA = 'e-pivot-formula';\n/** @hidden */\nexport var TREEVIEW = 'e-pivot-treeview';\n/** @hidden */\nexport var TREEVIEWOUTER = 'e-pivot-treeview-outer';\n/** @hidden */\nexport var CALCCANCELBTN = 'e-pivot-cancel-button';\n/** @hidden */\nexport var CALCADDBTN = 'e-pivot-add-button';\n/** @hidden */\nexport var CALCOKBTN = 'e-pivot-ok-button';\n/** @hidden */\nexport var CALCACCORD = 'e-pivot-accord';\n/** @hidden */\nexport var CALCBUTTONDIV = 'e-pivot-button-div';\n/** @hidden */\nexport var AXIS_ICON_CLASS = 'e-axis';\n/** @hidden */\nexport var AXIS_ROW_CLASS = 'e-axis-row';\n/** @hidden */\nexport var AXIS_COLUMN_CLASS = 'e-axis-column';\n/** @hidden */\nexport var AXIS_VALUE_CLASS = 'e-axis-value';\n/** @hidden */\nexport var AXIS_FILTER_CLASS = 'e-axis-filter';\n/** @hidden */\nexport var AXIS_NAVIGATE_WRAPPER_CLASS = 'e-axis-nav-div';\n/** @hidden */\nexport var LEFT_NAVIGATE_WRAPPER_CLASS = 'e-left-nav-wrapper';\n/** @hidden */\nexport var RIGHT_NAVIGATE_WRAPPER_CLASS = 'e-right-nav-wrapper';\n/** @hidden */\nexport var LEFT_NAVIGATE_CLASS = 'e-left-nav-icon';\n/** @hidden */\nexport var RIGHT_NAVIGATE_CLASS = 'e-right-nav-icon';\n/** @hidden */\nexport var GRID_CLASS = 'e-grid';\n/** @hidden */\nexport var PIVOT_VIEW_CLASS = 'e-pivotview';\n/** @hidden */\nexport var PIVOT_ALL_FIELD_TITLE_CLASS = 'e-pivot-all-field-title';\n/** @hidden */\nexport var PIVOT_FORMULA_TITLE_CLASS = 'e-pivot-formula-title';\n/** @hidden */\nexport var PIVOT_CONTEXT_MENU_CLASS = 'e-pivot-context-menu';\n/** @hidden */\nexport var MENU_DISABLE = 'e-disabled';\n/** @hidden */\nexport var EMPTY_MEMBER_CLASS = 'e-member-prompt';\n/** @hidden */\nexport var CALC_EDIT = 'e-edit';\n/** @hidden */\nexport var CALC_EDITED = 'e-edited';\n/** @hidden */\nexport var EMPTY_FIELD = 'e-empty-field';\n/** @hidden */\nexport var FORMAT_DIALOG = 'e-pivot-formatting-dialog';\n/** @hidden */\nexport var FORMAT_CONDITION_BUTTON = 'e-format-condition-button';\n/** @hidden */\nexport var FORMAT_NEW = 'e-new-format';\n/** @hidden */\nexport var FORMAT_OUTER = 'e-format-outer-div';\n/** @hidden */\nexport var FORMAT_INNER = 'e-format-inner-div';\n/** @hidden */\nexport var FORMAT_TABLE = 'e-format-table';\n/** @hidden */\nexport var FORMAT_VALUE_LABEL = 'e-format-value-label';\n/** @hidden */\nexport var FORMAT_LABEL = 'e-format-label';\n/** @hidden */\nexport var INPUT = 'e-input';\n/** @hidden */\nexport var FORMAT_VALUE1 = 'e-format-value1';\n/** @hidden */\nexport var FORMAT_VALUE2 = 'e-format-value2';\n/** @hidden */\nexport var FORMAT_VALUE_SPAN = 'e-format-value-span';\n/** @hidden */\nexport var FORMAT_FONT_COLOR = 'e-format-font-color';\n/** @hidden */\nexport var FORMAT_BACK_COLOR = 'e-format-back-color';\n/** @hidden */\nexport var FORMAT_VALUE_PREVIEW = 'e-format-value-preview';\n/** @hidden */\nexport var FORMAT_COLOR_PICKER = 'e-format-color-picker';\n/** @hidden */\nexport var FORMAT_DELETE_ICON = 'e-format-delete-icon';\n/** @hidden */\nexport var FORMAT_DELETE_BUTTON = 'e-format-delete-button';\n/** @hidden */\nexport var SELECTED_COLOR = 'e-selected-color';\n/** @hidden */\nexport var DIALOG_HEADER = 'e-dlg-header';\n/** @hidden */\nexport var FORMAT_APPLY_BUTTON = 'e-format-apply-button';\n/** @hidden */\nexport var FORMAT_CANCEL_BUTTON = 'e-format-cancel-button';\n/** @hidden */\nexport var FORMAT_ROUND_BUTTON = 'e-small e-round';\n/** @hidden */\nexport var VIRTUALTRACK_DIV = 'e-virtualtrack';\n/** @hidden */\nexport var MOVABLECONTENT_DIV = 'e-movablecontent';\n/** @hidden */\nexport var FROZENCONTENT_DIV = 'e-frozencontent';\n/** @hidden */\nexport var MOVABLEHEADER_DIV = 'e-movableheader';\n/** @hidden */\nexport var FROZENHEADER_DIV = 'e-frozenheader';\n","import { Reorder, headerRefreshed } from '@syncfusion/ej2-grids';\nimport { Grid, Resize, ExcelExport, PdfExport, ContextMenu, Freeze } from '@syncfusion/ej2-grids';\nimport { Selection } from '@syncfusion/ej2-grids';\nimport { createElement, setStyleAttribute, remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\n/**\n * Module to render PivotGrid control\n */\n/** @hidden */\nvar Render = /** @class */ (function () {\n /** Constructor for render module */\n function Render(parent) {\n this.colPos = 0;\n this.lastSpan = 0;\n this.parent = parent;\n this.engine = parent.engineModule;\n this.gridSettings = parent.gridSettings;\n this.formatList = this.getFormatList();\n }\n /** @hidden */\n /* tslint:enable */\n Render.prototype.render = function () {\n var parent = this.parent;\n var engine = this.parent.engineModule;\n this.injectGridModules(parent);\n this.rowStartPos = this.getRowStartPos();\n if (this.parent.grid && this.parent.grid.element && this.parent.element.querySelector('.e-grid')) {\n if (!engine.isEngineUpdated) {\n engine.headerContent = this.frameDataSource('header');\n engine.valueContent = this.frameDataSource('value');\n }\n else {\n if (this.parent.enableValueSorting) {\n engine.valueContent = this.frameDataSource('value');\n }\n engine.isEngineUpdated = false;\n }\n /* tslint:disable */\n this.parent.grid.setProperties({\n columns: this.frameStackedHeaders(), dataSource: parent.dataSource.values.length > 0 && !this.engine.isEmptyData ? engine.valueContent :\n this.frameDataSource('value')\n }, true);\n /* tslint:enable */\n this.parent.grid.notify('datasource-modified', {});\n this.parent.grid.refreshColumns();\n var e = this.parent.element.querySelector('.e-movablecontent');\n e.querySelector('colGroup').innerHTML =\n this.parent.grid.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n this.parent.grid.width = this.calculateGridWidth();\n if (this.parent.height > (this.engine.valueContent.length * this.gridSettings.rowHeight)) {\n this.parent.grid.height = 'auto';\n }\n else {\n this.parent.grid.height = this.parent.height;\n }\n }\n else {\n this.parent.element.innerHTML = '';\n this.bindGrid(this.parent, (this.engine.isEmptyData ? true : false));\n this.parent.element.appendChild(createElement('div', { id: this.parent.element.id + '_grid' }));\n this.parent.grid.appendTo('#' + this.parent.element.id + '_grid');\n }\n /* tslint:disable */\n this.parent.grid.on(headerRefreshed, function () {\n if (this.parent.enableVirtualization) {\n var mHdr = this.parent.element.querySelector('.' + cls.MOVABLEHEADER_DIV);\n var mCont = this.parent.element.querySelector('.' + cls.MOVABLECONTENT_DIV);\n var vtr = mCont.querySelector('.' + cls.VIRTUALTRACK_DIV);\n this.parent.virtualHeaderDiv = mHdr.querySelector('.' + cls.VIRTUALTRACK_DIV);\n if (mHdr.querySelector('.' + cls.VIRTUALTRACK_DIV)) {\n remove(mHdr.querySelector('.' + cls.VIRTUALTRACK_DIV));\n }\n else {\n this.parent.virtualHeaderDiv = createElement('div', { className: cls.VIRTUALTRACK_DIV });\n }\n mHdr.appendChild(this.parent.virtualHeaderDiv);\n if (vtr) {\n setStyleAttribute(this.parent.virtualHeaderDiv, { height: 0, width: vtr.style.width });\n }\n setStyleAttribute(mHdr.querySelector('.e-table'), {\n transform: (mCont.querySelector('.e-table').style.transform).split(',')[0] + ',' + 0 + 'px)'\n });\n mHdr.scrollLeft = mCont.scrollLeft;\n }\n }, this);\n };\n /** @hidden */\n Render.prototype.bindGrid = function (parent, isEmpty) {\n var _this = this;\n this.injectGridModules(parent);\n this.parent.grid = new Grid({\n frozenColumns: 1,\n frozenRows: 0,\n dataSource: isEmpty ? this.frameEmptyData() : this.frameDataSource('value'),\n columns: isEmpty ? this.frameEmptyColumns() : this.frameStackedHeaders(),\n height: ((this.engine && (parent.height > (this.engine.valueContent.length * this.gridSettings.rowHeight)))\n || isEmpty) ? 'auto' : parent.height,\n width: isEmpty ? this.parent.width : this.calculateGridWidth(),\n locale: parent.locale,\n enableRtl: parent.enableRtl,\n allowExcelExport: parent.allowExcelExport,\n allowPdfExport: parent.allowPdfExport,\n allowResizing: this.gridSettings.allowResizing,\n allowTextWrap: this.gridSettings.allowTextWrap,\n allowReordering: this.gridSettings.allowReordering,\n allowSelection: this.gridSettings.allowSelection,\n contextMenuItems: this.gridSettings.contextMenuItems,\n selectedRowIndex: this.gridSettings.selectedRowIndex,\n selectionSettings: this.gridSettings.selectionSettings,\n printMode: this.gridSettings.printMode,\n rowHeight: this.gridSettings.rowHeight,\n gridLines: this.gridSettings.gridLines,\n contextMenuClick: this.gridSettings.contextMenuClick ? this.gridSettings.contextMenuClick.bind(this.parent) : undefined,\n contextMenuOpen: this.gridSettings.contextMenuOpen ? this.gridSettings.contextMenuOpen.bind(this.parent) : undefined,\n beforeCopy: this.gridSettings.beforeCopy ? this.gridSettings.beforeCopy.bind(this.parent) : undefined,\n beforePrint: this.gridSettings.beforePrint ? this.gridSettings.beforePrint.bind(this.parent) : undefined,\n printComplete: this.gridSettings.printComplete ? this.gridSettings.printComplete.bind(this.parent) : undefined,\n rowSelecting: this.gridSettings.rowSelecting ? this.gridSettings.rowSelecting.bind(this.parent) : undefined,\n rowSelected: this.gridSettings.rowSelected ? this.gridSettings.rowSelected.bind(this.parent) : undefined,\n rowDeselecting: this.gridSettings.rowDeselecting ? this.gridSettings.rowDeselecting.bind(this.parent) : undefined,\n rowDeselected: this.gridSettings.rowDeselected ? this.gridSettings.rowDeselected.bind(this.parent) : undefined,\n cellSelecting: this.gridSettings.cellSelecting ? this.gridSettings.cellSelecting.bind(this.parent) : undefined,\n cellSelected: this.gridSettings.cellSelected ? this.gridSettings.cellSelected.bind(this.parent) : undefined,\n cellDeselecting: this.gridSettings.cellDeselecting ? this.gridSettings.cellDeselecting.bind(this.parent) : undefined,\n cellDeselected: this.gridSettings.cellDeselected ? this.gridSettings.cellDeselected.bind(this.parent) : undefined,\n resizeStart: this.gridSettings.resizeStart ? this.gridSettings.resizeStart.bind(this.parent) : undefined,\n columnDragStart: this.gridSettings.columnDragStart ? this.gridSettings.columnDragStart.bind(this) : undefined,\n columnDrag: this.gridSettings.columnDrag ? this.gridSettings.columnDrag.bind(this) : undefined,\n columnDrop: this.gridSettings.columnDrop ? this.gridSettings.columnDrop.bind(this) : undefined,\n resizing: this.setGroupWidth.bind(this),\n resizeStop: this.onResizeStop.bind(this),\n queryCellInfo: function (args) {\n parent.renderModule.rowCellBoundEvent(args);\n },\n dataBound: function (args) {\n if (parent.element.querySelector('.e-firstcell')) {\n if (parent.enableRtl) {\n parent.element.querySelector('.e-firstcell').style.borderRight = 'none';\n }\n else {\n parent.element.querySelector('.e-firstcell').style.borderLeft = 'none';\n }\n }\n _this.parent.grid.widthService.setWidthToTable();\n parent.notify(events.contentReady, {});\n },\n headerCellInfo: function (args) {\n parent.renderModule.columnCellBoundEvent(args);\n },\n excelHeaderQueryCellInfo: function (args) {\n parent.renderModule.excelColumnEvent(args);\n },\n pdfHeaderQueryCellInfo: function (args) {\n parent.renderModule.pdfColumnEvent(args);\n },\n excelQueryCellInfo: function (args) {\n parent.renderModule.excelRowEvent(args);\n },\n pdfQueryCellInfo: function (args) {\n parent.renderModule.pdfRowEvent(args);\n }\n });\n };\n Render.prototype.injectGridModules = function (parent) {\n Grid.Inject(Freeze);\n if (parent.allowExcelExport) {\n Grid.Inject(ExcelExport);\n }\n if (parent.allowPdfExport) {\n Grid.Inject(PdfExport);\n }\n if (this.gridSettings.allowSelection) {\n Grid.Inject(Selection);\n }\n if (this.gridSettings.allowReordering) {\n Grid.Inject(Reorder);\n }\n if (this.gridSettings.allowResizing) {\n Grid.Inject(Resize);\n }\n if (this.gridSettings.contextMenuItems) {\n Grid.Inject(ContextMenu);\n }\n };\n /** @hidden */\n Render.prototype.updateGridSettings = function () {\n this.injectGridModules(this.parent);\n this.parent.grid.allowResizing = this.gridSettings.allowResizing;\n this.parent.grid.allowTextWrap = this.gridSettings.allowTextWrap;\n this.parent.grid.allowReordering = this.gridSettings.allowReordering;\n this.parent.grid.allowSelection = this.gridSettings.allowSelection;\n this.parent.grid.contextMenuItems = this.gridSettings.contextMenuItems;\n this.parent.grid.selectedRowIndex = this.gridSettings.selectedRowIndex;\n this.parent.grid.selectionSettings = this.gridSettings.selectionSettings;\n this.parent.grid.printMode = this.gridSettings.printMode;\n this.parent.grid.rowHeight = this.gridSettings.rowHeight;\n this.parent.grid.gridLines = this.gridSettings.gridLines;\n };\n Render.prototype.appendValueSortIcon = function (cell, tCell, rCnt, cCnt) {\n var vSort = this.parent.dataSource.valueSortSettings;\n var len = (cell.type === 'grand sum' && this.parent.dataSource.values.length === 1) ? 0 :\n this.parent.dataSource.values.length > 1 ? (this.parent.engineModule.headerContent.length - 1) :\n this.parent.dataSource.columns.length === 0 ? 0 : (this.parent.engineModule.headerContent.length - 1);\n var lock = (vSort && vSort.headerText) ? cell.valueSort.levelName === vSort.headerText : cCnt === vSort.columnIndex;\n if (vSort !== undefined && lock && rCnt === len && this.parent.dataSource.valueAxis === 'column') {\n if (tCell.querySelector('.e-sortfilterdiv')) {\n tCell.querySelector('.e-sortfilterdiv').classList.add(vSort.sortOrder === 'Descending' ? 'e-descending' : 'e-ascending');\n tCell.querySelector('.e-sortfilterdiv').classList.add(vSort.sortOrder === 'Descending' ?\n 'e-icon-descending' : 'e-icon-ascending');\n }\n else {\n tCell.appendChild(createElement('div', {\n className: (vSort.sortOrder === 'Descending' ?\n 'e-icon-descending e-icons e-descending e-sortfilterdiv' : 'e-icon-ascending e-icons e-ascending e-sortfilterdiv'),\n }));\n }\n if (!isNullOrUndefined(cell.hasChild) && cell.type !== 'grand sum' && tCell.querySelector('.e-expand') &&\n (tCell.querySelector('.e-icon-descending') || tCell.querySelector('.e-icon-ascending'))) {\n var element = (tCell.querySelector('.e-icon-descending') || tCell.querySelector('.e-icon-ascending'));\n setStyleAttribute(element, { 'padding-top': '12px' });\n }\n }\n return tCell;\n };\n Render.prototype.onResizeStop = function (args) {\n var column = args.column.field === '0.formattedText' ? '0.formattedText' :\n args.column.customAttributes.cell.valueSort.levelName;\n this.parent.resizeInfo[column] =\n Number(args.column.width.toString().split('px')[0]);\n this.parent.grid.headerModule.refreshUI();\n this.setGroupWidth(args);\n };\n Render.prototype.setGroupWidth = function (args) {\n if (this.parent.showGroupingBar && this.parent.groupingBarModule && this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {\n this.parent.groupingBarModule.refreshUI();\n if (this.parent.element.querySelector('.e-group-row').offsetWidth < 245) {\n args.cancel = true;\n var gridColumn = this.parent.grid.columns;\n if (gridColumn && gridColumn.length > 0) {\n gridColumn[0].width = 250;\n }\n this.parent.element.querySelector('.e-frozenheader').querySelector('col').style.width = '250px';\n this.parent.element.querySelector('.e-frozencontent').querySelector('col').style.width = '250px';\n }\n this.parent.element.querySelector('.e-group-values').style.width =\n this.parent.element.querySelector('.e-group-row').offsetWidth + 'px';\n this.parent.element.querySelector('.e-group-row').style.height =\n this.parent.element.querySelector('.e-headercontent').offsetHeight + 'px';\n }\n this.parent.trigger(args.e.type === 'touchend' || args.e.type === 'mouseup' ? events.resizeStop : events.resizing, args);\n };\n Render.prototype.rowCellBoundEvent = function (args) {\n var tCell = args.cell;\n if (tCell && this.engine) {\n tCell.setAttribute('index', (Number(tCell.getAttribute('index')) + this.engine.headerContent.length).toString());\n var cell = args.data[0];\n if (tCell.getAttribute('aria-colindex') === '0') {\n var isValueCell = cell.type && cell.type === 'value';\n tCell.innerText = '';\n var level = cell.level ? cell.level : (isValueCell ? (this.lastSpan + 1) : 0);\n do {\n if (level > 0) {\n tCell.appendChild(createElement('span', {\n className: level === 0 ? '' : cls.NEXTSPAN,\n }));\n }\n level--;\n } while (level > -1);\n level = cell.level ? cell.level : 0;\n this.lastSpan = !isValueCell ? level : this.lastSpan;\n if (!cell.hasChild && level > 0) {\n tCell.appendChild(createElement('span', {\n className: cls.LASTSPAN,\n }));\n }\n var fieldName = void 0;\n if ((this.parent.dataSource.rows.length > 0 &&\n (cell.valueSort ? Object.keys(cell.valueSort).length > 0 : true))) {\n fieldName = level > -1 ? this.parent.dataSource.rows[level].name : '';\n tCell.setAttribute('fieldname', fieldName);\n }\n var localizedText = cell.formattedText;\n if (cell.type) {\n if (cell.type === 'grand sum') {\n tCell.classList.add('e-gtot');\n localizedText = this.parent.localeObj.getConstant('grandTotal');\n }\n else {\n tCell.classList.add('e-stot');\n }\n }\n tCell.classList.add(cls.ROWSHEADER);\n if (cell.hasChild === true) {\n tCell.appendChild(createElement('div', {\n className: (cell.isDrilled === true ? cls.COLLAPSE : cls.EXPAND) + ' ' + cls.ICON,\n attrs: {\n 'title': cell.isDrilled === true ? this.parent.localeObj.getConstant('collapse') :\n this.parent.localeObj.getConstant('expand')\n }\n }));\n }\n tCell.appendChild(createElement('span', {\n className: cls.CELLVALUE,\n innerHTML: localizedText\n }));\n var vSort = this.parent.pivotView.dataSource.valueSortSettings;\n if (vSort && vSort.headerText && this.parent.dataSource.valueAxis === 'row'\n && this.parent.pivotValues[Number(tCell.getAttribute('index'))][0].valueSort.levelName) {\n if (this.parent.pivotValues[Number(tCell.getAttribute('index'))][0].valueSort.levelName\n === vSort.headerText) {\n var style = (tCell.querySelector('.e-expand') || tCell.querySelector('.e-collapse')) ? 'padding-top: 18px' :\n 'padding-top: 12px';\n tCell.appendChild(createElement('div', {\n className: (vSort.sortOrder === 'Descending' ?\n 'e-icon-descending e-icons e-descending e-sortfilterdiv' : 'e-icon-ascending e-icons e-ascending e-sortfilterdiv'),\n styles: style\n }));\n }\n }\n }\n else {\n var innerText = tCell.innerText.toString() === '0' ? '' : tCell.innerText;\n tCell.innerText = '';\n tCell.classList.add(cls.VALUESCONTENT);\n cell = args.data[Number(tCell.getAttribute('aria-colindex'))];\n if (cell.isSum) {\n tCell.classList.add(cls.SUMMARY);\n }\n if (cell.cssClass) {\n tCell.classList.add(cell.cssClass);\n }\n tCell.appendChild(createElement('span', {\n className: cls.CELLVALUE,\n innerHTML: innerText\n }));\n }\n }\n this.parent.trigger(events.queryCellInfo, args);\n };\n Render.prototype.columnCellBoundEvent = function (args) {\n if (args.cell.column && args.cell.column.customAttributes) {\n var cell = args.cell.column.customAttributes.cell;\n var tCell = args.node;\n if (cell) {\n var level = cell.level ? cell.level : 0;\n if ((cell.level === -1 && !cell.rowSpan && cell.rowIndex !== this.engine.headerContent.length - 1)\n || cell.rowSpan === -1) {\n args.node.style.display = 'none';\n }\n else if (cell.rowSpan > 1) {\n args.node.setAttribute('rowspan', cell.rowSpan.toString());\n args.node.setAttribute('aria-rowspan', cell.rowSpan.toString());\n if ((cell.rowIndex + cell.rowSpan) === this.engine.headerContent.length) {\n args.node.style.borderBottomWidth = '0px';\n }\n }\n args.node.setAttribute('aria-colindex', cell.colIndex.toString());\n args.node.setAttribute('index', cell.rowIndex.toString());\n var fieldName = void 0;\n if (!(this.parent.dataSource.values && this.parent.dataSource.valueAxis === 'column' && this.parent.dataSource.values.length > 1 &&\n (cell.rowIndex === this.engine.headerContent.length - 1)) && this.parent.dataSource.columns &&\n this.parent.dataSource.columns.length > 0) {\n fieldName = level > -1 ? this.parent.dataSource.columns[level].name : '';\n tCell.setAttribute('fieldname', fieldName);\n }\n if (cell.type) {\n tCell.classList.add(cell.type === 'grand sum' ? 'e-gtot' : 'e-stot');\n var localizedText = cell.type === 'grand sum' ? this.parent.localeObj.getConstant('grandTotal') :\n cell.formattedText.split('Total')[0] + this.parent.localeObj.getConstant('total');\n if (tCell.querySelector('.e-headertext') !== null) {\n tCell.querySelector('.e-headertext').innerText = localizedText;\n }\n else {\n tCell.querySelector('.e-stackedheadercelldiv').innerText = localizedText;\n }\n }\n tCell.classList.add(cls.COLUMNSHEADER);\n if (cell.hasChild === true) {\n var hdrdiv = tCell.querySelector('.e-headercelldiv');\n if (hdrdiv) {\n hdrdiv.style.height = 'auto';\n hdrdiv.style.lineHeight = 'normal';\n }\n var div = createElement('div', {\n className: (cell.isDrilled === true ? cls.COLLAPSE : cls.EXPAND) + ' ' + cls.ICON,\n attrs: {\n 'title': cell.isDrilled === true ? this.parent.localeObj.getConstant('collapse') :\n this.parent.localeObj.getConstant('expand')\n }\n });\n tCell.children[0].classList.add(cls.CELLVALUE);\n if (window.navigator.userAgent.indexOf('Edge') > -1 || window.navigator.userAgent.indexOf('Trident') > -1) {\n tCell.children[0].style.display = 'table';\n }\n else {\n tCell.children[0].style.display = 'block';\n }\n tCell.insertBefore(div, tCell.children[0]);\n }\n tCell = this.appendValueSortIcon(cell, tCell, cell.rowIndex, cell.colIndex);\n }\n }\n this.parent.trigger(events.headerCellInfo, args);\n };\n Render.prototype.getRowStartPos = function () {\n var pivotValues = this.parent.pivotValues;\n var rowPos;\n for (var rCnt = 0; rCnt < pivotValues.length; rCnt++) {\n if (pivotValues[rCnt] && pivotValues[rCnt][0] && pivotValues[rCnt][0].axis === 'row') {\n rowPos = rCnt;\n break;\n }\n }\n return rowPos;\n };\n Render.prototype.frameDataSource = function (type) {\n var dataContent = [];\n if (this.parent.dataSource.values.length > 0 && !this.engine.isEmptyData) {\n if ((this.parent.enableValueSorting) || !this.engine.isEngineUpdated) {\n var rowCnt = 0;\n var pivotValues = this.parent.pivotValues;\n var start = type === 'value' ? this.rowStartPos : 0;\n var end = type === 'value' ? pivotValues.length : this.rowStartPos;\n for (var rCnt = start; rCnt < end; rCnt++) {\n if (pivotValues[rCnt]) {\n rowCnt = type === 'header' ? rCnt : rowCnt;\n dataContent[rowCnt] = {};\n for (var cCnt = 0; cCnt < pivotValues[rCnt].length; cCnt++) {\n if (pivotValues[rCnt][cCnt]) {\n dataContent[rowCnt][cCnt] = pivotValues[rCnt][cCnt];\n }\n }\n rowCnt++;\n }\n }\n }\n else {\n dataContent = type === 'value' ? this.engine.valueContent : this.engine.headerContent;\n }\n }\n else {\n dataContent = this.frameEmptyData();\n }\n return dataContent;\n };\n Render.prototype.frameEmptyData = function () {\n var dataContent = [{\n 0: { formattedText: this.parent.localeObj.getConstant('grandTotal') },\n 1: { formattedText: this.parent.localeObj.getConstant('emptyData') }\n }];\n return dataContent;\n };\n Render.prototype.calculateColWidth = function (colCount) {\n var parWidth = isNaN(this.parent.width) ? (this.parent.width.toString().indexOf('%') > -1 ?\n ((parseFloat(this.parent.width.toString()) / 100) * this.parent.element.offsetWidth) : this.parent.element.offsetWidth) :\n Number(this.parent.width);\n if (this.parent.showGroupingBar && this.parent.groupingBarModule && this.parent.grid && this.parent.dataSource.rows.length > 0) {\n var gridColumn = this.parent.grid.columns;\n parWidth = parWidth - gridColumn[0].width;\n colCount = colCount - 1;\n }\n var colWidth = (colCount * this.gridSettings.columnWidth + 80) < parWidth ?\n (parWidth / colCount) : this.gridSettings.columnWidth;\n return colWidth;\n };\n Render.prototype.calculateGridWidth = function () {\n var colTotWidth = (this.engine.pivotValues[0].length * this.gridSettings.columnWidth + 80);\n var parWidth = this.parent.width;\n if (this.parent.width === 'auto' && this.parent.element.offsetWidth < colTotWidth) {\n parWidth = this.parent.element.offsetWidth;\n }\n return parWidth;\n };\n Render.prototype.frameStackedHeaders = function () {\n var integrateModel = [];\n if (this.parent.dataSource.values.length > 0 && !this.engine.isEmptyData) {\n var headerCnt = this.engine.headerContent.length;\n var headerSplit = [];\n var splitPos = [];\n var colWidth = this.calculateColWidth(this.engine.pivotValues[0].length);\n do {\n var columnModel = [];\n var actualCnt = 0;\n headerCnt--;\n var colField = this.engine.headerContent[headerCnt];\n if (colField) {\n for (var cCnt = 0; cCnt < Object.keys(colField).length + (colField[0] ? 0 : 1); cCnt++) {\n var colSpan = (colField[cCnt] && colField[cCnt].colSpan) ? colField[cCnt].colSpan : 1;\n var rowSpan = (colField[cCnt] && colField[cCnt].rowSpan) ? colField[cCnt].rowSpan : 1;\n var formattedText = colField[cCnt] ? (colField[cCnt].type === 'grand sum' ? this.parent.localeObj.getConstant('grandTotal') :\n (colField[cCnt].type === 'sum' ? colField[cCnt].formattedText.split('Total')[0] + this.parent.localeObj.getConstant('total') :\n colField[cCnt].formattedText)) : '';\n if (headerCnt === this.engine.headerContent.length - 1) {\n columnModel[actualCnt] = {\n field: (cCnt + '.formattedText'),\n headerText: formattedText,\n customAttributes: { 'cell': colField[cCnt] },\n width: colField[cCnt] ?\n this.setSavedWidth(colField[cCnt].valueSort.levelName, colWidth) : colWidth,\n minWidth: 30,\n format: cCnt === 0 ? '' : this.formatList[(cCnt - 1) % this.parent.dataSource.values.length]\n };\n }\n else if (headerSplit[cCnt]) {\n var tmpSpan = colSpan;\n var innerModel = [];\n var innerPos = cCnt;\n while (tmpSpan > 0) {\n if (columnModel[actualCnt]) {\n if (!integrateModel[splitPos[innerPos]]) {\n break;\n }\n innerModel.push(integrateModel[splitPos[innerPos]]);\n }\n else {\n columnModel[actualCnt] = {\n headerText: formattedText,\n customAttributes: { 'cell': colField[cCnt] },\n width: colField[cCnt] ?\n this.setSavedWidth(colField[cCnt].valueSort.levelName, colWidth) : colWidth,\n minWidth: 30\n };\n innerModel = [integrateModel[splitPos[innerPos]]];\n }\n tmpSpan = tmpSpan - headerSplit[innerPos];\n innerPos = innerPos + headerSplit[innerPos];\n }\n columnModel[actualCnt].columns = innerModel;\n }\n if (columnModel[actualCnt]) {\n columnModel[actualCnt].clipMode = this.gridSettings.clipMode;\n }\n headerSplit[cCnt] = colSpan;\n splitPos[cCnt] = actualCnt;\n actualCnt++;\n cCnt = cCnt + colSpan - 1;\n }\n }\n integrateModel = columnModel.length > 0 ? columnModel : integrateModel;\n } while (headerCnt > 0);\n integrateModel[0] = {\n field: (0 + '.formattedText'),\n width: this.setSavedWidth('0.formattedText', (this.parent.showGroupingBar && this.parent.groupingBarModule) ?\n colWidth < 250 ? 250 : colWidth : colWidth < 200 ? 200 : colWidth),\n minWidth: 30,\n headerText: '',\n allowReordering: false\n };\n }\n else {\n integrateModel = this.frameEmptyColumns();\n }\n return integrateModel;\n };\n Render.prototype.setSavedWidth = function (column, width) {\n width = this.parent.resizeInfo[column] ? this.parent.resizeInfo[column] : width;\n return width;\n };\n Render.prototype.frameEmptyColumns = function () {\n var columns = [];\n var colWidth = this.calculateColWidth(2);\n columns.push({ field: '0.formattedText', headerText: '', minWidth: 30, width: colWidth });\n columns.push({ field: '1.formattedText', headerText: this.parent.localeObj.getConstant('grandTotal'), minWidth: 30, width: colWidth });\n return columns;\n };\n /** @hidden */\n Render.prototype.getFormatList = function () {\n var formatArray = [];\n for (var vCnt = 0; vCnt < this.parent.dataSource.values.length; vCnt++) {\n var field = this.parent.dataSource.values[vCnt];\n if (this.parent.dataSource.formatSettings.length > 0) {\n var format = '';\n for (var fCnt = 0; fCnt < this.parent.dataSource.formatSettings.length; fCnt++) {\n var formatSettings = this.parent.dataSource.formatSettings[fCnt];\n if (field.name === formatSettings.name) {\n format = formatSettings.format;\n break;\n }\n else {\n continue;\n }\n }\n formatArray.push(format);\n }\n else {\n formatArray.push('N');\n }\n }\n return formatArray;\n };\n Render.prototype.excelColumnEvent = function (args) {\n args = this.exportHeaderEvent(args);\n this.parent.trigger(events.excelHeaderQueryCellInfo, args);\n };\n Render.prototype.pdfColumnEvent = function (args) {\n args = this.exportHeaderEvent(args);\n this.parent.trigger(events.pdfHeaderQueryCellInfo, args);\n };\n Render.prototype.excelRowEvent = function (args) {\n if (args.column.field === '0.formattedText') {\n this.colPos = 0;\n args.style = { hAlign: 'Left', indent: args.data[0].level * 2 };\n }\n else {\n this.colPos++;\n args.value = args.data[this.colPos].value || args.data[this.colPos].formattedText;\n }\n args = this.exportContentEvent(args);\n this.parent.trigger(events.excelQueryCellInfo, args);\n };\n /* tslint:disable:no-any */\n Render.prototype.pdfRowEvent = function (args) {\n args = this.exportContentEvent(args);\n if (args.column.field === '0.formattedText') {\n args.style = { paragraphIndent: args.data[0].level * 10 };\n }\n this.parent.trigger(events.pdfQueryCellInfo, args);\n };\n Render.prototype.exportHeaderEvent = function (args) {\n var rowSpan = 1;\n if (args.gridCell.column.customAttributes) {\n var cell = args.gridCell.column.customAttributes.cell;\n rowSpan = cell.rowSpan ? cell.rowSpan : 1;\n }\n else {\n rowSpan = Object.keys(this.engine.headerContent).length;\n }\n if (args.cell.rowSpan && args.cell.rowSpan !== rowSpan && rowSpan > -1) {\n args.cell.rowSpan = rowSpan;\n }\n return args;\n };\n Render.prototype.exportContentEvent = function (args) {\n if (args.value === '0') {\n args.value = '';\n }\n args.value = args.data[Number(args.column.field.split('.formattedText')[0])].type === 'grand sum' ?\n this.parent.localeObj.getConstant('grandTotal') : args.value;\n return args;\n };\n return Render;\n}());\nexport { Render };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, Collection, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the fields in dataSource.\n */\nvar FieldOptions = /** @class */ (function (_super) {\n __extends(FieldOptions, _super);\n function FieldOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldOptions.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"caption\", void 0);\n __decorate([\n Property('Sum')\n ], FieldOptions.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"axis\", void 0);\n __decorate([\n Property(false)\n ], FieldOptions.prototype, \"showNoDataItems\", void 0);\n return FieldOptions;\n}(ChildProperty));\nexport { FieldOptions };\nvar FieldListFieldOptions = /** @class */ (function (_super) {\n __extends(FieldListFieldOptions, _super);\n function FieldListFieldOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return FieldListFieldOptions;\n}(FieldOptions));\nexport { FieldListFieldOptions };\n/**\n * Configures the style settings.\n */\nvar Style = /** @class */ (function (_super) {\n __extends(Style, _super);\n function Style() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Style.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property()\n ], Style.prototype, \"color\", void 0);\n __decorate([\n Property()\n ], Style.prototype, \"fontFamily\", void 0);\n __decorate([\n Property()\n ], Style.prototype, \"fontSize\", void 0);\n return Style;\n}(ChildProperty));\nexport { Style };\n/**\n * Configures the filter settings.\n */\nvar Filter = /** @class */ (function (_super) {\n __extends(Filter, _super);\n function Filter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Filter.prototype, \"name\", void 0);\n __decorate([\n Property('Include')\n ], Filter.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"items\", void 0);\n __decorate([\n Property('DoesNotEquals')\n ], Filter.prototype, \"condition\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"value1\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"value2\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"measure\", void 0);\n return Filter;\n}(ChildProperty));\nexport { Filter };\n/**\n * Configures the conditional format settings.\n */\nvar ConditionalFormatSettings = /** @class */ (function (_super) {\n __extends(ConditionalFormatSettings, _super);\n function ConditionalFormatSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"measure\", void 0);\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"label\", void 0);\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"conditions\", void 0);\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"value1\", void 0);\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"value2\", void 0);\n __decorate([\n Property()\n ], ConditionalFormatSettings.prototype, \"style\", void 0);\n return ConditionalFormatSettings;\n}(ChildProperty));\nexport { ConditionalFormatSettings };\n/**\n * Configures the sort settings.\n */\nvar Sort = /** @class */ (function (_super) {\n __extends(Sort, _super);\n function Sort() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Sort.prototype, \"name\", void 0);\n __decorate([\n Property('Ascending')\n ], Sort.prototype, \"order\", void 0);\n return Sort;\n}(ChildProperty));\nexport { Sort };\n/**\n * Configures the format settings of value fields.\n */\nvar FormatSettings = /** @class */ (function (_super) {\n __extends(FormatSettings, _super);\n function FormatSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FormatSettings.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"minimumFractionDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"maximumFractionDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"minimumSignificantDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"maximumSignificantDigits\", void 0);\n __decorate([\n Property(true)\n ], FormatSettings.prototype, \"useGrouping\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"skeleton\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"currency\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"minimumIntegerDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"format\", void 0);\n return FormatSettings;\n}(ChildProperty));\nexport { FormatSettings };\n/**\n * Configures the calculatedfields settings.\n */\nvar CalculatedFieldSettings = /** @class */ (function (_super) {\n __extends(CalculatedFieldSettings, _super);\n function CalculatedFieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], CalculatedFieldSettings.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], CalculatedFieldSettings.prototype, \"formula\", void 0);\n return CalculatedFieldSettings;\n}(ChildProperty));\nexport { CalculatedFieldSettings };\n/**\n * Configures drilled state of field members.\n */\nvar DrillOptions = /** @class */ (function (_super) {\n __extends(DrillOptions, _super);\n function DrillOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], DrillOptions.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], DrillOptions.prototype, \"items\", void 0);\n return DrillOptions;\n}(ChildProperty));\nexport { DrillOptions };\n/**\n * Configures value sort settings.\n */\nvar ValueSortSettings = /** @class */ (function (_super) {\n __extends(ValueSortSettings, _super);\n function ValueSortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ValueSortSettings.prototype, \"headerText\", void 0);\n __decorate([\n Property('.')\n ], ValueSortSettings.prototype, \"headerDelimiter\", void 0);\n __decorate([\n Property('None')\n ], ValueSortSettings.prototype, \"sortOrder\", void 0);\n return ValueSortSettings;\n}(ChildProperty));\nexport { ValueSortSettings };\n/**\n * Configures the settings of dataSource.\n */\nvar DataSource = /** @class */ (function (_super) {\n __extends(DataSource, _super);\n function DataSource() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], DataSource.prototype, \"data\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"rows\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"columns\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"values\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"filters\", void 0);\n __decorate([\n Property(false)\n ], DataSource.prototype, \"expandAll\", void 0);\n __decorate([\n Property('column')\n ], DataSource.prototype, \"valueAxis\", void 0);\n __decorate([\n Collection([], Filter)\n ], DataSource.prototype, \"filterSettings\", void 0);\n __decorate([\n Collection([], Sort)\n ], DataSource.prototype, \"sortSettings\", void 0);\n __decorate([\n Property(true)\n ], DataSource.prototype, \"enableSorting\", void 0);\n __decorate([\n Property(false)\n ], DataSource.prototype, \"allowLabelFilter\", void 0);\n __decorate([\n Property(false)\n ], DataSource.prototype, \"allowValueFilter\", void 0);\n __decorate([\n Property([])\n ], DataSource.prototype, \"formatSettings\", void 0);\n __decorate([\n Collection([], DrillOptions)\n ], DataSource.prototype, \"drilledMembers\", void 0);\n __decorate([\n Complex({}, ValueSortSettings)\n ], DataSource.prototype, \"valueSortSettings\", void 0);\n __decorate([\n Collection([], CalculatedFieldSettings)\n ], DataSource.prototype, \"calculatedFieldSettings\", void 0);\n __decorate([\n Collection([], ConditionalFormatSettings)\n ], DataSource.prototype, \"conditionalFormatSettings\", void 0);\n return DataSource;\n}(ChildProperty));\nexport { DataSource };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Event } from '@syncfusion/ej2-base';\n/**\n * Represents Pivot widget model class.\n */\nvar GridSettings = /** @class */ (function (_super) {\n __extends(GridSettings, _super);\n function GridSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], GridSettings.prototype, \"gridLines\", void 0);\n __decorate([\n Property(false)\n ], GridSettings.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Property(false)\n ], GridSettings.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(true)\n ], GridSettings.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], GridSettings.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(110)\n ], GridSettings.prototype, \"columnWidth\", void 0);\n __decorate([\n Property('Ellipsis')\n ], GridSettings.prototype, \"clipMode\", void 0);\n __decorate([\n Property(false)\n ], GridSettings.prototype, \"allowSelection\", void 0);\n __decorate([\n Property(-1)\n ], GridSettings.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Property({ mode: 'Row', cellSelectionMode: 'Flow', type: 'Single' })\n ], GridSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property('AllPages')\n ], GridSettings.prototype, \"printMode\", void 0);\n __decorate([\n Property()\n ], GridSettings.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"columnDrop\", void 0);\n return GridSettings;\n}(ChildProperty));\nexport { GridSettings };\n","import { Workbook } from '@syncfusion/ej2-excel-export';\nimport * as events from '../../common/base/constant';\n/**\n * @hidden\n * `ExcelExport` module is used to handle the Excel export action.\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for the PivotGrid Excel Export module.\n * @hidden\n */\n function ExcelExport(parent) {\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'excelExport';\n };\n /**\n * Method to perform excel export.\n * @hidden\n */\n ExcelExport.prototype.exportToExcel = function (type) {\n /** Event trigerring */\n if (this.parent.enableVirtualization) {\n var pageSettings = this.parent.engineModule.pageSettings;\n this.parent.engineModule.pageSettings = null;\n this.parent.engineModule.generateGridData(this.parent.dataSource);\n this.parent.engineModule.pageSettings = pageSettings;\n }\n var args = {\n fileName: 'default', header: '', footer: '', dataCollections: [this.parent.engineModule.pivotValues]\n };\n this.parent.trigger(events.beforeExport, args);\n var fileName = args.fileName;\n var header = args.header;\n var footer = args.footer;\n var dataCollections = args.dataCollections;\n /** Fill data and export */\n /* tslint:disable-next-line:no-any */\n var workSheets = [];\n for (var dataColl = 0; dataColl < dataCollections.length; dataColl++) {\n var pivotValues = dataCollections[dataColl];\n var colLen = 0;\n var rowLen = pivotValues.length;\n var actualrCnt = 0;\n var formatList = this.parent.renderModule.getFormatList();\n var rows = [];\n var maxLevel = 0;\n for (var rCnt = 0; rCnt < rowLen; rCnt++) {\n if (pivotValues[rCnt]) {\n actualrCnt++;\n colLen = pivotValues[rCnt].length;\n var cells = [];\n for (var cCnt = 0; cCnt < colLen; cCnt++) {\n if (pivotValues[rCnt][cCnt]) {\n var pivotCell = pivotValues[rCnt][cCnt];\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n var cellValue = pivotCell.axis === 'value' ? pivotCell.value : pivotCell.formattedText;\n if (pivotCell.type === 'grand sum') {\n cellValue = this.parent.localeObj.getConstant('grandTotal');\n }\n else if (pivotCell.type === 'sum') {\n cellValue = cellValue.toString().replace('Total', this.parent.localeObj.getConstant('total'));\n }\n else {\n cellValue = cellValue === '0' ? '' : cellValue;\n }\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n cells.push({\n index: cCnt + 1, value: cellValue,\n colSpan: pivotCell.colSpan, rowSpan: pivotCell.rowSpan,\n });\n if (pivotCell.axis === 'value') {\n cells[cells.length - 1].style = {\n numberFormat: formatList[(cCnt - 1) % this.parent.dataSource.values.length],\n bold: false,\n wrapText: true\n };\n if (pivotCell.style) {\n cells[cells.length - 1].style.backColor = pivotCell.style.backgroundColor;\n cells[cells.length - 1].style.fontColor = pivotCell.style.color;\n cells[cells.length - 1].style.fontName = pivotCell.style.fontFamily;\n cells[cells.length - 1].style.fontSize = Number(pivotCell.style.fontSize.split('px')[0]);\n }\n }\n else {\n cells[cells.length - 1].style = {\n bold: true,\n vAlign: 'Center',\n wrapText: true,\n indent: cCnt === 1 ? pivotCell.level * 10 : 0\n };\n if (pivotCell.axis === 'row' && cCnt === 0) {\n cells[cells.length - 1].style.hAlign = 'Left';\n cells[cells.length - 1].style.indent = pivotCell.level * 2;\n maxLevel = pivotCell.level > maxLevel ? pivotCell.level : maxLevel;\n }\n }\n cells[cells.length - 1].style.borders = { color: '#000000', lineStyle: 'Thin' };\n }\n }\n cCnt = cCnt + (pivotCell.colSpan ? (pivotCell.colSpan - 1) : 0);\n }\n else {\n cells.push({\n index: cCnt + 1, value: '', colSpan: 1, rowSpan: 1,\n });\n }\n }\n rows.push({ index: actualrCnt, cells: cells });\n }\n }\n var columns = [];\n for (var cCnt = 0; cCnt < colLen; cCnt++) {\n columns.push({ index: cCnt + 1, width: 100 });\n }\n if (maxLevel > 0) {\n columns[0].width = 100 + (maxLevel * 20);\n }\n workSheets.push({ columns: columns, rows: rows });\n }\n var book = new Workbook({ worksheets: workSheets }, type === 'Excel' ? 'xlsx' : 'csv');\n book.save(fileName + (type === 'Excel' ? '.xlsx' : '.csv'));\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { PdfGrid, PdfPen, PointF, PdfDocument, PdfStandardFont, PdfFontFamily, PdfSolidBrush, PdfColor, PdfStringFormat, PdfVerticalAlignment, PdfTextAlignment, PdfFontStyle, PdfPageTemplateElement, RectangleF, PdfLayoutFormat } from '@syncfusion/ej2-pdf-export';\nimport * as events from '../../common/base/constant';\n/**\n * @hidden\n * `PDFExport` module is used to handle the PDF export action.\n */\nvar PDFExport = /** @class */ (function () {\n /**\n * Constructor for the PivotGrid PDF Export module.\n * @hidden\n */\n function PDFExport(parent) {\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n PDFExport.prototype.getModuleName = function () {\n return 'pdfExport';\n };\n /**\n * Method to perform pdf export.\n * @hidden\n */\n PDFExport.prototype.exportToPDF = function () {\n var eventParams = this.applyEvent();\n /** Fill data and export */\n var dataCollIndex = 0;\n var gridResult;\n var pivotValues = eventParams.args.dataCollections[dataCollIndex];\n var colLength = pivotValues && pivotValues.length > 0 ? pivotValues[0].length : 0;\n var integratedCnt = 0;\n do {\n var pdfGrid = new PdfGrid();\n if (pivotValues && pivotValues.length > 0) {\n pdfGrid.columns.add(pivotValues[0].length - integratedCnt >= 6 ? 6 : pivotValues[0].length - integratedCnt);\n var rowLen = pivotValues.length;\n var actualrCnt = 0;\n var maxLevel = 0;\n for (var rCnt = 0; rCnt < rowLen; rCnt++) {\n if (pivotValues[rCnt]) {\n var isColHeader = !(pivotValues[rCnt][0] && pivotValues[rCnt][0].axis === 'row');\n var colLen = pivotValues[rCnt].length > (integratedCnt + 6) ? (integratedCnt + 6) :\n pivotValues[rCnt].length;\n if (isColHeader) {\n pdfGrid.headers.add(1);\n }\n var pdfGridRow = !isColHeader ? pdfGrid.rows.addRow() : pdfGrid.headers.getHeader(actualrCnt);\n var localCnt = 0;\n var isEmptyRow = true;\n for (var cCnt = integratedCnt; cCnt < colLen; cCnt++) {\n var isValueCell = false;\n if (pivotValues[rCnt][cCnt]) {\n var pivotCell = pivotValues[rCnt][cCnt];\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n var cellValue = pivotCell.formattedText;\n cellValue = pivotCell.type === 'grand sum' ? this.parent.localeObj.getConstant('grandTotal') :\n (pivotCell.type === 'sum' ?\n cellValue.toString().replace('Total', this.parent.localeObj.getConstant('total')) :\n (cellValue === '0' ? '' : cellValue));\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n pdfGridRow.cells.getCell(localCnt).columnSpan = pivotCell.colSpan ?\n (6 - localCnt < pivotCell.colSpan ? 6 - localCnt : pivotCell.colSpan) : 1;\n if (isColHeader && pivotCell.rowSpan && pivotCell.rowSpan > 1) {\n pdfGridRow.cells.getCell(localCnt).rowSpan = pivotCell.rowSpan ? pivotCell.rowSpan : 1;\n }\n pdfGridRow.cells.getCell(localCnt).value = cellValue.toString();\n }\n if (cellValue !== '') {\n isEmptyRow = false;\n }\n }\n maxLevel = pivotCell.level > maxLevel && cCnt === 0 ? pivotCell.level : maxLevel;\n isValueCell = pivotCell.axis === 'value';\n cCnt = cCnt + (pdfGridRow.cells.getCell(localCnt).columnSpan ?\n (pdfGridRow.cells.getCell(localCnt).columnSpan - 1) : 0);\n localCnt = localCnt + (pdfGridRow.cells.getCell(localCnt).columnSpan ?\n (pdfGridRow.cells.getCell(localCnt).columnSpan - 1) : 0);\n if (pivotCell.style) {\n pdfGridRow = this.applyStyle(pdfGridRow, pivotCell, localCnt);\n }\n }\n else {\n pdfGridRow.cells.getCell(localCnt).value = '';\n if (cCnt === 0 && isColHeader && this.parent.dataSource.columns &&\n this.parent.dataSource.columns.length > 0) {\n pdfGrid.headers.getHeader(0).cells.getCell(0).rowSpan++;\n }\n }\n var stringFormat = new PdfStringFormat();\n stringFormat.paragraphIndent = (!isColHeader && cCnt === 0 && pivotValues[rCnt][cCnt]) ?\n pivotValues[rCnt][cCnt].level * 15 : 0;\n stringFormat.alignment = isValueCell ? PdfTextAlignment.Right : PdfTextAlignment.Left;\n stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n pdfGridRow.cells.getCell(localCnt).style.stringFormat = stringFormat;\n localCnt++;\n }\n if (isEmptyRow) {\n pdfGridRow.height = 16;\n }\n actualrCnt++;\n }\n }\n if (integratedCnt === 0) {\n pdfGrid.columns.getColumn(0).width = 100 + (maxLevel * 20);\n }\n }\n var layout = new PdfLayoutFormat();\n layout.paginateBounds = new RectangleF(0, 0, 0, 0);\n if (integratedCnt === 0 && this.parent.dataSource.columns && this.parent.dataSource.columns.length > 0) {\n pdfGrid.headers.getHeader(0).cells.getCell(0).rowSpan--;\n }\n if (gridResult) {\n gridResult = pdfGrid.draw(gridResult.page, new PointF(10, gridResult.bounds.y + gridResult.bounds.height + 10), layout);\n }\n else {\n gridResult = pdfGrid.draw(eventParams.page, new PointF(10, 20), layout);\n }\n integratedCnt = integratedCnt + 6;\n if (integratedCnt >= colLength && eventParams.args.dataCollections.length > (dataCollIndex + 1)) {\n dataCollIndex++;\n pivotValues = eventParams.args.dataCollections[dataCollIndex];\n colLength = pivotValues && pivotValues.length > 0 ? pivotValues[0].length : 0;\n integratedCnt = 0;\n }\n } while (integratedCnt < colLength);\n eventParams.document.save(eventParams.args.fileName + '.pdf');\n eventParams.document.destroy();\n };\n PDFExport.prototype.applyStyle = function (pdfGridRow, pivotCell, localCnt) {\n var color = this.parent.conditionalFormattingModule.hexToRgb(pivotCell.style.backgroundColor);\n var brush = new PdfSolidBrush(new PdfColor(color.r, color.g, color.b));\n pdfGridRow.cells.getCell(localCnt).style.backgroundBrush = brush;\n var size = Number(pivotCell.style.fontSize.split('px')[0]);\n var font = new PdfStandardFont(PdfFontFamily.TimesRoman, size, PdfFontStyle.Regular);\n pdfGridRow.cells.getCell(localCnt).style.font = font;\n color = this.parent.conditionalFormattingModule.hexToRgb(pivotCell.style.color);\n brush = new PdfSolidBrush(new PdfColor(color.r, color.g, color.b));\n pdfGridRow.cells.getCell(localCnt).style.textBrush = brush;\n return pdfGridRow;\n };\n PDFExport.prototype.applyEvent = function () {\n /** Event trigerring */\n if (this.parent.enableVirtualization) {\n var pageSettings = this.parent.engineModule.pageSettings;\n this.parent.engineModule.pageSettings = null;\n this.parent.engineModule.generateGridData(this.parent.dataSource);\n this.parent.engineModule.pageSettings = pageSettings;\n }\n var args = {\n fileName: 'default', header: '', footer: '', dataCollections: [this.parent.engineModule.pivotValues]\n };\n this.parent.trigger(events.beforeExport, args);\n var fileName = args.fileName;\n var header = args.header;\n var footer = args.footer;\n var dataCollections = args.dataCollections;\n var document = new PdfDocument();\n var page = document.pages.add();\n /** Header and Footer to be set */\n var font = new PdfStandardFont(PdfFontFamily.TimesRoman, 15, PdfFontStyle.Regular);\n var brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n var pen = new PdfPen(new PdfColor(0, 0, 0), .5);\n var headerTemplate = new PdfPageTemplateElement(new RectangleF(0, 0, page.graphics.clientSize.width, 20));\n headerTemplate.graphics.drawString(header, font, pen, brush, 0, 0, new PdfStringFormat(PdfTextAlignment.Center));\n document.template.top = headerTemplate;\n var footerTemplate = new PdfPageTemplateElement(new RectangleF(0, 0, page.graphics.clientSize.width, 20));\n footerTemplate.graphics.drawString(footer, font, pen, brush, 0, 0, new PdfStringFormat(PdfTextAlignment.Center));\n document.template.bottom = footerTemplate;\n return { document: document, page: page, args: args };\n };\n return PDFExport;\n}());\nexport { PDFExport };\n","import { KeyboardEvents, closest, addClass } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\n/**\n * PivotView Keyboard interaction\n */\n/** @hidden */\nvar KeyboardInteraction = /** @class */ (function () {\n /**\n * Constructor\n */\n function KeyboardInteraction(parent) {\n this.keyConfigs = {\n tab: 'tab',\n enter: 'enter',\n };\n this.parent = parent;\n this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;\n this.pivotViewKeyboardModule = new KeyboardEvents(this.parent.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n }\n KeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'tab':\n this.processTab(e);\n break;\n case 'enter':\n this.processEnter(e);\n break;\n }\n };\n KeyboardInteraction.prototype.getNextButton = function (target) {\n var allPivotButtons = [].slice.call(this.parent.element.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var nextElement = target;\n if (this.parent.grid.element.querySelector('.' + cls.PIVOT_BUTTON_CLASS)) {\n var len = allPivotButtons.length;\n for (var i = 0; i < len; i++) {\n if (allPivotButtons[i].getAttribute('data-uid') === target.getAttribute('data-uid')) {\n nextElement = allPivotButtons[i + 1] ? allPivotButtons[i + 1] : nextElement;\n break;\n }\n }\n }\n return nextElement;\n };\n KeyboardInteraction.prototype.processTab = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS)) {\n var gridFocus = this.parent.grid.serviceLocator.getService('focus');\n var nextButton = this.getNextButton(target);\n if (nextButton.getAttribute('data-uid') !== target.getAttribute('data-uid')) {\n gridFocus.currentInfo.skipAction = true;\n nextButton.focus();\n }\n else {\n gridFocus.focus();\n var element = gridFocus.getFocusedElement();\n addClass([element], ['e-focused', 'e-focus']);\n element.setAttribute('tabindex', '0');\n }\n e.preventDefault();\n return;\n }\n else if (!this.parent.showGroupingBar && this.parent.showFieldList) {\n if (target && closest(target, '.' + cls.TOGGLE_FIELD_LIST_CLASS)) {\n var gridFocus = this.parent.grid.serviceLocator.getService('focus');\n gridFocus.focus();\n var element = gridFocus.getFocusedElement();\n addClass([element], ['e-focused', 'e-focus']);\n element.setAttribute('tabindex', '0');\n }\n }\n else if (!this.parent.showGroupingBar && !this.parent.showFieldList) {\n if (target && closest(target, '.' + cls.PIVOT_VIEW_CLASS)) {\n var gridElement = closest(target, '.' + cls.PIVOT_VIEW_CLASS);\n var gridFocus = this.parent.grid.serviceLocator.getService('focus');\n var rows = [].slice.call(gridElement.getElementsByTagName('tr'));\n if (target.innerHTML === (rows[rows.length - 1]).lastChild.innerHTML) {\n gridFocus.currentInfo.skipAction = true;\n }\n else {\n gridFocus.focus();\n var element = gridFocus.getFocusedElement();\n addClass([element], ['e-focused', 'e-focus']);\n element.setAttribute('tabindex', '0');\n }\n }\n }\n };\n KeyboardInteraction.prototype.processEnter = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.GRID_CLASS) && target.querySelector('.' + cls.ICON)) {\n target.querySelector('.' + cls.ICON).click();\n e.preventDefault();\n return;\n }\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n KeyboardInteraction.prototype.destroy = function () {\n if (this.pivotViewKeyboardModule) {\n this.pivotViewKeyboardModule.destroy();\n }\n else {\n return;\n }\n };\n return KeyboardInteraction;\n}());\nexport { KeyboardInteraction };\n","import { createElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\n/**\n * Module to render Pivot button\n */\n/** @hidden */\nvar PivotContextMenu = /** @class */ (function () {\n /** Constructor for render module */\n function PivotContextMenu(parent) {\n this.parent = parent;\n this.parent.contextMenuModule = this;\n }\n /**\n * Initialize the pivot table rendering\n * @returns void\n * @private\n */\n PivotContextMenu.prototype.render = function () {\n this.renderContextMenu();\n };\n PivotContextMenu.prototype.renderContextMenu = function () {\n var menuItems = [\n { text: this.parent.localeObj.getConstant('addToFilter'), id: 'Context_Filters' },\n { text: this.parent.localeObj.getConstant('addToRow'), id: 'Context_Rows' },\n { text: this.parent.localeObj.getConstant('addToColumn'), id: 'Context_Columns' },\n { text: this.parent.localeObj.getConstant('addToValue'), id: 'Context_Values' }\n ];\n var menuOptions = {\n cssClass: cls.PIVOT_CONTEXT_MENU_CLASS,\n items: menuItems,\n enableRtl: this.parent.enableRtl,\n beforeOpen: this.onBeforeMenuOpen.bind(this),\n select: this.onSelectContextMenu.bind(this)\n };\n this.parent.element.appendChild(createElement('ul', {\n id: this.parent.element.id + '_PivotContextMenu'\n }));\n this.menuObj = new ContextMenu(menuOptions);\n this.menuObj.appendTo('#' + this.parent.element.id + '_PivotContextMenu');\n };\n PivotContextMenu.prototype.onBeforeMenuOpen = function (args) {\n var items = [].slice.call(args.element.querySelectorAll('li'));\n var fieldType = this.fieldElement.querySelector('.' + cls.PIVOT_BUTTON_CONTENT_CLASS).getAttribute('data-type');\n removeClass(items, cls.MENU_DISABLE);\n if (fieldType === 'CalculatedField') {\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (item.textContent !== this.parent.localeObj.getConstant('addToValue')) {\n addClass([item], cls.MENU_DISABLE);\n }\n }\n }\n };\n PivotContextMenu.prototype.onSelectContextMenu = function (menu) {\n if (menu.element.textContent !== null) {\n var fieldName = this.fieldElement.getAttribute('data-uid');\n var dropClass = menu.item.id.replace('Context_', '').toLowerCase();\n this.parent.pivotCommon.dataSourceUpdate.updateDataSource(fieldName, dropClass, -1);\n this.parent.updateDataSource(true);\n this.fieldElement = undefined;\n }\n };\n /**\n * To destroy the pivot button event listener\n * @return {void}\n * @hidden\n */\n PivotContextMenu.prototype.destroy = function () {\n if (!this.parent.isDestroyed) {\n return;\n }\n if (this.menuObj && !this.menuObj.isDestroyed) {\n this.menuObj.destroy();\n }\n else {\n return;\n }\n };\n return PivotContextMenu;\n}());\nexport { PivotContextMenu };\n","import { EventHandler, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { contentReady } from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/**\n * `VirtualScroll` module is used to handle scrolling behavior.\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for PivotView scrolling.\n * @hidden\n */\n function VirtualScroll(parent) {\n this.previousValues = { top: 0, left: 0 };\n this.parent = parent;\n this.addInternalEvents();\n }\n /**\n * It returns the Module name.\n * @returns string\n * @hidden\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualscroll';\n };\n VirtualScroll.prototype.addInternalEvents = function () {\n this.parent.on(contentReady, this.wireEvents, this);\n };\n VirtualScroll.prototype.wireEvents = function () {\n var mCont = this.parent.element.querySelector('.' + cls.MOVABLECONTENT_DIV);\n var fCont = this.parent.element.querySelector('.' + cls.FROZENCONTENT_DIV);\n var mHdr = this.parent.element.querySelector('.' + cls.MOVABLEHEADER_DIV);\n EventHandler.clearEvents(mCont);\n EventHandler.clearEvents(fCont);\n if (this.parent.engineModule) {\n EventHandler.add(mCont, 'scroll touchmove pointermove', this.onHorizondalScroll(mHdr, mCont, fCont), this);\n EventHandler.add(mCont, 'scroll wheel touchmove pointermove', this.onVerticalScroll(fCont, mCont), this);\n EventHandler.add(mCont, 'mouseup touchend', this.common(mHdr, mCont, fCont), this);\n }\n this.parent.grid.isPreventScrollEvent = true;\n };\n VirtualScroll.prototype.update = function (mHdr, mCont, top, left, e) {\n if (this.direction === 'vertical') {\n var rowValues = this.parent.dataSource.valueAxis === 'row' ? this.parent.dataSource.values.length : 1;\n var exactSize = (this.parent.pageSettings.rowSize * rowValues * this.parent.gridSettings.rowHeight);\n var section = Math.ceil(top / exactSize);\n if (this.parent.scrollPosObject.vertical === section) {\n hideSpinner(this.parent.element);\n return;\n }\n showSpinner(this.parent.element);\n this.parent.scrollPosObject.vertical = section;\n this.parent.engineModule.pageSettings.rowCurrentPage = section > 1 ? section : 1;\n this.parent.engineModule.generateGridData(this.parent.dataSource, this.parent.engineModule.headerCollection);\n this.parent.pivotValues = this.parent.engineModule.pivotValues;\n var exactPage = Math.ceil(this.parent.engineModule.rowStartPos / (this.parent.pageSettings.rowSize * rowValues));\n var pos = exactSize * exactPage -\n (this.parent.engineModule.rowFirstLvl * rowValues * this.parent.gridSettings.rowHeight);\n this.parent.scrollPosObject.verticalSection = pos;\n }\n else {\n var colValues = this.parent.dataSource.valueAxis === 'column' ? this.parent.dataSource.values.length : 1;\n var exactSize = (this.parent.pageSettings.columnSize *\n colValues * this.parent.gridSettings.columnWidth);\n var section = Math.ceil(left / exactSize);\n if (this.parent.scrollPosObject.horizontal === section) {\n hideSpinner(this.parent.element);\n return;\n }\n showSpinner(this.parent.element);\n this.parent.scrollPosObject.horizontal = section;\n this.parent.engineModule.pageSettings.columnCurrentPage = section > 1 ? section : 1;\n this.parent.engineModule.generateGridData(this.parent.dataSource, this.parent.engineModule.headerCollection);\n // let isLastPage: boolean =\n // (this.parent.engineModule.pivotValues[0] as IAxisSet[])[this.parent.engineModule.pivotValues[0].length - 1].type\n // === 'grand sum' && section > 0;\n this.parent.pivotValues = this.parent.engineModule.pivotValues;\n var exactPage = Math.ceil(this.parent.engineModule.colStartPos / (this.parent.pageSettings.columnSize * colValues));\n // let pos: number = isLastPage ?\n // ((left + mHdr.clientWidth) - ((mHdr.querySelector('.' + cls.TABLE) as HTMLElement).offsetWidth)) :\n // exactSize * exactPage - (this.parent.engineModule.colFirstLvl *\n // colValues * this.parent.gridSettings.columnWidth);\n var pos = exactSize * exactPage - (this.parent.engineModule.colFirstLvl *\n colValues * this.parent.gridSettings.columnWidth);\n this.parent.scrollPosObject.horizontalSection = pos;\n }\n };\n VirtualScroll.prototype.common = function (mHdr, mCont, fCont) {\n var _this = this;\n return function (e) {\n _this.update(mHdr, mCont, mCont.scrollTop, mCont.scrollLeft, e);\n };\n };\n VirtualScroll.prototype.onHorizondalScroll = function (mHdr, mCont, fCont) {\n var _this = this;\n /* tslint:disable-next-line */\n var timeOutObj;\n return function (e) {\n var left = mCont.scrollLeft;\n if (e.type === 'wheel' || e.type === 'touchmove') {\n clearTimeout(timeOutObj);\n /* tslint:disable */\n timeOutObj = setTimeout(function () {\n left = e.type === 'touchmove' ? mCont.scrollLeft : left;\n _this.update(mHdr, mCont, mCont.scrollTop, left, e);\n }, 300);\n }\n if (_this.previousValues.left === left) {\n fCont.scrollTop = mCont.scrollTop;\n return;\n }\n _this.direction = 'horizondal';\n var excessMove = _this.parent.scrollPosObject.horizontalSection > left ?\n -(_this.parent.scrollPosObject.horizontalSection - left) : ((left + mHdr.offsetWidth) -\n (_this.parent.scrollPosObject.horizontalSection + mCont.querySelector('.e-table').offsetWidth));\n if (_this.parent.scrollPosObject.horizontalSection > left ? true : excessMove > 1) {\n // showSpinner(this.parent.element);\n if (left > mHdr.clientWidth) {\n if (_this.parent.scrollPosObject.left < 1) {\n _this.parent.scrollPosObject.left = mHdr.clientWidth;\n }\n _this.parent.scrollPosObject.left = _this.parent.scrollPosObject.left - 50;\n excessMove = _this.parent.scrollPosObject.horizontalSection > left ?\n (excessMove - _this.parent.scrollPosObject.left) : (excessMove + _this.parent.scrollPosObject.left);\n }\n else {\n excessMove = -_this.parent.scrollPosObject.horizontalSection;\n }\n setStyleAttribute(mCont.querySelector('.e-table'), {\n transform: 'translate(' + (_this.parent.scrollPosObject.horizontalSection + excessMove) + 'px,' +\n _this.parent.scrollPosObject.verticalSection + 'px)'\n });\n setStyleAttribute(mHdr.querySelector('.e-table'), {\n transform: 'translate(' + (_this.parent.scrollPosObject.horizontalSection + excessMove) + 'px,' + 0 + 'px)'\n });\n _this.parent.scrollPosObject.horizontalSection = _this.parent.scrollPosObject.horizontalSection + excessMove;\n }\n _this.previousValues.left = left;\n mHdr.scrollLeft = mCont.scrollLeft;\n };\n };\n VirtualScroll.prototype.onVerticalScroll = function (fCont, mCont) {\n var _this = this;\n /* tslint:disable-next-line */\n var timeOutObj;\n return function (e) {\n var top = mCont.scrollTop;\n if (e.type === 'wheel' || e.type === 'touchmove') {\n clearTimeout(timeOutObj);\n /* tslint:disable */\n timeOutObj = setTimeout(function () {\n _this.update(null, mCont, mCont.scrollTop, mCont.scrollLeft, e);\n }, 300);\n }\n if (_this.previousValues.top === top) {\n return;\n }\n _this.direction = 'vertical';\n var excessMove = _this.parent.scrollPosObject.verticalSection > top ?\n -(_this.parent.scrollPosObject.verticalSection - top) : ((top + fCont.clientHeight) -\n (_this.parent.scrollPosObject.verticalSection + fCont.querySelector('.e-table').offsetHeight));\n if (_this.parent.scrollPosObject.verticalSection > top ? true : excessMove > 1) {\n // showSpinner(this.parent.element);\n if (top > fCont.clientHeight) {\n if (_this.parent.scrollPosObject.top < 1) {\n _this.parent.scrollPosObject.top = fCont.clientHeight;\n }\n _this.parent.scrollPosObject.top = _this.parent.scrollPosObject.top - 50;\n excessMove = _this.parent.scrollPosObject.verticalSection > top ?\n (excessMove - _this.parent.scrollPosObject.top) : (excessMove + _this.parent.scrollPosObject.top);\n }\n else {\n excessMove = -_this.parent.scrollPosObject.verticalSection;\n }\n setStyleAttribute(fCont.querySelector('.e-table'), {\n transform: 'translate(' + 0 + 'px,' + (_this.parent.scrollPosObject.verticalSection + excessMove) + 'px)'\n });\n setStyleAttribute(mCont.querySelector('.e-table'), {\n transform: 'translate(' + _this.parent.scrollPosObject.horizontalSection + 'px,' +\n (_this.parent.scrollPosObject.verticalSection + excessMove) + 'px)'\n });\n _this.parent.scrollPosObject.verticalSection = _this.parent.scrollPosObject.verticalSection + excessMove;\n }\n _this.previousValues.top = top;\n fCont.scrollTop = mCont.scrollTop;\n mCont.scrollTop = fCont.scrollTop;\n };\n };\n /**\n * @hidden\n */\n VirtualScroll.prototype.removeInternalEvents = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(contentReady, this.wireEvents);\n };\n /**\n * To destroy the virtualscrolling event listener\n * @return {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeInternalEvents();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Browser, Event, Component, createElement, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { EventHandler, Complex, extend, ChildProperty } from '@syncfusion/ej2-base';\nimport { Internationalization, L10n, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { removeClass, addClass } from '@syncfusion/ej2-base';\nimport { PivotEngine } from '../../base/engine';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { Render } from '../renderer/render';\nimport { DataSource } from '../model/dataSource';\nimport { GridSettings } from '../model/gridsettings';\nimport { ExcelExport } from '../actions/excel-export';\nimport { PDFExport } from '../actions/pdf-export';\nimport { KeyboardInteraction } from '../actions/keyboard';\nimport { PivotContextMenu } from '../../common/popups/context-menu';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { VirtualScroll } from '../actions/virtualscroll';\n/**\n * It holds the settings of Grouping Bar.\n */\nvar GroupingBarSettings = /** @class */ (function (_super) {\n __extends(GroupingBarSettings, _super);\n function GroupingBarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], GroupingBarSettings.prototype, \"showFilterIcon\", void 0);\n __decorate([\n Property(true)\n ], GroupingBarSettings.prototype, \"showSortIcon\", void 0);\n __decorate([\n Property(true)\n ], GroupingBarSettings.prototype, \"showRemoveIcon\", void 0);\n return GroupingBarSettings;\n}(ChildProperty));\nexport { GroupingBarSettings };\n/**\n * Represents the PivotView component.\n * ```html\n *
    \n * \n * ```\n */\nvar PivotView = /** @class */ (function (_super) {\n __extends(PivotView, _super);\n /**\n * Constructor for creating the widget\n * @param {PivotViewModel} options?\n * @param {string|HTMLElement} element?\n */\n function PivotView(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @hidden */\n _this.resizeInfo = {};\n /** @hidden */\n _this.scrollPosObject = {\n vertical: 0, horizontal: 0, verticalSection: 0,\n horizontalSection: 0, top: 0, left: 0, scrollDirection: { direction: '', position: 0 }\n };\n _this.needsID = true;\n _this.pivotView = _this;\n return _this;\n }\n PivotView_1 = PivotView;\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n PivotView.prototype.requiredModules = function () {\n var modules = [];\n var isCommonRequire;\n if (this.allowConditionalFormatting) {\n modules.push({ args: [this], member: 'conditionalformatting' });\n }\n if (this.allowCalculatedField) {\n isCommonRequire = true;\n modules.push({ args: [this], member: 'calculatedfield' });\n }\n if (this.showGroupingBar) {\n isCommonRequire = true;\n modules.push({ args: [this], member: 'grouping' });\n }\n if (this.showFieldList) {\n isCommonRequire = true;\n modules.push({ args: [this], member: 'fieldlist' });\n }\n if (this.allowExcelExport) {\n modules.push({ args: [this], member: 'excelExport' });\n }\n if (this.allowPdfExport) {\n modules.push({ args: [this], member: 'pdfExport' });\n }\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualscroll' });\n }\n if (isCommonRequire) {\n modules.push({ args: [this], member: 'common' });\n }\n return modules;\n };\n /**\n * For internal use only - Initializing internal properties;\n * @private\n */\n PivotView.prototype.preRender = function () {\n this.initProperties();\n this.isAdaptive = Browser.isDevice;\n this.toolTip = new Tooltip({\n target: 'td.e-valuescontent',\n showTipPointer: false,\n enableRtl: this.enableRtl,\n beforeRender: this.setToolTip.bind(this),\n beforeOpen: this.onBeforeTooltipOpen\n });\n this.keyboardModule = new KeyboardInteraction(this);\n this.contextMenuModule = new PivotContextMenu(this);\n this.toolTip.appendTo(this.element);\n this.globalize = new Internationalization(this.locale);\n this.defaultLocale = {\n grandTotal: 'Grand Total',\n total: 'Total',\n value: 'Value',\n noValue: 'No value',\n row: 'Row',\n column: 'Column',\n collapse: 'Collapse',\n expand: 'Expand',\n rowAxisPrompt: 'Drop row here',\n columnAxisPrompt: 'Drop column here',\n valueAxisPrompt: 'Drop value here',\n filterAxisPrompt: 'Drop filter here',\n filter: 'Filter',\n filtered: 'Filtered',\n sort: 'Sort',\n filters: 'Filters',\n rows: 'Rows',\n columns: 'Columns',\n values: 'Values',\n close: 'Close',\n cancel: 'Cancel',\n delete: 'Delete',\n calculatedField: 'Calculated Field',\n createCalculatedField: 'Create Calculated Field',\n fieldName: 'Enter the field name',\n error: 'Error',\n invalidFormula: 'Invalid formula.',\n dropText: 'Example: (\"Sum(Order_Count)\" + \"Sum(In_Stock)\") * 250',\n dropTextMobile: 'Add fields and edit formula here.',\n dropAction: 'Calculated field cannot be place in any other region except value axis.',\n alert: 'Alert',\n warning: 'Warning',\n ok: 'OK',\n search: 'Search',\n drag: 'Drag',\n remove: 'Remove',\n sum: 'Sum',\n average: 'Average',\n count: 'Count',\n min: 'Min',\n max: 'Max',\n allFields: 'All Fields',\n formula: 'Formula',\n addToRow: 'Add to Row',\n addToColumn: 'Add to Column',\n addToValue: 'Add to Value',\n addToFilter: 'Add to Filter',\n emptyData: 'No records to display',\n fieldExist: 'A field already exists in this name. Please enter a different name.',\n confirmText: 'A calculation field already exists in this name. Do you want to replace it?',\n noMatches: 'No matches',\n format: 'Summaries values by',\n edit: 'Edit',\n clear: 'Clear',\n formulaField: 'Drag and drop fields to formula',\n dragField: 'Drag field to formula',\n clearFilter: 'Clear',\n by: 'by',\n /* tslint:disable */\n member: 'Member',\n label: 'Label',\n date: 'Date',\n enterValue: 'Enter value',\n chooseDate: 'Enter date',\n Before: 'Before',\n BeforeOrEqualTo: 'Before Or Equal To',\n After: 'After',\n AfterOrEqualTo: 'After Or Equal To',\n labelTextContent: 'Show the items for which the label',\n dateTextContent: 'Show the items for which the date',\n valueTextContent: 'Show the items for which',\n Equals: 'Equals',\n DoesNotEquals: 'Does Not Equal',\n BeginWith: 'Begins With',\n DoesNotBeginWith: 'Does Not Begin With',\n EndsWith: 'Ends With',\n DoesNotEndsWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContains: 'Does Not Contain',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqualTo: 'Greater Than Or Equal To',\n LessThan: 'Less Than',\n LessThanOrEqualTo: 'Less Than Or Equal To',\n Between: 'Between',\n NotBetween: 'Not Between',\n And: 'and',\n /* tslint:enable */\n NotEquals: 'Not Equals',\n AllValues: 'All Values',\n conditionalFormating: 'Conditional Formatting',\n apply: 'APPLY',\n condition: 'Add Condition',\n formatLabel: 'Format'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.isDragging = false;\n this.addInternalEvents();\n };\n PivotView.prototype.onBeforeTooltipOpen = function (args) {\n args.element.classList.add('e-pivottooltipwrap');\n };\n PivotView.prototype.initProperties = function () {\n this.setProperties({ pivotValues: [] }, true);\n this.queryCellInfo = this.gridSettings.queryCellInfo ? this.gridSettings.queryCellInfo.bind(this) : undefined;\n this.headerCellInfo = this.gridSettings.headerCellInfo ? this.gridSettings.headerCellInfo.bind(this) : undefined;\n this.resizing = this.gridSettings.resizing ? this.gridSettings.resizing.bind(this) : undefined;\n this.resizeStop = this.gridSettings.resizeStop ? this.gridSettings.resizeStop.bind(this) : undefined;\n this.pdfHeaderQueryCellInfo = this.gridSettings.pdfHeaderQueryCellInfo ?\n this.gridSettings.pdfHeaderQueryCellInfo.bind(this) : undefined;\n this.pdfQueryCellInfo = this.gridSettings.pdfQueryCellInfo ? this.gridSettings.pdfQueryCellInfo.bind(this) : undefined;\n this.excelHeaderQueryCellInfo = this.gridSettings.excelHeaderQueryCellInfo ?\n this.gridSettings.excelHeaderQueryCellInfo.bind(this) : undefined;\n this.excelQueryCellInfo = this.gridSettings.excelQueryCellInfo ?\n this.gridSettings.excelQueryCellInfo.bind(this) : undefined;\n this.columnDragStart = this.gridSettings.columnDragStart ? this.gridSettings.columnDragStart.bind(this) : undefined;\n this.columnDrag = this.gridSettings.columnDrag ? this.gridSettings.columnDrag.bind(this) : undefined;\n this.columnDrop = this.gridSettings.columnDrop ? this.gridSettings.columnDrop.bind(this) : undefined;\n if (this.gridSettings.rowHeight === null) {\n this.setProperties({ gridSettings: { rowHeight: this.isAdaptive ? 48 : 36 } }, true);\n }\n if (this.enableVirtualization) {\n this.height = (typeof this.height === 'string' && this.height.indexOf('%') === -1) ?\n Number(this.height.split('px')[0]) : this.height;\n this.width = (typeof this.width === 'string' && this.width.indexOf('%') === -1) ?\n Number(this.width.split('px')[0]) : this.width;\n this.height = typeof this.height === 'number' ? this.height : 300;\n this.width = typeof this.width === 'number' ? this.width : 800;\n }\n if (this.enableVirtualization) {\n var colValues = 1;\n var rowValues = 1;\n if (this.dataSource.valueAxis === 'row') {\n rowValues = this.dataSource.values.length;\n }\n else {\n colValues = this.dataSource.values.length;\n }\n this.pageSettings = {\n columnCurrentPage: 1, rowCurrentPage: 1,\n columnSize: Math.ceil((Math.floor(this.width /\n this.gridSettings.columnWidth) - 1) / colValues),\n rowSize: Math.ceil(Math.floor(this.height / this.gridSettings.rowHeight) / rowValues)\n };\n if (this.allowExcelExport) {\n PivotView_1.Inject(ExcelExport);\n }\n if (this.allowPdfExport) {\n PivotView_1.Inject(PDFExport);\n }\n }\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @hidden\n */\n PivotView.prototype.render = function () {\n createSpinner({ target: this.element }, this.createElement);\n this.trigger(events.load, { 'dataSource': this.dataSource });\n this.updateClass();\n this.notify(events.initSubComponent, {});\n this.notify(events.initialLoad, {});\n if (this.isAdaptive) {\n this.contextMenuModule.render();\n }\n };\n /**\n * Register the internal events.\n * @returns void\n * @hidden\n */\n PivotView.prototype.addInternalEvents = function () {\n this.on(events.initialLoad, this.generateData, this);\n this.on(events.dataReady, this.renderPivotGrid, this);\n this.on(events.contentReady, this.onContentReady, this);\n };\n /**\n * De-Register the internal events.\n * @returns void\n * @hidden\n */\n PivotView.prototype.removeInternalEvents = function () {\n this.off(events.initialLoad, this.generateData);\n this.off(events.dataReady, this.renderPivotGrid);\n this.off(events.contentReady, this.onContentReady);\n };\n /**\n * Get the Pivot widget properties to be maintained in the persisted state.\n * @returns {string}\n * @hidden\n */\n PivotView.prototype.getPersistData = function () {\n var keyEntity = ['dataSource', 'pivotValues', 'gridSettings'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * It returns the Module name.\n * @returns string\n * @hidden\n */\n PivotView.prototype.getModuleName = function () {\n return 'pivotview';\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n * @hidden\n */\n PivotView.prototype.copy = function (withHeader) {\n this.grid.copy(withHeader);\n };\n /**\n * By default, prints all the pages of the Grid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./api-pivotgrid.html#printmode-string).\n * @returns {void}\n * @hidden\n */\n // public print(): void {\n // this.grid.print();\n // }\n /**\n * Called internally if any of the property value changed.\n * @returns void\n * @hidden\n */\n PivotView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'dataSource':\n this.notify(events.initialLoad, {});\n break;\n case 'pivotValues':\n this.notify(events.dataReady, {});\n break;\n case 'gridSettings':\n this.renderModule.updateGridSettings();\n break;\n case 'locale':\n case 'currencyCode':\n this.toolTip.destroy();\n _super.prototype.refresh.call(this);\n break;\n case 'enableRtl':\n this.notify(events.dataReady, {});\n this.updateClass();\n break;\n case 'groupingBarSettings':\n this.axisFieldModule.render();\n break;\n }\n }\n };\n /**\n * Render the UI section of PivotView.\n * @returns void\n * @hidden\n */\n PivotView.prototype.renderPivotGrid = function () {\n if (this.enableVirtualization) {\n this.virtualscrollModule = new VirtualScroll(this);\n }\n this.renderModule = new Render(this);\n this.renderModule.render();\n if (this.showFieldList || this.showGroupingBar) {\n this.notify(events.uiUpdate, this);\n }\n this.trigger(events.dataBound);\n if (this.allowConditionalFormatting) {\n this.applyFormatting();\n }\n };\n /**\n * Updates the PivotEngine using dataSource from Pivot View component.\n * @method updateDataSource\n * @return {void}\n * @hidden\n */\n PivotView.prototype.updateDataSource = function (isRefreshGrid) {\n showSpinner(this.element);\n this.engineModule = new PivotEngine(this.dataSource, '', this.engineModule.fieldList, this.pageSettings, this.enableValueSorting);\n var eventArgs = {\n dataSource: this.dataSource,\n pivotValues: this.engineModule.pivotValues\n };\n this.trigger(events.enginePopulated, eventArgs);\n this.pivotCommon.engineModule = this.engineModule;\n this.pivotCommon.dataSource = this.dataSource;\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.renderPivotGrid();\n };\n /**\n * To destroy the PivotView elements.\n * @returns void\n */\n PivotView.prototype.destroy = function () {\n this.removeInternalEvents();\n if (this.showGroupingBar && this.groupingBarModule) {\n this.groupingBarModule.destroy();\n }\n if (this.enableVirtualization && this.virtualscrollModule) {\n this.virtualscrollModule.destroy();\n }\n if (this.allowConditionalFormatting && this.conditionalFormattingModule) {\n this.conditionalFormattingModule.destroy();\n }\n if (this.isAdaptive && this.contextMenuModule) {\n this.contextMenuModule.destroy();\n }\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n this.unwireEvents();\n removeClass([this.element], cls.ROOT);\n removeClass([this.element], cls.RTL);\n removeClass([this.element], cls.DEVICE);\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Export Pivot widget data to Excel file(.xlsx).\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns void\n */\n /* tslint:disable-next-line:no-any */\n PivotView.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n if (this.enableVirtualization) {\n this.excelExportModule.exportToExcel('Excel');\n }\n else {\n this.grid.excelExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n }\n };\n /**\n * Export PivotGrid data to CSV file.\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns void\n */\n /* tslint:disable-next-line:no-any */\n PivotView.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n if (this.enableVirtualization) {\n this.excelExportModule.exportToExcel('CSV');\n }\n else {\n this.grid.csvExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n }\n };\n /**\n * Export Pivot widget data to PDF document.\n * @param {pdfExportProperties} PdfExportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Define to enable multiple export.\n * @param {pdfDoc} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns void\n */\n PivotView.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n if (this.enableVirtualization) {\n this.pdfExportModule.exportToPDF();\n }\n else {\n this.grid.pdfExport(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n }\n };\n PivotView.prototype.onDrill = function (target) {\n var fieldName = target.parentElement.getAttribute('fieldname');\n var memberName = this.engineModule.pivotValues[Number(target.parentElement.getAttribute('index'))][Number(target.parentElement.getAttribute('aria-colindex'))].actualText;\n this.engineModule.fieldList[fieldName].members[memberName].isDrilled =\n target.classList.contains(cls.COLLAPSE) ? false : true;\n var dataSource = extend({}, this.dataSource, null, true);\n var fieldAvail = false;\n var prop = dataSource.properties;\n if (!prop.drilledMembers || prop.drilledMembers.length === 0) {\n prop.drilledMembers = [{ name: fieldName, items: [memberName] }];\n }\n else {\n for (var fCnt = 0; fCnt < prop.drilledMembers.length; fCnt++) {\n var field = prop.drilledMembers[fCnt];\n if (field.name === fieldName) {\n fieldAvail = true;\n var memIndex = field.items.indexOf(memberName);\n if (memIndex > -1) {\n field.items.splice(memIndex, 1);\n }\n else {\n field.items.push(memberName);\n }\n }\n else {\n continue;\n }\n }\n if (!fieldAvail) {\n prop.drilledMembers.push({ name: fieldName, items: [memberName] });\n }\n }\n this.setProperties({ dataSource: { drilledMembers: prop.drilledMembers } }, true);\n showSpinner(this.element);\n this.engineModule.generateGridData(this.dataSource);\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.renderPivotGrid();\n };\n PivotView.prototype.onContentReady = function () {\n if (this.showFieldList) {\n hideSpinner(this.pivotFieldListModule.fieldListSpinnerElement);\n }\n else if (this.fieldListSpinnerElement) {\n hideSpinner(this.fieldListSpinnerElement);\n }\n if (!this.isEmptyGrid) {\n hideSpinner(this.element);\n }\n else {\n this.isEmptyGrid = false;\n }\n if (this.enableVirtualization && this.engineModule) {\n if (this.element.querySelector('.' + cls.MOVABLECONTENT_DIV) &&\n !this.element.querySelector('.' + cls.MOVABLECONTENT_DIV).querySelector('.' + cls.VIRTUALTRACK_DIV)) {\n this.virtualDiv = createElement('div', { className: cls.VIRTUALTRACK_DIV });\n this.element.querySelector('.' + cls.MOVABLECONTENT_DIV).appendChild(this.virtualDiv);\n }\n if (this.element.querySelector('.' + cls.MOVABLEHEADER_DIV) &&\n !this.element.querySelector('.' + cls.MOVABLEHEADER_DIV).querySelector('.' + cls.VIRTUALTRACK_DIV)) {\n this.virtualHeaderDiv = createElement('div', { className: cls.VIRTUALTRACK_DIV });\n this.element.querySelector('.' + cls.MOVABLEHEADER_DIV).appendChild(this.virtualHeaderDiv);\n }\n else {\n this.virtualHeaderDiv =\n this.element.querySelector('.' + cls.MOVABLEHEADER_DIV).querySelector('.' + cls.VIRTUALTRACK_DIV);\n }\n var movableTable = this.element.querySelector('.' + cls.MOVABLECONTENT_DIV).querySelector('.e-table');\n var vHeight = (this.gridSettings.rowHeight * this.engineModule.rowCount + 0.1 - movableTable.clientHeight);\n var vWidth = (this.gridSettings.columnWidth * this.engineModule.columnCount\n - this.grid.columns[0].width);\n setStyleAttribute(this.virtualDiv, {\n height: (vHeight > 0.1 ? vHeight : 0.1) + 'px',\n width: (vWidth > 0.1 ? vWidth : 0.1) + 'px'\n });\n setStyleAttribute(this.virtualHeaderDiv, {\n height: 0, width: (vWidth > 0.1 ? vWidth : 0.1) + 'px'\n });\n var mCnt = this.element.querySelector('.' + cls.MOVABLECONTENT_DIV);\n var fCnt = this.element.querySelector('.' + cls.FROZENCONTENT_DIV);\n var mHdr = this.element.querySelector('.' + cls.MOVABLEHEADER_DIV);\n setStyleAttribute(fCnt.querySelector('.e-table'), {\n transform: 'translate(' + 0 + 'px,' + this.scrollPosObject.verticalSection + 'px)'\n });\n setStyleAttribute(mCnt.querySelector('.e-table'), {\n transform: 'translate(' + this.scrollPosObject.horizontalSection + 'px,' + this.scrollPosObject.verticalSection + 'px)'\n });\n setStyleAttribute(mHdr.querySelector('.e-table'), {\n transform: 'translate(' + this.scrollPosObject.horizontalSection + 'px,' + 0 + 'px)'\n });\n }\n this.element.style.minWidth = '500px';\n this.grid.element.style.minWidth = '500px';\n this.unwireEvents();\n this.wireEvents();\n };\n PivotView.prototype.setToolTip = function (args) {\n var colIndex = Number(args.target.getAttribute('aria-colindex'));\n var rowIndex = Number(args.target.getAttribute('index'));\n var cell = this.pivotValues[rowIndex][colIndex];\n this.toolTip.content = '';\n if (cell) {\n this.toolTip.content = '

    ' +\n this.localeObj.getConstant('row') + ':

    ' +\n this.getRowText(rowIndex, 0) +\n '


    ' +\n this.localeObj.getConstant('column') + ':

    ' +\n this.getColText(0, colIndex, rowIndex) + '


    ' + '

    ' +\n this.localeObj.getConstant('value') + ':

    ' +\n ((cell.formattedText === '0' ? this.localeObj.getConstant('noValue') : cell.formattedText)) + '

    ';\n }\n else {\n args.cancel = true;\n }\n };\n PivotView.prototype.getRowText = function (rowIndex, colIndex) {\n var cell = this.pivotValues[rowIndex][colIndex];\n var level = cell.level;\n var rowText = cell.type === 'grand sum' ? this.localeObj.getConstant('grandTotal') : cell.formattedText;\n while (level > 0) {\n rowIndex--;\n cell = this.pivotValues[rowIndex][colIndex];\n if (level > cell.level) {\n rowText = rowText + ' - ' + (cell.type === 'grand sum' ? this.localeObj.getConstant('grandTotal') :\n cell.formattedText);\n level = cell.level;\n }\n }\n return rowText.split(' - ').reverse().join(' - ');\n };\n PivotView.prototype.getColText = function (rowIndex, colIndex, limit) {\n var cell = this.pivotValues[0][colIndex];\n var axis = cell.axis;\n var colText = cell.type === 'grand sum' ? this.localeObj.getConstant('grandTotal') : cell.formattedText;\n while (axis !== 'value' && limit > rowIndex) {\n rowIndex++;\n if (this.pivotValues[rowIndex]) {\n cell = this.pivotValues[rowIndex][colIndex];\n axis = cell.axis;\n if (cell.type !== 'sum' && cell.type !== 'grand sum' && axis !== 'value') {\n colText = colText + ' - ' + cell.formattedText;\n }\n }\n }\n return colText;\n };\n PivotView.prototype.updateClass = function () {\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n if (this.isAdaptive) {\n addClass([this.element], cls.DEVICE);\n }\n else {\n removeClass([this.element], cls.DEVICE);\n }\n };\n PivotView.prototype.wireEvents = function () {\n EventHandler.add(this.element, this.isAdaptive ? 'touchend' : 'click', this.mouseClickHandler, this);\n window.addEventListener('resize', this.onWindowResize.bind(this), true);\n };\n PivotView.prototype.mouseClickHandler = function (e) {\n var target = e.target;\n if ((target.classList.contains('e-headercell') ||\n target.classList.contains('e-headercelldiv') ||\n target.classList.contains('e-rowsheader') ||\n target.classList.contains('e-rowcell') ||\n target.classList.contains('e-stackedheadercelldiv') ||\n target.classList.contains('e-headertext') ||\n target.classList.contains('e-ascending') ||\n target.classList.contains('e-descending')) && this.enableValueSorting) {\n var ele = null;\n if (target.classList.contains('e-headercell') || target.classList.contains('e-rowsheader')\n || target.classList.contains('e-rowcell')) {\n ele = target;\n }\n else if (target.classList.contains('e-stackedheadercelldiv') || target.classList.contains('e-headercelldiv') ||\n target.classList.contains('e-ascending') || target.classList.contains('e-descending')) {\n ele = target.parentElement;\n }\n else if (target.classList.contains('e-headertext')) {\n ele = target.parentElement.parentElement;\n }\n this.CellClicked(target);\n if ((ele.parentElement.parentElement.parentElement.parentElement.classList.contains('e-movableheader')\n && this.dataSource.valueAxis === 'column') || (ele.parentElement.classList.contains('e-row') &&\n this.dataSource.valueAxis === 'row')) {\n /* tslint:disable */\n var colIndex = Number(ele.getAttribute('aria-colindex'));\n var rowIndex = Number(ele.getAttribute('index'));\n if (this.dataSource.valueAxis === 'row' && this.dataSource.values.length > 1) {\n rowIndex = this.pivotValues[rowIndex][colIndex].type === 'value' ? rowIndex : (rowIndex + 1);\n }\n else if (this.dataSource.valueAxis === 'column' && this.dataSource.values.length > 1) {\n colIndex = (Number(ele.getAttribute('aria-colindex')) + Number(ele.getAttribute('aria-colspan')) - 1);\n rowIndex = this.engineModule.headerContent.length - 1;\n }\n this.setProperties({\n dataSource: {\n valueSortSettings: {\n columnIndex: (Number(ele.getAttribute('aria-colindex')) +\n Number(ele.getAttribute('aria-colspan')) - 1),\n sortOrder: this.dataSource.valueSortSettings.sortOrder === 'Descending' ? 'Ascending' : 'Descending',\n headerText: this.pivotValues[rowIndex][colIndex].valueSort.levelName,\n headerDelimiter: this.dataSource.valueSortSettings.headerDelimiter ?\n this.dataSource.valueSortSettings.headerDelimiter : '.'\n }\n }\n }, true);\n /* tslint:enable */\n showSpinner(this.element);\n this.engineModule.enableValueSorting = true;\n this.engineModule.generateGridData(this.dataSource, this.engineModule.headerCollection);\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.renderPivotGrid();\n }\n }\n else if (target.classList.contains(cls.COLLAPSE) || target.classList.contains(cls.EXPAND)) {\n this.onDrill(target);\n }\n else {\n this.CellClicked(target);\n return;\n }\n };\n /** @hidden */\n PivotView.prototype.onWindowResize = function () {\n var _this = this;\n /* tslint:disable */\n clearTimeout(this.timeOutObj);\n this.timeOutObj = setTimeout(function () {\n if (_this.element && _this.element.classList.contains('e-pivotview') && _this.engineModule) {\n var colWidth = _this.renderModule.calculateColWidth(_this.dataSource.values.length > 0 ?\n _this.engineModule.pivotValues[0].length : 2);\n _this.grid.width = _this.renderModule.calculateGridWidth();\n for (var cCnt = 0; cCnt < _this.grid.columns.length; cCnt++) {\n if (cCnt === 0 && colWidth < (_this.showGroupingBar && _this.groupingBarModule ? 250 : 200)) {\n _this.grid.columns[cCnt].width = (_this.showGroupingBar && _this.groupingBarModule ? 250 : 200);\n }\n else {\n _this.grid.columns[cCnt].width = colWidth;\n }\n }\n _this.grid.headerModule.refreshUI();\n if (_this.showGroupingBar && _this.groupingBarModule && _this.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {\n _this.groupingBarModule.setGridRowWidth();\n }\n }\n }, 500);\n /* tslint:enable */\n };\n PivotView.prototype.CellClicked = function (target) {\n var ele = null;\n if (target.classList.contains('e-headercell') || target.classList.contains('e-rowcell')) {\n ele = target;\n }\n else if (target.classList.contains('e-stackedheadercelldiv') || target.classList.contains('e-cellvalue') ||\n target.classList.contains('e-headercelldiv')) {\n ele = target.parentElement;\n }\n else if (target.classList.contains('e-headertext')) {\n ele = target.parentElement.parentElement;\n }\n if (ele) {\n if (this.cellClick) {\n this.trigger(events.cellClick, {\n currentCell: ele,\n data: this.pivotValues[Number(ele.getAttribute('index'))][Number(ele.getAttribute('aria-colindex'))]\n });\n }\n }\n };\n PivotView.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, this.isAdaptive ? 'touchend' : 'click', this.mouseClickHandler);\n window.removeEventListener('resize', this.onWindowResize.bind(this), true);\n };\n PivotView.prototype.renderEmptyGrid = function () {\n this.isEmptyGrid = true;\n this.element.innerHTML = '';\n this.renderModule = new Render(this);\n this.renderModule.bindGrid(this, true);\n /* tslint:disable:no-empty */\n this.grid.showSpinner = function () { };\n this.grid.hideSpinner = function () { };\n /* tslint:enable:no-empty */\n this.element.appendChild(createElement('div', { id: this.element.id + '_grid' }));\n this.grid.appendTo('#' + this.element.id + '_grid');\n };\n PivotView.prototype.initEngine = function () {\n this.trigger(events.enginePopulating, { 'dataSource': this.dataSource });\n this.engineModule = new PivotEngine(this.dataSource, '', undefined, this.pageSettings, this.enableValueSorting);\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.trigger(events.enginePopulated, { 'pivotValues': this.pivotValues });\n this.notify(events.dataReady, {});\n this.isEmptyGrid = false;\n };\n PivotView.prototype.generateData = function () {\n var _this = this;\n this.renderEmptyGrid();\n showSpinner(this.element);\n /* tslint:disable */\n if (this.dataSource && this.dataSource.data) {\n if (this.dataSource.data instanceof DataManager) {\n setTimeout(function () {\n _this.dataSource.data.executeQuery(new Query()).then(function (e) {\n if (!_this.element.querySelector('.e-spinner-pane')) {\n showSpinner(_this.element);\n }\n _this.setProperties({ dataSource: { data: e.result } }, true);\n _this.initEngine();\n });\n }, 100);\n }\n else if (this.dataSource.data.length > 0) {\n this.initEngine();\n }\n else {\n hideSpinner(this.element);\n }\n }\n else {\n hideSpinner(this.element);\n }\n /* tslint:enable */\n };\n PivotView.prototype.applyFormatting = function () {\n if (this.pivotValues) {\n for (var i = 0; i < this.pivotValues.length; i++) {\n for (var j = 1; (this.pivotValues[i] && j < this.pivotValues[i].length); j++) {\n if (this.pivotValues[i][j].axis === 'value') {\n this.pivotValues[i][j].style = undefined;\n this.pivotValues[i][j].cssClass = undefined;\n var format_1 = this.dataSource.conditionalFormatSettings;\n for (var k = 0; k < format_1.length; k++) {\n if (this.checkCondition(this.pivotValues[i][j].value, format_1[k].conditions, format_1[k].value1, format_1[k].value2)) {\n var len = this.dataSource.values.length > 1 ? this.dataSource.columns.length :\n this.dataSource.columns.length === 0 ? 0 : this.dataSource.columns.length - 1;\n if ((!format_1[k].measure || this.dataSource.values.length === 1 ||\n (this.pivotValues[len][j].\n valueSort.levelName.indexOf(format_1[k].measure) > -1)) && (!format_1[k].label ||\n ((this.pivotValues[this.dataSource.values.length > 1 ? (len - 1) : len][j].\n valueSort[format_1[k].label]) || (this.pivotValues[i][0]\n .valueSort[format_1[k].label])))) {\n if (format_1[k].style && format_1[k].style.backgroundColor) {\n format_1[k].style.backgroundColor = this.conditionalFormattingModule\n .isHex(format_1[k].style.backgroundColor.substr(1)) ? format_1[k].style.backgroundColor :\n this.conditionalFormattingModule.colourNameToHex(format_1[k].style.backgroundColor);\n }\n if (format_1[k].style && format_1[k].style.color) {\n format_1[k].style.color = this.conditionalFormattingModule\n .isHex(format_1[k].style.color.substr(1)) ? format_1[k].style.color :\n this.conditionalFormattingModule.colourNameToHex(format_1[k].style.color);\n }\n this.pivotValues[i][j].style = format_1[k].style;\n this.pivotValues[i][j].cssClass = 'format' + this.element.id + k;\n }\n }\n }\n }\n }\n }\n var format = this.dataSource.conditionalFormatSettings;\n for (var k = 0; k < format.length; k++) {\n var sheet = (function () {\n var style = document.createElement('style');\n style.appendChild(document.createTextNode(''));\n document.head.appendChild(style);\n return style.sheet;\n })();\n var str = 'color: ' + format[k].style.color + '!important;background-color: ' + format[k].style.backgroundColor +\n '!important;font-size: ' + format[k].style.fontSize + '!important;font-family: ' + format[k].style.fontFamily +\n ' !important;';\n sheet.insertRule('.format' + this.element.id + k + '{' + str + '}', 0);\n }\n }\n };\n PivotView.prototype.checkCondition = function (cellValue, conditions, conditionalValue1, conditionalValue2) {\n switch (conditions) {\n case 'LessThan':\n return cellValue < conditionalValue1;\n case 'LessThanOrEqualTo':\n return cellValue <= conditionalValue1;\n case 'GreaterThan':\n return cellValue > conditionalValue1;\n case 'GreaterThanOrEqualTo':\n return cellValue >= conditionalValue1;\n case 'Equals':\n return cellValue === conditionalValue1;\n case 'NotEquals':\n return cellValue !== conditionalValue1;\n case 'Between':\n return (conditionalValue1 < conditionalValue2 && cellValue >= conditionalValue1 && cellValue <= conditionalValue2) ||\n (conditionalValue1 > conditionalValue2 && cellValue <= conditionalValue1 && cellValue >= conditionalValue2);\n case 'NotBetween':\n return !((conditionalValue1 < conditionalValue2 && cellValue >= conditionalValue1 && cellValue <= conditionalValue2) ||\n (conditionalValue1 > conditionalValue2 && cellValue <= conditionalValue1 && cellValue >= conditionalValue2));\n default:\n return false;\n }\n };\n var PivotView_1;\n __decorate([\n Property('USD')\n ], PivotView.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"showFieldList\", void 0);\n __decorate([\n Complex({}, GridSettings)\n ], PivotView.prototype, \"gridSettings\", void 0);\n __decorate([\n Complex({}, GroupingBarSettings)\n ], PivotView.prototype, \"groupingBarSettings\", void 0);\n __decorate([\n Complex({}, DataSource)\n ], PivotView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], PivotView.prototype, \"pivotValues\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"showGroupingBar\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"showValuesButton\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowCalculatedField\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"enableValueSorting\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowConditionalFormatting\", void 0);\n __decorate([\n Property('auto')\n ], PivotView.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], PivotView.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"enginePopulating\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"enginePopulated\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"onFieldDropped\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"beforeExport\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"cellClick\", void 0);\n PivotView = PivotView_1 = __decorate([\n NotifyPropertyChanges\n ], PivotView);\n return PivotView;\n}(Component));\nexport { PivotView };\n","import { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\n/**\n * Keyboard interaction\n */\n/** @hidden */\nvar CommonKeyboardInteraction = /** @class */ (function () {\n /**\n * Constructor\n */\n function CommonKeyboardInteraction(parent) {\n this.keyConfigs = {\n shiftF: 'shift+F',\n shiftS: 'shift+S',\n delete: 'delete'\n };\n this.parent = parent;\n this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;\n this.keyboardModule = new KeyboardEvents(this.parent.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n }\n CommonKeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'shiftF':\n this.processFilter(e);\n break;\n case 'shiftS':\n this.processSort(e);\n break;\n case 'delete':\n this.processDelete(e);\n break;\n }\n };\n CommonKeyboardInteraction.prototype.processSort = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS) &&\n !closest(target, '.' + cls.VALUE_AXIS_CLASS) && !closest(target, '.' + cls.AXIS_FILTER_CLASS)) {\n target.querySelector('.' + cls.SORT_CLASS).click();\n e.preventDefault();\n return;\n }\n };\n CommonKeyboardInteraction.prototype.processFilter = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS) && !closest(target, '.' + cls.VALUE_AXIS_CLASS)) {\n target.querySelector('.' + cls.FILTER_COMMON_CLASS).click();\n e.preventDefault();\n return;\n }\n };\n CommonKeyboardInteraction.prototype.processDelete = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS)) {\n target.querySelector('.' + cls.REMOVE_CLASS).click();\n e.preventDefault();\n return;\n }\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n CommonKeyboardInteraction.prototype.destroy = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n else {\n return;\n }\n };\n return CommonKeyboardInteraction;\n}());\nexport { CommonKeyboardInteraction };\n","import { isNullOrUndefined, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as cls from '../base/css-constant';\n/**\n * `EventBase` for active fields action.\n */\n/** @hidden */\nvar EventBase = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function EventBase(parent) {\n this.parent = parent;\n }\n /**\n * Updates sorting order for the selected field.\n * @method updateSorting\n * @param {Event} args - Contains clicked element information to update dataSource.\n * @return {void}\n * @hidden\n */\n EventBase.prototype.updateSorting = function (args) {\n if (this.parent.filterDialog.dialogPopUp) {\n this.parent.filterDialog.dialogPopUp.close();\n }\n var target = args.target;\n var fieldName = target.parentElement.id;\n var isDescending = target.classList.contains(cls.SORT_DESCEND_CLASS);\n var sortObj = this.getSortItemByName(fieldName);\n if (!isNullOrUndefined(sortObj)) {\n sortObj = sortObj.properties ?\n sortObj.properties : sortObj;\n sortObj.order = isDescending ? 'Ascending' : 'Descending';\n }\n else {\n var newSortObj = { name: fieldName, order: isDescending ? 'Ascending' : 'Descending' };\n this.parent.dataSource.sortSettings.push(newSortObj);\n }\n isDescending ? removeClass([target], cls.SORT_DESCEND_CLASS) : addClass([target], cls.SORT_DESCEND_CLASS);\n };\n /**\n * Updates sorting order for the selected field.\n * @method updateFiltering\n * @param {Event} args - Contains clicked element information to update dataSource.\n * @return {void}\n * @hidden\n */\n EventBase.prototype.updateFiltering = function (args) {\n var target = args.target;\n var fieldName = target.parentElement.id;\n var fieldCaption = target.parentElement.textContent;\n var isInclude = false;\n var filterItems = [];\n this.parent.engineModule.fieldList[fieldName].dateMember = new DataManager(this.parent.engineModule.\n fieldList[fieldName].dateMember).executeLocal(new Query().\n sortBy('actualText', this.parent.engineModule.fieldList[fieldName].sort.toLowerCase()));\n var filterObj = this.getFilterItemByName(fieldName);\n if (!isNullOrUndefined(filterObj)) {\n isInclude = filterObj.type === 'Include' ? true : false;\n filterItems = filterObj.items;\n }\n var treeData = this.getTreeData(isInclude, this.parent.engineModule.fieldList[fieldName].dateMember, filterItems);\n if (this.parent.filterDialog.dialogPopUp) {\n this.parent.filterDialog.dialogPopUp.close();\n }\n var popupTarget;\n popupTarget = this.parent.moduleName !== 'pivotfieldlist' ?\n popupTarget = this.parent.element : popupTarget = document.getElementById(this.parent.parentID + '_Wrapper');\n this.parent.filterDialog.createFilterDialog(treeData, fieldName, fieldCaption, popupTarget);\n };\n /**\n * Gets sort object for the given field name from the dataSource.\n * @method getSortItemByName\n * @param {string} fieldName - Gets sort settings for the given field name.\n * @return {Sort}\n * @hidden\n */\n EventBase.prototype.getSortItemByName = function (fieldName) {\n var sortObjects = this.parent.dataSource.sortSettings;\n return new DataManager({ json: sortObjects }).executeLocal(new Query().where('name', 'equal', fieldName))[0];\n };\n /**\n * Gets filter object for the given field name from the dataSource.\n * @method getFilterItemByName\n * @param {string} fieldName - Gets filter settings for the given field name.\n * @return {Sort}\n * @hidden\n */\n EventBase.prototype.getFilterItemByName = function (fieldName) {\n var filterObjects = this.parent.dataSource.filterSettings;\n return new DataManager({ json: filterObjects }).executeLocal(new Query().where('name', 'equal', fieldName))[0];\n };\n /**\n * Gets format object for the given field name from the dataSource.\n * @method getFilterItemByName\n * @param {string} fieldName - Gets format settings for the given field name.\n * @return {IFormatSettings}\n * @hidden\n */\n EventBase.prototype.getFormatItemByName = function (fieldName) {\n var formatObjects = this.parent.dataSource.formatSettings;\n return new DataManager({ json: formatObjects }).executeLocal(new Query().where('name', 'equal', fieldName))[0];\n };\n /**\n * show tree nodes using search text.\n * @hidden\n */\n EventBase.prototype.searchTreeNodes = function (args, treeObj) {\n var searchList = [];\n var nonSearchList = [];\n var list = [].slice.call(treeObj.element.querySelectorAll('li'));\n for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {\n var element = list_1[_i];\n if ((element.querySelector('.e-list-text').textContent.toLowerCase()).indexOf(args.value.toLowerCase()) > -1) {\n searchList.push(element);\n }\n else {\n nonSearchList.push(element);\n }\n }\n treeObj.enableNodes(searchList);\n treeObj.disableNodes(nonSearchList);\n };\n EventBase.prototype.getTreeData = function (isInclude, members, filterItems) {\n var list = [];\n for (var _i = 0, members_1 = members; _i < members_1.length; _i++) {\n var member = members_1[_i];\n var obj = {\n id: member.formattedText,\n name: member.formattedText,\n checkedStatus: isInclude ? false : true\n };\n if (filterItems && filterItems.indexOf(member.formattedText) >= 0) {\n obj.checkedStatus = isInclude ? true : false;\n }\n list.push(obj);\n }\n return list;\n };\n return EventBase;\n}());\nexport { EventBase };\n","import { isNullOrUndefined, closest } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\n/**\n * `DialogAction` module is used to handle field list dialog related behaviour.\n */\n/** @hidden */\nvar NodeStateModified = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function NodeStateModified(parent) {\n this.parent = parent;\n }\n /**\n * Updates the dataSource by drag and drop the selected field from either field list or axis table with dropped target position.\n * @method onStateModified\n * @param {DragEventArgs & DragAndDropEventArgs} args - Contains both pivot button and field list drag and drop information.\n * @param {string} fieldName - Defines dropped field name to update dataSource.\n * @return {void}\n * @hidden\n */\n NodeStateModified.prototype.onStateModified = function (args, fieldName) {\n var droppedClass = '';\n var nodeDropped = true;\n var target = closest(args.target, '.' + cls.DROPPABLE_CLASS);\n var droppedPosition = -1;\n this.parent.dataSourceUpdate.btnElement = args.element ? args.element.parentElement : undefined;\n if (target) {\n droppedClass = target.classList[1] === cls.ROW_AXIS_CLASS ?\n 'rows' : target.classList[1] === cls.COLUMN_AXIS_CLASS ? 'columns' : target.classList[1] === cls.VALUE_AXIS_CLASS ?\n 'values' : target.classList[1] === cls.FILTER_AXIS_CLASS ? 'filters' : '';\n }\n if ((args.cancel && droppedClass === '') ||\n (this.parent.dataSourceUpdate.btnElement && this.parent.dataSourceUpdate.btnElement.getAttribute('isValue') === 'true' &&\n ((droppedClass === 'filters' || droppedClass === 'values') ||\n droppedClass.indexOf(this.parent.dataSource.valueAxis) > -1))) {\n nodeDropped = false;\n return nodeDropped;\n }\n if (droppedClass !== '') {\n if (this.parent.engineModule.fieldList[fieldName] &&\n this.parent.engineModule.fieldList[fieldName].aggregateType === 'CalculatedField' && droppedClass !== 'values') {\n var title = this.parent.localeObj.getConstant('warning');\n var description = this.parent.localeObj.getConstant('dropAction');\n this.parent.errorDialog.createErrorDialog(title, description);\n nodeDropped = false;\n return nodeDropped;\n }\n droppedPosition = this.getButtonPosition(args.target, droppedClass);\n }\n this.parent.dataSourceUpdate.updateDataSource(fieldName, droppedClass, droppedPosition);\n return nodeDropped;\n };\n NodeStateModified.prototype.getButtonPosition = function (target, droppedClass) {\n var droppedPosition = -1;\n var targetBtn = closest(target, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n if (!isNullOrUndefined(targetBtn)) {\n targetBtn = targetBtn.querySelector('.' + cls.PIVOT_BUTTON_CLASS);\n var axisPanel = this.parent.element.querySelector('.e-' + droppedClass);\n var pivotButtons = [].slice.call(axisPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === targetBtn.id) {\n droppedPosition = i;\n break;\n }\n }\n }\n return droppedPosition;\n };\n return NodeStateModified;\n}());\nexport { NodeStateModified };\n","import * as events from '../../common/base/constant';\n/**\n * `DataSourceUpdate` module is used to update the dataSource.\n */\n/** @hidden */\nvar DataSourceUpdate = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function DataSourceUpdate(parent) {\n this.parent = parent;\n }\n /**\n * Updates the dataSource by adding the given field along with field dropped position to the dataSource.\n * @param {string} fieldName - Defines dropped field name to update dataSource.\n * @param {string} droppedClass - Defines dropped field axis name to update dataSource.\n * @param {number} fieldCaption - Defines dropped position to the axis based on field position.\n * @method updateDataSource\n * @return {void}\n * @hidden\n */\n DataSourceUpdate.prototype.updateDataSource = function (fieldName, droppedClass, droppedPosition) {\n var dataSourceItem;\n if (this.control && this.btnElement && this.btnElement.getAttribute('isvalue') === 'true') {\n switch (droppedClass) {\n case '':\n this.control.setProperties({ dataSource: { values: [] } }, true);\n break;\n case 'rows':\n this.control.setProperties({ dataSource: { valueAxis: 'row' } }, true);\n break;\n case 'columns':\n this.control.setProperties({ dataSource: { valueAxis: 'column' } }, true);\n break;\n }\n }\n else {\n dataSourceItem = this.removeFieldFromReport(fieldName.toString());\n dataSourceItem = dataSourceItem ? dataSourceItem : this.getNewField(fieldName.toString());\n if (dataSourceItem.type === 'CalculatedField' && droppedClass !== '') {\n droppedClass = 'values';\n }\n }\n if (this.control) {\n var eventArgs = {\n 'droppedField': dataSourceItem, 'dataSource': this.parent.dataSource, 'droppedAxis': droppedClass\n };\n this.control.trigger(events.onFieldDropped, eventArgs);\n }\n if (dataSourceItem) {\n switch (droppedClass) {\n case 'filters':\n droppedPosition !== -1 ?\n this.parent.dataSource.filters.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.filters.push(dataSourceItem);\n break;\n case 'rows':\n droppedPosition !== -1 ?\n this.parent.dataSource.rows.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.rows.push(dataSourceItem);\n break;\n case 'columns':\n droppedPosition !== -1 ?\n this.parent.dataSource.columns.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.columns.push(dataSourceItem);\n break;\n case 'values':\n droppedPosition !== -1 ?\n this.parent.dataSource.values.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.values.push(dataSourceItem);\n break;\n }\n }\n };\n /**\n * Updates the dataSource by removing the given field from the dataSource.\n * @param {string} fieldName - Defines dropped field name to remove dataSource.\n * @method removeFieldFromReport\n * @return {void}\n * @hidden\n */\n DataSourceUpdate.prototype.removeFieldFromReport = function (fieldName) {\n var dataSourceItem;\n var isDataSource = false;\n var rows = this.parent.dataSource.rows;\n var columns = this.parent.dataSource.columns;\n var values = this.parent.dataSource.values;\n var filters = this.parent.dataSource.filters;\n var fields = [rows, columns, values, filters];\n for (var len = 0, lnt = fields.length; len < lnt; len++) {\n if (!isDataSource && fields[len]) {\n for (var i = 0, n = fields[len].length; i < n; i++) {\n if (fields[len][i].name === fieldName) {\n dataSourceItem = fields[len][i];\n fields[len].splice(i, 1);\n isDataSource = true;\n break;\n }\n }\n }\n }\n return dataSourceItem;\n };\n /**\n * Creates new field object given field name from the field list data.\n * @param {string} fieldName - Defines dropped field name to add dataSource.\n * @method getNewField\n * @return {void}\n * @hidden\n */\n DataSourceUpdate.prototype.getNewField = function (fieldName) {\n var field = this.parent.engineModule.fieldList[fieldName];\n var newField = {\n name: fieldName,\n caption: field.caption,\n type: field.aggregateType,\n showNoDataItems: field.showNoDataItems\n };\n return newField;\n };\n return DataSourceUpdate;\n}());\nexport { DataSourceUpdate };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport { Dialog } from '@syncfusion/ej2-popups';\n/**\n * `ErrorDialog` module to create error dialog.\n */\n/** @hidden */\nvar ErrorDialog = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function ErrorDialog(parent) {\n this.parent = parent;\n }\n /**\n * Creates the error dialog for the unexpected action done.\n * @method createErrorDialog\n * @return {void}\n * @hidden\n */\n ErrorDialog.prototype.createErrorDialog = function (title, description) {\n var errorDialog = createElement('div', {\n id: this.parent.parentID + '_ErrorDialog',\n className: cls.ERROR_DIALOG_CLASS\n });\n this.parent.element.appendChild(errorDialog);\n this.errorPopUp = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: false,\n header: title,\n content: description,\n isModal: true,\n visible: true,\n showCloseIcon: true,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: 'auto',\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n click: this.closeErrorDialog.bind(this),\n buttonModel: { cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true }\n }\n ],\n closeOnEscape: true,\n target: document.body,\n close: this.removeErrorDialog.bind(this)\n });\n this.errorPopUp.appendTo(errorDialog);\n };\n ErrorDialog.prototype.closeErrorDialog = function () {\n this.errorPopUp.hide();\n };\n ErrorDialog.prototype.removeErrorDialog = function () {\n remove(document.getElementById(this.parent.parentID + '_ErrorDialog').parentElement);\n };\n return ErrorDialog;\n}());\nexport { ErrorDialog };\n","import { createElement, removeClass, addClass, remove, isNullOrUndefined, setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport { TreeView, Tab } from '@syncfusion/ej2-navigations';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { MaskedTextBox } from '@syncfusion/ej2-inputs';\nimport { setStyleAndAttributes } from '@syncfusion/ej2-grids';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\n/**\n * `FilterDialog` module to create filter dialog.\n */\n/** @hidden */\nvar FilterDialog = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function FilterDialog(parent) {\n this.parent = parent;\n }\n /**\n * Creates the member filter dialog for the selected field.\n * @method createFilterDialog\n * @return {void}\n * @hidden\n */\n FilterDialog.prototype.createFilterDialog = function (treeData, fieldName, fieldCaption, target) {\n var editorDialog = createElement('div', {\n id: this.parent.parentID + '_EditorTreeView',\n className: cls.MEMBER_EDITOR_DIALOG_CLASS,\n attrs: { 'data-fieldName': fieldName, 'aria-label': fieldCaption },\n styles: 'visibility:hidden;'\n });\n var headerTemplate = this.parent.localeObj.getConstant('filter') + ' ' +\n '\"' + fieldCaption + '\"' + ' ' + this.parent.localeObj.getConstant('by');\n this.filterObject = this.getFilterObject(fieldName);\n this.allowExcelLikeFilter = this.isExcelFilter(fieldName);\n this.parent.element.appendChild(editorDialog);\n this.dialogPopUp = new Dialog({\n animationSettings: { effect: (this.allowExcelLikeFilter ? 'None' : 'Fade') },\n allowDragging: false,\n header: (this.allowExcelLikeFilter ? headerTemplate : fieldCaption),\n content: (this.allowExcelLikeFilter ? '' : this.createTreeView(treeData, fieldCaption, fieldName)),\n isModal: this.parent.renderMode === 'Popup' ? true : this.parent.isAdaptive ? true : false,\n visible: true,\n showCloseIcon: this.allowExcelLikeFilter ? true : false,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: (this.allowExcelLikeFilter ? '400px' : '350px'),\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n buttonModel: {\n cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true\n }\n },\n {\n buttonModel: {\n cssClass: 'e-clear-filter-button' + (this.allowExcelLikeFilter ? '' : ' ' + cls.ICON_DISABLE),\n iconCss: 'e-icons e-clear-filter-icon', enableRtl: this.parent.enableRtl,\n content: this.parent.localeObj.getConstant('clearFilter'), disabled: (this.filterObject ? false : true)\n }\n },\n {\n click: this.closeFilterDialog.bind(this),\n buttonModel: { cssClass: cls.CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel') }\n }\n ],\n closeOnEscape: true,\n target: target,\n close: this.removeFilterDialog.bind(this)\n });\n this.dialogPopUp.appendTo(editorDialog);\n if (this.allowExcelLikeFilter) {\n this.createTabMenu(treeData, fieldCaption, fieldName);\n addClass([this.dialogPopUp.element], 'e-excel-filter');\n this.updateCheckedState(fieldCaption);\n }\n else {\n this.updateCheckedState(fieldCaption);\n }\n setStyleAttribute(this.dialogPopUp.element, { 'visibility': 'visible' });\n if (this.allowExcelLikeFilter) {\n this.dialogPopUp.element.querySelector('.e-dlg-closeicon-btn').focus();\n }\n else {\n return;\n }\n };\n FilterDialog.prototype.createTreeView = function (treeData, fieldCaption, fieldName) {\n var _this = this;\n var editorTreeWrapper = createElement('div', {\n id: this.parent.parentID + 'EditorDiv',\n className: cls.EDITOR_TREE_WRAPPER_CLASS + (this.allowExcelLikeFilter ? ' e-excelfilter' : '')\n });\n var searchWrapper = createElement('div', {\n id: this.parent.parentID + '_SearchDiv', attrs: { 'tabindex': '-1' },\n className: cls.EDITOR_SEARCH_WRAPPER_CLASS\n });\n var editorSearch = createElement('input', { attrs: { 'type': 'text' } });\n searchWrapper.appendChild(editorSearch);\n var selectAllWrapper = createElement('div', {\n id: this.parent.parentID + '_AllDiv', attrs: { 'tabindex': '-1' },\n className: cls.SELECT_ALL_WRAPPER_CLASS\n });\n var selectAllContainer = createElement('div', { className: cls.SELECT_ALL_CLASS });\n var treeViewContainer = createElement('div', { className: cls.EDITOR_TREE_CONTAINER_CLASS });\n var promptDiv = createElement('div', {\n className: cls.EMPTY_MEMBER_CLASS + ' ' + cls.ICON_DISABLE,\n innerHTML: this.parent.localeObj.getConstant('noMatches')\n });\n selectAllWrapper.appendChild(selectAllContainer);\n editorTreeWrapper.appendChild(searchWrapper);\n editorTreeWrapper.appendChild(selectAllWrapper);\n editorTreeWrapper.appendChild(promptDiv);\n this.editorSearch = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('search') + ' ' + '\"' + fieldCaption + '\"',\n enableRtl: this.parent.enableRtl,\n cssClass: cls.EDITOR_SEARCH_CLASS,\n change: function (e) {\n _this.parent.eventBase.searchTreeNodes(e, _this.memberTreeView);\n var filterDialog = _this.dialogPopUp.element;\n var liList = [].slice.call(_this.memberTreeView.element.querySelectorAll('li'));\n var disabledList = [].slice.call(_this.memberTreeView.element.querySelectorAll('.' + cls.ICON_DISABLE));\n if (liList.length === disabledList.length) {\n _this.allMemberSelect.disableNodes([_this.allMemberSelect.element.querySelector('li')]);\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).setAttribute('disabled', 'disabled');\n removeClass([promptDiv], cls.ICON_DISABLE);\n }\n else {\n _this.allMemberSelect.enableNodes([_this.allMemberSelect.element.querySelector('li')]);\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).removeAttribute('disabled');\n addClass([promptDiv], cls.ICON_DISABLE);\n }\n _this.updateCheckedState(fieldCaption);\n }\n });\n this.editorSearch.appendTo(editorSearch);\n var data = [{ id: 'all', name: 'All', checkedStatus: true }];\n this.allMemberSelect = new TreeView({\n fields: { dataSource: data, id: 'id', text: 'name', isChecked: 'checkedStatus', },\n showCheckBox: true,\n enableRtl: this.parent.enableRtl,\n });\n this.allMemberSelect.appendTo(selectAllContainer);\n editorTreeWrapper.appendChild(treeViewContainer);\n this.memberTreeView = new TreeView({\n fields: { dataSource: treeData, id: 'id', text: 'name', isChecked: 'checkedStatus' },\n showCheckBox: true,\n enableRtl: this.parent.enableRtl,\n nodeChecking: this.validateTreeNode.bind(this),\n });\n this.memberTreeView.appendTo(treeViewContainer);\n return editorTreeWrapper;\n };\n FilterDialog.prototype.createTabMenu = function (treeData, fieldCaption, fieldName) {\n var wrapper = createElement('div', {\n className: 'e-filter-tab-wrapper'\n });\n this.dialogPopUp.content = wrapper;\n this.dialogPopUp.dataBind();\n var types = ['Label', 'Value', 'Include', 'Exclude'];\n var regx = '((-|\\\\+)?[0-9]+(\\\\.[0-9]+)?)+';\n var member = Object.keys(this.parent.engineModule.fieldList[fieldName].members)[0];\n var formatObj = this.parent.eventBase.getFormatItemByName(fieldName);\n var items = [\n {\n header: {\n text: this.parent.localeObj.getConstant('member'),\n iconCss: (this.filterObject && types.indexOf(this.filterObject.type) > 1 ? cls.SELECTED_OPTION_ICON_CLASS : '')\n },\n content: this.createTreeView(treeData, fieldCaption, fieldName)\n }\n ];\n for (var _i = 0, types_1 = types; _i < types_1.length; _i++) {\n var type = types_1[_i];\n if (((type === 'Label') && this.parent.dataSource.allowLabelFilter) ||\n (type === 'Value' && this.parent.dataSource.allowValueFilter)) {\n var filterType = (type === 'Label' && ((member).match(regx) &&\n (member).match(regx)[0].length === (member).length)) ? 'Number' :\n (type === 'Label' && (new Date(member).toString() !== 'Invalid Date') &&\n ((formatObj && formatObj.type) || (this.filterObject && this.filterObject.type === 'Date'))) ? 'Date' : type;\n var item = {\n header: {\n text: (filterType === 'Number' ? this.parent.localeObj.getConstant('label') :\n this.parent.localeObj.getConstant(filterType.toLowerCase())),\n iconCss: (this.filterObject && this.filterObject.type === filterType ? cls.SELECTED_OPTION_ICON_CLASS : '')\n },\n /* tslint:disable-next-line:max-line-length */\n content: this.createCustomFilter(fieldName, (this.filterObject && this.filterObject.type === filterType ? this.filterObject : undefined), filterType.toLowerCase())\n };\n items.push(item);\n }\n }\n var selectedIndex = (this.filterObject ? (['Label', 'Date', 'Number'].indexOf(this.filterObject.type) >= 0) ?\n 1 : this.filterObject.type === 'Value' ?\n (this.parent.dataSource.allowLabelFilter && this.parent.dataSource.allowValueFilter) ? 2 : 1 : 0 : 0);\n this.tabObj = new Tab({\n heightAdjustMode: 'Auto',\n items: items,\n height: '100%',\n selectedItem: selectedIndex,\n enableRtl: this.parent.enableRtl\n });\n this.tabObj.appendTo(wrapper);\n if (selectedIndex > 0) {\n /* tslint:disable-next-line:max-line-length */\n addClass([this.dialogPopUp.element.querySelector('.e-filter-div-content' + '.' + (selectedIndex === 1 && this.parent.dataSource.allowLabelFilter ? 'e-label-filter' : 'e-value-filter'))], 'e-selected-tab');\n }\n };\n FilterDialog.prototype.createCustomFilter = function (fieldName, filterObject, type) {\n var dataSource = [];\n var valueOptions = [];\n var measures = this.parent.dataSource.values;\n var selectedOption = 'DoesNotEquals';\n var selectedValueIndex = 0;\n var options = {\n label: ['Equals', 'DoesNotEquals', 'BeginWith', 'DoesNotBeginWith', 'EndsWith',\n 'DoesNotEndsWith', 'Contains', 'DoesNotContains', 'GreaterThan',\n 'GreaterThanOrEqualTo', 'LessThan', 'LessThanOrEqualTo', 'Between', 'NotBetween'],\n date: ['Equals', 'DoesNotEquals', 'Before', 'BeforeOrEqualTo', 'After', 'AfterOrEqualTo',\n 'Between', 'NotBetween'],\n value: ['Equals', 'DoesNotEquals', 'GreaterThan', 'GreaterThanOrEqualTo', 'LessThan',\n 'LessThanOrEqualTo', 'Between', 'NotBetween']\n };\n var betweenOperators = ['Between', 'NotBetween'];\n var operatorCollection = (type === 'label' ? options.label : type === 'date' ? options.date : options.value);\n for (var _i = 0, operatorCollection_1 = operatorCollection; _i < operatorCollection_1.length; _i++) {\n var operator = operatorCollection_1[_i];\n selectedOption = ((filterObject && operator === filterObject.condition) ?\n operatorCollection.indexOf(filterObject.condition) >= 0 ?\n filterObject.condition : operatorCollection[0] : selectedOption);\n dataSource.push({ value: operator, text: this.parent.localeObj.getConstant(operator) });\n }\n var len = measures.length;\n while (len--) {\n valueOptions.unshift({ value: measures[len].name, text: (measures[len].caption ? measures[len].caption : measures[len].name) });\n selectedValueIndex = filterObject && filterObject.type === 'Value' &&\n filterObject.measure === measures[len].name &&\n filterObject.condition === selectedOption ? len : selectedValueIndex;\n }\n var mainDiv = createElement('div', {\n className: cls.FILTER_DIV_CONTENT_CLASS + ' e-' + ((['date', 'number']).indexOf(type) >= 0 ? 'label' : type) + '-filter',\n id: this.parent.parentID + '_' + type + '_filter_div_content',\n attrs: {\n 'data-type': type, 'data-fieldName': fieldName, 'data-operator': selectedOption,\n 'data-measure': (this.parent.dataSource.values.length > 0 ? this.parent.dataSource.values[selectedValueIndex].name : ''),\n 'data-value1': (filterObject && selectedOption === filterObject.condition ? filterObject.value1.toString() : ''),\n 'data-value2': (filterObject && selectedOption === filterObject.condition ? filterObject.value1.toString() : '')\n }\n });\n var textContentdiv = createElement('div', {\n className: cls.FILTER_TEXT_DIV_CLASS,\n innerHTML: this.parent.localeObj.getConstant(type + 'TextContent')\n });\n var betweenTextContentdiv = createElement('div', {\n className: cls.BETWEEN_TEXT_DIV_CLASS + ' ' +\n (betweenOperators.indexOf(selectedOption) === -1 ? cls.ICON_DISABLE : ''),\n innerHTML: this.parent.localeObj.getConstant('And')\n });\n var separatordiv = createElement('div', { className: cls.SEPARATOR_DIV_CLASS });\n var filterWrapperDiv1 = createElement('div', { className: cls.FILTER_OPTION_WRAPPER_1_CLASS });\n var optionWrapperDiv1 = createElement('div', {\n className: 'e-measure-option-wrapper' + ' ' + (((['label', 'date', 'number']).indexOf(type) >= 0) ? cls.ICON_DISABLE : ''),\n });\n var optionWrapperDiv2 = createElement('div', { className: 'e-condition-option-wrapper' });\n var filterWrapperDiv2 = createElement('div', { className: cls.FILTER_OPTION_WRAPPER_2_CLASS });\n var dropOptionDiv1 = createElement('div', { id: this.parent.parentID + '_' + type + '_measure_option_wrapper' });\n var dropOptionDiv2 = createElement('div', { id: this.parent.parentID + '_' + type + '_contition_option_wrapper' });\n var inputDiv1 = createElement('div', { className: cls.FILTER_INPUT_DIV_1_CLASS });\n var inputDiv2 = createElement('div', {\n className: cls.FILTER_INPUT_DIV_2_CLASS + ' ' +\n (betweenOperators.indexOf(selectedOption) === -1 ? cls.ICON_DISABLE : '')\n });\n var inputField1 = createElement('input', {\n id: this.parent.parentID + '_' + type + '_input_option_1', attrs: { 'type': 'text' }\n });\n var inputField2 = createElement('input', {\n id: this.parent.parentID + '_' + type + '_input_option_2', attrs: { 'type': 'text' }\n });\n inputDiv1.appendChild(inputField1);\n inputDiv2.appendChild(inputField2);\n optionWrapperDiv1.appendChild(dropOptionDiv1);\n optionWrapperDiv1.appendChild(separatordiv);\n optionWrapperDiv2.appendChild(dropOptionDiv2);\n filterWrapperDiv1.appendChild(optionWrapperDiv1);\n filterWrapperDiv1.appendChild(optionWrapperDiv2);\n filterWrapperDiv2.appendChild(inputDiv1);\n filterWrapperDiv2.appendChild(betweenTextContentdiv);\n filterWrapperDiv2.appendChild(inputDiv2);\n /* tslint:disable-next-line:max-line-length */\n this.createElements(filterObject, betweenOperators, dropOptionDiv1, dropOptionDiv2, inputField1, inputField2, valueOptions, dataSource, selectedValueIndex, selectedOption, type);\n mainDiv.appendChild(textContentdiv);\n mainDiv.appendChild(filterWrapperDiv1);\n mainDiv.appendChild(filterWrapperDiv2);\n return mainDiv;\n };\n /* tslint:disable-next-line:max-line-length */\n FilterDialog.prototype.createElements = function (filterObj, operators, optionDiv1, optionDiv2, inputDiv1, inputDiv2, vDataSource, oDataSource, valueIndex, option, type) {\n var popupInstance = this;\n var optionWrapper1 = new DropDownList({\n dataSource: vDataSource, enableRtl: this.parent.enableRtl,\n fields: { value: 'value', text: 'text' }, index: valueIndex,\n cssClass: cls.VALUE_OPTIONS_CLASS, width: '100%',\n change: function (args) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n popupInstance.updateInputValues(element, type, inputDiv1, inputDiv2);\n setStyleAndAttributes(element, { 'data-measure': args.value });\n }\n });\n optionWrapper1.appendTo(optionDiv1);\n var optionWrapper = new DropDownList({\n dataSource: oDataSource, enableRtl: this.parent.enableRtl,\n fields: { value: 'value', text: 'text' }, value: option,\n cssClass: cls.FILTER_OPERATOR_CLASS, width: '100%',\n change: function (args) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n popupInstance.updateInputValues(element, type, inputDiv1, inputDiv2);\n var disabledClasses = [cls.BETWEEN_TEXT_DIV_CLASS, cls.FILTER_INPUT_DIV_2_CLASS];\n for (var _i = 0, disabledClasses_1 = disabledClasses; _i < disabledClasses_1.length; _i++) {\n var className = disabledClasses_1[_i];\n if (operators.indexOf(args.value) >= 0) {\n removeClass([element.querySelector('.' + className)], cls.ICON_DISABLE);\n }\n else {\n addClass([element.querySelector('.' + className)], cls.ICON_DISABLE);\n }\n }\n setStyleAndAttributes(element, { 'data-operator': args.value });\n }\n });\n optionWrapper.appendTo(optionDiv2);\n if (type === 'date') {\n var inputObj1_1 = new DatePicker({\n placeholder: this.parent.localeObj.getConstant('chooseDate'),\n enableRtl: this.parent.enableRtl,\n format: 'dd/MM/yyyy',\n value: (filterObj && option === filterObj.condition ? filterObj.value1 : null),\n change: function (e) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n setStyleAndAttributes(element, { 'data-value1': e.value, 'data-value2': inputObj2_1.value });\n },\n width: '100%',\n });\n var inputObj2_1 = new DatePicker({\n placeholder: this.parent.localeObj.getConstant('chooseDate'),\n enableRtl: this.parent.enableRtl,\n format: 'dd/MM/yyyy',\n value: (filterObj && option === filterObj.condition ? filterObj.value2 : null),\n change: function (e) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n setStyleAndAttributes(element, { 'data-value1': inputObj1_1.value, 'data-value2': e.value });\n },\n width: '100%',\n });\n inputObj1_1.appendTo(inputDiv1);\n inputObj2_1.appendTo(inputDiv2);\n }\n else {\n var inputObj1_2 = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('enterValue'),\n enableRtl: this.parent.enableRtl,\n value: (filterObj && option === filterObj.condition ? filterObj.value1 : ''),\n change: function (e) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n setStyleAndAttributes(element, { 'data-value1': e.value, 'data-value2': inputObj2_2.value });\n }, width: '100%'\n });\n var inputObj2_2 = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('enterValue'),\n enableRtl: this.parent.enableRtl,\n value: (filterObj && option === filterObj.condition ? filterObj.value2 : ''),\n change: function (e) {\n var element = popupInstance.dialogPopUp.element.querySelector('.e-selected-tab');\n setStyleAndAttributes(element, { 'data-value1': inputObj1_2.value, 'data-value2': e.value });\n }, width: '100%'\n });\n inputObj1_2.appendTo(inputDiv1);\n inputObj2_2.appendTo(inputDiv2);\n }\n };\n FilterDialog.prototype.updateInputValues = function (element, type, inputDiv1, inputDiv2) {\n var value1;\n var value2;\n if (type === 'date') {\n var inputObj1 = inputDiv1.ej2_instances[0];\n var inputObj2 = inputDiv2.ej2_instances[0];\n value1 = !isNullOrUndefined(inputObj1.value) ? inputObj1.value.toString() : '';\n value2 = !isNullOrUndefined(inputObj2.value) ? inputObj2.value.toString() : '';\n }\n else {\n var inputObj1 = inputDiv1.ej2_instances[0];\n var inputObj2 = inputDiv2.ej2_instances[0];\n value1 = inputObj1.value;\n value2 = inputObj2.value;\n }\n setStyleAndAttributes(element, { 'data-value1': value1, 'data-value2': value2 });\n };\n FilterDialog.prototype.validateTreeNode = function (e) {\n if (e.node.classList.contains(cls.ICON_DISABLE)) {\n e.cancel = true;\n }\n else {\n return;\n }\n };\n /**\n * Update filter state while Member check/uncheck.\n * @hidden\n */\n FilterDialog.prototype.updateCheckedState = function (fieldCaption) {\n var filterDialog = this.dialogPopUp.element;\n setStyleAndAttributes(filterDialog, { 'role': 'menu', 'aria-haspopup': 'true' });\n var list = [].slice.call(this.memberTreeView.element.querySelectorAll('li'));\n var visibleNodes = list.filter(function (node) {\n return (!node.classList.contains(cls.ICON_DISABLE));\n });\n var uncheckedNodes = this.getUnCheckedNodes(visibleNodes);\n var checkedNodes = this.getCheckedNodes(visibleNodes);\n var firstNode = this.allMemberSelect.element.querySelector('li').querySelector('span.' + cls.CHECK_BOX_FRAME_CLASS);\n if (checkedNodes.length > 0) {\n if (uncheckedNodes.length > 0) {\n removeClass([firstNode], cls.NODE_CHECK_CLASS);\n addClass([firstNode], cls.NODE_STOP_CLASS);\n }\n else if (uncheckedNodes.length === 0) {\n removeClass([firstNode], cls.NODE_STOP_CLASS);\n addClass([firstNode], cls.NODE_CHECK_CLASS);\n }\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).removeAttribute('disabled');\n }\n else if (uncheckedNodes.length > 0 && checkedNodes.length === 0) {\n removeClass([firstNode], [cls.NODE_CHECK_CLASS, cls.NODE_STOP_CLASS]);\n if (this.getCheckedNodes(list).length === checkedNodes.length) {\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).setAttribute('disabled', 'disabled');\n }\n }\n };\n FilterDialog.prototype.getCheckedNodes = function (treeNodes) {\n var checkeNodes = treeNodes.filter(function (node) {\n return (node.querySelector('.' + cls.CHECK_BOX_FRAME_CLASS).classList.contains(cls.NODE_CHECK_CLASS));\n });\n return checkeNodes;\n };\n FilterDialog.prototype.getUnCheckedNodes = function (treeNodes) {\n var unCheckeNodes = treeNodes.filter(function (node) {\n return (!node.querySelector('.' + cls.CHECK_BOX_FRAME_CLASS).classList.contains(cls.NODE_CHECK_CLASS));\n });\n return unCheckeNodes;\n };\n FilterDialog.prototype.isExcelFilter = function (fieldName) {\n var isFilterField = false;\n for (var _i = 0, _a = this.parent.dataSource.filters; _i < _a.length; _i++) {\n var field = _a[_i];\n if (field.name === fieldName) {\n isFilterField = true;\n break;\n }\n }\n if (!isFilterField && (this.parent.dataSource.allowLabelFilter || this.parent.dataSource.allowValueFilter)) {\n return true;\n }\n else {\n return false;\n }\n };\n FilterDialog.prototype.getFilterObject = function (fieldName) {\n var filterObj = this.parent.eventBase.getFilterItemByName(fieldName);\n if (filterObj && (((['Label', 'Date', 'Number'].indexOf(filterObj.type) >= 0) &&\n this.parent.dataSource.allowLabelFilter) || (filterObj.type === 'Value' && this.parent.dataSource.allowValueFilter) ||\n (['Include', 'Exclude'].indexOf(filterObj.type) >= 0))) {\n return filterObj;\n }\n return undefined;\n };\n FilterDialog.prototype.closeFilterDialog = function () {\n if (this.allowExcelLikeFilter) {\n if (this.tabObj && !this.tabObj.isDestroyed) {\n this.tabObj.destroy();\n }\n }\n this.dialogPopUp.hide();\n };\n FilterDialog.prototype.removeFilterDialog = function () {\n if (this.dialogPopUp && !this.dialogPopUp.isDestroyed) {\n this.dialogPopUp.destroy();\n }\n if (document.getElementById(this.parent.parentID + '_EditorTreeView')) {\n remove(document.getElementById(this.parent.parentID + '_EditorTreeView'));\n }\n };\n return FilterDialog;\n}());\nexport { FilterDialog };\n","import { CommonKeyboardInteraction } from '../actions/keyboard';\nimport { EventBase } from '../actions/event-base';\nimport { NodeStateModified } from '../actions/node-state-modified';\nimport { DataSourceUpdate } from '../actions/dataSource-update';\nimport { ErrorDialog } from '../popups/error-dialog';\nimport { FilterDialog } from '../popups/filter-dialog';\n/**\n * PivotCommon is used to manipulate the relational or Multi-Dimensional public methods by using their dataSource\n * @hidden\n */\n/** @hidden */\nvar PivotCommon = /** @class */ (function () {\n /**\n * Constructor for PivotEngine class\n * @param {PivotEngine} pivotEngine?\n * @param {DataOptions} dataSource?\n * @param {string} element?\n * @hidden\n */\n function PivotCommon(control) {\n this.element = control.element;\n this.moduleName = control.moduleName;\n this.dataSource = control.dataSource;\n this.engineModule = control.pivotEngine;\n this.enableRtl = control.enableRtl;\n this.isAdaptive = control.isAdaptive;\n this.renderMode = control.renderMode;\n this.parentID = control.id;\n this.localeObj = control.localeObj;\n this.nodeStateModified = new NodeStateModified(this);\n this.dataSourceUpdate = new DataSourceUpdate(this);\n this.eventBase = new EventBase(this);\n this.filterDialog = new FilterDialog(this);\n this.errorDialog = new ErrorDialog(this);\n this.keyboardModule = new CommonKeyboardInteraction(this);\n return this;\n }\n /**\n * To destroy the groupingbar\n * @return {void}\n * @hidden\n */\n PivotCommon.prototype.destroy = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n };\n return PivotCommon;\n}());\nexport { PivotCommon };\n","import { createElement, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { EventHandler, setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport * as events from '../../common/base/constant';\n/**\n * Module to render Pivot Field List Dialog\n */\n/** @hidden */\nvar DialogRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function DialogRenderer(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the field list layout rendering\n * @returns void\n * @private\n */\n DialogRenderer.prototype.render = function () {\n var fieldListWrappper = createElement('div', {\n id: this.parent.element.id + '_Wrapper',\n className: cls.WRAPPER_CLASS,\n styles: 'width:' + this.parent.element.style.width\n });\n if (this.parent.isAdaptive) {\n addClass([fieldListWrappper], cls.DEVICE);\n }\n else {\n removeClass([fieldListWrappper], cls.DEVICE);\n }\n if (this.parent.enableRtl) {\n addClass([fieldListWrappper], cls.RTL);\n }\n else {\n removeClass([fieldListWrappper], cls.RTL);\n }\n if (this.parent.cssClass) {\n addClass([fieldListWrappper], this.parent.cssClass);\n }\n this.parentElement = createElement('div', { className: cls.CONTAINER_CLASS });\n this.parent.element.appendChild(fieldListWrappper);\n if (this.parent.isAdaptive) {\n fieldListWrappper.removeAttribute('style');\n this.parentElement = createElement('div', { className: cls.ADAPTIVE_CONTAINER_CLASS });\n this.renderAdaptiveLayout(fieldListWrappper);\n }\n if (this.parent.renderMode === 'Popup') {\n this.renderFieldListDialog(fieldListWrappper);\n this.unWireDialogEvent(this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS));\n this.wireDialogEvent(this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS));\n }\n else {\n this.renderStaticLayout(fieldListWrappper);\n }\n };\n DialogRenderer.prototype.renderStaticLayout = function (fieldListWrappper) {\n if (!this.parent.isAdaptive) {\n var layoutHeader = createElement('div', {\n className: cls.FIELD_LIST_TITLE_CLASS\n });\n var headerContent = createElement('div', {\n className: cls.FIELD_LIST_TITLE_CONTENT_CLASS,\n innerHTML: this.parent.localeObj.getConstant('staticFieldList')\n });\n layoutHeader.appendChild(headerContent);\n layoutHeader.appendChild(this.createCalculatedButton());\n addClass([fieldListWrappper], cls.STATIC_FIELD_LIST_CLASS);\n fieldListWrappper.appendChild(layoutHeader);\n fieldListWrappper.appendChild(this.parentElement);\n }\n };\n DialogRenderer.prototype.renderFieldListDialog = function (fieldListWrappper) {\n var toggleFieldList = createElement('div', {\n className: cls.TOGGLE_FIELD_LIST_CLASS + ' ' + cls.ICON + ' ' + cls.TOGGLE_SELECT_CLASS,\n attrs: {\n 'tabindex': '0',\n title: this.parent.localeObj.getConstant('fieldList'),\n 'aria-disabled': 'false',\n 'aria-label': this.parent.localeObj.getConstant('fieldList')\n }\n });\n this.parent.element.appendChild(toggleFieldList);\n if (this.parent.isAdaptive) {\n this.fieldListDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n content: this.parentElement,\n isModal: true,\n showCloseIcon: false,\n visible: false,\n allowDragging: false,\n closeOnEscape: false,\n enableRtl: this.parent.enableRtl,\n width: '100%',\n height: '100%',\n position: { X: 'center', Y: 'center' },\n buttons: [{\n click: this.showFieldListDialog.bind(this),\n buttonModel: {\n cssClass: cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n isPrimary: true\n }\n }, {\n click: this.showCalculatedField.bind(this),\n buttonModel: {\n cssClass: cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS +\n ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + ' ' + cls.ICON_DISABLE,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n isPrimary: true\n }\n }, {\n click: this.onCloseFieldList.bind(this),\n buttonModel: {\n content: this.parent.localeObj.getConstant('close'),\n cssClass: cls.CANCEL_BUTTON_CLASS,\n }\n }],\n target: document.body,\n close: this.removeFieldListIcon.bind(this)\n });\n this.fieldListDialog.appendTo(fieldListWrappper);\n setStyleAttribute(fieldListWrappper.querySelector('#' + fieldListWrappper.id + '_dialog-content'), {\n 'padding': '0'\n });\n var footer = fieldListWrappper.querySelector('.' + cls.FOOTER_CONTENT_CLASS);\n addClass([footer], cls.FIELD_LIST_FOOTER_CLASS);\n removeClass([footer.querySelector('.' + cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS)], cls.BUTTON_FLAT_CLASS);\n removeClass([footer.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)], cls.BUTTON_FLAT_CLASS);\n }\n else {\n var headerTemplate = '
    ' + this.parent.localeObj.getConstant('fieldList') + '
    ';\n this.fieldListDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n header: headerTemplate,\n content: this.parentElement,\n isModal: false,\n showCloseIcon: false,\n visible: false,\n allowDragging: true,\n enableRtl: this.parent.enableRtl,\n width: this.parent.element.style.width,\n position: { X: 'center', Y: this.parent.element.offsetTop },\n buttons: [{\n click: this.onCloseFieldList.bind(this),\n buttonModel: {\n content: this.parent.localeObj.getConstant('close'), cssClass: cls.CANCEL_BUTTON_CLASS,\n isPrimary: true\n },\n }],\n closeOnEscape: true,\n target: !isNullOrUndefined(this.parent.target) ? ((typeof this.parent.target) === 'string') ?\n document.querySelector(this.parent.target) : this.parent.target : document.body,\n close: this.removeFieldListIcon.bind(this)\n });\n this.fieldListDialog.appendTo(fieldListWrappper);\n setStyleAttribute(fieldListWrappper.querySelector('#' + fieldListWrappper.id + '_title'), { 'width': '100%' });\n fieldListWrappper.querySelector('.' + cls.TITLE_HEADER_CLASS).appendChild(this.createCalculatedButton());\n }\n };\n /**\n * Called internally if any of the field added to axis.\n * @hidden\n */\n DialogRenderer.prototype.updateDataSource = function (selectedNodes) {\n var axis = ['filters', 'columns', 'rows', 'values'];\n for (var _i = 0, selectedNodes_1 = selectedNodes; _i < selectedNodes_1.length; _i++) {\n var field = selectedNodes_1[_i];\n var fieldName = field;\n var droppedClass = axis[this.adaptiveElement.selectedItem];\n this.parent.pivotCommon.dataSourceUpdate.control = this.parent.getModuleName() === 'pivotview' ?\n this.parent : (this.parent.pivotGridModule ?\n this.parent.pivotGridModule : this.parent);\n this.parent.pivotCommon.dataSourceUpdate.updateDataSource(fieldName, droppedClass, -1);\n }\n this.parent.axisFieldModule.render();\n this.parent.updateDataSource(true);\n };\n DialogRenderer.prototype.renderAdaptiveLayout = function (fieldListWrappper) {\n var _this = this;\n var layoutFooter = createElement('div', {\n className: cls.FIELD_LIST_FOOTER_CLASS\n });\n fieldListWrappper.appendChild(this.parentElement);\n var items = [\n {\n header: { 'text': this.parent.localeObj.getConstant('filters') },\n content: this.createAxisTable('filters')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('columns') },\n content: this.createAxisTable('columns')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('rows') },\n content: this.createAxisTable('rows')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('values') },\n content: this.createAxisTable('values')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('createCalculatedField') },\n content: 'Calculated Field Related UI'\n }\n ];\n if (!this.parent.allowCalculatedField) {\n items.pop();\n }\n this.adaptiveElement = new Tab({\n heightAdjustMode: 'Auto',\n items: items,\n height: '100%',\n enableRtl: this.parent.enableRtl,\n selected: function (e) {\n if (fieldListWrappper.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)) {\n if (e.selectedIndex !== 4) {\n addClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS)], cls.ICON_DISABLE);\n removeClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)], cls.ICON_DISABLE);\n }\n else {\n removeClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS)], cls.ICON_DISABLE);\n addClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)], cls.ICON_DISABLE);\n }\n }\n if (e.selectedIndex === 4) {\n _this.adaptiveElement.items[4].content = '';\n _this.adaptiveElement.dataBind();\n _this.parent.notify(events.initCalculatedField, {});\n }\n else {\n _this.parent.axisFieldModule.render();\n }\n }\n });\n if (this.parent.renderMode === 'Fixed') {\n layoutFooter.appendChild(this.createAddButton());\n addClass([fieldListWrappper], cls.STATIC_FIELD_LIST_CLASS);\n this.adaptiveElement.appendTo(this.parentElement);\n this.parentElement.appendChild(layoutFooter);\n }\n else {\n this.adaptiveElement.appendTo(this.parentElement);\n }\n };\n DialogRenderer.prototype.createCalculatedButton = function () {\n var calculatedButton = createElement('div', {\n id: this.parent.element.id + '_CalculatedField'\n });\n var calculateField = new Button({\n cssClass: cls.CALCULATED_FIELD_CLASS + ' ' + cls.ICON_DISABLE,\n content: this.parent.localeObj.getConstant('calculatedField'),\n enableRtl: this.parent.enableRtl\n });\n calculateField.appendTo(calculatedButton);\n if (this.parent.calculatedFieldModule) {\n removeClass([calculatedButton], cls.ICON_DISABLE);\n }\n calculateField.element.onclick = this.showCalculatedField.bind(this);\n return calculatedButton;\n };\n DialogRenderer.prototype.createAddButton = function () {\n var footerContainer = createElement('div', {\n className: cls.FIELD_LIST_FOOTER_CLASS + '-content'\n });\n var fieldListButton = createElement('div', {});\n var calculatedButton = createElement('div', {});\n var calculateField = new Button({\n cssClass: cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS +\n ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + ' ' + cls.ICON_DISABLE,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n enableRtl: this.parent.enableRtl\n });\n var fieldList = new Button({\n cssClass: cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n enableRtl: this.parent.enableRtl\n });\n fieldList.appendTo(fieldListButton);\n calculateField.appendTo(calculatedButton);\n footerContainer.appendChild(fieldListButton);\n footerContainer.appendChild(calculatedButton);\n calculateField.element.onclick = this.showCalculatedField.bind(this);\n fieldList.element.onclick = this.showFieldListDialog.bind(this);\n return footerContainer;\n };\n DialogRenderer.prototype.createAxisTable = function (axis) {\n var axisWrapper = createElement('div', {\n className: cls.FIELD_LIST_CLASS + '-' + axis\n });\n var axisContent = createElement('div', { className: cls.AXIS_CONTENT_CLASS + ' ' + 'e-' + axis });\n var axisPrompt = createElement('span', {\n className: cls.AXIS_PROMPT_CLASS,\n innerHTML: this.parent.localeObj.getConstant('addPrompt')\n });\n axisWrapper.appendChild(axisContent);\n axisWrapper.appendChild(axisPrompt);\n return axisWrapper;\n };\n DialogRenderer.prototype.showCalculatedField = function (event) {\n if (!this.parent.isAdaptive) {\n if (this.parent.dialogRenderer.fieldListDialog) {\n this.parent.dialogRenderer.fieldListDialog.hide();\n addClass([this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n }\n }\n this.parent.notify(events.initCalculatedField, {});\n };\n DialogRenderer.prototype.showFieldListDialog = function (event) {\n var activeindex = this.adaptiveElement.selectedItem;\n this.parent.treeViewModule.render(activeindex);\n };\n DialogRenderer.prototype.onShowFieldList = function () {\n addClass([this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n this.parent.dialogRenderer.fieldListDialog.show();\n this.parent.dialogRenderer.fieldListDialog.element.style.top =\n parseInt(this.parent.dialogRenderer.fieldListDialog.element.style.top, 10) < 0 ?\n '0px' : this.parent.dialogRenderer.fieldListDialog.element.style.top;\n };\n DialogRenderer.prototype.onCloseFieldList = function () {\n this.parent.dialogRenderer.fieldListDialog.hide();\n };\n DialogRenderer.prototype.removeFieldListIcon = function () {\n if (!document.getElementById(this.parent.element.id + 'calculateddialog')) {\n removeClass([this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n }\n };\n DialogRenderer.prototype.keyPress = function (e) {\n var target = e.target;\n if (e.keyCode === 13 && e.target) {\n e.target.click();\n e.preventDefault();\n return;\n }\n };\n DialogRenderer.prototype.wireDialogEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyPress, this);\n EventHandler.add(element, 'click', this.onShowFieldList, this);\n };\n DialogRenderer.prototype.unWireDialogEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyPress);\n EventHandler.remove(element, 'click', this.onShowFieldList);\n };\n return DialogRenderer;\n}());\nexport { DialogRenderer };\n","import { createElement, addClass, removeClass, prepend, remove } from '@syncfusion/ej2-base';\nimport { closest, extend } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { MaskedTextBox } from '@syncfusion/ej2-inputs';\n/**\n * Module to render Field List\n */\n/** @hidden */\nvar TreeViewRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function TreeViewRenderer(parent) {\n this.selectedNodes = [];\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * Initialize the field list tree rendering\n * @returns void\n * @private\n */\n TreeViewRenderer.prototype.render = function (axis) {\n this.parentElement = this.parent.dialogRenderer.parentElement;\n if (!this.parent.isAdaptive) {\n var fieldTable = createElement('div', { className: cls.FIELD_TABLE_CLASS });\n var treeHeader = createElement('div', {\n className: cls.FIELD_HEADER_CLASS,\n innerHTML: this.parent.localeObj.getConstant('allFields')\n });\n this.treeViewElement = createElement('div', {\n id: this.parent.element.id + '_TreeView',\n className: cls.FIELD_LIST_CLASS\n });\n fieldTable.appendChild(treeHeader);\n fieldTable.appendChild(this.treeViewElement);\n this.parentElement.appendChild(fieldTable);\n if (this.parent.renderMode === 'Fixed') {\n var centerDiv = createElement('div', { className: cls.STATIC_CENTER_DIV_CLASS });\n var axisHeader = createElement('div', {\n className: cls.STATIC_CENTER_HEADER_CLASS,\n innerHTML: this.parent.localeObj.getConstant('centerHeader')\n });\n this.parentElement.appendChild(centerDiv);\n this.parentElement.appendChild(axisHeader);\n }\n this.renderTreeView();\n }\n else {\n this.renderTreeDialog(axis);\n }\n };\n TreeViewRenderer.prototype.renderTreeView = function () {\n this.fieldTable = new TreeView({\n fields: { dataSource: this.getTreeData(), id: 'id', text: 'caption', isChecked: 'isSelected' },\n nodeChecked: this.nodeStateChange.bind(this),\n cssClass: cls.FIELD_LIST_TREE_CLASS,\n showCheckBox: true,\n allowDragAndDrop: true,\n sortOrder: 'Ascending',\n enableRtl: this.parent.enableRtl,\n nodeDragStart: this.dragStart.bind(this),\n nodeDragStop: this.dragStop.bind(this)\n });\n this.treeViewElement.innerHTML = '';\n this.fieldTable.appendTo(this.treeViewElement);\n this.getTreeUpdate();\n };\n TreeViewRenderer.prototype.renderTreeDialog = function (axis) {\n var _this = this;\n var fieldListDialog = createElement('div', {\n id: this.parent.element.id + '_FieldListTreeView',\n className: cls.ADAPTIVE_FIELD_LIST_DIALOG_CLASS\n });\n this.parentElement.appendChild(fieldListDialog);\n this.fieldDialog = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: false,\n header: this.parent.localeObj.getConstant('adaptiveFieldHeader'),\n content: this.createTreeView(this.getTreeData(axis)),\n isModal: true,\n visible: true,\n showCloseIcon: false,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: '350px',\n position: { X: 'center', Y: 'center' },\n buttons: [{\n click: this.closeTreeDialog.bind(this),\n buttonModel: {\n cssClass: cls.CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel')\n }\n }, {\n click: this.onFieldAdd.bind(this),\n buttonModel: {\n cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('add'),\n isPrimary: true\n }\n }],\n closeOnEscape: true,\n target: this.parentElement.parentElement,\n close: function () {\n if (document.getElementById(_this.parent.element.id + '_FieldListTreeView')) {\n remove(document.getElementById(_this.parent.element.id + '_FieldListTreeView'));\n }\n }\n });\n this.fieldDialog.appendTo(fieldListDialog);\n };\n TreeViewRenderer.prototype.createTreeView = function (treeData) {\n var _this = this;\n var editorTreeWrapper = createElement('div', {\n id: this.parent.element.id + 'EditorDiv',\n className: cls.EDITOR_TREE_WRAPPER_CLASS\n });\n var searchWrapper = createElement('div', {\n id: this.parent.element.id + '_SearchDiv', attrs: { 'tabindex': '-1' },\n className: cls.EDITOR_SEARCH_WRAPPER_CLASS\n });\n var editorSearch = createElement('input', { attrs: { 'type': 'text' } });\n searchWrapper.appendChild(editorSearch);\n var treeViewContainer = createElement('div', { className: cls.EDITOR_TREE_CONTAINER_CLASS });\n editorTreeWrapper.appendChild(searchWrapper);\n this.editorSearch = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('search'),\n enableRtl: this.parent.enableRtl,\n cssClass: cls.EDITOR_SEARCH_CLASS,\n change: function (e) {\n _this.parent.pivotCommon.eventBase.searchTreeNodes(e, _this.fieldTable);\n }\n });\n this.editorSearch.appendTo(editorSearch);\n editorTreeWrapper.appendChild(treeViewContainer);\n this.fieldTable = new TreeView({\n fields: { dataSource: treeData, id: 'id', text: 'caption', isChecked: 'isSelected' },\n showCheckBox: true,\n sortOrder: 'Ascending',\n enableRtl: this.parent.enableRtl,\n nodeChecked: this.addNode.bind(this),\n });\n this.fieldTable.appendTo(treeViewContainer);\n return editorTreeWrapper;\n };\n TreeViewRenderer.prototype.dragStart = function (args) {\n if (args.event.target.classList.contains(cls.DRAG_CLASS)) {\n this.parent.isDragging = true;\n addClass([args.draggedNode.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.SELECTED_NODE_CLASS);\n var data = this.parent.engineModule.fieldList[args.draggedNode.getAttribute('data-uid')];\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n if (data && data.aggregateType === 'CalculatedField') {\n for (var _i = 0, axis_1 = axis; _i < axis_1.length; _i++) {\n var axisContent = axis_1[_i];\n addClass([this.parentElement.querySelector('.' + axisContent)], cls.NO_DRAG_CLASS);\n }\n }\n }\n else {\n args.cancel = true;\n }\n };\n TreeViewRenderer.prototype.dragStop = function (args) {\n args.cancel = true;\n this.parent.isDragging = false;\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n for (var _i = 0, axis_2 = axis; _i < axis_2.length; _i++) {\n var axisElement = axis_2[_i];\n removeClass([this.parentElement.querySelector('.' + axisElement)], cls.NO_DRAG_CLASS);\n }\n removeClass([args.draggedNode.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.SELECTED_NODE_CLASS);\n if (this.parent.pivotCommon.filterDialog.dialogPopUp) {\n this.parent.pivotCommon.filterDialog.dialogPopUp.close();\n }\n var fieldName = args.draggedNodeData.id.toString();\n if (!this.isNodeDropped(args, fieldName)) {\n return;\n }\n this.parent.pivotCommon.dataSourceUpdate.control = this.parent.getModuleName() === 'pivotview' ? this.parent :\n (this.parent.pivotGridModule ? this.parent.pivotGridModule : this.parent);\n if (this.parent.pivotCommon.nodeStateModified.onStateModified(args, fieldName)) {\n this.parent.updateDataSource();\n this.parent.axisFieldModule.render();\n }\n };\n TreeViewRenderer.prototype.isNodeDropped = function (args, targetID) {\n var isDropped = true;\n if (args.draggedNodeData.isChecked === 'true') {\n var target = this.getButton(targetID);\n var axisPanel = closest(target, '.' + cls.DROPPABLE_CLASS);\n var droppableElement = closest(args.target, '.' + cls.DROPPABLE_CLASS);\n if (target && axisPanel === droppableElement) {\n var pivotButtons = [].slice.call(axisPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var dropTarget = closest(args.target, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n var sourcePosition = void 0;\n var dropPosition = -1;\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === target.id) {\n sourcePosition = i;\n }\n if (dropTarget) {\n var droppableButton = dropTarget.querySelector('.' + cls.PIVOT_BUTTON_CLASS);\n if (pivotButtons[i].id === droppableButton.id) {\n dropPosition = i;\n }\n }\n }\n if (sourcePosition === dropPosition || (sourcePosition === (pivotButtons.length - 1) && dropPosition === -1)) {\n var parentElement = document.getElementById(this.parent.element.id + '_Wrapper');\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n isDropped = false;\n }\n }\n }\n return isDropped;\n };\n TreeViewRenderer.prototype.getButton = function (fieldName) {\n var wrapperElement = document.getElementById(this.parent.element.id + '_Wrapper');\n var pivotButtons = [].slice.call(wrapperElement.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var buttonElement;\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === fieldName) {\n buttonElement = pivotButtons[i];\n break;\n }\n }\n return buttonElement;\n };\n TreeViewRenderer.prototype.nodeStateChange = function (args) {\n if (this.parent.pivotCommon.filterDialog.dialogPopUp) {\n this.parent.pivotCommon.filterDialog.dialogPopUp.close();\n }\n var node = closest(args.node, '.' + cls.TEXT_CONTENT_CLASS);\n var list = this.parent.pivotFieldList;\n var selectedNode = list[args.data[0].id.toString()];\n if (args.action === 'check') {\n addClass([node.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.LIST_SELECT_CLASS);\n var addNode = this.parent.pivotCommon.dataSourceUpdate.getNewField(args.data[0].id.toString());\n selectedNode.type === 'number' ?\n this.parent.dataSource.values.push(addNode) : this.parent.dataSource.rows.push(addNode);\n }\n else {\n removeClass([node.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.LIST_SELECT_CLASS);\n this.parent.pivotCommon.dataSourceUpdate.removeFieldFromReport(args.data[0].id.toString());\n }\n this.parent.updateDataSource(true);\n this.parent.axisFieldModule.render();\n };\n TreeViewRenderer.prototype.addNode = function (args) {\n var fieldList = this.parent.pivotFieldList;\n var selectedNode = fieldList[args.data[0].id.toString()];\n if (args.action === 'check') {\n this.selectedNodes.push(selectedNode.id.toString());\n }\n else {\n var count = this.selectedNodes.length;\n while (count--) {\n if (this.selectedNodes[count] === selectedNode.id.toString()) {\n this.selectedNodes.splice(count, 1);\n break;\n }\n }\n }\n };\n TreeViewRenderer.prototype.getTreeUpdate = function () {\n var liElements = [].slice.call(this.treeViewElement.querySelectorAll('.' + cls.TEXT_CONTENT_CLASS));\n for (var _i = 0, liElements_1 = liElements; _i < liElements_1.length; _i++) {\n var liElement = liElements_1[_i];\n var dragElement = createElement('span', {\n attrs: {\n 'tabindex': '-1',\n title: this.parent.localeObj.getConstant('drag'),\n 'aria-disabled': 'false'\n },\n className: cls.ICON + ' ' + cls.DRAG_CLASS\n });\n prepend([dragElement], liElement);\n if (liElement.querySelector('.' + cls.NODE_CHECK_CLASS)) {\n addClass([liElement.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.LIST_SELECT_CLASS);\n }\n }\n };\n TreeViewRenderer.prototype.refreshTreeView = function () {\n this.fieldTable.fields = { dataSource: this.getTreeData(), id: 'id', text: 'caption', isChecked: 'isSelected' };\n this.fieldTable.dataBind();\n this.getTreeUpdate();\n };\n TreeViewRenderer.prototype.getTreeData = function (axis) {\n var data = [];\n var keys = Object.keys(this.parent.pivotFieldList);\n var fieldList = extend({}, this.parent.pivotFieldList, null, true);\n if (this.parent.isAdaptive) {\n var fields = [this.parent.dataSource.filters, this.parent.dataSource.columns, this.parent.dataSource.rows,\n this.parent.dataSource.values];\n var currentFieldSet = fields[axis];\n var len = keys.length;\n while (len--) {\n fieldList[keys[len]].isSelected = false;\n }\n for (var _i = 0, currentFieldSet_1 = currentFieldSet; _i < currentFieldSet_1.length; _i++) {\n var item = currentFieldSet_1[_i];\n fieldList[item.name].isSelected = true;\n }\n }\n var list = fieldList;\n for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) {\n var member = keys_1[_a];\n var obj = list[member];\n data.push(obj);\n }\n return data;\n };\n TreeViewRenderer.prototype.onFieldAdd = function (e) {\n this.parent.dialogRenderer.updateDataSource(this.selectedNodes);\n this.closeTreeDialog();\n };\n TreeViewRenderer.prototype.closeTreeDialog = function () {\n this.selectedNodes = [];\n this.fieldDialog.hide();\n };\n /**\n * @hidden\n */\n TreeViewRenderer.prototype.addEventListener = function () {\n this.parent.on(events.treeViewUpdate, this.refreshTreeView, this);\n };\n /**\n * @hidden\n */\n TreeViewRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.treeViewUpdate, this.refreshTreeView);\n };\n /**\n * To destroy the tree view event listener\n * @return {void}\n * @hidden\n */\n TreeViewRenderer.prototype.destroy = function () {\n this.removeEventListener();\n };\n return TreeViewRenderer;\n}());\nexport { TreeViewRenderer };\n","import { createElement, Droppable, EventHandler, removeClass, addClass } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\n/**\n * Module to render Axis Field Table\n */\n/** @hidden */\nvar AxisTableRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function AxisTableRenderer(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the axis table rendering\n * @returns void\n * @private\n */\n AxisTableRenderer.prototype.render = function () {\n if (!this.parent.isAdaptive) {\n var axisTable = createElement('div', { className: cls.AXIS_TABLE_CLASS });\n this.leftAxisPanel = createElement('div', { className: cls.LEFT_AXIS_PANEL_CLASS });\n this.rightAxisPanel = createElement('div', { className: cls.RIGHT_AXIS_PANEL_CLASS });\n this.parent.dialogRenderer.parentElement.appendChild(axisTable);\n axisTable.appendChild(this.leftAxisPanel);\n axisTable.appendChild(this.rightAxisPanel);\n this.axisTable = axisTable;\n this.renderAxisTable();\n }\n this.parent.axisFieldModule.render();\n };\n AxisTableRenderer.prototype.renderAxisTable = function () {\n var fieldLabels = ['filters', 'rows', 'columns', 'values'];\n for (var len = 0, lnt = fieldLabels.length; len < lnt; len++) {\n var axis = createElement('div', {\n className: cls.FIELD_LIST_CLASS + '-' + fieldLabels[len]\n });\n var axisTitleWrapper = createElement('div', {\n className: cls.AXIS_ICON_CLASS + '-wrapper'\n });\n var axisTitle = createElement('div', {\n className: cls.AXIS_HEADER_CLASS,\n innerHTML: this.parent.localeObj.getConstant(fieldLabels[len])\n });\n axisTitleWrapper.appendChild(this.getIconupdate(fieldLabels[len]));\n axisTitleWrapper.appendChild(axisTitle);\n var axisContent = createElement('div', { className: cls.AXIS_CONTENT_CLASS + ' ' + 'e-' + fieldLabels[len] });\n var localePrompt = void 0;\n if (fieldLabels[len] === 'rows') {\n localePrompt = this.parent.localeObj.getConstant('dropRowPrompt');\n }\n else if (fieldLabels[len] === 'columns') {\n localePrompt = this.parent.localeObj.getConstant('dropColPrompt');\n }\n else if (fieldLabels[len] === 'values') {\n localePrompt = this.parent.localeObj.getConstant('dropValPrompt');\n }\n else {\n localePrompt = this.parent.localeObj.getConstant('dropFilterPrompt');\n }\n var axisPrompt = createElement('span', {\n className: cls.AXIS_PROMPT_CLASS,\n innerHTML: localePrompt\n });\n var droppable = new Droppable(axisContent, {});\n axis.appendChild(axisTitleWrapper);\n axis.appendChild(axisContent);\n axis.appendChild(axisPrompt);\n if (len <= 1) {\n this.leftAxisPanel.appendChild(axis);\n }\n else {\n this.rightAxisPanel.appendChild(axis);\n }\n this.unWireEvent(axisContent);\n this.wireEvent(axisContent);\n }\n };\n AxisTableRenderer.prototype.getIconupdate = function (axis) {\n var axisWrapper = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.AXIS_ICON_CLASS + '-icon-wrapper'\n });\n var axisElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false'\n },\n className: cls.ICON + ' ' + cls.AXIS_ICON_CLASS + '-' + axis\n });\n axisWrapper.appendChild(axisElement);\n return axisWrapper;\n };\n AxisTableRenderer.prototype.wireEvent = function (element) {\n EventHandler.add(element, 'mouseover', this.updateDropIndicator, this);\n EventHandler.add(element, 'mouseleave', this.updateDropIndicator, this);\n };\n AxisTableRenderer.prototype.unWireEvent = function (element) {\n EventHandler.remove(element, 'mouseover', this.updateDropIndicator);\n EventHandler.remove(element, 'mouseleave', this.updateDropIndicator);\n };\n AxisTableRenderer.prototype.updateDropIndicator = function (e) {\n var parentElement = this.parent.dialogRenderer.parentElement;\n if (this.parent.isDragging && e.target.classList.contains(cls.AXIS_CONTENT_CLASS) && e.type === 'mouseover') {\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n var element = [].slice.call(e.target.querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS));\n if (element.length > 0) {\n addClass([element[element.length - 1].querySelector('.' + cls.DROP_INDICATOR_CLASS + '-last')], cls.INDICATOR_HOVER_CLASS);\n }\n }\n else if (e.type === 'mouseleave') {\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n }\n };\n return AxisTableRenderer;\n}());\nexport { AxisTableRenderer };\n","import { createElement, Draggable, remove, extend } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, closest, Browser } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\n/**\n * Module to render Pivot button\n */\n/** @hidden */\nvar PivotButton = /** @class */ (function () {\n /** Constructor for render module */\n function PivotButton(parent) {\n this.parent = parent;\n this.parent.pivotButtonModule = this;\n this.addEventListener();\n }\n /* tslint:disable */\n PivotButton.prototype.renderPivotButton = function (args) {\n var field = extend([], args.field, null, true);\n var axis = args.axis;\n var axisElement;\n var valuePos = -1;\n var showValuesButton = (this.parent.getModuleName() == \"pivotfieldlist\" &&\n this.parent.pivotGridModule) ?\n this.parent.pivotGridModule.showValuesButton : this.parent.showValuesButton;\n if (((this.parent.dataSource.valueAxis === 'row' && args.axis === 'rows') ||\n (this.parent.dataSource.valueAxis === 'column' && args.axis === 'columns')) && showValuesButton && this.parent.dataSource.values.length > 1) {\n valuePos = field.length;\n field.push({\n name: this.parent.localeObj.getConstant('values'), caption: this.parent.localeObj.getConstant('values'),\n axis: args.axis\n });\n }\n this.parentElement = this.parent.getModuleName() === 'pivotview' ? this.parent.element :\n document.getElementById(this.parent.element.id + '_Wrapper');\n if (this.parent.getModuleName() === 'pivotfieldlist') {\n this.parentElement = document.getElementById(this.parent.element.id + '_Wrapper');\n if (this.parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-' + axis)) {\n var axisPrompt = this.parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-' + axis)\n .querySelector('.' + cls.AXIS_PROMPT_CLASS);\n if (field.length === 0) {\n removeClass([axisPrompt], cls.ICON_DISABLE);\n }\n else {\n addClass([axisPrompt], cls.ICON_DISABLE);\n }\n axisElement =\n this.parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-' + axis).querySelector('.' + cls.AXIS_CONTENT_CLASS);\n }\n else {\n return;\n }\n }\n else {\n this.parentElement = this.parent.element;\n axisElement = this.parentElement.querySelector('.e-group-' + axis);\n }\n if (axisElement) {\n if (this.parent.getModuleName() === 'pivotview' && field.length === 0) {\n var axisPrompt = createElement('span', {\n className: cls.AXIS_PROMPT_CLASS,\n innerHTML: axis === 'rows' ? this.parent.localeObj.getConstant('rowAxisPrompt') :\n axis === 'columns' ? this.parent.localeObj.getConstant('columnAxisPrompt') :\n axis === 'values' ? this.parent.localeObj.getConstant('valueAxisPrompt') :\n this.parent.localeObj.getConstant('filterAxisPrompt')\n });\n axisElement.appendChild(axisPrompt);\n }\n else {\n for (var i = 0, cnt = field.length; i < cnt; i++) {\n var buttonWrapper = createElement('div', {\n className: cls.PIVOT_BUTTON_WRAPPER_CLASS + (i === 0 ? ' e-first-btn' : ''),\n attrs: { 'data-tag': axis + ':' + field[i].name }\n });\n var buttonElement = createElement('div', {\n id: field[i].name, className: cls.PIVOT_BUTTON_CLASS,\n attrs: {\n 'data-uid': field[i].name, 'tabindex': '0', 'isvalue': i === valuePos ? 'true' : 'false',\n 'aria-disabled': 'false', 'aria-label': field[i].caption ? field[i].caption : field[i].name\n }\n });\n var dropIndicatorElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.DROP_INDICATOR_CLASS\n });\n var dropLastIndicatorElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.DROP_INDICATOR_CLASS + '-last'\n });\n var dragWrapper = this.createButtonDragIcon(buttonElement);\n var contentElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false', 'oncontextmenu': 'return false;',\n 'data-type': valuePos === i ? '' : this.parent.engineModule.fieldList[field[i].name].aggregateType\n },\n className: cls.PIVOT_BUTTON_CONTENT_CLASS,\n innerHTML: field[i].caption ? field[i].caption : field[i].name\n });\n buttonElement.appendChild(contentElement);\n if (['filters', 'values'].indexOf(axis) === -1 && valuePos !== i) {\n this.createSortOption(buttonElement, field[i].name);\n }\n if (axis !== 'values' && valuePos !== i) {\n this.createFilterOption(buttonElement, field[i].name);\n }\n var removeElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.ICON + ' ' + cls.REMOVE_CLASS\n });\n if (this.parent.getModuleName() === 'pivotview') {\n if (this.parent.groupingBarSettings.showRemoveIcon) {\n removeClass([removeElement], cls.ICON_DISABLE);\n }\n else {\n addClass([removeElement], cls.ICON_DISABLE);\n }\n }\n buttonElement.appendChild(removeElement);\n buttonWrapper.appendChild(dropIndicatorElement);\n buttonWrapper.appendChild(buttonElement);\n buttonWrapper.appendChild(dropLastIndicatorElement);\n axisElement.appendChild(buttonWrapper);\n var pivotButton = new Button({ enableRtl: this.parent.enableRtl });\n pivotButton.appendTo(buttonElement);\n this.unWireEvent(buttonWrapper, i === valuePos ? 'values' : axis);\n this.wireEvent(buttonWrapper, i === valuePos ? 'values' : axis);\n if ((this.parent.getModuleName() === 'pivotview' && !this.parent.isAdaptive) ||\n this.parent.getModuleName() === 'pivotfieldlist') {\n this.createDraggable(this.parent.getModuleName() === 'pivotview' ? contentElement : dragWrapper);\n }\n }\n }\n }\n else {\n return;\n }\n };\n PivotButton.prototype.createDraggable = function (target) {\n this.draggable = new Draggable(target, {\n clone: true,\n enableTailMode: true,\n enableAutoScroll: true,\n helper: this.createDragClone.bind(this),\n dragStart: this.onDragStart.bind(this),\n drag: this.onDragging.bind(this),\n dragStop: this.onDragStop.bind(this)\n });\n };\n PivotButton.prototype.createButtonDragIcon = function (pivotButton) {\n var dragWrapper = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' }\n });\n var dragElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false'\n },\n className: cls.ICON + ' ' + cls.DRAG_CLASS\n });\n dragWrapper.appendChild(dragElement);\n pivotButton.appendChild(dragWrapper);\n return dragWrapper;\n };\n PivotButton.prototype.createSortOption = function (pivotButton, fieldName) {\n var sortCLass = this.parent.engineModule.fieldList[fieldName].sort === 'Descending' ? cls.SORT_DESCEND_CLASS : '';\n var spanElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.ICON + ' ' + cls.SORT_CLASS + ' ' + sortCLass\n });\n if (this.parent.dataSource.enableSorting) {\n removeClass([spanElement], cls.ICON_DISABLE);\n }\n else {\n addClass([spanElement], cls.ICON_DISABLE);\n }\n if (this.parent.getModuleName() === 'pivotview') {\n if (this.parent.groupingBarSettings.showSortIcon) {\n removeClass([spanElement], cls.ICON_DISABLE);\n }\n else {\n addClass([spanElement], cls.ICON_DISABLE);\n }\n }\n pivotButton.appendChild(spanElement);\n return spanElement;\n };\n PivotButton.prototype.createFilterOption = function (pivotButton, fieldName) {\n var filterCLass = this.parent.engineModule.fieldList[fieldName].filter.length === 0 ?\n !this.parent.engineModule.fieldList[fieldName].isExcelFilter ? cls.FILTER_CLASS : cls.FILTERED_CLASS : cls.FILTERED_CLASS;\n var spanElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false'\n },\n className: cls.FILTER_COMMON_CLASS + ' ' + cls.ICON + ' ' + filterCLass\n });\n if (this.parent.getModuleName() === 'pivotview') {\n if (this.parent.groupingBarSettings.showFilterIcon) {\n removeClass([spanElement], cls.ICON_DISABLE);\n }\n else {\n addClass([spanElement], cls.ICON_DISABLE);\n }\n }\n pivotButton.appendChild(spanElement);\n return spanElement;\n };\n PivotButton.prototype.createDragClone = function (args) {\n var element = closest(args.element, '.' + cls.PIVOT_BUTTON_CLASS);\n var cloneElement = createElement('div', {\n id: this.parent.element.id + '_DragClone',\n className: cls.DRAG_CLONE_CLASS\n });\n var contentElement = createElement('span', {\n className: cls.TEXT_CONTENT_CLASS,\n innerHTML: element.textContent\n });\n cloneElement.appendChild(contentElement);\n document.body.appendChild(cloneElement);\n return cloneElement;\n };\n PivotButton.prototype.onDragStart = function (e) {\n this.parent.isDragging = true;\n var element = closest(e.element, '.' + cls.PIVOT_BUTTON_CLASS);\n var data = this.parent.engineModule.fieldList[element.getAttribute('data-uid')];\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n addClass([element], cls.SELECTED_NODE_CLASS);\n if (data && data.aggregateType === 'CalculatedField') {\n for (var _i = 0, axis_1 = axis; _i < axis_1.length; _i++) {\n var axisContent = axis_1[_i];\n addClass([this.parentElement.querySelector('.' + axisContent)], cls.NO_DRAG_CLASS);\n }\n }\n };\n PivotButton.prototype.onDragging = function (e) {\n this.draggable.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20, } });\n // if (closest(e.event.srcElement, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS)) {\n // let droppableElement: HTMLElement = closest(e.event.srcElement, '.' + cls.DROPPABLE_CLASS) as HTMLElement;\n // let buttonElement: HTMLElement = closest(e.event.srcElement, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS) as HTMLElement;\n // if (droppableElement.offsetHeight < droppableElement.scrollHeight) {\n // let scrollPosition: number = (droppableElement.scrollHeight - buttonElement.offsetTop);\n // if (buttonElement.offsetTop >= droppableElement.offsetTop && scrollPosition > droppableElement.scrollTop) {\n // droppableElement.scrollTop += Math.abs(buttonElement.offsetHeight);\n // } else if (buttonElement.offsetTop <= droppableElement.offsetTop) {\n // droppableElement.scrollTop -= Math.abs(buttonElement.offsetHeight);\n // }\n // }\n // }\n };\n PivotButton.prototype.onDragStop = function (args) {\n this.parent.isDragging = false;\n var element = closest(args.element, '.' + cls.PIVOT_BUTTON_CLASS);\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS)), cls.SELECTED_NODE_CLASS);\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n for (var _i = 0, axis_2 = axis; _i < axis_2.length; _i++) {\n var axisContent = axis_2[_i];\n removeClass([this.parentElement.querySelector('.' + axisContent)], cls.NO_DRAG_CLASS);\n }\n if (this.parent.pivotCommon.filterDialog.dialogPopUp) {\n this.parent.pivotCommon.filterDialog.dialogPopUp.close();\n }\n if (document.getElementById(this.parent.element.id + '_DragClone')) {\n remove(document.getElementById(this.parent.element.id + '_DragClone'));\n }\n if (!this.isButtonDropped(args.target, element)) {\n return;\n }\n this.parent.pivotCommon.dataSourceUpdate.control = this.parent.getModuleName() === 'pivotview' ? this.parent :\n (this.parent.pivotGridModule ? this.parent.pivotGridModule : this.parent);\n if (this.parent.pivotCommon.nodeStateModified.onStateModified(args, element.id)) {\n this.parent.updateDataSource();\n this.parent.axisFieldModule.render();\n }\n };\n PivotButton.prototype.isButtonDropped = function (dropTarget, target) {\n var axisPanel = closest(target, '.' + cls.DROPPABLE_CLASS);\n var droppableElement = closest(dropTarget, '.' + cls.DROPPABLE_CLASS);\n var isDropped = true;\n if (axisPanel === droppableElement) {\n var pivotButtons = [].slice.call(axisPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var droppableTarget = closest(dropTarget, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n var sourcePosition = void 0;\n var droppedPosition = -1;\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === target.id) {\n sourcePosition = i;\n }\n if (droppableTarget) {\n var droppableButton = droppableTarget.querySelector('.' + cls.PIVOT_BUTTON_CLASS);\n if (pivotButtons[i].id === droppableButton.id) {\n droppedPosition = i;\n }\n }\n }\n if (sourcePosition === droppedPosition || (sourcePosition === (pivotButtons.length - 1) && droppedPosition === -1)) {\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n isDropped = false;\n }\n }\n return isDropped;\n };\n PivotButton.prototype.updateSorting = function (args) {\n if (((this.parent.getModuleName() === 'pivotview' && this.parent.enableValueSorting) ||\n (this.parent.getModuleName() === 'pivotfieldlist' && this.parent.pivotGridModule !== undefined &&\n this.parent.pivotGridModule.enableValueSorting)) &&\n args.target.parentElement.parentElement.getAttribute('data-tag').split(':')[0] === 'rows') {\n this.parent.dataSource.valueSortSettings.headerText = '';\n }\n this.parent.pivotCommon.eventBase.updateSorting(args);\n this.parent.updateDataSource(true);\n };\n PivotButton.prototype.updateFiltering = function (args) {\n this.parent.pivotCommon.eventBase.updateFiltering(args);\n var target = args.target;\n var fieldName = target.parentElement.id;\n this.dialogPopUp = this.parent.pivotCommon.filterDialog.dialogPopUp;\n this.memberTreeView = this.parent.pivotCommon.filterDialog.memberTreeView;\n this.parent.pivotCommon.filterDialog.memberTreeView.nodeChecked = this.nodeStateModified.bind(this);\n this.parent.pivotCommon.filterDialog.allMemberSelect.nodeChecked = this.nodeStateModified.bind(this);\n this.bindDialogEvents(fieldName);\n };\n PivotButton.prototype.bindDialogEvents = function (fieldName) {\n var _this = this;\n if (this.parent.pivotCommon.filterDialog.allowExcelLikeFilter && this.parent.pivotCommon.filterDialog.tabObj) {\n this.updateDialogButtonEvents(this.parent.pivotCommon.filterDialog.tabObj.selectedItem, fieldName);\n this.dialogPopUp.buttons[1].click = this.ClearFilter.bind(this);\n this.parent.pivotCommon.filterDialog.tabObj.selected = function (e) {\n _this.updateDialogButtonEvents(e.selectedIndex, fieldName);\n removeClass([].slice.call(_this.dialogPopUp.element.querySelectorAll('.e-selected-tab')), 'e-selected-tab');\n if (e.selectedIndex > 0) {\n /* tslint:disable-next-line:max-line-length */\n addClass([_this.dialogPopUp.element.querySelector('.e-filter-div-content' + '.' + (e.selectedIndex === 1 && _this.parent.dataSource.allowLabelFilter ? 'e-label-filter' : 'e-value-filter'))], 'e-selected-tab');\n }\n };\n }\n else {\n this.updateDialogButtonEvents(0, fieldName);\n }\n };\n PivotButton.prototype.updateDialogButtonEvents = function (index, fieldName) {\n this.dialogPopUp.buttons[0].click = (index === 0 ?\n this.updateFilterState.bind(this, fieldName) : this.updateCustomFilter.bind(this));\n };\n PivotButton.prototype.updateCustomFilter = function (args) {\n var dialogElement = this.dialogPopUp.element.querySelector('.e-selected-tab');\n var fieldName = dialogElement.getAttribute('data-fieldname');\n var filterType = dialogElement.getAttribute('data-type');\n var measure = dialogElement.getAttribute('data-measure');\n var operator = dialogElement.getAttribute('data-operator');\n var operand1 = dialogElement.getAttribute('data-value1');\n var operand2 = dialogElement.getAttribute('data-value2');\n var type = ((filterType === 'value') ? 'Value' : (filterType === 'date') ? 'Date' :\n (filterType === 'number') ? 'Number' : 'Label');\n var filterItem = {\n name: fieldName,\n type: type,\n measure: measure,\n condition: operator,\n value1: filterType === 'date' ? new Date(operand1) : operand1,\n value2: filterType === 'date' ? new Date(operand2) : operand2\n };\n var filterObject = this.parent.pivotCommon.eventBase.getFilterItemByName(fieldName);\n if (filterObject) {\n // this.removeDataSourceSettings(fieldName);\n filterObject = filterObject.properties ?\n filterObject.properties : filterObject;\n filterObject.type = type;\n filterObject.measure = measure;\n filterObject.condition = operator;\n filterObject.value1 = filterType === 'date' ? new Date(operand1) : operand1;\n filterObject.value2 = filterType === 'date' ? new Date(operand2) : operand2;\n }\n else {\n this.parent.dataSource.filterSettings.push(filterItem);\n }\n this.dialogPopUp.hide();\n this.refreshPivotButtonState(fieldName, true);\n this.parent.updateDataSource(true);\n };\n PivotButton.prototype.ClearFilter = function (e) {\n var dialogElement = this.dialogPopUp.element;\n var fieldName = dialogElement.getAttribute('data-fieldname');\n this.dialogPopUp.hide();\n this.removeDataSourceSettings(fieldName);\n this.refreshPivotButtonState(fieldName, false);\n this.parent.updateDataSource(true);\n };\n PivotButton.prototype.removeButton = function (args) {\n var target = args.target;\n var fieldName = target.parentElement.id;\n if (target.parentElement.getAttribute('isvalue') === 'true') {\n this.parent.setProperties({ dataSource: { values: [] } }, true);\n }\n else {\n this.parent.pivotCommon.dataSourceUpdate.removeFieldFromReport(fieldName);\n }\n if (this.parent.getModuleName() === 'pivotfieldlist') {\n this.parent.axisFieldModule.render();\n }\n this.parent.updateDataSource();\n };\n PivotButton.prototype.nodeStateModified = function (args) {\n var target = args.node.parentElement.parentElement;\n if (target.getAttribute('data-uid') === 'all') {\n this.memberTreeView.nodeChecked = null;\n if (args.action === 'check') {\n this.memberTreeView.checkAll();\n }\n else {\n this.memberTreeView.uncheckAll();\n }\n this.memberTreeView.nodeChecked = this.nodeStateModified.bind(this);\n }\n this.parent.pivotCommon.filterDialog.updateCheckedState();\n };\n PivotButton.prototype.updateFilterState = function (fieldName, args) {\n var list = [].slice.call(this.memberTreeView.element.querySelectorAll('li'));\n var unCheckedNodeCount = 0;\n var filterItem = { items: [], name: fieldName, type: 'Include' };\n for (var i = 0, cnt = list.length; i < cnt; i++) {\n if (list[i].querySelector('.' + cls.CHECK_BOX_FRAME_CLASS).classList.contains(cls.NODE_CHECK_CLASS)) {\n filterItem.items.push(list[i].getAttribute('data-uid'));\n }\n else {\n unCheckedNodeCount = unCheckedNodeCount + 1;\n }\n }\n var filterObject = this.parent.pivotCommon.eventBase.getFilterItemByName(fieldName);\n if (filterObject) {\n filterObject = filterObject.properties ?\n filterObject.properties : filterObject;\n filterObject.items = filterItem.items;\n filterObject.type = filterItem.type;\n }\n else {\n this.parent.dataSource.filterSettings.push(filterItem);\n }\n this.dialogPopUp.hide();\n this.refreshPivotButtonState(fieldName, (unCheckedNodeCount > 0) ? true : false);\n if (unCheckedNodeCount === 0) {\n this.removeDataSourceSettings(fieldName);\n }\n this.parent.updateDataSource(true);\n };\n PivotButton.prototype.refreshPivotButtonState = function (fieldName, isFiltered) {\n var pivotButtons = [].slice.call(this.parentElement.querySelectorAll('.e-pivot-button'));\n var selectedButton;\n for (var _i = 0, pivotButtons_1 = pivotButtons; _i < pivotButtons_1.length; _i++) {\n var item = pivotButtons_1[_i];\n if (item.getAttribute('data-uid') === fieldName) {\n selectedButton = item.querySelector('.' + cls.FILTER_COMMON_CLASS);\n break;\n }\n }\n if (isFiltered) {\n removeClass([selectedButton], cls.FILTER_CLASS);\n addClass([selectedButton], cls.FILTERED_CLASS);\n }\n else {\n removeClass([selectedButton], cls.FILTERED_CLASS);\n addClass([selectedButton], cls.FILTER_CLASS);\n }\n };\n PivotButton.prototype.removeDataSourceSettings = function (fieldName) {\n var filterSettings = this.parent.dataSource.filterSettings;\n for (var len = 0, lnt = filterSettings.length; len < lnt; len++) {\n if (filterSettings[len].name === fieldName) {\n filterSettings.splice(len, 1);\n break;\n }\n }\n };\n PivotButton.prototype.updateDropIndicator = function (e) {\n if (this.parent.isDragging) {\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n var element = closest(e.target, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n addClass([element.querySelector('.' + cls.DROP_INDICATOR_CLASS)], cls.INDICATOR_HOVER_CLASS);\n }\n };\n PivotButton.prototype.wireEvent = function (element, axis) {\n EventHandler.add(element, 'mouseover', this.updateDropIndicator, this);\n if (['filters', 'values'].indexOf(axis) === -1) {\n EventHandler.add(element.querySelector('.' + cls.SORT_CLASS), 'click', this.updateSorting, this);\n }\n if (axis !== 'values') {\n EventHandler.add(element.querySelector('.' + cls.FILTER_COMMON_CLASS), 'click', this.updateFiltering, this);\n }\n EventHandler.add(element.querySelector('.' + cls.REMOVE_CLASS), 'click', this.removeButton, this);\n };\n PivotButton.prototype.unWireEvent = function (element, axis) {\n EventHandler.remove(element, 'mouseover', this.updateDropIndicator);\n if (['filters', 'values'].indexOf(axis) === -1) {\n EventHandler.remove(element.querySelector('.' + cls.SORT_CLASS), 'click', this.updateSorting);\n }\n if (axis !== 'values') {\n EventHandler.remove(element.querySelector('.' + cls.FILTER_COMMON_CLASS), 'click', this.updateFiltering);\n }\n EventHandler.remove(element.querySelector('.' + cls.REMOVE_CLASS), 'click', this.removeButton);\n };\n /**\n * @hidden\n */\n PivotButton.prototype.addEventListener = function () {\n this.handlers = {\n load: this.renderPivotButton\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.pivotButtonUpdate, this.handlers.load, this);\n };\n /**\n * @hidden\n */\n PivotButton.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pivotButtonUpdate, this.handlers.load);\n };\n /**\n * To destroy the pivot button event listener\n * @return {void}\n * @hidden\n */\n PivotButton.prototype.destroy = function () {\n this.removeEventListener();\n };\n return PivotButton;\n}());\nexport { PivotButton };\n","import * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { PivotButton } from '../../common/actions/pivot-button';\n/**\n * Module to render Axis Fields\n */\n/** @hidden */\nvar AxisFieldRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function AxisFieldRenderer(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the pivot button rendering\n * @returns void\n * @private\n */\n AxisFieldRenderer.prototype.render = function () {\n this.pivotButton = new PivotButton(this.parent);\n this.createPivotButtons();\n };\n AxisFieldRenderer.prototype.createPivotButtons = function () {\n var rows = this.parent.dataSource.rows;\n var columns = this.parent.dataSource.columns;\n var values = this.parent.dataSource.values;\n var filters = this.parent.dataSource.filters;\n var fields = [rows, columns, values, filters];\n var parentElement = this.parent.dialogRenderer.parentElement;\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-filters')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-filters').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-rows')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-rows').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-columns')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-columns').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-values')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-values').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n var axis = ['rows', 'columns', 'values', 'filters'];\n for (var len = 0, lnt = fields.length; len < lnt; len++) {\n if (fields[len]) {\n var args = {\n field: fields[len],\n axis: axis[len].toString()\n };\n this.parent.notify(events.pivotButtonUpdate, args);\n }\n }\n };\n return AxisFieldRenderer;\n}());\nexport { AxisFieldRenderer };\n","import { DialogRenderer } from '../renderer/dialog-renderer';\nimport { TreeViewRenderer } from '../renderer/tree-renderer';\nimport { AxisTableRenderer } from '../renderer/axis-table-renderer';\nimport { AxisFieldRenderer } from './axis-field-renderer';\n/**\n * Module to render Pivot Table component\n */\n/** @hidden */\nvar Render = /** @class */ (function () {\n /** Constructor for render module */\n function Render(parent) {\n this.parent = parent;\n this.parent.dialogRenderer = new DialogRenderer(this.parent);\n this.parent.treeViewModule = new TreeViewRenderer(this.parent);\n this.parent.axisTableModule = new AxisTableRenderer(this.parent);\n this.parent.axisFieldModule = new AxisFieldRenderer(this.parent);\n }\n /**\n * Initialize the pivot table rendering\n * @returns void\n * @private\n */\n Render.prototype.render = function () {\n this.parent.dialogRenderer.render();\n if (!this.parent.isAdaptive) {\n this.parent.treeViewModule.render();\n }\n this.parent.axisTableModule.render();\n };\n return Render;\n}());\nexport { Render };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Event, Component, Internationalization, extend } from '@syncfusion/ej2-base';\nimport { L10n, remove, addClass, Browser, Complex } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, removeClass } from '@syncfusion/ej2-base';\nimport { PivotEngine } from '../../base/engine';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { PivotCommon } from '../../common/base/pivot-common';\nimport { Render } from '../renderer/renderer';\nimport { DataSource } from '../../pivotview/model/dataSource';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/**\n * Represents the PivotFieldList component.\n * ```html\n *
    \n * \n * ```\n */\nvar PivotFieldList = /** @class */ (function (_super) {\n __extends(PivotFieldList, _super);\n /**\n * Constructor for creating the widget\n * @param {PivotFieldListModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function PivotFieldList(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n PivotFieldList.prototype.requiredModules = function () {\n var modules = [];\n if (this.allowCalculatedField) {\n modules.push({ args: [this], member: 'calculatedfield' });\n }\n return modules;\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n PivotFieldList.prototype.preRender = function () {\n this.isAdaptive = Browser.isDevice;\n this.globalize = new Internationalization(this.locale);\n this.renderModule = new Render(this);\n this.defaultLocale = {\n staticFieldList: 'Pivot Field List',\n fieldList: 'Field List',\n dropFilterPrompt: 'Drop filter here',\n dropColPrompt: 'Drop column here',\n dropRowPrompt: 'Drop row here',\n dropValPrompt: 'Drop value here',\n addPrompt: 'Add field here',\n adaptiveFieldHeader: 'Choose field',\n centerHeader: 'Drag fields between axes below:',\n add: 'add',\n drag: 'Drag',\n filter: 'Filter',\n filtered: 'Filtered',\n sort: 'Sort',\n remove: 'Remove',\n filters: 'Filters',\n rows: 'Rows',\n columns: 'Columns',\n values: 'Values',\n calculatedField: 'Calculated Field',\n createCalculatedField: 'Create Calculated Field',\n fieldName: 'Enter the field name',\n error: 'Error',\n invalidFormula: 'Invalid formula.',\n dropText: 'Example: (\"Sum(Order_Count)\" + \"Sum(In_Stock)\") * 250',\n dropTextMobile: 'Add fields and edit formula here.',\n dropAction: 'Calculated field cannot be place in any other region except value axis.',\n search: 'Search',\n close: 'Close',\n cancel: 'Cancel',\n delete: 'Delete',\n alert: 'Alert',\n warning: 'Warning',\n ok: 'OK',\n sum: 'Sum',\n average: 'Average',\n count: 'Count',\n min: 'Min',\n max: 'Max',\n allFields: 'All Fields',\n formula: 'Formula',\n fieldExist: 'A field already exists in this name. Please enter a different name.',\n confirmText: 'A calculation field already exists in this name. Do you want to replace it?',\n noMatches: 'No matches',\n format: 'Summaries values by',\n edit: 'Edit',\n clear: 'Clear',\n formulaField: 'Drag and drop fields to formula',\n dragField: 'Drag field to formula',\n clearFilter: 'Clear',\n by: 'by',\n enterValue: 'Enter value',\n chooseDate: 'Enter date',\n /* tslint:disable */\n Equals: 'Equals',\n DoesNotEquals: 'Does Not Equal',\n BeginWith: 'Begins With',\n DoesNotBeginWith: 'Does Not Begin With',\n EndsWith: 'Ends With',\n DoesNotEndsWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContains: 'Does Not Contain',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqualTo: 'Greater Than Or Equal To',\n LessThan: 'Less Than',\n LessThanOrEqualTo: 'Less Than Or Equal To',\n Between: 'Between',\n NotBetween: 'Not Between',\n Before: 'Before',\n BeforeOrEqualTo: 'Before Or Equal To',\n After: 'After',\n AfterOrEqualTo: 'After Or Equal To',\n member: 'Member',\n label: 'Label',\n date: 'Date',\n value: 'Value',\n labelTextContent: 'Show the items for which the label',\n dateTextContent: 'Show the items for which the date',\n valueTextContent: 'Show the items for which',\n And: 'and',\n /* tslint:enable */\n apply: 'APPLY'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.isDragging = false;\n this.captionData = [];\n this.wireEvent();\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n PivotFieldList.prototype.render = function () {\n this.trigger(events.load, { 'dataSource': this.dataSource });\n addClass([this.element], cls.ROOT);\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n if (this.isAdaptive) {\n addClass([this.element], cls.DEVICE);\n }\n else {\n removeClass([this.element], cls.DEVICE);\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass);\n }\n this.notify(events.initialLoad, {});\n };\n /**\n * Binding events to the Pivot Field List element.\n * @hidden\n */\n PivotFieldList.prototype.wireEvent = function () {\n this.on(events.initialLoad, this.generateData, this);\n this.on(events.dataReady, this.fieldListRender, this);\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n PivotFieldList.prototype.unWireEvent = function () {\n if (this.pivotGridModule && this.pivotGridModule.isDestroyed) {\n return;\n }\n this.off(events.initialLoad, this.generateData);\n this.off(events.dataReady, this.fieldListRender);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n * @hidden\n */\n PivotFieldList.prototype.getPersistData = function () {\n var keyEntity = ['dataSource'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n PivotFieldList.prototype.getModuleName = function () {\n return 'pivotfieldlist';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n PivotFieldList.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'locale':\n this.refresh();\n break;\n case 'enableRtl':\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n requireRefresh = true;\n break;\n }\n if (requireRefresh) {\n this.fieldListRender();\n }\n }\n };\n PivotFieldList.prototype.generateData = function () {\n this.pivotFieldList = {};\n if (this.dataSource && this.dataSource.data) {\n this.trigger(events.enginePopulating, { 'dataSource': this.dataSource });\n var pageSettings = this.pivotGridModule ? this.pivotGridModule.pageSettings : undefined;\n var enableValueSorting = this.pivotGridModule ? this.pivotGridModule.enableValueSorting : undefined;\n this.engineModule = new PivotEngine(this.dataSource, '', undefined, pageSettings, enableValueSorting);\n this.pivotFieldList = this.engineModule.fieldList;\n var eventArgs = {\n pivotFieldList: this.pivotFieldList,\n pivotValues: this.engineModule.pivotValues\n };\n this.trigger(events.enginePopulated, eventArgs);\n }\n this.notify(events.dataReady, {});\n this.trigger(events.dataBound);\n };\n PivotFieldList.prototype.fieldListRender = function () {\n this.element.innerHTML = '';\n if (this.renderMode === 'Popup' && this.dialogRenderer.fieldListDialog && !this.dialogRenderer.fieldListDialog.isDestroyed) {\n this.dialogRenderer.fieldListDialog.destroy();\n remove(document.getElementById(this.element.id + '_Wrapper'));\n }\n this.renderModule.render();\n this.fieldListSpinnerElement = this.renderMode === 'Popup' ?\n this.dialogRenderer.fieldListDialog.element : this.element.querySelector('.e-pivotfieldlist-wrapper');\n createSpinner({ target: this.fieldListSpinnerElement }, this.createElement);\n var args = {\n pivotEngine: this.engineModule,\n dataSource: this.dataSource,\n id: this.element.id,\n element: document.getElementById(this.element.id + '_Wrapper'),\n moduleName: this.getModuleName(),\n enableRtl: this.enableRtl,\n isAdaptive: this.isAdaptive,\n renderMode: this.renderMode,\n localeObj: this.localeObj\n };\n this.pivotCommon = new PivotCommon(args);\n };\n PivotFieldList.prototype.getFieldCaption = function (dataSource) {\n this.getFields(dataSource);\n if (this.captionData.length > 0) {\n var lnt = this.captionData.length;\n while (lnt--) {\n if (this.captionData[lnt]) {\n for (var _i = 0, _a = this.captionData[lnt]; _i < _a.length; _i++) {\n var item = _a[_i];\n var obj = item.properties;\n if (obj) {\n if (this.engineModule.fieldList[obj.name] && obj.caption) {\n this.engineModule.fieldList[obj.name].caption = obj.caption;\n }\n else {\n this.engineModule.fieldList[obj.name].caption = obj.name;\n }\n }\n }\n }\n }\n }\n else {\n return;\n }\n };\n PivotFieldList.prototype.getFields = function (dataSource) {\n var fieldSets = extend({}, dataSource, null, true);\n var obj = fieldSets.properties;\n this.captionData = [obj.rows, obj.columns, obj.values, obj.filters];\n };\n /**\n * Updates the PivotEngine using dataSource from Pivot Field List component.\n * @method updateDataSource\n * @return {void}\n * @hidden\n */\n PivotFieldList.prototype.updateDataSource = function (isTreeViewRefresh) {\n if (this.pivotGridModule) {\n showSpinner(this.pivotGridModule.element);\n }\n showSpinner(this.fieldListSpinnerElement);\n var pageSettings = this.pivotGridModule ? this.pivotGridModule.pageSettings : undefined;\n var enableValueSorting = this.pivotGridModule ? this.pivotGridModule.enableValueSorting : undefined;\n this.engineModule = new PivotEngine(this.dataSource, '', this.pivotFieldList, pageSettings, enableValueSorting);\n this.getFieldCaption(this.dataSource);\n var eventArgs = {\n dataSource: this.dataSource,\n pivotFieldList: this.pivotFieldList,\n pivotValues: this.engineModule.pivotValues\n };\n this.trigger(events.enginePopulated, eventArgs);\n this.pivotCommon.engineModule = this.engineModule;\n this.pivotCommon.dataSource = this.dataSource;\n this.pivotFieldList = this.engineModule.fieldList;\n if (!isTreeViewRefresh && this.treeViewModule.fieldTable && !this.isAdaptive) {\n this.notify(events.treeViewUpdate, {});\n }\n this.updateView(this.pivotGridModule);\n if (!this.pivotGridModule) {\n hideSpinner(this.fieldListSpinnerElement);\n }\n else {\n this.pivotGridModule.fieldListSpinnerElement = this.fieldListSpinnerElement;\n }\n };\n /**\n * Updates the Pivot Field List component using dataSource from PivotView component.\n * @method updateControl\n * @return {void}\n * @hidden\n */\n PivotFieldList.prototype.update = function (control) {\n if (control) {\n this.setProperties({ dataSource: control.dataSource }, true);\n this.engineModule = control.engineModule;\n this.pivotFieldList = control.engineModule.fieldList;\n this.pivotGridModule = control;\n this.getFieldCaption(control.dataSource);\n this.pivotCommon.engineModule = this.engineModule;\n this.pivotCommon.dataSource = this.dataSource;\n if (this.treeViewModule.fieldTable && !this.isAdaptive) {\n this.notify(events.treeViewUpdate, {});\n }\n this.axisFieldModule.render();\n }\n };\n /**\n * Updates the PivotView component using dataSource from Pivot Field List component.\n * @method refreshTargetControl\n * @return {void}\n * @hidden\n */\n PivotFieldList.prototype.updateView = function (control) {\n if (control) {\n control.setProperties({ dataSource: this.dataSource }, true);\n control.engineModule = this.engineModule;\n control.pivotValues = this.engineModule.pivotValues;\n control.dataBind();\n }\n };\n /**\n * Destroys the Field Table component.\n * @method destroy\n * @return {void}\n */\n PivotFieldList.prototype.destroy = function () {\n this.unWireEvent();\n if (this.treeViewModule) {\n this.treeViewModule.destroy();\n }\n if (this.pivotButtonModule) {\n this.pivotButtonModule.destroy();\n }\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n removeClass([this.element], cls.ROOT);\n removeClass([this.element], cls.RTL);\n removeClass([this.element], cls.DEVICE);\n if (this.renderMode === 'Popup') {\n if (this.dialogRenderer.fieldListDialog && !this.dialogRenderer.fieldListDialog.isDestroyed) {\n this.dialogRenderer.fieldListDialog.destroy();\n }\n if (document.getElementById(this.element.id + '_Wrapper')) {\n remove(document.getElementById(this.element.id + '_Wrapper'));\n }\n }\n };\n __decorate([\n Complex({}, DataSource)\n ], PivotFieldList.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Popup')\n ], PivotFieldList.prototype, \"renderMode\", void 0);\n __decorate([\n Property()\n ], PivotFieldList.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], PivotFieldList.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], PivotFieldList.prototype, \"allowCalculatedField\", void 0);\n __decorate([\n Property(false)\n ], PivotFieldList.prototype, \"showValuesButton\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"enginePopulating\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"enginePopulated\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"onFieldDropped\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"destroyed\", void 0);\n PivotFieldList = __decorate([\n NotifyPropertyChanges\n ], PivotFieldList);\n return PivotFieldList;\n}(Component));\nexport { PivotFieldList };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { Droppable, createElement, extend, remove, addClass, closest } from '@syncfusion/ej2-base';\nimport { prepend, append, KeyboardEvents, removeClass } from '@syncfusion/ej2-base';\nimport { Button, RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { MaskedTextBox } from '@syncfusion/ej2-inputs';\nimport * as cls from '../../common/base/css-constant';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport * as events from '../../common/base/constant';\nimport { Accordion } from '@syncfusion/ej2-navigations';\n/**\n * Module to render Calculated Field Dialog\n */\nvar COUNT = 'Count';\nvar AVG = 'Avg';\nvar MIN = 'Min';\nvar MAX = 'Max';\nvar SUM = 'Sum';\nvar CALC = 'CalculatedField';\nvar AGRTYPE = 'AggregateType';\n/** @hidden */\nvar CalculatedField = /** @class */ (function () {\n /** Constructor for calculatedfield module */\n function CalculatedField(parent) {\n this.parent = parent;\n this.existingReport = null;\n this.parent.calculatedFieldModule = this;\n this.removeEventListener();\n this.addEventListener();\n this.parentID = this.parent.element.id;\n this.dialog = null;\n this.inputObj = null;\n this.treeObj = null;\n this.droppable = null;\n this.menuObj = null;\n this.newFields = null;\n this.isFieldExist = true;\n this.formulaText = null;\n this.fieldText = null;\n this.isEdit = false;\n this.currentFieldName = null;\n this.confirmPopUp = null;\n }\n /**\n * To get module name.\n * @returns string\n */\n CalculatedField.prototype.getModuleName = function () {\n return 'calculatedfield';\n };\n CalculatedField.prototype.keyActionHandler = function (e) {\n var node = e.currentTarget.querySelector('.e-hover.e-node-focus');\n if (node) {\n switch (e.action) {\n case 'moveRight':\n this.displayMenu(node.previousSibling);\n break;\n case 'enter':\n var field = node.getAttribute('data-field');\n var type = node.getAttribute('data-type');\n var dropField = this.dialog.element.querySelector('#' + this.parentID + 'droppable');\n if (dropField.value === '') {\n if (type === CALC) {\n dropField.value = node.getAttribute('data-uid');\n }\n else {\n dropField.value = '\"' + type + '(' + field + ')' + '\"';\n }\n }\n else if (dropField.value !== '') {\n if (type === CALC) {\n dropField.value = dropField.value + node.getAttribute('data-uid');\n }\n else {\n dropField.value = dropField.value + '\"' + type + '(' + field + ')' + '\"';\n }\n }\n break;\n }\n }\n };\n /**\n * Trigger while click treeview icon.\n * @param {MouseEvent} e\n * @returns void\n */\n CalculatedField.prototype.fieldClickHandler = function (e) {\n var node = e.event.target.parentElement;\n if (e.event.target.classList.contains(cls.FORMAT) ||\n e.event.target.classList.contains(cls.CALC_EDIT) ||\n e.event.target.classList.contains(cls.CALC_EDITED)) {\n this.displayMenu(node.parentElement);\n }\n };\n /**\n * To display context menu.\n * @param {HTMLElement} node\n * @returns void\n */\n CalculatedField.prototype.displayMenu = function (node) {\n if (document.querySelector('.' + this.parentID + 'calculatedmenu') !== null &&\n node.querySelector('.e-list-icon').classList.contains(cls.ICON) &&\n !node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDITED) &&\n !node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDIT) && node.tagName === 'LI') {\n this.menuObj.close();\n this.curMenu = node.querySelector('.' + cls.LIST_TEXT_CLASS);\n this.openContextMenu();\n }\n else if (node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDIT) && node.tagName === 'LI') {\n addClass([node.querySelector('.e-list-icon')], cls.CALC_EDITED);\n removeClass([node.querySelector('.e-list-icon')], cls.CALC_EDIT);\n node.querySelector('.' + cls.CALC_EDITED).setAttribute('title', this.parent.localeObj.getConstant('clear'));\n this.isEdit = true;\n this.currentFieldName = node.getAttribute('data-field');\n this.inputObj.value = node.getAttribute('data-caption');\n this.dialog.element.querySelector('.' + cls.CALCINPUT).value = node.getAttribute('data-caption');\n document.querySelector('#' + this.parentID + 'droppable').value = node.getAttribute('data-uid');\n }\n else if (node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDITED) && node.tagName === 'LI') {\n addClass([node.querySelector('.e-list-icon')], cls.CALC_EDIT);\n removeClass([node.querySelector('.e-list-icon')], cls.CALC_EDITED);\n node.querySelector('.' + cls.CALC_EDIT).setAttribute('title', this.parent.localeObj.getConstant('edit'));\n this.isEdit = false;\n this.inputObj.value = '';\n this.dialog.element.querySelector('.' + cls.CALCINPUT).value = '';\n document.querySelector('#' + this.parentID + 'droppable').value = '';\n }\n };\n /**\n * To set position for context menu.\n * @returns void\n */\n CalculatedField.prototype.openContextMenu = function () {\n var pos = this.curMenu.getBoundingClientRect();\n if (this.parent.enableRtl) {\n this.menuObj.open(pos.top + 30, pos.left - 100);\n }\n else {\n this.menuObj.open(pos.top + 30, pos.left + 150);\n }\n };\n /**\n * Triggers while select menu.\n * @param {MenuEventArgs} menu\n * @returns void\n */\n CalculatedField.prototype.selectContextMenu = function (menu) {\n if (menu.element.textContent !== null) {\n var field = closest(this.curMenu, '.e-list-item').getAttribute('data-caption');\n closest(this.curMenu, '.e-list-item').setAttribute('data-type', menu.element.textContent);\n this.curMenu.textContent = field + ' (' + menu.element.textContent + ')';\n addClass([this.curMenu.parentElement.parentElement], ['e-node-focus', 'e-hover']);\n this.curMenu.parentElement.parentElement.setAttribute('tabindex', '-1');\n this.curMenu.parentElement.parentElement.focus();\n }\n };\n /**\n * To create context menu.\n * @returns void\n */\n CalculatedField.prototype.createMenu = function () {\n var menuItems = [\n {\n text: COUNT,\n },\n {\n text: AVG\n },\n {\n text: MIN\n },\n {\n text: MAX\n },\n {\n text: SUM\n }\n ];\n var menuOptions = {\n cssClass: this.parentID + 'calculatedmenu',\n items: menuItems,\n enableRtl: this.parent.enableRtl,\n beforeOpen: this.beforeMenuOpen.bind(this),\n select: this.selectContextMenu.bind(this)\n };\n this.parent.element.appendChild(createElement('ul', {\n id: this.parentID + 'contextmenu'\n }));\n this.menuObj = new Menu(menuOptions);\n this.menuObj.appendTo('#' + this.parentID + 'contextmenu');\n };\n /**\n * Triggers while click OK button.\n * @returns void\n */\n CalculatedField.prototype.applyFormula = function () {\n var currentObj = this;\n var isExist = false;\n removeClass([document.getElementById(this.parentID + 'ddlelement')], cls.EMPTY_FIELD);\n Object.keys(currentObj.parent.engineModule.fieldList).forEach(function (key, index) {\n if (currentObj.inputObj.value && currentObj.inputObj.value === key &&\n currentObj.parent.engineModule.fieldList[key].aggregateType !== 'CalculatedField') {\n isExist = true;\n }\n });\n if (isExist) {\n currentObj.parent.pivotCommon.errorDialog.createErrorDialog(currentObj.parent.localeObj.getConstant('error'), currentObj.parent.localeObj.getConstant('fieldExist'));\n return;\n }\n this.newFields = extend([], this.parent.dataSource.calculatedFieldSettings, null, true);\n this.existingReport = extend({}, this.parent.dataSource, null, true);\n var report = this.parent.dataSource;\n var dropField = document.querySelector('#' + this.parentID + 'droppable');\n if (this.inputObj.value !== null && this.inputObj.value !== '' && dropField.value !== '') {\n var field = {\n name: this.inputObj.value,\n type: 'CalculatedField'\n };\n var cField = {\n name: this.inputObj.value,\n formula: dropField.value\n };\n this.isFieldExist = true;\n if (!this.isEdit) {\n for (var i = 0; i < report.values.length; i++) {\n if (report.values[i].type === CALC && report.values[i].name === field.name) {\n for (var j = 0; j < report.calculatedFieldSettings.length; j++) {\n if (report.calculatedFieldSettings[j].name === field.name) {\n this.createConfirmDialog(currentObj.parent.localeObj.getConstant('alert'), currentObj.parent.localeObj.getConstant('confirmText'));\n return;\n }\n }\n this.isFieldExist = false;\n }\n }\n }\n else {\n for (var i = 0; i < report.values.length; i++) {\n if (report.values[i].type === CALC && this.currentFieldName !== null &&\n report.values[i].name === this.currentFieldName && this.isEdit) {\n for (var j = 0; j < report.calculatedFieldSettings.length; j++) {\n if (report.calculatedFieldSettings[j].name === this.currentFieldName) {\n report.values[i].caption = this.inputObj.value;\n report.calculatedFieldSettings[j].formula = dropField.value;\n this.parent.engineModule.fieldList[this.currentFieldName].caption = this.inputObj.value;\n this.isFieldExist = false;\n }\n }\n }\n }\n }\n if (this.isFieldExist) {\n report.values.push(field);\n report.calculatedFieldSettings.push(cField);\n }\n this.addFormula(report, field.name);\n }\n else {\n if (this.inputObj.value === null || this.inputObj.value === '') {\n addClass([document.getElementById(this.parentID + 'ddlelement')], cls.EMPTY_FIELD);\n document.getElementById(this.parentID + 'ddlelement').focus();\n }\n else {\n this.parent.pivotCommon.errorDialog.createErrorDialog(this.parent.localeObj.getConstant('error'), this.parent.localeObj.getConstant('invalidFormula'));\n }\n }\n };\n CalculatedField.prototype.addFormula = function (report, field) {\n try {\n this.parent.setProperties({ dataSource: report }, true);\n this.parent.updateDataSource(false);\n this.isEdit = false;\n if (this.dialog) {\n this.dialog.close();\n }\n else {\n this.inputObj.value = '';\n this.formulaText = null;\n this.fieldText = null;\n this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.CALCINPUT).value = '';\n this.parent.\n dialogRenderer.parentElement.querySelector('#' + this.parentID + 'droppable').value = '';\n }\n }\n catch (exception) {\n if (this.parent.engineModule.fieldList[field]) {\n delete this.parent.engineModule.fieldList[field];\n }\n this.parent.pivotCommon.errorDialog.createErrorDialog(this.parent.localeObj.getConstant('error'), this.parent.localeObj.getConstant('invalidFormula'));\n this.parent.setProperties({ dataSource: this.existingReport }, true);\n this.parent.updateDataSource(false);\n }\n };\n /**\n * To get treeview data\n * @param {PivotGrid|PivotFieldList} parent\n * @returns Object\n */\n CalculatedField.prototype.getFieldListData = function (parent) {\n var fields = [];\n Object.keys(parent.engineModule.fieldList).forEach(function (key) {\n var type = null;\n if (parent.engineModule.fieldList[key].type === 'string' || parent.engineModule.fieldList[key].type === 'include' ||\n parent.engineModule.fieldList[key].type === 'exclude') {\n type = COUNT;\n }\n else {\n type = parent.engineModule.fieldList[key].aggregateType !== undefined ?\n parent.engineModule.fieldList[key].aggregateType : SUM;\n }\n fields.push({\n index: parent.engineModule.fieldList[key].index,\n name: parent.engineModule.fieldList[key].caption + ' (' + type + ')',\n type: type,\n icon: cls.FORMAT + ' ' + cls.ICON,\n formula: parent.engineModule.fieldList[key].formula,\n field: key,\n caption: parent.engineModule.fieldList[key].caption ? parent.engineModule.fieldList[key].caption : key\n });\n });\n return fields;\n };\n /**\n * Triggers before menu opens.\n * @param {BeforeOpenCloseMenuEventArgs} args\n * @returns void\n */\n CalculatedField.prototype.beforeMenuOpen = function (args) {\n args.element.style.zIndex = (this.dialog.zIndex + 1).toString();\n args.element.style.display = 'inline';\n };\n /**\n * Trigger while drop node in formula field.\n * @param {DragAndDropEventArgs} args\n * @returns void\n */\n CalculatedField.prototype.fieldDropped = function (args) {\n args.cancel = true;\n var field = args.draggedNode.getAttribute('data-field');\n var type = args.draggedNode.getAttribute('data-type');\n var dropField = this.dialog.element.querySelector('#' + this.parentID + 'droppable');\n if (args.target.id === this.parentID + 'droppable' && dropField.value === '') {\n if (type === CALC) {\n dropField.value = args.draggedNodeData.id.toString();\n }\n else {\n dropField.value = '\"' + type + '(' + field + ')' + '\"';\n }\n dropField.focus();\n }\n else if (args.target.id === (this.parentID + 'droppable') && dropField.value !== '') {\n var textCovered = void 0;\n var cursorPos = dropField.selectionStart;\n var currentValue = dropField.value;\n var textBeforeText = currentValue.substring(0, cursorPos);\n var textAfterText = currentValue.substring(cursorPos, currentValue.length);\n if (type === CALC) {\n textCovered = textBeforeText + args.draggedNodeData.id.toString();\n dropField.value = textBeforeText + args.draggedNodeData.id.toString() + textAfterText;\n }\n else {\n textCovered = textBeforeText + '\"' + type + '(' + field + ')' + '\"';\n dropField.value = textBeforeText + '\"' + type + '(' + field + ')' + '\"' + textAfterText;\n }\n dropField.focus();\n dropField.setSelectionRange(textCovered.length, textCovered.length);\n }\n else {\n args.cancel = true;\n }\n };\n /**\n * To create dialog.\n * @returns void\n */\n CalculatedField.prototype.createDialog = function () {\n var _this = this;\n if (document.querySelector('#' + this.parentID + 'calculateddialog') !== null) {\n remove(document.querySelector('#' + this.parentID + 'calculateddialog'));\n }\n this.parent.element.appendChild(createElement('div', {\n id: this.parentID + 'calculateddialog',\n className: cls.CALCDIALOG\n }));\n this.dialog = new Dialog({\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n 'click': function () { return _this.applyFormula(); },\n buttonModel: {\n content: this.parent.localeObj.getConstant('ok'),\n isPrimary: true\n }\n },\n {\n 'click': function () {\n _this.dialog.close();\n _this.isEdit = false;\n },\n buttonModel: {\n content: this.parent.localeObj.getConstant('cancel')\n }\n }\n ],\n close: function (args) {\n if (_this.parent.getModuleName() === 'pivotfieldlist') {\n _this.parent.axisFieldModule.render();\n if (_this.parent.renderMode !== 'Fixed') {\n addClass([_this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n _this.parent.dialogRenderer.fieldListDialog.show();\n }\n }\n _this.treeObj.destroy();\n _this.dialog.destroy();\n _this.newFields = null;\n remove(document.getElementById(_this.parentID + 'calculateddialog'));\n remove(document.querySelector('.' + _this.parentID + 'calculatedmenu'));\n },\n beforeOpen: function (args) {\n _this.dialog.element.querySelector('.e-dlg-header').\n setAttribute('title', _this.parent.localeObj.getConstant('createCalculatedField'));\n },\n animationSettings: { effect: 'Zoom' },\n width: '25%',\n isModal: false,\n closeOnEscape: true,\n enableRtl: this.parent.enableRtl,\n showCloseIcon: true,\n header: this.parent.localeObj.getConstant('createCalculatedField'),\n target: document.body\n });\n this.dialog.appendTo('#' + this.parentID + 'calculateddialog');\n };\n /**\n * To render dialog elements.\n * @returns void\n */\n CalculatedField.prototype.renderDialogElements = function () {\n var outerDiv = createElement('div', { id: this.parentID + 'outerDiv', className: cls.CALCOUTERDIV });\n if (this.parent.getModuleName() === 'pivotfieldlist' && this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.FORMULA) !== null && this.parent.isAdaptive) {\n var accordDiv = createElement('div', { id: this.parentID + 'accordDiv', className: cls.CALCACCORD });\n outerDiv.appendChild(accordDiv);\n var buttonDiv = createElement('div', { id: this.parentID + 'buttonDiv', className: cls.CALCBUTTONDIV });\n var addBtn = createElement('button', {\n id: this.parentID + 'addBtn', innerHTML: 'ADD',\n className: cls.CALCADDBTN\n });\n var cancelBtn = createElement('button', {\n id: this.parentID + 'cancelBtn', innerHTML: 'CANCEL',\n className: cls.CALCCANCELBTN\n });\n buttonDiv.appendChild(cancelBtn);\n buttonDiv.appendChild(addBtn);\n outerDiv.appendChild(buttonDiv);\n }\n else {\n var inputDiv = createElement('div', { id: this.parentID + 'outerDiv', className: cls.CALCINPUTDIV });\n var inputObj = createElement('input', {\n id: this.parentID + 'ddlelement',\n attrs: { 'type': 'text', 'tabindex': '1' },\n className: cls.CALCINPUT\n });\n inputDiv.appendChild(inputObj);\n outerDiv.appendChild(inputDiv);\n if (!this.parent.isAdaptive) {\n var fieldTitle = createElement('div', {\n className: cls.PIVOT_ALL_FIELD_TITLE_CLASS,\n innerHTML: this.parent.localeObj.getConstant('formulaField')\n });\n outerDiv.appendChild(fieldTitle);\n }\n var wrapDiv = createElement('div', { id: this.parentID + 'control_wrapper', className: cls.TREEVIEWOUTER });\n wrapDiv.appendChild(createElement('div', { id: this.parentID + 'tree', className: cls.TREEVIEW }));\n outerDiv.appendChild(wrapDiv);\n if (!this.parent.isAdaptive) {\n var formulaTitle = createElement('div', {\n className: cls.PIVOT_FORMULA_TITLE_CLASS,\n innerHTML: this.parent.localeObj.getConstant('formula')\n });\n outerDiv.appendChild(formulaTitle);\n }\n var dropDiv = createElement('textarea', {\n id: this.parentID + 'droppable',\n className: cls.FORMULA,\n attrs: {\n 'placeholder': this.parent.isAdaptive ? this.parent.localeObj.getConstant('dropTextMobile') :\n this.parent.localeObj.getConstant('dropText')\n }\n });\n outerDiv.appendChild(dropDiv);\n if (this.parent.isAdaptive) {\n var buttonDiv = createElement('div', { id: this.parentID + 'buttonDiv', className: cls.CALCBUTTONDIV });\n var okBtn = createElement('button', {\n id: this.parentID + 'okBtn', innerHTML: this.parent.localeObj.getConstant('apply'),\n className: cls.CALCOKBTN\n });\n buttonDiv.appendChild(okBtn);\n outerDiv.appendChild(buttonDiv);\n }\n }\n return outerDiv;\n };\n /**\n * To create calculated field adaptive layout.\n * @returns void\n */\n CalculatedField.prototype.renderAdaptiveLayout = function () {\n if (document.querySelector('#' + this.parentID + 'droppable')) {\n this.formulaText = document.querySelector('#' + this.parentID + 'droppable').value;\n this.fieldText = this.inputObj.value;\n }\n this.renderMobileLayout(this.parent.dialogRenderer.adaptiveElement);\n };\n /**\n * To create treeview.\n * @returns void\n */\n CalculatedField.prototype.createTreeView = function () {\n var _this = this;\n this.treeObj = new TreeView({\n fields: { dataSource: this.getFieldListData(this.parent), id: 'formula', text: 'name', iconCss: 'icon' },\n allowDragAndDrop: true,\n enableRtl: this.parent.enableRtl,\n nodeCollapsing: function (args) {\n args.cancel = true;\n },\n nodeDragStart: function (args) {\n if (args.event.target.classList.contains(cls.DRAG_CLASS)) {\n var dragItem = document.querySelector('.e-drag-item.e-treeview');\n addClass([dragItem], cls.PIVOTCALC);\n dragItem.style.zIndex = (_this.dialog.zIndex + 1).toString();\n dragItem.style.display = 'inline';\n }\n else {\n args.cancel = true;\n }\n },\n nodeClicked: this.fieldClickHandler.bind(this),\n nodeDragStop: this.fieldDropped.bind(this),\n drawNode: this.drawTreeNode.bind(this),\n sortOrder: 'Ascending'\n });\n this.treeObj.appendTo('#' + this.parentID + 'tree');\n };\n /**\n * Trigger before treeview text append.\n * @param {DrawNodeEventArgs} args\n * @returns void\n */\n CalculatedField.prototype.drawTreeNode = function (args) {\n var field = args.nodeData.field;\n args.node.setAttribute('data-field', field);\n args.node.setAttribute('data-caption', args.nodeData.caption);\n args.node.setAttribute('data-type', args.nodeData.type);\n var dragElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false', 'title': this.parent.localeObj.getConstant('dragField') },\n className: cls.ICON + ' e-drag'\n });\n prepend([dragElement], args.node.querySelector('.' + cls.TEXT_CONTENT_CLASS));\n append([args.node.querySelector('.' + cls.FORMAT)], args.node.querySelector('.' + cls.TEXT_CONTENT_CLASS));\n if (this.parent.engineModule.fieldList[field].type !== 'number' &&\n this.parent.engineModule.fieldList[field].aggregateType !== CALC) {\n removeClass([args.node.querySelector('.' + cls.FORMAT)], cls.ICON);\n }\n else {\n args.node.querySelector('.' + cls.FORMAT).setAttribute('title', this.parent.localeObj.getConstant('format'));\n }\n if (this.parent.engineModule.fieldList[field].aggregateType === CALC) {\n args.node.querySelector('.' + cls.FORMAT).setAttribute('title', this.parent.localeObj.getConstant('edit'));\n addClass([args.node.querySelector('.' + cls.FORMAT)], cls.CALC_EDIT);\n removeClass([args.node.querySelector('.' + cls.FORMAT)], cls.FORMAT);\n }\n };\n /**\n * To create radio buttons.\n * @param {string} key\n * @returns HTMLElement\n */\n CalculatedField.prototype.createTypeContainer = function (key) {\n var wrapDiv = createElement('div', { id: this.parentID + 'control_wrapper', className: cls.TREEVIEWOUTER });\n var type = [SUM, COUNT, AVG, MIN, MAX];\n for (var i = 0; i < 5; i++) {\n var input = createElement('input', {\n id: this.parentID + 'radio' + key + type[i],\n attrs: { 'type': 'radio', 'data-ftxt': key },\n className: cls.CALCRADIO\n });\n wrapDiv.appendChild(input);\n }\n return wrapDiv;\n };\n /**\n * To get Accordion Data.\n * @param {PivotView | PivotFieldList} parent\n * @returns AccordionItemModel\n */\n CalculatedField.prototype.getAccordionData = function (parent) {\n var _this = this;\n var data = [];\n Object.keys(parent.engineModule.fieldList).forEach(function (key, index) {\n data.push({\n header: '',\n content: parent.engineModule.fieldList[key].aggregateType === CALC ||\n _this.parent.engineModule.fieldList[key].type !== 'number' ? '' : _this.createTypeContainer(key).outerHTML\n });\n });\n return data;\n };\n /**\n * To render mobile layout.\n * @param {Tab} tabObj\n * @returns void\n */\n CalculatedField.prototype.renderMobileLayout = function (tabObj) {\n var _this = this;\n tabObj.items[4].content = this.renderDialogElements().outerHTML;\n tabObj.dataBind();\n var cancelBtn = new Button({ cssClass: cls.FLAT, isPrimary: true });\n cancelBtn.appendTo('#' + this.parentID + 'cancelBtn');\n if (cancelBtn.element) {\n cancelBtn.element.onclick = this.cancelBtnClick.bind(this);\n }\n if (this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.FORMULA) !== null && this.parent.isAdaptive) {\n var okBtn = new Button({ cssClass: cls.FLAT + ' ' + cls.OUTLINE_CLASS, isPrimary: true });\n okBtn.appendTo('#' + this.parentID + 'okBtn');\n this.inputObj = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('fieldName')\n });\n this.inputObj.appendTo('#' + this.parentID + 'ddlelement');\n if (this.formulaText !== null && this.parent.\n dialogRenderer.parentElement.querySelector('#' + this.parentID + 'droppable') !== null) {\n var drop = this.parent.\n dialogRenderer.parentElement.querySelector('#' + this.parentID + 'droppable');\n drop.value = this.formulaText;\n }\n if (this.fieldText !== null && this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.CALCINPUT) !== null) {\n this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.CALCINPUT).value = this.fieldText;\n this.inputObj.value = this.fieldText;\n }\n if (okBtn.element) {\n okBtn.element.onclick = this.applyFormula.bind(this);\n }\n }\n else if (this.parent.isAdaptive) {\n var accordion = new Accordion({\n items: this.getAccordionData(this.parent),\n enableRtl: this.parent.enableRtl,\n expanding: function (args) {\n if (args.element.querySelectorAll('.e-radio-wrapper').length === 0) {\n Object.keys(_this.parent.engineModule.fieldList).forEach(function (key) {\n var type = [SUM, COUNT, AVG, MIN, MAX];\n var radiobutton;\n if (key === args.element.querySelector('[data-field').getAttribute('data-field')) {\n for (var i = 0; i < 5; i++) {\n radiobutton = new RadioButton({\n label: type[i],\n name: AGRTYPE + key,\n change: function (args) {\n var type = args.event.target.parentElement.querySelector('.e-label').\n innerText;\n var field = args.event.target.closest('.e-acrdn-item').\n querySelector('[data-field').getAttribute('data-caption');\n args.event.target.\n closest('.e-acrdn-item').querySelector('.e-label').\n innerText = field + ' (' + type + ')';\n args.event.target.closest('.e-acrdn-item').\n querySelector('[data-type').setAttribute('data-type', type);\n },\n });\n radiobutton.appendTo('#' + _this.parentID + 'radio' + key + type[i]);\n }\n }\n });\n }\n },\n });\n var addBtn = new Button({ cssClass: cls.FLAT, isPrimary: true });\n addBtn.appendTo('#' + this.parentID + 'addBtn');\n accordion.appendTo('#' + this.parentID + 'accordDiv');\n Object.keys(this.parent.engineModule.fieldList).forEach(function (key, index) {\n var type = null;\n if (_this.parent.engineModule.fieldList[key].type === 'string' ||\n _this.parent.engineModule.fieldList[key].type === 'include' ||\n _this.parent.engineModule.fieldList[key].type === 'exclude') {\n type = COUNT;\n }\n else {\n type = _this.parent.engineModule.fieldList[key].aggregateType !== undefined ?\n _this.parent.engineModule.fieldList[key].aggregateType : SUM;\n }\n var checkbox = new CheckBox({\n label: _this.parent.engineModule.fieldList[key].caption + ' (' + type + ')'\n });\n checkbox.appendTo('#' + _this.parentID + '_' + index);\n document.querySelector('#' + _this.parentID + '_' + index).setAttribute('data-field', key);\n document.querySelector('#' + _this.parentID + '_' + index).setAttribute('data-type', type);\n });\n if (addBtn.element) {\n addBtn.element.onclick = this.addBtnClick.bind(this);\n }\n }\n };\n /**\n * Trigger while click cancel button.\n * @returns void\n */\n CalculatedField.prototype.cancelBtnClick = function () {\n this.renderMobileLayout(this.parent.dialogRenderer.adaptiveElement);\n };\n /**\n * Trigger while click add button.\n * @returns void\n */\n CalculatedField.prototype.addBtnClick = function () {\n var node = document.querySelectorAll('.e-accordion .e-check');\n var fieldText = '';\n var field = null;\n var type = null;\n for (var i = 0; i < node.length; i++) {\n field = node[i].parentElement.querySelector('[data-field]').getAttribute('data-field');\n type = node[i].parentElement.querySelector('[data-field]').getAttribute('data-type');\n if (type.indexOf(CALC) === -1) {\n fieldText = fieldText + ('\"' + type + '(' + field + ')' + '\"');\n }\n else {\n for (var j = 0; j < this.parent.dataSource.calculatedFieldSettings.length; j++) {\n if (this.parent.dataSource.calculatedFieldSettings[j].name === field) {\n fieldText = fieldText + this.parent.dataSource.calculatedFieldSettings[j].formula;\n break;\n }\n }\n }\n }\n this.formulaText = this.formulaText !== null ? (this.formulaText + fieldText) : fieldText;\n this.renderMobileLayout(this.parent.dialogRenderer.adaptiveElement);\n };\n /**\n * To create calculated field dialog elements.\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.createCalculatedFieldDialog = function () {\n if (this.parent.isAdaptive && this.parent.getModuleName() === 'pivotfieldlist') {\n this.renderAdaptiveLayout();\n }\n else if (!this.parent.isAdaptive) {\n this.renderDialogLayout();\n this.dialog.element.style.top = parseInt(this.dialog.element.style.top, 10) < 0 ? '0px' : this.dialog.element.style.top;\n }\n };\n /**\n * To create calculated field desktop layout.\n * @returns void\n */\n CalculatedField.prototype.renderDialogLayout = function () {\n this.newFields = extend([], this.parent.dataSource.calculatedFieldSettings, null, true);\n this.createDialog();\n this.dialog.content = this.renderDialogElements();\n this.dialog.refresh();\n this.inputObj = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('fieldName')\n });\n this.inputObj.appendTo('#' + this.parentID + 'ddlelement');\n this.createTreeView();\n this.createMenu();\n this.droppable = new Droppable(this.dialog.element.querySelector('#' + this.parentID + 'droppable'));\n this.keyboardEvents = new KeyboardEvents(this.parent.calculatedFieldModule.dialog.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: { moveRight: 'rightarrow', enter: 'enter' },\n eventName: 'keydown'\n });\n };\n /**\n * Creates the error dialog for the unexpected action done.\n * @method createConfirmDialog\n * @return {void}\n * @hidden\n */\n CalculatedField.prototype.createConfirmDialog = function (title, description) {\n var errorDialog = createElement('div', {\n id: this.parentID + '_ErrorDialog',\n className: cls.ERROR_DIALOG_CLASS\n });\n this.parent.element.appendChild(errorDialog);\n this.confirmPopUp = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: false,\n showCloseIcon: true,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: 'auto',\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n click: this.replaceFormula.bind(this),\n buttonModel: {\n cssClass: cls.OK_BUTTON_CLASS + ' ' + cls.OUTLINE_CLASS,\n content: this.parent.localeObj.getConstant('ok'), isPrimary: true\n }\n },\n {\n click: this.removeErrorDialog.bind(this),\n buttonModel: {\n cssClass: cls.CANCEL_BUTTON_CLASS,\n content: this.parent.localeObj.getConstant('cancel'), isPrimary: true\n }\n }\n ],\n header: title,\n content: description,\n isModal: true,\n visible: true,\n closeOnEscape: true,\n target: document.body,\n close: this.removeErrorDialog.bind(this)\n });\n this.confirmPopUp.appendTo(errorDialog);\n };\n CalculatedField.prototype.replaceFormula = function () {\n var report = this.parent.dataSource;\n var dropField = document.querySelector('#' + this.parentID + 'droppable');\n for (var i = 0; i < report.values.length; i++) {\n if (report.values[i].type === CALC && report.values[i].name === this.inputObj.value) {\n for (var j = 0; j < report.calculatedFieldSettings.length; j++) {\n if (report.calculatedFieldSettings[j].name === this.inputObj.value) {\n report.calculatedFieldSettings[j].formula = dropField.value;\n }\n }\n }\n }\n this.addFormula(report, this.inputObj.value);\n this.removeErrorDialog();\n };\n CalculatedField.prototype.removeErrorDialog = function () {\n if (document.getElementById(this.parentID + '_ErrorDialog')) {\n remove(document.getElementById(this.parentID + '_ErrorDialog').parentElement);\n }\n };\n /**\n * To add event listener.\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initCalculatedField, this.createCalculatedFieldDialog, this);\n };\n /**\n * To remove event listener.\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initCalculatedField, this.createCalculatedFieldDialog);\n };\n /**\n * To destroy the calculated field dialog\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.destroy = function () {\n this.removeEventListener();\n };\n return CalculatedField;\n}());\nexport { CalculatedField };\n","import * as events from '../../common/base/constant';\nimport * as cls from '../base/css-constant';\nimport { PivotFieldList } from '../../field-list/base/field-list';\nimport { createElement, setStyleAttribute, formatUnit, prepend, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { CalculatedField } from '../../common/calculatedfield/calculated-field';\nPivotFieldList.Inject(CalculatedField);\n/**\n * Module for Field List rendering\n */\n/** @hidden */\nvar FieldList = /** @class */ (function () {\n /** Constructor for Field List module */\n function FieldList(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n FieldList.prototype.getModuleName = function () {\n return 'fieldlist';\n };\n FieldList.prototype.initiateModule = function () {\n this.element = createElement('div', {\n id: this.parent.element.id + '_PivotFieldList',\n styles: 'position:' + (this.parent.enableRtl ? 'static' : 'absolute') + ';height:0;width:' + this.parent.element.style.width\n });\n this.parent.element.parentElement.setAttribute('id', 'ContainerWrapper');\n this.parent.element.parentElement.appendChild(this.element);\n this.parent.element.parentElement.appendChild(this.parent.element);\n this.parent.pivotFieldListModule = new PivotFieldList({\n dataSource: {\n rows: [],\n columns: [],\n values: [],\n filters: []\n },\n renderMode: 'Popup',\n allowCalculatedField: this.parent.allowCalculatedField,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: this.parent.element.parentElement\n });\n this.parent.pivotFieldListModule.appendTo('#' + this.element.id);\n };\n FieldList.prototype.updateControl = function () {\n var _this = this;\n if (this.element) {\n prepend([this.element], this.parent.element);\n if (this.parent.grid && this.parent.showGroupingBar && this.parent.groupingBarModule) {\n clearTimeout(this.timeOutObj);\n this.timeOutObj = setTimeout(function () {\n if (_this.parent.grid && _this.parent.grid.element) {\n setStyleAttribute(_this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS), {\n left: formatUnit(_this.parent.enableRtl ?\n -Math.abs((_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n _this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth) :\n (_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n _this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth)\n });\n if (_this.parent.enableRtl) {\n addClass([_this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n else {\n removeClass([_this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n }\n });\n }\n else {\n if (this.parent.enableRtl) {\n removeClass([this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n else {\n addClass([this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n }\n setStyleAttribute(this.element, {\n width: formatUnit(this.parent.element.offsetWidth)\n });\n }\n this.parent.pivotFieldListModule.update(this.parent);\n };\n /**\n * @hidden\n */\n FieldList.prototype.addEventListener = function () {\n this.handlers = {\n load: this.initiateModule,\n update: this.updateControl\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initSubComponent, this.handlers.load, this);\n this.parent.on(events.uiUpdate, this.handlers.update, this);\n };\n /**\n * @hidden\n */\n FieldList.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initSubComponent, this.handlers.load);\n this.parent.off(events.uiUpdate, this.handlers.update);\n };\n /**\n * To destroy the Field List\n * @return {void}\n * @hidden\n */\n FieldList.prototype.destroy = function () {\n this.removeEventListener();\n if (this.parent.pivotFieldListModule) {\n this.parent.pivotFieldListModule.destroy();\n }\n else {\n return;\n }\n };\n return FieldList;\n}());\nexport { FieldList };\n","import * as events from '../../common/base/constant';\nimport { PivotCommon } from '../../common/base/pivot-common';\nimport { Browser } from '@syncfusion/ej2-base';\n/**\n * Module for PivotCommon rendering\n */\n/** @hidden */\nvar Common = /** @class */ (function () {\n /** Constructor for Common module */\n function Common(parent) {\n this.parent = parent;\n this.parent.commonModule = this;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Common.prototype.getModuleName = function () {\n return 'common';\n };\n Common.prototype.initiateCommonModule = function () {\n if (!this.parent.pivotCommon) {\n var args = {\n pivotEngine: this.parent.engineModule,\n dataSource: this.parent.dataSource.properties ?\n this.parent.dataSource.properties : this.parent.dataSource,\n id: this.parent.element.id,\n element: this.parent.element,\n moduleName: this.parent.getModuleName(),\n enableRtl: this.parent.enableRtl,\n isAdaptive: Browser.isDevice,\n renderMode: 'Popup',\n localeObj: this.parent.localeObj\n };\n this.parent.pivotCommon = new PivotCommon(args);\n }\n else {\n this.parent.pivotCommon.element = this.parent.element;\n this.parent.pivotCommon.engineModule = this.parent.engineModule;\n this.parent.pivotCommon.parentID = this.parent.element.id;\n this.parent.pivotCommon.dataSource = this.parent.dataSource.properties ?\n this.parent.dataSource.properties : this.parent.dataSource;\n this.parent.pivotCommon.moduleName = this.parent.getModuleName();\n this.parent.pivotCommon.enableRtl = this.parent.enableRtl;\n this.parent.pivotCommon.isAdaptive = Browser.isDevice;\n this.parent.pivotCommon.renderMode = 'Popup';\n this.parent.pivotCommon.localeObj = this.parent.localeObj;\n }\n };\n /**\n * @hidden\n */\n Common.prototype.addEventListener = function () {\n this.handlers = {\n load: this.initiateCommonModule\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.handlers.load, this);\n };\n /**\n * @hidden\n */\n Common.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.handlers.load);\n };\n /**\n * To destroy the groupingbar\n * @return {void}\n * @hidden\n */\n Common.prototype.destroy = function () {\n this.removeEventListener();\n if (this.parent.pivotCommon) {\n this.parent.pivotCommon.destroy();\n }\n };\n return Common;\n}());\nexport { Common };\n","import { PivotButton } from '../actions/pivot-button';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { createElement, prepend } from '@syncfusion/ej2-base';\n/**\n * Module to render Axis Fields\n */\n/** @hidden */\nvar AxisFields = /** @class */ (function () {\n /** Constructor for render module */\n function AxisFields(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the pivot button rendering\n * @returns void\n * @private\n */\n AxisFields.prototype.render = function () {\n this.pivotButton = new PivotButton(this.parent);\n this.createPivotButtons();\n var pivotButtons = [].slice.call(this.parent.element.querySelector('.' + cls.GROUP_ROW_CLASS)\n .querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS));\n var vlen = pivotButtons.length;\n for (var j = 0; j < vlen; j++) {\n var indentWidth = 24;\n var indentDiv = createElement('span', {\n className: 'e-indent-div',\n styles: 'width:' + j * indentWidth + 'px'\n });\n prepend([indentDiv], pivotButtons[j]);\n }\n };\n AxisFields.prototype.createPivotButtons = function () {\n var fields = [this.parent.dataSource.rows, this.parent.dataSource.columns, this.parent.dataSource.values, this.parent.dataSource.filters];\n this.parent.element.querySelector('.' + cls.GROUP_ROW_CLASS).innerHTML = '';\n this.parent.element.querySelector('.' + cls.GROUP_COLUMN_CLASS).innerHTML = '';\n this.parent.element.querySelector('.' + cls.GROUP_VALUE_CLASS).innerHTML = '';\n this.parent.element.querySelector('.' + cls.GROUP_FILTER_CLASS).innerHTML = '';\n var axis = ['rows', 'columns', 'values', 'filters'];\n var count = axis.length;\n for (var i = 0, lnt = fields.length; i < lnt; i++) {\n if (fields[i]) {\n var args = {\n field: fields[i],\n axis: axis[i].toString()\n };\n this.parent.notify(events.pivotButtonUpdate, args);\n }\n }\n };\n return AxisFields;\n}());\nexport { AxisFields };\n","import { createElement, prepend, remove, Droppable, setStyleAttribute, removeClass } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, formatUnit } from '@syncfusion/ej2-base';\nimport { PivotView } from '../../pivotview/base/pivotview';\nimport { Common } from '../actions/common';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { AxisFields } from './axis-field-renderer';\nPivotView.Inject(Common);\n/**\n * Module for GroupingBar rendering\n */\n/** @hidden */\nvar GroupingBar = /** @class */ (function () {\n /** Constructor for GroupingBar module */\n function GroupingBar(parent) {\n this.parent = parent;\n this.parent.groupingBarModule = this;\n this.addEventListener();\n this.parent.axisFieldModule = new AxisFields(this.parent);\n this.touchObj = new Touch(this.parent.element, {\n tapHold: this.tapHoldHandler.bind(this)\n });\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n GroupingBar.prototype.getModuleName = function () {\n return 'grouping';\n };\n GroupingBar.prototype.renderLayout = function () {\n this.groupingTable = createElement('div', { className: cls.GROUPING_BAR_CLASS });\n this.leftAxisPanel = createElement('div', { className: cls.LEFT_AXIS_PANEL_CLASS });\n this.rightAxisPanel = createElement('div', { className: cls.RIGHT_AXIS_PANEL_CLASS });\n var rowAxisPanel = createElement('div', { className: cls.AXIS_ROW_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper' });\n var columnAxisPanel = createElement('div', {\n className: cls.AXIS_COLUMN_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper'\n });\n var valueAxisPanel = createElement('div', {\n className: cls.AXIS_VALUE_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper'\n });\n var filterAxisPanel = createElement('div', {\n className: cls.AXIS_FILTER_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper'\n });\n this.rowPanel = createElement('div', { className: cls.GROUP_ROW_CLASS + ' ' + cls.ROW_AXIS_CLASS });\n this.columnPanel = createElement('div', { className: cls.GROUP_COLUMN_CLASS + ' ' + cls.COLUMN_AXIS_CLASS });\n this.valuePanel = createElement('div', { className: cls.GROUP_VALUE_CLASS + ' ' + cls.VALUE_AXIS_CLASS });\n this.filterPanel = createElement('div', { className: cls.GROUP_FILTER_CLASS + ' ' + cls.FILTER_AXIS_CLASS });\n rowAxisPanel.appendChild(this.rowPanel);\n columnAxisPanel.appendChild(this.columnPanel);\n valueAxisPanel.appendChild(this.valuePanel);\n filterAxisPanel.appendChild(this.filterPanel);\n this.rowAxisPanel = rowAxisPanel;\n this.columnAxisPanel = columnAxisPanel;\n this.valueAxisPanel = valueAxisPanel;\n this.filterAxisPanel = filterAxisPanel;\n this.leftAxisPanel.appendChild(valueAxisPanel);\n this.leftAxisPanel.appendChild(rowAxisPanel);\n this.rightAxisPanel.appendChild(filterAxisPanel);\n this.rightAxisPanel.appendChild(columnAxisPanel);\n this.groupingTable.appendChild(this.leftAxisPanel);\n this.groupingTable.appendChild(this.rightAxisPanel);\n var axisPanels = [this.rowPanel, this.columnPanel, this.valuePanel, this.filterPanel];\n for (var _i = 0, axisPanels_1 = axisPanels; _i < axisPanels_1.length; _i++) {\n var element = axisPanels_1[_i];\n new Droppable(element, {});\n this.unWireEvent(element);\n this.wireEvent(element);\n }\n };\n GroupingBar.prototype.appendToElement = function () {\n if (this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {\n remove(this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS));\n }\n var colGroupElement = this.parent.element.querySelector('.e-frozenheader').querySelector('colgroup').children[0];\n this.filterPanel.removeAttribute('style');\n this.columnPanel.removeAttribute('style');\n this.rowPanel.removeAttribute('style');\n this.filterPanel.removeAttribute('style');\n var emptyRowCount = Object.keys(this.parent.engineModule.headerContent).length;\n if (emptyRowCount) {\n var emptyHeader = this.parent.element.querySelector('.e-frozenheader').querySelector('.e-columnheader');\n addClass([emptyHeader], 'e-row');\n emptyHeader.removeAttribute('style');\n addClass([emptyHeader.querySelector('.e-headercell')], 'e-group-row');\n emptyHeader.querySelector('.e-group-row').appendChild(this.rowAxisPanel);\n emptyHeader.querySelector('.e-group-row').querySelector('.e-headercelldiv').style.display = 'none';\n emptyHeader.querySelector('.e-group-row').querySelector('.e-sortfilterdiv').style.display = 'none';\n }\n prepend([this.groupingTable], this.parent.element);\n setStyleAttribute(this.groupingTable, { width: formatUnit(this.parent.isAdaptive ? 500 : this.parent.grid.width) });\n this.parent.axisFieldModule.render();\n this.setGridRowWidth();\n var rightAxisPanelWidth = formatUnit(this.groupingTable.offsetWidth - parseInt(colGroupElement.style.width, 10));\n setStyleAttribute(this.valuePanel, { width: colGroupElement.style.width });\n setStyleAttribute(this.rightAxisPanel, { width: rightAxisPanelWidth });\n var rightPanelHeight = (this.valuePanel.offsetHeight / 2);\n if (rightPanelHeight > this.columnPanel.offsetHeight) {\n setStyleAttribute(this.filterPanel, { height: formatUnit(rightPanelHeight) });\n setStyleAttribute(this.columnPanel, { height: formatUnit(rightPanelHeight + 1) });\n }\n var topLeftHeight = this.parent.element.querySelector('.e-headercontent').offsetHeight;\n setStyleAttribute(this.rowPanel, {\n height: topLeftHeight + 'px'\n });\n this.parent.element.querySelector('.e-frozenheader').querySelector('.e-rhandler').style.height =\n topLeftHeight + 'px';\n var colRows = [].slice.call(this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('tr'));\n var columnRows = colRows.filter(function (trCell) {\n return (trCell.childNodes.length > 0);\n });\n var colHeight = topLeftHeight / columnRows.length;\n for (var _i = 0, columnRows_1 = columnRows; _i < columnRows_1.length; _i++) {\n var element = columnRows_1[_i];\n setStyleAttribute(element, { 'height': colHeight + 'px' });\n var rowHeader = [].slice.call(element.querySelectorAll('.e-rhandler'));\n for (var _a = 0, rowHeader_1 = rowHeader; _a < rowHeader_1.length; _a++) {\n var rhElement = rowHeader_1[_a];\n setStyleAttribute(rhElement, { 'height': colHeight + 'px' });\n }\n }\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.refreshUI = function () {\n var _this = this;\n setStyleAttribute(this.groupingTable, { width: formatUnit(this.parent.isAdaptive ? 500 : this.parent.grid.width) });\n var colGroupElement = this.parent.element.querySelector('.e-frozenheader').querySelector('colgroup').children[0];\n var rightAxisWidth = formatUnit(this.groupingTable.offsetWidth - parseInt(colGroupElement.style.width, 10));\n setStyleAttribute(this.valuePanel, { width: colGroupElement.style.width });\n setStyleAttribute(this.rightAxisPanel, { width: rightAxisWidth });\n if (this.parent.showFieldList && this.parent.pivotFieldListModule && this.parent.pivotFieldListModule.element) {\n var element_1 = this.parent.pivotFieldListModule.element;\n clearTimeout(this.timeOutObj);\n this.timeOutObj = setTimeout(function () {\n setStyleAttribute(element_1.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS), {\n left: formatUnit(_this.parent.enableRtl ?\n -Math.abs((_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n element_1.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth) :\n (_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n element_1.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth)\n });\n });\n }\n if (!this.parent.grid.element.querySelector('.e-group-row')) {\n var emptyRowHeader = this.parent.element.querySelector('.e-frozenheader').querySelector('.e-columnheader');\n addClass([emptyRowHeader], 'e-row');\n addClass([emptyRowHeader.querySelector('.e-headercell')], 'e-group-row');\n emptyRowHeader.querySelector('.e-group-row').appendChild(this.rowAxisPanel);\n setStyleAttribute(emptyRowHeader.querySelector('.e-group-row').querySelector('.e-headercelldiv'), {\n display: 'none'\n });\n setStyleAttribute(emptyRowHeader.querySelector('.e-group-row').querySelector('.e-sortfilterdiv'), {\n display: 'none'\n });\n var groupHeight = this.parent.element.querySelector('.e-headercontent').offsetHeight;\n setStyleAttribute(this.rowPanel, {\n height: groupHeight + 'px'\n });\n this.parent.element.querySelector('.e-frozenheader').querySelector('.e-rhandler').style.height =\n groupHeight + 'px';\n var colRowElements = [].slice.call(this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('tr'));\n var columnRows = colRowElements.filter(function (trCell) {\n return (trCell.childNodes.length > 0);\n });\n var colHeight = groupHeight / columnRows.length;\n for (var _i = 0, columnRows_2 = columnRows; _i < columnRows_2.length; _i++) {\n var element = columnRows_2[_i];\n setStyleAttribute(element, { 'height': colHeight + 'px' });\n var rowHeader = [].slice.call(element.querySelectorAll('.e-rhandler'));\n for (var _a = 0, rowHeader_2 = rowHeader; _a < rowHeader_2.length; _a++) {\n var handlerElement = rowHeader_2[_a];\n setStyleAttribute(handlerElement, { 'height': colHeight + 'px' });\n }\n }\n }\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.setGridRowWidth = function () {\n var colGroupElement = this.parent.element.querySelector('.e-frozenheader').querySelector('colgroup').children[0];\n if (this.rowPanel.querySelector('.' + cls.PIVOT_BUTTON_CLASS) && !this.parent.isAdaptive) {\n var pivotButtons = [].slice.call(this.rowPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS));\n var lastButton = pivotButtons[pivotButtons.length - 1];\n var lastButtonWidth = (lastButton.querySelector('.' + cls.PIVOT_BUTTON_CLASS).offsetWidth +\n lastButton.querySelector('.e-indent-div').offsetWidth + 20);\n var buttonWidth = formatUnit(lastButtonWidth < 250 ? 250 : lastButtonWidth);\n var rowHeaderTable = this.parent.element.querySelector('.e-frozenheader').querySelector('table');\n var rowContentTable = this.parent.element.querySelector('.e-frozencontent').querySelector('table');\n var rowContent = this.parent.element.querySelector('.e-frozencontent').querySelector('colgroup').children[0];\n var colwidth = parseInt(buttonWidth, 10);\n var gridColumn = this.parent.grid.columns;\n if (gridColumn && gridColumn.length > 0) {\n gridColumn[0].width = (gridColumn[0].width >= 250 ? (colwidth > 250 ? colwidth : 250) : (colwidth > 250 ? colwidth : 250));\n }\n var valueColWidth = this.parent.renderModule.calculateColWidth(this.parent.dataSource.values.length > 0 ?\n this.parent.engineModule.pivotValues[0].length : 2);\n for (var cCnt = 0; cCnt < gridColumn.length; cCnt++) {\n if (cCnt !== 0) {\n if (gridColumn[cCnt].columns) {\n this.setColWidth(gridColumn[cCnt].columns, valueColWidth);\n }\n else {\n gridColumn[cCnt].width = valueColWidth;\n }\n }\n }\n this.parent.grid.headerModule.refreshUI();\n colGroupElement.style.width = buttonWidth;\n rowContent.style.width = buttonWidth;\n rowHeaderTable.style.width = buttonWidth;\n rowContentTable.style.width = buttonWidth;\n setStyleAttribute(rowHeaderTable, { 'width': buttonWidth });\n setStyleAttribute(rowContentTable, { 'width': buttonWidth });\n }\n this.refreshUI();\n };\n GroupingBar.prototype.setColWidth = function (columns, width) {\n for (var cCnt = 0; cCnt < columns.length; cCnt++) {\n if (columns[cCnt].columns) {\n this.setColWidth(columns[cCnt].columns, width);\n }\n else {\n columns[cCnt].width = width;\n }\n }\n };\n GroupingBar.prototype.wireEvent = function (element) {\n EventHandler.add(element, 'mouseover', this.dropIndicatorUpdate, this);\n EventHandler.add(element, 'mouseleave', this.dropIndicatorUpdate, this);\n };\n GroupingBar.prototype.unWireEvent = function (element) {\n EventHandler.remove(element, 'mouseover', this.dropIndicatorUpdate);\n EventHandler.remove(element, 'mouseleave', this.dropIndicatorUpdate);\n };\n GroupingBar.prototype.dropIndicatorUpdate = function (e) {\n if ((this.parent.isDragging && e.target.classList.contains(cls.DROPPABLE_CLASS) && e.type === 'mouseover') ||\n e.type === 'mouseleave') {\n removeClass([].slice.call(this.parent.element.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(this.parent.element.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n }\n };\n GroupingBar.prototype.tapHoldHandler = function (e) {\n var target = closest(e.originalEvent.target, '.' + cls.PIVOT_BUTTON_CLASS);\n if (!isNullOrUndefined(target) && this.parent.isAdaptive) {\n var pos = target.getBoundingClientRect();\n this.parent.contextMenuModule.fieldElement = target;\n this.parent.contextMenuModule.menuObj.open(pos.top, pos.left);\n return;\n }\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.addEventListener = function () {\n this.handlers = {\n load: this.renderLayout,\n end: this.appendToElement,\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initSubComponent, this.handlers.load, this); //For initial rendering\n this.parent.on(events.uiUpdate, this.handlers.end, this);\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initSubComponent, this.handlers.end);\n this.parent.off(events.uiUpdate, this.handlers.load);\n };\n /**\n * To destroy the groupingbar\n * @return {void}\n * @hidden\n */\n GroupingBar.prototype.destroy = function () {\n this.removeEventListener();\n if (this.parent.pivotButtonModule) {\n this.parent.pivotButtonModule.destroy();\n if (this.touchObj && !this.touchObj.isDestroyed) {\n this.touchObj.destroy();\n }\n }\n else {\n return;\n }\n };\n return GroupingBar;\n}());\nexport { GroupingBar };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { isNullOrUndefined as isNaN, createElement, extend, remove, addClass } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport * as cls from '../../common/base/css-constant';\n/**\n * Module to render Conditional Formatting Dialog\n */\n/** @hidden */\nvar ConditionalFormatting = /** @class */ (function () {\n /** Constructor for conditionalformatting module */\n function ConditionalFormatting(parent) {\n this.parent = parent;\n this.parent.conditionalFormattingModule = this;\n this.parentID = this.parent.element.id;\n this.dialog = null;\n this.fieldsDropDown = [];\n this.conditionsDropDown = [];\n this.fontNameDropDown = [];\n this.fontSizeDropDown = [];\n this.fontColor = [];\n this.backgroundColor = [];\n this.newFormat = [];\n }\n /**\n * To get module name.\n * @returns string\n */\n ConditionalFormatting.prototype.getModuleName = function () {\n return 'conditionalformatting';\n };\n ConditionalFormatting.prototype.createDialog = function () {\n var _this = this;\n if (document.querySelector('#' + this.parentID + 'conditionalformatting') !== null) {\n remove(document.querySelector('#' + this.parentID + 'conditionalformatting'));\n }\n this.parent.element.appendChild(createElement('div', {\n id: this.parentID + 'conditionalformatting',\n }));\n var buttonModel = [\n {\n 'click': function () {\n var format = {\n conditions: 'LessThan',\n value1: 0,\n style: {\n backgroundColor: 'white',\n color: 'black',\n fontFamily: 'Arial',\n fontSize: '12px'\n }\n };\n _this.refreshConditionValues();\n _this.newFormat.push(format);\n _this.addFormat();\n },\n buttonModel: {\n cssClass: this.parent.isAdaptive ? (cls.FORMAT_ROUND_BUTTON + ' ' + cls.FORMAT_CONDITION_BUTTON) :\n cls.FORMAT_CONDITION_BUTTON,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n content: this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('condition'),\n }\n },\n {\n 'click': function () {\n _this.refreshConditionValues();\n _this.parent.setProperties({ dataSource: { conditionalFormatSettings: _this.newFormat } }, true);\n _this.parent.renderPivotGrid();\n _this.destroy();\n },\n buttonModel: {\n cssClass: cls.FLAT_CLASS + ' ' + cls.FORMAT_APPLY_BUTTON,\n content: this.parent.localeObj.getConstant('apply')\n }\n },\n {\n 'click': function () {\n _this.destroy();\n _this.newFormat = [];\n },\n buttonModel: {\n cssClass: cls.FLAT_CLASS + ' ' + cls.FORMAT_CANCEL_BUTTON,\n content: this.parent.localeObj.getConstant('cancel')\n }\n }\n ];\n if (this.parent.isAdaptive) {\n this.dialog = new Dialog({\n animationSettings: { effect: 'Zoom' }, isModal: true, width: '100%', height: '100%',\n showCloseIcon: false, closeOnEscape: false, enableRtl: this.parent.enableRtl,\n position: { X: 'center', Y: 'center' }, allowDragging: true, buttons: buttonModel,\n beforeOpen: function (args) {\n _this.dialog.element.querySelector('.' + cls.DIALOG_HEADER).\n setAttribute('title', _this.parent.localeObj.getConstant('conditionalFormating'));\n },\n cssClass: cls.FORMAT_DIALOG, header: this.parent.localeObj.getConstant('conditionalFormating'), target: document.body\n });\n }\n else {\n this.dialog = new Dialog({\n allowDragging: true, position: { X: 'center', Y: this.parent.element.offsetTop }, buttons: buttonModel,\n beforeOpen: function (args) {\n _this.dialog.element.querySelector('.' + cls.DIALOG_HEADER).\n setAttribute('title', _this.parent.localeObj.getConstant('conditionalFormating'));\n },\n cssClass: cls.FORMAT_DIALOG, isModal: false, closeOnEscape: true, enableRtl: this.parent.enableRtl,\n showCloseIcon: true, header: this.parent.localeObj.getConstant('conditionalFormating'), target: this.parent.element\n });\n }\n this.dialog.appendTo('#' + this.parentID + 'conditionalformatting');\n };\n ConditionalFormatting.prototype.refreshConditionValues = function () {\n for (var i = 0; i < this.newFormat.length; i++) {\n this.newFormat[i].value1 =\n Number(document.querySelector('#' + this.parentID + 'conditionvalue1' + i).value);\n this.newFormat[i].value2 =\n Number(document.querySelector('#' + this.parentID + 'conditionvalue2' + i).value);\n }\n };\n ConditionalFormatting.prototype.addFormat = function () {\n var format = createElement('div', { id: this.parentID + 'formatDiv', className: cls.FORMAT_NEW });\n for (var i = 0; i < this.newFormat.length; i++) {\n format.appendChild(this.createDialogElements(i));\n }\n this.dialog.setProperties({ 'content': format }, false);\n for (var i = 0; i < this.newFormat.length; i++) {\n this.renderDropDowns(i);\n this.renderColorPicker(i);\n }\n };\n ConditionalFormatting.prototype.createDialogElements = function (i) {\n var format = this.newFormat[i];\n var outerDiv = createElement('div', {\n id: this.parentID + 'outerDiv' + i, className: cls.FORMAT_OUTER\n });\n var button = createElement('button', {\n id: this.parentID + 'removeButton' + i, className: cls.FORMAT_DELETE_BUTTON,\n attrs: { 'title': this.parent.localeObj.getConstant('delete') }\n });\n outerDiv.appendChild(button);\n var innerDiv = createElement('div', { id: this.parentID + 'innerDiv', className: cls.FORMAT_INNER });\n var table = createElement('table', { id: this.parentID + 'cftable', className: cls.FORMAT_TABLE });\n var tRow = createElement('tr');\n var td = createElement('td');\n var valuelabel = createElement('span', {\n id: this.parentID + 'valuelabel' + i, className: cls.FORMAT_VALUE_LABEL,\n innerHTML: this.parent.localeObj.getConstant('value')\n });\n td.appendChild(valuelabel);\n tRow.appendChild(td);\n table.appendChild(tRow);\n tRow = createElement('tr');\n td = createElement('td');\n var measureDropdown = createElement('div', { id: this.parentID + 'measure' + i });\n var measureInput = createElement('input', {\n id: this.parentID + 'measureinput' + i,\n attrs: { 'type': 'text', 'tabindex': '1' }\n });\n measureDropdown.appendChild(measureInput);\n td.appendChild(measureDropdown);\n tRow.appendChild(td);\n td = createElement('td');\n var conditionDropdown = createElement('div', { id: this.parentID + 'condition' });\n var conditionInput = createElement('input', {\n id: this.parentID + 'conditioninput' + i,\n attrs: { 'type': 'text', 'tabindex': '1' }\n });\n conditionDropdown.appendChild(conditionInput);\n td.appendChild(conditionDropdown);\n tRow.appendChild(td);\n td = createElement('td');\n var style = !(format.conditions === 'Between' || format.conditions === 'NotBetween') ? 'display:none; width:10px' : '';\n var value1 = createElement('input', {\n id: this.parentID + 'conditionvalue1' + i,\n attrs: { 'type': 'text', 'tabindex': '1', 'value': !isNaN(format.value1) ? format.value1.toString() : '0' },\n styles: this.parent.isAdaptive ? style === '' ? 'width: 28%' : 'width: 100%' : style === '' ? 'width: 45px' : 'width: 120px',\n className: cls.INPUT + ' ' + cls.FORMAT_VALUE1\n });\n td.appendChild(value1);\n var valuespan = createElement('span', {\n id: this.parentID + 'valuespan' + i, className: cls.FORMAT_VALUE_SPAN,\n innerHTML: '&', styles: style\n });\n td.appendChild(valuespan);\n var value2 = createElement('input', {\n id: this.parentID + 'conditionvalue2' + i,\n attrs: { 'type': 'text', 'tabindex': '1', 'value': !isNaN(format.value2) ? format.value2.toString() : '0' },\n styles: (this.parent.isAdaptive && style === '') ? 'width: 28%' : style === '' ? 'width: 45px' : style,\n className: cls.INPUT + ' ' + cls.FORMAT_VALUE2\n });\n td.appendChild(value2);\n tRow.appendChild(td);\n table.appendChild(tRow);\n if (this.parent.isAdaptive) {\n innerDiv.appendChild(table);\n table = createElement('table', { id: this.parentID + 'cftable', className: cls.FORMAT_TABLE });\n }\n tRow = createElement('tr');\n td = createElement('td');\n var formatlabel = createElement('span', {\n id: this.parentID + 'formatlabel' + i, className: cls.FORMAT_LABEL, innerHTML: this.parent.localeObj.getConstant('formatLabel')\n });\n td.appendChild(formatlabel);\n tRow.appendChild(td);\n table.appendChild(tRow);\n tRow = createElement('tr');\n td = createElement('td');\n var fontNameDropdown = createElement('div', { id: this.parentID + 'fontname' });\n var fontNameInput = createElement('input', {\n id: this.parentID + 'fontnameinput' + i, attrs: { 'type': 'text', 'tabindex': '1' }\n });\n fontNameDropdown.appendChild(fontNameInput);\n td.appendChild(fontNameDropdown);\n tRow.appendChild(td);\n td = createElement('td');\n var fontSizeDropdown = createElement('div', { id: this.parentID + 'fontsize' });\n var fontSizeInput = createElement('input', {\n id: this.parentID + 'fontsizeinput' + i, attrs: { 'type': 'text', 'tabindex': '1' }\n });\n fontSizeDropdown.appendChild(fontSizeInput);\n td.appendChild(fontSizeDropdown);\n tRow.appendChild(td);\n if (this.parent.isAdaptive) {\n table.appendChild(tRow);\n tRow = createElement('tr');\n table.appendChild(tRow);\n tRow = createElement('tr');\n }\n td = createElement('td');\n var colorPicker1 = createElement('input', {\n id: this.parentID + 'fontcolor' + i, attrs: { 'type': 'color', 'tabindex': '1' }, className: cls.FORMAT_FONT_COLOR\n });\n td.appendChild(colorPicker1);\n var colorPicker2 = createElement('input', {\n id: this.parentID + 'backgroundcolor' + i, attrs: { 'type': 'color', 'tabindex': '1' }, className: cls.FORMAT_BACK_COLOR\n });\n td.appendChild(colorPicker2);\n tRow.appendChild(td);\n td = createElement('td');\n var valuePreview = createElement('div', {\n id: this.parentID + 'valuepreview' + i, className: cls.INPUT + ' ' + cls.FORMAT_VALUE_PREVIEW,\n innerHTML: '123.45',\n });\n td.appendChild(valuePreview);\n tRow.appendChild(td);\n table.appendChild(tRow);\n innerDiv.appendChild(table);\n outerDiv.appendChild(innerDiv);\n return outerDiv;\n };\n ConditionalFormatting.prototype.renderDropDowns = function (i) {\n var _this = this;\n var format = this.newFormat[i];\n var fields = [];\n fields.push({\n index: 0, name: this.parent.localeObj.getConstant('AllValues'),\n field: this.parent.localeObj.getConstant('AllValues')\n });\n for (var i_1 = 0; i_1 < this.parent.dataSource.values.length; i_1++) {\n fields.push({\n index: i_1 + 1,\n name: this.parent.dataSource.values[i_1].caption || this.parent.dataSource.values[i_1].name,\n field: this.parent.dataSource.values[i_1].name\n });\n }\n var value = isNaN(format.measure) ? this.parent.localeObj.getConstant('AllValues') : format.measure;\n this.fieldsDropDown[i] = new DropDownList({\n dataSource: fields, fields: { text: 'name' },\n value: value, width: this.parent.isAdaptive ? '100%' : '120px',\n popupHeight: '200px',\n change: function (args) {\n _this.newFormat[i].measure = args.value.toString() === _this.parent.localeObj.getConstant('AllValues') ?\n undefined : args.value.toString();\n }\n });\n this.fieldsDropDown[i].appendTo('#' + this.parentID + 'measureinput' + i);\n var conditions = [\n { value: 'LessThan', name: this.parent.localeObj.getConstant('LessThan') },\n { value: 'LessThanOrEqualTo', name: this.parent.localeObj.getConstant('LessThanOrEqualTo') },\n { value: 'GreaterThan', name: this.parent.localeObj.getConstant('GreaterThan') },\n { value: 'GreaterThanOrEqualTo', name: this.parent.localeObj.getConstant('GreaterThanOrEqualTo') },\n { value: 'Equals', name: this.parent.localeObj.getConstant('Equals') },\n { value: 'NotEquals', name: this.parent.localeObj.getConstant('NotEquals') },\n { value: 'Between', name: this.parent.localeObj.getConstant('Between') },\n { value: 'NotBetween', name: this.parent.localeObj.getConstant('NotBetween') }\n ];\n value = isNaN(format.conditions) ? 'LessThan' : format.conditions;\n this.conditionsDropDown[i] = new DropDownList({\n dataSource: conditions, fields: { value: 'value', text: 'name' },\n value: value, width: this.parent.isAdaptive ? '100%' : '120px',\n popupHeight: '200px', popupWidth: '200px',\n change: function (args) {\n _this.newFormat[i].conditions = args.value;\n if (args.value === 'Between' || args.value === 'NotBetween') {\n document.querySelector('#' + _this.parentID + 'valuespan' + i).style.display = 'inline-block';\n document.querySelector('#' + _this.parentID + 'valuespan' + i).style.width =\n _this.parent.isAdaptive ? '10%' : '10px';\n document.querySelector('#' + _this.parentID + 'conditionvalue2' + i).style.display = 'inline-block';\n document.querySelector('#' + _this.parentID + 'conditionvalue2' + i).style.width =\n _this.parent.isAdaptive ? '28%' : '45px';\n document.querySelector('#' + _this.parentID + 'conditionvalue1' + i).style.width =\n _this.parent.isAdaptive ? '28%' : '45px';\n }\n else {\n document.querySelector('#' + _this.parentID + 'valuespan' + i).style.display = 'none';\n document.querySelector('#' + _this.parentID + 'conditionvalue2' + i).style.display = 'none';\n document.querySelector('#' + _this.parentID + 'conditionvalue1' + i).style.width =\n _this.parent.isAdaptive ? '100%' : '120px';\n }\n }\n });\n this.conditionsDropDown[i].appendTo('#' + this.parentID + 'conditioninput' + i);\n var fontNames = [\n { index: 0, name: 'Arial' }, { index: 1, name: 'San Serif' }, { index: 2, name: 'Impact' },\n { index: 3, name: 'Trebuchet MS' }, { index: 4, name: 'Serif' }, { index: 5, name: 'Verdana' },\n { index: 6, name: 'Courier New' }, { index: 7, name: 'Times New Roman' }, { index: 8, name: 'Tahoma' },\n { index: 9, name: 'Gerogia' }\n ];\n value = isNaN(format.style.fontFamily) ? 'Arial' : format.style.fontFamily;\n this.fontNameDropDown[i] = new DropDownList({\n dataSource: fontNames, fields: { text: 'name' },\n value: value, width: this.parent.isAdaptive ? '100%' : '120px',\n popupWidth: '150px', popupHeight: '200px',\n change: function (args) {\n _this.newFormat[i].style.fontFamily = args.value.toString();\n document.querySelector('#' + _this.parentID + 'valuepreview' + i).style.fontFamily = args.value;\n }\n });\n this.fontNameDropDown[i].appendTo('#' + this.parentID + 'fontnameinput' + i);\n var fontSize = [\n { index: 0, name: '9px' }, { index: 1, name: '10px' }, { index: 2, name: '11px' }, { index: 3, name: '12px' },\n { index: 4, name: '13px' }, { index: 5, name: '14px' }, { index: 6, name: '15px' }, { index: 6, name: '16px' }\n ];\n value = isNaN(format.style.fontSize) ? '12px' : format.style.fontSize;\n this.fontSizeDropDown[i] = new DropDownList({\n dataSource: fontSize, fields: { text: 'name' }, popupHeight: '200px',\n value: value, width: this.parent.isAdaptive ? '100%' : '120px',\n change: function (args) {\n _this.newFormat[i].style.fontSize = args.value.toString();\n document.querySelector('#' + _this.parentID + 'valuepreview' + i).style.fontSize = args.value;\n }\n });\n this.fontSizeDropDown[i].appendTo('#' + this.parentID + 'fontsizeinput' + i);\n };\n ConditionalFormatting.prototype.renderColorPicker = function (i) {\n var _this = this;\n var format = this.newFormat[i];\n var value = isNaN(format.style.color) ? 'black' : format.style.color;\n var color = this.isHex(value.substr(1)) ? value : this.colourNameToHex(value);\n document.querySelector('#' + this.parentID + 'valuepreview' + i).style.color = color;\n this.fontColor[i] = new ColorPicker({\n cssClass: cls.FORMAT_COLOR_PICKER, value: color, mode: 'Palette',\n change: function (args) {\n _this.newFormat[i].style.color = args.currentValue.hex;\n document.querySelector('#' + _this.parentID + 'valuepreview' + i).style.color =\n args.currentValue.hex;\n }\n });\n this.fontColor[i].appendTo('#' + this.parentID + 'fontcolor' + i);\n addClass([this.fontColor[i].element.nextElementSibling.querySelector('.' + cls.SELECTED_COLOR)], cls.ICON);\n value = isNaN(format.style.backgroundColor) ? 'white' : format.style.backgroundColor;\n color = this.isHex(value.substr(1)) ? value : this.colourNameToHex(value);\n document.querySelector('#' + this.parentID + 'valuepreview' + i).style.backgroundColor = color;\n document.querySelector('#' + this.parentID + 'valuepreview' + i).style.fontFamily = format.style.fontFamily;\n document.querySelector('#' + this.parentID + 'valuepreview' + i).style.fontSize = format.style.fontSize;\n this.backgroundColor[i] = new ColorPicker({\n cssClass: cls.FORMAT_COLOR_PICKER, value: color, mode: 'Palette',\n change: function (args) {\n _this.newFormat[i].style.backgroundColor = args.currentValue.hex;\n document.querySelector('#' + _this.parentID + 'valuepreview' + i).style.backgroundColor =\n args.currentValue.hex;\n }\n });\n this.backgroundColor[i].appendTo('#' + this.parentID + 'backgroundcolor' + i);\n addClass([this.backgroundColor[i].element.nextElementSibling.querySelector('.e-selected-color')], cls.ICON);\n var toggleBtn = new Button({\n iconCss: cls.ICON + ' ' + cls.FORMAT_DELETE_ICON,\n cssClass: cls.FLAT\n });\n toggleBtn.appendTo('#' + this.parentID + 'removeButton' + i);\n toggleBtn.element.onclick = function () {\n _this.newFormat.splice(i, 1);\n _this.addFormat();\n };\n };\n ConditionalFormatting.prototype.isHex = function (h) {\n var a = parseInt(h, 16);\n while (h.charAt(0) === '0') {\n h = h.substr(1);\n }\n return (a.toString(16) === h.toLowerCase() || (a === 0 && h === ''));\n };\n ConditionalFormatting.prototype.hexToRgb = function (hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n };\n ConditionalFormatting.prototype.colourNameToHex = function (colour) {\n var colours = {\n 'aliceblue': '#f0f8ff', 'antiquewhite': '#faebd7', 'aqua': '#00ffff', 'aquamarine': '#7fffd4',\n 'azure': '#f0ffff', 'beige': '#f5f5dc', 'bisque': '#ffe4c4', 'black': '#000000',\n 'blanchedalmond': '#ffebcd', 'blue': '#0000ff',\n 'blueviolet': '#8a2be2', 'brown': '#a52a2a', 'burlywood': '#deb887', 'cadetblue': '#5f9ea0',\n 'chartreuse': '#7fff00', 'chocolate': '#d2691e',\n 'coral': '#ff7f50', 'cornflowerblue': '#6495ed', 'cornsilk': '#fff8dc', 'crimson': '#dc143c', 'cyan': '#00ffff',\n 'darkblue': '#00008b', 'darkcyan': '#008b8b', 'darkgoldenrod': '#b8860b', 'darkgray': '#a9a9a9', 'darkgreen': '#006400',\n 'darkkhaki': '#bdb76b', 'darkmagenta': '#8b008b', 'darkolivegreen': '#556b2f',\n 'darkorange': '#ff8c00', 'darkorchid': '#9932cc', 'darkred': '#8b0000', 'darksalmon': '#e9967a', 'darkseagreen': '#8fbc8f',\n 'darkslateblue': '#483d8b', 'darkslategray': '#2f4f4f', 'darkturquoise': '#00ced1',\n 'darkviolet': '#9400d3', 'deeppink': '#ff1493', 'deepskyblue': '#00bfff', 'dimgray': '#696969', 'dodgerblue': '#1e90ff',\n 'firebrick': '#b22222', 'floralwhite': '#fffaf0', 'forestgreen': '#228b22', 'fuchsia': '#ff00ff',\n 'gainsboro': '#dcdcdc', 'ghostwhite': '#f8f8ff', 'gold': '#ffd700', 'goldenrod': '#daa520',\n 'gray': '#808080', 'green': '#008000',\n 'greenyellow': '#adff2f', 'honeydew': '#f0fff0', 'hotpink': '#ff69b4', 'indianred ': '#cd5c5c',\n 'indigo': '#4b0082', 'ivory': '#fffff0',\n 'khaki': '#f0e68c', 'lavender': '#e6e6fa', 'lavenderblush': '#fff0f5', 'lawngreen': '#7cfc00', 'lemonchiffon': '#fffacd',\n 'lightblue': '#add8e6', 'lightcoral': '#f08080', 'lightcyan': '#e0ffff', 'lightgoldenrodyellow': '#fafad2',\n 'lightgrey': '#d3d3d3', 'lightgreen': '#90ee90', 'lightpink': '#ffb6c1', 'lightsalmon': '#ffa07a', 'lightseagreen': '#20b2aa',\n 'lightskyblue': '#87cefa', 'lightslategray': '#778899', 'lightsteelblue': '#b0c4de',\n 'lightyellow': '#ffffe0', 'lime': '#00ff00', 'limegreen': '#32cd32', 'linen': '#faf0e6',\n 'magenta': '#ff00ff', 'maroon': '#800000', 'mediumaquamarine': '#66cdaa', 'mediumblue': '#0000cd', 'mediumorchid': '#ba55d3',\n 'mediumpurple': '#9370d8', 'mediumseagreen': '#3cb371', 'mediumslateblue': '#7b68ee',\n 'mediumspringgreen': '#00fa9a', 'mediumturquoise': '#48d1cc', 'mediumvioletred': '#c71585', 'midnightblue': '#191970',\n 'mintcream': '#f5fffa', 'mistyrose': '#ffe4e1', 'moccasin': '#ffe4b5', 'navajowhite': '#ffdead', 'navy': '#000080',\n 'oldlace': '#fdf5e6', 'olive': '#808000', 'olivedrab': '#6b8e23', 'orange': '#ffa500', 'orangered': '#ff4500',\n 'orchid': '#da70d6',\n 'palegoldenrod': '#eee8aa', 'palegreen': '#98fb98', 'paleturquoise': '#afeeee', 'palevioletred': '#d87093',\n 'papayawhip': '#ffefd5',\n 'peachpuff': '#ffdab9', 'peru': '#cd853f', 'pink': '#ffc0cb', 'plum': '#dda0dd', 'powderblue': '#b0e0e6', 'purple': '#800080',\n 'rebeccapurple': '#663399', 'red': '#ff0000', 'rosybrown': '#bc8f8f', 'royalblue': '#4169e1',\n 'saddlebrown': '#8b4513', 'salmon': '#fa8072', 'sandybrown': '#f4a460', 'seagreen': '#2e8b57',\n 'seashell': '#fff5ee', 'sienna': '#a0522d',\n 'silver': '#c0c0c0', 'skyblue': '#87ceeb', 'slateblue': '#6a5acd', 'slategray': '#708090', 'snow': '#fffafa',\n 'springgreen': '#00ff7f',\n 'steelblue': '#4682b4', 'tan': '#d2b48c', 'teal': '#008080', 'thistle': '#d8bfd8', 'tomato': '#ff6347', 'turquoise': '#40e0d0',\n 'violet': '#ee82ee', 'wheat': '#f5deb3', 'white': '#ffffff', 'whitesmoke': '#f5f5f5', 'yellow': '#ffff00',\n 'yellowgreen': '#9acd32'\n };\n if (typeof colours[colour.toLowerCase()] !== 'undefined') {\n return colours[colour.toLowerCase()];\n }\n return '#d5d5d5';\n };\n /**\n * To create Conditional Formatting dialog.\n * @returns void\n * @hidden\n */\n ConditionalFormatting.prototype.showConditionalFormattingDialog = function () {\n this.newFormat = [];\n for (var i = 0; i < this.parent.dataSource.conditionalFormatSettings.length; i++) {\n this.newFormat.push(extend({}, this.parent.dataSource.conditionalFormatSettings[i].properties, null, true));\n }\n this.createDialog();\n this.dialog.refresh();\n this.addFormat();\n };\n /**\n * To destroy the Conditional Formatting dialog\n * @returns void\n * @hidden\n */\n ConditionalFormatting.prototype.destroy = function () {\n if (this.dialog && !this.dialog.isDestroyed) {\n this.dialog.hide();\n for (var i = 0; i < this.newFormat.length; i++) {\n if (this.fontColor[i] && !this.fontColor[i].isDestroyed) {\n this.fontColor[i].destroy();\n }\n if (this.backgroundColor[i] && !this.backgroundColor[i].isDestroyed) {\n this.backgroundColor[i].destroy();\n }\n }\n this.dialog.destroy();\n }\n else {\n return;\n }\n };\n return ConditionalFormatting;\n}());\nexport { ConditionalFormatting };\n","import * as index from '@syncfusion/ej2-pivotview';\nindex.PivotView.Inject( index.GroupingBar,index.FieldList,index.CalculatedField,index.ConditionalFormatting,index.VirtualScroll);\nexport * from '@syncfusion/ej2-pivotview';\n","/**\n * Defines types of Render\n * @hidden\n */\nexport var RenderType;\n(function (RenderType) {\n /** Defines RenderType as Toolbar */\n RenderType[RenderType[\"Toolbar\"] = 0] = \"Toolbar\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Popup\"] = 2] = \"Popup\";\n /** Defines RenderType as LinkToolbar */\n RenderType[RenderType[\"LinkToolbar\"] = 3] = \"LinkToolbar\";\n /** Defines RenderType as TextToolbar */\n RenderType[RenderType[\"TextToolbar\"] = 4] = \"TextToolbar\";\n /** Defines RenderType as ImageToolbar */\n RenderType[RenderType[\"ImageToolbar\"] = 5] = \"ImageToolbar\";\n /** Defines RenderType as ImageToolbar */\n RenderType[RenderType[\"InlineToolbar\"] = 6] = \"InlineToolbar\";\n RenderType[RenderType[\"TableToolbar\"] = 7] = \"TableToolbar\";\n})(RenderType || (RenderType = {}));\nexport var ToolbarType;\n(function (ToolbarType) {\n /** Defines ToolbarType as Standard */\n ToolbarType[\"Expand\"] = \"Expand\";\n /** Defines ToolbarType as MultiRow */\n ToolbarType[\"MultiRow\"] = \"MultiRow\";\n})(ToolbarType || (ToolbarType = {}));\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/**\n * Specifies RichTextEditor internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var iframeMouseDown = 'iframe-click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var refreshBegin = 'refresh-begin';\n/** @hidden */\nexport var toolbarUpdated = 'toolbar-updated';\n/** @hidden */\nexport var bindOnEnd = 'bind-on-end';\n/** @hidden */\nexport var renderColorPicker = 'render-color-picker';\n/** @hidden */\nexport var htmlToolbarClick = 'html-toolbar-click';\n/** @hidden */\nexport var markdownToolbarClick = 'markdown-toolbar-click';\n/** @hidden */\nexport var destroyColorPicker = 'destroy-color-picker';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var keyUp = 'keyUp';\n/** @hidden */\nexport var keyDown = 'keyDown';\n/** @hidden */\nexport var mouseUp = 'mouseUp';\n/** @hidden */\nexport var toolbarCreated = 'toolbarCreated';\n/** @hidden */\nexport var toolbarRenderComplete = 'toolbarRenderComplete';\n/** @hidden */\nexport var enableFullScreen = 'enableFullScreen';\n/** @hidden */\nexport var disableFullScreen = 'disableFullScreen';\n/** @hidden */\nexport var dropDownSelect = 'dropDownSelect';\n/** @hidden */\nexport var beforeDropDownItemRender = 'beforeDropDownItemRender';\n/** @hidden */\nexport var execCommandCallBack = 'execCommandCallBack';\n/** @hidden */\nexport var imageToolbarAction = 'image-toolbar-action';\n/** @hidden */\nexport var linkToolbarAction = 'link-toolbar-action';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var onResize = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var undo = 'undo';\n/** @hidden */\nexport var redo = 'redo';\n/** @hidden */\nexport var insertLink = 'insertLink';\n/** @hidden */\nexport var unLink = 'unLink';\n/** @hidden */\nexport var editLink = 'editLink';\n/** @hidden */\nexport var openLink = 'openLink';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionSuccess = 'actionSuccess';\n/** @hidden */\nexport var popupOpen = 'popupOpen';\n/** @hidden */\nexport var updateToolbarItem = 'updateToolbarItem';\n/** @hidden */\nexport var insertImage = 'insertImage';\n/** @hidden */\nexport var insertCompleted = 'insertCompleted';\n/** @hidden */\nexport var imageLeft = 'justifyLeft';\n/** @hidden */\nexport var imageRight = 'justifyRight';\n/** @hidden */\nexport var imageCenter = 'justifyCenter';\n/** @hidden */\nexport var imageBreak = 'break';\n/** @hidden */\nexport var imageInline = 'inline';\n/** @hidden */\nexport var imageLink = 'insertImgLink';\n/** @hidden */\nexport var imageAlt = 'imgAltText';\n/** @hidden */\nexport var imageDelete = 'delete';\n/** @hidden */\nexport var imageCaption = 'caption';\n/** @hidden */\nexport var imageSize = 'imageSize';\n/** @hidden */\nexport var sourceCode = 'sourceCode';\n/** @hidden */\nexport var updateSource = 'updateSource';\n/** @hidden */\nexport var toolbarOpen = 'toolbarOpen';\n/** @hidden */\nexport var beforeDropDownOpen = 'beforeDropDownOpen';\n/** @hidden */\nexport var selectionSave = 'selection-save';\n/** @hidden */\nexport var selectionRestore = 'selection-restore';\n/** @hidden */\nexport var expandPopupClick = 'expandPopupClick';\n/** @hidden */\nexport var count = 'count';\n/** @hidden */\nexport var contentFocus = 'contentFocus';\n/** @hidden */\nexport var contentBlur = 'contentBlur';\n/** @hidden */\nexport var mouseDown = 'mouseDown';\n/** @hidden */\nexport var sourceCodeMouseDown = 'sourceCodeMouseDown';\n/** @hidden */\nexport var editAreaClick = 'editAreaClick';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var colorPickerChanged = 'colorPickerChanged';\n/** @hidden */\nexport var tableColorPickerChanged = 'tableColorPickerChanged';\n/** @hidden */\nexport var focusChange = 'focusChange';\n/** @hidden */\nexport var selectAll = 'selectAll';\n/** @hidden */\nexport var selectRange = 'selectRange';\n/** @hidden */\nexport var getSelectedHtml = 'getSelectedHtml';\n/** @hidden */\nexport var renderInlineToolbar = 'renderInlineToolbar';\n/** @hidden */\nexport var paste = 'pasteImage';\n/** @hidden */\nexport var imgModule = 'imageModule';\n/** @hidden */\nexport var rtlMode = 'rtl-mode';\n/** @hidden */\nexport var createTable = 'createTable';\n/** @hidden */\nexport var docClick = 'docClick';\n/** @hidden */\nexport var tableToolbarAction = 'table-toolbar-action';\n/** @hidden */\nexport var checkUndo = 'checkUndoStack';\n","/**\n * RichTextEditor classes defined here.\n */\n/** @hidden */\nexport var CLS_RTE = 'e-richtexteditor';\n/** @hidden */\nexport var CLS_RTL = 'e-rtl';\n/** @hidden */\nexport var CLS_CONTENT = 'e-content';\n/** @hidden */\nexport var CLS_DISABLED = 'e-disabled';\n/** @hidden */\nexport var CLS_SCRIPT_SHEET = 'rte-iframe-script-sheet';\n/** @hidden */\nexport var CLS_STYLE_SHEET = 'rte-iframe-style-sheet';\n/** @hidden */\nexport var CLS_TOOLBAR = 'e-rte-toolbar';\n/** @hidden */\nexport var CLS_TB_FIXED = 'e-rte-tb-fixed';\n/** @hidden */\nexport var CLS_TB_FLOAT = 'e-rte-tb-float';\n/** @hidden */\nexport var CLS_TB_ABS_FLOAT = 'e-rte-tb-abs-float';\n/** @hidden */\nexport var CLS_INLINE = 'e-rte-inline';\n/** @hidden */\nexport var CLS_TB_INLINE = 'e-rte-tb-inline';\n/** @hidden */\nexport var CLS_RTE_EXPAND_TB = 'e-rte-tb-expand';\n/** @hidden */\nexport var CLS_FULL_SCREEN = 'e-rte-full-screen';\n/** @hidden */\nexport var CLS_QUICK_TB = 'e-rte-quick-toolbar';\n/** @hidden */\nexport var CLS_POP = 'e-rte-pop';\n/** @hidden */\nexport var CLS_QUICK_POP = 'e-rte-quick-popup';\n/** @hidden */\nexport var CLS_QUICK_DROPDOWN = 'e-quick-dropdown';\n/** @hidden */\nexport var CLS_IMAGE_POP = 'e-rte-image-popup';\n/** @hidden */\nexport var CLS_INLINE_POP = 'e-rte-inline-popup';\n/** @hidden */\nexport var CLS_INLINE_DROPDOWN = 'e-rte-inline-dropdown';\n/** @hidden */\nexport var CLS_DROPDOWN_POPUP = 'e-rte-dropdown-popup';\n/** @hidden */\nexport var CLS_DROPDOWN_ICONS = 'e-rte-dropdown-icons';\n/** @hidden */\nexport var CLS_DROPDOWN_ITEMS = 'e-rte-dropdown-items';\n/** @hidden */\nexport var CLS_DROPDOWN_BTN = 'e-rte-dropdown-btn';\n/** @hidden */\nexport var CLS_RTE_CONTENT = 'e-rte-content';\n/** @hidden */\nexport var CLS_TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var CLS_TB_EXTENDED = 'e-toolbar-extended';\n/** @hidden */\nexport var CLS_TB_WRAP = 'e-toolbar-wrapper';\n/** @hidden */\nexport var CLS_POPUP = 'e-popup';\n/** @hidden */\nexport var CLS_SEPARATOR = 'e-separator';\n/** @hidden */\nexport var CLS_MINIMIZE = 'e-minimize';\n/** @hidden */\nexport var CLS_MAXIMIZE = 'e-maximize';\n/** @hidden */\nexport var CLS_BACK = 'e-back';\n/** @hidden */\nexport var CLS_SHOW = 'e-show';\n/** @hidden */\nexport var CLS_HIDE = 'e-hide';\n/** @hidden */\nexport var CLS_VISIBLE = 'e-visible';\n/** @hidden */\nexport var CLS_FOCUS = 'e-focused';\n/** @hidden */\nexport var CLS_RM_WHITE_SPACE = 'e-remove-white-space';\n/** @hidden */\nexport var CLS_IMGRIGHT = 'e-imgright';\n/** @hidden */\nexport var CLS_IMGLEFT = 'e-imgleft';\n/** @hidden */\nexport var CLS_IMGCENTER = 'e-imgcenter';\n/** @hidden */\nexport var CLS_IMGBREAK = 'e-imgbreak';\n/** @hidden */\nexport var CLS_CAPTION = 'e-img-caption';\n/** @hidden */\nexport var CLS_CAPINLINE = 'e-caption-inline';\n/** @hidden */\nexport var CLS_IMGINLINE = 'e-imginline';\n/** @hidden */\nexport var CLS_COUNT = 'e-rte-character-count';\n/** @hidden */\nexport var CLS_WARNING = 'e-warning';\n/** @hidden */\nexport var CLS_ERROR = 'e-error';\n/** @hidden */\nexport var CLS_ICONS = 'e-icons';\n/** @hidden */\nexport var CLS_ACTIVE = 'e-active';\n/** @hidden */\nexport var CLS_EXPAND_OPEN = 'e-expand-open';\n/** @hidden */\nexport var CLS_RTE_ELEMENTS = 'e-rte-elements';\n/** @hidden */\nexport var CLS_TB_BTN = 'e-tbar-btn';\n/** @hidden */\nexport var CLS_HR_SEPARATOR = 'e-rte-horizontal-separator';\n/** @hidden */\nexport var CLS_TB_IOS_FIX = 'e-tbar-ios-fixed';\n/** @hidden */\nexport var CLS_TB_STATIC = 'e-tb-static';\n/** @hidden */\nexport var CLS_FORMATS_TB_BTN = 'e-formats-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_NAME_TB_BTN = 'e-font-name-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_SIZE_TB_BTN = 'e-font-size-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_COLOR_TARGET = 'e-rte-fontcolor-element';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_TARGET = 'e-rte-backgroundcolor-element';\n/** @hidden */\nexport var CLS_COLOR_CONTENT = 'e-rte-color-content';\n/** @hidden */\nexport var CLS_FONT_COLOR_DROPDOWN = 'e-rte-fontcolor-dropdown';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_DROPDOWN = 'e-rte-backgroundcolor-dropdown';\n/** @hidden */\nexport var CLS_COLOR_PALETTE = 'e-rte-square-palette';\n/** @hidden */\nexport var CLS_FONT_COLOR_PICKER = 'e-rte-fontcolor-colorpicker';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_PICKER = 'e-rte-backgroundcolor-colorpicker';\n/** @hidden */\nexport var CLS_RTE_READONLY = 'e-rte-readonly';\n/** @hidden */\nexport var CLS_TABLE_SEL = 'e-cell-select';\n/** @hidden */\nexport var CLS_TB_DASH_BOR = 'e-dashed-border';\n/** @hidden */\nexport var CLS_TB_ALT_BOR = 'e-alternate-border';\n/** @hidden */\nexport var CLS_TB_COL_RES = 'e-column-resize';\n/** @hidden */\nexport var CLS_TB_ROW_RES = 'e-row-resize';\n/** @hidden */\nexport var CLS_TB_BOX_RES = 'e-table-box';\n","// tslint:disable\n/**\n * Export items model\n */\nexport var templateItems = ['alignments', 'formats', 'fontname', 'fontsize', 'fontcolor', 'backgroundcolor', 'align', 'display', 'tablerows', 'tablecolumns', 'tablecellhorizontalalign', 'tablecellverticalalign', 'styles'];\nexport var tools = {\n 'alignments': {\n 'id': 'Alignments',\n 'icon': 'e-alignments',\n 'tooltip': 'Alignments',\n 'command': 'Alignments',\n 'subCommand': 'Alignments'\n },\n 'justifyleft': {\n 'id': 'JustifyLeft',\n 'icon': 'e-justify-left',\n 'tooltip': 'JustifyLeft',\n 'command': 'Alignments',\n 'subCommand': 'JustifyLeft'\n },\n 'justifycenter': {\n 'id': 'JustifyCenter',\n 'icon': 'e-justify-center',\n 'tooltip': 'JustifyCenter',\n 'command': 'Alignments',\n 'subCommand': 'JustifyCenter'\n },\n 'justifyright': {\n 'id': 'JustifyRight',\n 'icon': 'e-justify-right',\n 'tooltip': 'JustifyRight',\n 'command': 'Alignments',\n 'subCommand': 'JustifyRight'\n },\n 'justifyfull': {\n 'id': 'JustifyFull',\n 'icon': 'e-justify-full',\n 'tooltip': 'JustifyFull',\n 'command': 'Alignments',\n 'subCommand': 'JustifyFull'\n },\n 'fontname': {\n 'id': 'FontName',\n 'icon': 'e-font-name',\n 'tooltip': 'Font Name',\n 'command': 'Font',\n 'subCommand': 'FontName'\n },\n 'fontsize': {\n 'id': 'FontSize',\n 'icon': 'e-font-size',\n 'tooltip': 'Font Size',\n 'command': 'Font',\n 'subCommand': 'FontSize'\n },\n 'fontcolor': {\n 'id': 'FontColor',\n 'icon': 'e-font-color',\n 'tooltip': 'Font Color',\n 'command': 'Font',\n 'subCommand': 'FontColor',\n 'value': '#ff0000ff'\n },\n 'backgroundcolor': {\n 'id': 'BackgroundColor',\n 'icon': 'e-background-color',\n 'tooltip': 'Background Color',\n 'command': 'Font',\n 'subCommand': 'BackgroundColor',\n 'value': '#ffff00ff'\n },\n 'bold': {\n 'id': 'Bold',\n 'icon': 'e-bold',\n 'tooltip': 'Bold',\n 'command': 'Style',\n 'subCommand': 'Bold'\n },\n 'italic': {\n 'id': 'Italic',\n 'icon': 'e-italic',\n 'tooltip': 'Italic',\n 'command': 'Style',\n 'subCommand': 'Italic'\n },\n 'underline': {\n 'id': 'Underline',\n 'icon': 'e-underline',\n 'tooltip': 'Underline',\n 'command': 'Style',\n 'subCommand': 'Underline'\n },\n 'strikethrough': {\n 'id': 'StrikeThrough',\n 'icon': 'e-strike-through',\n 'tooltip': 'StrikeThrough',\n 'command': 'Style',\n 'subCommand': 'StrikeThrough'\n },\n 'clearformat': {\n 'id': 'ClearFormat',\n 'icon': 'e-clear-format',\n 'tooltip': 'Clear Format',\n 'command': 'Clear',\n 'subCommand': 'ClearFormat'\n },\n 'clearall': {\n 'id': 'ClearAll',\n 'icon': 'e-clear-all',\n 'tooltip': 'Clear All',\n 'command': 'Clear',\n 'subCommand': 'ClearAll'\n },\n 'cut': {\n 'id': 'Cut',\n 'icon': 'e-cut',\n 'tooltip': 'Cut',\n 'command': 'ClipBoard',\n 'subCommand': 'Cut'\n },\n 'copy': {\n 'id': 'Copy',\n 'icon': 'e-copy',\n 'tooltip': 'Copy',\n 'command': 'ClipBoard',\n 'subCommand': 'Copy'\n },\n 'paste': {\n 'id': 'Paste',\n 'icon': 'e-paste',\n 'tooltip': 'Paste',\n 'command': 'ClipBoard',\n 'subCommand': 'Paste'\n },\n 'unorderedlist': {\n 'id': 'UnorderedList',\n 'icon': 'e-unorder-list',\n 'tooltip': 'Bulleted List',\n 'command': 'Lists',\n 'subCommand': 'UL'\n },\n 'orderedlist': {\n 'id': 'OrderedList',\n 'icon': 'e-order-list',\n 'tooltip': 'Numbered List',\n 'command': 'Lists',\n 'subCommand': 'OL'\n },\n 'indent': {\n 'id': 'Indent',\n 'icon': 'e-indent',\n 'tooltip': 'Increase Indent',\n 'command': 'Indents',\n 'subCommand': 'Indent'\n },\n 'outdent': {\n 'id': 'Outdent',\n 'icon': 'e-outdent',\n 'tooltip': 'Decrease Indent',\n 'command': 'Indents',\n 'subCommand': 'Outdent'\n },\n 'undo': {\n 'id': 'Undo',\n 'icon': 'e-undo',\n 'tooltip': 'Undo',\n 'command': 'Actions',\n 'subCommand': 'Undo'\n },\n 'redo': {\n 'id': 'Redo',\n 'icon': 'e-redo',\n 'tooltip': 'Redo',\n 'command': 'Actions',\n 'subCommand': 'Redo'\n },\n 'superscript': {\n 'id': 'SuperScript',\n 'icon': 'e-super-script',\n 'tooltip': 'Superscript',\n 'command': 'Effects',\n 'subCommand': 'SuperScript'\n },\n 'subscript': {\n 'id': 'SubScript',\n 'icon': 'e-sub-script',\n 'tooltip': 'Subscript',\n 'command': 'Effects',\n 'subCommand': 'SubScript'\n },\n 'createlink': {\n 'id': 'CreateLink',\n 'icon': 'e-create-link',\n 'tooltip': 'Insert Hyperlink',\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n },\n 'openlink': {\n 'id': 'OpenLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Links',\n 'subCommand': 'OpenLink'\n },\n 'editlink': {\n 'id': 'EditLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Links',\n 'subCommand': 'EditLink'\n },\n 'removelink': {\n 'id': 'RemoveLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Links',\n 'subCommand': 'RemoveLink'\n },\n 'image': {\n 'id': 'Image',\n 'icon': 'e-image',\n 'tooltip': 'Insert Image',\n 'command': 'Images',\n 'subCommand': 'Image'\n },\n 'createtable': {\n 'id': 'CreateTable',\n 'icon': 'e-create-table',\n 'tooltip': 'Create Table',\n 'command': 'Table',\n 'subCommand': 'CreateTable'\n },\n 'removetable': {\n 'id': 'removeTable',\n 'icon': 'e-remove-table',\n 'tooltip': 'Remove Table',\n 'command': 'removeTable',\n 'subCommand': 'removeTable'\n },\n 'replace': {\n 'id': 'Replace',\n 'icon': 'e-replace',\n 'tooltip': 'Replace',\n 'command': 'Images',\n 'subCommand': 'Replace'\n },\n 'align': {\n 'id': 'Align',\n 'icon': 'e-align',\n 'tooltip': 'Align',\n 'command': 'Images',\n 'subCommand': 'Align'\n },\n 'caption': {\n 'id': 'Caption',\n 'icon': 'e-caption',\n 'tooltip': 'Image Caption',\n 'command': 'Images',\n 'subCommand': 'Caption'\n },\n 'remove': {\n 'id': 'Remove',\n 'icon': 'e-remove',\n 'tooltip': 'Remove',\n 'command': 'Images',\n 'subCommand': 'Remove'\n },\n 'openimagelink': {\n 'id': 'OpenImageLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Images',\n 'subCommand': 'OpenImageLink'\n },\n 'editimagelink': {\n 'id': 'EditIamgeLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Images',\n 'subCommand': 'EditImageLink'\n },\n 'removeimagelink': {\n 'id': 'RemoveImageLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Images',\n 'subCommand': 'RemoveImageLink'\n },\n 'insertlink': {\n 'id': 'InsertLink',\n 'icon': 'e-insert-link',\n 'tooltip': 'Insert Link',\n 'command': 'Images',\n 'subCommand': 'InsertLink'\n },\n 'display': {\n 'id': 'Display',\n 'icon': 'e-display',\n 'tooltip': 'Display',\n 'command': 'Images',\n 'subCommand': 'Display'\n },\n 'alttext': {\n 'id': 'AltText',\n 'icon': 'e-alt-text',\n 'tooltip': 'Alternative Text',\n 'command': 'Images',\n 'subCommand': 'AltText'\n },\n 'dimension': {\n 'id': 'Dimension',\n 'icon': 'e-dimension',\n 'tooltip': 'Change Size',\n 'command': 'Images',\n 'subCommand': 'Dimension'\n },\n 'fullscreen': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'View',\n 'subCommand': 'Maximize'\n },\n 'maximize': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'FullScreen',\n 'subCommand': 'Maximize'\n },\n 'minimize': {\n 'id': 'Minimize',\n 'icon': 'e-minimize',\n 'tooltip': 'Minimize',\n 'command': 'FullScreen',\n 'subCommand': 'Minimize'\n },\n 'lowercase': {\n 'id': 'LowerCase',\n 'icon': 'e-lower-case',\n 'tooltip': 'Lower Case',\n 'command': 'Casing',\n 'subCommand': 'LowerCase'\n },\n 'uppercase': {\n 'id': 'UpperCase',\n 'icon': 'e-upper-case',\n 'tooltip': 'Upper Case',\n 'command': 'Casing',\n 'subCommand': 'UpperCase'\n },\n 'print': {\n 'id': 'Print',\n 'icon': 'e-print',\n 'tooltip': 'Print',\n 'command': 'Print',\n 'subCommand': 'Print'\n },\n 'formats': {\n 'id': 'Formats',\n 'icon': 'e-formats',\n 'tooltip': 'Formats',\n 'command': 'Formats',\n 'subCommand': 'Formats'\n },\n 'sourcecode': {\n 'id': 'SourceCode',\n 'icon': 'e-source-code',\n 'tooltip': 'Source Code',\n 'command': 'SourceCode',\n 'subCommand': 'SourceCode'\n },\n 'preview': {\n 'id': 'Preview',\n 'icon': 'e-preview',\n 'tooltip': 'Preview',\n 'command': 'Preview',\n 'subCommand': 'Preview'\n },\n 'viewside': {\n 'id': 'ViewSide',\n 'icon': 'e-view-side',\n 'tooltip': 'ViewSide',\n 'command': 'ViewSide',\n 'subCommand': 'ViewSide'\n },\n 'insertcode': {\n 'id': 'InsertCode',\n 'icon': 'e-insert-code',\n 'tooltip': 'Insert Code',\n 'command': 'InsertCode',\n 'subCommand': 'InsertCode'\n },\n 'tableheader': {\n 'id': 'TableHeader',\n 'icon': 'e-table-header',\n 'tooltip': 'Table Header',\n 'command': 'Table',\n 'subCommand': 'TableHeader'\n },\n 'tableremove': {\n 'id': 'TableRemove',\n 'icon': 'e-table-remove',\n 'tooltip': 'Table Remove',\n 'command': 'Table',\n 'subCommand': 'TableRemove'\n },\n 'tablerows': {\n 'id': 'TableRows',\n 'icon': 'e-table-rows',\n 'tooltip': 'Table Rows',\n 'command': 'Table',\n 'subCommand': 'TableRows'\n },\n 'tablecolumns': {\n 'id': 'TableColumns',\n 'icon': 'e-table-columns',\n 'tooltip': 'Table Columns',\n 'command': 'Table',\n 'subCommand': 'TableColumns'\n },\n 'tablecellbackground': {\n 'id': 'TableCellBackground',\n 'icon': 'e-table-cell-background',\n 'tooltip': 'Table Cell Background',\n 'command': 'Table',\n 'subCommand': 'TableCellBackground'\n },\n 'tablecellhorizontalalign': {\n 'id': 'TableCellHorizontalAlign',\n 'icon': 'e-table-cell-horizontalAlign',\n 'tooltip': 'Table Cell HorizontalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellHorizontalAlign'\n },\n 'tablecellverticalalign': {\n 'id': 'TableCellVerticalAlign',\n 'icon': 'e-table-cell-verticalAlign',\n 'tooltip': 'Table Cell VerticalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellVerticalAlign'\n },\n 'tableeditproperties': {\n 'id': 'TableEditProperties',\n 'icon': 'e-table-edit-properties',\n 'tooltip': 'Table Edit Properties',\n 'command': 'Table',\n 'subCommand': 'TableEditProperties'\n },\n 'styles': {\n 'id': 'Styles',\n 'icon': 'e-table-styles',\n 'tooltip': 'Styles',\n 'command': 'Table',\n 'subCommand': 'Styles'\n }\n};\nexport var alignmentItems = [\n { iconCss: 'e-icons e-justify-left', text: 'Align Left', command: 'Alignments', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', text: 'Align Center', command: 'Alignments', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', text: 'Align Right', command: 'Alignments', subCommand: 'JustifyRight' },\n { iconCss: 'e-icons e-justify-full', text: 'Align Justify', command: 'Alignments', subCommand: 'JustifyFull' }\n];\nexport var imageAlignItems = [\n { iconCss: 'e-icons e-justify-left', command: 'Images', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', command: 'Images', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', command: 'Images', subCommand: 'JustifyRight' },\n];\nexport var imageDisplayItems = [\n { text: 'Inline', class: 'e-inline', command: 'Images', subCommand: 'Inline' },\n { text: 'Break', class: 'e-break', command: 'Images', subCommand: 'Break' },\n];\nexport var tableRowsItems = [\n { iconCss: 'e-icons e-insert-row-before', text: 'Insert row before', command: 'Table', subCommand: 'InsertRowBefore' },\n { iconCss: 'e-icons e-insert-row-after', text: 'Insert row after', command: 'Table', subCommand: 'InsertRowAfter' },\n { iconCss: 'e-icons e-delete-row', text: 'Delete row', command: 'Table', subCommand: 'DeleteRow' },\n];\nexport var tableColumnsItems = [\n { iconCss: 'e-icons e-insert-column-left', text: 'Insert column left', command: 'Table', subCommand: 'InsertColumnLeft' },\n { iconCss: 'e-icons e-insert-column-right', text: 'Insert column right', command: 'Table', subCommand: 'InsertColumnRight' },\n { iconCss: 'e-icons e-delete-column', text: 'Delete column', command: 'Table', subCommand: 'DeleteColumn' },\n];\nexport var TableCellVerticalAlignItems = [\n { iconCss: 'e-icons e-align-top', text: 'Align Top', command: 'Table', subCommand: 'AlignTop' },\n { iconCss: 'e-icons e-align-middle', text: 'Align Middle', command: 'Table', subCommand: 'AlignMiddle' },\n { iconCss: 'e-icons e-align-bottom', text: 'Align Bottom', command: 'Table', subCommand: 'AlignBottom' },\n];\nexport var TableStyleItems = [\n { text: 'Dashed Borders', class: 'e-dashed-borders', command: 'Table', subCommand: 'Dashed' },\n { text: 'Alternate Rows', class: 'e-alternate-rows', command: 'Table', subCommand: 'Alternate' }\n];\n","// tslint:disable\n/**\n * Export default locale\n */\nexport var defaultLocale = {\n 'alignments': 'Alignments',\n 'justifyLeft': 'Align Left',\n 'justifyCenter': 'Align Center',\n 'justifyRight': 'Align Right',\n 'justifyFull': 'Align Justify',\n 'fontName': 'Font Name',\n 'fontSize': 'Font Size',\n 'fontColor': 'Font Color',\n 'backgroundColor': 'Background Color',\n 'bold': 'Bold',\n 'italic': 'Italic',\n 'underline': 'Underline',\n 'strikethrough': 'Strikethrough',\n 'clearFormat': 'Clear Format',\n 'clearAll': 'Clear All',\n 'cut': 'Cut',\n 'copy': 'Copy',\n 'paste': 'Paste',\n 'unorderedList': 'Bulleted List',\n 'orderedList': 'Numbered List',\n 'indent': 'Increase Indent',\n 'outdent': 'Decrease Indent',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'superscript': 'Superscript',\n 'subscript': 'Subscript',\n 'createLink': 'Insert Hyperlink',\n 'openLink': 'Open Link',\n 'editLink': 'Edit Link',\n 'removeLink': 'Remove Link',\n 'image': 'Insert Image',\n 'replace': 'Replace',\n 'align': 'Align',\n 'caption': 'Image Caption',\n 'remove': 'Remove',\n 'insertLink': 'Insert Link',\n 'display': 'Display',\n 'altText': 'Alternative Text',\n 'dimension': 'Change Size',\n 'fullscreen': 'Maximize',\n 'maximize': 'Maximize',\n 'minimize': 'Minimize',\n 'lowerCase': 'Lower Case',\n 'upperCase': 'Upper Case',\n 'print': 'Print',\n 'formats': 'Formats',\n 'sourcecode': 'Code View',\n 'preview': 'Preview',\n 'viewside': 'ViewSide',\n 'insertCode': 'Insert Code',\n 'linkText': 'Display Text',\n 'linkTooltipLabel': 'Title',\n 'linkWebUrl': 'Web Address',\n 'linkTitle': 'Enter a title',\n 'linkurl': 'http://example.com',\n 'linkOpenInNewWindow': 'Open Link in New Window',\n 'linkHeader': 'Insert Link',\n 'dialogInsert': 'Insert',\n 'dialogCancel': 'Cancel',\n 'dialogUpdate': 'Update',\n 'imageHeader': 'Insert Image',\n 'imageLinkHeader': 'You can also provide a link from the web',\n 'mdimageLink': 'Please provide a URL for your image',\n 'imageUploadMessage': 'Drop image here or browse to upload',\n 'imageDeviceUploadMessage': 'Click here to upload',\n 'imageAlternateText': 'Alternate Text',\n 'alternateHeader': 'Alternative Text',\n 'browse': 'Browse',\n 'imageUrl': 'http://example.com/image.png',\n 'imageCaption': 'Caption',\n 'imageSizeHeader': 'Image Size',\n 'imageHeight': 'Height',\n 'imageWidth': 'Width',\n 'textPlaceholder': 'Enter Text',\n 'tblhead': '1X1',\n 'inserttablebtn': 'Insert Table',\n 'tabledialogHeader': 'Insert Table',\n 'tableWidth': 'Width',\n 'cellpadding': 'Cell Padding',\n 'cellspacing': 'Cell Spacing',\n 'columns': 'Number of columns',\n 'rows': 'Number of rows',\n 'tableRows': 'Table Rows',\n 'tableColumns': 'Table Columns',\n 'tableCellHorizontalAlign': 'Table Cell Horizontal Align',\n 'tableCellVerticalAlign': 'Table Cell Vertical Align',\n 'createTable': 'Create Table',\n 'removeTable': 'Remove Table',\n 'tableHeader': 'Table Header',\n 'tableRemove': 'Table Remove',\n 'tableCellBackground': 'Table Cell Background',\n 'tableEditProperties': 'Table Edit Properties',\n 'styles': 'Styles',\n 'insertColumnLeft': 'Insert Column Left',\n 'insertColumnRight': 'Insert Column Right',\n 'deleteColumn': 'Delete Column',\n 'insertRowBefore': 'Insert Row Before',\n 'insertRowAfter': 'Insert Row After',\n 'deleteRow': 'Delete Row',\n 'tableEditHeader': 'Edit Table'\n};\nexport var toolsLocale = {\n 'alignments': 'alignments',\n 'justifyleft': 'justifyLeft',\n 'justifycenter': 'justifyCenter',\n 'justifyright': 'justifyRight',\n 'justifyfull': 'justifyFull',\n 'fontname': 'fontName',\n 'fontsize': 'fontSize',\n 'fontcolor': 'fontColor',\n 'backgroundcolor': 'backgroundColor',\n 'bold': 'bold',\n 'italic': 'italic',\n 'underline': 'underline',\n 'strikethrough': 'strikethrough',\n 'clearformat': 'clearFormat',\n 'clearall': 'clearAll',\n 'cut': 'cut',\n 'copy': 'copy',\n 'paste': 'paste',\n 'unorderedlist': 'unorderedList',\n 'orderedlist': 'orderedList',\n 'indent': 'indent',\n 'outdent': 'outdent',\n 'undo': 'undo',\n 'redo': 'redo',\n 'superscript': 'superscript',\n 'subscript': 'subscript',\n 'createlink': 'createLink',\n 'openlink': 'openLink',\n 'editlink': 'editLink',\n 'removelink': 'removeLink',\n 'openimagelink': 'openLink',\n 'editimagelink': 'editLink',\n 'removeimagelink': 'removeLink',\n 'image': 'image',\n 'replace': 'replace',\n 'align': 'align',\n 'caption': 'caption',\n 'remove': 'remove',\n 'insertlink': 'insertLink',\n 'display': 'display',\n 'alttext': 'altText',\n 'dimension': 'dimension',\n 'fullscreen': 'fullscreen',\n 'maximize': 'maximize',\n 'minimize': 'minimize',\n 'lowercase': 'lowerCase',\n 'uppercase': 'upperCase',\n 'print': 'print',\n 'formats': 'formats',\n 'sourcecode': 'sourcecode',\n 'preview': 'preview',\n 'viewside': 'viewside',\n 'insertcode': 'insertCode',\n 'tablerows': 'tableRows',\n 'tablecolumns': 'tableColumns',\n 'tablecellhorizontalalign': 'tableCellHorizontalAlign',\n 'tablecellverticalalign': 'tableCellVerticalAlign',\n 'createtable': 'createTable',\n 'removetable': 'removeTable',\n 'tableheader': 'tableHeader',\n 'tableremove': 'tableRemove',\n 'tablecellbackground': 'tableCellBackground',\n 'tableeditproperties': 'tableEditProperties',\n 'styles': 'styles',\n 'insertcolumnleft': 'insertColumnLeft',\n 'insertcolumnright': 'insertColumnRight',\n 'deletecolumn': 'deleteColumn',\n 'aligntop': 'AlignTop',\n 'alignmiddle': 'AlignMiddle',\n 'alignbottom': 'AlignBottom',\n 'insertrowbefore': 'insertRowBefore',\n 'insertrowafter': 'insertRowAfter',\n 'deleterow': 'deleteRow'\n};\n","import { addClass, Browser, removeClass, EventHandler } from '@syncfusion/ej2-base';\nimport { getInstance, closest, selectAll } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as classes from '../base/classes';\nimport * as events from '../base/constant';\nimport { CLS_TOOLBAR, CLS_DROPDOWN_BTN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_INLINE_DROPDOWN, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER } from '../base/classes';\nimport { isIDevice } from '../base/util';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * `Toolbar renderer` module is used to render toolbar in RichTextEditor.\n * @hidden\n */\nvar ToolbarRenderer = /** @class */ (function () {\n /**\n * Constructor for toolbar renderer module\n */\n function ToolbarRenderer(parent) {\n this.parent = parent;\n this.wireEvent();\n }\n ToolbarRenderer.prototype.wireEvent = function () {\n this.parent.on(events.destroy, this.unWireEvent, this);\n };\n ToolbarRenderer.prototype.unWireEvent = function () {\n this.parent.off(events.destroy, this.unWireEvent);\n if (this.popupOverlay) {\n EventHandler.remove(this.popupOverlay, 'click touchmove', this.onPopupOverlay);\n }\n };\n ToolbarRenderer.prototype.toolbarBeforeCreate = function (e) {\n if (this.mode === 'Extended') {\n e.enableCollision = false;\n }\n };\n ToolbarRenderer.prototype.toolbarCreated = function () {\n this.parent.notify(events.toolbarCreated, this);\n };\n ToolbarRenderer.prototype.toolbarClicked = function (args) {\n if (this.parent.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.toolbarClick, args);\n this.parent.trigger('toolbarClick', args);\n };\n ToolbarRenderer.prototype.dropDownSelected = function (args) {\n this.parent.notify(events.dropDownSelect, args);\n };\n ToolbarRenderer.prototype.beforeDropDownItemRender = function (args) {\n if (this.parent.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.beforeDropDownItemRender, args);\n };\n ToolbarRenderer.prototype.dropDownOpen = function (args) {\n this.parent.notify(events.selectionSave, args);\n };\n ToolbarRenderer.prototype.dropDownClose = function (args) {\n this.parent.notify(events.selectionRestore, args);\n };\n ToolbarRenderer.prototype.renderToolbar = function (args) {\n this.setPanel(args.target);\n this.renderPanel();\n this.mode = args.overflowMode;\n args.rteToolbarObj.toolbarObj = new Toolbar({\n items: args.items,\n width: '100%',\n overflowMode: args.overflowMode,\n beforeCreate: this.toolbarBeforeCreate.bind(this),\n created: this.toolbarCreated.bind(this),\n clicked: this.toolbarClicked.bind(this),\n enablePersistence: args.enablePersistence,\n enableRtl: args.enableRtl\n });\n args.rteToolbarObj.toolbarObj.createElement = this.parent.createElement;\n args.rteToolbarObj.toolbarObj.appendTo(args.target);\n };\n ToolbarRenderer.prototype.renderDropDownButton = function (args) {\n var _this = this;\n var css;\n args.element.classList.add(CLS_DROPDOWN_BTN);\n css = args.cssClass + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN;\n if (this.parent.inlineMode.enable && Browser.isDevice) {\n css = css + ' ' + CLS_INLINE_DROPDOWN;\n }\n var proxy = this;\n var dropDown = new DropDownButton({\n items: args.items,\n iconCss: args.iconCss,\n cssClass: css,\n content: args.content,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n select: this.dropDownSelected.bind(this),\n beforeOpen: function (args) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n args.cancel = true;\n return;\n }\n for (var index = 0; index < args.element.childNodes.length; index++) {\n var divNode = _this.parent.createElement('div');\n divNode.innerHTML = dropDown.content.trim();\n if (divNode.textContent.trim() !== ''\n && args.element.childNodes[index].textContent.trim() === divNode.textContent.trim()) {\n if (!args.element.childNodes[index].classList.contains('e-active')) {\n addClass([args.element.childNodes[index]], 'e-active');\n }\n }\n else {\n removeClass([args.element.childNodes[index]], 'e-active');\n }\n }\n proxy.parent.notify(events.beforeDropDownOpen, args);\n if (Browser.isDevice && !args.element.parentElement.classList.contains(classes.CLS_QUICK_DROPDOWN)) {\n var popupInst = getInstance(args.element.parentElement, Popup);\n popupInst.relateTo = document.body;\n popupInst.position = { X: 0, Y: 0 };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'none', Y: 'none' };\n popupInst.offsetY = 4;\n _this.setIsModel(args.element.parentElement);\n }\n },\n close: this.dropDownClose.bind(this),\n open: this.dropDownOpen.bind(this),\n beforeItemRender: this.beforeDropDownItemRender.bind(this)\n });\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n return dropDown;\n };\n ToolbarRenderer.prototype.onPopupOverlay = function (args) {\n closest(this.popupOverlay, '.e-popup-container').style.display = 'none';\n this.popupOverlay.style.display = 'none';\n removeClass([this.popupOverlay], 'e-popup-overlay');\n };\n ToolbarRenderer.prototype.setIsModel = function (element) {\n if (!closest(element, '.e-popup-container')) {\n var popupContainer = this.parent.createElement('div', {\n className: 'e-rte-modal-popup e-popup-container e-center'\n });\n element.parentNode.insertBefore(popupContainer, element);\n popupContainer.appendChild(element);\n popupContainer.style.zIndex = element.style.zIndex;\n popupContainer.style.display = 'flex';\n element.style.position = 'relative';\n addClass([element], 'e-popup-modal');\n this.popupOverlay = this.parent.createElement('div', { className: 'e-popup-overlay' });\n this.popupOverlay.style.zIndex = (parseInt(element.style.zIndex, null) - 1).toString();\n this.popupOverlay.style.display = 'block';\n popupContainer.appendChild(this.popupOverlay);\n EventHandler.add(this.popupOverlay, 'click touchmove', this.onPopupOverlay, this);\n }\n else {\n element.parentElement.style.display = 'flex';\n element.nextElementSibling.style.display = 'block';\n addClass([element.nextElementSibling], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.paletteSelection = function (dropDownArgs, currentElement) {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var colorbox = [].slice.call(selectAll('.e-tile', ele.parentElement));\n removeClass(colorbox, 'e-selected');\n var style = currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n (colorbox.filter(function (colorbox) {\n if (colorbox.style.backgroundColor === style) {\n addClass([colorbox], 'e-selected');\n }\n }));\n };\n ToolbarRenderer.prototype.renderColorPickerDropDown = function (args, item, colorPicker) {\n var _this = this;\n var proxy = this;\n var css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');\n css += (' ' + ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_DROPDOWN : CLS_FONT_COLOR_DROPDOWN));\n var content = proxy.parent.createElement('span', { className: CLS_COLOR_CONTENT });\n var inlineEle = proxy.parent.createElement('span', { className: args.cssClass });\n var range;\n inlineEle.style.borderBottomColor = (item === 'backgroundcolor') ?\n proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n content.appendChild(inlineEle);\n var dropDown = new DropDownButton({\n target: colorPicker.element.parentElement,\n cssClass: css,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n beforeOpen: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n dropDownArgs.cancel = true;\n return;\n }\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n proxy.currentElement = dropDown.element;\n proxy.currentDropdown = dropDown;\n proxy.paletteSelection(dropDownArgs, proxy.currentElement);\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n dropDownArgs.cancel = true;\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || closest(range.startContainer.parentNode, 'td')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n else {\n if (Browser.isDevice) {\n var popupInst = getInstance(dropDownArgs.element.parentElement, Popup);\n popupInst.relateTo = document.body;\n popupInst.position = { X: 0, Y: 0 };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n _this.setIsModel(dropDownArgs.element.parentElement);\n }\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var inst = getInstance(ele, ColorPicker);\n inst.showButtons = (dropDownArgs.element.querySelector('.e-color-palette')) ? false : true;\n }\n dropDownArgs.element.onclick = function (args) {\n if (args.target.classList.contains('e-cancel')) {\n dropDown.toggle();\n }\n };\n },\n open: function (dropDownArgs) {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var focusEle;\n if (dropDownArgs.element.querySelector('.e-color-palette')) {\n focusEle = ele.parentElement.querySelector('.e-palette');\n }\n else {\n focusEle = ele.parentElement.querySelector('e-handler');\n }\n if (focusEle) {\n focusEle.focus();\n }\n },\n beforeClose: function (dropDownArgs) {\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n /* tslint:enable */\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || closest(range.startContainer.parentNode, 'td')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n },\n close: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n var dropElement = closest(dropDownArgs.element.parentElement, '.e-popup-container');\n if (dropElement) {\n dropElement.style.display = 'none';\n dropElement.lastElementChild.style.display = 'none';\n removeClass([dropElement.lastElementChild], 'e-popup-overlay');\n }\n }\n });\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n dropDown.element.insertBefore(content, dropDown.element.querySelector('.e-caret'));\n args.element.tabIndex = -1;\n dropDown.element.onmousedown = function () {\n proxy.parent.notify(events.selectionSave, {});\n };\n return dropDown;\n };\n ToolbarRenderer.prototype.renderColorPicker = function (args, item) {\n var _this = this;\n var proxy = this;\n this.colorPicker = new ColorPicker({\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n inline: true,\n created: function () {\n var value = (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n _this.colorPicker.setProperties({ value: value });\n },\n mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),\n modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),\n beforeTileRender: function (args) {\n args.element.classList.add(CLS_COLOR_PALETTE);\n },\n change: function (colorPickerArgs) {\n /* tslint:disable */\n var colorpickerValue = Browser.info.name === 'msie' || Browser.info.name === 'edge' || isIDevice() ? colorPickerArgs.currentValue.rgba : colorPickerArgs.currentValue.hex;\n /* tslint:enable */\n colorPickerArgs.item = {\n command: args.command,\n subCommand: args.subCommand,\n value: colorpickerValue\n };\n proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || closest(range.startContainer.parentNode, 'td')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, colorPickerArgs);\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, colorPickerArgs);\n }\n proxy.currentDropdown.toggle();\n },\n beforeModeSwitch: function (args) {\n _this.colorPicker.showButtons = args.mode === 'Palette' ? false : true;\n }\n });\n this.colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;\n this.colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :\n this.parent.fontColor.colorCode;\n this.colorPicker.cssClass = (item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER;\n this.colorPicker.createElement = this.parent.createElement;\n this.colorPicker.appendTo(document.body.querySelector(args.target));\n return this.colorPicker;\n };\n /**\n * The function is used to render RichTextEditor toolbar\n */\n ToolbarRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_TOOLBAR);\n };\n /**\n * Get the toolbar element of RichTextEditor\n * @return {Element}\n */\n ToolbarRenderer.prototype.getPanel = function () {\n return this.toolbarPanel;\n };\n /**\n * Set the toolbar element of RichTextEditor\n * @param {Element} panel\n */\n ToolbarRenderer.prototype.setPanel = function (panel) {\n this.toolbarPanel = panel;\n };\n return ToolbarRenderer;\n}());\nexport { ToolbarRenderer };\n","import { RenderType } from '../base/enum';\nimport { CLS_HR_SEPARATOR } from '../base/classes';\nimport * as events from '../base/constant';\nimport { getTooltipText } from '../base/util';\nimport { tools, templateItems } from '../models/items';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar BaseToolbar = /** @class */ (function () {\n function BaseToolbar(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n BaseToolbar.prototype.addEventListener = function () {\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n BaseToolbar.prototype.removeEventListener = function () {\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n BaseToolbar.prototype.setRtl = function (args) {\n if (!isNullOrUndefined(this.toolbarObj)) {\n this.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n BaseToolbar.prototype.getTemplateObject = function (itemStr, container) {\n var tagName;\n switch (itemStr) {\n case 'fontcolor':\n case 'backgroundcolor':\n tagName = 'span';\n break;\n default:\n tagName = 'button';\n break;\n }\n return {\n command: tools[itemStr].command,\n subCommand: tools[itemStr].subCommand,\n template: this.parent.createElement(tagName, { id: this.parent.getID() + '_' + container + '_' + tools[itemStr].id }).outerHTML,\n tooltipText: getTooltipText(itemStr, this.locator)\n };\n };\n BaseToolbar.prototype.getObject = function (item, container) {\n var itemStr = item.toLowerCase();\n if (templateItems.indexOf(itemStr) !== -1) {\n return this.getTemplateObject(itemStr, container);\n }\n else {\n switch (itemStr) {\n case '|':\n return { type: 'Separator' };\n case '-':\n return { type: 'Separator', cssClass: CLS_HR_SEPARATOR };\n default:\n return {\n id: this.parent.getID() + '_' + container + '_' + tools[itemStr].id,\n prefixIcon: tools[itemStr].icon,\n tooltipText: getTooltipText(itemStr, this.locator),\n command: tools[itemStr].command,\n subCommand: tools[itemStr].subCommand\n };\n }\n }\n };\n /**\n * @hidden\n */\n BaseToolbar.prototype.getItems = function (tbItems, container) {\n if (this.parent.toolbarSettings.items.length < 1) {\n return [];\n }\n var items = [];\n for (var _i = 0, tbItems_1 = tbItems; _i < tbItems_1.length; _i++) {\n var item = tbItems_1[_i];\n switch (typeof item) {\n case 'string':\n items.push(this.getObject(item, container));\n break;\n default:\n items.push(item);\n }\n }\n return items;\n };\n BaseToolbar.prototype.getToolbarOptions = function (args) {\n return {\n target: args.target,\n rteToolbarObj: this,\n items: this.getItems(args.items, args.container),\n overflowMode: args.mode,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n };\n };\n BaseToolbar.prototype.render = function (args) {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.toolbarRenderer.renderToolbar(this.getToolbarOptions(args));\n };\n return BaseToolbar;\n}());\nexport { BaseToolbar };\n","import { addClass, removeClass, select } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport { getIndex } from '../base/util';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getDropDownValue, getFormattedFontSize, getTooltipText } from '../base/util';\nimport * as model from '../models/items';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar DropDownButtons = /** @class */ (function () {\n function DropDownButtons(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n DropDownButtons.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n DropDownButtons.prototype.beforeRender = function (args) {\n var item = args.item;\n if (item.class) {\n addClass([args.element], item.class);\n }\n if (item.command === 'Alignments' || item.subCommand === 'JustifyLeft'\n || item.subCommand === 'JustifyRight' || item.subCommand === 'JustifyCenter') {\n args.element.setAttribute('title', getTooltipText(item.subCommand.toLocaleLowerCase(), this.locator));\n }\n };\n DropDownButtons.prototype.dropdownContent = function (width, type, content) {\n return ('' +\n '' + content + '');\n };\n DropDownButtons.prototype.renderDropDowns = function (args) {\n var _this = this;\n this.initializeInstance();\n var type = args.containerType;\n var tbElement = args.container;\n model.templateItems.forEach(function (item) {\n var targetElement = undefined;\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'formats':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Formats', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatItem = _this.parent.format.types.slice();\n formatItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Formats', enumerable: true }, subCommand: { value: item.value, enumerable: true }\n });\n });\n _this.formatDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-formats e-icons' : ''),\n content: _this.dropdownContent(_this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItem, _this.parent.format.default, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FORMATS_TB_BTN,\n itemName: 'Formats',\n items: formatItem,\n element: targetElement\n });\n break;\n case 'fontname':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontName', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontItem = _this.parent.fontFamily.items.slice();\n fontItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontName', enumerable: true }\n });\n });\n _this.fontNameDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-font-name e-icons' : ''),\n content: _this.dropdownContent(_this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItem, _this.parent.fontFamily.default, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_NAME_TB_BTN,\n itemName: 'FontName',\n items: fontItem,\n element: targetElement\n });\n break;\n case 'fontsize':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontSize', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontsize = _this.parent.fontSize.items.slice();\n fontsize.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontSize', enumerable: true }\n });\n });\n _this.fontSizeDropDown = _this.toolbarRenderer.renderDropDownButton({\n content: _this.dropdownContent(_this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, _this.parent.fontSize.default, 'text', 'value'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_SIZE_TB_BTN,\n itemName: 'FontSize',\n items: fontsize,\n element: targetElement\n });\n break;\n case 'alignments':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Alignments', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n _this.alignDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS,\n itemName: 'Alignments',\n items: model.alignmentItems,\n element: targetElement\n });\n break;\n case 'align':\n _this.imageAlignmentDropDown(type, tbElement, targetElement);\n break;\n case 'display':\n _this.imageDisplayDropDown(type, tbElement, targetElement);\n break;\n case 'tablerows':\n _this.rowDropDown(type, tbElement, targetElement);\n break;\n case 'tablecolumns':\n _this.columnDropDown(type, tbElement, targetElement);\n break;\n case 'tablecellverticalalign':\n _this.verticalAlignDropDown(type, tbElement, targetElement);\n break;\n case 'styles':\n _this.tableStylesDropDown(type, tbElement, targetElement);\n break;\n }\n }\n });\n };\n DropDownButtons.prototype.rowDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableRows', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableRowsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-rows e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableRows',\n items: model.tableRowsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.columnDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableColumns', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableColumnsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-columns e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableColumns',\n items: model.tableColumnsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.verticalAlignDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableCellVerticalAlign', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableCellVerticalAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-cell-ver-align e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableCellVerticalAlign',\n items: model.TableCellVerticalAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageDisplayDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Display', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.displayDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-display e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Display',\n items: model.imageDisplayItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageAlignmentDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Align', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Align',\n items: model.imageAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.tableStylesDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Styles', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-style e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Styles',\n items: this.parent.tableSettings.styles,\n element: targetElement\n });\n };\n DropDownButtons.prototype.removeDropDownClasses = function (target) {\n removeClass([target], [\n classes.CLS_DROPDOWN_BTN,\n classes.CLS_DROPDOWN_POPUP,\n classes.CLS_DROPDOWN_ICONS,\n classes.CLS_DROPDOWN_ITEMS\n ]);\n };\n DropDownButtons.prototype.destroyDropDowns = function () {\n if (this.formatDropDown) {\n this.removeDropDownClasses(this.formatDropDown.element);\n this.formatDropDown.destroy();\n }\n if (this.fontNameDropDown) {\n this.removeDropDownClasses(this.fontNameDropDown.element);\n this.fontNameDropDown.destroy();\n }\n if (this.fontSizeDropDown) {\n this.removeDropDownClasses(this.fontSizeDropDown.element);\n this.fontSizeDropDown.destroy();\n }\n if (this.alignDropDown) {\n this.removeDropDownClasses(this.alignDropDown.element);\n this.alignDropDown.destroy();\n }\n if (this.imageAlignDropDown) {\n this.removeDropDownClasses(this.imageAlignDropDown.element);\n this.imageAlignDropDown.destroy();\n }\n if (this.displayDropDown) {\n this.removeDropDownClasses(this.displayDropDown.element);\n this.displayDropDown.destroy();\n }\n if (this.tableRowsDropDown) {\n this.removeDropDownClasses(this.tableRowsDropDown.element);\n this.tableRowsDropDown.destroy();\n }\n if (this.tableColumnsDropDown) {\n this.removeDropDownClasses(this.tableColumnsDropDown.element);\n this.tableColumnsDropDown.destroy();\n }\n if (this.tableCellVerticalAlignDropDown) {\n this.removeDropDownClasses(this.tableCellVerticalAlignDropDown.element);\n this.tableCellVerticalAlignDropDown.destroy();\n }\n };\n DropDownButtons.prototype.setRtl = function (args) {\n if (this.formatDropDown) {\n this.formatDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontNameDropDown) {\n this.fontNameDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontSizeDropDown) {\n this.fontSizeDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.alignDropDown) {\n this.alignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageAlignDropDown) {\n this.imageAlignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.displayDropDown) {\n this.displayDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n DropDownButtons.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.beforeDropDownItemRender, this.beforeRender, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n DropDownButtons.prototype.onIframeMouseDown = function () {\n dispatchEvent(document, 'mousedown');\n };\n DropDownButtons.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.beforeDropDownItemRender, this.beforeRender);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return DropDownButtons;\n}());\nexport { DropDownButtons };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[name])) {\n this.services[name] = type;\n }\n };\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n this.rendererMap[rName] = type;\n }\n };\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\n/**\n * `ToolbarAction` module is used to toolbar click action\n */\nvar ToolbarAction = /** @class */ (function () {\n function ToolbarAction(parent) {\n this.parent = parent;\n this.addEventListener();\n this.serviceLocator = new ServiceLocator;\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n }\n ToolbarAction.prototype.addEventListener = function () {\n this.parent.on(events.toolbarClick, this.toolbarClick, this);\n this.parent.on(events.dropDownSelect, this.dropDownSelect, this);\n this.parent.on(events.colorPickerChanged, this.renderSelection, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ToolbarAction.prototype.toolbarClick = function (args) {\n if (isNOU(args.item)) {\n return;\n }\n if (!isNOU(args.item.controlParent)) {\n var activeEle = args.item.controlParent\n .activeEle;\n if (activeEle) {\n activeEle.tabIndex = -1;\n }\n }\n this.parent.notify(events.htmlToolbarClick, args);\n this.parent.notify(events.markdownToolbarClick, args);\n };\n ToolbarAction.prototype.dropDownSelect = function (e) {\n this.parent.notify(events.selectionRestore, {});\n if (!(document.body.contains(document.body.querySelector('.e-rte-quick-toolbar'))\n && e.item && (e.item.command === 'Images' || e.item.command === 'Display' || e.item.command === 'Table'))) {\n this.parent.formatter.process(this.parent, e, e.originalEvent, null);\n }\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.renderSelection = function (args) {\n this.parent.notify(events.selectionRestore, {});\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarClick, this.toolbarClick);\n this.parent.off(events.dropDownSelect, this.dropDownSelect);\n this.parent.off(events.colorPickerChanged, this.renderSelection);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ToolbarAction;\n}());\nexport { ToolbarAction };\n","import { addClass, Browser, EventHandler, detach, removeClass, select, selectAll, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType, ToolbarType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, getTBarItemsIndex, getCollection } from '../base/util';\nimport * as model from '../models/items';\nimport { ToolbarRenderer } from '../renderer/toolbar-renderer';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ToolbarAction } from './toolbar-action';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.parent = parent;\n this.isToolbar = false;\n this.locator = serviceLocator;\n this.isTransformChild = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.renderFactory.addRenderer(RenderType.Toolbar, new ToolbarRenderer(this.parent));\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.baseToolbar = new BaseToolbar(this.parent, this.locator);\n this.addEventListener();\n }\n Toolbar.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editableElement = this.contentRenderer.getEditPanel();\n this.editPanel = this.contentRenderer.getPanel();\n };\n Toolbar.prototype.toolbarBindEvent = function () {\n this.keyBoardModule = new KeyboardEvents(this.getToolbarElement(), {\n keyAction: this.toolBarKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n };\n Toolbar.prototype.toolBarKeyDown = function (e) {\n switch (e.action) {\n case 'escape':\n this.parent.contentModule.getEditPanel().focus();\n break;\n }\n };\n Toolbar.prototype.createToolbarElement = function () {\n this.tbElement = this.parent.createElement('div', { id: this.parent.getID() + '_toolbar' });\n if (!Browser.isDevice && this.parent.inlineMode.enable) {\n return;\n }\n else {\n if (this.parent.toolbarSettings.enableFloating && !this.parent.inlineMode.enable) {\n this.tbWrapper = this.parent.createElement('div', {\n id: this.parent.getID() + '_toolbar_wrapper',\n innerHTML: this.tbElement.outerHTML,\n className: classes.CLS_TB_WRAP\n });\n this.tbElement = this.tbWrapper.firstElementChild;\n this.parent.element.insertBefore(this.tbWrapper, this.editPanel);\n }\n else {\n this.parent.element.insertBefore(this.tbElement, this.editPanel);\n }\n }\n };\n Toolbar.prototype.getToolbarMode = function () {\n var tbMode;\n switch (this.parent.toolbarSettings.type) {\n case ToolbarType.Expand:\n tbMode = 'Extended';\n break;\n default:\n tbMode = 'MultiRow';\n }\n return tbMode;\n };\n Toolbar.prototype.checkToolbarResponsive = function (ele) {\n if (!Browser.isDevice) {\n return false;\n }\n this.baseToolbar.render({\n container: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items,\n mode: 'MultiRow',\n target: ele\n });\n addClass([ele], ['e-rte-tb-mobile']);\n if (this.parent.inlineMode.enable) {\n this.addFixedTBarClass();\n }\n else {\n addClass([ele], [classes.CLS_TB_STATIC]);\n }\n this.wireEvents();\n this.dropDownModule.renderDropDowns({\n container: ele,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n return true;\n };\n Toolbar.prototype.checkIsTransformChild = function () {\n this.isTransformChild = false;\n var transformElements = selectAll('[style*=\"transform\"]', document);\n for (var i = 0; i < transformElements.length; i++) {\n if (transformElements[i].contains(this.parent.element)) {\n this.isTransformChild = true;\n break;\n }\n }\n };\n Toolbar.prototype.toggleFloatClass = function (e) {\n var topValue;\n var isBody = false;\n var isFloat = false;\n var scrollParent;\n var floatOffset = this.parent.floatingToolbarOffset;\n if (e && e.target !== document) {\n scrollParent = e.target;\n }\n else {\n isBody = true;\n scrollParent = document.body;\n }\n var tbHeight = this.getToolbarHeight() + this.getExpandTBarPopHeight();\n if (this.isTransformChild) {\n topValue = 0;\n var scrollParentRelativeTop = 0;\n var trgHeight = this.parent.element.offsetHeight;\n if (isBody) {\n var bodyStyle = window.getComputedStyle(scrollParent);\n scrollParentRelativeTop = parseFloat(bodyStyle.marginTop.split('px')[0]) + parseFloat(bodyStyle.paddingTop.split('px')[0]);\n }\n var targetTop = this.parent.element.getBoundingClientRect().top;\n var scrollParentYOffset = (Browser.isMSPointer && isBody) ? window.pageYOffset : scrollParent.parentElement.scrollTop;\n var scrollParentRect = scrollParent.getBoundingClientRect();\n var scrollParentTop = (!isBody) ? scrollParentRect.top : (scrollParentRect.top + scrollParentYOffset);\n var outOfRange = ((targetTop - ((!isBody) ? scrollParentTop : 0)) + trgHeight > tbHeight + floatOffset) ? false : true;\n if (targetTop > (scrollParentTop + floatOffset) || targetTop < -trgHeight || ((targetTop < 0) ? outOfRange : false)) {\n isFloat = false;\n removeClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n }\n else if (targetTop < (scrollParentTop + floatOffset)) {\n if (targetTop < 0) {\n topValue = (-targetTop) + scrollParentTop;\n }\n else {\n topValue = scrollParentTop - targetTop;\n }\n topValue = (isBody) ? topValue - scrollParentRelativeTop : topValue;\n addClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n isFloat = true;\n }\n }\n else {\n var parent_1 = this.parent.element.getBoundingClientRect();\n if (window.innerHeight < parent_1.top) {\n return;\n }\n topValue = (e && e.target !== document) ? scrollParent.getBoundingClientRect().top : 0;\n if ((parent_1.bottom < (floatOffset + tbHeight + topValue)) || parent_1.bottom < 0 || parent_1.top > floatOffset + topValue) {\n isFloat = false;\n }\n else if (parent_1.top < floatOffset) {\n isFloat = true;\n }\n }\n if (!isFloat) {\n removeClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { top: 0 + 'px', width: '100%' });\n }\n else {\n addClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { width: this.parent.element.offsetWidth + 'px', top: (floatOffset + topValue) + 'px' });\n }\n };\n Toolbar.prototype.renderToolbar = function () {\n this.initializeInstance();\n this.createToolbarElement();\n if (this.checkToolbarResponsive(this.tbElement)) {\n return;\n }\n if (this.parent.inlineMode.enable) {\n this.parent.notify(events.renderInlineToolbar, {});\n }\n else {\n this.baseToolbar.render({\n container: 'toolbar',\n items: this.parent.toolbarSettings.items,\n mode: this.getToolbarMode(),\n target: this.tbElement\n });\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.checkIsTransformChild();\n this.toggleFloatClass();\n }\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n }\n }\n }\n this.wireEvents();\n if (this.parent.inlineMode.enable) {\n this.addFixedTBarClass();\n }\n if (!this.parent.inlineMode.enable) {\n this.dropDownModule.renderDropDowns({\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.refreshToolbarOverflow();\n }\n };\n Toolbar.prototype.addFixedTBarClass = function () {\n addClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n Toolbar.prototype.removeFixedTBarClass = function () {\n removeClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n Toolbar.prototype.showFixedTBar = function () {\n addClass([this.tbElement], [classes.CLS_SHOW]);\n if (Browser.isIos) {\n addClass([this.tbElement], [classes.CLS_TB_IOS_FIX]);\n }\n };\n Toolbar.prototype.hideFixedTBar = function () {\n (!this.isToolbar) ? removeClass([this.tbElement], [classes.CLS_SHOW, classes.CLS_TB_IOS_FIX]) : this.isToolbar = false;\n };\n Toolbar.prototype.updateItem = function (args) {\n var item = model.tools[args.updateItem.toLocaleLowerCase()];\n var trgItem = model.tools[args.targetItem.toLocaleLowerCase()];\n var index = getTBarItemsIndex(getCollection(trgItem.subCommand), args.baseToolbar.toolbarObj.items)[0];\n if (!isNOU(index)) {\n args.baseToolbar.toolbarObj.items[index].id = this.parent.getID() + '_' + item.id;\n args.baseToolbar.toolbarObj.items[index].prefixIcon = item.icon;\n args.baseToolbar.toolbarObj.items[index].tooltipText = item.tooltip;\n args.baseToolbar.toolbarObj.items[index].subCommand = item.subCommand;\n args.baseToolbar.toolbarObj.dataBind();\n }\n else {\n this.addTBarItem(args, 0);\n }\n };\n Toolbar.prototype.updateToolbarStatus = function (args) {\n var options = {\n args: args,\n dropDownModule: this.dropDownModule,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.tbElement),\n tbItems: this.baseToolbar.toolbarObj.items\n };\n if (this.parent.inlineMode.enable) {\n setToolbarStatus(options, true);\n }\n else {\n setToolbarStatus(options, false);\n }\n };\n Toolbar.prototype.fullScreen = function (e) {\n this.parent.fullScreenModule.showFullScreen(e);\n };\n Toolbar.prototype.hideScreen = function (e) {\n this.parent.fullScreenModule.hideFullScreen(e);\n };\n Toolbar.prototype.getBaseToolbar = function () {\n return this.baseToolbar;\n };\n Toolbar.prototype.addTBarItem = function (args, index) {\n args.baseToolbar.toolbarObj.addItems([args.baseToolbar.getObject(args.updateItem, 'toolbar')], index);\n };\n Toolbar.prototype.enableTBarItems = function (baseToolbar, items, isEnable) {\n var trgItems = getTBarItemsIndex(getCollection(items), baseToolbar.toolbarObj.items);\n this.tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n for (var i = 0; i < trgItems.length; i++) {\n var item = this.tbItems[trgItems[i]];\n if (item) {\n baseToolbar.toolbarObj.enableItems(item, isEnable);\n }\n }\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n Toolbar.prototype.removeTBarItems = function (items) {\n var trgItems = getTBarItemsIndex(getCollection(items), this.baseToolbar.toolbarObj.items);\n this.tbItems = selectAll('.' + classes.CLS_TB_ITEM, this.parent.element);\n for (var i = 0; i < trgItems.length; i++) {\n this.baseToolbar.toolbarObj.removeItems(this.tbItems[trgItems[i]]);\n }\n };\n Toolbar.prototype.getExpandTBarPopHeight = function () {\n var popHeight = 0;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand && this.tbElement.classList.contains('e-extended-toolbar')) {\n var expandPopup = select('.e-toolbar-extended', this.tbElement);\n if (expandPopup && this.tbElement.classList.contains('e-expand-open')\n || expandPopup && expandPopup.classList.contains('e-popup-open')) {\n addClass([expandPopup], [classes.CLS_VISIBLE]);\n popHeight = popHeight + expandPopup.offsetHeight;\n removeClass([expandPopup], [classes.CLS_VISIBLE]);\n }\n else {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n }\n return popHeight;\n };\n Toolbar.prototype.getToolbarHeight = function () {\n return this.tbElement.offsetHeight;\n };\n Toolbar.prototype.getToolbarElement = function () {\n return select('.' + classes.CLS_TOOLBAR, this.parent.element);\n };\n Toolbar.prototype.refreshToolbarOverflow = function () {\n this.baseToolbar.toolbarObj.refreshOverflow();\n };\n Toolbar.prototype.isToolbarDestroyed = function () {\n return this.baseToolbar.toolbarObj && !this.baseToolbar.toolbarObj.isDestroyed;\n };\n Toolbar.prototype.destroyToolbar = function () {\n if (this.isToolbarDestroyed()) {\n this.parent.unWireScrollElementsEvents();\n this.unWireEvents();\n this.parent.notify(events.destroyColorPicker, {});\n this.dropDownModule.destroyDropDowns();\n this.baseToolbar.toolbarObj.destroy();\n this.removeEventListener();\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Toolbar.prototype.destroy = function () {\n if (this.isToolbarDestroyed()) {\n this.destroyToolbar();\n if (this.keyBoardModule) {\n this.keyBoardModule.destroy();\n }\n }\n };\n Toolbar.prototype.scrollHandler = function (e) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.toggleFloatClass(e.args);\n }\n };\n Toolbar.prototype.mouseDownHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.showFixedTBar();\n }\n };\n Toolbar.prototype.focusChangeHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.isToolbar = false;\n this.hideFixedTBar();\n }\n };\n Toolbar.prototype.dropDownBeforeOpenHandler = function () {\n this.isToolbar = true;\n };\n Toolbar.prototype.toolbarMouseDownHandler = function (e) {\n var trg = closest(e.target, '.e-hor-nav');\n if (trg && this.parent.toolbarSettings.type === ToolbarType.Expand && !isNOU(trg)) {\n if (!trg.classList.contains('e-nav-active')) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', false);\n }\n else {\n addClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', true);\n }\n }\n else if (Browser.isDevice || this.parent.inlineMode.enable) {\n this.isToolbar = true;\n }\n if (isNOU(trg) && this.parent.toolbarSettings.type === ToolbarType.Expand) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.tbElement, 'click mousedown', this.toolbarMouseDownHandler, this);\n };\n Toolbar.prototype.unWireEvents = function () {\n EventHandler.remove(this.tbElement, 'click mousedown', this.toolbarMouseDownHandler);\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.dropDownModule = new DropDownButtons(this.parent, this.locator);\n this.toolbarActionModule = new ToolbarAction(this.parent);\n this.parent.on(events.initialEnd, this.renderToolbar, this);\n if (!this.parent.inlineMode.enable) {\n this.parent.on(events.scroll, this.scrollHandler, this);\n this.parent.on(events.bindOnEnd, this.toolbarBindEvent, this);\n this.parent.on(events.toolbarUpdated, this.updateToolbarStatus, this);\n }\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.refreshBegin, this.onRefresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.enableFullScreen, this.fullScreen, this);\n this.parent.on(events.disableFullScreen, this.hideScreen, this);\n this.parent.on(events.updateToolbarItem, this.updateItem, this);\n this.parent.on(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler, this);\n this.parent.on(events.expandPopupClick, this.parent.setContentHeight, this.parent);\n this.parent.on(events.focusChange, this.focusChangeHandler, this);\n this.parent.on(events.mouseDown, this.mouseDownHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseDownHandler, this);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderToolbar);\n if (!this.parent.inlineMode.enable) {\n this.parent.off(events.scroll, this.scrollHandler);\n this.parent.off(events.bindOnEnd, this.toolbarBindEvent);\n this.parent.off(events.toolbarUpdated, this.updateToolbarStatus);\n }\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.enableFullScreen, this.parent.fullScreenModule.showFullScreen);\n this.parent.off(events.disableFullScreen, this.parent.fullScreenModule.hideFullScreen);\n this.parent.off(events.updateToolbarItem, this.updateItem);\n this.parent.off(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler);\n this.parent.off(events.expandPopupClick, this.parent.setContentHeight);\n this.parent.off(events.focusChange, this.focusChangeHandler);\n this.parent.off(events.mouseDown, this.mouseDownHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseDownHandler);\n };\n Toolbar.prototype.onRefresh = function () {\n this.refreshToolbarOverflow();\n this.parent.setContentHeight();\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (tbElement) {\n this.destroyToolbar();\n detach(tbElement);\n if (tbWrapper) {\n detach(tbWrapper);\n }\n this.addEventListener();\n this.renderToolbar();\n this.parent.wireScrollElementsEvents();\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\nimport { Base } from '@syncfusion/ej2-base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222,\n ']': 221,\n '[': 219,\n '=': 187\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
    ;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n }\n }\n }\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { select, detach } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getIndex } from '../base/util';\nimport { templateItems, tools } from '../models/items';\n/**\n * `Color Picker` module is used to handle ColorPicker actions.\n */\nvar ColorPickerInput = /** @class */ (function () {\n function ColorPickerInput(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n ColorPickerInput.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n ColorPickerInput.prototype.renderColorPickerInput = function (args) {\n var _this = this;\n this.initializeInstance();\n var suffixID = args.containerType;\n var tbElement = args.container;\n templateItems.forEach(function (item) {\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'fontcolor':\n var targetID = _this.parent.getID() + '_' + suffixID + '_FontColor_Target';\n var fontNode = _this.parent.createElement('input');\n fontNode.id = targetID;\n fontNode.classList.add(classes.CLS_FONT_COLOR_TARGET);\n document.body.appendChild(fontNode);\n var args_1 = {\n cssClass: tools[item].icon + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: tools[item].value,\n command: tools[item].command,\n subCommand: tools[item].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_FontColor', tbElement),\n target: ('#' + targetID)\n };\n _this.fontColorPicker = _this.toolbarRenderer.renderColorPicker(args_1, 'fontcolor');\n _this.fontColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(args_1, 'fontcolor', _this.fontColorPicker);\n break;\n case 'backgroundcolor':\n targetID = _this.parent.getID() + '_' + suffixID + '_BackgroundColor_Target';\n var backNode = _this.parent.createElement('input');\n backNode.id = targetID;\n backNode.classList.add(classes.CLS_BACKGROUND_COLOR_TARGET);\n document.body.appendChild(backNode);\n args_1 = {\n cssClass: tools[item].icon + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: tools[item].value,\n command: tools[item].command,\n subCommand: tools[item].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_BackgroundColor', tbElement),\n target: ('#' + targetID)\n };\n _this.backgroundColorPicker = _this.toolbarRenderer.renderColorPicker(args_1, 'backgroundcolor');\n _this.backgroundColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(args_1, 'backgroundcolor', _this.backgroundColorPicker);\n break;\n }\n }\n });\n };\n ColorPickerInput.prototype.destroy = function () {\n this.removeEventListener();\n this.destroyColorPicker();\n };\n ColorPickerInput.prototype.destroyColorPicker = function () {\n if (this.fontColorPicker && !this.fontColorPicker.isDestroyed) {\n this.fontColorPicker.destroy();\n }\n if (this.backgroundColorPicker && !this.backgroundColorPicker.isDestroyed) {\n this.backgroundColorPicker.destroy();\n }\n if (this.fontColorDropDown && !this.fontColorDropDown.isDestroyed) {\n var innerEle = this.fontColorDropDown.element.querySelector('.e-rte-color-content');\n if (innerEle) {\n detach(innerEle);\n }\n this.fontColorDropDown.destroy();\n }\n if (this.backgroundColorDropDown && !this.backgroundColorDropDown.isDestroyed) {\n var innerEle = this.backgroundColorDropDown.element.querySelector('.e-rte-color-content');\n if (innerEle) {\n detach(innerEle);\n }\n this.backgroundColorDropDown.destroy();\n }\n };\n ColorPickerInput.prototype.setRtl = function (args) {\n if (this.fontColorPicker) {\n this.fontColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.fontColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.backgroundColorPicker) {\n this.backgroundColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.backgroundColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n ColorPickerInput.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRenderComplete, this.renderColorPickerInput, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.destroyColorPicker, this.destroyColorPicker, this);\n };\n ColorPickerInput.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRenderComplete, this.renderColorPickerInput);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroyColorPicker, this.destroyColorPicker);\n };\n return ColorPickerInput;\n}());\nexport { ColorPickerInput };\n","import { detach, getUniqueID, append, closest, selectAll, select, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, Browser, isNullOrUndefined, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isCollide } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus } from '../base/util';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ColorPickerInput } from './color-picker';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar BaseQuickToolbar = /** @class */ (function () {\n function BaseQuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.isDOMElement = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.popupRenderer = this.renderFactory.getRenderer(RenderType.Popup);\n this.dropDownButtons = new DropDownButtons(this.parent, this.locator);\n this.colorPickerObj = new ColorPickerInput(this.parent, this.locator);\n }\n BaseQuickToolbar.prototype.appendPopupContent = function () {\n this.toolbarElement = this.parent.createElement('div', { className: classes.CLS_QUICK_TB });\n this.element.appendChild(this.toolbarElement);\n };\n BaseQuickToolbar.prototype.render = function (args) {\n var className;\n if (args.popupType === 'Image') {\n className = classes.CLS_IMAGE_POP;\n }\n else if (args.popupType === 'Inline') {\n className = classes.CLS_INLINE_POP;\n }\n else {\n className = '';\n }\n var popupId = getUniqueID(args.popupType + '_Quick_Popup');\n this.stringItems = args.toolbarItems;\n this.element = this.parent.createElement('div', { id: popupId, className: className + ' ' + classes.CLS_RTE_ELEMENTS });\n this.appendPopupContent();\n this.createToolbar(args.toolbarItems, args.mode);\n this.popupRenderer.renderPopup(this);\n this.addEventListener();\n };\n BaseQuickToolbar.prototype.createToolbar = function (items, mode) {\n this.quickTBarObj = new BaseToolbar(this.parent, this.locator);\n this.quickTBarObj.render({\n container: 'quick',\n target: this.toolbarElement,\n items: items,\n mode: mode\n });\n this.quickTBarObj.toolbarObj.refresh();\n };\n BaseQuickToolbar.prototype.setPosition = function (e) {\n var x;\n var y;\n var imgWrapper = closest(e.target, '.e-img-caption');\n var target = !isNOU(imgWrapper) ? imgWrapper : e.target;\n addClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n var targetOffsetTop = target.offsetTop;\n var parentOffsetTop = window.pageYOffset + e.parentData.top;\n if ((targetOffsetTop - e.editTop) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) - e.popHeight - 5;\n }\n else if (((e.editTop + e.editHeight) - (targetOffsetTop + target.offsetHeight)) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) + target.offsetHeight + 5;\n }\n else {\n y = e.y;\n }\n if (target.offsetWidth > e.popWidth) {\n x = (target.offsetWidth / 2) - (e.popWidth / 2) + e.parentData.left + target.offsetLeft;\n }\n else {\n x = e.parentData.left + target.offsetLeft;\n }\n this.popupObj.position.X = ((x + e.popWidth) > e.parentData.right) ? e.parentData.right - e.popWidth : x;\n this.popupObj.position.Y = y;\n this.popupObj.dataBind();\n removeClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n };\n BaseQuickToolbar.prototype.checkCollision = function (e, viewPort, type) {\n var x;\n var y;\n var parentTop = e.parentData.top;\n var contentTop = e.windowY + parentTop + e.tBarElementHeight;\n var collision = [];\n if (viewPort === 'document') {\n collision = isCollide(e.popup);\n }\n else {\n collision = isCollide(e.popup, e.parentElement);\n }\n for (var i = 0; i < collision.length; i++) {\n switch (collision[i]) {\n case 'top':\n if (viewPort === 'document') {\n y = e.windowY;\n }\n else {\n y = (window.pageYOffset + parentTop) + e.tBarElementHeight;\n }\n break;\n case 'bottom':\n var posY = void 0;\n if (viewPort === 'document') {\n if (type === 'inline') {\n posY = (e.y - e.popHeight - 10);\n }\n else {\n if ((e.windowHeight - (parentTop + e.tBarElementHeight)) > e.popHeight) {\n if ((contentTop - e.windowHeight) > e.popHeight) {\n posY = (contentTop + (e.windowHeight - parentTop)) - e.popHeight;\n }\n else {\n posY = contentTop;\n }\n }\n else {\n posY = e.windowY + (parentTop + e.tBarElementHeight);\n }\n }\n }\n else {\n if (e.target.tagName !== 'IMG') {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 10;\n }\n else {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 5;\n }\n }\n y = posY;\n break;\n case 'right':\n if (type === 'inline') {\n x = e.windowWidth - (e.popWidth + e.bodyRightSpace + 10);\n }\n else {\n x = e.x - (e.popWidth + e.parentData.left);\n }\n break;\n case 'left':\n if (type === 'inline') {\n x = 0;\n }\n else {\n x = e.parentData.left;\n }\n break;\n }\n }\n this.popupObj.position.X = (x) ? x : this.popupObj.position.X;\n this.popupObj.position.Y = (y) ? y : this.popupObj.position.Y;\n this.popupObj.dataBind();\n };\n BaseQuickToolbar.prototype.showPopup = function (x, y, target) {\n var editPanelTop;\n var editPanelHeight;\n var bodyStyle = window.getComputedStyle(document.body);\n var bodyRight = parseFloat(bodyStyle.marginRight.split('px')[0]) + parseFloat(bodyStyle.paddingRight.split('px')[0]);\n var windowHeight = window.innerHeight;\n var windowWidth = window.innerWidth;\n var parent = this.parent.element;\n var toolbarAvail = !isNullOrUndefined(this.parent.getToolbar());\n var tbHeight = toolbarAvail && this.parent.toolbarModule.getToolbarHeight();\n var expTBHeight = toolbarAvail && this.parent.toolbarModule.getExpandTBarPopHeight();\n var tBarHeight = (toolbarAvail) ? (tbHeight + expTBHeight) : 0;\n addClass([this.element], [classes.CLS_HIDE]);\n if (Browser.isDevice) {\n addClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (this.parent.iframeSettings.enable) {\n var cntEle = this.contentRenderer.getPanel().contentWindow;\n editPanelTop = cntEle.pageYOffset;\n editPanelHeight = cntEle.innerHeight;\n }\n else {\n var cntEle = closest(target, '.' + classes.CLS_RTE_CONTENT);\n editPanelTop = (cntEle) ? cntEle.scrollTop : 0;\n editPanelHeight = (cntEle) ? cntEle.offsetHeight : 0;\n }\n if (!this.parent.inlineMode.enable && !closest(target, 'table')) {\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n this.parent.enableToolbarItem(['Undo', 'Redo']);\n }\n append([this.element], document.body);\n this.popupObj.position.X = x + 20;\n this.popupObj.position.Y = y + ((this.parent.iframeSettings.enable) ? 35 : 20);\n this.popupObj.dataBind();\n this.popupObj.show();\n this.dropDownButtons.renderDropDowns({\n container: this.toolbarElement,\n containerType: 'quick',\n items: this.stringItems\n });\n this.colorPickerObj.renderColorPickerInput({\n container: this.toolbarElement,\n containerType: 'quick',\n items: this.stringItems\n });\n var showPopupData = {\n x: x, y: y,\n target: target,\n editTop: editPanelTop,\n editHeight: editPanelHeight,\n popup: this.popupObj.element,\n popHeight: this.popupObj.element.offsetHeight,\n popWidth: this.popupObj.element.offsetWidth,\n parentElement: parent,\n bodyRightSpace: bodyRight,\n windowY: window.pageYOffset,\n windowHeight: windowHeight,\n windowWidth: windowWidth,\n parentData: parent.getBoundingClientRect(),\n tBarElementHeight: tBarHeight\n };\n if (target.tagName === 'IMG') {\n this.setPosition(showPopupData);\n }\n if (!this.parent.inlineMode.enable) {\n this.checkCollision(showPopupData, 'parent', '');\n }\n this.checkCollision(showPopupData, 'document', ((this.parent.inlineMode.enable) ? 'inline' : ''));\n this.popupObj.hide();\n removeClass([this.element], [classes.CLS_HIDE]);\n this.popupObj.show({ name: 'ZoomIn', duration: 400 });\n setStyleAttribute(this.element, {\n maxWidth: this.parent.element.offsetWidth + 'px'\n });\n addClass([this.element], [classes.CLS_POP]);\n this.isDOMElement = true;\n };\n BaseQuickToolbar.prototype.hidePopup = function () {\n var viewSourcePanel = this.parent.sourceCodeModule.getViewPanel();\n if (Browser.isDevice) {\n removeClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (!isNullOrUndefined(this.parent.getToolbar()) && !this.parent.inlineMode.enable) {\n if (isNullOrUndefined(viewSourcePanel) || viewSourcePanel.style.display === 'none') {\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n }\n }\n this.removeEleFromDOM();\n this.isDOMElement = false;\n };\n /**\n * @hidden\n */\n BaseQuickToolbar.prototype.addQTBarItem = function (item, index) {\n this.quickTBarObj.toolbarObj.addItems(this.quickTBarObj.getItems(item, 'toolbar'), index);\n };\n /**\n * @hidden\n */\n BaseQuickToolbar.prototype.removeQTBarItem = function (index) {\n this.quickTBarObj.toolbarObj.removeItems(index);\n };\n BaseQuickToolbar.prototype.removeEleFromDOM = function () {\n var element = this.popupObj.element;\n if (this.isDOMElement) {\n this.dropDownButtons.destroyDropDowns();\n this.colorPickerObj.destroyColorPicker();\n removeClass([this.element], [classes.CLS_POP]);\n detach(element);\n }\n };\n BaseQuickToolbar.prototype.updateStatus = function (args) {\n var options = {\n args: args,\n dropDownModule: this.dropDownButtons,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.element),\n tbItems: this.quickTBarObj.toolbarObj.items\n };\n setToolbarStatus(options, true);\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.parent.getBaseToolbarObject(), this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * Destroys the Quick toolbar.\n * @method destroy\n * @return {void}\n */\n BaseQuickToolbar.prototype.destroy = function () {\n if (this.popupObj && !this.popupObj.isDestroyed) {\n this.popupObj.destroy();\n this.removeEleFromDOM();\n }\n this.removeEventListener();\n };\n BaseQuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.destroy, this.destroy, this);\n if (this.parent.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n };\n BaseQuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.destroy, this.destroy);\n if (this.parent.inlineMode.enable) {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n };\n return BaseQuickToolbar;\n}());\nexport { BaseQuickToolbar };\n","import { Popup } from '@syncfusion/ej2-popups';\nimport { CLS_QUICK_POP } from '../base/classes';\nimport { popupOpen } from '../base/constant';\n/**\n * `Popup renderer` module is used to render popup in RichTextEditor.\n * @hidden\n */\nvar PopupRenderer = /** @class */ (function () {\n /**\n * Constructor for popup renderer module\n */\n function PopupRenderer(parent) {\n this.parent = parent;\n }\n PopupRenderer.prototype.popupOpen = function () {\n this.parent.notify(popupOpen, this);\n };\n PopupRenderer.prototype.renderPopup = function (args) {\n this.setPanel(args.element);\n this.renderPanel();\n args.popupObj = new Popup(args.element, {\n targetType: 'relative',\n relateTo: this.parent.element,\n open: this.popupOpen.bind(this)\n });\n this.popupObj = args.popupObj;\n args.popupObj.hide();\n };\n /**\n * The function is used to add popup class in Quick Toolbar\n */\n PopupRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_QUICK_POP);\n };\n /**\n * Get the popup element of RichTextEditor\n * @return {Element}\n */\n PopupRenderer.prototype.getPanel = function () {\n return this.popupPanel;\n };\n /**\n * Set the popup element of RichTextEditor\n * @param {Element} panel\n */\n PopupRenderer.prototype.setPanel = function (panel) {\n this.popupPanel = panel;\n };\n return PopupRenderer;\n}());\nexport { PopupRenderer };\n","import { select, isNullOrUndefined, Browser, addClass, removeClass, EventHandler, closest } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport { pageYOffset, hasClass } from '../base/util';\nimport { BaseQuickToolbar } from './base-quick-toolbar';\nimport { PopupRenderer } from '../renderer/popup-renderer';\nimport { CLS_INLINE_POP, CLS_INLINE } from '../base/classes';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar QuickToolbar = /** @class */ (function () {\n function QuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.renderFactory.addRenderer(RenderType.Popup, new PopupRenderer(this.parent));\n this.addEventListener();\n }\n QuickToolbar.prototype.formatItems = function (items) {\n var formattedItems = [];\n items.forEach(function (item) {\n if (typeof item === 'string') {\n switch (item.toLocaleLowerCase()) {\n case 'open':\n formattedItems.push('openLink');\n break;\n case 'edit':\n formattedItems.push('editLink');\n break;\n case 'unlink':\n formattedItems.push('removeLink');\n break;\n default:\n formattedItems.push(item);\n break;\n }\n }\n else {\n formattedItems.push(item);\n }\n });\n return formattedItems;\n };\n QuickToolbar.prototype.getQTBarOptions = function (popType, mode, items, type) {\n return {\n popupType: popType,\n toolbarItems: items,\n mode: mode,\n renderType: type\n };\n };\n QuickToolbar.prototype.createQTBar = function (popupType, mode, items, type) {\n if (items.length < 1) {\n return null;\n }\n var qTBar = new BaseQuickToolbar(this.parent, this.locator);\n qTBar.render(this.getQTBarOptions(popupType, mode, this.formatItems(items), type));\n return qTBar;\n };\n QuickToolbar.prototype.initializeQuickToolbars = function () {\n this.parent.quickToolbarModule = this;\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n };\n QuickToolbar.prototype.onMouseDown = function (e) {\n this.parent.isBlur = false;\n this.parent.isRTE = true;\n };\n QuickToolbar.prototype.renderQuickToolbars = function () {\n if (this.linkQTBar || this.imageQTBar || this.textQTBar || this.tableQTBar) {\n return;\n }\n this.linkQTBar = this.createQTBar('Link', 'Scrollable', this.parent.quickToolbarSettings.link, RenderType.LinkToolbar);\n this.renderFactory.addRenderer(RenderType.LinkToolbar, this.linkQTBar);\n this.textQTBar = this.createQTBar('Text', 'Scrollable', this.parent.quickToolbarSettings.text, RenderType.TextToolbar);\n this.renderFactory.addRenderer(RenderType.TextToolbar, this.textQTBar);\n this.imageQTBar = this.createQTBar('Image', 'MultiRow', this.parent.quickToolbarSettings.image, RenderType.ImageToolbar);\n this.renderFactory.addRenderer(RenderType.ImageToolbar, this.imageQTBar);\n this.tableQTBar = this.createQTBar('Table', 'MultiRow', this.parent.quickToolbarSettings.table, RenderType.TableToolbar);\n this.renderFactory.addRenderer(RenderType.TableToolbar, this.tableQTBar);\n if (this.linkQTBar) {\n EventHandler.add(this.linkQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.imageQTBar) {\n EventHandler.add(this.imageQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.textQTBar) {\n EventHandler.add(this.textQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.tableQTBar) {\n EventHandler.add(this.tableQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n };\n QuickToolbar.prototype.renderInlineQuickToolbar = function () {\n addClass([this.parent.element], [CLS_INLINE]);\n this.inlineQTBar = this.createQTBar('Inline', 'MultiRow', this.parent.toolbarSettings.items, RenderType.InlineToolbar);\n this.renderFactory.addRenderer(RenderType.InlineToolbar, this.inlineQTBar);\n EventHandler.add(this.inlineQTBar.element, 'mousedown', this.onMouseDown, this);\n };\n QuickToolbar.prototype.showInlineQTBar = function (x, y, target) {\n this.inlineQTBar.showPopup(x, y, target);\n };\n QuickToolbar.prototype.hideInlineQTBar = function () {\n if (this.inlineQTBar && !hasClass(this.inlineQTBar.element, 'e-popup-close')) {\n this.inlineQTBar.hidePopup();\n }\n };\n QuickToolbar.prototype.hideQuickToolbars = function () {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close')) {\n this.textQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close')) {\n this.tableQTBar.hidePopup();\n }\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.deBounce = function (x, y, target) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () { _this.showInlineQTBar(x, y, target); }, 1000);\n };\n QuickToolbar.prototype.mouseUpHandler = function (e) {\n var args = e.args;\n var range = this.parent.getRange();\n var target = args.target;\n if (isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n this.hideInlineQTBar();\n this.offsetX = args.pageX;\n this.offsetY = pageYOffset(args, this.parent.element, this.parent.iframeSettings.enable);\n if (target.nodeName === 'TEXTAREA') {\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n else {\n if (target.tagName !== 'IMG' && target.tagName !== 'A' && (!closest(target, 'td,th') || !range.collapsed)) {\n if (this.parent.inlineMode.onSelection && range.collapsed) {\n return;\n }\n this.target = target;\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n }\n }\n };\n QuickToolbar.prototype.keyDownHandler = function () {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.inlineQTBarMouseDownHandler = function () {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.keyUpHandler = function (e) {\n if (this.parent.inlineMode.onSelection) {\n return;\n }\n var args = e.args;\n this.deBounce(this.offsetX, this.offsetY, args.target);\n };\n QuickToolbar.prototype.getInlineBaseToolbar = function () {\n return this.inlineQTBar && this.inlineQTBar.quickTBarObj;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n QuickToolbar.prototype.destroy = function () {\n if (this.linkQTBar) {\n EventHandler.remove(this.linkQTBar.element, 'mousedown', this.onMouseDown);\n this.linkQTBar.destroy();\n }\n if (this.textQTBar) {\n EventHandler.remove(this.textQTBar.element, 'mousedown', this.onMouseDown);\n this.textQTBar.destroy();\n }\n if (this.imageQTBar) {\n EventHandler.remove(this.imageQTBar.element, 'mousedown', this.onMouseDown);\n this.imageQTBar.destroy();\n }\n if (this.tableQTBar) {\n EventHandler.remove(this.tableQTBar.element, 'mousedown', this.onMouseDown);\n this.tableQTBar.destroy();\n }\n if (this.inlineQTBar) {\n EventHandler.remove(this.inlineQTBar.element, 'mousedown', this.onMouseDown);\n this.inlineQTBar.destroy();\n }\n this.removeEventListener();\n };\n QuickToolbar.prototype.wireInlineQTBarEvents = function () {\n this.parent.on(events.mouseUp, this.mouseUpHandler, this);\n this.parent.on(events.mouseDown, this.inlineQTBarMouseDownHandler, this);\n this.parent.on(events.keyDown, this.keyDownHandler, this);\n this.parent.on(events.keyUp, this.keyUpHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseUpHandler, this);\n this.parent.on(events.renderInlineToolbar, this.renderInlineQuickToolbar, this);\n };\n QuickToolbar.prototype.unWireInlineQTBarEvents = function () {\n this.parent.off(events.mouseUp, this.mouseUpHandler);\n this.parent.off(events.mouseDown, this.inlineQTBarMouseDownHandler);\n this.parent.off(events.keyDown, this.keyDownHandler);\n this.parent.off(events.keyUp, this.keyUpHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseUpHandler);\n this.parent.off(events.renderInlineToolbar, this.renderInlineQuickToolbar);\n };\n QuickToolbar.prototype.toolbarUpdated = function (args) {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close')) {\n this.tableQTBar.hidePopup();\n }\n };\n QuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeQuickToolbars, this);\n this.parent.on(events.mouseDown, this.renderQuickToolbars, this);\n this.parent.on(events.toolbarUpdated, this.toolbarUpdated, this);\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.wireInlineQTBarEvents();\n }\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n }\n this.parent.on(events.focusChange, this.hideQuickToolbars, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n };\n QuickToolbar.prototype.onKeyDown = function (e) {\n var args = e.args;\n if (args.which === 8 || args.which === 46) {\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n }\n };\n QuickToolbar.prototype.onIframeMouseDown = function () {\n this.hideQuickToolbars();\n this.hideInlineQTBar();\n };\n QuickToolbar.prototype.setRtl = function (args) {\n if (this.inlineQTBar) {\n this.inlineQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.linkQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n QuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeQuickToolbars);\n this.parent.off(events.mouseDown, this.renderQuickToolbars);\n this.parent.off(events.toolbarUpdated, this.toolbarUpdated);\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.unWireInlineQTBarEvents();\n }\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.off(events.scroll, this.hideQuickToolbars);\n }\n this.parent.off(events.focusChange, this.hideQuickToolbars);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.rtlMode, this.setRtl);\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n QuickToolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.inlineQTBar) {\n removeClass([this.parent.element], [CLS_INLINE]);\n this.unWireInlineQTBarEvents();\n this.hideInlineQTBar();\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.wireInlineQTBarEvents();\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n QuickToolbar.prototype.getModuleName = function () {\n return 'quickToolbar';\n };\n return QuickToolbar;\n}());\nexport { QuickToolbar };\n","import { detach, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { CLS_COUNT, CLS_WARNING, CLS_ERROR } from '../base/classes';\n/**\n * `Count` module is used to handle Count actions.\n */\nvar Count = /** @class */ (function () {\n function Count(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n Count.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editPanel = this.contentRenderer.getEditPanel();\n };\n Count.prototype.renderCount = function () {\n this.initializeInstance();\n this.element = this.parent.createElement('span', { className: CLS_COUNT });\n this.contentRenderer.getPanel().parentElement.appendChild(this.element);\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n };\n Count.prototype.appendCount = function () {\n var htmlText = this.editPanel.textContent.trim();\n this.htmlLength = htmlText.length;\n var string = this.parent.maxLength === -1 ? this.htmlLength : this.htmlLength + ' / ' + this.parent.maxLength;\n this.element.innerHTML = string;\n };\n Count.prototype.charCountBackground = function (htmlLength) {\n var percentage = (htmlLength / this.parent.maxLength) * 100;\n if (percentage < 85) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.remove(CLS_ERROR);\n }\n else if (percentage > 85 && percentage <= 90) {\n this.element.classList.remove(CLS_ERROR);\n this.element.classList.add(CLS_WARNING);\n }\n else if (percentage > 90) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.add(CLS_ERROR);\n }\n };\n /**\n * @hidden\n */\n Count.prototype.refresh = function () {\n if (!isNullOrUndefined(this.editPanel)) {\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n }\n };\n Count.prototype.restrict = function (e) {\n if (this.parent.showCharCount) {\n var element = e.args.currentTarget.textContent.trim();\n var array = [8, 16, 17, 37, 38, 39, 40, 65];\n var arrayKey = void 0;\n for (var i = 0; i <= array.length - 1; i++) {\n if (e.args.which === array[i]) {\n if (e.args.ctrlKey && e.args.which === 65) {\n return;\n }\n else if (e.args.which !== 65) {\n arrayKey = array[i];\n return;\n }\n }\n }\n if ((element.length >= this.parent.maxLength && this.parent.maxLength !== -1) && e.args.which !== arrayKey) {\n e.args.preventDefault();\n }\n }\n };\n /**\n * Destroys the Count.\n * @method destroy\n * @return {void}\n */\n Count.prototype.destroy = function () {\n this.removeEventListener();\n };\n Count.prototype.toggle = function (e) {\n this.element.style.display = (e.member === 'viewSource') ? 'none' : 'block';\n };\n Count.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.parent.showCharCount) {\n this.parent.on(events.initialEnd, this.renderCount, this);\n this.parent.on(events.keyUp, this.refresh, this);\n this.parent.on(events.keyDown, this.restrict, this);\n this.parent.on(events.count, this.refresh, this);\n this.parent.on(events.refreshBegin, this.refresh, this);\n this.parent.on(events.mouseDown, this.refresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sourceCode, this.toggle, this);\n this.parent.on(events.updateSource, this.toggle, this);\n }\n };\n Count.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n detach(this.element);\n this.parent.off(events.initialEnd, this.renderCount);\n this.parent.off(events.keyUp, this.refresh);\n this.parent.off(events.refreshBegin, this.refresh);\n this.parent.off(events.keyDown, this.restrict);\n this.parent.off(events.count, this.refresh);\n this.parent.off(events.mouseDown, this.refresh);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sourceCode, this.toggle);\n this.parent.off(events.updateSource, this.toggle);\n };\n /**\n * For internal use only - Get the module name.\n */\n Count.prototype.getModuleName = function () {\n return 'count';\n };\n return Count;\n}());\nexport { Count };\n","/**\n * MarkdownSelection internal module\n * @hidden\n */\nvar MarkdownSelection = /** @class */ (function () {\n function MarkdownSelection() {\n }\n MarkdownSelection.prototype.getLineNumber = function (textarea, point) {\n return textarea.value.substr(0, point).split('\\n').length;\n };\n MarkdownSelection.prototype.getSelectedText = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n return textarea.value.substring(start, end);\n };\n MarkdownSelection.prototype.getAllParents = function (value) {\n return value.split('\\n');\n };\n MarkdownSelection.prototype.getSelectedLine = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var index = this.getLineNumber(textarea, textarea.selectionStart);\n return lines[index - 1];\n };\n MarkdownSelection.prototype.getLine = function (textarea, index) {\n var lines = this.getAllParents(textarea.value);\n return lines[index];\n };\n MarkdownSelection.prototype.getSelectedParentPoints = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var start = this.getLineNumber(textarea, textarea.selectionStart);\n var end = this.getLineNumber(textarea, textarea.selectionEnd);\n var parents = this.getSelectedText(textarea).split('\\n');\n var selectedPoints = [];\n var selectedLine = lines[start - 1];\n var startLength = lines.slice(0, start - 1).join('').length;\n var firstPoint = {};\n firstPoint.line = start - 1;\n firstPoint.start = startLength + firstPoint.line;\n firstPoint.end = selectedLine !== '' ? firstPoint.start +\n selectedLine.length + 1 : firstPoint.start + selectedLine.length;\n firstPoint.text = selectedLine;\n selectedPoints.push(firstPoint);\n if (parents.length > 1) {\n for (var i = 1; i < parents.length - 1; i++) {\n var points = {};\n points.line = selectedPoints[i - 1].line + 1;\n points.start = parents[i] !== '' ? selectedPoints[i - 1].end : selectedPoints[i - 1].end;\n points.end = points.start + parents[i].length + 1;\n points.text = parents[i];\n selectedPoints.push(points);\n }\n var lastPoint = {};\n lastPoint.line = selectedPoints[selectedPoints.length - 1].line + 1;\n lastPoint.start = selectedPoints[selectedPoints.length - 1].end;\n lastPoint.end = lastPoint.start + lines[end - 1].length + 1;\n lastPoint.text = lines[end - 1];\n selectedPoints.push(lastPoint);\n }\n return selectedPoints;\n };\n MarkdownSelection.prototype.setSelection = function (textarea, start, end) {\n textarea.setSelectionRange(start, end);\n textarea.focus();\n };\n MarkdownSelection.prototype.save = function (start, end) {\n this.selectionStart = start;\n this.selectionEnd = end;\n };\n MarkdownSelection.prototype.restore = function (textArea) {\n this.setSelection(textArea, this.selectionStart, this.selectionEnd);\n };\n MarkdownSelection.prototype.isStartWith = function (line, command) {\n var isStart = false;\n if (line) {\n var reg = line.trim() === command.trim() ?\n new RegExp('^(' + this.replaceSpecialChar(command.trim()) + ')', 'gim') :\n new RegExp('^(' + this.replaceSpecialChar(command) + ')', 'gim');\n isStart = reg.test(line.trim());\n }\n return isStart;\n };\n MarkdownSelection.prototype.replaceSpecialChar = function (value) {\n return value.replace(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/g, '\\\\$&');\n };\n MarkdownSelection.prototype.isClear = function (parents, regex) {\n var isClear = false;\n for (var i = 0; i < parents.length; i++) {\n if (new RegExp(regex, 'gim').test(parents[i].text)) {\n return true;\n }\n }\n return isClear;\n };\n MarkdownSelection.prototype.getRegex = function (syntax) {\n syntax = this.replaceSpecialChar(syntax);\n var regex = '^(' + syntax + ')|^(' + syntax.trim() + ')';\n return new RegExp(regex);\n };\n MarkdownSelection.prototype.getSelectedInlinePoints = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n var selection = this.getSelectedText(textarea);\n return { start: start, end: end, text: selection };\n };\n return MarkdownSelection;\n}());\nexport { MarkdownSelection };\n","import { MarkdownSelection } from '../../markdown-parser/plugin/markdown-selection';\nimport * as events from '../base/constant';\n/**\n * MarkdownToolbarStatus module for refresh the toolbar status\n */\nvar MarkdownToolbarStatus = /** @class */ (function () {\n function MarkdownToolbarStatus(parent) {\n this.toolbarStatus = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n uppercase: false,\n inlinecode: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null\n };\n this.selection = new MarkdownSelection();\n this.parent = parent;\n this.element = this.parent.contentModule.getEditPanel();\n this.addEventListener();\n }\n MarkdownToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n MarkdownToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n this.parent.off(events.destroy, this.onRefreshHandler);\n };\n MarkdownToolbarStatus.prototype.onRefreshHandler = function (args) {\n var parentsLines = this.selection.getSelectedParentPoints(this.element);\n this.toolbarStatus = {\n orderedlist: args.documentNode ? false : this.isListsApplied(parentsLines, 'OL'),\n unorderedlist: args.documentNode ? false : this.isListsApplied(parentsLines, 'UL'),\n formats: this.currentFormat(parentsLines, args.documentNode),\n bold: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Bold'),\n italic: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Italic'),\n inlinecode: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('InlineCode'),\n strikethrough: args.documentNode ? false :\n this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('StrikeThrough'),\n subscript: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SubScript'),\n superscript: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SuperScript'),\n uppercase: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('UpperCase')\n };\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n MarkdownToolbarStatus.prototype.isListsApplied = function (lines, type) {\n var isApply = true;\n for (var i = 0; i < lines.length; i++) {\n if (!this.selection.isStartWith(lines[i].text, this.parent.formatter.listTags[type])) {\n isApply = false;\n break;\n }\n }\n return isApply;\n };\n MarkdownToolbarStatus.prototype.currentFormat = function (lines, documentNode) {\n var format = 'p';\n var keys = Object.keys(this.parent.formatter.formatTags);\n var direction = this.element.selectionDirection;\n var checkLine = direction === 'backward' ? lines[0].text : lines[lines.length - 1].text;\n for (var i = 0; !documentNode && i < keys.length; i++) {\n if (keys[i] !== 'pre' && this.selection.isStartWith(checkLine, this.parent.formatter.formatTags[keys[i]])) {\n format = keys[i];\n break;\n }\n else if (keys[i] === 'pre') {\n var parentLines = this.selection.getAllParents(this.element.value);\n var firstPrevText = parentLines[lines[0].line - 1];\n var lastNextText = parentLines[lines.length + 1];\n if (this.selection.isStartWith(firstPrevText, this.parent.formatter.formatTags[keys[i]].split('\\n')[0]) &&\n this.selection.isStartWith(lastNextText, this.parent.formatter.formatTags[keys[i]].split('\\n')[0])) {\n format = keys[i];\n break;\n }\n }\n }\n return format;\n };\n return MarkdownToolbarStatus;\n}());\nexport { MarkdownToolbarStatus };\n","import * as events from '../base/constant';\n/**\n * `ExecCommandCallBack` module is used to run the editor manager command\n */\nvar ExecCommandCallBack = /** @class */ (function () {\n function ExecCommandCallBack(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ExecCommandCallBack.prototype.addEventListener = function () {\n this.parent.on(events.execCommandCallBack, this.commandCallBack, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ExecCommandCallBack.prototype.commandCallBack = function (args) {\n if (args.requestType !== 'Undo' && args.requestType !== 'Redo') {\n this.parent.formatter.saveData();\n }\n this.parent.notify(events.toolbarRefresh, { args: args });\n this.parent.notify(events.count, {});\n };\n ExecCommandCallBack.prototype.removeEventListener = function () {\n this.parent.off(events.execCommandCallBack, this.commandCallBack);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ExecCommandCallBack;\n}());\nexport { ExecCommandCallBack };\n","/**\n * Constant values for Common\n */\n/* Keydown event trigger\n * @hidden\n */\nexport var KEY_DOWN = 'keydown';\n/* Undo and Redo action HTML plugin events\n * @hidden\n */\nexport var ACTION = 'action';\n/* Formats plugin events\n * @hidden\n */\nexport var FORMAT_TYPE = 'format-type';\n/* Keydown handler event trigger\n * @hidden\n */\nexport var KEY_DOWN_HANDLER = 'keydown-handler';\n/* List plugin events\n * @hidden\n */\nexport var LIST_TYPE = 'list-type';\n/* Keyup handler event trigger\n * @hidden\n */\nexport var KEY_UP_HANDLER = 'keyup-handler';\n/* Keyup event trigger\n * @hidden\n */\nexport var KEY_UP = 'keyup';\n","import { extend, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport * as CONSTANT from '../base/constant';\nimport { updateUndoRedoStatus } from '../base/util';\nimport { KEY_DOWN, KEY_UP } from './../../common/constant';\n/**\n * Formatter\n * @hidden\n */\nvar Formatter = /** @class */ (function () {\n function Formatter() {\n }\n /**\n * To execute the command\n * @param {IRichTextEditor} self\n * @param {ActionBeginEventArgs} args\n * @param {MouseEvent|KeyboardEvent} event\n * @param {NotifyArgs} value\n */\n Formatter.prototype.process = function (self, args, event, value) {\n var selection = self.contentModule.getDocument().getSelection();\n var range = (selection.rangeCount > 0) ? selection.getRangeAt(selection.rangeCount - 1) : null;\n if (!isNullOrUndefined(args)\n && args.item.command\n && args.item.command !== 'Table'\n && args.item.command !== 'Actions'\n && args.item.command !== 'Links'\n && args.item.command !== 'Images'\n && range\n && !(self.contentModule.getEditPanel().contains(this.getAncestorNode(range.commonAncestorContainer))\n || self.contentModule.getEditPanel() === range.commonAncestorContainer\n || self.contentModule.getPanel() === range.commonAncestorContainer)) {\n return;\n }\n if (isNullOrUndefined(args)) {\n var action = event.action;\n if (action !== 'tab' && action !== 'enter' && action !== 'space' && action !== 'escape') {\n args = {};\n var items = {\n originalEvent: event, cancel: false,\n requestType: action || (event.key + 'Key'),\n itemCollection: value\n };\n extend(args, args, items, true);\n self.trigger(CONSTANT.actionBegin, args);\n if (args.cancel) {\n if (action === 'paste' || action === 'cut' || action === 'copy') {\n event.preventDefault();\n }\n return;\n }\n }\n this.editorManager.observer.notify((event.type === 'keydown' ? KEY_DOWN : KEY_UP), {\n event: event,\n callBack: this.onSuccess.bind(this, self),\n value: value\n });\n }\n else if (!isNullOrUndefined(args) && args.item.command && args.item.subCommand && ((args.item.command !== args.item.subCommand\n && args.item.command !== 'Font')\n || ((args.item.subCommand === 'FontName' || args.item.subCommand === 'FontSize') && args.name === 'dropDownSelect')\n || ((args.item.subCommand === 'BackgroundColor' || args.item.subCommand === 'FontColor')\n && args.name === 'colorPickerChanged'))) {\n extend(args, args, { requestType: args.item.subCommand, cancel: false, itemCollection: value }, true);\n self.trigger(CONSTANT.actionBegin, args);\n if (args.cancel) {\n return;\n }\n if (this.getUndoRedoStack().length === 0 && args.item.command !== 'Links' && args.item.command !== 'Images') {\n this.saveData();\n }\n self.isBlur = false;\n self.contentModule.getEditPanel().focus();\n var command = args.item.subCommand.toLocaleLowerCase();\n if (command === 'paste' || command === 'cut' || command === 'copy') {\n self.clipboardAction(command, event);\n }\n else {\n this.editorManager.observer.notify(CONSTANT.checkUndo, { subCommand: args.item.subCommand });\n this.editorManager.execCommand(args.item.command, args.item.subCommand, event, this.onSuccess.bind(this, self), args.item.value, value);\n }\n }\n this.enableUndo(self);\n };\n Formatter.prototype.getAncestorNode = function (node) {\n node = node.nodeType === 3 ? node.parentNode : node;\n return node;\n };\n Formatter.prototype.onKeyHandler = function (self, e) {\n var _this = this;\n this.editorManager.observer.notify(KEY_UP, {\n event: e, callBack: function () {\n _this.enableUndo(self);\n }\n });\n };\n Formatter.prototype.onSuccess = function (self, events) {\n this.enableUndo(self);\n self.notify(CONSTANT.execCommandCallBack, events);\n self.trigger(CONSTANT.actionComplete, events);\n if (events.requestType === 'Images' || events.requestType === 'Links' && self.editorMode === 'HTML') {\n var args = events;\n if (events.requestType === 'Links' && events.event &&\n events.event.type === 'keydown' &&\n events.event.keyCode === 32) {\n return;\n }\n self.notify(CONSTANT.insertCompleted, {\n args: args.event, type: events.requestType, isNotify: true,\n elements: args.elements\n });\n }\n };\n /**\n * Save the data for undo and redo action.\n */\n Formatter.prototype.saveData = function (e) {\n this.editorManager.undoRedoManager.saveData(e);\n };\n Formatter.prototype.getUndoStatus = function () {\n return this.editorManager.undoRedoManager.getUndoStatus();\n };\n Formatter.prototype.getUndoRedoStack = function () {\n return this.editorManager.undoRedoManager.undoRedoStack;\n };\n Formatter.prototype.enableUndo = function (self) {\n var status = this.getUndoStatus();\n if (self.inlineMode.enable && !Browser.isDevice) {\n updateUndoRedoStatus(self.quickToolbarModule.inlineQTBar.quickTBarObj, status);\n }\n else {\n if (self.toolbarModule) {\n updateUndoRedoStatus(self.toolbarModule.baseToolbar, status);\n }\n }\n };\n return Formatter;\n}());\nexport { Formatter };\n","/**\n * Constant values for Markdown Parser\n */\n/* List plugin events\n * @hidden\n */\nexport var LISTS_COMMAND = 'lists-commands';\n/* selectioncommand plugin events\n * @hidden\n */\nexport var selectionCommand = 'command-type';\n/* Link plugin events\n * @hidden\n */\nexport var LINK_COMMAND = 'link-commands';\n/* Clear plugin events\n * @hidden\n */\nexport var CLEAR_COMMAND = 'clear-commands';\n","import * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * Lists internal component\n * @hidden\n */\nvar MDLists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n */\n function MDLists(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLists.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LISTS_COMMAND, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, this.keyUpHandler, this);\n };\n MDLists.prototype.keyDownHandler = function (event) {\n switch (event.event.which) {\n case 9:\n this.tabKey(event);\n break;\n }\n switch (event.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n }\n };\n MDLists.prototype.keyUpHandler = function (event) {\n switch (event.event.which) {\n case 13:\n this.enterKey(event);\n break;\n }\n };\n MDLists.prototype.tabKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var addedLength = 0;\n var isNotFirst = this.isNotFirstLine(textArea, parents[0]);\n if (!isNotFirst && !event.event.shiftKey) {\n this.restore(textArea, start, end + addedLength, event);\n return;\n }\n var regex = this.getListRegex();\n this.currentAction = this.getAction(parents[0].text);\n for (var i = 0; i < parents.length; i++) {\n var prevIndex = event.event.shiftKey ? parents[i].line : parents[i].line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n if (prevLine && (!event.event.shiftKey && isNotFirst || (event.event.shiftKey && /^(\\t)/.test(prevLine)))) {\n prevLine = prevLine.trim();\n if (regex.test(prevLine)) {\n event.event.preventDefault();\n var tabSpace = '\\t';\n var tabSpaceLength = event.event.shiftKey ? -tabSpace.length : tabSpace.length;\n var splitTab = parents[i].text.split('\\t');\n parents[i].text = event.event.shiftKey ? splitTab.splice(1, splitTab.length).join('\\t') : tabSpace + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? start + tabSpaceLength : start;\n addedLength += tabSpaceLength;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? parents[j].start + tabSpaceLength : parents[j].start;\n parents[j].end = parents[j].end + tabSpaceLength;\n }\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, event);\n };\n MDLists.prototype.getTabSpace = function (line) {\n var split = line.split('\\t');\n var tabs = '';\n for (var i = 0; i < split.length; i++) {\n if (split[i] === '') {\n tabs += '\\t';\n }\n else {\n break;\n }\n }\n return tabs;\n };\n MDLists.prototype.isNotFirstLine = function (textArea, points) {\n var currentLine = points.text;\n var prevIndex = points.line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n var regex = this.getListRegex();\n var isNotFirst = false;\n if (prevLine && regex.test(prevLine.trim())) {\n var curTabSpace = this.getTabSpace(currentLine);\n var prevTabSpace = this.getTabSpace(prevLine);\n isNotFirst = curTabSpace === prevTabSpace ? true : isNotFirst;\n for (; prevTabSpace.length > curTabSpace.length; null) {\n prevIndex = prevIndex - 1;\n prevLine = this.selection.getLine(textArea, prevIndex);\n if (regex.test(prevLine.trim())) {\n prevTabSpace = this.getTabSpace(prevLine);\n if (prevTabSpace.length <= curTabSpace.length) {\n isNotFirst = true;\n break;\n }\n }\n }\n }\n return isNotFirst;\n };\n MDLists.prototype.getAction = function (line) {\n var ol = line.trim().split(new RegExp('^(' + this.selection.replaceSpecialChar(this.syntax.OL) + ')'))[1];\n var ul = line.trim().split(new RegExp('^(' + this.selection.replaceSpecialChar(this.syntax.UL) + ')'))[1];\n return (ol ? 'OL' : 'UL');\n };\n MDLists.prototype.enterKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prevLine = this.selection.getLine(textArea, parents[0].line - 1);\n var regex = this.getListRegex();\n if (regex.test(prevLine.trim()) && prevLine.trim().replace(regex, '') !== '') {\n var addedLength = 0;\n var tabSpace = this.getTabSpace(prevLine);\n this.currentAction = this.getAction(prevLine);\n var prefix = this.syntax[this.currentAction];\n parents[0].text = tabSpace + prefix + parents[0].text;\n textArea.value = textArea.value.substr(0, parents[0].start) + parents[0].text +\n textArea.value.substr(parents[0].end, textArea.value.length);\n start = start + prefix.length + tabSpace.length;\n addedLength += prefix.length + tabSpace.length;\n this.restore(textArea, start, end + addedLength, event);\n }\n };\n MDLists.prototype.applyListsHandler = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n this.currentAction = e.subCommand;\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prefix = '';\n var regex = this.syntax[this.currentAction];\n for (var i = 0; i < parents.length; i++) {\n if (!this.selection.isStartWith(parents[i].text, regex)) {\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n var replace = this.appliedLine(parents[i].text);\n prefix = replace.line ? prefix : this.syntax[this.currentAction];\n parents[i].text = replace.line ? replace.line : prefix + parents[i].text;\n replace.space = replace.space ? replace.space : 0;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start + prefix.length + replace.space) > 0 ?\n start + prefix.length + replace.space : 0 : start;\n addedLength += prefix.length + replace.space;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? prefix.length +\n parents[j].start + replace.space : parents[j].start;\n parents[j].end = prefix.length + parents[j].end + replace.space;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, e);\n };\n MDLists.prototype.appliedLine = function (line) {\n var points = {};\n var regex = this.getListRegex();\n var isExist = regex.test(line.trim()) || line.trim() === this.syntax.OL.trim()\n || line.trim() === this.syntax.UL.trim();\n if (isExist) {\n var replace = void 0;\n var pattern = void 0;\n var space = 0;\n if (this.selection.getRegex(this.syntax.OL).test(line.trim())) {\n pattern = this.selection.getRegex(this.syntax.OL);\n replace = this.syntax.UL;\n points.space = this.syntax.UL.length - this.syntax.OL.length;\n }\n else {\n pattern = this.selection.getRegex(this.syntax.UL);\n replace = this.syntax.OL;\n points.space = this.syntax.OL.length - this.syntax.UL.length;\n }\n points.line = this.getTabSpace(line) + line.trim().replace(pattern, replace);\n }\n return points;\n };\n MDLists.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDLists.prototype.getListRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length; j++) {\n var syntax = this.selection.replaceSpecialChar(this.syntax[configKey[j]]);\n regex += regex === '' ? '^(' + syntax + ')|^(' + syntax.trim() + ')' :\n '|^(' + syntax + ')|^(' + syntax.trim() + ')';\n }\n return new RegExp(regex);\n };\n return MDLists;\n}());\nexport { MDLists };\n","import { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport * as CONSTANT from './../../markdown-parser/base/constant';\n/**\n * MDFormats internal plugin\n * @hidden\n */\nvar MDFormats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function MDFormats(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDFormats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n };\n MDFormats.prototype.applyFormats = function (e) {\n e.subCommand = e.subCommand.toLowerCase();\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n if (e.subCommand === 'p') {\n this.cleanFormat(textArea);\n this.restore(textArea, textArea.selectionStart, textArea.selectionEnd, e);\n return;\n }\n else {\n this.cleanFormat(textArea, e.subCommand);\n }\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var parents = this.selection.getSelectedParentPoints(textArea);\n if (e.subCommand === 'pre') {\n if (parents.length > 1) {\n this.applyCodeBlock(textArea, e, parents);\n }\n else {\n extend(e, e, { subCommand: 'InlineCode' }, true);\n this.parent.observer.notify(CONSTANT.selectionCommand, e);\n }\n return;\n }\n for (var i = 0; i < parents.length; i++) {\n if (parents[i].text !== '' && !this.selection.isStartWith(parents[i].text, '\\\\' + this.syntax[e.subCommand])) {\n parents[i].text = this.syntax[e.subCommand] + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? start + this.syntax[e.subCommand].length : start;\n addedLength += this.syntax[e.subCommand].length;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ?\n this.syntax[e.subCommand].length + parents[j].start : parents[j].start;\n parents[j].end = this.syntax[e.subCommand].length + parents[j].end;\n }\n }\n }\n else if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, e);\n };\n MDFormats.prototype.clearRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length && configKey[j] !== 'pre' && configKey[j] !== 'p'; j++) {\n regex += regex === '' ? '^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')' :\n '|^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')';\n }\n return regex;\n };\n MDFormats.prototype.cleanFormat = function (textArea, command) {\n var parents = this.selection.getSelectedParentPoints(textArea);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var removeLength = 0;\n if (this.selection.isClear(parents, this.clearRegex())) {\n for (var i = 0; i < parents.length; i++) {\n var configKey = Object.keys(this.syntax);\n for (var j = 0; parents[i].text !== '' && j < configKey.length; j++) {\n var removeText = this.syntax[configKey[j]];\n if (configKey[j] === command) {\n continue;\n }\n var regex = new RegExp('^(' + this.selection.replaceSpecialChar(removeText) + ')', 'gim');\n if (regex.test(parents[i].text)) {\n parents[i].text = parents[i].text.replace(regex, '');\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start - (removeText.length)) > 0 ? start - (removeText.length) : 0 : start;\n removeLength += removeText.length;\n if (parents.length !== 1) {\n for (var k = 0; k < parents.length; k++) {\n parents[k].start = k !== 0 ?\n parents[k].start - removeText.length : parents[k].start;\n parents[k].end = parents[k].end - removeText.length;\n }\n }\n break;\n }\n }\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end - removeLength);\n }\n };\n MDFormats.prototype.applyCodeBlock = function (textArea, event, parents) {\n var command = event.subCommand;\n var start = parents[0].start;\n var end = parents[parents.length - 1].end;\n var parentLines = this.selection.getAllParents(textArea.value);\n var firstPrevText = parentLines[parents[0].line - 1];\n var lastNextText = parentLines[(parents.length + 1) + 1];\n var addedLength = 0;\n if (!this.selection.isStartWith(firstPrevText, this.syntax.pre.split('\\n')[0]) &&\n !this.selection.isStartWith(lastNextText, this.syntax.pre.split('\\n')[0])) {\n var lines = textArea.value.substring(start, end).split('\\n');\n var lastLine = lines[lines.length - 1] === '' ? '' : '\\n';\n textArea.value = textArea.value.substr(0, start) + this.syntax[command] + textArea.value.substring(start, end) +\n lastLine + this.syntax[command] +\n textArea.value.substr(end, textArea.value.length);\n start += this.syntax[command].length;\n end += this.syntax[command].length - 1;\n }\n else {\n start = textArea.selectionStart;\n end = textArea.selectionEnd;\n }\n this.restore(textArea, start, end, event);\n };\n MDFormats.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDFormats;\n}());\nexport { MDFormats };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * SelectionCommands internal component\n * @hidden\n */\nvar MDSelectionFormats = /** @class */ (function () {\n function MDSelectionFormats(parent) {\n extend(this, this, parent, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDSelectionFormats.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.selectionCommand, this.applyCommands, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n MDSelectionFormats.prototype.keyDownHandler = function (e) {\n switch (e.event.action) {\n case 'bold':\n this.applyCommands({ subCommand: 'Bold', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'italic':\n this.applyCommands({ subCommand: 'Italic', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'strikethrough':\n this.applyCommands({ subCommand: 'StrikeThrough', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'uppercase':\n this.applyCommands({ subCommand: 'UpperCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'lowercase':\n this.applyCommands({ subCommand: 'LowerCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'superscript':\n this.applyCommands({ subCommand: 'SuperScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'subscript':\n this.applyCommands({ subCommand: 'SubScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n MDSelectionFormats.prototype.isBold = function (text, cmd) {\n return text.search('\\\\' + cmd + '\\\\' + cmd + '') !== -1;\n };\n MDSelectionFormats.prototype.isItalic = function (text, cmd) {\n return text.search('\\\\' + cmd) !== -1;\n };\n MDSelectionFormats.prototype.isMatch = function (text, cmd) {\n var matchText = [''];\n switch (cmd) {\n case this.syntax.Italic:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.InlineCode:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.StrikeThrough:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n }\n return matchText;\n };\n MDSelectionFormats.prototype.multiCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + '\\\\' + cmd + ')', 'g');\n };\n MDSelectionFormats.prototype.singleCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + ')', 'g');\n };\n MDSelectionFormats.prototype.isAppliedCommand = function (cmd) {\n var selectCmd = '';\n var isFormat = false;\n var textArea = this.parent.element;\n var start = textArea.selectionStart;\n var splitAt = function (index) { return function (x) { return [x.slice(0, index), x.slice(index)]; }; };\n var splitText = splitAt(start)(textArea.value);\n var cmdB = this.syntax.Bold.substr(0, 1);\n var cmdI = this.syntax.Italic;\n var beforeText = textArea.value.substr(splitText[0].length - 1, 1);\n var afterText = splitText[1].substr(0, 1);\n if ((beforeText !== '' && afterText !== '' && beforeText.match(/[a-z]/i)) &&\n beforeText === beforeText.toUpperCase() && afterText === afterText.toUpperCase() && cmd === 'UpperCase') {\n return true;\n }\n if (!(this.isBold(splitText[0], cmdB)) && !(this.isItalic(splitText[0], cmdI)) && !(this.isBold(splitText[1], cmdB)) &&\n !(this.isItalic(splitText[1], cmdI))) {\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 &&\n splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) &&\n cmd === 'SuperScript') {\n isFormat = true;\n }\n }\n if ((this.isBold(splitText[0], cmdB) && this.isBold(splitText[1], cmdB)) &&\n (splitText[0].match(this.multiCharRegx(cmdB)).length % 2 === 1 &&\n splitText[1].match(this.multiCharRegx(cmdB)).length % 2 === 1) && cmd === 'Bold') {\n isFormat = true;\n }\n splitText[0] = this.isBold(splitText[0], cmdB) ? splitText[0].replace(this.multiCharRegx(cmdB), '$%@') : splitText[0];\n splitText[1] = this.isBold(splitText[1], cmdB) ? splitText[1].replace(this.multiCharRegx(cmdB), '$%@') : splitText[1];\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.Italic)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.Italic))) &&\n (this.isMatch(splitText[0], this.syntax.Italic).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.Italic).length % 2 === 1) && cmd === 'Italic') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) && cmd === 'SuperScript') {\n isFormat = true;\n }\n return isFormat;\n };\n MDSelectionFormats.prototype.applyCommands = function (e) {\n this.currentAction = e.subCommand;\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var selection = this.parent.markdownSelection.getSelectedInlinePoints(textArea);\n if (selection.text !== '' && !this.isApplied(selection, e.subCommand)) {\n addedLength = (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') ? 0 :\n this.syntax[e.subCommand].length;\n var repStart = textArea.value.substr(selection.start - this.syntax[e.subCommand].length, this.syntax[e.subCommand].length);\n var repEnd = void 0;\n if ((repStart === e.subCommand) || ((selection.start - this.syntax[e.subCommand].length ===\n textArea.value.indexOf(this.syntax[e.subCommand])) && (selection.end === textArea.value.lastIndexOf(this.syntax[e.subCommand]) || selection.end === textArea.value.lastIndexOf('/g, '').replace(/<\\/sub>/g, '');\n break;\n case 'SuperScript':\n text = text.replace(//g, '').replace(/<\\/sup>/g, '');\n break;\n }\n return text;\n };\n MDSelectionFormats.prototype.isApplied = function (line, command) {\n var regx = this.singleCharRegx(this.syntax[command]);\n switch (command) {\n case 'SubScript':\n case 'SuperScript':\n regx = this.singleCharRegx(this.syntax[command]);\n return regx.test(line.text);\n case 'Bold':\n case 'StrikeThrough':\n regx = this.multiCharRegx(this.syntax[command].substr(0, 1));\n return regx.test(line.text);\n case 'UpperCase':\n case 'LowerCase':\n regx = new RegExp('^[' + this.syntax[command] + ']*$', 'g');\n return regx.test(line.text);\n case 'Italic':\n var regTest = void 0;\n var regxB = this.multiCharRegx(this.syntax[command].substr(0, 1));\n if (regxB.test(line.text)) {\n var repText = line.text;\n repText = repText.replace(regxB, '$%#');\n regTest = regx.test(repText);\n }\n else {\n regTest = regx.test(line.text);\n }\n return regTest;\n case 'InlineCode':\n return regx.test(line.text);\n }\n };\n return MDSelectionFormats;\n}());\nexport { MDSelectionFormats };\n","/**\n * Default Markdown formats config for adapter\n */\nexport var markdownFormatTags = {\n 'h6': '###### ',\n 'h5': '##### ',\n 'h4': '#### ',\n 'h3': '### ',\n 'h2': '## ',\n 'h1': '# ',\n 'blockquote': '> ',\n 'pre': '```\\n',\n 'p': ''\n};\n/**\n * Default selection formats config for adapter\n */\nexport var markdownSelectionTags = {\n 'Bold': '**',\n 'Italic': '*',\n 'StrikeThrough': '~~',\n 'InlineCode': '`',\n 'SubScript': '',\n 'SuperScript': '',\n 'UpperCase': 'A-Z',\n 'LowerCase': 'a-z'\n};\n/**\n * Default Markdown lists config for adapter\n */\nexport var markdownListsTags = {\n 'OL': '1. ',\n 'UL': '- ',\n};\n/**\n * Default html key config for adapter\n */\nexport var htmlKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'underline': 'ctrl+u',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'indents': 'ctrl+]',\n 'outdents': 'ctrl+[',\n 'html-source': 'ctrl+shift+h',\n 'full-screen': 'ctrl+shift+f',\n 'decrease-fontsize': 'ctrl+shift+<',\n 'increase-fontsize': 'ctrl+shift+>',\n 'justify-center': 'ctrl+e',\n 'justify-full': 'ctrl+j',\n 'justify-left': 'ctrl+l',\n 'justify-right': 'ctrl+r',\n 'clear-format': 'ctrl+shift+r',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o',\n 'space': '32',\n 'enter': '13',\n 'tab': '9'\n};\n/**\n * Default markdown key config for adapter\n */\nexport var markdownKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'full-screen': 'ctrl+shift+f',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o'\n};\n","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoCommands = /** @class */ (function () {\n function UndoRedoCommands(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n UndoRedoCommands.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n };\n UndoRedoCommands.prototype.removeEventListener = function () {\n var debounceListener = debounce(this.keyUp, 300);\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, debounceListener);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n UndoRedoCommands.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoCommands.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n UndoRedoCommands.prototype.keyDown = function (e) {\n var event = e.event;\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoCommands.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * MD collection stored string format.\n * @method saveData\n * @return {void}\n */\n UndoRedoCommands.prototype.saveData = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var textValue = this.parent.element.value;\n var changEle = { text: textValue, start: start, end: end };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].start === start) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].end === end)) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.undoRedoStack.length > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n * @method undo\n * @return {void}\n */\n UndoRedoCommands.prototype.undo = function (e) {\n if (this.steps > 0) {\n this.currentAction = 'Undo';\n var start = this.undoRedoStack[this.steps - 1].start;\n var end = this.undoRedoStack[this.steps - 1].end;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.element.value = removedContent;\n this.parent.element.focus();\n this.steps--;\n this.restore(this.parent.element, start, end, e);\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n */\n UndoRedoCommands.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n this.currentAction = 'Redo';\n var start = this.undoRedoStack[this.steps + 1].start;\n var end = this.undoRedoStack[this.steps + 1].end;\n this.parent.element.value = this.undoRedoStack[this.steps + 1].text;\n this.parent.element.focus();\n this.steps++;\n this.restore(this.parent.element, start, end, e);\n }\n };\n UndoRedoCommands.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n UndoRedoCommands.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoCommands;\n}());\nexport { UndoRedoCommands };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n */\nvar MDLink = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function MDLink(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLink.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK_COMMAND, this.createLink, this);\n };\n MDLink.prototype.createLink = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = (e.subCommand === 'Image') ? this.selection.getSelectedText(textArea) : e.item.text;\n var startOffset = (e.subCommand === 'Image') ? (start + 2) : (start + 1);\n var endOffset = (e.subCommand === 'Image') ? (end + 2) : (end + 1);\n text = (e.subCommand === 'Image') ? '![' + text + '](' + e.item.url + ')' : '[' + text + '](' + e.item.url + ')';\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, startOffset, endOffset);\n this.restore(textArea, startOffset, endOffset, e);\n };\n MDLink.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDLink;\n}());\nexport { MDLink };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n */\nvar ClearFormat = /** @class */ (function () {\n /**\n * Constructor for creating the clear format plugin\n * @hidden\n */\n function ClearFormat(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n ClearFormat.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_COMMAND, this.clear, this);\n };\n ClearFormat.prototype.replaceRegex = function (data) {\n return data.replace(/\\*/ig, '\\\\*').replace(/\\&/ig, '\\\\&')\n .replace(/\\-/ig, '\\\\-').replace(/\\^/ig, '\\\\^')\n .replace(/\\$/ig, '\\\\$').replace(/\\./ig, '\\\\.')\n .replace(/\\|/ig, '\\\\|').replace(/\\?/ig, '\\\\?')\n .replace(/\\+/ig, '\\\\+').replace(/\\-/ig, '\\\\-')\n .replace(/\\&/ig, '\\\\&');\n };\n ClearFormat.prototype.clearSelectionTags = function (text) {\n var data = this.parent.selectionTags;\n var keys = Object.keys(data);\n for (var num = 0; num < keys.length; num++) {\n var key = keys[num];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n var expString = this.replaceRegex(data[key]);\n var regExp = void 0;\n var startExp = void 0;\n var endExp = void 0;\n if (data[key] === '') {\n regExp = new RegExp('(.*?)<\\/sup>', 'ig');\n }\n else if (data[key] === '') {\n regExp = new RegExp('(.*?)<\\/sub>', 'ig');\n }\n else {\n regExp = new RegExp(expString + '(.*?)' + expString, 'ig');\n }\n startExp = data[key].length;\n endExp = (data[key] === '' || data[key] === '') ? data[key].length + 1 : data[key].length;\n var val = text.match(regExp);\n for (var index = 0; val && index < val.length && val[index] !== ''; index++) {\n text = text.replace(val[index], val[index].substr(startExp, val[index].length - endExp - startExp));\n }\n }\n }\n return text;\n };\n ClearFormat.prototype.clearFormatTags = function (text) {\n var lines = text.split('\\n');\n var tags = [this.parent.formatTags, this.parent.listTags];\n var str = '';\n for (var len = 0; len < lines.length; len++) {\n for (var num = 0; num < tags.length; num++) {\n var data = tags[num];\n var keys = Object.keys(data);\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n if (lines[len].indexOf(data[key]) === 0) {\n lines[len] = lines[len].replace(data[key], '');\n }\n }\n }\n }\n str = str + lines[len] + ((len !== lines.length - 1) ? '\\n' : '');\n }\n return str;\n };\n ClearFormat.prototype.clear = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = this.selection.getSelectedText(textArea);\n text = this.clearSelectionTags(text);\n text = this.clearFormatTags(text);\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, start, start + text.length);\n this.restore(textArea, start, start + text.length, e);\n };\n ClearFormat.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { MDLists } from './../plugin/lists';\nimport { MDFormats } from './../plugin/formats';\nimport { MDSelectionFormats } from './../plugin/md-selection-formats';\nimport { MarkdownSelection } from './../plugin/markdown-selection';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownFormatTags, markdownListsTags, markdownSelectionTags } from './../../common/config';\nimport { UndoRedoCommands } from './../plugin/undo';\nimport { MDLink } from './../plugin/link';\nimport * as EVENTS from './../../common/constant';\nimport { ClearFormat } from './../plugin/clearformat';\n/**\n * MarkdownParser internal component\n * @hidden\n */\nvar MarkdownParser = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n */\n function MarkdownParser(options) {\n this.initialize();\n extend(this, this, options, true);\n this.observer = new Observer(this);\n this.markdownSelection = new MarkdownSelection();\n this.listObj = new MDLists({ parent: this, syntax: this.listTags });\n this.formatObj = new MDFormats({ parent: this, syntax: this.formatTags });\n this.undoRedoManager = new UndoRedoCommands(this, options.options);\n this.mdSelectionFormats = new MDSelectionFormats({ parent: this, syntax: this.selectionTags });\n this.linkObj = new MDLink(this);\n this.clearObj = new ClearFormat(this);\n this.wireEvents();\n }\n MarkdownParser.prototype.initialize = function () {\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n MarkdownParser.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n };\n MarkdownParser.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n MarkdownParser.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n MarkdownParser.prototype.execCommand = function (command, value, event, callBack, text, exeValue) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(CONSTANT.LISTS_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.selectionCommand, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'links':\n case 'images':\n this.observer.notify(CONSTANT.LINK_COMMAND, { subCommand: value, event: event, callBack: callBack, item: exeValue });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n }\n };\n return MarkdownParser;\n}());\nexport { MarkdownParser };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Formatter } from './formatter';\nimport { MarkdownParser } from './../../markdown-parser/base/markdown-parser';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownKeyConfig, markdownListsTags, markdownFormatTags, markdownSelectionTags } from './../../common/config';\n/**\n * Markdown adapter\n * @hidden\n */\nvar MarkdownFormatter = /** @class */ (function (_super) {\n __extends(MarkdownFormatter, _super);\n function MarkdownFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (options && _this.element) {\n _this.updateFormatter(_this.element, document, options.options);\n }\n return _this;\n }\n MarkdownFormatter.prototype.initialize = function () {\n this.keyConfig = markdownKeyConfig;\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n */\n MarkdownFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement) {\n this.editorManager = new MarkdownParser({\n element: editElement,\n formatTags: this.formatTags,\n listTags: this.listTags,\n selectionTags: this.selectionTags,\n options: options\n });\n }\n };\n return MarkdownFormatter;\n}(Formatter));\nexport { MarkdownFormatter };\n","/**\n * Markdown module is used to render RichTextEditor as Markdown editor content\n * @hidden\n */\nvar MarkdownRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function MarkdownRender(parent) {\n this.parent = parent;\n this.rteID = this.parent.element.id;\n }\n /**\n * The function is used to render RichTextEditor content div\n */\n MarkdownRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { id: this.rteID + '_view', className: 'e-rte-content' });\n this.editableElement = this.parent.createElement('textarea', {\n className: 'e-content',\n id: this.rteID + '_editable-content'\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n * @return {Element}\n */\n MarkdownRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n MarkdownRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n MarkdownRender.prototype.getText = function () {\n return this.getEditPanel().value;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n */\n MarkdownRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n */\n MarkdownRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return MarkdownRender;\n}());\nexport { MarkdownRender };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { MarkdownFormatter } from '../formatter/markdown-formatter';\nimport { RenderType } from '../base/enum';\nimport { MarkdownToolbarStatus } from './markdown-toolbar-status';\nimport { MarkdownRender } from '../renderer/markdown-renderer';\nimport { MarkdownSelection } from './../../markdown-parser/plugin/markdown-selection';\n/**\n * `MarkdownEditor` module is used to markdown editor\n */\nvar MarkdownEditor = /** @class */ (function () {\n function MarkdownEditor(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n */\n MarkdownEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n MarkdownEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.saveSelection = new MarkdownSelection();\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.markdownToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n };\n MarkdownEditor.prototype.onSelectionSave = function () {\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.save(textArea.selectionStart, textArea.selectionEnd);\n };\n MarkdownEditor.prototype.onSelectionRestore = function (e) {\n this.contentRenderer.getEditPanel().focus();\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.restore(textArea);\n };\n MarkdownEditor.prototype.onToolbarClick = function (args) {\n var text;\n var startOffset;\n var endOffset;\n var item = args.item;\n if (this.parent.editorMode === 'Markdown') {\n var textArea = this.parent.contentModule.getEditPanel();\n textArea.focus();\n startOffset = textArea.selectionStart;\n endOffset = textArea.selectionEnd;\n text = textArea.value.substring(startOffset, endOffset);\n }\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, { member: 'link', args: args, text: text, module: 'Markdown' });\n break;\n case 'Image':\n this.parent.notify(events.insertImage, { member: 'image', args: args, text: text, module: 'Markdown' });\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n };\n MarkdownEditor.prototype.instantiateRenderer = function () {\n this.renderFactory.addRenderer(RenderType.Content, new MarkdownRender(this.parent));\n };\n MarkdownEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.markdownToolbarClick, this.onToolbarClick);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n };\n MarkdownEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n this.parent.formatter = new MarkdownFormatter({\n element: editElement,\n options: option\n });\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new MarkdownToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n MarkdownEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n };\n /**\n * For internal use only - Get the module name.\n */\n MarkdownEditor.prototype.getModuleName = function () {\n return 'markdownEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n MarkdownEditor.prototype.selectAll = function () {\n this.parent.formatter.editorManager.markdownSelection.setSelection(this.parent.contentModule.getEditPanel(), 0, this.parent.contentModule.getEditPanel().value.length);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n MarkdownEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()));\n };\n return MarkdownEditor;\n}());\nexport { MarkdownEditor };\n","/**\n * Constant values for EditorManager\n */\n/* Image plugin events\n * @hidden\n */\nexport var IMAGE = 'INSERT-IMAGE';\nexport var TABLE = 'INSERT-TABLE';\nexport var LINK = 'INSERT-LINK';\nexport var INSERT_ROW = 'INSERT-ROW';\nexport var INSERT_COLUMN = 'INSERT-COLUMN';\nexport var DELETEROW = 'DELETE-ROW';\nexport var DELETECOLUMN = 'DELETE-COLUMN';\nexport var REMOVETABLE = 'REMOVE-TABLE';\nexport var TABLEHEADER = 'TABLE-HEADER';\nexport var TABLE_VERTICAL_ALIGN = 'TABLE_VERTICAL_ALIGN';\n/* Alignments plugin events\n * @hidden\n */\nexport var ALIGNMENT_TYPE = 'alignment-type';\n/* Indents plugin events\n * @hidden\n */\nexport var INDENT_TYPE = 'indent-type';\n/* Constant tag names\n */\n/** @hidden */\nexport var DEFAULT_TAG = 'p';\n/** @hidden */\nexport var BLOCK_TAGS = ['address', 'article', 'aside', 'audio', 'blockquote',\n 'canvas', 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'main', 'nav',\n 'noscript', 'ol', 'output', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul', 'video'];\n/** @hidden */\nexport var IGNORE_BLOCK_TAGS = ['td', 'th'];\n/** @hidden */\nexport var TABLE_BLOCK_TAGS = ['table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr'];\n/* Selection plugin events\n * @hidden\n */\nexport var SELECTION_TYPE = 'selection-type';\n/* Insert HTML plugin events\n * @hidden\n */\nexport var INSERTHTML_TYPE = 'inserthtml-type';\n/* Clear Format HTML plugin events\n * @hidden\n */\nexport var CLEAR_TYPE = 'clear-type';\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nvar NodeSelection = /** @class */ (function () {\n function NodeSelection() {\n this.startNodeName = [];\n this.endNodeName = [];\n }\n NodeSelection.prototype.saveInstance = function (range, body) {\n this.range = range.cloneRange();\n this.rootNode = this.documentFromRange(range);\n this.body = body;\n this.startContainer = this.getNodeArray(range.startContainer, true);\n this.endContainer = this.getNodeArray(range.endContainer, false);\n this.startOffset = range.startOffset;\n this.endOffset = range.endOffset;\n this.html = this.body.innerHTML;\n return this;\n };\n NodeSelection.prototype.documentFromRange = function (range) {\n return (9 === range.startContainer.nodeType) ? range.startContainer : range.startContainer.ownerDocument;\n };\n NodeSelection.prototype.getRange = function (docElement) {\n var select = this.get(docElement);\n var range = select && select.rangeCount > 0 ? select.getRangeAt(select.rangeCount - 1) : docElement.createRange();\n return (range.startContainer !== docElement || range.endContainer !== docElement\n || range.startOffset || range.endOffset || (range.setStart(docElement.body, 0),\n range.collapse(!0)),\n range);\n };\n NodeSelection.prototype.get = function (docElement) {\n return docElement.defaultView.getSelection();\n };\n NodeSelection.prototype.save = function (range, docElement) {\n range = (range) ? range.cloneRange() : this.getRange(docElement);\n return this.saveInstance(range, docElement.body);\n };\n NodeSelection.prototype.getIndex = function (node) {\n var index;\n var num = 0;\n node = !node.previousSibling && node.tagName === 'BR' ? node : node.previousSibling;\n if (node) {\n for (var type = node.nodeType; node; null) {\n index = node.nodeType;\n num++;\n type = index;\n node = node.previousSibling;\n }\n }\n return num;\n };\n NodeSelection.prototype.isChildNode = function (nodeCollection, parentNode) {\n for (var index = 0; index < parentNode.childNodes.length; index++) {\n if (nodeCollection.indexOf(parentNode.childNodes[index]) > -1) {\n return true;\n }\n }\n return false;\n };\n NodeSelection.prototype.getNode = function (startNode, endNode, nodeCollection) {\n if (endNode === startNode &&\n (startNode.nodeType === 3 || !startNode.firstChild || nodeCollection.indexOf(startNode.firstChild) !== -1\n || this.isChildNode(nodeCollection, startNode))) {\n return null;\n }\n if (nodeCollection.indexOf(startNode.firstChild) === -1 && startNode.firstChild && !this.isChildNode(nodeCollection, startNode)) {\n return startNode.firstChild;\n }\n if (startNode.nextSibling) {\n return startNode.nextSibling;\n }\n if (!startNode.parentNode) {\n return null;\n }\n else {\n return startNode.parentNode;\n }\n };\n NodeSelection.prototype.getNodeCollection = function (range) {\n var startNode = range.startContainer.childNodes[range.startOffset]\n || range.startContainer;\n var endNode = range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer;\n if (startNode === endNode && startNode.childNodes.length === 0) {\n return [startNode];\n }\n var nodeCollection = [];\n do {\n if (nodeCollection.indexOf(startNode) === -1) {\n nodeCollection.push(startNode);\n }\n startNode = this.getNode(startNode, endNode, nodeCollection);\n } while (startNode);\n return nodeCollection;\n };\n NodeSelection.prototype.getParentNodeCollection = function (range) {\n return this.getParentNodes(this.getNodeCollection(range), range);\n };\n NodeSelection.prototype.getParentNodes = function (nodeCollection, range) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection.indexOf(nodeCollection[index].parentNode) !== -1)\n || (nodeCollection[index].nodeType === 3 &&\n range.startContainer !== range.endContainer)) {\n nodeCollection.splice(index, 1);\n index--;\n }\n else if (nodeCollection[index].nodeType === 3) {\n nodeCollection[index] = nodeCollection[index].parentNode;\n }\n }\n return nodeCollection;\n };\n NodeSelection.prototype.getSelectionNodeCollection = function (range) {\n return this.getSelectionNodes(this.getNodeCollection(range));\n };\n NodeSelection.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || nodeCollection[index].textContent.trim() === '') {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n NodeSelection.prototype.getInsertNodeCollection = function (range) {\n return this.getInsertNodes(this.getNodeCollection(range));\n };\n NodeSelection.prototype.getInsertNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection[index].childNodes.length !== 0 &&\n nodeCollection[index].nodeType !== 3) ||\n (nodeCollection[index].nodeType === 3 &&\n nodeCollection[index].textContent === '')) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n NodeSelection.prototype.getNodeArray = function (node, isStart, root) {\n var array = [];\n ((isStart) ? (this.startNodeName = []) : (this.endNodeName = []));\n for (; node !== (root ? root : this.rootNode); null) {\n (isStart) ? this.startNodeName.push(node.nodeName.toLowerCase()) : this.endNodeName.push(node.nodeName.toLowerCase());\n array.push(this.getIndex(node));\n node = node.parentNode;\n }\n return array;\n };\n NodeSelection.prototype.setRangePoint = function (range, isvalid, num, size) {\n var node = this.rootNode;\n var index = num.length;\n var constant = size;\n for (; index--; null) {\n node = node.childNodes[num[index]];\n }\n if (node && constant >= 0) {\n range[isvalid ? 'setStart' : 'setEnd'](node, constant);\n }\n return range;\n };\n NodeSelection.prototype.restore = function () {\n var range = this.range.cloneRange();\n range = this.setRangePoint(range, true, this.startContainer, this.startOffset);\n range = this.setRangePoint(range, false, this.endContainer, this.endOffset);\n this.selectRange(this.rootNode, range);\n return range;\n };\n NodeSelection.prototype.selectRange = function (docElement, range) {\n this.setRange(docElement, range);\n this.save(range, docElement);\n };\n NodeSelection.prototype.setRange = function (docElement, range) {\n var selection = this.get(docElement);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n NodeSelection.prototype.setSelectionText = function (docElement, startNode, endNode, startIndex, endIndex) {\n var range = docElement.createRange();\n range.setStart(startNode, startIndex);\n range.setEnd(endNode, endIndex);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.setSelectionContents = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNode(element);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.setSelectionNode = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNodeContents(element);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.getSelectedNodes = function (docElement) {\n return this.getNodeCollection(this.getRange(docElement));\n };\n NodeSelection.prototype.Clear = function (docElement) {\n this.get(docElement).removeAllRanges();\n };\n NodeSelection.prototype.insertParentNode = function (docElement, newNode, range) {\n range.surroundContents(newNode);\n this.selectRange(docElement, range);\n };\n NodeSelection.prototype.setCursorPoint = function (docElement, element, point) {\n var range = docElement.createRange();\n var selection = docElement.defaultView.getSelection();\n range.setStart(element, point);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n return NodeSelection;\n}());\nexport { NodeSelection };\n","import * as CONSTANT from './../base/constant';\nimport { append, detach } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nexport var markerClassName = {\n startSelection: 'e-editor-select-start',\n endSelection: 'e-editor-select-end'\n};\n/**\n * DOMNode internal plugin\n * @hidden\n */\nvar DOMNode = /** @class */ (function () {\n /**\n * Constructor for creating the DOMNode plugin\n * @hidden\n */\n function DOMNode(parent, currentDocument) {\n this.parent = parent;\n this.nodeSelection = new NodeSelection();\n this.currentDocument = currentDocument;\n }\n DOMNode.prototype.contents = function (element) {\n return (element && 'IFRAME' !== element.tagName ? Array.prototype.slice.call(element.childNodes || []) : []);\n };\n DOMNode.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n DOMNode.prototype.isLink = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && 'a' === element.tagName.toLowerCase()));\n };\n DOMNode.prototype.blockParentNode = function (element) {\n for (; element && element.parentNode !== this.parent && ((!element.parentNode ||\n !this.hasClass(element.parentNode, 'e-node-inner'))); null) {\n element = element.parentNode;\n if (this.isBlockNode(element)) {\n return element;\n }\n }\n return element;\n };\n DOMNode.prototype.rawAttributes = function (element) {\n var rawAttr = {};\n var attributes = element.attributes;\n if (attributes.length > 0) {\n for (var d = 0; d < attributes.length; d++) {\n var e = attributes[d];\n rawAttr[e.nodeName] = e.value;\n }\n }\n return rawAttr;\n };\n DOMNode.prototype.attributes = function (element) {\n if (!element) {\n return '';\n }\n var attr = '';\n var rawAttr = this.rawAttributes(element);\n var orderRawAttr = Object.keys(rawAttr).sort();\n for (var e = 0; e < orderRawAttr.length; e++) {\n var attrKey = orderRawAttr[e];\n var attrValue = rawAttr[attrKey];\n /* tslint:disable */\n if (attrValue.indexOf(\"'\") < 0 && attrValue.indexOf('\"') >= 0) {\n attr += ' ' + attrKey + \"='\" + attrValue + \"'\";\n }\n else if (attrValue.indexOf('\"') >= 0 && attrValue.indexOf(\"'\") >= 0) {\n /* tslint:enable */\n attrValue = attrValue.replace(/\"/g, '"');\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n else {\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n }\n return attr;\n };\n DOMNode.prototype.clearAttributes = function (element) {\n for (var attr = element.attributes, c = attr.length - 1; c >= 0; c--) {\n var key = attr[c];\n element.removeAttribute(key.nodeName);\n }\n };\n DOMNode.prototype.openTagString = function (element) {\n return '<' + element.tagName.toLowerCase() + this.attributes(element) + '>';\n };\n DOMNode.prototype.closeTagString = function (element) {\n return '';\n };\n DOMNode.prototype.createTagString = function (tagName, relativeElement, innerHTML) {\n return '<' + tagName.toLowerCase() + this.attributes(relativeElement) + '>' + innerHTML + '';\n };\n DOMNode.prototype.isList = function (element) {\n return !!element && ['UL', 'OL'].indexOf(element.tagName) >= 0;\n };\n DOMNode.prototype.isElement = function (element) {\n return element === this.parent;\n };\n DOMNode.prototype.isEditable = function (element) {\n return ((!element.getAttribute || element.getAttribute('contenteditable') === 'true')\n && ['STYLE', 'SCRIPT'].indexOf(element.tagName) < 0);\n };\n DOMNode.prototype.hasClass = function (element, className) {\n return element && element.classList && element.classList.contains(className);\n };\n DOMNode.prototype.replaceWith = function (element, value) {\n var parentNode = element.parentNode;\n parentNode.insertBefore(this.parseHTMLFragment(value), element);\n detach(element);\n };\n DOMNode.prototype.parseHTMLFragment = function (value) {\n /* tslint:disable */\n return document.createRange().createContextualFragment(value);\n /* tslint:enable */\n };\n DOMNode.prototype.wrap = function (element, wrapper) {\n element.parentNode.insertBefore(wrapper, element);\n wrapper = element.previousSibling;\n wrapper.appendChild(element);\n return wrapper;\n };\n DOMNode.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n DOMNode.prototype.wrapInner = function (parent, wrapper) {\n parent.appendChild(wrapper);\n wrapper = parent.querySelector('.e-rte-wrap-inner');\n wrapper.classList.remove('e-rte-wrap-inner');\n if (wrapper.classList.length === 0) {\n wrapper.removeAttribute('class');\n }\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n return wrapper;\n };\n DOMNode.prototype.unWrap = function (element) {\n var parent = element.parentNode;\n var unWrapNode = [];\n while (element.firstChild) {\n unWrapNode.push(element.firstChild);\n parent.insertBefore(element.firstChild, element);\n }\n unWrapNode = unWrapNode.length > 0 ? unWrapNode : [element.parentNode];\n parent.removeChild(element);\n return unWrapNode;\n };\n DOMNode.prototype.getSelectedNode = function (element, index) {\n if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 &&\n element.childNodes[index - 1] && element.childNodes[index - 1].nodeType === Node.ELEMENT_NODE &&\n (element.childNodes[index - 1].classList.contains(markerClassName.startSelection) ||\n element.childNodes[index - 1].classList.contains(markerClassName.endSelection))) {\n element = element.childNodes[index - 1];\n }\n else if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 && element.childNodes[index]) {\n element = element.childNodes[index];\n }\n if (element.nodeType === Node.TEXT_NODE) {\n element = element.parentNode;\n }\n return element;\n };\n DOMNode.prototype.nodeFinds = function (element, elements) {\n var existNodes = [];\n for (var i = 0; i < elements.length; i++) {\n if (element.contains(elements[i]) && element !== elements[i]) {\n existNodes.push(elements[i]);\n }\n }\n return existNodes;\n };\n DOMNode.prototype.isEditorArea = function () {\n var range = this.getRangePoint(0);\n var element;\n for (element = range.commonAncestorContainer; element && !this.isElement(element); null) {\n element = element.parentNode;\n }\n return !!this.isElement(element);\n };\n DOMNode.prototype.getRangePoint = function (point) {\n var selection = this.getSelection();\n var ranges = [];\n if (selection && selection.getRangeAt && selection.rangeCount) {\n ranges = [];\n for (var f = 0; f < selection.rangeCount; f++) {\n ranges.push(selection.getRangeAt(f));\n }\n }\n else {\n ranges = [this.currentDocument.createRange()];\n }\n return 'undefined' !== typeof point ? ranges[point] : ranges;\n };\n DOMNode.prototype.getSelection = function () {\n return this.nodeSelection.get(this.currentDocument);\n };\n DOMNode.prototype.getPreviousNode = function (element) {\n element = element.previousSibling;\n for (; element && element.textContent === '\\n'; null) {\n element = element.previousSibling;\n }\n return element;\n };\n DOMNode.prototype.encode = function (value) {\n var divNode = document.createElement('div');\n divNode.innerText = value;\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n DOMNode.prototype.saveMarker = function (save) {\n var start = this.parent.querySelector('.' + markerClassName.startSelection);\n var startTextNode;\n if (this.hasClass(start, markerClassName.startSelection) && start.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, start, this.encode(start.textContent));\n this.replaceWith(start, replace);\n start = this.parent.querySelector('.' + markerClassName.startSelection);\n start.classList.remove(markerClassName.startSelection);\n startTextNode = start.childNodes[0];\n }\n else {\n startTextNode = this.unWrap(start)[0];\n }\n var endTextNode;\n var end = this.parent.querySelector('.' + markerClassName.endSelection);\n if (this.hasClass(end, markerClassName.endSelection) && end.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, end, this.encode(end.textContent));\n this.replaceWith(end, replace);\n end = this.parent.querySelector('.' + markerClassName.endSelection);\n end.classList.remove(markerClassName.endSelection);\n endTextNode = end.childNodes[0];\n }\n else {\n endTextNode = end ? this.unWrap(end)[0] : startTextNode;\n }\n save.startContainer = save.getNodeArray(startTextNode, true);\n save.endContainer = save.getNodeArray(endTextNode, false);\n return save;\n };\n DOMNode.prototype.marker = function (className, textContent) {\n return '' + textContent + '';\n };\n DOMNode.prototype.setMarker = function (save) {\n var range = save.range;\n var start = (range.startContainer.childNodes[range.startOffset]\n || range.startContainer);\n var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer);\n if ((start.nodeType === Node.ELEMENT_NODE && end.nodeType === Node.ELEMENT_NODE) && (start.contains(end) || end.contains(start))) {\n var existNode = start.contains(end) ? start : end;\n var isElement = existNode.nodeType !== Node.TEXT_NODE;\n if (isElement) {\n var nodes = [];\n var textNodes = [];\n for (var node = existNode; existNode.contains(node); null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (textNodes.indexOf(node) < 0 && (node.nodeType === Node.TEXT_NODE ||\n (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0\n && node.tagName === 'BR'))) {\n textNodes.push(node);\n }\n }\n if (textNodes.length) {\n start = start.contains(end) ? textNodes[0] : start;\n end = textNodes[textNodes.length - 1];\n }\n }\n }\n if (start !== end) {\n if (start.nodeType !== Node.TEXT_NODE && start.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(start.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + markerClassName.startSelection);\n markerStart.appendChild(start);\n }\n else {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n }\n if (end.nodeType !== Node.TEXT_NODE && end.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(end.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n this.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\n var markerEnd = range.endContainer.querySelector('.' + markerClassName.endSelection);\n markerEnd.appendChild(end);\n }\n else {\n this.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\n }\n }\n else {\n if (start.nodeType === 3) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n }\n else {\n start = start.tagName === 'BR' ? start.parentNode : start;\n var marker = this.marker(markerClassName.startSelection, '');\n append([this.parseHTMLFragment(marker)], start);\n }\n }\n };\n DOMNode.prototype.createTempNode = function (element) {\n var textContent = element.textContent;\n if (element.tagName === 'BR') {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + '>';\n var node = element.parentNode;\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.tagName.toLocaleLowerCase()) >= 0) {\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n }\n }\n else if (((element.nodeType !== Node.TEXT_NODE &&\n (element.classList.contains(markerClassName.startSelection) ||\n element.classList.contains(markerClassName.endSelection))) ||\n textContent.replace(/\\n/g, '').replace(/(^ *)|( *$)/g, '').length > 0 ||\n textContent.length && textContent.indexOf('\\n') < 0)) {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + '>';\n var target = element;\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n var ignoreBr = target.nodeType === Node.ELEMENT_NODE && target.firstChild && target.firstChild.nodeName === 'BR'\n && (target.classList.contains(markerClassName.startSelection) ||\n target.classList.contains(markerClassName.endSelection));\n if (!ignoreBr && element.nextElementSibling && element.nextElementSibling.tagName === 'BR') {\n element.appendChild(element.nextElementSibling);\n }\n }\n return element;\n };\n DOMNode.prototype.blockNodes = function () {\n var collectionNodes = [];\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n var ranges = this.getRangePoint();\n for (var j = 0; j < ranges.length; j++) {\n var parentNode = void 0;\n var range = ranges[j];\n var startNode = this.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.getSelectedNode(range.endContainer, range.endOffset);\n if (this.isBlockNode(startNode) && collectionNodes.indexOf(startNode) < 0) {\n collectionNodes.push(startNode);\n }\n parentNode = this.blockParentNode(startNode);\n if (parentNode && collectionNodes.indexOf(parentNode) < 0) {\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(parentNode.tagName.toLocaleLowerCase()) >= 0 && (startNode.tagName === 'BR' ||\n startNode.nodeType === Node.TEXT_NODE ||\n startNode.classList.contains(markerClassName.startSelection) ||\n startNode.classList.contains(markerClassName.endSelection))) {\n var tempNode = startNode.previousSibling &&\n startNode.previousSibling.nodeType === Node.TEXT_NODE ?\n startNode.previousSibling : startNode;\n collectionNodes.push(this.createTempNode(tempNode));\n }\n else {\n collectionNodes.push(parentNode);\n }\n }\n var nodes = [];\n for (var node = startNode; node !== endNode && node !== this.parent; null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node && (node.tagName === 'BR' || node.nodeType === Node.TEXT_NODE ||\n node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection)) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node);\n }\n else if (node.nextSibling && (node.nextSibling.tagName === 'BR' ||\n node.nextSibling.nodeType === Node.TEXT_NODE ||\n node.nextSibling.classList.contains(markerClassName.startSelection) ||\n node.nextSibling.classList.contains(markerClassName.endSelection)) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.nextSibling.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node.nextSibling);\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (collectionNodes.indexOf(node) < 0 && node.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0 &&\n (node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection))) {\n collectionNodes.push(this.createTempNode(node));\n }\n if (this.isBlockNode(node) && this.ignoreTableTag(node) && nodes.indexOf(node) < 0 &&\n collectionNodes.indexOf(node) < 0 && (node !== endNode || range.endOffset > 0)) {\n collectionNodes.push(node);\n }\n }\n parentNode = this.blockParentNode(endNode);\n if (parentNode && this.ignoreTableTag(parentNode) && collectionNodes.indexOf(parentNode) < 0) {\n collectionNodes.push(parentNode);\n }\n }\n }\n for (var i = collectionNodes.length - 1; i > 0; i--) {\n var nodes = this.nodeFinds(collectionNodes[i], collectionNodes);\n if (nodes.length) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (collectionNodes[i].tagName === 'LI' && listNodes.length > 0) {\n continue;\n }\n else {\n collectionNodes.splice(i, 1);\n }\n }\n }\n return collectionNodes;\n };\n DOMNode.prototype.ignoreTableTag = function (element) {\n return !(CONSTANT.TABLE_BLOCK_TAGS.indexOf(element.tagName.toLocaleLowerCase()) >= 0);\n };\n return DOMNode;\n}());\nexport { DOMNode };\n","import * as CONSTANT from './../base/constant';\nimport { createElement, detach, prepend, append, attributes } from '@syncfusion/ej2-base';\nimport { markerClassName } from './dom-node';\nimport * as EVENTS from './../../common/constant';\n/**\n * Lists internal component\n * @hidden\n */\nvar Lists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n */\n function Lists(parent) {\n this.parent = parent;\n this.domNode = this.parent.domNode;\n this.addEventListener();\n }\n Lists.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.LIST_TYPE, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n Lists.prototype.keyDownHandler = function (e) {\n if (e.event.which === 9) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n var blockNodes = void 0;\n var startOffset = range.startOffset;\n var endOffset = range.endOffset;\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n if ((startNode === endNode && (startNode.nodeName === 'BR' || startNode.nodeName === '#text') &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(startNode.parentNode.tagName.toLocaleLowerCase()) >= 0)) {\n return;\n }\n else {\n blockNodes = this.domNode.blockNodes();\n }\n var nodes = [];\n var isNested = true;\n for (var i = 0; i < blockNodes.length; i++) {\n if (blockNodes[i].tagName === 'LI') {\n nodes.push(blockNodes[i]);\n }\n else if (blockNodes[i].parentNode.tagName === 'LI') {\n nodes.push(blockNodes[i].parentNode);\n }\n }\n if (nodes.length > 1 || nodes.length && ((startOffset === 0 && endOffset === 0) || e.ignoreDefault)) {\n e.event.preventDefault();\n e.event.stopPropagation();\n if (!(e.event.action && e.event.action === 'indent')) {\n this.domNode.setMarker(this.saveSelection);\n }\n this.currentAction = this.getAction(nodes[0]);\n if (e.event.shiftKey) {\n this.revertList(nodes);\n this.revertClean();\n }\n else {\n isNested = this.nestedList(nodes);\n }\n if (isNested) {\n this.cleanNode();\n this.parent.editableElement.focus();\n }\n if (!(e.event.action && e.event.action === 'indent')) {\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes(),\n event: e.event\n });\n }\n }\n }\n }\n else {\n switch (e.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n }\n };\n Lists.prototype.getAction = function (element) {\n var parentNode = element.parentNode;\n return (parentNode.nodeName === 'OL' ? 'OL' : 'UL');\n };\n Lists.prototype.revertClean = function () {\n var collectionNodes = this.parent.editableElement.querySelectorAll('ul, ol');\n for (var i = 0; i < collectionNodes.length; i++) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (listNodes.length > 0) {\n for (var j = 0; j < listNodes.length; j++) {\n var prevSibling = listNodes[j].previousSibling;\n if (prevSibling && prevSibling.tagName === 'LI') {\n prevSibling.appendChild(listNodes[j]);\n }\n }\n }\n }\n };\n Lists.prototype.nestedList = function (elements) {\n var isNested = false;\n for (var i = 0; i < elements.length; i++) {\n var prevSibling = this.domNode.getPreviousNode(elements[i]);\n if (prevSibling) {\n isNested = true;\n var siblingList = elements[i].querySelectorAll('ul, ol');\n var firstNode = siblingList[0];\n if (firstNode) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNode);\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n append([firstNode], prevSibling);\n detach(elements[i]);\n }\n else {\n siblingList = prevSibling.querySelectorAll('ul, ol');\n firstNode = siblingList[0];\n if (firstNode) {\n append([elements[i]], firstNode);\n }\n else {\n var nestedElement = createElement(elements[i].parentNode.tagName);\n append([nestedElement], prevSibling);\n append([elements[i]], nestedElement);\n }\n }\n }\n }\n return isNested;\n };\n Lists.prototype.applyListsHandler = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.currentAction = e.subCommand;\n this.domNode.setMarker(this.saveSelection);\n var listsNodes = this.domNode.blockNodes();\n for (var i = 0; i < listsNodes.length; i++) {\n if (listsNodes[i].tagName !== 'LI' && 'LI' === listsNodes[i].parentNode.tagName) {\n listsNodes[i] = listsNodes[i].parentNode;\n }\n }\n this.applyLists(listsNodes, this.currentAction);\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Lists.prototype.applyLists = function (elements, type) {\n var isReverse = true;\n if (this.isRevert(elements, type)) {\n this.revertList(elements);\n }\n else {\n this.checkLists(elements, type);\n for (var i = 0; i < elements.length; i++) {\n if ('LI' !== elements[i].tagName) {\n isReverse = false;\n var openTag = '<' + type + this.domNode.attributes(elements[i]) + '>';\n var closeTag = '';\n var newTag = 'li class=\"e-rte-replace-tag\"';\n var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ? elements[i].innerHTML :\n elements[i].outerHTML);\n var innerHTML = this.domNode.createTagString(newTag, null, replaceHTML);\n var collectionString = openTag + innerHTML + closeTag;\n this.domNode.replaceWith(elements[i], collectionString);\n var element = this.parent.editableElement.querySelector('.e-rte-replace-tag');\n element.removeAttribute('class');\n }\n }\n }\n this.cleanNode();\n this.parent.editableElement.focus();\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n };\n Lists.prototype.isRevert = function (nodes, tagName) {\n var isRevert = true;\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].tagName !== 'LI') {\n return false;\n }\n if (nodes[i].parentNode.tagName !== tagName) {\n isRevert = false;\n }\n }\n return isRevert;\n };\n Lists.prototype.checkLists = function (nodes, tagName) {\n var nodesTemp = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i].parentNode;\n if (nodes[i].tagName === 'LI' && node.tagName !== tagName && nodesTemp.indexOf(node) < 0) {\n nodesTemp.push(node);\n }\n }\n for (var j = nodesTemp.length - 1; j >= 0; j--) {\n var h = nodesTemp[j];\n var replace = '<' + tagName.toLowerCase() + ' '\n + this.domNode.attributes(h) + '>' + h.innerHTML + '';\n this.domNode.replaceWith(nodesTemp[j], replace);\n }\n };\n Lists.prototype.cleanNode = function () {\n var liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');\n for (var c = 0; c < liParents.length; c++) {\n var node = liParents[c];\n if (this.domNode.isList(node.previousSibling) &&\n this.domNode.openTagString(node) === this.domNode.openTagString(node.previousSibling)) {\n var contentNodes = this.domNode.contents(node);\n for (var f = 0; f < contentNodes.length; f++) {\n node.previousSibling.appendChild(contentNodes[f]);\n }\n node.parentNode.removeChild(node);\n }\n }\n };\n Lists.prototype.revertList = function (elements) {\n for (var i = elements.length - 1; i >= 0; i--) {\n for (var j = i - 1; j >= 0; j--) {\n if (elements[j].contains((elements[i])) || elements[j] === elements[i]) {\n elements.splice(i, 1);\n break;\n }\n }\n }\n var viewNode = [];\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var parentNode = elements[i].parentNode;\n var className = element.getAttribute('class');\n if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),\n 'LI' === parentNode.parentNode.tagName) {\n element.parentNode.insertBefore(this.closeTag('LI'), element);\n this.domNode.insertAfter(this.openTag('LI'), element);\n }\n else {\n var classAttr = '';\n if (className) {\n classAttr += ' class=\"' + className + '\"';\n }\n if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + classAttr + ' class=\"e-rte-wrap-inner\"' +\n this.domNode.attributes(parentNode) + '>';\n this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));\n }\n else if (this.domNode.contents(element)[0].nodeType === 3) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||\n this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else {\n var childNode = element.firstChild;\n className = childNode.getAttribute('class');\n attributes(childNode, this.domNode.rawAttributes(parentNode));\n if (className && childNode.getAttribute('class')) {\n attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });\n }\n }\n append([this.openTag('LI')], element);\n prepend([this.closeTag('LI')], element);\n }\n this.domNode.insertAfter(this.openTag(parentNode.tagName), element);\n if (parentNode.parentNode.tagName === 'LI') {\n parentNode = parentNode.parentNode.parentNode;\n }\n if (viewNode.indexOf(parentNode) < 0) {\n viewNode.push(parentNode);\n }\n }\n for (var i = 0; i < viewNode.length; i++) {\n var node = viewNode[i];\n var nodeInnerHtml = node.innerHTML;\n var closeTag = /<\\/span>/g;\n var openTag = /<\\/span>/g;\n nodeInnerHtml = nodeInnerHtml.replace(closeTag, '');\n nodeInnerHtml = nodeInnerHtml.replace(openTag, '<$1 ' + this.domNode.attributes(node) + '>');\n this.domNode.replaceWith(node, this.domNode.openTagString(node) + nodeInnerHtml.trim() + this.domNode.closeTagString(node));\n }\n var emptyLi = this.parent.editableElement.querySelectorAll('li:empty');\n for (var i = 0; i < emptyLi.length; i++) {\n detach(emptyLi[i]);\n }\n var emptyUl = this.parent.editableElement.querySelectorAll('ul:empty, ol:empty');\n for (var i = 0; i < emptyUl.length; i++) {\n detach(emptyUl[i]);\n }\n };\n Lists.prototype.openTag = function (type) {\n return this.domNode.parseHTMLFragment('');\n };\n Lists.prototype.closeTag = function (type) {\n return this.domNode.parseHTMLFragment('');\n };\n return Lists;\n}());\nexport { Lists };\n","import * as EVENTS from './../../common/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Formats internal component\n * @hidden\n */\nvar Formats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function Formats(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n Formats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n };\n Formats.prototype.getParentNode = function (node) {\n for (; node.parentNode && node.parentNode !== this.parent.editableElement; null) {\n node = node.parentNode;\n }\n return node;\n };\n Formats.prototype.applyFormats = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var formatsNodes = this.parent.domNode.blockNodes();\n for (var i = 0; i < formatsNodes.length; i++) {\n var parentNode = void 0;\n var replaceHTML = void 0;\n if (e.subCommand.toLowerCase() === 'blockquote') {\n parentNode = this.getParentNode(formatsNodes[i]);\n replaceHTML = this.parent.domNode.isList(parentNode) ? parentNode.outerHTML : parentNode.innerHTML;\n }\n else {\n parentNode = formatsNodes[i];\n replaceHTML = parentNode.innerHTML;\n }\n if (e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() ||\n isNullOrUndefined(parentNode.parentNode) || parentNode.tagName === 'LI') {\n continue;\n }\n this.cleanFormats(parentNode, e.subCommand);\n var replaceTag = this.parent.domNode.createTagString(e.subCommand, parentNode, replaceHTML.replace(/>\\s+<'));\n this.parent.domNode.replaceWith(parentNode, replaceTag);\n }\n this.parent.editableElement.focus();\n save = this.parent.domNode.saveMarker(save);\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Formats.prototype.cleanFormats = function (element, tagName) {\n var ignoreAttr = ['display', 'font-size', 'margin-top', 'margin-bottom', 'margin-left', 'margin-right', 'font-weight'];\n tagName = tagName.toLowerCase();\n for (var i = 0; i < ignoreAttr.length && (tagName !== 'p' && tagName !== 'blockquote' && tagName !== 'pre'); i++) {\n element.style.removeProperty(ignoreAttr[i]);\n }\n };\n return Formats;\n}());\nexport { Formats };\n","/**\n * Node appending methods.\n * @hidden\n */\nvar InsertMethods = /** @class */ (function () {\n function InsertMethods() {\n }\n InsertMethods.WrapBefore = function (textNode, parentNode, isAfter) {\n parentNode.innerText = textNode.textContent;\n (!isAfter) ? this.AppendBefore(parentNode, textNode) : this.AppendBefore(parentNode, textNode, true);\n if (textNode.parentNode) {\n textNode.parentNode.removeChild(textNode);\n }\n return parentNode.childNodes[0];\n };\n InsertMethods.Wrap = function (childNode, parentNode) {\n this.AppendBefore(parentNode, childNode);\n parentNode.appendChild(childNode);\n return childNode;\n };\n InsertMethods.unwrap = function (node) {\n var parent = node.parentNode;\n var child = [];\n for (; node.firstChild; null) {\n child.push(parent.insertBefore(node.firstChild, node));\n }\n parent.removeChild(node);\n return child;\n };\n InsertMethods.AppendBefore = function (textNode, parentNode, isAfter) {\n return (parentNode.parentNode) ? ((!isAfter) ? parentNode.parentNode.insertBefore(textNode, parentNode)\n : parentNode.parentNode.insertBefore(textNode, parentNode.nextSibling)) :\n parentNode;\n };\n return InsertMethods;\n}());\nexport { InsertMethods };\n","import { NodeSelection } from './../../selection/index';\nimport { InsertMethods } from './insert-methods';\n/**\n * Split the Node based on selection\n * @hidden\n */\nvar NodeCutter = /** @class */ (function () {\n function NodeCutter() {\n this.position = -1;\n this.nodeSelection = new NodeSelection();\n }\n // Split Selection Node\n NodeCutter.prototype.GetSpliceNode = function (range, node) {\n node = this.SplitNode(range, node, true);\n node = this.SplitNode(range, node, false);\n return node;\n };\n NodeCutter.prototype.SplitNode = function (range, node, isCollapsed) {\n if (node) {\n var clone = range.cloneRange();\n var parent_1 = node.parentNode;\n var index = this.nodeSelection.getIndex(node);\n clone.collapse(isCollapsed);\n (isCollapsed) ? clone.setStartBefore(node) : clone.setEndAfter(node);\n var fragment = clone.extractContents();\n if (isCollapsed) {\n node = parent_1.childNodes[index];\n fragment = this.spliceEmptyNode(fragment, false);\n if (fragment && fragment.textContent !== '') {\n if (node) {\n InsertMethods.AppendBefore(fragment, node);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n node = divNode.firstChild;\n parent_1.appendChild(node);\n }\n }\n }\n else {\n node = parent_1.childNodes.length > 1 ? parent_1.childNodes[index] :\n parent_1.childNodes[0];\n fragment = this.spliceEmptyNode(fragment, true);\n if (fragment && fragment.textContent !== '') {\n if (node) {\n InsertMethods.AppendBefore(fragment, node, true);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n parent_1.insertBefore(divNode.firstChild, parent_1.firstChild);\n node = parent_1.firstChild;\n }\n }\n }\n return node;\n }\n else {\n return null;\n }\n };\n NodeCutter.prototype.spliceEmptyNode = function (fragment, isStart) {\n var len = fragment.childNodes.length - 1;\n if (len > -1 && !isStart) {\n this.spliceEmptyNode(fragment.childNodes[len], isStart);\n }\n else if (len > -1) {\n this.spliceEmptyNode(fragment.childNodes[0], isStart);\n }\n else if (fragment.nodeType !== 3 && fragment.nodeType !== 11) {\n fragment.parentNode.removeChild(fragment);\n }\n return fragment;\n };\n // Cursor Position split\n NodeCutter.prototype.GetCursorStart = function (indexes, index, isStart) {\n indexes = (isStart) ? indexes : indexes.reverse();\n var position = indexes[0];\n for (var num = 0; num < indexes.length && ((isStart) ? (indexes[num] < index) : (indexes[num] >= index)); num++) {\n position = indexes[num];\n }\n return position;\n };\n NodeCutter.prototype.GetCursorRange = function (docElement, range, node) {\n var cursorRange = docElement.createRange();\n var indexes = [];\n indexes.push(0);\n var str = this.TrimLineBreak(node.data);\n var index = str.indexOf(' ', 0);\n while (index !== -1) {\n if (indexes.indexOf(index) < 0) {\n indexes.push(index);\n }\n if (new RegExp('\\\\s').test(str[index - 1]) && (indexes.indexOf(index - 1) < 0)) {\n indexes.push(index - 1);\n }\n if (new RegExp('\\\\s').test(str[index + 1])) {\n indexes.push(index + 1);\n }\n index = str.indexOf(' ', (index + 1));\n }\n indexes.push(str.length);\n if ((indexes.indexOf(range.startOffset) >= 0)\n || ((indexes.indexOf(range.startOffset - 1) >= 0) && (range.startOffset !== 1\n || (range.startOffset === 1 && new RegExp('\\\\s').test(str[0])))\n || ((indexes[indexes.length - 1] - 1) === range.startOffset))) {\n cursorRange = range;\n this.position = 1;\n }\n else {\n var startOffset = this.GetCursorStart(indexes, range.startOffset, true);\n this.position = range.startOffset - startOffset;\n cursorRange.setStart(range.startContainer, startOffset);\n cursorRange.setEnd(range.startContainer, this.GetCursorStart(indexes, range.startOffset, false));\n }\n return cursorRange;\n };\n NodeCutter.prototype.GetCursorNode = function (docElement, range, node) {\n return this.GetSpliceNode(this.GetCursorRange(docElement, range, node), node);\n };\n NodeCutter.prototype.TrimLineBreak = function (line) {\n return line.replace(/(\\r\\n\\t|\\n|\\r\\t)/gm, ' ');\n };\n return NodeCutter;\n}());\nexport { NodeCutter };\n","import { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\n/**\n * Insert a HTML Node or Text\n * @hidden\n */\nvar InsertHtml = /** @class */ (function () {\n function InsertHtml() {\n }\n InsertHtml.Insert = function (docElement, insertNode) {\n var node;\n if (typeof insertNode === 'string') {\n var divNode = document.createElement('div');\n divNode.innerHTML = insertNode;\n node = divNode.firstChild;\n }\n else {\n node = insertNode;\n }\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var closestPrantNode = (node.nodeName.toLowerCase() === 'table') ? this.closestEle(nodes[0].parentNode, 'p') : nodes[0];\n if (!isCollapsed || (node.nodeName.toLowerCase() === 'table' && closestPrantNode)) {\n var preNode = nodeCutter.GetSpliceNode(range, closestPrantNode);\n var sibNode = preNode.previousSibling;\n var parentNode = preNode.parentNode;\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1]);\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n range.extractContents();\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3 && nodes[index].parentNode != null) {\n nodes[index].parentNode.removeChild(nodes[index]);\n }\n }\n if (sibNode) {\n InsertMethods.AppendBefore(node, sibNode, true);\n }\n else {\n if (parentNode.firstChild) {\n InsertMethods.AppendBefore(node, parentNode.firstChild, false);\n }\n else {\n parentNode.appendChild(node);\n }\n }\n if (node.nodeType !== 3) {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.childNodes.length);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.textContent.length);\n }\n }\n else {\n range.insertNode(node);\n if (node.nodeType !== 3 && node.childNodes.length > 0) {\n nodeSelection.setSelectionText(docElement, node, node, 1, 1);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionContents(docElement, node);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, node.textContent.length, node.textContent.length);\n }\n }\n };\n InsertHtml.closestEle = function (element, selector) {\n var el = element;\n while (el && el.nodeType === 1) {\n if (this.searchEle(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n };\n InsertHtml.searchEle = function (element, selector) {\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n };\n return InsertHtml;\n}());\nexport { InsertHtml };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n */\nvar LinkCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function LinkCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n LinkCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK, this.createLink, this);\n };\n LinkCommand.prototype.createLink = function (e) {\n if (!isNullOrUndefined(e.item.selectParent) && e.item.selectParent.length > 0 &&\n e.item.selectParent[0].tagName === 'A') {\n var anchorEle = e.item.selectParent[0];\n anchorEle.setAttribute('href', e.item.url);\n anchorEle.setAttribute('title', e.item.title);\n anchorEle.innerHTML = e.item.text;\n anchorEle.setAttribute('target', e.item.target);\n e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle, anchorEle, 1, 1);\n }\n else {\n var anchor = createElement('a', {\n className: 'e-rte-anchor', attrs: {\n href: e.item.url,\n target: e.item.target,\n title: e.item.title === '' ? e.item.url : e.item.title\n }\n });\n anchor.innerText = e.item.text === '' ? e.item.url : e.item.text;\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, anchor);\n if (e.event && e.event.type === 'keydown' && e.event.keyCode === 32) {\n var startContainer = e.item.selection.range.startContainer;\n startContainer.textContent = this.removeText(startContainer.textContent, e.item.url);\n }\n else {\n e.item.selection.setSelectionText(this.parent.currentDocument, anchor.childNodes[0], anchor.childNodes[0], 0, anchor.childNodes[0].textContent.length);\n }\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Links',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n LinkCommand.prototype.removeText = function (text, val) {\n var arr = text.split(' ');\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === val) {\n arr.splice(i, 1);\n i--;\n }\n }\n return arr.join(' ');\n };\n return LinkCommand;\n}());\nexport { LinkCommand };\n","import * as CONSTANT from './../base/constant';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * Formats internal component\n * @hidden\n */\nvar Alignments = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function Alignments(parent) {\n this.alignments = {\n 'JustifyLeft': 'left',\n 'JustifyCenter': 'center',\n 'JustifyRight': 'right',\n 'JustifyFull': 'justify'\n };\n this.parent = parent;\n this.addEventListener();\n }\n Alignments.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.ALIGNMENT_TYPE, this.applyAlignment, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Alignments.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'justify-center':\n this.applyAlignment({ subCommand: 'JustifyCenter', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-full':\n this.applyAlignment({ subCommand: 'JustifyFull', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-left':\n this.applyAlignment({ subCommand: 'JustifyLeft', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-right':\n this.applyAlignment({ subCommand: 'JustifyRight', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Alignments.prototype.applyAlignment = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var alignmentNodes = this.parent.domNode.blockNodes();\n for (var i = 0; i < alignmentNodes.length; i++) {\n var parentNode = alignmentNodes[i];\n setStyleAttribute(parentNode, { 'text-align': this.alignments[e.subCommand] });\n }\n this.parent.editableElement.focus();\n save = this.parent.domNode.saveMarker(save);\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n return Alignments;\n}());\nexport { Alignments };\n","import * as CONSTANT from './../base/constant';\nimport * as EVENTS from './../../common/constant';\n/**\n * Indents internal component\n * @hidden\n */\nvar Indents = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function Indents(parent) {\n this.indentValue = 20;\n this.parent = parent;\n this.addEventListener();\n }\n Indents.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INDENT_TYPE, this.applyIndents, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Indents.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'indents':\n this.applyIndents({ subCommand: 'Indent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'outdents':\n this.applyIndents({ subCommand: 'Outdent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Indents.prototype.applyIndents = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var indentsNodes = this.parent.domNode.blockNodes();\n var parentNodes = indentsNodes.slice();\n var listsNodes = [];\n for (var i = 0; i < parentNodes.length; i++) {\n if (parentNodes[i].tagName !== 'LI' && 'LI' === parentNodes[i].parentNode.tagName) {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i].parentNode);\n }\n else if (parentNodes[i].tagName === 'LI') {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i]);\n }\n }\n if (listsNodes.length > 0) {\n this.parent.observer.notify(EVENTS.KEY_DOWN_HANDLER, {\n event: {\n preventDefault: function () { return; },\n stopPropagation: function () { return; },\n shiftKey: (e.subCommand === 'Indent' ? false : true),\n which: 9,\n action: 'indent'\n },\n ignoreDefault: true\n });\n }\n for (var i = 0; i < indentsNodes.length; i++) {\n var parentNode = indentsNodes[i];\n var marginLeft = parentNode.style.marginLeft;\n var indentsValue = void 0;\n if (e.subCommand === 'Indent') {\n indentsValue = marginLeft === '' ? this.indentValue + 'px' : parseInt(marginLeft, null) + this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n else {\n indentsValue = (marginLeft === '' || marginLeft === '0px') ? '' : parseInt(marginLeft, null) - this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n }\n this.parent.editableElement.focus();\n save = this.parent.domNode.saveMarker(save);\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n return Indents;\n}());\nexport { Indents };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n */\nvar ImageCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function ImageCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ImageCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.IMAGE, this.createImage, this);\n };\n ImageCommand.prototype.createImage = function (e) {\n if (!isNullOrUndefined(e.item.selectParent) && e.item.selectParent[0].tagName === 'IMG') {\n var imgEle = e.item.selectParent[0];\n imgEle.setAttribute('src', e.item.url);\n imgEle.setAttribute('alt', e.item.altText);\n }\n else {\n var imgElement = createElement('img', {\n className: 'e-rte-image ' + e.item.cssClass, attrs: {\n width: (isNullOrUndefined(e.item.width) || isNullOrUndefined(e.item.width.width)) ? 'auto' :\n e.item.width.width,\n height: (isNullOrUndefined(e.item.height) || isNullOrUndefined(e.item.height.height)) ? 'auto' :\n e.item.height.height,\n alt: (e.item.altText !== '') ? e.item.altText : ''\n }\n });\n imgElement.setAttribute('src', isNullOrUndefined(e.item.url) ? '' : e.item.url);\n imgElement.style.minWidth = (isNullOrUndefined(e.item.width) || isNullOrUndefined(e.item.width.minWidth)) ? 0 + 'px' :\n e.item.width.minWidth + 'px';\n imgElement.style.maxWidth = (isNullOrUndefined(e.item.width) || isNullOrUndefined(e.item.width.maxWidth)) ? null :\n e.item.width.maxWidth + 'px';\n imgElement.style.minHeight = (isNullOrUndefined(e.item.height) || isNullOrUndefined(e.item.height.minHeight)) ? 0 + 'px' :\n e.item.height.minHeight + 'px';\n imgElement.style.maxHeight = (isNullOrUndefined(e.item.height) || isNullOrUndefined(e.item.height.maxHeight)) ? null :\n e.item.height.maxHeight + 'px';\n if (!isNullOrUndefined(e.item.selection)) {\n e.item.selection.restore();\n }\n InsertHtml.Insert(this.parent.currentDocument, imgElement);\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Image',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return ImageCommand;\n}());\nexport { ImageCommand };\n","import { createElement, closest, detach } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n */\nvar TableCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function TableCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n TableCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.TABLE, this.createTable, this);\n this.parent.observer.on(CONSTANT.INSERT_ROW, this.insertRow, this);\n this.parent.observer.on(CONSTANT.INSERT_COLUMN, this.insertColumn, this);\n this.parent.observer.on(CONSTANT.DELETEROW, this.deleteRow, this);\n this.parent.observer.on(CONSTANT.DELETECOLUMN, this.deleteColumn, this);\n this.parent.observer.on(CONSTANT.REMOVETABLE, this.removeTable, this);\n this.parent.observer.on(CONSTANT.TABLEHEADER, this.tableHeader, this);\n this.parent.observer.on(CONSTANT.TABLE_VERTICAL_ALIGN, this.tableVerticalAlign, this);\n };\n TableCommand.prototype.createTable = function (e) {\n var table = createElement('table', { className: 'e-rte-table' });\n var tblBody = createElement('tbody');\n table.style.width = e.item.width.width;\n var tdWid = parseInt(e.item.width.width, 10) / e.item.columns;\n for (var i = 0; i < e.item.row; i++) {\n var row = createElement('tr');\n for (var j = 0; j < e.item.columns; j++) {\n var cell = createElement('td');\n cell.appendChild(createElement('br'));\n cell.style.width = tdWid + '%';\n row.appendChild(cell);\n }\n tblBody.appendChild(row);\n }\n table.appendChild(tblBody);\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, table);\n e.item.selection.setSelectionText(this.parent.currentDocument, table.querySelector('td'), table.querySelector('td'), 0, 0);\n table.querySelector('td').classList.add('e-cell-select');\n if (e.callBack) {\n e.callBack({\n requestType: 'Table',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n return table;\n };\n TableCommand.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n TableCommand.prototype.insertRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n if (selectedCell.nodeName.toLowerCase() === 'th') {\n return;\n }\n var curRow = closest(selectedCell, 'tr');\n var newRow = closest(selectedCell, 'tr').cloneNode(true);\n var tabCell = Array.prototype.slice.call(newRow.querySelectorAll('td'));\n Array.prototype.forEach.call(tabCell, function (cell) {\n cell.innerHTML = '';\n cell.appendChild(createElement('br'));\n cell.removeAttribute('class');\n });\n (e.item.subCommand === 'InsertRowBefore') ?\n curRow.parentElement.insertBefore(newRow, curRow) : this.insertAfter(newRow, curRow);\n e.item.selection.setSelectionText(this.parent.currentDocument, e.item.selection.range.startContainer, e.item.selection.range.startContainer, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.insertColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n selectedCell = (selectedCell.nodeName !== 'TD') ? closest(selectedCell, 'td,th') : selectedCell;\n var curRow = closest(selectedCell, 'tr');\n var curCell;\n var allRows = closest(curRow, 'table').rows;\n var colIndex = Array.prototype.slice.call(curRow.querySelectorAll('th,td')).indexOf(selectedCell);\n var width = parseInt(e.item.width, 10) / (curRow.querySelectorAll('td,th').length + 1);\n for (var j = 0; j < closest(curRow, 'table').querySelectorAll('th,td').length; j++) {\n closest(curRow, 'table').querySelectorAll('th,td')[j].style.width = width + '%';\n }\n for (var i = 0; i < allRows.length; i++) {\n curCell = allRows[i].querySelectorAll('th,td')[colIndex];\n var colTemplate = curCell.cloneNode(true);\n colTemplate.innerHTML = '';\n colTemplate.appendChild(createElement('br'));\n colTemplate.removeAttribute('class');\n (e.item.subCommand === 'InsertColumnLeft') ? curCell.parentElement.insertBefore(colTemplate, curCell) :\n this.insertAfter(colTemplate, curCell);\n }\n e.item.selection.setSelectionText(this.parent.currentDocument, selectedCell, selectedCell, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var curRow = closest(selectedCell, 'tr');\n var allRows = closest(curRow, 'table').rows;\n if (curRow.querySelectorAll('th,td').length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n for (var i = 0; i < allRows.length; i++) {\n allRows[i].deleteCell(selectedCell.cellIndex);\n }\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var parentTable = closest(selectedCell, 'table');\n if (parentTable.rows.length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n parentTable.deleteRow(selectedCell.parentNode.rowIndex);\n e.item.selection.setSelectionText(this.parent.currentDocument, parentTable.querySelector('td'), parentTable.querySelector('td'), 0, 0);\n parentTable.querySelector('td, th').classList.add('e-cell-select');\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.removeTable = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var seletedTable = closest(selectedCell.parentElement, 'table');\n if (seletedTable) {\n e.item.selection.restore();\n detach(seletedTable);\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableHeader = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var table = closest(selectedCell.parentElement, 'table');\n if (table && 0 === table.querySelectorAll('thead').length) {\n var cellCount = table.querySelectorAll('tr:first-child td').length;\n var header = table.createTHead();\n var row = header.insertRow(0);\n for (var i = 0; i < cellCount; i++) {\n var th = createElement('th');\n th.appendChild(createElement('br'));\n row.appendChild(th);\n }\n }\n else {\n table.deleteTHead();\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableVerticalAlign = function (e) {\n if (e.item.subCommand === 'AlignTop') {\n e.item.tableCell.style.verticalAlign = 'top';\n }\n else if (e.item.subCommand === 'AlignMiddle') {\n e.item.tableCell.style.verticalAlign = 'middle';\n }\n else {\n e.item.tableCell.style.verticalAlign = 'bottom';\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return TableCommand;\n}());\nexport { TableCommand };\n","/**\n * Is formatted or not.\n * @hidden\n */\nvar IsFormatted = /** @class */ (function () {\n function IsFormatted() {\n }\n IsFormatted.prototype.getFormattedNode = function (node, format, endNode) {\n var parentNode = this.getFormatParent(node, format, endNode);\n if (parentNode !== null && parentNode !== endNode) {\n return parentNode;\n }\n return null;\n };\n IsFormatted.prototype.getFormatParent = function (node, format, endNode) {\n do {\n node = node.parentNode;\n } while (node && (node !== endNode) && !this.isFormattedNode(node, format));\n return node;\n };\n IsFormatted.prototype.isFormattedNode = function (node, format) {\n switch (format) {\n case 'bold':\n return IsFormatted.isBold(node);\n case 'italic':\n return IsFormatted.isItalic(node);\n case 'underline':\n return IsFormatted.isUnderline(node);\n case 'strikethrough':\n return IsFormatted.isStrikethrough(node);\n case 'superscript':\n return IsFormatted.isSuperscript(node);\n case 'subscript':\n return IsFormatted.isSubscript(node);\n case 'fontcolor':\n return this.isFontColor(node);\n case 'fontname':\n return this.isFontName(node);\n case 'fontsize':\n return this.isFontSize(node);\n case 'backgroundcolor':\n return this.isBackgroundColor(node);\n default:\n return false;\n }\n };\n IsFormatted.isBold = function (node) {\n var validTags = ['strong', 'b'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontWeight === 'bold') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isItalic = function (node) {\n var validTags = ['em', 'i'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontStyle === 'italic') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isUnderline = function (node) {\n var validTags = ['u'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'underline') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isStrikethrough = function (node) {\n var validTags = ['del', 'strike'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'line-through') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isSuperscript = function (node) {\n var validTags = ['sup'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isSubscript = function (node) {\n var validTags = ['sub'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontColor = function (node) {\n var color = node.style && node.style.color;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n color !== null && color !== '' && color !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n backColor !== null && backColor !== '' && backColor !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontSize = function (node) {\n var size = node.style && node.style.fontSize;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n size !== null && size !== '' && size !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontName = function (node) {\n var name = node.style && node.style.fontFamily;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n name !== null && name !== '' && name !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n // Get Formatted Node\n IsFormatted.inlineTags = [\n 'a',\n 'abbr',\n 'acronym',\n 'b',\n 'bdo',\n 'big',\n 'cite',\n 'code',\n 'dfn',\n 'em',\n 'i',\n 'kbd',\n 'label',\n 'q',\n 'samp',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'tt',\n 'u',\n 'var'\n ];\n return IsFormatted;\n}());\nexport { IsFormatted };\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nvar SelectionCommands = /** @class */ (function () {\n function SelectionCommands() {\n }\n SelectionCommands.applyFormat = function (docElement, format, endNode, value) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase', 'fontcolor', 'fontname', 'fontsize', 'backgroundcolor'];\n if (validFormats.indexOf(format) > -1) {\n var domSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var isFormatted = new IsFormatted();\n var range = domSelection.getRange(docElement);\n var save = domSelection.save(range, docElement);\n var nodes = domSelection.getSelectionNodeCollection(range);\n var isCollapsed = false;\n var isFormat = false;\n var isCursor = false;\n var isFontStyle = (['fontcolor', 'fontname', 'fontsize', 'backgroundcolor'].indexOf(format) > -1);\n if (range.collapsed) {\n if (nodes.length > 0) {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, nodes[0]);\n }\n else if (range.startContainer.nodeName.toLowerCase() !== 'td') {\n var cursorNode = this.insertCursorNode(domSelection, range, isFormatted, nodeCutter, format, value, endNode);\n domSelection.endContainer = domSelection.startContainer = domSelection.getNodeArray(cursorNode, true);\n domSelection.endOffset = domSelection.startOffset = 1;\n }\n }\n isCursor = range.collapsed;\n for (var index = 0; index < nodes.length; index++) {\n var formatNode = isFormatted.getFormattedNode(nodes[index], format, endNode);\n if (index === 0 && formatNode === null) {\n isFormat = true;\n }\n if (formatNode !== null && (!isFormat || isFontStyle)) {\n nodes[index] = this.removeFormat(nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection);\n }\n else {\n nodes[index] = this.insertFormat(nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value);\n }\n domSelection = this.applySelection(nodes, domSelection, nodeCutter, index, isCollapsed);\n }\n save.restore();\n }\n };\n SelectionCommands.insertCursorNode = function (domSelection, range, isFormatted, nodeCutter, format, value, endNode) {\n var cursorNodes = domSelection.getNodeCollection(range);\n var cursorFormat = (cursorNodes.length > 0) ? isFormatted.getFormattedNode(cursorNodes[0], format, endNode) : null;\n var cursorNode = null;\n if (cursorFormat) {\n cursorNode = cursorNodes[0];\n InsertMethods.unwrap(cursorFormat);\n }\n else {\n cursorNode = this.getInsertNode(range, format, value).firstChild;\n }\n return cursorNode;\n };\n SelectionCommands.removeFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection) {\n var splitNode = null;\n if (!(range.startContainer === range.endContainer && range.startOffset === 0\n && range.endOffset === range.startContainer.length)) {\n var nodeIndex = [];\n var cloneNode = nodes[index];\n do {\n nodeIndex.push(domSelection.getIndex(cloneNode));\n cloneNode = cloneNode.parentNode;\n } while (cloneNode && (cloneNode !== formatNode));\n cloneNode = splitNode = nodeCutter.GetSpliceNode(range, formatNode);\n if (!isCursor) {\n while (cloneNode && cloneNode.childNodes.length > 0 && ((nodeIndex.length - 1) >= 0)\n && (cloneNode.childNodes.length > nodeIndex[nodeIndex.length - 1])) {\n cloneNode = cloneNode.childNodes[nodeIndex[nodeIndex.length - 1]];\n nodeIndex.pop();\n }\n if (cloneNode.nodeType === 3 && !(isCursor && cloneNode.nodeValue === '')) {\n nodes[index] = cloneNode;\n }\n else {\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n if (cloneNode.nodeType !== 3) {\n cloneNode.insertBefore(divNode.firstChild, cloneNode.firstChild);\n nodes[index] = cloneNode.firstChild;\n }\n else {\n cloneNode.parentNode.insertBefore(divNode.firstChild, cloneNode);\n nodes[index] = cloneNode.previousSibling;\n cloneNode.parentNode.removeChild(cloneNode);\n }\n }\n }\n else {\n var lastNode = splitNode;\n for (; lastNode.firstChild !== null && lastNode.firstChild.nodeType !== 3; null) {\n lastNode = lastNode.firstChild;\n }\n lastNode.innerHTML = '';\n nodes[index] = lastNode.firstChild;\n }\n }\n var child = InsertMethods.unwrap(formatNode);\n if (child.length > 0 && isFontStyle) {\n for (var num = 0; num < child.length; num++) {\n child[num] = InsertMethods.Wrap(child[num], this.GetFormatNode(format, value));\n }\n }\n return nodes[index];\n };\n SelectionCommands.insertFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value) {\n if (!isCursor) {\n if ((formatNode === null && isFormat) || isFontStyle) {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n nodes[index].textContent = nodeCutter.TrimLineBreak(nodes[index].textContent);\n if (format === 'uppercase' || format === 'lowercase') {\n nodes[index].textContent = (format === 'uppercase') ? nodes[index].textContent.toLocaleUpperCase()\n : nodes[index].textContent.toLocaleLowerCase();\n }\n else if (!(isFontStyle === true && value === '')) {\n var element = this.GetFormatNode(format, value);\n nodes[index] = (index === (nodes.length - 1)) ? InsertMethods.Wrap(nodes[index], element)\n : InsertMethods.WrapBefore(nodes[index], element, true);\n nodes[index] = this.getChildNode(nodes[index], element);\n }\n }\n else {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n }\n }\n else {\n if (format !== 'uppercase' && format !== 'lowercase') {\n var element = this.getInsertNode(range, format, value);\n nodes[index] = element.firstChild;\n nodeCutter.position = 1;\n }\n else {\n nodeCutter.position = range.startOffset;\n }\n }\n return nodes[index];\n };\n SelectionCommands.getInsertNode = function (range, format, value) {\n var element = this.GetFormatNode(format, value);\n element.innerHTML = '';\n range.insertNode(element);\n return element;\n };\n SelectionCommands.getChildNode = function (node, element) {\n if (node === undefined || node === null) {\n element.innerHTML = '';\n node = element.firstChild;\n }\n return node;\n };\n SelectionCommands.applySelection = function (nodes, domSelection, nodeCutter, index, isCollapsed) {\n if (nodes.length === 1 && !isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = 0;\n domSelection.endOffset = nodes[index].textContent.length;\n }\n else if (nodes.length === 1 && isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = nodeCutter.position;\n domSelection.endOffset = nodeCutter.position;\n }\n else if (index === 0) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.startOffset = 0;\n }\n else if (index === nodes.length - 1) {\n domSelection.endContainer = domSelection.getNodeArray(nodes[index], false);\n domSelection.endOffset = nodes[index].textContent.length;\n }\n return domSelection;\n };\n SelectionCommands.GetFormatNode = function (format, value) {\n var node;\n switch (format) {\n case 'bold':\n return document.createElement('strong');\n case 'italic':\n return document.createElement('em');\n case 'underline':\n node = document.createElement('span');\n node.style.textDecoration = 'underline';\n return node;\n case 'strikethrough':\n node = document.createElement('span');\n node.style.textDecoration = 'line-through';\n return node;\n case 'superscript':\n return document.createElement('sup');\n case 'subscript':\n return document.createElement('sub');\n case 'fontcolor':\n node = document.createElement('span');\n node.style.color = value;\n return node;\n case 'fontname':\n node = document.createElement('span');\n node.style.fontFamily = value;\n return node;\n case 'fontsize':\n node = document.createElement('span');\n node.style.fontSize = value;\n return node;\n default:\n node = document.createElement('span');\n node.style.backgroundColor = value;\n return node;\n }\n };\n return SelectionCommands;\n}());\nexport { SelectionCommands };\n","import * as CONSTANT from './../base/constant';\nimport { SelectionCommands } from './selection-commands';\nimport * as EVENTS from './../../common/constant';\n/**\n * Selection EXEC internal component\n * @hidden\n */\nvar SelectionBasedExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function SelectionBasedExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n SelectionBasedExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.SELECTION_TYPE, this.applySelection, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n SelectionBasedExec.prototype.keyDownHandler = function (e) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase'];\n if (e.event.ctrlKey && validFormats.indexOf(e.event.action) > -1) {\n e.event.preventDefault();\n SelectionCommands.applyFormat(this.parent.currentDocument, e.event.action, this.parent.editableElement);\n this.callBack(e, e.event.action);\n }\n };\n SelectionBasedExec.prototype.applySelection = function (e) {\n SelectionCommands.applyFormat(this.parent.currentDocument, e.subCommand.toLocaleLowerCase(), this.parent.editableElement, e.value);\n this.callBack(e, e.subCommand);\n };\n SelectionBasedExec.prototype.callBack = function (event, action) {\n if (event.callBack) {\n event.callBack({\n requestType: action,\n event: event.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return SelectionBasedExec;\n}());\nexport { SelectionBasedExec };\n","import * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Selection EXEC internal component\n * @hidden\n */\nvar InsertHtmlExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function InsertHtmlExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertHtmlExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERTHTML_TYPE, this.applyHtml, this);\n };\n InsertHtmlExec.prototype.applyHtml = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.value);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return InsertHtmlExec;\n}());\nexport { InsertHtmlExec };\n","/**\n * `Clear Format` module is used to handle Clear Format.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nvar ClearFormat = /** @class */ (function () {\n function ClearFormat() {\n }\n ClearFormat.clear = function (docElement, endNode) {\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var save = nodeSelection.save(range, docElement);\n if (!isCollapsed) {\n var preNode = nodeCutter.GetSpliceNode(range, nodes[0]);\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1]);\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n var exactNodes = nodeSelection.getNodeCollection(range);\n var cloneSelectNodes = exactNodes.slice();\n this.clearInlines(nodeSelection.getSelectionNodes(cloneSelectNodes), cloneSelectNodes, nodeSelection.getRange(docElement), nodeCutter, endNode);\n this.reSelection(docElement, save, exactNodes);\n range = nodeSelection.getRange(docElement);\n exactNodes = nodeSelection.getNodeCollection(range);\n var cloneParentNodes = exactNodes.slice();\n this.clearBlocks(docElement, cloneParentNodes, endNode, nodeCutter, nodeSelection);\n this.reSelection(docElement, save, exactNodes);\n }\n };\n ClearFormat.reSelection = function (docElement, save, exactNodes) {\n var selectionNodes = save.getInsertNodes(exactNodes);\n save.startContainer = save.getNodeArray(selectionNodes[0], true, docElement);\n save.startOffset = 0;\n save.endContainer = save.getNodeArray(selectionNodes[selectionNodes.length - 1], false, docElement);\n var endIndexNode = selectionNodes[selectionNodes.length - 1];\n save.endOffset = (endIndexNode.nodeType === 3) ? endIndexNode.textContent.length\n : endIndexNode.childNodes.length;\n save.restore();\n };\n ClearFormat.clearBlocks = function (docElement, nodes, endNode, nodeCutter, nodeSelection) {\n var parentNodes = [];\n for (var index = 0; index < nodes.length; index++) {\n if (this.BLOCK_TAGS.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1\n && parentNodes.indexOf(nodes[index]) === -1) {\n parentNodes.push(nodes[index]);\n }\n else if ((this.BLOCK_TAGS.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1)\n && parentNodes.indexOf(nodes[index].parentNode) === -1\n && endNode !== nodes[index].parentNode) {\n parentNodes.push(nodes[index].parentNode);\n }\n }\n parentNodes = this.spliceParent(parentNodes, nodes)[0];\n parentNodes = this.removeParent(parentNodes);\n this.unWrap(docElement, parentNodes, nodeCutter, nodeSelection);\n };\n ClearFormat.spliceParent = function (parentNodes, nodes) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n var len = parentNodes[index1].childNodes.length;\n for (var index2 = 0; index2 < len; index2++) {\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) > 0)\n && (parentNodes[index1].childNodes[index2].childNodes.length > 0)) {\n nodes = this.spliceParent([parentNodes[index1].childNodes[index2]], nodes)[1];\n }\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) <= -1) &&\n (parentNodes[index1].childNodes[index2].textContent.trim() !== '')) {\n for (var index3 = 0; index3 < len; index3++) {\n if (nodes.indexOf(parentNodes[index1].childNodes[index3]) > -1) {\n nodes.splice(nodes.indexOf(parentNodes[index1].childNodes[index3]), 1);\n }\n }\n index2 = parentNodes[index1].childNodes.length;\n var parentIndex = parentNodes.indexOf(parentNodes[index1].parentNode);\n var nodeIndex = nodes.indexOf(parentNodes[index1].parentNode);\n if (parentIndex > -1) {\n parentNodes.splice(parentIndex, 1);\n }\n if (nodeIndex > -1) {\n nodes.splice(nodeIndex, 1);\n }\n var elementIndex = nodes.indexOf(parentNodes[index1]);\n if (elementIndex > -1) {\n nodes.splice(elementIndex, 1);\n }\n parentNodes.splice(index1, 1);\n index1--;\n }\n }\n }\n return [parentNodes, nodes];\n };\n ClearFormat.removeChild = function (parentNodes, parentNode) {\n var count = parentNode.childNodes.length;\n if (count > 0) {\n for (var index = 0; index < count; index++) {\n if (parentNodes.indexOf(parentNode.childNodes[index]) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNode.childNodes[index]);\n parentNodes.splice(parentNodes.indexOf(parentNode.childNodes[index]), 1);\n }\n }\n }\n return parentNodes;\n };\n ClearFormat.removeParent = function (parentNodes) {\n for (var index = 0; index < parentNodes.length; index++) {\n if (parentNodes.indexOf(parentNodes[index].parentNode) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNodes[index]);\n parentNodes.splice(index, 1);\n index--;\n }\n }\n return parentNodes;\n };\n ClearFormat.unWrap = function (docElement, parentNodes, nodeCutter, nodeSelection) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n if (this.NONVALID_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) > -1\n && parentNodes[index1].parentNode\n && this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].parentNode.nodeName.toLowerCase()) > -1) {\n nodeSelection.setSelectionText(docElement, parentNodes[index1], parentNodes[index1], 0, parentNodes[index1].childNodes.length);\n InsertMethods.unwrap(nodeCutter.GetSpliceNode(nodeSelection.getRange(docElement), parentNodes[index1].parentNode));\n }\n if (parentNodes[index1].nodeName.toLocaleLowerCase() !== 'p') {\n if (this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) < 0\n && parentNodes[index1].parentNode.nodeName.toLocaleLowerCase() !== 'p'\n && !(parentNodes[index1].childNodes.length === 1\n && parentNodes[index1].childNodes[0].nodeName.toLocaleLowerCase() === 'p')) {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n }\n var childNodes = InsertMethods.unwrap(parentNodes[index1]);\n if (childNodes.length === 1\n && childNodes[0].parentNode.nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n for (var index2 = 0; index2 < childNodes.length; index2++) {\n if (this.NONVALID_TAGS.indexOf(childNodes[index2].nodeName.toLowerCase()) > -1) {\n this.unWrap(docElement, [childNodes[index2]], nodeCutter, nodeSelection);\n }\n }\n }\n else {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n }\n };\n ClearFormat.clearInlines = function (textNodes, nodes, range, nodeCutter, endNode) {\n for (var index = 0; index < textNodes.length; index++) {\n if (textNodes[index].parentNode &&\n IsFormatted.inlineTags.indexOf(textNodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n nodeCutter.GetSpliceNode(range, textNodes[index].parentNode);\n this.removeInlineParent(textNodes[index].parentNode);\n }\n }\n };\n ClearFormat.removeInlineParent = function (textNodes) {\n var nodes = InsertMethods.unwrap(textNodes);\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].parentNode.childNodes.length === 1\n && IsFormatted.inlineTags.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index].parentNode);\n }\n else if (IsFormatted.inlineTags.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index]);\n }\n }\n };\n ClearFormat.BLOCK_TAGS = ['address', 'article', 'aside', 'blockquote',\n 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'li', 'main', 'nav',\n 'noscript', 'ol', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul'];\n ClearFormat.NONVALID_PARENT_TAGS = ['thead', 'tbody', 'ul', 'ol', 'table', 'tfoot'];\n ClearFormat.NONVALID_TAGS = ['thead', 'tbody', 'figcaption', 'td', 'tr',\n 'th', 'tfoot', 'figcaption', 'li'];\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import * as CONSTANT from './../base/constant';\nimport { ClearFormat } from './clearformat';\nimport * as EVENTS from './../../common/constant';\n/**\n * Clear Format EXEC internal component\n * @hidden\n */\nvar ClearFormatExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function ClearFormatExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ClearFormatExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_TYPE, this.applyClear, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ClearFormatExec.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'clear-format':\n this.applyClear({ subCommand: 'ClearFormat', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n ClearFormatExec.prototype.applyClear = function (e) {\n if (e.subCommand === 'ClearFormat') {\n ClearFormat.clear(this.parent.currentDocument, this.parent.editableElement);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n }\n };\n return ClearFormatExec;\n}());\nexport { ClearFormatExec };\n","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/selection';\nimport * as EVENTS from './../../common/constant';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoManager = /** @class */ (function () {\n function UndoRedoManager(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.addEventListener();\n }\n UndoRedoManager.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n };\n UndoRedoManager.prototype.removeEventListener = function () {\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, this.keyUp);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n };\n UndoRedoManager.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n UndoRedoManager.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoManager.prototype.keyDown = function (e) {\n var event = e.event;\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoManager.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * RTE collection stored html format.\n * @method saveData\n * @return {void}\n */\n UndoRedoManager.prototype.saveData = function (e) {\n var range = new NodeSelection().getRange(this.parent.currentDocument);\n var save = new NodeSelection().save(range, this.parent.currentDocument);\n var htmlText = this.parent.editableElement.innerHTML;\n var changEle = { text: htmlText, range: save };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.collapsed === range.collapsed)\n && (this.undoRedoStack[this.undoRedoStack.length - 1].range.startOffset === save.range.startOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.endOffset === save.range.endOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.startContainer === save.range.startContainer) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].text.trim() === changEle.text.trim())) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.undoRedoStack.length > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n * @method undo\n * @return {void}\n */\n UndoRedoManager.prototype.undo = function (e) {\n if (this.steps > 0) {\n var range = this.undoRedoStack[this.steps - 1].range;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.editableElement.innerHTML = removedContent;\n this.parent.editableElement.focus();\n range.restore();\n this.steps--;\n if (e.callBack) {\n e.callBack({\n requestType: 'Undo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n */\n UndoRedoManager.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n var range = this.undoRedoStack[this.steps + 1].range;\n this.parent.editableElement.innerHTML = this.undoRedoStack[this.steps + 1].text;\n this.parent.editableElement.focus();\n range.restore();\n this.steps++;\n if (e.callBack) {\n e.callBack({\n requestType: 'Redo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n UndoRedoManager.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoManager;\n}());\nexport { UndoRedoManager };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { Lists } from './../plugin/lists';\nimport { NodeSelection } from './../../selection/index';\nimport { DOMNode } from './../plugin/dom-node';\nimport { Formats } from './../plugin/formats';\nimport { LinkCommand } from './../plugin/link';\nimport { Alignments } from './../plugin/alignments';\nimport { Indents } from './../plugin/indents';\nimport { ImageCommand } from './../plugin/image';\nimport { TableCommand } from './../plugin/table';\nimport { SelectionBasedExec } from './../plugin/selection-exec';\nimport { InsertHtmlExec } from './../plugin/inserthtml-exec';\nimport { ClearFormatExec } from './../plugin/clearformat-exec';\nimport { UndoRedoManager } from './../plugin/undo';\nimport * as EVENTS from './../../common/constant';\n/**\n * EditorManager internal component\n * @hidden\n */\nvar EditorManager = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n */\n function EditorManager(options) {\n this.currentDocument = options.document;\n this.editableElement = options.editableElement;\n this.nodeSelection = new NodeSelection();\n this.domNode = new DOMNode(this.editableElement, this.currentDocument);\n this.observer = new Observer(this);\n this.listObj = new Lists(this);\n this.formatObj = new Formats(this);\n this.alignmentObj = new Alignments(this);\n this.indentsObj = new Indents(this);\n this.linkObj = new LinkCommand(this);\n this.imgObj = new ImageCommand(this);\n this.selectionObj = new SelectionBasedExec(this);\n this.inserthtmlObj = new InsertHtmlExec(this);\n this.clearObj = new ClearFormatExec(this);\n this.tableObj = new TableCommand(this);\n this.undoRedoManager = new UndoRedoManager(this, options.options);\n this.wireEvents();\n }\n EditorManager.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n };\n EditorManager.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n EditorManager.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n EditorManager.prototype.execCommand = function (command, value, event, callBack, text, exeValue) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(EVENTS.LIST_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'alignments':\n this.observer.notify(CONSTANT.ALIGNMENT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'indents':\n this.observer.notify(CONSTANT.INDENT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'links':\n this.observer.notify(CONSTANT.LINK, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'images':\n this.observer.notify(CONSTANT.IMAGE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'table':\n switch (value.toString().toLocaleLowerCase()) {\n case 'createtable':\n this.observer.notify(CONSTANT.TABLE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'insertrowbefore':\n case 'insertrowafter':\n this.observer.notify(CONSTANT.INSERT_ROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'insertcolumnleft':\n case 'insertcolumnright':\n this.observer.notify(CONSTANT.INSERT_COLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deleterow':\n this.observer.notify(CONSTANT.DELETEROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deletecolumn':\n this.observer.notify(CONSTANT.DELETECOLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableremove':\n this.observer.notify(CONSTANT.REMOVETABLE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableheader':\n this.observer.notify(CONSTANT.TABLEHEADER, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'aligntop':\n case 'alignmiddle':\n case 'alignbottom':\n this.observer.notify(CONSTANT.TABLE_VERTICAL_ALIGN, { item: exeValue, event: event, callBack: callBack });\n break;\n }\n break;\n case 'font':\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.SELECTION_TYPE, { subCommand: value, event: event, callBack: callBack, value: text });\n break;\n case 'inserthtml':\n this.observer.notify(CONSTANT.INSERTHTML_TYPE, { callBack: callBack, value: text });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack });\n break;\n }\n };\n return EditorManager;\n}());\nexport { EditorManager };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { Formatter } from './formatter';\nimport { EditorManager } from './../../editor-manager/base/editor-manager';\nimport { extend } from '@syncfusion/ej2-base';\nimport { htmlKeyConfig } from './../../common/config';\n/**\n * HTML adapter\n * @hidden\n */\nvar HTMLFormatter = /** @class */ (function (_super) {\n __extends(HTMLFormatter, _super);\n function HTMLFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (_this.currentDocument && _this.element) {\n _this.updateFormatter(_this.element, _this.currentDocument, options.options);\n }\n return _this;\n }\n HTMLFormatter.prototype.initialize = function () {\n this.keyConfig = htmlKeyConfig;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n */\n HTMLFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement && doc) {\n this.editorManager = new EditorManager({\n document: doc,\n editableElement: editElement,\n options: options\n });\n }\n };\n return HTMLFormatter;\n}(Formatter));\nexport { HTMLFormatter };\n","import { IsFormatted } from './isformatted';\nimport * as CONSTANT from './../base/constant';\nimport { NodeSelection } from './../../selection/index';\n/**\n * Update Toolbar Status\n * @hidden\n */\nexport var statusCollection = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null,\n createlink: false\n};\nvar ToolbarStatus = /** @class */ (function () {\n function ToolbarStatus() {\n }\n ToolbarStatus.get = function (docElement, targetNode, formatNode, fontSize, fontName, documentNode) {\n var formatCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeSelection = new NodeSelection();\n var nodes = documentNode ? [documentNode] : nodeSelection.getNodeCollection(nodeSelection.getRange(docElement));\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3) {\n nodes.splice(index, 1);\n index--;\n }\n }\n for (var index = 0; index < nodes.length; index++) {\n formatCollection = this.getFormatParent(docElement, formatCollection, nodes[index], targetNode, formatNode, fontSize, fontName);\n if ((index === 0 && formatCollection.bold) || !formatCollection.bold) {\n nodeCollection.bold = formatCollection.bold;\n }\n if ((index === 0 && formatCollection.italic) || !formatCollection.italic) {\n nodeCollection.italic = formatCollection.italic;\n }\n if ((index === 0 && formatCollection.underline) || !formatCollection.underline) {\n nodeCollection.underline = formatCollection.underline;\n }\n if ((index === 0 && formatCollection.strikethrough) || !formatCollection.strikethrough) {\n nodeCollection.strikethrough = formatCollection.strikethrough;\n }\n if ((index === 0 && formatCollection.superscript) || !formatCollection.superscript) {\n nodeCollection.superscript = formatCollection.superscript;\n }\n if ((index === 0 && formatCollection.subscript) || !formatCollection.subscript) {\n nodeCollection.subscript = formatCollection.subscript;\n }\n if ((index === 0 && formatCollection.fontcolor) || !formatCollection.fontcolor) {\n nodeCollection.fontcolor = formatCollection.fontcolor;\n }\n if ((index === 0 && formatCollection.fontname) || !formatCollection.fontname) {\n nodeCollection.fontname = formatCollection.fontname;\n }\n if ((index === 0 && formatCollection.fontsize) || !formatCollection.fontsize) {\n nodeCollection.fontsize = formatCollection.fontsize;\n }\n if ((index === 0 && formatCollection.backgroundcolor) || !formatCollection.backgroundcolor) {\n nodeCollection.backgroundcolor = formatCollection.backgroundcolor;\n }\n if ((index === 0 && formatCollection.orderedlist) || !formatCollection.orderedlist) {\n nodeCollection.orderedlist = formatCollection.orderedlist;\n }\n if ((index === 0 && formatCollection.unorderedlist) || !formatCollection.unorderedlist) {\n nodeCollection.unorderedlist = formatCollection.unorderedlist;\n }\n if ((index === 0 && formatCollection.alignments) || !formatCollection.alignments) {\n nodeCollection.alignments = formatCollection.alignments;\n }\n if ((index === 0 && formatCollection.formats) || !formatCollection.formats) {\n nodeCollection.formats = formatCollection.formats;\n }\n if ((index === 0 && formatCollection.createlink) || !formatCollection.createlink) {\n nodeCollection.createlink = formatCollection.createlink;\n }\n formatCollection = JSON.parse(JSON.stringify(statusCollection));\n }\n return nodeCollection;\n };\n ToolbarStatus.getFormatParent = function (docElement, formatCollection, node, targetNode, formatNode, fontSize, fontName) {\n if (targetNode.contains(node)) {\n do {\n formatCollection = this.isFormattedNode(docElement, formatCollection, node, formatNode, fontSize, fontName);\n node = node.parentNode;\n } while (node && (node !== targetNode));\n }\n return formatCollection;\n };\n ToolbarStatus.isFormattedNode = function (docElement, formatCollection, node, formatNode, fontSize, fontName) {\n if (!formatCollection.bold) {\n formatCollection.bold = IsFormatted.isBold(node);\n }\n if (!formatCollection.italic) {\n formatCollection.italic = IsFormatted.isItalic(node);\n }\n if (!formatCollection.underline) {\n formatCollection.underline = IsFormatted.isUnderline(node);\n }\n if (!formatCollection.strikethrough) {\n formatCollection.strikethrough = IsFormatted.isStrikethrough(node);\n }\n if (!formatCollection.superscript) {\n formatCollection.superscript = IsFormatted.isSuperscript(node);\n }\n if (!formatCollection.subscript) {\n formatCollection.subscript = IsFormatted.isSubscript(node);\n }\n if (!formatCollection.fontcolor) {\n formatCollection.fontcolor = this.isFontColor(docElement, node);\n }\n if (!formatCollection.fontname) {\n formatCollection.fontname = this.isFontName(docElement, node, fontName);\n }\n if (!formatCollection.fontsize) {\n formatCollection.fontsize = this.isFontSize(node, fontSize);\n }\n if (!formatCollection.backgroundcolor) {\n formatCollection.backgroundcolor = this.isBackgroundColor(node);\n }\n if (!formatCollection.orderedlist) {\n formatCollection.orderedlist = this.isOrderedList(node);\n }\n if (!formatCollection.unorderedlist) {\n formatCollection.unorderedlist = this.isUnorderedList(node);\n }\n if (!formatCollection.alignments) {\n formatCollection.alignments = this.isAlignment(node);\n }\n if (!formatCollection.formats) {\n formatCollection.formats = this.isFormats(node, formatNode);\n }\n if (!formatCollection.createlink) {\n formatCollection.createlink = this.isLink(node);\n }\n return formatCollection;\n };\n ToolbarStatus.isFontColor = function (docElement, node) {\n var color = node.style && node.style.color;\n if ((color === null || color === undefined || color === '') && node.nodeType !== 3) {\n color = this.getComputedStyle(docElement, node, 'color');\n }\n if (color !== null && color !== '' && color !== undefined) {\n return color;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isLink = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'a') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (backColor !== null && backColor !== '' && backColor !== undefined) {\n return backColor;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontSize = function (node, fontSize) {\n var size = node.style && node.style.fontSize;\n if ((size !== null && size !== '' && size !== undefined)\n && (fontSize === null || fontSize === undefined || (fontSize.indexOf(size) > -1))) {\n return size;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontName = function (docElement, node, fontName) {\n var name = node.style && node.style.fontFamily;\n if ((name === null || name === undefined || name === '') && node.nodeType !== 3) {\n name = this.getComputedStyle(docElement, node, 'font-family');\n }\n var index = null;\n if ((name !== null && name !== '' && name !== undefined)\n && (fontName === null || fontName === undefined || (fontName.filter(function (value, pos) {\n if (value.replace(/\"/g, '').replace(/ /g, '') === name.replace(/\"/g, '').replace(/ /g, '')) {\n index = pos;\n }\n }) && (index !== null)))) {\n return (index !== null) ? fontName[index] : name.replace(/\"/g, '');\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isOrderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ol') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isUnorderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ul') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isAlignment = function (node) {\n var align = node.style && node.style.textAlign;\n if (align === 'left') {\n return 'justifyleft';\n }\n else if (align === 'center') {\n return 'justifycenter';\n }\n else if (align === 'right') {\n return 'justifyright';\n }\n else if (align === 'justify') {\n return 'justifyfull';\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFormats = function (node, formatNode) {\n if (((formatNode === undefined || formatNode === null)\n && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) > -1)\n || (formatNode !== null && formatNode !== undefined\n && formatNode.indexOf(node.nodeName.toLocaleLowerCase()) > -1)) {\n return node.nodeName.toLocaleLowerCase();\n }\n else {\n return null;\n }\n };\n ToolbarStatus.getComputedStyle = function (docElement, node, prop) {\n return docElement.defaultView.getComputedStyle(node, null).getPropertyValue(prop);\n };\n return ToolbarStatus;\n}());\nexport { ToolbarStatus };\n","import * as events from '../base/constant';\nimport { ToolbarStatus } from '../../editor-manager/plugin/toolbar-status';\n/**\n * HtmlToolbarStatus module for refresh the toolbar status\n */\nvar HtmlToolbarStatus = /** @class */ (function () {\n function HtmlToolbarStatus(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n HtmlToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n HtmlToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n };\n HtmlToolbarStatus.prototype.onRefreshHandler = function (args) {\n var fontsize = [];\n var fontName = [];\n var formats = [];\n this.parent.fontSize.items.forEach(function (item) { fontsize.push(item.value); });\n this.parent.fontFamily.items.forEach(function (item) { fontName.push(item.value); });\n this.parent.format.types.forEach(function (item) {\n formats.push(item.value.toLocaleLowerCase());\n });\n this.toolbarStatus = ToolbarStatus.get(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel(), formats, fontsize, fontName, args.documentNode);\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n return HtmlToolbarStatus;\n}());\nexport { HtmlToolbarStatus };\n","/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n /**\n * The function is used to render RichTextEditor content div\n */\n ContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { className: 'e-rte-content', id: this.parent.getID() + 'rte-view' });\n var rteContent = (rteObj.value !== null && rteObj.value !== '') ? rteObj.value : '


    ';\n this.editableElement = this.parent.createElement('div', {\n className: 'e-content',\n id: this.parent.getID() + '_rte-edit-view',\n attrs: {\n 'contenteditable': 'true'\n },\n innerHTML: rteContent\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n * @return {Element}\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n ContentRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n ContentRender.prototype.getText = function () {\n return this.getEditPanel().textContent;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @return {Document}\n */\n ContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { ContentRender } from '../renderer/content-renderer';\n/* tslint:disable */\nvar IFRAMEHEADER = \"\\n \\n \\n \\n \\n \\n \";\n/* tslint:enable */\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar IframeContentRender = /** @class */ (function (_super) {\n __extends(IframeContentRender, _super);\n function IframeContentRender() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * The function is used to render RichTextEditor iframe\n */\n IframeContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var rteContent = (rteObj.value !== null && rteObj.value !== '') ? rteObj.value : '


    ';\n var iFrameBodyContent = '' +\n rteContent + '';\n var iFrameContent = IFRAMEHEADER + iFrameBodyContent;\n var iframe = this.parent.createElement('iframe', {\n innerHTML: iFrameContent,\n id: this.parent.getID() + '_rte-view',\n className: 'e-rte-content',\n styles: 'display:block;'\n });\n this.setPanel(iframe);\n rteObj.element.appendChild(iframe);\n iframe.contentDocument.body.id = this.parent.getID() + '_rte-edit-view';\n iframe.contentDocument.open();\n iframe.contentDocument.write(iFrameContent);\n iframe.contentDocument.close();\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n IframeContentRender.prototype.getEditPanel = function () {\n return this.contentPanel.contentDocument.body;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n */\n IframeContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return IframeContentRender;\n}(ContentRender));\nexport { IframeContentRender };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, closest } from '@syncfusion/ej2-base';\nimport { HTMLFormatter } from '../formatter/html-formatter';\nimport { RenderType } from '../base/enum';\nimport { HtmlToolbarStatus } from './html-toolbar-status';\nimport { IframeContentRender } from '../renderer/iframe-content-renderer';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { ColorPickerInput } from './color-picker';\nimport { NodeSelection } from '../../selection/selection';\nimport { InsertHtml } from '../../editor-manager/plugin/inserthtml';\n/**\n * `HtmlEditor` module is used to HTML editor\n */\nvar HtmlEditor = /** @class */ (function () {\n function HtmlEditor(parent, serviceLocator) {\n this.rangeCollection = [];\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n */\n HtmlEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n HtmlEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.nodeSelectionObj = new NodeSelection();\n this.colorPickerModule = new ColorPickerInput(this.parent, this.locator);\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.htmlToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.renderColorPicker, this.renderColorPicker, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.selectRange, this.selectRange, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n };\n HtmlEditor.prototype.onSelectionSave = function () {\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n };\n HtmlEditor.prototype.onSelectionRestore = function (e) {\n this.parent.isBlur = false;\n this.contentRenderer.getEditPanel().focus();\n if (isNullOrUndefined(e.items) || (e.items && e.items[0].command !== 'Table')) {\n this.saveSelection.restore();\n }\n };\n HtmlEditor.prototype.onKeyDown = function (e) {\n if (e.args.keyCode === 9 && this.parent.enableTabKey) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var parentNode = this.nodeSelectionObj.getParentNodeCollection(range);\n if (!((parentNode[0].nodeName === 'LI' || parentNode[0].nodeName === 'BR' || closest(parentNode[0], 'li')) &&\n range.startOffset === 0)) {\n e.args.preventDefault();\n if (!e.args.shiftKey) {\n InsertHtml.Insert(this.contentRenderer.getDocument(), '    ');\n this.rangeCollection.push(this.nodeSelectionObj.getRange(this.contentRenderer.getDocument()));\n }\n else if (this.rangeCollection.length > 0 &&\n this.rangeCollection[this.rangeCollection.length - 1].startContainer.textContent.length === 4) {\n var textCont = this.rangeCollection[this.rangeCollection.length - 1].startContainer;\n this.nodeSelectionObj.setSelectionText(this.contentRenderer.getDocument(), textCont, textCont, 0, textCont.textContent.length);\n InsertHtml.Insert(this.contentRenderer.getDocument(), document.createTextNode(''));\n this.rangeCollection.pop();\n }\n }\n }\n if (e.args.action === 'space' ||\n e.args.action === 'enter') {\n this.spaceLink(e.args);\n }\n };\n HtmlEditor.prototype.spaceLink = function (e) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var selectNodeEle = this.nodeSelectionObj.getParentNodeCollection(range);\n var text = range.startContainer.textContent;\n var splitText = text.split(' ');\n var urlText = splitText[splitText.length - 1];\n var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (selectNodeEle[0].nodeName !== 'A' && urlText.match(regex)) {\n var selection = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n var selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var value = {\n url: urlText,\n selection: selection, selectParent: selectParent,\n text: '',\n title: '',\n target: ''\n };\n this.parent.formatter.process(this.parent, {\n item: {\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n }\n }, e, value);\n }\n };\n HtmlEditor.prototype.onToolbarClick = function (args) {\n var save;\n var selectNodeEle;\n var selectParentEle;\n var item = args.item;\n var closestElement = closest(args.originalEvent.target, '.e-rte-quick-popup');\n if (closestElement && !closestElement.classList.contains('e-rte-inline-popup')) {\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview')) {\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n if (item.command === 'Images') {\n this.parent.notify(events.imageToolbarAction, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Links') {\n this.parent.notify(events.linkToolbarAction, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Table') {\n this.parent.notify(events.tableToolbarAction, {\n member: 'table', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n }\n else {\n var linkDialog = this.parent.element.querySelector('#' + this.parent.getID() + '_rtelink');\n var imageDialog = this.parent.element.querySelector('#' + this.parent.getID() + '_image');\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview')) {\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n if (isNullOrUndefined(linkDialog) && isNullOrUndefined(imageDialog)) {\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n }\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'Print':\n this.parent.print();\n break;\n case 'Image':\n this.parent.notify(events.insertImage, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'CreateTable':\n this.parent.notify(events.createTable, {\n member: 'table', args: args, selection: save\n });\n break;\n case 'SourceCode':\n this.parent.notify(events.sourceCode, { member: 'viewSource', args: args });\n break;\n case 'Preview':\n this.parent.notify(events.updateSource, { member: 'updateSource', args: args });\n break;\n case 'FontColor':\n case 'BackgroundColor':\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n }\n };\n HtmlEditor.prototype.renderColorPicker = function (args) {\n this.colorPickerModule.renderColorPickerInput(args);\n };\n HtmlEditor.prototype.instantiateRenderer = function () {\n if (this.parent.iframeSettings.enable) {\n this.renderFactory.addRenderer(RenderType.Content, new IframeContentRender(this.parent, this.locator));\n }\n else {\n this.renderFactory.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n }\n };\n HtmlEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.htmlToolbarClick, this.onToolbarClick);\n this.parent.off(events.renderColorPicker, this.renderColorPicker);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.selectRange, this.selectRange);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n };\n HtmlEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n this.parent.formatter = new HTMLFormatter({\n currentDocument: this.contentRenderer.getDocument(),\n element: editElement,\n options: option\n });\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new HtmlToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n HtmlEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n };\n /**\n * For internal use only - Get the module name.\n */\n HtmlEditor.prototype.getModuleName = function () {\n return 'htmlEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectAll = function () {\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel(), this.parent.contentModule.getEditPanel(), 0, this.parent.contentModule.getEditPanel().childNodes.length);\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectRange = function (e) {\n this.parent.formatter.editorManager.nodeSelection.setRange(this.parent.contentModule.getDocument(), e.range);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n HtmlEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument()).toString());\n };\n return HtmlEditor;\n}());\nexport { HtmlEditor };\n","import { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize RichTextEditor header, content and footer rendering\n */\n Render.prototype.render = function () {\n var rteObj = this.parent;\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.contentRenderer.renderPanel();\n };\n /**\n * Refresh the entire RichTextEditor.\n * @return {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n };\n /**\n * Destroy the entire RichTextEditor.\n * @return {void}\n */\n Render.prototype.destroy = function () {\n this.removeEventListener();\n };\n Render.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.keyUp, this.keyUp, this);\n };\n Render.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.modelChanged, this.refresh);\n this.parent.off(events.keyUp, this.keyUp);\n };\n Render.prototype.keyUp = function (e) {\n if (this.parent.editorMode === 'HTML') {\n switch (e.args.which) {\n case 46:\n case 8:\n var childNodes = this.parent.contentModule.getEditPanel().childNodes;\n if ((childNodes.length === 0) ||\n (childNodes.length === 1 && ((childNodes[0].tagName === 'BR') ||\n (childNodes[0].tagName === 'P' &&\n (childNodes[0].childNodes.length === 0 || childNodes[0].textContent === ''))))) {\n var node = this.parent.contentModule.getEditPanel();\n node.innerHTML = '


    ';\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), node.childNodes[0], 0);\n }\n break;\n }\n }\n };\n return Render;\n}());\nexport { Render };\n","import { EventHandler, detach, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, addClass, removeClass, Browser } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_RTE_ELEMENTS } from '../base/classes';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Link` module is used to handle undo actions.\n */\nvar Link = /** @class */ (function () {\n function Link(parent, serviceLocator) {\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.addEventListener();\n this.serviceLocator = serviceLocator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n }\n Link.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.insertLink, this.linkDialog, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertCompleted, this.showLinkQuickToolbar, this);\n this.parent.on(events.linkToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.unLink, this.removeLink, this);\n this.parent.on(events.editLink, this.editLink, this);\n this.parent.on(events.openLink, this.openLink, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n };\n Link.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'OpenLink':\n this.parent.notify(events.openLink, args);\n break;\n case 'EditLink':\n this.parent.notify(events.editLink, args);\n break;\n case 'RemoveLink':\n this.parent.notify(events.unLink, args);\n break;\n }\n };\n Link.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.insertLink, this.linkDialog);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.insertCompleted, this.showLinkQuickToolbar);\n this.parent.off(events.linkToolbarAction, this.onToolbarAction);\n this.parent.off(events.unLink, this.removeLink);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.editLink, this.editLink);\n this.parent.off(events.openLink, this.openLink);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n };\n Link.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Link.prototype.showLinkQuickToolbar = function (e) {\n var pageX;\n var pageY;\n if (e.type !== 'Links' || isNullOrUndefined(this.parent.quickToolbarModule) ||\n isNullOrUndefined(this.parent.quickToolbarModule.linkQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var parentTop = this.parent.element.getBoundingClientRect().top;\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var args = e.args;\n var target;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target = ((element.nodeName === '#text') ? (element.parentNode) : element);\n }\n });\n if (e.isNotify) {\n pageX = target.getBoundingClientRect().left;\n var tbElement = this.parent.toolbarModule.getToolbarElement();\n var linkTop = target.getBoundingClientRect().top;\n var linkPos = linkTop - parentTop;\n var tbHeight = (tbElement) ? (tbElement.offsetHeight + this.parent.toolbarModule.getExpandTBarPopHeight()) : 0;\n pageY = window.pageYOffset + ((this.parent.iframeSettings.enable) ? (parentTop + tbHeight + linkTop) : (parentTop + linkPos));\n }\n else {\n pageX = args.pageX;\n pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + parentTop + args.clientY : args.pageY;\n }\n if (this.quickToolObj.linkQTBar) {\n this.quickToolObj.linkQTBar.showPopup(pageX, pageY, range.endContainer);\n }\n };\n Link.prototype.hideLinkQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.linkQTBar && document.body.contains(this.quickToolObj.linkQTBar.element)) {\n this.quickToolObj.linkQTBar.hidePopup();\n }\n };\n Link.prototype.editAreaClickHandler = function (e) {\n var args = e.args;\n if (args.which === 2 || args.which === 3) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.linkQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.linkQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'A' && !target.contains(target.querySelector('img'))) {\n if (isPopupOpen) {\n return;\n }\n this.showLinkQuickToolbar({\n args: args,\n isNotify: false,\n type: 'Links',\n elements: [args.target]\n });\n }\n else {\n this.hideLinkQuickToolbar();\n }\n }\n };\n Link.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'insert-link':\n if (this.parent.editorMode === 'HTML') {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n var selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var eventArgs = {\n args: event.args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n };\n this.linkDialog(eventArgs);\n }\n else {\n var textArea = this.parent.contentModule.getEditPanel();\n this.parent.formatter.editorManager.markdownSelection.save(textArea.selectionStart, textArea.selectionEnd);\n this.linkDialog({\n args: {\n item: { command: 'Links', subCommand: 'Link' },\n originalEvent: originalEvent\n },\n member: 'link',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertLink'\n });\n }\n originalEvent.preventDefault();\n break;\n }\n };\n Link.prototype.linkDialog = function (e, inputDetails) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n if (this.parent.editorMode === 'HTML' && (e.selectParent.length > 0 &&\n !isNullOrUndefined(e.selectParent[0].classList) &&\n e.selectParent[0].classList.contains('e-rte-anchor')) && isNullOrUndefined(inputDetails)) {\n this.editLink(e);\n return;\n }\n var selectText;\n var linkWebAddress = this.i10n.getConstant('linkWebUrl');\n var linkDisplayText = this.i10n.getConstant('linkText');\n var linkTooltip = this.i10n.getConstant('linkTooltipLabel');\n var urlPlace = this.i10n.getConstant('linkurl');\n var textPlace = this.i10n.getConstant('textPlaceholder');\n var title = this.i10n.getConstant('linkTitle');\n var linkDialogEle = this.parent.createElement('div', { className: 'e-rte-link-dialog', id: this.rteID + '_rtelink' });\n this.parent.element.appendChild(linkDialogEle);\n var linkContent = this.parent.createElement('div', {\n className: 'e-rte-linkcontent', id: this.rteID + '_linkContent'\n });\n var htmlTextbox = (this.parent.editorMode === 'HTML') ? '
    ' +\n '
    ' +\n '
    ' + '
    ' +\n '
    ' : '';\n var content = '
    ' + '
    ' +\n '
    ' +\n '
    ' + '
    ' +\n '' +\n '
    ' + htmlTextbox;\n var contentElem = document.createRange().createContextualFragment(content);\n linkContent.appendChild(contentElem);\n var linkTarget = linkContent.querySelector('.e-rte-linkTarget');\n var linkUrl = linkContent.querySelector('.e-rte-linkurl');\n var linkText = linkContent.querySelector('.e-rte-linkText');\n var linkTitle = linkContent.querySelector('.e-rte-linkTitle');\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({ label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl });\n this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n selectText = (this.parent.editorMode === 'HTML') ? e.selection.getRange(this.parent.contentModule.getDocument()).toString() :\n e.text;\n var linkInsert = this.i10n.getConstant('dialogInsert');\n var linkCancel = this.i10n.getConstant('dialogCancel');\n var selection = e.selection;\n var selectObj = { selfLink: this, selection: e.selection, selectParent: e.selectParent, args: e.args };\n this.dialogObj = new Dialog({\n header: this.i10n.getConstant('linkHeader'),\n content: linkContent,\n cssClass: CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '310px', height: 'initial',\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertlink.bind(selectObj),\n buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink', isPrimary: true }\n },\n { click: function (e) { _this.cancelDialog(e); }, buttonModel: { cssClass: 'e-flat', content: linkCancel } }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n _this.dialogObj = null;\n },\n });\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(linkDialogEle);\n linkDialogEle.style.maxHeight = 'initial';\n if (!isNullOrUndefined(inputDetails)) {\n linkUrl.value = inputDetails.url;\n linkText.value = inputDetails.text;\n linkTitle.value = inputDetails.title;\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n this.dialogObj.element.querySelector('.e-insertLink').textContent = inputDetails.btnText;\n }\n this.checkUrl(false);\n if ((this.parent.editorMode === 'HTML' && ((!isNullOrUndefined(selectText) && selectText !== '') &&\n (e.selection.range.startOffset === 0) || e.selection.range.startOffset !== e.selection.range.endOffset))\n || e.module === 'Markdown') {\n linkText.value = selectText;\n }\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n if (this.quickToolObj) {\n this.hideLinkQuickToolbar();\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n Link.prototype.insertlink = function (e) {\n var linkEle = this.selfLink.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl').value;\n var linkText = linkEle.querySelector('.e-rte-linkText').value;\n var linkTitle;\n if (this.selfLink.parent.editorMode === 'HTML') {\n linkTitle = linkEle.querySelector('.e-rte-linkTitle').value;\n }\n var target = (this.selfLink.checkBoxObj.checked) ? '_blank' : '';\n if (linkUrl === '') {\n this.selfLink.checkUrl(true);\n return;\n }\n if (!this.selfLink.isUrl(linkUrl)) {\n linkText = (linkText === '') ? linkUrl : linkText;\n linkUrl = 'http://' + linkUrl;\n }\n else {\n this.selfLink.checkUrl(false);\n }\n var proxy = this.selfLink;\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '#' + proxy.parent.contentModule.getPanel().id))) {\n proxy.parent.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.parent.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var value = {\n url: linkUrl, text: linkText, title: linkTitle, target: target,\n selection: this.selection, selectParent: this.selectParent\n };\n if (proxy.parent.editorMode === 'HTML') {\n this.selection.restore();\n }\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n this.selfLink.parent.formatter.process(this.selfLink.parent, this.args, this.args.originalEvent, value);\n if (document.contains(proxy.dialogObj.element)) {\n this.selfLink.dialogObj.hide({ returnValue: false });\n }\n this.selfLink.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.isUrl = function (url) {\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Link.prototype.checkUrl = function (e) {\n var linkEle = this.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl');\n if (e) {\n addClass([linkUrl], 'e-error');\n linkUrl.setSelectionRange(0, linkUrl.value.length);\n linkUrl.focus();\n }\n else {\n removeClass([linkUrl], 'e-error');\n }\n };\n Link.prototype.removeLink = function (e) {\n var parent = e.selectParent[0].parentNode;\n var child = [];\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n for (; e.selectParent[0].firstChild; null) {\n child.push(parent.insertBefore(e.selectParent[0].firstChild, e.selectParent[0]));\n }\n parent.removeChild(e.selectParent[0]);\n if (child && child.length === 1) {\n e.selection.startContainer = e.selection.getNodeArray(child[child.length - 1], true);\n e.selection.endContainer = e.selection.startContainer;\n }\n e.selection.restore();\n this.contentModule.getEditPanel().focus();\n this.parent.formatter.saveData();\n this.hideLinkQuickToolbar();\n };\n Link.prototype.openLink = function (e) {\n if (e.selectParent[0].classList.contains('e-rte-anchor') || e.selectParent[0].tagName === 'A') {\n var target = e.selectParent[0].target === '' ? '_self' : '_blank';\n window.open(e.selectParent[0].href, target);\n }\n };\n Link.prototype.editLink = function (e) {\n if (e.selectParent[0].classList.contains('e-rte-anchor') || e.selectParent[0].tagName === 'A') {\n var selectParentEle = e.selectParent[0];\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.href, text: selectParentEle.innerHTML,\n title: selectParentEle.title, target: selectParentEle.target,\n header: 'Edit Link', btnText: linkUpdate\n };\n this.linkDialog(e, inputDetails);\n }\n };\n Link.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.dialogObj.hide({ returnValue: true });\n this.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.dialogObj) && ((!closest(target, '#' + this.dialogObj.element.id) && this.parent.toolbarSettings.enable &&\n this.parent.getToolbarElement() && !this.parent.getToolbarElement().contains(e.target)) ||\n (this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_CreateLink') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_CreateLink')))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Link.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Link.prototype.getModuleName = function () {\n return 'link';\n };\n return Link;\n}());\nexport { Link };\n","import { addClass, detach, EventHandler, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Browser, closest, removeClass } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Uploader, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Button, CheckBox } from '@syncfusion/ej2-buttons';\nimport { InsertHtml } from './../../editor-manager/plugin/inserthtml';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Image` module is used to handle image actions.\n */\nvar Image = /** @class */ (function () {\n function Image(parent, serviceLocator) {\n this.pageX = null;\n this.pageY = null;\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n Image.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertImage, this.insertImage, this);\n this.parent.on(events.insertCompleted, this.showImageQuickToolbar, this);\n this.parent.on(events.imageToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.imageCaption, this.caption, this);\n this.parent.on(events.imageDelete, this.deleteImg, this);\n this.parent.on(events.imageLink, this.insertImgLink, this);\n this.parent.on(events.imageAlt, this.insertAltText, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.imageSize, this.imageSize, this);\n this.parent.on(events.dropDownSelect, this.alignmentSelect, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n this.parent.on(events.paste, this.imagePaste, this);\n };\n Image.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.insertImage, this.insertImage);\n this.parent.off(events.insertCompleted, this.showImageQuickToolbar);\n this.parent.off(events.imageCaption, this.caption);\n this.parent.off(events.imageToolbarAction, this.onToolbarAction);\n this.parent.off(events.imageDelete, this.deleteImg);\n this.parent.off(events.imageLink, this.insertImgLink);\n this.parent.off(events.imageAlt, this.insertAltText);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.imageSize, this.imageSize);\n this.parent.off(events.dropDownSelect, this.alignmentSelect);\n this.parent.off(events.initialEnd, this.afterRender);\n this.parent.off(events.paste, this.imagePaste);\n if (!isNullOrUndefined(this.contentModule)) {\n EventHandler.remove(this.contentModule.getEditPanel(), 'click', this.imageClick);\n this.parent.formatter.editorManager.observer.off(events.checkUndo, this.undoStack);\n if (this.parent.insertImageSettings.resize) {\n EventHandler.remove(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart);\n EventHandler.remove(this.contentModule.getDocument(), 'mousedown', this.onDocumentClick);\n }\n }\n };\n Image.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Image.prototype.afterRender = function () {\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n EventHandler.add(this.contentModule.getEditPanel(), 'click', this.imageClick, this);\n if (this.parent.insertImageSettings.resize) {\n EventHandler.add(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart, this);\n EventHandler.add(this.contentModule.getDocument(), 'mousedown', this.onDocumentClick, this);\n }\n };\n Image.prototype.undoStack = function (args) {\n if (args.subCommand.toLowerCase() === 'undo' || args.subCommand.toLowerCase() === 'redo') {\n for (var i = 0; i < this.parent.formatter.getUndoRedoStack().length; i++) {\n var temp = this.parent.createElement('div');\n var contentElem = document.createRange().createContextualFragment(this.parent.formatter.getUndoRedoStack()[i].text);\n temp.appendChild(contentElem);\n var img = temp.querySelectorAll('img');\n if (temp.querySelector('.e-img-resize') && img.length > 0) {\n for (var j = 0; j < img.length; j++) {\n img[j].style.outline = '';\n }\n detach(temp.querySelector('.e-img-resize'));\n this.parent.formatter.getUndoRedoStack()[i].text = temp.innerHTML;\n }\n }\n }\n };\n Image.prototype.resizeEnd = function (e) {\n this.resizeBtnInit();\n this.imgEle.parentElement.style.cursor = 'auto';\n if (Browser.isDevice) {\n removeClass([e.target.parentElement], 'e-mob-span');\n }\n var args = { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStop, args);\n var pageX = this.getPointX(e);\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + e.clientY : e.pageY;\n this.parent.formatter.editorManager.observer.on(events.checkUndo, this.undoStack, this);\n this.parent.formatter.saveData();\n };\n Image.prototype.resizeStart = function (e) {\n if (e.target.tagName === 'IMG') {\n this.parent.preventDefaultResize(e);\n var img = e.target;\n if (this.imgResizeDiv && this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n detach(this.imgResizeDiv);\n }\n this.imageResize(img);\n }\n if (e.target.classList.contains('e-rte-imageboxmark')) {\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.pageX = this.getPointX(e);\n this.pageY = this.getPointY(e);\n e.preventDefault();\n e.stopImmediatePropagation();\n this.resizeBtnInit();\n if (this.quickToolObj) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n if (e.target.classList.contains('e-rte-topLeft')) {\n this.resizeBtnStat.topLeft = true;\n }\n if (e.target.classList.contains('e-rte-topRight')) {\n this.resizeBtnStat.topRight = true;\n }\n if (e.target.classList.contains('e-rte-botLeft')) {\n this.resizeBtnStat.botLeft = true;\n }\n if (e.target.classList.contains('e-rte-botRight')) {\n this.resizeBtnStat.botRight = true;\n }\n if (Browser.isDevice && this.contentModule.getEditPanel().contains(this.imgResizeDiv) &&\n !this.imgResizeDiv.classList.contains('e-mob-span')) {\n addClass([this.imgResizeDiv], 'e-mob-span');\n }\n else {\n var args = { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStart, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n }\n EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);\n }\n };\n Image.prototype.imageClick = function (e) {\n if (Browser.isDevice) {\n if ((e.target.tagName === 'IMG' &&\n e.target.parentElement.tagName === 'A') ||\n (e.target.tagName === 'IMG')) {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'false');\n }\n else {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'true');\n }\n }\n if (e.target.tagName === 'A' ||\n e.target.parentElement.tagName === 'A') {\n e.preventDefault();\n }\n };\n Image.prototype.imageResize = function (e) {\n this.resizeBtnInit();\n this.imgEle = e;\n addClass([this.imgEle], 'e-resize');\n this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize', id: this.rteID + '_imgResize' });\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-topLeft', styles: 'cursor: nwse-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-topRight', styles: 'cursor: nesw-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-botLeft', styles: 'cursor: nesw-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-botRight', styles: 'cursor: nwse-resize'\n }));\n if (Browser.isDevice) {\n addClass([this.imgResizeDiv], 'e-mob-rte');\n }\n e.style.outline = '2px solid #4a90e2';\n this.imgResizePos(e, this.imgResizeDiv);\n this.resizeImgDupPos(e);\n this.contentModule.getEditPanel().appendChild(this.imgResizeDiv);\n EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);\n };\n Image.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Image.prototype.getPointY = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageY;\n }\n else {\n return e.pageY;\n }\n };\n Image.prototype.imgResizePos = function (e, imgResizeDiv) {\n var pos = this.calcPos(e);\n var top = pos.top;\n var left = pos.left;\n var imgWid = e.width;\n var imgHgt = e.height;\n var borWid = (Browser.isDevice) ? (4 * parseInt((e.style.outline.slice(-3)), 10)) + 2 :\n (2 * parseInt((e.style.outline.slice(-3)), 10)) + 2; //span border width + image outline width\n var devWid = ((Browser.isDevice) ? 0 : 2); // span border width\n imgResizeDiv.querySelector('.e-rte-botLeft').style.left = (left - borWid) + 'px';\n imgResizeDiv.querySelector('.e-rte-botLeft').style.top = ((imgHgt - borWid) + top) + 'px';\n imgResizeDiv.querySelector('.e-rte-botRight').style.left = ((imgWid - (borWid - devWid)) + left) + 'px';\n imgResizeDiv.querySelector('.e-rte-botRight').style.top = ((imgHgt - borWid) + top) + 'px';\n imgResizeDiv.querySelector('.e-rte-topRight').style.left = ((imgWid - (borWid - devWid)) + left) + 'px';\n imgResizeDiv.querySelector('.e-rte-topRight').style.top = (top - (borWid)) + 'px';\n imgResizeDiv.querySelector('.e-rte-topLeft').style.left = (left - borWid) + 'px';\n imgResizeDiv.querySelector('.e-rte-topLeft').style.top = (top - borWid) + 'px';\n };\n Image.prototype.calcPos = function (elem) {\n var parentOffset = { top: 0, left: 0 };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = ((elem.offsetParent && elem.offsetParent.classList.contains('e-img-caption')) ?\n closest(elem, '.e-control') : elem.offsetParent) || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Image.prototype.setAspectRatio = function (img, expectedX, expectedY) {\n if (isNullOrUndefined(img.width)) {\n return;\n }\n var width = img.style.width !== '' ? parseInt(img.style.width, 10) : img.width;\n var height = img.style.height !== '' ? parseInt(img.style.height, 10) : img.height;\n if (width > height) {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = (width / height * expectedY) + 'px';\n img.style.height = expectedY + 'px';\n }\n else {\n img.setAttribute('width', (width / height * expectedY).toString());\n img.setAttribute('height', expectedY.toString());\n }\n }\n else if (height > width) {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc(expectedX, (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = expectedX + 'px';\n img.style.height = (height / width * expectedX) + 'px';\n }\n else {\n img.setAttribute('width', expectedX.toString());\n img.setAttribute('height', (height / width * expectedX).toString());\n }\n }\n else {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc(expectedX, (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = expectedX + 'px';\n img.style.height = expectedX + 'px';\n }\n else {\n img.setAttribute('width', expectedX.toString());\n img.setAttribute('height', expectedX.toString());\n }\n }\n };\n Image.prototype.pixToPerc = function (expected, parentEle) {\n return expected / parseFloat(getComputedStyle(parentEle).width) * 100;\n };\n Image.prototype.imgDupMouseMove = function (width, height, e) {\n var args = { event: e, requestType: 'images' };\n this.parent.trigger(events.onResize, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n if ((parseInt(this.parent.insertImageSettings.minWidth, 10) >= parseInt(width, 10) ||\n parseInt(this.parent.insertImageSettings.maxWidth, 10) <= parseInt(width, 10))) {\n return;\n }\n if (!this.parent.insertImageSettings.resizeByPercent &&\n (parseInt(this.parent.insertImageSettings.minHeight, 10) >= parseInt(height, 10) ||\n parseInt(this.parent.insertImageSettings.maxHeight, 10) <= parseInt(height, 10))) {\n return;\n }\n this.imgEle.parentElement.style.cursor = 'pointer';\n this.setAspectRatio(this.imgEle, parseInt(width, 10), parseInt(height, 10));\n this.resizeImgDupPos(this.imgEle);\n this.imgResizePos(this.imgEle, this.imgResizeDiv);\n this.parent.setContentHeight('', false);\n };\n Image.prototype.resizing = function (e) {\n var pageX = this.getPointX(e);\n var pageY = this.getPointY(e);\n var mouseX = (this.resizeBtnStat.botLeft || this.resizeBtnStat.topLeft) ? -(pageX - this.pageX) : (pageX - this.pageX);\n var mouseY = (this.resizeBtnStat.topLeft || this.resizeBtnStat.topRight) ? -(pageY - this.pageY) : (pageY - this.pageY);\n var width = parseInt(this.imgDupPos.width, 10) + mouseX;\n var height = parseInt(this.imgDupPos.height, 10) + mouseY;\n this.pageX = pageX;\n this.pageY = pageY;\n if (this.resizeBtnStat.botRight) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n else if (this.resizeBtnStat.botLeft) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n else if (this.resizeBtnStat.topRight) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n else if (this.resizeBtnStat.topLeft) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n };\n Image.prototype.cancelResizeAction = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n if (this.imgEle && this.imgResizeDiv && this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n detach(this.imgResizeDiv);\n this.imgEle.style.outline = '';\n this.imgResizeDiv = null;\n this.pageX = null;\n this.pageY = null;\n }\n };\n Image.prototype.resizeImgDupPos = function (e) {\n this.imgDupPos = {\n width: (e.style.height !== '') ? this.imgEle.style.width : e.width + 'px',\n height: (e.style.height !== '') ? this.imgEle.style.height : e.height + 'px'\n };\n };\n Image.prototype.resizeBtnInit = function () {\n return this.resizeBtnStat = { botLeft: false, botRight: false, topRight: false, topLeft: false };\n };\n Image.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'Replace':\n this.parent.notify(events.insertImage, args);\n break;\n case 'Caption':\n this.parent.notify(events.imageCaption, args);\n break;\n case 'InsertLink':\n this.parent.notify(events.imageLink, args);\n break;\n case 'AltText':\n this.parent.notify(events.imageAlt, args);\n break;\n case 'Remove':\n this.parent.notify(events.imageDelete, args);\n break;\n case 'Dimension':\n this.parent.notify(events.imageSize, args);\n break;\n case 'OpenImageLink':\n this.openImgLink(args);\n break;\n case 'EditImageLink':\n this.editImgLink(args);\n break;\n case 'RemoveImageLink':\n this.removeImgLink(args);\n break;\n }\n };\n Image.prototype.openImgLink = function (e) {\n var target = e.selectParent[0].parentNode.target === '' ? '_self' : '_blank';\n window.open(e.selectParent[0].parentNode.href, target);\n };\n Image.prototype.editImgLink = function (e) {\n var selectParentEle = e.selectParent[0].parentNode;\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.href, target: selectParentEle.target,\n header: 'Edit Link', btnText: linkUpdate\n };\n this.insertImgLink(e, inputDetails);\n };\n Image.prototype.removeImgLink = function (e) {\n e.selection.restore();\n var insertEle = (this.contentModule.getEditPanel().contains(this.captionEle) && closest(this.captionEle, 'a')) ?\n this.captionEle : e.selectNode[0];\n detach(closest(e.selectParent[0], 'a'));\n InsertHtml.Insert(this.parent.contentModule.getDocument(), insertEle);\n this.parent.formatter.saveData();\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n };\n Image.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n var range;\n var save;\n var selectNodeEle;\n var selectParentEle;\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection)) {\n range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n if (!originalEvent.ctrlKey && originalEvent.key && (originalEvent.key.length === 1 || originalEvent.action === 'enter') &&\n (selectParentEle[0].tagName === 'IMG') && selectParentEle[0].parentElement) {\n var prev = selectParentEle[0].parentElement.childNodes[0];\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n }\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), prev, prev, prev.textContent.length, prev.textContent.length);\n removeClass([selectParentEle[0]], 'e-img-focus');\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n if (originalEvent.ctrlKey && (originalEvent.keyCode === 89 || originalEvent.keyCode === 90)) {\n this.undoStack({ subCommand: (originalEvent.keyCode === 90 ? 'undo' : 'redo') });\n }\n if (originalEvent.keyCode === 8 || originalEvent.keyCode === 46) {\n if (selectNodeEle && selectNodeEle[0].nodeName === 'IMG') {\n originalEvent.preventDefault();\n this.deleteImg({ selectNode: selectNodeEle, selection: save, selectParent: selectParentEle });\n }\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n }\n }\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'insert-image':\n if (this.parent.editorMode === 'HTML') {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: originalEvent\n },\n selectNode: selectNodeEle,\n selection: save,\n selectParent: selectParentEle\n });\n }\n else {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: originalEvent\n },\n member: 'image',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertImage'\n });\n }\n originalEvent.preventDefault();\n break;\n }\n };\n Image.prototype.alignmentSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Images') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectNodeEle = (selectNodeEle[0].nodeName === 'IMG') ? selectNodeEle : [this.imgEle];\n var args = { args: e, selectNode: selectNodeEle };\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n switch (item.subCommand) {\n case 'JustifyLeft':\n this.justifyImageLeft(args);\n break;\n case 'JustifyCenter':\n this.justifyImageCenter(args);\n break;\n case 'JustifyRight':\n this.justifyImageRight(args);\n break;\n case 'Inline':\n this.inline(args);\n break;\n case 'Break':\n this.break(args);\n break;\n }\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNodeEle[0]], 'e-img-focus');\n }\n this.cancelResizeAction();\n };\n Image.prototype.imageWithLinkQTBarItemUpdate = function () {\n var separator;\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n addClass([items[i]], 'e-link-groups');\n items[i].style.display = 'none';\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = '';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n };\n Image.prototype.showImageQuickToolbar = function (e) {\n var _this = this;\n if (e.type !== 'Images' || isNullOrUndefined(this.parent.quickToolbarModule)\n || isNullOrUndefined(this.parent.quickToolbarModule.imageQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var args = e.args;\n var target;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target = element;\n }\n });\n if (target && !closest(target, 'a')) {\n this.imageWithLinkQTBarItemUpdate();\n }\n if (target.nodeName === 'IMG') {\n addClass([target], ['e-img-focus']);\n }\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n if (this.parent.quickToolbarModule.imageQTBar) {\n if (e.isNotify) {\n setTimeout(function () { _this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target); }, 400);\n }\n else {\n this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);\n }\n }\n };\n Image.prototype.hideImageQuickToolbar = function () {\n if (!isNullOrUndefined(this.contentModule.getEditPanel().querySelector('.e-img-focus'))) {\n removeClass([this.contentModule.getEditPanel().querySelector('.e-img-focus')], 'e-img-focus');\n if (this.quickToolObj && this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n };\n Image.prototype.editAreaClickHandler = function (e) {\n var args = e.args;\n if (args.which === 2 || args.which === 3) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.imageQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.imageQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'IMG' && this.parent.quickToolbarModule) {\n if (isPopupOpen) {\n return;\n }\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), target);\n addClass([target], 'e-img-focus');\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n var separator = void 0;\n if (closest(target, 'a')) {\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n items[i].style.display = '';\n removeClass([items[i]], 'e-link-groups');\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = 'none';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n }\n else if (!closest(target, 'a')) {\n this.imageWithLinkQTBarItemUpdate();\n }\n this.showImageQuickToolbar({ args: args, type: 'Images', elements: [args.target] });\n }\n else {\n this.hideImageQuickToolbar();\n }\n }\n };\n Image.prototype.insertImgLink = function (e, inputDetails) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' });\n var linkUrl = this.i10n.getConstant('linkurl');\n var content = '
    ' +\n '
    ' +\n '
    ' + '
    ' +\n '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n linkWrap.appendChild(contentElem);\n var linkTarget = linkWrap.querySelector('.e-rte-linkTarget');\n var inputLink = linkWrap.querySelector('.e-img-link');\n var target_1 = '';\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({\n label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl, change: function (e) {\n if (e.checked) {\n target_1 = '_blank';\n }\n else {\n target_1 = '';\n }\n }\n });\n this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var linkargs_1 = {\n selfImage: this, selection: e.selection,\n selectNode: e.selectNode, selectParent: e.selectParent, link: inputLink, target: target_1\n };\n this.dialogObj.setProperties({\n height: 'initial', width: '290px', header: 'Insert Link', content: linkWrap, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertlink(linkargs_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-link', isPrimary: true\n }\n }]\n });\n if (!isNullOrUndefined(inputDetails)) {\n inputLink.value = inputDetails.url;\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n }\n this.dialogObj.element.style.maxHeight = 'none';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAltText = function (e) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n var altText = this.i10n.getConstant('altText');\n if (!isNullOrUndefined(this.dialogObj)) {\n var altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' });\n var altHeader = this.i10n.getConstant('alternateHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var getAlt = (e.selectNode[0].getAttribute('alt') === null) ? '' :\n e.selectNode[0].getAttribute('alt');\n var content = '
    ' +\n '' +\n '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n altWrap.appendChild(contentElem);\n var inputAlt = altWrap.querySelector('.e-img-alt');\n var altArgs_1 = { selfImage: this, selection: e.selection, selectNode: e.selectNode, alt: inputAlt };\n this.dialogObj.setProperties({\n height: 'initial', width: '290px', header: altHeader, content: altWrap, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertAlt(altArgs_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-alt', isPrimary: true\n }\n }]\n });\n this.dialogObj.element.style.maxHeight = 'none';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAlt = function (e) {\n if (!isNullOrUndefined(e.alt)) {\n e.selection.restore();\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n var altText = e.alt.value;\n e.selectNode[0].setAttribute('alt', altText);\n this.dialogObj.hide({ returnValue: false });\n this.parent.formatter.saveData();\n }\n };\n Image.prototype.insertlink = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var url = e.link.value;\n if (url === '') {\n addClass([e.link], 'e-error');\n e.link.setSelectionRange(0, url.length);\n e.link.focus();\n return;\n }\n if (!this.isUrl(url)) {\n url = 'http://' + url;\n }\n else {\n removeClass([e.link], 'e-error');\n }\n e.selection.restore();\n if (e.selfImage.parent.formatter.getUndoRedoStack().length === 0) {\n e.selfImage.parent.formatter.saveData();\n }\n if (e.selectNode[0].parentElement.nodeName === 'A') {\n e.selectNode[0].parentElement.href = url;\n e.selectNode[0].parentElement.target = e.target;\n e.selfImage.parent.formatter.saveData();\n e.selfImage.dialogObj.hide({ returnValue: true });\n return;\n }\n var anchor = this.parent.createElement('a', {\n attrs: {\n href: url,\n target: '_blank'\n }\n });\n anchor.appendChild(e.selectNode[0]);\n InsertHtml.Insert(this.contentModule.getDocument(), anchor);\n e.selfImage.parent.formatter.saveData();\n e.selfImage.dialogObj.hide({ returnValue: false });\n };\n Image.prototype.isUrl = function (url) {\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Image.prototype.deleteImg = function (e) {\n var selectNode = e.selectNode[0];\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n e.selection.restore();\n if (closest(selectNode, 'a')) {\n detach(closest(selectNode, 'a'));\n }\n else if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n detach(closest(selectNode, '.' + classes.CLS_CAPTION));\n }\n else {\n detach(selectNode);\n }\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n this.cancelResizeAction();\n this.parent.formatter.saveData();\n };\n Image.prototype.caption = function (e) {\n var selectNode = e.selectNode[0];\n if (selectNode.nodeName !== 'IMG') {\n return;\n }\n e.selection.restore();\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.cancelResizeAction();\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n detach(closest(selectNode, '.' + classes.CLS_CAPTION));\n if (selectNode.parentElement.tagName === 'A') {\n InsertHtml.Insert(this.contentModule.getDocument(), selectNode.parentElement);\n }\n else {\n InsertHtml.Insert(this.contentModule.getDocument(), selectNode);\n }\n }\n else {\n this.captionEle = this.parent.createElement('span', {\n className: classes.CLS_CAPTION,\n attrs: { contenteditable: 'false', draggable: 'false' }\n });\n var imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' });\n var imgInner = this.parent.createElement('span', { className: 'e-img-inner', attrs: { contenteditable: 'true' } });\n imgWrap.appendChild(e.selectNode[0]);\n imgWrap.appendChild(imgInner);\n var imgCaption = this.i10n.getConstant('imageCaption');\n imgInner.innerHTML = imgCaption;\n this.captionEle.appendChild(imgWrap);\n if (selectNode.classList.contains(classes.CLS_IMGINLINE)) {\n addClass([this.captionEle], classes.CLS_CAPINLINE);\n }\n if (selectNode.classList.contains(classes.CLS_IMGBREAK)) {\n addClass([this.captionEle], classes.CLS_IMGBREAK);\n }\n if (selectNode.classList.contains(classes.CLS_IMGLEFT)) {\n addClass([this.captionEle], classes.CLS_IMGLEFT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGRIGHT)) {\n addClass([this.captionEle], classes.CLS_IMGRIGHT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGCENTER)) {\n addClass([this.captionEle], classes.CLS_IMGCENTER);\n }\n InsertHtml.Insert(this.contentModule.getDocument(), this.captionEle);\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), imgInner.childNodes[0], imgInner.childNodes[0], 0, imgInner.childNodes[0].textContent.length);\n }\n this.parent.formatter.saveData();\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNode], 'e-img-focus');\n }\n };\n Image.prototype.imageSize = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var imgSizeHeader = this.i10n.getConstant('imageSizeHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var dialogContent = this.imgsizeInput(e);\n var selectObj = { selfImage: this, selection: e.selection, selectNode: e.selectNode };\n this.dialogObj.setProperties({\n height: 'initial', width: '290px', header: imgSizeHeader, content: dialogContent, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: this.insertSize.bind(selectObj),\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-size', isPrimary: true\n }\n }]\n });\n this.dialogObj.element.style.maxHeight = 'none';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.break = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var selectNode = e.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], classes.CLS_IMGBREAK);\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_CAPINLINE);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGCENTER);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGLEFT);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGRIGHT);\n addClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGBREAK);\n }\n this.parent.formatter.saveData();\n };\n Image.prototype.inline = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var selectNode = e.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n addClass([selectNode], classes.CLS_IMGINLINE);\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGBREAK);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGCENTER);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGLEFT);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGRIGHT);\n addClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_CAPINLINE);\n }\n this.parent.formatter.saveData();\n };\n Image.prototype.justifyImageLeft = function (e) {\n var selectNode = e.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGRIGHT);\n addClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGLEFT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLS_IMGRIGHT);\n addClass([selectNode.parentElement], classes.CLS_IMGLEFT);\n }\n else {\n addClass([selectNode], classes.CLS_IMGLEFT);\n }\n this.parent.formatter.saveData();\n };\n Image.prototype.justifyImageRight = function (e) {\n var selectNode = e.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGLEFT);\n addClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGRIGHT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLS_IMGLEFT);\n addClass([selectNode.parentElement], classes.CLS_IMGRIGHT);\n }\n else {\n addClass([selectNode], classes.CLS_IMGRIGHT);\n }\n this.parent.formatter.saveData();\n };\n Image.prototype.justifyImageCenter = function (e) {\n var selectNode = e.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGLEFT);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGRIGHT);\n addClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGCENTER);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLS_IMGLEFT);\n removeClass([selectNode.parentElement], classes.CLS_IMGRIGHT);\n addClass([selectNode.parentElement], classes.CLS_IMGCENTER);\n }\n else {\n addClass([selectNode], classes.CLS_IMGCENTER);\n }\n this.parent.formatter.saveData();\n };\n Image.prototype.imagDialog = function (e) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n var imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog', id: this.rteID + '_image' });\n this.parent.element.appendChild(imgDialog);\n var imgInsert = this.i10n.getConstant('dialogInsert');\n var imglinkCancel = this.i10n.getConstant('dialogCancel');\n var imgHeader = this.i10n.getConstant('imageHeader');\n var selection = e.selection;\n var selectObj = { selfImage: this, selection: e.selection, args: e.args };\n this.dialogObj = new Dialog({\n header: imgHeader,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'initial',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertImageUrl.bind(selectObj),\n buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: imglinkCancel }\n }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n _this.dialogObj = null;\n },\n });\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(imgDialog);\n imgDialog.style.maxHeight = 'none';\n if (this.quickToolObj) {\n if (this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n Image.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.dialogObj.hide({ returnValue: true });\n };\n Image.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (target.nodeName === 'IMG') {\n this.imgEle = target;\n }\n if (!isNullOrUndefined(this.dialogObj) && ((!closest(target, '#' + this.dialogObj.element.id) && this.parent.toolbarSettings.enable && this.parent.getToolbarElement() &&\n !this.parent.getToolbarElement().contains(e.target)) ||\n (this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_Image') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_Image')))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n if (e.target.tagName !== 'IMG' && this.imgResizeDiv && !(this.quickToolObj &&\n this.quickToolObj.imageQTBar && this.quickToolObj.imageQTBar.element.contains(e.target)) &&\n this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n this.cancelResizeAction();\n }\n if (target.tagName !== 'IMG' && this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n this.contentModule.getEditPanel().querySelector('img').style.outline = '';\n }\n };\n Image.prototype.remvoeResizEle = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n detach(this.contentModule.getEditPanel().querySelector('.e-img-resize'));\n };\n Image.prototype.imageUrlPopup = function (e) {\n var imgUrl = this.parent.createElement('div', { className: 'imgUrl' });\n var placeUrl = this.i10n.getConstant('imageUrl');\n this.inputUrl = this.parent.createElement('input', {\n className: 'e-input e-img-url',\n attrs: { placeholder: placeUrl, spellcheck: 'false' }\n });\n imgUrl.appendChild(this.inputUrl);\n return imgUrl;\n };\n Image.prototype.insertImageUrl = function (e) {\n var proxy = this.selfImage;\n var url = proxy.inputUrl.value;\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n if (!isNullOrUndefined(proxy.uploadUrl) && proxy.uploadUrl.url !== '') {\n proxy.uploadUrl.cssClass = (proxy.parent.insertImageSettings.display === 'inline' ?\n classes.CLS_IMGINLINE : classes.CLS_IMGBREAK);\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, proxy.uploadUrl);\n proxy.dialogObj.hide({ returnValue: false });\n proxy.uploadUrl.url = '';\n }\n else if (url !== '') {\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '#' + proxy.contentModule.getPanel().id))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var regex = /[\\w-]+.(jpg|png|jpeg|gif)/g;\n var matchUrl = (!isNullOrUndefined(url.match(regex)) && proxy.parent.editorMode === 'HTML') ? url.match(regex)[0] : '';\n var value = {\n cssClass: (proxy.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: url, selection: this.selection, altText: matchUrl,\n selectParent: this.selectParent, width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n },\n height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, value);\n proxy.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.imgsizeInput = function (e) {\n var selectNode = e.selectNode[0];\n var imgHeight = this.i10n.getConstant('imageHeight');\n var imgWidth = this.i10n.getConstant('imageWidth');\n var imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' });\n var widthVal = (selectNode.getAttribute('width') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('width'))) ? selectNode.width : selectNode.getClientRects()[0].width;\n var heightVal = (selectNode.getAttribute('height') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('height'))) ? selectNode.height : selectNode.getClientRects()[0].height;\n var content = '
    ' +\n '
    ' + '
    ' +\n '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n imgSizeWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({\n format: '###.### px', min: this.parent.insertImageSettings.minWidth,\n max: this.parent.insertImageSettings.maxWidth,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n widthNum.createElement = this.parent.createElement;\n widthNum.appendTo(imgSizeWrap.querySelector('#imgwidth'));\n var heightNum = new NumericTextBox({\n format: '###.### px', min: this.parent.insertImageSettings.minHeight,\n max: this.parent.insertImageSettings.maxHeight,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n heightNum.createElement = this.parent.createElement;\n heightNum.appendTo(imgSizeWrap.querySelector('#imgheight'));\n return imgSizeWrap;\n };\n Image.prototype.insertSize = function (e) {\n var selectNode = this.selectNode[0];\n this.selection.restore();\n if (this.selfImage.parent.formatter.getUndoRedoStack().length === 0) {\n this.selfImage.parent.formatter.saveData();\n }\n var dialogEle = this.selfImage.dialogObj.element;\n selectNode.style.height = '';\n selectNode.style.width = '';\n selectNode.width = parseFloat(dialogEle.querySelector('.e-img-width').value);\n selectNode.height = parseFloat(dialogEle.parentElement.querySelector('.e-img-height').value);\n if (this.imgResizeDiv) {\n this.selfImage.imgResizePos(selectNode, this.imgResizeDiv);\n }\n this.selfImage.dialogObj.hide({ returnValue: true });\n this.selfImage.parent.formatter.saveData();\n };\n Image.prototype.insertImage = function (e) {\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var dialogContent = this.parent.createElement('div', { className: 'e-img-content' });\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.appendChild(this.imgUpload(e));\n }\n var linkHeader = this.parent.createElement('div', { className: 'e-linkheader' });\n var linkHeaderText = this.i10n.getConstant('imageLinkHeader');\n if (this.parent.editorMode === 'HTML') {\n linkHeader.innerHTML = linkHeaderText;\n }\n else {\n linkHeader.innerHTML = this.i10n.getConstant('mdimageLink');\n }\n dialogContent.appendChild(linkHeader);\n dialogContent.appendChild(this.imageUrlPopup(e));\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG') {\n this.dialogObj.setProperties({ header: 'Edit Image', content: dialogContent }, false);\n this.dialogObj.element.querySelector('.e-insertImage').textContent = 'Update';\n }\n else {\n this.dialogObj.setProperties({ content: dialogContent }, false);\n }\n this.dialogObj.element.style.maxHeight = 'none';\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.querySelector('#' + this.rteID + '_insertImage').focus();\n }\n else {\n dialogContent.querySelector('.e-img-url').focus();\n }\n }\n };\n Image.prototype.imgUpload = function (e) {\n var _this = this;\n var save;\n var selectParent;\n var proxy = this;\n if (proxy.parent.editorMode === 'HTML' &&\n isNullOrUndefined(closest(e.selection.range.startContainer.parentNode, '#' + this.contentModule.getPanel().id))) {\n this.contentModule.getEditPanel().focus();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n else {\n save = e.selection;\n selectParent = e.selectParent;\n }\n var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' });\n var deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');\n var imgUpMsg = this.i10n.getConstant('imageUploadMessage');\n var span = this.parent.createElement('span', { className: 'e-droptext' });\n span.innerHTML = (Browser.isDevice) ? deviceImgUpMsg : imgUpMsg;\n var btnEle = this.parent.createElement('button', {\n className: 'e-browsebtn', id: this.rteID + '_insertImage',\n attrs: { autofocus: 'true', type: 'button' }\n });\n span.appendChild(btnEle);\n uploadParentEle.appendChild(span);\n var browserMsg = this.i10n.getConstant('browse');\n var button = new Button({ content: browserMsg, enableRtl: this.parent.enableRtl });\n button.createElement = this.parent.createElement;\n button.appendTo(btnEle);\n var btnClick = (Browser.isDevice) ? span : btnEle;\n EventHandler.add(btnClick, 'click', this.fileSelect, this);\n var uploadEle = this.parent.createElement('input', {\n id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n uploadParentEle.appendChild(uploadEle);\n var altText;\n this.uploadObj = new Uploader({\n asyncSettings: {\n saveUrl: this.parent.insertImageSettings.saveUrl,\n },\n dropArea: span,\n multiple: false,\n enableRtl: this.parent.enableRtl,\n allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),\n selected: function (e) {\n altText = e.filesData[0].name;\n if (_this.parent.editorMode === 'HTML' && isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var reader_1 = new FileReader();\n reader_1.addEventListener('load', function (e) {\n var url = URL.createObjectURL(proxy.url(reader_1.result));\n proxy.uploadUrl = {\n url: url, selection: save, altText: altText, selectParent: selectParent,\n width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n },\n height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n });\n reader_1.readAsDataURL(e.filesData[0].rawFile);\n }\n },\n success: function (e) {\n if (!isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var url = _this.parent.insertImageSettings.path + e.file.name;\n var value = { url: url, selection: save };\n proxy.uploadUrl = {\n url: url, selection: save, altText: altText, selectParent: selectParent,\n width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n },\n height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n }\n },\n removing: function () {\n proxy.inputUrl.removeAttribute('disabled');\n proxy.uploadUrl.url = '';\n }\n });\n this.uploadObj.createElement = this.parent.createElement;\n this.uploadObj.appendTo(uploadEle);\n return uploadParentEle;\n };\n Image.prototype.fileSelect = function () {\n document.body.getElementsByClassName('e-file-select-wrap')[0].querySelector('button').click();\n return false;\n };\n Image.prototype.imagePaste = function (args) {\n var proxy = this;\n var reader = new FileReader();\n reader.addEventListener('load', function (e) {\n var url = {\n cssClass: (proxy.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: URL.createObjectURL(proxy.url(reader.result)),\n width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n },\n height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.parent.formatter.process(proxy.parent, { item: { command: 'Images', subCommand: 'Image' } }, args.args, url);\n });\n reader.readAsDataURL(args.file);\n };\n Image.prototype.url = function (dataurl) {\n var arr = dataurl.split(',');\n var mime = arr[0].match(/:(.*?);/)[1];\n var bstr = atob(arr[1]);\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Image.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Image.prototype.getModuleName = function () {\n return 'image';\n };\n return Image;\n}());\nexport { Image };\n","import { removeClass, selectAll, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_EXPAND_OPEN, CLS_TB_ITEM, CLS_ACTIVE } from '../base/classes';\nimport * as CONSTANT from '../../common/constant';\nimport { RenderType } from '../base/enum';\nimport { KeyboardEvents } from '../actions/keyboard';\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar ViewSource = /** @class */ (function () {\n /**\n * Constructor for view source module\n */\n function ViewSource(parent, locator) {\n this.parent = parent;\n var serviceLocator = locator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n ViewSource.prototype.addEventListener = function () {\n this.parent.on(events.sourceCode, this.sourceCode, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.updateSource, this.updateSourceCode, this);\n };\n ViewSource.prototype.onInitialEnd = function () {\n this.parent.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ViewSource.prototype.removeEventListener = function () {\n this.unWireEvent();\n this.parent.off(events.sourceCode, this.sourceCode);\n this.parent.off(events.updateSource, this.updateSourceCode);\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.onKeyDown);\n };\n ViewSource.prototype.getSourceCode = function () {\n return this.parent.createElement('textarea', { className: 'e-rte-srctextarea' });\n };\n ViewSource.prototype.wireEvent = function (element) {\n this.keyboardModule = new KeyboardEvents(element, {\n keyAction: this.previewKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n EventHandler.add(this.previewElement, 'mousedown', this.mouseDownHandler, this);\n };\n ViewSource.prototype.unWireEvent = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n if (this.previewElement) {\n EventHandler.remove(this.previewElement, 'mousedown', this.mouseDownHandler);\n }\n };\n ViewSource.prototype.wireBaseKeyDown = function () {\n this.parent.keyboardModule = new KeyboardEvents(this.contentModule.getEditPanel(), {\n keyAction: this.parent.keyDown.bind(this.parent), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n };\n ViewSource.prototype.unWireBaseKeyDown = function () {\n this.parent.keyboardModule.destroy();\n };\n ViewSource.prototype.mouseDownHandler = function (e) {\n this.parent.notify(events.sourceCodeMouseDown, { args: e });\n };\n ViewSource.prototype.previewKeyDown = function (event) {\n switch (event.action) {\n case 'html-source':\n this.updateSourceCode(event);\n event.preventDefault();\n break;\n }\n };\n ViewSource.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'html-source':\n e.event.preventDefault();\n this.sourceCode(e);\n e.callBack({\n requestType: 'SourceCode',\n editorMode: 'HTML',\n event: e.event\n });\n break;\n }\n };\n ViewSource.prototype.sourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.parent.element);\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'SourceCode', updateItem: 'Preview',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (isNullOrUndefined(this.previewElement)) {\n this.previewElement = this.getSourceCode();\n }\n this.parent.updateValueData();\n if (this.parent.iframeSettings.enable) {\n var rteContent = void 0;\n if (isNullOrUndefined(this.parent.element.querySelector('#' + this.parent.element.id + '_source-view'))) {\n rteContent = this.parent.createElement('div', {\n className: 'e-source-content', id: this.parent.element.id + '_source-view'\n });\n }\n else {\n rteContent = this.parent.element.querySelector('#' + this.parent.element.id + '_source-view');\n }\n rteContent.appendChild(this.previewElement);\n this.parent.element.appendChild(rteContent);\n rteContent.style.height = this.contentModule.getPanel().style.height;\n rteContent.style.marginTop = this.contentModule.getPanel().style.marginTop;\n this.getPanel().value = this.parent.value;\n this.contentModule.getPanel().style.display = 'none';\n rteContent.style.display = 'block';\n }\n else {\n this.contentModule.getPanel().appendChild(this.previewElement);\n this.getPanel().value = (this.contentModule.getEditPanel().innerHTML === '


    ' ||\n this.contentModule.getEditPanel().innerHTML.length === 12) ||\n (this.contentModule.getEditPanel().childNodes.length === 1 &&\n this.contentModule.getEditPanel().childNodes[0].tagName === 'P' &&\n this.contentModule.getEditPanel().innerHTML.length === 8) ? null : this.parent.value;\n this.contentModule.getEditPanel().style.display = 'none';\n this.previewElement.style.display = 'block';\n }\n this.parent.isBlur = false;\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n this.parent.enableToolbarItem('SourceCode');\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n removeClass(tbItems, [CLS_ACTIVE]);\n this.parent.setContentHeight('sourceCode');\n this.wireEvent(this.previewElement);\n this.unWireBaseKeyDown();\n this.previewElement.focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder)) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder');\n placeHolderWrapper.style.display = 'none';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n this.parent.invokeChangeEvent();\n };\n ViewSource.prototype.updateSourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'Preview', targetItem: 'Preview', args: args });\n var editHTML = this.getPanel();\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'Preview', updateItem: 'SourceCode',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (this.parent.iframeSettings.enable) {\n editHTML.parentElement.style.display = 'none';\n this.contentModule.getPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = editHTML.value;\n }\n else {\n editHTML.style.display = 'none';\n this.contentModule.getEditPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = editHTML.value;\n }\n this.parent.isBlur = false;\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n this.parent.setContentHeight();\n this.unWireEvent();\n this.wireBaseKeyDown();\n this.contentModule.getEditPanel().focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && this.contentModule.getEditPanel().innerText.length === 0) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder');\n placeHolderWrapper.style.display = 'block';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Preview', targetItem: 'Preview', args: args });\n this.parent.formatter.enableUndo(this.parent);\n this.parent.invokeChangeEvent();\n };\n ViewSource.prototype.getPanel = function () {\n return this.parent.element.querySelector('.e-rte-srctextarea');\n };\n ViewSource.prototype.getViewPanel = function () {\n return (this.parent.iframeSettings.enable && this.getPanel()) ? this.getPanel().parentElement : this.getPanel();\n };\n /**\n * Destroy the entire RichTextEditor.\n * @return {void}\n */\n ViewSource.prototype.destroy = function () {\n this.removeEventListener();\n };\n return ViewSource;\n}());\nexport { ViewSource };\n","import { detach, closest, Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, EventHandler, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Dialog, Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport * as classes from '../base/classes';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Table` module is used to handle table actions.\n */\nvar Table = /** @class */ (function () {\n function Table(parent, serviceLocator) {\n this.pageX = null;\n this.pageY = null;\n this.moveEle = null;\n this.parent = parent;\n this.rteID = parent.element.id;\n this.l10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n Table.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.createTable, (Browser.isDevice || this.parent.inlineMode.enable) ? this.insertTableDialog : this.renderDlgContent, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n this.parent.on(events.docClick, this.docClick, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.tableToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.dropDownSelect, this.dropdownSelect, this);\n this.parent.on(events.keyDown, this.keyDown, this);\n };\n Table.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.createTable, (Browser.isDevice || this.parent.inlineMode.enable) ?\n this.insertTableDialog : this.renderDlgContent);\n this.parent.off(events.initialEnd, this.afterRender);\n this.parent.off(events.docClick, this.docClick);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.on(events.tableToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.dropDownSelect, this.dropdownSelect, this);\n this.parent.off(events.mouseDown, this.cellSelect);\n this.parent.off(events.tableColorPickerChanged, this.setBGColor);\n this.parent.off(events.keyDown, this.keyDown);\n };\n Table.prototype.afterRender = function () {\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.on(events.tableColorPickerChanged, this.setBGColor, this);\n if (this.parent.tableSettings.resize) {\n EventHandler.add(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart, this);\n }\n if (!Browser.isDevice && this.parent.tableSettings.resize) {\n EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);\n }\n };\n Table.prototype.dropdownSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Table') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var args = {\n args: e,\n selection: this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument()),\n selectParent: this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)\n };\n switch (item.subCommand) {\n case 'InsertRowBefore':\n case 'InsertRowAfter':\n this.addRow(args.selection, e);\n break;\n case 'InsertColumnLeft':\n case 'InsertColumnRight':\n this.addColumn(args.selection, e);\n break;\n case 'DeleteColumn':\n case 'DeleteRow':\n this.removeRowColumn(args.selection, e);\n break;\n case 'AlignTop':\n case 'AlignMiddle':\n case 'AlignBottom':\n this.verticalAlign(args, e);\n break;\n case 'Dashed':\n case 'Alternate':\n this.tableStyles(args, item.subCommand);\n break;\n }\n };\n Table.prototype.keyDown = function (e) {\n var event = e.args;\n var proxy = this;\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection) && this.contentModule) {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n var ele = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)[0];\n ele = (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') ? ele.parentElement : ele;\n if ((event.keyCode === 8 || event.keyCode === 46)) {\n if (ele && ele.tagName === 'TBODY') {\n event.preventDefault();\n proxy.removeTable(selection, event, true);\n }\n else if (ele && ele.querySelectorAll('table').length > 0) {\n this.removeResizeEle();\n }\n }\n ele = (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') ? closest(ele, 'td') : ele;\n if (ele && (ele.tagName === 'TD' || ele.tagName === 'TH')) {\n switch (event.keyCode) {\n case 9:\n case 37:\n case 39:\n proxy.tabSelection(event, selection, ele);\n break;\n case 40:\n case 38:\n proxy.tableArrowNavigation(event, selection, ele);\n break;\n }\n }\n }\n };\n Table.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'TableHeader':\n this.tableHeader(args.selection, args.args);\n break;\n case 'TableRemove':\n this.removeTable(args.selection, args.args);\n break;\n case 'TableEditProperties':\n this.editTable(args);\n break;\n }\n };\n Table.prototype.verticalAlign = function (args, e) {\n var tdEle = (args.selection.range.startContainer.nodeName === 'TD' ||\n args.selection.range.startContainer.nodeName === 'TH') ?\n args.selection.range.startContainer : args.selection.range.startContainer.parentElement;\n if (tdEle.nodeName !== 'TD' && tdEle.nodeName !== 'TH') {\n return;\n }\n this.parent.formatter.process(this.parent, e, e, { tableCell: tdEle, subCommand: e.item.subCommand });\n };\n Table.prototype.tableStyles = function (args, command) {\n var table = closest(args.selectParent[0], 'table');\n if (command === 'Dashed') {\n (this.parent.element.classList.contains(classes.CLS_TB_DASH_BOR)) ?\n this.parent.element.classList.remove(classes.CLS_TB_DASH_BOR) : this.parent.element.classList.add(classes.CLS_TB_DASH_BOR);\n (table.classList.contains(classes.CLS_TB_DASH_BOR)) ? table.classList.remove(classes.CLS_TB_DASH_BOR) :\n table.classList.add(classes.CLS_TB_DASH_BOR);\n }\n if (command === 'Alternate') {\n (this.parent.element.classList.contains(classes.CLS_TB_ALT_BOR)) ?\n this.parent.element.classList.remove(classes.CLS_TB_DASH_BOR) : this.parent.element.classList.add(classes.CLS_TB_ALT_BOR);\n (table.classList.contains(classes.CLS_TB_ALT_BOR)) ? table.classList.remove(classes.CLS_TB_ALT_BOR) :\n table.classList.add(classes.CLS_TB_ALT_BOR);\n }\n this.parent.formatter.saveData();\n };\n Table.prototype.tabSelection = function (event, selection, ele) {\n if ((event.keyCode === 37 || event.keyCode === 39) && selection.range.startContainer.nodeType === 3) {\n return;\n }\n event.preventDefault();\n ele.classList.remove(classes.CLS_TABLE_SEL);\n if (!event.shiftKey && event.keyCode !== 37) {\n var nextElement = (!isNullOrUndefined(ele.nextSibling)) ? ele.nextSibling :\n (!isNullOrUndefined(closest(ele, 'tr').nextSibling) ? closest(ele, 'tr').nextSibling.childNodes[0] :\n (!isNullOrUndefined(closest(ele, 'table').nextSibling)) ?\n (closest(ele, 'table').nextSibling.nodeName.toLowerCase() === 'td') ?\n closest(ele, 'table').nextSibling : ele : ele);\n if (event.keyCode === 39 && ele === nextElement) {\n nextElement = closest(ele, 'table').nextSibling;\n }\n if (nextElement) {\n (nextElement.textContent.trim() !== '' && closest(nextElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), nextElement) :\n selection.setSelectionText(this.contentModule.getDocument(), nextElement, nextElement, 0, 0);\n }\n if (ele === nextElement && event.keyCode !== 39 && nextElement) {\n this.addRow(selection, event, true);\n nextElement = nextElement.parentElement.nextSibling.firstChild;\n (nextElement.textContent.trim() !== '' && closest(nextElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), nextElement) :\n selection.setSelectionText(this.contentModule.getDocument(), nextElement, nextElement, 0, 0);\n }\n }\n else {\n var prevElement = (!isNullOrUndefined(ele.previousSibling)) ? ele.previousSibling :\n (!isNullOrUndefined(closest(ele, 'tr').previousSibling) ?\n closest(ele, 'tr').previousSibling.childNodes[closest(ele, 'tr').previousSibling.childNodes.length - 1] :\n (!isNullOrUndefined(closest(ele, 'table').previousSibling)) ?\n (closest(ele, 'table').previousSibling.nodeName.toLowerCase() === 'td') ? closest(ele, 'table').previousSibling :\n ele : ele);\n if (event.keyCode === 37 && ele === prevElement) {\n prevElement = closest(ele, 'table').previousSibling;\n }\n if (prevElement) {\n (prevElement.textContent.trim() !== '' && closest(prevElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), prevElement) :\n selection.setSelectionText(this.contentModule.getDocument(), prevElement, prevElement, 0, 0);\n }\n }\n };\n Table.prototype.tableArrowNavigation = function (event, selection, ele) {\n var selText = selection.range.startContainer;\n if ((event.keyCode === 40 && selText.nodeType === 3 && (selText.nextSibling && selText.nextSibling.nodeName === 'BR' ||\n selText.parentNode && selText.parentNode.nodeName !== 'TD')) ||\n (event.keyCode === 38 && selText.nodeType === 3 && (selText.previousSibling && selText.previousSibling.nodeName === 'BR' ||\n selText.parentNode && selText.parentNode.nodeName !== 'TD'))) {\n return;\n }\n event.preventDefault();\n ele.classList.remove(classes.CLS_TABLE_SEL);\n if (event.keyCode === 40) {\n ele = (!isNullOrUndefined(closest(ele, 'tr').nextSibling)) ?\n closest(ele, 'tr').nextSibling.children[ele.cellIndex] :\n (!isNullOrUndefined(closest(ele, 'table').nextSibling)) ? closest(ele, 'table').nextSibling :\n ele;\n }\n else {\n ele = (!isNullOrUndefined(closest(ele, 'tr').previousSibling)) ?\n closest(ele, 'tr').previousSibling.children[ele.cellIndex] :\n (!isNullOrUndefined(closest(ele, 'table').previousSibling)) ? closest(ele, 'table').previousSibling :\n ele;\n }\n if (ele) {\n selection.setSelectionText(this.contentModule.getDocument(), ele, ele, 0, 0);\n }\n };\n Table.prototype.setBGColor = function (args) {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n var selectedCell = selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? closest(selectedCell.parentNode, 'td,th') : closest(selectedCell, 'td, th');\n if (selectedCell && (selectedCell.nodeName === 'TD' || selectedCell.nodeName === 'TH')) {\n var items = closest(selectedCell, 'table').querySelectorAll('.' + classes.CLS_TABLE_SEL);\n for (var i = 0; i < items.length; i++) {\n items[i].style.backgroundColor = args.item.value;\n }\n this.parent.formatter.saveData();\n }\n };\n Table.prototype.hideTableQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.tableQTBar && document.body.contains(this.quickToolObj.tableQTBar.element)) {\n this.quickToolObj.tableQTBar.hidePopup();\n }\n };\n Table.prototype.tableHeader = function (selection, e) {\n this.parent.formatter.process(this.parent, e, e.originalEvent, { selection: selection, subCommand: e.item.subCommand });\n };\n Table.prototype.editAreaClickHandler = function (e) {\n var args = e.args;\n if (args.which === 2 || args.which === 3) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.tableQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.tableQTBar.element.classList.contains('e-rte-pop');\n if (isPopupOpen) {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n if (target && target.nodeName !== 'A' && target.nodeName !== 'IMG' && (target.nodeName === 'TD' || target.nodeName === 'TH' ||\n target.nodeName === 'TABLE' || closest(target, 'table')) && !(range.startContainer.nodeType === 3 && !range.collapsed)) {\n var range_1 = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.save(range_1, this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n this.quickToolObj.tableQTBar.showPopup(args.pageX, pageY, target);\n this.parent.formatter.editorManager.nodeSelection.restore();\n }\n else {\n this.hideTableQuickToolbar();\n }\n }\n };\n Table.prototype.tableCellSelect = function (e) {\n var target = e.target;\n var row = Array.prototype.slice.call(target.parentElement.parentElement.children).indexOf(target.parentElement);\n var col = Array.prototype.slice.call(target.parentElement.children).indexOf(target);\n var list = this.dlgDiv.querySelectorAll('.e-rte-tablecell');\n Array.prototype.forEach.call(list, function (item) {\n var parentIndex = Array.prototype.slice.call(item.parentElement.parentElement.children).indexOf(item.parentElement);\n var cellIndex = Array.prototype.slice.call(item.parentElement.children).indexOf(item);\n removeClass([item], 'e-active');\n if (parentIndex <= row && cellIndex <= col) {\n addClass([item], 'e-active');\n }\n });\n this.tblHeader.innerHTML = (col + 1) + 'x' + (row + 1);\n };\n Table.prototype.tableCellLeave = function (e) {\n removeClass(this.dlgDiv.querySelectorAll('.e-rte-tablecell'), 'e-active');\n addClass([this.dlgDiv.querySelector('.e-rte-tablecell')], 'e-active');\n this.tblHeader.innerHTML = 1 + 'x' + 1;\n };\n Table.prototype.tableCellClick = function (e) {\n var target = e.target;\n var row = Array.prototype.slice.call(target.parentElement.parentElement.children).indexOf(target.parentElement) + 1;\n var col = Array.prototype.slice.call(target.parentElement.children).indexOf(target) + 1;\n this.self.tableInsert(row, col, e, this);\n };\n Table.prototype.tableInsert = function (row, col, e, selectionObj) {\n var proxy = (selectionObj.self) ? selectionObj.self : this;\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(selectionObj.selection.range.startContainer.parentNode, '#' + proxy.contentModule.getPanel().id))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n selectionObj.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n }\n var value = {\n row: row, columns: col, width: {\n minWidth: proxy.parent.tableSettings.minWidth,\n maxWidth: proxy.parent.tableSettings.maxWidth,\n width: proxy.parent.tableSettings.width,\n },\n selection: selectionObj.selection\n };\n if (proxy.popupObj) {\n proxy.popupObj.hide();\n }\n if (proxy.editdlgObj) {\n proxy.editdlgObj.hide();\n }\n proxy.parent.formatter.process(proxy.parent, selectionObj.args, selectionObj.args.originalEvent, value);\n proxy.contentModule.getEditPanel().focus();\n proxy.parent.on(events.mouseDown, proxy.cellSelect, proxy);\n };\n Table.prototype.cellSelect = function (e) {\n var target = e.args.target;\n target = (target.nodeName !== 'TD') ? closest(target, 'td,th') : target;\n removeClass(this.contentModule.getEditPanel().querySelectorAll('table td, table th'), classes.CLS_TABLE_SEL);\n if (target && (target.tagName === 'TD' || target.tagName === 'TH')) {\n target.removeAttribute('class');\n addClass([target], classes.CLS_TABLE_SEL);\n this.curTable = (this.curTable) ? this.curTable : closest(target, 'table');\n this.removeResizeEle();\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n }\n }\n };\n Table.prototype.resizeHelper = function (e) {\n var target = e.target || e.targetTouches[0].target;\n if (target.nodeName === 'TABLE' || target.nodeName === 'TD' || target.nodeName === 'TH') {\n this.curTable = (target.nodeName === 'TD' || target.nodeName === 'TH') ?\n closest(target, 'table') : target;\n this.removeResizeEle();\n this.tableResizeEleCreation(this.curTable, e);\n }\n };\n Table.prototype.tableResizeEleCreation = function (table, e) {\n this.parent.preventDefaultResize(e);\n var columns = Array.prototype.slice.call(table.rows[0].cells, 1);\n var rows = [];\n for (var i = 0; i < table.rows.length; i++) {\n rows.push(Array.prototype.slice.call(table.rows[i].cells, 0, 1)[0]);\n }\n var height = parseInt(getComputedStyle(table).height, 10);\n var width = parseInt(getComputedStyle(table).width, 10);\n var pos = this.calcPos(table);\n for (var i = 0; columns.length > i; i++) {\n var colReEle = this.parent.createElement('span', {\n className: classes.CLS_TB_COL_RES, attrs: {\n 'data-col': (i + 1).toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n colReEle.style.cssText = 'height: ' + height + 'px; width: 4px; top: ' + pos.top +\n 'px; left:' + (pos.left + this.calcPos(columns[i]).left) + 'px;';\n this.contentModule.getEditPanel().appendChild(colReEle);\n }\n for (var i = 0; rows.length > i; i++) {\n var rowReEle = this.parent.createElement('span', {\n className: classes.CLS_TB_ROW_RES, attrs: {\n 'data-row': (i).toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n rowReEle.style.cssText = 'width: ' + width + 'px; height: 4px; top: ' +\n (this.calcPos(rows[i]).top + pos.top + rows[i].offsetHeight - 2) +\n 'px; left:' + (this.calcPos(rows[i]).left + pos.left) + 'px;';\n this.contentModule.getEditPanel().appendChild(rowReEle);\n }\n var tableReBox = this.parent.createElement('span', {\n className: classes.CLS_TB_BOX_RES, attrs: {\n 'data-col': columns.length.toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n tableReBox.style.cssText = 'top: ' + (pos.top + height - 4) +\n 'px; left:' + (pos.left + width - 4) + 'px;';\n if (Browser.isDevice) {\n tableReBox.classList.add('e-rmob');\n }\n this.contentModule.getEditPanel().appendChild(tableReBox);\n };\n Table.prototype.removeResizeEle = function () {\n var item = this.contentModule.getEditPanel().querySelectorAll('.e-column-resize, .e-row-resize, .e-table-box');\n if (item.length > 0) {\n for (var i = 0; i < item.length; i++) {\n detach(item[i]);\n }\n }\n };\n Table.prototype.calcPos = function (elem) {\n var parentOffset = {\n top: 0,\n left: 0\n };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = elem.offsetParent || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent.nodeName === 'TD' && elem.nodeName === 'TABLE') {\n offsetParent = closest(offsetParent, '.e-control');\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Table.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Table.prototype.getPointY = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageY;\n }\n else {\n return e.pageY;\n }\n };\n Table.prototype.resizeStart = function (e) {\n if (Browser.isDevice) {\n this.resizeHelper(e);\n }\n var target = e.target;\n if (target.classList.contains(classes.CLS_TB_COL_RES) ||\n target.classList.contains(classes.CLS_TB_ROW_RES) ||\n target.classList.contains(classes.CLS_TB_BOX_RES)) {\n e.preventDefault();\n this.parent.preventDefaultResize(e);\n removeClass(this.curTable.querySelectorAll('td,th'), classes.CLS_TABLE_SEL);\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.pageX = this.getPointX(e);\n this.pageY = this.getPointY(e);\n this.resizeBtnInit();\n this.hideTableQuickToolbar();\n if (target.classList.contains(classes.CLS_TB_COL_RES)) {\n this.resizeBtnStat.column = true;\n this.columnEle = this.curTable.rows[0].cells[parseInt(target.getAttribute('data-col'), 10)];\n this.colIndex = this.columnEle.cellIndex;\n this.moveEle = e.target;\n this.appendHelper();\n }\n if (target.classList.contains(classes.CLS_TB_ROW_RES)) {\n this.rowEle = this.curTable.rows[parseInt(target.getAttribute('data-row'), 10)];\n this.resizeBtnStat.row = true;\n this.appendHelper();\n }\n if (target.classList.contains(classes.CLS_TB_BOX_RES)) {\n this.resizeBtnStat.tableBox = true;\n }\n if (Browser.isDevice && this.helper && !this.helper.classList.contains('e-reicon')) {\n this.helper.classList.add('e-reicon');\n EventHandler.add(document, Browser.touchStartEvent, this.removeHelper, this);\n EventHandler.add(this.helper, Browser.touchStartEvent, this.resizeStart, this);\n }\n else {\n var args = { event: e, requestType: 'Table' };\n this.parent.trigger(events.resizeStart, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n }\n EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);\n EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);\n }\n };\n Table.prototype.removeHelper = function (e) {\n var cls = e.target.classList;\n if (!(cls.contains('e-reicon')) && this.helper) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n }\n this.pageX = null;\n this.helper = null;\n }\n };\n Table.prototype.appendHelper = function () {\n this.helper = this.parent.createElement('div', {\n className: 'e-table-rhelper'\n });\n if (Browser.isDevice) {\n this.helper.classList.add('e-reicon');\n }\n this.contentModule.getEditPanel().appendChild(this.helper);\n this.setHelperHeight();\n };\n Table.prototype.setHelperHeight = function () {\n var pos = this.calcPos(this.curTable);\n if (this.resizeBtnStat.column) {\n this.helper.classList.add('e-column-helper');\n this.helper.style.cssText = 'height: ' + getComputedStyle(this.curTable).height + '; top: ' +\n pos.top + 'px; left:' + (pos.left + this.calcPos(this.columnEle).left - 1) + 'px;';\n }\n else {\n this.helper.classList.add('e-row-helper');\n this.helper.style.cssText = 'width: ' + getComputedStyle(this.curTable).width + '; top: ' +\n (this.calcPos(this.rowEle).top + pos.top + this.rowEle.offsetHeight) +\n 'px; left:' + (this.calcPos(this.rowEle).left + pos.left) + 'px;';\n }\n };\n Table.prototype.updateHelper = function () {\n var pos = this.calcPos(this.curTable);\n if (this.resizeBtnStat.column) {\n var left = pos.left + this.calcPos(this.columnEle).left - 1;\n this.helper.style.left = left + 'px';\n }\n else {\n var top_1 = this.calcPos(this.rowEle).top + pos.top + this.rowEle.offsetHeight;\n this.helper.style.top = top_1 + 'px';\n }\n };\n Table.prototype.resizing = function (e) {\n var pageX = this.getPointX(e);\n var pageY = this.getPointY(e);\n var mouseX = (this.parent.enableRtl) ? -(pageX - this.pageX) : (pageX - this.pageX);\n var mouseY = (this.parent.enableRtl) ? -(pageY - this.pageY) : (pageY - this.pageY);\n this.pageX = pageX;\n this.pageY = pageY;\n var args = { event: e, requestType: 'table' };\n this.parent.trigger(events.onResize, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n var tableReBox = this.contentModule.getEditPanel().querySelector('.e-table-box');\n var tableWidth = parseInt(getComputedStyle(this.curTable).width, 10);\n var tableHeight = parseInt(getComputedStyle(this.curTable).height, 10);\n if (this.resizeBtnStat.column) {\n var cellColl = this.curTable.rows[0].cells;\n var width = parseFloat(getComputedStyle(this.columnEle).width);\n var actualwid = width - mouseX;\n var totalwid = parseFloat(getComputedStyle(this.columnEle).width) +\n parseFloat(getComputedStyle(cellColl[this.colIndex - 1]).width);\n for (var i = 0; i < this.curTable.rows.length; i++) {\n if ((totalwid - actualwid) > 20 && actualwid > 20) {\n this.curTable.rows[i].cells[this.colIndex - 1].style.width = totalwid - actualwid + 'px';\n this.curTable.rows[i].cells[this.colIndex].style.width = actualwid + 'px';\n }\n }\n this.updateHelper();\n }\n else if (this.resizeBtnStat.row) {\n this.parent.preventDefaultResize(e);\n var height = parseFloat(getComputedStyle(this.rowEle).height) + mouseY;\n if (height > 20) {\n this.rowEle.style.height = height + 'px';\n }\n this.curTable.style.height = '';\n tableReBox.style.cssText = 'top: ' + (this.calcPos(this.curTable).top + tableHeight - 4) +\n 'px; left:' + (this.calcPos(this.curTable).left + tableWidth - 4) + 'px;';\n this.updateHelper();\n }\n else if (this.resizeBtnStat.tableBox) {\n if (!Browser.isDevice) {\n EventHandler.remove(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper);\n }\n this.curTable.style.width = tableWidth + mouseX + 'px';\n this.curTable.style.height = tableHeight + mouseY + 'px';\n tableReBox.classList.add('e-rbox-select');\n tableReBox.style.cssText = 'top: ' + (this.calcPos(this.curTable).top + tableHeight - 4) +\n 'px; left:' + (this.calcPos(this.curTable).left + tableWidth - 4) + 'px;';\n }\n };\n Table.prototype.cancelResizeAction = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n this.removeResizeEle();\n };\n Table.prototype.resizeEnd = function (e) {\n this.resizeBtnInit();\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n if (this.contentModule.getEditPanel().querySelector('.e-table-box') &&\n this.contentModule.getEditPanel().contains(this.contentModule.getEditPanel().querySelector('.e-table-box'))) {\n if (!Browser.isDevice) {\n EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);\n }\n this.removeResizeEle();\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n this.helper = null;\n }\n this.pageX = null;\n this.pageY = null;\n this.moveEle = null;\n }\n var args = { event: e, requestType: 'table' };\n this.parent.trigger(events.resizeStop, args);\n this.parent.formatter.saveData();\n };\n Table.prototype.resizeBtnInit = function () {\n return this.resizeBtnStat = { column: false, row: false, tableBox: false };\n };\n Table.prototype.addRow = function (selectCell, e, tabkey) {\n var cmd;\n if (tabkey) {\n cmd = {\n item: { command: 'Table', subCommand: 'InsertRowAfter' }\n };\n }\n var value = {\n selection: selectCell,\n subCommand: (tabkey) ? cmd.item.subCommand : e.item.subCommand\n };\n this.parent.formatter.process(this.parent, (tabkey) ? cmd : e, e, value);\n };\n Table.prototype.addColumn = function (selectCell, e) {\n this.parent.formatter.process(this.parent, e, e, { selection: selectCell, width: this.parent.tableSettings.width, subCommand: e.item.subCommand });\n };\n Table.prototype.removeRowColumn = function (selectCell, e) {\n this.parent.formatter.process(this.parent, e, e, { selection: selectCell, subCommand: e.item.subCommand });\n this.hideTableQuickToolbar();\n };\n Table.prototype.removeTable = function (selection, args, delKey) {\n var cmd;\n if (delKey) {\n cmd = { item: { command: 'Table', subCommand: 'TableRemove' } };\n }\n var value = {\n selection: selection,\n subCommand: (delKey) ? cmd.item.subCommand : args.item.subCommand\n };\n this.parent.formatter.process(this.parent, (delKey) ? cmd : args, args.originalEvent, value);\n this.contentModule.getEditPanel().focus();\n this.removeResizeEle();\n this.hideTableQuickToolbar();\n };\n Table.prototype.renderDlgContent = function (args) {\n var _this = this;\n if (this.popupObj) {\n this.popupObj.hide();\n return;\n }\n this.hideTableQuickToolbar();\n var header = this.l10n.getConstant('tblhead');\n var insertbtn = this.l10n.getConstant('inserttablebtn');\n this.dlgDiv = this.parent.createElement('div', { className: 'e-rte-table-popup', id: this.rteID + '_table' });\n this.tblHeader = this.parent.createElement('div', { className: 'e-rte-popup-header' });\n this.tblHeader.innerHTML = header;\n this.dlgDiv.appendChild(this.tblHeader);\n var tableDiv = this.parent.createElement('div', { className: 'e-rte-table-span' });\n this.drawTable(tableDiv, args);\n this.dlgDiv.appendChild(tableDiv);\n this.dlgDiv.appendChild(this.parent.createElement('span', { className: 'e-span-border' }));\n var btnEle = this.parent.createElement('button', {\n className: 'e-insert-table-btn', id: this.rteID + '_inserTable',\n attrs: { type: 'button' }\n });\n this.dlgDiv.appendChild(btnEle);\n var button = new Button({\n iconCss: 'e-icons e-create-table', content: insertbtn, cssClass: 'e-flat',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n button.appendTo(btnEle);\n EventHandler.add(btnEle, 'click', this.insertTableDialog, { self: this, args: args.args, selection: args.selection });\n this.parent.getToolbar().appendChild(this.dlgDiv);\n var target = args.args.originalEvent.target;\n target = target.classList.contains('e-toolbar-item') ? target.firstChild : target.parentElement;\n this.popupObj = new Popup(this.dlgDiv, {\n targetType: 'relative',\n relateTo: target,\n collision: { X: 'fit', Y: 'none' },\n offsetY: 8,\n viewPortElement: this.parent.element,\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl,\n zIndex: 10001,\n close: function (event) {\n _this.parent.isBlur = false;\n _this.popupObj.destroy();\n detach(_this.popupObj.element);\n _this.popupObj = null;\n }\n });\n addClass([this.popupObj.element], 'e-popup-open');\n this.popupObj.refreshPosition(target);\n };\n Table.prototype.docClick = function (e) {\n var target = e.args.target;\n if (target && target.classList && ((this.popupObj && !closest(target, '#' + this.popupObj.element.id) ||\n (this.editdlgObj && !closest(target, '#' + this.editdlgObj.element.id)))) && !target.classList.contains('e-create-table') &&\n target.offsetParent && !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown')) {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n if (this.editdlgObj) {\n this.editdlgObj.hide();\n }\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n if (target && target.tagName !== 'TD' && target.tagName !== 'TH' && !closest(target, 'td') &&\n closest(target, '.e-rte-quick-popup') === null && target.offsetParent &&\n !target.offsetParent.classList.contains('e-quick-dropdown') &&\n !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown') && !closest(target, '.e-rte-dropdown-popup')) {\n removeClass(this.parent.element.querySelectorAll('table td'), classes.CLS_TABLE_SEL);\n this.hideTableQuickToolbar();\n }\n if (target && target.classList && !target.classList.contains(classes.CLS_TB_COL_RES) &&\n !target.classList.contains(classes.CLS_TB_ROW_RES) && !target.classList.contains(classes.CLS_TB_BOX_RES)) {\n this.removeResizeEle();\n }\n };\n Table.prototype.drawTable = function (tableDiv, args) {\n var rowDiv;\n var tableCell;\n for (var row = 0; row < 3; row++) {\n rowDiv = this.parent.createElement('div', { className: 'e-rte-table-row', attrs: { 'data-column': '' + row } });\n for (var col = 0; col < 10; col++) {\n var display = (row > 2) ? 'none' : 'inline-block';\n tableCell = this.parent.createElement('div', { className: 'e-rte-tablecell e-default', attrs: { 'data-cell': '' + col } });\n rowDiv.appendChild(tableCell);\n tableCell.style.display = display;\n if (col === 0 && row === 0) {\n addClass([tableCell], 'e-active');\n }\n EventHandler.add(tableCell, 'mousemove', this.tableCellSelect, this);\n EventHandler.add(rowDiv, 'mouseleave', this.tableCellLeave, this);\n EventHandler.add(tableCell, 'mouseup', this.tableCellClick, { self: this, args: args.args, selection: args.selection });\n }\n tableDiv.appendChild(rowDiv);\n }\n };\n Table.prototype.editTable = function (args) {\n var _this = this;\n this.createDialog(args);\n var editContent = this.tableDlgContent(args);\n var update = this.l10n.getConstant('dialogUpdate');\n var cancel = this.l10n.getConstant('dialogCancel');\n var editHeader = this.l10n.getConstant('tableEditHeader');\n this.editdlgObj.setProperties({\n height: 'initial', width: '290px', content: editContent, header: editHeader,\n buttons: [{\n click: this.applyProperties.bind(this, args),\n buttonModel: { content: update, cssClass: 'e-flat e-size-update', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }]\n });\n this.editdlgObj.element.style.maxHeight = 'none';\n this.editdlgObj.content.querySelector('input').focus();\n };\n Table.prototype.insertTableDialog = function (args) {\n var proxy = (this.self) ? this.self : this;\n if (proxy.popupObj) {\n proxy.popupObj.hide();\n }\n proxy.createDialog(args);\n var dlgContent = proxy.tableCellDlgContent();\n var insert = proxy.l10n.getConstant('dialogInsert');\n var cancel = proxy.l10n.getConstant('dialogCancel');\n proxy.editdlgObj.setProperties({\n height: 'initial', width: '290px', content: dlgContent,\n buttons: [{\n click: proxy.customTable.bind(this, args),\n buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }\n },\n {\n click: function (e) { proxy.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }]\n });\n proxy.editdlgObj.element.style.maxHeight = 'none';\n proxy.editdlgObj.content.querySelector('input').focus();\n };\n Table.prototype.tableCellDlgContent = function () {\n var tableColumn = this.l10n.getConstant('columns');\n var tableRow = this.l10n.getConstant('rows');\n var tableWrap = this.parent.createElement('div', { className: 'e-cell-wrap' });\n var content = '
    '\n + '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n tableWrap.appendChild(contentElem);\n this.columnTextBox = new NumericTextBox({\n format: 'n0',\n min: 1,\n value: 3,\n placeholder: tableColumn,\n floatLabelType: 'Auto',\n max: 50,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n this.columnTextBox.appendTo(tableWrap.querySelector('#tableColumn'));\n this.rowTextBox = new NumericTextBox({\n format: 'n0',\n min: 1,\n value: 3,\n placeholder: tableRow,\n floatLabelType: 'Auto',\n max: 50,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n this.rowTextBox.appendTo(tableWrap.querySelector('#tableRow'));\n return tableWrap;\n };\n Table.prototype.createDialog = function (args) {\n var _this = this;\n if (this.editdlgObj) {\n this.editdlgObj.hide({ returnValue: true });\n return;\n }\n var tableDialog = this.parent.createElement('div', { className: 'e-rte-edit-table', id: this.rteID + '_image' });\n this.parent.element.appendChild(tableDialog);\n var insert = this.l10n.getConstant('dialogInsert');\n var cancel = this.l10n.getConstant('dialogCancel');\n var header = this.l10n.getConstant('tabledialogHeader');\n this.editdlgObj = new Dialog({\n header: header,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'initial',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n _this.editdlgObj.destroy();\n detach(_this.editdlgObj.element);\n _this.editdlgObj = null;\n },\n });\n this.editdlgObj.appendTo(tableDialog);\n if (this.quickToolObj && this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n };\n Table.prototype.customTable = function (args, e) {\n var proxy = (this.self) ? this.self : this;\n var argument = ((Browser.isDevice || proxy.parent.inlineMode.enable) ? args : this);\n proxy.tableInsert(proxy.rowTextBox.value, proxy.columnTextBox.value, e, argument);\n };\n Table.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.editdlgObj.hide({ returnValue: true });\n };\n Table.prototype.applyProperties = function (args, e) {\n var dialogEle = this.editdlgObj.element;\n var table = closest(args.selectNode[0], 'table');\n table.style.width = dialogEle.querySelector('.e-table-width').value + 'px';\n table.cellPadding = dialogEle.querySelector('.e-cell-padding').value;\n table.cellSpacing = dialogEle.querySelector('.e-cell-spacing').value;\n this.parent.formatter.saveData();\n this.editdlgObj.hide({ returnValue: true });\n };\n Table.prototype.tableDlgContent = function (e) {\n var selectNode = e.selectParent[0];\n var tableWidth = this.l10n.getConstant('tableWidth');\n var cellPadding = this.l10n.getConstant('cellpadding');\n var cellSpacing = this.l10n.getConstant('cellspacing');\n var tableWrap = this.parent.createElement('div', { className: 'e-table-sizewrap' });\n var widthVal = closest(selectNode, 'table').getClientRects()[0].width;\n var content = '
    ' + '
    '\n + '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n tableWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: widthVal,\n placeholder: tableWidth,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n widthNum.appendTo(tableWrap.querySelector('#tableWidth'));\n var padding = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: 0,\n placeholder: cellPadding,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n padding.appendTo(tableWrap.querySelector('#cellPadding'));\n var spacing = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: 0,\n placeholder: cellSpacing,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n spacing.appendTo(tableWrap.querySelector('#cellSpacing'));\n return tableWrap;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Table.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Table.prototype.getModuleName = function () {\n return 'table';\n };\n return Table;\n}());\nexport { Table };\n","/** @hidden */\nexport var executeGroup = {\n 'bold': {\n command: 'style',\n subCommand: 'bold',\n value: 'strong'\n },\n 'italic': {\n command: 'style',\n subCommand: 'italic',\n value: 'em'\n },\n 'underline': {\n command: 'style',\n subCommand: 'underline',\n value: 'span'\n },\n 'strikeThrough': {\n command: 'style',\n subCommand: 'strikeThrough',\n value: 'span'\n },\n 'superscript': {\n command: 'effects',\n subCommand: 'superscript',\n value: 'sup'\n },\n 'subscript': {\n command: 'effects',\n subCommand: 'subscript',\n value: 'sub'\n },\n 'uppercase': {\n command: 'casing',\n subCommand: 'uppercase'\n },\n 'lowercase': {\n command: 'casing',\n subCommand: 'lowercase'\n },\n 'fontColor': {\n command: 'font',\n subCommand: 'fontcolor',\n value: '#ff0000'\n },\n 'fontName': {\n command: 'font',\n subCommand: 'fontname',\n value: 'Segoe UI'\n },\n 'fontSize': {\n command: 'font',\n subCommand: 'fontsize',\n value: '10pt'\n },\n 'backColor': {\n command: 'font',\n subCommand: 'backgroundcolor',\n value: '#ffff00'\n },\n 'justifyCenter': {\n command: 'Alignments',\n subCommand: 'JustifyCenter'\n },\n 'justifyFull': {\n command: 'Alignments',\n subCommand: 'JustifyFull'\n },\n 'justifyLeft': {\n command: 'Alignments',\n subCommand: 'JustifyLeft'\n },\n 'justifyRight': {\n command: 'Alignments',\n subCommand: 'JustifyRight'\n },\n 'undo': {\n command: 'Actions',\n subCommand: 'Undo'\n },\n 'redo': {\n command: 'Actions',\n subCommand: 'Redo'\n },\n 'createLink': {\n command: 'Links',\n subCommand: 'Links'\n },\n 'createImage': {\n command: 'Images',\n subCommand: 'Images'\n },\n 'formatBlock': {\n command: 'Formats',\n value: 'P'\n },\n 'heading': {\n command: 'Formats',\n value: 'H1'\n },\n 'indent': {\n command: 'Indents',\n subCommand: 'Indent'\n },\n 'outdent': {\n command: 'Indents',\n subCommand: 'Outdent'\n },\n 'insertHTML': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertText': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertHorizontalRule': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '
    '\n },\n 'insertImage': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertBrOnReturn': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '
    '\n },\n 'insertOrderedList': {\n command: 'Formats',\n value: 'OL'\n },\n 'insertUnorderedList': {\n command: 'Formats',\n value: 'UL'\n },\n 'insertParagraph': {\n command: 'Formats',\n value: 'P'\n },\n 'removeFormat': {\n command: 'Clear',\n subCommand: 'ClearFormat'\n }\n};\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nimport { ToolbarType } from '../base/enum';\nimport { TableStyleItems } from '../models/items';\nexport var predefinedItems = ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments',\n 'OrderedList', 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo'];\nexport var fontFamily = [\n { text: 'Segoe UI', value: 'Segoe UI', class: 'e-segoe-ui' },\n { text: 'Arial', value: 'Arial,Helvetica,sans-serif', class: 'e-arial' },\n { text: 'Georgia', value: 'Georgia,serif', class: 'e-georgia' },\n { text: 'Impact', value: 'Impact,Charcoal,sans-serif', class: 'e-impact' },\n { text: 'Tahoma', value: 'Tahoma,Geneva,sans-serif', class: 'e-tahoma' },\n { text: 'Times New Roman', value: 'Times New Roman,Times,serif', class: 'e-times-new-roman' },\n { text: 'Verdana', value: 'Verdana,Geneva,sans-serif', class: 'e-verdana' }\n];\nexport var fontSize = [\n { text: '8 pt', value: '8pt' },\n { text: '10 pt', value: '10pt' },\n { text: '12 pt', value: '12pt' },\n { text: '14 pt', value: '14pt' },\n { text: '18 pt', value: '18pt' },\n { text: '24 pt', value: '24pt' },\n { text: '36 pt', value: '36pt' }\n];\nexport var formatItems = [\n { text: 'Paragraph', value: 'P', class: 'e-paragraph' },\n { text: 'Code', value: 'Pre', class: 'e-code' },\n { text: 'Quotation', value: 'BlockQuote', class: 'e-quote' },\n { text: 'Heading 1', value: 'H1', class: 'e-h1' },\n { text: 'Heading 2', value: 'H2', class: 'e-h2' },\n { text: 'Heading 3', value: 'H3', class: 'e-h3' },\n { text: 'Heading 4', value: 'H4', class: 'e-h4' }\n];\nexport var fontColor = {\n 'Custom': [\n '', '#000000', '#e7e6e6', '#44546a', '#4472c4', '#ed7d31', '#a5a5a5', '#ffc000', '#70ad47', '#ff0000',\n '#f2f2f2', '#808080', '#cfcdcd', '#d5dce4', '#d9e2f3', '#fbe4d5', '#ededed', '#fff2cc', '#e2efd9', '#ffcccc',\n '#d9d9d9', '#595959', '#aeaaaa', '#acb9ca', '#b4c6e7', '#f7caac', '#dbdbdb', '#ffe599', '#c5e0b3', '#ff8080',\n '#bfbfbf', '#404040', '#747070', '#8496b0', '#8eaadb', '#f4b083', '#c9c9c9', '#ffd966', '#a8d08d', '#ff3333',\n '#a6a6a6', '#262626', '#3b3838', '#323e4f', '#2f5496', '#c45911', '#7b7b7b', '#bf8f00', '#538135', '#b30000',\n '#7f7f7f', '#0d0d0d', '#161616', '#212934', '#1f3763', '#823b0b', '#525252', '#7f5f00', '#375623', '#660000'\n ]\n};\nexport var backgroundColor = {\n 'Custom': [\n '', '#000000', '#ffff00', '#00ff00', '#00ffff', '#0000ff', '#ff0000', '#000080', '#800080', '#996633',\n '#f2f2f2', '#808080', '#ffffcc', '#b3ffb3', '#ccffff', '#ccccff', '#ffcccc', '#ccccff', '#ff80ff', '#f2e6d9',\n '#d9d9d9', '#595959', '#ffff80', '#80ff80', '#b3ffff', '#8080ff', '#ff8080', '#8080ff', '#ff00ff', '#dfbf9f',\n '#bfbfbf', '#404040', '#ffff33', '#33ff33', '#33ffff', '#3333ff', '#ff3333', '#0000b3', '#b300b3', '#c68c53',\n '#a6a6a6', '#262626', '#e6e600', '#00b300', '#009999', '#000099', '#b30000', '#000066', '#660066', '#86592d',\n '#7f7f7f', '#0d0d0d', '#999900', '#006600', '#006666', '#000066', '#660000', '#00004d', '#4d004d', '#734d26',\n ]\n};\n/**\n * Configures the toolbar settings of the RTE.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enableFloating\", void 0);\n __decorate([\n Property(ToolbarType.Expand)\n ], ToolbarSettings.prototype, \"type\", void 0);\n __decorate([\n Property(predefinedItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\n/**\n * Configures the image settings of the RTE.\n */\nvar ImageSettings = /** @class */ (function (_super) {\n __extends(ImageSettings, _super);\n function ImageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(['.jpeg', '.jpg', '.png'])\n ], ImageSettings.prototype, \"allowedTypes\", void 0);\n __decorate([\n Property('inline')\n ], ImageSettings.prototype, \"display\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"path\", void 0);\n __decorate([\n Property(true)\n ], ImageSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(0)\n ], ImageSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property(0)\n ], ImageSettings.prototype, \"minHeight\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"maxHeight\", void 0);\n __decorate([\n Property(false)\n ], ImageSettings.prototype, \"resizeByPercent\", void 0);\n return ImageSettings;\n}(ChildProperty));\nexport { ImageSettings };\nvar TableSettings = /** @class */ (function (_super) {\n __extends(TableSettings, _super);\n function TableSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('100%')\n ], TableSettings.prototype, \"width\", void 0);\n __decorate([\n Property(TableStyleItems)\n ], TableSettings.prototype, \"styles\", void 0);\n __decorate([\n Property(true)\n ], TableSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(0)\n ], TableSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], TableSettings.prototype, \"maxWidth\", void 0);\n return TableSettings;\n}(ChildProperty));\nexport { TableSettings };\n/**\n * Configures the quick toolbar settings of the RTE.\n */\nvar QuickToolbarSettings = /** @class */ (function (_super) {\n __extends(QuickToolbarSettings, _super);\n function QuickToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], QuickToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('hide')\n ], QuickToolbarSettings.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(['Open', 'Edit', 'UnLink'])\n ], QuickToolbarSettings.prototype, \"link\", void 0);\n __decorate([\n Property(['Replace', 'Align', 'Caption', 'Remove', '-', 'InsertLink', 'OpenImageLink', 'EditImageLink', 'RemoveImageLink', 'Display', 'AltText', 'Dimension'])\n ], QuickToolbarSettings.prototype, \"image\", void 0);\n __decorate([\n Property(['Cut', 'Copy', 'Paste'])\n ], QuickToolbarSettings.prototype, \"text\", void 0);\n __decorate([\n Property(['TableHeader', 'TableRows', 'TableColumns', 'BackgroundColor', '-', 'TableRemove', 'Alignments', 'TableCellVerticalAlign', 'Styles'])\n ], QuickToolbarSettings.prototype, \"table\", void 0);\n return QuickToolbarSettings;\n}(ChildProperty));\nexport { QuickToolbarSettings };\n/**\n * Configures the font family settings of the RTE.\n */\nvar FontFamily = /** @class */ (function (_super) {\n __extends(FontFamily, _super);\n function FontFamily() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Segoe UI')\n ], FontFamily.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], FontFamily.prototype, \"width\", void 0);\n __decorate([\n Property(fontFamily)\n ], FontFamily.prototype, \"items\", void 0);\n return FontFamily;\n}(ChildProperty));\nexport { FontFamily };\n/**\n * Configures the font size settings of the RTE.\n */\nvar FontSize = /** @class */ (function (_super) {\n __extends(FontSize, _super);\n function FontSize() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('10 pt')\n ], FontSize.prototype, \"default\", void 0);\n __decorate([\n Property('35px')\n ], FontSize.prototype, \"width\", void 0);\n __decorate([\n Property(fontSize)\n ], FontSize.prototype, \"items\", void 0);\n return FontSize;\n}(ChildProperty));\nexport { FontSize };\n/**\n * Configures the format settings of the RTE.\n */\nvar Format = /** @class */ (function (_super) {\n __extends(Format, _super);\n function Format() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Paragraph')\n ], Format.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], Format.prototype, \"width\", void 0);\n __decorate([\n Property(formatItems)\n ], Format.prototype, \"types\", void 0);\n return Format;\n}(ChildProperty));\nexport { Format };\n/**\n * Configures the font Color settings of the RTE.\n */\nvar FontColor = /** @class */ (function (_super) {\n __extends(FontColor, _super);\n function FontColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ff0000')\n ], FontColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], FontColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], FontColor.prototype, \"columns\", void 0);\n __decorate([\n Property(fontColor)\n ], FontColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], FontColor.prototype, \"modeSwitcher\", void 0);\n return FontColor;\n}(ChildProperty));\nexport { FontColor };\n/**\n * Configures the background Color settings of the RTE.\n */\nvar BackgroundColor = /** @class */ (function (_super) {\n __extends(BackgroundColor, _super);\n function BackgroundColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ffff00')\n ], BackgroundColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], BackgroundColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], BackgroundColor.prototype, \"columns\", void 0);\n __decorate([\n Property(backgroundColor)\n ], BackgroundColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], BackgroundColor.prototype, \"modeSwitcher\", void 0);\n return BackgroundColor;\n}(ChildProperty));\nexport { BackgroundColor };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Objects used for configuring the iframe resources properties.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], Resources.prototype, \"styles\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"scripts\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n/**\n * Configures the iframe settings of the RTE.\n */\nvar IFrameSettings = /** @class */ (function (_super) {\n __extends(IFrameSettings, _super);\n function IFrameSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], IFrameSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], IFrameSettings.prototype, \"attributes\", void 0);\n __decorate([\n Complex({}, Resources)\n ], IFrameSettings.prototype, \"resources\", void 0);\n return IFrameSettings;\n}(ChildProperty));\nexport { IFrameSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the inlineMode property of the RTE.\n */\nvar InlineMode = /** @class */ (function (_super) {\n __extends(InlineMode, _super);\n function InlineMode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InlineMode.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], InlineMode.prototype, \"onSelection\", void 0);\n return InlineMode;\n}(ChildProperty));\nexport { InlineMode };\n","import { Browser, isNullOrUndefined, select, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\n/**\n * `FullScreen` module is used to maximize and minimize screen\n */\nvar FullScreen = /** @class */ (function () {\n function FullScreen(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n FullScreen.prototype.showFullScreen = function (event) {\n this.scrollableParent = getScrollableParent(this.parent.element);\n if (!this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.trigger(events.actionBegin, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n if (this.parent.toolbarSettings.enableFloating && this.parent.toolbarSettings.enable) {\n this.parent.getToolbarElement().style.width = '100%';\n this.parent.getToolbarElement().style.top = '0px';\n }\n this.parent.element.classList.add(classes.CLS_FULL_SCREEN);\n this.toggleParentOverflow(true);\n this.parent.setContentHeight();\n if (this.parent.toolbarModule) {\n if (Browser.isDevice) {\n this.parent.toolbarModule.removeFixedTBarClass();\n }\n this.parent.toolbarModule.updateItem({\n targetItem: 'Maximize',\n updateItem: 'Minimize',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n }\n };\n FullScreen.prototype.hideFullScreen = function (event) {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.element.classList.remove(classes.CLS_FULL_SCREEN);\n this.parent.trigger(events.actionBegin, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n this.toggleParentOverflow(false);\n this.parent.setContentHeight();\n if (this.parent.toolbarModule) {\n this.parent.toolbarModule.updateItem({\n targetItem: 'Minimize',\n updateItem: 'Maximize',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.parent.toolbarModule.addFixedTBarClass();\n }\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n }\n };\n FullScreen.prototype.toggleParentOverflow = function (isAdd) {\n if (isNullOrUndefined(this.scrollableParent)) {\n return;\n }\n var overflow = (isAdd) ? 'hidden' : '';\n for (var i = 0; i < this.scrollableParent.length; i++) {\n if (this.scrollableParent[i].nodeName === '#document') {\n setStyleAttribute(select('body', this.scrollableParent[i]), {\n overflow: overflow\n });\n }\n else {\n setStyleAttribute(this.scrollableParent[i], {\n overflow: overflow\n });\n }\n }\n };\n FullScreen.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'full-screen':\n this.showFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n case 'escape':\n this.hideFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n }\n };\n FullScreen.prototype.addEventListener = function () {\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n FullScreen.prototype.removeEventListener = function () {\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n FullScreen.prototype.destroy = function () {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.toggleParentOverflow(false);\n }\n this.removeEventListener();\n };\n return FullScreen;\n}());\nexport { FullScreen };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Complex, Browser, addClass, select } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, formatUnit, L10n, closest } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, Event, removeClass, print as printWindow, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, compile, append } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Render } from '../renderer/render';\nimport { ViewSource } from '../renderer/view-source';\nimport { executeGroup } from './interface';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { RenderType, ToolbarType } from './enum';\nimport { ExecCommandCallBack } from '../actions/execute-command-callback';\nimport { KeyboardEvents } from '../actions/keyboard';\nimport { ToolbarSettings, ImageSettings, QuickToolbarSettings, FontFamily, FontSize, Format } from '../models/toolbar-settings';\nimport { TableSettings } from '../models/toolbar-settings';\nimport { FontColor, BackgroundColor } from '../models/toolbar-settings';\nimport { IFrameSettings } from '../models/iframe-settings';\nimport { InlineMode } from '../models/inline-mode';\nimport { defaultLocale } from '../models/default-locale';\nimport { setAttributes } from '../actions/html-attributes';\nimport { FullScreen } from '../actions/full-screen';\nimport * as CONSTANT from '../../common/constant';\nimport { dispatchEvent } from '../base/util';\n/**\n * Represents the RichTextEditor component.\n * ```html\n * \n * \n * ```\n */\nvar RichTextEditor = /** @class */ (function (_super) {\n __extends(RichTextEditor, _super);\n function RichTextEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * @hidden\n */\n _this.isFocusOut = false;\n /**\n * @hidden\n */\n _this.isRTE = false;\n /**\n * @hidden\n */\n _this.isBlur = true;\n _this.needsID = true;\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n RichTextEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.toolbarSettings.enable) {\n modules.push({ member: 'toolbar', args: [this, this.serviceLocator] });\n modules.push({\n member: 'link',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'table',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'image',\n args: [this, this.serviceLocator]\n });\n if (this.quickToolbarSettings.enable) {\n modules.push({ member: 'quickToolbar', args: [this, this.serviceLocator] });\n }\n }\n if (this.showCharCount) {\n modules.push({ member: 'count', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'Markdown') {\n modules.push({ member: 'markdownEditor', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'HTML') {\n modules.push({ member: 'htmlEditor', args: [this, this.serviceLocator] });\n }\n return modules;\n };\n RichTextEditor.prototype.updateEnable = function () {\n if (this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n this.element.tabIndex = 0;\n this.element.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', '0');\n }\n else {\n if (this.getToolbar()) {\n removeClass(this.getToolbar().querySelectorAll('.' + classes.CLS_ACTIVE), classes.CLS_ACTIVE);\n }\n addClass([this.element], classes.CLS_DISABLED);\n this.element.tabIndex = -1;\n this.element.setAttribute('aria-disabled', 'true');\n this.inputElement.setAttribute('tabindex', '-1');\n }\n };\n RichTextEditor.prototype.setEnable = function () {\n this.updateEnable();\n (this.enabled) ? this.eventInitializer() : this.unWireEvents();\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n RichTextEditor.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.setContainer();\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n attributes(this.element, { role: 'application' });\n };\n RichTextEditor.prototype.setContainer = function () {\n this.originalElement = this.element.cloneNode(true);\n if (this.value === null || this.valueTemplate !== null) {\n this.setValue();\n this.element.innerHTML = '';\n }\n if (this.element.tagName === 'TEXTAREA') {\n var rteOutterWrapper = this.createElement('div', {\n className: 'e-control e-richtexteditor', id: this.getID()\n });\n rteOutterWrapper.innerHTML = this.element.value;\n this.element.parentElement.insertBefore(rteOutterWrapper, this.element);\n this.valueContainer = this.element;\n this.valueContainer.classList.remove('e-control', 'e-richtexteditor');\n this.valueContainer.id = this.getID() + '-value';\n this.element = rteOutterWrapper;\n }\n else {\n this.valueContainer = this.createElement('textarea', {\n id: this.getID() + '-value'\n });\n }\n this.valueContainer.name = this.getID();\n this.valueContainer.style.display = 'none';\n if (this.value !== null) {\n this.valueContainer.value = this.value;\n }\n this.element.appendChild(this.valueContainer);\n };\n RichTextEditor.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n /**\n * Focuses the RichTextEditor component\n * @public\n */\n RichTextEditor.prototype.focusIn = function () {\n if (this.enabled) {\n this.inputElement.focus();\n }\n };\n /**\n * Blurs the RichTextEditor component\n * @public\n */\n RichTextEditor.prototype.focusOut = function () {\n if (this.enabled) {\n this.inputElement.blur();\n }\n };\n /**\n * Selects all the content in RichTextEditor\n * @public\n */\n RichTextEditor.prototype.selectAll = function () {\n this.notify(events.selectAll, {});\n };\n /**\n * Selects a content range or an element\n * @public\n */\n RichTextEditor.prototype.selectRange = function (range) {\n this.notify(events.selectRange, { range: range });\n };\n /**\n * Retrieves the HTML markup content from currently selected content of RichTextEditor.\n * @public\n */\n RichTextEditor.prototype.getSelection = function () {\n var str = '';\n this.notify(events.getSelectedHtml, {\n callBack: function (txt) {\n str = txt;\n }\n });\n return str;\n };\n /**\n * Executes the commands\n * CommandName - Specifies the name of the command to be executed.\n * value - Specifies the sub command.\n * @public\n */\n RichTextEditor.prototype.executeCommand = function (commandName, value) {\n var tool = executeGroup[commandName];\n this.formatter.editorManager.execCommand(tool.command, tool.subCommand ? tool.subCommand : (value ? value : tool.value), null, null, (value ? value : tool.value), (value ? value : tool.value));\n };\n RichTextEditor.prototype.encode = function (value) {\n var divNode = this.createElement('div');\n divNode.innerText = value.trim();\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n RichTextEditor.prototype.decode = function (value) {\n return value.replace(/&/g, '&').replace(/&lt;/g, '<')\n .replace(/</g, '<').replace(/&gt;/g, '>')\n .replace(/>/g, '>').replace(/ /g, ' ')\n .replace(/&nbsp;/g, ' ').replace(/"/g, '');\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n */\n RichTextEditor.prototype.render = function () {\n this.renderModule = new Render(this, this.serviceLocator);\n this.sourceCodeModule = new ViewSource(this, this.serviceLocator);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n this.RTERender();\n var execCommandCallBack = new ExecCommandCallBack(this);\n this.notify(events.initialEnd, {});\n if (this.toolbarSettings.enable && this.toolbarSettings.type === 'Expand' && !isNOU(this.getToolbar()) &&\n (this.toolbarSettings.items.indexOf('Undo') > -1 && this.toolbarSettings.items.indexOf('Redo') > -1)) {\n this.disableToolbarItem(['Undo', 'Redo']);\n }\n this.setContentHeight();\n (this.readonly || !this.enabled) ? this.unWireEvents() : this.eventInitializer();\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n */\n RichTextEditor.prototype.eventInitializer = function () {\n this.wireEvents();\n };\n /**\n * For internal use only - keydown the event handler;\n * @private\n */\n RichTextEditor.prototype.keyDown = function (e) {\n this.notify(events.keyDown, { member: 'keydown', args: e });\n if (this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n if (e.action || e.which === 9) {\n this.formatter.process(this, null, e);\n switch (e.action) {\n case 'toolbar-focus':\n if (this.toolbarSettings.enable) {\n var selector = '.e-toolbar-item[aria-disabled=\"false\"][title] [tabindex]';\n this.toolbarModule.baseToolbar.toolbarObj.element.querySelector(selector).focus();\n }\n break;\n case 'escape':\n this.contentModule.getEditPanel().focus();\n break;\n }\n }\n if (!isNOU(this.placeholder)) {\n this.setPlaceHolder();\n }\n };\n RichTextEditor.prototype.keyUp = function (e) {\n this.notify(events.keyUp, { member: 'keyup', args: e });\n var allowedKeys = e.which === 32 || e.which === 13 || e.which === 8 || e.which === 46;\n if (((e.key !== 'shift' && !e.ctrlKey) && e.key.length === 1 || allowedKeys) || (this.editorMode === 'Markdown'\n && ((e.key !== 'shift' && !e.ctrlKey) && e.key.length === 1 || allowedKeys)) && !this.inlineMode.enable) {\n this.formatter.onKeyHandler(this, e);\n }\n if (this.inputElement && this.inputElement.textContent.length !== 0) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n if (!isNOU(this.placeholder)) {\n this.setPlaceHolder();\n }\n };\n RichTextEditor.prototype.updateValue = function (value) {\n if (isNOU(value)) {\n this.setProperties({ value: this.inputElement.innerHTML });\n }\n else {\n this.setProperties({ value: value });\n }\n };\n RichTextEditor.prototype.mouseUp = function (e) {\n this.notify(events.mouseUp, { member: 'mouseUp', args: e });\n if (this.inputElement && ((this.editorMode === 'HTML' && this.inputElement.textContent.length !== 0) ||\n (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0))) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n RichTextEditor.prototype.onCopy = function () {\n this.contentModule.getDocument().execCommand('copy', false, null);\n };\n RichTextEditor.prototype.onCut = function () {\n this.contentModule.getDocument().execCommand('cut', false, null);\n };\n RichTextEditor.prototype.onPaste = function (e) {\n var _this = this;\n var args = { requestType: 'Paste', editorMode: this.editorMode, event: e };\n var proxy = this;\n var value = null;\n if (e && !isNOU(e.clipboardData)) {\n value = e.clipboardData.getData('text/plain');\n }\n setTimeout(function () { _this.formatter.saveData(); }, 0);\n this.formatter.onSuccess(this, args);\n if (value !== null && value.length === 0) {\n this.notify(events.paste, {\n module: events.imgModule, file: e.clipboardData.items[0].getAsFile(), args: e\n });\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.clipboardAction = function (action, event) {\n switch (action.toLowerCase()) {\n case 'cut':\n this.onCut();\n this.formatter.onSuccess(this, {\n requestType: 'Cut',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'copy':\n this.onCopy();\n this.formatter.onSuccess(this, {\n requestType: 'Copy',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'paste':\n this.onPaste(event);\n break;\n }\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n * @method destroy\n * @return {void}\n */\n RichTextEditor.prototype.destroy = function () {\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n this.unWireEvents();\n if (this.originalElement.tagName === 'TEXTAREA') {\n this.element.parentElement.insertBefore(this.valueContainer, this.element);\n this.valueContainer.id = this.getID();\n this.valueContainer.removeAttribute('name');\n this.element.remove();\n if (this.originalElement.innerHTML.trim() !== '') {\n this.valueContainer.value = this.originalElement.innerHTML.trim();\n }\n else {\n this.valueContainer.value = '';\n }\n }\n else {\n if (this.originalElement.innerHTML.trim() !== '') {\n this.element.innerHTML = this.originalElement.innerHTML.trim();\n }\n else {\n this.element.innerHTML = '';\n }\n }\n if (this.placeholder && this.placeHolderWrapper) {\n this.placeHolderWrapper.remove();\n }\n if (!isNOU(this.cssClass)) {\n removeClass([this.element], this.cssClass);\n }\n this.removeHtmlAttributes();\n this.removeAttributes();\n _super.prototype.destroy.call(this);\n };\n RichTextEditor.prototype.removeHtmlAttributes = function () {\n if (this.htmlAttributes) {\n var keys = Object.keys(this.htmlAttributes);\n for (var i = 0; i < keys.length && this.element.hasAttribute(keys[i]); i++) {\n this.element.removeAttribute(keys[i]);\n }\n }\n };\n RichTextEditor.prototype.removeAttributes = function () {\n if (!this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n }\n if (this.enableRtl) {\n removeClass([this.element], classes.CLS_RTL);\n }\n if (this.readonly) {\n removeClass([this.element], classes.CLS_RTE_READONLY);\n }\n if (this.element.style.width !== '' && this.originalElement.style.width === '') {\n this.element.style.removeProperty('width');\n }\n if (this.element.style.height !== '' && this.originalElement.style.height === '') {\n this.element.style.removeProperty('height');\n }\n this.element.removeAttribute('aria-disabled');\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n };\n RichTextEditor.prototype.destroyDependentModules = function () {\n /* destroy dependent modules */\n this.renderModule.destroy();\n this.formatter.editorManager.undoRedoManager.destroy();\n this.sourceCodeModule.destroy();\n };\n /**\n * Returns the HTML or Text inside the RichTextEditor.\n * @return {Element}\n */\n RichTextEditor.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n RichTextEditor.prototype.getText = function () {\n return this.contentModule.getText();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n RichTextEditor.prototype.getModuleName = function () {\n return 'richtexteditor';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n RichTextEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.value = (this.enableHtmlEncode) ? this.encode(this.decode(newProp[prop])) : newProp[prop];\n this.updatePanelValue();\n this.setPlaceHolder();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'valueTemplate':\n this.setValue();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'width':\n this.setWidth(newProp[prop]);\n break;\n case 'height':\n this.setHeight(newProp[prop]);\n this.setContentHeight();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'cssClass':\n this.element.classList.remove(oldProp[prop]);\n this.setCssClass(newProp[prop]);\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'placeholder':\n this.placeholder = newProp[prop];\n this.setPlaceHolder();\n break;\n case 'htmlAttributes':\n setAttributes(this.htmlAttributes, this, false);\n break;\n case 'iframeSettings':\n var frameSetting = oldProp[prop];\n if (frameSetting.resources) {\n var iframe = this.contentModule.getDocument();\n var header = iframe.querySelector('head');\n var files = void 0;\n if (frameSetting.resources.scripts) {\n files = header.querySelectorAll('.' + classes.CLS_SCRIPT_SHEET);\n this.removeSheets(files);\n }\n if (frameSetting.resources.styles) {\n files = header.querySelectorAll('.' + classes.CLS_STYLE_SHEET);\n this.removeSheets(files);\n }\n }\n this.setIframeSettings();\n break;\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'inlineMode':\n this.notify(events.modelChanged, { module: 'quickToolbar' });\n this.setContentHeight();\n break;\n case 'toolbarSettings':\n this.notify(events.modelChanged, { module: 'toolbar' });\n this.setContentHeight();\n break;\n case 'showCharCount':\n if (newProp[prop] && this.countModule) {\n this.countModule.renderCount();\n }\n else if (newProp[prop] === false && this.countModule) {\n this.countModule.destroy();\n }\n break;\n case 'enableHtmlEncode':\n this.updateValueData();\n break;\n default:\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n }\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.updateValueData = function () {\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(this.decode(this.inputElement.innerHTML)) });\n }\n else {\n this.setProperties({\n value: /<[a-z][\\s\\S]*>/i.test(this.inputElement.innerHTML) ? this.inputElement.innerHTML :\n this.decode(this.inputElement.innerHTML)\n });\n }\n };\n RichTextEditor.prototype.removeSheets = function (srcList) {\n var i;\n for (i = 0; i < srcList.length; i++) {\n srcList[i].remove();\n }\n };\n RichTextEditor.prototype.updatePanelValue = function () {\n var value;\n if (this.editorMode === 'HTML' && this.value) {\n value = this.value.replace(/>\\s+<');\n }\n else {\n value = this.value;\n }\n value = (this.enableHtmlEncode && this.value) ? this.decode(value) : value;\n if (value) {\n if (this.valueContainer) {\n this.valueContainer.value = (this.enableHtmlEncode) ? this.value : value;\n }\n if (this.editorMode === 'HTML' && this.inputElement && this.inputElement.innerHTML.trim() !== value.trim()) {\n this.inputElement.innerHTML = value;\n }\n else if (this.editorMode === 'Markdown' && this.inputElement\n && this.inputElement.value.trim() !== value.trim()) {\n this.inputElement.value = value;\n }\n }\n else {\n if (this.editorMode === 'HTML') {\n this.inputElement.innerHTML = '


    ';\n }\n else {\n this.inputElement.value = '';\n }\n if (this.valueContainer) {\n this.valueContainer.value = '';\n }\n }\n };\n RichTextEditor.prototype.setHeight = function (height) {\n if (height !== 'auto') {\n this.element.style.height = formatUnit(height);\n }\n else {\n this.element.style.height = 'auto';\n }\n };\n RichTextEditor.prototype.setPlaceHolder = function () {\n if (this.inputElement && this.placeholder && this.iframeSettings.enable !== true) {\n if (!this.placeHolderWrapper) {\n this.placeHolderWrapper = this.createElement('span', { className: 'rte-placeholder' });\n if (this.inputElement) {\n this.inputElement.parentElement.insertBefore(this.placeHolderWrapper, this.inputElement);\n }\n attributes(this.placeHolderWrapper, {\n 'style': 'font-size: 16px; padding: 16px; margin-left: 0px; margin-right: 0px;'\n });\n }\n this.placeHolderWrapper.innerHTML = this.placeholder;\n if (this.inputElement.textContent.length !== 0) {\n this.placeHolderWrapper.style.display = 'none';\n }\n else {\n this.placeHolderWrapper.style.display = 'block';\n }\n }\n };\n RichTextEditor.prototype.setWidth = function (width) {\n if (width !== 'auto') {\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n }\n else {\n this.element.style.width = 'auto';\n }\n };\n RichTextEditor.prototype.setCssClass = function (cssClass) {\n if (!isNOU(cssClass)) {\n this.element.classList.add(cssClass);\n }\n };\n RichTextEditor.prototype.updateRTL = function () {\n this.notify(events.rtlMode, { enableRtl: this.enableRtl });\n if (this.enableRtl) {\n this.element.classList.add(classes.CLS_RTL);\n }\n else {\n this.element.classList.remove(classes.CLS_RTL);\n }\n };\n RichTextEditor.prototype.updateReadOnly = function () {\n if (this.editorMode !== 'Markdown') {\n if (this.readonly) {\n attributes(this.inputElement, { contenteditable: 'false' });\n addClass([this.element], classes.CLS_RTE_READONLY);\n }\n else {\n attributes(this.inputElement, { contenteditable: 'true' });\n removeClass([this.element], classes.CLS_RTE_READONLY);\n }\n }\n };\n RichTextEditor.prototype.setReadOnly = function () {\n this.updateReadOnly();\n (this.readonly) ? this.unWireEvents() : this.eventInitializer();\n };\n /**\n * By default, prints all the pages of the RichTextEditor.\n * @return {void}\n */\n RichTextEditor.prototype.print = function () {\n var printWind;\n var printArgs = {\n element: this.inputElement,\n requestType: 'print',\n cancel: false\n };\n this.trigger(events.actionBegin, printArgs);\n printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth);\n if (Browser.info.name === 'msie') {\n printWind.resizeTo(screen.availWidth, screen.availHeight);\n }\n printWind = printWindow(this.inputElement, printWind);\n if (printArgs.cancel) {\n return;\n }\n var actionArgs = {\n requestType: 'print'\n };\n this.trigger(events.actionComplete, actionArgs);\n };\n /**\n * Applies all the pending property changes and render the component again.\n * @public\n */\n RichTextEditor.prototype.refresh = function () {\n this.renderModule.refresh();\n };\n /**\n * Shows the RichTextEditor component in full-screen mode.\n */\n RichTextEditor.prototype.showFullScreen = function () {\n if (this.readonly) {\n return;\n }\n this.fullScreenModule.showFullScreen();\n };\n /**\n * Enables the give toolbar items in the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.enableToolbarItem = function (items) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, true);\n };\n /**\n * Disables the given toolbar items in the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.disableToolbarItem = function (items) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, false);\n };\n /**\n * Removes the give toolbar items from the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.removeToolbarItem = function (items) {\n this.toolbarModule.removeTBarItems(items);\n };\n /**\n * Get the selected range from the RichTextEditor's content.\n * @public\n */\n RichTextEditor.prototype.getRange = function () {\n return this.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n };\n RichTextEditor.prototype.initializeServices = function () {\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('rteLocale', this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale));\n };\n RichTextEditor.prototype.RTERender = function () {\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.fullScreenModule = new FullScreen(this);\n this.renderModule.render();\n this.inputElement = this.contentModule.getEditPanel();\n this.setHeight(this.height);\n setAttributes(this.htmlAttributes, this, false);\n if (this.iframeSettings) {\n this.setIframeSettings();\n }\n this.setCssClass(this.cssClass);\n this.updateEnable();\n this.setPlaceHolder();\n this.updateRTL();\n this.updateReadOnly();\n this.updatePanelValue();\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(this.decode(this.value)) });\n }\n };\n RichTextEditor.prototype.setIframeSettings = function () {\n if (this.iframeSettings.resources) {\n var styleSrc = this.iframeSettings.resources.styles;\n var scriptSrc = this.iframeSettings.resources.scripts;\n if (this.iframeSettings.resources.scripts.length > 0) {\n this.InjectSheet(true, scriptSrc);\n }\n if (this.iframeSettings.resources.styles.length > 0) {\n this.InjectSheet(false, styleSrc);\n }\n }\n if (this.iframeSettings.attributes) {\n setAttributes(this.iframeSettings.attributes, this, true);\n }\n };\n RichTextEditor.prototype.InjectSheet = function (scriptSheet, srcList) {\n try {\n if (srcList && srcList.length > 0) {\n var iFrame = this.contentModule.getDocument();\n var target = iFrame.querySelector('head');\n for (var i = 0; i < srcList.length; i++) {\n if (scriptSheet) {\n var scriptEle = this.createScriptElement();\n scriptEle.src = srcList[i];\n target.appendChild(scriptEle);\n }\n else {\n var styleEle = this.createStyleElement();\n styleEle.href = srcList[i];\n target.appendChild(styleEle);\n }\n }\n }\n }\n catch (e) {\n return;\n }\n };\n RichTextEditor.prototype.createScriptElement = function () {\n var scriptEle = this.createElement('script', {\n className: classes.CLS_SCRIPT_SHEET\n });\n scriptEle.type = 'text/javascript';\n return scriptEle;\n };\n RichTextEditor.prototype.createStyleElement = function () {\n var styleEle = this.createElement('link', {\n className: classes.CLS_STYLE_SHEET\n });\n styleEle.rel = 'stylesheet';\n return styleEle;\n };\n RichTextEditor.prototype.setValue = function () {\n if (this.valueTemplate) {\n if (typeof this.valueTemplate === 'string') {\n this.setProperties({ value: this.valueTemplate });\n }\n else {\n var compiledString = void 0;\n compiledString = compile(this.valueTemplate);\n var compiledTemplate = compiledString({});\n for (var i = 0; i < compiledTemplate.length; i++) {\n var item = compiledTemplate[i];\n append([item], this.element);\n }\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n }\n else if (this.element.innerHTML.trim() !== '') {\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n };\n RichTextEditor.prototype.setContentHeight = function (target, isExpand) {\n var heightValue;\n var topValue = 0;\n var cntEle = (this.sourceCodeModule.getPanel() &&\n this.sourceCodeModule.getPanel().parentElement.style.display === 'block') ? this.sourceCodeModule.getPanel().parentElement :\n this.contentModule.getPanel();\n var rteHeight = this.element.offsetHeight;\n var tbHeight = this.getToolbar() ? this.toolbarModule.getToolbarHeight() : 0;\n var expandPopHeight = this.getToolbar() ? this.toolbarModule.getExpandTBarPopHeight() : 0;\n if (this.toolbarSettings.type === ToolbarType.Expand && isExpand && target !== 'preview') {\n heightValue = (this.height === 'auto') ? 'auto' : rteHeight - (tbHeight + expandPopHeight) + 'px';\n topValue = (!this.toolbarSettings.enableFloating) ? expandPopHeight : 0;\n }\n else {\n if (this.height === 'auto') {\n heightValue = (this.element.classList.contains('e-rte-full-screen')) ? '100%' : 'auto';\n }\n else {\n heightValue = rteHeight - tbHeight + 'px';\n }\n }\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n if (this.iframeSettings.enable && target === 'sourceCode') {\n var codeElement = select('.' + classes.CLS_RTE_CONTENT, this.element);\n setStyleAttribute(codeElement, { height: heightValue, marginTop: topValue + 'px' });\n }\n if (this.toolbarSettings.enableFloating && this.getToolbar() && !this.inlineMode.enable) {\n if (isExpand) {\n setStyleAttribute(this.getToolbar().parentElement, { height: (tbHeight + expandPopHeight) + 'px' });\n }\n else {\n setStyleAttribute(this.getToolbar().parentElement, { height: tbHeight + 'px' });\n }\n }\n };\n /**\n * Retrieves the HTML from RichTextEditor.\n * @public\n */\n RichTextEditor.prototype.getHtml = function () {\n return this.value;\n };\n /**\n * Shows the source HTML/MD markup.\n * @public\n */\n RichTextEditor.prototype.showSourceCode = function () {\n if (this.readonly) {\n return;\n }\n this.notify(events.sourceCode, {});\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getBaseToolbarObject = function () {\n var tbObj;\n if (this.inlineMode.enable && !Browser.isDevice) {\n tbObj = this.quickToolbarModule && this.quickToolbarModule.getInlineBaseToolbar();\n }\n else {\n tbObj = this.toolbarModule && this.toolbarModule.getBaseToolbar();\n }\n return tbObj;\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getToolbar = function () {\n return this.toolbarModule ? this.toolbarModule.getToolbarElement() : null;\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getToolbarElement = function () {\n return this.toolbarModule && this.toolbarModule.getToolbarElement();\n };\n RichTextEditor.prototype.getID = function () {\n return this.element.id;\n };\n RichTextEditor.prototype.mouseDownHandler = function (e) {\n addClass([this.element], [classes.CLS_FOCUS]);\n this.preventDefaultResize(e);\n this.notify(events.mouseDown, { args: e });\n };\n RichTextEditor.prototype.preventImgResize = function (e) {\n if (e.target.nodeName.toLocaleLowerCase() === 'img') {\n e.preventDefault();\n }\n };\n RichTextEditor.prototype.preventDefaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().addEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', false, 'false');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', false, 'false');\n }\n };\n RichTextEditor.prototype.defaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().removeEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', true, 'true');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', true, 'true');\n }\n };\n RichTextEditor.prototype.resizeHandler = function () {\n var isExpand = (this.toolbarSettings.type === ToolbarType.Expand) ? true : false;\n this.setContentHeight('', isExpand);\n };\n RichTextEditor.prototype.scrollHandler = function (e) {\n this.notify(events.scroll, { args: e });\n };\n RichTextEditor.prototype.editAreaClickHandler = function (e) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n };\n RichTextEditor.prototype.focusHandler = function (e) {\n if (!this.isRTE || this.isFocusOut) {\n this.isRTE = this.isFocusOut ? false : true;\n this.isFocusOut = false;\n addClass([this.element], [classes.CLS_FOCUS]);\n if (this.editorMode === 'HTML') {\n this.cloneValue = (this.inputElement.innerHTML === '


    ') ? null : this.inputElement.innerHTML;\n }\n else {\n this.cloneValue = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n if (document.activeElement === this.element) {\n this.contentModule.getEditPanel().focus();\n }\n this.preventDefaultResize(e);\n this.trigger('focus');\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n }\n };\n RichTextEditor.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!this.element.contains(e.target) && document !== e.target && !closest(target, '.' + classes.CLS_RTE) &&\n !closest(target, '.' + classes.CLS_RTE_ELEMENTS)) {\n this.isBlur = true;\n this.isRTE = false;\n }\n this.notify(events.docClick, { args: e });\n };\n RichTextEditor.prototype.blurHandler = function (e) {\n var trg = e.relatedTarget;\n if (trg) {\n if (closest(trg, '.' + classes.CLS_RTE)) {\n this.isBlur = false;\n }\n else if (closest(trg, '.' + classes.CLS_RTE_ELEMENTS)) {\n this.isBlur = false;\n }\n else {\n this.isBlur = true;\n trg = null;\n }\n }\n if (this.isBlur && isNOU(trg)) {\n removeClass([this.element], [classes.CLS_FOCUS]);\n this.notify(events.focusChange, {});\n if (this.editorMode === 'HTML') {\n this.value = (this.inputElement.innerHTML === '


    ') ? null : this.inputElement.innerHTML;\n }\n else {\n this.value = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n this.valueContainer.value = this.value;\n this.notify(events.toolbarRefresh, { args: e, documentNode: document });\n this.invokeChangeEvent();\n this.isFocusOut = true;\n this.isBlur = false;\n dispatchEvent(this.valueContainer, 'focusout');\n this.defaultResize(e);\n this.trigger('blur');\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n }\n else {\n this.isRTE = true;\n }\n };\n RichTextEditor.prototype.invokeChangeEvent = function () {\n var eventArgs = {\n value: this.value\n };\n if (this.value !== this.cloneValue) {\n this.trigger('change', eventArgs);\n this.cloneValue = this.value;\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.wireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.unWireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n };\n RichTextEditor.prototype.resetHandler = function () {\n this.value = null;\n };\n RichTextEditor.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.inputElement, {\n keyAction: this.keyDown.bind(this), keyConfigs: this.formatter.keyConfig, eventName: 'keydown'\n });\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetHandler, this);\n }\n EventHandler.add(this.inputElement, 'keyup', this.keyUp, this);\n EventHandler.add(this.inputElement, 'paste', this.onPaste, this);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUp, this);\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.inputElement, 'click', this.editAreaClickHandler, this);\n this.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown, this);\n this.element.addEventListener('focusin', this.focusHandler.bind(this), true);\n this.element.addEventListener('focusout', this.blurHandler.bind(this), true);\n window.addEventListener('resize', this.resizeHandler.bind(this), true);\n if (this.iframeSettings.enable) {\n EventHandler.add(this.inputElement, 'focusin', this.focusHandler, this);\n EventHandler.add(this.inputElement, 'focusout', this.blurHandler, this);\n EventHandler.add(this.inputElement.ownerDocument, 'mousedown', this.onIframeMouseDown, this);\n }\n this.wireScrollElementsEvents();\n };\n RichTextEditor.prototype.onIframeMouseDown = function (e) {\n this.isBlur = false;\n this.notify(events.iframeMouseDown, e);\n };\n RichTextEditor.prototype.editorKeyDown = function (e) {\n switch (e.event.action) {\n case 'copy':\n this.onCopy();\n break;\n case 'cut':\n this.onCut();\n break;\n }\n if (e.callBack && (e.event.action === 'copy' || e.event.action === 'cut')) {\n e.callBack({\n requestType: e.event.action,\n editorMode: 'HTML',\n event: e.event\n });\n }\n };\n RichTextEditor.prototype.unWireEvents = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetHandler);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.keyUp);\n EventHandler.remove(this.inputElement, 'paste', this.onPaste);\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUp);\n EventHandler.remove(this.inputElement, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.inputElement, 'click', this.editAreaClickHandler);\n if (this.formatter) {\n this.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown);\n }\n this.element.removeEventListener('focusin', this.focusHandler.bind(this), false);\n this.element.removeEventListener('focusout', this.blurHandler.bind(this), false);\n window.removeEventListener('resize', this.resizeHandler.bind(this), false);\n if (this.iframeSettings.enable) {\n EventHandler.remove(this.inputElement, 'focusin', this.focusHandler);\n EventHandler.remove(this.inputElement, 'focusout', this.blurHandler);\n EventHandler.remove(this.inputElement.ownerDocument, 'mousedown', this.onIframeMouseDown);\n }\n this.unWireScrollElementsEvents();\n };\n __decorate([\n Complex({}, ToolbarSettings)\n ], RichTextEditor.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Complex({}, QuickToolbarSettings)\n ], RichTextEditor.prototype, \"quickToolbarSettings\", void 0);\n __decorate([\n Complex({}, IFrameSettings)\n ], RichTextEditor.prototype, \"iframeSettings\", void 0);\n __decorate([\n Complex({}, ImageSettings)\n ], RichTextEditor.prototype, \"insertImageSettings\", void 0);\n __decorate([\n Complex({}, TableSettings)\n ], RichTextEditor.prototype, \"tableSettings\", void 0);\n __decorate([\n Property(0)\n ], RichTextEditor.prototype, \"floatingToolbarOffset\", void 0);\n __decorate([\n Complex({}, InlineMode)\n ], RichTextEditor.prototype, \"inlineMode\", void 0);\n __decorate([\n Property('100%')\n ], RichTextEditor.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property({})\n ], RichTextEditor.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableHtmlEncode\", void 0);\n __decorate([\n Property('auto')\n ], RichTextEditor.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"value\", void 0);\n __decorate([\n Property(30)\n ], RichTextEditor.prototype, \"undoRedoSteps\", void 0);\n __decorate([\n Property(300)\n ], RichTextEditor.prototype, \"undoRedoTimer\", void 0);\n __decorate([\n Property('HTML')\n ], RichTextEditor.prototype, \"editorMode\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"keyConfig\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"showCharCount\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableTabKey\", void 0);\n __decorate([\n Property(-1)\n ], RichTextEditor.prototype, \"maxLength\", void 0);\n __decorate([\n Complex({}, Format)\n ], RichTextEditor.prototype, \"format\", void 0);\n __decorate([\n Complex({}, FontFamily)\n ], RichTextEditor.prototype, \"fontFamily\", void 0);\n __decorate([\n Complex({}, FontSize)\n ], RichTextEditor.prototype, \"fontSize\", void 0);\n __decorate([\n Complex({}, FontColor)\n ], RichTextEditor.prototype, \"fontColor\", void 0);\n __decorate([\n Complex({}, BackgroundColor)\n ], RichTextEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"valueTemplate\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizeStop\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"formatter\", void 0);\n RichTextEditor = __decorate([\n NotifyPropertyChanges\n ], RichTextEditor);\n return RichTextEditor;\n}(Component));\nexport { RichTextEditor };\n","import * as index from '@syncfusion/ej2-richtexteditor';\nindex.RichTextEditor.Inject( index.Toolbar,index.Link,index.Image,index.Count,index.QuickToolbar,index.HtmlEditor,index.MarkdownEditor,index.Table);\nexport * from '@syncfusion/ej2-richtexteditor';\n","/**\n * Constants\n */\n/** @hidden */\nexport var cellClick = 'cellClick';\n/** @hidden */\nexport var cellDoubleClick = 'cellDoubleClick';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var navigating = 'navigating';\n/** @hidden */\nexport var renderCell = 'renderCell';\n/** @hidden */\nexport var eventClick = 'eventClick';\n/** @hidden */\nexport var eventRendered = 'eventRendered';\n/** @hidden */\nexport var dataBinding = 'dataBinding';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var popupOpen = 'popupOpen';\n/** @hidden */\nexport var dragStart = 'dragStart';\n/** @hidden */\nexport var drag = 'drag';\n/** @hidden */\nexport var dragStop = 'dragStop';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var resizing = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/**\n * Specifies schedule internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var scrollUiUpdate = 'scroll-ui-update';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var documentClick = 'document-click';\n/** @hidden */\nexport var cellMouseDown = 'cell-mouse-down';\n/** @hidden */\nexport var tapHoldReady = 'tap-hold-ready';\n","/**\n * CSS Constants\n */\n/** @hidden */\nexport var ROOT = 'e-schedule';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DEVICE_CLASS = 'e-device';\n/** @hidden */\nexport var ICON = 'e-icons';\n/** @hidden */\nexport var ENABLE_CLASS = 'e-enable';\n/** @hidden */\nexport var DISABLE_CLASS = 'e-disable';\n/** @hidden */\nexport var TABLE_CONTAINER_CLASS = 'e-table-container';\n/** @hidden */\nexport var SCHEDULE_TABLE_CLASS = 'e-schedule-table';\n/** @hidden */\nexport var ALLDAY_CELLS_CLASS = 'e-all-day-cells';\n/** @hidden */\nexport var HEADER_POPUP_CLASS = 'e-header-popup';\n/** @hidden */\nexport var HEADER_CALENDAR_CLASS = 'e-header-calendar';\n/** @hidden */\nexport var ALLDAY_ROW_CLASS = 'e-all-day-row';\n/** @hidden */\nexport var CONTENT_TABLE_CLASS = 'e-content-table';\n/** @hidden */\nexport var WORK_CELLS_CLASS = 'e-work-cells';\n/** @hidden */\nexport var WORK_HOURS_CLASS = 'e-work-hours';\n/** @hidden */\nexport var POPUP_OPEN = 'e-popup-open';\n/** @hidden */\nexport var DATE_HEADER_WRAP_CLASS = 'e-date-header-wrap';\n/** @hidden */\nexport var DATE_HEADER_CONTAINER_CLASS = 'e-date-header-container';\n/** @hidden */\nexport var HEADER_CELLS_CLASS = 'e-header-cells';\n/** @hidden */\nexport var WORKDAY_CLASS = 'e-work-days';\n/** @hidden */\nexport var OTHERMONTH_CLASS = 'e-other-month';\n/** @hidden */\nexport var CURRENT_DAY_CLASS = 'e-current-day';\n/** @hidden */\nexport var CURRENTDATE_CLASS = 'e-current-date';\n/** @hidden */\nexport var CURRENT_PANEL_CLASS = 'e-current-panel';\n/** @hidden */\nexport var PREVIOUS_PANEL_CLASS = 'e-previous-panel';\n/** @hidden */\nexport var NEXT_PANEL_CLASS = 'e-next-panel';\n/** @hidden */\nexport var TRANSLATE_CLASS = 'e-translate';\n/** @hidden */\nexport var LEFT_INDENT_CLASS = 'e-left-indent';\n/** @hidden */\nexport var LEFT_INDENT_WRAP_CLASS = 'e-left-indent-wrap';\n/** @hidden */\nexport var EVENT_TABLE_CLASS = 'e-event-table';\n/** @hidden */\nexport var RESOURCE_LEFT_TD_CLASS = 'e-resource-left-td';\n/** @hidden */\nexport var RESOURCE_GROUP_CELLS_CLASS = 'e-resource-group-cells';\n/** @hidden */\nexport var RESOURCE_TEXT_CLASS = 'e-resource-text';\n/** @hidden */\nexport var RESOURCE_COLUMN_WRAP_CLASS = 'e-resource-column-wrap';\n/** @hidden */\nexport var RESOURCE_COLUMN_TABLE_CLASS = 'e-resource-column-table';\n/** @hidden */\nexport var RESOURCE_CHILD_CLASS = 'e-child-node';\n/** @hidden */\nexport var RESOURCE_PARENT_CLASS = 'e-parent-node';\n/** @hidden */\nexport var RESOURCE_EXPAND_CLASS = 'e-resource-expand';\n/** @hidden */\nexport var RESOURCE_COLLAPSE_CLASS = 'e-resource-collapse';\n/** @hidden */\nexport var RESOURCE_TREE_ICON_CLASS = 'e-resource-tree-icon';\n/** @hidden */\nexport var RESOURCE_CELLS_CLASS = 'e-resource-cells';\n/** @hidden */\nexport var TIME_CELLS_WRAP_CLASS = 'e-time-cells-wrap';\n/** @hidden */\nexport var TIME_CELLS_CLASS = 'e-time-cells';\n/** @hidden */\nexport var ALTERNATE_CELLS_CLASS = 'e-alternate-cells';\n/** @hidden */\nexport var CURRENT_TIME_CLASS = 'e-current-time';\n/** @hidden */\nexport var CURRENT_TIMELINE_CLASS = 'e-current-timeline';\n/** @hidden */\nexport var PREVIOUS_TIMELINE_CLASS = 'e-previous-timeline';\n/** @hidden */\nexport var HIDE_CHILDS_CLASS = 'e-hide-childs';\n/** @hidden */\nexport var SCROLL_CONTAINER_CLASS = 'e-scroll-container';\n/** @hidden */\nexport var WRAPPER_CLASS = 'e-wrapper';\n/** @hidden */\nexport var TIMELINE_WRAPPER_CLASS = 'e-timeline-wrapper';\n/** @hidden */\nexport var APPOINTMENT_WRAPPER_CLASS = 'e-appointment-wrapper';\n/** @hidden */\nexport var DAY_WRAPPER_CLASS = 'e-day-wrapper';\n/** @hidden */\nexport var TOOLBAR_CONTAINER = 'e-schedule-toolbar-container';\n/** @hidden */\nexport var RESOURCE_TOOLBAR_CONTAINER = 'e-schedule-resource-toolbar-container';\n/** @hidden */\nexport var HEADER_TOOLBAR = 'e-schedule-toolbar';\n/** @hidden */\nexport var RESOURCE_HEADER_TOOLBAR = 'e-schedule-resource-toolbar';\n/** @hidden */\nexport var SELECTED_CELL_CLASS = 'e-selected-cell';\n/** @hidden */\nexport var WEEK_NUMBER_WRAPPER_CLASS = 'e-week-number-wrapper';\n/** @hidden */\nexport var WEEK_NUMBER_CLASS = 'e-week-number';\n/** @hidden */\nexport var APPOINTMENT_WRAP_CLASS = 'e-appointment-wrap';\n/** @hidden */\nexport var WRAPPER_CONTAINER_CLASS = 'e-wrapper-container';\n/** @hidden */\nexport var APPOINTMENT_CONTAINER_CLASS = 'e-appointment-container';\n/** @hidden */\nexport var APPOINTMENT_CLASS = 'e-appointment';\n/** @hidden */\nexport var APPOINTMENT_BORDER = 'e-appointment-border';\n/** @hidden */\nexport var APPOINTMENT_DETAILS = 'e-appointment-details';\n/** @hidden */\nexport var SUBJECT_WRAP = 'e-subject-wrap';\n/** @hidden */\nexport var RESOURCE_NAME = 'e-resource-name';\n/** @hidden */\nexport var APPOINTMENT_TIME = 'e-time';\n/** @hidden */\nexport var TABLE_WRAP_CLASS = 'e-table-wrap';\n/** @hidden */\nexport var OUTER_TABLE_CLASS = 'e-outer-table';\n/** @hidden */\nexport var CONTENT_WRAP_CLASS = 'e-content-wrap';\n/** @hidden */\nexport var AGENDA_CELLS_CLASS = 'e-agenda-cells';\n/** @hidden */\nexport var AGENDA_CURRENT_DAY_CLASS = 'e-current-day';\n/** @hidden */\nexport var AGENDA_SELECTED_CELL = 'e-active-appointment-agenda';\n/** @hidden */\nexport var AGENDA_MONTH_HEADER_CLASS = 'e-month-header';\n/** @hidden */\nexport var AGENDA_HEADER_CLASS = 'e-day-date-header';\n/** @hidden */\nexport var AGENDA_RESOURCE_CLASS = 'e-resource-column';\n/** @hidden */\nexport var AGENDA_DATE_CLASS = 'e-date-column';\n/** @hidden */\nexport var NAVIGATE_CLASS = 'e-navigate';\n/** @hidden */\nexport var DATE_HEADER_CLASS = 'e-date-header';\n/** @hidden */\nexport var AGENDA_DAY_BORDER_CLASS = 'e-day-border';\n/** @hidden */\nexport var DATE_BORDER_CLASS = 'e-date-border';\n/** @hidden */\nexport var AGENDA_DAY_PADDING_CLASS = 'e-day-padding';\n/** @hidden */\nexport var DATE_TIME_CLASS = 'e-date-time';\n/** @hidden */\nexport var DATE_TIME_WRAPPER_CLASS = 'e-date-time-wrapper';\n/** @hidden */\nexport var AGENDA_EMPTY_EVENT_CLASS = 'e-empty-event';\n/** @hidden */\nexport var AGENDA_NO_EVENT_CLASS = 'e-no-event';\n/** @hidden */\nexport var APPOINTMENT_INDICATOR_CLASS = 'e-appointment-indicator';\n/** @hidden */\nexport var EVENT_INDICATOR_CLASS = 'e-indicator';\n/** @hidden */\nexport var EVENT_ICON_UP_CLASS = 'e-up-icon';\n/** @hidden */\nexport var EVENT_ICON_DOWN_CLASS = 'e-down-icon';\n/** @hidden */\nexport var EVENT_ICON_LEFT_CLASS = 'e-left-icon';\n/** @hidden */\nexport var EVENT_ICON_RIGHT_CLASS = 'e-right-icon';\n/** @hidden */\nexport var EVENT_ACTION_CLASS = 'e-event-action';\n/** @hidden */\nexport var CLONE_ELEMENT_CLASS = 'e-schedule-event-clone';\n/** @hidden */\nexport var MONTH_CLONE_ELEMENT_CLASS = 'e-month-event';\n/** @hidden */\nexport var CLONE_TIME_INDICATOR_CLASS = 'e-clone-time-indicator';\n/** @hidden */\nexport var DRAG_CLONE_CLASS = 'e-drag-clone';\n/** @hidden */\nexport var EVENT_RESIZE_CLASS = 'e-event-resize';\n/** @hidden */\nexport var RESIZE_CLONE_CLASS = 'e-resize-clone';\n/** @hidden */\nexport var LEFT_RESIZE_HANDLER = 'e-left-handler';\n/** @hidden */\nexport var RIGHT_RESIZE_HANDLER = 'e-right-handler';\n/** @hidden */\nexport var TOP_RESIZE_HANDLER = 'e-top-handler';\n/** @hidden */\nexport var BOTTOM_RESIZE_HANDLER = 'e-bottom-handler';\n/** @hidden */\nexport var EVENT_RECURRENCE_ICON_CLASS = 'e-recurrence-icon';\n/** @hidden */\nexport var EVENT_RECURRENCE_EDIT_ICON_CLASS = 'e-recurrence-edit-icon';\n/** @hidden */\nexport var HEADER_ROW_CLASS = 'e-header-row';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_WRAPPER_CLASS = 'e-all-day-appointment-wrapper';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_CLASS = 'e-all-day-appointment';\n/** @hidden */\nexport var EVENT_COUNT_CLASS = 'e-appointment-hide';\n/** @hidden */\nexport var ROW_COUNT_WRAPPER_CLASS = 'e-row-count-wrapper';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_SECTION_CLASS = 'e-all-day-appointment-section';\n/** @hidden */\nexport var APPOINTMENT_ROW_EXPAND_CLASS = 'e-appointment-expand';\n/** @hidden */\nexport var APPOINTMENT_ROW_COLLAPSE_CLASS = 'e-appointment-collapse';\n/** @hidden */\nexport var MORE_INDICATOR_CLASS = 'e-more-indicator';\n/** @hidden */\nexport var CELL_POPUP_CLASS = 'e-cell-popup';\n/** @hidden */\nexport var EVENT_POPUP_CLASS = 'e-event-popup';\n/** @hidden */\nexport var MULTIPLE_EVENT_POPUP_CLASS = 'e-multiple-event-popup';\n/** @hidden */\nexport var POPUP_HEADER_CLASS = 'e-popup-header';\n/** @hidden */\nexport var POPUP_HEADER_ICON_WRAPPER = 'e-header-icon-wrapper';\n/** @hidden */\nexport var POPUP_CONTENT_CLASS = 'e-popup-content';\n/** @hidden */\nexport var POPUP_FOOTER_CLASS = 'e-popup-footer';\n/** @hidden */\nexport var DATE_TIME_DETAILS_CLASS = 'e-date-time-details';\n/** @hidden */\nexport var RECURRENCE_SUMMARY_CLASS = 'e-recurrence-summary';\n/** @hidden */\nexport var QUICK_POPUP_EVENT_DETAILS_CLASS = 'e-event-details';\n/** @hidden */\nexport var EVENT_CREATE_CLASS = 'e-event-create';\n/** @hidden */\nexport var EDIT_EVENT_CLASS = 'e-event-edit';\n/** @hidden */\nexport var DELETE_EVENT_CLASS = 'e-event-delete';\n/** @hidden */\nexport var TEXT_ELLIPSIS = 'e-text-ellipsis';\n/** @hidden */\nexport var MORE_POPUP_WRAPPER_CLASS = 'e-more-popup-wrapper';\n/** @hidden */\nexport var MORE_EVENT_POPUP_CLASS = 'e-more-event-popup';\n/** @hidden */\nexport var MORE_EVENT_HEADER_CLASS = 'e-more-event-header';\n/** @hidden */\nexport var MORE_EVENT_DATE_HEADER_CLASS = 'e-more-event-date-header';\n/** @hidden */\nexport var MORE_EVENT_HEADER_DAY_CLASS = 'e-header-day';\n/** @hidden */\nexport var MORE_EVENT_HEADER_DATE_CLASS = 'e-header-date';\n/** @hidden */\nexport var MORE_EVENT_CLOSE_CLASS = 'e-more-event-close';\n/** @hidden */\nexport var MORE_EVENT_CONTENT_CLASS = 'e-more-event-content';\n/** @hidden */\nexport var MORE_EVENT_WRAPPER_CLASS = 'e-more-appointment-wrapper';\n/** @hidden */\nexport var QUICK_DIALOG_CLASS = 'e-quick-dialog';\n/** @hidden */\nexport var QUICK_DIALOG_EDIT_EVENT_CLASS = 'e-quick-dialog-edit-event';\n/** @hidden */\nexport var QUICK_DIALOG_EDIT_SERIES_CLASS = 'e-quick-dialog-edit-series';\n/** @hidden */\nexport var QUICK_DIALOG_DELETE_CLASS = 'e-quick-dialog-delete';\n/** @hidden */\nexport var QUICK_DIALOG_CANCEL_CLASS = 'e-quick-dialog-cancel';\n/** @hidden */\nexport var QUICK_DIALOG_ALERT_BTN_CLASS = 'e-quick-dialog-alert-btn';\n/** @hidden */\nexport var EVENT_WINDOW_DIALOG_CLASS = 'e-schedule-dialog';\n/** @hidden */\nexport var FORM_CONTAINER_CLASS = 'e-form-container';\n/** @hidden */\nexport var FORM_CLASS = 'e-schedule-form';\n/** @hidden */\nexport var EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS = 'e-all-day-time-zone-row';\n/** @hidden */\nexport var EVENT_WINDOW_ALL_DAY_CLASS = 'e-all-day';\n/** @hidden */\nexport var TIME_ZONE_CLASS = 'e-time-zone';\n/** @hidden */\nexport var TIME_ZONE_ICON_CLASS = 'e-time-zone-icon';\n/** @hidden */\nexport var TIME_ZONE_DETAILS_CLASS = 'e-time-zone-details';\n/** @hidden */\nexport var EVENT_WINDOW_REPEAT_DIV_CLASS = 'e-repeat-parent-row';\n/** @hidden */\nexport var EVENT_WINDOW_REPEAT_CLASS = 'e-repeat';\n/** @hidden */\nexport var EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS = 'e-title-location-row';\n/** @hidden */\nexport var SUBJECT_CLASS = 'e-subject';\n/** @hidden */\nexport var LOCATION_CLASS = 'e-location';\n/** @hidden */\nexport var LOCATION_ICON_CLASS = 'e-location-icon';\n/** @hidden */\nexport var LOCATION_DETAILS_CLASS = 'e-location-details';\n/** @hidden */\nexport var EVENT_WINDOW_START_END_DIV_CLASS = 'e-start-end-row';\n/** @hidden */\nexport var EVENT_WINDOW_START_CLASS = 'e-start';\n/** @hidden */\nexport var EVENT_WINDOW_END_CLASS = 'e-end';\n/** @hidden */\nexport var EVENT_WINDOW_RESOURCES_DIV_CLASS = 'e-resources-row';\n/** @hidden */\nexport var DESCRIPTION_CLASS = 'e-description';\n/** @hidden */\nexport var DESCRIPTION_ICON_CLASS = 'e-description-icon';\n/** @hidden */\nexport var DESCRIPTION_DETAILS_CLASS = 'e-description-details';\n/** @hidden */\nexport var EVENT_WINDOW_TIME_ZONE_DIV_CLASS = 'e-time-zone-row';\n/** @hidden */\nexport var EVENT_WINDOW_START_TZ_CLASS = 'e-start-time-zone';\n/** @hidden */\nexport var EVENT_WINDOW_END_TZ_CLASS = 'e-end-time-zone';\n/** @hidden */\nexport var EVENT_WINDOW_BACK_ICON_CLASS = 'e-back-icon';\n/** @hidden */\nexport var EVENT_WINDOW_SAVE_ICON_CLASS = 'e-save-icon';\n/** @hidden */\nexport var EVENT_WINDOW_DELETE_BUTTON_CLASS = 'e-event-delete';\n/** @hidden */\nexport var EVENT_WINDOW_CANCEL_BUTTON_CLASS = 'e-event-cancel';\n/** @hidden */\nexport var EVENT_WINDOW_SAVE_BUTTON_CLASS = 'e-event-save';\n/** @hidden */\nexport var EVENT_WINDOW_DIALOG_PARENT_CLASS = 'e-dialog-parent';\n/** @hidden */\nexport var EVENT_WINDOW_TITLE_TEXT_CLASS = 'e-title-text';\n/** @hidden */\nexport var EVENT_WINDOW_ICON_DISABLE_CLASS = 'e-icon-disable';\n/** @hidden */\nexport var EDIT_CLASS = 'e-edit';\n/** @hidden */\nexport var EDIT_ICON_CLASS = 'e-edit-icon';\n/** @hidden */\nexport var DELETE_CLASS = 'e-delete';\n/** @hidden */\nexport var DELETE_ICON_CLASS = 'e-delete-icon';\n/** @hidden */\nexport var CLOSE_CLASS = 'e-close';\n/** @hidden */\nexport var CLOSE_ICON_CLASS = 'e-close-icon';\n/** @hidden */\nexport var ERROR_VALIDATION_CLASS = 'e-schedule-error';\n/** @hidden */\nexport var EVENT_TOOLTIP_ROOT_CLASS = 'e-schedule-event-tooltip';\n/** @hidden */\nexport var ALLDAY_ROW_ANIMATE_CLASS = 'e-animate';\n/** @hidden */\nexport var TIMESCALE_DISABLE = 'e-timescale-disable';\n/** @hidden */\nexport var DISABLE_DATE = 'e-disable-date';\n/** @hidden */\nexport var HIDDEN_CLASS = 'e-hidden';\n/** @hidden */\nexport var POPUP_WRAPPER_CLASS = 'e-quick-popup-wrapper';\n/** @hidden */\nexport var POPUP_TABLE_CLASS = 'e-popup-table';\n/** @hidden */\nexport var RESOURCE_MENU = 'e-resource-menu';\n/** @hidden */\nexport var RESOURCE_MENU_ICON = 'e-icon-menu';\n/** @hidden */\nexport var RESOURCE_LEVEL_TITLE = 'e-resource-level-title';\n/** @hidden */\nexport var RESOURCE_TREE = 'e-resource-tree';\n/** @hidden */\nexport var RESOURCE_TREE_POPUP_OVERLAY = 'e-resource-tree-popup-overlay';\n/** @hidden */\nexport var RESOURCE_TREE_POPUP = 'e-resource-tree-popup';\n/** @hidden */\nexport var RESOURCE_CLASS = 'e-resource';\n/** @hidden */\nexport var RESOURCE_ICON_CLASS = 'e-resource-icon';\n/** @hidden */\nexport var RESOURCE_DETAILS_CLASS = 'e-resource-details';\n/** @hidden */\nexport var DATE_TIME_ICON_CLASS = 'e-date-time-icon';\n","import { isNullOrUndefined, createElement, remove, closest, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { Calendar } from '@syncfusion/ej2-calendars';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Header module\n */\nvar HeaderRenderer = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function HeaderRenderer(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.renderHeader();\n this.addEventListener();\n }\n HeaderRenderer.prototype.addEventListener = function () {\n this.parent.on(events.documentClick, this.closeHeaderPopup, this);\n };\n HeaderRenderer.prototype.removeEventListener = function () {\n this.parent.off(events.documentClick, this.closeHeaderPopup);\n };\n HeaderRenderer.prototype.closeHeaderPopup = function (e) {\n var closestEle = closest(e.event.target, '.e-date-range,.e-header-popup,.e-day,.e-selected');\n if (!isNullOrUndefined(closestEle)) {\n return;\n }\n this.hideHeaderPopup();\n };\n /** @hidden */\n HeaderRenderer.prototype.hideHeaderPopup = function () {\n if (this.headerPopup) {\n this.headerPopup.hide();\n }\n };\n HeaderRenderer.prototype.renderHeader = function () {\n this.element = createElement('div', { className: cls.TOOLBAR_CONTAINER });\n var toolbarEle = createElement('div', { className: cls.HEADER_TOOLBAR });\n this.element.appendChild(toolbarEle);\n this.parent.element.insertBefore(this.element, this.parent.element.firstElementChild);\n this.renderToolbar();\n };\n HeaderRenderer.prototype.renderToolbar = function () {\n var items = this.getItems();\n var args = { requestType: 'toolbarItemRendering', items: items };\n this.parent.trigger(events.actionBegin, args);\n this.toolbarObj = new Toolbar({\n items: args.items,\n overflowMode: 'Popup',\n clicked: this.toolbarClickHandler.bind(this),\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale\n });\n this.toolbarObj.appendTo(this.parent.element.querySelector('.' + cls.HEADER_TOOLBAR));\n var prevNavEle = this.toolbarObj.element.querySelector('.e-prev');\n if (prevNavEle) {\n prevNavEle.firstChild.setAttribute('title', this.l10n.getConstant('previous'));\n }\n var nextNavEle = this.toolbarObj.element.querySelector('.e-next');\n if (nextNavEle) {\n nextNavEle.firstChild.setAttribute('title', this.l10n.getConstant('next'));\n }\n this.updateActiveView();\n this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: this.toolbarObj.items });\n };\n HeaderRenderer.prototype.updateItems = function () {\n if (this.toolbarObj) {\n var items = this.getItems();\n var args = { requestType: 'toolbarItemRendering', items: items };\n this.parent.trigger(events.actionBegin, args);\n this.toolbarObj.items = args.items;\n this.toolbarObj.dataBind();\n this.parent.trigger(events.actionComplete, {\n requestType: 'toolBarItemRendered',\n items: this.toolbarObj.items\n });\n }\n };\n HeaderRenderer.prototype.getPopUpRelativeElement = function () {\n if (this.parent.isAdaptive) {\n return this.toolbarObj.element;\n }\n return this.element.querySelector('.e-date-range');\n };\n HeaderRenderer.prototype.setDayOfWeek = function (index) {\n if (this.headerCalendar) {\n this.headerCalendar.firstDayOfWeek = index;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.setCalendarDate = function (date) {\n if (this.headerCalendar) {\n this.headerCalendar.value = date;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.getCalendarView = function () {\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'MonthAgenda') {\n return 'Year';\n }\n return 'Month';\n };\n HeaderRenderer.prototype.setCalendarView = function () {\n if (this.headerCalendar) {\n var calendarView = this.getCalendarView();\n this.headerCalendar.depth = calendarView;\n this.headerCalendar.start = calendarView;\n this.headerCalendar.refresh();\n }\n };\n HeaderRenderer.prototype.updateActiveView = function () {\n var selEle = this.toolbarObj.element.querySelectorAll('.e-views');\n removeClass(selEle, ['e-active-view']);\n if (selEle.length > 0 && selEle[this.parent.viewIndex]) {\n addClass([selEle[this.parent.viewIndex]], ['e-active-view']);\n }\n };\n HeaderRenderer.prototype.updateDateRange = function (text) {\n var selEle = this.toolbarObj.element.querySelector('.e-date-range');\n if (selEle) {\n selEle.setAttribute('aria-label', text);\n selEle.querySelector('.e-tbar-btn-text').innerHTML = text;\n this.toolbarObj.refreshOverflow();\n }\n };\n HeaderRenderer.prototype.getDateRangeText = function () {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n };\n HeaderRenderer.prototype.getItems = function () {\n var items = [];\n var showInPopup = this.parent.isAdaptive;\n items.push({\n align: 'Left', prefixIcon: 'e-icon-prev', tooltipText: 'Previous', overflow: 'Show',\n cssClass: 'e-prev', htmlAttributes: { 'aria-label': 'previous period' }\n });\n items.push({\n align: 'Left', prefixIcon: 'e-icon-next', tooltipText: 'Next', overflow: 'Show',\n cssClass: 'e-next', htmlAttributes: { 'aria-label': 'next period' }\n });\n items.push({\n align: 'Left', text: this.getDateRangeText(), suffixIcon: 'e-icon-down-arrow', cssClass: 'e-date-range',\n overflow: 'Show', htmlAttributes: { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title' }\n });\n if (this.parent.isAdaptive) {\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-add', text: this.l10n.getConstant('newEvent'),\n cssClass: 'e-add', overflow: 'Show'\n });\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-today', text: this.l10n.getConstant('today'),\n cssClass: 'e-today', overflow: 'Show'\n });\n }\n else {\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-day', text: this.l10n.getConstant('today'),\n cssClass: 'e-today', overflow: 'Show'\n });\n if (this.parent.views.length > 1) {\n items.push({\n align: 'Right', type: 'Separator', cssClass: 'e-schedule-seperator'\n });\n }\n }\n if (this.parent.views.length > 1) {\n for (var _i = 0, _a = this.parent.views; _i < _a.length; _i++) {\n var item = _a[_i];\n typeof (item) === 'string' ? items.push(this.getItemObject(item.toLowerCase(), null)) :\n items.push(this.getItemObject(item.option.toLowerCase(), item.displayName));\n }\n }\n return items;\n };\n HeaderRenderer.prototype.getItemObject = function (viewName, displayName) {\n var view;\n var showInPopup = this.parent.isAdaptive;\n switch (viewName) {\n case 'day':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-day',\n text: displayName || this.l10n.getConstant('day'), cssClass: 'e-views e-day'\n };\n break;\n case 'week':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-week',\n text: displayName || this.l10n.getConstant('week'), cssClass: 'e-views e-week'\n };\n break;\n case 'workweek':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-workweek',\n text: displayName || this.l10n.getConstant('workWeek'), cssClass: 'e-views e-work-week'\n };\n break;\n case 'month':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-month',\n text: displayName || this.l10n.getConstant('month'), cssClass: 'e-views e-month'\n };\n break;\n case 'agenda':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-agenda', text: this.l10n.getConstant('agenda'),\n cssClass: 'e-views e-agenda'\n };\n break;\n case 'monthagenda':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-month-agenda',\n text: this.l10n.getConstant('monthAgenda'), cssClass: 'e-views e-month-agenda'\n };\n break;\n case 'timelineday':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-timeline-day',\n text: displayName || this.l10n.getConstant('timelineDay'), cssClass: 'e-views e-timeline-day'\n };\n break;\n case 'timelineweek':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-timeline-week',\n text: displayName || this.l10n.getConstant('timelineWeek'), cssClass: 'e-views e-timeline-week'\n };\n break;\n case 'timelineworkweek':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-timeline-workweek',\n text: displayName || this.l10n.getConstant('timelineWorkWeek'), cssClass: 'e-views e-timeline-work-week'\n };\n break;\n case 'timelinemonth':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-timeline-month',\n text: displayName || this.l10n.getConstant('timelineMonth'), cssClass: 'e-views e-timeline-month'\n };\n break;\n }\n return view;\n };\n HeaderRenderer.prototype.renderHeaderPopup = function () {\n var headerPopupEle = createElement('div', { className: cls.HEADER_POPUP_CLASS });\n var headerCalendarEle = createElement('div', { className: cls.HEADER_CALENDAR_CLASS });\n headerPopupEle.appendChild(headerCalendarEle);\n this.element.appendChild(headerPopupEle);\n this.headerPopup = new Popup(headerPopupEle, {\n actionOnScroll: 'hide',\n targetType: 'relative',\n relateTo: this.getPopUpRelativeElement(),\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl\n });\n var calendarView = this.getCalendarView();\n this.headerCalendar = new Calendar({\n value: this.parent.selectedDate,\n firstDayOfWeek: this.parent.firstDayOfWeek,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n depth: calendarView,\n start: calendarView,\n change: this.calendarChange.bind(this)\n });\n this.headerCalendar.appendTo(headerCalendarEle);\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.calendarChange = function (args) {\n if (args.value.getTime() !== this.parent.selectedDate.getTime()) {\n this.parent.changeDate(args.value);\n }\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.calculateViewIndex = function (args) {\n var target = closest(args.originalEvent.target, '.e-views');\n var views = [].slice.call(this.element.querySelectorAll('.e-views'));\n return views.indexOf(target);\n };\n HeaderRenderer.prototype.toolbarClickHandler = function (args) {\n if (!args.item) {\n return;\n }\n var strClass = args.item.cssClass.replace('e-views ', '');\n switch (strClass) {\n case 'e-date-range':\n if (!this.headerPopup) {\n this.renderHeaderPopup();\n }\n if (this.headerPopup.element.classList.contains(cls.POPUP_OPEN)) {\n this.headerPopup.hide();\n }\n else {\n this.headerPopup.show();\n }\n break;\n case 'e-day':\n this.parent.changeView('Day', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-week':\n this.parent.changeView('Week', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-work-week':\n this.parent.changeView('WorkWeek', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-month':\n this.parent.changeView('Month', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-agenda':\n this.parent.changeView('Agenda', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n // case 'e-week-agenda':\n // this.parent.changeView('weekAgenda', args.originalEvent);\n // break;\n // case 'e-work-week-agenda':\n // this.parent.changeView('workWeekAgenda', args.originalEvent);\n // break;\n case 'e-month-agenda':\n this.parent.changeView('MonthAgenda', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-day':\n this.parent.changeView('TimelineDay', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-week':\n this.parent.changeView('TimelineWeek', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-work-week':\n this.parent.changeView('TimelineWorkWeek', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-timeline-month':\n this.parent.changeView('TimelineMonth', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-today':\n if (!this.parent.isSelectedDate(util.resetTime(new Date()))) {\n this.parent.changeDate(util.resetTime(new Date()), args.originalEvent);\n }\n break;\n case 'e-prev':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), args.originalEvent);\n break;\n case 'e-next':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), args.originalEvent);\n break;\n case 'e-add':\n var data = void 0;\n var isSameTime = this.parent.activeCellsData.startTime.getTime() === this.parent.activeCellsData.endTime.getTime();\n if (this.parent.activeCellsData && !isSameTime) {\n data = this.parent.activeCellsData;\n }\n else {\n var interval = this.parent.activeViewOptions.timeScale.interval;\n var slotCount = this.parent.activeViewOptions.timeScale.slotCount;\n var msInterval = (interval * util.MS_PER_MINUTE) / slotCount;\n var startTime = new Date(this.parent.selectedDate.getTime());\n startTime.setHours(new Date().getHours(), (Math.round(startTime.getMinutes() / msInterval) * msInterval), 0);\n var endTime = new Date(new Date(startTime.getTime()).setMilliseconds(startTime.getMilliseconds() + msInterval));\n data = { startTime: startTime, endTime: endTime, isAllDay: false };\n }\n this.parent.eventWindow.openEditor(extend(data, { cancel: false, event: args.originalEvent }), 'Add');\n break;\n }\n var toolbarPopUp = this.toolbarObj.element.querySelector('.e-toolbar-pop');\n if (toolbarPopUp) {\n toolbarPopUp.ej2_instances[0].hide({ name: 'SlideUp', duration: 100 });\n }\n };\n HeaderRenderer.prototype.getHeaderElement = function () {\n return this.toolbarObj.element;\n };\n HeaderRenderer.prototype.updateHeaderItems = function (classType) {\n var prevNavEle = this.toolbarObj.element.querySelector('.e-prev');\n var nextNavEle = this.toolbarObj.element.querySelector('.e-next');\n var dateRangeEle = this.toolbarObj.element.querySelector('.e-date-range');\n if (prevNavEle) {\n (classType === 'add') ? addClass([prevNavEle], cls.HIDDEN_CLASS) : removeClass([prevNavEle], cls.HIDDEN_CLASS);\n }\n if (nextNavEle) {\n (classType === 'add') ? addClass([nextNavEle], cls.HIDDEN_CLASS) : removeClass([nextNavEle], cls.HIDDEN_CLASS);\n }\n if (dateRangeEle) {\n (classType === 'add') ? addClass([dateRangeEle], cls.TEXT_ELLIPSIS) : removeClass([dateRangeEle], cls.TEXT_ELLIPSIS);\n }\n };\n /**\n * Get module name.\n */\n HeaderRenderer.prototype.getModuleName = function () {\n return 'headerbar';\n };\n /**\n * To destroy the headerbar.\n * @return {void}\n * @private\n */\n HeaderRenderer.prototype.destroy = function () {\n if (this.headerPopup) {\n this.headerPopup.destroy();\n }\n if (this.headerCalendar) {\n this.headerCalendar.destroy();\n }\n if (!this.toolbarObj.isDestroyed) {\n this.toolbarObj.destroy();\n this.removeEventListener();\n remove(this.element);\n }\n };\n return HeaderRenderer;\n}());\nexport { HeaderRenderer };\n","import { formatUnit } from '@syncfusion/ej2-base';\nimport { contentReady, uiUpdate, scrollUiUpdate } from '../base/constant';\n/**\n * `Scroll` module\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the scrolling.\n * @hidden\n */\n function Scroll(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * @hidden\n */\n Scroll.prototype.setWidth = function () {\n this.parent.element.style.width = formatUnit(this.parent.width);\n };\n /**\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n this.parent.element.style.height = formatUnit(this.parent.height);\n };\n /**\n * @hidden\n */\n Scroll.prototype.addEventListener = function () {\n this.parent.on(contentReady, this.setDimensions, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n };\n /**\n * @hidden\n */\n Scroll.prototype.removeEventListener = function () {\n this.parent.off(contentReady, this.setDimensions);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n };\n /**\n * @hidden\n */\n Scroll.prototype.setDimensions = function () {\n this.setWidth();\n this.setHeight();\n var data = { cssProperties: this.parent.getCssProperties(), module: this.getModuleName() };\n this.parent.notify(scrollUiUpdate, data);\n };\n /**\n * @hidden\n */\n Scroll.prototype.onPropertyChanged = function (e) {\n this.setDimensions();\n };\n /**\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Scroll;\n}());\nexport { Scroll };\n","import { addClass, removeClass, Touch, remove, EventHandler, Browser } from '@syncfusion/ej2-base';\nimport { closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * `touch` module is used to handle touch interactions.\n */\nvar ScheduleTouch = /** @class */ (function () {\n function ScheduleTouch(parent) {\n this.parent = parent;\n this.element = this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS);\n this.touchObj = new Touch(this.element, {\n scroll: this.scrollHandler.bind(this),\n swipe: this.swipeHandler.bind(this),\n tapHold: this.tapHoldHandler.bind(this),\n swipeSettings: { swipeThresholdDistance: 1 }\n });\n EventHandler.add(this.element, 'transitionend', this.onTransitionEnd, this);\n this.touchLeftDirection = this.parent.enableRtl ? 'Right' : 'Left';\n this.touchRightDirection = this.parent.enableRtl ? 'Left' : 'Right';\n }\n ScheduleTouch.prototype.scrollHandler = function (e) {\n if (this.parent.currentView === 'Agenda' || this.parent.uiStateValues.action ||\n (e.originalEvent && (e.originalEvent.target.classList.contains(cls.APPOINTMENT_CLASS) ||\n closest(e.originalEvent.target, '.' + cls.APPOINTMENT_CLASS)))) {\n return;\n }\n if (!this.timeStampStart) {\n this.timeStampStart = Date.now();\n }\n if (this.element.classList.contains(cls.TRANSLATE_CLASS)) {\n this.onTransitionEnd();\n }\n if (e.scrollDirection === 'Left' || e.scrollDirection === 'Right') {\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var scrollDiv = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (scrollDiv && scrollDiv.scrollWidth > scrollDiv.clientWidth) {\n return;\n }\n else {\n this.isScrollTriggered = true;\n e.originalEvent.preventDefault();\n e.originalEvent.stopPropagation();\n }\n }\n if (e.scrollDirection === this.touchLeftDirection) {\n if (!this.nextPanel) {\n this.renderPanel(cls.NEXT_PANEL_CLASS, 'next');\n this.nextPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.nextPanel.element);\n }\n var x = this.parent.enableRtl ? e.distanceX : -e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n else if (e.scrollDirection === this.touchRightDirection) {\n var prevWidth = 0;\n if (!this.previousPanel) {\n this.renderPanel(cls.PREVIOUS_PANEL_CLASS, 'previous');\n this.previousPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.previousPanel.element);\n prevWidth = this.previousPanel.element.offsetWidth;\n }\n var x = this.parent.enableRtl ? prevWidth - e.distanceX : -prevWidth + e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n };\n ScheduleTouch.prototype.swipeHandler = function (e) {\n if (!this.isScrollTriggered || this.parent.uiStateValues.action) {\n return;\n }\n this.isScrollTriggered = false;\n if (e.swipeDirection === 'Left' || e.swipeDirection === 'Right') {\n var time = Date.now() - this.timeStampStart;\n var offsetDist = (e.distanceX * (Browser.isDevice ? 6 : 1.66));\n if (offsetDist > time || (e.distanceX > (this.parent.element.offsetWidth / 2))) {\n this.swapPanels(e.swipeDirection);\n if (offsetDist > time && (e.distanceX > (this.parent.element.offsetWidth / 2))) {\n this.element.style.transitionDuration = ((offsetDist / time) / 10) + 's';\n }\n this.confirmSwipe(e.swipeDirection);\n }\n else {\n this.cancelSwipe();\n }\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionComplete, args);\n }\n else {\n this.cancelSwipe();\n }\n this.timeStampStart = null;\n };\n ScheduleTouch.prototype.tapHoldHandler = function (e) {\n var target = closest(e.originalEvent.target, '.' + cls.APPOINTMENT_CLASS);\n if (!isNullOrUndefined(target)) {\n if (this.parent.isAdaptive) {\n var event_1 = e.originalEvent;\n this.parent.notify(events.tapHoldReady, { event: event_1 });\n }\n return;\n }\n target = closest(e.originalEvent.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.'\n + cls.HEADER_CELLS_CLASS);\n if (!isNullOrUndefined(target)) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n if (!this.parent.activeViewOptions.readonly) {\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n }\n return;\n }\n };\n ScheduleTouch.prototype.renderPanel = function (clsName, nextPrevType) {\n if (!this.currentPanel) {\n this.currentPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.currentPanel.element);\n }\n else {\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n }\n this.parent.setProperties({ selectedDate: this.parent.activeView.getNextPreviousDate(nextPrevType) }, true);\n this.parent.activeView.getRenderDates();\n this.parent.activeView.renderLayout(clsName);\n };\n ScheduleTouch.prototype.swapPanels = function (direction) {\n if (direction === this.touchLeftDirection) {\n var temp = this.nextPanel;\n this.nextPanel = this.currentPanel;\n this.currentPanel = temp;\n }\n else {\n var temp = this.previousPanel;\n this.previousPanel = this.currentPanel;\n this.currentPanel = temp;\n }\n };\n ScheduleTouch.prototype.confirmSwipe = function (swipeDirection) {\n var previousDate = swipeDirection === this.touchLeftDirection ? this.nextPanel.selectedDate : this.previousPanel.selectedDate;\n var navArgs = {\n action: 'date', cancel: false, previousDate: previousDate, currentDate: this.currentPanel.selectedDate\n };\n this.parent.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n this.swapPanels(swipeDirection);\n this.cancelSwipe();\n return;\n }\n this.parent.activeView.setPanel(this.currentPanel.element);\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n var translateX;\n if (this.parent.enableRtl) {\n translateX = swipeDirection === this.touchLeftDirection ?\n (this.previousPanel ? this.previousPanel.element.offsetLeft : this.currentPanel.element.offsetWidth) : 0;\n }\n else {\n translateX = swipeDirection === this.touchLeftDirection ? -this.currentPanel.element.offsetLeft : 0;\n }\n addClass([this.element], cls.TRANSLATE_CLASS);\n this.element.style.transform = 'translatex(' + (translateX) + 'px)';\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n }\n this.parent.renderModule.refreshDataManager();\n };\n ScheduleTouch.prototype.cancelSwipe = function () {\n this.parent.activeView.setPanel(this.currentPanel.element);\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n this.parent.activeView.getRenderDates();\n this.parent.activeView.generateColumnLevels();\n addClass([this.element], cls.TRANSLATE_CLASS);\n var prevWidth = this.previousPanel ? this.previousPanel.element.offsetWidth : 0;\n this.element.style.transform = 'translatex(' + (this.parent.enableRtl ? prevWidth : -this.currentPanel.element.offsetLeft) + 'px)';\n };\n ScheduleTouch.prototype.onTransitionEnd = function () {\n removeClass([this.element], cls.TRANSLATE_CLASS);\n this.element.style.transitionDuration = '';\n this.element.style.transform = '';\n if (this.previousPanel) {\n remove(this.previousPanel.element);\n this.previousPanel = null;\n removeClass([this.currentPanel.element], cls.PREVIOUS_PANEL_CLASS);\n addClass([this.currentPanel.element], cls.CURRENT_PANEL_CLASS);\n }\n if (this.nextPanel) {\n remove(this.nextPanel.element);\n this.nextPanel = null;\n removeClass([this.currentPanel.element], cls.NEXT_PANEL_CLASS);\n addClass([this.currentPanel.element], cls.CURRENT_PANEL_CLASS);\n }\n this.currentPanel = null;\n this.parent.activeView.getPanel().style.width = '';\n };\n ScheduleTouch.prototype.getTranslateX = function (element) {\n var style = window.getComputedStyle(element);\n return new WebKitCSSMatrix(style.webkitTransform).m41;\n };\n ScheduleTouch.prototype.setDimensions = function (element) {\n element.style.width = (this.parent.element.clientWidth) + 'px';\n };\n ScheduleTouch.prototype.resetValues = function () {\n this.currentPanel = null;\n this.previousPanel = null;\n this.nextPanel = null;\n this.timeStampStart = null;\n this.element.style.transform = '';\n this.element.innerHTML = '';\n removeClass([this.element], cls.TRANSLATE_CLASS);\n };\n /**\n * @hidden\n */\n ScheduleTouch.prototype.destroy = function () {\n this.touchObj.destroy();\n EventHandler.remove(this.element, 'transitionend', this.onTransitionEnd);\n this.resetValues();\n };\n return ScheduleTouch;\n}());\nexport { ScheduleTouch };\n","import { KeyboardEvents, closest, EventHandler, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Keyboard interaction\n */\nvar KeyboardInteraction = /** @class */ (function () {\n function KeyboardInteraction(parent) {\n this.selectedCells = [];\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDownArrow: 'shift+downarrow',\n shiftUpArrow: 'shift+uparrow',\n shiftRightArrow: 'shift+rightarrow',\n shiftLeftArrow: 'shift+leftarrow',\n ctrlLeftArrow: 'ctrl+leftarrow',\n ctrlRightArrow: 'ctrl+rightarrow',\n altOne: 'alt+1',\n altTwo: 'alt+2',\n altThree: 'alt+3',\n altFour: 'alt+4',\n altFive: 'alt+5',\n altSix: 'alt+6',\n enter: 'enter',\n escape: 'escape',\n delete: 'delete',\n home: 'home',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n tab: 'tab',\n shiftTab: 'shift+tab'\n };\n this.parent = parent;\n this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;\n this.keyboardModule = new KeyboardEvents(this.parent.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.addEventListener();\n }\n KeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'downArrow':\n case 'shiftDownArrow':\n this.processDown(e, e.shiftKey);\n break;\n case 'upArrow':\n case 'shiftUpArrow':\n this.processUp(e, e.shiftKey);\n break;\n case 'leftArrow':\n case 'shiftLeftArrow':\n this.processLeft(e, e.shiftKey);\n break;\n case 'rightArrow':\n case 'shiftRightArrow':\n this.processRight(e, e.shiftKey);\n break;\n case 'ctrlLeftArrow':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-prev button').focus();\n }\n break;\n case 'ctrlRightArrow':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-next button').focus();\n }\n break;\n case 'altOne':\n case 'altTwo':\n case 'altThree':\n case 'altFour':\n case 'altFive':\n case 'altSix':\n this.processViewNavigation(e);\n break;\n case 'enter':\n this.processEnter(e);\n break;\n case 'home':\n this.focusFirstCell();\n break;\n case 'tab':\n case 'shiftTab':\n this.processTab(e, e.shiftKey);\n break;\n case 'delete':\n this.processDelete(e);\n break;\n case 'escape':\n this.processEscape();\n }\n };\n KeyboardInteraction.prototype.addEventListener = function () {\n this.parent.on(event.cellMouseDown, this.onCellMouseDown, this);\n };\n KeyboardInteraction.prototype.removeEventListener = function () {\n this.parent.off(event.cellMouseDown, this.onCellMouseDown);\n };\n KeyboardInteraction.prototype.onCellMouseDown = function (e) {\n if (e.event.shiftKey) {\n return;\n }\n this.initialTarget = this.getClosestCell(e.event);\n if (this.parent.activeViewOptions.readonly || this.parent.currentView === 'MonthAgenda' || !this.initialTarget) {\n return;\n }\n if (e.event.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.add(this.parent.getContentTable(), 'mousemove', this.onMouseSelection, this);\n EventHandler.add(this.parent.getContentTable(), 'mouseup', this.onMoveup, this);\n }\n if (e.event.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n EventHandler.add(allDayRow, 'mousemove', this.onMouseSelection, this);\n EventHandler.add(allDayRow, 'mouseup', this.onMoveup, this);\n }\n };\n KeyboardInteraction.prototype.onMouseSelection = function (e) {\n var target = this.getClosestCell(e);\n if (target) {\n this.selectCells(true, target);\n }\n };\n KeyboardInteraction.prototype.getClosestCell = function (e) {\n return closest(e.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS);\n };\n KeyboardInteraction.prototype.onAppointmentSelection = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n this.parent.eventBase.getSelectedEventElements(target);\n };\n KeyboardInteraction.prototype.onMoveup = function (e) {\n if (e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.remove(this.parent.getContentTable(), 'mousemove', this.onMouseSelection);\n EventHandler.remove(this.parent.getContentTable(), 'mouseup', this.onMoveup);\n }\n if (e.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n EventHandler.remove(allDayRow, 'mousemove', this.onMouseSelection);\n EventHandler.remove(allDayRow, 'mouseup', this.onMoveup);\n }\n };\n KeyboardInteraction.prototype.processEnter = function (e) {\n if (this.parent.activeViewOptions.readonly || this.isPreventAction(e)) {\n return;\n }\n var target = (e.target);\n if (closest(target, '.' + cls.POPUP_WRAPPER_CLASS)) {\n if (target.classList.contains(cls.QUICK_POPUP_EVENT_DETAILS_CLASS) ||\n target.classList.contains(cls.EVENT_CREATE_CLASS) ||\n target.classList.contains(cls.EDIT_EVENT_CLASS) ||\n target.classList.contains(cls.DELETE_EVENT_CLASS) ||\n target.classList.contains(cls.CLOSE_CLASS)) {\n target.click();\n e.preventDefault();\n }\n else if (target.classList.contains(cls.SUBJECT_CLASS)) {\n this.parent.element.querySelector('.' + cls.EVENT_CREATE_CLASS).click();\n e.preventDefault();\n }\n return;\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n if (this.selectedCells.length > 1) {\n var start = this.parent.getCellDetails(this.selectedCells[0]);\n var end = this.parent.getCellDetails(this.selectedCells[this.selectedCells.length - 1]);\n start.endTime = end.endTime;\n start.element = target;\n this.parent.activeCellsData = start;\n }\n else {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n }\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e });\n this.parent.notify(event.cellClick, args);\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS) || target.classList.contains(cls.MORE_EVENT_CLOSE_CLASS) ||\n target.classList.contains(cls.ALLDAY_APPOINTMENT_SECTION_CLASS) || target.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n target.click();\n return;\n }\n if (target.classList.contains(cls.MORE_EVENT_HEADER_DATE_CLASS)) {\n this.parent.setProperties({ selectedDate: new Date(parseInt(target.getAttribute('data-date'), 10)) }, true);\n this.parent.changeView(this.parent.getNavigateView());\n this.processEscape();\n return;\n }\n };\n KeyboardInteraction.prototype.getCells = function (isInverseTable, start, end) {\n var tableEle = this.parent.getContentTable();\n var cells = [].slice.call(tableEle.querySelectorAll('td'));\n var maxRow = tableEle.rows.length;\n var maxColumn = tableEle.rows[0].cells.length;\n if (start.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n cells = [].slice.call(allDayRow.cells);\n maxRow = 1;\n maxColumn = allDayRow.cells.length;\n }\n var startIndex = cells.indexOf(start);\n var endIndex = cells.indexOf(end);\n var inverseCells = [];\n if (isInverseTable) {\n for (var i = 0; i < maxColumn; i++) {\n for (var j = 0; j < maxRow; j++) {\n inverseCells.push(cells[maxColumn * j + i]);\n }\n }\n startIndex = inverseCells.indexOf(start);\n endIndex = inverseCells.indexOf(end);\n }\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n var sCells = isInverseTable ? inverseCells : cells;\n return sCells.slice(startIndex, endIndex + 1);\n };\n KeyboardInteraction.prototype.focusFirstCell = function () {\n if (this.parent.currentView === 'Agenda') {\n var focusCell = this.parent.getContentTable().querySelector('.' + cls.AGENDA_CELLS_CLASS);\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus();\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (this.parent.activeView.isTimelineView()) {\n var cell = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS +\n ' tr:not(.' + cls.HIDDEN_CLASS + ') .' + cls.WORK_CELLS_CLASS + ':not(.' + cls.RESOURCE_GROUP_CELLS_CLASS + ')');\n this.selectCells(false, cell);\n }\n else {\n this.selectCells(false, this.parent.getWorkCellElements()[0]);\n }\n };\n KeyboardInteraction.prototype.isInverseTableSelect = function () {\n return this.parent.activeView.isInverseTableSelect;\n };\n /** @hidden */\n KeyboardInteraction.prototype.selectCells = function (isMultiple, target) {\n this.parent.removeSelectedClass();\n if (isMultiple) {\n var initialId = void 0;\n var selectedCells = this.getCells(this.isInverseTableSelect(), this.initialTarget, target);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n initialId = this.initialTarget.getAttribute('data-group-index');\n var resourceSelectedCells = [];\n for (var i = 0; i < selectedCells.length; i++) {\n if (selectedCells[i].getAttribute('data-group-index') === initialId) {\n resourceSelectedCells.push(selectedCells[i]);\n }\n }\n selectedCells = resourceSelectedCells;\n }\n this.selectedCells = selectedCells;\n if (selectedCells.length > 2 && !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayCells = this.getAllDayCells(selectedCells);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceAllDayCells = [];\n for (var i = 0; i < allDayCells.length; i++) {\n if (allDayCells[i].getAttribute('data-group-index') === initialId) {\n resourceAllDayCells.push(allDayCells[i]);\n }\n }\n allDayCells = resourceAllDayCells;\n }\n selectedCells = selectedCells.concat(allDayCells);\n }\n if ((target.getAttribute('data-group-index') !== initialId) && this.parent.activeViewOptions.group.resources.length > 0) {\n target = this.selectedCells[this.selectedCells.length - 1];\n }\n this.parent.addSelectedClass(selectedCells, target);\n }\n else {\n this.initialTarget = target;\n this.selectedCells = [target];\n this.parent.addSelectedClass([target], target);\n }\n };\n KeyboardInteraction.prototype.selectAppointment = function (isReverse, target) {\n var appointments = this.getAppointmentElements();\n if (appointments.length < 0) {\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n var nextAppEle;\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n var targetIndex = appointments.indexOf(target);\n nextAppEle = appointments[(isReverse ? targetIndex - 1 : targetIndex + 1)];\n }\n else {\n nextAppEle = isReverse ? appointments[appointments.length - 1] : appointments[0];\n }\n if (nextAppEle) {\n this.parent.eventBase.addSelectedAppointments([nextAppEle]);\n nextAppEle.focus();\n addClass([nextAppEle], cls.AGENDA_SELECTED_CELL);\n }\n };\n KeyboardInteraction.prototype.selectAppointmentElementFromWorkCell = function (isReverse, target) {\n var _this = this;\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.parent.removeSelectedClass();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var appointmentElements_1 = this.getUniqueAppointmentElements();\n var filteredElements_1 = [];\n var selectedDate_1 = parseInt(target.getAttribute('data-date'), 10);\n var selectedSeriesEvents = this.parent.eventsProcessed.filter(function (eventObject) {\n return (!isReverse ? (eventObject[_this.parent.eventFields.startTime].getTime() >= selectedDate_1) :\n (eventObject[_this.parent.eventFields.startTime].getTime() <= selectedDate_1));\n });\n selectedSeriesEvents.filter(function (event) {\n appointmentElements_1.filter(function (element) {\n if (JSON.stringify(event.Guid) === JSON.stringify(element.getAttribute('data-guid'))) {\n filteredElements_1.push(element);\n }\n });\n });\n if (filteredElements_1.length > 0) {\n var selectedElement = isReverse ? filteredElements_1[filteredElements_1.length - 1] : filteredElements_1[0];\n var focusElements = this.getAppointmentElementsByGuid(selectedElement.getAttribute('data-guid'));\n this.parent.eventBase.addSelectedAppointments(focusElements);\n (focusElements[focusElements.length - 1]).focus();\n }\n }\n };\n KeyboardInteraction.prototype.getAllDayCells = function (cells) {\n var allDayRow = this.parent.getAllDayRow();\n if (!allDayRow) {\n return [];\n }\n var startCell = cells[0];\n var endCell = cells[cells.length - 1];\n var start = this.parent.getCellDetails(startCell);\n var end = this.parent.getCellDetails(endCell);\n if (end.endTime.getTime() - start.startTime.getTime() >= util.MS_PER_DAY) {\n var allDayCells = [].slice.call(allDayRow.cells);\n return allDayCells.slice(startCell.cellIndex, endCell.cellIndex + 1);\n }\n return [];\n };\n KeyboardInteraction.prototype.getAppointmentElements = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n };\n KeyboardInteraction.prototype.getAppointmentElementsByGuid = function (guid) {\n return [].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]'));\n };\n KeyboardInteraction.prototype.getUniqueAppointmentElements = function () {\n var appointments = this.getAppointmentElements();\n var appointmentElements = [];\n appointments.map(function (value) {\n return value.getAttribute('data-guid');\n }).filter(function (value, index, self) {\n if (self.indexOf(value) === index) {\n appointmentElements.push(appointments[index]);\n }\n });\n return appointmentElements;\n };\n KeyboardInteraction.prototype.getWorkCellFromAppointmentElement = function (target) {\n var selectedObject = this.parent.eventBase.getEventByGuid(target.getAttribute('data-guid'));\n return this.parent.eventBase.selectWorkCellByTime([selectedObject]);\n };\n KeyboardInteraction.prototype.processViewNavigation = function (e) {\n var index = parseInt(e.key, 10) - 1;\n if (index < this.parent.views.length) {\n var view = this.parent.viewCollections[index].option;\n this.parent.changeView(view, e, undefined, index);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-active-view button').focus();\n }\n }\n };\n KeyboardInteraction.prototype.processUp = function (e, isMultiple) {\n if ((isMultiple && (this.parent.activeView.isTimelineView() || this.parent.currentView === 'MonthAgenda'))) {\n return;\n }\n var target = (e.target);\n var selectedElements = this.parent.getSelectedElements();\n var selectedEventElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n var quickPopupWrapper = this.getQuickPopupElement();\n if (selectedElements.length > 0 && !e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n target = selectedElements[selectedElements.length - 1];\n }\n if (selectedEventElements.length > 0 && !moreEventWrapper.classList.contains(cls.POPUP_OPEN) &&\n !quickPopupWrapper.classList.contains(cls.POPUP_OPEN) &&\n ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.parent.currentView) !== -1) {\n target = this.getWorkCellFromAppointmentElement(selectedEventElements[selectedEventElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var tableRows = this.parent.getTableRows();\n var curRowIndex = tableRows.indexOf(target.parentElement);\n if (curRowIndex > 0 && curRowIndex < tableRows.length) {\n this.selectCells(isMultiple, (tableRows[curRowIndex - 1]).cells[target.cellIndex]);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(true, target);\n }\n };\n KeyboardInteraction.prototype.processDown = function (e, isMultiple) {\n if ((isMultiple && (this.parent.activeView.isTimelineView() || this.parent.currentView === 'MonthAgenda'))) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedElements();\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n var quickPopupWrapper = this.getQuickPopupElement();\n if (selectedCells.length > 0 && !e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n if (selectedElements.length > 0 && !moreEventWrapper.classList.contains(cls.POPUP_OPEN) &&\n !quickPopupWrapper.classList.contains(cls.POPUP_OPEN) &&\n ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.parent.currentView) !== -1) {\n target = this.getWorkCellFromAppointmentElement(selectedElements[selectedElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n var tableRows = this.parent.getTableRows();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var curRowIndex = tableRows.indexOf(target.parentElement);\n if (curRowIndex >= 0 && curRowIndex < tableRows.length - 1) {\n this.selectCells(isMultiple, (tableRows[curRowIndex + 1]).cells[target.cellIndex]);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(false, target);\n }\n };\n KeyboardInteraction.prototype.processLeftRight = function (target) {\n var tableEle = this.parent.getContentTable();\n var curRowIndex = target.parentNode.sectionRowIndex;\n var key = {\n element: tableEle,\n rowIndex: curRowIndex,\n columnIndex: target.cellIndex,\n maxIndex: tableEle.rows[curRowIndex].cells.length\n };\n return key;\n };\n KeyboardInteraction.prototype.getQuickPopupElement = function () {\n return (this.parent.isAdaptive ? document.body : this.parent.element).querySelector('.' + cls.POPUP_WRAPPER_CLASS);\n };\n KeyboardInteraction.prototype.isCancelLeftRightAction = function (e, isMultiple) {\n if (this.parent.currentView === 'Agenda' || (isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return true;\n }\n if ((this.isPreventAction(e) && isMultiple)) {\n return true;\n }\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n var quickPopupWrapper = this.getQuickPopupElement();\n if (moreEventWrapper.classList.contains(cls.POPUP_OPEN) || quickPopupWrapper.classList.contains(cls.POPUP_OPEN)) {\n return true;\n }\n return false;\n };\n KeyboardInteraction.prototype.processRight = function (e, isMultiple) {\n if (this.isCancelLeftRightAction(e, isMultiple)) {\n return;\n }\n var selectedCells = this.parent.getSelectedElements();\n var targetCell;\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\n var target = (e.target);\n if (selectedCells.length > 0 && !target.classList.contains(cls.WORK_CELLS_CLASS) &&\n !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n if (selectedAppointments.length > 0) {\n target = this.getWorkCellFromAppointmentElement(selectedAppointments[selectedAppointments.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (!target) {\n return;\n }\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target);\n if (key.columnIndex >= 0 && key.columnIndex < key.maxIndex - 1) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex].cells[target.cellIndex + 1], 'right');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (key.columnIndex === key.maxIndex - 1) {\n if (!this.isInverseTableSelect() && key.rowIndex < key.element.rows.length - 1) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex + 1].cells[0], 'right');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (!isMultiple) {\n var rowIndex = this.isInverseTableSelect() ? key.rowIndex : 0;\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n var tableEle = this.parent.getContentTable();\n this.selectCells(false, tableEle.rows[rowIndex].cells[0]);\n }\n }\n }\n else if (target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var curColIndex = target.cellIndex;\n var allDayRow = this.parent.getAllDayRow();\n var maxColIndex = allDayRow.cells.length;\n if (curColIndex >= 0 && curColIndex < maxColIndex - 1) {\n this.selectCells(isMultiple, allDayRow.cells[curColIndex + 1]);\n }\n else if (curColIndex === maxColIndex - 1 && !isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n var allDayRow_1 = this.parent.getAllDayRow();\n this.selectCells(false, allDayRow_1.cells[0]);\n }\n }\n };\n KeyboardInteraction.prototype.processLeft = function (e, isMultiple) {\n if (this.isCancelLeftRightAction(e, isMultiple)) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedElements();\n var targetCell;\n if (selectedCells.length > 0 && !target.classList.contains(cls.WORK_CELLS_CLASS) &&\n !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n if (selectedElements.length > 0) {\n target = this.getWorkCellFromAppointmentElement(selectedElements[selectedElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (!target) {\n return;\n }\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target);\n if (key.columnIndex > 0 && key.columnIndex < key.maxIndex) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex].cells[target.cellIndex - 1], 'left');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (key.columnIndex === 0) {\n if (!this.isInverseTableSelect() && key.rowIndex > 0) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex - 1].cells[key.maxIndex - 1], 'left');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (!isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n var tableEle = this.parent.getContentTable();\n var rowIndex = this.isInverseTableSelect() ? key.rowIndex : tableEle.rows.length - 1;\n this.selectCells(false, tableEle.rows[rowIndex].cells[key.maxIndex - 1]);\n }\n }\n }\n else if (target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var curColIndex = target.cellIndex;\n var allDayRow = this.parent.getAllDayRow();\n var maxColIndex = allDayRow.cells.length;\n if (curColIndex > 0 && curColIndex < maxColIndex) {\n this.selectCells(isMultiple, allDayRow.cells[curColIndex - 1]);\n }\n else if (curColIndex === 0 && !isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n var allDayRow_2 = this.parent.getAllDayRow();\n this.selectCells(false, allDayRow_2.cells[maxColIndex - 1]);\n }\n }\n };\n KeyboardInteraction.prototype.calculateNextPrevDate = function (currentCell, target, type) {\n var initialId = this.initialTarget.getAttribute('data-group-index');\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.currentView === 'Month') {\n if (target.getAttribute('data-group-index') !== initialId) {\n var currentDate = new Date(parseInt(currentCell.getAttribute('data-date'), 10));\n var nextPrevDate = (type === 'right') ? new Date(currentDate.setDate(currentDate.getDate() + 1))\n : new Date(currentDate.setDate(currentDate.getDate() - 1));\n target = [].slice.call(this.parent.element.querySelectorAll('td[data-date=\"'\n + nextPrevDate.getTime().toString() + '\"]' + '[data-group-index=\"' + initialId + '\"]'))[0];\n }\n }\n return target;\n };\n KeyboardInteraction.prototype.getFocusableElements = function (container) {\n var queryString = 'a[href]:not([tabindex=\"-1\"]),input:not([disabled]):not([tabindex=\"-1\"]),' +\n 'textarea:not([disabled]):not([tabindex=\"-1\"]),button:not([disabled]):not([tabindex=\"-1\"]),' +\n 'select:not([disabled]):not([tabindex=\"-1\"]),[tabindex]:not([tabindex=\"-1\"]),[contentEditable=true]:not([tabindex=\"-1\"])';\n return [].slice.call(container.querySelectorAll(queryString));\n };\n KeyboardInteraction.prototype.processTabOnPopup = function (e, popupElement) {\n var _this = this;\n var focusableElements = this.getFocusableElements(popupElement);\n focusableElements = focusableElements.filter(function (element) {\n var footerEle = _this.parent.element.querySelector('.' + cls.POPUP_FOOTER_CLASS);\n if (footerEle && footerEle.offsetParent) {\n return !(element.classList.contains(cls.EDIT_CLASS) || element.classList.contains(cls.DELETE_CLASS));\n }\n else {\n return !(element.classList.contains(cls.EDIT_EVENT_CLASS) || element.classList.contains(cls.DELETE_EVENT_CLASS));\n }\n });\n var firstEle = focusableElements[0];\n var lastEle = focusableElements[focusableElements.length - 1];\n if (!isNullOrUndefined(lastEle) && document.activeElement === lastEle && !e.shiftKey) {\n e.preventDefault();\n firstEle.focus();\n }\n if (!isNullOrUndefined(firstEle) && document.activeElement === firstEle && e.shiftKey) {\n e.preventDefault();\n lastEle.focus();\n }\n };\n KeyboardInteraction.prototype.processTab = function (e, isReverse) {\n var target = e.target;\n var popupWrapper = closest(target, '.' + cls.POPUP_WRAPPER_CLASS + ',.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (popupWrapper && popupWrapper.classList.contains(cls.POPUP_OPEN)) {\n if (popupWrapper.classList.contains(cls.MORE_POPUP_WRAPPER_CLASS)) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n this.processTabOnPopup(e, popupWrapper);\n return;\n }\n if (target.classList.contains(cls.ROOT)) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n var appointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\n if (selectedAppointments.length > 0) {\n target = selectedAppointments[selectedAppointments.length - 1];\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (!isReverse && target.getAttribute('data-guid') === appointments[appointments.length - 1].getAttribute('data-guid') ||\n isReverse && target.getAttribute('data-guid') === appointments[0].getAttribute('data-guid')) {\n return;\n }\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(isReverse, target);\n e.preventDefault();\n }\n return;\n }\n var selectedCells = this.parent.getSelectedElements();\n if (selectedCells.length > 0 && !target.classList.contains(cls.APPOINTMENT_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n this.selectAppointmentElementFromWorkCell(isReverse, target);\n e.preventDefault();\n return;\n }\n };\n KeyboardInteraction.prototype.processDelete = function (e) {\n if (document.activeElement.classList.contains(cls.APPOINTMENT_CLASS)) {\n addClass([document.activeElement], cls.APPOINTMENT_BORDER);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n this.parent.quickPopup.deleteClick();\n }\n };\n KeyboardInteraction.prototype.processEscape = function () {\n this.parent.quickPopup.onClosePopup();\n this.parent.quickPopup.morePopup.hide();\n if (this.parent.headerModule) {\n this.parent.headerModule.hideHeaderPopup();\n }\n };\n KeyboardInteraction.prototype.isPreventAction = function (e) {\n var target = closest(e.target, '.' + cls.RESOURCE_GROUP_CELLS_CLASS);\n if (this.parent.activeView.isTimelineView() && !isNullOrUndefined(target)) {\n return true;\n }\n return false;\n };\n /**\n * Get module name.\n */\n KeyboardInteraction.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n KeyboardInteraction.prototype.destroy = function () {\n this.removeEventListener();\n this.keyboardModule.destroy();\n };\n return KeyboardInteraction;\n}());\nexport { KeyboardInteraction };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and data source.\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n * @private\n */\n function Data(dataSource, query) {\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n * @return {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from schedule model\n * @return {void}\n * @private\n */\n Data.prototype.generateQuery = function (startDate, endDate) {\n var query = this.query.clone();\n if (startDate) {\n query.addParams('StartDate', startDate.toISOString());\n }\n if (endDate) {\n query.addParams('EndDate', endDate.toISOString());\n }\n return query;\n };\n /**\n * The function used to get dataSource by executing given Query\n * @param {Query} query - A Query that specifies to generate dataSource\n * @return {void}\n * @private\n */\n Data.prototype.getData = function (query) {\n return this.dataManager.executeQuery(query);\n };\n return Data;\n}());\nexport { Data };\n","/**\n * Time zone\n */\nvar Timezone = /** @class */ (function () {\n function Timezone() {\n }\n Timezone.prototype.offset = function (date, timezone) {\n var localOffset = date.getTimezoneOffset();\n try {\n var convertedDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n if (!isNaN(convertedDate.getTime())) {\n return ((date.getTime() - convertedDate.getTime()) / 60000) + localOffset;\n }\n return 0;\n }\n catch (error) {\n return 0;\n }\n };\n Timezone.prototype.convert = function (date, fromOffset, toOffset) {\n if (typeof fromOffset === 'string') {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset === 'string') {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n };\n Timezone.prototype.add = function (date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n };\n Timezone.prototype.remove = function (date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n };\n Timezone.prototype.removeLocalOffset = function (date) {\n return new Date(+date - (date.getTimezoneOffset() * 60000));\n };\n return Timezone;\n}());\nexport { Timezone };\nexport var localTimezoneName = window.Intl ?\n Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC' : 'UTC';\nexport var timezoneData = [\n { Value: 'Pacific/Niue', Text: '(UTC-11:00) Niue' },\n { Value: 'Pacific/Pago_Pago', Text: '(UTC-11:00) Pago Pago' },\n { Value: 'Pacific/Honolulu', Text: '(UTC-10:00) Hawaii Time' },\n { Value: 'Pacific/Rarotonga', Text: '(UTC-10:00) Rarotonga' },\n { Value: 'Pacific/Tahiti', Text: '(UTC-10:00) Tahiti' },\n { Value: 'Pacific/Marquesas', Text: '(UTC-09:30) Marquesas' },\n { Value: 'America/Anchorage', Text: '(UTC-09:00) Alaska Time' },\n { Value: 'Pacific/Gambier', Text: '(UTC-09:00) Gambier' },\n { Value: 'America/Los_Angeles', Text: '(UTC-08:00) Pacific Time' },\n { Value: 'America/Tijuana', Text: '(UTC-08:00) Pacific Time - Tijuana' },\n { Value: 'America/Vancouver', Text: '(UTC-08:00) Pacific Time - Vancouver' },\n { Value: 'America/Whitehorse', Text: '(UTC-08:00) Pacific Time - Whitehorse' },\n { Value: 'Pacific/Pitcairn', Text: '(UTC-08:00) Pitcairn' },\n { Value: 'America/Denver', Text: '(UTC-07:00) Mountain Time' },\n { Value: 'America/Phoenix', Text: '(UTC-07:00) Mountain Time - Arizona' },\n { Value: 'America/Mazatlan', Text: '(UTC-07:00) Mountain Time - Chihuahua, Mazatlan' },\n { Value: 'America/Dawson_Creek', Text: '(UTC-07:00) Mountain Time - Dawson Creek' },\n { Value: 'America/Edmonton', Text: '(UTC-07:00) Mountain Time - Edmonton' },\n { Value: 'America/Hermosillo', Text: '(UTC-07:00) Mountain Time - Hermosillo' },\n { Value: 'America/Yellowknife', Text: '(UTC-07:00) Mountain Time - Yellowknife' },\n { Value: 'America/Belize', Text: '(UTC-06:00) Belize' },\n { Value: 'America/Chicago', Text: '(UTC-06:00) Central Time' },\n { Value: 'America/Mexico_City', Text: '(UTC-06:00) Central Time - Mexico City' },\n { Value: 'America/Regina', Text: '(UTC-06:00) Central Time - Regina' },\n { Value: 'America/Tegucigalpa', Text: '(UTC-06:00) Central Time - Tegucigalpa' },\n { Value: 'America/Winnipeg', Text: '(UTC-06:00) Central Time - Winnipeg' },\n { Value: 'America/Costa_Rica', Text: '(UTC-06:00) Costa Rica' },\n { Value: 'America/El_Salvador', Text: '(UTC-06:00) El Salvador' },\n { Value: 'Pacific/Galapagos', Text: '(UTC-06:00) Galapagos' },\n { Value: 'America/Guatemala', Text: '(UTC-06:00) Guatemala' },\n { Value: 'America/Managua', Text: '(UTC-06:00) Managua' },\n { Value: 'America/Cancun', Text: '(UTC-05:00) America Cancun' },\n { Value: 'America/Bogota', Text: '(UTC-05:00) Bogota' },\n { Value: 'Pacific/Easter', Text: '(UTC-05:00) Easter Island' },\n { Value: 'America/New_York', Text: '(UTC-05:00) Eastern Time' },\n { Value: 'America/Iqaluit', Text: '(UTC-05:00) Eastern Time - Iqaluit' },\n { Value: 'America/Toronto', Text: '(UTC-05:00) Eastern Time - Toronto' },\n { Value: 'America/Guayaquil', Text: '(UTC-05:00) Guayaquil' },\n { Value: 'America/Havana', Text: '(UTC-05:00) Havana' },\n { Value: 'America/Jamaica', Text: '(UTC-05:00) Jamaica' },\n { Value: 'America/Lima', Text: '(UTC-05:00) Lima' },\n { Value: 'America/Nassau', Text: '(UTC-05:00) Nassau' },\n { Value: 'America/Panama', Text: '(UTC-05:00) Panama' },\n { Value: 'America/Port-au-Prince', Text: '(UTC-05:00) Port-au-Prince' },\n { Value: 'America/Rio_Branco', Text: '(UTC-05:00) Rio Branco' },\n { Value: 'America/Halifax', Text: '(UTC-04:00) Atlantic Time - Halifax' },\n { Value: 'America/Barbados', Text: '(UTC-04:00) Barbados' },\n { Value: 'Atlantic/Bermuda', Text: '(UTC-04:00) Bermuda' },\n { Value: 'America/Boa_Vista', Text: '(UTC-04:00) Boa Vista' },\n { Value: 'America/Caracas', Text: '(UTC-04:00) Caracas' },\n { Value: 'America/Curacao', Text: '(UTC-04:00) Curacao' },\n { Value: 'America/Grand_Turk', Text: '(UTC-04:00) Grand Turk' },\n { Value: 'America/Guyana', Text: '(UTC-04:00) Guyana' },\n { Value: 'America/La_Paz', Text: '(UTC-04:00) La Paz' },\n { Value: 'America/Manaus', Text: '(UTC-04:00) Manaus' },\n { Value: 'America/Martinique', Text: '(UTC-04:00) Martinique' },\n { Value: 'America/Port_of_Spain', Text: '(UTC-04:00) Port of Spain' },\n { Value: 'America/Porto_Velho', Text: '(UTC-04:00) Porto Velho' },\n { Value: 'America/Puerto_Rico', Text: '(UTC-04:00) Puerto Rico' },\n { Value: 'America/Santo_Domingo', Text: '(UTC-04:00) Santo Domingo' },\n { Value: 'America/Thule', Text: '(UTC-04:00) Thule' },\n { Value: 'America/St_Johns', Text: '(UTC-03:30) Newfoundland Time - St. Johns' },\n { Value: 'America/Araguaina', Text: '(UTC-03:00) Araguaina' },\n { Value: 'America/Asuncion', Text: '(UTC-03:00) Asuncion' },\n { Value: 'America/Belem', Text: '(UTC-03:00) Belem' },\n { Value: 'America/Argentina/Buenos_Aires', Text: '(UTC-03:00) Buenos Aires' },\n { Value: 'America/Campo_Grande', Text: '(UTC-03:00) Campo Grande' },\n { Value: 'America/Cayenne', Text: '(UTC-03:00) Cayenne' },\n { Value: 'America/Cuiaba', Text: '(UTC-03:00) Cuiaba' },\n { Value: 'America/Fortaleza', Text: '(UTC-03:00) Fortaleza' },\n { Value: 'America/Godthab', Text: '(UTC-03:00) Godthab' },\n { Value: 'America/Maceio', Text: '(UTC-03:00) Maceio' },\n { Value: 'America/Miquelon', Text: '(UTC-03:00) Miquelon' },\n { Value: 'America/Montevideo', Text: '(UTC-03:00) Montevideo' },\n { Value: 'Antarctica/Palmer', Text: '(UTC-03:00) Palmer' },\n { Value: 'America/Paramaribo', Text: '(UTC-03:00) Paramaribo' },\n { Value: 'America/Punta_Arenas', Text: '(UTC-03:00) Punta Arenas' },\n { Value: 'America/Recife', Text: '(UTC-03:00) Recife' },\n { Value: 'Antarctica/Rothera', Text: '(UTC-03:00) Rothera' },\n { Value: 'America/Bahia', Text: '(UTC-03:00) Salvador' },\n { Value: 'America/Santiago', Text: '(UTC-03:00) Santiago' },\n { Value: 'Atlantic/Stanley', Text: '(UTC-03:00) Stanley' },\n { Value: 'America/Noronha', Text: '(UTC-02:00) Noronha' },\n { Value: 'America/Sao_Paulo', Text: '(UTC-02:00) Sao Paulo' },\n { Value: 'Atlantic/South_Georgia', Text: '(UTC-02:00) South Georgia' },\n { Value: 'Atlantic/Azores', Text: '(UTC-01:00) Azores' },\n { Value: 'Atlantic/Cape_Verde', Text: '(UTC-01:00) Cape Verde' },\n { Value: 'America/Scoresbysund', Text: '(UTC-01:00) Scoresbysund' },\n { Value: 'Africa/Abidjan', Text: '(UTC+00:00) Abidjan' },\n { Value: 'Africa/Accra', Text: '(UTC+00:00) Accra' },\n { Value: 'Africa/Bissau', Text: '(UTC+00:00) Bissau' },\n { Value: 'Atlantic/Canary', Text: '(UTC+00:00) Canary Islands' },\n { Value: 'Africa/Casablanca', Text: '(UTC+00:00) Casablanca' },\n { Value: 'America/Danmarkshavn', Text: '(UTC+00:00) Danmarkshavn' },\n { Value: 'Europe/Dublin', Text: '(UTC+00:00) Dublin' },\n { Value: 'Africa/El_Aaiun', Text: '(UTC+00:00) El Aaiun' },\n { Value: 'Atlantic/Faroe', Text: '(UTC+00:00) Faeroe' },\n { Value: 'Etc/UTC', Text: '(UTC+00:00) UTC (no daylight saving)' },\n { Value: 'Europe/Lisbon', Text: '(UTC+00:00) Lisbon' },\n { Value: 'Europe/London', Text: '(UTC+00:00) London' },\n { Value: 'Africa/Monrovia', Text: '(UTC+00:00) Monrovia' },\n { Value: 'Atlantic/Reykjavik', Text: '(UTC+00:00) Reykjavik' },\n { Value: 'UTC', Text: 'UTC' },\n { Value: 'Africa/Algiers', Text: '(UTC+01:00) Algiers' },\n { Value: 'Europe/Amsterdam', Text: '(UTC+01:00) Amsterdam' },\n { Value: 'Europe/Andorra', Text: '(UTC+01:00) Andorra' },\n { Value: 'Europe/Berlin', Text: '(UTC+01:00) Berlin' },\n { Value: 'Europe/Brussels', Text: '(UTC+01:00) Brussels' },\n { Value: 'Europe/Budapest', Text: '(UTC+01:00) Budapest' },\n { Value: 'Europe/Belgrade', Text: '(UTC+01:00) Central European Time - Belgrade' },\n { Value: 'Europe/Prague', Text: '(UTC+01:00) Central European Time - Prague' },\n { Value: 'Africa/Ceuta', Text: '(UTC+01:00) Ceuta' },\n { Value: 'Europe/Copenhagen', Text: '(UTC+01:00) Copenhagen' },\n { Value: 'Europe/Gibraltar', Text: '(UTC+01:00) Gibraltar' },\n { Value: 'Africa/Lagos', Text: '(UTC+01:00) Lagos' },\n { Value: 'Europe/Luxembourg', Text: '(UTC+01:00) Luxembourg' },\n { Value: 'Europe/Madrid', Text: '(UTC+01:00) Madrid' },\n { Value: 'Europe/Malta', Text: '(UTC+01:00) Malta' },\n { Value: 'Europe/Monaco', Text: '(UTC+01:00) Monaco' },\n { Value: 'Africa/Ndjamena', Text: '(UTC+01:00) Ndjamena' },\n { Value: 'Europe/Oslo', Text: '(UTC+01:00) Oslo' },\n { Value: 'Europe/Paris', Text: '(UTC+01:00) Paris' },\n { Value: 'Europe/Rome', Text: '(UTC+01:00) Rome' },\n { Value: 'Europe/Stockholm', Text: '(UTC+01:00) Stockholm' },\n { Value: 'Europe/Tirane', Text: '(UTC+01:00) Tirane' },\n { Value: 'Africa/Tunis', Text: '(UTC+01:00) Tunis' },\n { Value: 'Europe/Vienna', Text: '(UTC+01:00) Vienna' },\n { Value: 'Europe/Warsaw', Text: '(UTC+01:00) Warsaw' },\n { Value: 'Europe/Zurich', Text: '(UTC+01:00) Zurich' },\n { Value: 'Asia/Amman', Text: '(UTC+02:00) Amman' },\n { Value: 'Europe/Athens', Text: '(UTC+02:00) Athens' },\n { Value: 'Asia/Beirut', Text: '(UTC+02:00) Beirut' },\n { Value: 'Europe/Bucharest', Text: '(UTC+02:00) Bucharest' },\n { Value: 'Africa/Cairo', Text: '(UTC+02:00) Cairo' },\n { Value: 'Europe/Chisinau', Text: '(UTC+02:00) Chisinau' },\n { Value: 'Asia/Damascus', Text: '(UTC+02:00) Damascus' },\n { Value: 'Asia/Gaza', Text: '(UTC+02:00) Gaza' },\n { Value: 'Europe/Helsinki', Text: '(UTC+02:00) Helsinki' },\n { Value: 'Asia/Jerusalem', Text: '(UTC+02:00) Jerusalem' },\n { Value: 'Africa/Johannesburg', Text: '(UTC+02:00) Johannesburg' },\n { Value: 'Africa/Khartoum', Text: '(UTC+02:00) Khartoum' },\n { Value: 'Europe/Kiev', Text: '(UTC+02:00) Kiev' },\n { Value: 'Africa/Maputo', Text: '(UTC+02:00) Maputo' },\n { Value: 'Europe/Kaliningrad', Text: '(UTC+02:00) Moscow-01 - Kaliningrad' },\n { Value: 'Asia/Nicosia', Text: '(UTC+02:00) Nicosia' },\n { Value: 'Europe/Riga', Text: '(UTC+02:00) Riga' },\n { Value: 'Europe/Sofia', Text: '(UTC+02:00) Sofia' },\n { Value: 'Europe/Tallinn', Text: '(UTC+02:00) Tallinn' },\n { Value: 'Africa/Tripoli', Text: '(UTC+02:00) Tripoli' },\n { Value: 'Europe/Vilnius', Text: '(UTC+02:00) Vilnius' },\n { Value: 'Africa/Windhoek', Text: '(UTC+02:00) Windhoek' },\n { Value: 'Asia/Baghdad', Text: '(UTC+03:00) Baghdad' },\n { Value: 'Europe/Istanbul', Text: '(UTC+03:00) Istanbul' },\n { Value: 'Europe/Minsk', Text: '(UTC+03:00) Minsk' },\n { Value: 'Europe/Moscow', Text: '(UTC+03:00) Moscow+00 - Moscow' },\n { Value: 'Africa/Nairobi', Text: '(UTC+03:00) Nairobi' },\n { Value: 'Asia/Qatar', Text: '(UTC+03:00) Qatar' },\n { Value: 'Asia/Riyadh', Text: '(UTC+03:00) Riyadh' },\n { Value: 'Antarctica/Syowa', Text: '(UTC+03:00) Syowa' },\n { Value: 'Asia/Tehran', Text: '(UTC+03:30) Tehran' },\n { Value: 'Asia/Baku', Text: '(UTC+04:00) Baku' },\n { Value: 'Asia/Dubai', Text: '(UTC+04:00) Dubai' },\n { Value: 'Indian/Mahe', Text: '(UTC+04:00) Mahe' },\n { Value: 'Indian/Mauritius', Text: '(UTC+04:00) Mauritius' },\n { Value: 'Europe/Samara', Text: '(UTC+04:00) Moscow+01 - Samara' },\n { Value: 'Indian/Reunion', Text: '(UTC+04:00) Reunion' },\n { Value: 'Asia/Tbilisi', Text: '(UTC+04:00) Tbilisi' },\n { Value: 'Asia/Yerevan', Text: '(UTC+04:00) Yerevan' },\n { Value: 'Asia/Kabul', Text: '(UTC+04:30) Kabul' },\n { Value: 'Asia/Aqtau', Text: '(UTC+05:00) Aqtau' },\n { Value: 'Asia/Aqtobe', Text: '(UTC+05:00) Aqtobe' },\n { Value: 'Asia/Ashgabat', Text: '(UTC+05:00) Ashgabat' },\n { Value: 'Asia/Dushanbe', Text: '(UTC+05:00) Dushanbe' },\n { Value: 'Asia/Karachi', Text: '(UTC+05:00) Karachi' },\n { Value: 'Indian/Kerguelen', Text: '(UTC+05:00) Kerguelen' },\n { Value: 'Indian/Maldives', Text: '(UTC+05:00) Maldives' },\n { Value: 'Antarctica/Mawson', Text: '(UTC+05:00) Mawson' },\n { Value: 'Asia/Yekaterinburg', Text: '(UTC+05:00) Moscow+02 - Yekaterinburg' },\n { Value: 'Asia/Tashkent', Text: '(UTC+05:00) Tashkent' },\n { Value: 'Asia/Colombo', Text: '(UTC+05:30) Colombo' },\n { Value: 'Asia/Kolkata', Text: '(UTC+05:30) India Standard Time' },\n { Value: 'Asia/Katmandu', Text: '(UTC+05:45) Katmandu' },\n { Value: 'Asia/Almaty', Text: '(UTC+06:00) Almaty' },\n { Value: 'Asia/Bishkek', Text: '(UTC+06:00) Bishkek' },\n { Value: 'Indian/Chagos', Text: '(UTC+06:00) Chagos' },\n { Value: 'Asia/Dhaka', Text: '(UTC+06:00) Dhaka' },\n { Value: 'Asia/Omsk', Text: '(UTC+06:00) Moscow+03 - Omsk' },\n { Value: 'Asia/Thimphu', Text: '(UTC+06:00) Thimphu' },\n { Value: 'Antarctica/Vostok', Text: '(UTC+06:00) Vostok' },\n { Value: 'Indian/Cocos', Text: '(UTC+06:30) Cocos' },\n { Value: 'Asia/Yangon', Text: '(UTC+06:30) Rangoon' },\n { Value: 'Asia/Bangkok', Text: '(UTC+07:00) Bangkok' },\n { Value: 'Indian/Christmas', Text: '(UTC+07:00) Christmas' },\n { Value: 'Antarctica/Davis', Text: '(UTC+07:00) Davis' },\n { Value: 'Asia/Saigon', Text: '(UTC+07:00) Hanoi' },\n { Value: 'Asia/Hovd', Text: '(UTC+07:00) Hovd' },\n { Value: 'Asia/Jakarta', Text: '(UTC+07:00) Jakarta' },\n { Value: 'Asia/Krasnoyarsk', Text: '(UTC+07:00) Moscow+04 - Krasnoyarsk' },\n { Value: 'Asia/Brunei', Text: '(UTC+08:00) Brunei' },\n { Value: 'Asia/Shanghai', Text: '(UTC+08:00) China Time - Beijing' },\n { Value: 'Asia/Choibalsan', Text: '(UTC+08:00) Choibalsan' },\n { Value: 'Asia/Hong_Kong', Text: '(UTC+08:00) Hong Kong' },\n { Value: 'Asia/Kuala_Lumpur', Text: '(UTC+08:00) Kuala Lumpur' },\n { Value: 'Asia/Macau', Text: '(UTC+08:00) Macau' },\n { Value: 'Asia/Makassar', Text: '(UTC+08:00) Makassar' },\n { Value: 'Asia/Manila', Text: '(UTC+08:00) Manila' },\n { Value: 'Asia/Irkutsk', Text: '(UTC+08:00) Moscow+05 - Irkutsk' },\n { Value: 'Asia/Singapore', Text: '(UTC+08:00) Singapore' },\n { Value: 'Asia/Taipei', Text: '(UTC+08:00) Taipei' },\n { Value: 'Asia/Ulaanbaatar', Text: '(UTC+08:00) Ulaanbaatar' },\n { Value: 'Australia/Perth', Text: '(UTC+08:00) Western Time - Perth' },\n { Value: 'Asia/Pyongyang', Text: '(UTC+08:30) Pyongyang' },\n { Value: 'Asia/Dili', Text: '(UTC+09:00) Dili' },\n { Value: 'Asia/Jayapura', Text: '(UTC+09:00) Jayapura' },\n { Value: 'Asia/Yakutsk', Text: '(UTC+09:00) Moscow+06 - Yakutsk' },\n { Value: 'Pacific/Palau', Text: '(UTC+09:00) Palau' },\n { Value: 'Asia/Seoul', Text: '(UTC+09:00) Seoul' },\n { Value: 'Asia/Tokyo', Text: '(UTC+09:00) Tokyo' },\n { Value: 'Australia/Darwin', Text: '(UTC+09:30) Central Time - Darwin' },\n { Value: 'Antarctica/DumontDUrville', Text: '(UTC+10:00) Dumont D\"Urville' },\n { Value: 'Australia/Brisbane', Text: '(UTC+10:00) Eastern Time - Brisbane' },\n { Value: 'Pacific/Guam', Text: '(UTC+10:00) Guam' },\n { Value: 'Asia/Vladivostok', Text: '(UTC+10:00) Moscow+07 - Vladivostok' },\n { Value: 'Pacific/Port_Moresby', Text: '(UTC+10:00) Port Moresby' },\n { Value: 'Pacific / Chuuk', Text: '(UTC+10:00) Truk' },\n { Value: 'Australia/Adelaide', Text: '(UTC+10:30) Central Time - Adelaide' },\n { Value: 'Antarctica/Casey', Text: '(UTC+11:00) Casey' },\n { Value: 'Australia/Hobart', Text: '(UTC+11:00) Eastern Time - Hobart' },\n { Value: 'Australia/Sydney', Text: '(UTC+11:00) Eastern Time - Melbourne, Sydney' },\n { Value: 'Pacific/Efate', Text: '(UTC+11:00) Efate' },\n { Value: 'Pacific/Guadalcanal', Text: '(UTC+11:00) Guadalcanal' },\n { Value: 'Pacific/Kosrae', Text: '(UTC+11:00) Kosrae' },\n { Value: 'Asia/Magadan', Text: '(UTC+11:00) Moscow+08 - Magadan' },\n { Value: 'Pacific / Norfolk', Text: '(UTC+11:00) Norfolk' },\n { Value: 'Pacific/Noumea', Text: '(UTC+11:00) Noumea' },\n { Value: 'Pacific/Pohnpei', Text: '(UTC+11:00) Ponape' },\n { Value: 'Pacific/Funafuti', Text: '(UTC+12:00) Funafuti' },\n { Value: 'Pacific/Kwajalein', Text: '(UTC+12:00) Kwajalein' },\n { Value: 'Pacific/Majuro', Text: '(UTC+12:00) Majuro' },\n { Value: 'Asia/Kamchatka', Text: '(UTC+12:00) Moscow+09 - Petropavlovsk - Kamchatskiy' },\n { Value: 'Pacific / Nauru', Text: '(UTC+12:00) Nauru' },\n { Value: 'Pacific/Tarawa', Text: '(UTC+12:00) Tarawa' },\n { Value: 'Pacific/Wake', Text: '(UTC+12:00) Wake' },\n { Value: 'Pacific/Wallis', Text: '(UTC+12:00) Wallis' },\n { Value: 'Pacific/Auckland', Text: '(UTC+13:00) Auckland' },\n { Value: 'Pacific/Enderbury', Text: '(UTC+13:00) Enderbury' },\n { Value: 'Pacific/Fakaofo', Text: '(UTC+13:00) Fakaofo' },\n { Value: 'Pacific/Fiji', Text: '(UTC+13:00) Fiji' },\n { Value: 'Pacific/Tongatapu', Text: '(UTC+13:00) Tongatapu' },\n { Value: 'Pacific/Apia', Text: '(UTC+14:00) Apia' },\n { Value: 'Pacific/Kiritimati', Text: '(UTC+14:00) Kiritimati' }\n];\n","import { isNullOrUndefined, closest, extend, EventHandler, uniqueID } from '@syncfusion/ej2-base';\nimport { createElement, prepend, append, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { Timezone } from '../timezone/timezone';\nimport { generate } from '../../recurrence-editor/date-generator';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\n/**\n * EventBase for appointment rendering\n */\nvar EventBase = /** @class */ (function () {\n /**\n * Constructor for EventBase\n */\n function EventBase(parent) {\n this.slots = [];\n this.parent = parent;\n this.timezone = new Timezone();\n }\n EventBase.prototype.processData = function (events, timeZonePropChanged, oldTimezone) {\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var fields = this.parent.eventFields;\n this.parent.eventsProcessed = [];\n var processed = [];\n var temp = 1;\n var generateID = false;\n if (events.length > 0 && isNullOrUndefined(events[0][fields.id])) {\n generateID = true;\n }\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n if (generateID) {\n event_1[fields.id] = temp++;\n }\n if (typeof event_1[fields.startTime] === 'string') {\n event_1[fields.startTime] = util.getDateFromString(event_1[fields.startTime]);\n }\n if (typeof event_1[fields.endTime] === 'string') {\n event_1[fields.endTime] = util.getDateFromString(event_1[fields.endTime]);\n }\n if (timeZonePropChanged) {\n this.processTimezoneChange(event_1, oldTimezone);\n }\n else {\n this.processTimezone(event_1);\n }\n if (!isNullOrUndefined(event_1[fields.recurrenceRule]) && isNullOrUndefined(event_1[fields.recurrenceID])) {\n processed = processed.concat(this.generateOccurrence(event_1));\n }\n else {\n event_1.Guid = this.generateGuid();\n processed.push(event_1);\n }\n }\n this.parent.eventsProcessed = this.filterEvents(start, end, processed);\n return processed;\n };\n EventBase.prototype.timezonePropertyChange = function (oldTimezone) {\n var processed = this.processData(this.parent.eventsData, true, oldTimezone);\n this.parent.notify(event.dataReady, { processedData: processed });\n };\n /** @private */\n EventBase.prototype.timezoneConvert = function (eventData) {\n var fields = this.parent.eventFields;\n eventData[fields.startTimezone] = eventData[fields.startTimezone] || eventData[fields.endTimezone];\n eventData[fields.endTimezone] = eventData[fields.endTimezone] || eventData[fields.startTimezone];\n if (this.parent.timezone) {\n var startTz = eventData[fields.startTimezone];\n var endTz = eventData[fields.endTimezone];\n eventData[fields.startTime] =\n this.timezone.convert(eventData[fields.startTime], this.parent.timezone, startTz);\n eventData[fields.endTime] =\n this.timezone.convert(eventData[fields.endTime], this.parent.timezone, endTz);\n }\n };\n EventBase.prototype.processTimezoneChange = function (event, oldTimezone) {\n var fields = this.parent.eventFields;\n if (oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.timezone.convert(event[fields.startTime], oldTimezone, this.parent.timezone);\n event[fields.endTime] = this.timezone.convert(event[fields.endTime], oldTimezone, this.parent.timezone);\n }\n else if (!oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.timezone.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], this.parent.timezone);\n }\n else if (oldTimezone && !this.parent.timezone) {\n event[fields.startTime] = this.timezone.remove(event[fields.startTime], oldTimezone);\n event[fields.endTime] = this.timezone.remove(event[fields.endTime], oldTimezone);\n }\n };\n EventBase.prototype.processTimezone = function (event) {\n var fields = this.parent.eventFields;\n if (event[fields.startTimezone] || event[fields.endTimezone]) {\n var startTimezone = event[fields.startTimezone] || event[fields.endTimezone];\n var endTimezone = event[fields.endTimezone] || event[fields.startTimezone];\n event[fields.startTime] = this.timezone.add(event[fields.startTime], startTimezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], endTimezone);\n if (this.parent.timezone) {\n var zone = this.parent.timezone;\n event[fields.startTime] = this.timezone.convert(event[fields.startTime], startTimezone, zone);\n event[fields.endTime] = this.timezone.convert(event[fields.endTime], endTimezone, zone);\n }\n }\n else if (this.parent.timezone) {\n event[fields.startTime] = this.timezone.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], this.parent.timezone);\n }\n };\n EventBase.prototype.filterEvents = function (startDate, endDate, appointments, resourceTdData) {\n if (appointments === void 0) { appointments = this.parent.eventsProcessed; }\n var fieldMapping = this.parent.eventFields;\n var predicate = new Predicate(fieldMapping.startTime, 'greaterthanorequal', startDate).\n and(new Predicate(fieldMapping.endTime, 'greaterthanorequal', startDate)).\n and(new Predicate(fieldMapping.startTime, 'lessthan', endDate)).\n or(new Predicate(fieldMapping.startTime, 'lessthanorequal', startDate).\n and(new Predicate(fieldMapping.endTime, 'greaterthan', startDate)));\n var filter = new DataManager({ json: appointments }).executeLocal(new Query().where(predicate));\n if (resourceTdData) {\n filter = this.filterEventsByResource(resourceTdData, filter);\n }\n return this.sortByTime(filter);\n };\n EventBase.prototype.filterEventsByResource = function (resourceTdData, appointments) {\n if (appointments === void 0) { appointments = this.parent.eventsProcessed; }\n var predicate;\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n for (var level = 0; level < resourceCollection.length; level++) {\n var operator = this.parent.activeViewOptions.group.allowGroupEdit && resourceCollection[level].allowMultiple ?\n 'contains' : 'equal';\n var tempPredicate = new Predicate(resourceCollection[level].field, operator, resourceTdData.groupOrder[level]);\n predicate = predicate ? predicate.and(tempPredicate) : tempPredicate;\n }\n return new DataManager({ json: appointments }).executeLocal(new Query().where(predicate));\n };\n EventBase.prototype.sortByTime = function (appointments) {\n var fieldMapping = this.parent.eventFields;\n appointments.sort(function (a, b) {\n var d1 = a[fieldMapping.startTime];\n var d2 = b[fieldMapping.startTime];\n return d1.getTime() - d2.getTime();\n });\n return appointments;\n };\n EventBase.prototype.sortByDateTime = function (appointments) {\n var fieldMapping = this.parent.eventFields;\n appointments.sort(function (object1, object2) {\n var d3 = object1[fieldMapping.startTime];\n var d4 = object2[fieldMapping.startTime];\n var d5 = object1[fieldMapping.endTime];\n var d6 = object2[fieldMapping.endTime];\n var d1 = d5.getTime() - d3.getTime();\n var d2 = d6.getTime() - d4.getTime();\n return (d3.getTime() - d4.getTime() || d2 - d1);\n });\n return appointments;\n };\n EventBase.prototype.getSmallestMissingNumber = function (array) {\n var large = Math.max.apply(Math, array);\n for (var i = 0; i < large; i++) {\n if (array.indexOf(i) === -1) {\n return i;\n }\n }\n return large + 1;\n };\n EventBase.prototype.splitEventByDay = function (event) {\n var eventFields = this.parent.eventFields;\n var data = [];\n var eventStartTime = event[eventFields.startTime];\n var eventEndTime = event[eventFields.endTime];\n var isDifferentDate = util.resetTime(new Date(eventStartTime.getTime())) <\n util.resetTime(new Date(eventEndTime.getTime()));\n if (isDifferentDate) {\n var start = new Date(eventStartTime.getTime());\n var end = util.addDays(util.resetTime(new Date(eventStartTime.getTime())), 1);\n var endDate = (eventEndTime.getHours() === 0 && eventEndTime.getMinutes() === 0) ?\n eventEndTime : util.addDays(eventEndTime, 1);\n var index = 1;\n var eventLength = util.getDaysCount(eventStartTime.getTime(), endDate.getTime());\n while (end <= eventEndTime) {\n var app = extend({}, event);\n app[eventFields.startTime] = start;\n app[eventFields.endTime] = end;\n app.data = { index: index, count: eventLength };\n app.Guid = this.generateGuid();\n app.isSpanned = true;\n data.push(app);\n start = end;\n if ((new Date(start.getTime()).setHours(0, 0, 0, 0) === new Date(eventEndTime.getTime()).setHours(0, 0, 0, 0))\n && !(end.getTime() === eventEndTime.getTime())) {\n end = new Date(new Date(start.getTime()).setHours(eventEndTime.getHours(), eventEndTime.getMinutes()));\n }\n else {\n end = util.addDays(util.resetTime(new Date(start.getTime())), 1);\n }\n index++;\n }\n }\n else {\n data.push(event);\n }\n return data;\n };\n EventBase.prototype.splitEvent = function (event, dateRender) {\n var fields = this.parent.eventFields;\n var start = util.resetTime(new Date(event[fields.startTime] + '')).getTime();\n var end = util.resetTime(new Date(event[fields.endTime] + '')).getTime();\n if (util.getDateInMs(event[fields.endTime]) <= 0) {\n var temp = util.addDays(util.resetTime(new Date(event[fields.endTime] + '')), -1).getTime();\n end = start > temp ? start : temp;\n }\n var orgStart = start;\n var orgEnd = end;\n var ranges = [];\n if (start !== end) {\n if (start < dateRender[0].getTime()) {\n start = dateRender[0].getTime();\n }\n if (end > dateRender[dateRender.length - 1].getTime()) {\n end = dateRender[dateRender.length - 1].getTime();\n }\n var cStart = start;\n for (var level = 0; level < this.slots.length; level++) {\n var slot = this.slots[level];\n var firstSlot = slot[0];\n cStart = (cStart <= firstSlot && end >= firstSlot) ? firstSlot : cStart;\n if (cStart > end || firstSlot > end) {\n break;\n }\n if (!this.parent.activeViewOptions.group.byDate && this.parent.activeViewOptions.showWeekend &&\n this.parent.currentView !== 'WorkWeek' && this.parent.currentView !== 'TimelineWorkWeek') {\n var startIndex = slot.indexOf(cStart);\n if (startIndex !== -1) {\n var endIndex = slot.indexOf(end);\n var hasBreak = endIndex !== -1;\n endIndex = hasBreak ? endIndex : slot.length - 1;\n var count = ((endIndex - startIndex) + 1);\n var isLeft = (slot[startIndex] !== orgStart);\n var isRight = (slot[endIndex] !== orgEnd);\n ranges.push(this.cloneEventObject(event, slot[startIndex], slot[endIndex], count, isLeft, isRight));\n if (hasBreak) {\n break;\n }\n }\n }\n else {\n if (this.dateInRange(cStart, slot[0], slot[slot.length - 1])) {\n var availSlot = [];\n for (var i = 0; i < slot.length; i++) {\n if (this.dateInRange(slot[i], orgStart, orgEnd)) {\n availSlot.push(slot[i]);\n }\n }\n if (availSlot.length > 0) {\n if (!this.parent.activeViewOptions.group.byDate) {\n var isLeft = (availSlot[0] !== orgStart);\n var isRight = (availSlot[availSlot.length - 1] !== orgEnd);\n ranges.push(this.cloneEventObject(event, availSlot[0], availSlot[availSlot.length - 1], availSlot.length, isLeft, isRight));\n }\n else {\n for (var _i = 0, availSlot_1 = availSlot; _i < availSlot_1.length; _i++) {\n var slot_1 = availSlot_1[_i];\n ranges.push(this.cloneEventObject(event, slot_1, slot_1, 1, (slot_1 !== orgStart), (slot_1 !== orgEnd)));\n }\n }\n }\n }\n }\n }\n }\n else {\n ranges.push(this.cloneEventObject(event, start, end, 1, false, false));\n }\n return ranges;\n };\n EventBase.prototype.cloneEventObject = function (event, start, end, count, isLeft, isRight) {\n var fields = this.parent.eventFields;\n var e = extend({}, event, null, true);\n var data = { count: count, isLeft: isLeft, isRight: isRight };\n data[fields.startTime] = event[fields.startTime];\n data[fields.endTime] = event[fields.endTime];\n e.data = data;\n e[fields.startTime] = new Date(start);\n e[fields.endTime] = new Date(end);\n return e;\n };\n EventBase.prototype.dateInRange = function (date, start, end) {\n return start <= date && date <= end;\n };\n EventBase.prototype.getSelectedEventElements = function (target) {\n this.removeSelectedAppointmentClass();\n if (this.parent.selectedElements.length <= 0) {\n this.parent.selectedElements.push(target);\n }\n else {\n var isAlreadySelected = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') === target.getAttribute('data-guid');\n });\n if (isAlreadySelected.length <= 0) {\n var focusElements = [].slice.call(this.parent.element.\n querySelectorAll('div[data-guid=\"' + target.getAttribute('data-guid') + '\"]'));\n for (var _i = 0, focusElements_1 = focusElements; _i < focusElements_1.length; _i++) {\n var element = focusElements_1[_i];\n this.parent.selectedElements.push(element);\n }\n }\n else {\n var selectedElements = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') !== target.getAttribute('data-guid');\n });\n this.parent.selectedElements = selectedElements;\n }\n }\n if (target && this.parent.selectedElements.length > 0) {\n this.addSelectedAppointments(this.parent.selectedElements);\n }\n return this.parent.selectedElements;\n };\n EventBase.prototype.getSelectedEvents = function () {\n var _this = this;\n var eventSelect = [];\n var elementSelect = [];\n var selectAppointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n selectAppointments.filter(function (element) {\n eventSelect.push(_this.getEventByGuid(element.getAttribute('data-guid')));\n elementSelect.push(element);\n });\n return {\n event: eventSelect.length > 1 ? eventSelect : eventSelect[0],\n element: elementSelect.length > 1 ? elementSelect : elementSelect[0]\n };\n };\n EventBase.prototype.removeSelectedAppointmentClass = function () {\n var selectedAppointments = this.getSelectedAppointments();\n for (var _i = 0, selectedAppointments_1 = selectedAppointments; _i < selectedAppointments_1.length; _i++) {\n var appointment = selectedAppointments_1[_i];\n appointment.setAttribute('aria-selected', 'false');\n }\n removeClass(selectedAppointments, cls.APPOINTMENT_BORDER);\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n removeClass(selectedAppointments, cls.AGENDA_SELECTED_CELL);\n }\n };\n EventBase.prototype.addSelectedAppointments = function (cells) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n cell.setAttribute('aria-selected', 'true');\n }\n this.parent.removeSelectedClass();\n addClass(cells, cls.APPOINTMENT_BORDER);\n };\n EventBase.prototype.getSelectedAppointments = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER + ',.' + cls.APPOINTMENT_CLASS + ':focus'));\n };\n EventBase.prototype.focusElement = function () {\n var selectedCell = this.parent.getSelectedElements();\n if (selectedCell.length > 0) {\n if (this.parent.keyboardInteractionModule) {\n var target = ((!isNullOrUndefined(this.parent.activeCellsData) &&\n this.parent.activeCellsData.element) || selectedCell[selectedCell.length - 1]);\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n return;\n }\n var selectedAppointments = this.getSelectedAppointments();\n if (selectedAppointments.length > 0) {\n selectedAppointments[selectedAppointments.length - 1].focus();\n return;\n }\n };\n EventBase.prototype.selectWorkCellByTime = function (eventsData) {\n var target;\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n return target;\n }\n if (eventsData.length > 0) {\n var selectedObject = eventsData[eventsData.length - 1];\n var eventStartTime = selectedObject[this.parent.eventFields.startTime];\n var nearestTime = new Date(+eventStartTime).setMinutes(0, 0, 0);\n var isAllDay = this.isAllDayAppointment(selectedObject);\n if (this.parent.currentView === 'Month' || isAllDay) {\n nearestTime = new Date(+eventStartTime).setHours(0, 0, 0, 0);\n }\n var targetArea = void 0;\n if (isAllDay && ['Day', 'Week', 'WorkWeek'].indexOf(this.parent.currentView) !== -1) {\n targetArea = this.parent.getAllDayRow();\n }\n else {\n targetArea = this.parent.getContentTable();\n }\n var queryString = '[data-date=\"' + nearestTime + '\"]';\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n queryString += '[data-group-index=\"' + this.getGroupIndexFromEvent(selectedObject) + '\"]';\n }\n target = targetArea.querySelector(queryString);\n if (target) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n if (this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n return target;\n }\n }\n return target;\n };\n EventBase.prototype.getGroupIndexFromEvent = function (eventData) {\n var groupOrder = [];\n var groupIndex = 0;\n for (var _i = 0, _a = this.parent.resourceBase.resourceCollection; _i < _a.length; _i++) {\n var resourceData = _a[_i];\n groupOrder.push(eventData[resourceData.field]);\n }\n this.parent.resourceBase.lastResourceLevel.forEach(function (resource) {\n var count;\n var order = resource.groupOrder;\n order.forEach(function (resIndex, index) {\n var resValue = (groupOrder[index] instanceof Array) ? groupOrder[index][index] : groupOrder[index];\n if (resValue === resIndex) {\n count = count ? count + 1 : 1;\n }\n });\n if (order.length === count) {\n groupIndex = resource.groupIndex;\n }\n });\n return groupIndex;\n };\n EventBase.prototype.isAllDayAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var isAllDay = event[fieldMapping.isAllDay];\n var isFullDay = ((event[fieldMapping.endTime].getTime() - event[fieldMapping.startTime].getTime())\n / util.MS_PER_DAY) >= 1;\n return (isAllDay || isFullDay) ? true : false;\n };\n EventBase.prototype.addEventListener = function () {\n this.parent.on(event.documentClick, this.appointmentBorderRemove, this);\n };\n EventBase.prototype.appointmentBorderRemove = function (event) {\n var element = event.event.target;\n if (closest(element, '.' + cls.APPOINTMENT_CLASS)) {\n this.parent.removeSelectedClass();\n }\n else if (!closest(element, '.' + cls.POPUP_OPEN)) {\n this.removeSelectedAppointmentClass();\n }\n };\n EventBase.prototype.wireAppointmentEvents = function (element, isAllDay) {\n if (isAllDay === void 0) { isAllDay = false; }\n EventHandler.add(element, 'click', this.eventClick, this);\n EventHandler.add(element, 'dblclick', this.eventDoubleClick, this);\n if (!this.parent.activeViewOptions.readonly && ['Agenda', 'MonthAgenda'].indexOf(this.parent.currentView) === -1) {\n if (this.parent.resizeModule) {\n this.parent.resizeModule.wireResizeEvent(element);\n }\n if (this.parent.dragAndDropModule) {\n this.parent.dragAndDropModule.wireDragEvent(element, isAllDay);\n }\n }\n };\n EventBase.prototype.renderResizeHandler = function (element, spanEvent) {\n if (!this.parent.resizeModule || !this.parent.allowResizing || this.parent.activeViewOptions.readonly) {\n return;\n }\n for (var _i = 0, _a = Object.keys(spanEvent); _i < _a.length; _i++) {\n var resizeEdge = _a[_i];\n var resizeHandler = createElement('div', { className: cls.EVENT_RESIZE_CLASS });\n switch (resizeEdge) {\n case 'isLeft':\n if (!spanEvent.isLeft) {\n resizeHandler.appendChild(createElement('div', { className: 'e-left-right-resize' }));\n addClass([resizeHandler], this.parent.enableRtl ? cls.RIGHT_RESIZE_HANDLER : cls.LEFT_RESIZE_HANDLER);\n prepend([resizeHandler], element);\n }\n break;\n case 'isRight':\n if (!spanEvent.isRight) {\n resizeHandler.appendChild(createElement('div', { className: 'e-left-right-resize' }));\n addClass([resizeHandler], this.parent.enableRtl ? cls.LEFT_RESIZE_HANDLER : cls.RIGHT_RESIZE_HANDLER);\n append([resizeHandler], element);\n }\n break;\n case 'isTop':\n if (!spanEvent.isTop) {\n resizeHandler.appendChild(createElement('div', { className: 'e-top-bottom-resize' }));\n addClass([resizeHandler], cls.TOP_RESIZE_HANDLER);\n prepend([resizeHandler], element);\n }\n break;\n case 'isBottom':\n if (!spanEvent.isBottom) {\n resizeHandler.appendChild(createElement('div', { className: 'e-top-bottom-resize' }));\n addClass([resizeHandler], cls.BOTTOM_RESIZE_HANDLER);\n append([resizeHandler], element);\n }\n break;\n }\n }\n };\n EventBase.prototype.eventClick = function (eventData) {\n var target = eventData.target;\n if (target.classList.contains(cls.DRAG_CLONE_CLASS) || target.classList.contains(cls.RESIZE_CLONE_CLASS)) {\n return;\n }\n if (eventData.ctrlKey && eventData.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.quickPopup.quickPopup.hide();\n this.parent.selectedElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n this.parent.keyboardInteractionModule.onAppointmentSelection(eventData);\n return;\n }\n this.removeSelectedAppointmentClass();\n this.activeEventData(eventData);\n var args = extend(this.parent.activeEventData, { cancel: false });\n this.parent.trigger(event.eventClick, args);\n if (args.cancel) {\n this.removeSelectedAppointmentClass();\n return;\n }\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n addClass([args.element], cls.AGENDA_SELECTED_CELL);\n }\n this.parent.notify(event.eventClick, this.parent.activeEventData);\n };\n EventBase.prototype.eventDoubleClick = function (e) {\n this.parent.quickPopup.quickPopupHide(true);\n if (e.type === 'touchstart') {\n this.activeEventData(e);\n }\n this.removeSelectedAppointmentClass();\n var fieldMapping = this.parent.eventFields;\n if (!isNullOrUndefined(this.parent.activeEventData.event) &&\n isNullOrUndefined(this.parent.activeEventData.event[fieldMapping.recurrenceID])) {\n this.parent.currentAction = 'Save';\n this.parent.eventWindow.openEditor(this.parent.activeEventData.event, 'Save');\n }\n else {\n this.parent.currentAction = 'EditOccurrence';\n this.parent.quickPopup.openRecurrenceAlert();\n }\n };\n EventBase.prototype.getEventByGuid = function (guid) {\n return new DataManager({ json: this.parent.eventsProcessed }).executeLocal(new Query().where('Guid', 'equal', guid))[0];\n };\n EventBase.prototype.generateGuid = function () {\n return 'xyxxxxyx-xxxy-yxxx-xyxx-xxyxxxxyyxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = (c === 'x') ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n EventBase.prototype.getEventIDType = function () {\n return typeof (this.parent.eventsData[0][this.parent.eventFields.id]);\n };\n EventBase.prototype.getEventMaxID = function (resourceId) {\n var _this = this;\n if (this.parent.eventsData.length < 1) {\n return 1;\n }\n var eventId;\n var idType = this.getEventIDType();\n if (idType === 'string') {\n eventId = uniqueID().toString();\n }\n if (idType === 'number') {\n var maxId = Math.max.apply(Math, this.parent.eventsData.map(function (event) { return event[_this.parent.eventFields.id]; }));\n maxId = isNullOrUndefined(resourceId) ? maxId : maxId + resourceId;\n eventId = maxId + 1;\n }\n return eventId;\n };\n EventBase.prototype.activeEventData = function (eventData) {\n var _this = this;\n var target = closest(eventData.target, '.' + cls.APPOINTMENT_CLASS);\n var guid = target.getAttribute('data-guid');\n this.addSelectedAppointments([].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]')));\n var eventObject = this.getEventByGuid(guid);\n if (eventObject && eventObject.isSpanned) {\n eventObject = this.parent.eventsData.filter(function (obj) {\n return obj[_this.parent.eventFields.id] === eventObject[_this.parent.eventFields.id];\n })[0];\n }\n this.parent.activeEventData = { event: eventObject, element: target };\n };\n EventBase.prototype.generateOccurrence = function (event, viewDate) {\n var fields = this.parent.eventFields;\n var startDate = event[fields.startTime];\n var endDate = event[fields.endTime];\n var occurrenceCollection = [];\n var currentViewDate = isNullOrUndefined(viewDate) ? this.parent.activeView.startDate() : viewDate;\n var eventRule = event[fields.recurrenceRule];\n var duration = endDate.getTime() - startDate.getTime();\n currentViewDate = new Date(+currentViewDate - duration);\n var dates = generate(startDate, eventRule, event[fields.recurrenceException], this.parent.firstDayOfWeek, undefined, currentViewDate);\n if (this.parent.currentView === 'Agenda' && eventRule.indexOf('COUNT') === -1 && eventRule.indexOf('UNTIL') === -1) {\n if (isNullOrUndefined(event.generatedDates)) {\n event.generatedDates = { start: new Date(dates[0]), end: new Date(dates[dates.length - 1]) };\n }\n else {\n if (dates[0] < event.generatedDates.start.getTime()) {\n event.generatedDates.start = new Date(dates[0]);\n }\n if (dates[dates.length - 1] > event.generatedDates.end.getTime()) {\n event.generatedDates.end = new Date(dates[dates.length - 1]);\n }\n }\n }\n var date = dates.shift();\n while (date) {\n var clonedObject = extend({}, event, null, true);\n clonedObject[fields.startTime] = new Date(date);\n clonedObject[fields.endTime] = new Date(new Date(date).setMilliseconds(duration));\n clonedObject[fields.recurrenceID] = clonedObject[fields.id];\n clonedObject.Guid = this.generateGuid();\n occurrenceCollection.push(clonedObject);\n date = dates.shift();\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getRecurrenceEvent = function (eventData) {\n var eventFields = this.parent.eventFields;\n var parentApp = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(eventFields.id, 'equal', eventData[eventFields.recurrenceID]));\n return parentApp[0];\n };\n EventBase.prototype.getOccurrencesByID = function (id) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n var parentObject = this.parent.eventsData.filter(function (obj) { return obj[fields.id] === id; });\n for (var _i = 0, _a = parentObject; _i < _a.length; _i++) {\n var event_2 = _a[_i];\n if (!isNullOrUndefined(event_2[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_2));\n }\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getOccurrencesByRange = function (startTime, endTime) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {\n var event_3 = _a[_i];\n if (!isNullOrUndefined(event_3[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_3));\n }\n }\n var filter = occurrenceCollection.filter(function (obj) {\n return obj[fields.startTime] >= startTime && obj[fields.endTime] <= endTime && !isNullOrUndefined(obj[fields.recurrenceID]);\n });\n return filter;\n };\n EventBase.prototype.applyResourceColor = function (element, eventData, type, groupOrder, alpha) {\n if (!this.parent.resourceBase) {\n return;\n }\n var alphaColor = function (color, alpha) {\n color = color.replace('#', '');\n var r = parseInt(color.substring(0, color.length / 3), 16);\n var g = parseInt(color.substring(color.length / 3, 2 * color.length / 3), 16);\n var b = parseInt(color.substring(2 * color.length / 3, 3 * color.length / 3), 16);\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + alpha + \")\";\n };\n var color = this.parent.resourceBase.getResourceColor(eventData, groupOrder);\n if (color) {\n // tslint:disable-next-line:no-any\n element.style[type] = !isNullOrUndefined(alpha) ? alphaColor(color, alpha) : color;\n }\n };\n return EventBase;\n}());\nexport { EventBase };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { getRecurrenceStringFromDate } from '../../recurrence-editor/date-generator';\nimport * as events from '../base/constant';\nimport { Timezone } from '../timezone/timezone';\n/**\n * Schedule CRUD operations\n */\nvar Crud = /** @class */ (function () {\n function Crud(parent) {\n this.parent = parent;\n this.timezone = new Timezone();\n }\n Crud.prototype.getQuery = function () {\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n return this.parent.dataModule.generateQuery(start, end);\n };\n Crud.prototype.getTable = function () {\n if (this.parent.eventSettings.query) {\n var query = this.parent.eventSettings.query.clone();\n return query.fromTable;\n }\n return null;\n };\n Crud.prototype.refreshData = function (args) {\n var _this = this;\n var actionArgs = { requestType: args.requestType, cancel: false, data: args.data };\n if (this.parent.dataModule.dataManager.dataSource.offline) {\n this.parent.trigger(events.actionComplete, actionArgs);\n this.parent.renderModule.refreshDataManager();\n return;\n }\n else {\n args.promise.then(function (e) {\n if (_this.parent.isDestroyed) {\n return;\n }\n _this.parent.trigger(events.actionComplete, actionArgs);\n if (actionArgs.cancel) {\n return;\n }\n _this.parent.renderModule.refreshDataManager();\n }).catch(function (e) {\n if (_this.parent.isDestroyed) {\n return;\n }\n _this.parent.trigger(events.actionFailure, { error: e });\n });\n }\n };\n Crud.prototype.addEvent = function (eventData) {\n var fields = this.parent.eventFields;\n var promise = null;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var args = {\n cancel: false,\n data: (eventData instanceof Array) ? eventData : [eventData],\n requestType: 'eventCreate'\n };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n if (eventData instanceof Array) {\n for (var _i = 0, _a = eventData; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n this.processCrudTimezone(event_1);\n editParms.addedRecords.push(event_1);\n }\n promise =\n this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, this.getTable(), this.getQuery());\n }\n else {\n this.processCrudTimezone(eventData);\n promise = this.parent.dataModule.dataManager.insert(eventData, this.getTable(), this.getQuery());\n }\n var crudArgs = { requestType: 'eventCreated', cancel: false, data: eventData, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.saveEvent = function (event, action) {\n var fields = this.parent.eventFields;\n var promise = null;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var args = { requestType: 'eventChange', cancel: false };\n var data = event;\n if (isNullOrUndefined(action)) {\n args.data = data;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n this.processCrudTimezone(data);\n if ((event instanceof Array)) {\n editParms.changedRecords = event;\n this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, this.getTable(), this.getQuery());\n }\n else {\n promise = this.parent.dataModule.dataManager.update(fields.id, event, this.getTable(), this.getQuery());\n }\n }\n else {\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(data);\n var query = void 0;\n switch (action) {\n case 'EditOccurrence':\n args.data = { occurrence: event, parent: parentEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n query = new Query().where('Guid', 'equal', data.Guid);\n var edited = new DataManager(this.parent.eventsProcessed).executeLocal(query);\n var exDate = this.excludeDateCheck(edited[0][fields.startTime], parentEvent[fields.recurrenceException]);\n if (exDate !== parentEvent[fields.recurrenceException]) {\n parentEvent[fields.recurrenceException] = exDate;\n data[fields.recurrenceID] = parentEvent[fields.id];\n this.processCrudTimezone(parentEvent);\n editParms.changedRecords.push(parentEvent);\n this.processCrudTimezone(data);\n editParms.addedRecords.push(data);\n }\n else {\n this.processCrudTimezone(data);\n editParms.changedRecords.push(data);\n }\n break;\n case 'EditSeries':\n args.data = data;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n query = new Query().where(fields.recurrenceID, 'equal', parentEvent[fields.id]);\n var delApp = new DataManager(this.parent.eventsData).executeLocal(query);\n data[fields.id] = parentEvent[fields.id];\n data[fields.recurrenceException] = null;\n data[fields.recurrenceID] = null;\n this.processCrudTimezone(data);\n editParms.changedRecords.push(data);\n for (var _i = 0, delApp_1 = delApp; _i < delApp_1.length; _i++) {\n var event_2 = delApp_1[_i];\n editParms.deletedRecords.push(event_2);\n }\n break;\n }\n promise =\n this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, this.getTable(), this.getQuery());\n }\n // if (!this.parent.activeView.isTimelineView()) {\n // this.parent.eventBase.selectWorkCellByTime(dataObj);\n // }\n var crudArgs = { requestType: 'eventChanged', cancel: false, data: args.data, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.deleteEvent = function (id, action) {\n var fields = this.parent.eventFields;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var dataObj = [];\n var normalEvent = [];\n var recEvent = [];\n switch (typeof id) {\n case 'string':\n case 'number':\n dataObj = new DataManager(this.parent.eventsData).executeLocal(new Query().where(fields.id, 'equal', id));\n break;\n case 'object':\n dataObj = (id instanceof Array) ? id : [id];\n break;\n }\n for (var _i = 0, _a = dataObj; _i < _a.length; _i++) {\n var event_3 = _a[_i];\n (!isNullOrUndefined(event_3[fields.recurrenceRule])) ? recEvent.push(event_3) : normalEvent.push(event_3);\n }\n var args = { requestType: 'eventRemove', cancel: false };\n if (action !== 'DeleteOccurrence') {\n args.data = dataObj;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n }\n if (isNullOrUndefined(action) || normalEvent.length > 0) {\n for (var _b = 0, normalEvent_1 = normalEvent; _b < normalEvent_1.length; _b++) {\n var event_4 = normalEvent_1[_b];\n editParms.deletedRecords.push(event_4);\n }\n }\n if (recEvent.length > 0) {\n switch (action) {\n case 'Delete':\n case 'DeleteOccurrence':\n for (var i = 0; i < recEvent.length; i++) {\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(recEvent[i]);\n args.data = { occurrence: recEvent[i], parent: parentEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n parentEvent[fields.recurrenceException] =\n this.excludeDateCheck(recEvent[i][fields.startTime], parentEvent[fields.recurrenceException]);\n this.processCrudTimezone(parentEvent);\n editParms.changedRecords.push(parentEvent);\n if (recEvent[i][fields.id] !== parentEvent[fields.id]) {\n editParms.deletedRecords.push(recEvent[i]);\n }\n }\n break;\n case 'DeleteSeries':\n for (var _c = 0, recEvent_1 = recEvent; _c < recEvent_1.length; _c++) {\n var app = recEvent_1[_c];\n var predicate = new Predicate(fields.id, 'equal', (app[fields.recurrenceID] || id)).\n or(new Predicate(fields.recurrenceID, 'equal', (app[fields.recurrenceID] || id)));\n var delApp = new DataManager(this.parent.eventsData).executeLocal(new Query().where(predicate));\n for (var _d = 0, delApp_2 = delApp; _d < delApp_2.length; _d++) {\n var event_5 = delApp_2[_d];\n editParms.deletedRecords.push(event_5);\n }\n }\n break;\n }\n }\n var promise;\n if (editParms.deletedRecords.length === 1 && editParms.changedRecords.length === 0) {\n var deleteEvent = editParms.deletedRecords[0];\n promise =\n this.parent.dataModule.dataManager.remove(fields.id, deleteEvent, this.getTable(), this.getQuery());\n }\n else {\n promise =\n this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, this.getTable(), this.getQuery());\n }\n this.parent.eventBase.selectWorkCellByTime(dataObj);\n var crudArgs = { requestType: 'eventRemoved', cancel: false, data: args.data, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.processCrudTimezone = function (events) {\n var fields = this.parent.eventFields;\n if (events[fields.startTimezone] || events[fields.endTimezone]) {\n var startTimezone = events[fields.startTimezone] || events[fields.endTimezone];\n var endTimezone = events[fields.endTimezone] || events[fields.startTimezone];\n if (this.parent.timezone) {\n var zone = this.parent.timezone;\n events[fields.startTime] = this.timezone.convert(events[fields.startTime], startTimezone, zone);\n events[fields.endTime] = this.timezone.convert(events[fields.endTime], endTimezone, zone);\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], zone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], zone);\n }\n else {\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], startTimezone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], endTimezone);\n }\n }\n else if (this.parent.timezone) {\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], this.parent.timezone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], this.parent.timezone);\n }\n };\n Crud.prototype.excludeDateCheck = function (eventStartTime, exceptionDateList) {\n var exDate = getRecurrenceStringFromDate(eventStartTime);\n if (!isNullOrUndefined(exceptionDateList)) {\n if (exceptionDateList.indexOf(exDate) === -1) {\n exceptionDateList = !(isNullOrUndefined(exceptionDateList)) ? exceptionDateList + ',' + exDate : exDate;\n }\n }\n else {\n exceptionDateList = exDate;\n }\n return exceptionDateList;\n };\n return Crud;\n}());\nexport { Crud };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport * as cls from '../base/css-constant';\n/**\n * Appointment window field validation\n */\nvar FieldValidator = /** @class */ (function () {\n function FieldValidator() {\n }\n FieldValidator.prototype.renderFormValidator = function (form, rules, element) {\n var _this = this;\n this.element = element;\n this.formObj = new FormValidator(form, {\n customPlacement: function (inputElement, error) {\n _this.errorPlacement(inputElement, error);\n },\n rules: rules,\n validationComplete: function (args) {\n _this.validationComplete(args);\n }\n });\n };\n FieldValidator.prototype.validationComplete = function (args) {\n var elem = this.element.querySelector('#' + args.inputName + '_Error');\n if (elem) {\n elem.style.display = (args.status === 'failure') ? '' : 'none';\n }\n };\n FieldValidator.prototype.errorPlacement = function (inputElement, error) {\n var id = error.getAttribute('for');\n var elem = this.element.querySelector('#' + id + '_Error');\n if (!elem) {\n this.createTooltip(inputElement, error, id, '');\n }\n };\n FieldValidator.prototype.createTooltip = function (element, error, name, display) {\n var dlgContent;\n var client;\n var inputClient = element.getBoundingClientRect();\n if (this.element.classList.contains(cls.POPUP_WRAPPER_CLASS)) {\n dlgContent = this.element;\n client = this.element.getBoundingClientRect();\n }\n else {\n dlgContent = this.element.querySelector('.e-schedule-dialog .e-dlg-content');\n client = dlgContent.getBoundingClientRect();\n }\n var div = createElement('div', {\n className: 'e-tooltip-wrap e-popup ' + cls.ERROR_VALIDATION_CLASS,\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n (inputClient.bottom - client.top + dlgContent.scrollTop + 9) + 'px;left:' +\n (inputClient.left - client.left + dlgContent.scrollLeft + inputClient.width / 2) + 'px;'\n });\n var content = createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow = createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n div.appendChild(content);\n div.appendChild(arrow);\n dlgContent.appendChild(div);\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n };\n FieldValidator.prototype.destroyToolTip = function () {\n if (this.element) {\n var elements = [].slice.call(this.element.querySelectorAll('.' + cls.ERROR_VALIDATION_CLASS));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n }\n if (this.formObj) {\n this.formObj.reset();\n }\n };\n /**\n * @hidden\n */\n FieldValidator.prototype.destroy = function () {\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n };\n return FieldValidator;\n}());\nexport { FieldValidator };\n","import { closest, EventHandler, isNullOrUndefined, formatUnit, append } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, createElement, remove, extend } from '@syncfusion/ej2-base';\nimport { Dialog, Popup, isCollide } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Crud } from '../actions/crud';\nimport { FieldValidator } from './form-validator';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\nvar EVENT_FIELD = 'e-field';\n/**\n * Quick Popups interactions\n */\nvar QuickPopups = /** @class */ (function () {\n /**\n * Constructor for QuickPopups\n */\n function QuickPopups(parent) {\n this.isMultipleEventSelect = false;\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.crudAction = new Crud(parent);\n this.fieldValidator = new FieldValidator();\n this.render();\n this.addEventListener();\n }\n QuickPopups.prototype.render = function () {\n this.renderQuickPopup();\n this.renderMorePopup();\n this.renderQuickDialog();\n };\n QuickPopups.prototype.renderQuickPopup = function () {\n var quickPopupWrapper = createElement('div', { className: cls.POPUP_WRAPPER_CLASS + ' e-popup-close' });\n if (this.parent.isAdaptive) {\n document.body.appendChild(quickPopupWrapper);\n addClass([quickPopupWrapper], cls.DEVICE_CLASS);\n }\n else {\n this.parent.element.appendChild(quickPopupWrapper);\n }\n this.quickPopup = new Popup(quickPopupWrapper, {\n actionOnScroll: 'hide',\n targetType: (this.parent.isAdaptive ? 'container' : 'relative'),\n enableRtl: this.parent.enableRtl,\n open: this.quickPopupOpen.bind(this),\n close: this.quickPopupClose.bind(this),\n hideAnimation: (this.parent.isAdaptive ? { name: 'ZoomOut' } : { name: 'FadeOut', duration: 150 }),\n showAnimation: (this.parent.isAdaptive ? { name: 'ZoomIn' } : { name: 'FadeIn', duration: 150 }),\n collision: (this.parent.isAdaptive ? { X: 'fit', Y: 'fit' } : { X: 'none', Y: 'fit' }),\n position: (this.parent.isAdaptive ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }),\n viewPortElement: (this.parent.isAdaptive ? document.body : this.parent.element),\n zIndex: (this.parent.isAdaptive ? 1000 : 1)\n });\n };\n QuickPopups.prototype.renderMorePopup = function () {\n var moreEventPopup = \"
    \" +\n (\"
    \") +\n (\"
    \") +\n (\"
    \");\n var moreEventWrapper = createElement('div', {\n className: cls.MORE_POPUP_WRAPPER_CLASS + ' e-popup-close',\n innerHTML: moreEventPopup\n });\n this.parent.element.appendChild(moreEventWrapper);\n this.morePopup = new Popup(moreEventWrapper, {\n targetType: 'relative',\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'ZoomOut', duration: 300 },\n showAnimation: { name: 'ZoomIn', duration: 300 },\n open: this.morePopupOpen.bind(this),\n close: this.morePopupClose.bind(this),\n collision: { X: 'flip', Y: 'flip' },\n viewPortElement: this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS),\n zIndex: 0\n });\n var closeButton = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS);\n this.renderButton('e-round', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeButton, this.closeClick);\n EventHandler.add(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS), 'click', this.navigationClick, this);\n };\n QuickPopups.prototype.renderQuickDialog = function () {\n this.quickDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n buttons: [\n { buttonModel: { cssClass: 'e-quick-alertok e-flat', isPrimary: true }, click: this.dialogButtonClick.bind(this) },\n { buttonModel: { cssClass: 'e-quick-alertcancel e-flat', isPrimary: false }, click: this.dialogButtonClick.bind(this) }\n ],\n cssClass: cls.QUICK_DIALOG_CLASS,\n closeOnEscape: true,\n enableRtl: this.parent.enableRtl,\n beforeClose: this.beforeQuickDialogClose.bind(this),\n isModal: true,\n position: { X: 'center', Y: 'center' },\n showCloseIcon: true,\n target: document.body,\n visible: false,\n width: 'auto'\n });\n var dialogElement = createElement('div', { id: this.parent.element.id + 'QuickDialog' });\n this.parent.element.appendChild(dialogElement);\n this.quickDialog.appendTo(dialogElement);\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (okButton) {\n okButton.setAttribute('aria-label', this.l10n.getConstant('occurrence'));\n }\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (cancelButton) {\n cancelButton.setAttribute('aria-label', this.l10n.getConstant('series'));\n }\n };\n QuickPopups.prototype.renderButton = function (className, iconName, isDisabled, element, clickEvent) {\n new Button({ cssClass: className, disabled: isDisabled, enableRtl: this.parent.enableRtl, iconCss: iconName }, element);\n EventHandler.add(element, 'click', clickEvent, this);\n };\n QuickPopups.prototype.quickDialogClass = function (action) {\n var classList = [\n cls.QUICK_DIALOG_EDIT_EVENT_CLASS, cls.QUICK_DIALOG_EDIT_SERIES_CLASS, cls.QUICK_DIALOG_DELETE_CLASS,\n cls.QUICK_DIALOG_CANCEL_CLASS, cls.QUICK_DIALOG_ALERT_BTN_CLASS, cls.DISABLE_CLASS\n ];\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n removeClass([okButton, cancelButton], classList);\n switch (action) {\n case 'Recurrence':\n addClass([okButton], cls.QUICK_DIALOG_EDIT_EVENT_CLASS);\n addClass([cancelButton], cls.QUICK_DIALOG_EDIT_SERIES_CLASS);\n break;\n case 'Delete':\n addClass([okButton], cls.QUICK_DIALOG_DELETE_CLASS);\n addClass([cancelButton], cls.QUICK_DIALOG_CANCEL_CLASS);\n break;\n case 'Alert':\n addClass([okButton], cls.QUICK_DIALOG_ALERT_BTN_CLASS);\n addClass([cancelButton], cls.DISABLE_CLASS);\n break;\n }\n };\n QuickPopups.prototype.applyFormValidation = function () {\n var form = this.quickPopup.element.querySelector('.' + cls.FORM_CLASS);\n var rules = {};\n rules[this.parent.eventSettings.fields.subject.name] = this.parent.eventSettings.fields.subject.validation;\n this.fieldValidator.renderFormValidator(form, rules, this.quickPopup.element);\n };\n QuickPopups.prototype.openRecurrenceAlert = function () {\n var editDeleteOnly = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (editDeleteOnly) {\n editDeleteOnly.innerHTML = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteEvent' : 'editEvent');\n }\n var editDeleteSeries = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (editDeleteSeries) {\n editDeleteSeries.innerHTML = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteSeries' : 'editSeries');\n }\n this.quickDialog.content =\n this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteRecurrenceContent' : 'editContent');\n this.quickDialog.header = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteEvent' : 'editEvent');\n this.quickDialogClass('Recurrence');\n this.showQuickDialog('RecurrenceAlert');\n };\n QuickPopups.prototype.openRecurrenceValidationAlert = function (type) {\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n removeClass([okButton], cls.QUICK_DIALOG_EDIT_EVENT_CLASS);\n okButton.innerHTML = this.l10n.getConstant('ok');\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n this.quickDialog.header = this.l10n.getConstant('alert');\n switch (type) {\n case 'wrongPattern':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('wrongPattern');\n break;\n case 'dateValidation':\n removeClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('recurrenceDateValidation');\n break;\n case 'createError':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('createError');\n break;\n case 'sameDayAlert':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('sameDayAlert');\n break;\n case 'seriesChangeAlert':\n removeClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('seriesChangeAlert');\n break;\n }\n if (!cancelButton.classList.contains(cls.DISABLE_CLASS)) {\n addClass([cancelButton], 'e-quick-alert-cancelpresent');\n }\n this.showQuickDialog('RecurrenceValidationAlert');\n };\n QuickPopups.prototype.openDeleteAlert = function () {\n if (this.parent.activeViewOptions.readonly) {\n return;\n }\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (okButton) {\n okButton.innerHTML = this.l10n.getConstant('delete');\n }\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (cancelButton) {\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n }\n this.quickDialog.content = (this.parent.activeEventData.event.length > 1) ?\n this.l10n.getConstant('deleteMultipleContent') : this.l10n.getConstant('deleteContent');\n this.quickDialog.header = (this.parent.activeEventData.event.length > 1) ?\n this.l10n.getConstant('deleteMultipleEvent') : this.l10n.getConstant('deleteEvent');\n this.quickDialogClass('Delete');\n this.showQuickDialog('DeleteAlert');\n };\n QuickPopups.prototype.openValidationError = function (type) {\n this.quickDialog.header = this.l10n.getConstant('alert');\n this.quickDialog.content = this.l10n.getConstant(type);\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (okButton) {\n okButton.innerHTML = this.l10n.getConstant('ok');\n }\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (cancelButton) {\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n }\n this.quickDialogClass('Alert');\n this.showQuickDialog('ValidationAlert');\n };\n QuickPopups.prototype.showQuickDialog = function (popupType) {\n this.quickDialog.dataBind();\n var eventProp = {\n type: popupType, cancel: false, data: this.parent.activeEventData, element: this.quickDialog.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.quickDialog.show();\n };\n QuickPopups.prototype.createMoreEventList = function (eventCollection, groupOrder, groupIndex) {\n var fields = this.parent.eventFields;\n var moreEventContentEle = createElement('div', { className: cls.MORE_EVENT_CONTENT_CLASS });\n var moreEventWrapperEle = createElement('div', { className: cls.MORE_EVENT_WRAPPER_CLASS });\n if (eventCollection.length === 0) {\n moreEventWrapperEle = createElement('div', {\n className: cls.MORE_EVENT_CONTENT_CLASS,\n innerHTML: this.l10n.getConstant('emptyContainer')\n });\n }\n else {\n for (var _i = 0, eventCollection_1 = eventCollection; _i < eventCollection_1.length; _i++) {\n var eventData = eventCollection_1[_i];\n var eventText = (eventData[fields.subject] || this.parent.eventSettings.fields.subject.default);\n var appointmentEle = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-id': '' + eventData[fields.id],\n 'data-guid': eventData.Guid, 'role': 'button', 'tabindex': '0', 'aria-readonly': 'false',\n 'aria-selected': 'false', 'aria-grabbed': 'true', 'aria-label': eventText\n }\n });\n appointmentEle.appendChild(createElement('div', { className: cls.SUBJECT_CLASS, innerHTML: eventText }));\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n appointmentEle.setAttribute('data-group-index', groupIndex);\n }\n if (!isNullOrUndefined(eventData[fields.recurrenceRule])) {\n var iconClass = (eventData[fields.id] === eventData[fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentEle.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n var args = { data: eventData, element: appointmentEle, cancel: false };\n this.parent.trigger(event.eventRendered, args);\n if (!args.cancel) {\n moreEventWrapperEle.appendChild(appointmentEle);\n this.parent.eventBase.wireAppointmentEvents(appointmentEle);\n this.parent.eventBase.applyResourceColor(appointmentEle, eventData, 'backgroundColor', groupOrder);\n }\n }\n }\n moreEventContentEle.appendChild(moreEventWrapperEle);\n return moreEventContentEle;\n };\n QuickPopups.prototype.tapHoldEventPopup = function (args) {\n var target = closest(args.event.target, '.' + cls.APPOINTMENT_CLASS);\n this.isMultipleEventSelect = false;\n this.parent.selectedElements = [];\n this.isMultipleEventSelect = true;\n this.parent.eventBase.getSelectedEventElements(target);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n var guid = target.getAttribute('data-guid');\n var eventObj = this.parent.eventBase.getEventByGuid(guid);\n var eventTitle = (eventObj[this.parent.eventFields.subject] || this.l10n.getConstant('noTitle'));\n var eventTemplate = \"
    \" +\n (\"\") +\n (\"
    \" + eventTitle + \"
    \") +\n (\"\") +\n (\"
    \");\n this.quickPopup.element.innerHTML = eventTemplate;\n var closeIcon = this.quickPopup.element.querySelector('.' + cls.CLOSE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.closeClick);\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.EDIT_ICON_CLASS, false, editIcon, this.editClick);\n var deleteIcon = this.quickPopup.element.querySelector('.' + cls.DELETE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.DELETE_ICON_CLASS, false, deleteIcon, this.deleteClick);\n this.beforeQuickPopupOpen(target);\n };\n QuickPopups.prototype.cellClick = function (args) {\n if (!this.parent.showQuickInfo || this.parent.currentView === 'MonthAgenda' || this.parent.isAdaptive) {\n this.quickPopupHide();\n return;\n }\n var target = closest(args.event.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' +\n cls.HEADER_CELLS_CLASS);\n if (isNullOrUndefined(target) || args.event.target.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n return;\n }\n var isSameTarget = this.quickPopup.relateTo === target;\n if (isSameTarget && this.quickPopup.element.classList.contains(cls.POPUP_OPEN)) {\n var subjectElement_1 = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectElement_1) {\n subjectElement_1.focus();\n }\n return;\n }\n var temp = {};\n temp[this.parent.eventFields.startTime] = this.parent.activeCellsData.startTime;\n temp[this.parent.eventFields.endTime] = this.parent.activeCellsData.endTime;\n temp[this.parent.eventFields.isAllDay] = this.parent.activeCellsData.isAllDay;\n var cellDetails = this.getFormattedString(temp);\n var quickCellPopup = createElement('div', { className: cls.CELL_POPUP_CLASS });\n var templateArgs = extend({}, temp, { elementType: 'cell' }, true);\n if (this.parent.quickInfoTemplates.header) {\n append(this.parent.getQuickInfoTemplatesHeader()(templateArgs), quickCellPopup);\n }\n else {\n var headerTemplate = createElement('div', {\n className: cls.POPUP_HEADER_CLASS,\n innerHTML: \"
    \" +\n (\"
    \")\n });\n quickCellPopup.appendChild(headerTemplate);\n }\n if (this.parent.quickInfoTemplates.content) {\n append(this.parent.getQuickInfoTemplatesContent()(templateArgs), quickCellPopup);\n }\n else {\n var tempStr = \"
    \" +\n (\"
    \") +\n (\"
    \" + cellDetails.details + \"
    \") +\n ((this.parent.activeViewOptions.group.resources.length > 0 ? \"
    \" +\n (\"
    \" + this.getResourceText(args, 'cell') + \"
    \") : '') + \"
    \");\n var contentTemplate = createElement('div', {\n className: cls.POPUP_CONTENT_CLASS, innerHTML: tempStr\n });\n quickCellPopup.appendChild(contentTemplate);\n }\n if (this.parent.quickInfoTemplates.footer) {\n append(this.parent.getQuickInfoTemplatesFooter()(templateArgs), quickCellPopup);\n }\n else {\n var footerTemplate = createElement('div', {\n className: cls.POPUP_FOOTER_CLASS, innerHTML: \"\" +\n (\"\")\n });\n quickCellPopup.appendChild(footerTemplate);\n }\n var subjectElement = quickCellPopup.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectElement) {\n Input.createInput({ element: subjectElement, properties: { placeholder: this.l10n.getConstant('addTitle') } });\n }\n var closeIcon = quickCellPopup.querySelector('.' + cls.CLOSE_CLASS);\n if (closeIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.quickPopupHide);\n }\n var moreButton = quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS);\n if (moreButton) {\n this.renderButton('e-flat', '', false, moreButton, this.detailsClick);\n }\n var saveButton = quickCellPopup.querySelector('.' + cls.EVENT_CREATE_CLASS);\n if (saveButton) {\n this.renderButton('e-flat e-primary', '', this.parent.activeViewOptions.readonly, saveButton, this.saveClick);\n }\n this.quickPopup.content = quickCellPopup;\n this.quickPopup.dataBind();\n this.applyFormValidation();\n if (this.morePopup) {\n this.morePopup.hide();\n }\n this.quickPopup.relateTo = target;\n this.beforeQuickPopupOpen(target);\n };\n QuickPopups.prototype.isSameEventClick = function (events) {\n var isSameTarget = this.quickPopup.relateTo === closest(events.element, '.' + cls.APPOINTMENT_CLASS);\n if (isSameTarget && this.quickPopup.element.classList.contains(cls.POPUP_OPEN)) {\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n if (editIcon) {\n editIcon.focus();\n }\n if (!this.parent.isAdaptive) {\n var editButton = this.quickPopup.element.querySelector('.' + cls.EDIT_EVENT_CLASS);\n if (editButton) {\n editButton.focus();\n }\n }\n return true;\n }\n return false;\n };\n QuickPopups.prototype.eventClick = function (events) {\n if (this.parent.eventTooltip) {\n this.parent.eventTooltip.close();\n }\n if (!this.parent.showQuickInfo) {\n return;\n }\n if (this.parent.isAdaptive && this.isMultipleEventSelect) {\n this.updateTapHoldEventPopup(closest(events.element, '.' + cls.APPOINTMENT_CLASS));\n }\n else {\n var isSameTarget = this.isSameEventClick(events);\n if (isSameTarget) {\n return;\n }\n var eventData = events.event;\n var args = this.getFormattedString(eventData);\n var quickEventPopup = createElement('div', { className: cls.EVENT_POPUP_CLASS });\n var templateArgs = extend({}, eventData, { elementType: 'event' }, true);\n if (this.parent.quickInfoTemplates.header) {\n append(this.parent.getQuickInfoTemplatesHeader()(templateArgs), quickEventPopup);\n }\n else {\n var headerTemplate = createElement('div', {\n className: cls.POPUP_HEADER_CLASS,\n innerHTML: \"
    \" +\n (\"\") +\n (\"\") +\n (\"
    \") +\n (\"
    \" + args.eventSubject + \"
    \")\n });\n quickEventPopup.appendChild(headerTemplate);\n }\n if (this.parent.quickInfoTemplates.content) {\n append(this.parent.getQuickInfoTemplatesContent()(templateArgs), quickEventPopup);\n }\n else {\n var tempStr = \"
    \" +\n (\"
    \" + args.details + \"
    \") +\n ((eventData[this.parent.eventFields.recurrenceRule] ? \"
    \" + this.getRecurrenceSummary(eventData) + \"
    \") : '') + \"
    \") +\n (\"\" + (eventData[this.parent.eventFields.location] ? \"
    \") +\n (eventData[this.parent.eventFields.location] + \"
    \") : '')) +\n (\"\" + (eventData[this.parent.eventFields.startTimezone] ||\n eventData[this.parent.eventFields.endTimezone] ? \"
    \") +\n (this.getTimezone(eventData) + \"
    \") : '')) +\n (\"\" + (eventData[this.parent.eventFields.description] ? \"
    \" + eventData[this.parent.eventFields.description] + \"
    \") : '')) +\n (\"\" + (this.parent.resources.length > 0 ? \"
    \") +\n (this.getResourceText(events, 'event') + \"
    \") : ''));\n var contentTemplate = createElement('div', {\n className: cls.POPUP_CONTENT_CLASS, innerHTML: tempStr\n });\n quickEventPopup.appendChild(contentTemplate);\n }\n if (this.parent.quickInfoTemplates.footer) {\n append(this.parent.getQuickInfoTemplatesFooter()(templateArgs), quickEventPopup);\n }\n else {\n var footerTemplate = createElement('div', {\n className: cls.POPUP_FOOTER_CLASS,\n innerHTML: \"\" + (this.parent.isAdaptive ? '' : \"\") +\n (\"\"))\n });\n quickEventPopup.appendChild(footerTemplate);\n }\n var readonly = this.parent.activeViewOptions.readonly;\n var editIcon = quickEventPopup.querySelector('.' + cls.EDIT_CLASS);\n if (editIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.EDIT_ICON_CLASS, false, editIcon, this.editClick);\n }\n var deleteIcon = quickEventPopup.querySelector('.' + cls.DELETE_CLASS);\n if (deleteIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.DELETE_ICON_CLASS, readonly, deleteIcon, this.deleteClick);\n }\n var closeIcon = quickEventPopup.querySelector('.' + cls.CLOSE_CLASS);\n if (closeIcon) {\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.quickPopupHide);\n }\n var editButton = quickEventPopup.querySelector('.' + cls.EDIT_EVENT_CLASS);\n if (editButton) {\n this.renderButton('e-flat e-primary', '', false, editButton, this.editClick);\n }\n var deleteButton = quickEventPopup.querySelector('.' + cls.DELETE_EVENT_CLASS);\n if (deleteButton) {\n this.renderButton('e-flat', '', readonly, deleteButton, this.deleteClick);\n }\n this.quickPopup.content = quickEventPopup;\n this.quickPopup.dataBind();\n if (this.morePopup && !closest(events.element, '.' + cls.MORE_EVENT_WRAPPER_CLASS)) {\n this.morePopup.hide();\n }\n this.quickPopup.relateTo = this.parent.isAdaptive ? document.body :\n closest(events.element, '.' + cls.APPOINTMENT_CLASS);\n this.beforeQuickPopupOpen(events.element);\n }\n };\n QuickPopups.prototype.getResourceText = function (args, type) {\n var resourceValue = '';\n if (this.parent.activeViewOptions.group.resources.length === 0) {\n var resourceCollection_1 = this.parent.resourceBase.resourceCollection.slice(-1)[0];\n var resourceData = resourceCollection_1.dataSource;\n var resourceIndex_1 = 0;\n var eventData_1 = args.event;\n resourceData.forEach(function (resource, index) {\n if (resource[resourceCollection_1.idField] === eventData_1[resourceCollection_1.field]) {\n resourceIndex_1 = index;\n }\n });\n resourceValue = resourceData[resourceIndex_1][resourceCollection_1.textField];\n }\n else {\n if (type === 'event') {\n var eventData = args.event;\n var resourceData = void 0;\n var lastResource_1;\n for (var i = this.parent.resourceBase.resourceCollection.length - 1; i >= 0; i--) {\n resourceData = eventData[this.parent.resourceBase.resourceCollection[i].field];\n if (!isNullOrUndefined(resourceData)) {\n lastResource_1 = this.parent.resourceBase.resourceCollection[i];\n break;\n }\n }\n if (!Array.isArray(resourceData)) {\n resourceData = [resourceData];\n }\n var resNames_1 = [];\n var lastResourceData_1 = lastResource_1.dataSource;\n resourceData.map(function (value) {\n var i = util.findIndexInData(lastResourceData_1, lastResource_1.idField, value);\n var text = lastResourceData_1[i][lastResource_1.textField];\n if (text) {\n resNames_1.push(text);\n }\n });\n resourceValue = resNames_1.join(', ');\n }\n else {\n var argsData = args;\n var groupIndex = !isNullOrUndefined(argsData.groupIndex) ? argsData.groupIndex : 0;\n var resourceDetails = this.parent.resourceBase.lastResourceLevel[groupIndex];\n resourceValue = resourceDetails.resourceData[resourceDetails.resource.textField];\n }\n }\n return resourceValue;\n };\n QuickPopups.prototype.getFormattedString = function (eventData) {\n var fields = this.parent.eventFields;\n var eventSubject = (eventData[fields.subject] || this.l10n.getConstant('noTitle'));\n var startDate = eventData[fields.startTime];\n var endDate = eventData[fields.endTime];\n var startDateDetails = this.getDateFormat(startDate, 'long');\n var endDateDetails = (eventData[fields.isAllDay] && endDate.getHours() === 0 && endDate.getMinutes() === 0) ?\n this.getDateFormat(util.addDays(new Date(endDate.getTime()), -1), 'long') : this.getDateFormat(endDate, 'long');\n var startTimeDetail = this.parent.getTimeString(startDate);\n var endTimeDetail = this.parent.getTimeString(endDate);\n var details;\n var allDayLength = (endDate.getTime() - startDate.getTime()) / util.MS_PER_DAY;\n var spanLength = endDate.getDate() !== startDate.getDate() &&\n (endDate.getTime() - startDate.getTime()) / (60 * 60 * 1000) < 24 ? 1 : 0;\n if (eventData[fields.isAllDay] || allDayLength >= 1 || spanLength > 0) {\n details = startDateDetails + ' (' +\n (eventData[fields.isAllDay] ? this.l10n.getConstant('allDay') : startTimeDetail) + ')';\n if (allDayLength > 1 || spanLength > 0) {\n details += ' - ' + endDateDetails + ' (' +\n (eventData[fields.isAllDay] ? this.l10n.getConstant('allDay') : endTimeDetail) + ')';\n }\n }\n else {\n details = startDateDetails + ' (' + (startTimeDetail + ' - ' + endTimeDetail) + ')';\n }\n return { eventSubject: eventSubject, details: details };\n };\n QuickPopups.prototype.moreEventClick = function (data, endDate, groupIndex) {\n this.quickPopupHide(true);\n var moreEventContentEle = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS);\n if (moreEventContentEle) {\n remove(moreEventContentEle);\n }\n var selectedDate = ((data.date).getTime()).toString();\n var target = closest(data.element, '.' + cls.MORE_INDICATOR_CLASS);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DAY_CLASS).innerHTML = this.getDateFormat(data.date, 'E');\n var dateElement = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS);\n dateElement.innerHTML = this.getDateFormat(data.date, 'd');\n dateElement.setAttribute('data-date', selectedDate);\n dateElement.setAttribute('data-end-date', endDate.getTime().toString());\n var groupOrder;\n if (!isNullOrUndefined(groupIndex)) {\n dateElement.setAttribute('data-group-index', groupIndex);\n groupOrder = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)].groupOrder;\n }\n var moreEventElements = this.createMoreEventList(data.event, groupOrder, groupIndex);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_POPUP_CLASS).appendChild(moreEventElements);\n removeClass(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_DATE_HEADER_CLASS).childNodes, cls.CURRENTDATE_CLASS);\n if (util.resetTime(data.date).getTime() === util.resetTime(new Date()).getTime()) {\n addClass(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_DATE_HEADER_CLASS).childNodes, cls.CURRENTDATE_CLASS);\n }\n if (this.parent.currentView.indexOf('Timeline') !== -1) {\n var gIndex = target.getAttribute('data-group-index');\n var index = (isNullOrUndefined(gIndex)) ? 0 : parseInt(gIndex, 10);\n this.morePopup.relateTo = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS +\n ' tbody tr:nth-child(' + (index + 1) + ') td[data-date=\"' + target.getAttribute('data-start-date') + '\"]');\n }\n else {\n this.morePopup.relateTo = closest(target, '.' + cls.WORK_CELLS_CLASS);\n }\n var eventProp = { type: 'EventContainer', data: data, cancel: false, element: this.morePopup.element };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.morePopup.show();\n };\n QuickPopups.prototype.saveClick = function () {\n if (!this.quickPopup.element.querySelector('.' + cls.FORM_CLASS).ej2_instances[0].validate()) {\n return;\n }\n var fields = this.parent.eventFields;\n var saveObj = extend({}, this.parent.eventWindow.getObjectFromFormData(cls.POPUP_WRAPPER_CLASS));\n this.parent.eventWindow.setDefaultValueToObject(saveObj);\n saveObj[fields.id] = this.parent.eventBase.getEventMaxID();\n saveObj[fields.startTime] = this.parent.activeCellsData.startTime;\n saveObj[fields.endTime] = this.parent.activeCellsData.endTime;\n saveObj[fields.isAllDay] = this.parent.activeCellsData.isAllDay;\n if (this.parent.resourceBase) {\n this.parent.resourceBase.setResourceValues(saveObj, true);\n }\n this.parent.currentAction = 'Add';\n this.crudAction.addEvent(saveObj);\n this.quickPopupHide();\n };\n QuickPopups.prototype.detailsClick = function () {\n var subjectEle = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectEle && subjectEle.value !== '') {\n var args = extend(this.parent.activeCellsData, { subject: subjectEle.value });\n }\n this.fieldValidator.destroyToolTip();\n this.quickPopupHide();\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n QuickPopups.prototype.editClick = function () {\n this.quickPopupHide(true);\n var data = this.parent.activeEventData.event;\n this.parent.currentAction = 'EditSeries';\n if (!isNullOrUndefined(data[this.parent.eventFields.recurrenceRule])) {\n this.parent.currentAction = 'EditOccurrence';\n this.openRecurrenceAlert();\n }\n else {\n this.parent.eventWindow.openEditor(data, this.parent.currentAction);\n }\n };\n QuickPopups.prototype.deleteClick = function () {\n this.quickPopupHide(true);\n this.parent.currentAction = 'Delete';\n if (this.parent.activeEventData.event[this.parent.eventFields.recurrenceRule]) {\n this.openRecurrenceAlert();\n }\n else {\n this.openDeleteAlert();\n }\n };\n QuickPopups.prototype.updateMoreEventContent = function () {\n if (this.morePopup.element.classList.contains('e-popup-close')) {\n return;\n }\n var moreEventContentEle = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS);\n if (moreEventContentEle) {\n remove(moreEventContentEle);\n }\n var dateElement = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS);\n var startDate = this.parent.getDateFromElement(dateElement);\n var endDate = new Date(parseInt(dateElement.getAttribute('data-end-date'), 10));\n var groupIndex = dateElement.getAttribute('data-group-index');\n var data;\n var groupOrder;\n if (!isNullOrUndefined(groupIndex)) {\n data = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)];\n groupOrder = data.groupOrder;\n }\n var filteredEvents = this.parent.eventBase.filterEvents(startDate, endDate, this.parent.eventsProcessed, data);\n var moreElement = this.createMoreEventList(filteredEvents, groupOrder, groupIndex);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_POPUP_CLASS).appendChild(moreElement);\n };\n QuickPopups.prototype.closeClick = function () {\n this.quickPopupHide();\n this.morePopup.hide();\n };\n QuickPopups.prototype.dialogButtonClick = function (event) {\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (event.target.classList.contains('e-quick-alertok') &&\n (cancelButton.classList.contains('e-quick-alert-cancelpresent'))) {\n removeClass([cancelButton], 'e-quick-alert-cancelpresent');\n this.parent.eventWindow.eventSave(this.l10n.getConstant('ok'));\n return;\n }\n this.quickDialog.hide();\n if (event.target.classList.contains(cls.QUICK_DIALOG_EDIT_EVENT_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteOccurrence' : 'EditOccurrence';\n switch (this.parent.currentAction) {\n case 'EditOccurrence':\n this.parent.eventWindow.openEditor(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n case 'DeleteOccurrence':\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n }\n }\n else if (event.target.classList.contains(cls.QUICK_DIALOG_EDIT_SERIES_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteSeries' : 'EditSeries';\n switch (this.parent.currentAction) {\n case 'EditSeries':\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(this.parent.activeEventData.event);\n this.parent.eventWindow.openEditor(parentEvent, this.parent.currentAction);\n break;\n case 'DeleteSeries':\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n }\n }\n else if (event.target.classList.contains(cls.QUICK_DIALOG_DELETE_CLASS)) {\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n }\n };\n QuickPopups.prototype.updateTapHoldEventPopup = function (target) {\n var selectedElements = this.parent.eventBase.getSelectedEventElements(target);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n if (selectedElements.length > 0) {\n var eventObj = this.parent.eventBase.getEventByGuid(selectedElements[0].getAttribute('data-guid'));\n var titleContent = (selectedElements.length === 1) ?\n (eventObj[this.parent.eventFields.subject] || this.l10n.getConstant('noTitle')) :\n '(' + selectedElements.length + ')' + ' ' + this.l10n.getConstant('selectedItems');\n this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS).innerHTML = titleContent;\n if (selectedElements.length > 1) {\n addClass([this.quickPopup.element.querySelector('.' + cls.EDIT_ICON_CLASS)], cls.HIDDEN_CLASS);\n }\n else {\n removeClass([this.quickPopup.element.querySelector('.' + cls.EDIT_ICON_CLASS)], cls.HIDDEN_CLASS);\n }\n }\n else {\n this.parent.selectedElements = [];\n this.quickPopupHide();\n }\n };\n QuickPopups.prototype.getTimezone = function (event) {\n var zoneDetails = '';\n zoneDetails += event[this.parent.eventFields.startTimezone] || '';\n zoneDetails += zoneDetails === '' ? '' : ' - ';\n zoneDetails += event[this.parent.eventFields.endTimezone] || '';\n return zoneDetails;\n };\n QuickPopups.prototype.getRecurrenceSummary = function (event) {\n var recurrenceEditor = this.parent.eventWindow.getRecurrenceEditorInstance();\n var ruleSummary = recurrenceEditor.getRuleSummary(event[this.parent.eventFields.recurrenceRule]);\n return ruleSummary.charAt(0).toUpperCase() + ruleSummary.slice(1);\n };\n QuickPopups.prototype.getDateFormat = function (date, formatString) {\n return this.parent.globalize.formatDate(date, { skeleton: formatString });\n };\n QuickPopups.prototype.getDataFromTarget = function (target) {\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n return this.parent.activeEventData.event;\n }\n return this.parent.activeCellsData;\n };\n QuickPopups.prototype.beforeQuickDialogClose = function () {\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.beforeQuickPopupOpen = function (target) {\n var isEventPopup = this.quickPopup.element.querySelector('.' + cls.EVENT_POPUP_CLASS);\n var popupType = this.parent.isAdaptive ? isEventPopup ? 'ViewEventInfo' : 'EditEventInfo' : 'QuickInfo';\n var eventProp = {\n type: popupType, cancel: false, data: this.getDataFromTarget(target),\n target: target, element: this.quickPopup.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n this.destroyButtons();\n if (eventProp.element.classList.contains(cls.POPUP_OPEN)) {\n this.quickPopupClose();\n }\n this.quickPopup.element.innerHTML = '';\n return;\n }\n var display = this.quickPopup.element.style.display;\n this.quickPopup.element.style.display = 'block';\n if (this.parent.isAdaptive) {\n this.quickPopup.element.removeAttribute('style');\n this.quickPopup.element.style.display = 'block';\n this.quickPopup.element.style.height = formatUnit((popupType === 'EditEventInfo') ? 65 : window.innerHeight);\n }\n else {\n this.quickPopup.offsetX = 10;\n this.quickPopup.collision = { X: 'none', Y: 'fit' };\n this.quickPopup.position = { X: 'right', Y: 'top' };\n this.quickPopup.dataBind();\n this.quickPopup.refreshPosition(null, true);\n var collide = isCollide(this.quickPopup.element, this.parent.element);\n if (collide.indexOf(this.parent.enableRtl ? 'left' : 'right') > -1) {\n this.quickPopup.offsetX = -target.offsetWidth - 10 - this.quickPopup.element.offsetWidth;\n this.quickPopup.dataBind();\n var leftCollide = isCollide(this.quickPopup.element, this.parent.element);\n if (leftCollide.indexOf('left') > -1) {\n this.quickPopup.position = { X: 'center', Y: 'center' };\n this.quickPopup.collision = { X: 'fit', Y: 'fit' };\n this.quickPopup.offsetX = -(this.quickPopup.element.offsetWidth / 2);\n this.quickPopup.dataBind();\n }\n }\n }\n if (isEventPopup) {\n this.applyEventColor();\n }\n this.quickPopup.element.style.display = display;\n this.quickPopup.dataBind();\n this.quickPopup.show();\n };\n QuickPopups.prototype.applyEventColor = function () {\n var color = this.parent.activeEventData.element.style.backgroundColor;\n if (color === '') {\n return;\n }\n var colorEle = this.quickPopup.element.querySelector('.' + cls.POPUP_HEADER_CLASS);\n var footerEle = this.quickPopup.element.querySelector('.' + cls.POPUP_FOOTER_CLASS);\n if (footerEle && footerEle.offsetParent) {\n colorEle = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (colorEle) {\n colorEle.style.borderLeftColor = color;\n color = \"rgba(\" + color.match(/\\d+/g).join() + \",0.3)\";\n }\n }\n if (colorEle) {\n colorEle.style.backgroundColor = color;\n }\n };\n QuickPopups.prototype.quickPopupOpen = function () {\n if (this.parent.isAdaptive) {\n return;\n }\n if (this.quickPopup.element.querySelector('.' + cls.CELL_POPUP_CLASS)) {\n var subjectElement = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectElement) {\n subjectElement.focus();\n }\n }\n else {\n var editElement = this.quickPopup.element.querySelector('.' + cls.EDIT_EVENT_CLASS);\n if (editElement) {\n editElement.focus();\n }\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n if (editIcon) {\n editIcon.focus();\n }\n }\n };\n QuickPopups.prototype.quickPopupClose = function () {\n this.parent.eventBase.focusElement();\n this.quickPopup.relateTo = cls.WORK_CELLS_CLASS;\n this.fieldValidator.destroyToolTip();\n this.destroyButtons();\n this.quickPopup.element.innerHTML = '';\n };\n QuickPopups.prototype.morePopupOpen = function () {\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).focus();\n this.morePopup.refreshPosition();\n };\n QuickPopups.prototype.morePopupClose = function () {\n var moreWrapper = this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS);\n if (moreWrapper) {\n moreWrapper.remove();\n }\n };\n QuickPopups.prototype.quickPopupHide = function (hideAnimation) {\n if (this.quickPopup.element.classList.contains('e-popup-open')) {\n if (hideAnimation) {\n var animation = this.quickPopup.hideAnimation;\n this.quickPopup.hideAnimation = null;\n this.quickPopup.hide();\n this.quickPopup.hideAnimation = animation;\n }\n else {\n this.quickPopup.hide();\n }\n this.isMultipleEventSelect = false;\n }\n };\n QuickPopups.prototype.navigationClick = function (e) {\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n if (!isNullOrUndefined(navigateEle)) {\n var date = this.parent.getDateFromElement(e.currentTarget);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.closeClick();\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView(this.parent.getNavigateView());\n }\n }\n };\n QuickPopups.prototype.documentClick = function (e) {\n var target = e.event.target;\n var classNames = '.' + cls.POPUP_WRAPPER_CLASS + ',.' + cls.HEADER_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS +\n ',.' + cls.WORK_CELLS_CLASS + ',.' + cls.APPOINTMENT_CLASS;\n if (!closest(target, classNames)) {\n this.quickPopupHide();\n }\n if (!closest(target, '.' + cls.MORE_POPUP_WRAPPER_CLASS) && !target.classList.contains(cls.MORE_INDICATOR_CLASS)\n && (!closest(target, '.' + cls.POPUP_OPEN))) {\n this.morePopup.hide();\n }\n };\n QuickPopups.prototype.onClosePopup = function () {\n this.quickPopupHide();\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.addEventListener = function () {\n this.parent.on(event.cellClick, this.cellClick, this);\n this.parent.on(event.eventClick, this.eventClick, this);\n this.parent.on(event.documentClick, this.documentClick, this);\n this.parent.on(event.dataReady, this.updateMoreEventContent, this);\n this.parent.on(event.tapHoldReady, this.tapHoldEventPopup, this);\n };\n QuickPopups.prototype.removeEventListner = function () {\n this.parent.off(event.cellClick, this.cellClick);\n this.parent.off(event.eventClick, this.eventClick);\n this.parent.off(event.documentClick, this.documentClick);\n this.parent.off(event.dataReady, this.updateMoreEventContent);\n this.parent.off(event.tapHoldReady, this.tapHoldEventPopup);\n };\n QuickPopups.prototype.destroyButtons = function () {\n var buttonCollections = [].slice.call(this.quickPopup.element.querySelectorAll('.e-control.e-btn'));\n buttonCollections.forEach(function (button) {\n var instance = button.ej2_instances[0];\n if (instance) {\n instance.destroy();\n }\n });\n };\n QuickPopups.prototype.destroy = function () {\n this.fieldValidator.destroy();\n this.removeEventListner();\n this.destroyButtons();\n this.quickPopup.destroy();\n remove(this.quickPopup.element);\n this.morePopup.destroy();\n if (this.quickDialog.element) {\n this.quickDialog.destroy();\n remove(this.quickDialog.element);\n this.quickDialog.element = null;\n }\n };\n return QuickPopups;\n}());\nexport { QuickPopups };\n","import { isNullOrUndefined, append, createElement } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Tooltip on appointments in Schedule\n */\nvar EventTooltip = /** @class */ (function () {\n function EventTooltip(parent) {\n this.parent = parent;\n this.tooltipObj = new Tooltip({\n content: 'No title',\n position: 'BottomRight',\n offsetY: 10,\n mouseTrail: this.parent.isAdaptive ? false : true,\n showTipPointer: false,\n cssClass: this.parent.cssClass + ' ' + cls.EVENT_TOOLTIP_ROOT_CLASS,\n target: this.getTargets(),\n beforeRender: this.onBeforeRender.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.tooltipObj.appendTo(this.parent.element);\n }\n EventTooltip.prototype.getTargets = function () {\n var targets = [];\n if (this.parent.activeViewOptions.group.headerTooltipTemplate) {\n targets.push('.' + cls.RESOURCE_CELLS_CLASS);\n }\n if (this.parent.eventSettings.enableTooltip) {\n targets.push('.' + cls.APPOINTMENT_CLASS);\n }\n return targets.join(',');\n };\n EventTooltip.prototype.onBeforeRender = function (args) {\n if (!isNullOrUndefined(args.target.getAttribute('data-tooltip-id'))) {\n return;\n }\n var content = '';\n if (args.target.classList.contains(cls.RESOURCE_CELLS_CLASS) && this.parent.activeViewOptions.group.resources.length > 0) {\n var resCollection = void 0;\n if (this.parent.activeView.isTimelineView()) {\n var index = parseInt(args.target.getAttribute('data-group-index'), 0);\n resCollection = this.parent.resourceBase.lastResourceLevel[index];\n }\n else {\n var rowIndex = args.target.parentNode.sectionRowIndex;\n var cellIndex = args.target.cellIndex;\n resCollection = this.parent.activeView.getColumnLevels()[rowIndex][cellIndex];\n }\n var data = {\n resource: resCollection.resource,\n resourceData: resCollection.resourceData\n };\n var ele = createElement('div');\n append([].slice.call(this.parent.getHeaderTooltipTemplate()(data)), ele);\n content = ele.innerHTML;\n this.tooltipObj.content = content;\n return;\n }\n var record = this.parent.eventBase.getEventByGuid(args.target.getAttribute('data-guid'));\n if (!isNullOrUndefined(this.parent.eventSettings.tooltipTemplate)) {\n var ele = createElement('div');\n append([].slice.call(this.parent.getEventTooltipTemplate()(record)), ele);\n content = ele.innerHTML;\n }\n else {\n var globalize = this.parent.globalize;\n var fields = this.parent.eventFields;\n var eventStart = new Date('' + record[fields.startTime]);\n var eventEnd = new Date('' + record[fields.endTime]);\n eventEnd = (eventEnd.getHours() === 0 && eventEnd.getMinutes() === 0) ? new Date(eventEnd.setMilliseconds(-1000)) : eventEnd;\n var startDate = util.resetTime(new Date('' + eventStart));\n var endDate = util.resetTime(new Date('' + eventEnd));\n var tooltipSubject = (record[fields.subject] || this.parent.eventSettings.fields.subject.default);\n var tooltipLocation = !isNullOrUndefined(record[fields.location]) ? record[fields.location] : '';\n var startMonthDate = globalize.formatDate(eventStart, { type: 'date', skeleton: 'MMMd' });\n var startMonthYearDate = globalize.formatDate(eventStart, { type: 'date', skeleton: 'yMMMd' });\n var endMonthYearDate = globalize.formatDate(eventEnd, { type: 'date', skeleton: 'yMMMd' });\n var startTime = globalize.formatDate(eventStart, { type: 'time', skeleton: 'short' });\n var endTime = globalize.formatDate(eventEnd, { type: 'time', skeleton: 'short' });\n var tooltipDetails = void 0;\n if (startDate.getTime() === endDate.getTime()) {\n tooltipDetails = globalize.formatDate(eventStart, { type: 'date', skeleton: 'long' });\n }\n else {\n tooltipDetails = (startDate.getFullYear() === endDate.getFullYear()) ? (startMonthDate + ' - ' + endMonthYearDate) :\n (startMonthYearDate + ' - ' + endMonthYearDate);\n }\n var tooltipTime = (record[fields.isAllDay]) ? this.parent.localeObj.getConstant('allDay') :\n (startTime + ' - ' + endTime);\n content = '
    ' + tooltipSubject + '
    ' +\n '
    ' + tooltipLocation + '
    ' +\n '
    ' + tooltipDetails + '
    ' +\n '
    ' + tooltipTime + '
    ';\n }\n this.tooltipObj.content = content;\n };\n EventTooltip.prototype.close = function () {\n this.tooltipObj.close();\n };\n /**\n * To destroy the event tooltip.\n * @return {void}\n * @private\n */\n EventTooltip.prototype.destroy = function () {\n this.tooltipObj.destroy();\n this.tooltipObj = null;\n };\n return EventTooltip;\n}());\nexport { EventTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Event, Browser } from '@syncfusion/ej2-base';\nimport { getDefaultDateObject, getValue, cldrData, L10n, isNullOrUndefined, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { EventHandler, classList } from '@syncfusion/ej2-base';\nimport { extractObjectFromRule, generate, generateSummary, getRecurrenceStringFromDate } from './date-generator';\nvar HEADER = 'e-editor';\nvar INPUTWARAPPER = 'e-input-wrapper';\nvar INPUTWARAPPERSIDE = 'e-input-wrapper-side';\nvar REPEATELEMENT = 'e-repeat-element';\nvar REPEATINTERVAL = 'e-repeat-interval';\nvar INTERVALCLASS = 'e-interval';\nvar DAYWRAPPER = 'e-days';\nvar WEEKWRAPPER = 'e-non-week';\nvar WEEKPOSITION = 'e-week-position';\nvar YEAREXPANDERWRAPPER = 'e-year-expander';\nvar YEAREXPANDERELEMENT = 'e-year-expander-element';\nvar MONETHEXPANDERWRAPPER = 'e-month-expander';\nvar MONETHEXPANDWRAPPER = 'e-month-expand-wrapper';\nvar MONTHEXPANDERELEMENT = 'e-month-expander-element';\nvar MONTHEXPANDERCHECKBOXWRAPPER = 'e-month-expander-checkbox-wrapper';\nvar FORMLEFT = 'e-form-left';\nvar FORMRIGHT = 'e-form-right';\nvar MONTHDAYWRAPPER = 'e-month-day';\nvar MONTHEXPANNDERELEM = 'e-month-expander-wrapper';\nvar MONTHPOS = 'e-month-pos';\nvar MONTHWEEK = 'e-month-week';\nvar ENDON = 'e-end-on';\nvar MONTHEXPANDERLABEL = 'e-month-expander-label';\nvar WEEKEXPANDERLABEL = 'e-week-expander-label';\nvar ENDONLABEL = 'e-end-on-label';\nvar ENDONLEFT = 'e-end-on-left';\nvar MONTHDAYELEMENT = 'e-monthday-element';\nvar ENDONELEMENT = 'e-end-on-element';\nvar ENDONDATE = 'e-end-on-date';\nvar UNTILDATE = 'e-until-date';\nvar ENDONCOUNTWRAPPER = 'e-end-on-count';\nvar ENDONCOUNT = 'e-recurrence-count';\nvar HIDEWRAPPER = 'e-hide-recurrence-element';\nvar RTLCLASS = 'e-rtl';\nvar PRIMARY = 'e-primary';\nvar ACTIVE = 'e-active';\nvar RECURRENCETABLE = 'e-recurrence-table';\nvar REPEATCONTENT = 'e-repeat-content';\nvar REPEATCONTENTWRAPPER = 'e-repeat-content-wrapper';\nvar NONE = 'none';\nvar DAILY = 'daily';\nvar WEEKLY = 'weekly';\nvar MONTHLY = 'monthly';\nvar YEARLY = 'yearly';\nvar NEVER = 'never';\nvar UNTIL = 'until';\nvar COUNT = 'count';\nvar TEXTFIELD = 'text';\nvar VALUEFIELD = 'value';\nvar LAST = 'last';\nvar REPEAT = 'repeat';\nvar REPEATEVERY = 'repeatEvery';\nvar ON = 'on';\nvar END = 'end';\nvar RADIOLABEL = 'onDay';\nvar RULEUNTIL = 'UNTIL';\nvar RULEBYDAY = 'BYDAY';\nvar RULEBYMONTHDAY = 'BYMONTHDAY';\nvar RULEBYMONTH = 'BYMONTH';\nvar RULEINTERVAL = 'INTERVAL';\nvar RULECOUNT = 'COUNT';\nvar RULESETPOS = 'BYSETPOS';\nvar RULEFREQ = 'FREQ';\nvar RULEDAILY = 'DAILY';\nvar RULEWEEKLY = 'WEEKLY';\nvar RULEMONTHLY = 'MONTHLY';\nvar RULEYEARLY = 'YEARLY';\nvar RULESUNDAY = 'SU';\nvar RULEMONDAY = 'MO';\nvar RULETUESDAY = 'TU';\nvar RULEWEDNESDAY = 'WE';\nvar RULETHURSDAY = 'TH';\nvar RULEFRIDAY = 'FR';\nvar RULESATURDAY = 'SA';\nvar KEYSUNDAY = 'sun';\nvar KEYMONDAY = 'mon';\nvar KEYTUESDAY = 'tue';\nvar KEYWEDNESDAY = 'wed';\nvar KEYTHURSDAY = 'thu';\nvar KEYFRIDAY = 'fri';\nvar KEYSATURDAY = 'sat';\nvar EQUAL = '=';\nvar SEMICOLON = ';';\nvar COMMA = ',';\nvar FIRST = 'first';\nvar SECOND = 'second';\nvar THIRD = 'third';\nvar FOURTH = 'fourth';\nvar contentType = {\n none: '',\n daily: 'days',\n weekly: 'weeks',\n monthly: 'months',\n yearly: 'years'\n};\nvar valueData = {\n 'sun': RULESUNDAY,\n 'mon': RULEMONDAY,\n 'tue': RULETUESDAY,\n 'wed': RULEWEDNESDAY,\n 'thu': RULETHURSDAY,\n 'fri': RULEFRIDAY,\n 'sat': RULESATURDAY\n};\nvar neverClassList = [DAYWRAPPER, WEEKWRAPPER, ENDON, INTERVALCLASS, YEAREXPANDERWRAPPER, MONETHEXPANDERWRAPPER];\nvar weekClassList = [WEEKWRAPPER];\nvar monthClassList = [DAYWRAPPER, YEAREXPANDERWRAPPER];\nvar yearClassList = [DAYWRAPPER];\nvar dailyClassList = [DAYWRAPPER, WEEKWRAPPER, YEAREXPANDERWRAPPER, MONETHEXPANDERWRAPPER];\nvar noEndClassList = [ENDONDATE, ENDONCOUNTWRAPPER];\nvar endOnCountClassList = [ENDONDATE];\nvar endOnDateClassList = [ENDONCOUNTWRAPPER];\n/**\n * Represents the RecurrenceEditor component.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar RecurrenceEditor = /** @class */ (function (_super) {\n __extends(RecurrenceEditor, _super);\n /**\n * Constructor for creating the widget\n * @param {object} options?\n */\n function RecurrenceEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultLocale = {\n none: 'None',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n month: 'Month',\n yearly: 'Yearly',\n never: 'Never',\n until: 'Until',\n count: 'Count',\n first: 'First',\n second: 'Second',\n third: 'Third',\n fourth: 'Fourth',\n last: 'Last',\n repeat: 'Repeat',\n repeatEvery: 'Repeat every',\n on: 'Repeat On',\n end: 'End',\n onDay: 'Day',\n days: 'Day(s)',\n weeks: 'Week(s)',\n months: 'Month(s)',\n years: 'Year(s)',\n every: 'every',\n summaryTimes: 'time(s)',\n summaryOn: 'on',\n summaryUntil: 'until',\n summaryRepeat: 'Repeats',\n summaryDay: 'day(s)',\n summaryWeek: 'week(s)',\n summaryMonth: 'month(s)',\n summaryYear: 'year(s)',\n monthWeek: 'Month Week',\n monthPosition: 'Month Position',\n monthExpander: 'Month Expander',\n yearExpander: 'Year Expander',\n repeatInterval: 'Repeat Interval'\n };\n _this.renderStatus = false;\n _this.dayButtons = [];\n _this.monthButtons = [];\n return _this;\n }\n RecurrenceEditor.prototype.startState = function (freq, endOn, startDate) {\n this.showFormElement();\n this.updateForm(freq);\n this.freshOnEndForm();\n this.updateEndOnForm(endOn);\n this.selectMonthDay(startDate);\n this.updateUntilDate(startDate);\n this.onMonthDay.setProperties({ checked: true });\n };\n RecurrenceEditor.prototype.preRender = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n // pre render code snippets\n };\n RecurrenceEditor.prototype.applyCustomClass = function (cssClass) {\n if (cssClass) {\n addClass([this.element], cssClass);\n }\n };\n RecurrenceEditor.prototype.initialize = function () {\n this.renderComponent();\n if (!isNullOrUndefined(this.value)) {\n this.setRecurrenceRule(this.value);\n }\n else {\n this.startState(this.repeatType.value.toString().toUpperCase(), NEVER, this.startDate);\n this.updateForm(this.repeatType.value.toString());\n if (this.selectedType > 0) {\n this.setProperties({ value: this.getRecurrenceRule() }, false);\n }\n }\n this.applyCustomClass(this.cssClass);\n };\n RecurrenceEditor.prototype.triggerChangeEvent = function () {\n if (this.renderStatus) {\n var value = this.getRecurrenceRule();\n this.trigger('change', { value: value });\n this.setProperties({ value: value }, false);\n }\n };\n RecurrenceEditor.prototype.resetDayButton = function () {\n var elements = [].slice.call(this.element.querySelectorAll('.' + DAYWRAPPER + ' button'));\n elements.forEach(function (element) { return removeClass([element], [ACTIVE, PRIMARY]); });\n };\n RecurrenceEditor.prototype.daySelection = function (dayIndex) {\n this.resetDayButton();\n var days = [0, 1, 2, 3, 4, 5, 6];\n this.rotateArray(days, this.firstDayOfWeek);\n var element = this.element.querySelector('.' + DAYWRAPPER + ' button[data-index=\"' + days.indexOf(dayIndex) + '\"]');\n if (element) {\n addClass([element], [ACTIVE, PRIMARY]);\n }\n };\n RecurrenceEditor.prototype.rtlClass = function (status) {\n if (status) {\n addClass([this.element], RTLCLASS);\n }\n else {\n removeClass([this.element], RTLCLASS);\n }\n };\n RecurrenceEditor.prototype.updateUntilDate = function (date) {\n var tempDate = new Date(date.getTime());\n tempDate.setDate(tempDate.getDate() + 60);\n this.untilDateObj.setProperties({ value: tempDate });\n };\n RecurrenceEditor.prototype.selectMonthDay = function (date) {\n var weekday = [KEYSUNDAY, KEYMONDAY, KEYTUESDAY, KEYWEDNESDAY, KEYTHURSDAY, KEYFRIDAY, KEYSATURDAY];\n this.monthDate.setProperties({ value: date.getDate() });\n this.monthWeekDays.setProperties({ value: valueData[weekday[date.getDay()]] });\n this.monthValue.setProperties({ value: '' + (date.getMonth() + 1) });\n this.monthWeekPos.setProperties({ value: this.getDayPosition(date) });\n this.daySelection(date.getDay());\n };\n RecurrenceEditor.prototype.updateForm = function (state) {\n var _this = this;\n this.repeatType.setProperties({ value: state });\n var end = this.element.querySelector('.' + ENDON);\n if (state === DAILY) {\n classList(end, [FORMLEFT], [FORMRIGHT]);\n }\n else {\n classList(end, [FORMRIGHT], [FORMLEFT]);\n }\n switch (state) {\n case NONE:\n neverClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case WEEKLY:\n weekClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case MONTHLY:\n monthClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case YEARLY:\n yearClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case DAILY:\n dailyClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n }\n };\n RecurrenceEditor.prototype.updateEndOnForm = function (state) {\n var _this = this;\n this.endType.setProperties({ value: state });\n switch (state) {\n case NEVER:\n noEndClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case UNTIL:\n endOnDateClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n case COUNT:\n endOnCountClassList.forEach(function (className) { return addClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n break;\n }\n };\n RecurrenceEditor.prototype.freshOnEndForm = function () {\n var _this = this;\n noEndClassList.forEach(function (className) {\n var element = _this.element.querySelector('.' + className);\n if (element) {\n removeClass([element], HIDEWRAPPER);\n }\n });\n };\n RecurrenceEditor.prototype.showFormElement = function () {\n var _this = this;\n neverClassList.forEach(function (className) { return removeClass([_this.element.querySelector('.' + className)], HIDEWRAPPER); });\n };\n RecurrenceEditor.prototype.renderDropdowns = function () {\n var _this = this;\n var self = this;\n this.repeatType = new DropDownList({\n //set the data to dataSource property\n dataSource: this.getRepeatData(),\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n index: this.selectedType,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n placeholder: this.localeObj.getConstant(REPEAT),\n htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT) },\n change: function (args) {\n self.setProperties({ selectedType: args.value }, false);\n self.element.querySelector('.' + REPEATCONTENT).innerHTML =\n self.localeObj.getConstant(contentType[args.value]);\n self.showFormElement();\n self.updateForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n // set placeholder to DropDownList input element\n this.repeatType.appendTo(this.element.querySelector('.' + REPEATELEMENT));\n this.endType = new DropDownList({\n dataSource: this.getEndData(),\n popupWidth: this.getPopupWidth(),\n enableRtl: this.enableRtl,\n index: 1,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n change: function (args) {\n self.freshOnEndForm();\n self.updateEndOnForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.endType.appendTo(this.element.querySelector('.' + ENDONELEMENT));\n var renderDropDownList = function (dropDownData) {\n return new DropDownList({\n dataSource: dropDownData,\n popupWidth: _this.getPopupWidth(),\n enableRtl: _this.enableRtl,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n index: 1,\n change: function (args) {\n self.onWeekDay.setProperties({ checked: true });\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n };\n this.monthWeekPos = renderDropDownList(this.getMonthPosData());\n this.monthWeekPos.appendTo(this.element.querySelector('.' + MONTHPOS));\n this.monthWeekDays = renderDropDownList(this.getDayData('wide'));\n this.monthWeekDays.appendTo(this.element.querySelector('.' + MONTHWEEK));\n this.monthValue = new DropDownList({\n dataSource: this.getMonthData(),\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n index: 7,\n change: function (args) {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.monthValue.appendTo(this.element.querySelector('.' + YEAREXPANDERELEMENT));\n };\n RecurrenceEditor.prototype.setDefaultValue = function () {\n var formelement = [].slice.call(this.element.querySelectorAll('.e-control .e-numerictextbox'));\n for (var _i = 0, formelement_1 = formelement; _i < formelement_1.length; _i++) {\n var element = formelement_1[_i];\n var instance = element.ej2_instances[0];\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n instance.value = 1;\n instance.dataBind();\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n instance.value = 10;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.resetFormValues = function () {\n var recurreneElement = [].slice.call(this.element.querySelectorAll('.e-control [type=\"text\"]'));\n for (var _i = 0, recurreneElement_1 = recurreneElement; _i < recurreneElement_1.length; _i++) {\n var element = recurreneElement_1[_i];\n var instance = void 0;\n if (element.classList.contains('e-datepicker')) {\n instance = element.ej2_instances[0];\n if (instance.value) {\n instance.value = instance.value;\n instance.dataBind();\n }\n else {\n this.updateUntilDate(this.startDate);\n }\n }\n else if (element.classList.contains('e-dropdownlist')) {\n instance = element.ej2_instances[0];\n instance.index = instance.index || 0;\n instance.dataBind();\n }\n else if (element.classList.contains('e-numerictextbox')) {\n instance = element.ej2_instances[0];\n var value = void 0;\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n value = 1;\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n value = 10;\n }\n else {\n value = this.startDate.getDate();\n }\n instance.value = instance.value || value;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.getPopupWidth = function () {\n return Browser.isDevice ? '100%' : 'auto';\n };\n RecurrenceEditor.prototype.renderDatePickers = function () {\n var self = this;\n this.untilDateObj = new DatePicker({\n enableRtl: this.enableRtl,\n min: this.minDate,\n max: this.maxDate,\n change: function (args) {\n if (args.value) {\n self.triggerChangeEvent();\n }\n }\n });\n this.untilDateObj.appendTo(this.element.querySelector('.' + UNTILDATE));\n };\n RecurrenceEditor.prototype.dayButtonRender = function () {\n var _this = this;\n var btns = [].slice.call(this.element.querySelectorAll('.' + DAYWRAPPER + ' button'));\n var self = this;\n for (var _i = 0, btns_1 = btns; _i < btns_1.length; _i++) {\n var btn = btns_1[_i];\n var button = new Button({ isToggle: true, enableRtl: this.enableRtl }, btn);\n this.dayButtons.push(button);\n EventHandler.add(btn, 'click', function (args) {\n var btns = [].slice.call(_this.element.querySelectorAll('.' + DAYWRAPPER + ' button.' + PRIMARY));\n var element = args.target;\n if (!element.classList.contains(PRIMARY)) {\n addClass([element], PRIMARY);\n self.triggerChangeEvent();\n }\n else if (btns.length > 1) {\n removeClass([element], PRIMARY);\n self.triggerChangeEvent();\n }\n });\n }\n };\n RecurrenceEditor.prototype.radioButtonRender = function () {\n var self = this;\n this.onMonthDay = new RadioButton({\n label: this.localeObj.getConstant(RADIOLABEL),\n enableRtl: this.enableRtl,\n name: 'monthType',\n value: 'day',\n change: function (args) {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.onMonthDay.appendTo(this.element.querySelector('.' + MONTHEXPANDERELEMENT));\n this.monthButtons.push(this.onMonthDay);\n this.onWeekDay = new RadioButton({\n label: '',\n name: 'monthType',\n enableRtl: this.enableRtl,\n value: 'daypos',\n change: function (args) {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.onWeekDay.appendTo(this.element.querySelector('.' + MONTHEXPANNDERELEM));\n this.monthButtons.push(this.onWeekDay);\n };\n RecurrenceEditor.prototype.numericTextboxRender = function () {\n var self = this;\n this.recurrenceCount = new NumericTextBox({\n value: 10,\n format: '#',\n enableRtl: this.enableRtl,\n floatLabelType: 'Always',\n min: 1,\n change: function (args) {\n self.triggerChangeEvent();\n }\n });\n this.recurrenceCount.appendTo(this.element.querySelector('.' + ENDONCOUNT));\n this.monthDate = new NumericTextBox({\n value: 1,\n format: '#',\n enableRtl: this.enableRtl,\n min: 1,\n max: 31,\n change: function (args) {\n self.onMonthDay.setProperties({ checked: true });\n self.triggerChangeEvent();\n }\n });\n this.monthDate.appendTo(this.element.querySelector('.' + MONTHDAYWRAPPER));\n this.repeatInterval = new NumericTextBox({\n value: 1,\n format: '#',\n min: 1,\n enableRtl: this.enableRtl,\n floatLabelType: 'Always',\n placeholder: this.localeObj.getConstant(REPEATEVERY),\n change: function (args) {\n self.triggerChangeEvent();\n }\n });\n this.repeatInterval.appendTo(this.element.querySelector('.' + REPEATINTERVAL));\n };\n RecurrenceEditor.prototype.renderComponent = function () {\n this.setTemplate();\n this.renderDropdowns();\n this.renderDatePickers();\n this.dayButtonRender();\n this.radioButtonRender();\n this.numericTextboxRender();\n };\n RecurrenceEditor.prototype.rotateArray = function (data, count) {\n var temp;\n for (var index = 0; index < count; index++) {\n temp = data.shift();\n data.push(temp);\n }\n };\n RecurrenceEditor.prototype.getEndData = function () {\n var endData = [NEVER, UNTIL, COUNT];\n var self = this;\n var dataSource = [];\n endData.forEach(function (data) {\n dataSource.push({ text: self.localeObj.getConstant(data), value: data });\n });\n return dataSource;\n };\n RecurrenceEditor.prototype.getDayPosition = function (date) {\n var temp = new Date(date.getTime());\n var endDate = new Date(date.getTime());\n var day = date.getDay();\n var positionCollection = [];\n temp.setDate(1);\n endDate.setDate(1);\n endDate.setMonth(endDate.getMonth() + 1);\n while (temp < endDate) {\n if (temp.getDay() === day) {\n positionCollection.push(temp.getTime());\n }\n temp.setDate(temp.getDate() + 1);\n }\n if (positionCollection.indexOf(date.getTime()) === positionCollection.length - 1) {\n return -1;\n }\n return (positionCollection.indexOf(date.getTime()) + 1);\n };\n RecurrenceEditor.prototype.getRepeatData = function () {\n var data = [];\n var self = this;\n this.frequencies.forEach(function (element) {\n var textValue = (element === NONE) ? NEVER : element;\n data.push({ text: self.localeObj.getConstant(textValue), value: element });\n });\n return data;\n };\n RecurrenceEditor.prototype.getMonthPosData = function () {\n var monthpos = [FIRST, SECOND, THIRD, FOURTH, LAST];\n var monthposValue = {\n first: 1,\n second: 2,\n third: 3,\n fourth: 4,\n last: -1\n };\n var self = this;\n var dataSource = [];\n monthpos.forEach(function (data) {\n dataSource.push({ text: self.localeObj.getConstant(data), value: monthposValue[data] });\n });\n return dataSource;\n };\n RecurrenceEditor.prototype.getDayData = function (format) {\n var weekday = [KEYSUNDAY, KEYMONDAY, KEYTUESDAY, KEYWEDNESDAY, KEYTHURSDAY, KEYFRIDAY, KEYSATURDAY];\n var dayData = [];\n var cldrObj;\n this.rotateArray(weekday, this.firstDayOfWeek);\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.' + format, getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.stand-alone.' + format, cldrData));\n }\n for (var _i = 0, weekday_1 = weekday; _i < weekday_1.length; _i++) {\n var obj = weekday_1[_i];\n dayData.push({ text: getValue(obj, cldrObj), value: valueData[obj] });\n }\n return dayData;\n };\n RecurrenceEditor.prototype.getMonthData = function () {\n var monthData = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('months.stand-alone.wide', getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.months.stand-alone.wide', cldrData));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n monthData.push({\n text: getValue(obj, cldrObj),\n value: obj\n });\n }\n return monthData;\n };\n RecurrenceEditor.prototype.setTemplate = function () {\n var dayData = this.getDayData('narrow');\n var fullDay = this.getDayData('wide');\n this.element.innerHTML = '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(ON) + '
    ' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(ON) + '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(END) + '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ';\n };\n RecurrenceEditor.prototype.getSelectedDaysData = function () {\n var ruleData = RULEBYDAY + EQUAL;\n var elements = this.element.querySelectorAll('.' + DAYWRAPPER + ' button.' + PRIMARY);\n var weekday = [RULESUNDAY, RULEMONDAY, RULETUESDAY, RULEWEDNESDAY, RULETHURSDAY, RULEFRIDAY, RULESATURDAY];\n this.rotateArray(weekday, this.firstDayOfWeek);\n for (var index = 0; index < elements.length; index++) {\n ruleData += weekday[parseInt(elements[index].getAttribute('data-index'), 10)] + (index === (elements.length - 1) ? '' : COMMA);\n }\n return ruleData + SEMICOLON;\n };\n RecurrenceEditor.prototype.getSelectedMonthData = function () {\n var ruleData;\n if (this.onWeekDay.checked) {\n ruleData = RULEBYDAY + EQUAL + this.monthWeekDays.value + SEMICOLON\n + RULESETPOS + EQUAL + this.monthWeekPos.value + SEMICOLON;\n }\n else {\n ruleData = RULEBYMONTHDAY + EQUAL + this.monthDate.value + SEMICOLON;\n }\n return ruleData;\n };\n RecurrenceEditor.prototype.getIntervalData = function () {\n return RULEINTERVAL + EQUAL + this.repeatInterval.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.getEndOnCount = function () {\n return RULECOUNT + EQUAL + this.recurrenceCount.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.getYearMonthRuleData = function () {\n return RULEBYMONTH + EQUAL + this.monthValue.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.updateWeekButton = function (keys) {\n var weekday = [RULESUNDAY, RULEMONDAY, RULETUESDAY, RULEWEDNESDAY, RULETHURSDAY, RULEFRIDAY, RULESATURDAY];\n this.rotateArray(weekday, this.firstDayOfWeek);\n for (var _i = 0, _a = this.dayButtons; _i < _a.length; _i++) {\n var obj = _a[_i];\n var index = parseInt(obj.element.getAttribute('data-index'), 10);\n if (keys.indexOf(weekday[index]) !== -1) {\n obj.setProperties({ isPrimary: true });\n }\n else {\n obj.setProperties({ isPrimary: false });\n }\n }\n };\n RecurrenceEditor.prototype.updateMonthUI = function () {\n if (this.ruleObject.monthDay.length) {\n this.monthDate.setProperties({ value: this.ruleObject.monthDay[0] });\n this.onMonthDay.setProperties({ checked: true });\n }\n else {\n this.onWeekDay.setProperties({ checked: true });\n this.monthWeekPos.setProperties({ value: this.ruleObject.setPosition });\n for (var _i = 0, _a = Object.keys(valueData); _i < _a.length; _i++) {\n var key = _a[_i];\n if (valueData[key] === this.ruleObject.day[0]) {\n this.monthWeekDays.setProperties({ value: this.ruleObject.day[0] });\n break;\n }\n }\n }\n };\n RecurrenceEditor.prototype.updateUI = function (repeat, state) {\n this.repeatInterval.setProperties({ value: this.ruleObject.interval });\n switch (state) {\n case UNTIL:\n this.untilDateObj.setProperties({ value: this.ruleObject.until });\n break;\n case COUNT:\n this.recurrenceCount.setProperties({ value: this.ruleObject.count });\n break;\n }\n switch (repeat) {\n case WEEKLY:\n this.updateWeekButton(this.ruleObject.day);\n break;\n case YEARLY:\n this.monthValue.setProperties({ index: (this.ruleObject.month[0] - 1) });\n this.updateMonthUI();\n break;\n case MONTHLY:\n this.updateMonthUI();\n break;\n }\n };\n RecurrenceEditor.prototype.getUntilData = function () {\n var tempStr = getRecurrenceStringFromDate(this.untilDateObj.value);\n return RULEUNTIL + EQUAL + tempStr + SEMICOLON;\n };\n RecurrenceEditor.prototype.destroyComponents = function () {\n if (!this.recurrenceCount.isDestroyed) {\n this.recurrenceCount.destroy();\n }\n if (!this.monthDate.isDestroyed) {\n this.monthDate.destroy();\n }\n if (!this.repeatInterval.isDestroyed) {\n this.repeatInterval.destroy();\n }\n if (!this.untilDateObj.isDestroyed) {\n this.untilDateObj.destroy();\n }\n if (!this.repeatType.isDestroyed) {\n this.repeatType.destroy();\n }\n if (!this.endType.isDestroyed) {\n this.endType.destroy();\n }\n if (!this.monthWeekPos.isDestroyed) {\n this.monthWeekPos.destroy();\n }\n if (!this.monthWeekDays.isDestroyed) {\n this.monthWeekDays.destroy();\n }\n if (!this.monthValue.isDestroyed) {\n this.monthValue.destroy();\n }\n this.dayButtons.forEach(function (element) {\n if (!element.isDestroyed) {\n element.destroy();\n }\n });\n this.dayButtons = [];\n this.monthButtons.forEach(function (element) {\n if (!element.isDestroyed) {\n element.destroy();\n }\n });\n this.monthButtons = [];\n };\n RecurrenceEditor.prototype.resetFields = function () {\n this.startState(NONE, NEVER, this.startDate);\n this.setDefaultValue();\n };\n RecurrenceEditor.prototype.getRuleSummary = function (rule) {\n if (rule === void 0) { rule = this.getRecurrenceRule(); }\n return generateSummary(rule, this.localeObj, this.locale);\n };\n RecurrenceEditor.prototype.getRecurrenceDates = function (startDate, rule, excludeDate, maximumCount, viewDate) {\n viewDate = isNullOrUndefined(viewDate) ? this.startDate : viewDate;\n return generate(startDate, rule, excludeDate, this.firstDayOfWeek, maximumCount, viewDate);\n };\n RecurrenceEditor.prototype.getRecurrenceRule = function () {\n var ruleData = RULEFREQ + EQUAL;\n switch (this.repeatType.value) {\n case DAILY:\n ruleData += RULEDAILY + SEMICOLON;\n break;\n case WEEKLY:\n ruleData += RULEWEEKLY + SEMICOLON + this.getSelectedDaysData();\n break;\n case MONTHLY:\n ruleData += RULEMONTHLY + SEMICOLON + this.getSelectedMonthData();\n break;\n case YEARLY:\n ruleData += RULEYEARLY + SEMICOLON + this.getSelectedMonthData() + this.getYearMonthRuleData();\n break;\n case NONE:\n return '';\n }\n ruleData += this.getIntervalData();\n switch (this.endType.value) {\n case UNTIL:\n ruleData += this.getUntilData();\n break;\n case COUNT:\n ruleData += this.getEndOnCount();\n break;\n }\n return ruleData;\n };\n RecurrenceEditor.prototype.setRecurrenceRule = function (rule, startDate) {\n if (startDate === void 0) { startDate = this.startDate; }\n if (!rule) {\n this.repeatType.setProperties({ value: NONE });\n }\n this.ruleObject = extractObjectFromRule(rule);\n var endon = this.ruleObject.count ? COUNT : (this.ruleObject.until ? UNTIL : NEVER);\n switch (this.ruleObject.freq) {\n case RULEDAILY:\n this.startState(DAILY, endon, startDate);\n this.updateUI(DAILY, endon);\n break;\n case RULEWEEKLY:\n this.startState(WEEKLY, endon, startDate);\n this.updateUI(WEEKLY, endon);\n break;\n case RULEMONTHLY:\n this.startState(MONTHLY, endon, startDate);\n this.updateUI(MONTHLY, endon);\n break;\n case RULEYEARLY:\n this.startState(YEARLY, endon, startDate);\n this.updateUI(YEARLY, endon);\n break;\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n RecurrenceEditor.prototype.destroy = function () {\n this.destroyComponents();\n _super.prototype.destroy.call(this);\n var removeClasses = ['e-' + this.getModuleName()];\n if (this.cssClass) {\n removeClasses = removeClasses.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], removeClasses);\n this.element.innerHTML = '';\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n RecurrenceEditor.prototype.getModuleName = function () {\n return 'recurrenceeditor';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n RecurrenceEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n RecurrenceEditor.prototype.render = function () {\n this.initialize();\n this.rtlClass(this.enableRtl);\n this.renderStatus = true;\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n RecurrenceEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'startDate':\n this.selectMonthDay(newProp.startDate);\n this.updateUntilDate(newProp.startDate);\n this.endType.setProperties({ index: 0 });\n break;\n case 'enableRtl':\n this.rtlClass(newProp.enableRtl);\n break;\n case 'cssClass':\n this.applyCustomClass(newProp.cssClass);\n break;\n case 'selectedType':\n this.repeatType.setProperties({ index: this.selectedType });\n break;\n case 'minDate':\n this.untilDateObj.setProperties({ minDate: this.minDate });\n break;\n case 'maxDate':\n this.untilDateObj.setProperties({ maxDate: this.maxDate });\n break;\n case 'value':\n if (this.getRecurrenceRule() !== this.value) {\n this.setRecurrenceRule(this.value);\n }\n break;\n case 'locale':\n case 'frequencies':\n case 'firstDayOfWeek':\n this.refresh();\n break;\n }\n }\n };\n __decorate([\n Property(['none', 'daily', 'weekly', 'monthly', 'yearly'])\n ], RecurrenceEditor.prototype, \"frequencies\", void 0);\n __decorate([\n Property(0)\n ], RecurrenceEditor.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(new Date())\n ], RecurrenceEditor.prototype, \"startDate\", void 0);\n __decorate([\n Property()\n ], RecurrenceEditor.prototype, \"dateFormat\", void 0);\n __decorate([\n Property('en-US')\n ], RecurrenceEditor.prototype, \"locale\", void 0);\n __decorate([\n Property()\n ], RecurrenceEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RecurrenceEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], RecurrenceEditor.prototype, \"value\", void 0);\n __decorate([\n Property(new Date(1900, 1, 1))\n ], RecurrenceEditor.prototype, \"minDate\", void 0);\n __decorate([\n Property(new Date(2099, 12, 31))\n ], RecurrenceEditor.prototype, \"maxDate\", void 0);\n __decorate([\n Property(0)\n ], RecurrenceEditor.prototype, \"selectedType\", void 0);\n __decorate([\n Event()\n ], RecurrenceEditor.prototype, \"change\", void 0);\n RecurrenceEditor = __decorate([\n NotifyPropertyChanges\n ], RecurrenceEditor);\n return RecurrenceEditor;\n}(Component));\nexport { RecurrenceEditor };\n","import { createElement, isNullOrUndefined, addClass, remove, EventHandler, extend, append } from '@syncfusion/ej2-base';\nimport { cldrData, removeClass, getValue, getDefaultDateObject } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { localTimezoneName, timezoneData } from '../timezone/timezone';\nimport { FieldValidator } from './form-validator';\nimport { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_FIELD = 'e-field';\nvar REPEAT_CONTAINER_CLASS = 'e-recurrence-container';\nvar REPEAT_BUTTON_ICON_CLASS = 'e-recurrence-edit';\nvar REPEAT_BUTTON_CLASS = 'e-recurrence-edit-button';\nvar REPEAT_DIALOG_CLASS = 'e-recurrence-dialog';\nvar HIDE_STYLE_CLASS = 'e-hide';\n/**\n * Event editor window\n */\nvar EventWindow = /** @class */ (function () {\n /**\n * Constructor for event window\n */\n function EventWindow(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.fields = this.parent.eventFields;\n this.fieldValidator = new FieldValidator();\n this.renderEventWindow();\n }\n EventWindow.prototype.renderEventWindow = function () {\n var dialogContent = this.getEventWindowContent();\n this.element = createElement('div', { id: this.parent.element.id + '_dialog_wrapper' });\n this.parent.element.appendChild(this.element);\n if (this.parent.isAdaptive) {\n this.dialogObject = new Dialog({\n animationSettings: { effect: 'Zoom' },\n content: dialogContent,\n cssClass: cls.EVENT_WINDOW_DIALOG_CLASS + ' ' + cls.DEVICE_CLASS,\n enableRtl: this.parent.enableRtl,\n header: '
    ' +\n this.l10n.getConstant('newEvent') + '
    ',\n height: '100%',\n isModal: true,\n showCloseIcon: false,\n target: document.body,\n visible: false,\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n }\n else {\n this.dialogObject = new Dialog({\n animationSettings: { effect: 'Zoom' },\n buttons: [{\n buttonModel: { content: this.l10n.getConstant('deleteButton'), cssClass: cls.EVENT_WINDOW_DELETE_BUTTON_CLASS },\n click: this.eventDelete.bind(this)\n }, {\n buttonModel: {\n content: this.l10n.getConstant('saveButton'), cssClass: 'e-primary ' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS,\n isPrimary: true\n },\n click: this.eventSave.bind(this)\n }, {\n buttonModel: { cssClass: cls.EVENT_WINDOW_CANCEL_BUTTON_CLASS, content: this.l10n.getConstant('cancelButton') },\n click: this.dialogClose.bind(this)\n }],\n content: dialogContent,\n cssClass: cls.EVENT_WINDOW_DIALOG_CLASS,\n enableRtl: this.parent.enableRtl,\n header: '
    ' + this.l10n.getConstant('newEvent') + '
    ',\n isModal: true,\n showCloseIcon: true,\n target: document.body,\n visible: false,\n width: '500px',\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n }\n this.dialogObject.appendTo(this.element);\n addClass([this.element.parentElement], cls.EVENT_WINDOW_DIALOG_CLASS + '-container');\n if (this.parent.isAdaptive) {\n EventHandler.add(this.element.querySelector('.' + cls.EVENT_WINDOW_BACK_ICON_CLASS), 'click', this.dialogClose, this);\n EventHandler.add(this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_ICON_CLASS), 'click', this.eventSave, this);\n }\n this.applyFormValidation();\n };\n EventWindow.prototype.refresh = function () {\n this.destroy();\n this.renderEventWindow();\n };\n EventWindow.prototype.openEditor = function (data, type, isEventData) {\n this.parent.quickPopup.quickPopupHide(true);\n if (!this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n removeClass([this.dialogObject.element.querySelector('.e-recurrenceeditor')], cls.DISABLE_CLASS);\n }\n switch (type) {\n case 'Add':\n this.cellClickAction = !isEventData;\n this.parent.activeCellsData = data;\n this.onCellDetailsUpdate(data);\n break;\n case 'Save':\n case 'EditOccurrence':\n case 'EditSeries':\n if (type === 'EditOccurrence' && !this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n addClass([this.dialogObject.element.querySelector('.e-recurrenceeditor')], cls.DISABLE_CLASS);\n }\n this.cellClickAction = false;\n this.onEventDetailsUpdate(data);\n break;\n }\n };\n EventWindow.prototype.setDialogContent = function () {\n this.dialogObject.content = this.getEventWindowContent();\n this.dialogObject.dataBind();\n };\n EventWindow.prototype.onBeforeOpen = function (args) {\n var eventProp = {\n type: 'Editor',\n data: this.eventData,\n cancel: false,\n element: this.element,\n target: (this.cellClickAction ? this.parent.activeCellsData.element : this.parent.activeEventData.element)\n };\n if (this.cellClickAction) {\n eventProp.duration = this.getSlotDuration();\n }\n this.parent.trigger(event.popupOpen, eventProp);\n args.cancel = eventProp.cancel;\n this.duration = this.cellClickAction ? eventProp.duration : null;\n this.refreshDateTimePicker(this.duration);\n if (this.cellClickAction && eventProp.duration !== this.getSlotDuration() && isNullOrUndefined(this.parent.editorTemplate)) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n endObj.value = new Date(startObj.value.getTime() + (util.MS_PER_MINUTE * eventProp.duration));\n endObj.dataBind();\n }\n };\n EventWindow.prototype.onBeforeClose = function () {\n this.parent.eventBase.focusElement();\n };\n EventWindow.prototype.getEventWindowContent = function () {\n var container = createElement('div', { className: cls.FORM_CONTAINER_CLASS });\n var form = createElement('form', {\n id: this.parent.element.id + 'EditForm',\n className: cls.FORM_CLASS,\n attrs: { onsubmit: 'return false;' }\n });\n if (!isNullOrUndefined(this.parent.editorTemplate)) {\n var templeteEle = this.parent.getEditorTemplate()();\n append([].slice.call(templeteEle), form);\n }\n else {\n var content = this.getDefaultEventWindowContent();\n form.appendChild(content);\n }\n container.appendChild(form);\n return container;\n };\n EventWindow.prototype.getDefaultEventWindowContent = function () {\n var parentDiv = this.createDivElement(cls.EVENT_WINDOW_DIALOG_PARENT_CLASS);\n var titleLocationDiv = this.createDivElement(cls.EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS);\n var titleDiv = this.renderTextBox(cls.SUBJECT_CLASS);\n var locationDiv = this.renderTextBox(cls.LOCATION_CLASS);\n titleLocationDiv.appendChild(titleDiv);\n titleLocationDiv.appendChild(locationDiv);\n var startEndDateTimeDiv = this.createDivElement(cls.EVENT_WINDOW_START_END_DIV_CLASS);\n var startDateTimeDiv = this.renderDateTimePicker(cls.EVENT_WINDOW_START_CLASS, this.onTimeChange.bind(this));\n var endDateTimeDiv = this.renderDateTimePicker(cls.EVENT_WINDOW_END_CLASS);\n startEndDateTimeDiv.appendChild(startDateTimeDiv);\n startEndDateTimeDiv.appendChild(endDateTimeDiv);\n var timezoneParentDiv = this.createDivElement(cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS);\n var startTimezoneDiv = this.renderDropDown(cls.EVENT_WINDOW_START_TZ_CLASS);\n var endTimezoneDiv = this.renderDropDown(cls.EVENT_WINDOW_END_TZ_CLASS);\n timezoneParentDiv.appendChild(startTimezoneDiv);\n timezoneParentDiv.appendChild(endTimezoneDiv);\n var allDayTimezoneDiv = this.createDivElement(cls.EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS);\n var allDayDiv = this.renderCheckBox(cls.EVENT_WINDOW_ALL_DAY_CLASS);\n var timezoneDiv = this.renderCheckBox(cls.TIME_ZONE_CLASS);\n allDayTimezoneDiv.appendChild(allDayDiv);\n allDayTimezoneDiv.appendChild(timezoneDiv);\n var repeatParentDiv = this.createDivElement(cls.EVENT_WINDOW_REPEAT_DIV_CLASS);\n var repeatDiv = this.renderCheckBox(cls.EVENT_WINDOW_REPEAT_CLASS);\n var repeatEditConainer = createElement('span', { className: REPEAT_CONTAINER_CLASS });\n var button = createElement('button', {\n className: REPEAT_BUTTON_CLASS,\n attrs: { type: 'button', 'title': this.l10n.getConstant('editRecurrence') }\n });\n this.buttonObj = new Button({ iconCss: REPEAT_BUTTON_ICON_CLASS + ' e-icons', cssClass: 'e-medium ' + this.parent.cssClass });\n repeatEditConainer.appendChild(button);\n this.buttonObj.appendTo(button);\n repeatDiv.appendChild(repeatEditConainer);\n repeatParentDiv.appendChild(repeatDiv);\n var description = this.createDivElement(cls.DESCRIPTION_CLASS + '-row');\n var descriptionDiv = this.renderTextBox(cls.DESCRIPTION_CLASS);\n description.appendChild(descriptionDiv);\n parentDiv.appendChild(titleLocationDiv);\n parentDiv.appendChild(startEndDateTimeDiv);\n parentDiv.appendChild(allDayTimezoneDiv);\n parentDiv.appendChild(timezoneParentDiv);\n parentDiv.appendChild(repeatParentDiv);\n if (!this.parent.isAdaptive) {\n this.createRecurrenceEditor(parentDiv);\n }\n else {\n EventHandler.add(button, 'click', this.loadRecurrenceEditor, this);\n }\n if (this.parent.resources.length > 0) {\n var resourceParentDiv = this.createDivElement(cls.EVENT_WINDOW_RESOURCES_DIV_CLASS);\n for (var i = 0; i < this.parent.resourceBase.resourceCollection.length; i++) {\n resourceParentDiv.appendChild(this.renderMultiSelect(i));\n }\n parentDiv.appendChild(resourceParentDiv);\n }\n parentDiv.appendChild(description);\n var submit = createElement('button', { attrs: { type: 'hidden', title: 'submit', style: 'display:none' } });\n parentDiv.appendChild(submit);\n return parentDiv;\n };\n EventWindow.prototype.createRecurrenceEditor = function (parentDiv) {\n var recurrenceEditor = this.createDivElement();\n parentDiv.appendChild(recurrenceEditor);\n this.recurrenceEditor = this.renderRecurrenceEditor();\n this.recurrenceEditor.appendTo(recurrenceEditor);\n };\n EventWindow.prototype.createDivElement = function (className) {\n return createElement('div', { className: className });\n };\n EventWindow.prototype.createInputElement = function (className, fieldName, type) {\n return createElement(type || 'input', {\n className: className, attrs: {\n type: 'text', name: fieldName, value: '',\n title: ((this.l10n.getConstant(fieldName.charAt(0).toLowerCase() + fieldName.slice(1))) === '') ?\n fieldName : this.l10n.getConstant(fieldName.charAt(0).toLowerCase() + fieldName.slice(1))\n }\n });\n };\n EventWindow.prototype.getSlotDuration = function () {\n return this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n };\n EventWindow.prototype.renderDateTimePicker = function (value, changeEvent) {\n var dateTimeDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var dateTimeInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n dateTimeDiv.appendChild(dateTimeInput);\n var dateTimePicker = new DateTimePicker({\n change: changeEvent,\n cssClass: this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n floatLabelType: 'Always',\n format: (isNullOrUndefined(this.parent.dateFormat) ?\n this.getFormat('dateFormats') : this.parent.dateFormat) + ' ' + this.getFormat('timeFormats'),\n placeholder: this.getFieldLabel(value),\n step: this.getSlotDuration(),\n value: new Date(), width: '100%'\n });\n dateTimePicker.appendTo(dateTimeInput);\n return dateTimeDiv;\n };\n EventWindow.prototype.refreshDateTimePicker = function (duration) {\n var _this = this;\n var startEndElement = [].slice.call(this.element.querySelectorAll('.' + cls.EVENT_WINDOW_START_CLASS + ',.' +\n cls.EVENT_WINDOW_END_CLASS));\n startEndElement.forEach(function (element) {\n var instance = element.ej2_instances[0];\n instance.step = duration || _this.getSlotDuration();\n instance.dataBind();\n });\n };\n EventWindow.prototype.onTimeChange = function () {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n if (startObj.element.parentElement.classList.contains('e-input-focus')) {\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n var duration = 0;\n if (this.cellClickAction) {\n duration = util.MS_PER_MINUTE * this.duration;\n }\n else {\n duration = this.eventData[this.fields.endTime].getTime() - this.eventData[this.fields.startTime].getTime();\n }\n endObj.value = new Date(startObj.value.getTime() + duration);\n endObj.dataBind();\n }\n };\n EventWindow.prototype.renderMultiSelect = function (index) {\n var resourceData = this.parent.resourceBase.resourceCollection[index];\n var fieldName = resourceData.field;\n var value = 'e-' + fieldName;\n var labelValue = resourceData.title;\n var resourceDiv = this.createDivElement(value + '-container' + ' ' + 'e-resources');\n var resourceInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n resourceDiv.appendChild(resourceInput);\n var resourceTemplate = '
    ${' + resourceData.textField + '}
    ';\n if (resourceData.allowMultiple) {\n var listObj = new MultiSelect({\n cssClass: this.parent.cssClass || '',\n dataSource: resourceData.dataSource,\n change: this.onMultiselectResourceChange.bind(this),\n itemTemplate: resourceTemplate,\n fields: {\n text: resourceData.textField,\n value: resourceData.idField\n },\n htmlAttributes: { 'title': labelValue, 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: labelValue,\n popupHeight: '230px',\n popupWidth: '447px',\n mode: 'Box'\n });\n listObj.appendTo(resourceInput);\n }\n else {\n var drowDownList = new DropDownList({\n cssClass: this.parent.cssClass || '',\n change: this.onDropdownResourceChange.bind(this),\n dataSource: resourceData.dataSource,\n enableRtl: this.parent.enableRtl,\n fields: {\n text: resourceData.textField,\n value: resourceData.idField\n },\n htmlAttributes: { 'title': labelValue, 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: labelValue,\n popupHeight: '230px',\n popupWidth: '447px',\n itemTemplate: resourceTemplate\n });\n drowDownList.appendTo(resourceInput);\n }\n return resourceDiv;\n };\n EventWindow.prototype.renderDropDown = function (value) {\n var fieldName = this.getFieldName(value);\n var timezoneDiv = this.createDivElement(value + '-container');\n var timezoneInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n timezoneDiv.appendChild(timezoneInput);\n var drowDownList = new DropDownList({\n allowFiltering: true,\n change: this.onTimezoneChange,\n cssClass: this.parent.cssClass || '',\n dataSource: timezoneData,\n enableRtl: this.parent.enableRtl,\n fields: { text: 'Text', value: 'Value' },\n filterBarPlaceholder: 'Search Timezone',\n filtering: function (e) {\n var query = new Query();\n query = (e.text !== '') ? query.where('Text', 'contains', e.text, true) : query;\n e.updateData(timezoneData, query);\n },\n htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: this.getFieldLabel(value),\n popupHeight: '230px',\n });\n drowDownList.appendTo(timezoneInput);\n return timezoneDiv;\n };\n EventWindow.prototype.onMultiselectResourceChange = function (args) {\n if (!args.value || !this.parent.activeViewOptions.group.byGroupID || this.parent.resources.length <= 1) {\n return;\n }\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n for (var i = 0; i < resourceCollection.length; i++) {\n if (resourceCollection[i].field === args.element.getAttribute('name') && i < resourceCollection.length - 1) {\n var resObject = this.createInstance(i);\n var datasource = [];\n for (var j = 0; j < args.value.length; j++) {\n var resourceData = resourceCollection[i + 1].dataSource;\n var query = new Query().where(resourceCollection[i + 1].groupIDField, 'equal', args.value[j]);\n var filter = new DataManager({ json: resourceData }).executeLocal(query)[0];\n var groupId = filter[resourceCollection[i + 1].idField];\n var filterRes = this.filterDatasource(i, groupId);\n datasource = datasource.concat(filterRes);\n }\n resObject.dataSource = datasource;\n resObject.dataBind();\n }\n }\n };\n EventWindow.prototype.createInstance = function (index) {\n var resourceData = this.parent.resourceBase.resourceCollection[index + 1];\n var resObject = this.element.querySelector('.e-' + resourceData.field).\n ej2_instances[0];\n return resObject;\n };\n EventWindow.prototype.onDropdownResourceChange = function (args) {\n if (!args.value || this.parent.resources.length <= 1 || !this.parent.activeViewOptions.group.byGroupID) {\n return;\n }\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n for (var i = 0; i < resourceCollection.length; i++) {\n if ((i < resourceCollection.length - 1) && resourceCollection[i].field === args.element.getAttribute('name')) {\n var resObj = this.createInstance(i);\n var groupId = args.itemData[resourceCollection[i].idField];\n resObj.dataSource = this.filterDatasource(i, groupId);\n resObj.dataBind();\n var resValue = resObj.dataSource[0][resourceCollection[i + 1].idField];\n resObj.value = (resourceCollection[i + 1].allowMultiple) ? [resValue] : resValue;\n resObj.dataBind();\n }\n }\n };\n EventWindow.prototype.filterDatasource = function (index, groupId) {\n var resourceData = this.parent.resourceBase.resourceCollection[index + 1];\n var query = new Query().where(resourceData.groupIDField, 'equal', groupId);\n var filter = new DataManager({ json: resourceData.dataSource }).executeLocal(query);\n return filter;\n };\n EventWindow.prototype.onTimezoneChange = function () {\n if (this.element.getAttribute('name') === 'StartTimezone') {\n var startTimezoneObj = document.querySelector('.' + cls.EVENT_WINDOW_START_TZ_CLASS).ej2_instances[0];\n var endTimezoneObj = document.querySelector('.' + cls.EVENT_WINDOW_END_TZ_CLASS).ej2_instances[0];\n endTimezoneObj.value = startTimezoneObj.value;\n endTimezoneObj.dataBind();\n }\n };\n EventWindow.prototype.renderCheckBox = function (value) {\n var checkBoxDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var checkBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n checkBoxDiv.appendChild(checkBoxInput);\n var checkBox = new CheckBox({\n change: this.onChange.bind(this),\n cssClass: value + ' ' + this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n label: this.getFieldLabel(value)\n });\n checkBox.appendTo(checkBoxInput);\n checkBoxInput.setAttribute('name', fieldName);\n if (fieldName === 'Repeat') {\n this.repeatStatus = checkBox;\n }\n return checkBoxDiv;\n };\n EventWindow.prototype.renderTextBox = function (value) {\n var textBoxDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var elementType = (value === cls.DESCRIPTION_CLASS) ? 'textarea' : 'input';\n var textBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName, elementType);\n textBoxDiv.appendChild(textBoxInput);\n Input.createInput({\n element: textBoxInput,\n floatLabelType: 'Always',\n properties: {\n enableRtl: this.parent.enableRtl,\n placeholder: this.getFieldLabel(value)\n }\n });\n return textBoxDiv;\n };\n EventWindow.prototype.getFieldName = function (name) {\n var fieldName = '';\n switch (name) {\n case cls.SUBJECT_CLASS:\n fieldName = this.fields.subject;\n break;\n case cls.LOCATION_CLASS:\n fieldName = this.fields.location;\n break;\n case cls.EVENT_WINDOW_START_CLASS:\n fieldName = this.fields.startTime;\n break;\n case cls.EVENT_WINDOW_END_CLASS:\n fieldName = this.fields.endTime;\n break;\n case cls.DESCRIPTION_CLASS:\n fieldName = this.fields.description;\n break;\n case cls.EVENT_WINDOW_ALL_DAY_CLASS:\n fieldName = this.fields.isAllDay;\n break;\n case cls.EVENT_WINDOW_START_TZ_CLASS:\n fieldName = this.fields.startTimezone;\n break;\n case cls.EVENT_WINDOW_END_TZ_CLASS:\n fieldName = this.fields.endTimezone;\n break;\n case cls.TIME_ZONE_CLASS:\n fieldName = 'Timezone';\n break;\n case cls.EVENT_WINDOW_REPEAT_CLASS:\n fieldName = 'Repeat';\n break;\n }\n return fieldName;\n };\n EventWindow.prototype.getFieldLabel = function (fieldName) {\n var labelText = '';\n switch (fieldName) {\n case cls.SUBJECT_CLASS:\n labelText = this.parent.editorTitles.subject;\n break;\n case cls.LOCATION_CLASS:\n labelText = this.parent.editorTitles.location;\n break;\n case cls.DESCRIPTION_CLASS:\n labelText = this.parent.editorTitles.description;\n break;\n case cls.EVENT_WINDOW_START_CLASS:\n labelText = this.parent.editorTitles.startTime;\n break;\n case cls.EVENT_WINDOW_END_CLASS:\n labelText = this.parent.editorTitles.endTime;\n break;\n case cls.EVENT_WINDOW_START_TZ_CLASS:\n labelText = this.parent.editorTitles.startTimezone;\n break;\n case cls.EVENT_WINDOW_END_TZ_CLASS:\n labelText = this.parent.editorTitles.endTimezone;\n break;\n case cls.EVENT_WINDOW_REPEAT_CLASS:\n labelText = this.parent.editorTitles.recurrenceRule;\n break;\n case cls.EVENT_WINDOW_ALL_DAY_CLASS:\n labelText = this.parent.editorTitles.isAllDay;\n break;\n case cls.TIME_ZONE_CLASS:\n labelText = this.l10n.getConstant('timezone');\n break;\n }\n return labelText;\n };\n EventWindow.prototype.onChange = function (args) {\n var target = (args.event.target);\n if (target.classList.contains(cls.EVENT_WINDOW_ALL_DAY_CLASS)) {\n this.onAllDayChange(args.checked);\n }\n else if (target.classList.contains(cls.TIME_ZONE_CLASS)) {\n this.timezoneChangeStyle(args.checked);\n }\n else if (target.classList.contains(cls.EVENT_WINDOW_REPEAT_CLASS)) {\n this.onRepeatChange(args.checked);\n }\n };\n EventWindow.prototype.renderRepeatDialog = function () {\n var element = createElement('div');\n this.repeatDialogObject = new Dialog({\n header: this.l10n.getConstant('recurrence'),\n visible: false,\n content: '
    ',\n closeOnEscape: true,\n width: '90%',\n buttons: [{\n click: this.repeatSaveDialog.bind(this),\n buttonModel: { content: this.l10n.getConstant('save'), cssClass: 'e-save', isPrimary: true }\n },\n { click: this.repeatCancelDialog.bind(this), buttonModel: { cssClass: 'e-cancel', content: this.l10n.getConstant('cancel') } }],\n target: this.element,\n animationSettings: { effect: 'Zoom' },\n enableRtl: this.parent.enableRtl,\n isModal: true,\n cssClass: REPEAT_DIALOG_CLASS,\n open: this.repeatOpenDialog.bind(this)\n });\n this.element.appendChild(element);\n this.repeatDialogObject.appendTo(element);\n this.createRecurrenceEditor(this.repeatDialogObject.element.querySelector('.e-rec-editor'));\n };\n EventWindow.prototype.loadRecurrenceEditor = function () {\n this.repeatDialogObject.show();\n if (this.recurrenceEditor && this.repeatRule) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatRule);\n }\n };\n EventWindow.prototype.onRepeatChange = function (state) {\n if (state) {\n if (!this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n this.recurrenceEditor.setProperties({ startDate: this.repeatStartDate, selectedType: 0 });\n this.loadRecurrenceEditor();\n }\n else {\n if (this.repeatDialogObject) {\n this.repeatDialogObject.hide();\n }\n this.repeatRule = '';\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatRule);\n this.updateRepeatLabel(this.repeatRule);\n }\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n addClass([element], HIDE_STYLE_CLASS);\n }\n };\n EventWindow.prototype.repeatSaveDialog = function () {\n this.repeatRule = this.recurrenceEditor.getRecurrenceRule();\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (this.recurrenceEditor.getRecurrenceRule()) {\n removeClass([element], HIDE_STYLE_CLASS);\n }\n else {\n addClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n this.closeRepeatDialog();\n };\n EventWindow.prototype.closeRepeatDialog = function () {\n this.repeatDialogObject.hide();\n };\n EventWindow.prototype.repeatCancelDialog = function () {\n this.closeRepeatDialog();\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatTempRule);\n }\n if (!this.repeatTempRule) {\n this.repeatStatus.setProperties({ checked: false });\n }\n };\n EventWindow.prototype.repeatOpenDialog = function () {\n this.repeatTempRule = this.recurrenceEditor.getRecurrenceRule();\n };\n EventWindow.prototype.onCellDetailsUpdate = function (event) {\n this.element.querySelector('.' + cls.FORM_CLASS).removeAttribute('data-id');\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('newEvent');\n var eventObj = {};\n if (this.cellClickAction) {\n if (event.subject) {\n eventObj[this.fields.subject] = event.subject;\n }\n eventObj[this.fields.startTime] = event.startTime;\n eventObj[this.fields.endTime] = event.endTime;\n eventObj[this.fields.isAllDay] = event.isAllDay;\n if (this.parent.resources.length > 0 || this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.setResourceValues(eventObj, false);\n }\n }\n else {\n this.parent.activeCellsData = {\n startTime: (event.startTime || event[this.fields.startTime]),\n endTime: (event.endTime || event[this.fields.endTime]),\n isAllDay: (event.isAllDay || event[this.fields.isAllDay]),\n element: event.element,\n groupIndex: event.groupIndex\n };\n eventObj = event;\n }\n eventObj.Timezone = false;\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n this.showDetails(eventObj);\n var deleteButton = this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS);\n if (deleteButton) {\n addClass([deleteButton], cls.DISABLE_CLASS);\n }\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setProperties({ startDate: eventObj[this.fields.startTime], selectedType: 0 });\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n addClass([element], HIDE_STYLE_CLASS);\n this.updateRepeatLabel(this.repeatRule);\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.applyFormValidation = function () {\n var getValidationRule = function (rules) { return (rules && Object.keys(rules).length > 0) ? rules : undefined; };\n var form = this.element.querySelector('.' + cls.FORM_CLASS);\n var rules = {};\n rules[this.parent.eventSettings.fields.subject.name] = getValidationRule(this.parent.eventSettings.fields.subject.validation);\n rules[this.parent.eventSettings.fields.location.name] = getValidationRule(this.parent.eventSettings.fields.location.validation);\n rules[this.parent.eventSettings.fields.startTime.name] = getValidationRule(this.parent.eventSettings.fields.startTime.validation);\n rules[this.parent.eventSettings.fields.endTime.name] = getValidationRule(this.parent.eventSettings.fields.endTime.validation);\n rules[this.parent.eventSettings.fields.description.name] =\n getValidationRule(this.parent.eventSettings.fields.description.validation);\n this.fieldValidator.renderFormValidator(form, rules, this.element);\n };\n EventWindow.prototype.showDetails = function (eventData) {\n var eventObj = extend({}, eventData, null, true);\n this.trimAllDay(eventObj);\n this.eventData = eventObj;\n var formelement = this.getFormElements(cls.EVENT_WINDOW_DIALOG_CLASS);\n var keyNames = Object.keys(eventObj);\n for (var _i = 0, formelement_1 = formelement; _i < formelement_1.length; _i++) {\n var curElement = formelement_1[_i];\n var columnName = curElement.name;\n var isCustomElement = (curElement.classList.contains('e-multiselect') ||\n curElement.classList.contains('e-dropdownlist'));\n if (!isNullOrUndefined(columnName) || isCustomElement) {\n if (columnName === '' && isCustomElement) {\n columnName = this.getColumnName(curElement);\n curElement.setAttribute('name', columnName);\n }\n if (keyNames.indexOf(columnName) !== -1) {\n this.setValueToElement(curElement, eventObj[columnName]);\n }\n else {\n this.setDefaultValueToElement(curElement);\n }\n }\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n this.onAllDayChange(eventObj[this.fields.isAllDay]);\n var timezoneObj = this.getInstance(cls.TIME_ZONE_CLASS + '.' + EVENT_FIELD);\n if (!(isNullOrUndefined(eventObj[this.fields.startTimezone]) && isNullOrUndefined(eventObj[this.fields.endTimezone]))) {\n timezoneObj.checked = true;\n timezoneObj.dataBind();\n }\n this.timezoneChangeStyle(timezoneObj.checked);\n delete eventObj.Timezone;\n }\n };\n EventWindow.prototype.getColumnName = function (element) {\n var isDropDownList = element.classList.contains('e-dropdownlist');\n var inputCollection = isDropDownList ? [].slice.call(element.parentElement.children) :\n [].slice.call(element.parentElement.parentElement.children);\n var collection = inputCollection.filter(function (item) { return item.name; });\n return (collection.length > 0) ? collection[0].name : '';\n };\n EventWindow.prototype.onAllDayChange = function (allDayStatus) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n var timezoneDiv = this.element.querySelector('.e-time-zone-container');\n var format;\n if (allDayStatus) {\n format = (isNullOrUndefined(this.parent.dateFormat)) ? this.getFormat('dateFormats') : this.parent.dateFormat;\n addClass(this.element.querySelectorAll('.e-time-icon'), cls.EVENT_WINDOW_ICON_DISABLE_CLASS);\n addClass([timezoneDiv], cls.DISABLE_CLASS);\n if (this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS)) {\n removeClass([this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS)], cls.ENABLE_CLASS);\n }\n startObj.format = endObj.format = format;\n }\n else {\n format = (isNullOrUndefined(this.parent.dateFormat)) ? this.getFormat('dateFormats') + ' ' + this.getFormat('timeFormats') :\n this.parent.dateFormat + ' ' + this.getFormat('timeFormats');\n removeClass(this.element.querySelectorAll('.e-time-icon'), cls.EVENT_WINDOW_ICON_DISABLE_CLASS);\n removeClass([timezoneDiv], cls.DISABLE_CLASS);\n if (this.element.querySelector('.e-checkbox-wrapper .e-time-zone').checked) {\n addClass([this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS)], cls.ENABLE_CLASS);\n }\n startObj.format = endObj.format = format;\n }\n if (this.cellClickAction) {\n this.updateDateTime(allDayStatus, startObj, endObj);\n }\n startObj.dataBind();\n endObj.dataBind();\n };\n EventWindow.prototype.updateDateTime = function (allDayStatus, startObj, endObj) {\n var startDate;\n var endDate;\n if (allDayStatus) {\n startDate = util.resetTime(new Date(this.parent.activeCellsData.startTime.getTime()));\n if (this.parent.activeCellsData.isAllDay) {\n var temp = util.addDays(new Date(this.parent.activeCellsData.endTime.getTime()), -1).getTime();\n endDate = (+this.parent.activeCellsData.startTime > temp) ? this.parent.activeCellsData.endTime : new Date(temp);\n }\n else {\n endDate = util.resetTime(new Date(this.parent.activeCellsData.endTime.getTime()));\n }\n }\n else {\n startDate = new Date(this.parent.activeCellsData.startTime.getTime());\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'MonthAgenda' || this.parent.activeCellsData.isAllDay) {\n var startHour = this.parent.globalize.parseDate(this.parent.workHours.start, { skeleton: 'Hm' });\n startDate.setHours(startHour.getHours(), startHour.getMinutes(), startHour.getSeconds());\n endDate = new Date(startDate.getTime());\n endDate.setMilliseconds(util.MS_PER_MINUTE * this.getSlotDuration());\n }\n else {\n endDate = new Date(this.parent.activeCellsData.endTime.getTime());\n }\n }\n startObj.value = startDate;\n endObj.value = endDate;\n startObj.dataBind();\n endObj.dataBind();\n };\n EventWindow.prototype.getFormat = function (formatType) {\n var format;\n if (this.parent.locale === 'en' || this.parent.locale === 'en-US') {\n format = getValue(formatType + '.short', getDefaultDateObject());\n }\n else {\n format = getValue('main.' + '' + this.parent.locale + '.dates.calendars.gregorian.' + formatType + '.short', cldrData);\n }\n return format;\n };\n EventWindow.prototype.onEventDetailsUpdate = function (eventObj) {\n if (!this.parent.isAdaptive) {\n removeClass([this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS)], cls.DISABLE_CLASS);\n }\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('editEvent');\n this.element.querySelector('.' + cls.FORM_CLASS).setAttribute('data-id', eventObj[this.fields.id].toString());\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n eventObj = extend({}, eventObj, null, true);\n var timezoneObj = this.getInstance(cls.TIME_ZONE_CLASS + '.' + EVENT_FIELD);\n var timezoneValue = void 0;\n if (eventObj[this.fields.startTimezone] || eventObj[this.fields.endTimezone]) {\n timezoneValue = true;\n this.parent.eventBase.timezoneConvert(eventObj);\n }\n else {\n timezoneValue = false;\n }\n eventObj.Timezone = timezoneValue;\n timezoneObj.checked = timezoneValue;\n timezoneObj.dataBind();\n }\n this.showDetails(eventObj);\n if (eventObj[this.fields.recurrenceRule] && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n else if (!this.parent.isAdaptive && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule('');\n }\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n if (eventObj[this.fields.recurrenceRule]) {\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n this.repeatRule = eventObj[this.fields.recurrenceRule];\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (eventObj[this.fields.recurrenceRule]) {\n removeClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: true });\n }\n else {\n addClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n }\n if (this.parent.readonly && !this.parent.isAdaptive) {\n var saveButton = this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS);\n saveButton.ej2_instances[0].disabled = true;\n var deleteButton = this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS);\n deleteButton.ej2_instances[0].disabled = true;\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.renderRecurrenceEditor = function () {\n return new RecurrenceEditor({\n cssClass: this.parent.cssClass,\n dateFormat: this.parent.dateFormat,\n enableRtl: this.parent.enableRtl,\n firstDayOfWeek: this.parent.firstDayOfWeek,\n locale: this.parent.locale\n });\n };\n EventWindow.prototype.updateRepeatLabel = function (repeatRule) {\n if (this.parent.isAdaptive && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n var data = repeatRule ?\n (this.l10n.getConstant('repeats') + ' ' + this.recurrenceEditor.getRuleSummary(repeatRule)) : this.l10n.getConstant('repeat');\n this.repeatStatus.setProperties({ label: data });\n };\n EventWindow.prototype.dialogClose = function () {\n this.dialogObject.hide();\n this.fieldValidator.destroyToolTip();\n this.resetFormFields();\n if (!this.parent.isAdaptive && this.recurrenceEditor) {\n this.recurrenceEditor.resetFields();\n }\n };\n EventWindow.prototype.timezoneChangeStyle = function (value) {\n var timezoneDiv = this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS);\n if (value) {\n addClass([timezoneDiv], cls.ENABLE_CLASS);\n var startTimezoneObj = this.getInstance(cls.EVENT_WINDOW_START_TZ_CLASS);\n var endTimezoneObj = this.getInstance(cls.EVENT_WINDOW_END_TZ_CLASS);\n var timezone = startTimezoneObj.dataSource;\n if (!startTimezoneObj.value || !this.parent.timezone) {\n var found = timezone.some(function (tz) { return tz.Value === localTimezoneName; });\n if (!found) {\n timezone.push({ Value: localTimezoneName, Text: localTimezoneName });\n startTimezoneObj.dataSource = timezone;\n endTimezoneObj.dataSource = timezone;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n }\n startTimezoneObj.value = startTimezoneObj.value || this.parent.timezone || localTimezoneName;\n endTimezoneObj.value = endTimezoneObj.value || this.parent.timezone || localTimezoneName;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n else {\n removeClass([timezoneDiv], cls.ENABLE_CLASS);\n }\n };\n EventWindow.prototype.resetFormFields = function () {\n var formelement = this.getFormElements(cls.EVENT_WINDOW_DIALOG_CLASS);\n for (var index = 0, len = formelement.length; index < len; index++) {\n var columnName = formelement[index].name;\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n this.setDefaultValueToElement(formelement[index]);\n }\n }\n };\n EventWindow.prototype.eventSave = function (alert) {\n var alertType;\n var formElement = this.element.querySelector('.' + cls.FORM_CLASS);\n if (formElement && formElement.classList.contains('e-formvalidator') &&\n !formElement.ej2_instances[0].validate()) {\n return;\n }\n var eventObj = extend({}, this.getObjectFromFormData(cls.EVENT_WINDOW_DIALOG_CLASS));\n if (!eventObj.Timezone) {\n eventObj[this.fields.startTimezone] = null;\n eventObj[this.fields.endTimezone] = null;\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n delete eventObj.Timezone;\n delete eventObj.Repeat;\n if (!eventObj[this.fields.startTime] || !eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('invalidDateError');\n return;\n }\n if (eventObj[this.fields.startTime] > eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('startEndError');\n return;\n }\n }\n if (this.recurrenceEditor && this.recurrenceEditor.value && this.recurrenceEditor.value !== '') {\n alertType = this.recurrenceValidation(eventObj[this.fields.startTime], eventObj[this.fields.endTime], alert);\n if (!isNullOrUndefined(alertType)) {\n this.parent.quickPopup.openRecurrenceValidationAlert(alertType);\n return;\n }\n }\n var eventId = this.getEventIdFromForm();\n this.setDefaultValueToObject(eventObj);\n if (eventObj[this.fields.isAllDay]) {\n eventObj[this.fields.startTime] = util.resetTime(new Date(eventObj[this.fields.startTime].getTime()));\n eventObj[this.fields.endTime] = util.addDays(util.resetTime(new Date(eventObj[this.fields.endTime].getTime())), 1);\n }\n var ruleData = this.recurrenceEditor ? this.recurrenceEditor.getRecurrenceRule() : null;\n eventObj[this.fields.recurrenceRule] = ruleData ? ruleData : undefined;\n var isResourceEventExpand = (this.parent.activeViewOptions.group.resources.length > 0 || this.parent.resources.length > 0)\n && !this.parent.activeViewOptions.group.allowGroupEdit;\n if (!isNullOrUndefined(eventId)) {\n var eveId = this.parent.eventBase.getEventIDType() === 'string' ? eventId : parseInt(eventId, 10);\n var editedData = new DataManager({ json: this.parent.eventsData }).executeLocal(new Query().\n where(this.fields.id, 'equal', eveId))[0];\n eventObj = extend({}, editedData, eventObj);\n var currentAction = void 0;\n if (!isNullOrUndefined(editedData[this.fields.recurrenceRule])) {\n currentAction = this.parent.currentAction;\n if (this.parent.currentAction === 'EditOccurrence') {\n if (!eventObj[this.fields.recurrenceID]) {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxID();\n eventObj.Guid = this.parent.activeEventData.event.Guid;\n }\n else {\n eveId = eventObj[this.fields.recurrenceID];\n currentAction = null;\n }\n if (this.editOccurrenceValidation(eveId, eventObj)) {\n this.parent.quickPopup.openRecurrenceValidationAlert('sameDayAlert');\n return;\n }\n }\n if (this.parent.currentAction === 'EditSeries' || eventObj[this.fields.id] !== editedData[this.fields.id]) {\n eventObj[this.fields.recurrenceID] = editedData[this.fields.id];\n }\n }\n if (isResourceEventExpand) {\n this.resourceSaveEvent(eventObj, 'Save', currentAction);\n }\n else {\n this.parent.saveEvent(eventObj, currentAction);\n }\n }\n else {\n this.parent.currentAction = 'Add';\n if (isResourceEventExpand) {\n this.resourceSaveEvent(eventObj, this.parent.currentAction);\n }\n else {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxID();\n this.parent.addEvent(eventObj);\n }\n }\n this.dialogObject.hide();\n };\n EventWindow.prototype.getObjectFromFormData = function (className) {\n var formElement = this.getFormElements(className);\n var eventObj = {};\n for (var _i = 0, formElement_1 = formElement; _i < formElement_1.length; _i++) {\n var currentElement = formElement_1[_i];\n var columnName = currentElement.name;\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n eventObj[columnName] = this.getValueFromElement(currentElement);\n }\n }\n return eventObj;\n };\n EventWindow.prototype.setDefaultValueToObject = function (eventObj) {\n if (!isNullOrUndefined(eventObj[this.fields.subject])) {\n eventObj[this.fields.subject] = eventObj[this.fields.subject] || this.parent.eventSettings.fields.subject.default;\n }\n if (!isNullOrUndefined(eventObj[this.fields.location])) {\n eventObj[this.fields.location] = eventObj[this.fields.location] || this.parent.eventSettings.fields.location.default;\n }\n if (!isNullOrUndefined(eventObj[this.fields.description])) {\n eventObj[this.fields.description] = eventObj[this.fields.description] || this.parent.eventSettings.fields.description.default;\n }\n };\n EventWindow.prototype.recurrenceValidation = function (startDate, endDate, alert) {\n var alertMessage;\n var recEditor = this.recurrenceEditor;\n var interval = this.getInstance('e-repeat-interval.e-numerictextbox').value;\n if (alert !== this.l10n.getConstant('ok')) {\n if (this.parent.currentAction === 'EditSeries' &&\n !isNullOrUndefined(this.eventData[this.parent.eventFields.recurrenceException])) {\n alertMessage = 'seriesChangeAlert';\n }\n if (this.getInstance('e-end-on-left .e-ddl .e-dropdownlist').value === 'until' &&\n this.getInstance('e-end-on-date .e-datepicker').value\n < recEditor.startDate) {\n alertMessage = 'wrongPattern';\n }\n if (isNullOrUndefined(alertMessage)) {\n switch (recEditor.value.split(';')[0].split('=')[1]) {\n case 'DAILY':\n if ((((endDate.getTime() - startDate.getTime()) / (1000 * 3600)) >= (interval * 24))) {\n alertMessage = 'createError';\n }\n break;\n case 'WEEKLY':\n var types = recEditor.value.split(';')[1].split('=')[1].split(',');\n var obj = { 'SU': 0, 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6 };\n var temp = [];\n var tempDiff = [];\n for (var index = 0; index < types.length * (interval + 1); index++) {\n temp[index] =\n (types.length > index) ? obj[types[index]] : temp[index - types.length] + (7 * interval);\n }\n var tempvalue = temp.sort(function (a, b) { return a - b; });\n for (var index = 1; index < tempvalue.length; index++) {\n tempDiff.push(tempvalue[index] - tempvalue[index - 1]);\n }\n if ((((endDate.getTime() - startDate.getTime()) / (1000 * 3600)) >= Math.min.apply(Math, tempDiff) * 24)\n || isNullOrUndefined(interval)) {\n alertMessage = 'createError';\n }\n break;\n case 'MONTHLY':\n if (this.getInstance('e-month-expander-checkbox-wrapper .e-radio').checked\n && [29, 30, 31].indexOf(parseInt(recEditor.value.split(';')[1].split('=')[1], 10)) !== -1) {\n alertMessage = 'dateValidation';\n }\n else if (endDate.getTime() >= new Date(+startDate).setMonth(startDate.getMonth() + interval)) {\n alertMessage = 'createError';\n }\n break;\n case 'YEARLY':\n if (endDate.getTime() >= new Date(+startDate).setFullYear(startDate.getFullYear() + interval)) {\n alertMessage = 'createError';\n }\n break;\n }\n }\n }\n else {\n if (endDate.getTime() >= new Date(+startDate).setMonth(startDate.getMonth() + interval)) {\n alertMessage = 'createError';\n }\n if (isNullOrUndefined(alertMessage)) {\n this.parent.quickPopup.quickDialog.hide();\n }\n }\n return alertMessage;\n };\n EventWindow.prototype.getRecurrenceIndex = function (recColl, event) {\n var recIndex;\n for (var index = 0; index < recColl.length; index++) {\n if (event[this.fields.startTime].valueOf() === recColl[index][this.fields.startTime].valueOf()) {\n recIndex = index;\n break;\n }\n }\n return recIndex;\n };\n EventWindow.prototype.trimAllDay = function (data) {\n if (data[this.fields.isAllDay]) {\n var temp = util.addDays(new Date(+data[this.fields.endTime]), -1).getTime();\n data[this.fields.endTime] = (+data[this.fields.startTime] > temp) ? data[this.fields.endTime] : new Date(temp);\n }\n };\n EventWindow.prototype.editOccurrenceValidation = function (eventId, currentData, editData) {\n if (editData === void 0) {\n editData = this.eventData;\n }\n var recurColl = this.parent.getOccurrencesByID(eventId);\n var excludedDatas = new DataManager({ json: this.parent.eventsData }).executeLocal(new Query().\n where(this.fields.recurrenceID, 'equal', eventId));\n excludedDatas.map(function (data) { return recurColl.push(extend({}, data)); });\n currentData = extend({}, currentData);\n this.trimAllDay(currentData);\n for (var _i = 0, recurColl_1 = recurColl; _i < recurColl_1.length; _i++) {\n var data = recurColl_1[_i];\n this.trimAllDay(data);\n }\n this.parent.eventBase.sortByTime(recurColl);\n var index = this.getRecurrenceIndex(recurColl, editData);\n if (isNullOrUndefined(index)) {\n return false;\n }\n if (index === 0) {\n if (!isNullOrUndefined(recurColl[index + 1])) {\n return (!(new Date(+recurColl[index + 1][this.fields.startTime]).setHours(0, 0, 0, 0) >\n new Date(+currentData[this.fields.endTime]).setHours(0, 0, 0, 0)));\n }\n return false;\n }\n else {\n if (index === recurColl.length - 1) {\n if (!(new Date(+recurColl[index - 1][this.fields.endTime]).setHours(0, 0, 0, 0) <\n new Date(+currentData[this.fields.startTime]).setHours(0, 0, 0, 0))) {\n return true;\n }\n }\n else if (!((new Date(+recurColl[index - 1][this.fields.endTime]).setHours(0, 0, 0, 0) <\n new Date(+currentData[this.fields.startTime]).setHours(0, 0, 0, 0)) &&\n (new Date(+recurColl[index + 1][this.fields.startTime]).setHours(0, 0, 0, 0) >\n new Date(+currentData[this.fields.endTime]).setHours(0, 0, 0, 0)))) {\n return true;\n }\n }\n return false;\n };\n EventWindow.prototype.resourceSaveEvent = function (eventObj, action, currentAction) {\n var _this = this;\n var lastResouceData = this.parent.resourceBase.resourceCollection.slice(-1)[0];\n var resourceData = eventObj[lastResouceData.field];\n resourceData = (resourceData instanceof Array) ? resourceData : [resourceData];\n var lastlevel = this.parent.resourceBase.lastResourceLevel;\n var eventList = [];\n var _loop_1 = function (i) {\n var events = extend({}, eventObj, null, true);\n events[this_1.fields.id] = this_1.parent.eventBase.getEventMaxID();\n var temp = [];\n var addValues = function () {\n if (action === 'Save' && i === resourceData.length - 1) {\n if (temp.length > 0) {\n temp[0][_this.fields.id] = eventObj[_this.fields.id];\n for (var k = 1; k < temp.length; k++) {\n temp[k][_this.fields.id] = _this.parent.eventBase.getEventMaxID(i);\n eventList.push(temp[k]);\n _this.parent.saveEvent(temp[0], currentAction);\n }\n }\n else {\n events[_this.fields.id] = eventObj[_this.fields.id];\n _this.parent.saveEvent(events, currentAction);\n }\n }\n else {\n if (temp.length > 0) {\n for (var j = 0; j < temp.length; j++) {\n temp[j][_this.fields.id] = _this.parent.eventBase.getEventMaxID(j);\n eventList.push(temp[j]);\n }\n }\n else {\n events[_this.fields.id] = _this.parent.eventBase.getEventMaxID(i);\n eventList.push(events);\n }\n }\n };\n if (this_1.parent.activeViewOptions.group.byGroupID && (!isNullOrUndefined(lastlevel))) {\n var lastResource = lastResouceData.dataSource;\n var index = util.findIndexInData(lastResource, lastResouceData.idField, resourceData[i]);\n var groupId_1 = lastResource[index][lastResouceData.groupIDField];\n var filter = lastlevel.filter(function (obj) { return obj.resourceData[lastResouceData.idField] === resourceData[i]; }).\n filter(function (obj) { return obj.resourceData[lastResouceData.groupIDField] === groupId_1; })[0];\n var groupOrder = filter.groupOrder;\n for (var index_1 = 0; index_1 < this_1.parent.resourceBase.resourceCollection.length; index_1++) {\n var field = this_1.parent.resourceBase.resourceCollection[index_1].field;\n events[field] = (groupOrder[index_1] instanceof Array) ? groupOrder[index_1][0] : groupOrder[index_1];\n }\n addValues();\n }\n else {\n for (var index = 0; index < this_1.parent.resourceBase.resourceCollection.length - 1; index++) {\n var field = this_1.parent.resourceBase.resourceCollection[index].field;\n if (events[field] instanceof Array && events[field].length > 1) {\n for (var k = 0; k < events[field].length; k++) {\n var event_1 = extend({}, events, null, true);\n event_1[field] = eventObj[field][k];\n event_1[lastResouceData.field] = resourceData[i];\n temp.push(event_1);\n }\n }\n else {\n if (temp.length === 0) {\n events[field] = (eventObj[field] instanceof Array) ?\n eventObj[field][0] : eventObj[field];\n events[lastResouceData.field] = resourceData[i];\n }\n else {\n for (var l = 0; l < temp.length; l++) {\n temp[l][field] = (eventObj[field] instanceof Array) ?\n eventObj[field][0] : eventObj[field];\n }\n }\n }\n }\n events[lastResouceData.field] = resourceData[i];\n addValues();\n }\n };\n var this_1 = this;\n for (var i = 0; i < resourceData.length; i++) {\n _loop_1(i);\n }\n if (eventList.length > 0) {\n for (var _i = 0, eventList_1 = eventList; _i < eventList_1.length; _i++) {\n var event_2 = eventList_1[_i];\n event_2[this.fields.recurrenceException] = null;\n event_2[this.fields.recurrenceID] = null;\n }\n this.parent.addEvent(eventList);\n }\n };\n EventWindow.prototype.getEventIdFromForm = function () {\n return this.element.querySelector('.' + cls.FORM_CLASS).getAttribute('data-id');\n };\n EventWindow.prototype.getFormElements = function (className) {\n if (className === cls.EVENT_WINDOW_DIALOG_CLASS) {\n return [].slice.call(this.element.querySelectorAll('.' + EVENT_FIELD));\n }\n return [].slice.call(this.parent.element.querySelectorAll('.' + className + ' .' + EVENT_FIELD));\n };\n EventWindow.prototype.getValueFromElement = function (element) {\n var value;\n if (element.classList.contains('e-datepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-datetimepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-dropdownlist')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-multiselect')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-checkbox')) {\n value = element.ej2_instances[0].checked;\n }\n else {\n if (element.type === 'checkbox') {\n value = element.checked;\n }\n else {\n value = element.value;\n }\n }\n return value;\n };\n EventWindow.prototype.setValueToElement = function (element, value) {\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-datetimepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-multiselect')) {\n var instance = element.ej2_instances[0];\n instance.value = [];\n instance.value = ((value instanceof Array) ? value : [value]);\n instance.dataBind();\n }\n else if (element.classList.contains('e-checkbox')) {\n var instance = element.ej2_instances[0];\n instance.checked = value;\n instance.dataBind();\n }\n else {\n if (element.type !== 'checkbox') {\n element.value = value || '';\n }\n else {\n element.checked = value;\n }\n }\n };\n EventWindow.prototype.setDefaultValueToElement = function (element) {\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = new Date();\n instance.dataBind();\n }\n else if (element.classList.contains('e-datetimepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = new Date();\n instance.dataBind();\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.value = null;\n instance.dataBind();\n }\n else if (element.classList.contains('e-multiselect')) {\n var instance = element.ej2_instances[0];\n instance.value = [];\n instance.dataBind();\n }\n else if (element.classList.contains('e-checkbox')) {\n var instance = element.ej2_instances[0];\n instance.checked = false;\n instance.dataBind();\n }\n else {\n if (element.type === 'checkbox') {\n element.checked = false;\n }\n else {\n element.value = '';\n }\n }\n };\n EventWindow.prototype.getInstance = function (className) {\n return this.element.querySelector('.' + className).ej2_instances[0];\n };\n EventWindow.prototype.eventDelete = function () {\n switch (this.parent.currentAction) {\n case 'EditOccurrence':\n var fields = this.parent.eventFields;\n if (!isNullOrUndefined(this.parent.activeEventData.event[fields.recurrenceRule])) {\n this.parent.currentAction = 'DeleteOccurrence';\n }\n else {\n this.parent.currentAction = 'Delete';\n }\n break;\n case 'EditSeries':\n this.parent.currentAction = 'DeleteSeries';\n break;\n }\n this.dialogObject.hide();\n this.parent.quickPopup.openDeleteAlert();\n };\n EventWindow.prototype.getRecurrenceEditorInstance = function () {\n if (this.parent.isAdaptive && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n return this.recurrenceEditor;\n };\n EventWindow.prototype.destroyComponents = function () {\n var formelement = this.getFormElements(cls.EVENT_WINDOW_DIALOG_CLASS);\n for (var _i = 0, formelement_2 = formelement; _i < formelement_2.length; _i++) {\n var element = formelement_2[_i];\n var instance = void 0;\n if (element.classList.contains('e-datetimepicker')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-datepicker')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-checkbox')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-dropdownlist')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-multiselect')) {\n instance = element.ej2_instances[0];\n }\n if (instance) {\n instance.destroy();\n }\n }\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n };\n /**\n * To destroy the event window.\n * @return {void}\n * @private\n */\n EventWindow.prototype.destroy = function () {\n if (this.recurrenceEditor) {\n this.recurrenceEditor.destroy();\n }\n this.destroyComponents();\n this.fieldValidator.destroy();\n if (this.repeatDialogObject) {\n this.repeatDialogObject.destroy();\n remove(this.repeatDialogObject.element);\n }\n if (this.dialogObject) {\n this.dialogObject.destroy();\n this.dialogObject = null;\n }\n if (this.element) {\n remove(this.element);\n this.element = null;\n }\n };\n return EventWindow;\n}());\nexport { EventWindow };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { EventTooltip } from '../popups/event-tooltip';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Schedule DOM rendering\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render\n */\n function Render(parent) {\n this.parent = parent;\n }\n Render.prototype.render = function (viewName, isDataRefresh) {\n if (isDataRefresh === void 0) { isDataRefresh = true; }\n this.initializeLayout(viewName);\n if (isDataRefresh) {\n this.refreshDataManager();\n }\n };\n Render.prototype.initializeLayout = function (viewName) {\n if (this.parent.activeView) {\n this.parent.activeView.removeEventListener();\n this.parent.activeView.destroy();\n }\n switch (viewName) {\n case 'Day':\n this.parent.activeView = this.parent.dayModule;\n break;\n case 'Week':\n this.parent.activeView = this.parent.weekModule;\n break;\n case 'WorkWeek':\n this.parent.activeView = this.parent.workWeekModule;\n break;\n case 'Month':\n this.parent.activeView = this.parent.monthModule;\n break;\n case 'Agenda':\n this.parent.activeView = this.parent.agendaModule;\n break;\n case 'MonthAgenda':\n this.parent.activeView = this.parent.monthAgendaModule;\n break;\n case 'TimelineDay':\n this.parent.activeView = this.parent.timelineViewsModule;\n this.parent.activeView.viewClass = 'e-timeline-day-view';\n break;\n case 'TimelineWorkWeek':\n this.parent.activeView = this.parent.timelineViewsModule;\n this.parent.activeView.viewClass = 'e-timeline-work-week-view';\n break;\n case 'TimelineWeek':\n this.parent.activeView = this.parent.timelineViewsModule;\n this.parent.activeView.viewClass = 'e-timeline-week-view';\n break;\n case 'TimelineMonth':\n this.parent.activeView = this.parent.timelineMonthModule;\n break;\n }\n if (isNullOrUndefined(this.parent.activeView)) {\n var firstView = this.parent.viewCollections[0].option;\n if (firstView) {\n this.parent.setProperties({ currentView: firstView }, true);\n if (this.parent.headerModule) {\n this.parent.headerModule.updateActiveView();\n this.parent.headerModule.setCalendarView();\n }\n return this.initializeLayout(firstView);\n }\n throw Error('Inject required modules');\n }\n this.updateLabelText(viewName);\n this.parent.activeView.addEventListener();\n this.parent.activeView.getRenderDates();\n this.parent.uiStateValues.isGroupAdaptive = this.parent.isAdaptive && this.parent.activeViewOptions.group.resources.length > 0 &&\n this.parent.activeViewOptions.group.enableCompactView;\n this.parent.activeView.renderLayout(cls.CURRENT_PANEL_CLASS);\n if (this.parent.eventTooltip) {\n this.parent.eventTooltip.destroy();\n this.parent.eventTooltip = null;\n }\n if (this.parent.eventSettings.enableTooltip || (this.parent.activeViewOptions.group.resources.length > 0\n && this.parent.activeViewOptions.group.headerTooltipTemplate)) {\n this.parent.eventTooltip = new EventTooltip(this.parent);\n }\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n }\n };\n Render.prototype.updateLabelText = function (view) {\n var content = this.parent.activeView.getLabelText(view);\n this.parent.element.setAttribute('role', 'main');\n this.parent.element.setAttribute('aria-label', content);\n };\n Render.prototype.refreshDataManager = function () {\n var _this = this;\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var dataManager = this.parent.dataModule.getData(this.parent.dataModule.generateQuery(start, end));\n dataManager.then(function (e) { return _this.dataManagerSuccess(e); }).catch(function (e) { return _this.dataManagerFailure(e); });\n };\n Render.prototype.dataManagerSuccess = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.dataBinding, e);\n this.parent.eventsData = extend([], e.result, null, true);\n var processed = this.parent.eventBase.processData(this.parent.eventsData);\n this.parent.notify(events.dataReady, { processedData: processed });\n if (this.parent.dragAndDropModule && this.parent.dragAndDropModule.actionObj.action === 'drag') {\n this.parent.dragAndDropModule.navigationWrapper();\n }\n this.parent.trigger(events.dataBound);\n this.parent.hideSpinner();\n };\n Render.prototype.dataManagerFailure = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\n };\n return Render;\n}());\nexport { Render };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that represents the configuration of working hours related options of scheduler.\n */\nvar WorkHours = /** @class */ (function (_super) {\n __extends(WorkHours, _super);\n function WorkHours() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], WorkHours.prototype, \"highlight\", void 0);\n __decorate([\n Property('09:00')\n ], WorkHours.prototype, \"start\", void 0);\n __decorate([\n Property('18:00')\n ], WorkHours.prototype, \"end\", void 0);\n return WorkHours;\n}(ChildProperty));\nexport { WorkHours };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that represents the configuration of options related to timescale on scheduler.\n */\nvar TimeScale = /** @class */ (function (_super) {\n __extends(TimeScale, _super);\n function TimeScale() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], TimeScale.prototype, \"enable\", void 0);\n __decorate([\n Property(60)\n ], TimeScale.prototype, \"interval\", void 0);\n __decorate([\n Property(2)\n ], TimeScale.prototype, \"slotCount\", void 0);\n __decorate([\n Property()\n ], TimeScale.prototype, \"minorSlotTemplate\", void 0);\n __decorate([\n Property()\n ], TimeScale.prototype, \"majorSlotTemplate\", void 0);\n return TimeScale;\n}(ChildProperty));\nexport { TimeScale };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that defines the template options available to customize the quick popup of scheduler.\n */\nvar QuickInfoTemplates = /** @class */ (function (_super) {\n __extends(QuickInfoTemplates, _super);\n function QuickInfoTemplates() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], QuickInfoTemplates.prototype, \"header\", void 0);\n __decorate([\n Property()\n ], QuickInfoTemplates.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], QuickInfoTemplates.prototype, \"footer\", void 0);\n return QuickInfoTemplates;\n}(ChildProperty));\nexport { QuickInfoTemplates };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that represents the header rows related configurations on timeline views.\n */\nvar HeaderRows = /** @class */ (function (_super) {\n __extends(HeaderRows, _super);\n function HeaderRows() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], HeaderRows.prototype, \"option\", void 0);\n __decorate([\n Property()\n ], HeaderRows.prototype, \"template\", void 0);\n return HeaderRows;\n}(ChildProperty));\nexport { HeaderRows };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configuration that applies on each appointment field options of scheduler.\n */\nvar FieldOptions = /** @class */ (function (_super) {\n __extends(FieldOptions, _super);\n function FieldOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldOptions.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"default\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"title\", void 0);\n __decorate([\n Property({})\n ], FieldOptions.prototype, \"validation\", void 0);\n return FieldOptions;\n}(ChildProperty));\nexport { FieldOptions };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { FieldOptions } from './field-options';\n/**\n * A Class that holds the collection of event fields that requires to be mapped with the dataSource\n * fields along with its available configuration settings. Each field in it accepts both string and Object\n * data type. When each of the field is assigned with simple `string` value, it is assumed that the dataSource field\n * name is mapped with it. If the `object` type is defined on each fields, then the validation related settings and mapping of\n * those fields with dataSource can be given altogether within it.\n */\nvar Field = /** @class */ (function (_super) {\n __extends(Field, _super);\n function Field() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Id')\n ], Field.prototype, \"id\", void 0);\n __decorate([\n Complex({ name: 'Subject', default: 'Add title' }, FieldOptions)\n ], Field.prototype, \"subject\", void 0);\n __decorate([\n Complex({ name: 'StartTime' }, FieldOptions)\n ], Field.prototype, \"startTime\", void 0);\n __decorate([\n Complex({ name: 'EndTime' }, FieldOptions)\n ], Field.prototype, \"endTime\", void 0);\n __decorate([\n Complex({ name: 'StartTimezone' }, FieldOptions)\n ], Field.prototype, \"startTimezone\", void 0);\n __decorate([\n Complex({ name: 'EndTimezone' }, FieldOptions)\n ], Field.prototype, \"endTimezone\", void 0);\n __decorate([\n Complex({ name: 'Location' }, FieldOptions)\n ], Field.prototype, \"location\", void 0);\n __decorate([\n Complex({ name: 'Description' }, FieldOptions)\n ], Field.prototype, \"description\", void 0);\n __decorate([\n Complex({ name: 'IsAllDay' }, FieldOptions)\n ], Field.prototype, \"isAllDay\", void 0);\n __decorate([\n Complex({ name: 'RecurrenceID' }, FieldOptions)\n ], Field.prototype, \"recurrenceID\", void 0);\n __decorate([\n Complex({ name: 'RecurrenceRule' }, FieldOptions)\n ], Field.prototype, \"recurrenceRule\", void 0);\n __decorate([\n Complex({ name: 'RecurrenceException' }, FieldOptions)\n ], Field.prototype, \"recurrenceException\", void 0);\n return Field;\n}(ChildProperty));\nexport { Field };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Field } from './fields';\n/**\n * Holds the configuration of event related options and dataSource binding to Schedule.\n */\nvar EventSettings = /** @class */ (function (_super) {\n __extends(EventSettings, _super);\n function EventSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], EventSettings.prototype, \"template\", void 0);\n __decorate([\n Property([])\n ], EventSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"query\", void 0);\n __decorate([\n Complex({}, Field)\n ], EventSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], EventSettings.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"tooltipTemplate\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"resourceColorField\", void 0);\n return EventSettings;\n}(ChildProperty));\nexport { EventSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that holds the resource grouping related configurations on Schedule.\n */\nvar Group = /** @class */ (function (_super) {\n __extends(Group, _super);\n function Group() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], Group.prototype, \"byDate\", void 0);\n __decorate([\n Property(true)\n ], Group.prototype, \"byGroupID\", void 0);\n __decorate([\n Property(false)\n ], Group.prototype, \"allowGroupEdit\", void 0);\n __decorate([\n Property([])\n ], Group.prototype, \"resources\", void 0);\n __decorate([\n Property(true)\n ], Group.prototype, \"enableCompactView\", void 0);\n __decorate([\n Property()\n ], Group.prototype, \"headerTooltipTemplate\", void 0);\n return Group;\n}(ChildProperty));\nexport { Group };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that represents the resource related configurations and its data binding options.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Resources.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"title\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"name\", void 0);\n __decorate([\n Property(false)\n ], Resources.prototype, \"allowMultiple\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"query\", void 0);\n __decorate([\n Property('Id')\n ], Resources.prototype, \"idField\", void 0);\n __decorate([\n Property('Text')\n ], Resources.prototype, \"textField\", void 0);\n __decorate([\n Property('Expanded')\n ], Resources.prototype, \"expandedField\", void 0);\n __decorate([\n Property('GroupID')\n ], Resources.prototype, \"groupIDField\", void 0);\n __decorate([\n Property('Color')\n ], Resources.prototype, \"colorField\", void 0);\n __decorate([\n Property('StartHour')\n ], Resources.prototype, \"startHourField\", void 0);\n __decorate([\n Property('EndHour')\n ], Resources.prototype, \"endHourField\", void 0);\n __decorate([\n Property('WorkDays')\n ], Resources.prototype, \"workDaysField\", void 0);\n __decorate([\n Property('CssClass')\n ], Resources.prototype, \"cssClassField\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n","import { extend, isNullOrUndefined, createElement, EventHandler, addClass, append, removeClass, remove, closest, classList } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Data } from '../actions/data';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar ResourceBase = /** @class */ (function () {\n function ResourceBase(parent) {\n this.resourceCollection = [];\n this.leftPixel = 25;\n this.parent = parent;\n }\n ResourceBase.prototype.renderResourceHeaderIndent = function (tr) {\n var resColTd = createElement('td', { className: cls.RESOURCE_LEFT_TD_CLASS });\n var resColDiv = createElement('div', {\n className: cls.RESOURCE_TEXT_CLASS\n });\n resColTd.appendChild(resColDiv);\n var args = { elementType: 'emptyCells', element: resColTd };\n this.parent.trigger(events.renderCell, args);\n tr.appendChild(resColTd);\n };\n ResourceBase.prototype.hideResourceRows = function (tBody) {\n if (this.resourceCollection.length <= 1) {\n return;\n }\n var trCount = this.lastResourceLevel.length;\n for (var i = 0; i < trCount; i++) {\n var resData = this.lastResourceLevel[i].resourceData;\n var res = this.lastResourceLevel[i].resource;\n if (resData.ClassName === cls.RESOURCE_PARENT_CLASS && !resData[res.expandedField] &&\n !isNullOrUndefined(resData[res.expandedField])) {\n var trCollection = [].slice.call(tBody.children);\n var slicedCollection = trCollection.slice(i + 1, i + (parseInt(resData.Count, 0) + 1));\n addClass(slicedCollection, cls.HIDDEN_CLASS);\n }\n }\n };\n ResourceBase.prototype.createResourceColumn = function () {\n var resColl = this.resourceCollection;\n var resDiv = createElement('div', { className: cls.RESOURCE_COLUMN_WRAP_CLASS });\n var tbl = this.parent.activeView.createTableLayout(cls.RESOURCE_COLUMN_TABLE_CLASS);\n var tBody = tbl.querySelector('tbody');\n var resData = this.generateTreeData(true);\n this.countCalculation(resColl.slice(0, -2), resColl.slice(0, -1));\n append(this.getContentRows(resData), tBody);\n this.hideResourceRows(tBody);\n tbl.appendChild(tBody);\n resDiv.appendChild(tbl);\n return resDiv;\n };\n ResourceBase.prototype.getContentRows = function (resData) {\n var resRows = [];\n var left;\n var rIndex;\n var resColl = this.resourceCollection;\n var tr = createElement('tr');\n var td = createElement('td');\n for (var i = 0; i < resData.length; i++) {\n var ntd = td.cloneNode();\n rIndex = util.findIndexInData(resColl, 'name', resData[i].resource.name);\n if (rIndex === resColl.length - 1) {\n extend(resData[i].resourceData, { ClassName: cls.RESOURCE_CHILD_CLASS });\n this.lastResourceLevel[i].className = [cls.RESOURCE_CHILD_CLASS];\n }\n else {\n extend(resData[i].resourceData, { ClassName: cls.RESOURCE_PARENT_CLASS });\n this.lastResourceLevel[i].className = [cls.RESOURCE_PARENT_CLASS];\n }\n left = (rIndex * this.leftPixel) + 'px';\n if (resData[i].resourceData.ClassName === cls.RESOURCE_PARENT_CLASS) {\n var iconClass = void 0;\n if (resData[i].resourceData[resColl[rIndex].expandedField] ||\n isNullOrUndefined(resData[i].resourceData[resColl[rIndex].expandedField])) {\n iconClass = cls.RESOURCE_COLLAPSE_CLASS;\n }\n else {\n iconClass = cls.RESOURCE_EXPAND_CLASS;\n }\n var iconDiv = createElement('div');\n addClass([iconDiv], [cls.RESOURCE_TREE_ICON_CLASS, iconClass]);\n this.setMargin(iconDiv, left);\n ntd.appendChild(iconDiv);\n if (this.resourceCollection.length > 1) {\n EventHandler.add(iconDiv, 'click', this.onTreeIconClick, this);\n }\n }\n this.parent.activeView.setResourceHeaderContent(ntd, resData[i], cls.RESOURCE_TEXT_CLASS);\n ntd.setAttribute('data-group-index', resData[i].groupIndex.toString());\n if (!this.parent.activeViewOptions.resourceHeaderTemplate) {\n this.setMargin(ntd.querySelector('.' + cls.RESOURCE_TEXT_CLASS), left);\n }\n var classCollection = [cls.RESOURCE_CELLS_CLASS, resData[i].resourceData.ClassName];\n addClass([ntd], classCollection);\n var args = { elementType: 'resourceHeader', element: ntd, groupIndex: resData[i].groupIndex };\n this.parent.trigger(events.renderCell, args);\n var ntr = tr.cloneNode();\n ntr.appendChild(ntd);\n resRows.push(ntr);\n }\n return resRows;\n };\n ResourceBase.prototype.setMargin = function (element, value) {\n if (!this.parent.enableRtl) {\n element.style.marginLeft = value;\n }\n else {\n element.style.marginRight = value;\n }\n };\n ResourceBase.prototype.countCalculation = function (parentCollection, wholeCollection) {\n var collection;\n for (var y = 0; y < parentCollection.length; y++) {\n var data = parentCollection[parentCollection.length - (y + 1)]\n .dataSource;\n for (var x = 0; x < data.length; x++) {\n var totalCount = 0;\n if (this.parent.activeViewOptions.group.byGroupID) {\n collection = new DataManager(wholeCollection[wholeCollection.length - 1].dataSource)\n .executeLocal(new Query().where(wholeCollection[wholeCollection.length - 1].groupIDField, 'equal', data[x][parentCollection[parentCollection.length - (y + 1)].idField]));\n }\n else {\n collection = wholeCollection[wholeCollection.length - 1].dataSource;\n }\n for (var z = 0; z < collection.length; z++) {\n totalCount = totalCount + parseInt(collection[z].Count, 0);\n }\n totalCount = totalCount + parseInt(data[x].Count, 0);\n extend(data[x], { Count: totalCount });\n }\n wholeCollection = wholeCollection.slice(0, -1);\n }\n };\n ResourceBase.prototype.onTreeIconClick = function (e) {\n if (this.parent.eventTooltip) {\n this.parent.eventTooltip.close();\n }\n var target = e.target;\n var hide;\n var trElement = closest(target, '.' + cls.RESOURCE_PARENT_CLASS)\n .parentElement;\n var index = trElement.rowIndex;\n var args = {\n cancel: false, event: e, groupIndex: index,\n requestType: !target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS) ? 'resourceExpand' : 'resourceCollapse',\n };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n if (target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS)) {\n classList(target, [cls.RESOURCE_EXPAND_CLASS], [cls.RESOURCE_COLLAPSE_CLASS]);\n hide = true;\n }\n else {\n classList(target, [cls.RESOURCE_COLLAPSE_CLASS], [cls.RESOURCE_EXPAND_CLASS]);\n hide = false;\n }\n var rowCollection = [];\n var workCellCollection = [];\n var headerRowCollection = [];\n var pNode;\n var clickedRes = this.lastResourceLevel[index].resourceData;\n var resRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.RESOURCE_COLUMN_WRAP_CLASS + ' ' + 'tr'));\n var contentRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_WRAP_CLASS + ' ' + 'tbody tr'));\n var eventRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_WRAP_CLASS + ' .' + cls.APPOINTMENT_CONTAINER_CLASS));\n var eventElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var i = 0; i < eventElements.length; i++) {\n remove(eventElements[i]);\n }\n for (var j = 0; j < clickedRes.Count; j++) {\n rowCollection.push(resRows[index + j + 1]);\n workCellCollection.push(contentRows[index + j + 1]);\n headerRowCollection.push(eventRows[index + j + 1]);\n }\n var clonedCollection = this.lastResourceLevel;\n for (var i = 0; i < rowCollection.length; i++) {\n var expanded = true;\n pNode = rowCollection[i].children[0].classList.contains(cls.RESOURCE_PARENT_CLASS);\n clonedCollection[index].resourceData[clonedCollection[index].resource.expandedField] = !hide;\n if (hide) {\n if (pNode) {\n var trElem = rowCollection[i].querySelector('.' + cls.RESOURCE_TREE_ICON_CLASS);\n classList(trElem, [cls.RESOURCE_EXPAND_CLASS], [cls.RESOURCE_COLLAPSE_CLASS]);\n }\n if (!rowCollection[i].classList.contains(cls.HIDDEN_CLASS)) {\n addClass([rowCollection[i], workCellCollection[i], headerRowCollection[i]], cls.HIDDEN_CLASS);\n }\n }\n else {\n if (pNode) {\n var rowIndex = rowCollection[i].rowIndex;\n if (!clonedCollection[rowIndex].resourceData[clonedCollection[rowIndex].resource.expandedField]\n && !isNullOrUndefined(clonedCollection[rowIndex].resourceData[clonedCollection[rowIndex].resource.expandedField])) {\n rowCollection.splice(i + 1, (parseInt(clonedCollection[rowIndex].resourceData.Count, 0)));\n workCellCollection.splice(i + 1, (parseInt(clonedCollection[rowIndex].resourceData.Count, 0)));\n headerRowCollection.splice(i + 1, (parseInt(clonedCollection[rowIndex].resourceData.Count, 0)));\n expanded = false;\n }\n if (expanded) {\n var trElem = rowCollection[i].querySelector('.' + cls.RESOURCE_TREE_ICON_CLASS);\n classList(trElem, [cls.RESOURCE_COLLAPSE_CLASS], [cls.RESOURCE_EXPAND_CLASS]);\n }\n }\n if (rowCollection[i].classList.contains(cls.HIDDEN_CLASS)) {\n removeClass([rowCollection[i], workCellCollection[i], headerRowCollection[i]], cls.HIDDEN_CLASS);\n }\n }\n }\n var data = { cssProperties: this.parent.getCssProperties(), module: 'scroll' };\n this.parent.notify(events.scrollUiUpdate, data);\n args = {\n cancel: false, event: e, groupIndex: index,\n requestType: target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS) ? 'resourceExpanded' : 'resourceCollapsed',\n };\n this.parent.notify(events.dataReady, {});\n this.parent.trigger(events.actionComplete, args);\n };\n ResourceBase.prototype.renderResourceHeader = function () {\n var resourceWrapper = createElement('div', { className: cls.RESOURCE_TOOLBAR_CONTAINER });\n resourceWrapper.innerHTML = '
    ' +\n '
    ';\n if (this.parent.currentView === 'MonthAgenda') {\n var target = this.parent.activeView.getPanel().querySelector('.' + cls.CONTENT_WRAP_CLASS);\n target.insertBefore(resourceWrapper, target.children[1]);\n }\n else {\n this.parent.element.insertBefore(resourceWrapper, this.parent.element.children[2]);\n }\n this.renderResourceHeaderText();\n EventHandler.add(resourceWrapper.querySelector('.' + cls.RESOURCE_MENU_ICON), 'click', this.menuClick, this);\n };\n ResourceBase.prototype.renderResourceTree = function () {\n this.popupOverlay = createElement('div', { className: cls.RESOURCE_TREE_POPUP_OVERLAY });\n var treeWrapper = createElement('div', { className: cls.RESOURCE_TREE_POPUP + ' e-popup-close' });\n if (this.parent.currentView === 'MonthAgenda') {\n var target = this.parent.activeView.getPanel().querySelector('.' + cls.WRAPPER_CONTAINER_CLASS);\n target.insertBefore(treeWrapper, target.children[0]);\n target.appendChild(this.popupOverlay);\n }\n else {\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(treeWrapper);\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.popupOverlay);\n }\n var resourceTree = createElement('div', { className: cls.RESOURCE_TREE });\n treeWrapper.appendChild(resourceTree);\n this.treeViewObj = new TreeView({\n cssClass: this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n fields: {\n dataSource: this.generateTreeData(),\n id: 'resourceId',\n text: 'resourceName',\n child: 'resourceChild'\n },\n nodeTemplate: this.parent.resourceHeaderTemplate,\n nodeClicked: this.resourceClick.bind(this)\n });\n this.treeViewObj.appendTo(resourceTree);\n this.treeViewObj.expandAll();\n this.treePopup = new Popup(treeWrapper, {\n targetType: 'relative',\n actionOnScroll: 'none',\n content: this.treeViewObj.element,\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'SlideLeftOut', duration: 500 },\n showAnimation: { name: 'SlideLeftIn', duration: 500 },\n viewPortElement: this.parent.element.querySelector('.' + (this.parent.currentView === 'MonthAgenda' ?\n cls.WRAPPER_CONTAINER_CLASS : cls.TABLE_CONTAINER_CLASS))\n });\n this.parent.on(events.documentClick, this.documentClick, this);\n };\n ResourceBase.prototype.generateTreeData = function (isTimeLine) {\n var _this = this;\n var treeCollection = [];\n var resTreeColl = [];\n var groupIndex = 0;\n this.resourceTreeLevel.forEach(function (resTree, index) {\n var treeHandler = function (treeLevel, index, levelId) {\n var resource = _this.resourceCollection[index];\n var treeArgs;\n var resObj;\n if (!isTimeLine) {\n treeArgs = {\n resourceId: levelId,\n resourceName: treeLevel.resourceData[resource.textField]\n };\n }\n else {\n resObj = {\n type: 'resourceHeader', resource: treeLevel.resource,\n resourceData: treeLevel.resourceData, groupIndex: groupIndex,\n groupOrder: treeLevel.groupOrder\n };\n resTreeColl.push(resObj);\n groupIndex++;\n }\n if (treeLevel.child.length > 0 && !isTimeLine) {\n treeArgs.resourceChild = [];\n }\n var count = 1;\n for (var _i = 0, _a = treeLevel.child; _i < _a.length; _i++) {\n var tree = _a[_i];\n if (!isTimeLine) {\n treeArgs.resourceChild.push(treeHandler(tree, index + 1, levelId + '-' + count));\n }\n else {\n treeHandler(tree, index + 1, levelId + '-' + count);\n }\n count += 1;\n }\n if (isTimeLine) {\n extend(resObj.resourceData, { Count: count - 1 });\n }\n return treeArgs;\n };\n if (!isTimeLine) {\n treeCollection.push(treeHandler(resTree, 0, (index + 1).toString()));\n }\n else {\n treeHandler(resTree, 0, (index + 1).toString());\n }\n });\n if (isTimeLine) {\n this.lastResourceLevel = resTreeColl;\n return resTreeColl;\n }\n else {\n return treeCollection;\n }\n };\n ResourceBase.prototype.renderResourceHeaderText = function () {\n var _this = this;\n var resource = this.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n var headerCollection = [];\n resource.groupOrder.forEach(function (level, index) {\n var resourceLevel = _this.resourceCollection[index];\n var resourceText = resourceLevel.dataSource.filter(function (resData) {\n return resData[resourceLevel.idField] === level;\n });\n var resourceName = createElement('div', {\n className: cls.RESOURCE_NAME,\n innerHTML: resourceText[0][resourceLevel.textField]\n });\n headerCollection.push(resourceName);\n var levelIcon = createElement('div', { className: 'e-icons e-icon-next' });\n headerCollection.push(levelIcon);\n });\n headerCollection.pop();\n var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;\n var headerWrapper = target.querySelector('.' + cls.RESOURCE_LEVEL_TITLE);\n headerWrapper.innerHTML = '';\n headerCollection.forEach(function (element) { return headerWrapper.appendChild(element); });\n if (this.lastResourceLevel.length === 1) {\n addClass([this.parent.element.querySelector('.' + cls.RESOURCE_MENU)], cls.DISABLE_CLASS);\n }\n };\n ResourceBase.prototype.menuClick = function (event) {\n if (this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP).classList.contains('e-popup-open')) {\n this.treePopup.hide();\n removeClass([this.popupOverlay], 'e-enable');\n }\n else {\n var treeNodes = this.treeViewObj.element.querySelectorAll('.e-list-item:not(.e-has-child)');\n removeClass(treeNodes, 'e-active');\n addClass([treeNodes[this.parent.uiStateValues.groupIndex]], 'e-active');\n this.treePopup.show();\n addClass([this.popupOverlay], 'e-enable');\n }\n };\n ResourceBase.prototype.resourceClick = function (event) {\n if (!event.node.classList.contains('e-has-child')) {\n this.treePopup.hide();\n var treeNodes = [].slice.call(this.treeViewObj.element.querySelectorAll('.e-list-item:not(.e-has-child)'));\n this.parent.uiStateValues.groupIndex = treeNodes.indexOf(event.node);\n this.parent.renderModule.render(this.parent.currentView, false);\n var processed = this.parent.eventBase.processData(this.parent.eventsData);\n this.parent.notify(events.dataReady, { processedData: processed });\n }\n event.event.preventDefault();\n };\n ResourceBase.prototype.documentClick = function (args) {\n if (closest(args.event.target, '.' + cls.RESOURCE_TREE_POPUP)) {\n return;\n }\n var treeWrapper = this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP);\n if (treeWrapper && treeWrapper.classList.contains('e-popup-open')) {\n this.treePopup.hide();\n removeClass([this.popupOverlay], 'e-enable');\n }\n };\n ResourceBase.prototype.bindResourcesData = function (isSetModel) {\n var _this = this;\n this.parent.showSpinner();\n var promises = [];\n for (var i = 0; i < this.parent.resources.length; i++) {\n var dataModule = new Data(this.parent.resources[i].dataSource, this.parent.resources[i].query);\n promises.push(dataModule.getData(dataModule.generateQuery()));\n }\n Promise.all(promises).then(function (e) { return _this.dataManagerSuccess(e, isSetModel); })\n .catch(function (e) { return _this.dataManagerFailure(e); });\n };\n ResourceBase.prototype.dataManagerSuccess = function (e, isSetModel) {\n if (this.parent.isDestroyed) {\n return;\n }\n for (var i = 0, length_1 = e.length; i < length_1; i++) {\n this.parent.resources[i].dataSource = e[i].result;\n }\n this.parent.setProperties({ resources: this.parent.resources }, true);\n this.parent.uiStateValues.groupIndex = 0;\n this.parent.renderElements(isSetModel);\n if (isSetModel) {\n this.parent.eventWindow.refresh();\n }\n };\n ResourceBase.prototype.setResourceCollection = function () {\n var requiredResources = [];\n this.resourceCollection = [];\n this.colorIndex = null;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n for (var _i = 0, _a = this.parent.activeViewOptions.group.resources; _i < _a.length; _i++) {\n var resource = _a[_i];\n var index_1 = util.findIndexInData(this.parent.resources, 'name', resource);\n if (index_1 >= 0) {\n requiredResources.push(this.parent.resources[index_1]);\n }\n }\n }\n else if (this.parent.resources.length > 0) {\n requiredResources = this.parent.resources;\n }\n var index = 0;\n for (var _b = 0, requiredResources_1 = requiredResources; _b < requiredResources_1.length; _b++) {\n var resource = requiredResources_1[_b];\n var resources = {\n field: resource.field,\n title: resource.title,\n name: resource.name,\n allowMultiple: resource.allowMultiple,\n dataSource: resource.dataSource,\n idField: resource.idField,\n textField: resource.textField,\n groupIDField: resource.groupIDField,\n colorField: resource.colorField,\n startHourField: resource.startHourField,\n endHourField: resource.endHourField,\n workDaysField: resource.workDaysField,\n expandedField: resource.expandedField,\n cssClassField: resource.cssClassField\n };\n if (resource.name === this.parent.eventSettings.resourceColorField) {\n this.colorIndex = index;\n }\n index++;\n this.resourceCollection.push(resources);\n }\n if (isNullOrUndefined(this.colorIndex)) {\n this.colorIndex = this.resourceCollection.length - 1;\n }\n };\n ResourceBase.prototype.generateResourceLevels = function (innerDates, isTimeLine) {\n var _this = this;\n var resources = this.resourceCollection;\n var resTreeGroup = [];\n var lastColumnDates = [];\n var group = function (resources, index, prevResource, prevResourceData, prevOrder) {\n var resTree = [];\n var resource = resources[0];\n if (resource) {\n var data = void 0;\n if (prevResourceData && _this.parent.activeViewOptions.group.byGroupID) {\n var id = prevResourceData[prevResource.idField];\n data = new DataManager(resource.dataSource).executeLocal(new Query().where(resource.groupIDField, 'equal', id));\n }\n else {\n data = resource.dataSource;\n }\n for (var i = 0; i < data.length; i++) {\n var groupOrder = [];\n if (prevOrder && prevOrder.length > 0) {\n groupOrder = groupOrder.concat(prevOrder);\n }\n groupOrder.push(data[i][resource.idField]);\n var items = group(resources.slice(1), index + 1, resource, data[i], groupOrder);\n // Here validate child item empty top level resource only\n if (index === 0 && items.length === 0 && _this.resourceCollection.length > 1) {\n continue;\n }\n var dateCol = [];\n var renderDates = _this.parent.activeView.renderDates;\n var resWorkDays = void 0;\n if (!_this.parent.activeViewOptions.group.byDate && index + 1 === _this.resourceCollection.length) {\n var workDays = data[i][resource.workDaysField];\n var resStartHour = data[i][resource.startHourField];\n var resEndHour = data[i][resource.endHourField];\n if (workDays && workDays.length > 0) {\n renderDates = _this.parent.activeView.getRenderDates(workDays);\n resWorkDays = workDays;\n dateCol = _this.parent.activeView.getDateSlots(renderDates, workDays);\n }\n else {\n resWorkDays = _this.parent.activeViewOptions.workDays;\n dateCol = innerDates;\n }\n var dateSlots = _this.generateCustomHours(dateCol, resStartHour, resEndHour, groupOrder);\n lastColumnDates = lastColumnDates.concat(dateSlots);\n }\n var resCssClass = data[i][resource.cssClassField];\n var slotData = {\n type: 'resourceHeader', className: ['e-resource-cells'],\n resourceLevelIndex: index, groupOrder: groupOrder,\n resource: resource, resourceData: data[i],\n colSpan: _this.parent.activeViewOptions.group.byDate ? 1 : dateCol.length,\n renderDates: renderDates, workDays: resWorkDays, cssClass: resCssClass,\n child: items\n };\n resTree.push(slotData);\n }\n if (!resTreeGroup[index]) {\n resTreeGroup[index] = [];\n }\n resTreeGroup[index].push(resTree);\n return resTree;\n }\n return [];\n };\n this.resourceTreeLevel = group(resources, 0);\n return (isTimeLine) ? [] : this.generateHeaderLevels(resTreeGroup, lastColumnDates, innerDates);\n };\n ResourceBase.prototype.generateCustomHours = function (renderDates, startHour, endHour, groupOrder) {\n var dateSlots = extend([], renderDates, null, true);\n for (var _i = 0, dateSlots_1 = dateSlots; _i < dateSlots_1.length; _i++) {\n var dateSlot = dateSlots_1[_i];\n if (startHour) {\n dateSlot.startHour = this.parent.globalize.parseDate(startHour, { skeleton: 'Hm' });\n }\n if (endHour) {\n dateSlot.endHour = this.parent.globalize.parseDate(endHour, { skeleton: 'Hm' });\n }\n if (groupOrder) {\n dateSlot.groupOrder = groupOrder;\n }\n }\n return dateSlots;\n };\n ResourceBase.prototype.generateHeaderLevels = function (resTreeGroup, lastColumnDates, headerDates) {\n var headerLevels = [];\n for (var i = resTreeGroup.length - 1; i >= 0; i--) {\n var temp = 0;\n for (var _i = 0, _a = resTreeGroup[i]; _i < _a.length; _i++) {\n var currentLevelChilds = _a[_i];\n for (var _b = 0, currentLevelChilds_1 = currentLevelChilds; _b < currentLevelChilds_1.length; _b++) {\n var currentLevelChild = currentLevelChilds_1[_b];\n if (resTreeGroup[i + 1]) {\n var nextLevelChilds = resTreeGroup[i + 1][temp];\n var colSpan = 0;\n for (var _c = 0, nextLevelChilds_1 = nextLevelChilds; _c < nextLevelChilds_1.length; _c++) {\n var nextLevelChild = nextLevelChilds_1[_c];\n if (!this.parent.activeViewOptions.group.byGroupID || (this.parent.activeViewOptions.group.byGroupID &&\n nextLevelChild.resourceData[nextLevelChild.resource.groupIDField] ===\n currentLevelChild.resourceData[currentLevelChild.resource.idField])) {\n colSpan += nextLevelChild.colSpan;\n }\n }\n currentLevelChild.colSpan = colSpan;\n }\n currentLevelChild.groupIndex = temp;\n temp++;\n headerLevels[currentLevelChild.resourceLevelIndex] = headerLevels[currentLevelChild.resourceLevelIndex] || [];\n headerLevels[currentLevelChild.resourceLevelIndex].push(currentLevelChild);\n }\n }\n }\n this.lastResourceLevel = headerLevels.slice(-1)[0];\n if (!this.parent.activeViewOptions.group.byDate) {\n var index = 0;\n for (var _d = 0, _e = this.lastResourceLevel; _d < _e.length; _d++) {\n var lastLevelResource = _e[_d];\n for (var i = 0; i < lastLevelResource.colSpan; i++) {\n lastColumnDates[index].groupIndex = lastLevelResource.groupIndex;\n index++;\n }\n }\n headerLevels.push(lastColumnDates);\n return headerLevels;\n }\n var dateHeaderLevels = [];\n var levels = extend([], headerLevels, null, true);\n var dateColSpan = 0;\n for (var _f = 0, _g = levels[0]; _f < _g.length; _f++) {\n var firstRowTd = _g[_f];\n dateColSpan += firstRowTd.colSpan;\n }\n var datesColumn = [];\n for (var _h = 0, headerDates_1 = headerDates; _h < headerDates_1.length; _h++) {\n var headerDate = headerDates_1[_h];\n headerDate.colSpan = dateColSpan;\n datesColumn.push(headerDate);\n var resGroup = extend([], levels, null, true);\n for (var k = 0, length_2 = resGroup.length; k < length_2; k++) {\n if (k === resGroup.length - 1) {\n for (var _j = 0, _k = resGroup[k]; _j < _k.length; _j++) {\n var resTd = _k[_j];\n resTd.date = headerDate.date;\n resTd.workDays = headerDate.workDays;\n resTd.startHour = headerDate.startHour;\n resTd.endHour = headerDate.endHour;\n }\n }\n if (!dateHeaderLevels[k]) {\n dateHeaderLevels[k] = [];\n }\n dateHeaderLevels[k] = dateHeaderLevels[k].concat(resGroup[k]);\n }\n }\n dateHeaderLevels.unshift(datesColumn);\n return dateHeaderLevels;\n };\n ResourceBase.prototype.setResourceValues = function (eventObj, isCrud) {\n var _this = this;\n var setValues = function (index, field, value) {\n if (_this.resourceCollection[index].allowMultiple && (!isCrud || isCrud && _this.parent.activeViewOptions.group.allowGroupEdit)) {\n eventObj[field] = [value];\n }\n else {\n eventObj[field] = value;\n }\n };\n var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n this.parent.activeCellsData.groupIndex;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !isNullOrUndefined(groupIndex)) {\n var groupOrder = this.lastResourceLevel[groupIndex].groupOrder;\n for (var index = 0; index < this.resourceCollection.length; index++) {\n setValues(index, this.resourceCollection[index].field, groupOrder[index]);\n }\n }\n else if (this.parent.resources.length > 0) {\n for (var index = 0; index < this.resourceCollection.length; index++) {\n var data = this.resourceCollection[index].dataSource[0];\n setValues(index, this.resourceCollection[index].field, data[this.resourceCollection[index].idField]);\n }\n }\n };\n ResourceBase.prototype.getResourceColor = function (eventObj, groupOrder) {\n this.colorIndex = (this.parent.activeView.isTimelineView() && !isNullOrUndefined(groupOrder)) ?\n groupOrder.length - 1 : this.colorIndex;\n var resource = this.resourceCollection[this.colorIndex];\n if (isNullOrUndefined(groupOrder) && this.parent.activeViewOptions.group.allowGroupEdit && resource.allowMultiple) {\n return undefined;\n }\n var id = isNullOrUndefined(groupOrder) ? eventObj[resource.field] : groupOrder[this.colorIndex];\n var data = this.filterData(resource.dataSource, resource.idField, 'equal', id);\n if (data.length > 0) {\n return data[0][resource.colorField];\n }\n return undefined;\n };\n ResourceBase.prototype.getCssClass = function (eventObj) {\n var resource = this.resourceCollection.slice(-1)[0];\n if (this.parent.activeViewOptions.group.allowGroupEdit && resource.allowMultiple) {\n return undefined;\n }\n var data = this.filterData(resource.dataSource, resource.idField, 'equal', eventObj[resource.field]);\n if (data.length > 0) {\n return data[0][resource.cssClassField];\n }\n return undefined;\n };\n ResourceBase.prototype.filterData = function (dataSource, field, operator, value) {\n return new DataManager(dataSource).executeLocal(new Query().where(field, operator, value));\n };\n ResourceBase.prototype.dataManagerFailure = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\n };\n ResourceBase.prototype.getResourceData = function (eventObj, index, groupEditIndex) {\n if (this.parent.activeViewOptions.group.allowGroupEdit) {\n var resourceObj = {};\n for (var _i = 0, groupEditIndex_1 = groupEditIndex; _i < groupEditIndex_1.length; _i++) {\n var groupIndex = groupEditIndex_1[_i];\n var resourceLevel = this.lastResourceLevel[groupIndex].groupOrder;\n for (var level = 0, length_3 = resourceLevel.length; level < length_3; level++) {\n var fieldName = this.resourceCollection[level].field;\n if (isNullOrUndefined(resourceObj[fieldName])) {\n resourceObj[fieldName] = [];\n }\n resourceObj[fieldName].push(resourceLevel[level]);\n }\n }\n eventObj = extend(eventObj, resourceObj);\n }\n else {\n for (var level = 0, length_4 = this.resourceCollection.length; level < length_4; level++) {\n eventObj[this.resourceCollection[level].field] = this.lastResourceLevel[index].groupOrder[level];\n }\n }\n };\n ResourceBase.prototype.addResource = function (resources, name, index) {\n for (var i = 0, length_5 = this.parent.resources.length; i < length_5; i++) {\n var resource = this.parent.resources[i];\n if (resource.name === name) {\n resource.dataSource.splice(index, 0, resources);\n break;\n }\n }\n this.bindResourcesData(true);\n };\n ResourceBase.prototype.removeResource = function (resourceId, name) {\n var _this = this;\n var _loop_1 = function (i, length_6) {\n var resource = this_1.parent.resources[i];\n if (resource.name === name) {\n resource.dataSource.forEach(function (data, index) {\n if (data[resource.idField] === resourceId) {\n _this.parent.resources[i].dataSource.splice(index, 1);\n }\n });\n return \"break\";\n }\n };\n var this_1 = this;\n for (var i = 0, length_6 = this.parent.resources.length; i < length_6; i++) {\n var state_1 = _loop_1(i, length_6);\n if (state_1 === \"break\")\n break;\n }\n this.bindResourcesData(true);\n };\n ResourceBase.prototype.destroy = function () {\n this.parent.off(events.documentClick, this.documentClick);\n if (this.treeViewObj) {\n this.treeViewObj.destroy();\n this.treeViewObj = null;\n }\n if (this.treePopup) {\n this.treePopup.destroy();\n this.treePopup = null;\n remove(this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP));\n remove(this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP_OVERLAY));\n }\n var resToolBarEle = this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER);\n if (resToolBarEle) {\n remove(resToolBarEle);\n }\n };\n return ResourceBase;\n}());\nexport { ResourceBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, Animation, Collection } from '@syncfusion/ej2-base';\nimport { EventHandler, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';\nimport { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, addClass, classList } from '@syncfusion/ej2-base';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { HeaderRenderer } from '../renderer/header-renderer';\nimport { Scroll } from '../actions/scroll';\nimport { ScheduleTouch } from '../actions/touch';\nimport { KeyboardInteraction } from '../actions/keyboard';\nimport { Data } from '../actions/data';\nimport { EventBase } from '../event-renderer/event-base';\nimport { QuickPopups } from '../popups/quick-popups';\nimport { EventTooltip } from '../popups/event-tooltip';\nimport { EventWindow } from '../popups/event-window';\nimport { Render } from '../renderer/renderer';\nimport { WorkHours } from '../models/work-hours';\nimport { TimeScale } from '../models/time-scale';\nimport { QuickInfoTemplates } from '../models/quick-info-templates';\nimport { HeaderRows } from '../models/header-rows';\nimport { Crud } from '../actions/crud';\nimport { EventSettings } from '../models/event-settings';\nimport { Group } from '../models/group';\nimport { Resources } from '../models/resources';\nimport { ResourceBase } from '../base/resource';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Represents the Schedule component that displays a list of events scheduled against specific date and timings,\n * thus helping us to plan and manage it properly.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Schedule = /** @class */ (function (_super) {\n __extends(Schedule, _super);\n /**\n * Constructor for creating the Schedule widget\n * @hidden\n */\n function Schedule(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Schedule.prototype.render = function () {\n var addClasses = [];\n var removeClasses = [];\n addClasses.push(cls.ROOT);\n if (this.enableRtl) {\n addClasses.push(cls.RTL);\n }\n else {\n removeClasses.push(cls.RTL);\n }\n if (this.isAdaptive) {\n addClasses.push(cls.DEVICE_CLASS);\n }\n else {\n removeClasses.push(cls.DEVICE_CLASS);\n }\n if (this.cssClass) {\n addClasses.push(this.cssClass);\n }\n classList(this.element, addClasses, removeClasses);\n this.validateDate();\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n this.quickInfoTemplatesHeaderFn = this.templateParser(this.quickInfoTemplates.header);\n this.quickInfoTemplatesContentFn = this.templateParser(this.quickInfoTemplates.content);\n this.quickInfoTemplatesFooterFn = this.templateParser(this.quickInfoTemplates.footer);\n createSpinner({ target: this.element });\n this.scrollModule = new Scroll(this);\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n this.renderModule = new Render(this);\n this.eventBase = new EventBase(this);\n this.initializeDataModule();\n this.initializeResources();\n };\n Schedule.prototype.initializeResources = function (isSetModel) {\n if (isSetModel === void 0) { isSetModel = false; }\n if (this.resources.length > 0) {\n this.resourceBase = new ResourceBase(this);\n this.resourceBase.bindResourcesData(isSetModel);\n }\n else {\n this.resourceBase = null;\n this.renderElements(isSetModel);\n if (isSetModel) {\n this.eventWindow.refresh();\n }\n }\n };\n Schedule.prototype.renderElements = function (isLayoutOnly) {\n if (isLayoutOnly) {\n this.initializeView(this.currentView);\n return;\n }\n if (this.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n }\n this.element.appendChild(this.createElement('div', { className: cls.TABLE_CONTAINER_CLASS }));\n if (Browser.isDevice || Browser.isTouch) {\n this.scheduleTouchModule = new ScheduleTouch(this);\n }\n this.initializeView(this.currentView);\n this.initializePopups();\n this.wireEvents();\n };\n Schedule.prototype.validateDate = function () {\n // persist the selected date value\n this.setProperties({ selectedDate: new Date('' + this.selectedDate) }, true);\n };\n Schedule.prototype.getViewIndex = function (viewName) {\n for (var item = 0; item < this.viewCollections.length; item++) {\n var checkIndex = this.viewCollections[item].option;\n if (checkIndex === viewName) {\n return item;\n }\n }\n return -1;\n };\n Schedule.prototype.setViewOptions = function (isModuleLoad) {\n if (isModuleLoad === void 0) { isModuleLoad = false; }\n this.viewOptions = {};\n this.viewCollections = [];\n var viewName;\n var selectedView;\n var count = 0;\n this.viewIndex = -1;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var view = _a[_i];\n var isOptions = (typeof view === 'string') ? false : true;\n if (typeof view === 'string') {\n viewName = view;\n if (this.currentView === viewName) {\n selectedView = viewName;\n this.viewIndex = count;\n }\n }\n else {\n viewName = view.option;\n if (view.isSelected) {\n selectedView = viewName;\n this.viewIndex = count;\n }\n }\n var obj = extend({ option: viewName }, isOptions ? view : {});\n var fieldViewName = viewName.charAt(0).toLowerCase() + viewName.slice(1);\n this.viewCollections.push(obj);\n if (isNullOrUndefined(this.viewOptions[fieldViewName])) {\n this.viewOptions[fieldViewName] = [obj];\n }\n else {\n this.viewOptions[fieldViewName].push(obj);\n }\n count++;\n }\n if (!isModuleLoad && selectedView) {\n this.setProperties({ currentView: selectedView }, true);\n }\n if (this.viewIndex === -1) {\n var currentIndex = this.getViewIndex(this.currentView);\n this.viewIndex = (currentIndex === -1) ? 0 : currentIndex;\n }\n };\n Schedule.prototype.getActiveViewOptions = function () {\n var timeScale = {\n enable: this.timeScale.enable,\n interval: this.timeScale.interval,\n slotCount: this.timeScale.slotCount,\n majorSlotTemplate: this.timeScale.majorSlotTemplate,\n minorSlotTemplate: this.timeScale.minorSlotTemplate\n };\n var group = {\n byDate: this.group.byDate,\n byGroupID: this.group.byGroupID,\n allowGroupEdit: this.group.allowGroupEdit,\n resources: this.group.resources,\n headerTooltipTemplate: this.group.headerTooltipTemplate,\n enableCompactView: this.group.enableCompactView\n };\n var workDays = this.viewCollections[this.viewIndex].workDays ? [] : this.workDays;\n var scheduleOptions = {\n dateFormat: this.dateFormat,\n endHour: this.endHour,\n isSelected: false,\n option: null,\n readonly: this.readonly,\n startHour: this.startHour,\n allowVirtualScrolling: true,\n cellTemplate: this.cellTemplate,\n eventTemplate: this.eventSettings.template,\n dateHeaderTemplate: this.dateHeaderTemplate,\n resourceHeaderTemplate: this.resourceHeaderTemplate,\n workDays: workDays,\n showWeekend: this.showWeekend,\n showWeekNumber: this.showWeekNumber,\n displayName: null,\n interval: 1,\n timeScale: timeScale,\n group: group,\n headerRows: this.headerRows\n };\n return extend(scheduleOptions, this.viewCollections[this.viewIndex], undefined, true);\n };\n Schedule.prototype.initializeDataModule = function () {\n this.eventFields = {\n id: this.eventSettings.fields.id,\n subject: this.eventSettings.fields.subject.name,\n startTime: this.eventSettings.fields.startTime.name,\n endTime: this.eventSettings.fields.endTime.name,\n startTimezone: this.eventSettings.fields.startTimezone.name,\n endTimezone: this.eventSettings.fields.endTimezone.name,\n location: this.eventSettings.fields.location.name,\n description: this.eventSettings.fields.description.name,\n isAllDay: this.eventSettings.fields.isAllDay.name,\n recurrenceID: this.eventSettings.fields.recurrenceID.name,\n recurrenceRule: this.eventSettings.fields.recurrenceRule.name,\n recurrenceException: this.eventSettings.fields.recurrenceException.name\n };\n this.editorTitles = {\n subject: this.eventSettings.fields.subject.title || this.localeObj.getConstant('title'),\n startTime: this.eventSettings.fields.startTime.title || this.localeObj.getConstant('start'),\n endTime: this.eventSettings.fields.endTime.title || this.localeObj.getConstant('end'),\n isAllDay: this.eventSettings.fields.isAllDay.title || this.localeObj.getConstant('allDay'),\n startTimezone: this.eventSettings.fields.startTimezone.title || this.localeObj.getConstant('startTimezone'),\n endTimezone: this.eventSettings.fields.endTimezone.title || this.localeObj.getConstant('endTimezone'),\n location: this.eventSettings.fields.location.title || this.localeObj.getConstant('location'),\n description: this.eventSettings.fields.description.title || this.localeObj.getConstant('description'),\n recurrenceRule: this.eventSettings.fields.recurrenceRule.title || this.localeObj.getConstant('repeat')\n };\n this.dataModule = new Data(this.eventSettings.dataSource, this.eventSettings.query);\n this.crudModule = new Crud(this);\n };\n Schedule.prototype.initializeView = function (viewName) {\n this.showSpinner();\n this.activeViewOptions = this.getActiveViewOptions();\n if (this.resourceBase) {\n this.resourceBase.setResourceCollection();\n }\n this.initializeTemplates();\n this.renderModule.render(viewName);\n };\n Schedule.prototype.initializeTemplates = function () {\n this.cellTemplateFn = this.templateParser(this.activeViewOptions.cellTemplate);\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n this.majorSlotTemplateFn = this.templateParser(this.activeViewOptions.timeScale.majorSlotTemplate);\n this.minorSlotTemplateFn = this.templateParser(this.activeViewOptions.timeScale.minorSlotTemplate);\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n this.resourceHeaderTemplateFn = this.templateParser(this.activeViewOptions.resourceHeaderTemplate);\n this.headerTooltipTemplateFn = this.templateParser(this.activeViewOptions.group.headerTooltipTemplate);\n };\n Schedule.prototype.initializePopups = function () {\n this.eventWindow = new EventWindow(this);\n this.quickPopup = new QuickPopups(this);\n };\n Schedule.prototype.getDayNames = function (type) {\n var culShortNames = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.' + type, getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.' + type, cldrData));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n return culShortNames;\n };\n Schedule.prototype.setCldrTimeFormat = function () {\n if (this.locale === 'en' || this.locale === 'en-US') {\n this.timeFormat = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n this.timeFormat = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', cldrData));\n }\n };\n Schedule.prototype.getTimeString = function (date) {\n return this.globalize.formatDate(date, { format: this.timeFormat, type: 'time' });\n };\n Schedule.prototype.changeView = function (view, event, muteOnChange, index) {\n if (isNullOrUndefined(index)) {\n index = this.getViewIndex(view);\n }\n if (!muteOnChange && index === this.viewIndex || index < 0) {\n return;\n }\n this.viewIndex = index;\n var args = { requestType: 'viewNavigate', cancel: false, event: event };\n this.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var navArgs = { action: 'view', cancel: false, previousView: this.currentView, currentView: view };\n this.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n return;\n }\n this.setProperties({ currentView: view }, true);\n if (this.headerModule) {\n this.headerModule.updateActiveView();\n this.headerModule.setCalendarView();\n }\n this.initializeView(this.currentView);\n this.animateLayout();\n args = { requestType: 'viewNavigate', cancel: false, event: event };\n this.trigger(events.actionComplete, args);\n };\n Schedule.prototype.changeDate = function (selectedDate, event) {\n var args = { requestType: 'dateNavigate', cancel: false, event: event };\n this.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var navArgs = { action: 'date', cancel: false, previousDate: this.selectedDate, currentDate: selectedDate };\n this.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n return;\n }\n this.setProperties({ selectedDate: selectedDate }, true);\n if (this.headerModule) {\n this.headerModule.setCalendarDate(selectedDate);\n }\n this.initializeView(this.currentView);\n this.animateLayout();\n args = { requestType: 'dateNavigate', cancel: false, event: event };\n this.trigger(events.actionComplete, args);\n };\n Schedule.prototype.isSelectedDate = function (date) {\n return date.setHours(0, 0, 0, 0) === new Date('' + this.selectedDate).setHours(0, 0, 0, 0);\n };\n Schedule.prototype.getNavigateView = function () {\n if (this.activeView.isTimelineView()) {\n return this.currentView === 'TimelineMonth' ? 'TimelineDay' : 'Agenda';\n }\n return 'Day';\n };\n Schedule.prototype.animateLayout = function () {\n new Animation({ duration: 600, name: 'FadeIn', timingFunction: 'easeIn' }).animate(this.activeView.element);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n Schedule.prototype.requiredModules = function () {\n var modules = [];\n this.setViewOptions(true);\n for (var _i = 0, _a = Object.keys(this.viewOptions); _i < _a.length; _i++) {\n var view = _a[_i];\n view = (view === 'timelineDay' || view === 'timelineWeek' || view === 'timelineWorkWeek') ? 'timelineViews' : view;\n modules.push({\n member: view,\n args: [this]\n });\n }\n if (this.allowDragAndDrop) {\n modules.push({\n member: 'dragAndDrop',\n args: [this]\n });\n }\n if (this.allowResizing) {\n modules.push({\n member: 'resize',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Schedule.prototype.preRender = function () {\n this.isAdaptive = Browser.isDevice;\n this.globalize = new Internationalization(this.locale);\n this.uiStateValues = { expand: false, isInitial: true, left: 0, top: 0, isGroupAdaptive: false, groupIndex: 0, action: false };\n this.activeCellsData = { startTime: new Date(), endTime: new Date(), isAllDay: false };\n this.activeEventData = { event: undefined, element: undefined };\n this.defaultLocale = {\n day: 'Day',\n week: 'Week',\n workWeek: 'Work Week',\n month: 'Month',\n agenda: 'Agenda',\n weekAgenda: 'Week Agenda',\n workWeekAgenda: 'Work Week Agenda',\n monthAgenda: 'Month Agenda',\n today: 'Today',\n noEvents: 'No events',\n emptyContainer: 'There are no events scheduled on this day.',\n allDay: 'All day',\n start: 'Start',\n end: 'End',\n more: 'more',\n close: 'Close',\n cancel: 'Cancel',\n noTitle: '(No Title)',\n delete: 'Delete',\n deleteEvent: 'Delete Event',\n deleteMultipleEvent: 'Delete Multiple Events',\n selectedItems: 'Items selected',\n deleteSeries: 'Delete Series',\n edit: 'Edit',\n editSeries: 'Edit Series',\n editEvent: 'Edit Event',\n createEvent: 'Create',\n subject: 'Subject',\n addTitle: 'Add title',\n moreDetails: 'More Details',\n save: 'Save',\n editContent: 'Do you want to edit only this event or entire series?',\n deleteRecurrenceContent: 'Do you want to delete only this event or entire series?',\n deleteContent: 'Are you sure you want to delete this event?',\n deleteMultipleContent: 'Are you sure you want to delete the selected events?',\n newEvent: 'New Event',\n title: 'Title',\n location: 'Location',\n description: 'Description',\n timezone: 'Timezone',\n startTimezone: 'Start Timezone',\n endTimezone: 'End Timezone',\n repeat: 'Repeat',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n deleteButton: 'Delete',\n recurrence: 'Recurrence',\n wrongPattern: 'The recurrence pattern is not valid.',\n seriesChangeAlert: 'The changes made to specific instances of this series will be cancelled ' +\n 'and those events will match the series again.',\n createError: 'The duration of the event must be shorter than how frequently it occurs. ' +\n 'Shorten the duration, or change the recurrence pattern in the recurrence event editor.',\n recurrenceDateValidation: 'Some months have fewer than the selected date. For these months, ' +\n 'the occurrence will fall on the last date of the month.',\n sameDayAlert: 'Two occurrences of the same event cannot occur on the same day.',\n editRecurrence: 'Edit Recurrence',\n repeats: 'Repeats',\n alert: 'Alert',\n startEndError: 'The selected end date occurs before the start date.',\n invalidDateError: 'The entered date value is invalid.',\n ok: 'Ok',\n occurrence: 'Occurrence',\n series: 'Series',\n previous: 'Previous',\n next: 'Next',\n timelineDay: 'Timeline Day',\n timelineWeek: 'Timeline Week',\n timelineWorkWeek: 'Timeline Work Week',\n timelineMonth: 'Timeline Month'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.setCldrTimeFormat();\n this.eventsData = [];\n this.eventsProcessed = [];\n this.currentAction = null;\n this.selectedElements = [];\n this.setViewOptions();\n };\n /**\n * Binding events to the Schedule element.\n * @hidden\n */\n Schedule.prototype.wireEvents = function () {\n var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';\n EventHandler.add(window, resize, this.onScheduleResize, this);\n EventHandler.add(document, Browser.touchStartEvent, this.onDocumentClick, this);\n if (this.allowKeyboardInteraction) {\n this.keyboardInteractionModule = new KeyboardInteraction(this);\n }\n };\n Schedule.prototype.removeSelectedClass = function () {\n var selectedCells = this.getSelectedElements();\n for (var _i = 0, selectedCells_1 = selectedCells; _i < selectedCells_1.length; _i++) {\n var cell = selectedCells_1[_i];\n cell.setAttribute('aria-selected', 'false');\n cell.removeAttribute('tabindex');\n }\n removeClass(selectedCells, cls.SELECTED_CELL_CLASS);\n };\n Schedule.prototype.addSelectedClass = function (cells, focusCell) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n cell.setAttribute('aria-selected', 'true');\n }\n addClass(cells, cls.SELECTED_CELL_CLASS);\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus();\n };\n Schedule.prototype.selectCell = function (element) {\n this.removeSelectedClass();\n this.addSelectedClass([element], element);\n };\n Schedule.prototype.getSelectedElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.SELECTED_CELL_CLASS));\n };\n Schedule.prototype.getAllDayRow = function () {\n return this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n };\n Schedule.prototype.getContentTable = function () {\n return this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS + ' tbody');\n };\n Schedule.prototype.getTableRows = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr:not(.' + cls.HIDDEN_CLASS + ')'));\n };\n Schedule.prototype.getWorkCellElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n };\n Schedule.prototype.getIndexOfDate = function (collection, date) {\n return collection.map(Number).indexOf(+date);\n };\n Schedule.prototype.isAllDayCell = function (td) {\n if (this.currentView === 'Month' || this.currentView === 'TimelineMonth' || td.classList.contains(cls.ALLDAY_CELLS_CLASS)\n || td.classList.contains(cls.HEADER_CELLS_CLASS) || !this.activeViewOptions.timeScale.enable) {\n return true;\n }\n if (this.activeViewOptions.headerRows.length > 0 && this.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour') {\n return true;\n }\n return false;\n };\n Schedule.prototype.getDateFromElement = function (td) {\n if (!isNullOrUndefined(td.getAttribute('data-date'))) {\n var dateInMS = parseInt(td.getAttribute('data-date'), 10);\n return new Date(dateInMS);\n }\n return undefined;\n };\n Schedule.prototype.getCellTemplate = function () {\n return this.cellTemplateFn;\n };\n Schedule.prototype.getDateHeaderTemplate = function () {\n return this.dateHeaderTemplateFn;\n };\n Schedule.prototype.getMajorSlotTemplate = function () {\n return this.majorSlotTemplateFn;\n };\n Schedule.prototype.getMinorSlotTemplate = function () {\n return this.minorSlotTemplateFn;\n };\n Schedule.prototype.getAppointmentTemplate = function () {\n return this.appointmentTemplateFn;\n };\n Schedule.prototype.getEventTooltipTemplate = function () {\n return this.eventTooltipTemplateFn;\n };\n Schedule.prototype.getHeaderTooltipTemplate = function () {\n return this.headerTooltipTemplateFn;\n };\n Schedule.prototype.getEditorTemplate = function () {\n return this.editorTemplateFn;\n };\n Schedule.prototype.getQuickInfoTemplatesHeader = function () {\n return this.quickInfoTemplatesHeaderFn;\n };\n Schedule.prototype.getQuickInfoTemplatesContent = function () {\n return this.quickInfoTemplatesContentFn;\n };\n Schedule.prototype.getQuickInfoTemplatesFooter = function () {\n return this.quickInfoTemplatesFooterFn;\n };\n Schedule.prototype.getResourceHeaderTemplate = function () {\n return this.resourceHeaderTemplateFn;\n };\n Schedule.prototype.getCssProperties = function () {\n var cssProps = {\n border: this.enableRtl ? 'borderLeftWidth' : 'borderRightWidth',\n padding: this.enableRtl ? 'paddingLeft' : 'paddingRight'\n };\n return cssProps;\n };\n Schedule.prototype.onDocumentClick = function (args) {\n this.notify(events.documentClick, { event: args });\n };\n Schedule.prototype.onScheduleResize = function () {\n if (this.quickPopup) {\n this.quickPopup.onClosePopup();\n }\n if (this.currentView === 'Month' || !this.activeViewOptions.timeScale.enable || this.activeView.isTimelineView()) {\n this.notify(events.dataReady, {});\n }\n };\n Schedule.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (error) {\n return compile(template);\n }\n }\n return undefined;\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Schedule.prototype.unwireEvents = function () {\n var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';\n EventHandler.remove(window, resize, this.onScheduleResize);\n EventHandler.remove(document, Browser.touchStartEvent, this.onDocumentClick);\n if (this.keyboardInteractionModule) {\n this.keyboardInteractionModule.destroy();\n }\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Schedule.prototype.getModuleName = function () {\n return 'schedule';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Schedule.prototype.getPersistData = function () {\n return this.addOnPersist(['currentView', 'selectedDate']);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Schedule.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n var requireScheduleRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n case 'height':\n this.notify(events.uiUpdate, { module: 'scroll', properties: { width: newProp.width, height: newProp.height } });\n break;\n case 'views':\n this.setViewOptions();\n if (this.headerModule) {\n this.headerModule.updateItems();\n }\n this.changeView(this.currentView, null, true);\n break;\n case 'currentView':\n this.changeView(newProp.currentView, null, true);\n break;\n case 'selectedDate':\n this.changeDate(newProp.selectedDate);\n break;\n case 'dateFormat':\n this.activeViewOptions = this.getActiveViewOptions();\n if (this.headerModule) {\n this.headerModule.updateDateRange(this.activeView.getDateRangeText());\n }\n break;\n case 'showHeaderBar':\n if (this.headerModule) {\n this.headerModule.destroy();\n this.headerModule = null;\n }\n if (newProp.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n this.headerModule.updateDateRange(this.activeView.getDateRangeText());\n }\n this.notify(events.scrollUiUpdate, { cssProperties: this.getCssProperties() });\n if (this.activeView.isTimelineView()) {\n this.notify(events.dataReady, {});\n }\n break;\n case 'showWeekend':\n case 'workDays':\n case 'startHour':\n case 'endHour':\n case 'workHours':\n case 'readonly':\n case 'headerRows':\n case 'showWeekNumber':\n requireRefresh = true;\n break;\n case 'eventDragArea':\n this.notify(events.dataReady, {});\n break;\n case 'locale':\n this.setCldrTimeFormat();\n requireScheduleRefresh = true;\n break;\n case 'firstDayOfWeek':\n if (this.headerModule) {\n this.headerModule.setDayOfWeek(newProp.firstDayOfWeek);\n }\n requireRefresh = true;\n break;\n case 'showTimeIndicator':\n if (this.activeViewOptions.timeScale.enable) {\n this.activeView.highlightCurrentTime();\n }\n break;\n case 'cellTemplate':\n this.activeViewOptions.cellTemplate = newProp.cellTemplate;\n this.cellTemplateFn = this.templateParser(this.activeViewOptions.cellTemplate);\n requireRefresh = true;\n break;\n case 'dateHeaderTemplate':\n this.activeViewOptions.dateHeaderTemplate = newProp.dateHeaderTemplate;\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n requireRefresh = true;\n break;\n case 'timezone':\n this.eventBase.timezonePropertyChange(oldProp.timezone);\n break;\n case 'enableRtl':\n requireScheduleRefresh = true;\n break;\n default:\n this.extendedPropertyChange(prop, newProp, oldProp);\n break;\n }\n }\n if (requireScheduleRefresh) {\n this.refresh();\n }\n else if (requireRefresh) {\n this.initializeView(this.currentView);\n }\n };\n Schedule.prototype.extendedPropertyChange = function (prop, newProp, oldProp) {\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass);\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass);\n }\n break;\n case 'hideEmptyAgendaDays':\n case 'agendaDaysCount':\n this.activeViewOptions = this.getActiveViewOptions();\n this.changeView(this.currentView, null, true);\n break;\n case 'eventSettings':\n this.onEventSettingsPropertyChanged(newProp.eventSettings, oldProp.eventSettings);\n break;\n case 'allowKeyboardInteraction':\n if (this.keyboardInteractionModule) {\n this.keyboardInteractionModule.destroy();\n this.keyboardInteractionModule = null;\n }\n if (newProp.allowKeyboardInteraction) {\n this.keyboardInteractionModule = new KeyboardInteraction(this);\n }\n break;\n case 'editorTemplate':\n if (!isNullOrUndefined(this.editorTemplate)) {\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n }\n this.eventWindow.setDialogContent();\n break;\n case 'quickInfoTemplates':\n if (this.quickInfoTemplates.header) {\n this.quickInfoTemplatesHeaderFn = this.templateParser(this.quickInfoTemplates.header);\n }\n if (this.quickInfoTemplates.content) {\n this.quickInfoTemplatesContentFn = this.templateParser(this.quickInfoTemplates.content);\n }\n if (this.quickInfoTemplates.footer) {\n this.quickInfoTemplatesFooterFn = this.templateParser(this.quickInfoTemplates.footer);\n }\n break;\n case 'group':\n this.onGroupSettingsPropertyChanged(newProp.group, oldProp.group);\n break;\n case 'resources':\n this.initializeResources(true);\n break;\n case 'timeScale':\n this.activeViewOptions.timeScale.interval = newProp.timeScale.interval || this.activeViewOptions.timeScale.interval;\n this.activeViewOptions.timeScale.slotCount = newProp.timeScale.slotCount || this.activeViewOptions.timeScale.slotCount;\n this.eventWindow.refreshDateTimePicker();\n this.initializeView(this.currentView);\n break;\n case 'allowDragAndDrop':\n case 'allowResizing':\n this.notify(events.dataReady, {\n processedData: this.eventBase.processData(this.eventsData)\n });\n break;\n }\n };\n Schedule.prototype.onGroupSettingsPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (prop === 'headerTooltipTemplate') {\n this.headerTooltipTemplateFn = this.templateParser(newProp[prop]);\n }\n else {\n this.initializeView(this.currentView);\n this.eventWindow.refresh();\n }\n }\n };\n Schedule.prototype.onEventSettingsPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'dataSource':\n case 'query':\n case 'fields':\n this.initializeDataModule();\n requireRefresh = true;\n break;\n case 'template':\n this.activeViewOptions.eventTemplate = newProp.template;\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n requireRefresh = true;\n break;\n case 'enableTooltip':\n if (this.eventTooltip) {\n this.eventTooltip.destroy();\n this.eventTooltip = null;\n }\n if (newProp.enableTooltip) {\n this.eventTooltip = new EventTooltip(this);\n }\n break;\n case 'tooltipTemplate':\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n break;\n case 'resourceColorField':\n if (this.resourceBase) {\n this.resourceBase.setResourceCollection();\n }\n requireRefresh = true;\n break;\n }\n }\n if (requireRefresh) {\n this.renderModule.refreshDataManager();\n }\n };\n /**\n * Allows to show the spinner on schedule at the required scenarios.\n */\n Schedule.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * When the spinner is shown manually using `showSpinner` method, it can be hidden using this `hideSpinner` method.\n */\n Schedule.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Sets different working hours on the required working days by accepting the required start and end time as well as the date collection\n * as its parameters.\n * @method setWorkHours\n * @param {date} dates Collection of dates on which the given start and end hour range needs to be applied.\n * @param {string} start Defines the work start hour.\n * @param {string} end Defines the work end hour.\n * @param {number} groupIndex Defines the resource index from last level.\n * @returns {void}\n */\n Schedule.prototype.setWorkHours = function (dates, start, end, groupIndex) {\n var startHour = this.globalize.parseDate(start, { skeleton: 'Hm' });\n var endHour = this.globalize.parseDate(end, { skeleton: 'Hm' });\n var tableEle = this.getContentTable();\n if (isNullOrUndefined(startHour) || isNullOrUndefined(endHour) || !tableEle) {\n return;\n }\n startHour.setMilliseconds(0);\n endHour.setMilliseconds(0);\n var viewStartHour = this.activeView.getStartHour();\n if (startHour < viewStartHour) {\n startHour = viewStartHour;\n }\n if (endHour > this.activeView.getEndHour()) {\n endHour = this.activeView.getEndHour();\n }\n var msMajorInterval = this.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.activeViewOptions.timeScale.slotCount;\n var startIndex = Math.round((util.getDateInMs(startHour) - util.getDateInMs(viewStartHour)) / msInterval);\n var endIndex = Math.ceil((util.getDateInMs(endHour) - util.getDateInMs(viewStartHour)) / msInterval);\n var cells = [];\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var date = dates_1[_i];\n util.resetTime(date);\n var renderDates = this.activeView.renderDates;\n if (!isNullOrUndefined(groupIndex) && this.resourceBase && !this.activeView.isTimelineView()) {\n renderDates = this.resourceBase.lastResourceLevel[groupIndex].renderDates;\n }\n var colIndex = this.getIndexOfDate(renderDates, date);\n if (colIndex >= 0) {\n for (var i = startIndex; i < endIndex; i++) {\n if (this.activeView.isTimelineView()) {\n var rowIndex = (!isNullOrUndefined(groupIndex)) ? groupIndex : 0;\n cells.push(tableEle.rows[rowIndex].cells[i]);\n }\n else {\n if (!isNullOrUndefined(groupIndex)) {\n var tds = [].slice.call(tableEle.rows[i].querySelectorAll('.' + cls.WORK_CELLS_CLASS + '[data-group-index=\"' + groupIndex + '\"]'));\n cells.push(tds[colIndex]);\n }\n else {\n cells.push(tableEle.rows[i].cells[colIndex]);\n }\n }\n }\n }\n }\n addClass(cells, cls.WORK_HOURS_CLASS);\n };\n /**\n * Retrieves the start and end time information of the specific cell element.\n * @method getCellDetails\n * @param {Element} td The cell element whose start and end time details are to be retrieved.\n * @returns {CellClickEventArgs} Object An object holding the startTime, endTime and all-day information along with the target HTML\n * element will be returned.\n */\n Schedule.prototype.getCellDetails = function (td) {\n var startTime = this.getDateFromElement(td);\n if (isNullOrUndefined(startTime)) {\n return undefined;\n }\n var endTime;\n var duration = 1;\n var endDateFromColSpan = this.activeView.isTimelineView() && !isNullOrUndefined(td.getAttribute('colSpan'));\n if (endDateFromColSpan) {\n duration = parseInt(td.getAttribute('colSpan'), 10);\n }\n if (!this.activeViewOptions.timeScale.enable || td.classList.contains(cls.ALLDAY_CELLS_CLASS) ||\n td.classList.contains(cls.HEADER_CELLS_CLASS) || endDateFromColSpan) {\n endTime = util.addDays(new Date(startTime.getTime()), duration);\n }\n else {\n endTime = this.activeView.getEndDateFromStartDate(startTime);\n }\n var data = {\n startTime: startTime,\n endTime: endTime,\n isAllDay: this.isAllDayCell(td),\n element: td\n };\n var groupIndex = td.getAttribute('data-group-index');\n if (!isNullOrUndefined(groupIndex)) {\n data.groupIndex = parseInt(groupIndex, 10);\n }\n return data;\n };\n /**\n * Retrieves the resource details based on the provided resource index.\n * @param {number} index index of the resources at the last level.\n * @returns {ResourceDetails} Object An object holding the details of resource and resourceData.\n */\n Schedule.prototype.getResourcesByIndex = function (index) {\n if (this.resourceBase && this.resourceBase.lastResourceLevel) {\n if (index < 0 || index >= this.resourceBase.lastResourceLevel.length) {\n return undefined;\n }\n var data = this.resourceBase.lastResourceLevel[index];\n return { resource: data.resource, resourceData: data.resourceData };\n }\n return undefined;\n };\n /**\n * Scrolls the Schedule content area to the specified time.\n * @method scrollTo\n * @param {string} hour Accepts the time value in the skeleton format of 'Hm'.\n * @returns {void}\n */\n Schedule.prototype.scrollTo = function (hour) {\n if (this.activeView.scrollToHour) {\n this.activeView.scrollToHour(hour);\n }\n };\n /**\n * Adds the newly created event into the Schedule dataSource.\n * @method addEvent\n * @param {Object | Object[]} data Single or collection of event objects to be added into Schedule.\n * @returns {void}\n */\n Schedule.prototype.addEvent = function (data) {\n this.crudModule.addEvent(data);\n };\n /**\n * Updates the changes made in the event object by passing it as an parameter into the dataSource.\n * @method saveEvent\n * @param {[key: string]: Object} data Single or collection of event objects to be saved into Schedule.\n * @param {CurrentAction} currentAction Denotes the action that takes place either for editing occurrence or series.\n * The valid current action names are `EditOccurrence` or `EditSeries`.\n * @returns {void}\n */\n Schedule.prototype.saveEvent = function (data, currentAction) {\n this.crudModule.saveEvent(data, currentAction);\n };\n /**\n * Deletes the events based on the provided ID or event collection in the argument list.\n * @method deleteEvent\n * @param {{[key: string]: Object}} id Single event objects to be removed from the Schedule.\n * @param {{[key: string]: Object }[]} id Collection of event objects to be removed from the Schedule.\n * @param {string | number} id Accepts the ID of the event object which needs to be removed from the Schedule.\n * @param {CurrentAction} currentAction Denotes the delete action that takes place either on occurrence or series events.\n * The valid current action names are `Delete`, `DeleteOccurrence` or `DeleteSeries`.\n * @returns {void}\n */\n Schedule.prototype.deleteEvent = function (id, currentAction) {\n this.crudModule.deleteEvent(id, currentAction);\n };\n /**\n * Retrieves the entire collection of events bound to the Schedule.\n * @method getEvents\n * @returns {Object[]} Returns the collection of event objects from the Schedule.\n */\n Schedule.prototype.getEvents = function () {\n return this.eventsData;\n };\n /**\n * Retrieves the occurrences of a single recurrence event based on the provided parent ID.\n * @method getOccurrencesByID\n * @param {number} eventID ID of the parent recurrence data from which the occurrences are fetched.\n * @returns {Object[]} Returns the collection of occurrence event objects.\n */\n Schedule.prototype.getOccurrencesByID = function (eventID) {\n return this.eventBase.getOccurrencesByID(eventID);\n };\n /**\n * Retrieves all the occurrences that lies between the specific start and end time range.\n * @method getOccurrencesByRange\n * @param {Date} startTime Denotes the start time range.\n * @param {Date} endTime Denotes the end time range.\n * @returns {Object[]} Returns the collection of occurrence event objects that lies between the provided start and end time.\n */\n Schedule.prototype.getOccurrencesByRange = function (startTime, endTime) {\n return this.eventBase.getOccurrencesByRange(startTime, endTime);\n };\n /**\n * Retrieves the dates that lies on active view of Schedule.\n * @method getCurrentViewDates\n * @returns {Date[]} Returns the collection of dates.\n */\n Schedule.prototype.getCurrentViewDates = function () {\n return this.activeView.renderDates;\n };\n /**\n * Retrieves the events that lies on the current date range of the active view of Schedule.\n * @method getCurrentViewEvents\n * @returns {Object[]} Returns the collection of events.\n */\n Schedule.prototype.getCurrentViewEvents = function () {\n return this.eventsProcessed;\n };\n /**\n * Refreshes the event dataSource. This method may be useful when the events alone in the schedule needs to be re-rendered.\n * @method refreshEvents\n * @returns {void}\n */\n Schedule.prototype.refreshEvents = function () {\n this.renderModule.refreshDataManager();\n };\n /**\n * To retrieve the appointment object from element.\n * @method getEventDetails\n * @param {Element} element Denotes the event UI element on the Schedule.\n * @returns {Object} Returns the event details.\n */\n Schedule.prototype.getEventDetails = function (element) {\n var guid = element.getAttribute('data-guid');\n if (guid) {\n return this.eventBase.getEventByGuid(guid);\n }\n return {};\n };\n /**\n * To check whether the given time range slots are available for event creation or already occupied by other events.\n * @method isSlotAvailable\n * @param {Date} startTime Denotes the start time of the slot.\n * @param {Date} endTime Denotes the end time of the slot.\n * @param {number} groupIndex Defines the resource index from last level.\n * @returns {boolean} Returns true, if the slot that lies in the provided time range does not contain any other events.\n */\n Schedule.prototype.isSlotAvailable = function (startTime, endTime, groupIndex) {\n var _this = this;\n var eventCollection = this.eventBase.filterEvents(startTime, endTime);\n if (this.currentAction !== 'Add' && this.activeEventData.event) {\n eventCollection = eventCollection.filter(function (event) { return event.Guid !==\n _this.activeEventData.event.Guid; });\n }\n if (!isNullOrUndefined(groupIndex) && this.resourceBase && this.resourceBase.lastResourceLevel.length > 0) {\n eventCollection = this.eventBase.filterEventsByResource(this.resourceBase.lastResourceLevel[groupIndex], eventCollection);\n }\n return (eventCollection.length > 0) ? false : true;\n };\n /**\n * To manually open the event editor on specific time or on certain events.\n * @method openEditor\n * @param {Object} data It can be either cell data or event data.\n * @param {CurrentAction} action Defines the action for which the editor needs to be opened such as either for new event creation or\n * for editing of existing events. The applicable action names that can be used here are `Add`, `Save`, `EditOccurrence`\n * and `EditSeries`.\n * @returns {void}\n */\n Schedule.prototype.openEditor = function (data, action, isEventData) {\n this.eventWindow.openEditor(data, action, isEventData);\n };\n /**\n * This method has been added to adjust the size of the outer event wrapper class that holds the collection of events,\n * while trying to set manual height and width to the Schedule cells.\n * @method adjustEventWrapper\n * @returns {void}\n */\n Schedule.prototype.adjustEventWrapper = function () {\n this.activeView.adjustEventWrapper();\n };\n /**\n * Adds the resources to the specified index.\n * @param resources\n * @param {string} name Name of the resource defined in resources collection.\n * @param {number} index Index or position where the resource should be added.\n */\n Schedule.prototype.addResource = function (resources, name, index) {\n this.resourceBase.addResource(resources, name, index);\n };\n /**\n * Removes the specified resource.\n * @param resourceId Specifies the resource id to be removed.\n * @param name Specifies the resource name from which the id should be referred.\n */\n Schedule.prototype.removeResource = function (resourceId, name) {\n this.resourceBase.removeResource(resourceId, name);\n };\n /**\n * Destroys the Schedule component.\n * @method destroy\n * @return {void}\n */\n Schedule.prototype.destroy = function () {\n if (this.quickPopup) {\n this.quickPopup.destroy();\n this.quickPopup = null;\n }\n if (this.eventTooltip) {\n this.eventTooltip.destroy();\n this.eventTooltip = null;\n }\n if (this.eventWindow) {\n this.eventWindow.destroy();\n this.eventWindow = null;\n }\n this.unwireEvents();\n if (this.headerModule) {\n this.headerModule.destroy();\n this.headerModule = null;\n }\n if (this.scrollModule) {\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n if (this.activeView) {\n this.activeView.removeEventListener();\n this.activeView.destroy();\n this.activeView = null;\n }\n if (this.scheduleTouchModule) {\n this.scheduleTouchModule.destroy();\n this.scheduleTouchModule = null;\n }\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n var removeClasses = [cls.ROOT];\n if (this.cssClass) {\n removeClasses = removeClasses.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], removeClasses);\n };\n __decorate([\n Property('auto')\n ], Schedule.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Schedule.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showHeaderBar\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showTimeIndicator\", void 0);\n __decorate([\n Property('Week')\n ], Schedule.prototype, \"currentView\", void 0);\n __decorate([\n Property(['Day', 'Week', 'WorkWeek', 'Month', 'Agenda'])\n ], Schedule.prototype, \"views\", void 0);\n __decorate([\n Property(new Date())\n ], Schedule.prototype, \"selectedDate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateFormat\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showWeekend\", void 0);\n __decorate([\n Property(0)\n ], Schedule.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property([1, 2, 3, 4, 5])\n ], Schedule.prototype, \"workDays\", void 0);\n __decorate([\n Property('00:00')\n ], Schedule.prototype, \"startHour\", void 0);\n __decorate([\n Property('24:00')\n ], Schedule.prototype, \"endHour\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowResizing\", void 0);\n __decorate([\n Complex({}, WorkHours)\n ], Schedule.prototype, \"workHours\", void 0);\n __decorate([\n Complex({}, TimeScale)\n ], Schedule.prototype, \"timeScale\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowKeyboardInteraction\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateHeaderTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cellTemplate\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showQuickInfo\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"showWeekNumber\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"editorTemplate\", void 0);\n __decorate([\n Complex({}, QuickInfoTemplates)\n ], Schedule.prototype, \"quickInfoTemplates\", void 0);\n __decorate([\n Property(7)\n ], Schedule.prototype, \"agendaDaysCount\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"hideEmptyAgendaDays\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"timezone\", void 0);\n __decorate([\n Complex({}, EventSettings)\n ], Schedule.prototype, \"eventSettings\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"resourceHeaderTemplate\", void 0);\n __decorate([\n Complex({}, Group)\n ], Schedule.prototype, \"group\", void 0);\n __decorate([\n Collection([], Resources)\n ], Schedule.prototype, \"resources\", void 0);\n __decorate([\n Collection([], HeaderRows)\n ], Schedule.prototype, \"headerRows\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"eventDragArea\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellDoubleClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"navigating\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"renderCell\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventRendered\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBinding\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBound\", void 0);\n Schedule = __decorate([\n NotifyPropertyChanges\n ], Schedule);\n return Schedule;\n}(Component));\nexport { Schedule };\n","import { addClass, createElement, compile, extend, isNullOrUndefined, closest, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { formatUnit, remove, removeClass } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\n/**\n * Base class for the common drag and resize related actions\n */\nvar ActionBase = /** @class */ (function () {\n function ActionBase(parent) {\n this.parent = parent;\n this.actionObj = {\n X: 0, Y: 0, groupIndex: 0, cellWidth: 0, cellHeight: 0, slotInterval: 0, interval: 0, actionIndex: 0,\n cloneElement: [], originalElement: [], action: null, isAllDay: null, excludeSelectors: null,\n index: 0, navigationInterval: null, scrollInterval: null\n };\n this.scrollArgs = { element: null, width: 0, height: 0 };\n this.resizeEdges = { left: false, right: false, top: false, bottom: false };\n this.scrollEdges = { left: false, right: false, top: false, bottom: false };\n }\n ActionBase.prototype.getChangedData = function () {\n var eventObj = extend({}, this.actionObj.event, null, true);\n eventObj[this.parent.eventFields.startTime] = this.actionObj.start;\n eventObj[this.parent.eventFields.endTime] = this.actionObj.end;\n if (!isNullOrUndefined(this.actionObj.isAllDay)) {\n eventObj[this.parent.eventFields.isAllDay] = this.actionObj.isAllDay;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var originalElement = this.getOriginalElement(this.actionObj.element);\n var indexCol = originalElement.map(function (element) { return parseInt(element.getAttribute('data-group-index'), 10); });\n if (indexCol.indexOf(this.actionObj.groupIndex) === -1) {\n var cloneIndex_1 = parseInt(this.actionObj.clone.getAttribute('data-group-index'), 10);\n indexCol = indexCol.filter(function (index) { return index !== cloneIndex_1; });\n indexCol.push(this.actionObj.groupIndex);\n this.parent.resourceBase.getResourceData(eventObj, this.actionObj.groupIndex, indexCol);\n }\n }\n return eventObj;\n };\n ActionBase.prototype.saveChangedData = function (eventArgs) {\n this.parent.activeEventData.event = this.actionObj.event;\n this.parent.currentAction = 'Save';\n var eventObj = eventArgs.data;\n var isSameResource = (this.parent.activeViewOptions.group.resources.length > 0) ?\n parseInt(this.actionObj.element.getAttribute('data-group-index'), 10) === this.actionObj.groupIndex : true;\n if (+eventObj[this.parent.eventFields.startTime] === +this.actionObj.event[this.parent.eventFields.startTime] &&\n +eventObj[this.parent.eventFields.endTime] === +this.actionObj.event[this.parent.eventFields.endTime] && isSameResource) {\n return;\n }\n var currentAction;\n if (eventObj[this.parent.eventFields.recurrenceRule]) {\n var eveId = eventObj[this.parent.eventFields.recurrenceID] || eventObj[this.parent.eventFields.id];\n if (eventObj[this.parent.eventFields.id] === eventObj[this.parent.eventFields.recurrenceID]) {\n eventObj[this.parent.eventFields.id] = this.parent.eventBase.getEventMaxID();\n currentAction = 'EditOccurrence';\n }\n if (this.parent.eventWindow.editOccurrenceValidation(eveId, eventObj, this.actionObj.event)) {\n this.parent.quickPopup.openRecurrenceValidationAlert('sameDayAlert');\n return;\n }\n }\n if (eventObj[this.parent.eventFields.startTimezone] || eventObj[this.parent.eventFields.endTimezone]) {\n this.parent.eventBase.timezoneConvert(eventObj);\n }\n this.parent.crudModule.saveEvent(eventObj, currentAction);\n };\n ActionBase.prototype.calculateIntervalTime = function (date) {\n var intervalTime = new Date(+date);\n intervalTime.setMinutes(Math.floor(intervalTime.getMinutes() / this.actionObj.interval) * this.actionObj.interval);\n return intervalTime;\n };\n ActionBase.prototype.getContentAreaDimension = function () {\n var viewElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var trElement = [].slice.call(viewElement.querySelector('tr').children);\n if (!this.parent.activeView.isTimelineView() && this.parent.activeViewOptions.group.resources.length > 0 &&\n !this.parent.isAdaptive) {\n trElement = this.getResourceElements(trElement);\n }\n var leftOffset = trElement[0].getBoundingClientRect();\n var rightOffset = trElement.slice(-1)[0].getBoundingClientRect();\n var viewDimension = {\n bottom: viewElement.scrollHeight - 5,\n left: this.parent.enableRtl ? rightOffset.left : leftOffset.left,\n right: this.parent.enableRtl ? leftOffset.right : rightOffset.right,\n top: 0\n };\n return viewDimension;\n };\n ActionBase.prototype.getPageCoordinates = function (e) {\n var eventArgs = e.event;\n return eventArgs && eventArgs.changedTouches ? eventArgs.changedTouches[0] : e.changedTouches ? e.changedTouches[0] :\n eventArgs || e;\n };\n ActionBase.prototype.getIndex = function (index) {\n var contentElements = [].slice.call(this.parent.getContentTable().querySelector('tr').children);\n var indexes = { minIndex: 0, maxIndex: contentElements.length - 1 };\n if (this.actionObj.action === 'resize' && this.parent.activeViewOptions.group.resources.length > 0 &&\n !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeView.isTimelineView()) {\n var groupElements = this.getResourceElements(contentElements);\n indexes.minIndex = groupElements[0].cellIndex;\n indexes.maxIndex = groupElements.slice(-1)[0].cellIndex;\n }\n if (index < indexes.minIndex) {\n index = indexes.minIndex;\n }\n if (index > indexes.maxIndex) {\n index = indexes.maxIndex;\n }\n return index;\n };\n ActionBase.prototype.updateTimePosition = function (date) {\n for (var _i = 0, _a = this.actionObj.cloneElement; _i < _a.length; _i++) {\n var cloneElement = _a[_i];\n var timeElement = cloneElement.querySelector('.' + cls.APPOINTMENT_TIME);\n if (timeElement) {\n timeElement.innerHTML = this.parent.getTimeString(this.actionObj.start) + ' - ' +\n this.parent.getTimeString(this.actionObj.end);\n }\n }\n if (!this.parent.activeViewOptions.timeScale.enable || !this.parent.isAdaptive || this.parent.currentView === 'Month' ||\n this.parent.currentView === 'TimelineMonth') {\n return;\n }\n var timeIndicator = this.parent.element.querySelector('.' + cls.CLONE_TIME_INDICATOR_CLASS);\n if (!timeIndicator) {\n timeIndicator = createElement('div', { className: cls.CLONE_TIME_INDICATOR_CLASS });\n var wrapperClass = this.parent.activeView.isTimelineView() ? cls.DATE_HEADER_WRAP_CLASS : cls.TIME_CELLS_WRAP_CLASS;\n this.parent.element.querySelector('.' + wrapperClass).appendChild(timeIndicator);\n }\n timeIndicator.innerHTML = this.parent.getTimeString(date);\n var offsetValue = 0;\n if (this.parent.activeView.isTimelineView()) {\n if (this.parent.enableRtl) {\n var rightValue = parseInt(this.actionObj.clone.style.right, 10);\n offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.left ?\n rightValue + this.actionObj.clone.offsetWidth : rightValue;\n timeIndicator.style.right = formatUnit(offsetValue);\n }\n else {\n var leftValue = parseInt(this.actionObj.clone.style.left, 10);\n offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.left ?\n leftValue : leftValue + this.actionObj.clone.offsetWidth;\n timeIndicator.style.left = formatUnit(offsetValue);\n }\n }\n else {\n offsetValue = this.actionObj.action === 'drag' || this.resizeEdges.top ? this.actionObj.clone.offsetTop :\n this.actionObj.clone.offsetTop + this.actionObj.clone.offsetHeight;\n timeIndicator.style.top = formatUnit(offsetValue);\n }\n };\n ActionBase.prototype.getResourceElements = function (table) {\n var _this = this;\n return table.filter(function (element) {\n return parseInt(element.getAttribute('data-group-index'), 10) === _this.actionObj.groupIndex;\n });\n };\n ActionBase.prototype.getOriginalElement = function (element) {\n var originalElement;\n var guid = element.getAttribute('data-guid');\n if (this.parent.activeView.isTimelineView()) {\n originalElement = [].slice.call(this.parent.element.querySelectorAll('[data-guid=\"' + guid + '\"]'));\n }\n else {\n var tr = closest(element, 'tr');\n originalElement = [].slice.call(tr.querySelectorAll('[data-guid=\"' + guid + '\"]'));\n }\n return originalElement;\n };\n ActionBase.prototype.createCloneElement = function (element) {\n var cloneElement = compile(element.outerHTML)({})[0];\n var cloneClassLists = [cls.CLONE_ELEMENT_CLASS];\n cloneClassLists.push((this.actionObj.action === 'drag') ? cls.DRAG_CLONE_CLASS : cls.RESIZE_CLONE_CLASS);\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'TimelineMonth') {\n cloneClassLists.push(cls.MONTH_CLONE_ELEMENT_CLASS);\n }\n addClass([cloneElement], cloneClassLists);\n addClass([element], cls.EVENT_ACTION_CLASS);\n element.parentElement.appendChild(cloneElement);\n cloneElement.style.width = formatUnit(cloneElement.offsetWidth - 2);\n if (this.parent.eventDragArea && this.actionObj.action === 'drag') {\n document.querySelector(this.parent.eventDragArea).appendChild(cloneElement);\n }\n setStyleAttribute(cloneElement, { border: '0px' });\n return cloneElement;\n };\n ActionBase.prototype.removeCloneElement = function () {\n this.actionObj.originalElement.forEach(function (element) { return removeClass([element], cls.EVENT_ACTION_CLASS); });\n this.actionObj.originalElement = [];\n this.actionObj.cloneElement.forEach(function (element) { return remove(element); });\n this.actionObj.cloneElement = [];\n var timeIndicator = this.parent.element.querySelector('.' + cls.CLONE_TIME_INDICATOR_CLASS);\n if (timeIndicator) {\n remove(timeIndicator);\n }\n };\n ActionBase.prototype.getCursorElement = function (e) {\n var pages = this.getPageCoordinates(e);\n return document.elementFromPoint(pages.clientX, pages.clientY);\n };\n ActionBase.prototype.autoScroll = function () {\n var parent = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n var xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n var yInBounds = yIsScrollable && parent.scrollTop >= 0 && parent.scrollTop + parent.offsetHeight <= parent.scrollHeight;\n var xInBounds = xIsScrollable && parent.scrollLeft >= 0 && parent.scrollLeft + parent.offsetWidth <= parent.scrollWidth;\n if (yInBounds && (this.scrollEdges.top || this.scrollEdges.bottom)) {\n parent.scrollTop += this.scrollEdges.top ? -this.actionObj.scroll.scrollBy : this.actionObj.scroll.scrollBy;\n if (this.actionObj.action === 'resize') {\n if (parent.scrollHeight !== parent.offsetHeight + parent.scrollTop && parent.scrollTop > 0) {\n this.actionObj.Y += this.scrollEdges.top ? this.actionObj.scroll.scrollBy : -this.actionObj.scroll.scrollBy;\n }\n }\n }\n if (xInBounds && (this.scrollEdges.left || this.scrollEdges.right)) {\n parent.scrollLeft += this.scrollEdges.left ? -this.actionObj.scroll.scrollBy : this.actionObj.scroll.scrollBy;\n if (this.actionObj.action === 'resize') {\n if (parent.scrollWidth !== parent.offsetWidth + parent.scrollLeft && parent.scrollLeft > 0) {\n this.actionObj.X += this.scrollEdges.left ? this.actionObj.scroll.scrollBy : -this.actionObj.scroll.scrollBy;\n }\n }\n }\n };\n ActionBase.prototype.autoScrollValidation = function (e) {\n if (!this.actionObj.scroll.enable || closest(e.target, '.' + cls.DATE_HEADER_WRAP_CLASS)) {\n return false;\n }\n var pages = this.getPageCoordinates(e);\n var allowScroll = false;\n var autoScrollDistance = 30;\n this.scrollEdges = { left: false, right: false, top: false, bottom: false };\n var viewBoundaries = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS).getBoundingClientRect();\n if ((this.actionObj.pageY < viewBoundaries.top + autoScrollDistance + window.pageYOffset) &&\n (this.actionObj.pageY > viewBoundaries.top + window.pageYOffset)) {\n allowScroll = true;\n this.scrollEdges.top = true;\n }\n if ((this.actionObj.pageY > (viewBoundaries.bottom - autoScrollDistance) + window.pageYOffset) &&\n (this.actionObj.pageY < viewBoundaries.bottom + window.pageYOffset)) {\n allowScroll = true;\n this.scrollEdges.bottom = true;\n }\n if ((this.actionObj.pageX < viewBoundaries.left + autoScrollDistance + window.pageXOffset) &&\n (this.actionObj.pageX > viewBoundaries.left + window.pageXOffset)) {\n allowScroll = true;\n this.scrollEdges.left = true;\n }\n if ((this.actionObj.pageX > (viewBoundaries.right - autoScrollDistance) + window.pageXOffset) &&\n (this.actionObj.pageX < viewBoundaries.right + window.pageXOffset)) {\n allowScroll = true;\n this.scrollEdges.right = true;\n }\n return allowScroll;\n };\n ActionBase.prototype.actionClass = function (type) {\n if (type === 'addClass') {\n addClass([this.parent.element], cls.EVENT_ACTION_CLASS);\n }\n else {\n removeClass([this.parent.element], cls.EVENT_ACTION_CLASS);\n }\n };\n ActionBase.prototype.updateScrollPosition = function (e) {\n var _this = this;\n if (this.actionObj.scroll.enable && isNullOrUndefined(this.actionObj.scrollInterval)) {\n this.actionObj.scrollInterval = window.setInterval(function () {\n if (_this.autoScrollValidation(e) && !_this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n _this.autoScroll();\n if (_this.actionObj.action === 'drag') {\n _this.parent.dragAndDropModule.updateDraggingDateTime(e);\n }\n else {\n _this.parent.resizeModule.updateResizingDirection(e);\n }\n }\n }, this.actionObj.scroll.timeDelay);\n }\n };\n /**\n * To destroy the action base module.\n * @return {void}\n * @private\n */\n ActionBase.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.actionObj = {};\n this.scrollArgs = {};\n this.resizeEdges = { left: false, right: false, top: false, bottom: false };\n this.scrollEdges = { left: false, right: false, top: false, bottom: false };\n };\n return ActionBase;\n}());\nexport { ActionBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { addClass, Browser, EventHandler, closest, extend, formatUnit, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { ActionBase } from '../actions/action-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Schedule events resize actions\n */\nvar Resize = /** @class */ (function (_super) {\n __extends(Resize, _super);\n function Resize() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Resize.prototype.wireResizeEvent = function (element) {\n var _this = this;\n var resizeElement = [].slice.call(element.querySelectorAll('.' + cls.EVENT_RESIZE_CLASS));\n resizeElement.forEach(function (element) { return EventHandler.add(element, Browser.touchStartEvent, _this.resizeStart, _this); });\n };\n Resize.prototype.resizeHelper = function () {\n var _this = this;\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.activeViewOptions.group.allowGroupEdit) {\n this.actionObj.originalElement.forEach(function (element, index) {\n var cloneElement = _this.createCloneElement(element);\n _this.actionObj.cloneElement[index] = cloneElement;\n if (_this.actionObj.element === element) {\n _this.actionObj.clone = cloneElement;\n }\n });\n }\n else {\n this.actionObj.clone = this.createCloneElement(this.actionObj.element);\n this.actionObj.cloneElement = [this.actionObj.clone];\n this.actionObj.originalElement = [this.actionObj.element];\n }\n };\n Resize.prototype.resizeStart = function (e) {\n this.actionObj.action = 'resize';\n this.actionObj.slotInterval = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n this.actionObj.interval = this.actionObj.slotInterval;\n var resizeTarget = closest(e.target, '.' + cls.EVENT_RESIZE_CLASS);\n this.actionObj.element = closest(resizeTarget, '.' + cls.APPOINTMENT_CLASS);\n this.actionObj.event = this.parent.eventBase.getEventByGuid(this.actionObj.element.getAttribute('data-guid'));\n var eventObj = extend({}, this.actionObj.event, null, true);\n var resizeArgs = {\n cancel: false,\n data: eventObj,\n element: this.actionObj.element,\n event: e,\n interval: this.actionObj.interval,\n scroll: { enable: true, scrollBy: 30, timeDelay: 100 }\n };\n this.parent.trigger(event.resizeStart, resizeArgs);\n if (resizeArgs.cancel) {\n return;\n }\n this.actionClass('addClass');\n this.parent.uiStateValues.action = true;\n this.resizeEdges = {\n left: resizeTarget.classList.contains(cls.LEFT_RESIZE_HANDLER),\n right: resizeTarget.classList.contains(cls.RIGHT_RESIZE_HANDLER),\n top: resizeTarget.classList.contains(cls.TOP_RESIZE_HANDLER),\n bottom: resizeTarget.classList.contains(cls.BOTTOM_RESIZE_HANDLER)\n };\n this.actionObj.groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex : 0;\n var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);\n this.actionObj.cellWidth = workCell.offsetWidth;\n this.actionObj.cellHeight = workCell.offsetHeight;\n var headerRows = this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });\n if (this.parent.activeView.isTimelineView() && headerRows.length > 0 && ['Date', 'Hour'].indexOf(headerRows.slice(-1)[0]) < 0) {\n var tr = this.parent.getContentTable().querySelector('tr');\n var noOfDays_1 = 0;\n var tdCollections = [].slice.call(tr.childNodes);\n tdCollections.forEach(function (td) { return noOfDays_1 += parseInt(td.getAttribute('colspan'), 10); });\n this.actionObj.cellWidth = tr.offsetWidth / noOfDays_1;\n this.actionObj.cellHeight = tr.offsetHeight;\n }\n var pages = this.getPageCoordinates(e);\n this.actionObj.X = pages.pageX;\n this.actionObj.Y = pages.pageY;\n this.actionObj.groupIndex = parseInt(this.actionObj.element.getAttribute('data-group-index') || '0', 10);\n this.actionObj.interval = resizeArgs.interval;\n this.actionObj.scroll = resizeArgs.scroll;\n this.actionObj.start = new Date(eventObj[this.parent.eventFields.startTime].getTime());\n this.actionObj.end = new Date(eventObj[this.parent.eventFields.endTime].getTime());\n this.actionObj.originalElement = this.getOriginalElement(this.actionObj.element);\n var viewElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n this.scrollArgs = { element: viewElement, width: viewElement.scrollWidth, height: viewElement.scrollHeight };\n EventHandler.add(document, Browser.touchMoveEvent, this.resizing, this);\n EventHandler.add(document, Browser.touchEndEvent, this.resizeStop, this);\n };\n Resize.prototype.resizing = function (e) {\n this.parent.quickPopup.quickPopupHide();\n if (this.parent.element.querySelectorAll('.' + cls.RESIZE_CLONE_CLASS).length === 0) {\n this.resizeHelper();\n }\n var pages = this.getPageCoordinates(e);\n this.actionObj.pageX = pages.pageX;\n this.actionObj.pageY = pages.pageY;\n this.updateScrollPosition(e);\n this.updateResizingDirection(e);\n var eventObj = extend({}, this.actionObj.event, null, true);\n var resizeArgs = {\n cancel: false,\n data: eventObj,\n element: this.actionObj.element,\n event: e,\n startTime: this.actionObj.start,\n endTime: this.actionObj.end\n };\n this.parent.trigger(event.resizing, resizeArgs);\n };\n Resize.prototype.updateResizingDirection = function (e) {\n var resizeValidation = this.resizeValidation(e);\n if (this.resizeEdges.left) {\n if (resizeValidation) {\n var leftStyles = this.getLeftRightStyles(e, true);\n for (var _i = 0, _a = this.actionObj.cloneElement; _i < _a.length; _i++) {\n var cloneElement = _a[_i];\n setStyleAttribute(cloneElement, leftStyles);\n addClass([cloneElement], cls.LEFT_RESIZE_HANDLER);\n }\n }\n this.horizontalResizing(!this.parent.enableRtl);\n }\n if (this.resizeEdges.right) {\n if (resizeValidation) {\n var rightStyles = this.getLeftRightStyles(e, false);\n for (var _b = 0, _c = this.actionObj.cloneElement; _b < _c.length; _b++) {\n var cloneElement = _c[_b];\n setStyleAttribute(cloneElement, rightStyles);\n addClass([cloneElement], cls.RIGHT_RESIZE_HANDLER);\n }\n }\n this.horizontalResizing(this.parent.enableRtl);\n }\n if (this.resizeEdges.top) {\n if (resizeValidation) {\n var topStyles = this.getTopBottomStyles(e, true);\n for (var _d = 0, _e = this.actionObj.cloneElement; _d < _e.length; _d++) {\n var cloneElement = _e[_d];\n setStyleAttribute(cloneElement, topStyles);\n addClass([cloneElement], cls.TOP_RESIZE_HANDLER);\n }\n }\n this.verticalResizing(true);\n }\n if (this.resizeEdges.bottom) {\n if (resizeValidation) {\n var bottomStyles = this.getTopBottomStyles(e, false);\n for (var _f = 0, _g = this.actionObj.cloneElement; _f < _g.length; _f++) {\n var cloneElement = _g[_f];\n setStyleAttribute(cloneElement, bottomStyles);\n addClass([cloneElement], cls.BOTTOM_RESIZE_HANDLER);\n }\n }\n this.verticalResizing(false);\n }\n };\n Resize.prototype.resizeStop = function (e) {\n EventHandler.remove(document, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeStop);\n clearInterval(this.actionObj.scrollInterval);\n this.actionObj.scrollInterval = null;\n this.removeCloneElement();\n this.actionClass('removeClass');\n this.parent.uiStateValues.action = false;\n var resizeArgs = { cancel: false, data: this.getChangedData(), element: this.actionObj.element, event: e };\n this.parent.trigger(event.resizeStop, resizeArgs);\n if (resizeArgs.cancel) {\n return;\n }\n this.saveChangedData(resizeArgs);\n };\n Resize.prototype.verticalResizing = function (isTop) {\n var offsetValue = this.actionObj.clone.offsetTop;\n if (!isTop) {\n offsetValue += this.actionObj.clone.offsetHeight;\n }\n var minutes = (offsetValue / this.actionObj.cellHeight) * this.actionObj.slotInterval;\n var resizeTime = util.resetTime(new Date(parseInt(this.actionObj.clone.offsetParent.getAttribute('data-date'), 10)));\n resizeTime.setHours(this.parent.activeView.getStartHour().getHours());\n resizeTime.setMinutes(minutes);\n if (isTop) {\n this.actionObj.start = this.calculateIntervalTime(resizeTime);\n }\n else {\n this.actionObj.end = this.calculateIntervalTime(resizeTime);\n }\n this.updateTimePosition(resizeTime);\n };\n Resize.prototype.horizontalResizing = function (isLeft) {\n var eventStart = new Date(this.actionObj.event[this.parent.eventFields.startTime].getTime());\n var eventEnd = new Date(this.actionObj.event[this.parent.eventFields.endTime].getTime());\n var resizeTime;\n if (this.parent.activeView.isTimelineView()) {\n var tr = this.parent.getContentTable().querySelector('tr');\n var headerName = this.parent.currentView;\n if (this.parent.activeViewOptions.headerRows.length > 0) {\n var rows = this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });\n headerName = rows.slice(-1)[0];\n if (this.parent.currentView === 'TimelineMonth' && headerName === 'Hour') {\n headerName = rows.slice(-2)[0] || 'Month';\n }\n }\n resizeTime = isLeft ? eventStart : eventEnd;\n var cellIndex = 0;\n if (['Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1) {\n var noOfDays_2 = 0;\n var tdCollections = [].slice.call(tr.childNodes);\n tdCollections.forEach(function (td) { return noOfDays_2 += parseInt(td.getAttribute('colspan'), 10); });\n var offsetValue = this.parent.enableRtl ? parseInt(this.actionObj.clone.style.right, 10) :\n parseInt(this.actionObj.clone.style.left, 10);\n if (!isLeft) {\n offsetValue += (this.actionObj.clone.offsetWidth - this.actionObj.cellWidth);\n }\n cellIndex = Math.floor(offsetValue / (tr.offsetWidth / noOfDays_2));\n cellIndex = (cellIndex < 0) ? 0 : (cellIndex >= noOfDays_2) ? noOfDays_2 - 1 : cellIndex;\n }\n else {\n var cellWidth = this.parent.currentView === 'TimelineMonth' || !this.parent.activeViewOptions.timeScale.enable ?\n this.actionObj.cellWidth - 2 : 0;\n cellIndex = Math.floor(isLeft ? (this.actionObj.clone.offsetLeft / this.actionObj.cellWidth) :\n (this.actionObj.clone.offsetLeft + (this.actionObj.clone.offsetWidth - cellWidth)) / this.actionObj.cellWidth);\n if (this.parent.enableRtl) {\n var cellOffsetWidth = 0;\n if (headerName === 'TimelineMonth' || (!this.parent.activeViewOptions.timeScale.enable &&\n this.parent.currentView !== 'TimelineMonth')) {\n cellOffsetWidth = this.actionObj.cellWidth;\n }\n var offsetWidth = (Math.floor(parseInt(this.actionObj.clone.style.right, 10) / this.actionObj.cellWidth) *\n this.actionObj.cellWidth) + (isLeft ? 0 : this.actionObj.clone.offsetWidth - cellOffsetWidth);\n cellIndex = Math.ceil(offsetWidth / this.actionObj.cellWidth);\n }\n cellIndex = this.getIndex(cellIndex);\n }\n var resizeDate = void 0;\n if (['Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1) {\n resizeDate = new Date(this.parent.activeView.renderDates[cellIndex].getTime());\n }\n else {\n resizeDate = new Date(parseInt(tr.childNodes.item(cellIndex).getAttribute('data-date'), 10));\n }\n if (['TimelineMonth', 'Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1 ||\n !this.parent.activeViewOptions.timeScale.enable) {\n resizeTime = new Date(resizeDate.setHours(resizeTime.getHours(), resizeTime.getMinutes(), resizeTime.getSeconds()));\n }\n else {\n var offsetValue = this.parent.enableRtl ? parseFloat(this.actionObj.clone.style.right) :\n parseFloat(this.actionObj.clone.style.left);\n if (!isLeft) {\n offsetValue += this.actionObj.clone.offsetWidth;\n }\n var spanMinutes = Math.ceil((this.actionObj.slotInterval / this.actionObj.cellWidth) *\n (offsetValue - Math.floor(offsetValue / this.actionObj.cellWidth) * this.actionObj.cellWidth));\n resizeTime = new Date(resizeDate.getTime());\n resizeTime.setMinutes(resizeTime.getMinutes() + spanMinutes);\n this.updateTimePosition(resizeTime);\n }\n }\n else {\n var cloneIndex = closest(this.actionObj.clone, 'td').cellIndex;\n var originalWidth = Math.ceil((isLeft ? this.actionObj.element.offsetWidth : 0) / this.actionObj.cellWidth) *\n this.actionObj.cellWidth;\n var noOfDays = Math.ceil((this.actionObj.clone.offsetWidth - originalWidth) / this.actionObj.cellWidth);\n var tr = closest(this.actionObj.clone, 'tr');\n var dayIndex = isLeft ? cloneIndex - noOfDays : cloneIndex + noOfDays - 1;\n dayIndex = this.getIndex(dayIndex);\n resizeTime = new Date(parseInt(tr.childNodes.item(dayIndex).getAttribute('data-date'), 10));\n if (isLeft) {\n resizeTime.setHours(eventStart.getHours(), eventStart.getMinutes(), eventStart.getSeconds());\n }\n else {\n resizeTime.setHours(eventEnd.getHours(), eventEnd.getMinutes(), eventEnd.getSeconds());\n }\n }\n if (isLeft) {\n this.actionObj.start = this.parent.activeViewOptions.timeScale.enable ? this.calculateIntervalTime(resizeTime) : resizeTime;\n }\n else {\n var resizeEnd = (this.actionObj.event[this.parent.eventFields.isAllDay] && resizeTime.getHours() === 0 &&\n resizeTime.getMinutes() === 0) ? util.addDays(resizeTime, 1) : resizeTime;\n this.actionObj.end = this.parent.activeViewOptions.timeScale.enable && this.parent.currentView !== 'Month' ?\n this.calculateIntervalTime(resizeEnd) : resizeEnd;\n }\n };\n Resize.prototype.getTopBottomStyles = function (e, isTop) {\n var viewElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var slotInterval = (this.actionObj.cellHeight / this.actionObj.slotInterval) * this.actionObj.interval;\n var clnHeight = isTop ? this.actionObj.element.offsetHeight + (this.actionObj.Y - this.actionObj.pageY) :\n this.actionObj.element.offsetHeight + (this.actionObj.pageY - this.actionObj.Y);\n var clnTop = isTop ? this.actionObj.element.offsetTop -\n (this.actionObj.Y - this.actionObj.pageY) : this.actionObj.clone.offsetTop;\n clnHeight = (clnTop < 0) ? this.actionObj.clone.offsetHeight :\n (this.actionObj.clone.offsetTop + this.actionObj.clone.offsetHeight) > this.scrollArgs.height ?\n this.actionObj.clone.offsetHeight : clnHeight;\n clnTop = (clnTop < 0) ? 0 : clnTop;\n clnTop = Math.floor(clnTop / slotInterval) * slotInterval;\n clnHeight = clnTop + clnHeight >= viewElement.scrollHeight ? viewElement.scrollHeight - clnTop :\n Math.ceil(clnHeight / slotInterval) * slotInterval;\n var styles = {\n height: formatUnit(clnHeight < this.actionObj.cellHeight ? this.actionObj.cellHeight : clnHeight),\n top: formatUnit((clnHeight < this.actionObj.cellHeight && isTop) ? this.actionObj.clone.offsetTop : clnTop),\n left: '0px', right: '0px', width: '100%'\n };\n return styles;\n };\n Resize.prototype.getLeftRightStyles = function (e, isLeft) {\n var styles = {};\n var isTimelineView = this.parent.activeView.isTimelineView();\n var isTimeViews = ['TimelineDay', 'TimelineWeek', 'TimelineWorkWeek'].indexOf(this.parent.currentView) > 0 &&\n this.parent.activeViewOptions.timeScale.enable;\n var slotInterval = (this.actionObj.cellWidth / this.actionObj.slotInterval) * this.actionObj.interval;\n var pageWidth = isLeft ? (this.actionObj.X - this.actionObj.pageX) : (this.actionObj.pageX - this.actionObj.X);\n var targetWidth = isTimelineView ?\n (this.actionObj.element.offsetWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth :\n this.parent.currentView === 'Month' ? this.actionObj.element.offsetWidth :\n Math.ceil(this.actionObj.element.offsetWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n var offsetWidth = targetWidth + (Math.ceil(pageWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth);\n if (isTimeViews) {\n offsetWidth = targetWidth + (Math.ceil(pageWidth / slotInterval) * slotInterval);\n this.actionObj.event[this.parent.eventFields.isAllDay] = false;\n }\n styles.width = formatUnit((offsetWidth < this.actionObj.cellWidth) ? this.actionObj.cellWidth : offsetWidth);\n if (this.parent.enableRtl) {\n var rightValue = isTimelineView ?\n Math.floor(parseInt(this.actionObj.element.style.right, 10) / this.actionObj.cellWidth) * this.actionObj.cellWidth :\n -(offsetWidth - this.actionObj.cellWidth);\n rightValue = isTimelineView ? rightValue : isLeft ? 0 : rightValue > 0 ? 0 : rightValue;\n if (isTimelineView && !isLeft) {\n rightValue = Math.ceil((this.actionObj.element.offsetLeft + (this.actionObj.element.offsetWidth +\n (this.actionObj.pageX - this.actionObj.X))) / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n rightValue = rightValue < 0 ? Math.abs(rightValue) : -rightValue;\n }\n styles.right = formatUnit(rightValue);\n }\n else {\n var offsetLeft = isLeft ? this.actionObj.element.offsetLeft - (this.actionObj.X - this.actionObj.pageX) :\n this.parent.enableRtl ? this.actionObj.element.offsetLeft : 0;\n if (isTimelineView) {\n offsetLeft = isLeft ? offsetLeft : parseInt(this.actionObj.clone.style.left, 10);\n if (this.parent.enableRtl) {\n offsetLeft = !isLeft ? (this.actionObj.pageX < this.actionObj.X - this.actionObj.clone.offsetWidth) ?\n parseInt(this.actionObj.clone.style.right, 10) : offsetLeft : offsetLeft;\n }\n else {\n offsetLeft = isLeft ? (this.actionObj.pageX > this.actionObj.X + this.actionObj.clone.offsetWidth &&\n this.actionObj.clone.offsetWidth === this.actionObj.cellWidth) ?\n parseInt(this.actionObj.clone.style.left, 10) : offsetLeft : offsetLeft;\n }\n }\n var leftValue = offsetLeft;\n offsetLeft = isTimelineView ? isTimeViews ? isLeft ? Math.floor(offsetLeft / slotInterval) * slotInterval : offsetLeft :\n Math.floor(offsetLeft / this.actionObj.cellWidth) * this.actionObj.cellWidth :\n Math.ceil(Math.abs(offsetLeft) / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n var cloneWidth = Math.ceil(this.actionObj.clone.offsetWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n if (isLeft) {\n styles.left = formatUnit(isTimelineView ? offsetLeft : isLeft ? leftValue < 0 ? -offsetLeft :\n (Math.ceil((targetWidth - cloneWidth) / this.actionObj.cellWidth) * this.actionObj.cellWidth) : offsetLeft);\n }\n }\n return styles;\n };\n Resize.prototype.resizeValidation = function (e) {\n var pages = this.getPageCoordinates(e);\n var viewDimension = this.getContentAreaDimension();\n var resizeValidation = false;\n if (this.resizeEdges.left) {\n resizeValidation = (pages.pageX - this.actionObj.cellWidth) >= viewDimension.left;\n }\n if (this.resizeEdges.right) {\n resizeValidation = (pages.pageX + this.actionObj.cellWidth) <= viewDimension.right;\n }\n if (this.resizeEdges.top) {\n resizeValidation = this.actionObj.clone.offsetTop >= viewDimension.top;\n }\n if (this.resizeEdges.bottom) {\n resizeValidation = (this.actionObj.clone.offsetTop + this.actionObj.clone.offsetHeight) <= this.scrollArgs.height;\n }\n return resizeValidation;\n };\n /**\n * Get module name.\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n return Resize;\n}(ActionBase));\nexport { Resize };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { createElement, closest, Draggable, extend, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, remove, removeClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { ActionBase } from '../actions/action-base';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Schedule events drag actions\n */\nvar DragAndDrop = /** @class */ (function (_super) {\n __extends(DragAndDrop, _super);\n function DragAndDrop() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DragAndDrop.prototype.wireDragEvent = function (element, isAllDay) {\n var dragAreaTarget = isAllDay ? cls.DATE_HEADER_WRAP_CLASS : cls.CONTENT_WRAP_CLASS;\n new Draggable(element, {\n abort: '.' + cls.EVENT_RESIZE_CLASS,\n clone: true,\n enableTapHold: this.parent.isAdaptive,\n enableTailMode: (this.parent.eventDragArea) ? true : false,\n cursorAt: (this.parent.eventDragArea) ? { left: -20, top: -20 } : { left: 0, top: 0 },\n dragArea: (this.parent.eventDragArea) ?\n document.querySelector(this.parent.eventDragArea) :\n this.parent.element.querySelector('.' + dragAreaTarget),\n dragStart: this.dragStart.bind(this),\n drag: this.drag.bind(this),\n dragStop: this.dragStop.bind(this),\n enableAutoScroll: false,\n helper: this.dragHelper.bind(this),\n queryPositionInfo: this.dragPosition.bind(this)\n });\n };\n DragAndDrop.prototype.dragHelper = function (e) {\n this.setDragActionDefaultValues();\n this.actionObj.element = e.element;\n this.actionObj.action = 'drag';\n this.actionObj.clone = this.createCloneElement(this.actionObj.element);\n if (!this.parent.eventDragArea && this.parent.currentView !== 'Month' &&\n this.parent.timeScale.enable && !this.parent.activeView.isTimelineView() &&\n !this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n setStyleAttribute(this.actionObj.clone, { cursor: 'move', left: '0%', right: '0%', width: '100%' });\n }\n this.actionObj.clone.style.top = formatUnit(this.actionObj.element.offsetTop);\n this.actionObj.cloneElement = [this.actionObj.clone];\n this.actionObj.originalElement = [this.actionObj.element];\n return this.actionObj.clone;\n };\n DragAndDrop.prototype.dragPosition = function (e) {\n if (this.parent.eventDragArea) {\n return { left: e.left, top: e.top };\n }\n var slotInterval = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n var cellWidth = this.parent.activeView.isTimelineView() ? (this.actionObj.cellWidth / slotInterval) *\n this.actionObj.interval : this.actionObj.cellWidth;\n var cellHeight = (this.actionObj.cellHeight / slotInterval) * this.actionObj.interval;\n var leftOffset = this.parent.enableRtl ? parseInt(e.left, 10) : Math.abs(parseInt(e.left, 10));\n var leftValue;\n if (this.parent.currentView === 'Month' || this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n leftValue = e.left;\n }\n else {\n leftValue = formatUnit(Math.floor(leftOffset / cellWidth) * cellWidth);\n }\n var topValue;\n if ((this.parent.activeView.isTimelineView() || !this.parent.timeScale.enable ||\n this.actionObj.clone.offsetParent.classList.contains(cls.MORE_EVENT_POPUP_CLASS))) {\n topValue = formatUnit(this.actionObj.clone.offsetTop);\n }\n else if (this.parent.currentView === 'Month') {\n topValue = formatUnit(0);\n }\n else if (this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) &&\n !this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n topValue = formatUnit(this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS).scrollTop);\n }\n else if (this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n topValue = formatUnit(this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).offsetTop);\n }\n else {\n topValue = formatUnit(Math.ceil(parseInt(e.top, 10) / cellHeight) * cellHeight);\n var scrollHeight = this.parent.element.querySelector('.e-content-wrap').scrollHeight;\n var cloneBottom = parseInt(topValue, 10) + this.actionObj.clone.offsetHeight;\n if (cloneBottom > scrollHeight) {\n topValue = (parseInt(topValue, 10) - (cloneBottom - scrollHeight)) + 'px';\n }\n }\n return { left: leftValue, top: topValue };\n };\n DragAndDrop.prototype.setDragActionDefaultValues = function () {\n this.actionObj.action = 'drag';\n this.actionObj.isAllDay = null;\n this.actionObj.slotInterval = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n this.actionObj.interval = this.actionObj.slotInterval;\n var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);\n this.actionObj.cellWidth = workCell.offsetWidth;\n this.actionObj.cellHeight = workCell.offsetHeight;\n };\n DragAndDrop.prototype.dragStart = function (e) {\n var eventGuid = this.actionObj.element.getAttribute('data-guid');\n this.actionObj.event = this.parent.eventBase.getEventByGuid(eventGuid);\n var eventObj = extend({}, this.actionObj.event, null, true);\n var dragArgs = {\n cancel: false,\n data: eventObj,\n event: e,\n excludeSelectors: null,\n element: this.actionObj.element,\n interval: this.actionObj.interval,\n navigation: { enable: false, timeDelay: 2000 },\n scroll: { enable: true, scrollBy: 30, timeDelay: 100 }\n };\n this.parent.trigger(events.dragStart, dragArgs);\n if (dragArgs.cancel) {\n this.removeCloneElement();\n return;\n }\n this.actionClass('addClass');\n this.parent.uiStateValues.action = true;\n this.actionObj.start = eventObj[this.parent.eventFields.startTime];\n this.actionObj.end = eventObj[this.parent.eventFields.endTime];\n this.actionObj.groupIndex = parseInt(this.actionObj.element.getAttribute('data-group-index') || '0', 10);\n this.actionObj.interval = dragArgs.interval;\n this.actionObj.navigation = dragArgs.navigation;\n this.actionObj.scroll = dragArgs.scroll;\n this.actionObj.excludeSelectors = dragArgs.excludeSelectors;\n };\n DragAndDrop.prototype.drag = function (e) {\n this.parent.quickPopup.quickPopupHide(true);\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventArgs = this.getPageCoordinates(e);\n this.actionObj.Y = this.actionObj.pageY = eventArgs.pageY;\n this.actionObj.X = this.actionObj.pageX = eventArgs.pageX;\n this.actionObj.target = e.target;\n if (this.parent.eventDragArea) {\n var targetElement = eventArgs.target;\n this.actionObj.clone.style.top = formatUnit(targetElement.offsetTop);\n this.actionObj.clone.style.left = formatUnit(targetElement.offsetLeft);\n var currentTarget = closest(targetElement, '.' + cls.ROOT);\n if (!currentTarget) {\n this.actionObj.clone.style.height = '';\n this.actionObj.clone.style.width = '';\n }\n else {\n if (!(this.parent.currentView === 'Week' || this.parent.currentView === 'WorkWeek'\n || this.parent.currentView === 'Day')) {\n this.actionObj.clone.style.height = formatUnit(this.actionObj.element.offsetHeight);\n this.actionObj.clone.style.width = formatUnit(this.actionObj.element.offsetWidth);\n }\n }\n }\n this.updateScrollPosition(e);\n this.updateDraggingDateTime(e);\n var dragArgs = { data: eventObj, event: e, element: this.actionObj.element };\n this.parent.trigger(events.drag, dragArgs);\n };\n DragAndDrop.prototype.dragStop = function (e) {\n this.removeCloneElement();\n clearInterval(this.actionObj.navigationInterval);\n this.actionObj.navigationInterval = null;\n clearInterval(this.actionObj.scrollInterval);\n this.actionObj.scrollInterval = null;\n this.actionClass('removeClass');\n this.parent.uiStateValues.action = false;\n this.actionObj.action = null;\n if (this.isAllowDrop(e)) {\n return;\n }\n var dragArgs = { cancel: false, data: this.getChangedData(), event: e, element: this.actionObj.element };\n this.parent.trigger(events.dragStop, dragArgs);\n if (dragArgs.cancel) {\n return;\n }\n this.saveChangedData(dragArgs);\n };\n DragAndDrop.prototype.updateDraggingDateTime = function (e) {\n var _this = this;\n if (this.actionObj.navigation.enable) {\n var currentDate_1 = new Date();\n if (isNullOrUndefined(this.actionObj.navigationInterval)) {\n this.actionObj.navigationInterval = window.setInterval(function () {\n if (currentDate_1) {\n var crtDate = new Date();\n var end = crtDate.getSeconds();\n var start = currentDate_1.getSeconds() + (_this.actionObj.navigation.timeDelay / 1000);\n start = (start >= 60) ? start - 60 : start;\n if (start === end) {\n currentDate_1 = new Date();\n _this.viewNavigation(e);\n }\n }\n }, this.actionObj.navigation.timeDelay);\n }\n }\n if (this.actionObj.clone.offsetParent.classList.contains(cls.MORE_EVENT_POPUP_CLASS)) {\n this.morePopupEventDragging(e);\n }\n else if (this.parent.activeView.isTimelineView()) {\n if (this.parent.currentView === 'TimelineMonth') {\n this.calculateTimelineDate(e);\n }\n else {\n this.calculateTimelineTime(e);\n }\n }\n else {\n if (this.parent.currentView === 'Month') {\n this.calculateVerticalDate(e);\n }\n else {\n this.calculateVerticalTime(e);\n }\n }\n };\n DragAndDrop.prototype.navigationWrapper = function () {\n if (!this.parent.activeView.isTimelineView()) {\n if (this.parent.currentView === 'Month' || !this.parent.timeScale.enable) {\n var outerWrapperCls = this.parent.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS);\n this.actionObj.index = (this.parent.activeView.renderDates.length < this.actionObj.index) ?\n this.parent.activeView.renderDates.length - 1 : this.actionObj.index;\n var targetWrapper = outerWrapperCls.item(this.actionObj.index).querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!targetWrapper) {\n targetWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n outerWrapperCls.item(this.actionObj.index).appendChild(targetWrapper);\n }\n targetWrapper.appendChild(this.actionObj.clone);\n }\n else {\n var wrapperClass = this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) ?\n '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : '.' + cls.APPOINTMENT_WRAPPER_CLASS;\n this.parent.element.querySelectorAll(wrapperClass)\n .item(this.actionObj.index).appendChild(this.actionObj.clone);\n if (wrapperClass === '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS) {\n var elementHeight_1 = this.getAllDayEventHeight();\n var event_1 = [].slice.call(this.parent.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS + ':first-child'));\n if (event_1[0].offsetHeight < elementHeight_1) {\n event_1.forEach(function (element) { return element.style.height = ((elementHeight_1 + 2) / 12) + 'em'; });\n }\n this.actionObj.clone.style.height = formatUnit(elementHeight_1);\n }\n this.actionObj.height = parseInt(this.actionObj.clone.style.height, 0);\n }\n }\n else {\n var outWrapper = void 0;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n outWrapper = this.parent.element.querySelectorAll('.e-appointment-container:not(.e-hidden)').item(this.actionObj.index);\n }\n else {\n outWrapper = this.parent.element.querySelector('.' + cls.APPOINTMENT_CONTAINER_CLASS);\n }\n var tarWrapper = outWrapper.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!tarWrapper) {\n tarWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n outWrapper.appendChild(tarWrapper);\n }\n tarWrapper.appendChild(this.actionObj.clone);\n }\n };\n DragAndDrop.prototype.viewNavigation = function (e) {\n var navigationType;\n var dragArea = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (dragArea && ((!this.scrollEdges.top && !this.scrollEdges.bottom) ||\n closest(this.actionObj.clone, '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS))) {\n if ((dragArea.scrollLeft === 0) &&\n (Math.round(this.actionObj.X) <=\n Math.round(dragArea.getBoundingClientRect().left + this.actionObj.cellWidth + window.pageXOffset))) {\n navigationType = this.parent.enableRtl ? 'next' : 'previous';\n }\n else if ((Math.round(dragArea.scrollLeft) + dragArea.clientWidth === dragArea.scrollWidth) &&\n (Math.round(this.actionObj.X) >=\n Math.round(dragArea.getBoundingClientRect().right - this.actionObj.cellWidth + window.pageXOffset))) {\n navigationType = this.parent.enableRtl ? 'previous' : 'next';\n }\n if (navigationType) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate(navigationType));\n }\n }\n };\n DragAndDrop.prototype.morePopupEventDragging = function (e) {\n if (isNullOrUndefined(e.target) || (e.target && isNullOrUndefined(closest(e.target, 'td')))) {\n return;\n }\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n var td = closest(e.target, 'td');\n var dragStart = new Date(parseInt(td.getAttribute('data-date'), 10));\n var dragEnd = new Date(dragStart.getTime());\n dragEnd.setMilliseconds(eventDuration);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);\n }\n this.actionObj.start = new Date(dragStart.getTime());\n this.actionObj.end = new Date(dragEnd.getTime());\n this.actionObj.clone.style.top = formatUnit(td.offsetParent.offsetTop);\n this.actionObj.clone.style.left = formatUnit(td.offsetLeft);\n this.actionObj.clone.style.width = formatUnit(td.offsetWidth);\n var eventContainer = td;\n var eventWrapper;\n if (this.parent.activeView.isTimelineView()) {\n var rowIndex = closest(td, 'tr').rowIndex;\n eventContainer = this.parent.element.querySelectorAll('.e-appointment-container').item(rowIndex);\n }\n eventWrapper = eventContainer.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!eventWrapper) {\n eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n eventContainer.appendChild(eventWrapper);\n }\n this.appendCloneElement(eventWrapper);\n };\n DragAndDrop.prototype.calculateVerticalTime = function (e) {\n if (isNullOrUndefined(e.target) || (e.target && isNullOrUndefined(closest(e.target, 'tr')))) {\n return;\n }\n if (this.parent.activeViewOptions.timeScale.enable) {\n this.swapDragging(e);\n }\n var dragArea = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventStart = eventObj[this.parent.eventFields.startTime];\n var eventEnd = eventObj[this.parent.eventFields.endTime];\n var eventDuration = eventEnd.getTime() - eventStart.getTime();\n var offsetTop = Math.floor(this.actionObj.clone.offsetTop / this.actionObj.cellHeight) * this.actionObj.cellHeight;\n offsetTop = offsetTop < 0 ? 0 : offsetTop;\n if (this.scrollEdges.top || this.scrollEdges.bottom) {\n offsetTop = this.scrollEdges.top ? dragArea.scrollTop :\n dragArea.scrollTop + dragArea.offsetHeight - this.actionObj.clone.offsetHeight;\n offsetTop = Math.round(offsetTop / this.actionObj.cellHeight) * this.actionObj.cellHeight;\n this.actionObj.clone.style.top = formatUnit(offsetTop);\n }\n var rowIndex = offsetTop / this.actionObj.cellHeight;\n var heightPerMinute = this.actionObj.cellHeight / this.actionObj.slotInterval;\n var diffInMinutes = this.actionObj.clone.offsetTop - offsetTop;\n var isAllDayDrag = this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS);\n var tr;\n if (isAllDayDrag) {\n tr = this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n }\n else {\n var trCollections = this.parent.getContentTable().querySelectorAll('tr');\n tr = trCollections.item(rowIndex);\n }\n var index = closest(this.actionObj.target, 'td').cellIndex;\n var colIndex = isNullOrUndefined(index) ? closest(this.actionObj.clone, 'td').cellIndex : index;\n this.actionObj.index = colIndex;\n var td = tr.childNodes.item(colIndex);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);\n }\n var dragStart;\n var dragEnd;\n if (this.parent.activeViewOptions.timeScale.enable && !isAllDayDrag) {\n this.appendCloneElement(this.getEventWrapper(colIndex));\n var spanHours = -(((this.actionObj.slotInterval / this.actionObj.cellHeight) * diffInMinutes) * (1000 * 60));\n if (this.actionObj.clone.querySelector('.' + cls.EVENT_ICON_UP_CLASS)) {\n var startTime = new Date(eventStart.getTime());\n spanHours = util.addDays(util.resetTime(new Date(startTime.getTime())), 1).getTime() - startTime.getTime();\n }\n dragStart = new Date(parseInt(td.getAttribute('data-date'), 10));\n dragStart.setMinutes(dragStart.getMinutes() + (diffInMinutes * heightPerMinute));\n dragStart.setMilliseconds(-spanHours);\n dragStart = this.calculateIntervalTime(dragStart);\n dragStart.setMilliseconds(spanHours);\n dragEnd = new Date(dragStart.getTime());\n if (this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n dragEnd.setMinutes(dragEnd.getMinutes() + this.actionObj.slotInterval);\n }\n else {\n dragEnd.setMilliseconds(eventDuration);\n }\n }\n else {\n this.appendCloneElement(this.getEventWrapper(colIndex));\n dragStart = new Date(parseInt(td.getAttribute('data-date'), 10));\n dragStart.setHours(eventStart.getHours(), eventStart.getMinutes(), eventStart.getSeconds());\n dragEnd = new Date(dragStart.getTime());\n dragEnd.setMilliseconds(eventDuration);\n if (!this.actionObj.element.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) &&\n this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {\n dragEnd = util.addDays(util.resetTime(dragEnd), 1);\n }\n }\n this.actionObj.start = new Date(+dragStart);\n this.actionObj.end = new Date(+dragEnd);\n this.updateTimePosition(this.actionObj.start);\n };\n DragAndDrop.prototype.swapDragging = function (e) {\n var _this = this;\n var colIndex = closest(e.target, 'td').cellIndex;\n var setDragArea = function (isAllDay) {\n var dragAreaTarget = isAllDay ? cls.DATE_HEADER_WRAP_CLASS : cls.CONTENT_WRAP_CLASS;\n var dragObj = _this.actionObj.element.ej2_instances[0];\n dragObj.dragArea = _this.parent.eventDragArea ?\n document.querySelector(_this.parent.eventDragArea) :\n _this.parent.element.querySelector('.' + dragAreaTarget);\n dragObj.dataBind();\n };\n if (closest(e.target, '.' + cls.DATE_HEADER_WRAP_CLASS) &&\n !closest(this.actionObj.clone, '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS)) {\n addClass([this.actionObj.clone], cls.ALLDAY_APPOINTMENT_CLASS);\n this.appendCloneElement(this.getEventWrapper(colIndex));\n this.actionObj.isAllDay = true;\n setDragArea(this.actionObj.isAllDay);\n var eventHeight_1 = this.getAllDayEventHeight();\n var allDayElement = [].slice.call(this.parent.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS + ':first-child'));\n if (allDayElement[0].offsetHeight < eventHeight_1) {\n allDayElement.forEach(function (element) { return element.style.height = ((eventHeight_1 + 2) / 12) + 'em'; });\n }\n setStyleAttribute(this.actionObj.clone, {\n width: formatUnit(this.actionObj.cellWidth),\n height: formatUnit(eventHeight_1),\n top: formatUnit(this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).offsetTop)\n });\n }\n if (closest(e.target, '.' + cls.WORK_CELLS_CLASS) && !closest(this.actionObj.clone, '.' + cls.DAY_WRAPPER_CLASS)) {\n removeClass([this.actionObj.clone], cls.ALLDAY_APPOINTMENT_CLASS);\n this.appendCloneElement(this.getEventWrapper(colIndex));\n this.actionObj.isAllDay = false;\n setDragArea(this.actionObj.isAllDay);\n var cursorElement = this.getCursorElement(e);\n var height = (this.actionObj.element.offsetHeight === 0) ? this.actionObj.height : this.actionObj.element.offsetHeight;\n setStyleAttribute(this.actionObj.clone, {\n left: formatUnit(0),\n top: formatUnit(cursorElement.offsetTop),\n height: formatUnit(height),\n width: formatUnit(this.actionObj.cellWidth)\n });\n }\n };\n DragAndDrop.prototype.calculateVerticalDate = function (e) {\n if (isNullOrUndefined(e.target) || (e.target && isNullOrUndefined(closest(e.target, 'tr')))) {\n return;\n }\n this.actionObj.clone.style.top = formatUnit(0);\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n var td = closest(e.target, 'td');\n var tr = td.parentElement;\n var colIndex = (tr.rowIndex * tr.childNodes.length) + td.cellIndex;\n this.actionObj.index = colIndex;\n // let cellIndex: number = td.cellIndex;\n // let daysCount: number = Math.floor(this.actionObj.element.offsetWidth / this.actionObj.cellWidth);\n // let maxIndex: number = (tr.lastChild as HTMLTableCellElement).cellIndex;\n // if (cellIndex + daysCount > maxIndex) {\n // this.actionObj.clone.style.width = formatUnit((this.actionObj.cellWidth - 2) * ((maxIndex + 1) - cellIndex));\n // } else {\n // this.actionObj.clone.style.width = formatUnit(this.actionObj.element.offsetWidth);\n // }\n var outerWrapper = this.parent.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);\n }\n var targetWrapper = outerWrapper.item(colIndex).querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!targetWrapper) {\n targetWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n outerWrapper.item(colIndex).appendChild(targetWrapper);\n }\n if (!targetWrapper.querySelector('.' + cls.CLONE_ELEMENT_CLASS)) {\n this.appendCloneElement(targetWrapper);\n }\n var timeString = td.getAttribute('data-date') || eventObj[this.parent.eventFields.startTime].getTime().toString();\n var dragStart = new Date(parseInt(timeString, 10));\n var dragEnd = new Date(dragStart.getTime());\n if (this.parent.enableRtl) {\n var endTimeDiff = eventObj[this.parent.eventFields.endTime].getTime() -\n (util.resetTime(new Date(+eventObj[this.parent.eventFields.endTime]))).getTime();\n dragEnd = new Date(dragStart.getTime() + endTimeDiff);\n dragStart = new Date(dragEnd.getTime() - eventDuration);\n }\n else {\n var startTimeDiff = eventObj[this.parent.eventFields.startTime].getTime() -\n (util.resetTime(new Date(+eventObj[this.parent.eventFields.startTime]))).getTime();\n dragStart = new Date(dragStart.getTime() + startTimeDiff);\n dragEnd = new Date(dragStart.getTime() + eventDuration);\n }\n this.actionObj.start = new Date(dragStart.getTime());\n this.actionObj.end = new Date(dragEnd.getTime());\n this.updateTimePosition(this.actionObj.start);\n };\n DragAndDrop.prototype.calculateTimelineTime = function (e) {\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n var offsetLeft = this.parent.enableRtl ? Math.abs(this.actionObj.clone.offsetLeft) - this.actionObj.clone.offsetWidth :\n parseInt(this.actionObj.clone.style.left, 10);\n offsetLeft = Math.floor(offsetLeft / this.actionObj.cellWidth) * this.actionObj.cellWidth;\n var rightOffset;\n var diffInMinutes = this.actionObj.clone.offsetLeft - offsetLeft;\n var viewEle = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (this.parent.enableRtl) {\n rightOffset = Math.abs(parseInt(this.actionObj.clone.style.left, 10)) - this.actionObj.clone.offsetWidth;\n this.actionObj.clone.style.right = formatUnit(rightOffset);\n diffInMinutes = rightOffset - offsetLeft;\n }\n if (this.scrollEdges.left || this.scrollEdges.right) {\n if (this.parent.enableRtl) {\n rightOffset = viewEle.scrollWidth - viewEle.scrollLeft;\n if (this.scrollEdges.right) {\n rightOffset = rightOffset - viewEle.offsetWidth + this.actionObj.clone.offsetWidth;\n }\n this.actionObj.clone.style.left = formatUnit(rightOffset);\n }\n else {\n offsetLeft = this.scrollEdges.left ? viewEle.scrollLeft :\n viewEle.scrollLeft + viewEle.offsetWidth - this.actionObj.clone.offsetWidth;\n this.actionObj.clone.style.left = formatUnit(offsetLeft);\n }\n }\n var widthPerMinute = this.actionObj.slotInterval / this.actionObj.cellWidth;\n var colIndex = this.getIndex(Math.floor(offsetLeft / this.actionObj.cellWidth));\n var tr = this.parent.getContentTable().querySelector('tr');\n var eventStart = new Date(parseInt(tr.childNodes.item(colIndex).getAttribute('data-date'), 10));\n eventStart.setMinutes(eventStart.getMinutes() + Math.round((widthPerMinute * diffInMinutes)));\n eventStart = this.calculateIntervalTime(eventStart);\n if (!this.parent.activeViewOptions.timeScale.enable) {\n var eventSrt = eventObj[this.parent.eventFields.startTime];\n eventStart.setHours(eventSrt.getHours(), eventSrt.getMinutes(), eventSrt.getSeconds());\n }\n var eventEnd = new Date(eventStart.getTime());\n eventEnd.setMilliseconds(eventDuration);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.calculateResourceGroupingPosition(e);\n }\n this.actionObj.start = new Date(eventStart.getTime());\n this.actionObj.end = new Date(eventEnd.getTime());\n this.updateTimePosition(this.actionObj.start);\n };\n DragAndDrop.prototype.calculateTimelineDate = function (e) {\n var cloneIndex = 0;\n var eventObj = extend({}, this.actionObj.event, null, true);\n var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -\n eventObj[this.parent.eventFields.startTime].getTime();\n if (this.parent.enableRtl) {\n cloneIndex = (Math.floor(parseInt(this.actionObj.clone.style.right, 10))) / this.actionObj.cellWidth;\n var rightOffset = Math.abs(parseInt(this.actionObj.clone.style.left, 10)) - this.actionObj.clone.offsetWidth;\n this.actionObj.clone.style.right = formatUnit(rightOffset);\n }\n else {\n cloneIndex = Math.floor(this.actionObj.clone.offsetLeft / this.actionObj.cellWidth);\n var leftOffset = parseInt(this.actionObj.clone.style.left, 10);\n this.actionObj.clone.style.left = formatUnit(leftOffset);\n }\n cloneIndex = this.getIndex(cloneIndex);\n var tr = this.parent.getContentTable().querySelector('tr');\n var dragDate = new Date(parseInt(tr.childNodes.item(cloneIndex).getAttribute('data-date'), 10));\n var dragStart = new Date(dragDate.getTime());\n var srtDateDiff = eventObj[this.parent.eventFields.startTime].getTime() -\n (util.resetTime(new Date(+eventObj[this.parent.eventFields.startTime]))).getTime();\n dragStart = new Date(dragStart.getTime() + srtDateDiff);\n var dragEnd = new Date(dragStart.getTime() + eventDuration);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.calculateResourceGroupingPosition(e);\n }\n this.actionObj.start = new Date(dragStart.getTime());\n this.actionObj.end = new Date(dragEnd.getTime());\n this.updateTimePosition(this.actionObj.start);\n };\n DragAndDrop.prototype.calculateResourceGroupingPosition = function (e) {\n var dragArea = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n var trCollection = this.parent.element.querySelectorAll('.e-content-wrap .e-content-table tr:not(.e-hidden)');\n var rowIndex = Math.floor(Math.floor((this.actionObj.Y + dragArea.scrollTop) -\n dragArea.getBoundingClientRect().top) / this.actionObj.cellHeight);\n rowIndex = (rowIndex < 0) ? 0 : (rowIndex > trCollection.length - 1) ? trCollection.length - 1 : rowIndex;\n this.actionObj.index = rowIndex;\n var eventContainer = this.parent.element.querySelectorAll('.e-appointment-container:not(.e-hidden)').item(rowIndex);\n var eventWrapper = eventContainer.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!eventWrapper) {\n eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n eventContainer.appendChild(eventWrapper);\n }\n this.appendCloneElement(eventWrapper);\n var td = closest(e.target, 'td');\n this.actionObj.groupIndex = (td && !isNaN(parseInt(td.getAttribute('data-group-index'), 10)))\n ? parseInt(td.getAttribute('data-group-index'), 10) : this.actionObj.groupIndex;\n this.actionObj.clone.style.top = formatUnit(trCollection.item(rowIndex).offsetTop);\n };\n DragAndDrop.prototype.appendCloneElement = function (element) {\n if (this.parent.eventDragArea) {\n document.querySelector(this.parent.eventDragArea).appendChild(this.actionObj.clone);\n }\n else {\n element.appendChild(this.actionObj.clone);\n }\n };\n DragAndDrop.prototype.getEventWrapper = function (index) {\n var eventWrapper;\n var isAllDayDrag = this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS);\n if (this.parent.activeViewOptions.timeScale.enable) {\n var wrapperClass = isAllDayDrag ? '.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : '.' + cls.APPOINTMENT_WRAPPER_CLASS;\n eventWrapper = this.parent.element.querySelectorAll(wrapperClass).item(index);\n }\n else {\n var targetWrapper = this.parent.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS).item(index);\n eventWrapper = targetWrapper.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS);\n if (!eventWrapper) {\n eventWrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n targetWrapper.appendChild(eventWrapper);\n }\n }\n return eventWrapper;\n };\n DragAndDrop.prototype.getAllDayEventHeight = function () {\n var eventWrapper = createElement('div', { className: cls.APPOINTMENT_CLASS });\n this.parent.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS).appendChild(eventWrapper);\n var eventHeight = eventWrapper.offsetHeight;\n remove(eventWrapper);\n return eventHeight;\n };\n DragAndDrop.prototype.isAllowDrop = function (e) {\n if (!this.actionObj.excludeSelectors) {\n return false;\n }\n var dropSelectors = this.actionObj.excludeSelectors.split(',');\n var isAllowDrop = false;\n for (var _i = 0, dropSelectors_1 = dropSelectors; _i < dropSelectors_1.length; _i++) {\n var selector = dropSelectors_1[_i];\n if (e.target.classList.contains(selector)) {\n isAllowDrop = true;\n break;\n }\n }\n return isAllowDrop;\n };\n /**\n * Get module name.\n */\n DragAndDrop.prototype.getModuleName = function () {\n return 'dragAndDrop';\n };\n return DragAndDrop;\n}(ActionBase));\nexport { DragAndDrop };\n","import { createElement, append, prepend, isNullOrUndefined, getValue, getDefaultDateObject, cldrData, addClass } from '@syncfusion/ej2-base';\nimport { getDateInMs, addDays, resetTime, WEEK_LENGTH, getWeekFirstDate, getOuterHeight, getScrollBarWidth } from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * view base\n */\nvar ViewBase = /** @class */ (function () {\n /**\n * Constructor\n */\n function ViewBase(parent) {\n var _this = this;\n this.customHelper = {\n getDayName: function (dt) {\n return _this.parent.getDayNames('abbreviated')[dt.getDay()];\n },\n getDate: function (dt) {\n return _this.parent.globalize.formatDate(dt, { format: 'd' });\n },\n getTime: function (dt) {\n if (_this.parent.isAdaptive) {\n return _this.parent.globalize.formatDate(dt, { skeleton: 'h' });\n }\n return _this.parent.getTimeString(dt);\n },\n getTimelineDate: function (dt) {\n return _this.parent.globalize.formatDate(dt, { skeleton: 'MMMd' }) + ', ' + _this.parent.getDayNames('wide')[dt.getDay()];\n }\n };\n this.parent = parent;\n }\n ViewBase.prototype.isTimelineView = function () {\n return this.parent.currentView.indexOf('Timeline') !== -1;\n };\n ViewBase.prototype.createEventTable = function (trCount) {\n var eventTable = createElement('div', { className: cls.EVENT_TABLE_CLASS });\n for (var row = 0; row < trCount; row++) {\n eventTable.appendChild(createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS }));\n }\n return eventTable;\n };\n ViewBase.prototype.collapseRows = function (wrap) {\n if (!this.isTimelineView()) {\n return;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.parent.resourceBase.hideResourceRows(wrap.querySelector('tbody'));\n this.parent.resourceBase.hideResourceRows(wrap.querySelector('.' + cls.EVENT_TABLE_CLASS));\n }\n };\n ViewBase.prototype.createTableLayout = function (className) {\n var clsName = className || '';\n var table = createElement('table', { className: cls.SCHEDULE_TABLE_CLASS + ' ' + clsName });\n var tbody = createElement('tbody');\n table.appendChild(tbody);\n return table;\n };\n ViewBase.prototype.createColGroup = function (table, lastRow) {\n var length = lastRow.length;\n if (lastRow[0].colSpan) {\n length = lastRow.map(function (value) { return value.colSpan; }).reduce(function (prev, next) { return prev + next; });\n }\n var colGroupEle = createElement('colgroup');\n for (var i = 0; i < length; i++) {\n colGroupEle.appendChild(createElement('col'));\n }\n prepend([colGroupEle], table);\n };\n ViewBase.prototype.getScrollXIndent = function (content) {\n return content.offsetHeight - content.clientHeight > 0 ? getScrollBarWidth() : 0;\n };\n ViewBase.prototype.scrollTopPanel = function (target) {\n this.getDatesHeaderElement().firstChild.scrollLeft = target.scrollLeft;\n };\n ViewBase.prototype.scrollHeaderLabels = function (target) {\n var _this = this;\n var headerTable = this.element.querySelector('.e-date-header-wrap table');\n var colWidth = headerTable.offsetWidth / headerTable.querySelectorAll('colgroup col').length;\n var applyLeft = function (headerCells, isRtl) {\n var currentCell;\n var tdLeft = 0;\n var colSpan = 0;\n var hiddenLeft = isRtl ? target.scrollWidth - target.offsetWidth - target.scrollLeft : target.scrollLeft;\n for (var i = 0; i < headerCells.length; i++) {\n colSpan += parseInt(headerCells[i].getAttribute('colSpan'), 10);\n if (colSpan > Math.floor(hiddenLeft / colWidth)) {\n currentCell = headerCells[i];\n break;\n }\n tdLeft += headerCells[i].offsetWidth;\n }\n currentCell.children[0].style[isRtl ? 'right' : 'left'] = (hiddenLeft - tdLeft) + 'px';\n };\n var className = ['.e-header-year-cell', '.e-header-month-cell', '.e-header-week-cell', '.e-header-cells'];\n for (var i = 0; i < className.length; i++) {\n var headerCells = [].slice.call(this.element.querySelectorAll(className[i]));\n if (headerCells.length > 0) {\n headerCells.forEach(function (element) {\n element.children[0].style[_this.parent.enableRtl ? 'right' : 'left'] = '';\n });\n applyLeft(headerCells, this.parent.enableRtl);\n }\n }\n };\n ViewBase.prototype.addAttributes = function (td, element) {\n if (td.text) {\n element.innerHTML = td.text;\n }\n if (td.colSpan) {\n element.setAttribute('colspan', td.colSpan.toString());\n }\n if (td.className) {\n addClass([element], td.className);\n }\n };\n ViewBase.prototype.getHeaderBarHeight = function () {\n var headerBarHeight = 2;\n if (this.parent.headerModule) {\n headerBarHeight += getOuterHeight(this.parent.headerModule.getHeaderElement());\n }\n if (this.parent.uiStateValues.isGroupAdaptive) {\n headerBarHeight += this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR).offsetHeight;\n }\n return headerBarHeight;\n };\n ViewBase.prototype.renderPanel = function (type) {\n if (type === cls.PREVIOUS_PANEL_CLASS) {\n prepend([this.element], this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS));\n }\n else {\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n }\n };\n ViewBase.prototype.setPanel = function (panel) {\n this.element = panel;\n };\n ViewBase.prototype.getPanel = function () {\n return this.element;\n };\n ViewBase.prototype.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n ViewBase.prototype.adjustEventWrapper = function () {\n // Here adjust the events wrapper width based in work cells\n };\n ViewBase.prototype.getDateSlots = function (renderDates, workDays) {\n // Here getDateSlots only need in vertical and month views\n return [];\n };\n ViewBase.prototype.generateColumnLevels = function () {\n // Here generateColumnLevels only need in vertical and month views\n return [];\n };\n ViewBase.prototype.getColumnLevels = function () {\n return this.colLevels;\n };\n ViewBase.prototype.highlightCurrentTime = function () {\n // Here showTimeIndicator functionalities\n };\n ViewBase.prototype.startDate = function () {\n return this.renderDates[0];\n };\n ViewBase.prototype.endDate = function () {\n return addDays(this.renderDates[this.renderDates.length - 1], 1);\n };\n ViewBase.prototype.getStartHour = function () {\n var startHour = this.parent.globalize.parseDate(this.parent.activeViewOptions.startHour, { skeleton: 'Hm' });\n if (isNullOrUndefined(startHour)) {\n startHour = new Date(2000, 0, 0, 0);\n }\n return startHour;\n };\n ViewBase.prototype.getEndHour = function () {\n var endHour = this.parent.globalize.parseDate(this.parent.activeViewOptions.endHour, { skeleton: 'Hm' });\n if (isNullOrUndefined(endHour)) {\n endHour = new Date(2000, 0, 0, 0);\n }\n return endHour;\n };\n ViewBase.prototype.isCurrentDate = function (date) {\n return date.setHours(0, 0, 0, 0) === new Date().setHours(0, 0, 0, 0);\n };\n ViewBase.prototype.isCurrentMonth = function (date) {\n return date.getFullYear() === new Date().getFullYear() && date.getMonth() === new Date().getMonth();\n };\n ViewBase.prototype.isWorkDay = function (date, workDays) {\n if (workDays === void 0) { workDays = this.parent.activeViewOptions.workDays; }\n if (workDays.indexOf(date.getDay()) >= 0) {\n return true;\n }\n return false;\n };\n ViewBase.prototype.isWorkHour = function (date, startHour, endHour, workDays) {\n if (isNullOrUndefined(startHour) || isNullOrUndefined(endHour)) {\n return false;\n }\n startHour.setMilliseconds(0);\n endHour.setMilliseconds(0);\n if (getDateInMs(date) < getDateInMs(startHour) || getDateInMs(date) >= getDateInMs(endHour) || !this.isWorkDay(date, workDays)) {\n return false;\n }\n return true;\n };\n ViewBase.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n // Due to same code for vertical and time line, week & work week views, if condition has used\n if (this.parent.currentView === 'Week' || this.parent.currentView === 'TimelineWeek') {\n var selectedDate = resetTime(this.parent.selectedDate);\n var start = getWeekFirstDate(selectedDate, this.parent.firstDayOfWeek);\n for (var i = 0, length_1 = WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_1; i++) {\n if (this.parent.activeViewOptions.showWeekend) {\n renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n }\n start = addDays(start, 1);\n }\n }\n else if (this.parent.currentView === 'WorkWeek' || this.parent.currentView === 'TimelineWorkWeek') {\n var start = getWeekFirstDate(resetTime(this.parent.selectedDate), this.parent.firstDayOfWeek);\n for (var i = 0, length_2 = WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_2; i++) {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n start = addDays(start, 1);\n }\n }\n else {\n for (var i = 0, length_3 = this.parent.activeViewOptions.interval; i < length_3; i++) {\n renderDates.push(addDays(resetTime(this.parent.selectedDate), i));\n }\n }\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\n };\n ViewBase.prototype.getNextPreviousDate = function (type) {\n if (this.parent.currentView === 'Day' || this.parent.currentView === 'TimelineDay') {\n var daysCount = (type === 'next') ? this.parent.activeViewOptions.interval : -(this.parent.activeViewOptions.interval);\n if (this.parent.activeViewOptions.showWeekend) {\n return addDays(this.parent.selectedDate, daysCount);\n }\n else {\n var date = addDays(this.parent.selectedDate, daysCount);\n while (!this.isWorkDay(date)) {\n date = addDays(date, daysCount);\n }\n return date;\n }\n }\n if (type === 'next') {\n return addDays(this.parent.selectedDate, WEEK_LENGTH * this.parent.activeViewOptions.interval);\n }\n else {\n return addDays(this.parent.selectedDate, -WEEK_LENGTH * this.parent.activeViewOptions.interval);\n }\n };\n ViewBase.prototype.getLabelText = function (view) {\n return this.parent.localeObj.getConstant(view) + ' of ' +\n this.parent.globalize.formatDate(this.parent.selectedDate, { skeleton: 'long' });\n };\n ViewBase.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive) {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n return this.formatDateRange(this.renderDates[0], this.renderDates[this.renderDates.length - 1]);\n };\n ViewBase.prototype.formatDateRange = function (startDate, endDate) {\n var globalize = this.parent.globalize;\n if (startDate === endDate) {\n endDate = null;\n }\n if (!isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {\n if (!endDate) {\n return globalize.formatDate(startDate, { format: this.parent.activeViewOptions.dateFormat });\n }\n return globalize.formatDate(startDate, { format: this.parent.activeViewOptions.dateFormat }) + ' - ' +\n globalize.formatDate(endDate, { format: this.parent.activeViewOptions.dateFormat });\n }\n var formattedStr;\n var longDateFormat;\n if (this.parent.locale === 'en' || this.parent.locale === 'en-US') {\n longDateFormat = getValue('dateFormats.long', getDefaultDateObject());\n }\n else {\n longDateFormat = getValue('main.' + '' + this.parent.locale + '.dates.calendars.gregorian.dateFormats.long', cldrData);\n }\n if (!endDate) {\n return globalize.formatDate(startDate, { format: longDateFormat });\n }\n var dateFormat = longDateFormat.trim().toLocaleLowerCase();\n if (dateFormat.substr(0, 1) === 'd') {\n if (startDate.getFullYear() === endDate.getFullYear()) {\n if (startDate.getMonth() === endDate.getMonth()) {\n formattedStr = globalize.formatDate(startDate, { format: 'dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMMM yyyy' });\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'dd MMM' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMM yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'dd MMM yyyy' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMM yyyy' });\n }\n }\n else if (dateFormat.substr(0, 1) === 'm') {\n if (startDate.getFullYear() === endDate.getFullYear()) {\n if (startDate.getMonth() === endDate.getMonth()) {\n formattedStr = globalize.formatDate(startDate, { format: 'MMMM dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd, yyyy' });\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'MMM dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'MMM dd, yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'MMM dd, yyyy' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'MMM dd, yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: longDateFormat }) + ' - ' +\n globalize.formatDate(endDate, { format: longDateFormat });\n }\n return formattedStr;\n };\n ViewBase.prototype.getMobileDateElement = function (date, className) {\n var wrap = createElement('div', {\n className: className,\n innerHTML: '
    ' + this.parent.globalize.formatDate(date, { format: 'd' }) + '
    ' +\n '
    ' + this.parent.globalize.formatDate(date, { format: 'E' }) + '
    '\n });\n return wrap;\n };\n ViewBase.prototype.setResourceHeaderContent = function (tdElement, tdData, className) {\n if (className === void 0) { className = 'e-text-ellipsis'; }\n if (this.parent.activeViewOptions.resourceHeaderTemplate) {\n var cntEle = void 0;\n var data = {\n resource: tdData.resource,\n resourceData: tdData.resourceData\n };\n cntEle = this.parent.getResourceHeaderTemplate()(data);\n if (cntEle && cntEle.length) {\n append([].slice.call(cntEle), tdElement);\n }\n }\n else {\n tdElement.appendChild(createElement('div', {\n className: className, innerHTML: tdData.resourceData[tdData.resource.textField]\n }));\n }\n };\n ViewBase.prototype.renderResourceMobileLayout = function () {\n this.parent.resourceBase.renderResourceHeader();\n this.parent.resourceBase.renderResourceTree();\n };\n return ViewBase;\n}());\nexport { ViewBase };\n","import { extend, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Work cell interactions\n */\nvar WorkCellInteraction = /** @class */ (function () {\n function WorkCellInteraction(parent) {\n this.parent = parent;\n }\n WorkCellInteraction.prototype.cellMouseDown = function (e) {\n if (this.isPreventAction(e)) {\n return;\n }\n this.parent.notify(event.cellMouseDown, { event: e });\n };\n WorkCellInteraction.prototype.cellClick = function (e) {\n if (this.isPreventAction(e)) {\n return;\n }\n var queryStr = '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' + cls.HEADER_CELLS_CLASS;\n var target = closest(e.target, queryStr);\n if (isNullOrUndefined(target)) {\n return;\n }\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n var navigateView = this.parent.getNavigateView();\n var sameView = this.parent.currentView === navigateView;\n if (isNullOrUndefined(navigateEle) || sameView ||\n isNullOrUndefined(this.parent.viewOptions[navigateView.charAt(0).toLowerCase() + navigateView.slice(1)])) {\n if (this.parent.activeViewOptions.readonly) {\n this.parent.quickPopup.quickPopupHide();\n return;\n }\n var isWorkCell = target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS);\n if (isWorkCell && e.shiftKey && e.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.onMouseSelection(e);\n return;\n }\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellClick' });\n this.parent.trigger(event.cellClick, args);\n if (args.cancel) {\n return;\n }\n if (isWorkCell) {\n this.parent.selectCell(target);\n }\n this.parent.notify(event.cellClick, args);\n }\n else {\n var date = this.parent.getDateFromElement(target);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView(this.parent.getNavigateView());\n }\n }\n };\n WorkCellInteraction.prototype.cellDblClick = function (e) {\n if (this.parent.activeViewOptions.readonly || this.isPreventAction(e)) {\n return;\n }\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellDoubleClick' });\n this.parent.trigger(event.cellDoubleClick, args);\n if (args.cancel) {\n return;\n }\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n WorkCellInteraction.prototype.isPreventAction = function (e) {\n if (closest(e.target, '.' + cls.NAVIGATE_CLASS)) {\n return false;\n }\n if (closest(e.target, '.' + cls.APPOINTMENT_WRAPPER_CLASS) &&\n !closest(e.target, '.' + cls.MORE_INDICATOR_CLASS)) {\n return true;\n }\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS + ',.' + cls.RESOURCE_GROUP_CELLS_CLASS);\n if (!isNullOrUndefined(target)) {\n return true;\n }\n target = closest(e.target, '.' + cls.HEADER_CELLS_CLASS);\n if (this.parent.activeView.isTimelineView() && !isNullOrUndefined(target)) {\n return true;\n }\n return false;\n };\n return WorkCellInteraction;\n}());\nexport { WorkCellInteraction };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { append, createElement, extend, EventHandler, prepend, Animation, formatUnit } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { EventBase } from './event-base';\nimport * as util from '../base/util';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Vertical view appointment rendering\n */\nvar VerticalEvent = /** @class */ (function (_super) {\n __extends(VerticalEvent, _super);\n /**\n * Constructor for vertical view\n */\n function VerticalEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dateRender = [];\n _this.renderedEvents = [];\n _this.renderedAllDayEvents = [];\n _this.overlapEvents = [];\n _this.moreEvents = [];\n _this.overlapList = [];\n _this.allDayEvents = [];\n _this.slotCount = _this.parent.activeViewOptions.timeScale.slotCount;\n _this.interval = _this.parent.activeViewOptions.timeScale.interval;\n _this.allDayLevel = 0;\n _this.startHour = _this.parent.activeView.getStartHour();\n _this.endHour = _this.parent.activeView.getEndHour();\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.animation = new Animation({ progress: _this.animationUiUpdate.bind(_this) });\n _this.addEventListener();\n return _this;\n }\n VerticalEvent.prototype.renderAppointments = function () {\n var _this = this;\n var wrapperElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS + ',.' + cls.ROW_COUNT_WRAPPER_CLASS));\n wrapperElements.forEach(function (element) { return remove(element); });\n this.allDayElement = [].slice.call(this.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS));\n this.setAllDayRowHeight(0);\n if (this.parent.eventsProcessed.length === 0) {\n return;\n }\n var expandCollapse = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n EventHandler.remove(expandCollapse, 'click', this.rowExpandCollapse);\n EventHandler.add(expandCollapse, 'click', this.rowExpandCollapse, this);\n this.renderedEvents = [];\n this.renderedAllDayEvents = [];\n this.resources = (this.parent.activeViewOptions.group.resources.length > 0) ? this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel : [];\n this.cellHeight = this.element.querySelector('.' + cls.WORK_CELLS_CLASS).offsetHeight;\n this.dateRender[0] = this.parent.activeView.renderDates;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.resources.forEach(function (resource, index) { return _this.dateRender[index] = resource.renderDates; });\n }\n this.renderEvents('normalEvents');\n if (this.allDayEvents.length > 0) {\n this.allDayEvents = this.allDayEvents.filter(function (item, index, arr) {\n return index === arr.map(function (item) { return item.Guid; }).indexOf(item.Guid);\n });\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n this.slots.push(this.parent.activeView.renderDates.map(function (date) { return +date; }));\n this.renderEvents('allDayEvents');\n }\n this.parent.notify(events.contentReady, {});\n addClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n };\n VerticalEvent.prototype.renderEvents = function (eventType) {\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n var eventCollection = (eventType === 'allDayEvents') ? this.sortByDateTime(this.allDayEvents) : undefined;\n var resources = this.getResourceList();\n var dateCount = 0;\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\n var resource = resources_1[_i];\n var renderDates = this.dateRender[resource];\n for (var day = 0, length_1 = renderDates.length; day < length_1; day++) {\n this.renderedEvents = [];\n var startDate = new Date(renderDates[day].getTime());\n var endDate = util.addDays(renderDates[day], 1);\n var filterEvents = this.filterEvents(startDate, endDate, eventCollection, this.resources[resource]);\n for (var _a = 0, filterEvents_1 = filterEvents; _a < filterEvents_1.length; _a++) {\n var event_1 = filterEvents_1[_a];\n if (this.parent.resourceBase) {\n this.setValues(event_1, resource);\n }\n if (eventType === 'allDayEvents') {\n this.renderAllDayEvents(event_1, day, resource, dateCount);\n }\n else {\n if (this.isAllDayAppointment(event_1)) {\n this.allDayEvents.push(extend({}, event_1, null, true));\n }\n else {\n this.renderNormalEvents(event_1, day, resource, dateCount);\n }\n }\n this.cssClass = null;\n this.groupOrder = null;\n }\n dateCount += 1;\n }\n }\n };\n VerticalEvent.prototype.setValues = function (event, resourceIndex) {\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.cssClass = this.resources[resourceIndex].cssClass;\n this.groupOrder = this.resources[resourceIndex].groupOrder;\n }\n else {\n this.cssClass = this.parent.resourceBase.getCssClass(event);\n }\n };\n VerticalEvent.prototype.getResourceList = function () {\n var resources = Array.apply(null, {\n length: (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) ?\n this.resources.length : 1\n }).map(function (value, index) { return index; });\n return resources;\n };\n VerticalEvent.prototype.createAppointmentElement = function (record, isAllDay, data, resource) {\n var fieldMapping = this.parent.eventFields;\n var recordSubject = (record[fieldMapping.subject] || this.parent.eventSettings.fields.subject.default);\n var appointmentWrapper = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-id': 'Appointment_' + record[fieldMapping.id],\n 'data-guid': record.Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-readonly': 'false',\n 'aria-selected': 'false',\n 'aria-grabbed': 'true',\n 'aria-label': recordSubject\n }\n });\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceIndex = this.parent.isAdaptive ? this.parent.uiStateValues.groupIndex : resource;\n appointmentWrapper.setAttribute('data-group-index', resourceIndex.toString());\n }\n var templateElement;\n var eventData = data;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateElement = this.parent.getAppointmentTemplate()(record);\n }\n else {\n var appointmentSubject = createElement('div', { className: cls.SUBJECT_CLASS, innerHTML: recordSubject });\n if (isAllDay) {\n if (record[fieldMapping.isAllDay]) {\n templateElement = [appointmentSubject];\n }\n else {\n templateElement = [];\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(record[fieldMapping.startTime])\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(record[fieldMapping.endTime]),\n });\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n else {\n var timeStr = this.parent.getTimeString(record[fieldMapping.startTime]) + ' - ' +\n this.parent.getTimeString(record[fieldMapping.endTime]);\n var appointmentTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: timeStr,\n });\n var appointmentLocation = createElement('div', {\n className: cls.LOCATION_CLASS,\n innerHTML: (record[fieldMapping.location] || this.parent.eventSettings.fields.location.default || '')\n });\n templateElement = [appointmentSubject, appointmentTime, appointmentLocation];\n }\n }\n append(templateElement, appointmentDetails);\n if (!this.parent.isAdaptive && !isNullOrUndefined(record[fieldMapping.recurrenceRule])) {\n var iconClass = (record[fieldMapping.id] === record[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n var recurrenceIcon = createElement('div', { className: cls.ICON + ' ' + iconClass });\n isAllDay ? appointmentDetails.appendChild(recurrenceIcon) : appointmentWrapper.appendChild(recurrenceIcon);\n }\n this.renderSpannedIcon(isAllDay ? appointmentDetails : appointmentWrapper, eventData);\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n this.applyResourceColor(appointmentWrapper, record, 'backgroundColor', this.groupOrder);\n this.renderResizeHandler(appointmentWrapper, eventData);\n return appointmentWrapper;\n };\n VerticalEvent.prototype.createMoreIndicator = function (allDayRow, count, currentDay) {\n var index = currentDay + count;\n var countWrapper = allDayRow[index];\n if (countWrapper.childElementCount <= 0) {\n var innerCountWrap = createElement('div', {\n className: cls.ROW_COUNT_WRAPPER_CLASS,\n id: cls.ROW_COUNT_WRAPPER_CLASS + '-' + index.toString()\n });\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n attrs: { 'tabindex': '0', 'data-index': index.toString(), 'data-count': '1' },\n innerHTML: '+1 ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))\n });\n innerCountWrap.appendChild(moreIndicatorElement);\n countWrapper.appendChild(innerCountWrap);\n EventHandler.add(moreIndicatorElement, 'click', this.rowExpandCollapse, this);\n }\n else {\n var countCell = countWrapper.querySelector('.' + cls.MORE_INDICATOR_CLASS);\n var moreCount = parseInt(countCell.getAttribute('data-count'), 10) + 1;\n countCell.setAttribute('data-count', moreCount.toString());\n countCell.innerHTML = countCell.innerHTML.replace(/[0-9]/g, moreCount.toString());\n }\n };\n VerticalEvent.prototype.renderSpannedIcon = function (element, spanEvent) {\n var iconElement = createElement('div', { className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON });\n if (spanEvent.isLeft) {\n var iconLeft = iconElement.cloneNode();\n addClass([iconLeft], cls.EVENT_ICON_LEFT_CLASS);\n prepend([iconLeft], element);\n }\n if (spanEvent.isRight) {\n var iconRight = iconElement.cloneNode();\n addClass([iconRight], cls.EVENT_ICON_RIGHT_CLASS);\n append([iconRight], element);\n }\n if (spanEvent.isTop) {\n var iconTop = iconElement.cloneNode();\n addClass([iconTop], cls.EVENT_ICON_UP_CLASS);\n prepend([iconTop], element);\n }\n if (spanEvent.isBottom) {\n var iconBottom = iconElement.cloneNode();\n addClass([iconBottom], cls.EVENT_ICON_DOWN_CLASS);\n append([iconBottom], element);\n }\n };\n VerticalEvent.prototype.isSpannedEvent = function (record, day, resource) {\n var currentDate = util.resetTime(this.dateRender[resource][day]);\n var fieldMapping = this.parent.eventFields;\n var startEndHours = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var event = extend({}, record, null, true);\n event.isSpanned = { isBottom: false, isTop: false };\n if (record[fieldMapping.startTime].getTime() < startEndHours.startHour.getTime()) {\n event[fieldMapping.startTime] = startEndHours.startHour;\n event.isSpanned.isTop = true;\n }\n if (record[fieldMapping.endTime].getTime() > startEndHours.endHour.getTime()) {\n event[fieldMapping.endTime] = startEndHours.endHour;\n event.isSpanned.isBottom = true;\n }\n return event;\n };\n VerticalEvent.prototype.renderAllDayEvents = function (eventObj, dayIndex, resource, dayCount) {\n var _this = this;\n var currentDates = this.dateRender[resource];\n if (this.parent.activeViewOptions.group.byDate) {\n this.slots[0] = [this.dateRender[resource][dayIndex].getTime()];\n currentDates = [this.dateRender[resource][dayIndex]];\n }\n var record = this.splitEvent(eventObj, currentDates)[0];\n var allDayRowCell = this.element.querySelector('.' + cls.ALLDAY_CELLS_CLASS + ':first-child');\n var cellTop = allDayRowCell.offsetTop;\n var eStart = new Date(record[this.parent.eventFields.startTime].getTime());\n var eEnd = new Date(record[this.parent.eventFields.endTime].getTime());\n var appWidth = 0;\n var appLeft = '0%';\n var topValue = 1;\n var appLevel = 0;\n var isDateRange = currentDates[0].getTime() <= eStart.getTime() &&\n util.addDays(currentDates.slice(-1)[0], 1).getTime() >= eStart.getTime();\n if (eStart <= eEnd && isDateRange) {\n var isAlreadyRendered = [];\n if (this.renderedAllDayEvents[resource]) {\n isAlreadyRendered = this.renderedAllDayEvents[resource].filter(function (event) {\n return event.Guid === eventObj.Guid;\n });\n if (this.parent.activeViewOptions.group.byDate) {\n isAlreadyRendered = isAlreadyRendered.filter(function (event) {\n return event[_this.parent.eventFields.startTime] >= currentDates[dayIndex] &&\n event[_this.parent.eventFields.endTime] <= util.addDays(new Date(+currentDates[dayIndex]), 1);\n });\n }\n }\n if (isAlreadyRendered.length === 0) {\n var allDayDifference = record.data.count;\n var allDayIndex = this.getOverlapIndex(record, dayIndex, true, resource);\n record.Index = allDayIndex;\n this.allDayLevel = (this.allDayLevel < allDayIndex) ? allDayIndex : this.allDayLevel;\n var widthAdjustment = record.data.isRight ? 0 :\n this.parent.currentView === 'Day' ? 4 : 7;\n if (allDayDifference >= 0) {\n appWidth = (allDayDifference * 100) - widthAdjustment;\n }\n if (isNullOrUndefined(this.renderedAllDayEvents[resource])) {\n this.renderedAllDayEvents[resource] = [];\n }\n this.renderedAllDayEvents[resource].push(extend({}, record, null, true));\n var allDayRow = [].slice.call(this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).children);\n var wIndex = this.parent.activeViewOptions.group.byDate ? (this.resources.length * dayIndex) + resource : dayCount;\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS +\n ':nth-child(' + (wIndex + 1) + ')');\n var appointmentElement = this.createAppointmentElement(eventObj, true, record.data, resource);\n addClass([appointmentElement], cls.ALLDAY_APPOINTMENT_CLASS);\n var args = { data: eventObj, element: appointmentElement, cancel: false };\n this.parent.trigger(events.eventRendered, args);\n if (args.cancel) {\n return;\n }\n eventWrapper.appendChild(appointmentElement);\n var appHeight = appointmentElement.offsetHeight;\n topValue += (allDayIndex === 0 ? cellTop : (cellTop + (allDayIndex * appHeight))) + 1;\n setStyleAttribute(appointmentElement, { 'width': appWidth + '%', 'top': topValue + 'px' });\n if (allDayIndex > 1) {\n this.moreEvents.push(appointmentElement);\n for (var count = 0, length_2 = allDayDifference; count < length_2; count++) {\n this.createMoreIndicator(allDayRow, count, wIndex);\n }\n }\n allDayRowCell.setAttribute('data-count', this.allDayLevel.toString());\n var allDayRowHeight = ((!this.parent.uiStateValues.expand && this.allDayLevel > 2) ?\n (3 * appHeight) : ((this.allDayLevel + 1) * appHeight)) + 4;\n this.setAllDayRowHeight(allDayRowHeight);\n this.addOrRemoveClass();\n this.wireAppointmentEvents(appointmentElement, true);\n }\n }\n };\n VerticalEvent.prototype.renderNormalEvents = function (eventObj, dayIndex, resource, dayCount) {\n var record = this.isSpannedEvent(eventObj, dayIndex, resource);\n var eStart = record[this.fields.startTime];\n var eEnd = record[this.fields.endTime];\n var appWidth = '0%';\n var appLeft = '0%';\n var topValue = 0;\n var currentDate = util.resetTime(new Date(this.dateRender[resource][dayIndex].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var isHourRange = eEnd.getTime() > schedule.startHour.getTime() && eStart.getTime() < schedule.endHour.getTime();\n var isSameRange = schedule.startHour.getTime() <= eStart.getTime() &&\n eventObj[this.fields.startTime].getTime() >= schedule.startHour.getTime() &&\n eventObj[this.fields.endTime].getTime() < schedule.endHour.getTime() && eStart.getTime() === eEnd.getTime();\n if (eStart <= eEnd && (isHourRange || isSameRange)) {\n var appHeight = (eEnd.getTime() - eStart.getTime()) / (60 * 1000) * (this.cellHeight * this.slotCount) / this.interval;\n appHeight = (appHeight < this.cellHeight) ? this.cellHeight : appHeight;\n if (eStart.getTime() > schedule.startHour.getTime()) {\n topValue = this.getTopValue(eStart, dayIndex, resource);\n }\n var appIndex = this.getOverlapIndex(record, dayIndex, false, resource);\n record.Index = appIndex;\n this.overlapList.push(record);\n if (this.overlapList.length > 1) {\n if (isNullOrUndefined(this.overlapEvents[appIndex])) {\n this.overlapEvents[appIndex] = [];\n }\n this.overlapEvents[appIndex].push(record);\n }\n else {\n this.overlapEvents = [];\n this.overlapEvents.push([record]);\n }\n var width = this.parent.currentView === 'Day' ? 97 : 94;\n appWidth = ((width - this.overlapEvents.length) / this.overlapEvents.length) + '%';\n var argsData = {\n index: appIndex, left: appLeft, width: appWidth,\n day: dayIndex, dayIndex: dayCount, record: record, resource: resource\n };\n var tempData = this.adjustOverlapElements(argsData);\n appWidth = (tempData.appWidth);\n if (isNullOrUndefined(this.renderedEvents[resource])) {\n this.renderedEvents[resource] = [];\n }\n this.renderedEvents[resource].push(extend({}, record, null, true));\n var appointmentWrap = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_CLASS));\n var appointmentElement = this.createAppointmentElement(eventObj, false, record.isSpanned, resource);\n setStyleAttribute(appointmentElement, { 'width': tempData.appWidth, 'height': appHeight + 'px', 'top': topValue + 'px' });\n var iconHeight = appointmentElement.querySelectorAll('.' + cls.EVENT_INDICATOR_CLASS).length * 15;\n var maxHeight = appHeight - 40 - iconHeight;\n var subjectElement = appointmentElement.querySelector('.' + cls.SUBJECT_CLASS);\n if (!this.parent.isAdaptive && subjectElement) {\n subjectElement.style.maxHeight = formatUnit(maxHeight);\n }\n if (this.parent.enableRtl) {\n setStyleAttribute(appointmentElement, { 'right': tempData.appLeft });\n }\n else {\n setStyleAttribute(appointmentElement, { 'left': tempData.appLeft });\n }\n var index = this.parent.activeViewOptions.group.byDate ? (this.resources.length * dayIndex) + resource : dayCount;\n var args = { data: eventObj, element: appointmentElement, cancel: false };\n this.parent.trigger(events.eventRendered, args);\n if (args.cancel) {\n return;\n }\n appointmentWrap[index].appendChild(appointmentElement);\n this.wireAppointmentEvents(appointmentElement, false);\n }\n };\n VerticalEvent.prototype.getTopValue = function (date, day, resource) {\n var startEndHours = util.getStartEndHours(util.resetTime(this.dateRender[resource][day]), this.startHour, this.endHour);\n var startHour = startEndHours.startHour;\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (diffInMinutes * this.cellHeight * this.slotCount) / this.interval;\n };\n VerticalEvent.prototype.getOverlapIndex = function (record, day, isAllDay, resource) {\n var _this = this;\n var fieldMapping = this.parent.eventFields;\n var predicate;\n var eventsList = [];\n var appIndex = -1;\n this.overlapEvents = [];\n if (isAllDay) {\n if (!isNullOrUndefined(this.renderedAllDayEvents[resource])) {\n var date_1 = util.resetTime(new Date(this.dateRender[resource][day].getTime()));\n eventsList = this.renderedAllDayEvents[resource].filter(function (app) {\n return util.resetTime(app[fieldMapping.startTime]).getTime() <= date_1.getTime() &&\n util.resetTime(app[fieldMapping.endTime]).getTime() >= date_1.getTime();\n });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n eventsList = this.filterEventsByResource(this.resources[resource], eventsList);\n }\n }\n }\n else {\n var appointmentList_1 = !isNullOrUndefined(this.renderedEvents[resource]) ? this.renderedEvents[resource] : [];\n var appointment_1 = [];\n predicate = new Predicate(fieldMapping.endTime, 'greaterthan', record[fieldMapping.startTime]).\n and(new Predicate(fieldMapping.startTime, 'lessthan', record[fieldMapping.endTime]));\n this.overlapList = new DataManager({ json: appointmentList_1 }).executeLocal(new Query().where(predicate));\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.overlapList = this.filterEventsByResource(this.resources[resource], this.overlapList);\n }\n this.overlapList.forEach(function (obj) {\n predicate = new Predicate(fieldMapping.endTime, 'greaterthanorequal', obj[fieldMapping.startTime]).\n and(new Predicate(fieldMapping.startTime, 'lessthanorequal', obj[fieldMapping.endTime]));\n var filterList = new DataManager({ json: appointmentList_1 }).executeLocal(new Query().where(predicate));\n if (_this.parent.activeViewOptions.group.resources.length > 0) {\n filterList = _this.filterEventsByResource(_this.resources[resource], filterList);\n }\n var collection = _this.overlapList.filter(function (val) { return filterList.indexOf(val) === -1; });\n return appointment_1.concat(collection);\n });\n this.overlapList = this.overlapList.concat(appointment_1);\n eventsList = this.overlapList;\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_2 = eventsList_1[_i];\n var record_1 = event_2;\n var index = record_1.Index;\n (isNullOrUndefined(this.overlapEvents[index])) ? this.overlapEvents[index] = [event_2] :\n this.overlapEvents[index].push(event_2);\n }\n }\n if (eventsList.length > 0) {\n var appLevel = eventsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n VerticalEvent.prototype.adjustOverlapElements = function (args) {\n var data = { appWidth: args.width, appLeft: args.left };\n for (var i = 0, length1 = this.overlapEvents.length; i < length1; i++) {\n if (!isNullOrUndefined(this.overlapEvents[i])) {\n for (var j = 0, length2 = this.overlapEvents[i].length; j < length2; j++) {\n var dayCount = this.parent.activeViewOptions.group.byDate ? (this.resources.length * args.day) + args.resource :\n args.dayIndex;\n var element = this.element.querySelector('#e-appointment-wrapper-' + dayCount);\n if (element.childElementCount > 0) {\n var eleGuid = this.overlapEvents[i][j].Guid;\n if (element.querySelectorAll('div[data-guid=\"' + eleGuid + '\"]').length > 0 && eleGuid !== args.record.Guid) {\n var apps = element.querySelector('div[data-guid=\"' + eleGuid + '\"]');\n if (parseFloat(args.width) <= parseFloat(apps.style.width)) {\n (this.parent.enableRtl) ? apps.style.right = ((parseFloat(args.width) + 1) * i) + '%' :\n apps.style.left = ((parseFloat(args.width) + 1) * i) + '%';\n apps.style.width = ((parseFloat(args.width))) + '%';\n data.appWidth = apps.style.width;\n }\n }\n else {\n var appWidth = args.width;\n if (isNullOrUndefined(this.overlapEvents[i - 1])) {\n var width = this.parent.currentView === 'Day' ? 97 : 94;\n appWidth = ((width - this.overlapEvents.length) / this.overlapEvents.length) + '%';\n }\n data.appWidth = appWidth;\n data.appLeft = ((parseInt(appWidth, 0) + 1) * args.index) + '%';\n }\n }\n }\n }\n }\n return data;\n };\n VerticalEvent.prototype.setAllDayRowHeight = function (height) {\n for (var _i = 0, _a = this.allDayElement; _i < _a.length; _i++) {\n var element = _a[_i];\n element.style.height = (height / 12) + 'em';\n }\n this.animation.animate(this.allDayElement[0]);\n };\n VerticalEvent.prototype.addOrRemoveClass = function () {\n var _this = this;\n this.moreEvents.filter(function (element) {\n if (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) {\n addClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '-1');\n }\n else {\n removeClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '0');\n }\n });\n var moreEventCount = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n if (this.parent.uiStateValues.expand) {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n }\n else {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n }\n (this.allDayLevel > 2) ? removeClass([moreEventCount], cls.DISABLE_CLASS) : addClass([moreEventCount], cls.DISABLE_CLASS);\n var countCell = [].slice.call(this.element.querySelectorAll('.' + cls.ROW_COUNT_WRAPPER_CLASS));\n countCell.filter(function (element) {\n (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) ? removeClass([element], cls.DISABLE_CLASS) :\n addClass([element], cls.DISABLE_CLASS);\n });\n };\n VerticalEvent.prototype.getEventHeight = function () {\n var eventElement = createElement('div', { className: cls.APPOINTMENT_CLASS, styles: 'visibility:hidden' });\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS + ':first-child');\n eventWrapper.appendChild(eventElement);\n var height = eventElement.offsetHeight;\n eventElement.remove();\n return height;\n };\n VerticalEvent.prototype.rowExpandCollapse = function () {\n var target = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n this.parent.uiStateValues.expand = target.classList.contains(cls.APPOINTMENT_ROW_EXPAND_CLASS);\n var rowHeight;\n if (this.parent.uiStateValues.expand) {\n target.setAttribute('title', 'Collapse-all-day-section');\n target.setAttribute('aria-label', 'Collapse section');\n rowHeight = ((this.allDayLevel + 1) * this.getEventHeight()) + 4;\n }\n else {\n target.setAttribute('title', 'Expand-all-day-section');\n target.setAttribute('aria-label', 'Expand section');\n rowHeight = (3 * this.getEventHeight()) + 4;\n }\n this.setAllDayRowHeight(rowHeight);\n this.addOrRemoveClass();\n this.animation.animate(target);\n };\n VerticalEvent.prototype.animationUiUpdate = function () {\n this.parent.notify(events.contentReady, {});\n };\n return VerticalEvent;\n}(EventBase));\nexport { VerticalEvent };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { append, prepend, createElement, extend, EventHandler, closest, addClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { EventBase } from './event-base';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_GAP = 0;\n/**\n * Month view events render\n */\nvar MonthEvent = /** @class */ (function (_super) {\n __extends(MonthEvent, _super);\n /**\n * Constructor for month events\n */\n function MonthEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.renderedEvents = [];\n _this.moreIndicatorHeight = 19;\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.addEventListener();\n return _this;\n }\n MonthEvent.prototype.renderAppointments = function () {\n var appointmentWrapper = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_CLASS));\n for (var _i = 0, appointmentWrapper_1 = appointmentWrapper; _i < appointmentWrapper_1.length; _i++) {\n var wrap = appointmentWrapper_1[_i];\n remove(wrap);\n }\n this.eventHeight = util.getElementHeightFromClass(this.element, cls.APPOINTMENT_CLASS);\n if (this.parent.currentView === 'Month') {\n this.monthHeaderHeight = util.getOuterHeight(this.element.querySelector('.' + cls.DATE_HEADER_CLASS));\n }\n else {\n this.monthHeaderHeight = 0;\n }\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.renderResourceEvents();\n }\n else {\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays);\n }\n };\n MonthEvent.prototype.renderEventsHandler = function (dateRender, workDays, resData) {\n this.renderedEvents = [];\n var eventsList;\n var resIndex = 0;\n if (resData) {\n resIndex = resData.groupIndex;\n this.cssClass = resData.cssClass;\n this.groupOrder = resData.groupOrder;\n eventsList = this.parent.eventBase.filterEventsByResource(resData);\n this.workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS + '[data-group-index=\"' + resIndex + '\"]'));\n }\n else {\n eventsList = this.parent.eventsProcessed;\n this.workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n }\n this.sortByDateTime(eventsList);\n this.cellWidth = this.workCells.slice(-1)[0].offsetWidth;\n this.cellHeight = this.workCells.slice(-1)[0].offsetHeight;\n this.dateRender = dateRender;\n this.getSlotDates(workDays);\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_1 = eventsList_1[_i];\n if (this.parent.resourceBase && !resData) {\n this.cssClass = this.parent.resourceBase.getCssClass(event_1);\n }\n var splittedEvents = this.splitEvent(event_1, this.dateRender);\n for (var _a = 0, splittedEvents_1 = splittedEvents; _a < splittedEvents_1.length; _a++) {\n var event_2 = splittedEvents_1[_a];\n this.updateIndicatorIcon(event_2);\n this.renderEvents(event_2, resIndex);\n }\n }\n this.cssClass = null;\n this.groupOrder = null;\n };\n MonthEvent.prototype.updateIndicatorIcon = function (event) {\n if (this.parent.currentView.indexOf('Timeline') === -1 || this.parent.currentView === 'TimelineMonth'\n || event[this.fields.isAllDay]) {\n return;\n }\n var cloneData = event.data;\n var startHour = util.getStartEndHours(event[this.fields.startTime], this.parent.activeView.getStartHour(), this.parent.activeView.getEndHour());\n var endHour = util.getStartEndHours(event[this.fields.endTime], this.parent.activeView.getStartHour(), this.parent.activeView.getEndHour());\n cloneData.isLeft = cloneData.isLeft || cloneData[this.fields.startTime].getTime() < startHour.startHour.getTime();\n cloneData.isRight = cloneData.isRight || cloneData[this.fields.endTime].getTime() > endHour.endHour.getTime();\n };\n MonthEvent.prototype.renderResourceEvents = function () {\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel;\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\n var slotData = resources_1[_i];\n this.renderEventsHandler(slotData.renderDates, slotData.workDays, slotData);\n }\n };\n MonthEvent.prototype.getSlotDates = function (workDays) {\n this.slots = [];\n var dates = this.dateRender.map(function (date) { return +date; });\n var noOfDays = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : workDays.length;\n while (dates.length > 0) {\n this.slots.push(dates.splice(0, noOfDays));\n }\n };\n MonthEvent.prototype.createAppointmentElement = function (record, resIndex) {\n var eventSubject = (record[this.fields.subject] || this.parent.eventSettings.fields.subject.default);\n var appointmentWrapper = createElement('div', {\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-id': 'Appointment_' + record[this.fields.id],\n 'data-guid': record.Guid, 'role': 'button', 'tabindex': '0',\n 'aria-readonly': 'false', 'aria-selected': 'false', 'aria-grabbed': 'true',\n 'aria-label': eventSubject\n }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n appointmentWrapper.setAttribute('data-group-index', resIndex.toString());\n }\n var templateElement;\n var eventData = record.data;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateElement = this.parent.getAppointmentTemplate()(record);\n }\n else {\n var eventLocation = (record[this.fields.location] || this.parent.eventSettings.fields.location.default || '');\n var appointmentSubject = createElement('div', {\n className: cls.SUBJECT_CLASS,\n innerHTML: (eventSubject + (eventLocation ? '; ' + eventLocation : ''))\n });\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventData[this.fields.startTime])\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventData[this.fields.endTime])\n });\n if (this.parent.currentView === 'Month') {\n if (record[this.fields.isAllDay]) {\n templateElement = [appointmentSubject];\n addClass([appointmentSubject], 'e-text-center');\n }\n else if (eventData.count <= 1 && !eventData.isLeft && !eventData.isRight) {\n templateElement = [appointmentStartTime, appointmentSubject];\n }\n else {\n templateElement = [];\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n else {\n var innerElement = void 0;\n if (record[this.fields.isAllDay]) {\n var allDayString = createElement('div', {\n className: cls.APPOINTMENT_TIME, innerHTML: this.parent.localeObj.getConstant('allDay')\n });\n innerElement = [appointmentSubject, allDayString];\n }\n else {\n var timeString = this.parent.getTimeString(eventData[this.fields.startTime])\n + ' - ' + this.parent.getTimeString(eventData[this.fields.endTime]);\n var appTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''), innerHTML: timeString,\n });\n var appLocation = createElement('div', { className: cls.LOCATION_CLASS, innerHTML: eventLocation });\n innerElement = [appointmentSubject, appTime, appLocation];\n }\n var wrap = createElement('div', { className: 'e-inner-wrap' });\n append(innerElement, wrap);\n templateElement = [wrap];\n }\n }\n append([].slice.call(templateElement), appointmentDetails);\n this.appendEventIcons(record, appointmentDetails);\n this.renderResizeHandler(appointmentWrapper, record.data);\n return appointmentWrapper;\n };\n MonthEvent.prototype.appendEventIcons = function (record, appointmentDetails) {\n var eventData = record.data;\n if (!isNullOrUndefined(record[this.fields.recurrenceRule])) {\n var iconClass = (record[this.fields.id] === record[this.fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentDetails.appendChild(createElement('div', {\n className: cls.ICON + ' ' + iconClass + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : '')\n }));\n }\n if (eventData.isLeft) {\n var iconLeft = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_LEFT_CLASS\n });\n prepend([iconLeft], appointmentDetails);\n }\n if (eventData.isRight) {\n var iconRight = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_RIGHT_CLASS\n });\n append([iconRight], appointmentDetails);\n }\n };\n MonthEvent.prototype.renderEvents = function (event, resIndex) {\n var startTime = event[this.fields.startTime];\n var endTime = event[this.fields.endTime];\n var day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(startTime));\n if (day < 0) {\n return;\n }\n var overlapCount = this.getIndex(startTime);\n event.Index = overlapCount;\n var appHeight = this.eventHeight;\n this.renderedEvents.push(extend({}, event, null, true));\n var diffInDays = event.data.count;\n if (startTime.getTime() <= endTime.getTime()) {\n var appWidth = (diffInDays * this.cellWidth) - 3;\n var cellTd = this.workCells[day];\n var appTop = (overlapCount * (appHeight + EVENT_GAP));\n if (this.cellHeight > this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight) {\n var appointmentElement = this.createAppointmentElement(event, resIndex);\n this.applyResourceColor(appointmentElement, event, 'backgroundColor', this.groupOrder);\n this.wireAppointmentEvents(appointmentElement);\n setStyleAttribute(appointmentElement, { 'width': appWidth + 'px', 'top': appTop + 'px' });\n this.renderEventElement(event, appointmentElement, cellTd);\n }\n else {\n for (var i = 0; i < diffInDays; i++) {\n var cellTd_1 = this.workCells[day + i];\n if (cellTd_1 && isNullOrUndefined(cellTd_1.querySelector('.' + cls.MORE_INDICATOR_CLASS))) {\n var startDate = new Date(this.dateRender[day + i].getTime());\n var endDate = util.addDays(this.dateRender[day + i], 1);\n var groupIndex = cellTd_1.getAttribute('data-group-index');\n var filterEvents = this.getFilteredEvents(startDate, endDate, groupIndex);\n var appArea = this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight;\n var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));\n var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);\n var moreIndicatorElement = this.getMoreIndicatorElement(count, startDate, endDate);\n if (!isNullOrUndefined(groupIndex)) {\n moreIndicatorElement.setAttribute('data-group-index', groupIndex);\n }\n moreIndicatorElement.style.top = appArea + 'px';\n moreIndicatorElement.style.width = cellTd_1.offsetWidth - 2 + 'px';\n this.renderElement(cellTd_1, moreIndicatorElement);\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n }\n }\n }\n };\n MonthEvent.prototype.getFilteredEvents = function (startDate, endDate, groupIndex) {\n var filteredEvents;\n if (isNullOrUndefined(groupIndex)) {\n filteredEvents = this.filterEvents(startDate, endDate);\n }\n else {\n var data = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)];\n filteredEvents = this.filterEvents(startDate, endDate, undefined, data);\n }\n return filteredEvents;\n };\n MonthEvent.prototype.getOverlapEvents = function (date, appointments) {\n var appointmentsList = [];\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(date).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(date).getTime())) {\n appointmentsList.push(app);\n }\n }\n return appointmentsList;\n };\n MonthEvent.prototype.getIndex = function (date) {\n var appIndex = -1;\n var appointments = this.renderedEvents;\n if (appointments.length > 0) {\n var appointmentsList = this.getOverlapEvents(date, appointments);\n var appLevel = appointmentsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n MonthEvent.prototype.moreIndicatorClick = function (event) {\n var target = closest(event.target, '.' + cls.MORE_INDICATOR_CLASS);\n var startDate = new Date(parseInt(target.getAttribute('data-start-date'), 10));\n if (!isNullOrUndefined(startDate) && this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: startDate }, true);\n this.parent.changeView(this.parent.getNavigateView());\n }\n else {\n var endDate = new Date(parseInt(target.getAttribute('data-end-date'), 10));\n var groupIndex = target.getAttribute('data-group-index');\n var filteredEvents = this.getFilteredEvents(startDate, endDate, groupIndex);\n var moreEventArgs = { date: startDate, event: filteredEvents, element: event.target };\n this.parent.quickPopup.moreEventClick(moreEventArgs, endDate, groupIndex);\n }\n };\n MonthEvent.prototype.renderEventElement = function (event, appointmentElement, cellTd) {\n var args = { data: event, element: appointmentElement, cancel: false };\n this.parent.trigger(events.eventRendered, args);\n if (args.cancel) {\n this.renderedEvents.pop();\n return;\n }\n this.renderElement(cellTd, appointmentElement);\n };\n MonthEvent.prototype.renderElement = function (cellTd, element) {\n if (cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(element);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(element);\n cellTd.appendChild(wrapper);\n }\n };\n MonthEvent.prototype.getMoreIndicatorElement = function (count, startDate, endDate) {\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n innerHTML: '+' + count + ' ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),\n attrs: {\n 'tabindex': '0',\n 'data-start-date': startDate.getTime().toString(),\n 'data-end-date': endDate.getTime().toString()\n }\n });\n return moreIndicatorElement;\n };\n return MonthEvent;\n}(EventBase));\nexport { MonthEvent };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { compile, isNullOrUndefined, extend, EventHandler, formatUnit, Browser } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, append, prepend } from '@syncfusion/ej2-base';\nimport { WorkCellInteraction } from '../actions/work-cells';\nimport { ViewBase } from './view-base';\nimport { VerticalEvent } from '../event-renderer/vertical-view';\nimport { MonthEvent } from '../event-renderer/month';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nvar MAJOR_SLOT_TEMPLATE = '${getTime(date)}';\nvar MINOR_SLOT_TEMPLATE = ' ';\n/**\n * vertical view\n */\nvar VerticalView = /** @class */ (function (_super) {\n __extends(VerticalView, _super);\n /**\n * Constructor for vertical view\n */\n function VerticalView(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-day-view';\n _this.isInverseTableSelect = true;\n _this.baseCssClass = 'e-vertical-view';\n _this.dateHeaderTemplate = '
    ${getDayName(date)}
    ' +\n '
    ${getDate(date)}
    ';\n _this.workCellAction = new WorkCellInteraction(parent);\n return _this;\n }\n VerticalView.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.scrollUiUpdate, this);\n this.parent.on(event.dataReady, this.renderEvents, this);\n };\n VerticalView.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.scrollUiUpdate);\n this.parent.off(event.dataReady, this.renderEvents);\n };\n VerticalView.prototype.renderEvents = function () {\n if (this.parent.activeViewOptions.timeScale.enable) {\n var appointment = new VerticalEvent(this.parent);\n appointment.renderAppointments();\n }\n else {\n var appointment = new MonthEvent(this.parent);\n appointment.renderAppointments();\n }\n };\n VerticalView.prototype.onContentScroll = function (e) {\n var target = e.target;\n this.scrollLeftPanel(target);\n this.scrollTopPanel(target);\n if (!this.parent.isAdaptive) {\n this.parent.uiStateValues.top = target.scrollTop;\n }\n this.parent.uiStateValues.left = target.scrollLeft;\n if (!isNullOrUndefined(this.parent.quickPopup)) {\n this.parent.quickPopup.quickPopupHide();\n }\n };\n VerticalView.prototype.onApaptiveMove = function (e) {\n if (this.parent.uiStateValues.action) {\n e.preventDefault();\n }\n };\n VerticalView.prototype.onApaptiveScroll = function (e) {\n this.parent.uiStateValues.top = e.target.scrollTop;\n };\n VerticalView.prototype.scrollLeftPanel = function (target) {\n var leftPanel = this.getLeftPanelElement();\n if (!isNullOrUndefined(leftPanel)) {\n leftPanel.scrollTop = target.scrollTop;\n }\n };\n VerticalView.prototype.scrollUiUpdate = function (args) {\n var headerBarHeight = this.getHeaderBarHeight();\n var timecells = this.getLeftPanelElement();\n var content = this.getScrollableElement();\n var header = this.getDatesHeaderElement();\n var scrollerHeight = this.parent.element.offsetHeight - headerBarHeight - header.offsetHeight;\n this.setContentHeight(content, timecells, scrollerHeight);\n var scrollBarWidth = util.getScrollBarWidth();\n // tslint:disable:no-any\n if (content.offsetWidth - content.clientWidth > 0) {\n header.firstChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n // tslint:enable:no-any\n if (this.parent.uiStateValues.isInitial || this.isTimelineView()) {\n this.scrollToWorkHour();\n this.parent.uiStateValues.isInitial = this.isTimelineView();\n }\n else {\n content.scrollTop = this.parent.uiStateValues.top;\n }\n if (this.parent.activeViewOptions.timeScale.enable) {\n this.highlightCurrentTime();\n }\n };\n VerticalView.prototype.setContentHeight = function (element, leftPanelElement, height) {\n if (this.parent.isAdaptive && !this.isTimelineView()) {\n element.style.height = formatUnit(height);\n }\n else {\n if (!isNullOrUndefined(leftPanelElement)) {\n leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(element));\n }\n element.style.height = formatUnit(height);\n }\n };\n VerticalView.prototype.scrollToWorkHour = function () {\n if (this.parent.workHours.highlight) {\n var firstWorkHourCell = this.element.querySelector('.' + cls.WORK_HOURS_CLASS);\n if (firstWorkHourCell) {\n this.getScrollableElement().scrollTop = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.top = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.left = 0;\n }\n }\n };\n VerticalView.prototype.scrollToHour = function (hour) {\n var date = this.parent.globalize.parseDate(hour, { skeleton: 'Hm' });\n if (isNullOrUndefined(date)) {\n return;\n }\n this.getScrollableElement().scrollTop = this.getTopFromDateTime(date);\n };\n VerticalView.prototype.generateColumnLevels = function () {\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n var columnLevels = [];\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n columnLevels = this.parent.resourceBase.generateResourceLevels(level);\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resourceLevel = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n var resStartHour = resourceLevel.resourceData[resourceLevel.resource.startHourField];\n var resEndHour = resourceLevel.resourceData[resourceLevel.resource.endHourField];\n var dateSlots = this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays, resStartHour, resEndHour);\n columnLevels = [dateSlots];\n }\n }\n else {\n columnLevels.push(level);\n }\n this.colLevels = columnLevels;\n return columnLevels;\n };\n VerticalView.prototype.getDateSlots = function (renderDates, workDays, workStartHour, workEndHour) {\n if (workStartHour === void 0) { workStartHour = this.parent.workHours.start; }\n if (workEndHour === void 0) { workEndHour = this.parent.workHours.end; }\n var dateCol = [];\n var start = this.parent.globalize.parseDate(workStartHour, { skeleton: 'Hm' });\n var end = this.parent.globalize.parseDate(workEndHour, { skeleton: 'Hm' });\n for (var _i = 0, renderDates_1 = renderDates; _i < renderDates_1.length; _i++) {\n var col = renderDates_1[_i];\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentDate(col)) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateCol.push({\n date: col, type: 'dateHeader', className: classList, colSpan: 1,\n workDays: workDays, startHour: new Date(+start), endHour: new Date(+end)\n });\n }\n return dateCol;\n };\n VerticalView.prototype.isWorkHourRange = function (date) {\n return (this.getStartHour().getTime() <= date.getTime()) && (this.getEndHour().getTime() >= date.getTime());\n };\n VerticalView.prototype.highlightCurrentTime = function () {\n var _this = this;\n if (this.parent.activeViewOptions.headerRows.length > 0 &&\n this.parent.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour') {\n return;\n }\n if (this.parent.showTimeIndicator && this.isWorkHourRange(new Date())) {\n var currentDateIndex = this.getCurrentTimeIndicatorIndex();\n if (currentDateIndex.length > 0) {\n this.changeCurrentTimePosition();\n if (isNullOrUndefined(this.currentTimeIndicatorTimer)) {\n this.currentTimeIndicatorTimer = window.setInterval(function () { _this.changeCurrentTimePosition(); }, util.MS_PER_MINUTE);\n }\n }\n else {\n this.clearCurrentTimeIndicatorTimer();\n }\n }\n else {\n this.clearCurrentTimeIndicatorTimer();\n }\n };\n VerticalView.prototype.getCurrentTimeIndicatorIndex = function () {\n var currentDateIndex = [];\n if (!isNullOrUndefined(this.parent.resourceBase) && (this.parent.activeViewOptions.group.resources.length > 0) &&\n !this.parent.uiStateValues.isGroupAdaptive) {\n var count = 0;\n for (var _i = 0, _a = this.parent.resourceBase.lastResourceLevel; _i < _a.length; _i++) {\n var resource = _a[_i];\n var index = this.parent.getIndexOfDate(resource.renderDates, util.resetTime(new Date()));\n if (index >= 0) {\n var resIndex = this.parent.activeViewOptions.group.byDate ?\n (this.parent.resourceBase.lastResourceLevel.length * index) + count : count + index;\n currentDateIndex.push(resIndex);\n }\n count += this.parent.activeViewOptions.group.byDate ? 1 : resource.renderDates.length;\n }\n }\n else {\n var renderDates = (this.parent.uiStateValues.isGroupAdaptive) ?\n this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex].renderDates : this.renderDates;\n var index = this.parent.getIndexOfDate(renderDates, util.resetTime(new Date()));\n if (index >= 0) {\n currentDateIndex.push(index);\n }\n }\n return currentDateIndex;\n };\n VerticalView.prototype.clearCurrentTimeIndicatorTimer = function () {\n if (!isNullOrUndefined(this.currentTimeIndicatorTimer)) {\n window.clearInterval(this.currentTimeIndicatorTimer);\n this.currentTimeIndicatorTimer = null;\n this.removeCurrentTimeIndicatorElements();\n }\n };\n VerticalView.prototype.removeCurrentTimeIndicatorElements = function () {\n var queryString = '.' + cls.PREVIOUS_TIMELINE_CLASS + ',.' + cls.CURRENT_TIMELINE_CLASS + ',.' + cls.CURRENT_TIME_CLASS;\n var timeIndicator = [].slice.call(this.element.querySelectorAll(queryString));\n timeIndicator.forEach(function (indicator) { return remove(indicator); });\n };\n VerticalView.prototype.changeCurrentTimePosition = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeCurrentTimeIndicatorElements();\n var currentDateIndex = this.getCurrentTimeIndicatorIndex();\n var firstRow = this.parent.getContentTable().rows[0];\n var top = this.getTopFromDateTime(new Date());\n var topInPx = formatUnit(top);\n var rowIndex = Math.floor(top / firstRow.cells[0].offsetHeight);\n if (isNullOrUndefined(rowIndex) || isNaN(rowIndex)) {\n return;\n }\n var curTimeWrap = this.element.querySelectorAll('.' + cls.TIMELINE_WRAPPER_CLASS);\n for (var i = 0, length_1 = currentDateIndex[0]; i < length_1; i++) {\n curTimeWrap[i].appendChild(createElement('div', { className: cls.PREVIOUS_TIMELINE_CLASS, styles: 'top:' + topInPx }));\n }\n for (var _i = 0, currentDateIndex_1 = currentDateIndex; _i < currentDateIndex_1.length; _i++) {\n var day = currentDateIndex_1[_i];\n curTimeWrap[day].appendChild(createElement('div', { className: cls.CURRENT_TIMELINE_CLASS, styles: 'top:' + topInPx }));\n }\n var currentTimeEle = createElement('div', {\n innerHTML: this.parent.getTimeString(new Date()),\n className: cls.CURRENT_TIME_CLASS,\n styles: 'top:' + topInPx\n });\n var timeCellsWrap = this.getLeftPanelElement();\n removeClass(timeCellsWrap.querySelectorAll('.' + cls.HIDE_CHILDS_CLASS), cls.HIDE_CHILDS_CLASS);\n addClass([timeCellsWrap.querySelectorAll('tr')[rowIndex].lastChild], cls.HIDE_CHILDS_CLASS);\n prepend([currentTimeEle], timeCellsWrap);\n currentTimeEle.style.top = formatUnit(currentTimeEle.offsetTop - (currentTimeEle.offsetHeight / 2));\n };\n VerticalView.prototype.getTopFromDateTime = function (date) {\n var startHour = this.getStartHour();\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (diffInMinutes * this.getWorkCellHeight() * this.parent.activeViewOptions.timeScale.slotCount) /\n this.parent.activeViewOptions.timeScale.interval;\n };\n VerticalView.prototype.getWorkCellHeight = function () {\n return this.element.querySelector('.' + cls.WORK_CELLS_CLASS).offsetHeight;\n };\n VerticalView.prototype.getTdContent = function (date, type, groupIndex) {\n var cntEle;\n switch (type) {\n case 'dateHeader':\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getDateHeaderTemplate()(args);\n }\n else {\n cntEle = compile(this.dateHeaderTemplate, this.customHelper)({ date: date });\n }\n break;\n case 'majorSlot':\n if (this.parent.activeViewOptions.timeScale.majorSlotTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getMajorSlotTemplate()(args);\n }\n else {\n cntEle = compile(MAJOR_SLOT_TEMPLATE, this.customHelper)({ date: date });\n }\n break;\n case 'minorSlot':\n if (this.parent.activeViewOptions.timeScale.minorSlotTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getMinorSlotTemplate()(args);\n }\n else {\n cntEle = compile(MINOR_SLOT_TEMPLATE, this.customHelper)({ date: date });\n }\n break;\n case 'alldayCells':\n if (this.parent.activeViewOptions.cellTemplate) {\n var args = { date: date, type: type, groupIndex: groupIndex };\n cntEle = this.parent.getCellTemplate()(args);\n }\n break;\n }\n return cntEle;\n };\n VerticalView.prototype.renderLayout = function (type) {\n this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));\n var clsList = [this.baseCssClass, this.viewClass];\n clsList.push(type);\n if (this.parent.activeViewOptions.group.byDate) {\n clsList.push('e-by-date');\n }\n if (!this.parent.activeViewOptions.timeScale.enable) {\n addClass([this.element], [cls.TIMESCALE_DISABLE, this.viewClass]);\n }\n this.renderPanel(type);\n addClass([this.element], clsList);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.colLevels = this.generateColumnLevels();\n this.renderHeader();\n this.renderContent();\n if (this.parent.uiStateValues.isGroupAdaptive && !this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n VerticalView.prototype.renderHeader = function () {\n var tr = createElement('tr');\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n if (this.parent.activeViewOptions.timeScale.enable) {\n var indentTd = createElement('td', { className: cls.LEFT_INDENT_CLASS });\n indentTd.appendChild(this.renderLeftIndent());\n tr.appendChild(indentTd);\n }\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n VerticalView.prototype.renderContent = function () {\n var tr = createElement('tr');\n var workTd = createElement('td');\n if (this.parent.isAdaptive) {\n workTd.setAttribute('colspan', (this.parent.activeViewOptions.timeScale.enable ? '2' : '1'));\n var scrollContainer = createElement('div', { className: cls.SCROLL_CONTAINER_CLASS });\n if (this.parent.activeViewOptions.timeScale.enable) {\n scrollContainer.appendChild(this.renderTimeCells());\n }\n scrollContainer.appendChild(this.renderContentArea());\n workTd.appendChild(scrollContainer);\n EventHandler.add(scrollContainer, 'scroll', this.onApaptiveScroll, this);\n EventHandler.add(scrollContainer, Browser.touchMoveEvent, this.onApaptiveMove, this);\n tr.appendChild(workTd);\n }\n else {\n workTd.appendChild(this.renderContentArea());\n if (this.parent.activeViewOptions.timeScale.enable) {\n var timesTd = createElement('td');\n timesTd.appendChild(this.renderTimeCells());\n tr.appendChild(timesTd);\n }\n tr.appendChild(workTd);\n }\n this.element.querySelector('tbody').appendChild(tr);\n };\n VerticalView.prototype.renderLeftIndent = function () {\n var wrap = createElement('div', { className: cls.LEFT_INDENT_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var rowCount = this.colLevels.length;\n for (var i = 0; i < rowCount; i++) {\n var ntr_1 = trEle.cloneNode();\n var data_1 = { className: [this.colLevels[i][0].className[0]], type: 'emptyCells' };\n if (this.parent.activeViewOptions.showWeekNumber && data_1.className.indexOf(cls.HEADER_CELLS_CLASS) !== -1) {\n data_1.className.push(cls.WEEK_NUMBER_CLASS);\n var weekNo = util.getWeekNumber(this.renderDates.slice(-1)[0]);\n data_1.text = '' + weekNo + '';\n }\n ntr_1.appendChild(this.createTd(data_1));\n tbl.querySelector('tbody').appendChild(ntr_1);\n }\n var ntr = trEle.cloneNode();\n var appointmentExpandCollapse = createElement('div', {\n attrs: { 'tabindex': '0', title: 'Expand-all-day-section', 'aria-disabled': 'false', 'aria-label': 'Expand section' },\n className: cls.ALLDAY_APPOINTMENT_SECTION_CLASS + ' ' + cls.APPOINTMENT_ROW_EXPAND_CLASS + ' ' +\n cls.ICON + ' ' + cls.DISABLE_CLASS,\n });\n var data = { className: [cls.ALLDAY_CELLS_CLASS], type: 'emptyCells' };\n var nth = this.createTd(data);\n nth.appendChild(appointmentExpandCollapse);\n ntr.appendChild(nth);\n tbl.querySelector('tbody').appendChild(ntr);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n container.appendChild(wrap);\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var rowCount = this.colLevels.length;\n var lastLevel = this.colLevels[rowCount - 1];\n this.createColGroup(tbl, lastLevel);\n for (var i = 0; i < rowCount; i++) {\n var ntr = trEle.cloneNode();\n addClass([ntr], cls.HEADER_ROW_CLASS);\n var level = this.colLevels[i];\n for (var j = 0; j < level.length; j++) {\n ntr.appendChild(this.createTd(level[j]));\n }\n tbl.querySelector('tbody').appendChild(ntr);\n }\n this.createAllDayRow(tbl, lastLevel);\n wrap.appendChild(tbl);\n return container;\n };\n VerticalView.prototype.createAllDayRow = function (table, tdData) {\n var ntr = createElement('tr');\n addClass([ntr], cls.ALLDAY_ROW_CLASS);\n for (var j = 0; j < tdData.length; j++) {\n var td = extend({}, tdData[j]);\n td.className = [cls.ALLDAY_CELLS_CLASS];\n td.type = 'alldayCells';\n var ntd = this.createTd(td);\n ntd.setAttribute('data-date', td.date.getTime().toString());\n if (!isNullOrUndefined(td.groupIndex)) {\n ntd.setAttribute('data-group-index', '' + td.groupIndex);\n }\n this.wireCellEvents(ntd);\n ntr.appendChild(ntd);\n }\n table.querySelector('tbody').appendChild(ntr);\n var thead = createElement('thead');\n thead.appendChild(this.createEventWrapper('allDay'));\n prepend([thead], table);\n };\n VerticalView.prototype.createTd = function (td) {\n var tdEle = createElement('td');\n this.addAttributes(td, tdEle);\n if (td.date && td.type) {\n var ele = this.getTdContent(td.date, td.type, td.groupIndex);\n if (ele && ele.length) {\n append([].slice.call(ele), tdEle);\n }\n }\n if (td.type === 'resourceHeader') {\n this.setResourceHeaderContent(tdEle, td);\n }\n if (td.type === 'dateHeader' && td.className.indexOf(cls.HEADER_CELLS_CLASS) >= 0) {\n tdEle.setAttribute('data-date', td.date.getTime().toString());\n if (!isNullOrUndefined(td.groupIndex)) {\n tdEle.setAttribute('data-group-index', '' + td.groupIndex);\n }\n EventHandler.add(tdEle, 'click', this.workCellAction.cellClick, this.workCellAction);\n EventHandler.add(tdEle, 'dblclick', this.workCellAction.cellDblClick, this.workCellAction);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n VerticalView.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.workCellAction.cellMouseDown, this.workCellAction);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this.workCellAction);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this.workCellAction);\n };\n VerticalView.prototype.renderTimeCells = function () {\n var _this = this;\n var wrap = createElement('div', { className: cls.TIME_CELLS_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var handler = function (r) {\n r.type = r.first ? 'majorSlot' : 'minorSlot';\n r.className = r.last ? [cls.TIME_CELLS_CLASS] : [];\n var ntr = trEle.cloneNode();\n var data = { date: r.date, type: r.type, className: r.className };\n ntr.appendChild(_this.createTd(data));\n tbl.querySelector('tbody').appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderContentArea = function () {\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n this.createColGroup(tbl, this.colLevels.slice(-1)[0]);\n this.renderContentTable(tbl);\n wrap.appendChild(tbl);\n this.wireCellEvents(tbl.querySelector('tbody'));\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n EventHandler.add(wrap, Browser.touchMoveEvent, this.onApaptiveMove, this);\n return wrap;\n };\n VerticalView.prototype.renderContentTable = function (table) {\n var _this = this;\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var tbody = table.querySelector('tbody');\n var handler = function (r) {\n var ntr = tr.cloneNode();\n for (var _i = 0, _a = _this.colLevels[_this.colLevels.length - 1]; _i < _a.length; _i++) {\n var tdData = _a[_i];\n var ntd = _this.createContentTd(tdData, r, td);\n ntr.appendChild(ntd);\n }\n tbody.appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n this.renderContentTableHeader(table);\n };\n VerticalView.prototype.createContentTd = function (tdData, r, td) {\n var ntd = td.cloneNode();\n if (tdData.colSpan) {\n ntd.setAttribute('colspan', tdData.colSpan.toString());\n }\n var clsName = this.getContentTdClass(r);\n var cellDate = util.resetTime(new Date('' + tdData.date));\n util.setTime(cellDate, util.getDateInMs(r.date));\n var type = 'workCells';\n if (tdData.className.indexOf(cls.RESOURCE_PARENT_CLASS) !== -1) {\n clsName.push(cls.RESOURCE_GROUP_CELLS_CLASS);\n type = 'resourceGroupCells';\n }\n if (this.parent.workHours.highlight && ((this.parent.activeViewOptions.timeScale.enable &&\n this.isWorkHour(cellDate, tdData.startHour, tdData.endHour, tdData.workDays)) ||\n (!this.parent.activeViewOptions.timeScale.enable && this.isWorkDay(cellDate, tdData.workDays)))) {\n clsName.push(cls.WORK_HOURS_CLASS);\n }\n addClass([ntd], clsName);\n if (this.parent.activeViewOptions.cellTemplate) {\n var args_1 = { date: cellDate, type: type, groupIndex: tdData.groupIndex };\n append([].slice.call(this.parent.getCellTemplate()(args_1)), ntd);\n }\n ntd.setAttribute('data-date', cellDate.getTime().toString());\n if (!isNullOrUndefined(tdData.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) {\n var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n tdData.groupIndex;\n ntd.setAttribute('data-group-index', '' + groupIndex);\n }\n var args = { elementType: type, element: ntd, date: cellDate, groupIndex: tdData.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return ntd;\n };\n VerticalView.prototype.getContentTdClass = function (r) {\n return r.last ? [cls.WORK_CELLS_CLASS] : [cls.WORK_CELLS_CLASS, cls.ALTERNATE_CELLS_CLASS];\n };\n VerticalView.prototype.renderContentTableHeader = function (table) {\n var thead = createElement('thead');\n thead.appendChild(this.createEventWrapper());\n if (this.parent.activeViewOptions.timeScale.enable) {\n thead.appendChild(this.createEventWrapper('timeIndicator'));\n }\n prepend([thead], table);\n };\n VerticalView.prototype.createEventWrapper = function (type) {\n if (type === void 0) { type = ''; }\n var tr = createElement('tr');\n this.colLevels.slice(-1)[0].forEach(function (col, day) {\n var appointmentWrap = createElement('td', {\n className: (type === 'allDay') ? cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : (type === 'timeIndicator') ?\n cls.TIMELINE_WRAPPER_CLASS : cls.DAY_WRAPPER_CLASS, attrs: { 'data-date': col.date.getTime().toString() }\n });\n if (!isNullOrUndefined(col.groupIndex)) {\n appointmentWrap.setAttribute('data-group-index', col.groupIndex.toString());\n }\n if (type === '') {\n var innerWrapper = createElement('div', {\n id: cls.APPOINTMENT_WRAPPER_CLASS + '-' + day.toString(),\n className: cls.APPOINTMENT_WRAPPER_CLASS\n });\n appointmentWrap.appendChild(innerWrapper);\n }\n tr.appendChild(appointmentWrap);\n });\n return tr;\n };\n VerticalView.prototype.getScrollableElement = function () {\n if (this.parent.isAdaptive && this.parent.currentView.indexOf('Timeline') === -1) {\n return this.element.querySelector('.' + cls.SCROLL_CONTAINER_CLASS);\n }\n else {\n return this.getContentAreaElement();\n }\n };\n VerticalView.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.TIME_CELLS_WRAP_CLASS);\n };\n VerticalView.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n VerticalView.prototype.getEndDateFromStartDate = function (start) {\n var msMajorInterval = this.parent.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.parent.activeViewOptions.timeScale.slotCount;\n var end = new Date(start.getTime());\n end.setMilliseconds(end.getMilliseconds() + msInterval);\n return end;\n };\n VerticalView.prototype.getTimeSlotRows = function (handler) {\n var rows = [];\n var startHour = this.getStartHour();\n var endHour = this.getEndHour();\n var msMajorInterval = this.parent.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.parent.activeViewOptions.timeScale.slotCount;\n var length = Math.round(util.MS_PER_DAY / msInterval);\n var msStartHour = startHour.getTime();\n var msEndHour = endHour.getTime();\n if (msStartHour !== msEndHour) {\n length = Math.round((msEndHour - msStartHour) / msInterval);\n }\n if (!this.parent.activeViewOptions.timeScale.enable) {\n length = 1;\n }\n var dt = new Date(msStartHour);\n var start = this.parent.globalize.parseDate(this.parent.workHours.start, { skeleton: 'Hm' });\n var end = this.parent.globalize.parseDate(this.parent.workHours.end, { skeleton: 'Hm' });\n for (var i = 0; i < length; i++) {\n var majorTickDivider = i % (msMajorInterval / msInterval);\n var row = {\n date: new Date('' + dt),\n startHour: start,\n endHour: end,\n first: (majorTickDivider === 0),\n middle: (majorTickDivider < this.parent.activeViewOptions.timeScale.slotCount - 1),\n last: (majorTickDivider === this.parent.activeViewOptions.timeScale.slotCount - 1),\n type: ''\n };\n if (handler) {\n handler(row);\n }\n rows.push(row);\n dt.setMilliseconds(msInterval);\n }\n return rows;\n };\n /**\n * Get module name.\n */\n VerticalView.prototype.getModuleName = function () {\n return 'verticalView';\n };\n /**\n * To destroy the vertical view.\n * @return {void}\n * @private\n */\n VerticalView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.clearCurrentTimeIndicatorTimer();\n if (this.element) {\n EventHandler.remove(this.getContentAreaElement(), 'scroll', this.onContentScroll);\n if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\n remove(this.element);\n this.element = null;\n if (this.parent.scheduleTouchModule) {\n this.parent.scheduleTouchModule.resetValues();\n }\n }\n };\n return VerticalView;\n}(ViewBase));\nexport { VerticalView };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { VerticalView } from './vertical-view';\n/**\n * day view\n */\nvar Day = /** @class */ (function (_super) {\n __extends(Day, _super);\n /**\n * Constructor for day view\n */\n function Day(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-day-view';\n return _this;\n }\n /**\n * Get module name.\n */\n Day.prototype.getModuleName = function () {\n return 'day';\n };\n return Day;\n}(VerticalView));\nexport { Day };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { VerticalView } from './vertical-view';\n/**\n * week view\n */\nvar Week = /** @class */ (function (_super) {\n __extends(Week, _super);\n /**\n * Constructor for week view\n */\n function Week(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-week-view';\n return _this;\n }\n /**\n * Get module name.\n */\n Week.prototype.getModuleName = function () {\n return 'week';\n };\n return Week;\n}(VerticalView));\nexport { Week };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { VerticalView } from './vertical-view';\n/**\n * work week view\n */\nvar WorkWeek = /** @class */ (function (_super) {\n __extends(WorkWeek, _super);\n /**\n * Constructor for work week view\n */\n function WorkWeek(par) {\n var _this = _super.call(this, par) || this;\n _this.viewClass = 'e-work-week-view';\n return _this;\n }\n /**\n * Get module name.\n */\n WorkWeek.prototype.getModuleName = function () {\n return 'workWeek';\n };\n return WorkWeek;\n}(VerticalView));\nexport { WorkWeek };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { EventHandler, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, append, prepend } from '@syncfusion/ej2-base';\nimport { WorkCellInteraction } from '../actions/work-cells';\nimport { ViewBase } from './view-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport { MonthEvent } from '../event-renderer/month';\n/**\n * month view\n */\nvar Month = /** @class */ (function (_super) {\n __extends(Month, _super);\n /**\n * Constructor for month view\n */\n function Month(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dayNameFormat = 'wide';\n _this.viewClass = 'e-month-view';\n _this.isInverseTableSelect = false;\n _this.monthDates = {};\n _this.workCellAction = new WorkCellInteraction(parent);\n return _this;\n }\n Month.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.onScrollUIUpdate, this);\n this.parent.on(event.dataReady, this.onDataReady, this);\n this.parent.on(event.cellClick, this.onCellClick, this);\n };\n Month.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.onScrollUIUpdate);\n this.parent.off(event.dataReady, this.onDataReady);\n this.parent.off(event.cellClick, this.onCellClick);\n };\n Month.prototype.onDataReady = function (args) {\n var monthEvent = new MonthEvent(this.parent);\n monthEvent.renderAppointments();\n };\n Month.prototype.onCellClick = function (event) {\n // Here cell click\n };\n Month.prototype.onContentScroll = function (e) {\n this.scrollTopPanel(e.target);\n this.scrollLeftPanel(e.target);\n };\n Month.prototype.scrollLeftPanel = function (target) {\n var leftPanel = this.getLeftPanelElement();\n if (leftPanel) {\n leftPanel.scrollTop = target.scrollTop;\n }\n };\n Month.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.WEEK_NUMBER_WRAPPER_CLASS);\n };\n Month.prototype.onScrollUIUpdate = function (args) {\n var headerHeight = this.getHeaderBarHeight();\n var header = this.getDatesHeaderElement();\n var content = this.getContentAreaElement();\n var height = this.parent.element.offsetHeight - headerHeight - header.offsetHeight;\n var leftPanel = this.getLeftPanelElement();\n this.setContentHeight(content, leftPanel, height);\n var scrollBarWidth = util.getScrollBarWidth();\n // tslint:disable:no-any\n if (content.offsetWidth - content.clientWidth > 0) {\n header.firstChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n // tslint:enable:no-any\n };\n Month.prototype.setContentHeight = function (content, leftPanelElement, height) {\n content.style.height = 'auto';\n if (this.parent.currentView === 'Month') {\n content.style.height = formatUnit(height);\n }\n if (leftPanelElement) {\n if (this.parent.currentView === 'MonthAgenda') {\n height = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetHeight;\n }\n leftPanelElement.style.height = 'auto';\n leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(content));\n }\n };\n Month.prototype.generateColumnLevels = function () {\n var colLevels = [];\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n colLevels = this.parent.resourceBase.generateResourceLevels(level);\n if (this.parent.currentView === 'MonthAgenda') {\n colLevels = [level];\n }\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resourceLevel = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n colLevels = [this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays)];\n }\n }\n else {\n colLevels.push(level);\n }\n this.colLevels = colLevels;\n return colLevels;\n };\n Month.prototype.getDateSlots = function (renderDates, workDays) {\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : workDays.length;\n var dateSlots = [];\n for (var col = 0; col < count; col++) {\n var classList = [cls.HEADER_CELLS_CLASS];\n var currentDateIndex = renderDates.slice(0, count).map(function (date) { return date.getDay(); });\n if (this.isCurrentMonth(this.parent.selectedDate) && currentDateIndex.indexOf(new Date().getDay()) === col) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateSlots.push({ date: renderDates[col], type: 'monthDay', className: classList, colSpan: 1, workDays: workDays });\n }\n return dateSlots;\n };\n Month.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive || this.parent.activeViewOptions.group.resources.length > 0) {\n return 'abbreviated';\n }\n return 'wide';\n };\n Month.prototype.renderLayout = function (type) {\n this.dayNameFormat = this.getDayNameFormat();\n this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));\n var clsList = [this.viewClass];\n clsList.push(type);\n if (this.parent.activeViewOptions.group.byDate) {\n clsList.push('e-by-date');\n }\n addClass([this.element], clsList);\n this.renderPanel(type);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.colLevels = this.generateColumnLevels();\n this.renderHeader();\n this.renderContent();\n var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;\n if (this.parent.uiStateValues.isGroupAdaptive && !target.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n Month.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.workCellAction.cellMouseDown, this.workCellAction);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this.workCellAction);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this.workCellAction);\n };\n Month.prototype.renderHeader = function () {\n var tr = createElement('tr');\n this.renderLeftIndent(tr);\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n Month.prototype.renderLeftIndent = function (tr) {\n if (this.parent.activeViewOptions.showWeekNumber) {\n tr.appendChild(createElement('td', { className: 'e-left-indent' }));\n }\n };\n Month.prototype.renderContent = function () {\n var tr = createElement('tr');\n if (this.parent.activeViewOptions.showWeekNumber) {\n tr.appendChild(this.renderWeekNumberContent());\n }\n var workTd = createElement('td');\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var contentArea = this.renderContentArea();\n if (this.parent.currentView === 'Month') {\n wrap.appendChild(contentArea);\n }\n else {\n var monthAgendaWrapper = createElement('div', { className: cls.TABLE_CONTAINER_CLASS });\n monthAgendaWrapper.appendChild(contentArea);\n wrap.appendChild(monthAgendaWrapper);\n }\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n workTd.appendChild(wrap);\n tr.appendChild(workTd);\n this.element.querySelector('tbody').appendChild(tr);\n this.renderAppointmentContainer();\n };\n Month.prototype.renderWeekNumberContent = function () {\n var dateCol = this.renderDates.map(function (date) { return new Date(+date); });\n var td = createElement('td');\n var contentWrapper = createElement('div', { className: cls.WEEK_NUMBER_WRAPPER_CLASS });\n td.appendChild(contentWrapper);\n var contentWrapTable = this.createTableLayout();\n contentWrapper.appendChild(contentWrapTable);\n var noOfDays = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :\n this.parent.activeViewOptions.workDays.length;\n for (var i = 0, length_1 = (this.renderDates.length / noOfDays); i < length_1; i++) {\n var dates = dateCol.splice(0, noOfDays);\n var weekNumber = util.getWeekNumber(dates.slice(-1)[0]).toString();\n contentWrapTable.querySelector('tbody').appendChild(this.createWeekNumberElement(weekNumber));\n }\n return td;\n };\n Month.prototype.renderAppointmentContainer = function () {\n //Here needs to render mobile view appointment details on selected date\n };\n Month.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n container.appendChild(wrap);\n var table = this.createTableLayout();\n this.createColGroup(table, this.colLevels[this.colLevels.length - 1]);\n var trEle = createElement('tr');\n for (var i = 0; i < this.colLevels.length; i++) {\n var level = this.colLevels[i];\n var ntr = trEle.cloneNode();\n for (var j = 0; j < level.length; j++) {\n var td = level[j];\n ntr.appendChild(this.createHeaderCell(td));\n }\n table.querySelector('tbody').appendChild(ntr);\n }\n wrap.appendChild(table);\n return container;\n };\n Month.prototype.createHeaderCell = function (td) {\n var tdEle = createElement('td');\n this.addAttributes(td, tdEle);\n if (td.type === 'monthDay') {\n var ele = createElement('span', { innerHTML: this.parent.getDayNames(this.dayNameFormat)[td.date.getDay()] });\n tdEle.appendChild(ele);\n }\n if (td.type === 'resourceHeader') {\n this.setResourceHeaderContent(tdEle, td);\n }\n if (td.type === 'dateHeader') {\n addClass([tdEle], cls.DATE_HEADER_CLASS);\n tdEle.setAttribute('data-date', td.date.getTime().toString());\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n var cellArgs = { date: td.date, type: td.type };\n var ele = this.parent.getDateHeaderTemplate()(cellArgs);\n if (ele && ele.length) {\n append([].slice.call(ele), tdEle);\n }\n }\n else {\n var ele = createElement('span', { className: cls.NAVIGATE_CLASS });\n var title = this.parent.globalize.formatDate(td.date, { skeleton: 'full' });\n ele.setAttribute('title', title);\n ele.innerHTML = (td.date.getDate() === 1 && !this.isCurrentDate(td.date) && !this.parent.isAdaptive) ?\n this.parent.globalize.formatDate(td.date, { format: 'MMM d' }) :\n this.parent.globalize.formatDate(td.date, { skeleton: 'd' });\n tdEle.appendChild(ele);\n }\n this.wireCellEvents(tdEle);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n Month.prototype.getContentSlots = function () {\n var slotDatas = [];\n var prepareSlots = function (rowIndex, renderDate, resData, classList) {\n var data = {\n date: new Date(+renderDate), groupIndex: resData.groupIndex, workDays: resData.workDays,\n type: 'monthCells', className: classList || [cls.WORK_CELLS_CLASS]\n };\n if (!slotDatas[rowIndex]) {\n slotDatas[rowIndex] = [];\n }\n slotDatas[rowIndex].push(data);\n };\n var includeResource = this.parent.currentView !== 'MonthAgenda' &&\n this.parent.activeViewOptions.group.resources.length > 0;\n if (includeResource && !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeViewOptions.group.byDate) {\n for (var _i = 0, _a = this.colLevels[this.colLevels.length - 2]; _i < _a.length; _i++) {\n var res = _a[_i];\n var dates = res.renderDates.map(function (date) { return new Date(+date); });\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : res.workDays.length;\n for (var i = 0; i < (res.renderDates.length / count); i++) {\n var colDates = dates.splice(0, count);\n for (var _b = 0, colDates_1 = colDates; _b < colDates_1.length; _b++) {\n var colDate = colDates_1[_b];\n prepareSlots(i, colDate, res);\n }\n }\n }\n }\n else {\n var dates = this.renderDates.map(function (date) { return new Date(+date); });\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :\n this.parent.activeViewOptions.workDays.length;\n for (var i = 0; i < (this.renderDates.length / count); i++) {\n var colDates = dates.splice(0, count);\n for (var _c = 0, colDates_2 = colDates; _c < colDates_2.length; _c++) {\n var colDate = colDates_2[_c];\n if (includeResource) {\n var lastRow = this.colLevels[(this.colLevels.length - 1)];\n var resourcesTd = lastRow.slice(0, lastRow.length / count);\n for (var resIndex = 0; resIndex < resourcesTd.length; resIndex++) {\n var clsList = void 0;\n if (resIndex !== 0) {\n clsList = [cls.WORK_CELLS_CLASS, cls.DISABLE_DATE];\n }\n prepareSlots(i, colDate, resourcesTd[resIndex], clsList);\n }\n }\n else {\n prepareSlots(i, colDate, this.colLevels[this.colLevels.length - 1][0]);\n }\n }\n }\n }\n return slotDatas;\n };\n Month.prototype.updateClassList = function (data) {\n if (this.isOtherMonth(data.date)) {\n data.className.push(cls.OTHERMONTH_CLASS);\n }\n if (this.parent.currentView === 'MonthAgenda' && this.parent.isSelectedDate(data.date)) {\n data.className.push(cls.SELECTED_CELL_CLASS);\n }\n };\n Month.prototype.isOtherMonth = function (date) {\n return date.getTime() < this.monthDates.start.getTime() || date.getTime() > this.monthDates.end.getTime();\n };\n Month.prototype.renderContentArea = function () {\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n if (this.parent.currentView === 'TimelineMonth') {\n this.createColGroup(tbl, this.colLevels[this.colLevels.length - 1]);\n }\n var monthDate = new Date(this.parent.selectedDate.getTime());\n this.monthDates = {\n start: util.firstDateOfMonth(monthDate),\n end: util.lastDateOfMonth(util.addMonths(monthDate, this.parent.activeViewOptions.interval - 1))\n };\n this.renderContentTable(tbl);\n this.wireCellEvents(tbl.querySelector('tbody'));\n return tbl;\n };\n Month.prototype.renderContentTable = function (table) {\n var tbody = table.querySelector('tbody');\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var slotDatas = this.getContentSlots();\n for (var row = 0; row < slotDatas.length; row++) {\n var ntr = tr.cloneNode();\n for (var col = 0; col < slotDatas[row].length; col++) {\n var ntd = this.createContentTd(slotDatas[row][col], td);\n ntr.appendChild(ntd);\n }\n tbody.appendChild(ntr);\n }\n };\n Month.prototype.createContentTd = function (data, td) {\n var ntd = td.cloneNode();\n if (data.colSpan) {\n ntd.setAttribute('colspan', data.colSpan.toString());\n }\n this.updateClassList(data);\n var type = data.type;\n if (data.className.indexOf(cls.RESOURCE_PARENT_CLASS) !== -1) {\n data.className.push(cls.RESOURCE_GROUP_CELLS_CLASS);\n type = 'resourceGroupCells';\n }\n if (this.parent.workHours.highlight && this.isWorkDay(data.date, data.workDays)) {\n data.className.push(cls.WORKDAY_CLASS);\n }\n if (this.isCurrentDate(data.date)) {\n data.className.push(cls.CURRENTDATE_CLASS);\n }\n addClass([ntd], data.className);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n if (!isNullOrUndefined(data.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) {\n var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n data.groupIndex;\n ntd.setAttribute('data-group-index', '' + groupIndex);\n }\n this.renderDateHeaderElement(data, ntd);\n if (this.parent.activeViewOptions.cellTemplate) {\n var args_1 = { date: data.date, type: type, groupIndex: data.groupIndex };\n append([].slice.call(this.parent.getCellTemplate()(args_1)), ntd);\n }\n var args = { elementType: type, element: ntd, date: data.date, groupIndex: data.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return ntd;\n };\n Month.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n Month.prototype.renderDateHeaderElement = function (data, ntd) {\n if (this.parent.currentView === 'TimelineMonth') {\n return;\n }\n var dateHeader = createElement('div', { className: cls.DATE_HEADER_CLASS });\n dateHeader.innerHTML = (data.date.getDate() === 1 && !this.isCurrentDate(data.date) && !this.parent.isAdaptive) ?\n this.parent.globalize.formatDate(data.date, { format: 'MMM d' }) :\n this.parent.globalize.formatDate(data.date, { skeleton: 'd' });\n ntd.appendChild(dateHeader);\n if (this.getModuleName() === 'month') {\n addClass([dateHeader], cls.NAVIGATE_CLASS);\n }\n };\n Month.prototype.getMonthStart = function (currentDate) {\n var monthStart = util.getWeekFirstDate(util.firstDateOfMonth(currentDate), this.parent.firstDayOfWeek);\n var start = new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());\n return start;\n };\n Month.prototype.getMonthEnd = function (currentDate) {\n var endDate = util.addMonths(currentDate, this.parent.activeViewOptions.interval - 1);\n var lastWeekOfMonth = util.getWeekFirstDate(util.lastDateOfMonth(endDate), this.parent.firstDayOfWeek);\n var monthEnd = util.addDays(lastWeekOfMonth, util.WEEK_LENGTH - 1);\n return monthEnd;\n };\n Month.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n var currentDate = util.resetTime(this.parent.selectedDate);\n var start = this.getMonthStart(currentDate);\n var monthEnd = this.getMonthEnd(currentDate);\n do {\n if (this.parent.activeViewOptions.showWeekend) {\n renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n } while (start.getTime() <= monthEnd.getTime());\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\n };\n Month.prototype.getNextPreviousDate = function (type) {\n if (type === 'next') {\n return util.addMonths(this.parent.selectedDate, this.parent.activeViewOptions.interval);\n }\n else {\n return util.addMonths(this.parent.selectedDate, -(this.parent.activeViewOptions.interval));\n }\n };\n Month.prototype.getEndDateFromStartDate = function (start) {\n return util.addDays(new Date(start.getTime()), 1);\n };\n Month.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive || isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {\n if (this.parent.activeViewOptions.interval > 1) {\n var endDate = util.addMonths(util.lastDateOfMonth(this.parent.selectedDate), this.parent.activeViewOptions.interval - 1);\n if (this.parent.selectedDate.getFullYear() === endDate.getFullYear()) {\n var monthNames = (this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM' }))\n + ' - ' + (this.parent.globalize.formatDate(endDate, { format: 'MMMM ' })) + endDate.getFullYear();\n return monthNames;\n }\n return (this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM' })) + ' ' +\n this.parent.selectedDate.getFullYear() + ' - ' + (this.parent.globalize.formatDate(endDate, { format: 'MMMM ' })) +\n endDate.getFullYear();\n }\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n return this.formatDateRange(this.parent.selectedDate);\n };\n Month.prototype.getLabelText = function (view) {\n return this.parent.localeObj.getConstant(view) + ' of ' +\n this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n };\n Month.prototype.createWeekNumberElement = function (text) {\n var tr = createElement('tr');\n var td = createElement('td', {\n className: cls.WEEK_NUMBER_CLASS,\n attrs: { 'title': (text ? this.parent.localeObj.getConstant('week') + ' ' + text : '') },\n innerHTML: (text || '')\n });\n tr.appendChild(td);\n var args = { elementType: 'weekNumberCell', element: td };\n this.parent.trigger(event.renderCell, args);\n return tr;\n };\n Month.prototype.unwireEvents = function () {\n // No scroller events for month view\n };\n /**\n * Get module name.\n */\n Month.prototype.getModuleName = function () {\n return 'month';\n };\n /**\n * To destroy the month.\n * @return {void}\n * @private\n */\n Month.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n this.unwireEvents();\n if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\n remove(this.element);\n this.element = null;\n if (this.parent.scheduleTouchModule) {\n this.parent.scheduleTouchModule.resetValues();\n }\n }\n };\n return Month;\n}(ViewBase));\nexport { Month };\n","import { isNullOrUndefined, addClass, createElement, append, EventHandler, extend, remove } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { ViewBase } from '../renderer/view-base';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\nvar AgendaBase = /** @class */ (function () {\n /**\n * Constructor for AgendaBase\n */\n function AgendaBase(parent) {\n this.parent = parent;\n this.viewBase = new ViewBase(parent);\n }\n AgendaBase.prototype.createAgendaContentElement = function (type, listData, aTd, groupOrder, groupIndex) {\n var listElement;\n if (type === 'noEvents') {\n var noEvents = [{ 'subject': this.parent.localeObj.getConstant('noEvents') }];\n listElement = ListBase.createList(this.parent.createElement, noEvents, {\n moduleName: 'agenda',\n listClass: this.parent.activeView.viewClass,\n itemClass: this.parent.activeView.viewClass,\n template: '
    ${subject}
    '\n });\n }\n else {\n listElement = ListBase.createList(this.parent.createElement, listData, {\n moduleName: 'agenda',\n listClass: this.parent.activeView.viewClass,\n itemClass: this.parent.activeView.viewClass\n });\n for (var li = 0, length_1 = listData.length; li < length_1; li++) {\n var appWrapper = createElement('div', {\n className: cls.APPOINTMENT_CLASS, attrs: {\n 'data-id': 'Appointment_' + listData[li][this.parent.eventFields.id],\n 'data-guid': listData[li].Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-readonly': 'false',\n 'aria-selected': 'false',\n 'aria-grabbed': 'true',\n 'aria-label': (listData[li][this.parent.eventFields.subject]\n || this.parent.eventSettings.fields.subject.default)\n }\n });\n if (!isNullOrUndefined(groupIndex)) {\n appWrapper.setAttribute('data-group-index', groupIndex.toString());\n }\n this.parent.eventBase.applyResourceColor(appWrapper, listData[li], 'borderColor', groupOrder);\n var templateEle = void 0;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateEle = this.parent.getAppointmentTemplate()(listData[li]);\n }\n else {\n templateEle = this.createAppointment(listData[li]);\n }\n append([].slice.call(templateEle), appWrapper);\n listElement.children[li].innerHTML = appWrapper.outerHTML;\n var args = { data: listData[li], element: listElement.children[li], cancel: false };\n this.parent.trigger(event.eventRendered, args);\n if (args.cancel) {\n remove(listElement.children[li]);\n }\n }\n }\n aTd.appendChild(listElement);\n if ((this.parent.currentView === 'MonthAgenda' && this.parent.activeViewOptions.group.resources.length > 0)\n || this.parent.currentView === 'Agenda') {\n addClass([aTd], cls.AGENDA_DAY_BORDER_CLASS);\n }\n return aTd;\n };\n AgendaBase.prototype.createAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var eventSubject = (event[fieldMapping.subject] || this.parent.eventSettings.fields.subject.default);\n var eventLocation = (event[fieldMapping.location] || this.parent.eventSettings.fields.location.default);\n var appSubjectWrap = createElement('div', { className: cls.SUBJECT_WRAP });\n if (!isNullOrUndefined(eventLocation) && eventLocation !== '') {\n eventSubject += ',';\n }\n appSubjectWrap.appendChild(createElement('div', { className: cls.SUBJECT_CLASS, innerHTML: eventSubject }));\n if (!isNullOrUndefined(eventLocation) && eventLocation !== '') {\n appSubjectWrap.appendChild(createElement('div', { className: cls.LOCATION_CLASS, innerHTML: eventLocation }));\n }\n if (!isNullOrUndefined(event[fieldMapping.recurrenceRule])) {\n var iconClass = (event[fieldMapping.id] === event[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appSubjectWrap.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n var strDate = event[fieldMapping.startTime];\n var endDate = event[fieldMapping.endTime];\n var isAllDay = event[fieldMapping.isAllDay];\n var allDayStr = this.parent.localeObj.getConstant('allDay');\n var timeStr = this.parent.getTimeString(strDate) + ' - ' + this.parent.getTimeString(endDate);\n if (!isNullOrUndefined(event.data)) {\n var eventString = (endDate.getTime() - strDate.getTime()) / util.MS_PER_DAY >= 1 ? allDayStr : timeStr;\n allDayStr = eventString + ' (' + this.parent.localeObj.getConstant('day') + ' '\n + event.data.index + '/' + event.data.count + ')';\n }\n var displayStr = (!isNullOrUndefined(event.data) || isAllDay) ? allDayStr : timeStr;\n var appDateTime = createElement('div', { className: cls.DATE_TIME_CLASS, innerHTML: displayStr });\n return [appSubjectWrap, appDateTime];\n };\n AgendaBase.prototype.processAgendaEvents = function (events) {\n var eventsProcessed = [];\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n var splited = this.parent.eventBase.splitEventByDay(event_1);\n eventsProcessed = eventsProcessed.concat(splited.length > 1 ? splited : event_1);\n }\n return eventsProcessed;\n };\n AgendaBase.prototype.wireEventActions = function () {\n var eventElement = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var _i = 0, eventElement_1 = eventElement; _i < eventElement_1.length; _i++) {\n var element = eventElement_1[_i];\n this.parent.eventBase.wireAppointmentEvents(element);\n }\n var dateHeaderElement = [].slice.call(this.parent.element.querySelectorAll('.e-m-date'));\n for (var _a = 0, dateHeaderElement_1 = dateHeaderElement; _a < dateHeaderElement_1.length; _a++) {\n var element = dateHeaderElement_1[_a];\n EventHandler.add(element, 'click', this.parent.agendaModule.dayNavigationClick, this);\n }\n };\n AgendaBase.prototype.calculateResourceTableElement = function (tBody, noOfDays, agendaDate) {\n if (isNullOrUndefined(this.parent.resourceBase.lastResourceLevel)) {\n var level = this.viewBase.getDateSlots(this.viewBase.renderDates, this.parent.activeViewOptions.workDays);\n this.parent.resourceBase.generateResourceLevels(level);\n }\n var agendaLastDate = util.addDays(new Date(agendaDate.getTime()), noOfDays);\n var days = (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') ? noOfDays : 1;\n var resColl = this.parent.resourceBase.resourceCollection;\n var resData = this.parent.resourceBase.lastResourceLevel;\n var initialDate = agendaDate;\n for (var i = 0; i < days; i++) {\n var lastLevelInfo = [];\n var tempLastLevelInfo = [];\n var tempIndex = 0;\n var eventObj = void 0;\n var dateObj = void 0;\n var firstDate = util.addDays(initialDate, i);\n var finalDate = (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda')\n ? util.addDays(firstDate, 1) : agendaLastDate;\n var agendaCollection = this.parent.eventBase.filterEvents(firstDate, finalDate);\n if (agendaCollection.length > 0 || !this.parent.hideEmptyAgendaDays || this.parent.currentView === 'MonthAgenda') {\n for (var res = 0; res < resData.length; res++) {\n noOfDays = (!this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') ? noOfDays : 1;\n var data = [];\n agendaDate = firstDate;\n var resDataCollection = this.parent.eventBase.filterEvents(agendaDate, agendaLastDate, agendaCollection, resData[res]);\n if (resDataCollection.length > 0 || !this.parent.hideEmptyAgendaDays || this.parent.currentView === 'MonthAgenda') {\n for (var r = 0; r < noOfDays; r++) {\n var resDayCollection = this.parent.eventBase.filterEvents(agendaDate, util.addDays(agendaDate, 1), resDataCollection, undefined);\n if (resDayCollection.length > 0 || !this.parent.hideEmptyAgendaDays ||\n this.parent.currentView === 'MonthAgenda') {\n data.push(resDayCollection[0]);\n eventObj = {\n rowSpan: 1, type: 'eventColumn', resource: resColl[resColl.length - 1],\n groupIndex: resData[res].groupIndex, groupOrder: resData[res].groupOrder,\n resourceData: resData[res].resourceData, eventData: resDayCollection, date: agendaDate\n };\n dateObj = {\n rowSpan: 1, type: 'dateColumn', resource: resColl[resColl.length - 1],\n groupOrder: resData[res].groupOrder, resourceData: resData[res].resourceData,\n date: agendaDate, text: ''\n };\n if (!lastLevelInfo[tempIndex]) {\n lastLevelInfo[tempIndex] = [];\n }\n lastLevelInfo[tempIndex].push(eventObj);\n lastLevelInfo[tempIndex].push(dateObj);\n tempIndex++;\n }\n agendaDate = util.addDays(agendaDate, 1);\n if (agendaDate.getTime() >= agendaLastDate.getTime() || this.parent.activeViewOptions.group.byDate\n || this.parent.currentView === 'MonthAgenda') {\n lastLevelInfo[lastLevelInfo.length - 1][1].text = 'lastRow';\n var tempObj = {\n rowSpan: data.length, type: 'resourceColumn', resource: resColl[resColl.length - 1],\n groupOrder: resData[res].groupOrder.slice(0, -1), resourceData: resData[res].resourceData,\n groupIndex: (lastLevelInfo.length - data.length), className: [cls.RESOURCE_NAME],\n date: agendaDate\n };\n lastLevelInfo[lastLevelInfo.length - data.length].push(tempObj);\n tempLastLevelInfo.push(extend({}, tempObj, null, true));\n break;\n }\n }\n }\n }\n var topResources = resColl.slice(0, -1);\n var tempGroupedData = [];\n var totalRowSpan = 0;\n for (var y = 0; y < topResources.length; y++) {\n var data = topResources[topResources.length - (y + 1)]\n .dataSource;\n for (var x = 0; x < data.length; x++) {\n var z = 0;\n for (var u = 0; u < tempLastLevelInfo.length; u++) {\n if (tempLastLevelInfo[u].groupOrder[topResources.length - (y + 1)] === data[x][topResources[topResources.length - (y + 1)].idField]) {\n totalRowSpan = totalRowSpan + tempLastLevelInfo[u].rowSpan;\n tempGroupedData.push(extend({}, tempLastLevelInfo[u], null, true));\n }\n if (++z === tempLastLevelInfo.length && tempGroupedData.length > 0) {\n tempGroupedData[0].rowSpan = totalRowSpan;\n tempGroupedData[0].type = 'parentColumnLevel_' + (y + 1);\n tempGroupedData[0].resource = topResources[topResources.length - (y + 1)];\n tempGroupedData[0].resourceData = data[x];\n tempGroupedData[0].date = agendaDate;\n lastLevelInfo[tempGroupedData[0].groupIndex].push(tempGroupedData[0]);\n tempGroupedData = [];\n totalRowSpan = 0;\n }\n }\n }\n }\n this.createResourceTableRow(lastLevelInfo, tBody);\n }\n }\n var totalCollection = this.parent.eventBase.filterEvents(initialDate, agendaLastDate);\n if (totalCollection.length === 0 && !this.parent.activeViewOptions.allowVirtualScrolling && this.parent.hideEmptyAgendaDays) {\n this.renderEmptyContent(tBody, initialDate);\n }\n };\n AgendaBase.prototype.createResourceTableRow = function (tContent, tBody) {\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var ntr;\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var tempData;\n var rowSpan = 0;\n var level;\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n var tContentCollection = [];\n var parentCollection = this.parent.resourceBase.resourceCollection.slice(0, -1);\n for (var w = 0; w < tContent.length; w++) {\n tContentCollection = tContentCollection.concat(tContent[w]);\n }\n level = (parentCollection.length > 0) ? 'parentColumnLevel_' + parentCollection.length : 'resourceColumn';\n var rowSpanCollection = new DataManager({ json: tContentCollection }).executeLocal(new Query()\n .where('type', 'equal', level));\n for (var x = 0; x < rowSpanCollection.length; x++) {\n rowSpan = rowSpan + rowSpanCollection[x].rowSpan;\n }\n }\n for (var row = 0; row < tContent.length; row++) {\n ntr = tr.cloneNode();\n for (var col = tContent[row].length - 1; col >= 0; col--) {\n var data = tContent[row][col];\n var ntd = td.cloneNode();\n if (data.type === 'dateColumn') {\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n tempData = tContent[row][col];\n continue;\n }\n ntd.setAttribute('data-date', data.date.getTime().toString());\n ntd.appendChild(this.createDateHeaderElement(data.date));\n var className = [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DATE_CLASS];\n if (data.text === 'lastRow') {\n className.push(cls.AGENDA_DAY_BORDER_CLASS);\n }\n addClass([ntd], className);\n ntr.appendChild(ntd);\n }\n else if (data.type === 'eventColumn') {\n var elementType = (data.eventData.length === 0) ? 'noEvents' : 'data';\n ntd = this.createAgendaContentElement(elementType, data.eventData, ntd, data.groupOrder, data.groupIndex);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n addClass([ntd], [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DAY_PADDING_CLASS]);\n }\n ntr.appendChild(ntd);\n }\n else {\n ntd.setAttribute('rowspan', data.rowSpan.toString());\n addClass([ntd], cls.AGENDA_RESOURCE_CLASS);\n this.viewBase.setResourceHeaderContent(ntd, data, data.className[0]);\n ntr.appendChild(ntd);\n }\n }\n if (this.parent.activeViewOptions.group.byDate && row === 0 && this.parent.currentView !== 'MonthAgenda') {\n var ntd = td.cloneNode();\n ntd.setAttribute('data-date', tempData.date.getTime().toString());\n ntd.setAttribute('rowspan', rowSpan.toString());\n ntd.appendChild(this.createDateHeaderElement(tempData.date));\n addClass([ntd], [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DATE_CLASS, cls.DATE_BORDER_CLASS]);\n var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), tempData.date.getTime());\n ntr.setAttribute('aria-rowindex', daysCount.toString());\n if (this.parent.element.querySelector(\".e-agenda-view tr[aria-rowindex=\\\"\" + daysCount + \"\\\"]\")) {\n break;\n }\n ntr.insertBefore(ntd, ntr.childNodes[0]);\n }\n tBody.appendChild(ntr);\n }\n };\n AgendaBase.prototype.createDateHeaderElement = function (date) {\n var dateHeader;\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n dateHeader = createElement('div', { className: cls.AGENDA_HEADER_CLASS });\n var templateArgs = { date: date, type: 'dateHeader' };\n var template = this.parent.getDateHeaderTemplate()(templateArgs);\n append([].slice.call(template), dateHeader);\n }\n else {\n dateHeader = this.viewBase.getMobileDateElement(date, cls.AGENDA_HEADER_CLASS);\n }\n return dateHeader;\n };\n AgendaBase.prototype.renderEmptyContent = function (tBody, agendaDate) {\n var eTr = this.createTableRowElement(agendaDate, 'noEvents');\n var eTd = eTr.children[0];\n var noEvents = createElement('div', {\n className: cls.AGENDA_EMPTY_EVENT_CLASS,\n innerHTML: this.parent.localeObj.getConstant('noEvents')\n });\n eTd.appendChild(noEvents);\n tBody.appendChild(eTr);\n };\n AgendaBase.prototype.createTableRowElement = function (date, type) {\n var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), date.getTime());\n var tr = createElement('tr', { attrs: { 'role': 'row', 'aria-rowindex': daysCount.toString() } });\n var td = createElement('td', {\n attrs: {\n 'class': (type === 'monthHeader') ? cls.AGENDA_MONTH_HEADER_CLASS : cls.AGENDA_CELLS_CLASS,\n 'role': 'gridcell',\n 'aria-selected': 'false',\n 'aria-colindex': daysCount.toString(),\n 'data-date': date.getTime().toString()\n }\n });\n var dTd = td.cloneNode();\n var aTd = td.cloneNode();\n tr.appendChild(dTd);\n if (type !== 'noEvents') {\n tr.appendChild(aTd);\n }\n return tr;\n };\n return AgendaBase;\n}());\nexport { AgendaBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { formatUnit, isNullOrUndefined, closest, extend } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, EventHandler } from '@syncfusion/ej2-base';\nimport { AgendaBase } from '../event-renderer/agenda-base';\nimport { ViewBase } from './view-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * agenda view\n */\nvar Agenda = /** @class */ (function (_super) {\n __extends(Agenda, _super);\n /**\n * Constructor for agenda view\n */\n function Agenda(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-agenda-view';\n _this.isInverseTableSelect = false;\n _this.agendaDates = {};\n _this.virtualScrollTop = 1;\n _this.minDate = new Date(1900, 0, 1);\n _this.maxDate = new Date(2099, 11, 31);\n _this.agendaBase = new AgendaBase(parent);\n return _this;\n }\n /**\n * Get module name.\n */\n Agenda.prototype.getModuleName = function () {\n return 'agenda';\n };\n Agenda.prototype.renderLayout = function () {\n this.agendaDates = {};\n this.element = createElement('div', { className: cls.TABLE_WRAP_CLASS });\n addClass([this.element], this.viewClass);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n var eTr = createElement('tr');\n this.element.querySelector('tbody').appendChild(eTr);\n var workTd = createElement('td');\n eTr.appendChild(workTd);\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n workTd.appendChild(wrap);\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n wrap.appendChild(tbl);\n var tBody = tbl.querySelector('tbody');\n var agendaDate = util.resetTime(this.parent.selectedDate);\n this.agendaBase.renderEmptyContent(tBody, agendaDate);\n this.wireEvents();\n if (this.parent.uiStateValues.isGroupAdaptive && !this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.parent.resourceBase.generateResourceLevels([{ renderDates: this.parent.activeView.renderDates }]);\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n Agenda.prototype.eventLoad = function (args) {\n this.dataSource = extend([], this.parent.eventsData, null, true);\n for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n delete event_1.generatedDates;\n }\n var eventCollection = args.processedData;\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n this.dataSource = this.parent.eventBase.filterEventsByResource(resource, this.dataSource);\n eventCollection = this.parent.eventBase.filterEventsByResource(resource, eventCollection);\n }\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(eventCollection);\n var agendaDate = util.resetTime(this.parent.selectedDate);\n var tBody = this.parent.getContentTable();\n tBody.innerHTML = '';\n this.renderContent(tBody, agendaDate);\n this.agendaBase.wireEventActions();\n var contentArea = closest(tBody, '.' + cls.CONTENT_WRAP_CLASS);\n contentArea.scrollTop = 1;\n };\n Agenda.prototype.refreshEvent = function (refreshDate) {\n var processedData = [];\n for (var _i = 0, _a = this.dataSource; _i < _a.length; _i++) {\n var eventData = _a[_i];\n var fields = this.parent.eventFields;\n var data = eventData;\n if (isNullOrUndefined(data[fields.recurrenceID]) && !isNullOrUndefined(data[fields.recurrenceRule]) &&\n !isNullOrUndefined(data.generatedDates) && refreshDate >= data.generatedDates.end) {\n processedData = processedData.concat(this.parent.eventBase.generateOccurrence(data, refreshDate));\n }\n }\n this.parent.eventsProcessed = this.parent.eventsProcessed.concat(this.agendaBase.processAgendaEvents(processedData));\n };\n Agenda.prototype.renderContent = function (tBody, agendaDate) {\n var fieldMapping = this.parent.eventFields;\n var firstDate = new Date(agendaDate.getTime());\n var lastDate = this.getEndDateFromStartDate(firstDate);\n var isObject = this.appointmentFiltering(firstDate, lastDate);\n if (isObject.length === 0) {\n lastDate = firstDate;\n firstDate = new Date(this.minDate.getTime());\n isObject = this.appointmentFiltering(firstDate, lastDate);\n if (isObject.length === 0) {\n firstDate = lastDate;\n lastDate = new Date(this.maxDate.getTime());\n isObject = this.appointmentFiltering(firstDate, lastDate);\n }\n }\n if (isObject.length > 0) {\n var appoint = isObject;\n agendaDate = appoint[0][fieldMapping.startTime];\n agendaDate = new Date(new Date(agendaDate.getTime()).setHours(0, 0, 0, 0));\n this.updateHeaderText(appoint[0][fieldMapping.startTime]);\n }\n var endDate;\n if (!this.parent.hideEmptyAgendaDays || (this.parent.agendaDaysCount > 0 && isObject.length > 0)) {\n var noOfDays = (!this.parent.hideEmptyAgendaDays || !this.parent.activeViewOptions.allowVirtualScrolling ||\n this.parent.agendaDaysCount < isObject.length) ? this.parent.agendaDaysCount : isObject.length;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var date = agendaDate;\n if (!this.parent.activeViewOptions.group.byDate) {\n this.parent.activeViewOptions.allowVirtualScrolling = false;\n date = firstDate;\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n this.parent.headerModule.updateHeaderItems('remove');\n }\n }\n this.agendaBase.calculateResourceTableElement(tBody, this.parent.agendaDaysCount, date);\n }\n else {\n for (var day = 0; day < noOfDays; day++) {\n var filterData = [];\n filterData = this.appointmentFiltering(agendaDate);\n var nTr = this.agendaBase.createTableRowElement(agendaDate, 'data');\n if (this.element.querySelector('tr[aria-rowindex=\"' + parseInt(nTr.getAttribute('aria-rowindex'), 10)\n + '\"]')) {\n continue;\n }\n // if (this.isMonthFirstDate(agendaDate)) {\n // tBody.appendChild(this.renderMonthHeader(this.createTableRowElement(agendaDate, 'monthHeader')));\n // }\n var dTd = nTr.children[0];\n var aTd = nTr.children[1];\n if (filterData.length > 0 || (!this.parent.hideEmptyAgendaDays && filterData.length === 0)) {\n var elementType = (!this.parent.hideEmptyAgendaDays && filterData.length === 0) ? 'noEvents' : 'data';\n dTd.appendChild(this.agendaBase.createDateHeaderElement(agendaDate));\n nTr.appendChild(dTd);\n var cTd = this.agendaBase.createAgendaContentElement(elementType, filterData, aTd);\n nTr.appendChild(cTd);\n if (cTd.querySelectorAll('li').length > 0) {\n tBody.appendChild(nTr);\n }\n }\n else if (this.parent.activeViewOptions.allowVirtualScrolling) {\n day--;\n }\n if (this.isCurrentDate(new Date(agendaDate.getTime()))) {\n addClass(dTd.childNodes, cls.AGENDA_CURRENT_DAY_CLASS);\n }\n agendaDate = util.addDays(agendaDate, 1);\n if (agendaDate.getTime() > lastDate.getTime()) {\n break;\n }\n }\n }\n endDate = new Date(agendaDate.getTime() - util.MS_PER_DAY);\n }\n else {\n this.agendaBase.renderEmptyContent(tBody, agendaDate);\n endDate = util.addDays(agendaDate, this.parent.agendaDaysCount - 1);\n }\n this.agendaDates = { start: firstDate, end: endDate };\n };\n // private renderMonthHeader(mTr: Element): Element {\n // mTr.removeAttribute('aria-rowindex');\n // for (let td of [].slice.call(mTr.childNodes)) {\n // td.removeAttribute('aria-colindex');\n // }\n // let headerDate: Date = new Date(parseInt(mTr.children[0].getAttribute('data-date'), 10));\n // let div: Element = createElement('div', {\n // className: cls.DATE_HEADER_CLASS,\n // innerHTML: headerDate.toLocaleString(this.parent.locale, { month: 'long' }) + ' ' + headerDate.getFullYear()\n // });\n // mTr.lastElementChild.appendChild(div);\n // return mTr;\n // }\n Agenda.prototype.agendaScrolling = function (event) {\n this.parent.quickPopup.quickPopupHide();\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n this.virtualScrolling(event);\n }\n };\n Agenda.prototype.virtualScrolling = function (event) {\n var target = event.target;\n var scrollTop = target.scrollTop;\n var scrollHeight = target.scrollHeight;\n var offsetHeight = target.clientHeight;\n var totalHeight = scrollTop + offsetHeight;\n var direction = (this.virtualScrollTop < scrollTop) ? 'next' : 'previous';\n var tBody = target.querySelector('tbody');\n var emptyTBody = createElement('tbody');\n var topElement = this.getElementFromScrollerPosition(event, direction);\n var scrollDate = new Date(parseInt(topElement.getAttribute('data-date'), 0));\n var filterDate;\n var filterData;\n if (scrollTop === 0) {\n filterDate = this.getPreviousNextDate(util.addDays(scrollDate, -1), direction);\n filterData = this.appointmentFiltering(filterDate.start, filterDate.end);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n this.renderContent(emptyTBody, filterDate.start);\n tBody.innerHTML = emptyTBody.innerHTML + tBody.innerHTML;\n this.agendaBase.wireEventActions();\n for (var s = 0, element = tBody.children; s < element.length; s++) {\n if (element[s].getAttribute('aria-rowindex') === topElement.getAttribute('aria-colindex')) {\n var scrollToValue = element[s].offsetTop -\n this.element.querySelector('.e-agenda-item').offsetHeight;\n target.scrollTop = scrollToValue;\n break;\n }\n }\n this.updateHeaderText(scrollDate);\n }\n }\n else if (totalHeight === scrollHeight) {\n filterDate = this.getPreviousNextDate(util.addDays(scrollDate, 1), direction);\n filterData = this.appointmentFiltering(filterDate.start, filterDate.end);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n this.renderContent(emptyTBody, filterDate.start);\n tBody.innerHTML += emptyTBody.innerHTML;\n this.agendaBase.wireEventActions();\n this.updateHeaderText(scrollDate);\n }\n }\n else {\n this.updateHeaderText(scrollDate);\n }\n this.virtualScrollTop = scrollTop;\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n if (selectedElements.length > 0) {\n selectedElements[selectedElements.length - 1].focus();\n }\n };\n Agenda.prototype.getElementFromScrollerPosition = function (event, direction) {\n var filterElement;\n var target = event.target;\n var scrollTop = target.scrollTop;\n var scrollHeight = target.scrollHeight;\n var offsetHeight = target.clientHeight;\n var totalHeight = scrollTop + offsetHeight;\n var liCollection = [].slice.call(target.querySelectorAll('.e-agenda-item'));\n var li;\n var liDetails;\n if (liCollection.length > 0) {\n if (scrollTop === 0) {\n li = liCollection[0];\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n }\n else if (totalHeight === scrollHeight) {\n li = liCollection[liCollection.length - 1];\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n }\n else {\n for (var a = 0, length_1 = liCollection.length; a < length_1; a++) {\n li = liCollection[a];\n liDetails = li.getBoundingClientRect();\n if (liDetails.top >= 0) {\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n break;\n }\n }\n }\n }\n return filterElement;\n };\n Agenda.prototype.updateHeaderText = function (date) {\n if (this.parent.showHeaderBar) {\n this.parent.headerModule.updateDateRange(this.getDateRangeText(date));\n }\n };\n Agenda.prototype.getPreviousNextDate = function (date, type) {\n var currentDate = new Date(date.getTime());\n var firstDate = this.getStartDateFromEndDate(date);\n var lastDate = this.getEndDateFromStartDate(date);\n var daysCount = 0;\n do {\n var filterData = this.appointmentFiltering(currentDate);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n daysCount++;\n }\n currentDate = util.addDays(currentDate, (type === 'next') ? 1 : -1);\n if (currentDate < firstDate || currentDate > lastDate) {\n break;\n }\n } while (daysCount !== this.parent.agendaDaysCount);\n var endDate = util.addDays(currentDate, (type === 'next') ? -1 : 1);\n return (type === 'next') ? { start: date, end: util.addDays(endDate, 1) } : { start: endDate, end: util.addDays(date, 1) };\n };\n Agenda.prototype.appointmentFiltering = function (startDate, endDate) {\n var dateStart;\n var dateEnd;\n if (!isNullOrUndefined(startDate) && isNullOrUndefined(endDate)) {\n dateStart = util.resetTime(new Date(startDate.getTime()));\n dateEnd = util.setTime(new Date(dateStart.getTime()), util.MS_PER_DAY);\n }\n else {\n dateStart = new Date(startDate.getTime());\n dateEnd = new Date(endDate.getTime());\n }\n var filterData = this.parent.eventBase.filterEvents(dateStart, dateEnd);\n if (filterData.length === 0) {\n this.refreshEvent(startDate);\n filterData = this.parent.eventBase.filterEvents(dateStart, dateEnd);\n }\n return filterData;\n };\n Agenda.prototype.getStartDateFromEndDate = function (endDate) {\n var filterDate;\n var fieldMapping = this.parent.eventFields;\n if (this.parent.eventsProcessed.length > 0) {\n var firstDate = Math.min.apply(Math, this.parent.eventsProcessed.map(function (a) {\n var date = a[fieldMapping.startTime];\n return date.getTime();\n }));\n filterDate = this.parent.hideEmptyAgendaDays ? new Date(firstDate) : this.minDate;\n }\n else {\n filterDate = this.parent.hideEmptyAgendaDays ? util.addMonths(endDate, -1) : this.minDate;\n }\n return util.resetTime(filterDate);\n };\n Agenda.prototype.getEndDateFromStartDate = function (startDate) {\n var filterDate;\n var fieldMapping = this.parent.eventFields;\n if (this.parent.eventsProcessed.length > 0) {\n var lastDate = Math.max.apply(Math, this.parent.eventsProcessed.map(function (a) {\n var date = a[fieldMapping.endTime];\n return date.getTime();\n }));\n filterDate = this.parent.hideEmptyAgendaDays ? new Date(lastDate) : this.maxDate;\n }\n else {\n filterDate = this.parent.hideEmptyAgendaDays ? util.addMonths(startDate, 1) : this.maxDate;\n }\n return util.resetTime(util.addDays(filterDate, 1));\n };\n Agenda.prototype.getNextPreviousDate = function (type) {\n var noOfDays = (type === 'next') ? 1 : -1;\n return util.addDays(this.parent.selectedDate, noOfDays);\n };\n Agenda.prototype.startDate = function () {\n return util.resetTime(this.parent.selectedDate);\n };\n Agenda.prototype.endDate = function () {\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n return this.getEndDateFromStartDate(this.startDate());\n }\n else {\n return util.addDays(this.startDate(), this.parent.agendaDaysCount);\n }\n };\n Agenda.prototype.getDateRangeText = function (date) {\n var formatDate = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';\n if (this.parent.activeViewOptions.allowVirtualScrolling || this.parent.isAdaptive) {\n var currentDate = isNullOrUndefined(date) ? this.parent.selectedDate : date;\n return this.parent.globalize.formatDate(currentDate, { format: formatDate });\n }\n else {\n var startDate = this.parent.selectedDate;\n var endDate = util.addDays(startDate, this.parent.agendaDaysCount - 1);\n return this.formatDateRange(startDate, endDate);\n }\n };\n Agenda.prototype.dayNavigationClick = function (e) {\n var date = this.parent.getDateFromElement(closest(e.currentTarget, '.' + cls.AGENDA_CELLS_CLASS));\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n };\n // private isMonthFirstDate(date: Date): boolean {\n // return date.getDate() === 1;\n // }\n Agenda.prototype.wireEvents = function () {\n EventHandler.add(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), event.scroll, this.agendaScrolling, this);\n };\n Agenda.prototype.unWireEvents = function () {\n EventHandler.remove(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), event.scroll, this.agendaScrolling);\n var dateHeaderElement = [].slice.call(this.element.querySelectorAll('.e-m-date'));\n for (var _i = 0, dateHeaderElement_1 = dateHeaderElement; _i < dateHeaderElement_1.length; _i++) {\n var element = dateHeaderElement_1[_i];\n EventHandler.remove(element, 'click', this.dayNavigationClick);\n }\n };\n Agenda.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.onAgendaScrollUiUpdate, this);\n this.parent.on(event.dataReady, this.eventLoad, this);\n };\n Agenda.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.onAgendaScrollUiUpdate);\n this.parent.off(event.dataReady, this.eventLoad);\n };\n Agenda.prototype.onAgendaScrollUiUpdate = function () {\n var headerHeight = this.getHeaderBarHeight();\n if (this.parent.headerModule) {\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n this.parent.headerModule.updateHeaderItems('add');\n }\n else {\n this.parent.headerModule.updateHeaderItems('remove');\n }\n }\n var contentArea = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n contentArea.style.height = formatUnit(this.parent.element.offsetHeight - headerHeight);\n };\n /**\n * To destroy the agenda.\n * @return {void}\n * @private\n */\n Agenda.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n this.unWireEvents();\n if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\n remove(this.element);\n this.element = null;\n if (this.parent.headerModule && this.parent.activeViewOptions.allowVirtualScrolling) {\n this.parent.headerModule.updateHeaderItems('remove');\n }\n }\n };\n return Agenda;\n}(ViewBase));\nexport { Agenda };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { createElement, addClass, formatUnit, remove } from '@syncfusion/ej2-base';\nimport { AgendaBase } from '../event-renderer/agenda-base';\nimport { Month } from './month';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * month agenda view\n */\nvar MonthAgenda = /** @class */ (function (_super) {\n __extends(MonthAgenda, _super);\n /**\n * Constructor\n */\n function MonthAgenda(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dayNameFormat = 'narrow';\n _this.viewClass = 'e-month-agenda-view';\n _this.agendaDates = {};\n _this.agendaBase = new AgendaBase(parent);\n return _this;\n }\n MonthAgenda.prototype.renderAppointmentContainer = function () {\n var contentArea = this.getContentAreaElement();\n var wrapperContainer = createElement('div', { className: cls.WRAPPER_CONTAINER_CLASS });\n contentArea.appendChild(wrapperContainer);\n var appWrap = createElement('div', { className: cls.APPOINTMENT_WRAP_CLASS });\n wrapperContainer.appendChild(appWrap);\n this.appendAppContainer(appWrap);\n this.setEventWrapperHeight();\n };\n MonthAgenda.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive) {\n return 'narrow';\n }\n return 'abbreviated';\n };\n MonthAgenda.prototype.setEventWrapperHeight = function () {\n var headerHeight = (this.parent.headerModule ? this.parent.headerModule.getHeaderElement().offsetHeight : 0) + 2;\n var resourceWrapper = this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR);\n if (resourceWrapper) {\n headerHeight += resourceWrapper.offsetHeight;\n }\n var contentArea = this.getContentAreaElement().firstChild;\n var dateHeader = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n var availableHeight = this.parent.element.offsetHeight - headerHeight - dateHeader.offsetHeight - contentArea.offsetHeight;\n var wrapperContainer = this.element.querySelector('.' + cls.WRAPPER_CONTAINER_CLASS);\n var eventWrapper = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n wrapperContainer.style.height = eventWrapper.style.height = formatUnit(availableHeight);\n };\n MonthAgenda.prototype.onDataReady = function (args) {\n this.setEventWrapperHeight();\n this.clearElements();\n var eventCollection = args.processedData;\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n eventCollection = this.parent.eventBase.filterEventsByResource(resource, eventCollection);\n }\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(eventCollection);\n var count = 0;\n for (var _i = 0, _a = this.renderDates; _i < _a.length; _i++) {\n var date = _a[_i];\n var filterData = this.appointmentFiltering(date);\n var workCell = this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS)[count];\n if (filterData.length > 0) {\n if (!workCell.querySelector('.' + cls.APPOINTMENT_INDICATOR_CLASS)) {\n workCell.appendChild(createElement('div', { className: cls.APPOINTMENT_INDICATOR_CLASS }));\n }\n if (date.getTime() === util.resetTime(new Date(this.parent.selectedDate.getTime())).getTime()) {\n this.onEventRender(filterData, date);\n }\n }\n count++;\n }\n };\n MonthAgenda.prototype.onCellClick = function (event) {\n this.parent.quickPopup.quickPopupHide();\n var filterData = this.appointmentFiltering(event.startTime);\n this.onEventRender(filterData, event.startTime);\n this.parent.setProperties({ selectedDate: new Date('' + event.startTime) }, true);\n };\n MonthAgenda.prototype.onEventRender = function (events, date) {\n var appWrap = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n appWrap.innerHTML = '';\n if (this.parent.activeViewOptions.group.resources.length === 0 || this.parent.uiStateValues.isGroupAdaptive) {\n if (events.length > 0) {\n var appContainer = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n appWrap.appendChild(this.agendaBase.\n createAgendaContentElement('data', events, appContainer));\n }\n else {\n this.appendAppContainer(appWrap);\n }\n }\n else {\n if (events.length > 0) {\n var table = this.createTableLayout();\n var tBody = table.querySelector('tbody');\n this.agendaBase.calculateResourceTableElement(tBody, 1, date);\n table.appendChild(tBody);\n appWrap.appendChild(table);\n }\n else {\n this.appendAppContainer(appWrap);\n }\n }\n this.agendaBase.wireEventActions();\n };\n MonthAgenda.prototype.appointmentFiltering = function (date) {\n var dateStart = util.resetTime(new Date(date.getTime()));\n var dateEnd = util.setTime(new Date(dateStart.getTime()), util.MS_PER_DAY);\n return this.parent.eventBase.filterEvents(dateStart, dateEnd);\n };\n MonthAgenda.prototype.clearElements = function () {\n var appointmentIndicators = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_INDICATOR_CLASS));\n for (var _i = 0, appointmentIndicators_1 = appointmentIndicators; _i < appointmentIndicators_1.length; _i++) {\n var appointmentIndicator = appointmentIndicators_1[_i];\n remove(appointmentIndicator);\n }\n this.appendAppContainer(this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS));\n };\n MonthAgenda.prototype.appendAppContainer = function (appWrap) {\n var app = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n addClass([app], cls.AGENDA_NO_EVENT_CLASS);\n app.innerHTML = this.parent.localeObj.getConstant('noEvents');\n appWrap.innerHTML = '';\n appWrap.appendChild(app);\n };\n /**\n * Get module name.\n */\n MonthAgenda.prototype.getModuleName = function () {\n return 'monthAgenda';\n };\n return MonthAgenda;\n}(Month));\nexport { MonthAgenda };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined, setStyleAttribute, extend, EventHandler } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\nimport { MonthEvent } from './month';\nvar EVENT_GAP = 2;\n/**\n * Timeline view events render\n */\nvar TimelineEvent = /** @class */ (function (_super) {\n __extends(TimelineEvent, _super);\n /**\n * Constructor for timeline views\n */\n function TimelineEvent(parent, type) {\n var _this = _super.call(this, parent) || this;\n _this.startHour = _this.parent.activeView.getStartHour();\n _this.endHour = _this.parent.activeView.getEndHour();\n _this.slotCount = _this.parent.activeViewOptions.timeScale.slotCount;\n _this.interval = _this.parent.activeViewOptions.timeScale.interval;\n _this.day = 0;\n _this.renderType = type;\n _this.appContainers = [].slice.call(_this.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));\n _this.dayLength = _this.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr')[0].children.length;\n _this.content = _this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n return _this;\n }\n TimelineEvent.prototype.getSlotDates = function () {\n this.slots = [];\n this.slots.push(this.parent.activeView.renderDates.map(function (date) { return +date; }));\n };\n TimelineEvent.prototype.getOverlapEvents = function (date, appointments) {\n var appointmentsList = [];\n if (this.renderType === 'day') {\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(new Date(date.getTime())).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(new Date(date.getTime())).getTime())) {\n appointmentsList.push(app);\n }\n }\n }\n else {\n for (var _a = 0, appointments_2 = appointments; _a < appointments_2.length; _a++) {\n var app = appointments_2[_a];\n var eventData = app.data;\n if (eventData[this.fields.startTime].getTime() <= date.getTime() &&\n eventData[this.fields.endTime].getTime() > date.getTime()) {\n appointmentsList.push(app);\n }\n }\n }\n return appointmentsList;\n };\n TimelineEvent.prototype.renderResourceEvents = function () {\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel;\n for (var i = 0; i < resources.length; i++) {\n this.renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays, resources[i]);\n }\n };\n TimelineEvent.prototype.renderEvents = function (event, resIndex) {\n if (this.parent.headerRows.length > 0 &&\n this.parent.headerRows[this.parent.headerRows.length - 1].option !== 'Hour') {\n this.renderType = 'day';\n this.cellWidth = this.content.offsetWidth / this.dateRender.length;\n this.slotsPerDay = 1;\n }\n else {\n this.slotsPerDay = (this.dayLength / this.dateRender.length);\n }\n var wrapIndex = this.parent.uiStateValues.isGroupAdaptive ? 0 : resIndex;\n var eventData = event.data;\n var startTime = this.getStartTime(event, eventData);\n var endTime = this.getEndTime(event, eventData);\n this.day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime())));\n if (this.day < 0) {\n return;\n }\n var currentDate = util.resetTime(new Date(this.dateRender[this.day].getTime()));\n var schedule = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var overlapCount = this.getIndex(startTime);\n event.Index = overlapCount;\n var appHeight = this.eventHeight;\n var diffInDays = eventData.count;\n if (startTime <= endTime) {\n var appWidth = 0;\n var appLeft = 0;\n var appRight = 0;\n var position = 0;\n if (this.renderType === 'day' || event[this.fields.isAllDay]) {\n appWidth = this.renderType === 'day' ? (((diffInDays * this.slotsPerDay) * this.cellWidth) - 2) :\n ((diffInDays * this.slotsPerDay) * this.cellWidth);\n position = ((this.day * this.slotsPerDay) * this.cellWidth);\n }\n else {\n appWidth = this.getNormalEventsWidth(startTime, endTime, diffInDays);\n position = this.getPosition(schedule, startTime, endTime, this.day);\n position = position * this.cellWidth;\n }\n appWidth = (appWidth === 0) ? this.cellWidth : appWidth; // appWidth 0 when start and end time as same\n this.renderedEvents.push(extend({}, event, null, true));\n var cellTd = this.appContainers[wrapIndex];\n var top_1 = this.getRowTop(resIndex);\n var appTop = (top_1 + EVENT_GAP) + (overlapCount * (appHeight + EVENT_GAP));\n appLeft = (this.parent.enableRtl) ? 0 : position;\n appRight = (this.parent.enableRtl) ? position : 0;\n if (this.cellHeight > ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight) {\n var appointmentElement = this.createAppointmentElement(event, resIndex);\n this.applyResourceColor(appointmentElement, event, 'backgroundColor', this.groupOrder);\n this.wireAppointmentEvents(appointmentElement);\n setStyleAttribute(appointmentElement, {\n 'width': appWidth + 'px', 'left': appLeft + 'px', 'right': appRight + 'px', 'top': appTop + 'px'\n });\n this.renderEventElement(event, appointmentElement, cellTd);\n }\n else {\n for (var i = 0; i < diffInDays; i++) {\n var cellTd_1 = this.appContainers[wrapIndex];\n var moreIndicator = cellTd_1.querySelector('.' + cls.MORE_INDICATOR_CLASS);\n var appPos = (this.parent.enableRtl) ? appRight : appLeft;\n appPos = (Math.floor(appPos / this.cellWidth) * this.cellWidth);\n if ((cellTd_1 && isNullOrUndefined(moreIndicator)) ||\n (!this.isAlreadyAvail(appPos, cellTd_1))) {\n var interval = this.interval / this.slotCount;\n var startDate = new Date(this.dateRender[this.day + i].getTime());\n var endDate = util.addDays(this.dateRender[this.day + i], 1);\n var slotStartTime = (new Date(startTime.setMinutes(Math.floor(startTime.getMinutes() / interval) * interval)));\n var slotEndTime = new Date(slotStartTime.getTime() + (60000 * interval));\n var groupIndex = void 0;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !isNullOrUndefined(resIndex)) {\n groupIndex = resIndex.toString();\n }\n var filterEvents = this.getFilterEvents(startDate, endDate, slotStartTime, slotEndTime, groupIndex);\n var appArea = this.cellHeight - this.moreIndicatorHeight;\n var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));\n var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);\n var moreIndicatorElement = void 0;\n if (this.renderType === 'day') {\n moreIndicatorElement = this.getMoreIndicatorElement(count, startDate, endDate);\n }\n else {\n moreIndicatorElement = this.getMoreIndicatorElement(count, slotStartTime, slotEndTime);\n }\n if (!isNullOrUndefined(groupIndex)) {\n moreIndicatorElement.setAttribute('data-group-index', groupIndex);\n }\n moreIndicatorElement.style.top = top_1 + appArea + 'px';\n moreIndicatorElement.style.width = this.cellWidth + 'px';\n moreIndicatorElement.style.left = (Math.floor(appLeft / this.cellWidth) * this.cellWidth) + 'px';\n moreIndicatorElement.style.right = (Math.floor(appRight / this.cellWidth) * this.cellWidth) + 'px';\n this.renderElement(cellTd_1, moreIndicatorElement);\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n }\n }\n }\n };\n TimelineEvent.prototype.getStartTime = function (event, eventData) {\n var startTime = event[this.fields.startTime];\n var schedule = util.getStartEndHours(startTime, this.startHour, this.endHour);\n if (schedule.startHour.getTime() >= eventData[this.fields.startTime]) {\n startTime = schedule.startHour;\n }\n else if (schedule.endHour.getTime() <= eventData[this.fields.startTime]) {\n startTime = this.getNextDay(schedule.startHour, eventData);\n }\n else {\n startTime = eventData[this.fields.startTime];\n }\n // To overcome the overflow\n if (event[this.fields.isAllDay]) {\n eventData[this.fields.startTime] = schedule.startHour;\n }\n return startTime;\n };\n TimelineEvent.prototype.getNextDay = function (startTime, eventData) {\n var startDate;\n for (var i = 1; i <= this.dateRender.length; i++) {\n startDate = util.addDays(startTime, i);\n if (this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime()))) !== -1) {\n eventData.count = eventData.count - 1;\n return startDate;\n }\n }\n return startDate;\n };\n TimelineEvent.prototype.getEndTime = function (event, eventData) {\n var endTime = event[this.fields.endTime];\n var schedule = util.getStartEndHours(endTime, this.startHour, this.endHour);\n if (schedule.endHour.getTime() <= eventData[this.fields.endTime]) {\n endTime = schedule.endHour;\n }\n else {\n endTime = eventData[this.fields.endTime];\n }\n // To overcome the overflow\n if (event[this.fields.isAllDay]) {\n eventData[this.fields.endTime] = schedule.endHour;\n }\n return endTime;\n };\n TimelineEvent.prototype.getNormalEventsWidth = function (startDate, endDate, diffInDays) {\n if (this.isSameDay(startDate, endDate)) {\n return this.getSameDayEventsWidth(startDate, endDate);\n }\n else {\n return this.getSpannedEventsWidth(startDate, endDate, diffInDays);\n }\n };\n TimelineEvent.prototype.getSameDayEventsWidth = function (startDate, endDate) {\n return (((endDate.getTime() - startDate.getTime())) / (60 * 1000) * (this.cellWidth * this.slotCount) / this.interval);\n };\n TimelineEvent.prototype.getSpannedEventsWidth = function (startDate, endDate, diffInDays) {\n var width = (diffInDays * this.slotsPerDay) * this.cellWidth;\n var startWidth;\n var endWidth;\n var start = util.getStartEndHours(util.resetTime(new Date(startDate.getTime())), this.startHour, this.endHour);\n startWidth = this.getSameDayEventsWidth(start.startHour, startDate);\n if (this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(endDate.getTime()))) === -1) {\n endWidth = 0;\n }\n else {\n var end = util.getStartEndHours(util.resetTime(new Date(endDate.getTime())), this.startHour, this.endHour);\n endWidth = this.getSameDayEventsWidth(endDate, end.endHour);\n endWidth = ((this.slotsPerDay * this.cellWidth) === endWidth) ? 0 : endWidth;\n }\n var spannedWidth = startWidth + endWidth;\n return (width > spannedWidth) ? width - spannedWidth : endWidth - startWidth;\n };\n TimelineEvent.prototype.isSameDay = function (startTime, endTime) {\n var startDay = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(startTime.getTime())));\n var endDay = this.parent.getIndexOfDate(this.dateRender, util.resetTime(new Date(endTime.getTime())));\n return (startDay === endDay);\n };\n TimelineEvent.prototype.getAppointmentLeft = function (schedule, startTime, endTime, day) {\n var slotTd = (this.isSameDay(startTime, schedule.startHour)) ?\n ((startTime.getTime() - schedule.startHour.getTime()) / ((60 * 1000) * this.interval)) * this.slotCount : 0;\n if (day === 0) {\n return slotTd;\n }\n else {\n var daySlot = (((schedule.endHour.getTime() - schedule.startHour.getTime()) / (60 * 1000)) / this.interval) * this.slotCount;\n return (daySlot * day) + slotTd;\n }\n };\n TimelineEvent.prototype.getPosition = function (schedule, startTime, endTime, day) {\n if (schedule.endHour.getTime() <= endTime.getTime() && schedule.startHour.getTime() >= startTime.getTime()) {\n return this.getAppointmentLeft(schedule, schedule.startHour, schedule.endHour, day);\n }\n else if (schedule.endHour.getTime() <= endTime.getTime()) {\n return this.getAppointmentLeft(schedule, startTime, schedule.endHour, day);\n }\n else if (schedule.startHour.getTime() >= startTime.getTime()) {\n return this.getAppointmentLeft(schedule, schedule.startHour, endTime, day);\n }\n else {\n return this.getAppointmentLeft(schedule, startTime, endTime, day);\n }\n };\n TimelineEvent.prototype.getFilterEvents = function (startDate, endDate, startTime, endTime, gIndex) {\n if (this.renderType === 'day') {\n return this.getFilteredEvents(startDate, endDate, gIndex);\n }\n else {\n return this.getFilteredEvents(startTime, endTime, gIndex);\n }\n };\n TimelineEvent.prototype.isAlreadyAvail = function (appPos, cellTd) {\n var moreIndicator = [].slice.call(cellTd.querySelectorAll('.' + cls.MORE_INDICATOR_CLASS));\n for (var i = 0; i < moreIndicator.length; i++) {\n var indicatorPos = void 0;\n if (moreIndicator) {\n indicatorPos = (this.parent.enableRtl) ? moreIndicator[i].style.right : moreIndicator[i].style.left;\n }\n if (parseInt(indicatorPos, 10) === Math.floor(appPos)) {\n return true;\n }\n }\n return false;\n };\n TimelineEvent.prototype.getRowTop = function (resIndex) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var tr = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS +\n ' tbody tr:nth-child(' + (resIndex + 1) + ')');\n return tr.offsetTop;\n }\n return 0;\n };\n return TimelineEvent;\n}(MonthEvent));\nexport { TimelineEvent };\n","import { createElement, compile, append } from '@syncfusion/ej2-base';\nimport { MS_PER_DAY, getWeekNumber } from '../base/util';\n/**\n * timeline header\n */\nvar TimelineHeaderRow = /** @class */ (function () {\n function TimelineHeaderRow(parent, renderDates) {\n this.parent = parent;\n this.renderDates = renderDates;\n }\n TimelineHeaderRow.prototype.groupByYear = function (dates) {\n var result = {};\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var d = dates_1[_i];\n var key = d.getFullYear();\n result[key] = result[key] || [];\n result[key].push(d);\n }\n return result;\n };\n TimelineHeaderRow.prototype.groupByMonth = function (dates) {\n var result = {};\n for (var _i = 0, dates_2 = dates; _i < dates_2.length; _i++) {\n var d = dates_2[_i];\n var key = (d.getFullYear() - 1970) * 12 + d.getMonth();\n result[key] = result[key] || [];\n result[key].push(d);\n }\n return result;\n };\n TimelineHeaderRow.prototype.groupByWeek = function (dates) {\n var result = {};\n for (var _i = 0, dates_3 = dates; _i < dates_3.length; _i++) {\n var d = dates_3[_i];\n var jsDate = +new Date(1970, 0, 1);\n var key = Math.ceil(((((+d - jsDate)) / MS_PER_DAY) + new Date(jsDate).getDay() + 1) / 7);\n result[key] = result[key] || [];\n result[key].push(d);\n }\n return result;\n };\n TimelineHeaderRow.prototype.generateSlots = function (data, colspan, template, tempFn, cls, type) {\n var _this = this;\n var tdDatas = [];\n var customHelper = {\n getYear: function (dt) {\n return _this.parent.globalize.formatDate(dt, { format: 'y' });\n },\n getMonth: function (dt) {\n return _this.parent.globalize.formatDate(dt, { format: 'MMMM' });\n },\n getWeekNumber: function (dt) {\n return getWeekNumber(dt);\n }\n };\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var dates = data[keys[i]];\n var content = void 0;\n var ele = createElement('div');\n var htmlCol = void 0;\n if (!tempFn) {\n htmlCol = compile(template, customHelper)({ date: dates[0] });\n }\n else {\n var args = { date: dates[0], type: type };\n htmlCol = tempFn(args);\n }\n append([].slice.call(htmlCol), ele);\n content = ele.innerHTML;\n tdDatas.push({\n date: dates[0], type: type, className: [cls], colSpan: dates.length * colspan, text: content\n });\n }\n return tdDatas;\n };\n TimelineHeaderRow.prototype.generateColumnLevels = function (dateSlots, hourSlots) {\n var levels = [];\n var rows = this.parent.activeViewOptions.headerRows;\n var lastLevelColspan = 1;\n if (rows[rows.length - 1].option === 'Hour' && hourSlots.length > 0) {\n lastLevelColspan = hourSlots.length / dateSlots.length;\n }\n var tdDatas = [];\n var templateFn;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n switch (row.option) {\n case 'Year':\n templateFn = row.template ? this.parent.templateParser(row.template) : undefined;\n var yearTemplate = '${getYear(date)}';\n var byYear = this.groupByYear(this.renderDates);\n tdDatas = this.generateSlots(byYear, lastLevelColspan, yearTemplate, templateFn, 'e-header-year-cell', 'yearHeader');\n levels.push(tdDatas);\n break;\n case 'Month':\n templateFn = row.template ? this.parent.templateParser(row.template) : undefined;\n var monthTemp = '${getMonth(date)}';\n var byMonth = this.groupByMonth(this.renderDates);\n tdDatas = this.generateSlots(byMonth, lastLevelColspan, monthTemp, templateFn, 'e-header-month-cell', 'monthHeader');\n levels.push(tdDatas);\n break;\n case 'Week':\n templateFn = row.template ? this.parent.templateParser(row.template) : undefined;\n var weekTemplate = '${getWeekNumber(date)}';\n var byWeek = this.groupByWeek(this.renderDates);\n tdDatas = this.generateSlots(byWeek, lastLevelColspan, weekTemplate, templateFn, 'e-header-week-cell', 'weekHeader');\n levels.push(tdDatas);\n break;\n case 'Date':\n tdDatas = dateSlots;\n tdDatas = tdDatas.map(function (value) {\n value.colSpan = lastLevelColspan;\n return value;\n });\n levels.push(tdDatas);\n break;\n case 'Hour':\n if (hourSlots.length > 0) {\n levels.push(hourSlots);\n }\n break;\n }\n }\n return levels;\n };\n return TimelineHeaderRow;\n}());\nexport { TimelineHeaderRow };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { isNullOrUndefined, createElement, prepend, extend, formatUnit } from '@syncfusion/ej2-base';\nimport { VerticalView } from './vertical-view';\nimport { TimelineEvent } from '../event-renderer/timeline-view';\nimport * as cls from '../base/css-constant';\nimport { getDateInMs, resetTime } from '../base/util';\nimport { TimelineHeaderRow } from './timeline-header-row';\n/**\n * timeline view\n */\nvar TimelineViews = /** @class */ (function (_super) {\n __extends(TimelineViews, _super);\n function TimelineViews(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dateHeaderTemplate = '${getTimelineDate(date)}';\n _this.baseCssClass = 'e-timeline-view';\n return _this;\n }\n TimelineViews.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n };\n TimelineViews.prototype.scrollTopPanel = function (target) {\n _super.prototype.scrollTopPanel.call(this, target);\n this.scrollHeaderLabels(target);\n };\n TimelineViews.prototype.scrollToWorkHour = function () {\n var start = this.parent.globalize.parseDate(this.parent.workHours.start, { skeleton: 'Hm' });\n var currDateTime = this.isWorkDay(this.parent.selectedDate) && this.parent.workHours.highlight &&\n !isNullOrUndefined(start) ? new Date(+this.parent.selectedDate).setHours(start.getHours(), start.getMinutes())\n : new Date(+this.parent.selectedDate).setHours(0, 0, 0, 0);\n var queryString = '[data-date=\"' + currDateTime + '\"]';\n var firstWorkHourCell = this.element.querySelector(queryString);\n if (firstWorkHourCell) {\n this.getScrollableElement().scrollLeft = firstWorkHourCell.offsetLeft;\n }\n };\n TimelineViews.prototype.scrollToHour = function (hour) {\n var date = this.parent.globalize.parseDate(hour, { skeleton: 'Hm' });\n if (isNullOrUndefined(date)) {\n return;\n }\n this.getScrollableElement().scrollLeft = this.getLeftFromDateTime(null, date);\n };\n TimelineViews.prototype.generateColumnLevels = function () {\n var levels = [];\n var dateSlots = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n levels.push(dateSlots);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.generateResourceLevels(dateSlots, !this.parent.uiStateValues.isGroupAdaptive);\n }\n var hourSlots = [];\n if (this.parent.activeViewOptions.timeScale.enable) {\n hourSlots = this.generateTimeSlots(levels[levels.length - 1]);\n levels.push(hourSlots);\n }\n if (this.parent.activeViewOptions.headerRows.length > 0) {\n var renderGn = new TimelineHeaderRow(this.parent, this.renderDates);\n levels = renderGn.generateColumnLevels(dateSlots, hourSlots);\n }\n return levels;\n };\n TimelineViews.prototype.generateTimeSlots = function (dateSlots) {\n var _this = this;\n var handler = function (r) {\n r.type = r.first ? 'majorSlot' : 'minorSlot';\n r.className = r.first ? ['e-time-slots'] : ['e-time-slots', cls.TIME_CELLS_CLASS];\n r.workDays = _this.parent.activeViewOptions.workDays;\n return r;\n };\n var timeSlotData = this.getTimeSlotRows(handler);\n var slots = [];\n for (var _i = 0, dateSlots_1 = dateSlots; _i < dateSlots_1.length; _i++) {\n var data = dateSlots_1[_i];\n data.colSpan = timeSlotData.length;\n var tempTimeSlots = extend([], timeSlotData, null, true);\n for (var _a = 0, tempTimeSlots_1 = tempTimeSlots; _a < tempTimeSlots_1.length; _a++) {\n var slot = tempTimeSlots_1[_a];\n slot.date = new Date(+resetTime(data.date) + getDateInMs(slot.date));\n slots.push(slot);\n }\n }\n return slots;\n };\n TimelineViews.prototype.changeCurrentTimePosition = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeCurrentTimeIndicatorElements();\n var currentDateIndex = this.getCurrentTimeIndicatorIndex();\n var left = this.getLeftFromDateTime(currentDateIndex, new Date());\n var height = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetHeight;\n var headerWrap = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n var contentWrap = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n contentWrap.appendChild(createElement('div', {\n className: cls.CURRENT_TIMELINE_CLASS,\n styles: (this.parent.enableRtl ? 'right' : 'left') + ':' + formatUnit(left) + '; height:' + formatUnit(height)\n }));\n var currentTimeEle = createElement('div', {\n innerHTML: this.parent.getTimeString(new Date()),\n className: cls.CURRENT_TIME_CLASS\n });\n headerWrap.appendChild(currentTimeEle);\n currentTimeEle.style[this.parent.enableRtl ? 'right' : 'left'] = formatUnit(left - (currentTimeEle.offsetWidth / 2));\n };\n TimelineViews.prototype.getLeftFromDateTime = function (currentDateIndex, date) {\n var startHour = this.getStartHour();\n var endHour = this.getEndHour();\n var diffInDates = 0;\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n if (!isNullOrUndefined(currentDateIndex)) {\n var end = (endHour.getHours() === 0) ? 24 : endHour.getHours();\n if (currentDateIndex[0] !== 0) {\n diffInDates = (currentDateIndex[0]) * ((end - startHour.getHours()) * 60) + (endHour.getMinutes() - startHour.getMinutes());\n }\n diffInMinutes = diffInDates + diffInMinutes;\n }\n return (diffInMinutes * this.getWorkCellWidth() * this.parent.activeViewOptions.timeScale.slotCount) /\n this.parent.activeViewOptions.timeScale.interval;\n };\n TimelineViews.prototype.getWorkCellWidth = function () {\n return this.element.querySelector('.e-work-cells').offsetWidth;\n };\n TimelineViews.prototype.renderHeader = function () {\n var tr = createElement('tr');\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.parent.resourceBase.renderResourceHeaderIndent(tr);\n }\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n TimelineViews.prototype.createAllDayRow = function (table, tdData) {\n // For current time indicator wrapper\n };\n TimelineViews.prototype.getCurrentTimeIndicatorIndex = function () {\n var currentDateIndex = [];\n var index = this.parent.getIndexOfDate(this.renderDates, resetTime(new Date()));\n if (index >= 0) {\n currentDateIndex.push(index);\n }\n return currentDateIndex;\n };\n TimelineViews.prototype.renderContent = function () {\n var tr = createElement('tr');\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var resTd = createElement('td');\n resTd.appendChild(this.parent.resourceBase.createResourceColumn());\n tr.appendChild(resTd);\n }\n var workTd = createElement('td');\n var wrap = this.renderContentArea();\n wrap.appendChild(this.createEventTable(this.getRowCount()));\n this.collapseRows(wrap);\n workTd.appendChild(wrap);\n tr.appendChild(workTd);\n this.element.querySelector('tbody').appendChild(tr);\n };\n TimelineViews.prototype.getRowCount = function () {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n return this.parent.resourceBase.lastResourceLevel.length;\n }\n return 1;\n };\n TimelineViews.prototype.getResourceTdData = function (i, tdData) {\n var resLevel = this.parent.resourceBase.lastResourceLevel[i];\n var resSHr = resLevel.resourceData[resLevel.resource.startHourField] || this.parent.workHours.start;\n var resEHr = resLevel.resourceData[resLevel.resource.endHourField] || this.parent.workHours.end;\n tdData.startHour = this.parent.globalize.parseDate(resSHr, { skeleton: 'Hm' });\n tdData.endHour = this.parent.globalize.parseDate(resEHr, { skeleton: 'Hm' });\n tdData.workDays = resLevel.resourceData[resLevel.resource.workDaysField] || this.parent.workDays;\n tdData.className = resLevel.className;\n tdData.groupIndex = resLevel.groupIndex;\n tdData.groupOrder = resLevel.groupOrder;\n return tdData;\n };\n TimelineViews.prototype.renderContentTable = function (table) {\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var tBody = table.querySelector('tbody');\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var trCount = this.getRowCount();\n for (var i = 0; i < trCount; i++) {\n var ntr = tr.cloneNode();\n for (var _i = 0, _a = this.colLevels[this.colLevels.length - 1]; _i < _a.length; _i++) {\n var tdData = _a[_i];\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n tdData = this.getResourceTdData(i, tdData);\n }\n var ntd = this.createContentTd(tdData, tdData, td);\n ntr.appendChild(ntd);\n }\n tBody.appendChild(ntr);\n }\n table.appendChild(tBody);\n };\n TimelineViews.prototype.getContentTdClass = function (r) {\n return (r.first || !this.parent.activeViewOptions.timeScale.enable) ? [cls.WORK_CELLS_CLASS] :\n [cls.WORK_CELLS_CLASS, cls.ALTERNATE_CELLS_CLASS];\n };\n TimelineViews.prototype.renderEvents = function () {\n if (this.parent.activeViewOptions.timeScale.enable) {\n var appointment = new TimelineEvent(this.parent, 'hour');\n appointment.renderAppointments();\n }\n else {\n var appointment = new TimelineEvent(this.parent, 'day');\n appointment.renderAppointments();\n }\n };\n TimelineViews.prototype.getModuleName = function () {\n return 'timelineViews';\n };\n return TimelineViews;\n}(VerticalView));\nexport { TimelineViews };\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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})();\nimport { EventHandler, createElement, formatUnit } from '@syncfusion/ej2-base';\nimport { Month } from './month';\nimport { TimelineEvent } from '../event-renderer/timeline-view';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport { TimelineHeaderRow } from './timeline-header-row';\n/**\n * timeline month view\n */\nvar TimelineMonth = /** @class */ (function (_super) {\n __extends(TimelineMonth, _super);\n /**\n * Constructor for timeline month view\n */\n function TimelineMonth(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-timeline-month-view';\n _this.isInverseTableSelect = true;\n return _this;\n }\n /**\n * Get module name.\n */\n TimelineMonth.prototype.getModuleName = function () {\n return 'timelineMonth';\n };\n TimelineMonth.prototype.onDataReady = function (args) {\n var appointment = new TimelineEvent(this.parent, 'day');\n appointment.renderAppointments();\n };\n TimelineMonth.prototype.getLeftPanelElement = function () {\n return this.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);\n };\n TimelineMonth.prototype.scrollTopPanel = function (target) {\n _super.prototype.scrollTopPanel.call(this, target);\n this.scrollHeaderLabels(target);\n };\n TimelineMonth.prototype.setContentHeight = function (content, leftPanelElement, height) {\n if (leftPanelElement) {\n leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(content));\n }\n content.style.height = formatUnit(height);\n };\n TimelineMonth.prototype.getDateSlots = function (renderDates, workDays) {\n var dateSlots = [];\n for (var _i = 0, renderDates_1 = renderDates; _i < renderDates_1.length; _i++) {\n var col = renderDates_1[_i];\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentDate(col)) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateSlots.push({ date: col, type: 'dateHeader', className: classList, colSpan: 1, workDays: workDays });\n }\n return dateSlots;\n };\n TimelineMonth.prototype.renderLeftIndent = function (tr) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n this.parent.resourceBase.renderResourceHeaderIndent(tr);\n }\n };\n TimelineMonth.prototype.renderContent = function () {\n var contentTr = createElement('tr');\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var resTd = createElement('td');\n resTd.appendChild(this.parent.resourceBase.createResourceColumn());\n contentTr.appendChild(resTd);\n }\n var contentTd = createElement('td');\n this.element.querySelector('tbody').appendChild(contentTr);\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n wrap.appendChild(this.renderContentArea());\n wrap.appendChild(this.createEventTable(this.getRowCount()));\n this.collapseRows(wrap);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n contentTd.appendChild(wrap);\n contentTr.appendChild(contentTd);\n };\n TimelineMonth.prototype.getRowCount = function () {\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n return this.parent.resourceBase.lastResourceLevel.length;\n }\n return 1;\n };\n TimelineMonth.prototype.getContentSlots = function () {\n var slotDatas = [];\n for (var row = 0; row < this.getRowCount(); row++) {\n for (var _i = 0, _a = this.colLevels[this.colLevels.length - 1]; _i < _a.length; _i++) {\n var data = _a[_i];\n data.className = [cls.WORK_CELLS_CLASS];\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var resLevel = this.parent.resourceBase.lastResourceLevel[row];\n data.workDays = resLevel.resourceData[resLevel.resource.workDaysField] || this.parent.workDays;\n data.className = data.className.concat(resLevel.className);\n data.groupIndex = resLevel.groupIndex;\n data.groupOrder = resLevel.groupOrder;\n }\n var slotData = {\n date: new Date(+data.date), colSpan: data.colSpan, groupIndex: data.groupIndex, workDays: data.workDays,\n type: 'monthCells', className: data.className\n };\n if (!slotDatas[row]) {\n slotDatas[row] = [];\n }\n slotDatas[row].push(slotData);\n }\n }\n return slotDatas;\n };\n TimelineMonth.prototype.updateClassList = function () {\n // No need to update content for timeline month view\n };\n TimelineMonth.prototype.unwireEvents = function () {\n EventHandler.remove(this.getContentAreaElement(), 'scroll', this.onContentScroll);\n };\n TimelineMonth.prototype.getMonthStart = function (currentDate) {\n var monthStart = util.firstDateOfMonth(util.resetTime(currentDate));\n return new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());\n };\n TimelineMonth.prototype.getMonthEnd = function (currentDate) {\n var monthStart = util.firstDateOfMonth(util.resetTime(currentDate));\n return util.lastDateOfMonth(util.addMonths(new Date(+monthStart), this.parent.activeViewOptions.interval - 1));\n };\n TimelineMonth.prototype.generateColumnLevels = function () {\n var colLevels = [];\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n colLevels.push(level);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.generateResourceLevels(level, !this.parent.uiStateValues.isGroupAdaptive);\n }\n var hourSlots = [];\n if (this.parent.activeViewOptions.headerRows.length > 0) {\n var renderGn = new TimelineHeaderRow(this.parent, this.renderDates);\n colLevels = renderGn.generateColumnLevels(level, hourSlots);\n }\n this.colLevels = colLevels;\n return colLevels;\n };\n return TimelineMonth;\n}(Month));\nexport { TimelineMonth };\n","import * as index from '@syncfusion/ej2-schedule';\nindex.Schedule.Inject( index.Day,index.Week,index.WorkWeek,index.Month,index.Agenda,index.MonthAgenda,index.TimelineViews,index.TimelineMonth,index.Resize,index.DragAndDrop);\nexport * from '@syncfusion/ej2-schedule';\n","/**\n * Maps Themes doc\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Medium',\n color: '#424242',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n})(Theme || (Theme = {}));\n","import { addClass, createElement as internalCreateElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\n/**\n * Initialize ButtonGroup CSS component with specified properties.\n * ```html\n *
    \n * \n * \n * \n *
    \n * ```\n * ```typescript\n * createButtonGroup('#buttongroup', {\n * cssClass: 'e-outline',\n * buttons: [\n * { content: 'Day' },\n * { content: 'Week' },\n * { content: 'Work Week'}\n * ]\n * });\n * ```\n * @param {string} selector\n * @param {CreateButtonGroupModel} options\n * @returns HTMLElement\n */\nexport function createButtonGroup(selector, options, createElement) {\n if (options === void 0) { options = {}; }\n var child;\n var btnElem;\n var nextChild;\n var btnModel;\n if (isNullOrUndefined(createElement)) {\n createElement = internalCreateElement;\n }\n var wrapper = document.querySelector(selector);\n addClass([wrapper], ['e-btn-group']);\n wrapper.setAttribute('role', 'group');\n var childs = wrapper.children;\n options.buttons = options.buttons || [];\n for (var i = 0, j = 0; j < childs.length; i++, j++) {\n child = childs[j];\n btnModel = options.buttons[i];\n if (btnModel !== null) {\n if (child.tagName === 'BUTTON') {\n btnElem = child;\n }\n else {\n btnElem = createElement('label');\n nextChild = childs[j + 1];\n if (nextChild) {\n wrapper.insertBefore(btnElem, nextChild);\n }\n else {\n wrapper.appendChild(btnElem);\n }\n if (child.id) {\n btnElem.setAttribute('for', child.id);\n }\n if (btnModel && btnModel.disabled) {\n child.disabled = true;\n }\n j++;\n }\n if (options.cssClass && btnModel && !btnModel.cssClass) {\n btnModel.cssClass = options.cssClass;\n }\n new Button(btnModel || {}, btnElem);\n }\n }\n return wrapper;\n}\n","/**\n * TreeMap constants doc\n */\n/**\n * Specifies TreeMap load event name.\n * @private\n */\nexport var load = 'load';\n/**\n * Specifies TreeMap loaded event name.\n * @private\n */\nexport var loaded = 'loaded';\n/**\n * Specifies TreeMap beforePrint event name.\n * @private\n */\nexport var beforePrint = 'beforePrint';\n/**\n * Specifies the itemRendering event name.\n * @private\n */\nexport var itemRendering = 'itemRendering';\n/**\n * Specifies the drilldown start event name.\n * @private\n */\nexport var drillStart = 'drillStart';\n/**\n * Specifies the drilldown end event name.\n * @private\n */\nexport var drillEnd = 'drillEnd';\n/**\n * Specifies the item selected event name.\n * @private\n */\nexport var itemSelected = 'itemSelected';\n/**\n * Specifies the item highlight event name.\n * @private\n */\nexport var itemHighlight = 'itemHighlight';\n/**\n * Specifies the tooltip rendering event name.\n * @private\n */\nexport var tooltipRendering = 'tooltipRendering';\n/**\n * Specifies the item click event name.\n * @private\n */\nexport var itemClick = 'itemClick';\n/**\n * Specifies the item move event name.\n * @private\n */\nexport var itemMove = 'itemMove';\n/**\n * Specifies the mouse click event name.\n * @private\n */\nexport var click = 'click';\n/**\n * Specifies the mouse move event name.\n * @private\n */\nexport var mouseMove = 'mouseMove';\n/**\n * Specifies legend item rendering event name.\n * @private\n */\nexport var legendItemRendering = 'legendItemRendering';\n/**\n * Specifies treemap resize event name.\n * @private\n */\nexport var resize = 'resize';\n/**\n * Specifies the font family\n * @private\n */\nexport var defaultFont = 'Roboto, Segoe UI, Noto, Sans-serif';\n","var __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Maps base doc\n */\nimport { Property, ChildProperty, Complex, Collection } from '@syncfusion/ej2-base';\nimport { defaultFont } from './constants';\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#808080')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the treemap margin.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the fonts in treemap.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property(defaultFont)\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * To configure title of the maps.\n */\nvar CommonTitleSettings = /** @class */ (function (_super) {\n __extends(CommonTitleSettings, _super);\n function CommonTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"description\", void 0);\n return CommonTitleSettings;\n}(ChildProperty));\nexport { CommonTitleSettings };\n/**\n * To configure subtitle of the maps.\n */\nvar SubTitleSettings = /** @class */ (function (_super) {\n __extends(SubTitleSettings, _super);\n function SubTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ size: '14px' }, Font)\n ], SubTitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], SubTitleSettings.prototype, \"alignment\", void 0);\n return SubTitleSettings;\n}(CommonTitleSettings));\nexport { SubTitleSettings };\n/**\n * To configure title of the maps.\n */\nvar TitleSettings = /** @class */ (function (_super) {\n __extends(TitleSettings, _super);\n function TitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ size: '15px' }, Font)\n ], TitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], TitleSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({}, SubTitleSettings)\n ], TitleSettings.prototype, \"subtitleSettings\", void 0);\n return TitleSettings;\n}(CommonTitleSettings));\nexport { TitleSettings };\nvar ColorMapping = /** @class */ (function (_super) {\n __extends(ColorMapping, _super);\n function ColorMapping() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"from\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"to\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"minOpacity\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"maxOpacity\", void 0);\n return ColorMapping;\n}(ChildProperty));\nexport { ColorMapping };\n/**\n * Configures the legend settings.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Default')\n ], LegendSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property('Circle')\n ], LegendSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({ size: '13px' }, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"shapeBorder\", void 0);\n __decorate([\n Complex({}, CommonTitleSettings)\n ], LegendSettings.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '14px' }, Font)\n ], LegendSettings.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('Bottom')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"orientation\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"invertedPointer\", void 0);\n __decorate([\n Property('After')\n ], LegendSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"labelDisplayMode\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property({ x: 0, y: 0 })\n ], LegendSettings.prototype, \"location\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\nvar InitialDrillSettings = /** @class */ (function (_super) {\n __extends(InitialDrillSettings, _super);\n function InitialDrillSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], InitialDrillSettings.prototype, \"groupIndex\", void 0);\n __decorate([\n Property(null)\n ], InitialDrillSettings.prototype, \"groupName\", void 0);\n return InitialDrillSettings;\n}(ChildProperty));\nexport { InitialDrillSettings };\nvar LeafItemSettings = /** @class */ (function (_super) {\n __extends(LeafItemSettings, _super);\n function LeafItemSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#808080')\n ], LeafItemSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], LeafItemSettings.prototype, \"autoFill\", void 0);\n __decorate([\n Complex({}, Border)\n ], LeafItemSettings.prototype, \"border\", void 0);\n __decorate([\n Property(0)\n ], LeafItemSettings.prototype, \"gap\", void 0);\n __decorate([\n Property(10)\n ], LeafItemSettings.prototype, \"padding\", void 0);\n __decorate([\n Property(1)\n ], LeafItemSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LeafItemSettings.prototype, \"showLabels\", void 0);\n __decorate([\n Property(null)\n ], LeafItemSettings.prototype, \"labelPath\", void 0);\n __decorate([\n Property(null)\n ], LeafItemSettings.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('TopLeft')\n ], LeafItemSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Complex({ color: null, size: '12px' }, Font)\n ], LeafItemSettings.prototype, \"labelStyle\", void 0);\n __decorate([\n Property(null)\n ], LeafItemSettings.prototype, \"labelTemplate\", void 0);\n __decorate([\n Property('Center')\n ], LeafItemSettings.prototype, \"templatePosition\", void 0);\n __decorate([\n Property('Trim')\n ], LeafItemSettings.prototype, \"interSectAction\", void 0);\n __decorate([\n Collection([], ColorMapping)\n ], LeafItemSettings.prototype, \"colorMapping\", void 0);\n return LeafItemSettings;\n}(ChildProperty));\nexport { LeafItemSettings };\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property('#000816')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(0.75)\n ], TooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(['Circle'])\n ], TooltipSettings.prototype, \"markerShapes\", void 0);\n __decorate([\n Complex({}, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ fontFamily: defaultFont, size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#808080')\n ], SelectionSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('0.5')\n ], SelectionSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, Border)\n ], SelectionSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Item')\n ], SelectionSettings.prototype, \"mode\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\nvar HighlightSettings = /** @class */ (function (_super) {\n __extends(HighlightSettings, _super);\n function HighlightSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], HighlightSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#808080')\n ], HighlightSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('0.5')\n ], HighlightSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, Border)\n ], HighlightSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Item')\n ], HighlightSettings.prototype, \"mode\", void 0);\n return HighlightSettings;\n}(ChildProperty));\nexport { HighlightSettings };\n/**\n * Options for customizing the tree map levels.\n */\nvar LevelSettings = /** @class */ (function (_super) {\n __extends(LevelSettings, _super);\n function LevelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], LevelSettings.prototype, \"groupPath\", void 0);\n __decorate([\n Property(0)\n ], LevelSettings.prototype, \"groupGap\", void 0);\n __decorate([\n Property(10)\n ], LevelSettings.prototype, \"groupPadding\", void 0);\n __decorate([\n Complex({}, Border)\n ], LevelSettings.prototype, \"border\", void 0);\n __decorate([\n Property('#808080')\n ], LevelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], LevelSettings.prototype, \"autoFill\", void 0);\n __decorate([\n Property(1)\n ], LevelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LevelSettings.prototype, \"showHeader\", void 0);\n __decorate([\n Property(20)\n ], LevelSettings.prototype, \"headerHeight\", void 0);\n __decorate([\n Property(null)\n ], LevelSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], LevelSettings.prototype, \"headerFormat\", void 0);\n __decorate([\n Property('Near')\n ], LevelSettings.prototype, \"headerAlignment\", void 0);\n __decorate([\n Complex({ color: null, size: '13px' }, Font)\n ], LevelSettings.prototype, \"headerStyle\", void 0);\n __decorate([\n Property('TopLeft')\n ], LevelSettings.prototype, \"templatePosition\", void 0);\n __decorate([\n Collection([], ColorMapping)\n ], LevelSettings.prototype, \"colorMapping\", void 0);\n return LevelSettings;\n}(ChildProperty));\nexport { LevelSettings };\n","import { Rect, itemsToOrder, TextOption, measureText, textTrim, hide, wordWrap, textWrap, getTemplateFunction, convertElement, findLabelLocation, PathOption, textFormatter, colorNameToHex, convertHexToColor, colorMap, measureElement, convertToContainer, convertToRect, getShortestEdge, getArea, orderByArea, isParentItem } from '../utils/helper';\nimport { isNullOrUndefined, createElement, extend } from '@syncfusion/ej2-base';\nimport { Location, findChildren, renderTextElement } from '../utils/helper';\nimport { itemRendering } from '../model/constants';\n/**\n * To calculate and render the shape layer\n */\nvar LayoutPanel = /** @class */ (function () {\n function LayoutPanel(treemap) {\n this.treemap = treemap;\n }\n /* tslint:disable:no-string-literal */\n LayoutPanel.prototype.processLayoutPanel = function () {\n var data;\n var totalRect;\n if (this.treemap.levelsOfData && this.treemap.levelsOfData.length > 0) {\n data = (!isNullOrUndefined(this.treemap.initialDrillDown.groupIndex) &&\n !isNullOrUndefined(this.treemap.initialDrillDown.groupName)) ?\n this.getDrilldownData(this.treemap.levelsOfData[0], [])[0] : this.treemap.levelsOfData[0];\n totalRect = extend({}, this.treemap.areaRect, totalRect, false);\n this.calculateLayoutItems(data || this.treemap.levelsOfData[0], totalRect);\n this.renderLayoutItems(data || this.treemap.levelsOfData[0]);\n }\n };\n LayoutPanel.prototype.getDrilldownData = function (data, drillData) {\n var treemap = this.treemap;\n var newData = {};\n var child = findChildren(data)['values'];\n if (child && child.length > 0 && drillData.length === 0) {\n for (var i = 0; i < child.length; i++) {\n if (child[i]['groupIndex'] === treemap.initialDrillDown.groupIndex &&\n child[i]['name'] === treemap.initialDrillDown.groupName) {\n child[i]['isDrilled'] = true;\n newData[child[i]['groupName']] = [child[i]];\n drillData.push(newData);\n }\n }\n for (var j = 0; j < child.length; j++) {\n this.getDrilldownData(child[j], drillData);\n }\n }\n return drillData;\n };\n LayoutPanel.prototype.calculateLayoutItems = function (data, rect) {\n this.renderItems = [];\n this.parentData = [];\n if (!isNullOrUndefined(this.treemap.weightValuePath)) {\n if (this.treemap.layoutType.indexOf('SliceAndDice') > -1) {\n this.computeSliceAndDiceDimensional(data, rect);\n }\n else {\n rect.height = rect.height + rect.y;\n rect.width = rect.width + rect.x;\n this.computeSquarifyDimensional(data, rect);\n }\n }\n };\n LayoutPanel.prototype.computeSliceAndDiceDimensional = function (data, coords) {\n var leafItem = this.treemap.leafItemSettings;\n var rect;\n var groups = this.treemap.levels;\n var groupIndex;\n var isLeafItem = false;\n var children = findChildren(data)['values'];\n var gap;\n var headerHeight;\n if (children && children.length > 0) {\n this.sliceAndDiceProcess(children, coords);\n if (this.treemap.levels.length > 0) {\n for (var i = 0; i < children.length; i++) {\n groupIndex = children[i]['groupIndex'];\n isLeafItem = (groups.length === 0 || groupIndex === groups.length);\n gap = isLeafItem ? leafItem.gap : groups[groupIndex].groupGap;\n headerHeight = groups.length === 0 ? 0 : groups[groupIndex] ? groups[groupIndex].showHeader ?\n groups[groupIndex].headerHeight : 0 : groups[groupIndex - 1].showHeader ? groups[groupIndex - 1].headerHeight : 0;\n rect = children[i]['rect'];\n rect = new Rect(rect.x + (gap / 2), rect.y + (headerHeight + (gap / 2)), rect.width - gap, Math.abs(rect.height - (gap + headerHeight)));\n this.computeSliceAndDiceDimensional(children[i], rect);\n }\n }\n }\n return data;\n };\n LayoutPanel.prototype.sliceAndDiceProcess = function (processData, rect) {\n var parentArea = rect.height * rect.width;\n var levels = this.treemap.levels;\n var childValue;\n var alottedValue = 0;\n var totalWeight = 0;\n processData.forEach(function (data) { totalWeight += data['weight']; });\n processData.forEach(function (child) {\n child['weightArea'] = parentArea * child['weight'] / totalWeight;\n });\n var isHorizontal = (this.treemap.layoutType === 'SliceAndDiceAuto') ? (rect.width > rect.height) :\n (this.treemap.layoutType === 'SliceAndDiceHorizontal');\n processData.sort(itemsToOrder);\n for (var i = 0; i < processData.length; i++) {\n var item = processData[i];\n item['isLeafItem'] = (levels.length === 0) || ((this.treemap.isHierarchicalData ||\n isNullOrUndefined(this.treemap.leafItemSettings.labelPath)) ?\n item['groupIndex'] === levels.length - 1 : item['groupIndex'] === this.treemap.levels.length);\n if (isHorizontal) {\n childValue = ((parentArea / totalWeight) * processData[i]['weight']) / rect.height;\n if (alottedValue <= rect.width) {\n processData[i]['rect'] = new Rect(alottedValue + rect.x, rect.y, childValue, rect.height);\n }\n }\n else {\n childValue = ((parentArea / totalWeight) * processData[i]['weight']) / rect.width;\n if (alottedValue <= rect.height) {\n processData[i]['rect'] = new Rect(rect.x, alottedValue + rect.y, rect.width, childValue);\n }\n }\n alottedValue += childValue;\n this.renderItems.push(processData[i]);\n }\n };\n LayoutPanel.prototype.computeSquarifyDimensional = function (data, coords) {\n var leaf = this.treemap.leafItemSettings;\n var rect;\n var levels = this.treemap.levels;\n var groupIndex;\n var isLeafItem = false;\n var item;\n var child = findChildren(data)['values'];\n var index;\n var gap;\n var padding;\n var headerHeight;\n if (child && child.length > 0) {\n if (this.parentData.length === 0) {\n this.parentData = [];\n this.parentData.push(child);\n }\n this.calculateChildrenLayout(data, child, coords);\n if (this.treemap.levels.length > 0) {\n for (var i = 0; i < child.length; i++) {\n item = child[i];\n index = item['groupIndex'];\n rect = item['rect'];\n gap = (item['isLeafItem'] ? leaf.gap : levels[index].groupGap) / 2;\n padding = (item['isLeafItem'] ? leaf.padding : levels[index].groupPadding) / 2;\n headerHeight = this.treemap.isHierarchicalData ? index === 0 && item['isLeafItem'] ? 0 : levels[index] ?\n levels[index].showHeader ? levels[index].headerHeight : 0 : 0 : (levels.length === 0) ? 0 : levels[index] ?\n levels[index].showHeader ? levels[index].headerHeight : 0 : 0;\n rect = new Rect(rect.x + padding, rect.y + (headerHeight + padding), rect.width - padding, rect.height - padding);\n if (!item['isLeafItem'] && item['weight'] > 0) {\n this.computeSquarifyDimensional(child[i], rect);\n }\n }\n }\n }\n };\n LayoutPanel.prototype.calculateChildrenLayout = function (parent, children, coords) {\n this.computeTotalArea(children, getArea(coords));\n children.sort(orderByArea);\n this.performRowsLayout(children, [], coords, []);\n };\n LayoutPanel.prototype.performRowsLayout = function (data, currentRow, rect, stack) {\n var dataLength = data.length;\n if (dataLength === 0) {\n var newCoordinates = this.getCoordinates(currentRow, rect);\n var newStack = stack.concat(newCoordinates);\n return newStack;\n }\n var width = getShortestEdge(rect);\n var nextDatum = data[0];\n var restData = data.slice(1, dataLength);\n if (this.aspectRatio(currentRow, nextDatum, width)) {\n var newRow = currentRow.concat(nextDatum);\n return this.performRowsLayout(restData, newRow, rect, stack);\n }\n else {\n var currentRowLength = currentRow.length;\n var valueSum = 0;\n for (var i = 0; i < currentRowLength; i += 1) {\n valueSum += currentRow[i]['itemArea'];\n }\n var newContainer = this.cutArea(rect, valueSum);\n var newCoordinates = this.getCoordinates(currentRow, rect);\n var newStack = stack.concat(newCoordinates);\n return this.performRowsLayout(data, [], newContainer, newStack);\n }\n };\n LayoutPanel.prototype.aspectRatio = function (currentRow, nextDatum, length) {\n if (currentRow.length === 0) {\n return true;\n }\n else {\n var newRow = currentRow.concat(nextDatum);\n var currentMaxAspectRatio = this.findMaxAspectRatio(currentRow, length);\n var newMaxAspectRatio = this.findMaxAspectRatio(newRow, length);\n return (currentMaxAspectRatio >= newMaxAspectRatio);\n }\n };\n LayoutPanel.prototype.findMaxAspectRatio = function (row, length) {\n var rowLength = row.length;\n var minArea = Infinity;\n var maxArea = -Infinity;\n var sumArea = 0;\n for (var i = 0; i < rowLength; i += 1) {\n var area = row[i]['itemArea'];\n if (area < minArea) {\n minArea = area;\n }\n if (area > maxArea) {\n maxArea = area;\n }\n sumArea += area;\n }\n var result = Math.max((Math.pow(length, 2)) * maxArea / (Math.pow(sumArea, 2)), (Math.pow(sumArea, 2)) /\n ((Math.pow(length, 2)) * minArea));\n return result;\n };\n LayoutPanel.prototype.cutArea = function (rect, area) {\n var newContainer = convertToContainer(rect);\n var width = newContainer.width;\n var height = newContainer.height;\n var xOffset = newContainer.x;\n var yOffset = newContainer.y;\n if (width >= height) {\n var areaWidth = area / height;\n var newWidth = width - areaWidth;\n var container = {\n x: xOffset + areaWidth,\n y: yOffset,\n width: newWidth,\n height: height,\n };\n return convertToRect(container);\n }\n else {\n var areaHeight = area / width;\n var newHeight = height - areaHeight;\n var container = {\n x: xOffset,\n y: yOffset + areaHeight,\n width: width,\n height: newHeight,\n };\n return convertToRect(container);\n }\n };\n LayoutPanel.prototype.getCoordinates = function (row, rect) {\n var container = convertToContainer(rect);\n var headerHeight;\n var width = container.width;\n var height = container.height;\n var xOffset = container.x;\n var yOffset = container.y;\n var rowLength = row.length;\n var levels = this.treemap.levels;\n var leaf = this.treemap.leafItemSettings;\n var index;\n var valueSum = 0;\n for (var i = 0; i < rowLength; i += 1) {\n valueSum += row[i]['itemArea'];\n }\n var areaWidth = valueSum / height;\n var areaHeight = valueSum / width;\n var subXOffset = xOffset;\n var subYOffset = yOffset;\n var padding;\n var coordinates = [];\n var isParent;\n var gap;\n var parentRect;\n for (var i = 0; i < rowLength; i += 1) {\n var item = row[i];\n index = item['groupIndex'];\n item['isLeafItem'] = (levels.length === 0) || (this.treemap.isHierarchicalData ? index === levels.length :\n isNullOrUndefined(leaf.labelPath) ? false : index === levels.length);\n isParent = isParentItem(this.parentData[0], item);\n parentRect = isParent ? this.treemap.areaRect : item['parent'].rect;\n padding = item['isLeafItem'] ? leaf.padding : levels[index].groupPadding;\n if (width >= height) {\n var y1 = subYOffset + item['itemArea'] / areaWidth;\n item['rect'] = {\n x: subXOffset,\n y: subYOffset,\n width: subXOffset + areaWidth,\n height: y1,\n };\n subYOffset = y1;\n }\n else {\n var x1 = subXOffset + item['itemArea'] / areaHeight;\n item['rect'] = {\n x: subXOffset,\n y: subYOffset,\n width: x1,\n height: subYOffset + areaHeight,\n };\n subXOffset = x1;\n }\n if (item['weight'] > 0 && (isParent || (Math.round(rect.y + (padding / 2)) <=\n Math.round(parentRect.y + (parentRect.height - parentRect.y)) && Math.round(rect.x + (padding / 2)) <=\n Math.round(parentRect.x + (parentRect.width - parentRect.x))))) {\n this.renderItems.push(item);\n coordinates.push(item);\n }\n }\n return coordinates;\n };\n LayoutPanel.prototype.computeTotalArea = function (data, area) {\n var dataLength = data.length;\n var dataSum = 0;\n var result = [];\n for (var i = 0; i < dataLength; i += 1) {\n var dataLength_1 = data.length;\n var dataSum_1 = 0;\n for (var i_1 = 0; i_1 < dataLength_1; i_1 += 1) {\n dataSum_1 += data[i_1]['weight'];\n }\n var multiplier = area / dataSum_1;\n var datum = void 0;\n for (var j = 0; j < dataLength_1; j++) {\n datum = data[j];\n datum['itemArea'] = datum['weight'] * multiplier;\n result.push(datum);\n }\n }\n return result;\n };\n /* tslint:disable-next-line:max-func-body-length */\n LayoutPanel.prototype.renderLayoutItems = function (renderData) {\n var textCollection = [];\n var position;\n var treeMap = this.treemap;\n var colorMapping;\n var txtVisible;\n var getItemColor;\n var eventArgs;\n this.renderer = treeMap.renderer;\n var trimHeader;\n var textLocation = new Location(0, 0);\n var pathOptions;\n var elementID = treeMap.element.id;\n var index;\n var templatePosition;\n var mode = treeMap.layoutType;\n var rect;\n var format;\n var interSectAction = this.treemap.leafItemSettings.interSectAction;\n var textSize;\n var fill;\n var item;\n var renderText;\n var opacity;\n var padding = 5;\n var rectPath = '';\n var isRender;\n var secondaryEle = document.getElementById(treeMap.element.id + '_Secondary_Element');\n var groupId;\n var textOptions;\n var templateEle;\n var gap;\n var textStyle;\n var levels = treeMap.levels;\n this.layoutGroup = this.renderer.createGroup({ id: elementID + '_TreeMap_' + mode + '_Layout' });\n var itemGroup;\n var level;\n var template;\n var border;\n var templateGroup = createElement('div', {\n id: treeMap.element.id + '_Label_Template_Group',\n className: 'template',\n styles: 'overflow: hidden; position: absolute;pointer-events: none;' +\n 'top:' + treeMap.areaRect.y + 'px;' +\n 'left:' + treeMap.areaRect.x + 'px;' +\n 'height:' + treeMap.areaRect.height + 'px;' +\n 'width:' + treeMap.areaRect.width + 'px;'\n });\n var isLeafItem = false;\n var leaf = treeMap.leafItemSettings;\n var childItems;\n for (var i = 0; i < this.renderItems.length; i++) {\n item = this.renderItems[i];\n index = item['groupIndex'];\n rect = item['rect'];\n isLeafItem = item['isLeafItem'];\n groupId = elementID + '_Level_Index_' + index + '_Item_Index_' + i;\n itemGroup = this.renderer.createGroup({ id: groupId + '_Group' });\n gap = (isLeafItem ? leaf.gap : levels[index].groupGap) / 2;\n if (treeMap.layoutType === 'Squarified') {\n rect.width = Math.abs(rect.x - rect.width) - gap;\n rect.height = Math.abs(rect.y - rect.height) - gap;\n }\n colorMapping = isLeafItem ? leaf.colorMapping : levels[index].colorMapping;\n getItemColor = this.getItemColor(isLeafItem, item);\n fill = getItemColor['fill'];\n opacity = getItemColor['opacity'];\n format = isLeafItem ? leaf.labelFormat : (levels[index]).headerFormat;\n txtVisible = isLeafItem ? leaf.showLabels : (levels[index]).showHeader;\n renderText = textFormatter(format, item['data'], this.treemap) || item['name'];\n childItems = findChildren(item)['values'];\n renderText = !isLeafItem && childItems && childItems.length > 0 && this.treemap.enableDrillDown ?\n !item['isDrilled'] ? '[+] ' + renderText : '[-] ' + renderText : renderText;\n textStyle = (isLeafItem ? leaf.labelStyle : levels[index].headerStyle);\n border = isLeafItem ? leaf.border : levels[index].border;\n position = !isLeafItem ? (levels[index].headerAlignment) === 'Near' ? 'TopLeft' : (levels[index].headerAlignment) === 'Center' ?\n 'TopCenter' : 'TopRight' : leaf.labelPosition;\n templatePosition = isLeafItem ? leaf.templatePosition : levels[index].templatePosition;\n template = isLeafItem ? leaf.labelTemplate : levels[index].headerTemplate;\n item['options'] = { border: border, opacity: opacity, fill: fill };\n eventArgs = {\n cancel: false, name: itemRendering, treemap: this.treemap,\n currentItem: item, RenderItems: this.renderItems, options: item['options']\n };\n this.treemap.trigger(itemRendering, eventArgs);\n if (!eventArgs.cancel) {\n rectPath = ' M ' + rect.x + ' ' + rect.y + ' L ' + (rect.x + rect.width) + ' ' + rect.y +\n ' L ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height) + ' L ' + rect.x + ' ' + (rect.y + rect.height) + 'z';\n pathOptions = new PathOption(groupId + '_RectPath', fill, border.width, border.color, opacity, null, rectPath);\n var path = this.renderer.drawPath(pathOptions);\n itemGroup.appendChild(path);\n if (txtVisible) {\n this.renderItemText(renderText.toString(), itemGroup, textStyle, rect, interSectAction, groupId, fill, position);\n }\n if (template) {\n templateEle = this.renderTemplate(secondaryEle, groupId, rect, templatePosition, template, item);\n templateGroup.appendChild(templateEle);\n }\n itemGroup.setAttribute('aria-label', item['name']);\n itemGroup.setAttribute('tabindex', (this.treemap.tabIndex + i + 2).toString());\n this.layoutGroup.appendChild(itemGroup);\n }\n }\n if (templateGroup.childNodes.length > 0) {\n secondaryEle.appendChild(templateGroup);\n }\n this.treemap.svgObject.appendChild(this.layoutGroup);\n };\n LayoutPanel.prototype.renderItemText = function (text, parentElement, textStyle, rect, interSectAction, groupId, fill, position) {\n var level;\n var textOptions;\n var headerPosition;\n var secondaryEle = document.getElementById(this.treemap.element.id + '_Secondary_Element');\n var leaf = this.treemap.leafItemSettings;\n var padding = 5;\n var textSize;\n var textLocation;\n var textCollection = [];\n var customText;\n var templateEle;\n var tspanText = [];\n var height = 0;\n var textName;\n textCollection = ((text.indexOf('
    ')) !== -1) ? text.split('
    ') : null;\n customText = this.labelInterSectAction(rect, text, textStyle, interSectAction);\n textSize = measureText(textCollection && textCollection[0] || customText[0], textStyle);\n textLocation = findLabelLocation(rect, position, textSize, 'Text', this.treemap);\n if (!isNullOrUndefined(textCollection)) {\n var collection = [];\n var texts = null;\n var maxNumber = [];\n for (var i = 0; i < textCollection.length; i++) {\n texts = textTrim((rect.width - 5), textCollection[i], textStyle);\n textSize = measureText(texts, textStyle);\n height += textSize.height;\n maxNumber.push(textSize.width);\n collection.push(texts);\n }\n customText = collection;\n textSize.width = Math.max.apply(null, maxNumber);\n textSize.height = height;\n }\n if (interSectAction === 'WrapByWord' || interSectAction === 'Wrap' || interSectAction === 'Trim') {\n for (var j = 0; j < customText.length; j++) {\n textSize = measureText(customText[j], textStyle);\n height += textSize.height;\n if ((rect.height - padding) > height) {\n tspanText.push(customText[j]);\n }\n }\n if (interSectAction === 'Wrap' && customText.length !== tspanText.length && tspanText.length) {\n var collectionLength = tspanText.length - 1;\n var stringText = tspanText[collectionLength];\n stringText = stringText.substring(0, (stringText.length - 1)) + '...';\n tspanText.splice(collectionLength);\n if (stringText !== '...') {\n tspanText.push(stringText);\n }\n }\n }\n else {\n textName = customText;\n tspanText.push(textName);\n }\n textOptions = new TextOption(groupId + '_Text', textLocation.x, textLocation.y, 'start', tspanText);\n renderTextElement(textOptions, textStyle, textStyle.color || this.getSaturatedColor(fill), parentElement);\n };\n LayoutPanel.prototype.getItemColor = function (isLeafItem, item) {\n var treemap = this.treemap;\n var itemFill = isLeafItem ? treemap.leafItemSettings.fill : treemap.levels[item['groupIndex']].fill;\n var itemOpacity = isLeafItem ? treemap.leafItemSettings.opacity : treemap.levels[item['groupIndex']].opacity;\n var parentData = findChildren(treemap.levelsOfData[0])['values'];\n var colorMapping = isLeafItem ? treemap.leafItemSettings.colorMapping :\n treemap.levels[item['groupIndex']].colorMapping;\n if (colorMapping.length > 0) {\n var option = colorMap(colorMapping, item['data'][this.treemap.equalColorValuePath], item['data'][this.treemap.rangeColorValuePath], item['data'][this.treemap.weightValuePath]);\n itemFill = option['fill'];\n itemOpacity = option['opacity'];\n }\n else {\n for (var i = 0; i < parentData.length; i++) {\n if (parentData[i]['levelOrderName'] === item['levelOrderName'].split('_')[0]) {\n itemFill = treemap.palette.length > 0 ? treemap.palette[i % treemap.palette.length] : itemFill;\n }\n }\n }\n return { fill: itemFill, opacity: itemOpacity };\n };\n /**\n * To find saturated color for datalabel\n */\n LayoutPanel.prototype.getSaturatedColor = function (color) {\n var saturatedColor = color;\n saturatedColor = (saturatedColor === 'transparent') ? window.getComputedStyle(document.body, null).backgroundColor : saturatedColor;\n var rgbValue = convertHexToColor(colorNameToHex(saturatedColor));\n var contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n return contrast >= 128 ? 'black' : 'white';\n };\n LayoutPanel.prototype.renderTemplate = function (secondaryEle, groupId, rect, position, template, item) {\n var templateElement;\n var labelEle;\n var templateSize;\n var templateFn;\n var templateLocation;\n if (isNullOrUndefined(template['prototype'])) {\n var keys = Object.keys(item['data']);\n for (var i = 0; i < keys.length; i++) {\n template = template.replace(new RegExp('{{:' + keys[i] + '}}', 'g'), item['data'][keys[i].toString()]);\n }\n }\n templateFn = getTemplateFunction(template);\n templateElement = templateFn(item['data'], this.treemap);\n labelEle = convertElement(templateElement, groupId + '_Template', item['data']);\n templateSize = measureElement(labelEle, secondaryEle);\n templateLocation = findLabelLocation(rect, position, templateSize, 'Template', this.treemap);\n labelEle.style.left = templateLocation.x + 'px';\n labelEle.style.top = templateLocation.y + 'px';\n return labelEle;\n };\n LayoutPanel.prototype.labelInterSectAction = function (rect, text, textStyle, alignment) {\n var textValue;\n var maxWidth = rect.width - 10;\n switch (alignment) {\n case 'Hide':\n textValue = [hide(maxWidth, rect.height, text, textStyle)];\n break;\n case 'Trim':\n textValue = [textTrim((maxWidth + 3), text, textStyle)];\n break;\n case 'WrapByWord':\n textValue = wordWrap(maxWidth, text, textStyle);\n break;\n case 'Wrap':\n textValue = textWrap(maxWidth, text, textStyle);\n break;\n }\n return textValue;\n };\n return LayoutPanel;\n}());\nexport { LayoutPanel };\n","import { print as printWindow, createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\n/**\n * Annotation Module handles the Annotation for Maps\n */\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for Maps\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the Maps\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWindow.moveTo(0, 0);\n this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n };\n this.control.trigger(beforePrint, argsData);\n if (!argsData.cancel) {\n printWindow(argsData.htmlContent, this.printWindow);\n }\n };\n /**\n * To get the html string of the Maps\n * @param elements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (elements) {\n var div = createElement('div');\n if (elements) {\n if (elements instanceof Array) {\n elements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (elements instanceof Element) {\n div.appendChild(elements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(elements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (type, fileName, orientation) {\n var _this = this;\n var element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': this.control.availableSize.width.toString(),\n 'height': this.control.availableSize.height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n this.control.svgObject.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(this.control.svgObject)], { type: 'image/svg+xml' }));\n if (type === 'SVG') {\n this.triggerDownload(fileName, type, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = element.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (type === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = element.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, (_this.control.availableSize.width - 60), _this.control.availableSize.height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, type, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + type.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","/**\n * Tree Map Component\n */\nvar __extends = (this && this.__extends) || (function () {\n var 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 return function (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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property, extend, Ajax } from '@syncfusion/ej2-base';\nimport { Complex, Collection } from '@syncfusion/ej2-base';\nimport { Event, Internationalization } from '@syncfusion/ej2-base';\nimport { SvgRenderer, isNullOrUndefined, createElement, EventHandler, Browser, remove } from '@syncfusion/ej2-base';\nimport { Border, Margin, TitleSettings, LegendSettings, InitialDrillSettings } from './model/base';\nimport { SelectionSettings, TooltipSettings, LevelSettings, LeafItemSettings, HighlightSettings, } from './model/base';\nimport { Size, stringToNumber, RectOption, Rect, textTrim, measureText, findChildren, removeClassNames } from '../treemap/utils/helper';\nimport { findPosition, TextOption, renderTextElement, isContainsData, TreeMapAjax } from '../treemap/utils/helper';\nimport { load, loaded, drillStart, drillEnd } from '../treemap/model/constants';\nimport { itemClick, itemMove, click, mouseMove, resize } from '../treemap/model/constants';\nimport { LayoutPanel } from './layout/render-panel';\nimport { ExportUtils } from '../treemap/utils/export';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n/**\n * Represents the TreeMap control.\n * ```html\n *
    \n * \n * ```\n */\nvar TreeMap = /** @class */ (function (_super) {\n __extends(TreeMap, _super);\n /**s\n * Constructor for TreeMap component.\n */\n function TreeMap(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.orientation = 'Horizontal';\n /** @private */\n _this.drilledItems = [];\n /** @private */\n _this.isHierarchicalData = false;\n return _this;\n }\n TreeMap.prototype.preRender = function () {\n this.trigger(load, { treemap: this });\n this.initPrivateVariable();\n this.unWireEVents();\n this.createSvg();\n this.wireEVents();\n this.setCulture();\n };\n TreeMap.prototype.render = function () {\n this.themeEffect();\n this.createSecondaryElement();\n this.addTabIndex();\n this.renderBorder();\n this.renderTitle(this.titleSettings, 'title', null, null);\n this.processDataManager();\n };\n /* tslint:disable:no-string-literal */\n /* tslint:disable:no-eval */\n TreeMap.prototype.processDataManager = function () {\n var _this = this;\n var dataModule;\n var queryModule;\n var ajaxModule;\n var localAjax;\n if (this.dataSource instanceof DataManager) {\n dataModule = this.dataSource;\n queryModule = this.query instanceof Query ? this.query : new Query();\n var dataManager = dataModule.executeQuery(queryModule);\n dataManager.then(function (e) {\n _this.dataSource = e['result'];\n _this.renderTreeMapElements();\n });\n }\n else if (this.dataSource instanceof TreeMapAjax) {\n localAjax = this.dataSource;\n ajaxModule = new Ajax(localAjax.dataOptions, localAjax.type, localAjax.async, localAjax.contentType);\n ajaxModule.onSuccess = function (args) {\n _this.dataSource = JSON.parse('[' + args + ']')[0];\n _this.renderTreeMapElements();\n };\n ajaxModule.send(localAjax.sendData);\n }\n else {\n this.renderTreeMapElements();\n }\n };\n TreeMap.prototype.renderTreeMapElements = function () {\n this.processingData();\n if (this.treeMapLegendModule && this.legendSettings.visible) {\n this.treeMapLegendModule.renderLegend();\n }\n this.layout.processLayoutPanel();\n this.element.appendChild(this.svgObject);\n this.elementChange();\n this.trigger(loaded, { treemap: this });\n };\n TreeMap.prototype.createSvg = function () {\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n var containerWidth = this.element.clientWidth;\n var containerHeight = this.element.clientHeight;\n this.availableSize = new Size(stringToNumber(this.width, containerWidth) || containerWidth || 600, stringToNumber(this.height, containerHeight) || containerHeight || 450);\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To initilize the private varibales of treemap.\n */\n TreeMap.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.layout = new LayoutPanel(this);\n };\n /**\n * To change font styles of map based on themes\n */\n TreeMap.prototype.themeEffect = function () {\n switch (this.theme) {\n case 'Material':\n case 'Bootstrap':\n case 'Fabric':\n this.setTextStyle('#424242');\n break;\n case 'Highcontrast':\n this.setTextStyle('#FFFFFF');\n break;\n }\n };\n TreeMap.prototype.setTextStyle = function (color) {\n this.titleSettings.textStyle.color = this.titleSettings.textStyle.color || color;\n this.titleSettings.subtitleSettings.textStyle.color = this.titleSettings.subtitleSettings.textStyle.color || color;\n this.legendSettings.textStyle.color = this.legendSettings.textStyle.color || color;\n this.legendSettings.titleStyle.color = this.legendSettings.titleStyle.color || color;\n };\n TreeMap.prototype.createSecondaryElement = function () {\n var secondaryEle = document.getElementById(this.element.id + '_Secondary_Element');\n if (secondaryEle && secondaryEle.childElementCount > 0) {\n secondaryEle.remove();\n }\n if (isNullOrUndefined(document.getElementById(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: absolute;z-index:1;'\n });\n this.element.appendChild(secondaryElement);\n }\n };\n TreeMap.prototype.elementChange = function () {\n if (this.treeMapLegendModule && this.legendSettings.visible && this.treeMapLegendModule.legendGroup && this.layout.layoutGroup) {\n this.svgObject.insertBefore(this.layout.layoutGroup, this.treeMapLegendModule.legendGroup);\n }\n };\n /**\n * @private\n * Render the treemap border\n */\n TreeMap.prototype.renderBorder = function () {\n var width = this.border.width;\n var color = this.theme === 'Highcontrast' ? '#000000' : '#FFFFFF';\n this.background = this.background ? this.background : color;\n var borderElement = document.getElementById(this.element.id + '_TreeMap_Border');\n if (isNullOrUndefined(borderElement)) {\n var borderRect = new RectOption(this.element.id + '_TreeMap_Border', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.svgObject.appendChild(this.renderer.drawRectangle(borderRect));\n }\n else {\n borderElement.setAttribute('fill', this.background);\n }\n };\n TreeMap.prototype.renderTitle = function (title, type, bounds, groupEle) {\n var style = title.textStyle;\n var height;\n var titlePadding = 10;\n var width = (this.availableSize.width - this.margin.right - this.margin.left);\n if (title.text) {\n if (isNullOrUndefined(groupEle)) {\n groupEle = this.renderer.createGroup({ id: this.element.id + '_Title_Group' });\n }\n var trimmedTitle = textTrim(width, title.text, style);\n var elementSize = measureText(trimmedTitle, style);\n var rect = (isNullOrUndefined(bounds)) ? new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height) : bounds;\n var location_1 = findPosition(rect, title.alignment, elementSize, type);\n var options = new TextOption(this.element.id + '_TreeMap_' + type, location_1.x, location_1.y, 'start', trimmedTitle);\n var titleBounds = new Rect(location_1.x, location_1.y, elementSize.width, elementSize.height);\n var element = renderTextElement(options, style, style.color, groupEle);\n element.setAttribute('aria-label', title.description || title.text);\n element.setAttribute('tabindex', (this.tabIndex + (type === 'title' ? 1 : 2)).toString());\n if ((type === 'title' && !title.subtitleSettings.text) || (type === 'subtitle')) {\n height = (this.availableSize.height - titleBounds.y - titlePadding - this.margin.bottom);\n this.areaRect = new Rect(this.margin.left, titleBounds.y + titlePadding, width, height);\n }\n if (type !== 'subtitle' && title.subtitleSettings.text) {\n this.renderTitle(title.subtitleSettings, 'subtitle', titleBounds, groupEle);\n }\n else {\n this.svgObject.appendChild(groupEle);\n }\n }\n else {\n height = (this.availableSize.height - this.margin.top - this.margin.bottom);\n this.areaRect = new Rect(this.margin.left, this.margin.top, width, height);\n }\n };\n TreeMap.prototype.processingData = function () {\n var _this = this;\n var path;\n this.dataSource = this.dataSource;\n if (!isNullOrUndefined(this.dataSource) && this.dataSource.length > 0 && this.weightValuePath) {\n this.levelsOfData = [];\n this.dataSource.map(function (data) {\n data[_this.weightValuePath] = (data[_this.weightValuePath]) ? data[_this.weightValuePath].toString() :\n data[_this.weightValuePath];\n });\n this.leafItemSettings.labelPath = this.leafItemSettings.labelPath || this.weightValuePath;\n this.checkIsHierarchicalData();\n if (this.levels.length === 0) {\n var data_1 = new Object();\n data_1['level'] = 0;\n path = this.leafItemSettings.labelPath;\n data_1[path] = [];\n for (var i = 0; i < this.dataSource.length; i++) {\n var child = findChildren(this.dataSource[i])['values'];\n if (this.isHierarchicalData && child && child.length > 0) {\n child.forEach(function (currentData, dataIndex) {\n if (currentData[path]) {\n data_1[path].push({\n groupIndex: 0, name: currentData[path], levelOrderName: currentData[path].toString(),\n data: currentData, weight: currentData[_this.weightValuePath]\n });\n }\n });\n }\n else {\n if (this.dataSource[i][path]) {\n data_1[path].push({\n groupIndex: 0, name: this.dataSource[i][path], levelOrderName: this.dataSource[i][path].toString(), data: this.dataSource[i],\n weight: this.dataSource[i][this.weightValuePath]\n });\n }\n }\n }\n this.levelsOfData.push(data_1);\n }\n else {\n if (this.isHierarchicalData) {\n this.hierarchyData = [];\n this.hierarchyData = extend([], this.dataSource, this.hierarchyData, true);\n for (var i = 0; i < this.hierarchyData.length; i++) {\n this.processHierarchicalData(this.hierarchyData[i], i);\n }\n this.levelsOfData = this.hierarchyData;\n }\n else {\n this.processFlatJsonData();\n if (this.levelsOfData.length > 1) {\n this.reOrderLevelData(this.levelsOfData.length - 1);\n }\n }\n path = this.levels[0].groupPath;\n }\n if (!this.isHierarchicalData) {\n this.findTotalWeight(this.levelsOfData[0][path], 'Parent');\n }\n }\n };\n TreeMap.prototype.checkIsHierarchicalData = function () {\n var child;\n this.dataSource = this.dataSource;\n for (var i = 0; i < this.dataSource.length; i++) {\n child = findChildren(this.dataSource[i])['values'];\n if (child && child.length) {\n this.isHierarchicalData = true;\n break;\n }\n else if (i === this.dataSource.length - 1) {\n this.isHierarchicalData = false;\n }\n }\n };\n TreeMap.prototype.processHierarchicalData = function (data, dataCount) {\n var _this = this;\n var childData;\n var levelData = [];\n var newData = new Object();\n var levelIndex;\n var path = this.leafItemSettings.labelPath ? this.leafItemSettings.labelPath : this.weightValuePath;\n var currentData = new Object();\n var level;\n var key;\n newData = findChildren(data);\n childData = newData ? newData['values'] : null;\n if (childData && childData.length > 0) {\n key = newData['key'];\n for (var i = 0; i < this.levels.length; i++) {\n if (key === this.levels[i].groupPath) {\n level = this.levels[i];\n levelIndex = i;\n }\n }\n for (var j = 0; j < childData.length; j++) {\n childData[j]['name'] = childData[j][path];\n childData[j]['levelOrderName'] = (levelIndex === 0 ? childData[j]['name'] :\n data['levelOrderName'] + '_' + childData[j]['name']) + '';\n childData[j]['groupIndex'] = isNullOrUndefined(levelIndex) ? this.levels.length : levelIndex;\n if (levelIndex !== 0) {\n childData[j]['parent'] = data;\n }\n childData[j]['groupName'] = key;\n childData[j]['data'] = childData[j];\n childData[j]['isDrilled'] = false;\n childData[j]['weight'] = childData[j][this.weightValuePath];\n }\n childData.forEach(function (currentData) {\n _this.processHierarchicalData(currentData, dataCount);\n });\n }\n if (dataCount === this.hierarchyData.length - 1) {\n var mainData_1 = this.hierarchyData[0][this.levels[0].groupPath];\n for (var k = 0; k < this.hierarchyData.length; k++) {\n childData = findChildren(this.hierarchyData[k])['values'];\n if (k !== 0 && childData) {\n childData.forEach(function (currentData) { mainData_1.push(currentData); });\n this.hierarchyData.splice(k, 1);\n k -= 1;\n }\n }\n mainData_1 = this.hierarchyData[0][this.levels[0].groupPath];\n for (var l = 0; l < mainData_1.length; l++) {\n newData[this.levels[0].groupPath] = mainData_1;\n mainData_1[l]['parent'] = newData;\n }\n }\n };\n /**\n * Handles the print method for chart control.\n */\n TreeMap.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n TreeMap.prototype.export = function (type, fileName, orientation) {\n var exportMap = new ExportUtils(this);\n exportMap.export(type, fileName, orientation);\n };\n /* tslint:disable:no-string-literal */\n TreeMap.prototype.processFlatJsonData = function () {\n this.dataSource = this.dataSource;\n var groupPath;\n var childGroupPath;\n var orderNames = [];\n var process = false;\n for (var i = 0; i < this.levels.length + 1; i++) {\n groupPath = this.levels[i] ? this.levels[i].groupPath : this.leafItemSettings.labelPath;\n var level = new Object();\n level['level'] = i;\n level[groupPath] = [];\n this.levelsOfData.push(level);\n for (var j = 0; j < this.dataSource.length; j++) {\n var currentData = {};\n var childName = '';\n if (this.dataSource[j][groupPath]) {\n var name_1 = this.dataSource[j][groupPath];\n if (i !== 0) {\n for (var k = 0; k <= i; k++) {\n var childGroupPath_1 = this.levels[k] ? this.levels[k].groupPath : groupPath;\n childName += (this.dataSource[j][childGroupPath_1]) + ((k === i) ? '' : '_');\n }\n }\n if (!(orderNames.length > 0 ? orderNames.indexOf(childName ?\n childName : name_1) !== -1 : false)) {\n currentData['name'] = name_1;\n currentData['levelOrderName'] = ((childName) ? childName : name_1) + '';\n currentData['groupIndex'] = i;\n currentData['isDrilled'] = false;\n currentData['groupName'] = groupPath;\n currentData['data'] = this.dataSource[j];\n this.levelsOfData[this.levelsOfData.length - 1][groupPath].push(currentData);\n orderNames.push((childName) ? childName : name_1);\n }\n }\n }\n }\n };\n TreeMap.prototype.reOrderLevelData = function (start) {\n var currentName;\n var currentPath = this.levels[start] ? this.levels[start].groupPath : this.leafItemSettings.labelPath;\n var prevPath = this.levels[start - 1].groupPath;\n var currentData = this.levelsOfData[start][currentPath];\n var previousData = this.levelsOfData[start - 1][prevPath];\n for (var i = 0; i < currentData.length; i++) {\n currentName = currentData[i]['levelOrderName'];\n for (var j = 0; j < previousData.length; j++) {\n previousData[j][currentPath] = isNullOrUndefined(previousData[j][currentPath]) ? [] : previousData[j][currentPath];\n if (currentName.indexOf(previousData[j]['levelOrderName']) !== -1) {\n if (isNullOrUndefined(currentData[i]['parent'])) {\n currentData[i]['parent'] = previousData[j];\n }\n previousData[j][currentPath].push(currentData[i]);\n break;\n }\n }\n }\n this.findTotalWeight(this.levelsOfData[this.levelsOfData.length - 1][currentPath], 'Child');\n this.levelsOfData.splice(start, 1);\n if ((start - 1) > 0) {\n this.reOrderLevelData(start - 1);\n }\n };\n TreeMap.prototype.findTotalWeight = function (processData, type) {\n var _this = this;\n var totalWeight;\n var childData;\n var levelName;\n var start = 0;\n var split;\n var groupName;\n var groupObj = new Object();\n var _loop_1 = function (i) {\n totalWeight = 0;\n groupName = processData[i]['groupName'];\n split = processData[i]['levelOrderName'].split('_');\n this_1.dataSource.forEach(function (data) {\n if (isContainsData(split, processData[i]['levelOrderName'], data, _this)) {\n totalWeight += parseFloat(data[_this.weightValuePath]);\n }\n });\n if (type === 'Parent') {\n groupObj[groupName] = processData;\n processData[i]['parent'] = groupObj;\n }\n processData[i]['weight'] = totalWeight;\n };\n var this_1 = this;\n for (var i = 0; i < processData.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * To unbind event handlers for treemap.\n */\n TreeMap.prototype.unWireEVents = function () {\n EventHandler.remove(this.element, 'click', this.clickOnTreeMap);\n // EventHandler.remove(this.element, 'dblclick', this.doubleClick);\n EventHandler.remove(this.element, Browser.touchStartEvent, this.mouseDownOnTreeMap);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMoveOnTreeMap);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEndOnTreeMap);\n EventHandler.remove(this.element, 'pointerleave mouseleave', this.mouseLeaveOnTreeMap);\n window.removeEventListener('resize', this.resizeOnTreeMap);\n };\n /**\n * To bind event handlers for treemap.\n */\n TreeMap.prototype.wireEVents = function () {\n EventHandler.add(this.element, 'click', this.clickOnTreeMap, this);\n //EventHandler.add(this.element, 'dblclick', this.doubleClick, this);\n EventHandler.add(this.element, Browser.touchStartEvent, this.mouseDownOnTreeMap, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMoveOnTreeMap, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEndOnTreeMap, this);\n EventHandler.add(this.element, 'pointerleave mouseleave', this.mouseLeaveOnTreeMap, this);\n window.addEventListener('resize', this.resizeOnTreeMap.bind(this));\n };\n /**\n * Method to set culture for maps\n */\n TreeMap.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * To add tab index for treemap element\n */\n TreeMap.prototype.addTabIndex = function () {\n this.element.setAttribute('aria-label', this.description || 'TreeMap Element');\n this.element.setAttribute('tabindex', this.tabIndex.toString());\n };\n /**\n * To handle the window resize event on treemap.\n */\n TreeMap.prototype.resizeOnTreeMap = function (e) {\n var _this = this;\n var args = {\n name: resize,\n cancel: false,\n previousSize: this.availableSize,\n currentSize: new Size(0, 0),\n treemap: this\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-treemap')) {\n this.resizeTo = setTimeout(function () {\n _this.unWireEVents();\n _this.createSvg();\n _this.refreshing = true;\n _this.wireEVents();\n args.currentSize = _this.availableSize;\n _this.trigger(resize, args);\n _this.render();\n }, 500);\n }\n };\n TreeMap.prototype.clickOnTreeMap = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var eventArgs;\n var itemIndex;\n var clickArgs = { cancel: false, name: click, treemap: this, mouseEvent: e };\n this.trigger(click, clickArgs);\n if (targetId.indexOf('_Item_Index') > -1) {\n e.preventDefault();\n itemIndex = parseFloat(targetId.split('_')[6]);\n eventArgs = { cancel: false, name: itemClick, treemap: this, item: this.layout.renderItems[itemIndex], mouseEvent: e };\n this.trigger(itemClick, eventArgs);\n }\n };\n /* tslint:disable-next-line:max-func-body-length */\n TreeMap.prototype.mouseDownOnTreeMap = function (e) {\n var targetEle = e.target;\n var startEvent;\n var endEvent;\n var targetId = targetEle.id;\n var totalRect;\n var index;\n var newDrillItem = new Object();\n var item;\n var process = true;\n var layoutID = this.element.id + '_TreeMap_' + this.layoutType + '_Layout';\n if (targetId.indexOf('_Item_Index') > -1 && this.enableDrillDown) {\n e.preventDefault();\n index = parseFloat(targetId.split('_')[6]);\n item = this.layout.renderItems[index];\n if (this.levels.length !== 0 && !item['isLeafItem'] && findChildren(item)['values'] &&\n findChildren(item)['values'].length > 0) {\n if (this.drilledItems.length > 0) {\n for (var i = 0; i < this.drilledItems.length; i++) {\n if (item['levelOrderName'] === this.drilledItems[i]['name']) {\n if (item['groupIndex'] === 0 && item['parent'][item['groupName']] instanceof Array) {\n item['isDrilled'] = !(item['isDrilled']);\n if (!item['isDrilled']) {\n newDrillItem = item['parent'];\n }\n else {\n newDrillItem[item['groupName']] = [item];\n }\n }\n else {\n item['isDrilled'] = false;\n item['parent']['isDrilled'] = true;\n item = item['parent'];\n newDrillItem[item['groupName']] = [item];\n }\n this.drilledItems.splice(i, 1);\n i -= 1;\n break;\n }\n else if (i === this.drilledItems.length - 1) {\n item['isDrilled'] = true;\n newDrillItem[item['groupName']] = [item];\n }\n }\n }\n else {\n item['isDrilled'] = true;\n newDrillItem[item['groupName']] = [item];\n }\n startEvent = { cancel: false, name: drillStart, treemap: this, item: newDrillItem, element: targetEle };\n this.trigger(drillStart, startEvent);\n if (!startEvent.cancel) {\n if (document.getElementById(layoutID)) {\n document.getElementById(layoutID).remove();\n }\n totalRect = extend({}, this.areaRect, totalRect, true);\n this.layout.calculateLayoutItems(newDrillItem, totalRect);\n this.layout.renderLayoutItems(newDrillItem);\n }\n endEvent = { cancel: false, name: drillEnd, treemap: this, renderItems: this.layout.renderItems };\n this.trigger(drillEnd, endEvent);\n if (process) {\n this.drilledItems.push({ name: item['levelOrderName'], data: item });\n }\n }\n }\n this.notify(Browser.touchStartEvent, e);\n };\n TreeMap.prototype.mouseMoveOnTreeMap = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var eventArgs;\n var item;\n var moveArgs = { cancel: false, name: mouseMove, treemap: this, mouseEvent: e };\n this.trigger(mouseMove, moveArgs);\n var childItems;\n if (targetId.indexOf('_Item_Index') > -1) {\n item = this.layout.renderItems[parseFloat(targetId.split('_')[6])];\n childItems = findChildren(item)['values'];\n this.element.style.cursor = (!item['isLeafItem'] && childItems && childItems.length > 0 && this.enableDrillDown) ?\n 'pointer' : 'auto';\n eventArgs = { cancel: false, name: itemMove, treemap: this, item: item, mouseEvent: e };\n this.trigger(itemMove, eventArgs);\n }\n this.notify(Browser.touchMoveEvent, e);\n };\n TreeMap.prototype.mouseEndOnTreeMap = function (e) {\n this.notify(Browser.touchEndEvent, e);\n };\n TreeMap.prototype.mouseLeaveOnTreeMap = function (e) {\n if (this.treeMapTooltipModule) {\n this.treeMapTooltipModule.removeTooltip();\n }\n if (this.treeMapLegendModule) {\n this.treeMapLegendModule.removeInteractivePointer();\n }\n removeClassNames(document.getElementsByClassName('treeMapHighLight'), 'treeMapHighLight', this);\n };\n /**\n * To provide the array of modules needed for maps rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n TreeMap.prototype.requiredModules = function () {\n var modules = [];\n if (this.tooltipSettings.visible) {\n modules.push({\n member: 'treeMapTooltip',\n args: [this]\n });\n }\n if (this.highlightSettings.enable) {\n modules.push({\n member: 'treeMapHighlight',\n args: [this]\n });\n }\n if (this.selectionSettings.enable) {\n modules.push({\n member: 'treeMapSelection',\n args: [this]\n });\n }\n if (this.legendSettings.visible) {\n modules.push({\n member: 'treeMapLegend',\n args: [this]\n });\n }\n return modules;\n };\n TreeMap.prototype.onPropertyChanged = function (newProp, oldProp) {\n var render = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'background':\n this.renderBorder();\n break;\n case 'height':\n case 'width':\n render = true;\n break;\n }\n }\n if (render) {\n this.createSvg();\n this.render();\n }\n };\n /**\n * Get component name\n */\n TreeMap.prototype.getModuleName = function () {\n return 'treemap';\n };\n /**\n * To destroy the treemap control.\n */\n TreeMap.prototype.destroy = function () {\n this.unWireEVents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n TreeMap.prototype.getPersistData = function () {\n return '';\n };\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Border)\n ], TreeMap.prototype, \"border\", void 0);\n __decorate([\n Complex({}, Margin)\n ], TreeMap.prototype, \"margin\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"background\", void 0);\n __decorate([\n Property('Material')\n ], TreeMap.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, TitleSettings)\n ], TreeMap.prototype, \"titleSettings\", void 0);\n __decorate([\n Property('Squarified')\n ], TreeMap.prototype, \"layoutType\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"weightValuePath\", void 0);\n __decorate([\n Property('')\n ], TreeMap.prototype, \"rangeColorValuePath\", void 0);\n __decorate([\n Property('')\n ], TreeMap.prototype, \"equalColorValuePath\", void 0);\n __decorate([\n Property([])\n ], TreeMap.prototype, \"palette\", void 0);\n __decorate([\n Property(false)\n ], TreeMap.prototype, \"enableDrillDown\", void 0);\n __decorate([\n Complex({}, InitialDrillSettings)\n ], TreeMap.prototype, \"initialDrillDown\", void 0);\n __decorate([\n Complex({}, LeafItemSettings)\n ], TreeMap.prototype, \"leafItemSettings\", void 0);\n __decorate([\n Collection([], LevelSettings)\n ], TreeMap.prototype, \"levels\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], TreeMap.prototype, \"highlightSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeMap.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], TreeMap.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], TreeMap.prototype, \"legendSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeMap.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], TreeMap.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"format\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemRendering\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"drillStart\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"drillEnd\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemSelected\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemHighlight\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"tooltipRendering\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemClick\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemMove\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"mouseMove\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"resize\", void 0);\n TreeMap = __decorate([\n NotifyPropertyChanges\n ], TreeMap);\n return TreeMap;\n}(Component));\nexport { TreeMap };\n","import { findChildren, Location, Rect, Size, measureText, TextOption, PathOption, RectOption, drawSymbol, orderByArea } from '../utils/helper';\nimport { Browser, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { renderTextElement, textTrim } from '../utils/helper';\nimport { legendItemRendering } from '../model/constants';\n/**\n * Legend module class\n */\nvar TreeMapLegend = /** @class */ (function () {\n function TreeMapLegend(treemap) {\n this.page = 0;\n this.legendBorderRect = new Rect(0, 0, 0, 0);\n this.currentPage = 0;\n this.heightIncrement = 0;\n this.widthIncrement = 0;\n this.textMaxWidth = 0;\n this.legendItemRect = new Rect(0, 0, 0, 0);\n this.treemap = treemap;\n this.addEventListener();\n }\n /**\n * method for legend\n */\n TreeMapLegend.prototype.renderLegend = function () {\n this.legendRenderingCollections = [];\n this.legendCollections = [];\n this.legendNames = [];\n this.totalPages = [];\n this.gradientCount = 1;\n this.defsElement = this.treemap.renderer.createDefs();\n this.treemap.svgObject.appendChild(this.defsElement);\n this.calculateLegendBounds();\n this.drawLegend();\n };\n /* tslint:disable:no-string-literal */\n /* tslint:disable-next-line:max-func-body-length */\n TreeMapLegend.prototype.calculateLegendBounds = function () {\n var _this = this;\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n this.findColorMappingLegendItems(treemap.levelsOfData[0]);\n if (this.treemap.palette.length > 0 && this.legendCollections.length === 0) {\n this.findPaletteLegendItems(this.treemap.levelsOfData[0], 'Parent');\n }\n if (this.legendCollections.length > 0) {\n var defaultSize = 25;\n var textPadding = 10;\n var position = legend.position;\n var legendTitle = legend.title.text;\n var titleTextStyle = legend.titleStyle;\n var legendMode = legend.mode;\n var shapeX = 0;\n var shapeY = 0;\n var textX = 0;\n var textY = 0;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapeLocation = [];\n var textLocation = [];\n var orientation_1 = (legend.orientation === 'None') ? ((position === 'Top' || position === 'Bottom')\n ? 'Horizontal' : 'Vertical') : legend.orientation;\n var leftPadding = 10;\n var topPadding = 10;\n var spacing = 10;\n var legendWidth = (legend.width.length > 1) ? (legend.width.indexOf('%') > -1) ? (treemap.availableSize.width / 100)\n * parseFloat(legend.width) : parseFloat(legend.width) : null;\n var legendHeight = (legend.height.length > 1) ? (legend.height.indexOf('%') > -1) ?\n (treemap.availableSize.height / 100) * parseFloat(legend.height) : parseFloat(legend.height) : null;\n var legendTitleSize = measureText(legendTitle, titleTextStyle);\n var startX_1 = 0;\n var startY_1 = 0;\n var shapePadding = legend.shapePadding;\n var rectWidth = void 0;\n var rectHeight = void 0;\n var itemTextStyle = legend.textStyle;\n var legendLength = this.legendCollections.length;\n if (legendMode === 'Default') {\n legendWidth = (isNullOrUndefined(legendWidth)) ? treemap.areaRect.width : legendWidth;\n legendHeight = (isNullOrUndefined(legendHeight)) ? treemap.areaRect.height : legendHeight;\n var j = 0;\n for (var i = 0; i < this.legendCollections.length; i++) {\n var legendItem = this.legendCollections[i];\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n var legendTextSize = measureText(legendItem['legendName'], legend.textStyle);\n this.textMaxWidth = Math.max(this.textMaxWidth, legendTextSize.width);\n if (i === 0) {\n startX_1 = shapeX = (leftPadding + (shapeWidth / 2));\n startY_1 = shapeY = topPadding + legendTitleSize.height + (shapeHeight > legendTextSize.height ? shapeHeight / 2\n : (legendTextSize.height / 4));\n }\n else {\n var maxSize = (legendTextSize.height > shapeHeight) ? legendTextSize.height : shapeHeight;\n if (orientation_1 === 'Horizontal') {\n var prvePositionX = (textLocation[j - 1].x + textLocation[j - 1].width) + textPadding + shapeWidth;\n if ((prvePositionX + shapePadding + legendTextSize.width) > legendWidth) {\n var nextPositionY = (textLocation[j - 1].y > (shapeLocation[j - 1].y + (shapeHeight / 2)) ?\n textLocation[j - 1].y : (shapeLocation[j - 1].y + (shapeHeight / 2))) + topPadding;\n if ((nextPositionY + maxSize) > legendHeight) {\n this.getPageChanged();\n j = 0;\n shapeLocation = [];\n textLocation = [];\n shapeX = startX_1;\n shapeY = startY_1;\n }\n else {\n shapeX = (shapeLocation[0].x);\n shapeY = (nextPositionY + (maxSize / 2));\n }\n }\n else {\n shapeX = (prvePositionX - (shapeWidth / 2));\n shapeY = (shapeLocation[j - 1]).y;\n }\n }\n else {\n var prevPositionY = textLocation[j - 1].y > shapeLocation[j - 1].y + (shapeHeight / 2) ?\n textLocation[j - 1].y : shapeLocation[j - 1].y + (shapeHeight / 2);\n if ((prevPositionY + topPadding + maxSize) > legendHeight) {\n var nextPositionX = (textLocation[j - 1].x + this.textMaxWidth + textPadding);\n if ((nextPositionX + shapePadding + legendTextSize.width) > legendWidth) {\n shapeX = startX_1;\n shapeY = startY_1;\n textLocation = [];\n shapeLocation = [];\n this.getPageChanged();\n j = 0;\n }\n else {\n shapeX = nextPositionX + (shapeWidth / 2);\n shapeY = (shapeLocation[0].y);\n }\n }\n else {\n shapeX = shapeLocation[j - 1].x;\n shapeY = prevPositionY + topPadding + (shapeHeight / 2);\n }\n }\n }\n textX = shapeX + (shapeWidth / 2) + shapePadding;\n textY = shapeY + (legendTextSize.height / 4);\n shapeLocation.push({ x: shapeX, y: shapeY });\n textLocation.push({ x: textX, y: textY, width: legendTextSize.width, height: (legendTextSize.height / 2) });\n this.totalPages[this.page]['Collection'].push({\n DisplayText: legendItem['legendName'],\n Shape: { x: shapeX, y: shapeY },\n Text: { x: textX, y: textY },\n Fill: legendItem['legendFill'],\n Data: legendItem['legendData'],\n Rect: {\n x: shapeLocation[j].x - (shapeWidth / 2),\n y: (shapeLocation[j].y - (shapeHeight / 2)) < (textY - legendTextSize.height) ?\n (shapeLocation[j].y - (shapeHeight / 2)) : (textY - legendTextSize.height),\n width: Math.abs((shapeLocation[j].x - (shapeWidth / 2)) - (textX + legendTextSize.width)),\n height: ((shapeHeight > legendTextSize.height) ? shapeHeight : legendTextSize.height)\n }\n });\n j++;\n }\n var collection = this.totalPages[0]['Collection'];\n collection.forEach(function (legendObj, index) {\n var legendRect = new Rect(legendObj['Rect']['x'], legendObj['Rect']['y'], legendObj['Rect']['width'], legendObj['Rect']['height']);\n if (index === 0) {\n startX_1 = legendRect.x;\n startY_1 = legendRect.y;\n }\n _this.widthIncrement = Math.max(_this.widthIncrement, Math.abs(startX_1 - (legendRect.x + legendRect.width)));\n _this.heightIncrement = Math.max(_this.heightIncrement, Math.abs(startY_1 - (legendRect.y + legendRect.height)));\n });\n legendWidth = ((this.widthIncrement < legendWidth) ? this.widthIncrement : legendWidth);\n legendHeight = ((this.heightIncrement < legendHeight) ? this.heightIncrement : legendHeight);\n this.legendItemRect = {\n x: collection[0]['Rect']['x'], y: collection[0]['Rect']['y'],\n width: legendWidth, height: legendHeight\n };\n }\n else {\n var itemTextStyle_1 = legend.textStyle;\n var rectWidth_1;\n var rectHeight_1;\n var legendLength_1 = this.legendCollections.length;\n rectWidth_1 = (orientation_1 === 'Horizontal') ? (isNullOrUndefined(legendWidth)) ? (treemap.areaRect.width / legendLength_1) :\n (legendWidth / legendLength_1) : (isNullOrUndefined(legendWidth)) ? defaultSize : legendWidth;\n rectHeight_1 = (orientation_1 === 'Horizontal') ? (isNullOrUndefined(legendHeight)) ? defaultSize : legendHeight :\n (isNullOrUndefined(legendHeight)) ? (treemap.areaRect.height / legendLength_1) : (legendHeight / legendLength_1);\n startX_1 = 0;\n startY_1 = legendTitleSize.height + spacing;\n var textPadding_1 = 10;\n var placement = legend.labelPosition;\n var itemStartX = 0;\n var itemStartY = 0;\n var labelAction = legend.labelDisplayMode;\n var maxTextHeight = 0;\n var maxTextWidth = 0;\n for (var i = 0; i < this.legendCollections.length; i++) {\n startX_1 = (orientation_1 === 'Horizontal') ? (startX_1 + rectWidth_1) : startX_1;\n startY_1 = (orientation_1 === 'Horizontal') ? startY_1 : (startY_1 + rectHeight_1);\n var legendText = this.legendCollections[i]['legendName'];\n var itemTextSize = new Size(0, 0);\n if (labelAction === 'None') {\n itemTextSize = measureText(legendText, itemTextStyle_1);\n }\n else if (labelAction === 'Trim') {\n legendText = textTrim((orientation_1 === 'Horizontal' ? rectWidth_1 : rectHeight_1), legendText, itemTextStyle_1);\n itemTextSize = measureText(legendText, itemTextStyle_1);\n }\n else {\n legendText = '';\n }\n maxTextHeight = Math.max(maxTextHeight, itemTextSize.height);\n maxTextWidth = Math.max(maxTextWidth, itemTextSize.width);\n if (itemTextSize.width > 0 && itemTextSize.height > 0) {\n if (orientation_1 === 'Horizontal') {\n textX = startX_1 + (rectWidth_1 / 2);\n textY = (placement === 'After') ? (startY_1 + rectHeight_1 + (itemTextSize.height / 2)) + textPadding_1 :\n (startY_1 - textPadding_1);\n }\n else {\n textX = (placement === 'After') ? startX_1 - (itemTextSize.width / 2) - textPadding_1\n : (startX_1 + rectWidth_1 + itemTextSize.width / 2) + textPadding_1;\n textY = startY_1 + (rectHeight_1 / 2) + (itemTextSize.height / 4);\n }\n }\n if (i === 0) {\n itemStartX = (orientation_1 === 'Horizontal') ? startX_1 : (placement === 'After') ?\n textX - (itemTextSize.width / 2) : startX_1;\n itemStartY = (orientation_1 === 'Horizontal') ? (placement === 'After') ? startY_1 :\n textY - (itemTextSize.height / 2) : startY_1;\n }\n if (i === legendLength_1 - 1) {\n legendWidth = (orientation_1 === 'Horizontal') ? Math.abs((startX_1 + rectWidth_1) - itemStartX) :\n (rectWidth_1 + maxTextWidth + textPadding_1);\n legendHeight = (orientation_1 === 'Horizontal') ? (rectHeight_1 + (maxTextHeight / 2) + textPadding_1) :\n Math.abs((startY_1 + rectHeight_1) - itemStartY);\n }\n this.legendRenderingCollections.push({\n fill: this.legendCollections[i]['legendFill'], x: startX_1, y: startY_1,\n width: rectWidth_1, height: rectHeight_1, element: this.legendCollections[i]['gradientElement'],\n text: legendText, textX: textX, textY: textY,\n textWidth: itemTextSize.width, textHeight: itemTextSize.height,\n data: this.legendCollections[i]['legendData']\n });\n }\n this.legendItemRect = { x: itemStartX, y: itemStartY, width: legendWidth, height: legendHeight };\n }\n }\n };\n TreeMapLegend.prototype.getPageChanged = function () {\n this.page++;\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n };\n TreeMapLegend.prototype.findColorMappingLegendItems = function (data) {\n var child = findChildren(data)['values'];\n if (child && child.length > 0) {\n this.calculateLegendItems(child);\n if (this.treemap.levels.length > 0) {\n for (var i = 0; i < child.length; i++) {\n this.findColorMappingLegendItems(child[i]);\n }\n }\n }\n };\n TreeMapLegend.prototype.findPaletteLegendItems = function (data, type) {\n var child = findChildren(data)['values'];\n if (child && child.length > 0) {\n for (var i = 0; i < child.length; i++) {\n this.legendCollections.push({\n legendName: child[i]['name'],\n legendFill: this.treemap.palette[i % this.treemap.palette.length],\n legendData: [],\n itemArea: child[i]['weight']\n });\n }\n this.legendCollections.sort(orderByArea);\n for (var j = 0; j < this.legendCollections.length; j++) {\n this.legendCollections[j]['legendFill'] = this.treemap.palette[j % this.treemap.palette.length];\n }\n }\n };\n TreeMapLegend.prototype.calculateLegendItems = function (data) {\n var isAddData;\n var fill;\n var rangeValue;\n var currentData;\n var legendText;\n var itemValue;\n var isLeafItem;\n var colorMapProcess = false;\n var colorMapping;\n var groupIndex;\n var leaf = this.treemap.leafItemSettings;\n var levels = this.treemap.levels;\n var equalValue;\n var position = this.treemap.legendSettings.position;\n var gradientElement;\n var x2;\n var y2;\n for (var i = 0; i < data.length; i++) {\n currentData = data[i]['data'];\n groupIndex = data[i]['groupIndex'];\n isLeafItem = (this.treemap.levels.length === 0 || groupIndex === this.treemap.levels.length);\n colorMapping = isLeafItem ? leaf.colorMapping : levels[groupIndex].colorMapping;\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n rangeValue = Number(currentData[this.treemap.rangeColorValuePath]);\n equalValue = currentData[this.treemap.equalColorValuePath];\n colorMap.value = !isNullOrUndefined(colorMap.value) ? colorMap.value.toString() : colorMap.value;\n if (!isNullOrUndefined(colorMap.from) && !isNullOrUndefined(colorMap.to) &&\n rangeValue >= colorMap.from && rangeValue <= colorMap.to) {\n colorMapProcess = true;\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.from + ' - ' + colorMap.to;\n fill = isNullOrUndefined(colorMap.color) ? fill : colorMap.color;\n isAddData = this.isAddNewLegendData(legendText);\n }\n else if (!isNullOrUndefined(colorMap.value) && equalValue === colorMap.value) {\n colorMapProcess = true;\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.value.toString();\n fill = isNullOrUndefined(colorMap.color) ? fill : colorMap.color;\n isAddData = this.isAddNewLegendData(legendText);\n }\n if (colorMapProcess && colorMap.maxOpacity && colorMap.minOpacity && this.treemap.legendSettings.mode === 'Interactive') {\n var colors = [];\n var gradient = void 0;\n var stop1Color = { colorStop: '0%', color: fill };\n var stop2Color = { colorStop: '100%', color: fill };\n x2 = position === 'Top' || position === 'Bottom' ? '100%' : '0%';\n y2 = position === 'Top' || position === 'Bottom' ? '0%' : '100%';\n colors.push(stop1Color);\n colors.push(stop2Color);\n gradient = {\n id: 'groupIndex_' + groupIndex + '_colorIndex_' + this.gradientCount, x1: '0%', y1: '0%', x2: x2, y2: y2\n };\n gradientElement = this.treemap.renderer.drawGradient('linearGradient', gradient, colors).childNodes[0];\n gradientElement.childNodes[0].setAttribute('stop-opacity', colorMap.minOpacity.toString());\n gradientElement.childNodes[1].setAttribute('stop-opacity', colorMap.maxOpacity.toString());\n this.defsElement.appendChild(gradientElement);\n this.gradientCount++;\n }\n if (isAddData && isAddData['process'] && colorMapProcess) {\n colorMapProcess = false;\n this.legendCollections.push({\n legendName: legendText, legendFill: fill, legendData: [], gradientElement: gradientElement\n });\n this.legendCollections[this.legendCollections.length - 1]['legendData'].push(data[i]);\n }\n else if (colorMapProcess) {\n colorMapProcess = false;\n this.legendCollections[isAddData['value']]['legendData'].push(data[i]);\n }\n }\n }\n };\n TreeMapLegend.prototype.isAddNewLegendData = function (legendText) {\n var newDataProcess;\n var itemValue;\n if (this.legendCollections.length === 0) {\n newDataProcess = true;\n }\n else {\n for (var j = 0; j < this.legendCollections.length; j++) {\n if (legendText === this.legendCollections[j]['legendName']) {\n newDataProcess = false;\n itemValue = j;\n break;\n }\n else if (j === this.legendCollections.length - 1) {\n newDataProcess = true;\n }\n }\n }\n return { process: newDataProcess, value: itemValue };\n };\n /**\n * To draw the legend\n */\n TreeMapLegend.prototype.drawLegend = function () {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var render = treemap.renderer;\n var fill;\n var textOptions;\n var gradientElement;\n var textFont = legend.textStyle;\n this.legendGroup = render.createGroup({ id: treemap.element.id + '_Legend_Group' });\n this.renderLegendBorder();\n this.renderLegendTitle();\n if (legend.mode === 'Default') {\n this.drawLegendItem(this.currentPage);\n }\n else {\n for (var i = 0; i < this.legendRenderingCollections.length; i++) {\n var itemId = treemap.element.id + '_Legend_Index_' + i;\n var textId = treemap.element.id + '_Legend_Index_' + i + '_Text';\n var item = this.legendRenderingCollections[i];\n gradientElement = item['element'];\n fill = gradientElement ? 'url(#' + gradientElement.id + ')' : item['fill'];\n var bounds = new Rect(item['x'], item['y'], item['width'], item['height']);\n var textLocation = new Location(item['textX'], item['textY']);\n var rectOptions = new RectOption(itemId, fill, legend.shapeBorder, 1, bounds);\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'middle', item['text'], '', '');\n renderTextElement(textOptions, textFont, textFont.color, this.legendGroup);\n this.legendGroup.appendChild(render.drawRectangle(rectOptions));\n }\n }\n };\n TreeMapLegend.prototype.drawLegendItem = function (page) {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var spacing = 10;\n var shapeSize = new Size(legend.shapeWidth, legend.shapeHeight);\n var textOptions;\n var renderOptions;\n var render = treemap.renderer;\n var shapeBorder = legend.shapeBorder;\n var eventArgs;\n if (page >= 0 && page < this.totalPages.length) {\n if (document.getElementById(this.legendGroup.id)) {\n document.getElementById(this.legendGroup.id).remove();\n }\n var isLineShape = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine' || legend.shape === 'Cross');\n var strokeColor = isLineShape ? isNullOrUndefined(legend.fill) ? '#000000' : legend.fill : shapeBorder.color;\n var strokeWidth = isLineShape ? (shapeBorder.width === 0) ? 1 : shapeBorder.width : shapeBorder.width;\n for (var i = 0; i < this.totalPages[page]['Collection'].length; i++) {\n var collection = this.totalPages[page]['Collection'][i];\n var legendElement = render.createGroup({ id: treemap.element.id + '_Legend_Index_' + i });\n var legendText = collection['DisplayText'];\n var shapeId = treemap.element.id + '_Legend_Shape_Index_' + i;\n var textId = treemap.element.id + '_Legend_Text_Index_' + i;\n var shapeLocation = collection['Shape'];\n var textLocation = collection['Text'];\n eventArgs = {\n cancel: false, name: legendItemRendering, treemap: treemap, fill: collection['Fill'],\n shape: legend.shape, imageUrl: legend.imageUrl\n };\n var renderOptions_1 = new PathOption(shapeId, eventArgs.fill, strokeWidth, isLineShape ? collection['Fill'] : strokeColor, 1, '');\n legendElement.appendChild(drawSymbol(shapeLocation, eventArgs.shape, shapeSize, eventArgs.imageUrl, renderOptions_1, legendText));\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'start', legendText, '', '');\n renderTextElement(textOptions, legend.textStyle, legend.textStyle.color, legendElement);\n this.legendGroup.appendChild(legendElement);\n }\n var pagingGroup = void 0;\n var width = spacing;\n var height = (spacing / 2);\n if (this.page !== 0) {\n var pagingText = (page + 1) + '/' + this.totalPages.length;\n var pagingFont = legend.textStyle;\n var pagingTextSize = measureText(pagingText, pagingFont);\n var leftPageX = (this.legendItemRect.x + this.legendItemRect.width) - pagingTextSize.width -\n (width * 2) - spacing;\n var rightPageX = (this.legendItemRect.x + this.legendItemRect.width);\n var locY = (this.legendItemRect.y + this.legendItemRect.height) + (height / 2) + spacing;\n var pageTextX = rightPageX - width - (pagingTextSize.width / 2) - (spacing / 2);\n pagingGroup = render.createGroup({ id: treemap.element.id + '_Legend_Paging_Group' });\n var leftPageElement = render.createGroup({ id: treemap.element.id + '_Legend_Left_Paging_Group' });\n var rightPageElement = render.createGroup({ id: treemap.element.id + '_Legend_Right_Paging_Group' });\n var rightPath = ' M ' + rightPageX + ' ' + locY + ' L ' + (rightPageX - width) + ' ' + (locY - height) +\n ' L ' + (rightPageX - width) + ' ' + (locY + height) + ' z ';\n var leftPath = ' M ' + leftPageX + ' ' + locY + ' L ' + (leftPageX + width) + ' ' + (locY - height) +\n ' L ' + (leftPageX + width) + ' ' + (locY + height) + ' z ';\n var leftPageOptions = new PathOption(treemap.element.id + '_Left_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', leftPath);\n leftPageElement.appendChild(render.drawPath(leftPageOptions));\n var leftRectPageOptions = new RectOption(treemap.element.id + '_Left_Page_Rect', 'transparent', {}, 1, new Rect(leftPageX - (width / 2), (locY - (height * 2)), width * 2, spacing * 2), '');\n leftPageElement.appendChild(render.drawRectangle(leftRectPageOptions));\n this.wireEvents(leftPageElement);\n var rightPageOptions = new PathOption(treemap.element.id + '_Right_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', rightPath);\n rightPageElement.appendChild(render.drawPath(rightPageOptions));\n var rightRectPageOptions = new RectOption(treemap.element.id + '_Right_Page_Rect', 'transparent', {}, 1, new Rect((rightPageX - width), (locY - height), width, spacing), '');\n rightPageElement.appendChild(render.drawRectangle(rightRectPageOptions));\n this.wireEvents(rightPageElement);\n pagingGroup.appendChild(leftPageElement);\n pagingGroup.appendChild(rightPageElement);\n var pageTextOptions = {\n 'id': treemap.element.id + '_Paging_Text',\n 'x': pageTextX,\n 'y': locY + (pagingTextSize.height / 4),\n 'fill': '#a6a6a6',\n 'font-size': '14px',\n 'font-style': pagingFont.fontStyle,\n 'font-family': pagingFont.fontFamily,\n 'font-weight': pagingFont.fontWeight,\n 'text-anchor': 'middle',\n 'transform': '',\n 'opacity': 1,\n 'dominant-baseline': ''\n };\n pagingGroup.appendChild(render.createText(pageTextOptions, pagingText));\n this.legendGroup.appendChild(pagingGroup);\n }\n }\n };\n TreeMapLegend.prototype.renderLegendBorder = function () {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var legendTitle = legend.title.text;\n var spacing = 10;\n var textStyle = legend.titleStyle;\n var textOptions;\n var title = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);\n var textSize = measureText(title, textStyle);\n this.legendBorderRect = new Rect((this.legendItemRect.x - spacing), (this.legendItemRect.y - spacing - textSize.height), (this.legendItemRect.width) + (spacing * 2), (this.legendItemRect.height) + (spacing * 2) + textSize.height +\n (legend.mode === 'Interactive' ? 0 : (this.page !== 0) ? spacing : 0));\n var renderOptions = new RectOption(treemap.element.id + '_Legend_Border', legend.background, legend.border, 1, this.legendBorderRect, '');\n var legendBorder = treemap.renderer.drawRectangle(renderOptions);\n legendBorder.style.pointerEvents = 'none';\n this.legendGroup.appendChild(legendBorder);\n this.getLegendAlignment(treemap, this.legendBorderRect.width, this.legendBorderRect.height, legend);\n this.legendGroup.setAttribute('transform', 'translate( ' + (this.translate.x + (-(this.legendBorderRect.x))) + ' ' +\n (this.translate.y + (-(this.legendBorderRect.y))) + ' )');\n treemap.svgObject.appendChild(this.legendGroup);\n };\n TreeMapLegend.prototype.renderLegendTitle = function () {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var textStyle = legend.titleStyle;\n var legendTitle = legend.title.text;\n var textOptions;\n var spacing = 10;\n var trimTitle = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);\n var textSize = measureText(trimTitle, textStyle);\n if (legendTitle) {\n textOptions = new TextOption(treemap.element.id + '_LegendTitle', (this.legendItemRect.x) + (this.legendItemRect.width / 2), this.legendItemRect.y - (textSize.height / 2), 'middle', trimTitle, '');\n renderTextElement(textOptions, textStyle, textStyle.color, this.legendGroup);\n }\n };\n /**\n * To rendered the interactive pointer\n */\n TreeMapLegend.prototype.renderInteractivePointer = function (e) {\n var treemap = this.treemap;\n var target = e.target;\n var interactiveId = treemap.element.id + '_Interactive_Legend';\n target = !(e.type.indexOf('touch') > -1) ? target :\n document.elementFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY);\n var targetItem;\n var legend = treemap.legendSettings;\n if (target.id.indexOf('_Item_Index') > -1 && legend.visible && this.legendRenderingCollections.length > 0) {\n var currentData = void 0;\n var legendRect = void 0;\n var rect = void 0;\n var data = void 0;\n var fill = void 0;\n var stroke = void 0;\n var strokeWidth = void 0;\n var legendElement = void 0;\n targetItem = treemap.layout.renderItems[parseFloat(target.id.split('_')[6])];\n var svgRect = treemap.svgObject.getBoundingClientRect();\n for (var i = 0; i < this.legendCollections.length; i++) {\n currentData = this.legendCollections[i];\n legendElement = document.getElementById(treemap.element.id + '_Legend_Index_' + i);\n legendRect = legendElement.getBoundingClientRect();\n var rect_1 = new Rect(Math.abs(legendRect.left - svgRect.left), Math.abs(legendRect.top - svgRect.top), legendRect.width, legendRect.height);\n fill = legendElement.getAttribute('fill');\n stroke = legend.shapeBorder.color;\n strokeWidth = legend.shapeBorder.width;\n if (!isNullOrUndefined(currentData['legendData'])) {\n data = currentData['legendData'];\n for (var j = 0; j < data.length; j++) {\n if (data[j]['levelOrderName'] === targetItem['levelOrderName']) {\n this.drawInteractivePointer(legend, fill, stroke, interactiveId, strokeWidth, rect_1);\n break;\n }\n }\n }\n }\n }\n else {\n this.removeInteractivePointer();\n }\n };\n TreeMapLegend.prototype.drawInteractivePointer = function (legend, fill, stroke, id, strokeWidth, rect) {\n var path;\n var pathOptions;\n var locX;\n var locY;\n var height = 10;\n var width = 10;\n var direction = (legend.orientation === 'None') ? (legend.position === 'Top' || legend.position === 'Bottom')\n ? 'Horizontal' : 'Vertical' : legend.orientation;\n if (direction === 'Horizontal') {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width / 2);\n locY = rect.y;\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY - height) + ' Z ';\n }\n else {\n locX = rect.x + (rect.width / 2);\n locY = rect.y + (rect.height);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY + height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' Z ';\n }\n }\n else {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width);\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX + width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' z ';\n }\n else {\n locX = rect.x;\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX - width) + ' ' + (locY + height) + ' z ';\n }\n }\n pathOptions = new PathOption(id, fill, strokeWidth, stroke, 1, '', path);\n this.treemap.svgObject.appendChild(this.treemap.renderer.drawPath(pathOptions));\n };\n TreeMapLegend.prototype.getLegendAlignment = function (treemap, width, height, legend) {\n var x;\n var y;\n var spacing = 10;\n var areaX = treemap.areaRect.x;\n var areaY = treemap.areaRect.y;\n var areaHeight = treemap.areaRect.height;\n var areaWidth = treemap.areaRect.width;\n var totalWidth = treemap.availableSize.width;\n var totalHeight = treemap.availableSize.height;\n if (legend.position === 'Float') {\n this.translate = legend.location;\n }\n else {\n switch (legend.position) {\n case 'Top':\n case 'Bottom':\n treemap.areaRect.height = (areaHeight - height);\n x = (totalWidth / 2) - (width / 2);\n y = (legend.position === 'Top') ? areaY : (areaY + treemap.areaRect.height);\n treemap.areaRect.y = (legend.position === 'Top') ? areaY + height + spacing : areaY;\n break;\n case 'Left':\n case 'Right':\n treemap.areaRect.width = (areaWidth - width);\n x = (legend.position === 'Left') ? areaX : areaX + treemap.areaRect.width;\n y = (totalHeight / 2) - (height / 2);\n treemap.areaRect.x = (legend.position === 'Left') ? areaX + width : areaX;\n break;\n }\n switch (legend.alignment) {\n case 'Near':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = treemap.areaRect.x;\n }\n else {\n y = treemap.areaRect.y;\n }\n break;\n case 'Far':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = totalWidth - width;\n }\n else {\n y = totalHeight - height;\n }\n break;\n }\n this.translate = new Location(x, y);\n }\n };\n TreeMapLegend.prototype.mouseUpHandler = function (e) {\n this.renderInteractivePointer(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeInteractivePointer.bind(this), 3000);\n };\n /**\n * To remove the interactive pointer\n */\n TreeMapLegend.prototype.removeInteractivePointer = function () {\n if (document.getElementById(this.treemap.element.id + '_Interactive_Legend')) {\n document.getElementById(this.treemap.element.id + '_Interactive_Legend').remove();\n }\n };\n /**\n * To change the next page\n */\n TreeMapLegend.prototype.changeNextPage = function (e) {\n this.currentPage = (e.target.id.indexOf('_Left_Page_') > -1) ? (this.currentPage - 1) :\n (this.currentPage + 1);\n this.drawLegend();\n };\n /**\n * Wire events for event handler\n */\n TreeMapLegend.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.changeNextPage, this);\n };\n /**\n * To add the event listener\n */\n TreeMapLegend.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchMoveEvent, this.renderInteractivePointer, this);\n this.treemap.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * To remove the event listener\n */\n TreeMapLegend.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchMoveEvent, this.renderInteractivePointer);\n this.treemap.off(Browser.touchEndEvent, this.mouseUpHandler);\n };\n /**\n * Get module name.\n */\n TreeMapLegend.prototype.getModuleName = function () {\n return 'treeMapLegend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n TreeMapLegend.prototype.destroy = function (treemap) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return TreeMapLegend;\n}());\nexport { TreeMapLegend };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { itemHighlight, itemSelected } from '../model/constants';\nimport { findHightLightItems, removeClassNames, applyOptions } from '../utils/helper';\n/**\n * Performing treemap highlight\n */\nvar TreeMapHighlight = /** @class */ (function () {\n function TreeMapHighlight(treeMap) {\n this.treemap = treeMap;\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n TreeMapHighlight.prototype.mouseMove = function (e) {\n var treemap = this.treemap;\n var processHighlight;\n var targetId = e.target.id;\n var eventArgs;\n var items = [];\n var highlight = this.treemap.highlightSettings;\n var item;\n var highLightElements = [];\n var process;\n var treeMapElement;\n var element;\n var orders;\n if (targetId.indexOf('_Item_Index') > -1) {\n if (this.highLightId !== targetId) {\n treeMapElement = document.getElementById(treemap.element.id + '_TreeMap_' + treemap.layoutType + '_Layout');\n var selectionElements = document.getElementsByClassName('treeMapSelection');\n item = this.treemap.layout.renderItems[parseFloat(targetId.split('_')[6])];\n orders = findHightLightItems(item, [], highlight.mode, treemap);\n for (var i = 0; i < treeMapElement.childElementCount; i++) {\n element = treeMapElement.childNodes[i];\n process = true;\n item = treemap.layout.renderItems[element.id.split('_')[6]];\n for (var j = 0; j < selectionElements.length; j++) {\n if (element.id === selectionElements[j].id) {\n process = false;\n break;\n }\n }\n if (orders.indexOf(item['levelOrderName']) > -1 && process) {\n highLightElements.push(element);\n items.push(item);\n }\n }\n removeClassNames(document.getElementsByClassName('treeMapHighLight'), 'treeMapHighLight', treemap);\n for (var k = 0; k < highLightElements.length; k++) {\n element = highLightElements[k];\n applyOptions(element.childNodes[0], { border: highlight.border, fill: highlight.fill, opacity: highlight.opacity });\n element.classList.add('treeMapHighLight');\n this.highLightId = targetId;\n }\n eventArgs = { cancel: false, name: itemHighlight, treemap: treemap, items: items, elements: highLightElements };\n treemap.trigger(itemHighlight, eventArgs);\n }\n else {\n processHighlight = false;\n }\n }\n else {\n removeClassNames(document.getElementsByClassName('treeMapHighLight'), 'treeMapHighLight', treemap);\n processHighlight = false;\n }\n return processHighlight;\n };\n /**\n * To bind events for highlight\n */\n TreeMapHighlight.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchMoveEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for highlight\n */\n TreeMapHighlight.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchMoveEvent, this.mouseMove);\n };\n /**\n * Get module name.\n */\n TreeMapHighlight.prototype.getModuleName = function () {\n return 'treeMapHighlight';\n };\n /**\n * To destroy the hightlight.\n * @return {void}\n * @private\n */\n TreeMapHighlight.prototype.destroy = function (treeMap) {\n this.removeEventListener();\n };\n return TreeMapHighlight;\n}());\nexport { TreeMapHighlight };\n/**\n * Performing treemap selection\n */\nvar TreeMapSelection = /** @class */ (function () {\n function TreeMapSelection(treeMap) {\n this.treemap = treeMap;\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n /**\n * Mouse down event in selection\n */\n TreeMapSelection.prototype.mouseDown = function (e) {\n var targetEle = e.target;\n var eventArgs;\n var treemap = this.treemap;\n var items = [];\n var targetId = targetEle.id;\n var item;\n var selectionElements = [];\n var opacity;\n var treeMapElement;\n var element;\n var orders;\n var selection = treemap.selectionSettings;\n var layoutID = treemap.element.id + '_TreeMap_' + treemap.layoutType + '_Layout';\n if (targetId.indexOf('_Item_Index') > -1) {\n e.preventDefault();\n if (this.selectionId !== targetId) {\n treeMapElement = document.getElementById(layoutID);\n item = treemap.layout.renderItems[parseFloat(targetId.split('_')[6])];\n orders = findHightLightItems(item, [], selection.mode, treemap);\n for (var i = 0; i < treeMapElement.childElementCount; i++) {\n element = treeMapElement.childNodes[i];\n item = treemap.layout.renderItems[element.id.split('_')[6]];\n if (orders.indexOf(item['levelOrderName']) > -1) {\n selectionElements.push(element);\n items.push(item);\n }\n }\n removeClassNames(document.getElementsByClassName('treeMapSelection'), 'treeMapSelection', treemap);\n this.selectionId = targetId;\n var highLightElements = document.getElementsByClassName('treeMapHighLight');\n for (var k = 0; k < selectionElements.length; k++) {\n element = selectionElements[k];\n if (highLightElements.length > 0) {\n for (var j = 0; j < highLightElements.length; j++) {\n if (highLightElements[j].id === element.id) {\n highLightElements[j].classList.remove('treeMapHighLight');\n }\n applyOptions(element.childNodes[0], { border: selection.border, fill: selection.fill, opacity: selection.opacity });\n element.classList.add('treeMapSelection');\n }\n }\n else {\n applyOptions(element.childNodes[0], { border: selection.border, fill: selection.fill, opacity: selection.opacity });\n element.classList.add('treeMapSelection');\n }\n eventArgs = { cancel: false, name: itemSelected, treemap: treemap, items: items, elements: selectionElements };\n treemap.trigger(itemSelected, eventArgs);\n }\n }\n else {\n removeClassNames(document.getElementsByClassName('treeMapSelection'), 'treeMapSelection', treemap);\n this.selectionId = '';\n }\n }\n else {\n removeClassNames(document.getElementsByClassName('treeMapSelection'), 'treeMapSelection', treemap);\n this.selectionId = '';\n }\n };\n /**\n * To bind events for selection\n */\n TreeMapSelection.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchStartEvent, this.mouseDown, this);\n };\n /**\n * To unbind events for selection\n */\n TreeMapSelection.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchStartEvent, this.mouseDown);\n };\n /**\n * Get module name.\n */\n TreeMapSelection.prototype.getModuleName = function () {\n return 'treeMapSelection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n TreeMapSelection.prototype.destroy = function (treeMap) {\n this.removeEventListener();\n };\n return TreeMapSelection;\n}());\nexport { TreeMapSelection };\n","import { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { Browser, createElement } from '@syncfusion/ej2-base';\nimport { getMousePosition, textFormatter, formatValue } from '../utils/helper';\nimport { tooltipRendering } from '../model/constants';\n/**\n * Render Tooltip\n */\nvar TreeMapTooltip = /** @class */ (function () {\n function TreeMapTooltip(treeMap) {\n this.treemap = treeMap;\n this.tooltipSettings = this.treemap.tooltipSettings;\n this.tooltipId = this.treemap.element.id + '_TreeMapTooltip';\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n TreeMapTooltip.prototype.renderTooltip = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var tootipArgs;\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].pageX;\n pageY = touchArg.changedTouches[0].pageY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n var formatFunction;\n var value;\n var targetId = target.id;\n var item = {};\n var tooltipEle;\n var location;\n var toolTipHeader;\n var toolTipData = {};\n var tooltipContent = [];\n var markerFill;\n if (targetId.indexOf('_Item_Index') > -1) {\n item = this.treemap.layout.renderItems[parseFloat(targetId.split('_')[6])];\n toolTipHeader = item['name'];\n value = item['weight'];\n this.currentTime = new Date().getTime();\n toolTipData = item['data'];\n markerFill = item['options']['fill'];\n tooltipContent = [textFormatter(this.tooltipSettings.format, toolTipData, this.treemap) ||\n this.treemap.weightValuePath.toString() + ' : ' + formatValue(value, this.treemap)];\n if (document.getElementById(this.tooltipId)) {\n tooltipEle = document.getElementById(this.tooltipId);\n }\n else {\n tooltipEle = createElement('div', {\n id: this.treemap.element.id + '_TreeMapTooltip',\n className: 'EJ2-TreeMap-Tooltip',\n styles: 'position: absolute;pointer-events:none;'\n });\n document.getElementById(this.treemap.element.id + '_Secondary_Element').appendChild(tooltipEle);\n }\n location = getMousePosition(pageX, pageY, this.treemap.svgObject);\n location.y = (this.tooltipSettings.template) ? location.y + 10 : location.y;\n tootipArgs = {\n cancel: false, name: tooltipRendering, item: item,\n options: {\n location: location, text: tooltipContent, data: toolTipData,\n textStyle: this.tooltipSettings.textStyle, template: this.tooltipSettings.template\n },\n treemap: this.treemap,\n element: target, eventArgs: e\n };\n this.treemap.trigger(tooltipRendering, tootipArgs);\n if (!tootipArgs.cancel) {\n this.svgTooltip = new Tooltip({\n enable: true,\n header: '',\n data: tootipArgs.options['data'],\n template: tootipArgs.options['template'],\n content: tootipArgs.options['text'],\n shapes: [],\n location: tootipArgs.options['location'],\n palette: [markerFill],\n areaBounds: this.treemap.areaRect,\n textStyle: tootipArgs.options['textStyle'],\n theme: this.treemap.theme\n });\n this.svgTooltip.appendTo(tooltipEle);\n }\n else {\n this.removeTooltip();\n }\n }\n else {\n this.removeTooltip();\n }\n };\n TreeMapTooltip.prototype.mouseUpHandler = function (e) {\n this.renderTooltip(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n };\n TreeMapTooltip.prototype.removeTooltip = function () {\n if (document.getElementsByClassName('EJ2-TreeMap-Tooltip').length > 0) {\n document.getElementsByClassName('EJ2-TreeMap-Tooltip')[0].remove();\n }\n };\n /**\n * To bind events for tooltip module\n */\n TreeMapTooltip.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchMoveEvent, this.renderTooltip, this);\n this.treemap.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * To unbind events for tooltip module\n */\n TreeMapTooltip.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchMoveEvent, this.renderTooltip);\n this.treemap.off(Browser.touchEndEvent, this.mouseUpHandler);\n };\n /**\n * Get module name.\n */\n TreeMapTooltip.prototype.getModuleName = function () {\n return 'treeMapTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n TreeMapTooltip.prototype.destroy = function (treeMap) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return TreeMapTooltip;\n}());\nexport { TreeMapTooltip };\n","import * as index from '@syncfusion/ej2-treemap';\nindex.TreeMap.Inject( index.TreeMapTooltip,index.TreeMapLegend,index.TreeMapHighlight,index.TreeMapSelection);\nexport * from '@syncfusion/ej2-treemap';\n"],"names":["createInstance","classFunction","params","arrayParam","unshift","undefined","Function","prototype","bind","apply","setImmediate","handler","unbind","num","Uint16Array","window","msCrypto","crypto","getRandomValues","secret","ret","i","combineArray","messageHandler","event","source","data","length","addEventListener","postMessage","removeEventListener","getValue","nameSpace","obj","value","splits","replace","split","isUndefined","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","isObject","constructor","getEnumValue","enumObject","enumValue","merge","destination","temrObj","tempProp","_i","keys_1","Object","indexOf","Array","isArray","extend","copied","first","second","deep","result","arguments","_loop_1","arguments_1","obj1","forEach","clone","src","copy","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","args","clearTimeout","setTimeout","compareElementParent","child","parent","node","document","parentNode","throwError","message","Error","e","stack","print","element","printWindow","div","createElement","links","slice","call","getElementsByTagName","querySelectorAll","reference","open","appendChild","cloneNode","len","outerHTML","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","formatUnit","getInstance","component","elem","querySelector","instances","_a","inst","uniqueID","tagName","properties","SVG_REG","test","createElementNS","className","id","styles","setAttribute","attrs","attributes","addClass","elements","classes","classList","getClassList","ele","_b","classList_1","contains","add","removeClass","classList_2","remove","push","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","docFrag","createDocumentFragment","insertBefore","firstElementChild","append","detach","removeChild","EventHandler","clearEvents","select","selector","context","selectAll","closest","el","nodeType","matches","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","getObject","instance","curKey","defaultValue","type","hasOwnProperty","getObjectArray","isSetter","isFactory","curType","setProperties","propertyGetter","Property","target","propertyDescriptor","set","newValue","oldVal","saveChanges","propertySetter","get","enumerable","configurable","defineProperty","addPropertyCollection","Complex","complexSetter","complexGetter","ComplexFactory","complexFactorySetter","complexFactoryGetter","Collection","oldValueCollection","newValCollection","complexArraySetter","defCollection","complexArrayGetter","CollectionFactory","complexArrayFactorySetter","complexArrayFactoryGetter","Event","eventDescriptor","oldValue","finalContext","getParentContext","prefix","NotifyPropertyChanges","classConstructor","propertyType","propList","props","complexProps","colProps","events","propNames","complexPropNames","colPropNames","eventNames","propertyName","getBuilderProperties","builderObject","propCollections","isPropertyArray","rex","prop","childType","tempValue","_c","curText","rippleEffect","rippleOptions","done","rippleModel","ignore","rippleFlag","isCenterRipple","duration","getRippleModel","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","Browser","isPointer","removeAttribute","offset","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","Math","max","abs","left","right","top","bottom","radius","sqrt","diameter","x","y","rippleElement","toString","getComputedStyle","getPropertyValue","transform","removeRipple","eventArgs","rippleElements","opacity","getElementsByClassName","setCulture","cultureName","defaultCulture","onIntlChange","notify","locale","getNumericObject","numObject","IntlBase","getDependables","cldrData","mapper","dateObject","numSystem","symbPattern","pattern","getSymbolPattern","getFormatData","dateSeparator","getDateSeparator","getDefaultDateObject","compile","template","helper","fnCode","str","varCOunt","localKeys","LINES","DBL_QUOTED_STR","exp","match","cnt","matchStr","CALL_FUNCTION","rlStr","ELSEIF_STMT","WORD","trim","addNameSpace","QUOTES","IF_STMT","strs","FOR_STMT","rlStr_1","mtc","fnStr","fNameSpace","ELSE_STMT","IF_OR_FOR","evalExp","addNS","ignoreList","NOT_NUMBER","templateString","compiler","engineObj","propName","HAS_SVG","childNodes","HAS_ROW","wrapperInitialize","tag","WRAPPER","role","input","ejInstance","index","nodeName","nodeValue","class","aria-checked","getTextNode","childnode","destroy","ejInst","wrapper","checked","preRender","proxy","control","moduleName","getAttribute","createCheckBox","enableRipple","options","cssClass","enableRtl","rippleSpan","frameSpan","label","labelSpan","rippleMouseHandler","event_1","createEvent","initEvent","dispatchEvent","calculateRelativeBasedPosition","anchor","fixedElement","anchorPos","tempAnchor","offsetParent","position","offsetLeft","offsetTop","parentElement","calculatePosition","currentElement","positionX","positionY","targetValues","popupRect","fixedParent","parentDocument","ownerDocument","posX","posY","pos","elementRect","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","toLowerCase","getBodyScrollTop","getBodyScrollLeft","height","width","fit","viewPortElement","axis","X","Y","elemData","targetContainer","containerWidth","getTargetContainerWidth","getViewPortWidth","containerLeft","ContainerLeft","containerRight","ContainerRight","overLeft","overRight","containerHeight","getTargetContainerHeight","getViewPortHeight","containerTop","ContainerTop","containerBottom","ContainerBottom","overTop","overBottom","isCollide","elemOffset","yAxis","topCollideCheck","xAxis","leftCollideCheck","topSide","rightSide","leftSide","bottomSide","flip","tEdge","TL","TR","BL","BR","eEdge","edge","updateElementData","setPosition","leftFlip","topFlip","setPopup","eStatus","deepCheck","collideSide","getTargetContainerLeft","getTargetContainerTop","innerHeight","innerWidth","getScrollableParent","eleStyle","scrollParents","overflowRegex","parentStyle","overflow","overflowY","overflowX","getZindexPartial","parentZindex","defaultView","childrenZindex","children","isEqualNode","siblingsZindex","finalValue","concat","currentZindexValue","createSpinner","internalCreateElement","makeElement","container","spinnerContainer","CLS_SPINWRAP","spinnerInnerContainer","CLS_SPININWRAP","wrap","inner_wrap","create_spinner_container","spinTemplate","theme","getTheme","defaultSize","DEFT_MAT_WIDTH","DEFT_FAB_WIDTH","DEFT_BOOT_WIDTH","parseFloat","calculateRadius","setTheme","labelEle","CLS_SPINLABEL","textContent","createLabel","CLS_SPINTEMPLATE","replaceContent","spinCSSClass","CLS_HIDESPIN","createMaterialSpinner","random_generator","globalTimeOut","timeOut","innerContainer","svgMaterial","CLS_MATERIALSPIN","matCirclePath","CLS_SPINCIRCLE","firstChild","create_material_element","svg","path","strokeSize","getStrokeSize","transformOrigin","drawArc","PI","getDashOffset","mat_calculate_attributes","create_fabric_element","CLS_FABRICSPIN","fb_calculate_attributes","createFabricSpinner","svgBoot","CLS_BOOTSPIN","item","bootCircle","defaultRadius","create_bootstrap_element","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","CLS_HIGHCONTRASTSPIN","createHighContrastSpinner","generateSeries","begin","stop","formSeries","series","end","count","increment","toFixed","random","combine","charAt","floor","innerCon","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","CLS_SPINARC","animateMaterial","spinnerInfo","easing","mat_animation","currentTime","min","Date","getTime","startTime","updatePath","change","globalInfo","previousId","getSize","rotate","createCircle","easeAnimation","current","timestamp","timecount","innerConainer","trgClass","centerX","centerY","circle","join","defineCircle","endArc","defineArc","angle","radians","cos","sin","showSpinner","showHideSpinner","isHide","spinnerWrap","inner","CLS_SHOWSPIN","svgEle","isAnimate","globalObject","globalVariables","timeOutVar","startMatAnimate","boot_animate","rotation","animateBootstrap","hideSpinner","createMask","autocomplete","autocorrect","autocapitalize","spellcheck","aria-live","aria-valuenow","mask","splitMask","splitInnerMask","j","pushIntoRegExpCollec","chkSpace","customRegExpCollec","hiddenMask","promptChar","escapeMaskValue","promptMask","customCharacters","RegExp","escapeNumber","substring","aria-invalid","applyMask","setElementValue","setMaskValue","wireEvents","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","enabled","bindClearEvent","unwireEvents","showClearButton","inputObj","clearButton","resetHandler","preventDefault","redoCollec","startIndex","selectionStart","endIndex","selectionEnd","triggerMaskChangeEvent","setSelectionRange","unstrippedValue","strippedValue","maskValues","k","checkMask","maskValue","regExpCollec","focusEventArgs","trigger","isFocus","isDevice","info","version","isIos","placeholder","floatLabelType","labelElement","TOPLABEL","sIndex_1","eIndex_1","oldValue_1","_callPasteHandler","maskKeyPress","validateValue","i_1","preValue_1","sIndex_2","eIndex","undoCollec","value_1","isIE","ctrlKey","keyCode","removeMaskInputValues","addedValues","preEleVal","val","prevValue","startValue","collec","splice","mobileRemoveFunction","sIndex","autoFillMaskInputValues","isRemove","oldEventVal","isDeleted","initStartIndex","initEndIndex","curMask","multipleDel","preValue","prompt_1","elementValue","code","String","fromCharCode","isIosInvalid","changeEventArgs","isInitial","maskedValue","isInteraction","removeMaskError","val_1","startIndex_1","isSpace","isAndroid","preventUnsupportedValues","temp_1","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","curVal","caseCount","toUpperCase","addMaskErrorClass","sIdx","idx","ctrl","chkSupport","timer","INPUTGROUP","FLOATINPUT","ERROR","newVal","BOTTOMLABEL","Input","getMaskInput","UTILMASK","inputEle","regularExpressions","getUtilMaskEle","getModel","model","getFieldValues","dataItem","fields","fieldData","isHeader","dataField","getSeriesColor","palette","getThemeColor","axisLabel","axisTitle","axisLine","majorGridLine","minorGridLine","majorTickLine","minorTickLine","chartTitle","legendLabel","background","areaBorder","errorBar","crosshairLine","crosshairFill","crosshairLabel","tooltipFill","tooltipBoldLabel","tooltipLightLabel","tooltipHeaderLine","markerShadow","selectionRectFill","selectionRectStroke","selectionCircleStroke","getScrollbarThemeColor","scrollStyle","backRect","thumb","circleHover","arrow","grip","arrowHover","backRectBorder","measureText","text","font","htmlObject","getElementById","fontSize","size","fontWeight","fontStyle","fontFamily","whiteSpace","lineHeight","Size","clientWidth","clientHeight","sort","isDescending","sortData","a","b","rotateTextSize","chart","box","renderer","SvgRenderer","font-size","font-style","font-family","font-weight","text-anchor","createText","delayRedraw","redraw","svgObject","removeElement","getElement","logBase","base","log","showTooltip","areaWidth","isTouch","tooltip","inside","range","withIn","logWithIn","valueType","withInRange","previousPoint","currentPoint","nextPoint","mX2","xValue","mX1","mX3","xStart","visibleRange","xEnd","ceil","sum","values","values_1","subArraySum","last","yName","subtractThickness","rect","thickness","subtractRect","degreeToLocation","degree","center","radian","ChartLocation","getAngle","point","atan2","subArray","valueToCoefficient","isInversed","TransformToVisible","isInverted","labelPlacement","CoefficientToVector","valueToPolarCoefficient","primaryXAxis","startAngle","clipRect","indexFinder","isPoint","ids","Index","parseInt","coefficient","delta","dateTimeInterval","visibleLabels","createTooltip","createZoomingLabels","isVertical","arrowLocation","direction","opposedPosition","chartRect","availableSize","scrollBarHeight","zoomingScrollBar","endLabel","startLabel","labelStyle","findDirection","Rect","drawPath","PathOption","themeStyle","textElement","TextOption","color","withInBounds","bounds","getValueXByPoint","getValueYByPoint","findClipRect","requireInvertedAxis","firstToLowerCase","substr","getMinPointsDelta","seriesCollection","xValues","minVal","seriesMin","minDelta","Number","MAX_VALUE","visible","name","xAxisName","points","map","xMin","xMax","getAnimationFunction","effect","functionName","linear","endValue","markerAnimate","pointIndex","isLabel","Animation","animate","progress","timeStamp","pathAnimation","previousDirection","currentDireciton","c","startDirections","splitDirections","endDirections","startPath","endPath","directions","appendClipElement","clipPath","clipElement","redrawElement","def","createDefs","triggerLabelRender","tempInterval","argsData","cancel","axisLabelRender","text_1","textTrim","maximumLabelWidth","VisibleLabels","setRange","minimum","maximum","getActualDesiredIntervalsCount","orientation","desiredIntervals","desiredIntervalsCount","maximumLabels","templateAnimate","drawSymbol","location","shape","url","temp","calculateShapes","renderOption","locX","locY","rx","ry","cx","cy","d","yValue","href","calculateLegendShapes","getRectLocation","startLocation","endLocation","outerRect","minMax","getTemplateFunction","templateFn","templateComplier","createTemplate","childElement","content","templateElement","elementData","getFontStyle","measureElementRect","findlElement","length_1","getPoint","xLength","yLength","appendElement","hasChildNodes","appendChildElement","existChild","animateRedrawElement","replaceChild","getDraggedRectLocation","x1","y1","x2","y2","checkBounds","getLabelText","labelFormat","customLabelFormat","seriesType","high","low","median","upperQuartile","lowerQuartile","outliers","liers","format","stopTimer","collections","currentRect","some","isOverlap","containsRect","calculateRect","textSize","margin","convertToHexCode","componentToHex","r","g","hex","convertHexToColor","exec","ColorValue","colorNameToHex","isRGBValue","getSaturationColor","factor","colorCode","rgb","round","getMedian","half","fill","space","stroke","mode","cartesianlarge","cartesiansmall","getAccumulationLegend","maxWidth","stringToNumber","containerSize","rX","rY","arrowPadding","tipX","tipY","tipRadius","startX","startY","setElementAttributes","isDiv","setStyle","isMinus","tspanElement","renderOptions","dominant-baseline","baseLine","createTSpan","calculateSize","marginHeight","getModuleName","tooltipSpace","enable","periodHeight","periodSelectorSettings","periods","labelSize","enableGrouping","disableRangeSelector","createSvg","getTitle","title","titleCollection","textOverflow","textWrap","titlePositionX","titleStyle","textAlignment","currentLabel","maximumWidth","textCollection","labelCollection","defaultToString","validateNullOrUndefined","getTooltipThemeColor","getSeriesFromIndex","visibleSeries","visibleSeries_1","pointByIndex","points_1","sparkline","appendShape","drawCircle","drawRectangle","topLeft","topRight","bottomLeft","bottomRight","calculateRoundedRectPath","renderTextElement","textOptions","getIdElement","rangeValueToCoefficient","inversed","getXLocation","getRangeValueXByPoint","getExactData","selectedData","getNearestValue","reduce","prev","curr","getRangeThemeColor","thumbSize","navigatorStyleSettings","thumbWidth","thumbHeight","gridLineColor","axisLineColor","labelFontColor","unselectedRectColor","thumpLineColor","thumbBackground","gripColor","thumbHoverColor","selectedRegionColor","tooltipBackground","tooltipFontColor","smithchart","SmithchartSize","maxwidth","convertElementFromLabel","labelId","templateHtml","_getEpsilonValue","reverselinear","toPixel","maxDimension","setStyles","border","stroke-width","appendPath","gauge","calculateSum","from","to","getAngleFromValue","maximumValue","minimumValue","endAngle","isClockWise","isCompleteAngle","getDegree","getValueFromAngle","totalAngle","getAngleFromLocation","getLocationFromAngle","GaugeLocation","getPathArc","startWidth","endWidth","startRadius","endRadius","arcRadius","getRangePath","getCirclePath","innerStart","innerEnd","clockWise","getRoundedPathArc","actualStart","actualEnd","oldStart","oldEnd","getRoundedPath","outerOldEnd","innerOldEnd","outerOldStart","innerOldStart","getCompleteArc","innerRadius","getCompletePath","getPointer","targetId","tempString","axisIndex","pointerIndex","getLabelFormat","getRangeColor","ranges","currentRange","filter","rangeColor","processPathData","collection","arrayCollection","parsePathData","ob","char","command","r1","r2","largeArc","sweep","tokenizer","commands","lastIndex","isExponential","getRectanglePath","cornerRadius","point2","next","corners","corner","getPolygonPath","seg","pathSegmentCollection","x0","y0","segments","cpt2","newSeg","transformPath","arr","sX","sY","s","bX","bY","iX","iY","scalePathData","updatedSegment","getPathString","segment","isScale","scaleFactor","oldOffset","newOffset","splitArrayCollection","getNewString","getString","string","cmd","ang","l","identityMatrix","Matrix","MatrixTypes","Identity","transformPointByMatrix","matrix","pt","Translation","Scaling","m11","m22","m21","num2","m12","multiplyPoint","transformPointsByMatrix","transformedPoints","rotateMatrix","multiplyMatrix","Unknown","setMatrix","createRotationRadians","scaleMatrix","scaleX","scaleY","createScaling","translateMatrix","matrix1","matrix2","type2","assignMatrix","mat","getBasicShape","basicShapes","getPortShape","portShapes","getDecoratorShape","decorator","pathData","decoratorShapes","getIconShape","icon","getFlowShape","flowShapes","initTooltip","diagram","tooltipOption","Tooltip","updateTooltipContent","beforeCollision","beforeOpen","opensOn","appendTo","display","collidedPosition","updateTooltip","tooltipObject","showTipPointer","animation","findConnectorPoints","layoutOrientation","intermeditatePoints","sourcePoint","sourceWrapper","srcPoint","sourcePortWrapper","srcPort","srcNode","getPortDirection","cornersPointsBeforeRotation","sourceID","targetWrapper","sPoint","tPoint","getIntersection","getSourcePoint","tarPoint","sourceCorners","targetCorners","sourceNode","targetNode","sourcePort","targetPort","targetPortWrapper","srcCorner","srcDir","tarCorner","tarDir","port","tarPortPt","getDirection","equals","containsPoint","topCenter","sPt","tPt","refPoint","sourceEle","targetEle","tarPort","srcCor","tarCor","srcBounds","swapBounds","tarBounds","isInterSect","sourceSegment","createSegmentsCollection","targetSegment","srcSegment","tarSegmet","intersect3","checkSourceAndTargetIntersect","findPoint","getOppositeDirection","checkLastSegmentasTerminal","Point","isEmptyPoint","vector1","distance","vector2","intermeditatePointsForStraight","removeSegment","checkConsectiveSegmentAsSame","updateSegmentPoints","checkSourcePointInTarget","nodeOrPortToNode","pointToPort","checkPreviousSegment","checkPortdirection","returnIntermeditatePoints","findIntermeditatePoints","OrthogonalSegment","extra","swap","getSwapping","swapPoints","pts","diffY","NoOfSegments","One","Three","Five","getRightToLeftSegmentCount","sourceObj","targetObj","diffX","middleRight","getRightToRightSegmentCount","Two","Four","getRightToTopSegmentCount","bottomCenter","getRightToBottomSegmentCount","getBottomToTopSegmentCount","difX","getBottomToBottomSegmentCount","middleLeft","getBottomToLeftSegmentCount","getLeftToLeftSegmentCount","getLeftToTopSegmentCount","getTopToTopSegmentCount","segLength","tar","adjustSegmentLength","orthoConnection2Segment","orthoConnection3Segment","prevDir","orthoConnection4Segment","segmentValue","sLeft","sRight","sBottom","sTop","tLeft","tRight","tBottom","tTop","addLineSegment","orthoConnection5Segment","addOrthoSegments","findOrthoSegments","defaultOrthoConnection","fixedPoint","nodeMargin","nodeConnectingPoint","nodeDirection","source_1","target_1","segmentPoint","connectToOneEnd","seg_1","lastSegment","pointToNode","pointToPoint","findPointToPointOrtho","terminateConnection","targetPoint","setLineEndPoint","segPoint","portdirection","findSourceDirection","addPoints","update","portDir","findSegmentDirection","endPoint","isTarget","reverse","pointsFromNodeToPoint","tPoints","connector","actualSegment","actualLastPoint","distancePoints","getPoints","createLineSegment","object","outerBounds","rectBounds","rotateAngle","parentTransform","dir","BezierSegment","StraightSegment","length_3","lastPoint","nodeCorners","top_1","shortes","findAngle","re","findLength","es","asin","cor","isTar","segmentPoints","actualSize","sPt1","rotatePoint","tPt1","angle_2","angle_3","PathElement","getIntersectionPoints","thisSegment","minimal","intersection","intersectSegment","isNaN","intersect","dist","segment1","segment2","a1","a2","b1","b2","c1","c2","r3","r4","denom","x3","y3","x4","y4","sameSign","point1","allow","diffx","diffy","interPt","getLeftLength","getRightLength","preDir","getTopLength","getBottomLength","getOrtho3Seg","point3","gap","closeEdge","boundsValue","one","two","three","four","fourty5","one35","two25","three15","getOuterBounds","sourceDecorator","uniteRect","targetDecorator","excludeBounds","part","isEmptyVector","getBezierPoints","getBezierBounds","startPoint","controlPoint1","controlPoint2","minx","miny","maxx","maxy","t","bezierPoints","canSelect","ShapeAnnotation","PathAnnotation","constraints","AnnotationConstraints","Select","Connector","ConnectorConstraints","NodeConstraints","canMove","Drag","Selector","canEnablePointerEvents","PointerEvents","canDragSourceEnd","DragSourceEnd","canDragTargetEnd","DragTargetEnd","canDragSegmentThumb","DragSegmentThumb","canRotate","Rotate","canShadow","Shadow","canInConnect","Node","InConnect","canOutConnect","OutConnect","canResize","returnValue","Resize","ResizeSouthEast","ResizeEast","ResizeNorthEast","ResizeSouth","ResizeNorth","ResizeSouthWest","ResizeWest","ResizeNorthWest","canAllowDrop","AllowDrop","canVitualize","DiagramConstraints","Virtualization","canSingleSelect","tool","DiagramTools","SingleSelect","canZoomPan","ZoomPan","canContinuousDraw","ContinuousDraw","canDrawOnce","DrawOnce","defaultTool","MultipleSelect","canUserInteract","UserInteraction","canZoomTextEdit","ZoomTextEdit","canPageEditable","ApiUpdate","canApiInteract","diagramActions","DiagramAction","ToolAction","canDraw","PortConstraints","Draw","canDrag","renderRuler","isHorizontal","rulerSize","getRulerSize","rulerGeometry","getRulerGeometry","createHtmlElement","diagramRuler","rulerSettings","horizontalRuler","verticalRuler","ruler","Ruler","segmentWidth","hRuler","vRuler","rulerObj","updateRuler","hOffset","scroller","horizontalOffset","vOffset","verticalOffset","showRulers","updateRulerDimension","removeRulerElements","viewPortHeight","viewPortWidth","updateRulerDiv","updateRulerSpace","scale","currentZoom","arrangeTick","getFunction","dataBind","marginLeft","hRulerOffset","marginTop","vRulerOffset","completeRegion","region","selectedObjects","findObjectType","drawingObject","findNearestPoint","shortestPoint","angleBWStAndEnd","angleBWStAndRef","vaAngle","isDiagramChild","htmlLayer","hasClass","groupHasType","nameTable","isPointOverConnector","intermediatePoints","bezierPoint1","bezierPoint2","pointsForBezier","toBounds","Inflate","hitPadding","intersectinPt","intersectDetails","intersectPt","rect_1","annotations","lineUtil1","lineUtil2","l1","l2","na","nb","ua","ub","line","getTooltipOffset","mousePosition","inheritTooltip","InheritTooltip","objectTooltip","isMouseBased","offsetPoint","tooltipOffset","relativeMode","bound","objects","getBounds","getAnnotationPosition","annotation","getloop","getOffsetOfConnector","alignednumber","getAlignedPosition","offsetLength","prevLength","kCount","lengths","cnst","state","alignment","alignLabelOnSegments","vAlign","hAlign","getBezierDirection","serialize","clonedObject","cloneObject","getCustomProperty","selectedItems","nodes","connectors","JSON","stringify","deserialize","clear","protectPropertyChange","dataSourceSettings","doBinding","nodeTemp","setNodeTemplate","getDescription","commandManager","execute","canExecute","arrangeTickHorizontal","arrangeTickVertical","getLayoutInfo","layout","getBranch","nodeDefaults","getNodeDefaults","connectorDefaults","getConnectorDefaults","dataObj","parse","contextMenuSettings","bridgeDirection","pageSettings","addInfo","scrollSettings","layers","backgroundColor","basicElements","snapSettings","isLoading","views","refresh","Diagram","updateStyle","changedObject","StrokeStyle","strokeColor","strokeDashArray","strokeWidth","bold","textWrapping","italic","textAlign","textDecoration","gradient","TextElement","refreshTextElement","updateHyperlink","actualAnnotation","hyperlink","link","updateShapeContent","actualObject","minHeight","maxHeight","minWidth","horizontalAlignment","verticalAlignment","Text","elementId","updateShape","oldObject","DiagramElement","pathContent","imageContent","ImageElement","imageAlign","align","imageScale","flowShapeElement","nativeContent","DiagramNativeElement","htmlContent","DiagramHtmlElement","updateContent","newValues","nativeElement","getDiagramElement","getContent","htmlElement","flowshapedata","basicShapeData","removeItem","array","updateConnector","anglePoint","srcDecorator","tarDecorator","updateSegmentElement","firstSegment","clipDecorators","updateDecoratorElement","updateShapeElement","getUserHandlePosition","selectorItem","handle","pivot","side","connectorOffset","getPointloop","canResizeCorner","selectorConstraints","action","thumbsConstraints","SelectorConstraints","ThumbsConstraints","canShowCorner","checkPortRestriction","portVisibility","findAnnotation","annotationId","findPort","portId","ports","findObjectIndex","getObjectFromCollection","scaleElement","sw","sh","refObject","Container","newPosition","arrangeChild","drop","initContainer","init","measure","arrange","desiredSize","insertObject","mid","diagramElement","diagramId","symbolPalette","palettes","symbols","getPaletteSymbols","nodeId","enterObject","enterTable","w","h","cornerPoint","trans","findSegmentPoints","sample","sampleLength","measureElement","pathNode","getChildNode","setAttributeNS","bBox","newPathString","absoluteBounds","pathLength","getTotalLength","getPointAtLength","measurePath","getBBox","svgBounds","wrapSvgText","textValue","txtValue","bounds1","breakWord","bBoxText","dy","words","newText","existingWidth","existingText","eachLine","wordWrapping","measureHtmlText","whiteSpaceToString","wordBreak","wordBreakToString","offsetHeight","wrapBounds","pivotX","pivotY","dashArray","shadow","description","doWrap","textAlignToString","getTextOptions","txtWidth","wrapSvgTextAlign","getDiagramLayerSvg","elementcoll","contentId","getAdornerLayerSvg","getSelectorElement","getAdornerLayer","getNativeLayerSvg","getGridLayerSvg","getBackgroundLayerSvg","getBackgroundLayer","getHTMLLayer","elementType","attribute","setAttributeHtml","createSvgElement","setAttributeSvg","parentsUntil","isID","animVal","addTouchPointer","touchList","touches","clientX","clientY","pointerId","isHtml","compiledString","createMeasureElements","usageCount","divElement","imageElement","createTextNode","tSpan","randomId","chars","additionalProp","newObject","sourceObject","customProperties","propAdditional","internalProp","getInternalProperties","properties_1","property","cloneArray","HTMLElement","innerHtml","sourceArray","clonedArray","extendObject","childObject","extendeArray","extendArray","extendedObject","childArray","reset","middleElement","overFlow","middle","rotateSize","minX","minY","maxX","maxY","getOffset","findToolToActivate","touchStart","touchMove","currentSymbol","hasSelection","userHandles","obj_1","paddedBounds","selectorBnds","hasSingleConnection","conn_1","sourcePaddingValue","targetPaddingValue","conn","connectorEditingToolModule","checkForConnectorSegment","ten","rotateThumb","labelSelection","labelRotate","forty","checkForResizeHandles","PointPort","findPortToolToActivate","isSelected","PortVisibility","Hover","Visible","sourcePortID","currentDrawingObject","padding","firstLevel","parentId","getCursor","cursor","cursors","getBpmnShapePathData","bpmnShapes","getBpmnTriggerShapePathData","bpmnTriggerShapes","getBpmnGatewayShapePathData","bpmnGatewayShapes","getBpmnTaskShapePathData","bpmnTaskShapes","getBpmnLoopShapePathData","bpmnLoopShapes","getGraphBounds","collectionContains","coll","incrementalSearch","items","selectedIndex","ignoreCase","queryString","prevString","activeClass","listItems","strLength","innerText","Search","inputVal","searchType","itemData","queryStr","toLocaleLowerCase","itemsData","highlightSearch","query","ignoreRegex","replaceQuery","findTextNode","createFloatLabel","overAllWrapper","searchWrapper","inputElement","floatLinelement","floatLabelElement","FLOATLINE","FLOATTEXT","aria-labelledby","LABELTOP","LABELBOTTOM","updateFloatLabelState","setPlaceHolder","doesImplementInterface","checkFor","valueAccessor","field","column","DataUtil","getUpdateUsingRaf","updateFunction","callBack","requestAnimationFrame","iterateArrayOrObject","predicate","pred","iterateExtend","baseExtend","getActualProperties","templateCompiler","baseTemplateComplier","setStyleAndAttributes","customAttributes","copyAttr","literals","exclude","moved","prepareColumns","columns","autoWidth","Column","headerText","foreignKeyValue","foreignKeyField","setCssInGridPopUp","popUp","isBottomTail","popUpSpan","targetPosition","changedTouches","popup","getPosition","getPopupLeftPosition","ChildProperty","getElementIndex","inArray","getActualPropFromColl","getUid","appendChildren","parents","calculateAggregate","customAggregate","aggregates","getScrollBarWidth","scrollWidth","divNode","cssText","getRowHeight","rowHeight","table","isComplexField","getComplexFieldID","setComplexFieldID","isEditable","col","row","isOldRow","isIdentity","isPrimaryKey","allowEditing","isActionPrevent","dlg","editSettings","showConfirmDialog","setFormatter","serviceLocator","fmtr","getService","getFormatFunction","skeleton","setParser","getParserFunction","addRemoveActiveClasses","cells","distinctStringValues","res","getFilterMenuPostion","dialogObj","grid","elementVisible","newpos","dlgWidth","leftPos","getZIndexCalcualtion","zIndex","toogleCheckbox","span","createCboxWithWrap","removeAddCboxClasses","refreshForeignData","getForeignData","foreignKeyData","cell","isForeignKey","lValue","fField","Query","fdata","dataSource","DataManager","json","columnData","getDay","where","getDatePredicate","operator","matchCase","executeLocal","getColumnByForeignKeyValue","filterObject","datePredicate","prevDate","nextDate","prevObj","nextObj","setSeconds","getSeconds","setHours","predicateSt","Predicate","predicateEnd","and","or","ejpredicate","renderMovable","frzCols","mEle","childElementCount","getCustomDateFormat","colType","intl","Internationalization","getDatePattern","setStateAndProperties","summaryIterator","callback","dateanddatetimerender","rtl","isInline","rowData","leftPadding","rightPadding","titlePositionY","heatmapSize","topPadding","bottomPadding","textNone","heatmap","initialClip","initialClipRect","titleSettings","increaseDateTimeInterval","intervalType","setFullYear","getFullYear","setMonth","getMonth","setDate","getDate","getHours","setMinutes","getMinutes","getTooltipText","tooltipCollection","xPosition","yPosition","RgbColor","R","G","B","convertPixelToValue","pointerElement","pointerRect","lineBounds","newSize","divideVal","getPathToRect","tempDiv","svgRect","isPointerDrag","axes","pointerEnable","pointers","pointer","enableDrag","textFormatter","formatValue","getNumberFormat","useGrouping","useGroupingSeparator","formatFunction","getElementOffset","calculateNiceInterval","currentInterval","niceInterval","minInterval","pow","intervalDivs_1","interior","getRangePalette","placement","getBox","boxName","rectWidth","rectHeight","bottomRadius","topRadius","addValue","y1_1","locHeight","x1_1","locWidth","maps","getMousePosition","pageXOffset","pageYOffset","clientTop","clientLeft","MapLocation","degreesToRadians","deg","radiansToDegrees","convertGeoToPoint","latitude","longitude","layer","mapModel","lat","lng","mapSize","mapAreaRect","longitudeMinMax","baseMapBounds","latitudeMinMax","latRadian","lngRadian","projectionType","geometryType","pixelOrigin","sinY","calculateBound","aitoff","tan","Infinity","roundTo","xToCoordinate","yToCoordinate","convertTileLatLongToPoint","zoomLevel","tileTranslatePoint","isMapCoordinates","sinLatitude","pixelX","pixelY","mapObject","totalSize","baseSize","cosy","sincia","sinci","acos","convertElement","markerId","mapObj","markerEle","tempGroup","drawBalloon","balloon","createGroup","checkShapeDataFields","dataPath","propertyPath","pointObject","findMidPointOfPolygon","startX1","startY1","xSum","ySum","rightMinPoint","rightMaxPoint","leftMinPoint","leftMaxPoint","bottomMinPoint","bottomMaxPoint","topMinPoint","topMaxPoint","rightMin","rightMax","leftMin","leftMax","topMax","topMin","bottomMax","bottomMin","isCustomPath","layerData","customPath","findPosition","getTranslate","zoomFactor","zoomSettings","baseMapRectBounds","mapWidth","mapHeight","centerPosition","leftPosition","topPosition","mapLayerPanel","calculateFactor","getElementByID","Internalize","getShapeData","layerIndex","shapeIndex","shapeData","shapeDataPath","shapePropertyPath","triggerShapeEvent","selection","eventName","elementSelector","getTargetElement","createStyle","customizeStyle","elementAnimate","animationComplete","timeout","areaHeight","demo","size1","wordWrap","changeBorderWidth","childNode","changeNavaigationLineWidth","currentStroke","layersCollection","shapeSettings","m","navigationLineSettings","targetTouches","calculateScale","startTouches","endTouches","startDistance","getDistance","getTouches","posTop","posLeft","touch","getTouchCenter","zoomAnimate","previousLocation","preScale","previousScale","diffScale","currentLocation","currentScale","slopeFactor","slope","slopeIntersection","slopeValue","intercept","horizontalDifference","verticalDifference","translatePoint","zoomModule","processTemplate","process","clearAnimation","startAnimation","cancelAnimationFrame","smoothTranslate","getIndex","getDropDownValue","returnType","subCommand","isNOU","iconCss","getFormattedFontSize","i10n","itemLocale","toolsLocale","getConstant","setToolbarStatus","isPopToolbar","dropDown","dropDownModule","tbItems","itemStr","tbElements","classes.CLS_ACTIVE","toolbarSettings","formatDropDown","types","alignDropDown","model.alignmentItems","fontNameDropDown","name_1","fontSizeDropDown","getCollection","getTBarItemsIndex","toolbarItems","itemsIndex","updateUndoRedoStatus","baseToolbar","undoRedoStatus","trgItems","undoRedoItems","toolbarObj","classes.CLS_TB_ITEM","keys_2","enableItems","evt","setAttributes","htmlAttributes","rte","isFrame","contentModule","getDocument","htmlAttr","setEnable","readonly","setReadOnly","valueContainer","getElementHeightFromClass","elementClass","getOuterHeight","getWeekFirstDate","date1","firstDayOfWeek","date","firstDateOfMonth","lastDateOfMonth","dt","getWeekNumber","currentDate","valueOf","MS_PER_DAY","setTime","time","tzOffsetBefore","getTimezoneOffset","tzOffsetDiff","resetTime","getDateInMs","addDays","addMonths","day","getMaxDays","getStartEndHours","startHour","endHour","date2","getDaysCount","startDate","endDate","strTime","getDateFromString","findIndexInData","marginBottom","getMonthSummary","ruleObject","cldrObj","localeObj","summary","monthDay","WEEKPOS","DAYINDEXOBJECT","generate","rule","excludeDate","startDayOfWeek","maximumCount","viewDate","MAXOCCURRENCE","cacheDate","extractObjectFromRule","modifiedDate","tempViewDate","until","maxOccurrence","dayIndex","setFirstDayOfWeek","DAYINDEX","tempExcludeDate","parsedDate","getDateFromRecurrenceDateString","freq","tempDate","expectedCount","compareDates","validateRules","excludeDateHandler","dailyType","getStartDateForWeek","expectedDays","dayCycleData","processWeekDays","weeklyType","monthlyType","yearDay","weekNo","checkYearlyType","startDay","firstWeekSpan","maxDate","minDate","stDate","weekNos","processWeekNo","LEAPYEAR","getMaxYearDay","processYearDay","yearlyType","recDateString","zeroIndex","validateMonthlyRuleType","month","beginDate","monthCollection","weekCollection","monthInit","currentMonthDate","datas","week","dayData","chDate","setNextValidDate","monthlyDayTypeProcess","mainDate","validateProperDate","monthlyDateTypeProcess","NORMALYEAR","monthData","rules","validRules","splitData","dayCycle","checkYear","expectedyearDay","startDateCollection","diff","getYearDay","shift","days","expectedMonth","expectedDate","checkDayIndex","checkMonth","checkDate","getRecurrenceStringFromDate","getUTCFullYear","roundDateValues","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","measureObject","Location","itemsToOrder","isContainsData","pathName","processData","treemap","isExist","leaf","leafItemSettings","levels","groupPath","labelPath","weightValuePath","findChildren","findHightLightItems","treeMap","parentName","currentItem","renderItems","findLabelLocation","areaRect","getArea","getShortestEdge","convertToContainer","convertToRect","xOffset","yOffset","colorMap","colorMapping","equalValue","paths","minOpacity","maxOpacity","deSaturationColor","rangeValue","dataLabel","resultText","currentLength","totalWidth","totalLength","sliceString","hide","orderByArea","removeClassNames","applyOptions","svgRenderer","renderLegendShape","renderPath","shapeWidth","shapeHeight","shapeX","shapeY","isParentItem","headerRegex","defaultType","Ajax","async","contentType","emitError","send","Promise","resolve","reject","httpRequest","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","setRequestHeader","beforeSend","successHandler","onSuccess","failureHandler","reason","onFailure","responseText","dataType","error","readyState","status","statusText","getResponseHeader","responseHeaders","header","headers","getAllResponseHeaders","addOrGetEventData","__eventList","listener","bindTo","intDebounce","debounceListener","eventData","copyData","eventProp","eventData_1","Observer","ranArray","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","curObject","indexLocation","argument","curObject_1","cur","boundedEvents_1","isColEName","Base","isProtectedOnChange","changedProperties","oldProperties","refreshing","finalUpdate","childChangedProperties","modelObserver","addInstance","isDestroyed","muteOnChange","prevDetection","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","moduleClass","ej2_instances","REGX_MOBILE","REGX_IE","REGX_IE11","REGX_IOS","REGX_IOS7","REGX_ANDROID","REGX_WINDOWS","REGX_VERSION","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","extractBrowserDetail","browserInfo","culture","clientInfo","userAgent","language","navigator","getEvent","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","regX","uA","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","__extends","extendStatics","setPrototypeOf","__proto__","p","__","create","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","_super","ease","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","elements_1","element_1","delayAnimation","animationId","frameId","applyAnimation","step","timerId","prevTimeStamp","avg","timingFunction","performance","now","fail","newProp","oldProp","CanvasRenderer","rootID","rootId","getOptionValue","createCanvas","canvasObj","ctx","getContext","setCanvasSize","lineWidth","dashArrayString","setLineDash","strokeStyle","drawLine","save","beginPath","moveTo","lineTo","restore","dataUrl","toDataURL","canvasCtx","globalAlpha","drawCornerRadius","fillStyle","fillRect","arcTo","closePath","canvasTranslate","dataSplit","borderWidth","flag","translate","innerR","c3","c4","bezierCurveTo","arc","counterClockWise","drawText","baseline","textBaseline","labelRotation","fillText","drawPolyline","drawEllipse","circumference","drawImage","imageObj","Image","createLinearGradient","colors","myGradient","colorStop","setGradientValues","createRadialGradient","colorName","newColorStop","stopColor","addColorStop","updateCanvasAttributes","img_1","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","modules","usedModules","arg","removableModule_1","mod","parentObj","controlParent","isParentArray","updateChange","updateTimeOut","changeTime_1","curIndex","defaultNumberingSystem","latn","_digits","_type","defaultNumberSymbols","decimal","group","percentSign","plusSign","minusSign","infinity","nan","exponential","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","propKeys_1","getSymbolRegex","regexStr","getSymbolMatch","matchKeys_1","constructRegex","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","errorText","ms","ls","mf","lf","NumberFormat","numberFormatter","option","cldr","symbolPattern","fOptions","cOptions","dOptions","dependable","numberMapper","parser","parserObject","currencySymbol","getCurrencySymbol","numericObject","currency","defaultCurrencyCode","percentSymbol","minusSymbol","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","defaultCurrency","nData","pData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isFinite","intNumberFormatter","negativeDataRegex","pattern_1","lastIndexOf","primary","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","toExponential","groupNumbers","latnParseRegex","nlead","nend","toPrecision","level1","sep","decimalSymbol","level2","lead","getResultantPattern","resPattern","iType","basicPatterns","dPattern","tPattern","defaultObject","patternMatcher","needFraction","cSymbol","fractionOnly","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","sym","currencyCode","isCurrencyPercent","parts","actual","symbol","loc","typeMapper","patternRegex","patternMatch","M","L","H","'"," a","yy","EEEE","E","defaultFirstDay","firstDayMapper","sun","mon","tue","wed","thu","fri","sat","currencyFormatRegex","curWithoutNumberRegex","$","%","-","0","1","dateParseRegex","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","short","dayPeriods","am","pm","eras","eraNames","0-alt-variant","1-alt-variant","eraAbbr","eraNarrow","dateFormats","full","long","medium","timeFormats","dateTimeFormats","availableFormats","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","timeZoneNames","hourFormat","gmtFormat","gmtZeroFormat","numbers","currencies","USD","displayName","symbol-alt-narrow","EUR","GBP","minimumGroupingDigits","symbols-numberSystem-latn","list","superscriptingExponent","perMille","decimalFormats-numberSystem-latn","standard","percentFormats-numberSystem-latn","currencyFormats-numberSystem-latn","accounting","scientificFormats-numberSystem-latn","monthIndex","C","P","N","A","formatSplit","integerPart","fractionPart","customNumberFormat","dateObj","getActualDateTimeFormat","isExcelFormat","actualPattern","tLength","timeZonePattern","options_1","timeZone","numMapper","timezone","DateFormat","getTimeZoneValue","getActualNumberFormat","minFrac","parseOptions","custom","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","fractionDigitsPattern","integer","minimumIntegerPattern","no","groupingPattern","cPattern","getWeekData","firstDay","iCulture","lastPageID","abbreviateRegexGlobal","weekdayKey","timeSetter","datePartMatcher","z","Z","dateFormat","formatOptions","dateSeperator","patternMatch_1","weekday","designator","eText","era","intDateFormatter","matches_1","curval","processNumber","curstr","desig","dec","checkTwodigitNumber","tVal","curPattern","ishour","latnRegex","minute","hour","DateParser","dateParser","hourOnly","numOptions","regexString","evalposition","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","canUpdate","charKey","optional","weekObject","hour12","tzone","hpattern","parseTimeZoneRegx","parserRegex","parsedDateParts","internalDateParse","getDateObject","setMilliseconds","year","tKeys_1","tValue","pDate","lDate","lastDay","tzValue","retOptions","props_1","matchString","internalNumberParser","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","symbolRegex","symbolpattern","getParsedNumber","isNegative","NaN","exponent","rightToLeft","getDateFormat","getCulture","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getNumberPattern","getFirstDayOfWeek","componentCount","lastHistoryLen","Component","needsID","moduleLoader","localObserver","detectFunction","enablePersistence","setPersistData","injectModules","render","mergePersistData","event_2","getInjectedModules","injectedModules","Inject","localStorage","getItem","setItem","getPersistData","clearTemplate","templateName","isHistoryChanged","pageID","history","hash","charCodeAt","addOnPersist","persistObj","objValue","ignoreOnPersist","iterateJsonProperties","newObj","newList","this_1","DialogUtility","defaultPosition","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","prevLeft","prevTop","dragProcessStarted","tapHoldTimer","externalInitialize","droppables","toggleEvents","scope","isUnWire","enableTapHold","mobileInitialize","initialize","currentTarget","removeTapholdTimer","tapHoldThreshold","curTarget","abort","intCoord","getCoordinates","initialPosition","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isChangeTouch","intCordinate","styleProp","marginRight","dragTarget","intClosest","calculateParentPosition","getHelperElement","dragTargetElement","helperElement","parentClientRect","dragStart","getProperTargetElement","dragArea","setDragArea","enableTailMode","posValue","getProcessedPositionValue","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","queryPositionInfo","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","dragData","intOver","hoverObject","intOut","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","dragValue","enableAutoScroll","scrollIntoView","docBody","docEle","dragStop","dragStopCalled","intDrop","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","elementFromPoint","cursorAt","sender","draggable","draggedElement","dropIns","getDropInstance","parent_1","eleInst","eleInst_1","Droppable","mouseOver","area","accept","isDrag","isDropArea","canDrop","droppedElement","coord","backspace","tab","enter","alt","pause","capslock","escape","pageup","pagedown","home","leftarrow","uparrow","rightarrow","downarrow","insert","delete","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","semicolon","plus","comma","minus","dot","forwardslash","graveaccent","openbracket","backslash","closebracket","singlequote","KeyboardEvents","keyPressHandler","isAltKey","altKey","isShiftKey","shiftKey","curkeyCode","which","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","keyAction","config","configCache","keyData","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","svgLink","svgObj","setSVGSize","rectangle","polyline","ellipse","drawPolygon","polygon","img","preserveAspectRatio","createTitle","createClipPath","createForeignObject","foreignObject","createPattern","newOptions","fx","fy","drawGradient","gradientType","defs","stop_1","drawClipPath","drawCircularClipPath","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","isTouchMoved","movedDirection","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","timeOutTapHold","tapHoldEvent","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","calcPoints","swipeArgs","swipeDirection","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","checkSwipe","modeClear","lastTapTime","eTapArgs","pnt","newX","newY","newT","xDist","yDist","Engine","isRipple","comp","data_1","builderFunction","classObj","encodeURIComponent","siblings","childNodes_1","curNode","ELEMENT_NODE","attrVal","cssClassName","Button","isPrimary","setIconCss","disabled","controlStatus","removeRippleEffect","iconPosition","isToggle","btnClickHandler","unWireEvents","DISABLED","RIPPLE","RIPPLECHECK","RIPPLEINDETERMINATE","CheckBox","isKeyPressed","changeState","ariaState","getWrapper","indeterminate","clickHandler","focusOutHandler","focusHandler","setDisabled","initWrapper","for","labelPosition","setText","keyDownHandler","labelMouseHandler","mouseDownHandler","labelWrap","changeHandler","stopPropagation","RadioButton","RadioButton_1","radioGrp","radioWrap","getLabel","nextElementSibling","labelRippleHandler","textLabel","rippleLabel","Switch","bar","onLabel","offLabel","setLabel","switchInner","rippleTouchHandler","eventType","onText","offText","switchFocusHandler","switchMouseUp","toggle","OTHERMONTH","ROOT","OVERLAY","WEEKNUMBER","SELECTED","FOCUSEDDATE","OTHERMONTHROW","ZOOMIN","CalendarBase","controlUp","controlDown","moveDown","moveUp","moveLeft","moveRight","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","altUpArrow","spacebar","altRightArrow","altLeftArrow","globalize","todayDisabled","todayDate","data-role","calendarElement","createHeader","createContent","validateDate","checkDateValue","minMaxUpdate","headerElement","iconContainer","previousIcon","aria-disabled","aria-label","nextIcon","headerTitleElement","aria-atomic","contentElement","tabIndex","aria-activedescendant","createContentHeader","createContentBody","showTodayButton","createContentFooter","getCultureValues","culShortNames","getCultureObjects","shortNames","html","tableHeadElement","weekNumber","shiftArray","renderYears","renderDecades","renderMonths","updateFooter","todayElement","l10","today","footer","todayButtonClick","navigateTitle","keyboardModule","keyActionHandle","currentView","depth","getViewNumber","navigateTo","multiSelection","selectedDate","view","focusedDate","tableBodyElement","depthValue","levelRestrict","KeyboardNavigate","selectDate","contentClick","addYears","number","isMonthYearRange","addDay","isMinMaxRange","navigatePreviousHandler","navigatePrevious","navigateNextHandler","navigateNext","navigateHandler","triggerNavigate","minMaxDate","localDate","numCells","tdEles","renderDays","renderTemplate","currentMonth","titleUpdate","getMilliseconds","setStartDate","weekEle","weekAnchor","getWeek","dateFormatOptions","tdEle","dayCell","dayLink","renderDayCellArgs","isDisabled","isOutOfRange","renderDayCellEvent","otherMnthBool","disabledCls","getDateVal","updateFocus","otherMonth","tableElement","removeTableHeadElement","valueUtil","curDate","yr","curYrs","minYr","minMonth","maxYr","maxMonth","localMonth","localYr","startYr","endYr","startHdrYr","endHdrYr","startYear","rowIterator","aria-selected","lastDate","timeOffset","findLastDay","classNm","trEle","otherMonthCell","iconHandler","setAriaActiveDescendant","clickEventEmitter","eve","getIdValue","switchView","validateValues","copyValues","skipIndex","tempValueString","minString","maxString","setValueUpdate","setActiveDescendant","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","stringVal","previous","ld","tzOffset","dateString","setDateDecade","setDateYear","checkPresentDate","tempElement","selectedElement","previousValue","checkPrevious","navigatedEvent","navigatedArgs","compare","modifier","findNextTD","tmpDate","Calendar","isMultiSelection","tempValues","limit","copyDate","previousValues","form","formResetHandler","changedArgs","triggerChange","previousDate","tempDays","storeView","addDate","tempDates","removeDate","changeEvent","isInteracted","PositionData","CLASSNAMES","Popup","setEnableRtl","refreshPosition","setContent","actionOnScroll","wireScrollEvents","unwireScrollEvents","orientationOnChange","getRelateToElement","scrollRefresh","parent_2","relateToElement","relateTo","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","parent_3","isElementVisible","checkGetBoundingClientRect","win","windowView","scrollY","scrollX","outerWidth","outerHeight","parent_4","reposition","collision","checkFixedParent","checkCollision","parentDisplay","getAnchorPosition","anchorEle","eleRect","anchorRect","targetType","callFlip","param","callFit","viewPortRect","horz","vert","show","animationOptions","relativeElement","zIndexElement","showAnimation","hideAnimation","ButtonProps","AnimationSettings","DLG_HEADER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","SCROLL_DISABLED","FULLSCREEN","DLG_CLOSE_ICON_BTN","DLG_UTIL_DEFAULT_TITLE","DLG_UTIL_ROOT","DLG_UTIL_ALERT","DLG_UTIL_CONFIRM","Dialog","initRender","headerContent","classArray","clonedEle","closeIconClickEventHandler","dlgOverlayClickEventHandler","l10n","prevOnChange","keyDown","isModal","buttonObj","btnObj","activeElement","focusableElements","isTagName","isContentEdit","hasAttribute","closeOnEscape","primaryButtonEle","buttonIndex_1","buttons","buttonModel","click","setCSSClass","setMaxHeight","initialRender","setzIndex","calculatezIndex","setTargetContent","setHeader","showCloseIcon","renderCloseIcon","footerTemplate","setButton","setFooterTemplate","allowDragging","setAllowDragging","aria-modal","setIsModal","dlgContainer","popupObj","focusContent","dlgOverlay","unBindEvent","closeArgs","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","zIndexValue","setPopupPosition","dragObj","buttonContent","buttonType","btn","ftrTemplateContent","aria-describedby","contentEle","innerContentElement","setTemplate","isContent","headerEle","createHeaderContent","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","u","disableElement","getAutoFocusNode","validNode","elementMatch","Element","bindEvent","updateIsModal","setPopupZindex","isFullScreen","fullScreen","openAnimation","animationSettings","dialogOpen","closeAnimation","getButtons","createDialog","dialogObject","formOptions","isDraggable","formButtonModel","buttonPropModel","buttonProps","alert","dialogElement","alertDialogObj","alertButtonModel","okButton","setAlertButtonModel","alertOptions","confirm","confirmDialogObj","okButtonModel","cancelButtonModel","cancelButton","setConfirmButtonModel","confirmOptions","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_RIGHT","POPUP_OPEN","POPUP_CLOSE","formatPosition","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","tipClass","tooltipEle","renderPopup","elePos","mouseTrail","getTooltipPosition","openPopupHandler","closePopupHandler","offsetPos","calculateTooltipOffset","collisionFlipFit","tooltipEventArgs","tooltipEleWidth","tooltipEleHeight","arrowEle","tipWidth","tipHeight","tipAdjust","tipHeightAdjust","tipWidthAdjust","updateTipPosition","selEle","adjustArrow","leftValue","topValue","tooltipWidth","tooltipHeight","arrowInnerELe","tipPosExclude","tipPointerPosition","POINTER_ADJUST","renderContent","tooltipContent","templateFunction","isSticky","tipClose","ICON","onStickyClose","addDescribedBy","describedby","data-tooltip-id","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","targetList_1","ctrlId","restoreElement","wireMouseEvents","showTimer","hideTimer","isHidden","TOOLTIP_WRAP","aria-hidden","PopupAnimation","openDelay","horizontal","vertical","affectedPos","eleOffset","arrowleft","targetElement","closeAnimation_1","closeDelay","unwireMouseEvents","onMouseOut","onMouseMove","eventPageX","eventPageY","colpos","touchEnd","scrollHandler","triggerList_1","getTriggerList","wireFocusEvents","touchModule","tapHold","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","findTarget","RTL","DISABLE","INPUT","CLEARICON","CLEARICONHIDE","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","_focusFn","getParentNode","_blurFn","createFloatingInput","inputObject","wireFloatingEvents","createInputContainer","customTag","updateLabelState","updateIconState","button","createClearButton","initial","insertAdjacentElement","readOnly","wireClearBtnEvents","validateLabel","tagClass","setCssClass","oldClass","setPlaceholder","aria-placeholder","setReadonly","isReadonly","isRtl","setEnabled","isEnable","inputContainer","disabledAttrs","considerWrapper","removeAttributes","addAttributes","setClearButton","isClear","_internalRipple","argsButton","_onMouseDownRipple","_onMouseUpRipple","parentEle","_onMouseRipple","appendSpan","iconClass","createInput","setPropertyValue","removeFloating","unwireFloatingEvents","addFloating","iconEle","floatLine","floatText","setRipple","ErrorOption","SPINICON","INCREMENT","DECREMENT","INTREGEXP","NumericTextBox","isPrevFocused","decimalSeparator","intRegExp","isCalled","cloneElement","angularTagName","tabindex","incrementTitle","decrementTitle","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","checkAttributes","validateMinMax","validateStep","updatePlaceholder","createWrapper","showSpinButton","spinBtnCreation","changeValue","strictMode","trimValue","decimals","roundNumber","attributes_1","inputWrapper","aria-readonly","hiddenInput","validateHidden","spinDown","spinUp","wireSpinBtnEvents","formattedValue","aria-valuemin","aria-valuemax","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","focusIn","focusOut","keyUpHandler","inputHandler","pasteHandler","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","updateValue","beforeUpdate","preventHandler","iOS","platform","currentPos","prevPos","ignoreKeyCode","valArray","prevVal","nextEle","cursorPosChanged","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","stepCount","roundValue","precision","divide","updateCurrency","propVal","numberOfDecimals","decimalPart","modifyText","validateState","result1","result2","metaKey","currentChar","fractionRule","validateDecimalOnType","mouseWheel","rawEvent","wheelDelta","detail","formatValue_1","ele_1","focusEvent","getElementData","mouseUpClick","floatLabelTypeUpdate","decrement","getText","propValue","#","?","&","MaskUndo","MaskedTextBox","resetMaskedTextBox","setMaskPlaceholder","setWidth","blur","setVal","dynamicPlaceholder","strippedValue_1","strippedVal","getMaskedValue","TicksData","LimitData","TooltipData","classNames","Slider","horDir","verDir","transition","rangeBar","transitionOnMaterialTooltip","scaleTransform","customAriaText","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","internationalization","ticks","formatString","formatInfo","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","setZindex","tooltipElement","firstTooltipElement","secondTooltipElement","sliderContainer","showOn","sliderTrack","isMaterial","isBootstrap","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","showButtons","setButtons","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","renderScale","renderTooltip","firstElementClassName","limitBarFirst","limitBarSecond","firstHandle","secondHandle","setAriaAttributes","customValues","createSecondHandle","secondMaterialHandle","createFirstHandle","firstMaterialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","activeHandle","handlePos1","handlePos2","getHandle","tooltipObj","firstTooltipObj","secondTooltipObj","refreshTooltip","openMaterialTooltip","tooltipAnimation","closeTooltip","handleFocusOut","tooltipValue","setTooltipContent","addTooltipClass","setAriaAttrValue","formatContent","handleVal1","ariaContent","handle1","handle2","handleVal2","count_1","getTooltipTransformProperties","previousTooltipClass","tooltipPlacement","tooltipPosition","tooltipBeforeOpen","transformProperties","bootstrapCollisionArgs","wireMaterialTooltipEvent","sliderDown","tooltipPositionCalculation","checkTooltipPosition","firstHandleTooltipPosition","secondHandleTooltipPosition","tooltipClass","tooltipPointer","afterClose","tooltipAfterClose","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","openTooltip","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","refreshTooltipOnMove","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","customTickCounter","bigNum","tickCount","orien","ul","smallStep","showSmallTicks","largeStep","steps","customStep","li","islargeTick","tickWidth","largestep","repeat","createTick","formatTicksValue","decimalPoints","tickesAlignment","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","tickText","tickElement","tickValuePosition","other","otherChild","ariaValueText","isTickFormatted","valuenow","aria-valuetext","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","focusSliderElement","buttonUp","setRangeBar","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","minValue","maxValue","limitBar","preHandlePos1","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","updateRangeValue","setPreviousVal","preHandlePos2","tempStartEnd","onResize","startHandleFixed","endHandleFixed","xyToPosition","stepValueCalculation","percentStep","remain","addition","f","positionToValue","sliderBarClick","handlepos","handleVal","focusedElement","checkRepeatedValue","xPostion","yPostion","firstPartRemain","secondPartRemain","minDiff","dragRangeBarMove","dragRangeBarUp","sliderBarMove","sliderBarUp","handleValueAdjust","handleValue","assignValue","handleNumber","valueAndPostion","wireButtonEvt","sliderFocusOut","onresize","keyUp","hover","relatedTarget","transformProperties_1","hiddenHandle_1","handle_1","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","EMAIL","URL","DATE_ISO","DIGITS","PHONE","CREDITCARD","ListBase","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","defaultMessages","email","dateIso","creditcard","maxLength","minLength","rangeLength","tel","equalTo","inputElements","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","selected","rules_1","clearForm","getInputElement","errorClass","validClass","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","defRule","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","annotationMessage","isCheckable","submitHandler","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","getErrorMessage","errorRule","isValid","removeErrorRules","showMessage","createErrorElement","errorElement","optionalValidationStatus","refer","currentRule","formElement","checkValidator","ruleValue","formats","errorOption","Message","errorContainer","containerId","customPlacement","nextSibling","checkRequired","inputType","compareTo","Label","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","ICON_FOCUSED","PAUSE_UPLOAD","RESUME_UPLOAD","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","multiple","fileList","filesData","uploadedFilesData","isForm","allTypes","pausedData","uploadMetaData","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","renderButtonTemplates","unBindDropEvents","setDropArea","renderPreLoadFiles","updateDirectoryAttributes","setLocalizedTexts","preLocaleObj","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","localeText","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","pauseUpload","resume","retry","fileUploadCancel","checkHTMLAttributes","asyncSettings","saveUrl","removeUrl","isPureReactComponent","directoryUpload","renderBrowseButton","initializeUpload","wireActionButtonEvents","uploadButtonClick","clearButtonClick","unwireActionButtonEvents","uploadText","clearText","dropAreaWrapper","fileDropArea","files","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","showFileList","dropTextArea","dropArea","dropZoneElement","enableDropText","bindDropEvents","newAttr","createAttribute","setAttributeNode","checkAutoUpload","browseButtonClick","onSelectFiles","removeFocus","keyActionHandler","resetForm","setTabFocus","setReverseFocus","metaData","getCurrentMetaData","file","abortUpload","resumeUpload","chunkUpload","removeFiles","fileInfo","targetMetaData","iconElements","iconElement","dropElement","dragHover","onDragLeave","onPasteFile","clipboardData","pasteFile","kind","renderSelectedFiles","getAsFile","liElement","spinnerTarget","removeFilesData","customTemplate","getLiElement","removeUploadedFile","removeDirectly","selectedFiles","ajax","formData","FormData","currentRequest","postRawFile","updateFormData","customFormData","removeCompleted","removeFailed","customData","updateStatus","rootElement","statusElement","getFilesFromFolder","filesEntries","dataTransfer","checkDirectoryUpload","_loop_2","webkitGetAsEntry","isFile","files_2","fileObj","fullPath","isDirectory","traverseFileTree","files_3","_loop_3","this_2","createReader","readEntries","entries","targetFiles","sortFileList","directory","paste","isModified","modifiedFilesData","progressInterval","isCanceled","fileDetails","getFileType","webkitRelativePath","validatedFileSize","fileSource","checkExtension","dataFiles","updateSortedFileList","singleUpload","previousListClone","added","removedList_1","oldList","createParentUL","isBlank","dropFiles","extensions_1","extension","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","createCustomfileList","fileData_1","listItem","data-file-name","uploadTemplateFn","fileData_2","textContainer","getFileNameOnly","fileExtension","rtlContainer","bytesToSize","truncateName","nameElement","dataset","tail","setInitialAttributes","filterfileList","filterFiles","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","request","cancelUploadingFile","updateProgressBarClasses","removecanceledFile","renderFailureState","removeProgressbar","deleteIcon","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","callType","progressAnimation","animateProgressBar","extensions","uploadTemplate","exception","chunkSize","chunkIndex","blob","retryCount","sendRequest","totalChunk","chunkUploadComplete","chunkUploadInProgress","eventCancelByArgs","chunkUploadFailed","checkChunkUpload","response","updateMetaData","eventArgs_1","sendNextRequest","name_2","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","eventArgsData","retryRequest","retryAfterDelay","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","loadedSize","bytes","fileNames","sortedFilesData","sortedFileNames_1","name_3","uploadFiles","validateFileType","chunkEnabled","_loop_4","this_3","name_4","getFilesData","validUrl","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","Item","DropDownButton","canOpen","openPopUp","closePopup","createPopup","getPopUpElement","createItems","showIcon","hasIcon","separator","createAnchor","appendArrowSpan","setActiveElem","activeElem","popupEle","getULElement","popupElement","delegateMousedownHandler","mousedownHandler","keyBoardHandler","rippleFn","upDownKeyHandler","keyEventHandler","defaultIdx","liIdx","removeCustomSelection","isValidLI","selectedLi","getLI","trgt","beforeOpenArgs","openArgs","focusEle","beforeCloseArgs","TAGNAME","SplitButton","createPrimaryButton","createSecondaryButton","secondaryBtnObj","setAria","btnModel","primaryBtnObj","btnElem","dropDownBtnModel","beforeItemRender","beforeClose","aria-expanded","aria-haspopup","aria-owns","primaryBtnClickHandler","btnKeyBoardHandler","altdownarrow","HIDESPINNER","PROGRESS","PROGRESSACTIVE","CONTENTCLS","ProgressButton","percent","isPaused","startProgress","progressTime","spinSettings","enableProgress","createProgress","spinner","setSpinPosition","cont","clsList","hideSpin","startAnimate","startContAnimate","prevTime","prevPercent","prevProgressTime","args_1","timeDiff","stepTime","timeDiffBuffer","currentDuration","setSpinnerSize","setIconSpan","iconSpan","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HIDEHEX","HIDEOPACITY","HIDERGBA","HIDEVALUE","HIDEVALUESWITCH","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SHOWVALUE","SELECT","SPLITPREVIEW","presets","ColorPicker","Apply","Cancel","ModeSwitcher","inline","createWidget","createSplitBtn","enableOpacity","tileRipple","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","beforeOpenFn","onOpen","beforePopupClose","rgba","convertToRgbString","hexToRgb","preview","getPopupEle","popupInst","getPopupInst","modal","onPopupClose","destroyOtherComp","presetColors","paletteGroup","appendPalette","modeSwitcher","noColor","setNoColor","borderBottomWidth","hsv","rgbToHsv","refEle","tile","roundedColor","presetName","addTileSelection","noColorEle","attr","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","hueChange","createOpacitySlider","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","convertToOtherFormat","pValue","rgbToHex","cValue","updatePreview","triggerEvent","previewContainer","colorValue","isPicker","createNumericInput","numericInput","inputWrap","appendValueSwitchBtn","hexInput","maxlength","clsName","appendOpacityValue","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","getTooltipInst","setTooltipOffset","convertToHsvString","updateHsv","isKey","updateInput","removeTileSelection","convertRgbToNumberArray","n","pickerKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","handlerDragPosition","enterKeyHandler","triggerChangeEvent","prob","setHsv","handlerMove","handlerEnd","switchToPalette","ctrlBtnClick","noColorTile","switchToPicker","grpEle","tiles","prevSelectedEle","pop","tilePosition","keySelectionChanges","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","tooltipInst","len_1","bigInt","v","q","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","changeOpacityProps","cls","TextBox","textboxWrapper","interaction","resetInputHandler","INPUTFOCUS","ACTIVE","DatePicker","previousElementValue","isDateIconClicked","altDownArrow","calendarKeyConfigs","bindEvents","setAllowEdit","allowEdit","ariaAttrs","isCalendar","disabledDates","dateOptions","dateTimeFormat","minMaxUpdates","dateValue","tempFormat","dateIconHandler","inputFocusHandler","inputBlurHandler","inputChangeHandler","resetFormHandler","keyboardModules","inputKeyActionHandle","CalendarKeyActionHandle","focusArguments","strictModeUpdate","changeTrigger","blurArguments","calendarKeyboardModules","documentHandler","createCalendar","modelHeader","yearHeading","h2","daySpan","monthSpan","selectCalendar","prevent_1","outOfRange","preventArgs","prevent_2","ensureInputAttribute","ngTag","inputEleCopy","validationAttribute","checkHtmlAttributes","nameAttribute","valueCopy","previousValCopy","dateIdString","isDisabledDate","subQuery","isChild","distincts","queries","fKey","fromTable","lookups","expands","sortedColumns","groupedColumns","setKey","using","dataManager","always","executeQuery","cloned","subQuerySelector","isCountRequired","tableName","addParams","fn","distinct","expand","tables","fieldName","ignoreAccent","search","searchKey","fieldNames","comparer","fnOperators","sortBy","isFromGroup","sorts","order","endsWith","fnSort","filterQueries","sortByDesc","page","pageIndex","pageSize","take","nos","skip","hierarchy","selectorFn","foreignKey","requiresCount","aggregate","filterQueryLists","singles","filtered","isComplex","processOperator","condition","predicates","combinePredicates","fromJson","fromJSONData","record","isAnd","toJson","preds","consts","GroupGuid","startsWith","fnAscending","fnDescending","localeCompare","extractFields","jsonArray","newData","level","groupDs","jsonData","indx","childLevels","grouped","groupedArray","records","getVal","tempObj","aggs","buildHierarchy","lookup","pKey","grp","fKeyData","getFieldList","copyObj","ds","ignoreDiacritics","diacritics","callAdaptorFunction","adaptor","fnName","param1","param2","getAddParams","adp","dm","req","reqParams","isPlainObject","isCors","xhr","getGuid","rand","Uint8Array","isNull","getItemFromComparer","castRequired","requiresCompleteRecord","tmp","serverTimezoneOffset","average","truecount","falsecount","operatorSymbols","<",">","<=",">=","==","!=","*=","$=","^=","odBiOperator","lessthan","lessthanorequal","greaterthan","greaterthanorequal","equal","notequal","odUniOperator","endswith","startswith","odv4UniOperator","Ⓐ","A","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ⓑ","B","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ⓒ","C","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ⓓ","D","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","DZ","DŽ","Dz","Dž","Ⓔ","E","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ⓕ","F","Ḟ","Ƒ","Ꝼ","Ⓖ","G","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ⓗ","H","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ⓘ","I","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ⓙ","J","Ĵ","Ɉ","Ⓚ","K","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ⓛ","L","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","LJ","Lj","Ⓜ","M","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ⓝ","N","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","NJ","Nj","Ⓞ","O","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ⓟ","P","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ⓠ","Q","Ꝗ","Ꝙ","Ɋ","Ⓡ","R","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ⓢ","S","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ⓣ","T","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ⓤ","U","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ⓥ","V","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ⓦ","W","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ⓧ","X","Ẋ","Ẍ","Ⓨ","Y","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ⓩ","Z","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ⓐ","a","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ⓑ","b","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ⓒ","c","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ⓓ","d","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","dz","dž","ⓔ","e","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ⓕ","f","ḟ","ƒ","ꝼ","ⓖ","g","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ⓗ","h","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ⓘ","i","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ⓙ","j","ĵ","ǰ","ɉ","ⓚ","k","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ⓛ","l","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","lj","ⓜ","m","ḿ","ṁ","ṃ","ɱ","ɯ","ⓝ","n","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ʼn","ꞑ","ꞥ","nj","ⓞ","o","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ⓟ","p","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ⓠ","q","ɋ","ꝗ","ꝙ","ⓡ","r","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ⓢ","s","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ⓣ","t","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ⓤ","u","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ⓥ","v","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ⓦ","w","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ⓧ","x","ẋ","ẍ","ⓨ","y","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ⓩ","z","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","expected","notnull","isnull","processSymbols","parseJson","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","dupValue","dateParse","toTimeZone","isJson","isGuid","replacer","jsonReplacer","arrayReplacer","keys_3","addSelfOffset","toJSON","toUTC","utc","unix","toLocalTime","datefn","differenceString","localtimefn","norm","Adaptor","requestType","pvt","processResponse","JsonAdaptor","processQuery","countFlg","agg","batchRequest","changes","deletedRecordsLen","deletedRecords","addedRecords","changedRecords","onWhere","onAggregates","onSearch","onSortBy","fnCompare","onGroup","aggQuery","onPage","onRange","onTake","onSkip","onSelect","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","groups","filters","searches","getFiltersFrom","getRequestQuery","pvtData","convertToQueryString","request1","selects","requests","getAggregateResult","original","batchUrl","crudUrl","changed","deleted","insertUrl","keyColumn","updateUrl","predicats","aggregateData","groupQuery","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","batchContent","changeSetContent","batchChangeSetContentType","updateType","onPredicate","requiresCast","guid","getField","onComplexPredicate","onEachWhere","onEachSearch","onEachSort","onCount","settings","overrideMimeType","dataCopy","results","emptyAndBatch","processBatchResponse","versionCheck","requiresFormat","keys_4","localTimeReplacer","convertObj","localTime","compareAndRemove","initialGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","generateBodyContent","method","stat","org","o","jsonObj","exVal","changeGuid","ODataV4Adaptor","getModulename","isDate","onExpand","expanded","exArr","ex","onDistinct","distinctFields","WebApiAdaptor","Count","Items","WebMethodAdaptor","RemoteSaveAdaptor","updateKey","CacheAdaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","forDel","requestTime","generateKey","currentFilter","newQuery","cachedItems","crossDomain","offline","timeTillExpiration","cachingPageSize","enableCaching","jsonp","defaultQuery","isDataAvailable","then","setDefaultQuery","deffered","Deferred","nextTick","getDeferedArgs","makeRequest","promise","extendRequest","fnSuccess","fnFail","cache","isSelector","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","subUrl","childReq","subData","virtualRecords","catch","all","pResult","cResult","deff","doAjaxRequest","defer","check","hasChild","collapsible","image","iconWrapper","createListFromArray","isSingleLevel","generateUL","createListItemFromArray","subChild","curOpt","defaultListBaseOptions","getModuleClass","generateId","itemCreating","generateSingleLevelLI","generateLI","itemCreated","createListItemFromJson","defaultMappedFields","ariaAttributes","defaultAriaAttributes","typeofData","curItem","innerEle","showCheckBox","itemClass","imageUrl","imageAttributes","subDS","hasChildren","processSubChild","subLi","createListFromJson","expandCollapse","expandElement","expandIconPosition","expandIconClass","listClass","elementArray","addSorting","sortOrder","getDataSource","createJsonFromElement","curEle","jsonAr","childs","getAllAttributes","urlAttributes","typeof","elementAttributes","innerElements","grpLI","elementID","groupItemRole","itemRole","anchorTag","uID","groupTemplate","innerDiv","wrapperRole","itemText","ulElement","listRole","isChecked","groupBy","headerTemplate","createList","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","groupDataSource","curFields","cusQuery","itemObj","grpItem","renderContentTemplate","liCollection","renderGroupTemplate","headerItems","category","headerItems_1","headerData","generateIcon","TimePickerBase","effectsConfig","None","SlideLeft","SlideDown","Zoom","Fade","effectsRTLConfig","root","focused","parentItem","listIcon","listItemText","groupListItem","headerTemplateText","disable","backIcon","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","FieldSettings","ListView","setHTMLAttribute","setSize","listBaseOption","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","setCheckbox","curViewDS","getSubDS","resetCurrentList","css","isWindow","enableElement","isEnabled","showBack","showHeader","innerHeaderEle","textEle","hedBackButton","headerTemplateEle","fromView","toView","fPos_1","overflow_1","anim","aniObj","curUL","renderCheckbox","initialization","animateOptions","currentLiElements","isNestedList","selectedId","checkboxElement","frameElement_1","checkInternally","checkBoxPosition","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","getItemData","back","selectEventData","removeHover","removeSelect","setSelectLI","setCheckboxLI","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","onArrowKeyDown","arrowKeyHandler","elementTop","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","scrollTo","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","spaceKeyHandler","tabFocus","swipeActionHandler","focusout","swipe","focusedLI_1","hoverLI","selectedLI_1","renderSubList","selectedLI","lastLi","levelKeys","localData","levelKeys_1","curDSJSON","findItemFromDS","curDS","getElementUID","resultJSON","getQuery","setViewDataSource","isInAnimation","setLocalData","renderList","renderIntoDom","isNgTemplate","createUIItem","uiVirtualization","classAr","pID","toUL","fromUL","selectItem","selectMultipleItems","getParentId","getSelectedItems","liTextCollection","liDataCollection","dataParent","tempData","findItem","enableItem","setItemState","disableItem","showItem","showHideItem","hideItem","addItem","addListItem","removeItemFromList","groupLi","previousElementSibling","dsIndex","removeMultipleItems","listViewInstance","templateRef","firstDs","expectedDomItemCount","ValidateItemCount","domItemCount","uiLastIndex","wireScrollEvent","otherDs","topElement","bottomElement","totalHeight","topElementHeight","bottomElementHeight","listDiff","uiIndicesInitialization","onVirtualScroll","onVirtualUiScroll","dataSourceLength","itemCount","uiIndices","activeIndices","disabledItemIndices","hiddenItemIndices","viewContainerRef","_embeddedViews","getscrollerHeight","startingHeight","scrollPosition","scroll","onLongScroll","onNormalScroll","isScrollingDown","updateUI","updateUiContent","curViewDs","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection_1","textCollection_1","curViewDS_1","curViewDS_2","resutJSON","removeUiItem","addUiItem","changeUiIndices","liItem","previousSibling","commonTemplate","templateElements","groupTemplateElements","templateData","flatTemplateNodes","groupTemplateNodes","compileTemplate","textProperty","classProperty","attributeProperty","onChange","listElement","updateContextData","regexMatch","resultantOutput","classNameMatch","subNode","bindedvalue","attributeNames","attributeName","attributeNameFunction","attributeValueFunction","attrNameMatch","attrValueMatch","subNode_1","attrName","attributeValue","isChildHasTextContent","textPropertyMatch","textFunction","onNgChange","$implicit","LEFTCALENDER","RIGHTCALENDER","STARTDATE","ENDDATE","RANGEHOVER","STARTLABEL","ENDLABEL","CALENDAR","HEADER","TITLE","ICONCONTAINER","RANGECONTAINER","PRESETS","FOCUSDATE","CONTENT","DAYSPAN","DATEDISABLED","ICONDISABLED","LISTCLASS","ListBaseClasses","HOVER","OVERFLOW","Presets","DateRangePicker","isCustomRange","isCustomWindow","presetsItem","previousEleValue","isKeyPopup","dateDisabled","isRangeIconClicked","isMaxDaysClicked","disabledDays","preventBlur","preventFocus","setModelValue","presetKeyConfig","keyInputConfigs","defaultConstant","customRange","applyText","cancelText","selectedDays","isMobile","matchMedia","angularTag","initProperty","navNextFunction","navNextMonth","navPrevFunction","navPrevMonth","deviceNavNextFunction","deviceNavNext","deviceNavPrevFunction","deviceNavPrevious","initStartDate","initEndDate","shiftTab","processPresets","setRangeAllowEdit","rangeIconHandler","inputKeyboardModule","updateHiddenInput","firstHiddenChild","secondHiddenChild","clearRange","applyButton","removeSelection","applyFunction","leftCalendar","calendarFocus","minDays","maxDays","isPreset","createPresets","listRippleEffect","renderControl","createControl","bindCalendarEvents","updateRange","rightCalendar","disabledDateRender","updateHeader","clearCalendarEvents","leftCalPrevIcon","leftCalNextIcon","rightCalPrevIcon","rightCalNextIcon","updateNavIcons","compareMonths","leftCalCurrentDate","rightCalCurrentDate","calendarIconEvent","deviceCalendarEvent","startButton","deviceHeaderClick","endButton","calendarIconRipple","leftKeyboardModule","keyInputHandler","rightKeyboardModule","bindCalendarCellEvents","removeFocusedDate","calendar","updateDeviceCalendar","deviceNavigation","deviceCalendar","removeClassDisabled","updateMinMaxDays","selectableDates","refreshControl","previousStartValue","previousEndValue","inputStr","isDateDisabled","keyCalendarUpdate","isLeftCalendar","updateCalendarElement","navInCalendar","leftLimit","rightLimit","keyNavigation","rightDateLimit","leftDateLimit","presetElement","selectRange","yearDate","calendarNavigation","checkMinMaxDays","presetHeight","tdCells_1","hoverSelection","focusedDate_1","tdCells_2","isDisabledCell","eleDate","startDateValue","elementCollection","elementCollection_1","tdCells_3","eleDateValue","eleDateValue_1","addSelectedAttributes","endDateValue","rangeArgs","inputValue","otherMonthSelect","isStartDate","sameDate","tdCell","endEle","endEle_1","endEle_2","ele_2","removeSelectedAttributes","tdCells","tdCells_4","tdCells_5","startMonth","maxEle","tdCells_6","calendar_1","tdCells_7","disabledDayCnt","start_1","end_1","updateControl","createRangeHeader","labelContainer","endBtn","startBtn","changeIcon","disableInput","validateRangeStrict","validateMinMaxDays","validateRange","renderCalendar","isSameMonth","startMonthCurrentDate","selectNextMonth","selectStartMonth","calendarContainer","prevIcon","leftTitle","leftContainer","rightContainer","leftNavTitle","rightTitle","rightNavTitle","controlContainer","headerContainer","footerSection","cancelBtn","CANCEL","applyBtn","cancelFunction","deviceHeaderUpdate","closeEventArgs","popupKeyboardModule","popupKeyActionHandle","onMouseClick","isClick","setListSelection","onMouseOver","onMouseLeave","renderCustomPopup","removeListSelection","applyPresetRange","modelValue","showPopup","openEventArgs","listTag","wireListEvents","unWireListEvents","popupWidth","btnKeyboardModule","presetKeyboardModule","presetKeyActionHandler","popupKeyBoardHandler","popupCloseHandler","rangeContainer","listMoveDown","setScrollPosition","listMoveUp","hvrItem","getHoverLI","actItem","getActiveLI","listHeight","active","liHeight","setEleWidth","virtualRenderCellArgs","virtualRenderCellEvent","isStartDisabled","isEndDisabled","createHiddenInput","isBlur","getSelectedRange","refreshChange","enableInput","clearModelvalue","DAY","MONTH","YEAR","NAVIGATION","FOCUS","createListItems","createdEl","timeFormat","timeCollections","Theme","TimePicker","disableItemCollection","keyConfigure","down","up","createInputElement","setTimeAllowEdit","validateInterval","validateDisable","getFormattedValue","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","aria-autocomplete","isNullOrEmpty","unBindEvents","ariaAttribute","generateList","listWrapper","addSelection","getPopupHeight","popupHeight","popupCalculation","firstItem","isEmptyList","textIndent","paddingRight","paddingLeft","containerStyle","setPopupWidth","createDateObj","removeErrorClass","checkErrorState","disableTimeIcon","selectInputText","getMeridianText","getCursorSelection","getActiveElement","borderLeftWidth","setScrollTo","findScrollTop","initialTime","scrollTime","cldrTimeFormat","cldrDateFormat","getCultureDateObject","getCultureTimeObject","dateToNumeric","getExactDateTime","checkValue","compareFormatChange","updatePlaceHolder","popupHandler","mouseUpHandler","curPos","cursorDetails","focusSelection","isSeparator","keyHandler","objToString","previousState","setSelection","animModel","documentClickHandler","checkValueChange","isNavigation","valueProcess","currentLi","setHover","maxVal","dateVal","strictOperation","setCurrentDate","clearHandler","inputEvent","setZIndex","getTextFormat","strArray","newval","findNextElement","textVal","timeVal","validLiElement","backward","elementIndex","isCheck","nextItem","offsetValue","lastItemOffsetValue","ulPadding","paddingTop","isUpdate","hoveredItem","getHoverItem","setActiveClass","TimeParse","listBaseOptions","getProperty","HOUR","MINUTE","SECOND","MILLISECOND","DATETIMEPOPUPWRAPPER","DateTimePicker","previousDateTime","blurHandler","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isDisable","timeIcon","renderTimeIcon","timeHandler","dateHandler","inputKeyAction","getCldrFormat","isDatePopupOpen","listCreation","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","TimeKeyActionHandle","unWireTimeListEvents","setDimension","setTimeHover","removeTimeHover","setInputValue","getFullDateTime","tempVal","combineDateTime","minutes","seconds","timeValue","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","hours","milliseconds","tempStartValue","tempMin","tempEndValue","tempMax","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","axisLabelFont","axisTitleFont","chartTitleFont","chartSubTitleFont","crosshairLabelFont","tooltipLabelFont","legendLabelFont","stripLineLabelFont","Font","Border","ChartArea","Margin","Indexes","CornerRadius","seriesIndex","EmptyPointSettings","TooltipSettings","DoubleRange","mStart","mEnd","Double","calculateNumericNiceInterval","actualDesiredIntervalsCount","intervalDivs","getActualRange","initializeDoubleRange","actualRange","doubleRange","POSITIVE_INFINITY","NEGATIVE_INFINITY","calculateRangeAndInterval","calculateRange","applyRangePadding","calculateVisibleLabels","series_1","paddingInterval","rangePadding","findMinMax","yMin","yMax","getRangePadding","findAdditional","findNormal","updateActualRange","calculateVisibleRange","zoomPosition","enableAutoIntervalOnZooming","triggerRangeRender","getFormat","isCustom","getMaxLabelWidth","isStack100","legendRender","textRender","pointRender","seriesRender","axisRangeCalculated","axisMultiLabelRender","tooltipRender","chartMouseMove","chartMouseClick","chartMouseLeave","chartMouseDown","chartMouseUp","zoomComplete","dragComplete","annotationRender","scrollEnd","scrollChanged","ChartAnnotationSettings","LabelBorder","MultiLevelCategories","StripLineSettings","MultiLevelLabels","Row","nearSizes","farSizes","computeSize","findTickSize","crossInAxis","findLabelSize","lineStyle","MajorGridLines","MinorGridLines","AxisLine","MajorTickLines","MinorTickLines","CrosshairTooltip","Axis","axisBottomLine","crossAt","updatedRect","multiLevelLabelHeight","isChart","crossAxis","tickPosition","isInside","majorTickLines","innerPadding","titleSize","maxLabelSize","placeNextToAxisLine","findDifference","updateCrossValue","baseRange","pointX","previousEnd","isIntersect","labelIntersectAction","rotatedLabel","edgeLabelPlacement","findMultiRows","multiLevelLabelModule","multiLevelLabels","getMultilevelLabelsHeight","currentX","store","getModule","baseModule","originalText","Mean","verticalStandardMean","verticalSquareRoot","horizontalStandardMean","horizontalSquareRoot","verticalMean","horizontalMean","PolarArc","currentXPosition","CustomizeOption","StackValues","startValues","endValues","RectOption","CircleOption","PolygonOption","Thickness","PointData","lierIndex","AccPointData","ControlPoints","CartesianAxisLayoutPanel","chartModule","measureAxis","seriesClipRect","leftSize","rightSize","topSize","bottomSize","measureRowAxis","measureColumnAxis","calculateAxisSize","refreshAxis","calculateRowSize","rows","arrangeAxis","measureDefinition","computedHeight","calculateColumnSize","computedWidth","definition","axis_1","scrollBarModule","enableScrollbar","isZoomed","nearCount","farCount","len_2","computedTop","plotOffset","len_3","len_4","computedLeft","actualIndex","axisCollections","axis_2","verticalAxes","getActualRow","pushAxis","horizontalAxes","getActualColumn","crossesAt","isTransposed","crossesInAxis","updateCrossAt","primaryYAxis","dateFormatter","labels","axisCollection","actualLength","columnIndex","rowIndex","rowTop","remainingHeight","columnLeft","remainingWidth","renderAxes","outsideElement","axisElement","axisLineElement","findAxisPosition","drawAxisLine","majorGridLines","drawXAxisGridLine","drawXAxisLabels","drawXAxisBorder","drawXAxisTitle","drawYAxisGridLine","drawYAxisLabels","drawYAxisBorder","drawYAxisTitle","renderScrollbar","drawBottomLine","isScrollUI","isRow","definitionName","optionsLine","plotX","plotY","stroke-dasharray","minorDirection","pointY","majorGrid","majorTick","minorGird","minorTick","tickSize","axisLineSize","ticksbwtLabel","isTickInside","isBorder","minorGridLines","minorTickLines","minorTicksPerInterval","drawAxisMinorLine","renderGridLine","renderTickLine","chartArea","elementSize","isLabelInside","isOpposed","createZoomingLabel","endY","labelBorder","endX","createAxisBorderElement","renderYAxisMultiLevelLabels","labelIndex","logStart","coor","logInterval","logPosition","ticksX","ticksY","findLogNumeric","labelPadding","diffHeight","yLocation","intervalLength","islabelInside","anglePadding","findAxisLabel","axisRect","length_2","renderXAxisMultiLevelLabels","borderElement","enableTrim","findParentNode","zoomElement","ChartData","currentPoints","previousPoints","getData","drawType","isRectSeries","marker","mouseX","mouseY","getRectPoint","selectionMode","selectionModule","rectPoints","fromCenterX","fromCenterY","clickAngle","distanceFromCenter","arcAngle","regionData","regions","chartAreaType","checkRegionContainsPoint","regionRect","getClosest","xData","xData_1","getClosestX","DataLabelSettings","MarkerSettings","Points","symbolLocations","percentage","Trendline","setDataSource","trendLineModule","initDataSource","visibleSeriesCount","ErrorBarCapSettings","ChartSegment","ErrorBarSettings","SeriesBase","currentViewData","processJsonData","xName","Series","textMappingName","processInternalData","paretoSeriesModule","performCumulativeCalculation","sizeMax","getSeriesType","dataPoint","pushCategoryData","pushData","setEmptyPoint","isArea","findSplinePoint","volume","pointColorMapping","tooltipMappingName","findVisibility","isEmpty","emptyPointSettings","yData","getAverage","yValues","setXYMinMax","setHiloMinMax","isIndexed","refreshDataManager","dateSource","dataModule","generateQuery","dataManagerSuccess","isRemoteData","recordsCount","refreshChart","refreshTechnicalIndicator","trendlines","refreshBound","drawPoints","delayedAnimation","refreshAxisLabel","findSeriesCollection","isStack","rowSeries","_d","_e","_f","_g","rectSeriesInChart","calculateStackedValue","isStacking100","columnItem","calculateStackingValues","stackingGroup","lastValue","lastPositive","lastNegative","frequencies","findFrequencies","stackingSeies","stackedValues","seriesCollection_1","pointsLength","findPercentageOfStacking","stackingSeies_1","seriesCollection_2","renderSeries","createSeriesElements","errorBarModule","dataLabelModule","appendSeriesElement","seriesElements","performAnimation","explodeValue","markerHeight","markerWidth","clipRectElement","symbolElement","seriesElement","clip-path","errorBarElement","dataLabelElements","shapeElement","animateSeries","doAnimation","doErrorBarAnimation","markerRender","doMarkerAnimation","doDataLabelAnimation","setPointColor","setBorderColor","Data","initDataManager","MarkerExplode","mouseMoveHandler","crosshair","markerMove","startMove","explodeSeries","shared","chartAxisLayoutPanel","pointData","chartSeries","enableTooltip","removeHighlightedMarker","markerExplode","drawTrackBall","seriesMarker","symbolId","borderColor","Marker","renderMarker","previousPath","circlePath","shapeOption","markerElement","isBoxPlot","markerClipRect","getRangeLowPoint","markerElements","incFactor","lowPoint","LegendSettings","BaseLegend","rowCount","columnCount","pageButtonSize","pageXCollections","maxColumns","isTrimmed","currentPage","legend","legendSettings","legendID","isChartControl","calculateLegendBounds","legendBounds","library","getLegendBounds","getLocation","setBounds","maxItemHeight","legendHeight","legendWidth","alignLegend","legendSize","renderLegend","firstLegend","findFirstLegendPosition","legendCollections","legendGroup","legendTranslateGroup","createLegendElements","legendSeriesGroup","totalPages","textPadding","shapePadding","previousLegend","legendOption","getRenderPoint","renderSymbol","renderText","toggleVisibility","isPaging","renderPagingElements","legendCollection","legendCollection_1","legendItemsGroup","clippath","symbolColor","markerShape","strokewidth","symbolOption","markerVisibility","fontcolor","textStyle","textOption","paginggroup","iconSize","clipPathHeight","pageTextElement","translatePage","pagingText","pageNumber","changePage","pageText","clearTooltip","LegendOptions","TechnicalIndicator","targetSeries","Dictionary","toStringFunction","nElements","toStr","pair","previousElement","keysArray","namesOfKeys","index1","pair1","valuesArray","namesOfValues","index2","pair2","containsKey","PdfName","stringStartMark","internalValue","isSaving6","position6","normalizeValue","status6","index6","writer","escapeString","crossTable","newName","stringValue","ch","delimiters","replacements","Operators","forTest","endObj","slash","newLine","stream","endStream","xref","trailer","startxref","eof","beginText","endText","appendLineSegment","fillEvenOdd","fillStroke","fillStrokeEvenOdd","appendbeziercurve","appendRectangle","saveState","restoreState","paintXObject","modifyCtm","modifyTM","setLineWidth","setLineCapStyle","setLineJoinStyle","setDashPattern","setFlatnessTolerance","closeStrokePath","closeFillStrokePath","setCharacterSpace","setWordSpace","setHorizontalScaling","setTextLeading","setFont","setRenderingMode","setTextRise","setTextScaling","setCoords","goToNextLine","setTextWithFormatting","setTextOnNewLine","selectcolorspaceforstroking","selectcolorspacefornonstroking","setrbgcolorforstroking","setrbgcolorfornonstroking","setcmykcolorforstroking","setcmykcolorfornonstroking","setgraycolorforstroking","setgraycolorfornonstroking","clipPathEvenOdd","setGraphicsState","comment","evenOdd","setMiterLimit","DictionaryProperties","pages","kids","resources","mediaBox","decodeParms","type1","baseFont","encoding","subtype","contents","procset","colorSpace","extGState","xObject","bitsPerComponent","dctdecode","blackIs1","predictor","deviceRgb","annot","uri","annots","ca","CA","xyz","dest","BM","flatedecode","cIDFontType2","cIDToGIDMap","identity","dw","fontDescriptor","cIDSystemInfo","fontName","flags","fontBBox","missingWidth","stemV","italicAngle","capHeight","ascent","descent","leading","avgWidth","fontFile2","xHeight","stemH","registry","ordering","supplement","type0","identityH","toUnicode","descendantFonts","PdfDictionary","dictionary","position7","primitiveItems","suffix","archive","isFont","encrypt","dictionaryProperties","freezeChanges","status7","isSaving7","index7","getArchive","setArchive","setEncrypt","modify","getEncrypt","freezer","bChanged","onBeginSave","beginSave","onFontDictionaryBeginSave","fontDictionaryBeginSave","onDescendantFontBeginSave","descendantFontBeginSave","onTemplateBeginSave","pageBeginDrawTemplate","pageBeginSave","onBeginAnnotationSave","annotationBeginSave","onSectionBeginSave","saveEvent","sectionBeginSave","bRaiseEvent","saveItems","SaveSectionCollectionEventHandler","SaveDescendantFontEventHandler","SaveFontDictionaryEventHandler","SaveAnnotationEventHandler","SaveSectionEventHandler","SaveTemplateEventHandler","PdfNumber","position5","status5","isSaving5","index5","intValue","floatToString","returnString","PdfArray","startMark","endMark","position9","clonedObject9","internalElements","tempArray","tempNumberArray","pdfNumber","status9","isSaving9","index9","pdfCrossTable","markedChange","getItems","newArray","fromRectangle","tempElements","markChanged","removeAt","Save","fileName","buffer","mimeType","getMimeType","Blob","isMicrosoftBrowser","msSaveBlob","downloadLink","saveInternal","hasDownloadAttribute","download","dataUrl_1","createObjectURL","revokeObjectURL","reader_1","FileReader","onloadend","readAsDataURL","XmlWriter","contentPos","bufferText","bufferBlob","currentState","namespaceStack","Namespace","elementStack","XmlElement","attributeStack","flush","writeProcessingInstruction","checkName","writeStartDocument","writeProcessingInstructionInternal","standalone","rawText","writeEndDocument","writeEndElement","writeStartElement","localName","namespace","startElementContent","lookupPrefix","lookupNamespace","writeStartElementInternal","writeEndElementInternal","previousTop","writeElementString","writeString","writeAttributeString","writeStartAttribute","writeStringInternal","writeEndAttribute","writeInternal","writeRaw","isRawString","writeStartAttributePrefixAndNameSpace","writeStartAttributeSpecialAttribute","skipPushAndWrite","pushNamespaceExplicit","pushNamespaceImplicit","writeStartAttributeInternal","namespaceName","writeNamespaceDeclaration","namespaceUri","writeStartNamespaceDeclaration","inAttributeValue","addNamespace","ns","lookupNamespaceIndex","existingNsIndex","addAttribute","XmlAttribute","isDuplicate","Encoding","includeBom","emitBOM","encodingType","initBOM","getByteCount","utf8Len","getByteCountInternal","codePoint","isHighSurrogate","codeUnit","toCodepoint","highCodeUnit","lowCodeUnit","charIndex","charCount","byteCount","isUtf8","charCode","getBytes","RangeError","ArrayBuffer","getBytesOfUtf8Encoding","getBytesOfUnicodeEncoding","getBytesOfAnsiEncoding","byteLength","byteCal","getStringOfUtf8Encoding","byteUnicode","getStringofUnicodeEncoding","bufview","charcode","uint","uint16","byteUni","byte16","StreamWriter","enc","setBomByte","arrayUnicode","uint8","arrayUtf8","utf8","bufferArray","writeLine","arrLiteralCodes","Int16Array","arrLiteralLengths","arrDistanceCodes","arrDistanceLengths","CompressedStreamWriter","noWrap","pendingBuffer","pendingBufLength","pendingBufCache","pendingBufBitsInCache","bufferPosition","extraBits","currentHash","matchStart","matchLength","matchPrevAvail","blockStart","stringStart","lookAhead","totalBytesIn","inputOffset","inputEnd","windowSize","windowMask","hashSize","hashMask","hashShift","maxDist","checkSum","treeLiteral","CompressorHuffmanTree","treeDistances","treeCodeLengths","arrDistances","arrLiterals","dataWindow","hashHead","hashPrevious","writeZLibHeader","compressedString","encode","inputBuffer","ChecksumCalculator","checksumUpdate","pendingBufferFlush","compressData","headerDate","pendingBufferWriteShortBytes","finish","success","fillWindow","canFlush","compressSlow","lookAheadCompleted","slideWindow","prevMatch","prevLen","discardMatch","matchPreviousBest","matchPreviousAvailable","huffmanIsFull","insertString","findLongestMatch","huffmanTallyLit","huffmanTallyDist","huffmanFlushBlock","lastBlock","more","subarray","updateHash","chainLen","niceLen","scan","bestEnd","bestLength","stringEnd","scanEnd1","scanEnd","literal","codeFrequencies","lc","huffmanLengthCode","dc","huffmanDistanceCode","stored","storedOffset","storedLength","buildTree","calculateBLFreq","blTreeCodes","codeLengths","huffCodeLengthOrders","opt_len","getEncodedLength","static_len","huffmanFlushStoredBlock","pendingBufferWriteBits","setStaticCodes","huffmanCompressBlock","huffmanReset","huffmanSendAllTrees","pendingBufferAlignToByte","pendingBufferWriteShort","pendingBufferWriteByteBlock","buildCodes","treeLength","rank","writeTree","literalLen","writeCodeToStream","bits","Uint32Array","pendingBufferFlushBits","isClose","elementCount","minCodes","codeMinCount","codeFrequency","lengthCount","Int32Array","codeCount","codeLength","codes","lengthTemp","nextCode","bitsCount","bitReverse","reverseBits","blTree","maxCount","minCount","curLen","nextLen","maxRepeatCount","minRepeatCount","currentRepeatCount","currentCodeLength","codesCount","arrTree","pPos","nodesCount","iIndex","constructHuffmanTree","buildLength","lastVal","minDepth","numNodes","numLeafs","calculateOptimalCodeLength","iIncreasableLength","recreateTree","nodePtr","childPtr","childIndex","bitLength","checksum","checksum_uint","s1","s2","checkSumBitOffset","checksumIterationCount","checksumBase","crc32Table","ZipArchive","ZipArchiveItem","addDirectory","directoryName","zipArchive","saveAsBlob","skipFileSave","zipData","dirLength","getCompressedData","constructZippedObject","writeZippedContent","crc32Value","compressedData","compressedSize","uncompressedDataSize","compressionType","calculateCrc32Value","readAsArrayBuffer","compressor","currentIndex","nextIndex","zipParts","extFileAttr","writeHeader","localHeader","centralDir","writeCentralDirectory","zipHeader","getModifiedTime","getModifiedDate","localDirLen","cenDirLen","getArrayBuffer","writeFooter","externalFileAttribute","centralLength","localLength","modTime","modiDate","itemName","InternalEnum","PdfStream","dicPrefix","dicSuffix","clonedObject2","bCompress","isImageStream","isFontStream","dataStream2","bCompress2","clearStream","internalStream","writeBytes","onCmapBeginSave","cmapBeginSave","onFontProgramBeginSave","fontProgramBeginSave","compressContent","byteArray","dataArray","getCompressedString","addFilter","filterName","PdfReferenceHolder","isImage","bytesToString","output","SaveCmapEventHandler","SaveFontProgramEventHandler","ForceEncoding","SourceType","PdfHorizontalAlignment","PdfString","bHex","position1","clonedObject1","bDecrypted","isParentDecrypted","isPacked","isFormField","isColorSpace","isHexString","status1","isSaving1","bConverted","bForceEncoding","bytesToHex","Ascii","pdfEncode","stringMark","escapeSymbols","currentData","CrossTable","newString","toUnicodeArray","bAddPrefix","byteToString","hexStringMark","hexFormatPattern","PdfReference","objNumber","genNumber","index3","position3","status3","isSaving3","obj2","index4","position4","objectIndex","primitiveObject","status4","isSaving4","pdfReference","cTable","isSaving","getReference","PdfAction","pdfDictionary","PdfUriAction","uniformResourceIdentifier","PdfVerticalAlignment","PdfTextAlignment","TextRenderingMode","PdfLineJoin","PdfLineCap","PdfDashStyle","PdfFillMode","PdfColorSpace","PdfBlendMode","PdfGraphicsUnit","PdfGridImagePosition","PdfTextDirection","PdfFontStyle","PdfColor","color1","color2","color3","color4","redColor","greenColor","blueColor","grayColor","gray","alpha","filled","maxColourChannelValue","cyanColor","magentaColor","yellowColor","blackColor","assignCMYK","red","green","blue","black","cyan","magenta","yellow","rgbToString","ifStroking","colour","rgbStrings","toArray","Rgb","grayStringsSroke","grayStringsFill","PointF","SizeF","RectangleF","arg1","arg2","arg3","arg4","pointf","sizef","Rectangle","PdfBrush","PdfSolidBrush","pdfColor","monitorChanges","brush","streamWriter","getResources","currentColorSpace","setColorAndSpace","resetChanges","PdfFontFamily","PdfFontType","PdfWordWrapType","PdfSubSuperScript","FontEncoding","TtfCmapFormat","TtfCmapEncoding","TtfPlatformID","TtfMicrosoftEncodingID","TtfMacintoshEncodingID","FontDescriptorFlags","TtfCompositeGlyphFlags","LineType","PdfStringFormat","scalingFactor","wordWrapType","Word","internalLineLimit","Top","isRightToLeft","internalCharacterSpacing","internalWordSpacing","clip","pdfSubSuperScript","internalParagraphIndent","firstLineIndent","trailingSpaces","isNoClip","initialLineIndent","StringTokenizer","currentPosition","getCharsCount","numSymbols","readLine","text2","peekLine","readWord","peekWord","word","read","builder","peek","readToEnd","spaces","whiteSpacePattern","PdfStringLayouter","isOverloadWithPosition","arg5","arg6","arg7","clientSize","doLayout","rectSize","pageHeight","reader","PdfStringLayoutResult","lineResult","lines","lineIndent","getLineIndent","layoutLine","numSymbolsInserted","returnedValue","copyToResult","numInserted","finalizeResult","firstLine","paragraphIndent","getLineHeight","lineSpacing","getLineWidth","layoutLineHeight","lineType","FirstParagraphLine","addToLineResult","NewLineBreak","curLine","curIndent","curLineWidth","getWrapType","WordOnly","textRemainder","Character","ln","LayoutBreak","LastParagraphLine","layoutLines","breakType","LineInfo","allowPartialLines","lineLimit","expHeight","trimLine","empty","ObjectStatus","PdfFont","Regular","metrics","getHeight","Bold","Italic","Strikeout","Underline","fontMetrics","pdfFontInternals","measureString","temparg2","layoutArea","temparg3","equalsTo","equalsToFont","getInternals","setInternals","internals","applyFormatSettings","realWidth","characterSpacing","wordSpacing","charSizeMultiplier","syncObject","PdfWriter","pdfDocument","overload","tempOverload","ObjectType","PdfMainObjectCollection","objectCollections","mainObjectCollection","primitiveObjectCollection","isNew","objInfo","ObjectInfo","Registered","lookFor","wasNew","trySetReference","found","setReference","pdfObject","objectCollectionIndex","PdfDocumentBase","isStreamCopied","PdfDocument","currentSavingObject","pdfCatalog","setMainObjectCollection","setCrossTable","setCatalog","catalog","filename","SW","encoding_1","SW_1","blobData","docSave","PdfPageOrientation","PdfCatalog","sections","tempDictionaryProperties","PdfCrossTable","maxGenNumIndex","objectCount","merging","internalTrailer","pdfObjects","saveHead","mappedReferences","markTrailerReferences","saveObjects","saveCount","xrefPos","registerObject","saveSections","saveTrailer","saveTheEndess","objectCollection","prevXRef","objectNum","prepareSubsection","saveSubsection","Free","generation","isFree","addOffsetLength","addGenNumberLength","generateFileVersion","bNew","getSubReference","objnumber","nextObjNumber","tempIndex","tempkey","tempvalue","bForceNew","saveIndirectObject","currentSavingObj","doSaveObject","free","RegisteredObject","dereference","tempOffset","offsetNumber","tempReference","Normal","PdfPageSize","letter","note","legal","a0","a3","a4","a5","a6","a7","a8","a9","a10","b0","b3","b4","b5","archE","archD","archC","archB","archA","flsa","halfLetter","letter11x17","ledger","PdfPageRotateAngle","PdfNumberStyle","PdfDockStyle","PdfAlignmentStyle","TemplateType","ImageFormat","PdfMargins","pdfMargin","setMargins","leftMargin","topMargin","rightMargin","bottomMargin","margin1","margin2","margin3","margin4","PdfPageSettings","margins","pageMargins","RotateAngle0","pageOrientation","Portrait","pageOrigin","isRotation","updateSize","Landscape","getActualSize","PdfStreamWriter","dictionaryName","writeOperator","executeObject","useEvenOddRule","fillStrokePath","fillPath","closeFillPath","textScaling","strokePath","restoreGraphicsState","saveGraphicsState","startNextLine","writePoint","showText","checkTextParam","writeText","setLeading","setTextRenderingMode","renderingMode","setCharacterSpacing","charSpacing","setWordSpacing","showNextLineText","setColorSpace","temparg1","op","opcode","updateY","writeComment","forStroking","setLineDashPattern","patternOffset","setLineDashPatternHelper","tempPattern","miterLimit","setLineCap","lineCapStyle","setLineJoin","lineJoinStyle","PdfPen","dashOffsetValue","penDashPattern","pdfDashStyle","Solid","pdfLineCap","pdfLineJoin","penWidth","internalMiterLimit","setBrush","Custom","Dash","Dot","DashDot","DashDotDot","sBrush","pdfBrush","currentPen","dashControl","lineJoin","lineCap","pen","getPattern","dashOffset","dashPattern","PdfTransformationMatrix","radDegFactor","transformationMatrix","multiply","degreesX","degRadFactor","metrixElements","tempMatrix","dispose","ProcedureSets","pdf","imageB","imageC","imageI","TemporaryDictionary","mKeys","mValues","ReferenceError","PdfTransparency","PdfAutomaticFieldInfoCollection","automaticFieldsInformation","fieldInfo","automaticFields","PdfGraphicsElement","drawHelper","graphics","bNeedSave","gState","translateTransform","drawInternal","PdfAutomaticField","internalBounds","internalTemplateSize","internalFont","internalBrush","internalPen","internalStringFormat","performDrawHelper","scalingX","scalingY","getFont","stringFormat","draw","location_1","PdfAutomaticFieldInfo","getBrush","defaultFont","getPageFromGraphics","pageNumberFieldLocation","pageNumberField","ByteArray","mPosition","dataView","DataView","readByte","getBuffer","writeFromBase64String","base64","encodedString","chr1","chr2","chr3","enc2","enc3","keyStr","resultIndex","PdfBoolean","objectStatus","saving","boolToStr","PdfLayoutType","ImageDecoder","mFormat","mbitsPerComponent","mStream","mHeight","mWidth","mImageData","internalBuffer","checkIfJpeg","Jpeg","parseJpegImage","imgData","mJpegHeader","getImageDictionary","imageData","imageStream","decodedString","imageDataAsNumberArray","compress","getColorSpace","getDecodeParams","decodeParams","mPngHeader","GIF_HEADER","BMP_HEADER","PdfUnitConverter","dpi","updateProportionsHelper","convertUnits","convertFromPixels","convertToPixels","proportions","pixelPerInch","horizontalResolution","verticalResolution","PdfImage","imageWidth","imageHeight","imagePhysicalDimension","getPointSize","dpiX","dpiY","ucX","ucY","ptWidth","Pixel","ptHeight","PdfBitmap","imageStatus","loadImage","initializeAsync","decoder","TtfTableInfo","TtfNameTable","TtfNameRecord","TtfHeadTable","TtfMetrics","macStyle","TtfHorizontalHeaderTable","TtfOS2Table","TtfPostTable","TtfLongHorMetric","TtfCmapSubTable","TtfCmapTable","TtfGlyphInfo","glyph","TtfLocaTable","TtfAppleCmapSubTable","TtfMicrosoftCmapSubTable","TtfTrimmedCmapSubTable","TtfGlyphHeader","BigEndianWriter","capacity","int32Size","int16Size","int64Size","bufferLength","internalPosition","writeShort","writeInt","writeUInt","buff","TtfReader","fontData","isTtcFont","isMacTtf","metricsName","isMacTTF","missedGlyphs","tableNames","entrySelectors","macintoshDictionary","microsoftDictionary","internalMacintoshGlyphs","internalMicrosoftGlyphs","readFontDictionary","readNameTable","headTable","readHeadTable","initializeFontName","checkPreambula","numTables","readInt16","tableDirectory","tableKey","readString","readInt32","lowestPosition","fixOffsets","minOffset","tableKeys","tableInfo","getTable","formatSelector","readUInt16","nameRecords","platformID","encodingID","languageID","nameID","unicode","readFixed","fontRevision","checkSumAdjustment","readUInt32","magicNumber","unitsPerEm","created","readInt64","modified","lowestReadableSize","fontDirectionHint","indexToLocalFormat","glyphDataFormat","readHorizontalHeaderTable","ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","metricDataFormat","numberOfHMetrics","readOS2Table","xAvgCharWidth","usWeightClass","usWidthClass","fsType","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","sFamilyClass","panose","readBytes","ulUnicodeRange1","ulUnicodeRange2","ulUnicodeRange3","ulUnicodeRange4","vendorIdentifier","fsSelection","usFirstCharIndex","usLastCharIndex","sTypoAscender","sTypoDescender","sTypoLineGap","usWinAscent","usWinDescent","ulCodePageRange1","ulCodePageRange2","sxHeight","sCapHeight","usDefaultChar","usBreakChar","usMaxContext","readPostTable","formatType","underlinePosition","underlineThickness","isFixedPitch","minType42","maxType42","minType1","maxType1","readWidthTable","glyphCount","advanceWidth","lsb","glyphWidth","readCmapTable","tablesCount","subTables","subTable","readCmapSubTable","getCmapEncoding","Macintosh","Microsoft","Apple","readAppleCmapTable","readMicrosoftCmapTable","Trimmed","readTrimmedCmapTable","maxMacIndex","glyphInfo","getWidth","macintosh","addGlyph","Unicode","microsoft","segCountX2","searchRange","entrySelector","rangeShift","segCount","endCount","readUshortArray","reservedPad","startCount","idDelta","idRangeOffset","glyphID","codeOffset","Symbol","firstCode","entryCount","postScriptName","glyphCode","Undefined","Roman","microsoftGlyphs","macintoshGlyphs","initializeMetrics","horizontalHeadTable","os2Table","postTable","cmapTables","bSymbol","isSymbol","winAscent","macAscent","winDescent","macDescent","fontBox","widthTable","updateWidth","subScriptSizeFactor","superscriptSizeFactor","getGlyph","byteToProcess","getDefaultGlyph","readLocaTable","bShort","offsets","updateGlyphChars","glyphChars","locaTable","glyphCharKeys","nextKey","processCompositeGlyph","glyphOffset","glyphHeader","numberOfContours","skipBytes","glyphIndex","MoreComponents","Arg1And2AreWords","WeHaveScale","WeHaveAnXyScale","WeHaveTwoByTwo","generateGlyphTable","newLocaTable","newGlyphTable","activeGlyphs","glyphSize","glyphSizeAligned","nextGlyphOffset","nextGlyphIndex","oldGlyphOffset","oldNextGlyphOffset","glyphTableSize","updateLocaTable","bLocaIsShort","newLocaTableOut","newLocaUpdated","newLocaSize","getFontProgram","locaTableSize","getFontProgramLength","fontProgramLength","writeCheckSums","writeGlyphs","usedTablesSize","nextTableSize","calculateCheckSum","byte1","byte2","byte3","byte4","setOffset","createInternals","bIsLocaShort","isFontPresent","getGlyphChars","charKeys","getAllGlyphs","allGlyphInfo","readFontProgram","convertString","getCharWidth","isUnicode","i1","i2","i3","i4","written","PdfFontMetrics","getAscent","getDescent","getLineGap","clearTypeFonts","clearTypeFontCollection","subSuperScript","SubScript","SuperScript","WidthTable","internalWidthTable","StandardWidthTable","widths","UnicodeTrueTypeFont","base64String","nameString","isCompress","isEmbedFont","cmapPrefix","cmapEndCodespaceRange","cmapBeginRange","cmapEndRange","cmapSuffix","fontString","Initialize","ttfReader","ttfMetrics","fontDictionary","fontProgram","cmap","descendantFont","subsetName","getFontName","createDescendantFont","createCmap","createFontDictionary","createFontProgram","isBold","formatName","createFontDescriptor","systemInfo","createSystemInfo","descriptor","getDescriptorFlags","getBoundBox","descFonts","usedChars","getDescendantWidth","generateCmap","generateFontProgram","chLen","firstGlyphIndex","lastGlyphIndex","firstGlyphIndexWasSet","widthDetails","middlePart","toHexString","nextRange","FixedPitch","Symbolic","Nonsymbolic","isItalic","ForceBold","isCaseChange","setSymbols","ArabicShapeRenderer","arabicCharTable","alef","alefHamza","alefHamzaBelow","alefMadda","lam","hamza","zeroWidthJoiner","hamzaAbove","hamzaBelow","wawHamza","yehHamza","waw","alefMaksura","yeh","farsiYeh","shadda","madda","lwa","lwawh","lwawhb","lwawm","bwhb","fathatan","superScriptalef","vowel","arabicMapTable","getCharacterShape","doShape","ArabicShape","present","ligature","shapeCount","getShapeCount","Shapes","Value","Ligature","Type","shapeValue","shapeType","shapeVowel","shapeLigature","shapeShapes","Bidi","indexes","indexLevels","mirroringShapeCharacters","doMirrorShaping","getLogicalToVisualString","inputText","rtlCharacters","RtlCharacters","getVisualOrder","setDefaultIndexLevel","doOrder","resultBuilder","odd","even","pstart","pend","reArrange","textOrder","rtlCharacterTypes","LRE","LRO","AL","RLE","RLO","PDF","EN","ES","ET","AN","CS","NSM","BN","S","WS","ON","charTypes","getCharacterCode","doVisualOrder","characterCodes","setDefaultLevels","setLevels","updateLevels","getEmbeddedCharactersLength","preType","checkNSM","checkEmbeddedCharacters","startType","endType","charType","checkEuropeanDigits","checkArabicCharacters","checkEuropeanNumberSeparator","checkEuropeanNumberTerminator","getLength","checkOtherNeutrals","checkOtherCharacters","pst","checkCommanCharacters","validSet","byte","lt","tt","rt","RtlRenderer","openBracket","closeBracket","wordSpace","customLayout","splitLayout","customSplitLayout","getGlyphIndex","glyphs","fontInternal","textDirection","layouted","txt","addChars","PdfGraphics","previousTextRenderingMode","Fill","previousCharacterSpacing","previousWordSpacing","previousTextScaling","procedureSets","isNormalRender","isUseFontSize","isEmfTextScaled","isEmf","isEmfPlus","isBaselineFormat","emfScalingFactor","colorSpaceChanged","isPointOverload","currentColorSpaces","isImageOptimized","graphicsState","istransparencySet","internalAutomaticFields","startCutIndex","pdfStreamWriter","canvasSize","pdfStringLayoutResult","internalMediaBoxUpperRightBound","clipBounds","pageLayer","bStateSaved","currentBrush","currentFont","bCSInitialized","currentStringFormat","requireProcedureSet","drawPdfTemplate","bNeedScale","getTranslateTransform","getScaleTransform","getName","newLocation","drawString","arg8","arg9","temparg4","temparg5","temparg6","temparg7","temparg8","temparg9","checkCorrectLayoutRectangle","drawStringLayoutResult","stateControl","Winding","isPen","isBrush","isEvenOdd","Alternate","physicalDimension","setResources","resource","getLineBounds","lineIndex","layoutRectangle","lineCount","getTextVerticalAlignShift","hShift","getHorizontalAlignShift","shouldJustify","layoutedRectangle","Center","Right","lineAlignment","Middle","Bottom","setLayer","pageSave","performDraw","applyStringSettings","horizontalScalingFactor","resultHeight","remainingString","drawLayoutResult","underlineStrikeoutText","getNextPage","section","getPages","setClip","tm","getTextRenderingMode","cs","ws","textHeight","boundsHeight","vAlignShift","ttfFont","lineInfo","hAlignShift","drawUnicodeLine","drawAsciiLine","justifyLine","useWordSpace","Justify","rtlRender","blocks","rightAlign","RightToLeft","drawUnicodeBlocks","breakUnicodeLine","tokens","token","convertToUnicode","getUnicodeString","xShift","spaceWidth","tokenWidth","converted","boundsWidth","hasWordSpacing","whitespacesCount","initializeCoordinates","justifyStyle","goodWidth","hasSpaces","goodLineBreakStyle","underline","strikeout","linePen","createUnderlineStikeoutPen","vShift","underlineYOffset","strikeoutYOffset","FillStroke","Stroke","ClipFlag","layoutBounds","firstParagraphLine","Left","lastDocumentCS","lastGraphicsCS","initCurrentColorSpace","penControl","brushControl","fontControl","colorspace","curSubSuper","prevSubSuper","setTransparency","trasparencies","transp","td","TransparencyData","clipTranslateMargins","clipArea","rotateTransform","getRotateTransform","mediaBoxUpperRightBound","cropBox","PdfGraphicsState","textRenderingMode","doRestoreState","pathTypesValuesMask","transparencyObject","GetResourceEventHandler","internalTextRenderingMode","internalTextScaling","pdfColorSpace","pdfGraphics","pdfPen","pdfFont","alphaPen","alphaBrush","blendMode","PdfPageLayer","streamClipPageTemplates","sublayer","contentLength","pdfPage","clipPageTemplates","layerid","layerName","initializeGraphics","PdfPageLayerCollection","sign","oPage","gr","sc","isSame","origin","getActualBounds","PdfCollection","parentLayerCount","optionalContent","PdfPageBase","lPage","parseLayers","firstArgument","secondArgument","addLayer","insertLayer","loadedPage","saveStream","restoreStream","saveData","PdfTemplate","writeTransformation","tempSize","templateSize","PdfResources","addType","addSubType","baseDictionary","getNames","primitive","names","sName","generateName","pdfNames","fonts","procedureSetName","procSets","removeFont","Guid","getNewGuidString","xobjects","savable","transDic","parentXObjects","hasSameImageStream","oldReference","randomString","randomNumber","defLayerIndex","pageDictionary","pdfSection","defaultLayerIndex","layerCollection","PdfAnnotationCollection","alreadyExistsAnnotationError","missingAnnotationException","internalAnnotations","lists","doAdd","setPage","layoutResult","lastPosition","setColor","colours","PdfPage","annotationCollection","defaultLayer","setSection","resetProgress","isProgressOn","getClientSize","doc","drawPageTemplates","containsTemplates","backLayer","drawTemplates","frontLayer","PageAddedEventArgs","PdfSectionPageCollection","PdfDocumentTemplate","leftTemplate","checkElement","topTemplate","rightTemplate","bottomTemplate","evenLeft","evenTop","evenRight","evenBottom","oddLeft","oddTop","oddRight","oddBottom","getLeft","isEven","EvenLeft","OddLeft","getTop","EvenTop","OddTop","getRight","EvenRight","OddRight","getBottom","EvenBottom","OddBottom","pageCollectionIndex","PdfSectionTemplate","rightValue","bottomValue","stampValue","PdfSection","pageAdded","pdfPages","initialSettings","sectionCollection","pagesReferences","pageTemplate","pagesCollection","pointToNativePdf","setPageSettings","PageSettingsState","pageCount","foreground","documentHeaders","getDocumentTemplates","documentTemplates","templates","applyDocumentTopTemplate","applyDocumentBottomTemplate","applyDocumentLeftTemplate","applyDocumentRightTemplate","page_1","checkPresence","pageAddedMethod","rh","onPageAdded","document_1","getLeftIndentWidth","getTopIndentHeight","getRightIndentWidth","getBottomIndentHeight","includeMargins","templateWidth","docTemplateWidth","templateHeight","docTemplateHeight","temproaryPages","applyPageSettings","parentSettings","PdfSectionCollection","rotateFactor","drawTemplatesHelper","pageRotate","sectionCount","pdfSectionCollection","section_1","checkSection","countPages","PdfDocumentPageCollection","pdfPageCollectionIndex","previousPageOrientation","getLastSection","getPageByIndex","getPage","sectionStartIndex","numPages","PdfCacheCollection","referenceObjects","pdfFontCollection","getGroup","createNewGroup","tGroup","representative","removeGroup","isMerging","defaultMargin","documentPageCollection","cacheCollection","defaultStandardFont","PdfStandardFont","Helvetica","isCacheEnabled","Cmyk","GrayScale","checkPagesPresence","PdfStandardFontMetricsFactory","getMetrics","getHelveticaMetrics","Courier","getCourierMetrics","TimesRoman","getTimesMetrics","getSymbolMetrics","ZapfDingbats","getZapfDingbatsMetrics","subSuperScriptFactor","helveticaBoldItalicAscent","helveticaBoldItalicDescent","helveticaBoldItalicName","arialBoldWidth","helveticaBoldAscent","helveticaBoldDescent","helveticaBoldName","helveticaItalicAscent","helveticaItalicDescent","helveticaItalicName","arialWidth","helveticaAscent","helveticaDescent","helveticaName","courierBoldItalicAscent","courierBoldItalicDescent","courierBoldItalicName","fixedWidth","courierBoldAscent","courierBoldDescent","courierBoldName","courierItalicAscent","courierItalicDescent","courierItalicName","courierAscent","courierDescent","courierName","timesBoldItalicAscent","timesBoldItalicDescent","timesBoldItalicName","timesRomanBoldItalicWidths","timesBoldAscent","timesBoldDescent","timesBoldName","timesRomanBoldWidth","timesItalicAscent","timesItalicDescent","timesItalicName","timesRomanItalicWidth","timesAscent","timesDescent","timesName","timesRomanWidth","symbolAscent","symbolDescent","symbolName","symbolWidth","zapfDingbatsAscent","zapfDingbatsDescent","zapfDingbatsName","zapfDingbatsWidth","fontFamilyPrototype","encodings","pdfFontFamily","checkStyle","initializeInternals","convert","getCharWidthInternal","stFont","fontFamilyEqual","lineReducer","styleEqual","WinAnsiEncoding","charOffset","PdfAnnotation","textBrush","textFont","internalColor","darkness","nativeRectangle","initialHeight","tempLoacation","PdfLinkAnnotation","PdfActionLinkAnnotation","pdfAction","getSetAction","PdfDocumentLinkAnnotation","pdfDestination","ElementLayouter","layoutElement","layoutInternal","Layouter","PdfLayoutFormat","baseFormat","break","paginateBounds","boundsSet","usePaginateBounds","layoutType","layoutPaginateBounds","PdfLayoutParams","layoutFormat","PdfLayoutResult","PdfLayoutElement","beginPageLayout","endPageLayout","onBeginPageLayout","onEndPageLayout","bEmbedFonts","PdfLayoutBreakType","PdfDestinationMode","TextLayouter","currentBounds","pageResult","TextPageLayoutResult","remainder","layoutOnPage","getLayoutResult","PdfTextLayoutResult","lastLineBounds","checkCorrectBounds","stringResult","textFinished","FitElement","PdfTextWebLink","getTextPageBounds","verticalShift","remainderText","lastLineTextBounds","PdfTextElement","hasPointOverload","isPdfTextElement","stringLayoutResult","previousPosition","calculateResultBounds","lineSize","startPosition","PdfUriAnnotation","pdfUriAction","uriAction","uniformResourceLocator","uriAnnotation","recalculateBounds","defaultBorder","previousFontStyle","calculateBounds","drawMultipleLineWithPoint","drawMultipleLineWithBounds","PdfNumbersConvertor","intArabic","numberStyle","Numeric","LowerLatin","arabicToLetter","LowerRoman","arabicToRoman","UpperLatin","UpperRoman","retval","generateNumber","arabic","convertToLetter","appendChar","magnitude","numberstring","letterLimit","acsiiStartIndex","PdfTemplateValuePair","pdfTemplate","PdfMultipleValueField","drawLocation","PdfPageNumberField","internalNumberStyle","internalGetValue","PdfCompositeField","internalText","automaticField","PdfSingleValueField","painterGraphics","PdfPageCountField","PdfBorderOverlapStyle","PdfDestination","destinationMode","destinationLocation","initializePrimitive","simplePage","FitToPage","PdfTrueTypeFont","createFontInternal","getUnicodeLineWidth","codeWidth","calculateStyle","iStyle","equalFont","enableCache","isEmbed","isUnicodeFont","glyphIndices","resultGlyph","PdfPageTemplateElement","dockStyle","resetAlignment","alignmentStyle","setAlignment","isForeground","templateType","updateDocking","dock","canBeSet","TopLeft","MiddleLeft","BottomLeft","TopCenter","TopRight","MiddleRight","BottomRight","BottomCenter","MiddleCenter","getAlignmentBounds","getDockBounds","getSimpleAlignmentBounds","getTemplateAlignmentBounds","actualBounds","getSimpleDockBounds","getTemplateDockBounds","PdfBorders","defaultBorderPenLeft","dashStyle","defaultBorderPenRight","defaultBorderPenTop","defaultBorderPenBottom","leftPen","rightPen","topPen","bottomPen","PdfPaddings","leftPad","rightPad","topPad","bottomPad","PdfHorizontalOverflowType","PdfGridStyleBase","gridBackgroundBrush","gridTextBrush","gridTextPen","gridFont","gridBackgroundImage","PdfGridStyle","gridBorderOverlapStyle","Overlap","bAllowHorizontalOverflow","gridHorizontalOverflowType","LastPage","gridCellSpacing","gridCellPadding","PdfGridCellStyle","gridCellBorders","default","PdfGridRowStyle","gridRowBackgroundBrush","setBackgroundBrush","getCell","backgroundBrush","gridRowTextBrush","setTextBrush","gridRowTextPen","setTextPen","textPen","gridRowFont","gridRowBorder","setBorder","borders","setParent","gridRowBackgroundImage","RangeNavigatorTheme","PdfGridCell","cellWidth","cellHeight","tempval","fontSpilt","finsh","rowSpanRemainingHeight","hasRowSpan","hasColSpan","isFinish","gridRowSpan","colSpan","gridRow","internalIsCellMergeContinue","internalIsRowMergeContinue","internalIsCellMergeStart","internalIsRowMergeStart","remaining","objectValue","PdfGrid","isSingleGrid","ParentCell","isChildGrid","getRow","colCount","rowSpanExists","hasRowSpanSpan","cellStyle","measureHeight","columnSpanExists","isComplete","measureWidth","layouter","getTextFont","webLink","cellPadding","cellSpacing","drawCellBackground","getBackgroundBrush","backgroundImage","getBackgroundImage","adjustContentLayoutArea","returnBounds","rowSpan","cancelSubsequentSpans","allowHorizontalOverflow","rowOverflowIndex","adjustOuterLayoutArea","getTextPen","getTextBrush","strFormat","getStringFormat","innerLayoutArea","allowRowBreakAcrossPages","splitChildRowIndex","rowFontSplit","repeatFlag","childGrid","layoutRect","PdfGridLayouter","PdfGridLayoutFormat","LayoutFormat","Paginate","setSpan","checkSpan","childGridResult","rowBreakHeightValue","rowBreakHeight","NestedGridLayoutResult","imageBounds","drawCellBorders","borderOverlapStyle","Inside","p1","p2","Square","currentColIndex","columnSpan","isCellMergeContinue","compWidth","getColumn","currentRowIndex","rowCollection","getHeader","rowMergeComplete","calculateWidth","cellIndex","tempWidth","PdfGridCellCollection","tempcell","PdfGridColumn","columnWidth","isCustomWidth","PdfGridColumnCollection","internalColumns","measureColumnsWidth","initialWidth","isPageWidth","getDefaultWidths","subFactor","PdfGridRow","gridRowOverflowIndex","rowWidth","isrowFinish","isRowSpanRowHeightSet","noOfPageCount","isRowHeightSet","isPageBreakRowSpanApplied","isRowMergeComplete","pdfGrid","bRowSpanExists","gridCells","rowStyle","gridRowBreakHeight","gridResult","bColumnSpanExists","cellIn","rowin","rowWid","PdfGridRowCollection","addRow","temprow","PdfGridHeaderCollection","gridSize","isGridSplit","isRearranged","pageBounds","listOfNavigatePages","parentCellIndex","breakRow","hasColumnSpan","beginCellDraw","endCellDraw","bRepeatHeader","gridColumns","gridRows","gridHeaders","gridInitialWidth","gridStyle","ispageWidth","ischildGrid","parentCell","onBeginCellDraw","raiseBeginCellDraw","onEndCellDraw","raiseEndCellDraw","gridLocation","currentCellIndex","maxSpan","isRowMergeContinue","isCellMergeStart","isRowMergeStart","maximumRowSpan","cellcolSpan","cellrowSpan","cellmaxSpan","childGridColumnWidth","colCount_1","colCount_2","RowCount","ColCount","colWidth","childGridColWidth","childheight","columnRanges","gridLayoutFormat","currentPageBounds","currentGraphics","FitColumnsToPage","Grid","hType","horizontalOverflowType","determineColumnDrawRanges","startColumn","endColumn","cellWidths","availableWidth","subWidths","layoutedPages","startPage","cellBounds","cellStartIndex","cellEndIndex","returnObject","raiseBeforePageLayout","drawRow","repeatRow","originalHeight","repeatRowIndex","rowResult","tempResult","raisePageLayouted","getNextPageformat","isRowBreaksNextPage","i_2","repeatHeader","j_1","headerRepeat","j_2","tempResult1","i_3","i_4","OnePage","i_5","recalHeight","ReCalculateHeight","secion","pageGraphics","location_2","totalwidth","i_6","isPdfGrid","maximumCellBoundsWidth","largeNavigatePage","rowLayoutBoundsWidth","NextPage","reArrangePages","nextPage","pageindex","CheckIfDefaultFormat","defaultFormat","measureTrailingSpaces","noClip","RaiseBeforeCellDraw","PdfGridBeginCellDrawEventArgs","raiseAfterCellDraw","cellstyle","PdfGridEndCellDrawEventArgs","isChanged","PdfGridLayoutResult","newHeight","currentRow","raiseBeginPageLayout","PdfGridBeginPageLayoutEventArgs","startRowIndex","PdfGridEndPageLayoutEventArgs","raiseEndPageLayout","result_1","RowLayoutResult","rowHeightWithSpan","currRowIndex","calculatedHeight","FitPage","drawRowWithBreak","repeatRowNumber","location_4","cancelSpans","calculateHeight","gridHeight","cellstyle1","FinishedDrawingCell","rowBreakPageHeightCellIndex","GridCellEventArgs","gridRowIndex","gridCellIndex","gridBounds","bSkip","PdfCancelEventArgs","isCancel","BeginPageLayoutEventArgs","EndPageLayoutEventArgs","nextPdfPage","startRow","layoutedBounds","bIsFinished","ExportUtils","resizeTo","screen","availWidth","availHeight","getHTMLContent","export","controls","controlValue","getControlsValue","isDownload","svgData","XMLSerializer","serializeToString","triggerDownload","image_1","ctx_1","pdfDefaultWidth","pdfDefaultHeight","exactWidth","exactHeight","imageString","msSaveOrOpenBlob","msToBlob","MouseEvent","bubbles","cancelable","groupEle","CrosshairSettings","ZoomSettings","Chart","chartid","initPrivateVariable","refreshDefinition","tooltipModule","createChartSvg","calculateAreaType","calculateVisibleSeries","initTechnicalIndicators","initTrendLines","calculateVisibleAxis","getLocalizedLabel","legendModule","getLegendOptions","calculateStackValues","renderElements","isCalculateStacking","rectCount","renderBorder","renderTitle","renderAreaBorder","renderSeriesElements","applyZoomkit","performSelection","setSecondaryElementPosition","renderAnnotation","yAxisElements","stripLineModule","renderStripLine","initializeModuleElements","dataLabelCollections","indicators","indicatorElements","hasTrendlines","trendLineElements","isTrendline","tooltipDiv","initializeIndicator","initializeTrendLine","appendElementsAfterSeries","indicator","createIndicatorElements","getTrendLineElements","enablePan","performedUI","applyZoomToolkit","annotationModule","renderAnnotations","selectedDataIndexes","invokeSelection","redrawSelection","initializeDataModule","techIndicator","titleHeight","subTitleHeight","titleWidth","subTitleCollection","subTitle","subTitleStyle","exportChart","trendIndex","trendLine","sourceIndex","initSeriesCollection","yAxisName","polarSeriesModule","radarSeriesModule","paretoAxes","isPanning","isAxisZoomed","series_2","initAxis","injectTo","isSeries","seriesName","initSeries","getAnchor","renderSubTitle","subTitleElementSize","subTitleOptions","addSeries","removeSeries","removeSvg","stopEvent","chartOnMouseDown","mouseMove","mouseEnd","chartOnMouseClick","chartRightClick","mouseLeave","chartResize","longPress","crosshairModule","pointerType","zooming","disableScroll","enableSelectionZooming","enablePinchZooming","msTouchAction","msContentZooming","msUserSelect","webkitUserSelect","isOrientation","setMouseXY","currentSize","previousSize","touchArg","chartOnMouseMove","chartOnMouseLeave","isChartDrag","pointClick","triggerPointEvent","pointMove","titleTooltip","axisTooltip","texts","categories","mouseDownX","previousMouseMoveX","mouseDownY","previousMouseMoveY","isDoubleTap","threshold","chartOnMouseUp","setLocaleConstants","defaultLocalConstants","setAnnotationValue","annotationIndex","processAnnotation","ZoomIn","ZoomOut","Pan","Reset","ResetZoom","enableAnnotation","errorBarVisible","dataLabelEnable","isLegend","currentModule","findIndicatorModules","findTrendLineModules","findAxisModule","enableMouseWheelZooming","datetimeEnabled","categoryEnabled","logarithmicEnabled","striplineEnabled","dateTimeCategoryEnabled","multiLevelEnabled","axisCollections_1","findStriplineVisibility","stripLines","macdEnable","bandEnable","isLine","isSpline","markerEnable","trendline","striplines","striplines_1","removeLength","pinchTarget","definitions","definitions_1","axisChange","refreshBounds","crosshairTooltip","seriesRefresh","isMultiSelect","NiceInterval","calculateDateTimeNiceInterval","totalDays","actualIntervalType","getSkeleton","getDayFormat","getMonthFormat","findCustomFormats","DateTime","datetimeInterval","getYear","getHour","endMinute","endSecond","endYear","endMonth","endDay","axisLabels","alignRangeStart","skeletonType","sDate","intervalSize","sResult","Category","Logarithmic","logEnd","calculateLogNiceInterval","axisFormat","isCustomFormat","DateTimeCategory","axisSize","sameInterval","sameValue","StripLine","measureStripLine","stripline","segmentAxis","isRepeat","getFromTovalue","startFromAxis","sizeType","isSegmented","segmentStart","segmentEnd","segRect","getToValue","findValue","isEnd","fromValue","striplineGroup","axes_1","getSegmentAxis","repeatEvery","repeatUntil","renderStripLineElement","getStartValue","renderRectangle","textMid","ty","tx","getTextStart","segmentAxisName","xy","LineBase","improveChartPerformance","tempPoints","xVisibleRange","yVisibleRange","seriesPoints","areaBounds","xTolerance","yTolerance","prevXValue","prevYValue","xVal","yVal","seriesPoints_1","currentPoint_1","getLineDirection","firstPoint","secondPoint","getPointLocation","appendLinePath","pathElement","doProgressiveAnimation","storePointLocation","doLinearAnimation","elementWidth","xCenter","yCenter","LineSeries","prevPoint","isPolar","isDrop","getCoordinate","visiblePoints","visiblePoints_1","isClosed","ColumnBase","getSideBySideInfo","enableSideBySidePlacement","getSideBySidePositions","seriesSpacing","columnSpacing","pointSpacing","getRectangle","findRectPosition","vSeries","updateSymbolLocation","updateYRegion","updateXRegion","histogramValues","binWidth","rectElements","animateRect","isPlot","ColumnSeries","sideBySideInfo","pointColumn","MultiColoredSeries","getAreaPathDirection","getAreaEmptyDirection","isXSegment","getAxisValue","sortSegments","chartSegments","access","applySegmentAxis","includeSegment","attributeOptions","createClipRect","isX","isRequired","startPointLocation","endPointLocation","AreaSeries","currentXValue","isDropMode","BarSeries","pointBar","PolarRadarPanel","drawYAxisLine","vector","minorGirdLine","xLoc","yLoc","tickXSize","tickYSize","labelText","firstLabelX","lastLabelX","textAnchor","tickOptions","gridOptions","PolarSeries","inverted","columnDrawTypeRender","itemCurrentXPos","pointStartAngle","pointEndAngle","dStartX","dStartY","dEndX","dEndY","isRangeColumn","isLogAxis","isStacking","sumofYValues","rangeInterval","getSeriesPosition","doPolarRadarAnimation","animateElement","chartcenterX","chartcenterY","RadarSeries","StackingBarSeries","stackedValue","pointStack","CandleSeries","centerRegion","tickRegion","triggerPointRenderEvent","drawCandle","getCandleColor","enableSolidCandles","bullFillColor","bearFillColor","topRect","midRect","candleElement","StackingColumnSeries","StepLineSeries","pathOptions","lineLength","StepAreaSeries","StackingAreaSeries","polarAreaType","lineDirection","stackedvalue","previousSeries","getPreviousSeries","ScatterSeries","RangeColumnSeries","rangePoint","WaterfallSeries","originValue","prevEndValue","currentEndValue","prevRegion","intermediateOrigin","isSum","isIntermediateSum","totalSum","isSumIndex","currentRegion","currentLeft","prevBottom","currentBottom","intermediateSumIndexes","sumIndexes","summaryFillColor","negativeFillColor","intermediateSum","sumIndex","HiloSeries","HiloOpenCloseSeries","highLowRect","updateTickRegion","open_1","close_1","drawHiloOpenClosePath","RangeAreaSeries","closed","highPoint","closeRangeAreaPath","BubbleSeries","segmentRadius","percentChange","maxRadius","minRadius","maximumSize","bubblePoint","SplineBase","splinePoints","filterEmptyPoints","findSplineCoefficients","getPreviousIndex","getControlPoints","getNextIndex","coefficient1","coefficient2","coefficient3","dy1","dy2","interPoint","slopeLength","ySpline","ySplineDuplicate","dx","cardinalSplineTension","splineType","ySpline1","ySpline2","ySplineDuplicate1","ySplineDuplicate2","deltaX2","SplineSeries","pt1","pt2","bpt1","bpt2","HistogramSeries","showNormalDistribution","renderNormalDistribution","calculateBinInterval","mean","sumValue","yValues_1","sDValue","binInterval","updatedData","yCount","pointLocation","distributionLine","yValuesCount","del","SplineAreaSeries","controlPt1","controlPt2","startPoint1","TechnicalAnalysis","signalLine","setSeriesProperties","indicatorElement","getDataPoint","macdPositiveColor","macdNegativeColor","getRangePoint","setSeriesRange","SmaIndicator","smaPoints","validData","signalSeries","period","EmaIndicator","emaPoints","prevAverage","TmaIndicator","tmaPoints","signalSeries_1","validData_1","smaValues","k_1","AccumulationDistributionIndicator","sourceSeries","adPoints","calculateADPoints","AtrIndicator","calculateATRPoints","highLow","highClose","lowClose","trueRange","MomentumIndicator","upperLine","upperCollection","signalCollection","upperSeries","RsiIndicator","showZones","lowerLine","lowerCollection","overBought","overSold","prevClose","gain","loss","close_2","StochasticIndicator","periodLine","lowerSeries","periodCollection","calculatePeriod","kPeriod","smaCalculation","dPeriod","pointCollection","lowValues","highValues","closeValues","modifiedSource","mins","maxs","MIN_VALUE","BollingerBands","rangeArea","bandColor","enableBand","bandCollection","rangeAreaSeries","deviationSum","multiplier","standardDeviation","deviations","bollingerPoints","sma","lowerBand","upperBand","mb","lb","MacdIndicator","macdType","macdSeries","macdLine","histogramSeries","macdLineSeries","fastPeriod","slowPeriod","macdCollection","histogramCollection","shortEMA","calculateEMAValues","longEMA","macdValues","getMACDVales","getMACDPoints","signalEMA","getSignalPoints","getHistogramPoints","initialEMA","emaValues","emaPercent","emaAvg","macdPoints","dataMACDIndex","macdIndex","signalEma","dataSignalIndex","signalIndex","shortEma","longEma","dataHistogramIndex","histogramIndex","Trendlines","trendLineSeries","legendShape","createTrendLineElements","trendLineElement","trendPoint","findSlopeIntercept","xAvg","yAvg","xyAvg","xxAvg","yyAvg","trendlineSeries","setLinearRange","setExponentialRange","setMovingAverageRange","setPolynomialRange","setPowerRange","setLogarithmicRange","splineSeriesModule","slopeIntercept","getExponentialPoints","xLogValue","yLogValue","xPointsLgr","getLogarithmicPoints","xPolyValues","yPolyValues","getPolynomialPoints","powerPoints","getPowerPoints","getLinearPoints","xAvgValues","getMovingAveragePoints","slopeInterceptLog","midPoint","x1Log","backwardForecast","y1Log","x2Log","y2Log","x3Log","forwardForecast","y3Log","slopeInterceptPower","polynomialOrder","polynomialSlopes","subIndex","numArray","newIndex","nIndex","nIndex2","nnIndex","nnIndex2","gaussJordanElimination","nullCount","slopeInterceptLinear","x1Linear","y1Linear","x2Linear","y2Linear","slopeInterceptExp","ptsExp","getPolynomialYValue","slopes","numArray1","numArray2","numArray3","num1","index4_1","num3","num4","iindex4","iandex4","iindex1","iindex2","Crosshair","mouseLeaveHandler","removeCrosshair","isIos7","disableTrackTooltip","horizontalCross","verticalCross","crossGroup","stopAnimation","valueX","valueY","axisTooltipGroup","renderCrosshairLine","renderAxisTooltip","axisGroup","textElem","getAxisText","tooltipLocation","isTop","isBottom","isLeft","isRight","labelValue","tooltipRect","boundsX","boundsY","crosshairInterval","Side","TooltipLocation","TextStyle","TooltipBorder","AreaBounds","ToolLocation","removeSVG","createTooltipElement","formattedText","isFirst","markerPoint","templateObject","fadeOuted","updateTemplateFn","markerSide","renderTooltipElement","drawMarker","markerSize","textElements","groupElement","shapes","markerGroup","marginX","tipLocation","marginY","sharedTooltipLocation","headerSize","pathElement_1","pointRect","enableAnimation","updateDiv","animateTooltipDiv","enableShadow","defElement","changeText","findFormattedText","isRender","tspanOption","subWidth","tspanStyle","headerSpace","isColumn","markerPadding","width_1","firstElement","symbolLocation","clipX","clipY","currenDiff","fadeOut","tooltipGroup_1","opacity_1","endAnimation","tooltipGroup","BaseTooltip","getTooltipElement","isTooltip","removeHighlight","highlightPoint","highlight","highlightPoints","clipLocation","extraPoints","templatePoint","accumulationTooltipModule","svgTooltip","SVGTooltip","findPalette","updatePreviousPoint","findColor","svgElement","firstText","removeText","toolTipInterval","removeTooltip","renderGroupedTooltip","renderSeriesTooltip","findHeader","parseTemplate","findShapes","findData","getSymbolLocation","findMarkerHeight","getTemplateText","findMouseValue","getBoxLocation","getWaterfallRegion","getRangeArea","formatPointValue","findSharedLocation","dataValue","getPrototypeOf","isXPoint","isYPoint","getIndicatorTooltipFormat","textX","Toolkit","selectionColor","fillColor","createPanButton","panElements","pan","createZoomButton","zoomElements","zoom","createZoomInButton","polygonDirection","zoomInElements","elementOpacity","zoomIn","createZoomOutButton","zoomOutElements","zoomOut","createResetButton","toolkitElements","touchMoveList","touchStartList","zoomInOutCalculation","applySelection","zoomFactor_1","zoomPosition_1","cumulative_1","browserName","wheelEvent","toolkit","zoomingRect","zoomAxes","zoomkitOpacity","isIOS","renderZooming","calculateZoomAxesRange","doPan","drawZoomingRectangle","translateX","translateY","enableDeferredZooming","setTransform","performZoomRedraw","doZoom","previousZF","previousZP","currentZF","currentZP","zoomRect","previousZoomFactor","previousZoomPosition","currentZoomFactor","currentZoomPosition","performMouseWheelZooming","cumulative","performPinchZooming","translateXValue","translateYValue","pinchRect","elementOffset","touchDown","touch0StartX","touch0StartY","touch0EndX","touch0EndY","touch1StartX","touch1StartY","touch1EndX","touch1EndY","calculatePinchZoomFactor","selectionMin","selectionMax","rangeMin","rangeMax","axisTrans","actualMin","actualDelta","transX","transY","isPinch","xAxisLoc","yAxisLoc","axisRange","showZoomingToolkit","outerElement","toolboxItems","shadowElement","zoomToolkitMove","zoomToolkitLeave","showToolkit","chartMouseWheel","mouseCancelHandler","BaseSelection","seriesStyles","seriesclass","styleId","selectionStyle","unselected","concatIndexes","userIndexes","localIndexes","checkVisibility","selectedIndexes","uniqueSeries","selectedIndexes_1","uniqueSeries_1","addSvgClass","elementClassName","removeSvgClass","getChildren","Selection","completeSelection","calculateSelectedElements","mousedown","initPrivateVariables","closeIconId","draggedRectGroup","draggedRect","isSeriesMode","selectDataIndex","generateStyle","indexes_1","getElementByIndex","getClusterElements","clusters","findElements","getSeriesElements","blurEffect","clusterSelection","selectedElements","removeMultiSelectEelments","getSelectionClass","removeStyles","addOrRemoveIndex","applyStyles","toEquals","chartId","checkSelectionElements","parentClassName","selectElement","checkSeriesOnly","oldMode","removeSelectedElements","legendSelection","seriesStyle","isBlurEffectNeeded","elements_3","seriesElements_1","calculateDragSelectedElements","dragRect","axisOffset","removeOffset","selectedPointValues","selectedSeriesValues","xAxisOffset_1","yAxisOffset_1","isCurrentPoint","createCloseButton","selectedDataValues","drawDraggingRect","cartesianLayout","dragGroup","removeDraggedElements","changeCursorStyle","resizingSelectionRect","tapped","resize","findResizeMode","resizing","chartSvgObject","cursorStyle","resizeMode","resizeEdges","isResize","rectelement","seriesElements_2","draggedRectMoved","grabbedPoint","doDrawing","dragging","rectGrabbing","getDragRect","DataLabel","errorHeight","commonId","calculateErrorHeight","chartBackground","positiveHeight","negativeHeight","rgbValue","contrast","yAxisInversed","labelLength","argsFont","fontBackground","isDataLabelShape","createDataLabelTemplate","calculateTextPosition","isShape","vAxis","hAxis","labelRegion","getLabelLocation","locationY","alignmentValue","calculateAlignment","calculateRectPosition","locationX","calculatePathPosition","calculatePolarRectPosition","columnRadius","labelLocation","textLength","extraSpace","calculateRectActualPosition","calculateTopAndOuterPosition","calculatePathActualPosition","labelRect","isOverLap","finalPosition","updateLabelLocation","positionIndex","intersectY","shapeElements","textNode","ErrorBar","renderErrorBar","capId","errorbar","errorBarCap","errorDirection","errorX","errorY","verticalError","horizontalError","capOption","findLocation","horizontalPositiveError","verticalPositiveError","horizontalNegativeError","verticalNegativeError","getErrorDirection","calculateFixedValue","calculatePercentageValue","calculateStandardDeviationValue","getMean","meanCalculation","calculateStandardErrorValue","calculateCustomValue","getHorizontalDirection","errorMode","capLength","capDirection","getVerticalDirection","getBothDirection","pathH","pathV","verStandardMean","horStandardMean","verSquareRoot","horSquareRoot","sumOfX","sumOfY","errorBarElements","Legend","visibleSeriesCollection","visibleSeriesCollection_1","extraHeight","extraWidth","legendEventArgs","columnHeight","prevLegend","previousBound","availwidth","LegendClick","redrawSeriesElements","refreshSeries","legendItemsId_1","AnnotationBase","setAnnotationPixelValue","accumulationBound","setAnnotationPointValue","xAnnotation","setAccumulationPointValue","annotationElement","coordinateUnits","setElementStyle","accPoint","setAlignmentValue","ChartAnnotation","BoxAndWhiskerSeries","findBoxPlotValues","boxPlotMode","updateTipRegion","renderBoxAndWhisker","tipRegion","updateTipSize","midWidth","midHeight","topWidth","showMean","quartile","getExclusiveQuartileValue","getInclusiveQuartileValue","getQuartileValues","getMinMaxOutlier","percentile","integerRank","fractionRank","isEvenList","halfLength","lowerQuartileArray","upperQuartileArray","rangeIQR","MultiColoredAreaSeries","startRegion","rendered","generatePathOption","MultiColoredLineSeries","MultiLevelLabel","xAxisPrevHeight","xAxisMultiLabelHeight","yAxisPrevHeight","yAxisMultiLabelHeight","multiLevelLabelsHeight","prevHeight","axisValue","multiLevel","categoryLabel","maximumTextWidth","pathRect","isOutside","triggerMultiLabelRender","renderXAxisLabelBorder","multiElements","createBorderElement","padding1","padding2","value1","groupLabel","renderYAxisLabelBorder","clipId","axisId","borderIndex","ScrollElements","scrollGroup","backRectGroup","thumbGroup","renderCircle","arrows","thumbGrip","scrollbarThemeStyle","backRectEle","leftArrowEle","rightArrowEle","setArrowDirection","thumbRectX","thumbRectWidth","leftDirection","circleRadius","rightDirection","shadowGroup","leftCircleEle","rightCircleEle","sidePadding","gripCircle","gripWidth","ScrollBar","scrollElements","mouseMoveListener","scrollMouseMove","mouseUpListener","scrollMouseUp","animateDuration","getMouseXY","scrollMouseDown","scrollMouseWheel","isResizeLeft","isResizeRight","previousXY","previousWidth","previousRectX","startZoomPosition","startZoomFactor","startRange","scrollStarted","getArgs","isThumbDrag","moveLength","isWithIn","positionThumb","setZoomFactorPosition","mouseXY","thumbX","currentWidth","currentScrollWidth","setCursor","resizeThumb","getDefaults","removeScrollSvg","scrollbar","isHorizontalAxis","createScrollSvg","isLeftHover","isRightHover","isAxis","isCurrentAxis","previousRange","ParetoSeries","paretoSeries","currentAxis","secondaryAxis","newAxis","columnSeriesModule","AccumulationAnnotationSettings","AccumulationDataLabelSettings","AccPoints","labelVisible","isExplode","isClubbed","isSliced","AccumulationSeries","clubbedPoints","sumOfPoints","accumulation","resultData","seriesCounts","findSumOfPoints","sumOfClub","clubValue","groupTo","setPoints","isClub","pushPoints","lastGroupTo","clubPoint_1","generateClubPoint","pointsLength_1","explode","explodeAll","explodeIndex","clubPoint","groupMode","setAccEmptyPoint","seriesGroup","renderPoints","datalabelGroup","accumulationDataLabelModule","renderDataLabel","findMaxBounds","labelBound","pieSeriesModule","accumulationLegendModule","explodeDistance","pointId","renderPoint","getSeriesElement","findAreaRect","totalbound","AccumulationBase","pieCenter","pieRadius","pieLabelRadius","labelRadius","isCircular","processExplode","explodePoints","deExplodeAll","invokeExplode","pointExplode","accumulationSelectionModule","animationDuration","deExplodeSlice","clubPointsExploded","clubPointExplode","getSum","midAngle","explodeSlice","sliceId","setTranslate","setElementTransform","isReverse","PieBase","initProperties","initAngles","connectorStyle","explodeOffset","findCenter","defaultLabelBound","accumulationRect","getSeriesBound","accumulationRectCenter","getRectFromAngle","nextQuandrant","lastQuadrant","getDoughnutPath","getPiePath","PieSeries","getPathOption","currentStartAngle","curentDegree","accBaseModule","groupId","clipslice","AccumulationChart","isIE11Pointer","accumulationMouseMove","accumulationMouseEnd","accumulationMouseStart","accumulationOnMouseClick","accumulationRightClick","accumulationMouseLeave","accumulationResize","createPieSvg","createSecondaryElement","doGrouppingProcess","processSelection","tooltipParent","getSmartLegendLocation","refreshPoints","findDatalabelVisibility","refreshElements","TriangularBase","actualChartArea","triangleSize","neckSize","neckWidth","neckHeight","initializeSizeRatio","gapRatio","coEff","spacing","yRatio","heightRatio","setLabelLocation","labelOffset","findPath","locations","FunnelSeries","getSegmentData","endTop","endBottom","endMin","bottomY","emptySpaceAtLeft","seriesTop","line3","line6","tl","tr","bl","br","PyramidSeries","pyramidMode","calculateSurfaceSegments","sumOfValues","gapHeight","preSum","getSurfaceHeight","currY","coef","surface","solveQuadraticEquation","root1","root2","sd","AccumulationLegend","titleRect","totalRowCount","getMaxColumn","maxPageColumn","maxColumnWidth","columns_1","getAvailWidth","legendX","availablewidth","legendBound","getTitleRect","legendByIndex","legendCollections_1","legendItemsId","currentSeries","sliceVisibility","sliceAnimate","AccumulationDataLabel","getDataLabelPosition","getLabelDistance","getLabelRegion","marginValue","labelAngle","enableSmartLabels","getSmartLabel","circular","findPreviousPoint","isOverlapping","isConnectorLineOverlapping","setOuterSmartLabel","setPointVisibileFalse","textTrimming","textsize","getOverlappedAngle","setSmartLabelForSegments","textRegion","overlapHeight","getEdgeOfLabel","previousstart","previousend","isLineRectangleIntersect","line1","line2","isLinesIntersect","point11","point12","lies","getConnectorPath","getConnectorStartPoint","getPolyLinePath","controlPoints","getBezierPoint","p0","labelshape","isTemplate","getTemplateSize","correctLabelRegion","setTemplateStyle","getSaturatedColor","clientRect","labelColor","doTemplateAnimation","saturatedColor","getLabelBackground","AccumulationTooltip","getPieData","AccumulationSelection","indexes_2","checkEquals","pieId","checkPointVisibility","parentClass","selectedDataIndexes_1","AccumulationAnnotation","pie","DataPoint","RangeSeries","renderChart","seriesLength","rangeSlider","processDataSource","viewData","processXAxis","calculateGroupingBounds","processYAxis","axisModule","doubleModule","chartGroup","createSeriesElement","drawSeriesBorder","labelHeight","chartElement","navigatorBorder","RangeNavigatorAxis","firstLevelLabels","secondLevelLabels","rangeNavigator","renderGridLines","chartAxis","disabledColor","gridLines","tick","findAxisLabels","lowerValues","renderAxisLabels","firstLevelElement","secondLevelElement","findLabelY","placeAxisLabels","getSecondaryLabelType","nextInterval","changedText","isFirstLevel","isSecondary","tickHeight","prevLabel","pointXGrid","maxLabels","prevX","intervalInTime","findSuitableFormat","secondaryLabelAlignment","findAlignment","prevWidth","every","nextLabel","RangeNavigatorSeries","ThumbSettings","StyleSettings","Periods","PeriodSelectorSettings","RangeTooltipSettings","RangeSlider","thumbVisible","thumpPadding","thumbColor","sliderGroup","unselectedRegionColor","leftUnSelectedElement","rightUnSelectedElement","leftSlider","rightSlider","createThump","thump","tickLength","lineColor","thumpY","sliderY","setSlider","isLeightWeight","selectedX","sliderWidth","leftX","rightX","leftRect","rightRect","currentStart","currentEnd","rangeTooltipModule","renderLeftTooltip","renderRightTooltip","getCurrentSlider","currentSlider","getRangeValue","previousMoveX","enableDeferredUpdate","hoverColor","periodSelectorModule","endbledTooltip","difference","secondLabel","rangeAxis","allowSnapping","setAllowSnapping","datePicker","isDeffered","RangeNavigator","lineSeriesModule","setSliderValue","isDateTime","createRangeSvg","renderChartBackground","periodSelectorSize","periodSelectorY","deductHeight","renderPeriodSelector","renderSlider","displayMode","renderSelectorElement","renderSelector","rangeOnMouseDown","rangeOnMouseClick","rangeResize","setMouseX","refreshRange","CLS_DISABLE","CLS_NAVARROW","CLS_NAVRIGHTARROW","CLS_NAVLEFTARROW","CLS_HSCROLLNAV","CLS_HSCROLLNAVRIGHT","CLS_OVERLAY","CLS_RIGHTOVERLAY","CLS_LEFTOVERLAY","HScroll","browser","browserCheck","ieCheck","uniqueId","touchHandler","swipeHandler","scrollEle","createOverlay","createNavIcon","scrollStep","scrollDiv","innerEle_1","scrollItems","nav","navEles","rightOverlayEle","clsRight","rightEle","navItem","leftEle","eventBinding","clsLeft","navEle","navLeftItem","onKeyPress","keyTimer","keyTimeout","eleScrolling","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","scrollDis","isContinuous","rootEle","frameScrollRequest","swipeEle","scrollUpdating","scrollVal","arrowDisabling","addDisable","removeDisable","arrowIcon","navLeftEle","navRightEle","leftOverlay","rightOverlay","disEle","CLS_ITEMS","CLS_ITEM","CLS_SEPARATOR","CLS_POPUPICON","CLS_POPUPDOWN","CLS_TBARTEXT","CLS_TBAROVERFLOW","CLS_POPOVERFLOW","CLS_TBARNAV","CLS_TBARPOS","CLS_POPUPCLASS","CLS_POPUP","CLS_TBARNAVACT","CLS_TBARIGNORE","CLS_POPPRI","CLS_MULTIROW_SEPARATOR","CLS_EXTENDABLE_SEPARATOR","CLS_EXTENDEDPOPOPEN","Toolbar","popupOpen","popupClose","tempId","trgtEle","ctrlTem","clearProperty","popObj","tbarAlign","attrb","enableCollision","scrollModule","tbarItemsCol","popupPriCount","keyModule","docKeyDown","popCheck","overflowMode","destroyHScroll","docEvent","tbarEle","tbarAlgEle","lefts","centers","rights","popEle","destroyItems","tbarItems","destroyMode","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","keyHandling","clst","navChk","scrollChk","popAnimate","eleFocus","popupCheck","popFrstEle","activeEle","activeEleRemove","tbarScrollChk","sib","skipEle","isPopupElement","popupNav","popupClickHandler","CLS_RTL","getElementOffsetY","aria-orientation","renderOverflowMode","itemPositioning","checkPopupRefresh","initHScroll","innerItems","checkOverflow","itemWidthCal","innerItem","eleWidth","itemWidth","popNav","scrollNav","refreshOverflow","priorityCheck","offsetWid","removePositioning","createPopupEle","eleInlineItem","eleItem","multiVar","extendVar","innerNav","createPopupIcon","checkPriority","removeProperty","pushingPoppedEle","tbarObj","popupPri","eleHeight","sepHeight","nodeIndex","nodePri","tbResize","tbarElement","sepItem","extendEle","popupInit","eleStyles","borderRightWidth","tbarPopupHandler","isOpen","toolEle","popupElePos","popIcon","overflowHeight","inEle","pre","popPriority","eleWid","sepCheck","itemPopCount","checkClass","rVal","mrgn","fstEleCheck","tbarEleMrgn","eleWid_1","sepEle","popedEle","tbarPriRef","sepPri","des","elWid","wid","ig","ignoreCount","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","popupEleWidth","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","tbarWidth","tbarItemsWid","elWidth","btnText","eleSplice","sepBeforePri_1","refreshPositioning","tbarWid","popWid","tbarItemAlign","itemEle","showAlwaysInPopup","alignDiv","alignEle","leftAlign_1","ctrlTemplate","itemEleDom","innerPos","renderSubComponent","setAttr","addItems","itemsDiv","itemsRerender","itemAgn","items_1","algIndex","removeItems","removeItemByIndex","eleIdx","indexAgn","templateRender","templateProp","isComponent","itemType","tempStr","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","tooltipText","tempDom","itemClick","showTextOn","sTxt","tEle","changedProb","newProperty","popupPriCheck","booleanCheck","CLS_ACRDN_ROOT","CLS_ROOT","CLS_HEADER","CLS_HEADERCTN","CLS_CONTENT","CLS_CTENT","CLS_TOOGLEICN","CLS_CTNHIDE","CLS_SLCTED","CLS_ACTIVE","CLS_TOGANIMATE","CLS_EXPANDSTATE","AccordionActionSettings","AccordionAnimationSettings","AccordionItem","Accordion","isDestroy","templateEle","eleStr","nested","isNested","expandedItems","initExpand","aria-multiselectable","expandMode","initItemExpand","innerEles","aria-level","toggleIconGenerate","tglIcon","hdrColIcon","expandItem","renderInnerItem","acrdnItem","acrdnHdr","acrdnCtn","acrdnCtnItem","acrdActive","getIndexByItem","contentRendering","ariaAttrUpdate","cntclkCheck","acrdAniEle","acrdAniEle_1","sameContentCheck","sameHeader","acrdnCtn_1","expandState","collapse","eleMoveFocus","clstItem","headerEleGenerate","ctnEle","hdrEle","fetchElement","hdr","hdrIcnEle","hdrIcon","temString","eleVal","itemcnt","ctn","trgtItemEle","isExpanded","eff","expandedItemsPush","expandProgress","expandAnimation","ef","icn","lastActiveItemId","expandedItemsPop","collapseProgress","collapseAnimation","trgtItEl","trgtHeight","itemHeight","itemAttribUpdate","itemLen","innerItemEle","expandedItemRefresh","eleHeader","isExpand","itemExpand","expandedItem","updateItem","acrdn","changedProp","FOCUSED","SEPARATOR","DOWNARROW","LEFTARROW","RIGHTARROW","HIDE","MenuItem","MenuBase","navIdx","isTapHold","ngElement","isMenu","targetElems","cmenuHandler","delegateMoverHandler","moverHandler","delegateMouseDownHandler","delegateClickHandler","closeMenu","actionName","actionNeeded","rightEnterKeyHandler","leftEscKeyHandler","cul","fliIdx","fli","getLIByClass","getIdx","cli","openMenu","sli","ulIndex","isMenuVisible","toggleAnimation","ICONS","hdata","hli","toggleVisiblity","collide","isRelative","xCollision","yCollision","boundRect","hasField","getFields","showItemOnClick","cliWrapper","isInstLI","setLISelected","showSubMenu","cliIdx","culIdx","classname","skipHdr","getChangedItemIndex","insertAfter","uls","isMenuOpen","isUniqueId","isCallBack","showItems","showHideItems","hideItems","ishide","iitems","insertItems","isAfter","menuitem","ContextMenu","Menu","tempItems","createMenuItems","pIdField","CLS_HIDDEN","CLS_ICON_CLOSE","CLS_WRAP","CLS_TB_ITEMS","CLS_TB_ITEM","CLS_TB_POPUP","CLS_PROGRESS","TabActionSettings","TabAnimationSettings","Header","TabItem","Tab","animObj","tbObj","expTemplateContent","cntEle","prevIndex","isPopup","isSwipeed","itemIndexArray","btnCls","CLS_ICONS","renderContainer","setOrientation","headerPlacement","renderHeader","bdrLine","CLS_INDICATOR","scrCnt","setContentHeight","selectedItem","tabItems","hdrItems","aria-controls","parseObject","clicked","setCloseButton","showCloseButton","hdrItem","reRenderItems","txtWrapEle","tbCount","tItems","tHtml","txtEmpty","headerTextCompile","tCont","wrapAttrs","tItem","removeActiveClass","hdrActEle","extIndex","findEle","checkPopupOverflow","tbPop","tbrItems","ripEle","tbItem","actEleId","prevEle","trg","refreshActElePosition","prevCtnAnimation","triggerPrevAnimation","oldCnt","animateObj","triggerAnimation","prevActiveEle","newCnt","getTrgContent","idNo","openEff","clsEff","setActiveBorder","keyPressed","trgParent","trgIndex","getEleIndex","templateCompile","tempEle","compileElement","templateFUN","place","heightAdjustMode","hsCnt","tbWidth","setActive","trg_1","eleTrg","itemIndex","curActItem","refreshItemVisibility","eventArg","previousItem","prevItem","previousIndex","isSwiped","setItems","isReplace","refreshActiveBorder","spaceKeyDown","tabKeyModule","removeTab","actEle","nxtSib","scrBar","scrStart","scrEnd","eleStart","eleEnd","eleViewRange","closeButtonTitle","enableTab","addTab","lastEleIndex","addedItems","itemsCount","removeArgs","removedItem","removedIndex","cntTrg","hideTab","selectingItem","selectingIndex","cntItem","isHiddenEle","tempHdrEle","COLLAPSIBLE","EXPANDABLE","LISTITEM","LISTTEXT","PARENTITEM","LOAD","PROCESS","TEXTWRAP","TREEINPUT","SIBLING","DROPNEXT","FULLROW","EXPANDED","CHECK","CHECKBOXWRAP","CHECKBOXFRAME","treeAriaAttr","treeRole","FieldsSettings","ActionSettings","NodeAnimationSettings","TreeView","preventExpand","checkedElement","mouseDownStatus","TreeView_1","checkActionNodes","dragStartAction","ctrlDown","ctrlUp","ctrlEnter","ctrlHome","ctrlEnd","ctrlA","shiftDown","shiftUp","shiftEnter","shiftHome","shiftEnd","csDown","csUp","csEnter","csHome","csEnd","beforeNodeCreate","updateListProp","treeList","isLoaded","isInitalExpand","setTouchClass","selectedNodes","checkedNodes","expandedNodes","setDataBinding","setExpandOnType","wireEditingEvents","setDragAndDrop","allowDragAndDrop","setFullRow","fullRowSelect","nodeTemplateFn","nodeTemplate","iconModel","rippleIconFn","setMultiSelect","firstUl","treeData","isNumberTypeId","getType","setRootData","finalize","rootData","parentID","getDataType","groupedData","getGroupedData","rootItems","getChildNodes","isSorted","getSortedData","finalizeNode","checkboxEle","touchClass","addCheck","frame","frameMouseHandler","createFullRow","allowMultiSelection","addActionClass","nodeData","actionValue","iNodes","sNodes","selectNode","cNodes","disableExpandAttr","eNodes","renderChildNodes","updateList","updateCheckedProp","nodes_1","ensureIndeterminate","autoCheck","ensureParentCheckState","ensureChildCheckState","checkBoxEle","parentUL","currentParent","checkBoxes","checkedState","currentLoadData","isNodeChecked","doCheckBoxAction","doCheck","liEle","checkBox","validateCheckNode","isPrevent","isAdd","currLi","getCheckEvent","removeCheck","getNodeData","firstNode","updateIdAttr","hasPid","doExpandAction","eUids","expandGivenNodes","eNode","expandAction","afterFinalized","expandCallback","eUid","doSelectionAction","sUids","sNode","selectGivenNodes","preventContextMenu","setFocusElement","checkWrapper","triggerClickEvent","collapseNode","toggleSelect","nodeCheckingEvent","nodeCheckedEvent","expandNode","proxy_1","ul_1","liEle_1","setHeight","animateHeight","expandedNode","addExpand","expandArgs","getExpandEvent","colArgs","collapsedNode","removeExpand","toRemove","currentHeight","parentLi","expandChild","eicon","childItems","mapper_1","getChildFields","loadChild","ensureCheckNode","renderSubChild","getNodeObject","nodeLevel","dataLevel","getChildMapper","isRoot","getChildGroup","objlen","dataId","cIcons","multiSelect","isActive","unselectNode","getSelectEvent","removeSelectAll","startNode","liList","currNode","addSelect","focusedNode","getFocusedNode","expandOnType","expandOn","expandHandler","expandCollapseAction","inpEle","oldText","checkNode","openNode","shiftKeySelect","navigateNode","navigateRootNode","createTextbox","navigateToFocus","isUp","focusNode","getScrollParent","parentPos","isVisibleInViewport","txtWrap","scrollHeight","isTowards","nextNode","getNextNode","getPrevNode","checkWrap","allCheckNode","newCheck","childCheck","validateCheck","childId","childId_1","toBeOpened","focusNextNode","setFocus","isBackwards","rootNode","getRootNode","getEndNode","fNode","prevNode","endNode","preNode","hoveredNode","fromDS","pNode","pid","reRenderNodes","newClass","editingHandler","oldInpEle","updateOldText","getEditEvent","wireInputEvents","editData","editFields","inputFocusOut","txtEle","appendNewText","isInput","getId","getChildNodeObject","childData","toBind","initializeDrag","destroyDrag","virtualEle","dragRoot","dragWrap","dragLi","isSameNode","cloneEle","DRAGITEM","nLen","cNode","getDragEvent","draggedNode","dragAction","removeVirtualEle","dropTarget","dropRoot","preventTargetExpand","dragParent","draggedParentNode","dropObj","over","dropAction","dropWrap","dropLi","isDescendant","virEle","renderVirtualEle","dropIndicator","dragInstance","appendNode","dropAsSiblingNode","dropAsChildNode","dropUl","dragParentUl","dragParentLi","moveData","updateElement","updateAriaLevel","updateInstance","dropParentUl","expandParent","childLi","dropParentLi","removedData","updateChildField","refId","getDataPos","updateField","currPid","removeChildNodes","addChildData","dropIcon","dragIcon","updateChildAriaLevel","sibEle","dragNode","dropData","draggedNodeData","newParent","dragLiParent","targetParent","indexValue","dropTar","clonedNode","droppedNode","droppedNodeData","dropIndex","dropLevel","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeNode","removeData","updateSelectedNodes","updateExpandedNodes","newId","currId","doGivenAction","toExpand","addGivenNodes","isRemote","dropEle","updateMapper","refNode","navigateUrl","updated","childObj","doDisableAction","doEnableAction","updatePersistProp","removeField","sleNodes","slelen","enodes","nodelen","cnodes","getMapperProp","proxy_2","touchEditObj","wireClickEvent","proxy_3","touchClickObj","wireExpandOnEvent","proxy_4","touchExpandObj","matched","setCheckedNodes","uncheckAll","checkAll","collapseAll","addNodes","dropUl_1","proxy_5","beginEdit","disableNodes","enableNodes","ensureVisible","expandAll","getAllCheckedNodes","checkNodes","getNode","getTreeData","moveNodes","sourceNodes","removeNodes","updateNode","CLOSE","OPEN","TRASITION","VISIBILITY","DISABLEANIMATION","CONTEXT","SIDEBARABSOLUTE","Sidebar","setTarget","enableDock","setDock","setMediaQuery","setType","setCloseOnDocumentClick","closeOnDocumentClick","documentclickHandler","dockSize","z-index","classELement","destroyBackDrop","sibling","showBackdrop","closeArguments","changeArguments","setAnimation","openArguments","createBackDrop","getState","mediaQuery","enableGestureHandler","setEnableGestures","enableGestures","mainContentEle","sidebarEle","margin-left","margin-right","PeriodSelector","periodSelectorDiv","selectorElement","calendarId","selctorArgs","enableCustomFormat","toolbar","changedRange","setSelectedStyle","datePickerElement","onclick","updatedStart","updatedEnd","clickedEle","RangeTooltip","fadeOutTooltip","getTooltipContent","contentWidth","getContentSize","leftTooltip","rightTooltip","dateTimeModule","SmithchartFont","SmithchartMargin","SmithchartBorder","SmithchartRect","LabelCollection","LegendSeries","LabelRegion","HorizontalLabelCollection","RadialLabelCollections","LineSegment","PointRegion","ClosestPoint","MarkerOptions","SmithchartLabelPosition","Direction","counterclockwise","clockwise","DataLabelTextOptions","LabelOption","GridArcPoints","smithchartTitleFont","smithchartSubtitleFont","dataLabelFont","LegendTitle","LegendLocation","LegendItemStyleBorder","LegendItemStyle","LegendBorder","SmithchartLegendSettings","SmithchartMajorGridLines","SmithchartMinorGridLines","SmithchartAxisLine","SmithchartAxis","Subtitle","Title","SeriesTooltipBorder","SeriesTooltip","SeriesMarkerBorder","SeriesMarkerDataLabelBorder","SeriesMarkerDataLabelConnectorLine","SeriesMarkerDataLabel","SeriesMarker","SmithchartSeries","calculateAreaBounds","rightSpace","spaceValue","getLegendSpace","elementSpacing","subtitleHeight","modelsubTitleHeight","modelTitleHeight","legendBorder","leftLegendWidth","rightLegendWidth","topLegendHeight","bottomLegendHeight","ltheight","subtitle","AxisRender","radialLabels","radialLabelCollections","horizontalLabelCollections","labelCollections","renderArea","calculateChartArea","calculateCircleMargin","calculateXAxisRange","calculateRAxisRange","measureHorizontalAxis","measureRadialAxis","horizontalAxis","updateHAxis","radialAxis","updateRAxis","drawHAxisLabels","drawRAxisLabels","updateHMajorGridLines","updateHMinorGridLines","updateHAxisLine","updateRMajorGridLines","updateRMinorGridLines","updateRAxisLine","measureHMajorGridLines","measureHMinorGridLines","measureRMajorGridLines","measureRMinorGridLines","chartAreaWidth","chartAreaHeight","maxLabelWidth","maximumLabelLength","labelMargin","actualRadius","circleCoefficient","areaRadius","circleLeftX","circleTopY","circleCenterX","circleCenterY","calculateAxisLabels","previousR","isOverlap1","isOverlap2","staticlabels","spacingBetweenGridLines","coeff","horizontalAxisLabels","circleStartX","renderType","arcCy","radialPoint1","radialPoint2","arcPoints","majorHGridArcPoints","circlePoint","calculateHMajorArcStartEndPoints","intersectingCirclePoints","rotationAngle","sweepDirection","isLargeArc","epsilon","radialPoint","innerInterSectPoint","outerInterSectPoint","outterInterSectAngle","majorRGridArcPoints","calculateMajorArcStartEndPoints","circleXYRadianValue","outterX","outterY","calValue1","calValue2","arcHPoints","calculateMinorArcStartEndPoints","marcHPoints","midRadius","radiusSquare","radiusSquare2","gx","ix1","ix2","gy","iy1","iy2","calculateGridLinesPath","haxismgoptions","raxismgoptions","circleAxis","curLabelBounds","curWidth","curX","preLabelBounds","preWidth","preX","calculateRegion","axisLabelRenderEventArgs","textPosition","curY","curHeight","preY","preHeight","interSectPoint","rAxis","circlePointPosition","setLabelsOutsidePosition","setLabelsInsidePosition","textPositionX","textPositionY","minorHGridArcPoints","haxismioptions","minorGridArcPoints","raxismioptions","pathSegment","sb","arcCx","nextAngle","betweenAngle","arcStartX","arcStartY","arcStartPoint","centerValue","minorGridLineArcIntersectCircle","calValue","px","py","mx","my","seriesindex","pointsRegion","gmEle","seriesColors","circleOptions","labelOptions","allPoints","drawDataLabel","reactance","xPos","yPos","textY","connectorFlag","labelOption","drawDatalabelSymbol","calculateSmartLabels","compareDataLabels","resetValues","dataLabel1","dataLabel2","drawConnectorLines","connectorDirection","connectorLineValues","connectorLine","labelTemplateElement","SeriesRender","lineSegments","resistance","axisRender","resistantCx","reactanceCy","chartAreaRadius","chartAreaCx","chartAreaCy","resistantCy","reactanceCx","resistantR","reactanceR","drawSeries","gdlcEle","gdEle","rectOptions","dataEle","textRenderEventArgs","element_2","animateDataLabelTemplate","gsEle","seriesEventArgs","gspEle","reveffect","smithchartPrint","svgElements","exportType","canvas","Smithchart","titleText","maxTitleWidth","titleWidthEnable","titleEventArgs","titleLocation","renderSubtitle","subTitleSize","subTitleText","maxSubTitleWidth","subtitleEventArgs","borderRect","unWireEVents","wireEVents","smithchartLegendModule","seriesrender","secondaryElement","svgClientRect","smithchartOnClick","smithchartOnResize","tooltipRenderModule","smithchartMouseMove","tooltipElement_1","fadeoutTo","circleElement","legendText","legendSeries","TooltipRender","closestPoint","closestPointXY","pointindex","chartPoint","closePoint","SmithchartLegend","_drawLegend","legendActualBounds","allowItems","legendSizeHeight","legendSizeWidth","itemPadding","legendItemWidth","legendItemHeight","svgObjectWidth","maxRowWidth","totalRowHeight","curRowWidth","curRowHeight","itemsCountRow","legendsize","_getLegendSize","itemStyle","symbolHeight","legendPosition","titleFont","smithchartTitleHeight","smithchartSubtitleHeight","svgObjectHeight","legendTitleHeight","borderSize","svgWidth","svgHeight","gLegendEle","legendItemGroup","currentY","drawLegendTitle","drawLegendItem","drawLegendBorder","legendBoundsWidth","drawLegendShape","SparklineBorder","SparklineFont","TrackLineSettings","SparklineTooltipSettings","ContainerArea","LineSettings","RangeBandSettings","AxisSettings","Padding","SparklineMarkerSettings","LabelOffset","SparklineDataLabelSettings","SparklineRenderer","sparklineData","axisCalculation","processCategory","processDateTime","spark","drawAxis","rangeBandSettings","axisSettings","endRange","rangeBand","renderLabel","stValue","edValue","stHeight","unitY","edHeight","pathOption","renderLine","renderPie","stRad","edRad","highPointColor","lowPointColor","pointsYvalues","negativePointIndexes","stDeg","edDeg","eX","eY","pathArc","getPieSpecialPoint","pointArgs","triggerPointRender","diffRadian","negativePointColor","startPointColor","startPointIndex","endPointColor","endPointIndex","highPointIndex","lowPointIndex","axisHeight","renderColumn","lowPos","highPos","pointsYPos","markerPosition","paletteLength","getSpecialPoint","renderWinLoss","tiePointColor","markerSettings","markerArgs","dataLabelSettings","edgeLabelOption","textId","rectId","formatter","labelArgs","getLabelVisible","arrangeLabelPosition","edgeLabelMode","edgeLabel","findRanges","getInterval","maxPointsLength","sumofValues","isNumericArray","x_1","lineSettings","axisColor","axisWidth","unitX","z1","Sparkline","sparklineRenderer","createSVG","renderSparkline","createDiv","containerArea","sparklineTooltipModule","removeTooltipElements","tooltipSettings","trackLineSettings","sparklineMove","sparklineMouseLeave","sparklineMouseEnd","sparklineResize","sparklineClick","setSparklineMouseXY","isPointRegion","startId","index_1","refreshSparkline","SparklineTooltip","processTooltip","removeTracker","trackerPositions","renderTrackerLine","tracker","pathEle","toDateString","tooltipEvent","index.Chart","index.LineSeries","index.ScatterSeries","index.ColumnSeries","index.SplineSeries","index.SplineAreaSeries","index.StripLine","index.AreaSeries","index.ScrollBar","index.StepLineSeries","index.StepAreaSeries","index.StackingColumnSeries","index.StackingAreaSeries","index.BarSeries","index.StackingBarSeries","index.RangeColumnSeries","index.BubbleSeries","index.Tooltip","index.Crosshair","index.Category","index.DateTime","index.Logarithmic","index.Legend","index.Zoom","index.DataLabel","index.Selection","index.ChartAnnotation","index.HiloSeries","index.HiloOpenCloseSeries","index.WaterfallSeries","index.RangeAreaSeries","index.CandleSeries","index.PolarSeries","index.RadarSeries","index.SmaIndicator","index.TmaIndicator","index.EmaIndicator","index.AccumulationDistributionIndicator","index.MacdIndicator","index.AtrIndicator","index.RsiIndicator","index.MomentumIndicator","index.StochasticIndicator","index.BollingerBands","index.BoxAndWhiskerSeries","index.HistogramSeries","index.ErrorBar","index.Trendlines","index.DateTimeCategory","index.MultiColoredLineSeries","index.MultiColoredAreaSeries","index.MultiLevelLabel","index.ParetoSeries","index.AccumulationChart","index.PieSeries","index.FunnelSeries","index.PyramidSeries","index.AccumulationTooltip","index.AccumulationLegend","index.AccumulationSelection","index.AccumulationDataLabel","index.AccumulationAnnotation","index.RangeNavigator","index.RangeTooltip","index.PeriodSelector","index.Sparkline","index.SparklineTooltip","index.Smithchart","index.SmithchartLegend","index.TooltipRender","tickLineColor","pointerColor","Line","Range","Tick","Cap","NeedleTail","Annotation","Pointer","Annotations","autoAngle","updateLocation","currentRadius","GaugeTooltip","tooltipId","borderStyle","currentPointer","tooltipFormat","tooltipArgs","arrowInverted","addLeft","addTop","addHeight","addWidth","AxisRenderer","drawAxisOuterLine","setRangeColor","drawAxisLabels","nearSize","farSize","hiddenLabel","findAnchor","useRangeColor","drawMinorTickLines","minorTickElements","minorLineStyle","minorTicks","minorInterval","isRangeColor","majorValues","calculateTicks","drawMajorTickLines","majorTickElements","majorLineStyle","majorTicks","axisLineWidth","drawAxisRange","roundedStartAngle","roundedEndAngle","rangeElement","rangeIndex","calculateRangeRadius","roundedCornerRadius","rangeColors","PointerRenderer","drawPointers","calculatePointerRadius","setPointerValue","doPointerAnimation","drawNeedlePointer","pointerRadius","rectDirection","pointerWidth","needleTail","cap","drawMarkerPointer","drawRangeBarPointer","animatePointer","performRangeBarAnimation","performNeedleAnimation","sweepAngle","pointAngle","minAngle","AxisLayoutPanel","axisRenderer","pointerRenderer","measureAxisSize","calculateAxesRadius","totalRadius","rangeMaximumRadius","calculateNumericInterval","calculateAxisValues","isMajorTickOutside","isMinorTickOutside","isLabelOutside","majorTickOffset","minorTickOffset","axesElements","annotationsModule","CircularGauge","themeEffect","setThemeColors","labelcolor","others","gaugeOnMouseDown","gaugeRightClick","gaugeResize","setGaugeStyle","getMouseArgs","dragArgs","enablePointerDrag","activePointer","activeAxis","pointerDrag","gaugeAxisLayoutPanel","calculateSvgSize","isElementExist","annotationEnable","refreshWithoutAnimation","index.CircularGauge","index.GaugeTooltip","index.Annotations","getLengthFromListOfPoints","adjustPoint","isStart","rect1","rect2","unitePoint","intersects","SnapConstraints","Transform","RenderMode","KeyModifiers","Keys","RealAction","DiagramEvent","isDirt","Self","Parent","isSvgRender","staticSize","isRectElement","unitMode","float","floatingBounds","setOffsetWithRespectToBounds","getAbsolutePosition","validateDesiredSize","updateBounds","getGradientType","LinearGradient","RadialGradient","Stop","Gradient","ShapeStyle","desiredBounds","measureChildren","prevRotateAngle","childBounds","desired","force","GetChildrenBounds","offsetPt","newPoint","stretchChildren","applyPadding","findChildOffsetFromCenter","childSize","absolutePath","pointTimer","translatedPts","translatePoints","nativeSVG","measureNativeContent","contentSize","templatePosition","getAvailableSize","measureNativeSvg","textNodes","textWrapBounds","imageSource","stretch","measureImage","Canvas","childX","childY","alignChildBasedOnParent","alignChildBasedOnaPoint","parentSize","Ellipse","Hexagon","Parallelogram","Triangle","Plus","Star","Pentagon","Heptagon","Octagon","Trapezoid","Decagon","RightTriangle","Cylinder","Diamond","Port","Connect","Hyperlink","InheritReadOnly","Circle","OpenArrow","Fletch","OpenFetch","IndentedArrow","OutdentedArrow","DoubleArrow","Arrow","Process","Decision","Document","PreDefinedProcess","Terminator","PaperTap","DirectData","SequentialData","Sort","MultiDocument","Collate","SummingJunction","Or","InternalStorage","Extract","ManualOperation","Merge","OffPageReference","SequentialAccessStorage","Annotation2","Card","Delay","Preparation","Display","ManualInput","LoopLimit","StoredData","IconShape","DiagramTooltip","NodeBase","getConnectorType","BpmnFlow","ConnectorShape","getSegmentType","Decorator","Vector","ConnectorSegment","bridges","bpmnElement","getSegmentElement","getConnectorPoints","flow","getBpmnSequenceFlow","getBpmnAssociationFlow","getBpmnMessageFlow","updateShapePosition","anglePoints","getDecoratorElement","wrapperContent","getAnnotationElement","pathseqData","pathseq","segmentMessage","sourcePt","targetPt","beginningpoint","transferpoint","startpoint1","endpoint1","textele","updateAnnotation","pivotPoint","segmentAngle","horizor","verzor","displacement","newPoints","clipDecorator","isSource","segmentPath","getSegmentPath","connectorSegment","segmentElement","adjacentPoint","decEle","bridgePath","bridge","segmentPointIndex","getPath","getPt","st","targetID","targetPortID","j_3","connWidth","connHeight","Default","UserHandle","All","getShapeType","BasicShape","FlowShape","Path","BpmnShape","Native","Html","Shape","BpmnGateway","BpmnDataObject","BpmnTask","BpmnEvent","BpmnSubEvent","BpmnTransactionSubProcess","BpmnSubProcess","BpmnActivity","BpmnAnnotation","processId","outEdges","inEdges","nodeDefault","basicshape","basicshapedata","flowshape","bpmnModule","initBPMNContent","subProcess","activity","processes","children_1","collapsed","updateElementVisibility","initPorts","accessibilityContent","initPortWrapper","contentAccessibility","getIconOffet","initIcons","expandIcon","collapseIcon","initIconSymbol","initAnnotations","initAnnotationWrapper","portContent","pathdata","annotationcontent","initIconContainer","iconContent","iconContentBounds","updateRulerGeometry","renderRulerSpace","getRulerSVG","unitLength","unitOffset","updateSegments","run","rulerSegment","getNewSegment","updateSegment","segWidth","updateSegmentWidth","defStartValue","updateTickLabel","isRightOrBottom","tickAlignment","createNewTicks","createTickLabel","tickInterval","getLinePoint","linePoint","multiples","createMarkerLine","rulerSvg","drawRulerMarker","rulerSvgElements","markerColor","rulerSpace","getObjectType","renderGradient","grd","stops","radial","renderShadow","rotateContext","parseDashArray","setFontStyle","dashes","splittedDashes_1","segs","quadraticCurveTo","xAxisRotation","cp","currp","cpp","centp","ad","ra","sx","sy","labelAlign","startPointX","startPointY","endPointX","endPointY","parentSvg","fromPalette","alignOptions","srcWidth","srcHeight","destinationW","destinationH","resultWidth","xalign","yalign","getSliceOffset","sWidth","sHeight","dWidth","dHeight","canvas1","srcRatio","destRatio","getMeetOffset","labelX","labelY","pointx","pointy","tX","tY","svgContainer","onlyRect","ariaLabel","setSvgStyle","updateSelectionRegion","gElement","createGElement","enableSelector","classval","setSvgFontStyle","svgLabelAlign","text-decoration","imgAlign","aspectRatio","drawHTMLContent","drawNativeContent","setNativTransform","contentHeight","clipWidth","clipHeight","offset_1","stopElement","lineargradient","radialgradient","wrapBound","DiagramRenderer","svgRender","isSvgMode","setLayers","iconSvgLayer","adornerSvgLayer","nativeSvgLayer","diagramSvgLayer","getParentSvg","getParentElement","defaultParent","layerGElement","getGroupElement","nativeSvg","renderElement","createParent","renderImageElement","renderPathElement","renderNativeElement","renderHTMLElement","renderRect","drawSelectionRectangle","adornerLayer","renderHighlighter","renderResizeHandle","canMask","enableNode","renderPivotLine","renderRotateThumb","nodeWidth","nodeHeight","renderCircularHandle","renderEndPointHandle","connectedSource","connectedTarget","isSegmentEditing","ConnectorSource","ConnectorTarget","renderOrthogonalThumbs","segment_1","bezierPoint","renderBezierLine","renderOrthogonalThumb","getBaseAttributes","connected","renderUserHandler","pathSize","pathColor","renderSvgGridlines","gridSvg","ShowHorizontalLines","ShowVerticalLines","hWidth","hHeight","hSegmentwidth","vSegmentwidth","isRulerGrid","dynamicGrid","horizontalGridlines","scaledIntervals","verticalGridlines","lineIntervals","scaleSnapInterval","patternUnits","horizontalSvgGridlines","verticalSvgGridlines","hLine","intervals","lineDashArray","updateLineIntervals","vLine","updateGrid","svgGrid","newInterval","snapIntervals","gridlines","nativeLayer","sourceWidth","sourceHeight","widthRatio","ratio","svgParent","hasNativeParent","svgNativeParent","svgParent_1","parentG","drawRect","renderSvgBackGroundImage","bgimageLayer","getBackgroundImageLayer","transformLayers","svgMode","getGridLayer","diagramElementsLayer","Background","PageSettings","ScrollSettings","ServiceLocator","services","register","Gridlines","SnapSettings","DiagramRuler","RulerSettings","DataSource","Layout","PortDraw","ConnectorSourceEnd","ConnectorTargetEnd","BezierSourceThumb","BezierTargetThumb","OrthoThumb","SegmentEnd","PortDrag","LabelSelect","LabelDrag","LabelRotate","LabelResizeWest","LabelResizeEast","LabelResizeSouth","LabelResizeNorth","LabelResizeNorthEast","LabelResizeNorthWest","LabelResizeSouthEast","LabelResizeSouthWest","ToolBase","protectChange","commandHandler","inAction","isProtectChange","blocked","isTooltipVisible","childTable","undoElement","undoParentElement","startAction","mouseDown","prevPosition","startTransaction","mouseUp","endTransaction","endAction","initialBounds","horizontalsnap","snapped","verticalsnap","difx","dify","snapEnabled","snappingModule","canSnap","snapLine","getLayer","deltaWidth","deltaHeight","snapLeft","snapRight","snapTop","snapBottom","getPivot","SelectTool","doRubberBandSelection","arrayNodes","getSelectedObject","clickCount","unSelect","selectObjects","clearSelection","labelSelect","ConnectTool","ConnectorDrawingTool","segmentpoint1","segmentpoint2","selectedSegment","updateSelector","removeSnap","changeAnnotationDrag","entry","redoObject","undoObject","addHistoryEntry","oldValues","targetPortName","targetNodeNode","sourcePointChange","targetPointChange","removeTerminalSegment","snapConnectorEnd","targetPortId","targetNodeId","dragConnectorEnds","canDisconnect","disConnect","connect","canEnableDefaultTooltip","MoveTool","objType","objectType","selectedObject","getSubProcess","initialOffset","historyAdded","allowDrop","startGroupAction","entry_1","snapPoint","removeHighlighter","isDroppable","dropAnnotation","endGroupAction","changeObjectId","dragOverElement","oldValues_1","snappedPoint","removeChildFromBPmn","arg_1","dragSelectedObjects","drawHighlighter","portDrag","RotateTool","getAllDescendants","cloneChild","rotateChange","arg_2","snapAngle","rotateSelectedItems","ResizeTool","deltaValues","scaleObjects","sizeChange","entry_2","getChanges","AspectRatio","scaleSelectedItems","NodeDrawingTool","checkBoundaryConstraints","drawObject","updateNodeDimension","addObjectToDiagram","TextDrawingTool","drawingNode","addText","ZoomPanTool","moveTouches","startTouch0","startTouch1","moveTouch0","moveTouch1","focusPoint","updateTouch","difY","touch1","touch2","startTouch","moveTouch","ExpandTool","LabelTool","PolygonDrawingTool","dblClickArgs","PolyLineDrawingTool","updateConnectorPoints","LabelDragTool","labelDrag","redoValue","entryValue","LabelResizeTool","resizeObject","labelResize","LabelRotateTool","redoEntry","entryObject","ConnectorEditing","segmentIndex","dragOrthogonalSegment","dragControlPoint","addOrRemoveSegment","updateLastSegment","removePrevSegment","removeNextSegment","updateEndPoint","updateSeg","findIndex","newseg","intersectingSegs","addSegments","insertFirstSegment","addTerminalSegment","updateAdjacentSegments","segmentDirection","segValues","insertseg","nextseg","isNextUpdate","updatePreviousSegment","nextSegment","updateNextSegment","sec","lastseg","updatePortSegment","isSourceNode","updateFirstSegment","changeSegmentDirection","insertfirst","removeCurrentPrev","nextNext","line1Start","line1End","line2Start","line2End","firstSegPoint","lastSegPoint","DiagramEventHandler","currentAction","isBlocked","isMouseDown","doingAutoScroll","objectFinder","ObjectFinder","diagramCanvas","TextEdit","boundingRect","windowResize","updateViewPortSize","setViewPortSize","getSizeValue","canHideResizers","updateCursor","isForeignObject","isTextBox","foreignobject","isMetaKey","isDeleteKey","isMouseOnScrollBar","isScrolling","checkEditBoxAsTarget","updatePortVisibility","hoverElement","getMouseEventArgs","textEditing","endEdit","findObjectsUnderMouse","findObjectUnderMouse","sourceElement","findElementUnderMouse","findActionToBeDone","getTool","initialEventArgs","mouseMoveExtend","canAutoScroll","checkAutoScroll","isNode","hoverNode","checkAction","drawRulerMarkers","elementLeave","elementEnter","mouseEvents","autoScrollPosition","startAutoScroll","timeOutValue","diagram_1","doAutoScroll","isMultipleSelect","markers","removeRulerMarkers","isTriggerEvent","startTextEdit","keycode","gesture","keyModifiers","altKeyPressed","shiftKeyPressed","ctrlKeyPressed","keyDownEventArgs","KeyboardEvent","parameter","movingPosition","autoScrollBorder","autoScroll","targets","lastObjectUnderMouse","mouseEnter","elementOver","isPrivateTooltip","canEnableToolTip","keyModifier","Alt","Control","Shift","scrolled","updateScrollOffset","doubleClick","getObjectLayer","lock","inputChange","fontsize","textWrapper","textBounds","transforms","editTextBox","editTextBoxDiv","activeLabel","isAddTextNode","textAnnotationConnectors","findTargetObjectUnderMouse","resetTool","findElementUnderSelectedItem","findTargetUnderMouse","actions","actualTarget","layerTarger","layerObjTable","objArray_1","spatialSearch","findObjects","pointInBounds","actualTarget_1","portElement","findTargetElement","Layer","objectZIndex","zIndexTable","CommandHandler","connectorsTable","processTable","parentTable","layoutAnimateModule","backup","pointerEvents","toolName","ToolTip","connectionChange","dragOverArg","dragOver","connectorEnd","connectorPropertyChange","updateDiagramObject","nodeEndId","portEndId","connectionEventChange","argsTarget","connection","transaction","failure","portEnd","getAnnotation","annotationNode","annotationObj","checkAndRemoveAnnotations","refreshCanvasLayers","addTextAnnotation","oldNodeId","oldPortId","cut","pasteIndex","undoRedoModule","historyList","clipObject","copyObjects","refreshDiagramLayer","layerZIndexTable","activeLayer","objectName","removeLayer","layerId","layerObject","moveObjects","targetLayer","setActiveLayer","targerNodes","objects_1","cloneLayer","cloneObject_1","newlayer","copyProcesses","tempNode","selectedItems_1","sortByZIndex","processes_1","protectedChange","Group","unGroup","UndoRedo","removePorts","removeLabels","deleteChild","addChild","copiedItems","getNewObject","groupAction","objectTable","keyTable","copiedItems_1","clonedObj","cloneConnector","newNode","edges","edges_1","newConnector","edges_2","newobjs","translateObject","checkAnnotation","cloneGroup","cloneSubProcesses","currentAnnotation","innerChild","addProcess","connector_1","connectorTable","newChildren","initObject","removeFromAQuad","removeObjectsFromLayer","multipleSelection","cause","selectionChange","canDoMultipleSelection","canMultiSelect","canDoSingleSelection","findParent","selectGroup","selectProcesses","selectBpmnSubProcesses","hasProcesses","preventUpdate","hasLayer","selectorModel","objArray","selectormodel","getChildElements","moveSvgNode","diagramDiv","backNode","sendLayerBackward","currentLayerObject","targetObject","currentLayerObject_1","bringLayerForward","currentLayerObject_2","sendToBack","objectId","layerNum","updateNativeNodeIndex","bringToFront","tabelLength","diagramLayer","lastChildNode","diagramRenderer","nodeArray","sortID","sendForward","intersectArray","overlapObject","currentObject","sendBackward","temp_3","initSelectorWrapper","clearSelectionRectangle","selArray","rubberArray","getNodesConnectors","rubberBandSelectionMode","checkBezierThumb","dragSourceEnd","dragTargetEnd","triggerAction","clearSelectorLayer","updateInnerParentProperties","nodePropertyChange","hasEnds","connectorSegmentChange","existingInnerBounds","isRotate","segmentChange","secondSegment","isDragSource","changeSegmentLength","translateBezierPoints","secPoint","nextDirection","changeSourceEndToNode","changeSourceEndToPort","segValues1","isTerminal","changeTerminal","sourcePoint2","boundaryConstraints","segmentNumber","rotateObjects","includeParent","objects_2","getChildrenBound","updateSubProcessess","rotatePoints","SnapToLines","innerParents","refWrapper","scaleObject","updateGroupOffset","innerParent","parentNodes","oldleft","oldtop","changedvalues","getPortChanges","getAnnotationChanges","updatePathAnnotationOffset","intersectingOffset","pointLength","intersetingPts","getInterceptWithSegment","updateLabelMargin","tempPt","conPoints","tarAngle","srcAngle","intercepts","imgLine","segemnt","angleAdd","labelWrapper","newMat","offsetx","offsety","nodeBounds","selectorBounds","top_2","fixedNode","organizationalChartModule","isAnimation","preventNodesUpdate","preventConnectorsUpdate","newTarget","oldTarget","nodeCollection","removeChildFromBPMN","targetNodes","connectHighlighter","tgt","tgtWrap","towardsLeft","towardsTop","SnapToObject","removeGuidelines","dropBPMNchild","undoObj","redoObj","objectBounds","storeObject","distribute","top_3","btt","undoSelectorObj","redoSelectorObj","sameSize","selectorObject","panx","PanX","canPanX","pany","PanY","canPanY","clearHighlighter","DiagramScroller","oldCollectionObjects","removeCollection","vPortWidth","vPortHeight","currentZoomFActor","hScrollSize","vScrollSize","realActions","hScrollbarMoved","vScrollbarMoved","updateScrollOffsets","getPageBounds","setScrollOffset","viewWidth","viewHeight","actualRight","currentRight","actualBottom","getObjects","coll1","coll2","virtualizeElements","oObjects","oObjectsID","newObjects","removeObjects","updateVirtualObjects","scrollerWidth","oldWidth","diagramWidth","oldHeight","diagramHeight","negwidth","negheight","multiplePage","getPageBreak","widthCount","heightCount","deltaX","deltaY","canZoom","canPan","minZoom","maxZoom","targetMatrix","applyScrollLimit","fitToPage","canZoomIn","customBounds","bringIntoView","hoffset","voffset","bringToCenter","actualbounds","scrollLimit","scrollableArea","allowedRight","allowed","allowedBottom","Quad","spatialSearching","findQuads","currentViewPort","quads","third","fourth","selectQuad","quadSet","getQuad","halfWidth","halfHeight","childRight","childBottom","newQuad","childTop","childLeft","isContained","addIntoAQuad","quadAddition","setCurrentNode","quad","isAdded","parentQuad","isempty","newWidth","SpatialSearch","quadSize","pageLeft","pageRight","pageTop","pageBottom","quadTable","updateQuad","nodBounds","isWithinPageBounds","leftElement","rightElement","findLeft","findTop","findBottom","findRight","quads_1","originX","originY","KeyGesture","Command","CommandManager","ContextMenuSettings","groupTable","isGroup","selectionConnectorsList","deleteVirtualObject","renderTimer","clearCollection","isConnector","clearObjects","objectArray","refreshLayout","refereshColelction","eventHandler","updateView","excludeFromLayout","updateBridging","intOffPageBackground","validatePageSize","updatePage","updateSnapSettings","initCommands","initObjects","updateRulerSettings","updateLayer","updateScrollSettings","PreventDataInit","propertyChange","canLogChange","modelChanged","resetDiagramActions","renderRulers","initializePrivateVariables","initializeServices","initDiagram","initViews","defaultLocale","Copy","Cut","Paste","Undo","Redo","SelectAll","Grouping","UnGroup","Order","BringToFront","MoveForward","SendToBack","SendBackward","layerZIndex","initHistory","initLayers","initializeDiagramLayers","renderPageBreaks","Render","droppable","tooltipelement","initDroppables","getObjectsOfLayer","updateViewPort","cutCommand","removeProcess","pasteCommand","copyCommand","moveForward","getActiveLayer","nudgeCommand","nudge","updateAnnotationDrag","updateConnectorProperties","refreshCanvasDiagramLayer","getCustomTool","getCustomCursor","historyChangeTrigger","changeType","historyChange","undo","redo","PublicMethod","focusedPoint","zoomTo","updateEventValue","collectionChange","updateEdges","getTextAnnotationConn","initConnectors","updateDocks","updateSvgNodes","updateProcesses","processes_2","addAnnotation","spliceConnectorEdges","removeDependentConnector","objIndex","removeElements","currentObj","removeElement_1","removeCommand","Delete","canDelete","deleteGroup","removeBpmnProcesses","updateNodeEdges","startEditCommad","bpmnAnnotation","getTextAnnotationWrapper","addLabels","ReadOnly","enableReadOnly","textArea","focusOutEdit","updateNodeExpand","propChange","viewPort","updateLayout","mindMapChartModule","radialTreeModule","symmetricalLayoutModule","maxIteration","springLength","springFactor","complexHierarchicalTreeModule","updateIcon","updateDefaultLayoutIcons","saveDiagram","loadDiagram","exportDiagram","printandExportModule","addPorts","addConstraints","constraintsType","constraintsValue","removeConstraints","removelabelExtension","removePortsExtenion","real","overlap","renderOverlapElement","renderBackgroundLayer","commonStyle","bgLayer","renderGridLayer","svgGridSvg","renderDiagramLayer","diagramLayerDiv","diagramSvg","transformationLayer","scrollerSize","outer","widthNoScroll","widthWithScroll","getScrollerWidth","renderHTMLLayer","renderPortsExpandLayer","renderNativeLayer","renderAdornerLayer","svgAdornerSvg","svgSelector","svgPortsSvg","svgPortsLayer","svgExpandLayer","htmlLayerDiv","nativeLayerSvg","isLoad","initData","initLayerObjects","hasLayers","tempTabel","bpmnTable","addToLayer","initNodes","_h","_j","_k","_l","_m","groups_1","_o","connectors_1","layerObject_1","hPan","vPan","VerticalOffset","HorizontalOffset","ViewportHeight","ViewportWidth","CurrentZoom","scrollChange","dataBindingModule","initSource","independentObj","currentLayer","defaults","initNode","getEndNodeWrapper","isWidth","PreventDrag","updateDefaultLayoutIcon","isUpdateSize","node1","PreventScale","portContainer","newCommands","V","nudgeUp","Up","nudgeRight","nudgeDown","Down","nudgeLeft","startEdit","F2","endEditCommand","Escape","focusToNextItem","focusToPreviousItem","selectFocusedItem","Enter","initCommandManager","overrideCommands","newCommand","updateIconVisibility","updateDiagramContainerVisibility","refreshDiagram","objectArray_1","refreshSvgDiagramLayer","renderBasicElement","clearCanvas","renderDiagramElements","inverse","removeVirtualObjects","clearIntervalVal","tCollection","removeObjectInterval","fromExport","transformValue","horizonatlValue","verticalValue","bridgingModule","clearRect","getPortLayerSvg","adornerSVG","gridLayer","removePageBreaks","backgroundLayer","showPageBreaks","setOverview","overview","renderDocument","renderNodes","updateThumbConstraints","hideRotate","hideResize","thumbConstraints","renderSelectorForAnnotation","adornerSvg","highlighter","selectionRect","getPortContainer","containsMargin","isBpmnTextAnnotation","textEdit","updateTextAnnotationContent","deleteNode","isAction","tempNode_1","updateObject","oldNode","oldConnector","actualSourcePoint","actualTargetPoint","nodePropertyChangeExtend","isLayout","existingBounds","updateMargin","updateBPMN","actualPort","updatePort","checkSelectedItem","updateTextAnnotationProp","updateConnectorEdges","updateGroupSize","connectorProprtyChangeExtend","updateBPMNConnector","disableBridging","oldSource","annotationWrapper","updateAnnotations","updateNodeProperty","selItems","canUpdateSize","isMeasure","portWrapper","iconRect","iconShape","entryTable","selectedSymbol","paletteId","selectedSymbols","dragEnter","findChild","addChildNodes","dragLeave","PrintAndExport","fileType","buffers","getDiagramBounds","setCanvas","diagramAsSvg","pom","initMouseEvent","images","setScaleValueforCanvas","diagramAsCanvas","pageWidth","getMultipleImage","exportImage","image1","byteString","atob","intArray","htmlElement_1","urlLink","mouseEvent_1","getObjectsBound","nodebounds","diagramLayerSVG","bgColor","bgImg","proportionX","proportionY","exportable","isImageExportable","proportion","brColor","brWidth","strokeRect","getPrintCanvasStyle","isExport","imageArray","mLeft","mTop","mRight","mBottom","drawnX","drawnY","imgHeight","imgWidth","printImage","pageWidth_1","pageHeight_1","pageSize_1","printWind","StackPanel","updateHorizontalStack","updateVerticalStack","measureStackPanel","arrangeHorizontalStack","arrangeVerticalStack","arrangeStackPanel","applyChildMargin","rotatedSize","parenBounds","DataBinding","dataTable","applyDataSource","nextLevel","rootNodes","updateMultipleRootNodes","applyNodeTemplate","nodeModel","rtNodes","canBreak","containsConnector","applyConnectorTemplate","tNode","connModel","menuClass","grouping","DiagramContextMenu","service","defaultItems","disableItems","hiddenItems","setLocaleKey","contextMenu","getMenuItems","contextMenuItemClick","contextMenuBeforeOpen","contextMenuOpen","onClose","contextMenuOnClose","menuItems","orderItems","groupItems","showCustomMenuOnly","getDefaultItems","buildDefaultItems","orderGroup","customItem","getKeyFromId","updateItemStatus","getLocaleText","ensureItems","ensureTarget","diagramArgs","newItem","contextItems_1","selectedLength","canUndo","canRedo","generateID","menuItem","bringToFrontOrder","moveForwardOrder","sendToBackOrder","sendBackwardOrder","BpmnDiagrams","annotationObjects","getBPMNEventShape","getBPMNGatewayShape","getBPMNDataObjectShape","getBPMNShapes","getBPMNActivityShape","renderBPMNTextAnnotation","getBPMNTextAnnotation","bpmnShape","bpmnShapeData","gatewayshape","gatewayNode","gatewayTypeNode","gatewayTypeNodeShapeData","gateway","setSizeForBPMNGateway","dataObjectshape","dataObject","dataobjNode","dataobjTypeNode","dataobjCollectionNode","getBPMNTaskShape","task","taskShapes","taskNode","childCount","getTaskChildCount","childSpace","taskTypeNodeData","taskTypeNode","childNode2data","loopType","loop","taskLoopNode","taskCompNode","getBPMNCompensationShape","compensation","subEvent","sub","eventshape","shapeEvent","shapeActivity","innerEvtNode","outerEvtNode","triggerNode","triggerNodeData","setSizeForBPMNEvents","setEventVisibility","setSubProcessVisibility","eventLength","elementWrapper","adhoc","getBPMNSubProcessShape","subProcessShapes","subprocessAdhoc","subProcessLoopShapes","subChildCount","getSubprocessChildCount","subprocessNode","getBPMNSubProcessTransaction","collapsedShape","getBPMNSubEvent","getBPMNSubProcessLoopShape","subChildSpace","boundary","getBPMNAdhocShape","subprocessComp","eventContainer","getBPMNSubprocessEvent","innerRect","transactionEvents","subprocessLoopData","subprocessLoop","redoElement","sources","processTable_1","processIndex","excludeChild","compensationNode","subProcessEventsShapes","adhocNode","annotationContainer","annotationPath","setAnnotationPath","annotationConnector","annotationsContainer","textObject","annotationObject","bpmnShapeContent","clearAnnotations","removeAnnotationObjects","nodeContent","parentBounds","getAnnotationPathAngle","parentNodeId","newShape","actualShape","sizeChanged","updateBPMNGateway","updateBPMNDataObject","updateBPMNActivity","updateBPMNEvent","bpmnshapeGatewaydata","elementWrapperChild1","elementWrapperChild2","setSizeForBPMNDataObjects","child0","child1","child2","updateEventVisibility","elementWrapperChild0","updateBPMNEventTrigger","bpmnshapeTriggerdata","actualObjectProp","updateBPMNActivityTask","updateBPMNActivityTaskLoop","updateBPMNActivitySubProcess","setSizeForBPMNActivity","bpmnshapeTaskdata","bpmnshapeLoopdata","updateChildMargin","updateBPMNSubProcessEvent","updateBPMNSubProcessAdhoc","updateBPMNSubProcessBoundary","updateBPMNSubProcessCollapsed","updateBPMNSubProcessCompensation","updateBPMNSubProcessLoop","updateBPMNSubProcessTransaction","eventIndex","eventWrapper","actualEvent","updateBPMNSubEvent","newEvent","getEventSize","wrapperChild","currentNode","flowType","sequence","getSequence","association","getAssociation","getMessage","offLength","eventNode","SubProcess","Timer","Escalation","Compensation","Conditional","Link","Signal","Terminate","Multiple","Parallel","Exclusive","Inclusive","EventBased","ExclusiveEventBased","ParallelEventBased","Service","Receive","Send","InstantiatingReceive","Manual","BusinessRule","User","Script","Standard","ParallelMultiInstance","SequenceMultiInstance","ConnectorBridging","lastBridge","Bridging","InheritBridging","canBridge","points1","bridgeSpacing","bridgeSpace","bgedir","connector1","points2","intersectsRect","intersectPts","getLengthAtFractionPoint","lengthFractionIndex","fullLength","stBridge","enBridge","angleCalculation","fix","lengthCalculation","var1","insertAt","arcSeg","createSegment","bridgeStartPoint","arcs","bgseg","stPoints","firstBridge","bridgeList","subBridge","createBridgeSegment","startPt","endPt","angle1","self","zOrder","inter1","intersect2","checkForHorizontalLine","roundedAngle","start1","end1","start2","end2","getLineSegment","pointAt","lengthAtFractionPt","previouspt2","suspect","getSlope","delX","delY","lhs","rhs","xDiff","yDiff","Snapping","horizontallysnapped","verticallysnapped","snapObject","roundedRight","roundedLeft","roundedTop","roundedBottom","currentright","currentbottom","SnapToVerticalLines","SnapToHorizontalLines","cutoff","bal","horizontalSnap","verticalSnap","ended","lengthY","hTarget","vTarget","lengthX","objectsAtLeft","objectsAtRight","objectsAtTop","objectsAtBottom","snapObjDistance","snapObjectDistance","hIntersectRect","vIntersectRect","targetBounds","findNodes","canBeTarget","canConsider","createSnapObject","createGuidelines","createHSpacingLines","createVSpacingLines","snapSize","sameWidth","sameHeight","hintersectedrect","vintersectedrect","nodesInView","targetBounds_1","targetBounds_2","actualDiff","addSameWidthLines","addSameHeightLines","initialBoundsT","actualTop","initialBound","initialBoundsB","actualLeft","initialRect","renderAlignmentLines","sortByDistance","nearestleft","nearestright","equaldistance","equallySpaced","findEquallySpacedNodesAtLeft","adjustablevalue","findEquallySpacedNodesAtRight","addHSpacingLines","deltaHorizontal","nearesttop","nearestbottom","findEquallySpacedNodesAtTop","findEquallySpacedNodesAtBottom","addVSpacingLines","deltaVertical","crnt","renderSpacingLines","equallySpacedObjects","sameWidths","sameSizes","sameHeights","snap","nd","ascending","equalDistance","prevBounds","actualDistance","groupUndo","currentEntry","canLog","undoStack","redoStack","getHistoryList","getUndoEntry","endGroupActionCount","undoEntry","undoGroupAction","currEntry","getHistroyObject","addObject","recordPositionChanged","recordSizeChanged","recordRotationChanged","recordConnectionChanged","recordPropertyChanged","isUndo","recordCollectionChanged","recordLabelCollectionChanged","recordPortCollectionChanged","recordSegmentChanged","recordPortChanged","recordAnnotationChanged","historyEntry","ignoreProperty","isRedo","oldElement","undoChanges","segmentChanged","positionChanged","connectionChanged","scaleWidth","scaleHeight","selectorObj","rotationChanged","getRedoEntry","startGroupActionCount","redoGroupAction","hList","entryCurrent","LayoutAnimation","setIntervalObject","layoutAnimation","setIntervalObjects_1","updateOpacity","layoutTimer","differenceX","differenceY","HierarchicalTree","layoutProp","viewport","anchorX","anchorY","firstLevelNodes","centerNode","maxLevel","graphNodes","horizontalSpacing","verticalSpacing","setUpLayoutInfo","tree","hasSubTree","updateTree","rootInfo","updateAnchor","updateNodes","updateConnectors","dontupdate","dimensions","lev","getDimensions","assistants","treeBounds","levelBounds","asstBounds","setDepthSpaceForAssitants","updateHorizontalTreeWithMultipleRows","updateVerticalTree","updateHorizontalTree","setBreadthSpaceForAssistants","canMoveBy","treeWidth","translateInfo","shapeBounds","dim","translateSubTree","subTreeTranslation","updateLeafNode","enableRouting","asstDif","firstChildInfo","findIntersectingLevels","actualLevel","treeIntersect","spaceLeftFromPrevSubTree","translated","shiftSubordinates","rBounds","updateRearBounds","bnds","lastLevel","isLastLeaf","findLevel","vSpace","asstHeight","asstElement","asst","asstWidth","uniteRects","shape1","childWidth","childHeight","actBounds","oldActBounds","childInfo","canMoveValue","translateSibilingsBy","leftCenter","rightCenter","minTranslation","splitChildrenInRows","unique","leftTree","rightTree","splitRows","treeInfo","rightMost","updateLeftTree","rightBounds","alignRowsToCenter","leftBounds","centered","centerObjct","childDimension","centeredX","centeredY","updateRearBoundsOfTree","childBnds","dontUpdate","oddBounds","evenBounds","oddLevels","findOffset","canMoveBy_1","dummy","treeType","dif","intersectingLevels","layoutInfo","viewPortBounds","visited","getConnectorSegments","get3Points","updateSegmentsForHorizontalOrientation","updateSegmentsForBalancedTree","get5Points","relative","getSegmentsForMultipleRows","startingPoint","getSegmentsFromPoints","point_1","MindMap","checkRoot","fistLevelNodes","findFirstLevelNodes","leftNodes","rightNodes","getMindmapBranch","fistLevelNodes_1","updateMindMapBranch","nodes_2","excludeNodes","newCollection","newCollection_1","outEdge","RadialTree","layoutNodes","depthFirstAllignment","populateLevels","transformToCircleLayout","nodeInfo","segmentOffset","stages","newlevel","nodeInfo1","nodeInfo2","actualCircumference","GraphForceNode","gnNode","velocityX","velocityY","graphNode","applyChanges","SymmetricLayout","cdCOEF","cfMAXVELOCITY","cnMAXITERACTION","cnSPRINGLENGTH","mszMaxForceVelocity","doGraphLayout","graphLayoutManager","graph","selectedNode","Bounds","getModelBounds","lstGraphNodes","GraphNodes","lstNodes","convertGraphNodes","preLayoutNodes","nLenght","makeSymmetricLayout","appendForces","resetGraphPosition","rcBounds","fMaxSize","ptCenter","dRotateAngle","dAngle","getForceNode","forceNode","gnChild","calcNodesForce","vtx1","vtx2","normalDistance","calcRelatesForce","updateNeigbour","gfnNode","ptPoint","szMin","ptLocation","lstToReturn","vtSource","vtTarget","pointDistance","lineAngle","calcForce","vx","vy","atan","symmetricLayout","GraphLayoutManager","minDist","fOffset","visitedStack","cycleEdgesCollection","graphObjects","passedNodes","selectionList","mhelperSelectedNode","nodeCollection_1","nodeGraphObject","graphType","connectorGraphObject","updateLayout1","modelBounds","trnsX","lNodes","nodesToLayout","detectCyclesInGraph","cycleConnColln","nodeSymbols","isCycleEdge","dictionaryLength","getNodesToPosition","selectNodes","nodeGraph","exploreGraphEdge","addNode","isConnectedToAnotherNode","LeftMargin","TopMargin","selectConnectedNodes","dictionaryContains","Added","getConnectedRelatives","exploreRelatives","addGraphNode","exploreRelatives1","relativesToExplore","fromNode","toNode","getConnectedParents","getConnectedChildren","keyObj","gnNodeChildren","setNode","findNode","fullName","nLength","nodeHelper","bFoundConnectedNode","searchEdgeCollection","edgesToSearchThrough","connectionDirection","nodeLink","nodeToAdd","collectionToAdd","vertex","currentStack","getUnVisitedChildNodes","currentEdge","con","ComplexHierarchicalTree","HierarchicalLayoutUtil","crossReduction","CrossReduction","createVertex","geometry","getEdges","findRoots","vertices","roots","best","maxDiff","conns","getVisibleTerminal","terminalCache","traverse","directed","currentComp","hierarchyVertices","filledVertices","vertexID","edgeIsSource","netCount","isSource2","filledVertexSet","candidateRoots","vertexSet","MultiParentModel","cycleStage","layeringStage","crossingStage","placementStage","clnode","dnode","coordinateAssignment","widestRankValue","placementStageExecute","plalementChange","calculateWidestRank","lastRankMaxCellSize","rankSizes","rankOffset","rankValue","maxRank","maxCellSize","ranks","localOffset","isVertex","numEdges","setXY","setTempVariable","widestRank","distanceToNextRank","minRank","isY","rankCoordinates","stage","maxOffset","initialCoords","facade","isAncestor","otherNode","hashCode","weightedCellSorter","weightedValue","rankIndex","minNode","nodeList","nodeWrapper","setDictionaryForSorter","maxTries","cellWrapper","nextLayerConnectedCells","getConnectedCellsOnLayer","previousLayerConnectedCells","nextConnectedCount","prevConnectedCount","medianNextLevel","medianXValue","medianPreviousLevel","numConnectedNeighbours","getTempVariable","cellMedian","leftCell","intraCellSpacing","rightCell","updateNodeList","connectedCell","connectedCellWrapper","getDictionaryForSorter","connectedCells","medianValues","medianPoint","jettyPositions","currentYDelta","currentXDelta","bestOffsetDelta","maxIterations","setCellLocations","getValues","vertexMapper","setVertexLocation","garphModelsetVertexLocation","realCell","initialRank","fixRanks","startNodes","internalNodes","getDictionaryValues","startNodesCopy","layerDeterminingEdges","internalNode","connectsAsTarget","edgesToBeMarked","connectsAsSource","allEdgesScanned","minimumLayer","internalEdge","removedCell","currentMaxLayer","seenNodes","unseenNodesArray","unseenNodes","rootsArray","modelRoots","getDictionary","visit","seenNodesCopy","invert","connectingEdge","isReversed","getEdgesBetween","dlayout","multiObjectIdentityCounter","dfsCount","hierarchicalUtil","internalVertices","hierarchicalLayout","createInternalCells","realEdges","realEdge","targetCell","internalTargetCell","setDictionary","undirectedEdges","directedEdges","rankList","oldRootsArray","updateMinMaxRank","seen","dic","layoutObjectId","visitor","dfsRoots","trackAncestors","extendedDfs","depthFirstSearch","updateConnectionRank","outgoingEdges","traversedList","removeConnectionEdge","cHash","hashCodeLength","transients","shallow","calculateCrossings","numRanks","totalCrossings","calculateRankCrossing","previousRank","tmpIndices","rankPosition","nodeIndices","connectedNode","otherCellRankPosition","indices","firstIndex","treeSize","treeIndex","nestedBestRanks","iterationsWithoutImprovement","currentBestCrossings","weightedMedian","candidateCrossings","iteration","downwardSweep","medianRank","connectedlayer","connectedAs","medianValue","arrayCount","leftMedian","rightMedian","numCellsForRank","reservedPositions","sorterEntry","nextLevelConnectedCells","nextRankValue","Palette","SymbolPreview","SymbolPalette","symbolTable","clonedElement","getSymbolPreview","enableSearch","accordionElement","refreshPalettes","accordionDiv","updatePalettes","allowDrag","measureElemnt","initSymbols","symbolGroup","prepareSymbol","group_1","renderPalette","paletteDiv","renderSymbols","addPaletteItem","paletteName","paletteSymbol","symbolPaletteGroup","getSymbolContainer","removePaletteItem","stackPanel","symbolContainer","getSymbolTemplate","getContainer","symbolInfo","getSymbolInfo","actualWidth","actualHeight","symbolMargin","scaleSymbol","getSymbolDescription","parentDiv","symbolPreviewWidth","symbolPreviewHeight","symbolPreview","measureAndArrangeSymbol","getHtmlSymbol","getGroupParent","updateSymbolSize","getSymbolSize","HTMLCanvasElement","isPreview","highlightedSymbol","srcElement","searchPalette","palette_1","HTMLInputElement","oldSymbol","initDraggable","measureChild","scaleChildren","scaleGroup","childContainer","symGroup","searchDiv","textBox","filterSymbols","createSearchPalette","symbolGroup_1","emptyDiv","Overview","viewPortRatio","renderCanvas","oldparent","removeDocument","getDiagram","documentMouseUp","xlink","eWidth","eHeight","bRect","screenX","screenY","renderHtmlLayer","addOverviewRectPanel","htmlDiv","ovw","innerrect","renderOverviewCorner","transrect","updateOverviewRectangle","resizeDirection","updateHelper","difx_1","dify_1","updateOverviewrect","updateOverviewCorner","transattr","rectname","translateOverviewRectangle","offwidth","offheight","updateParentView","renderOverviewRect","viewwidth","viewheight","scrollOverviewRect","scaled","delx","dely","webkitTransform","getNativeLayer","widthratio","heightratio","initHelper","shape-rendering","index.Diagram","index.HierarchicalTree","index.MindMap","index.RadialTree","index.ComplexHierarchicalTree","index.DataBinding","index.Snapping","index.PrintAndExport","index.BpmnDiagrams","index.SymmetricLayout","index.ConnectorBridging","index.UndoRedo","index.LayoutAnimation","index.DiagramContextMenu","index.ConnectorEditing","index.SymbolPalette","keysInternal","valuesInternal","WUniqueFormat","referenceCount","uniqueFormatType","propertiesHash","isEqual","modifiedValue","isBorderEqual","isCharacterFormatEqual","isParagraphFormatEqual","isCellFormatEqual","isShadingEqual","isRowFormatEqual","isListFormatEqual","isTableFormatEqual","isListLevelEqual","isSectionFormatEqual","isNotEqual","modifiedProperty","targetValue","getPropertyType","sourceValue","getBorderPropertyType","getCharacterFormatPropertyType","getParaFormatPropertyType","getCellFormatPropertyType","getShadingPropertyType","getRowFormatType","getListFormatType","getTableFormatType","getListLevelType","getSectionFormatType","cloneItems","mergeProperties","cloneProperties","WUniqueFormats","addUniqueFormat","matchedFormat","updateUniqueFormat","uniqueFormat","DocumentEditor","enableHeaderFooterIn","isShiftingEnabled","isLayoutEnabled","isPastingContent","disableHistoryIn","findResultsList","documentName","tablePropertiesDialogModule","bordersAndShadingDialogModule","cellOptionsDialogModule","tableOptionsDialogModule","paragraphDialogModule","imageResizerModule","useCtrlClickToFollowHyperlink","pageOutline","enableCursorOnReadOnly","enableLocalPaste","Table","Cell","Ok","Preferred Width","Percent","Measure in","Alignment","Indent from left","Borders and Shading","Options","Specify height","At least","Exactly","Row height is","Allow row to break across pages","Repeat as header row at the top of each page","Vertical alignment","Default cell margins","Default cell spacing","Allow spacing between cells","Cell margins","Same as the whole table","Borders","Single","DashSmallGap","DashLargeGap","Triple","ThinThickSmallGap","ThickThinSmallGap","ThinThickThinSmallGap","ThinThickMediumGap","ThickThinMediumGap","ThinThickThinMediumGap","ThinThickLargeGap","ThickThinLargeGap","ThinThickThinLargeGap","SingleWavy","DoubleWavy","DashDotStroked","Emboss3D","Engrave3D","Outset","Inset","Thick","Style","Width","Height","Letter","Tabloid","Legal","Statement","Executive","A3","A4","A5","B4","B5","Custom Size","Different odd and even","Different first page","From edge","Footer","Paper","Orientation","Table Of Contents","Show page numbers","Right align page numbers","Nothing","Tab leader","Show levels","Use hyperlinks instead of page numbers","Build table of contents from","Styles","Available styles","TOC level","Heading","List Paragraph","Outline levels","Table entry fields","Modify","Color","Setting","Box","Preview","Shading","Apply To","Table Properties","Cell Options","Table Options","Insert Table","Number of columns","Number of rows","Text to display","Address","Insert Hyperlink","Edit Hyperlink","Insert","General","Indentation","Before text","Special","First line","Hanging","After text","By","Before","Line Spacing","After","At","Spacing","Define new Multilevel list","List level","Choose level to modify","Level","Number format","Number style for this level","Enter formatting for number","Start at","Restart list after","Text indent at","Aligned at","Follow number with","Tab character","Space","Arabic","UpRoman","LowRoman","UpLetter","LowLetter","Leading zero","Bullet","Ordinal","Ordinal Text","For East","No Restart","Font style","Underline style","Font color","Effects","Strikethrough","Superscript","Subscript","Double strikethrough","Open Hyperlink","Copy Hyperlink","Remove Hyperlink","Paragraph","Merge Cells","Insert Above","Insert Below","Insert Left","Insert Right","Delete Table","Delete Row","Delete Column","File Name","Format Type","Navigation","Results","Replace","Replace All","We replaced all","Find","No matches","All Done","Result","of","with","Click to follow link","Continue Numbering","Bookmark name","Close","Restart At","Properties","Name","Style type","Style based on","Style for following paragraph","Formatting","Numbering and Bullets","Numbering","Update Field","Edit Field","Bookmark","Page Setup","No bookmarks found","Number format tooltip information","Format","Create New Style","Modify Style","New","Bullets","Use bookmarks","Table of Contents","viewer","PageLayoutViewer","SfdtReader","DocumentEditor_1","updateScrollBars","isDocumentLoaded","editorModule","editorHistoryModule","searchModule","contextMenuModule","isDocumentLoadedIn","enableEditorHistory","getDocumentStart","getDocumentEnd","isReadOnly","enableImageResizer","initializeComponents","openBlank","localizeDialogs","optionsPaneModule","isOptionsPaneShow","showHideOptionsPane","initOptionsPane","initParagraphDialog","pageSetupDialogModule","initPageSetupDialog","fontDialogModule","initFontDialog","hyperlinkDialogModule","initHyperlinkDialog","initContextMenu","listDialogModule","initListDialog","initTablePropertyDialog","initBordersAndShadingsDialog","initCellMarginsDialog","initTableOptionsDialog","tableDialogModule","initTableDialog","styleDialogModule","initStyleDialog","tableOfContentsDialogModule","initTableOfContentDialog","clearPreservedCollectionsInViewer","LayoutViewer","clearDocumentItems","getDocumentEditorElement","fireContentChange","fireDocumentChange","fireSelectionChange","isCompositionStart","predictText","fireZoomFactorChange","fireViewChange","visiblePages","endPage","showParagraphDialog","paragraphFormat","isReadOnlyMode","showPageSetupDialog","showFontDialog","characterFormat","showCellOptionsDialog","showTableOptionsDialog","showTableDialog","showTableOfContentsDialog","showStyleDialog","showHyperlinkDialog","showBookmarkDialog","bookmarkDialogModule","showStylesDialog","stylesDialogModule","showListDialog","showTablePropertiesDialog","showBordersAndShadingDialog","enablePrint","enableSfdtExport","enableWordExport","enableTextExport","enableSelection","enableEditor","enableContextMenu","enableOptionsPane","enableHyperlinkDialog","enableTableDialog","enableBookmarkDialog","enableTableOfContentsDialog","enablePageSetupDialog","enableStyleDialog","enableListDialog","enableParagraphDialog","enableFontDialog","enableTablePropertiesDialog","enableBordersAndShadingDialog","enableTableOptionsDialog","sfdtText","abstractLists","WStyles","onDocumentChanged","convertJsonToDocument","intializeDefaultStyles","scrollToPage","enableAllModules","Print","SfdtExport","WordExport","TextExport","Editor","ImageResizer","EditorHistory","OptionsPane","HyperlinkDialog","TableDialog","BookmarkDialog","TableOfContentsDialog","PageSetupDialog","StyleDialog","ListDialog","ParagraphDialog","BulletsAndNumberingDialog","FontDialog","TablePropertiesDialog","BordersAndShadingDialog","TableOptionsDialog","CellOptionsDialog","StylesDialog","updateViewerSize","fitPage","pageFitType","printModule","sfdtExportModule","wordExportModule","textExportModule","jsonString","BodyWidget","sectionFormat","WSectionFormat","paragraph","ParagraphWidget","WParagraphFormat","WCharacterFormat","childWidgets","containerWidget","hfs","parseHeaderFooter","evenHeader","evenFooter","firstPageHeader","firstPageFooter","headersFooters","findByName","baseStyle","listFormat","getStyleNames","styleType","getStyles","showDialog","dialogType","showOptionsPane","destroyDependentModules","browserUserAgent","getPageHeight","getPageWidth","printElement","generatePrintContent","htmlString","boundingRectangle","isPrinting","renderWidgets","canvasURL","pageCanvas","uniqueSectionFormat","ownerBase","uniqueSectionFormats","hasValue","getPropertyDefaultValue","initializeUniqueSectionFormat","uniqueSectionFormatTemp","addUniqueSectionFormat","copyFormat","isUndoing","isRedoing","updateUniqueSectionFormat","cloneFormat","WLevelOverride","overrideListLevel","levelNumber","startAt","WList","listId","sourceListId","abstractListId","abstractList","levelOverrides","getListLevel","levelOverride","getLevelOverride","mergeList","WListFormat","uniqueListFormat","baseListStyle","basedOn","listLevelNumber","WParagraphStyle","initializeUniqueListFormat","uniqueListFormats","uniqueListFormatTemp","addUniqueListFormat","clearFormat","ApplyStyle","mergeFormat","WTabStop","positionIn","deletePositionIn","justification","leader","deletePosition","tabJustification","uniqueParagraphFormat","tabs","getUpdatedTabs","inTabs","tabStops","hasTabStop","getListFormatParagraphFormat","listLevel","ifListFormat","getDefaultValue","docParagraphFormat","documentParagraphFormat","bodyWidget","initializeUniqueParagraphFormat","uniqueParagraphFormats","uniqueParaFormatTemp","addUniqueParaFormat","updateUniqueParagraphFormat","leftIndent","rightIndent","beforeSpacing","afterSpacing","lineSpacingType","outlineLevel","uniqueCharacterFormat","baseCharStyle","charStyleValue","checkCharacterStyle","baseStyleValue","checkBaseStyle","docCharacterFormat","documentCharacterFormat","returnPropertyType","initializeUniqueCharacterFormat","uniqueCharacterFormats","uniqueCharFormatTemp","addUniqueCharacterFormat","isEqualFormat","baselineAlignment","fontColor","strikethrough","highlightColor","isSameFormat","updateUniqueCharacterFormat","HelperMethods","spanText","indexOfAny","wordSplitCharacter","lastIndexOfAny","addCssStyle","getHighlightColorCode","convertPointToPixel","convertPixelToPoint","pixel","isLinkedFieldCharacter","FieldElementBox","fieldType","fieldEnd","fieldBegin","removeSpace","trimStart","trimEnd","writeCharacterFormat","styleName","decimalDigits","wordBefore","wordAfter","wordSplitCharacters","xIn","yIn","WStyle","copyStyle","paraStyle","WCharacterStyle","charStyle","returnStyle","styleObjects","styles_1","returnStyleObject","WBorder","uniqueBorderFormat","initializeUniqueBorder","uniqueBorderFormats","uniqueBorderFormatTemp","addUniqueBorderFormat","lineArray","getBorderLineWidthArray","borderLineArray","getBorderWeight","weight","numberOfLines","getNumberOfLines","borderNumber","getBorderNumber","getPrecedence","WBorders","leftIn","rightIn","topIn","bottomIn","horizontalIn","verticalIn","diagonalUpIn","diagonalDownIn","lineWidthIn","diagonalDown","diagonalUp","valueIn","WShading","uniqueShadingFormat","initializeUniqueShading","uniqueShadingFormats","uniqueShadingTemp","addUniqueShading","shading","foregroundColor","textureStyle","WTableFormat","owner","uniqueTableFormat","assignTableMarginValue","initializeUniqueTableFormat","uniqueTableFormats","uniqueTableFormatTemp","addUniqueTableFormat","initializeTableBorders","tableFormat","tableAlignment","preferredWidth","preferredWidthType","WRowFormat","uniqueRowFormat","beforeWidth","afterWidth","heightType","initializeUniqueRowFormat","uniqueRowFormats","uniqueRowFormatTemp","addUniqueRowFormat","allowBreakAcrossPages","gridBefore","gridBeforeWidth","gridBeforeWidthType","gridAfter","gridAfterWidth","gridAfterWidthType","WCellFormat","uniqueCellFormat","initializeUniqueCellFormat","uniqueCellFormats","uniqueCellFormatTemp","addUniqueCellFormat","containsMargins","Widget","bodyWidgets","widget","indexInOwner","previousPage","previousContainer","TableCellWidget","getPreviousSplitWidget","TableRowWidget","HeaderFooterWidget","previousRenderedWidget","nextContainer","getNextSplitWidget","nextRenderedWidget","BlockWidget","getPreviousSplitWidgets","widgets","previousSplitWidget","getSplitWidgets","nextSplitWidget","combineWidget","splitWidget","TableWidget","combineRows","addWidgets","destroyInternal","LineWidget","BlockContainer","sectionFormatIn","getHierarchicalIndex","hierarchicalIndex","headerFooterType","getTableCellWidget","touchPoint","tableCellWidget","chilgWidget","headerWidget","footerWidget","headerFooter","block","isPageBreak","ownerTable","ownerRow","getContainerWidth","isInsideTable","associatedCell","cellFormat","isEndsWithPageBreak","inlineElement","TextElementBox","ImageElementBox","BookmarkElementBox","getInline","indexInInline","isStarted","splittedWidget","ListTextElementBox","cloneLine","leftBorderWidth","rightBorderWidth","topBorderWidth","bottomBorderWidth","tableHolder","WTableHolder","spannedRowCollection","combineCells","tableCell","getOwnerWidth","isBasedOnViewer","getTableWidth","getTableClientWidth","tableWidth","getCellWidth","getMinimumPreferredWidth","fitCellsToClientArea","rowFormat","calculateGrid","tempGrid","spannedCells","tableCellInfo","rowCellInfo","currOffset","startOffset","removeSpannedCell","updateColumnSpans","getGridCount","buildTableColumns","isGridUpdated","resetColumns","rowSpannedCells","isAutoWidth","addColumns","rowSpannedCell","minWidth_1","ownerColumn","validateColumnWidths","fitColumns","setWidthToCells","rw","getMaxRowWidth","totalPreferredWidth","getTotalWidth","convertPointToPercent","tablePreferredWidth","ownerWidth","getTableOf","getRowOf","fitChildToClientArea","getColumnCellsForSelection","startCell","endCell","splitWidthToTableCells","tableClientWidth","splitWidthToRowCells","insertTableRowsInternal","tableRows","updateRowIndex","getCellStartOffset","tableGrids","headerHeight","getCellOf","tableGrid","prevOffset","gridStartIndex","getOffsetIndex","getCellOffset","updateRowBySpannedCells","getPreviousRowSpannedCells","spannedCell","include","previousWidget","cellWidget","getContainerTable","previousCell","nextCell","cellPreferredWidth","getCellLeftBorder","leftBorder","cellBorder","rowBorders","tableBorders","getLeftBorderToRenderByHierarchy","prevCell","previousRow","prevRowCell","getPreviousCellLeftBorder","getLeftBorderWidth","getRightBorderWidth","getCellSpacing","actualCellSpacing","hasNoneStyle","prevCellRightBorder","getBorderBasedOnPriority","adjacentBorder","borderWeight","adjacentBorderWeight","borderPriority","adjacentBorderPriority","borderColInRGB","convertHexToRGB","R1","G1","B1","adjacentBorderColInRGB","R2","G2","B2","borderBrightness","adjacentBorderBrightness","getCellRightBorder","rightBorder","getRightBorderToRenderByHierarchy","nextWidget","getAdjacentCellRightBorder","nextCellLeftBorder","getCellTopBorder","topBorder","getTopBorderToRenderByHierarchy","prevTopCell","prevRow","getPreviousCellTopBorder","previousTopCell","prevTopCellBottomBorder","getCellBottomBorder","bottomBorder","getBottomBorderToRenderByHierarchy","nextBottomCell","nextRow","getAdjacentCellBottomBorder","prevBottomCellTopBorder","colCodeNo","paragraphWidget","splitParagraph","lastElement","isFirstLine","isLastLine","textIndex","getEndOffset","previousLine","elementBox","ElementBox","linkFieldCharacter","linkFieldTraversingForward","linkFieldTraversingBackwardSeparator","fieldSeparator","isFieldEnd","linkFieldTraversingBackward","previousNode","prevParagraph","nextLine","lineWidget","objectCharacter","hasFieldEnd","fieldBeginInternal","fieldSeparatorInternal","fieldEndInternal","baselineOffset","FieldTextElementBox","fieldText","TabElementBox","tabText","tabLeader","bookmarkTypeIn","refereneceIn","nameIn","bookmarkType","isInlineImage","imageStr","imgElement","isInlineImageIn","isMetaFile","isListFollowCharacter","isFollowCharacter","Page","repeatHeaderRowTableWidget","editor","removeFieldInWidget","removePage","tableColumns","getPreviousSpannedCellWidth","previousColumnIndex","curColumnIndex","currentColumnIndex","WColumn","endOffset","isFitColumns","preferredTableWidth","totalColumnWidth","CONTEXTMENU_COPY","CONTEXTMENU_CUT","CONTEXTMENU_PASTE","CONTEXTMENU_UPDATE_FIELD","CONTEXTMENU_EDIT_FIELD","CONTEXTMENU_HYPERLINK","CONTEXTMENU_OPEN_HYPERLINK","CONTEXTMENU_COPY_HYPERLINK","CONTEXTMENU_REMOVE_HYPERLINK","CONTEXTMENU_EDIT_HYPERLINK","CONTEXTMENU_FONT_DIALOG","CONTEXTMENU_PARAGRAPH","CONTEXTMENU_TABLE","CONTEXTMENU_INSERT_TABLE","CONTEXTMENU_DELETE_TABLE","CONTEXTMENU_INSERT_ABOVE","CONTEXTMENU_INSERT_BELOW","CONTEXTMENU_INSERT_RIGHT","CONTEXTMENU_INSERT_LEFT","CONTEXTMENU_COMPLETE_DELETE_TABLE","CONTEXTMENU_DELETE_ROW","CONTEXTMENU_DELETE_COLUMN","CONTEXTMENU_MERGE_CELL","CONTEXTMENU_CONTINUE_NUMBERING","CONTEXTMENU_RESTART_AT","contextMenuInstance","onContextMenuInternal","showHideElements","localValue","listStyle","oncontextmenu","disableBrowserContextmenu","menuOptions","handleContextMenuItem","caret","showCaret","pasteInternal","updateToc","navigateHyperlink","copyHyperlink","removeHyperlink","mergeCells","insertRow","insertColumn","deleteTable","deleteRow","deleteColumn","applyContinueNumbering","applyRestartNumbering","editField","tableProperties","insertTable","openHyperlink","editHyperlink","continueNumbering","restartAt","hideToolTip","copiedData","contextType","listLevelPattern","isCellSelected","getHyperlinkField","isImageField","canMergeCells","WAbstractList","abstractListIdIn","WListLevel","uniqueListLevel","followCharacter","numberFormat","restartLevel","initializeUniqueWListLevel","uniqueListLevels","uniqueListLevelTemp","addUniqueWListLevel","dotBullet","squareBullet","arrowBullet","circleBullet","allowLayout","isInitialLoad","maxTextHeight","maxBaseline","maxTextBaseline","isFieldCode","layoutItems","createNewPage","addBodyWidget","clientActiveArea","prevPage","sectionIndex","insertPage","layoutSection","updateFieldElements","ownerWidget","nextBlock","updateClientAreaForBlock","layoutBlock","layoutHeaderFooter","headerFooterWidget","getCurrentPageHeaderFooter","updateHFClientArea","layoutHeaderFooterItems","updateHeaderFooterToParent","typeIndex","getHeaderFooter","clearTableWidget","linkFieldInHeaderFooter","linkFieldInParagraph","linkFieldInTable","updateClientAreaLocation","pargaraph","shiftChildLocation","clientArea","shiftTop","widgetTop","footerMaxHeight","childWidget","shiftChildLocationForTableWidget","tableWidget","shiftChildLocationForTableRowWidget","rowWidget","shiftChildLocationForTableCellWidget","moveToLine","layoutParagraph","layoutTable","addParagraphWidget","textHelper","getParagraphMarkWidth","addLineWidget","layoutListItems","layoutEmptyLineWidget","updateClientWidth","updateWidgetToPage","clearLineMeasures","moveElementFromNextLine","nextElement","layoutFieldCharacters","moveToNextLine","moveFromNextPage","hasValidElement","getFieldResult","checkAndSplitTabOrLineBreakCharacter","getTextSize","getTabWidth","moveToNextPage","updateFieldText","cutClientWidth","addElementToLine","currentLine","addSplittedLineWidget","splitTextForClientArea","checkLineWidgetWithClientArea","splitElementForClientArea","getNextValidElementForField","character","splitByLineBreakOrTab","splitCurrentWidget","cutFromLeft","splitTextElementWordByWord","fieldStacks","isEmptyLine","isShiftEnter","paragraphMarkSize","getParagraphMarkSize","getBeforeSpacing","getLineSpacing","BaselineOffset","cutFromTop","getListById","clearListElementBox","layoutList","currentListLevel","getListNumber","updateTextSize","addListLevels","getListLevelPattern","splittedElementBox","movedElementBox","newLineWidget","splitByWord","getSplitIndexByWord","splitByCharacter","getTextSplitIndexByCharacter","splitWidth","measureTextExcludingSpaceAtEnd","splittedElement","getTextIndexAfterSpace","splittedText","isSplitByWord","textWidth","characterUptoWS","checkPreviousElement","spiltBy","inlineIndex","newSpan","paraFormat","isParagraphStart","isParagraphEnd","maxDescent","updateLineWidget","measurement","whiteSpaceCount","getWidthAndSpace","getSubWidth","spaceCount","addSubWidth","alignElements","alignLineElements","nextBody","moveBlocksToNextPage","updateClientArea","nextParagraph","insertIndex","isLastElement","getCellContentHeight","enableHeaderAndFooter","shiftFooterChildLocation","footerDistance","lastTextElement","updateListValues","getListText","getListStartValue","renderedLists","getAbstractListById","startVal","listAdv","listText","levelKey","getListTextListLevel","getAsLetter","quotient","listValue","getAsRoman","getAsLeadingZero","levelOverrideAdv","fposition","isCustomTab","defaultTabWidth","tabPosition","tabwidth","getRightTabWidth","clientActiveWidth","totalClientWidth","clientActiveAreaWidth","justify","trimSpace","lineText","elementText","isParagraphFirstLine","isParagraphLastLine","lastLineWidget","lastInline","moveNextWidgetsToTable","rowWidgets","moveFromNext","currentTable","nextWidgets","addTableCellWidget","maxCellMarginTop","maxCellMarginBottom","prevColumnIndex","cellspace","prevSpannedCellWidth","addWidgetToTable","tableCollection","endRowWidget","prevWidget","rowWidgetIndex","addTableWidget","updateRowHeightBySpannedCell","updateRowHeightByCellSpacing","updateHeightForRowWidget","updateSpannedRowCollection","prevRowWidget","updateRowHeight","mergedCellHeight","isRowSpanEnd","splittedCellWidgets","splittedCell","isVerticalMergedCellContinue","colIndex","splitWidgets","tableRowWidget","isLastRow","isFirstLineFitForRow","getSplittedWidgetForRow","insertSplittedCellWidgets","getSplittedWidget","updateWidgetLocation","updateWidgetsToTable","tableWidgets","isAllowBreakAcrossPages","moveRowToNextTable","continueHeader","isInsertSplittedWidgets","updateWidgetsToPage","prevBodyWidget","curretTable","currentRenderingPage","updateChildLocationForRow","getHeaderHeight","row_1","updateWidgetToRow","lastWidget","isUpdateVerticalPosition","isLayouted","cellspacing","currentRowWidgetIndex","rowSpanWidgetEndIndex","splitSpannedCellWidget","spanEndRowWidget","childWidget_1","updateHeightForCellWidget","updateCellVerticalPosition","updateHeightForTableWidget","previousRowIndex","insertRowSpannedWidget","insertEmptySplittedCellWidget","previousLeft","emptyCellWidget","createCellWidget","splitMinimalWidget","splittedPara","getSplittedWidgetForPara","tableCol","tableHeight","splittedTable","getSplittedWidgetForTable","createTableWidget","newTable","lineBottom","rowBottom","splittedRow","isFirstLineFitForPara","paraWidget","cellwidget","isFirstLineFitInShiftWidgets","containerCellWidget","isFirstLineFitForTable","isFit","isFirstLineFitForCell","updateChildLocationForTable","updateChildLocationForCell","isUpdateToTop","getDisplacement","updateCellContentVerticalPosition","updateTableWidgetLocation","cellContentHeight","getTableLeftBorder","getTableRightBorder","getTableTopBorder","getTableBottomBorder","getCellDiagonalUpBorder","getCellDiagonalDownBorder","layoutNextItemsBlock","blockAdv","blockToShift","updateNextBlockList","currentWidget","isInsertingTOC","updateContainerWidget","getFirstParagraphInFirstCell","updateWholeListItems","updateListItemsTillEnd","updateClientAreaForLine","startLineWidget","getParentTable","reLayoutParagraph","elementBoxIndex","layoutBodyWidgetCollection","reLayoutTable","reLayoutLine","isInHeaderFooter","updateHCFClientAreaWithTop","isBlockInHeader","block_1","clearPosition","clearHeight","clearRowWidget","clearCellWidget","blockIndex","shiftNextWidget","curretBlock","checkAndGetBlock","currentParagraph","shiftNextWidgets","tableView","updateClientAreaTopOrLeft","layoutRow","addTableRowWidget","updateClientAreaForRow","layoutCell","getMaxTopOrBottomCellMargin","topOrBottom","updateClientAreaForCell","shiftLayoutedItems","reLayoutOrShiftWidgets","removeEmptyPages","fieldCode","getFieldCode","shiftWidgetsBlock","updateRenderedListItems","shiftWidgetsForPara","shiftWidgetsForTable","prevBodyObj","getBodyWidgetOfPreviousBlock","shiftToPreviousWidget","updateClientAreaByWidget","isFitInClientArea","nextBodyWidget","createOrGetNextBodyWidget","previousBlock","isSplittedToNewPage","shiftTableWidget","shiftRowWidget","shiftCellWidget","shiftParagraphWidget","updateVerticalPositionToTop","combinedTable","isUpdateTop","tablewidget","previousBodyWidget","maxElementHeight","getMaxElementHeight","paragraphView","widgetIndex","updateParagraphWidgetInternal","activeArea","lastLine","newParagraphWidget","destroyAndScroll","scrollToBottom","createSplitBody","newBody","lineToLayout","Renderer","pageCanvasIn","containerCanvas","selectionCanvas","getColor","pageContext","setPageSize","renderHFWidgets","renderHeaderSeparator","selectionContext","dpr","devicePixelRatio","cliped","widgetHeight","headerFooterHeight","getScaledValue","renderWidget","renderDashLine","getHeaderFooterType","renderHeaderFooterMark","renderHeaderFooterMarkText","footerHeight","differentFirstPage","differentOddAndEvenPages","isSmallDash","renderParagraphWidget","renderTableWidget","renderTableCellWidget","renderTableRowWidget","renderTableOutline","visibleBounds","selectedWidgets","addSelectionHighlightTable","renderTableCellOutline","addSelectionHighlight","searchHighlighters","widgetInfo","toSkipFieldCode","underlineY","getUnderlineYPosition","renderListTextElementBox","renderImageElementBox","renderTextElementBox","breakCharacterFormat","renderUnderline","renderStrikeThrough","isHeightType","scaledWidth","tabElement","getTabLeader","tabString","getTabLeaderString","renderedHeight","underlineHeight","widgetWidth","isClipped","containerWid","renderSingleBorder","cellTopMargin","cellBottomMargin","cellLeftMargin","cellRightMargin","renderCellBackground","nextRowIsInCurrentTableWidget","nextRowWidget","TextHelper","containerContext","paragraphMark","textTrimEndWidth","getFormatText","heightInfoCollection","sizeInfo","getHeightInternal","formatText","spanElement","applyStyle","textTopVal","lineBreakMark","listCharacterFormat","onMouseWheelInternal","viewerContainer","pageContainer","wheel","setZoomFactor","onZoomFactorChanged","updateCaretPosition","updateTouchMarkPosition","updateImageResizerPosition","clearContent","handleZoom","selectionStartPageIn","selectionEndPageIn","tableLefts","isTimerStarted","preZoomFactor","preDifference","fieldEndParagraph","fieldToLayout","isSelectionChangedOnMouseMoved","isControlPressed","isTouchInput","useTouchSelectionMark","touchDownOnSelectionMark","isComposingIME","lastComposedText","isCompositionUpdated","isCompositionCanceled","isCompositionEnd","preDefinedStyles","isRowOrCellResizing","isMouseDownInFooterRegion","pageFitTypeIn","fieldCollection","isPageField","mouseDownOffset","zoomFactorInternal","onTextInput","handleTextInput","compositionStart","positionEditableTarget","editorHistory","initComplexHistory","compositionUpdated","insertIMEText","getEditableDivTextContent","compositionEnd","iframe","editableDiv","updateComplexHistory","onImageResizer","isImageResizerVisible","isImageResizing","onMouseUpInternal","TouchEvent","onTouchUpInternal","onKeyPressInternal","onTextInputInternal","onPaste","onFocusOut","hideCaret","vtHeight","onWindowResize","resizeTimer","updateViewerSizeInternal","onContextMenu","onMouseDownInternal","isLeftButtonPressed","enableImageResizerMode","selectedResizeElement","cursorPoint","findFocusedPage","isCursorInsidePageRect","isCursorInFooterRegion","tableResize","isInCellResizerArea","isInRowResizerArea","handleResize","checkCursorIsInSelection","getLineWidget","onMouseMoveInternal","isImageMoveToNextPage","handleImageResizingOnMouse","handleResizing","updateTextPositionForSelection","touchY","touchPoint_1","moveTextPosition","checkForCursorVisibility","onDoubleTap","checkAndEnableHeaderFooter","selectCurrentWord","isListTextSelected","updateResizingHistory","isImageSelected","navigateHyperLinkOnEvent","isSelectionInListText","selectListText","mouseUpInternal","scrollToPosition","updateHistoryForImageResizer","imageResizer","onTouchStartInternal","zoomX","zoomY","getTouchOffsetValue","resizeObj","getImagePointOnTouch","getCaretBottom","onTouchMoveInternal","handleImageResizingOnTouch","currentDiff","onPinchOutInternal","onPinchInInternal","onKeyUpInternal","getSelection","anchorOffset","setEditableDivCaretPosition","onKeyDownInternal","isHandled","keyEventArgs","initalizeStyles","bookmarks","containerCanvasIn","selectionCanvasIn","visibleBoundsIn","dialogInternal","initDialog","dialogInternal2","initDialog2","onPageFitTypeChanged","getListLevelNumber","getBookmarks","includeHidden","bookmark","optionsPaneContainer","outline","createEditableDiv","createEditableIFrame","initializeImageResizer","initTouchEllipse","wireEvent","contentEditable","scrolling","contentDocument","initCaret","getRect","getSelectionPage","updateCaretSize","iframeStyle","dialogTarget","tocStyles","tocBookmarkId","documentStart","pageGap","getLeftValue","isInsideRect","selectionLineWidget","touchOffsetValues","updatedZoomFactor","optionsRect","optionsPane","beforeLayout","currentResizingTable","resizerPosition","headerDistance","updateClientAreaForTable","updateTextPosition","selectCurrentParagraph","endPosition","getLineWidgetInternal","prevLineWidget","caretInfo","caretHeight","updateCaretToPage","scrollBarWidth","isMouseDragged","getPageTop","getLineWidgetBodyWidget","clearSelectionHighlight","clearSelectionHighlightInSelectedWidgets","scrollToLastPage","fieldCodes","fieldCategory","fieldPattern","getFieldText","unWireEvent","hyperlinkField","isRowResize","isCellResize","resizePosition","getImagePoint","lineLeft","getLineStartLeft","getHyperLinkFieldInCurrentSelection","updateTextPositionIn","setHyperlinkContentToToolTip","updateCurrentPage","prevScaleFactor","verticalHeight","horizontalWidth","horWidth","prevPageTop","prevY","getCurrentHeaderFooter","createHeaderFooterWidget","viewerWidth","viewerHeight","displayPixelRatio","updateScrollBarPosition","updateVisiblePages","pageH","left_1","addVisiblePage","setImageResizerPositions","renderPage","renderVisiblePages","jsonObject","parseCharacterFormat","parseParagraphFormat","parseAbstractList","parseList","parseStyles","parseSections","parseStyle","wStyle","basedStyle","getStyle","styleString","linkStyle","charaStyle","nextStyleString","abstract","parseListLevel","listCollection","parseLevelOverride","parseSectionFormat","parseTextBody","oddHeader","oddFooter","parseBody","styleObj","inlines","parseParagraph","parseTable","parseTableFormat","tableRow","parseRowFormat","parseRowGridValues","parseCellFormat","writeInlineFormat","lineWidgetCount","bookmarkStart","sourceFormat","parseBorders","parseShading","isSamePaddingAsTable","parseCellMargin","sourceBorders","destBorder","parseBorder","sourceBorder","sourceShading","destShading","texture","inlineFormat","parseListFormat","parseTabStop","wTabs","tabStop","SelectionCharacterFormat","boldIn","italicIn","underlineIn","strikeThroughIn","baselineAlignmentIn","highlightColorIn","fontSizeIn","fontColorIn","notifyPropertyChanged","fontFamilyIn","isCleared","isRetrieveFormatting","propertyValue","onApplyCharacterFormat","combineFormat","selectionCharacterFormat","SelectionParagraphFormat","leftIndentIn","rightIndentIn","beforeSpacingIn","afterSpacingIn","textAlignmentIn","firstLineIndentIn","lineSpacingIn","lineSpacingTypeIn","listLevelNumberIn","levelPattern","listTextElement","getListTextElementBox","onApplyListInternal","onApplyParagraphFormat","copyToFormat","getList","currentAbstractList","cloneListLevel","cloneLevelOverride","setList","onApplyList","history_1","setOffsetValue","updateListChangesInHistory","updateListParagraphs","applyListChanges","layoutWholeDocument","updateSelectionTextPosition","currentBaseHistoryInfo","modifiedProperties","updateSelection","updateHistory","SelectionSectionFormat","differentFirstPageIn","differentOddAndEvenPagesIn","pageHeightIn","pageWidthIn","leftMarginIn","bottomMarginIn","topMarginIn","rightMarginIn","headerDistanceIn","footerDistanceIn","getPropertyvalue","onApplySectionFormat","SelectionTableFormat","backgroundIn","tableAlignmentIn","cellSpacingIn","preferredWidthIn","tableIn","preferredWidthTypeIn","onApplyTableFormat","SelectionCellFormat","verticalAlignmentIn","onApplyTableCellFormat","clearCellFormat","SelectionRowFormat","heightIn","heightTypeIn","isHeaderIn","allowRowBreakAcrossPagesIn","onApplyTableRowFormat","clearRowFormat","SelectionImageFormat","updateImageFormat","onImageFormat","copyImageFormat","clearImageFormat","HtmlExport","fieldCheck","writeHtml","serializeSection","serializeParagraph","serializeTable","blockStyle","tagAttributes","serializeParagraphStyle","createAttributesTag","serializeInlines","endTag","serializeImageContainer","serializeInlineStyle","serializeSpan","spanClass","decodeHtmlNames","imageStyle","serializeCell","cellHtml","serializeCellBordersStyle","createTableStartTag","serializeRow","createTableEndTag","createRowStartTag","isList","paragraphClass","serializeCharacterFormat","serializeParagraphFormat","serializeTableBorderStyle","convertBorderLineStyle","serializeBorderStyle","borderPosition","tagValue","localProperties","createTag","tableStyle","createRowEndTag","htmlText","TextPosition","isUpdateLocation","getStartOffset","getLineLength","getHierarchicalIndexInternal","setPositionForSelection","physicalLocation","isLastRenderedInline","getParagraphLength","setPositionFromLine","positionAtStart","updatePhysicalPosition","setPositionInternal","setPositionForCurrentIndex","getParagraphWidget","setPositionParagraph","moveNextLine","getPhysicalPositionInternal","isAtSamePosition","isInSameParagraph","isExistBefore","isExistAfter","startParagraph","endParagraph","offsetInLine","setPositionForLineWidget","nextLineWidget","getNextRenderedBlock","prevLine","currentOffSet","moveNextPosition","getNextStartInline","moveNextPositionInternal","fieldEndOffset","fieldEndIndex","isForwardSelection","moveToInline","nextOffset","getNextValidOffset","nextValidInline","getNextValidElement","getStartLineOffset","inlineObj","updateOffsetToNextParagraph","moveToPreviousParagraphInTable","previousParagraph","currentPara","getPreviousSelectionCell","getPreviousParagraphBlock","isHighlight","getNextSelectionBlock","getContainerCellOf","getNextParagraphBlock","updateOffsetToPrevPosition","inlineInfo","getPreviousValidOffset","getPreviousSelectionBlock","previousInline","getPreviousValidElement","moveToNextParagraphStartInternal","movePreviousPosition","movePreviousPositionInternal","hasValidInline","moveBackward","nextInline","getNextRenderedElementBox","fieldBeginOffset","fieldBeginIndex","selectionStartIndex","selectionStartInlineObj","selectionStartInline","inlineObj_1","moveToWordStartInternal","getPreviousWordOffset","calculateOffset","getNextWordOffset","isInField","endSelection","excludeSpace","getNextWordOffsetSpan","getNextWordOffsetImage","getNextWordOffsetFieldBegin","getNextWordOffsetFieldSeperator","getNextWordOffsetFieldEnd","wordEndIndex","getPreviousWordOffsetSpan","getPreviousWordOffsetImage","getPreviousWordOffsetFieldBegin","getPreviousWordOffsetFieldSeparator","getPreviousWordOffsetFieldEnd","getPreviousWordOffsetBookMark","wordStartIndex","setPreviousWordOffset","validateForwardFieldSelection","selectionEndIndex","isPositionMoved","validateBackwardFieldSelection","paragraphStartInternal","moveToPreviousParagraph","moveToNextParagraphInTableCheck","paragraphValue","moveToParagraphStartInternal","moveToParagraphEndInternal","moveToNextParagraph","splittedParagraph","moveToNextParagraphInTable","moveToLineStartInternal","getFirstCellInRegion","lastParagraph","getLastParagraph","prevBlock","getLastBlockInLastCell","getLineWidgetParagraph","upDownSelectionLength","getLastCellInRegion","updateTextPositionWidget","moveToLineEndInternal","getFirstParagraph","getFirstBlockInFirstCell","moveToPreviousLine","getFirstElementInternal","getIndexInInline","prevInline","moveToWordEndInternal","incrementValue","getNextSelectionCell","moveUpInTable","lineStart","isMoveToLineEnd","moveDownInTable","firstItemWidth","getLeftInternal","isPositionUpdated","isBackwardSelection","containerCell","getSelectedCell","isInContainerCell","containsCell","isContainerCellSelected","isAtParagraphStart","getContainerCell","isForward","SelectionWidgetInfo","widthIn","fieldBeginAdv","linkInternal","localRef","opensNewWindow","parseFieldValues","typeInternal","isLocalRef","parseFieldValue","setLinkType","endChar","navigationLink","imageContainer","documentEditor","isSkipLayouting","contextTypeInternal","skipFormatRetrieval","isMoveDownOrMoveUp","characterFormatIn","paragraphFormatIn","rowFormatIn","cellFormatIn","tableFormatIn","imageFormatInternal","htmlWriterIn","startInternal","endInternal","selectionStartPage","selectionEndPage","goToHeader","enableHeadersFootersRegion","goToFooter","closeHeaderFooter","disableHeaderFooter","goToPage","updateTextPositionForBlockContainer","selectTable","selectTableInternal","selectRow","selectTableRow","selectColumn","selectColumnInternal","selectCell","selectTableCell","selectionSettings","pageCoordinates","toggleBold","toggleItalic","toggleUnderline","toggleStrikethrough","toggleHighlightColor","toggleSubscript","toggleSuperscript","toggleTextAlignment","increaseIndent","decreaseIndent","fireRequestNavigate","linkType","localReference","navigateBookmark","hyperLinkField","linkText","getLinkText","copyToClipboard","highlightSelection","isSelectionChanged","hideImageResizer","highlightSelectedContent","createHighlightBorder","selectionWidget","clipSelection","createHighlightBorderInsideTable","isVisiblePage","canvasContext","copyInsertFormat","heightInfo","removeSelectionHighlight","pageRect","selectCurrentWordRange","fireSelectionChanged","wordStart","extendToParagraphStart","extendToParagraphEnd","updateForwardSelection","updateBackwardSelection","extendToPreviousLine","extendToLineEnd","extendToLineStart","firstrow","firstcell","selectionLength","isMovePrevious","cellStart","getCellLeft","cellEnd","cellLeft","firstBlock","getFirstParagraphBlock","lastrow","lastcell","moveToLineStart","moveToLineEnd","setPositionForBlock","lastPage","handleControlEndKey","documentEnd","selectContent","handleControlHomeKey","handleControlLeftKey","extendToWordStart","handleControlRightKey","extendToWordEnd","handleControlDownKey","handleControlUpKey","handleShiftLeftKey","extendBackward","handleShiftUpKey","handleShiftRightKey","extendForward","handleShiftDownKey","extendToNextLine","handleControlShiftLeftKey","handleControlShiftUpKey","handleControlShiftRightKey","handleControlShiftDownKey","handleLeftKey","handleUpKey","handleRightKey","handleEndKey","handleHomeKey","handleDownKey","handleShiftEndKey","handleShiftHomeKey","handleControlShiftEndKey","handleControlShiftHomeKey","handleTabKey","isNavigateInCell","isShiftTab","selectPreviousCell","selectNextCell","updateListLevel","selectTableCellInternal","clearMultiSelection","firstParagraph","selectParagraph","firstLineWidget","firstPara","lastPara","getLastParagraphBlock","selectPosition","startTextPos","endTextPos","columnCells","startCellColumnCells","endCellColumnCells","startPos","endPos","getContainerWidget","extendToWordStartEnd","getTextPosition","includeObject","getTextInternal","startInlineObj","elementInfo","getRenderedInline","endInlineObj","endInline","getTextInline","nextParagraphWidget","paragarph","endParagraphWidget","startLineIndex","getFieldCodeInternal","getTocFieldInternal","getNextParagraph","getPreviousParagraph","getFirstParagraphInCell","getLastParagraphInLastCell","getLastParagraphInFirstRow","getPreviousTextInline","getNextTextInline","cell1","cell2","isExistBeforeInline","currentInline","isExistAfterInline","getPreviousRenderedBlock","getNextParagraphCell","getFirstBlockInNextHeaderFooter","getLastBlockInPreviousHeaderFooter","getPreviousParagraphCell","endLine","getLineInfo","childLength","getElementInfo","getPreviousParagraphSelection","getFirstParagraphInLastRow","getPreviousSelectionRow","getNextParagraphSelection","getNextSelection","getNextSelectionRow","getCellInTable","getPreviousSelection","selLength","isMovePrev","validOffset","maxBaselineOffset","getPhysicalPositionInline","startInline","fieldValue","elementBoxObj","getElementBoxInternal","positionImageResizer","showImageResizer","highlightCell","startElement","endElement","endLineWidget","startLineObj","getStartLineWidget","endLineObj","getEndLineWidget","highlightParagraph","highlightNextBlock","highlightTable","getLineWidgetInternalInline","linewidget","highlightCells","endCellLeft","endCellRight","tableWidgetCollection","startTableIndex","endTableIndex","highlightRow","endRowIndex","highlightInternal","getNextParagraphRow","getPreviousParagraphRow","containsRow","highlightCellWidget","sourceCell","getSelectedCells","highlightContainer","previousValidInline","validateTextPosition","getElementBox","getFieldCharacterPosition","getNextLineWidget","getPreviousTextElement","getNextTextElement","measureObj","firstInline","getEndPosition","getRenderedField","elementObj","getCaretHeight","isEmptySelection","getFieldCharacterHeight","heightElement","maxLineHeight","textSizeInfo","charHeight","isNonEmptySelection","clearChildSelectionHighlight","clearSelectionHighlightLineWidget","getLineWidgetParaWidget","getLineWidgetTableWidget","getLineWidgetRowWidget","leftCellSpacing","rightCellSpacing","topCellSpacing","bottomCellSpacing","getLineWidgetCellWidget","getFirstBlock","caretPosition","isImageSelectedObj","selectInternal","includeParagraphMark","elementValues","getFirstElement","textMetrics","isLineEnd","updatePositionObj","selectFirstBlock","skipSelectionChange","retrieveCurrentFormatProperties","retrieveImageFormat","retrieveCharacterFormat","retrieveParagraphFormat","retrieveSectionFormat","retrieveTableFormat","imageFormat","setCurrentContextType","contextIsinImage","contextIsinTable","isInHeader","tableAdv","retrieveCellFormat","retrieveRowFormat","getCellFormat","getRowFormat","tempTableRow","startTable","endTable","startParaSection","endParaSection","startPageIndex","endPageIndex","getParagraphFormatForSelection","getParagraphFormatInternalInParagraph","getParagraphFormatInternalInCell","getParagraphFormatInternalInBlock","getParagraphFormatInternalInTable","getParagraphFormatInCell","getParagraphFormatInBlock","getParagraphFormatInParagraph","getParagraphFormatInTable","cellAdv","getParagraphFormatInRow","getParaFormatForCell","startCellIn","endCellIn","para","elemInfo","getCharacterFormatForSelection","getCharacterFormatInTableCell","getCharacterFormat","getCharacterFormatForTableRow","tableRowAdv","getCharacterFormatForSelectionCell","getCharacterFormatForBlock","getCharacterFormatInternalInTable","startIn","endIn","setCharacterFormat","isFieldStartSelected","fieldInline","getCharacterFormatInternal","inlineAndIndex","getNextValidCharacterFormatOfField","getNextValidCharacterFormat","getCharacterFormatInTable","top_4","copySelectionParagraphFormat","getHyperlinkDisplayText","isNestedField","displayText","toolTipElement","toolTipText","top_5","showToolTip","toolTipField","toolTipObject","cursorPosition","lineStartLeft","checkedFields","getHyperLinkFields","getHyperLinkFieldInternal","paragraphIsInFieldResult","inlineIsInFieldResult","getBlock","bodyIndex","getBlockInternal","fieldParagraph","selectionIndex","highlightListText","updateImageSize","getSelectedCellsInTable","startColumnIndex","endColumnIndex","startRowindex","copySelectedContent","isCut","htmlWriter","handleCut","removeAllRanges","createRange","selectNodeContents","addRange","copySuccess","execCommand","caretLeft","caretStartLeft","caretEndLeft","setStart","top_6","skipUpdate","paragraphInfo","caretHeightInfo","searchResults","pagePoint","isCursorInHeaderRegion","moveToStart","bookmrkElmnt","bookmrkEnd","endoffset","selectBookmark","getTocField","tocPara","isTocStyle","TextSearch","isFooter","find","findOption","findNext","hierarchicalPosition","stringToRegex","textSearchResults","clearResults","findDocument","currentSearchResult","textToFind","isPatternEmpty","wordEmpty","patternRegExp","findAll","isFirstMatch","hierachicalPosition","findInline","findInlineText","inlineEle","stringBuilder","spans","matchObject","addResult","spanKeys","spanLength","SearchWidgetInfo","leftInternal","widthInternal","TextSearchResult","TextSearchResults","innerList","textSearchResult","SearchResults","navigate","textToReplace","replaceInternal","replaceAll","replaceAllInternal","clearSearchHighlight","isHandledOddPageHeader","isHandledEvenPageHeader","isHandledOddPageFooter","isHandledEvenPageFooter","textSearch","searchResultsInternal","findOptions","replaceText","insertText","endTextPosition","currentHistoryInfo","updateComplexWithoutHistory","highlightResult","highlightSearchResult","highlightSearchResultParaWidget","findHighLight","addSearchHighlightBorder","highlighters","searchHighlight","addSearchResultItems","addFindResultView","addFindResultViewForSearch","suffixtext","boxObj","boxIndex","shiftIndex","headerFooterString","layoutViewer","wholeWord","searchText","resultsText","messageDivText","replaceButtonText","replaceAllButtonText","focusedIndex","isOptionsPane","replacePaneText","findPaneText","matchDivReplaceText","tabInstance","selectedTabItem","previousTab","nextTab","onFindPane","onReplacePane","searchOptionChange","clearSearchResultItems","searchInput","navigateSearchResult","messageDiv","localeValue","resultContainer","resultsListBlock","clearFocusElement","wholeWordsChange","matchInput","wholeInput","matchChange","onWireEvents","searchIcon","searchIconClickInternal","navigateToNextResult","navigateNextResultButtonClick","navigateToPreviousResult","navigatePreviousResultButtonClick","onKeyDown","onEnableDisableReplaceButton","resultListBlockClick","closeButton","replaceButton","onReplaceButtonClick","replaceAllButton","onReplaceAllButtonClick","replaceDiv","occurrenceDiv","replaceTabContentDiv","findDiv","findTabButtonHeader","replaceTabButtonHeader","getMessageDivHeight","replaceWith","onKeyDownOnOptionPane","focusIndex","findText","selectionText","matchDiv","patterns","resultsContainerHeight","currentelement","listElementsDiv","listElements","currentlist","list_1","closeSpan","findTab","tabHeader","findTabButton","replaceTabButton","tabContent","findTabContent","findTabContentDiv","searchTextBoxContainer","replaceTabContent","createReplacePane","replaceHeader","replaceButtonDiv","emptyDiv6","currentIndexValue","selectedText","resultListBox","TableResizer","resizeNode","initResizingHistory","getRowReSizerPosition","getCellReSizerPosition","getTableWidget","startingPointX","resizerBoundaryWidth","getCellReSizerPositionInternal","childTableWidget","getTableWidgetFromWidget","childCellWidget","getActualWidth","resizeTableCellColumn","resizeTableRow","reLayout","selectionFlag","setPreferredWidth","newIndent","resizeColumnWithSelection","rightColumn","prevDragValue","dragOffset","updateCellPreferredWidths","updateGridValue","resizeColumnAtLastColumnIndex","resizeCellAtMiddle","selectedCells","resizeColumnAtStart","leftColumnCollection","getColumnCells","increaseOrDecreaseWidth","updateRowsGridAfterWidth","rightColumnCollection","isColumnResizing","isColumnSelected","changeWidthOfCells","selectedRow","newGridBefore","updateGridBefore","leastGridBefore","getLeastGridBefore","updateWidthForCells","hasTableWidth","leftColumn","isContinue","getOffsetValue","isLeftSideCollection","ignoreRow","isIncrease","minimumWidth","isSelection","currentRowWidth","getRowWidth","toUpdateGridAfter","leftColumnCells","rightColumnCells","columnCell","applyProperties","tableHistoryInfo","isAutoFit","updateGridBeforeWidth","updateGridAfterWidth","editHyperlinkInternal","isHandledComplex","refListNumber","incrementListNumber","removedBookmarkElements","pageRefFields","isBordersAndShadingDialog","nbsp","lineFeed","textBoxText","handleBackKey","insertField","fieldCodeSpan","fieldResultSpan","pasteContentsInternal","clearDirectFormatting","clearFormatting","getCompleteStyles","getPrefixAndSuffix","boxInfo","spaceIndex","prefixAdded","endInlineInfo","suffixAdded","toggleBaselineAlignment","acceptTab","handleEnterKey","handleDelete","handleShiftEnter","insertPageBreak","onBackSpace","onDelete","onEnter","animationTimer","insertFormat","sFormat","insertPosition","isRemoved","getParagraphInfo","editPosition","removeSelectedContents","updateInsertPosition","insertTextInline","tempSpan","splittedSpan","updateEndPosition","isSelectionOnHyperlink","checkAndConvertList","checkAndConvertToHyperlink","insertSectionBreak","insertSection","newSectionFormat","newParagraph","splitTable","updateNextBlocksIndex","splitParagraphInternal","splitBodyWidget","startBlock","newBodyWidget","updateSectionIndex","insertRemoveHeaderFooter","updateBlockIndex","startBodyWidget","increaseIndex","currentSectionIndex","isTab","convertList","isLeadingZero","tabValue","previousText","checkNumberFormat","checkLeadingZero","deleteSelectedContents","leadingZeroText","autoConvertList","newAbstractList","isBullet","isZero","getPageFromBlockWidget","insertImageText","insertFieldBeginText","insertFieldSeparatorText","insertFieldEndText","insertBookMarkText","spanObj","spanIndex","previousInlineObj","nextInlineObj","isEnter","tabCharIndex","lowerCaseText","containsURL","atIndex","dotIndex","autoFormatHyperlink","blockInfo","createHyperlinkElement","appylingHyperlinkFormat","updateCharacterFormatWithUpdate","initInsertInline","insertHyperlinkfield","isBookmark","unLinkFieldCharacter","fieldIndex","insertHyperlink","insertHyperlinkInternal","fieldStartPosition","insertHyperlinkByFormat","insertElement","insertInlineInSelection","insertElementInCurrentLine","isReLayout","checkIsNotRedoing","checkEndPosition","updateHistoryPosition","fieldResult","fieldObj","newFieldBegin","insertInlineInternal","removedNodes","insertClonedFieldResult","getClonedFieldResultWithSel","getClonedFieldResult","insertParagraph","insertBlock","curParagraph","fieldSeparatorPosition","pasteWindow","pasteLocal","pasteContents","getBlocks","pasteContent","insertParaFormat","removeSelectedContentInternal","pasteCopiedData","insertTableRows","insertBlockInternal","insertTableInternal","moveRows","removeBlock","insertBlockTable","moveInlines","checkInsertPosition","deleteSelectedContent","curInline","insertElementInternal","prevElement","newElement","relayout","startPara","insertNewParagraphWidget","insertImage","insertPicture","createTable","startLine","above","rowPlacement","getOwnerCell","cloneTableToHistoryInfo","getRowCountToInsert","isAffectedByRowSpannedCell","cellCountInfo","updateRowspan","newRow","createRowAndColumn","updateCellFormatForInsertedRow","cellFormats","isCellIncluded","isRowSpanned","clonedRowIndex","columnPlacement","newCell","getColumnCountToInsert","createColumn","isCellInserted","rowCell","getOwnerRow","endRow","getOwnerTable","mergeSelectedCellsInTable","startOwnerCell","endOwnerCell","mergedCell","mergeSelectedCells","cellInfo","updateSelectedCellsInTable","rowStartIndex","mergeBorders","updateBlockIndexAfterMerge","mergedCellborders","cellBorders","startCellIndex","canMergeSelectedCellsInTable","startLeft","endLeft","selectionLeft","selectionRight","isRowLeftWithinSel","isRowRightWithinSel","rowLeft","rowRight","checkCellWithInSelection","isPrevCellWithinSel","checkPrevOrNextCellIsWithinSel","isNextCellWithinSel","isNoRowSpan","isCellWithInSel","checkCurrentCell","checkCellWidth","isPrev","prevOrNextCell","isPrevCellWithInSel","cellOwner","spannedCellOwner","checkRowSpannedCells","insertIndex_1","isMoved","moveContent","removeEmptyLine","updateHeaderFooterWidget","isHandledComplexHistory","updateHeaderFooterWidgetToPage","shiftPageContent","isEvenPage","updateHeaderFooterWidgetToPageInternal","hfWidget","headerOrFooter","removeFieldInBlock","removeFieldTable","checkAndShiftFromBottom","isAtParagraphEnd","applyCharFormatValue","applyCharacterFormatForListText","updateSelectionCharacterFormatting","applyListCharacterFormatByValue","updateListCharacterFormat","updateListTextSelRange","startPositionInternal","endPositionInternal","initHistoryPosition","startSelectionReLayouting","currentList","clearList","applyBullet","bullet","applyBulletOrNumbering","applyNumbering","baseAlignment","updateProperty","initializeHistory","updateParagraphFormatInternal","currentUnderline","script","completeStylesString","existingStyles","styleNames_1","createStyleIn","getUniqueStyleName","uniqueName","getUniqueName","matchArray","updateCharacterFormat","applyCharFormatSelectedContent","applyCharFormat","applyCharFormatCell","applyCharFormatForSelectedPara","splittedLastParagraph","splittedWidets","getNextParagraphForCharacterFormatting","widgetCollection","applyCharFormatForTable","inlineLength","applyCharFormatInline","getCurrentSelectionValue","updateFontSize","fontsizeCollection","formatInline","getCharacterFormatValueOfCell","applyCharFormatForSelectedCell","applyCharFormatRow","applyCharFormatForTableCell","applyCharFormatForSelTable","startCellLeft","startCellRight","applyCharFormatValueInternal","copyInlineCharacterFormat","destFormat","addModifiedProperties","modifiedFormat","getIndentIncrementValue","applyParaFormatProperty","layoutItemBlock","updateSelectionParagraphFormatting","increaseLevel","incrementFactor","currentParagraphIndent","getIndentIncrementValueInternal","fPosition","updateParagraphFormat","applyParaFormatSelectedContent","applyCharacterStyle","applyParaFormat","applyParaFormatInCell","addModifiedPropertiesForParagraphFormat","copyParagraphFormat","copyFromListLevelParagraphFormat","onListFormatChange","updateListParagraphFormat","listlevel","oldFormat","newFormat","applyContinueNumberingInternal","numberingInfo","getContinueNumberingInfo","getParagraphFormat","listPattern","changeListId","revertContinueNumbering","levelNum","listType","baseHistoryInfo","addModifiedPropertiesForContinueNumbering","checkNumberArabic","restartListAt","createListLevels","restartListAtInternal","changeRestartNumbering","addModifiedPropertiesForRestartNumbering","levelPatterns","indexOfLevelPattern","getNextParagraphForFormatting","cellContainer","getParaFormatValueInCell","applyParaFormatCellInternal","applyParagraphFormatRow","applyParaFormatTableCell","wCell","applyParagraphFormatTableInternal","wRow","applyParaFormatTable","updateSectionFormat","startSectionIndex","endSectionIndex","applyPropertyValueForSection","getTableFormatAction","applyTablePropertyValue","updateSelectionTableFormat","getRowAction","applyRowPropertyValue","getTableCellAction","applyCellPropertyValue","addModifiedPropertiesForSection","startInfo","endInfo","combineSection","nextSection","combineSectionChild","updateTableFormat","updateCellFormat","updateRowFormat","tableStartPosition","newStartPosition","updateFormatForCell","rowStartPosition","rowEndPosition","applyRowFormat","reLayoutSelectionOfTable","reLayoutSelection","isEnded","reLayoutSelectionOfBlock","removeSelectedContent","editAction","deletePara","deleteTableCell","getParagraphForSelection","deleteCells","removeRow","updateTable","paragraphStart","endParagraphStartOffset","isCombineNextParagraph","lastLinelength","isEndInAdjacentTable","isStartParagraph","removeInlines","deleteSection","deleteBlock","insertParagraphPaste","addRemovedNodes","checkAndInsertBlock","combineSectionInternal","currentSection","lastBlockIndex","paragraphAdv","deleteTableBlock","deletePreviousBlock","updateEditPosition","deleteCellsInTable","deleteCell","deleteContainer","isDeleteCells","cell_1","setActionInternal","copyChildToClipboard","checkClearCells","deleteContent","splitEndRow","enableHistoryMode","clonedTable","deleteParagraphMark","removeContent","copyListLevel","listParagraphs","updateListParagraphsInBlock","startListLevel","tempList","abstractListAdv","listName","bulletCharacters","isInsertPageBreak","initialStart","breakParagraph","pageBreak","updateIndex","singleBackspace","skipBackSpace","insertRemoveBookMarkElements","bookMark","bookMarkStart","bookMarkEnd","isBackSpace","deleteSelectedContentInternal","getParagraph","historyInfo","startBlockInfo","endBlockInfo","currentLineWidget","setPositionForHistory","removeAtOffset","singleDelete","nextRenderedInline","bookMarkBegin","paraEndOffset","singleDeleteInternal","updateEditPositionOnMerge","imageElementBox","insertPictureInternal","fitImageToPage","onPortrait","onLandscape","changeMarginValue","onPaperSize","currentBlock","updateListItems","updateListItemsForPara","updateListItemsForTable","updateListItemsForRow","updateListItemsForCell","updateRenderedListItemsForPara","updateRenderedListItemsForTable","updateRenderedListItemsForRow","updateRenderedListItemsForCell","getParagraphInfoInternal","lineOffset","insertPageNumber","createFields","insertPageCount","fieldtext","insertBookmark","bookmarkEnd","insertElements","updateComplexHistoryInternal","deleteBookmark","bookmarkName","setBookmarkInfo","deleteBookmarkInternal","getSelectionInfo","startElementInfo","endElementInfo","endElements","startElements","insertElementsInternal","hfString","getBodyWidget","getBlockByIndex","blockObj","getParagraphInternal","getHeaderFooterWidget","getBodyWidgetInternal","isInsertPosition","applyBorders","getBorder","clearAllBorderValues","selectedCell","getTopBorderCellsOnSelection","getLeftBorderCellsOnSelection","getRightBorderCellsOnSelection","getBottomBorderCellsOnSelection","getAdjacentCellToApplyBottomBorder","clearBorder","getAdjacentCellToApplyRightBorder","applyAllBorders","applyInsideBorders","updateGridForTableDialog","borderType","isLastSelectedRow","isLastRightCell","nextRowIndex","getAdjacentBottomBorderOnEmptyCells","rightBorderCells","getSelectedCellsNextWidgets","topBorderCells","leftBorderCells","bottomBorderCells","nextCellColIndex","isSingleCell","startPosIn","endPosIn","applyBordersInternal","applyBorder","applyShading","onTableFormat","applyTableFormat","addModifiedTableProperties","handleTableFormat","applyFormat","shiftNextItem","onRowFormat","rowStartPos","rowEndPos","addModifiedRowProperties","handleRowFormat","onCellFormat","updateCellMargins","cellStartPosition","cellEndPosition","applyCellmarginsValue","getSelectedCellInColumn","rowEndIndex","addModifiedCellProperties","handleCellFormat","isTocField","tocField","insertTableOfContents","validateTocSettings","getTocSettings","tocSettings","includePageNumber","startLevel","endLevel","swtiches","swtch","includeHyperlink","includeOutlineLevels","decodeTSwitch","tSwitch","levelSettings","tableOfContentsSettings","constructTocFieldCode","buildToc","tocLastPara","tocLastLine","appendEndField","appendEmptyPara","updatePageRef","emptyPara","emptyLine","tocFieldCode","constructTSwitch","isFirstPara","tocDomBody","createHeadingLevels","createOutlineLevels","isHeadingStyle","isOutlineLevelStyle","insertTocBookmark","createTOCWidgets","levelStyle","headingStyle","createTocFieldElement","tocLine","headingStyleName","tocStyleName","insertTocHyperlink","pageField","insertTocPageNumber","bookMarkname","isRightAlign","pageRef","generateBookmarkName","onCellContentAlignment","ModifiedLevel","ownerListLevelIn","modifiedListLevelIn","ownerListLevel","modifiedListLevel","ModifiedParagraphFormat","ownerFormat","ownerFormatIn","modifiedFormatIn","RowHistoryFormat","rowHeightType","revertChanges","currentRowHeightType","TableHistoryInfo","TableFormatHistoryInfo","copyProperties","RowFormatHistoryInfo","CellFormatHistoryInfo","tableHierarchicalIndex","CellHistoryFormat","BaseHistoryInfo","ownerIn","modifiedPropertiesIn","modifiedNodeLength","removedNodesIn","actionIn","selectionStartIn","selectionEndIn","insertPositionIn","endPositionIn","revertBookmark","bookmarkInfo","recordChanges","revert","selectionStartTextPosition","selectionEndTextPosition","revertModifiedProperties","deletedNodes","insertTextPosition","isRemoveContent","isRedoAction","revertModifiedNodes","isDelete","revertResizing","revertTableDialogProperties","revertProperties","redoAction","lastNode","insertRemovedNodes","prevTableHistoryInfo","tableHistoryInfoCurrent","currentPropertyIndex","applyTableOptionsHelper","previousFormat","currentFormat","skipRemove","nextFormat","addModifiedPropertiesForList","previousLevel","modifiedLevel","updateListChanges","addModifiedCellOptions","copyCellOptions","addModifiedTableOptions","copyTableOptions","getCharacterPropertyValue","previousTableFormat","resizeContainerDiv","topLeftRect","topMiddleRect","topRightRect","bottomLeftRect","bottomMiddleRect","bottomRightRect","leftMiddleRect","rightMiddleRect","topLeftRectParent","topMiddleRectParent","topRightRectParent","bottomLeftRectParent","bottomMiddleRectParent","bottomRightRectParent","leftMiddleRectParent","rightMiddleRectParent","resizeMarkSizeIn","selectedImageWidget","imageResizerPoints","ImageResizingPoints","imageResizerDiv","currentImageElementBoxIn","imageResizerDivElement","resizeDiv","initResizeMarks","currentImageElementBox","currentPageDiv","currentPageDivWidth","currentPageDivHeight","imageResizerDivWidth","imageResizerDivHeight","resizeMarkSize","setImageResizerPosition","selectedImageInfo","SelectedImageInfo","initResizeContainerDiv","setImageResizingPoints","applyPropertiesForTouch","applyPropertiesForMouse","resizeRectElement","boxShadow","handleImageResizing","topRightResizing","topLeftResizing","topMiddleResizing","bottomRightResizing","bottomLeftResizing","leftMiddleResizing","initHistoryForImageResizer","getOuterResizingPoint","getInnerResizingPoint","touchEvent","imageResizingPoints","bottomMiddle","topMiddle","rightMiddle","leftMiddle","touchPoints","imageResizingPointsOnTouch","HistoryInfo","isChildHistoryInfo","modifiedActions","addModifiedAction","undoStackIn","redoStackIn","historyInfoStack","modifiedParaFormats","undoLimitIn","redoLimitIn","rowHistoryFormat","cellHistoryFormat","redoLimit","undoLimit","clearRedoStack","hasAction","modifiedLevelsInternal","modifiedCollection","revertListChanges","clearHistory","clearUndoStack","documentPath","stylePath","numberingPath","settingsPath","headerPath","footerPath","imagePath","appPath","corePath","contentTypesPath","generalRelationPath","wordRelationPath","headerRelationPath","footerRelationPath","xmlContentType","fontContentType","documentContentType","settingsContentType","footerContentType","headerContentType","numberingContentType","stylesContentType","webSettingsContentType","appContentType","coreContentType","customContentType","customXmlContentType","relationContentType","tableStyleContentType","settingsRelType","footerRelType","headerRelType","documentRelType","numberingRelType","stylesRelType","fontRelType","tableStyleRelType","coreRelType","appRelType","customRelType","imageRelType","hyperlinkRelType","controlRelType","packageRelType","customXmlRelType","customUIRelType","attachedTemplateRelType","wNamespace","wpNamespace","pictureNamespace","aNamespace","a14Namespace","rNamespace","rpNamespace","vNamespace","oNamespace","xmlNamespace","w10Namespace","cpNamespace","dcNamespace","docPropsNamespace","veNamespace","mNamespace","wneNamespace","customPropsNamespace","vtNamespace","chartNamespace","slNamespace","dtNamespace","wmlNamespace","w14Namespace","wpCanvasNamespace","wpDrawingNamespace","wpGroupNamespace","wpInkNamespace","wpShapeNamespace","w15Namespace","diagramNamespace","eNamespace","pNamespace","certNamespace","cRelationshipsTag","cRelationshipTag","cIdTag","cTypeTag","cTargetTag","cUserShapesTag","cExternalData","twipsInOnePoint","twentiethOfPoint","borderMultiplier","percentageFactor","emusPerPoint","cConditionalTableStyleTag","cTableFormatTag","cTowFormatTag","cCellFormatTag","cParagraphFormatTag","cCharacterFormatTag","packageType","relsPartPath","documentRelsPartPath","webSettingsPath","wordMLDocumentPath","wordMLStylePath","wordMLNumberingPath","wordMLSettingsPath","wordMLHeaderPath","wordMLFooterPath","wordMLCommentsPath","wordMLImagePath","wordMLFootnotesPath","wordMLEndnotesPath","wordMLAppPath","wordMLCorePath","wordMLCustomPath","wordMLFontTablePath","wordMLChartsPath","wordMLDefaultEmbeddingPath","wordMLEmbeddingPath","wordMLDrawingPath","wordMLThemePath","wordMLFontsPath","wordMLDiagramPath","wordMLControlPath","wordMLVbaProject","wordMLVbaData","wordMLVbaProjectPath","wordMLVbaDataPath","wordMLWebSettingsPath","wordMLCustomItemProp1Path","wordMLFootnoteRelPath","wordMLEndnoteRelPath","wordMLSettingsRelPath","wordMLNumberingRelPath","wordMLFontTableRelPath","wordMLCustomXmlPropsRelType","wordMLControlRelType","wordMLDiagramContentType","lastSection","mRelationShipID","mDocPrID","mDifferentFirstPage","mBookmarks","mDocumentImages","mExternalLinkImages","mHeaderFooterImages","mHeaderFooterColl","mArchive","clearDocument","setDocument","compressionLevel","mVerticalMerge","mGridSpans","serializeDocument","serializeStyles","serializeNumberings","serializeSettings","serializeCoreProperties","serializeAppProperties","serializeFontTable","contenttype","serializeSettingsRelation","serializeHeaderFooters","serializeDocumentRelations","serializeGeneralRelations","serializeContentTypes","mSections","mLists","mAbstractLists","defCharacterFormat","defParagraphFormat","defaultTabWidthValue","mStyles","blockOwner","writeCommonAttributeStrings","serializeDocumentBody","archiveItem","writeCustom","writeDup","serializeBodyItems","serializeSectionProperties","serializeHFReference","serializeSectionType","serializePageSetup","serializeColumns","pageSetup","serializePageSize","serializePageMargins","roundToTwoDecimal","sectionBreakCode","hfId","hf","getNextRelationShipID","addHeaderFooter","hfType","hfColl","blockCollection","isLastSection","serializeBodyItem","serializeParagraphItems","paraItems","serializeFieldCharacter","serializePicture","serializeBookMark","serializeTextRange","bookmarkId","getBookmarkId","serializeDrawing","serializeInlinePicture","serializeDrawingGraphics","sourceString","startString","picture","updateShapeId","documentImages","externalImages","tOwner","updateHFImageRels","addImageRelation","imageCollection","relationId","headerId","hfKeys","headerImages","headerFooterImages","serializeTableFormat","serializeTableGrid","serializeTableRows","serializeGridColumns","serializeRowFormat","serializeCells","pointWidth","serializeCellFormat","serializeCellWidth","serializeCellMerge","serializeGridSpan","serializeBorders","serializeShading","serializeTableCellDirection","serializeCellVerticalAlign","cf","collKey","isserialized","createMerge","serializeColumnSpan","checkMergeCell","gridValue","serializeTableWidth","serializeTableAlignment","serializeCellSpacing","serializeTableIndentation","serializeTableBorders","serializeTblLayout","getTextureStyle","multipler","serializeBorder","sz","getBorderStyle","tableIndent","isField","serializeListFormat","serializeParagraphSpacing","serializeIndentation","serializeParagraphAlignment","serializeTabs","serializeTab","getTabJustification","txtAlignment","serializeDefaultStyles","serializeDocumentStyles","zipArchiveItem","serializeBoolProperty","getHighlightColor","getUnderlineStyle","underlineStyle","serializeAbstractListStyles","serializeListInstances","listStyles","generateHex","ilvl","serializeListLevel","levelIndex","getLevelPattern","serializeLevelFollow","serializeLevelText","patternType","lvlIndex","fc","tabWidth","serializeHeaderFooter","headerFooterPath","headerFooterRelsPath","serializeHeader","serializeFooter","writeHFCommonAttributes","serializeHFRelations","serializeImagesRelations","serializeRelationShip","serializeHeaderFooterRelations","base64ImageString","formatClippedString","imageBlob","enc4","serializeExternalLinkImages","serializeHFRelation","relType","relationshipID","relationshipType","targetPath","resetRelationShipID","serializeDefaultContentType","serializeOverrideContentType","serializeHFContentTypes","serializeHeaderFootersContentType","partName","curSectionIndex","inField","updateLastParagraph","writeBody","writeNewLine","writeSectionEnd","writeHeadersFooters","bodyItemsCount","bodyItem","isLastPara","writeParagraph","writeTable","writeHeaderFooter","paragraphs","pCount","writeInlineStyles","writeParagraphFormat","endPara","createSection","createParagraph","writeBodyWidget","writeStyles","writeLists","writeHeaderFooters","writeBlock","writeNextBlock","writeLines","writeInlines","writeInline","started","writeListFormat","writeTabs","listIdValue","writeRow","createRow","writeCell","createCell","writeTableFormat","writeRowFormat","writeCellFormat","writeShading","wShading","writeBorder","wBorder","writeBorders","wBorders","wCellFormat","wRowFormat","wTableFormat","writeStyle","writeList","writeAbstractList","wAbstractList","writeListLevel","wList","wListLevel","dropDownBaseClasses","noData","fixedHead","DropDownBase","getPropObject","oldProperty","getValueByText","listData","checkValueCase","isTextByValue","typeOfData","dataSource_1","checkingAccent","checkIgnoreCase","getItemValue","checkNonIgnoreCase","itemValue","textItem","typedText","l10nUpdate","actionFailure","noRecordsTemplate","actionFailureTemplate","getTextByValue","enableRtlElements","jsonElement","resetList","renderItemsBySelect","setListData","getJSONfromOption","optionGroup","scrollTimer","isRequested","isDataFetched","emptyDataRequest","onActionComplete","onActionFailure","localDataArgs","postRender","focusItem","listEle","getSortedDataSource","listOption","fieldValues","setFloatingHeader","fixedHeaderElement","setFixedHeader","scrollStop","topIndex","itemTemplate","templateListItem","liWidth","firstLi","textField","getIndexByValue","setFields","updateDataSource","setUpdateInitial","updateData","isEmptyData","rippleFun","wrapperElement","selectedItemValue","updateActionCompleteData","tempLi","hidden","getDataByValue","dropDownListClasses","inputFocus","iconAnimation","device","filterBarClearIcon","filterInput","filterParent","mobileFilter","clearIconHide","popupFullScreen","disableIcon","hiddenElement","DropDownList","initializeData","isDocumentClick","isFilterFocus","beforePopupOpen","initRemoteRender","isNotSearchList","isTyped","preventAutoFill","isValidKey","typedString","isEscapeKey","isTabKey","actionCompleteData","isUpdated","prevSelectPoints","isSelectCustom","isDropDownClick","preventAltUp","isCustomFilter","isSecondClick","floatLabelChange","floatElement","onChangeEvent","resetFocusElement","resetSelection","allowFiltering","valueTempElement","setHTMLAttributes","getAriaAttributes","hidePopup","preventTabIndex","getNgDirective","getElementByText","getElementByValue","listItems_1","updateValues","setHiddenValue","onBlur","isFilterLayout","focusOutAction","onFocus","resetValueHandler","dropDownClick","bindCommonEvent","unBindCommonEvent","searchKeyEvent","spinnerElement","filterInputObj","preventAction","preventHomeEnd","isEditTextBox","isTabAction","isSelectFocusItem","pageUpSelection","getPageCount","pageDownSelection","focusDropDown","selectCurrentItem","onDocumentClick","activeStateChange","cloneElements","updateSelectedItem","preventSelect","detachChanges","focusedItem","activeItem","valueTemplate","setValueTemplate","previousItemData","previousSelectedLI","dataText","detachChangeEvent","defineProperties","preItems","onFilterUp","searchLists","onFilterDown","getSelectionPoints","removeFillSelection","isFiltering","preventDefaultAction","filteringAction","baseEventArgs","filterQuery","focusIndexItem","setSearchBox","filterBarPlaceholder","clearIconElement","searchKeyModule","onInput","addNewItem","highlightedItem","refreshPopup","searchBox","setHeaderTemplate","searchBoxHeight","getFocusElement","setSearchBoxPosition","backIconElement","clickOnBackIcon","scrollParentElements_1","listScroll","popupStyles","borderTop","borderBottom","destroyPopup","clearElement","popupOffset","lastItem","paddingBottom","scrollBottom","currentOffset","nextBottom","boxRange","isPopupButton","scrollableParentElements_1","onselect","stopImmediatePropagation","onchange","setOldText","setOldValue","ddlProps","onpopstate","pushState","ComboBox","targetFocus","customValue","allowCustom","valueMuteChange","aria-hasPopup","setHoverList","inlineSearch","autofill","setAutoFill","isHover","currentFillValue","isAndroidAutoFill","setAutoFillSelection","prevEnd","curEnd","prevStart","curStart","isKeyNavigate","changeData","comboProps","isEscape","searchItem","AutoComplete","isFiltered","filterType","mapping","suggestionCount","isDownUpKey","filterAction","postBackAction","fieldsSettings","itemCreated_1","showPopupButton","atcProps","HIDE_LIST","CHIP","CHIP_CLOSE","CHIP_SELECTED","ZERO_SIZE","CLOSEICON_CLASS","CLOSE_ICON_HIDE","MultiSelect","selectAllEventData","selectAllEventEle","scrollFocusStatus","keyDownStatus","enableRTL","allowCustomValue","hideSelectedItem","closePopupOnSelect","updateHTMLAttribute","updateReadonly","updateClearButton","overAllClear","componentWrapper","updateCssClass","onPopupShown","focusAtFirstListItem","isFirstClick","mainList","refreshListItems","addListFocus","focusAtLastListItem","updateListARIA","disableStatus","removelastSelection","chipCollectionWrapper","removeValue","removeChipSelection","updateDelimeter","delimiterChar","makeTextBoxEmpty","mainData","refreshSelection","targetInputElement","getForQuery","valuecheck","updateActionList","showSelectAll","mainListCollection","remoteCustomValue","checkForCustomValue","tempQuery","unwireListEvents","setInitialValue","selectAllAction","setDynValue","initialValueUpdate","initialUpdate","refreshPlaceHolder","updateValueState","hideGroupItem","ariaValue","checkSelectAll","checkMaxSelection","element1","temp1","searchCount","searchActiveCount","openClick","openOnClick","KeyUp","expandTextbox","showOverAllClear","checkTextLength","remoteFilterAction","dataUpdater","backCommand","dataChecks","wrapperClick","updateDelimView","removeChipFocus","refreshInputHight","floatLabelBlur","initStatus","getPagingCount","showDelimWrapper","viewWrapper","floatLabelFocus","delimiterWrapper","hideDelimWrapper","mobFilter","calcPopupWidth","popupKeyActions","updateAriaAttribute","arrowUp","arrowDown","selectByKey","spaceKeySelection","escapeAction","enableSelectionOrder","checkBackCommand","moveByList","focuseElem","moveBy","removeSelectedChip","selectListByKey","hideOverAllClear","maximumSelectionLength","updateListSelection","selectedElem","addChipSelection","moveByTop","chipClick","onChipRemove","setFloatLabelType","hideElement","updateMainList","removeChip","updateChipStatus","element2","addListSelection","addChip","dispatchSelect","isNotTrigger","getChip","closeElements","onMobileChipInteraction","chipElem","chipClose","chip","data-value","chipContent","setClass","mouseIn","mouseOut","fieldProperty","listCurrentOptions","overAllHeight","selectAllHeight","onListMouseDown","ClearAll","delim","indexItem","selectItems","mainlist","addListHover","ariaCheck","delimChar","wrapperleng","remainContent","overflowCountTemplate","raminElement","remainSize","overAllContainer","remainValue","newTemp","selectAllItem","onLoadSelect","dropDownIcon","msProps","mainLiLength","liLength","DELIMITER_VIEW","checkAutoFocus","placeholderText","placeholderElement","showDropDownIcon","CheckBoxSelection","activeLi","listSelection","setSelectAll","setDeviceSearchBox","getFocus","setReorder","getActiveList","checboxCreate","checkAllParent","selectAllSpan","selectAllText","unSelectAllText","activeLiCount","ulEle","navigationUrl","bookmarkDropdown","bookmarkCheckbox","onKeyUpOnUrlBox","urlValue","urlTextBox","displayTextBox","enableOrDisableInsertButton","onInsertHyperlink","onKeyUpOnDisplayBox","onInsertButtonClick","onCancelButtonClick","dialog","clearValue","loadHyperlinkDialog","localObj","bookmarkDiv","addressText","insertButton","closeHyperlinkDialog","onUseBookmarkChange","onBookmarkchange","autofocus","bookmarkText","bookmarkTextElement","bookmarkValue","bookmarkCheckDiv","bookmarkCheck","address","keyUpInsertTable","rowsCountBox","columnsCountBox","onInsertTableClick","rowValueTextBox","columnValueTexBox","columnContainer","columnValue","rowContainer","rowValue","addBookmark","textBoxInput","selectHandler","gotoBookmark","initBookmarkDialog","dlgFields","commonDiv","textBoxDiv","listviewDiv","listviewInstance","buttonDiv","addbuttonDiv","addButtonElement","deleteButtonDiv","deleteButtonElement","gotoButtonDiv","gotoButtonElement","loadTableofContentDialog","showLevel","closeTableOfContentDialog","unWireEventsAndBindings","changeShowLevelValue","changeByValue","headings","heading1","heading2","heading3","heading4","heading5","heading6","heading7","heading8","heading9","normal","changeStyle","headingValue","getElementValue","checkLevel","changeHeadingStyle","changePageNumberValue","changeRightAlignValue","changeStyleValue","applyTableOfContentProperties","applyLevelSetting","ownerId","generalDiv","genLabel","leftGeneralDiv","rightGeneralDiv","leftBottomGeneralDiv","rightBottomGeneralDiv","pageNumberDiv","rightAlignDiv","tabDiv","tabLeaderLabelDiv","tabLeaderLabel","tabLeaderDiv","showDiv","showLevelLabelDiv","showLevelLabel","showLevelDiv","buildTableDiv","buildTableLabel","tr1","td1","availableLabel","td2","tocLabel","tableDiv","table1","tr2","td3","heading1Label","td4","tr3","td5","heading2Label","td6","tr4","td7","heading3Label","td8","tr5","td9","heading4Label","td10","tr6","td11","heading5Label","td12","tr7","td13","heading6Label","td14","tr8","td15","heading7Label","td16","tr9","td17","heading8Label","td18","tr10","td19","heading9Label","td20","tr12","td23","normalLabel","td24","stylesLevelDiv","fieldsDiv","outDiv","outlineDiv","resetButtonDiv","resetElement","tocStylesDiv","tocStylesLabel","listViewDiv","modifyButtonDiv","modifyElement","getHeadingLevel","newStartLevel","newEndLevel","isEndLevel","isPortrait","loadPageSetupDialog","topMarginBox","leftMarginBox","bottomMarginBox","rightMarginBox","widthBox","heightBox","checkBox1","checkBox2","headerBox","footerBox","landscape","portrait","closePageSetupDialog","keyUpInsertPageSettings","applyPageSetupProperties","changeByPaperSize","paperSize","ejtabContainer","marginTab","paperTab","layoutTab","ejtab","marginHeader","paperHeader","layoutHeader","marginContent","paperContent","layoutContent","initMarginProperties","initPaperSizeProperties","initLayoutProperties","tabObj","marginDiv","leftMarginDiv","rightMarginDiv","topLabel","topTextBox","bottomBoxLabel","bottomTextBox","leftBoxLabel","leftTextBox","rightLabel","rightTextBox","orientationDiv","orientationLabeldiv","orientationPropDiv","portraitDiv","landscapeDiv","sizeDiv","leftSizeDiv","rightSizeDiv","widthLabel","widthTextBox","heightLabel","heightTextBox","paperSizeDiv","layoutDiv","firstPageDiv","oddOrEvenDiv","textLabelDiv","propertyDiv","leftLayoutDiv","rightLayoutDiv","headerLabel","footerLabel","keyUpParagraphSettings","applyParagraphFormat","changeBeforeSpacing","changeAfterSpacing","changeLeftIndent","changeRightIndent","changeLineSpacingValue","changeFirstLineIndent","changeByTextAlignment","special","byIn","changeBySpacing","atIn","loadParagraphDialog","selectionFormat","alignValue","lineSpaceValue","isApply","onParagraphFormat","closeParagraphDialog","alignLabel","indentionDiv","leftIndentionDiv","rightIndentionDiv","spacingDiv","leftSpacingDiv","rightSpacingDiv","indentLabel","beforeTextLabel","specialLabel","afterTextLabel","byLabel","by","spaceLabel","beforeLabel","lineSpaceLabel","afterLabel","atLabel","lineSpacingAt","local","ListViewModel","listIn","levelNumberIn","listLevelAdv","viewModel","alignedAt","listLevelElement","followNumberWith","restartBy","isListCharacterFormat","onTextIndentChanged","onStartValueChanged","onListLevelValueChanged","updateDialogValues","updateRestartLevelBox","onNumberFormatChanged","onAlignedAtValueChanged","onFollowCharacterValueChanged","onLevelPatternValueChanged","numberFormatTextBox","loadListDialog","dialog2","disposeBindingForListUI","closeListDialog","listLevelDiv","numberStyleDiv","numberFormatDiv","indentsDiv","startAtTextBox","textIndentAtTextBox","alignedAtTextBox","followCharacterElement","numberStyleEle","restartElement","formatInfoToolTip","option_1","listPatternConverter","followCharacterConverter","styleBasedOn","styleParagraph","onlyThisDocument","openDialog","showNumberingBulletDialog","setBoldProperty","fontButtonClicked","setItalicProperty","setUnderlineProperty","fontSizeUpdate","fontFamilyChanged","fontColorUpdate","setLeftAlignment","setRightAlignment","setCenterAlignment","setJustifyAlignment","increaseBeforeAfterSpacing","decreaseBeforeAfterSpacing","updateNextStyle","typedName","getTypeValue","isUserNextParaUpdated","isEdit","editStyleName","updateOkButton","enableOrDisableOkButton","styleTypeChange","toggleDisable","updateStyleNames","styleBasedOnChange","styleParagraphChange","numberingBulletDialog","showNumberBulletDialog","onOkButtonClick","styleNameElement","createLinkStyle","loadStyleDialog","closeStyleDialog","styleNameTypeDiv","nameWholeDiv","nameValue","styleTypeWholeDiv","styleTypeDivElement","styleTypeValue","styleBasedParaDiv","styleBasedOnWholeDiv","styleBasedOnDivElement","styleBasedOnValue","styleParagraphWholeDiv","styleParagraphDivElement","styleParagraphValue","formatting","optionsDiv","fontOptionsDiv","createFontOptions","paragraphOptionsDiv","createParagraphOptions","createFormatDropdown","formatBtn","dropDownbtn","fontFamilyElement","fontSizeElement","fontGroupButton","createButtonElement","fontColorElement","alignmentDiv","leftAlign","centerAlign","lineSpacingDiv","singleLineSpacing","onePointFiveLineSpacing","doubleLineSpacing","indentingDiv","buttonElement","paragraphFOrmat","nxtName","basedOnIndex","numberListClick","setActiveElement","bulletListClick","loadNumberingBulletDialog","closeNumberingBulletDialog","initNumberingBulletDialog","tabTarget","createNumberList","createBulletList","numberListDiv","ulTag","numberedNone","createNumberNoneListTag","numberedNumberDot","createNumberListTag","numberedNumberBrace","numberedUpRoman","numberedUpLettter","numberedLowLetterDot","numberedLowLetterBrace","numberedLowRoman","text1","text3","liTag","liInnerDiv","cssFloat","createBulletListTag","liNextDiv","bulletListDiv","bulletNone","bulletDot","bulletCircle","bulletSquare","bulletFlower","bulletArrow","bulletTick","fontStyleInternal","fontNameList","fontStyleText","fontSizeText","colorPicker","underlineDrop","strikethroughBox","doublestrikethrough","superscript","subscript","loadFontDialog","closeFontDialog","onInsertFontFormat","onCharacterFormat","fontStyleUpdate","fontFamilyUpdate","underlineUpdate","singleStrikeUpdate","enableCheckBoxProperty","doubleStrikeUpdate","superscriptUpdate","subscriptUpdate","effectLabel","strikeThroughElement","superScriptElement","subScriptElement","doubleStrikeThroughElement","fontDiv","getFontDiv","getFontSizeDiv","colorDiv","fontColorDiv","fontColorLabel","fontEffectsDiv","fontEffectSubDiv1","fontEffectSubDiv2","sizeSubDiv1","sizeLabel","underlineElement","sizeSubDiv2","underlineLabel","fontSubDiv1","fontNameLabel","fontNameValues","fontSubDiv2","fontStyleLabel","fontStyleValues","hasCellWidth","isTableBordersAndShadingUpdated","isCellBordersAndShadingUpdated","isCellOptionsUpdated","isTableOptionsUpdated","onBeforeOpen","loadTableProperties","onCloseTablePropertyDialog","applyTableProperties","preferCheckBox","rowHeightCheckBox","preferredCellWidthCheckBox","rowHeightValue","closeTablePropertiesDialog","applyTableSubProperties","applySubCellOptions","applySubTableOptions","tableWidthBox","tableWidthType","leftIndentBox","rowHeightBox","allowRowBreak","cellWidthBox","cellWidthType","changeTableCheckBox","changeTableAlignment","updateClassForAlignmentProperties","tableTab","getTableAlignment","changeTableRowCheckBox","changeTableCellCheckBox","changeCellAlignment","updateClassForCellAlignment","cellTab","getCellAlignment","showBordersShadingsPropertiesDialog","rowFormatInternal","rowTab","separatorLine","tableHeader","rowHeader","cellHeader","tableContent","rowContent","cellContent","initTableProperties","initTableRowProperties","initTableCellProperties","alignMentButtons","cellAlignment","calculateGridValue","setTableProperties","setTableRowProperties","setTableCellProperties","bordersAndShadingButton","tableOptionButton","cellOptionButton","onTableWidthChange","onTableWidthTypeChange","onLeftIndentChange","onRowHeightChange","onRowHeightTypeChange","onAllowBreakAcrossPage","onRepeatHeader","onCellWidthChange","onCellWidthTypeChange","sizeHeader","parentContainer","childContainer1","childContainer2","childContainer3","controlDiv","labeltext","alignmentHeader","alignmentContainer","classDivName","leftAlignDiv","centerAlignDiv","leftlabel","centerlabel","rightlabel","leftIndenetContainer","leftIndentLabel","tableOptionContiner","formatNumericTextBox","tableHasWidth","groupButtons","groupButton","sizeLabeldiv","childDiv1","childdiv2","child3","child4","allowRowContainer","repeatHeaderContaniner","enableRowHeight","parentdiv","childdiv1","preferredCellWidth","divAlignment","divStyle","topAlignDiv","cellTopAlign","cellCenterAlign","bottomAlignDiv","cellBottomAlign","centerLabel","bottomLabel","cellAlignments","applyBordersShadingsProperties","tablePropertiesDialog","checkClassName","previewDivTopTop","previewDivTopBottom","previewDivTopCenter","previewDivBottomcenter","previewDivBottomLeft","previewDivBottomRight","previewDivDiagonalRight","previewDivLeftDiagonal","shadingColorPicker","ulelementShading","applyTo","noneDiv","currentTableFormat","closeDialog","closeBordersShadingsDialog","handleSettingCheckBoxAction","tableBorderDialogId","updateClassForSettingDivElements","setSettingPreviewDivElement","boxDiv","allDiv","customDiv","handlePreviewCheckBoxAction","compareClass","handlePreviewCheckBoxShowHide","showHidePreviewDivElements","applyTableCellPreviewBoxes","previewDivBottomcenterContainer","previewDivTopCenterContainer","previewVerticalDiv","previewHorizontalDiv","previewDivBottomRightContainer","applyPreviewTableBackgroundColor","previewDiv","applyPreviewTableBorderColor","previewRightDiagonalDiv","previewLeftDiagonalDiv","settingsContiner","styleContainer","previewContiner","styleText","dropDownList","widthText","widthNumeric","colorText","borderColorPickerElement","settingText","noneDivContainer","noneDivLabel","boxDivContainer","boxDivLabel","allDivContainer","allDivLabel","customDivContainer","customDivLabel","noneDivTransparent","boxDivTransparent","allDivTransparent","customDivTransparent","previewText","previewDivTopTopContainer","previewDivTopBottomContainer","previewDivLeftDiagonalContainer","previewDivBottomLeftContainer","previewDivDiagonalRightContainer","previewDivTopTopTransParent","previewDivTopCenterTransParent","previewDivTopBottomTransParent","previewDivLeftDiagonalTransParent","previewDivBottomLeftTransparent","previewDivBottomcenterTransparent","previewDivBottomRightTransparent","previewDivDiagonalRightTransparent","shadingContiner","shadingText","shadings","shadingColorPickerElement","shdApply","divsion","borderColorPicker","loadBordersShadingsPropertiesDialog","settingDivs","tempClassName","isShowHidePreviewTableElements","settingDiv","compareElementClass","setElement","compareElement","setPropertyPreviewDivElement","cloneBorders","getLineStyle","colorPickerEvent","fillColorEvent","horizontalBorder","verticalBorder","diagonalDownBorder","customBorder","diagonalUpBorder","applyTableCellProperties","cellSpaceTextBox","applyTableOptions","closeCellMarginsDialog","changeAllowSpaceCheckBox","allowSpaceCheckBox","removeEvents","innerDivLabel","getCellMarginDialogElements","cellSpaceLabel","table2","cellspacingTextBox","divBtn","loadCellMarginsDialog","applyTableOptionsHistory","applySubTableOptionsHelper","documentLocale","changeSameAsTable","sameAsTableCheckBox","localizeValue","sameAsTable","loadCellProperties","enableTextBox","enableCheckBox","applyCellMarginsInternal","applyCellMarginsForCells","rowCells","iterateCells","applySubCellMargins","leftLabel","modifyStyles","addNewStyles","initStylesDialog","newButtonDiv","newButtonElement","modifybuttonDiv","modifyButtonElement","hideObjects","index.DocumentEditor","index.Print","index.SfdtExport","index.WordExport","index.TextExport","index.Search","index.Editor","index.EditorHistory","index.OptionsPane","index.ContextMenu","index.ImageResizer","index.HyperlinkDialog","index.TableDialog","index.BookmarkDialog","index.TableOfContentsDialog","index.PageSetupDialog","index.ParagraphDialog","index.ListDialog","index.StyleDialog","index.StylesDialog","index.BulletsAndNumberingDialog","index.FontDialog","index.TablePropertiesDialog","index.BordersAndShadingDialog","index.TableOptionsDialog","index.CellOptionsDialog","index.MultiSelect","index.CheckBoxSelection","CellType","CellStyle","numFmtId","backColor","wrapText","indent","isGlobalStyle","CellXfs","CellStyleXfs","CellStyles","xfId","NumFmt","formatCode","mLine","mColor","Cells","inserted","Rows","Worksheets","Worksheet","isSummaryRowBelow","showGridLines","HyperLink","FreezePane","MergeCell","MergeCells","mergeCell","mCell","isIntersecting","intersectingCell","ref","ValueFormatter","CsvHelper","csvStr","globalStyles","Map","worksheets","parseWorksheet","parseRows","rows_1","parseRow","parseCell","csv","parseCellValue","has","dwlLink","BlobHelper","getBlob","Workbook","saveType","currencyString","sharedStringCount","unitsProportions","hyperlinkStyle","mSaveType","sharedString","mFonts","mBorders","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","parserCellStyle","cellStylesIn","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","author","comments","company","manager","subject","createdDate","tags","jsonSheet","sheet","mergedCellsStyle","mHyperLinks","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","hyperLinks","mergeOptions","sourceJson","destJson","getCellName","getColumnName","strColumnName","iCurrentDigit","titleRowName","printTitleName","fromRow","toRow","titleColName","fromColumn","toColumn","freezePanes","columnsLength","rowsLength","rowId","parserRow","insertMergedCellsStyle","rowToInsert","styleIndex","cellToInsert","refName","parseGrouping","parseCells","isCollapsed","cellsLength","spanMin","spanMax","cellId","jsonCell","hyperLink","getCellValueType","rId","parseCellType","processMergeCells","applyGlobalStyle","cellType","defStyleIndex","parserBorder","processCellStyle","switchNumberFormat","numFmt","cellStyleXfs","cellXfs","returnFormat","processNumFormatId","compareResult","compareStyle","isNewFont","toCompareStyle","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","toOADate","blobSaveType","proxyUrl","xlsxMatch","csvMatch","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveSheetView","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","hLink","saveSheetRelations","pixels","dDigitWidth","trunc","relStr","paneString","sstStart","si","processString","updateCellXfsStyleXfs","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","compareFontResult","fontId","fillId","borderId","applyAlignment","numFmtStyle_1","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","saveAlignment","cellXf","alignString","appString","coreString","toISOString","wbRelation","contentTypeString","sheetsOverride","xmlString","updatedMergedCellStyles","sCell","eCell","dateToTicks","isLeapYear","timeToTicks","daysTo1899","allowSorting","allowResizing","allowGrouping","allowReordering","showColumnMenu","enableGroupByFormat","showInColumnChooser","edit","sortDirection","getEditTemplate","editTemplateFn","getFilterTemplate","filterTemplateFn","valueFormatter","commandsTemplate","headerTemplateFn","fltrTemplateFn","editTemplate","filterTemplate","isForeignColumn","editType","sortComparer","a_1","getSortDirection","setSortDirection","getFormatter","formatFn","getParser","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","disableHtmlEncode","queryCellInfo","headerCellInfo","actionBegin","actionComplete","dataBound","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnDragStart","columnDrag","columnDrop","rowDragStart","rowDrag","rowDrop","printComplete","detailDataBound","batchAdd","batchCancel","batchDelete","beforeDataBound","beforeOpenColumnChooser","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","initialLoad","initialEnd","dataReady","contentReady","uiUpdate","onEmpty","inBoundModelChanged","colGroupRefresh","headerRefreshed","pageComplete","sortComplete","filterComplete","searchComplete","reorderComplete","rowDragAndDropComplete","groupComplete","ungroupComplete","groupAggregates","refreshFooterRenderer","refreshAggregateCell","refreshAggregates","cellSelectionComplete","beforeCellFocused","cellFocused","columnVisibilityChanged","columnWidthChanged","columnPositionChanged","rowsAdded","rowsRemoved","columnDragStop","headerDrop","dataSourceModified","refreshVirtualBlock","dblclick","toolbarRefresh","autoCol","tooltipDestroy","saveComplete","deleteComplete","preventBatch","dialogDestroy","crudAction","addDeleteAction","destroyForm","doubleTap","excelExportComplete","excelHeaderQueryCellInfo","pdfExportComplete","pdfHeaderQueryCellInfo","freezeRender","filterOpen","filterDialogCreated","filterMenuClose","initForeignKeyColumn","getForeignKeyData","showEmptyGrid","dataStateChange","dataSourceChanged","rtlUpdated","beforeFragAppend","frozenHeight","recordAdded","cancelBegin","editNextValCell","RenderType","ToolbarItem","CheckBoxFilter","filterSettings","existingPredicate","foreignKeyQuery","filterState","renderEmpty","cBoxTrue","cBoxFalse","searchHandler","searchBoxKeyUp","foreignKeyFilter","fColl","mPredicate","fPredicate","filterCollection","events.generateQuery","fpred","foreignFilter","getDataModule","initalPredicate","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","updateModel","actualPredicate","filteredColumns","sortSettings","allowCaseSensitive","getAndSetChkElem","sBox","hideSearchbox","inputargs","cBox","events.filterBeforeOpen","filterModel","columnName","columnType","events.actionBegin","btnClick","isExcel","dialogCreated","getAllData","events.filterDialogCreated","getColumns","destroyTemplate","events.filterMenuClose","clearFilter","events.preventBatch","fltrBtnHandler","optr","caseSen","itemsCnt","fObj","initiateFilter","firstVal","foreignQuery","parsed","predicte","addDistinct","filterChoiceCount","filterEvent","processSearch","getPredicateFromCols","getPredicate","predicateList","foreignColumn","getForeignKeyColumns","filteredColumn","events.filterChoiceRequest","processDataOperation","eventPromise","dataSuccess","getStateEventArgument","events.dataStateChange","adaptr","allPromise","runArray","fullData","cols","filteredData","getDistinct","events.filterAfterOpen","events.actionComplete","updateResult","createFilterItems","updateAllCBoxes","updateIndeterminatenBtn","cBoxes_1","createCheckbox","cBoxes","selectAllValue","isColFiltered","getCheckedState","foreignDataObj","events.foreignKeyData","generatePredicate","updateDateFilter","getCaseValue","dataState","isPending","resolver","events.rowsAdded","addRows","events.rowsRemoved","removeRows","events.dataSourceModified","events.destroy","events.updateData","crudActions","events.addDeleteAction","gObj","skipPage","columnQueryMode","selectQueryFields","searchQuery","aggregateQuery","sortQuery","pageQuery","isForeign","allowPaging","groupSettings","getColumnByField","isGrpFmt","formatGroupColumn","sortGrp","sSettings","searchSettings","fGeneratePredicate","skipFoerign","actualFilter","checkBoxCols","defaultFltrCols","excelPredicate","defaultFltrCols_1","column_1","sType","events.showEmptyGrid","getKey","getPrimaryKeyFieldNames","crud","events.recordAdded","deferred_1","previousData","events.crudAction","setState","events.dataSourceChanged","toIndex","dataArgs","isDataChanged","editArgs","isSpanned","CellMergeRender","cellArgs","cellRenderer","getCellRenderer","cellSpan","aria-colSpan","enableColumnVirtualization","backupMergeCells","fName","setMergeCells","generteKey","fname","splitKey","getMergeCells","updateVirtualCells","mCells","getIndexFromAllColumns","vColumnIndices","getColumnIndexesInView","getVisibleColumns","RowRenderer","rowTemplate","refreshRow","refreshMergeCells","cells_1","rowArgs","attrCopy","chekBoxEnable","isDataRow","getSelectedRowIndexes","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","cellRendererFact","DetailExpand","Filter","CommandColumn","summarycell","isAltRow","RowModelGenerator","generateRows","generateRow","ensureColumns","detailTemplate","generateCell","enableAltRow","refreshForeignKeyRow","generateCells","oIndex","opt","isDataCell","rowID","refreshRows","SummaryModelGenerator","groupFooterTemplate","groupCaptionTemplate","columnSelector","buildSummaryData","getGeneratedRow","summaryRow","raw","indents","getIndentByLevel","isDetailGridAlone","indentLength","getGeneratedCell","getCellType","Indent","sColumn","scolumn","single","disp","Summary","GroupSummaryModelGenerator","GroupSummary","CaptionSummaryModelGenerator","CaptionSummary","GroupModelGenerator","summaryModelGen","captionModelGen","getGroupedRecords","generateDataRows","generateCaptionRow","getCaptionRowCells","visibles","groupedLen","generateIndentCell","Expand","captionCells","cIndex_1","wFlag","tmpFlag","GroupCaption","GroupCaptionEmpty","cRow","ContentRender","freezeRows","movableRows","events.columnDrop","rafCallback","ariaService","setBusy","getPanel","getFrozenColumns","isFrozen","events.contentReady","events.dataBound","allowTextWrap","events.freezeRender","case","generator","getModelGenerator","events.columnVisibilityChanged","setVisible","events.colGroupRefresh","events.uiUpdate","enableAfterRender","renderPanel","setOptions","busy","setPanel","renderTable","contentDiv","createContentTable","setTable","multiselectable","initializeContentDrop","frozenRows","getHeaderContent","setColGroup","getColGroup","freezeRowElements","rowElements","refreshContentRows","hdrTbody","frag","hdrfrag","fCont","mCont","modelData","registeredTemplate","tbody","getRowTemplate","isTR","colcount","getHeaderTable","events.beforeFragAppend","appendContent","contentPanel","panel","contentTable","getRows","getMovableRows","getRowElements","getMovableRowElements","setRowElements","colgroup","colGroup","fRows","mRows","rowLen","cellLen","testRow","clen","getNormalizedColumnIndex","canSkip","displayVal","getRowByIndex","getDataRows","getVirtualRowIndex","getMovableRowByIndex","getMovableDataRows","setRowObjects","HeaderRender","frzIdx","visualElement","headercelldiv","getStackedHeaderColumnByHeaderText","getColumnByUid","events.columnDragStart","events.columnDrag","events.columnDragStop","events.headerDrop","widthService","events.columnPositionChanged","colPosRefresh","headerDiv","createHeaderTable","initializeHeaderDrag","initializeHeaderDrop","events.headerRefreshed","headerPanel","headerTable","tHead","findHeaderRow","thead","caption","bodyCell","rowBody","updateColGroup","colHeader","rowRenderer","headerRow","colDepth","getObjDepth","getHeaderCells","HeaderIndent","DetailHeader","appendCells","isFirstObj","isFirstCol","isLastCol","isMovable","lastCol","getCellCnt","frzObj","refreshFrozenHdr","isPartial","isComp","frozenColumns","StackedHeader","getColSpan","getColumnIndexByUid","getColumnIndexByField","frozenCnt","frzCol","refreshUI","setWidthToColumns","updateDefaultCursor","gCells","textWrapSettings","wrapMode","checkDepth","showDropArea","headerRows","CellRenderer","locator","localizer","rowChkBox","getGui","evaluate","fData","dummyData","invokeFormatter","refreshCell","refreshTD","displayAsCheckBox","localeStr","fromFormatter","appendHtml","persistSelection","buildAttributeFromCell","clipMode","isCheckBoxType","AriaService","setExpand","setSort","isBusy","invalid","setGrabbed","isGrabbed","grabbed","setDropTarget","dropeffect","haspopup","HeaderCellRenderer","hTxtEle","sortEle","gui","chkAllBox","fltrMenuEle","prepareHeader","ariaAttr","innerDIV","e-mappinguid","checkAllWrap","matchFlColumns","extendPrepareHeader","gridObj","headerTextAlign","matchFilteredColumns","StackedHeaderCellRenderer","toolTip","IndentCellRenderer","GroupCaptionCellRenderer","fKeyValue","captionTemplate","GroupCaptionEmptyCellRenderer","ExpandCellRenderer","HeaderIndentCellRenderer","DetailHeaderIndentCellRenderer","DetailExpandCellRenderer","emptyGrid","headerRenderer","getRenderer","contentRenderer","Content","isLayoutRendered","emptyRow","events.cancelBegin","refreshComplete","isFActon","isNeedForeignAction","getFData","deffered_1","events.getForeignKeyData","disablePageWiseAggregates","validateGroupRecords","dataManagerFailure","deferred","sendBulkRequest","dmSuccess","dmFailure","renderEmptyRow","isTrigger","colspan","events.onEmpty","dynamicColumnChange","getCurrentViewRecords","updateColumnType","isColTypeDef","events.beforeDataBound","events.tooltipDestroy","prevPageMoving","totalRecordsCount","updatesOnInitialRender","events.dataReady","events.toolbarRefresh","events.actionFailure","buildColumns","events.autoCol","instantiateRenderer","addRenderer","cellrender","addCellRenderer","events.initialLoad","events.modelChanged","group0","groupN","addWhere","curFilter","rPredicate","updateGroupInfo","untouched","uGroup","itemGroup","uGroupItem","CellRendererFactory","cellRenderMap","RendererFactory","rendererMap","rName","ColumnWidthService","setColumnWidth","cWidth","setWidthToTable","Boolean","headerCol","getContentTable","fWidth","mHdr","contentCol","getSiblingsHeight","getHeightFromDirection","tWidth","setWidthToFrozenTable","freezeWidth","setWidthToMovableTable","movableWidth","FocusStrategy","currentInfo","oneTime","forget","skipFocus","focusByClick","prevIndexes","focusCheck","validator","passiveFocus","skipAction","getFocusInfo","elementToFocus","onClick","clearOutline","beforeArgs","byKey","byClick","clickArgs","event.beforeCellFocused","skipOn","keyArgs","bValue","swapInfo","jump","toHeader","toFrozen","getNextCurrent","setActiveByKey","clearIndicator","getFocusedElement","fContent","fHeader","setFocusedElement","addFocus","event.cellFocused","isJump","getInfo","focusedColumnUid","getColumnByIndex","refreshMatrix","FixedContentFocus","ContentFocus","FixedHeaderFocus","HeaderFocus","cFocus","updateRow","handlerInstance","focusElement","cellPosition","gridPosition","passiveHandler","event.keyPressed","event.click","event.contentReady","event.headerRefreshed","restoreFocus","event.batchAdd","event.batchCancel","event.batchDelete","event.detailDataBound","event.onEmpty","internalCellFocus","getPrevIndexes","forgetPrevious","getFocusable","inValid","rIndex","cIndex","keyActions","rightArrow","leftArrow","upArrow","downArrow","shiftRight","shiftLeft","indexesByKey","getCurrentFromAction","isPresent","shouldFocusChange","rN","cN","oRowIndex","oCellIndex","isDirty","frozenSwap","enterFrozen","optionals","defaultLen","isData","isSelectable","current1","current2","current3","SearchBox","searchFocus","searchBlur","__assign","assign","selectedRowIndexes","selectedRowCellIndexes","selectedRecords","isMultiShiftRequest","isMultiCtrlRequest","enableSelectMultiTouch","selectedRowState","chkAllCollec","isCheckedOnAdd","persistSelectedData","isCancelDeSelect","isPreventCellSelect","disableUI","factory","initializeSelection","onActionBegin","fDataUpdate","rowObj","getRowObj","gridElement","hidePopUp","isEditing","editModule","formObj","isPersistSelection","getSelectedMovableRow","getCurrentBatchRecordChanges","currentRecords","getBatchChanges","primaryKey","selectedMovableRow","selectData","getRowObjectFromUID","isRowType","isCtrlPressed","isShiftPressed","prevRowIndex","addMovableArgs","events.rowSelecting","clearRow","updateRowSelection","selectedRowIndex","events.rowSelected","updateRowProps","mRow","mObj","previousMovRow","selectRowsByRange","selectRows","getCollectionFromIndexes","rowIndexes","isSingleSel","rowIndexes_1","rowIdx","addRowsToSelection","rowIndexes_2","isUnSelected","rowDeselect","events.rowDeselecting","addRemoveClassesForRow","events.rowDeselected","clearRowSelection","isRowSelected","updatePersistCollection","chkState","pKey_1","updatePersistDelete","updateCheckBoxes","chkBox","checkedTarget","setCheckAllState","clearCellSelection","movableRow","rowDeselectObj","getSelectedMovableCell","getMovableCellFromIndex","getColIndex","isCellType","getCellFromIndex","prevCIdxs","currentCell","previousRowCellIndex","prevECIdxs","previousRowCell","getCellIndex","events.cellSelecting","clearCell","updateCellSelection","updateCellProps","selectedRowCellIndex","events.cellSelected","rIdx","selectCellsByRange","cellIndexes","stIndex","edIndex","cellSelectionMode","getLastColIndex","selectCells","rowCellIndexes","addRowCellIndex","addCellsToSelection","getMovableRowsObject","cellIndexes_1","selectedCellIdx","cellDeselect","events.cellDeselecting","events.cellDeselected","rowCellIndex","isRowAvail","getSelectedCellsElement","cLen","addMovableRows","gBRect","isDragged","isCellDrag","selectLikeExcel","allowRowDragAndDrop","postion","clearSelAfterRefresh","events.initialEnd","events.cellSelectionComplete","events.inBoundModelChanged","events.cellFocused","onCellFocused","actionBeginFunction","actionCompleteFunction","refreshHeader","addEventListener_checkbox","removeEventListener_checkbox","getCheckAllBox","checkBoxSelectionChanged","initPerisistSelection","checkboxMode","gobj","checkboxColumn","chkField","ensureCheckboxFieldSelection","refreshPersistSelection","setRowSelection","checkState","editChkBox","onDataBound","checkSelectAllAction","cRenderer","editForm","stateStr","getCheckAllStatus","triggerChkChangeEvent","checkSelect","rowCellSelectionHandler","moveIntoUncheckCollection","updateSelectedRowIndex","selectedVal","checkedLen","spanEle","popUpClickHandler","chkSelect","checkboxOnly","headerAction","thLen","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","ctrlPlusA","applySpaceSelection","applyUpDown","getSelectedRecords","getRowsObject","onDataBoundFunction","actionCompleteFunc","actionCompleteHandler","events.click","searchString","refreshSearch","events.searchComplete","onSearchComplete","cancelBeginEvent","ShowHide","showBy","getToggleFields","hideBy","getKeyBy","allowSelection","Scroll","lastScrollTop","oneTimeReady","toolbarModule","mHdrHeight","ensureOverflow","setPadding","getThreshold","cssProps","getCssProperties","removePadding","setScrollLeft","headerModule","getMovableHeader","onContentScroll","scrollTarget","isPreventScrollEvent","onFreezeContentScroll","onWheelScroll","deltaMode","onTouchScroll","pageXY","getPointXY","setPageXY","getFooterContent","isAsyncPrint","printing","renderPrintGrid","isPrintGrid","printGridModel","printGridProp","printMode","printGrid","selectedRows","removeColGroup","waitingPop","events.printComplete","groupCaption","colGroups","AggregateColumn","getTemplate","setPropertiesSilent","AggregateRow","Clipboard","copyContent","isSelect","events.keyPressed","clipBoardTextArea","setCopyData","withHeader","headerTextArray","getCopyData","checkBoxSelection","colIndexes","getColumnHeaderByIndex","isCell","isElement","queryCommandSupported","rowCellIndxes","getSelectedRowCellIndexes","SortDescriptor","SortSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","GroupSettings","EditSettings","inViewIndexes","freezeRefresh","mergePersistGridData","keyEntity","ignoreInArrays","ignoreOnColumn","ignoreInColumn","allowExcelExport","allowPdfExport","isDetail","toolbarTemplate","isCommandColumn","allowAdding","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","mediaCol","filterOperators","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","EmptyRecord","True","False","InvalidFilterMessage","GroupDropArea","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Update","Pdfexport","Excelexport","Wordexport","Csvexport","Columnchooser","EditOperationAlert","DeleteOperationAlert","SaveButton","OKButton","CancelButton","EditFormTitle","AddFormTitle","BatchSaveConfirm","BatchSaveLostChanges","ConfirmDelete","CancelEdit","ChooseColumns","SearchColumns","Matchs","FilterButton","ClearButton","StartsWith","EndsWith","Contains","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","ChooseDate","EnterValue","Ungroup","autoFitAll","autoFit","Export","FirstPage","PreviousPage","SortAscending","SortDescending","EditRecord","DeleteRecord","FilterMenu","Blanks","FilterTrue","FilterFalse","NoResult","ClearFilter","NumberFilter","TextFilter","DateFilter","DateTimeFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","ctrlDownArrow","ctrlUpArrow","ctrlPlusP","ctrlPlusC","ctrlShiftPlusH","renderModule","getMediaColumns","processModel","gridRender","addListener","updateStackedFilter","gcol","getShowHideService","hideAtMedia","media","mediaQueryUpdate","showHider","refreshMediaCol","eventInitializer","hasGridChild","removeListener","toolTipObj","focusModule","checkCursor","requireRefresh","requireGridRefresh","updateColumnObject","rowTemplateFn","detailTemplateFn","extendedPropertyChange","updateRTL","getToolbar","getContextMenu","columnMenuModule","getColumnMenu","events.rtlUpdated","updateResizeLines","updateGridLines","columnMenuItems","applyTextWrap","removeTextWrap","isModeChg","pending_1","gResult_1","enableHover","filterModule","refreshFilter","headerRows_1","updateColumnModel","columnModel","updateFrozenColumns","isRefresh","inview","vLen","stackedHeader","individualColumn","stackedColumn","getLocaleConstants","setColumnIndexesInView","setGridHeaderContent","setGridContentTable","setGridContent","setGridHeaderTable","footerElement","getFooterContentTable","getPager","gridPager","setGridPager","getRowInfo","rowsObject","mrows","dRows","setCellValue","fieldIdx","mTr","pkName","movableSelectedRow","rowObjects","movableRowObjects","sRow","events.refreshFooterRenderer","events.groupAggregates","events.queryCellInfo","setRowData","rowObject","getColumnHeaderByField","getColumnHeaderByUid","getUidByColumnField","getColumnFieldNames","columnNames","getDetailTemplate","getSelectedRows","showColumns","hideColumns","getFrozenCount","getVisibleFrozenColumns","getVisibleFrozenColumnsCount","getVisibleFrozenCount","visibleFrozenColumns","pageNo","pagerModule","updateExternalMessage","sortColumn","isMultiSort","sortModule","clearSorting","removeSortColumn","filterByColumn","filterOperator","filterValue","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","deleteRecord","fieldname","closeEdit","addRecord","clipboardModule","recalcIndentWidth","indentWidth","perPixel","events.columnWidthChanged","reorderColumns","fromFName","toFName","reorderModule","autoFitColumns","resizeModule","createColumnchooser","columnChooserModule","renderColumnChooser","valueFormatterService","gCols","sCols","sLen","showGroupedColumn","parentDetails","parentKeyFieldValue","initForeignColumn","events.initForeignKeyColumn","rendererFactory","createGridPopUpElement","getTooltipStatus","htable","ctable","isEllipsisTooltip","myTableDiv","mySubDiv","myTable","myTr","mytd","mouseClickHandler","dblClickHandler","allowKeyboard","dataBoundFunction","checkEdit","events.dblclick","filterClear","keyPress","saveCell","events.editNextValCell","mergeColumns","storedColumn","ind","localCol","setInjectedModules","refreshColumns","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","groupColumn","groupModule","ungroupColumn","isContextMenuOpen","ensureModuleInjected","propertyNames","contentRefresh","isModelChanged","aria","sortedColumn","getSortedColsIndexByField","sortedCols","sCol","getSortColumnFromField","lastSortedCol","allowMultiSorting","backupSettings","removeSortIcons","updateSortedCols","lastSortedCols","lastCols","restoreSettings","refreshSortSettings","addSortIcons","events.sortComplete","refreshSortIcons","colObj","initiateSort","showPopUp","allowUnsort","enableSortMultiTouch","filterElement","updateAriaAttr","NumericContainer","pagerElement","renderNumericContainer","refreshNumericLinks","updateTotalPages","updateLinksHtml","updateStyles","pagerObj","renderFirstNPrev","renderPrevPagerSet","renderNextPagerSet","renderNextNLast","pagerContainer","prevPager","PP","nextPager","NP","previousPageNo","currentPageSet","customText","updateFirstNPrevStyles","updatePrevPagerSetStyles","updateNextPagerSetStyles","updateNextNLastStyles","firstPage","firstPageDisabled","prevPageDisabled","lastPageDisabled","nextPageDisabled","PagerMessage","pageNoMsgElem","pageCountMsgElem","regx","Pager","defaultConstants","currentPageInfo","totalItemsInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","pagerAllDropDown","containerModule","pagerMessageModule","enableExternalMessage","checkpagesizes","pagerTemplate","initLocalization","renderFirstPrevDivForDevice","enablePagerMessage","renderNextLastDivForDevice","pagerdropdownModule","addAriaLabel","externalMessageModule","checkGoToPage","currentPageChanged","setDropDownValue","pageSizes","newPageNo","oldPageNo","enableQueryString","updateQueryString","getPagerTemplate","updatedUrl","getUpdatedURL","PagerDropDown","pagerDropDownDiv","dropDownDiv","defaultTextDiv","pagerCons","pageSizesModule","pageSizesArray","convertValue","dropDownListObject","beforeValueChange","pageSizeValue","ExternalMessage","externalMessage","Global","pagerDestroy","gridExtend","dropDownChanged","addAriaAttr","numericContainerNew","numericContainer","numericContainerDiv","isForceCancel","appendToElement","handlers","complete","inboundChange","events.pageComplete","FilterCellRenderer","fltrData","filterBarTemplate","templateWrite","FlMenuOptrUI","customFltrOperators","customFilterOperators","renderOperatorUI","dlgConetntEle","dlgObj","optrData","customOptr","operators","dropDatasource","selectedValue","dropSelectedVal","optrDiv","optrInput","dropOptr","dropDownOpen","selValue","selectedField","getFlOperator","StringFilterUI","serLocator","actObj","getAutoCompleteOptions","getOptrInstance","localizeText","filteredValue","filterOptr","filterObj","actuiObj","NumberFilterUI","numericTxtObj","BooleanFilterUI","dropInstance","drpuiObj","DateFilterUI","fltrSettings","inputElem","datePickerObj","FilterMenuRenderer","fltrObj","isDialogOpen","colTypes","boolean","datetime","flMuiObj","renderDlgContent","mainDiv","dlgDiv","filterBtnClick","clearBtnClick","renderFilterUI","writeMethod","renderFlValueUI","valueDiv","instanceofFilterUI","ui","dlgContentEle","flValue","flOptrValue","targ","fltrValue","flIcon","ExcelFilter","getCMenuDS","unwireExEvents","cmenu","createMenu","isCheckIcon","menu","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","clickExHandler","destroyCMenu","menuObj","submenu","isCMenuOpen","selectedMenu","preventClose","client","contextRect","getContextBounds","getCMenuYPosition","contextWidth","filterLength","renderDialogue","complexFieldName","overlayClick","removeDialog","createdDialog","dateTimePicker","renderCustomFilter","fieldSet","checkBoxValue","colValue","fOperator","sValue","sOperator","andRadio","firstOperator","firstValue","secondOperator","secondValue","fieldElement","xlfloptr","menuText","getSelectedValue","getSelectedText","renderRadioButton","radioDiv","frstpredicate","secndpredicate","renderMatchCase","orRadio","isFilteredCol","fltrPredicates","columnObj","valueInput","renderAutoComplete","renderNumericTextBox","renderDate","renderDateTime","matchCaseDiv","matchCaseInput","completeAction","columnvalue","performComplexDataOperation","returnObj","duplicateMap","cellText","nextFlMenuOpen","Excel","fltrDlgDetails","getLocalizedCustomOperators","fltrElem","updateFilterMsg","filterBarElement","currentFilterObject","getFilteredColsIndexByField","currentFilteringColumn","events.filterComplete","events.filterOpen","columnMenuFilter","filterIconClickHandler","filterCell","checkForSkipInput","filterStatusMsg","applyColumnFormat","addFilteredClass","checkAlreadyColFiltered","getFlvalue","setFormatForFlColumn","refreshFilterSettings","updateFilter","getFilterBarElement","fltrElement","filterDialogOpen","customOperators","filterHandler","localizedStrings","currentFilterColumn","closeHeaderEle","processFilter","updateCrossIcon","getFormatFlValue","showFilterBarStatus","isSkip","skipInput","startTimer","onTimerTick","immediateModeDelay","templateRead","validateFilterValue","getOperator","singleOp","multipleOp","=","!","numOptr","stringOperator","numberOperator","dateOperator","datetimeOperator","booleanOperator","gClient","fClient","datepickerEle","targetText","filterIconElement","refreshFilterIcon","resizeClassList","suppress","isDblClk","findColumn","resizeColumn","footerTable","headerTextClone","contentTextClone","indentWidthClone","detailsElement","contentText","wHeader","wContent","columnbyindex","calcTableWidth","offsetWidthValue","refreshHeight","setHandlerHeight","getResizeHandlers","resizeStart","callAutoFit","getTargetColumn","refreshColumnWidth","mtbody","ftbody","mtr","ftr","parentElementWidth","appendHelper","getPointX","minMove","removeHelper","cancelResizeAction","resizeEnd","setHelperHeight","mousemove","colData","isFrozenColResized","doubleTapEvent","calcPos","fLeft","parentOffset","getUserAgent","timeoutHandler","Reorder","events.reorderComplete","createReorderElement","chkDropPosition","srcElem","destElem","closestElement","targetParentContainerIndex","chkDropAllCols","isFound","findColParent","getColumnsModel","subCols","uId","destElemUid","destColumn","sourceUid_1","colMatchIndex_1","destUid_1","moveColumns","oldIdx","column_2","destIndex","getColParent","srcIdx","fromIndex","flatColumns","fTh","mTh","fHeaders","fColumn","setDisplay","updateScrollPostion","updateArrowPosition","draggableType","cliRect","cliRectBaseLeft","cliRectBaseRight","scrollElem","cliRectBase","RowDD","events.rowDragStart","dropElem","rowDropSettings","isDragStop","getElementFromPosition","events.rowDrag","events.rowDrop","events.rowDragAndDropComplete","getTargetIdx","targetRow","srcControl","targetIndex","isAppliedGroup","isAppliedUnGroup","groupGenerator","events.groupComplete","events.ungroupComplete","onGroupAggregates","grpRow","expandCollapseRows","applySortFromTarget","unGroupFromTarget","toogleGroupFromHeader","showToggleButton","gHeader","cellIdx","rowNodes","expandElem","renderGroupDropArea","initDragAndDrop","refreshToggleBtn","groupElem","updateGroupDropArea","dragLabel","initializeGHeaderDrop","initializeGHeaderDrag","colName","addColToGroupDrop","groupAddSortingQuery","removeColFromGroupDrop","groupedColumn","childDiv","ej-mappingname","headerCell","showUngroupButton","getGHeaderCell","updateGroupedColumn","updateButtonVisibility","clearGrouping","editedData","iterateGroupAggregates","summaryRows","dataUid","events.refreshAggregateCell","deletedCols","changeds","mergeData","pKeyVal","cItem","eData","aggr","aggrds","DetailRow","toogleExpandcollapse","uid_1","isDetailRow","detailRow","detailCell","parentPrimaryKeys","parentKeyField","parentRowData","injectedModues","gridElem","idx_1","events.detailDataBound","detailElement","getTDfromIndex","predefinedItems","gridID","preItems_1","localeName","ColumnChooser","createToolbar","toolbarClickHandler","viewStr","searchElement","refreshToolbarItems","updateSearchBox","hasData","toolbarItems_1","getItemObject","itemObject","gID","tarElement","searchBoxObj","FooterRenderer","gridModule","modelGenerator","movableContent","fDiv","mDiv","frozenContent","tFoot","freezeTable","renderSummaryContent","cStart","cEnd","summaries","dummies","fragment","rowrenderer","srow","frozenDiv","onScroll","refreshCol","mheaderCol","fheaderCol","onWidthChange","getColFromIndex","updateFooterTableWidth","fCol","mergeds","initds","addrow","idVal","currentds","curIndx","agrVal","SummaryCellRenderer","refreshWithAggregate","cellNode","curCell","Aggregate","initiateRender","cellFac","footerRenderer","prepareSummaryInfo","getFormatFromType","cModel","InterSectionObserver","fromWheel","sentinelInfo","containerRect","entered","observe","onEnterCallback","virtualScrollHandler","debounced100","debounced50","sentinel","setPageHeight","VirtualRowModelGenerator","cOffsets","rowModelGenerator","notifyArgs","virtualInfo","loadNext","loadSelf","nextInfo","getBlockIndexes","loadedBlocks","checkAndResetCache","blockIndexes","isBlockAvailable","getStartIndex","updateGroupRow","columnIndexes","blk","getColumnIndexes","calWidth","iOffset","offsetVal","refreshColOffsets","gLen","currentFirst","iterateGroup","oRow","VirtualContentRenderer","preventEvent","tmpOffsets","VirtualElementHandler","offsetKeys","eventListener","vgenerator","renderWrapper","renderPlaceHolder","debounceEvent","getBlockHeight","observer","adjustTable","scrollListener","scrollArgs","viewInfo","getInfoFromView","prevInfo","tempBlocks","infoType","getPageFromTop","ensureBlocks","mIdx","old","isEndBlock","getTotalBlocks","newChild","cBlock","cOffset","getColumnOffset","refreshOffsets","getTranslateY","setWrapperWidth","setVirtualHeight","onDataReady","maxPage","resetScrollPosition","cHeight","isOnenter","endTranslate","blockHeight","maxBlock","onEntered","getBlockSize","totalBlocks","startIdx","bSize","rem","refreshVirtualElement","VirtualHeaderRenderer","gen","VirtualScroll","ensurePageSize","blockSize","InlineEditRender","addNew","mTbody","getEditElement","renderMovableform","events.frozenHeight","movableForm","updateFreezeEdit","getFreezeRow","fHdr","tdElement","refreshFreezeEdit","fCls","mTd","updateFrozenCont","td_1","BatchEditRender","columnObject","DialogEditRender","events.dialogDestroy","setLocaleObj","primaryKeyValue","dialogClose","events.destroyForm","dataCell","EditRender","Inline","Batch","getEditElements","convertWidget","fForm","cols_1","tArgs","BooleanEditCell","activeClasses","selectChkBox","editRow","checkBoxChange","DropDownEditCell","ddActionComplete","dlgElement","NumericEditCell","DefaultEditCell","NormalEdit","allowEditOnDblClick","editComplete","editRowIndex","primaryKeys","primaryKeyValues","applyFormValidation","editFormValidate","form1","form2","mFormObj","getCurrentEditedData","mForm","addedRowIndex","destroyElements","destroyWidgets","editHandler","edSucc","edFail","editSuccess","editFailure","updateCurrentViewData","requestSuccess","stopEditStatus","dataLen","tmpRecord","contained","mElem","editMElem","events.doubleTap","events.deleteComplete","events.saveComplete","InlineEdit","BatchEdit","cellDetails","events.beforeCellFocused","onBeforeCellFocused","setCellIdx","editCell","isAddRow","validateFormObj","isLastCellPrimaryKey","editCellFromIndex","removeRowObjectFromUID","events.batchCancel","refreshRowIdx","bulkDelete","bulkAddRow","batchSave","batchChanges","mergeBatchChanges","addRowObject","getIndexFromData","uniqueid","events.batchDelete","nonMovableRows","defaultData","getDefaultData","events.batchAdd","findNextEditableCell","args1","isValOnly","validation","validationRules","checkNPCell","dValues","mRowData","colIdx","getDataByIndex","getCellIdx","isColored","updateCell","setChanges","rowcell","isForceSave","cloneEditedData","visibleColumns","addCancelWhilePaging","DialogEdit","DatePickerEditCell","TemplateEditCell","editCellType","dropdownedit","numericedit","datepickeredit","datetimepickeredit","booleanedit","defaultedit","templateedit","updateEditObj","createAlertDlg","createConfirmDlg","updateColTypeObj","tapEvent","alertDObj","refreshToolbar","showDeleteConfirmDialog","endEditing","getCurrentEditCellData","getValueFromType","destroyToolTip","dlgWidget","dlgOk","dlgCancel","alertClick","btnOptions","executeAction","inputs","preventObj","mRules","createFormObj","validationComplete","valErrorPlacement","getElemTable","isFHdr","gcontent","isScroll","inputClient","showColumn","hideColumn","isDlgOpen","dlghide","initialOpenDlg","stateChangeColumns","isInitialOpen","isCustomizeOpenCC","searchOperator","rtlUpdate","enableAfterRenderEle","hideDialog","clearActions","refreshCheckboxState","columnChooserSearch","removeCancelIcon","refreshCheckboxButton","targetdlg","hideOpenedDialog","addcancelIcon","events.beforeOpenColumnChooser","mOpenDlg","openColumnChooser","renderChooserList","customDialogOpen","customDialogClose","columnChooserManualSearch","confirmDlgBtnClick","ccsearchele","ccsearchicon","conDiv","innerDivContent","refreshCheckboxList","columnStateChange","dialogInstance","stateColumns","colUid","currentCol","checkstatecolumn","coluid","searchVal","fltrCol","clearSearch","buttonEle","nMatchele","checkBoxClickHandler","checkstate","columnUid","srchShowCols","searchData","itemsLen","columnUID","hideCols","gdCol","gridObject","currentCheckBoxColls","cbox","cclist","hideColState","showColState","cccheckboxlist","searchValue","openCC","dlgEle","dlgLen","ExportHelper","hideColumnInclude","getColumnData","columnPromise","fColumns","getHeaders","isHideColumnInclude","measureColumnDepth","actualColumns","processColumns","processHeaderCells","removeCellFromRow","generateActualColumns","getConvertedWidth","getCellCount","resultCells","appendGridCells","isFirstColumn","isLastColumn","isIgnoreFirstCell","gridColumn","ExportValueFormatter","returnFormattedValue","formatCellValue","ExcelExport","book","workSheet","rowLength","expType","includeHiddenColumn","isCsvExport","isElementIdChanged","isExporting","exportValueFormatter","exportProperties","isCsv","processRecords","processInnerRecords","groupedColLength","blankRows","multipleExport","processExcelHeader","groupIndent","processHeaderContent","processRecordContent","events.excelExportComplete","blobPromise","currentViewRecords","processRecordRows","processGroupedRows","processAggregates","processExcelFooter","getCaptionThemeStyle","groupCaptionSummaryRows","fillAggregates","lIndex","hIndex","tCell","rLen","excelCellArgs","getColumnStyle","rec","byGroup","summaryModel","groupSummaryRows","sRows","customIndex","cells_2","Sum","Average","Max","Min","TrueCount","FalseCount","getAggreateValue","wholeText","JSON1","JSON2","attrname","gridCell","getHeaderThemeStyle","excelHeaderCellArgs","events.excelHeaderQueryCellInfo","getRecordThemeStyle","updateThemeStyle","themestyle","noRows","updatedCellIndex","footerRows","spannedCells_1","PdfExport","customDataSource","isGrouping","processExport","events.pdfExportComplete","gridTheme","processExportProperties","headerThemeStyle","headerFont","headerBrush","processGridHeaders","setColumnProperties","captionThemeStyle","getSummaryCaptionThemeStyle","processGroupedRecords","processRecord","penBrushColor","groupIndex","dataSourceItems","captionSummaryModel","gridHeader","events.pdfHeaderQueryCellInfo","getHorizontalAlignment","getVerticalAlignment","pdfPageSettings","getPageSize","fromTop","drawPageTemplate","fromBottom","processContentValidation","drawPageNumber","getBrushFromContent","textPenColor","penColor","setContentFormat","documentHeader","textBrushColor","brushColor","getPageNumberStyle","pageNumberType","compositeField","getPenFromContent","penSize","getDashStyle","isCaption","captionRow","sRows_1","leastCaptionSummaryIndex","getSummaryWithoutTemplate","setRecordThemeStyle","verticalAlign","getFontFamily","bigint","CommandColumnRenderer","unbounDiv","renderButton","buttonOption","commandType","commandClickHandler","batchEdit","editIcon","pager","ungroup","excel","fPage","nPage","pPage","descending","groupHeader","touchPop","enableAfterRenderMenu","exportItems","exportGroup","getLastPage","totalpage","targetColumn","closestGrid","hiddenSepItems","showSepItems","dItem","ensureDisabledStatus","ensureFrozenHeader","AutoFitAll","AutoFit","CsvExport","PrevPage","FreezeRowModelGenerator","isFrzLoad","FreezeContentRender","setFrozenContent","setMovableContent","getMovableContent","getFrozenContent","mTbl","FreezeRender","refreshFreeze","setFrozenHeight","rfshMovable","updateColgroup","setFrozenHeader","setMovableHeader","getFrozenHeader","refreshStackedHdrHgt","addMovableFirstCls","movablefirstcell","filterRow","hdrClassList","setWrapHeight","updateResizeHandler","isContReset","isStackedHdr","fRowHgt","mRowHgt","isWrap","tBody","movableContentHeight","fRowSpan","mRowSpan","fTr","getRowSpan","updateStackedHdrRowHgt","rSpan","minRowSpan","maxRowSpan","frozenHeader","movableHeader","mTable","Freeze","ColumnMenu","GROUP","UNGROUP","ASCENDING","DESCENDING","FILTER","POP","WRAP","CHOOSER","getColumnMenuHandlers","columnMenuHandlerDown","columnMenu","unwireFilterEvents","columnMenuHandlerClick","getHeaderCell","openColumnMenu","isFilterItemAdded","filterPosition","columnMenuItemClick","columnMenuBeforeOpen","columnMenuOnClose","beforeMenuItemRender","columnMenuBeforeClose","wireFilterEvents","appendFilter","isChooserItem","colChooser","getFilter","isFilterPopupOpen","defultItems_1","getDefault","getDefaultItem","createChooserItems","filterPopup","getFilterPop","gridPos","liPos","ForeignKey","initForeignKeyColumns","generateQueryFormData","foreignColumns","genarateColumnQuery","genarateQuery","responses","fromData","needQuery","queryColumn","isTrue","filterColumn","destroyEvent","index.Grid","index.Filter","index.Page","index.Sort","index.Group","index.Reorder","index.RowDD","index.DetailRow","index.Toolbar","index.Aggregate","index.VirtualScroll","index.Edit","index.Resize","index.ExcelExport","index.PdfExport","index.CommandColumn","index.Freeze","index.ColumnMenu","index.ColumnChooser","index.ForeignKey","BubbleData","PaletteCollection","ColorCollection","BubbleTooltipData","mappingName","bubbleData","LegendColorCollection","PaletteSettings","CellColor","heatMap","convertToRGB","previousOffset","previousColor","getEqualColor","nextColor","getPercentageColor","convertToHex","itemColor","colorSplit","prevColor","getPercentage","getColorCollection","colorCollection","legendColorCollection","bubbleSizeWithColor","minColorValue","dataSourceMinValue","maxColorValue","dataSourceMaxValue","emptyPointColor","paletteSettings","emptyCellColor","tempcolorMapping","orderbyOffset","isCompact","updateLegendColorCollection","returnCollection","PaletterColor","getColorByValue","rbg","compareValue","cellSettings","tileType","bubbleType","fontModel","CurrentRect","basic","TextBasic","LineOption","dasharray","PathAttributes","DrawSvgCanvas","isFromSeries","enableCanvasRendering","drawCanvasRectangle","canvasRenderer","drawCanvasCircle","drawCanvasPath","canvasDrawText","createWrapText","GradientColor","CanvasTooltip","GradientPointer","pathX1","pathY1","pathX2","pathY2","pathX3","pathY3","CurrentLegendRect","heatMapTitleFont","rectLabelFont","tooltipLabels","axisLabelSize","axisLabelInterval","dateTimeAxisLabelInterval","getTitleSize","getMaxLabelSize","calculateNumericAxisLabels","adaptorMin","adaptorMax","adaptorModule","isCellData","adaptiveXMinMax","adaptiveYMinMax","calculateCategoryAxisLabels","calculateDateTimeAxisLabel","showLabelOn","calculateLabelInterval","getTotalLabelLength","numberOfDays","years","AxisHelper","drawSvgCanvas","drawXAxisLine","compactInterval","axisInterval","tempintervel","lableStrtX","lableRect","labelInterval","lableStartY","CellSettings","cellColor","renderRectSeries","createSeriesGroup","tempBorder","tempX","tempY","dataXIndex","dataYIndex","cellSetting","tempHeight","tempRectPosition","rectPositionCollection","bubbleColorValue","getBubbleRadius","setTextAndColor","rectPosition","updateRectDetails","renderTileCell","updateLabelVisibleStatus","renderBubbleCell","renderSectorCell","checkLabelXDisplay","checkLabelYDisplay","tempCircleRadius","getRadiusBypercentage","showLabel","getFormatedText","themeCellTextStyle","containerTextObject","containerRectObject","adaptData","clonedDataSource","isColorValueExist","tempBubbleCollection","isJsonData","adaptorType","bubbleDataMapping","bubblePosition","curve","cX","cY","X1","Y1","tempcX","tempcY","pathBorderWidth","tempColor","sectorContibution","sector","tempMaxString","valueInPrecentage","isInversedBubbleSize","highlightSvgRect","tempID","tempRectHoverClass","enableCellHighlighting","getCurrentRect","firstRectDetails","heatMapSeries","rectX","rectY","hoverXAxisLabel","hoverXAxisValue","hoverYAxisLabel","hoverYAxisValue","TwoDimensional","tempCloneData","completeDataSource","tempVariable","dataLength","cloneDataIndex","minMaxDatasource","tempSizeArray","tempColorArray","processDataArray","minMaxVal","getMinMaxValue","internalArray","tempx","minMaxValue","getMinValue","getMaxValue","performSort","checkmin","maxLegendLabelSize","gradientScaleSize","segmentCollections","textWrapCollections","previousOptions","listPerPage","numberOfPages","listWidth","legendRect","lastList","navigationCollections","pagingRect","listInterval","legendLabelTooltip","labelXCollections","labelYCollections","legendXCollections","legendYCollections","legendRectPositionCollection","renderLegendItems","rectItems","legendRectScale","rectItemsSvg","enableSmartLegend","horizontalGradient","legendMinValue","legendMaxValue","gradientOptions","gradientColor","cgradientColors","gradientPercentage","linearGradient","rectItem","renderColorAxisGrid","renderSmartLegend","labelDisplayType","renderLegendLabel","legendScale","listRect","translategroup","calculateListPerPage","renderListLegendMode","smartLegendRect","legendY","dominantBaseline","textWrapWidth","legendRectPadding","textBasic","renderGradientPointer","legendPath","cellValue","removeGradientPointer","gradientPointer","paletteCollection","calculateListLegendBounds","perListWidth","numberOfRows","calculateLegendSize","legendTop","axisTitlePadding","calculateGradientScale","measureListLegendBound","rightArrowX","rightArrowY","pagingTextRect","rightArrowRect","leftArrowRect","leftOption","rightOption","calculateColorAxisGrid","legendPart","maxTextWrapLength","previousSegmentWidth","nextSegmentWidth","legendElement","renderLegendLabelTooltip","division","isNext","createTooltipDiv","currentLegendRect","tempTooltipText","HeatMap","heatMapAxis","twoDimensional","tempTooltipRectId","updateBubbleHelperProperty","processInitData","calculateMaxLength","completeAdaptDataSource","showHideTooltip","reRenderDatasource","constructDatasource","setRenderMode","legendVisibilityByCellType","renderSecondaryElement","heatMapTitle","isHeatmapRect","lastRectDetails","cellTextColor","heatMapMouseClick","heatMapMouseMove","heatMapMouseLeave","heatMapResize","xAxisMax","yAxisMax","svgCanvasRect","xLabel","yLabel","cellElement","isheatmapRect","showGradientPointer","tooltipTimer","isFadeout","legendTooltipTimer","gradientTimer","main","AdaptiveMinMax","reconstructedXAxis","reconstructedYAxis","processJsonTableData","processJsonCellData","constructAdaptiveAxis","processCellData","getNumericAxisCollection","getDateAxisCollection","loopIndex","tempAxisColl","dataIndex","adaptordata","tempDataCollection","xLabels","yLabels","currentDataXIndex","currentDataYIndex","reconstructData","xindex","getSplitDataValue","xDataMapping","yDataMapping","valueMapping","tempSplitDataCollection","tempSplitData","splitIndex","isShow","hetmapSeries","value2","argData","index.HeatMap","index.Adaptor","VisibleRange","Align","calculateAxesBounds","containerBounds","checkThermometer","checkAlign","calculateLineBounds","calculateTickBounds","calculateLabelBounds","calculatePointerBounds","calculateRangesBounds","labelBounds","prevAxis","checkPreviousAxes","major","minor","majorInterval","majorTickBounds","minorTickBounds","calculateMarkerBounds","calculateBarBounds","endVal","rangePalettes","Animations","performMarkerAnimation","markerType","currentPath","performBarAnimation","clipVal","lineY","pointerValue","startPointerVal","axisElements","gaugeAxesG","axisObject","drawRanges","drawTicks","axisAlign","tranX","nearAxisWidth","farAxisWidth","containerObject","tickID","tickBounds","tickPath","pointesGroup","pointerClipRectGroup","pointerID","gaugeResized","drawBarPointer","renderAnnotationElements","secondaryID","annotationGroup","createAnnotationTemplate","getTooltipLocation","tooltipPos","lineX","lineId","LinearGauge","renderGaugeElements","renderAxisElements","appendSecondaryElement","titleBounds","actualRect","moveOnPointer","mouseElement","gaugeOnMouseMove","svgPath","markerDrag","triggerDragEvent","barDrag","elementExist","index.LinearGauge","index.ListView","index.Virtualization","MinMax","GeoLocation","PolylineOption","PatternOptions","patternContentUnits","patternTransform","MapAjax","sendData","dataOptions","mapsTitleFont","mapsSubTitleFont","legendTitleFont","FabricTheme","BootstrapTheme","HighContrastTheme","ColorMappingSettings","HighlightSettings","NavigationLineSettings","showArrow","BubbleSettings","CommonTitleSettings","SubTitleSettings","TitleSettings","ShapeSettings","LayerSettings","isBaseLayer","Tile","MapsAreaSettings","layerRendering","shapeRendering","markerRendering","markerMouseMove","dataLabelRendering","bubbleRendering","bubbleMouseMove","legendRendering","annotationRendering","itemSelection","itemHighlight","BingMap","getBingMap","subDomains","subDomain","quadKey","tileZoomLevel","digit","ColorMapping","getShapeColorMapping","colorValuePath","valuePath","shapeColor","colorMapping_1","LayerPanel","ajaxProcessCount","ajaxModule","ajaxResponse","measureLayerPanel","secondaryEle","isTileMap","tileSvgObject","layerGroup","processLayers","renderTileLayer","bing","currentFactor","panTileMap","generateTiles","markerModule","navigationLineModule","renderNavigation","translateLayerElements","layerType","bing_1","bingMapType","featureData","bbox","calculateRectBounds","calculatePathCollection","bubbleCalculation","bubbleSettings","bubbledata","renderData","groupElements","geometryData","coords","generatePoints","labelTemplateEle","currentShapeData","polyLineOptions","shapeID","drawingType","generateMultiPolygonPath","lineData","bubbleG","bubbleModule","bubble_1","renderBubble","bubbleIndex","coordinates","calculatePolygonBox","multiPolygonDatas","horFactor","verFactor","layerElement","baseTranslatePoint","baseScale","calculateRectBox","currentCoords","userLang","xcount","ycount","baseLayer","baseLayerIndex","urlTemplate","proxTiles","proxTiles_1","baseTile","subtile","arrangeTiles","tileElment","tiles_1","factorX","factorY","availSize","annotationXValue","annotationYValue","Maps","baseTileTranslatePoint","setTextStyle","setBackgroundValue","subtitleSettings","setLabelFont","mapsArea","layers_1","findBaseAndSubLayers","addTabIndex","processRequestJsonData","serverProcess","queryModule","processResponseJsonData","processAjaxRequest","localAjax","processType","renderMap","createTile","createZoomingToolbars","arrangeTemplate","zoomingChange","layerCollectionEle","tileRect","tileSvgRect","markerTemplateElements","templateGroupEle","toolBarGroup","alignToolBar","applyTransform","layerOffset","currentTemplate","templateOffset","mainLayer","parentRect","baseIndex","mainLayers","subLayers","subLayer","subLayerIndex","trimmedTitle","mapsOnClick","mapsOnDoubleClick","mouseDownOnMap","mouseMoveOnMap","mouseEndOnMap","mapsOnResize","markerClick","bubbleClick","bubbleMove","zoomByPosition","performZooming","addMarker","currentMarker","findVisibleLayers","isBubbleVisible","isMarkersVisible","isDataLabelVisible","isNavigationVisible","getBubbleVisible","isLayerVisible","isBubblevisible","istooltipVisible","layers_2","navigationLine_1","navigation","highlightSettings","markers_1","bubbles_1","bubble","Bubble","bubbleCollection","bubbleValue","getRatioOfBubble","shapePoints","midIndex","layer_1","bubbleElement","LayerIndex","BubbleIndex","DataIndex","transPoint","animationDelay","bubbleRadius","getbubble","trackElements","markerSVGObject","markerTemplateEle","markerIndex","markerData","markerID","shapeCustom","getMarker","rightWidth","leftWidth","heightTop","heightBottom","getDataLabel","shapeName","datasrcObj","labelpath","shapePoint","textLocation","eventargs","datalabel","trimmedLable","location1","xpositionEnds","xpositionStart","smartLabelMode","intersectionAction","border_1","NavigationLine","navigationEle","arrowColor","arrowSize","arrowSettings","arrowPosition","startArrow","endArrow","offSet","offSetValue","navigationGroup","arcId_1","radius_1","convertRadius","triId","legendBorderRect","interactiveLocation","legendItemRect","heightIncrement","widthIncrement","textMaxWidth","drawLegend","legendRenderingCollections","getLegends","getMarkersLegendCollections","legendTitle","titleTextStyle","legendItemStartX_1","legendItemStartY_1","legendMode","shapeLocation","labelAction","labelDisplayMode","arrangement","legendtitleSize","itemTextStyle","legendLength","position_1","textX_1","textY_1","itemStartX","itemStartY","maxTextWidth","itemTextSize","legendItem","legendTextSize","prvePositionX","nextPositionY","getPageChanged","prevPositionY","nextPositionX","DisplayText","ImageSrc","legendObj","getRangeLegendCollection","getEqualLegendCollection","getDataLegendCollection","shapeBorder","itemId","renderLegendBorder","shapeSize","shapeId","renderOptions_1","pagingGroup","pagingFont","pagingTextSize","leftPageX","rightPageX","pageTextX","leftPageElement","rightPageElement","rightPath","leftPath","leftPageOptions","leftRectPageOptions","rightPageOptions","rightRectPageOptions","pageTextOptions","trimTitle","getLegendAlignment","changeNextPage","imageSrc","rangeData_1","colorMapProcess_1","getLegendData","legendFill","getOverallLegendItemsCollection","legendData","newColllection","equalData_1","eqaulColorProcess_1","colorMapping_2","interactiveHandler","hoverId","renderInteractivePointer","invertedPointer","Highlight","addHighlight","mapHighlight","shapeIn","layerIndex_1","highlightMap","mouseClick","selectionsettings","selectionType","selectMap","enableMultiSelect","MapsTooltip","tootipArgs","markerIdex","markerFill","rectZoomingStart","handled","pinchFactor","newZoomFactor","prevLevel","prevScale","minBounds","maxBounds","mapTotalWidth","mapTotalHeight","translatePointX","translatePointY","getTileTranslatePosition","currentLevel","prevSize","performRectZooming","zoomCalculationFactor","setInteraction","newInteraction","lastScale","updateInteraction","fingers","touchCenter","newScale","newTileFactor","translatePointX_1","translatePointY_1","drawZoomRectangle","mouseDownPoints","mouseMovePoints","rectSVGObject","rectOption","animateTransform","templateCount","currentEle","markerTranslate","bubleIndex","dataLabelTranslate","markerTemplateElement","datalabelTemplateElemement","layerEle","y_1","panning","x_2","y_2","layerRect","panningXDirection","panningYDirection","toolBarZooming","tileZoomFactor","xSpacing","ySpacing","toolBarOrientation","toolbarsCollection","toolbars","toolBarLength","toolWidth","toolHeight","toolbar_1","currentToolbarEle","performToolBarAction","panColor","performZoomingByToolBar","zoomColor","panningStyle","toolBarSize","mapMouseWheel","mouseWheelZoom","doubleClickZoom","firstMove","pinchZooming","zoomRectElement","zoomOnClick","boundwidth","boundHeight","layerScale","topPos","index.Maps","index.Bubble","index.Marker","index.Highlight","index.MapsTooltip","index.NavigationLine","fields_1","CONTAINER","MESSAGE","ToastPosition","ButtonModelProps","ToastAnimations","ToastAnimationSettings","Toast","progressObj","intervalId","titleTemplate","contentTemplate","toastTemplate","toastObj","templateChanges","toastContainer","setPositioning","toastEle","setWidthHeight","personalizeToast","templateRendering","setProgress","appendToTarget","clearContentTemplate","clearTitleTemplate","clearToastTemplate","fetchEle","newestOnTop","destroyToast","tempVar","clo","clearProgress","clearContainerPos","customPosition","hideAnimate","toastClose","progressEle","setIcon","setTitle","closeBtn","CLOSEBTN","hideEta","maxHideTime","timeOutId","extendedTimeout","toastHoverAction","delayedToastProgress","showProgressBar","progressBarEle","updateProgressBar","titleEle","msgContainer","tempEle_1","appendMessageContainer","actionBtnContainer","actionBtn","btnDom","toastBeforeOpen","displayToast","clickToClose","isCloseIcon","showAnimate","toastOpen","PivotUtil","PivotEngine","savedFieldList","enableValueSoring","formatFields","calculatedFields","calculatedFormulas","valueAxis","saveDataHeaders","colFirstLvl","rowFirstLvl","colStartPos","enableValueSorting","headerCollection","rowHeaders","columnHeaders","rowHeadersCount","columnHeadersCount","valueMatrix","indexMatrix","rMembers","cMembers","memberCnt","pageInLimit","colHdrBufferCalculated","colValuesLength","rowValuesLength","slicedHeaders","fieldFilterMem","filterPosObj","enableSort","enableSorting","allowValueFilter","isValueFilterEnabled","formatSettings","calculatedFieldSettings","validateFilters","isExpandAll","isValueFiltersAvail","drilledMembers","isMutiMeasures","valueSortSettings","headerDelimiter","valueSortData","fillFieldMembers","updateSortSettings","generateValueMatrix","filterMembers","updateFilterMembers","generateGridData","getFormattedFields","isSort","isValueFilteringEnabled","dataFields","getCalculatedField","fieldList","isExcelFilter","dateMember","formattedMembers","members","updateTreeViewData","updateFieldList","lnt","aggregateType","showNoDataItems","formula","actualFormula","fieldKeys","calc","calcProperties","powerFunction","formulaType","lmt","aggregateValue","filterElements","filterElements_1","dataFields_1","indMat","dlen","fList","kLn","kl","isDataAvail","membersCnt","fmembersCnt","dl","mkey","ordinal","isDrilled","actualText","fillDrilledInfo","mem","vMat","keyLen","flList","tkln","sln","slt","filterRw","isInclude","getFilters","dln","indexObject","ilist","rln","rlt","isValidFilterField","allowLabelFilter","applyLabelFilter","frameFilterList","showLabelFilter","showDateFilter","showNumberFilter","allowLabelFiltering","isValidFilterElement","isNotValidFilterElement","dataFields_2","getLabelFilterMembers","getDateFilterMembers","members_1","operand1","getParsedValue","operand2","members_2","members_3","isMemberInclude","isLabelFilter","fln","allowFil","final","memberObj","iln","ilt","applyValueFiltering","valueFilter","rowFilterData","isValueFiltered","allMember","getFilteredData","mPos","getAggregateValue","isLevelFiltered","removefilteredData","valueFilteredData","validateFilteredParentData","formatSetting","valueSort","levelName","allMemberData","rowFilteredData","index_2","updateFramedHeaders","framedHeaders","dataHeaders","filteredHeaders","framedHeaders_1","dHeader","isHeaderAvail","validateFilteredHeaders","filterFramedHeaders","filteredHeaders_1","vHeader","isEmptyDataAvail","getIndexedHeaders","insertAllMembersCommon","pivotValues","valueContent","colheads","columnFilteredData","valuesCount","valueFilters","valueFields","filterSettings_1","isAvail","applyValueSorting","calculatePagingValues","insertTotalPosition","getHeaderData","insertSubTotals","getTableData","removeIndexProperties","isEngineUpdated","textArray","hText","mIndex","mType","getMember","sortByValueRow","vlen","insertAllMember","rCnt","cCnt","rowCnt","savedCell","spanCnt","indexObj","colCnt","rowPos","keyInd","parentMember","showPosition","rlen","decisionObj","childrens","isNoData","savedMembers","memInd","headerValue","availData","getOrderedIndex","orderedIndex","slicedHeader","summCell","lt_1","isValueSorting","rowCurrentPage","rowSize","exactStartPos","performSlicing","columnCurrentPage","columnSize","reformAxis","tnum","vlt","actCnt","isLeastNode","hpos","actpos","vln","calObj","vData","cln","clt","updateRowData","recursiveRowData","vcnt","colItmLn","sortText","lvl","ri","avgCnt","isMaxFirst","calcField","aggregateField","aggregatedValue","type_1","enginePopulating","enginePopulated","beforeExport","initSubComponent","treeViewUpdate","pivotButtonUpdate","initCalculatedField","DEVICE","ICON_DISABLE","TOGGLE_FIELD_LIST_CLASS","FIELD_LIST_CLASS","FIELD_LIST_FOOTER_CLASS","RIGHT_AXIS_PANEL_CLASS","AXIS_CONTENT_CLASS","AXIS_PROMPT_CLASS","PIVOT_BUTTON_WRAPPER_CLASS","PIVOT_BUTTON_CLASS","SORT_DESCEND_CLASS","FILTER_COMMON_CLASS","FILTERED_CLASS","DROP_INDICATOR_CLASS","INDICATOR_HOVER_CLASS","EDITOR_TREE_WRAPPER_CLASS","EDITOR_TREE_CONTAINER_CLASS","NODE_CHECK_CLASS","OK_BUTTON_CLASS","CANCEL_BUTTON_CLASS","ERROR_DIALOG_CLASS","DROPPABLE_CLASS","COLUMN_AXIS_CLASS","FILTER_AXIS_CLASS","GROUPING_BAR_CLASS","GROUP_ROW_CLASS","NO_DRAG_CLASS","SELECTED_NODE_CLASS","TEXT_CONTENT_CLASS","ADAPTIVE_FIELD_LIST_BUTTON_CLASS","ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS","ADD_ICON_CLASS","LIST_TEXT_CLASS","LIST_SELECT_CLASS","SELECTED_OPTION_ICON_CLASS","FILTER_INPUT_DIV_2_CLASS","COLLAPSE","TOOLTIP_HEADER","TOOLTIP_CONTENT","EDITOR_SEARCH_WRAPPER_CLASS","CALCINPUT","FORMAT","FORMULA","TREEVIEWOUTER","CALC_EDITED","FORMAT_DIALOG","FORMAT_CONDITION_BUTTON","FORMAT_COLOR_PICKER","VIRTUALTRACK_DIV","MOVABLECONTENT_DIV","MOVABLEHEADER_DIV","colPos","lastSpan","engine","engineModule","gridSettings","formatList","getFormatList","injectGridModules","getRowStartPos","frameDataSource","frameStackedHeaders","calculateGridWidth","bindGrid","cls.MOVABLEHEADER_DIV","cls.MOVABLECONTENT_DIV","vtr","cls.VIRTUALTRACK_DIV","virtualHeaderDiv","frameEmptyData","frameEmptyColumns","contextMenuClick","beforeCopy","beforePrint","setGroupWidth","resizeStop","onResizeStop","rowCellBoundEvent","borderRight","borderLeft","columnCellBoundEvent","excelColumnEvent","pdfColumnEvent","excelQueryCellInfo","excelRowEvent","pdfQueryCellInfo","pdfRowEvent","updateGridSettings","appendValueSortIcon","vSort","padding-top","resizeInfo","showGroupingBar","groupingBarModule","cls.GROUPING_BAR_CLASS","isValueCell","localizedText","cls.COLLAPSE","cls.ICON","pivotView","hdrdiv","dataContent","calculateColWidth","parWidth","colTotWidth","integrateModel","headerCnt","headerSplit","splitPos","actualCnt","colField","setSavedWidth","tmpSpan","innerModel","formatArray","vCnt","fCnt","exportHeaderEvent","exportContentEvent","FieldOptions","FieldListFieldOptions","ConditionalFormatSettings","CalculatedFieldSettings","FormatSettings","DrillOptions","ValueSortSettings","GridSettings","exportToExcel","dataCollections","events.beforeExport","workSheets","dataColl","colLen","actualrCnt","pivotCell","PDFExport","exportToPDF","eventParams","applyEvent","dataCollIndex","colLength","integratedCnt","isColHeader","pdfGridRow","localCnt","isEmptyRow","conditionalFormattingModule","KeyboardInteraction","pivotViewKeyboardModule","processTab","processEnter","getNextButton","allPivotButtons","cls.PIVOT_BUTTON_CLASS","gridFocus","nextButton","showFieldList","cls.TOGGLE_FIELD_LIST_CLASS","PivotContextMenu","renderContextMenu","onBeforeMenuOpen","onSelectContextMenu","dropClass","pivotCommon","dataSourceUpdate","addInternalEvents","onHorizondalScroll","onVerticalScroll","common","rowValues","exactSize","scrollPosObject","verticalSection","colValues","horizontalSection","timeOutObj","excessMove","removeInternalEvents","GroupingBarSettings","PivotView","PivotView_1","isCommonRequire","allowConditionalFormatting","allowCalculatedField","isAdaptive","beforeRender","setToolTip","onBeforeTooltipOpen","grandTotal","noValue","rowAxisPrompt","columnAxisPrompt","valueAxisPrompt","filterAxisPrompt","calculatedField","createCalculatedField","invalidFormula","dropText","dropTextMobile","warning","ok","allFields","addToRow","addToColumn","addToValue","addToFilter","emptyData","fieldExist","confirmText","noMatches","formulaField","dragField","enterValue","chooseDate","BeforeOrEqualTo","AfterOrEqualTo","labelTextContent","dateTextContent","valueTextContent","Equals","DoesNotEquals","BeginWith","DoesNotBeginWith","DoesNotEndsWith","DoesNotContains","GreaterThanOrEqualTo","LessThanOrEqualTo","NotBetween","And","NotEquals","AllValues","conditionalFormating","formatLabel","isDragging","updateClass","events.initSubComponent","generateData","renderPivotGrid","onContentReady","axisFieldModule","virtualscrollModule","applyFormatting","isRefreshGrid","events.enginePopulated","cls.ROOT","cls.DEVICE","onDrill","fieldAvail","memIndex","pivotFieldListModule","fieldListSpinnerElement","isEmptyGrid","virtualDiv","movableTable","vHeight","vWidth","mCnt","cls.TOOLTIP_HEADER","cls.TOOLTIP_CONTENT","getRowText","getColText","rowText","colText","CellClicked","setGridRowWidth","cellClick","renderEmptyGrid","initEngine","events.enginePopulating","format_1","conditionalFormatSettings","checkCondition","conditions","isHex","colourNameToHex","head","insertRule","conditionalValue1","conditionalValue2","CommonKeyboardInteraction","shiftF","shiftS","processSort","processDelete","cls.FILTER_COMMON_CLASS","EventBase","updateSorting","filterDialog","dialogPopUp","cls.SORT_DESCEND_CLASS","sortObj","getSortItemByName","newSortObj","updateFiltering","fieldCaption","filterItems","getFilterItemByName","popupTarget","createFilterDialog","sortObjects","filterObjects","getFormatItemByName","formatObjects","searchTreeNodes","treeObj","searchList","nonSearchList","checkedStatus","NodeStateModified","onStateModified","droppedClass","nodeDropped","cls.DROPPABLE_CLASS","droppedPosition","btnElement","cls.COLUMN_AXIS_CLASS","cls.FILTER_AXIS_CLASS","errorDialog","createErrorDialog","getButtonPosition","targetBtn","cls.PIVOT_BUTTON_WRAPPER_CLASS","axisPanel","pivotButtons","DataSourceUpdate","dataSourceItem","removeFieldFromReport","getNewField","droppedField","droppedAxis","isDataSource","ErrorDialog","cls.ERROR_DIALOG_CLASS","errorPopUp","closeErrorDialog","cls.OK_BUTTON_CLASS","removeErrorDialog","FilterDialog","editorDialog","data-fieldName","getFilterObject","allowExcelLikeFilter","createTreeView","renderMode","cls.ICON_DISABLE","closeFilterDialog","cls.CANCEL_BUTTON_CLASS","removeFilterDialog","createTabMenu","updateCheckedState","editorTreeWrapper","cls.EDITOR_TREE_WRAPPER_CLASS","cls.EDITOR_SEARCH_WRAPPER_CLASS","editorSearch","selectAllWrapper","selectAllContainer","treeViewContainer","cls.EDITOR_TREE_CONTAINER_CLASS","promptDiv","cls.EMPTY_MEMBER_CLASS","eventBase","memberTreeView","disabledList","allMemberSelect","nodeChecking","validateTreeNode","formatObj","cls.SELECTED_OPTION_ICON_CLASS","types_1","createCustomFilter","valueOptions","measures","selectedOption","selectedValueIndex","betweenOperators","operatorCollection","operatorCollection_1","cls.FILTER_DIV_CONTENT_CLASS","data-type","data-operator","data-measure","data-value1","data-value2","textContentdiv","betweenTextContentdiv","cls.BETWEEN_TEXT_DIV_CLASS","separatordiv","filterWrapperDiv1","optionWrapperDiv1","optionWrapperDiv2","filterWrapperDiv2","dropOptionDiv1","dropOptionDiv2","inputDiv1","inputDiv2","cls.FILTER_INPUT_DIV_2_CLASS","inputField1","inputField2","createElements","optionDiv1","optionDiv2","vDataSource","oDataSource","valueIndex","popupInstance","updateInputValues","disabledClasses_1","inputObj1_1","inputObj2_1","inputObj1_2","inputObj2_2","inputObj1","inputObj2","visibleNodes","uncheckedNodes","getUnCheckedNodes","getCheckedNodes","cls.NODE_CHECK_CLASS","treeNodes","isFilterField","PivotCommon","pivotEngine","nodeStateModified","DialogRenderer","fieldListWrappper","renderAdaptiveLayout","renderFieldListDialog","unWireDialogEvent","wireDialogEvent","renderStaticLayout","createCalculatedButton","toggleFieldList","fieldListDialog","showFieldListDialog","cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS","cls.ADD_ICON_CLASS","showCalculatedField","cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS","onCloseFieldList","removeFieldListIcon","cls.FIELD_LIST_FOOTER_CLASS","selectedNodes_1","adaptiveElement","pivotGridModule","layoutFooter","createAxisTable","events.initCalculatedField","createAddButton","calculatedButton","calculateField","cls.CALCULATED_FIELD_CLASS","calculatedFieldModule","footerContainer","fieldListButton","axisWrapper","cls.FIELD_LIST_CLASS","axisContent","cls.AXIS_CONTENT_CLASS","axisPrompt","cls.AXIS_PROMPT_CLASS","dialogRenderer","activeindex","treeViewModule","onShowFieldList","TreeViewRenderer","renderTreeDialog","fieldTable","treeHeader","treeViewElement","centerDiv","axisHeader","renderTreeView","nodeChecked","nodeStateChange","nodeDragStart","nodeDragStop","getTreeUpdate","fieldDialog","closeTreeDialog","onFieldAdd","cls.LIST_TEXT_CLASS","cls.SELECTED_NODE_CLASS","cls.NO_DRAG_CLASS","isNodeDropped","isDropped","getButton","droppableElement","sourcePosition","dropPosition","droppableButton","cls.DROP_INDICATOR_CLASS","cls.INDICATOR_HOVER_CLASS","cls.TEXT_CONTENT_CLASS","pivotFieldList","cls.LIST_SELECT_CLASS","liElements_1","refreshTreeView","currentFieldSet","currentFieldSet_1","events.treeViewUpdate","AxisTableRenderer","axisTable","leftAxisPanel","rightAxisPanel","cls.RIGHT_AXIS_PANEL_CLASS","renderAxisTable","fieldLabels","axisTitleWrapper","cls.AXIS_ICON_CLASS","getIconupdate","localePrompt","updateDropIndicator","PivotButton","pivotButtonModule","renderPivotButton","valuePos","showValuesButton","buttonWrapper","data-tag","data-uid","isvalue","dropIndicatorElement","dropLastIndicatorElement","dragWrapper","createButtonDragIcon","createSortOption","createFilterOption","groupingBarSettings","showRemoveIcon","createDraggable","createDragClone","onDragStart","onDragging","onDragStop","pivotButton","dragElement","showSortIcon","filterCLass","cls.FILTERED_CLASS","showFilterIcon","isButtonDropped","droppableTarget","bindDialogEvents","updateDialogButtonEvents","updateFilterState","updateCustomFilter","filterItem","refreshPivotButtonState","removeDataSourceSettings","removeButton","unCheckedNodeCount","selectedButton","pivotButtons_1","events.pivotButtonUpdate","AxisFieldRenderer","createPivotButtons","axisTableModule","PivotFieldList","staticFieldList","dropFilterPrompt","dropColPrompt","dropRowPrompt","dropValPrompt","addPrompt","adaptiveFieldHeader","centerHeader","captionData","fieldListRender","getFieldCaption","isTreeViewRefresh","CALC","CalculatedField","existingReport","newFields","isFieldExist","formulaText","currentFieldName","confirmPopUp","displayMenu","dropField","fieldClickHandler","cls.FORMAT","cls.CALC_EDITED","cls.CALCINPUT","curMenu","openContextMenu","selectContextMenu","beforeMenuOpen","applyFormula","report","cField","createConfirmDialog","addFormula","getFieldListData","fieldDropped","textCovered","cursorPos","textBeforeText","textAfterText","renderDialogElements","outerDiv","cls.FORMULA","accordDiv","addBtn","inputDiv","fieldTitle","wrapDiv","cls.TREEVIEWOUTER","formulaTitle","dropDiv","okBtn","renderMobileLayout","nodeCollapsing","dragItem","nodeClicked","drawNode","drawTreeNode","createTypeContainer","data-ftxt","getAccordionData","cancelBtnClick","cls.FLAT","accordion","expanding","addBtnClick","createCalculatedFieldDialog","renderDialogLayout","keyboardEvents","replaceFormula","FieldList","initiateModule","Common","commonModule","initiateCommonModule","AxisFields","cls.GROUP_ROW_CLASS","GroupingBar","touchObj","renderLayout","groupingTable","rowAxisPanel","cls.AXIS_ROW_CLASS","columnAxisPanel","cls.AXIS_COLUMN_CLASS","valueAxisPanel","cls.AXIS_VALUE_CLASS","filterAxisPanel","cls.AXIS_FILTER_CLASS","rowPanel","columnPanel","cls.GROUP_COLUMN_CLASS","valuePanel","cls.GROUP_VALUE_CLASS","filterPanel","cls.GROUP_FILTER_CLASS","axisPanels_1","colGroupElement","emptyHeader","rightAxisPanelWidth","rightPanelHeight","topLeftHeight","columnRows","trCell","colHeight","columnRows_1","rowHeader_1","rightAxisWidth","emptyRowHeader","groupHeight","columnRows_2","rowHeader_2","lastButton","lastButtonWidth","buttonWidth","rowHeaderTable","rowContentTable","colwidth","valueColWidth","setColWidth","dropIndicatorUpdate","ConditionalFormatting","fieldsDropDown","conditionsDropDown","refreshConditionValues","addFormat","cls.FORMAT_ROUND_BUTTON","cls.FORMAT_CONDITION_BUTTON","cls.FLAT_CLASS","cls.FORMAT_DIALOG","createDialogElements","renderDropDowns","renderColorPicker","tRow","valuelabel","measureDropdown","measureInput","conditionDropdown","conditionInput","cls.INPUT","valuespan","formatlabel","fontNameDropdown","fontNameInput","fontSizeDropdown","fontSizeInput","colorPicker1","colorPicker2","valuePreview","cls.FORMAT_COLOR_PICKER","toggleBtn","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","greenyellow","honeydew","hotpink","indianred ","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","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","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellowgreen","showConditionalFormattingDialog","index.PivotView","index.GroupingBar","index.FieldList","index.CalculatedField","index.ConditionalFormatting","maxZindex","makeEle","replaceTheme","ensureTemplate","iframeMouseDown","toolbarClick","refreshBegin","toolbarUpdated","bindOnEnd","htmlToolbarClick","markdownToolbarClick","destroyColorPicker","toolbarRenderComplete","enableFullScreen","disableFullScreen","dropDownSelect","beforeDropDownItemRender","execCommandCallBack","imageToolbarAction","linkToolbarAction","insertLink","updateToolbarItem","insertCompleted","imageLink","imageAlt","imageSize","sourceCode","updateSource","beforeDropDownOpen","selectionSave","selectionRestore","expandPopupClick","sourceCodeMouseDown","editAreaClick","colorPickerChanged","tableColorPickerChanged","focusChange","getSelectedHtml","renderInlineToolbar","rtlMode","tableToolbarAction","checkUndo","CLS_SCRIPT_SHEET","CLS_STYLE_SHEET","CLS_TOOLBAR","CLS_INLINE","CLS_FULL_SCREEN","CLS_QUICK_DROPDOWN","CLS_INLINE_POP","CLS_INLINE_DROPDOWN","CLS_DROPDOWN_POPUP","CLS_DROPDOWN_ICONS","CLS_DROPDOWN_ITEMS","CLS_DROPDOWN_BTN","CLS_RM_WHITE_SPACE","CLS_IMGRIGHT","CLS_IMGLEFT","CLS_IMGCENTER","CLS_IMGBREAK","CLS_CAPTION","CLS_CAPINLINE","CLS_IMGINLINE","CLS_EXPAND_OPEN","CLS_RTE_ELEMENTS","CLS_COLOR_CONTENT","CLS_RTE_READONLY","CLS_TABLE_SEL","CLS_TB_DASH_BOR","CLS_TB_ALT_BOR","CLS_TB_COL_RES","CLS_TB_ROW_RES","CLS_TB_BOX_RES","ToolbarType","templateItems","tools","alignments","justifyleft","justifycenter","justifyright","justifyfull","fontname","backgroundcolor","clearformat","clearall","unorderedlist","orderedlist","outdent","createlink","openlink","editlink","removelink","createtable","removetable","openimagelink","editimagelink","removeimagelink","insertlink","alttext","dimension","fullscreen","maximize","minimize","lowercase","uppercase","sourcecode","viewside","insertcode","tableheader","tableremove","tablerows","tablecolumns","tablecellbackground","tablecellhorizontalalign","tablecellverticalalign","tableeditproperties","alignmentItems","imageAlignItems","imageDisplayItems","tableRowsItems","tableColumnsItems","TableCellVerticalAlignItems","TableStyleItems","justifyLeft","justifyCenter","justifyRight","justifyFull","unorderedList","orderedList","createLink","openLink","editLink","removeLink","altText","lowerCase","upperCase","insertCode","linkTooltipLabel","linkWebUrl","linkTitle","linkurl","linkOpenInNewWindow","linkHeader","dialogInsert","dialogCancel","dialogUpdate","imageHeader","imageLinkHeader","mdimageLink","imageUploadMessage","imageDeviceUploadMessage","imageAlternateText","alternateHeader","imageCaption","imageSizeHeader","textPlaceholder","tblhead","inserttablebtn","tabledialogHeader","cellpadding","tableCellHorizontalAlign","tableCellVerticalAlign","removeTable","tableRemove","tableCellBackground","tableEditProperties","insertColumnLeft","insertColumnRight","insertRowBefore","insertRowAfter","tableEditHeader","insertcolumnleft","insertcolumnright","deletecolumn","aligntop","alignmiddle","alignbottom","insertrowbefore","insertrowafter","deleterow","ToolbarRenderer","popupOverlay","onPopupOverlay","toolbarBeforeCreate","toolbarCreated","toolbarClicked","events.toolbarClick","dropDownSelected","events.dropDownSelect","events.beforeDropDownItemRender","events.selectionSave","dropDownClose","events.selectionRestore","renderToolbar","rteToolbarObj","beforeCreate","renderDropDownButton","inlineMode","events.beforeDropDownOpen","classes.CLS_QUICK_DROPDOWN","setIsModel","popupContainer","paletteSelection","dropDownArgs","colorbox","borderBottomColor","renderColorPickerDropDown","currentDropdown","colorpickerValue","editorManager","nodeSelection","getRange","startContainer","events.tableColorPickerChanged","events.colorPickerChanged","onmousedown","beforeTileRender","colorPickerArgs","iosDevices","isIDevice","beforeModeSwitch","toolbarPanel","BaseToolbar","renderFactory","events.rtlMode","setRtl","getTemplateObject","getID","tbItems_1","getToolbarOptions","toolbarRenderer","DropDownButtons","initializeInstance","dropdownContent","containerType","tbElement","model.templateItems","classes.CLS_DROPDOWN_BTN","formatItem","classes.CLS_DROPDOWN_POPUP","classes.CLS_DROPDOWN_ITEMS","fontItem","imageAlignmentDropDown","imageDisplayDropDown","rowDropDown","columnDropDown","verticalAlignDropDown","tableStylesDropDown","tableRowsDropDown","model.tableRowsItems","tableColumnsDropDown","model.tableColumnsItems","tableCellVerticalAlignDropDown","model.TableCellVerticalAlignItems","displayDropDown","model.imageDisplayItems","imageAlignDropDown","classes.CLS_DROPDOWN_ICONS","model.imageAlignItems","tableSettings","removeDropDownClasses","destroyDropDowns","events.iframeMouseDown","onIframeMouseDown","ToolbarAction","renderSelection","events.htmlToolbarClick","events.markdownToolbarClick","isToolbar","isTransformChild","editableElement","getEditPanel","editPanel","toolbarBindEvent","keyBoardModule","getToolbarElement","toolBarKeyDown","keyConfig","createToolbarElement","enableFloating","tbWrapper","getToolbarMode","tbMode","checkToolbarResponsive","addFixedTBarClass","events.renderColorPicker","checkIsTransformChild","transformElements","toggleFloatClass","scrollParent","isBody","isFloat","floatOffset","floatingToolbarOffset","tbHeight","getToolbarHeight","getExpandTBarPopHeight","scrollParentRelativeTop","trgHeight","bodyStyle","targetTop","scrollParentYOffset","scrollParentRect","scrollParentTop","events.renderInlineToolbar","refreshToolbarOverflow","removeFixedTBarClass","showFixedTBar","hideFixedTBar","model.tools","targetItem","addTBarItem","updateToolbarStatus","fullScreenModule","showFullScreen","hideScreen","hideFullScreen","getBaseToolbar","enableTBarItems","undoRedoManager","getUndoStatus","removeTBarItems","popHeight","expandPopup","classes.CLS_EXPAND_OPEN","classes.CLS_TOOLBAR","isToolbarDestroyed","destroyToolbar","unWireScrollElementsEvents","events.destroyColorPicker","focusChangeHandler","dropDownBeforeOpenHandler","toolbarMouseDownHandler","toolbarActionModule","events.bindOnEnd","events.toolbarUpdated","events.refreshBegin","onRefresh","events.enableFullScreen","events.disableFullScreen","events.updateToolbarItem","events.expandPopupClick","events.focusChange","events.mouseDown","events.sourceCodeMouseDown","wireScrollElementsEvents","]","[","ColorPickerInput","renderColorPickerInput","suffixID","fontNode","classes.CLS_RTE_ELEMENTS","fontColorPicker","fontColorDropDown","backgroundColorPicker","backgroundColorDropDown","events.toolbarRenderComplete","BaseQuickToolbar","isDOMElement","popupRenderer","dropDownButtons","colorPickerObj","appendPopupContent","toolbarElement","popupType","classes.CLS_INLINE_POP","popupId","stringItems","quickTBarObj","imgWrapper","classes.CLS_RM_WHITE_SPACE","targetOffsetTop","parentOffsetTop","parentData","editTop","tBarElementHeight","editHeight","popWidth","parentTop","contentTop","windowY","windowHeight","windowWidth","bodyRightSpace","editPanelTop","editPanelHeight","bodyRight","toolbarAvail","expTBHeight","tBarHeight","iframeSettings","contentWindow","disableToolbarItem","enableToolbarItem","showPopupData","viewSourcePanel","sourceCodeModule","getViewPanel","removeEleFromDOM","addQTBarItem","removeQTBarItem","getBaseToolbarObject","PopupRenderer","popupPanel","QuickToolbar","formatItems","formattedItems","getQTBarOptions","popType","createQTBar","qTBar","initializeQuickToolbars","quickToolbarModule","onMouseDown","isRTE","renderQuickToolbars","linkQTBar","imageQTBar","textQTBar","tableQTBar","quickToolbarSettings","LinkToolbar","TextToolbar","ImageToolbar","TableToolbar","renderInlineQuickToolbar","inlineQTBar","InlineToolbar","showInlineQTBar","hideInlineQTBar","hideQuickToolbars","deBounce","deBouncer","isIFrame","onSelection","inlineQTBarMouseDownHandler","getInlineBaseToolbar","wireInlineQTBarEvents","events.keyDown","unWireInlineQTBarEvents","renderCount","appendCount","charCountBackground","htmlLength","restrict","showCharCount","arrayKey","events.sourceCode","events.updateSource","MarkdownSelection","getLineNumber","textarea","getAllParents","getSelectedLine","getLine","getSelectedParentPoints","selectedPoints","selectedLine","startLength","isStartWith","replaceSpecialChar","getRegex","syntax","getSelectedInlinePoints","MarkdownToolbarStatus","toolbarStatus","inlinecode","onRefreshHandler","parentsLines","documentNode","isListsApplied","mdSelectionFormats","isAppliedCommand","listTags","formatTags","checkLine","selectionDirection","parentLines","firstPrevText","lastNextText","ExecCommandCallBack","events.execCommandCallBack","commandCallBack","FORMAT_TYPE","KEY_DOWN_HANDLER","KEY_UP_HANDLER","Formatter","rangeCount","getRangeAt","getAncestorNode","commonAncestorContainer","itemCollection","CONSTANT.actionBegin","getUndoRedoStack","clipboardAction","CONSTANT.checkUndo","enableUndo","onKeyHandler","CONSTANT.execCommandCallBack","CONSTANT.actionComplete","editorMode","CONSTANT.insertCompleted","isNotify","undoRedoStack","LISTS_COMMAND","selectionCommand","LINK_COMMAND","CLEAR_COMMAND","MDLists","markdownSelection","CONSTANT.LISTS_COMMAND","applyListsHandler","EVENTS.KEY_DOWN_HANDLER","EVENTS.KEY_UP_HANDLER","tabKey","enterKey","addedLength","isNotFirst","isNotFirstLine","getListRegex","getAction","tabSpaceLength","splitTab","getTabSpace","curTabSpace","prevTabSpace","ol","OL","UL","tabSpace","appliedLine","configKey","MDFormats","EVENTS.FORMAT_TYPE","applyFormats","cleanFormat","applyCodeBlock","CONSTANT.selectionCommand","clearRegex","MDSelectionFormats","applyCommands","isMatch","matchText","InlineCode","StrikeThrough","singleCharRegx","multiCharRegx","isFormat","splitText","splitAt","cmdB","cmdI","beforeText","afterText","isApplied","textReplace","repStart","repEnd","repStartText","replaceAt","repEndText","regxB","repText","regxTemp","regTest","markdownFormatTags","h6","h5","h4","h3","h1","blockquote","markdownSelectionTags","UpperCase","LowerCase","markdownListsTags","htmlKeyConfig","toolbar-focus","insert-link","insert-image","outdents","html-source","full-screen","decrease-fontsize","increase-fontsize","justify-center","justify-full","justify-left","justify-right","clear-format","ordered-list","unordered-list","markdownKeyConfig","UndoRedoCommands","undoRedoSteps","undoRedoTimer","onAction","changEle","removedContent","MDLink","CONSTANT.LINK_COMMAND","ClearFormat","CONSTANT.CLEAR_COMMAND","replaceRegex","clearSelectionTags","selectionTags","expString","regExp","startExp","endExp","clearFormatTags","MarkdownParser","listObj","linkObj","clearObj","editorKeyDown","editorKeyUp","exeValue","MarkdownFormatter","updateFormatter","editElement","MarkdownRender","rteID","rteObj","MarkdownEditor","saveSelection","onToolbarClick","events.selectAll","events.getSelectedHtml","onSelectionSave","onSelectionRestore","events.insertLink","events.insertImage","toolbarUpdate","IMAGE","TABLE","INSERT_COLUMN","DELETECOLUMN","REMOVETABLE","TABLEHEADER","TABLE_VERTICAL_ALIGN","ALIGNMENT_TYPE","BLOCK_TAGS","IGNORE_BLOCK_TAGS","TABLE_BLOCK_TAGS","SELECTION_TYPE","INSERTHTML_TYPE","NodeSelection","startNodeName","endNodeName","saveInstance","cloneRange","documentFromRange","getNodeArray","endContainer","docElement","isChildNode","getNodeCollection","getParentNodeCollection","getParentNodes","getSelectionNodeCollection","getSelectionNodes","getInsertNodeCollection","getInsertNodes","setRangePoint","isvalid","constant","setSelectionText","setEnd","setSelectionContents","setSelectionNode","getSelectedNodes","insertParentNode","surroundContents","setCursorPoint","markerClassName","startSelection","DOMNode","currentDocument","isBlockNode","CONSTANT.BLOCK_TAGS","isLink","blockParentNode","rawAttributes","rawAttr","orderRawAttr","attrKey","attrValue","clearAttributes","openTagString","closeTagString","createTagString","parseHTMLFragment","createContextualFragment","referenceNode","wrapInner","unWrap","unWrapNode","getSelectedNode","TEXT_NODE","nodeFinds","existNodes","isEditorArea","getPreviousNode","saveMarker","startTextNode","endTextNode","setMarker","existNode","CONSTANT.IGNORE_BLOCK_TAGS","createTempNode","blockNodes","collectionNodes","ignoreTableTag","listNodes","CONSTANT.TABLE_BLOCK_TAGS","Lists","domNode","ignoreDefault","revertList","revertClean","nestedList","cleanNode","prevSibling","siblingList","nestedElement","listsNodes","applyLists","isRevert","checkLists","openTag","closeTag","replaceHTML","collectionString","nodesTemp","liParents","contentNodes","viewNode","classAttr","nodeInnerHtml","emptyLi","emptyUl","Formats","formatsNodes","cleanFormats","replaceTag","ignoreAttr","InsertMethods","WrapBefore","AppendBefore","Wrap","unwrap","NodeCutter","GetSpliceNode","SplitNode","setStartBefore","setEndAfter","extractContents","spliceEmptyNode","GetCursorStart","GetCursorRange","cursorRange","TrimLineBreak","GetCursorNode","InsertHtml","insertNode","nodeCutter","closestPrantNode","closestEle","sibNode","lasNode","searchEle","LinkCommand","selectParent","Alignments","JustifyLeft","JustifyCenter","JustifyRight","JustifyFull","CONSTANT.ALIGNMENT_TYPE","alignmentNodes","text-align","Indents","indentValue","applyIndents","indentsNodes","indentsValue","ImageCommand","CONSTANT.IMAGE","createImage","imgEle","TableCommand","CONSTANT.TABLE","CONSTANT.INSERT_COLUMN","CONSTANT.DELETECOLUMN","CONSTANT.REMOVETABLE","CONSTANT.TABLEHEADER","CONSTANT.TABLE_VERTICAL_ALIGN","tableVerticalAlign","tblBody","tdWid","curRow","tabCell","allRows","colTemplate","seletedTable","cellCount","createTHead","th","deleteTHead","IsFormatted","getFormattedNode","getFormatParent","isFormattedNode","isUnderline","isStrikethrough","isSuperscript","isSubscript","isFontColor","isFontName","isFontSize","isBackgroundColor","inlineTags","SelectionCommands","domSelection","isFormatted","isCursor","isFontStyle","cursorNode","insertCursorNode","formatNode","removeFormat","cursorNodes","cursorFormat","getInsertNode","splitNode","GetFormatNode","toLocaleUpperCase","SelectionBasedExec","CONSTANT.SELECTION_TYPE","InsertHtmlExec","CONSTANT.INSERTHTML_TYPE","applyHtml","exactNodes","cloneSelectNodes","clearInlines","reSelection","cloneParentNodes","clearBlocks","selectionNodes","endIndexNode","spliceParent","removeParent","parentIndex","NONVALID_TAGS","NONVALID_PARENT_TAGS","removeInlineParent","ClearFormatExec","applyClear","UndoRedoManager","EditorManager","alignmentObj","indentsObj","imgObj","selectionObj","inserthtmlObj","tableObj","HTMLFormatter","statusCollection","ToolbarStatus","formatCollection","isOrderedList","isUnorderedList","isAlignment","isFormats","HtmlToolbarStatus","rteContent","contenteditable","IframeContentRender","iFrameContent","HtmlEditor","rangeCollection","nodeSelectionObj","colorPickerModule","events.selectRange","enableTabKey","textCont","spaceLink","selectNodeEle","urlText","selectParentEle","events.imageToolbarAction","events.linkToolbarAction","events.tableToolbarAction","linkDialog","imageDialog","events.createTable","events.insertCompleted","showLinkQuickToolbar","onToolbarAction","events.editAreaClick","editAreaClickHandler","quickToolObj","linkTop","linkPos","hideLinkQuickToolbar","inputDetails","selectText","linkWebAddress","linkDisplayText","linkTooltip","urlPlace","textPlace","linkDialogEle","linkContent","contentElem","linkTarget","linkUrl","linkOpenLabel","checkBoxObj","linkInsert","linkCancel","selectObj","selfLink","cancelDialog","checkUrl","linkEle","isUrl","linkUpdate","showImageQuickToolbar","deleteImg","events.imageLink","insertImgLink","events.imageAlt","insertAltText","events.imageSize","alignmentSelect","afterRender","events.paste","imagePaste","imageClick","events.checkUndo","insertImageSettings","resizeBtnInit","preventDefaultResize","imgResizeDiv","imageResize","getPointY","resizeBtnStat","botLeft","botRight","imgResizePos","resizeImgDupPos","imgWid","imgHgt","borWid","devWid","setAspectRatio","expectedX","expectedY","resizeByPercent","pixToPerc","imgDupMouseMove","imgDupPos","openImgLink","editImgLink","removeImgLink","insertEle","captionEle","remvoeResizEle","justifyImageLeft","justifyImageCenter","justifyImageRight","imageWithLinkQTBarItemUpdate","newItems","hideImageQuickToolbar","imagDialog","linkWrap","inputLink","linkargs_1","selfImage","altWrap","altHeader","inputAlt","altArgs_1","insertAlt","classes.CLS_CAPTION","imgWrap","imgInner","imgCaption","classes.CLS_IMGINLINE","classes.CLS_CAPINLINE","classes.CLS_IMGBREAK","classes.CLS_IMGLEFT","classes.CLS_IMGRIGHT","classes.CLS_IMGCENTER","imgSizeHeader","dialogContent","imgsizeInput","insertSize","imgDialog","imgInsert","imglinkCancel","imgHeader","insertImageUrl","imageUrlPopup","imgUrl","placeUrl","inputUrl","uploadUrl","matchUrl","imgSizeWrap","getClientRects","widthNum","heightNum","dialogEle","imgUpload","linkHeaderText","uploadParentEle","deviceImgUpMsg","imgUpMsg","btnEle","browserMsg","fileSelect","uploadEle","uploadObj","allowedTypes","removing","dataurl","mime","bstr","u8arr","ViewSource","onInitialEnd","updateSourceCode","CONSTANT.KEY_DOWN_HANDLER","getSourceCode","previewKeyDown","previewElement","wireBaseKeyDown","unWireBaseKeyDown","updateValueData","invokeChangeEvent","editHTML","moveEle","insertTableDialog","docClick","dropdownSelect","cellSelect","setBGColor","resizeHelper","addColumn","removeRowColumn","tableStyles","removeResizeEle","tabSelection","tableArrowNavigation","editTable","classes.CLS_TB_DASH_BOR","classes.CLS_TB_ALT_BOR","classes.CLS_TABLE_SEL","selText","hideTableQuickToolbar","range_1","tableCellSelect","tblHeader","tableCellLeave","tableCellClick","tableInsert","editdlgObj","curTable","tableResizeEleCreation","colReEle","classes.CLS_TB_COL_RES","data-col","unselectable","rowReEle","classes.CLS_TB_ROW_RES","data-row","tableReBox","classes.CLS_TB_BOX_RES","columnEle","rowEle","tableBox","cellColl","actualwid","totalwid","tabkey","delKey","insertbtn","drawTable","data-column","data-cell","editContent","tableDlgContent","editHeader","dlgContent","tableCellDlgContent","customTable","tableColumn","tableWrap","columnTextBox","rowTextBox","tableDialog","widthVal","executeGroup","strikeThrough","formatBlock","heading","insertHTML","insertHorizontalRule","insertBrOnReturn","insertOrderedList","insertUnorderedList","ToolbarSettings","ImageSettings","TableSettings","QuickToolbarSettings","FontFamily","FontSize","FontColor","BackgroundColor","Resources","IFrameSettings","InlineMode","FullScreen","scrollableParent","classes.CLS_FULL_SCREEN","toggleParentOverflow","RichTextEditor","isFocusOut","updateEnable","setContainer","originalElement","rteOutterWrapper","executeCommand","commandName","decode","RTERender","allowedKeys","onCopy","onCut","placeHolderWrapper","removeHtmlAttributes","classes.CLS_RTE_READONLY","updatePanelValue","countModule","frameSetting","scripts","classes.CLS_SCRIPT_SHEET","removeSheets","classes.CLS_STYLE_SHEET","setIframeSettings","enableHtmlEncode","srcList","updateReadOnly","printArgs","removeToolbarItem","styleSrc","scriptSrc","InjectSheet","scriptSheet","scriptEle","createScriptElement","styleEle","createStyleElement","rel","compiledTemplate","heightValue","rteHeight","expandPopHeight","getHtml","showSourceCode","preventImgResize","defaultResize","resizeHandler","cloneValue","scrollParentElements","index.RichTextEditor","index.Link","index.Image","index.Count","index.QuickToolbar","index.HtmlEditor","index.MarkdownEditor","index.Table","navigating","renderCell","eventClick","eventRendered","scrollUiUpdate","documentClick","cellMouseDown","tapHoldReady","DISABLE_CLASS","TABLE_CONTAINER_CLASS","ALLDAY_CELLS_CLASS","ALLDAY_ROW_CLASS","CONTENT_TABLE_CLASS","WORK_CELLS_CLASS","WORK_HOURS_CLASS","DATE_HEADER_WRAP_CLASS","DATE_HEADER_CONTAINER_CLASS","HEADER_CELLS_CLASS","CURRENT_DAY_CLASS","CURRENTDATE_CLASS","CURRENT_PANEL_CLASS","PREVIOUS_PANEL_CLASS","TRANSLATE_CLASS","RESOURCE_GROUP_CELLS_CLASS","RESOURCE_TEXT_CLASS","RESOURCE_COLUMN_WRAP_CLASS","RESOURCE_PARENT_CLASS","RESOURCE_EXPAND_CLASS","RESOURCE_COLLAPSE_CLASS","RESOURCE_TREE_ICON_CLASS","RESOURCE_CELLS_CLASS","TIME_CELLS_WRAP_CLASS","CURRENT_TIME_CLASS","CURRENT_TIMELINE_CLASS","PREVIOUS_TIMELINE_CLASS","HIDE_CHILDS_CLASS","APPOINTMENT_WRAPPER_CLASS","RESOURCE_TOOLBAR_CONTAINER","RESOURCE_HEADER_TOOLBAR","SELECTED_CELL_CLASS","WEEK_NUMBER_WRAPPER_CLASS","APPOINTMENT_WRAP_CLASS","WRAPPER_CONTAINER_CLASS","APPOINTMENT_CONTAINER_CLASS","APPOINTMENT_CLASS","APPOINTMENT_BORDER","APPOINTMENT_DETAILS","TABLE_WRAP_CLASS","OUTER_TABLE_CLASS","CONTENT_WRAP_CLASS","AGENDA_CELLS_CLASS","AGENDA_SELECTED_CELL","NAVIGATE_CLASS","DATE_HEADER_CLASS","APPOINTMENT_INDICATOR_CLASS","EVENT_INDICATOR_CLASS","EVENT_ACTION_CLASS","CLONE_ELEMENT_CLASS","CLONE_TIME_INDICATOR_CLASS","EVENT_RESIZE_CLASS","RESIZE_CLONE_CLASS","LEFT_RESIZE_HANDLER","RIGHT_RESIZE_HANDLER","TOP_RESIZE_HANDLER","BOTTOM_RESIZE_HANDLER","EVENT_RECURRENCE_ICON_CLASS","EVENT_RECURRENCE_EDIT_ICON_CLASS","ALLDAY_APPOINTMENT_WRAPPER_CLASS","ALLDAY_APPOINTMENT_CLASS","ROW_COUNT_WRAPPER_CLASS","ALLDAY_APPOINTMENT_SECTION_CLASS","APPOINTMENT_ROW_EXPAND_CLASS","APPOINTMENT_ROW_COLLAPSE_CLASS","MORE_INDICATOR_CLASS","POPUP_HEADER_CLASS","POPUP_HEADER_ICON_WRAPPER","POPUP_FOOTER_CLASS","DATE_TIME_DETAILS_CLASS","QUICK_POPUP_EVENT_DETAILS_CLASS","EVENT_CREATE_CLASS","EDIT_EVENT_CLASS","DELETE_EVENT_CLASS","TEXT_ELLIPSIS","MORE_POPUP_WRAPPER_CLASS","MORE_EVENT_POPUP_CLASS","MORE_EVENT_DATE_HEADER_CLASS","MORE_EVENT_HEADER_DATE_CLASS","MORE_EVENT_CLOSE_CLASS","MORE_EVENT_CONTENT_CLASS","MORE_EVENT_WRAPPER_CLASS","QUICK_DIALOG_EDIT_EVENT_CLASS","QUICK_DIALOG_EDIT_SERIES_CLASS","QUICK_DIALOG_DELETE_CLASS","QUICK_DIALOG_CANCEL_CLASS","QUICK_DIALOG_ALERT_BTN_CLASS","EVENT_WINDOW_DIALOG_CLASS","FORM_CLASS","EVENT_WINDOW_ALL_DAY_CLASS","TIME_ZONE_CLASS","SUBJECT_CLASS","LOCATION_CLASS","EVENT_WINDOW_START_CLASS","DESCRIPTION_CLASS","EVENT_WINDOW_TIME_ZONE_DIV_CLASS","EVENT_WINDOW_START_TZ_CLASS","EVENT_WINDOW_END_TZ_CLASS","EVENT_WINDOW_DELETE_BUTTON_CLASS","EDIT_ICON_CLASS","DELETE_CLASS","CLOSE_CLASS","CLOSE_ICON_CLASS","EVENT_TOOLTIP_ROOT_CLASS","HIDDEN_CLASS","POPUP_WRAPPER_CLASS","RESOURCE_LEVEL_TITLE","RESOURCE_TREE_POPUP_OVERLAY","RESOURCE_TREE_POPUP","HeaderRenderer","events.documentClick","closeHeaderPopup","hideHeaderPopup","headerPopup","toolbarEle","prevNavEle","nextNavEle","updateActiveView","updateItems","getPopUpRelativeElement","setDayOfWeek","headerCalendar","setCalendarDate","getCalendarView","setCalendarView","calendarView","viewIndex","updateDateRange","getDateRangeText","showInPopup","viewName","renderHeaderPopup","headerPopupEle","headerCalendarEle","calendarChange","changeDate","calculateViewIndex","cls.POPUP_OPEN","changeView","isSelectedDate","util.resetTime","activeView","getNextPreviousDate","isSameTime","activeCellsData","msInterval","activeViewOptions","timeScale","slotCount","isAllDay","eventWindow","openEditor","toolbarPopUp","getHeaderElement","updateHeaderItems","classType","dateRangeEle","cls.HIDDEN_CLASS","cls.TEXT_ELLIPSIS","setDimensions","cssProperties","ScheduleTouch","cls.TABLE_CONTAINER_CLASS","onTransitionEnd","touchLeftDirection","touchRightDirection","uiStateValues","cls.APPOINTMENT_CLASS","timeStampStart","cls.TRANSLATE_CLASS","cls.CONTENT_WRAP_CLASS","isScrollTriggered","nextPanel","getTranslateX","previousPanel","cls.PREVIOUS_PANEL_CLASS","offsetDist","swapPanels","transitionDuration","confirmSwipe","cancelSwipe","cls.WORK_CELLS_CLASS","cls.ALLDAY_CELLS_CLASS","cls.HEADER_CELLS_CLASS","getCellDetails","events.tapHoldReady","nextPrevType","currentPanel","getRenderDates","navArgs","events.navigating","generateColumnLevels","cls.CURRENT_PANEL_CLASS","WebKitCSSMatrix","m41","shiftDownArrow","shiftUpArrow","shiftRightArrow","shiftLeftArrow","ctrlLeftArrow","ctrlRightArrow","altOne","altTwo","altThree","altFour","altFive","altSix","processDown","processUp","processLeft","processRight","processViewNavigation","focusFirstCell","processEscape","event.cellMouseDown","onCellMouseDown","initialTarget","getClosestCell","onMouseSelection","onMoveup","allDayRow","getAllDayRow","onAppointmentSelection","getSelectedEventElements","isPreventAction","cls.POPUP_WRAPPER_CLASS","cls.QUICK_POPUP_EVENT_DETAILS_CLASS","cls.EVENT_CREATE_CLASS","cls.EDIT_EVENT_CLASS","cls.DELETE_EVENT_CLASS","cls.CLOSE_CLASS","cls.SUBJECT_CLASS","event.cellClick","cls.MORE_EVENT_CLOSE_CLASS","cls.ALLDAY_APPOINTMENT_SECTION_CLASS","cls.MORE_INDICATOR_CLASS","cls.MORE_EVENT_HEADER_DATE_CLASS","getNavigateView","getCells","isInverseTable","tableEle","maxRow","maxColumn","inverseCells","focusCell","cls.AGENDA_CELLS_CLASS","removeSelectedAppointmentClass","isTimelineView","cls.CONTENT_TABLE_CLASS","cls.RESOURCE_GROUP_CELLS_CLASS","getWorkCellElements","isInverseTableSelect","isMultiple","removeSelectedClass","initialId","resourceSelectedCells","allDayCells","getAllDayCells","resourceAllDayCells","addSelectedClass","selectAppointment","appointments","getAppointmentElements","nextAppEle","addSelectedAppointments","cls.AGENDA_SELECTED_CELL","selectAppointmentElementFromWorkCell","appointmentElements_1","getUniqueAppointmentElements","filteredElements_1","selectedDate_1","eventsProcessed","eventObject","eventFields","focusElements","getAppointmentElementsByGuid","util.MS_PER_DAY","appointmentElements","getWorkCellFromAppointmentElement","getEventByGuid","selectWorkCellByTime","viewCollections","getSelectedElements","selectedEventElements","getSelectedAppointments","moreEventWrapper","cls.MORE_POPUP_WRAPPER_CLASS","quickPopupWrapper","getQuickPopupElement","getTableRows","curRowIndex","processLeftRight","sectionRowIndex","maxIndex","isCancelLeftRightAction","selectedAppointments","calculateNextPrevDate","curColIndex","maxColIndex","allDayRow_1","allDayRow_2","nextPrevDate","getFocusableElements","processTabOnPopup","firstEle","footerEle","cls.POPUP_FOOTER_CLASS","cls.DELETE_CLASS","lastEle","cls.APPOINTMENT_BORDER","activeEventData","getSelectedEvents","quickPopup","deleteClick","onClosePopup","morePopup","Timezone","convertedDate","toLocaleString","fromOffset","toOffset","fromLocalOffset","toLocalOffset","removeLocalOffset","localTimezoneName","Intl","DateTimeFormat","resolvedOptions","timezoneData","TIMES","EVERY","UNTIL","DAYS","WEEKS","MONTHS","YEARS","SU","MO","TU","WE","TH","FR","SA","slots","timeZonePropChanged","oldTimezone","processed","events_1","util.getDateFromString","processTimezoneChange","processTimezone","recurrenceRule","recurrenceID","generateOccurrence","generateGuid","filterEvents","timezonePropertyChange","eventsData","event.dataReady","processedData","timezoneConvert","startTimezone","endTimezone","startTz","endTz","zone","resourceTdData","fieldMapping","filterEventsByResource","sortByTime","resourceCollection","resourceBase","allowGroupEdit","allowMultiple","tempPredicate","groupOrder","d1","d2","sortByDateTime","object1","object2","d3","d4","d5","d6","getSmallestMissingNumber","large","splitEventByDay","eventStartTime","eventEndTime","util.addDays","util.getDaysCount","app","splitEvent","dateRender","util.getDateInMs","orgStart","orgEnd","slot","firstSlot","byDate","showWeekend","hasBreak","cloneEventObject","dateInRange","availSlot","availSlot_1","slot_1","focusElements_1","eventSelect","elementSelect","selectedAppointments_1","keyboardInteractionModule","nearestTime","isAllDayAppointment","targetArea","getGroupIndexFromEvent","resourceData","lastResourceLevel","resIndex","isFullDay","event.documentClick","appointmentBorderRemove","wireAppointmentEvents","eventDoubleClick","wireResizeEvent","dragAndDropModule","wireDragEvent","renderResizeHandler","spanEvent","resizeEdge","cls.EVENT_RESIZE_CLASS","cls.RIGHT_RESIZE_HANDLER","cls.LEFT_RESIZE_HANDLER","cls.TOP_RESIZE_HANDLER","cls.BOTTOM_RESIZE_HANDLER","cls.RESIZE_CLONE_CLASS","event.eventClick","quickPopupHide","openRecurrenceAlert","getEventIDType","getEventMaxID","resourceId","eventId","idType","maxId","occurrenceCollection","currentViewDate","eventRule","recurrenceException","generatedDates","getRecurrenceEvent","getOccurrencesByID","getOccurrencesByRange","event_3","applyResourceColor","getResourceColor","alphaColor","Crud","eventSettings","refreshData","actionArgs","addEvent","editParms","processCrudTimezone","crudArgs","parentEvent","occurrence","edited","exDate","excludeDateCheck","delApp","delApp_1","deleteEvent","normalEvent","recEvent","normalEvent_1","event_4","recEvent_1","delApp_2","event_5","exceptionDateList","FieldValidator","renderFormValidator","errorPlacement","QuickPopups","isMultipleEventSelect","fieldValidator","renderQuickPopup","renderMorePopup","renderQuickDialog","quickPopupOpen","quickPopupClose","moreEventPopup","cls.MORE_EVENT_POPUP_CLASS","cls.MORE_EVENT_DATE_HEADER_CLASS","cls.NAVIGATE_CLASS","morePopupOpen","morePopupClose","cls.CLOSE_ICON_CLASS","closeClick","navigationClick","quickDialog","dialogButtonClick","beforeQuickDialogClose","clickEvent","quickDialogClass","cls.QUICK_DIALOG_EDIT_EVENT_CLASS","cls.QUICK_DIALOG_EDIT_SERIES_CLASS","cls.QUICK_DIALOG_DELETE_CLASS","cls.QUICK_DIALOG_CANCEL_CLASS","cls.QUICK_DIALOG_ALERT_BTN_CLASS","cls.DISABLE_CLASS","cls.FORM_CLASS","editDeleteOnly","editDeleteSeries","showQuickDialog","openRecurrenceValidationAlert","openDeleteAlert","openValidationError","event.popupOpen","createMoreEventList","eventCollection","moreEventContentEle","cls.MORE_EVENT_CONTENT_CLASS","moreEventWrapperEle","cls.MORE_EVENT_WRAPPER_CLASS","eventCollection_1","eventText","appointmentEle","data-id","data-guid","aria-grabbed","cls.EVENT_RECURRENCE_ICON_CLASS","cls.EVENT_RECURRENCE_EDIT_ICON_CLASS","event.eventRendered","tapHoldEventPopup","eventTitle","eventTemplate","cls.POPUP_HEADER_CLASS","cls.EDIT_ICON_CLASS","editClick","beforeQuickPopupOpen","showQuickInfo","subjectElement_1","getFormattedString","quickCellPopup","templateArgs","quickInfoTemplates","getQuickInfoTemplatesHeader","cls.POPUP_HEADER_ICON_WRAPPER","getQuickInfoTemplatesContent","cls.DATE_TIME_DETAILS_CLASS","details","getResourceText","getQuickInfoTemplatesFooter","subjectElement","moreButton","detailsClick","saveButton","saveClick","isSameEventClick","editButton","eventTooltip","updateTapHoldEventPopup","quickEventPopup","eventSubject","getRecurrenceSummary","cls.TIME_ZONE_CLASS","getTimezone","cls.DESCRIPTION_CLASS","deleteButton","resourceValue","resourceCollection_1","resourceIndex_1","idField","lastResource_1","resNames_1","lastResourceData_1","util.findIndexInData","resourceDetails","startDateDetails","endDateDetails","startTimeDetail","getTimeString","endTimeDetail","allDayLength","moreEventClick","dateElement","moreEventElements","cls.CURRENTDATE_CLASS","gIndex","saveObj","getObjectFromFormData","setDefaultValueToObject","setResourceValues","subjectEle","updateMoreEventContent","getDateFromElement","filteredEvents","moreElement","eventSave","eventObj","titleContent","zoneDetails","ruleSummary","getRecurrenceEditorInstance","getRuleSummary","getDataFromTarget","isEventPopup","destroyButtons","applyEventColor","colorEle","borderLeftColor","moreWrapper","event.tapHoldReady","removeEventListner","EventTooltip","cls.EVENT_TOOLTIP_ROOT_CLASS","getTargets","onBeforeRender","headerTooltipTemplate","cls.RESOURCE_CELLS_CLASS","resCollection","getColumnLevels","getHeaderTooltipTemplate","tooltipTemplate","eventStart","eventEnd","tooltipSubject","startMonthDate","startMonthYearDate","endMonthYearDate","getEventTooltipTemplate","INPUTWARAPPER","INPUTWARAPPERSIDE","REPEATELEMENT","REPEATINTERVAL","DAYWRAPPER","WEEKWRAPPER","YEAREXPANDERWRAPPER","YEAREXPANDERELEMENT","MONETHEXPANDERWRAPPER","MONTHEXPANDERELEMENT","MONTHEXPANDERCHECKBOXWRAPPER","FORMLEFT","FORMRIGHT","MONTHEXPANNDERELEM","ENDONDATE","ENDONCOUNTWRAPPER","ENDONCOUNT","HIDEWRAPPER","PRIMARY","none","daily","weekly","monthly","yearly","valueData","neverClassList","weekClassList","monthClassList","yearClassList","dailyClassList","noEndClassList","endOnCountClassList","endOnDateClassList","RecurrenceEditor","never","onDay","weeks","summaryTimes","summaryOn","summaryUntil","summaryRepeat","summaryDay","summaryWeek","summaryMonth","summaryYear","monthWeek","monthPosition","monthExpander","yearExpander","renderStatus","dayButtons","monthButtons","startState","endOn","showFormElement","updateForm","freshOnEndForm","updateEndOnForm","selectMonthDay","updateUntilDate","onMonthDay","applyCustomClass","renderComponent","repeatType","selectedType","getRecurrenceRule","setRecurrenceRule","resetDayButton","daySelection","rotateArray","rtlClass","untilDateObj","monthDate","monthWeekDays","monthValue","monthWeekPos","getDayPosition","renderDropdowns","getRepeatData","resetFormValues","getEndData","getPopupWidth","renderDropDownList","dropDownData","onWeekDay","getMonthPosData","getDayData","getMonthData","setDefaultValue","formelement_1","recurreneElement_1","renderDatePickers","dayButtonRender","btns_1","btns","radioButtonRender","numericTextboxRender","recurrenceCount","positionCollection","monthposValue","weekday_1","fullDay","getSelectedDaysData","ruleData","RULEBYDAY","getSelectedMonthData","RULEBYMONTHDAY","getIntervalData","RULEINTERVAL","getEndOnCount","RULECOUNT","getYearMonthRuleData","RULEBYMONTH","updateWeekButton","updateMonthUI","getUntilData","RULEUNTIL","destroyComponents","resetFields","cldrObj1","generateSummary","getRecurrenceDates","RULEFREQ","RULEDAILY","RULEWEEKLY","RULEMONTHLY","RULEYEARLY","endon","EVENT_FIELD","REPEAT_CONTAINER_CLASS","EventWindow","renderEventWindow","getEventWindowContent","cls.EVENT_WINDOW_DIALOG_CLASS","onBeforeClose","cls.EVENT_WINDOW_DELETE_BUTTON_CLASS","eventDelete","isEventData","editorTemplate","cellClickAction","onCellDetailsUpdate","onEventDetailsUpdate","setDialogContent","getSlotDuration","refreshDateTimePicker","startObj","cls.EVENT_WINDOW_START_CLASS","onsubmit","getDefaultEventWindowContent","templeteEle","getEditorTemplate","createDivElement","titleLocationDiv","titleDiv","renderTextBox","locationDiv","cls.LOCATION_CLASS","startEndDateTimeDiv","startDateTimeDiv","renderDateTimePicker","onTimeChange","endDateTimeDiv","timezoneParentDiv","cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS","startTimezoneDiv","renderDropDown","cls.EVENT_WINDOW_START_TZ_CLASS","endTimezoneDiv","cls.EVENT_WINDOW_END_TZ_CLASS","allDayTimezoneDiv","allDayDiv","renderCheckBox","cls.EVENT_WINDOW_ALL_DAY_CLASS","timezoneDiv","repeatParentDiv","repeatDiv","repeatEditConainer","REPEAT_BUTTON_ICON_CLASS","descriptionDiv","loadRecurrenceEditor","createRecurrenceEditor","resourceParentDiv","renderMultiSelect","submit","recurrenceEditor","renderRecurrenceEditor","dateTimeDiv","getFieldName","dateTimeInput","getFieldLabel","resourceDiv","resourceInput","resourceTemplate","colorField","onMultiselectResourceChange","onDropdownResourceChange","timezoneInput","onTimezoneChange","filtering","byGroupID","resObject","datasource","groupIDField","filterRes","filterDatasource","resObj","resValue","startTimezoneObj","endTimezoneObj","checkBoxDiv","checkBoxInput","repeatStatus","editorTitles","onAllDayChange","timezoneChangeStyle","onRepeatChange","renderRepeatDialog","repeatDialogObject","repeatSaveDialog","repeatCancelDialog","repeatOpenDialog","repeatRule","repeatStartDate","updateRepeatLabel","closeRepeatDialog","repeatTempRule","showDetails","getValidationRule","trimAllDay","formelement","getFormElements","keyNames","curElement","isCustomElement","setValueToElement","setDefaultValueToElement","timezoneObj","allDayStatus","updateDateTime","workHours","timezoneValue","resetFormFields","tz","alertType","Repeat","recurrenceValidation","getEventIdFromForm","isResourceEventExpand","resourceSaveEvent","eveId","editOccurrenceValidation","formElement_1","getValueFromElement","alertMessage","recEditor","tempDiff","getRecurrenceIndex","recColl","recIndex","recurColl","recurColl_1","lastResouceData","lastlevel","eventList","addValues","lastResource","groupId_1","eventList_1","formelement_2","isDataRefresh","initializeLayout","dayModule","weekModule","workWeekModule","monthModule","agendaModule","monthAgendaModule","timelineViewsModule","viewClass","timelineMonthModule","firstView","updateLabelText","isGroupAdaptive","enableCompactView","actionObj","navigationWrapper","WorkHours","TimeScale","QuickInfoTemplates","HeaderRows","Field","EventSettings","ResourceBase","leftPixel","renderResourceHeaderIndent","resColTd","resColDiv","cls.RESOURCE_TEXT_CLASS","events.renderCell","hideResourceRows","trCount","resData","ClassName","cls.RESOURCE_PARENT_CLASS","expandedField","createResourceColumn","resColl","resDiv","cls.RESOURCE_COLUMN_WRAP_CLASS","tbl","createTableLayout","generateTreeData","countCalculation","getContentRows","resRows","ntd","cls.RESOURCE_COLLAPSE_CLASS","cls.RESOURCE_EXPAND_CLASS","iconDiv","cls.RESOURCE_TREE_ICON_CLASS","setMargin","onTreeIconClick","setResourceHeaderContent","resourceHeaderTemplate","ntr","parentCollection","wholeCollection","totalCount","workCellCollection","headerRowCollection","clickedRes","contentRows","eventRows","cls.APPOINTMENT_CONTAINER_CLASS","eventElements","clonedCollection","events.scrollUiUpdate","renderResourceHeader","resourceWrapper","cls.RESOURCE_TOOLBAR_CONTAINER","cls.RESOURCE_HEADER_TOOLBAR","cls.RESOURCE_LEVEL_TITLE","renderResourceHeaderText","menuClick","renderResourceTree","cls.RESOURCE_TREE_POPUP_OVERLAY","treeWrapper","cls.RESOURCE_TREE_POPUP","cls.WRAPPER_CONTAINER_CLASS","resourceTree","treeViewObj","resourceClick","treePopup","isTimeLine","treeCollection","resTreeColl","resourceTreeLevel","resTree","treeHandler","treeLevel","levelId","treeArgs","resourceName","resourceChild","resourceLevel","levelIcon","headerWrapper","bindResourcesData","isSetModel","promises","setResourceCollection","requiredResources","colorIndex","requiredResources_1","startHourField","endHourField","workDaysField","cssClassField","resourceColorField","generateResourceLevels","innerDates","resTreeGroup","lastColumnDates","prevResource","prevResourceData","prevOrder","dateCol","renderDates","resWorkDays","workDays","resStartHour","resEndHour","getDateSlots","dateSlots","generateCustomHours","resCssClass","slotData","resourceLevelIndex","generateHeaderLevels","dateSlots_1","dateSlot","headerDates","headerLevels","currentLevelChilds_1","currentLevelChild","nextLevelChilds_1","nextLevelChild","lastLevelResource","dateHeaderLevels","dateColSpan","datesColumn","headerDates_1","resGroup","resTd","isCrud","setValues","filterData","getCssClass","getResourceData","groupEditIndex","resourceObj","groupEditIndex_1","length_4","addResource","length_5","removeResource","length_6","resToolBarEle","Schedule","eventTooltipTemplateFn","templateParser","editorTemplateFn","quickInfoTemplatesHeaderFn","quickInfoTemplatesContentFn","quickInfoTemplatesFooterFn","initializeResources","isLayoutOnly","initializeView","showHeaderBar","scheduleTouchModule","initializePopups","getViewIndex","setViewOptions","isModuleLoad","viewOptions","selectedView","isOptions","fieldViewName","getActiveViewOptions","majorSlotTemplate","minorSlotTemplate","allowVirtualScrolling","cellTemplate","dateHeaderTemplate","showWeekNumber","crudModule","initializeTemplates","cellTemplateFn","dateHeaderTemplateFn","majorSlotTemplateFn","minorSlotTemplateFn","appointmentTemplateFn","resourceHeaderTemplateFn","headerTooltipTemplateFn","getDayNames","setCldrTimeFormat","previousView","animateLayout","workWeek","agenda","weekAgenda","workWeekAgenda","monthAgenda","noEvents","emptyContainer","allDay","noTitle","deleteMultipleEvent","deleteSeries","editSeries","editEvent","addTitle","moreDetails","deleteRecurrenceContent","deleteMultipleContent","recurrence","wrongPattern","seriesChangeAlert","createError","recurrenceDateValidation","sameDayAlert","editRecurrence","repeats","startEndError","invalidDateError","timelineDay","timelineWeek","timelineWorkWeek","timelineMonth","onScheduleResize","allowKeyboardInteraction","selectedCells_1","cls.SELECTED_CELL_CLASS","cls.ALLDAY_ROW_CLASS","getIndexOfDate","isAllDayCell","dateInMS","getCellTemplate","getDateHeaderTemplate","getMajorSlotTemplate","getMinorSlotTemplate","getAppointmentTemplate","getResourceHeaderTemplate","requireScheduleRefresh","highlightCurrentTime","onEventSettingsPropertyChanged","onGroupSettingsPropertyChanged","setWorkHours","viewStartHour","getStartHour","getEndHour","dates_1","tds","cls.WORK_HOURS_CLASS","endDateFromColSpan","getEndDateFromStartDate","getResourcesByIndex","scrollToHour","getEvents","eventID","getCurrentViewDates","getCurrentViewEvents","refreshEvents","getEventDetails","isSlotAvailable","adjustEventWrapper","ActionBase","slotInterval","actionIndex","excludeSelectors","navigationInterval","scrollInterval","scrollEdges","getChangedData","indexCol","getOriginalElement","cloneIndex_1","saveChangedData","isSameResource","calculateIntervalTime","intervalTime","getContentAreaDimension","viewElement","trElement","getResourceElements","leftOffset","rightOffset","getPageCoordinates","contentElements","minIndex","updateTimePosition","timeElement","timeIndicator","cls.CLONE_TIME_INDICATOR_CLASS","wrapperClass","cls.DATE_HEADER_WRAP_CLASS","cls.TIME_CELLS_WRAP_CLASS","createCloneElement","cloneClassLists","cls.CLONE_ELEMENT_CLASS","cls.EVENT_ACTION_CLASS","eventDragArea","removeCloneElement","getCursorElement","yIsScrollable","xIsScrollable","yInBounds","xInBounds","scrollBy","autoScrollValidation","allowScroll","viewBoundaries","actionClass","updateScrollPosition","cls.ALLDAY_APPOINTMENT_CLASS","updateDraggingDateTime","updateResizingDirection","timeDelay","resizeTarget","resizeArgs","workCell","noOfDays_1","resizeValidation","leftStyles","getLeftRightStyles","horizontalResizing","rightStyles","topStyles","getTopBottomStyles","verticalResizing","bottomStyles","resizeTime","headerName","noOfDays_2","cellOffsetWidth","resizeDate","spanMinutes","cloneIndex","originalWidth","noOfDays","clnHeight","clnTop","isTimeViews","targetWidth","cloneWidth","viewDimension","DragAndDrop","dragAreaTarget","dragHelper","dragPosition","setDragActionDefaultValues","cloneBottom","eventGuid","isAllowDrop","currentDate_1","viewNavigation","morePopupEventDragging","calculateTimelineDate","calculateTimelineTime","calculateVerticalDate","calculateVerticalTime","outWrapper","tarWrapper","cls.APPOINTMENT_WRAPPER_CLASS","cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS","elementHeight_1","getAllDayEventHeight","outerWrapperCls","navigationType","eventDuration","dragEnd","appendCloneElement","swapDragging","heightPerMinute","diffInMinutes","isAllDayDrag","getEventWrapper","spanHours","eventHeight_1","allDayElement","cursorElement","outerWrapper","timeString","endTimeDiff","startTimeDiff","viewEle","widthPerMinute","eventSrt","calculateResourceGroupingPosition","dragDate","srtDateDiff","trCollection","eventHeight","dropSelectors_1","ViewBase","customHelper","getDayName","getTimelineDate","createEventTable","eventTable","collapseRows","cls.SCHEDULE_TABLE_CLASS","createColGroup","lastRow","colGroupEle","getScrollXIndent","scrollTopPanel","getDatesHeaderElement","scrollHeaderLabels","applyLeft","headerCells","tdLeft","hiddenLeft","getHeaderBarHeight","headerBarHeight","cls.DATE_HEADER_CONTAINER_CLASS","colLevels","isCurrentDate","isCurrentMonth","isWorkDay","isWorkHour","daysCount","formatDateRange","longDateFormat","getMobileDateElement","tdData","renderResourceMobileLayout","WorkCellInteraction","navigateEle","navigateView","sameView","isWorkCell","cellDblClick","VerticalEvent","renderedEvents","renderedAllDayEvents","overlapEvents","moreEvents","overlapList","allDayEvents","allDayLevel","animationUiUpdate","renderAppointments","cls.ROW_COUNT_WRAPPER_CLASS","setAllDayRowHeight","rowExpandCollapse","renderEvents","dateCount","resources_1","getResourceList","filterEvents_1","renderAllDayEvents","renderNormalEvents","resourceIndex","createAppointmentElement","recordSubject","appointmentWrapper","appointmentDetails","cls.APPOINTMENT_DETAILS","appointmentSubject","appointmentStartTime","appointmentEndTime","timeStr","recurrenceIcon","renderSpannedIcon","createMoreIndicator","currentDay","countWrapper","innerCountWrap","moreIndicatorElement","data-index","data-count","countCell","moreCount","cls.EVENT_INDICATOR_CLASS","iconLeft","iconRight","iconTop","iconBottom","isSpannedEvent","startEndHours","util.getStartEndHours","dayCount","currentDates","allDayRowCell","cellTop","eStart","eEnd","appWidth","isDateRange","isAlreadyRendered","allDayDifference","allDayIndex","getOverlapIndex","widthAdjustment","wIndex","appointmentElement","events.eventRendered","appHeight","allDayRowHeight","addOrRemoveClass","schedule","isHourRange","isSameRange","getTopValue","appIndex","adjustOverlapElements","appointmentWrap","appLeft","eventsList","date_1","appointmentList_1","appointment_1","filterList","eventsList_1","appLevel","length1","length2","eleGuid","apps","moreEventCount","cls.APPOINTMENT_ROW_EXPAND_CLASS","cls.APPOINTMENT_ROW_COLLAPSE_CLASS","getEventHeight","eventElement","MonthEvent","moreIndicatorHeight","appointmentWrapper_1","util.getElementHeightFromClass","monthHeaderHeight","util.getOuterHeight","cls.DATE_HEADER_CLASS","renderResourceEvents","renderEventsHandler","workCells","getSlotDates","splittedEvents_1","updateIndicatorIcon","cloneData","eventLocation","innerElement","appendEventIcons","overlapCount","diffInDays","cellTd","appTop","renderEventElement","cellTd_1","getFilteredEvents","appArea","renderedAppCount","getMoreIndicatorElement","moreIndicatorClick","getOverlapEvents","appointmentsList","appointments_1","moreEventArgs","data-start-date","data-end-date","VerticalView","baseCssClass","workCellAction","event.scrollUiUpdate","scrollLeftPanel","onApaptiveMove","onApaptiveScroll","leftPanel","getLeftPanelElement","timecells","getScrollableElement","scrollerHeight","util.getScrollBarWidth","scrollToWorkHour","leftPanelElement","firstWorkHourCell","getTopFromDateTime","columnLevels","workStartHour","workEndHour","renderDates_1","cls.CURRENT_DAY_CLASS","isWorkHourRange","showTimeIndicator","getCurrentTimeIndicatorIndex","changeCurrentTimePosition","currentTimeIndicatorTimer","clearCurrentTimeIndicatorTimer","currentDateIndex","removeCurrentTimeIndicatorElements","firstRow","topInPx","curTimeWrap","cls.PREVIOUS_TIMELINE_CLASS","currentDateIndex_1","cls.CURRENT_TIMELINE_CLASS","currentTimeEle","cls.CURRENT_TIME_CLASS","timeCellsWrap","cls.HIDE_CHILDS_CLASS","getWorkCellHeight","getTdContent","cls.TABLE_WRAP_CLASS","cls.OUTER_TABLE_CLASS","dateTd","renderDatesHeader","indentTd","renderLeftIndent","workTd","scrollContainer","renderTimeCells","renderContentArea","timesTd","ntr_1","util.getWeekNumber","createTd","appointmentExpandCollapse","nth","createAllDayRow","wireCellEvents","createEventWrapper","event.renderCell","getTimeSlotRows","renderContentTable","createContentTd","renderContentTableHeader","getContentTdClass","cellDate","util.setTime","data-date","innerWrapper","getContentAreaElement","msMajorInterval","msStartHour","msEndHour","majorTickDivider","Day","Week","WorkWeek","par","Month","dayNameFormat","monthDates","onScrollUIUpdate","onCellClick","cls.WEEK_NUMBER_WRAPPER_CLASS","getDayNameFormat","renderWeekNumberContent","contentArea","monthAgendaWrapper","renderAppointmentContainer","contentWrapper","contentWrapTable","createWeekNumberElement","createHeaderCell","getContentSlots","slotDatas","prepareSlots","includeResource","colDates_2","colDate","resourcesTd","colDates_1","updateClassList","isOtherMonth","util.firstDateOfMonth","util.lastDateOfMonth","util.addMonths","renderDateHeaderElement","dateHeader","getMonthStart","monthStart","util.getWeekFirstDate","getMonthEnd","util.WEEK_LENGTH","monthEnd","AgendaBase","viewBase","createAgendaContentElement","aTd","appWrapper","createAppointment","appSubjectWrap","strDate","allDayStr","processAgendaEvents","splited","wireEventActions","eventElement_1","dateHeaderElement_1","dayNavigationClick","calculateResourceTableElement","agendaDate","agendaLastDate","initialDate","lastLevelInfo","tempLastLevelInfo","firstDate","finalDate","agendaCollection","hideEmptyAgendaDays","resDataCollection","resDayCollection","topResources","tempGroupedData","totalRowSpan","createResourceTableRow","renderEmptyContent","tContent","tContentCollection","rowSpanCollection","createDateHeaderElement","eTr","createTableRowElement","eTd","aria-rowindex","aria-colindex","dTd","Agenda","agendaDates","virtualScrollTop","agendaBase","eventLoad","refreshEvent","refreshDate","appointmentFiltering","appoint","updateHeaderText","agendaDaysCount","nTr","cTd","agendaScrolling","virtualScrolling","filterDate","emptyTBody","getElementFromScrollerPosition","scrollDate","getPreviousNextDate","scrollToValue","getStartDateFromEndDate","dateStart","dateEnd","onAgendaScrollUiUpdate","MonthAgenda","wrapperContainer","appWrap","cls.APPOINTMENT_WRAP_CLASS","appendAppContainer","setEventWrapperHeight","availableHeight","clearElements","cls.APPOINTMENT_INDICATOR_CLASS","onEventRender","appContainer","appointmentIndicators_1","TimelineEvent","appContainers","dayLength","appointments_2","slotsPerDay","wrapIndex","getStartTime","getEndTime","appRight","getNormalEventsWidth","getRowTop","moreIndicator","appPos","isAlreadyAvail","slotStartTime","slotEndTime","getFilterEvents","getNextDay","isSameDay","getSameDayEventsWidth","getSpannedEventsWidth","spannedWidth","getAppointmentLeft","slotTd","indicatorPos","TimelineHeaderRow","groupByYear","groupByMonth","dates_2","groupByWeek","dates_3","jsDate","generateSlots","tempFn","tdDatas","htmlCol","hourSlots","lastLevelColspan","byYear","byMonth","byWeek","TimelineViews","getLeftFromDateTime","generateTimeSlots","timeSlotData","tempTimeSlots_1","headerWrap","diffInDates","getWorkCellWidth","getRowCount","getResourceTdData","resLevel","resSHr","resEHr","TimelineMonth","contentTr","contentTd","index.Schedule","index.Day","index.Week","index.WorkWeek","index.Month","index.Agenda","index.MonthAgenda","index.TimelineViews","index.TimelineMonth","index.DragAndDrop","nextChild","itemRendering","itemSelected","tooltipRendering","legendItemRendering","InitialDrillSettings","LeafItemSettings","LevelSettings","TreeMapAjax","LayoutPanel","processLayoutPanel","totalRect","levelsOfData","initialDrillDown","groupName","getDrilldownData","calculateLayoutItems","renderLayoutItems","drillData","computeSliceAndDiceDimensional","computeSquarifyDimensional","leafItem","sliceAndDiceProcess","groupGap","childValue","parentArea","alottedValue","totalWeight","isHierarchicalData","calculateChildrenLayout","groupPadding","computeTotalArea","performRowsLayout","newCoordinates","newStack","nextDatum","restData","currentRowLength","valueSum","newContainer","cutArea","findMaxAspectRatio","minArea","maxArea","sumArea","isParent","subXOffset","subYOffset","dataLength_1","dataSum_1","datum","txtVisible","getItemColor","interSectAction","rectPath","layoutGroup","templateGroup","isLeafItem","headerFormat","showLabels","enableDrillDown","headerStyle","labelTemplate","RenderItems","renderItemText","textName","tspanText","labelInterSectAction","maxNumber","collectionLength","stringText","itemFill","itemOpacity","equalColorValuePath","rangeColorValuePath","templateLocation","TreeMap","drilledItems","processDataManager","renderTreeMapElements","processingData","treeMapLegendModule","elementChange","checkIsHierarchicalData","levelOrderName","hierarchyData","processHierarchicalData","processFlatJsonData","reOrderLevelData","findTotalWeight","dataCount","mainData_1","orderNames","childName","childGroupPath_1","currentName","prevPath","groupObj","clickOnTreeMap","mouseDownOnTreeMap","mouseMoveOnTreeMap","mouseEndOnTreeMap","mouseLeaveOnTreeMap","resizeOnTreeMap","mouseEvent","newDrillItem","layoutID","moveArgs","treeMapTooltipModule","removeInteractivePointer","TreeMapLegend","legendNames","gradientCount","defsElement","findColorMappingLegendItems","findPaletteLegendItems","orientation_1","legendTitleSize","startX_1","startY_1","rectWidth_1","rectHeight_1","itemTextStyle_1","legendLength_1","calculateLegendItems","legendName","itemArea","isAddData","gradientElement","colorMapProcess","isAddNewLegendData","stop1Color","stop2Color","newDataProcess","renderLegendTitle","isLineShape","interactiveId","drawInteractivePointer","areaX","areaY","TreeMapHighlight","processHighlight","treeMapElement","orders","highLightElements","highLightId","selectionElements","TreeMapSelection","selectionId","TreeMapTooltip","toolTipData","index.TreeMap","index.TreeMapTooltip","index.TreeMapLegend","index.TreeMapHighlight","index.TreeMapSelection"],"mappings":"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AGpBn8D,IACIjpF,GAAUuhJ,QAAS,GAAIC,UAAW,IAAM5D,KACzCC,EAASxqJ,UAAW,qBAAiB,GACxC41F,IACI9pF,GAAS,IACV0+I,EAASxqJ,UAAW,iBAAa,GACpC41F,IACI9pF,GAAS,IACV0+I,EAASxqJ,UAAW,eAAW,GAClC41F,IACI9pF,EAAS,OACV0+I,EAASxqJ,UAAW,gBAAY,GACnC41F,IACI9pF,GAAS,IACV0+I,EAASxqJ,UAAW,gBAAY,GACnC41F,IACI9pF,GAAS,IACV0+I,EAASxqJ,UAAW,kBAAc,GACrC41F,IACIjpF,KAAY29I,KACbE,EAASxqJ,UAAW,eAAW,GAClC41F,IACI9pF,EAAS,KACV0+I,EAASxqJ,UAAW,yBAAqB,GAC5C41F,IACI9pF,EAAS,IACV0+I,EAASxqJ,UAAW,mBAAe,GACtC41F,IACI9pF,EAAS,MACV0+I,EAASxqJ,UAAW,mBAAe,GACtC41F,IACI9pF,EAAS,OACV0+I,EAASxqJ,UAAW,gBAAY,GACnC41F,IACI3oF,OAAiBo9I,KAClBG,EAASxqJ,UAAW,aAAS,GAChC41F,IACI9pF,GAAS,IACV0+I,EAASxqJ,UAAW,oBAAgB,GACvC41F,IACI9pF,GAAS,IACV0+I,EAASxqJ,UAAW,uBAAmB,GAC1C41F,IACIloF,KACD88I,EAASxqJ,UAAW,eAAW,GAClC41F,IACIloF,KACD88I,EAASxqJ,UAAW,gBAAY,GACnC41F,IACIloF,KACD88I,EAASxqJ,UAAW,iBAAa,GACpC41F,IACIloF,KACD88I,EAASxqJ,UAAW,eAAW,GAClC41F,IACIloF,KACD88I,EAASxqJ,UAAW,eAAW,GAClC41F,IACIloF,KACD88I,EAASxqJ,UAAW,gBAAY,GACnC41F,IACIloF,KACD88I,EAASxqJ,UAAW,gBAAY,GACnC41F,IACIloF,KACD88I,EAASxqJ,UAAW,gBAAY,GACnC41F,IACIloF,KACD88I,EAASxqJ,UAAW,cAAU,GACjC41F,IACIloF,KACD88I,EAASxqJ,UAAW,oBAAgB,GACvC41F,IACIloF,KACD88I,EAASxqJ,UAAW,oBAAgB,GAC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IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,I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IACVwhO,EAAKttO,UAAW,oBAAgB,GACnC41F,IACI9pF,GAAS,IACVwhO,EAAKttO,UAAW,uBAAmB,GACtC41F,IACI9pF,GAAS,IACVwhO,EAAKttO,UAAW,mCAA+B,GAClD41F,IACI9pF,EAAS,SACVwhO,EAAKttO,UAAW,oBAAgB,GACnC41F,IACI9pF,EAAS,WACVwhO,EAAKttO,UAAW,iBAAa,GAChC41F,IACI9pF,EAAS,SACVwhO,EAAKttO,UAAW,0BAAsB,GACzC41F,IACI9pF,EAAS,SACVwhO,EAAKttO,UAAW,oBAAgB,GACnC41F,IACI9pF,EAAS,iBACVwhO,EAAKttO,UAAW,sBAAkB,GACrC41F,IACI9pF,EAAS,YACVwhO,EAAKttO,UAAW,oBAAgB,GACnC41F,IACI9pF,EAAS,YACVwhO,EAAKttO,UAAW,qBAAiB,GACpC41F,IACI9pF,EAAS,KACVwhO,EAAKttO,UAAW,YAAQ,GAC3B41F,IACI9pF,GAAS,IACVwhO,EAAKttO,UAAW,eAAW,GAC9B41F,IACI9pF,EAAS,IACVwhO,EAAKttO,UAAW,6BAAyB,GAC5C41F,IACI9pF,EAAS,IACVwhO,EAAKttO,UAAW,qBAAiB,GACpC41F,IACI9pF,EAAS,OACVwhO,EAAKttO,UAAW,iBAAa,GAChC41F,IACI9pF,GAAS,IACVwhO,EAAKttO,UAAW,2BAAuB,GAC1C41F,IACI9pF,EAAS,OACVwhO,EAAKttO,UAAW,qBAAiB,GACpC41F,IACI9pF,EAAS,OACVwhO,EAAKttO,UAAW,eAAW,GAC9B41F,IACI9pF,EAAS,OACVwhO,EAAKttO,UAAW,eAAW,GAC9B41F,IACI9pF,EAAS,OACVwhO,EAAKttO,UAAW,gBAAY,GAC/B41F,IACI9pF,EAAS,KACVwhO,EAAKttO,UAAW,yBAAqB,GACxC41F,IACI9pF,GAAS,IACVwhO,EAAKttO,UAAW,kBAAc,GACjC41F,IACIjpF,KAAYwgO,KACbG,EAAKttO,UAAW,sBAAkB,GACrC41F,IACIjpF,KAAYygO,KACbE,EAAKttO,UAAW,sBAAkB,GACrC41F,IACIjpF,KAAYqgO,KACbM,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BAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,OAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,OAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,OAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,OAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,OAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,OAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAE7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,KAAM,MAC7C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,MAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,MAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,MAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,MAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,MAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,MAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,MAC9C4C,KAAKihS,yBAAyB7jS,SAAS,KAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,OAC9C4C,KAAKihS,yBAAyB7jS,SAAS,MAAO,QAE3C0jS,KAGPQ,GAA+B,WAG/B,SAASA,IAKLthS,KAAK46E,SAIL56E,KAAKgiS,WAAa,EAKlBhiS,KAAKiiS,kBAAoB,IAAIzjS,MAAM,OAMnCwB,KAAKyiG,EAAI,EAITziG,KAAKkiS,IAAM,EAIXliS,KAAKmiS,IAAM,EAIXniS,KAAK0sE,EAAI,EAIT1sE,KAAKoiS,GAAK,EAIVpiS,KAAKqiS,IAAM,EAIXriS,KAAKsiS,IAAM,EAIXtiS,KAAKuiS,IAAM,EAIXviS,KAAKwiS,GAAK,EAIVxiS,KAAKyiS,GAAK,EAIVziS,KAAK0iS,GAAK,GAIV1iS,KAAK2iS,GAAK,GAIV3iS,KAAK4iS,GAAK,GAIV5iS,KAAK6iS,IAAM,GAIX7iS,KAAK8iS,GAAK,GAIV9iS,KAAK4sE,EAAI,GAIT5sE,KAAK+iS,EAAI,GAIT/iS,KAAKgjS,GAAK,GAIVhjS,KAAKijS,GAAK,GAIVjjS,KAAKkjS,WACDljS,KAAKyiG,EAAGziG,KAAKwiS,GAAIxiS,KAAK8iS,GAAI9iS,KAAKyiS,GAAIziS,KAAKyiS,GAAIziS,KAAK+iS,EAAG/iS,KAAK0iS,GAAI1iS,KAAK0iS,GAAI1iS,KAAK4sE,EAAG5sE,KAAK2iS,GAAI3iS,KAAK2iS,GAAI3iS,KAAK+iS,EAAG/iS,KAAK4iS,GAAI5iS,KAAK4iS,GACtH5iS,KAAKgjS,GAAIhjS,KAAK6iS,IAAK7iS,KAAK6iS,IAAK7iS,KAAK4sE,EAAG5sE,KAAK8iS,GAAI,GAAI9iS,KAAK8iS,GAAI,GAAI,GAAI9iS,KAAK4sE,EAAG,GAAI,GAAI5sE,KAAK+iS,EAAG,GAAI,GAAI/iS,KAAKgjS,GAAI,GAAI,GAChHhjS,KAAKijS,GAAI,GAAI,GAAIjjS,KAAK0iS,GAAI,GAAI,GAAI1iS,KAAKijS,GAAI,GAAI,GAAIjjS,KAAK0iS,GAAI,GAAI,GAAI1iS,KAAK4iS,GAAI,GAAI,GAAI5iS,KAAK0iS,GAAI,GAAI,GAAI1iS,KAAK4iS,GAC3G,GAAI,GAAI5iS,KAAK4iS,GAAI,GAAI,GAAI5iS,KAAKwiS,GAAI,GAAI,GAAIxiS,KAAK4iS,GAAI,GAAI,GAAI5iS,KAAKijS,GAAI,GAAI,GAAIjjS,KAAKyiG,EAAG,GAAI,GAAIziG,KAAKijS,GAAI,GAAI,IAAKjjS,KAAKyiG,EACnH,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,IAAKjjS,KAAK8iS,GAAI,IAAK,IAAK9iS,KAAK4sE,EAAG,IAAK,IAAK5sE,KAAK8iS,GAAI,IAAK,IAAK9iS,KAAK4iS,GAC1F,IAAK,IAAK5iS,KAAKijS,GAAI,IAAK,IAAKjjS,KAAK0iS,GAAI,IAAK,IAAK1iS,KAAKijS,GAAI,IAAK,IAAKjjS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GAC1F,IAAK,IAAKjjS,KAAK0iS,GAAI,IAAK,IAAK1iS,KAAKwiS,GAAI,IAAK,IAAKxiS,KAAKijS,GAAI,IAAK,IAAKjjS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GAC1F,IAAK,IAAKjjS,KAAKwiS,GAAI,IAAK,IAAKxiS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,IAAKjjS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GACzF,IAAK,IAAKjjS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,IAAKjjS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,IAAKjjS,KAAKyiG,EACzF,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,IAAKjjS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,IAAKjjS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GACzF,IAAK,IAAKjjS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,IAAKjjS,KAAK6iS,IAAK,IAAK,IAAK7iS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAK6iS,IAC1F,IAAK,IAAK7iS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,IAAKjjS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,IAAKjjS,KAAKyiG,EACzF,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,IAAKjjS,KAAKyiG,EAAG,IAAK,IAAKziG,KAAKijS,GAAI,IAAK,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC5F,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC9E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAK0sE,EAAG,KAAM,KAAM1sE,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAK0sE,EAAG,KAAM,KAAM1sE,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAK0sE,EAAG,KAAM,KAAM1sE,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK0sE,EAC/E,KAAM,KAAM1sE,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK0sE,EAAG,KAAM,KAAM1sE,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKoiS,GAC7E,KAAM,KAAMpiS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK4iS,GAAI,KAAM,KAAM5iS,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAKijS,GAC/E,KAAM,KAAMjjS,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAKyiG,EAChF,KAAM,KAAMziG,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAKyiG,EAC/E,KAAM,KAAMziG,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK2iS,GAChF,KAAM,KAAM3iS,KAAK0iS,GAAI,KAAM,KAAM1iS,KAAK2iS,GAAI,KAAM,KAAM3iS,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAK6iS,IAChF,KAAM,KAAM7iS,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAK6iS,IACjF,KAAM,KAAM7iS,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKijS,GAAI,KAAM,KAAMjjS,KAAK6iS,IACjF,KAAM,KAAM7iS,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAKwiS,GAAI,KAAM,KAAMxiS,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAKyiG,EAChF,KAAM,KAAMziG,KAAK8iS,GAAI,KAAM,KAAM9iS,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKoiS,GACjF,KAAM,KAAMpiS,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAKyiG,EAChF,KAAM,KAAMziG,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKoiS,GAAI,KAAM,KAAMpiS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK0iS,GAAI,KAAM,KAAM1iS,KAAKyiG,EAChF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK0iS,GAAI,KAAM,KAAM1iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAChF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAK0iS,GAAI,KAAM,KAAM1iS,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAChF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK0iS,GAAI,KAAM,KAAM1iS,KAAKyiG,EAChF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EACjF,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAChF,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKgjS,GAAI,KAAM,KAAMhjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK0iS,GAC/E,KAAM,KAAM1iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC/E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKgjS,GAChF,KAAM,KAAMhjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC/E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAAK,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC/E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKgjS,GAAI,KAAM,KAAMhjS,KAAK8iS,GAAI,KAAM,KAAM9iS,KAAKyiG,EAC/E,KAAM,KAAMziG,KAAK0sE,EAAG,KAAM,KAAM1sE,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKgjS,GAAI,KAAM,KAAMhjS,KAAK4sE,EAC/E,KAAM,KAAM5sE,KAAKkiS,IAAK,KAAM,KAAMliS,KAAKqiS,IAAK,KAAM,KAAMriS,KAAKuiS,IAAK,KAAM,KAAMviS,KAAKmiS,IACnF,KAAM,KAAMniS,KAAKsiS,IAAK,KAAM,KAAMtiS,KAAKgjS,GAAI,KAAM,KAAMhjS,KAAK0iS,GAAI,KAAM,KAAM1iS,KAAKijS,GACjF,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKgjS,GAC9E,KAAM,KAAMhjS,KAAK8iS,GAAI,KAAM,KAAM9iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK8iS,GAAI,KAAM,KAAM9iS,KAAKwiS,GAC/E,KAAM,KAAMxiS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKwiS,GAAI,KAAM,KAAMxiS,KAAK0iS,GAAI,KAAM,KAAM1iS,KAAKijS,GAC/E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKwiS,GAAI,KAAM,KAAMxiS,KAAK0iS,GAAI,KAAM,KAAM1iS,KAAKijS,GAC/E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK0iS,GAAI,KAAM,KAAM1iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK6iS,IAC9E,KAAM,KAAM7iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAK0iS,GAC9E,KAAM,KAAM1iS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAK0iS,GAAI,KAAM,KAAM1iS,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC/E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAC9E,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKwiS,GAC9E,KAAM,KAAMxiS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKwiS,GAAI,KAAM,KAAMxiS,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAC/E,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAC/E,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAC/E,KAAM,KAAMziG,KAAKijS,GAAI,KAAM,KAAMjjS,KAAKyiG,EAAG,KAAM,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAClF,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EACvF,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EACvF,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EACvF,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EACvF,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EACvF,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EACvF,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EACvF,MAAO,MAAOziG,KAAKgjS,GAAI,MAAO,MAAOhjS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GACvF,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK6iS,IAAK,MAAO,MAAO7iS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EACxF,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EACvF,MAAO,MAAOziG,KAAK6iS,IAAK,MAAO,MAAO7iS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GACxF,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GACtF,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GACtF,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GACtF,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GACtF,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GACtF,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK0sE,EACtF,MAAO,MAAO1sE,KAAK6iS,IAAK,MAAO,MAAO7iS,KAAK0sE,EAAG,MAAO,MAAO1sE,KAAK0iS,GAAI,MAAO,MAAO1iS,KAAK0sE,EACxF,MAAO,MAAO1sE,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK0sE,EAAG,MAAO,MAAO1sE,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK0sE,EACrF,MAAO,MAAO1sE,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK0sE,EAAG,MAAO,MAAO1sE,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK0sE,EACrF,MAAO,MAAO1sE,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK0sE,EAAG,MAAO,MAAO1sE,KAAKoiS,GAAI,MAAO,MAAOpiS,KAAKyiG,EACtF,MAAO,MAAOziG,KAAKoiS,GAAI,MAAO,MAAOpiS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKoiS,GACvF,MAAO,MAAOpiS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKoiS,GAAI,MAAO,MAAOpiS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKoiS,GACtF,MAAO,MAAOpiS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK6iS,IAAK,MAAO,MAAO7iS,KAAKyiG,EACxF,MAAO,MAAOziG,KAAK6iS,IAAK,MAAO,MAAO7iS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAK4iS,GACxF,MAAO,MAAO5iS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAK4iS,GAAI,MAAO,MAAO5iS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GACvF,MAAO,MAAOjjS,KAAK4iS,GAAI,MAAO,MAAO5iS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAK0iS,GAAI,MAAO,MAAO1iS,KAAKijS,GACxF,MAAO,MAAOjjS,KAAK0iS,GAAI,MAAO,MAAO1iS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GACvF,MAAO,MAAOjjS,KAAK0iS,GAAI,MAAO,MAAO1iS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKoiS,GACvF,MAAO,MAAOpiS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKoiS,GAAI,MAAO,MAAOpiS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK8iS,GACtF,MAAO,MAAO9iS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAK0iS,GAAI,MAAO,MAAO1iS,KAAKijS,GACvF,MAAO,MAAOjjS,KAAK0iS,GAAI,MAAO,MAAO1iS,KAAK4iS,GAAI,MAAO,MAAO5iS,KAAK0iS,GAAI,MAAO,MAAO1iS,KAAK4iS,GACxF,MAAO,MAAO5iS,KAAKyiS,GAAI,MAAO,MAAOziS,KAAKwiS,GAAI,MAAO,MAAOxiS,KAAK4iS,GAAI,MAAO,MAAO5iS,KAAKijS,GACxF,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GACtF,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK0iS,GAAI,MAAO,MAAO1iS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAK0iS,GACvF,MAAO,MAAO1iS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,EAAG,MAAO,MAAOziG,KAAK8iS,GACtF,MAAO,MAAO9iS,KAAKijS,GAAI,MAAO,MAAOjjS,KAAKyiG,GAE9C,IAAK,IAAIvmG,EAAI,EAAGA,EAAI8D,KAAKkjS,UAAU1mS,SAAUN,EAIzC,IAHA,IAAIqB,EAAQyC,KAAKkjS,UAAUhnS,GACvB+iB,EAAMjf,KAAKkjS,YAAYhnS,GACvBg0B,EAAIlwB,KAAKkjS,YAAYhnS,GAClBqB,GAAS0hB,GACZjf,KAAKiiS,kBAAkB1kS,KAAW2yB,EAkR9C,OA5QAoxQ,EAAclmS,UAAUmmS,eAAiB,SAAUH,EAAW55J,GAC1DxnI,KAAK46E,MAAQ56E,KAAKmjS,iBAAiB/B,GACnCphS,KAAKgiS,UAAYx6J,EAAQxnI,KAAKkiS,IAAMliS,KAAKyiG,EACzCziG,KAAKojS,gBAEL,IAAK,IADDrkS,KACK7C,EAAI,EAAGA,EAAI8D,KAAK2lF,OAAOnpF,OAAQN,IACpC6C,EAAO7C,GAAK8D,KAAK2lF,OAAOzpF,GAE5B,OAAO6C,GAEXuiS,EAAclmS,UAAU+nS,iBAAmB,SAAUn0Q,GAEjD,IAAK,IADDq0Q,KACKnnS,EAAI,EAAGA,EAAI8yB,EAAKxyB,OAAQN,IAC7BmnS,EAAennS,GAAK8D,KAAKiiS,kBAAkBjzQ,EAAK9yB,GAAGk3G,WAAW,IAElE,OAAOiwL,GAEX/B,EAAclmS,UAAUkoS,iBAAmB,WACvC,IAAK,IAAIpnS,EAAI,EAAGA,EAAI8D,KAAKxD,OAAQN,IAC7B8D,KAAK2lF,OAAOzpF,GAAK8D,KAAKgiS,WAG9BV,EAAclmS,UAAUmoS,UAAY,WAChCvjS,KAAKsjS,mBACL,IAAK,IAAI9+H,EAAI,EAAGA,EAAIxkK,KAAKxD,SAAUgoK,EAAG,CAClC,IAAIiL,EAAQzvK,KAAK2lF,OAAO6+E,GACD,IAAV,IAARiL,KACDA,GAAS,IACTzvK,KAAKjB,OAAOylK,GAAwB,IAAT,EAARiL,GAAsBzvK,KAAKyiG,EAAIziG,KAAK0sE,GAE3D1sE,KAAK2lF,OAAO6+E,GAAKiL,IAGzB6xH,EAAclmS,UAAUooS,aAAe,SAAU1xR,EAAO29J,EAAOjzK,GAC3D,GAAoB,IAAP,EAARizK,GACD,IAAK,IAAIvzK,EAAI4V,EAAO5V,EAAIM,IAAUN,EAC1B8D,KAAKjB,OAAO7C,KAAO8D,KAAK0sE,EACxB1sE,KAAK2lF,OAAOzpF,IAAM,EAEb8D,KAAKjB,OAAO7C,KAAO8D,KAAKyiG,IAC7BziG,KAAK2lF,OAAOzpF,IAAM,QAK1B,IAASA,EAAI4V,EAAO5V,EAAIM,IAAUN,EAC1B8D,KAAKjB,OAAO7C,KAAO8D,KAAK0sE,IACxB1sE,KAAK2lF,OAAOzpF,IAAM,IAKlColS,EAAclmS,UAAUgoS,cAAgB,WACpCpjS,KAAKxD,OAASwD,KAAK46E,MAAMp+E,OACzBwD,KAAKjB,OAASiB,KAAK46E,MACnB56E,KAAK2lF,UACL3lF,KAAKujS,YACLvjS,KAAKxD,OAASwD,KAAKyjS,8BAGnB,IAFA,IAAI3jI,EAAU9/J,KAAKgiS,UACf9lS,EAAI,EACDA,EAAI8D,KAAKxD,QAAQ,CAIpB,IAHA,IAAIizK,EAAQzvK,KAAK2lF,OAAOzpF,GACpBwnS,EAAgD,IAAT,EAA3Br3R,KAAKC,IAAIwzJ,EAAS2P,IAAuBzvK,KAAKyiG,EAAIziG,KAAK0sE,EACnE9vC,EAAW1gC,EAAI,EACZ0gC,EAAW58B,KAAKxD,QAAUwD,KAAK2lF,OAAO/oD,KAAc6yI,KACrD7yI,EAEN,IAAIy9N,EAAUz9N,EAAW58B,KAAKxD,OAASwD,KAAK2lF,OAAO/oD,GAAY58B,KAAKgiS,UAChEt7R,EAA6C,IAAT,EAA3B2F,KAAKC,IAAI+tP,EAAS5qF,IAAuBzvK,KAAKyiG,EAAIziG,KAAK0sE,EACpE1sE,KAAK2jS,SAASznS,EAAG0gC,EAAU6yI,EAAOi0H,EAASh9R,GAC3C1G,KAAKwjS,aAAatnS,EAAGuzK,EAAO7yI,GAC5BkjI,EAAU2P,EACVvzK,EAAI0gC,EAER58B,KAAK4jS,wBAAwB5jS,KAAKxD,SAEtC8kS,EAAclmS,UAAUqoS,4BAA8B,WAElD,IAAK,IADD3xR,EAAQ,EACH5V,EAAI,EAAGA,EAAI8D,KAAKxD,SAAUN,EACzB8D,KAAK46E,MAAM1+E,KAAO8D,KAAKkiS,KAAOliS,KAAK46E,MAAM1+E,KAAO8D,KAAKqiS,KAAOriS,KAAK46E,MAAM1+E,KAAO8D,KAAKmiS,KACrFniS,KAAK46E,MAAM1+E,KAAO8D,KAAKsiS,KAAOtiS,KAAK46E,MAAM1+E,KAAO8D,KAAKuiS,KAAOviS,KAAK46E,MAAM1+E,KAAO8D,KAAK8iS,KACnF9iS,KAAKjB,OAAO+S,GAAS9R,KAAKjB,OAAO7C,GACjC8D,KAAK2lF,OAAO7zE,GAAS9R,KAAK2lF,OAAOzpF,GACjC4V,KAGR,OAAOA,GAEXwvR,EAAclmS,UAAUwoS,wBAA0B,SAAUpnS,GACxD,IAAK,IAAIN,EAAI8D,KAAK46E,MAAMp+E,OAAS,EAAGN,GAAK,IAAKA,EACtC8D,KAAK46E,MAAM1+E,KAAO8D,KAAKkiS,KAAOliS,KAAK46E,MAAM1+E,KAAO8D,KAAKqiS,KAAOriS,KAAK46E,MAAM1+E,KAAO8D,KAAKmiS,KACnFniS,KAAK46E,MAAM1+E,KAAO8D,KAAKsiS,KAAOtiS,KAAK46E,MAAM1+E,KAAO8D,KAAKuiS,KAAOviS,KAAK46E,MAAM1+E,KAAO8D,KAAK8iS,IACnF9iS,KAAKjB,OAAO7C,GAAK8D,KAAK46E,MAAM1+E,GAC5B8D,KAAK2lF,OAAOzpF,IAAM,IAGlBM,GAAU,EACVwD,KAAKjB,OAAO7C,GAAK8D,KAAKjB,OAAOvC,GAC7BwD,KAAK2lF,OAAOzpF,GAAK8D,KAAK2lF,OAAOnpF,IAGrC,IAASN,EAAI,EAAGA,EAAI8D,KAAK46E,MAAMp+E,OAAQN,KACX,IAApB8D,KAAK2lF,OAAOzpF,KAER8D,KAAK2lF,OAAOzpF,GADN,IAANA,EACiB8D,KAAKgiS,UAGLhiS,KAAK2lF,OAAOzpF,EAAI,KAKjDolS,EAAclmS,UAAUuoS,SAAW,SAAU7xR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,GAE1E,IAAK,IADDC,EAAWF,EACN3nS,EAAI4V,EAAO5V,EAAIM,IAAUN,EAC1B8D,KAAKjB,OAAO7C,KAAO8D,KAAK6iS,IACxB7iS,KAAKjB,OAAO7C,GAAK6nS,EAGjBA,EAAW/jS,KAAKjB,OAAO7C,GAG/B8D,KAAKgkS,oBAAoBlyR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,IAE9DxC,EAAclmS,UAAU4oS,oBAAsB,SAAUlyR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,GACrF,IAAK,IAAI5nS,EAAI4V,EAAO5V,EAAIM,IAAUN,EAC9B,GAAI8D,KAAKjB,OAAO7C,KAAO8D,KAAKwiS,GACxB,IAAK,IAAI9+Q,EAAIxnB,EAAI,EAAGwnB,GAAK5R,IAAS4R,EAC9B,GAAI1jB,KAAKjB,OAAO2kB,KAAO1jB,KAAKyiG,GAAKziG,KAAKjB,OAAO2kB,KAAO1jB,KAAK0sE,GAAK1sE,KAAKjB,OAAO2kB,KAAO1jB,KAAKoiS,GAAI,CAClFpiS,KAAKjB,OAAO2kB,KAAO1jB,KAAKoiS,KACxBpiS,KAAKjB,OAAO7C,GAAK8D,KAAK2iS,IAE1B,MAKhB3iS,KAAKikS,sBAAsBnyR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,IAEhExC,EAAclmS,UAAU6oS,sBAAwB,SAAUnyR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,GACvF,IAAK,IAAI5nS,EAAI4V,EAAO5V,EAAIM,IAAUN,EAC1B8D,KAAKjB,OAAO7C,KAAO8D,KAAKoiS,KACxBpiS,KAAKjB,OAAO7C,GAAK8D,KAAK0sE,GAG9B1sE,KAAKkkS,6BAA6BpyR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,IAEvExC,EAAclmS,UAAU8oS,6BAA+B,SAAUpyR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,GAC9F,IAAK,IAAI5nS,EAAI4V,EAAQ,EAAG5V,EAAIM,EAAS,IAAKN,EACtC,GAAI8D,KAAKjB,OAAO7C,KAAO8D,KAAKyiS,IAAMziS,KAAKjB,OAAO7C,KAAO8D,KAAK4iS,GAAI,CAC1D,IAAI9iI,EAAU9/J,KAAKjB,OAAO7C,EAAI,GAC1Bm+P,EAAUr6P,KAAKjB,OAAO7C,EAAI,GAC1B4jK,IAAY9/J,KAAKwiS,IAAMnoC,IAAYr6P,KAAKwiS,GACxCxiS,KAAKjB,OAAO7C,GAAK8D,KAAKwiS,GAEjBxiS,KAAKjB,OAAO7C,KAAO8D,KAAK4iS,IAAM9iI,IAAY9/J,KAAK2iS,IAAMtoC,IAAYr6P,KAAK2iS,KAC3E3iS,KAAKjB,OAAO7C,GAAK8D,KAAK2iS,IAIlC3iS,KAAKmkS,8BAA8BryR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,IAExExC,EAAclmS,UAAU+oS,8BAAgC,SAAUryR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,GAC/F,IAAK,IAAI5nS,EAAI4V,EAAO5V,EAAIM,IAAUN,EAC9B,GAAI8D,KAAKjB,OAAO7C,KAAO8D,KAAK0iS,GAAI,CAC5B,IAAIr2P,EAAInwC,EACJg0B,KACJA,EAAE1rB,KAAKxE,KAAK0iS,IACZ,IAAIl1P,EAAIxtC,KAAKokS,UAAU/3P,EAAG7vC,EAAQ0zB,GAC9B3zB,EAAO8vC,IAAMv6B,EAAQ+xR,EAAY7jS,KAAKjB,OAAOstC,EAAI,GAIrD,GAHI9vC,IAASyD,KAAKwiS,KACdjmS,EAAQixC,IAAMhxC,EAAUsnS,EAAU9jS,KAAKjB,OAAOyuC,IAE9CjxC,IAASyD,KAAKwiS,GACd,IAAK,IAAI9+Q,EAAI2oB,EAAG3oB,EAAI8pB,IAAK9pB,EACrB1jB,KAAKjB,OAAO2kB,GAAK1jB,KAAKwiS,GAG9BtmS,EAAIsxC,EAGZxtC,KAAKqkS,mBAAmBvyR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,IAE7DxC,EAAclmS,UAAUipS,mBAAqB,SAAUvyR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,GACpF,IAAK,IAAI5nS,EAAI4V,EAAO5V,EAAIM,IAAUN,EAC1B8D,KAAKjB,OAAO7C,KAAO8D,KAAKyiS,IAAMziS,KAAKjB,OAAO7C,KAAO8D,KAAK0iS,IAAM1iS,KAAKjB,OAAO7C,KAAO8D,KAAK4iS,KACpF5iS,KAAKjB,OAAO7C,GAAK8D,KAAKijS,IAG9BjjS,KAAKskS,qBAAqBxyR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,IAE/DxC,EAAclmS,UAAUkpS,qBAAuB,SAAUxyR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,GACtF,IAAK,IAAI5nS,EAAI4V,EAAO5V,EAAIM,IAAUN,EAC9B,GAAI8D,KAAKjB,OAAO7C,KAAO8D,KAAKwiS,GAAI,CAE5B,IAAK,IADD+B,EAAMV,EACDngR,EAAIxnB,EAAI,EAAGwnB,GAAK5R,IAAS4R,EAC9B,GAAI1jB,KAAKjB,OAAO2kB,KAAO1jB,KAAKyiG,GAAKziG,KAAKjB,OAAO2kB,KAAO1jB,KAAK0sE,EAAG,CACxD63N,EAAMvkS,KAAKjB,OAAO2kB,GAClB,MAGJ6gR,IAAQvkS,KAAKyiG,IACbziG,KAAKjB,OAAO7C,GAAK8D,KAAKyiG,GAIlCziG,KAAKwkS,sBAAsB1yR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,IAEhExC,EAAclmS,UAAUgpS,UAAY,SAAUtyR,EAAOtV,EAAQioS,GAEzD,MADE3yR,IACOA,EAAQtV,GAAQ,CAErB,IAAK,IADDqkD,EAAI7gD,KAAKjB,OAAO+S,GACX5V,EAAI,EAAGA,EAAIuoS,EAASjoS,SAAUN,EAC/B2kD,IAAM4jP,EAASvoS,KACf4V,EAAQ9R,KAAKokS,YAAYtyR,EAAOtV,EAAQioS,IAGhD,OAAO3yR,EAEX,OAAOtV,GAEX8kS,EAAclmS,UAAUopS,sBAAwB,SAAU1yR,EAAOtV,EAAQizK,EAAOo0H,EAAWC,GACvF,IAAK,IAAI5nS,EAAI4V,EAAO5V,EAAIM,IAAUN,EAC9B,GAAI8D,KAAKjB,OAAO7C,KAAO8D,KAAKgjS,IAAMhjS,KAAKjB,OAAO7C,KAAO8D,KAAKijS,IAAMjjS,KAAKjB,OAAO7C,KAAO8D,KAAK4sE,GACpF5sE,KAAKjB,OAAO7C,KAAO8D,KAAK+iS,EAAG,CAC3B,IAAI12P,EAAInwC,EACJwoS,GAAQ1kS,KAAK4sE,EAAG5sE,KAAK+iS,EAAG/iS,KAAKgjS,GAAIhjS,KAAKijS,IACtCz1P,EAAIxtC,KAAKokS,UAAU/3P,EAAG7vC,EAAQkoS,GAC9BC,EAAK,EACLC,EAAK,EACLC,EAAK,EACLx4P,IAAMv6B,EACN6yR,EAAKd,GAGLc,EAAK3kS,KAAKjB,OAAOstC,EAAI,MACVrsC,KAAK2iS,GACZgC,EAAK3kS,KAAK0sE,EAELi4N,IAAO3kS,KAAKwiS,KACjBmC,EAAK3kS,KAAK0sE,GAGdl/B,IAAMhxC,EACNooS,EAAKd,GAGLc,EAAK5kS,KAAKjB,OAAOyuC,MACNxtC,KAAK2iS,GACZiC,EAAK5kS,KAAK0sE,EAELk4N,IAAO5kS,KAAKwiS,KACjBoC,EAAK5kS,KAAK0sE,GAIdm4N,EADAF,IAAOC,EACFD,EAGmB,IAAT,EAARl1H,GAAsBzvK,KAAKyiG,EAAIziG,KAAK0sE,EAE/C,IAAK,IAAIhpD,EAAI2oB,EAAG3oB,EAAI8pB,IAAK9pB,EACrB1jB,KAAKjB,OAAO2kB,GAAKmhR,EAErB3oS,EAAIsxC,IAIT8zP,KCt7BPwD,GAA6B,WAC7B,SAASA,IAIL9kS,KAAK+kS,YAAc,IAInB/kS,KAAKglS,aAAe,IA8NxB,OA3MAF,EAAY1pS,UAAUkyD,OAAS,SAAUrD,EAAMh7B,EAAM27C,EAAKq6N,EAAW1mQ,GACjE,GAAY,MAAR0rB,EACA,MAAM,IAAIrpD,MAAM,gCAEpB,GAAY,MAARquB,EACA,MAAM,IAAIruB,MAAM,gCAEpB,IAAI7B,KAQJ,OAPIkwB,EAAKokQ,QACLt0R,EAASiB,KAAKklS,aAAaj7O,EAAM2gB,EAAKrsC,EAAQtP,EAAMg2Q,IAGpDlmS,MACO,GAAKkrD,EAETlrD,GAUX+lS,EAAY1pS,UAAU+pS,YAAc,SAAUl7O,EAAMh7B,EAAM27C,EAAKq6N,EAAW1mQ,GACtE,GAAY,MAAR0rB,EACA,MAAM,IAAIrpD,MAAM,gCAEpB,GAAY,MAARquB,EACA,MAAM,IAAIruB,MAAM,gCAOpB,OAFYZ,KAAKolS,kBAAkBn7O,EAAMh7B,EAAM27C,EAAKq6N,EAAW1mQ,IAyBnEumQ,EAAY1pS,UAAUiqS,cAAgB,SAAUp7O,EAAMh7B,EAAM27C,EAAa06N,EAAQr6L,GAG7E,GAAY,MAARhhD,EACA,MAAM,IAAIrpD,MAAM,gCAEpB,GAAY,MAARquB,EACA,MAAM,IAAIruB,MAAM,gCAGpB,GADA0kS,EAAS,KACW,IAAhBr7O,EAAKztD,OACL,OAAS69P,SATF,EASiBirC,OAAQA,GAEpC,IACIt2Q,GADW,IAAIkvQ,IACCrjQ,MAAMovB,EAAM,GAE5ByxO,EADezsQ,EAAKs2Q,aACK7J,UAC7B4J,EAAS,IAAI3pS,YAAYqzB,EAAKxyB,QAE9B,IAAK,IADDN,EAAI,EACCoqB,EAAI,EAAGzkB,EAAMmtB,EAAKxyB,OAAQ8pB,EAAIzkB,EAAKykB,IAAK,CAC7C,IAAI69N,EAAKn1N,EAAK1I,GACV2sQ,EAAYyI,EAAU7F,SAAS1xC,GACjB,OAAd8uC,QAA2C,IAAdA,IAC7BqS,EAAOppS,KAAO,EAAY4V,OAGlC,OAASuoP,SAzBK,EAyBairC,OAAQA,IAGvCR,EAAY1pS,UAAU8pS,aAAe,SAAUj7O,EAAM2gB,EAAKrsC,EAAQtP,EAAMg2Q,GACpE,GAAkB,OAAdA,QAA2C,IAAdA,EAA2B,CACxD,GAAY,MAARh7O,EACA,MAAM,IAAIrpD,MAAM,gCAEpB,IAAI7B,EAAS,KAEb,GAAe,OAAXw/B,GAAmBA,EAAOinQ,gBAAkB57B,GAAiBtwD,KAAM,CAEnEv6M,GADW,IAAI+hS,IACDK,yBAAyBl3O,EAAM2gB,GAEjD,OAAO7rE,EAGP,GAAY,MAARkrD,EACA,MAAM,IAAIrpD,MAAM,gCAEpB,GAAY,MAARquB,EACA,MAAM,IAAIruB,MAAM,gCAEpB,IAAI6kS,EAAW,KACf,GAAe,OAAXlnQ,GAAmBA,EAAOinQ,gBAAkB57B,GAAiBtwD,KAAM,CACnE,IACIosF,GADW,IAAIxH,IACArjQ,MAAMovB,EAAM,GAC/Bw7O,EAAWzlS,KAAKklS,aAAaQ,EAAK96N,EAAKrsC,GAMvCx/B,KAEJ,GAAIkmS,EAAW,CAGX,IAAK,IAFDhuO,EAAQwuO,EAASvoS,MAAM,IACvBgiB,EAAQ+3C,EAAMz6D,OACTN,EAAI,EAAGA,EAAIgjB,EAAOhjB,IACvB+6D,EAAM/6D,GAAK8D,KAAK2lS,SAAS12Q,EAAMgoC,EAAM/6D,IAEzC6C,EAASk4D,OAGTl4D,MACO,GAAKiB,KAAK2lS,SAAS12Q,EAAMw2Q,GAEpC,OAAO1mS,GASf+lS,EAAY1pS,UAAUuqS,SAAW,SAAU12Q,EAAMq2Q,GAC7C,IAAIr7O,EAAOq7O,EACX,GAAY,MAARr2Q,EACA,MAAM,IAAIruB,MAAM,gCAEpB,GAAY,MAARqpD,EACA,MAAM,IAAIrpD,MAAM,gCAEpB,IAAIouB,EAAOi7B,EAEPyxO,EADezsQ,EAAKs2Q,aACK7J,UAC7BzsQ,EAAKgvQ,WAAWjvQ,GAEhBA,EAAO0sQ,EAAUjC,cAAczqQ,GAC/B,IAAIqnI,EAAQ2vG,GAAUsB,eAAet4O,GAAM,GAE3C,OADAA,EAAOg3O,GAAUwB,aAAanxG,IAmClCyuI,EAAY1pS,UAAUgqS,kBAAoB,SAAUn7O,EAAMh7B,EAAM27C,EAAKq6N,EAAW1mQ,GAC5E,GAAY,MAAR0rB,EACA,MAAM,IAAIrpD,MAAM,gCAEpB,GAAY,MAARquB,EACA,MAAM,IAAIruB,MAAM,gCAIpB,OAFmBZ,KAAKklS,aAAaj7O,EAAM2gB,EAAKrsC,GACvBrhC,MAAM,KAG5B4nS,KC3LPc,GAA6B,WAC7B,SAASA,EAAY15B,EAAMC,EAAMC,GAK7BpsQ,KAAKgtQ,kBAAoBxD,GAAcoC,IAKvC5rQ,KAAK6lS,0BAA4B18B,GAAkB28B,KAKnD9lS,KAAK+lS,yBAA2B,EAKhC/lS,KAAKgmS,oBAAsB,EAK3BhmS,KAAKimS,oBAAsB,IAK3BjmS,KAAKkmS,cAAgB,IAAInkB,GAMzB/hR,KAAKmmS,gBAAiB,EAMtBnmS,KAAKomS,eAAgB,EAMrBpmS,KAAK89R,UAAW,EAMhB99R,KAAKqmS,iBAAkB,EAMvBrmS,KAAKsmS,OAAQ,EAMbtmS,KAAKumS,WAAY,EAMjBvmS,KAAKwmS,kBAAmB,EAKxBxmS,KAAKymS,iBAAmB,IAAIz6B,GAAM,EAAG,GAKrChsQ,KAAK0mS,mBAAoB,EAKzB1mS,KAAK8rP,qBAAuB,IAAIhE,GAMhC9nP,KAAKiwQ,wBAAyB,EAM9BjwQ,KAAK2mS,iBAAkB,EAMvB3mS,KAAK4mS,oBAAsB,MAAO,OAAQ,YAAa,WAMvD5mS,KAAK6mS,kBAAmB,EAKxB7mS,KAAK8mS,iBAML9mS,KAAK+mS,mBAAoB,EAMzB/mS,KAAKgnS,wBAA0B,KAK/BhnS,KAAKinS,eAAiB,EAClB76B,aAAgBiR,IAChBr9Q,KAAKknS,gBAAkB96B,EACvBpsQ,KAAK+sQ,aAAeZ,EACpBnsQ,KAAKmnS,WAAaj7B,EAClBlsQ,KAAK+0G,cAGL/0G,KAAKpC,YAAYsuQ,EAAMC,EAAM,IAAIkR,GAAgBjR,IAozCzD,OAjzCA9tQ,OAAOuJ,eAAe+9R,EAAYxqS,UAAW,sBAMzCsM,IAAK,WACD,OAAO1H,KAAKonS,uBAEhBz/R,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+9R,EAAYxqS,UAAW,QAKzCsM,IAAK,WACD,OAAO1H,KAAKmnS,YAEhBx/R,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+9R,EAAYxqS,UAAW,2BAKzCsM,IAAK,WAID,YAHoD,IAAzC1H,KAAKqnS,kCACZrnS,KAAKqnS,gCAAkC,GAEpCrnS,KAAKqnS,iCAEhBhgS,IAAK,SAAUtK,GACXiD,KAAKqnS,gCAAkCtqS,GAE3C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+9R,EAAYxqS,UAAW,cAKzCsM,IAAK,WACD,OAAO,IAAIskQ,GAAMhsQ,KAAKsnS,WAAWtxR,MAAOhW,KAAKsnS,WAAWvxR,SAE5DpO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+9R,EAAYxqS,UAAW,cAKzCsM,IAAK,WACD,OAAO1H,KAAKgtQ,mBAEhB3lQ,IAAK,SAAUtK,GACXiD,KAAKgtQ,kBAAoBjwQ,GAE7B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+9R,EAAYxqS,UAAW,gBAKzCsM,IAAK,WACD,OAAO1H,KAAKknS,iBAEhBv/R,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+9R,EAAYxqS,UAAW,UAKzCsM,IAAK,WAID,OAHiC,MAA7B1H,KAAKwhR,uBACLxhR,KAAKwhR,qBAAuB,IAAIF,IAE7BthR,KAAKwhR,sBAEhB75Q,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+9R,EAAYxqS,UAAW,SAKzCsM,IAAK,WACD,OAAO1H,KAAKunS,WAEhB5/R,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+9R,EAAYxqS,UAAW,QAKzCsM,IAAK,WACD,OAAO1H,KAAKunS,UAAUh6H,MAE1B5lK,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+9R,EAAYxqS,UAAW,mBACzCsM,IAAK,WAID,OAHoC,MAAhC1H,KAAKgnS,8BAA2E,IAAjChnS,KAAKgnS,0BACpDhnS,KAAKgnS,wBAA0B,IAAIvkB,IAEhCziR,KAAKgnS,yBAEhBr/R,YAAY,EACZC,cAAc,IAOlBg+R,EAAYxqS,UAAU25G,WAAa,WAC/B/0G,KAAKwnS,aAAc,EACnBxnS,KAAK8gR,WAAa,KAClB9gR,KAAKynS,aAAe,KACpBznS,KAAK0nS,YAAc,KACnB1nS,KAAKgtQ,kBAAoBxD,GAAcoC,IACvC5rQ,KAAK2nS,gBAAiB,EACtB3nS,KAAKwhR,qBAAuB,KAC5BxhR,KAAK6lS,2BAA8B,EACnC7lS,KAAK+lS,0BAA4B,EACjC/lS,KAAKgmS,qBAAuB,EAC5BhmS,KAAKimS,qBAAuB,IAE5BjmS,KAAK4nS,oBAAsB,KAC3B5nS,KAAKsnS,WAAa,IAAIr7B,GAAW,IAAIF,GAAO,EAAG,GAAI/rQ,KAAKqvB,MACxDrvB,KAAK+sQ,aAAaA,eAAe86B,oBAAoB7nS,KAAKkmS,cAAclkB,MAE5E4jB,EAAYxqS,UAAU0sS,gBAAkB,SAAU74R,EAAU2rB,EAAUvL,GAClE,QAAoB,IAATA,EAAsB,CAC7B,GAAgB,MAAZpgB,EACA,MAAMrO,MAAM,kCAEhBZ,KAAK8nS,gBAAgB74R,EAAU2rB,EAAU3rB,EAASogB,UAEjD,CAKD,GAAgB,MAAZpgB,EACA,MAAMrO,MAAM,kCAEhB,IAAIouC,EAAU//B,EAAS+G,MAAQ,EAAKqZ,EAAKrZ,MAAQ/G,EAAS+G,MAAQ,EAC9Di5B,EAAUhgC,EAAS8G,OAAS,EAAKsZ,EAAKtZ,OAAS9G,EAAS8G,OAAS,EACjEgyR,IAA0B,IAAX/4P,GAA2B,IAAXC,GAE/Bwc,EAAQzrD,KAAK6zF,OAEb/lD,EAAS,IAAIwzO,GACK,MAAlBthR,KAAKunS,WACLvnS,KAAKgoS,sBAAsBptQ,EAAS7tB,EAAG6tB,EAAS5tB,EAAIqiB,EAAKtZ,OAAQ+3B,GAEjEi6P,GACA/nS,KAAKioS,kBAAkBj5P,EAAQC,EAAQnB,GAE3C9tC,KAAKknS,gBAAgBthD,UAAU93M,GAE/B,IACIktC,EADYh7E,KAAK+sQ,aAAaA,eACXm7B,QAAQj5R,GAC/BjP,KAAKknS,gBAAgB1pB,cAAcxiM,GAEnCh7E,KAAKi0F,QAAQxoC,GAEb,IAAIrsB,EAAInwB,EAAS8zQ,SACjB,GAAS,MAAL3jP,EACA,IAAK,IAAIttB,EAAQ,EAAGA,EAAQstB,EAAEwjP,gBAAgBA,gBAAgBpmR,OAAQsV,IAAS,CAC3E,IAAI6wQ,EAAYvjP,EAAEwjP,gBAAgBA,gBAAgB9wQ,GAC9Cq2R,EAAc,IAAIp8B,GAAO4W,EAAU/nP,SAAS7tB,EAAI6tB,EAAS7tB,EAAG41Q,EAAU/nP,SAAS5tB,EAAI4tB,EAAS5tB,GAC5F42Q,EAAkC,GAAvB30Q,EAASogB,KAAKrZ,MAAa,EAAIqZ,EAAKrZ,MAAQ/G,EAASogB,KAAKrZ,MACrE6tQ,EAAmC,GAAxB50Q,EAASogB,KAAKtZ,OAAc,EAAIsZ,EAAKtZ,OAAS9G,EAASogB,KAAKtZ,OAC3E/V,KAAK4iR,gBAAgBx+Q,IAAI,IAAI8/Q,GAAsBvB,EAAU5gN,MAAOomO,EAAavkB,EAAUC,IAC3F7jR,KAAKutK,KAAKg+E,WAAWe,SAG7BtsP,KAAK+sQ,aAAaA,eAAe86B,oBAAoB7nS,KAAKkmS,cAAcjkB,QACxEjiR,KAAK+sQ,aAAaA,eAAe86B,oBAAoB7nS,KAAKkmS,cAAchkB,QACxEliR,KAAK+sQ,aAAaA,eAAe86B,oBAAoB7nS,KAAKkmS,cAAc/jB,QACxEniR,KAAK+sQ,aAAaA,eAAe86B,oBAAoB7nS,KAAKkmS,cAAcl3Q,QAOhF42Q,EAAYxqS,UAAUgtS,WAAa,SAAUl8B,EAAMC,EAAMC,EAAMC,EAAM6D,EAAMC,EAAMC,EAAMi4B,EAAMC,GACzF,GAAoB,iBAATp8B,GAAqBC,aAAgB+G,KAAY9G,aAAgByT,IAAmB,OAATzT,KAAmBC,aAAgBI,IAAqB,OAATJ,IAAkC,iBAAT6D,GAAqC,iBAATC,IAAsBC,aAAgBpC,IAA4B,OAAToC,SAAkC,IAATi4B,EACxQroS,KAAKiwQ,wBAAyB,EAC9BjwQ,KAAKooS,WAAWl8B,EAAMC,EAAMC,EAAMC,EAAM6D,EAAMC,EAAOnwQ,KAAKqwQ,WAAWr6P,MAAQk6P,EAAO,EAAGE,OAEtF,CACD,IAAI2D,EAAW3H,EACXm8B,EAAWl8B,EACXm8B,EAAWt4B,EACXu4B,EAAWt4B,EACXu4B,EAAWt4B,EACXu4B,EAAWN,EACXO,EAAWN,EAEXvpS,GADW,IAAIixQ,IACG1iN,OAAO4+M,EAAMC,EAAMy8B,EAAU,IAAI58B,GAAM08B,EAAUC,GAAW3oS,KAAKiwQ,uBAAwBjwQ,KAAKqwQ,YACpH,IAAKtxQ,EAAOi0Q,MAAO,CACf,IAAI9/O,EAAOlzB,KAAK6oS,4BAA4B9pS,EAAOw9C,WAAYisP,EAAUC,EAAUG,GAC/EF,GAAY,IACZF,EAAWt1Q,EAAKnmB,EAChB27R,EAAWx1Q,EAAKld,OAEhB2yR,GAAY,IACZF,EAAWv1Q,EAAKlmB,EAChB27R,EAAWz1Q,EAAKnd,QAEpB/V,KAAK8oS,uBAAuB/pS,EAAQotQ,EAAM4H,EAAUw0B,EAAU,IAAIt8B,GAAWu8B,EAAUC,EAAUC,EAAUC,GAAWC,GACtH5oS,KAAKqmS,iBAAkB,EACvBrmS,KAAKymS,iBAAmB,IAAIz6B,GAAM,EAAG,GAEzChsQ,KAAK+sQ,aAAaA,eAAe86B,oBAAoB7nS,KAAKkmS,cAAcl3Q,MACxEhvB,KAAKmmS,gBAAiB,EACtBnmS,KAAKonS,sBAAwBroS,EAC7BiB,KAAKomS,eAAgB,IAG7BR,EAAYxqS,UAAUw4F,SAAW,SAAUs4K,EAAMC,EAAMC,EAAMC,EAAM6D,GAC/D,GAAI/D,aAAgBJ,GAAQ,CACxB,IAAI8H,EAAW1H,EACX4H,EAAW3H,EACfpsQ,KAAK4zF,SAASs4K,EAAM2H,EAAS9mQ,EAAG8mQ,EAAS7mQ,EAAG+mQ,EAAShnQ,EAAGgnQ,EAAS/mQ,OAEhE,CACG6mQ,EAAW1H,EACX4H,EAAW3H,EADf,IAEIm8B,EAAWl8B,EACXm8B,EAAWt4B,EACflwQ,KAAK+oS,aAAa78B,EAAM,KAAM,MAC9B,IAAIn4M,EAAK/zD,KAAK8sQ,aACd/4M,EAAG+/B,UAAU+/K,EAAUE,GACvBhgN,EAAGoxL,kBAAkBojD,EAAUC,GAC/Bz0O,EAAG+pN,aACH99Q,KAAK+sQ,aAAaA,eAAe86B,oBAAoB7nS,KAAKkmS,cAAclkB,OAIhF4jB,EAAYxqS,UAAU4oC,cAAgB,SAAUkoO,EAAMC,EAAMC,EAAMC,EAAM6D,EAAMC,GAC1E,GAAIjE,aAAgB2T,IAA0B,iBAAT1T,EAAmB,CACpD,IAAI4H,EAAW3H,EACfpsQ,KAAKgkC,cAAckoO,EAAM,KAAMC,EAAM4H,EAAU1H,EAAM6D,QAEpD,GAAIhE,aAAgBO,IAA4B,iBAATN,EAAmB,CACvD4H,EAAW3H,EACfpsQ,KAAKgkC,cAAc,KAAMkoO,EAAMC,EAAM4H,EAAU1H,EAAM6D,OAEpD,CACG6D,EAAW3H,EAAf,IACIm8B,EAAWl8B,EACXm8B,EAAWt4B,EACXu4B,EAAWt4B,EACXhE,aAAgBO,IAAiBP,EAAK91O,MAAMuhN,UAC5Cu0B,EAAO,MAEX,IAAI2S,EAAW5S,EACX2H,EAAW1H,EACfnsQ,KAAK+oS,aAAajqB,EAAUjL,EAAU,MACtC7zQ,KAAK8sQ,aAAatnB,gBAAgBuuB,EAAUw0B,EAAUC,EAAUC,GAChEzoS,KAAKg2B,SAAS8oP,EAAUjL,GAAU,KAG1C+xB,EAAYxqS,UAAU46B,SAAW,SAAUk2O,EAAMC,EAAMC,EAAMC,GACzD,GAAoB,kBAATD,EAAoB,CAC3B,IAAI2H,EAAW3H,EACfpsQ,KAAKg2B,SAASk2O,EAAMC,EAAM5C,GAAYy/B,QAASj1B,OAE9C,CACD,IAEIk1B,EAAgB,MAAR/8B,EACRg9B,EAAkB,MAAR/8B,EACVg9B,GAJAp1B,EAAW3H,KAIe7C,GAAY6/B,UACtCH,GAASC,EACTlpS,KAAK8sQ,aAAa4Q,eAAeyrB,GAE3BF,GAAUC,EAGXD,EACLjpS,KAAK8sQ,aAAagR,aAGlB99Q,KAAK8sQ,aAAa6Q,SAASwrB,GAN3BnpS,KAAK8sQ,aAAa7zO,YAW9B2sQ,EAAYxqS,UAAU06F,UAAY,SAAUo2K,EAAMC,EAAMC,EAAMC,EAAM6D,GAChE,GAAoB,iBAAT/D,GAAqC,iBAATC,QAAqC,IAATC,EAAsB,CACrF,IAAIh9O,EAAO68O,EAAKm9B,kBAChBrpS,KAAK81F,UAAUo2K,EAAMC,EAAMC,EAAM/8O,EAAKrZ,MAAOqZ,EAAKtZ,YAEjD,CACD,IAAI89P,EAAW1H,EACX4H,EAAW3H,EAEXo8B,EAAWt4B,EACfhE,EAAKr4K,OACL,IAAI/lD,EAAS,IAAIwzO,GACjBthR,KAAKgoS,sBAAsBn0B,EAAWE,EAAWy0B,EAAW16P,GAC5D9tC,KAAKioS,kBAAkB57B,EAAM6D,EAAMpiO,GACnC9tC,KAAKknS,gBAAgBnlS,MAAM,KAC3B/B,KAAKknS,gBAAgBthD,UAAU93M,GAE/B,IAAIm6M,EAAYjoP,KAAK+sQ,aAAaA,oBACJ,IAAnB/sQ,KAAKunS,WAA0C,MAAbvnS,KAAKutK,OAC9C06E,EAAUznP,SAAWR,KAAKutK,KAAK/sK,UAEnC,IAAI+0J,EAAS0yF,EAAUigD,QAAQh8B,QACD,IAAnBlsQ,KAAKunS,WACZvnS,KAAKutK,KAAK+7H,aAAarhD,GAE3BjoP,KAAKknS,gBAAgB1pB,cAAcjoH,GACnCv1J,KAAKknS,gBAAgBnlS,MAAMuiP,GAAUoB,cACrC1lP,KAAKknS,gBAAgBnlS,MAAMuiP,GAAUI,SACrC,IAAI6kD,EAAWvpS,KAAK+sQ,aAAaA,eACjCw8B,EAAS1B,oBAAoB7nS,KAAKkmS,cAAcjkB,QAChDsnB,EAAS1B,oBAAoB7nS,KAAKkmS,cAAchkB,QAChDqnB,EAAS1B,oBAAoB7nS,KAAKkmS,cAAc/jB,QAChDonB,EAAS1B,oBAAoB7nS,KAAKkmS,cAAcl3Q,QASxD42Q,EAAYxqS,UAAUouS,cAAgB,SAAUC,EAAW1qS,EAAQkwB,EAAMy6Q,EAAiBnrQ,GACtF,IAAIhI,EACJ,IAAKx3B,EAAOi0Q,OAASy2B,EAAY1qS,EAAO4qS,WAAaF,GAAa,EAAG,CACjE,IAAIx/O,EAAOlrD,EAAO6xQ,MAAM64B,GAEpBz8R,EADShN,KAAK4pS,0BAA0B7qS,EAAOw9C,WAAWxmC,OAAQ2zR,EAAgB3zR,OAAQwoB,GAC7EmrQ,EAAgB18R,EAAKjO,EAAO2wB,WAAa+5Q,EACtDj2M,EAAYvpC,EAAKj0C,MACjB6zR,EAAS7pS,KAAK8pS,wBAAwBt2M,EAAWk2M,EAAgB1zR,MAAOuoB,GACxEsyO,EAAa7wQ,KAAK8wQ,cAAc7mN,EAAM1rB,EAAQmrQ,EAAgC,IAAdD,GACpEI,GAAY7pS,KAAK+wG,YAAYxyE,GAAwB,EAAbsyO,EACxC,IAAI9jQ,EAAI28R,EAAgB38R,EAAI88R,EAExB7zR,EAAUhW,KAAK+pS,cAAc9/O,EAAMy/O,EAAgB1zR,MAAOuoB,GAAoCmrQ,EAAgB1zR,MAAQ66P,EAAjDr9K,EAAYq9K,EACjF96P,EAAShX,EAAO2wB,WACpB6G,EAAS,IAAI01O,GAAWl/P,EAAGC,EAAGgJ,EAAOD,QAGrCwgB,EAAS,IAAI01O,GAAW,EAAG,EAAG,EAAG,GAErC,OAAO11O,GAMXqvQ,EAAYxqS,UAAUytS,4BAA8B,SAAU9pQ,EAAUhyB,EAAGC,EAAGuxB,GAC1E,IAAIyrQ,EAAoB,IAAI/9B,GAAWl/P,EAAGC,EAAG+xB,EAAS/oB,MAAO+oB,EAAS/oB,OACtE,GAAc,MAAVuoB,EAAgB,CAChB,OAAQA,EAAOmtB,WACX,KAAKw9M,GAAiB+gC,OAClBD,EAAkBj9R,GAAKi9R,EAAkBh0R,MAAQ,EACjD,MACJ,KAAKkzP,GAAiBghC,MAClBF,EAAkBj9R,GAAKi9R,EAAkBh0R,MAGjD,OAAQuoB,EAAO4rQ,eACX,KAAKlhC,GAAqBmhC,OACtBJ,EAAkBh9R,GAAKg9R,EAAkBj0R,OAAS,EAClD,MACJ,KAAKkzP,GAAqBohC,OACtBL,EAAkBh9R,GAAKg9R,EAAkBj0R,QAIrD,OAAOi0R,GAMXpE,EAAYxqS,UAAUkvS,SAAW,SAAUl6N,GACvCpwE,KAAKunS,UAAYn3N,EACjB,IAAIm9F,EAAOn9F,EAAMm9F,KACL,MAARA,QAAgC,IAATA,IACvBA,EAAKo/E,UAAY3sP,KAAKuqS,WAQ9B3E,EAAYxqS,UAAUmvS,SAAW,SAAUh9H,GACvC,GAAqC,MAAjCA,EAAKw1G,SAASH,gBACd,IAAK,IAAI1mR,EAAI,EAAGA,EAAIqxK,EAAKw1G,SAASH,gBAAgBA,gBAAgBpmR,OAAQN,IAAK,CAC3E,IAAIymR,EAAYp1G,EAAKw1G,SAASH,gBAAgBA,gBAAgB1mR,GAC9DymR,EAAU5gN,MAAMyoO,YAAYj9H,EAAKw1G,SAAUJ,EAAU/nP,SAAU+nP,EAAUiB,SAAUjB,EAAUkB,YAQzG+hB,EAAYxqS,UAAU0tS,uBAAyB,SAAU/pS,EAAQkwB,EAAMiyP,EAAKrU,EAAO68B,EAAiBnrQ,GAChG,GAAKx/B,EAAOi0Q,MAsCR,MAAM,IAAIpyQ,MAAM,gCArChBZ,KAAKyqS,oBAAoBx7Q,EAAMiyP,EAAKrU,EAAOtuO,EAAQmrQ,GAEnD,IAAI7rB,EAAyB,MAAVt/O,EAAkBA,EAAOmsQ,wBAA0B,IAClE7sB,IAAgB79Q,KAAKimS,qBAAwBjmS,KAAKqmS,kBAClDrmS,KAAKknS,gBAAgBtgD,eAAei3B,GACpC79Q,KAAKimS,oBAAsBpoB,GAE/B,IAAI9nQ,EAAoB,MAAVwoB,GAAyC,IAAvBA,EAAOizO,YAAqBviP,EAAKlZ,OAASwoB,EAAOizO,YAAcviP,EAAKlZ,OAEhGmuE,EAAQ,EACZA,EAF2B,MAAV3lD,GAAkBA,EAAOg8P,iBAAmBjtB,GAAkBktB,UAEzDzkR,GAAUkZ,EAAKlZ,OAASkZ,EAAKmkP,QAAQ+mB,WAAW57P,IAAYxoB,EAASkZ,EAAKmkP,QAAQ8mB,UAAU37P,GAClHv+B,KAAKkkF,MAAQA,EACblkF,KAAKknS,gBAAgBjpB,cAAcyrB,EAAgB38R,EAAG28R,EAAgB18R,EAAIk3E,GAC1ElkF,KAAKknS,gBAAgB5oB,YAAYvoQ,GAGjC,IAAK,IAFD40R,EAAe,EACfC,EAAkB,GACb1uS,EAAI,EAAGA,EAAI6C,EAAO6xQ,MAAMp0Q,OAAQN,IAErC,GADAyuS,GAAgB5rS,EAAO2wB,WAClBg6Q,EAAgB18R,EAAI29R,EAAgB3qS,KAAKqwQ,WAAWt6P,OAAQ,CAC7D/V,KAAKinS,cAAgB/qS,EACrB,MAGR,IAAK,IAAIwnB,EAAI1jB,KAAKinS,cAAgBvjR,EAAI3kB,EAAO6xQ,MAAMp0Q,QAAUknB,GAAK,EAAIA,IAClEknR,GAAmB7rS,EAAO6xQ,MAAMltP,GAAGsL,KAEvC,IAAIuH,EAAS,IAAI01O,GAAWy9B,EAAgB38R,EAAG28R,EAAgB18R,EAAG08R,EAAgB1zR,MAAO0zR,EAAgB3zR,QAKzG,GAJA/V,KAAK6qS,iBAAiB9rS,EAAQkwB,EAAMsP,EAAQmrQ,GAC5C1pS,KAAK8qS,uBAAuB5pB,EAAKrU,EAAO9tQ,EAAQkwB,EAAMsH,EAAQgI,GAC9Dv+B,KAAKumS,WAAY,EACjBvmS,KAAKomS,eAAgB,GACO,IAAxBpmS,KAAKinS,cAAsB,CAChBjnS,KAAK+qS,cACXhoB,SAASqlB,WAAWwC,EAAiB37Q,EAAMiyP,EAAKrU,EAAO68B,EAAgB38R,EAAG,EAAG28R,EAAgB1zR,MAAO,EAAGuoB,KAWxHqnQ,EAAYxqS,UAAU2vS,YAAc,WAChC,IAAIC,EAAUhrS,KAAK2+O,YAAYqsD,QAE3Bl5R,EAAQk5R,EAAQzsS,QAAQyB,KAAK2+O,aAOjC,OANI7sO,IAAUk5R,EAAQ9rR,MAAQ,EACf8rR,EAAQ5mS,MAGR4mS,EAAQC,WAAWn5R,EAAQ,IAI9C8zR,EAAYxqS,UAAU8vS,QAAU,SAAUlsL,EAAW3+E,QAC7B,IAATA,EACPrgC,KAAKkrS,QAAQlsL,EAAWuqJ,GAAYy/B,UAGpChpS,KAAKknS,gBAAgB1hD,gBAAgBxmI,GACrCh/G,KAAKknS,gBAAgB9tQ,SAAUiH,IAASkpO,GAAY6/B,aAO5DxD,EAAYxqS,UAAUqvS,oBAAsB,SAAUx7Q,EAAMiyP,EAAKrU,EAAOtuO,EAAQhI,GAC5E,IACI40Q,EAAKnrS,KAAKorS,qBAAqBlqB,EAAKrU,EAAOtuO,GAC/Cv+B,KAAK+oS,aAAa7nB,EAAKrU,EAAO59O,EAAMsP,GACpCv+B,KAAKknS,gBAAgBjiD,YACjB,IAASjlP,KAAK6lS,4BACd7lS,KAAKknS,gBAAgB3oB,qBAAqB4sB,GAC1CnrS,KAAK6lS,0BAA4BsF,GAGrC,IAAIE,EAAgB,MAAV9sQ,EAAkBA,EAAOg2O,iBAAmB,EAClD82B,IAAOrrS,KAAK+lS,0BAA6B/lS,KAAKqmS,kBAC9CrmS,KAAKknS,gBAAgBzoB,oBAAoB4sB,GACzCrrS,KAAK+lS,yBAA2BsF,GAIpC,IAAIC,EAAgB,MAAV/sQ,EAAkBA,EAAOi2O,YAAc,EAC7C82B,IAAOtrS,KAAKgmS,sBACZhmS,KAAKknS,gBAAgBvoB,eAAe2sB,GACpCtrS,KAAKgmS,oBAAsBsF,IAOnC1F,EAAYxqS,UAAUwuS,0BAA4B,SAAU2B,EAAYC,EAAcjtQ,GAClF,IAAI2lD,EAAQ,EACZ,GAAIsnN,GAAgB,GAAe,MAAVjtQ,GAAkBA,EAAO4rQ,gBAAkBlhC,GAAqBoF,IACrF,OAAQ9vO,EAAO4rQ,eACX,KAAKlhC,GAAqBmhC,OACtBlmN,GAASsnN,EAAeD,GAAc,EACtC,MACJ,KAAKtiC,GAAqBohC,OACtBnmN,EAAQsnN,EAAeD,EAInC,OAAOrnN,GAOX0hN,EAAYxqS,UAAUyvS,iBAAmB,SAAU9rS,EAAQkwB,EAAMsP,EAAQmrQ,GACrE,IAAI+B,EAAczrS,KAAK4pS,0BAA0B7qS,EAAOw9C,WAAWxmC,OAAQ2zR,EAAgB3zR,OAAQwoB,GAC/E,IAAhBktQ,GACAzrS,KAAKknS,gBAAgBjpB,cAAc,EAAGwtB,GAM1C,IAAK,IAJDC,EAAUz8Q,EACVo+P,EAAsB,MAAXqe,GAAmBA,EAAQ/R,UAEtC/oB,GADoB,MAAX86B,GAAmBA,EAAQxQ,YAC5Bn8R,EAAO6xQ,OACV10Q,EAAI,EAAG2F,EAAM+uQ,EAAMp0Q,OAASN,EAAI2F,GAAO3F,IAAM8D,KAAKinS,cAAgB/qS,IAAK,CAC5E,IAAIyvS,EAAW/6B,EAAM10Q,GAEjBs3F,GADOm4M,EAAS38Q,KACJ28Q,EAAS31R,OACrB41R,EAAc5rS,KAAK8pS,wBAAwBt2M,EAAWk2M,EAAgB1zR,MAAOuoB,GAC7EsyO,EAAa7wQ,KAAK8wQ,cAAc66B,EAAUptQ,EAAQmrQ,EAAwB,IAANxtS,GAEpD,KADpB0vS,GAAiB5rS,KAAK+wG,YAAYxyE,GAAwB,EAAbsyO,IACnB7wQ,KAAKqmS,iBAC3BrmS,KAAKknS,gBAAgBjpB,cAAc2tB,EAAa,GAEhDve,EACArtR,KAAK6rS,gBAAgBF,EAAUjC,EAAiBz6Q,EAAMsP,GAGtDv+B,KAAK8rS,cAAcH,EAAUjC,EAAiBz6Q,EAAMsP,GAEpC,IAAhBqtQ,GAAsB5rS,KAAKqmS,iBAC3BrmS,KAAKknS,gBAAgBjpB,eAAe2tB,EAAa,GAEjD5rS,KAAKiwQ,wBAA0BW,EAAMp0Q,OAAS,IAC9CwD,KAAKknS,gBAAgBjpB,eAAgByrB,EAAiB,EAAG,GACzDA,EAAgB38R,EAAI,EACpB28R,EAAgB1zR,MAAQhW,KAAKqwQ,WAAWr6P,MACxChW,KAAKiwQ,wBAAyB,EAC9BjwQ,KAAK2mS,iBAAkB,GAG/B3mS,KAAK+sQ,aAAaA,eAAe86B,oBAAoB7nS,KAAKkmS,cAAcl3Q,MACpD,IAAhBy8Q,GACAzrS,KAAKknS,gBAAgBjpB,cAAc,IAAKwtB,EAAc1sS,EAAO2wB,aAEjE1vB,KAAKknS,gBAAgBhiD,WAMzB0gD,EAAYxqS,UAAU0wS,cAAgB,SAAUH,EAAUjC,EAAiBz6Q,EAAMsP,GAC7Ev+B,KAAK+rS,YAAYJ,EAAUjC,EAAgB1zR,MAAOuoB,GAClD,IAAIxhC,EAAQ,GACZ,IAAoC,IAAhC4uS,EAAS38Q,KAAKzwB,QAAQ,OAA+C,IAAhCotS,EAAS38Q,KAAKzwB,QAAQ,KAC3D,IAAK,IAAIrC,EAAI,EAAGA,EAAIyvS,EAAS38Q,KAAKxyB,OAAQN,IACb,MAArByvS,EAAS38Q,KAAK9yB,GACda,GAAS,MAEiB,MAArB4uS,EAAS38Q,KAAK9yB,GACnBa,GAAS,MAGTA,GAAS4uS,EAAS38Q,KAAK9yB,GAIrB,KAAVa,IACAA,EAAQ4uS,EAAS38Q,MAErB,IAAIi7B,EAAO,IAAMltD,EAAQ,IACzBiD,KAAKknS,gBAAgBtoB,iBAAiB,IAAI5Y,GAAU/7M,KAMxD27O,EAAYxqS,UAAUywS,gBAAkB,SAAUF,EAAUjC,EAAiBz6Q,EAAMsP,GAC/E,IAAI0rB,EAAO0hP,EAAS38Q,KAEhB47C,GADY+gO,EAAS31R,MACH,OAAXuoB,GAAmBA,EAAOwyE,aACjCi7L,EAA2B,OAAXztQ,IAA2C,IAAvBA,EAAOi2O,aAAqBj2O,EAAOmtB,YAAcw9M,GAAiB+iC,SACtGP,EAAUz8Q,EACVulP,EAAcx0Q,KAAK+rS,YAAYJ,EAAUjC,EAAgB1zR,MAAOuoB,GAChE2tQ,EAAY,IAAIpH,GACpB,GAAIl6N,GAAmB,OAAXrsC,GAAmBA,EAAOinQ,gBAAkB57B,GAAiBtwD,KAAO,CAC5E,IAAI6yF,EAAS,KACTC,EAAyB,OAAX7tQ,GAAmBA,EAAOmtB,YAAcw9M,GAAiBghC,MAQvEjzO,EAAQ,KAIJA,GATJk1O,EAFW,OAAX5tQ,GAAmBA,EAAOinQ,gBAAkB57B,GAAiBtwD,KAEpD4yF,EAAU5+O,OAAOrD,EAAMyhP,EAAUntQ,EAAOinQ,gBAAkB57B,GAAiByiC,YAA6BL,EAAcztQ,GAGtH2tQ,EAAU5+O,OAAOrD,EAAMyhP,EAASU,EAAYJ,EAAcztQ,IAG5D/hC,OAAS,EACD,OAAX+hC,GAAmBA,EAAOinQ,gBAAkB57B,GAAiBtwD,KAErD4yF,EAAU/G,YAAYl7O,EAAMyhP,EAAUntQ,EAAOinQ,gBAAkB57B,GAAiByiC,YAA6BL,EAAcztQ,GAG3H2tQ,EAAU/G,YAAYl7O,EAAMyhP,EAASU,EAAYJ,EAAcztQ,IAIlE0rB,GAEbjqD,KAAKssS,kBAAkBH,EAAQl1O,EAAOy0O,EAASntQ,EAAQi2O,QAGvD,GAAIw3B,EAAc,CACd,IAAIjtS,EAASiB,KAAKusS,iBAAiBtiP,EAAMyhP,EAAS,MAC9CS,EAASptS,EAAOytS,OAChBv1O,EAAQl4D,EAAOk4D,MACnBj3D,KAAKssS,kBAAkBH,EAAQl1O,EAAOy0O,EAASntQ,EAAQi2O,OAEtD,CACD,IAAIi4B,EAAQzsS,KAAK0sS,iBAAiBziP,EAAMyhP,GACpC3uS,EAAQiD,KAAK2sS,iBAAiBF,GAClCzsS,KAAK8sQ,aAAa8R,iBAAiB7hR,KAQ/C6oS,EAAYxqS,UAAUkxS,kBAAoB,SAAUH,EAAQl1O,EAAOhoC,EAAMsP,EAAQi2O,GAE7E,GAAc,MAAV23B,EACA,MAAM,IAAIvrS,MAAM,oCAEpB,GAAa,MAATq2D,EACA,MAAM,IAAIr2D,MAAM,mCAEpB,GAAY,MAARquB,EACA,MAAM,IAAIruB,MAAM,kCAEpBZ,KAAK8sQ,aAAamR,gBAClB,IAAIlxQ,EAAI,EACJ6/R,EAAS,EACTh+B,EAAkB,EAClB0C,EAAkB,EACtB,IACmB,OAAX/yO,IACAqwO,EAAkBrwO,EAAOqwO,gBACzB0C,EAAkB/yO,EAAO+yO,gBACzB/yO,EAAOqwO,gBAAkB,EACzBrwO,EAAO+yO,gBAAkB,GAE7B,IAAIu7B,EAAa59Q,EAAKyqQ,aAAa1qB,GAAgBv/O,WAAY8O,GAAUi2O,EACrED,EAA8B,MAAVh2O,EAAkBA,EAAOg2O,iBAAmB,EAEpEs4B,GAAct4B,GADc,OAAXh2O,GAAmC,IAAhBi2O,EAAqBj2O,EAAOi2O,YAAc,GAE9E,IAAK,IAAIt4Q,EAAI,EAAGA,EAAIiwS,EAAO3vS,OAAQN,IAAK,CACpC,IAAIuwS,EAAQN,EAAOjwS,GACfuzQ,EAAOx4M,EAAM/6D,GACb4wS,EAAa,EAIjB,GAHU,IAAN//R,GACA/M,KAAK8sQ,aAAamR,cAAclxQ,EAAG,GAEnC0iQ,EAAKjzQ,OAAS,EAAG,CACjBswS,GAA+B79Q,EAAK2kP,cAAcnE,EAAMlxO,GAAQvoB,MAChE82R,GAAcv4B,EACd,IAAIhsP,EAAMvoB,KAAK2sS,iBAAiBF,GAChCzsS,KAAK8sQ,aAAaqR,SAAS51P,GAE3BrsB,IAAMiwS,EAAO3vS,OAAS,IAEtBowS,GADA7/R,EAAI+/R,EAAaD,GAKrBD,EAAS,GACT5sS,KAAK8sQ,aAAamR,eAAe2uB,EAAQ,WAI9B,OAAXruQ,IACAA,EAAOqwO,gBAAkBA,EACzBrwO,EAAO+yO,gBAAkBA,KAOrCs0B,EAAYxqS,UAAUmxS,iBAAmB,SAAUtiP,EAAMyhP,EAASz0O,GAC9D,GAAa,OAAThN,EACA,MAAM,IAAIrpD,MAAM,kCAEpBq2D,EAAQhN,EAAK/sD,MAAM,MAEnB,IAAK,IADDsvS,KACKtwS,EAAI,EAAGA,EAAI+6D,EAAMz6D,OAAQN,IAAK,CAEnC,IAAIuzQ,EAAOx4M,EAAM/6D,GACbuwS,EAAQzsS,KAAK0sS,iBAAiBj9B,EAAMi8B,GACxCc,EAAOtwS,GAAKuwS,EAEhB,OAASD,OAAQA,EAAQv1O,MAAOA,IAKpC2uO,EAAYxqS,UAAUuxS,iBAAmB,SAAUF,GAC/C,GAAc,OAAVA,EACA,MAAM,IAAI7rS,MAAM,mCAEpB,IAAI2nB,EAAM,IAAIy9O,GAAUymC,GAGxB,OAFAlkR,EAAIwkR,WAAY,EAChBxkR,EAAIqxO,OAASoK,GAAa6B,cAAckB,MACjCx+O,GAKXq9Q,EAAYxqS,UAAUsxS,iBAAmB,SAAU19Q,EAAM08Q,GACrD,IAAIe,EAAQ,KACZ,GAAY,MAARz9Q,EACA,MAAM,IAAIpuB,MAAM,kCAEpB,GAAe,MAAX8qS,EACA,MAAM,IAAI9qS,MAAM,qCAEpB,GAAI8qS,EAAQnG,wBAAwBzK,GAAqB,CACrD,IAAIY,EAAYgQ,EAAQnG,aAAa7J,UACrCgQ,EAAQzN,WAAWjvQ,GACnBy9Q,EAAQ/Q,EAAUjC,cAAczqQ,GAChC,IAAIqnI,EAAQ2vG,GAAUsB,eAAemlC,GAAO,GAC5CA,EAAQzmC,GAAUwB,aAAanxG,GAEnC,OAAOo2I,GAMX7G,EAAYxqS,UAAU2wS,YAAc,SAAUJ,EAAUqB,EAAazuQ,GACjE,IAAI0rB,EAAO0hP,EAAS38Q,KAChBwkE,EAAYm4M,EAAS31R,MACrB+zR,EAAgB/pS,KAAK+pS,cAAc4B,EAAUqB,EAAazuQ,GAC1D0uQ,EAA4B,MAAV1uQ,GAAyC,IAAvBA,EAAOi2O,YAC3Cv/M,EAAU+5M,GAAgBc,OAC1Bo9B,EAAmBl+B,GAAgBE,cAAcjlN,EAAMgL,GACvDgwO,EAAY,EAChB,GAAI8E,EAAe,CAEXkD,IACAz5M,GAAc05M,EAAmB3uQ,EAAOi2O,aAG5CywB,GADiB+H,EAAcx5M,GACN05M,EACzBltS,KAAKknS,gBAAgBvoB,eAAesmB,QAIhCgI,EACAjtS,KAAKknS,gBAAgBvoB,eAAepgP,EAAOi2O,aAG3Cx0Q,KAAKknS,gBAAgBvoB,eAAe,GAG5C,OAAOsmB,GAMXW,EAAYxqS,UAAU0gE,MAAQ,SAAUzsC,GACpCrvB,KAAKmnS,WAAa93Q,EAClBrvB,KAAK8sQ,aAAargN,QAClBzsD,KAAK+0G,aACL/0G,KAAKmtS,yBAMTvH,EAAYxqS,UAAU2uS,cAAgB,SAAU4B,EAAUqB,EAAazuQ,GACnE,IAAI0rB,EAAO0hP,EAAS38Q,KAChBwkE,EAAYm4M,EAAS31R,MACrBo3R,EAA0B,MAAV7uQ,GAAkBA,EAAOmtB,YAAcw9M,GAAiB+iC,QACxEoB,EAAaL,GAAe,GAAKx5M,EAAYw5M,EAC7C/3O,EAAU+5M,GAAgBc,OAE1Bw9B,EADmBt+B,GAAgBE,cAAcjlN,EAAMgL,GACvB,GAAKhL,EAAK,KAAO+kN,GAAgBv/O,WACjE89Q,GAAuB5B,EAASh6B,SAAW5D,GAASwE,aAAe,EAGvE,OADqB66B,GAAgBC,GAAaC,IAAcC,GAAsBhvQ,EAAOmtB,YAAcw9M,GAAiB+iC,UAQhIrG,EAAYxqS,UAAU0vS,uBAAyB,SAAU5pB,EAAKrU,EAAO9tQ,EAAQkwB,EAAMy6Q,EAAiBnrQ,GAChG,GAAItP,EAAKu+Q,WAAav+Q,EAAKw+Q,UAAW,CAElC,IAAIC,EAAU1tS,KAAK2tS,2BAA2BzsB,EAAKrU,EAAO59O,EAAMsP,GAChE,GAAe,MAAXmvQ,EAAiB,CAEjB,IAAIE,EAAS5tS,KAAK4pS,0BAA0B7qS,EAAOw9C,WAAWxmC,OAAQ2zR,EAAgB3zR,OAAQwoB,GAC1FsvQ,EAAmB,EACvBA,EAAmBnE,EAAgB18R,EAAI4gS,EAAS3+Q,EAAKmkP,QAAQ8mB,UAAU37P,GAAU,IAAMmvQ,EAAQ13R,MAI/F,IAAK,IAHD83R,EAAmBpE,EAAgB18R,EAAI4gS,EAAS3+Q,EAAKmkP,QAAQC,UAAU90O,GAAU,EAAI,IAAMmvQ,EAAQ13R,MACnG46P,EAAQ7xQ,EAAO6xQ,MAEV10Q,EAAI,EAAG2F,EAAM9C,EAAO4qS,UAAWztS,EAAI2F,EAAK3F,IAAK,CAClD,IAAIyvS,EAAW/6B,EAAM10Q,GAEjBs3F,GADOm4M,EAAS38Q,KACJ28Q,EAAS31R,OACrB6zR,EAAS7pS,KAAK8pS,wBAAwBt2M,EAAWk2M,EAAgB1zR,MAAOuoB,GACxEsyO,EAAa7wQ,KAAK8wQ,cAAc66B,EAAUptQ,EAAQmrQ,EAAwB,IAANxtS,GACxE2tS,GAAY7pS,KAAK+wG,YAAYxyE,GAAwB,EAAbsyO,EACxC,IAAItzO,EAAKmsQ,EAAgB38R,EAAI88R,EAEzBpsQ,EAAOz9B,KAAK+pS,cAAc4B,EAAUjC,EAAgB1zR,MAAOuoB,GAAyChB,EAAKmsQ,EAAgB1zR,MAAQ66P,EAA3DtzO,EAAKi2D,EAAYq9K,EAE3F,GAAI5hP,EAAKu+Q,UAAW,CAChB,IAAIxgS,EAAI6gS,EACR7tS,KAAK4zF,SAAS85M,EAASnwQ,EAAIvwB,EAAGywB,EAAIzwB,GAClC6gS,GAAoB9uS,EAAO2wB,WAE/B,GAAIT,EAAKw+Q,UAAW,CACZzgS,EAAI8gS,EACR9tS,KAAK4zF,SAAS85M,EAASnwQ,EAAIvwB,EAAGywB,EAAIzwB,GAClC8gS,GAAoB/uS,EAAO2wB,WAE3B1vB,KAAK2mS,iBAAmB/1B,EAAMp0Q,OAAS,IACvCktS,EAAgB38R,EAAI,EACpB28R,EAAgB1zR,MAAQhW,KAAKqwQ,WAAWr6P,OAGhDhW,KAAK2mS,iBAAkB,KAQnCf,EAAYxqS,UAAUuyS,2BAA6B,SAAUzsB,EAAKrU,EAAO59O,EAAMsP,GAE3E,IAAIi1D,EAAYvkE,EAAKmkP,QAAQxyP,QAAQ2d,GAAU,GAC3CmvQ,EAAU,KAQd,OANW,MAAPxsB,EACAwsB,EAAU,IAAI7tB,GAAOqB,EAAI7qP,MAAOm9D,GAElB,MAATq5K,IACL6gC,EAAU,IAAI7tB,GAAOhT,EAAOr5K,IAEzBk6M,GAMX9H,EAAYxqS,UAAUgwS,qBAAuB,SAAUlqB,EAAKrU,EAAOtuO,GAC/D,IAAI4sQ,EAAKhiC,GAAkB7vD,KAa3B,OAXI6xF,EADO,MAAPjqB,GAAwB,MAATrU,EACV1D,GAAkB4kC,WAEX,MAAP7sB,EACA/X,GAAkB6kC,OAGlB7kC,GAAkB28B,KAEb,MAAVvnQ,GAAkBA,EAAOnF,WACzB+xQ,GAAMhiC,GAAkB8kC,UAErB9C,GAMXvF,EAAYxqS,UAAU01Q,cAAgB,SAAU66B,EAAUptQ,EAAQ2vQ,EAAc78B,GAC5E,IAAIR,EAAa,EACbs9B,GAAuBxC,EAASh6B,SAAW5D,GAAS6D,oBAAsB,EAK9E,OAJc,MAAVrzO,GAAkB4vQ,IAClBt9B,EAAa,EAActyO,EAAOqwO,gBAAkBrwO,EAAO+yO,gBAC3DT,EAAcq9B,EAAal4R,MAAQ,EAAK3J,KAAK+T,IAAI8tR,EAAal4R,MAAO66P,GAAcA,GAEhFA,GAMX+0B,EAAYxqS,UAAU0uS,wBAA0B,SAAUt2M,EAAWw5M,EAAazuQ,GAC9E,IAAI2lD,EAAQ,EACZ,GAAI8oN,GAAe,GAAe,MAAVzuQ,GAAkBA,EAAOmtB,YAAcw9M,GAAiBklC,KAC5E,OAAQ7vQ,EAAOmtB,WACX,KAAKw9M,GAAiB+gC,OAClB/lN,GAAS8oN,EAAcx5M,GAAa,EACpC,MACJ,KAAK01K,GAAiBghC,MAClBhmN,EAAQ8oN,EAAcx5M,EAIlC,OAAOtP,GAMX0hN,EAAYxqS,UAAU21G,YAAc,SAAUxyE,GAC1C,IAAIqsC,EAAiB,MAAVrsC,GAAkBA,EAAOwyE,YAMpC,OALe,OAAXxyE,QAAqC,IAAXA,GACtBA,EAAOinQ,gBAAkB57B,GAAiBtwD,WAAwC,IAAzB/6K,EAAOinQ,gBAChE56N,GAAM,GAGPA,GAEXg7N,EAAYxqS,UAAU2tS,aAAe,SAAU7nB,EAAKrU,EAAO59O,EAAMsP,GAC7D,QAAsB,IAAXA,EACPv+B,KAAK+oS,aAAa7nB,EAAKrU,EAAO59O,EAAM,UAEnC,CAEa,OAAV49O,QAE8B,IAAnB7sQ,KAAKunS,WAA+C,MAAlBvnS,KAAKunS,YACf,IAA3BvnS,KAAK0mS,oBACL1mS,KAAKquS,eAAiBruS,KAAKunS,UAAUh6H,KAAK/sK,SAASkoP,WACnD1oP,KAAKsuS,eAAiBtuS,KAAKunS,UAAUh6H,KAAKw1G,SAASr6B,WACnD1oP,KAAK0oP,WAAa1oP,KAAKunS,UAAUh6H,KAAK/sK,SAASkoP,WAC/C1oP,KAAKgtQ,kBAAoBhtQ,KAAKunS,UAAUh6H,KAAK/sK,SAASkoP,WACtD1oP,KAAK0mS,mBAAoB,GAGjC1mS,KAAKuuS,sBAAsBvuS,KAAKgtQ,oBAEpB,MAAPkU,SAEyB,IAAnBlhR,KAAKunS,WAA+C,MAAlBvnS,KAAKunS,YAE9CvnS,KAAK0oP,WAAa1oP,KAAKunS,UAAUh6H,KAAK/sK,SAASkoP,WAC/C1oP,KAAKgtQ,kBAAoBhtQ,KAAKunS,UAAUh6H,KAAK/sK,SAASkoP,YAE1D1oP,KAAKuuS,sBAAsBvuS,KAAKgtQ,oBAEpChtQ,KAAKwuS,WAAWttB,GAvBA,GAwBhBlhR,KAAKyuS,aAAa5hC,GAxBF,GAyBhB7sQ,KAAK0uS,YAAYz/Q,EAAMsP,GAzBP,KAgCxBqnQ,EAAYxqS,UAAUmzS,sBAAwB,SAAUI,GAC3C3uS,KAAK+sQ,aAAaA,eACtB/sQ,KAAK2nS,iBACN3nS,KAAKknS,gBAAgBroB,cAAc,SAAW7+Q,KAAK4mS,mBAAmB5mS,KAAKgtQ,oBAAoB,GAC/FhtQ,KAAKknS,gBAAgBroB,cAAc,SAAW7+Q,KAAK4mS,mBAAmB5mS,KAAKgtQ,oBAAoB,GAC/FhtQ,KAAK2nS,gBAAiB,IAO9B/B,EAAYxqS,UAAUozS,WAAa,SAAUttB,EAAKz7B,GACnC,MAAPy7B,IACAlhR,KAAK8gR,WAAaI,EAClBlhR,KAAK0oP,WAAa8gB,GAAcoC,IAEhCsV,EAAItU,eAAe5sQ,KAAK8gR,WAAY9gR,KAAKknS,gBAAiBlnS,KAAK+sQ,aAActnB,EAAWzlP,KAAK0oP,WAAY1oP,KAAK8tC,OAAOzuC,SAErHW,KAAK8gR,WAAaI,EAAI7hR,UAO9BumS,EAAYxqS,UAAUqzS,aAAe,SAAU5hC,EAAOpnB,GACrC,MAATonB,IACA7sQ,KAAKynS,aAAe56B,EAEpBA,EAAMD,eAAe5sQ,KAAKynS,aAAcznS,KAAKknS,gBAAiBlnS,KAAK+sQ,aAActnB,EAAWzlP,KAAK0oP,YAEjG1oP,KAAKynS,aAAe56B,EACpBA,EAAQ,OAOhB+4B,EAAYxqS,UAAUszS,YAAc,SAAUz/Q,EAAMsP,EAAQknN,GACxD,GAAY,MAARx2N,EAAc,CACd,IAAI2/Q,EAAyB,MAAVrwQ,EAAkBA,EAAOg8P,eAAiBjtB,GAAkBh0D,KAE3Eu1F,EAA4C,MAA5B7uS,KAAK4nS,oBAA+B5nS,KAAK4nS,oBAAoBrN,eAAiBjtB,GAAkBh0D,KACpH,GAAImsC,GAAax2N,IAASjvB,KAAK0nS,aAAekH,IAAgBC,EAAc,CACxE,IAAI5mD,EAAYjoP,KAAK+sQ,aAAaA,eAClC/sQ,KAAK0nS,YAAcz4Q,EACnBjvB,KAAK4nS,oBAAsBrpQ,EAC3B,IAAIlP,EAAOJ,EAAKmkP,QAAQxyP,QAAQ2d,GAEhCv+B,KAAKqmS,iBAAkB,EACvB,IAAIp8C,EAAWhC,EAAUigD,QAAQj5Q,GACjCjvB,KAAKknS,gBAAgBzgD,QAAQx3N,EAAMg7N,EAAU56N,MAIzDu2Q,EAAYxqS,UAAU0zS,gBAAkB,SAAU5iC,EAAMC,EAAMC,GAC1D,QAAoB,IAATD,EACPnsQ,KAAK+mS,mBAAoB,EACzB/mS,KAAK8uS,gBAAgB5iC,EAAMA,EAAMzC,GAAaqQ,aAE7C,GAAoB,iBAAT3N,QAAqC,IAATC,EACxCpsQ,KAAK8uS,gBAAgB5iC,EAAMC,EAAM1C,GAAaqQ,YAE7C,CACyB,MAAtB95Q,KAAK+uS,gBACL/uS,KAAK+uS,cAAgB,IAAI3sB,IAE7B,IAAI4sB,EAAS,KACTC,EAAK,IAAIC,GAAiBhjC,EAAMC,EAAMC,GACtCpsQ,KAAK+uS,cAAc1rD,YAAY4rD,KAC/BD,EAAShvS,KAAK+uS,cAAcnyS,SAASqyS,IAE3B,MAAVD,IACAA,EAAS,IAAIxsB,GAAgBtW,EAAMC,EAAMC,GACzCpsQ,KAAK+uS,cAAc3xS,SAAS6xS,EAAID,IAEpC,IACIv4I,EADYz2J,KAAK+sQ,aAAaA,eACXm7B,QAAQ8G,GACtBhvS,KAAK8sQ,aACXplB,iBAAiBjxF,KAG5BmvI,EAAYxqS,UAAU+zS,qBAAuB,SAAUpiS,EAAGC,EAAGR,EAAME,EAAKD,EAAOE,GAC3E,GAAII,aAAak/P,SAA2B,IAANj/P,EAClChN,KAAKsnS,WAAav6R,EAClB/M,KAAKknS,gBAAgBhoB,aAAa,iBAClCl/Q,KAAKknS,gBAAgB1hD,gBAAgBz4O,GACrC/M,KAAKknS,gBAAgBxyM,YACrB10F,KAAKknS,gBAAgB9tQ,UAAS,GAC9Bp5B,KAAKknS,gBAAgBhoB,aAAa,iCAClCl/Q,KAAKkjR,mBAAmBn2Q,EAAEA,EAAGA,EAAEC,QAE9B,GAAiB,iBAAND,EAAgB,CAC5B,IAAIqiS,EAAW,IAAInjC,GAAWz/P,EAAME,EAAK1M,KAAKqvB,KAAKrZ,MAAQxJ,EAAOC,EAAOzM,KAAKqvB,KAAKtZ,OAASrJ,EAAMC,GAClG3M,KAAKsnS,WAAa8H,EAClBpvS,KAAKknS,gBAAgBhoB,aAAa,iBAClCl/Q,KAAKknS,gBAAgB1hD,gBAAgB4pD,GACrCpvS,KAAKknS,gBAAgBxyM,YACrB10F,KAAKknS,gBAAgB9tQ,UAAS,GAC9Bp5B,KAAKknS,gBAAgBhoB,aAAa,iCAClCl/Q,KAAKkjR,mBAAmBn2Q,EAAGC,KAOnC44R,EAAYxqS,UAAU6jR,QAAU,SAAUjyQ,GACtC,OAAQA,GAyBZ44R,EAAYxqS,UAAU8nR,mBAAqB,SAAUr3Q,EAASI,GAC1D,IAAI6hC,EAAS,IAAIwzO,GACjBthR,KAAKgoS,sBAAsBn8R,EAASI,EAAS6hC,GAC7C9tC,KAAKknS,gBAAgBthD,UAAU93M,GAC/B9tC,KAAK8tC,OAAO2zO,SAAS3zO,IAMzB83P,EAAYxqS,UAAU4sS,sBAAwB,SAAUj7R,EAAGC,EAAG4E,GAE1D,OADAA,EAAMmjF,UAAUhoF,EAAG/M,KAAKi/Q,QAAQjyQ,IACzB4E,GA2BXg0R,EAAYxqS,UAAUk2I,eAAiB,SAAUtiG,EAAQC,GACrD,IAAInB,EAAS,IAAIwzO,GACjBthR,KAAKioS,kBAAkBj5P,EAAQC,EAAQnB,GACvC9tC,KAAKknS,gBAAgBthD,UAAU93M,GAC/B9tC,KAAK8tC,OAAO2zO,SAAS3zO,IAMzB83P,EAAYxqS,UAAU6sS,kBAAoB,SAAUl7R,EAAGC,EAAG4E,GAKtD,OAJa,MAATA,IACAA,EAAQ,IAAI0vQ,IAEhB1vQ,EAAMw1C,MAAMr6C,EAAGC,GACR4E,GAwBXg0R,EAAYxqS,UAAUi0S,gBAAkB,SAAUztR,GAC9C,IAAIksB,EAAS,IAAIwzO,GACjBthR,KAAKsvS,mBAAmB1tR,EAAOksB,GAC/B9tC,KAAKknS,gBAAgBthD,UAAU93M,GAC/B9tC,KAAK8tC,OAAO2zO,SAAS3zO,IAMzB83P,EAAYxqS,UAAU+xS,sBAAwB,WAE1CntS,KAAKknS,gBAAgBhoB,aAAa,0CAE9Bl/Q,KAAKuvS,2BAA8BvvS,KAAKqvB,KAAW,QAC/B,MAAhBrvB,KAAKwvS,UACDxvS,KAAKuvS,0BAA4BvvS,KAAKqvB,KAAKtZ,QAA2C,IAAjC/V,KAAKuvS,wBAC1DvvS,KAAKkjR,mBAAmB,EAAGljR,KAAKi/Q,QAAQj/Q,KAAKqvB,KAAKtZ,SAGlD/V,KAAKkjR,mBAAmB,EAAGljR,KAAKi/Q,QAAQj/Q,KAAKuvS,4BAS7D3J,EAAYxqS,UAAUk0S,mBAAqB,SAAU1tR,EAAOhQ,GAKxD,OAJa,MAATA,QAAkC,IAAVA,IACxBA,EAAQ,IAAI0vQ,IAEhB1vQ,EAAMiP,OAAO7gB,KAAKi/Q,QAAQr9P,IACnBhQ,GA0BXg0R,EAAYxqS,UAAUy4F,KAAO,WACzB,IAAIpoC,EAAQ,IAAIgkP,GAAiBzvS,KAAMA,KAAK8tC,OAAOzuC,SAWnD,OAVAosD,EAAMohN,MAAQ7sQ,KAAKynS,aACnBh8O,EAAMy1N,IAAMlhR,KAAK8gR,WACjBr1N,EAAMx8B,KAAOjvB,KAAK0nS,YAClBj8O,EAAMi9L,WAAa1oP,KAAKgtQ,kBACxBvhN,EAAM8oN,iBAAmBv0Q,KAAK+lS,yBAC9Bt6O,EAAM+oN,YAAcx0Q,KAAKgmS,oBACzBv6O,EAAMoyN,YAAc79Q,KAAKimS,oBACzBx6O,EAAMikP,kBAAoB1vS,KAAK6lS,0BAC/B7lS,KAAK8mS,cAActiS,KAAKinD,GACxBzrD,KAAKknS,gBAAgBlpB,oBACdvyN,GAEXm6O,EAAYxqS,UAAU64F,QAAU,SAAUxoC,GACtC,QAAqB,IAAVA,EACHzrD,KAAK8mS,cAActqS,OAAS,GAC5BwD,KAAK2vS,sBAIT,IAA2C,IAAvC3vS,KAAK8mS,cAAcvoS,QAAQktD,GAC3B,KACsC,IAA9BzrD,KAAK8mS,cAActqS,QADlB,CAKL,GADewD,KAAK2vS,mBACHlkP,EACb,QAUpBm6O,EAAYxqS,UAAUu0S,eAAiB,WACnC,IAAIlkP,EAAQzrD,KAAK8mS,cAAcjhI,MAW/B,OAVA7lK,KAAKwhR,qBAAuB/1N,EAAM3d,OAClC9tC,KAAKynS,aAAeh8O,EAAMohN,MAC1B7sQ,KAAK8gR,WAAar1N,EAAMy1N,IACxBlhR,KAAK0nS,YAAcj8O,EAAMx8B,KACzBjvB,KAAKgtQ,kBAAoBvhN,EAAMi9L,WAC/B1oP,KAAK+lS,yBAA2Bt6O,EAAM8oN,iBACtCv0Q,KAAKgmS,oBAAsBv6O,EAAM+oN,YACjCx0Q,KAAKimS,oBAAsBx6O,EAAMoyN,YACjC79Q,KAAK6lS,0BAA4Bp6O,EAAMikP,kBACvC1vS,KAAKknS,gBAAgBnpB,uBACdtyN,GAOXm6O,EAAYgK,oBAAsB,GAMlChK,EAAYiK,oBAAqB,EAC1BjK,KAQPkK,GAAyC,WAMzC,SAASA,EAAwBt2L,GAC7Bx5G,KAAKw5G,OAASA,EASlB,OAHAs2L,EAAwB10S,UAAU2xQ,aAAe,WAC7C,OAAO/sQ,KAAKw5G,OAAOuzJ,gBAEhB+iC,KAGPL,GAAkC,WAClC,SAASA,EAAiB1sB,EAAUj1O,GAMhC9tC,KAAK+vS,0BAA4B5mC,GAAkB28B,KAMnD9lS,KAAKuuQ,yBAA2B,EAMhCvuQ,KAAKwuQ,oBAAsB,EAM3BxuQ,KAAKgwS,oBAAsB,IAM3BhwS,KAAKiwS,cAAgBzmC,GAAcoC,SACX,IAAbmX,IACP/iR,KAAKkwS,YAAcntB,EACnB/iR,KAAKwhR,qBAAuB1zO,GA0IpC,OAvIAxvC,OAAOuJ,eAAe4nS,EAAiBr0S,UAAW,YAM9CsM,IAAK,WACD,OAAO1H,KAAKkwS,aAEhBvoS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nS,EAAiBr0S,UAAW,UAK9CsM,IAAK,WACD,OAAO1H,KAAKwhR,sBAEhB75Q,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nS,EAAiBr0S,UAAW,oBAK9CsM,IAAK,WACD,OAAO1H,KAAKuuQ,0BAEhBlnQ,IAAK,SAAUtK,GACXiD,KAAKuuQ,yBAA2BxxQ,GAEpC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nS,EAAiBr0S,UAAW,eAK9CsM,IAAK,WACD,OAAO1H,KAAKwuQ,qBAEhBnnQ,IAAK,SAAUtK,GACXiD,KAAKwuQ,oBAAsBzxQ,GAE/B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nS,EAAiBr0S,UAAW,eAK9CsM,IAAK,WACD,OAAO1H,KAAKgwS,qBAEhB3oS,IAAK,SAAUtK,GACXiD,KAAKgwS,oBAAsBjzS,GAE/B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nS,EAAiBr0S,UAAW,OAK9CsM,IAAK,WACD,OAAO1H,KAAKmwS,QAEhB9oS,IAAK,SAAUtK,GACXiD,KAAKmwS,OAASpzS,GAElB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nS,EAAiBr0S,UAAW,SAK9CsM,IAAK,WACD,OAAO1H,KAAK6gR,UAEhBx5Q,IAAK,SAAUtK,GACXiD,KAAK6gR,SAAW9jR,GAEpB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nS,EAAiBr0S,UAAW,QAK9CsM,IAAK,WACD,OAAO1H,KAAKowS,SAEhB/oS,IAAK,SAAUtK,GACXiD,KAAKowS,QAAUrzS,GAEnB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nS,EAAiBr0S,UAAW,cAK9CsM,IAAK,WACD,OAAO1H,KAAKiwS,eAEhB5oS,IAAK,SAAUtK,GACXiD,KAAKiwS,cAAgBlzS,GAEzB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nS,EAAiBr0S,UAAW,qBAK9CsM,IAAK,WACD,OAAO1H,KAAK+vS,2BAEhB1oS,IAAK,SAAUtK,GACXiD,KAAK+vS,0BAA4BhzS,GAErC4K,YAAY,EACZC,cAAc,IAEX6nS,KAGPP,GAAkC,WAWlC,OALA,SAA0BmB,EAAUC,EAAYC,GAC5CvwS,KAAKqwS,SAAWA,EAChBrwS,KAAKswS,WAAaA,EAClBtwS,KAAKuwS,UAAYA,MChsDrBC,GAA8B,WAC9B,SAASA,EAAajjI,EAAMkjI,GA8BxB,GAxBAzwS,KAAKiwS,cAAgBzmC,GAAcoC,IAMnC5rQ,KAAKyE,WAAY,EAMjBzE,KAAK0wS,UAAW,EAMhB1wS,KAAK2wS,cAAgB,EAKrB3wS,KAAK8rP,qBAAuB,IAAIhE,QACO,IAA5B2oD,EACPzwS,KAAK4wS,QAAUrjI,EACfvtK,KAAK6wS,mBAAoB,EACzB7wS,KAAKs8B,QAAU,IAAI2nO,QAElB,GAAIwsC,aAAmCxsC,IAAyC,OAA5BwsC,EAAkC,CACvF,GAAY,MAARljI,EACA,MAAM,IAAI3sK,MAAM,8BAEpB,GAA+B,MAA3B6vS,EACA,MAAM,IAAI7vS,MAAM,gCAEpBZ,KAAK4wS,QAAUrjI,EACfvtK,KAAKs8B,QAAUm0Q,OAGfzwS,KAAKpC,YAAY2vK,GACjBvtK,KAAK6wS,kBAAoBJ,EAmLjC,OAhLAnyS,OAAOuJ,eAAe2oS,EAAap1S,UAAW,cAM1CsM,IAAK,WACD,OAAO1H,KAAKiwS,eAEhB5oS,IAAK,SAAUtK,GACXiD,KAAKiwS,cAAgBlzS,GAEzB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2oS,EAAap1S,UAAW,QAK1CsM,IAAK,WACD,OAAO1H,KAAK4wS,SAEhBjpS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2oS,EAAap1S,UAAW,WAK1CsM,IAAK,WACD,OAAO1H,KAAK8wS,SAEhBzpS,IAAK,SAAUtK,GACXiD,KAAK8wS,QAAU/zS,GAEnB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2oS,EAAap1S,UAAW,QAK1CsM,IAAK,WACD,OAAO1H,KAAK+wS,WAEhB1pS,IAAK,SAAUtK,GACXiD,KAAK+wS,UAAYh0S,GAErB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2oS,EAAap1S,UAAW,WAK1CsM,IAAK,WACD,OAAO1H,KAAKyE,WAEhB4C,IAAK,SAAUtK,GACXiD,KAAKyE,UAAY1H,GAErB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2oS,EAAap1S,UAAW,YAK1CsM,IAAK,WAID,OAHyB,MAApB1H,KAAKkwS,aACNlwS,KAAKgxS,mBAAmBhxS,KAAKutK,MAE1BvtK,KAAKkwS,aAEhBvoS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2oS,EAAap1S,UAAW,UAK1CsM,IAAK,WACD,OAAkB,MAAd1H,KAAKowE,OACLpwE,KAAKowE,MAAQ,IAAI6gO,GAAuBjxS,KAAKutK,MAC7CvtK,KAAKowE,MAAMsgO,UAAW,EACf1wS,KAAKowE,OAGLpwE,KAAKowE,OAGpBzoE,YAAY,EACZC,cAAc,IAOlB4oS,EAAap1S,UAAUgJ,IAAM,WACzB,IAAIgsE,EAAQ,IAAIogO,EAAaxwS,KAAK4wS,SAElC,OADAxgO,EAAM74C,KAAO,GACN64C,GAMXogO,EAAap1S,UAAU81S,KAAO,SAAU7jL,GACpC,OAAe,IAAXA,EACO,EAEFA,EAAS,EACP,GAGC,GAOhBmjL,EAAap1S,UAAU41S,mBAAqB,SAAUzjI,GAClD,IAAI4jI,EAAQ5jI,EACR6jI,EAAK,IAAItB,GAAwB9vS,KAAKutK,MAI1C,GAHAvtK,KACKkwS,YAAc,IAAItK,GAAYr4H,EAAKl+I,KAAM+hR,EAAIpxS,KAAKs8B,SACvDt8B,KAAKkwS,YAAYX,wBAA0B,EAC9B,MAAT4B,EAAe,CACf,IAAIE,EAAKF,EAAMnG,QAAQ1qS,OACb,MAAN+wS,IACArxS,KAAKkwS,YAAYxnD,WAAa2oD,EAAG7wS,SAASkoP,WAC1C1oP,KAAK0oP,WAAa2oD,EAAG7wS,SAASkoP,YAItC,IAAI4oD,EAAUtxS,KAAKkxS,KAAK3jI,EAAKgkI,OAAOvkS,KAAOhN,KAAKkxS,KAAK3jI,EAAKgkI,OAAOxkS,IAE7DwgK,EAAKgkI,OAAOxkS,GAAK,GAAKwgK,EAAKgkI,OAAOvkS,GAAK,QACvChN,KAAKkwS,YAAY/C,wBAKrB,IAAI54Q,EAAW48Q,EAAMnG,QAAQwG,gBAAgBL,GAAO,GAChDx0B,EAAUw0B,EAAMnG,QAAQh9O,aAAa2uN,QACrC38Q,KAAK6wS,kBACDtjI,EAAKgkI,OAAOxkS,GAAK,GAAKwgK,EAAKgkI,OAAOvkS,GAAK,GACvChN,KAAKkwS,YAAYf,qBAAqB56Q,GAI1Cv0B,KAAK+iR,SAASosB,qBAAqB56Q,EAASxnB,EAAGwnB,EAASvnB,EAAG2vQ,EAAQnwQ,KAAMmwQ,EAAQjwQ,IAAKiwQ,EAAQlwQ,MAAOkwQ,EAAQhwQ,QAEjH3M,KAAKkwS,YAAY5F,SAAStqS,OAG9B1B,OAAOuJ,eAAe2oS,EAAap1S,UAAW,WAM1CsM,IAAK,WACD,OAAO1H,KAAKs8B,SAEhB30B,YAAY,EACZC,cAAc,IAEX4oS,KCxOPiB,GAA+B,WAM/B,SAASA,KAgCT,OA7BAnzS,OAAOuJ,eAAe4pS,EAAcr2S,UAAW,SAM3CsM,IAAK,WAID,YAH+B,IAApB1H,KAAKqqC,aACZrqC,KAAKqqC,eAEFrqC,KAAKqqC,WAAW7tC,QAE3BmL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4pS,EAAcr2S,UAAW,QAK3CsM,IAAK,WAID,YAH+B,IAApB1H,KAAKqqC,aACZrqC,KAAKqqC,eAEFrqC,KAAKqqC,YAEhB1iC,YAAY,EACZC,cAAc,IAEX6pS,KC1CPhhN,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAyBxCmgN,GAAwC,SAAU3/M,GAElD,SAAS2/M,EAAuB1jI,GAC5B,IAAIxtK,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAkBjC,GAZAD,EAAM2xS,iBAAmB,EAMzB3xS,EAAM2wS,UAAW,EAKjB3wS,EAAM4xS,gBAAkB,IAAIrmD,GACxB/9E,aAAgBqkI,GAAa,CAI7B7xS,EAAMwtK,KAAOA,EACb,IAAIskI,EAAQtkI,EAEZxtK,EAAM+xS,YAAYD,GAGtB,OAAO9xS,EAuPX,OArRA0wF,GAAUwgN,EAAwB3/M,GAgClC2/M,EAAuB71S,UAAUskE,MAAQ,SAAU5tD,EAAO/U,GACtD,GAAqB,iBAAV+U,QAAuC,IAAV/U,EAAuB,CAE3D,OADUiD,KAAKgpG,KAAKl3F,GAIpB,GAAa,MAAT/U,EACA,MAAM,IAAI6D,MAAM,gCAEpB,GAAI7D,EAAMwwK,OAASvtK,KAAKutK,KACpB,MAAM,IAAI3sK,MAAM,yDAW5BqwS,EAAuB71S,UAAUgJ,IAAM,SAAU2tS,EAAeC,GAC5D,QAA6B,IAAlBD,EAA+B,CACtC,IAAI3hO,EAAQ,IAAIogO,GAAaxwS,KAAKutK,MAGlC,OAFAn9F,EAAM74C,KAAO,GACbv3B,KAAKoE,IAAIgsE,GACFA,EAEN,GAAI2hO,aAAyBvB,GAAc,CAK5C,IAAI1+R,EAAQ9R,KAAKgpG,KAAKxkG,KAAKutS,GAG3B,OADA/xS,KAAKiyS,SAASngS,EAAOigS,GACdjgS,EAGP,OAAO,GAOfm/R,EAAuB71S,UAAU62S,SAAW,SAAUngS,EAAOs+D,GACzD,IAAI3uE,EAAY,IAAI8jQ,GAAmBn1L,GACvCpwE,KAAKutK,KAAKi7E,SAASpkP,IAAI3C,IAe3BwvS,EAAuB71S,UAAUmgH,OAAS,SAAUzpG,EAAOs+D,GASvD,IAAK,IAFD44B,KACAxsG,EAASwD,KAAKgpG,KAAKxsG,OACdN,EAAI4V,EAAO5V,EAAIM,EAAQN,IAC5B8sG,EAAKxkG,KAAKxE,KAAKgpG,KAAK68D,OAExB7lK,KAAKgpG,KAAKxkG,KAAK4rE,GACf,IAASl0E,EAAI,EAAGA,EAAI8sG,EAAKxsG,OAAQN,IAC7B8D,KAAKgpG,KAAKxkG,KAAKwkG,EAAK9sG,IAGxB8D,KAAKkyS,YAAYpgS,EAAOs+D,IAM5B6gO,EAAuB71S,UAAU82S,YAAc,SAAUpgS,EAAOs+D,GAC5D,GAAa,MAATA,EACA,MAAM,IAAIxvE,MAAM,+BAEpB,IAAIa,EAAY,IAAI8jQ,GAAmBn1L,GACvCpwE,KAAKutK,KAAKi7E,SAASjtI,OAAOzpG,EAAOrQ,IAOrCwvS,EAAuB71S,UAAU02S,YAAc,SAAUK,GAIrD,IAAI3pD,EAAWxoP,KAAKutK,KAAKi7E,SACVxoP,KAAKutK,KAAKw/F,eAMZolC,EAAWnuD,WAOxB,IAAIouD,EAAa,IAAInuC,GACjBouC,EAAgB,IAAIpuC,GA4GpBquC,KACJA,EAAS9tS,KA5GO,KA6GhB4tS,EAAW71S,KAAO+1S,EAClB9pD,EAASjtI,OAAO,EAAG,IAAIgqJ,GAAmB6sC,KAC1CE,MACS9tS,KA9GU,KA+GnB6tS,EAAc91S,KAAO+1S,EACrB9pD,EAASjtI,OAAOitI,EAAStpO,MAAO,IAAIqmP,GAAmB8sC,KAM3DpB,EAAuB71S,UAAUmD,QAAU,SAAU6xE,GACjD,GAAa,MAATA,EACA,MAAM,IAAIxvE,MAAM,gCAGpB,OADYZ,KAAKgpG,KAAKzqG,QAAQ6xE,IAG3B6gO,GACTQ,ICjSEc,GAA6B,WAC7B,SAASA,EAAYrmC,EAAMC,GAavB,GAPAnsQ,KAAK8rP,qBAAuB,IAAIhE,GAMhC9nP,KAAKwyS,qBAAsB,OACP,IAATtmC,QAGN,GAAIA,aAAgBF,SAAyB,IAATG,EAAsB,CAC3DnsQ,KAAKs8B,QAAU,IAAI2nO,GACnB,IAAIwuC,EAAW,IAAIzmC,GAAME,EAAKl2P,MAAOk2P,EAAKn2P,QAC1C/V,KAAKg7M,QAAQy3F,GACbzyS,KAAK+0G,kBAGL/0G,KAAKs8B,QAAU,IAAI2nO,GACnBjkQ,KAAKg7M,QAAQ,IAAIgxD,GAAME,EAAMC,IAC7BnsQ,KAAK+0G,aA8Ib,OA3IAz2G,OAAOuJ,eAAe0qS,EAAYn3S,UAAW,QAKzCsM,IAAK,WACD,OAAO1H,KAAK0yS,cAEhB/qS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0qS,EAAYn3S,UAAW,SAIzCsM,IAAK,WACD,OAAO1H,KAAKqvB,KAAKrZ,OAErBrO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0qS,EAAYn3S,UAAW,UAIzCsM,IAAK,WACD,OAAO1H,KAAKqvB,KAAKtZ,QAErBpO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0qS,EAAYn3S,UAAW,YAIzCsM,IAAK,WACD,GAAwB,MAApB1H,KAAKkwS,kBAAmD,IAArBlwS,KAAKkwS,YAA6B,CACrE,IAAIkB,EAAK,IAAItB,GAAwB9vS,MACjCo/B,EAAI,IAAIwmQ,GAAY5lS,KAAKqvB,KAAM+hR,EAAIpxS,KAAKs8B,SAC5Ct8B,KAAKkwS,YAAc9wQ,EAGnBp/B,KAAKkwS,YAAY/C,wBAGrB,OAAOntS,KAAKkwS,aAEhBvoS,YAAY,EACZC,cAAc,IAMlB2qS,EAAYn3S,UAAU2xQ,aAAe,WAKjC,OAJsB,MAAlB/sQ,KAAKioP,YACLjoP,KAAKioP,UAAY,IAAI0qD,GACrB3yS,KAAKs8B,QAAQojC,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB7D,UAAWjoP,KAAKioP,YAEnEjoP,KAAKioP,WAOhBsqD,EAAYn3S,UAAU25G,WAAa,WAC/B/0G,KAAK4yS,UACL5yS,KAAK6yS,cAMTN,EAAYn3S,UAAUw3S,QAAU,WAC5B,IAAI71S,EAAQ,IAAIumP,GAAQtjP,KAAK8rP,qBAAqBlD,SAClD5oP,KAAKs8B,QAAQojC,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBplP,KAAM3J,IAMhEw1S,EAAYn3S,UAAUy3S,WAAa,WAC/B,IAAI91S,EAAQ,IAAIumP,GAAQtjP,KAAK8rP,qBAAqB/3H,MAClD/zH,KAAKs8B,QAAQojC,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBvD,QAASxrP,IAEnEw1S,EAAYn3S,UAAU0gE,MAAQ,SAAUzsC,QAChB,IAATA,GACe,MAAlBrvB,KAAKioP,YACLjoP,KAAKioP,UAAY,KACjBjoP,KAAKs8B,QAAQ/3B,OAAOvE,KAAK8rP,qBAAqB7D,YAE7B,MAAjBjoP,KAAK+iR,UACL/iR,KAAK+iR,SAASjnN,MAAM97D,KAAKqvB,QAI7BrvB,KAAKg7M,QAAQ3rL,GACbrvB,KAAK87D,UAOby2O,EAAYn3S,UAAU4/M,QAAU,SAAU3rL,GACtC,IAAI6D,EAAO,IAAI+4O,GAAW,IAAIF,GAAO,EAAG,GAAI18O,GACxC9G,EAAMimO,GAASgB,cAAct8N,GACjClzB,KAAKs8B,QAAQojC,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB71L,KAAM1tC,GAC5DvoB,KAAK0yS,aAAerjR,GAExB/wB,OAAOuJ,eAAe0qS,EAAYn3S,UAAW,WAsBzCsM,IAAK,WACD,OAAO1H,KAAKs8B,SAEhB30B,YAAY,EACZC,cAAc,IAEX2qS,KCvLP9hN,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAgCxC6hN,GAA8B,SAAUrhN,GAExC,SAASqhN,EAAaG,GAClB,IAAI/yS,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KASjC,OAJAD,EAAMkD,WAAa,IAAIqoP,GACnBwnD,aAA0BxnD,KAC1BvrP,EAAQuxF,EAAOhwF,KAAKtB,KAAM8yS,IAAmB9yS,MAE1CD,EAkNX,OA7NA0wF,GAAUkiN,EAAcrhN,GAaxBhzF,OAAOuJ,eAAe8qS,EAAav3S,UAAW,SAM1CsM,IAAK,WACD,OAAO1H,KAAK+yS,YAEhBprS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8qS,EAAav3S,UAAW,YAK1CsM,IAAK,WACD,OAAO1H,KAAK40Q,aAEhBvtQ,IAAK,SAAUtK,GACXiD,KAAK40Q,YAAc73Q,GAEvB4K,YAAY,EACZC,cAAc,IAOlB+qS,EAAav3S,UAAU8sS,QAAU,SAAUprS,GACvC,IAAIk2S,EAAYl2S,EAAIkE,QAChBu2B,EAAO,KAKX,GAJIv3B,KAAKizS,MAAM5vD,YAAY2vD,KACvBz7Q,EAAOv3B,KAAKizS,MAAMr2S,SAASo2S,IAGnB,MAARz7Q,EAAc,CACd,IAAI27Q,EAAQlzS,KAAKmzS,eACjB57Q,EAAO,IAAI+rN,GAAQ4vD,GACnBlzS,KAAKizS,MAAM71S,SAAS41S,EAAWz7Q,GAC3Bz6B,aAAeo2Q,GACflzQ,KAAKoE,IAAItH,EAAKy6B,GAETz6B,aAAey1S,GACpBvyS,KAAKoE,IAAItH,EAAKy6B,GAETz6B,aAAe0lR,GACpBxiR,KAAKoE,IAAItH,EAAKy6B,IAETz6B,aAAekrR,IAAYlrR,aAAe8rR,KAC/C5oR,KAAKoE,IAAItH,EAAKy6B,GAGtB,OAAOA,GAMXo7Q,EAAav3S,UAAU23S,SAAW,WACT,MAAjB/yS,KAAKozS,WACLpzS,KAAKozS,SAAW,IAAIhxB,IAExB,IAAIixB,EAAQrzS,KAAK0/D,MAAM9iE,SAASoD,KAAK8rP,qBAAqB78N,MAC1D,GAAa,MAATokR,EAAe,CAGFn8B,GAAcwC,YAAY25B,GAE3C,OAAOrzS,KAAKozS,UAMhBT,EAAav3S,UAAUysS,oBAAsB,SAAUyL,GACnD,GAAwB,MAApBA,EACA,MAAM,IAAI1yS,MAAM,0CAEpB,IAAI2yS,EAAWvzS,KAAK0/D,MAAM9iE,SAASoD,KAAK8rP,qBAAqBrD,SAC7C,MAAZ8qD,IACAA,EAAW,IAAI/kD,GACfxuP,KAAK0/D,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBrD,QAAS8qD,IAE3D,IAAIh8Q,EAAO,IAAI+rN,GAAQgwD,GAClBC,EAASpvS,SAASozB,IACnBg8Q,EAASnvS,IAAImzB,IAQrBo7Q,EAAav3S,UAAUo4S,WAAa,SAAUj8Q,GAG1C,IAAK,IAFDl6B,EAAM,KACNC,EAAO0C,KAAKozS,SAAS91S,OAChBwU,EAAQ,EAAGA,EAAQ9R,KAAKozS,SAAS/jR,OAAQvd,IAC9C,GAAI9R,KAAKozS,SAASx2S,SAASU,EAAKwU,MAAY,IAAIwxO,GAAQ/rN,GAAO,CAC3Dl6B,EAAMC,EAAKwU,GACX,MAGG,MAAPzU,GACA2C,KAAKozS,SAAS7uS,OAAOlH,IAO7Bs1S,EAAav3S,UAAU+3S,aAAe,WAElC,OADWM,GAAKC,oBAGpBf,EAAav3S,UAAUgJ,IAAM,SAAU8nQ,EAAMC,GACzC,GAAID,aAAgBgH,GAAS,CACzB,IAAI3nB,EAAa,KACb8nD,EAAQrzS,KAAK0/D,MAAM9iE,SAASoD,KAAK8rP,qBAAqB78N,MAC1D,GAAa,MAATokR,EAAe,CACf,IAAI5xS,EAAY4xS,EAChB9nD,EAAa8nD,EACb9nD,EAAa8nD,OAGb9nD,EAAa,IAAID,GACjBtrP,KAAK0/D,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB78N,KAAMs8N,GAExDA,EAAW7rL,MAAMtiE,SAAS+uQ,EAAKpvQ,MAAO,IAAIwoQ,GAAmB2G,EAAKlrQ,eAEjE,GAAIkrQ,aAAgBqmC,GAAa,CAClC,IAAIoB,OAAW,EAGC,OAFhBA,EAAW3zS,KAAK0/D,MAAM9iE,SAASoD,KAAK8rP,qBAAqBlD,YAGrD+qD,EAAW,IAAIroD,GACftrP,KAAK0/D,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBlD,QAAS+qD,IAE3DA,EAASj0O,MAAMtiE,SAAS+uQ,EAAKpvQ,MAAO,IAAIwoQ,GAAmB2G,EAAKlrQ,eAE/D,GAAIkrQ,aAAgBO,SAapB,GAAIP,aAAgBsW,GAAiB,CACtC,IAAIoxB,EAAU1nC,EAAKlrQ,QACf6yS,EAAW,KAGC,OAFhBA,EAAW7zS,KAAK0/D,MAAM9iE,SAASoD,KAAK8rP,qBAAqBnD,cAGrDkrD,EAAW,IAAIvoD,GACftrP,KAAK0/D,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBnD,UAAWkrD,IAE7DA,EAASn0O,MAAMtiE,SAAS+uQ,EAAKpvQ,MAAO,IAAIwoQ,GAAmBquC,QAE1D,CAEGD,EAAW3zS,KAAKuiP,WAAW7iL,MAAM9iE,SAASoD,KAAK8rP,qBAAqBlD,SAAxE,IACIkrD,OAAiB,OACW,IAArB9zS,KAAK40Q,cACZk/B,EAAiB9zS,KAAK40Q,YAAYoC,SAASh2Q,QAAQ0+D,MAAM9iE,SAASoD,KAAK8rP,qBAAqB7D,WAAWvoL,MAAM9iE,SAASoD,KAAK8rP,qBAAqBlD,UAEvI5oP,KAAKuiP,WAAW7iL,MAAM9sC,SAAnC,IACImhR,GAAqB,EACrBC,OAAe,EACnB,QAAgC,IAArBh0S,KAAK40Q,kBAA0D15Q,WAAnB44S,GAAkD,MAAlBA,GAIlF,QAAgC,IAArB9zS,KAAK40Q,YAEjB,IAAK,IADD/hP,EAAWihR,EAAep0O,MAAM9sC,SAC3B12B,EAAI,EAAGA,EAAI22B,EAASr2B,OAAQN,SACN,IAAhB22B,EAAS32B,SAAqD,IAAxB22B,EAAS32B,GAAG8E,SACrD6xB,EAAS32B,GAAG8E,QAAQzE,KAAK,KAAO2vQ,EAAKlrQ,QAAQzE,KAAK,KAClDy3S,EAAenhR,EAAS32B,GACxB63S,GAAqB,QATjCD,EAAiB,IAAIxoD,GACrBtrP,KAAK40Q,YAAYoC,SAASh2Q,QAAQ0+D,MAAM9iE,SAASoD,KAAK8rP,qBAAqB7D,WAAWvoL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBlD,QAASkrD,GAiB5I,GAJgB,MAAZH,IACAA,EAAW,IAAIroD,GACftrP,KAAKuiP,WAAW7iL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBlD,QAAS+qD,IAElEI,QAA8C,IAAjBC,EAC7BL,EAASj0O,MAAMtiE,SAAS+uQ,EAAKpvQ,MAAOi3S,OAEnC,CACGvyS,EAAY,IAAI8jQ,GAAmB2G,EAAKlrQ,SAC5C2yS,EAASj0O,MAAMtiE,SAAS+uQ,EAAKpvQ,MAAO0E,QACJ,IAArBzB,KAAK40Q,aACZk/B,EAAep0O,MAAMtiE,SAAS+uQ,EAAKpvQ,MAAO0E,MAMnDkxS,GACTrnD,IAMEmoD,GAAsB,WAKtB,SAASA,EAAKvvD,GACVlkP,KAAKkkP,YAAcA,GAAeuvD,EAAKC,mBAsC3C,OApCAp1S,OAAOuJ,eAAe4rS,EAAM,gBAKxB/rS,IAAK,WAGD,OAFA+rS,EAAK3lG,KAAO2lG,EAAK3lG,KAAO,EACxB2lG,EAAK3lG,KAAO2lG,EAAK3lG,KAAO,aAAe,EAAI2lG,EAAK3lG,MAGpDnmM,YAAY,EACZC,cAAc,IAMlB6rS,EAAKr4S,UAAU8R,SAAW,WACtB,OAAOlN,KAAKkkP,aAMhBuvD,EAAKC,iBAAmB,WACpB,IAEIO,EAAeR,EAAKS,aAAahnS,WAErC,OADA+mS,EAHW,2BACW,eAEgBp9Q,OAAO,EAAI,GAAKo9Q,EAAaz3S,QAAWy3S,GAOlFR,EAAK3lG,KAAO,EACL2lG,KCxSP7B,GAA6B,WAM7B,SAASA,EAAYrmD,GAMjBvrP,KAAKm0S,eAAiB,EAMtBn0S,KAAK8tR,UAAW,EAMhB9tR,KAAK8rP,qBAAuB,IAAIhE,GAChC9nP,KAAKo0S,eAAiB7oD,EAwI1B,OAtIAjtP,OAAOuJ,eAAe+pS,EAAYx2S,UAAW,WAMzCsM,IAAK,WAID,OAAO1H,KAAKq0S,YAEhBhtS,IAAK,SAAUtK,GACXiD,KAAKq0S,WAAat3S,GAEtB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+pS,EAAYx2S,UAAW,cAKzCsM,IAAK,WACD,OAAO1H,KAAKo0S,gBAEhBzsS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+pS,EAAYx2S,UAAW,WAKzCsM,IAAK,WACD,OAAO1H,KAAKo0S,gBAEhBzsS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+pS,EAAYx2S,UAAW,gBAKzCsM,IAAK,WACD,IAAI0oE,EAAQpwE,KAAKmuD,OACbr8C,EAAQ9R,KAAKs0S,kBAEjB,OADkBlkO,EAAM1Q,MAAM5tD,IAGlCnK,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+pS,EAAYx2S,UAAW,qBAKzCsM,IAAK,WACD,GAAmC,IAA/B1H,KAAKu0S,gBAAgBr1R,QAAuC,IAAxBlf,KAAKm0S,cAAsB,CAC/D,IAAI/jO,EAAQpwE,KAAKu0S,gBAAgBnwS,MACjCpE,KAAKm0S,cAAgBn0S,KAAKu0S,gBAAgBh2S,QAAQ6xE,GAEtD,OAAOpwE,KAAKm0S,eAMhB9sS,IAAK,SAAUtK,GACX,GAAIA,EAAQ,GAAKA,EAAQiD,KAAKmuD,OAAOjvC,MAAQ,EACzC,MAAM,IAAIte,MAAM,6FAGhBZ,KAAKm0S,cAAgBp3S,EACrBiD,KAAK8tR,UAAW,GAGxBnmR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+pS,EAAYx2S,UAAW,UAKzCsM,IAAK,WAID,OAH4B,MAAxB1H,KAAKu0S,sBAA2D,IAAzBv0S,KAAKu0S,kBAC5Cv0S,KAAKu0S,gBAAkB,IAAItD,GAAuBjxS,OAE/CA,KAAKu0S,iBAEhB5sS,YAAY,EACZC,cAAc,IAMlBgqS,EAAYx2S,UAAU2xQ,aAAe,WAKjC,OAJsB,MAAlB/sQ,KAAKioP,YACLjoP,KAAKioP,UAAY,IAAI0qD,GACrB3yS,KAAKurP,WAAW7rL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB7D,UAAWjoP,KAAKioP,YAEtEjoP,KAAKioP,WAEhB3pP,OAAOuJ,eAAe+pS,EAAYx2S,UAAW,YAKzCsM,IAAK,WACD,IACI8gP,EADMxoP,KAAKo0S,eAAe10O,MAAM9iE,SAASoD,KAAK8rP,qBAAqBtD,UAOvE,OAJgB,MAAZA,IACAA,EAAW,IAAIgG,GACfxuP,KAAKo0S,eAAe10O,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBtD,SAAUA,IAEpEA,GAEX7gP,YAAY,EACZC,cAAc,IAMlBgqS,EAAYx2S,UAAUkuS,aAAe,SAAUxiO,GAC3C9mE,KAAKioP,UAAYnhL,EACjB9mE,KAAKurP,WAAW7rL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB7D,UAAWjoP,KAAKioP,WACzEjoP,KAAK8tR,UAAW,GAEb8jB,KChKP4C,GAAyC,WACzC,SAASA,EAAwBjnI,GAM7BvtK,KAAKy0S,6BAA+B,mDAKpCz0S,KAAK00S,2BAA6B,6CAKlC10S,KAAK8rP,qBAAuB,IAAIhE,GAKhC9nP,KAAK20S,oBAAsB,IAAInmD,GAK/BxuP,KAAK40S,cACe,IAATrnI,IACPvtK,KAAKutK,KAAOA,GA6GpB,OA1GAjvK,OAAOuJ,eAAe2sS,EAAwBp5S,UAAW,eAKrDsM,IAAK,WACD,OAAO1H,KAAK20S,qBAEhBttS,IAAK,SAAUtK,GACXiD,KAAK20S,oBAAsB53S,GAE/B4K,YAAY,EACZC,cAAc,IAOlB4sS,EAAwBp5S,UAAUgJ,IAAM,SAAU2mD,GAE9C/qD,KAAK60S,MAAM9pP,IAOfypP,EAAwBp5S,UAAUy5S,MAAQ,SAAU9pP,GAChD,QAAsC,IAA3BA,EAAW9sD,YAoDlB,OAFA8sD,EAAW+pP,QAAQ90S,KAAKutK,MACxBvtK,KAAK20S,oBAAoBvwS,IAAI,IAAImhQ,GAAmBx6M,IAC7C/qD,KAAK40S,MAAMpwS,KAAKumD,GAnDvB,IACIgqP,GADS,IAAI/kC,IACS1iN,OAAOvC,EAAW/7B,KAAM+7B,EAAW97B,KAAM87B,EAAWg5N,aAAc,IAAI/X,GAAOjhN,EAAWx0B,OAAY,MAAG,IAAI,EAAO,IAAIy1O,GAAM,EAAG,IACrJgpC,EAAejqP,EAAWx0B,OAAOvpB,EACrC,GAAkC,IAA9B+nS,EAAankC,MAAMp0Q,OAAc,CACjC,IAAI6yB,EAAO07B,EAAW97B,KAAK2kP,cAAcmhC,EAAankC,MAAM,GAAG5hP,MAC/D+7B,EAAWx0B,OAAS,IAAI01O,GAAW,IAAIF,GAAOhhN,EAAWx0B,OAAOxpB,EAAGioS,GAAe3lR,GAClF07B,EAAW/7B,KAAO+lR,EAAankC,MAAM,GAAG5hP,KAExChvB,KAAKutK,KAAKw1G,SAASqlB,WAAWr9O,EAAW/7B,KAAM+7B,EAAW97B,KAAM,KAAM87B,EAAW8hN,MAAO9hN,EAAWx0B,OAAOxpB,EAAGg+C,EAAWx0B,OAAOvpB,EAAG+9C,EAAWx0B,OAAOvgB,MAAO+0C,EAAWx0B,OAAOxgB,OAAQ,MAErLg1C,EAAW+pP,QAAQ90S,KAAKutK,MACxBvtK,KAAKi1S,SAASlqP,GACd/qD,KAAK20S,oBAAoBvwS,IAAI,IAAImhQ,GAAmBx6M,IACpD/qD,KAAK40S,MAAMpwS,KAAKumD,QAGhB,IAAK,IAAI7uD,EAAI,EAAGA,EAAI64S,EAAankC,MAAMp0Q,OAAQN,IAAK,CAC5CmzB,EAAO07B,EAAW97B,KAAK2kP,cAAcmhC,EAAankC,MAAM10Q,GAAG8yB,MAC/D,GAAU,IAAN9yB,EACA6uD,EAAWx0B,OAAS,IAAI01O,GAAWlhN,EAAWx0B,OAAOxpB,EAAGioS,EAAc3lR,EAAKrZ,MAAOqZ,EAAKtZ,QACvFg1C,EAAW/7B,KAAO+lR,EAAankC,MAAM10Q,GAAG8yB,KAExChvB,KAAKutK,KAAKw1G,SAASqlB,WAAWr9O,EAAW/7B,KAAM+7B,EAAW97B,KAAM,KAAM87B,EAAW8hN,MAAO9hN,EAAWx0B,OAAOxpB,EAAGioS,EAAc3lR,EAAKrZ,MAAOqZ,EAAKtZ,OAAQ,MAEpJg1C,EAAW+pP,QAAQ90S,KAAKutK,MACxBvtK,KAAKi1S,SAASlqP,GACd/qD,KAAK20S,oBAAoBvwS,IAAI,IAAImhQ,GAAmBx6M,IACpD/qD,KAAK40S,MAAMpwS,KAAKumD,GAEhBiqP,GAAgBjqP,EAAWx0B,OAAOxgB,WAEjC,CACD,IAAImzO,EAAQn+L,EAAW1rD,QACvB6pP,EAAM3yN,OAAS,IAAI01O,GAAW,IAAIF,GAAOhhN,EAAWx0B,OAAOxpB,EAAGioS,GAAe3lR,GAC7E65N,EAAMl6N,KAAO+lR,EAAankC,MAAM10Q,GAAG8yB,KAEnChvB,KAAKutK,KAAKw1G,SAASqlB,WAAWl/C,EAAMl6N,KAAMk6N,EAAMj6N,KAAM,KAAMi6N,EAAM2jB,MAAO3jB,EAAM3yN,OAAOxpB,EAAGm8O,EAAM3yN,OAAOvpB,EAAGk8O,EAAM3yN,OAAOvgB,MAAOkzO,EAAM3yN,OAAOxgB,OAAQ,MAElJmzO,EAAM4rD,QAAQ90S,KAAKutK,MACnBvtK,KAAKi1S,SAAS/rD,GACdlpP,KAAK20S,oBAAoBvwS,IAAI,IAAImhQ,GAAmBrc,IACpDlpP,KAAK40S,MAAMpwS,KAAK0kP,GAEhB8rD,GAAgB9rD,EAAM3yN,OAAOxgB,UAgBjDy+R,EAAwBp5S,UAAU65S,SAAW,SAAUlqP,GACnD,IAAIsgP,EAAK7hC,GAAcoC,IACnBspC,EAAUnqP,EAAW10B,MAAMs1O,QAAQ0/B,GACvCtgP,EAAWwgM,WAAW7rL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBlzN,EAAGs8Q,IAEtE52S,OAAOuJ,eAAe2sS,EAAwBp5S,UAAW,WAMrDsM,IAAK,WACD,OAAO1H,KAAK20S,qBAEhBhtS,YAAY,EACZC,cAAc,IAEX4sS,KCpJP/jN,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GA0CxCqkN,GAAyB,SAAU7jN,GAOnC,SAAS6jN,IACL,IAAIp1S,EAAQuxF,EAAOhwF,KAAKtB,KAAM,IAAIsrP,KAAoBtrP,KAetD,OARAD,EAAMq1S,qBAAuB,KAM7Br1S,EAAM4sP,UAAY,KAClB5sP,EAAMg1G,aACCh1G,EAmMX,OAzNA0wF,GAAU0kN,EAAS7jN,GAwBnBhzF,OAAOuJ,eAAestS,EAAQ/5S,UAAW,YAMrCsM,IAAK,WACD,OAAqB,OAAjB1H,KAAKgrS,SAA4C,OAAxBhrS,KAAKgrS,QAAQ1qS,OAC/BN,KAAKgrS,QAAQ1qS,OAAOE,SAGpB,MAGfmH,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAestS,EAAQ/5S,UAAW,YAwBrCsM,IAAK,WACD,IAAI3I,EAASiB,KAAKq1S,aAAatyB,SAE/B,OADAhkR,EAAO4/O,YAAc3+O,KACdjB,GAEX4I,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAestS,EAAQ/5S,UAAW,cAKrCsM,IAAK,WACD,GAAqB,OAAjB1H,KAAKgrS,QACL,MAAM,IAAIpqS,MAAM,8CAEpB,OAA+B,OAAxBZ,KAAKgrS,QAAQ1qS,OAAkBN,KAAKgrS,QAAQn2R,eAAemvO,WAAahkP,KAAKgrS,QAAQ1qS,OAAOE,SAASwjP,YAEhHr8O,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAestS,EAAQ/5S,UAAW,QAKrCsM,IAAK,WACD,OAAO1H,KAAKgrS,QAAQh9O,aAAa3+B,MAErC1nB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAestS,EAAQ/5S,UAAW,UAKrCsM,IAAK,WACD,OAAO1H,KAAKgrS,QAAQh9O,aAAaujP,QAErC5pS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAestS,EAAQ/5S,UAAW,eAKrCsM,IAAK,WAQD,OAPiC,MAA7B1H,KAAKo1S,uBACLp1S,KAAKo1S,qBAAuB,IAAIZ,GAAwBx0S,MAExDA,KAAKurP,WAAW7rL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB1C,OAAQppP,KAAKo1S,qBAAqBp0S,SAE3FhB,KAAKo1S,qBAAqB5rP,YAAcxpD,KAAKurP,WAAW7rL,MAAM9iE,SAASoD,KAAK8rP,qBAAqB1C,SAE9FppP,KAAKo1S,sBAEhBztS,YAAY,EACZC,cAAc,IAOlButS,EAAQ/5S,UAAU25G,WAAa,WAC3B/0G,KAAKurP,WAAW7rL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBplP,KAAM,IAAI48O,GAAQ,SAC3EtjP,KAAKurP,WAAW0B,sBAAwB,IAAIc,GAAyB/tP,OAMzEm1S,EAAQ/5S,UAAUk6S,WAAa,SAAUtK,GACrChrS,KAAKgrS,QAAUA,EACfhrS,KAAKurP,WAAW7rL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBxrP,OAAQ,IAAIilQ,GAAmBylC,KAM5FmK,EAAQ/5S,UAAUm6S,cAAgB,WAC9Bv1S,KAAKw1S,cAAe,GAyBxBL,EAAQ/5S,UAAUq6S,cAAgB,WAC9B,IAAI5yP,EAAc7iD,KAAKgrS,QAAQwG,gBAAgBxxS,MAAM,GACrD,OAAO,IAAIgsQ,GAAMnpN,EAAY7sC,MAAO6sC,EAAY9sC,SAMpDo/R,EAAQ/5S,UAAU8xP,cAAgB,WAC9B,IAAIwoD,EAAM11S,KAAKQ,cACItF,WAARw6S,GAA4B,MAAPA,GAC5B11S,KAAK21S,kBAAkBD,GAEL,MAAlB11S,KAAK2sP,gBAA+C,IAAnB3sP,KAAK2sP,WACtC3sP,KAAK2sP,UAAU3sP,OAOvBm1S,EAAQ/5S,UAAUu6S,kBAAoB,SAAUn1S,GAG5C,GADuBR,KAAKgrS,QAAQ4K,kBAAkBp1S,EAAUR,MAAM,GAChD,CAClB,IAAI61S,EAAY,IAAIrF,GAAaxwS,MAAM,GAGvC,GAFAA,KAAKmuD,OAAOotD,OAAO,EAAGs6L,GACtB71S,KAAKgrS,QAAQ8K,cAAc91S,KAAM61S,EAAWr1S,GAAU,GAC3B,OAAvBq1S,EAAU9yB,eAAmD,IAAvB8yB,EAAU9yB,SAChD,IAAK,IAAI7mR,EAAI,EAAGA,EAAI25S,EAAU9yB,SAASH,gBAAgBA,gBAAgBpmR,OAAQN,IAAK,CAChF,IAAIymR,EAAYkzB,EAAU9yB,SAASH,gBAAgBA,gBAAgB1mR,GACnEymR,EAAU5gN,MAAMyoO,YAAYqL,EAAU9yB,SAAUJ,EAAU/nP,SAAU+nP,EAAUiB,SAAUjB,EAAUkB,WAM9G,GADwB7jR,KAAKgrS,QAAQ4K,kBAAkBp1S,EAAUR,MAAM,GAChD,CACnB,IAAI+1S,EAAa,IAAIvF,GAAaxwS,MAAM,GACxCA,KAAKmuD,OAAO/pD,IAAI2xS,GAChB/1S,KAAKgrS,QAAQ8K,cAAc91S,KAAM+1S,EAAYv1S,GAAU,KAGxD20S,GACTvD,ICjQEoE,GAAoC,WACpC,SAASA,EAAmBzoI,GAEpBvtK,KAAK4wS,aADW,IAATrjI,EACQA,EAGA,KAcvB,OAXAjvK,OAAOuJ,eAAemuS,EAAmB56S,UAAW,QAKhDsM,IAAK,WACD,OAAO1H,KAAK4wS,SAEhBjpS,YAAY,EACZC,cAAc,IAEXouS,KCpBPC,GAA0C,WAM1C,SAASA,EAAyBjL,GAO9B,GADAhrS,KAAKq0S,WAAa,KACH,MAAXrJ,EACA,MAAMpqS,MAAM,oCAEhBZ,KAAKgrS,QAAUA,EAuCnB,OArCA1sS,OAAOuJ,eAAeouS,EAAyB76S,UAAW,WAMtDsM,IAAK,WACD,OAAO1H,KAAKq0S,YAEhBhtS,IAAK,SAAUtK,GACXiD,KAAKq0S,WAAat3S,GAEtB4K,YAAY,EACZC,cAAc,IAOlBquS,EAAyB76S,UAAU+I,SAAW,SAAUopK,GACpD,OAAOvtK,KAAKgrS,QAAQ7mS,SAASopK,IAMjC0oI,EAAyB76S,UAAUmJ,OAAS,SAAUgpK,GAClDvtK,KAAKgrS,QAAQzmS,OAAOgpK,IAMxB0oI,EAAyB76S,UAAUgJ,IAAM,WACrC,OAAOpE,KAAKgrS,QAAQ5mS,OAEjB6xS,KCrDPC,GAAqC,WAMrC,SAASA,KA2RT,OAxRA53S,OAAOuJ,eAAequS,EAAoB96S,UAAW,QAOjDsM,IAAK,WACD,OAAO1H,KAAKm2S,cAEhB9uS,IAAK,SAAUtK,GACXiD,KAAKm2S,aAAen2S,KAAKo2S,aAAar5S,EAAO8+Q,GAAauyB,OAE9DzmS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,OAKjDsM,IAAK,WACD,OAAO1H,KAAKq2S,aAEhBhvS,IAAK,SAAUtK,GACXiD,KAAKq2S,YAAcr2S,KAAKo2S,aAAar5S,EAAO8+Q,GAAaxN,MAE7D1mQ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,SAKjDsM,IAAK,WACD,OAAO1H,KAAKs2S,eAEhBjvS,IAAK,SAAUtK,GACXiD,KAAKs2S,cAAgBt2S,KAAKo2S,aAAar5S,EAAO8+Q,GAAaquB,QAE/DviS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,UAKjDsM,IAAK,WACD,OAAO1H,KAAKu2S,gBAEhBlvS,IAAK,SAAUtK,GACXiD,KAAKu2S,eAAiBv2S,KAAKo2S,aAAar5S,EAAO8+Q,GAAawuB,SAEhE1iS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,YAKjDsM,IAAK,WACD,OAAO1H,KAAKw2S,UAEhBnvS,IAAK,SAAUtK,GACXiD,KAAKw2S,SAAWx2S,KAAKo2S,aAAar5S,EAAO8+Q,GAAauyB,OAE1DzmS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,WAKjDsM,IAAK,WACD,OAAO1H,KAAKy2S,SAEhBpvS,IAAK,SAAUtK,GACXiD,KAAKy2S,QAAUz2S,KAAKo2S,aAAar5S,EAAO8+Q,GAAaxN,MAEzD1mQ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,aAKjDsM,IAAK,WACD,OAAO1H,KAAK02S,WAEhBrvS,IAAK,SAAUtK,GACXiD,KAAK02S,UAAY12S,KAAKo2S,aAAar5S,EAAO8+Q,GAAaquB,QAE3DviS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,cAKjDsM,IAAK,WACD,OAAO1H,KAAK22S,YAEhBtvS,IAAK,SAAUtK,GACXiD,KAAK22S,WAAa32S,KAAKo2S,aAAar5S,EAAO8+Q,GAAawuB,SAE5D1iS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,WAKjDsM,IAAK,WACD,OAAO1H,KAAK42S,SAEhBvvS,IAAK,SAAUtK,GACXiD,KAAK42S,QAAU52S,KAAKo2S,aAAar5S,EAAO8+Q,GAAauyB,OAEzDzmS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,UAKjDsM,IAAK,WACD,OAAO1H,KAAK62S,QAEhBxvS,IAAK,SAAUtK,GACXiD,KAAK62S,OAAS72S,KAAKo2S,aAAar5S,EAAO8+Q,GAAaxN,MAExD1mQ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,YAKjDsM,IAAK,WACD,OAAO1H,KAAK82S,UAEhBzvS,IAAK,SAAUtK,GACXiD,KAAK82S,SAAW92S,KAAKo2S,aAAar5S,EAAO8+Q,GAAaquB,QAE1DviS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequS,EAAoB96S,UAAW,aAKjDsM,IAAK,WACD,OAAO1H,KAAK+2S,WAEhB1vS,IAAK,SAAUtK,GACXiD,KAAK+2S,UAAY/2S,KAAKo2S,aAAar5S,EAAO8+Q,GAAawuB,SAE3D1iS,YAAY,EACZC,cAAc,IAOlBsuS,EAAoB96S,UAAU47S,QAAU,SAAUzpI,GAC9C,GAAY,MAARA,EACA,MAAM,IAAI3sK,MAAM,8BAYpB,OARWZ,KAAKi3S,OAAO1pI,GAEU,MAAjBvtK,KAAKk3S,SAAoBl3S,KAAKk3S,SAAWl3S,KAAKwM,KAG9B,MAAhBxM,KAAKm3S,QAAmBn3S,KAAKm3S,QAAUn3S,KAAKwM,MAShE0pS,EAAoB96S,UAAUg8S,OAAS,SAAU7pI,GAC7C,GAAY,MAARA,EACA,MAAM,IAAI3sK,MAAM,8BAYpB,OARWZ,KAAKi3S,OAAO1pI,GAES,MAAhBvtK,KAAKq3S,QAAmBr3S,KAAKq3S,QAAUr3S,KAAK0M,IAG7B,MAAf1M,KAAKs3S,OAAkBt3S,KAAKs3S,OAASt3S,KAAK0M,KAS9DwpS,EAAoB96S,UAAUm8S,SAAW,SAAUhqI,GAC/C,GAAY,MAARA,EACA,MAAM,IAAI3sK,MAAM,8BAYpB,OARWZ,KAAKi3S,OAAO1pI,GAEW,MAAlBvtK,KAAKw3S,UAAqBx3S,KAAKw3S,UAAYx3S,KAAKyM,MAG/B,MAAjBzM,KAAKy3S,SAAoBz3S,KAAKy3S,SAAWz3S,KAAKyM,OASlEypS,EAAoB96S,UAAUs8S,UAAY,SAAUnqI,GAChD,GAAY,MAARA,EACA,MAAM,IAAI3sK,MAAM,8BAYpB,OARWZ,KAAKi3S,OAAO1pI,GAEY,MAAnBvtK,KAAK23S,WAAsB33S,KAAK23S,WAAa33S,KAAK2M,OAGhC,MAAlB3M,KAAK43S,UAAqB53S,KAAK43S,UAAY53S,KAAK2M,QASpEupS,EAAoB96S,UAAU67S,OAAS,SAAU1pI,GAC7C,IAAIw6E,EAAQx6E,EAAKy9H,QAAQxqS,SAASunP,MASlC,OAPIA,EAAM8vD,oBAAoBx0D,YAAY91E,GAC9Bw6E,EAAM8vD,oBAAoBj7S,SAAS2wK,GAAQ,EAG3Cw6E,EAAMxpP,QAAQgvK,GAAQ,GAEb,GAAO,GAOhC2oI,EAAoB96S,UAAUg7S,aAAe,SAAU75Q,EAAiB71B,GACpE,GAAuB,MAAnB61B,EAAyB,CACzB,QAAqC,IAAzBA,EAAgB71B,MAA0B61B,EAAgB71B,OAASm1Q,GAAaviE,KACxF,MAAM,IAAI14M,MAAM,wFAEpB27B,EAAgB71B,KAAOA,EAE3B,OAAO61B,GAEJ25Q,KCvSPzlN,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAoBxCgnN,GAAoC,SAAUxmN,GAO9C,SAASwmN,IACL,IAAI/3S,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAEjC,OADAD,EAAMyhI,UAAYzhI,EAAM0hI,SAAW1hI,EAAMg4S,WAAah4S,EAAMi4S,YAAcj4S,EAAMk4S,YAAa,EACtFl4S,EAyEX,OAlFA0wF,GAAUqnN,EAAoBxmN,GAW9BhzF,OAAOuJ,eAAeiwS,EAAmB18S,UAAW,6BAMhDsM,IAAK,WACD,OAAO1H,KAAKwhI,WAEhBn6H,IAAK,SAAUtK,GACXiD,KAAKwhI,UAAYzkI,GAErB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeiwS,EAAmB18S,UAAW,4BAKhDsM,IAAK,WACD,OAAO1H,KAAKyhI,UAEhBp6H,IAAK,SAAUtK,GACXiD,KAAKyhI,SAAW1kI,GAEpB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeiwS,EAAmB18S,UAAW,8BAKhDsM,IAAK,WACD,OAAO1H,KAAK+3S,YAEhB1wS,IAAK,SAAUtK,GACXiD,KAAK+3S,WAAah7S,GAEtB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeiwS,EAAmB18S,UAAW,+BAKhDsM,IAAK,WACD,OAAO1H,KAAKg4S,aAEhB3wS,IAAK,SAAUtK,GACXiD,KAAKg4S,YAAcj7S,GAEvB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeiwS,EAAmB18S,UAAW,uBAKhDsM,IAAK,WACD,OAAO1H,KAAKi4S,YAEhB5wS,IAAK,SAAUtK,GACXiD,KAAKi4S,WAAal7S,GAEtB4K,YAAY,EACZC,cAAc,IAEXkwS,GACT5B,ICxFEgC,GAA4B,WAC5B,SAASA,EAAW13S,EAAUwtD,GAO1BhuD,KAAKm4S,UAAY,IAAInC,GAKrBh2S,KAAKo4S,YAKLp4S,KAAK8rP,qBAAuB,IAAIhE,QACJ,IAAjB95L,EACPhuD,KAAKpC,YAAY4C,EAAUA,EAASwtD,eAGpChuD,KAAK40Q,YAAcp0Q,EACnBR,KAAKquM,SAAWrgJ,EAAa3uD,QAC7BW,KAAKq4S,gBAAkBr4S,KAAKquM,SAAShvM,QACrCW,KAAK+0G,cA6bb,OA1bAz2G,OAAOuJ,eAAeqwS,EAAW98S,UAAW,UAMxCsM,IAAK,WACD,OAAO1H,KAAKs4S,mBAEhBjxS,IAAK,SAAUtK,GACXiD,KAAKs4S,kBAAoBv7S,EACzBiD,KAAKgrS,QAAQtrO,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBxrP,OAAQ,IAAIilQ,GAAmBxoQ,KAEzF4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqwS,EAAW98S,UAAW,kBAKxCsM,IAAK,WACD,OAAO1H,KAAK40Q,aAEhBjtQ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqwS,EAAW98S,UAAW,gBAKxCsM,IAAK,WACD,OAAO1H,KAAKquM,UAEhBhnM,IAAK,SAAUtK,GACX,GAAa,MAATA,EAIA,MAAM6D,MAAM,0BAHZZ,KAAKquM,SAAWtxM,GAMxB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqwS,EAAW98S,UAAW,WAKxCsM,IAAK,WACD,OAAO1H,KAAKgrS,SAEhBrjS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqwS,EAAW98S,UAAW,SAKxCsM,IAAK,WACD,OAAO1H,KAAKu4S,gBAAgBr5R,OAEhCvX,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqwS,EAAW98S,UAAW,YAKxCsM,IAAK,WAID,OAHyB,MAArB1H,KAAKw4S,eACLx4S,KAAKw4S,aAAe,IAAIV,IAErB93S,KAAKw4S,cAEhBnxS,IAAK,SAAUtK,GACXiD,KAAKw4S,aAAez7S,GAExB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqwS,EAAW98S,UAAW,YAKxCsM,IAAK,WACD,OAAO1H,KAAKs4S,kBAAkB93S,UAElCmH,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqwS,EAAW98S,UAAW,SAKxCsM,IAAK,WAID,OAH4B,MAAxB1H,KAAKy4S,sBAA2D,IAAzBz4S,KAAKy4S,kBAC5Cz4S,KAAKy4S,gBAAkB,IAAIxC,GAAyBj2S,OAEjDA,KAAKy4S,iBAEhB9wS,YAAY,EACZC,cAAc,IAOlBswS,EAAW98S,UAAU6vS,SAAW,WAC5B,OAAOjrS,KAAKo4S,UAMhBF,EAAW98S,UAAUs9S,iBAAmB,SAAUnrI,EAAM55I,GACpD,IAAI4C,EAASv2B,KAAKwxS,gBAAgBjkI,GAAM,GAGxC,OAFA55I,EAAM5mB,GAAKwpB,EAAOxpB,EAClB4mB,EAAM3mB,EAAIhN,KAAKguD,aAAaj4C,OAAU4d,EAAO,EACtCA,GAOXukR,EAAW98S,UAAUu9S,gBAAkB,SAAUtqG,GAC7CruM,KAAKquM,SAAWA,EAChBruM,KAAKyrD,MAAMnxB,YAAc+zK,EAAS/zK,YAClCt6B,KAAKyrD,MAAM5qC,OAASwtL,EAASxtL,OAC7B7gB,KAAKyrD,MAAMp8B,KAAOg/K,EAASh/K,KAC3BrvB,KAAKyrD,MAAM8lP,OAASljG,EAASkjG,QAMjC2G,EAAW98S,UAAU25G,WAAa,WAC9B/0G,KAAKu4S,gBAAkB,IAAI/pD,GAC3BxuP,KAAKgrS,QAAU,IAAI1/C,GACnBtrP,KAAKyrD,MAAQ,IAAImtP,GAAkB54S,KAAK40Q,aACxC50Q,KAAKgrS,QAAQz9C,iBAAmB,IAAIO,GAAwB9tP,KAAMA,KAAKyrD,OACvEzrD,KAAK64S,UAAY,IAAI7qD,GAAU,GAC/BhuP,KAAKgrS,QAAQtrO,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB5sO,MAAOlf,KAAK64S,WAClE74S,KAAKgrS,QAAQtrO,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBplP,KAAM,IAAI48O,GAAQtjP,KAAK8rP,qBAAqB/D,QAClG/nP,KAAKgrS,QAAQtrO,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB9D,KAAMhoP,KAAKu4S,kBAUrEL,EAAW98S,UAAUw6S,kBAAoB,SAAUp1S,EAAU+sK,EAAMurI,GAC/D,IAAIC,EAAkB/4S,KAAKg5S,qBAAqBx4S,EAAU+sK,GAAM,EAAMurI,GAClEG,EAAoBj5S,KAAKg5S,qBAAqBx4S,EAAU+sK,GAAM,EAAOurI,GAEzE,OADgBC,EAAgBv8S,OAAS,GAAKy8S,EAAkBz8S,OAAS,GAa7E07S,EAAW98S,UAAU49S,qBAAuB,SAAUx4S,EAAU+sK,EAAMxiF,EAAS+tN,GAC3E,IAAII,KAuBJ,OAtBInuN,IACI/qF,KAAKiP,SAASkqS,0BAA8D,MAAlC34S,EAASyO,SAASmoS,OAAO7pI,MAC5D/sK,EAASyO,SAASmoS,OAAO7pI,GAAMurI,aAAcA,GAAiBt4S,EAASyO,SAASmoS,OAAO7pI,GAAMurI,YAAcA,IAC9GI,EAAU10S,KAAKhE,EAASyO,SAASmoS,OAAO7pI,IAG5CvtK,KAAKiP,SAASmqS,6BAAoE,MAArC54S,EAASyO,SAASyoS,UAAUnqI,MAClE/sK,EAASyO,SAASyoS,UAAUnqI,GAAMurI,aAAcA,GAAiBt4S,EAASyO,SAASyoS,UAAUnqI,GAAMurI,YAAcA,IACpHI,EAAU10S,KAAKhE,EAASyO,SAASyoS,UAAUnqI,IAG/CvtK,KAAKiP,SAASoqS,2BAAgE,MAAnC74S,EAASyO,SAAS+nS,QAAQzpI,MAC9D/sK,EAASyO,SAAS+nS,QAAQzpI,GAAMurI,aAAcA,GAAiBt4S,EAASyO,SAAS+nS,QAAQzpI,GAAMurI,YAAcA,IAChHI,EAAU10S,KAAKhE,EAASyO,SAAS+nS,QAAQzpI,IAG7CvtK,KAAKiP,SAASqqS,4BAAkE,MAApC94S,EAASyO,SAASsoS,SAAShqI,MAChE/sK,EAASyO,SAASsoS,SAAShqI,GAAMurI,aAAcA,GAAiBt4S,EAASyO,SAASsoS,SAAShqI,GAAMurI,YAAcA,IAClHI,EAAU10S,KAAKhE,EAASyO,SAASsoS,SAAShqI,KAI/C2rI,GAOXhB,EAAW98S,UAAUgJ,IAAM,SAAUmpK,GACjC,QAAoB,IAATA,EAAsB,CAC7B,IAAIgsI,EAAS,IAAIpE,GAEjB,OADAn1S,KAAKoE,IAAIm1S,GACFA,EAGP,IAAIp6Q,EAAIn/B,KAAKw5S,cAAcjsI,GAC3BvtK,KAAKo4S,SAAS5zS,KAAK+oK,GACnBvtK,KAAKu4S,gBAAgBn0S,IAAI+6B,GACzBouI,EAAK+nI,WAAWt1S,MAChButK,EAAKgoI,gBACLv1S,KAAKy5S,gBAAgBlsI,IAO7B2qI,EAAW98S,UAAUo+S,cAAgB,SAAUjsI,GAI3C,IAAK,IAHDmsI,EAAK,IAAIn0C,GAAmBh4F,GAC5BppK,GAAW,EACXktS,EAAKrxS,KAAKM,OACLwR,EAAQ,EAAGA,EAAQu/R,EAAGrG,QAAQxuS,OAAQsV,IAAS,CACpD,IAAIk5R,EAAUqG,EAAGrG,QAAQl5R,GACzB3N,EAAWA,GAAY6mS,EAAQ7mS,SAASopK,GAE5C,OAAOmsI,GAMXxB,EAAW98S,UAAU+I,SAAW,SAAUopK,GAEtC,OAAQ,GADIvtK,KAAKzB,QAAQgvK,IAO7B2qI,EAAW98S,UAAUmD,QAAU,SAAUgvK,GACrC,IAAK,IAAIz7J,EAAQ,EAAGA,EAAQ9R,KAAKo4S,SAAS57S,OAAQsV,IAC9C,GAAI9R,KAAKo4S,SAAStmS,KAAWy7J,EACzB,OAAOvtK,KAAKo4S,SAAS75S,QAAQgvK,GAGrC,IAAIpuI,EAAI,IAAIomO,GAAmBh4F,GAC/B,OAAOvtK,KAAKu4S,gBAAgBh6S,QAAQ4gC,IAOxC+4Q,EAAW98S,UAAUq+S,gBAAkB,SAAUlsI,GAE7C,IAAIttK,EAAO,IAAI+1S,GAAmBzoI,GAClCvtK,KAAK25S,YAAY15S,GACJD,KAAKM,OACXE,SAASunP,MAAM4xD,YAAY15S,GAClCD,KAAK64S,UAAUxqD,SAAWruP,KAAKkf,OAOnCg5R,EAAW98S,UAAUu+S,YAAc,SAAU15S,KAG7Ci4S,EAAW98S,UAAUo2S,gBAAkB,SAAUtlC,EAAMC,EAAMC,GACzD,GAAIF,aAAgBipC,IAA2B,kBAAThpC,EAAoB,CACtD,IACIytC,EAAa55S,KAAKM,OAAOE,SAE7B,OADSR,KAAKwxS,gBAAgBoI,EAAY1tC,EAAMC,GAIhDD,EAAOA,EACPC,EAAOA,EACPC,EAAOA,EACP,IAAI71O,EAAS,IAAI01O,GAAW,EAAG,EAAG,EAAG,GACrC11O,EAAOxgB,OAAS,EAAS/V,KAAKguD,aAAa3+B,KAAKtZ,OAAS/V,KAAKguD,aAAaovN,gBAAgBrnQ,OAC3FwgB,EAAOvgB,MAAQ,EAAShW,KAAKguD,aAAa3+B,KAAKrZ,MAAQhW,KAAKguD,aAAaovN,gBAAgBpnQ,MACzF,IAAIxJ,EAAOxM,KAAK65S,mBAAmB3tC,EAAMC,EAAMC,GAC3CvwN,EAAQ77C,KAAK85S,mBAAmB5tC,EAAMC,EAAMC,GAC5C3/P,EAAQzM,KAAK+5S,oBAAoB7tC,EAAMC,EAAMC,GAC7Cz/P,EAAS3M,KAAKg6S,sBAAsB9tC,EAAMC,EAAMC,GAKpD,OAJA71O,EAAOxpB,GAAKP,EACZ+pB,EAAOvpB,GAAK6uC,EACZtlB,EAAOvgB,OAAUxJ,EAAOC,EACxB8pB,EAAOxgB,QAAW8lC,EAAQlvC,EACnB4pB,GAOf2hR,EAAW98S,UAAUy+S,mBAAqB,SAAUr5S,EAAU+sK,EAAM0sI,GAChE,GAAgB,MAAZz5S,EACA,MAAM,IAAII,MAAM,kCAEpB,GAAY,MAAR2sK,EACA,MAAM,IAAI3sK,MAAM,8BAEpB,IAAI7D,EAAQ,EAAmBiD,KAAKguD,aAAa2uN,QAAQnwQ,KAAO,EAC5D0tS,EAAgD,MAA/Bl6S,KAAKiP,SAAS+nS,QAAQzpI,GAAiBvtK,KAAKiP,SAAS+nS,QAAQzpI,GAAMv3J,MAAQ,EAC5FmkS,EAAuD,MAAnC35S,EAASyO,SAAS+nS,QAAQzpI,GAAiB/sK,EAASyO,SAAS+nS,QAAQzpI,GAAMv3J,MAAQ,EAE3G,OADAjZ,GAAUiD,KAAKiP,SAAkC,0BAAI5C,KAAKC,IAAI4tS,EAAeC,GAAoBD,GAOrGhC,EAAW98S,UAAU0+S,mBAAqB,SAAUt5S,EAAU+sK,EAAM0sI,GAChE,GAAgB,MAAZz5S,EACA,MAAM,IAAII,MAAM,kCAEpB,GAAY,MAAR2sK,EACA,MAAM,IAAI3sK,MAAM,8BAEpB,IAAI7D,EAAQ,EAAmBiD,KAAKguD,aAAa2uN,QAAQjwQ,IAAM,EAC3D0tS,EAAgD,MAA9Bp6S,KAAKiP,SAASmoS,OAAO7pI,GAAiBvtK,KAAKiP,SAASmoS,OAAO7pI,GAAMx3J,OAAS,EAC5FskS,EAAuD,MAAlC75S,EAASyO,SAASmoS,OAAO7pI,GAAiB/sK,EAASyO,SAASmoS,OAAO7pI,GAAMx3J,OAAS,EAE3G,OADAhZ,GAAUiD,KAAKiP,SAAiC,yBAAI5C,KAAKC,IAAI8tS,EAAgBC,GAAqBD,GAOtGlC,EAAW98S,UAAU2+S,oBAAsB,SAAUv5S,EAAU+sK,EAAM0sI,GACjE,GAAgB,MAAZz5S,EACA,MAAM,IAAII,MAAM,kCAEpB,GAAY,MAAR2sK,EACA,MAAM,IAAI3sK,MAAM,8BAEpB,IAAI7D,EAAQ,EAAmBiD,KAAKguD,aAAa2uN,QAAQlwQ,MAAQ,EAC7DytS,EAAiD,MAAhCl6S,KAAKiP,SAASsoS,SAAShqI,GAAiBvtK,KAAKiP,SAASsoS,SAAShqI,GAAMv3J,MAAQ,EAC9FmkS,EAAwD,MAApC35S,EAASyO,SAASsoS,SAAShqI,GAAiB/sK,EAASyO,SAASsoS,SAAShqI,GAAMv3J,MAAQ,EAE7G,OADAjZ,GAAUiD,KAAKiP,SAAmC,2BAAI5C,KAAKC,IAAI4tS,EAAeC,GAAoBD,GAOtGhC,EAAW98S,UAAU4+S,sBAAwB,SAAUx5S,EAAU+sK,EAAM0sI,GACnE,GAAgB,MAAZz5S,EACA,MAAM,IAAII,MAAM,kCAEpB,GAAY,MAAR2sK,EACA,MAAM,IAAI3sK,MAAM,8BAEpB,IAAI7D,EAAQ,EAAmBiD,KAAKguD,aAAa2uN,QAAQhwQ,OAAS,EAC9DytS,EAAmD,MAAjCp6S,KAAKiP,SAASyoS,UAAUnqI,GAAiBvtK,KAAKiP,SAASyoS,UAAUnqI,GAAMx3J,OAAS,EAClGskS,EAA0D,MAArC75S,EAASyO,SAASyoS,UAAUnqI,GAAiB/sK,EAASyO,SAASyoS,UAAUnqI,GAAMx3J,OAAS,EAEjH,OADAhZ,GAAUiD,KAAKiP,SAAoC,4BAAI5C,KAAKC,IAAI8tS,EAAgBC,GAAqBD,GAOzGlC,EAAW98S,UAAUmJ,OAAS,SAAUgpK,GACpC,GAAY,MAARA,EACA,MAAM3sK,MAAM,iCAEhB,IAAIkR,EAAQ9R,KAAKo4S,SAAS75S,QAAQgvK,GAClCvtK,KAAKu4S,gBAAgB5oD,SAAS79O,GAE9B,IAAK,IADDwoS,KACK52R,EAAI,EAAGA,EAAI5R,EAAO4R,IACvB42R,EAAe91S,KAAKxE,KAAKo4S,SAAS10R,IAEtC,IAASA,EAAI5R,EAAQ,EAAG4R,EAAI1jB,KAAKo4S,SAAS57S,OAAQknB,IAC9C42R,EAAe91S,KAAKxE,KAAKo4S,SAAS10R,IAEtC1jB,KAAKo4S,SAAWkC,GAMpBpC,EAAW98S,UAAUm/S,kBAAoB,SAAU1/R,EAAW2/R,EAAgB/uP,GAC1E,IAAIl1B,EAAS,IAAI01O,GAAWxgN,EAAM8lP,OAAQ9lP,EAAMp8B,MAChDxU,EAAU6kD,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB5D,SAAUsG,GAASgB,cAAcj5N,IACpF,IAAI1V,EAAS,EACbA,EAAS45R,GAAqBC,aAAejvP,EAAM5qC,OACnD,IAAIe,EAAQ,IAAIosO,GAAUntO,GAC1BhG,EAAU6kD,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBjrO,OAAQe,IAO/Ds2R,EAAW98S,UAAUuxP,UAAY,SAAUlhM,EAAOq4L,GAC9C,IAAI4xD,EAAM5xD,EAAOtjP,SACjBR,KAAKu6S,kBAAkBv6S,KAAKgrS,QAAS0K,EAAI1nP,aAAcvC,IAM3DysP,EAAW98S,UAAU06S,cAAgB,SAAUvoI,EAAMn9F,EAAO5vE,EAAUs4S,GAClE,IAAIC,EAAkB/4S,KAAKg5S,qBAAqBx4S,EAAU+sK,GAAM,EAAMurI,GAClEG,EAAoBj5S,KAAKg5S,qBAAqBx4S,EAAU+sK,GAAM,EAAOurI,GAErE94S,KAAK26S,oBAAoBvqO,EAAO5vE,EAAUu4S,GAC1C/4S,KAAK26S,oBAAoBvqO,EAAO5vE,EAAUy4S,IAWlDf,EAAW98S,UAAUu/S,oBAAsB,SAAUvqO,EAAO5vE,EAAU04S,GAClE,GAAiB,MAAbA,GAAqBA,EAAU18S,OAAS,EAExC,IAAK,IADDqF,EAAMq3S,EAAU18S,OACXN,EAAI,EAAGA,EAAI2F,EAAK3F,IAAK,CACXg9S,EAAUh9S,GAChB8nR,KAAK5zM,EAAO5vE,KAI1B03S,KAGPU,GAAmC,WAMnC,SAASA,EAAkBp4S,GACvBR,KAAK88Q,gBAAkBt8Q,EAASwtD,aAAa1zB,YAC7Ct6B,KAAK46S,WAAap6S,EAASwtD,aAAantC,OACxC7gB,KAAKytK,SAAWjtK,EAASwtD,aAAa3+B,KACtCrvB,KAAKg9Q,WAAax8Q,EAASwtD,aAAaujP,OA2D5C,OAzDAjzS,OAAOuJ,eAAe+wS,EAAkBx9S,UAAW,eAM/CsM,IAAK,WACD,OAAO1H,KAAK88Q,iBAEhBz1Q,IAAK,SAAUtK,GACXiD,KAAK88Q,gBAAkB//Q,GAE3B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+wS,EAAkBx9S,UAAW,UAK/CsM,IAAK,WACD,OAAO1H,KAAK46S,YAEhBvzS,IAAK,SAAUtK,GACXiD,KAAK46S,WAAa79S,GAEtB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+wS,EAAkBx9S,UAAW,QAK/CsM,IAAK,WACD,OAAO1H,KAAKytK,UAEhBpmK,IAAK,SAAUtK,GACXiD,KAAKytK,SAAW1wK,GAEpB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+wS,EAAkBx9S,UAAW,UAK/CsM,IAAK,WACD,OAAO1H,KAAKg9Q,YAEhB31Q,IAAK,SAAUtK,GACXiD,KAAKg9Q,WAAajgR,GAEtB4K,YAAY,EACZC,cAAc,IAEXgxS,KCniBP6B,GAAsC,WAMtC,SAASA,EAAqBj6S,GAK1BR,KAAKg3Q,YAKLh3Q,KAAK8rP,qBAAuB,IAAIhE,GAIhC9nP,KAAK40Q,YAAcp0Q,EAASnB,QAC5BW,KAAK+0G,aA+IT,OA7IAz2G,OAAOuJ,eAAe4yS,EAAqBr/S,UAAW,WAKlDsM,IAAK,WACD,OAAO1H,KAAKg3Q,UAEhBrvQ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yS,EAAqBr/S,UAAW,YAKlDsM,IAAK,WACD,OAAO1H,KAAK40Q,aAEhBjtQ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yS,EAAqBr/S,UAAW,SAKlDsM,IAAK,WACD,OAAO1H,KAAKg3Q,SAASx6Q,QAEzBmL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yS,EAAqBr/S,UAAW,WAKlDsM,IAAK,WACD,OAAO1H,KAAK+nP,OAEhBpgP,YAAY,EACZC,cAAc,IAOlB6yS,EAAqBr/S,UAAU25G,WAAa,WACxC/0G,KAAK66S,aAAe,IAAI7sD,GAAU,GAClChuP,KAAKs4S,kBAAoB,IAAI9pD,GAC7BxuP,KAAK+nP,MAAQ,IAAIuD,GACjBtrP,KAAK+nP,MAAM4E,UAAY,IAAIe,GAAkC1tP,MAC7DA,KAAK+nP,MAAMroL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqBplP,KAAM,IAAI48O,GAAQ,UACtEtjP,KAAK+nP,MAAMroL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB9D,KAAMhoP,KAAKs4S,mBAC/Dt4S,KAAK+nP,MAAMroL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB5sO,MAAOlf,KAAK66S,cAChE76S,KAAK+nP,MAAMroL,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB7D,UAAW,IAAIqD,IACnEtrP,KAAK24S,gBAAgB34S,KAAK+nP,MAAO/nP,KAAK40Q,YAAY5mN,eAMtDysP,EAAqBr/S,UAAU0/S,qBAAuB,SAAUhpS,GAC5D,GAAIA,EAAQ,GAAKA,GAAS9R,KAAKkf,MAC3B,MAAM,IAAIte,MAAM,8BAEpB,OAAOZ,KAAKg3Q,SAASllQ,IAMzB2oS,EAAqBr/S,UAAUu9S,gBAAkB,SAAU99R,EAAWmzC,GAOlE,IAAIz3B,EAAS,IAAI01O,GAAW,IAAIF,GAAU/9M,EAAa3+B,MACvDxU,EAAU6kD,MAAMtiE,SAAS4C,KAAK8rP,qBAAqB5D,SAAUsG,GAASgB,cAAcj5N,KAMxFkkR,EAAqBr/S,UAAUgJ,IAAM,SAAU4mS,GAC3C,QAAuB,IAAZA,EAAyB,CAChC,IAAI+P,EAAY,IAAI7C,GAAWl4S,KAAK40Q,aAEpC,OADA50Q,KAAKoE,IAAI22S,GACFA,EAMP,IAAI57Q,EAAIn/B,KAAKg7S,aAAahQ,GAI1B,OAHAhrS,KAAKg3Q,SAASxyQ,KAAKwmS,GACnBA,EAAQ1qS,OAASN,KACjBA,KAAKs4S,kBAAkBl0S,IAAI+6B,GACpBn/B,KAAKg3Q,SAASz4Q,QAAQysS,IAOrCyP,EAAqBr/S,UAAU4/S,aAAe,SAAUhQ,GACpD,IAAI7rQ,EAAI,IAAIomO,GAAmBylC,GAChBhrS,KAAKs4S,kBAAkBn0S,SAASg7B,GAI/C,OAAOA,GAMXs7Q,EAAqBr/S,UAAU6/S,WAAa,WACxC,IAAI/7R,EAAQ,EAEZ,OADAlf,KAAKg3Q,SAAS53Q,QAAQ,SAAUolK,GAAK,OAAQtlJ,GAASslJ,EAAEtlJ,QACjDA,GAOXu7R,EAAqBr/S,UAAUuxP,UAAY,WACvC3sP,KAAK66S,aAAaxsD,SAAWruP,KAAKi7S,cAQtCR,EAAqBC,aAAe,GAC7BD,KCzKPS,GAA2C,WAM3C,SAASA,EAA0B16S,GAK/BR,KAAKm7S,uBAAyB,IAAI54D,GAMlCviP,KAAKo7S,wBAA0BtkC,GAAmBiG,SAClD/8Q,KAAKQ,SAAWA,EAwJpB,OAtJAlC,OAAOuJ,eAAeqzS,EAA0B9/S,UAAW,SAMvDsM,IAAK,WACD,OAAO1H,KAAKi7S,cAEhBtzS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqzS,EAA0B9/S,UAAW,uBAKvDsM,IAAK,WACD,OAAO1H,KAAKm7S,wBAEhBxzS,YAAY,EACZC,cAAc,IAElBszS,EAA0B9/S,UAAUgJ,IAAM,SAAUmpK,GAChD,QAAoB,IAATA,EAAsB,CAC7B,IAAIgsI,EAAS,IAAIpE,GAEjB,OADAn1S,KAAKoE,IAAIm1S,GACFA,EAGP,IAAIvO,EAAUhrS,KAAKq7S,iBACfrQ,EAAQh9O,aAAa1zB,cAAgBt6B,KAAKo7S,2BAC1CpQ,EAAUhrS,KAAKQ,SAASw2Q,SAAS5yQ,OACzB4pD,aAAa1zB,YAAct6B,KAAKQ,SAASwtD,aAAa1zB,aAElE0wQ,EAAQ5mS,IAAImpK,IAOpB2tI,EAA0B9/S,UAAUigT,eAAiB,WACjD,IAAIhK,EAAKrxS,KAAKQ,SAASw2Q,SACG,IAAtBq6B,EAAGrG,QAAQxuS,QACX60S,EAAGjtS,MAGP,OADcitS,EAAGrG,QAAQqG,EAAGrG,QAAQxuS,OAAS,IAOjD0+S,EAA0B9/S,UAAUu+S,YAAc,SAAU15S,KAU5Di7S,EAA0B9/S,UAAU6/S,WAAa,WAG7C,IAAK,IAFD5J,EAAKrxS,KAAKQ,SAASw2Q,SACnB93P,EAAQ,EACHpN,EAAQ,EAAGA,EAAQu/R,EAAGrG,QAAQxuS,OAAQsV,IAC3CoN,GAASmyR,EAAGrG,QAAQl5R,GAAOoN,MAE/B,OAAOA,GAMXg8R,EAA0B9/S,UAAUkgT,eAAiB,SAAUxpS,GAC3D,OAAO9R,KAAKu7S,QAAQzpS,IAMxBopS,EAA0B9/S,UAAUmgT,QAAU,SAAUzpS,GACpD,GAAKA,EAAQ,GAAOA,GAAS9R,KAAKkf,MAC9B,MAAMte,MAAM,mEAOhB,IAAK,IALD2sK,EAAO,KACPiuI,EAAoB,EACpBX,EAAe,EACfrtI,EAAY,EACZhxK,EAASwD,KAAKQ,SAASw2Q,SAAS93P,MAC3BhjB,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAI8uS,EAAUhrS,KAAKQ,SAASw2Q,SAASg0B,QAAQ9uS,GAI7C,GAHA2+S,EAAe7P,EAAQ9rR,MACvBsuJ,EAAY17J,EAAQ0pS,EAEf1pS,GAAS0pS,GAAqBhuI,EAAYqtI,EAAe,CAC1DttI,EAAOy9H,EAAQC,WAAWz9H,GAC1B,MAEJguI,GAAqBX,EAEzB,OAAOttI,GAMX2tI,EAA0B9/S,UAAUmD,QAAU,SAAUgvK,GACpD,IAAIz7J,GAAS,EACb,GAAY,MAARy7J,EACA,MAAM,IAAI3sK,MAAM,+BAIhB,IAAK,IADD66S,EAAW,EACNv/S,EAAI,EAAG2F,EAAM7B,KAAKQ,SAASw2Q,SAAS93P,MAAOhjB,EAAI2F,EAAK3F,IAAK,CAC9D,IAAI8uS,EAAUhrS,KAAKQ,SAASw2Q,SAAS8jC,qBAAqB5+S,GAE1D,IADA4V,EAAQk5R,EAAQzsS,QAAQgvK,KACX,EAAG,CACZz7J,GAAS2pS,EACT,MAGA3pS,GAAS,EAEb2pS,GAAYzQ,EAAQ9rR,MAG5B,OAAOpN,GAMXopS,EAA0B9/S,UAAUmJ,OAAS,SAAUgpK,GACnD,GAAY,MAARA,EACA,MAAM3sK,MAAM,iCAGhB,IACK,IAFDoqS,EAAU,KAEL9uS,EAAI,EAAGoqK,EAAQtmK,KAAKQ,SAASw2Q,SAAS93P,MAAOhjB,EAAIoqK,EAAOpqK,IAE7D,IADA8uS,EAAUhrS,KAAKQ,SAASw2Q,SAAS8jC,qBAAqB5+S,IAC1C6rP,MAAM5jP,SAASopK,GAAO,CAC9By9H,EAAQjjD,MAAMxjP,OAAOgpK,GACrB,MAGR,OAAOy9H,GAEJkQ,KCzKPQ,GAAoC,WAMpC,SAASA,IACL17S,KAAK27S,oBACL37S,KAAK47S,kBAAoB,IAAIr5D,GAqEjC,OA9DAm5D,EAAmBtgT,UAAUsxK,OAAS,SAAU5vK,GAC5C,IAAIiC,EAAS,KACTm6F,EAAQl5F,KAAK67S,SAAS/+S,GAQ1B,OAPa,MAATo8F,EACAA,EAAQl5F,KAAK87S,iBAER5iN,EAAM18F,OAAS,IACpBuC,EAASm6F,EAAM,IAEnBA,EAAM10F,KAAK1H,GACJiC,GAOX28S,EAAmBtgT,UAAU0gT,eAAiB,WAC1C,IAAI5iN,KAEJ,OADAl5F,KAAK27S,iBAAiBn3S,KAAK00F,GACpBA,GAMXwiN,EAAmBtgT,UAAUygT,SAAW,SAAU98S,GAC9C,IAAIm6F,EAAQ,KACZ,GAAe,OAAXn6F,EAEA,IAAK,IADD8C,EAAM7B,KAAK27S,iBAAiBn/S,OACvBN,EAAI,EAAGA,EAAI2F,EAAK3F,IAAK,CAC1B,GAAI8D,KAAK27S,iBAAiBn/S,OAAS,EAAG,CAClC,IAAIu/S,EAAS/7S,KAAK27S,iBAAiBz/S,GACnC,GAAI6/S,EAAOv/S,OAAS,EAAG,CACnB,IAAIw/S,EAAiBD,EAAO,GAC5B,GAAIh9S,EAAOi1Q,SAASgoC,GAAiB,CACjC9iN,EAAQ6iN,EACR,YAIJ/7S,KAAKi8S,YAAYF,GAGzBl6S,EAAM7B,KAAK27S,iBAAiBn/S,OAGpC,OAAO08F,GAKXwiN,EAAmBtgT,UAAU6gT,YAAc,SAAU/iN,GACjD,GAAc,OAAVA,EAAgB,CAChB,IAAIpnF,EAAQ9R,KAAK27S,iBAAiBp9S,QAAQ26F,GAC1Cl5F,KAAK27S,iBAAiBt6S,MAAMyQ,EAAOA,EAAQ,KAGnD4pS,EAAmBtgT,UAAUiX,QAAU,WACnCrS,KAAK47S,uBAAoB1gT,EACzB8E,KAAK27S,sBAAmBzgT,GAErBwgT,KCrFPjrN,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GA6CxCmlL,GAA6B,SAAU3kL,GAEvC,SAAS2kL,EAAYimC,GACjB,IAAIn8S,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAcjC,GARAD,EAAMo8S,cAAgB,GAMtBp8S,EAAM+sQ,aAAe,KACrB/sQ,EAAQuxF,EAAOhwF,KAAKtB,KAAMD,IAAUC,MAClB,IAAdk8S,IAAoC,IAAdA,QAA4C,IAAdA,EAA2B,CAC/E,IAAItxP,EAAU,IAAIoqN,GAClBj1Q,EAAMq2Q,wBAAwBxrN,GAC9B,IAAIo5L,EAAa,IAAIkzB,GACrBlzB,EAAWk4D,UAAYA,EACvBl4D,EAAWxjP,SAAWT,EACtBA,EAAMs2Q,cAAcryB,GACpB,IAAIuyB,EAAU,IAAIQ,GAClBh3Q,EAAMu2Q,WAAWC,GACjB3rN,EAAQxmD,IAAImyQ,GACZA,EAAQriQ,UAAY,EACpBnU,EAAMu4S,kBAAoB,IAAImC,GAAqB16S,GACnDA,EAAMq8S,uBAAyB,IAAIlB,GAA0Bn7S,GAC7Dw2Q,EAAQxuB,MAAQhoP,EAAMu4S,uBAGtBriC,EAAYomC,gBAAkB,IAAIX,GAClC37S,EAAMnC,aAAY,GAEtB,OAAOmC,EA8PX,OAjSA0wF,GAAUwlL,EAAa3kL,GAqCvBhzF,OAAOuJ,eAAeouQ,EAAa,eAM/BvuQ,IAAK,WAID,OAHgC,MAA5B1H,KAAKs8S,sBACLt8S,KAAKs8S,oBAAsB,IAAIC,GAAgBpvC,GAAcqvC,UAAW,IAErEx8S,KAAKs8S,qBAEhB30S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeouQ,EAAY76Q,UAAW,YAKzCsM,IAAK,WACD,OAAO1H,KAAKs4S,mBAEhB3wS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeouQ,EAAY76Q,UAAW,gBAKzCsM,IAAK,WAID,OAHqB,MAAjB1H,KAAKquM,WACLruM,KAAKquM,SAAW,IAAIquE,GAAgB18Q,KAAKm8S,gBAEtCn8S,KAAKquM,UAiChBhnM,IAAK,SAAUtK,GACXiD,KAAKquM,SAAWtxM,GAEpB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeouQ,EAAY76Q,UAAW,SAkBzCsM,IAAK,WACD,OAAO1H,KAAKo8S,wBAEhBz0S,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeouQ,EAAa,SAK/BvuQ,IAAK,WACD,YAA2C,IAAhCuuQ,EAAYomC,iBAAkE,MAA/BpmC,EAAYomC,gBAC3D,IAAIX,GAERzlC,EAAYomC,iBAMvBh1S,IAAK,SAAUtK,GACXiD,KAAKq8S,gBAAkBt/S,GAE3B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeouQ,EAAa,eAK/BvuQ,IAAK,WACD,OAAO1H,KAAKy8S,gBAMhBp1S,IAAK,SAAUtK,GACXiD,KAAKy8S,eAAiB1/S,GAE1B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeouQ,EAAY76Q,UAAW,cAMzCsM,IAAK,WACD,OAAK1H,KAAKiwS,gBAAkBzmC,GAAcoC,KAAU5rQ,KAAKiwS,gBAAkBzmC,GAAckzC,MACjF18S,KAAKiwS,gBAAkBzmC,GAAcmzC,UAClC38S,KAAKiwS,cAGLzmC,GAAcoC,KAG7BvkQ,IAAK,SAAUtK,GACNA,IAAUysQ,GAAcoC,KAAU7uQ,IAAUysQ,GAAckzC,MAC1D3/S,IAAUysQ,GAAcmzC,UACzB38S,KAAKiwS,cAAgBlzS,EAGrBiD,KAAKiwS,cAAgBzmC,GAAcoC,KAG3CjkQ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeouQ,EAAY76Q,UAAW,YAMzCsM,IAAK,WAID,OAHyB,MAArB1H,KAAKw4S,eACLx4S,KAAKw4S,aAAe,IAAItC,IAErBl2S,KAAKw4S,cAEhBnxS,IAAK,SAAUtK,GACXiD,KAAKw4S,aAAez7S,GAExB4K,YAAY,EACZC,cAAc,IAElBquQ,EAAY76Q,UAAUy7Q,QAAU,SAAUlyB,EAAQwnB,EAAMC,GAEpD,GADApsQ,KAAK48S,qBACU,OAAXj4D,EACA,MAAM,IAAI/jP,MAAM,kCAEpBZ,KAAK8sQ,aAAenoB,EACpB,IAAIb,EAAS,IAAI6wB,GAAUhwB,GAE3B,GADAb,EAAOtjP,SAAWR,KACE,kBAATmsQ,QAAsC,IAATC,EACpC,OAAOpsQ,KAAKgkP,WAAWnwJ,KAAKiwJ,GAG5B9jP,KAAKgkP,WAAWnwJ,KAAKiwJ,EAAQqoB,IAOrC8J,EAAY76Q,UAAUwhT,mBAAqB,WACd,IAArB58S,KAAK+nP,MAAM7oO,OACXlf,KAAK+nP,MAAM3jP,OAsBnB6xQ,EAAY76Q,UAAUiX,QAAU,WAC5BrS,KAAKu2Q,aAAUr7Q,EACf8E,KAAK0oP,gBAAaxtP,EAClB8E,KAAKs5Q,sBAAmBp+Q,EACxB8E,KAAKo8S,4BAAyBlhT,EAC9B8E,KAAKg2Q,oBAAiB96Q,EACtB8E,KAAKguD,kBAAe9yD,EACpB8E,KAAKw4S,kBAAet9S,EACpB8E,KAAKiwS,mBAAgB/0S,EACrB8E,KAAKs4S,uBAAoBp9S,EACzB+6Q,EAAYpjE,MAAMxgM,UAClBrS,KAAKgkP,WAAWuzB,WAAWllQ,UAC3B4jQ,EAAYpjE,WAAQ33M,EACpB8E,KAAK8sQ,aAAaz6P,WAOtB4jQ,EAAYqmC,oBAAsB,KAMlCrmC,EAAYwmC,gBAAiB,EACtBxmC,GACTF,ICvUE8mC,GAA+C,WAC/C,SAASA,KAwkBT,OAlkBAA,EAA8BC,WAAa,SAAUttR,EAAYD,EAAWF,GACxE,IAAI+jP,EAAU,KACd,OAAQ5jP,GACJ,KAAK29O,GAAcqvC,UACfppC,EAAUpzQ,KAAK+8S,oBAAoBvtR,EAAYD,EAAWF,GAC1D,MACJ,KAAK89O,GAAc6vC,QACf5pC,EAAUpzQ,KAAKi9S,kBAAkBztR,EAAYD,EAAWF,GACxD,MACJ,KAAK89O,GAAc+vC,WACf9pC,EAAUpzQ,KAAKm9S,gBAAgB3tR,EAAYD,EAAWF,GACtD,MACJ,KAAK89O,GAAcinB,OACfhhB,EAAUpzQ,KAAKo9S,iBAAiB5tR,EAAYD,EAAWF,GACvD,MACJ,KAAK89O,GAAckwC,aACfjqC,EAAUpzQ,KAAKs9S,uBAAuB9tR,EAAYD,EAAWF,GAC7D,MACJ,QACI+jP,EAAUpzQ,KAAK+8S,oBAAoB5vC,GAAcqvC,UAAWjtR,EAAWF,GAM/E,OAHA+jP,EAAQ77O,KAAO/H,EAAWtiB,WAC1BkmQ,EAAQuiB,oBAAsB31R,KAAKu9S,qBACnCnqC,EAAQwiB,sBAAwB51R,KAAKu9S,qBAC9BnqC,GAOXypC,EAA8BE,oBAAsB,SAAUvtR,EAAYD,EAAWF,GACjF,IAAI+jP,EAAU,IAAI6mB,GAiClB,OAhCK1qQ,EAAYs6O,GAAayJ,MAAQ,IAAM/jP,EAAYs6O,GAAa0J,QAAU,GAC3EH,EAAQ5oB,OAASxqP,KAAKw9S,0BACtBpqC,EAAQ3oB,QAAUzqP,KAAKy9S,2BACvBrqC,EAAQmhB,eAAiBv0R,KAAK09S,wBAC9BtqC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAK29S,gBACjDvqC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,UAEpCl7N,EAAYs6O,GAAayJ,MAAQ,GACvCF,EAAQ5oB,OAASxqP,KAAK49S,oBACtBxqC,EAAQ3oB,QAAUzqP,KAAK69S,qBACvBzqC,EAAQmhB,eAAiBv0R,KAAK89S,kBAC9B1qC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAK29S,gBACjDvqC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,UAEpCl7N,EAAYs6O,GAAa0J,QAAU,GACzCH,EAAQ5oB,OAASxqP,KAAK+9S,sBACtB3qC,EAAQ3oB,QAAUzqP,KAAKg+S,uBACvB5qC,EAAQmhB,eAAiBv0R,KAAKi+S,oBAC9B7qC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAKk+S,YACjD9qC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,UAG1C2oB,EAAQ5oB,OAASxqP,KAAKm+S,gBACtB/qC,EAAQ3oB,QAAUzqP,KAAKo+S,iBACvBhrC,EAAQmhB,eAAiBv0R,KAAKq+S,cAC9BjrC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAKk+S,YACjD9qC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,SAEvC2oB,GAMXypC,EAA8BI,kBAAoB,SAAUztR,EAAYD,EAAWF,GAC/E,IAAI+jP,EAAU,IAAI6mB,GAiClB,OAhCK1qQ,EAAYs6O,GAAayJ,MAAQ,IAAM/jP,EAAYs6O,GAAa0J,QAAU,GAC3EH,EAAQ5oB,OAASxqP,KAAKs+S,wBACtBlrC,EAAQ3oB,QAAUzqP,KAAKu+S,yBACvBnrC,EAAQmhB,eAAiBv0R,KAAKw+S,sBAC9BprC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAKy+S,YACjDrrC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,UAEpCl7N,EAAYs6O,GAAayJ,MAAQ,GACvCF,EAAQ5oB,OAASxqP,KAAK0+S,kBACtBtrC,EAAQ3oB,QAAUzqP,KAAK2+S,mBACvBvrC,EAAQmhB,eAAiBv0R,KAAK4+S,gBAC9BxrC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAKy+S,YACjDrrC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,UAEpCl7N,EAAYs6O,GAAa0J,QAAU,GACzCH,EAAQ5oB,OAASxqP,KAAK6+S,oBACtBzrC,EAAQ3oB,QAAUzqP,KAAK8+S,qBACvB1rC,EAAQmhB,eAAiBv0R,KAAK++S,kBAC9B3rC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAKy+S,YACjDrrC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,UAG1C2oB,EAAQ5oB,OAASxqP,KAAKg/S,cACtB5rC,EAAQ3oB,QAAUzqP,KAAKi/S,eACvB7rC,EAAQmhB,eAAiBv0R,KAAKk/S,YAC9B9rC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAKy+S,YACjDrrC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,SAEvC2oB,GAMXypC,EAA8BM,gBAAkB,SAAU3tR,EAAYD,EAAWF,GAC7E,IAAI+jP,EAAU,IAAI6mB,GAiClB,OAhCK1qQ,EAAYs6O,GAAayJ,MAAQ,IAAM/jP,EAAYs6O,GAAa0J,QAAU,GAC3EH,EAAQ5oB,OAASxqP,KAAKm/S,sBACtB/rC,EAAQ3oB,QAAUzqP,KAAKo/S,uBACvBhsC,EAAQmhB,eAAiBv0R,KAAKq/S,oBAC9BjsC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAKs/S,4BACjDlsC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,UAEpCl7N,EAAYs6O,GAAayJ,MAAQ,GACvCF,EAAQ5oB,OAASxqP,KAAKu/S,gBACtBnsC,EAAQ3oB,QAAUzqP,KAAKw/S,iBACvBpsC,EAAQmhB,eAAiBv0R,KAAKy/S,cAC9BrsC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAK0/S,qBACjDtsC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,UAEpCl7N,EAAYs6O,GAAa0J,QAAU,GACzCH,EAAQ5oB,OAASxqP,KAAK2/S,kBACtBvsC,EAAQ3oB,QAAUzqP,KAAK4/S,mBACvBxsC,EAAQmhB,eAAiBv0R,KAAK6/S,gBAC9BzsC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAK8/S,uBACjD1sC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,UAG1C2oB,EAAQ5oB,OAASxqP,KAAK+/S,YACtB3sC,EAAQ3oB,QAAUzqP,KAAKggT,aACvB5sC,EAAQmhB,eAAiBv0R,KAAKigT,UAC9B7sC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAKkgT,iBACjD9sC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,SAEvC2oB,GAMXypC,EAA8BO,iBAAmB,SAAU5tR,EAAYD,EAAWF,GAC9E,IAAI+jP,EAAU,IAAI6mB,GAOlB,OANA7mB,EAAQ5oB,OAASxqP,KAAKmgT,aACtB/sC,EAAQ3oB,QAAUzqP,KAAKogT,cACvBhtC,EAAQmhB,eAAiBv0R,KAAKqgT,WAC9BjtC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAKsgT,aACjDltC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,QACnC2oB,GAMXypC,EAA8BS,uBAAyB,SAAU9tR,EAAYD,EAAWF,GACpF,IAAI+jP,EAAU,IAAI6mB,GAOlB,OANA7mB,EAAQ5oB,OAASxqP,KAAKugT,mBACtBntC,EAAQ3oB,QAAUzqP,KAAKwgT,oBACvBptC,EAAQmhB,eAAiBv0R,KAAKygT,iBAC9BrtC,EAAQ/jP,KAAOA,EACf+jP,EAAQqiB,WAAa,IAAImF,GAAmB56R,KAAK0gT,mBACjDttC,EAAQr9P,OAASq9P,EAAQ5oB,OAAS4oB,EAAQ3oB,QACnC2oB,GAMXypC,EAA8BU,qBAAuB,KAKrDV,EAA8BsB,gBAAkB,IAKhDtB,EAA8BuB,kBAAoB,IAKlDvB,EAA8BwB,cAAgB,YAK9CxB,EAA8Be,oBAAsB,IAKpDf,EAA8BgB,sBAAwB,IAKtDhB,EAA8BiB,kBAAoB,iBAKlDjB,EAA8BkB,sBAAwB,IAKtDlB,EAA8BmB,wBAA0B,IAKxDnB,EAA8BoB,oBAAsB,oBAKpDpB,EAA8BW,0BAA4B,IAK1DX,EAA8BY,4BAA8B,IAK5DZ,EAA8Ba,wBAA0B,wBAKxDb,EAA8BmC,cAAgB,IAK9CnC,EAA8BoC,gBAAkB,IAKhDpC,EAA8BqC,YAAc,UAK5CrC,EAA8B6B,kBAAoB,IAKlD7B,EAA8B8B,oBAAsB,IAKpD9B,EAA8B+B,gBAAkB,eAKhD/B,EAA8BgC,oBAAsB,IAKpDhC,EAA8BiC,sBAAwB,IAKtDjC,EAA8BkC,kBAAoB,kBAKlDlC,EAA8ByB,wBAA0B,IAKxDzB,EAA8B0B,0BAA4B,IAK1D1B,EAA8B2B,sBAAwB,sBAKtD3B,EAA8BkD,YAAc,IAK5ClD,EAA8BmD,cAAgB,IAK9CnD,EAA8BoD,UAAY,cAK1CpD,EAA8B0C,gBAAkB,IAKhD1C,EAA8B2C,kBAAoB,IAKlD3C,EAA8B4C,cAAgB,aAK9C5C,EAA8B8C,kBAAoB,IAKlD9C,EAA8B+C,oBAAsB,IAKpD/C,EAA8BgD,gBAAkB,eAKhDhD,EAA8BsC,sBAAwB,IAKtDtC,EAA8BuC,wBAA0B,IAKxDvC,EAA8BwC,oBAAsB,mBAKpDxC,EAA8BsD,aAAe,KAK7CtD,EAA8BuD,eAAiB,IAK/CvD,EAA8BwD,WAAa,SAK3CxD,EAA8B0D,mBAAqB,IAKnD1D,EAA8B2D,qBAAuB,IAKrD3D,EAA8B4D,iBAAmB,eAKjD5D,EAA8BqB,YAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAM,EAC1E,IAAK,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,KAMTrB,EAA8Bc,gBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAM,EAC1E,IAAK,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,KAMTd,EAA8B4B,YAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAM/E5B,EAA8BqD,iBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,I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AAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,KAMTzC,EAA8ByD,aAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,GAMxCzD,EAA8B6D,mBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,I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AW,iBAAa,GACjC41F,IACIjpF,KAAYo2O,KACbqiF,EAAMplU,UAAW,sBAAkB,GACtC41F,IACIjpF,KAAYw4T,KACbC,EAAMplU,UAAW,oBAAgB,GACpC41F,IACI9pF,EAAS,SACVs5T,EAAMplU,UAAW,qBAAiB,GACrC41F,IACI9pF,GAAS,IACVs5T,EAAMplU,UAAW,qBAAiB,GACrC41F,IACI3oF,KAAey7N,KAChB08F,EAAMplU,UAAW,2BAAuB,GAC3C41F,IACI9pF,GAAS,IACVs5T,EAAMplU,UAAW,4BAAwB,GAC5C41F,IACI9pF,GAAS,IACVs5T,EAAMplU,UAAW,oBAAgB,GACpC41F,IACI3oF,KAAeg6O,KAChBm+E,EAAMplU,UAAW,kBAAc,GAClC41F,IACI9pF,GAAS,IACVs5T,EAAMplU,UAAW,uBAAmB,GACvC41F,IACI9pF,EAAS,OACVs5T,EAAMplU,UAAW,mBAAe,GACnC41F,IACI9pF,EAAS,IACVs5T,EAAMplU,UAAW,gBAAY,GAChC41F,IACI9pF,GAAS,IACVs5T,EAAMplU,UAAW,iCAA6B,GACjD41F,IACIloF,KACD03T,EAAMplU,UAAW,eAAW,GAC/B41F,IACIloF,KACD03T,EAAMplU,UAAW,wBAAoB,GACxC41F,IACIloF,KACD03T,EAAMplU,UAAW,mBAAe,GACnC41F,IACIloF,KACD03T,EAAMplU,UAAW,cAAU,GAC9B41F,IACIloF,KACD03T,EAAMplU,UAAW,YAAQ,GAC5B41F,IACIloF,KACD03T,EAAMplU,UAAW,yBAAqB,GACzC41F,IACIloF,KACD03T,EAAMplU,UAAW,oBAAgB,GACpC41F,IACIloF,KACD03T,EAAMplU,UAAW,kBAAc,GAClC41F,IACIloF,KACD03T,EAAMplU,UAAW,mBAAe,GACnC41F,IACIloF,KACD03T,EAAMplU,UAAW,oBAAgB,GACpC41F,IACIloF,KACD03T,EAAMplU,UAAW,uBAAmB,GACvC41F,IACIloF,KACD03T,EAAMplU,UAAW,2BAAuB,GAC3C41F,IACIloF,KACD03T,EAAMplU,UAAW,4BAAwB,GAC5C41F,IACIloF,KACD03T,EAAMplU,UAAW,qBAAiB,GACrC41F,IACIloF,KACD03T,EAAMplU,UAAW,sBAAkB,GACtC41F,IACIloF,KACD03T,EAAMplU,UAAW,uBAAmB,GACvC41F,IACIloF,KACD03T,EAAMplU,UAAW,kBAAc,GAClC41F,IACIloF,KACD03T,EAAMplU,UAAW,iBAAa,GACjC41F,IACIloF,KACD03T,EAAMplU,UAAW,uBAAmB,GACvC41F,IACIloF,KACD03T,EAAMplU,UAAW,sBAAkB,GACtC41F,IACIloF,KACD03T,EAAMplU,UAAW,oBAAgB,GACpC41F,IACIloF,KACD03T,EAAMplU,UAAW,oBAAgB,GACpC41F,IACIloF,KACD03T,EAAMplU,UAAW,oBAAgB,GACpC41F,IACIloF,KACD03T,EAAMplU,UAAW,mBAAe,GACnC41F,IACIloF,KACD03T,EAAMplU,UAAW,iBAAa,GACjC41F,IACIloF,KACD03T,EAAMplU,UAAW,qBAAiB,GACrC41F,IACI9pF,EAAS,QACVs5T,EAAMplU,UAAW,oBAAgB,GACpColU,EAAQxvO,IACJ5nF,GACDo3T,IAEL5uN,IC5wDEnhB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAkBxCm6O,GAA8B,SAAU35O,GAExC,SAAS25O,IACL,OAAkB,OAAX35O,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,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C41F,IACIloF,KACDonW,EAAkB90W,UAAW,oBAAgB,GAChD41F,IACIloF,KACDonW,EAAkB90W,UAAW,oBAAgB,GAChD41F,IACIloF,KACDonW,EAAkB90W,UAAW,kBAAc,GAC9C41F,IACIloF,KACDonW,EAAkB90W,UAAW,qBAAiB,GACjD41F,IACIloF,KACDonW,EAAkB90W,UAAW,mBAAe,GAC/C41F,IACIloF,KACDonW,EAAkB90W,UAAW,wBAAoB,GACpD41F,IACIloF,KACDonW,EAAkB90W,UAAW,mBAAe,GAC/C41F,IACIloF,KACDonW,EAAkB90W,UAAW,sBAAkB,GAClD41F,IACIloF,KACDonW,EAAkB90W,UAAW,uBAAmB,GACnD41F,IACIloF,KACDonW,EAAkB90W,UAAW,kBAAc,GAC9C41F,IACIloF,KACDonW,EAAkB90W,UAAW,iBAAa,GAC7C41F,IACIloF,KACDonW,EAAkB90W,UAAW,yBAAqB,GACrD41F,IACIloF,KACDonW,EAAkB90W,UAAW,sBAAkB,GAClD41F,IACIloF,KACDonW,EAAkB90W,UAAW,uBAAmB,GACnD41F,IACIloF,KACDonW,EAAkB90W,UAAW,oBAAgB,GAChD41F,IACIloF,KACDonW,EAAkB90W,UAAW,eAAW,GAC3C41F,IACI9pF,EAAS,QACVgpW,EAAkB90W,UAAW,oBAAgB,GAChD80W,EAAoBl/Q,IAChB5nF,GACD8mW,IAELt+P,ICv8BEnhB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,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1M,KAAKspY,iBAAiBl9U,GAAO,IAGrC,IAAI23U,EAsHJ,OArHA/yS,IACI9pF,GAAS,IACVy8X,EAASvoY,UAAW,wBAAoB,GAC3C41F,IACI9pF,GAAS,IACVy8X,EAASvoY,UAAW,oBAAgB,GACvC41F,IACI9pF,GAAS,IACVy8X,EAASvoY,UAAW,2BAAuB,GAC9C41F,IACIjpF,KAAY27X,KACbC,EAASvoY,UAAW,iBAAa,GACpC41F,IACI9pF,KACDy8X,EAASvoY,UAAW,oBAAgB,GACvC41F,IACI9pF,EAAS,KACVy8X,EAASvoY,UAAW,gBAAY,GACnC41F,IACI9pF,GAAS,IACVy8X,EAASvoY,UAAW,yBAAqB,GAC5C41F,IACI9pF,GAAS,IACVy8X,EAASvoY,UAAW,iBAAa,GACpC41F,IACI9pF,KACDy8X,EAASvoY,UAAW,qBAAiB,GACxC41F,IACI9pF,EAAS,SACVy8X,EAASvoY,UAAW,gBAAY,GACnC41F,IACIjpF,KAAYy7X,KACbG,EAASvoY,UAAW,cAAU,GACjC41F,IACI9pF,GAAS,IACVy8X,EAASvoY,UAAW,qBAAiB,GACxC41F,IACI9pF,KACDy8X,EAASvoY,UAAW,oBAAgB,GACvC41F,IACI9pF,KACDy8X,EAASvoY,UAAW,qBAAiB,GACxC41F,IACI9pF,EAAS,SACVy8X,EAASvoY,UAAW,iBAAa,GACpC41F,IACI9pF,GAAS,IACVy8X,EAASvoY,UAAW,oBAAgB,GACvC41F,IACI9pF,GAAS,IACVy8X,EAASvoY,UAAW,iBAAa,GACpC41F,IACIloF,KACD66X,EAASvoY,UAAW,eAAW,GAClC41F,IACIloF,KACD66X,EAASvoY,UAAW,iBAAa,GACpC41F,IACIloF,KACD66X,EAASvoY,UAAW,yBAAqB,GAC5C41F,IACIloF,KACD66X,EAASvoY,UAAW,gBAAY,GACnC41F,IACIloF,KACD66X,EAASvoY,UAAW,iBAAa,GACpC41F,IACIloF,KACD66X,EAASvoY,UAAW,gBAAY,GACnC41F,IACIloF,KACD66X,EAASvoY,UAAW,mBAAe,GACtC41F,IACIloF,KACD6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a,UAAW,kBAAc,GAC1C41F,IACIjpF,KAAY87N,KACbk/L,EAAc3na,UAAW,cAAU,GACtC41F,IACI3oF,OAAiBqgO,KAClBq6L,EAAc3na,UAAW,YAAQ,GACpC41F,IACIjpF,KAAYm8N,KACb6+L,EAAc3na,UAAW,eAAW,GACvC41F,IACI9pF,GAAS,IACV67Z,EAAc3na,UAAW,yBAAqB,GACjD41F,IACI9pF,EAAS,OACV67Z,EAAc3na,UAAW,eAAW,GACvC41F,IACI9pF,EAAS,OACV67Z,EAAc3na,UAAW,eAAW,GACvC41F,IACI9pF,EAAS,aACV67Z,EAAc3na,UAAW,aAAS,GACrC41F,IACI9pF,GAAS,IACV67Z,EAAc3na,UAAW,4BAAwB,GACpD41F,IACI9pF,EAAS,OACV67Z,EAAc3na,UAAW,mBAAe,GAC3C41F,IACI9pF,EAAS,IACV67Z,EAAc3na,UAAW,gBAAY,GACxC41F,IACIloF,KACDi6Z,EAAc3na,UAAW,cAAU,GACtC41F,IACIloF,KACDi6Z,EAAc3na,UAAW,YAAQ,GACpC41F,IACIloF,KACDi6Z,EAAc3na,UAAW,yBAAqB,GACjD41F,IACIloF,KACDi6Z,EAAc3na,UAAW,uBAAmB,GAC/C41F,IACIloF,KACDi6Z,EAAc3na,UAAW,wBAAoB,GAChD41F,IACIloF,KACDi6Z,EAAc3na,UAAW,qBAAiB,GAC7C41F,IACIloF,KACDi6Z,EAAc3na,UAAW,iBAAa,GACzC41F,IACIloF,KACDi6Z,EAAc3na,UAAW,gBAAY,GACxC41F,IACIloF,KACDi6Z,EAAc3na,UAAW,eAAW,GACvC41F,IACIloF,KACDi6Z,EAAc3na,UAAW,sBAAkB,GAC9C41F,IACIloF,KACDi6Z,EAAc3na,UAAW,uBAAmB,GAC/C41F,IACIloF,KACDi6Z,EAAc3na,UAAW,sBAAkB,GAC9C41F,IACIloF,KACDi6Z,EAAc3na,UAAW,oBAAgB,GAC5C41F,IACIloF,KACDi6Z,EAAc3na,UAAW,eAAW,GACvC2na,EAAgB/xU,IACZ5nF,GACD25Z,IAELnxT,ICrsBFuyT,GAAoB1xT,OAAQ2xT,G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KACbrxX,EAAQtzD,UAAW,cAAU,GAChC41F,IACIjpF,KAAY0hc,KACb/6Y,EAAQtzD,UAAW,sBAAkB,GACxC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,kBAAc,GACpC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,iBAAa,GACnC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,iBAAa,GACnC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,gBAAY,GAClC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,aAAS,GAC/B41F,IACIloF,KACD4lD,EAAQtzD,UAAW,qBAAiB,GACvC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,mBAAe,GACrC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,gBAAY,GAClC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,oBAAgB,GACtC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,uBAAmB,GACzC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,kBAAc,GACpC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,wBAAoB,GAC1C41F,IACIloF,KACD4lD,EAAQtzD,UAAW,yBAAqB,GAC3C41F,IACIloF,KACD4lD,EAAQtzD,UAAW,yBAAqB,GAC3C41F,IACIloF,KACD4lD,EAAQtzD,UAAW,sBAAkB,GACxC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,sBAAkB,GACxC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,yBAAqB,GAC3C41F,IACIloF,KACD4lD,EAAQtzD,UAAW,oBAAgB,GACtC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,wBAAoB,GAC1C41F,IACIloF,KACD4lD,EAAQtzD,UAAW,eAAW,GACjC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,kBAAc,GACpC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,kBAAc,GACpC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,iBAAa,GACnC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,uBAAmB,GACzC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,wBAAoB,GAC1C41F,IACI3oF,KAAeorb,KAChB/kY,EAAQtzD,UAAW,cAAU,GAChC41F,IACIloF,KACD4lD,EAAQtzD,UAAW,YAAQ,GACvBszD,GACTkjD,IC/4JE6qW,GAAgC,WAChC,SAASA,EAAensa,GACpBtwC,KAAKswC,QAAUA,EA8kBnB,OAxkBAmsa,EAAerhd,UAAUo2c,cAAgB,SAAUx+b,GAC/C,IAAI0pc,EACA3W,EACAzpa,EAGA+D,EADA9jC,EAAO,OAEPogd,KACA39a,EAAShsB,EAAQgsB,WACjB8oB,EAAS90C,GAAWA,EAAQ80C,OAAS90C,EAAQ80C,OAAS,UAC1DznB,EAAOrtB,GAAWA,EAAQqtB,KAAOrtB,EAAQqtB,KAAO,WAChD,IAAI9J,EAASv2B,KAAK48c,iBAAiB90Z,EAAQ90C,GACvCA,EAAQujB,SACRwva,GAAe,EACfxva,EAAOxpB,EAAIiG,EAAQujB,OAAOxpB,EAAIiG,EAAQujB,OAAOxpB,EAAIwpB,EAAOxpB,EACxDwpB,EAAOvpB,EAAIgG,EAAQujB,OAAOvpB,EAAIgG,EAAQujB,OAAOvpB,EAAIupB,EAAOvpB,EACxDupB,EAAOvgB,MAAQhD,EAAQujB,OAAOvgB,OAASugB,EAAOvgB,MAC9CugB,EAAOxgB,OAAS/C,EAAQujB,OAAOxgB,QAAUwgB,EAAOxgB,QAEpDipB,GACItyB,SAAoBxR,IAAf8jC,EAAOtyB,IAAoBsyB,EAAOtyB,IAAM,GAC7CC,YAA0BzR,IAAlB8jC,EAAOryB,OAAuBqyB,EAAOryB,OAAS,GACtDF,WAAwBvR,IAAjB8jC,EAAOvyB,MAAsBuyB,EAAOvyB,MAAQ,GACnDD,UAAsBtR,IAAhB8jC,EAAOxyB,KAAqBwyB,EAAOxyB,KAAO,IAExCxM,KAAKswC,QAAQ8b,MACV,iBAAXtE,IACAvxB,EAAOxpB,GAAKiyB,EAAOxyB,KACnB+pB,EAAOvpB,GAAKgyB,EAAOtyB,IACnB6pB,EAAOvgB,OAASgpB,EAAOxyB,KAAOwyB,EAAOvyB,MACrC8pB,EAAOxgB,QAAUipB,EAAOtyB,IAAMsyB,EAAOryB,QAEzC,IAAIkjP,EAAW78O,EAAQ68O,UAAY,UACnC,GAAuB,QAAnB78O,EAAQurB,QAER,GAAa,QADbhiC,EAAOyD,KAAK68c,UAAU7pc,EAASujB,EAAQyI,EAAQqB,EAAM0la,EAAcj+Y,EAAQ+nM,IAEvE,OAAOtzP,MAGV,CACDmgd,EAAW1pc,EAAQurB,OACnBvrB,EAAQujB,OAASA,EACjBvjB,EAAQgsB,OAASA,EACjB,IAAI9hB,EAAMof,EAAUt8B,KAAK88c,aAAa9pc,EAASgsB,GAC/C,GAAa,SAATqB,EACA,OAAO/D,EAEX,IAAIwzN,GAAS,IAAIwvE,eAAgBC,kBAAkBriT,GACnDy/b,EAAQn4c,KAAKsrP,GAEjB,GAAa,aAATzvN,GAAgC,OAAT9jC,EACvB,IAOK,IAAI2zB,EAAI,EAAGA,EAAIysb,EAAQngd,OAAQ0zB,IAAK,CACrC,IAAIwkI,EAAO,IAAIu7F,MAAM0sN,EAAQzsb,KAAOxpB,KAAM,6BAC1C,GAA0B,SAAtB8E,GAAQsb,KAAKyQ,KACb37B,OAAO0zF,UAAU0wO,iBAAiBtrK,EAAMm7F,EAAW,IAAM6sN,OAExD,CACD,IAAIK,EAAMn3Z,GAAkB,KAAO2qM,SAAYV,EAAW,IAAM6sN,IAC5D5hb,EAAMskH,IAAIqxG,gBAAgB/7F,GAC9BqoT,EAAIrhb,KAAOZ,EACX,IAAIj6B,EAAIL,SAASiT,YAAY,eAC7B5S,EAAEm8c,eAAe,SAAS,GAAM,EAAMphd,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MAC5Fmhd,EAAIppc,cAAc9S,IAI9B,OAAO,MAEX47c,EAAerhd,UAAUyhd,UAAY,SAAU7pc,EAASujB,EAAQyI,EAAQqB,EAAM0la,EAAcj+Y,EAAQ+nM,GAChG,IACI6sN,EACApgb,EAFAv8B,EAAQC,KAGZgT,EAAQujB,OAASA,EACjBvjB,EAAQ80C,OAASA,EACjB,IAEIm1Z,KACJj9c,KAAKk9c,uBAAuBlqc,EAASujB,GACrC,IAAI+2X,EAASttZ,KAAKm9c,iBACd5mb,OAAQA,EAAQyI,OAAQA,EAAQ8oB,OAAQA,EAAQ9Y,OAAQh8B,EAAc,OACtEi8B,OAAQj8B,EAAc,QACvB+yb,GACH2W,EAAW1pc,EAAQurB,QAAU,MAC7B,IAAI01K,EAAQ33K,EAAUgxX,EAAOn5T,YAC7B,GAAa,SAAT9zD,EACA,OAAO/D,EAEX,GAAItpB,EAAQiyb,aAAc,CAMtB,GALAjyb,EAAQw9P,WAAax9P,EAAQw9P,WAAax9P,EAAQw9P,WAAaxwQ,KAAKswC,QAAQ0d,aAAaj4C,OACzF/C,EAAQoqc,UAAYpqc,EAAQoqc,UAAYpqc,EAAQoqc,UAAYp9c,KAAKswC,QAAQ0d,aAAah4C,MACtFhD,EAAQw9P,WAAax9P,EAAQw9P,WAAax9P,EAAQw9P,WAAa88I,EAAOt3Y,MACtEhD,EAAQoqc,UAAYpqc,EAAQoqc,UAAYpqc,EAAQoqc,UAAY9vD,EAAOv3Y,OACnEipB,EAAShsB,EAAQgsB,WACbhsB,EAAQ8pQ,kBACyB,cAA5B9pQ,EAAQ8pQ,iBAAmC9pQ,EAAQw9P,WAAax9P,EAAQoqc,WAC7C,aAA5Bpqc,EAAQ8pQ,iBAAkC9pQ,EAAQoqc,UAAYpqc,EAAQw9P,YAAY,CAClF,IAAIz1O,EAAO/nB,EAAQoqc,UACnBpqc,EAAQoqc,UAAYpqc,EAAQw9P,WAC5Bx9P,EAAQw9P,WAAaz1O,EAG7B/nB,EAAQgsB,QACJtyB,IAAMywC,MAAMne,EAAOtyB,KAAoB,EAAbsyB,EAAOtyB,IACjCC,OAASwwC,MAAMne,EAAOryB,QAA0B,EAAhBqyB,EAAOryB,OACvCH,KAAO2wC,MAAMne,EAAOxyB,MAAsB,EAAdwyB,EAAOxyB,KACnCC,MAAQ0wC,MAAMne,EAAOvyB,OAAwB,EAAfuyB,EAAOvyB,OAEzC,IAIImqF,EAAQhxC,GAAkB,OAH1BtiD,GAAMtD,KAAKswC,QAAQtvC,QAAQsC,GAAK,cAChChE,IAAO20M,IAGXr9G,EAAMtN,OAAS,WACX2zX,EAASl9c,EAAMs9c,iBAAiBzmX,EAAO5jF,GAAS,GAChDjT,EAAMu9c,YAAYL,EAAQptN,EAAU6sN,EAAUzoQ,SAIlDgpQ,GAAUhpQ,GACVj0M,KAAKs9c,YAAYL,EAAQptN,EAAU6sN,EAAUzoQ,GAEjD,OAAO,MAEXwoQ,EAAerhd,UAAUkid,YAAc,SAAUL,EAAQptN,EAAU6sN,EAAUzoQ,GAGzE,IAAK,IAFD0oQ,KACAngd,EAAYygd,aAAkB7hZ,YAAgC,EAAhB6hZ,EAAOzgd,OAChD4iC,EAAI,EAAGA,EAAI5iC,EAAQ4iC,IAAK,CAO7B,IAAK,IAJDm+a,EAFIN,EAAO79a,GACDniC,QAAQ,iBAAkB,IACrBC,MAAM,KACrBsgd,EAAaC,KAAKF,EAAO,IACzBztN,EAAS,IAAI6F,YAAY6nN,EAAWhhd,QACpCkhd,EAAW,IAAI7rS,WAAWi+E,GACrB5zP,EAAI,EAAGA,EAAIshd,EAAWhhd,OAAQN,IACnCwhd,EAASxhd,GAAKshd,EAAWpqW,WAAWl3G,GAExCygd,EAAQn4c,KAAKsrP,GAwBjB,IAAK,IAtBD7wP,EAAU,SAAUykB,GACpB,IAAIwM,EAAI,IAAI+/N,MAAM0sN,EAAQj5b,KAAOhd,KAAM,6BACvC,GAA0B,SAAtB8E,GAAQsb,KAAKyQ,KACb37B,OAAO0zF,UAAU0wO,iBAAiB9vS,EAAG2/N,EAAW,IAAM6sN,OAErD,CACD,IAAIiB,EAAgB/3Z,GAAkB,KAAO2qM,SAAYV,EAAW,IAAM6sN,IACtEkB,EAAUx+T,IAAIqxG,gBAAgBvgO,GAClCytb,EAAcjib,KAAOkib,EACrB,IAAIC,EAAer9c,SAASiT,YAAY,eACxCoqc,EAAab,eAAe,SAAS,GAAM,EAAMphd,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MACvGuE,WAAW,WACPw9c,EAAchqc,cAAckqc,IAClB,GAATn6b,EAAI,MASRA,EAAI,EAAGA,EAAIi5b,EAAQngd,OAAQknB,IAChCzkB,EAAQykB,IAGhB+4b,EAAerhd,UAAU0id,gBAAkB,SAAU9qc,GAGjD,IAAK,IADD+qc,EACK3/c,EAAK,EAAGsqY,EAFL1oY,KAAKswC,QAAQ8b,MAEShuD,EAAKsqY,EAAQlsY,OAAQ4B,IAAM,CACzD,IAAImC,EAAOmoY,EAAQtqY,GACfmC,EAAK+2B,WACoB,QAAnBtkB,EAAQurB,QAAsBh+B,aAAgB0wD,IAA2B1wD,aAAgB4wD,MACpE,QAAnBn+C,EAAQurB,QAAsBh+B,aAAgB4wD,MAK9C4sZ,EAJCA,EAIYA,EAAWh+Z,UAAUx/C,EAAKgS,QAAQ4oC,aAHlC56C,EAAKgS,QAAQ4oC,cAS1C,IAAK,IAAIt4C,EAAK,EAAG+xc,EADA50c,KAAKswC,QAAQ+b,WACcxpD,EAAK+xc,EAAap4c,OAAQqG,IAAM,CACxE,IAAI+3C,EAAYg6Z,EAAa/xc,GACzB+3C,EAAUtjB,UAKNymb,EAJCA,EAIYA,EAAWh+Z,UAAUnF,EAAUroC,QAAQ4oC,aAHvCP,EAAUroC,QAAQ4oC,aAO3C,OAAO4ia,GAAc,IAAIhob,GAAK,EAAG,EAAG,EAAG,IAE3C0mb,EAAerhd,UAAUwhd,iBAAmB,SAAUv8a,EAAMrtB,GACxD,IAAIkgB,EAAOlzB,KAAK89c,gBAAgB9qc,GAC5BxG,EAAO0mB,EAAK1mB,KACZE,EAAMwmB,EAAKxmB,IACXD,EAAQymB,EAAKzmB,MAAQymB,EAAK1mB,KAC1BG,EAASumB,EAAKvmB,OAASumB,EAAKxmB,IACnB,YAAT2zB,IACIrgC,KAAKswC,QAAQ0d,cAAgBhuD,KAAKswC,QAAQ0d,aAAai3Y,cACvDz4b,EAAO0mB,EAAK1mB,KACZE,EAAMwmB,EAAKxmB,IACP1M,KAAKswC,QAAQ0d,aAAah4C,QAC1BxJ,EAAOH,KAAKmT,MAAMhT,EAAOxM,KAAKswC,QAAQ0d,aAAah4C,OAAShW,KAAKswC,QAAQ0d,aAAah4C,MACtFvJ,EAAQJ,KAAKqmB,KAAKQ,EAAKzmB,MAAQzM,KAAKswC,QAAQ0d,aAAah4C,OAAShW,KAAKswC,QAAQ0d,aAAah4C,MAAQxJ,GAEpGxM,KAAKswC,QAAQ0d,aAAaj4C,SAC1BrJ,EAAML,KAAKmT,MAAM9S,EAAM1M,KAAKswC,QAAQ0d,aAAaj4C,QAAU/V,KAAKswC,QAAQ0d,aAAaj4C,OACrFpJ,EAASN,KAAKqmB,KAAKQ,EAAKvmB,OAAS3M,KAAKswC,QAAQ0d,aAAaj4C,QAAU/V,KAAKswC,QAAQ0d,aAAaj4C,OAASrJ,GAExF,IAAfwmB,EAAKld,OAAoD,OAApChW,KAAKswC,QAAQ0d,aAAah4C,QAChDvJ,EAAQzM,KAAKswC,QAAQ0d,aAAah4C,OAEjB,IAAhBkd,EAAKnd,QAAsD,OAArC/V,KAAKswC,QAAQ0d,aAAaj4C,SACjDpJ,EAAS3M,KAAKswC,QAAQ0d,aAAaj4C,UAInC/V,KAAKswC,QAAQ0d,aAAah4C,QAC1BxJ,EAAO,EACPC,EAAQzM,KAAKswC,QAAQ0d,aAAah4C,OAElChW,KAAKswC,QAAQ0d,aAAaj4C,SAC1BrJ,EAAM,EACNC,EAAS3M,KAAKswC,QAAQ0d,aAAaj4C,UAI/C,IAAI0gD,EAAY,IAAI1gC,GAKpB,OAJA0gC,EAAU1pD,EAAIP,EACdiqD,EAAUzpD,EAAIN,EACd+pD,EAAUzgD,MAAQvJ,EAClBgqD,EAAU1gD,OAASpJ,EACZ8pD,GAEXgmZ,EAAerhd,UAAU8hd,uBAAyB,SAAUlqc,EAASujB,GAGjEvjB,EAAc,OAAI,EAClBA,EAAc,OAAI,EAClBA,EAAQw9P,WAAax9P,EAAQw9P,YAAcxwQ,KAAKswC,QAAQ0d,aAAaj4C,OACrE/C,EAAQoqc,UAAYpqc,EAAQoqc,WAAap9c,KAAKswC,QAAQ0d,aAAah4C,MACnE,IAAID,EAAS/C,EAAQw9P,YAAcj6O,EAAOxgB,OACtCC,EAAQhD,EAAQoqc,WAAa7mb,EAAOvgB,MAChB,YAApBhD,EAAQi1Z,SAA6C,SAApBj1Z,EAAQi1Z,SAA0C,UAApBj1Z,EAAQi1Z,UACvEj1Z,EAAc,OAAIgD,EAAQugB,EAAOvgB,MACjChD,EAAc,OAAI+C,EAASwgB,EAAOxgB,OACV,SAApB/C,EAAQi1Z,QACRj1Z,EAAc,OAAIA,EAAc,OAAI3G,KAAK+T,IAAIpN,EAAc,OAAGA,EAAc,QAEnD,UAApBA,EAAQi1Z,UACbj1Z,EAAc,OAAIA,EAAc,OAAI3G,KAAKC,IAAI0G,EAAc,OAAGA,EAAc,SAEhFujB,EAAOvgB,MAAQA,EACfugB,EAAOxgB,OAASA,GAEpBwgB,EAAOxpB,GAAKiG,EAAc,OAC1BujB,EAAOvpB,GAAKgG,EAAc,QAE9Bypc,EAAerhd,UAAU0hd,aAAe,SAAU9pc,EAASgsB,GACvD,IAAI9hB,EAAMld,KAAKswC,QAAQ9N,UAAUxiC,KAAKswC,QAAQtvC,QAAQsC,GAAK,eAAgB0P,EAAQujB,OAAOvgB,MAAOhD,EAAQujB,OAAOxgB,QAChHvV,SAASuL,KAAKpK,YAAYub,GAC1B,IAAIkiB,EAAIi6B,GAAiB,KAAO/1D,GAAMtD,KAAKswC,QAAQtvC,QAAQsC,GAAK,oBAC5DwkD,EAAS90C,GAAWA,EAAQ80C,OAAS90C,EAAQ80C,OAAS,UACtDvxB,EAASv2B,KAAK48c,iBAAiB90Z,EAAQ90C,GACvCxG,EAAO+pB,EAAOxpB,EACdL,EAAM6pB,EAAOvpB,EACbgJ,EAAQugB,EAAOvgB,MACfD,EAASwgB,EAAOxgB,OACpBmH,EAAIvb,YAAYy9B,GAChB,IAAIgiI,GACA/zJ,UAAa,eAAiB2F,EAAQujB,OAAOxpB,EAAIiyB,EAAOxyB,MAAQ,OAASwG,EAAQujB,OAAOvpB,EAAIgyB,EAAOtyB,KAAO,IAC1GK,EAAK2c,OAAOld,GACZQ,EAAK0c,OAAOhd,GAAMsJ,MAAS0T,OAAO1T,GAAQD,OAAU2T,OAAO3T,IAE/DujD,GAAgBl6B,EAAGgiI,GACnB,IAAI5yI,EAAWhuB,SAAS2uB,eAAenvB,KAAKswC,QAAQtvC,QAAQsC,GAAK,wBAAwB1B,WAAU,GAOnG,GANAw/J,GACIr0J,EAAK,EACLC,EAAK,EAAGgJ,MAAS0T,OAAO1T,EAAQgpB,EAAOxyB,KAAOwyB,EAAOvyB,OAAQsJ,OAAU2T,OAAO3T,EAASipB,EAAOtyB,IAAMsyB,EAAOryB,SAE/G2sD,GAAgB9qC,EAAU4yI,GAC1BlkJ,EAAIvb,YAAY6sB,GACU,QAAtBxuB,KAAKswC,QAAQjQ,KAAgB,CAC7B,IAAI29a,EAAkBzlZ,GAAmBv4D,KAAKswC,QAAQtvC,QAAQsC,IAC9D4Z,EAAIvb,YAAYq8c,EAAgB7ub,eAAenvB,KAAKswC,QAAQkrZ,aAAal4b,IAAI1B,WAAU,IACvF,IAAK,IAAI1F,EAAI,EAAGA,EAAIghB,EAAI5L,WAAW9U,OAAQN,IAAK,CAC5C,IAAI8E,EAAUkc,EAAI5L,WAAWpV,GACV,yBAAf8E,EAAQsC,IACRtC,EAAQwC,aAAa,YAAa,eAAiB+yB,EAAOxpB,EAAIiyB,EAAOxyB,MAAQ,OACvE+pB,EAAOvpB,EAAIgyB,EAAOtyB,KAAO,UAItC,CACD0yB,EAAIi6B,GAAiB,KAAO/1D,GAAMtD,KAAKswC,QAAQtvC,QAAQsC,GAAK,kBAC5D4Z,EAAIvb,YAAYy9B,GAChBA,EAAE57B,aAAa,YAAa,eAAiBwP,EAAQujB,OAAOxpB,EAAIiyB,EAAOxyB,MAAQ,OACzEwG,EAAQujB,OAAOvpB,EAAIgyB,EAAOtyB,KAAO,KAC3B1M,KAAKswC,QAAQ8b,MAAzB,IAEI97B,EAAW,IAAIgpZ,GAAgB,GAAI,MAAM,GACzC9wX,EAAYyQ,GAAaj5D,KAAKswC,QAAQtvC,QAAQsC,IAClDtD,KAAKswC,QAAQwna,sBAAsB56b,EAAKoT,EAAUk4B,GAAW,GAGjE,OADAhoD,SAASuL,KAAKzG,YAAY4X,GACnBA,GAEXu/b,EAAerhd,UAAU+hd,gBAAkB,SAAUnqc,EAAS+yb,GAC1D,IAIIj+Y,EAAS90C,EAAQujB,OACjByI,EAAShsB,EAAQgsB,OACjBqB,EAAOrtB,GAAWA,EAAQ80C,OAAS90C,EAAQ80C,OAAS,UACpDiuQ,EAAa/1T,KAAK48c,iBAAiBv8a,EAAMrtB,GACzCirc,EAAUj+c,KAAKswC,QAAQ0d,aAAaxgC,WAAW6I,MAC/Ci3X,EAASv6T,GAAeI,aAAanzF,KAAKswC,QAAQtvC,QAAQsC,GAAK,WAAY0P,EAAQujB,OAAOvgB,MAAOhD,EAAQujB,OAAOxgB,QAEhHpQ,EAAU2nZ,EAAOh6T,WAAW,MAChC3tF,EAAQovF,WAAWjtC,EAAO/6C,GAAI+6C,EAAO96C,GACrCrH,EAAQkuF,OACRluF,EAAQ4uF,UAAYv0F,KAAKswC,QAAQ0d,aAAaxgC,WAAW6I,MACzDyxB,EAAkB,YAATznB,EAAqB01R,EAAajuQ,EAC3CniD,EAAQ6uF,SAAS1sC,EAAO/6C,EAAG+6C,EAAO96C,EAAG86C,EAAO9xC,MAAO8xC,EAAO/xC,QAC1D,IAAImoc,EAAQl+c,KAAKswC,QAAQ0d,aAAaxgC,WACtC,GAAI0wb,GAASA,EAAM5hd,OAAQ,CACvBy5T,EAAa/1T,KAAK48c,iBAAiBv8a,EAAMrtB,GACzC,IAAIihM,EAAQ,IAAIj+G,MAChBi+G,EAAM30M,IAAM4+c,EAAM5hd,OAClB,IAAI6hd,EAAcpoJ,EAAW//S,MAAQi+L,EAAMj+L,MACvCooc,EAAcroJ,EAAWhgT,OAASk+L,EAAMl+L,OACxChJ,EAAIgpT,EAAWhpT,EACfC,EAAI+oT,EAAW/oT,EACfgJ,EAAQ+/S,EAAW//S,MACnBD,EAASggT,EAAWhgT,OACpBsoc,EAAar+c,KAAKs+c,kBAAkBJ,GACxC,GAAoB,SAAhBA,EAAM92Z,OAAoC,SAAhB82Z,EAAMrtZ,MAAkB,CAClD,IAAI0tZ,EAA6B,SAAhBL,EAAM92Z,MAAmB/6C,KAAK+T,IAAI+9b,EAAaC,GAAe/xc,KAAKC,IAAI6xc,EAAaC,GACrGpoc,EAAQuoc,EAAatqQ,EAAMj+L,MAC3BD,EAASwoc,EAAatqQ,EAAMl+L,OACxBmoc,EAAMrtZ,MAAMtyD,QAAQ,SAAW,EAC/BwO,IAAMgpT,EAAW//S,MAAQA,GAAS,EAE7Bkoc,EAAMrtZ,MAAMtyD,QAAQ,SAAW,IACpCwO,EAAIA,EAAIgpT,EAAW//S,MAAQA,GAE3Bkoc,EAAMrtZ,MAAMtyD,QAAQ,SAAW,EAC/ByO,IAAM+oT,EAAWhgT,OAASA,GAAU,EAE/Bmoc,EAAMrtZ,MAAMtyD,QAAQ,SAAW,IACpCyO,EAAIA,EAAI+oT,EAAWhgT,OAASA,GAEmB,SAA/C/V,KAAKswC,QAAQ0d,aAAaxgC,WAAW6I,OAAmE,gBAA/Cr2B,KAAKswC,QAAQ0d,aAAaxgC,WAAW6I,QAC9F1wB,EAAQ4uF,UAAY,QACpB5uF,EAAQ6uF,SAASuhO,EAAWhpT,EAAIiG,EAAc,OAAG+iT,EAAW/oT,EAAIgG,EAAc,OAAG+iT,EAAW//S,MAAQhD,EAAc,OAAG+iT,EAAWhgT,OAAS/C,EAAc,SAEvJqrc,GACA14c,EAAQmwF,UAAUm+G,EAAOlnM,EAAGC,EAAGuxc,EAAatqQ,EAAMj+L,MAAOuoc,EAAatqQ,EAAMl+L,aAG3Esoc,GACL14c,EAAQmwF,UAAUm+G,EAAOlnM,EAAGC,EAAG+oT,EAAW//S,MAAO+/S,EAAWhgT,aAIhEpQ,EAAQ4uF,UAAwB,gBAAZ0pX,EAA4B,QAAUA,EAC1Dt4c,EAAQ6uF,SAAUuhO,EAAWhpT,EAAIiG,EAAc,OAAKgsB,EAAOxyB,KAAOupT,EAAW/oT,EAAIgG,EAAc,OAAKgsB,EAAOtyB,IAAMqpT,EAAW//S,MAAQhD,EAAc,OAAKgsB,EAAOxyB,KAAOwyB,EAAOvyB,MAAQuG,EAAc,OAAI+iT,EAAWhgT,OAAUipB,EAAOtyB,IAAMsyB,EAAOryB,QAEnP,IAAI6xc,EAAUx+c,KAAKswC,QAAQ0d,aAAaxgC,WAAW6I,MAC/Coob,EAAUz+c,KAAKswC,QAAQ0d,aAAah4C,MACpCyoc,IACA94c,EAAQguF,YAA0B,SAAZ6qX,EAAqB,cAAgBA,EAC3D74c,EAAQ6tF,UAAYirX,EACpB94c,EAAQ+4c,WAAW3oJ,EAAWhpT,EAAIiG,EAAc,OAAG+iT,EAAW/oT,EAAIgG,EAAc,OAAG+iT,EAAW//S,MAAQhD,EAAc,OAAG+iT,EAAWhgT,OAAS/C,EAAc,SAE7JrN,EAAQsuF,UACR,IAAIzrC,EAAYyQ,GAAaj5D,KAAKswC,QAAQtvC,QAAQsC,IAC9CgtB,EAAW,IAAIgpZ,GAAgB,GAAI,MAAM,GAE7C,OADAt5a,KAAKswC,QAAQwna,sBAAsBxqD,EAAQh9X,EAAUk4B,GAAW,GAAO,GAChE8kW,GAEXmvD,EAAerhd,UAAUkjd,kBAAoB,SAAU9tJ,GACnD,IAEI88F,EAFA7hW,GAAQ,EAGZ,GAAI+kQ,EAAgBl0T,OAChB,IAEI,IAAI+2F,GADJi6T,EAASv6T,GAAeI,aAAanzF,KAAKswC,QAAQtvC,QAAQsC,GAAK,cAAe,IAAK,MAClEgwF,WAAW,MAC5BD,EAAIQ,OACJ,IAAIogH,EAAQ,IAAIj+G,MAChBi+G,EAAM30M,IAAMkxT,EAAgBl0T,OAC5B+2F,EAAIyC,UAAUm+G,EAAO,EAAG,EAAG,IAAK,KAChC5gH,EAAIY,UACMq5T,EAAOn5T,YAErB,MAAOtzF,GACH4qD,GAAQ,EAGhB,OAAOA,GAEXgxZ,EAAerhd,UAAUujd,oBAAsB,SAAUt/V,EAAKrsG,GAC1D,IAAIgD,EAAQ,EACRD,EAAS,EACTsZ,EAAO,IAAIM,GAOf,GANA3Z,EAAQqpG,EAAIrpG,MACZD,EAASspG,EAAItpG,QACT/C,EAAQw9P,YAAcx9P,EAAQoqc,aAC9Brnc,EAAS/C,EAAQw9P,WAAax9P,EAAQw9P,WAAaz6P,EACnDC,EAAQhD,EAAQoqc,UAAYpqc,EAAQoqc,UAAYpnc,GAEhDhD,EAAQ8pQ,kBACyB,cAA5B9pQ,EAAQ8pQ,iBAAmC/mQ,EAASC,GAAsC,aAA5BhD,EAAQ8pQ,iBAAkC9mQ,EAAQD,GAAQ,CACzH,IAAIglB,EAAO/kB,EACXA,EAAQD,EACRA,EAASglB,EAKjB,OAFA1L,EAAKtZ,OAASA,EACdsZ,EAAKrZ,MAAQA,EACNqZ,GAEXotb,EAAerhd,UAAUiid,iBAAmB,SAAUh+V,EAAKrsG,EAAS4rc,GAChE,IAGIxB,EACA5sM,EAJAquM,KACA39c,EAAM0kD,GAAkB,UACxB6nH,EAAWztK,KAAK2+c,oBAAoBt/V,EAAKrsG,GAGzCgsB,EAAShsB,EAAQgsB,OACjB8/a,EAAQ9/a,EAAOxyB,KACfuyc,EAAO//a,EAAOtyB,IACdsyc,EAAShgb,EAAOvyB,MAChBwyc,EAAUjgb,EAAOryB,OACjBI,EAAI,EAERqwc,EAAY3vS,EAASz3J,MAAQjJ,EAC7ByjQ,EAAa/iG,EAAS13J,OAFd,EAGR,IAAImpc,EAAS,EACTC,EAAS,EACb,GAAInsc,GAAWA,EAAQiyb,cAAqC,YAAnBjyb,EAAQ80C,OAAuB,CACpE5mD,EAAIwD,MAAMqR,OAAS,OACnB7U,EAAIwD,MAAMsR,MAAQ,OAClB,IAAIopc,EAAY//V,EAAItpG,OAChBspc,EAAWhgW,EAAIrpG,MAEf9Z,EAAI,EACJwnB,EAAI,EACJoX,OAAM,EACNi+Y,EAAY,EACZC,EAAa,EACb3lV,OAAM,EACNi6T,OAAS,EACb,EAAG,CACC,GACIyrB,EAAYtrQ,EAASz3J,MACrBgja,EAAavrQ,EAAS13J,OACjBmpc,EAASzxS,EAASz3J,OAAUqpc,IAC7BtmC,EAAasmC,EAAWH,GAEvBC,EAAS1xS,EAAS13J,QAAWqpc,IAC9BpmC,EAAcomC,EAAYD,IAG9B9rX,GADAi6T,EAASv6T,GAAeI,aAAanzF,KAAKswC,QAAQtvC,QAAQsC,GAAK,iBAAkBmqK,EAASz3J,MAAOy3J,EAAS13J,SAC7Fu9E,WAAW,OACpBwC,UAAUupB,EAAKtyG,EAAImyc,EAASJ,EA9BpC,EA8B+CK,EAASJ,EAAMhmC,EAAYimC,EAASF,EAAO9lC,EAAaimC,EAAUF,EAAM,EAAID,EAAO,EAAIC,EAAMhmC,EAAYimC,EAASF,EAAO9lC,EAAaimC,EAAUF,GACtLG,EAASzxS,EAASz3J,OAAUqpc,IAC7BH,GAAWA,EAASG,GAExBvkb,EAAMwyX,EAAOn5T,YACbd,EAAIY,UACJirX,GAAU9B,EACNwB,EACAC,EAAWr6c,KAAKs2B,GAGhB96B,KAAKs/c,WAAWp+c,EAAK45B,EAAK5+B,EAAI,GAAKwnB,EAAG05b,EAAY,MAAO5sM,EAAa,OAE1Et0Q,UACKgjd,EAASG,GAClB37b,IACAxnB,EAAI6Q,EAAImyc,EAAS,EACZC,EAAS1xS,EAAS13J,QAAWqpc,IAC9BD,GAAWA,EAASC,GAExBD,GAAU3uM,QACL2uM,EAASC,OAGjB,CACD,IAGIG,EACAC,EAFAC,EAAaz/c,KAAK2+c,oBAAoBt/V,EAAKrsG,GAG/Cusc,EAAcE,EAAWzpc,MACzBwpc,EAAeC,EAAW1pc,OACtBs9E,OAAM,EACNi6T,OAAS,EACTxyX,OAAM,GAEVu4D,GADAi6T,EAASv6T,GAAeI,aAAanzF,KAAKswC,QAAQtvC,QAAQsC,GAAK,WAAYi8c,EAAaC,IAC3ElsX,WAAW,OACpBwC,UAAUupB,EAZJ,EAYey/V,EAXf,EAW4BC,EAAM1/V,EAAIrpG,OAASgpc,EAASF,GAAQz/V,EAAItpG,QAAUgpc,EAAOE,GAAU,EAAIH,EAAO,EAAIC,EAAMQ,GAAeP,EAASF,GAAQU,GAAgBT,EAAOE,IACrLnkb,EAAMwyX,EAAOn5T,YACbd,EAAIY,UACJj0F,KAAKs/c,WAAWp+c,EAAK45B,EAAK,GAE9B,OAAI8jb,EACOC,EAGA39c,GAGfu7c,EAAerhd,UAAUkkd,WAAa,SAAUp+c,EAAK45B,EAAK5+B,EAAGkhd,EAAW5sM,GACpE,IAAIpvG,GAASnvJ,MAAS,uBAAwBvN,MAAS,SAAW04c,EAAY,UAAY5sM,GACtFnxJ,EAAMz5D,GAAkB,MAAOw7G,GAC/Bq2C,EAAW7xJ,GAAkB,MAAOw7G,GAExChoG,GAAiBimD,EADjB+hD,GAAS99J,GAAMtD,KAAKswC,QAAQtvC,QAAQsC,GAAK,qBAAuBpH,EAAGwI,MAAS,aAAcpF,IAAOw7B,IAEjG28K,EAAS91M,YAAY09G,GACrBn+G,EAAIS,YAAY81M,IAMpBglQ,EAAerhd,UAAU2F,MAAQ,SAAUiS,GACvC,IAAIjT,EAAQC,KACZgT,EAAQqtB,KAAO,OACfrtB,EAAQgsB,QAAWtyB,IAAK,EAAGC,OAAQ,EAAGF,MAAO,EAAGD,KAAM,GACtD,IAAIsuB,EAAM96B,KAAKwxc,cAAcx+b,GAKzBqsG,EAAMz5D,GAAkB,OAHxBtiD,GAAMtD,KAAKswC,QAAQtvC,QAAQsC,GAAK,cAChChE,IAAOw7B,IAGXukF,EAAI/1B,OAAS,WACT,IAAIpoF,EAAMnB,EAAMs9c,iBAAiBh+V,EAAKrsG,GAElC0sc,EAAY9jd,OAAO8F,KAAK,IACX,MAAbg+c,GACKx+c,aAAek6D,cAChBskZ,EAAUl/c,SAASuB,MAAM,mMAGzB29c,EAAUl/c,SAASuB,MAAM,gEACzB29c,EAAUl/c,SAASuB,MAAM,WAAab,EAAIc,UAAY,aACtD09c,EAAUl/c,SAASyB,WAUnCw6c,EAAerhd,UAAUiX,QAAU,aAQnCoqc,EAAerhd,UAAU2mC,cAAgB,WAIrC,MAAO,kBAEJ06a,KC7lBPhsX,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAkBxC6uX,GAA4B,SAAUruX,GAEtC,SAASquX,IACL,IAAI5/c,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAUhE,OANAD,EAAMu6B,YAAc,WAKpBv6B,EAAMyma,qBAAkBtra,EACjB6E,EAgJX,OA5JA0wF,GAAUkvX,EAAYruX,GAkBtBquX,EAAWvkd,UAAUo5D,QAAU,SAAUh/B,GACrC,IAAI0nP,EAAkC,eAArBl9Q,KAAKs6B,YAA+Bt6B,KAAK4/c,sBAAwB5/c,KAAK6/c,oBAEvF,OADA7/c,KAAK00D,YAAc10D,KAAK8/c,kBAAkBtqb,EAAe0nP,GAClDl9Q,KAAK00D,aAMhBirZ,EAAWvkd,UAAUq5D,QAAU,SAAUC,GACrC,IAAIwoN,EAAkC,eAArBl9Q,KAAKs6B,YAA+Bt6B,KAAK+/c,uBAAyB//c,KAAKggd,qBAGxF,OAFAhgd,KAAKu8C,WAAav8C,KAAKigd,kBAAkBvrZ,EAAawoN,GACtDl9Q,KAAKgma,eACEhma,KAAKu8C,YAMhBoja,EAAWvkd,UAAU0kd,kBAAoB,SAAUtqb,EAAe0nP,GAC9D,IAAIypJ,OAAUzra,EACd,QAAsBA,IAAlB8E,KAAKoa,UAA0Bpa,KAAKoa,SAAS5d,OAAS,EACtD,IAAK,IAAI4B,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACfiC,EAAMi7C,gBAAkBt7C,KAAKq7C,YAAcr7C,KAAKs7C,gBAEhDj7C,EAAMm0D,QAAQh/B,GACd,IAAI2xY,EAAY9ma,EAAMq0D,YAAYr1D,QAElCW,KAAKkgd,iBAAiB7/c,EAAO8ma,GAEH,IAAtB9ma,EAAMg7C,cACN8rX,EAAYjrW,GAAWirW,EAAW9ma,EAAMg7C,mBAG5BngD,IAAZyra,EACAA,EAAUQ,EAGVjqJ,EAAWiqJ,EAAWR,GAQlC,OAJAA,EAAUr1U,EAAOl2F,UAAU2qa,oBAAoBzka,KAAKtB,KAAM2ma,EAASnxY,GACnEx1B,KAAKgna,gBAAgBL,GAErB3ma,KAAKina,aAAaN,GACXA,GAEXg5C,EAAWvkd,UAAU6kd,kBAAoB,SAAUvrZ,EAAa/+C,GAC5D,QAAsBza,IAAlB8E,KAAKoa,UAA0Bpa,KAAKoa,SAAS5d,OAAS,EAAG,CACzD,IAAIuQ,OAAI,EACJC,OAAI,EACRD,EAAI/M,KAAK6L,QAAU6oD,EAAY1+C,MAAQhW,KAAK0yD,MAAM3lD,EAAI/M,KAAKs+D,QAAQ9xD,KACnEQ,EAAIhN,KAAKiM,QAAUyoD,EAAY3+C,OAAS/V,KAAK0yD,MAAM1lD,EAAIhN,KAAKs+D,QAAQ5xD,IACpE,IAAK,IAAItO,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACX+oa,EAAY9ma,EAAMq0D,YAAYr1D,QAC9B8gd,EAAch5C,EACO,aAArBnna,KAAKs6B,YACLttB,GAAK3M,EAAM2+B,OAAOtyB,IAGlBK,GAAK1M,EAAM2+B,OAAOxyB,KAEI,IAAtBnM,EAAMg7C,cACN8ka,EAAcjkZ,GAAWirW,EAAW9ma,EAAMg7C,cAE9C,IAAI9nB,EAAS5d,EAAe5I,EAAGC,EAAG3M,EAAOL,KAAM00D,EAAayrZ,GAC5D7uX,EAAOl2F,UAAU8ra,0BAA0B5la,KAAKtB,KAAMK,EAAOkzB,GAC7DlzB,EAAMo0D,QAAQ0yW,GACW,aAArBnna,KAAKs6B,YACLttB,GAAKmzc,EAAYpqc,OAAS1V,EAAM2+B,OAAOryB,OAGvCI,GAAKozc,EAAYnqc,MAAQ3V,EAAM2+B,OAAOvyB,OAIlD,OAAOioD,GAEXirZ,EAAWvkd,UAAUwkd,sBAAwB,SAAUv/c,EAAOC,GAC1DA,EAAOyV,OAAS1J,KAAKC,IAAIjM,EAAM0V,OAAQzV,EAAOyV,QAC9CzV,EAAO0V,OAAS3V,EAAM2V,OAE1B2pc,EAAWvkd,UAAUykd,oBAAsB,SAAUx/c,EAAOC,GACxDA,EAAO0V,MAAQ3J,KAAKC,IAAIjM,EAAM2V,MAAO1V,EAAO0V,OAC5C1V,EAAOyV,QAAU1V,EAAM0V,QAE3B4pc,EAAWvkd,UAAU2kd,uBAAyB,SAAUhzc,EAAGC,EAAG3M,EAAOC,EAAQ8/c,EAAa15C,GACtF,IAAIplZ,EAAU,EACd,GAAgC,QAA5BjhB,EAAM8vD,kBACN7uC,EAAUtU,EAAI3M,EAAM2+B,OAAOtyB,IAAMg6Z,EAAY3wZ,OAAS,OAErD,GAAgC,WAA5B1V,EAAM8vD,kBAAgC,CAE3C7uC,EADmBhhB,EAAO2L,QAAUm0c,EAAYrqc,QAAU,EAAIzV,EAAOoyD,MAAM1lD,GAClD1M,EAAOg+D,QAAQ3xD,OAAStM,EAAM2+B,OAAOryB,OAAS+5Z,EAAY3wZ,OAAS,OAG5FuL,EAAUhhB,EAAO2L,QAAUm0c,EAAYrqc,OAASzV,EAAOoyD,MAAM1lD,EAAIozc,EAAYrqc,OAAS,EAE1F,OAAShJ,EAAGA,EAAI25Z,EAAY1wZ,MAAQ,EAAGhJ,EAAGsU,IAE9Cq+b,EAAWvkd,UAAU4kd,qBAAuB,SAAUjzc,EAAGC,EAAG3M,EAAOC,EAAQkoa,EAAYrB,GACnF,IAAI9lZ,EAAU,EACd,GAAkC,SAA9BhhB,EAAM6vD,oBACN7uC,EAAUtU,EAAI1M,EAAM2+B,OAAOxyB,KAAO26Z,EAAUnxZ,MAAQ,OAEnD,GAAkC,UAA9B3V,EAAM6vD,oBAAiC,CAE5C7uC,EADkB/gB,EAAOuL,QAAU28Z,EAAWxyZ,OAAS,EAAI1V,EAAOoyD,MAAM3lD,GAChDzM,EAAOg+D,QAAQ7xD,MAAQpM,EAAM2+B,OAAOvyB,MAAQ06Z,EAAUnxZ,MAAQ,OAGtFqL,EAAU/gB,EAAOuL,QAAU28Z,EAAWxyZ,MAAQ1V,EAAOoyD,MAAM3lD,EAAIy7Z,EAAWxyZ,MAAQ,EAEtF,OAASjJ,EAAGsU,EAASrU,EAAGA,EAAIm6Z,EAAUpxZ,OAAS,IAEnD4pc,EAAWvkd,UAAU4ra,gBAAkB,SAAU33Y,GAC7C,QAAsBn0B,IAAlB8E,KAAKoa,UAA0Bpa,KAAKoa,SAAS5d,OAAS,EACtD,IAAK,IAAI4B,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACU,aAArB4B,KAAKs6B,YAC6B,YAA9Bj6B,EAAM6vD,sBACN7vD,EAAMq0D,YAAY1+C,MAAQqZ,EAAKrZ,OAIH,YAA5B3V,EAAM8vD,oBACN9vD,EAAMq0D,YAAY3+C,OAASsZ,EAAKtZ,UAMpD4pc,EAAWvkd,UAAU8kd,iBAAmB,SAAU7/c,EAAOgvB,GACrDA,EAAKtZ,QAAU1V,EAAM2+B,OAAOtyB,IAAMrM,EAAM2+B,OAAOryB,OAC/C0iB,EAAKrZ,OAAS3V,EAAM2+B,OAAOxyB,KAAOnM,EAAM2+B,OAAOvyB,OAE5Ckzc,GACTzrZ,ICzKEmsZ,GAA6B,WAK7B,SAASA,IACLrgd,KAAKsgd,aAiOT,OAzNAD,EAAYjld,UAAUiX,QAAU,aAQhCguc,EAAYjld,UAAU2mC,cAAgB,WAIlC,MAAO,eAQXs+a,EAAYjld,UAAU04c,SAAW,SAAUv3c,EAAM+zC,GAC7C,IAAI+3B,EAGAujG,EAAcrvK,EAAKqvK,iBACvBvjG,EAAa9rE,EAAKA,MAAQqvK,EAAoB,MAAKA,EAAoB,OAClEA,EAAYvjG,WAAaujG,EAAYvjG,WAAWE,UAAOrtE,KAC1CmtE,EAAW7rE,QACzBwD,KAAKugd,gBAAgBhkd,EAAM8rE,EAAY/3B,IAS/C+va,EAAYjld,UAAUm6c,WAAa,SAAUh5c,EAAM+zC,GAC/C,IAEIvxC,EAFAgB,EAAQC,KAGRsO,EAAS/R,EACb,GAHiBA,EAGFqvK,uBAAuBtjG,GAAa,CAC/C,IAAI3H,EAAQryD,EAAOs9J,YAAYomC,aAC/Bz1M,EAAKqvK,YAAYE,aAAanrG,GAAOuxI,KAAK,SAAUrxM,GAEhD9B,EAAS8B,EAAM,OACVyvC,EAAQ68C,cACTptF,EAAMwgd,gBAAgBhkd,EAAMwC,EAAQuxC,GACpCA,EAAQmna,iBACRnna,EAAQ3pB,QAAQ,cAAgB2pB,QAASA,SAKzD+va,EAAYjld,UAAUmld,gBAAkB,SAAUjyc,EAAQ/R,EAAM+zC,GAC5DtwC,KAAKsgd,aACL,IAAIxjd,EACAmtY,EAGAhsX,EACAuic,EAHAC,KACAliZ,KAGJ,QAAarjE,IAATqB,EAAoB,CACpB,IAAK,IAAI4iC,EAAI,EAAGA,EAAI5iC,EAAKC,OAAQ2iC,SAEAjkC,KAD7B4B,EAAMP,EAAK4iC,IACH7wB,EAAOkwD,WAAoD,OAAzB1hE,EAAIwR,EAAOkwD,WACjB,iBAAzB1hE,EAAIwR,EAAOkwD,eACsBtjE,IAApCuld,EAAU3jd,EAAIwR,EAAOkwD,WACrBiiZ,EAAU3jd,EAAIwR,EAAOkwD,WAAWkB,MAAMl7D,KAAK1H,GAG3C2jd,EAAU3jd,EAAIwR,EAAOkwD,YAAekB,OAAQ5iE,IAIhD2jd,EAAYzgd,KAAK0gd,wBAAwB5jd,EAAK2jd,EAAWnyc,EAAQ/R,GAEjE+R,EAAOsrM,OAAS98M,EAAIwR,EAAOhL,MAC3B2mY,GAAcvqU,OAAQ5iE,KAG9B,GAAImtY,EACA1rU,EAAW/5D,KAAKylY,QAGhB,IAAK,IAAI7rY,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmjd,GAAYrid,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAChE,IAAIomK,EAAI3hK,EAAGzE,GACNomK,GAAW,cAANA,GAA2B,OAANA,GAAsB,SAANA,GAC3CjmG,EAAW/5D,KAAKi8c,EAAUj8S,IAItC,IAAK,IAAItoK,EAAI,EAAGA,EAAIqiE,EAAW/hE,OAAQN,IACnC,IAAK,IAAIwnB,EAAI,EAAGA,EAAI66C,EAAWriE,GAAGwjE,MAAMljE,OAAQknB,IAAK,CACjDzF,EAAOsgD,EAAWriE,GAAGwjE,MAAMh8C,GAC3B,IAAInjB,EAAOP,KAAK2gd,kBAAkBryc,EAAQ2P,EAAMqyB,GAChDA,EAAQ8b,MAAM5nD,KAAKjE,GACnBP,KAAKsgd,UAAUric,EAAK3P,EAAOhL,KAAO/C,OAEhBrF,KADlBsld,EAAYC,EAAUlgd,EAAKhE,KAAK+R,EAAOhL,OAEnCtD,KAAKuoY,iBAAiBj6X,EAAQkyc,EAAWjgd,EAAK+C,GAAIm9c,EAAWnwa,IAK7EtwC,KAAKsgd,UAAY,MASrBD,EAAYjld,UAAUsld,wBAA0B,SAAU5jd,EAAK2jd,EAAWnyc,EAAQ/R,GAG9E,IAAK,IADD+D,EADAokE,EAAU5nE,EAAIwR,EAAOkwD,UAEhBtiE,EAAI,EAAGA,EAAIwoE,EAAQloE,OAAQN,IAE5Bukd,EADJngd,EAASokE,EAAQxoE,IAEbukd,EAAUngd,GAAQo/D,MAAMl7D,KAAK1H,GAG7B2jd,EAAUngd,IAAYo/D,OAAQ5iE,IAGtC,OAAO2jd,GAQXJ,EAAYjld,UAAUuld,kBAAoB,SAAUryc,EAAQ2P,EAAMqyB,GAC9D,IAEIswa,GAAct9c,GADTk3D,KACiBj+D,KAAM0hB,GAC5B2uC,EAAYrF,GAAYj5C,EAAOs+C,WAC/BA,GACAA,EAAUg0Z,EAAW3ic,EAAMqyB,GAE/B,IAAIxzC,EAAM,IAAI0lD,GAAKlS,EAAS,QAASswa,GAAW,GAChD,OAAK5gd,KAAKu/D,mBAAmBziE,EAAKwzC,EAAShiC,EAAOhL,GAAIgL,EAAOkwD,UAIlDx+D,KAAKsgd,UAAUric,EAAK3P,EAAOhL,KAH3BxG,GAMfujd,EAAYjld,UAAUmtY,iBAAmB,SAAUj6X,EAAQhO,EAAQvD,EAAO8jd,EAASvwa,GAI/E,IAAK,IAHDjwC,EACAmgd,EACAjgd,EACKmjB,EAAI,EAAGA,EAAIpjB,EAAOo/D,MAAMljE,OAAQknB,IAAK,CAC1CrjB,EAAQC,EAAOo/D,MAAMh8C,GACrBnjB,EAAOP,KAAK2gd,kBAAkBryc,EAAQjO,EAAOiwC,GAC7C,IAAIwwa,GAAW,EACV9gd,KAAKu/D,mBAAmBh/D,EAAM+vC,EAAShiC,EAAOhL,GAAIgL,EAAOkwD,UAK1DsiZ,GAAW,GAJX9gd,KAAKsgd,UAAUjgd,EAAMiO,EAAOhL,KAAO/C,EACnC+vC,EAAQ8b,MAAM5nD,KAAKjE,IAKlBP,KAAK+gd,kBAAkBzwa,EAASvzC,EAAOwD,EAAK+C,KAC7CgtC,EAAQ+b,WAAW7nD,KAAKxE,KAAKghd,uBAAuBjkd,EAAOwD,EAAK+C,GAAIgtC,IAEnEwwa,QAEiB5ld,KADlBsld,EAAYK,EAAQtgd,EAAKhE,KAAK+R,EAAOhL,OAEjCtD,KAAKuoY,iBAAiBj6X,EAAQkyc,EAAWjgd,EAAK+C,GAAIu9c,EAASvwa,KAK3E+va,EAAYjld,UAAU2ld,kBAAoB,SAAUzwa,EAASkC,EAAYC,GACrE,GAAmB,KAAfD,GAAoC,KAAfC,EACrB,IAAK,IAAIv2C,EAAI,EAAGA,EAAIo0C,EAAQ+b,WAAW7vD,OAAQN,IAAK,CAChD,IAAI0+C,EAAYtK,EAAQ+b,WAAWnwD,GACnC,QAAkBhB,IAAd0/C,GAA4BA,EAAU7I,WAAaS,GAAcoI,EAAUw0X,WAAa38X,EACxF,OAAO,EAInB,OAAO,GASX4ta,EAAYjld,UAAUmkE,mBAAqB,SAAUh/D,EAAM+vC,EAAShtC,EAAIk7D,GACpE,IAAI1hE,EAAMkD,KAAKsgd,UAAU//c,EAAKhE,KAAK+G,IACnC,YAAYpI,IAAR4B,GAAqBA,EAAIP,KAAK+G,KAAQ/C,EAAKhE,KAAK+G,IAAOxG,EAAIP,KAAKiiE,KAAcj+D,EAAKhE,KAAKiiE,IAahG6hZ,EAAYjld,UAAU4ld,uBAAyB,SAAUl2E,EAAOm2E,EAAO3wa,GACnE,IAAI4wa,GACA59c,GAAIk3D,KAAYzoB,SAAU+4V,EAAOskC,SAAU6xC,GAG/C,OADU,IAAI5/Z,GAAU/Q,EAAS,aAAc4wa,GAAW,IAGvDb,KCvOAc,IACP7kb,QAAS,oBACT/8B,KAAM,SACNqwJ,MAAO,UACP0+S,KAAM,SACNC,KAAM,SACN5Y,IAAK,QACL/vb,UAAW,cACXw7c,SAAU,aACVloX,MAAO,UACPq+V,QAAS,YACT+D,aAAc,eACdJ,WAAY,aACZwS,YAAa,iBACbzR,aAAc,iBACd/uR,MAAO,WAMPm0S,GAAoC,WACpC,SAASA,EAAmB/gd,EAAQghd,GAChCthd,KAAKuhd,gBAILvhd,KAAKwhd,gBAILxhd,KAAKyhd,eACLzhd,KAAKkoJ,WAAaloJ,KAAK0hd,eACvB1hd,KAAKM,OAASA,EACdN,KAAKomE,eAAiBk7Y,EACtBthd,KAAKvD,mBAmUT,OA7TA4kd,EAAmBjmd,UAAUqB,iBAAmB,WACxCuD,KAAKM,OAAO6sF,aAGhBntF,KAAKM,OAAOwrF,GAAG,eAAgB9rF,KAAKoyG,OAAQpyG,OAMhDqhd,EAAmBjmd,UAAUuB,oBAAsB,WAC3CqD,KAAKM,OAAO6sF,aAGhBntF,KAAKM,OAAO4rF,IAAI,eAAgBlsF,KAAKoyG,SAEzCivW,EAAmBjmd,UAAUg3G,OAAS,WAClCpyG,KAAKi5H,KAAOj5H,KAAKomE,eAAeE,WAAW,gBAC3CtmE,KAAKgB,QAAU4kD,GAAkB,MAAQtiD,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,iBACtEtD,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKgB,SACrC,IAAImG,EAAS,IAAMnH,KAAKM,OAAOU,QAAQsC,GACvCtD,KAAK2hd,YAAc,IAAIxnF,IACnBz6T,MAAO1/D,KAAK4hd,eACZ1uc,UAAWlT,KAAKM,OAAO4S,UACvB++F,kBAAmBjyG,KAAKM,OAAO2xG,kBAC/BjkG,OAAQhO,KAAKM,OAAO0N,OACpB7G,OAAQA,EACR1B,OAAQzF,KAAK6hd,qBAAqBxmd,KAAK2E,MACvC2wC,WAAY3wC,KAAK8hd,sBAAsBzmd,KAAK2E,MAC5Cy/J,OAAQz/J,KAAK+hd,gBAAgB1md,KAAK2E,MAClCgid,QAAShid,KAAKiid,mBAAmB5md,KAAK2E,MACtCiT,SAAU,mBAEdjT,KAAK2hd,YAAY9wa,SAAS7wC,KAAKgB,UAEnCqgd,EAAmBjmd,UAAUwmd,aAAe,WACxC,IAAIM,KACAC,KACAC,KACJ,IAAKpid,KAAKM,OAAOwtD,oBAAoBu0Z,mBAAoB,CACrD,IAAK,IAAIjkd,EAAK,EAAGyE,EAAK7C,KAAKsid,kBAAmBlkd,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAChE,IAAI6f,EAAOpb,EAAGzE,IACqC,IAA/C6f,EAAKuiD,oBAAoBjiE,QAAQ,SACA,aAA7B0f,EAAKuiD,qBACL4hZ,EAAW59c,KAAKxE,KAAKuid,kBAAkBtkc,KAGS,IAA/CA,EAAKuiD,oBAAoBjiE,QAAQ,SACL,UAA7B0f,EAAKuiD,qBACL2hZ,EAAW39c,KAAKxE,KAAKuid,kBAAkBtkc,IAI3Cikc,EAAU19c,KAAKxE,KAAKuid,kBAAkBtkc,IAG9C,GAAImkc,EAAW5ld,OAAS,EAAG,EACnBgmd,EAAaxid,KAAKuid,kBAAkB,aAC7B7iZ,MAAQ0iZ,EACnBF,EAAU19c,KAAKg+c,GAEnB,GAAIL,EAAW3ld,OAAS,EAAG,CACvB,IAAIgmd,GAAAA,EAAaxid,KAAKuid,kBAAkB,UAC7B7iZ,MAAQyiZ,EACnBD,EAAU19c,KAAKg+c,IAGvB,GAAIxid,KAAKM,OAAOwtD,oBAAoB4R,MAChC,IAAK,IAAIz7D,EAAK,EAAGwG,EAAKzK,KAAKM,OAAOwtD,oBAAoB4R,MAAOz7D,EAAKwG,EAAGjO,OAAQyH,IAAM,CAC/E,IAAIw+c,EAAah4c,EAAGxG,GACpBi+c,EAAU19c,KAAKi+c,GAGvB,OAAOP,GAEXb,EAAmBjmd,UAAU2md,gBAAkB,WAC3C/hd,KAAK8qX,QAAS,GAElBu2F,EAAmBjmd,UAAUymd,qBAAuB,SAAU5hd,GAC1DO,SAAS2uB,eAAenvB,KAAKM,OAAOU,QAAQsC,GAAK,WAAWpB,QAC5DlC,KAAKM,OAAOqmB,QvC4nBpB,mBuC5nB8C1mB,GACtC,IAAIge,EAAOje,KAAK0id,aAAazid,EAAKge,KAAK3a,IACvC,IAAKrD,EAAK25B,OACN,OAAQ3b,GACJ,IAAK,MACDje,KAAKM,OAAOq1b,MACZ,MACJ,IAAK,OACD31b,KAAKM,OAAOf,OACZ,MACJ,IAAK,OACDS,KAAKM,OAAOguc,OACZ,MACJ,IAAK,OACDtuc,KAAKM,OAAOiuc,OACZ,MACJ,IAAK,QACDvuc,KAAKM,OAAOsvJ,QACZ,MACJ,IAAK,YACD5vJ,KAAKM,OAAOsF,YACZ,MACJ,IAAK,QACD5F,KAAKM,OAAO44F,QACZ,MACJ,IAAK,UACDl5F,KAAKM,OAAOi3b,UACZ,MACJ,IAAK,oBACDv3b,KAAKM,OAAOg7b,eACZ,MACJ,IAAK,mBACDt7b,KAAKM,OAAOotc,cACZ,MACJ,IAAK,kBACD1tc,KAAKM,OAAO46b,aACZ,MACJ,IAAK,oBACDl7b,KAAKM,OAAO27b,iBAK5BolB,EAAmBjmd,UAAU6md,mBAAqB,SAAUhid,GAEpDA,EAAKy/D,MAAMljE,OAAS,GAAKyD,EAAKy/D,MAAM,GAAS,qBAAay6T,IAC1Dn6X,KAAK2id,oBAGbtB,EAAmBjmd,UAAUwnd,cAAgB,SAAU3kc,GACnD,OAAOje,KAAKi5H,KAAKh/C,YAAYj6E,KAAKkoJ,WAAWjqI,KAEjDojc,EAAmBjmd,UAAUund,iBAAmB,WAC5C3id,KAAK2hd,YAAYjoF,UAAU15X,KAAKyhd,aAAa,GAC7Czhd,KAAK2hd,YAAY7lY,YAAY97E,KAAKwhd,cAAc,GAAO,GACvDxhd,KAAKyhd,eACLzhd,KAAKwhd,gBACLxhd,KAAK8qX,QAAS,GAElBu2F,EAAmBjmd,UAAUynd,YAAc,SAAU5kc,EAAM5hB,GACvD,IAAIgB,EAAM2C,KAAK0id,aAAazkc,EAAK3a,IACrBtD,KAAKuhd,aAAalkd,IACe,IAAzC2C,KAAKsid,kBAAkB/jd,QAAQlB,IAC3B4gB,EAAK9W,QAAU9K,IACd2D,KAAK8id,aAAa7kc,IACnBje,KAAKyhd,YAAYj9c,KAAKyZ,EAAK3a,KAIvC+9c,EAAmBjmd,UAAU0md,sBAAwB,SAAU7hd,GAC3D,IAAI8id,EAAc9id,EAClB8id,EAAYtB,eACZ,IAAK,IAAIrjd,EAAK,EAAGyE,EAAK5C,EAAKy/D,MAAOthE,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACpD,IAAI6f,EAAOpb,EAAGzE,GAEd,GADA4B,KAAK6id,YAAY5kc,EAAMhe,EAAK5D,OACxB4hB,EAAKyhD,MAAMljE,OACX,IAAK,IAAIyH,EAAK,EAAGwG,EAAKwT,EAAKyhD,MAAOz7D,EAAKwG,EAAGjO,OAAQyH,IAAM,CACpD,IAAI++c,EAAUv4c,EAAGxG,GACjBjE,KAAK6id,YAAYG,EAAS/id,EAAK5D,QAM3C,GAFA2D,KAAKuN,UAAYtN,EAAK5D,MACtB2D,KAAKM,OAAOqmB,QvCgjBpB,kBuChjB6Co8b,GACjCA,EAAYrjZ,MAAMljE,SAAWumd,EAAYtB,YAAYjld,OACrDumd,EAAYnpb,QAAS,EACrBmpb,EAAYtB,mBAEX,CACDzhd,KAAKyhd,YAAczhd,KAAKyhd,YAAYjnc,OAAOuoc,EAAYtB,aACvDzhd,KAAK2hd,YAAY7lY,YAAY97E,KAAKwhd,cAAc,GAAO,GACvD,IAAIyB,EAAiBjjd,KACrBC,EAAKy/D,MAAMtgE,QAAQ,SAAU6e,GACrBglc,EAAexB,YAAYljd,QAAQ0f,EAAK3a,KAAO,GAC/C2/c,EAAetB,YAAY/nF,WAAW37W,EAAK3a,KAAK,OAKhE+9c,EAAmBjmd,UAAU0nd,aAAe,SAAU7kc,GAClD,IAAIilc,EAAiBljd,KAAKM,OAAO6rD,cAAcC,MAAM5vD,OACjDwD,KAAKM,OAAO6rD,cAAcE,WAAW7vD,OAErC2K,GAAS,EACb,OAFenH,KAAK0id,aAAazkc,EAAK3a,KAGlC,IAAK,OACD6D,KAASnH,KAAKM,OAAOw1b,cAAe91b,KAAKM,OAAOw1b,YAAYqtB,SAC5D,MACJ,IAAK,OACDh8c,KAASnH,KAAKM,OAAOw1b,cAAe91b,KAAKM,OAAOw1b,YAAYstB,SAC5D,MACJ,IAAK,QACDj8c,IAASnH,KAAKM,OAAO+gb,eAAex0R,cAAckpS,WAClD,MACJ,IAAK,YACD5ub,KAASnH,KAAKM,OAAO8rD,MAAM5vD,OAASwD,KAAKM,OAAO+rD,WAAW7vD,QAC3D,MACJ,IAAK,WACD2K,KAAW+7c,EAAiB,GAAOljd,KAAKM,OAAO6rD,cAAcC,MAAM,IAAMpsD,KAAKM,OAAO6rD,cAAcC,MAAM,GAAGhyC,UACrGpa,KAAKM,OAAO6rD,cAAcC,MAAM,GAAGhyC,SAAS5d,OAAS,GAC5D,MACJ,IAAK,QACD2K,EAAS+7c,EAAiB,EAC1B,MACJ,IAAK,UACD/7c,KAAWnH,KAAKM,OAAO6rD,cAAcC,MAAM,IAAMpsD,KAAKM,OAAO6rD,cAAcC,MAAM,GAAGhyC,UAC7Epa,KAAKM,OAAO6rD,cAAcC,MAAM,GAAGhyC,SAAS5d,OAAS,GAC5D,MACJ,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,oBACL,IAAK,mBACL,IAAK,kBACL,IAAK,oBACD2K,IAAS+7c,EAGjB,OAAO/7c,GAQXk6c,EAAmBjmd,UAAUiX,QAAU,WACnCrS,KAAK2hd,YAAYtvc,UACjB9N,EAAOvE,KAAKgB,SACZhB,KAAKrD,uBAET0kd,EAAmBjmd,UAAU2mC,cAAgB,WACzC,MAAO,eAEXs/a,EAAmBjmd,UAAUiod,WAAa,SAAUplc,GAChD,OAAOje,KAAKM,OAAOU,QAAQsC,GAAK,gBAAkB2a,GAEtDojc,EAAmBjmd,UAAUsnd,aAAe,SAAUp/c,GAClD,OAAOA,EAAGrG,QAAQ+C,KAAKM,OAAOU,QAAQsC,GAAK,gBAAiB,KAEhE+9c,EAAmBjmd,UAAUmnd,kBAAoB,SAAUtkc,GACvD,IAAIqlc,EACJ,OAAQrlc,GACJ,IAAK,OACDqlc,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAU5hd,MAC3D,MACJ,IAAK,MACD+jd,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAUxrB,KAC3D,MACJ,IAAK,QACD2tB,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAUvxT,OAC3D,MACJ,IAAK,OACD0zT,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAU7S,MAC3D,MACJ,IAAK,OACDgV,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAU5S,MAC3D,MACJ,IAAK,WACD+U,GAAan8c,OAAQg6c,GAAU7kb,SAC/B,MACJ,IAAK,QACDgnb,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAUjoX,OAC3D,MACJ,IAAK,UACDoqX,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAU5pB,SAC3D,MACJ,IAAK,QACD+rB,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAUj0S,OAC3D,MACJ,IAAK,oBACDo2S,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAU7lB,cAC3D,MACJ,IAAK,mBACDgoB,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAUzT,aAC3D,MACJ,IAAK,kBACD4V,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAUjmB,YAC3D,MACJ,IAAK,oBACDooB,GAAan8c,OAAQg6c,GAAU7kb,QAASs9C,QAASunY,GAAUllB,cAC3D,MACJ,IAAK,YACDqnB,GAAan8c,OAAQg6c,GAAU7kb,SAOvC,OAJAt8B,KAAKuhd,aAAatjc,IACd+Q,KAAMhvB,KAAK4id,cAAc3kc,GAAO3a,GAAItD,KAAKqjd,WAAWplc,GACpD9W,OAAQm8c,EAASn8c,OAAQyyE,QAAS0pY,EAAS1pY,QAAU,WAAa0pY,EAAS1pY,QAAU,IAElF55E,KAAKuhd,aAAatjc,IAE7Bojc,EAAmBjmd,UAAUknd,gBAAkB,WAC3C,OACI,OACA,MAAO,QAAS,OAAQ,OAAQ,YAAa,WAAY,QAAS,UAAW,QAC7E,oBAAqB,mBAAoB,kBAAmB,sBAGpEjB,EAAmBjmd,UAAUsmd,aAAe,WACxC,OACInid,KAAQ,OACRo2b,IAAO,MACP/lS,MAAS,QACT0+S,KAAQ,OACRC,KAAQ,OACR3oc,UAAa,YACbw7c,SAAY,WACZloX,MAAS,QACTq+V,QAAW,UACXrqR,MAAS,QACTq2S,kBAAqB,eACrBC,iBAAoB,cACpBC,gBAAmB,aACnBC,kBAAqB,iBAGtBrC,K1XzVPsC,GAA8B,WAM9B,SAASA,IAGL3jd,KAAK4jd,qBAuuET,OApuEAtld,OAAOuJ,eAAe87c,EAAavod,UAAW,4BAC1CsM,IAAK,WAED,IAAK,IADD2kD,KACKjuD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAK4jd,mBAAoBxld,EAAKyE,EAAGrG,OAAQ4B,IAGvE,IAAK,IAFDf,EAAMwF,EAAGzE,GACTmmb,EAAQvkb,KAAK4jd,kBAAkBvmd,GAC1B4G,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKinb,GAAQtgb,EAAKwG,EAAGjO,OAAQyH,IAAM,CAC5D,IAAI8mD,EAAatgD,EAAGxG,GAEpBooD,EAAW7nD,KAAK+/a,EAAMx5X,GAAiB,WAG/C,OAAOsB,GAEX1kD,YAAY,EACZC,cAAc,IAGlB+7c,EAAavod,UAAU0zc,sBAAwB,SAAUhyc,GACrD,IAAIuvD,KACJ,GAAuB,SAAnBvvD,EAAI+9B,MAAMn0B,MAAoD,IAAjC5J,EAAI+9B,MAAM2uB,YAAYhtD,OAEnD,IAAK,IADD+nb,EAAQvkb,KAAK4jd,kBAAkB9md,EAAIwG,IAC9BlF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKinb,GAAQnmb,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC5D,IAAI2sD,EAAaloD,EAAGzE,GAEpBiuD,EAAW7nD,KAAK+/a,EAAMx5X,GAAe,WAG7C,OAAOsB,GAEXs3Z,EAAavod,UAAUwlB,QAAU,SAAUrgB,EAAM+7B,GAC7C,IAAIjN,EAAO,IAAIM,GAAKpvB,EAAKyV,MAAOzV,EAAKwV,QACrC,QAAmB7a,IAAfm0B,EAAKrZ,YAAuC9a,IAAhBm0B,EAAKtZ,OAAsB,CAKvD,GAJMumB,aAAmBugB,KACrBxtB,EAAKrZ,MAAQqZ,EAAKrZ,OAAS,GAC3BqZ,EAAKtZ,OAASsZ,EAAKtZ,QAAU,IAE7BumB,EAAQigB,WAAWvmC,OAASsmB,EAAQigB,WAAWxmC,OAC/C,OAAOumB,EAAQigB,WAGfjgB,EAAQk4B,QAAQ,IAAI7kC,IACpBN,EAAKrZ,MAAQqZ,EAAKrZ,OAASsmB,EAAQo4B,YAAY1+C,MAC/CqZ,EAAKtZ,OAASsZ,EAAKtZ,QAAUumB,EAAQo4B,YAAY3+C,YAE/B7a,IAAlBqF,EAAKkgC,WACLpR,EAAKrZ,MAAQ3J,KAAK+T,IAAIiP,EAAKrZ,MAAOzV,EAAKkgC,gBAEpBvlC,IAAnBqF,EAAKyvD,YACL3gC,EAAKtZ,OAAS1J,KAAK+T,IAAIiP,EAAKtZ,OAAQxV,EAAKyvD,iBAEvB90D,IAAlBqF,EAAK0vD,WACL5gC,EAAKrZ,MAAQ3J,KAAKC,IAAI+iB,EAAKrZ,MAAOzV,EAAK0vD,gBAEpB/0D,IAAnBqF,EAAKwvD,YACL1gC,EAAKtZ,OAAS1J,KAAKC,IAAI+iB,EAAKtZ,OAAQxV,EAAKwvD,YAGjD,OAAO1gC,GAGXs0b,EAAavod,UAAUi2a,gBAAkB,SAAU/0Y,EAAS/7B,EAAM+vC,GAC9D,IAAIzV,EAAQt6B,EAAKs6B,MAyBjB,GAxBoB,UAAhBA,EAAMA,QACNyB,EAAUt8B,KAAK6jd,kBAAkBtjd,EAAMs6B,EAAMx+B,QAE7B,YAAhBw+B,EAAMA,QACNyB,EAAUt8B,KAAK8jd,oBAAoBvjd,IAEnB,eAAhBs6B,EAAMA,QACNyB,EAAUt8B,KAAK+jd,uBAAuBxjd,IAEtB,YAAhBs6B,EAAMA,OAAuC,eAAhBA,EAAMA,QACnCyB,EAAUt8B,KAAKgkd,cAAczjd,IAQb,aAAhBs6B,EAAMA,QACNyB,EAAUt8B,KAAKikd,qBAAqB1jd,IAEpB,mBAAhBs6B,EAAMA,QACNyB,EAAUt8B,KAAKkkd,yBAAyB5za,EAAS/vC,EAAM+7B,IAGvDzB,EAAM2uB,YAAYhtD,OAAS,EAAG,CAC9B,IAAK,IAAIN,EAAI,EAAGA,EAAI2+B,EAAM2uB,YAAYhtD,QAAUq+B,EAAM2uB,YAAYttD,GAAG8yB,KAAM9yB,IACvEogC,EAAQliB,SAAS5V,KAAKxE,KAAKmkd,sBAAsB5jd,EAAM+vC,EAASzV,EAAM2uB,YAAYttD,GAAIogC,IAE1FA,EAAQ53B,MAAMqqD,gBAAkB,UAEpC,OAAOzyB,GAGXqnb,EAAavod,UAAU4od,cAAgB,SAAUzjd,GAC7C,IAAI6jd,EAAY,IAAIvna,GAEpB78C,KAAKshC,SAAS8ib,EAAW7jd,GAC2B,IAA/CA,EAAK2gD,YAAcK,GAAgBe,UACpC8ha,EAAUpsZ,OAASz3D,EAAKy3D,QAE5B,IAAIqsZ,EAAgBzlZ,GAAqBr+D,EAAKs6B,MAAMA,OAOpD,OANAupb,EAAU7nd,KAAO8nd,EACjBD,EAAU9gd,GAAK/C,EAAK+C,GAAK,IAAM/C,EAAKs6B,MAAMA,WACvB3/B,IAAfqF,EAAKyV,YAAuC9a,IAAhBqF,EAAKwV,SACjCquc,EAAUpuc,MAAQzV,EAAKyV,MACvBouc,EAAUruc,OAASxV,EAAKwV,QAErBquc,GAkBXT,EAAavod,UAAU0od,oBAAsB,SAAUvjd,GACnD,IAAI+jd,EAAe,IAAIn8C,GAEnBo8C,EAAc,IAAI1na,GACtB0na,EAAYjhd,GAAK/C,EAAK+C,GAAK,aAC3Bihd,EAAY14c,QAAUtL,EAAKsL,QAC3B04c,EAAYt4c,QAAU1L,EAAK0L,QAC3Bs4c,EAAYhod,KAAO,0CACnByD,KAAKshC,SAASijb,EAAahkd,GAE3B,IAAIikd,EAAkB,IAAI3na,GAC1B2na,EAAgBlhd,GAAK/C,EAAK+C,GAAK,iBAE/Bkhd,EAAgB9/c,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAC3C+2c,EAAgBt0Z,oBAAsB,SACtCs0Z,EAAgBr0Z,kBAAoB,SACpCq0Z,EAAgB95Z,aAAe,SAC/B,IACI+5Z,EADA/jL,EAAYngS,EAAKs6B,MAAM6pb,QAE3BD,EAA2BzlZ,GAA4B0hO,EAAUh6R,MAC1C,eAAnBg6R,EAAUh6R,MAA4C,wBAAnBg6R,EAAUh6R,MAAqD,uBAAnBg6R,EAAUh6R,KACzF89c,EAAgB9/c,MAAMw7B,KAAO,QAG7Bskb,EAAgB9/c,MAAMw7B,KAAO,QAEjCskb,EAAgBjod,KAAOkod,EAEvBH,EAAa5/c,MAAMw7B,KAAO,cAC1Bokb,EAAa5/c,MAAMoqD,YAAc,cACjCw1Z,EAAa5/c,MAAMsqD,YAAc,EACjCs1Z,EAAalqc,UAAYmqc,EAAaC,GACtC,IAAIn1b,EAAOrvB,KAAK4gB,QAAQrgB,EAAMgkd,GAE9B,OADAvkd,KAAK2kd,sBAAsBpkd,EAAKs6B,MAAM6pb,QAASJ,EAAcj1b,EAAKrZ,MAAOqZ,EAAKtZ,QACvEuuc,GAGXX,EAAavod,UAAU2od,uBAAyB,SAAUxjd,GACtD,IAAIqkd,EAAkB,IAAIz8C,GACtBttY,EAAQt6B,EAAKs6B,MAAMgqb,WAEnBC,EAAc,IAAIjoa,GACtBioa,EAAYxhd,GAAK/C,EAAK+C,GAAK,aAC3Bwhd,EAAYvod,KAAO,iGACnB,IAAI8yB,EAAOrvB,KAAK4gB,QAAQrgB,EAAMukd,GAC9BA,EAAY9uc,MAAQqZ,EAAKrZ,MACzB8uc,EAAY/uc,OAASsZ,EAAKtZ,OAC1B/V,KAAKshC,SAASwjb,EAAavkd,GAE3B,IAAIwkd,EAAkB,IAAIloa,GAC1Bkoa,EAAgBzhd,GAAK/C,EAAK+C,GAAK,UAC/Byhd,EAAgB/uc,MAAQ,GACxB+uc,EAAgBhvc,OAAS,GACzBgvc,EAAgB/lb,OAAOxyB,KAAO,EAC9Bu4c,EAAgB/lb,OAAOtyB,IAAM,EAC7Bq4c,EAAgBxod,KAAO,uDAEvBwod,EAAgBrgd,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAE3C,IAAIu3c,EAAwB,IAAInoa,GAYhC,OAXAmoa,EAAsB1hd,GAAK/C,EAAK+C,GAAK,gBACrC0hd,EAAsBhvc,MAAQ,IAC9Bgvc,EAAsBjvc,OAAS,GAC/Bivc,EAAsBtgd,MAAMw7B,KAAO,QACnC8kb,EAAsB1tb,SAAU,EAChC0tb,EAAsB90Z,oBAAsB,SAC5C80Z,EAAsB70Z,kBAAoB,SAC1C60Z,EAAsBt6Z,aAAe,SAErCs6Z,EAAsBtgd,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QACjDu3c,EAAsBzod,KAAO,+FACrBs+B,EAAMn0B,MACV,IAAK,OACDq+c,EAAgBztb,SAAU,EAC1B,MACJ,IAAK,QACDytb,EAAgBrgd,MAAMw7B,KAAO,QAC7B,MACJ,IAAK,SACD6kb,EAAgBrgd,MAAMw7B,KAAO,QAWrC,OARyB,IAArBrF,EAAMwP,aACN26a,EAAsB1tb,SAAU,GAGpCstb,EAAgBlgd,MAAMw7B,KAAO,cAC7B0kb,EAAgBlgd,MAAMoqD,YAAc,cACpC81Z,EAAgBlgd,MAAMsqD,YAAc,EACpC41Z,EAAgBxqc,UAAY0qc,EAAaC,EAAiBC,GACnDJ,GAGXjB,EAAavod,UAAU6pd,iBAAmB,SAAU1kd,GAChD,IACI2kd,EADQ3kd,EAAKs6B,MAAM02Y,SACN2zC,KACbC,EAAa,IAAIh9C,GAEjBi9C,EAAW,IAAI50Z,GACnB40Z,EAASh6a,aAAe,GACxB,IAAI/b,EAAOrvB,KAAK4gB,QAAQrgB,EAAM6kd,GAC9BA,EAAS9hd,GAAK/C,EAAK+C,GAAK,UACxB8hd,EAASpvc,MAAQqZ,EAAKrZ,MACtBovc,EAASrvc,OAASsZ,EAAKtZ,OACvB/V,KAAKshC,SAAS8jb,EAAU7kd,QAELrF,IAAdgqd,EAAK5jd,OAAqC,IAAd4jd,EAAK5jd,OAClC8jd,EAAS1gd,MAAMsqD,YAAc,GAEjCm2Z,EAAWnvc,MAAQqZ,EAAKrZ,MACxBmvc,EAAWpvc,OAASsZ,EAAKtZ,OACzB,IACIhJ,EADAs4c,EAAarld,KAAKsld,kBAAkB/kd,GAEpCgld,EAA0B,GAAbF,EACbnrW,EAAO7qF,EAAKrZ,MAAQ,EAAIuvc,EAExBx4c,EADe,IAAfs4c,EACInrW,EAAO,EAGPA,EAA0B,GAAlBmrW,EAAa,GAG7B,IACIG,EADAC,EAAe,IAAI5oa,GAEL,YAAdqoa,EAAKx+c,MAAoC,SAAdw+c,EAAKx+c,MAChC++c,EAAazvc,MAAQ,GACrByvc,EAAa1vc,OAAS,KAGtB0vc,EAAazvc,MAAQ,GACrByvc,EAAa1vc,OAAS,IAE1B0vc,EAAanid,GAAK/C,EAAK+C,GAAK,eAC5Bmid,EAAazmb,OAAOxyB,KAAO,EAC3Bi5c,EAAazmb,OAAOtyB,IAAM,EAC1B84c,EAAmBtmZ,GAAyBgmZ,EAAKx+c,MACjD++c,EAAalpd,KAAOipd,EACpBC,EAAa/gd,MAAMw7B,KAAO,cAC1Bulb,EAAa/gd,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAExC03c,EAAWzgd,MAAMw7B,KAAO,cACxBilb,EAAWzgd,MAAMoqD,YAAc,cAC/Bq2Z,EAAWzgd,MAAMsqD,YAAc,EAC/Bm2Z,EAAW/qc,UAAYgrc,EAAUK,GAEjC,IAEIC,EAFAC,EAAWT,EAAKU,KAChBC,EAAe,IAAIhpa,GAEvB6oa,EAAiBtmZ,GAAyBumZ,GAC1CE,EAAatpd,KAAOmpd,EACpBG,EAAanhd,MAAMw7B,KAAO,QAEtB2lb,EAAavub,QADA,SAAbqub,EAMe,IAAfN,IACAt4c,EAAImtG,EAAO,GAEf2rW,EAAa7mb,OAAOxyB,KAAOO,GACE,IAAzB84c,EAAavub,UACbvqB,GAAK,IAET84c,EAAa7vc,MAAQ,GACrB6vc,EAAa9vc,OAAS,GACtB8vc,EAAa7mb,OAAOryB,OAAS,EAC7Bk5c,EAAavid,GAAK/C,EAAK+C,GAAK,UAC5Buid,EAAa31Z,oBAAsB,OACnC21Z,EAAa11Z,kBAAoB,SACjC01Z,EAAahgD,6BAA6B,EAAG,EAAG,YAChDggD,EAAan7Z,aAAe,QAC5Bm7Z,EAAanhd,MAAMw7B,KAAO,cAC1Bulb,EAAa/gd,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QACxC03c,EAAW/qc,SAAS5V,KAAKqhd,GAEzB,IAAIC,EAAe,IAAIjpa,GAcvB,OAbAipa,EAAe9ld,KAAK+ld,yBAAyBxld,EAAMuld,IACzB,IAAtBZ,EAAKc,aACLF,EAAaxub,SAAU,EAGvBwub,EAAaxub,SAAU,EAER,IAAf+tb,IACAt4c,EAAImtG,EAAO,GAEf4rW,EAAa9mb,OAAOxyB,KAAOO,EAAI,EAC/BA,GAAK,GACLo4c,EAAW/qc,SAAS5V,KAAKshd,GAClBX,GAGXxB,EAAavod,UAAUyod,kBAAoB,SAAUtjd,EAAM0ld,EAAUC,EAAK5id,GACtE,IACIjH,EACAsqB,EACA3Q,EACAD,EAJAowc,EAAa,IAAIh+C,GAKrB7ka,EAAKA,GAAM/C,EAAK+C,GAChB,IAAIkva,EAAW,qVAGX4zC,EAAa7ld,EAAKs6B,MAAMx+B,MAO5B,GANyB,UAArBkE,EAAKs6B,MAAMA,QACXx+B,EAAQ+pd,EAAW/pd,MACnBsqB,EAAUy/b,EAAWz/b,SAEzB3Q,EAAQiwc,EAASjwc,MACjBD,EAASkwc,EAASlwc,OACdmwc,EACAlwc,EAAQA,GAAS,GACjBD,EAASA,GAAU,QAElB,QAAuB7a,IAAnB+qd,EAASjwc,YAA2C9a,IAApB+qd,EAASlwc,OAAsB,CACpE,IAAIq6T,EAAc,IAAIvzR,GACtBuzR,EAAY7zU,KAAOi2a,EACnB,IAAInjZ,EAAOrvB,KAAK4gB,QAAQrgB,EAAM6vU,GAC9Bp6T,EAAQqZ,EAAKrZ,MACbD,EAASsZ,EAAKtZ,OAElB,IAAIswc,EAAgB9ld,EAAKs6B,MAAM02Y,SAC/B,GAAyB,aAArBhxa,EAAKs6B,MAAMA,MAAsB,CAChBwrb,EAAc/0C,WAC/Bj1a,EAAQ4pd,EAAS5pd,MACjBsqB,EAAUs/b,EAASt/b,QAGvB,IAAI2/b,EAAe,IAAIzpa,GACvBypa,EAAa/pd,KAAOi2a,EACpB8zC,EAAahjd,GAAKA,EAAK,WACvBgjd,EAAatwc,MAAQA,EACrBswc,EAAavwc,OAASA,EACtBuwc,EAAap2Z,oBAAsB,SACnCo2Z,EAAan2Z,kBAAoB,SACjCm2Z,EAAa57Z,aAAe,SAC5B1qD,KAAKshC,SAASglb,EAAc/ld,GAE5B,IAAIgmd,EAAe,IAAI1pa,GACvB0pa,EAAahqd,KAAOi2a,EACpB+zC,EAAajjd,GAAKA,EAAK,WACvBijd,EAAa7hd,MAAM4qD,SAAW/uD,EAAKmE,MAAM4qD,SACzCi3Z,EAAar2Z,oBAAsB,SACnCq2Z,EAAap2Z,kBAAoB,SACjCo2Z,EAAa77Z,aAAe,SAE5B67Z,EAAa7hd,MAAMoqD,YAAcvuD,EAAKmE,MAAMoqD,YAC5Cy3Z,EAAa7hd,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAExC,IAAI+4c,EAAc,IAAI3pa,GAClB4pa,EAAkB3nZ,GAA4Bn4C,GASlD,OARA6/b,EAAYjqd,KAAOkqd,EACnBD,EAAYljd,GAAKA,EAAK,aACtBkjd,EAAYt2Z,oBAAsB,SAClCs2Z,EAAYr2Z,kBAAoB,SAChCq2Z,EAAY97Z,aAAe,SAE3B87Z,EAAY9hd,MAAMoqD,YAAcvuD,EAAKmE,MAAMoqD,YAC3C03Z,EAAY9hd,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAC/BpR,GACJ,IAAK,QACDkqd,EAAajvb,SAAU,EACvB,MACJ,IAAK,uBACDgvb,EAAa5hd,MAAMqqD,gBAAkB,MACrCw3Z,EAAajvb,SAAU,EACvB,MACJ,IAAK,eACDgvb,EAAa5hd,MAAMw7B,KAAO,QAC1Bomb,EAAa5hd,MAAM4qD,SAAW,KAC9B,MACJ,IAAK,8BACDg3Z,EAAa5hd,MAAMw7B,KAAO,QAC1Bomb,EAAa5hd,MAAM4qD,SAAW,KAC9Bg3Z,EAAa5hd,MAAMqqD,gBAAkB,MACrCw3Z,EAAa7hd,MAAMqqD,gBAAkB,MACrC,MACJ,IAAK,uBACL,IAAK,MACDu3Z,EAAa5hd,MAAMw7B,KAAiB,QAAV7jC,EAAkB,QAAU,QACtDiqd,EAAa5hd,MAAM4qD,SAAW,KAC9Bk3Z,EAAY9hd,MAAMw7B,KAAO,QACzBsmb,EAAY9hd,MAAMoqD,YAAcvuD,EAAKmE,MAAMw7B,KASnD,OALAimb,EAAWzhd,MAAMw7B,KAAO,cACxBimb,EAAWzhd,MAAMoqD,YAAc,cAC/Bq3Z,EAAWzhd,MAAMsqD,YAAc,EAC/Bm3Z,EAAW/rc,UAAYksc,EAAcC,EAAcC,GACnDxmd,KAAK0md,qBAAqBN,EAAYD,EAAYnwc,EAAOD,GAClDowc,GAEXxC,EAAavod,UAAUurd,mBAAqB,SAAUpmd,EAAM+sZ,GACxD,IAAIjxZ,EAAQkE,EAAKs6B,MAAMx+B,MAAMA,MACzBiqd,EAAeh5D,EAAO,GACtBi5D,EAAej5D,EAAO,GACRA,EAAO,GACzB,OAAQjxZ,GACJ,IAAK,QACDkqd,EAAajvb,SAAU,EACvB,MACJ,IAAK,uBACDgvb,EAAa5hd,MAAMqqD,gBAAkB,MACrCw3Z,EAAajvb,SAAU,IAInCqsb,EAAavod,UAAUwrd,wBAA0B,SAAUrmd,GACvD,IAAI+wa,EAAa/wa,EAAKs6B,MAAM02Y,SAASD,WACjCu1C,EAAcv1C,EAAW3na,OAAOnN,OAChCsV,EAAiD,gBAAxCvR,EAAKs6B,MAAM02Y,SAASD,WAAW5qa,KAA0B,EAAI,EACtEogd,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GAAGA,SAAS,GAOvD,IANyB,IAArBk3Z,EAAWy1C,QACXD,EAAe1sc,SAAS,EAAItI,EAAQ+0c,GAAavvb,SAAU,IAE/B,IAA5Bg6Y,EAAW00C,eACXc,EAAe1sc,SAAS,EAAItI,EAAQ+0c,GAAavvb,SAAU,GAE3Duvb,EAAc,EACd,IAAK,IAAI3qd,EAAI,EAAGA,EAAI2qd,EAAa3qd,IAC7B8D,KAAK2md,mBAAmBpmd,EAAMumd,EAAe1sc,SAAS,EAAIle,GAAGke,WAKzEupc,EAAavod,UAAU4rd,uBAAyB,SAAUzmd,GACtD,IAEIoJ,EACAtN,EAOA0Q,EAVAk6c,EAAmB,IAAI9+C,GAIvB++C,EAAkB,IAAIrqa,GAEtBsqa,GADyB,IAAIh/C,GACN,IAAItrX,IAC3BhiB,EAAQt6B,EAAKs6B,MAAM02Y,SACnBD,EAAaz2Y,EAAMy2Y,WACnB81C,EAAgBpnd,KAAKqnd,wBAAwB9md,GAE7C+md,EAAiB,IAAI92Z,GACzB82Z,EAAehkd,GAAK/C,EAAK+C,GAAK,gBAC9Bgkd,EAAe5id,MAAMw7B,KAAO,cAC5Bonb,EAAel8a,aAAe,GAC9B,IAAI/b,EAAOrvB,KAAK4gB,QAAQrgB,EAAM+md,GAC9BA,EAAetxc,MAAQqZ,EAAKrZ,MAC5Bsxc,EAAevxc,OAASsZ,EAAKtZ,OAC7Bkxc,EAAiB7sc,UAAYktc,GACC,gBAA1Bzsb,EAAMy2Y,WAAW5qa,MACjB1G,KAAKund,6BAA6Bhnd,EAAMA,EAAKs6B,MAAOosb,GAExD,IAEI1B,EADgB,GACH6B,EACbltW,EAAO7qF,EAAKrZ,MAAQ,EAEpBjJ,EADkB,IAAlBq6c,EACIltW,IAGAA,EAAQqrW,EAAa,EARb,GAQoB6B,EAAgB,GAAkB,EAGtEpnd,KAAKshC,SAASgmb,EAAgB/md,GACsB,IAA/CA,EAAK2gD,YAAcK,GAAgBe,UACpC2ka,EAAiBjvZ,OAASz3D,EAAKy3D,QAEnC,IAAIwvZ,EAAiB,IAAI3qa,GAsBzB,GArBA2qa,EAAelkd,GAAK/C,EAAK+C,GAAK,eAC9Bkkd,EAAexxc,MAAQ,GACvBwxc,EAAezxc,OAAS,GACxByxc,EAAe9id,MAAMw7B,KAAO,QAC5Bsnb,EAAexob,OAAOryB,OAAS,EAC/B66c,EAAet3Z,oBAAsB,OACrCs3Z,EAAer3Z,kBAAoB,SACnCq3Z,EAAe3hD,6BAA6B,EAAG,EAAG,YAClD2hD,EAAe98Z,aAAe,QAC9B88Z,EAAejrd,KAAOqiE,GAAqB,kBAC3C4oZ,EAAexob,OAAOxyB,KAAOO,GACA,IAAzBuka,EAAWI,WAAuBJ,EAAWE,UAI7Cg2C,EAAelwb,SAAU,EAHzBkwb,EAAelwb,SAAU,GAKE,IAA3Bkwb,EAAelwb,UACfvqB,GAAK,IAETk6c,EAAiB7sc,SAAS5V,KAAKgjd,GACP,UAApBl2C,EAAW5qa,KAAkB,CAC7B4gd,EAAe5id,MAAMsqD,YAAc,EACnCs4Z,EAAe5id,MAAMqqD,gBAAkB,MACvCplD,EAAS2na,EAAW3na,OACpB,IAAK,IAAIzN,EAAI,EAAGA,EAAIyN,EAAOnN,OAAQN,IAC/BG,EAAQsN,EAAOzN,GACf8D,KAAKynd,gBAAgBprd,EAAOkE,EAAM0md,GAI1CE,EAAuBnnd,KAAK0nd,2BAA2Bnnd,GACjC,IAAlB6md,IACAr6c,EAAImtG,EAAO,GAEfitW,EAAqBnob,OAAOxyB,KAAOO,GACE,IAAjCo6c,EAAqB7vb,UACrBvqB,GAAK46c,IAETV,EAAiB7sc,SAAS5V,KAAK2id,GAE/BG,EAAehkd,GAAK/C,EAAK+C,GAAK,YACF,YAAxBgua,EAAWs2C,WACXN,EAAe5id,MAAMsqD,YAAc,EACnCs4Z,EAAe5id,MAAMqqD,gBAAkB,OAEf,SAAxBuiX,EAAWs2C,WACXN,EAAe5id,MAAMsqD,YAAc,EACnCs4Z,EAAe5id,MAAMqqD,gBAAkB,OAEf,UAAxBuiX,EAAWs2C,WACXN,EAAe5id,MAAMsqD,YAAc,EACnCs4Z,EAAe5id,MAAMqqD,gBAAkB,OAG3Cm4Z,EAAkBlnd,KAAK6nd,kBAAkBtnd,EAAM2md,EAAiB51C,GAC1C,IAAlB81C,IACAr6c,EAAImtG,EAAO,GAEfgtW,EAAgBlob,OAAOxyB,KAAOO,GACE,IAA5Bm6c,EAAgB5vb,UAChBvqB,GAAK46c,IAETV,EAAiB7sc,SAAS5V,KAAK0id,GAE/B,IAAIY,EAAiB,IAAIjra,GAoBzB,OAnBgC,IAA5By0X,EAAW00C,aACX8B,EAAexwb,SAAU,EAGzBwwb,EAAexwb,SAAU,EAE7Bwwb,EAAiB9nd,KAAK+ld,yBAAyBxld,EAAMund,GAC/B,IAAlBV,IACAr6c,EAAImtG,EAAO,GAEf4tW,EAAe9ob,OAAOxyB,KAAOO,GACE,IAA3B+6c,EAAexwb,UACfvqB,GAAK46c,IAETV,EAAiB7sc,SAAS5V,KAAKsjd,GAE/Bb,EAAiBvid,MAAMoqD,YAAc,cACrCm4Z,EAAiBvid,MAAMsqD,YAAc,EACrCi4Z,EAAiBvid,MAAMw7B,KAAO,cACvB+mb,GAEXtD,EAAavod,UAAUqsd,gBAAkB,SAAUprd,EAAOkE,EAAMsa,EAAWvX,GACvEuX,EAAUT,SAAWS,EAAUT,aAC/B,IAAI2tc,EACJA,EAAiB/nd,KAAK6jd,kBAAkBtjd,EAAMlE,GAAO,EAAMiH,GAC3DtD,KAAKgod,uBAAuBznd,EAAMwnd,EAAgB1rd,GAClD0rd,EAAezkd,GAAKA,GAAO/C,EAAK+C,GAAK,oBACrCykd,EAAe/xc,MAAQ3Z,EAAM2Z,OAAS,GACtC+xc,EAAehyc,OAAS1Z,EAAM0Z,QAAU,GAExCgyc,EAAeliD,6BAA6Bxpa,EAAMsP,OAAOoB,EAAG1Q,EAAMsP,OAAOqB,EAAG,YAC5E+6c,EAAer9Z,aAAe,QAE9Bq9Z,EAAe/ob,OAAS3iC,EAAM2iC,OAE9B+ob,EAAe73Z,oBAAsB7zD,EAAM6zD,oBAC3C63Z,EAAe53Z,kBAAoB9zD,EAAM8zD,kBAEzC43Z,EAAerjd,MAAMw7B,KAAO,cAC5B6nb,EAAerjd,MAAMoqD,YAAc,cACnCi5Z,EAAerjd,MAAMsqD,YAAc,EACnCn0C,EAAUT,SAAS5V,KAAKujd,IAE5BpE,EAAavod,UAAUmsd,6BAA+B,SAAUhnd,EAAMs6B,EAAOhgB,GACzE,IAAIqtE,EAAartE,EAAUT,SAAS,GAAGpE,MACnCmyE,EAActtE,EAAUT,SAAS,GAAGrE,OACpCkyc,EAAY,IAAIz3Z,GACpBy3Z,EAAUjpb,QAAWxyB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GACxDs7c,EAAU3kd,GAAK/C,EAAK+C,GAAK,2BACzB2kd,EAAU78a,aAAe,GACzB68a,EAAUjyc,MAAQkyE,EAAa,EAC/B+/X,EAAUlyc,OAASoyE,EAAc,EACjCttE,EAAUT,SAAS5V,KAAKyjd,GACxB,IAAIC,EAAoB,IAAI//C,GAC5B+/C,EAAkB5kd,GAAK/C,EAAK+C,GAAK,sBACjC4kd,EAAkBxjd,MAAM4qD,SAAW/uD,EAAKmE,MAAM4qD,SAC9C,IAAI0lY,EAAcn6Z,EAAM02Y,SAASD,WAAW0jB,YAC5Ch1b,KAAKynd,gBAAgBzyB,EAAY36L,QAAS95P,EAAM2nd,EAAmB3nd,EAAK+C,GAAK,YAC7EtD,KAAKynd,gBAAgBzyB,EAAYp7Z,OAAQr5B,EAAM2nd,EAAmB3nd,EAAK+C,GAAK,WAC5EtD,KAAKynd,gBAAgBzyB,EAAYC,QAAS10b,EAAM2nd,EAAmB3nd,EAAK+C,GAAK,YAC7EtD,KAAKw3c,iCAAiC0Q,EAAkB9tc,SAAS,GAAI46a,EAAY36L,QAAQ/iO,SACzFt3B,KAAKw3c,iCAAiC0Q,EAAkB9tc,SAAS,GAAI46a,EAAYp7Z,OAAOtC,SACxFt3B,KAAKw3c,iCAAiC0Q,EAAkB9tc,SAAS,GAAI46a,EAAYC,QAAQ39Z,SACzF4wb,EAAkBviD,OAAQ,EAC1BuiD,EAAkBlyc,MAAQkyE,EAC1BggY,EAAkBnyc,OAASoyE,EAC3B+/X,EAAkBxjd,MAAMw7B,KAAOgob,EAAkBxjd,MAAMoqD,YAAc,cACrEj0C,EAAUT,SAAS5V,KAAK0jd,IAG5BvE,EAAavod,UAAUssd,2BAA6B,SAAUnnd,GAC1D,IACIold,EAEAwC,EAHAttb,EAAQt6B,EAAKs6B,MAAM02Y,SAEnB62C,EAAiB,IAAIvra,GAsBzB,OAnBA8oa,EADiB9qb,EAAMy2Y,WACDs0C,KACtBuC,EAAqB/oZ,GAAyBumZ,GAE1CyC,EAAe9wb,QADF,SAAbqub,EAMJyC,EAAe9kd,GAAK/C,EAAK+C,GAAK,QAC9B8kd,EAAe7rd,KAAO4rd,EACtBC,EAAe1jd,MAAMw7B,KAAO,QAC5Bkob,EAAepyc,MAAQ,GACvBoyc,EAAeryc,OAAS,GACxBqyc,EAAel4Z,oBAAsB,OACrCk4Z,EAAej4Z,kBAAoB,SACnCi4Z,EAAeviD,6BAA6B,EAAG,EAAG,YAClDuiD,EAAe19Z,aAAe,QAC9B09Z,EAAeppb,OAAOryB,OAAS,EAC/By7c,EAAe1jd,MAAMw7B,KAAO,cACrBkob,GAGXzE,EAAavod,UAAUm8G,KAAO,SAAUz6G,EAAK8xU,EAAID,EAAIr+R,GACjD,IAAI/vC,EAAO+vC,EAAQqY,UAAU,EAAMkoX,WAC/B/za,EAAIkiC,OAAOtyB,IAAMiiU,GAAM,GACvBr+R,EAAQysZ,mBAAmBjgc,MAAWkiC,QAAUtyB,IAAK5P,EAAIkiC,OAAOtyB,IAAMiiU,KAEtE7xU,EAAIkiC,OAAOxyB,KAAOoiU,GAAM,GACxBt+R,EAAQysZ,mBAAmBjgc,MAAWkiC,QAAUxyB,KAAM1P,EAAIkiC,OAAOxyB,KAAOoiU,KAE5E,IAEIjkR,EAAQ3qD,KAAKs+b,iBAAiB/9b,EAAMzD,EAAIwG,GAAIgtC,GAChDtwC,KAAKu+b,oBAAoB5zY,EAAO7tD,EAAKwzC,GACrC/vC,EAAKgS,QAAQiiD,QAAQ,IAAI7kC,QAAKz0B,OAAWA,IACzCqF,EAAKgS,QAAQkiD,QAAQl0D,EAAKgS,QAAQmiD,aAClCpkB,EAAQilZ,sBACRjlZ,EAAQ8zY,iBACRpkb,KAAKgvc,YAAYlyc,EAAKwzC,IAG1Bqza,EAAavod,UAAUumc,cAAgB,SAAUx6b,EAAQ7K,EAAQg0C,GAC7D,GAAIh0C,GAAgC,SAAtBA,EAAOu+B,MAAMn0B,MAA0C,mBAAvBpK,EAAOu+B,MAAMA,MAA4B,CACnF,IAAIy2Y,EAAahhY,EAAQqY,UAAUxhD,EAAO7D,IAAIu3B,MAAM02Y,SAASD,WAC7D,GAAIhhY,EAAQqsB,eAAuC,SAAtBx1D,EAAO0zB,MAAMn0B,OAAoB4qa,EAAWI,UAErE,YADAp1a,EAAOu0a,UAAY1pa,EAAO7D,IAI9B,GADAgua,EAAWE,UAAYF,EAAWE,cAC9BF,EAAWE,YAA0D,IAA7CF,EAAWE,UAAUjza,QAAQjC,EAAOgH,MAAegua,EAAWI,UAAW,CACjGJ,EAAWE,UAAUhta,KAAKlI,EAAOgH,IACjC,IAAI+kd,EAAcp8Z,GAAY3vD,GAC1Bgsd,EAAUh4a,EAAQqY,UAAUrsD,EAAOgH,IAAIiP,QACvCy/B,EAAgB1B,EAAQqY,UAAUxhD,EAAO7D,IAAIiP,QACjD+1c,EAAQtpb,OAAOtyB,IAAO47c,EAAQr8c,QAAWq8c,EAAQ/ra,WAAWxmC,OAAS,GAC9D5O,EAAO8E,QAAW9E,EAAOo1C,WAAWxmC,OAAS,GACpDuyc,EAAQtpb,OAAOxyB,KAAQ87c,EAAQz8c,QAAWy8c,EAAQ/ra,WAAWvmC,MAAQ,GAC9D7O,EAAO0E,QAAW1E,EAAOo1C,WAAWvmC,MAAQ,GACnDsyc,EAAQtpb,OAAOtyB,IAAO47c,EAAQtpb,OAAOtyB,IAAM,EAAK,EAAI47c,EAAQtpb,OAAOtyB,IACnE47c,EAAQtpb,OAAOxyB,KAAQ87c,EAAQtpb,OAAOxyB,KAAO,EAAK,EAAI87c,EAAQtpb,OAAOxyB,KACrE8jC,EAAQqY,UAAUrsD,EAAOgH,IAAIuta,UAAY1pa,EAAO7D,GAChD0uC,EAAc53B,SAAS5V,KAAK8rC,EAAQqY,UAAUrsD,EAAOgH,IAAIiP,SACzD,IAAIo4C,EAAQ3qD,KAAKs+b,iBAAiBn3b,EAAQ7K,EAAOgH,GAAIgtC,GACrDtwC,KAAKu+b,oBAAoB5zY,EAAOruD,EAAQg0C,GACxC0B,EAAcwiB,QAAQ,IAAI7kC,QAAKz0B,OAAWA,IAC1C82C,EAAcyiB,QAAQziB,EAAc0iB,aACpCpkB,EAAQilZ,sBACRjlZ,EAAQ8zY,iBAGR,IAAK,IAFDkU,KAEKp8b,GADTo8b,EAAQA,EAAM99a,OAAOle,EAAOw0a,SAAUx0a,EAAOy0a,UAC1Bv0a,OAAS,EAAGN,GAAK,EAAGA,KACuD,IAAtFo0C,EAAQ8gY,WAAWqhB,yBAAyBl0b,QAAQ+xC,EAAQqY,UAAU2vY,EAAMp8b,MAC5Eo0C,EAAQ/rC,OAAO+rC,EAAQqY,UAAU2vY,EAAMp8b,KAG/C,IACIqob,GACA79a,KAAM,kBAAmB+9a,YAAcr4X,OAAQi8Z,IAC/C7jC,YAAcp4X,OAHRH,GAAY3vD,KAGY08M,SAAU,YAE5C1oK,EAAQo0Y,gBAAgBH,GACH,QAAjBj0Y,EAAQjQ,MACJ/jC,EAAOirE,OAASpgE,EAAOogE,QACvBj3B,EAAQ4+Z,gBAAgB5yc,GAGhC0D,KAAKgvc,YAAY1yc,EAAQg0C,MAKrCqza,EAAavod,UAAU4zc,YAAc,SAAUlyc,EAAKwzC,GAChD,GAAuB,SAAnBxzC,EAAI+9B,MAAMn0B,MAAmB5J,EAAI+9B,MAAM02Y,SAASD,WAAWE,YAC1D10a,EAAI+9B,MAAM02Y,SAASD,WAAWI,UAE/B,IAAK,IAAItza,EAAK,EAAGmqd,EADEzrd,EAAI+9B,MAAM02Y,SAASD,WAAWE,UACDpza,EAAKmqd,EAAe/rd,OAAQ4B,IAAM,CAC9E,IAAIlC,EAAIqsd,EAAenqd,GACnB0xD,EAAexf,EAAQqY,UAAUzsD,GACjC4zD,IACAxf,EAAQ4qa,qBAAqBprZ,GAC7BA,EAAav9C,QAAQiiD,QAAQ,IAAI7kC,GAAKmgC,EAAav9C,QAAQyD,MAAO85C,EAAav9C,QAAQwD,SACvF+5C,EAAav9C,QAAQkiD,QAAQ3E,EAAav9C,QAAQmiD,aAC9C5E,EAAaj1B,MAAM02Y,SAASD,WAAWE,WACpC1hX,EAAaj1B,MAAM02Y,SAASD,WAAWE,UAAUh1a,QACpDwD,KAAKgvc,YAAYl/Y,EAAcxf,MAOnDqza,EAAavod,UAAU20c,oBAAsB,SAAUN,EAAYn/Z,GAC/D,IAAItvC,EAAUsvC,EAAQqY,UAAU8mZ,EAAW5+B,WAC3C,GAA8B,SAA1B4+B,EAAW50a,MAAMn0B,MAAmB+oc,EAAW50a,MAAM02Y,SAASD,WAAWE,WACzEi+B,EAAW50a,MAAM02Y,SAASD,WAAWE,UAAUh1a,OAAS,EAExD,IAAK,IAAIknB,GADL8tZ,EAAYi+B,EAAW50a,MAAM02Y,SAASD,WAAWE,WAC9Bh1a,OAAS,EAAGknB,GAAK,EAAGA,IACvC4sB,EAAQ/rC,OAAO+rC,EAAQqY,UAAU6oX,EAAU9tZ,KAGnD,GAAI1iB,EAAS,CACTsvC,EAAQg/Z,yBAAyBG,GACjC,IAAIj+B,EAAYxwa,EAAQ65B,MAAM02Y,SAASD,WAAWE,UAClDxxa,KAAKkhc,oBAAoBlgc,EAAQuR,QAASk9b,EAAWnsc,IACrD,IAAIkld,EAAeh3C,EAAUjza,QAAQkxc,EAAWnsc,IAChDkua,EAAU7oZ,OAAO6/b,EAAc,KAIvC7E,EAAavod,UAAU8lc,oBAAsB,SAAU3ub,EAASglB,GAC5D,IAAK,IAAIn5B,EAAK,EAAGyE,EAAK0P,EAAQ6H,SAAUhc,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC1D,IAAIlC,EAAI2G,EAAGzE,GACPlC,EAAEoH,KAAOi0B,EACThlB,EAAQ6H,SAASuO,OAAOpW,EAAQ6H,SAAS7b,QAAQrC,GAAI,GAEhDA,EAAEke,UACPpa,KAAKkhc,oBAAoBhlc,EAAGq7B,KAKxCosb,EAAavod,UAAUmyc,cAAgB,SAAUjqc,EAAIgtC,GACjD,IAAI/vC,EAAO+vC,EAAQqY,UAAUrlD,GAC7B,GAAI/C,EAAM,CACN,IAAIs5G,EAAWvpE,EAAQqY,UAAUpoD,EAAKswa,WACtC,GAAIh3T,GAAoC,SAAxBA,EAASh/E,MAAMn0B,KAAiB,CAC5C,IAAI8qa,EAAY33T,EAASh/E,MAAM02Y,SAASD,WAAWE,UACnDlhY,EAAQg/Z,yBAAyB/uc,GACjCP,KAAKkhc,oBAAoBrnV,EAAStnG,QAASjP,GAC3C,IAAIkld,EAAeh3C,EAAUjza,QAAQ+E,GACrCkua,EAAU7oZ,OAAO6/b,EAAc,GAC/Bjod,EAAKswa,UAAY,GACjBvgY,EAAQ2lZ,sBACR3lZ,EAAQ8zY,oBAKpBu/B,EAAavod,UAAU69b,WAAa,SAAU//W,EAAS1a,EAAUluB,GAC7D,IAAIhtC,EACJ41E,EAAQ51E,GAAK41E,EAAQ51E,IAAMk3D,KAC3Bl3D,EAAK41E,EAAQ51E,GACb,IAAI/C,EAAO+vC,EAAQqY,UAAUrlD,GACxB/C,GACD+vC,EAAQlsC,IAAI80E,GAEhBA,EAAQ23V,UAAYryW,EACpB,IAAI/9D,EAAa6vC,EAAQqY,UAAU6V,GAC/B8yW,EAAa7wa,EAAWo6B,MAAM02Y,SAASD,WAC3C,GAAI/wa,GAAQE,GAAwC,SAA1BA,EAAWo6B,MAAMn0B,MAAuC,SAApBnG,EAAKs6B,MAAMn0B,MACrE4qa,EAAWE,UAAW,CACtBjxa,EAAKswa,UAAYryW,EACjB,IAAIgzW,EAAY/wa,EAAWo6B,MAAM02Y,SAASD,WAAWE,UASrD,GARIA,EAAUjza,QAAQ+E,GAAM,GACxBkua,EAAUhta,KAAKlB,GAEnB7C,EAAW8R,QAAQ6H,SAAS5V,KAAKjE,EAAKgS,SACtC9R,EAAW8R,QAAQiiD,QAAQ,IAAI7kC,IAC/BlvB,EAAW8R,QAAQkiD,QAAQh0D,EAAW8R,QAAQmiD,aAC9CpkB,EAAQ8gY,WAAW49B,YAAYvuc,EAAY6vC,GAC3CA,EAAQ2lZ,sBACa,QAAjB3lZ,EAAQjQ,MAAmB9/B,EAAKs6B,OAASt6B,EAAKs6B,MAAM02Y,WAChDhxa,EAAKs6B,MAAM02Y,SAASD,WAAWE,UAAY,CACnCjgX,GAAkBiN,EAAW,iBACnC78D,YAAY4vD,GAAkB2nB,EAAQ51E,GAAK,qBAK7Dqgd,EAAavod,UAAUkjc,iBAAmB,SAAU/9b,EAAMkod,EAAcn4a,GACpE,IACIqa,EADA6mX,EAAYjxa,EAAKs6B,MAAM02Y,SAASD,WAAWE,UAE/C,GAAIA,GAAaA,EAAUh1a,OACvB,IAAK,IAAI4B,EAAK,EAAGg5b,EAAc5lB,EAAWpza,EAAKg5b,EAAY56b,OAAQ4B,IAAM,CACrE,IAAIlC,EAAIk7b,EAAYh5b,GAChBqqd,IAAiBvsd,IAKbyuD,EAJCA,EAIOra,EAAQqY,UAAUzsD,GAAGqW,QAAQgkB,OAAOwpB,UAAU4K,GAH9Cra,EAAQqY,UAAUzsD,GAAGqW,QAAQgkB,QAQrD,OAAOo0B,GAASra,EAAQqY,UAAU8/Z,GAAcl2c,QAAQgkB,QAG5Dotb,EAAavod,UAAUmjc,oBAAsB,SAAU5zY,EAAO7tD,EAAKwzC,GAC/D,IAAIqG,EACAR,EAEA1pC,EACAE,EAFApM,EAAO+vC,EAAQqY,UAAU7rD,EAAI+za,WAG7Bn+W,GAAU3lD,EAAG,GAAKC,EAAG,IACpBzM,EAAKgS,QAAQgkB,OAAO/pB,KAAO1P,EAAIkiC,OAAOxyB,KAAO1P,EAAIkZ,MAAUzV,EAAKgS,QAAQgkB,OAAY,QACrF9pB,GAAQ,GAEPlM,EAAKgS,QAAQgkB,OAAO7pB,IAAM5P,EAAIkiC,OAAOtyB,IAAM5P,EAAIiZ,OAAWxV,EAAKgS,QAAQgkB,OAAa,SACrF5pB,GAAS,GAETF,IACAimD,EAAM3lD,EAAI,GAEVJ,IACA+lD,EAAM1lD,EAAI,GAEd,IAAIuvC,EAAah8C,EAAKgS,QAAQgqC,WAC1B9vC,IACAkqC,GAAS75C,EAAIyV,QAAQysB,OAAOxyB,KAAO1P,EAAIyV,QAAQgkB,OAAOvgB,OAASumC,EAAWvmC,OAE1ErJ,IACAwpC,GAASr5C,EAAIyV,QAAQysB,OAAOtyB,IAAM5P,EAAIyV,QAAQgkB,OAAOxgB,QAAUwmC,EAAWxmC,SAE1E4gC,EAAQ,GAAKR,EAAQ,IACrB7F,EAAQ+wY,eAAej6X,MAAM9W,EAAQqY,UAAU7rD,EAAI+za,WAAYl6X,GAAS,EAAGR,GAAS,EAAGuc,IAI/FixZ,EAAavod,UAAU2qd,yBAA2B,SAAUxld,EAAMmod,GAe9D,OAdAA,EAAiBpld,GAAK/C,EAAK+C,GAAK,kBAChCold,EAAiB1yc,MAAQ,GACzB0yc,EAAiB3yc,OAAS,GAC1B2yc,EAAiB1pb,OAAOryB,OAAS,EACjC+7c,EAAiBhkd,MAAMw7B,KAAO,cAC9Bwob,EAAiBx4Z,oBAAsB,OACvCw4Z,EAAiBv4Z,kBAAoB,SACrCu4Z,EAAiBh+Z,aAAe,SAChCg+Z,EAAiBnsd,KAAO,8iBAMjBmsd,GAGX/E,EAAavod,UAAU6od,qBAAuB,SAAU1jd,GACpD,IACI+7B,EADA6pb,EAAa,IAAIh+C,GAEjBttY,EAAQt6B,EAAKs6B,MAAM02Y,SACnB2zC,EAAOrqb,EAAM02Y,SACbD,EAAaz2Y,EAAMy2Y,WACJz2Y,EAAM02Y,SAWzB,MAVa,SAAT2zC,IACA5ob,EAAUt8B,KAAKild,iBAAiB1kd,IAEvB,eAAT2kd,GAAyB5zC,IACzBh1Y,EAAUt8B,KAAKgnd,uBAAuBzmd,IAE1C4ld,EAAW/rc,UAAYkiB,GACvB6pb,EAAWzhd,MAAMw7B,KAAO,cACxBimb,EAAWzhd,MAAMoqD,YAAc,cAC/Bq3Z,EAAWzhd,MAAMsqD,YAAc,EACxBm3Z,GAGXxC,EAAavod,UAAU4sd,uBAAyB,SAAUznd,EAAMood,EAAwBh/c,GACpF,IAAI6/C,EACAmK,EACJ,GAAkC,IAA9BhqD,EAAO6/C,YAAYhtD,OACnB,IAAK,IAAIN,EAAI,EAAGA,EAAIyN,EAAO6/C,YAAYhtD,OAAQN,IAAK,CAChD,IAAIgtP,EAAQv/O,EAAO6/C,YAAYttD,IAC/BstD,EAAcjpD,EAAK+xa,sBAAsBppL,IAC7BlzO,MAAQrM,EAAOqM,MAC3BwzC,EAAYzzC,OAASpM,EAAOoM,OAC5B4yc,EAAuBvuc,SAAS5V,KAAKglD,GAG7C,GAA4B,IAAxB7/C,EAAOgqD,MAAMn3D,OACb,IAASN,EAAI,EAAGA,EAAIyN,EAAOgqD,MAAMn3D,OAAQN,IAAK,CAC1C,IAAI+2C,EAAOtpC,EAAOgqD,MAAMz3D,GACxBy3D,EAAQpzD,EAAKuxa,gBAAgB7+X,GAC7B01a,EAAuBvuc,SAAS5V,KAAKmvD,KAKjDgwZ,EAAavod,UAAUysd,kBAAoB,SAAUtnd,EAAMqod,EAAWt3C,GAkBlE,OAjBAs3C,EAAUtld,GAAK/C,EAAK+C,GAAK,WACzBsld,EAAU5yc,MAAQ,GAClB4yc,EAAU7yc,OAAS,EACnB6yc,EAAUlkd,MAAMw7B,KAAO,QACvB0ob,EAAU5pb,OAAOryB,OAAS,EAC1Bi8c,EAAU14Z,oBAAsB,OAChC04Z,EAAUz4Z,kBAAoB,SAC9By4Z,EAAUl+Z,aAAe,SACzBk+Z,EAAUrsd,KAAO,mUAGb+0a,IAAmC,IAArBA,EAAWy1C,MACzB6B,EAAUtxb,SAAU,EAGpBsxb,EAAUtxb,SAAU,EAEjBsxb,GAGXjF,EAAavod,UAAU+od,sBAAwB,SAAU5jd,EAAM+vC,EAASya,EAAYzuB,GAChFyuB,EAAWznD,GAAKynD,EAAWznD,IAAMk3D,KACjCzP,EAAWoK,OAAS50D,EAAK+C,GACzB,IAAIuld,EAAsB,IAAI1gD,GAC1B2gD,EAAiB,IAAIjsa,GACrB1mB,EAAc,IAAIo5B,GAEtBu5Z,EAAexld,GAAK/C,EAAK+C,GAAK,IAAMynD,EAAWznD,GAAK,QACpDwld,EAAe9yc,MAAQ+0C,EAAW/0C,MAClC8yc,EAAe/yc,OAASg1C,EAAWh1C,OACnC+yc,EAAep+Z,aAAe,SAC9Bv0B,EAAY7yB,GAAK/C,EAAK+C,GAAK,IAAMynD,EAAWznD,GAAK,QACjD6yB,EAAYmG,QAAUyuB,EAAW/7B,KACjC,IAAItqB,EAAQnE,EAAKmE,MACjByxB,EAAYzxB,OACR0qB,SAAU1qB,EAAM0qB,SAAU+/B,OAAQzqD,EAAMyqD,OAAQG,SAAU,KAAM7hD,QAAS/I,EAAM+I,QAC/EwhD,KAAMvqD,EAAMuqD,KAAMC,aAAcxqD,EAAMwqD,aAAc74B,MAAO3xB,EAAM2xB,MAAO6J,KAAM,QAC9E1Q,WAAY9qB,EAAM8qB,WAAYC,WAAY/qB,EAAM+qB,WAAYmT,aAAc,OAC1EksB,YAAa,OAAQE,YAAa,EAClCD,gBAAiBrqD,EAAMqqD,gBAAiBK,UAAW1qD,EAAM0qD,UAAWC,eAAgB3qD,EAAM2qD,gBAE9Fl5B,EAAY+5B,oBAAsB,SAClC/5B,EAAYg6B,kBAAoB,SAChCh6B,EAAYu0B,aAAe,SAC3Bv0B,EAAY6I,QAAWxyB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAC1Dk8c,EAAoBh9c,QAAUtL,EAAKsL,QAAUk/C,EAAWvuD,OACpD6P,KAAKyV,IAAIipC,EAAWnpC,OAASvV,KAAKmR,GAAK,MAC3Cqrc,EAAoB58c,QAAU1L,EAAK0L,QAAU8+C,EAAWvuD,OACpD6P,KAAK0V,IAAIgpC,EAAWnpC,OAASvV,KAAKmR,GAAK,MAC3Cqrc,EAAoBljD,OAAQ,EAC5BkjD,EAAoBx7c,UAAYy3Z,GAAUO,KAC1CwjD,EAAoBvld,GAAK/C,EAAK+C,GAAK,mBAAqBynD,EAAWznD,GACnEuld,EAAoBnkd,MAAMoqD,YAAc,cACxC+5Z,EAAoB7pb,QAAWxyB,KA3BlB,GA2BgCC,MA3BhC,GA2B+CC,IA3B/C,GA2B4DC,OA3B5D,IA4Bbk8c,EAAoBn+Z,aAAe,SACnCm+Z,EAAoBxta,YAAc,EAClCwta,EAAoBzuc,UAAY0uc,EAAgB3yb,GAChD,IAAIi/Z,EAAiB,IAAI5yY,GAAKjiD,EAAKs6B,MAAO,eAAiBv3B,GAAIuld,EAAoBvld,GAAIu3B,OAASn0B,KAAM,OAAQm0B,MAAO,oBAAsB,GAC3Iu6Z,EAAezhY,QAEPrwD,GAAIwld,EAAexld,GAAK,QAASu3B,MAAO,SACxClvB,QAAUoB,EAAG,EAAGC,EAAG,MAG3Boob,EAAevpb,QAAUg9c,EAAoBh9c,QAC7Cupb,EAAenpb,QAAU48c,EAAoB58c,QAC7Cmpb,EAAepma,KAAO+7B,EAAW/7B,KACjComa,EAAexza,MAAQmpC,EAAWnpC,MAClCwza,EAAe54b,OAASuuD,EAAWvuD,OACnC44b,EAAep/a,MAAQ+0C,EAAW/0C,MAClCo/a,EAAer/a,OAASg1C,EAAWh1C,OACnCq/a,EAAe7ib,QAAUs2c,EACzBA,EAAoBzuc,SAAS5V,KAAK4wb,EAAetjB,gBAAgBsjB,EAAezhY,MAAM,KACtF,IAAIp9B,EAAS,IAAIR,GAAK,EAAG,EAAG,EAAG,GAC3B/f,EAAQzV,EAAKyV,OAASzV,EAAK0vD,UAAY,EACvCl6C,EAASxV,EAAKwV,QAAUxV,EAAKwvD,WAAa,OAChC70D,IAAV8a,QAAkC9a,IAAX6a,IACvBwgB,EAAS,IAAIR,GAAKx1B,EAAKsL,QAAUmK,EAAQ,EAAGzV,EAAK0L,QAAU8J,EAAS,EAAGC,EAAOD,IAElF/V,KAAK+od,kBAAkBxyb,EAAQsyb,GAAuB97c,EAAGqob,EAAevpb,QAASmB,EAAGoob,EAAenpb,SAAWmpb,EAAgBrqY,EAAWvuD,OAAQuuD,EAAWnpC,OAC5J,IAAIg5B,GACAt3C,GAAI/C,EAAK+C,GAAK,IAAMynD,EAAWznD,GAAK,aACpC49C,YAAaI,GAAqBmuX,UAAYnuX,GAAqBU,cAAgBV,GAAqBG,MACxG1P,SAAUxxC,EAAK+C,GAAI8ra,SAAUy5C,EAAoBvld,GACjD08C,iBAAmBnlB,MAAO,SAE1Bmub,EAAsB,IAAI3na,GAAU9gD,EAAKs6B,MAAO,cAAe+f,GAAW,GAC9Eoua,EAAoB35C,aAAe+lB,EAAezhY,MAAM,GAAGrwD,GAC3D0ld,EAAoBz0Z,KAAKjkB,GACzB04a,EAAoBz2c,QAAQozZ,OAAQ,EACpCqjD,EAAoBz2c,QAAQlF,UAAYy3Z,GAAUO,KAClD/oY,EAAQliB,SAAS5V,KAAKwkd,EAAoBz2c,SAC1Cy2c,EAAoBzhZ,OAAS,IAC7B,IAAIg9W,EAAQvkb,KAAK4jd,kBAAkBrjd,EAAK+C,IACnCihb,IACDA,MAECA,EAAMx5X,EAAWznD,MAClBihb,EAAMx5X,EAAWznD,QASrB,OALAihb,EAAMx5X,EAAWznD,IAAW,KAAI8xb,EAChC7Q,EAAMx5X,EAAWznD,IAAW,UAAI0ld,EAChChpd,KAAK4jd,kBAAkBrjd,EAAK+C,IAAMihb,EAClCj0Y,EAAQ+oZ,WAAWjE,OAAgBl6b,GAAW,GAC9Ck6b,EAAe7tX,OAAS,IACjBshZ,GAGXlF,EAAavod,UAAU8od,yBAA2B,SAAU5za,EAASya,EAAYzuB,GAC7EyuB,EAAWznD,GAAKynD,EAAWznD,IAAMk3D,KACjC,IAAIyuZ,EAAuB,IAAI9gD,GAC3B2gD,EAAiB,IAAIjsa,GACrBqsa,EAAa,IAAI35Z,GAErBu5Z,EAAexld,GAAK,IAAMynD,EAAWznD,GAAK,QAC1Cwld,EAAe9yc,MAAQ+0C,EAAW/0C,MAClC8yc,EAAe/yc,OAASg1C,EAAWh1C,OACnC+yc,EAAep+Z,aAAe,SAC9Bw+Z,EAAW5ld,GAAKynD,EAAWznD,GAAK,QAChC4ld,EAAW5sb,QAAUyuB,EAAWlwB,MAAMkwB,WAAW/7B,KACjD,IAAIwyN,EAAYz2L,EAAWrmD,MAC3Bwkd,EAAWxkd,OACP0qB,SAAUoyN,EAAUpyN,SAAU+/B,OAAQqyL,EAAUryL,OAAQG,SAAU,KAAM7hD,QAAS+zO,EAAU/zO,QAC3FwhD,KAAMuyL,EAAUvyL,KAAMC,aAAcsyL,EAAUtyL,aAAc74B,MAAOmrN,EAAUnrN,MAAO6J,KAAM,QAC1F1Q,WAAYgyN,EAAUhyN,WAAYC,WAAY+xN,EAAU/xN,WAAYmT,aAAc,OAClFksB,YAAa,OAAQE,YAAa,EAClCD,gBAAiByyL,EAAUzyL,gBAAiBK,UAAWoyL,EAAUpyL,UAAWC,eAAgBmyL,EAAUnyL,gBAE1G65Z,EAAWh5Z,oBAAsB,OACjCg5Z,EAAW/4Z,kBAAoB,SAC/B+4Z,EAAWx+Z,aAAe,SAC1Bw+Z,EAAWlqb,QAAWxyB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GACzDs8c,EAAqBp9c,QAAUk/C,EAAWl/C,QAAUk/C,EAAWlwB,MAAMkwB,WAAWvuD,OAC5E6P,KAAKyV,IAAIipC,EAAWlwB,MAAMkwB,WAAWnpC,OAASvV,KAAKmR,GAAK,MAC5Dyrc,EAAqBh9c,QAAU8+C,EAAW9+C,QAAU8+C,EAAWlwB,MAAMkwB,WAAWvuD,OAC5E6P,KAAK0V,IAAIgpC,EAAWlwB,MAAMkwB,WAAWnpC,OAASvV,KAAKmR,GAAK,MAC5Dyrc,EAAqBtjD,OAAQ,EAE7BsjD,EAAqB3ld,GAAKynD,EAAWznD,GAAK,mBAAqBynD,EAAWznD,GAC1E2ld,EAAqBvkd,MAAMoqD,YAAc,cACzCm6Z,EAAqBjqb,QAAWxyB,KA3BnB,GA2BiCC,MA3BjC,GA2BgDC,IA3BhD,GA2B6DC,OA3B7D,IA4Bbs8c,EAAqBv+Z,aAAe,SACpCu+Z,EAAqB5ta,YAAc,EACnC4ta,EAAqB7uc,UAAY0uc,EAAgBI,GACjD,IAAIC,EAAmB,IAAI3ma,GAAKuI,EAAWlwB,MAAO,eAAiBv3B,GAAI2ld,EAAqB3ld,GAAIu3B,OAASn0B,KAAM,OAAQm0B,MAAO,oBAAsB,GACpJsub,EAAiBx1Z,QAETrwD,GAAIwld,EAAexld,GAAK,QAASu3B,MAAO,SACxClvB,QAAUoB,EAAG,EAAGC,EAAG,MAG3Bm8c,EAAiBt9c,QAAUo9c,EAAqBp9c,QAChDs9c,EAAiBl9c,QAAUg9c,EAAqBh9c,QAC5Ck9c,EAAiBtub,OAASsub,EAAiBtub,MAAMkwB,aACjDo+Z,EAAiBn6b,KAAO+7B,EAAWlwB,MAAMkwB,WAAW/7B,KACpDm6b,EAAiBvnc,MAAQmpC,EAAWlwB,MAAMkwB,WAAWnpC,MACrDunc,EAAiB3sd,OAASuuD,EAAWlwB,MAAMkwB,WAAWvuD,QAE1D2sd,EAAiBnzc,MAAQ+0C,EAAW/0C,MACpCmzc,EAAiBpzc,OAASg1C,EAAWh1C,OACrCozc,EAAiB52c,QAAU02c,EAC3BA,EAAqB7uc,SAAS5V,KAAK2kd,EAAiBr3C,gBAAgBq3C,EAAiBx1Z,MAAM,KAC3F,IAAIp9B,EAAS,IAAIR,GAAK,EAAG,EAAG,EAAG,GAC3B/f,EAAQ+0C,EAAW/0C,OAAS,EAC5BD,EAASg1C,EAAWh1C,QAAU,EAKlC,YAJc7a,IAAV8a,QAAkC9a,IAAX6a,IACvBwgB,EAAS,IAAIR,GAAKg1B,EAAWl/C,QAAUmK,EAAQ,EAAG+0C,EAAW9+C,QAAU8J,EAAS,EAAGC,EAAOD,IAE9F/V,KAAK+od,kBAAkBxyb,EAAQ0yb,GAAwBl8c,EAAGo8c,EAAiBt9c,QAASmB,EAAGm8c,EAAiBl9c,SAAWk9c,EAAkBp+Z,EAAWvuD,OAAQuuD,EAAWnpC,OAC5Jqnc,GAGXtF,EAAavod,UAAU+0c,yBAA2B,SAAU5vc,EAAM+C,GAC9D,GAAI/C,GAA4B,SAApBA,EAAKs6B,MAAMn0B,KAAiB,CAEpC,GAAoB,mBADRnG,EAAKs6B,MACPA,MACN,OAAOt6B,EAAKgS,QAAQ6H,SAAS,GAE5B,GAAIpa,KAAK4jd,kBAAkBrjd,EAAK+C,KAAOtD,KAAK4jd,kBAAkBrjd,EAAK+C,IAAIA,GAAK,CAC7E,IAAI8xb,EAAiBp1b,KAAK4jd,kBAAkBrjd,EAAK+C,IAAIA,GAAI/C,KACzD,OAAOP,KAAKmwc,yBAAyB/a,EAAgB9xb,IAG7D,OAAO,MAGXqgd,EAAavod,UAAUg0c,cAAgB,SAAU7uc,EAAMwqD,EAAYza,GAC/D,IAAI84a,EAAmB7od,EAAKgS,QAAQ6H,SAAS,GACzCygB,EAAQt6B,EAAKs6B,MACjBkwB,EAAWoK,OAAS50D,EAAK+C,GACzB,IAAI+xb,EAAgB,IAAIzkB,GAAe/1Y,EAAO,cAAekwB,GAAY,GAKzE,OAJAlwB,EAAM2uB,YAAYhlD,KAAK6wb,GACvB+zB,EAAiBhvc,SAAS5V,KAAKxE,KAAKmkd,sBAAsB5jd,EAAM+vC,EAASya,EAAYq+Z,IACrF7od,EAAKgS,QAAQiiD,QAAQ,IAAI7kC,IACzBpvB,EAAKgS,QAAQkiD,QAAQl0D,EAAKgS,QAAQmiD,aAC3B10D,KAAK4jd,kBAAkBrjd,EAAK+C,IAAIynD,EAAWznD,IAAIs3C,WAE1D+oa,EAAavod,UAAUiud,iBAAmB,SAAUvsd,EAAKwzC,GACrD,IAAI8za,EAAYtnd,EAAI+9B,MACpB,GAAIupb,EAAU56Z,YAAYhtD,OACtB,IAAK,IAAI4B,EAAK,EAAGyE,EAAKuhd,EAAU56Z,YAAaprD,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC/D,IAAI2sD,EAAaloD,EAAGzE,GACpB4B,KAAKspd,wBAAwBxsd,EAAKiuD,EAAYza,UAG/CtwC,KAAK4jd,kBAAkB9md,EAAIwG,KAGtCqgd,EAAavod,UAAUk6b,0BAA4B,SAAU/0b,EAAM+vC,GAI/D,GAAwB,SAApB/vC,EAAKs6B,MAAMn0B,KACX,GAAyB,mBAArBnG,EAAKs6B,MAAMA,MAMX,IAAK,IALDv3B,EAAK/C,EAAK+C,GAAGpG,MAAM,KACnBs2D,EAAelwD,EAAGA,EAAG9G,OAAS,GAC9B24D,EAAS7xD,EAAGA,EAAG9G,OAAS,IAAM8G,EAAG,GACjC7C,EAAa6vC,EAAQqY,UAAUwM,GAC/BivZ,EAAY3jd,EAAWo6B,MAClBz8B,EAAK,EAAGyE,EAAKuhd,EAAU56Z,YAAaprD,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC/D,IAAI2sD,EAAaloD,EAAGzE,GACpB,GAAI2sD,EAAWznD,KAAOkwD,EAAc,CAEhC,IAAe,IADH4wZ,EAAU56Z,YAAYjrD,QAAQwsD,GAItC,OAFAza,EAAQg/Z,yBAAyB/uc,GACjCP,KAAKspd,wBAAwB7od,EAAYsqD,EAAYza,IAC9C,QAKd/vC,EAAKs6B,MAAM2uB,aAAejpD,EAAKs6B,MAAM2uB,YAAYhtD,QACtDwD,KAAKqpd,iBAAiB9od,EAAM+vC,GAGpC,OAAO,GAEXqza,EAAavod,UAAUkud,wBAA0B,SAAU7od,EAAYsqD,EAAYza,GAC/E,IAAI8za,EAAY3jd,EAAWo6B,MACvB/oB,EAAQsyc,EAAU56Z,YAAYjrD,QAAQwsD,GAC1C,IAAe,IAAXj5C,EAAc,CACd,KAAMw+B,EAAQyU,eAAiBC,GAAcwyY,UAAelnZ,EAAQyU,eAAiBC,GAAcsyY,OAAQ,CACvG,IAAIpR,GACAx/a,KAAM,oBAAqB0nc,WAAY,SAAU3pB,WAAYx4X,GAAYlB,GACzEy5X,WAAYv4X,GAAYlB,GAAaiuJ,SAAU,YAEnD1oK,EAAQo0Y,gBAAgBwB,GAE5Bk+B,EAAU56Z,YAAY7gC,OAAO7W,EAAO,GACpC,IAAIyya,EAAQvkb,KAAK4jd,kBAAkBnjd,EAAW6C,IAC9C,GAAIihb,GAASA,EAAMx5X,EAAWznD,IAAK,CAC/B,IAAI8xb,EAAiB7Q,EAAMx5X,EAAWznD,IAAI/C,KACtCyod,EAAsBzkC,EAAMx5X,EAAWznD,IAAIs3C,UAC/CtK,EAAQk/Z,eAAepa,GACvB9kZ,EAAQk/Z,eAAewZ,GACvB,IAAIO,EAAc9od,EAAW8R,QAAQ6H,SAAS,GAC9CtI,EAAQy3c,EAAYnvc,SAAS7b,QAAQ62b,EAAe7ib,SACpDg3c,EAAYnvc,SAASuO,OAAO7W,EAAO,GACnCA,EAAQy3c,EAAYnvc,SAAS7b,QAAQyqd,EAAoBz2c,SACzDg3c,EAAYnvc,SAASuO,OAAO7W,EAAO,GACnCw+B,EAAQgpZ,gBAAgBlE,GACxB9kZ,EAAQgpZ,gBAAgB0vB,UACjB14a,EAAQqY,UAAUysY,EAAe9xb,WACjCgtC,EAAQqY,UAAUqga,EAAoB1ld,WACtCihb,EAAMx5X,EAAWznD,OAIpCqgd,EAAavod,UAAU2td,kBAAoB,SAAUS,EAAcj3c,EAAS2B,EAAU3T,EAAM/D,EAAQolB,GAChG,IAAIy5B,EAAcr7C,KAAKypd,uBAAuBv1c,EAAUs1c,GACpDjtd,EAAO,GACP6zU,EAAc79T,EAAQ6H,SAAS,GAC/Bm5a,EAAchhb,EAAQ6H,SAAS,GAC/B+b,EAAc5jB,EAAQ6H,SAAS,GACnCg2T,EAAYlgR,oBAAsB,UAClCkgR,EAAYjgR,kBAAoB,UAChCh6B,EAAY6I,OAAOxyB,KAAO2pB,EAAY6I,OAAOvyB,MAAQ,EACrD0pB,EAAY6I,OAAOtyB,IAAMypB,EAAY6I,OAAOryB,OAAS,EACrD,IAAIgnB,EACAkZ,EACgB,IAAhBwO,GACA9+C,EAAO,0BACP6zU,EAAYp6T,MAAQ,GACpBo6T,EAAYlgR,oBAAsB,OAClCqjY,EAAY1tB,6BAA6B,EAAG,GAAK,YACjD1vY,EAAY6I,OAAOtyB,IAAMypB,EAAY6I,OAAOryB,OAAS,GACrDgnB,EAAQ61b,EAAa5ya,YACrB/J,GACItP,GAAIisb,EAAa/8c,MAAO+wB,GAAIgsb,EAAa98c,IACzC+wB,GAAI+rb,EAAa/8c,MAAOixB,GAAI8rb,EAAa78c,SAGxB,MAAhB0uC,GACL9+C,EAAO,0BACP6zU,EAAYp6T,MAAQ,GACpBo6T,EAAYlgR,oBAAsB,QAClCqjY,EAAY1tB,6BAA6B,EAAG,GAAK,YACjD1vY,EAAY6I,OAAOtyB,IAAMypB,EAAY6I,OAAOryB,OAAS,GACrDgnB,EAAQ61b,EAAalya,WACrBzK,GACItP,GAAIisb,EAAah9c,KAAMgxB,GAAIgsb,EAAa98c,IACxC+wB,GAAI+rb,EAAah9c,KAAMkxB,GAAI8rb,EAAa78c,SAGvB,KAAhB0uC,GACL9+C,EAAO,0BACP6zU,EAAYr6T,OAAS,GACrBq6T,EAAYjgR,kBAAoB,MAChCojY,EAAY1tB,6BAA6B,GAAK,EAAG,YACjD1vY,EAAY6I,OAAOxyB,KAAO2pB,EAAY6I,OAAOvyB,MAAQ,GACrDknB,EAAQ61b,EAAavya,aACrBpK,GACItP,GAAIisb,EAAa/8c,MAAO+wB,GAAIgsb,EAAa78c,OACzC8wB,GAAI+rb,EAAah9c,KAAMkxB,GAAI8rb,EAAa78c,UAI5CpQ,EAAO,0BACP6zU,EAAYr6T,OAAS,GACrBq6T,EAAYjgR,kBAAoB,SAChCojY,EAAY1tB,6BAA6B,GAAK,EAAG,YACjD1vY,EAAY6I,OAAOxyB,KAAO2pB,EAAY6I,OAAOvyB,MAAQ,GACrDknB,EAAQ61b,EAAal2a,UACrBzG,GACItP,GAAIisb,EAAa/8c,MAAO+wB,GAAIgsb,EAAa98c,IACzC+wB,GAAI+rb,EAAah9c,KAAMkxB,GAAI8rb,EAAa98c,MAGhD,IAAI6mB,EAASi2b,EAAaj2b,OAE1BI,EAAQmpB,GAAsBjQ,GAAUtZ,EADzBshB,GAAMxnC,UAAU6G,EAAU0N,EAAOvV,KAAKC,IAAIk9c,EAAaxzc,MAAOwzc,EAAazzc,UAC/B,EAAOwd,GAClE68S,EAAY7zU,KAAOA,OACJrB,IAAXsB,QAAkCtB,IAAV0mB,IACxB+R,EAAQkhB,GAAMxnC,UAAUsmB,EAAO/R,EAAOplB,GACtC+V,EAAQ1G,QAAUtL,EAAKsL,QAAU8nB,EAAM5mB,EACvCwF,EAAQtG,QAAU1L,EAAK0L,QAAU0nB,EAAM3mB,IAG/C22c,EAAavod,UAAU0+c,qBAAuB,SAAUvnB,EAAajiZ,GACjE,GAAItwC,KAAK4jd,kBAAmB,CACxB,IAAI8F,EAAen3B,EAAY/zX,SAC3BhL,EAAe++X,EAAYjvb,GAC3B7C,EAAa6vC,EAAQqY,UAAU+ga,GACnC,OAAIjpd,GAAwC,SAA1BA,EAAWo6B,MAAMn0B,MAAmB1G,KAAK4jd,kBAAkB8F,IACzE1pd,KAAK4jd,kBAAkB8F,GAAcl2Z,GAC9B/yD,EAEJ,KAEX,OAAO,MAGXkjd,EAAavod,UAAU4+c,4BAA8B,SAAUv5c,EAAY8xb,EAAavja,EAAMshB,GAC1F,IAAIo5a,EAAen3B,EAAY/zX,SAC3BhL,EAAe++X,EAAYjvb,GAC/B,GAAItD,KAAK4jd,kBAAkB8F,IAAiB1pd,KAAK4jd,kBAAkB8F,GAAcl2Z,GAC7E,IAAK,IAAIp1D,EAAK,EAAGyE,EAAKpC,EAAWo6B,MAAM2uB,YAAaprD,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACtE,IAAI2sD,EAAaloD,EAAGzE,GACpB,GAAI2sD,EAAWznD,KAAOkwD,EAAc,CAChCzI,EAAW/7B,KAAOA,EAClB,IAAIzc,EAAUvS,KAAK4jd,kBAAkB8F,GAAcl2Z,GAAcjzD,KAAKgS,QAAQ6H,SAAS,GACvF7H,EAAQ+pB,QAAUtN,EAClBzc,EAAQ+kB,SAAU,EAClB72B,EAAW8R,QAAQiiD,QAAQ,IAAI7kC,IAC/BlvB,EAAW8R,QAAQkiD,QAAQh0D,EAAW8R,QAAQmiD,gBAK9DivZ,EAAavod,UAAUutc,WAAa,SAAU74Y,EAAcxf,GACxD,IACI8kZ,EADArqY,EAAa+E,EAAaj1B,MAAM2uB,YAEpC,GAAIuB,GAAcA,EAAWvuD,OAAS,EAClC,IAAK,IAAIN,EAAI,EAAGA,EAAI6uD,EAAWvuD,OAAQN,IACnCk5b,EAAiBp1b,KAAK4jd,kBAAkB9zZ,EAAaxsD,IAAIynD,EAAW7uD,GAAGoH,IAAI/C,KAC3E+vC,EAAQq4Z,WAAWvT,IAK/BuuB,EAAavod,UAAU6/c,yBAA2B,SAAUnrZ,EAAcS,EAAWjgB,GACjF,GAAgC,SAA5Bwf,EAAaj1B,MAAMn0B,KAAiB,CACpC,IAAIqkD,EAAa+E,EAAaj1B,MAAM2uB,YACpC,GAAIuB,GAAcA,EAAWvuD,OAAS,EAClC,IAAK,IAAIN,EAAI,EAAGA,EAAI4zD,EAAav9C,QAAQ6H,SAAS,GAAGA,SAAS5d,OAAQN,IAClE,IAAK,IAAIwnB,EAAI,EAAGA,EAAIqnC,EAAWvuD,OAAQknB,IAAK,CACxC,IAAI8vC,EAAe1D,EAAav9C,QAAQ6H,SAAS,GAAGA,SAASle,GAAGoH,GAAGpG,MAAM,KAEzE,GADSs2D,EAAaA,EAAah3D,OAAS,KACjCuuD,EAAWrnC,GAAGpgB,GAAI,CACzB,IAAI8xb,EAAiBp1b,KAAK4jd,kBAAkB9zZ,EAAaxsD,IAAIynD,EAAWrnC,GAAGpgB,IAAI/C,KAC3Eq6C,EAAY56C,KAAK4jd,kBAAkB9zZ,EAAaxsD,IAAIynD,EAAWrnC,GAAGpgB,IAAIs3C,UAEtE1mC,GADY29B,GAAiB+I,EAAUd,YAAagW,EAAav9C,QAAQgkB,OAAQu5B,EAAav9C,QAAQgkB,QAC3FqkB,EAAUrJ,aACzBr9B,GACInH,EAAG6tC,EAAUrJ,YAAYxkC,EAAI+iD,EAAajkD,QAAW0kD,EAAiB,QACtEvjD,EAAG4tC,EAAUrJ,YAAYvkC,EAAI8iD,EAAa7jD,QAAWskD,EAAiB,SAE1Er8C,EAAW2gC,GAAMxnC,UAAU6G,EAAU62C,EAAWrnC,GAAG9B,MAAOmpC,EAAWrnC,GAAGlnB,QACxEszD,EAAav9C,QAAQ6H,SAAS,GAAGA,SAASle,GAAG2P,QACzCupb,EAAevpb,QAAUqI,EAASnH,EACtC+iD,EAAav9C,QAAQ6H,SAAS,GAAGA,SAASle,GAAG+P,QACzCmpb,EAAenpb,QAAUiI,EAASlH,EACtCsjC,EAAQq4Z,WAAWvT,OAkB3CuuB,EAAavod,UAAUisd,wBAA0B,SAAU9md,GACvD,IAEIold,EAFAzmc,EAAQ,EAGRoyZ,EAFQ/wa,EAAKs6B,MAAM02Y,SAEAD,WAiBvB,YAfiBp2a,KADjByqd,EAAWr0C,EAAWs0C,OACqB,SAAbD,GAC1Bzmc,SAE6BhkB,IAA5Bo2a,EAAW00C,eACgB,IAA5B10C,EAAW00C,cACX9mc,SAE0BhkB,IAAzBo2a,EAAWI,YACa,IAAzBJ,EAAWI,WACXxyZ,SAEsBhkB,IAArBo2a,EAAWy1C,QACS,IAArBz1C,EAAWy1C,OACX7nc,IAEGA,GAGXykc,EAAavod,UAAUkqd,kBAAoB,SAAU/kd,GACjD,IAAI2e,EAAQ,EAERgmc,EADQ3kd,EAAKs6B,MAAM02Y,SACN2zC,KAUjB,YAR2Bhqd,IAAtBgqd,EAAKc,eACgB,IAAtBd,EAAKc,cACL9mc,SAEehkB,IAAdgqd,EAAKU,MACQ,SAAdV,EAAKU,MACL1mc,IAEGA,GAGXykc,EAAavod,UAAUkmC,SAAW,SAAUjhC,EAAOE,GAE/CF,EAAMqE,MAAMw7B,KAAO3/B,EAAKmE,MAAMw7B,KAC9B7/B,EAAMqE,MAAMoqD,YAAcvuD,EAAKmE,MAAMoqD,YACrCzuD,EAAMqE,MAAMsqD,YAAczuD,EAAKmE,MAAMsqD,YACrC3uD,EAAMqE,MAAMqqD,gBAAkBxuD,EAAKmE,MAAMqqD,gBACzC1uD,EAAMqE,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QACjCpN,EAAMqE,MAAM4qD,SAAW/uD,EAAKmE,MAAM4qD,SACkB,IAA/C/uD,EAAK2gD,YAAcK,GAAgBe,UACpCjiD,EAAM23D,OAASz3D,EAAKy3D,SAO5B2rZ,EAAavod,UAAUy/c,WAAa,SAAUhlF,EAAatlU,EAAWT,EAAcxf,GAChF,IAAIq5a,EAAW9zF,EAAYh7V,UACvBisb,EAAiBh3Z,EAAav9C,QAAQ6H,SAAS,GAC/Cwvc,EAAc95Z,EAAaj1B,MAAMA,MACjCgvb,OAAoC3ud,IAAtB26X,EAAY7/W,YAA8C9a,IAAvB26X,EAAY9/W,OACjE,GAAuB,YAAnB4zc,EAAS9ub,OAAuB8ub,EAASjF,QACzC50Z,EAAav9C,QAAQ6H,SAAS,GAAKpa,KAAK8jd,oBAAoBh0Z,QAE3D,GAAuB,eAAnB65Z,EAAS9ub,OAA0B8ub,EAAS9E,WACjD/0Z,EAAav9C,QAAQ6H,SAAS,GAAKpa,KAAK+jd,uBAAuBj0Z,QAE9D,GAAuB,aAAnB65Z,EAAS9ub,OAAwB8ub,EAASp4C,SAC/CzhX,EAAav9C,QAAQ6H,SAAS,GAAKpa,KAAKikd,qBAAqBn0Z,QAE5D,GAAuB,UAAnB65Z,EAAS9ub,OAAqB8ub,EAASttd,MAAO,CACnD,IAAI+pd,EAAauD,EAASttd,MAC1ByzD,EAAav9C,QAAQ6H,SAAS,GAAKpa,KAAK6jd,kBAAkB/zZ,EAAcs2Z,OAEhD,YAAnBuD,EAAS9ub,OAA0C,eAAnB8ub,EAAS9ub,MAC9Ci1B,EAAav9C,QAAQ6H,SAAS,GAAKpa,KAAKgkd,cAAcl0Z,QAK5B50D,IAArByud,EAASjF,SAA0C,YAAhBkF,GAA6BC,EACrE7pd,KAAK8pd,kBAAkBh6Z,EAAc+lU,QAER36X,IAAxByud,EAAS9E,YAA6C,eAAhB+E,GAAgCC,EAC3E7pd,KAAK+pd,qBAAqBj6Z,EAAc+lU,EAAatlU,QAE1Br1D,IAAtByud,EAASp4C,UAA2C,aAAhBq4C,GAA8BC,EACvE7pd,KAAKgqd,mBAAmBl6Z,EAAc+lU,EAAatlU,EAAWjgB,SAEtCp1C,IAAnByud,EAASttd,OAAwC,UAAhButd,GAA2BC,IACjE7pd,KAAKiqd,gBAAgBn6Z,EAAc+lU,EAAatlU,GAEhDslU,EAAYnxX,OACZiqD,GAAYknU,EAAYnxX,MAAOoid,aAA0B5yZ,GAA0C,aAA7BpE,EAAaj1B,MAAMA,MACrFisb,EAAe1sc,SAAS,GAAGA,SAAS,GACpC0sc,EAAe1sc,SAAS,GAAK0sc,IAIzCnD,EAAavod,UAAU0ud,kBAAoB,SAAUvpd,EAAMs1X,GACvD,IAAIuuF,EAAY7jd,EAAKs6B,MACjBisb,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GAC3C,GAAIgqc,EAAW,CACXz1Z,GAAYpuD,EAAKmE,MAAOoid,EAAe1sc,SAAS,IAChD,IAAI8vc,EAAuBlrZ,GAA4BolZ,EAAUM,QAAQh+c,MACzEogd,EAAe1sc,SAAS,GAAG7d,KAAO2td,OAEZhvd,IAAtB26X,EAAY7/W,YAA8C9a,IAAvB26X,EAAY9/W,QAC/C/V,KAAK2kd,sBAAsBpkd,EAAKs6B,MAAM6pb,QAASoC,EAAgBjxF,EAAY7/W,OAASzV,EAAKyV,MAAO6/W,EAAY9/W,QAAUxV,EAAKwV,SAInI4tc,EAAavod,UAAU2ud,qBAAuB,SAAUxpd,EAAMo6D,EAAWpK,GACrE,IAAI6zZ,EAAYzpZ,EAAU9/B,MACtBisb,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GAC3C,GAAIgqc,EAAW,CACX,IAAI+F,EAAuBrD,EAAe1sc,SAAS,GAC/Cgwc,EAAuBtD,EAAe1sc,SAAS,GAMnD,QALwBlf,IAApBy/D,EAAUj2D,QACViqD,GAAYgM,EAAUj2D,MAAOoid,EAAe1sc,SAAS,IACrD+vc,EAAqBzld,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAChD28c,EAAqB1ld,MAAM+I,QAAUlN,EAAKmE,MAAM+I,SAEhD22c,EAAUS,WAAY,CACtB,OAAQT,EAAUS,WAAWn+c,MACzB,IAAK,OACDyjd,EAAqB7yb,SAAU,EAC/B,MACJ,IAAK,QACD6yb,EAAqBzld,MAAMw7B,KAAO,QAClC,MACJ,IAAK,SACDiqb,EAAqBzld,MAAMw7B,KAAO,QAGF,SAApCqwB,EAAU11B,MAAMgqb,WAAWn+c,OAC3Byjd,EAAqB7yb,SAAU,QAEWp8B,IAA1Cy/D,EAAU9/B,MAAMgqb,WAAWx6a,aAC3B+/a,EAAqB9yb,QAAU8sb,EAAUS,WAAWx6a,kBAIxCnvC,IAApBy/D,EAAU3kD,YAA4C9a,IAArBy/D,EAAU5kD,QAC3C/V,KAAKqqd,0BAA0B9pd,EAAKs6B,MAAMgqb,WAAYiC,EAAgBnsZ,EAAU3kD,OAASzV,EAAKyV,MAAO2kD,EAAU5kD,QAAUxV,EAAKwV,SAItI4tc,EAAavod,UAAUm0F,SAAW,SAAUhvF,EAAMgwD,EAAWl0D,EAAOiud,EAAQC,EAAQC,GAChF,OAAQnud,GACJ,IAAK,QACDkud,EAAOjzb,SAAU,EACjBgzb,EAAO5ld,MAAMqqD,gBAAkB,GAC/By7Z,EAAO9ld,MAAMw7B,KAAO,QACpBsqb,EAAO9ld,MAAMoqD,YAAc,QAC3Bw7Z,EAAO5ld,MAAMw7B,KAAO,QACpB,MACJ,IAAK,uBACDoqb,EAAO5ld,MAAMqqD,gBAAkB,MAC/By7Z,EAAO9ld,MAAMw7B,KAAO,QACpBoqb,EAAO5ld,MAAMw7B,KAAO,QACpBsqb,EAAO9ld,MAAMoqD,YAAc,QAC3By7Z,EAAOjzb,SAAU,EACjB,MACJ,IAAK,eACDgzb,EAAO5ld,MAAMqqD,gBAAkB,GAC/Bu7Z,EAAO5ld,MAAMw7B,KAAO,QACpBqqb,EAAO7ld,MAAMqqD,gBAAkB,GAC/Bu7Z,EAAO5ld,MAAM4qD,SAAW,KACxBk7Z,EAAO9ld,MAAMw7B,KAAO,QACpBsqb,EAAO9ld,MAAMoqD,YAAc,QAC3B9uD,KAAKyqd,sBAAsBl6Z,EAAWg6Z,GACtC,MACJ,IAAK,8BACDD,EAAO5ld,MAAMw7B,KAAO,QACpBoqb,EAAO5ld,MAAM4qD,SAAW,KACxBk7Z,EAAO9ld,MAAMw7B,KAAO,QACpBsqb,EAAO9ld,MAAMoqD,YAAc,QAC3Bw7Z,EAAO5ld,MAAMqqD,gBAAkB,MAC/Bw7Z,EAAO7ld,MAAMqqD,gBAAkB,MAC/B/uD,KAAKyqd,sBAAsBl6Z,EAAWg6Z,GACtC,MACJ,IAAK,uBACL,IAAK,MACDD,EAAO5ld,MAAMw7B,KAAiB,QAAV7jC,EAAkB,QAAU,QAChDiud,EAAO5ld,MAAMqqD,gBAAkB,GAC/Bw7Z,EAAO7ld,MAAMqqD,gBAAkB,GAC/Bu7Z,EAAO5ld,MAAM4qD,SAAW,KACxBk7Z,EAAO9ld,MAAMw7B,KAAO,QACpBlgC,KAAKyqd,sBAAsBl6Z,EAAWg6Z,GACtCC,EAAO9ld,MAAMoqD,YAAcvuD,EAAKmE,MAAMw7B,OAKlDyjb,EAAavod,UAAUqvd,sBAAwB,SAAUl6Z,EAAWg6Z,GAC5Dh6Z,EAAU11B,MAAM02Y,UAAYhhX,EAAU11B,MAAM02Y,SAASD,YACrD/gX,EAAU11B,MAAM02Y,SAASD,WAAW3na,aACczO,IAAlDq1D,EAAU11B,MAAM02Y,SAASD,WAAW3na,OAAO,SACazO,IAAxDq1D,EAAU11B,MAAM02Y,SAASD,WAAW3na,OAAO,GAAGtN,MACc,yBAAxDk0D,EAAU11B,MAAM02Y,SAASD,WAAW3na,OAAO,GAAGtN,OACU,UAAxDk0D,EAAU11B,MAAM02Y,SAASD,WAAW3na,OAAO,GAAGtN,QAC9Ckud,EAAOjzb,SAAU,QAGUp8B,IAA1Bq1D,EAAU11B,MAAMx+B,QACe,yBAAhCk0D,EAAU11B,MAAMx+B,MAAMA,OACU,UAAhCk0D,EAAU11B,MAAMx+B,MAAMA,QACtBkud,EAAOjzb,SAAU,KAK7Bqsb,EAAavod,UAAU6ud,gBAAkB,SAAU1pd,EAAMo6D,EAAWpK,GAChE,IAAI6zZ,EAAYzpZ,EAAU9/B,MACtBisb,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GAC3C,GAAIgqc,EAAW,CACX,IAGI5wc,EAHAk3c,EAAuB5D,EAAe1sc,SAAS,GAC/C+vc,EAAuBrD,EAAe1sc,SAAS,GAC/Cgwc,EAAuBtD,EAAe1sc,SAAS,GAE/CuM,OAAU,OACUzrB,IAApBy/D,EAAUj2D,QACViqD,GAAYpuD,EAAKmE,MAAOoid,EAAe1sc,SAAS,SAChBlf,IAA5By/D,EAAUj2D,MAAM+I,cAAyDvS,IAAhCy/D,EAAUj2D,MAAMoqD,cACzDq7Z,EAAqBzld,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAChD08c,EAAqBzld,MAAMoqD,YAAcvuD,EAAKmE,MAAMoqD,cAG5Dt7C,EAAU4wc,EAAU/nd,MAAMA,MAC1BsqB,EAAUy9b,EAAU/nd,MAAMsqB,aACVzrB,IAAZsY,GACAxT,KAAKuvF,SAAShvF,EAAMgwD,EAAW/8C,EAASk3c,EAAsBP,EAAsBC,QAExElvd,IAAZyrB,GACA3mB,KAAK2qd,uBAAuBpqd,EAAMo6D,QAGlBz/D,IAApBy/D,EAAU3kD,YAA4C9a,IAArBy/D,EAAU5kD,QAC3C/V,KAAK0md,qBAAqBnmd,EAAKs6B,MAAMx+B,MAAOyqd,EAAgBnsZ,EAAU3kD,OAASzV,EAAKyV,MAAO2kD,EAAU5kD,QAAUxV,EAAKwV,SAI5H4tc,EAAavod,UAAUuvd,uBAAyB,SAAUpqd,EAAMo6D,GAC5D,IAAIypZ,EAAY7jd,EAAKs6B,MACjBisb,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GAAGA,SAAS,IACnDugD,EAAUj2D,YACuBxJ,IAAhCy/D,EAAUj2D,MAAMoqD,kBAAyD5zD,IAA5By/D,EAAUj2D,MAAM+I,SAC9DkhD,GAAYpuD,EAAKmE,MAAOoid,GAE5B,IAAI8D,EAAuB9rZ,GAA4BslZ,EAAU/nd,MAAMsqB,SACvEmgc,EAAevqd,KAAOqud,GAG1BjH,EAAavod,UAAU4ud,mBAAqB,SAAUzpd,EAAMo6D,EAAWpK,EAAWjgB,GAC9E,IAAI8za,EAAYzpZ,EAAU9/B,MACtBisb,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GACvCiV,EAAOrvB,KAAK4gB,QAAQrgB,EAAMumd,EAAe1sc,SAAS,GAAGA,SAAS,IAClE,GAAIgqc,EAAW,CACX,IAAItxX,EAAUviC,EAAU11B,MAAM02Y,SAASA,SACnCs5C,EAAmBtqd,EAAKs6B,MAAM02Y,SAASA,SAC3C,GAAiB,eAAZz+U,GAAwC,SAAZA,GAA6C,eAArB+3X,GAA0D,SAArBA,EAIzF,CACD,GAAyB,SAArBA,QAA2D3vd,IAA5Bkpd,EAAU7yC,SAAS2zC,KAAoB,CACtElld,KAAK8qd,uBAAuBvqd,EAAMo6D,GAClC,IAAIysZ,EAAgBpnd,KAAKsld,kBAAkB/kd,GACvCwM,OAAI,EACJw4c,EAA6B,GAAhB6B,EACbltW,EAAO7qF,EAAKrZ,MAAQ,EAAIuvc,EAExBx4c,EADkB,IAAlBq6c,EACIltW,EAAO,EAGPA,EAA6B,GAArBktW,EAAgB,QAEKlsd,IAAjCkpd,EAAU7yC,SAAS2zC,KAAKU,MACxB5ld,KAAK+qd,2BAA2Bxqd,EAAMo6D,EAAW5tD,EAAGq6c,EAAeltW,EAAM,GAGxD,eAArB2wW,QAAuE3vd,IAAlCkpd,EAAU7yC,SAASD,YACxDtxa,KAAKgrd,6BAA6Bzqd,EAAMo6D,EAAWpK,EAAWjgB,QArBlEA,EAAQk/Z,eAAejvc,GACvBA,EAAKgS,QAAQ6H,SAAS,GAAKpa,KAAKikd,qBAAqB1jd,GAuBzDP,KAAKird,uBAAuB1qd,EAAKs6B,MAAM02Y,SAAUu1C,EAAgBnsZ,EAAU3kD,OAASqZ,EAAKrZ,MAAO2kD,EAAU5kD,QAAUsZ,EAAKtZ,OAAQxV,QAE7GrF,IAApBy/D,EAAU3kD,YAA4C9a,IAArBy/D,EAAU5kD,QAC3C/V,KAAKird,uBAAuB1qd,EAAKs6B,MAAM02Y,SAAUu1C,EAAgBnsZ,EAAU3kD,OAASqZ,EAAKrZ,MAAO2kD,EAAU5kD,QAAUsZ,EAAKtZ,OAAQxV,IAIzIojd,EAAavod,UAAU0vd,uBAAyB,SAAUvqd,EAAMo6D,GAC5D,IAAIypZ,EAAYzpZ,EAAU9/B,MACtBisb,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GAAGA,SAAS,GACnD8qc,EAAOd,EAAU7yC,SAAS2zC,KAO9B,GANkB,YAAdA,EAAKx+c,MAAoC,SAAdw+c,EAAKx+c,KAChCogd,EAAe1sc,SAAS,GAAGrE,OAAS,GAGpC+wc,EAAe1sc,SAAS,GAAGrE,OAAS,QAEtB7a,IAAdgqd,EAAKx+c,KAAoB,CACzB,IAAIwkd,EAAoBhsZ,GAAyBgmZ,EAAKx+c,MACtDogd,EAAe1sc,SAAS,GAAG7d,KAAO2ud,OAEDhwd,IAAjCkpd,EAAU7yC,SAAS2zC,KAAK5jd,QACa,IAAjC8id,EAAU7yC,SAAS2zC,KAAK5jd,KACxBwld,EAAe1sc,SAAS,GAAG1V,MAAMsqD,YAAc,EAG/C83Z,EAAe1sc,SAAS,GAAG1V,MAAMsqD,YAAc,QAGV9zD,IAAzCkpd,EAAU7yC,SAAS2zC,KAAKc,gBACqB,IAAzC5B,EAAU7yC,SAAS2zC,KAAKc,aACxBc,EAAe1sc,SAAS,GAAGkd,SAAU,EAGrCwvb,EAAe1sc,SAAS,GAAGkd,SAAU,IAKjDqsb,EAAavod,UAAU2vd,2BAA6B,SAAUxqd,EAAMo6D,EAAW5tD,EAAGq6c,EAAeltW,EAAM38G,GACnG,IAGIqod,EAEAuF,EALA/G,EAAYzpZ,EAAU9/B,MACtBisb,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GAAGA,SAAS,GACnDm3Z,EAAW6yC,EAAU7yC,SAErBz/Z,EAAQ,EAEZ,QAA4B5W,IAAxBq2a,EAASD,WAA0B,CACnC,IAAIA,EAAaC,EAASD,WAC1Bx/Z,EAAsC,gBAA7By/Z,EAASD,WAAW5qa,KAA0B,EAAI,EAE3Dykd,EAAoB/rZ,GADpBwmZ,EAAOt0C,EAAWs0C,MAElBkB,EAAe1sc,SAAS,EAAItI,GAAOvV,KAAO4ud,EAC1CrE,EAAe1sc,SAAS,EAAItI,GAAOwlB,QAAoB,SAATsub,YAEvB1qd,IAAlBq2a,EAAS2zC,WAA6Chqd,IAAvBq2a,EAAS2zC,KAAKU,OAClDuF,EAAoB/rZ,GAAyBmyW,EAAS2zC,KAAKU,MAC3DkB,EAAe1sc,SAAS,GAAG7d,KAAO4ud,EAClCrE,EAAe1sc,SAAS,GAAGkd,QAAkC,SAAvBi6Y,EAAS2zC,KAAKU,MAExD5ld,KAAKord,kBAAkBtE,EAAgBM,EAAeltW,EAAMntG,EAAGxP,EAAQuU,IAG3E6xc,EAAavod,UAAUgwd,kBAAoB,SAAUtE,EAAgBM,EAAeltW,EAAMntG,EAAGxP,GACzF,GAAsB,IAAlB6pd,EACA,IAAK,IAAIlrd,EAAIqB,EAAOrB,EAAI4qd,EAAe1sc,SAAS5d,OAAQN,IAC1C,IAANA,IAAkD,IAAvC4qd,EAAe1sc,SAASle,GAAGo7B,UACtCwvb,EAAe1sc,SAASle,GAAG8iC,OAAOxyB,KAAOO,EACzCA,EAAImtG,EAAO,OAIlB,CACDntG,EAAImtG,EAA6B,GAArBktW,EAAgB,GAC5B,IAASlrd,EAAIqB,EAAOrB,EAAI4qd,EAAe1sc,SAAS5d,OAAQN,IAC1C,IAANA,IAAkD,IAAvC4qd,EAAe1sc,SAASle,GAAGo7B,UACtCwvb,EAAe1sc,SAASle,GAAG8iC,OAAOxyB,KAAOO,EACzCA,GAAK,MAMrB42c,EAAavod,UAAU4vd,6BAA+B,SAAUzqd,EAAMo6D,EAAWpK,EAAWjgB,GACxF,IAKIvjC,EALAq3c,EAAYzpZ,EAAU9/B,MACtBisb,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GACvCiV,EAAOrvB,KAAK4gB,QAAQrgB,EAAMumd,EAAe1sc,SAAS,GAAGA,SAAS,IAC9Dk3Z,EAAa8yC,EAAU7yC,SAASD,WAChC81C,EAAgBpnd,KAAKqnd,wBAAwB9md,GAE7Cgld,EAA6B,GAAhB6B,EACbltW,EAAO7qF,EAAKrZ,MAAQ,EAAIuvc,EAExBx4c,EADkB,IAAlBq6c,EACIltW,EAAO,EAGPA,EAA6B,GAArBktW,EAAgB,GAEhCz4Z,GAAYpuD,EAAKmE,MAAOoid,EAAe1sc,SAAS,GAAGA,SAAS,SAClClf,IAAtBo2a,EAAW3na,QACX3J,KAAKqrd,0BAA0B9qd,EAAMo6D,EAAWpK,EAAWjgB,QAEtCp1C,IAArBo2a,EAAWy1C,OACX/md,KAAKsrd,0BAA0B/qd,EAAMgwD,EAAW+gX,EAAYvka,EAAGq6c,EAAeltW,QAEtDh/G,IAAxBo2a,EAAWs2C,UACX5nd,KAAKurd,6BAA6Bhrd,EAAM+wa,QAEfp2a,IAAzBo2a,EAAWI,WACX1xa,KAAKwrd,8BAA8Bjrd,EAAMgwD,EAAW+gX,EAAYvka,EAAGq6c,EAAeltW,EAAM5pE,QAE5Dp1C,IAA5Bo2a,EAAW00C,cACXhmd,KAAKyrd,iCAAiClrd,EAAMgwD,EAAW+gX,EAAYvka,EAAGq6c,EAAeltW,QAEjEh/G,IAApBo2a,EAAWs0C,MACX5ld,KAAK0rd,yBAAyBnrd,EAAMgwD,EAAW+gX,EAAYvka,EAAGq6c,EAAeltW,QAElDh/G,IAA3Bo2a,EAAW0jB,aACXh1b,KAAK2rd,gCAAgCprd,EAAMo6D,EAAWpK,EAAWjgB,IAIzEqza,EAAavod,UAAUiwd,0BAA4B,SAAU9qd,EAAMo6D,EAAWpK,EAAWjgB,GAUrF,IAAK,IATD8za,EAAYzpZ,EAAU9/B,MACtBisb,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GACvCmvc,EAAczC,EAAe1sc,SAAS,GAItCk3Z,GADyBw1C,EAAe1sc,SAAS,GAAGA,SAAS5d,OAChD4nd,EAAU7yC,SAASD,YAG3Blza,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKg0a,EAAW3na,QAASvL,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACxE,IAAIf,EAAMwF,EAAGzE,GACTwtd,EAAax0b,OAAO/5B,GACpBwud,EAAetC,EAAYnvc,SAASwxc,EAJhC,GAKJE,EAAcvrd,EAAKs6B,MAAM02Y,SAASD,WAAW3na,OAAOiid,GACxD5rd,KAAK+rd,mBAAmBxrd,EAAM+wa,EAAW3na,OAAOiid,GAAaE,EAAaD,EAAclxZ,EAAWpK,EAAWjgB,KAGtHqza,EAAavod,UAAU2wd,mBAAqB,SAAUxrd,EAAMyrd,EAAUF,EAAaD,EAAclxZ,EAAWpK,EAAWjgB,GACnH,IAKIo3E,EACA/gG,EANAmgc,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GACvCgqc,EAAYzpZ,EAAU9/B,MACtByvb,EAASuB,EAAazxc,SAAS,GAC/Bmwc,EAASsB,EAAazxc,SAAS,GAC/Bowc,EAASqB,EAAazxc,SAAS,GAgBnC,GAbIugD,EAAUj2D,aAC0BxJ,IAAhCy/D,EAAUj2D,MAAMoqD,kBAAyD5zD,IAA5By/D,EAAUj2D,MAAM+I,UAC7Dq5c,EAAe1sc,SAAS,GAAGA,SAAS,GAAG1V,MAAMoqD,YAAc6L,EAAUj2D,MAAMoqD,YAC3Eg4Z,EAAe1sc,SAAS,GAAGA,SAAS,GAAG1V,MAAM+I,QAAUktD,EAAUj2D,MAAM+I,eAGzCvS,IAAlCkpd,EAAU7yC,SAASD,aACnB5pT,EAAYskW,EAAS3vd,MACrBsqB,EAAUqlc,EAASrlc,cAELzrB,IAAdwsH,GACA1nH,KAAKuvF,SAAS50B,EAAWpK,EAAWm3D,EAAW4iW,EAAQC,EAAQC,QAEnDtvd,IAAZyrB,EAAuB,CACnBg0C,EAAUj2D,OACViqD,GAAYgM,EAAUj2D,MAAOoid,EAAe1sc,SAAS,IAEzD,IAAIwwc,EAAuB9rZ,GAA4Bn4C,GACvDklc,EAAazxc,SAAS,GAAG7d,KAAOqud,EAqBpC,QAnBwB1vd,IAApB8wd,EAASj2c,aAA2C7a,IAAnB8wd,EAASh2c,OAC1ChW,KAAKisd,aAAaD,EAAUH,QAEZ3wd,IAAhB8wd,EAAS1od,KACTuod,EAAavod,GAAK0od,EAAS1od,SAEPpI,IAApB8wd,EAAShtb,SACT6sb,EAAa7sb,OAASgtb,EAAShtb,aAEE9jC,IAAjC8wd,EAAS97Z,sBACT27Z,EAAa37Z,oBAAsB87Z,EAAS97Z,0BAEbh1D,IAA/B8wd,EAAS77Z,oBACT07Z,EAAa17Z,kBAAoB67Z,EAAS77Z,wBAEtBj1D,IAApB8wd,EAASrgd,SACTkgd,EAAahmD,6BAA6BimD,EAAYngd,OAAOoB,EAAG++c,EAAYngd,OAAOqB,EAAG,YACtF6+c,EAAanha,aAAe,cAEHxvD,IAAzB8wd,EAASxia,YAA2B,CACpC,IAAIA,OAAc,EACduB,EAAa+7Z,EAAe1sc,SAAS,GAAGA,SAAS,GACjDyxc,EAAazxc,SAAS,IAAMyxc,EAAazxc,SAAS5d,OAAS,IAC3DgtD,EAAcqia,EAAazxc,SAAS,GACpCk2B,EAAQy9X,iBAAiBi+C,EAASxia,YAAY,GAAIA,EAAauB,IAGvE,QAAuB7vD,IAAnB8wd,EAASr4Z,MAAqB,CAC9B,IAAIA,OAAQ,EACR1gB,EAAO6za,EAAe1sc,SAAS,GAAGA,SAAS,GAC3Cyxc,EAAazxc,SAAS,IAAMyxc,EAAazxc,SAAS5d,OAAS,IAC3Dm3D,EAAQk4Z,EAAazxc,SAAS,GAC9Bk2B,EAAQyqa,WAAWiR,EAASr4Z,MAAM,GAAIA,EAAO1gB,SAG5B/3C,IAArB8wd,EAAS10b,SACTt3B,KAAKw3c,iCAAiCqU,EAAcG,EAAS10b,UAGrEqsb,EAAavod,UAAUuwd,gCAAkC,SAAUprd,EAAMo6D,EAAWpK,EAAWjgB,GAC3F,IAEIw7a,EAFA92B,EAAcr6X,EAAU9/B,MAAM02Y,SAASD,WAAW0jB,YAClD+yB,EAAiBxnd,EAAKgS,QAAQ6H,SAAS,GAAGA,SAAS,GAAGA,SAAS,QAEvClf,IAAxB85b,EAAY36L,UACZyxN,EAAcvrd,EAAKs6B,MAAM02Y,SAASD,WAAW0jB,YAAY36L,QACzDr6P,KAAK+rd,mBAAmBxrd,EAAMy0b,EAAY36L,QAASyxN,EAAa/D,EAAe3tc,SAAS,GAAIugD,EAAWpK,EAAWjgB,SAE3Fp1C,IAAvB85b,EAAYp7Z,SACZkyb,EAAcvrd,EAAKs6B,MAAM02Y,SAASD,WAAW0jB,YAAYp7Z,OACzD55B,KAAK+rd,mBAAmBxrd,EAAMy0b,EAAYp7Z,OAAQkyb,EAAa/D,EAAe3tc,SAAS,GAAIugD,EAAWpK,EAAWjgB,SAEzFp1C,IAAxB85b,EAAYC,UACZ62B,EAAcvrd,EAAKs6B,MAAM02Y,SAASD,WAAW0jB,YAAYC,QACzDj1b,KAAK+rd,mBAAmBxrd,EAAMy0b,EAAYC,QAAS62B,EAAa/D,EAAe3tc,SAAS,GAAIugD,EAAWpK,EAAWjgB,IAEtH,IAAK,IAAIlyC,EAAK,EAAGyE,EAAKtC,EAAKuwa,SAAU1ya,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvD,IAAIua,EAAO9V,EAAGzE,GACVw8C,EAAYtK,EAAQqY,UAAUhwC,GAClC,OAAQiiC,EAAUwjB,cACd,IAAK,UACG42X,EAAY36L,cAA2Cn/P,IAAhC85b,EAAY36L,QAAQ/iO,SAC3CgZ,EAAQmkZ,wBAAwB75Y,MAAiBwjB,aAAc,YAEnE,MACJ,IAAK,SACG42X,EAAYp7Z,aAAyC1+B,IAA/B85b,EAAYp7Z,OAAOtC,SACzCgZ,EAAQmkZ,wBAAwB75Y,MAAiBwjB,aAAc,WAEnE,MACJ,IAAK,UACG42X,EAAYC,cAA2C/5b,IAAhC85b,EAAYC,QAAQ39Z,SAC3CgZ,EAAQmkZ,wBAAwB75Y,MAAiBwjB,aAAc,eAOnFulZ,EAAavod,UAAU6wd,aAAe,SAAUtid,EAAQuid,QAC9Bhxd,IAAlByO,EAAOoM,SACPm2c,EAAan2c,OAASpM,EAAOoM,OAC7Bm2c,EAAa9xc,SAAS,GAAGrE,OAASpM,EAAOoM,OACzCm2c,EAAa9xc,SAAS,GAAGrE,OAAyB,IAAhBpM,EAAOoM,OACzCm2c,EAAa9xc,SAAS,GAAGrE,OAAyB,IAAhBpM,EAAOoM,aAExB7a,IAAjByO,EAAOqM,QACPk2c,EAAal2c,MAAQrM,EAAOqM,MAC5Bk2c,EAAa9xc,SAAS,GAAGpE,MAAQrM,EAAOqM,MACxCk2c,EAAa9xc,SAAS,GAAGpE,MAAuB,IAAfrM,EAAOqM,MACxCk2c,EAAa9xc,SAAS,GAAGpE,MAAuB,IAAfrM,EAAOqM,QAIhD2tc,EAAavod,UAAUkwd,0BAA4B,SAAU/qd,EAAMgwD,EAAW+gX,EAAYvka,EAAGq6c,EAAeltW,GAC5F35G,EAAKs6B,MAAjB,IACIisb,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GAAGA,SAAS,GACnDtI,EAAiD,gBAAxCvR,EAAKs6B,MAAM02Y,SAASD,WAAW5qa,KAA0B,EAAI,GACjD,IAArB4qa,EAAWy1C,MACXD,EAAe1sc,SAAS,EAAItI,GAAOwlB,SAAU,EAG7Cwvb,EAAe1sc,SAAS,EAAItI,GAAOwlB,SAAU,EAEjDt3B,KAAKord,kBAAkBtE,EAAgBM,EAAeltW,EAAMntG,EAAG,EAAI+E,IAGvE6xc,EAAavod,UAAUmwd,6BAA+B,SAAUhrd,EAAM+wa,GACtD/wa,EAAKs6B,MAAjB,IACIisb,EAAkBvmd,EAAKgS,QAAQ6H,SAAS,GAAGA,SAAS,GAAGA,SAAS,GACxC,YAAxBk3Z,EAAWs2C,WACXd,EAAepid,MAAMsqD,YAAc,EACnC83Z,EAAepid,MAAMqqD,gBAAkB,OAEf,SAAxBuiX,EAAWs2C,WACXd,EAAepid,MAAMsqD,YAAc,EACnC83Z,EAAepid,MAAMqqD,gBAAkB,OAEf,UAAxBuiX,EAAWs2C,WACXd,EAAepid,MAAMsqD,YAAc,EACnC83Z,EAAepid,MAAMqqD,gBAAkB,QAI/C40Z,EAAavod,UAAUu2a,wBAA0B,SAAUpxa,EAAM+2B,EAASgZ,GACtE,GAAI/vC,EAAKs6B,MAAM02Y,SAASD,WAAWE,WAC5Bjxa,EAAKs6B,MAAM02Y,SAASD,WAAWE,UAAUh1a,OAAS,EAErD,IAAK,IADDg1a,EAAYjxa,EAAKs6B,MAAM02Y,SAASD,WAAWE,UACtC9tZ,EAAI8tZ,EAAUh1a,OAAS,EAAGknB,GAAK,EAAGA,IAAK,CAC5C,IAAIyoc,EAAc77a,EAAQqY,UAAU6oX,EAAU9tZ,IAC9Cyoc,EAAY70b,QAAUA,EACtBgZ,EAAQqhY,wBAAwBw6C,EAAY55c,QAAS45c,EAAa70b,GAC9DA,IACgC,UAA5B60b,EAAYtxb,MAAMA,OAClB76B,KAAK2md,mBAAmBwF,EAAaA,EAAY55c,QAAQ6H,SAAS,GAAGA,UAE7B,eAAxC+xc,EAAYtxb,MAAM02Y,SAASA,UAC3Bvxa,KAAK4md,wBAAwBuF,IAIrC,IAAK,IADD9/Z,EAAa8/Z,EAAYp7C,QAAQv2Z,OAAO2xc,EAAYr7C,UAC/C50a,EAAImwD,EAAW7vD,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC7C,IAAI0+C,EAAYtK,EAAQqY,UAAU0D,EAAWnwD,IAC7C0+C,EAAUtjB,QAAUA,EACpBgZ,EAAQqhY,wBAAwB/2X,EAAUroC,QAASqoC,EAAWtjB,IAItEA,IACyB,UAArB/2B,EAAKs6B,MAAMA,OACX76B,KAAK2md,mBAAmBpmd,EAAMA,EAAKgS,QAAQ6H,SAAS,GAAGA,UAEtB,eAAjC7Z,EAAKs6B,MAAM02Y,SAASA,UACpBvxa,KAAK4md,wBAAwBrmd,GAEI,SAAjCA,EAAKs6B,MAAM02Y,SAASA,UACC,aAArBhxa,EAAKs6B,MAAMA,OAAgE,SAAxCt6B,EAAKs6B,MAAM02Y,SAASD,WAAWs0C,OAClErld,EAAKgS,QAAQ6H,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAAGkd,SAAU,KAKvEqsb,EAAavod,UAAUowd,8BAAgC,SAAUjrd,EAAMgwD,EAAW+gX,EAAYvka,EAAGq6c,EAAeltW,EAAM5pE,GAClH,IAAIu2a,EAActmd,EAAKs6B,MAAM02Y,SAASD,WAAW3na,OAAOnN,OACpDsqd,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GAAGA,SAAS,GACnDtI,EAAiD,gBAAxCvR,EAAKs6B,MAAM02Y,SAASD,WAAW5qa,KAA0B,EAAI,GAC7C,IAAzB4qa,EAAWI,WACX1xa,KAAK2xa,wBAAwBpxa,GAAM,EAAM+vC,GACzCw2a,EAAe1sc,SAAStI,EAAQ+0c,GAAavvb,SAAU,IAGvDt3B,KAAK2xa,wBAAwBpxa,GAAM,EAAO+vC,GAC1Cw2a,EAAe1sc,SAAStI,EAAQ+0c,GAAavvb,SAAU,GAE3Dt3B,KAAKord,kBAAkBtE,EAAgBM,EAAeltW,EAAMntG,EAAG,EAAI85c,IAGvElD,EAAavod,UAAUqwd,iCAAmC,SAAUlrd,EAAMgwD,EAAW+gX,EAAYvka,EAAGq6c,EAAeltW,GAC/G,IAAI4sW,EAAiBvmd,EAAKgS,QAAQ6H,SAAS,GAAGA,SAAS,GACnDtI,EAAiD,gBAAxCvR,EAAKs6B,MAAM02Y,SAASD,WAAW5qa,KAA0B,EAAI,GAC1C,IAA5B4qa,EAAW00C,aACXc,EAAe1sc,SAAS,EAAItI,GAAOwlB,SAAU,EAG7Cwvb,EAAe1sc,SAAS,EAAItI,GAAOwlB,SAAU,EAEjDt3B,KAAKord,kBAAkBtE,EAAgBM,EAAeltW,EAAMntG,EAAG,EAAI+E,IAGvE6xc,EAAavod,UAAUswd,yBAA2B,SAAUnrd,EAAMgwD,EAAW+gX,EAAYvka,EAAGq6c,EAAeltW,GACvGl6G,KAAK+qd,2BAA2Bxqd,EAAMA,EAAMwM,EAAGq6c,EAAeltW,EAAM,IAGxEypW,EAAavod,UAAUigd,oBAAsB,SAAUvrZ,EAAcS,EAAWwkY,EAAYzkZ,GACxF,IAAI87a,EAAWr3B,EAAWl6Z,MAU1B,YAT0B3/B,IAAtBkxd,EAASC,WACTv8Z,EAAe9vD,KAAKssd,YAAYx8Z,EAAcS,EAAWwkY,EAAYzkZ,SAE5Cp1C,IAAzBkxd,EAASG,cACTz8Z,EAAe9vD,KAAKwsd,eAAe18Z,EAAcS,EAAWwkY,EAAYzkZ,SAEnDp1C,IAArBkxd,EAASzrd,UACTmvD,EAAe9vD,KAAKysd,WAAW38Z,EAAcS,EAAWwkY,EAAYzkZ,IAEjEwf,GAGX6zZ,EAAavod,UAAUkxd,YAAc,SAAUx8Z,EAAcS,EAAWwkY,EAAYzkZ,GAQhF,GAPoC,WAA/BykZ,EAAWl6Z,MAAc,WAC1ByV,EAAQmkZ,wBAAwB3kY,EAAcS,GAC1C7pD,KAAM,WACNs5C,iBAAmBnlB,MAAO,QAASn2B,OAASw7B,KAAM,YAEtD4vB,EAAav9C,QAAQ6H,SAAS,GAAGkd,SAAU,GAEX,YAA/By9Z,EAAWl6Z,MAAc,SAAiB,CAC3CyV,EAAQmkZ,wBAAwB3kY,EAAcS,GAC1C7pD,KAAM,WACNs5C,iBAAmBnlB,MAAO,QAASn2B,OAASw7B,KAAM,UAClD4f,iBAAmBjlB,MAAO,UAE9B,IAAIgS,EAAU,IAAIgQ,GAEdwwX,GADU,IAAIxwX,QACA,GAClBhQ,EAAUijB,EAAa48W,kBAAkB58W,EAAcjjB,GAEvD,IAAK,IADDogY,EAAcn9W,EAAajH,mBACtBnlC,EAAI,EAAGA,EAAIupZ,EAAYzwa,OAAS,EAAGknB,IACxClnB,QAAkBszD,EAAa9a,SAASi4X,EAAYvpZ,GAAIupZ,EAAYvpZ,EAAI,IACxE2pZ,EAAcv9W,EAAaoiT,SAAS+6D,EAAYvpZ,GAAIupZ,EAAYvpZ,EAAI,IAExEosC,EAAav9C,QAAQ6H,SAAS,GAAG7d,KAAO8wa,EAAY,GACpDv9W,EAAav9C,QAAQ6H,SAAS,GAAG9W,GAAKwsD,EAAaxsD,GAAK,IAAOyxb,EAAWl6Z,MAAc,SACxFi1B,EAAav9C,QAAQ6H,SAAS,GAAGvO,QAAUwha,EAAY,GAAGtga,EAC1D+iD,EAAav9C,QAAQ6H,SAAS,GAAGnO,QAAUoha,EAAY,GAAGrga,EAC1D8iD,EAAav9C,QAAQ6H,SAAS,GAAGihC,YAAc,GAC/CyU,EAAav9C,QAAQ6H,SAAS,GAAG/M,UAAYy3Z,GAAUO,KAU3D,MARoC,gBAA/B0vB,EAAWl6Z,MAAc,WAC1ByV,EAAQmkZ,wBAAwB3kY,EAAcS,GAC1C7pD,KAAM,WACNs5C,iBAAmBnlB,MAAO,QAASn2B,OAASw7B,KAAM,UAClD4f,iBAAmBjlB,MAAO,UAAW7kB,MAAO,GAAID,OAAQ,GAAIrR,OAASw7B,KAAM,YAE/E4vB,EAAav9C,QAAQ6H,SAAS,GAAGkd,SAAU,GAExCw4B,GAGX6zZ,EAAavod,UAAUoxd,eAAiB,SAAU18Z,EAAcS,EAAWwkY,EAAYzkZ,GAsBnF,MArBuC,YAAlCykZ,EAAWl6Z,MAAiB,aAC7ByV,EAAQmkZ,wBAAwB3kY,EAAcS,GAC1C7pD,KAAM,WAAYhC,OAASqqD,gBAAiB,QAC5C/O,iBAAmBnlB,MAAO,QAASn2B,OAASw7B,KAAM,UAClD4f,iBAAmBjlB,MAAO,UAGK,gBAAlCk6Z,EAAWl6Z,MAAiB,aAC7ByV,EAAQmkZ,wBAAwB3kY,EAAcS,GAC1C7pD,KAAM,WAAYhC,OAASqqD,gBAAiB,OAC5C/O,iBAAmBnlB,MAAO,QAASn2B,OAASw7B,KAAM,UAClD4f,iBAAmBjlB,MAAO,UAGK,kBAAlCk6Z,EAAWl6Z,MAAiB,aAC7ByV,EAAQmkZ,wBAAwB3kY,EAAcS,GAC1C7pD,KAAM,WAAYhC,OAASqqD,gBAAiB,OAC5C/O,iBAAmBnlB,MAAO,QAASn2B,OAASw7B,KAAM,UAClD4f,iBAAmBjlB,MAAO,QAAS7kB,MAAO,EAAGD,OAAQ,GAAIrR,OAASw7B,KAAM,YAGzE4vB,GAGX6zZ,EAAavod,UAAUqxd,WAAa,SAAU38Z,EAAcS,EAAWwkY,EAAYzkZ,GAC/E,IACI1uB,EACAmsB,EACJ,GAAkC,YAA7BwiB,EAAU11B,MAAa,SACxB,QAAmC3/B,IAA9B65b,EAAWl6Z,MAAa,QAAiB,CAC1C,GAAoC,sBAA9Bk6Z,EAAWl6Z,MAAa,SACM,yBAA9Bk6Z,EAAWl6Z,MAAa,QAA+B,CACzD,IAAIgS,EAAU,IAAIgQ,GAClBhQ,EAAUijB,EAAa48W,kBAAkB58W,EAAcjjB,GAEvD,IAAK,IADDogY,EAAcn9W,EAAajH,mBACtBnlC,EAAI,EAAGA,EAAIupZ,EAAYzwa,OAAS,EAAGknB,IAAK,CAC7ClnB,QAAkBszD,EAAa9a,SAASi4X,EAAYvpZ,GAAIupZ,EAAYvpZ,EAAI,IACxE,IAAIgpc,EAZA,GAYYlwd,OACZA,QAAUkwd,IACV9qc,EAAQm6B,GAAUkxX,EAAYvpZ,GAAIupZ,EAAYvpZ,EAAI,IAClDqqB,EAAK8G,GAAMxnC,UAAU4/Z,EAAYvpZ,GAAI9B,EAAO8qc,KAIxD58Z,EAAav9C,QAAQ6H,SAAS,GAAG9W,GAAKwsD,EAAaxsD,GAAK,IAAOyxb,EAAWl6Z,MAAa,QACvFi1B,EAAav9C,QAAQ6H,SAAS,GAAGpE,MAAQ,GACzC85C,EAAav9C,QAAQ6H,SAAS,GAAGrE,OAAS,GAC1C+5C,EAAav9C,QAAQ6H,SAAS,GAAG7d,KAAO,yDACxCuzD,EAAav9C,QAAQ6H,SAAS,GAAG81C,oBAAsB,SACvDJ,EAAav9C,QAAQ6H,SAAS,GAAG+1C,kBAAoB,SACrDL,EAAav9C,QAAQ6H,SAAS,GAAG/M,UAAYy3Z,GAAUO,KACvDv1W,EAAav9C,QAAQ6H,SAAS,GAAG1V,MAAMw7B,KAAsC,yBAA9B60Z,EAAWl6Z,MAAa,QACnE,YAAc,QAClBi1B,EAAav9C,QAAQ6H,SAAS,GAAGvO,QAAUkiC,EAAGhhC,EAC9C+iD,EAAav9C,QAAQ6H,SAAS,GAAGnO,QAAU8hC,EAAG/gC,OAGf,yBAA7BujD,EAAU11B,MAAa,SACC,sBAA7B01B,EAAU11B,MAAa,UACW,YAA9Bk6Z,EAAWl6Z,MAAa,QACzBi1B,EAAav9C,QAAQ6H,SAAS,GAAG1V,MAAMw7B,KAAsC,yBAA9B60Z,EAAWl6Z,MAAa,QACnE,YAAc,QAGlBi1B,EAAav9C,QAAQ6H,SAAS,GAAGkd,SAAU,GAGnD,OAAOw4B,GAIX6zZ,EAAavod,UAAUsrd,qBAAuB,SAAUrqd,EAAOkW,EAASyD,EAAOD,GAC3ExD,EAAQ6H,SAAS,GAAGpE,MAAQA,EAC5BzD,EAAQ6H,SAAS,GAAGrE,OAASA,EAE7B,IAAI42c,EAAYp6c,EAAQ6H,SAAS,GACjCuyc,EAAU32c,MAAgB,IAARA,EAClB22c,EAAU52c,OAAkB,IAATA,EACnB,IAAIywc,EAAcj0c,EAAQ6H,SAAS,GACb,YAAlB/d,EAAMsqB,SACN6/b,EAAYxwc,MAAgB,IAARA,EACpBwwc,EAAYzwc,OAAkB,GAATA,IAGrBywc,EAAYxwc,MAAgB,GAARA,EACpBwwc,EAAYzwc,OAAkB,GAATA,IAI7B4tc,EAAavod,UAAU0yc,qBAAuB,SAAUvtc,EAAM+vC,EAASs+R,EAAID,GACvE,IAAIiqH,EAAkBr4b,EAAK+C,GAAGpG,MAAM,KACpC,GAA2B,mBAAvB07b,EAAgB,GAEhB,IAAK,IADDn4b,OAAa,EACRijB,EAAI,EAAGA,EAAInjB,EAAKwwa,QAAQv0a,OAAQknB,IAAK,CAC1C,IAAIk3B,EAAYtK,EAAQqY,UAAUpoD,EAAKwwa,QAAQrtZ,IAC3Ck3B,IACAn6C,EAAa6vC,EAAQqY,UAAU/N,EAAU7I,WAE7C,IAAIx0C,GAAUwP,EAAGxM,EAAKsL,QAAU+iU,EAAI5hU,EAAGzM,EAAK0L,QAAU0iU,GAClD1vT,EAAM27B,EAAUrJ,YAChB3U,EAAWiY,GAAMoH,WAAW1+C,EAAO0hB,GACnC2C,EAAQizB,GAAMkH,UAAU98B,EAAK1hB,GACjC,GAAIkD,EAAWo6B,MAAM2uB,YACjB,IAAK,IAAIz8C,EAAI,EAAGA,EAAKtM,EAAWo6B,MAAiB,YAAEr+B,OAAQuQ,IACvD,GAAKtM,EAAWo6B,MAAiB,YAAE9tB,GAAGzJ,KAAOs1b,EAAgBA,EAAgBp8b,OAAS,GAIlF,OAHCiE,EAAWo6B,MAAM2uB,YAAYz8C,GAAIvQ,OAASogC,EAC1Cn8B,EAAWo6B,MAAM2uB,YAAYz8C,GAAI6U,MAAQA,EAC1C5hB,KAAK+od,kBAAkBtod,EAAW8R,QAAQgkB,OAAQh2B,EAAKgS,QAAShV,EAAOgD,IAChE,EAM3B,QAAIA,EAAKswa,YACL7wa,KAAKu3G,KAAKh3G,EAAMquU,EAAID,EAAIr+R,IACjB,IAIfqza,EAAavod,UAAUqud,uBAAyB,SAAU91b,EAAO4C,GAC7D,IACI8kB,EAAc,EAClB,OAFgBxJ,GAAiBle,EAAO4C,EAAQA,IAG5C,IAAK,QACD8kB,EAAc,EACd,MACJ,IAAK,OACDA,EAAc,IACd,MACJ,IAAK,SACDA,EAAc,GACd,MACJ,IAAK,MACDA,EAAc,IAGtB,OAAOA,GAEXsoa,EAAavod,UAAUupd,sBAAwB,SAAUtod,EAAOkW,EAASyD,EAAOD,GAC5ExD,EAAQ6H,SAAS,GAAGpE,MAAQA,EAC5BzD,EAAQ6H,SAAS,GAAGrE,OAASA,EAC7BxD,EAAQ6H,SAAS,GAAGpE,MAAgB,IAARA,EAC5BzD,EAAQ6H,SAAS,GAAGrE,OAAkB,IAATA,GAEjC4tc,EAAavod,UAAUivd,0BAA4B,SAAUhud,EAAOkW,EAASyD,EAAOD,GAChFxD,EAAQ6H,SAAS,GAAGpE,MAAQA,EAC5BzD,EAAQ6H,SAAS,GAAGrE,OAASA,GAEjC4tc,EAAavod,UAAU6vd,uBAAyB,SAAU15C,EAAUh/Z,EAASyD,EAAOD,EAAQxV,GAExFgS,EAAQ6H,SAAS,GAAGpE,MAAQA,EAC5BzD,EAAQ6H,SAAS,GAAGrE,OAASA,EAC7BxD,EAAQ6H,SAAS,GAAGA,SAAS,GAAGpE,MAAQA,EACxCzD,EAAQ6H,SAAS,GAAGA,SAAS,GAAGrE,OAASA,EACR,gBAA7Bw7Z,EAASD,WAAW5qa,OACpB6L,EAAQ6H,SAAS,GAAGA,SAAS,GAAGpE,MAAQ3J,KAAKC,IAAI0J,EAAQ,EAAG,GAC5DzD,EAAQ6H,SAAS,GAAGA,SAAS,GAAGrE,OAAS1J,KAAKC,IAAIyJ,EAAS,EAAG,GAC9DxD,EAAQ6H,SAAS,GAAGA,SAAS,GAAGpE,MAAQA,EACxCzD,EAAQ6H,SAAS,GAAGA,SAAS,GAAGrE,OAASA,GAE7C,IACIhJ,EAEAs4c,EAHAD,EAAW,IAAI50Z,GAEfnhC,EAAOrvB,KAAK4gB,QAAQrgB,EAAM6kd,GAS1BG,EAA0B,IAL1BF,EADsB,SAAtB9zC,EAASA,SACIvxa,KAAKsld,kBAAkB/kd,GAGvBP,KAAKqnd,wBAAwB9md,IAG1C25G,GAAQlkG,GAASqZ,EAAKrZ,OAAS,EAE/BjJ,EADe,IAAfs4c,EACInrW,EAAO,EAGPA,EAAQqrW,EAAa,EAbb,GAaoBF,EAAa,GAAkB,EAEnE,IAAK,IAAInpd,EAAI,EAAGA,EAAIqW,EAAQ6H,SAAS,GAAGA,SAAS5d,OAAQN,IACjDqW,EAAQ6H,SAAS,GAAGA,SAASle,GAAGo7B,UAC/B/kB,EAAQ6H,SAAS,GAAGA,SAASle,GAAGoH,GAAG/E,QAAQ,UAAY,GACpDgU,EAAQ6H,SAAS,GAAGA,SAASle,GAAGoH,GAAG/E,QAAQ,oBAAsB,GACjEgU,EAAQ6H,SAAS,GAAGA,SAASle,GAAGoH,GAAG/E,QAAQ,aAAe,GAC1DgU,EAAQ6H,SAAS,GAAGA,SAASle,GAAGoH,GAAG/E,QAAQ,iBAAmB,KAClEgU,EAAQ6H,SAAS,GAAGA,SAASle,GAAG8iC,OAAOxyB,KAAOO,EAC9CA,GAAKwF,EAAQ6H,SAAS,GAAGA,SAASle,GAAGqgD,WAAWvmC,MAtBxC,IA0BpB2tc,EAAavod,UAAUo8c,iCAAmC,SAAUx2c,EAASs2B,GACzE,GAAIt2B,aAAmBkzD,GACnB,IAAK,IAAIh4D,EAAI,EAAGA,EAAI8E,EAAQoZ,SAAS5d,OAAQN,IACzC8D,KAAKw3c,iCAAiCx2c,EAAQoZ,SAASle,GAAIo7B,GAGnEt2B,EAAQs2B,QAAUA,GAOtBqsb,EAAavod,UAAUiX,QAAU,aAQjCsxc,EAAavod,UAAU2mC,cAAgB,WAInC,MAAO,QAEJ4hb,KAkBP9kZ,IACA/1D,MAAS,sKAETg7I,QAAW,+CACXg8R,WAAc,sVAId8sC,WAAc,mHAEdpF,eAAkB,4OAIlBzoZ,IAEA+kF,QAAW,yDACX+oU,MAAS,4qBAOTjsd,MAAS,iHACTksd,WAAc,oFACdxuT,OAAU,0HACVyuT,aAAgB,iFAChBC,YAAe,qGACfC,KAAQ,yFACRC,OAAU,oCACVC,UAAa,4GACbC,SAAY,2FACZC,SAAY,8IAGZpuZ,IACAq6I,KAAQ,GAERg0Q,UAAa,2KAGbC,UAAa,sSAIbF,SAAY,wHAEZtld,QAAW,iVAIXyld,WAAc,qZAKdC,oBAAuB,6HAGvBC,mBAAsB,mMAGtBvuZ,IACAm6I,KAAQ,GACRq0Q,QAAW,yvBAOXC,QAAW,gLAEXC,KAAQ,gJAERC,qBAAwB,6eAKxBC,OAAU,g5FA2BVC,aAAgB,+XAIhBC,KAAQ,osDAeRC,OAAU,0zBAQV7uZ,IACAi6I,KAAQ,GACR60Q,SAAY,2fAKZC,sBAAyB,iJAEzBC,sBAAyB,0O2X95EzBC,GAAmC,WAKnC,SAASA,KA8ZT,OA1ZAA,EAAkBlzd,UAAUqvc,eAAiB,SAAUptY,EAAM/sB,GACzD,IACI/Z,EADAg4b,KAGJ,GADAlxZ,EAAKmvW,WjYiDb,SAA0B5xX,EAAWtK,GAWjC,OATIsK,EAAUsG,YAAcI,GAAqBkta,SACrC5za,EAAUsG,YAAcI,GAAqBkta,SAEhD5za,EAAUsG,YAAcI,GAAqBmta,gBAC1Cn+a,EAAQ4Q,YAAcwC,GAAmB8qa,SAGzC,EiYzDJE,CAAUrxZ,EAAM/sB,GAAU,CAE1B,IAAIq+a,EAAU3ud,KAAKg7C,UAAUqiB,GAC7B9mC,EAASR,GAAKkzB,SAAS0la,GAKvB,IAAK,IAJDC,EAAgBvxZ,EAAKwxZ,YACrBC,EAASx+a,EAAQyd,gBACjB7uC,GAAS,EACT4nb,EAAQx2Z,EAAQ+b,WACXo6G,EAAI,EAAGA,EAAIqgS,EAAMtqc,OAAQiqK,IAAK,CACnC,IAAIsoT,EAAajoB,EAAMrgS,GACvB,GAAIppG,GAAQ0xZ,GAAc1xZ,EAAK/5D,KAAOyrd,EAAWzrd,GAAI,CACjD,IAAI0rd,EAAUhvd,KAAKg7C,UAAU+za,GACzBl4Z,EAAU9gC,GAAKkzB,SAAS+la,GAC5B,GAAIhvd,KAAKivd,eAAe14b,EAAQsgC,GAAU,CACtC,IAAIq4Z,EAAelvd,KAAKo9C,UAAUuxa,EAASK,GAAS,EAAOF,GAAQ,GACnE,GAAII,EAAa1yd,OAAS,EACtB,IAAK,IAAIN,EAAI,EAAGA,EAAIgzd,EAAa1yd,OAAQN,IAAK,CAC1C,IACI0gC,EAAW,EACX0tZ,EAAe,EACfnyZ,EAAa,EACbr7B,EAAMkD,KAAKmvd,yBAAyB9xZ,EAAM6xZ,EAAahzd,IAC3D,IAAwB,IAApBY,EAAIq7B,WAAmB,CACvByE,EAAW9/B,EAAIsyd,oBACFtyd,EAAIuyd,WACjB/kC,EAAextb,EAAIwtb,aACnBnyZ,EAAar7B,EAAIq7B,WACjB,IAAIm3b,EAAWtvd,KAAKs2D,iBAAkB15B,EAAYgyb,EAAgB,EAAKD,GACnEY,EAAWvvd,KAAKs2D,iBAAkB15B,EAAYgyb,EAAgB,EAAKD,GAGnE3ud,KAAK80C,aAAay6a,KAClBA,EAAWD,GAEf,IAAI/xd,OAAQ,EACR0hB,OAAM,EACV1hB,EAAQ8/D,EAAK9rB,YAETtyB,EADc,aAAdo+C,EAAK32D,KACC22D,EAAKvjB,YAGLujB,EAAKxU,mBAAmB1wB,GAElC,IAAIvW,EAAQ5hB,KAAKwvd,iBAAiBjyd,EAAO0hB,GACzC,GAAIsvc,EAAW/xd,OAAQ,CACnB,IAAIw8C,OAAa,EACjBA,EAAaqkB,EAAK9rB,YAClB,IAAIk+a,EAAMpjd,KAAKE,IAAIvM,KAAK0vd,kBAAkB12a,EAAYu2a,IAClDI,EAAO,EACPC,GAAY,EAChB1wc,GAAS,EACT,IAAK,IAAIoH,EAAI,EAAGA,EAAIioc,EAAWjkC,GAAc9d,QAAQhwa,OAAQ8pB,IAAK,CAC9DpH,IACA,IAAI2wc,EAAStB,EAAWjkC,GAAc9d,QAAQlmZ,GAE9C,GADAqpc,EAAOtjd,KAAKE,IAAIvM,KAAK0vd,kBAAkB12a,EAAY62a,EAAOt1a,WACtDk1a,EAAME,EAAM,CACZC,EAAW1wc,EACX,OAGR,GAAI0wc,GAAY,EAAG,CACf,IAAI5oY,OAAQ,GACZA,EAAQhnF,KAAK8vd,cAAcR,EAAUC,EAAU3tc,EAAOktc,EAAQ32b,EAAYklC,EAAM/sB,IAC1EnpC,OAAS4nd,EAAWzrd,GAC1Bird,EAAWjkC,GAAc9d,QAAQ7jZ,OAAOinc,EAAU,EAAG5oY,GACrDunY,EAAWjkC,GAAc9d,QAAQhrZ,OACjC+sc,EAAWjkC,GAAcylC,iBAAiBpnc,OAAOinc,EAAU,EAAGN,GAC9Df,EAAWjkC,GAAcylC,iBAAiBvuc,OAC1C+sc,EAAWjkC,GAAcA,aAAeA,MAEvC,CACGtjW,OAAQ,GACZA,EAAQhnF,KAAK8vd,cAAcR,EAAUC,EAAU3tc,EAAOktc,EAAQ32b,EAAYklC,EAAM/sB,IAC1EnpC,OAAS4nd,EAAWzrd,GAC1Bird,EAAWjkC,GAAc9d,QAAQhoa,KAAKwiF,GACtCunY,EAAWjkC,GAAcylC,iBAAiBvrd,KAAK8qd,GAC/Cf,EAAWjkC,GAAcA,aAAeA,QAI5C,IAAKntY,MAAMmya,EAASvid,KAAOowC,MAAMmya,EAAStid,KAAOhN,KAAK80C,aAAay6a,GAAW,CAC1E,IAAIS,OAAO,EAIPC,GACAzjD,WAAeujD,oBAAyBzlC,aAAcA,IAF1D0lC,EAAOhwd,KAAK8vd,cAAcR,EAAUC,EAAU3tc,EAAOktc,EAAQ32b,EAAYklC,EAAM/sB,IAI1EnpC,OAAS4nd,EAAWzrd,GACzB,IAAI4sd,KAEJA,EAAS1rd,KAAK8qd,MACL9qd,KAAK+qd,GACdhB,EAAWjkC,GAAgB2lC,EAC3B1B,EAAWjkC,GAAc9d,QAAQhoa,KAAKwrd,GACtCzB,EAAWjkC,GAAcylC,iBAAmBG,EAC5C3B,EAAWjkC,GAAcA,aAAeA,OAS9C,IAAtBikC,EAAW/xd,QACXwD,KAAKmwd,YAAY5B,EAAYlxZ,EAAMuxZ,KAK/CN,EAAkBlzd,UAAU+0d,YAAc,SAAUC,EAAYx1a,EAAWg0a,GACvE,IAAK,IAAI1yd,EAAI,EAAGA,EAAIk0d,EAAW5zd,OAAQN,IAAK,CAExC,IAAK,IADD6ya,EAASqhD,EAAWl0d,GACfoqB,EAAI,EAAGA,EAAIyoZ,EAAOvC,QAAQhwa,OAAQ8pB,IACvC,GAAIuuB,GAAMoH,WAAW8yX,EAAOvC,QAAQlmZ,GAAGi0B,SAAUw0X,EAAOvC,QAAQlmZ,EAAI,GAAGi0B,UAAYq0a,EAAe,CAC9F7/C,EAAOvC,QAAQlmZ,EAAI,GAAGi0B,SAAWw0X,EAAOvC,QAAQlmZ,GAAGi0B,SACnD,IAAI81a,EAAYthD,EAAOvC,QAAQlmZ,EAAI,GAC/B8uE,EAAMp1F,KAAKswd,oBAAoBD,EAAU/va,WAAY+va,EAAU91a,SAAU81a,EAAUzuc,MAAOgtc,EAAeyB,EAAUvlb,OACvHikY,EAAOvC,QAAQlmZ,EAAI,GAAGnJ,KAAOi4E,EAC7B25U,EAAOvC,QAAQ7jZ,OAAOrC,EAAG,GACzByoZ,EAAOghD,iBAAiBpnc,OAAOrC,EAAG,GAClCA,IAGEs0B,EAAUrJ,YACpB,IAAK,IAAI7tB,EAAI,EAAGA,EAAIqrZ,EAAOvC,QAAQhwa,OAAQknB,IAAK,EACxC2sc,EAAYthD,EAAOvC,QAAQ9oZ,IAEf62B,SAChBK,EAAU4xX,QAAQhoa,KAAK6rd,MAKnC/B,EAAkBlzd,UAAU00d,cAAgB,SAAU3gD,EAAIlwZ,EAAK2C,EAAOyT,EAAWvjB,EAAOurD,EAAM/sB,GAC1F,IAAI8kD,EACAtqD,EACA3tB,GACAyE,MAAO,EAAG24B,UAAYxtC,EAAG,EAAGC,EAAG,GAAK7F,OAAQ,GAAIgW,KAAM,GACtD6xZ,mBAAoB,EAAG1uX,YAAcvzC,EAAG,EAAGC,EAAG,GAAK89B,MAAO,EAAGw5T,UAAU,GAU3E,OARAx5T,EAAQ9qC,KAAK4lZ,eAAehkY,EAAOyT,EAAWgoC,EAAM/sB,GACpD8kD,EAAMp1F,KAAKswd,oBAAoBnhD,EAAIlwZ,EAAK2C,EAAOy7C,EAAKwxZ,YAAa/jb,GACjE3tB,EAAKA,KAAOi4E,EACZj4E,EAAKmjC,WAAa6uX,EAClBhyZ,EAAKo9B,SAAWt7B,EAChB9B,EAAKyE,MAAQA,EACbzE,EAAK6xZ,kBAAoBl9Z,EACzBqL,EAAK2tB,MAAQA,EACN3tB,GAGXmxc,EAAkBlzd,UAAUk1d,oBAAsB,SAAUC,EAASC,EAAO5uc,EAAOitc,EAAa/jb,GAE5F,MADW,KAAO+jb,EAAc,EAAI,IAAMA,EAAc,EAAI,IAAMjtc,EAAQ,QAAUkpB,EAAQ,IAAM0lb,EAAMzjd,EAAI,IAAMyjd,EAAMxjd,GAI5Hshd,EAAkBlzd,UAAUwqZ,eAAiB,SAAUhkY,EAAOmsC,EAAiBnT,EAAWtK,GACtF,IACIxF,EADA2lb,EAASpkd,KAAKE,IAAIqV,GAEtB,OAAQmsC,GACJ,IAAK,MACL,IAAK,SACDjjB,EAAQ,EACJ2lb,GAAU,GAAKA,GAAU,KACzB3lb,EAAQ,GAEZ,MACJ,IAAK,OACL,IAAK,QACDA,EAAQ,EACJlpB,EAAQ,GAAKA,IAAU,MACvBkpB,EAAQ,GAYpB,MARwB,UAApBijB,GAAmD,WAApBA,IAE3BjjB,EADU,IAAVA,EACQ,EAGA,GAGTA,GAGXwjb,EAAkBlzd,UAAUk7D,iBAAmB,SAAU95D,EAAQ05C,GAI7D,IAAK,IAFDk1U,EADA+nD,EAAM,EAENx9J,GAAU5oQ,EAAG,EAAGC,EAAG,GACd9Q,EAAI,EAAGA,EAAIg6C,EAAI15C,OAAQN,IAAK,CACjC,IAAI6xC,EAAKmI,EAAIh6C,GACb,GAAKkvX,EAAL,CAKI,IAAI59U,EAAIxtC,KAAK0vd,kBAAkBtkG,EAAKr9U,GACpC,GAAIolY,EAAM3lY,EAAIhxC,EAAQ,CAClB,IAAI2iC,EAAI3iC,EAAS22a,EACbpjW,EAAMl7B,GAAMkH,UAAUqvU,EAAKr9U,GAC3BhhC,EAAIoyB,EAAI9yB,KAAKyV,IAAIiuD,EAAM1jE,KAAKmR,GAAK,KACjCxQ,EAAImyB,EAAI9yB,KAAK0V,IAAIguD,EAAM1jE,KAAKmR,GAAK,KACrCm4P,GAAU5oQ,EAAGq+W,EAAIr+W,EAAIA,EAAGC,EAAGo+W,EAAIp+W,EAAIA,GACnC,MAGAmma,GAAO3lY,EAGf49U,EAAMr9U,OAjBFq9U,EAAMr9U,EAmBd,OAAO4nO,GAGX24M,EAAkBlzd,UAAU4/C,UAAY,SAAUJ,GAC9C,IAAInjB,KACJ,GAAImjB,EAAUiO,qBAA0C,aAAnBjO,EAAUl0C,MAA0C,eAAnBk0C,EAAUl0C,MAC5E,IAAK,IAAIgd,EAAI,EAAGA,EAAIk3B,EAAUiO,mBAAmBrsD,OAAQknB,IACrD+T,EAAOjzB,KAAKo2C,EAAUiO,mBAAmBnlC,IAGjD,OAAO+T,GAEX62b,EAAkBlzd,UAAU6zd,eAAiB,SAAUxqD,EAAOC,GAC1D,OAAWA,EAAM33Z,EAAK03Z,EAAM13Z,EAAI03Z,EAAMzuZ,OAAYyuZ,EAAM13Z,EAAK23Z,EAAM33Z,EAAI23Z,EAAM1uZ,OACrE0uZ,EAAM13Z,EAAKy3Z,EAAMz3Z,EAAIy3Z,EAAM1uZ,QAAc0uZ,EAAMz3Z,EAAK03Z,EAAM13Z,EAAI03Z,EAAM3uZ,QAGhFu4c,EAAkBlzd,UAAUgiD,UAAY,SAAUuxa,EAASK,EAAS0B,EAAM3ia,EAAiB4ia,GACnFD,GAAQ1B,EAAQxyd,QAAU,IAC1Bwyd,EAAQrmc,OAAO,EAAG,GAClBqmc,EAAQrmc,OAAO,EAAG,IAGtB,IAAK,IADD8O,KACKv7B,EAAI,EAAGA,EAAIyyd,EAAQnyd,OAAS,EAAGN,IAAK,CACzC,IAAI6xC,EAAK/tC,KAAK4wd,OAAOjC,EAAQzyd,GAAIyyd,EAAQzyd,EAAI,GAAI8yd,EAAS2B,EAAQ5ia,GAClE,GAAIhgB,EAAGvxC,OAAS,EACZ,IAAK,IAAI8pB,EAAI,EAAGA,EAAIynB,EAAGvxC,OAAQ8pB,IAC3BmR,EAAOjzB,KAAKupC,EAAGznB,IAGnBoqc,GAAQ1B,EAAQxyd,QAAU,GAC1Bwyd,EAAQrmc,OAAO,EAAG,GAG1B,OAAO8O,GAGX62b,EAAkBlzd,UAAUw1d,OAAS,SAAUL,EAASC,EAAOt6a,EAAKy6a,EAAQ5ia,GAExE,IAAK,IADD4ga,KACKzyd,EAAI,EAAGA,EAAIg6C,EAAI15C,OAAS,EAAGN,IAAK,CACrC,IAAIy3B,EAAQ3zB,KAAK6wd,WAAWN,EAASC,EAAOt6a,EAAIh6C,GAAIg6C,EAAIh6C,EAAI,IAC5D,IAAK8D,KAAK80C,aAAanhB,GAAQ,CAC3B,IAAI/R,EAAQ5hB,KAAKwvd,iBAAiBe,EAASC,GACvCC,EAASzwd,KAAKwvd,iBAAiBt5a,EAAIh6C,GAAIg6C,EAAIh6C,EAAI,IAGnD,OAFA0lB,EAAQ5hB,KAAK8wd,uBAAuBlvc,GACpC6uc,EAASzwd,KAAK8wd,uBAAuBL,GAC7B1ia,GACJ,IAAK,OACL,IAAK,QACGnsC,EAAQ6uc,GACR9B,EAAQnqd,KAAKmvB,GAEjB,MACJ,IAAK,MACL,IAAK,SACG/R,EAAQ6uc,GACR9B,EAAQnqd,KAAKmvB,GAIrB/R,IAAU6uc,GAAUE,GACpBhC,EAAQnqd,KAAKmvB,IAIzB,OAAOg7b,GAEXL,EAAkBlzd,UAAU01d,uBAAyB,SAAUlvc,GAC3D,IACImvc,EAAe1kd,KAAKE,IAAIqV,GAO5B,OANImvc,EAAe,GACR,IAAMA,EAGNA,GAIfzC,EAAkBlzd,UAAUy1d,WAAa,SAAUG,EAAQC,EAAMC,EAAQC,GACrE,IAGIv+G,EAAQp+T,GAFIx0C,KAAKoxd,eAAeJ,EAAOjkd,EAAGikd,EAAOhkd,EAAGikd,EAAKlkd,EAAGkkd,EAAKjkd,GACrDhN,KAAKoxd,eAAeF,EAAOnkd,EAAGmkd,EAAOlkd,EAAGmkd,EAAKpkd,EAAGokd,EAAKnkd,IAErE,OAAI4lW,EAAMxtV,QACCwtV,EAAMtpT,aALHv8C,EAAG,EAAGC,EAAG,IAY3Bshd,EAAkBlzd,UAAUg2d,eAAiB,SAAU7zb,EAAIC,EAAIC,EAAIC,GAC/D,OAASH,GAAMnG,OAAOmG,IAAO,EAAGC,GAAMpG,OAAOoG,IAAO,EAAGC,GAAMrG,OAAOqG,IAAO,EAAGC,GAAMtG,OAAOsG,IAAO,IAEtG4wb,EAAkBlzd,UAAU05C,aAAe,SAAUnhB,GACjD,OAAmB,IAAZA,EAAM5mB,GAAuB,IAAZ4mB,EAAM3mB,GAElCshd,EAAkBlzd,UAAU+zd,yBAA2B,SAAUv0a,EAAWy2a,GAWxE,IAAK,IATDxyV,EAAU,IACV1mG,GAAc,EACdk3b,EAAa,EACb/kC,GAAgB,EAChBpra,EAAQ,EACRoyc,EAAqB,EACrB11I,EAAMhhS,EAAUrJ,YAChBggb,EAAc31I,EACdnkT,KACKv7B,EAAI,EAAGA,EAAI0+C,EAAUiO,mBAAmBrsD,OAAQN,IAAK,CAC1D,IAAImvC,EAASuP,EAAUiO,mBAAmB3sD,GAC1Cu7B,EAAOjzB,KAAK6mC,GAEhB,IAAK,IAAI3nB,EAAI,EAAGA,EAAI+T,EAAOj7B,OAAQknB,IAAK,CACpC,IAAIm4T,EAAMpkT,EAAO/T,GACb8tc,EAAUxxd,KAAKyxd,SAAS51I,EAAKD,EAAKy1I,EAASz2a,GAC3C42a,EAAU3yV,IACVA,EAAU2yV,EACVF,EAAqBjC,EAAarvd,KAAK0vd,kBAAkB2B,EAASE,GAClEjnC,EAAepra,EACfiZ,EAAazU,GAEjB2rc,GAAcx6a,GAAMoH,WAAW4/R,EAAKD,GACpCA,EAAMC,EACN01I,EAAc11I,EAOlB,OALA38T,KAEIkwc,oBAAqBkC,EAAoBjC,WAAYA,EACrD/kC,aAAcA,EAAcnyZ,WAAYA,IAIhDm2b,EAAkBlzd,UAAUq2d,SAAW,SAAUlB,EAASC,EAAO78b,EAAOinB,GACpE,IACI82a,EAAOrld,KAAKE,IAAIgkd,EAAQxjd,EAAIyjd,EAAMzjd,GAClC4kd,EAAOtld,KAAKE,IAAIgkd,EAAQvjd,EAAIwjd,EAAMxjd,GAClC4kd,GAAQj+b,EAAM3mB,EAAIujd,EAAQvjd,IAAMwjd,EAAMxjd,EAAIujd,EAAQvjd,GAClD6kd,GAAQl+b,EAAM5mB,EAAIwjd,EAAQxjd,IAAMyjd,EAAMzjd,EAAIwjd,EAAQxjd,GACtD,IAAK4xF,SAASizX,KAASjzX,SAASkzX,IAAQ10a,MAAMy0a,IAAQz0a,MAAM00a,IACxD,GAAItB,EAAQxjd,IAAMyjd,EAAMzjd,EAAG,CACvB,GAAIwjd,EAAQvjd,IAAMwjd,EAAMxjd,EACpB,OAAO,IAEN,GAAMujd,EAAQvjd,EAAI2mB,EAAM3mB,GAAO2mB,EAAM3mB,EAAIwjd,EAAMxjd,GAASujd,EAAQvjd,EAAI2mB,EAAM3mB,GAAO2mB,EAAM3mB,EAAIwjd,EAAMxjd,EAClG,OAAOX,KAAKE,IAAIgkd,EAAQxjd,EAAI4mB,EAAM5mB,QAGrC,GAAIwjd,EAAQvjd,IAAMwjd,EAAMxjd,IACnBujd,EAAQxjd,EAAI4mB,EAAM5mB,GAAO4mB,EAAM5mB,EAAIyjd,EAAMzjd,GAASwjd,EAAQxjd,EAAI4mB,EAAM5mB,GAAO4mB,EAAM5mB,EAAIyjd,EAAMzjd,GAC7F,OAAOV,KAAKE,IAAIgkd,EAAQvjd,EAAI2mB,EAAM3mB,QAK1C,IAAKujd,EAAQxjd,GAAK4mB,EAAM5mB,GAAK4mB,EAAM5mB,GAAKyjd,EAAMzjd,GAAOwjd,EAAQxjd,GAAK4mB,EAAM5mB,GAAK4mB,EAAM5mB,GAAKyjd,EAAMzjd,GAAM2kd,EArB5F,KAsBCnB,EAAQvjd,GAAK2mB,EAAM3mB,GAAK2mB,EAAM3mB,GAAKwjd,EAAMxjd,GAAOujd,EAAQvjd,GAAK2mB,EAAM3mB,GAAK2mB,EAAM3mB,GAAKwjd,EAAMxjd,GAAM2kd,EAtBhG,GAuBA,OAAOtld,KAAKE,IAAIqld,EAAMC,GAIlC,OAAO,KAGXvD,EAAkBlzd,UAAUo0d,iBAAmB,SAAUe,EAASC,GAC9D,IAAIsB,EAAQvB,EAAQxjd,EAAIyjd,EAAMzjd,EAC1Bgld,EAAQxB,EAAQvjd,EAAIwjd,EAAMxjd,EAC9B,OAAOX,KAAKunB,MAAMm+b,EAAOD,IAAU,IAAMzld,KAAKmR,KAElD8wc,EAAkBlzd,UAAUs0d,kBAAoB,SAAUa,EAASC,GAG/D,OADUnkd,KAAKQ,MAAO0jd,EAAQxjd,EAAIyjd,EAAMzjd,IAAMwjd,EAAQxjd,EAAIyjd,EAAMzjd,IAAQwjd,EAAQvjd,EAAIwjd,EAAMxjd,IAAMujd,EAAQvjd,EAAIwjd,EAAMxjd,KAQtHshd,EAAkBlzd,UAAUiX,QAAU,aAQtCi8c,EAAkBlzd,UAAU2mC,cAAgB,WAIxC,MAAO,YAEJusb,KC/ZP0D,GAA0B,WAC1B,SAASA,EAAS1hb,GACdtwC,KAAKiqD,QACLjqD,KAAKswC,QAAUA,EA4vCnB,OAzvCA0hb,EAAS52d,UAAUwnb,QAAU,WACzB,OACwE,IADhE5ib,KAAKswC,QAAQge,aAAapN,aAC3B2jX,GAAgB48B,aAAe58B,GAAgB45B,eAM1DuzB,EAAS52d,UAAU+qb,UAAY,SAAU71Y,EAASs1Y,EAAgB2b,EAAaC,EAAY1sa,EAAOwrB,EAAY/F,GAC1G,IAAI+T,EAAetuD,KAAKswC,QAAQge,aAE5B3iD,GAAWoB,EAAG,EAAGC,EAAG,GACpBupB,EAASs0B,GAAU+6X,EAAerza,SAClC0/c,GAAwB3vC,SAAS,EAAO32a,OAAQ,GAChDumd,GAAsB5vC,SAAS,EAAO32a,OAAQ,GAClD,GAAI3L,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB48B,aAAc,CACtE,IAAI5e,OAAW,GACfA,EAAWrib,SAAS4C,gBAAgB,6BAA8B,MACzDI,aAAa,KAAM,kBAC5Bq/a,EAASr/a,aAAa,iBAAkB,cACxCxD,KAAK04D,qBAAqB/2D,YAAYkhb,GACtC7ib,KAAKmyd,WAAW7hb,EAASs1Y,EAAgB/C,EAAUovC,EAAqBC,EAAmBp9b,EAAOwrB,IAAe/F,GAGrH,IAAI/tC,EAAO+pB,EAAOxpB,EAAI+nB,EAAM/nB,EACxBL,EAAM6pB,EAAOvpB,EAAI8nB,EAAM9nB,EACvBP,EAAQ8pB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQ8e,EAAM/nB,EACxCJ,EAAS4pB,EAAOvpB,EAAIupB,EAAOxgB,OAAS+e,EAAM9nB,EAC1Ciwa,EAAkB3uX,EAAa4uX,kBAAkBD,gBAEjDm1C,EAAepyd,KAAK+/B,MAAMtzB,EAAOwwa,EApBpB,GAqBbo1C,EAAcryd,KAAK+/B,MAAMvzB,EAAMywa,EArBlB,GAsBjBA,EAAkB3uX,EAAa0uX,oBAAoBC,gBACnD,IAAIq1C,EAAatyd,KAAK+/B,MAAMrzB,EAAKuwa,EAvBhB,GAwBbs1C,EAAgBvyd,KAAK+/B,MAAMpzB,EAAQswa,EAxBtB,GA0Bbu1C,EAAej8b,EAAOxpB,EAAIwpB,EAAOvgB,MACjCy8c,EAAgBl8b,EAAOvpB,EAAIupB,EAAOxgB,OA8DtC,OA7DKk8c,EAAoB3vC,QA0BjBtib,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB48B,aACxD91b,EAAOoB,EAAIkld,EAAoBtmd,OAG/BA,EAAOoB,EAAIwtC,EAASxtC,EAAIuzC,EAAWvzC,EA7BnC/M,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB6tD,oBACpDrmd,KAAKE,IAAIuoB,EAAM/nB,IAAM,IACjBw0b,EACIl1b,KAAKE,IAAI6ld,EAAeI,GAAgBnmd,KAAKE,IAAI8ld,EAAc97b,EAAOxpB,GACtEpB,EAAOoB,GAAKsld,EAAc97b,EAAOxpB,EAGjCpB,EAAOoB,GAAKqld,EAAeI,EAI3Bnmd,KAAKE,IAAI6ld,EAAeI,GAAgBnmd,KAAKE,IAAI8ld,EAAc97b,EAAOxpB,GACtEpB,EAAOoB,GAAKqld,EAAeI,EAG3B7md,EAAOoB,GAAKsld,EAAc97b,EAAOxpB,GAM7CpB,EAAOoB,EAAIwtC,EAASxtC,EAAIuzC,EAAWvzC,EAWtCmld,EAAkB5vC,QA0BnB32a,EAAOqB,EAAIkld,EAAkBvmd,OAzBzB3L,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB8tD,sBACpDtmd,KAAKE,IAAIuoB,EAAM9nB,IAAM,IACjBw0b,EACIn1b,KAAKE,IAAIgmd,EAAgBE,GAAiBpmd,KAAKE,IAAI+ld,EAAa/7b,EAAOvpB,GACvErB,EAAOqB,GAAKsld,EAAa/7b,EAAOvpB,EAGhCrB,EAAOqB,GAAKuld,EAAgBE,EAI5Bpmd,KAAKE,IAAIgmd,EAAgBE,GAAiBpmd,KAAKE,IAAI+ld,EAAa/7b,EAAOvpB,GACvErB,EAAOqB,GAAKuld,EAAgBE,EAG5B9md,EAAOqB,GAAKsld,EAAa/7b,EAAOvpB,GAM5CrB,EAAOqB,EAAIutC,EAASvtC,EAAIszC,EAAWtzC,EAMpCrB,GAKXqmd,EAAS52d,UAAU2kC,MAAQ,SAAUhjC,EAAOihb,EAAe52X,GAEnDA,EADAA,EAAQ,EACA/6C,KAAKkiE,IAAI,EAAGliE,KAAKmT,MAAMnT,KAAKglB,IAAI+1B,GAAS/6C,KAAKglB,IAAI,KAGlDhlB,KAAKkiE,IAAI,EAAGliE,KAAKqmB,KAAKrmB,KAAKglB,IAAI+1B,GAAS/6C,KAAKglB,IAAI,KAE7D,IAAIuhc,EAAS,EACT12d,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAI8hb,EAAcxhb,OAAQN,IAClC02d,GAAU50C,EAAc9hb,GAG5B,IACI22d,EAAM91d,GAFV61d,GAAUxra,GAGNniB,EAFW54B,KAAKmT,MAAMnT,KAAKE,IAAIxP,GAAS61d,GAEtBA,EACtB,GAAI3tb,IAASloC,EACT,GAAIA,GAAS,EACT,IAAKb,EAAI,EAAGA,EAAI8hb,EAAcxhb,OAAQN,IAAK,CACvC,GAAI22d,GAAO70C,EAAc9hb,GAAKkrD,EAC1B,OAAOniB,GAAQ4tb,EAAO70C,EAAc9hb,IAAM,EAAIkrD,GAAU,EAAI42X,EAAc9hb,GAAKkrD,GAG/EniB,GAAQ+4Y,EAAc9hb,GAAKkrD,EAC3Byra,GAAO70C,EAAc9hb,GAAKkrD,OAMlC,IADAniB,IAAe,EACV/oC,EAAI8hb,EAAcxhb,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC5C,GAAImQ,KAAKE,IAAIsmd,IAAQ70C,EAAc9hb,GAAKkrD,EACpC,OAAOniB,GAAQ54B,KAAKE,IAAIsmd,GAAQ70C,EAAc9hb,IAAM,EAAIkrD,GAAU,EAAI42X,EAAc9hb,GAAKkrD,GAGzFniB,GAAQ+4Y,EAAc9hb,GAAKkrD,EAC3Byra,GAAO70C,EAAc9hb,GAAKkrD,EAK1C,OAAOrqD,GAKXi1d,EAAS52d,UAAU+2d,WAAa,SAAU7hb,EAASs1Y,EAAgBxmZ,EAAG0zb,EAAgBC,EAAcj+b,EAAOk+b,GACvG,IACIC,EACAC,EACAC,EAHAC,EAAU,KAIV3sa,EAAWzmD,KAAKswC,QAAQmW,SACxB6H,EAAetuD,KAAKswC,QAAQge,aAC5B+ka,KACAC,KACAC,KACAC,KACAj9b,EAASs0B,GAAU+6X,EAAerza,SAClC60C,EAAQ9W,EAAQmW,SAASY,YACzB4+Y,GAAWx/Y,EAASC,iBACpBw/Y,GAAWz/Y,EAASG,eACpB6sa,EAAkBnla,EAAaola,mBAAqBtsa,EACpDupZ,EAAW,IAAI56a,GAAK,EAAG,EAAG0wB,EAASQ,cAAeR,EAASO,gBAC3D2sa,EAAiB,IAAI59b,GAAKkwa,EAAU7+Y,EAAQ7wB,EAAOvpB,EAAIymd,EAAkB,EAAI9iB,EAAS36b,MAAQoxC,EAAQ7wB,EAAOxgB,OAAS,EAAI09c,EAAkB,IAC5IG,EAAiB,IAAI79b,GAAMQ,EAAOxpB,EAAI0md,EAAkB,EAAIvtB,EAAU9+Y,EAAQ7wB,EAAOvgB,MAAQ,EAAIy9c,EAAkB,GAAK9iB,EAAS56b,OAASqxC,GAC9IupZ,EAAW,IAAI56a,GAAKkwa,EAAU7+Y,EAAO8+Y,EAAU9+Y,EAAOupZ,EAAS36b,MAAQoxC,EAAOupZ,EAAS56b,OAASqxC,GAChG,IACIlrD,EACAiL,EACA0sd,EAHAzna,EAAQpsD,KAAK8zd,UAAUxjb,EAAQ6iZ,cAAevN,EAAgBguC,EAAgBjjB,GAI9EhoZ,EAAYrY,EAAQqY,UACxB,IAAKzsD,EAAI,EAAGA,EAAIkwD,EAAM5vD,OAAQN,IAC1BiL,EAASilD,EAAMlwD,GACX8D,KAAK+zd,YAAYzjb,EAASnpC,KACpBnH,KAAKswC,QAAQqY,UAAUxhD,EAAO7D,cAAe+9C,KAAcrhD,KAAKg0d,YAAYrra,EAAWi9X,EAAgBz+a,MACzG0sd,EAAe1sd,EAAOovB,QACLxgB,OAAS89c,EAAa7md,EAAI8nB,EAAM9nB,EAAIupB,EAAOvpB,EACxDumd,EAAa/ud,MACT1H,IAAKqK,EAAQ6tC,SAAU3oC,KAAKE,IAAIgqB,EAAOvpB,EAAI8nB,EAAM9nB,EAAI6md,EAAa7md,EAAI6md,EAAa99c,UAGlF89c,EAAa7md,EAAIupB,EAAOvpB,EAAI8nB,EAAM9nB,EAAIupB,EAAOxgB,QAClDy9c,EAAgBhvd,MAAO1H,IAAKqK,EAAQ6tC,SAAU3oC,KAAKE,IAAIgqB,EAAOvpB,EAAI8nB,EAAM9nB,EAAIupB,EAAOxgB,OAAS89c,EAAa7md,MAE9F,MAAXomd,GAAmBA,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,EAAI8nB,EAAM9nB,MACpEX,KAAKE,IAAIsnd,EAAa9md,EAAI8md,EAAa79c,MAAQ,GAAKugB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQ,EAAI8e,EAAM/nB,KACxF0md,GACAP,EAAUlzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,WACtD68b,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,IAEtCX,KAAKE,IAAIsnd,EAAa9md,EAAI8md,EAAa79c,OAASugB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQ8e,EAAM/nB,KAAO0md,GAC5FP,EAAUlzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,SACtD68b,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,IAEtCX,KAAKE,IAAIsnd,EAAa9md,GAAKwpB,EAAOxpB,EAAI+nB,EAAM/nB,KAAO0md,GACxDP,EAAUlzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,QACtD68b,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,IAEtCX,KAAKE,IAAIsnd,EAAa9md,GAAKwpB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQ8e,EAAM/nB,KAAO0md,GACvEP,EAAUlzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,aACtD68b,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,IAEtCX,KAAKE,IAAIsnd,EAAa9md,EAAI8md,EAAa79c,OAASugB,EAAOxpB,EAAI+nB,EAAM/nB,KAAO0md,IAC7EP,EAAUlzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,aACtD68b,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,OAM/Do/C,EAAQpsD,KAAK8zd,UAAUxjb,EAAQ6iZ,cAAevN,EAAgB+tC,EAAgBhjB,GAC9E,IAAK,IAAIjtb,EAAI,EAAGA,EAAI0oC,EAAM5vD,OAAQknB,IAC9Bvc,EAASilD,EAAM1oC,GACX1jB,KAAK+zd,YAAYzjb,EAASnpC,KACpBnH,KAAKswC,QAAQqY,UAAUxhD,EAAO7D,cAAe+9C,KAAcrhD,KAAKg0d,YAAYrra,EAAWi9X,EAAgBz+a,MACzG0sd,EAAe1sd,EAAOovB,QACLxpB,EAAI8md,EAAa79c,MAAQugB,EAAOxpB,EAAI+nB,EAAM/nB,IACvDsmd,EAAcA,EAAc72d,SACxBM,IAAKqK,EAAQ6tC,SAAU3oC,KAAKE,IAAKgqB,EAAOxpB,EAAI+nB,EAAM/nB,EAAK8md,EAAa9md,EAAI8md,EAAa79c,SAGzF69c,EAAa9md,EAAIwpB,EAAOxpB,EAAI+nB,EAAM/nB,EAAIwpB,EAAOvgB,QAC7Cs9c,EAAeA,EAAe92d,SAC1BM,IAAKqK,EAAQ6tC,SAAU3oC,KAAKE,IAAIgqB,EAAOxpB,EAAI+nB,EAAM/nB,EAAIwpB,EAAOvgB,MAAQ69c,EAAa9md,MAG1E,MAAXkmd,GAAmBA,EAAU5md,KAAKE,IAAIsnd,EAAa9md,EAAIwpB,EAAOxpB,EAAI+nB,EAAM/nB,MACpEV,KAAKE,IAAIsnd,EAAa7md,EAAI6md,EAAa99c,OAAS,GAAKwgB,EAAOvpB,EAAIupB,EAAOxgB,OAAS,EAAI+e,EAAM9nB,KACvFymd,GACHN,EAAUnzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,WACtD08b,EAAU5md,KAAKE,IAAIsnd,EAAa9md,EAAIwpB,EAAOxpB,IAEtCV,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,EAAI8nB,EAAM9nB,IAAMymd,GACtDN,EAAUnzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,OACtD08b,EAAU5md,KAAKE,IAAIsnd,EAAa9md,EAAIwpB,EAAOxpB,IAEtCV,KAAKE,IAAIsnd,EAAa7md,EAAI6md,EAAa99c,QAAUwgB,EAAOvpB,EAAIupB,EAAOxgB,OAAS+e,EAAM9nB,KACvFymd,GACAN,EAAUnzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,UACtD08b,EAAU5md,KAAKE,IAAIsnd,EAAa9md,EAAIwpB,EAAOxpB,IAEtCV,KAAKE,IAAIsnd,EAAa7md,EAAI6md,EAAa99c,OAASwgB,EAAOvpB,EAAI8nB,EAAM9nB,IAAMymd,GAC5EN,EAAUnzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,aACtD08b,EAAU5md,KAAKE,IAAIsnd,EAAa9md,EAAIwpB,EAAOxpB,IAEtCV,KAAKE,IAAIsnd,EAAa7md,GAAKupB,EAAOvpB,EAAIupB,EAAOxgB,OAAS+e,EAAM9nB,KAAOymd,IACxEN,EAAUnzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,aACtD08b,EAAU5md,KAAKE,IAAIsnd,EAAa9md,EAAIwpB,EAAOxpB,OAM/D/M,KAAKk0d,iBAAiB5jb,EAAS4ib,EAASC,EAAS/zb,EAAG0zb,EAAgBC,EAAcC,GAC7EF,EAAexwC,SAChBtib,KAAKm0d,oBAAoB7jb,EAASlR,EAAGwmZ,EAAgBytC,EAAeC,EAAgBR,EAAgBC,EAAcC,EAAOl+b,EAAO2+b,GAE/HV,EAAazwC,SACdtib,KAAKo0d,oBAAoB9jb,EAASlR,EAAGwmZ,EAAgB2tC,EAAcC,EAAiBV,EAAgBC,EAAcC,EAAOl+b,EAAO2+b,IAMxIzB,EAAS52d,UAAU6pb,iBAAmB,SAAUtxZ,GAC5C,IAAI26B,EAAetuD,KAAKswC,QAAQge,aAMhC,OAJIA,EAAapN,YAAc2jX,GAAgB45B,cAC3C9qa,EAAM5mB,EAAI/M,KAAK+/B,MAAMpM,EAAM5mB,EAAGuhD,EAAa4uX,kBAAkBD,gBAFhD,GAGbtpZ,EAAM3mB,EAAIhN,KAAK+/B,MAAMpM,EAAM3mB,EAAGshD,EAAa0uX,oBAAoBC,gBAHlD,IAKVtpZ,GAEXq+b,EAAS52d,UAAU24d,YAAc,SAAUzjb,EAAS/vC,GAEhD,OADAA,EAAOP,KAAKswC,QAAQqY,UAAUpoD,EAAK+C,KAC1B06D,GAAWh+D,KAAKswC,QAAS/vC,GAAM,IAE5Cyxd,EAAS52d,UAAUi5d,SAAW,SAAU/jb,EAASwib,EAAgBC,EAAclwC,EAAUwiB,EAAQC,EAAQ1f,EAAgBotC,GACrH,IAAII,EACAH,EAGAC,EACAC,EAHA7ka,EAAetuD,KAAKswC,QAAQge,aAC5B7H,EAAWzmD,KAAKswC,QAAQmW,SAGxBlwB,EAASs0B,GAAU+6X,EAAerza,SAClCo2C,EAAYrY,EAAQqY,UACpB2ra,KACAC,KACAnta,EAAQ9W,EAAQmW,SAASY,YACzB4+Y,GAAWx/Y,EAASC,iBACpBw/Y,GAAWz/Y,EAASG,eACpB6sa,EAAkBnla,EAAaola,mBAAqBtsa,EACpDupZ,EAAW,IAAI56a,GAAK,EAAG,EAAG0wB,EAASQ,cAAeR,EAASO,gBAC3Dwta,EAAmB,IAAIz+b,GAAKkwa,EAAU7+Y,GAAQ7wB,EAAOvpB,EAAI,GAAKo6C,EAAOupZ,EAAS36b,MAAQoxC,GAAQ7wB,EAAOxgB,OAAS,IAAMqxC,GACpHqta,EAAmB,IAAI1+b,IAAMQ,EAAOxpB,EAAI,GAAKq6C,EAAO8+Y,EAAU9+Y,GAAQ7wB,EAAOvgB,MAAQ,IAAMoxC,EAAOupZ,EAAS56b,OAASqxC,GACxHupZ,EAAW,IAAI56a,GAAKkwa,EAAU7+Y,EAAO8+Y,EAAU9+Y,EAAOupZ,EAAS36b,MAAQoxC,EAAOupZ,EAAS56b,OAASqxC,GAChG,IAEIlrD,EACAiL,EACA0sd,EAJAa,KACAtoa,EAAQpsD,KAAK8zd,UAAUxjb,EAAQ6iZ,cAAevN,EAAgB6uC,EAAkB9jB,EAAU+jB,GAI9F,IAAKx4d,EAAI,EAAGA,EAAIkwD,EAAM5vD,OAAQN,IAC1BiL,EAASilD,EAAMlwD,IACX8D,KAAKg0d,YAAYrra,EAAWi9X,EAAgBz+a,IAAanH,KAAKswC,QAAQqY,UAAUxhD,EAAO7D,cAAe+9C,KACtGwya,EAAe1sd,EAAOovB,QACP,MAAX68b,GAAmBA,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,MAC1D8ld,EAAetmd,KACXH,KAAKE,IAAIgqB,EAAOxpB,EAAIs4b,EAASwuB,EAAa9md,IAAM0md,GAChDP,EAAUlzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,QACtD68b,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,IAEtCX,KAAKE,IAAIgqB,EAAOxpB,EAAIs4b,EAASwuB,EAAa9md,EAAI8md,EAAa79c,QAAUy9c,IAC1EP,EAAUlzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,aACtD68b,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,IAG1C8ld,EAAermd,QAChBJ,KAAKE,IAAIgqB,EAAOxpB,EAAIs4b,EAAS9ua,EAAOvgB,MAAQ69c,EAAa9md,EAAI8md,EAAa79c,QAAUy9c,GACpFP,EAAUlzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,SACtD68b,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,IAEtCX,KAAKE,IAAIgqB,EAAOxpB,EAAIs4b,EAAS9ua,EAAOvgB,MAAQ69c,EAAa9md,IAAM0md,IACpEP,EAAUlzd,KAAKi0d,iBAAiBJ,EAAct9b,EAAQ,aACtD68b,EAAU/md,KAAKE,IAAIsnd,EAAa7md,EAAIupB,EAAOvpB,OAM/Do/C,EAAQpsD,KAAK8zd,UAAUxjb,EAAQ6iZ,cAAevN,EAAgB4uC,EAAkB7jB,GAChF,IAAK,IAAIhpb,EAAM,EAAGA,EAAMykC,EAAM5vD,OAAQmrB,IAAO,CACzC,IAAI0xB,EAAW+S,EAAMzkC,GACrB,GAAI3nB,KAAKg0d,YAAYrra,EAAWi9X,EAAgBvsY,MAAer5C,KAAKswC,QAAQqY,UAAUtP,EAAS/1C,cAAe+9C,IAAY,CACtH,IAAIsza,EAAiBt7a,EAAS9iB,QACf,MAAX08b,GAAmBA,EAAU5md,KAAKE,IAAIood,EAAe5nd,EAAIwpB,EAAOxpB,MAC5Dgmd,EAAarmd,IACTL,KAAKE,IAAIgqB,EAAOvpB,EAAIs4b,EAASqvB,EAAe3nd,IAAMymd,GAClDN,EAAUnzd,KAAKi0d,iBAAiBU,EAAgBp+b,EAAQ,OACxD08b,EAAU5md,KAAKE,IAAIood,EAAe5nd,EAAIwpB,EAAOxpB,IAExCV,KAAKE,IAAIgqB,EAAOvpB,EAAIs4b,EAASqvB,EAAe3nd,EAAI2nd,EAAe5+c,SAAW09c,IAC/EN,EAAUnzd,KAAKi0d,iBAAiBU,EAAgBp+b,EAAQ,aACxD08b,EAAU5md,KAAKE,IAAIood,EAAe5nd,EAAIwpB,EAAOxpB,IAG5Cgmd,EAAapmd,SACdN,KAAKE,IAAIgqB,EAAOvpB,EAAIupB,EAAOxgB,OAASuvb,EAASqvB,EAAe3nd,EAAI2nd,EAAe5+c,SAAW09c,GAC1FN,EAAUnzd,KAAKi0d,iBAAiBU,EAAgBp+b,EAAQ,UACxD08b,EAAU5md,KAAKE,IAAIood,EAAe5nd,EAAIwpB,EAAOxpB,IAExCV,KAAKE,IAAIgqB,EAAOvpB,EAAIupB,EAAOxgB,OAASuvb,EAASqvB,EAAe3nd,IAAMymd,IACvEN,EAAUnzd,KAAKi0d,iBAAiBU,EAAgBp+b,EAAQ,aACxD08b,EAAU5md,KAAKE,IAAIood,EAAe5nd,EAAIwpB,EAAOxpB,OAMjE,IAAK7Q,EAAI,EAAGA,EAAIw4d,EAAYl4d,OAAQN,IAEhC,GADAiL,EAASutd,EAAYx4d,GACjB8D,KAAKg0d,YAAYrra,EAAWi9X,EAAgBz+a,GAAS,CACrD,IAAIytd,EAAiBztd,EAAOovB,OACxBzB,EAAQg+b,EAAetmd,MAAQ64b,EAASA,EACxC3mF,EAAaryW,KAAKE,IAAIgqB,EAAOvgB,MAAQ8e,EAAQ8/b,EAAe5+c,OAC5D6+c,OAAa,EACbn2G,GAAc+0G,IACdoB,EAAa/B,EAAetmd,MAAQood,EAAe5+c,MAAQugB,EAAOvgB,MAAQ4+c,EAAe5+c,MAAQugB,EAAOvgB,MACxGs+c,EAAUA,EAAU93d,SAAYF,OAAQ6K,EAAQu3W,WAAYA,EAAY/yW,OAAQkpd,IAEpF//b,EAAQi+b,EAAarmd,KAAO44b,EAASA,EACrC,IAAI7iB,EAAOp2a,KAAKE,IAAIgqB,EAAOxgB,OAAS+e,EAAQ8/b,EAAe7+c,QACvD0sa,GAAQgxC,IACRoB,EAAa9B,EAAarmd,KAAOkod,EAAe7+c,OAASwgB,EAAOxgB,OAAS6+c,EAAe7+c,OAASwgB,EAAOxgB,OACxGw+c,EAAWA,EAAW/3d,SAAYF,OAAQ6K,EAAQu3W,WAAY+jE,EAAM92a,OAAQkpd,IAIxF,IACKvkb,EAAQy+Y,QACC/ub,KAAKk0d,iBAAiB5jb,EAAS4ib,EAASC,EAAStwC,EAAUiwC,EAAgBC,EAAcC,IAElGF,EAAexwC,SAAWgyC,EAAU93d,OAAS,IAAMs2d,EAAetmd,MAAQsmd,EAAermd,QAC1FzM,KAAK80d,kBAAkBxkb,EAASuyY,EAAUyxC,EAAWxB,EAAgBE,EAAOptC,IAE3EmtC,EAAazwC,SAAWiyC,EAAW/3d,OAAS,IAAMu2d,EAAarmd,KAAOqmd,EAAapmd,SACpF3M,KAAK+0d,mBAAmBzkb,EAASuyY,EAAU0xC,EAAYxB,EAAcC,EAAOptC,IAOpFosC,EAAS52d,UAAU+nb,QAAU,SAAU2vC,EAAgBC,EAAclwC,EAAUwiB,EAAQC,EAAQzqa,EAAOm4b,EAAOgC,GACzG,IAAIvyC,EAAO6iB,EACXytB,EAAarmd,KAAM,EACnB,IAAIM,EACJ8ld,EAAetmd,KAAOsmd,EAAermd,OAAQ,EAQ7C,GALIzM,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB48B,eAAiB5ma,EAAMwgB,cAE/EruC,EAAIgod,EAAehod,EAAIgod,EAAej/c,OAAS8kB,EAAM63B,MAAM1lD,EAAIs4b,GAAUzqa,EAAM5uB,QAAU4uB,EAAM9kB,OAAS8kB,EAAM63B,MAAM1lD,GACpHhN,KAAKq0d,SAASr0d,KAAKswC,QAASwib,EAAgBC,EAAclwC,EAAUwiB,EAAQr4b,EAAGhN,KAAKswC,QAAQ6b,cAAe6ma,IAE1GD,EAAazwC,QASdG,EAAQ6iB,EAASt4b,EAAK+ld,EAAapnd,YARnC,GAAI3L,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB8tD,sBAAuB,CAC/E,IAAI92a,EAAQm5a,EAAehod,EAAIgod,EAAej/c,OAAS8kB,EAAM63B,MAAM1lD,EAC/Diod,EAAYp5a,EAAQypZ,EAExB7iB,EADiBzib,KAAK+/B,MAAMk1b,EAAWj1d,KAAKswC,QAAQge,aAAa0uX,oBAAoBC,gBAX5E,GAYWphY,EAM5B,OAAO4mY,GAMXuvC,EAAS52d,UAAU8nb,UAAY,SAAU4vC,EAAgBC,EAAclwC,EAAUwiB,EAAQC,EAAQzqa,EAAOm4b,EAAOkC,GAC3G,IACInod,EADAy1a,EAAO6iB,EAEXytB,EAAermd,OAAQ,EACvBsmd,EAAarmd,IAAMqmd,EAAapmd,QAAS,EAQzC,GALI3M,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB48B,eAAiB5ma,EAAMwgB,cAE/EtuC,EAAImod,EAAanod,EAAImod,EAAal/c,OAAS,EAAI6kB,EAAM63B,MAAM3lD,GAAKs4b,GAAUxqa,EAAMhvB,QAAUgvB,EAAM7kB,OAAS,EAAI6kB,EAAM63B,MAAM3lD,IACzH/M,KAAKq0d,SAASr0d,KAAKswC,QAASwib,EAAgBC,EAAclwC,EAAU91a,EAAGu4b,EAAQtlc,KAAKswC,QAAQ6b,cAAe6ma,IAE1GF,EAAexwC,QAShBE,EAAQ6iB,EAASt4b,EAAK+ld,EAAennd,YARrC,GAAI3L,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB6tD,oBAAqB,CAC7E,IAAIjmd,EAAQyod,EAAanod,EAAImod,EAAal/c,OAAS,EAAI6kB,EAAM63B,MAAM3lD,GAC/D+2b,EAAcr3b,EAAQ44b,EAE1B7iB,EADmBxib,KAAK+/B,MAAM+ja,EAAa9jc,KAAKswC,QAAQge,aAAa4uX,kBAAkBD,gBAX9E,GAYaxwa,EAM9B,OAAO+1a,GAMXwvC,EAAS52d,UAAU6nb,SAAW,SAAU6vC,EAAgBC,EAAclwC,EAAUwiB,EAAQC,EAAQzqa,EAAOm4b,EAAOmC,GAC1G,IAAI3yC,EAAO6iB,EACPt4b,EAAI,EACR+ld,EAAetmd,MAAO,EACtBumd,EAAarmd,IAAMqmd,EAAapmd,QAAS,EAQzC,GALI3M,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB48B,eAAiB5ma,EAAMwgB,cAE/EtuC,EAAIood,EAAepod,EAAIood,EAAen/c,MAAQ6kB,EAAM63B,MAAM3lD,EAAIs4b,GAAUxqa,EAAMhvB,QAAUgvB,EAAM7kB,MAAQ6kB,EAAM63B,MAAM3lD,GAClH/M,KAAKq0d,SAASr0d,KAAKswC,QAASwib,EAAgBC,EAAclwC,EAAU91a,EAAGu4b,EAAQtlc,KAAKswC,QAAQ6b,cAAe6ma,IAE1GF,EAAexwC,QAShBE,EAAQ6iB,EAASt4b,EAAK+ld,EAAennd,YARrC,GAAI3L,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB6tD,oBAAqB,CAC7E,IAAIlmd,EAAO2od,EAAepod,EAAIood,EAAen/c,MAAQ6kB,EAAM63B,MAAM3lD,EAC7Dqod,EAAa5od,EAAO64b,EAExB7iB,EADkBxib,KAAK+/B,MAAMq1b,EAAYp1d,KAAKswC,QAAQge,aAAa0uX,oBAAoBC,gBAX9E,GAYYzwa,EAM7B,OAAOg2a,GAMXwvC,EAAS52d,UAAUgob,WAAa,SAAU0vC,EAAgBC,EAAclwC,EAAUwiB,EAAQC,EAAQzqa,EAAOm4b,EAAOqC,GAC5G,IAAI5yC,EAAO6iB,EACXytB,EAAapmd,QAAS,EACtBmmd,EAAetmd,KAAOsmd,EAAermd,OAAQ,EAC7C,IACIO,EAAI,EAEJhN,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB48B,eAAiB5ma,EAAMwgB,cAE/EruC,EAAIqod,EAAYrod,EAAIqod,EAAYt/c,QAAU,EAAI8kB,EAAM63B,MAAM1lD,GAAKs4b,GAAUzqa,EAAM5uB,QAAU4uB,EAAM9kB,QAAU,EAAI8kB,EAAM63B,MAAM1lD,IACzHhN,KAAKq0d,SAASr0d,KAAKswC,QAASwib,EAAgBC,EAAclwC,EAAUwiB,EAAQr4b,EAAGhN,KAAKswC,QAAQ6b,cAAe6ma,IAI/G,GAD0Cnoa,GAAhChwB,aAAiB00B,GAAyB10B,EAAmBA,EAAMtoB,SACxEwgd,EAAazwC,QASdG,EAAQ6iB,EAASt4b,EAAK+ld,EAAapnd,YARnC,GAAI3L,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB8tD,sBAAuB,CAC/E,IAAIhmd,EAAS0od,EAAYrod,EAAIqod,EAAYt/c,QAAU,EAAI8kB,EAAM63B,MAAM1lD,GAC/Dg3b,EAAer3b,EAAS24b,EAE5B7iB,EADoBzib,KAAK+/B,MAAMika,EAAchkc,KAAKswC,QAAQge,aAAa0uX,oBAAoBC,gBAdlF,GAectwa,EAM/B,OAAO81a,GAKXuvC,EAAS52d,UAAU84d,iBAAmB,SAAU5jb,EAAS4ib,EAASC,EAAStwC,EAAUiwC,EAAgBC,EAAcC,GAyB/G,OAxBIE,IACAJ,EAAennd,OAASund,EAAQrnd,QAChCind,EAAexwC,SAAU,EACpB0wC,IACGE,EAAQxsd,KACR1G,KAAKs1d,qBAAqBpC,EAAQ31d,MAAO21d,EAAQj0c,IAAK4ja,EAAUvyY,EAAQmW,SAASp5C,aAOzF8ld,IACAJ,EAAapnd,OAASwnd,EAAQlnd,QAC9B8md,EAAazwC,SAAU,EAClB0wC,IACGG,EAAQzsd,KACR1G,KAAKs1d,qBAAqBnC,EAAQ51d,MAAO41d,EAAQl0c,IAAK4ja,EAAUvyY,EAAQmW,SAASp5C,aAOtFw1a,GAKXmvC,EAAS52d,UAAUk6d,qBAAuB,SAAU/3d,EAAO0hB,EAAK/B,EAAK7P,GACjE9P,GACIwP,GAAIxP,EAAMwP,EAAIM,EAAUuhU,IAAMvhU,EAAU+5C,MACxCp6C,GAAIzP,EAAMyP,EAAIK,EAAUshU,IAAMthU,EAAU+5C,OAE5CnoC,GACIlS,GAAIkS,EAAIlS,EAAIM,EAAUuhU,IAAMvhU,EAAU+5C,MACtCp6C,GAAIiS,EAAIjS,EAAIK,EAAUshU,IAAMthU,EAAU+5C,OAE1C,IAAIsvT,GACAt2U,OAAQ,UAAW4uB,YAAa,EAAG1O,YAAcvzC,EAAGxP,EAAMwP,EAAGC,EAAGzP,EAAMyP,GACtEutC,UAAYxtC,EAAGkS,EAAIlS,EAAGC,EAAGiS,EAAIjS,GAAKkzB,KAAM,UAAW63B,UAAW,GAAI/hD,MAAO,EACzEjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG6L,MAAO,EAAGi2C,OAAQ,EACzCC,OAAQ,EAAGxgC,SAAS,EAAM7pB,QAAS,EAAGnK,GAAIk3D,MAE1Ct+D,EAAI,EAER,IADA8D,KAAKiqD,KAAKzlD,KAAKkyW,GACVx6W,EAAI,EAAGA,EAAI8D,KAAKiqD,KAAKztD,OAAQN,IAC9B8D,KAAKswC,QAAQorZ,gBAAgB9nW,SAAS12E,EAAKld,KAAKiqD,KAAK47G,QAM7DmsT,EAAS52d,UAAU+4d,oBAAsB,SAAU7jb,EAASlR,EAAGvE,EAAOw4b,EAAeC,EAAgBR,EAAgBC,EAAcC,EAAOl+b,EAAO2+b,GAC7I,IAAI/md,EAAM,EACV1M,KAAKu1d,eAAelC,EAAe,YAAY,GAC/Crzd,KAAKu1d,eAAejC,EAAgB,YAAY,GAChD,IAEIkC,EACAC,EACA5B,EACA6B,EALAC,KACAp/b,EAASs0B,GAAUhwB,EAAMtoB,SA0B7B,GArBI8gd,EAAc72d,OAAS,IACvBm5d,EAAcA,EAAcn5d,QAAU62d,EAAc,GAEpD3md,GADA8od,EAAgBnC,EAAc,GAAM,IAAQ,QAC1Brmd,EACdqmd,EAAc72d,OAAS,GACvBq3d,EAAiBR,EAAc,GAAM,IAAQ,OAC7CqC,EAAgBF,EAAYzod,EAAI8md,EAAa9md,EAAI8md,EAAa79c,MAC1D3J,KAAKE,IAAImpd,EAAgBrC,EAAc,GAAGr+a,WAAay+a,EACvD/md,EAAM1M,KAAK41d,6BAA6BvC,EAAeqC,EAAehpd,EAAKipd,GAG3ED,EAAgBrC,EAAc,GAAGr+a,UAIrC0gb,EAAgBrC,EAAc,GAAGr+a,UAGzCh1C,KAAKu1d,eAAeI,EAAe,YACnCA,EAAcA,EAAcn5d,SAAYM,IAAK+9B,EAAOma,SAAU,GAC9DtoC,EAAM6pB,EAAOvpB,EAAIN,IAAQA,EAAM6pB,EAAOvpB,EAAIN,EACtC4md,EAAe92d,OAAS,EAAG,CAC3B,IAAI6gD,OAAO,EAOX,GANAo4a,EAAiBnC,EAAe,GAAM,IAAQ,OAC9C5md,EAAM+od,EAAazod,EAAIN,EAAM+od,EAAazod,EAAIN,EAC1C4md,EAAe92d,OAAS,IAExB6gD,GADAw2a,EAAiBP,EAAe,GAAM,IAAQ,QAC1Bvmd,EAAI0od,EAAa1od,EAAI0od,EAAaz/c,OAEtDq9c,EAAc72d,OAAS,EACvB,GAAI6P,KAAKE,IAAI+md,EAAe,GAAGt+a,SAAWq+a,EAAc,GAAGr+a,WAAay+a,EAAiB,CACrF,IAAIoC,EAAkBxpd,KAAKE,IAAI+md,EAAe,GAAGt+a,SAAWq+a,EAAc,GAAGr+a,UAAY,EACxFs+a,EAAe,GAAGt+a,SAAWq+a,EAAc,GAAGr+a,SAC3C0gb,GAAiBG,EAAkBH,GAAiBG,EACxDF,EAAcA,EAAcn5d,QAAU82d,EAAe,QAEvB,IAAzBD,EAAc72d,SACnBg5d,OAAct6d,EACdy6d,EAAchtc,OAAO,EAAG,GACxBgtc,EAAcA,EAAcn5d,QAAU82d,EAAe,GACrDoC,EAAgBr4a,QAIpBq4a,EAAgBr4a,EAChBs4a,EAAcA,EAAcn5d,QAAU82d,EAAe,GAErDA,EAAe92d,OAAS,GAAKi5d,EAAa1od,EAAI0od,EAAaz/c,MAAQ69c,EAAa9md,IAChFL,EAAM1M,KAAK81d,8BAA8BxC,EAAgBj2a,EAAM3wC,EAAKipd,EAAelC,IAG3F,GAAIkC,EAAcn5d,OAAS,EAAG,CAC1BwD,KAAK+1d,iBAAiBzlb,EAASlR,EAAGu2b,EAAe3C,EAAOtmd,GACxD,IAAIspd,EAAkB,EAClBhD,IACAgD,EAAkBlhc,EAAM/nB,GAExByod,EACA1C,EAAennd,OAAS+pd,EAAgBrpd,KAAKE,IAAIgqB,EAAOxpB,EAAIipd,EAAkBR,EAAYzod,EAAIyod,EAAYx/c,OACpGggd,EAEDP,IACL3C,EAAennd,OAASU,KAAKE,IAAIgqB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQggd,EAAkBP,EAAa1od,GACpF2od,EAAgBM,GAE1BlD,EAAexwC,SAAU,IAMjC0vC,EAAS52d,UAAUg5d,oBAAsB,SAAU9jb,EAASlR,EAAGvE,EAAO04b,EAAcC,EAAiBV,EAAgBC,EAAcC,EAAOl+b,EAAO2+b,GAC7I,IAAIhnd,EAAQ,EACZzM,KAAKu1d,eAAehC,EAAc,YAAY,GAC9Cvzd,KAAKu1d,eAAe/B,EAAiB,YAAY,GACjD,IAEIyC,EACAC,EACArC,EACA6B,EALAC,KACAp/b,EAASs0B,GAAUhwB,EAAMtoB,SAKzBghd,EAAa/2d,OAAS,IACtBm5d,EAAcA,EAAcn5d,QAAU+2d,EAAa,GAEnD9md,GADAwpd,EAAe1C,EAAa,GAAM,IAAQ,QACvBxmd,EAAIkpd,EAAWjgd,MAC9Bu9c,EAAa/2d,OAAS,GACtBq3d,EAAiBN,EAAa,GAAM,IAAQ,OAC5CmC,EAAgBO,EAAWjpd,EAAI6md,EAAa7md,EAAI6md,EAAa99c,OACzD1J,KAAKE,IAAImpd,EAAgBnC,EAAa,GAAGv+a,WAAay+a,EACtDhnd,EAAQzM,KAAKm2d,4BAA4B5C,EAAcmC,EAAejpd,EAAOkpd,GAG7ED,EAAgBnC,EAAa,GAAGv+a,UAIpC0gb,EAAgBnC,EAAa,GAAGv+a,UAGxCh1C,KAAKu1d,eAAeI,EAAe,YACnCA,EAAcA,EAAcn5d,SAAYM,IAAK+9B,EAAOma,SAAU,GAC9DvoC,EAAQ8pB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQvJ,IAAUA,EAAQ8pB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQvJ,EAC9E,IAAI4wC,EACJ,GAAIm2a,EAAgBh3d,OAAS,EAAG,CAO5B,GANA05d,EAAkB1C,EAAgB,GAAM,IAAQ,OAChD/md,EAAQypd,EAAcnpd,EAAImpd,EAAclgd,MAAQvJ,EAAQypd,EAAcnpd,EAAImpd,EAAclgd,MAAQvJ,EAC5F+md,EAAgBh3d,OAAS,IAEzB6gD,GADAw2a,EAAiBL,EAAgB,GAAM,IAAQ,QAC3Bxmd,EAAIkpd,EAAclpd,EAAIkpd,EAAcngd,QAExDw9c,EAAa/2d,OAAS,EACtB,GAAI6P,KAAKE,IAAIind,EAAgB,GAAGx+a,SAAWu+a,EAAa,GAAGv+a,WAAay+a,EAAiB,CACrF,IAAIoC,EAAkBxpd,KAAKE,IAAIind,EAAgB,GAAGx+a,SAAWu+a,EAAa,GAAGv+a,UAAY,EACxFw+a,EAAgB,GAAGx+a,SAAWu+a,EAAa,GAAGv+a,SAC3C0gb,GAAiBG,EAAkBH,GAAiBG,EACxDF,EAAcA,EAAcn5d,QAAUg3d,EAAgB,QAEzB,IAAxBD,EAAa/2d,SAClBy5d,OAAa/6d,EACby6d,EAAchtc,OAAO,EAAG,GACxBgtc,EAAcA,EAAcn5d,QAAUg3d,EAAgB,GACtDkC,EAAgBr4a,QAIpBq4a,EAAgBr4a,EAChBs4a,EAAcA,EAAcn5d,QAAUg3d,EAAgB,GAEtDA,EAAgBh3d,OAAS,GAAKq3d,EAAa7md,EAAIkpd,EAAclpd,EAAIkpd,EAAcngd,SAC/EtJ,EAAQzM,KAAKo2d,+BAA+B5C,EAAiBn2a,EAAM5wC,EAAOkpd,EAAelC,IAGjG,GAAIkC,EAAcn5d,OAAS,EAAG,CAC1BwD,KAAKq2d,iBAAiB/lb,EAASlR,EAAGu2b,EAAe3C,EAAOvmd,GACxD,IAAI6pd,EAAgB,EAChBtD,IACAsD,EAAgBxhc,EAAM9nB,GAEtBipd,EACAlD,EAAapnd,OAAS+pd,EAAgBrpd,KAAKE,IAAIgqB,EAAOvpB,EAAIspd,EAAgBL,EAAWjpd,EAAIipd,EAAWlgd,QAAUugd,EAEzGJ,IACLnD,EAAapnd,OAASU,KAAKE,IAAIgqB,EAAOvpB,EAAIupB,EAAOxgB,OAASugd,EAAgBJ,EAAclpd,GAAK0od,EAAgBY,GAEjHvD,EAAazwC,SAAU,IAM/B0vC,EAAS52d,UAAU26d,iBAAmB,SAAUzlb,EAASlR,EAAGu2b,EAAe3C,EAAOtmd,GAC9E,IAAIxQ,EACAqB,EACA0hB,EACJ,IAAK+zc,EACD,IAAK92d,EAAI,EAAGA,EAAIy5d,EAAcn5d,OAAS,EAAGN,IAAK,CAC3C,IAAIq6d,EAAOZ,EAAcz5d,GAAGY,eAAe4kD,GACvCmJ,GAAW8qa,EAAcz5d,GAAM,IAAEqW,SAAaojd,EAAcz5d,GAAM,IAAQ,OAC1EovC,EAAOqqb,EAAcz5d,EAAI,GAAGY,eAAe4kD,GAC3CmJ,GAAW8qa,EAAcz5d,EAAI,GAAM,IAAEqW,SAAaojd,EAAcz5d,EAAI,GAAM,IAAQ,OACtFqB,GAAUwP,EAAGwpd,EAAKxpd,EAAIwpd,EAAKvgd,MAAOhJ,EAAGN,EAAM,IAC3CuS,GAAQlS,EAAGu+B,EAAKv+B,EAAGC,EAAGN,EAAM,IAC5B1M,KAAKw2d,mBAAmBj5d,EAAO0hB,EAAKmgB,EAAGp/B,KAAK04D,qBAAsBpoB,EAAQmW,SAASp5C,aAO/F2kd,EAAS52d,UAAUi7d,iBAAmB,SAAU/lb,EAASlR,EAAGq3b,EAAsBzD,EAAOvmd,GACrF,IAAIlP,EACA0hB,EACJ,IAAK+zc,EACD,IAAK,IAAI92d,EAAI,EAAGA,EAAIu6d,EAAqBj6d,OAAS,EAAGN,IAAK,CACtD,IAAIq6d,EAAOE,EAAqBv6d,GAAGY,eAAe4kD,GAC9CmJ,GAAW4ra,EAAqBv6d,GAAM,IAAEqW,SAAakkd,EAAqBv6d,GAAM,IAAQ,OACxFovC,EAAOmrb,EAAqBv6d,EAAI,GAAGY,eAAe4kD,GAClDmJ,GAAW4ra,EAAqBv6d,EAAI,GAAM,IAAEqW,SAC1Ckkd,EAAqBv6d,EAAI,GAAM,IAAQ,OAC7CqB,GAAUwP,EAAGN,EAAQ,GAAIO,EAAGupd,EAAKvpd,EAAIupd,EAAKxgd,QAC1CkJ,GAAQlS,EAAGN,EAAQ,GAAIO,EAAGs+B,EAAKt+B,GAC/BhN,KAAKw2d,mBAAmBj5d,EAAO0hB,EAAKmgB,EAAGp/B,KAAK04D,qBAAsBpoB,EAAQmW,SAASp5C,aAO/F2kd,EAAS52d,UAAU05d,kBAAoB,SAAUxkb,EAASuyY,EAAU6zC,EAAY5D,EAAgBE,EAAOn4b,GACnG76B,KAAKu1d,eAAemB,EAAY,UAChC,IAEInG,EACAC,EAHAj6b,EAASs0B,GAAUhwB,EAAMtoB,SACzBpL,EAASuvd,EAAW,GAGpB7C,EAAgB1sd,EAAa,OAAEovB,OAC/Bogc,KACJA,EAAUnyd,KAAKkyd,EAAW,IAC1B,IAAIx6d,EAEJ,IAAKA,EAAI,EAAGA,EAAIw6d,EAAWl6d,OAAQN,IACjBw6d,EAAWx6d,GAAS,OAAEq6B,OACrBvgB,QAAU69c,EAAa79c,OAClC2gd,EAAUnyd,KAAKkyd,EAAWx6d,IAGlC,IAAK82d,EAID,IAHAzC,GAAYxjd,EAAGwpB,EAAOxpB,EAAI5F,EAAOwE,OAAQqB,EAAGupB,EAAOvpB,EAAI,IACvDwjd,GAAUzjd,EAAGwpB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQ7O,EAAOwE,OAAQqB,EAAGupB,EAAOvpB,EAAI,IACpEhN,KAAKw2d,mBAAmBjG,EAASC,EAAO3tC,EAAU7ib,KAAK04D,qBAAsBpoB,EAAQmW,SAASp5C,WACzFnR,EAAI,EAAGA,EAAIy6d,EAAUn6d,OAAQN,IAE9Bq0d,GAAYxjd,GADZwpB,EAAUogc,EAAUz6d,GAAS,OAAEq6B,QACTxpB,EAAGC,EAAGupB,EAAOvpB,EAAI,IACvCwjd,GAAUzjd,EAAGwpB,EAAOxpB,EAAIwpB,EAAOvgB,MAAOhJ,EAAGupB,EAAOvpB,EAAI,IACpDhN,KAAKw2d,mBAAmBjG,EAASC,EAAO3tC,EAAU7ib,KAAK04D,qBAAsBpoB,EAAQmW,SAASp5C,WAGtGyld,EAAennd,OAASxE,EAAOwE,OAC/Bmnd,EAAexwC,SAAU,GAK7B0vC,EAAS52d,UAAU25d,mBAAqB,SAAUzkb,EAASuyY,EAAU+zC,EAAa7D,EAAcC,EAAOn4b,GACnG76B,KAAKu1d,eAAeqB,EAAa,UACjC,IAGIr5d,EACA0hB,EAJAsX,EAASs0B,GAAUhwB,EAAMtoB,SACzBpL,EAASyvd,EAAY,GACrB/C,EAAgB1sd,EAAa,OAAEovB,OAG/Bogc,KACJA,EAAUnyd,KAAKoyd,EAAY,IAC3B,IAAI16d,EAEJ,IAAKA,EAAI,EAAGA,EAAI06d,EAAYp6d,OAAQN,IAClB06d,EAAY16d,GAAS,OAAEq6B,OACtBxgB,SAAW89c,EAAa99c,QACnC4gd,EAAUnyd,KAAKoyd,EAAY16d,IAGnC,IAAK82d,EAID,IAHAz1d,GAAUwP,EAAGwpB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQ,GAAIhJ,EAAGupB,EAAOvpB,EAAI7F,EAAOwE,QAChEsT,GAAQlS,EAAGwpB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQ,GAAIhJ,EAAGupB,EAAOvpB,EAAI7F,EAAOwE,OAAS4qB,EAAOxgB,QAC9E/V,KAAKw2d,mBAAmBj5d,EAAO0hB,EAAK4ja,EAAU7ib,KAAK04D,qBAAsBpoB,EAAQmW,SAASp5C,WACrFnR,EAAI,EAAGA,EAAIy6d,EAAUn6d,OAAQN,IAE9BqB,GAAUwP,GADVwpB,EAAUogc,EAAUz6d,GAAS,OAAEq6B,QACXxpB,EAAIwpB,EAAOvgB,MAAQ,GAAIhJ,EAAGupB,EAAOvpB,GACrDiS,GAAQlS,EAAGwpB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQ,GAAIhJ,EAAGupB,EAAOvpB,EAAIupB,EAAOxgB,QAC9D/V,KAAKw2d,mBAAmBj5d,EAAO0hB,EAAK4ja,EAAU7ib,KAAK04D,qBAAsBpoB,EAAQmW,SAASp5C,WAGlG0ld,EAAapnd,OAASxE,EAAOwE,OAC7Bond,EAAazwC,SAAU,GAK3B0vC,EAAS52d,UAAUo7d,mBAAqB,SAAUj5d,EAAO0hB,EAAK4ja,EAAU3la,EAAK7P,GACzE,IAAImuB,EAEAk7U,EACA11W,EAAU,IAAI67C,GACd7pC,KACJzV,GACIwP,GAAIxP,EAAMwP,EAAIM,EAAUuhU,IAAMvhU,EAAU+5C,MACxCp6C,GAAIzP,EAAMyP,EAAIK,EAAUshU,IAAMthU,EAAU+5C,OAE5CnoC,GACIlS,GAAIkS,EAAIlS,EAAIM,EAAUuhU,IAAMvhU,EAAU+5C,MACtCp6C,GAAIiS,EAAIjS,EAAIK,EAAUshU,IAAMthU,EAAU+5C,OAEtC7pD,EAAMwP,IAAMkS,EAAIlS,GAChByuB,EAAI,KAAOj+B,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,IAAMzP,EAAMwP,EAAI,IAAMxP,EAAMyP,EACxE,KAAOzP,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,MAAaiS,EAAIlS,EAAI,GAAK,KACrEkS,EAAIjS,EAAI,GAAK,KAAOiS,EAAIlS,EAAI,IAAMkS,EAAIjS,EAAI,MAC1CiS,EAAIlS,EAAI,GAAK,KAAOkS,EAAIjS,EAAI,GAAK,IACtC0pW,GACIp2T,YAAcvzC,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GAC3CutC,UAAYxtC,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GACzCozB,OAAQ,UACR4uB,YAAa,EAAG9uB,KAAM,UAAW63B,UAAW,GAAI/hD,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG6L,MAAO,EAAGi2C,OAAQ,EACnGC,OAAQ,EAAGxgC,SAAS,EAAM7pB,QAAS,EAAGnK,GAAIk3D,MAE9Cx5D,EAAQzE,KAAOi/B,EACfxoB,EAAQzW,KAAOyE,EAAQzE,KACvByW,EAAQ4O,MAAQ,EAChB5O,EAAQ6kD,OAAS,EACjB7kD,EAAQ8kD,OAAS,EACjB9kD,EAAQjG,EAAI,EACZiG,EAAQhG,EAAI,EACZgG,EAAQ+C,OAAS,EACjB/C,EAAQgD,MAAQ,EAChBhD,EAAQ1P,GAAKk3D,KACbx6D,KAAKswC,QAAQorZ,gBAAgB1la,SAAS6sZ,EAAU7va,GAChDhT,KAAKiqD,KAAKzlD,KAAKkyW,GACf12W,KAAKswC,QAAQorZ,gBAAgB9nW,SAASivV,EAAU7ib,KAAKiqD,KAAK47G,OAC1D6wM,GACIp2T,YAAcvzC,EAAGkS,EAAIlS,EAAI,EAAGC,EAAGiS,EAAIjS,EAAI,GACvCutC,UAAYxtC,EAAGkS,EAAIlS,EAAI,EAAGC,EAAGiS,EAAIjS,EAAI,GACrCozB,OAAQ,UACR4uB,YAAa,EAAG9uB,KAAM,UAAW63B,UAAW,GAAI/hD,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG6L,MAAO,EAAGi2C,OAAQ,EACnGC,OAAQ,EAAGxgC,SAAS,EAAM7pB,QAAS,EAAGnK,GAAItD,KAAK04D,qBAAqBp1D,GAAK,WAE7EtD,KAAKiqD,KAAKzlD,KAAKkyW,GACf12W,KAAKswC,QAAQorZ,gBAAgB9nW,SAASivV,EAAU7ib,KAAKiqD,KAAK47G,SAG1DrqI,EAAI,KAAOj+B,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,KAAOzP,EAAMwP,EAAI,IAAMxP,EAAMyP,EACzE,MAAQzP,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,MAAaiS,EAAIlS,EAAI,GAAK,KACtEkS,EAAIjS,EAAI,GAAK,KAAOiS,EAAIlS,EAAI,IAAMkS,EAAIjS,EACvC,MAAQiS,EAAIlS,EAAI,GAAK,KAAOkS,EAAIjS,EAAI,GAAK,IAC7ChM,EAAQzE,KAAOi/B,EACfxoB,EAAQzW,KAAOi/B,EACfxoB,EAAQ4O,MAAQ,EAChB5O,EAAQ6kD,OAAS,EACjB7kD,EAAQ8kD,OAAS,EACjB9kD,EAAQjG,EAAI,EACZiG,EAAQhG,EAAI,EACZgG,EAAQ+C,OAAS,EACjB/C,EAAQgD,MAAQ,EAChBhD,EAAQ1P,GAAKk3D,KACbx6D,KAAKswC,QAAQorZ,gBAAgB1la,SAAS6sZ,EAAU7va,GAChD0jW,GACIp/U,SAAS,EAAM7pB,QAAS,EAAGnK,GAAIk3D,KAC/Bla,YAAcvzC,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GAC3CutC,UAAYxtC,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GACzCozB,OAAQ,UACR4uB,YAAa,EAAG9uB,KAAM,UAAW63B,UAAW,IAAK/hD,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG6L,MAAO,EAAGi2C,OAAQ,EACpGC,OAAQ,GAEZ93D,KAAKiqD,KAAKzlD,KAAKkyW,GACf12W,KAAKswC,QAAQorZ,gBAAgB9nW,SAASivV,EAAU7ib,KAAKiqD,KAAK47G,OAC1D6wM,GACI1gW,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG6L,MAAO,EAAGi2C,OAAQ,EACnDC,OAAQ,EAAGxgC,SAAS,EAAM7pB,QAAS,EAAGnK,GAAIk3D,KAC1Cla,YAAcvzC,EAAGkS,EAAIlS,EAAI,EAAGC,EAAGiS,EAAIjS,EAAI,GACvCutC,UAAYxtC,EAAGkS,EAAIlS,EAAI,EAAGC,EAAGiS,EAAIjS,EAAI,GACrCozB,OAAQ,UACR4uB,YAAa,EAAG9uB,KAAM,UAAW63B,UAAW,KAEhD/3D,KAAKiqD,KAAKzlD,KAAKkyW,GACf12W,KAAKswC,QAAQorZ,gBAAgB9nW,SAASivV,EAAU7ib,KAAKiqD,KAAK47G,QAE9D6wM,GACIp2T,YAAcvzC,EAAGxP,EAAMwP,EAAGC,EAAGzP,EAAMyP,GACnCutC,UAAYxtC,EAAGkS,EAAIlS,EAAGC,EAAGiS,EAAIjS,GAAKozB,OAAQ,UAAW4uB,YAAa,EAAG9uB,KAAM,UAC3E63B,UAAW,IAAK/hD,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAG6L,MAAO,EAAGi2C,OAAQ,EACnEC,OAAQ,EAAGxgC,SAAS,EAAM7pB,QAAS,EAAGnK,GAAIk3D,MAE9Cx6D,KAAKiqD,KAAKzlD,KAAKkyW,GACf12W,KAAKswC,QAAQorZ,gBAAgB9nW,SAASivV,EAAU7ib,KAAKiqD,KAAK47G,QAM9DmsT,EAAS52d,UAAU64d,iBAAmB,SAAUJ,EAAct9b,EAAQsgc,GAClE,IAAI1E,EACJ,OAAQ0E,GACJ,IAAK,OACD1E,GACI50d,OAASwP,EAAI8md,EAAc,EAAG7md,EAAGX,KAAK+T,IAAIyzc,EAAa7md,EAAGupB,EAAOvpB,IACjEiS,KAAOlS,EAAI8md,EAAc,EAAG7md,EAAGX,KAAKC,IAAIund,EAAa7md,EAAI6md,EAAa99c,OAAQwgB,EAAOvpB,EAAIupB,EAAOxgB,SAChGlK,QAASgod,EAAa9md,EAAIwpB,EAAOxpB,EAAGd,QAAS,EAAGvF,KAAM,aAE1D,MACJ,IAAK,QACDyrd,GACIzrd,KAAM,YACNnJ,OAASwP,EAAI8md,EAAa9md,EAAI8md,EAAa79c,MAAQhJ,EAAGX,KAAK+T,IAAIyzc,EAAa7md,EAAGupB,EAAOvpB,IACtFnB,QAASgod,EAAa9md,EAAI8md,EAAa79c,MAAQugB,EAAOxpB,EAAIwpB,EAAOvgB,MACjE/J,QAAS,EACTgT,KACIlS,EAAI8md,EAAa9md,EAAI8md,EAAa79c,MAClChJ,EAAGX,KAAKC,IAAIund,EAAa7md,EAAI6md,EAAa99c,OAAQwgB,EAAOvpB,EAAIupB,EAAOxgB,UAG5E,MACJ,IAAK,MACDo8c,GACIlmd,QAAS4nd,EAAa7md,EAAIupB,EAAOvpB,EAAGnB,QAAS,EAAGnF,KAAM,YACtDnJ,OAASwP,EAAIV,KAAK+T,IAAIyzc,EAAa9md,EAAGwpB,EAAOxpB,GAAKC,EAAG6md,EAAa7md,GAClEiS,KAAOlS,EAAIV,KAAKC,IAAIund,EAAa9md,EAAI8md,EAAa79c,MAAOugB,EAAOxpB,EAAIwpB,EAAOvgB,OAAShJ,EAAG6md,EAAa7md,IAExG,MACJ,IAAK,SACDmld,GACIzrd,KAAM,YAAauF,QAAS4nd,EAAa7md,EAAI6md,EAAa99c,OAASwgB,EAAOvpB,EAAIupB,EAAOxgB,OAAQlK,QAAS,EACtGoT,KACIlS,EAAIV,KAAKC,IAAIund,EAAa9md,EAAI8md,EAAa79c,MAAOugB,EAAOxpB,EAAIwpB,EAAOvgB,OACpEhJ,EAAG6md,EAAa7md,EAAI6md,EAAa99c,QAErCxY,OAASwP,EAAIV,KAAK+T,IAAIyzc,EAAa9md,EAAGwpB,EAAOxpB,GAAKC,EAAG6md,EAAa7md,EAAI6md,EAAa99c,SAEvF,MACJ,IAAK,YACDo8c,GACI50d,OAASwP,EAAIV,KAAK+T,IAAIyzc,EAAa9md,EAAGwpB,EAAOxpB,GAAKC,EAAG6md,EAAa7md,EAAI6md,EAAa99c,QACnFkJ,KACIlS,EAAIV,KAAKC,IAAIund,EAAa9md,EAAI8md,EAAa79c,MAAOugB,EAAOxpB,EAAIwpB,EAAOvgB,OACpEhJ,EAAG6md,EAAa7md,EAAI6md,EAAa99c,QAErC9J,QAAS4nd,EAAa7md,EAAI6md,EAAa99c,OAASwgB,EAAOvpB,EAAGnB,QAAS,EAAGnF,KAAM,aAEhF,MACJ,IAAK,YACDyrd,GACI50d,OAASwP,EAAIV,KAAK+T,IAAIyzc,EAAa9md,EAAGwpB,EAAOxpB,GAAKC,EAAG6md,EAAa7md,GAClEiS,KAAOlS,EAAIV,KAAKC,IAAIund,EAAa9md,EAAI8md,EAAa79c,MAAOugB,EAAOxpB,EAAIwpB,EAAOvgB,OAAShJ,EAAG6md,EAAa7md,GACpGf,QAAS4nd,EAAa7md,EAAIupB,EAAOvpB,EAAIupB,EAAOxgB,OAAQlK,QAAS,EAAGnF,KAAM,aAE1E,MACJ,IAAK,YACDyrd,GACI50d,OAASwP,EAAI8md,EAAa9md,EAAI8md,EAAa79c,MAAQhJ,EAAGX,KAAK+T,IAAIyzc,EAAa7md,EAAGupB,EAAOvpB,IACtFiS,KACIlS,EAAI8md,EAAa9md,EAAI8md,EAAa79c,MAClChJ,EAAGX,KAAKC,IAAIund,EAAa7md,EAAI6md,EAAa99c,OAAQwgB,EAAOvpB,EAAIupB,EAAOxgB,SAExElK,QAASgod,EAAa9md,EAAI8md,EAAa79c,MAAQugB,EAAOxpB,EAAGd,QAAS,EAAGvF,KAAM,aAE/E,MACJ,IAAK,YACDyrd,GACI50d,OAASwP,EAAI8md,EAAc,EAAG7md,EAAIX,KAAK+T,IAAIyzc,EAAa7md,EAAGupB,EAAOvpB,IAClEiS,KAAOlS,EAAI8md,EAAc,EAAG7md,EAAGX,KAAKC,IAAIund,EAAa7md,EAAI6md,EAAa99c,OAAQwgB,EAAOvpB,EAAIupB,EAAOxgB,SAChGlK,QAASgod,EAAa9md,EAAIwpB,EAAOxpB,EAAIwpB,EAAOvgB,MAAO/J,QAAS,EAAGvF,KAAM,aAEzE,MACJ,IAAK,UACDyrd,GACI50d,OAASwP,EAAI8md,EAAa9md,EAAI8md,EAAa79c,MAAQ,EAAIhJ,EAAIX,KAAK+T,IAAIyzc,EAAa7md,EAAGupB,EAAOvpB,IAC3FiS,KACIlS,EAAI8md,EAAa9md,EAAI8md,EAAa79c,MAAQ,EAC1ChJ,EAAGX,KAAKC,IAAIund,EAAa7md,EAAI6md,EAAa99c,OAAQwgB,EAAOvpB,EAAIupB,EAAOxgB,SAExElK,QAASgod,EAAa9md,EAAI8md,EAAa79c,MAAQ,GAAKugB,EAAOxpB,EAAIwpB,EAAOvgB,MAAQ,GAAI/J,QAAS,EAAGvF,KAAM,eAExG,MACJ,IAAK,UACDyrd,GACI50d,OAASwP,EAAIV,KAAK+T,IAAIyzc,EAAa9md,EAAGwpB,EAAOxpB,GAAKC,EAAG6md,EAAa7md,EAAI6md,EAAa99c,OAAS,GAC5FkJ,KACIlS,EAAIV,KAAKC,IAAIund,EAAa9md,EAAI8md,EAAa79c,MAAOugB,EAAOxpB,EAAIwpB,EAAOvgB,OACpEhJ,EAAG6md,EAAa7md,EAAI6md,EAAa99c,OAAS,GAE9C9J,QAAS4nd,EAAa7md,EAAI6md,EAAa99c,OAAS,GAAKwgB,EAAOvpB,EAAIupB,EAAOxgB,OAAS,GAAIlK,QAAS,EAAGnF,KAAM,eAIlH,OAAOyrd,GAMXH,EAAS52d,UAAUksb,UAAY,SAAUh3Y,EAAS1uB,GAC9C,IACI0la,EADetnb,KAAKswC,QAAQge,aACHg5X,UACzBtxa,EAAQ4L,GAAS0la,GAAa,GAClC,OAAItxa,GAAUsxa,EAAY,EACf1la,EAAQ0la,EAAYtxa,EAGpB4L,EAAQ5L,GAMvBg8c,EAAS52d,UAAU44d,YAAc,SAAUrra,EAAWi9X,EAAgBz+a,GAClE,OACInH,KAAKswC,QAAQ6b,cAAcC,MAAM5vD,QAAUwD,KAAKswC,QAAQ6b,cAAcC,MAAM,GAAG9oD,KAAO6D,EAAO7D,IAUrG0ud,EAAS52d,UAAU04d,UAAY,SAAU3gC,EAAe5yb,EAAMF,EAAOswc,EAAU+jB,GAK3E,IAAK,IAHDoC,EACAvgc,EAFA61B,KAGA06Y,EAAQ3T,EAAcyT,UAAU8tB,EAAc/jB,EAAWtwc,GACpDnE,EAAI,EAAGA,EAAI4qc,EAAMtqc,OAAQN,IAAK,CACnC,IAAI6rc,EAAOjB,EAAM5qc,GACjB,GAAI6rc,EAAKn9Y,QAAQpuD,OAAS,EACtB,IAAK,IAAIknB,EAAI,EAAGA,EAAIqkb,EAAKn9Y,QAAQpuD,OAAQknB,IACrCozc,EAAK/uB,EAAKn9Y,QAAQlnC,GACZ1jB,KAAKswC,QAAQqY,UAAUmua,EAAGxzd,cAAe+9C,KAAcy1a,EAAGx/b,UAC5Df,EAASs0B,GAAUisa,IACQ,IAAvB1qa,EAAM7tD,QAAQu4d,IAAc92d,KAAKivd,eAAe5ud,EAAOk2B,IACvD61B,EAAM5nD,KAAKsyd,GAEXpC,GAAeA,EAAYn2d,QAAQu4d,IAAO92d,KAAKivd,eAAete,EAAUp6a,IACxEm+b,EAAYlwd,KAAKsyd,IAMrC,OAAO1qa,GAEX4la,EAAS52d,UAAU6zd,eAAiB,SAAU5ud,EAAOk2B,GACjD,OAAWA,EAAOxpB,EAAK1M,EAAM0M,EAAI1M,EAAM2V,OAAY3V,EAAM0M,EAAKwpB,EAAOxpB,EAAIwpB,EAAOvgB,OACxEugB,EAAOvpB,EAAK3M,EAAM2M,EAAI3M,EAAM0V,QAAc1V,EAAM2M,EAAKupB,EAAOvpB,EAAIupB,EAAOxgB,QAEnFi8c,EAAS52d,UAAUs9D,mBAAqB,WACpC,OAAO14D,KAAKswC,QAAQorZ,gBAAgB/hB,iBAMxCq4C,EAAS52d,UAAUsmc,iBAAmB,SAAUpxZ,GAC5C,IAAIqpa,EAAgB35c,KAAK04D,qBAAqBvpC,eAAe,kBACzD86B,EAAOjqD,KAAK04D,qBAAqBvpC,eAAe,aAChDwqb,GACAA,EAAcl5c,WAAW6E,YAAYq0c,GAErC1vZ,GACAA,EAAKxpD,WAAW6E,YAAY2kD,IAMpC+na,EAAS52d,UAAUm6d,eAAiB,SAAUz4d,EAAKC,EAAOg6d,GACtD,IAAI76d,EACAwnB,EACAqX,EACJ,GAAIg8b,EACA,IAAK76d,EAAI,EAAGA,EAAIY,EAAIN,OAAQN,IACxB,IAAKwnB,EAAIxnB,EAAI,EAAGwnB,EAAI5mB,EAAIN,OAAQknB,IACxB5mB,EAAIZ,GAAGa,GAASD,EAAI4mB,GAAG3mB,KACvBg+B,EAAOj+B,EAAIZ,GACXY,EAAIZ,GAAKY,EAAI4mB,GACb5mB,EAAI4mB,GAAKqX,QAMrB,IAAK7+B,EAAI,EAAGA,EAAIY,EAAIN,OAAQN,IACxB,IAAKwnB,EAAIxnB,EAAI,EAAGwnB,EAAI5mB,EAAIN,OAAQknB,IACxB5mB,EAAIZ,GAAGa,GAASD,EAAI4mB,GAAG3mB,KACvBg+B,EAAOj+B,EAAIZ,GACXY,EAAIZ,GAAKY,EAAI4mB,GACb5mB,EAAI4mB,GAAKqX,IAS7Bi3b,EAAS52d,UAAUw6d,6BAA+B,SAAUvC,EAAe2D,EAAetqd,EAAKipd,GAC3F,IAAIsB,EACApD,EACAx2a,EACAnhD,EACJ,IAAKA,EAAI,EAAGA,EAAIm3d,EAAc72d,SAC1By6d,EAAe5D,EAAcn3d,EAAI,GAAM,IAAQ,OAC/C23d,EAAiBR,EAAcn3d,GAAM,IAAQ,OAC7CmhD,EAAO45a,EAAWlqd,EAAI8md,EAAa9md,EAAI8md,EAAa79c,MAChD3J,KAAKE,IAAI8wC,EAAO25a,IAAkB,GAJJ96d,IAK9By5d,EAAcA,EAAcn5d,QAAU62d,EAAcn3d,GAChD23d,EAAa7md,EAAIN,IACjBA,EAAMmnd,EAAa7md,GAO/B,OAAON,GAKXsld,EAAS52d,UAAU06d,8BAAgC,SAAUxC,EAAgB0D,EAAetqd,EAAKipd,EAAelC,GAC5G,IACItsd,EACA0sd,EACAoD,EACA55a,EAJA65a,EAAiB5D,EAAe,GAAGt+a,SAKvC,GAAI3oC,KAAKE,IAAIyqd,EAAgBE,IAAmBzD,EAC5C,IAAK,IAAIv3d,EAAI,EAAGA,EAAIo3d,EAAe92d,OAAS,IACxC2K,EAASmsd,EAAep3d,GAAGY,IAC3B+2d,EAAiBP,EAAep3d,EAAI,GAAM,IAAQ,OAClD+6d,EAAc9vd,EAAa,OAC3Bk2C,EAAOw2a,EAAa9md,EAAIkqd,EAAWlqd,EAAIkqd,EAAWjhd,MAC9C3J,KAAKE,IAAI8wC,EAAO25a,IAAkB,GALK96d,IAMvCy5d,EAAcA,EAAcn5d,QAAU82d,EAAep3d,EAAI,GACrD+6d,EAAWjqd,EAAIN,IACfA,EAAMuqd,EAAWjqd,GAQjC,OAAON,GAEXsld,EAAS52d,UAAU+6d,4BAA8B,SAAU5C,EAAcyD,EAAevqd,EAAOkpd,GAI3F,IAAK,IAHDsB,EACApD,EACAx2a,EACKnhD,EAAI,EAAGA,EAAIq3d,EAAa/2d,SAC7By6d,EAAe1D,EAAar3d,EAAI,GAAM,IAAQ,OAC9C23d,EAAiBN,EAAar3d,GAAM,IAAQ,OAC5CmhD,EAAO45a,EAAWjqd,EAAI6md,EAAa7md,EAAI6md,EAAa99c,OAChD1J,KAAKE,IAAI8wC,EAAO25a,IAAkB,GAJD96d,IAKjCy5d,EAAcA,EAAcn5d,QAAU+2d,EAAar3d,GAC/C23d,EAAa9md,EAAI8md,EAAa79c,MAAQvJ,IACtCA,EAAQond,EAAa9md,EAAI8md,EAAa79c,OAOlD,OAAOvJ,GAKXuld,EAAS52d,UAAUg7d,+BAAiC,SAAU5C,EAAiBwD,EAAevqd,EAAOkpd,EAAelC,GAChH,IACItsd,EACA0sd,EACAoD,EACA55a,EAJA65a,EAAiB1D,EAAgB,GAAGx+a,SAKxC,GAAI3oC,KAAKE,IAAIyqd,EAAgBE,IAAmBzD,EAC5C,IAAK,IAAIv3d,EAAI,EAAGA,EAAIs3d,EAAgBh3d,OAAS,IACzC2K,EAASqsd,EAAgBt3d,GAAGY,IAC5B+2d,EAAiBL,EAAgBt3d,EAAI,GAAM,IAAQ,OACnD+6d,EAAc9vd,EAAa,OAC3Bk2C,EAAOw2a,EAAa7md,EAAIiqd,EAAWjqd,EAAIiqd,EAAWlhd,OAC9C1J,KAAKE,IAAI8wC,EAAO25a,IAAkB,GALM96d,IAMxCy5d,EAAcA,EAAcn5d,QAAUg3d,EAAgBt3d,EAAI,GACtD+6d,EAAWlqd,EAAIkqd,EAAWjhd,MAAQvJ,IAClCA,EAAQwqd,EAAWlqd,EAAIkqd,EAAWjhd,OAQlD,OAAOvJ,GAMXuld,EAAS52d,UAAU0nb,SAAW,WAC1B,IAAID,EAOJ,OANI7ib,KAAKswC,QAAQge,aAAapN,YAAc2jX,GAAgB48B,gBACxD5e,EAAWrib,SAAS4C,gBAAgB,6BAA8B,MACzDI,aAAa,KAAM,kBAC5Bq/a,EAASr/a,aAAa,iBAAkB,cACxCxD,KAAK04D,qBAAqB/2D,YAAYkhb,IAEnCA,GAcXmvC,EAAS52d,UAAUiX,QAAU,aAQ7B2/c,EAAS52d,UAAU2mC,cAAgB,WAI/B,MAAO,YAEJiwb,KCnwCPx6B,GAA0B,WAK1B,SAASA,IACLx3b,KAAKm3d,WAAY,EACjBn3d,KAAK0hb,cAurBT,OAnrBA8V,EAASp8b,UAAUwxc,YAAc,SAAUt8Z,GACvCA,EAAQwlZ,aACJstB,SAAS,EAAOD,SAAS,EAAOiU,aAAc,KAC9C5yd,KAAM8rC,EAAQo0Y,gBAAgBrpb,KAAKi1C,GAAUg+Z,KAAMnzc,SAAUozc,KAAMpzc,SACnE8qb,iBAAkB31Y,EAAQ21Y,iBAAiB5qb,KAAKi1C,GAAUi2Y,eAAgBj2Y,EAAQi2Y,eAAelrb,KAAKi1C,GACtG+mb,OAAQ,KAAMC,aAAeC,eAIrC//B,EAASp8b,UAAUspb,gBAAkB,SAAUH,EAAOj0Y,GAClD,IAAI85Y,EAAc,KAElB,GAAI95Y,EAAQwlZ,YAAYuhC,OAAQ,CAE5B,IAAsB,IADT/mb,EAAQwlZ,YAAYuhC,OAAO9yC,GAC7B3qZ,OACP,OAGJ0W,EAAQwlZ,aAAexlZ,EAAQwlZ,YAAYqtB,SAAW7ya,EAAQwlZ,YAAYshC,gBAC1EhtC,EAAc95Y,EAAQwlZ,YAAYshC,cAClB9rb,KACR8+Y,EAAY53T,WACA43T,EAAY9+Y,KACdknF,SAAW,KACrB43T,EAAY9+Y,KAAOi5Y,EACnBA,EAAM/xT,SAAW43T,IAIrBA,EAAY9+Y,KAAOi5Y,EACnBA,EAAM/xT,SAAW43T,IAGzB95Y,EAAQwlZ,YAAYshC,aAAe7yC,EACnCvkb,KAAKw3d,eAAelnb,GACpBA,EAAQwlZ,YAAYqtB,SAAU,EAC9B7ya,EAAQwlZ,YAAYstB,SAAU,GAGlC5rB,EAASp8b,UAAUkzc,KAAO,SAAUh+Z,GAChC,IAAIi0Y,EAAQvkb,KAAKy3d,aAAannb,GAC1Bonb,EAAsB,EACtBnzC,IACuB,aAAnBA,EAAMvrO,UACa,aAAfurO,EAAM79a,MACNgxd,IACA13d,KAAKm3d,WAAY,GAGjBn3d,KAAK23d,UAAUpzC,EAAOj0Y,GAEtBtwC,KAAKm3d,YACLn3d,KAAK43d,gBAAgBrzC,EAAOj0Y,EAASonb,GACrC13d,KAAKm3d,WAAY,IAIrB7mb,EAAQwlZ,YAAYwY,KAAK/pB,KAIrCiT,EAASp8b,UAAUo8d,eAAiB,SAAUlnb,GAC1C,IAGIsxZ,EACAC,EAJAy1B,KACAC,KACAM,EAAYvnb,EAAQwlZ,YAAYshC,aAUpC,IAPAS,EAAYvnb,EAAQwlZ,YAAYshC,aAC5B9mb,EAAQwlZ,YAAYqtB,SAAoD,IAAzC7ya,EAAQwlZ,YAAYwhC,UAAU96d,OAC7DwD,KAAK83d,iBAAiBR,EAAWO,GAGjC73d,KAAK83d,iBAAiBP,EAAWM,GAE9BA,GAAaA,EAAUrlW,UAC1BovU,EAAUi2B,EAAUrlW,SACpBxyH,KAAK83d,iBAAiBR,EAAW11B,GACjCi2B,EAAYA,EAAUrlW,SAG1B,IADAqlW,EAAYvnb,EAAQwlZ,YAAYshC,aACzBS,GAAaA,EAAUvsb,MAC1Bu2Z,EAAUg2B,EAAUvsb,KACpBtrC,KAAK83d,iBAAiBP,EAAW11B,GACjCg2B,EAAYA,EAAUvsb,KAE1BgF,EAAQwlZ,YAAYwhC,UAAYA,EAChChnb,EAAQwlZ,YAAYyhC,UAAYA,GAEpC//B,EAASp8b,UAAU08d,iBAAmB,SAAU9uX,EAAMlsG,GAC9CA,GAAoB,eAAbA,EAAI4J,MAAsC,aAAb5J,EAAI4J,MACxCsiG,EAAKxkG,MACDggb,WAAY1nb,EAAI0nb,WAAa1nb,EAAI0nb,WAAa,KAC9CC,WAAY3nb,EAAI2nb,WAAa3nb,EAAI2nb,WAAa,KAC9C/9a,KAAM5J,EAAI4J,KAAO5J,EAAI4J,KAAO,KAC5BsyM,SAAUl8M,EAAIk8M,SAAWl8M,EAAIk8M,SAAW,QAIpDw+O,EAASp8b,UAAUw8d,gBAAkB,SAAUrzC,EAAOj0Y,EAASonb,GAC3D,KAA+B,IAAxBA,GACH13d,KAAK23d,UAAUpzC,EAAOj0Y,GAEH,gBADnBi0Y,EAAQvkb,KAAKy3d,aAAannb,IAChB5pC,KACNgxd,IAEoB,aAAfnzC,EAAM79a,MACXgxd,IAGRA,EAAsB,GAE1BlgC,EAASp8b,UAAUu8d,UAAY,SAAUpzC,EAAOj0Y,GAC5C,IAAIxzC,EAIJ,GAHmB,oBAAfynb,EAAM79a,MAA6C,sBAAf69a,EAAM79a,MAA+C,2BAAf69a,EAAM79a,OAChF5J,EAAOynb,EAAgB,YAER,eAAfA,EAAM79a,MAAwC,aAAf69a,EAAM79a,MACjC4pC,EAAQwlZ,YAAYwhC,UAAU96d,OAAS,EAAG,CAC1C,IAAIu7d,EAAYznb,EAAQwlZ,YAAYwhC,UAAU3uc,OAAO,EAAG,GACxD2nB,EAAQwlZ,YAAYyhC,UAAU5uc,OAAO,EAAG,EAAGovc,EAAU,IAK7D,OAFAznb,EAAQoc,uBAAsB,GAC9Bpc,EAAQyU,gBAAkBC,GAAcwyY,SAChCjT,EAAM79a,MACV,IAAK,kBACL,IAAK,QACL,IAAK,aACD1G,KAAKg4d,sBAAsBl7d,EAAKwzC,GAChC,MACJ,IAAK,cACL,IAAK,SACDtwC,KAAKi4d,kBAAkBn7d,EAAKwzC,EAASi0Y,GACrC,MACJ,IAAK,kBACDvkb,KAAKk4d,sBAAsBp7d,EAAKwzC,EAASi0Y,GACzC,MACJ,IAAK,oBACDvkb,KAAKm4d,wBAAwBr7d,EAAKwzC,GAClC,MACJ,IAAK,kBACDtwC,KAAKo4d,sBAAsB7zC,EAAOj0Y,GAAS,GAC3C,MACJ,IAAK,oBACDi0Y,EAAM8zC,QAAS,EACfr4d,KAAKs4d,wBAAwB/zC,EAAOj0Y,GACpCi0Y,EAAM8zC,QAAS,EACf,MACJ,IAAK,yBACD9zC,EAAM8zC,QAAS,EACfr4d,KAAKu4d,6BAA6Bh0C,EAAOj0Y,GACzCi0Y,EAAM8zC,QAAS,EACf,MACJ,IAAK,wBACD9zC,EAAM8zC,QAAS,EACfr4d,KAAKw4d,4BAA4Bj0C,EAAOj0Y,GACxCi0Y,EAAM8zC,QAAS,EACf,MACJ,IAAK,QACDr4d,KAAKu3b,QAAQhT,EAAOj0Y,GACpB,MACJ,IAAK,UACDtwC,KAAKk5F,MAAMqrV,EAAOj0Y,GAClB,MACJ,IAAK,iBACDtwC,KAAKy4d,qBAAqB37d,EAAKwzC,GAC/B,MACJ,IAAK,sBACDtwC,KAAK04d,kBAAkBn0C,EAAOj0Y,GAAS,GACvC,MACJ,IAAK,4BACDtwC,KAAK24d,wBAAwBp0C,EAAOj0Y,GAAS,GAGrDA,EAAQyU,iBAAmBC,GAAcwyY,SACzClnZ,EAAQoc,uBAAsB,GAC9Bpc,EAAQ69Z,qBAAqB5pB,IAEjCiT,EAASp8b,UAAU89F,MAAQ,SAAU0/X,EAActob,GAC/CA,EAAQlsC,IAAIw0d,EAAan0C,aAE7B+S,EAASp8b,UAAUm8b,QAAU,SAAUhT,EAAOj0Y,GAC1Ci0Y,EACMC,WAAav4X,GAAYs4X,EAAME,YACrC,IAAIlkb,EAAOgkb,EAAME,WACjBn0Y,EAAQ+wY,eAAekW,QAAQh3b,IAEnCi3b,EAASp8b,UAAUy9d,eAAiB,SAAUx7d,GAC1C,MAAY,WAARA,GAA4B,YAARA,GAK5Bm6b,EAASp8b,UAAUwjO,YAAc,SAAUv0L,EAAY6wB,GACnD,IAAK,IAAI98D,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK49D,GAAW98D,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC/D,IAAIf,EAAMwF,EAAGzE,GACR4B,KAAK64d,eAAex7d,KACjB69D,EAAS79D,aAAgBiB,OACzB0B,KAAK4+N,YAAYv0L,EAAWhtC,GAAM69D,EAAS79D,IAG3CgtC,EAAWhtC,GAAO69D,EAAS79D,MAK3Cm6b,EAASp8b,UAAUu9d,wBAA0B,SAAUp0C,EAAOj0Y,EAASwob,GACnE,IAAI1uC,EAAe,EAAW7F,EAAMC,WAAaD,EAAME,WACnDs0C,EAAaxla,GAAe62X,EAAa7F,EAAMiC,gBAC/CwyC,EAAc1ob,EAAQ+wY,eAAe+d,qBAAqB9uZ,EAAQqY,UAAUyhY,EAAY9mb,IAAKy1d,GAC7F/8B,EAAgB1rZ,EAAQqY,UAAUyhY,EAAY9mb,IAC9CiR,EAAiBg/C,GAAeyoY,EAAezX,EAAMiC,gBACzDjya,EAAe5I,OAASotd,EAAWptd,OACnC4I,EAAeyqB,OAAS+5b,EAAW/5b,OACnCzqB,EAAeyB,MAAQ+id,EAAW/id,MAClCzB,EAAewB,OAASgjd,EAAWhjd,OACnCxB,EAAe8mC,YAAc09a,EAAW19a,YACxC9mC,EAAeyqB,OAAS+5b,EAAW/5b,OAC/Bg9Z,aAAyBx5Y,GACzBlS,EAAQysZ,mBAAmBf,KAAmBg9B,GAG9C1ob,EAAQmkZ,wBAAwBuH,KAAmBg9B,IAG3DxhC,EAASp8b,UAAUs9d,kBAAoB,SAAUn0C,EAAOj0Y,EAASwob,GAC7D,IAAI1uC,EAAe,EAAW7F,EAAMC,WAAWp4X,MAAM,GACjDm4X,EAAME,WAAWr4X,MAAM,GACvB2sa,EAAatla,GAAS22X,EAAa7F,EAAMiC,gBACzCwyC,EAAc1ob,EAAQ+wY,eAAe8d,eAAe7uZ,EAAQqY,UAAUyhY,EAAY9mb,IAAKy1d,GACvF/8B,EAAgB1rZ,EAAQqY,UAAUyhY,EAAY9mb,IAC7BmwD,GAASuoY,EAAezX,EAAMiC,gBACpC76a,OAASotd,EAAWptd,OACnC2kC,EAAQysZ,mBAAmBf,KAAmBg9B,IAElDxhC,EAASp8b,UAAUg9d,sBAAwB,SAAU7zC,EAAOj0Y,EAASwob,GACjE,IAAIt0C,EAAaD,EAAMC,WACnBC,EAAaF,EAAME,WACvBzkb,KAAK4+N,YAAYtuL,EAAUwob,EAASt0C,EAAaC,GACjDq0C,EAASxob,EAAQq9C,kBAAkB62V,EAAYC,GAAcn0Y,EAAQq9C,kBAAkB82V,EAAYD,GACnGl0Y,EAAQyU,eAAiBzU,EAAQyU,eAAiBC,GAAcwyY,UAEpEA,EAASp8b,UAAUq9d,qBAAuB,SAAU37d,EAAKwzC,GACrD,IAEIsK,EAFA1+C,EAAI,EAGR,GAAIY,EAAIuvD,YAAcvvD,EAAIuvD,WAAW7vD,OAAS,EAC1C,IAAKN,EAAI,EAAGA,EAAIY,EAAIuvD,WAAW7vD,OAAQN,IACnC0+C,EAAY99C,EAAIuvD,WAAWnwD,GAC3B8D,KAAKi5d,eAAer+a,EAAWtK,IAI3CknZ,EAASp8b,UAAU69d,eAAiB,SAAUr+a,EAAWtK,GACrD,IAAI+sB,EAAO/sB,EAAQqY,UAAU/N,EAAUt3C,IACvC+5D,EAAKvxB,SAAW8O,EAAU9O,SAC1BwE,EAAQ+wY,eAAewJ,eAAextX,IAE1Cm6X,EAASp8b,UAAU48d,sBAAwB,SAAUl7d,EAAKwzC,GACtD,IACI/vC,EACAq6C,EAFA1+C,EAAI,EAGR,GAAIY,EAAIsvD,OAAStvD,EAAIsvD,MAAM5vD,OAAS,EAChC,IAAKN,EAAI,EAAGA,EAAIY,EAAIsvD,MAAM5vD,OAAQN,IAC9BqE,EAAOzD,EAAIsvD,MAAMlwD,GACjB8D,KAAKk5d,gBAAgB34d,EAAM+vC,GAGnC,GAAIxzC,EAAIuvD,YAAcvvD,EAAIuvD,WAAW7vD,OAAS,EAC1C,IAAKN,EAAI,EAAGA,EAAIY,EAAIuvD,WAAW7vD,OAAQN,IACnC0+C,EAAY99C,EAAIuvD,WAAWnwD,GAC3B8D,KAAKm5d,kBAAkBv+a,EAAWtK,IAI9CknZ,EAASp8b,UAAU89d,gBAAkB,SAAUp8d,EAAKwzC,EAASi0Y,GACzD,IAAIhkb,EAAO+vC,EAAQqY,UAAU7rD,EAAIwG,IAOjC,GANIxG,EAAI+za,YAActwa,EAAKswa,WACvBvgY,EAAQ2oZ,WAAWn8b,EAAKA,EAAI+za,YAE3B/za,EAAI+za,WAAatwa,EAAKswa,WACvBvgY,EAAQi9Z,cAAczwc,EAAIwG,IAE1B/C,EAAKswa,UAAW,CAChB,IAAIjiG,EAAK9xU,EAAIkiC,OAAOxyB,KAAOjM,EAAKy+B,OAAOxyB,KACnCmiU,EAAK7xU,EAAIkiC,OAAOtyB,IAAMnM,EAAKy+B,OAAOtyB,IACtC4jC,EAAQinE,KAAKh3G,EAAMquU,EAAID,OAEtB,CACGC,EAAK9xU,EAAI+O,QAAUtL,EAAKgS,QAAQ1G,QAChC8iU,EAAK7xU,EAAImP,QAAU1L,EAAKgS,QAAQtG,QACpCqkC,EAAQinE,KAAKh3G,EAAMquU,EAAID,GAEvBr+R,EAAQ8gY,YACR9gY,EAAQ8gY,WAAW49B,YAAYzuc,EAAM+vC,IAG7CknZ,EAASp8b,UAAU68d,kBAAoB,SAAUn7d,EAAKwzC,EAASi0Y,GAC3D,IACI3pY,EACAr6C,EAFArE,EAAI,EAGR,GAAIY,GAAOA,EAAIsvD,OAAStvD,EAAIsvD,MAAM5vD,OAAS,EACvC,IAAKN,EAAI,EAAGA,EAAIY,EAAIsvD,MAAM5vD,OAAQN,IAE9B,IADAqE,EAAOzD,EAAIsvD,MAAMlwD,IACRke,SAGL,IAAK,IADDgyC,EAAQ9b,EAAQ+wY,eAAe6F,kBAAkB3mb,MAC5ConB,EAAM,EAAGA,EAAMykC,EAAM5vD,OAAQmrB,IAAO,CACzC,IAAIsva,EAAW1S,EAAM7C,WAAWt1X,EAAMzkC,GAAKrkB,IACtCmxa,GAAcwiB,KAAcz0Y,IAC7BxiD,KAAK6pd,YAAY5yB,EAAU3mZ,EAASi0Y,GACpCvkb,KAAKk5d,gBAAgBjiC,EAAU3mZ,EAASi0Y,IAGxCvkb,KAAKm5d,kBAAkBliC,EAAU3mZ,EAASi0Y,QAKlDvkb,KAAK6pd,YAAYtpd,EAAM+vC,GACvBtwC,KAAKk5d,gBAAgB34d,EAAM+vC,GAIvC,GAAIxzC,GAAOA,EAAIuvD,YAAcvvD,EAAIuvD,WAAW7vD,OAAS,EAAG,CACpD,IAAI6vD,EAAavvD,EAAIuvD,WACrB,IAAKnwD,EAAI,EAAGA,EAAImwD,EAAW7vD,OAAQN,IAC/B0+C,EAAYyR,EAAWnwD,GACvB8D,KAAKm5d,kBAAkBv+a,EAAWtK,KAI9CknZ,EAASp8b,UAAUyud,YAAc,SAAU/sd,EAAKwzC,EAASi0Y,GACrD,IAAIhkb,EAAO+vC,EAAQqY,UAAU7rD,EAAIwG,IAC7B81d,EAAat8d,EAAIyV,QAAQgqC,WAAWvmC,MAAQzV,EAAKgS,QAAQgqC,WAAWvmC,MACpEqjd,EAAcv8d,EAAIyV,QAAQgqC,WAAWxmC,OAASxV,EAAKgS,QAAQgqC,WAAWxmC,OACtEwua,GAASA,EAAM7C,aACf6C,EAAM7C,WAAW5kb,EAAIwG,IAAM2oD,GAAY1rD,IAE3C+vC,EAAQ8W,MAAM7mD,EAAM64d,EAAYC,GAC5Btsd,EAAGjQ,EAAIyV,QAAQ1G,QAAUtL,EAAKgS,QAAQ1G,QACtCmB,EAAGlQ,EAAIyV,QAAQtG,QAAU1L,EAAKgS,QAAQtG,WAG9Curb,EAASp8b,UAAU88d,sBAAwB,SAAUp7d,EAAKwzC,EAASi0Y,GAC/D,IACIhkb,EACAq6C,EAFA1+C,EAAI,EAGJo9d,EAAchpb,EAAQ6b,cAK1B,GAJAmta,EAAYj+a,YAAcv+C,EAAIu+C,YAC1Bi+a,GAAeA,EAAY/md,UAC3B+md,EAAY/md,QAAQ8oC,YAAcv+C,EAAIu+C,aAEtCv+C,GAAOA,EAAIsvD,OAAStvD,EAAIsvD,MAAM5vD,OAAS,EACvC,IAAKN,EAAI,EAAGA,EAAIY,EAAIsvD,MAAM5vD,OAAQN,IAC9BqE,EAAOzD,EAAIsvD,MAAMlwD,GACjB8D,KAAKu5d,gBAAgBh5d,EAAM+vC,GAC3BtwC,KAAKk5d,gBAAgB34d,EAAM+vC,GAGnC,GAAIxzC,GAAOA,EAAIuvD,YAAcvvD,EAAIuvD,WAAW7vD,OAAS,EACjD,IAAKN,EAAI,EAAGA,EAAIY,EAAIuvD,WAAW7vD,OAAQN,IACnC0+C,EAAY99C,EAAIuvD,WAAWnwD,GAC3B8D,KAAKm5d,kBAAkBv+a,EAAWtK,IAI9CknZ,EAASp8b,UAAUm+d,gBAAkB,SAAUz8d,EAAKwzC,GAChD,IAAI/vC,EAAO+vC,EAAQqY,UAAU7rD,EAAIwG,IACjCgtC,EAAQzvB,OAAOtgB,EAAMzD,EAAIu+C,YAAc96C,EAAK86C,cAEhDm8Y,EAASp8b,UAAU+8d,wBAA0B,SAAUr7d,EAAKwzC,GACxD,IAAIsK,EAAY99C,EAAIuvD,WAAW,GAC/BrsD,KAAKm5d,kBAAkBv+a,EAAWtK,IAEtCknZ,EAASp8b,UAAU+9d,kBAAoB,SAAUr8d,EAAKwzC,EAASi0Y,GAC3D,IAAI3pY,EAAYtK,EAAQqY,UAAU7rD,EAAIwG,IAElCxG,EAAIshE,eAAiBxjB,EAAUwjB,eAC/BxjB,EAAUwjB,aAAethE,EAAIshE,aAC7B9tB,EAAQmkZ,wBAAwB75Y,MAAiBwjB,aAActhE,EAAIshE,gBAEnEthE,EAAIuya,eAAiBz0X,EAAUy0X,eAC/Bz0X,EAAUy0X,aAAevya,EAAIuya,aAC7B/+X,EAAQmkZ,wBAAwB75Y,MAAiBy0X,aAAcvya,EAAIuya,gBAEnEvya,EAAIi1C,WAAa6I,EAAU7I,WACN,KAAjBj1C,EAAIi1C,SAEJ6f,GADOthB,EAAQqY,UAAU/N,EAAU7I,UACnB++X,SAAUh0a,EAAIwG,IAGvBgtC,EAAQqY,UAAU7rD,EAAIi1C,UACxB++X,SAAStsa,KAAK1H,EAAIwG,IAE3Bs3C,EAAU7I,SAAWj1C,EAAIi1C,SACzBzB,EAAQmkZ,wBAAwB75Y,MAAiB7I,SAAUj1C,EAAIi1C,YAE/Dj1C,EAAIsya,WAAax0X,EAAUw0X,WACN,KAAjBtya,EAAIsya,SAEJx9W,GADOthB,EAAQqY,UAAU/N,EAAUw0X,UACnB2B,QAASj0a,EAAIwG,IAGtBgtC,EAAQqY,UAAU7rD,EAAIsya,UACxB2B,QAAQvsa,KAAK1H,EAAIwG,IAE1Bs3C,EAAUw0X,SAAWtya,EAAIsya,SACzB9+X,EAAQmkZ,wBAAwB75Y,MAAiBw0X,SAAUtya,EAAIsya,YAE/DmV,GAASA,EAAM7C,aACf6C,EAAM7C,WAAW5kb,EAAIwG,IAAM2oD,GAAYrR,IAE3C,IAAIi7X,EAAK/4a,EAAIy0C,YAAYxkC,EAAI6tC,EAAUrJ,YAAYxkC,EAC/C+oa,EAAKh5a,EAAIy0C,YAAYvkC,EAAI4tC,EAAUrJ,YAAYvkC,EACxC,IAAP6oa,GAAmB,IAAPC,GACZxlY,EAAQosZ,cAAc9hZ,EAAWi7X,EAAIC,GAEzC,IAAIlnG,EAAK9xU,EAAIg9C,YAAY/sC,EAAI6tC,EAAUd,YAAY/sC,EAC/C4hU,EAAK7xU,EAAIg9C,YAAY9sC,EAAI4tC,EAAUd,YAAY9sC,EACxC,IAAP4hU,GAAmB,IAAPD,GACZr+R,EAAQqsZ,cAAc/hZ,EAAWg0R,EAAID,GAEzCr+R,EAAQ8zY,iBACa,QAAjB9zY,EAAQjQ,MACRiQ,EAAQ2lZ,uBAGhBuB,EAASp8b,UAAUk9d,wBAA0B,SAAU/zC,EAAOj0Y,GAC1D,IAAIxzC,EAAMynb,EAAME,WAChB,GAAIF,GAASA,EAAM6pB,WAAY,CAa3B,GAAmB,YAXf7pB,EAAM8zC,OACmB,WAArB9zC,EAAM6pB,WACO,SAGA,SAIJ7pB,EAAM6pB,YAGftxc,EAAIq4D,OACJ7kB,EAAQ/rC,OAAO+rC,EAAQqY,UAAU7rD,EAAIq4D,OAAS,mBAAqBr4D,EAAIwG,MAGvEgtC,EAAQ/rC,OAAOzH,GACfwzC,EAAQusZ,0BAGX,CAED,GADAvsZ,EAAQusZ,qBACJ//b,EAAI0hE,SAAU,CACd,IAAI/9D,EAAa6vC,EAAQqY,UAAU7rD,EAAI0hE,UACnC/9D,EACA6vC,EAAQsnZ,SAASn3b,EAAY3D,GAG7BwzC,EAAQlsC,IAAItH,QAGXA,EAAIq4D,OACT7kB,EAAQklZ,kBAAkB14b,EAAKwzC,EAAQqY,UAAU7rD,EAAIq4D,SAGhD7kB,EAAQqY,UAAU7rD,EAAIwG,KACvBgtC,EAAQlsC,IAAItH,GAGhBA,EAAI+za,WAAavgY,EAAQqY,UAAU7rD,EAAI+za,YACvCvgY,EAAQ2oZ,WAAWn8b,EAAKA,EAAI+za,WAGf,QAAjBvgY,EAAQjQ,MACRiQ,EAAQ2lZ,wBAIpBuB,EAASp8b,UAAUm9d,6BAA+B,SAAUh0C,EAAOj0Y,GAC/D,IAAIj9B,EAAQkxa,EAAME,WACd3nb,EAAMynb,EAAMC,WACZjkb,EAAO+vC,EAAQqY,UAAU7rD,EAAIwG,IACjC,GAAIihb,GAASA,EAAM6pB,WAAY,CAQR,YANf7pB,EAAM8zC,OAC6B,WAArB9zC,EAAM6pB,WAA2B,SAAW,SAG7C7pB,EAAM6pB,aAGnB99Z,EAAQonZ,aAAan3b,GAAO8S,IAC5Bi9B,EAAQusZ,uBAGRvsZ,EAAQusZ,qBACRvsZ,EAAQ8/Z,UAAU7vc,GAAO8S,KAER,QAAjBi9B,EAAQjQ,MACRiQ,EAAQ2lZ,wBAIpBuB,EAASp8b,UAAUo9d,4BAA8B,SAAUj0C,EAAOj0Y,GAC9D,IAAI2C,EAAOsxY,EAAME,WACb3nb,EAAMynb,EAAMC,WACZjkb,EAAO+vC,EAAQqY,UAAU7rD,EAAIwG,IACjC,GAAIihb,GAASA,EAAM6pB,WAAY,CAQR,YANf7pB,EAAM8zC,OAC6B,WAArB9zC,EAAM6pB,WAA2B,SAAW,SAG7C7pB,EAAM6pB,aAGnB99Z,EAAQmnZ,YAAYl3b,GAAO0yC,IAC3B3C,EAAQusZ,uBAGRvsZ,EAAQusZ,qBACRvsZ,EAAQoha,SAASnxc,GAAO0yC,KAEP,QAAjB3C,EAAQjQ,MACRiQ,EAAQ2lZ,wBAKpBuB,EAASp8b,UAAUmzc,KAAO,SAAUj+Z,GAChC,IAAIi0Y,EAAQvkb,KAAKw5d,aAAalpb,GAC1Bmpb,EAAwB,EACxBl1C,IACuB,aAAnBA,EAAMvrO,UACa,eAAfurO,EAAM79a,MACN+yd,IACAz5d,KAAKm3d,WAAY,GAGjBn3d,KAAKmqb,UAAU5F,EAAOj0Y,GAEtBtwC,KAAKm3d,YACLn3d,KAAK05d,gBAAgBn1C,EAAOj0Y,EAASmpb,GACrCz5d,KAAKm3d,WAAY,IAIrB7mb,EAAQwlZ,YAAYyY,KAAKhqB,KAIrCiT,EAASp8b,UAAUs+d,gBAAkB,SAAUn1C,EAAOj0Y,EAASmpb,GAC3D,KAAiC,IAA1BA,GACHz5d,KAAKmqb,UAAU5F,EAAOj0Y,GAEH,cADnBi0Y,EAAQvkb,KAAKw5d,aAAalpb,IAChB5pC,KACN+yd,IAEoB,eAAfl1C,EAAM79a,MACX+yd,IAGRA,EAAwB,GAE5BjiC,EAASp8b,UAAU+ub,UAAY,SAAUyuC,EAActob,GACnD,IAAIk0Y,EAKJ,GAJ0B,oBAAtBo0C,EAAalyd,MAAoD,sBAAtBkyd,EAAalyd,OACxD89a,EAAco0C,EAAuB,YAEzCtob,EAAQyU,gBAAkBC,GAAcwyY,SACd,eAAtBohC,EAAalyd,MAA+C,aAAtBkyd,EAAalyd,MAC/C4pC,EAAQwlZ,YAAYyhC,UAAU/6d,OAAS,EAAG,CAC1C,IAAIu7d,EAAYznb,EAAQwlZ,YAAYyhC,UAAU5uc,OAAO,EAAG,GACxD2nB,EAAQwlZ,YAAYwhC,UAAU3uc,OAAO,EAAG,EAAGovc,EAAU,IAI7D,OADAznb,EAAQoc,uBAAsB,GACtBksa,EAAalyd,MACjB,IAAK,kBACL,IAAK,QACL,IAAK,aACD1G,KAAKg4d,sBAAsBxzC,EAAYl0Y,GACvC,MACJ,IAAK,cACL,IAAK,SACDtwC,KAAKi4d,kBAAkBzzC,EAAYl0Y,EAASsob,GAC5C,MACJ,IAAK,kBACD54d,KAAKk4d,sBAAsB1zC,EAAYl0Y,EAASsob,GAChD,MACJ,IAAK,oBACD54d,KAAKm4d,wBAAwB3zC,EAAYl0Y,GACzC,MACJ,IAAK,kBACDtwC,KAAKo4d,sBAAsBQ,EAActob,GAAS,GAClD,MACJ,IAAK,oBACDtwC,KAAKs4d,wBAAwBM,EAActob,GAC3C,MACJ,IAAK,yBACDtwC,KAAKu4d,6BAA6BK,EAActob,GAChD,MACJ,IAAK,wBACDtwC,KAAKw4d,4BAA4BI,EAActob,GAC/C,MACJ,IAAK,QACDtwC,KAAKk5F,MAAM0/X,EAActob,GACzB,MACJ,IAAK,UACDtwC,KAAKu3b,QAAQqhC,EAActob,GAC3B,MACJ,IAAK,iBACDtwC,KAAKy4d,qBAAqBj0C,EAAYl0Y,GACtC,MACJ,IAAK,sBACDtwC,KAAK04d,kBAAkBE,EAActob,GAAS,GAC9C,MACJ,IAAK,4BACDtwC,KAAK24d,wBAAwBC,EAActob,GAAS,GAG5DA,EAAQoc,uBAAsB,GAC9Bpc,EAAQyU,iBAAmBC,GAAcwyY,SACzClnZ,EAAQ69Z,qBAAqByqB,IAEjCphC,EAASp8b,UAAUq8d,aAAe,SAAUnnb,GACxC,IACI0rZ,EADA27B,EAAY,KAEZgC,EAAQrpb,EAAQwlZ,YAepB,OAdI6jC,EAAMxW,UACNwU,EAAYgC,EAAMvC,cAClBp7B,EAAgB29B,EAAMvC,aAAa5kW,WAE/BmnW,EAAMvC,aAAep7B,EAChB29B,EAAMvW,UACPuW,EAAMvW,SAAU,KAIpBuW,EAAMvW,SAAU,EAChBuW,EAAMxW,SAAU,IAGjBwU,GAEXngC,EAASp8b,UAAUo+d,aAAe,SAAUlpb,GACxC,IACIspb,EADAzvC,EAAY,KAEZwvC,EAAQrpb,EAAQwlZ,YAoBpB,OAnBI6jC,EAAMvW,WAKFwW,EAJCD,EAAMvC,aAAa5kW,UAAamnW,EAAMxW,QAIxBwW,EAAMvC,aAAa9rb,KAHnBqub,EAAMvC,gBAMrBuC,EAAMvC,aAAewC,EAChBD,EAAMxW,UACPwW,EAAMxW,SAAU,GAEfyW,EAAatub,OACdqub,EAAMvW,SAAU,EAChBuW,EAAMxW,SAAU,IAGxBh5B,EAAYwvC,EAAMvC,cAEfjtC,GAOXqN,EAASp8b,UAAUiX,QAAU,aAQ7Bmlb,EAASp8b,UAAU2mC,cAAgB,WAI/B,MAAO,YAEJy1Z,KCjsBPqiC,GAAiC,WACjC,SAASA,IACL75d,KAAKohb,eAAgB,EAwFzB,OAnFAy4C,EAAgBz+d,UAAUkxK,OAAS,SAAUn7H,EAAWyZ,EAASrqD,EAAM+vC,GACnE,IAAIvwC,EAAQC,KACR85d,KAEAp2c,EAAI,EAKR,GAJAo2c,EAFQ,GAEe13d,YAAY,WAE/B,OADAshB,IACO3jB,EAAMg6d,gBAAgBnva,EAASkva,EAAyB,IAANp2c,EAAS4sB,IACnE,IACC/vC,EAAK8zX,WAAY,CACjB,IAAIvmC,EAAY,GAEhB9tV,KAAKohb,cAAgB9wY,EAAe,oBACpCA,EAAQoc,uBAAsB,GAE9B,IAAIsta,KAEJh6d,KAAKi6d,cAAc15d,EAAMutV,EAAWx9S,GACpC0pb,EAFQ,GAGkB53d,YAAY,WAClC0rV,GAAa,EAAI/tV,EAAMk6d,cAAc15d,EAAMutV,EAAWx9S,GAAWhuC,cAAc03d,EAAqB,IACpGlsI,GAAa,IACd,MAOX+rI,EAAgBz+d,UAAU2+d,gBAAkB,SAAUxmX,EAAU2mX,EAAap7c,EAAMwxB,GAC/E,IAAKxxB,EACD,IAAK,IAAIwH,EAAI,EAAGA,EAAIitF,EAAS3oD,QAAQpuD,OAAQ8pB,IAAK,CAC9C,IAAI/lB,EAAO+vC,EAAQqY,UAAU4qD,EAAS3oD,QAAQtkC,GAAGhjB,IACjD/C,EAAKsL,SAAW0nG,EAAS3oD,QAAQtkC,GAAG6zc,YAAc,EAClD55d,EAAK0L,SAAWsnG,EAAS3oD,QAAQtkC,GAAG8zc,YAAc,EAGtDt7c,IACAxc,cAAc43d,EAAY,IAC1B5pb,EAAQoc,uBAAsB,GAC9Bpc,EAAQyyH,aAAaoiQ,GAAa3uV,uBAAmBt7E,GACrDo1C,EAAQqwZ,0BAA0BC,aAAc,EAChDtwZ,EAAQgd,OAAOozY,UAAY,GAC3BpwZ,EAAQoc,sBAAsB1sD,KAAKohb,iBAM3Cy4C,EAAgBz+d,UAAU6+d,cAAgB,SAAU39d,EAAQS,EAAOuzC,GAC/D,IAAK,IAAIp0C,EAAI,EAAGA,EAAII,EAAOw0a,SAASt0a,OAAQN,IAAK,CAC7C,IAAI0+C,EAAYtK,EAAQqY,UAAUrsD,EAAOw0a,SAAS50a,IAC9CiL,EAASmpC,EAAQqY,UAAU/N,EAAUw0X,UACzCx0X,EAAUl2C,MAAM+I,QAAU1Q,EAC1B,IAAK,IAAI2mB,EAAI,EAAGA,EAAIk3B,EAAUroC,QAAQ6H,SAAS5d,OAAQknB,IACnDk3B,EAAUroC,QAAQ6H,SAASsJ,GAAGhf,MAAM+I,QAAU1Q,EAC9CoK,EAAOzC,MAAM+I,QAAU1Q,EACnBoK,EAAOoL,mBAAmB2hD,IAC1B5jB,EAAQora,mBAAmBv0c,EAAOoL,aAASrX,EAAW6B,GAG9DiD,KAAKi6d,cAAc9yd,EAAQpK,EAAOuzC,KAQ1Cupb,EAAgBz+d,UAAUiX,QAAU,aAQpCwnd,EAAgBz+d,UAAU2mC,cAAgB,WAItC,MAAO,iBAEJ83b,KCxFPQ,GAAkC,WAKlC,SAASA,IAKLr6d,KAAK4gc,aAAc,EAimDvB,OAzlDAy5B,EAAiBj/d,UAAUiX,QAAU,aAQrCgod,EAAiBj/d,UAAU2mC,cAAgB,WAIvC,MAAO,uBAEXs4b,EAAiBj/d,UAAUw1c,aAAe,SAAUxkZ,EAAOzD,EAAW2xa,EAAYC,EAAUt5G,GACxF,IAAI3zT,GACA5mD,KAAM4zd,EAAW5zd,KACjBiiD,UAAWA,EAAW6xa,QAAS,EAAGC,QAAS,EAC3CC,mBAAqBC,WAAY,KAAMh1Y,UAAYi1Y,SAAU,EAAGC,cAChEvgc,YAAaggc,EAAWhgc,YACxBwgc,kBAAmBR,EAAWQ,kBAAmBC,gBAAiBT,EAAWS,gBAC7E5qa,kBAAmBmqa,EAAWnqa,kBAAmBD,oBAAqBoqa,EAAWpqa,oBACjFwwY,UAAW45B,EAAW55B,UAAWrzY,cAAe9F,GAAY+ya,EAAWjta,eAAgBruB,OAAQs7b,EAAWt7b,OAC1GzI,OAAQ+jc,EAAW/jc,OAAQq0B,WAAagvJ,KAAM0gR,EAAW1gR,MAG7D,OADA55M,KAAKswQ,SAAShjN,EAAQlB,EAAOmua,EAAUt5G,GAChC3zT,GAEX+sa,EAAiBj/d,UAAUk1Q,SAAW,SAAUhjN,EAAQlB,EAAOmua,EAAUt5G,GACrE,IAAI1gX,EACArE,EAGAukd,KAIJ,IAHInzZ,EAAO3E,UAAU2E,EAAOssJ,OACxBtsJ,EAAOota,gBAAgBl2d,KAAK8oD,EAAO3E,UAAU2E,EAAOssJ,OAEnD19M,EAAI,EAAGA,EAAIkwD,EAAM5vD,OAAQN,KAC1BqE,EAAO6rD,EAAMlwD,IACHsuc,qBACOl9Y,EAAOuta,WAAWt6d,EAAK+C,IAAMtD,KAAKg7d,gBAAgB1ta,EAAQ/sD,IAC5D06d,KAAKC,YAAa,EACxB5ta,EAAO3E,UAAU2E,EAAOssJ,OACpBr5M,EAAKwwa,SAAYxwa,EAAKwwa,QAAQv0a,SAC/Bikd,EAAUj8c,KAAKjE,GACXA,EAAKhE,MAAQmtB,OAAOnpB,EAAKhE,KAAK0kX,MAAe3zT,EAAOssJ,MACpDtsJ,EAAOota,gBAAgBl2d,KAAKjE,KAUhD,IAJsC,IAAlC+sD,EAAOota,gBAAgBl+d,SACvB8wD,EAAOota,gBAAkBja,GAGxBvkd,EAAI,EAAGA,EAAIoxD,EAAOota,gBAAgBl+d,OAAQN,IAC3CqE,EAAO+sD,EAAOota,gBAAgBx+d,GAC9B8D,KAAK6uc,YAAYvhZ,EAAQ/sD,EAAM,GAEnC,GAAI+sD,EAAOota,gBAAgBl+d,OAAS,EAAG,CACnC8wD,EAAOijV,SAAWjjV,EAAOota,gBAAgB,GACzC,IAAI3td,EAAI,EACJC,EAAI,EACJmvD,OAAO,EACPG,OAAO,EACPD,OAAO,EACPD,OAAO,EAEP7lC,OAAS,EACb,IAAKr6B,EAAI,EAAGA,EAAIoxD,EAAOota,gBAAgBl+d,OAAQN,IAAK,CAChDq6B,EAASv2B,KAAKm7d,WAAW7ta,EAAQvgD,EAAGC,EAAGsgD,EAAOota,gBAAgBx+d,GAAI,EAAGoxD,EAAOota,gBAAgBx+d,EAAI,IAChG,IAAIk/d,EAAW9ta,EAAOuta,WAAWvta,EAAOota,gBAAgBx+d,GAAGoH,IAC3DizB,EAAOvpB,EAAIX,KAAK+T,IAAImW,EAAOvpB,EAAGoud,EAASpud,GACvCupB,EAAOxpB,EAAIV,KAAK+T,IAAImW,EAAOxpB,EAAGqud,EAASrud,IACK,IAAxCugD,EAAOhzB,YAAY/7B,QAAQ,QAC3ByO,EAAIupB,EAAO9pB,MAAQ6gD,EAAOwta,kBAG1B/td,EAAIwpB,EAAO9pB,MAAQ6gD,EAAOwta,kBAEpB,IAAN5+d,GACAigE,EAAO5lC,EAAOxpB,EACdqvD,EAAO7lC,EAAOvpB,EACdqvD,EAAO9lC,EAAO9pB,MACd6vD,EAAO/lC,EAAO5pB,SAGdwvD,EAAO9vD,KAAK+T,IAAI+7C,EAAM5lC,EAAOxpB,GAC7BqvD,EAAO/vD,KAAK+T,IAAIg8C,EAAM7lC,EAAOvpB,GAC7BqvD,EAAOhwD,KAAKC,IAAI+vD,EAAM9lC,EAAO9pB,OAC7B6vD,EAAOjwD,KAAKC,IAAIgwD,EAAM/lC,EAAO5pB,SAIrC,IADA3M,KAAKq7d,aAAa/ta,GAAUvgD,EAAGovD,EAAMnvD,EAAGovD,EAAM3vD,MAAO4vD,EAAM1vD,OAAQ2vD,GAAQi+Z,GACtEr+d,EAAI,EAAGA,EAAIoxD,EAAOota,gBAAgBl+d,OAAQN,IAC3C8D,KAAKs7d,YAAYhua,EAAQA,EAAOota,gBAAgBx+d,GAAI,GAExD,IAAKA,EAAI,EAAGA,EAAIoxD,EAAOota,gBAAgBl+d,OAAQN,IAC3C8D,KAAKu7d,iBAAiBjua,EAAQA,EAAOota,gBAAgBx+d,GAAI,KAIrEm+d,EAAiBj/d,UAAUyvD,UAAY,SAAUtqD,GAC7C,IAAIwM,EAAIxM,EAAKsL,QAAUtL,EAAKg8C,WAAWvmC,MAAQzV,EAAKmyD,MAAM3lD,EACtDC,EAAIzM,EAAK0L,QAAU1L,EAAKg8C,WAAWxmC,OAASxV,EAAKmyD,MAAM1lD,EAC3D,OAAO,IAAI+oB,GAAKhpB,EAAGC,EAAGzM,EAAKg8C,WAAWvmC,MAAOzV,EAAKg8C,WAAWxmC,SAEjEskd,EAAiBj/d,UAAU+/d,WAAa,SAAU7ta,EAAQvgD,EAAGC,EAAG6tB,EAAO40I,EAAOxqI,EAAMu2b,GAChF,IAAIC,EAEAC,EACA5+d,EACAi3M,EAHAjtL,KAWJ,GAPA20c,EAAaz7d,KAAK27d,cAAcrua,EAAQzyB,EAAO9tB,EAAGC,EAAGyiK,GACrD3oJ,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,IAC/BgqD,EAEOsta,SAAWvud,KAAKC,IAAIghD,EAAOsta,SAAUnrT,GAC5CisT,EAAMjsT,GACNskC,EAAW/zM,KAAK+zM,SAASzmJ,EAAQzyB,KACf/T,EAAKm0c,KAAKW,WAAWp/d,OAKlC,CACD,IAAIq/d,OAAa,EAEbC,OAAc,EACdtgc,OAAI,EACJugc,OAAa,EACb57b,OAAQ,EACRxzB,OAAS,EACbA,EAAS8ud,EAAWzud,EAAIyud,EAAW1ld,OAASu3C,EAAOyta,gBAC/Cj0c,EAAKm0c,KAAKW,WAAWp/d,SAGrBk/d,GADA5+d,EAAMkD,KAAKg8d,0BAA0B1ua,EAAQzyB,EAAOluB,EAAQ8ud,EAAW1ld,OAAQ05J,EAAOniH,EAAOyta,kBACnFtrT,MACV9iK,EAAS7P,EAAI6P,QAEZma,EAAKm0c,KAAKW,WAAWp/d,QAAoC,eAA1BsqB,EAAKm0c,KAAK3gc,cAC1C3tB,EAAS8ud,EAAWzud,EAAIyud,EAAW1ld,OAASu3C,EAAOyta,gBAAkB,GAErEj0c,EAAKm0c,KAAK7gd,SAAS5d,SAKfq/d,EAJ0B,eAA1B/0c,EAAKm0c,KAAK3gc,aAAoD,aAAnBxT,EAAKm0c,KAAKv0d,MAAqD,IAA9BogB,EAAKm0c,KAAK7gd,SAAS5d,OAGvE,aAAnBsqB,EAAKm0c,KAAKv0d,KACF1G,KAAKi8d,qCAAqC3ua,EAAQzyB,EAAOoK,EAAMw2b,EAAW1ud,EAAGJ,EAAQ+ud,GAGrF17d,KAAKk8d,mBAAmB5ua,EAAQzyB,EAAO4gc,EAAW1ud,EAAGJ,EAAQ+ud,EAAKF,GANlEx7d,KAAKm8d,qBAAqB7ua,EAAQzyB,EAAOoK,EAAMw2b,EAAW1ud,EAAGJ,EAAQ+ud,IASpF50c,EAAK9Z,GAAK8Z,EAAK9Z,EAAIyud,EAAWzud,IAChC8Z,EAAK9Z,EAAIyud,EAAWzud,GAElBD,GAAKA,EAAI+Z,EAAK8tC,MAChB7nD,EAAI+Z,EAAK8tC,KAET9tC,EAAKm0c,KAAKW,WAAWp/d,SAErB2jC,OAAcjlC,IAAN6R,EAAkBA,EAAI0ud,EAAW1ud,EACzCgvd,EAAa/7d,KAAKo8d,6BAA6B9ua,EAAQzyB,EAAO4gc,EAAYt7b,EAAOxzB,EAAQ8iK,GACpFskC,IAEDhnM,IADA+ud,EAAcD,EAAaE,GACVhvd,EAAI+ud,EAAYrvd,OAAS,EAAIgvd,EAAWzld,MAAQ,EACjE6ld,EAAaC,GAEjBtgc,EAAIugc,EAAaA,EAAWM,eAAYnhe,GAE5C4rB,EAAK/Z,EAAIA,EACJ+Z,EAAKiuE,YACNjuE,EAAKw1c,UAAYT,EAAWpvd,MAAQovd,EAAW9ud,GAKnD,IAAIwvd,GACAjva,OAAQA,EAAQzyB,MAAOA,EAAO2hc,aAHdzvd,EAAGA,EAAGC,EAAGyud,EAAWzud,EAAGP,MAAOM,EAAI0ud,EAAWzld,MAAOrJ,OAAQ8ud,EAAWzud,EAAIyud,EAAW1ld,QAG9C8ld,WAAYA,EACpEY,IAAKhB,EAAYhsT,MAAOA,GAO5B,OALAzvK,KAAK08d,iBAAiBH,EAAe/gc,OAAYtgC,IAAT+pC,EAAoBu2b,GACxD10c,EAAK9J,YAAyC,iBAApB8J,EAAK9J,aAC/B8J,EAAK9J,WAAWjQ,GAAK+Z,EAAK61c,oBAE9B9hc,EAAMghc,WAAaA,EACZA,EAhEP,OADAhhc,EAAMghc,WAAa77d,KAAK48d,eAAetva,EAAQzyB,EAAOoK,EAAMw2b,EAAYhsT,EAAO+rT,GACxE3gc,EAAMghc,YAmErBxB,EAAiBj/d,UAAUwhe,eAAiB,SAAUtva,EAAQzyB,EAAOoK,EAAMw2b,EAAYhsT,EAAO+rT,GAC1F,IAAIjlc,EACAzP,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,IACnCwjB,EAAK/Z,EAAI0ud,EAAW1ud,EACd+Z,EAAK9Z,GAAK8Z,EAAK9Z,EAAIyud,EAAWzud,IAChC8Z,EAAK9Z,EAAIyud,EAAWzud,EACpB8Z,EAAK8zc,SAAWvud,KAAKC,IAAImjK,EAAO3oJ,EAAK8zc,UAAY,IAErDrkc,GAAWxpB,EAAG0ud,EAAW1ud,EAAGC,EAAGyud,EAAWzud,EAAGP,MAAOgvd,EAAW1ud,EAAI0ud,EAAWzld,MAAOrJ,OAAQ8ud,EAAWzud,EAAIyud,EAAW1ld,QACvH+Q,EAAK8zc,SAAWvud,KAAKC,IAAIwa,EAAK8zc,UAAY,EAAGnrT,GAC7C,IAAI8sT,GACAjva,OAAQA,EAAQzyB,MAAOA,EAAO2hc,YAAajmc,EAAQslc,WAAYtlc,EAC/Dkmc,IAAKhB,EAAYhsT,MAAOA,GAG5B,OADAzvK,KAAK08d,iBAAiBH,OAAerhe,OAAoBA,IAAT+pC,EAAoBu2b,IAC3Dzud,EAAG+Z,EAAK/Z,EAAGC,EAAG8Z,EAAK9Z,EAAGP,MAAOqa,EAAK/Z,EAAI0ud,EAAWzld,MAAOrJ,OAAQma,EAAK9Z,EAAIyud,EAAW1ld,SAEjGskd,EAAiBj/d,UAAU4/d,gBAAkB,SAAU1ta,EAAQrvC,GAC3D,IAAI6I,KAYJ,OAXAA,EAAK61c,mBAAqB,EACN,wBAAhBrva,EAAO5mD,KACPogB,EAAKm0c,MAAS3gc,YAAa,WAAY5zB,KAAM,YAAaiF,OAAQ,GAAIkxd,eAAe,GAGrF/1c,EAAKm0c,MAAS3gc,YAAa,aAAc5zB,KAAM,SAAUm2d,eAAe,GAE5E/1c,EAAKm0c,KAAK7gd,YACV0M,EAAKm0c,KAAKW,cACV90c,EAAKm0c,KAAKxrT,MAAQ,EAClB3oJ,EAAKiuE,WAAY,EACVjuE,GAEXuzc,EAAiBj/d,UAAUshe,iBAAmB,SAAUH,EAAeO,EAAS/nY,EAAWymY,GACvF,IAAIlua,EAASiva,EAAcjva,OACvBzyB,EAAQ0hc,EAAc1hc,MACtB2hc,EAAcD,EAAcC,YAC5BX,EAAaU,EAAcV,WAC3BpsT,EAAQ8sT,EAAc9sT,MACtBgtT,EAAMF,EAAcE,IACpB31c,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,IAC/B0Z,EAAaswC,EAAO3E,UAAU7hC,EAAK9J,WAAa8J,EAAK9J,WAAW3c,MAAQymB,EAAKm0c,KAAK7gd,SAAS,IAC3F2id,EAAiB//c,EAAaswC,EAAOuta,WAAW79c,EAAW1Z,IAAM,KACjEywM,EAAW/zM,KAAK+zM,SAASzmJ,EAAQzyB,GACjCuiB,EAAYp9C,KAAKg9d,uBAAuB1va,EAAQkva,EAAa/sT,EAAO3oJ,EAAKm2c,aACzEC,EAAgBl9d,KAAKg9d,uBAAuB1va,EAAQuua,EAAYpsT,EAAO3oJ,EAAKm2c,aAC5EnB,KAEA1+a,EAAU5gD,QAAUsqB,EAAKiuE,WACzBjuE,EAAKs2B,UAAYA,EACjBp9C,KAAKm9d,yBAAyB7va,EAAQzyB,EAAO2hc,GAC7C11c,EAAKu1c,UAAYv1c,EAAKk9D,UACN9oF,IAAZ4he,IACAh2c,EAAKu1c,UAAYhwd,KAAK+T,IAAI08c,EAASh2c,EAAKu1c,YAExCr/c,QAA2C9hB,IAA7B6he,EAAeV,YACzBU,EAAeV,WAAav1c,EAAKu1c,YACjCv1c,EAAKs2c,YAAa,GAEtBt2c,EAAKu1c,UAAYhwd,KAAK+T,IAAI0G,EAAKu1c,UAAWU,EAAeV,YAEzDtnY,IACAjuE,EAAK/Z,GAAK+Z,EAAKu1c,UACfv1c,EAAK61c,oBAAsB71c,EAAKu1c,UAC5BtoR,IACA/zM,KAAKq9d,kBAAkB/va,EAAQ4va,EAAep2c,EAAKu1c,WACnDR,EAAW9ud,EAAIV,KAAK+T,IAAIy7c,EAAW9ud,EAAG+Z,EAAK/Z,GAC3C8ud,EAAWpvd,MAAQJ,KAAKC,IAAIuvd,EAAWpvd,MAAOqa,EAAK/Z,EAAI0vd,EAAIzmd,OAC3D6ld,EAAWlvd,OAASN,KAAKC,IAAIuvd,EAAWlvd,OAAQma,EAAK9Z,EAAIyvd,EAAI1md,QAC7D8ld,EAAW9ud,GAAK+Z,EAAKu1c,UACrBR,EAAWpvd,OAASqa,EAAKu1c,WAEzBr/c,GAAc+/c,EAAeV,UAAYv1c,EAAKu1c,UAC9Cv1c,EAAKu1c,UAAYU,EAAeV,UAAYv1c,EAAKu1c,UAE5Cr/c,QAAiC9hB,IAAnB4rB,EAAKu1c,YACxBv1c,EAAKu1c,UAAY,MAKrBtoR,IACA8nR,EAAW9ud,EAAIV,KAAK+T,IAAIy7c,EAAW9ud,EAAGyvd,EAAYzvd,GAClD8ud,EAAWpvd,MAAQJ,KAAKC,IAAIuvd,EAAWpvd,MAAO+vd,EAAYzvd,EAAI0vd,EAAIzmd,OAClE6ld,EAAWlvd,OAASN,KAAKC,IAAIuvd,EAAWlvd,OAAQma,EAAK9Z,EAAIyvd,EAAI1md,SAE5D+Q,EAAKiuE,YACNjuE,EAAKu1c,UAAY,EACjBv1c,EAAK61c,mBAAqB,IAG7BnB,IACDgB,GAAgBzvd,EAAG+Z,EAAK/Z,EAAGC,EAAGyvd,EAAIzvd,EAAGP,MAAOqa,EAAK/Z,EAAI0vd,EAAIzmd,MAAOrJ,OAAQ8vd,EAAIzvd,EAAIyvd,EAAI1md,QACpF+ld,EAAYt3d,MAAO84d,QAASd,IAC5Bx8d,KAAKu9d,iBAAiBjwa,EAAQzyB,EAAOihc,EAAarsT,KAG1D4qT,EAAiBj/d,UAAUmie,iBAAmB,SAAUjwa,EAAQzyB,EAAOihc,EAAarsT,EAAOryH,GACvF,IAAIogb,EACA1rd,EAEA5V,EAEAqiE,EACAk/Z,EACA9wd,EALA+wd,GAAa,EAEb52c,KAWJ,GAPI+T,IAEAuiB,GADAt2B,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,KACd85C,UACjBsgb,GAAc52c,EAAKm0c,KAAK7gd,SAAS5d,SAAWsqB,EAAKm0c,KAAKW,WAAWp/d,QAErE+hE,EAAau9Z,EAAY,GAAGwB,QAC5BG,EAAY3B,EAAYA,EAAYt/d,OAAS,GAAG8ge,QAC5Clgb,GAAaA,EAAU5gD,OAAQ,CAkB/B,IAhBAmQ,GADA6wd,EAAOlwa,EAAOq4B,OAAOvoC,EAAU,IAAIkgb,SACrB3wd,OACV6wd,EAAKxwd,EAAIuxD,EAAWvxD,IACpBwwd,EAAK7wd,OAAS4xD,EAAWvxD,EACzB8ud,EAAYnzc,OAAO,EAAG,GAAK20c,QAASE,KAEpC7wd,EAAS8wd,EAAU9wd,OACnBmvd,EAAYt3d,MAAO84d,SAAWvwd,EAAGywd,EAAKzwd,EAAGN,MAAO+wd,EAAK/wd,MAAOO,EAAGuxD,EAAW5xD,OAAQA,OAAQA,MAG1F6wd,EAAOlwa,EAAOq4B,OAAOvoC,EAAUA,EAAU5gD,OAAS,IAAI8ge,QAClDI,GAAcF,EAAK7wd,OAAS8wd,EAAU9wd,SACtC6wd,EAAKxwd,EAAIywd,EAAU9wd,OACnBmvd,EAAYt3d,MAAO84d,QAASE,MAGpC1rd,EAAQsrC,EAAU,GACblhD,EAAI4/d,EAAYt/d,OAAS,EAAGN,GAAK,EAAGA,IACrCoxD,EAAOq4B,OAAOh9D,OAAO7W,EAAO,EAAGgqd,EAAY5/d,IAE/C4V,GAASgqd,EAAYt/d,OACrB8wD,EAAOq4B,OAAOh9D,OAAO7W,EAAOsrC,EAAU5gD,aAItC,IADAsV,EAAQ9R,KAAK29d,UAAUrwa,EAAQwua,EAAYA,EAAYt/d,OAAS,GAAG8ge,QAAS7tT,GACvEvzK,EAAI4/d,EAAYt/d,OAAS,EAAGN,GAAK,EAAGA,IACrCoxD,EAAOq4B,OAAOh9D,OAAO7W,EAAO,EAAGgqd,EAAY5/d,KAIvDm+d,EAAiBj/d,UAAUiie,kBAAoB,SAAU/va,EAAQlQ,EAAW4mC,GACxE,IAAI9nF,EAEJ,GAAa,IAAT8nF,EACA,IAAK9nF,EAAI,EAAGA,EAAIkhD,EAAU5gD,OAAQN,IAC1BoxD,EAAOq4B,OAAOvoC,EAAUlhD,IAAIohe,UAC5Bhwa,EAAOq4B,OAAOvoC,EAAUlhD,IAAIohe,QAAQvwd,GAAKi3E,EACzC12B,EAAOq4B,OAAOvoC,EAAUlhD,IAAIohe,QAAQ7wd,OAASu3E,IAK7Dq2Y,EAAiBj/d,UAAU4ge,0BAA4B,SAAU1ua,EAAQzyB,EAAOluB,EAAQoJ,EAAQ2ld,EAAKkC,GACjG,IAEIC,EACA3he,EACA4he,EACAxxd,EALAwa,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,IAC/By6d,KAOJ,IAFAzxd,EAAMK,EAEDzQ,EAAI,EAAGA,EAAI4qB,EAAKm0c,KAAKW,WAAWp/d,OAAQN,KACzC6he,EAAOzwa,EAAOuta,WAAW/zc,EAAKm0c,KAAKW,WAAW1/d,OAE1C6he,EAAK9C,KAAK7gd,SAAW2jd,EAAK9C,KAAKW,cAC/BmC,EAAK/wd,EAAIL,EAETkxd,GADAC,EAAcxwa,EAAO3E,UAAU7hC,EAAKm0c,KAAKW,WAAW1/d,KAC3BqgD,WAAWxmC,QACQ,IAAxCu3C,EAAOhzB,YAAY/7B,QAAQ,UAC3Bs/d,EAAaC,EAAYvhb,WAAWvmC,OAExC1J,EAAMK,EAASkxd,EAAaD,EAAS,EACrCtwa,EAAOsta,SAAWc,EAAM,EACpBx/d,EAAI,GAAM,GAAKA,IAAM4qB,EAAKm0c,KAAKW,WAAWp/d,OAAS,IACnDmQ,EAASL,EACTovd,MAIZ,OAASjsT,MAAOniH,EAAOsta,SAAUjud,OAAQA,EAASkxd,EAAaD,IAEnEvD,EAAiBj/d,UAAUghe,6BAA+B,SAAU9ua,EAAQzyB,EAAO4hc,EAAKt8b,EAAOxzB,EAAQ8iK,GACnG,IACIuuT,EAEAznc,EACAunc,EACA5he,EAIAsQ,EACAw3E,EACA5mC,EACA0+a,EAZAiC,KAMAj3c,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,IAE/Bo4d,EAAMjsT,EAKV,IAAKvzK,EAAI,EAAGA,EAAI4qB,EAAKm0c,KAAKW,WAAWp/d,OAAQN,KACzC6he,EAAOzwa,EAAOuta,WAAW/zc,EAAKm0c,KAAKW,WAAW1/d,OAM1C8he,GADAF,EAAcxwa,EAAO3E,UAAU7hC,EAAKm0c,KAAKW,WAAW1/d,KAC5BqgD,WAAWvmC,OACS,IAAxCs3C,EAAOhzB,YAAY/7B,QAAQ,UAC3By/d,EAAYF,EAAYvhb,WAAWxmC,QAGnCvJ,EADAtQ,EAAI,GAAM,EACHikC,EAAQs8b,EAAIzmd,MAAQ,EAAI,GAAKgod,EAG7B79b,EAAQs8b,EAAIzmd,MAAQ,EAAI,GAGnCugB,EAASv2B,KAAKm7d,WAAW7ta,EAAQ9gD,EAAMuxd,EAAK/wd,EAAGsgD,EAAO3E,UAAU7hC,EAAKm0c,KAAKW,WAAW1/d,IAAKw/d,EAAM,GAC3F17d,KAAK+zM,SAASzmJ,EAAQzyB,KACb,IAAN3+B,EACA4/d,EAAcvlc,EAGdv2B,KAAKi+d,WAAWnC,EAAavlc,IAGjCr6B,EAAI,GAAM,GAAK6he,EAAK9G,aAEhBjzY,OADS9oF,IAAT8oF,EACO+5Y,EAAK1B,UAGLhwd,KAAK+T,IAAI4jE,EAAM+5Y,EAAK1B,YAG/Bnge,EAAI,GAAM,GAAKA,IAAM4qB,EAAKm0c,KAAKW,WAAWp/d,OAAS,IACnD4gD,EAAYp9C,KAAKg9d,uBAAuB1va,EAAQ/2B,EAAQmlc,EAAM,GAE9D17d,KAAKu9d,iBAAiBjwa,EAAQ,OAASgwa,QAAS/mc,IAAWmlc,EAAM,EAAGt+a,GACpEs+a,MAOZ,OAHII,IACAA,EAAYO,UAAYr4Y,GAErB83Y,GAEXzB,EAAiBj/d,UAAUuge,cAAgB,SAAUrua,EAAQzyB,EAAO9tB,EAAGC,EAAGyiK,GACtE,IAAIz5J,EACJA,EAAQ6kB,EAAM0hB,WAAWvmC,MACzB,IAAID,EAEJ,GADAA,EAAS8kB,EAAM0hB,WAAWxmC,QACkB,IAAxCu3C,EAAOhzB,YAAY/7B,QAAQ,QAAgB,CAC3C,IAAKkxK,EAAO,CACR,IAAI10I,OAAO,EACXA,EAAOhuB,EACPA,EAAIC,EACJA,EAAI+tB,EAERhlB,EAAS8kB,EAAM0hB,WAAWvmC,MAC1BA,EAAQ6kB,EAAM0hB,WAAWxmC,OAE7B,OAAShJ,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,IAE/Cskd,EAAiBj/d,UAAU24M,SAAW,SAAUzmJ,EAAQzyB,GAEpD,IAAIqjc,EAAS5wa,EAAOuta,WAAWhgc,EAAMv3B,IACrC,OAAO46d,EAAOjD,KAAK7gd,UAAY8jd,EAAOjD,KAAK7gd,SAAS5d,QAExD69d,EAAiBj/d,UAAU+ge,qBAAuB,SAAU7ua,EAAQzyB,EAAOoK,EAAMl4B,EAAGC,EAAGyiK,GAEnF,IAAIgsT,EACJA,EAAaz7d,KAAK27d,cAAcrua,EAAQzyB,EAAO9tB,EAAGC,EAAGyiK,GACrD,IAGIisT,EAHA50c,KAEA6rC,GADJ7rC,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,KACf23d,KAAKv0d,KAErBg1d,EAAMjsT,EACN,IAAIhjK,EAAQ,EACZA,EAAQM,EACR,IAAIJ,EACJA,EAASK,EACT,IAAIgJ,EACAD,EACA1V,EACAqma,EACAy3D,EACAC,EAEA7nc,EACA8nc,EACAzD,EAEAyB,EACAiC,EACApie,EACAqie,EAEAxB,EAEJ,GADmBzva,EAAOq4B,OAAOtkF,MAAM,EAAGisD,EAAOq4B,OAAOnpF,QACpDwD,KAAK+zM,SAASzmJ,EAAQzyB,GAAQ,CAC9B,IAAI06B,OAAI,EAER,IADAA,GAA4C,IAAxCjI,EAAOhzB,YAAY/7B,QAAQ,QAC1BrC,EAAI,EAAGA,EAAI4qB,EAAKm0c,KAAK7gd,SAAS5d,OAAQN,IAAK,CAqC5C,GApCAmE,EAAQitD,EAAO3E,UAAU7hC,EAAKm0c,KAAK7gd,SAASle,IAC5C8Z,EAAQ3V,EAAMk8C,WAAWvmC,MACzBD,EAAS1V,EAAMk8C,WAAWxmC,OAC1Bood,EAAa5oa,EAAIx/C,EAASC,EAC1Bood,EAAc7oa,EAAIv/C,EAAQD,EACbu3C,EAAOq4B,OAAO+1Y,EAAM,GAAKpua,EAAOq4B,OAAO+1Y,EAAM,GAAG4B,QAAU,KAEvE52D,EAAc1ma,KAAKm7d,WAAW7ta,EAAQ7gD,EAAOE,EAAQtM,EAAOq7d,EAAM,EAAGpua,EAAO3E,UAAU7hC,EAAKm0c,KAAK7gd,SAASle,EAAI,KAC7Gqie,EAAYjxa,EAAOuta,WAAWx6d,EAAMiD,IACpCwjB,EAAK8zc,SAAWvud,KAAKC,IAAIwa,EAAK8zc,UAAY,EAAG2D,EAAU3D,UAAY,GACnEyD,GAActxd,EAAGwxd,EAAUxxd,EAAGC,EAAGuxd,EAAUvxd,EAAGP,MAAO8xd,EAAUxxd,EAAIoxd,EAAYxxd,OAAQ4xd,EAAUvxd,EAAIoxd,GAC3F,IAANlie,IAEAq6B,GACIxpB,EAAGV,KAAK+T,IAAIm+c,EAAUxxd,EAAG25Z,EAAY35Z,GAAIC,EAAGX,KAAK+T,IAAIm+c,EAAUvxd,EAAG05Z,EAAY15Z,GAC9EP,MAAOi6Z,EAAYj6Z,MAAOE,OAAQ+5Z,EAAY/5Z,QAElDowd,EAAiBwB,GAEhBD,GAIDA,EAAavxd,EAAIsxd,EAAUtxd,EAC3Buxd,EAAatxd,EAAIqxd,EAAUrxd,EACvBqxd,EAAU5xd,MAAQ6xd,EAAa7xd,QAC/B6xd,EAAa7xd,MAAQ4xd,EAAU5xd,OAEnC6xd,EAAa3xd,OAAS0xd,EAAU1xd,QARhC2xd,EAAeD,EAaT,IAANnie,IACA4qB,EAAK9J,YAAejQ,EAAGwxd,EAAUxxd,EAAGsvd,UAAWkC,EAAUlC,UAAWh8d,MAAOA,EAAMiD,KAEjFtD,KAAK+zM,SAASzmJ,EAAQjtD,GACtB,IAAKymB,EAAK9J,YAAc8J,EAAK9J,WAAWjQ,GAAKwxd,EAAUvhd,WAAWjQ,EAAG,CAC7Dwxd,EAAUvhd,YAAc8J,EAAK9J,WAAWq/c,UAAYkC,EAAUlC,YAC9Dv1c,EAAK9J,WAAWq/c,UAAYA,EAC5BkC,EAAUlC,UAAYA,EACtBA,EAAYv1c,EAAK9J,WAAWq/c,UAC5B/ua,EAAOuta,WAAW/zc,EAAK9J,WAAW3c,OAAOg8d,UAAYA,GAEzD,IAAImC,OAA6Btje,IAAdmhe,EAA0BA,EAAYkC,EAAUlC,UACnEv1c,EAAK9J,YAAejQ,EAAGwxd,EAAUvhd,WAAWjQ,EAAGsvd,UAAWmC,EAAcn+d,MAAOA,EAAMiD,SAEhFi7d,EAAUvhd,YAAcuhd,EAAUnB,YAAct2c,EAAK9J,WAAWq/c,UAAYkC,EAAUlC,YAC3Fv1c,EAAK9J,WAAWq/c,UAAY/ua,EAAOuta,WAAW/zc,EAAK9J,WAAW3c,OAAOg8d,UAAYkC,EAAUlC,WAGnGzB,EAAWA,EAAWvud,KAAKC,IAAIiyd,EAAU3D,SAAUA,GAAY2D,EAAU3D,SACzE56d,KAAKi+d,WAAW1nc,EAAQmwY,GAEpBj6Z,EADM,IAANvQ,IAAY8D,KAAK+zM,SAASzmJ,EAAQjtD,IAAUk+d,EAAU5B,mBAAqB,EACnEj2D,EAAYj6Z,MAAQ8xd,EAAU5B,mBAAqBrva,EAAOwta,kBAG1Dp0D,EAAYj6Z,MAAQ6gD,EAAOwta,kBAGtC39a,WAxELshb,KAyEI1B,EAAeV,eAzEnBoC,GA2EA33c,EAAK8tC,KAAOmoa,EAAehwd,EAAIuxd,EAAa7xd,OAAS,EAAIgvd,EAAWzld,MAAQ,EAE/D,SAAT28C,EACA7rC,EAAK8tC,IAAMypa,EAAU5xd,MAAQgvd,EAAWzld,MAE1B,UAAT28C,IACL7rC,EAAK8tC,IAAM7nD,GAGnB,OAAOwpB,GAEX8jc,EAAiBj/d,UAAU6ge,qCAAuC,SAAU3ua,EAAQzyB,EAAOoK,EAAMl4B,EAAGC,EAAGyiK,GAEnG,IAAIpvK,EACAk+d,EACA73D,EACAy3D,EAIA5nc,EAEAvgB,EACAD,EAKA2N,EACAxnB,EAGAwie,EACAC,EAEAlD,EAAaz7d,KAAK27d,cAAcrua,EAAQzyB,EAAO9tB,EAAGC,EAAGyiK,GACrD3oJ,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,IAE/Bo4d,GADO50c,EAAKm0c,KAAKv0d,KACX+oK,GACNhjK,EAAQM,EACRJ,EAASK,EAET4xd,GADmBtxa,EAAOq4B,OAAOtkF,MAAM,EAAGisD,EAAOq4B,OAAOnpF,QACvC,GACrB,GAAIwD,KAAK+zM,SAASzmJ,EAAQzyB,GAAQ,CAC9B,IAAI06B,GAA4C,IAAxCjI,EAAOhzB,YAAY/7B,QAAQ,QAC/BsyD,OAAQ,EACR+7K,EAAO5sO,KAAK6+d,oBAAoBvxa,EAAQzyB,GACxCikc,EAAuC,IAA9Bh4c,EAAKm0c,KAAK7gd,SAAS5d,QAAmC,IAAnBowO,EAAK,GAAGpwO,OACpDuie,KACAC,KACCF,EAIDE,EAAYpyP,EAHZ5sO,KAAKi/d,UAAUryP,EAAMmyP,EAAUC,GAKnC,IAAIE,GAAaH,SAAUA,EAAUnyP,KAAMA,EAAMoyP,UAAWA,EAAWvD,WAAYA,GAC/E0D,EAAYn/d,KAAKo/d,eAAe9xa,EAAQ4xa,EAAUrkc,EAAO9tB,EAAGJ,EAAQ+ud,GACxEnlc,EAAS2oc,EAAS3oc,OAClB,IAAImnV,OAAS,EACTnqV,GAAU4rc,GAAa,SAAoBjke,IAAdike,EAA2B7xa,EAAOwta,kBAAoB,EAAK,QAC1E5/d,IAAdike,IACAr4c,EAAK8tC,IAAMrhC,EAASkoc,EAAWzld,MAAQ,EACvC0nW,EAASyhH,EAAY7xa,EAAOwta,mBAEhCnud,EAASK,EACT,IAAIqyd,OAAc,EAElB,IADAA,KACKnje,EAAI,EAAGA,EAAI8ie,EAAUxie,OAAQN,IAU9B,IARIuQ,EADAmgO,EAAK1wO,GAAGM,OAAS,GAAM,GAAKN,IAAM8ie,EAAUxie,OAAS,GAAKsie,EAClD/xd,EAGA2wW,GAAU3wW,EAEZ,IAAN7Q,IACAyQ,EAAS0yd,EAAYnje,EAAI,GAAGyQ,OAAS2gD,EAAOyta,iBAE3Cr3c,EAAI,EAAGA,EAAIs7c,EAAU9ie,GAAGM,OAAQknB,IAEjC1N,GADA3V,EAAQitD,EAAO3E,UAAUq2a,EAAU9ie,GAAGwnB,KACxB64B,WAAWvmC,MACzBD,EAAS1V,EAAMk8C,WAAWxmC,OAC1Bood,EAAa5oa,EAAIx/C,EAASC,GAC1Buod,EAEYjxa,EAAOuta,WAAWx6d,EAAMiD,KAC1B25d,YAAcvB,EAAM,EAAIx/d,EACxB,IAANwnB,GAAWq7c,EAAS7ie,IAAM6ie,EAAS7ie,GAAGM,SACtC+he,EAAUxpY,WAAY,GAEtB+pY,GAAgB,IAAN5ie,IACA,IAANwnB,GAAWg7c,EAAaP,EAAa7wa,EAAOwta,mBAAqB6D,IACjE9ta,GAAQ,EACRpkD,EAAQiyd,EAAaP,EAAa,GAElCtta,GAAe,IAANntC,IACTjX,EAAQkyd,EAAcR,EAAa,IAG3Cz3D,EAAc1ma,KAAKm7d,WAAW7ta,EAAQ7gD,EAAOE,EAAQtM,EAAOq7d,EAAM,EAAGpua,EAAO3E,UAAUq2a,EAAU9ie,GAAGwnB,EAAI,KACnGo7c,GAAUp7c,GAAK,GAAW,IAANxnB,GACV,IAANwnB,IACAg7c,EAAah4D,EAAY35Z,EAAIugD,EAAOwta,kBAAoB,EACxD6D,EAAcj4D,EAAY35Z,EAAIoxd,EAAa7wa,EAAOwta,kBAAoB,GAGpE,IAANp3c,EACA27c,EAAYnje,IAAO6Q,EAAG25Z,EAAY35Z,EAAGC,EAAG05Z,EAAY15Z,EAAGP,MAAOi6Z,EAAYj6Z,MAAOE,OAAQ+5Z,EAAY/5Z,QAGrG3M,KAAKi+d,WAAWoB,EAAYnje,GAAIwqa,GAE/BnwY,IACDA,GACIxpB,EAAGsyd,EAAYnje,GAAG6Q,EAAGC,EAAGqyd,EAAYnje,GAAG8Q,EAAGP,MAAO4yd,EAAYnje,GAAGuQ,MAChEE,OAAQ0yd,EAAYnje,GAAGyQ,SAG/B3M,KAAKi+d,WAAW1nc,EAAQ8oc,EAAYnje,IACpCuQ,EAAQi6Z,EAAYj6Z,MAAQ6gD,EAAOwta,oBAC9Bh0c,EAAK9J,aAAgB9gB,IAAM8ie,EAAUxie,OAAS,GAAKowO,EAAK1wO,GAAGM,OAAS,GAAM,GAAMsie,IACxE,IAANp7c,QAAmCxoB,IAAxBqje,EAAUlC,WAA2BuC,EAAiBL,EAAUlC,aAC9EuC,EAAiBvyd,KAAK+T,IAAIw+c,EAAgBL,EAAUlC,WAAa,GACjEv1c,EAAK9J,YAAejQ,EAAGwxd,EAAUxxd,EAAG1M,MAAOA,EAAMiD,GAAI+4d,UAAWkC,EAAUlC,YAE9E6C,EAASR,WAAaA,EACtBQ,EAASP,YAAcA,EACvBO,EAASrua,MAAQA,EACjBqua,EAASzvT,MAAQisT,EACjBwD,EAASG,YAAcA,EACvBr/d,KAAKs/d,kBAAkBhya,EAAQpxD,EAAG2+B,EAAOqkc,EAAUxhH,GAI/D,OAAOnnV,GAEX8jc,EAAiBj/d,UAAUgke,eAAiB,SAAU9xa,EAAQ4xa,EAAUrkc,EAAO9tB,EAAGJ,EAAQ+ud,GAWtF,IAAK,IARDjvd,EAEAmyd,EACAO,EACAz4D,EACAnwY,EAPAwoc,EAAWG,EAASH,SACpBj4c,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,IAE/Bi8d,KAKAhqa,GAA4C,IAAxCjI,EAAOhzB,YAAY/7B,QAAQ,QAE1BrC,EAAI,EAAGA,EAAI6ie,EAASvie,QAAUuie,EAAS7ie,GAAGM,OAAQN,IAAK,CAC5DuQ,EAAQM,EACJwyd,EAAWrje,EAAI,KACfyQ,EAAS4yd,EAAWrje,EAAI,GAAGyQ,OAAS2gD,EAAOyta,iBAE/C,IAAK,IAAIr3c,EAAI,EAAGA,EAAIq7c,EAAS7ie,GAAGM,OAAQknB,IAAK,CACzC,IAAIrjB,EAAQitD,EAAO3E,UAAUo2a,EAAS7ie,GAAGwnB,IAIrC66c,GAHahpa,EAAIl1D,EAAMk8C,WAAWxmC,OAAS1V,EAAMk8C,WAAWvmC,MAC9Cu/C,EAAIl1D,EAAMk8C,WAAWvmC,MAAQ3V,EAAMk8C,WAAWxmC,OAEhDu3C,EAAOuta,WAAWx6d,EAAMiD,KACxCi7d,EAAUtB,YAAcvB,EAAM,EAAIx/d,EAClCwqa,EAAc1ma,KAAKm7d,WAAW7ta,EAAQ7gD,EAAOE,EAAQtM,EAAOq7d,EAAM,EAAGpua,EAAO3E,UAAUo2a,EAAS7ie,GAAGwnB,EAAI,KAC5F,IAANA,EACA67c,EAAWrje,IAAO6Q,EAAG25Z,EAAY35Z,EAAGC,EAAG05Z,EAAY15Z,EAAGP,MAAOi6Z,EAAYj6Z,MAAOE,OAAQ+5Z,EAAY/5Z,QAGpG3M,KAAKi+d,WAAWsB,EAAWrje,GAAIwqa,GAEzB,IAANxqa,GAAiB,IAANwnB,GACXk7c,EAAiBL,EAAUlC,UAC3Bv1c,EAAK9J,YAAejQ,EAAGwxd,EAAUxxd,EAAG1M,MAAOA,EAAMiD,GAAI+4d,UAAWkC,EAAUlC,YAE/D,IAAN34c,QAAmCxoB,IAAxBqje,EAAUlC,WAA2BuC,EAAiBL,EAAUlC,YAChFuC,EAAiBvyd,KAAK+T,IAAIw+c,EAAgBL,EAAUlC,WAAa,GACjEv1c,EAAK9J,YAAejQ,EAAGwxd,EAAUxxd,EAAG1M,MAAOA,EAAMiD,GAAI+4d,UAAWkC,EAAUlC,YAE9E5vd,EAAQi6Z,EAAYj6Z,MAAQ6gD,EAAOwta,kBAGnCqE,EADM,IAANjje,EACYqje,EAAWrje,GAAGuQ,MAGdJ,KAAKC,IAAI6yd,EAAWI,EAAWrje,GAAGuQ,OAItD,IAASvQ,EAAI,EAAGA,EAAI6ie,EAASvie,QAAUuie,EAAS7ie,GAAGM,OAAQN,IAAK,CAC5D,GAAIije,IAAcI,EAAWrje,GAAGuQ,MAEvB,CAAA,IADDu3E,EAAOm7Y,EAAYI,EAAWrje,GAAGuQ,MACrC,IAASiX,EAAI,EAAGA,EAAIq7c,EAAS7ie,GAAGM,OAAQknB,IAAK,CAC3B4pC,EAAO3E,UAAUo2a,EAAS7ie,GAAGwnB,IACzB4pC,EAAOuta,WAAWkE,EAAS7ie,GAAGwnB,IACpC3W,GAAKi3E,GAKf,IAAN9nF,EACAq6B,GAAWxpB,EAAGwyd,EAAW,GAAGxyd,EAAGC,EAAGuyd,EAAW,GAAGvyd,EAAGP,MAAO8yd,EAAW,GAAG9yd,MAAOE,OAAQ4yd,EAAW,GAAG5yd,QAGrG3M,KAAKi+d,WAAW1nc,EAAQgpc,EAAWrje,IAI3C,OADAgje,EAAS3oc,OAASA,EACX4oc,GAEX9E,EAAiBj/d,UAAUkke,kBAAoB,SAAUhya,EAAQpxD,EAAG2+B,EAAOqkc,EAAUxhH,GACjF,IAAIpxW,EACAkzd,EACAx7Y,EACAl9D,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,IAC/BspO,EAAOsyP,EAAStyP,KAChBoyP,EAAYE,EAASF,UACrBN,EAAaQ,EAASR,WACtBC,EAAcO,EAASP,YACvB9ta,EAAQqua,EAASrua,MACjBwua,EAAcH,EAASG,YACvB5D,EAAayD,EAASzD,WACtBC,EAAMwD,EAASzvT,MACfqvT,EAAuC,IAA9Bh4c,EAAKm0c,KAAK7gd,SAAS5d,QAAmC,IAAnBowO,EAAK,GAAGpwO,OAIxD,GAHIsie,GAAgB,IAAN5ie,IACVoQ,EAAO+yd,EAAY,GAAG5yd,MAAQ4yd,EAAY,GAAGtyd,GAAOsyd,EAAY,GAAG5yd,MAAQ4yd,EAAY,GAAGtyd,EAAK,EAAI,GAEnG7Q,IAAM0wO,EAAKpwO,OAAS,IAChBowO,EAAK1wO,GAAGM,OAAS,GAAM,GAAKsie,GAAgB,IAAN5ie,GAAS,CAC/Csje,EAAWR,EAAU9ie,GAAGmQ,KAAKmT,MAAMw/c,EAAU9ie,GAAGM,OAAS,IACzD,IAAIije,OAAc,EAClBA,EAAcnya,EAAO3E,UAAU62a,GAC/B,IAAIE,OAAiB,EACjBC,EAAYrya,EAAOuta,WAAW2E,GAAUzyd,EACxC6yd,EAAYtya,EAAOuta,WAAW2E,GAAUxyd,EAC5C0yd,EAAiB1/d,KAAK27d,cAAcrua,EAAQmya,EAAaE,EAAWC,EAAWlE,EAAM,GACrF13Y,OAAO9oF,GACF21D,GAASiua,GACE,IAARxyd,IACApQ,EAAI,GAER8nF,GAAQq7Y,EAAY/yd,GAAKS,EAAIsyd,EAAY/yd,GAAKG,OAAS,GAAK4yd,EAAYnje,GAAG6Q,EAAIsyd,EAAYnje,GAAGuQ,OAAS,EAC7F,IAANvQ,IACA4qB,EAAK8tC,KAAOovB,IAGV86Y,QAAqB5je,IAAXwiX,IAChB15R,EAAO05R,EAASpwT,EAAOwta,kBAAoB,GAAK6E,EAAYD,EAAe1pd,MAAQ,SAE1E9a,IAAT8oF,GACAhkF,KAAK6/d,uBAAuBvya,EAAQ0xa,EAAU9ie,GAAI8nF,EAAMy3Y,GAExDqD,IACAh4c,EAAK8tC,KAAO+pa,EAAcD,GAAc,GAAW,IAANxie,EAAU8nF,EAAO,GAAKy3Y,EAAWzld,MAAQ,QAEzE9a,IAAb4rB,EAAK8tC,KAAqBtH,EAAOuta,WAAW2E,KAC5C14c,EAAK8tC,IAAM+qa,GAEf9ua,GAAQ,EACR30D,MAIZm+d,EAAiBj/d,UAAUyke,uBAAyB,SAAUvya,EAAQ0xa,EAAWh7Y,EAAMy3Y,GACnF,IAAK,IAAI/3c,EAAI,EAAGA,EAAIs7c,EAAUxie,OAAQknB,IAAK,CACvC,IAAI66c,EAAYjxa,EAAOuta,WAAWmE,EAAUt7c,IAChC4pC,EAAO3E,UAAUq2a,EAAUt7c,IAGvC,GAFA66c,EAAUxxd,GAAKi3E,EACfu6Y,EAAUlC,WAAar4Y,EACnBtgE,IAAMs7c,EAAUxie,OAAS,EAAG,CAE5B,IAAIsje,GACA/yd,EAAGwxd,EAAUxxd,EAAGC,EAAGuxd,EAAUvxd,EAAGP,MAAO8xd,EAAUxxd,EAC7C0ud,EAAWzld,MAAOrJ,OAAQ4xd,EAAUvxd,EAAIyud,EAAW1ld,QAEvDqnC,EAAYp9C,KAAKg9d,uBAAuB1va,EAAQwya,EAAWvB,EAAUtB,aACzEj9d,KAAKu9d,iBAAiBjwa,EAAQ,OAASgwa,QAASwC,IAAcvB,EAAUtB,YAAa7/a,MAIjGi9a,EAAiBj/d,UAAU6je,UAAY,SAAUryP,EAAMmyP,EAAUC,GAC7D,IAAK,IAAI9ie,EAAI,EAAGA,EAAI0wO,EAAKpwO,OAAQN,IAAK,CAClC6ie,EAAS7ie,MACT8ie,EAAU9ie,MACV,IAAI+jC,OAAO,EAEX,GADAA,EAAO2sM,EAAK1wO,GAAGM,OACXowO,EAAK1wO,GAAGM,OAAS,GAAM,EAAG,CAC1ByjC,EAAO5zB,KAAKqmB,KAAKk6M,EAAK1wO,GAAGM,OAAS,GAClC,IAAK,IAAI8pB,EAAI,EAAGA,EAAI2Z,EAAM3Z,IACtBy4c,EAAS7ie,GAAGsI,KAAKooO,EAAK1wO,GAAGoqB,IAGjC,IAAK,IAAI5C,EAAIq7c,EAAS7ie,GAAGM,OAAQknB,EAAIkpN,EAAK1wO,GAAGM,OAAQknB,IACjDs7c,EAAU9ie,GAAGsI,KAAKooO,EAAK1wO,GAAGwnB,MAItC22c,EAAiBj/d,UAAU8ge,mBAAqB,SAAU5ua,EAAQzyB,EAAO9tB,EAAGC,EAAGyiK,EAAOswT,GAYjE//d,KAAK27d,cAAcrua,EAAQzyB,EAAO9tB,EAAGC,EAAGyiK,GAVzD,IAAIpvK,EACAk+d,EACA73D,EACAy3D,EACAC,EACAnH,EACA1gc,EACA8nc,EACA2B,EACAC,EAQAvE,EANA50c,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,IAC/B0Z,EAAaswC,EAAO3E,UAAU7hC,EAAKm0c,KAAK7gd,SAAS,IACjDm7C,GAA4C,IAAxCjI,EAAOhzB,YAAY/7B,QAAQ,QAC/BqhC,EAA4B,SAAnB9Y,EAAKm0c,KAAKv0d,MAAmB,EAAI,EAC1C+F,EAAQM,EACRJ,EAASK,EAEb0ud,EAAMjsT,EACN,IAAIvzK,EACAkhD,EACA12C,EAGA21d,EAFA12Y,KACAu6Y,KAEJ,IACKhke,EAAI,EAAGA,EAAI4qB,EAAKm0c,KAAK7gd,SAAS5d,OAAQN,IAAK,CA+D5C,GA9DuB,cAAnB4qB,EAAKm0c,KAAKv0d,OAEVA,EAAQxK,EAAI,GAAM,GAAK4qB,EAAKm0c,KAAK7gd,SAAS5d,OAAS,EAAK,OAAS,QACjEojC,EAAU1jC,EAAI,GAAM,GAAK4qB,EAAKm0c,KAAK7gd,SAAS5d,OAAS,GAAM,EAAI,GAEnEiQ,EAAQM,EAAI/M,KAAKmge,WAAW7ya,EAAQzyB,EAAO/T,EAAMpgB,GACjDrG,EAAQitD,EAAO3E,UAAU7hC,EAAKm0c,KAAK7gd,SAASle,IAC5Ciie,EAAa5oa,EAAIl1D,EAAMk8C,WAAWxmC,OAAS1V,EAAMk8C,WAAWvmC,MAC5Dood,EAAc7oa,EAAIl1D,EAAMk8C,WAAWvmC,MAAQ3V,EAAMk8C,WAAWxmC,OAE5D2wZ,EAAc1ma,KAAKm7d,WAAW7ta,EAAQ7gD,EAAQmzB,EAASu+b,EAAYxxd,EAAQtM,EAAOovK,EAAQ,OAAGv0K,GAAW,GACxGqje,EAAYjxa,EAAOuta,WAAWx6d,EAAMiD,IACpC+6d,GAActxd,EAAGwxd,EAAUxxd,EAAGC,EAAGuxd,EAAUvxd,EAAGP,MAAO8xd,EAAUxxd,EAAIoxd,EAAYxxd,OAAQ4xd,EAAUvxd,EAAIoxd,GAC3F,IAANlie,GACA8D,KAAKi+d,WAAWv3D,EAAa23D,GAC7B9nc,EAASmwY,GAGT1ma,KAAKi+d,WAAW1nc,EAAQmwY,IAGxB63D,EAAUtH,YAAmC,cAAnBnwc,EAAKm0c,KAAKv0d,MAAwBxK,EAAI,GAAM,GAAK4qB,EAAKm0c,KAAK7gd,SAAS5d,OAAS,IACvG6/d,OAA0Bnhe,IAAdmhe,EAA0Bhwd,KAAK+T,IAAIm+c,EAAUlC,UAAWA,GAAakC,EAAUlC,WAG/Fv1c,EAAK8zc,SAAWvud,KAAKC,IAAIwa,EAAK8zc,UAAY,EAAG2D,EAAU3D,UAAY,GAC1C,cAAnB9zc,EAAKm0c,KAAKv0d,MAAwBogB,EAAKm0c,KAAK7gd,SAAS5d,OAAS,GAAKN,EAAI,GAAM,GAyBrE,IAANA,IACAyQ,EAASsqd,EAAWtqd,OAAS2gD,EAAOyta,gBAAkB,GAE1DmF,EAAU17d,MAAO84d,QAASe,IACtBE,EAAUzC,cACVoE,EAAYA,EAAU1ld,OAAO+jd,EAAUzC,gBA3BvCnvd,EAFmB,cAAnBma,EAAKm0c,KAAKv0d,MAAwBogB,EAAKm0c,KAAK7gd,SAAS5d,OAAS,EAErD6P,KAAKC,IAAIo6Z,EAAY/5Z,OAAQsqd,EAAWtqd,QAAU2gD,EAAOyta,gBAAkB,EAI3Er0D,EAAY/5Z,OAAS2gD,EAAOyta,gBAAkB,EAE3DtrT,EAAQ3oJ,EAAK8zc,SACbj1Y,EAAOnhF,MAAO84d,QAASe,IAClB4B,EAODjge,KAAKi+d,WAAWgC,EAAY5B,GAN5B4B,GACIlzd,EAAGwxd,EAAUxxd,EAAGC,EAAGuxd,EAAUvxd,EAAGP,MAAO8xd,EAAUxxd,EAAIoxd,EACrDxxd,OAAQ4xd,EAAUvxd,EAAIoxd,GAM1BG,EAAUzC,cACVn2Y,EAASA,EAAOnrE,OAAO+jd,EAAUzC,eAY/B,IAAN5/d,IACA4qB,EAAK9J,YAAejQ,EAAGwxd,EAAUxxd,EAAGsvd,UAAWkC,EAAUlC,UAAWh8d,MAAOA,EAAMiD,KAEjFtD,KAAK+zM,SAASzmJ,EAAQjtD,GACtB,IAAKymB,EAAK9J,YAAc8J,EAAK9J,WAAWjQ,GAAKwxd,EAAUvhd,WAAWjQ,EAAG,CACjE,GAAIwxd,EAAUvhd,YAAc8J,EAAK9J,WAAWq/c,UAAYkC,EAAUlC,UAAW,CACzE,IAAI+D,EAAct5c,EAAK9J,WAAWq/c,UAClCkC,EAAUlC,UAAY+D,EACtB9ya,EAAOuta,WAAW/zc,EAAK9J,WAAW3c,OAAOg8d,UAAY+D,EACrDt5c,EAAK9J,WAAWq/c,UAAY+D,EAEhCt5c,EAAK9J,YACDjQ,EAAGwxd,EAAUvhd,WAAWjQ,EAAGsvd,eAAyBnhe,IAAdmhe,EAA0BA,EAAYkC,EAAUlC,UACtFh8d,MAAOA,EAAMiD,SAGZi7d,EAAUvhd,YAAcuhd,EAAUnB,YAAct2c,EAAK9J,WAAWq/c,UAAYkC,EAAUlC,YAC3Fv1c,EAAK9J,WAAWq/c,UAAY/ua,EAAOuta,WAAW/zc,EAAK9J,WAAW3c,OAAOg8d,UAAYkC,EAAUlC,WAGnGpF,EAAaoH,EAuBjB,OApBK0B,EAaDj5c,EAAKg1c,YAAcn2Y,GAZI,cAAnB7+D,EAAKm0c,KAAKv0d,MAAwBogB,EAAKm0c,KAAK7gd,SAAS5d,OAAS,IAC9Dwje,GACIjzd,EAAGmzd,EAAU,GAAG5C,QAAQvwd,EAAGC,EAAGkzd,EAAU,GAAG5C,QAAQtwd,EACnDP,MAAOyzd,EAAUA,EAAU1je,OAAS,GAAG8ge,QAAQ7wd,MAAOE,OAAQuzd,EAAUA,EAAU1je,OAAS,GAAG8ge,QAAQ3wd,QAE1GywC,EAAYp9C,KAAKg9d,uBAAuB1va,EAAQ0ya,EAAWtE,EAAM,GACjE17d,KAAKu9d,iBAAiBjwa,EAAQ,KAAM4ya,EAAWxE,EAAM,EAAGt+a,IAE5DA,EAAYp9C,KAAKg9d,uBAAuB1va,EAAQ2ya,GAAc1pc,EAAQmlc,EAAM,GAC5E17d,KAAKu9d,iBAAiBjwa,EAAQ,KAAM2ya,EAAat6Y,IAAY23Y,QAAS/mc,IAAWmlc,EAAM,EAAGt+a,IAKzFD,MAAMk/a,KACP/ua,EAAOuta,WAAW79c,EAAW1Z,IAAI+4d,UAAYA,GAEjDv1c,EAAK4/Y,YAAcnwY,EACnBzP,EAAK8tC,IAAM7nD,EACJwpB,GAEX8jc,EAAiBj/d,UAAUyje,oBAAsB,SAAUvxa,EAAQzyB,GAC/D,IAAI/T,EAEAk7C,EACJA,EAAS,EACT,IACI1wD,EADAs7N,KAEJt7N,GALAwV,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,KAKb23d,KAAK7gd,SAAS5d,OAChC,IAAI4d,EAAWpa,KAAKtB,OAAOooB,EAAKm0c,KAAK7gd,UACrC,GAAI0M,EAAKm0c,KAAKruP,KAAM,CAChB,IAAI1tN,OAAQ,EACZA,EAAQ4H,EAAKm0c,KAAK7gd,SAAS5d,OAC3B,IAAI6mE,OAAU,EAGVrB,GAFJqB,EAAUh3D,KAAKqmB,KAAKxT,EAAQ4H,EAAKm0c,KAAKruP,OACxB,GAAM,EACPvpK,EAGAA,EAAU,OAGY,IAA9Bv8C,EAAKm0c,KAAK7gd,SAAS5d,QAA8C,IAA9BsqB,EAAKm0c,KAAK7gd,SAAS5d,OAC3DwlE,EAAS,EAE0B,IAA9Bl7C,EAAKm0c,KAAK7gd,SAAS5d,SACxBwlE,EAAS,GAEb,KAAO1wD,EAAa,GAChBs7N,EAAKA,EAAKpwO,QAAU4d,EAASuO,OAAO,EAAGq5C,IACvC1wD,GAAc0wD,GACGA,IACbA,EAAS1wD,GAGjB,OAAOs7N,GAEXytP,EAAiBj/d,UAAUsD,OAAS,SAAUq8B,GAC1C,IAAI7+B,EACAmke,KACJ,IAAKnke,EAAI,EAAGA,EAAI6+B,EAAKv+B,OAAQN,IACzBmke,EAAMnke,GAAK6+B,EAAK7+B,GAEpB,OAAOmke,GAEXhG,EAAiBj/d,UAAU+ke,WAAa,SAAU7ya,EAAQzyB,EAAO/T,EAAMpgB,GACnE,IAAIiF,EAAS,EACTw0B,GAAiD,IAAxCmtB,EAAOhzB,YAAY/7B,QAAQ,QAAkBs8B,EAAM0hB,WAAWxmC,OACvE8kB,EAAM0hB,WAAWvmC,MACjBsqd,EAAW55d,GAAcogB,EAAKm0c,KAAKv0d,KAOvC,OANAiF,EAASmb,EAAKm0c,KAAKtvd,QAAU,GACN,cAAnBmb,EAAKm0c,KAAKv0d,MACNiF,GAAU2hD,EAAOwta,oBACjBnvd,EAAS2hD,EAAOwta,kBAAoB,GAGpCwF,GACJ,IAAK,OACD30d,EAASw0B,EAAQ,EAAIx0B,EACrB,MACJ,IAAK,QACDA,GAAkBw0B,EAAQ,EAGlC,OAAOx0B,GAEX0ud,EAAiBj/d,UAAU6ie,WAAa,SAAUx5D,EAAOC,GAErDD,EAAM13Z,EAAIV,KAAK+T,IAAIqkZ,EAAM13Z,EAAG23Z,EAAM33Z,GAClC03Z,EAAMh4Z,MAAQJ,KAAKC,IAAIm4Z,EAAMh4Z,MAAOi4Z,EAAMj4Z,OAC1Cg4Z,EAAM93Z,OAASN,KAAKC,IAAIm4Z,EAAM93Z,OAAQ+3Z,EAAM/3Z,SAEhD0td,EAAiBj/d,UAAU+he,yBAA2B,SAAU7va,EAAQzyB,EAAOtE,GAC3E,IAAIzP,EACJA,EAAOwmC,EAAOuta,WAAWhgc,EAAMv3B,IAC/B,IAAIi9d,EACAtJ,EAEA3wc,EACA6Z,EAGJ,IAFAA,EAAQmtB,EAAOwta,kBAEVx0c,EAAI,EAAGA,EAAIQ,EAAKs2B,UAAU5gD,OAAQ8pB,IACnC2wc,EAAa3pa,EAAOq4B,OAAO7+D,EAAKs2B,UAAU92B,IAAIg3c,QAC9CiD,EAAMhqc,EAAOxpB,GAAKkqd,EAAWxqd,MAAQ0zB,SACnBjlC,IAAd4rB,EAAKk9D,MAAsBu8Y,EAAMz5c,EAAKk9D,QACtCl9D,EAAKk9D,KAAOu8Y,EACZz5c,EAAKmwc,WAAa3pa,EAAOq4B,OAAO7+D,EAAKs2B,UAAU92B,IAAIg3c,UAI/DjD,EAAiBj/d,UAAU4he,uBAAyB,SAAU1va,EAAQ/2B,EAAQk5I,EAAOwtT,GAEjF,IAAIO,GACJA,GAASzwd,EAAGwpB,EAAOxpB,EAAGC,EAAGupB,EAAOvpB,EAAGP,MAAO8pB,EAAO9pB,MAAOE,OAAQ4pB,EAAO5pB,SAClEK,GAAKsgD,EAAOyta,gBAAkB,EACnCyC,EAAK7wd,QAAU2gD,EAAOyta,gBAAkB,EACxC,IAAIyF,EACJA,KACA,IAAIlD,EACA9vb,EACJA,OAAoBtyC,IAAhB+he,EAA4BA,EAAcxtT,EAC9C6tT,EAAUhwa,EAAOq4B,OAAOn4C,GAAK8f,EAAOq4B,OAAOn4C,GAAG8vb,QAAU,KAExD,EAAG,CACC,GAAIA,IAAaE,EAAKxwd,EAAIswd,EAAQtwd,GAAKwwd,EAAK7wd,OAAS2wd,EAAQtwd,GACrDwwd,EAAKxwd,EAAIswd,EAAQ3wd,QAAU2wd,EAAQ3wd,OAAS6wd,EAAK7wd,QACrD6wd,EAAKxwd,GAAKswd,EAAQtwd,GACdwwd,EAAK7wd,QAAU2wd,EAAQ3wd,QAAU6wd,EAAKxwd,EAAIswd,EAAQtwd,GAAKwwd,EAAK7wd,OAAS2wd,EAAQ3wd,QAAS,CAE1F6zd,EAAmB73c,OADP,EACqB,EAAG6kB,QAEnC,GAAI8vb,GAAWA,EAAQ3wd,OAAS6wd,EAAKxwd,EACtC,MAEJwgC,IACA8vb,EAAUhwa,EAAOq4B,OAAOn4C,GAAK8f,EAAOq4B,OAAOn4C,GAAG8vb,QAAU,WACnD9vb,GAAK,GACdA,QAAqBtyC,IAAhB+he,EAA4BA,EAAcxtT,GAAS,EACxD6tT,EAAUhwa,EAAOq4B,OAAOn4C,GAAK8f,EAAOq4B,OAAOn4C,GAAG8vb,QAAU,KACxD,EAAG,CACC,GAAIA,IAAaE,EAAKxwd,EAAIswd,EAAQtwd,GAAKwwd,EAAK7wd,OAAS2wd,EAAQtwd,GACxDwwd,EAAKxwd,EAAIswd,EAAQ3wd,QAAU2wd,EAAQ3wd,OAAS6wd,EAAK7wd,QAClD6wd,EAAKxwd,GAAKswd,EAAQtwd,GAAKwwd,EAAK7wd,QAAU2wd,EAAQ3wd,QAAU6wd,EAAKxwd,EAAIswd,EAAQtwd,GAAKwwd,EAAK7wd,OAAS2wd,EAAQ3wd,QACpG6zd,EAAmBh8d,KAAKgpC,QAEvB,GAAI8vb,GAAWA,EAAQtwd,EAAIwwd,EAAK7wd,OACjC,MAEJ6gC,IACA8vb,EAAUhwa,EAAOq4B,OAAOn4C,GAAK8f,EAAOq4B,OAAOn4C,GAAG8vb,QAAU,WACnD9vb,GAAK8f,EAAOq4B,OAAOnpF,QAC5B,OAAOgke,GAEXnG,EAAiBj/d,UAAUuie,UAAY,SAAUrwa,EAAQ/2B,EAAQk5I,GAC7D,IAAI+tT,EACJA,EAAOjnc,EACP,IAAIiX,EACJA,EAAI,EACJ,IAAI8vb,EAEJ,IADAA,EAAUhwa,EAAOq4B,OAAOn4C,GAAK8f,EAAOq4B,OAAOn4C,GAAG8vb,QAAU,KACjD9vb,EAAI8f,EAAOq4B,OAAOnpF,QAAQ,CAC7B,GAAI8ge,GAAWE,EAAK7wd,OAAS2wd,EAAQtwd,EACjC,OAAOwgC,EAGPA,IAEJ8vb,EAAUhwa,EAAOq4B,OAAOn4C,GAAK8f,EAAOq4B,OAAOn4C,GAAG8vb,QAAU,KAE5D,OAAO9vb,GAEX6sb,EAAiBj/d,UAAU6qI,cAAgB,SAAU34E,EAAQ/sD,GAEzD,OAAO+sD,EAAO3E,UAAU2E,EAAO3E,UAAUpoD,EAAKwwa,QAAQ,IAAIh/X,WAE9Dsob,EAAiBj/d,UAAUyzc,YAAc,SAAUvhZ,EAAQ/sD,EAAMgsH,GAC7D,IAAIk0W,EACJA,EAAanza,EAAOuta,WAAWt6d,EAAK+C,IACpC,IAAIogB,EACJ,GAAInjB,EAAKuwa,UAAYvwa,EAAKuwa,SAASt0a,SAAW+D,EAAK8zX,aAAer0X,KAAK4gc,aACnE,IAAKl9a,EAAI,EAAGA,EAAInjB,EAAKuwa,SAASt0a,OAAQknB,IAAK,CACvC,IAAI/K,OAAO,GACXA,EAAO20C,EAAO3E,UAAU2E,EAAO3E,UAAUpoD,EAAKuwa,SAASptZ,IAAI0rZ,WACjDo7B,qBAC6C,IAA/Ci2B,EAAWxF,KAAK7gd,SAAS7b,QAAQoa,EAAKrV,KACtCm9d,EAAWxF,KAAK7gd,SAAS5V,KAAKmU,EAAKrV,IAEnCqV,EAAKm4Z,UAAYn4Z,EAAKm4Z,SAASt0a,QAAUmc,EAAK07W,aAC9CosG,EAAWxF,KAAKC,YAAa,GAEjCl7d,KAAK6uc,YAAYvhZ,EAAQ30C,EAAM4zG,EAAQ,IAKnDk0W,EAAWxF,KAAKxrT,MAAQljD,EAEpBk0W,EAAWxF,KAAKC,aAChBuF,EAAWxF,KAAK3gc,YAAc,aAC9Bmmc,EAAWxF,KAAKv0d,KAAO,UAIvB4mD,EAAOD,eAAiC,wBAAhBC,EAAO5mD,OAC/B4mD,EAAOD,cAAc9sD,EAAMkge,EAAWxF,MACT,aAAzBwF,EAAWxF,KAAKv0d,MAAuB+5d,EAAWxF,KAAKC,aACvDuF,EAAWxF,KAAKv0d,KAAO,SACvB+5d,EAAWxF,KAAK3gc,YAAc,eAGlCgzB,EAAOmiH,OAAkC,cAAzBgxT,EAAWxF,KAAKv0d,MAAwB6lH,GAASj/D,EAAOmiH,QACxEgxT,EAAWxF,KAAKC,YAAa,IAGrCb,EAAiBj/d,UAAUige,aAAe,SAAU/ta,EAAQ/2B,EAAQo6a,GAChE,IAAIpwc,EACAmgc,EAKAxyJ,EAJAl4R,EAAQ,EACRD,EAAS,EACTqiF,EAAM,EACNsoY,EAAiB,IAAI3qc,GAAK,EAAG,EAAG46a,EAAS5jc,EAAG4jc,EAAS3jc,GAEzDkhS,EAAe5gP,EAAO/2B,OAAS+2B,EAAO/2B,OAASmqc,EAC/C,IAAIpmc,EAAcgzB,EAAOhzB,YAEzB,GAAIgzB,EAAOozY,UAAW,CAElB1qb,GADA0qb,EAAYpzY,EAAO3E,UAAU2E,EAAOozY,YAClBnkZ,WAAWvmC,MAC7BD,EAAS2qb,EAAUnkZ,WAAWxmC,OAC9Bu3C,EAAOkta,QAAU95B,EAAU70b,QAC3ByhD,EAAOmta,QAAU/5B,EAAUz0b,QAC3B,IAAIymD,EAAQguY,EAAUhuY,MAKtB,IAJApF,EAAOkta,SAAkC,gBAAvBlta,EAAOhzB,YAAgCtkB,EAAQ08C,EAAM3lD,GAAKiJ,EAAQ08C,EAAM3lD,EAC1FugD,EAAOmta,SAAkC,gBAAvBnta,EAAOhzB,YAAgCvkB,EAAS28C,EAAM1lD,GAAK+I,EAAS28C,EAAM1lD,EAC5FzM,EAAOmgc,EACPtoW,EAAM,EACC73F,EAAKwwa,QAAQv0a,QAChB+D,EAAOP,KAAKimI,cAAc34E,EAAQ/sD,GAClC63F,GAAO9qC,EAAOuta,WAAWt6d,EAAK+C,IAAIq5d,oBAAsB,GAEhB,IAAxCrva,EAAOhzB,YAAY/7B,QAAQ,SAC3B+uD,EAAOkta,SAAWlta,EAAOuta,WAAWn6B,EAAUp9b,IAAI0J,EAClDsgD,EAAOmta,SAAWnta,EAAOuta,WAAWn6B,EAAUp9b,IAAIyJ,EAAIqrF,IAGtD9qC,EAAOkta,SAAWlta,EAAOuta,WAAWn6B,EAAUp9b,IAAIyJ,EAAIqrF,EACtD9qC,EAAOmta,SAAWnta,EAAOuta,WAAWn6B,EAAUp9b,IAAI0J,QAItD,GAAoB,gBAAhBstB,GAAiD,gBAAhBA,EAA+B,CAChE,OAAQgzB,EAAO4C,qBACX,IAAK,OACD5C,EAAOkta,QAAWtsL,EAAanhS,EAAIwpB,EAAOxpB,EAAKugD,EAAOtuB,OAAOxyB,KAC7D,MACJ,IAAK,QACD8gD,EAAOkta,QAAUtsL,EAAanhS,EAAImhS,EAAal4R,MAAQs3C,EAAOtuB,OAAOvyB,MAAQ8pB,EAAO9pB,MACpF,MACJ,IAAK,OACL,IAAK,SACD6gD,EAAOkta,QAAUtsL,EAAanhS,EAAImhS,EAAal4R,MAAQ,GAAKugB,EAAOxpB,EAAIwpB,EAAO9pB,OAAS,EAG/F,OAAQ6gD,EAAO6C,mBACX,IAAK,OACL,IAAK,MACD,IAAItU,EACJA,EAAQqyP,EAAalhS,EAAIsgD,EAAOtuB,OAAOtyB,IACvC4gD,EAAOmta,QAA0B,gBAAhBngc,EAAgCuhB,EAAQtlB,EAAO5pB,OAASkvC,EACzE,MACJ,IAAK,SACD,IAAIlvC,OAAS,EACbA,EAASuhS,EAAalhS,EAAIkhS,EAAan4R,OAASu3C,EAAOtuB,OAAOryB,OAC9D2gD,EAAOmta,QAA0B,gBAAhBngc,EAAgC3tB,EAAS4pB,EAAO5pB,OAASA,EAC1E,MACJ,IAAK,SACD,IAAI4mB,OAAS,EACbA,EAAS26Q,EAAalhS,EAAIkhS,EAAan4R,OAAS,EAChDu3C,EAAOmta,QAAiC,gBAAvBnta,EAAOhzB,YACpB/G,GAAUgD,EAAOvpB,EAAIupB,EAAO5pB,QAAU,EAAI4mB,GAAUgD,EAAOvpB,EAAIupB,EAAO5pB,QAAU,OAI3F,CACD,OAAQ2gD,EAAO4C,qBACX,IAAK,OACL,IAAK,OACD,IAAI1jD,OAAO,EACXA,EAAO0hS,EAAanhS,EAAIugD,EAAOtuB,OAAOxyB,KACtC8gD,EAAOkta,QAA0B,gBAAhBlgc,EAAgC9tB,EAAO+pB,EAAO5pB,OAASH,EACxE,MACJ,IAAK,QACD,IAAIC,OAAQ,EACZA,EAAQyhS,EAAanhS,EAAImhS,EAAal4R,MAAQs3C,EAAOtuB,OAAOvyB,MAC5D6gD,EAAOkta,QAA0B,gBAAhBlgc,EAAgC7tB,EAAQ8pB,EAAO5pB,OAASF,EACzE,MACJ,IAAK,SACG8mB,OAAS,EACbA,EAAS26Q,EAAal4R,MAAQ,EAAIk4R,EAAanhS,EAC/CugD,EAAOkta,QAAiC,gBAAvBlta,EAAOhzB,YACpB/G,GAAUgD,EAAOvpB,EAAIupB,EAAO5pB,QAAU,EAAI4mB,GAAUgD,EAAOvpB,EAAIupB,EAAO5pB,QAAU,EAG5F,OAAQ2gD,EAAO6C,mBACX,IAAK,MACD7C,EAAOmta,QAAUvsL,EAAalhS,EAAIsgD,EAAOtuB,OAAOtyB,IAAM6pB,EAAOxpB,EAC7D,MACJ,IAAK,OACL,IAAK,SACDugD,EAAOmta,QAAUvsL,EAAalhS,EAAIkhS,EAAan4R,OAAS,GAAKwgB,EAAO9pB,MAAQ8pB,EAAOxpB,GAAK,EACxF,MACJ,IAAK,SACDugD,EAAOmta,QAAUvsL,EAAalhS,EAAIkhS,EAAan4R,OAASu3C,EAAOtuB,OAAOryB,OAAS4pB,EAAO9pB,SAM1G4td,EAAiBj/d,UAAUmge,iBAAmB,SAAUjua,EAAQ/sD,EAAMkvK,GAClE,IAAIvzK,EACA4qB,EASA3f,EACAk2D,EAMJ,GALAv2C,EAIOwmC,EAAOuta,WAAWt6d,EAAK+C,IAE1B/C,EAAKuwa,SAASt0a,OACd,IAAKN,EAAI,EAAGA,EAAIqE,EAAKuwa,SAASt0a,OAAQN,KAClCmhE,EAAO/P,EAAO3E,UAAUpoD,EAAKuwa,SAAS50a,KACjCu7B,UACLtwB,EAASmmD,EAAO3E,UAAU0U,EAAK+xW,UAC3B/xW,EAAK/lC,UACL+lC,EAAKsja,SAAU,EACXrza,EAAOsza,qBACItza,EAAOsza,qBAAqBvja,GAGnCv2C,IAAuD,IAA/CA,EAAKm0c,KAAK7gd,SAAS7b,QAAQ8+D,EAAK+xW,YACxC/xW,EAAKvxB,YACe,wBAAhBwhB,EAAO5mD,MAAgD,eAAd22D,EAAK32D,MAC9C1G,KAAKkza,eAAe5lX,EAAQ+P,EAAM98D,EAAM4G,EAAQjL,IAIxDiL,IAAWA,EAAOktX,YAAcr0X,KAAK+zM,SAASzmJ,EAAQnmD,KACtDnH,KAAKu7d,iBAAiBjua,EAAQnmD,EAAQsoK,EAAQ,IAK9D,GAAI3oJ,GAAQA,EAAKm0c,KAAKW,WAAWp/d,OAE7B,IAAKN,EAAI,EAAGA,EAAI4qB,EAAKm0c,KAAKW,WAAWp/d,OAAQN,IACzCiL,EAASmmD,EAAO3E,UAAU7hC,EAAKm0c,KAAKW,WAAW1/d,IAC/CmhE,EAAO/P,EAAO3E,UAAUxhD,EAAO4pa,QAAQ,IACvC/wa,KAAK6ge,WAAWvza,EAAQ/sD,EAAM4G,EAAQk2D,IAClCl2D,EAAOktX,YAAcr0X,KAAK+zM,SAASzmJ,EAAQnmD,KAC3CnH,KAAKu7d,iBAAiBjua,EAAQnmD,EAAQsoK,EAAQ,IAK9D4qT,EAAiBj/d,UAAU83a,eAAiB,SAAU5lX,EAAQ+P,EAAM98D,EAAM4G,EAAQjL,GAC9E,IAAI4qB,EAAOwmC,EAAOuta,WAAWt6d,EAAK+C,IAE9BwjB,EAAKm0c,KAAKW,WAAWp/d,OAErBwD,KAAK8ge,uCAAuCxza,EAAQ/sD,EAAM4G,EAAQk2D,GAIpC,eAA1Bv2C,EAAKm0c,KAAK3gc,aAAmD,aAAnBxT,EAAKm0c,KAAKv0d,KACpD1G,KAAK+ge,8BAA8Bzza,EAAQ+P,EAAM98D,EAAM4G,EAAQjL,GAGjC,eAA1B4qB,EAAKm0c,KAAK3gc,YACVt6B,KAAK8ge,uCAAuCxza,EAAQ/sD,EAAM4G,EAAQk2D,GAG9Dv2C,EAAKm0c,KAAKtvd,OAAS,EACnB3L,KAAKghe,WAAW1za,EAAQ/sD,EAAM4G,EAAQk2D,GAGtCr9D,KAAK6ge,WAAWvza,EAAQ/sD,EAAM4G,EAAQk2D,IAM1Dg9Z,EAAiBj/d,UAAU2le,8BAAgC,SAAUzza,EAAQ1S,EAAWr6C,EAAM4G,EAAQjL,GAClG,IAEI+ke,EAFAn6c,EAAOwmC,EAAOuta,WAAWt6d,EAAK+C,IAGlC,GAAkC,IAA9BwjB,EAAKm0c,KAAK7gd,SAAS5d,QAAgBN,EAAI,EAAG,CAC1C+ke,EAAWn6c,EAAKm0c,KAAK7gd,SAAS,GAC1B+iC,MAAMmQ,EAAOuta,WAAWoG,GAAU3E,aAClChva,EAAOuta,WAAWoG,GAAU3E,UAAYhva,EAAO3E,UAAUs4a,GAAU1kb,WAAWvmC,OAElF,IAAI4pB,EAAe,IAAN1jC,EAAU,GAAK,GACgB,IAAxCoxD,EAAOhzB,YAAY/7B,QAAQ,QAClB+uD,EAAO3E,UAAUs4a,GAAUh1d,QAAUqhD,EAAOuta,WAAWoG,GAAU3E,UAAY,EACjFhva,EAAOyta,gBAAkBn7b,EAAS,EAG9B0tB,EAAO3E,UAAUs4a,GAAUp1d,QAChCyhD,EAAOuta,WAAWoG,GAAU3E,UAAY,EAAKhva,EAAOwta,kBAAoBl7b,EAAU,EAE1F5/B,KAAKkhe,2BAA2B5za,EAAQ/sD,EAAM4G,EAAQyzC,QAGlD9zB,EAAKm0c,KAAK7gd,SAAS5d,OAAS,EACxBN,EAAI,EACJ8D,KAAKkhe,2BAA2B5za,EAAQ/sD,EAAM4G,EAAQyzC,GAGtD56C,KAAK8ge,uCAAuCxza,EAAQ/sD,EAAM4G,EAAQyzC,GAGnC,IAA9B9zB,EAAKm0c,KAAK7gd,SAAS5d,OACpBN,EAAI,EACJ8D,KAAKkhe,2BAA2B5za,EAAQ/sD,EAAM4G,EAAQyzC,GAGtD56C,KAAK8ge,uCAAuCxza,EAAQ/sD,EAAM4G,EAAQyzC,GAItE56C,KAAKkhe,2BAA2B5za,EAAQ/sD,EAAM4G,EAAQyzC,IAIlEy/a,EAAiBj/d,UAAUyle,WAAa,SAAUvza,EAAQ/sD,EAAM4G,EAAQyzC,GACpE,IAAInjB,KACA8oa,EAAavgc,KAAK6qD,UAAUtqD,GAC5Bszd,EAAe7zd,KAAK6qD,UAAU1jD,GAClC,IAA2C,IAAvCmmD,EAAOhzB,YAAY/7B,QAAQ,OAAe,CAC1C,IAAI4ie,EAAsD,IAAtC7za,EAAOhzB,YAAY/7B,QAAQ,OAAegic,EAAWtpZ,aACrEspZ,EAAWjtZ,UACXiH,EAAWh6C,EAAKsL,QAAU1E,EAAO0E,QAAUgod,EAAaj9a,YAAci9a,EAAav8a,WACvF7f,EAAOjzB,KAAK28d,GAAiBp0d,EAAGwzb,EAAWtpZ,aAAalqC,EAAGC,EAAGutC,EAASvtC,GAAKutC,OAE3E,CACG4mb,EAAuD,IAAvC7za,EAAOhzB,YAAY/7B,QAAQ,QAAgBgic,EAAW3pZ,YACtE2pZ,EAAWjpZ,WACXiD,EAAWh6C,EAAK0L,QAAU9E,EAAO8E,QAAU4nd,EAAa58a,aAAe48a,EAAavgb,UACxF7b,EAAOjzB,KAAK28d,GAAiBp0d,EAAG8md,EAAa58a,aAAalqC,EAAGC,EAAGuzb,EAAW3pZ,YAAY5pC,GAAKutC,GAEhGv6C,KAAKohe,sBAAsB3pc,EAAQmjB,IAEvCy/a,EAAiBj/d,UAAU4le,WAAa,SAAU1za,EAAQ/sD,EAAM4G,EAAQyzC,GACpE,IAKIumb,EACA5mb,EACAugb,EACAC,EARAtjc,KAEA8oa,EAAavgc,KAAK6qD,UAAUtqD,GAC5Bszd,EAAe7zd,KAAK6qD,UAAU1jD,GACvBmmD,EAAOuta,WAAWt6d,EAAK+C,KAKS,IAAvCgqD,EAAOhzB,YAAY/7B,QAAQ,QAC3B4ie,EAAiB5ge,EAAK0L,QAAU9E,EAAO8E,QAAWs0b,EAAWtpZ,aAAespZ,EAAWjtZ,UACvFynb,EAAkBzta,EAAOyta,gBAAkB,GAAMx6d,EAAK0L,QAAU9E,EAAO8E,QAAW,GAAK,GACvF6ud,EAAoBxta,EAAOwta,kBAAoB,GAAMv6d,EAAKsL,QAAU1E,EAAO0E,QAAW,GAAK,GAC3F0uC,EAAYh6C,EAAKsL,QAAU1E,EAAO0E,QAAWgod,EAAaj9a,YAAci9a,EAAav8a,WACrF7f,EAAOjzB,KAAK28d,GAAiBp0d,EAAGo0d,EAAcp0d,EAAGC,EAAGm0d,EAAcn0d,EAAI+td,IAAqBhud,EAAGwtC,EAASxtC,EAAI+td,EAAmB9td,EAAGm0d,EAAcn0d,EAAI+td,IAAqBhud,EAAGwtC,EAASxtC,EAAI+td,EAAmB9td,EAAGutC,EAASvtC,GAAKutC,KAG5N4mb,EAAiB5ge,EAAKsL,QAAU1E,EAAO0E,QAAW00b,EAAWjpZ,WAAaipZ,EAAW3pZ,YACrF2D,EAAWh6C,EAAK0L,QAAU9E,EAAO8E,QAAU4nd,EAAa58a,aAAe48a,EAAavgb,UACpFwnb,EAAoBxta,EAAOwta,kBAAoB,GAAMv6d,EAAKsL,QAAU1E,EAAO0E,QAAW,GAAK,GAC3Fkvd,EAAkBzta,EAAOyta,gBAAkB,GAAMx6d,EAAK0L,QAAU9E,EAAO8E,QAAW,GAAK,GACvFwrB,EAAOjzB,KAAK28d,GAAiBp0d,EAAGo0d,EAAcp0d,EAAI+td,EAAmB9td,EAAGm0d,EAAcn0d,IAAOD,EAAGo0d,EAAcp0d,EAAI+td,EAAmB9td,EAAGm0d,EAAcn0d,EAAI+td,IAAqBhud,EAAGwtC,EAASxtC,EAAGC,EAAGm0d,EAAcn0d,EAAI+td,GAAmBxgb,IAE1Ov6C,KAAKohe,sBAAsB3pc,EAAQmjB,IAEvCy/a,EAAiBj/d,UAAUgme,sBAAwB,SAAU3pc,EAAQmjB,GAGjE,IAAK,IADD/N,EADAf,KAEK5vC,EAAI,EAAGA,EAAIu7B,EAAOj7B,OAAS,EAAGN,KACnC2wC,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,IACvE2uB,UAAYwf,GAAMxf,UAAUoC,EAAOv7B,GAAIu7B,EAAOv7B,EAAI,IAC1D2wC,EAAQrwC,OAASq4C,GAAMkG,eAAetjB,EAAOv7B,GAAIu7B,EAAOv7B,EAAI,IAC5D4vC,EAAStnC,KAAKqoC,GAElB+N,EAAU9O,SAAWA,GAEzBuub,EAAiBj/d,UAAU8le,2BAA6B,SAAU5za,EAAQ/sD,EAAM4G,EAAQyzC,GACpF,IAEIjnB,EACAkZ,EAFAf,KAGA+nb,EAAe7zd,KAAK6qD,UAAU1jD,GAC9Bo5b,EAAavgc,KAAK6qD,UAAUtqD,GAChC,OAAQ+sD,EAAOhzB,aACX,IAAK,cACD3G,GAAU5mB,EAAGwzb,EAAWtpZ,aAAalqC,EAAGC,EAAIuzb,EAAWtpZ,aAAajqC,EAAIsgD,EAAOyta,gBAAkB,IACjGlub,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,IACvE2uB,UAAYwf,GAAMxf,UAAUkra,EAAWtpZ,aAActjB,GAC7DkZ,EAAQrwC,OAASq4C,GAAMkG,eAAewlZ,EAAWtpZ,aAActjB,GAC/DmY,EAAStnC,KAAKqoC,GACd,MACJ,IAAK,cACDlZ,GAAU5mB,EAAGwzb,EAAWtpZ,aAAalqC,EAAGC,EAAIuzb,EAAWjtZ,UAAUtmC,EAAIsgD,EAAOyta,gBAAkB,IAC9Flub,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,IACvE2uB,UAAYwf,GAAMxf,UAAUkra,EAAWjtZ,UAAW3f,GAC1DkZ,EAAQrwC,OAASq4C,GAAMkG,eAAewlZ,EAAWjtZ,UAAW3f,GAC5DmY,EAAStnC,KAAKqoC,GACd,MACJ,IAAK,cAMD,GALAlZ,GAAU5mB,EAAIwzb,EAAW3pZ,YAAY7pC,EAAIugD,EAAOyta,gBAAkB,EAAI/td,EAAGuzb,EAAW3pZ,YAAY5pC,GAChG6/B,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,GAC/EmmC,EAAQxX,UAAYwf,GAAMxf,UAAUkra,EAAW3pZ,YAAajjB,GAC5DkZ,EAAQrwC,OAASq4C,GAAMkG,eAAewlZ,EAAW3pZ,YAAajjB,GAC9DmY,EAAStnC,KAAKqoC,GACVgnb,EAAatgc,OAAOvmB,IAAMuzb,EAAWhta,OAAOvmB,EAAG,CAC/C,IAAIiyC,GAAWlyC,EAAIwzb,EAAW3pZ,YAAY7pC,EAAIugD,EAAOyta,gBAAkB,EAAI/td,EAAG6md,EAAav8a,WAAWtqC,IACtG6/B,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,IACvE2uB,UAAYwf,GAAMxf,UAAU1B,EAAOsrB,GAC3CpS,EAAQrwC,OAASq4C,GAAMkG,eAAepnB,EAAOsrB,GAC7CnT,EAAStnC,KAAKqoC,GAElB,MACJ,IAAK,cAMD,GALAlZ,GAAU5mB,EAAIwzb,EAAWjpZ,WAAWvqC,EAAIugD,EAAOyta,gBAAkB,EAAI/td,EAAGuzb,EAAW3pZ,YAAY5pC,GAC/F6/B,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,GAC/EmmC,EAAQxX,UAAYwf,GAAMxf,UAAUkra,EAAWjpZ,WAAY3jB,GAC3DkZ,EAAQrwC,OAASq4C,GAAMkG,eAAewlZ,EAAWjpZ,WAAY3jB,GAC7DmY,EAAStnC,KAAKqoC,GACVgnb,EAAatgc,OAAOvmB,IAAMuzb,EAAWhta,OAAOvmB,EAAG,CAC/C,IAAIq0d,GAAYt0d,EAAIwzb,EAAWjpZ,WAAWvqC,EAAIugD,EAAOyta,gBAAkB,EAAI/td,EAAG6md,EAAav8a,WAAWtqC,IACtG6/B,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,IACvE2uB,UAAYwf,GAAMxf,UAAUgsc,EAASA,GAC7Cx0b,EAAQrwC,OAASq4C,GAAMkG,eAAesmb,EAASA,GAC/Cv1b,EAAStnC,KAAKqoC,IAI1B+N,EAAU9O,SAAWA,GAEzBuub,EAAiBj/d,UAAU0le,uCAAyC,SAAUxza,EAAQ/sD,EAAM4G,EAAQyzC,GAChG,IACIvP,EACAwB,EACAf,KACAy0Z,EAAavgc,KAAK6qD,UAAUtqD,GAC5Bszd,EAAe7zd,KAAK6qD,UAAU1jD,GAClC,OAAQmmD,EAAOhzB,aACX,IAAK,cACD+Q,GAAWt+B,EAAGwzb,EAAWtpZ,aAAalqC,EAAGC,EAAI6md,EAAavgb,UAAUtmC,EAAIsgD,EAAOyta,gBAAkB,IACjGlub,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,IACvE2uB,UAAYwf,GAAMxf,UAAUkra,EAAWtpZ,aAAc5L,GAC7DwB,EAAQrwC,OAASq4C,GAAMkG,eAAewlZ,EAAWtpZ,aAAc5L,GAC/DS,EAAStnC,KAAKqoC,GACd,MACJ,IAAK,cACDxB,GAAWt+B,EAAGwzb,EAAWjtZ,UAAUvmC,EAAGC,EAAI6md,EAAa58a,aAAajqC,EAAIsgD,EAAOyta,gBAAkB,IACjGlub,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,IACvE2uB,UAAYwf,GAAMxf,UAAUkra,EAAWjtZ,UAAWjI,GAC1DwB,EAAQrwC,OAASq4C,GAAMkG,eAAewlZ,EAAWjtZ,UAAWjI,GAC5DS,EAAStnC,KAAKqoC,GACd,MACJ,IAAK,cAMD,GALAxB,GAAWt+B,EAAI8md,EAAav8a,WAAWvqC,EAAIugD,EAAOyta,gBAAkB,EAAI/td,EAAGuzb,EAAW3pZ,YAAY5pC,GAClG6/B,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,GAC/EmmC,EAAQxX,UAAYwf,GAAMxf,UAAUkra,EAAW3pZ,YAAavL,GAC5DwB,EAAQrwC,OAASq4C,GAAMkG,eAAewlZ,EAAW3pZ,YAAavL,GAC9DS,EAAStnC,KAAKqoC,GACVgnb,EAAatgc,OAAOvmB,IAAMuzb,EAAWhta,OAAOvmB,EAAG,CAC/C,IAAIiyC,GAAWlyC,EAAI8md,EAAav8a,WAAWvqC,EAAIugD,EAAOyta,gBAAkB,EAAI/td,EAAG6md,EAAav8a,WAAWtqC,IACvG6/B,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,IACvE2uB,UAAYwf,GAAMxf,UAAUgW,EAAQ4T,GAC5CpS,EAAQrwC,OAASq4C,GAAMkG,eAAe1P,EAAQ4T,GAC9CnT,EAAStnC,KAAKqoC,GAElB,MACJ,IAAK,cAMD,GALAxB,GAAWt+B,EAAI8md,EAAaj9a,YAAY7pC,EAAIugD,EAAOyta,gBAAkB,EAAI/td,EAAGuzb,EAAW3pZ,YAAY5pC,GACnG6/B,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,GAC/EmmC,EAAQxX,UAAYwf,GAAMxf,UAAUkra,EAAWjpZ,WAAYjM,GAC3DwB,EAAQrwC,OAASq4C,GAAMkG,eAAewlZ,EAAWjpZ,WAAYjM,GAC7DS,EAAStnC,KAAKqoC,GACVgnb,EAAatgc,OAAOvmB,IAAMuzb,EAAWhta,OAAOvmB,EAAG,CAC/C,IAAI2mB,GAAU5mB,EAAI8md,EAAaj9a,YAAY7pC,EAAIugD,EAAOyta,gBAAkB,EAAI/td,EAAG6md,EAAav8a,WAAWtqC,IACvG6/B,EAAU,IAAIgJ,GAAkB+E,EAAW,YAAcl0C,KAAM,eAAgB,IACvE2uB,UAAYwf,GAAMxf,UAAUgW,EAAQ1X,GAC5CkZ,EAAQrwC,OAASq4C,GAAMkG,eAAe1P,EAAQ1X,GAC9CmY,EAAStnC,KAAKqoC,IAK1B,OADA+N,EAAU9O,SAAWA,MAGzBuub,EAAiBj/d,UAAUkge,YAAc,SAAUhua,EAAQ/sD,EAAM63F,EAAKh+C,EAAQ+gS,EAAInkR,GAC9E,IAAI96D,EACAmE,EACA2V,EACAD,EACAlK,EACAI,EAGJ,GAFA+J,EAAQzV,EAAKg8C,WAAWvmC,MACxBD,EAASxV,EAAKg8C,WAAWxmC,QACpBxV,EAAKiqc,kBAAmB,CACzB3+b,EAAUyhD,EAAOkta,QACjBvud,EAAUqhD,EAAOmta,QAGU,gBAAvBnta,EAAOhzB,aACPzuB,GAAWyhD,EAAOuta,WAAWt6d,EAAK+C,IAAI0J,EAAIgJ,EAAQ,EAClD/J,GAAWqhD,EAAOuta,WAAWt6d,EAAK+C,IAAIyJ,EAAIqrF,EAAMriF,EAAS,GAE7B,gBAAvBu3C,EAAOhzB,aACZzuB,GAAWyhD,EAAOuta,WAAWt6d,EAAK+C,IAAI0J,EAAIgJ,EAAQ,EAClD/J,GAAWqhD,EAAOuta,WAAWt6d,EAAK+C,IAAIyJ,EAAIqrF,EAAMriF,EAAS,GAE7B,gBAAvBu3C,EAAOhzB,aACZzuB,GAAWyhD,EAAOuta,WAAWt6d,EAAK+C,IAAIyJ,EAAIqrF,EAAMpiF,EAAQ,EACxD/J,GAAWqhD,EAAOuta,WAAWt6d,EAAK+C,IAAI0J,EAAI+I,EAAS,IAGnDlK,GAAWyhD,EAAOuta,WAAWt6d,EAAK+C,IAAIyJ,EAAIqrF,EAAMpiF,EAAQ,EACxD/J,GAAWqhD,EAAOuta,WAAWt6d,EAAK+C,IAAI0J,EAAI+I,EAAS,GAEnDu3C,EAAOuta,aAGPhvd,GAFAsvU,EAAKA,GAAU,EAGflvU,GAFA+qD,EAAKA,GAAU,EAGVh3D,KAAK4gc,cACNrgc,EAAKsL,QAAUA,EACftL,EAAK0L,QAAUA,IAGvB,IAAI2+C,GAAYtnD,GAAI/C,EAAK+C,GAAI62d,YAAatud,EAAUtL,EAAKsL,QAASuud,YAAanud,EAAU1L,EAAK0L,SAC9FqhD,EAAO1C,QAAQpmD,KAAKomD,GACpB,IAAIo+C,OAAO,EAEX,GADAA,KACIhpG,KAAK+zM,SAASzmJ,EAAQ/sD,GACtB,IAAKrE,EAAI,EAAGA,EAAIoxD,EAAOuta,WAAWt6d,EAAK+C,IAAI23d,KAAK7gd,SAAS5d,OAAQN,IAC7DmE,EAAQitD,EAAO3E,UAAU2E,EAAOuta,WAAWt6d,EAAK+C,IAAI23d,KAAK7gd,SAASle,IAClE8D,KAAKs7d,YAAYhua,EAAQjtD,EAAO+3F,GAAO9qC,EAAOuta,WAAWt6d,EAAK+C,IAAIq5d,oBAAsB,GAAIvib,EAAQ+gS,EAAInkR,GACxGgyC,EAAKxkG,KAAKnE,GAGlB,GAAIitD,EAAOuta,WAAWt6d,EAAK+C,IAAI23d,KAAKW,WAAWp/d,OAC3C,IAAKN,EAAI,EAAGA,EAAIoxD,EAAOuta,WAAWt6d,EAAK+C,IAAI23d,KAAKW,WAAWp/d,OAAQN,IAC/DmE,EAAQitD,EAAO3E,UAAU2E,EAAOuta,WAAWt6d,EAAK+C,IAAI23d,KAAKW,WAAW1/d,IACpE8D,KAAKs7d,YAAYhua,EAAQjtD,EAAO+3F,GAAO9qC,EAAOuta,WAAWt6d,EAAK+C,IAAIq5d,oBAAsB,GAAI,KAAMxhJ,EAAInkR,KAK/Gqja,KC5mDPiH,GAAyB,WAKzB,SAASA,IAKLthe,KAAK4gc,aAAc,EAuHvB,OA/GA0gC,EAAQlme,UAAUiX,QAAU,aAQ5Bivd,EAAQlme,UAAU2mC,cAAgB,WAI9B,MAAO,gBAEXu/b,EAAQlme,UAAUw1c,aAAe,SAAUxkZ,EAAOzD,EAAW2xa,EAAY3pB,EAAU1vF,EAAUrnK,GACzF,IAAIwzL,EAEJ,GADAA,EAASptY,KAAKuhe,UAAUn1a,EAAOkua,EAAYr5G,EAAUrnK,EAAMjxJ,GAEvD2xa,EAAW55B,UAAYtzD,OAGvB,IAAK,IAAIhvY,EAAK,EAAGsqY,EAAUt8U,EAAOhuD,EAAKsqY,EAAQlsY,OAAQ4B,IAAM,CAEzD,MADImC,EAAOmoY,EAAQtqY,IACTosc,mBACDjqc,EAAKwwa,SAAYxwa,EAAKwwa,QAAQv0a,QAAQ,CACvC89d,EAAW55B,UAAYngc,EAAK+C,GAC5B,OAKhB,IAAIitY,EAAW5nV,EAAU2xa,EAAW55B,WAChC8gC,EAAiBxhe,KAAKyhe,oBAAoBlxF,EAAU+pF,EAAY3xa,GAChE+4a,KACAC,KACAC,EAAmBr6a,GAAY+ya,EAAW/sa,WAC9Cq0a,EAAmBA,GAAoBr6a,GAAYvnD,KAAKutD,WACxD,IAAK,IAAI1qD,EAAK,EAAGg/d,EAAmBL,EAAgB3+d,EAAKg/d,EAAiBrle,OAAQqG,IAAM,CACpF,IAAItC,EAEO,SADCqhe,EADRrhe,EAAOshe,EAAiBh/d,GACO2+d,GACdE,EAAUl9d,KAAKjE,GAAQohe,EAAWn9d,KAAKjE,GAEhE,IAAImge,EAAiB,IAAI3qc,GAAK,EAAG,EAAG46a,EAAS5jc,EAAG4jc,EAAS3jc,GACzD27C,EAAU2xa,EAAW55B,WAAW70b,QAAU60d,EAAe3zd,EAAI2zd,EAAe1qd,MAAQ,EACpF2yC,EAAU2xa,EAAW55B,WAAWz0b,QAAUy0d,EAAe1zd,EAAI0zd,EAAe3qd,OAAS,EACjF2rd,EAAUlle,QACVwD,KAAK8he,oBAAoB11a,EAAOu1a,EAAYh5a,EAAW2xa,EAAY3pB,EAAU1vF,EAAU,QAEvF0gH,EAAWnle,QACXwD,KAAK8he,oBAAoB11a,EAAOs1a,EAAW/4a,EAAW2xa,EAAY3pB,EAAU1vF,EAAU,UAG9FqgH,EAAQlme,UAAUmme,UAAY,SAAUn1a,EAAOkua,EAAYr5G,EAAUrnK,EAAMjxJ,GACvE,IAAK,IAAIvqD,EAAK,EAAG2je,EAAU31a,EAAOhuD,EAAK2je,EAAQvle,OAAQ4B,IAAM,CACzD,IAAImC,EAAOwhe,EAAQ3je,GACnB,IAAKmC,EAAKiqc,kBAAmB,CACzB,GAAIjqc,EAAKhE,OAASgE,EAAKhE,KAAK0kX,GAAU/zW,aAAe0sM,GAAQr5M,EAAKhE,KAAK0kX,GAAU/zW,aACzEotd,EAAW1gR,MACf,OAAOr5M,EAAK+C,GAEX,IAAK/C,EAAKhE,MAAQgE,EAAK+C,KAAOg3d,EAAW1gR,KAC1C,OAAOr5M,EAAK+C,IAIxB,MAAO,IAEXg+d,EAAQlme,UAAU0me,oBAAsB,SAAU11a,EAAO41a,EAAcr5a,EAAW2xa,EAAY3pB,EAAU1vF,EAAUtuT,GAC9G,IAAIrF,GACJA,GACI5mD,KAAM,mBACNo0d,kBAAmBR,EAAWS,gBAAiBA,gBAAiBT,EAAWQ,kBAC3E3qa,kBAAmBmqa,EAAWnqa,kBAAmBD,oBAAqBoqa,EAAWpqa,oBACjFwwY,UAAW45B,EAAW55B,UAAWrzY,cAAe9F,GAAY+ya,EAAWjta,eAAgBruB,OAAQs7b,EAAWt7b,OAC1G46K,KAAM0gR,EAAW55B,YAEdpma,YAAwB,SAATq4B,EAAmB,cAAgB,cACzD3yD,KAAKwqc,kBAAkBw3B,EAAcr5a,GAAW,IAChC,IAAI0xa,IACVzpB,aAAaxkZ,EAAOzD,EAAW2E,EAAQqjZ,EAAU1vF,GAC3DjhX,KAAKwqc,kBAAkBw3B,EAAcr5a,GAAW,IAEpD24a,EAAQlme,UAAUmyD,UAAY,SAAUzwD,EAAK49d,GASzC,OAPQA,EAAgBn8d,QAAQzB,GACxB,GAAM,EACH,OAGA,SAIfwke,EAAQlme,UAAUovc,kBAAoB,SAAUy3B,EAAet5a,EAAWua,GACtE,IAAK,IAAI9kE,EAAK,EAAG8je,EAAkBD,EAAe7je,EAAK8je,EAAgB1le,OAAQ4B,IAAM,CAEtEuqD,EADEu5a,EAAgB9je,GACDkF,IACvBknc,kBAAoBtnY,IAGjCo+Z,EAAQlme,UAAUqme,oBAAsB,SAAUlhe,EAAM+sD,EAAQ3E,GAC5D,IACI64a,KACJ,GAAIjhe,GAAQA,EAAKuwa,SAASt0a,OACtB,IAAK,IAAI4B,EAAK,EAAGyE,EAAKtC,EAAKuwa,SAAU1ya,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvD,IAAI+je,EAAUt/d,EAAGzE,GACjBoje,EAAeh9d,KAAKmkD,EAAUA,EAAUw5a,GAAS/yD,WAGzD,OAAOoyD,GAEJF,KCpIPc,GAA4B,WAK5B,SAASA,KA2NT,OAnNAA,EAAWhne,UAAUiX,QAAU,aAQ/B+vd,EAAWhne,UAAU2mC,cAAgB,WAIjC,MAAO,cAEXqgc,EAAWhne,UAAUw1c,aAAe,SAAUxkZ,EAAOzD,EAAW2xa,EAAYC,GACxE,IAAIjta,GACA5mD,KAAM4zd,EAAW5zd,KACjBiiD,UAAWA,EAAW6xa,QAAS,EAAGC,QAAS,EAC3CC,mBAAqBC,WAAY,KAAMh1Y,UAAYi1Y,SAAU,EAAGC,cAAgBwH,eAChF/nc,YAAaggc,EAAWhgc,YACxBwgc,kBAAmBR,EAAWQ,kBAAmBC,gBAAiBT,EAAWS,gBAC7E5qa,kBAAmBmqa,EAAWnqa,kBAAmBD,oBAAqBoqa,EAAWpqa,oBACjFwwY,UAAW45B,EAAW55B,UAAW1ha,OAAQs7b,EAAWt7b,OACpDzI,OAAQ+jc,EAAW/jc,OAAQq0B,WAAagvJ,KAAM0gR,EAAW1gR,MAE7D55M,KAAKswQ,SAAShjN,EAAQlB,EAAOzD,EAAW4xa,IAE5C6H,EAAWhne,UAAUk1Q,SAAW,SAAUhjN,EAAQlB,EAAOzD,EAAW4xa,GAEhE,IAAK,IADDh6d,EACKrE,EAAI,EAAGA,EAAIkwD,EAAM5vD,OAAQN,KAC9BqE,EAAO6rD,EAAMlwD,IACHsuc,oBACNl9Y,EAAOuta,WAAWt6d,EAAK+C,IAAMtD,KAAKg7d,gBAAgB1ta,EAAQ/sD,GACrDA,EAAKwwa,SAAYxwa,EAAKwwa,QAAQv0a,QAC/B8wD,EAAOota,gBAAgBl2d,KAAKjE,IAIpC+sD,EAAOssJ,MAAQjxJ,EAAU2E,EAAOssJ,MAChCtsJ,EAAOqta,WAAahya,EAAU2E,EAAOssJ,MAEhCtsJ,EAAOota,gBAAgBl+d,SAC5B8wD,EAAOqta,WAAarta,EAAOota,gBAAgB,GAC3Cpta,EAAOssJ,KAAOtsJ,EAAOqta,WAAWr3d,IAEhCgqD,EAAOqta,aACP36d,KAAK6uc,YAAYvhZ,EAAQA,EAAOqta,WAAY,EAAGhya,GAC/C3oD,KAAKsie,qBAAqBh1a,EAAQA,EAAOqta,WAAY,EAAG,GACxD36d,KAAKuie,eAAej1a,GACpBttD,KAAKwie,wBAAwBl1a,GAC7BttD,KAAKq7d,aAAa/ta,EAAQita,GAC1Bv6d,KAAKs7d,YAAYhua,EAAQA,EAAOqta,WAAYhya,KAGpDy5a,EAAWhne,UAAUyzc,YAAc,SAAUvhZ,EAAQ/sD,EAAMgsH,EAAO5jE,GAC9D,IAAI85a,EAAWn1a,EAAOuta,WAAWt6d,EAAK+C,IACtCgqD,EAAO+0a,YAAY79d,KAAKi+d,GACxBA,EAAShzT,MAAQljD,EACjBk2W,EAAS9B,SAAU,EACnBrza,EAAOsta,SAAWvud,KAAKC,IAAIghD,EAAOsta,SAAUruW,GAC5C,IAAK,IAAI7oG,EAAI,EAAGA,EAAInjB,EAAKuwa,SAASt0a,OAAQknB,IAAK,CAC3C,IAAI/K,EAAOgwC,EAAUA,EAAUpoD,EAAKuwa,SAASptZ,IAAI0rZ,UAC5Cz2Z,EAAK6xb,mBAAsB7xb,EAAKgod,UACjC8B,EAASrod,SAAS5V,KAAKmU,GACvB3Y,KAAK6uc,YAAYvhZ,EAAQ30C,EAAM4zG,EAAQ,EAAG5jE,MAItDy5a,EAAWhne,UAAUkne,qBAAuB,SAAUh1a,EAAQ/sD,EAAMwM,EAAGC,GACnE,IAAI1F,EACAm7d,EAAWn1a,EAAOuta,WAAWt6d,EAAK+C,IACtC,GAAIm/d,EAASrod,SAAS5d,OAAQ,CAC1BwQ,GAAK,IACL,IAAK,IAAI9Q,EAAI,EAAGA,EAAIume,EAASrod,SAAS5d,OAAQN,IAE1C6Q,GADAzF,EAAWtH,KAAKsie,qBAAqBh1a,EAAQm1a,EAASrod,SAASle,GAAI6Q,EAAGC,IACzDD,EACbC,EAAI1F,EAAS0F,EAEjBy1d,EAASrod,SAAWqod,EAASrod,SAAS0V,KAAK,SAAU3wB,EAAM+oQ,GACvD,OAAO56M,EAAOuta,WAAW17d,EAAKmE,IAAIyJ,EAAIugD,EAAOuta,WAAW3yN,EAAK5kQ,IAAIyJ,IAErE,IAAIqT,EAAMktC,EAAOuta,WAAW4H,EAASrod,SAAS,GAAG9W,IAAI8c,IACjD9T,EAAMghD,EAAOuta,WAAW4H,EAASrod,SAASqod,EAASrod,SAAS5d,OAAS,GAAG8G,IAAIgJ,IAQhF,GAPAm2d,EAAS11d,EAAIqT,GAAO9T,EAAM8T,GAAO,EACjCrT,EAAIT,EAAMghD,EAAOwta,kBACjB2H,EAASC,cAAgBp2d,EAAMghD,EAAOwta,kBACtC2H,EAAS11d,GAAK01d,EAASzsd,MAAQ,EAC/Bysd,EAASz1d,GAAKy1d,EAAS1sd,OAAS,EAChC0sd,EAASrid,IAAMA,EACfqid,EAASn2d,IAAMA,EACXm2d,EAAS11d,EAAIqT,GAAOqid,EAAS9B,QAAS,CACtC8B,EAAS11d,EAAIqT,EACbrT,EAAI01d,EAAS11d,EAAI01d,EAASzsd,MAAQ,GAAK1J,EAAM8T,GAAO,EACpDqid,EAAS9B,SAAU,EACnB,IAASzke,EAAI,EAAGA,EAAIume,EAASrod,SAAS5d,OAAQN,IAC1CoL,EAAWtH,KAAKsie,qBAAqBh1a,EAAQm1a,EAASrod,SAASle,GAAI6Q,EAAGC,GAE1Ey1d,EAAS9B,SAAU,EACnB5zd,EAAI01d,EAAS11d,EAAI01d,EAASzsd,MAAQs3C,EAAOwta,kBAG7C/td,EAAIA,GADJT,EAAMghD,EAAOuta,WAAW4H,EAASrod,SAASqod,EAASrod,SAAS5d,OAAS,GAAG8G,IAAIo/d,eAC9Dp2d,EAAMS,EACpBC,GAAK,IACLy1d,EAASz1d,EAAIA,OAGby1d,EAAS11d,EAAIA,EACb01d,EAASz1d,EAAIA,EACby1d,EAASrid,IAAMrT,EACf01d,EAASn2d,IAAMS,EAAI01d,EAASzsd,MAC5BjJ,GAAK01d,EAASzsd,MAAQs3C,EAAOwta,kBAEjC,OAAS/td,EAAGA,EAAGC,EAAGA,IAEtBo1d,EAAWhne,UAAUmne,eAAiB,SAAUj1a,GAC5C,IAAIq1a,KACAvid,EAAM/T,KAAK+T,IAAI9kB,MAAM+Q,KAAMihD,EAAO+0a,YAAY3qc,IAAI,SAAU+qc,GAAY,OAAOA,EAAS11d,KAIxFg5F,EAHM15F,KAAKC,IAAIhR,MAAM+Q,KAAMihD,EAAO+0a,YAAY3qc,IAAI,SAAU+qc,GAC5D,OAAOA,EAAS11d,EAAI01d,EAASzsd,MAAQs3C,EAAOwta,qBAE/B16c,EACjBktC,EAAOq4B,UA0CP,IAAK,IAzCD1mF,EAAU,SAAU/C,GASpB,IAAI0me,KACJD,GATAA,EAASr1a,EAAO+0a,YAAYn4b,OAAO,SAAUu4b,GACzC,OAAIA,EAAShzT,QAAUvzK,EACZume,EAGA,QAIC3yc,KAAK,SAAU+yc,EAAWC,GAAa,OAAOD,EAAU91d,EAAI+1d,EAAU/1d,IACtF61d,EAASxid,IAAMuid,EAAO,GAAG51d,EACzB61d,EAASt2d,IAAMq2d,EAAOA,EAAOnme,OAAS,GAAGuQ,EAAI41d,EAAOA,EAAOnme,OAAS,GAAGwZ,MAAQs3C,EAAOwta,kBACtF8H,EAASG,oBAAsB,EAC/BH,EAAS7sd,OAAS,EAClB,IAAK,IAAIuQ,EAAI,EAAGA,EAAIq8c,EAAOnme,OAAQ8pB,IAC3Bq8c,EAAOr8c,GAAGvQ,OAAS6sd,EAAS7sd,SAC5B6sd,EAAS7sd,OAAS4sd,EAAOr8c,GAAGvQ,QAEhC6sd,EAASG,qBAAuB12d,KAAKC,IAAIq2d,EAAOr8c,GAAGtQ,MAAO2sd,EAAOr8c,GAAGvQ,QAChEuQ,IAAMq8c,EAAOnme,OAAS,IACtBome,EAASG,qBAAuBz1a,EAAOwta,mBAG/C8H,EAAS/sY,cAAgB+sY,EAASt2d,IAAMs2d,EAASxid,IAC7Cwid,EAASG,oBAAsBH,EAAS/sY,gBACxC+sY,EAAS/sY,eAAiB+sY,EAAS/sY,cAAgB+sY,EAASG,qBAAuB,GAEvFH,EAASh2d,OAASg2d,EAAS/sY,eAAiB,EAAIxpF,KAAKmR,IAAMold,EAAS7sd,OACpE6sd,EAASx2a,SACLlwD,EAAI,GACAoxD,EAAOq4B,OAAOzpF,EAAI,GAAG0Q,OAAS0gD,EAAOq4B,OAAOzpF,EAAI,GAAG6Z,QAAU6sd,EAASh2d,SACtEg2d,EAASh2d,OAAS0gD,EAAOq4B,OAAOzpF,EAAI,GAAG0Q,OAAS0gD,EAAOq4B,OAAOzpF,EAAI,GAAG6Z,QAG7E,IAAK,IAAI2N,EAAI,EAAGA,EAAIi/c,EAAOnme,OAAQknB,IAC/Bi/c,EAAOj/c,GAAG46Z,MAAQjya,KAAKE,IAAIo2d,EAAOj/c,GAAG3W,EAAI41d,EAAOj/c,GAAG1N,MAAQ,EAAIoK,GAAO2lF,EACtE68X,EAASx2a,MAAM5nD,KAAKm+d,EAAOj/c,IAE/B4pC,EAAOq4B,OAAOnhF,KAAKo+d,IAEd1me,EAAI,EAAGA,GAAKoxD,EAAOsta,SAAU1+d,IAClC+C,EAAQ/C,IAGhBkme,EAAWhne,UAAUone,wBAA0B,SAAUl1a,GACrD,IAAIssJ,EAAOtsJ,EAAOuta,WAAWvta,EAAOqta,WAAWr3d,IAC/Cs2M,EAAK7sM,EAAI,EACT6sM,EAAK5sM,EAAI,EACT,IAAK,IAAI9Q,EAAI,EAAGA,EAAIoxD,EAAOq4B,OAAOnpF,OAAQN,IACtC,IAAK,IAAIwnB,EAAI,EAAGA,EAAI4pC,EAAOq4B,OAAOzpF,GAAGkwD,MAAM5vD,OAAQknB,IAAK,CACpD,IAAI++c,EAAWn1a,EAAOq4B,OAAOzpF,GAAGkwD,MAAM1oC,GACtC++c,EAAS11d,EAAIV,KAAKyV,IAAqB,IAAjB2gd,EAASnkD,MAAcjya,KAAKmR,GAAK,MAAQ8vC,EAAOq4B,OAAOzpF,GAAG0Q,OAAS0gD,EAAOyta,gBAAkB7+d,GAClHume,EAASz1d,EAAIX,KAAK0V,IAAqB,IAAjB0gd,EAASnkD,MAAcjya,KAAKmR,GAAK,MAAQ8vC,EAAOq4B,OAAOzpF,GAAG0Q,OAAS0gD,EAAOyta,gBAAkB7+d,GAClHoxD,EAAOkta,QAAUnud,KAAK+T,IAAIktC,EAAOkta,QAASiI,EAAS11d,GACnDugD,EAAOmta,QAAUpud,KAAK+T,IAAIktC,EAAOmta,QAASgI,EAASz1d,KAI/Do1d,EAAWhne,UAAUige,aAAe,SAAU/ta,EAAQqjZ,GAClDrjZ,EAAOkta,QAAUlta,EAAOqta,WAAW9ud,SAAW8kc,EAAS5jc,EAAI,EAC3DugD,EAAOmta,QAAUnta,EAAOqta,WAAW1ud,SAAW0kc,EAAS3jc,EAAI,GAE/Do1d,EAAWhne,UAAUkge,YAAc,SAAUhua,EAAQ/sD,EAAMooD,GACvD,IAAI85a,EAAWn1a,EAAOuta,WAAWt6d,EAAK+C,IAClCuI,EAAU42d,EAAS11d,EAAIugD,EAAOkta,QAC9Bvud,EAAUw2d,EAASz1d,EAAIsgD,EAAOmta,QAClCl6d,EAAKsL,SAAWA,EAChBtL,EAAK0L,SAAWA,EAChB,IAAK,IAAI/P,EAAI,EAAGA,EAAIume,EAASrod,SAAS5d,OAAQN,IAAK,CAC/C,IAAIqie,EAAYkE,EAASrod,SAASle,GAClC8D,KAAKs7d,YAAYhua,EAAQ3E,EAAU41a,EAAUj7d,IAAKqlD,KAG1Dy5a,EAAWhne,UAAU4/d,gBAAkB,SAAU1ta,EAAQrvC,GACrD,IAAI6I,KAYJ,OAXAA,EAAKyQ,KAAOtZ,EAAK3a,GACjBwjB,EAAK/Z,EAAI,EACT+Z,EAAK9Z,EAAI,EACT8Z,EAAK1G,IAAM,EACX0G,EAAKxa,IAAM,EACXwa,EAAK9Q,MAAQiI,EAAKs+B,WAAWvmC,MAC7B8Q,EAAK/Q,OAASkI,EAAKs+B,WAAWxmC,OAC9B+Q,EAAK1M,YACL0M,EAAK2oJ,MAAQ,EACb3oJ,EAAKw3Z,MAAQ,EACbx3Z,EAAK65c,SAAU,EACR75c,GAEJs7c,KhYjOPY,GAAgC,WAChC,SAASA,EAAeC,GAIpBjje,KAAKkje,UAAY,EAIjBlje,KAAKmje,UAAY,EAIjBnje,KAAKosD,SACLpsD,KAAKoje,UAAYH,EACjB,IACI1sc,EAAS+oC,GADDt/D,KAAKoje,WAEjBpje,KAAK46B,SAAWrE,EAAOhD,OACvBvzB,KAAKosD,SACA62a,EAAO/D,SAASx6Z,UACjBu+Z,EAAO/D,SAASx6Z,YAEfu+Z,EAAO/D,SAAS9kd,WACjB6od,EAAO/D,SAAS9kd,aAEpBpa,KAAKosD,MAAS62a,EAAO/D,SAAgB,QAAE1kd,OAAOyod,EAAO/D,SAAS9kd,UAQlE,OAHA4od,EAAe5ne,UAAUioe,aAAe,WACpCrje,KAAKoje,UAAUlE,SAAS3rc,OAASvzB,KAAK46B,UAEnCooc,KAMPM,GAAiC,WACjC,SAASA,IACLtje,KAAKuje,OAAS,KACdvje,KAAKwje,cAAgB,GACrBxje,KAAKyje,gBAAkB,IACvBzje,KAAK0je,eAAiB,IACtB1je,KAAK2je,qBAAwB3td,MAAOhW,KAAKwje,cAAeztd,OAAQ/V,KAAKwje,eAIrExje,KAAKixc,aAAe,EAIpBjxc,KAAKkxc,aAAelxc,KAAKuje,OAIzBvje,KAAKgxc,aAAehxc,KAAKyje,gBACzBzje,KAAKixc,aAAejxc,KAAK0je,eAmO7B,OA9NAJ,EAAgBloe,UAAUiX,QAAU,aAKpCixd,EAAgBloe,UAAU2mC,cAAgB,WACtC,MAAO,qBAEXuhc,EAAgBloe,UAAUwoe,cAAgB,SAAUC,GAChD,IAAIC,EAAQ9je,KAAK+je,aACjBD,EAAM5E,SAAS8E,OAASH,EAAmBI,eAAeJ,EAAmBz3a,OAC7E,IAAI83a,EAAgBJ,EAAM5E,SAASiF,WAC/BC,EAAWpke,KAAKqke,kBAAkBH,GAClChld,EAAQkld,EAAS5ne,OACrB0iB,EAAQ7S,KAAK+T,IAAIpgB,KAAKgxc,aAAc9xb,EAAQA,EAAQA,GACpDlf,KAAKske,eAAeF,EAAUN,EAAM5E,SAAS8E,QAC7C,IAAK,IAAI9ne,EAAI,EAAGqoe,EAAUrld,EAAOhjB,EAAIqoe,EAASroe,IAC1C8D,KAAKwke,oBAAoBJ,GACzBpke,KAAKyke,aAAaL,GAEtBpke,KAAK0ke,mBAAmBN,EAAUN,IAEtCR,EAAgBloe,UAAUkpe,eAAiB,SAAUF,EAAUO,GAK3D,IAAK,IAJDC,EAAWv4d,KAAKC,IAAIq4d,EAAWA,EAAS3ud,MAAQ,GAAI2ud,EAAWA,EAAS5ud,OAAS,IACjF8ud,EAAgBD,EAAW,EAA3BC,EAAiCD,EAAW,EAC5CE,EAAe,EAAIz4d,KAAKmR,GAAK4md,EAAS5ne,OACtCuoe,EAASD,EACJ5oe,EAAI,EAAGA,EAAIkoe,EAAS5ne,OAAQN,IAAK,CACtC,IAAI+me,EAASmB,EAASloe,GACN8D,KAAKgle,aAAa/B,GACxBroc,UACN7tB,EAAG83d,EAAaD,EAAWxtc,OAAQ/qB,KAAKyV,IAAIijd,GAAS3ld,QAAQ,IAC7DpS,EAAG63d,EAAaD,EAAWxtc,OAAO/qB,KAAK0V,IAAIgjd,GAAQ3ld,QAAQ,KAE/D2ld,GAAUD,IAMlBxB,EAAgBloe,UAAUk1Q,SAAW,SAAUuzN,GAC3C7je,KAAK+je,aAAeF,EAAmBE,aACvC/je,KAAK4je,cAAcC,IAEvBP,EAAgBloe,UAAUope,oBAAsB,SAAUJ,GAGtD,IAAK,IAFDa,EACAr+D,EACKtgZ,EAAI,EAAGA,EAAI89c,EAAS5ne,OAAQ8pB,IAAK,CAItC,IAAK,IAHD28c,EAASmB,EAAS99c,GAElB8lC,GADJ64a,EAAYjle,KAAKgle,aAAa/B,IACR72a,MACb5e,EAAI,EAAGA,EAAI4e,EAAM5vD,OAAQgxC,IAAK,CAE/B+xB,IADA2la,EAAU94a,EAAM5e,IACWlqC,GAAI8ge,IAC/Bpke,KAAKmle,eAAeF,EAAWjle,KAAKgle,aAAaE,IAGzD,IAAK,IAAIhpe,EAAI,EAAG0gC,EAAWwvB,EAAM5vD,OAAQN,EAAI0gC,KACrCA,EAAW,GADoC1gC,IAAK,CAIxD,IAAIkpe,EAAOple,KAAKgle,aAAa54a,EAAMlwD,IAC/Bmpe,EAAQnpe,EAAI,GAAK0gC,EAAY58B,KAAKgle,aAAa54a,EAAM,IAAMpsD,KAAKgle,aAAc54a,EAAMlwD,EAAI,IACxF0lB,EAAS,IAAMwqC,EAAM5vD,OAAS,EAAK6P,KAAKmR,GAAK,IAC7C8nd,EAAiB,EAAItle,KAAKixc,aAAe5kc,KAAK0V,IAAIH,GACtD5hB,KAAKule,iBAAiBH,EAAMC,EAAMC,GAEtC,IAAK,IAAIj5b,EAAI,EAAGA,EAAI+3b,EAAS5ne,OAAQ6vC,IAAK,CACtC,IAAI64b,EACC3la,IADD2la,EAAUd,EAAS/3b,IACS/oC,GAAI8oD,IAAU84a,EAAQ5he,KAAO2/d,EAAO3/d,KAChEsja,EAAQ5ma,KAAKgle,aAAaE,GAC1Blle,KAAKwle,eAAeP,EAAWr+D,OAK/C08D,EAAgBloe,UAAUqpe,aAAe,SAAUL,GAE/C,IAAK,IADDqB,EAAU,KACLn/c,EAAI,EAAGA,EAAI89c,EAAS5ne,OAAQ8pB,IAAK,CACtC,IAAI28c,EAASmB,EAAS99c,GAElBo/c,GADJD,EAAUzle,KAAKgle,aAAa/B,IACNroc,SACtB8qc,EAAQ34d,GAAKV,KAAK+T,IAAIqld,EAAQvC,UAAWlje,KAAK2je,oBAAoB3td,OAClE0vd,EAAQ14d,GAAKX,KAAK+T,IAAIqld,EAAQtC,UAAWnje,KAAK2je,oBAAoB5td,QAClE0vd,EAAQvC,UAAY,EACpBuC,EAAQtC,UAAY,EACpBsC,EAAQ7qc,SAAW8qc,IAG3BpC,EAAgBloe,UAAUspe,mBAAqB,SAAUN,EAAUN,GAI/D,IAAK,IADDb,EAFA0C,GAAU3vd,MAAOohB,OAAOC,UAAWthB,OAAQqhB,OAAOC,WAClDouc,EAAU,KAELn/c,EAAI,EAAGA,EAAI89c,EAAS5ne,OAAQ8pB,IAAK,CACtC28c,EAASmB,EAAS99c,GAElB,IAAIs/c,GACA74d,GAFJ04d,EAAUzle,KAAKgle,aAAa/B,IAEbroc,SAAS7tB,EAAIk2d,EAAO1mb,WAAWvmC,MAAQ,EAClDhJ,EAAGy4d,EAAQ7qc,SAAS5tB,EAAIi2d,EAAO1mb,WAAWxmC,OAAS,GAEvD4vd,EAAM3vd,MAAQ3J,KAAK+T,IAAIuld,EAAM3vd,MAAO4vd,EAAW74d,GAC/C44d,EAAM5vd,OAAS1J,KAAK+T,IAAIuld,EAAM5vd,OAAQ6vd,EAAW54d,GAErD,IAASsZ,EAAI,EAAGA,EAAI89c,EAAS5ne,OAAQ8pB,IAAK,CACtC28c,EAASmB,EAAS99c,IAEds/c,GADJH,EAAUzle,KAAKgle,aAAa/B,IACHroc,UACd7tB,GAAK44d,EAAM3vd,OAAS8td,EAAM5E,SAAStkc,SAAWkpc,EAAM5E,SAAStkc,SAAS7tB,EAAI,GACrF64d,EAAW54d,GAAK24d,EAAM5vd,QAAU+td,EAAM5E,SAAStkc,SAAWkpc,EAAM5E,SAAStkc,SAAS5tB,EAAI,GACtFy4d,EAAQ7qc,SAAWgrc,EACnBH,EAAQpC,iBAGhBC,EAAgBloe,UAAUipe,kBAAoB,SAAUD,GAGpD,IAAK,IAFDyB,KAEKzne,EAAK,EAAGC,EADNC,OAAOhB,KAAK8me,GACShme,EAAKC,EAAO7B,OAAQ4B,IAAM,CACtD,IAAIkoB,EAAIjoB,EAAOD,GACf,GAAIgme,EAAS99c,GAAI,CACb,IAAI28c,EAASmB,EAAS99c,GAClB2+c,EAAY,IAAIjC,GAAeC,GACnCA,EAAO/D,SAASztd,IAAMwzd,EACtBY,EAAYrhe,KAAKy+d,IAGzB,OAAO4C,GAKXvC,EAAgBloe,UAAU4pe,aAAe,SAAU/B,GAC/C,OAAOA,EAAO/D,SAASztd,KAE3B6xd,EAAgBloe,UAAUoqe,eAAiB,SAAUM,EAAUC,GAC3D,GAAgB,MAAZA,GAAgC,MAAZD,EAAxB,CAGA,IAAI9wb,EAAWh1C,KAAKgme,cAAcF,EAASlrc,SAAUmrc,EAASnrc,UAC1DhZ,EAAQ5hB,KAAKime,UAAUH,EAASlrc,SAAUmrc,EAASnrc,UACnD0qc,EAAsC,GAApBtle,KAAKixc,aACvBj8Z,EAAWswb,GACXtle,KAAKkme,UAAUlxb,EAAUswb,EAAgB1jd,EAAOmkd,KAGxDzC,EAAgBloe,UAAU6qe,UAAY,SAAUrqJ,EAAKC,GACjD,IAAIh6T,EAAU,EACVskd,EAAKtqJ,EAAI9uU,EAAI6uU,EAAI7uU,EACjBq5d,EAAKvqJ,EAAI7uU,EAAI4uU,EAAI5uU,EA6BrB,OA5BW,IAAPm5d,EAEItkd,EADAukd,GAAM,EACK,EAAM/5d,KAAKmR,GAAM,EAGlBnR,KAAKmR,GAAK,EAGZ,IAAP4od,EAEDvkd,EADAskd,EAAK,EACK95d,KAAKmR,GAGL,GAIdqE,EAAUxV,KAAKg6d,KAAKD,EAAKD,GACrBA,EAAK,GAAKC,EAAK,EACfvkd,EAAUxV,KAAKmR,GAAKqE,EAEfskd,EAAK,GAAKC,EAAK,EACpBvkd,EAAUxV,KAAKmR,GAAKqE,EAEfskd,EAAK,GAAKC,EAAK,IACpBvkd,EAAU,EAAMxV,KAAKmR,GAAKqE,IAG3BA,GAEXyhd,EAAgBloe,UAAU4qe,cAAgB,SAAUpqJ,EAAKC,GACrD,IAAIrgT,EAAI,EACJ2/S,EAAKU,EAAI9uU,EAAI6uU,EAAI7uU,EACjBiqD,EAAK6kR,EAAI7uU,EAAI4uU,EAAI5uU,EACjB6zC,EAAKs6R,EAAKA,EAAOnkR,EAAKA,EAI1B,OAHInW,EAAI,IACJrlB,EAAInvB,KAAKQ,KAAKg0C,IAEXrlB,GAEX8nc,EAAgBloe,UAAUmqe,iBAAmB,SAAUO,EAAUC,EAAUT,GACvE,IAAItwb,EAAWh1C,KAAKgme,cAAcF,EAASlrc,SAAUmrc,EAASnrc,UAC1DhZ,EAAQ5hB,KAAKime,UAAUH,EAASlrc,SAAUmrc,EAASnrc,UACnDoa,EAAWswb,GACXtle,KAAKkme,UAAUlxb,EAAUswb,EAAgB1jd,EAAOmkd,IAMxDzC,EAAgBloe,UAAUw1c,aAAe,SAAU3P,EAAgB50Y,EAAYi6a,EAAiB39a,EAAW2E,EAAQqjZ,IAC3F,IAAI41B,IACV31B,aAAa3P,EAAgB50Y,EAAYi6a,EAAiB39a,EAAW2E,EAAQqjZ,IAE/F2yB,EAAgBloe,UAAU+pe,eAAiB,SAAUW,EAAUC,GAC3D,IAAI/wb,EAAWh1C,KAAKgme,cAAcF,EAASlrc,SAAUmrc,EAASnrc,UAC1DhZ,EAAQ5hB,KAAKime,UAAUH,EAASlrc,SAAUmrc,EAASnrc,WACnDoa,EAAWh1C,KAAKixc,cAAgBj8Z,EAAWh1C,KAAKixc,eAChDjxc,KAAKkme,UAAUlxb,EAAUh1C,KAAKixc,aAAcrvb,EAAOmkd,IAG3DzC,EAAgBloe,UAAU8qe,UAAY,SAAUlxb,EAAUwxb,EAAS5kd,EAAOmkd,GACtE,IAAI7md,EAAQ6md,EAAS35a,MAAM5vD,OACvBA,EAASw4C,EAAWwxb,EACpB5mc,EAAS5/B,KAAKkxc,cAAgBhyb,EAAQA,GAAS7S,KAAKQ,KAAKqS,GAC7D,GAAe,IAAX1iB,EAAc,CACd,IACIiqe,EADYjqe,EAASojC,EAErB/zB,EAAUQ,KAAKyV,IAAIF,GAAS6kd,EAC5Bx6d,EAAUI,KAAK0V,IAAIH,GAAS6kd,EAChCV,EAAS7C,WAAar3d,EACtBk6d,EAAS5C,WAAal3d,IAGvBq3d,KAGPiD,GAAoC,WACpC,SAASA,IACLvme,KAAK0me,gBACL1me,KAAK2me,wBACL3me,KAAK4me,gBACL5me,KAAK6me,eA4aT,OAvaAN,EAAmBnre,UAAUw1c,aAAe,SAAU3P,EAAgB50Y,EAAYi6a,EAAiB39a,EAAW2E,EAAQqjZ,GAClH3wc,KAAK2oD,UAAYA,EACjB3oD,KAAKosD,MAAQ60Y,EACbjhc,KAAKqsD,WAAaA,EAClB,IAAIy6a,EAAgB7lC,EAChB6lC,EAActqe,OAAS,IACvBwD,KAAK+me,oBAAsB96a,GAAY66a,EAAc,KAEzD,IAAK,IAAI1oe,EAAK,EAAG4oe,EAAmB/lC,EAAgB7ic,EAAK4oe,EAAiBxqe,OAAQ4B,IAAM,CACpF,IACI6oe,OAAkB,GACtBA,EAFI1me,EAAOyme,EAAiB5oe,IAGZ8ge,YAChB+H,EAAgB/H,SAASgI,UAAY,OACrClne,KAAK4me,aAAapie,KAAKyie,GAE3B,IAAK,IAAIpke,EAAK,EAAG+xc,EAAevoZ,EAAYxpD,EAAK+xc,EAAap4c,OAAQqG,IAAM,CACxE,IACIske,OAAuB,GAC3BA,EAFgBvyB,EAAa/xc,IAGRq8d,YACrBiI,EAAqBjI,SAASgI,UAAY,YAC1Clne,KAAK4me,aAAapie,KAAK2ie,GAE3Bnne,KAAKone,cAAcpne,KAAK4me,aAAcN,GAEtC,IAAK,IADDe,EAAcrne,KAAKike,eAAe6C,GAC7B5qe,EAAI,EAAGA,EAAI4qe,EAActqe,OAAQN,IAAK,CAC3C,IAAIqE,EAAOume,EAAc5qe,GACrBore,GAAS32B,EAAS5jc,EAAIs6d,EAAYrxd,OAAS,EAC3CgpB,EAASsuB,EAAOtuB,WACpBA,EAEOxyB,KAAOwyB,EAAOxyB,MAAQ,EAC7BwyB,EAAOvyB,MAAQuyB,EAAOvyB,OAAS,EAC/BuyB,EAAOtyB,IAAMsyB,EAAOtyB,KAAO,EAC3BsyB,EAAOryB,OAASqyB,EAAOryB,QAAU,EAC7B2gD,EAAOtuB,OAAOxyB,OACdwyB,EAAOxyB,KAAO8gD,EAAOtuB,OAAOxyB,MAE5B8gD,EAAOtuB,OAAOtyB,MACdsyB,EAAOtyB,IAAM4gD,EAAOtuB,OAAOtyB,KAE/B,IAAIyuU,EAAM56U,EAAK2+d,SAASztd,IAAImpB,SAAS7tB,GAAKxM,EAAKsL,QAAWtL,EAAKg8C,WAAWvmC,MAAQ,GAC9Eqxd,EAAYt6d,EAAIu6d,EAAQtoc,EAAOxyB,KAC/BwqD,EAAMz2D,EAAK2+d,SAASztd,IAAImpB,SAAS5tB,GAAKzM,EAAK0L,QAAW1L,EAAKg8C,WAAWxmC,OAAS,GAAMsxd,EAAYr6d,EAAIgyB,EAAOtyB,IAChHnM,EAAKsL,SAAWsvU,EAChB56U,EAAK0L,SAAW+qD,SACTz2D,EAAK2+d,SAEhB,OAAO,GAKXqH,EAAmBnre,UAAU6oe,eAAiB,SAAUsD,GACpDA,EAASA,EAAOlme,QAIhB,IAAK,IADDd,EAFA2yB,EAAO,KACPuxY,EAAQ,KAEHvoa,EAAI,EAAGA,EAAIqre,EAAO/qe,OAAQN,IAAK,CAEpC,IAAIq6B,EAAS+oC,GADb/+D,EAAOgne,EAAOrre,IAEdg3B,EAAO,IAAI6C,GAAKx1B,EAAK2+d,SAASztd,IAAMlR,EAAK2+d,SAASztd,IAAImpB,SAAS7tB,EAAIwpB,EAAOxpB,EAAGxM,EAAK2+d,SAASztd,IAAMlR,EAAK2+d,SAASztd,IAAImpB,SAAS5tB,EAAIupB,EAAOvpB,EAAGzM,EAAKg8C,WAAWvmC,MAAOzV,EAAKg8C,WAAWxmC,QAE7K0uZ,EADAA,EACQA,EAAM1kX,UAAU7sB,GAGhBA,EAGhB,OAAOuxY,GAEX8hE,EAAmBnre,UAAUgse,cAAgB,SAAUI,EAAelB,GAClEtme,KAAKyne,oBAAoBD,GACzB,IAAIxnO,EAAawnO,EAAchre,OAC/B,GAAIwjQ,EAAa,EAAG,CAIhB,IAAK,IAHD0nO,KACAt7a,KACAu7a,KACKt7b,EAAI,EAAGA,EAAIm7b,EAAchre,OAAQ6vC,IAAK,CAC3C,IAAIyqb,EAAK0Q,EAAcn7b,QACSnxC,IAA5B47d,EAAGoI,SAAS0I,cACZ9Q,EAAGoI,SAAS0I,aAAc,GAEA,cAA1B9Q,EAAGoI,SAASgI,WAA8BpQ,EAAGoI,SAAS0I,YAGvB,cAA1B9Q,EAAGoI,SAASgI,UACjBQ,EAAelje,KAAKsyd,GAGpB6Q,EAAYnje,KAAKsyd,GANjB1qa,EAAM5nD,KAAKsyd,GAWnB,IAFA1qa,EAAQA,EAAM5xC,OAAOmtd,GACrBv7a,EAAQs7a,EAAeltd,OAAO4xC,GACvB4zM,EAAahgQ,KAAK6ne,iBAAiB7ne,KAAK6me,cAE3C,GADA7me,KAAK8ne,mBAAmB17a,GACC,MAArBpsD,KAAK+je,aAAT,CAGAuC,EAAgBh2N,SAAStwQ,MACzBA,KAAK+je,aAAe,KACpB/je,KAAK0me,gBACL,IAAK,IAAItoe,EAAK,EAAGyE,EAAK7C,KAAK2me,qBAAsBvoe,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACnDyE,EAAGzE,GACT8ge,SAAS0I,aAAc,GAGzC5ne,KAAK6me,YAAc,KACnB7me,KAAK+je,aAAe,KAExB,OAAO,GAEXwC,EAAmBnre,UAAU0se,mBAAqB,SAAU17a,GACxD,IAAK,IAAIlwD,EAAI,EAAGA,EAAIkwD,EAAM5vD,OAAQN,IAAK,CACnC,IAAIqE,EAAO6rD,EAAMlwD,GACjB,IAAKqjE,GAAmBh/D,EAAK+C,GAAItD,KAAK6me,aAAc,CAC5Ctme,GACAP,KAAK+ne,YAAYxne,GAErB,SAIZgme,EAAmBnre,UAAU2se,YAAc,SAAUxne,GACjD,IAAIyne,EAAYzne,EACgB,cAA5BA,EAAK2+d,SAASgI,UACdlne,KAAKioe,iBAAiB1ne,GAEJ,MAAbyne,GACDhoe,KAAKkoe,QAAQ3ne,EAAM,YACnBP,KAAKkoe,QAAQ3ne,EAAM,YACfP,KAAKmoe,yBAAyBH,IAC9Bhoe,KAAK+je,cAAiB7E,aACtBl/d,KAAK+je,aAAa7E,SAASkJ,WAAa,GACxCpoe,KAAK+je,aAAa7E,SAASmJ,UAAY,GACvCroe,KAAKsoe,qBAAqBN,IAG1Bhoe,KAAK+je,aAAexje,IAKpCgme,EAAmBnre,UAAUkte,qBAAuB,SAAUN,GAC1D,IAAIlE,EAAQ9je,KAAK+je,aACZD,EAAM5E,SAASiF,aAChBL,EAAM5E,SAASiF,eAEnB,IAAI5je,EAAOyne,EACX,GAAY,MAARzne,GAAgBP,KAAKkoe,QAAQ3ne,EAAM,UAAW,CAC9C,IAAIwR,EAAWxR,EAAK+C,GACpB,GAAKtD,KAAKuoe,mBAAmBzE,EAAM5E,SAASiF,WAAY5je,GAKnD,CACD,IAAI6ie,EAAYU,EAAM5E,SAASiF,WAAWpyd,GACtCqxd,EAAUlE,SAASsJ,QACnBpF,EAAUlE,SAASsJ,OAAQ,EAC3Bxoe,KAAKyoe,sBAAsBrF,GAC3Bpje,KAAK0oe,iBAAiBV,QAViC,CAC3D,IAAI/E,EAASjje,KAAK2oe,aAAapoe,GAC/BP,KAAKyoe,sBAAsBxF,GAC3Bjje,KAAK0oe,iBAAiBV,MAYlCzB,EAAmBnre,UAAUste,iBAAmB,SAAUV,GACtDhoe,KAAK4oe,kBAAkBZ,EAAW,WAClChoe,KAAK4oe,kBAAkBZ,EAAW,aAEtCzB,EAAmBnre,UAAUwte,kBAAoB,SAAUZ,EAAWa,GAClE,IAAIvwC,KACuB,YAAvBuwC,EACAvwC,EAAQ0vC,EAAUj3D,QAEU,aAAvB83D,IACLvwC,EAAQ0vC,EAAUl3D,UAEtB,IAAK,IAAI50a,EAAI,EAAGA,EAAIo8b,EAAM97b,OAAQN,IAAK,CACnC,IAAIyc,EAAO3Y,KAAK2oD,UAAU2vY,EAAMp8b,IAChC,GAAI8D,KAAKkoe,QAAQvvd,EAAM,UAAW,CAC9B,IAAImwd,EAAW9oe,KAAK2oD,UAAUhwC,EAAKo5B,UAC/Bg3b,EAAS/oe,KAAK2oD,UAAUhwC,EAAKy2Z,UACN,YAAvBy5D,GAAgD,MAAZC,GACpCvpa,GAAmBupa,EAASxle,GAAItD,KAAKosD,OACrCpsD,KAAKsoe,qBAAqBtoe,KAAK2oD,UAAUhwC,EAAKo5B,WAElB,aAAvB82b,GAA+C,MAAVE,GAC1Cxpa,GAAmBwpa,EAAOzle,GAAItD,KAAKosD,QACnCpsD,KAAKsoe,qBAAqBtoe,KAAK2oD,UAAUhwC,EAAKy2Z,cAK9Dm3D,EAAmBnre,UAAUqte,sBAAwB,SAAUrF,GAC3Dpje,KAAKgpe,oBAAoB5F,GACzBpje,KAAKipe,qBAAqB7F,IAE9BmD,EAAmBnre,UAAUmte,mBAAqB,SAAUzre,EAAKose,GAE7D,IAAK,IADD5re,EAAOgB,OAAOhB,KAAKR,GACdZ,EAAI,EAAGA,EAAIoB,EAAKd,OAAQN,IAC7B,GAAIoB,EAAKpB,KAAOgte,EAAO5le,GACnB,OAAO,EAGf,OAAO,GAEXije,EAAmBnre,UAAUyse,iBAAmB,SAAU/qe,GAEtD,OADWwB,OAAOhB,KAAKR,GACXN,QAEhB+pe,EAAmBnre,UAAU6te,qBAAuB,SAAU7F,GAG1D,IAAK,IAFDU,EAAQ9je,KAAK+je,aACbiE,EAAY5E,EACP/2b,EAAI,EAAGA,EAAI27b,EAAUl3D,SAASt0a,OAAQ6vC,IAAK,CAChD,IAAI1zB,EAAO3Y,KAAK2oD,UAAUq/a,EAAUl3D,SAASzkY,IAC7C,IAAK1zB,EAAKumd,SAAS0I,YAAa,CAC5B,IAAIrne,EAAOP,KAAK2oD,UAAUhwC,EAAKy2Z,UAC/B,GAAI7vW,GAAmBh/D,EAAK+C,GAAItD,KAAKosD,QAAkB,MAAR7rD,GAAgBA,EAAK+2B,QAAS,CACzE,IAAI6xc,OAAiB,EAChBnpe,KAAKuoe,mBAAmBzE,EAAM5E,SAASiF,WAAY5je,GAKpD4oe,EAAiBrF,EAAM5E,SAASiF,WAAW5je,EAAK+C,KAJhD6le,EAAiBnpe,KAAK2oe,aAAapoe,IACpB2+d,SAASsJ,OAAQ,EAK/BpF,EAAUlE,SAAS9kd,WACpBgpd,EAAUlE,SAAS9kd,aAElB+ud,EAAejK,SAASx6Z,UACzByka,EAAejK,SAASx6Z,YAE5B1kE,KAAKope,QAAQD,EAAejK,SAASx6Z,QAAS0+Z,GAC1Cpje,KAAKqpe,SAASjG,EAAUlE,SAAS9kd,SAAU+ud,EAAe7le,IAAM,GAChE8/d,EAAUlE,SAAS9kd,SAAS5V,KAAK2ke,OAMrD5C,EAAmBnre,UAAU4te,oBAAsB,SAAU5F,GAGzD,IAAK,IAFDU,EAAQ9je,KAAK+je,aACbiE,EAAY5E,EACP/2b,EAAI,EAAGA,EAAI27b,EAAUj3D,QAAQv0a,OAAQ6vC,IAAK,CAC/C,IAAI1zB,EAAO3Y,KAAK2oD,UAAUq/a,EAAUj3D,QAAQ1kY,IAC5C,IAAK1zB,EAAKumd,SAAS0I,YAAa,CAC5B,IAAIrne,EAAOP,KAAK2oD,UAAUhwC,EAAKo5B,UAC/B,GAAIwtB,GAAmBh/D,EAAK+C,GAAItD,KAAKosD,QAAkB,MAAR7rD,GAAgBA,EAAK+2B,QAAS,CACzE,IAAI2rc,OAAS,EACRjje,KAAKuoe,mBAAmBzE,EAAM5E,SAASiF,WAAY5je,GAKpD0ie,EAASa,EAAM5E,SAASiF,WAAW5je,EAAK+C,KAJxC2/d,EAASjje,KAAK2oe,aAAapoe,IACpB2+d,SAASsJ,OAAQ,EAKvBpF,EAAUlE,SAASx6Z,UACpB0+Z,EAAUlE,SAASx6Z,YAElBu+Z,EAAO/D,SAAS9kd,WACjB6od,EAAO/D,SAAS9kd,aAEpBpa,KAAKope,QAAQnG,EAAO/D,SAAS9kd,SAAUgpd,GACnCpje,KAAKqpe,SAASjG,EAAUlE,SAASx6Z,QAASu+Z,EAAO3/d,IAAM,GACvD8/d,EAAUlE,SAASx6Z,QAAQlgE,KAAKy+d,OAMpDsD,EAAmBnre,UAAUgue,QAAU,SAAUpgY,EAAMzoG,GACnD,IAAI+mV,EAAStnV,KAAKqpe,SAASrgY,EAAMzoG,EAAK+C,IAClCgkV,GAAU,GAAKA,EAASt+O,EAAKxsG,OAC7BwsG,EAAKs+O,GAAU/mV,EAGfyoG,EAAKxkG,KAAKjE,IAGlBgme,EAAmBnre,UAAUiue,SAAW,SAAUrgY,EAAMsgY,GACpD,IAAIhiJ,GAAU,EACd,GAAY,MAARt+O,GAA6B,KAAbsgY,EAChB,IAAK,IAAIpte,EAAI,EAAGqte,EAAUvgY,EAAKxsG,OAAQN,EAAIqte,EAASrte,IAAK,CACrD,IAAI+me,EAASj6X,EAAK9sG,GAClB,GAAwB,oBAAY+me,IAAWqG,EAAU,CACrDhiJ,EAASprV,EACT,MAEC,GAAc,MAAV+me,GAAkBA,EAAO3/d,KAAOgme,EAAU,CAC/ChiJ,EAASprV,EACT,OAIZ,OAAOorV,GAEXi/I,EAAmBnre,UAAUute,aAAe,SAAUpoe,GAClD,IAAIuje,EAAQ9je,KAAK+je,aACZD,EAAM5E,SAASiF,aAChBL,EAAM5E,SAASiF,eAEnB,IAAIlB,EAAS1ie,EACb,GAAa,MAATuje,EAAe,CACfA,EAAM5E,SAASiF,WAAWlB,EAAO3/d,IAAM2/d,EACvC,IAAIuG,EAAaxpe,KAAK+me,oBACJ,MAAdyC,GAAsBjpe,EAAK+C,KAAOkme,EAAWlme,KAC7CtD,KAAK+me,oBAAsB9D,GAGnC,OAAOA,GAEXsD,EAAmBnre,UAAU+se,yBAA2B,SAAUlF,GAC9D,IAAIwG,GAAsB,EAU1B,OATaxG,EAAc,QAAEzod,OAAOyod,EAAOnyD,UACjCt0a,OAAS,IACQ,MAAlByme,EAAOlyD,SAAqBkyD,EAAOlyD,QAAQv0a,OAAS,IACrDite,EAAsBzpe,KAAK0pe,qBAAqBzG,EAAOlyD,QAAS,cAE9D04D,GAA4C,MAAnBxG,EAAOnyD,UAAsBmyD,EAAOnyD,SAASt0a,OAAS,IACjFite,EAAsBzpe,KAAK0pe,qBAAqBzG,EAAOnyD,SAAU,YAGlE24D,GAEXlD,EAAmBnre,UAAUsue,qBAAuB,SAAUC,EAAsBC,GAEhF,IAAK,IADDH,GAAsB,EACjBvte,EAAI,EAAGA,EAAIyte,EAAqBnte,OAAS,EAAGN,IAAK,CACtD,IAAIyc,EAAO3Y,KAAK2oD,UAAUghb,EAAqBzte,IAC/C,GAAK8D,KAAKkoe,QAAQvvd,EAAM,aAGnBA,EAAKumd,SAAS0I,cAAyC,aAAxBgC,GAAuE,MAAjC5pe,KAAK2oD,UAAUhwC,EAAKo5B,WAC9D,WAAxB63b,GAAqE,MAAjC5pe,KAAK2oD,UAAUhwC,EAAKy2Z,YAAqB,CACjFq6D,GAAsB,EACtB,OAGR,OAAOA,GAEXlD,EAAmBnre,UAAU6se,iBAAmB,SAAU1ne,GACtD,IAAIspe,EAAWtpe,EACf,GAAgB,MAAZspe,IAAqBA,EAAS3K,SAAS0I,aAAe5ne,KAAKkoe,QAAQ3ne,EAAM,UAAW,CACpFP,KAAKkoe,QAAQ3ne,EAAM,YACnB,IAAIuoe,EAAW9oe,KAAK2oD,UAAUkhb,EAAS93b,UACnCg3b,EAAS/oe,KAAK2oD,UAAUkhb,EAASz6D,UACrB,MAAZ05D,EACA9oe,KAAK+ne,YAAYe,GAEF,MAAVC,EACL/oe,KAAK+ne,YAAYgB,GAGjB/oe,KAAK+je,aAAexje,IAIhCgme,EAAmBnre,UAAU8se,QAAU,SAAU4B,EAAWC,GACxD,IACIxpe,EAAOupe,EAMX,MALwB,WAApBC,GAAiCxpe,EAAK+2B,SACjCt3B,KAAKuoe,mBAAmBvoe,KAAK6me,YAAatme,KAC3CP,KAAK6me,YAAYtme,EAAK+C,IAAM/C,KAG/BA,EAAK+2B,SAKdivc,EAAmBnre,UAAUqse,oBAAsB,SAAUr7a,GAGzD,IAAK,IAFD49a,KACAC,KACK3jd,EAAI,EAAGA,EAAI8lC,EAAM5vD,OAAQ8pB,IACQ,cAAhC8lC,EAAM9lC,GAAG44c,SAASgI,WACpB8C,EAAOxle,KAAK4nD,EAAM9lC,IAG1B,GAAI0jd,EAAOxte,OAAS,EAGhB,IAFAyte,EAAazle,KAAKwle,EAAO,IACzBhqe,KAAK0me,aAAalie,KAAKwle,EAAO,IACvBC,EAAazte,OAAS,GAAG,CAC5B,IAAIq/C,EAAQoub,EAAaA,EAAazte,OAAS,GAC3C8U,EAAatR,KAAKkqe,uBAAuBrub,GAC7C,GAAIvqC,EAAW9U,OAAS,EAAG,CACvB,IAAI6D,EAAQiR,EAAW,GACnB64d,EAAc74d,EAAWA,EAAW9U,OAAS,GAC7C+iE,GAAmBl/D,EAAMiD,GAAItD,KAAK0me,eAClCyD,EAAYjL,SAAS0I,aAAc,EACnC5ne,KAAK2me,qBAAqBnie,KAAK2le,KAG/BF,EAAazle,KAAKnE,GAClBL,KAAK0me,aAAa/9c,OAAO,EAAG,EAAGtoB,SAInC4pe,EAAapkU,QAK7B0gU,EAAmBnre,UAAU8ue,uBAAyB,SAAUx9d,GAC5D,IAAI4E,KACJ,GAAI5E,EAAIoka,SAASt0a,OAAS,EAAG,CACzB,IAAK,IAAIN,EAAI,EAAGA,EAAIwQ,EAAIoka,SAASt0a,OAAQN,IAAK,CAC1C,IAAIkue,EAAMpqe,KAAK2oD,UAAUj8C,EAAIoka,SAAS50a,IACtC,IAAKqjE,GAAmB6qa,EAAI9me,GAAItD,KAAK0me,cAAe,CAChD,IAAIqC,EAAS/oe,KAAK2oD,UAAUyhb,EAAIh7D,UAMhC,OALc,MAAV25D,GACAz3d,EAAW9M,KAAKuke,GAEpBz3d,EAAW9M,KAAK4le,GAChBpqe,KAAK0me,aAAa/9c,OAAO,EAAG,EAAGyhd,GACxB94d,GAGf,OAAOA,EAEX,OAAOA,GAEJi1d,KiYhtBP8D,GAAyC,WAKzC,SAASA,KAyBT,OAjBAA,EAAwBjve,UAAUiX,QAAU,aAQ5Cg4d,EAAwBjve,UAAU2mC,cAAgB,WAI9C,MAAO,2BAEXsoc,EAAwBjve,UAAUk1Q,SAAW,SAAUlkN,EAAOzD,EAAW2E,EAAQqjZ,IAC7E,IAAI25B,IAAyBh6N,SAASlkN,EAAOzD,EAAW2E,EAAQqjZ,IAE7D05B,KAMPC,GAAwC,WACxC,SAASA,IACLtqe,KAAK2oD,aACL3oD,KAAKuqe,eAAiB,IAAIC,GAo1B9B,OA/0BAF,EAAuBlve,UAAUqve,aAAe,SAAUlqe,EAAMxD,EAAOgQ,EAAGC,EAAGgJ,EAAOD,GAMhF,OAHIhZ,MAAOA,EAAO2te,UAFD39d,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,GAEbwhB,KAAMx6B,EAAOite,QAAQ,EACvDj5D,QAASxwa,EAAKwwa,QAAQ1va,QAASyva,SAAUvwa,EAAKuwa,SAASzva,UAQ/Dipe,EAAuBlve,UAAUuve,SAAW,SAAUpqe,GAClD,IAAI+3b,KACJ,GAAI/3b,EAAM,CACN,IAAK,IAAIrE,EAAI,EAAGqE,EAAKwwa,QAAQv0a,OAAS,GAAKN,EAAIqE,EAAKwwa,QAAQv0a,OAAQN,IAChEo8b,EAAM9zb,KAAKxE,KAAK2oD,UAAUpoD,EAAKwwa,QAAQ70a,KAE3C,IAASA,EAAI,EAAGqE,EAAKuwa,SAASt0a,OAAS,GAAKN,EAAIqE,EAAKuwa,SAASt0a,OAAQN,IAClEo8b,EAAM9zb,KAAKxE,KAAK2oD,UAAUpoD,EAAKuwa,SAAS50a,KAGhD,OAAOo8b,GAKXgyC,EAAuBlve,UAAUwve,UAAY,SAAUC,GAInD,IAAK,IAHDC,KACAC,EAAO,KACPC,GAAW,IACN5se,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKute,GAAWzse,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAM/D,IAAK,IAJD2pE,EAAO8ia,EADHhoe,EAAGzE,IAEP6se,EAAQjre,KAAK2qe,SAAS5ia,GACtB+oW,EAAW,EACXC,EAAU,EACLzqZ,EAAI,EAAGA,EAAI2kd,EAAMzue,OAAQ8pB,IAAK,CACzBtmB,KAAKkre,mBAAmBD,EAAM3kd,IAAI,GACpCiR,OAASwwC,EAAKxwC,KAClBu5Y,IAGAC,IAGQ,IAAZA,GAAiBD,EAAW,GAC5Bg6D,EAAMtme,KAAKujE,GAEf,IAAIic,EAAO8sV,EAAWC,EAClB/sV,EAAOgnZ,IACPA,EAAUhnZ,EACV+mZ,EAAOhja,GAMf,OAHqB,IAAjB+ia,EAAMtue,QAAwB,MAARuue,GACtBD,EAAMtme,KAAKume,GAERD,GAMXR,EAAuBlve,UAAU8ve,mBAAqB,SAAUvyd,EAAMrc,GAClE,IAAI6ue,EAAgBnre,KAAK2oD,UAAUhwC,EAAKy2Z,UACpC9ya,IACA6ue,EAAgBnre,KAAK2oD,UAAUhwC,EAAKo5B,WAExC,IAAK,IAAI71C,EAAI,EAAGA,EAAI8D,KAAK6qe,SAASrue,OAAQN,IACtC,GAAI8D,KAAK6qe,SAAS3ue,GAAGq7B,OAAS4zc,EAAc7ne,GACxC,OAAOtD,KAAK6qe,SAAS3ue,GAG7B,OAAO,MAMXoue,EAAuBlve,UAAUgwe,SAAW,SAAUpB,EAAQqB,EAAU1yd,EAAM2yd,EAAaC,EAAmBC,GAC1G,GAAc,MAAVxB,EAAgB,CAChB,IAAIyB,EAAWzB,EAAOzyc,KACtB,GAAuB,MAAlBi0c,GAA4D,MAA5BA,EAAeC,GAAoB,CACvC,MAAzBH,EAAYG,KACZH,EAAYG,GAAYzB,GAEN,MAAlBwB,UACOA,EAAeC,GAI1B,IAAK,IAFDnzC,EAAQt4b,KAAK2qe,SAASX,GACtB0B,KACKxve,EAAI,EAAGA,EAAIo8b,EAAM97b,OAAQN,IAC9Bwve,EAAaxve,GAAK8D,KAAKkre,mBAAmB5yC,EAAMp8b,IAAI,KAAU8te,EAElE,IAAS9te,EAAI,EAAGA,EAAIo8b,EAAM97b,OAAQN,IAC9B,IAAKmve,GAAYK,EAAaxve,GAAI,CAG9B,IAAK,IAFDovC,EAAOtrC,KAAKkre,mBAAmB5yC,EAAMp8b,IAAKwve,EAAaxve,IACvDyve,EAAW,EACNjod,EAAI,EAAGA,EAAI40a,EAAM97b,OAAQknB,IAC9B,GAAIA,IAAMxnB,EAAV,CAII,IAAI0ve,EAAYF,EAAahod,GACb1jB,KAAKkre,mBAAmB5yC,EAAM50a,IAAKkod,KACjCtgc,IACVsgc,EACAD,IAGAA,KAKZA,GAAY,IACZL,EAActre,KAAKore,SAAS9/b,EAAM+/b,EAAU/yC,EAAMp8b,GAAIove,EAAaC,EAAmBC,UAMlG,GAA6B,MAAzBF,EAAYG,GAEZ,IAASvve,EAAI,EAAGA,EAAIqve,EAAkB/ue,OAAQN,IAAK,CAC/C,IAAI2nH,EAAO0nX,EAAkBrve,GAC7B,GAAsB,MAAlB2nH,EAAK4nX,GAAmB,CACxB,IAAK,IAAIrte,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKumH,GAAOzlH,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC3D,IAAIf,EAAMwF,EAAGzE,GACbkte,EAAYjue,GAAOwmH,EAAKxmH,GAI5B,OADAkue,EAAkB5id,OAAOzsB,EAAG,GACrBove,IAM3B,OAAOA,GAKXhB,EAAuBlve,UAAU6oe,eAAiB,SAAU73a,GACxDA,EAAQA,EAAM/qD,QAGd,IAAK,IAFD6xB,EAAO,KACPuxY,EAAQ,KACHvoa,EAAI,EAAGA,EAAIkwD,EAAM5vD,OAAQN,IAE9B,GADAg3B,EAAOk5B,EAAMlwD,GAAGwue,SACZjmE,EAAO,CACP,IAAIh4Z,EAAQJ,KAAKC,IAAIm4Z,EAAM13Z,EAAI03Z,EAAMzuZ,MAAOkd,EAAKnmB,EAAImmB,EAAKld,OACtDrJ,EAASN,KAAKC,IAAIm4Z,EAAMz3Z,EAAIy3Z,EAAM1uZ,OAAQmd,EAAKlmB,EAAIkmB,EAAKnd,QAC5D0uZ,EAAM13Z,EAAIV,KAAK+T,IAAIqkZ,EAAM13Z,EAAGmmB,EAAKnmB,GACjC03Z,EAAMz3Z,EAAIX,KAAK+T,IAAIqkZ,EAAMz3Z,EAAGkmB,EAAKlmB,GACjCy3Z,EAAMzuZ,MAAQvJ,EAAQg4Z,EAAM13Z,EAC5B03Z,EAAM1uZ,OAASpJ,EAAS83Z,EAAMz3Z,OAG9By3Z,GAAU13Z,EAAGmmB,EAAKnmB,EAAGC,EAAGkmB,EAAKlmB,EAAGgJ,MAAOkd,EAAKld,MAAOD,OAAQmd,EAAKnd,QAGxE,OAAO0uZ,GAMX6lE,EAAuBlve,UAAUk1Q,SAAW,SAAUlkN,EAAOzD,EAAW2xa,EAAY3pB,GAChF3wc,KAAK2oD,UAAYA,EACjB,IAAI2E,GACAwta,kBAAmBR,EAAWQ,kBAAmBC,gBAAiBT,EAAWS,gBAC7Ezgc,YAAaggc,EAAWhgc,YAAa2xT,QAASquI,EAAWt7b,OAAOxyB,KAAM2/U,QAASmuI,EAAWt7b,OAAOtyB,KAE1E,gBAAvB4gD,EAAOhzB,YACPgzB,EAAO6+R,SAAWmuI,EAAWt7b,OAAOtyB,IAER,gBAAvB4gD,EAAOhzB,cACZgzB,EAAO2+R,SAAWquI,EAAWt7b,OAAOxyB,MAExCxM,KAAK6qe,YAEL,IAAK,IADDgB,KACK3ve,EAAI,EAAGA,EAAIkwD,EAAM5vD,OAAQN,IAAK,CACnC,IAAIqE,EAAOP,KAAKyqe,aAAar+a,EAAMlwD,GAAIkwD,EAAMlwD,GAAGoH,GAAI,EAAG,EAAG8oD,EAAMlwD,GAAGqgD,WAAWvmC,MAAOo2C,EAAMlwD,GAAGqgD,WAAWxmC,QACzG/V,KAAK6qe,SAASrme,KAAKjE,GACnBsre,EAAgBtre,EAAKg3B,MAAQh3B,EAEjC,IACIure,EADAP,KAEJO,EAAiB9re,KAAK4qe,UAAUiB,GAChC,IAAS3ve,EAAI,EAAGA,EAAI4ve,EAAetve,OAAQN,IAAK,CAC5C,IAAI6ve,KACJR,EAAkB/me,KAAKune,GACvB/re,KAAKore,SAASU,EAAe5ve,IAAI,EAAM,KAAM6ve,EAAWR,EAAmBM,GAG1E,IADDj4W,GAAUq4N,QAAS,EAAGE,QAAS,GACnC,IAASjwV,EAAI,EAAGA,EAAIqve,EAAkB/ue,OAAQN,IAAK,CAC3C6ve,EAAYR,EAAkBrve,GAElC,IAAK,IADDg2K,KACK9zK,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKyue,GAAY3te,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAChE,IAAIf,EAAMwF,EAAGzE,GACb8zK,EAAI1tK,KAAKune,EAAU1ue,IAEvB,IAAIgvB,EAAQ,IAAI2/c,GAAiBhse,KAAMkyK,EAAK45T,EAAgBx+a,GAC5DttD,KAAKise,WAAW5/c,GAChBrsB,KAAKkse,cAAc7/c,GACnBrsB,KAAKmse,cAAc9/c,GACnBunG,EAAQ5zH,KAAKose,eAAe//c,EAAOunG,EAAMq4N,QAASr4N,EAAMu4N,SAIvD,IAFDk7I,EAAcrne,KAAKike,eAAejke,KAAK6qe,UACvCvD,GAAS32B,EAAS5jc,EAAIs6d,EAAYrxd,OAAS,EAC/C,IAAS9Z,EAAI,EAAGA,EAAI8D,KAAK6qe,SAASrue,OAAQN,IAAK,CAC3C,IAAImwe,EAASrse,KAAK6qe,SAAS3ue,GAC3B,GAAImwe,EAAQ,CACR,IAAIC,EAAQtse,KAAK2oD,UAAU0jb,EAAO90c,MAClC+0c,EAAMzge,QAAU,EAChByge,EAAMrge,QAAU,EAEhB,IAAIkvU,EAAMkxJ,EAAO3B,SAAS39d,GAAKu/d,EAAMzge,QAAWyge,EAAM/vb,WAAWvmC,MAAQ,GAAOs3C,EAAO2+R,QACnFj1R,EAAMq1a,EAAO3B,SAAS19d,GAAKs/d,EAAMrge,QAAWqge,EAAM/vb,WAAWxmC,OAAS,GAAOu3C,EAAO6+R,QACpFp/U,EAAIouU,EACJnuU,EAAIgqD,EACmB,gBAAvB1J,EAAOhzB,YACPttB,EAAIq6d,EAAYtxd,OAASihD,EAEG,gBAAvB1J,EAAOhzB,cACZvtB,EAAIs6d,EAAYrxd,MAAQmlU,GAE5BpuU,GAAKu6d,EACLgF,EAAMzge,SAAWkB,EAAIu/d,EAAMzge,QAC3Byge,EAAMrge,SAAWe,EAAIs/d,EAAMrge,WAOvCq+d,EAAuBlve,UAAUgxe,eAAiB,SAAU//c,EAAO4/T,EAASE,GACxE,IAAIigJ,EAAiBpse,KAAKuse,qBAAqBtgJ,EAASE,EAAS7rV,OAAQ+rB,GAIzE,OAHA+/c,EAAe//c,MAAQA,EACvB+/c,EAAeI,gBAAkB,KACjCxse,KAAKyse,sBAAsBL,IAEvBngJ,QAASmgJ,EAAengJ,QAAU5/T,EAAMihC,OAAOwta,kBAC/C3uI,QAASigJ,EAAejgJ,QAAU9/T,EAAMihC,OAAOyta,kBAMvDuP,EAAuBlve,UAAUmxe,qBAAuB,SAAUtgJ,EAASE,EAAS7rV,EAAQ+rB,GACxF,IAAIqgd,KAaJ,MAZiC,gBAA7Brgd,EAAMihC,OAAOhzB,aAA8D,gBAA7BjO,EAAMihC,OAAOhzB,aAC3Doyc,EAAgB5R,kBAAoBzuc,EAAMihC,OAAOwta,kBACjD4R,EAAgB3R,gBAAkB1uc,EAAMihC,OAAOyta,kBAG/C2R,EAAgB5R,kBAAoBzuc,EAAMihC,OAAOyta,gBACjD2R,EAAgB3R,gBAAkB1uc,EAAMihC,OAAOwta,mBAEnD4R,EAAgBpyc,YAAc,QAE9Boyc,EAAgBzgJ,QAAUygJ,EAAgBzgJ,QAAUA,EACpDygJ,EAAgBvgJ,QAAUugJ,EAAgBvgJ,QAAUA,EAC7CugJ,GAKXpC,EAAuBlve,UAAUuxe,oBAAsB,SAAUD,EAAiB5I,EAAOz3c,GACrF,IAAIk5B,GAAe,EAC8B,gBAA7Cmnb,EAAgBrgd,MAAMihC,OAAOhzB,aAA8E,gBAA7Coyc,EAAgBrgd,MAAMihC,OAAOhzB,cAC3FirB,GAAe,GAEnB,IAAI55C,GAAU+ge,EAAgB3R,gBAC1B6R,EAAsB,EAC1BF,EAAgBG,aAChBH,EAAgBI,cAChB,IAAK,IAAIC,EAAY1gd,EAAM2gd,QAASD,GAAa,EAAGA,IAAa,CAI7D,IAAK,IAHDE,EAAc,EACdnvO,EAAOzxO,EAAM6gd,MAAMH,GACnBI,EAAc5nb,EAAemnb,EAAgBvgJ,QAAUugJ,EAAgBzgJ,QAClE/vV,EAAI,EAAGA,EAAI4hQ,EAAKthQ,OAAQN,IAAK,CAClC,IAAIqE,EAAOu9P,EAAK5hQ,GAChB,GAAI8D,KAAKuqe,eAAe6C,SAAS7se,GAAO,CACpC,IAAIype,EAASzpe,EACb,GAAIype,EAAOjia,OAASiia,EAAOjia,KAAKgpW,SAAWi5D,EAAOjia,KAAK+oW,UAAW,CAC9D,IAAIh0a,EAAMkD,KAAK2oD,UAAUqhb,EAAOjia,KAAKxwC,MACrCyyc,EAAOh0d,MAAQlZ,EAAIy/C,WAAWvmC,MAC9Bg0d,EAAOj0d,OAASjZ,EAAIy/C,WAAWxmC,OAC/Bk3d,EAAc5ge,KAAKC,IAAI2ge,EAAc1nb,EAAeykb,EAAOh0d,MAAQg0d,EAAOj0d,cAI9E,GAAIxV,EAAM,CACN,IAAIoY,EAAOpY,EACP8se,EAAW,EACG,MAAd10d,EAAK2/a,QACL+0C,EAAW10d,EAAK2/a,MAAM97b,QAE1B+D,EAAKyV,MAAyB,IAAhBq3d,EAAW,GAG7B9nb,IACKhlD,EAAKwV,SACNxV,EAAKwV,OAAS,IAItBo3d,IAAgB5nb,EAAehlD,EAAKwV,OAASxV,EAAKyV,OAAS,EAC3DhW,KAAKste,MAAM/se,EAAMwse,EAAWI,IAAa5nb,GACzCvlD,KAAKute,gBAAgBhte,EAAMwse,EAAWI,IACtCA,IAAiB5nb,EAAehlD,EAAKwV,OAASxV,EAAKyV,OAAS,EAAO02d,EAAgB5R,mBACjE4R,EAAgBF,kBAC9BE,EAAgBF,gBAAkBW,EAClCT,EAAgBc,WAAaT,GAEjCL,EAAgBG,UAAUE,GAAaI,EAE3CT,EAAgBI,WAAWC,GAAaphe,EACxC,IAAI8he,EAAqBR,EAAc,EAAML,EAAsB,EAAMF,EAAgB3R,gBACzF6R,EAAsBK,EACc,UAAhCP,EAAgBpyc,aAA2D,SAAhCoyc,EAAgBpyc,YAC3D3uB,GAAU8he,EAGV9he,GAAU8he,EAEd,IAASvxe,EAAI,EAAGA,EAAI4hQ,EAAKthQ,OAAQN,IAAK,CAClC,IAAI6rE,EAAO+1L,EAAK5hQ,GAChB8D,KAAKste,MAAMvla,EAAMgla,EAAWphe,GAAQ45C,MAQhD+kb,EAAuBlve,UAAUmye,gBAAkB,SAAUhte,EAAM6vE,EAAOrzE,GAClEiD,KAAKuqe,eAAe6C,SAAS7se,GAC7BA,EAAKw6B,KAAK,GAAKh+B,EAGfwD,EAAKw6B,KAAKq1C,EAAQ7vE,EAAKmte,QAAU,GAAK3we,GAO9Cute,EAAuBlve,UAAUkye,MAAQ,SAAU/se,EAAM6vE,EAAOrzE,EAAO4we,GAC/Dpte,GAAQA,EAAKwnE,OACTxnE,EAAKwnE,KAAKgpW,SAAWxwa,EAAKwnE,KAAK+oW,SAC3B68D,EACApte,EAAKyM,EAAE,GAAKjQ,EAGZwD,EAAKwM,EAAE,GAAKhQ,EAIZ4we,EACApte,EAAKyM,EAAEojE,EAAQ7vE,EAAKmte,QAAU,GAAK3we,EAGnCwD,EAAKwM,EAAEqjE,EAAQ7vE,EAAKmte,QAAU,GAAK3we,IAQnDute,EAAuBlve,UAAUwye,gBAAkB,SAAUC,EAAOd,EAAWjJ,EAAOz3c,GAClF,IAAIk5B,GAAe,EACoB,gBAAnCsob,EAAMxhd,MAAMihC,OAAOhzB,aAAoE,gBAAnCuzc,EAAMxhd,MAAMihC,OAAOhzB,cACvEirB,GAAe,GAKnB,IAAK,IAHDu4M,EAAOzxO,EAAM6gd,MAAMH,GACnBe,EAAY,EACZX,GAAe5nb,EAAesob,EAAM1hJ,QAAU0hJ,EAAM5hJ,UAAY4hJ,EAAMrB,gBAAkBqB,EAAMhB,UAAUE,IAAc,EACjH7we,EAAI,EAAGA,EAAI4hQ,EAAKthQ,OAAQN,IAAK,CAClC,IAAIqE,EAAOu9P,EAAK5hQ,GAChB,GAAI8D,KAAKuqe,eAAe6C,SAAS7se,GAAO,CACpC,IAAIzD,EAAMkD,KAAK2oD,UAAUpoD,EAAKwnE,KAAKxwC,MACnCh3B,EAAKyV,MAAQlZ,EAAIy/C,WAAWvmC,MAC5BzV,EAAKwV,OAASjZ,EAAIy/C,WAAWxmC,OAC7B+3d,EAAYzhe,KAAKC,IAAIwhe,EAAWvte,EAAKwV,YAEpC,CACD,IAAI4C,EAAOpY,EACP8se,EAAW,EACG,MAAd10d,EAAK2/a,QACL+0C,EAAW10d,EAAK2/a,MAAM97b,QAEtB+oD,EACAhlD,EAAKwV,OAA0B,IAAhBs3d,EAAW,GAG1B9se,EAAKyV,MAAyB,IAAhBq3d,EAAW,GAGjC,IAAIh+c,GAAQk2B,EAAehlD,EAAKwV,OAASxV,EAAKyV,OAAS,EACvDm3d,GAAe99c,EACfrvB,KAAKste,MAAM/se,EAAMwse,EAAWI,IAAa5nb,GACzCvlD,KAAKute,gBAAgBhte,EAAMwse,EAAWI,GACtCA,GAAgB99c,EAAOw+c,EAAM/S,oBAMrCwP,EAAuBlve,UAAU2ye,cAAgB,SAAUrB,EAAiBsB,EAAQ3hd,GAChFrsB,KAAK2se,oBAAoBD,EAAiBsB,EAAQ3hd,GAElD,IAAK,IAAInwB,EAAIwwe,EAAgBc,WAAYtxe,GAAK,EAAGA,IACzCA,EAAImwB,EAAM2gd,SACVhte,KAAK4te,gBAAgBlB,EAAiBxwe,EAAG8xe,EAAQ3hd,GAGzD,IAASnwB,EAAIwwe,EAAgBc,WAAa,EAAGtxe,GAAKmwB,EAAM2gd,QAAS9we,IACzDA,EAAI,GACJ8D,KAAK4te,gBAAgBlB,EAAiBxwe,EAAG8xe,EAAQ3hd,IAQ7Di+c,EAAuBlve,UAAU6ye,WAAa,SAAU1te,EAAM2te,GAE1D,GAAiB,MAAbA,GAAsC,MAAjB3te,EAAK4te,UAA0C,MAAtBD,EAAUC,UACrD5te,EAAK4te,SAAS3xe,OAAS0xe,EAAUC,SAAS3xe,OAAQ,CACrD,GAAI+D,EAAK4te,WAAaD,EAAUC,SAC5B,OAAO,EAEX,GAAqB,MAAjB5te,EAAK4te,UAAqC,MAAjB5te,EAAK4te,SAC9B,OAAO,EAEX,IAAK,IAAIjye,EAAI,EAAGA,EAAIqE,EAAK4te,SAAS3xe,OAAQN,IACtC,GAAIqE,EAAK4te,SAASjye,KAAOgye,EAAUC,SAASjye,GACxC,OAAO,EAGf,OAAO,EAEX,OAAO,GAKXoue,EAAuBlve,UAAUgze,mBAAqB,SAAUrma,EAAMsma,GAClE,IAAID,KAKJ,OAJAA,EAAmBrma,KAAOA,GAAc,KACxCqma,EAAmBC,cAAgBA,GAAgC,EACnED,EAAmBzN,SAAU,EAC7ByN,EAAmBE,UAAY,KACxBF,GAKX9D,EAAuBlve,UAAUmze,QAAU,SAAU7B,EAAiBrgd,GAIlE,IAAK,IAHDmid,KACA92c,GAAQA,QACRomO,KACK5hQ,EAAI,EAAGA,GAAKmwB,EAAM2gd,QAAS9we,IAAK,CACrC4hQ,EAAK5hQ,GAAKmwB,EAAM6gd,MAAMhxe,GACtB,IAAK,IAAIwnB,EAAI,EAAGA,EAAIo6O,EAAK5hQ,GAAGM,OAAQknB,IAAK,CACrC,IAAInjB,EAAOu9P,EAAK5hQ,GAAGwnB,GACf+qd,EAAczue,KAAKoue,mBAAmB7te,EAAMrE,GAChDuye,EAAYH,UAAY5qd,EACxB+qd,EAAY9N,SAAU,EACtB6N,EAAShqe,KAAKiqe,GACdpid,EAAMqid,uBAAuBh3c,EAAKn3B,EAAMkue,GAAa,IAM7D,IAHA,IAAIE,EAA6B,GAAlBH,EAAShye,OACpB0iB,EAAQ,EAELsvd,EAAShye,OAAS,GAAK0iB,GAASyvd,GAAU,CAC7C,IAAIC,EAAcJ,EAAStqZ,QACvBnc,EAAO6ma,EAAY7ma,KACnBgla,EAAY6B,EAAYP,cACxBC,EAAYM,EAAYN,UACxBO,EAA0B7ue,KAAKuqe,eAAeuE,yBAAyB/ma,EAAMgla,GAC7EgC,EAA8B/ue,KAAKuqe,eAAeuE,yBAAyB/ma,EAAMgla,GAAW,GAC5FiC,EAAqBH,EAAwBrye,OAC7Cyye,EAAqBF,EAA4Bvye,OACjD0ye,EAAkBlve,KAAKmve,aAAazC,EAAiBmC,EAAyB9B,EAAY,GAC1FqC,EAAsBpve,KAAKmve,aAAazC,EAAiBqC,EAA6BhC,EAAY,GAClGsC,EAAyBL,EAAqBC,EAC9ChgO,EAAkBjvQ,KAAKuqe,eAAe+E,gBAAgBvna,EAAMgla,GAC5DwC,EAAatgO,EACbogO,EAAyB,IACzBE,GAAcL,EAAkBF,EAAqBI,EAAsBH,GAAsBI,GAErG,IAAInW,GAAkB,EAClB1ud,OAAYtP,EAChB,GAAIq0e,EAAatgO,EApBL,EAqBR,GAAkB,IAAdq/N,EACA9je,EAAY+ke,EACZrW,GAAkB,MAEjB,CACD,IAAIsW,EAAW1xO,EAAKivO,GAAWuB,EAAY,GACvCx+Q,EAAY9vN,KAAKuqe,eAAe+E,gBAAgBE,EAAUzC,IAC9Dj9Q,EAAYA,EAAY0/Q,EAASx5d,MAAQ,EAAI02d,EAAgB+C,iBAAmB1na,EAAK/xD,MAAQ,GAC7Eu5d,GACZ/ke,EAAY+ke,EACZrW,GAAkB,GAEbppQ,EAAY9vN,KAAKuqe,eAAe+E,gBAAgBvna,EAAMgla,GAjC3D,IAkCAvie,EAAYslN,EACZopQ,GAAkB,QAIzB,GAAIqW,EAAatgO,EAvCV,EAuCuC,CAE/C,GAAIq/N,IADWxwO,EAAKivO,GAAWvwe,OACF,EACzBgO,EAAY+ke,EACZrW,GAAkB,MAEjB,CACD,IAAIwW,EAAY5xO,EAAKivO,GAAWuB,EAAY,GACxCv+Q,EAAa/vN,KAAKuqe,eAAe+E,gBAAgBI,EAAW3C,IAChEh9Q,EAAaA,EAAa2/Q,EAAU15d,MAAQ,EAAI02d,EAAgB+C,iBAAmB1na,EAAK/xD,MAAQ,GAC/Eu5d,GACb/ke,EAAY+ke,EACZrW,GAAkB,GAEbnpQ,EAAa/vN,KAAKuqe,eAAe+E,gBAAgBvna,EAAMgla,GArD5D,IAsDAvie,EAAYulN,EACZmpQ,GAAkB,IAI1BA,IACAl5d,KAAKute,gBAAgBxla,EAAMgla,EAAWvie,GAEtCxK,KAAK2ve,eAAenB,EAAU92c,EAAKm3c,EAAyBxid,GAC5DrsB,KAAK2ve,eAAenB,EAAU92c,EAAKq3c,EAA6B1id,IAEhErsB,KAAKuqe,eAAe6C,SAASwB,EAAY7ma,QACzC6ma,EAAYjO,SAAU,GAE1Bzhd,MAMRord,EAAuBlve,UAAUu0e,eAAiB,SAAUnB,EAAU92c,EAAK2S,EAAYhe,GACnF,IAAK,IAAInwB,EAAI,EAAGA,EAAImuC,EAAW7tC,OAAQN,IAAK,CACxC,IAAI0ze,EAAgBvlc,EAAWnuC,GAC3B2ze,EAAuBxjd,EAAMyjd,uBAAuBp4c,EAAKk4c,GACjC,MAAxBC,IACqC,IAAjCA,EAAqBlP,UACrBkP,EAAqBlP,SAAU,EAC/B6N,EAAShqe,KAAKqre,MAQ9BvF,EAAuBlve,UAAU+ze,aAAe,SAAUzC,EAAiBqD,EAAgBhD,GACvF,GAA8B,IAA1BgD,EAAevze,OACf,OAAO,EAGX,IAAK,IADDwze,KACK9ze,EAAI,EAAGA,EAAI6ze,EAAevze,OAAQN,IACvC8ze,EAAa9ze,GAAK8D,KAAKuqe,eAAe+E,gBAAgBS,EAAe7ze,GAAI6we,GAK7E,GAHAiD,EAAalgd,KAAK,SAAUG,EAAGC,GAC3B,OAAOD,EAAIC,IAEX6/c,EAAevze,OAAS,GAAM,EAC9B,OAAOwze,EAAa3je,KAAKmT,MAAMuwd,EAAevze,OAAS,IAGvD,IAAIyze,EAAcF,EAAevze,OAAS,EAG1C,OAFiBwze,EAAaC,EAAc,GAC1BD,EAAaC,IACM,GAM7C3F,EAAuBlve,UAAUqxe,sBAAwB,SAAUC,GAC/D,IAAInnb,GAAe,EAC8B,gBAA7Cmnb,EAAgBrgd,MAAMihC,OAAOhzB,aAA8E,gBAA7Coyc,EAAgBrgd,MAAMihC,OAAOhzB,cAC3FirB,GAAe,GAEnBmnb,EAAgBwD,kBAChB,IAAI7jd,EAAQqgd,EAAgBrgd,MAC5Bk5B,EAAemnb,EAAgByD,cAAgB,EAAMzD,EAAgB0D,cAAgB,EACrFpwe,KAAK+te,cAAcrB,GAAmBrgd,MAAOA,GAASA,GACtDrsB,KAAKuue,QAAQ7B,EAAiBrgd,GAC9B,IAAIgkd,EAAkB,IACjB3D,EAAgB4D,gBACjB5D,EAAgB4D,cAAgB,GAEpC,IAAK,IAAIp0e,EAAI,EAAGA,EAAIwwe,EAAgB4D,cAAep0e,IAAK,CAGpD,IAAKqpD,EAAemnb,EAAgByD,cAAgBzD,EAAgB0D,eAAiBC,EAAiB,CAClG,IAAK,IAAI3sd,EAAI,EAAGA,EAAI2I,EAAM6gd,MAAM1we,OAAQknB,IAEpC,IAAK,IADDo6O,EAAOzxO,EAAM6gd,MAAMxpd,GACd4C,EAAI,EAAGA,EAAIw3O,EAAKthQ,OAAQ8pB,IAAK,CAClC,IAAIyhD,EAAO+1L,EAAKx3O,GAChBtmB,KAAKste,MAAMvla,EAAMrkD,EAAG1jB,KAAKuqe,eAAe+E,gBAAgBvna,EAAMrkD,KAAI6hC,GAG1E8qb,EAAkB9qb,EAAemnb,EAAgByD,cAAgBzD,EAAgB0D,cAErF7qb,EAAemnb,EAAgByD,cAAgB,EAAIzD,EAAgB0D,cAAgB,EAEvFpwe,KAAKuwe,iBAAiB7D,EAAiBrgd,IAK3Ci+c,EAAuBlve,UAAUm1e,iBAAmB,SAAU7D,EAAiBrgd,GAE3E,IAAK,IADDw+c,EAAW7qe,KAAKwwe,UAAUnkd,EAAMokd,cAC3Bv0e,EAAI,EAAGA,EAAI2ue,EAASrue,OAAQN,IACjC8D,KAAK0we,kBAAkBhE,EAAiB7B,EAAS3ue,KAMzDoue,EAAuBlve,UAAUu1e,4BAA8B,SAAUjE,EAAiB3ka,EAAMh7D,EAAGC,GACnF0/d,EAAgBrgd,MAA5B,IACIq+c,EAAW3ia,EAAK2ia,SAChB3re,EAAS,KAOb,OANgB,MAAZ2re,IACA3re,GAAWgO,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAO00d,EAAS10d,MAAOD,OAAQ20d,EAAS30d,QAC3D20d,EAAS39d,IAAMA,GAAK29d,EAAS19d,IAAMA,IACnC+6D,EAAK2ia,SAAW3re,IAGjBA,GAKXure,EAAuBlve,UAAUs1e,kBAAoB,SAAUhE,EAAiB3ka,GAC5E,IAAIxiB,GAAe,EAC8B,gBAA7Cmnb,EAAgBrgd,MAAMihC,OAAOhzB,aAA8E,gBAA7Coyc,EAAgBrgd,MAAMihC,OAAOhzB,cAC3FirB,GAAe,GAEnB,IAAIqrb,EAAW7oa,EAAKA,KAChBvzD,EAAYuzD,EAAKh7D,EAAE,GAAKg7D,EAAK/xD,MAAQ,EACrCvB,EAAYszD,EAAK/6D,EAAE,GAAK+6D,EAAKhyD,OAAS,EAC1C/V,KAAK2we,4BAA4BjE,EAAiBkE,EAAUp8d,EAAWC,GACnE8wC,GACKmnb,EAAgBvgJ,UACjBugJ,EAAgBvgJ,QAAU,GAE9BugJ,EAAgBvgJ,QAAU9/U,KAAKC,IAAIoge,EAAgBvgJ,QAAS13U,EAAYszD,EAAKhyD,UAGxE22d,EAAgBzgJ,UACjBygJ,EAAgBzgJ,QAAU,GAE9BygJ,EAAgBzgJ,QAAU5/U,KAAKC,IAAIoge,EAAgBzgJ,QAASz3U,EAAYuzD,EAAK/xD,SAMrFs0d,EAAuBlve,UAAUo1e,UAAY,SAAUlie,GACnD,IAAI06F,KACJ,GAAI16F,EAAOopB,IACP,IAAK,IAAIt5B,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKgR,EAAOopB,KAAMt5B,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACjE,IAAIf,EAAMwF,EAAGzE,GACb4qG,EAAKxkG,KAAK8J,EAAOopB,IAAIr6B,IAG7B,OAAO2rG,GAKXshY,EAAuBlve,UAAU+we,cAAgB,SAAU9/c,GACvDrsB,KAAKuqe,eAAet9a,QAAQ5gC,IAKhCi+c,EAAuBlve,UAAU8we,cAAgB,SAAU7/c,GACvDrsB,KAAK6we,YAAYxkd,GACjBrsB,KAAK8we,SAASzkd,IAKlBi+c,EAAuBlve,UAAUy1e,YAAc,SAAUxkd,GAIrD,IAHA,IAAI0kd,EAAa1kd,EAAM0kd,WACnBC,EAAgB3kd,EAAM4kd,oBAAoB5kd,EAAMokd,cAChDS,EAAiBH,EAAW1ve,QACzB0ve,EAAWv0e,OAAS,GAAG,CAM1B,IAAK,IAJD20e,GADAC,EAAeL,EAAW,IACWM,iBACrCC,EAAkBF,EAAaG,iBAC/BC,GAAkB,EAClBC,EAAe,IACVv1e,EAAI,EAAGA,EAAIi1e,EAAsB30e,OAAQN,IAAK,CAEnD,GAA6B,WADzBw1e,EAAeP,EAAsBj1e,IACxB6+B,KAAK,GAKjB,CACDy2c,GAAkB,EAClB,MALA,IAAItD,EAAYwD,EAAap1e,OAC7Bm1e,EAAeple,KAAK+T,IAAIqxd,EAAcvD,EAAUnzc,KAAK,GAAK,GAQlE,GAAIy2c,EAAiB,CAMjB,GALAJ,EAAar2c,KAAK,GAAK02c,EAClBpld,EAAM2gd,UACP3gd,EAAM2gd,QAAU,KAEpB3gd,EAAM2gd,QAAU3ge,KAAK+T,IAAIiM,EAAM2gd,QAASyE,GACjB,MAAnBH,EACA,IAASp1e,EAAI,EAAGA,EAAIo1e,EAAgB90e,OAAQN,IAAK,EACzCw1e,EAAeJ,EAAgBp1e,IACtB6+B,KAAK,GAAK,SAII,KAFvBmzc,EAAYwD,EAAavqe,QAEf4zB,KAAK,KACfg2c,EAAWvse,KAAK0pe,GAGhBA,EAAUnzc,KAAK,IAAM,GAIjCg2c,EAAW7sZ,YAEV,CAED,IAAIytZ,EAAcZ,EAAW7sZ,QAE7B,GADA6sZ,EAAWvse,KAAK4se,GACZO,IAAgBP,GAAsC,IAAtBL,EAAWv0e,OAG3C,OAIZ,IAASN,EAAI,EAAGA,EAAI80e,EAAcx0e,OAAQN,IACtC80e,EAAc90e,GAAG6+B,KAAK,IAAM1O,EAAM2gd,QAEtC,IAAS9we,EAAI,EAAGA,EAAIg1e,EAAe10e,OAAQN,IAIvC,IAAK,IAHDk1e,EACAQ,EAAkB,EAEblud,GADLytd,GAFAC,EAAeF,EAAeh1e,IAEOq1e,iBAC5B,GAAG7td,EAAIytd,EAAsB30e,OAAQknB,IAAK,CACnD,IAAIgud,EACAxD,GADAwD,EAAeP,EAAsBztd,IACZvc,OAC7Biqe,EAAar2c,KAAK,GAAK1uB,KAAKC,IAAIsle,EAAiB1D,EAAUnzc,KAAK,GAAK,GACrE62c,EAAkBR,EAAar2c,KAAK,GAG5C1O,EAAM2gd,QAAU,IAAY3gd,EAAM2gd,SAKtC1C,EAAuBlve,UAAU01e,SAAW,SAAUzkd,GAClDA,EAAMykd,YAKVxG,EAAuBlve,UAAU6we,WAAa,SAAU5/c,GACpD,IAAIwld,KACJxld,EAAM0kd,cAGN,IAAK,IAFDe,EAAmBzld,EAAM4kd,oBAAoB5kd,EAAMokd,cACnDsB,KACK71e,EAAI,EAAGA,EAAI41e,EAAiBt1e,OAAQN,IACzC41e,EAAiB51e,GAAG6+B,KAAK,IAAM,EAC/Bg3c,EAAYD,EAAiB51e,GAAGoH,IAAMwue,EAAiB51e,GAE3D,IAAI81e,EAAa,KACjB,GAAmB,MAAf3ld,EAAMy+c,MAAe,CACrB,IAAImH,EAAa5ld,EAAMy+c,MACvBkH,KACA,IAAS91e,EAAI,EAAGA,EAAI+1e,EAAWz1e,OAAQN,IACnC81e,EAAW91e,GAAKmwB,EAAM6ld,cAAc7ld,EAAMokd,aAAcwB,EAAW/1e,IAC9C,MAAjB81e,EAAW91e,IACXmwB,EAAM0kd,WAAWvse,KAAKwte,EAAW91e,IAI7CmwB,EAAM8ld,MAAM,yBAA0BH,GAAY,EAAM,MAAQH,UAAWA,EAAWE,YAAaA,IACnG,IAAIK,EAAgB/ld,EAAMhtB,MAAMwye,EAAW,MAAM,GACjDxld,EAAM8ld,MAAM,uBAAwBJ,GAAa,EAAMK,GAAiBP,UAAWA,EAAWE,YAAaA,KAM/GzH,EAAuBlve,UAAUmJ,OAAS,SAAUzH,EAAK+0D,GACrD,IAAI//C,EAAQ+/C,EAAMtzD,QAAQzB,GAI1B,OAHe,IAAXgV,GACA+/C,EAAMlpC,OAAO7W,EAAO,GAEjBhV,GAMXwte,EAAuBlve,UAAUi3e,OAAS,SAAUC,EAAgBlia,GAChE,IAAIr1C,EAAOu3c,EAAeh2e,OAC1Bg2e,EAAeh2e,OAASg2e,EAAenre,OACvCmre,EAAenre,OAAS4zB,EACxBu3c,EAAeC,YAAcD,EAAeC,YAMhDjI,EAAuBlve,UAAUo3e,gBAAkB,SAAUl2e,EAAQ6K,EAAQkke,GACzEA,EAAwB,MAAZA,GAAoBA,EAGhC,IAAK,IAFD/yC,EAAQt4b,KAAK2qe,SAASrue,GACtByC,KACK7C,EAAI,EAAGA,EAAIo8b,EAAM97b,OAAQN,IAAK,CACnC,IAAIoD,EAAMU,KAAKkre,mBAAmB5yC,EAAMp8b,IAAI,GACxCiiY,EAAMn+X,KAAKkre,mBAAmB5yC,EAAMp8b,IAAI,IACvCoD,IAAQhD,GAAU6hY,IAAQh3X,IAAakke,GAAY/re,IAAQ6H,GAAUg3X,IAAQ7hY,IAC9EyC,EAAOyF,KAAK8zb,EAAMp8b,IAG1B,OAAO6C,GAEJure,KAKP0B,GAAkC,WAClC,SAASA,EAAiB1+a,EAAQu9a,EAAUC,EAAO2H,GAC/Czye,KAAK0ye,2BAA6B,EAElC1ye,KAAK2ye,SAAW,EAChB3ye,KAAK4ye,iBAAmB,IAAItI,GAC5Btqe,KAAK8qe,MAAQA,EACb9qe,KAAKywe,cAAiB/4c,QACtB,IAAIm7c,KACJ7ye,KAAKstD,OAASmlb,EACdzye,KAAKgte,QAAU,IACfhte,KAAK8ye,mBAAqBxlb,EAC1BttD,KAAK+ye,oBAAoBzlb,EAAQu9a,EAAUgI,GAC3C,IAAK,IAAI32e,EAAI,EAAGA,EAAI2ue,EAASrue,OAAQN,IAAK,CAEtC,IAAK,IADDo8b,EAAQu6C,EAAiB32e,GAAGq1e,iBACvB7td,EAAI,EAAGA,EAAI40a,EAAM97b,OAAQknB,IAAK,CACnC,IAAIgud,EAAep5C,EAAM50a,GACrBsvd,EAAYtB,EAAap5C,MAC7B,GAAiB,MAAb06C,GAAqBA,EAAUx2e,OAAS,EAAG,CAC3C,IAAIy2e,EAAWD,EAAU,GACrBE,EAAa5lb,EAAO49a,mBAAmB+H,GAAU,GACjDE,EAAqBnze,KAAKkye,cAAclye,KAAKywe,aAAcyC,GAC3DL,EAAiB32e,KAAOi3e,IACxBD,EAAa5lb,EAAO49a,mBAAmB+H,GAAU,GACjDE,EAAqBnze,KAAKkye,cAAclye,KAAKywe,aAAcyC,IAErC,MAAtBC,GAA8BN,EAAiB32e,KAAOi3e,IACtDzB,EAAavqe,OAASgse,EAC6B,IAA/CA,EAAmB9B,iBAAiB70e,SACpC22e,EAAmB9B,qBAEnB8B,EAAmB9B,iBAAiB9ye,QAAQmze,GAAgB,GAC5DyB,EAAmB9B,iBAAiB7se,KAAKkte,KAKzDmB,EAAiB32e,GAAG6+B,KAAK,GAAK,GAsVtC,OAhVAixc,EAAiB5we,UAAU23e,oBAAsB,SAAUzlb,EAAQu9a,EAAUgI,GACzE,IAAK,IAAI32e,EAAI,EAAGA,EAAI2ue,EAASrue,OAAQN,IAAK,CACtC22e,EAAiB32e,IACb6Q,KAAOC,KAAO+tB,QAAUgtC,KAAM8ia,EAAS3ue,GACvCoH,GAAIune,EAAS3ue,GAAGq7B,KAAM85c,oBAAsBE,qBAEhDvxe,KAAKoze,cAAcpze,KAAKywe,aAAc5F,EAAS3ue,GAAI22e,EAAiB32e,IACpE,IAAI+ue,EAAQ39a,EAAOq9a,SAASE,EAAS3ue,IACrC22e,EAAiB32e,GAAGq1e,oBACpB,IAAK,IAAI7td,EAAI,EAAGA,EAAIund,EAAMzue,OAAQknB,IAAK,CACnC,IAAIqkD,EAAOza,EAAO49a,mBAAmBD,EAAMvnd,IAAI,GAC/C,GAAIqkD,IAAS8ia,EAAS3ue,GAAI,CACtB,IAAIm3e,EAAkB/lb,EAAOklb,gBAAgB3H,EAAS3ue,GAAI6rE,GAAM,GAC5Dura,EAAgBhmb,EAAOklb,gBAAgB3H,EAAS3ue,GAAI6rE,GAAM,GAC9D,GAAuB,MAAnBsra,GAA2BA,EAAgB72e,OAAS,GAA4B,EAAvB82e,EAAc92e,QAAc62e,EAAgB72e,OAAQ,CAE7G,IAAK,IADDk1e,GAAiB3ke,KAAOC,KAAO+tB,QAAUu9Z,MAAO+6C,EAAiB3+c,QAC5D0iD,EAAI,EAAGA,EAAIi8Z,EAAgB72e,OAAQ46E,IACxCs6Z,EAAah9c,IAAIlwB,KAAK6ue,EAAgBj8Z,GAAG9zE,IAE7Coue,EAAap1e,OAASu2e,EAAiB32e,GAClC22e,EAAiB32e,GAAGq1e,mBACrBsB,EAAiB32e,GAAGq1e,qBAEpBsB,EAAiB32e,GAAGq1e,iBAAiBhze,QAAQmze,GAAgB,GAC7DmB,EAAiB32e,GAAGq1e,iBAAiB/se,KAAKkte,KAK1DmB,EAAiB32e,GAAG6+B,KAAK,GAAK,IAOtCixc,EAAiB5we,UAAU01e,SAAW,WAClC,IAAIyC,KACJvze,KAAKkte,SACL,IAAK,IAAIhxe,EAAI,EAAGA,EAAI8D,KAAKgte,QAAU,EAAG9we,IAClCq3e,EAASr3e,MACT8D,KAAKkte,MAAMhxe,GAAKq3e,EAASr3e,GAE7B,IAAI81e,EAAa,KACjB,GAAkB,MAAdhye,KAAK8qe,MAAe,CACpB,IAAI0I,EAAgBxze,KAAK8qe,MACzBkH,KACA,IAAS91e,EAAI,EAAGA,EAAIs3e,EAAch3e,OAAQN,IAAK,CAC3C,IAAI6rE,EAAOyra,EAAct3e,GACrBk1e,EAAepxe,KAAKkye,cAAclye,KAAKywe,aAAc1oa,GACzDiqa,EAAW91e,GAAKk1e,GAGxBpxe,KAAKmye,MAAM,mBAAoBH,GAAY,EAAO,MAAQH,UAAW,KAAME,YAAa,KAAMwB,SAAUA,KAK5GvH,EAAiB5we,UAAUq4e,iBAAmB,SAAUrja,EAAOsja,EAAMn3e,GACjDA,EAAKs1e,UACHt1e,EAAKw1e,YADvB,IAEIzxe,EAAS/D,EAAK+D,OACdC,EAAOhE,EAAKq9M,KACZjhM,EAAOpc,EAAKoc,KACZ46d,EAAWh3e,EAAKg3e,SAapB,GAZKhze,EAAKyse,SAA4B,IAAjBzse,EAAKyse,UACtBzse,EAAKyse,SAAW,GAEfzse,EAAKmte,SAA4B,IAAjBnte,EAAKmte,UACtBnte,EAAKmte,SAAW,GAEP,IAATgG,GAAcnze,EAAKyse,QAAU,GAAKzse,EAAKmte,QAAU,IACjD6F,EAAShze,EAAKw6B,KAAK,IAAIv2B,KAAKjE,GAC5BA,EAAKyse,QAAUzse,EAAKw6B,KAAK,GACzBx6B,EAAKmte,QAAUnte,EAAKw6B,KAAK,GACzBx6B,EAAKw6B,KAAK,GAAKw4c,EAAShze,EAAKyse,SAASxwe,OAAS,GAErC,MAAV8D,GAA0B,MAARqY,EAAc,CAEhC,GADiCrY,EAAO0se,QAAUzse,EAAKyse,QACtB,EAAG,CAChCr0d,EAAKq0d,QAAU1se,EAAO0se,QACtBr0d,EAAK+0d,QAAUnte,EAAKyse,QACpBr0d,EAAKoiB,QACLpiB,EAAK5L,KACL4L,EAAK3L,KACL,IAAK,IAAI9Q,EAAIyc,EAAK+0d,QAAU,EAAGxxe,EAAIyc,EAAKq0d,QAAS9we,IAC7Cq3e,EAASr3e,GAAGsI,KAAKmU,GACjB3Y,KAAK4ye,iBAAiBrF,gBAAgB50d,EAAMzc,EAAGq3e,EAASr3e,GAAGM,OAAS,MAQpFwve,EAAiB5we,UAAUg4e,cAAgB,SAAUO,EAAKt2e,EAAKN,GAC3D,IAAIuG,EAAKjG,EAAIk6B,KAITi7F,EAAWmhX,EAAIj8c,IAAIp0B,GAEvB,OADAqwe,EAAIj8c,IAAIp0B,GAAMvG,EACPy1H,GAMXw5W,EAAiB5we,UAAUsze,uBAAyB,SAAUiF,EAAKt2e,EAAKN,EAAO+3F,GAC3E,IAAIxxF,EAAKjG,EAAIiG,GAITkvH,EAAWmhX,EAAIj8c,IAAIp0B,GAEvB,OADAqwe,EAAIj8c,IAAIp0B,GAAMvG,EACPy1H,GAMXw5W,EAAiB5we,UAAU82e,cAAgB,SAAUyB,EAAKt2e,GACjD2C,KAAK0ye,4BAAkE,IAApC1ye,KAAK0ye,6BACzC1ye,KAAK0ye,2BAA6B,GAEtC,IAAIpve,EAAKjG,EAAIk6B,KACb,OAAKj0B,EASEqwe,EAAIj8c,IAAIp0B,GARNjG,EAAIu2e,eAKED,EAAIj8c,IAAIr6B,EAAIu2e,iBAJnBv2e,EAAIu2e,eAAiB,sBAAwB5ze,KAAK0ye,6BAC3Cr1e,EAAIu2e,iBAYvB5H,EAAiB5we,UAAU00e,uBAAyB,SAAU6D,EAAKt2e,GAC1D2C,KAAK0ye,4BAAkE,IAApC1ye,KAAK0ye,6BACzC1ye,KAAK0ye,2BAA6B,GAEtC,IAAIpve,EAAKjG,EAAIiG,GACb,OAAKA,EASEqwe,EAAIj8c,IAAIp0B,GARNjG,EAAIu2e,eAKED,EAAIj8c,IAAIr6B,EAAIu2e,iBAJnBv2e,EAAIu2e,eAAiB,sBAAwB5ze,KAAK0ye,6BAC3Cr1e,EAAIu2e,iBAYvB5H,EAAiB5we,UAAU61e,oBAAsB,SAAU0C,GAEvD,IAAK,IADD50e,KACKX,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKq2e,EAAIj8c,KAAMt5B,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC9D,IAAIf,EAAMwF,EAAGzE,GACbW,EAAOyF,KAAKmve,EAAIj8c,IAAIr6B,IAExB,OAAO0B,GAMXite,EAAiB5we,UAAU+2e,MAAQ,SAAU0B,EAASC,EAAUC,EAAgBlC,EAAWt1e,GACtEA,EAAKs1e,UACHt1e,EAAKw1e,YACTx1e,EAAKg3e,SAEpB,GAAgB,MAAZO,EAAkB,CAClB,IAAK,IAAI53e,EAAI,EAAGA,EAAI43e,EAASt3e,OAAQN,IAAK,CACtC,IAAIk1e,EAAe0C,EAAS53e,GACR,MAAhBk1e,IACiB,MAAbS,IACAA,EAAY,IAAIvze,QAEpB/B,EAAK+D,OAAS,KACd/D,EAAKq9M,KAAOw3R,EACZ70e,EAAKoc,KAAO,KACRo7d,GAEA3C,EAAajD,YACbiD,EAAajD,SAAS,GAAKnue,KAAK2ye,SAChCvB,EAAajD,SAAS,GAAKjye,EAC3B8D,KAAKg0e,YAAYH,EAAShC,EAAW31e,EAAG,EAAGK,IAG3CyD,KAAKi0e,iBAAiBJ,EAAShC,EAAW,EAAGt1e,IAIzDyD,KAAK2ye,aAMb3G,EAAiB5we,UAAU64e,iBAAmB,SAAUJ,EAASH,EAAMtja,EAAO7zE,GACzDA,EAAKs1e,UACHt1e,EAAKw1e,YACTx1e,EAAKg3e,SACPh3e,EAAK+D,OAHlB,IAIIs5M,EAAOr9M,EAAKq9M,KACLr9M,EAAKoc,KAChB,GAAY,MAARihM,EAAc,CACd,IAAI3mH,EAAS2mH,EAAKt2M,GAClB,GAAoB,MAAhBowe,EAAKzgZ,GAAiB,CACtBygZ,EAAKzgZ,GAAU2mH,EACf55M,KAAKk0e,qBAAqBL,EAASzja,EAAO,EAAG7zE,GAG7C,IAAK,IADD43e,EAAgBv6R,EAAK23R,iBAAiBlwe,QACjCnF,EAAI,EAAGA,EAAIi4e,EAAc33e,OAAQN,IAAK,CAC3C,IAAIw1e,EAAeyC,EAAcj4e,GAC7Bu2C,EAAai/b,EAAavqe,OAE9B5K,EAAK+D,OAASs5M,EACdr9M,EAAKq9M,KAAOnnK,EACZl2C,EAAKoc,KAAO+4d,EACZ1xe,KAAKi0e,iBAAiBJ,EAASH,EAAMtja,EAAQ,EAAG7zE,SAIpDyD,KAAKk0e,qBAAqBL,EAASzja,EAAO,EAAG7zE,KAOzDyve,EAAiB5we,UAAU84e,qBAAuB,SAAUL,EAASzja,EAAOsja,EAAMU,GAC9E,IAAI9ze,EAAS8ze,EAAc9ze,OACvBs5M,EAAOw6R,EAAcx6R,KACrBjhM,EAAOy7d,EAAcz7d,KACzB,GAAgB,2BAAZk7d,GAAoD,yBAAZA,EAAoC,CAC5E,IAAItve,EAAqB,yBAAZsve,EACb7ze,KAAKq0e,qBAAqB/ze,EAAQs5M,EAAMjhM,EAAMy3D,EAAOgka,EAAe7ve,GAExD,qBAAZsve,GACA7ze,KAAKyze,iBAAiBrja,EAAOsja,EAAMU,IAM3CpI,EAAiB5we,UAAUi5e,qBAAuB,SAAU/ze,EAAQC,EAAMoY,EAAMy3D,EAAO7zE,EAAMgI,GACzF,IAAIste,EAAYt1e,EAAKs1e,UACjBE,EAAcx1e,EAAKw1e,YACRx1e,EAAKg3e,SAChBvze,KAAK4ye,iBAAiB3E,WAAW1te,EAAMD,KACvCN,KAAK4ye,iBAAiBP,OAAO15d,EAAM,GACnC3Y,KAAK4ye,iBAAiBrue,OAAOoU,EAAMrY,EAAOixe,kBACtChte,GACAhE,EAAKgxe,iBAAiB/se,KAAKmU,GAC3BrY,EAAO+we,iBAAiB7se,KAAKmU,GAC7B3Y,KAAK4ye,iBAAiBrue,OAAOoU,EAAMpY,EAAK8we,oBAGxC/we,EAAO+we,iBAAiB7se,KAAKmU,GAC7B3Y,KAAK4ye,iBAAiBrue,OAAOoU,EAAMpY,EAAK8we,kBACxC9we,EAAKgxe,iBAAiB/se,KAAKmU,KAGnCk5d,EAAUtxe,EAAK+C,IAAM/C,SACdwxe,EAAYxxe,EAAK+C,KAK5B0oe,EAAiB5we,UAAU44e,YAAc,SAAUH,EAASH,EAAMY,EAAOlka,EAAO7zE,GAC5DA,EAAKs1e,UACHt1e,EAAKw1e,YACRx1e,EAAKg3e,SAFpB,IAGIjze,EAAS/D,EAAK+D,OACds5M,EAAOr9M,EAAKq9M,KACLr9M,EAAKoc,KAChB,GAAY,MAARihM,EAAc,CACd,GAAc,MAAVt5M,IACqB,MAAjBs5M,EAAKu0R,UACLv0R,EAAKu0R,SAAS,KAAO7te,EAAO6te,SAAS,IAAI,CACzC,IAAIoG,EAAiBj0e,EAAO6te,SAAS3xe,OAAS,EAC9Co9M,EAAKu0R,SAAW7te,EAAO6te,SAAS9se,QAChCu4M,EAAKu0R,SAASoG,EAAiB,GAAKD,EAG5C,IAAIrhZ,EAAS2mH,EAAKt2M,GAClB,GAAoB,MAAhBowe,EAAKzgZ,GAAiB,CACtBygZ,EAAKzgZ,GAAU2mH,EACf55M,KAAKk0e,qBAAqBL,EAASzja,EAAO,EAAG7zE,GAE7C,IAAK,IADD43e,EAAgBv6R,EAAK23R,iBAAiBlwe,QACjCnF,EAAI,EAAGA,EAAIi4e,EAAc33e,OAAQN,IAAK,CAC3C,IAAIw1e,EAAeyC,EAAcj4e,GAC7Bu2C,EAAai/b,EAAavqe,OAC9B5K,EAAK+D,OAASs5M,EACdr9M,EAAKq9M,KAAOnnK,EACZl2C,EAAKoc,KAAO+4d,EACZ1xe,KAAKg0e,YAAYH,EAASH,EAAMx3e,EAAGk0E,EAAQ,EAAG7zE,SAIlDyD,KAAKk0e,qBAAqBL,EAASzja,EAAO,EAAG7zE,KAQzDyve,EAAiB5we,UAAUiE,MAAQ,SAAUvC,EAAK03e,EAAYC,GAE1D,GADAA,EAAsB,MAAXA,GAAmBA,EACnB,MAAP33e,GAA4C,mBAArBA,EAAe,YAAkB,CAExD,IAAK,IADDq7b,EAAYr7b,EAAIc,cACXQ,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKR,GAAMsB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC1D,IAAIlC,EAAI2G,EAAGzE,GACD,mBAANlC,IAAyC,MAAds4e,GAAsBA,EAAWj2e,QAAQrC,GAAK,KACpEu4e,GAA+B,iBAAZ33e,EAAIZ,MAKxBi8b,EAAUj8b,GAAKY,EAAIZ,IAI/B,OAAOi8b,EAEX,OAAO,MAEJ6zC,KAKPxB,GAAgC,WAChC,SAASA,KAoTT,OA9SAA,EAAepve,UAAUs5e,mBAAqB,SAAUrod,GAGpD,IAAK,IAFDsod,EAAWtod,EAAM6gd,MAAM1we,OACvBo4e,EAAiB,EACZ14e,EAAI,EAAGA,EAAIy4e,EAAUz4e,IAC1B04e,GAAkB50e,KAAK60e,sBAAsB34e,EAAGmwB,GAEpD,OAAOuod,GAMXpK,EAAepve,UAAUk0e,gBAAkB,SAAU/ue,EAAM6vE,GACvD,OAAI7vE,EACIP,KAAKote,SAAS7se,GACPA,EAAKw6B,KAAK,GAGVx6B,EAAKw6B,KAAKq1C,EAAQ7vE,EAAKmte,QAAU,GAGzC,GAKXlD,EAAepve,UAAUy5e,sBAAwB,SAAU34e,EAAGmwB,GAM1D,IAAK,IALDuod,EAAiB,EACjB92O,EAAOzxO,EAAM6gd,MAAMhxe,GACnB44e,EAAezod,EAAM6gd,MAAMhxe,EAAI,GAC/B64e,KAEKrxd,EAAI,EAAGA,EAAIo6O,EAAKthQ,OAAQknB,IAAK,CAMlC,IAAK,IALDnjB,EAAOu9P,EAAKp6O,GACZsxd,EAAeh1e,KAAKsve,gBAAgB/ue,EAAMrE,GAC1C6ze,EAAiB/ve,KAAK8ue,yBAAyBvue,EAAMrE,GAAG,GAExD+4e,KACK3ud,EAAI,EAAGA,EAAIypd,EAAevze,OAAQ8pB,IAAK,CAC5C,IAAI4ud,EAAgBnF,EAAezpd,GAC/B6ud,EAAwBn1e,KAAKsve,gBAAgB4F,EAAeh5e,EAAI,GACpE+4e,EAAYzwe,KAAK2we,GAErBF,EAAYnld,KAAK,SAAU/iB,EAAGC,GAAK,OAAOD,EAAIC,IAC9C+ne,EAAWC,GAAgBC,EAG1B,IADDG,KACJ,IAAS1xd,EAAI,EAAGA,EAAIqxd,EAAWv4e,OAAQknB,IACnC0xd,EAAUA,EAAQ56d,OAAOu6d,EAAWrxd,IAGxC,IADA,IAAI2xd,EAAa,EACVA,EAAaP,EAAat4e,QAC7B64e,IAAe,EAEnB,IAAIC,EAAW,EAAID,EAAa,EAChCA,GAAc,EAET,IADDpa,KACJ,IAASv3c,EAAI,EAAGA,EAAI4xd,IAAY5xd,EAC5Bu3c,EAAKv3c,GAAK,EAEd,IAASA,EAAI,EAAGA,EAAI0xd,EAAQ54e,OAAQknB,IAAK,CACrC,IACI6xd,EADQH,EAAQ1xd,GACI2xd,EAExB,MADEpa,EAAKsa,GACAA,EAAY,GACXA,EAAY,IACZX,GAAkB3Z,EAAKsa,EAAY,MAGrCta,EADFsa,EAAaA,EAAY,GAAM,GAIvC,OAAOX,GAMXpK,EAAepve,UAAU6xD,QAAU,SAAU5gC,GAEzCrsB,KAAKw1e,mBACL,IAAK,IAAIt5e,EAAI,EAAGA,EAAImwB,EAAM6gd,MAAM1we,OAAQN,IACpC8D,KAAKw1e,gBAAgBt5e,GAAKmwB,EAAM6gd,MAAMhxe,GAAGmF,QAIxC,IAFDo0e,EAA+B,EAC/BC,EAAuB11e,KAAK00e,mBAAmBrod,GACnD,IAASnwB,EAAI,EAAGA,EAAI,IAAMu5e,EAA+B,EAAGv5e,IAAK,CAC7D8D,KAAK21e,eAAez5e,EAAGmwB,GACvB,IAAIupd,EAAqB51e,KAAK00e,mBAAmBrod,GACjD,GAAIupd,EAAqBF,EAAsB,CAC3CA,EAAuBE,EACvBH,EAA+B,EAC/B,IAAK,IAAI/xd,EAAI,EAAGA,EAAI1jB,KAAKw1e,gBAAgBh5e,OAAQknB,IAE7C,IAAK,IADDo6O,EAAOzxO,EAAM6gd,MAAMxpd,GACd4C,EAAI,EAAGA,EAAIw3O,EAAKthQ,OAAQ8pB,IAAK,CAClC,IAAIyhD,EAAO+1L,EAAKx3O,GAChBtmB,KAAKw1e,gBAAgB9xd,GAAGqkD,EAAKhtC,KAAK,IAAMgtC,OAI/C,CAED0ta,IAEA,IAAS/xd,EAAI,EAAGA,EAAI1jB,KAAKw1e,gBAAgBh5e,OAAQknB,IAE7C,IADIo6O,EAAOzxO,EAAM6gd,MAAMxpd,GACd4C,EAAI,EAAGA,EAAIw3O,EAAKthQ,OAAQ8pB,IAAK,CAC9ByhD,EAAO+1L,EAAKx3O,GAChBtmB,KAAKute,gBAAgBxla,EAAMrkD,EAAG4C,IAI1C,GAA6B,IAAzBovd,EACA,MAMH,IAFDxI,KACAqG,KACJ,IAASr3e,EAAI,EAAGA,EAAImwB,EAAM2gd,QAAU,EAAG9we,IACnCq3e,EAASr3e,MACTgxe,EAAMhxe,GAAKq3e,EAASr3e,GAExB,IAASA,EAAI,EAAGA,EAAI8D,KAAKw1e,gBAAgBh5e,OAAQN,IAC7C,IAASwnB,EAAI,EAAGA,EAAI1jB,KAAKw1e,gBAAgBt5e,GAAGM,OAAQknB,IAChD6vd,EAASr3e,GAAGsI,KAAKxE,KAAKw1e,gBAAgBt5e,GAAGwnB,IAGjD2I,EAAM6gd,MAAQA,GAMlB1C,EAAepve,UAAUgye,SAAW,SAAU7se,GAC1C,SAAIA,IAAQA,EAAKwnE,OAASxnE,EAAKwnE,KAAKgpW,UAAWxwa,EAAKwnE,KAAK+oW,WAQ7D05D,EAAepve,UAAUu6e,eAAiB,SAAUE,EAAWxpd,GAE3D,IAAIypd,EAAiBD,EAAY,GAAM,EACvC,GAAIC,EACA,IAAK,IAAIpyd,EAAI2I,EAAM2gd,QAAU,EAAGtpd,GAAK,EAAGA,IACpC1jB,KAAK+1e,WAAWryd,EAAGoyd,QAIvB,IAASpyd,EAAI,EAAGA,EAAI2I,EAAM2gd,QAAStpd,IAC/B1jB,KAAK+1e,WAAWryd,EAAGoyd,IAQ/BtL,EAAepve,UAAU0ze,yBAA2B,SAAU/ma,EAAMqI,EAAO+nI,QACpD,IAAfA,IAAyBA,GAAa,GAC1C,IAAI69R,EAAiB,0BACjBC,EAAc,mBAKlB,GAJI99R,IACA69R,EAAiB,8BACjBC,EAAc,oBAEdlua,EAAM,CACN,GAAI/nE,KAAKote,SAASrla,GAAO,CACrB,GAA4B,MAAxBA,EAAKiua,GAAyB,CAC9Bjua,EAAKiua,MACLjua,EAAKiua,GAAgB,MACrB,IAAK,IAAI95e,EAAI,EAAGA,EAAI6rE,EAAKkua,GAAaz5e,OAAQN,IAAK,CAC/C,IAAIyc,EAAOovD,EAAKkua,GAAa/5e,QACRhB,IAAjByd,EAAKq0d,UACLr0d,EAAKq0d,SAAW,IAEE,IAAlBr0d,EAAKq0d,UAAmB70R,EAAcx/L,EAAK+0d,UAAYt9Z,EAAQ,EAAMz3D,EAAKq0d,UAAY58Z,EAAQ,GAE9FrI,EAAKiua,GAAgB,GAAGxxe,KAAK2zM,EAAax/L,EAAKxR,OAASwR,EAAKrc,QAI7DyrE,EAAKiua,GAAgB,GAAGxxe,KAAKmU,IAIzC,OAAOovD,EAAKiua,GAAgB,GAG5B,GAA4B,MAAxBjua,EAAKiua,GAAyB,CAC9Bjua,EAAKiua,MACL,IAAS95e,EAAI,EAAGA,EAAI6rE,EAAKhtC,KAAKv+B,OAAQN,IAClC6rE,EAAKiua,GAAgB95e,MACjBA,KAAOi8M,EAAa,EAAKpwI,EAAKhtC,KAAKv+B,OAAS,GAC5CurE,EAAKiua,GAAgB95e,GAAGsI,KAAK2zM,EAAapwI,EAAK5gE,OAAS4gE,EAAKzrE,QAG7DyrE,EAAKiua,GAAgB95e,GAAGsI,KAAKujE,GAIzC,OAAOA,EAAKiua,GAAgB5la,EAAQrI,EAAK2la,QAAU,GAG3D,OAAO,MAMXlD,EAAepve,UAAU86e,YAAc,SAAUnG,EAAgBhD,GAG7D,IAAK,IAFDiD,KACAmG,EAAa,EACRj6e,EAAI,EAAGA,EAAI6ze,EAAevze,OAAQN,IAAK,CAC5C,IAAI6rE,EAAOgoa,EAAe7ze,GAC1B8ze,EAAamG,KAAgBn2e,KAAKsve,gBAAgBvna,EAAMgla,GAI5D,GADAiD,EAAalgd,KAAK,SAAUG,EAAGC,GAAK,OAAOD,EAAIC,IAC3Cimd,EAAa,GAAM,EAEnB,OAAOnG,EAAa3je,KAAKmT,MAAM22d,EAAa,IAE3C,GAAmB,IAAfA,EACL,OAASnG,EAAa,GAAKA,EAAa,IAAM,EAG9C,IAAIC,EAAckG,EAAa,EAC3BC,EAAapG,EAAaC,EAAc,GAAKD,EAAa,GAC1DqG,EAAcrG,EAAamG,EAAa,GACtCnG,EAAaC,GACnB,OAAQD,EAAaC,EAAc,GAAKoG,EAAcrG,EAAaC,GAAemG,IAAeA,EAAaC,IAOtH7L,EAAepve,UAAUmye,gBAAkB,SAAUxla,EAAMqI,EAAOrzE,GAC1DgrE,IACAA,EAAKhtC,KAAK,GAAKh+B,IAMvByte,EAAepve,UAAU26e,WAAa,SAAUhJ,EAAW+I,GAIvD,IAAK,IAHDQ,EAAkBt2e,KAAKw1e,gBAAgBzI,GAAWvwe,OAClDwze,KACAuG,KACKr6e,EAAI,EAAGA,EAAIo6e,EAAiBp6e,IAAK,CACtC,IAAI6rE,EAAO/nE,KAAKw1e,gBAAgBzI,GAAW7we,GACvCs6e,GAAgBN,YAAa,GACjCM,EAAYzua,KAAOA,EAGnB,IAAI0ua,OAA0B,EAE1BA,EADAX,EAC0B91e,KAAK8ue,yBAAyB/ma,EAAMgla,GAGpC/se,KAAK8ue,yBAAyB/ma,EAAMgla,GAAW,GAE7E,IAAI2J,OAAgB,EACJA,EAAhBZ,EAAgC/I,EAAY,EAAoBA,EAAY,EAC7C,MAA3B0J,GAAsE,IAAnCA,EAAwBj6e,QAC3Dg6e,EAAYN,YAAcl2e,KAAKk2e,YAAYO,EAAyBC,GACpE1G,EAAaxre,KAAKgye,IAKlBD,EAAkBv2e,KAAKsve,gBAAgBvna,EAAMgla,KAAc,EAGnEiD,EAAalgd,KAAK9vB,KAAKqzH,SAEvB,IAASn3H,EAAI,EAAGA,EAAIo6e,EAAiBp6e,IACjC,GAA4B,MAAxBq6e,EAAkBr6e,GAAY,CAC1B6rE,EAAOioa,EAAa9rZ,QAAQnc,KAChC/nE,KAAKute,gBAAgBxla,EAAMgla,EAAW7we,KAQlDsue,EAAepve,UAAUi4H,QAAU,SAAUpjG,EAAGC,GAC5C,GAAS,MAALD,GAAkB,MAALC,EAAW,CACxB,GAAIA,EAAEgmd,YAAcjmd,EAAEimd,YAClB,OAAQ,EAEP,GAAIhmd,EAAEgmd,YAAcjmd,EAAEimd,YACvB,OAAO,EAGf,OAAO,GAEJ1L,KCxjDP/5Y,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GAgB5Ds1Y,GAAgB,SAAU33a,GAC1B,IAAIugE,EAAOvgE,EACX,OAAIugE,EAAK9rB,aAAe8rB,EAAKvjB,aAAeujB,EAAKtrB,UAAYsrB,EAAK+xW,UAC3D/xW,EAAKe,cAAgBf,EAAKgyW,cAAgBhyW,EAAKvd,iBAAmBud,EAAKrd,gBACnEqB,IAEPvkD,EAAI+9B,QAAU/9B,EAAI+9B,iBAAiBs1Y,IAASrza,EAAI+9B,MAAMn0B,MAC/C87C,KAOXm0b,GAAyB,SAAUrlZ,GAEnC,SAASqlZ,IACL,OAAkB,OAAXrlZ,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAoB/D,OAtBAywF,GAAUkmZ,EAASrlZ,GAInBN,IACI9pF,EAAS,KACVyve,EAAQv7e,UAAW,UAAM,GAC5B41F,IACI9pF,KACDyve,EAAQv7e,UAAW,cAAU,GAChC41F,IACI9pF,GAAS,IACVyve,EAAQv7e,UAAW,gBAAY,GAClC41F,IACI9pF,EAAS,KACVyve,EAAQv7e,UAAW,eAAW,GACjC41F,IACI9pF,EAAS,KACVyve,EAAQv7e,UAAW,aAAS,GAC/B41F,IACIroF,EAAkB8ra,KACnBkiE,EAAQv7e,UAAW,eAAW,GAC1Bu7e,GACTvya,IAKEwya,GAA+B,SAAUtlZ,GAEzC,SAASslZ,IACL,OAAkB,OAAXtlZ,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAW/D,OAbAywF,GAAUmmZ,EAAetlZ,GAIzBN,IACI9pF,KACD0ve,EAAcx7e,UAAW,aAAS,GACrC41F,IACI9pF,KACD0ve,EAAcx7e,UAAW,cAAU,GACtC41F,IACIjpF,KAAY8sC,KACb+hc,EAAcx7e,UAAW,cAAU,GAC/Bw7e,GACTxya,IAgBEyya,GAA+B,SAAUvlZ,GAOzC,SAASulZ,EAAc7je,EAAShS,GAC5B,IAAIjB,EAAQuxF,EAAOhwF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAqBnD,OApBAD,EAAM+2e,eACN/2e,EAAM2hb,cACN3hb,EAAM+mB,KAAO,OAMb/mB,EAAMmP,OAAS,SAAUrO,GACrB,IAAIk2e,EACAzze,EAAKzC,EAAE24G,OAAOryG,OAAO7D,GAAGpG,MAAM,cAAc,GAC5CilG,EAASpiG,EAAM+2e,YAAYxze,GAC/B,GAAI6+F,GAAUpiG,EAAMm8c,eAAgB,CAChCn8c,EAAMq8c,gBAAkBr8c,EAAMm8c,eAAe54c,KAAO6+F,EAAO7+F,GAAK6+F,EAASpiG,EAAMm8c,eAChEn8c,EAAMyvE,iBAAiB3uE,EAAE24G,SACxCu9X,EAAgBh3e,EAAMi3e,iBAAiBj3e,EAAMq8c,gBAAiBv7c,EAAE24G,OAAQz5G,EAAMiB,UAChEwC,aAAa,YAAazD,EAAMiB,QAAQsC,IAE1D,OAAOyze,GAEJh3e,EAilCX,OA7mCA0wF,GAAUomZ,EAAevlZ,GAmCzBulZ,EAAcz7e,UAAUuyF,kBAAoB,SAAUkF,EAASC,GAE3D,IAAK,IADDrkC,GAAU,EACLrwD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKu1F,GAAUz0F,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD4B,KAAKgB,QAAQ0D,MAAMsR,MAAQhW,KAAKgW,MAAM9I,WACtC,MACJ,IAAK,SACDlN,KAAKgB,QAAQ0D,MAAMqR,OAAS/V,KAAK+V,OAAO7I,WACxC,MACJ,IAAK,gBACD,MACJ,IAAK,cACL,IAAK,eACL,IAAK,gBACDuhD,GAAU,EACV,MACJ,IAAK,eACD,GAAIokC,EAAQokZ,aACRj3e,KAAK+uY,oBAEJ,CACD,IAAI30U,EAAa55D,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,GAAK,WACvD82D,GACAA,EAAW35D,WAAW6E,YAAY80D,GAG1C,MACJ,IAAK,WACD,IAAK,IAAIn2D,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKu1F,EAAQ79B,UAAW/wD,EAAKwG,EAAGjO,OAAQyH,IAAM,CACvE,IAAI/H,EAAIuO,EAAGxG,GACP6N,EAAQslB,OAAOl7B,GACd8D,KAAKk3e,iBAAiBx3a,MAAM5tD,KAC7B9R,KAAKk3e,iBAAiBx3a,MAAM5tD,IACxBg5E,OAAQ+H,EAAQ79B,SAASljD,GAAO4wB,OAAS,GACzC0tK,SAAUv9G,EAAQ79B,SAASljD,GAAOs+L,SAClCx2H,QAASiZ,EAAQ79B,SAASljD,GAAO8nE,SAAW,UAGZ1+E,IAApC23F,EAAQ79B,SAASljD,GAAO8nE,UACxB55E,KAAKk3e,iBAAiBx3a,MAAM5tD,GAAO8nE,QAAUiZ,EAAQ79B,SAASljD,GAAO8nE,SAAW,GAChFnrB,GAAU,QAE2BvzD,IAArC23F,EAAQ79B,SAASljD,GAAOs+L,WACnBpwM,KAAKg1D,SAASljD,GAAOkY,cAKtBhqB,KAAKg1D,SAASljD,GAAOkY,eAAgB,GAJrChqB,KAAKk3e,iBAAiBx3a,MAAM5tD,GAAOs+L,SAAWv9G,EAAQ79B,SAASljD,GAAOs+L,SACtE3hJ,GAAU,IAOtB,MACJ,IAAK,kBACIzuD,KAAKwsV,gBAINxsV,KAAKk3e,iBAAiB/lc,WAAcm7H,QAAUphK,SAAU,KAAOooX,UAAYpoX,SAAU,MAHrFlL,KAAKk3e,iBAAiB/lc,WAAcm7H,QAAUphK,SAAU,GAAKooX,UAAYpoX,SAAU,IAKvF,MACJ,IAAK,aACDlL,KAAKk3e,iBAAiBplH,WAAa9xX,KAAK8xX,WACxCrjU,GAAU,GAIlBA,GACAzuD,KAAKm3e,mBAObN,EAAcz7e,UAAUy3G,eAAiB,WAErC,OAAO7yG,KAAKqzG,cADK,YAMrBwjY,EAAcz7e,UAAUqX,UAAY,WAChC,IAAI1S,EAAQC,KACZA,KAAKgB,QAAQ0D,MAAMmV,SAAW,OAC9B7Z,KAAKgB,QAAQ0D,MAAMqR,OAAS/V,KAAK+V,OAAO7I,WACxClN,KAAKgB,QAAQ0D,MAAMsR,MAAQhW,KAAKgW,MAAM9I,WAClClN,KAAKi3e,cACLj3e,KAAK+uY,gBAGT,IAAIqoG,EAAexxb,GAAkB,OAAStiD,GAAItD,KAAKgB,QAAQsC,GAAK,eACpEtD,KAAKk3e,iBAAmB,IAAI7lH,IACxBS,WAAY9xX,KAAK8xX,aAEhB9xX,KAAKwsV,kBACNxsV,KAAKk3e,iBAAiB/lc,WAAcm7H,QAAUphK,SAAU,GAAKooX,UAAYpoX,SAAU,KAEvFlL,KAAKk3e,iBAAiB9mS,SAAW,SAAUnwM,GACvC,IAAI6R,EAAQ/R,EAAMm3e,iBAAiBx3a,MAAMnhE,QAAQ0B,EAAKge,MACtDle,EAAMi1D,SAASljD,GAAOs+L,SAAWnwM,EAAKo0X,WACtCt0X,EAAMi1D,SAASljD,GAAOkY,eAAgB,GAE1ChqB,KAAKgB,QAAQW,YAAYy1e,GACzBl9a,KACAl6D,KAAKilH,eACLjlH,KAAK0kB,cAKTmyd,EAAcz7e,UAAUg3G,OAAS,WAC7BpyG,KAAK07b,gBAAkB,IAAIpiB,GAAgBt5a,KAAKgB,QAAQsC,GAAI,IAAIitB,IAAe,GAC/EvwB,KAAK+nF,YAAc,IAAIuxV,GAAgBt5a,KAAKgB,QAAQsC,GAAI,IAAIitB,IAAe,GAC3EvwB,KAAKq3e,iBACLr3e,KAAKk3e,iBAAiBrmc,SAAS,IAAM7wC,KAAKgB,QAAQsC,GAAK,eAM3Duze,EAAcz7e,UAAU2mC,cAAgB,WACpC,MAAO,iBAOX80c,EAAcz7e,UAAU47F,gBAAkB,WACtC,IAAIgB,KAKJ,OAJAA,EAAQxzF,MACJgzF,OAAQ,OACRv3F,UAEG+3F,GAMX6+Y,EAAcz7e,UAAUiX,QAAU,WAC9B,GAAIrS,KAAKs3e,UAAW,CAChBt3e,KAAKy5G,UAAUpnG,UACfrS,KAAKilH,eACLjlH,KAAK+N,OAAO,cACZujF,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,MAC9B,IAAIs8B,EAAU97B,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,GAAK,cACxD,GAAIg5B,EAAS,CACTt8B,KAAKgB,QAAQsE,YAAYg3B,GACzB,IAAIi7c,EAAgB,iBAChB37e,OAAO27e,KACP37e,OAAO27e,GAAep9a,YAAc,EACK,IAArCv+D,OAAO27e,GAAep9a,aACtBv+D,OAAO27e,GAAe92e,WAAW6E,YAAY1J,OAAO27e,IACpD37e,OAAO27e,GAAiB,QAIpCj7c,EAAU97B,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,GAAK,aAEhDg5B,EAAQ77B,WAAW6E,YAAYg3B,GAEnCt8B,KAAKgB,QAAQ8C,UAAUS,OAAO,qBAQtCsye,EAAcz7e,UAAUo8e,YAAc,SAAUC,GAE5C,IAAK,IADDv+Y,KACK96F,EAAK,EAAGyE,EAAK40e,EAAYxib,QAAS72D,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAE7D,IADI+jG,EAASt/F,EAAGzE,cACMokD,GAAM,CACxB,IAAIiL,EAAkBlG,GAAYvnD,KAAKytD,iBACnCA,GACAA,EAAgB00C,EAAQniG,WAG3B,GAAImiG,aAAkB9gD,GAAW,CAClC,IAAIsM,EAAuBpG,GAAYvnD,KAAK2tD,sBACxCA,GACAA,EAAqBw0C,EAAQniG,MAGrCA,KAAK82e,YAAY30Y,EAAO7+F,IAAM6+F,EAC1BA,aAAkB3/C,IAAQ2/C,EAAO/nF,UACjC8+E,EAAM10F,KAAK29F,GAGnB,IAAK,IAAIjmG,EAAI,EAAGA,EAAIg9F,EAAM18F,OAAQN,IAE9B,IAAK,IADDqE,OAAO,EACFmjB,EAAI,EAAGA,EAAIw1E,EAAMh9F,GAAGke,SAAS5d,OAAQknB,KAC1CnjB,EAAQP,KAAK82e,YAAY59Y,EAAMh9F,GAAGke,SAASsJ,OAEvC1jB,KAAK0hb,WAAWnhb,EAAK+C,IAAM/C,EAC3BA,EAAKi+D,SAAW06B,EAAMh9F,GAAGoH,IAIrC,IAAK,IAAIW,EAAK,EAAGwG,EAAKgte,EAAYxib,QAAShxD,EAAKwG,EAAGjO,OAAQyH,IAAM,EACzDk+F,EAAS13F,EAAGxG,cACQu+C,IAAQ2/C,EAAO/nF,UACnCpa,KAAK03e,cAAcv1Y,GAG3B,IAAK,IAAIk3I,EAAK,EAAGs+P,EAAUz+Y,EAAOmgJ,EAAKs+P,EAAQn7e,OAAQ68O,IAAM,CACzD,IAAIl3I,EAASw1Y,EAAQt+P,GACrBr5O,KAAK03e,cAAcv1Y,KAM3B00Y,EAAcz7e,UAAUw8e,cAAgB,SAAUH,GAC9C,IAAI/ye,EAAQ,8BACR+ye,EAAY1he,SACZrR,GAAS,UAAY+ye,EAAY1he,OAAS,MAE9C,IAAI8he,EAAajyb,GAAkB,OAAStiD,GAAMm0e,EAAYn0e,GAAIoB,MAAOA,IACzE1E,KAAKgB,QAAQW,YAAYk2e,GACzB,IAAI55d,GACA6sE,OAAQ2sZ,EAAY/0c,MAAO0tK,SAAUqnS,EAAYrnS,SACjD9zK,QAAS,IAAMm7c,EAAYn0e,GAAIs2E,QAAS69Z,EAAY79Z,SAExD55E,KAAKk3e,iBAAiBx3a,MAAMl7D,KAAKyZ,GACjCje,KAAK83e,cAAcL,EAAaI,IAKpChB,EAAcz7e,UAAU28e,eAAiB,SAAUC,EAAaC,GAC5D,IACK,IAAI/7e,EAAI,EAAGA,EAAI8D,KAAKg1D,SAASx4D,OAAQN,IAAK,CAC3C,IAAIg8e,EAAqBl4e,KAAKg1D,SAAS94D,GACvC,IAAoD,IAAhDg8e,EAAmB50e,GAAG/E,QAAQy5e,GAAqB,CAKnD,IAAK,IAHD7gX,QAASj8H,EAAWg9e,EAAoB,cAAe,GAEvDp7e,EAAM,IAAK3B,SAASC,UAAUC,KAAKC,MAAMm5a,GAAcwjE,GAAgB9gX,IAClExvG,EAAM,EAAGA,EAAMrpB,OAAOhB,KAAK26e,GAAez7e,OAAQmrB,IACvD7qB,EAAIwB,OAAOhB,KAAK26e,GAAetwd,IAAQswd,EAAc35e,OAAOhB,KAAK26e,GAAetwd,IAEpFuwd,EAAmBjjb,QAAQzwD,KAAK1H,GAC3BA,EAAIsd,UACLpa,KAAK03e,cAAc56e,GAEvBkD,KAAK82e,YAAYh6e,EAAIwG,IAAMxG,EAC3B,IAAI+6e,EAAar3e,SAAS2uB,eAAe+od,EAAmB50e,IAC5Du0e,EAAWl2e,YAAY3B,KAAKm4e,mBAAmBr7e,EAAK+6e,IACpD,SAOZhB,EAAcz7e,UAAUg9e,kBAAoB,SAAUJ,EAAa36P,GAE/D,IAAK,IADD5uL,EACKvyD,EAAI,EAAGA,EAAI8D,KAAKg1D,SAASx4D,OAAQN,IAAK,CAC3C,IAAIg8e,EAAqBl4e,KAAKg1D,SAAS94D,GACvC,IAAoD,IAAhDg8e,EAAmB50e,GAAG/E,QAAQy5e,GAC9B,IAAK,IAAI55e,EAAK,EAAGyE,EAAKq1e,EAAmBjjb,QAAS72D,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACpE,IAAI+jG,EAASt/F,EAAGzE,GAChB,IAAqC,IAAjC+jG,EAAO7+F,GAAG/E,QAAQ8+O,GAAkB,CACpC,IAAIvrO,EAAQome,EAAmBjjb,QAAQ12D,QAAQ4jG,GAE/C,GADA+1Y,EAAmBjjb,QAAQtsC,OAAO7W,EAAO,GACrCqwF,EAAO/nF,SAEP,IAAK,IADD3Z,EAAa0hG,EAAO/nF,SACf+/S,EAAM,EAAGA,EAAM15T,EAAWjE,OAAQ29T,WAChCn6T,KAAK82e,YAAar2e,EAAW05T,WAGrCn6T,KAAK82e,YAAY30Y,EAAO7+F,IAC/B,IAAItC,EAAUR,SAAS2uB,eAAegzE,EAAO7+F,GAAK,cAClDtC,EAAQP,WAAW6E,YAAYtE,GAC/BytD,GAAU,EACV,OAIZ,GAAIA,EACA,QAOZoob,EAAcz7e,UAAUs8e,cAAgB,SAAUv1Y,GAC9C,IAAInsF,EACA+9C,EACAh+C,EACAi+C,EAGA13B,EAFA+7c,EAAa,IAAI14B,GACjB7id,EAAMqlG,EAENm2Y,EAAkB,IAAInwE,GACtBttZ,EAAasnF,aAAkB3/C,GAAQ2/C,EAAO7tC,gBAAkB,KAChEz5C,IAAcA,EAAUT,WACxBS,EAAUT,aAGd,IAAIm+d,EAAoBhxb,GAAYvnD,KAAKu4e,mBAezC,GAdIA,IACAj8c,EAAUi8c,EAAkBp2Y,IAE3B7lE,IACGx/B,EAAIsd,SACJkiB,EAAUt8B,KAAKw4e,aAAa17e,EAAK+d,IAGjCyhB,EAAU6lE,EAAO5tC,KAAKv0D,MAClBmiG,aAAkB3/C,IAAQ2/C,EAAO3jC,UACjC3jD,EAAUT,SAAS5V,KAAK83B,MAI/B6lE,EAAO3jC,SAAU,CAClB,IAAIi6a,GAAezie,MAAOhW,KAAKsgT,YAAavqS,OAAQ/V,KAAK0wZ,cACrDgoF,EAAgBnxb,GAAYvnD,KAAK04e,eAgBrC,GAfIA,IACAD,EAAaC,EAAcv2Y,IAE/Bs2Y,EAAaA,MAEbn8c,EAAQouB,aAAe,SACvBpuB,EAAQ4zB,oBAAsB5zB,EAAQ6zB,kBAAoB,SAC1Dmob,EAAgB5ze,MAAMoqD,YAAcwpb,EAAgB5ze,MAAMw7B,KAAO,OACjEo4c,EAAgBl+d,UAAYkiB,GAC5BA,EAAQk4B,QAAQ,IAAI7kC,IACpB2M,EAAQm4B,QAAQn4B,EAAQo4B,aACxB1+C,EAAQyie,EAAWzie,MAAQyie,EAAWzie,aACnB9a,IAAd4B,EAAIkZ,MAAsBsmB,EAAQigB,WAAWvmC,WAAQ9a,IAAc8E,KAAKsgT,YAC7EvqS,EAAS0ie,EAAW1ie,OAAS0ie,EAAW1ie,cACpB7a,IAAf4B,EAAIiZ,OAAuBumB,EAAQigB,WAAWxmC,YAAS7a,IAAc8E,KAAK0wZ,kBACjEx1Z,IAAV8a,QAAkC9a,IAAX6a,EAAsB,CAC7C,IAAI4ie,EAAc3ie,EACd4ie,EAAe7ie,OACM7a,IAArB8E,KAAKsgT,YACLq4L,EAAc34e,KAAKsgT,YAActgT,KAAK64e,aAAarse,KAAOxM,KAAK64e,aAAapse,MAG5EuJ,GAASlZ,EAAI4H,MAAMsqD,iBAEG9zD,IAAtB8E,KAAK0wZ,aACLkoF,EAAe54e,KAAK0wZ,aAAe1wZ,KAAK64e,aAAanse,IAAM1M,KAAK64e,aAAalse,OAG7EoJ,GAAUjZ,EAAI4H,MAAMsqD,YAEpBypb,EAAWxgb,aAA+C,KAAhCwgb,EAAWxgb,YAAYjpC,OACjD4pd,GAAgB,IAEpB7kb,EAAK4kb,GAAer8c,EAAQtmB,OAASA,GACrCg+C,EAAK4kb,GAAgBt8c,EAAQvmB,QAAUA,GACnC0ie,EAAWxie,MACX89C,EAAK4kb,EAAcF,EAAWzie,MAC9Bg+C,EAAK4kb,EAAeH,EAAW1ie,QAEnCC,EAAQ2ie,EACR5ie,EAAS6ie,EACT7kb,EAAKC,EAAK3nD,KAAK+T,IAAI2zC,EAAIC,GACvBskb,EAAgBtie,MAAQA,EACxBsie,EAAgBvie,OAASA,EACzBumB,EAAQtmB,MAAQyie,EAAWzie,MAC3BsmB,EAAQvmB,OAAS0ie,EAAW1ie,OAC5B/V,KAAK84e,YAAY32Y,EAAQm2Y,EAAiBvkb,EAAIC,EAAIh+C,EAAOD,OAExD,CACD,IAAIolC,OAAc,EACdgnD,aAAkB9gD,KAClBlG,EAAc0E,GAAesiD,IAEjC7lE,EAAQtmB,MAAQmsF,EAAOnsF,SAAyBmlC,EAAYnlC,MAAQsmB,EAAQigB,WAAWvmC,MACvFsmB,EAAQvmB,OAASosF,EAAOpsF,UAA0BolC,EAAYplC,OAASumB,EAAQigB,WAAWxmC,OAE9FosF,EAAO5vF,QAAU8le,EACjBA,EAAWj+d,UAAYk+d,GACvBh8c,EAAQo2B,MAAQ2lb,EAAW3lb,OAAU3lD,EAAG,EAAGC,EAAG,GAC9Cqre,EAAW/0e,GAAKg5B,EAAQh5B,GAAK,UAC7B+0e,EAAW3ze,MAAMw7B,KAAOm4c,EAAW3ze,MAAMoqD,YAAc,cACvDupb,EAAWxse,QAAUs2F,EAAOz9F,MAAMsqD,YAAc,EAChDqpb,EAAWpse,QAAUk2F,EAAOz9F,MAAMsqD,YAAc,EAEhDhvD,KAAK+4e,qBAAqBN,EAAYzie,EAAOqie,GAC7CA,EAAW7jb,QAAQ,IAAI7kC,IACvB0od,EAAW5jb,QAAQ4jb,EAAW3jb,aAC9B+jb,EAAWzie,MAAQyie,EAAWzie,OAASsmB,EAAQigB,WAAWvmC,MAC1Dyie,EAAW1ie,OAAS0ie,EAAW1ie,QAAUumB,EAAQigB,WAAWxmC,OAC5DosF,EAAOniG,KAAK8mB,MAAQ2xd,EAEpBt2Y,EAAO3jC,WACP3jD,EAAU25C,QAAQ,IAAI7kC,GAAK7yB,EAAIkZ,MAAOlZ,EAAIiZ,SAC1C8E,EAAU45C,QAAQ55C,EAAU65C,eAGpCmib,EAAcz7e,UAAUo9e,aAAe,SAAU17e,EAAK+d,GAClDA,EAAU2rZ,iBAAkB,EAC5B,IAAIjwY,EACAl2B,EAAQvD,EAAIsd,SAChBS,EAAUT,YACV,IAAK,IAAIle,EAAI,EAAGA,EAAImE,EAAM7D,OAAQN,IAC1B8D,KAAK82e,YAAYz2e,EAAMnE,KACvB2e,EAAUT,SAAS5V,KAAKxE,KAAK82e,YAAYz2e,EAAMnE,IAAIqW,SAU3D,OAPAsI,EAAU25C,QAAQ,IAAI7kC,GAAK7yB,EAAIkZ,MAAOlZ,EAAIiZ,SAC1C8E,EAAU45C,QAAQ55C,EAAU65C,aACD,IAAvB75C,EAAU0b,OAAOxpB,GAAkC,IAAvB8N,EAAU0b,OAAOvpB,IAE7ConD,GAAat3D,GADby5B,EAAS1b,EAAU0b,QACMxpB,EAAGwpB,EAAOvpB,EAAGhN,KAAK82e,aAAa,EAAO92e,MAC/D6a,EAAY7a,KAAKw4e,aAAa17e,EAAK+d,IAEhCA,GAOXg8d,EAAcz7e,UAAU29e,qBAAuB,SAAUN,EAAYzie,EAAO1V,GACxE,GAAIm4e,GAAcA,EAAWxgb,aAAewgb,EAAWxgb,YAAYjpC,KAAM,CACrE,IAAImH,EAAc,IAAIo5B,GAEtBkpb,EAAWxgb,YAAYp+C,SAAW4+d,EAAWxgb,YAAYp+C,UAAY,WACrE4+d,EAAWxgb,YAAY/8C,KAAOu9d,EAAWxgb,YAAY/8C,MAAQ,mBAC7Dib,EAAYmG,QAAUm8c,EAAWxgb,YAAYjpC,KAC7CmH,EAAYngB,MAAQA,EACpBmgB,EAAYpgB,OAAS,GACrBogB,EAAYzxB,MAAMoqD,YAAc,cAChC34B,EAAYzxB,MAAMw7B,KAAO,cACzB/J,EAAYzxB,MAAMsqD,YAAc,EAChC74B,EAAYzxB,MAAMwqD,aAAeupb,EAAWxgb,YAAY/8C,KACxDib,EAAYzxB,MAAMk+B,aAAe61c,EAAWxgb,YAAYp+C,SACxDsc,EAAY6I,QAAWxyB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAC1DrM,EAAO8Z,SAAS5V,KAAK2xB,KAQ7B0gd,EAAcz7e,UAAU08e,cAAgB,SAAUL,EAAauB,GAC3D,IAAK,IAAI56e,EAAK,EAAGyE,EAAK40e,EAAYxib,QAAS72D,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC7D,IAAI+jG,EAASt/F,EAAGzE,GACX+jG,EAAO3jC,UACRx+D,KAAKm4e,mBAAmBh2Y,EAAQ62Y,KAS5CnC,EAAcz7e,UAAU47e,iBAAmB,SAAU70Y,EAAQpmB,EAAKi9Z,GAC9D,IAAI1rF,EACAv5V,EACAC,EACAilb,EAAqB92Y,EAAO5vF,QAAQ6H,SAAS,GAAGs6C,YAAY1+C,MAAQmsF,EAAOz9F,MAAMsqD,YACjFkqb,EAAsB/2Y,EAAO5vF,QAAQ6H,SAAS,GAAGs6C,YAAY3+C,OAASosF,EAAOz9F,MAAMsqD,YACnF1yB,EAAU6lE,EAAO5vF,QAAQ6H,SAAS,GAAGA,SAAS,GAClD,QAAiClf,IAA7B8E,KAAKm5e,cAAcnje,YAAqD9a,IAA9B8E,KAAKm5e,cAAcpje,OAAsB,CACnFkje,GAAsBj5e,KAAKm5e,cAAcnje,OAASije,GAAsB92Y,EAAOz9F,MAAMsqD,YACrFkqb,GAAuBl5e,KAAKm5e,cAAcpje,QAAUmje,GAAuB/2Y,EAAOz9F,MAAMsqD,YACxF+E,EAAKklb,EAAqB38c,EAAQigB,WAAWvmC,MAC7Cg+C,EAAKklb,EAAsB58c,EAAQigB,WAAWxmC,OAC9Cg+C,EAAKC,EAAK3nD,KAAK+T,IAAI2zC,EAAIC,GACvB,IAAIssP,EAAchkR,EAAQigB,WAAWvmC,MAAQ+9C,EACzC28V,EAAep0X,EAAQigB,WAAWxmC,OAASi+C,EAC/CmuC,EAAO5vF,QAAQ6H,SAAS,GAAGpE,MAAQije,EACnC92Y,EAAO5vF,QAAQ6H,SAAS,GAAGrE,OAASmje,EACpCl5e,KAAKo5e,wBAAwB98c,EAAS6lE,aAAkB3/C,IACxDxiD,KAAK84e,YAAY32Y,EAAQA,EAAO5vF,QAAQ6H,SAAS,GAAI25C,EAAIC,EAAIssP,EAAaowG,GAAc,GACxFuoF,EAAqB34L,EACrB44L,EAAsBxoF,EAE1B,IAAIqxB,GAAiBh1a,EAAGuvB,EAAQzwB,QAASmB,EAAGsvB,EAAQrwB,SACpDqwB,EAAQzwB,QAAUywB,EAAQrwB,QAAUk2F,EAAOz9F,MAAMsqD,YAAc,EAC/D1yB,EAAQo2B,OAAU3lD,EAAG,EAAGC,EAAG,GAC3BhN,KAAKo5e,wBAAwB98c,EAAS6lE,aAAkB3/C,IACxD,IACIthD,EADA8hK,EAAmBp9G,GAAkB,OAAS6zD,UAAa,OAAQxnG,MAAS,cAAevN,MAAS,wBAExGlE,SAASuL,KAAKpK,YAAYqhK,GAC1B,IAAIt+J,EAAQ,cACZ,GAA0B,WAAtBy9F,EAAOtnE,MAAMn0B,KAAmB,CAChC4mZ,EAASj0V,GAAiB,OACtB/1D,GAAI6+F,EAAO7+F,GAAK,WAChB0S,MAAO3J,KAAKqmB,KAAKumd,GAAsB,EACvClje,OAAQ1J,KAAKqmB,KAAKwmd,GAAuB,IAE7C,IAAIhhE,EAAW7+W,GAAiB,KAAO/1D,GAAI6+F,EAAO7+F,GAAK,OACvDgqZ,EAAO3rZ,YAAYu2a,GACnBl1Q,EAAiBrhK,YAAY2rZ,GAC7BttZ,KAAK+nF,YAAYqyV,cAAc99Y,EAAS47Y,OAAUh9a,OAAWA,EAAWoyZ,QAEvE,GAA0B,SAAtBnrT,EAAOtnE,MAAMn0B,KAClBxF,EAAMlB,KAAKq5e,cAAcl3Y,EAAQmrT,EAAQtqP,EAAkBk2U,EAAqBD,GAAoB,QAGpG,GAAI92Y,EAAO/nF,UACP+nF,EAAO/nF,SAAS5d,OAAS,GAAKksD,GAAay5C,EAAQ,OAAQniG,KAAK0hb,YAChExgb,EAAMlB,KAAKs5e,eAAen3Y,EAAQmrT,EAAQtqP,EAAkB7gE,EAAO5vF,QAAQgqC,WAAWxmC,OAAQosF,EAAO5vF,QAAQgqC,WAAWvmC,OAAO,OAE9H,CACDs3Y,EAASv6T,GAAeI,aAAagP,EAAO7+F,GAAK,WAA6E,GAAhE+I,KAAKqmB,KAAKumd,GAAsB92Y,EAAOz9F,MAAMsqD,YAAc,GAA0E,GAAjE3iD,KAAKqmB,KAAKwmd,GAAuB/2Y,EAAOz9F,MAAMsqD,YAAc,IAC9Lg0G,EAAiBrhK,YAAY2rZ,GAC7B5oZ,GAAS,wBACT4oZ,EAAO9pZ,aAAa,mBAAoB,OACxC,IAAIsO,EAAQ,EACRqwF,aAAkB9gD,KAClBvvC,EAAQ,KAEZw7Y,EAAOh6T,WAAW,MAAM6/P,aAAarhV,EAAO,EAAG,EAAGA,EAAO,EAAG,GAC5D9R,KAAK07b,gBAAgBthB,cAAc99Y,EAASgxX,OAAQpyZ,GAO5D,OAJEgG,IAA8B,SAAtBihG,EAAOtnE,MAAMn0B,MAAmBy7F,EAAO/nF,UAC1C+nF,EAAO/nF,SAAS5d,OAAS,GAAM0E,EAAMosZ,GAAQ9pZ,aAAa,QAASkB,GAC1E43B,EAAQzwB,QAAUk2a,EAAah1a,EAC/BuvB,EAAQrwB,QAAU81a,EAAa/0a,EACxBg2J,GAEX6zU,EAAcz7e,UAAUg+e,wBAA0B,SAAU98c,EAAS8yZ,GAC7D9yZ,EAAQliB,WAAag1a,IACrB9yZ,EAAQliB,SAAS,GAAG/M,UAAYy3Z,GAAUO,MAE9C/oY,EAAQk4B,QAAQ,IAAI7kC,IACpB2M,EAAQm4B,QAAQn4B,EAAQo4B,aACpBp4B,EAAQliB,WACRkiB,EAAQliB,SAAS,GAAG/M,UAAYy3Z,GAAUQ,SAGlDuxE,EAAcz7e,UAAUm+e,iBAAmB,SAAUp3Y,EAAQnsF,EAAOD,GAChE,IAAI/U,EAAUmhG,EAAO5vF,QAAQ6H,SAAS,GAAGA,SAAS,GAC9C40C,EAAcmzC,EAAOz9F,MAAMsqD,YAC/BhuD,EAAQgV,OAASA,GAAShV,EAAQgV,QAAUg5C,EAAc,GAC1DhuD,EAAQ+U,QAAUA,GAAU/U,EAAQ+U,SAAWi5C,EAAc,GAC7DmzC,EAAO5vF,QAAQiiD,QAAQ,IAAI7kC,IAC3BwyE,EAAO5vF,QAAQkiD,QAAQ0tC,EAAO5vF,QAAQmiD,cAO1Cmib,EAAcz7e,UAAU+8e,mBAAqB,SAAUh2Y,EAAQ62Y,EAAWl5U,GACtE,IAAI24U,EAAaz4e,KAAK82e,YAAY30Y,EAAO7+F,IAAItD,KAAK8mB,MAC9CuI,EAAOrvB,KAAKw5e,cAAcr3Y,EAAQs2Y,GAClCzie,EAAQqZ,EAAKrZ,MAAQ,EACrBD,EAASsZ,EAAKtZ,OAAS,EACvB8E,EAAY+qC,GAAkB,OAC9BtiD,GAAI6+F,EAAO7+F,GAAK,aAChBoB,MAAO,SAAWsR,EAAQ,aAAeD,EAAS,gCAClD2sB,MAAO+1c,EAAWxgb,YAAcwgb,EAAWxgb,YAAYjpC,KAAOmzE,EAAO7+F,KAEzE01e,EAAUr3e,YAAYkZ,GACtB,IAAIyyY,EACA4qB,EACAh3a,EACJ,GAA0B,WAAtBihG,EAAOtnE,MAAMn0B,KACb4mZ,EAASj0V,GAAiB,OACtB/1D,GAAI6+F,EAAO7+F,GACX0S,MAAO3J,KAAKqmB,KAAKyvE,EAAO5vF,QAAQgqC,WAAWvmC,OAAS,EACpDD,OAAQ1J,KAAKqmB,KAAKyvE,EAAO5vF,QAAQgqC,WAAWxmC,QAAU,IAE1Dmia,EAAW7+W,GAAiB,KAAO/1D,GAAI6+F,EAAO7+F,GAAK,OACnDgqZ,EAAO3rZ,YAAYu2a,GACnBr9Z,EAAUlZ,YAAY2rZ,GACtBttZ,KAAKu5e,iBAAiBp3Y,GACtBniG,KAAK+nF,YAAYqyV,cAAcj4U,EAAO5vF,QAAS2la,OAAUh9a,OAAWA,EAAWoyZ,QAE9E,GAA0B,SAAtBnrT,EAAOtnE,MAAMn0B,KAClBxF,EAAMlB,KAAKq5e,cAAcl3Y,EAAQmrT,EAAQzyY,EAAWsnF,EAAO5vF,QAAQgqC,WAAWxmC,OAAQosF,EAAO5vF,QAAQgqC,WAAWvmC,OAAO,QAGvH,GAAImsF,EAAO/nF,UACP+nF,EAAO/nF,SAAS5d,OAAS,GAAKksD,GAAay5C,EAAQ,OAAQniG,KAAK0hb,YAChExgb,EAAMlB,KAAKs5e,eAAen3Y,EAAQmrT,EAAQzyY,EAAWsnF,EAAO5vF,QAAQgqC,WAAWxmC,OAAQosF,EAAO5vF,QAAQgqC,WAAWvmC,OAAO,OAEvH,CACDs3Y,EAASv6T,GAAeI,aAAagP,EAAO7+F,GAAI+I,KAAKqmB,KAAoE,GAA9DyvE,EAAO5vF,QAAQgqC,WAAWvmC,MAAQmsF,EAAOz9F,MAAMsqD,cAAoB,EAAG3iD,KAAKqmB,KAAqE,GAA/DyvE,EAAO5vF,QAAQgqC,WAAWxmC,OAASosF,EAAOz9F,MAAMsqD,cAAoB,GAChNn0C,EAAUlZ,YAAY2rZ,GACtB,IAAIx7Y,EAAQ,EACRqwF,aAAkB9gD,KAClBvvC,EAAQ,KAEZw7Y,EAAOh6T,WAAW,MAAM6/P,aAAarhV,EAAO,EAAG,EAAGA,EAAO,EAAG,GAC5D9R,KAAK07b,gBAAgBthB,cAAcj4U,EAAO5vF,QAAS2la,GAAY5qB,OAAQpyZ,OAAWA,OAAWA,OAAWA,GAAW,GAG3H,IAAK4kK,EAAS,CACV,IAAI64U,EAAcx2Y,EAAO5vF,QAAQgqC,WAAWvmC,MAAQmsF,EAAOz9F,MAAMsqD,YAC7D4pb,EAAez2Y,EAAO5vF,QAAQgqC,WAAWxmC,OAASosF,EAAOz9F,MAAMsqD,YAC/DtqD,EAAQ,eACR2H,KAAKC,IAAItM,KAAK64e,aAAarse,MAAQwJ,EAAQ2ie,GAAe,GACxD,iBAAmBtse,KAAKC,IAAItM,KAAK64e,aAAanse,KAAOqJ,EAAS6ie,GAAgB,GAC9E,+DAON,OANItrF,aAAkBmsF,oBAClB/0e,GAAS,4BAEXxD,IAA8B,SAAtBihG,EAAOtnE,MAAMn0B,MAAmBy7F,EAAO/nF,UAC7C+nF,EAAO/nF,SAAS5d,OAAS,GAAM0E,EAAMosZ,GAAQ9pZ,aAAa,QAASkB,GACvEmW,EAAU/W,UAAUM,IAAI,sBACjByW,EAEX,OAAOyyY,GAEXupF,EAAcz7e,UAAUk+e,eAAiB,SAAUr7d,EAAMqvY,EAAQzyY,EAAW9E,EAAQC,EAAO0je,GACvF,IAAIx4e,EAAM0kD,GAAkB,OAAStiD,GAAM2a,EAAK3a,IAAMo2e,EAAY,oBAAsB,eACpFlxb,EAAY5C,GAAkB,OAC9BtiD,GAAM2a,EAAK3a,IAAMo2e,EAAY,qBAAuB,cACpDh1e,MAAS,SAAW2H,KAAKqmB,KAAK1c,EAAQ,GAAK,aAC3B3J,KAAKqmB,KAAK3c,EAAS,GAAK,uBACxC9D,MAAS,iBAET0hc,EAAe/tZ,GAAkB,OACjCtiD,GAAM2a,EAAK3a,IAAMo2e,EAAY,yBAA2B,kBACxDh1e,MAAS,SAAW2H,KAAKqmB,KAAK1c,EAAQ,GAAK,aAC3B3J,KAAKqmB,KAAK3c,EAAS,GAAK,yBAQ5C,OANAyyC,EAAU7mD,YAAYgyc,GACtBzyc,EAAIS,YAAY6mD,GAChB8kW,EAASv6T,GAAeI,aAAcumZ,EAAaz7d,EAAK3a,GAAK,WAAc2a,EAAK3a,GAAK+I,KAAKqmB,KAAK1c,GAAS,EAAG3J,KAAKqmB,KAAK3c,GAAU,GAC/H7U,EAAIS,YAAY2rZ,GAChBzyY,EAAUlZ,YAAYT,GACtBlB,KAAK07b,gBAAgBthB,cAAcn8Z,EAAK1L,QAAQ6H,SAAS,GAAGA,SAAS,GAAIkzY,EAAQ9kW,GAC1EtnD,GAEX21e,EAAcz7e,UAAUi+e,cAAgB,SAAUl3Y,EAAQmrT,EAAQzyY,EAAW9E,EAAQC,EAAO0je,GACxF,IAAIx4e,EAAM0kD,GAAkB,OACxBtiD,GAAM6+F,EAAO7+F,IAAMo2e,EAAY,oBAAsB,eAErDlxb,EAAY5C,GAAkB,OAC9BtiD,GAAM6+F,EAAO7+F,IAAMo2e,EAAY,qBAAuB,cACtDh1e,MAAS,SAAW2H,KAAKqmB,KAAK1c,EAAQ,GAAK,aAC3B3J,KAAKqmB,KAAK3c,EAAS,GAAK,uBACxC9D,MAAS,iBAET0hc,EAAe/tZ,GAAkB,OACjCtiD,GAAM6+F,EAAO7+F,IAAMo2e,EAAY,yBAA2B,kBAC1Dh1e,MAAS,SAAW2H,KAAKqmB,KAAK1c,EAAQ,GAAK,aAC3B3J,KAAKqmB,KAAK3c,EAAS,GAAK,yBAU5C,OARAyyC,EAAU7mD,YAAYgyc,GACtBzyc,EAAIS,YAAY6mD,GAChB8kW,EAASv6T,GAAeI,aAAagP,EAAO7+F,GAAI+I,KAAKqmB,KAAoE,GAA9DyvE,EAAO5vF,QAAQgqC,WAAWvmC,MAAQmsF,EAAOz9F,MAAMsqD,cAAoB,EAAG3iD,KAAKqmB,KAAqE,GAA/DyvE,EAAO5vF,QAAQgqC,WAAWxmC,OAASosF,EAAOz9F,MAAMsqD,cAAoB,GAChNn0C,EAAUlZ,YAAY2rZ,GACtBA,EAAOh6T,WAAW,MAAM6/P,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GACpDjyV,EAAIS,YAAY2rZ,GAChBzyY,EAAUlZ,YAAYT,GACtBlB,KAAK07b,gBAAgBthB,cAAcj4U,EAAO5vF,QAAQ6H,SAAS,GAAGA,SAAS,GAAIkzY,EAAQ9kW,GAC5EtnD,GAEX21e,EAAcz7e,UAAUo+e,cAAgB,SAAUr3Y,EAAQs2Y,GACtD,IAAIzie,EAAQmsF,EAAO5vF,QAAQgqC,WAAWvmC,MAClCD,EAASosF,EAAO5vF,QAAQgqC,WAAWxmC,OASvC,OARK/V,KAAKsgT,aAAgBtgT,KAAK0wZ,cAK3B16Y,EAAQhW,KAAKsgT,YACbvqS,EAAS1J,KAAKC,IAAItM,KAAK0wZ,aAAc36Y,KALrCC,GAAShW,KAAK64e,aAAarse,KAAOxM,KAAK64e,aAAapse,MAAQ01F,EAAOz9F,MAAMsqD,YACzEj5C,GAAU/V,KAAK64e,aAAanse,IAAM1M,KAAK64e,aAAalse,OAASw1F,EAAOz9F,MAAMsqD,aAMvE,IAAIr/B,GAAK3Z,EAAOD,IAI3B8ge,EAAcz7e,UAAUo0E,iBAAmB,SAAU3uE,GACjD,IAAIoL,EACAJ,EACAq7T,EACJ,IAAiC,IAA7BrmU,EAAE6F,KAAKnI,QAAQ,SAAiB,CAEhC,IAAI2N,GADJg7T,EAAWrmU,GACUmjE,eAAe,GAAGlK,QACnChuD,EAAQo7T,EAASljQ,eAAe,GAAGnK,QACvC5tD,EAAUC,EAAQlM,KAAKgB,QAAQoT,UAC/BvI,EAAUC,EAAQ9L,KAAKgB,QAAQmT,gBAG/BlI,EAAUpL,EAAEi5D,QAAU95D,KAAKgB,QAAQoT,UACnCvI,EAAUhL,EAAEg5D,QAAU75D,KAAKgB,QAAQmT,WAEvC,OAASpH,EAAGlB,EAASmB,EAAGf,IAE5B4qe,EAAcz7e,UAAUyqU,UAAY,SAAUhlU,EAAG+4D,IACzC55D,KAAK25e,mBAAuB35e,KAAKk8c,gBAC9Bl8c,KAAKk8c,eAAe54c,GAAK,eAAiBtD,KAAK25e,kBAAkBr2e,KACpEtD,KAAK25e,kBAAkB71e,UAAUS,OAAO,kBACxCvE,KAAK25e,kBAAkBj1e,MAAM0pD,gBAAkB,GAC/CpuD,KAAK25e,kBAAoB,MAE7B,IAAIr2e,EAAKzC,EAAEsG,OAAO7D,GAAGpG,MAAM,cAAc,GACzC,GAAI8C,KAAK82e,YAAYxze,GAAK,CACtB,IAAIuX,EAAYra,SAAS2uB,eAAe7rB,EAAK,cAC7CuX,EAAU/W,UAAUM,IAAI,kBACxBpE,KAAK25e,kBAAoB9+d,EAE7Bha,EAAE8kB,kBAENkxd,EAAcz7e,UAAU6mb,QAAU,SAAUlmW,GACxC,GAAIA,GAAOA,EAAI50E,OACX,GAA0B,eAAtB40E,EAAI69Z,WAAWt2e,GAAqB,CACpC,IAAItC,EAAUR,SAAS2uB,eAAe,cAClCnuB,EAAQ8C,UAAUK,SAAS,wBAC3BnD,EAAQqC,UAAY,sCACpB7C,SAAS2uB,eAAe,aAAapyB,MAAQ,GAC7CiD,KAAK65e,cAAc,SAGtB,CACD,IAAIv2e,EAAKy4E,EAAI50E,OAAO7D,GAAGpG,MAAM,cAAc,GAC3C,GAAIoG,GAAMtD,KAAKk8c,eAAgB,CAC3B,IAAIj8c,GAAS+I,SAAUhJ,KAAKk8c,eAAe54c,GAAIgE,SAAUhE,GAEzDtD,KAAK2mB,QADS,yBACQ1mB,GACtB87E,EAAIp2D,oBAKpBkxd,EAAcz7e,UAAUkjJ,MAAQ,SAAUviE,GACtC,IAAIh8E,EAAQC,KACZ,GAAIA,KAAKi3e,aAAc,CACnB,IAAI6C,EAAY95e,KACFQ,SAAS2uB,eAAe,cAC9B9rB,UAAY,iDAChB04E,GAAoB,UAAZA,EAAI1+E,KAAmC,KAAhB0+E,EAAI5zD,SAM/BnoB,KAAKwrB,OACLtrB,aAAaF,KAAKwrB,OAEtBxrB,KAAKwrB,MAAQrrB,WAAW,WAChB47E,EAAI50E,kBAAkB4ye,mBACtBD,EAAUD,cAAc99Z,EAAI50E,OAAOpK,OACnCgD,EAAMyrB,MAAQ,OAEnB,MAbCuwD,EAAI50E,kBAAkB4ye,kBACtB/5e,KAAK65e,cAAc99Z,EAAI50E,OAAOpK,SAgB9C85e,EAAcz7e,UAAU0mb,UAAY,SAAU/lW,GAC1C,IAAIz4E,EAAKy4E,EAAI50E,OAAO7D,GAAGpG,MAAM,cAAc,GAC3C,GAAI8C,KAAKk8c,eAAgB,CACrB,IAAI89B,EAAYx5e,SAAS2uB,eAAenvB,KAAKk8c,eAAe54c,GAAK,cAC7DA,IAAOtD,KAAKk8c,eAAe54c,IAAM02e,GACjCA,EAAUl2e,UAAUS,OAAO,sBAE3BsW,EAAYra,SAAS2uB,eAAenvB,KAAKk8c,eAAe54c,GAAK,iBAE7DuX,EAAUnW,MAAM0pD,gBAAkB,IAEtCpuD,KAAKk8c,eAAiB,KAE1B,GAAIl8c,KAAK82e,YAAYxze,GAAK,CACtB,IAAIuX,GAAAA,EAAYra,SAAS2uB,eAAe7rB,EAAK,eACnCQ,UAAUM,IAAI,qBACxBpE,KAAKk8c,eAAiBl8c,KAAK82e,YAAYxze,GACvCy4E,EAAIp2D,mBAKZkxd,EAAcz7e,UAAU6+e,cAAgB,WAChCj6e,KAAKs3e,YACLt3e,KACKy5G,UAAY,IAAIzF,GAAUh0G,KAAKgB,SAChCg1G,WAAY,sBACZ9mG,OAAQlP,KAAKkP,OACbqnG,UAAWv2G,KAAKu2G,UAChBqC,SAAU54G,KAAK44G,SACfrB,KAAM,SAAUt3G,GACZ,IACIK,EAASi5D,GAAat5D,EAAW,OAAG,eACxC,GAAIK,GAAUA,EAAOwD,UAAUK,SAAS,aAAc,CAElD7D,EAAkB,cAAE,GAAG2sc,UAAUz5D,KAAKvzY,KAG9Cs5G,UAAY/sG,KAAMxM,KAAKm5e,cAAcxte,OAAOoB,EAAGL,IAAK1M,KAAKm5e,cAAcxte,OAAOqB,OAI1F6pe,EAAcz7e,UAAUm7G,UAAY,SAAU11G,GAC1C,IAAIG,EAAUhB,KAAKkP,OAAO,GACtBlO,GACAA,EAAQwC,aAAa,YAAaxD,KAAKgB,QAAQsC,KAGvDuze,EAAcz7e,UAAUw9G,SAAW,SAAU/3G,GACpC04D,GAAa14D,EAAEsG,OAAQ,cACxB5C,EAAO1D,EAAEqO,SAKjB2ne,EAAcz7e,UAAU09e,YAAc,SAAU32Y,EAAQm2Y,EAAiBvkb,EAAIC,EAAIh+C,EAAOD,EAAQ+pJ,GAC5F,GAAI39D,aAAkB9gD,GAAW,CAC7B,IAAI9uC,EAAU4vF,EAAO5vF,QACrB4vF,EAAO5vF,QAAU+le,EAAgBl+d,SAAS,GAI1C,IAAK,IAHDuZ,EAAQwuE,EAAO/6C,MAAM2M,EAAIC,EAAIh+C,EAAOD,EAAQuie,EAAgBl+d,SAAS,IACrEg9B,EAAOphC,EAAQ,EAAIsie,EAAgBl+d,SAAS,GAAGA,SAAS,GAAGvO,QAAU8nB,EAAM5mB,EAAI,EAC/Ei8a,EAAOjza,EAAS,EAAIuie,EAAgBl+d,SAAS,GAAGA,SAAS,GAAGnO,QAAU0nB,EAAM3mB,EAAI,EAC3E5O,EAAK,EAAGyE,EAAKy1e,EAAgBl+d,SAAS,GAAGA,SAAUhc,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC9E,IAAIiC,EAAQwC,EAAGzE,GACfiC,EAAMwL,SAAWurC,EACjB/2C,EAAM4L,SAAW+8a,EACjB3ob,EAAMmla,YAAa,EAEvBrjU,EAAO5vF,QAAUA,OAEhB,GAAI4vF,EAAOtnE,iBAAiBm1Y,IAAahwa,KAAKoxa,WAAY,CACvD7+Z,EAAU4vF,EAAO5vF,QACrB4vF,EAAO5vF,QAAU+le,EACjBA,EAAgBl+d,SAAS,GAAGpE,MAAQA,EACpCsie,EAAgBl+d,SAAS,GAAGrE,OAASA,EACrC/V,KAAKoxa,WAAWypC,YAAa7kc,MAAOA,EAAOD,OAAQA,GAAUosF,EAAQA,EAAQ,MAC7EA,EAAO5vF,QAAUA,OAGjB,GAAI4vF,EAAO/nF,SAAU,CACjB,IAAI3Z,EAAa0hG,EAAO/nF,SACpBk7C,EAAI,EACJC,EAAI,EACR,IAAKuqG,EAGD,IAAK,IAFDv/J,OAAO,EACPsa,OAAY,EACP3e,EAAI,EAAGA,EAAIuE,EAAWjE,OAAQN,KACnC2e,EAAYy9d,EAAgBl+d,SAAS,GAAGA,SAASle,MAEzC2e,EAAUT,SAAS,GAAGA,UACtBpa,KAAKk6e,aAAar/d,GAEtBta,EAAOP,KAAK82e,YAAYj8d,EAAUvX,IAClCuX,EAAU7E,MAAQzV,EAAKyV,MACvB6E,EAAU9E,OAASxV,EAAKwV,OACxB8E,EAAU25C,QAAQ,IAAI7kC,IACtB9U,EAAU45C,QAAQ55C,EAAUT,SAAS,GAAGs6C,cAQpD,GAJAY,EAAIt/C,EAAQsie,EAAgBl+d,SAAS,GAAGs6C,YAAY1+C,MACpDu/C,EAAIx/C,EAASuie,EAAgBl+d,SAAS,GAAGs6C,YAAY3+C,OACrDuie,EAAgBl+d,SAAS,GAAGo6C,QAAQ,IAAI7kC,IACxC2od,EAAgBl+d,SAAS,GAAGq6C,QAAQ6jb,EAAgBl+d,SAAS,GAAGs6C,cAC3DorG,EAEI,CAAA,IADD1lJ,OAAW,EACf,IAASle,EAAI,EAAGA,EAAIuE,EAAWjE,OAAQN,KACnCke,EAAWk+d,EAAgBl+d,SAAS,GAAGA,SAASle,MAExCke,EAASA,SAAS,GAAGA,UACrBpa,KAAKm6e,cAAc//d,EAAUk7C,EAAGC,EAAG4sC,GAEvCniG,KAAKo6e,WAAWhge,EAAUk7C,EAAGC,EAAG4sC,IAI5C,GAAI29D,EAAS,CACLv/J,OAAO,EAIN,IAHD64d,OAAa,EACbC,OAAc,EAElB,IADIj/c,OAAW,EACNle,EAAI,EAAGA,EAAIuE,EAAWjE,OAAQN,IACnCqE,EAAOP,KAAK82e,YAAYr2e,EAAWvE,IACnCk9d,EAAapjd,EAAQmsF,EAAO5vF,QAAQ6H,SAAS,GAAGs6C,YAAY1+C,MAC5Dqjd,EAActjd,EAASosF,EAAO5vF,QAAQ6H,SAAS,GAAGs6C,YAAY3+C,QAC9DqE,EAAWk+d,EAAgBl+d,SAAS,GAAGA,SAASle,MAExCke,EAASA,SAAS,GAAGA,UACrBpa,KAAKm6e,cAAc//d,EAAUg/c,EAAYC,EAAal3X,GAAQ,GAElEniG,KAAKo6e,WAAWhge,EAAUg/c,EAAYC,EAAal3X,GAAQ,IAGnEA,EAAO5vF,QAAQ6H,SAAS,GAAGo6C,QAAQ,IAAI7kC,IACvCwyE,EAAO5vF,QAAQ6H,SAAS,GAAGq6C,QAAQ0tC,EAAO5vF,QAAQ6H,SAAS,GAAGs6C,mBAIlEZ,GAAawkb,EAAgBl+d,SAAS,GAAI25C,EAAIC,EAAIskb,IAI9DzB,EAAcz7e,UAAU++e,cAAgB,SAAUt/d,EAAWy6C,EAAGC,EAAG4sC,EAAQ29D,GAEvE,IAAK,IADDz/J,EACKnE,EAAI,EAAGA,EAAI2e,EAAUT,SAAS5d,OAAQN,KAC3CmE,EAAQwa,EAAUT,SAASle,IAChBke,SAAS,GAAGA,SAInBpa,KAAKm6e,cAAc95e,EAAOi1D,EAAGC,EAAG4sC,EAAQ29D,GAHxC9/J,KAAKo6e,WAAW/5e,EAAOi1D,EAAGC,EAAG4sC,EAAQ29D,IAOjD+2U,EAAcz7e,UAAU8+e,aAAe,SAAUr/d,GAG7C,IAAK,IAFDw/d,EACA95e,EACKrE,EAAI,EAAGA,EAAI2e,EAAUT,SAAS5d,OAAQN,KAC3Cm+e,EAAiBx/d,EAAUT,SAASle,IAChBke,SAAS,GAAGA,SAQ5Bpa,KAAKk6e,aAAaG,IAPlB95e,EAAOP,KAAK82e,YAAYuD,EAAe/2e,IACvC+2e,EAAerke,MAAQzV,EAAKyV,MAC5Bqke,EAAetke,OAASxV,EAAKwV,OAC7Bske,EAAe7lb,QAAQ,IAAI7kC,IAC3B0qd,EAAe5lb,QAAQ4lb,EAAejge,SAAS,GAAGs6C,eAO9Dmib,EAAcz7e,UAAUg/e,WAAa,SAAU/5e,EAAOi1D,EAAGC,EAAG4sC,EAAQ29D,GAChEz/J,EAAM2V,MAAQ3V,EAAM2V,MAAQs/C,EAC5Bj1D,EAAM0V,OAAU1V,EAAM0V,OAASw/C,EAC/Bl1D,EAAMwL,QAAUi0J,EAAWz/J,EAAMwL,QAAUypD,EAAK6sC,EAAOz9F,MAAMsqD,YAAe3uD,EAAMwL,QAAUypD,EAAK6sC,EAAOz9F,MAAMsqD,YAAc,EAC5H3uD,EAAM4L,QAAU6zJ,EAAWz/J,EAAM4L,QAAUspD,EAAK4sC,EAAOz9F,MAAMsqD,YAAe3uD,EAAM4L,QAAUspD,EAAK4sC,EAAOz9F,MAAMsqD,YAAc,EAC5H3uD,EAAMm0D,QAAQ,IAAI7kC,IAClBtvB,EAAMo0D,QAAQp0D,EAAM+Z,SAAS,GAAGs6C,cAEpCmib,EAAcz7e,UAAU+7e,gBAAkB,WACtCn3e,KAAKk3e,iBAAiBx3a,SACtB1/D,KAAKq3e,iBACLr3e,KAAKk3e,iBAAiB1vb,YAE1Bqvb,EAAcz7e,UAAUi8e,eAAiB,WACrC,IAAK,IAAIn7e,EAAI,EAAGA,EAAI8D,KAAKg1D,SAASx4D,OAAQN,IAAK,CAC3C,IAAIo+e,EAAWt6e,KAAKg1D,SAAS94D,GAC7B8D,KAAKw3e,YAAY8C,GACjBt6e,KAAK43e,cAAc0C,KAG3BzD,EAAcz7e,UAAU2zY,cAAgB,WACpC,IAAIwrG,EAAY30b,GAAkB,OAAStiD,GAAItD,KAAKgB,QAAQsC,GAAK,YACjEi3e,EAAU/2e,aAAa,QAAS,qCAChC+2e,EAAUl3e,UAAY,gBACtBrD,KAAKgB,QAAQW,YAAY44e,GACzB,IAAIC,EAAU50b,GAAkB,YAChC40b,EAAQvzd,YAAc,gBACtBuzd,EAAQl3e,GAAK,YACbk3e,EAAQh3e,aAAa,QAAS,0BAC9Bg3e,EAAQn3e,UAAY,UACpBk3e,EAAU54e,YAAY64e,GACtB,IAAI/ya,EAAO7hB,GAAkB,QAAUtiD,GAAI,aAAcD,UAAW,wCACpEk3e,EAAU54e,YAAY8lE,IAE1Bova,EAAcz7e,UAAUy+e,cAAgB,SAAU98e,GAC9C,IAEI86e,EAFAJ,KACAz2e,EAAUR,SAAS2uB,eAAe,iBAGtC,GAAInuB,EACA,IAAK,IAAIslB,EAAItlB,EAAQoZ,SAAS5d,OAAS,EAAG8pB,GAAK,EAAGA,IAC9CtlB,EAAQsE,YAAYtE,EAAQoZ,SAASkM,IAI7C,IAAK,IAAIpqB,EAAI,EAAGA,EAAI8D,KAAKg1D,SAASx4D,OAAQN,IAEtC,IAAK,IADDg8e,EAAqBl4e,KAAKg1D,SAAS94D,GAC9BwnB,EAAI,EAAGA,EAAIw0d,EAAmBjjb,QAAQz4D,OAAQknB,IAAK,CACxD,IAAIzF,EAAOi6d,EAAmBjjb,QAAQvxC,GACxB,KAAV3mB,IAAwE,IAAxDkhB,EAAK3a,GAAGsS,cAAcrX,QAAQxB,EAAM6Y,gBACpD6he,EAAYjze,KAAKyZ,GAI7B,IAAIw8d,EAAgBlzb,GAAYvnD,KAAKy6e,eAUrC,GATIA,IACAhD,EAAcgD,EAAchD,QAG3Bz2e,IAEDA,EADA62e,EAAa73e,KAAK06e,oBAAoB7C,IAItCJ,EAAYj7e,OAAS,EACrB,IAAK,IAAI4B,EAAK,EAAGu8e,EAAgBlD,EAAar5e,EAAKu8e,EAAcn+e,OAAQ4B,IAAM,CAC3E,IAAI+jG,EAASw4Y,EAAcv8e,GAC3B4B,KAAKm4e,mBAAmBh2Y,EAAQnhG,QAGnC,GAAc,KAAVjE,EAAc,CACnB,IAAI69e,EAAWh1b,GAAkB,OAAStiD,GAAM,WAAYoB,MAAS,wCACrEk2e,EAAS54e,UAAY,sBACrBhB,EAAQW,YAAYi5e,OAEnB,CACep6e,SAAS2uB,eAAe,cAC9B9rB,UAAY,sCACtBrD,KAAKk3e,iBAAiBtlb,WAAW,KAGzCilb,EAAcz7e,UAAUs/e,oBAAsB,SAAU7C,GACpDA,EAAajyb,GAAkB,OAAStiD,GAAM,gBAAiBoB,MAAS,gCACxE1E,KAAKgB,QAAQW,YAAYk2e,GAMzB,OADA73e,KAAKk3e,iBAAiBr0R,SAHlB/3H,OAAQ,iBAAkBslH,UAAU,EACpC9zK,QAAS,kBAEoC,GAC1Cu7c,GAKXhB,EAAcz7e,UAAUspB,WAAa,WACjC,IAAIg8F,EAAal1G,GAAQ6kF,gBACrBs1O,EAAYn6T,GAAQ+kF,cACpB6wB,EAAY51G,GAAQ8kF,eAGxB/qF,GAAanB,IAAIpE,KAAKgB,QAAS0/G,EAAY1gH,KAAK8hb,UAAW9hb,MAC3DuF,GAAanB,IAAIpE,KAAKgB,QAASogH,EAAWphH,KAAK6lU,UAAW7lU,MAC1DuF,GAAanB,IAAIpE,KAAKgB,QAAS2kU,EAAW3lU,KAAKiib,QAASjib,MACxDuF,GAAanB,IAAIpE,KAAKgB,QAJP,QAI0BhB,KAAKs+I,MAAOt+I,MAErDA,KAAKi6e,iBAKTpD,EAAcz7e,UAAU6pH,aAAe,WACnC,IAAIvE,EAAal1G,GAAQ6kF,gBACrBs1O,EAAYn6T,GAAQ+kF,cACpB6wB,EAAY51G,GAAQ8kF,eAGxB/qF,GAAahB,OAAOvE,KAAKgB,QAAS0/G,EAAY1gH,KAAK8hb,WACnDv8a,GAAahB,OAAOvE,KAAKgB,QAASogH,EAAWphH,KAAK6lU,WAClDtgU,GAAahB,OAAOvE,KAAKgB,QAAS2kU,EAAW3lU,KAAKiib,SAClD18a,GAAahB,OAAOvE,KAAKgB,QAJV,QAI6BhB,KAAKs+I,QAErDttD,IACI9pF,EAAS,MACV2ve,EAAcz7e,UAAW,iBAAa,GACzC41F,IACI9pF,EAAS,SACV2ve,EAAcz7e,UAAW,aAAS,GACrC41F,IACI9pF,EAAS,SACV2ve,EAAcz7e,UAAW,cAAU,GACtC41F,IACI3oF,KAAesue,KAChBE,EAAcz7e,UAAW,gBAAY,GACxC41F,IACI9pF,KACD2ve,EAAcz7e,UAAW,qBAAiB,GAC7C41F,IACI9pF,KACD2ve,EAAcz7e,UAAW,qBAAiB,GAC7C41F,IACI9pF,KACD2ve,EAAcz7e,UAAW,yBAAqB,GACjD41F,IACI9pF,KACD2ve,EAAcz7e,UAAW,mBAAe,GAC3C41F,IACI9pF,KACD2ve,EAAcz7e,UAAW,oBAAgB,GAC5C41F,IACIjpF,GAAUyE,KAAM,GAAIC,MAAO,GAAIC,IAAK,GAAIC,OAAQ,IAAMk3N,KACvDgzQ,EAAcz7e,UAAW,oBAAgB,GAC5C41F,IACI9pF,GAAS,IACV2ve,EAAcz7e,UAAW,iBAAa,GACzC41F,IACIjpF,KAAY6ue,KACbC,EAAcz7e,UAAW,qBAAiB,GAC7C41F,IACI9pF,GAAS,IACV2ve,EAAcz7e,UAAW,oBAAgB,GAC5C41F,IACI9pF,GAAS,IACV2ve,EAAcz7e,UAAW,uBAAmB,GAC/C41F,IACI9pF,EAAS,aACV2ve,EAAcz7e,UAAW,kBAAc,GAC1C41F,IACIloF,KACD+te,EAAcz7e,UAAW,8BAA0B,GACtD41F,IACI9pF,KACD2ve,EAAcz7e,UAAW,uBAAmB,GAC/C41F,IACI9pF,KACD2ve,EAAcz7e,UAAW,4BAAwB,GAC7Cy7e,GACTjlY,IC1tCEnhB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GA+B5D07c,GAA0B,SAAUvpZ,GAEpC,SAASupZ,EAAS7ne,EAAShS,GACvB,IAAIjB,EAAQuxF,EAAOhwF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAiBnD,OAfAD,EAAMsgC,KAAO,SAEbtgC,EAAMuD,GAAK,WACXvD,EAAMk3X,WAAa,GACnBl3X,EAAMugD,WAAa,KACnBvgD,EAAMkyB,aAAe,KACrBlyB,EAAM6wU,UAAY,KAClB7wU,EAAMqnD,MAAQ,KACdrnD,EAAMuhb,UAAW,EACjBvhb,EAAM+6e,cAAgB,EACtB/6e,EAAM2mD,iBAAmB,EACzB3mD,EAAM6mD,eAAiB,EACvB7mD,EAAMssB,SACNtsB,EAAM1D,OAAQ,EACd0D,EAAMssB,OAAUrW,MAAOjW,EAAMiW,MAAOD,OAAQhW,EAAMgW,QAC3ChW,EAy0BX,OA51BA0wF,GAAUoqZ,EAAUvpZ,GA0BpBupZ,EAASz/e,UAAUuyF,kBAAoB,SAAUkF,EAASC,GACtD,IACK,IAAI10F,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKu1F,GAAUz0F,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,WACD4B,KAAK8tT,UAAUj7N,EAAQ9gD,UACvB,MACJ,IAAK,QACL,IAAK,SACD/xC,KAAK+6e,eACL/6e,KAAK8tT,UAAU9tT,KAAK+xC,aASpC8oc,EAASz/e,UAAUy3G,eAAiB,WAEhC,OAAO7yG,KAAKqzG,cADK,YAMrBwnY,EAASz/e,UAAUqX,UAAY,WAC3BzS,KAAKgB,QAAQ0D,MAAM8oB,WAAa,cAChCxtB,KAAKilH,eACLjlH,KAAK0kB,cAETm2d,EAASz/e,UAAUg3G,OAAS,WACxBpyG,KAAK07b,gBAAkB,IAAIpiB,GAAgBt5a,KAAKgB,QAAQsC,GAAI,IAAIitB,IAAe,GAC/EvwB,KAAK+6e,eACL/6e,KAAK8tT,UAAU9tT,KAAK+xC,WAExB8oc,EAASz/e,UAAUsyb,aAAe,SAAUukB,GAQxC,OANIA,EAAK/kc,WAAW3O,QAAQ,MAAQ,GAAK0zc,EAAK/kc,WAAW3O,QAAQ,KAAO,EAC7D0zc,EAAK/kc,WAGL+kc,EAAK/kc,WAAa,MAIjC2te,EAASz/e,UAAU2/e,aAAe,SAAU/ne,GACxC,IAAIs6Y,EAAS9sZ,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,GAAK,WAClDgqZ,IACDA,EAAS1nW,GAAkB,UAC3B5lD,KAAKgB,QAAQW,YAAY2rZ,IAQ7Bl0V,GAAiBk0V,GALbhqZ,GAAMtD,KAAKgB,QAAQsC,GAAK,UAAW2O,MAAS,UAC5CvN,MAAS,6BAA+B1E,KAAK0tb,aAAa1tb,KAAKqsB,MAAMtW,QAAU,WAC3E/V,KAAK0tb,aAAa1tb,KAAKqsB,MAAMrW,OAC7B,sDAGRhW,KAAKgB,QAAQwC,aAAa,WAAYkmB,OAAO,IAC7C1pB,KAAKgB,QAAQ0D,MAAMmV,SAAW,SAC9B7Z,KAAKgB,QAAQ0D,MAAMqR,OAAS2T,OAAO1pB,KAAKqsB,MAAMtW,QAC9C/V,KAAKgB,QAAQ0D,MAAMsR,MAAQ0T,OAAO1pB,KAAKqsB,MAAMrW,OAC7ChW,KAAKstZ,OAASA,GAElButF,EAASz/e,UAAU0yT,UAAY,SAAUxqT,GACrC,IAAItC,EAAUR,SAAS2uB,eAAe7rB,GAEtC,GAAItD,KAAKM,OAAQ,CACb,IAAI06e,EAAYh7e,KAAKM,OACrBN,KAAKM,OAAS,KACd06e,EAAUhiC,YAAY,KAAMh5c,KAAKgB,QAAQsC,IACzCtD,KAAKi7e,eAAej7e,MAExBA,KAAKM,OAASN,KAAKk7e,WAAWl6e,EAPf,iBAQXhB,KAAKM,QACLN,KAAKM,OAAO04c,YAAYh5c,OAGhC66e,EAASz/e,UAAU8/e,WAAa,SAAUl6e,EAASuF,GAG/C,IAAK,IAFD+pC,EACAk0H,EAAIxjK,EAAQuF,GAAU/J,OACjBN,EAAI,EAAGA,EAAIsoK,EAAGtoK,IACnB,GAAIusD,GAASznD,EAAQuF,GAAUrK,GAAG8E,QAAS,aAAc,CACrDsvC,EAAUtvC,EAAQuF,GAAUrK,GAC5B,MAGR,OAAOo0C,GAEXuqc,EAASz/e,UAAU6pH,aAAe,WAC9B,IAAI1nH,EAAQiO,GAAQ6kF,gBAChBb,EAAOhkF,GAAQ8kF,eAEf12D,EAASpuB,GAAQC,UAAY,eAAiB,aAC9C0kW,EAAgB3kW,GAAQC,UAGxBqT,GAFatT,GAAQsb,KAAKyQ,KAEnB/rB,GAAQ+kF,eACnBhrF,GAAahB,OAAOvE,KAAKgB,QAASzD,EAAOyC,KAAK8hb,WAC9Cv8a,GAAahB,OAAOvE,KAAKgB,QAASwuF,EAAMxvF,KAAK6lU,WAC7CtgU,GAAahB,OAAOvE,KAAKgB,QAAS8d,EAAM9e,KAAKiib,SAC7C18a,GAAahB,OAAOvE,KAAKgB,QAAS44B,EAAQ55B,KAAKm7e,iBAC/C51e,GAAahB,OAAO3I,OAAQ,SAAUoE,KAAKutb,cAC3C,IAAI1ya,EAAYra,SAAS2uB,eAAenvB,KAAK+xC,SAAW,WACpDl3B,GACAtV,GAAahB,OAAOsW,EAAW,SAAU7a,KAAK2xb,WAGtDkpD,EAASz/e,UAAUspB,WAAa,WAC5B,IAAInnB,EAAQiO,GAAQ6kF,gBAChBvxE,EAAOtT,GAAQ+kF,cACff,EAAOhkF,GAAQ8kF,eACf12D,EAASpuB,GAAQC,UAAY,eAAiB,aAC9C0kW,EAAgB3kW,GAAQC,UACXD,GAAQsb,KAAKyQ,KAE9BhyB,GAAanB,IAAIpE,KAAKgB,QAASzD,EAAOyC,KAAK8hb,UAAW9hb,MACtDuF,GAAanB,IAAIpE,KAAKgB,QAASwuF,EAAMxvF,KAAK6lU,UAAW7lU,MACrDuF,GAAanB,IAAIpE,KAAKgB,QAAS8d,EAAM9e,KAAKiib,QAASjib,MACnDuF,GAAanB,IAAIpE,KAAKgB,QAAS44B,EAAQ55B,KAAKm7e,gBAAiBn7e,MAC7DuF,GAAanB,IAAIxI,OAAQ,SAAUoE,KAAKutb,aAAcvtb,MACtD,IAAI6a,EAAYra,SAAS2uB,eAAenvB,KAAK+xC,SAAW,WACpDl3B,GACAtV,GAAanB,IAAIyW,EAAW,SAAU7a,KAAK2xb,SAAU3xb,OAS7D66e,EAASz/e,UAAU89c,eAAiB,SAAUtsV,GAC1CA,EAAK0gS,OAASttZ,KAAKstZ,OACnB,IAAIluX,EAAI5+B,SAAS2uB,eAAenvB,KAAKstZ,OAAOhqZ,GAAK,QAC7C87B,GACAA,EAAE3+B,WAAW6E,YAAY85B,GAE7B,IAMIliB,EAAMm8C,GAAiB,OALvB/1D,GAAItD,KAAKstZ,OAAOhqZ,GAAK,OACrByjB,QAAS,MACTq0d,MAAO,+BACPnpe,MAAS,iBAGbjS,KAAKkd,IAAMA,EACX0vG,EAAK1vG,IAAMA,EACX0vG,EAAK0gS,OAAO3rZ,YAAYub,GACxB,IACIlc,EADMR,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,IAE3C+3e,EAASr6e,EAAQ4uB,YACjB0rd,EAAUt6e,EAAQ6uB,aAClB0rd,EAAQv6e,EAAQ4K,wBAEhB4ve,EAAW5/e,OAAO4/e,QAAU,GAAuB,EAAlB5/e,OAAO4/e,QAAe5/e,OAAO4/e,QAC9DC,EAAW7/e,OAAO6/e,QAAU,GAAuB,EAAlB7/e,OAAO6/e,QAAe7/e,OAAO6/e,QACnD,IAAXJ,IACAA,EAAShve,KAAKmT,MAAQ5jB,OAAO2d,WAAaiie,EAAWnve,KAAKmT,MAAM+7d,EAAM/ue,QAE1D,IAAZ8ue,IACAA,EAAUjve,KAAKmT,MAAQ5jB,OAAO0d,YAAcmie,EAAWpve,KAAKmT,MAAM+7d,EAAM7ue,OAE5EwQ,EAAI1Z,aAAa,QAASkmB,OAAO2xd,IACjCn+d,EAAI1Z,aAAa,SAAUkmB,OAAO4xd,IAClCt7e,KAAKqsB,MAAMrW,MAAQqle,EACnBr7e,KAAKqsB,MAAMtW,OAASule,EACpB,IAAI53e,EACJ,IAAKkpH,EAAK8lV,gBAAiB,CACvB9lV,EAAK8lV,gBAAkB9sZ,GAAkB,UACzBplD,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,IACrDspH,EAAK4uU,aAAezoW,GAAeI,aAAanzF,KAAKgB,QAAQsC,GAAK,gBAAiBtD,KAAKqsB,MAAMrW,MAAOhW,KAAKqsB,MAAMtW,QAChH62G,EAAK4uU,aAAah4b,aAAa,QAAS,0CACxCopH,EAAK8lV,gBAAgB/wc,YAAYirH,EAAK4uU,cACtC5uU,EAAK0gS,OAAO3rZ,YAAYirH,EAAK8lV,iBAEjChvc,GACIJ,GAAMtD,KAAKgB,QAAQsC,GAAK,oBACxBoB,MAAS,SAAW1E,KAAKqsB,MAAMrW,MAAQ,cAAgBhW,KAAKqsB,MAAMtW,OAAS,yCAE/EqjD,GAAiBwzD,EAAK8lV,gBAAiBhvc,GACvC1D,KAAK07e,gBAAgB9uX,EAAK0gS,QAC1BttZ,KAAKozc,kBAAkBxmV,EAAK0gS,OAAQ1gS,GACpC5sH,KAAK27e,qBAAqB/uX,IAG9BiuX,EAASz/e,UAAU6/e,eAAiB,SAAUruX,GAC1C,IAAI1vG,EAAM1c,SAAS2uB,eAAenvB,KAAKstZ,OAAOhqZ,GAAK,QACnDtD,KAAKstZ,OAAOhoZ,YAAY4X,GACxB,IAAIsrC,EAAYhoD,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,GAAK,cAC1DtD,KAAKstZ,OAAOhoZ,YAAYkjD,GACxB,IAAIgzY,EAAeh7b,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,GAAK,qBAC7DtD,KAAKstZ,OAAOhoZ,YAAYk2b,GACxB5uU,EAAK8lV,gBAAkB,KACvB9lV,EAAK4uU,aAAe,MAExBq/C,EAASz/e,UAAUsgf,gBAAkB,SAAUpuF,GAC3C,IAAI9kW,EAAY5C,GAAkB,OAC9BtiD,GAAMtD,KAAKgB,QAAQsC,GAAK,aAAc2O,MAAS,eAC/CvN,MAAS,4DAMTk3e,EAAUh2b,GAAkB,OAH5BtiD,GAAMtD,KAAKgB,QAAQsC,GAAK,iBACxBoB,MAAS,wCAKb,OAFA8jD,EAAU7mD,YAAYi6e,GACtBtuF,EAAO3rZ,YAAY6mD,GACZA,GAEXqyb,EAASz/e,UAAUg4c,kBAAoB,SAAU9lD,EAAQ1gS,GACrD,IAAIgnV,EAAiB5zc,KAAKM,OAAOkiC,UAAUxiC,KAAKgB,QAAQsC,GAAK,mBAAoBtD,KAAKqsB,MAAMrW,MAAOhW,KAAKqsB,MAAMtW,QAC1Gmoa,EAAc7kX,GAAiB,KAAO/1D,GAAMtD,KAAKgB,QAAQsC,GAAK,iBAClEswc,EAAejyc,YAAYu8a,GAC3BtxT,EAAK8lV,gBAAgB/wc,YAAYiyc,GACjCt6Y,GAAgBs6Y,GAAkB3hc,MAAS,oBAE/C4oe,EAASz/e,UAAUugf,qBAAuB,SAAU/uX,GAChD,IAAI1vG,EAAM1c,SAAS2uB,eAAenvB,KAAKstZ,OAAOhqZ,GAAK,gBAC/C4Z,GACAA,EAAIzc,WAAW6E,YAAY4X,GAU/BA,EAAMm8C,GAAiB,OAPnB/1D,GAAItD,KAAKstZ,OAAOhqZ,GAAK,eACrByjB,QAAS,MACTq0d,MAAO,+BACP12e,MAAS,oEACTsR,MAAOhW,KAAKqsB,MAAMrW,MAClBD,OAAQ/V,KAAKqsB,MAAMtW,SAGvB62G,EAAK0gS,OAAO3rZ,YAAYub,GACxB,IAAI2+d,EAAMxib,GAAiB,KAAO/1D,GAAMtD,KAAKgB,QAAQsC,GAAK,iBAAkBoB,MAAS,wBACrFwY,EAAIvb,YAAYk6e,GAChB,IAAI3od,EAAOmmC,GAAiB,QACxBn5B,KAAQ,cAAelqB,MAAS,OAAQD,OAAU,OAAQ9D,MAAS,mBACnE3O,GAAMtD,KAAKstZ,OAAOhqZ,GAAK,qBAE3B4vB,EAAK1vB,aAAa,QAAS,2BAC3Bq4e,EAAIl6e,YAAYuxB,GAChB,IACIkM,EAAIi6B,GAAiB,KAAO/1D,GAAMtD,KAAKstZ,OAAOhqZ,GAAK,iBAAkBoB,MAAS,uBAClFm3e,EAAIl6e,YAAYy9B,GAChB,IAAI08c,EAAYzib,GAAiB,QAAU/1D,GAAMtD,KAAKstZ,OAAOhqZ,GAAK,eAAgB48B,KAAQ,gBAC1Fd,EAAEz9B,YAAYm6e,GACd97e,KAAK+7e,qBAAqB,OAAQ38c,GAClCp/B,KAAK+7e,qBAAqB,QAAS38c,GACnCp/B,KAAK+7e,qBAAqB,MAAO38c,GACjCp/B,KAAK+7e,qBAAqB,SAAU38c,GACpCp/B,KAAK+7e,qBAAqB,UAAW38c,GACrCp/B,KAAK+7e,qBAAqB,WAAY38c,GACtCp/B,KAAK+7e,qBAAqB,aAAc38c,GACxCp/B,KAAK+7e,qBAAqB,cAAe38c,IAE7Cy7c,EAASz/e,UAAU2gf,qBAAuB,SAAUxkd,EAAMj3B,GAC5CN,KAAKkd,IAAf,IACI2d,EAOAihd,EAAYzib,GALZx+B,EADS,QAATtD,GAA2B,WAATA,GAA8B,UAATA,GAA6B,SAATA,EACnD,OAGA,UAE8Bj0B,GAAMtD,KAAKstZ,OAAOhqZ,GAAK,UAAYi0B,IAC7Ej3B,EAAOqB,YAAYm6e,GACnB,IAAIE,EAAY3ib,GAAiBx+B,GAC7Bv3B,GAAMtD,KAAKstZ,OAAOhqZ,GAAKi0B,EAAMtlB,MAAS,kBAAmBiuB,KAAQ,gBAErE5/B,EAAOqB,YAAYq6e,IAEvBnB,EAASz/e,UAAU6gf,wBAA0B,WACzC,IAAIz5D,EAAOxib,KAAKiyB,aAAallB,EAAI/M,KAAK4wU,UAAU7jU,EAC5C01a,EAAOzib,KAAKiyB,aAAajlB,EAAIhN,KAAK4wU,UAAU5jU,EAC5CqiB,EAAO,IAAIM,GACfN,EAAKrZ,MAAQ,EACbqZ,EAAKtZ,OAAS,EACd,IAAIhJ,EAAI,EACJC,EAAI,EAGR,OAAQhN,KAAKk8e,iBACT,IAAK,OACD7sd,EAAKrZ,OAASwsa,EACdnzZ,EAAKtZ,QAAUysa,EAAOxib,KAAK86e,cAC3B/te,EAAIy1a,EACJx1a,EAAIw1a,EAAOxib,KAAK86e,cAChB9te,GAAK,EACL,MACJ,IAAK,QACDqiB,EAAKrZ,OAASwsa,EACdnzZ,EAAKtZ,QAAUysa,EAAOxib,KAAK86e,cAC3B9te,EAAIw1a,EAAOxib,KAAK86e,cAChB9te,IAAM,EACN,MACJ,IAAK,MACDqiB,EAAKtZ,QAAU0sa,EACfpzZ,EAAKrZ,OAASysa,EAAOzib,KAAK86e,cAC1B9te,EAAIy1a,EACJ11a,EAAI01a,EAAOzib,KAAK86e,cAChB/te,GAAK,EACL,MACJ,IAAK,SACDsiB,EAAKtZ,QAAU0sa,EACfpzZ,EAAKrZ,OAASysa,EAAOzib,KAAK86e,cAC1B/te,EAAI01a,EAAOzib,KAAK86e,cAChB/te,IAAM,EACN,MACJ,IAAK,UACGV,KAAKE,IAAIk2a,GAAQp2a,KAAKE,IAAIi2a,GAC1BA,EAAOC,EAAOzib,KAAK86e,cAGnBr4D,EAAOD,EAAOxib,KAAK86e,cAEvBzrd,EAAKrZ,OAASwsa,EACdnzZ,EAAKtZ,QAAU0sa,EACf11a,EAAIy1a,EACJx1a,EAAIy1a,EACJ,MACJ,IAAK,WACGp2a,KAAKE,IAAIk2a,GAAQp2a,KAAKE,IAAIi2a,GAC1BA,GAAQC,EAAOzib,KAAK86e,cAGpBr4D,GAASD,EAAOxib,KAAK86e,cAEzB9te,EAAIy1a,EACJpzZ,EAAKrZ,OAASwsa,EACdnzZ,EAAKtZ,QAAU0sa,EACf,MACJ,IAAK,aACGp2a,KAAKE,IAAIk2a,GAAQp2a,KAAKE,IAAIi2a,GAC1BA,GAAQC,EAAOzib,KAAK86e,cAGpBr4D,GAAQD,EAAOxib,KAAK86e,cAExB/te,EAAIy1a,EACJnzZ,EAAKrZ,OAASwsa,EACdnzZ,EAAKtZ,QAAU0sa,EACf,MACJ,IAAK,cACGp2a,KAAKE,IAAIk2a,GAAQp2a,KAAKE,IAAIi2a,GAC1BA,EAAOC,EAAOzib,KAAK86e,cAGnBr4D,EAAOD,EAAOxib,KAAK86e,cAEvBzrd,EAAKrZ,OAASwsa,EACdnzZ,EAAKtZ,QAAU0sa,EAGvBzib,KAAKm8e,aAAapve,EAAGC,EAAGqiB,OA1EpBimC,OACAC,IA2ERslb,EAASz/e,UAAU+gf,aAAe,SAAU35D,EAAMC,EAAMpzZ,EAAMrZ,EAAOD,GACjE,IAAIhJ,EACAC,EACAupB,EAEArD,EADMlzB,KAAKgB,QAAQO,qBAAqB,OAAO,GACpC4tB,eAAe,UAC9B,GAAIE,EAEAtiB,GADAwpB,EAASrD,EAAKsjC,WACHzpD,EAAIy1a,EACfx1a,EAAIupB,EAAOvpB,EAAIy1a,EACfzsa,EAAQugB,EAAOvgB,MAAQqZ,EAAKrZ,MAC5BD,EAASwgB,EAAOxgB,OAASsZ,EAAKtZ,WAE7B,CACD,IAAIqme,EAEAA,EADAp8e,KAAKiyB,aAAallB,EAAI/M,KAAKsgD,WAAWvzC,EAC7B/M,KAAKiyB,aAAallB,EAAI/M,KAAK4wU,UAAU7jU,EAGrC/M,KAAK4wU,UAAU7jU,EAAI/M,KAAKiyB,aAAallB,EAElD,IAAIsve,EAEAA,EADAr8e,KAAKiyB,aAAajlB,EAAIhN,KAAKsgD,WAAWtzC,EAC7BhN,KAAKiyB,aAAajlB,EAAIhN,KAAK4wU,UAAU5jU,EAGrChN,KAAK4wU,UAAU5jU,EAAIhN,KAAKiyB,aAAajlB,EAI9CX,KAAKE,IAAI8ve,GAAUhwe,KAAKE,IAAI6ve,GAC5BA,EAASp8e,KAAK86e,cAAgBuB,EAK9BA,EAASD,EAASp8e,KAAK86e,cAI3Bvkd,EAASrD,EAAKsjC,UACdzpD,EAAM/M,KAAKsgD,WAAWvzC,EAAI/M,KAAKiyB,aAAallB,EACxCwpB,EAAOxpB,EAAIqve,EAAS7ld,EAAOxpB,EAC/BC,EAAMhN,KAAKsgD,WAAWtzC,EAAIhN,KAAKiyB,aAAajlB,EAAKupB,EAAOvpB,EAAIqve,EAAS9ld,EAAOvpB,EAC5EgJ,EAAQugB,EAAOvgB,MAAQome,EACvBrme,EAASwgB,EAAOxgB,OAASsme,EAE7B/ib,GAAgBt5D,KAAKkP,QACjB5L,GAAMtD,KAAKkP,OAAO5L,GAAIyJ,EAAKA,EAAGC,EAAKA,EACnCgJ,MAAS3J,KAAKC,IAAI,EAAG0J,GAAQD,OAAU1J,KAAKC,IAAI,EAAGyJ,MAG3D8ke,EAASz/e,UAAUkhf,mBAAqB,SAAUvve,EAAGC,EAAGgJ,EAAOD,GAG3DqjD,GAFW54D,SAAS2uB,eAAenvB,KAAKstZ,OAAOhqZ,GAAK,iBACvCyJ,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAO3J,KAAKC,IAAI,EAAG0J,GAAQD,OAAQ1J,KAAKC,IAAI,EAAGyJ,KAExE/V,KAAKu8e,qBAAqB,MAAOxve,EAAI,EAAGC,EAAI,EAAGX,KAAKC,IAAI,EAAG0J,EAAQ,IAAK,GACxEhW,KAAKu8e,qBAAqB,SAAUxve,EAAI,EAAGC,EAAI+I,EAAQ1J,KAAKC,IAAI,EAAG0J,EAAQ,IAAK,GAChFhW,KAAKu8e,qBAAqB,OAAQxve,EAAI,EAAGC,EAAI,EAAG,EAAGX,KAAKC,IAAI,EAAGyJ,EAAS,KACxE/V,KAAKu8e,qBAAqB,QAASxve,EAAIiJ,EAAOhJ,EAAI,EAAG,EAAGX,KAAKC,IAAI,EAAGyJ,EAAS,KAC7E/V,KAAKu8e,qBAAqB,UAAWxve,EAAGC,EAAG,EAAG,GAC9ChN,KAAKu8e,qBAAqB,WAAYxve,EAAIiJ,EAAOhJ,EAAG,EAAG,GACvDhN,KAAKu8e,qBAAqB,aAAcxve,EAAGC,EAAI+I,EAAQ,EAAG,GAC1D/V,KAAKu8e,qBAAqB,cAAexve,EAAIiJ,EAAOhJ,EAAI+I,EAAQ,EAAG,IAEvE8ke,EAASz/e,UAAUmhf,qBAAuB,SAAUhld,EAAMxqB,EAAGC,EAAGgJ,EAAOD,GACnE,IAAIqrJ,EACAo7U,EACAC,EAAW,UAAYlld,EACvBrE,EAAO1yB,SAAS2uB,eAAenvB,KAAKstZ,OAAOhqZ,GAAKm5e,GACvC,QAATlld,GAA2B,WAATA,GAA8B,UAATA,GAA6B,SAATA,GAC3D6pI,GAASr0J,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,EAAQmqB,KAAM,WACzDs8c,GAAczve,EAAGA,EAAI,EAAGC,EAAGA,EAAI,EAAGgJ,MAAiB,IAAVA,EAAc,EAAIA,EAAOD,OAAmB,IAAXA,EAAe,EAAIA,KAG7FqrJ,GAAS9lI,GAAIvuB,EAAGwuB,GAAIvuB,EAAGmyB,EAAK,EAAGe,KAAM,WACrCs8c,GAAclhd,GAAIvuB,EAAGwuB,GAAIvuB,EAAGmyB,EAAK,EAAGe,KAAM,gBAE9Ck5B,GAAiBlmC,EAAMkuI,GAEvBhoG,GADgB54D,SAAS2uB,eAAenvB,KAAKstZ,OAAOhqZ,GAAKi0B,GAC7Bild,IAEhC3B,EAASz/e,UAAUshf,2BAA6B,WAC5C,IAAIC,EAAWvld,OAAOp3B,KAAKqsB,MAAMrW,OAC7B4me,EAAYxld,OAAOp3B,KAAKqsB,MAAMtW,QAC9Bysa,EAAOxib,KAAKiyB,aAAallB,EAAI/M,KAAK4wU,UAAU7jU,EAC5C01a,EAAOzib,KAAKiyB,aAAajlB,EAAIhN,KAAK4wU,UAAU5jU,EAM5CupB,GAJOlqB,KAAK+T,IAAIpgB,KAAKM,OAAOmmD,SAASQ,cAAgB01b,EAAU38e,KAAKM,OAAOmmD,SAASO,eAAiB41b,GAC/F58e,KAAKgB,QAAQO,qBAAqB,OAAO,GACnC4tB,eAAenvB,KAAKstZ,OAAOhqZ,GACrC,gBACakzD,WACfzpD,EAAIwpB,EAAOxpB,EAAIy1a,EACfx1a,EAAIupB,EAAOvpB,EAAIy1a,EACfzsa,EAAQugB,EAAOvgB,MACfD,EAASwgB,EAAOxgB,OACpB/V,KAAKs8e,mBAAmBvve,EAAGC,EAAGgJ,EAAOD,GACrC/V,KAAK68e,iBAAiB78e,KAAKM,OAAOmmD,SAASY,YAAat6C,EAAGC,EAAGgJ,EAAOD,EAAQ,OAEjF8ke,EAASz/e,UAAU0hf,mBAAqB,SAAU/ve,EAAGC,EAAGgJ,EAAOD,GAC3D,IAAI4me,EAAWvld,OAAOp3B,KAAKqsB,MAAMrW,OAC7B4me,EAAYxld,OAAOp3B,KAAKqsB,MAAMtW,QAE9Bgne,EAAa/me,EAAQ2me,EAAY38e,KAAKk+Y,aACtC8+F,EAAcjne,EAAS6me,EAAa58e,KAAK84a,cACzC3nF,EAAO9kV,KAAKC,IAAItM,KAAKM,OAAOmmD,SAASQ,cAAgB81b,EAAW/8e,KAAKM,OAAOmmD,SAASO,eAAiBg2b,GAC1G,GAAI7rJ,GAAQ,KAAQA,GAAQ,GAAI,CAE5BnxV,KAAK68e,iBAAiB1rJ,EAAMpkV,EAAGC,EAAGgJ,EAAOD,GAD3BhJ,EAAG,EAAGC,EAAG,IAEvB,IAAIupB,EAASv2B,KAAKi9e,mBAAmBj9e,KAAKM,OAAOmmD,SAASC,iBAAkB1mD,KAAKM,OAAOmmD,SAASG,eAAgB5mD,KAAKM,OAAOmmD,SAASY,aAAa,GACnJ,GAAIrnD,KAAKkP,OAAQ,CACb,IACIm+D,EADQrtE,KAAKgB,QAAQO,qBAAqB,QAAQ,IAClCi1D,UACpBjgC,EAAOxpB,EAAIsgE,EAAQtgE,EACnBwpB,EAAOvpB,EAAIqgE,EAAQrgE,EAEvBhN,KAAKs8e,mBAAmB/ld,EAAOxpB,EAAGwpB,EAAOvpB,EAAGupB,EAAOvgB,MAAOugB,EAAOxgB,UAGzE8ke,EAASz/e,UAAU6hf,mBAAqB,SAAUh3C,EAASC,EAAS7+Y,EAAa61b,GAC7E,IAAMl9e,KAAe,YAAKk9e,EAAQ,CAC9B,IAAIP,EAAWvld,OAAOp3B,KAAKqsB,MAAMrW,OAC7B4me,EAAYxld,OAAOp3B,KAAKqsB,MAAMtW,QAC9BqxC,EAAQ/6C,KAAK+T,IAAIpgB,KAAKk+Y,aAAey+F,EAAU38e,KAAK84a,cAAgB8jE,GACpErmd,EAAS,IAAIR,GACbhpB,EAAIwpB,EAAOxpB,EAAKk5b,EAAU5+Y,EAAeD,EACzCp6C,EAAIupB,EAAOvpB,EAAKk5b,EAAU7+Y,EAAeD,EAEzCpxC,EAAQugB,EAAOvgB,MAAShW,KAAKM,OAAOmmD,SAASQ,cAAgBI,EAAeD,EAC5ErxC,EAASwgB,EAAOxgB,OAAU/V,KAAKM,OAAOmmD,SAASO,eAAiBK,EAAeD,EACvEpnD,KAAKM,OAAOmmD,SAASQ,cAAgBjnD,KAAKM,OAAOmmD,SAASO,eACtE,GAAIk2b,EAAQ,CACR,IAAIhqd,EAAO,IAAI6C,GAKf,OAJA7C,EAAKnmB,EAAIA,EACTmmB,EAAKlmB,EAAIA,EACTkmB,EAAKld,MAAQA,EACbkd,EAAKnd,OAASA,EACPmd,EAEXlzB,KAAKs8e,oBAAoBvve,GAAIC,EAAGgJ,EAAOD,GAE3C,OAAO,MAEX8ke,EAASz/e,UAAUyhf,iBAAmB,SAAU1rJ,EAAMpkV,EAAGC,EAAGgJ,EAAOD,EAAQ+ya,GACvE,IAMIq0D,EACAC,EAPAT,EAAWvld,OAAOp3B,KAAKqsB,MAAMrW,OAC7B4me,EAAYxld,OAAOp3B,KAAKqsB,MAAMtW,QAG9Bkwb,EAAUl5b,GAFD/M,KAAKk+Y,aAAey+F,GAENxrJ,EACvB+0G,EAAUl5b,GAFDhN,KAAK84a,cAAgB8jE,GAEPzrJ,EAGdnxV,KAAKM,OAAOmmD,SAASi9Y,gBACrB,IAATvyG,GAAkC,QAApBnxV,KAAKi3X,aACnBkmH,GAAQl3C,EAAUjmc,KAAKM,OAAOmmD,SAASC,iBACvC02b,GAAQl3C,EAAUlmc,KAAKM,OAAOmmD,SAASG,gBAEnB,UAApB5mD,KAAKi3X,YAA8C,SAApBj3X,KAAKi3X,WACpCj3X,KAAKM,OAAOmmD,SAAS0qS,KAAKA,EAAOnxV,KAAKM,OAAOmmD,SAASY,YAAa81b,EAAMC,EAAMt0D,GAG/E9ob,KAAKM,OAAO0wV,IAAImsJ,EAAMC,EAAMt0D,IAIpC+xD,EAASz/e,UAAUmvc,WAAa,SAAU39U,GACtC,IAAI52G,EACAD,EACAwgB,EAASv2B,KAAKM,OAAOmmD,SAASi9Y,gBAClC1tb,EAAQugB,EAAOvgB,MACfD,EAASwgB,EAAOxgB,OAChB,IAEIqxC,EAFAu1b,EAAWvld,OAAOp3B,KAAKqsB,MAAMrW,OAC7B4me,EAAYxld,OAAOp3B,KAAKqsB,MAAMtW,QAE9Bu/C,EAAIjpD,KAAKC,IAAI0J,EAAOhW,KAAKM,OAAOmmD,SAASQ,eACzCsO,EAAIlpD,KAAKC,IAAIyJ,EAAQ/V,KAAKM,OAAOmmD,SAASO,gBAC9ChnD,KAAKk+Y,aAAe5oV,EAAIjpD,KAAKC,IAAIgpD,EAAIqnb,EAAWC,EAAarnb,GAC7Dv1D,KAAK84a,cAAgBvjX,EAAIlpD,KAAKC,IAAIipD,EAAIqnb,EAAYD,EAAYrnb,GAC9DlO,EAAQ/6C,KAAK+T,IAAIu8d,EAAWrnb,EAAGsnb,EAAYrnb,GAC3C,IAAI/M,EAAYhoD,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,GAAK,cAC1DklD,EAAU9jD,MAAM24e,gBAAkB,SAAWj2b,EAAQ,gBAAkB7wB,EAAOxpB,EAAI,OAAUwpB,EAAOvpB,EAAK,MACxGw7C,EAAU9jD,MAAM2I,UAAY,SAAW+5C,EAAQ,gBAAkB7wB,EAAOxpB,EAAI,OAAUwpB,EAAOvpB,EAAK,MACxFxM,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,GAAK,kBAChDE,aAAa,YAAa,cAAiB+yB,EAAOxpB,EAAIq6C,EAAS,KAAQ7wB,EAAOvpB,EAAIo6C,EAAS,KAC/FpnD,KAAK0mD,iBAAmBnwB,EAAOxpB,EAAIq6C,EACnCpnD,KAAK4mD,eAAiBrwB,EAAOvpB,EAAIo6C,EACjC,IAAIkmW,EAAS9sZ,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,GAAK,iBACnD46a,EvY/IZ,SAA+BppX,GAI3B,OAFqB+D,GAAkB/D,GACV3lC,eAAe2lC,EAAY,gBuY4IlCwob,CAAet9e,KAAKgB,QAAQsC,IAC1CqC,EAAU2nZ,EAAOh6T,WAAW,MAC5BiqZ,EAAcnmd,OAAOp3B,KAAKqsB,MAAMrW,OAAShW,KAAKk+Y,aAC9Cs/F,EAAepmd,OAAOp3B,KAAKqsB,MAAMtW,QAAU/V,KAAK84a,cACpDykE,EAAalxe,KAAK+T,IAAIm9d,EAAYC,GAClCt/D,EAAY16a,aAAa,YAAa,wBAEhC+5e,EAAa,KACnB53e,EAAQwtV,aAAaoqJ,EAAY,EAAG,EAAGA,EAAY,EAAG,GACtD53e,EAAQ4uF,UAAY,MACpBv0F,KAAKi9e,mBAAmBj9e,KAAKM,OAAOmmD,SAASC,iBAAkB1mD,KAAKM,OAAOmmD,SAASG,eAAgB5mD,KAAKM,OAAOmmD,SAASY,cAG7Hwzb,EAASz/e,UAAUu2b,SAAW,SAAU51W,GACpC,GAAI/7E,KAAK3D,MAAO,CACZ,IAAIk6B,EAASv2B,KAAKi9e,mBAAmBj9e,KAAKM,OAAOmmD,SAASC,iBAAkB1mD,KAAKM,OAAOmmD,SAASG,eAAgB5mD,KAAKM,OAAOmmD,SAASY,aAAa,GACnJrnD,KAAKs8e,oBAAoB/ld,EAAOxpB,GAAIwpB,EAAOvpB,EAAGupB,EAAOvgB,MAAOugB,EAAOxgB,UAG3E8ke,EAASz/e,UAAUwyb,aAAe,SAAU7xW,GACxC,GAAItzB,GAASszB,EAAI50E,0BACb,OAAQ40E,EAAI50E,OAAO7D,IACf,KAAKtD,KAAKstZ,OAAOhqZ,GAAK,OAClBtD,KAAKstZ,OAAO5oZ,MAAMg6D,OAAS,WAC3B,MACJ,KAAK1+D,KAAKstZ,OAAOhqZ,GAAK,QAClBtD,KAAKstZ,OAAO5oZ,MAAMg6D,OAAS,WAC3B,MACJ,KAAK1+D,KAAKstZ,OAAOhqZ,GAAK,MAClBtD,KAAKstZ,OAAO5oZ,MAAMg6D,OAAS,WAC3B,MACJ,KAAK1+D,KAAKstZ,OAAOhqZ,GAAK,SAClBtD,KAAKstZ,OAAO5oZ,MAAMg6D,OAAS,WAC3B,MACJ,KAAK1+D,KAAKstZ,OAAOhqZ,GAAK,UAClBtD,KAAKstZ,OAAO5oZ,MAAMg6D,OAAS,YAC3B,MACJ,KAAK1+D,KAAKstZ,OAAOhqZ,GAAK,WAClBtD,KAAKstZ,OAAO5oZ,MAAMg6D,OAAS,YAC3B,MACJ,KAAK1+D,KAAKstZ,OAAOhqZ,GAAK,aAClBtD,KAAKstZ,OAAO5oZ,MAAMg6D,OAAS,YAC3B,MACJ,KAAK1+D,KAAKstZ,OAAOhqZ,GAAK,cAClBtD,KAAKstZ,OAAO5oZ,MAAMg6D,OAAS,iBAKnC1+D,KAAKstZ,OAAO5oZ,MAAMg6D,OAAS,WAGnCm8a,EAASz/e,UAAUyqU,UAAY,SAAU9pP,GAIrC,GAHA/7E,KAAK3D,OAAQ,EACb2D,KAAK4tb,aAAa7xW,GAClB/7E,KAAKiyB,aAAejyB,KAAKmqD,cAAc4xB,GACnC/7E,KAAKi3X,WACL,OAAQj3X,KAAKi3X,YACT,IAAK,OACIj3X,KAAKshb,UAAathb,KAAKsgD,WAAWvzC,IAAM/M,KAAKiyB,aAAallB,GAAK/M,KAAKsgD,WAAWtzC,IAAMhN,KAAKiyB,aAAajlB,IACxGhN,KAAKy9e,aACLz9e,KAAKshb,UAAW,GAEhBthb,KAAKshb,UACLthb,KAAKm8e,eAET,MACJ,IAAK,QACIn8e,KAAKshb,WACNthb,KAAKy9e,aACLz9e,KAAKshb,UAAW,GAEpBthb,KAAKi8e,0BACL,MACJ,IAAK,OACIj8e,KAAKsgD,WAAWvzC,IAAM/M,KAAKiyB,aAAallB,GAAK/M,KAAKsgD,WAAWtzC,IAAMhN,KAAKiyB,aAAajlB,GAAMhN,KAAKshb,YACjGthb,KAAKshb,UAAW,EAChBthb,KAAK08e,8BAKrB18e,KAAK4wU,UAAY5wU,KAAKiyB,cAE1B4od,EAASz/e,UAAU+/e,gBAAkB,SAAUp/Z,GAC3C/7E,KAAKshb,UAAW,EAChBthb,KAAKi3X,WAAa,GACdj3X,KAAKkP,SACLlP,KAAKkP,OAAOzO,WAAW6E,YAAYtF,KAAKkP,QACxClP,KAAKkP,OAAS,MAElBlP,KAAK3D,OAAQ,EACbmE,SAAS2uB,eAAenvB,KAAKstZ,OAAOhqZ,GAAK,kBAAkBoB,MAAMwvb,cAAgB,OAErF2mD,EAASz/e,UAAUmyb,aAAe,SAAUxxW,GACxC,IAAIh8E,EAAQC,KAYZ,OAXIA,KAAK2+T,UACLz+T,aAAaF,KAAK2+T,UAEtB3+T,KAAK2+T,SAAWx+T,WAAW,WACvB,IACIo7e,EADU/6e,SAAS2uB,eAAepvB,EAAMiB,QAAQsC,IAChCsI,wBACpB7L,EAAMssB,MAAMrW,MAAQule,EAAMvle,MAC1BjW,EAAMssB,MAAMtW,OAASwle,EAAMxle,OAC3BhW,EAAMg7e,eACNh7e,EAAM+tT,UAAU/tT,EAAMgyC,WACvB,KACI,GAGX8oc,EAASz/e,UAAU0mb,UAAY,SAAU/lW,GAOrC,GANIA,EAAI50E,OAAO7D,KAAOtD,KAAKstZ,OAAOhqZ,GAAK,iBACnCtD,KAAKi3X,WAAa,QAElBl7S,EAAI50E,OAAO7D,KAAOtD,KAAKstZ,OAAOhqZ,GAAK,iBACnCtD,KAAKi3X,WAAa,OAElBxuU,GAASszB,EAAI50E,OAAQ,mBAErB,OADAnH,KAAKi3X,WAAa,QACVl7S,EAAI50E,OAAO7D,IACf,KAAKtD,KAAKstZ,OAAOhqZ,GAAK,OAClBtD,KAAKk8e,gBAAkB,OACvB,MACJ,KAAKl8e,KAAKstZ,OAAOhqZ,GAAK,QAClBtD,KAAKk8e,gBAAkB,QACvB,MACJ,KAAKl8e,KAAKstZ,OAAOhqZ,GAAK,MAClBtD,KAAKk8e,gBAAkB,MACvB,MACJ,KAAKl8e,KAAKstZ,OAAOhqZ,GAAK,SAClBtD,KAAKk8e,gBAAkB,SACvB,MACJ,KAAKl8e,KAAKstZ,OAAOhqZ,GAAK,UAClBtD,KAAKk8e,gBAAkB,UACvB,MACJ,KAAKl8e,KAAKstZ,OAAOhqZ,GAAK,WAClBtD,KAAKk8e,gBAAkB,WACvB,MACJ,KAAKl8e,KAAKstZ,OAAOhqZ,GAAK,aAClBtD,KAAKk8e,gBAAkB,aACvB,MACJ,KAAKl8e,KAAKstZ,OAAOhqZ,GAAK,cAClBtD,KAAKk8e,gBAAkB,cAInCl8e,KAAKsgD,WAAatgD,KAAK4wU,UAAY5wU,KAAKmqD,cAAc4xB,GACtD/7E,KAAK86e,cAAgB96e,KAAKM,OAAOmmD,SAASQ,cAAgBjnD,KAAKM,OAAOmmD,SAASO,eAC1DxmD,SAAS2uB,eAAenvB,KAAKstZ,OAAOhqZ,GAAK,kBAC/CoB,MAAMwvb,cAAgB,QAEzC2mD,EAASz/e,UAAU6mb,QAAU,SAAUlmW,GACnC/7E,KAAKiyB,aAAejyB,KAAKmqD,cAAc4xB,GACxB3kD,OAAOp3B,KAAKqsB,MAAMrW,OACjBohB,OAAOp3B,KAAKqsB,MAAMtW,QAClC,GAAI/V,KAAKi3X,WACL,GAAKj3X,KAAKsgD,WAAWvzC,IAAM/M,KAAKiyB,aAAallB,GAAK/M,KAAKsgD,WAAWtzC,IAAMhN,KAAKiyB,aAAajlB,GACtF,GAAwB,QAApBhN,KAAKi3X,iBAIL,GAAIj3X,KAAKkP,OAAQ,CACb,IAAIqnB,EAAUv2B,KAAKgB,QAAQO,qBAAqB,QAAQ,IAAKi1D,UAC7Dx2D,KAAKk8e,gBAAkBl8e,KAAKk8e,iBAAmB,GAC/C,IAAInve,EAAIwpB,EAAOxpB,EACXC,EAAIupB,EAAOvpB,EACXgJ,EAAQugB,EAAOvgB,MACfD,EAASwgB,EAAOxgB,OACkB,YAAzB/V,KAAKk8e,iBAA0D,aAAzBl8e,KAAKk8e,iBAC3B,eAAzBl8e,KAAKk8e,iBAAoCl8e,KAAKk8e,gBAClDl8e,KAAK88e,mBAAmB/ve,EAAGC,EAAGgJ,EAAOD,SAK7C,GAAIgmE,EAAI50E,OAAO7D,KAAOtD,KAAKstZ,OAAOhqZ,GAAK,gBAAoC,WAAlBy4E,EAAI50E,OAAO7D,GAAiB,CAK7E0S,GADAugB,EAHMv2B,KAAKgB,QAAQO,qBAAqB,OAAO,GACvC4tB,eAAenvB,KAAKstZ,OAAOhqZ,GACjC,gBACSkzD,WACIxgD,MACfD,EAASwgB,EAAOxgB,OACpB/V,KAAKshb,UAAW,EAChBthb,KAAKi3X,WAAa,MAClBj3X,KAAK88e,mBAAmB98e,KAAKiyB,aAAallB,EAAIiJ,EAAQ,EAAGhW,KAAKiyB,aAAajlB,EAAI+I,EAAS,EAAGC,EAAOD,GAClG/V,KAAKshb,UAAW,EAIxBthb,KAAKkP,SACLlP,KAAKkP,OAAOzO,WAAW6E,YAAYtF,KAAKkP,QACxClP,KAAKkP,OAAS,MAElBlP,KAAKi3X,WAAa,GAClBj3X,KAAKsgD,WAAa,KAClBtgD,KAAKiyB,aAAe,KACpBjyB,KAAK4wU,UAAY,KACjB5wU,KAAKkP,OAAS,KACdlP,KAAK86e,cAAgB,EACrB96e,KAAKk8e,gBAAkB,GACvBl8e,KAAKshb,UAAW,EAChBthb,KAAK3D,OAAQ,EACbmE,SAAS2uB,eAAenvB,KAAKstZ,OAAOhqZ,GAAK,kBAAkBoB,MAAMwvb,cAAgB,OAErF2mD,EAASz/e,UAAUqif,WAAa,WAC5B,IAAIr+c,EAAIp/B,KAAKgB,QAAQO,qBAAqB,OAAO,GAE7CwL,GADQ/M,KAAKM,OAAOmmD,SAASY,YACzBrnD,KAAKsgD,WAAWvzC,GACpBC,EAAIhN,KAAKsgD,WAAWtzC,EACpBgJ,EAAQ,EACRD,EAAS,EACb,GAAwB,UAApB/V,KAAKi3X,WAAwB,CAC7B,IAEI1gW,EAFO6I,EACPjQ,eAAenvB,KAAKstZ,OAAOhqZ,GAAK,gBAClBkzD,UAClBzpD,EAAIwpB,EAAOxpB,EACXC,EAAIupB,EAAOvpB,EACXgJ,EAAQugB,EAAOvgB,MACfD,EAASwgB,EAAOxgB,OAEpB,IAAI4jc,EAAgBtgZ,GAAiB,QACjC/1D,GAAM,SAAUyJ,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,EAClDmqB,KAAQ,cAAeE,OAAU,OAAQywM,mBAAoB,MAAO6sQ,kBAAmB,eAEvEt+c,EAAEjQ,eAAenvB,KAAKgB,QAAQsC,GAAK,kBACzC3B,YAAYg4c,GAC1B35c,KAAKkP,OAASyqc,GAElBkhC,EAASz/e,UAAU+uD,cAAgB,SAAU4xB,GACzC,IAAImrP,EACAr7T,EACAI,EACJ,IAAmC,IAA/B8vE,EAAIr1E,KAAKnI,QAAQ,SAAiB,CAElC,IAAIuN,GADJo7T,EAAWnrP,GACU/X,eAAe,GAAGnK,QACnC3tD,EAAQg7T,EAASljQ,eAAe,GAAGlK,QACvCjuD,EAAUC,EAAQ9L,KAAKgB,QAAQmT,WAC/BlI,EAAUC,EAAQlM,KAAKgB,QAAQoT,eAG/BvI,EAAUkwE,EAAIliB,QACd5tD,EAAU8vE,EAAIjiB,QAElB,IAAIwzX,EAAettb,KAAKgB,QAAQ4K,wBAGhC,OAFAC,GAAoByhb,EAAa9gb,KACjCP,GAAoBqhb,EAAa5gb,KACxBK,EAAGlB,EAAU7L,KAAK0mD,iBAAkB15C,EAAGf,EAAUjM,KAAK4mD,iBAQnEi0b,EAASz/e,UAAUiX,QAAU,WAIzB,GAHArS,KAAKilH,eACLjlH,KAAK+N,OAAO,cACZujF,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,MAC1BQ,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,IAAK,CAC1CtD,KAAKgB,QAAQ8C,UAAUS,OAAO,cAC9B,IAAI+3B,EAAU97B,SAAS2uB,eAAenvB,KAAKgB,QAAQsC,GAAK,WACpDg5B,GACAt8B,KAAKgB,QAAQsE,YAAYg3B,GAGjCt8B,KAAKM,OAAOkuD,MAAM7lC,OAAO3oB,KAAKM,OAAOkuD,MAAMjwD,QAAQyB,KAAKgB,QAAQsC,IAAK,GACrEtD,KAAK0yc,gBAAkB,KACvB1yc,KAAKstZ,OAAS,KACdttZ,KAAKM,OAAS,MAKlBu6e,EAASz/e,UAAU2mC,cAAgB,WAI/B,MAAO,YAEXivD,IACI9pF,EAAS,SACV2ze,EAASz/e,UAAW,aAAS,GAChC41F,IACI9pF,EAAS,SACV2ze,EAASz/e,UAAW,cAAU,GACjC41F,IACI9pF,EAAS,KACV2ze,EAASz/e,UAAW,gBAAY,GACnC41F,IACIloF,KACD+xe,EAASz/e,UAAW,eAAW,GAC3By/e,GACTjpY,IC74BF+rY,GAAclrY,OAAQmrY,GAAuBC,GAAcC,GAAiBC,GAA8BC,GAAkBC,GAAeC,GAAqBC,GAAmBC,GAAsBC,GAAwBC,GAAeC,GAAsBC,GAAyBC,IAC/RC,GAAoBjsY,OAAQ0rY,+0BlD0vB5B,mCAOA,g5GmD/vBI57P,GAA4B,WAC5B,SAASA,IACLviP,KAAK2+e,gBACL3+e,KAAK4+e,kBACL5+e,KAAKie,QA6HT,OA3HA3f,OAAOuJ,eAAe06O,EAAWnnP,UAAW,UAIxCsM,IAAK,WACD,OAAO1H,KAAK2+e,aAAanif,QAE7BmL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe06O,EAAWnnP,UAAW,QAIxCsM,IAAK,WACD,OAAO1H,KAAK2yG,WAEhBhrG,YAAY,EACZC,cAAc,IAKlB26O,EAAWnnP,UAAUu3G,QAAU,WAC3B3yG,KAAKie,QACL,IAAK,IAAI/hB,EAAI,EAAGA,EAAI8D,KAAK2+e,aAAanif,OAAQN,IAC1C8D,KAAKie,KAAKzZ,KAAKxE,KAAK2+e,aAAazif,IAErC,OAAO8D,KAAKie,MAKhBskO,EAAWnnP,UAAUgJ,IAAM,SAAU/G,EAAKN,GACtC,GAAIU,EAAkBJ,GAClB,MAAM,IAAIklR,eAAe,uCAQ7B,OANYviR,KAAK2+e,aAAapgf,QAAQlB,GAE1B,IACR2C,KAAK2+e,aAAan6e,KAAKnH,GACvB2C,KAAK4+e,eAAep6e,KAAKzH,IAEtB,GAQXwlP,EAAWnnP,UAAUsM,IAAM,SAAUrK,GACjC,GAAII,EAAkBJ,GAClB,MAAM,IAAIklR,eAAe,8BAE7B,IAAIzwQ,EAAQ9R,KAAK2+e,aAAapgf,QAAQlB,GACtC,GAAIyU,EAAQ,GAAKA,EAAQ9R,KAAK2+e,aAAanif,OAAS,EAChD,MAAM,IAAIk5P,WAAW,kDAGrB,OAAO11P,KAAK4+e,eAAe9se,IAMnCywO,EAAWnnP,UAAUiM,IAAM,SAAUhK,EAAKN,GACtC,GAAIU,EAAkBJ,GAClB,MAAM,IAAIklR,eAAe,8BAE7B,IAAIzwQ,EAAQ9R,KAAK2+e,aAAapgf,QAAQlB,GACtC,GAAIyU,EAAQ,GAAKA,EAAQ9R,KAAK2+e,aAAanif,OAAS,EAChD,MAAM,IAAIk5P,WAAW,kDAGrB11P,KAAK4+e,eAAe9se,GAAS/U,GAMrCwlP,EAAWnnP,UAAUmJ,OAAS,SAAUlH,GACpC,GAAII,EAAkBJ,GAClB,MAAM,IAAIklR,eAAe,8BAE7B,IAAIzwQ,EAAQ9R,KAAK2+e,aAAapgf,QAAQlB,GACtC,GAAIyU,EAAQ,GAAKA,EAAQ9R,KAAK2+e,aAAanif,OAAS,EAChD,MAAM,IAAIk5P,WAAW,kDAKrB,OAFA11P,KAAK2+e,aAAah2d,OAAO7W,EAAO,GAChC9R,KAAK4+e,eAAej2d,OAAO7W,EAAO,IAC3B,GAMfywO,EAAWnnP,UAAUioP,YAAc,SAAUhmP,GACzC,GAAII,EAAkBJ,GAClB,MAAM,IAAIklR,eAAe,8BAE7B,IAAIzwQ,EAAQ9R,KAAK2+e,aAAapgf,QAAQlB,GACtC,QAAIyU,EAAQ,GAAKA,EAAQ9R,KAAK2+e,aAAanif,OAAS,IAQxD+lP,EAAWnnP,UAAUqxD,MAAQ,WACzBzsD,KAAK2+e,gBACL3+e,KAAK4+e,mBAKTr8P,EAAWnnP,UAAUiX,QAAU,WAC3BrS,KAAKysD,QACLzsD,KAAK2+e,kBAAezjf,EACpB8E,KAAK4+e,oBAAiB1jf,GAEnBqnP,KChIPs8P,GAA+B,WAC/B,SAASA,EAAcn4e,GACnB1G,KAAK8+e,eAAiB,EACtB9+e,KAAK++e,iBAAmBr4e,EACxB1G,KAAKg/e,eAAiB,IAAIz8P,GAirB9B,OA5qBAs8P,EAAczjf,UAAU6jf,QAAU,SAAU3if,EAAQ4+D,EAAUgkb,GAC1D,IAAID,GAAU,EACd,OAAQj/e,KAAK++e,kBACT,KAAK,EACDE,EAAUj/e,KAAKm/e,cAAc7if,EAAQ4+D,EAAUgkb,GAC/C,MACJ,KAAK,EACDD,EAAUj/e,KAAKo/e,uBAAuB9if,EAAQ4+D,EAAUgkb,GACxD,MACJ,KAAK,EACDD,EAAUj/e,KAAKq/e,uBAAuB/if,EAAQ4+D,EAAUgkb,GACxD,MACJ,KAAK,EACDD,EAAUj/e,KAAKs/e,kBAAkBhjf,EAAQ4+D,EAAUgkb,GACnD,MACJ,KAAK,EACDD,EAAUj/e,KAAKu/e,eAAejjf,EAAQ4+D,EAAUgkb,GAChD,MACJ,KAAK,EACDD,EAAUj/e,KAAKw/e,iBAAiBljf,EAAQ4+D,EAAUgkb,GAClD,MACJ,KAAK,EACDD,EAAUj/e,KAAKy/e,kBAAkBnjf,EAAQ4+D,EAAUgkb,GACnD,MACJ,KAAK,EACDD,EAAUj/e,KAAK0/e,mBAAmBpjf,EAAQ4+D,EAAUgkb,GACpD,MACJ,KAAK,EACDD,EAAUj/e,KAAK2/e,iBAAiBrjf,EAAQ4+D,EAAUgkb,GAClD,MACJ,KAAK,GACDD,EAAUj/e,KAAK4/e,qBAAqBtjf,EAAQ4+D,EAAUgkb,GAK9D,OAAOD,GAGXJ,EAAczjf,UAAUykf,WAAa,SAAU3kb,EAAU5+D,EAAQwjf,EAAkBZ,EAAeH,GAC9F,IAAIgB,OAAc7kf,EACdoO,EAAeu1e,EAAcmB,gBAAgBjB,EAAkB7jb,GAC/Dl7D,KAAKg/e,eAAe37P,YAAY/5O,KAChCy2e,EAAc//e,KAAKg/e,eAAet3e,IAAI4B,IAE1C,IAAI22e,OAAc/kf,EAQlB,OAPIggE,IAAa4kb,EACbG,EAAcf,EAET5if,EAAO+mP,YAAY/5O,KACxB22e,EAAc3jf,EAAOoL,IAAI4B,MAGvBy2e,IAAgBE,IAAiBxif,EAAkBsif,KAAiBtif,EAAkBwif,IAAgBF,IAAgBE,IAQhIpB,EAAcmB,gBAAkB,SAAUjB,EAAkB7jb,GACxD,IAAIx0D,EAAO,EACX,OAAQq4e,GACJ,KAAK,EACDr4e,EAAO1G,KAAKkgf,sBAAsBhlb,GAClC,MACJ,KAAK,EACDx0D,EAAO1G,KAAKmgf,+BAA+Bjlb,GAC3C,MACJ,KAAK,EACDx0D,EAAO1G,KAAKogf,0BAA0Bllb,GACtC,MACJ,KAAK,EACDx0D,EAAO1G,KAAKqgf,0BAA0Bnlb,GACtC,MACJ,KAAK,EACDx0D,EAAO1G,KAAKsgf,uBAAuBplb,GACnC,MACJ,KAAK,EACDx0D,EAAO1G,KAAKugf,iBAAiBrlb,GAC7B,MACJ,KAAK,EACDx0D,EAAO1G,KAAKwgf,kBAAkBtlb,GAC9B,MACJ,KAAK,EACDx0D,EAAO1G,KAAKygf,mBAAmBvlb,GAC/B,MACJ,KAAK,EACDx0D,EAAO1G,KAAK0gf,iBAAiBxlb,GAC7B,MACJ,KAAK,GACDx0D,EAAO1G,KAAK2gf,qBAAqBzlb,GAKzC,OAAOx0D,GAEXm4e,EAAc0B,iBAAmB,SAAUrlb,GACvC,MAAiB,0BAAbA,EACO,EAEM,aAAbA,EACO,EAEM,WAAbA,EACO,EAEM,eAAbA,EACO,EAEM,eAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,wBAAbA,EACO,EAEM,cAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,uBAAbA,EACO,GAEJ,GAEX2jb,EAAc2B,kBAAoB,SAAUtlb,GACxC,MAAiB,WAAbA,EACO,EAEM,oBAAbA,EACO,EAEJ,GAEX2jb,EAAc4B,mBAAqB,SAAUvlb,GACzC,MAAiB,eAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,cAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,eAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,uBAAbA,EACO,EAEJ,GAEX2jb,EAAc6B,iBAAmB,SAAUxlb,GACvC,MAAiB,qBAAbA,EACO,EAEM,YAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX2jb,EAAcyB,uBAAyB,SAAUplb,GAC7C,MAAiB,oBAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX2jb,EAAcwB,0BAA4B,SAAUnlb,GAChD,MAAiB,eAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,cAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,eAAbA,EACO,EAEM,YAAbA,EACO,EAEM,sBAAbA,EACO,EAEM,uBAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,cAAbA,EACO,GAEJ,GAEX2jb,EAAcqB,sBAAwB,SAAUhlb,GAC5C,MAAiB,UAAbA,EACO,EAEM,cAAbA,EACO,EAEM,cAAbA,EACO,EAEM,WAAbA,EACO,EAEM,UAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX2jb,EAAcsB,+BAAiC,SAAUjlb,GACrD,MAAiB,cAAbA,EACO,EAEM,eAAbA,EACO,EAEM,aAAbA,EACO,EAEM,SAAbA,EACO,EAEM,WAAbA,EACO,EAEM,cAAbA,EACO,EAEM,kBAAbA,EACO,EAEM,sBAAbA,EACO,EAEM,mBAAbA,EACO,EAEJ,GAEX2jb,EAAcuB,0BAA4B,SAAUllb,GAChD,MAAiB,eAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,kBAAbA,EACO,EAEM,kBAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX2jb,EAAc8B,qBAAuB,SAAUzlb,GAC3C,MAAiB,mBAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,uBAAbA,EACO,EAEM,6BAAbA,EACO,EAEM,cAAbA,EACO,EAEM,eAAbA,EACO,EAEM,eAAbA,EACO,EAEM,cAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,iBAAbA,EACO,GAEJ,GAKX2jb,EAAczjf,UAAU+jf,cAAgB,SAAU7if,EAAQwjf,EAAkBZ,GACxE,OAAIl/e,KAAK6/e,WAAW,QAASvjf,EAAQwjf,EAAkBZ,EAAe,MAGlEl/e,KAAK6/e,WAAW,YAAavjf,EAAQwjf,EAAkBZ,EAAe,MAGtEl/e,KAAK6/e,WAAW,YAAavjf,EAAQwjf,EAAkBZ,EAAe,MAGtEl/e,KAAK6/e,WAAW,SAAUvjf,EAAQwjf,EAAkBZ,EAAe,MAGnEl/e,KAAK6/e,WAAW,QAASvjf,EAAQwjf,EAAkBZ,EAAe,KAGlEl/e,KAAK6/e,WAAW,eAAgBvjf,EAAQwjf,EAAkBZ,EAAe,QAQjFL,EAAczjf,UAAUgkf,uBAAyB,SAAU9if,EAAQwjf,EAAkBZ,GACjF,OAAIl/e,KAAK6/e,WAAW,YAAavjf,EAAQwjf,EAAkBZ,EAAe,MAGtEl/e,KAAK6/e,WAAW,aAAcvjf,EAAQwjf,EAAkBZ,EAAe,MAGvEl/e,KAAK6/e,WAAW,WAAYvjf,EAAQwjf,EAAkBZ,EAAe,MAGrEl/e,KAAK6/e,WAAW,OAAQvjf,EAAQwjf,EAAkBZ,EAAe,MAGjEl/e,KAAK6/e,WAAW,SAAUvjf,EAAQwjf,EAAkBZ,EAAe,MAGnEl/e,KAAK6/e,WAAW,YAAavjf,EAAQwjf,EAAkBZ,EAAe,MAGtEl/e,KAAK6/e,WAAW,gBAAiBvjf,EAAQwjf,EAAkBZ,EAAe,MAG1El/e,KAAK6/e,WAAW,oBAAqBvjf,EAAQwjf,EAAkBZ,EAAe,KAG9El/e,KAAK6/e,WAAW,iBAAkBvjf,EAAQwjf,EAAkBZ,EAAe,WAKnFL,EAAczjf,UAAUikf,uBAAyB,SAAU/if,EAAQwjf,EAAkBZ,GACjF,OAAIl/e,KAAK6/e,WAAW,aAAcvjf,EAAQwjf,EAAkBZ,EAAe,MAGvEl/e,KAAK6/e,WAAW,cAAevjf,EAAQwjf,EAAkBZ,EAAe,MAGxEl/e,KAAK6/e,WAAW,kBAAmBvjf,EAAQwjf,EAAkBZ,EAAe,MAG5El/e,KAAK6/e,WAAW,gBAAiBvjf,EAAQwjf,EAAkBZ,EAAe,MAG1El/e,KAAK6/e,WAAW,gBAAiBvjf,EAAQwjf,EAAkBZ,EAAe,MAG1El/e,KAAK6/e,WAAW,eAAgBvjf,EAAQwjf,EAAkBZ,EAAe,MAGzEl/e,KAAK6/e,WAAW,cAAevjf,EAAQwjf,EAAkBZ,EAAe,MAGxEl/e,KAAK6/e,WAAW,kBAAmBvjf,EAAQwjf,EAAkBZ,EAAe,KAG5El/e,KAAK6/e,WAAW,eAAgBvjf,EAAQwjf,EAAkBZ,EAAe,WAQjFL,EAAczjf,UAAUkkf,kBAAoB,SAAUhjf,EAAQwjf,EAAkBZ,GAC5E,OAAIl/e,KAAK6/e,WAAW,aAAcvjf,EAAQwjf,EAAkBZ,EAAe,MAGvEl/e,KAAK6/e,WAAW,cAAevjf,EAAQwjf,EAAkBZ,EAAe,MAGxEl/e,KAAK6/e,WAAW,YAAavjf,EAAQwjf,EAAkBZ,EAAe,MAGtEl/e,KAAK6/e,WAAW,eAAgBvjf,EAAQwjf,EAAkBZ,EAAe,MAGzEl/e,KAAK6/e,WAAW,aAAcvjf,EAAQwjf,EAAkBZ,EAAe,MAGvEl/e,KAAK6/e,WAAW,UAAWvjf,EAAQwjf,EAAkBZ,EAAe,MAGpEl/e,KAAK6/e,WAAW,oBAAqBvjf,EAAQwjf,EAAkBZ,EAAe,MAG9El/e,KAAK6/e,WAAW,qBAAsBvjf,EAAQwjf,EAAkBZ,EAAe,MAG/El/e,KAAK6/e,WAAW,iBAAkBvjf,EAAQwjf,EAAkBZ,EAAe,KAG3El/e,KAAK6/e,WAAW,YAAavjf,EAAQwjf,EAAkBZ,EAAe,YAQ9EL,EAAczjf,UAAUmkf,eAAiB,SAAUjjf,EAAQwjf,EAAkBZ,GACzE,OAAIl/e,KAAK6/e,WAAW,kBAAmBvjf,EAAQwjf,EAAkBZ,EAAe,MAG5El/e,KAAK6/e,WAAW,kBAAmBvjf,EAAQwjf,EAAkBZ,EAAe,KAG5El/e,KAAK6/e,WAAW,eAAgBvjf,EAAQwjf,EAAkBZ,EAAe,KAQjFL,EAAczjf,UAAUokf,iBAAmB,SAAUljf,EAAQwjf,EAAkBZ,GAC3E,OAAIl/e,KAAK6/e,WAAW,wBAAyBvjf,EAAQwjf,EAAkBZ,EAAe,MAGlFl/e,KAAK6/e,WAAW,WAAYvjf,EAAQwjf,EAAkBZ,EAAe,MAGrEl/e,KAAK6/e,WAAW,SAAUvjf,EAAQwjf,EAAkBZ,EAAe,MAGnEl/e,KAAK6/e,WAAW,aAAcvjf,EAAQwjf,EAAkBZ,EAAe,MAGvEl/e,KAAK6/e,WAAW,aAAcvjf,EAAQwjf,EAAkBZ,EAAe,MAGvEl/e,KAAK6/e,WAAW,kBAAmBvjf,EAAQwjf,EAAkBZ,EAAe,MAG5El/e,KAAK6/e,WAAW,sBAAuBvjf,EAAQwjf,EAAkBZ,EAAe,MAGhFl/e,KAAK6/e,WAAW,YAAavjf,EAAQwjf,EAAkBZ,EAAe,MAGtEl/e,KAAK6/e,WAAW,iBAAkBvjf,EAAQwjf,EAAkBZ,EAAe,KAG3El/e,KAAK6/e,WAAW,qBAAsBvjf,EAAQwjf,EAAkBZ,EAAe,YAQvFL,EAAczjf,UAAUqkf,kBAAoB,SAAUnjf,EAAQwjf,EAAkBZ,GAC5E,OAAIl/e,KAAK6/e,WAAW,SAAUvjf,EAAQwjf,EAAkBZ,EAAe,KAGnEl/e,KAAK6/e,WAAW,kBAAmBvjf,EAAQwjf,EAAkBZ,EAAe,IAQpFL,EAAczjf,UAAUskf,mBAAqB,SAAUpjf,EAAQwjf,EAAkBZ,GAC7E,OAAIl/e,KAAK6/e,WAAW,aAAcvjf,EAAQwjf,EAAkBZ,EAAe,MAGvEl/e,KAAK6/e,WAAW,cAAevjf,EAAQwjf,EAAkBZ,EAAe,MAGxEl/e,KAAK6/e,WAAW,YAAavjf,EAAQwjf,EAAkBZ,EAAe,MAGtEl/e,KAAK6/e,WAAW,eAAgBvjf,EAAQwjf,EAAkBZ,EAAe,MAGzEl/e,KAAK6/e,WAAW,cAAevjf,EAAQwjf,EAAkBZ,EAAe,MAGxEl/e,KAAK6/e,WAAW,aAAcvjf,EAAQwjf,EAAkBZ,EAAe,MAGvEl/e,KAAK6/e,WAAW,iBAAkBvjf,EAAQwjf,EAAkBZ,EAAe,MAG3El/e,KAAK6/e,WAAW,iBAAkBvjf,EAAQwjf,EAAkBZ,EAAe,KAG3El/e,KAAK6/e,WAAW,qBAAsBvjf,EAAQwjf,EAAkBZ,EAAe,WAQvFL,EAAczjf,UAAUukf,iBAAmB,SAAUrjf,EAAQwjf,EAAkBZ,GAC3E,OAAIl/e,KAAK6/e,WAAW,mBAAoBvjf,EAAQwjf,EAAkBZ,EAAe,MAG7El/e,KAAK6/e,WAAW,UAAWvjf,EAAQwjf,EAAkBZ,EAAe,MAGpEl/e,KAAK6/e,WAAW,kBAAmBvjf,EAAQwjf,EAAkBZ,EAAe,MAG5El/e,KAAK6/e,WAAW,eAAgBvjf,EAAQwjf,EAAkBZ,EAAe,KAGzEl/e,KAAK6/e,WAAW,eAAgBvjf,EAAQwjf,EAAkBZ,EAAe,OAQjFL,EAAczjf,UAAUwkf,qBAAuB,SAAUtjf,EAAQwjf,EAAkBZ,GAC/E,OAAIl/e,KAAK6/e,WAAW,iBAAkBvjf,EAAQwjf,EAAkBZ,EAAe,OAG3El/e,KAAK6/e,WAAW,iBAAkBvjf,EAAQwjf,EAAkBZ,EAAe,OAG3El/e,KAAK6/e,WAAW,qBAAsBvjf,EAAQwjf,EAAkBZ,EAAe,OAG/El/e,KAAK6/e,WAAW,2BAA4Bvjf,EAAQwjf,EAAkBZ,EAAe,OAGrFl/e,KAAK6/e,WAAW,YAAavjf,EAAQwjf,EAAkBZ,EAAe,OAGtEl/e,KAAK6/e,WAAW,aAAcvjf,EAAQwjf,EAAkBZ,EAAe,OAGvEl/e,KAAK6/e,WAAW,aAAcvjf,EAAQwjf,EAAkBZ,EAAe,OAGvEl/e,KAAK6/e,WAAW,YAAavjf,EAAQwjf,EAAkBZ,EAAe,OAGtEl/e,KAAK6/e,WAAW,cAAevjf,EAAQwjf,EAAkBZ,EAAe,MAGxEl/e,KAAK6/e,WAAW,eAAgBvjf,EAAQwjf,EAAkBZ,EAAe,aAQjFL,EAAczjf,UAAUwlf,WAAa,SAAUrid,EAAQ28B,EAAUn+D,EAAOgif,GAGpE,IAAK,IAFDz1e,EAAeu1e,EAAcmB,gBAAgBjB,EAAkB7jb,GAC/D59D,EAAOihC,EAAOygd,eAAersY,UACxBz2G,EAAI,EAAGA,EAAIoB,EAAKd,OAAQN,IACzBoB,EAAKpB,KAAOoN,EACZtJ,KAAKg/e,eAAe56e,IAAIkF,EAAcvM,GAGtCiD,KAAKg/e,eAAe56e,IAAI9G,EAAKpB,GAAIqiC,EAAOygd,eAAet3e,IAAIpK,EAAKpB,KAGnEqiC,EAAOygd,eAAe37P,YAAY/5O,IACnCtJ,KAAKg/e,eAAe56e,IAAIkF,EAAcvM,IAM9C8hf,EAAczjf,UAAUylf,gBAAkB,SAAUtid,GAGhD,IAAK,IAFD40E,EAAO50E,EAAOuid,kBACdxjf,EAAO0C,KAAKg/e,eAAe1hf,KACtBpB,EAAI,EAAGA,EAAIoB,EAAKd,OAAQN,IACxBi3G,EAAKkwI,YAAY/lP,EAAKpB,KACvBi3G,EAAK/uG,IAAI9G,EAAKpB,GAAI8D,KAAKg/e,eAAet3e,IAAIpK,EAAKpB,KAGvD,OAAOi3G,GAKX0rY,EAAczjf,UAAU0lf,gBAAkB,WAGtC,IAAK,IAFD3tY,EAAO,IAAIovI,GACXjlP,EAAO0C,KAAKg/e,eAAe1hf,KACtBpB,EAAI,EAAGA,EAAIoB,EAAKd,OAAQN,IAC7Bi3G,EAAK/uG,IAAI9G,EAAKpB,GAAI8D,KAAKg/e,eAAet3e,IAAIpK,EAAKpB,KAEnD,OAAOi3G,GAYX0rY,EAAczjf,UAAUiX,QAAU,WACzB5U,EAAkBuC,KAAKg/e,iBACxBh/e,KAAKg/e,eAAe3se,UAExBrS,KAAKg/e,oBAAiB9jf,EACtB8E,KAAK8+e,oBAAiB5jf,EACtB8E,KAAK++e,sBAAmB7jf,GAErB2jf,KCrrBPkC,GAAgC,WAChC,SAASA,IACL/gf,KAAK0/D,SA6ET,OAxEAqhb,EAAe3lf,UAAU4lf,gBAAkB,SAAUzid,EAAQ73B,GAEzD,IAAK,IADDu6e,OAAgB/lf,EACXgB,EAAI,EAAGA,EAAI8D,KAAK0/D,MAAMljE,OAAQN,IACnC,GAAI8D,KAAK0/D,MAAMxjE,GAAG+if,QAAQ1gd,OAAQrjC,OAAWA,GAAY,CACrD+lf,EAAgBjhf,KAAK0/D,MAAMxjE,GAC3B,MAYR,OATIuB,EAAkBwjf,KAClBA,EAAgB,IAAIpC,GAAcn4e,IACpBs4e,eAAiBzgd,EAC/B0id,EAAcnC,eAAiB,EAC/B9+e,KAAK0/D,MAAMl7D,KAAKy8e,IAGhBA,EAAcnC,iBAEXmC,GAKXF,EAAe3lf,UAAU8lf,mBAAqB,SAAUC,EAAcjmb,EAAUn+D,GAE5E,IAAK,IADDkkf,OAAgB/lf,EACXgB,EAAI,EAAGA,EAAI8D,KAAK0/D,MAAMljE,OAAQN,IACnC,GAAI8D,KAAK0/D,MAAMxjE,GAAG+if,QAAQkC,EAAanC,eAAgB9jb,EAAUn+D,GAAQ,CACrEkkf,EAAgBjhf,KAAK0/D,MAAMxjE,GAC3B,MAcR,OAXIuB,EAAkBwjf,KAClBA,EAAgB,IAAIpC,GAAcsC,EAAapC,mBACjC6B,WAAWO,EAAcjmb,EAAUn+D,EAAOokf,EAAapC,kBACrEkC,EAAcnC,eAAiB,EAC/B9+e,KAAK0/D,MAAMl7D,KAAKy8e,IAGhBA,EAAcnC,iBAElB9+e,KAAKuE,OAAO48e,GACZA,OAAejmf,EACR+lf,GAKXF,EAAe3lf,UAAUmJ,OAAS,SAAU48e,GACxCA,EAAarC,iBACTqC,EAAarC,gBAAkB,IAC/B9+e,KAAK0/D,MAAM/2C,OAAO3oB,KAAK0/D,MAAMnhE,QAAQ4if,GAAe,GACpDA,EAAa9ue,UACb8ue,OAAejmf,IAMvB6lf,EAAe3lf,UAAUqxD,MAAQ,WAC7B,GAAIhvD,EAAkBuC,KAAK0/D,OACvB,IAAK,IAAIxjE,EAAI,EAAGA,EAAI8D,KAAK0/D,MAAMljE,OAAQN,IACnC8D,KAAK0/D,MAAMxjE,GAAGmW,UAGtBrS,KAAK0/D,UAKTqhb,EAAe3lf,UAAUiX,QAAU,WAC/BrS,KAAKysD,QACLzsD,KAAK0/D,WAAQxkE,GAEV6lf,KCpFPtwZ,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GA0B5Diid,GAAgC,SAAU9vZ,GAK1C,SAAS8vZ,EAAepue,EAAShS,GAC7B,IAAIjB,EAAQuxF,EAAOhwF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAuTnD,OArTAD,EAAMshf,sBAAuB,EAI7Bthf,EAAMuhf,mBAAoB,EAI1Bvhf,EAAMwhf,iBAAkB,EAIxBxhf,EAAMyhf,kBAAmB,EAIzBzhf,EAAM28F,YAASxhG,EACf6E,EAAM0hf,kBAAmB,EAIzB1hf,EAAM2hf,qBAAkBxmf,EAIxB6E,EAAM4hf,aAAe,GAIrB5hf,EAAM6hf,iCAA8B1mf,EAIpC6E,EAAM8hf,mCAAgC3mf,EAItC6E,EAAM+hf,6BAA0B5mf,EAIhC6E,EAAMgif,8BAA2B7mf,EAIjC6E,EAAMiif,2BAAwB9mf,EAI9B6E,EAAMkif,wBAAqB/mf,EAI3B6E,EAAMmif,+BAAgC,EAItCnif,EAAMoif,YAAc,UAIpBpif,EAAMqif,wBAAyB,EAI/Brif,EAAMsif,kBAAmB,EAIzBtif,EAAM8rc,eACFy2C,MAAS,QACT16Q,IAAO,MACP26Q,KAAQ,OACRC,GAAM,KACNlkV,OAAU,SACV3uI,KAAQ,OACR8yd,kBAAmB,kBACnB7sQ,OAAU,SACV8sQ,QAAW,UACXC,aAAc,aACdC,UAAa,YACbx0M,KAAQ,OACRnE,OAAU,SACVC,MAAS,QACT+B,QAAW,UACX42M,mBAAoB,mBACpBC,sBAAuB,sBACvBC,QAAW,UACXC,iBAAkB,iBAClBC,WAAY,WACZC,QAAW,UACXC,gBAAiB,gBACjBC,kCAAmC,kCACnCC,+CAAgD,+CAChDC,qBAAsB,qBACtBj1O,IAAO,MACPg8B,OAAU,SACVk5M,uBAAwB,uBACxBC,uBAAwB,uBACxBC,8BAA+B,8BAC/BC,eAAgB,eAChBC,0BAA2B,0BAC3BC,QAAW,UACXtqS,KAAQ,OACRuqS,OAAU,SACVpjO,IAAO,MACPqjO,aAAgB,eAChBC,aAAgB,eAChBrjO,QAAW,UACXC,WAAc,aACdr8C,OAAU,SACV0/Q,OAAU,SACVC,kBAAqB,oBACrBC,kBAAqB,oBACrBC,sBAAyB,wBACzBC,mBAAsB,qBACtBC,mBAAsB,qBACtBC,uBAA0B,yBAC1BC,kBAAqB,oBACrBC,kBAAqB,oBACrBC,sBAAyB,wBACzBC,WAAc,aACdC,WAAc,aACdC,eAAkB,iBAClBC,SAAY,WACZC,UAAa,YACbC,OAAU,SACVC,MAAS,QACTC,MAAS,QACTC,MAAS,QACTC,MAAS,QACTC,OAAU,SACVC,OAAU,SACVC,QAAW,UACXC,MAAS,QACTC,UAAa,YACbC,UAAa,YACbC,GAAM,KACNC,GAAM,KACNC,GAAM,KACNC,GAAM,KACNC,GAAM,KACNC,cAAe,cACfC,yBAA0B,yBAC1BC,uBAAwB,uBACxBC,YAAa,YACblrH,OAAU,SACVmrH,OAAU,SACVtiR,OAAU,UACVuiR,MAAS,QACTrmE,OAAU,SACVsmE,YAAe,cACflpO,UAAa,YACbJ,SAAY,WACZupO,oBAAqB,oBACrBC,oBAAqB,oBACrBC,2BAA4B,2BAC5BC,QAAW,UACXC,aAAc,aACdC,cAAe,cACfC,yCAA0C,yCAC1CC,+BAAgC,+BAChCC,OAAU,SACVC,mBAAoB,mBACpBC,YAAa,YACbC,QAAW,UACXC,iBAAkB,iBAClBptO,OAAU,SACVqtO,iBAAkB,iBAClBC,qBAAsB,qBACtBC,OAAU,SACVC,MAAS,QACTC,QAAW,UACXC,IAAO,MACP73E,IAAO,MACPpvJ,OAAU,SACVknO,QAAW,UACXC,QAAW,UACX5hN,KAAQ,OACR6hN,WAAY,WACZC,mBAAoB,mBACpBC,eAAgB,eAChBC,gBAAiB,gBACjBC,eAAgB,eAChBC,oBAAqB,oBACrBC,iBAAkB,iBAClBC,kBAAmB,kBACnBC,QAAW,UACXC,mBAAoB,mBACpBC,iBAAkB,iBAClBC,OAAU,SACVC,QAAW,UACXC,YAAe,cACfC,cAAe,cACfC,QAAW,UACXC,aAAc,aACdC,QAAW,UACXC,aAAc,aACdC,GAAM,KACNC,OAAU,SACVC,eAAgB,eAChBC,MAAS,QACTC,GAAM,KACN97B,SAAY,WACZ+7B,QAAW,UACXC,6BAA8B,6BAC9BC,aAAc,aACdC,yBAA0B,yBAC1BC,MAAS,QACTC,gBAAiB,gBACjBC,8BAA+B,8BAC/BC,8BAA+B,8BAC/BC,WAAY,WACZC,qBAAsB,qBACtB71Y,SAAY,WACZ81Y,iBAAkB,iBAClBC,aAAc,aACdC,qBAAsB,qBACtBC,gBAAiB,gBACjBC,MAAS,QACTC,OAAU,SACVC,QAAW,UACXC,SAAY,WACZC,SAAY,WACZC,UAAa,YACblzd,OAAU,SACVmzd,eAAgB,eAChBC,OAAU,SACVC,QAAW,UACXC,eAAgB,eAChBC,WAAY,WACZC,aAAc,aACdlnR,KAAQ,OACRmnR,aAAc,aACdC,kBAAmB,kBACnBC,aAAc,aACdC,QAAW,UACXC,cAAiB,gBACjBC,YAAe,cACfC,UAAa,YACbC,uBAAwB,uBACxBj4O,QAAW,UACXG,KAAQ,OACRC,OAAU,SACVw4L,IAAO,MACPD,KAAQ,OACRE,MAAS,QACTviC,UAAa,YACb4hF,iBAAkB,iBAClBC,iBAAkB,iBAClBC,mBAAoB,mBACpBC,UAAa,YACbC,cAAe,cACfC,eAAgB,eAChBC,eAAgB,eAChBC,cAAe,cACfC,eAAgB,eAChBj8C,OAAU,SACVk8C,eAAgB,eAChBC,aAAc,aACdC,gBAAiB,gBACjBC,YAAa,YACbC,cAAe,cACft8P,KAAQ,OACRu8P,WAAc,aACdC,QAAW,UACXC,QAAW,UACXC,cAAe,cACfC,kBAAmB,kBACnBC,KAAQ,OACRC,aAAc,aACdC,WAAY,WACZC,OAAU,SACVC,GAAM,KACNhqf,UAAa,YACbiqf,KAAQ,OACRC,uBAAwB,uBACxBC,qBAAsB,qBACtBC,gBAAiB,gBACjBC,MAAS,QACTC,aAAc,aACdC,WAAc,aACdC,KAAQ,OACRC,aAAc,aACdC,iBAAkB,iBAClBC,gCAAiC,gCACjCC,WAAc,aACdC,wBAAyB,wBACzBC,UAAa,YACbC,eAAgB,eAChBC,aAAc,aACdC,SAAY,WACZC,aAAc,aACdC,qBAAsB,qBACtBC,oCAAqC,0YAKrCC,OAAU,SACVC,mBAAoB,mBACpBC,eAAgB,eAChBC,IAAO,MACPC,QAAW,UACXC,gBAAiB,gBACjBC,oBAAqB,qBAEzBxuf,EAAMyuf,OAAS,IAAIC,GAAiB1uf,GACpCA,EAAM28F,OAAS,IAAIgyZ,GAAW3uf,EAAMyuf,QAC7Bzuf,EA5TX0wF,GAAU2wZ,EAAgB9vZ,GA8T1Bq9Z,EAAmBvN,EACnB9if,OAAOuJ,eAAeu5e,EAAehmf,UAAW,yBAI5CsM,IAAK,WACD,OAAO1H,KAAKqhf,sBAEhBh6e,IAAK,SAAUtK,GACXiD,KAAKqhf,qBAAuBtkf,EAC5BiD,KAAKwuf,OAAOI,oBAEhBjnf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,aAI5CsM,IAAK,WACD,OAAK1H,KAAK6uf,kBAAoBpxf,EAAkBuC,KAAKwuf,QAC1C,EAEJxuf,KAAKwuf,OAAOzmQ,MAAMvrP,QAE7BmL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,aAM5CsM,IAAK,WACD,OAAO1H,KAAK00O,iBAEhB/sO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,UAM5CsM,IAAK,WACD,OAAO1H,KAAK8uf,cAEhBnnf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,iBAK5CsM,IAAK,WACD,OAAO1H,KAAK+uf,qBAEhBpnf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,UAK5CsM,IAAK,WACD,OAAO1H,KAAKgvf,cAEhBrnf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,eAK5CsM,IAAK,WACD,OAAO1H,KAAKivf,mBAEhBtnf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,eAI5CsM,IAAK,WACD,OAAO1H,KAAKgB,QAAQsC,IAExBqE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,oBAI5CsM,IAAK,WACD,OAAO1H,KAAKkvf,oBAEhB7nf,IAAK,SAAUtK,GACXiD,KAAKkvf,mBAAqBnyf,GAE9B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,qBAM5CsM,IAAK,WACD,OAAO1H,KAAKmvf,sBAAwB1xf,EAAkBuC,KAAK+uf,sBAE/Dpnf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,iBAM5CsM,IAAK,WACD,IAAKjK,EAAkBuC,KAAK00O,iBACxB,OAAO10O,KAAKi2E,UAAUm5a,oBAI9Bznf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,eAM5CsM,IAAK,WACD,IAAKjK,EAAkBuC,KAAK00O,iBACxB,OAAO10O,KAAKi2E,UAAUo5a,kBAI9B1nf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,kBAI5CsM,IAAK,WACD,OAAO1H,KAAKsvf,YAAc7xf,EAAkBuC,KAAK8uf,eAAiBrxf,EAAkBuC,KAAK00O,kBAE7F/sO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu5e,EAAehmf,UAAW,0BAM5CsM,IAAK,WACD,OAAO1H,KAAKuvf,qBAAuB9xf,EAAkBuC,KAAKiif,qBAE9Dt6e,YAAY,EACZC,cAAc,IAElBw5e,EAAehmf,UAAUqX,UAAY,WACjCzS,KAAK0hf,oBAGTN,EAAehmf,UAAUg3G,OAAS,WAG9B,GAFApyG,KAAKwuf,OAAOgB,uBACZxvf,KAAKyvf,aACAhyf,EAAkBuC,KAAKgB,SAAU,CAClC,IAAI6Z,EAAY7a,KAAKgB,QACrB6Z,EAAUnW,MAAMqrD,UAAY,QAC5Bl1C,EAAUnW,MAAMurD,SAAW,UAOnCmxb,EAAehmf,UAAU2mC,cAAgB,WACrC,MAAO,kBAMXq/c,EAAehmf,UAAUuyF,kBAAoB,SAAUthE,EAAOymE,GAC1D,IAAK,IAAI10F,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK+uB,GAAQjuB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAE5D,OADWyE,EAAGzE,IAEV,IAAK,aACG4B,KAAKwuf,SACLxuf,KAAKwuf,OAAO15a,WAAazoD,EAAMyoD,YAEnC,MACJ,IAAK,SACD90E,KAAK0vf,kBACL,MACJ,IAAK,cACIjyf,EAAkBuC,KAAK2vf,oBAAsB3vf,KAAK2vf,kBAAkBC,mBACrE5vf,KAAK2vf,kBAAkBE,qBAAoB,MAM/DzO,EAAehmf,UAAUs0f,gBAAkB,WACvC,GAAoB,KAAhB1vf,KAAKgO,OAAe,CACpB,IAAIirH,EAAO,IAAI7a,GAAK,iBAAkBp+G,KAAK6rc,eAC3C5yU,EAAK1a,UAAUv+G,KAAKgO,QACpBL,GAAW3N,KAAKgO,QACZhO,KAAK2vf,mBACL3vf,KAAK2vf,kBAAkBG,gBAAgB72X,GAEvCj5H,KAAKgif,uBACLhif,KAAKgif,sBAAsB+N,oBAAoB92X,GAE/Cj5H,KAAKgwf,uBACLhwf,KAAKgwf,sBAAsBC,oBAAoBh3X,GAE/Cj5H,KAAKkwf,kBACLlwf,KAAKkwf,iBAAiBC,eAAel3X,GAErCj5H,KAAKowf,uBACLpwf,KAAKowf,sBAAsBC,oBAAoBp3X,GAE/Cj5H,KAAKivf,mBACLjvf,KAAKivf,kBAAkBqB,gBAAgBr3X,GAEvCj5H,KAAKuwf,kBACLvwf,KAAKuwf,iBAAiBC,eAAev3X,GAErCj5H,KAAK4hf,6BACL5hf,KAAK4hf,4BAA4B6O,wBAAwBx3X,GAEzDj5H,KAAK6hf,+BACL7hf,KAAK6hf,8BAA8B6O,6BAA6Bz3X,GAEhEj5H,KAAK8hf,yBACL9hf,KAAK8hf,wBAAwB6O,sBAAsB13X,GAEnDj5H,KAAK+hf,0BACL/hf,KAAK+hf,yBAAyB6O,uBAAuB33X,GAErDj5H,KAAK6wf,mBACL7wf,KAAK6wf,kBAAkBC,gBAAgB73X,GAEvCj5H,KAAK+wf,mBACL/wf,KAAK+wf,kBAAkBC,gBAAgB/3X,GAEvCj5H,KAAKixf,6BACLjxf,KAAKixf,4BAA4BC,yBAAyBj4X,KAQtEmoX,EAAehmf,UAAUy3G,eAAiB,WACtC,MAAO,kBAEXuuY,EAAehmf,UAAU+1f,kCAAoC,WACrDnxf,KAAKwuf,kBAAkB4C,IACvBpxf,KAAKwuf,OAAO6C,sBAMpBjQ,EAAehmf,UAAUk2f,yBAA2B,WAChD,OAAOtxf,KAAKgB,SAKhBogf,EAAehmf,UAAUm2f,kBAAoB,WACzC,IAAIhkf,GAAcjR,OAAQ0D,MAC1BA,KAAK2mB,QAAQ,gBAAiBpZ,IAKlC6ze,EAAehmf,UAAUo2f,mBAAqB,WAC1C,IAAIjkf,GAAcjR,OAAQ0D,MAC1BA,KAAK2mB,QAAQ,iBAAkBpZ,IAKnC6ze,EAAehmf,UAAUq2f,oBAAsB,YACtCzxf,KAAKwuf,OAAOkD,oBAAsBlmf,GAAQqb,UAAY7mB,KAAK8uf,cAC5D9uf,KAAK8uf,aAAa6C,cAEtB,IAAIpkf,GAAcjR,OAAQ0D,MAC1BA,KAAK2mB,QAAQ,kBAAmBpZ,IAKpC6ze,EAAehmf,UAAUw2f,qBAAuB,WAC5C,IAAIrkf,GAAcjR,OAAQ0D,MAC1BA,KAAK2mB,QAAQ,mBAAoBpZ,IAKrC6ze,EAAehmf,UAAUy2f,eAAiB,WACtC,GAAI7xf,KAAKwuf,QAAUxuf,KAAKwuf,OAAOzmQ,MAAMvrP,OAAS,GACtCwD,KAAKwuf,OAAOsD,aAAat1f,OAAS,EAAG,CACrC,IAAIurP,EAAQ/nP,KAAKwuf,OAAOsD,aACpBvkf,GACA6rT,UAAWrxE,EAAM,GAAGj2O,MAAQ,EAC5Bigf,QAAShqQ,EAAMA,EAAMvrP,OAAS,GAAGsV,MAAQ,EACzCxV,OAAQ0D,MAEZA,KAAK2mB,QAAQ,aAAcpZ,KAQvC6ze,EAAehmf,UAAU42f,oBAAsB,SAAUC,GACjDjyf,KAAKgif,wBAA0Bhif,KAAKkyf,gBAAkBlyf,KAAKwuf,QAC3Dxuf,KAAKgif,sBAAsBxqX,KAAKy6X,IAOxC7Q,EAAehmf,UAAU+2f,oBAAsB,WACvCnyf,KAAKgwf,wBAA0Bhwf,KAAKkyf,gBAAkBlyf,KAAKwuf,QAC3Dxuf,KAAKgwf,sBAAsBx4X,QAOnC4pX,EAAehmf,UAAUg3f,eAAiB,SAAUC,GAC5Cryf,KAAKkwf,mBAAqBlwf,KAAKkyf,gBAAkBlyf,KAAKwuf,QACtDxuf,KAAKkwf,iBAAiBkC,eAAeC,IAO7CjR,EAAehmf,UAAUk3f,sBAAwB,WACzCtyf,KAAK8hf,0BAA4B9hf,KAAKkyf,gBAAkBlyf,KAAKwuf,QAC7Dxuf,KAAK8hf,wBAAwBtqX,QAOrC4pX,EAAehmf,UAAUm3f,uBAAyB,WAC1Cvyf,KAAK+hf,2BAA6B/hf,KAAKkyf,gBAAkBlyf,KAAKwuf,QAC9Dxuf,KAAK+hf,yBAAyBvqX,QAOtC4pX,EAAehmf,UAAUo3f,gBAAkB,WACnCxyf,KAAK6wf,oBAAsB7wf,KAAKkyf,gBAAkBlyf,KAAKwuf,QACvDxuf,KAAK6wf,kBAAkBr5X,QAO/B4pX,EAAehmf,UAAUq3f,0BAA4B,WAC7Czyf,KAAKixf,8BAAgCjxf,KAAKkyf,gBAAkBlyf,KAAKwuf,QACjExuf,KAAKixf,4BAA4Bz5X,QAQzC4pX,EAAehmf,UAAUs3f,gBAAkB,WACnC1yf,KAAK+wf,oBAAsB/wf,KAAKkyf,gBAAkBlyf,KAAKwuf,QACvDxuf,KAAK+wf,kBAAkBv5X,QAO/B4pX,EAAehmf,UAAUu3f,oBAAsB,WACvC3yf,KAAKowf,wBAA0Bpwf,KAAKkyf,gBAAkBlyf,KAAKwuf,QAC3Dxuf,KAAKowf,sBAAsB54X,QAOnC4pX,EAAehmf,UAAUw3f,mBAAqB,WACtC5yf,KAAK6yf,uBAAyB7yf,KAAKkyf,gBAAkBlyf,KAAKwuf,QAC1Dxuf,KAAK6yf,qBAAqBr7X,QAOlC4pX,EAAehmf,UAAU03f,iBAAmB,WACpC9yf,KAAK+yf,qBAAuB/yf,KAAKkyf,gBAAkBlyf,KAAKwuf,QACxDxuf,KAAK+yf,mBAAmBv7X,QAOhC4pX,EAAehmf,UAAU43f,eAAiB,WAClChzf,KAAKuwf,mBAAqBvwf,KAAKkyf,gBAAkBlyf,KAAKwuf,QACtDxuf,KAAKuwf,iBAAiByC,kBAO9B5R,EAAehmf,UAAU63f,0BAA4B,WAC7Cjzf,KAAK4hf,8BAAgC5hf,KAAKkyf,gBAAkBlyf,KAAKwuf,QACjExuf,KAAK4hf,4BAA4BpqX,QAOzC4pX,EAAehmf,UAAU83f,4BAA8B,WAC/Clzf,KAAK6hf,gCAAkC7hf,KAAKkyf,gBAAkBlyf,KAAKwuf,QACnExuf,KAAK6hf,8BAA8BrqX,QAI3C4pX,EAAehmf,UAAU47F,gBAAkB,WACvC,IAAIgB,KA6HJ,OA5HIh4F,KAAKmzf,aACLn7Z,EAAQxzF,MACJgzF,OAAQ,QAASv3F,WAGrBD,KAAKozf,kBAAoBpzf,KAAKqzf,kBAAoBrzf,KAAKszf,kBAAoBtzf,KAAKuzf,iBAAmBvzf,KAAKwzf,eACxGx7Z,EAAQxzF,MACJgzF,OAAQ,aAAcv3F,MAAOD,KAAKwuf,UAGtCxuf,KAAKqzf,kBACLr7Z,EAAQxzF,MACJgzF,OAAQ,aAAcv3F,UAG1BD,KAAKszf,kBACLt7Z,EAAQxzF,MACJgzF,OAAQ,aAAcv3F,WAG1BD,KAAKuzf,iBAAmBvzf,KAAKi3e,cAAgBj3e,KAAKwzf,gBAClDx7Z,EAAQxzF,MACJgzF,OAAQ,YAAav3F,MAAOD,QAE5BA,KAAKyzf,mBACLz7Z,EAAQxzF,MACJgzF,OAAQ,cAAev3F,MAAOD,KAAKwuf,WAI3Cxuf,KAAKi3e,eACLj/Y,EAAQxzF,MACJgzF,OAAQ,SAAUv3F,MAAOD,QAEzBA,KAAK0zf,mBACL17Z,EAAQxzF,MACJgzF,OAAQ,cAAev3F,MAAOD,KAAKwuf,WAI3Cxuf,KAAKwzf,eACLx7Z,EAAQxzF,MACJgzF,OAAQ,SAAUv3F,MAAOD,KAAKwuf,UAE9Bxuf,KAAKuvf,oBACLv3Z,EAAQxzF,MACJgzF,OAAQ,eAAgBv3F,MAAOD,KAAMA,KAAKwuf,UAG9Cxuf,KAAKmvf,qBACLn3Z,EAAQxzF,MACJgzF,OAAQ,gBAAiBv3F,MAAOD,QAGpCA,KAAK2zf,uBACL37Z,EAAQxzF,MACJgzF,OAAQ,kBAAmBv3F,MAAOD,KAAKwuf,UAG3Cxuf,KAAK4zf,mBACL57Z,EAAQxzF,MACJgzF,OAAQ,cAAev3F,MAAOD,KAAKwuf,UAGvCxuf,KAAK6zf,sBACL77Z,EAAQxzF,MACJgzF,OAAQ,iBAAkBv3F,MAAOD,KAAKwuf,UAG1Cxuf,KAAK8zf,6BACL97Z,EAAQxzF,MACJgzF,OAAQ,wBAAyBv3F,MAAOD,KAAKwuf,UAGjDxuf,KAAK+zf,uBACL/7Z,EAAQxzF,MACJgzF,OAAQ,kBAAmBv3F,MAAOD,KAAKwuf,UAG3Cxuf,KAAKg0f,oBACLh8Z,EAAQxzF,MACJgzF,OAAQ,eAAgBv3F,MAAOD,KAAKwuf,UAExCx2Z,EAAQxzF,MACJgzF,OAAQ,cAAev3F,MAAOD,KAAKwuf,UAEvCx2Z,EAAQxzF,MACJgzF,OAAQ,4BAA6Bv3F,MAAOD,KAAKwuf,WAGrDxuf,KAAKi0f,kBACLj8Z,EAAQxzF,MACJgzF,OAAQ,aAAcv3F,MAAOD,KAAKwuf,UAGtCxuf,KAAKk0f,uBACLl8Z,EAAQxzF,MACJgzF,OAAQ,kBAAmBv3F,MAAOD,KAAKwuf,UAG3Cxuf,KAAKm0f,kBACLn8Z,EAAQxzF,MACJgzF,OAAQ,aAAcv3F,MAAOD,KAAKwuf,UAGtCxuf,KAAKo0f,8BACLp8Z,EAAQxzF,MACJgzF,OAAQ,wBAAyBv3F,MAAOD,KAAKwuf,UAEjDx2Z,EAAQxzF,MACJgzF,OAAQ,oBAAqBv3F,MAAOD,KAAKwuf,WAG7Cxuf,KAAKq0f,+BACLr8Z,EAAQxzF,MACJgzF,OAAQ,0BAA2Bv3F,MAAOD,KAAKwuf,UAGnDxuf,KAAKs0f,0BACLt8Z,EAAQxzF,MACJgzF,OAAQ,qBAAsBv3F,MAAOD,KAAKwuf,WAI/Cx2Z,GAOXopZ,EAAehmf,UAAUsG,KAAO,SAAU6yf,GACjC92f,EAAkBuC,KAAKwuf,UACxBxuf,KAAKmxf,oCACLnxf,KAAKwuf,OAAO55M,SACZ50S,KAAKwuf,OAAOgG,iBACZx0f,KAAKwuf,OAAOjrf,OAAS,IAAIkxf,IACpBh3f,EAAkB82f,IAAav0f,KAAKwuf,SACrCxuf,KAAKwuf,OAAOkG,kBAAkB10f,KAAK08F,OAAOi4Z,sBAAsBJ,IAC5Dv0f,KAAK8uf,cACL9uf,KAAK8uf,aAAa8F,4BAUlCxT,EAAehmf,UAAUy5f,aAAe,SAAU7yQ,GAC9C,QAAIvkP,EAAkBuC,KAAKwuf,SAAWxsQ,EAAa,GAAKA,EAAahiP,KAAKwuf,OAAOzmQ,MAAMvrP,UAGvFwD,KAAKwuf,OAAOqG,aAAa7yQ,EAAa,IAC/B,IAMXo/P,EAAehmf,UAAU05f,iBAAmB,WACxC90f,KAAKmzf,YAAcnzf,KAAKozf,iBAAmBpzf,KAAKqzf,iBAAmBrzf,KAAKszf,iBAClEtzf,KAAKuzf,gBAAkBvzf,KAAKyzf,kBAAoBzzf,KAAKi3e,aAAej3e,KAAK0zf,kBACrE1zf,KAAKwzf,aAAexzf,KAAKuvf,mBAAqBvvf,KAAKmvf,oBAC/Cnvf,KAAK2zf,sBAAwB3zf,KAAK4zf,kBAAoB5zf,KAAK6zf,qBACvD7zf,KAAK8zf,4BAA8B9zf,KAAK+zf,sBAAwB/zf,KAAKg0f,kBACjEh0f,KAAKi0f,iBAAmBj0f,KAAKk0f,sBAAwBl0f,KAAKm0f,iBACtDn0f,KAAKo0f,4BAA8Bp0f,KAAKq0f,8BACpCr0f,KAAKs0f,0BAA2B,EAE9D3F,EAAiBl8Y,OAAOsiZ,GAAOC,GAAYC,GAAYC,GAAY19J,GAAWr3R,GAAQg1b,GAAQC,GAAcC,GAAen7H,GAAao7H,GAAaC,GAAiBC,GAAaC,GAAgBC,GAAuBC,GAAiBC,GAAaC,GAAYC,GAAiBC,GAA2BC,GAAYC,GAAuBC,GAAyBC,GAAoBC,GAAmBC,KAOvZjV,EAAehmf,UAAU4/V,OAAS,SAAUhlV,EAAOD,GAC3C/V,KAAKgB,WACAvD,EAAkBuY,IAAUA,EAAQ,MACrChW,KAAKgB,QAAQ0D,MAAMsR,MAAQA,EAAQ,OAElCvY,EAAkBsY,IAAWA,EAAS,MACvC/V,KAAKgB,QAAQ0D,MAAMqR,OAASA,EAAS,MAErC/V,KAAKwuf,QACLxuf,KAAKwuf,OAAO8H,qBAOxBlV,EAAehmf,UAAUixI,QAAU,WAC3BrsI,KAAKwuf,QACLxuf,KAAKwuf,OAAOj/X,eAQpB6xX,EAAehmf,UAAUm7f,QAAU,SAAUC,GACrC/4f,EAAkB+4f,KAClBA,EAAc,QAEdx2f,KAAKwuf,SACLxuf,KAAKwuf,OAAOgI,YAAcA,IAOlCpV,EAAehmf,UAAU2F,MAAQ,SAAUE,GACvC,GAAIxD,EAAkBuC,KAAKwuf,QACvB,MAAM,IAAI5tf,MAAM,sBAEpB,IAAIZ,KAAKy2f,YAIL,MAAM,IAAI71f,MAAM,4CAHhBZ,KAAKy2f,YAAY11f,MAAMf,KAAKwuf,OAAQvtf,IAS5Cmgf,EAAehmf,UAAU2wD,UAAY,WAEjC,KAAI/rD,KAAKozf,kBAAoBpzf,KAAK02f,4BAA4B1B,IAI1D,MAAM,IAAIp0f,MAAM,kDAEpB,OALWZ,KAAK02f,iBAAiB3qc,aAYrCq1b,EAAehmf,UAAUy4F,KAAO,SAAUg8J,EAAUyhC,GAEhD,GADAzhC,EAAWA,GAAY,WACnBpyP,EAAkBuC,KAAKwuf,QACvB,MAAM,IAAI5tf,MAAM,sBAEpB,GAAmB,SAAf0wR,GAAyBtxR,KAAK22f,iBAC1B32f,KAAK22f,kBACL32f,KAAK22f,iBAAiB9ia,KAAK7zF,KAAKwuf,OAAQ3+P,QAG3C,GAAmB,QAAfyhC,GAAwBtxR,KAAK42f,iBAClC52f,KAAK42f,iBAAiB/ia,KAAK7zF,KAAKwuf,OAAQ3+P,OAEvC,CAAA,GAAmB,SAAfyhC,IAAyBtxR,KAAKozf,mBAAoBpzf,KAAK02f,iBAQ5D,MAAM,IAAI91f,MAAM,uDAPhB,IAAIi2f,EAAa72f,KAAK+rD,YAClB2oG,EAAO,IAAIu7F,MAAM4mQ,IACjBnwf,KAAM,qBAEVkpP,GAAK/7J,KAAKg8J,EAAW,QAASn7F,KAUtC0sV,EAAehmf,UAAUwmQ,WAAa,SAAU0vB,GAC5C,IAAIvxR,EAAQC,KACZ,GAAIvC,EAAkBuC,KAAKwuf,QACvB,MAAM,IAAI5tf,MAAM,qBAEpB,OAAO,IAAIkoF,QAAQ,SAAUC,EAASC,GACf,SAAfsoM,GAAyBvxR,EAAM42f,iBAC/B5ta,EAAQhpF,EAAM42f,iBAAiB/0P,WAAW7hQ,EAAMyuf,SAE5B,QAAfl9N,GAAwBvxR,EAAM62f,iBACnC7ta,EAAQhpF,EAAM62f,iBAAiBh1P,WAAW7hQ,EAAMyuf,SAE5B,SAAfl9N,GAAyBvxR,EAAMqzf,kBAAoBrzf,EAAM22f,kBAC9D3ta,EAAQhpF,EAAM22f,iBAAiB90P,WAAW7hQ,EAAMyuf,YAO5DpN,EAAehmf,UAAUq0f,UAAY,WACjC,IAAIzkN,EAAU,IAAI8rN,GAClB9rN,EAAQl5R,MAAQ,EAChBk5R,EAAQ+rN,cAAgB,IAAIC,GAAehsN,GAC3C,IAAIisN,EAAY,IAAIC,GACpBD,EAAUnlf,MAAQ,EAClBmlf,EAAUhF,gBAAkB,IAAIkF,GAAiBF,GACjDA,EAAU5E,gBAAkB,IAAI+E,GAAiBH,GACjDjsN,EAAQqsN,aAAa7yf,KAAKyyf,GAC1BA,EAAUK,gBAAkBtsN,EAC5B,IAAIh0B,KACJA,EAASxyQ,KAAKwmS,GAEd,IAAIusN,EAAMv3f,KAAK08F,OAAO86Z,mBAAoB1sa,UAAYmhC,UAAYwrY,cAAgBC,cAAgBC,mBAAqBC,yBAAuB18f,GAC9I,GAAI8E,KAAKwuf,SACLxuf,KAAKmxf,oCACLnxf,KAAKwuf,OAAOqJ,eAAerzf,KAAK+yf,GAChCv3f,KAAKwuf,OAAOkG,kBAAkB19O,GAC1Bh3Q,KAAK8uf,cAAc,CACnB9uf,KAAK8uf,aAAa8F,yBAClB,IAAIlwf,EAAQ1E,KAAKwuf,OAAOjrf,OAAOu0f,WAAW,UAC1Cb,EAAUhF,gBAAgB8F,UAAYrzf,EACtCuyf,EAAUhF,gBAAgB+F,WAAWD,UAAYrzf,IAQ7D08e,EAAehmf,UAAU68f,cAAgB,SAAUC,GAC/C,OAAIl4f,KAAKwuf,OACExuf,KAAKwuf,OAAOjrf,OAAO00f,cAAcC,OAQhD9W,EAAehmf,UAAU+8f,UAAY,SAAUD,GAC3C,OAAIl4f,KAAKwuf,OACExuf,KAAKwuf,OAAOjrf,OAAO40f,UAAUD,OAS5C9W,EAAehmf,UAAUg9f,WAAa,SAAUC,GAC5C,OAAQA,GACJ,IAAK,YACDr4f,KAAK2yf,sBACL,MACJ,IAAK,QACD3yf,KAAKwyf,kBACL,MACJ,IAAK,WACDxyf,KAAK4yf,qBACL,MACJ,IAAK,kBACD5yf,KAAKyyf,4BACL,MACJ,IAAK,YACDzyf,KAAKmyf,sBACL,MACJ,IAAK,OACDnyf,KAAKgzf,iBACL,MACJ,IAAK,SACDhzf,KAAK8yf,mBACL,MACJ,IAAK,QACD9yf,KAAK0yf,kBACL,MACJ,IAAK,YACD1yf,KAAKgyf,sBACL,MACJ,IAAK,OACDhyf,KAAKoyf,iBACL,MACJ,IAAK,kBACDpyf,KAAKizf,4BACL,MACJ,IAAK,oBACDjzf,KAAKkzf,8BACL,MACJ,IAAK,eACDlzf,KAAKuyf,2BAOjBnR,EAAehmf,UAAUk9f,gBAAkB,WAClC76f,EAAkBuC,KAAK2vf,oBAAuBlyf,EAAkBuC,KAAKwuf,SACtExuf,KAAK2vf,kBAAkBE,qBAAoB,IAMnDzO,EAAehmf,UAAUiX,QAAU,WAC/Bi/E,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,MAC9BA,KAAKu4f,0BACA96f,EAAkBuC,KAAKwuf,SACxBxuf,KAAKwuf,OAAOn8e,UAEhBrS,KAAKwuf,YAAStzf,EACTuC,EAAkBuC,KAAKgB,WACxBhB,KAAKgB,QAAQ8C,UAAUS,OAAO,oBAC9BvE,KAAKgB,QAAQgB,UAAY,IAE7BhC,KAAKgB,aAAU9F,EACf8E,KAAK0hf,mBACL1hf,KAAK0hf,qBAAkBxmf,GAE3Bkmf,EAAehmf,UAAUm9f,wBAA0B,WAC3Cv4f,KAAKy2f,cACLz2f,KAAKy2f,YAAYpkf,UACjBrS,KAAKy2f,iBAAcv7f,GAEnB8E,KAAK02f,mBACL12f,KAAK02f,iBAAiBrkf,UACtBrS,KAAK02f,sBAAmBx7f,GAExB8E,KAAK2vf,oBACL3vf,KAAK2vf,kBAAkBt9e,UACvBrS,KAAK2vf,uBAAoBz0f,GAExBuC,EAAkBuC,KAAKowf,yBACxBpwf,KAAKowf,sBAAsB/9e,UAC3BrS,KAAKowf,2BAAwBl1f,GAE7B8E,KAAKgvf,eACLhvf,KAAKgvf,aAAa38e,UAClBrS,KAAKgvf,kBAAe9zf,GAEpB8E,KAAKivf,oBACLjvf,KAAKivf,kBAAkB58e,UACvBrS,KAAKivf,uBAAoB/zf,GAEzB8E,KAAK8uf,eACL9uf,KAAK8uf,aAAaz8e,UAClBrS,KAAK8uf,kBAAe5zf,GAEpB8E,KAAK00O,kBACL10O,KAAK00O,gBAAgBriO,UACrBrS,KAAK00O,qBAAkBx5O,GAEvB8E,KAAK+uf,sBACL/uf,KAAK+uf,oBAAoB18e,UACzBrS,KAAK+uf,yBAAsB7zf,GAE1BuC,EAAkBuC,KAAKgif,yBACxBhif,KAAKgif,sBAAsB3ve,UAC3BrS,KAAKgif,2BAAwB9mf,GAE7B8E,KAAKgwf,wBACLhwf,KAAKgwf,sBAAsB39e,UAC3BrS,KAAKgwf,2BAAwB90f,GAE7B8E,KAAKkwf,mBACLlwf,KAAKkwf,iBAAiB79e,UACtBrS,KAAKkwf,sBAAmBh1f,GAExB8E,KAAKuwf,mBACLvwf,KAAKuwf,iBAAiBl+e,UACtBrS,KAAKuwf,sBAAmBr1f,GAExB8E,KAAKiif,qBACLjif,KAAKiif,mBAAmB5ve,UACxBrS,KAAKiif,wBAAqB/mf,GAE1B8E,KAAK4hf,8BACL5hf,KAAK4hf,4BAA4Bvve,UACjCrS,KAAK4hf,iCAA8B1mf,GAEnC8E,KAAK6hf,gCACL7hf,KAAK6hf,8BAA8Bxve,UACnCrS,KAAK6hf,mCAAgC3mf,GAErC8E,KAAK8hf,0BACL9hf,KAAK8hf,wBAAwBzve,UAC7BrS,KAAK8hf,6BAA0B5mf,GAE/B8E,KAAK+hf,2BACL/hf,KAAK+hf,yBAAyB1ve,UAC9BrS,KAAK+hf,8BAA2B7mf,GAEhC8E,KAAK6wf,oBACL7wf,KAAK6wf,kBAAkBx+e,UACvBrS,KAAK6wf,uBAAoB31f,GAEzB8E,KAAK+wf,oBACL/wf,KAAK+wf,uBAAoB71f,GAEzB8E,KAAK6yf,uBACL7yf,KAAK6yf,qBAAqBxgf,UAC1BrS,KAAK6yf,0BAAuB33f,GAE5B8E,KAAK+wf,oBACL/wf,KAAK+wf,kBAAkB1+e,UACvBrS,KAAK+wf,uBAAoB71f,GAEzB8E,KAAK42f,mBACL52f,KAAK42f,iBAAiBvkf,UACtBrS,KAAK42f,sBAAmB17f,GAExB8E,KAAK22f,mBACL32f,KAAK22f,iBAAiBtkf,UACtBrS,KAAK22f,sBAAmBz7f,GAExB8E,KAAKixf,8BACLjxf,KAAKixf,4BAA4B5+e,UACjCrS,KAAKixf,iCAA8B/1f,IAG3C,IAAIyzf,EA6GJ,OA5GA39Z,IACI9pF,EAAS,IACVk6e,EAAehmf,UAAW,kBAAc,GAC3C41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,kBAAc,GAC3C41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,mBAAe,GAC5C41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,uBAAmB,GAChD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,oBAAgB,GAC7C41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,2BAAuB,GACpD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,wBAAoB,GACjD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,wBAAoB,GACjD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,wBAAoB,GACjD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,yBAAqB,GAClD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,yBAAqB,GAClD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,6BAAyB,GACtD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,4BAAwB,GACrD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,mCAA+B,GAC5D41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,oBAAgB,GAC7C41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,6BAAyB,GACtD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,wBAAoB,GACjD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,mCAA+B,GAC5D41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,qCAAiC,GAC9D41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,6BAAyB,GACtD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,yBAAqB,GAClD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,wBAAoB,GACjD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,gCAA4B,GACzD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,yBAAqB,GAClD41F,IACI9pF,GAAS,IACVk6e,EAAehmf,UAAW,0BAAsB,GACnD41F,IACIloF,KACDs4e,EAAehmf,UAAW,sBAAkB,GAC/C41F,IACIloF,KACDs4e,EAAehmf,UAAW,kBAAc,GAC3C41F,IACIloF,KACDs4e,EAAehmf,UAAW,wBAAoB,GACjD41F,IACIloF,KACDs4e,EAAehmf,UAAW,uBAAmB,GAChD41F,IACIloF,KACDs4e,EAAehmf,UAAW,uBAAmB,GAChD41F,IACIloF,KACDs4e,EAAehmf,UAAW,qBAAiB,GAC9C41F,IACIloF,KACDs4e,EAAehmf,UAAW,eAAW,GACxC41F,IACIloF,KACDs4e,EAAehmf,UAAW,2BAAuB,GACpD41F,IACIloF,KACDs4e,EAAehmf,UAAW,eAAW,GACxC41F,IACIloF,KACDs4e,EAAehmf,UAAW,iBAAa,GAC1Cgmf,EAAiBuN,EAAmB39Z,IAChC5nF,GACDg4e,IAELxvY,ICl6CEmjZ,GAAuB,WACvB,SAASA,KA8GT,OAzGAA,EAAM35f,UAAU2mC,cAAgB,WAC5B,MAAO,SAQXgzd,EAAM35f,UAAU2F,MAAQ,SAAUytf,EAAQvtf,GACtCjB,KAAKiB,YAAYutf,EAAQl/Z,UAAUF,UAAWnuF,IAMlD8zf,EAAM35f,UAAU6F,YAAc,SAAUutf,EAAQgK,EAAkBv3f,GAC9D,IAAI8U,EAAS/V,KAAKy4f,cAAcjK,EAAOzmQ,OACnC/xO,EAAQhW,KAAK04f,aAAalK,EAAOzmQ,OACjC4wQ,EAAen4f,SAASW,cAAc,OAC1Cw3f,EAAaj0f,MAAMsR,MAAQ,OAC3B2if,EAAaj0f,MAAMqR,OAAS,OAC5B4if,EAAaj0f,MAAMmV,SAAW,SAE9B7Z,KAAK44f,qBAAqBpK,EAAQmK,GAC9Bl7f,EAAkBwD,KAClBA,EAAcrF,OAAO8F,KAAK,GAAI,QAAS,qCAEE,IAAxC82f,EAAiBj6f,QAAQ,YAAgE,IAA1Ci6f,EAAiBj6f,QAAQ,YAEzE0C,EAAYT,SAASuB,MAAM,mBAE3Bd,EAAYT,SAASuB,MAAM,uOAAyOiU,EAAM9I,WAAa,MAAQ6I,EAAO7I,WAAa,2EAKnTjM,EAAYT,SAASuB,MAAM,0CAA4CiU,EAAM9I,WAAa,MAAQ6I,EAAO7I,WAAa,qCAG1HjM,EAAYT,SAASuB,MAAM42f,EAAa32f,UAAY,uFACpD22f,OAAez9f,EACf+F,EAAYT,SAASyB,QACrBhB,EAAYiB,QACZ,IAAIC,EAAWC,YAAY,WACnBnB,EAAYoB,QACZpB,EAAYF,QACZE,EAAYgB,QACZK,cAAcH,KAEnB,MAMP4yf,EAAM35f,UAAUw9f,qBAAuB,SAAUpK,EAAQxtf,GAGrD,IAAK,IADD63f,EAAa,GACR38f,EAAI,EAAGA,EAAIsyf,EAAOzmQ,MAAMvrP,OAAQN,IAAK,CAC1C,IAAIqxK,EAAOihV,EAAOzmQ,MAAM7rP,GACpBs0Q,EAAajjG,EAAKurV,kBAAkB/if,OACpCqnc,EAAY7vS,EAAKurV,kBAAkB9if,MACvCw4e,EAAOp8Y,OAAO2mZ,YAAa,EAC3BvK,EAAOp8Y,OAAO4mZ,cAAczrV,EAAM,EAAG,EAAG,EAAG,GAC3C,IAAI0rV,EAAYzK,EAAOp8Y,OAAO8mZ,WAAW/ka,YACzCq6Z,EAAOp8Y,OAAO2mZ,YAAa,EAE3BF,GAAc,iBAAmBI,EAAY,2CAA6C77C,EAAUlwc,WAAa,cAAgBsjQ,EAAWtjQ,WAAa,qBAE7JlM,EAAQgB,UAAY62f,GAOxB9D,EAAM35f,UAAUs9f,aAAe,SAAU3wQ,GAErC,IAAK,IADD/xO,EAAQ,EACH9Z,EAAI,EAAGA,EAAI6rP,EAAMvrP,OAAQN,IAC1B8Z,EAAQ+xO,EAAM7rP,GAAG48f,kBAAkB9if,QACnCA,EAAQ+xO,EAAM7rP,GAAG48f,kBAAkB9if,OAG3C,OAAOA,GAMX++e,EAAM35f,UAAUq9f,cAAgB,SAAU1wQ,GAEtC,IAAK,IADDhyO,EAAS,EACJ7Z,EAAI,EAAGA,EAAI6rP,EAAMvrP,OAAQN,IAC1B6Z,EAASgyO,EAAM7rP,GAAG48f,kBAAkB/if,SACpCA,EAASgyO,EAAM7rP,GAAG48f,kBAAkB/if,QAG5C,OAAOA,GAKXg/e,EAAM35f,UAAUiX,QAAU,aAGnB0if,KC5GPiC,GAAgC,WAChC,SAASA,EAAez2f,GACpBP,KAAKm5f,yBAAsBj+f,EAC3B8E,KAAKo5f,UAAY74f,EAkPrB,OAhPAjC,OAAOuJ,eAAemvf,EAAe57f,UAAW,kBAC5CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,iBAAkB5rI,IAE5C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemvf,EAAe57f,UAAW,kBAC5CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,iBAAkB5rI,IAE5C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemvf,EAAe57f,UAAW,sBAC5CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,uBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,qBAAsB5rI,IAEhD4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemvf,EAAe57f,UAAW,4BAC5CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,6BAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,2BAA4B5rI,IAEtD4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemvf,EAAe57f,UAAW,cAC5CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,aAAc5rI,IAExC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemvf,EAAe57f,UAAW,eAC5CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,cAAe5rI,IAEzC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemvf,EAAe57f,UAAW,aAC5CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,YAAa5rI,IAEvC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemvf,EAAe57f,UAAW,cAC5CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,aAAc5rI,IAExC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemvf,EAAe57f,UAAW,gBAC5CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,eAAgB5rI,IAE1C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemvf,EAAe57f,UAAW,aAC5CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,YAAa5rI,IAEvC4K,YAAY,EACZC,cAAc,IAElBovf,EAAe57f,UAAUiX,QAAU,WAC1B5U,EAAkBuC,KAAKm5f,sBACxBnC,EAAeqC,qBAAqB90f,OAAOvE,KAAKm5f,qBAEpDn5f,KAAKm5f,yBAAsBj+f,GAE/B87f,EAAe57f,UAAUk+f,SAAW,SAAUp+b,GAC1C,IAAKz9D,EAAkBuC,KAAKm5f,qBAAsB,CAC9C,IAAI7vf,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKm5f,oBAAoBpa,iBAAkB7jb,GAC5F,OAAOl7D,KAAKm5f,oBAAoBna,eAAe37P,YAAY/5O,GAE/D,OAAO,GAEX0tf,EAAeuC,wBAA0B,SAAUr+b,GAC/C,IAAIn+D,OAAQ7B,EACZ,OAAQggE,GACJ,IAAK,iBAGL,IAAK,iBACDn+D,EAAQ,GACR,MACJ,IAAK,qBAGL,IAAK,2BACDA,GAAQ,EACR,MACJ,IAAK,YACDA,EAAQ,IACR,MACJ,IAAK,aACDA,EAAQ,IACR,MACJ,IAAK,aAGL,IAAK,YAGL,IAAK,cAGL,IAAK,eACDA,EAAQ,GAGhB,OAAOA,GAEXi6f,EAAe57f,UAAUgS,iBAAmB,SAAU8tD,GAElD,GADel7D,KAAKs5f,SAASp+b,GACf,CACV,IAAI5xD,EAAeu1e,GAAcmB,gBAAgBgX,EAAejY,iBAAkB7jb,GAClF,IAAKz9D,EAAkBuC,KAAKm5f,sBAAwBn5f,KAAKm5f,oBAAoBna,eAAe37P,YAAY/5O,GACpG,OAAOtJ,KAAKm5f,oBAAoBna,eAAet3e,IAAI4B,GAG3D,OAAO0tf,EAAeuC,wBAAwBr+b,IAElD87b,EAAe57f,UAAUutI,iBAAmB,SAAUztE,EAAUn+D,GAI5D,IAHIU,EAAkBV,IAAoB,KAAVA,KAC5BA,EAAQi6f,EAAeuC,wBAAwBr+b,IAE/Cz9D,EAAkBuC,KAAKm5f,qBACvBn5f,KAAKw5f,8BAA8Bt+b,EAAUn+D,OAE5C,CACD,IAAIuM,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKm5f,oBAAoBpa,iBAAkB7jb,GAC5F,GAAIl7D,KAAKm5f,oBAAoBna,eAAe37P,YAAY/5O,IACpDtJ,KAAKm5f,oBAAoBna,eAAet3e,IAAI4B,KAAkBvM,EAE9D,OAGJiD,KAAKm5f,oBAAsBnC,EAAeqC,qBAAqBnY,mBAAmBlhf,KAAKm5f,oBAAqBj+b,EAAUn+D,KAG9Hi6f,EAAe57f,UAAUo+f,8BAAgC,SAAUt+b,EAAU20E,GACzE,IAAI4pX,EAA0B,IAAIl3Q,GAClCviP,KAAK05f,uBAAuB,iBAAkBx+b,EAAU20E,EAAW4pX,GACnEz5f,KAAK05f,uBAAuB,iBAAkBx+b,EAAU20E,EAAW4pX,GACnEz5f,KAAK05f,uBAAuB,qBAAsBx+b,EAAU20E,EAAW4pX,GACvEz5f,KAAK05f,uBAAuB,2BAA4Bx+b,EAAU20E,EAAW4pX,GAC7Ez5f,KAAK05f,uBAAuB,YAAax+b,EAAU20E,EAAW4pX,GAC9Dz5f,KAAK05f,uBAAuB,aAAcx+b,EAAU20E,EAAW4pX,GAC/Dz5f,KAAK05f,uBAAuB,aAAcx+b,EAAU20E,EAAW4pX,GAC/Dz5f,KAAK05f,uBAAuB,YAAax+b,EAAU20E,EAAW4pX,GAC9Dz5f,KAAK05f,uBAAuB,cAAex+b,EAAU20E,EAAW4pX,GAChEz5f,KAAK05f,uBAAuB,eAAgBx+b,EAAU20E,EAAW4pX,GAEjEz5f,KAAKm5f,oBAAsBnC,EAAeqC,qBAAqBrY,gBAAgByY,EAAyBzC,EAAejY,mBAG3HiY,EAAe57f,UAAUs+f,uBAAyB,SAAUx+b,EAAU4kb,EAAkBjwW,EAAW4pX,GAC/F,IAAInwf,EACJA,EAAeu1e,GAAcmB,gBAAgBgX,EAAejY,iBAAkB7jb,GAC1EA,IAAa4kb,EACb2Z,EAAwBr1f,IAAIkF,EAAcumI,GAG1C4pX,EAAwBr1f,IAAIkF,EAAc0tf,EAAeuC,wBAAwBr+b,KAGzF87b,EAAe57f,UAAUu+f,WAAa,SAAUp7d,EAAQ20E,GAChDA,IAAYA,EAAQ0mZ,WAAa1mZ,EAAQ2mZ,WACzC75f,KAAKm5f,oBAAsB56d,EAAO46d,oBAG7B17f,EAAkB8gC,KACd9gC,EAAkB8gC,EAAO46d,sBAAwB56d,EAAO46d,oBAAoBna,gBAC7Eh/e,KAAK85f,0BAA0Bv7d,IAK/Cy4d,EAAe57f,UAAU0+f,0BAA4B,SAAUv7d,GAC3D,IAAI40E,OAAOj4G,EACP8E,KAAKm5f,sBACLhmZ,EAAOnzG,KAAKm5f,oBAAoBtY,gBAAgBtid,EAAO46d,qBACP,IAA5Cn5f,KAAKm5f,oBAAoBra,iBACzBkY,EAAeqC,qBAAqB90f,OAAOvE,KAAKm5f,qBAChDn5f,KAAKm5f,yBAAsBj+f,IAGnC8E,KAAKm5f,oBAAsB,IAAIta,GAAcmY,EAAejY,kBACxDthf,EAAkB01G,KAClBA,EAAOnzG,KAAKm5f,oBAAoBtY,gBAAgBtid,EAAO46d,sBAE3Dn5f,KAAKm5f,oBAAsBnC,EAAeqC,qBAAqBrY,gBAAgB7tY,EAAM6jZ,EAAejY,mBAExGiY,EAAe57f,UAAU2+f,YAAc,WACnC,IAAIx7d,EAAS,IAAIy4d,EAEjB,OADAz4d,EAAO46d,oBAAsBn5f,KAAKm5f,oBAC3B56d,GAEXy4d,EAAevqc,MAAQ,WACnBzsD,KAAKq5f,qBAAqB5sc,SAE9Buqc,EAAeqC,qBAAuB,IAAItY,GAC1CiW,EAAejY,iBAAmB,GAC3BiY,KCxPPgD,GAAgC,WAChC,SAASA,KAUT,OARAA,EAAe5+f,UAAUiX,QAAU,WAC1B5U,EAAkBuC,KAAKi6f,oBACxBj6f,KAAKi6f,kBAAkB5nf,UAE3BrS,KAAKk6f,iBAAch/f,EACnB8E,KAAKm6f,aAAUj/f,EACf8E,KAAKi6f,uBAAoB/+f,GAEtB8+f,KCVPI,GAAuB,WACvB,SAASA,IACLp6f,KAAKq6f,QAAU,EACfr6f,KAAKs6f,cAAgB,EACrBt6f,KAAKu6f,gBAAkB,EACvBv6f,KAAKw6f,kBAAet/f,EACpB8E,KAAKy6f,kBA+CT,OA7CAL,EAAMh/f,UAAUs/f,aAAe,SAAUR,GACrC,IACIS,EAAgB36f,KAAK46f,iBAAiBV,GAO1C,OANKz8f,EAAkBk9f,IAAmBl9f,EAAkBk9f,EAAcV,mBAI1Dj6f,KAAKw6f,aAAa70a,OAAOu0a,GAHzBS,EAAcV,mBAOlCG,EAAMh/f,UAAUw/f,iBAAmB,SAAUV,GACzC,IAAK,IAAIh+f,EAAI,EAAGA,EAAI8D,KAAKy6f,eAAej+f,OAAQN,IAC5C,GAAI8D,KAAKy6f,eAAev+f,aAAc89f,GAAgB,CAClD,IAAIW,EAAgB36f,KAAKy6f,eAAev+f,GACxC,GAAIy+f,EAAcT,cAAgBA,EAC9B,OAAOS,IAMvBP,EAAMh/f,UAAUiX,QAAU,WACjB5U,EAAkBuC,KAAKy6f,kBACxBz6f,KAAKy6f,mBAETz6f,KAAKu6f,oBAAiBr/f,EACtB8E,KAAKq6f,YAASn/f,EACd8E,KAAKs6f,kBAAep/f,EACpB8E,KAAKy6f,oBAAiBv/f,GAE1Bk/f,EAAMh/f,UAAUy/f,UAAY,SAAU7xZ,GAC7BvrG,EAAkBuC,KAAKu6f,kBAA4C,IAAzBv6f,KAAKu6f,iBAChDv6f,KAAKu6f,eAAiBvxZ,EAAKuxZ,gBAE1B98f,EAAkBuC,KAAKq6f,UAA4B,IAAjBr6f,KAAKq6f,SACxCr6f,KAAKq6f,OAASrxZ,EAAKqxZ,QAElB58f,EAAkBuC,KAAKs6f,gBAAwC,IAAvBt6f,KAAKs6f,eAC9Ct6f,KAAKs6f,aAAetxZ,EAAKsxZ,cAExB78f,EAAkBuC,KAAKy6f,iBAAkD,IAA/Bz6f,KAAKy6f,eAAej+f,SAC/DwD,KAAKy6f,eAAiBzxZ,EAAKyxZ,iBAG5BL,KCjDPU,GAA6B,WAC7B,SAASA,EAAYv6f,GACjBP,KAAK+6f,sBAAmB7/f,EACxB8E,KAAKo5f,eAAYl+f,EACjB8E,KAAK+3f,eAAY78f,EACjB8E,KAAKgpG,UAAO9tG,EACZ8E,KAAKo5f,UAAY74f,EAyLrB,OAvLAjC,OAAOuJ,eAAeizf,EAAY1/f,UAAW,UACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,WAEjC/F,IAAK,SAAUgzf,GACXr6f,KAAK2oI,iBAAiB,SAAU0xX,IAEpC1yf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeizf,EAAY1/f,UAAW,mBACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,kBAAmB5rI,IAE7C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeizf,EAAY1/f,UAAW,aACzCsM,IAAK,WACD,IAAIshG,OAAO9tG,EACX,GAAKuC,EAAkBuC,KAAKgpG,MAMxB,IADA,IAAIgyZ,EAAgBh7f,KAAK+3f,WACjBt6f,EAAkBu9f,IAAgB,CACtC,GAAIA,EAAc/I,gBAAgB+F,WAAWhvZ,KAAM,CAC/CA,EAAOgyZ,EAAc/I,gBAAgB+F,WAAWhvZ,KAChD,MAGAgyZ,EAAgBA,EAAcC,aAXtCjyZ,EAAOhpG,KAAKgpG,KAehB,OAAKvrG,EAAkBurG,QAInB,EAHOA,EAAK0xZ,aAAa16f,KAAKk7f,kBAMtCvzf,YAAY,EACZC,cAAc,IAElBkzf,EAAY1/f,UAAUgS,iBAAmB,SAAU8tD,GAC/C,GAAKl7D,KAAKs5f,SAASp+b,GAkBd,CACG5xD,EAAeu1e,GAAcmB,gBAAgB8a,EAAY/b,iBAAkB7jb,GAC/E,IAAKz9D,EAAkBuC,KAAK+6f,mBAAqB/6f,KAAK+6f,iBAAiB/b,eAAe37P,YAAY/5O,GAC9F,OAAOtJ,KAAK+6f,iBAAiB/b,eAAet3e,IAAI4B,QApBpD,GAAItJ,KAAK+3f,qBAAqBoD,GAAiB,CAG3C,IADA,IAAIpD,EAAY/3f,KAAK+3f,WACbt6f,EAAkBs6f,KAClBA,EAAU9F,gBAAgB+F,WAAWsB,SAASp+b,IAI9C68b,EAAYA,EAAUkD,QAG9B,IAAKx9f,EAAkBs6f,GAAY,CAC/B,IAAIzuf,EAAeu1e,GAAcmB,gBAAgB8a,EAAY/b,iBAAkB7jb,GAC/E,OAAO68b,EAAU9F,gBAAgB+F,WAAW+C,iBAAiB/b,eAAet3e,IAAI4B,IAU5F,OAAOwxf,EAAYvB,wBAAwBr+b,IAE/C4/b,EAAY1/f,UAAUutI,iBAAmB,SAAUztE,EAAUn+D,GAIzD,IAHIU,EAAkBV,IAAoB,KAAVA,KAC5BA,EAAQ+9f,EAAYvB,wBAAwBr+b,IAE5Cz9D,EAAkBuC,KAAK+6f,kBACvB/6f,KAAKo7f,2BAA2Blgc,EAAUn+D,OAEzC,CACD,IAAIuM,EAAeu1e,GAAcmB,gBAAgBhgf,KAAK+6f,iBAAiBhc,iBAAkB7jb,GACzF,GAAIl7D,KAAK+6f,iBAAiB/b,eAAe37P,YAAY/5O,IACjDtJ,KAAK+6f,iBAAiB/b,eAAet3e,IAAI4B,KAAkBvM,EAE3D,OAEJiD,KAAK+6f,iBAAmBD,EAAYO,kBAAkBna,mBAAmBlhf,KAAK+6f,iBAAkB7/b,EAAUn+D,KAGlH+9f,EAAY1/f,UAAUgggB,2BAA6B,SAAUlgc,EAAU20E,GACnE,IAAIyrX,EAAuB,IAAI/4Q,GAC/BviP,KAAKu7f,oBAAoB,SAAUrgc,EAAU20E,EAAWyrX,GACxDt7f,KAAKu7f,oBAAoB,kBAAmBrgc,EAAU20E,EAAWyrX,GACjEt7f,KAAK+6f,iBAAmBD,EAAYO,kBAAkBra,gBAAgBsa,EAAsBR,EAAY/b,mBAG5G+b,EAAY1/f,UAAUmggB,oBAAsB,SAAUrgc,EAAU4kb,EAAkBjwW,EAAWyrX,GACzF,IAAIhyf,EACJA,EAAeu1e,GAAcmB,gBAAgB8a,EAAY/b,iBAAkB7jb,GACvEA,IAAa4kb,GACbwb,EAAqBl3f,IAAIkF,EAAcumI,IAG/CirX,EAAYvB,wBAA0B,SAAUr+b,GAC5C,IAAIn+D,OAAQ7B,EACZ,OAAQggE,GACJ,IAAK,SACDn+D,GAAS,EACT,MACJ,IAAK,kBACDA,EAAQ,EAGhB,OAAOA,GAEX+9f,EAAY1/f,UAAUu+f,WAAa,SAAUp7d,GACpC9gC,EAAkB8gC,KACd9gC,EAAkB8gC,EAAOw8d,oBAC1B/6f,KAAKq6f,OAAS97d,EAAO87d,OACrBr6f,KAAKk7f,gBAAkB38d,EAAO28d,iBAE7Bz9f,EAAkB8gC,EAAOw5d,aAC1B/3f,KAAK+3f,UAAYx5d,EAAOw5d,WAEvBt6f,EAAkB8gC,EAAOyqE,QAC1BhpG,KAAKgpG,KAAOzqE,EAAOyqE,QAI/B8xZ,EAAY1/f,UAAUk+f,SAAW,SAAUp+b,GACvC,IAAKz9D,EAAkBuC,KAAK+6f,kBAAmB,CAC3C,IAAIzxf,EAAeu1e,GAAcmB,gBAAgBhgf,KAAK+6f,iBAAiBhc,iBAAkB7jb,GACzF,OAAOl7D,KAAK+6f,iBAAiB/b,eAAe37P,YAAY/5O,GAE5D,OAAO,GAEXwxf,EAAY1/f,UAAUoggB,YAAc,WAC3B/9f,EAAkBuC,KAAK+6f,mBAA8D,IAAzC/6f,KAAK+6f,iBAAiBjc,gBACnEgc,EAAYO,kBAAkB92f,OAAOvE,KAAK+6f,kBAE9C/6f,KAAK+6f,sBAAmB7/f,EACxB8E,KAAKgpG,UAAO9tG,GAEhB4/f,EAAY1/f,UAAUiX,QAAU,WAC5BrS,KAAKw7f,eAETV,EAAYruc,MAAQ,WAChBzsD,KAAKq7f,kBAAkB5uc,SAE3Bquc,EAAY1/f,UAAUqggB,WAAa,SAAU1D,GACzC/3f,KAAK+3f,UAAYA,GAMrB+C,EAAY1/f,UAAUwB,SAAW,SAAUs+D,GACvC,OAAOl7D,KAAKs5f,SAASp+b,GAAYl7D,KAAKoN,iBAAiB8tD,QAAYhgE,GAMvE4/f,EAAY1/f,UAAUsggB,YAAc,SAAUn9d,GACtC9gC,EAAkBuC,KAAKpD,SAAS,aAChCoD,KAAKq6f,OAAS97d,EAAO3hC,SAAS,WAE9Ba,EAAkBuC,KAAKpD,SAAS,sBAChCoD,KAAKk7f,gBAAkB38d,EAAO3hC,SAAS,oBAEtCa,EAAkB8gC,EAAOyqE,QACtBvrG,EAAkBuC,KAAKgpG,QACvBhpG,KAAKgpG,KAAO,IAAIoxZ,IAEpBp6f,KAAKgpG,KAAK6xZ,UAAUt8d,EAAOyqE,QAGnC8xZ,EAAYO,kBAAoB,IAAIta,GACpC+Z,EAAY/b,iBAAmB,EACxB+b,KC/LPa,GAA0B,WAC1B,SAASA,KAgDT,OA9CAr9f,OAAOuJ,eAAe8zf,EAASvggB,UAAW,YACtCsM,IAAK,WACD,OAAO1H,KAAK47f,YAEhBv0f,IAAK,SAAUtK,GACXiD,KAAK47f,WAAa7+f,GAEtB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8zf,EAASvggB,UAAW,kBACtCsM,IAAK,WACD,OAAO1H,KAAK67f,kBAEhBx0f,IAAK,SAAUtK,GACXiD,KAAK67f,iBAAmB9+f,GAE5B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8zf,EAASvggB,UAAW,oBACtCsM,IAAK,WACD,OAAO1H,KAAK87f,eAEhBz0f,IAAK,SAAUtK,GACXiD,KAAK87f,cAAgB/+f,GAEzB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8zf,EAASvggB,UAAW,aACtCsM,IAAK,WACD,OAAO1H,KAAK+7f,QAEhB10f,IAAK,SAAUtK,GACXiD,KAAK+7f,OAASh/f,GAElB4K,YAAY,EACZC,cAAc,IAElB+zf,EAASvggB,UAAUiX,QAAU,WACzBrS,KAAKkU,cAAWhZ,EAChB8E,KAAKg8f,oBAAiB9ggB,EACtB8E,KAAKi8f,sBAAmB/ggB,EACxB8E,KAAK+7f,YAAS7ggB,GAEXyggB,KAMPxE,GAAkC,WAClC,SAASA,EAAiB52f,GACtBP,KAAKk8f,2BAAwBhhgB,EAC7B8E,KAAKo5f,eAAYl+f,EACjB8E,KAAK+3f,eAAY78f,EACjB8E,KAAKm8f,UAAOjhgB,EACZ8E,KAAKo5f,UAAY74f,EACjBP,KAAKg4f,WAAa,IAAI8C,GAAY96f,MAClCA,KAAKm8f,QA8YT,OA5YAhF,EAAiB/7f,UAAUghgB,eAAiB,WACxC,IAAIC,KACJ,IAAK5+f,EAAkBuC,KAAK+3f,WAAY,CAIpC,IAFA,IAAIA,EAAY/3f,KAAK+3f,UACjBuE,EAAW,IAAI/5Q,IACX9kP,EAAkBs6f,IAAY,CAClC,IAAK,IAAI35f,EAAK,EAAGyE,EAAKk1f,EAAU9F,gBAAgBkK,KAAM/9f,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACxE,IAAIs8G,EAAM73G,EAAGzE,GACRk+f,EAASj5Q,YAAY3oI,EAAIxmG,WAC1Boof,EAASl4f,IAAIs2G,EAAIxmG,SAAUwmG,GAGnCq9Y,EAAYA,EAAUkD,QAE1B,IAAK,IAAIh3f,EAAK,EAAGwG,EAAK6xf,EAASh/f,KAAM2G,EAAKwG,EAAGjO,OAAQyH,IAAM,CACvD,IAAI5G,EAAMoN,EAAGxG,GACRjE,KAAKu8f,WAAWl/f,IACjBg/f,EAAO73f,KAAK83f,EAAS50f,IAAIrK,IAIjCg/f,GADAA,EAASA,EAAO7hf,OAAOxa,KAAKm8f,KAAKjyd,OAAO,SAAUja,GAAK,OAAuB,IAAfA,EAAE/b,UAAuC,IAArB+b,EAAE+re,mBACrElse,KAAK,SAAUG,EAAGC,GAAK,OAAOD,EAAE/b,SAAWgc,EAAEhc,WAEjE,OAAOmof,GAEXlF,EAAiB/7f,UAAUmhgB,WAAa,SAAUrof,GAC9C,IAAK,IAAIhY,EAAI,EAAGA,EAAI8D,KAAKm8f,KAAK3/f,OAAQN,IAClC,GAAI8D,KAAKm8f,KAAKjggB,GAAG8/f,iBAAmB9nf,EAChC,OAAO,EAGf,OAAO,GAEX5V,OAAOuJ,eAAesvf,EAAiB/7f,UAAW,cAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,aAAc5rI,IAExC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesvf,EAAiB/7f,UAAW,eAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,cAAe5rI,IAEzC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesvf,EAAiB/7f,UAAW,mBAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,kBAAmB5rI,IAE7C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesvf,EAAiB/7f,UAAW,iBAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,kBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,gBAAiB5rI,IAE3C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesvf,EAAiB/7f,UAAW,gBAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,eAAgB5rI,IAE1C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesvf,EAAiB/7f,UAAW,eAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,cAAe5rI,IAEzC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesvf,EAAiB/7f,UAAW,mBAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,kBAAmB5rI,IAE7C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesvf,EAAiB/7f,UAAW,iBAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,kBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,gBAAiB5rI,IAE3C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesvf,EAAiB/7f,UAAW,gBAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,eAAgB5rI,IAE1C4K,YAAY,EACZC,cAAc,IAElBuvf,EAAiB/7f,UAAUohgB,6BAA+B,SAAUthc,GAChE,GAAIl7D,KAAKg4f,WAAWqC,QAAU,GAAKr6f,KAAKg4f,WAAWkD,iBAAmB,EAAG,CACrE,IAAIzrV,EAAQzvK,KAAKg4f,WAAWyE,UACxBnzf,EAAeu1e,GAAcmB,gBAAgBmX,EAAiBpY,iBAAkB7jb,GAEpF,OAAKz9D,EAAkBgyK,IAAWhyK,EAAkBgyK,EAAMwiV,gBAAgBiK,yBAA0BzsV,EAAMwiV,gBAAgBiK,sBAAsBld,eAAe37P,YAAY/5O,QAIvK,EAHOmmK,EAAMwiV,gBAAgBiK,sBAAsBld,eAAet3e,IAAI4B,KAQlF6tf,EAAiB/7f,UAAUgS,iBAAmB,SAAU8tD,GACpD,GAAKl7D,KAAKs5f,SAASp+b,GAwBd,CACG5xD,EAAeu1e,GAAcmB,gBAAgBmX,EAAiBpY,iBAAkB7jb,GACpF,IAAKz9D,EAAkBuC,KAAKk8f,wBAA0Bl8f,KAAKk8f,sBAAsBld,eAAe37P,YAAY/5O,GACxG,OAAOtJ,KAAKk8f,sBAAsBld,eAAet3e,IAAI4B,OA3B/B,CAC1B,IAAIozf,EAAe18f,KAAKw8f,6BAA6Bthc,GACrD,IAAKz9D,EAAkBi/f,GACnB,OAAOA,EAGP,GAAI18f,KAAK+3f,qBAAqBoD,GAAiB,CAG3C,IADA,IAAIpD,EAAY/3f,KAAK+3f,WACbt6f,EAAkBs6f,KAClBA,EAAU9F,gBAAgBqH,SAASp+b,IAInC68b,EAAYA,EAAUkD,QAG9B,IAAKx9f,EAAkBs6f,GAAY,CAC/B,IAAIzuf,EAAeu1e,GAAcmB,gBAAgBmX,EAAiBpY,iBAAkB7jb,GACpF,OAAO68b,EAAU9F,gBAAgBiK,sBAAsBld,eAAet3e,IAAI4B,KAW1F,OAAOtJ,KAAK28f,gBAAgBzhc,IAEhCi8b,EAAiB/7f,UAAUuhgB,gBAAkB,SAAUzhc,GACnD,IAAI5xD,EAAeu1e,GAAcmB,gBAAgBmX,EAAiBpY,iBAAkB7jb,GAChF0hc,EAAqB58f,KAAK68f,0BAE9B,OAAKp/f,EAAkBm/f,IAAwBn/f,EAAkBm/f,EAAmBV,yBAA0BU,EAAmBV,sBAAsBld,eAAe37P,YAAY/5O,GAIvK6tf,EAAiBoC,wBAAwBr+b,GAHzC0hc,EAAmBV,sBAAsBld,eAAet3e,IAAI4B,IAM3E6tf,EAAiB/7f,UAAUyhgB,wBAA0B,WACjD,IAAID,EAMJ,OALKn/f,EAAkBuC,KAAKo5f,YACnB37f,EAAkBuC,KAAKo5f,UAAU0D,cAClCF,EAAqB58f,KAAKo5f,UAAU0D,WAAWvvV,KAAKihV,OAAOyD,iBAG5D2K,GAEXzF,EAAiB/7f,UAAUutI,iBAAmB,SAAUztE,EAAUn+D,GAI9D,IAHIU,EAAkBV,IAAoB,KAAVA,KAC5BA,EAAQo6f,EAAiBoC,wBAAwBr+b,IAEjDz9D,EAAkBuC,KAAKk8f,uBACvBl8f,KAAK+8f,gCAAgC7hc,EAAUn+D,OAE9C,CACD,IAAIuM,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKk8f,sBAAsBnd,iBAAkB7jb,GAC9F,GAAIl7D,KAAKk8f,sBAAsBld,eAAe37P,YAAY/5O,IACtDtJ,KAAKk8f,sBAAsBld,eAAet3e,IAAI4B,KAAkBvM,EAEhE,OAGJiD,KAAKk8f,sBAAwB/E,EAAiB6F,uBAAuB9b,mBAAmBlhf,KAAKk8f,sBAAuBhhc,EAAUn+D,KAGtIo6f,EAAiB/7f,UAAU2hgB,gCAAkC,SAAU7hc,EAAU20E,GAC7E,IAAIotX,EAAuB,IAAI16Q,GAC/BviP,KAAKk9f,oBAAoB,aAAchic,EAAU20E,EAAWotX,GAC5Dj9f,KAAKk9f,oBAAoB,cAAehic,EAAU20E,EAAWotX,GAC7Dj9f,KAAKk9f,oBAAoB,kBAAmBhic,EAAU20E,EAAWotX,GACjEj9f,KAAKk9f,oBAAoB,gBAAiBhic,EAAU20E,EAAWotX,GAC/Dj9f,KAAKk9f,oBAAoB,gBAAiBhic,EAAU20E,EAAWotX,GAC/Dj9f,KAAKk9f,oBAAoB,eAAgBhic,EAAU20E,EAAWotX,GAC9Dj9f,KAAKk9f,oBAAoB,cAAehic,EAAU20E,EAAWotX,GAC7Dj9f,KAAKk9f,oBAAoB,kBAAmBhic,EAAU20E,EAAWotX,GACjEj9f,KAAKk9f,oBAAoB,eAAgBhic,EAAU20E,EAAWotX,GAE9Dj9f,KAAKk8f,sBAAwB/E,EAAiB6F,uBAAuBhc,gBAAgBic,EAAsB9F,EAAiBpY,mBAGhIoY,EAAiB/7f,UAAU8hgB,oBAAsB,SAAUhic,EAAU4kb,EAAkBjwW,EAAWotX,GAC9F,IAAI3zf,EACJA,EAAeu1e,GAAcmB,gBAAgBmX,EAAiBpY,iBAAkB7jb,GAC5EA,IAAa4kb,GACbmd,EAAqB74f,IAAIkF,EAAcumI,IAG/CsnX,EAAiBoC,wBAA0B,SAAUr+b,GACjD,IAAIn+D,OAAQ7B,EACZ,OAAQggE,GACJ,IAAK,aAGL,IAAK,cAGL,IAAK,kBACDn+D,EAAQ,EACR,MACJ,IAAK,gBACDA,EAAQ,OACR,MACJ,IAAK,gBAGL,IAAK,eACDA,EAAQ,EACR,MACJ,IAAK,cACDA,EAAQ,EACR,MACJ,IAAK,kBACDA,EAAQ,WACR,MACJ,IAAK,YACDA,EAAQ,SACR,MACJ,IAAK,eACDA,EAAQ,WAGhB,OAAOA,GAEXo6f,EAAiB/7f,UAAUoggB,YAAc,WAChC/9f,EAAkBuC,KAAKg4f,aACxBh4f,KAAKg4f,WAAWwD,cAEf/9f,EAAkBuC,KAAKk8f,wBAAwE,IAA9Cl8f,KAAKk8f,sBAAsBpd,gBAC7EqY,EAAiB6F,uBAAuBz4f,OAAOvE,KAAKk8f,uBAExDl8f,KAAKk8f,2BAAwBhhgB,EAC7B8E,KAAK+3f,eAAY78f,GAErBi8f,EAAiB/7f,UAAUiX,QAAU,WAMjC,GALArS,KAAKw7f,cACA/9f,EAAkBuC,KAAKg4f,aACxBh4f,KAAKg4f,WAAW3lf,UAEpBrS,KAAKg4f,gBAAa98f,OACAA,IAAd8E,KAAKm8f,KAAoB,CACzB,IAAK,IAAIjggB,EAAI,EAAGA,EAAI8D,KAAKm8f,KAAK3/f,OAAQN,IAClC8D,KAAKm8f,KAAKjggB,GAAGmW,UAEjBrS,KAAKm8f,UAAOjhgB,IAGpBi8f,EAAiB/7f,UAAUu+f,WAAa,SAAUp7d,GAC9C,IAAK9gC,EAAkB8gC,KACd9gC,EAAkB8gC,EAAO29d,wBAC1Bl8f,KAAKm9f,4BAA4B5+d,GAEhC9gC,EAAkB8gC,EAAOy5d,aAC1Bh4f,KAAKg4f,WAAW2B,WAAWp7d,EAAOy5d,YAEjCv6f,EAAkB8gC,EAAOw5d,aAC1B/3f,KAAK+3f,UAAYx5d,EAAOw5d,YAEvBt6f,EAAkB8gC,EAAO49d,OAC1B,IAAK,IAAIjggB,EAAI,EAAGA,EAAIqiC,EAAO49d,KAAK3/f,OAAQN,IACpC8D,KAAKm8f,KAAKjggB,GAAKqiC,EAAO49d,KAAKjggB,IAK3Ci7f,EAAiB/7f,UAAU+hgB,4BAA8B,SAAU5+d,GAC/D,IAAI40E,OAAOj4G,EACP8E,KAAKk8f,wBACL/oZ,EAAOnzG,KAAKk8f,sBAAsBrb,gBAAgBtid,EAAO29d,uBACP,IAA9Cl8f,KAAKk8f,sBAAsBpd,iBAC3BqY,EAAiB6F,uBAAuBz4f,OAAOvE,KAAKk8f,uBACpDl8f,KAAKk8f,2BAAwBhhgB,IAGrC8E,KAAKk8f,sBAAwB,IAAIrd,GAAcsY,EAAiBpY,kBAC5Dthf,EAAkB01G,KAClBA,EAAOnzG,KAAKk8f,sBAAsBrb,gBAAgBtid,EAAO29d,wBAE7Dl8f,KAAKk8f,sBAAwB/E,EAAiB6F,uBAAuBhc,gBAAgB7tY,EAAMgkZ,EAAiBpY,mBAEhHoY,EAAiB/7f,UAAU2+f,YAAc,WACrC,IAAIx7d,EAAS,IAAI44d,OAAiBj8f,GAWlC,OAVAqjC,EAAO29d,sBAAwBl8f,KAAKk8f,sBACpC39d,EAAOw5d,UAAY/3f,KAAK+3f,UACpBt6f,EAAkBuC,KAAKg4f,YACvBz5d,EAAOy5d,gBAAa98f,GAGpBqjC,EAAOy5d,WAAa,IAAI8C,GACxBv8d,EAAOy5d,WAAWqC,OAASr6f,KAAKg4f,WAAWqC,OAC3C97d,EAAOy5d,WAAWkD,gBAAkBl7f,KAAKg4f,WAAWkD,iBAEjD38d,GAEX44d,EAAiB/7f,UAAUk+f,SAAW,SAAUp+b,GAC5C,IAAKz9D,EAAkBuC,KAAKk8f,yBAA2Bz+f,EAAkBuC,KAAKk8f,sBAAsBld,gBAAiB,CACjH,IAAI11e,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKk8f,sBAAsBnd,iBAAkB7jb,GAC9F,OAAOl7D,KAAKk8f,sBAAsBld,eAAe37P,YAAY/5O,GAEjE,OAAO,GAEX6tf,EAAiB1qc,MAAQ,WACrBzsD,KAAKg9f,uBAAuBvwc,SAEhC0qc,EAAiB/7f,UAAUqggB,WAAa,SAAU1D,GAC9C/3f,KAAK+3f,UAAYA,EACjB/3f,KAAKg4f,WAAWyD,WAAWz7f,KAAK+3f,YAMpCZ,EAAiB/7f,UAAUwB,SAAW,SAAUs+D,GAC5C,OAAOl7D,KAAKs5f,SAASp+b,GAAYl7D,KAAKoN,iBAAiB8tD,QAAYhgE,GAMvEi8f,EAAiB/7f,UAAUsggB,YAAc,SAAUn9d,GAC3C9gC,EAAkBuC,KAAKpD,SAAS,iBAChCoD,KAAKo9f,WAAa7+d,EAAO3hC,SAAS,eAElCa,EAAkBuC,KAAKpD,SAAS,kBAChCoD,KAAKq9f,YAAc9+d,EAAO3hC,SAAS,gBAEnCa,EAAkBuC,KAAKpD,SAAS,sBAChCoD,KAAK4uQ,gBAAkBrwO,EAAO3hC,SAAS,oBAEvCa,EAAkBuC,KAAKpD,SAAS,oBAChCoD,KAAKs9f,cAAgB/+d,EAAO3hC,SAAS,kBAErCa,EAAkBuC,KAAKpD,SAAS,mBAChCoD,KAAKu9f,aAAeh/d,EAAO3hC,SAAS,iBAEpCa,EAAkBuC,KAAKpD,SAAS,kBAChCoD,KAAKwxQ,YAAcjzO,EAAO3hC,SAAS,gBAEnCa,EAAkBuC,KAAKpD,SAAS,sBAChCoD,KAAKw9f,gBAAkBj/d,EAAO3hC,SAAS,oBAEvCa,EAAkBuC,KAAKpD,SAAS,oBAChCoD,KAAKgjC,cAAgBzE,EAAO3hC,SAAS,kBAErCa,EAAkBuC,KAAKpD,SAAS,mBAChCoD,KAAKy9f,aAAel/d,EAAO3hC,SAAS,iBAEpCa,EAAkBuC,KAAKg4f,aACvBh4f,KAAKg4f,WAAW0D,YAAYn9d,EAAOy5d,aAG3Cb,EAAiB6F,uBAAyB,IAAIjc,GAC9CoW,EAAiBpY,iBAAmB,EAC7BoY,KC7cPC,GAAkC,WAClC,SAASA,EAAiB72f,GACtBP,KAAK09f,2BAAwBxigB,EAC7B8E,KAAKo5f,eAAYl+f,EACjB8E,KAAK29f,mBAAgBzigB,EACrB8E,KAAKo5f,UAAY74f,EAwXrB,OAtXAjC,OAAOuJ,eAAeuvf,EAAiBh8f,UAAW,QAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,SAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,OAAQ5rI,IAElC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvf,EAAiBh8f,UAAW,UAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,WAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,SAAU5rI,IAEpC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvf,EAAiBh8f,UAAW,YAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,aAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,WAAY5rI,IAEtC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvf,EAAiBh8f,UAAW,cAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,aAAc5rI,IAExC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvf,EAAiBh8f,UAAW,aAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,YAAa5rI,IAEvC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvf,EAAiBh8f,UAAW,iBAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,kBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,gBAAiB5rI,IAE3C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvf,EAAiBh8f,UAAW,qBAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,sBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,oBAAqB5rI,IAE/C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvf,EAAiBh8f,UAAW,kBAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,iBAAkB5rI,IAE5C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvf,EAAiBh8f,UAAW,aAC9CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,YAAa5rI,IAEvC4K,YAAY,EACZC,cAAc,IAElBwvf,EAAiBh8f,UAAUgS,iBAAmB,SAAU8tD,GACpD,GAAKl7D,KAAKs5f,SAASp+b,GAYd,CACD,IAAI5xD,EAAeu1e,GAAcmB,gBAAgBoX,EAAiBrY,iBAAkB7jb,GACpF,IAAKz9D,EAAkBuC,KAAK09f,wBAA0B19f,KAAK09f,sBAAsB1e,eAAe37P,YAAY/5O,GACxG,OAAOtJ,KAAK09f,sBAAsB1e,eAAet3e,IAAI4B,OAf/B,CAC1B,IAAIs0f,EAAiB59f,KAAK69f,oBAAoB3ic,GAC9C,IAAKz9D,EAAkBmggB,GACnB,OAAOA,EAGP,IAAIE,EAAiB99f,KAAK+9f,eAAe7ic,GACzC,IAAKz9D,EAAkBqggB,GACnB,OAAOA,EAUnB,OAAO99f,KAAK28f,gBAAgBzhc,IAEhCk8b,EAAiBh8f,UAAUuhgB,gBAAkB,SAAUzhc,GACnD,IAAI5xD,EAAeu1e,GAAcmB,gBAAgBoX,EAAiBrY,iBAAkB7jb,GAChF8ic,EAAqBh+f,KAAKi+f,0BAE9B,OAAKxggB,EAAkBuggB,IAAwBvggB,EAAkBuggB,EAAmBN,yBAA0BM,EAAmBN,sBAAsB1e,eAAe37P,YAAY/5O,GAIvK8tf,EAAiBmC,wBAAwBr+b,GAHzC8ic,EAAmBN,sBAAsB1e,eAAet3e,IAAI4B,IAM3E8tf,EAAiBh8f,UAAU6igB,wBAA0B,WACjD,IAAID,EAWJ,OAVKvggB,EAAkBuC,KAAKo5f,aACnB37f,EAAkBuC,KAAKo5f,UAAUnC,WAI7Bx5f,EAAkBuC,KAAKo5f,UAAU0D,cAClCkB,EAAqBh+f,KAAKo5f,UAAU0D,WAAWvvV,KAAKihV,OAAO6D,iBAJ/D2L,EAAqBh+f,KAAKo5f,UAAUnC,UAAU6F,WAAWvvV,KAAKihV,OAAO6D,iBAQtE2L,GAEX5G,EAAiBh8f,UAAU2igB,eAAiB,SAAU7ic,GAElD,IAAI68b,EAiBJ,IAhBKt6f,EAAkBuC,KAAKo5f,aACnB37f,EAAkBuC,KAAKo5f,UAAUnC,WAK7Bj3f,KAAKo5f,qBAAqBlC,KAAqBz5f,EAAkBuC,KAAKo5f,UAAUnH,iBACjF8F,EAAY/3f,KAAKo5f,UAAUnH,gBAAgB8F,UAGtCt6f,EAAkBuC,KAAKo5f,qBAAqB+B,MAC7CpD,EAAY/3f,KAAKo5f,UAAU6B,SATnClD,EAAY/3f,KAAKo5f,UAAUnC,UAAUhF,gBAAgB8F,YAcrDt6f,EAAkBs6f,KAClBA,EAAU1F,gBAAgBiH,SAASp+b,IAInC68b,EAAYA,EAAUkD,QAG9B,IAAKx9f,EAAkBs6f,GAAY,CAC/B,IAAIzuf,EAAeu1e,GAAcmB,gBAAgBoX,EAAiBrY,iBAAkB7jb,GACpF,OAAO68b,EAAU1F,gBAAgBqL,sBAAsB1e,eAAet3e,IAAI4B,KAIlF8tf,EAAiBh8f,UAAUyigB,oBAAsB,SAAU3ic,GAEvD,IAAI68b,EAAY/3f,KAAK29f,cACrB,IAAKlggB,EAAkBs6f,GACnB,MAAQt6f,EAAkBs6f,IAAiC,2BAAnBA,EAAUxge,MAAmC,CAEjF,GADawge,EAAU1F,gBAAgBiH,SAASp+b,GACpC,CACR,IAAIgjc,EAAqBrf,GAAcmB,gBAAgBoX,EAAiBrY,iBAAkB7jb,GAC1F,OAAO68b,EAAU1F,gBAAgBqL,sBAAsB1e,eAAet3e,IAAIw2f,GAG1EnG,EAAYA,EAAUkD,UAMtC7D,EAAiBh8f,UAAUutI,iBAAmB,SAAUztE,EAAUn+D,GAI9D,IAHIU,EAAkBV,IAAoB,KAAVA,KAC5BA,EAAQq6f,EAAiBmC,wBAAwBr+b,IAEjDz9D,EAAkBuC,KAAK09f,uBACvB19f,KAAKm+f,gCAAgCjjc,EAAUn+D,OAE9C,CACD,IAAIuM,EAAeu1e,GAAcmB,gBAAgBhgf,KAAK09f,sBAAsB3e,iBAAkB7jb,GAC9F,GAAIl7D,KAAK09f,sBAAsB1e,eAAe37P,YAAY/5O,IAEtDtJ,KAAK09f,sBAAsB1e,eAAet3e,IAAI4B,KAAkBvM,EAChE,OAGJiD,KAAK09f,sBAAwBtG,EAAiBgH,uBAAuBld,mBAAmBlhf,KAAK09f,sBAAuBxic,EAAUn+D,KAGtIq6f,EAAiBh8f,UAAU+igB,gCAAkC,SAAUjjc,EAAU20E,GAC7E,IAAIwuX,EAAuB,IAAI97Q,GAC/BviP,KAAKs+f,yBAAyB,YAAapjc,EAAU20E,EAAWwuX,GAChEr+f,KAAKs+f,yBAAyB,aAAcpjc,EAAU20E,EAAWwuX,GACjEr+f,KAAKs+f,yBAAyB,WAAYpjc,EAAU20E,EAAWwuX,GAC/Dr+f,KAAKs+f,yBAAyB,OAAQpjc,EAAU20E,EAAWwuX,GAC3Dr+f,KAAKs+f,yBAAyB,SAAUpjc,EAAU20E,EAAWwuX,GAC7Dr+f,KAAKs+f,yBAAyB,YAAapjc,EAAU20E,EAAWwuX,GAChEr+f,KAAKs+f,yBAAyB,gBAAiBpjc,EAAU20E,EAAWwuX,GACpEr+f,KAAKs+f,yBAAyB,oBAAqBpjc,EAAU20E,EAAWwuX,GACxEr+f,KAAKs+f,yBAAyB,iBAAkBpjc,EAAU20E,EAAWwuX,GACrEr+f,KAAKs+f,yBAAyB,YAAapjc,EAAU20E,EAAWwuX,GAEhEr+f,KAAK09f,sBAAwBtG,EAAiBgH,uBAAuBpd,gBAAgBqd,EAAsBjH,EAAiBrY,mBAGhIqY,EAAiBh8f,UAAUkjgB,yBAA2B,SAAUpjc,EAAU4kb,EAAkBjwW,EAAWwuX,GACnG,IAAI/0f,EACJA,EAAeu1e,GAAcmB,gBAAgBoX,EAAiBrY,iBAAkB7jb,GAC5EA,IAAa4kb,GACbue,EAAqBj6f,IAAIkF,EAAcumI,IAG/CunX,EAAiBmC,wBAA0B,SAAUr+b,GACjD,IAAIn+D,OAAQ7B,EACZ,OAAQggE,GACJ,IAAK,OAGL,IAAK,SACDn+D,GAAQ,EACR,MACJ,IAAK,WACDA,EAAQ,GACR,MACJ,IAAK,YAGL,IAAK,gBACDA,EAAQ,OACR,MACJ,IAAK,oBACDA,EAAQ,SACR,MACJ,IAAK,iBACDA,EAAQ,UACR,MACJ,IAAK,YACDA,EAAQ,UACR,MACJ,IAAK,aACDA,EAAQ,UACR,MACJ,IAAK,YACDA,EAAQ,yBAGhB,OAAOA,GAEXq6f,EAAiBh8f,UAAUmjgB,cAAgB,SAAUhge,GACjD,OAAQv+B,KAAKovB,WAAamP,EAAOnP,UAC1BpvB,KAAKwvB,aAAe+O,EAAO/O,YAC3BxvB,KAAKivD,OAAS1wB,EAAO0wB,MACrBjvD,KAAKmvD,SAAW5wB,EAAO4wB,QACvBnvD,KAAKw+f,oBAAsBjge,EAAOige,mBAClCx+f,KAAKwtS,YAAcjvQ,EAAOivQ,WAC1BxtS,KAAKy+f,YAAclge,EAAOkge,WAC1Bz+f,KAAK0+f,gBAAkBnge,EAAOmge,eAC9B1+f,KAAK2+f,iBAAmBpge,EAAOoge,gBAE1CvH,EAAiBh8f,UAAUwjgB,aAAe,SAAUrge,GAChD,OAAOv+B,KAAK29f,gBAAkBp/d,EAAOo/d,eACjC39f,KAAK09f,wBAA0Bn/d,EAAOm/d,uBAE9CtG,EAAiBh8f,UAAU2+f,YAAc,WACrC,IAAIx7d,EAAS,IAAI64d,OAAiBl8f,GAGlC,OAFAqjC,EAAOm/d,sBAAwB19f,KAAK09f,sBACpCn/d,EAAOo/d,cAAgB39f,KAAK29f,cACrBp/d,GAEX64d,EAAiBh8f,UAAUk+f,SAAW,SAAUp+b,GAC5C,IAAKz9D,EAAkBuC,KAAK09f,yBAA2BjggB,EAAkBuC,KAAK09f,sBAAsB1e,gBAAiB,CACjH,IAAI11e,EAAeu1e,GAAcmB,gBAAgBhgf,KAAK09f,sBAAsB3e,iBAAkB7jb,GAC9F,OAAOl7D,KAAK09f,sBAAsB1e,eAAe37P,YAAY/5O,GAEjE,OAAO,GAEX8tf,EAAiBh8f,UAAUoggB,YAAc,WAChC/9f,EAAkBuC,KAAK09f,wBAAwE,IAA9C19f,KAAK09f,sBAAsB5e,gBAC7EsY,EAAiBgH,uBAAuB75f,OAAOvE,KAAK09f,uBAExD19f,KAAK09f,2BAAwBxigB,EAC7B8E,KAAK29f,mBAAgBzigB,GAEzBk8f,EAAiBh8f,UAAUiX,QAAU,WACjCrS,KAAKw7f,eAETpE,EAAiBh8f,UAAUu+f,WAAa,SAAUp7d,GACzC9gC,EAAkB8gC,MACd9gC,EAAkB8gC,EAAOm/d,wBAA0Bn/d,EAAOm/d,sBAAsB1e,gBACjFh/e,KAAK6+f,4BAA4Btge,GAEhC9gC,EAAkB8gC,EAAOo/d,iBAC1B39f,KAAK29f,cAAgBp/d,EAAOo/d,iBAIxCvG,EAAiBh8f,UAAUyjgB,4BAA8B,SAAUtge,GAC/D,IAAI40E,OAAOj4G,EACP8E,KAAK09f,wBACLvqZ,EAAOnzG,KAAK09f,sBAAsB7c,gBAAgBtid,EAAOm/d,uBACP,IAA9C19f,KAAK09f,sBAAsB5e,iBAC3BsY,EAAiBgH,uBAAuB75f,OAAOvE,KAAK09f,uBACpD19f,KAAK09f,2BAAwBxigB,IAGrC8E,KAAK09f,sBAAwB,IAAI7e,GAAcuY,EAAiBrY,kBAC5Dthf,EAAkB01G,KAClBA,EAAOnzG,KAAK09f,sBAAsB7c,gBAAgBtid,EAAOm/d,wBAE7D19f,KAAK09f,sBAAwBtG,EAAiBgH,uBAAuBpd,gBAAgB7tY,EAAMikZ,EAAiBrY,mBAEhHqY,EAAiB3qc,MAAQ,WACrBzsD,KAAKo+f,uBAAuB3xc,SAEhC2qc,EAAiBh8f,UAAUqggB,WAAa,SAAUkC,GAC9C39f,KAAK29f,cAAgBA,GAMzBvG,EAAiBh8f,UAAUwB,SAAW,SAAUs+D,GAC5C,OAAOl7D,KAAKs5f,SAASp+b,GAAYl7D,KAAKoN,iBAAiB8tD,QAAYhgE,GAMvEk8f,EAAiBh8f,UAAUsggB,YAAc,SAAUn9d,GAC3C9gC,EAAkBuC,KAAKpD,SAAS,WAChCoD,KAAKivD,KAAO1wB,EAAO3hC,SAAS,SAE5Ba,EAAkBuC,KAAKpD,SAAS,aAChCoD,KAAKmvD,OAAS5wB,EAAO3hC,SAAS,WAE9Ba,EAAkBuC,KAAKpD,SAAS,eAChCoD,KAAKovB,SAAWmP,EAAO3hC,SAAS,aAEhCa,EAAkBuC,KAAKpD,SAAS,iBAChCoD,KAAKwvB,WAAa+O,EAAO3hC,SAAS,eAElCa,EAAkBuC,KAAKpD,SAAS,gBAChCoD,KAAKwtS,UAAYjvQ,EAAO3hC,SAAS,cAEjCa,EAAkBuC,KAAKpD,SAAS,oBAChCoD,KAAK0+f,cAAgBnge,EAAO3hC,SAAS,kBAErCa,EAAkBuC,KAAKpD,SAAS,wBAChCoD,KAAKw+f,kBAAoBjge,EAAO3hC,SAAS,sBAEzCa,EAAkBuC,KAAKpD,SAAS,qBAChCoD,KAAK2+f,eAAiBpge,EAAO3hC,SAAS,mBAEtCa,EAAkBuC,KAAKpD,SAAS,gBAChCoD,KAAKy+f,UAAYlge,EAAO3hC,SAAS,eAGzCw6f,EAAiBgH,uBAAyB,IAAIrd,GAC9CqW,EAAiBrY,iBAAmB,EAC7BqY,KCjYP0H,GAA+B,WAC/B,SAASA,KAsRT,OA7QAA,EAAcvjZ,OAAS,SAAUwjZ,EAAUjtf,EAAOkd,GAC9C,OAAIld,GAAS,GACDitf,EAAS19f,MAAM,EAAGyQ,GAASkd,EAAO+ve,EAAS19f,MAAMyQ,IAAQ0P,KAAK,IAG/DwN,EAAOhvB,MAUtB8+f,EAAcv6f,OAAS,SAAUyqB,EAAMld,EAAOtV,GAC1C,OAAc,IAAVsV,EACOkd,EAAK3K,UAAUvS,EAAQ,EAAGkd,EAAKxyB,QAG/BwyB,EAAK3K,UAAU,EAAGvS,GAASkd,EAAK3K,UAAUvS,EAAQ,EAAGkd,EAAKxyB,SAUzEsigB,EAAcE,WAAa,SAAUhwe,EAAMiwe,GAEvC,IAAK,IADDntf,OAAQ5W,EACHwoB,EAAI,EAAGA,EAAIu7e,EAAmBzigB,OAAQknB,IAAK,CAChD,IAAIqX,EAAO/L,EAAKzwB,QAAQ0ggB,EAAmBv7e,KAC7B,IAAVqX,GAAet9B,EAAkBqU,GACjCA,EAAQipB,GAEO,IAAVA,GAAeA,EAAOjpB,IAC3BA,EAAQipB,GAGhB,OAAOt9B,EAAkBqU,IAAU,EAAIA,GAQ3Cgtf,EAAcI,eAAiB,SAAUlwe,EAAMiwe,GAC3C,IAAK,IAAI/igB,EAAI8yB,EAAKxyB,OAAS,EAAGN,GAAK,EAAGA,IAClC,IAAK,IAAIwnB,EAAI,EAAGA,GAAKu7e,EAAmBzigB,OAAS,EAAGknB,IAChD,GAAIsL,EAAK9yB,KAAO+igB,EAAmBv7e,GAC/B,OAAOxnB,EAInB,OAAQ,GAOZ4igB,EAAcK,YAAc,SAAUtjT,GAClC,IAAIn3M,EAAQlE,SAASW,cAAc,SAC/BuD,EAAMA,MAAMugE,QACZvgE,EAAMA,MAAMugE,QAAU42I,EAGtBn3M,EAAM/C,YAAYnB,SAAS85D,eAAeuhJ,IAE9Cr7M,SAASe,qBAAqB,QAAQ,GAAGI,YAAY+C,IAOzDo6f,EAAcM,sBAAwB,SAAUT,GAC5C,IAAItoe,EAAQ,UACZ,OAAQsoe,GACJ,IAAK,SACDtoe,EAAQ,UACR,MACJ,IAAK,cACDA,EAAQ,UACR,MACJ,IAAK,YACDA,EAAQ,UACR,MACJ,IAAK,OACDA,EAAQ,UACR,MACJ,IAAK,OACDA,EAAQ,UACR,MACJ,IAAK,MACDA,EAAQ,UACR,MACJ,IAAK,WACDA,EAAQ,UACR,MACJ,IAAK,OACDA,EAAQ,UACR,MACJ,IAAK,QACDA,EAAQ,UACR,MACJ,IAAK,SACDA,EAAQ,UACR,MACJ,IAAK,UACDA,EAAQ,UACR,MACJ,IAAK,aACDA,EAAQ,UACR,MACJ,IAAK,SACDA,EAAQ,UACR,MACJ,IAAK,SACDA,EAAQ,UACR,MACJ,IAAK,QACDA,EAAQ,UAGhB,OAAOA,GAOXyoe,EAAcO,oBAAsB,SAAU1re,GAE1C,OADYmre,EAAc/+d,MAAe,GAARpM,EAAa,GAAK,IAQvDmre,EAAcQ,oBAAsB,SAAUC,GAE1C,OADYT,EAAc/+d,MAAe,GAARw/d,EAAa,GAAK,IAOvDT,EAAcU,uBAAyB,SAAUhhW,GAC7C,OAAIA,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WACpCjigB,EAAkB+gK,EAAOmhW,UAE5BnhW,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WACzCjigB,EAAkB+gK,EAAOohW,cAAgBnigB,EAAkB+gK,EAAOmhW,WAGlEligB,EAAkB+gK,EAAOohW,aAQzCd,EAAce,YAAc,SAAU7we,GAClC,IAAKvxB,EAAkBuxB,IAAyB,IAAhBA,EAAKxyB,OACjC,IAAK,IAAIN,EAAI,EAAGA,EAAI8yB,EAAKxyB,OAAQN,IACN,MAAnB8yB,EAAKzP,OAAOrjB,KAEZ8yB,EAAOA,EAAK/xB,QAAQ,IAAK,KAIrC,OAAO+xB,GAOX8ve,EAAcgB,UAAY,SAAU9we,GAEhC,IADA,IAAI9yB,EAAI,EACAA,EAAI8yB,EAAKxyB,QACG,MAAZwyB,EAAK9yB,GADYA,KAKzB,OAAO8yB,EAAK3K,UAAUnoB,EAAG8yB,EAAKxyB,SAOlCsigB,EAAciB,QAAU,SAAU/we,GAE9B,IADA,IAAI9yB,EAAI8yB,EAAKxyB,OAAS,EACdN,GAAK,GACO,MAAZ8yB,EAAK9yB,GADGA,KAKhB,OAAO8yB,EAAK3K,UAAU,EAAGnoB,EAAI,IAOjC4igB,EAAc3xV,SAAW,SAAUn+I,GAC/B,OAAKvxB,EAAkBuxB,IAAyB,IAAhBA,EAAKxyB,QACA,MAA1BwyB,EAAKA,EAAKxyB,OAAS,IAWlCsigB,EAAckB,qBAAuB,SAAU3N,EAAiBxnb,EAAUtsC,GACtE8zd,EAAgBpjc,KAAO4b,EAAWtsC,EAAO0wB,KAAO1wB,EAAO3hC,SAAS,QAChEy1f,EAAgBljc,OAAS0b,EAAWtsC,EAAO4wB,OAAS5wB,EAAO3hC,SAAS,UACpEy1f,EAAgBjje,SAAWy7C,EAAWtsC,EAAOnP,SAAWmP,EAAO3hC,SAAS,YACxEy1f,EAAgB7ie,WAAaq7C,EAAWtsC,EAAO/O,WAAa+O,EAAO3hC,SAAS,cAC5Ey1f,EAAgB7kN,UAAY3iO,EAAWtsC,EAAOivQ,UAAYjvQ,EAAO3hC,SAAS,aAC1Ey1f,EAAgBqM,cAAgB7zb,EAAWtsC,EAAOmge,cAAgBnge,EAAO3hC,SAAS,iBAClFy1f,EAAgBmM,kBAAoB3zb,EAAWtsC,EAAOige,kBAAoBjge,EAAO3hC,SAAS,qBAC1Fy1f,EAAgBsM,eAAiB9zb,EAAWtsC,EAAOoge,eAAiBpge,EAAO3hC,SAAS,kBACpFy1f,EAAgBoM,UAAY5zb,EAAWtsC,EAAOkge,UAAYlge,EAAO3hC,SAAS,aAC1Ey1f,EAAgB4N,UAAaxigB,EAAkB8gC,EAAOo/d,oBAA6CzigB,EAA5BqjC,EAAOo/d,cAAcpme,MAShGune,EAAc/+d,MAAQ,SAAUhjC,EAAOmjgB,GAEnC,IAAK,IADDnle,EAAOh+B,EACFb,EAAI,EAAGA,EAAIgkgB,EAAehkgB,IAC/B6+B,GAAc,GAElBA,EAAO1uB,KAAK0zB,MAAMhF,GAClB,IAAS7+B,EAAI,EAAGA,EAAIgkgB,EAAehkgB,IAC/B6+B,GAAc,GAElB,OAAOA,GAKX+je,EAAcqB,WAAa,MAI3BrB,EAAcsB,UAAY,MAI1BtB,EAAcuB,qBAAuB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACpE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KACtCvB,KAMPjqd,GAAuB,WACvB,SAASA,EAAM03B,EAAWC,GACtBxsE,KAAKsggB,IAAM,EACXtggB,KAAKuggB,IAAM,EACXvggB,KAAKsggB,IAAM/zb,EACXvsE,KAAKuggB,IAAM/zb,EA6Cf,OA3CAluE,OAAOuJ,eAAegtC,EAAMz5C,UAAW,KAKnCsM,IAAK,WACD,OAAO1H,KAAKsggB,KAEhBj5f,IAAK,SAAUtK,GACXiD,KAAKsggB,IAAMvjgB,GAEf4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegtC,EAAMz5C,UAAW,KAKnCsM,IAAK,WACD,OAAO1H,KAAKuggB,KAEhBl5f,IAAK,SAAUtK,GACXiD,KAAKuggB,IAAMxjgB,GAEf4K,YAAY,EACZC,cAAc,IAKlBitC,EAAMz5C,UAAUmE,KAAO,SAAUo0B,GAC7B3zB,KAAKsggB,IAAM3se,EAAM2se,IACjBtggB,KAAKuggB,IAAM5se,EAAM4se,KAMrB1rd,EAAMz5C,UAAUiX,QAAU,WACtBrS,KAAKsggB,SAAMplgB,EACX8E,KAAKuggB,SAAMrlgB,GAER25C,KCpVP47C,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAoBxC0va,GAAwB,WAGxB,OAFA,gBAQArF,GAAiC,SAAU7pa,GAE3C,SAAS6pa,EAAgB56f,GACrB,IAAIR,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAIjC,OAHAD,EAAMq5f,UAAY74f,EAClBR,EAAMkyf,gBAAkB,IAAIkF,GAAiBp3f,GAC7CA,EAAMsyf,gBAAkB,IAAI+E,GAAiBr3f,GACtCA,EAgBX,OAtBA0wF,GAAU0qa,EAAiB7pa,GAQ3B6pa,EAAgB//f,UAAUiX,QAAU,WAChCrS,KAAKqyf,gBAAgBhgf,UACrBrS,KAAKiyf,gBAAgB5/e,WAEzB8of,EAAgB//f,UAAUqlgB,UAAY,SAAUC,GAC5C1ggB,KAAKu3B,KAAOmpe,EAAUnpe,KACtBv3B,KAAKo5f,UAAYsH,EAAUtH,UAC3Bp5f,KAAK0G,KAAOg6f,EAAUh6f,KACtB1G,KAAKsrC,KAAOo1d,EAAUp1d,KACtBtrC,KAAKi7f,QAAUyF,EAAUzF,QACzBj7f,KAAK4vD,KAAO8wc,EAAU9wc,KACtB5vD,KAAKqyf,gBAAgBsH,WAAW+G,EAAUrO,iBAC1Cryf,KAAKiyf,gBAAgB0H,WAAW+G,EAAUzO,kBAEvCkJ,GACTqF,IAKEG,GAAiC,SAAUrva,GAE3C,SAASqva,EAAgBpggB,GACrB,IAAIR,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAGjC,OAFAD,EAAMq5f,UAAY74f,EAClBR,EAAMsyf,gBAAkB,IAAI+E,GAAiBr3f,GACtCA,EAaX,OAlBA0wF,GAAUkwa,EAAiBrva,GAO3Bqva,EAAgBvlgB,UAAUiX,QAAU,WAChCrS,KAAKqyf,gBAAgBhgf,WAEzBsuf,EAAgBvlgB,UAAUqlgB,UAAY,SAAUG,GAC5C5ggB,KAAKu3B,KAAOqpe,EAAUrpe,KACtBv3B,KAAKo5f,UAAYwH,EAAUxH,UAC3Bp5f,KAAK0G,KAAOk6f,EAAUl6f,KACtB1G,KAAKsrC,KAAOs1d,EAAUt1d,KACtBtrC,KAAKi7f,QAAU2F,EAAU3F,QACzBj7f,KAAKqyf,gBAAgBsH,WAAWiH,EAAUvO,kBAEvCsO,GACTH,IAKE/L,GAAyB,WACzB,SAASA,IACLz0f,KAAKqqC,cAqET,OAlEA/rC,OAAOuJ,eAAe4sf,EAAQr5f,UAAW,UACrCsM,IAAK,WACD,OAAO1H,KAAKqqC,WAAW7tC,QAE3BmL,YAAY,EACZC,cAAc,IAElB6sf,EAAQr5f,UAAUmJ,OAAS,SAAU0Z,GACjCje,KAAKqqC,WAAarqC,KAAKqqC,WAAWH,OAAO,SAAUja,GAAK,OAAQA,EAAEsH,OAAStZ,EAAKsZ,QAEpFk9d,EAAQr5f,UAAUoJ,KAAO,SAAUyZ,GAI/B,OAHY,MAARA,QAAyB/iB,IAAT+iB,GAChBje,KAAKqqC,WAAW7lC,KAAKyZ,GAElB,GAEXw2e,EAAQr5f,UAAUu3G,QAAU,SAAU7gG,GAClC,OAAI9R,KAAKqqC,WAAW7tC,OAASsV,EAClB9R,KAAKqqC,WAAWv4B,GAEpB,MAEX2if,EAAQr5f,UAAUmD,QAAU,SAAU0f,GAClC,OAAOje,KAAKqqC,WAAW9rC,QAAQ0f,IAEnCw2e,EAAQr5f,UAAU+I,SAAW,SAAU8Z,GACnC,IAAInM,EAAQ9R,KAAKqqC,WAAW9rC,QAAQ0f,GACpC,OAAOnM,GAAS,GAAKA,EAAQ9R,KAAKqqC,WAAW7tC,QAEjDi4f,EAAQr5f,UAAUqxD,MAAQ,WACtB,KAAOzsD,KAAKqqC,WAAW7tC,OAAS,GAC5BwD,KAAKqqC,WAAWw7H,OAGxB4uV,EAAQr5f,UAAU08f,WAAa,SAAUvge,EAAM7wB,GAE3C,IAAK,IADDm6f,EACKzigB,EAAK,EAAGyE,EAAK7C,KAAKqqC,WAAYjsC,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACzD,IAAIrB,EAAQ8F,EAAGzE,GACXrB,EAAMw6B,OAASA,IACfspe,EAAc9jgB,EACTU,EAAkBiJ,IAAS3J,EAAM2J,OAASA,IAC3Cm6f,EAAc9jgB,IAI1B,OAAO8jgB,GAEXpM,EAAQr5f,UAAU68f,cAAgB,SAAUvxf,GACxC,OAAO1G,KAAKqqC,WAAWH,OAAO,SAAUja,GAAK,OAAQA,EAAEvpB,OAASA,IAAUgxB,IAAI,SAAUzH,GAAK,OAAOA,EAAEsH,QAG1Gk9d,EAAQr5f,UAAU+8f,UAAY,SAAUzxf,GAGpC,IAAK,IADDo6f,KACK1igB,EAAK,EAAG2igB,EAFJ/ggB,KAAKqqC,WAAWH,OAAO,SAAUja,GAAK,OAAQA,EAAEvpB,OAASA,IAAUgxB,IAAI,SAAUzH,GAAK,OAAOA,IAEtE7xB,EAAK2igB,EAASvkgB,OAAQ4B,IAAM,CAC5D,IAAIsG,EAAQq8f,EAAS3igB,GACjByigB,KACAG,KACJA,EAAkB3O,mBAClByM,GAAckB,qBAAqBgB,EAAkB3O,iBAAiB,EAAM3tf,EAAM2tf,iBAClFwO,EAAYtpe,KAAO7yB,EAAM6yB,KACzBspe,EAAYn8f,MAAQ4nD,KAAKC,UAAUy0c,GACnCF,EAAat8f,KAAKq8f,GAEtB,OAAOC,GAEJrM,KCnJPwM,GAAyB,WACzB,SAASA,EAAQ1ggB,GACbP,KAAKkhgB,wBAAqBhmgB,EAC1B8E,KAAKo5f,eAAYl+f,EACjB8E,KAAKo5f,UAAY74f,EAuhBrB,OArhBAjC,OAAOuJ,eAAeo5f,EAAQ7lgB,UAAW,SACrCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,UAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,QAAS5rI,IAEnC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo5f,EAAQ7lgB,UAAW,aACrCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,YAAa5rI,IAEvC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo5f,EAAQ7lgB,UAAW,aACrCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,YAAa5rI,IAEvC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo5f,EAAQ7lgB,UAAW,UACrCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,WAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,SAAU5rI,IAEpC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo5f,EAAQ7lgB,UAAW,SACrCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,UAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,QAAS5rI,IAEnC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo5f,EAAQ7lgB,UAAW,gBACrCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,eAAgB5rI,IAE1C4K,YAAY,EACZC,cAAc,IAElBq5f,EAAQ7lgB,UAAUgS,iBAAmB,SAAU8tD,GAE3C,GADel7D,KAAKs5f,SAASp+b,GACf,CACV,IAAI5xD,EAAeu1e,GAAcmB,gBAAgBihB,EAAQliB,iBAAkB7jb,GAC3E,IAAKz9D,EAAkBuC,KAAKkhgB,qBAAuBlhgB,KAAKkhgB,mBAAmBliB,eAAe37P,YAAY/5O,GAClG,OAAOtJ,KAAKkhgB,mBAAmBliB,eAAet3e,IAAI4B,GAG1D,OAAO23f,EAAQ1H,wBAAwBr+b,IAE3C+lc,EAAQ7lgB,UAAUutI,iBAAmB,SAAUztE,EAAUn+D,GAIrD,IAHIU,EAAkBV,IAAoB,KAAVA,KAC5BA,EAAQkkgB,EAAQ1H,wBAAwBr+b,IAExCz9D,EAAkBuC,KAAKkhgB,oBACvBlhgB,KAAKmhgB,uBAAuBjmc,EAAUn+D,OAErC,CACD,IAAIuM,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKkhgB,mBAAmBniB,iBAAkB7jb,GAC3F,GAAIl7D,KAAKkhgB,mBAAmBliB,eAAe37P,YAAY/5O,IACnDtJ,KAAKkhgB,mBAAmBliB,eAAet3e,IAAI4B,KAAkBvM,EAE7D,OAEJiD,KAAKkhgB,mBAAqBD,EAAQG,oBAAoBlgB,mBAAmBlhf,KAAKkhgB,mBAAoBhmc,EAAUn+D,KAGpHkkgB,EAAQ7lgB,UAAU+lgB,uBAAyB,SAAUjmc,EAAU20E,GAC3D,IAAIwxX,EAAyB,IAAI9+Q,GACjCviP,KAAKshgB,sBAAsB,QAASpmc,EAAU20E,EAAWwxX,GACzDrhgB,KAAKshgB,sBAAsB,YAAapmc,EAAU20E,EAAWwxX,GAC7DrhgB,KAAKshgB,sBAAsB,YAAapmc,EAAU20E,EAAWwxX,GAC7DrhgB,KAAKshgB,sBAAsB,SAAUpmc,EAAU20E,EAAWwxX,GAC1DrhgB,KAAKshgB,sBAAsB,QAASpmc,EAAU20E,EAAWwxX,GACzDrhgB,KAAKshgB,sBAAsB,eAAgBpmc,EAAU20E,EAAWwxX,GAChErhgB,KAAKkhgB,mBAAqBD,EAAQG,oBAAoBpgB,gBAAgBqgB,EAAwBJ,EAAQliB,mBAG1GkiB,EAAQ7lgB,UAAUkmgB,sBAAwB,SAAUpmc,EAAU4kb,EAAkBjwW,EAAWwxX,GACvF,IAAI/3f,EACJA,EAAeu1e,GAAcmB,gBAAgBihB,EAAQliB,iBAAkB7jb,GACnEA,IAAa4kb,EACbuhB,EAAuBj9f,IAAIkF,EAAcumI,GAGzCwxX,EAAuBj9f,IAAIkF,EAAc23f,EAAQ1H,wBAAwBr+b,KAGjF+lc,EAAQ1H,wBAA0B,SAAUr+b,GACxC,IAAIn+D,OAAQ7B,EACZ,OAAQggE,GACJ,IAAK,QACDn+D,EAAQ,UACR,MACJ,IAAK,YACDA,EAAQ,OACR,MACJ,IAAK,YACDA,EAAQ,EACR,MACJ,IAAK,SACDA,GAAQ,EACR,MACJ,IAAK,QACDA,EAAQ,EACR,MACJ,IAAK,eACDA,GAAQ,EAGhB,OAAOA,GAEXkkgB,EAAQ7lgB,UAAUq2Q,aAAe,WAE7B,OAAQzxQ,KAAKmoO,WACT,IAAK,OACL,IAAK,UACD,OAAO,EACX,IAAK,SACL,IAAK,SACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACL,IAAK,qBACL,IAAK,qBACL,IAAK,yBACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACL,IAAK,WACL,IAAK,YAIG,IAAK,IAFDo5R,EAAYvhgB,KAAKwhgB,wBAAwBxhgB,KAAKmoO,UAAWnoO,KAAKwzF,WAC9Dx9E,EAAQ,EACH9Z,EAAI,EAAGA,EAAIqlgB,EAAU/kgB,OAAQN,IAClC8Z,GAASurf,EAAUrlgB,GAEvB,OAAO8Z,EAEf,IAAK,SACL,IAAK,eACL,IAAK,eACL,IAAK,MACL,IAAK,UACL,IAAK,aACL,IAAK,QACD,OAAOhW,KAAKwzF,UAChB,IAAK,aACD,OAA2B,MAAnBxzF,KAAKwzF,UAAoB,EAAI,IACzC,IAAK,aACD,YACJ,IAAK,iBACL,IAAK,SACD,OAAOxzF,KAAKwzF,UAEpB,OAAOxzF,KAAKwzF,WAGhByta,EAAQ7lgB,UAAUomgB,wBAA0B,SAAUr5R,EAAW30I,GAC7D,IAAIiua,GAAmBjua,GACvB,OAAQ20I,GACJ,IAAK,SACDs5R,GAAmB,EAAG,EAAG,GACzB,MACJ,IAAK,oBACDA,GAAmB,GAAI,KAAO,KAC9B,MACJ,IAAK,oBACDA,IAAoB,KAAO,IAAM,GACjC,MACJ,IAAK,qBACDA,GAAmB,EAAG,GAAK,IAC3B,MACJ,IAAK,qBACDA,GAAmB,GAAK,GAAK,GAC7B,MACJ,IAAK,oBACDA,IAAoB,IAAK,GAAI,KAC7B,MACJ,IAAK,oBACDA,IAAoB,IAAM,GAAI,KAC9B,MACJ,IAAK,SACDA,GAAmB,EAAG,EAAG,EAAG,EAAG,GAC/B,MACJ,IAAK,wBACDA,IAAoB,KAAO,IAAM,GAAI,KAAO,KAC5C,MACJ,IAAK,yBACDA,GAAmB,GAAK,GAAK,EAAG,GAAK,IACrC,MACJ,IAAK,wBACDA,IAAoB,IAAM,GAAI,IAAK,GAAI,KACvC,MACJ,IAAK,WACL,IAAK,YACDA,GAAmB,IAAM,EAAG,EAAG,EAAG,KAG1C,GAA+B,IAA3BA,EAAgBjlgB,OAChB,OAAQg3F,GAEZ,IAAK,IAAIt3F,EAAI,EAAGA,EAAIulgB,EAAgBjlgB,OAAQN,IACpCulgB,EAAgBvlgB,IAAM,EACtBulgB,EAAgBvlgB,GAAKulgB,EAAgBvlgB,GAAKs3F,EAG1Ciua,EAAgBvlgB,GAAKmQ,KAAKE,IAAIk1f,EAAgBvlgB,IAGtD,OAAOulgB,GAEXR,EAAQ7lgB,UAAUsmgB,gBAAkB,WAChC,IAAIC,EAAS,EACTC,EAAgB5hgB,KAAK6hgB,mBACrBC,EAAe9hgB,KAAK+hgB,kBACxB,OAAQ/hgB,KAAKmoO,WACT,IAAK,SACL,IAAK,eACL,IAAK,UACL,IAAK,aACL,IAAK,SACL,IAAK,SACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACL,IAAK,qBACL,IAAK,qBACL,IAAK,yBACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACL,IAAK,aACL,IAAK,aACL,IAAK,iBACL,IAAK,WACL,IAAK,YACL,IAAK,SACL,IAAK,QACL,IAAK,QACDw5R,EAASC,EAAgBE,EACzB,MACJ,IAAK,MACL,IAAK,eACDH,EAAS,EAGjB,OAAOA,GAEXV,EAAQ7lgB,UAAU2mgB,gBAAkB,WAChC,IAAID,EAAe,EACnB,OAAQ9hgB,KAAKmoO,WACT,IAAK,SACD25R,EAAe,EACf,MACJ,IAAK,QACDA,EAAe,EACf,MACJ,IAAK,SACDA,EAAe,EACf,MACJ,IAAK,MACDA,EAAe,EACf,MACJ,IAAK,eACDA,EAAe,EACf,MACJ,IAAK,UACDA,EAAe,EACf,MACJ,IAAK,aACDA,EAAe,EACf,MACJ,IAAK,SACDA,EAAe,EACf,MACJ,IAAK,oBACDA,EAAe,EACf,MACJ,IAAK,oBACDA,EAAe,GACf,MACJ,IAAK,wBACDA,EAAe,GACf,MACJ,IAAK,qBACDA,EAAe,GACf,MACJ,IAAK,qBACDA,EAAe,GACf,MACJ,IAAK,yBACDA,EAAe,GACf,MACJ,IAAK,oBACDA,EAAe,GACf,MACJ,IAAK,oBACDA,EAAe,GACf,MACJ,IAAK,wBACDA,EAAe,GACf,MACJ,IAAK,aACDA,EAAe,GACf,MACJ,IAAK,aACDA,EAAe,GACf,MACJ,IAAK,eACDA,EAAe,GACf,MACJ,IAAK,iBACDA,EAAe,GACf,MACJ,IAAK,WACDA,EAAe,GACf,MACJ,IAAK,YACDA,EAAe,GACf,MACJ,IAAK,SACDA,EAAe,GACf,MACJ,IAAK,QACDA,EAAe,GAGvB,OAAOA,GAEXb,EAAQ7lgB,UAAUymgB,iBAAmB,WAEjC,IAAI9kgB,EAAQ,EACZ,OAAQiD,KAAKmoO,WACT,IAAK,SACL,IAAK,MACL,IAAK,eACL,IAAK,eACL,IAAK,UACL,IAAK,aACDprO,EAAQ,EACR,MACJ,IAAK,SACDA,EAAQ,EACR,MACJ,IAAK,SACDA,EAAQ,EACR,MACJ,IAAK,oBAGL,IAAK,oBACDA,EAAQ,EACR,MACJ,IAAK,wBACDA,EAAQ,EACR,MACJ,IAAK,qBAGL,IAAK,qBACDA,EAAQ,EACR,MACJ,IAAK,yBACDA,EAAQ,EACR,MACJ,IAAK,oBAGL,IAAK,oBACDA,EAAQ,EACR,MACJ,IAAK,wBACDA,EAAQ,EACR,MACJ,IAAK,aACDA,EAAQ,EACR,MACJ,IAAK,aACDA,EAAQ,EACR,MACJ,IAAK,iBACDA,EAAQ,EACR,MACJ,IAAK,WACL,IAAK,YACDA,EAAQ,EACR,MACJ,IAAK,SACL,IAAK,QACL,IAAK,QACDA,EAAQ,EAGhB,OAAOA,GAEXkkgB,EAAQ7lgB,UAAU4mgB,cAAgB,WAC9B,IAAIjlgB,EAAQ,EACZ,OAAQiD,KAAKmoO,WACT,IAAK,SACDprO,EAAQ,EACR,MACJ,IAAK,QACDA,EAAQ,EACR,MACJ,IAAK,SACDA,EAAQ,EACR,MACJ,IAAK,MACDA,EAAQ,EACR,MACJ,IAAK,eACDA,EAAQ,EACR,MACJ,IAAK,UACDA,EAAQ,EACR,MACJ,IAAK,aACDA,EAAQ,EACR,MACJ,IAAK,SACDA,EAAQ,EACR,MACJ,IAAK,oBACDA,EAAQ,EACR,MACJ,IAAK,oBACDA,EAAQ,GACR,MACJ,IAAK,wBACDA,EAAQ,GACR,MACJ,IAAK,qBACDA,EAAQ,GACR,MACJ,IAAK,qBACDA,EAAQ,GACR,MACJ,IAAK,yBACDA,EAAQ,GACR,MACJ,IAAK,oBACDA,EAAQ,GACR,MACJ,IAAK,oBACDA,EAAQ,GACR,MACJ,IAAK,wBACDA,EAAQ,GACR,MACJ,IAAK,aACDA,EAAQ,GACR,MACJ,IAAK,aACDA,EAAQ,GACR,MACJ,IAAK,eACDA,EAAQ,GACR,MACJ,IAAK,iBACDA,EAAQ,GACR,MACJ,IAAK,WACDA,EAAQ,GACR,MACJ,IAAK,YACDA,EAAQ,GACR,MACJ,IAAK,SACDA,EAAQ,GACR,MACJ,IAAK,QACDA,EAAQ,GAGhB,OAAOA,GAEXkkgB,EAAQ7lgB,UAAUk+f,SAAW,SAAUp+b,GACnC,IAAKz9D,EAAkBuC,KAAKkhgB,oBAAqB,CAC7C,IAAI53f,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKkhgB,mBAAmBniB,iBAAkB7jb,GAC3F,OAAOl7D,KAAKkhgB,mBAAmBliB,eAAe37P,YAAY/5O,GAE9D,OAAO,GAEX23f,EAAQ7lgB,UAAU2+f,YAAc,WAC5B,IAAIjzd,EAAS,IAAIm6d,OAAQ/lgB,GAMzB,OALA4rC,EAAOzQ,MAAQr2B,KAAKq2B,MACpByQ,EAAOqhM,UAAYnoO,KAAKmoO,UACxBrhM,EAAO0sD,UAAYxzF,KAAKwzF,UACxB1sD,EAAOkxB,OAASh4D,KAAKg4D,OACrBlxB,EAAO3G,MAAQngC,KAAKmgC,MACb2G,GAEXm6d,EAAQ7lgB,UAAUiX,QAAU,WACnB5U,EAAkBuC,KAAKkhgB,qBACxBD,EAAQG,oBAAoB78f,OAAOvE,KAAKkhgB,oBAE5ClhgB,KAAKkhgB,wBAAqBhmgB,GAE9B+lgB,EAAQ7lgB,UAAUu+f,WAAa,SAAU7yd,GAChCrpC,EAAkBqpC,IAAYrpC,EAAkBqpC,EAAOo6d,sBACxDlhgB,KAAKq2B,MAAQyQ,EAAOzQ,MACpBr2B,KAAKmoO,UAAYrhM,EAAOqhM,UACxBnoO,KAAKwzF,UAAY1sD,EAAO0sD,UACxBxzF,KAAKg4D,OAASlxB,EAAOkxB,OACrBh4D,KAAKmgC,MAAQ2G,EAAO3G,QAG5B8ge,EAAQx0c,MAAQ,WACZzsD,KAAKohgB,oBAAoB30c,SAE7Bw0c,EAAQG,oBAAsB,IAAIrgB,GAClCkgB,EAAQliB,iBAAmB,EACpBkiB,KC7hBPgB,GAA0B,WAC1B,SAASA,EAAS1hgB,GACdP,KAAKkigB,OAAS,IAAIjB,GAAQjhgB,MAC1BA,KAAKmigB,QAAU,IAAIlB,GAAQjhgB,MAC3BA,KAAKoigB,MAAQ,IAAInB,GAAQjhgB,MACzBA,KAAKqigB,SAAW,IAAIpB,GAAQjhgB,MAC5BA,KAAKsigB,aAAe,IAAIrB,GAAQjhgB,MAChCA,KAAKuigB,WAAa,IAAItB,GAAQjhgB,MAC9BA,KAAKwigB,aAAe,IAAIvB,GAAQjhgB,MAChCA,KAAKyigB,eAAiB,IAAIxB,GAAQjhgB,MAClCA,KAAK0igB,YAAc,EACnB1igB,KAAKo5f,UAAY74f,EAoKrB,OAlKAjC,OAAOuJ,eAAeo6f,EAAS7mgB,UAAW,QACtCsM,IAAK,WACD,OAAO1H,KAAKkigB,QAEhB76f,IAAK,SAAUtK,GACXiD,KAAKkigB,OAASnlgB,GAElB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo6f,EAAS7mgB,UAAW,SACtCsM,IAAK,WACD,OAAO1H,KAAKmigB,SAEhB96f,IAAK,SAAUtK,GACXiD,KAAKmigB,QAAUplgB,GAEnB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo6f,EAAS7mgB,UAAW,OACtCsM,IAAK,WACD,OAAO1H,KAAKoigB,OAEhB/6f,IAAK,SAAUtK,GACXiD,KAAKoigB,MAAQrlgB,GAEjB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo6f,EAAS7mgB,UAAW,UACtCsM,IAAK,WACD,OAAO1H,KAAKqigB,UAEhBh7f,IAAK,SAAUtK,GACXiD,KAAKqigB,SAAWtlgB,GAEpB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo6f,EAAS7mgB,UAAW,cACtCsM,IAAK,WACD,OAAO1H,KAAKsigB,cAEhBj7f,IAAK,SAAUtK,GACXiD,KAAKsigB,aAAevlgB,GAExB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo6f,EAAS7mgB,UAAW,YACtCsM,IAAK,WACD,OAAO1H,KAAKuigB,YAEhBl7f,IAAK,SAAUtK,GACXiD,KAAKuigB,WAAaxlgB,GAEtB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo6f,EAAS7mgB,UAAW,cACtCsM,IAAK,WACD,OAAO1H,KAAKwigB,cAEhBn7f,IAAK,SAAUtK,GACXiD,KAAKwigB,aAAezlgB,GAExB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo6f,EAAS7mgB,UAAW,gBACtCsM,IAAK,WACD,OAAO1H,KAAKyigB,gBAEhBp7f,IAAK,SAAUtK,GACXiD,KAAKyigB,eAAiB1lgB,GAE1B4K,YAAY,EACZC,cAAc,IAElBq6f,EAAS7mgB,UAAUiX,QAAU,WACpB5U,EAAkBuC,KAAKwM,OACxBxM,KAAKwM,KAAK6F,UAET5U,EAAkBuC,KAAK0M,MACxB1M,KAAK0M,IAAI2F,UAER5U,EAAkBuC,KAAK2M,SACxB3M,KAAK2M,OAAO0F,UAEX5U,EAAkBuC,KAAKyM,QACxBzM,KAAKyM,MAAM4F,UAEV5U,EAAkBuC,KAAK6jI,aACxB7jI,KAAK6jI,WAAWxxH,UAEf5U,EAAkBuC,KAAK8jI,WACxB9jI,KAAK8jI,SAASzxH,UAEb5U,EAAkBuC,KAAK2igB,eACxB3igB,KAAK2igB,aAAatwf,UAEjB5U,EAAkBuC,KAAK4igB,aACxB5igB,KAAK4igB,WAAWvwf,UAEpBrS,KAAKoigB,WAAQlngB,EACb8E,KAAKqigB,cAAWnngB,EAChB8E,KAAKkigB,YAAShngB,EACd8E,KAAKmigB,aAAUjngB,EACf8E,KAAKsigB,kBAAepngB,EACpB8E,KAAKuigB,gBAAarngB,EAClB8E,KAAKyigB,oBAAiBvngB,EACtB8E,KAAKwigB,kBAAetngB,EACpB8E,KAAK0igB,iBAAcxngB,EACnB8E,KAAK6igB,aAAU3ngB,GAEnB+mgB,EAAS7mgB,UAAU2+f,YAAc,WAC7B,IAAIlsM,EAAU,IAAIo0M,OAAS/mgB,GAS3B,OARA2yT,EAAQnhT,IAAMjP,EAAkBuC,KAAK0M,UAAOxR,EAAY8E,KAAK0M,IAAIqtf,cACjElsM,EAAQlhT,OAASlP,EAAkBuC,KAAK2M,aAAUzR,EAAY8E,KAAK2M,OAAOotf,cAC1ElsM,EAAQrhT,KAAO/O,EAAkBuC,KAAKwM,WAAQtR,EAAY8E,KAAKwM,KAAKutf,cACpElsM,EAAQphT,MAAQhP,EAAkBuC,KAAKyM,YAASvR,EAAY8E,KAAKyM,MAAMstf,cACvElsM,EAAQhqL,WAAapmI,EAAkBuC,KAAK6jI,iBAAc3oI,EAAY8E,KAAK6jI,WAAWk2X,cACtFlsM,EAAQ/pL,SAAWrmI,EAAkBuC,KAAK8jI,eAAY5oI,EAAY8E,KAAK8jI,SAASi2X,cAChFlsM,EAAQ+0M,WAAanlgB,EAAkBuC,KAAK4igB,iBAAc1ngB,EAAY8E,KAAK4igB,WAAW7I,cACtFlsM,EAAQ80M,aAAellgB,EAAkBuC,KAAK2igB,mBAAgBzngB,EAAY8E,KAAK2igB,aAAa5I,cACrFlsM,GAEXo0M,EAAS7mgB,UAAUu+f,WAAa,SAAU9rM,IACjCpwT,EAAkBowT,EAAQrhT,OAASqhT,EAAQrhT,gBAAgBy0f,KAC5DjhgB,KAAKwM,KAAO,IAAIy0f,GAAQjhgB,MACxBA,KAAKwM,KAAKmtf,WAAW9rM,EAAQrhT,QAE5B/O,EAAkBowT,EAAQphT,QAAUohT,EAAQphT,iBAAiBw0f,KAC9DjhgB,KAAKyM,MAAQ,IAAIw0f,GAAQjhgB,MACzBA,KAAKyM,MAAMktf,WAAW9rM,EAAQphT,SAE7BhP,EAAkBowT,EAAQnhT,MAAQmhT,EAAQnhT,eAAeu0f,KAC1DjhgB,KAAK0M,IAAM,IAAIu0f,GAAQjhgB,MACvBA,KAAK0M,IAAIitf,WAAW9rM,EAAQnhT,OAE3BjP,EAAkBowT,EAAQlhT,SAAWkhT,EAAQlhT,kBAAkBs0f,KAChEjhgB,KAAK2M,OAAS,IAAIs0f,GAAQjhgB,MAC1BA,KAAK2M,OAAOgtf,WAAW9rM,EAAQlhT,UAE9BlP,EAAkBowT,EAAQhqL,aAAegqL,EAAQhqL,sBAAsBo9X,KACxEjhgB,KAAK6jI,WAAa,IAAIo9X,GAAQjhgB,MAC9BA,KAAK6jI,WAAW81X,WAAW9rM,EAAQhqL,cAElCpmI,EAAkBowT,EAAQ/pL,WAAa+pL,EAAQ/pL,oBAAoBm9X,KACpEjhgB,KAAK8jI,SAAW,IAAIm9X,GAAQjhgB,MAC5BA,KAAK8jI,SAAS61X,WAAW9rM,EAAQ/pL,YAEhCrmI,EAAkBowT,EAAQ80M,eAAiB90M,EAAQ80M,wBAAwB1B,KAC5EjhgB,KAAK2igB,aAAe,IAAI1B,GAAQjhgB,MAChCA,KAAK2igB,aAAahJ,WAAW9rM,EAAQ80M,gBAEpCllgB,EAAkBowT,EAAQ+0M,aAAe/0M,EAAQ+0M,sBAAsB3B,KACxEjhgB,KAAK4igB,WAAa,IAAI3B,GAAQjhgB,MAC9BA,KAAK4igB,WAAWjJ,WAAW9rM,EAAQ+0M,cAGpCX,KC7KPa,GAA0B,WAC1B,SAASA,EAASvigB,GACdP,KAAK+igB,yBAAsB7ngB,EAC3B8E,KAAKo5f,eAAYl+f,EACjB8E,KAAKo5f,UAAY74f,EA6HrB,OA3HAjC,OAAOuJ,eAAei7f,EAAS1ngB,UAAW,mBACtCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,kBAAmB5rI,IAE7C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAei7f,EAAS1ngB,UAAW,mBACtCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,kBAAmB5rI,IAE7C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAei7f,EAAS1ngB,UAAW,gBACtCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,eAAgB5rI,IAE1C4K,YAAY,EACZC,cAAc,IAElBk7f,EAAS1ngB,UAAUgS,iBAAmB,SAAU8tD,GAE5C,GADel7D,KAAKs5f,SAASp+b,GACf,CACV,IAAI5xD,EAAeu1e,GAAcmB,gBAAgB8iB,EAAS/jB,iBAAkB7jb,GAC5E,IAAKz9D,EAAkBuC,KAAK+igB,sBAAwB/igB,KAAK+igB,oBAAoB/jB,eAAe37P,YAAY/5O,GACpG,OAAOtJ,KAAK+igB,oBAAoB/jB,eAAet3e,IAAI4B,GAG3D,OAAOw5f,EAASvJ,wBAAwBr+b,IAE5C4nc,EAAS1ngB,UAAUutI,iBAAmB,SAAUztE,EAAUn+D,GAItD,IAHIU,EAAkBV,IAAoB,KAAVA,KAC5BA,EAAQ+lgB,EAASvJ,wBAAwBr+b,IAEzCz9D,EAAkBuC,KAAK+igB,qBACvB/igB,KAAKgjgB,wBAAwB9nc,EAAUn+D,OAEtC,CACD,IAAIuM,EAAeu1e,GAAcmB,gBAAgBhgf,KAAK+igB,oBAAoBhkB,iBAAkB7jb,GAC5F,GAAIl7D,KAAK+igB,oBAAoB/jB,eAAe37P,YAAY/5O,IACpDtJ,KAAK+igB,oBAAoB/jB,eAAet3e,IAAI4B,KAAkBvM,EAE9D,OAEJiD,KAAK+igB,oBAAsBD,EAASG,qBAAqB/hB,mBAAmBlhf,KAAK+igB,oBAAqB7nc,EAAUn+D,KAGxH+lgB,EAASvJ,wBAA0B,SAAUr+b,GACzC,IAAIn+D,OAAQ7B,EACZ,OAAQggE,GACJ,IAAK,kBACDn+D,EAAQ,UACR,MACJ,IAAK,kBACDA,EAAQ,QACR,MACJ,IAAK,eACDA,EAAQ,cAGhB,OAAOA,GAEX+lgB,EAAS1ngB,UAAU4ngB,wBAA0B,SAAU9nc,EAAU20E,GAC7D,IAAIqzX,EAAoB,IAAI3gR,GAC5BviP,KAAKmjgB,iBAAiB,kBAAmBjoc,EAAU20E,EAAWqzX,GAC9DljgB,KAAKmjgB,iBAAiB,kBAAmBjoc,EAAU20E,EAAWqzX,GAC9DljgB,KAAKmjgB,iBAAiB,eAAgBjoc,EAAU20E,EAAWqzX,GAE3DljgB,KAAK+igB,oBAAsBD,EAASG,qBAAqBjiB,gBAAgBkiB,EAAmBJ,EAAS/jB,mBAGzG+jB,EAAS1ngB,UAAU+ngB,iBAAmB,SAAUjoc,EAAU4kb,EAAkBjwW,EAAWqzX,GACnF,IAAI55f,EACJA,EAAeu1e,GAAcmB,gBAAgB8iB,EAAS/jB,iBAAkB7jb,GACpEA,IAAa4kb,EACbojB,EAAkB9+f,IAAIkF,EAAcumI,GAGpCqzX,EAAkB9+f,IAAIkF,EAAcw5f,EAASvJ,wBAAwBr+b,KAG7E4nc,EAAS1ngB,UAAUiX,QAAU,WACpB5U,EAAkBuC,KAAK+igB,sBACxBD,EAASG,qBAAqB1+f,OAAOvE,KAAK+igB,qBAE9C/igB,KAAK+igB,yBAAsB7ngB,GAE/B4ngB,EAAS1ngB,UAAU2+f,YAAc,WAC7B,IAAIqJ,EAAU,IAAIN,OAAS5ngB,GAI3B,OAHAkogB,EAAQh1c,gBAAkBpuD,KAAKouD,gBAC/Bg1c,EAAQC,gBAAkBrjgB,KAAKqjgB,gBAC/BD,EAAQE,aAAetjgB,KAAKsjgB,aACrBF,GAEXN,EAAS1ngB,UAAUu+f,WAAa,SAAUyJ,GACjC3lgB,EAAkB2lgB,IAAa3lgB,EAAkB2lgB,EAAQL,uBAC1D/igB,KAAKouD,gBAAkBg1c,EAAQh1c,gBAC/BpuD,KAAKqjgB,gBAAkBD,EAAQC,gBAC/BrjgB,KAAKsjgB,aAAeF,EAAQE,eAGpCR,EAAS1ngB,UAAUk+f,SAAW,SAAUp+b,GACpC,IAAKz9D,EAAkBuC,KAAK+igB,qBAAsB,CAC9C,IAAIz5f,EAAeu1e,GAAcmB,gBAAgBhgf,KAAK+igB,oBAAoBhkB,iBAAkB7jb,GAC5F,OAAOl7D,KAAK+igB,oBAAoB/jB,eAAe37P,YAAY/5O,GAE/D,OAAO,GAEXw5f,EAASr2c,MAAQ,WACbzsD,KAAKijgB,qBAAqBx2c,SAE9Bq2c,EAASG,qBAAuB,IAAIliB,GACpC+hB,EAAS/jB,iBAAmB,EACrB+jB,KC/HPS,GAA8B,WAC9B,SAASA,EAAaC,GAClBxjgB,KAAKyjgB,uBAAoBvogB,EACzB8E,KAAK6tT,QAAU,IAAIo0M,GAASjigB,MAC5BA,KAAKojgB,QAAU,IAAIN,GAAS9igB,MAC5BA,KAAKo5f,eAAYl+f,EACjB8E,KAAKo5f,UAAYoK,EACjBxjgB,KAAK0jgB,uBAAuB,IAAK,EAAG,IAAK,GAuQ7C,OArQAplgB,OAAOuJ,eAAe07f,EAAanogB,UAAW,eAC1CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUtK,GACX,GAAIA,EAAQ,GAAKA,EAAQ,MACrB,MAAM,IAAI24P,WAAW,sDAEzB11P,KAAK2oI,iBAAiB,cAAe5rI,IAEzC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe07f,EAAanogB,UAAW,cAC1CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,aAAc5rI,IAExC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe07f,EAAanogB,UAAW,aAC1CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,YAAa5rI,IAEvC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe07f,EAAanogB,UAAW,eAC1CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,cAAe5rI,IAEzC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe07f,EAAanogB,UAAW,gBAC1CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,eAAgB5rI,IAE1C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe07f,EAAanogB,UAAW,cAC1CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUtK,GACX,GAAIA,GAAS,MAAQA,EAAQ,KACzB,MAAM,IAAI24P,WAAW,yDAEzB11P,KAAK2oI,iBAAiB,aAAc5rI,IAExC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe07f,EAAanogB,UAAW,kBAC1CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,iBAAkB5rI,IAE5C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe07f,EAAanogB,UAAW,kBAC1CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,iBAAkB5rI,IAE5C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe07f,EAAanogB,UAAW,sBAC1CsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,uBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,qBAAsB5rI,IAEhD4K,YAAY,EACZC,cAAc,IAElB27f,EAAanogB,UAAUgS,iBAAmB,SAAU8tD,GAEhD,GADel7D,KAAKs5f,SAASp+b,GACf,CACV,IAAI5xD,EAAeu1e,GAAcmB,gBAAgBujB,EAAaxkB,iBAAkB7jb,GAChF,IAAKz9D,EAAkBuC,KAAKyjgB,oBAAsBzjgB,KAAKyjgB,kBAAkBzkB,eAAe37P,YAAY/5O,GAChG,OAAOtJ,KAAKyjgB,kBAAkBzkB,eAAet3e,IAAI4B,GAGzD,OAAOi6f,EAAahK,wBAAwBr+b,IAEhDqoc,EAAanogB,UAAUutI,iBAAmB,SAAUztE,EAAUn+D,GAI1D,IAHIU,EAAkBV,IAAoB,KAAVA,KAC5BA,EAAQwmgB,EAAahK,wBAAwBr+b,IAE7Cz9D,EAAkBuC,KAAKyjgB,mBACvBzjgB,KAAK2jgB,4BAA4Bzoc,EAAUn+D,OAE1C,CACD,IAAIuM,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKyjgB,kBAAkB1kB,iBAAkB7jb,GAC1F,GAAIl7D,KAAKyjgB,kBAAkBzkB,eAAe37P,YAAY/5O,IAClDtJ,KAAKyjgB,kBAAkBzkB,eAAet3e,IAAI4B,KAAkBvM,EAE5D,OAEJiD,KAAKyjgB,kBAAoBF,EAAaK,mBAAmB1iB,mBAAmBlhf,KAAKyjgB,kBAAmBvoc,EAAUn+D,KAGtHwmgB,EAAanogB,UAAUuogB,4BAA8B,SAAUzoc,EAAU20E,GACrE,IAAIg0X,EAAwB,IAAIthR,GAChCviP,KAAK8jgB,qBAAqB,cAAe5oc,EAAU20E,EAAWg0X,GAC9D7jgB,KAAK8jgB,qBAAqB,aAAc5oc,EAAU20E,EAAWg0X,GAC7D7jgB,KAAK8jgB,qBAAqB,YAAa5oc,EAAU20E,EAAWg0X,GAC5D7jgB,KAAK8jgB,qBAAqB,eAAgB5oc,EAAU20E,EAAWg0X,GAC/D7jgB,KAAK8jgB,qBAAqB,cAAe5oc,EAAU20E,EAAWg0X,GAC9D7jgB,KAAK8jgB,qBAAqB,aAAc5oc,EAAU20E,EAAWg0X,GAC7D7jgB,KAAK8jgB,qBAAqB,iBAAkB5oc,EAAU20E,EAAWg0X,GACjE7jgB,KAAK8jgB,qBAAqB,iBAAkB5oc,EAAU20E,EAAWg0X,GACjE7jgB,KAAK8jgB,qBAAqB,qBAAsB5oc,EAAU20E,EAAWg0X,GACrE7jgB,KAAKyjgB,kBAAoBF,EAAaK,mBAAmB5iB,gBAAgB6iB,EAAuBN,EAAaxkB,mBAGjHwkB,EAAanogB,UAAU0ogB,qBAAuB,SAAU5oc,EAAU4kb,EAAkBjwW,EAAWg0X,GAC3F,IAAIv6f,EACJA,EAAeu1e,GAAcmB,gBAAgBujB,EAAaxkB,iBAAkB7jb,GACxEA,IAAa4kb,GACb+jB,EAAsBz/f,IAAIkF,EAAcumI,IAGhD0zX,EAAahK,wBAA0B,SAAUr+b,GAC7C,IAAIn+D,OAAQ7B,EACZ,OAAQggE,GACJ,IAAK,cACDn+D,EAAQ,EACR,MACJ,IAAK,aACDA,EAAQ,IACR,MACJ,IAAK,YAGL,IAAK,eACDA,EAAQ,EACR,MACJ,IAAK,cACDA,EAAQ,IACR,MACJ,IAAK,aACDA,EAAQ,EACR,MACJ,IAAK,iBACDA,EAAQ,OACR,MACJ,IAAK,iBACDA,EAAQ,EACR,MACJ,IAAK,qBACDA,EAAQ,QAGhB,OAAOA,GAEXwmgB,EAAanogB,UAAUsogB,uBAAyB,SAAUl3f,EAAME,EAAKD,EAAOE,GACxE3M,KAAKk8Q,WAAa1vQ,EAClBxM,KAAKm8Q,UAAYzvQ,EACjB1M,KAAKo8Q,YAAc3vQ,EACnBzM,KAAKq8Q,aAAe1vQ,GAExB42f,EAAanogB,UAAU2ogB,uBAAyB,WAC5C/jgB,KAAK6tT,QAAQrhT,KAAK27N,UAAY,SAC9BnoO,KAAK6tT,QAAQrhT,KAAKgnF,UAAY,GAC9BxzF,KAAK6tT,QAAQphT,MAAM07N,UAAY,SAC/BnoO,KAAK6tT,QAAQphT,MAAM+mF,UAAY,GAC/BxzF,KAAK6tT,QAAQnhT,IAAIy7N,UAAY,SAC7BnoO,KAAK6tT,QAAQnhT,IAAI8mF,UAAY,GAC7BxzF,KAAK6tT,QAAQlhT,OAAOw7N,UAAY,SAChCnoO,KAAK6tT,QAAQlhT,OAAO6mF,UAAY,GAChCxzF,KAAK6tT,QAAQhqL,WAAWskG,UAAY,SACpCnoO,KAAK6tT,QAAQhqL,WAAWrwC,UAAY,GACpCxzF,KAAK6tT,QAAQ/pL,SAASqkG,UAAY,SAClCnoO,KAAK6tT,QAAQ/pL,SAAStwC,UAAY,IAEtC+va,EAAanogB,UAAUiX,QAAU,WACxB5U,EAAkBuC,KAAK6tT,UACxB7tT,KAAK6tT,QAAQx7S,UAEZ5U,EAAkBuC,KAAKojgB,UACxBpjgB,KAAKojgB,QAAQ/wf,UAEZ5U,EAAkBuC,KAAKyjgB,oBACxBF,EAAaK,mBAAmBr/f,OAAOvE,KAAKyjgB,mBAEhDzjgB,KAAKyjgB,uBAAoBvogB,EACzB8E,KAAK6tT,aAAU3yT,EACf8E,KAAKojgB,aAAUlogB,GAEnBqogB,EAAanogB,UAAU2+f,YAAc,WACjC,IAAIiK,EAAc,IAAIT,OAAarogB,GAYnC,OAXA8ogB,EAAY5G,WAAap9f,KAAKo9f,WAC9B4G,EAAYC,eAAiBjkgB,KAAKikgB,eAClCD,EAAY3zM,YAAcrwT,KAAKqwT,YAC/B2zM,EAAY9nP,WAAal8Q,KAAKk8Q,WAC9B8nP,EAAY5nP,YAAcp8Q,KAAKo8Q,YAC/B4nP,EAAY7nP,UAAYn8Q,KAAKm8Q,UAC7B6nP,EAAY3nP,aAAer8Q,KAAKq8Q,aAChC2nP,EAAYE,eAAiBlkgB,KAAKkkgB,eAClCF,EAAYG,mBAAqBnkgB,KAAKmkgB,mBACtCH,EAAYn2M,QAAUpwT,EAAkBuC,KAAK6tT,cAAW3yT,EAAY8E,KAAK6tT,QAAQksM,cACjFiK,EAAYZ,QAAU3lgB,EAAkBuC,KAAKojgB,cAAWlogB,EAAY8E,KAAKojgB,QAAQrJ,cAC1EiK,GAEXT,EAAanogB,UAAUk+f,SAAW,SAAUp+b,GACxC,IAAKz9D,EAAkBuC,KAAKyjgB,mBAAoB,CAC5C,IAAIn6f,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKyjgB,kBAAkB1kB,iBAAkB7jb,GAC1F,OAAOl7D,KAAKyjgB,kBAAkBzkB,eAAe37P,YAAY/5O,GAE7D,OAAO,GAEXi6f,EAAanogB,UAAUu+f,WAAa,SAAUp7d,GACrC9gC,EAAkB8gC,KACd9gC,EAAkB8gC,EAAOkle,qBAC1BzjgB,KAAKqwT,YAAc9xR,EAAO8xR,YAC1BrwT,KAAKk8Q,WAAa39O,EAAO29O,WACzBl8Q,KAAKm8Q,UAAY59O,EAAO49O,UACxBn8Q,KAAKo8Q,YAAc79O,EAAO69O,YAC1Bp8Q,KAAKq8Q,aAAe99O,EAAO89O,aAC3Br8Q,KAAKo9f,WAAa7+d,EAAO6+d,WACzBp9f,KAAKikgB,eAAiB1le,EAAO0le,eAC7BjkgB,KAAKkkgB,eAAiB3le,EAAO2le,eAC7BlkgB,KAAKmkgB,mBAAqB5le,EAAO4le,oBAEhC1mgB,EAAkB8gC,EAAOsvR,WAC1B7tT,KAAK6tT,QAAU,IAAIo0M,GAASjigB,MAC5BA,KAAK6tT,QAAQ8rM,WAAWp7d,EAAOsvR,UAE9BpwT,EAAkB8gC,EAAO6ke,WAC1BpjgB,KAAKojgB,QAAU,IAAIN,GAAS9igB,MAC5BA,KAAKojgB,QAAQzJ,WAAWp7d,EAAO6ke,YAI3CG,EAAa92c,MAAQ,WACjBzsD,KAAK4jgB,mBAAmBn3c,SAE5B82c,EAAaK,mBAAqB,IAAI7iB,GACtCwiB,EAAaxkB,iBAAmB,EACzBwkB,KC/QPa,GAA4B,WAC5B,SAASA,EAAW7jgB,GAChBP,KAAKqkgB,qBAAkBnpgB,EAIvB8E,KAAK6tT,QAAU,IAAIo0M,GAASjigB,MAI5BA,KAAKo5f,eAAYl+f,EAIjB8E,KAAKskgB,YAAc,EAInBtkgB,KAAKukgB,WAAa,EAClBvkgB,KAAKo5f,UAAY74f,EAmQrB,OAjQAjC,OAAOuJ,eAAeu8f,EAAWhpgB,UAAW,cACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,aAAc5rI,IAExC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu8f,EAAWhpgB,UAAW,mBACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,kBAAmB5rI,IAE7C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu8f,EAAWhpgB,UAAW,uBACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,wBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,sBAAuB5rI,IAEjD4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu8f,EAAWhpgB,UAAW,aACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,YAAa5rI,IAEvC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu8f,EAAWhpgB,UAAW,kBACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,iBAAkB5rI,IAE5C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu8f,EAAWhpgB,UAAW,sBACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,uBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,qBAAsB5rI,IAEhD4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu8f,EAAWhpgB,UAAW,yBACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,0BAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,wBAAyB5rI,IAEnD4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu8f,EAAWhpgB,UAAW,YACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,aAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,WAAY5rI,IAEtC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu8f,EAAWhpgB,UAAW,UACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,WAEjC/F,IAAK,SAAUtK,GACG,IAAVA,GAAoC,YAApBiD,KAAKwkgB,YAAgD,YAApBxkgB,KAAKwkgB,WAG7B,SAApBxkgB,KAAKwkgB,aACVzngB,EAAQ,GAHRA,EAAQ,EAKZiD,KAAK2oI,iBAAiB,SAAU5rI,IAEpC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu8f,EAAWhpgB,UAAW,cACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUtK,GAEPiD,KAAK+V,OADK,YAAVhZ,GAAiC,YAAVA,EACT,EAGA,EAElBiD,KAAK2oI,iBAAiB,aAAc5rI,IAExC4K,YAAY,EACZC,cAAc,IAElBw8f,EAAWhpgB,UAAUgS,iBAAmB,SAAU8tD,GAE9C,GADel7D,KAAKs5f,SAASp+b,GACf,CACV,IAAI5xD,EAAeu1e,GAAcmB,gBAAgBokB,EAAWrlB,iBAAkB7jb,GAC9E,IAAKz9D,EAAkBuC,KAAKqkgB,kBAAoBrkgB,KAAKqkgB,gBAAgBrlB,eAAe37P,YAAY/5O,GAC5F,OAAOtJ,KAAKqkgB,gBAAgBrlB,eAAet3e,IAAI4B,GAGvD,OAAO86f,EAAW7K,wBAAwBr+b,IAE9Ckpc,EAAWhpgB,UAAUutI,iBAAmB,SAAUztE,EAAUn+D,GAIxD,IAHIU,EAAkBV,IAAoB,KAAVA,KAC5BA,EAAQqngB,EAAW7K,wBAAwBr+b,IAE3Cz9D,EAAkBuC,KAAKqkgB,iBACvBrkgB,KAAKykgB,0BAA0Bvpc,EAAUn+D,OAExC,CACD,IAAIuM,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKqkgB,gBAAgBtlB,iBAAkB7jb,GACxF,GAAIl7D,KAAKqkgB,gBAAgBrlB,eAAe37P,YAAY/5O,IAChDtJ,KAAKqkgB,gBAAgBrlB,eAAet3e,IAAI4B,KAAkBvM,EAE1D,OAEJiD,KAAKqkgB,gBAAkBD,EAAWM,iBAAiBxjB,mBAAmBlhf,KAAKqkgB,gBAAiBnpc,EAAUn+D,KAG9GqngB,EAAWhpgB,UAAUqpgB,0BAA4B,SAAUvpc,EAAU20E,GACjE,IAAI80X,EAAsB,IAAIpiR,GAC9BviP,KAAK4kgB,mBAAmB,wBAAyB1pc,EAAU20E,EAAW80X,GACtE3kgB,KAAK4kgB,mBAAmB,WAAY1pc,EAAU20E,EAAW80X,GACzD3kgB,KAAK4kgB,mBAAmB,SAAU1pc,EAAU20E,EAAW80X,GACvD3kgB,KAAK4kgB,mBAAmB,aAAc1pc,EAAU20E,EAAW80X,GAC3D3kgB,KAAK4kgB,mBAAmB,aAAc1pc,EAAU20E,EAAW80X,GAC3D3kgB,KAAK4kgB,mBAAmB,kBAAmB1pc,EAAU20E,EAAW80X,GAChE3kgB,KAAK4kgB,mBAAmB,sBAAuB1pc,EAAU20E,EAAW80X,GACpE3kgB,KAAK4kgB,mBAAmB,YAAa1pc,EAAU20E,EAAW80X,GAC1D3kgB,KAAK4kgB,mBAAmB,iBAAkB1pc,EAAU20E,EAAW80X,GAC/D3kgB,KAAK4kgB,mBAAmB,qBAAsB1pc,EAAU20E,EAAW80X,GACnE3kgB,KAAK4kgB,mBAAmB,sBAAuB1pc,EAAU20E,EAAW80X,GACpE3kgB,KAAKqkgB,gBAAkBD,EAAWM,iBAAiB1jB,gBAAgB2jB,EAAqBP,EAAWrlB,mBAGvGqlB,EAAWhpgB,UAAUwpgB,mBAAqB,SAAU1pc,EAAU4kb,EAAkBjwW,EAAW80X,GACvF,IAAIr7f,EACJA,EAAeu1e,GAAcmB,gBAAgBokB,EAAWrlB,iBAAkB7jb,GACtEA,IAAa4kb,GACb6kB,EAAoBvggB,IAAIkF,EAAcumI,IAG9Cu0X,EAAW7K,wBAA0B,SAAUr+b,GAC3C,IAAIn+D,OAAQ7B,EACZ,OAAQggE,GACJ,IAAK,wBACDn+D,GAAQ,EACR,MACJ,IAAK,WACDA,GAAQ,EACR,MACJ,IAAK,SACDA,EAAQ,EACR,MACJ,IAAK,aACDA,EAAQ,OACR,MACJ,IAAK,aAGL,IAAK,kBACDA,EAAQ,EACR,MACJ,IAAK,sBACDA,EAAQ,QACR,MACJ,IAAK,YAGL,IAAK,iBACDA,EAAQ,EACR,MACJ,IAAK,qBACDA,EAAQ,QAGhB,OAAOA,GAEXqngB,EAAWhpgB,UAAU2+f,YAAc,WAC/B,IAAIx7d,EAAS,IAAI6le,EAWjB,OAVA7le,EAAOsme,sBAAwB7kgB,KAAK6kgB,sBACpCtme,EAAOime,WAAaxkgB,KAAKwkgB,WACzBjme,EAAOxoB,OAAS/V,KAAK+V,OACrBwoB,EAAO7R,SAAW1sB,KAAK0sB,SACvB6R,EAAOume,WAAa9kgB,KAAK8kgB,WACzBvme,EAAOwme,gBAAkB/kgB,KAAK+kgB,gBAC9Bxme,EAAOyme,oBAAsBhlgB,KAAKglgB,oBAClCzme,EAAO0me,UAAYjlgB,KAAKilgB,UACxB1me,EAAO2me,eAAiBllgB,KAAKklgB,eAC7B3me,EAAO4me,mBAAqBnlgB,KAAKmlgB,mBAC1B5me,GAEX6le,EAAWhpgB,UAAUk+f,SAAW,SAAUp+b,GACtC,IAAKz9D,EAAkBuC,KAAKqkgB,iBAAkB,CAC1C,IAAI/6f,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKqkgB,gBAAgBtlB,iBAAkB7jb,GACxF,OAAOl7D,KAAKqkgB,gBAAgBrlB,eAAe37P,YAAY/5O,GAE3D,OAAO,GAEX86f,EAAWhpgB,UAAUu+f,WAAa,SAAUp7d,GACnC9gC,EAAkB8gC,KACd9gC,EAAkB8gC,EAAO8le,mBAC1BrkgB,KAAK6kgB,sBAAwBtme,EAAOsme,sBACpC7kgB,KAAK0sB,SAAW6R,EAAO7R,SACvB1sB,KAAKwkgB,WAAajme,EAAOime,WACzBxkgB,KAAK+V,OAASwoB,EAAOxoB,OACrB/V,KAAK8kgB,WAAavme,EAAOume,WACzB9kgB,KAAK+kgB,gBAAkBxme,EAAOwme,gBAC9B/kgB,KAAKglgB,oBAAsBzme,EAAOyme,oBAClChlgB,KAAKilgB,UAAY1me,EAAO0me,UACxBjlgB,KAAKklgB,eAAiB3me,EAAO2me,eAC7BllgB,KAAKmlgB,mBAAqB5me,EAAO4me,oBAEhC1ngB,EAAkB8gC,EAAOsvR,WAC1B7tT,KAAK6tT,QAAU,IAAIo0M,GAASjigB,MAC5BA,KAAK6tT,QAAQurM,UAAY76d,EACzBv+B,KAAK6tT,QAAQ8rM,WAAWp7d,EAAOsvR,YAI3Cu2M,EAAWhpgB,UAAUiX,QAAU,WACtB5U,EAAkBuC,KAAK6tT,UACxB7tT,KAAK6tT,QAAQx7S,UAEZ5U,EAAkBuC,KAAKqkgB,kBACxBD,EAAWM,iBAAiBnggB,OAAOvE,KAAKqkgB,iBAE5CrkgB,KAAKskgB,iBAAcppgB,EACnB8E,KAAKukgB,gBAAarpgB,EAClB8E,KAAK6tT,aAAU3yT,EACf8E,KAAKqkgB,qBAAkBnpgB,GAE3BkpgB,EAAW33c,MAAQ,WACfzsD,KAAK0kgB,iBAAiBj4c,SAE1B23c,EAAWM,iBAAmB,IAAI3jB,GAClCqjB,EAAWrlB,iBAAmB,EACvBqlB,KCrRPgB,GAA6B,WAC7B,SAASA,EAAY7kgB,GACjBP,KAAKqlgB,sBAAmBnqgB,EACxB8E,KAAK6tT,QAAU,IAAIo0M,GAASjigB,MAC5BA,KAAKojgB,QAAU,IAAIN,GAAS9igB,MAC5BA,KAAKo5f,UAAY74f,EACjBP,KAAK6tT,QAAU,IAAIo0M,GAASjigB,MAC5BA,KAAKojgB,QAAU,IAAIN,GAAS9igB,MAiQhC,OA/PA1B,OAAOuJ,eAAeu9f,EAAYhqgB,UAAW,cACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,aAAc5rI,IAExC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu9f,EAAYhqgB,UAAW,eACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,cAAe5rI,IAEzC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu9f,EAAYhqgB,UAAW,aACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,YAAa5rI,IAEvC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu9f,EAAYhqgB,UAAW,gBACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,eAAgB5rI,IAE1C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu9f,EAAYhqgB,UAAW,aACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,YAAa5rI,IAEvC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu9f,EAAYhqgB,UAAW,cACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,aAAc5rI,IAExC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu9f,EAAYhqgB,UAAW,WACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,YAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,UAAW5rI,IAErC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu9f,EAAYhqgB,UAAW,kBACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,iBAAkB5rI,IAE5C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu9f,EAAYhqgB,UAAW,qBACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,sBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,oBAAqB5rI,IAE/C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu9f,EAAYhqgB,UAAW,sBACzCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,uBAEjC/F,IAAK,SAAUtK,GACXiD,KAAK2oI,iBAAiB,qBAAsB5rI,IAEhD4K,YAAY,EACZC,cAAc,IAElBw9f,EAAYhqgB,UAAUgS,iBAAmB,SAAU8tD,GAE/C,GADel7D,KAAKs5f,SAASp+b,GACf,CACV,IAAI5xD,EAAeu1e,GAAcmB,gBAAgBolB,EAAYrmB,iBAAkB7jb,GAC/E,IAAKz9D,EAAkBuC,KAAKqlgB,mBAAqBrlgB,KAAKqlgB,iBAAiBrmB,eAAe37P,YAAY/5O,GAC9F,OAAOtJ,KAAKqlgB,iBAAiBrmB,eAAet3e,IAAI4B,GAGxD,OAAO87f,EAAY7L,wBAAwBr+b,IAE/Ckqc,EAAYhqgB,UAAUutI,iBAAmB,SAAUztE,EAAUn+D,GAIzD,IAHIU,EAAkBV,IAAoB,KAAVA,KAC5BA,EAAQqogB,EAAY7L,wBAAwBr+b,IAE5Cz9D,EAAkBuC,KAAKqlgB,kBACvBrlgB,KAAKslgB,2BAA2Bpqc,EAAUn+D,OAEzC,CACD,IAAIuM,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKqlgB,iBAAiBtmB,iBAAkB7jb,GACzF,GAAIl7D,KAAKqlgB,iBAAiBrmB,eAAe37P,YAAY/5O,IACjDtJ,KAAKqlgB,iBAAiBrmB,eAAet3e,IAAI4B,KAAkBvM,EAE3D,OAEJiD,KAAKqlgB,iBAAmBD,EAAYG,kBAAkBrkB,mBAAmBlhf,KAAKqlgB,iBAAkBnqc,EAAUn+D,KAGlHqogB,EAAYhqgB,UAAUkqgB,2BAA6B,SAAUpqc,EAAU20E,GACnE,IAAI21X,EAAuB,IAAIjjR,GAC/BviP,KAAKylgB,oBAAoB,aAAcvqc,EAAU20E,EAAW21X,GAC5DxlgB,KAAKylgB,oBAAoB,YAAavqc,EAAU20E,EAAW21X,GAC3DxlgB,KAAKylgB,oBAAoB,eAAgBvqc,EAAU20E,EAAW21X,GAC9DxlgB,KAAKylgB,oBAAoB,cAAevqc,EAAU20E,EAAW21X,GAC7DxlgB,KAAKylgB,oBAAoB,YAAavqc,EAAU20E,EAAW21X,GAC3DxlgB,KAAKylgB,oBAAoB,aAAcvqc,EAAU20E,EAAW21X,GAC5DxlgB,KAAKylgB,oBAAoB,UAAWvqc,EAAU20E,EAAW21X,GACzDxlgB,KAAKylgB,oBAAoB,iBAAkBvqc,EAAU20E,EAAW21X,GAChExlgB,KAAKylgB,oBAAoB,oBAAqBvqc,EAAU20E,EAAW21X,GACnExlgB,KAAKylgB,oBAAoB,qBAAsBvqc,EAAU20E,EAAW21X,GACpExlgB,KAAKqlgB,iBAAmBD,EAAYG,kBAAkBvkB,gBAAgBwkB,EAAsBJ,EAAYrmB,mBAG5GqmB,EAAYhqgB,UAAUqqgB,oBAAsB,SAAUvqc,EAAU4kb,EAAkBjwW,EAAW21X,GACzF,IAAIl8f,EACJA,EAAeu1e,GAAcmB,gBAAgBolB,EAAYrmB,iBAAkB7jb,GACvEA,IAAa4kb,GACb0lB,EAAqBphgB,IAAIkF,EAAcumI,IAG/Cu1X,EAAY7L,wBAA0B,SAAUr+b,GAC5C,IAAIn+D,OAAQ7B,EACZ,OAAQggE,GACJ,IAAK,aAGL,IAAK,YAGL,IAAK,eAGL,IAAK,cACDn+D,OAAQ7B,EACR,MACJ,IAAK,YACD6B,EAAQ,EACR,MACJ,IAAK,aAGL,IAAK,UACDA,EAAQ,EACR,MACJ,IAAK,iBACDA,EAAQ,EACR,MACJ,IAAK,oBACDA,EAAQ,MACR,MACJ,IAAK,qBACDA,EAAQ,QAGhB,OAAOA,GAEXqogB,EAAYhqgB,UAAUsqgB,gBAAkB,WACpC,QAASjogB,EAAkBuC,KAAKk8Q,aACxBz+Q,EAAkBuC,KAAKo8Q,cACvB3+Q,EAAkBuC,KAAKq8Q,eACvB5+Q,EAAkBuC,KAAKm8Q,aAEnCipP,EAAYhqgB,UAAUiX,QAAU,WACvB5U,EAAkBuC,KAAK6tT,UACxB7tT,KAAK6tT,QAAQx7S,UAEZ5U,EAAkBuC,KAAKojgB,UACxBpjgB,KAAKojgB,QAAQ/wf,UAEZ5U,EAAkBuC,KAAKqlgB,mBACxBD,EAAYG,kBAAkBhhgB,OAAOvE,KAAKqlgB,kBAE9CrlgB,KAAKqlgB,sBAAmBnqgB,EACxB8E,KAAK6tT,aAAU3yT,EACf8E,KAAKojgB,aAAUlogB,GAEnBkqgB,EAAYhqgB,UAAU2+f,YAAc,WAChC,IAAIx7d,EAAS,IAAI6me,OAAYlqgB,GAW7B,OAVAqjC,EAAO4xB,kBAAoBnwD,KAAKmwD,kBAChC5xB,EAAO29O,WAAal8Q,KAAKk8Q,WACzB39O,EAAO69O,YAAcp8Q,KAAKo8Q,YAC1B79O,EAAO49O,UAAYn8Q,KAAKm8Q,UACxB59O,EAAO89O,aAAer8Q,KAAKq8Q,aAC3B99O,EAAO2le,eAAiBlkgB,KAAKkkgB,eAC7B3le,EAAO4le,mBAAqBnkgB,KAAKmkgB,mBACjC5le,EAAO2vR,UAAYluT,KAAKkuT,UACxB3vR,EAAOsvR,QAAUpwT,EAAkBuC,KAAK6tT,cAAW3yT,EAAY8E,KAAK6tT,QAAQksM,cAC5Ex7d,EAAO6ke,QAAU3lgB,EAAkBuC,KAAKojgB,cAAWlogB,EAAY8E,KAAKojgB,QAAQrJ,cACrEx7d,GAEX6me,EAAYhqgB,UAAUk+f,SAAW,SAAUp+b,GACvC,IAAKz9D,EAAkBuC,KAAKqlgB,kBAAmB,CAC3C,IAAI/7f,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKqlgB,iBAAiBtmB,iBAAkB7jb,GACzF,OAAOl7D,KAAKqlgB,iBAAiBrmB,eAAe37P,YAAY/5O,GAE5D,OAAO,GAEX87f,EAAYhqgB,UAAUu+f,WAAa,SAAUp7d,GACpC9gC,EAAkB8gC,KACd9gC,EAAkB8gC,EAAO8me,oBAC1BrlgB,KAAKkuT,UAAY3vR,EAAO2vR,UACxBluT,KAAKk8Q,WAAa39O,EAAO29O,WACzBl8Q,KAAKm8Q,UAAY59O,EAAO49O,UACxBn8Q,KAAKo8Q,YAAc79O,EAAO69O,YAC1Bp8Q,KAAKq8Q,aAAe99O,EAAO89O,aAC3Br8Q,KAAKkkgB,eAAiB3le,EAAO2le,eAC7BlkgB,KAAK8yT,WAAav0R,EAAOu0R,WACzB9yT,KAAK4wT,QAAUryR,EAAOqyR,QACtB5wT,KAAKmkgB,mBAAqB5le,EAAO4le,mBACjCnkgB,KAAKmwD,kBAAoB5xB,EAAO4xB,mBAE/B1yD,EAAkB8gC,EAAO6ke,WAC1BpjgB,KAAKojgB,QAAU,IAAIN,GAAS9igB,MAC5BA,KAAKojgB,QAAQzJ,WAAWp7d,EAAO6ke,UAE9B3lgB,EAAkB8gC,EAAOsvR,WAC1B7tT,KAAK6tT,QAAU,IAAIo0M,GAASjigB,MAC5BA,KAAK6tT,QAAQ8rM,WAAWp7d,EAAOsvR,YAI3Cu3M,EAAY34c,MAAQ,WAChBzsD,KAAKulgB,kBAAkB94c,SAE3B24c,EAAYG,kBAAoB,IAAIxkB,GACpCqkB,EAAYrmB,iBAAmB,EACxBqmB,KCjRP30a,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAqBxC/6D,GAAsB,WACtB,SAASA,EAAKhpB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,EAsBlB,OApBAzX,OAAOuJ,eAAekuB,EAAK36B,UAAW,SAIlCsM,IAAK,WACD,OAAO1H,KAAK+M,EAAI/M,KAAKgW,OAEzBrO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekuB,EAAK36B,UAAW,UAIlCsM,IAAK,WACD,OAAO1H,KAAKgN,EAAIhN,KAAK+V,QAEzBpO,YAAY,EACZC,cAAc,IAEXmuB,KAMP8tM,GAAwB,WACxB,SAASA,EAAOq4C,EAAYC,EAAWC,EAAaC,GAChDr8Q,KAAKwM,KAAO0vQ,EACZl8Q,KAAK0M,IAAMyvQ,EACXn8Q,KAAKyM,MAAQ2vQ,EACbp8Q,KAAK2M,OAAS0vQ,EAiBlB,OAZAx4C,EAAOzoO,UAAUiE,MAAQ,WACrB,OAAO,IAAIwkO,EAAO7jO,KAAKwM,KAAMxM,KAAK0M,IAAK1M,KAAKyM,MAAOzM,KAAK2M,SAK5Dk3N,EAAOzoO,UAAUiX,QAAU,WACvBrS,KAAKwM,UAAOtR,EACZ8E,KAAKyM,WAAQvR,EACb8E,KAAK0M,SAAMxR,EACX8E,KAAK2M,YAASzR,GAEX2oO,KAMP8hS,GAAwB,WACxB,SAASA,IAIL3lgB,KAAKq3f,gBAILr3f,KAAK+M,EAAI,EAIT/M,KAAKgN,EAAI,EAIThN,KAAKgW,MAAQ,EAIbhW,KAAK+V,OAAS,EAId/V,KAAK8R,MAAQ,EAmVjB,OAjVAxT,OAAOuJ,eAAe89f,EAAOvqgB,UAAW,gBAIpCsM,IAAK,WACD,OAAI1H,gBAAgB82f,IAAc92f,KAAKutK,KAC5BvtK,KAAKutK,KAAKq4V,YAAYrngB,QAAQyB,MAEhCA,KAAKs3f,iBAAmBt3f,KAAKs3f,gBAAgBD,aAC3Cr3f,KAAKs3f,gBAAgBD,aAAa94f,QAAQyB,OAE7C,GAEZ2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe89f,EAAOvqgB,UAAW,cAIpCsM,IAAK,WACD,OAAO1H,KAAKq3f,aAAa76f,OAAS,EAAIwD,KAAKq3f,aAAa,QAAKn8f,GAEjEyM,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe89f,EAAOvqgB,UAAW,aAIpCsM,IAAK,WACD,GAAI1H,KAAKq3f,aACL,OAAOr3f,KAAKq3f,aAAa76f,OAAS,EAC9BwD,KAAKq3f,aAAar3f,KAAKq3f,aAAa76f,OAAS,QAAKtB,GAI9DyM,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe89f,EAAOvqgB,UAAW,kBAIpCsM,IAAK,WACD,IAAIm+f,EAAS7lgB,KACT8R,EAAQ9R,KAAK8lgB,aAOjB,OALID,EADAA,aAAkB/O,GACThlf,EAAQ,EAAI+zf,EAAOt4V,KAAKq4V,YAAY9zf,EAAQ,QAAK5W,EAGjD4W,EAAQ,EAAI+zf,EAAOvO,gBAAgBD,aAAavlf,EAAQ,QAAK5W,GAI9EyM,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe89f,EAAOvqgB,UAAW,cAIpCsM,IAAK,WACD,IAAIm+f,EAAS7lgB,KACT8R,EAAQ9R,KAAK8lgB,aACjB,IAAe,IAAXh0f,EAWJ,OAPI+zf,EADAA,aAAkB/O,GACThlf,EAAQ+zf,EAAOt4V,KAAKq4V,YAAYppgB,OAAS,EAC9CqpgB,EAAOt4V,KAAKq4V,YAAY9zf,EAAQ,QAAK5W,EAGhC4W,EAAQ+zf,EAAOvO,gBAAgBD,aAAa76f,OAAS,EAC1DqpgB,EAAOvO,gBAAgBD,aAAavlf,EAAQ,QAAK5W,GAI7DyM,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe89f,EAAOvqgB,UAAW,0BAIpCsM,IAAK,WACD,IAAIm+f,EAAS7lgB,KACT8R,EAAQ9R,KAAK8lgB,aACjB,KAAIh0f,EAAQ,GAAZ,CAGA,GAAI+zf,aAAkB/O,GAClB,GAAIhlf,EAAQ,EACR+zf,EAASA,EAAOt4V,KAAKq4V,YAAY9zf,EAAQ,OAExC,CACD,IAAIy7J,EAAOs4V,EAAOt4V,KAAKw4V,aACvBF,EAASt4V,GAAQA,EAAKq4V,YAAYppgB,OAAS,EAAI+wK,EAAKq4V,YAAYr4V,EAAKq4V,YAAYppgB,OAAS,QAAKtB,OAInG,GAAI4W,EAAQ,EACR+zf,EAASA,EAAOvO,gBAAgBD,aAAavlf,EAAQ,OAEpD,CACD,IAAIk0f,OAAoB9qgB,EASxB,IARI2qgB,EAAOvO,2BAA2B2O,GAClCD,EAAoBH,EAAOvO,gBAAgB4O,yBAEpCL,EAAOvO,2BAA2B6O,IACtCN,EAAOvO,2BAA2B8O,KAErCJ,EAAoBH,EAAOvO,gBAAgB+O,wBAExCL,GAA+D,IAA1CA,EAAkB3O,aAAa76f,SACvDwpgB,EAAoBA,EAAkBK,wBAClC5ogB,EAAkBuogB,MAI1BH,EAASG,GAAqBA,EAAkBpogB,cAAgBiogB,EAAOvO,gBAAgB15f,YACnFoogB,EAAkBtsX,eAAYx+I,EAG1C,OAAO2qgB,IAEXl+f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe89f,EAAOvqgB,UAAW,sBAIpCsM,IAAK,WACD,IAAIm+f,EAAS7lgB,KACT8R,EAAQ9R,KAAK8lgB,aACjB,KAAIh0f,EAAQ,GAAZ,CAGA,GAAI+zf,aAAkB/O,GAClB,GAAIhlf,EAAQ+zf,EAAOt4V,KAAKq4V,YAAYppgB,OAAS,EACzCqpgB,EAASA,EAAOt4V,KAAKq4V,YAAY9zf,EAAQ,OAExC,CACD,IAAIy7J,EAAOs4V,EAAOt4V,KAAKmuJ,SACvBmqM,EAASt4V,GAAQA,EAAKq4V,YAAYppgB,OAAS,EAAI+wK,EAAKq4V,YAAY,QAAK1qgB,OAIzE,GAAI4W,EAAQ+zf,EAAOvO,gBAAgBD,aAAa76f,OAAS,EACrDqpgB,EAASA,EAAOvO,gBAAgBD,aAAavlf,EAAQ,OAEpD,CACD,IAAIw0f,OAAgBprgB,EASpB,IARI2qgB,EAAOvO,2BAA2B2O,GAClCK,EAAgBT,EAAOvO,gBAAgBiP,qBAEhCV,EAAOvO,2BAA2B6O,IACtCN,EAAOvO,2BAA2B8O,KAErCE,EAAgBT,EAAOvO,gBAAgBkP,oBAEpCF,GAAuD,IAAtCA,EAAcjP,aAAa76f,UAAkB8pgB,aAAyBL,MAC1FK,EAAgBA,EAAcE,oBAC1B/ogB,EAAkB6ogB,MAI1BT,EAASS,GAAiBA,EAAc1ogB,cAAgBiogB,EAAOvO,gBAAgB15f,YAC3E0ogB,EAActpf,gBAAa9hB,EAGvC,OAAO2qgB,IAEXl+f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe89f,EAAOvqgB,UAAW,uBAIpCsM,IAAK,WAED,GADa1H,gBACSimgB,GAClB,OAFSjmgB,KAEKkmgB,yBAGd,IAAI1zY,EALKxyH,KAKaqmgB,uBACtB,OANSrmgB,gBAMa82f,IAActkY,aAAoBskY,IAN/C92f,KAMoEozC,OAAOo/E,GACzEA,EAEFA,aAAoBi0Y,IATpBzmgB,KAS0C8R,QAAU0gH,EAAS1gH,OAT7D9R,KAS6EozC,OAAOo/E,GAClFA,OADN,GAMb7qH,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe89f,EAAOvqgB,UAAW,mBAIpCsM,IAAK,WAED,GADa1H,gBACSimgB,GAClB,OAFSjmgB,KAEKumgB,qBAGd,IAAIj7d,EALKtrC,KAKSwmgB,mBAClB,OANSxmgB,gBAMa82f,IAAcxrd,aAAgBwrd,IAN3C92f,KAMgEozC,OAAO9H,GACrEA,EAEFA,aAAgBm7d,IAThBzmgB,KASsC8R,QAAUw5B,EAAKx5B,OATrD9R,KASqEozC,OAAO9H,GAC1EA,OADN,GAMb3jC,YAAY,EACZC,cAAc,IAKlB+9f,EAAOvqgB,UAAUsrgB,wBAA0B,WAGvC,IAFA,IAAIC,KACAd,EAAS7lgB,KAAK4mgB,oBACXf,GACHc,EAAQ1rgB,QAAQ4qgB,GAChBA,EAASA,EAAOe,oBAEpB,OAAOD,GAKXhB,EAAOvqgB,UAAUyrgB,gBAAkB,WAG/B,IAFA,IAAIF,EAAU3mgB,KAAK0mgB,0BACfb,EAAS7lgB,KACN6lgB,GACHc,EAAQnigB,KAAKqhgB,GACbA,EAASA,EAAOiB,gBAEpB,OAAOH,GAKXhB,EAAOvqgB,UAAU2rgB,cAAgB,SAAUvY,GACvC,IAAI50S,EAAO55M,KACP2mgB,EAAU3mgB,KAAK6mgB,kBACnB,GAAIF,EAAQnqgB,OAAS,EAEjB,IADAo9M,EAAO+sT,EAAQzib,QACRyib,EAAQnqgB,OAAS,GAAG,CACvB,IAAIwqgB,EAAcL,EAAQzib,QAC1B01H,EAAKt6L,QAAQ0nf,EAAaxY,GAMlC,OAHI50S,aAAgBqtT,IAChBrtT,EAAKstT,YAAY1Y,GAEd50S,GAEX+rT,EAAOvqgB,UAAUkkB,QAAU,SAAUumf,EAAQrX,GACzC,GAAIqX,EAAOxO,aAAa76f,OAAS,EAAG,CAChC,IAAIk9I,EAAY15I,KAAK05I,UACrB,GAAIA,aAAqButX,GACrBvtX,EAAUqtX,cAAcvY,OAEvB,CACD,IAAIxxe,EAAa6of,EAAO7of,aAClB6of,aAAkBoB,KAAgBvtX,aAAqBisX,GAAU3of,aAAsB2of,GACzFjsX,EAAU5nI,QAAUkL,EAAWlL,OAC/B4nI,EAAUp6H,QAAQumf,EAAOxO,aAAanza,QAASsqa,GAGvDxuf,KAAKmngB,WAAWtB,EAAOxO,cACvBwO,EAAOxO,gBAEXwO,EAAOuB,gBAAgB5Y,IAK3BmX,EAAOvqgB,UAAU+rgB,WAAa,SAAU9P,GACpC,KAAOA,EAAa76f,OAAS,GAAG,CAC5B,IAAIqpgB,EAASxO,EAAanza,QAC1B,GAAI2hb,aAAkBwB,IAAcrngB,gBAAgBk3f,GAChD2O,EAAO5O,UAAYj3f,KACnBA,KAAK+V,QAAU8vf,EAAO9vf,YAErB,GAAI8vf,aAAkBF,EAAQ,CAC/B,IAAIjsX,EAAY15I,KAAK05I,UACrBmsX,EAAOvO,gBAAkBt3f,KACzB6lgB,EAAO74f,EAAI0sI,aAAqBisX,EAASjsX,EAAU1sI,EAAI0sI,EAAU3jI,OAAS/V,KAAKgN,EAC/EhN,KAAK+V,QAAU8vf,EAAO9vf,OAE1B/V,KAAKq3f,aAAa7yf,KAAKqhgB,KAM/BF,EAAOvqgB,UAAUkK,YAAc,SAAUwM,GACjCA,GAAS,GAAKA,EAAQ9R,KAAKq3f,aAAa76f,QACxCwD,KAAKq3f,aAAa1ue,OAAO7W,EAAO,IAMxC6zf,EAAOvqgB,UAAUiX,QAAU,WACvB,GAAIrS,KAAKq3f,aACL,KAAOr3f,KAAKq3f,aAAa76f,OAAS,GAAG,CACjC,IAAI6D,EAAQL,KAAKq3f,aAAaxxV,OAC1BxlK,aAAiBgngB,IAAchngB,aAAiBslgB,IAChDtlgB,EAAMgS,UAIlBrS,KAAKq3f,kBAAen8f,EAChB8E,KAAKs3f,iBACLt3f,KAAKs3f,gBAAgBhyf,YAAYtF,KAAK8lgB,cAE1C9lgB,KAAKs3f,qBAAkBp8f,EAIvB8E,KAAKg/B,YAAS9jC,EACd8E,KAAK+M,OAAI7R,EACT8E,KAAKgN,OAAI9R,EACT8E,KAAKgW,WAAQ9a,EACb8E,KAAK+V,YAAS7a,EACd8E,KAAK8R,WAAQ5W,GAEVyqgB,KAMP2B,GAAgC,SAAUh2a,GAE1C,SAASg2a,IACL,IAAIvngB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAKhE,OADAD,EAAMwngB,qBAAkBrsgB,EACjB6E,EAqEX,OA5EA0wF,GAAU62a,EAAgBh2a,GAS1BhzF,OAAOuJ,eAAey/f,EAAelsgB,UAAW,iBAI5CsM,IAAK,WAED,OADgB1H,gBACS82f,GADT92f,KAEKungB,gBAFLvngB,KAIGutK,KAJHvtK,KAKKutK,KAAKq4V,YAAY,GAAG7O,mBADpC,GAQT1vf,IAAK,SAAUtK,GACPiD,gBAAgB82f,KAChB92f,KAAKungB,gBAAkBxqgB,IAG/B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAey/f,EAAelsgB,UAAW,gBAI5CsM,IAAK,WACD,IACIoK,EAAQ,EAOZ,OARgB9R,gBAES82f,GACrBhlf,EAHY9R,KAGM8R,MAHN9R,KAKGutK,OACfz7J,EANY9R,KAMMutK,KAAKq4V,YAAY,GAAG9zf,OAEnCA,GAEXnK,YAAY,EACZC,cAAc,IAKlB0/f,EAAelsgB,UAAUosgB,qBAAuB,SAAUC,GActD,GAVIA,EAFOzngB,gBACS82f,GADT92f,KAEkB8R,MAAQ,IAAM21f,GAGU,IAL1CzngB,KAKE0ngB,iBAAiBnpgB,QAAQ,UACV,KAAYkpgB,EAGZ,KAAYA,GAGnChqgB,EAZMuC,KAYiButK,MAAO,CAG/B,OAFSvtK,KAAKutK,KAAKihV,OACIzmQ,MAAMxpP,QAAQyB,KAAKutK,MACvB,IAAMk6V,EAE7B,OAAOA,GAEJH,GACT3B,IAKE7O,GAA4B,SAAUxla,GAKtC,SAASwla,IACL,OAAOxla,EAAOhwF,KAAKtB,OAASA,KAuGhC,OA5GAywF,GAAUqma,EAAYxla,GAUtBwla,EAAW17f,UAAUg4C,OAAS,SAAUyyd,GACpC,OAAOA,aAAkB/O,GAAc+O,EAAO9O,gBAAkB/2f,KAAK+2f,eAKzED,EAAW17f,UAAUosgB,qBAAuB,SAAUC,GAIlD,GADAA,EADWzngB,KACc8R,MAAQ,IAAM21f,GAClChqgB,EAFMuC,KAEiButK,MAAO,CAG/B,OAFSvtK,KAAKutK,KAAKihV,OACIzmQ,MAAMxpP,QAAQyB,KAAKutK,MACvB,IAAMk6V,EAE7B,OAAOA,GAKX3Q,EAAW17f,UAAUusgB,mBAAqB,SAAUC,GAChD,IAAK,IAAI1rgB,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAC1C,GAAI8D,KAAKq3f,aAAan7f,GAAG8Q,GAAK46f,EAAW56f,GACjChN,KAAKq3f,aAAan7f,GAAG8Q,EAAIhN,KAAKq3f,aAAan7f,GAAG6Z,QAAW6xf,EAAW56f,EACxE,OAAOhN,KAAKq3f,aAAan7f,GAAGyrgB,mBAAmBC,GAGvD,IAAIC,OAAkB3sgB,EAStB,OARI8E,KAAKq3f,aAAa76f,OAAS,IAEvBqrgB,EADA7ngB,KAAKq3f,aAAa,GAAGrqf,GAAK46f,EAAW56f,EACnBhN,KAAKq3f,aAAar3f,KAAKq3f,aAAa76f,OAAS,GAAGmrgB,mBAAmBC,GAGnE5ngB,KAAKq3f,aAAa,GAAGsQ,mBAAmBC,IAG3DC,GAKX/Q,EAAW17f,UAAUgsgB,gBAAkB,SAAU5Y,GAChCxuf,KAAK+V,OAClB,IAAKtY,EAAkBuC,KAAKq3f,cAAe,CACvC,IAAK,IAAI7yV,EAAI,EAAGA,EAAIxkK,KAAKq3f,aAAa76f,OAAQgoK,IAAK,CAC/C,IAAIsjW,EAAc9ngB,KAAKq3f,aAAa7yV,GAOpC,GALIsjW,EAAYV,gBAAgB5Y,GAK5B/wf,EAAkBuC,KAAKq3f,cACvB,MAEJ7yV,IAEJxkK,KAAKq3f,kBAAen8f,EASxB,IAAKuC,EAAkBuC,KAAKutK,MAAO,CAC/B,IAAIz7J,EAAQ9R,KAAK8lgB,aACb9lgB,KAAK8lgB,cAAgB,IACrB9lgB,KAAKutK,KAAKq4V,YAAYj9e,OAAO7W,EAAO,GACC,IAAjC9R,KAAKutK,KAAKq4V,YAAYppgB,OACtBwD,KAAKutK,KAAKl7J,UAGJrS,gBAAgBomgB,IACnBpmgB,KAAKutK,KAAKw6V,eAAiB/ngB,KAC9BA,KAAKutK,KAAKw6V,kBAAe7sgB,EAEnB8E,gBAAgBomgB,IACnBpmgB,KAAKutK,KAAKy6V,eAAiBhogB,OAC9BA,KAAKutK,KAAKy6V,kBAAe9sgB,GAE7B8E,KAAKutK,UAAOryK,GAGpB8E,KAAKqS,WAKTykf,EAAW17f,UAAUiX,QAAU,WAI3BrS,KAAK+2f,mBAAgB77f,EACrB8E,KAAKutK,UAAOryK,EACZo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3B82f,GACTwQ,IAKElB,GAAoC,SAAU90a,GAE9C,SAAS80a,EAAmB1/f,GACxB,IAAI3G,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAEjC,OADAD,EAAM2ngB,iBAAmBhhgB,EAClB3G,EAwCX,OA5CA0wF,GAAU21a,EAAoB90a,GAS9B80a,EAAmBhrgB,UAAUusgB,mBAAqB,SAAUh0e,KAM5Dyye,EAAmBhrgB,UAAUg4C,OAAS,SAAUyyd,GAE5C,OAAOA,aAAkBO,GAClBP,EAAOvO,kBAAoBt3f,KAAKs3f,iBAK3C8O,EAAmBhrgB,UAAUiE,MAAQ,WAEjC,IAAK,IADD4ogB,EAAe,IAAI7B,EAAmBpmgB,KAAK0ngB,kBACtCxrgB,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAIgsgB,EAAQlogB,KAAKq3f,aAAan7f,GAAGmD,QACjC4ogB,EAAa5Q,aAAa7yf,KAAK0jgB,GAC/BA,EAAMp2f,MAAQ5V,EACdgsgB,EAAM5Q,gBAAkB2Q,EAM5B,OAJAA,EAAal7f,EAAI/M,KAAK+M,EACtBk7f,EAAaj7f,EAAIhN,KAAKgN,EACtBi7f,EAAalyf,OAAS,EACtBkyf,EAAajyf,MAAQ,EACdiyf,GAKX7B,EAAmBhrgB,UAAUgsgB,gBAAkB,SAAU5Y,GACrDxuf,KAAKutK,UAAOryK,EACZo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3BomgB,GACTkB,IAKEb,GAA6B,SAAUn1a,GAEvC,SAASm1a,IACL,OAAkB,OAAXn1a,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KA+I/D,OAjJAywF,GAAUg2a,EAAan1a,GAIvBhzF,OAAOuJ,eAAe4+f,EAAYrrgB,UAAW,cAIzCsM,IAAK,WAED,IADA,IAAIm+f,EAAS7lgB,KACN6lgB,EAAOvO,iBAAiB,CAC3B,GAAIuO,EAAOvO,2BAA2BgQ,GAClC,OAAOzB,EAAOvO,gBAElBuO,EAASA,EAAOvO,kBAIxB3vf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4+f,EAAYrrgB,UAAW,cAIzCsM,IAAK,WAED,OADe1H,gBACSk3f,IADTl3f,KACqCiyf,2BAA2BkF,GADhEn3f,KAEKiyf,gBAAgBmL,WAFrBp9f,gBAIcingB,IAJdjngB,KAIsCgkgB,uBAAuBT,GAJ7DvjgB,KAKKgkgB,YAAY5G,WAEzB,GAEXz1f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4+f,EAAYrrgB,UAAW,eAIzCsM,IAAK,WAED,OADe1H,gBACSk3f,IADTl3f,KACqCiyf,2BAA2BkF,GADhEn3f,KAEKiyf,gBAAgBoL,YAE7B,GAEX11f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4+f,EAAYrrgB,UAAW,iBAIzCsM,IAAK,WACD,OAAO1H,KAAKs3f,2BAA2B2O,IAE3Ct+f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4+f,EAAYrrgB,UAAW,oBAIzCsM,IAAK,WACD,OAAO1H,KAAK88f,sBAAsBsJ,IAEtCz+f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4+f,EAAYrrgB,UAAW,kBAIzCsM,IAAK,WACD,GAAI1H,KAAKs3f,2BAA2B2O,GAChC,OAAOjmgB,KAAKs3f,iBAIpB3vf,YAAY,EACZC,cAAc,IAMlB6+f,EAAYrrgB,UAAU+sgB,YAAc,WAChC,IAAIA,GAAc,EAClB,GAAInogB,gBAAgBk3f,GAAiB,CAEjC,GAAiB,MADDl3f,MAC2C,IAD3CA,KACmBq3f,aAAa76f,QACH,IAF7BwD,KAEFgd,WAAW5C,SAAS5d,OAAc,CAE5C2rgB,EAJYnogB,KAGcgd,WAAW5C,SAAS,GACtB+tf,aAGhC,OAAOA,GAKX1B,EAAYrrgB,UAAUosgB,qBAAuB,SAAUC,GAGnD,GADAA,EADWzngB,KACcs3f,gBAAgBD,aAAa94f,QAD3CyB,MAC2D,IAAMyngB,GACvEhqgB,EAFMuC,KAEiBs3f,iBAAkB,CAC1C,GAHOt3f,KAGEs3f,2BAA2BmP,EAChC,OAJGzmgB,KAISs3f,gBAAgBkQ,qBAAqBC,GAJ9CzngB,KAMOs3f,2BAA2BgQ,KACrCG,EAPGzngB,KAOsBs3f,gBAAgBkQ,qBAAqBC,IAGtE,OAAOA,GAKXhB,EAAYrrgB,UAAUm+E,SAAW,WAC7B,OAAIv5E,gBAAgBk3f,IAAmBl3f,gBAAgBingB,GAC5CjngB,KAAKs3f,gBAAgBD,aAAa94f,QAAQyB,MAE5CA,gBAAgBmmgB,GACdnmgB,KAAKoogB,WAAW/Q,aAAa94f,QAAQyB,MAEvCA,gBAAgBimgB,GACdjmgB,KAAKqogB,SAAShR,aAAa94f,QAAQyB,MAEvC,GAKXymgB,EAAYrrgB,UAAUktgB,kBAAoB,WACtC,GAAItogB,KAAKuogB,cACL,OAAOvogB,KAAKwogB,eAAeC,WAAWv6M,WAAaluT,KAAKwogB,eAAexpe,OAAOxyB,KAAOxM,KAAKwogB,eAAexpe,OAAOvyB,OAGhH,IACIsqf,EADa/2f,KAAK88f,WACS/F,cAC/B,OAAOA,EAAc35C,WAAa25C,EAAc76O,WAAa66O,EAAc36O,cAG5EqqP,GACTd,IAKEzO,GAAiC,SAAU5la,GAK3C,SAAS4la,IACL,IAAIn3f,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAGjC,OAFAD,EAAMkyf,gBAAkB,IAAIkF,GAAiBp3f,GAC7CA,EAAMsyf,gBAAkB,IAAI+E,GAAiBr3f,GACtCA,EAqKX,OA7KA0wF,GAAUyma,EAAiB5la,GAU3BhzF,OAAOuJ,eAAeqvf,EAAgB97f,UAAW,uBAI7CsM,IAAK,WACD,OAAI1H,KAAKq3f,aAAa76f,OAAS,GACpBwD,KAAK05I,UAAUgvX,qBAI9B/ggB,YAAY,EACZC,cAAc,IAKlBsvf,EAAgB97f,UAAUg4C,OAAS,SAAUyyd,GACzC,OAAOA,aAAkB3O,GAAmB2O,EAAO5T,kBAAoBjyf,KAAKiyf,iBAKhFiF,EAAgB97f,UAAUw8O,QAAU,WAChC,GAAIn6O,EAAkBuC,KAAKq3f,eAA8C,IAA7Br3f,KAAKq3f,aAAa76f,OAC1D,OAAO,EAEX,IAAK,IAAIknB,EAAI,EAAGA,EAAI1jB,KAAKq3f,aAAa76f,OAAQknB,IAE1C,IAAK,IADDilf,EAAgB3ogB,KAAKq3f,aAAa3ze,GAC7BxnB,EAAI,EAAGA,EAAIysgB,EAAcvuf,SAAS5d,OAAQN,IAAK,CACpD,IAAIsiK,EAASmqW,EAAcvuf,SAASle,GACpC,GAAsB,IAAlBsiK,EAAOhiK,SAGPgiK,aAAkBoqW,IAAkBpqW,aAAkBqqW,IAAmBrqW,aAAkBsqW,IACvFtqW,aAAkBihW,IAAmBX,GAAcU,uBAAuBhhW,IAC9E,OAAO,EAInB,OAAO,GAKX04V,EAAgB97f,UAAU2tgB,UAAY,SAAUp9f,EAAQq9f,GAKpD,IAAK,IAJDxqW,OAAStjK,EACTgkB,EAAQ,EACR+pf,GAAY,EACZC,EAAiBlpgB,KAAK6mgB,kBACjBvgf,EAAI,EAAGA,EAAI4if,EAAe1sgB,OAAQ8pB,IAEvC,IAAK,IADDu/e,EAASqD,EAAe5if,GACnB5C,EAAI,EAAGA,EAAImif,EAAOxO,aAAa76f,OAAQknB,IAE5C,IAAK,IADDumC,EAAO47c,EAAOxO,aAAa3ze,GACtBxnB,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAEtC,MADAsiK,EAASv0G,EAAK7vC,SAASle,cACDitgB,IAAtB,CAQA,IALKF,IAAczqW,aAAkBoqW,IAAkBpqW,aAAkBqqW,IAClErqW,aAAkBsqW,IAAsBtqW,aAAkBihW,IAC1DX,GAAcU,uBAAuBhhW,MACxCyqW,GAAY,GAEZA,GAAat9f,GAAUuT,EAAQs/I,EAAOhiK,OAEtC,OADAwsgB,EAAiBr9f,EAASuT,GACjBle,QAAWw9J,EAAQ1sJ,MAASk3f,GAEzC9pf,GAASs/I,EAAOhiK,OAO5B,OAHImP,EAASuT,IACT8pf,EAAgBvrgB,EAAkB+gK,GAAU7yJ,EAAS6yJ,EAAOhiK,SAEvDwE,QAAWw9J,EAAQ1sJ,MAASk3f,IAKzC9R,EAAgB97f,UAAUgpS,UAAY,WAElC,IAAK,IADD5nS,EAAS,EACJknB,EAAI,EAAGA,EAAI1jB,KAAKq3f,aAAa76f,OAAQknB,IAE1C,IAAK,IADDumC,EAAOjqD,KAAKq3f,aAAa3ze,GACpBxnB,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAAK,CAC3C,IAAI8E,EAAUipD,EAAK7vC,SAASle,GACxB8E,aAAmBmogB,KAGvB3sgB,GAAUwE,EAAQxE,QAG1B,OAAOA,GAKX06f,EAAgB97f,UAAUusgB,mBAAqB,SAAUh0e,KAMzDuje,EAAgB97f,UAAUiE,MAAQ,WAC9B,IAAI43f,EAAY,IAAIC,EACpBD,EAAUhF,gBAAgB0H,WAAW35f,KAAKiyf,iBAC1CgF,EAAU5E,gBAAgBsH,WAAW35f,KAAKqyf,iBAC1C,IAAK,IAAIn2f,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IACIktgB,EADOppgB,KAAKq3f,aAAan7f,GACRmD,QACrB43f,EAAUI,aAAa7yf,KAAK4kgB,GAC5BA,EAAUnS,UAAYA,EAM1B,OAJAA,EAAUlqf,EAAI/M,KAAK+M,EACnBkqf,EAAUjqf,EAAIhN,KAAKgN,EACnBiqf,EAAUlhf,OAAS/V,KAAK+V,OACxBkhf,EAAUjhf,MAAQhW,KAAKgW,MAChBihf,GAKXC,EAAgB97f,UAAUgsgB,gBAAkB,SAAU5Y,GAClD,IAAIz4e,EAAS/V,KAAK+V,OAClB,IAAKtY,EAAkBuC,KAAKq3f,cAAe,CACvC,IAAK,IAAIn7f,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAM/C,GALa8D,KAAKq3f,aAAan7f,GACxBmW,UAC0B,IAA7BrS,KAAKq3f,aAAa76f,QAAgBiB,EAAkBuC,KAAKq3f,aAAa,GAAGj9e,YACzEpa,KAAKq3f,kBAAen8f,GAEpBuC,EAAkBuC,KAAKq3f,cACvB,MAEJn7f,IAEJ8D,KAAKq3f,kBAAen8f,EAEnBuC,EAAkBuC,KAAKs3f,kBAAqB75f,EAAkBuC,KAAKs3f,gBAAgBD,gBAC5B,IAArDr3f,KAAKs3f,gBAAgBD,aAAa94f,QAAQyB,QAC7CA,KAAKs3f,gBAAgBD,aAAa1ue,OAAO3oB,KAAKs3f,gBAAgBD,aAAa94f,QAAQyB,MAAO,GAC1FA,KAAKs3f,gBAAgBvhf,QAAUA,EAK/B/V,KAAKs3f,qBAAkBp8f,GAE3B8E,KAAKqS,WAKT6kf,EAAgB97f,UAAUiX,QAAU,WAIhCrS,KAAKiyf,qBAAkB/2f,EAIvB8E,KAAKqyf,qBAAkBn3f,EACvBo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3Bk3f,GACTuP,IAKEQ,GAA6B,SAAU31a,GAEvC,SAAS21a,IACL,IAAIlngB,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KA0BjC,OAzBAD,EAAMmqP,MAAQ,EAIdnqP,EAAMm8Q,WAAa,EAInBn8Q,EAAMo8Q,UAAY,EAIlBp8Q,EAAMq8Q,YAAc,EAIpBr8Q,EAAMs8Q,aAAe,EACrBt8Q,EAAMi/B,OAAS,IAAI6kM,GAAO9jO,EAAMm8Q,WAAYn8Q,EAAMo8Q,UAAWp8Q,EAAMq8Q,YAAar8Q,EAAMs8Q,cACtFt8Q,EAAMspgB,gBAAkB,EACxBtpgB,EAAMupgB,iBAAmB,EACzBvpgB,EAAMwpgB,eAAiB,EACvBxpgB,EAAMypgB,kBAAoB,EAC1BzpgB,EAAMikgB,YAAc,IAAIT,GAAaxjgB,GACrCA,EAAM0pgB,YAAc,IAAIC,GACxB3pgB,EAAM4pgB,qBAAuB,IAAIpnR,GAC1BxiP,EAgrBX,OA5sBA0wF,GAAUw2a,EAAa31a,GA8BvBhzF,OAAOuJ,eAAeo/f,EAAY7rgB,UAAW,iBAIzCsM,IAAK,WACD,OAAsB,EAAb1H,KAAKkqP,QAAgB,GAAO,GAKzC7iP,IAAK,SAAUtK,GACXiD,KAAKkqP,MAAuB,IAAblqP,KAAKkqP,OAAkBntP,EAAQ,EAAI,IAAM,GAE5D4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo/f,EAAY7rgB,UAAW,kBAIzCsM,IAAK,WACD,OAAsB,EAAb1H,KAAKkqP,QAAgB,GAAO,GAKzC7iP,IAAK,SAAUtK,GACXiD,KAAKkqP,MAAuB,IAAblqP,KAAKkqP,OAAkBntP,EAAQ,EAAI,IAAM,GAE5D4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo/f,EAAY7rgB,UAAW,UAIzCsM,IAAK,WACD,OAA8B,IAAT,EAAb1H,KAAKkqP,QAKjB7iP,IAAK,SAAUtK,GACXiD,KAAKkqP,MAAuB,IAAblqP,KAAKkqP,OAAiBntP,EAAQ,EAAI,IAErD4K,YAAY,EACZC,cAAc,IAKlBq/f,EAAY7rgB,UAAUg4C,OAAS,SAAUyyd,GACrC,OAAOA,aAAkBoB,GAAepB,EAAO7B,cAAgBhkgB,KAAKgkgB,aAKxEiD,EAAY7rgB,UAAU8rgB,YAAc,SAAU1Y,GAC1C,IAAK,IAAItyf,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAIwpE,EAAM1lE,KAAKq3f,aAAan7f,GACI,IAA5BwpE,EAAI2xb,aAAa76f,QACjBkpE,EAAIrzD,UACJnW,KAGAwpE,EAAIkkc,aAAapb,KAO7ByY,EAAY7rgB,UAAU+I,SAAW,SAAU0lgB,GACvC,GAAI7pgB,KAAKozC,OAAOy2d,EAAUzB,YACtB,OAAO,EAEX,KAAOyB,EAAUzB,WAAWG,eAAe,CACvC,GAAIvogB,KAAKozC,OAAOy2d,EAAUzB,YACtB,OAAO,EAEXyB,EAAYA,EAAUzB,WAAWI,eAErC,OAAOxogB,KAAKozC,OAAOy2d,EAAUzB,aAKjCnB,EAAY7rgB,UAAU0ugB,cAAgB,SAAUC,GAC5C,IAAI/zf,EAAQhW,KAAKsogB,oBAGjB,OADAtyf,EAAQA,EAAQhW,KAAKo9f,WAAap9f,KAAKq9f,cACvB,EAAIrnf,EAAQ,GAEhCixf,EAAY7rgB,UAAU4ugB,cAAgB,WAElC,IAAK,IADDh0f,EAAQ,EACH9Z,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAG/C,IAAK,IAFDq4T,EAAW,EACX7uP,EAAM1lE,KAAKq3f,aAAan7f,GACnBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACzC6wS,GAAY7uP,EAAI2xb,aAAa3ze,GAAG+kf,WAAWv6M,UAE3Cl4S,EAAQu+S,IACRv+S,EAAQu+S,GAGhB,OAAOv+S,GAKXixf,EAAY7rgB,UAAU6ugB,oBAAsB,SAAUr6e,GAClD,IAAIs6e,EAAat6e,EAgBjB,MAf4C,UAAxC5vB,KAAKgkgB,YAAYG,oBACdnkgB,KAAKgkgB,YAAYE,eAAiB,EACrCgG,EAAalqgB,KAAKgkgB,YAAYE,eAGc,YAAxClkgB,KAAKgkgB,YAAYG,oBACdnkgB,KAAKgkgB,YAAYE,eAAiB,EACrCgG,EAAaA,EAAalqgB,KAAKgkgB,YAAYE,eAAiB,KAI5DlkgB,KAAKgkgB,YAAYG,mBAAqB,QACtCnkgB,KAAKgkgB,YAAYE,eAAiBgG,GAGnCA,GAKXjD,EAAY7rgB,UAAU+ugB,aAAe,SAAUjG,EAAgBC,EAAoB3tf,EAAgBuxD,GAC/F,IAAImmP,EAAYg2M,EAWhB,MAV2B,YAAvBC,EACAj2M,EAAag2M,EAAiB1tf,EAAkB,IAEpB,UAAvB2tf,EACLj2M,EAAYg2M,EAGNzmgB,EAAkBsqE,KACxBmmP,EAAYnmP,EAAKqic,4BAEdl8M,GAKX+4M,EAAY7rgB,UAAUivgB,qBAAuB,SAAUz6e,GAGnD,IAAK,IADDgQ,EAAShQ,EADI5vB,KAAKgqgB,gBAEb9tgB,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAIwpE,EAAM1lE,KAAKq3f,aAAan7f,GAC5BwpE,EAAI4kc,UAAUpF,gBAAkBtle,EAChC8lC,EAAI4kc,UAAUvF,iBAAmBnle,EACjC,IAAK,IAAIlc,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACzCgiD,EAAI2xb,aAAa3ze,GAAG+kf,WAAWv6M,WAAatuR,IAOxDqne,EAAY7rgB,UAAUusgB,mBAAqB,SAAUh0e,GAEjD,IAAK,IADDk0e,OAAkB3sgB,EACbgB,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAC1C,GAAI8D,KAAKq3f,aAAan7f,GAAG8Q,GAAK2mB,EAAM3mB,GAC5BhN,KAAKq3f,aAAan7f,GAAG8Q,EAAIhN,KAAKq3f,aAAan7f,GAAG6Z,QAAW4d,EAAM3mB,EAAG,CACtE66f,EAAkB7ngB,KAAKq3f,aAAan7f,GAAGyrgB,mBAAmBh0e,GAC1D,MAGR,OAAOk0e,GAMXZ,EAAY7rgB,UAAUmvgB,cAAgB,WAClC,IAAIC,KACAC,KACAj0f,EAAiBxW,KAAK8pgB,eAAc,GACpCI,EAAalqgB,KAAKiqgB,oBAAoBzzf,GAC1CxW,KAAK0qgB,cAAgB,IAAInoR,GACzB,IAAK,IAAIrmP,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAIwpE,EAAM1lE,KAAKq3f,aAAan7f,GACxByugB,EAAc,IAAIpoR,GAClB+nR,EAAY5kc,EAAI4kc,UAEhBx3M,EAAaptP,EAAI4kc,UAAUxF,WAC3B8F,EAAa,EACbJ,EAASjsgB,QAAQqsgB,GAAc,GAC/BJ,EAAShmgB,KAAKomgB,GAIlBA,GADY5qgB,KAAKmqgB,aAAaG,EAAUvF,gBAAiBuF,EAAUtF,oBAAqBkF,EAAY,MAEpG,IAAIW,EAAcx+f,KAAK0zB,MAAM6qe,GACzBJ,EAASjsgB,QAAQssgB,GAAe,GAChCL,EAAShmgB,KAAKqmgB,GAElB,IAAK,IAAInnf,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAE9C,IAAK,IADDqkD,EAAOrC,EAAI2xb,aAAa3ze,GACnB4C,EAAI,EAAGA,EAAImkf,EAAajugB,OAAQ8pB,IACrC,KAAImkf,EAAankf,GAAG0oN,YAAc8jF,GAAlC,CAGA,IAAIlC,EAAU65M,EAAankf,GAAGmif,WAAW73M,QACrCk6M,GAAoB,EACpBL,EAAankf,GAAG0oN,YAAc8jF,GAE1Bg4M,GAAoB,EAEhBpnf,IAAMgiD,EAAI2xb,aAAa76f,OAAS,GAAKkpE,EAAI4kc,UAAUrF,UAAY,IAG/D2F,GADY5qgB,KAAKmqgB,aAAaM,EAAankf,GAAGmif,WAAWvE,eAAgBuG,EAAankf,GAAGmif,WAAWtE,mBAAoB+F,EAAY,SAY5IU,GADY5qgB,KAAKmqgB,aAAaM,EAAankf,GAAGmif,WAAWvE,eAAgBuG,EAAankf,GAAGmif,WAAWtE,mBAAoB+F,EAAY,MAEpIp3M,EAAa23M,EAAankf,GAAG0oN,YAAcy7R,EAAankf,GAAGmif,WAAW31M,YAErEg4M,GAAqBpnf,IAAMgiD,EAAI2xb,aAAa76f,OAAS,IACtDsugB,GAAoB,GAEpBA,GAAqB5ugB,EAAIuugB,EAAankf,GAAG+hf,SAASp5R,UAAa2hF,EAAU,IACzE65M,EAAa9hf,OAAOrC,EAAG,GACvBA,KAKR,GAAIyhD,EAAK0gc,WAAW73M,QAAU,EAC1B,GAA4B,IAAxB65M,EAAajugB,QAAgBiugB,EAAaA,EAAajugB,OAAS,GAAGwyO,aAAe8jF,EAClF23M,EAAajmgB,KAAKujE,QAGlB,IAAK,IAAIqP,EAAIqzb,EAAajugB,OAAQ46E,EAAI,EAAGA,IACjCqzb,EAAarzb,EAAI,GAAG43J,YAAc8jF,GAClC23M,EAAa9hf,OAAOyuD,EAAI,EAAG,EAAGrP,GAMzC4ic,EAAYtnR,YAAYt7K,EAAKwrP,YAC9Bo3M,EAAYvmgB,IAAI2jE,EAAKwrP,UAAWlnT,KAAK0zB,MAAM6qe,EAAaC,IAE5D/3M,GAAc/qP,EAAK0gc,WAAW31M,WAG9B83M,GADY5qgB,KAAKmqgB,aAAapic,EAAK0gc,WAAWvE,eAAgBn8b,EAAK0gc,WAAWtE,mBAAoB+F,EAAY,MAE9G,IAAIv+f,EAASU,KAAK0zB,MAAM6qe,GACpBJ,EAASjsgB,QAAQoN,GAAU,GAC3B6+f,EAAShmgB,KAAKmH,GAEd+X,IAAMgiD,EAAI2xb,aAAa76f,OAAS,GAAK8tgB,EAAUrF,UAAY,IAE3D2F,GADY5qgB,KAAKmqgB,aAAaG,EAAUpF,eAAgB,QAASgF,EAAY,MAEzEM,EAASjsgB,QAAQ8N,KAAK0zB,MAAM6qe,IAAe,GAC3CJ,EAAShmgB,KAAK6H,KAAK0zB,MAAM6qe,IAE7B93M,GAAcw3M,EAAUrF,WAGvBjlgB,KAAK0qgB,cAAcrnR,YAAY39K,EAAIupK,WACpCjvO,KAAK0qgB,cAActmgB,IAAIshE,EAAIupK,SAAU07R,IAIjDH,EAAS16e,KAAK,SAAUG,EAAGC,GAAK,OAAOD,EAAIC,IACvCs6e,EAAShugB,OAAS,IAAMwD,KAAKypgB,YAAYpmc,QAAQ7mE,QACjDwD,KAAK+qgB,kBAAkBP,EAAUN,GAErClqgB,KAAK0qgB,cAAcj+c,QACnBzsD,KAAK0qgB,mBAAgBxvgB,GAEzB+rgB,EAAY7rgB,UAAU2vgB,kBAAoB,SAAUP,EAAUh0f,GAC1D,IAAK,IAAIta,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAIwpE,EAAM1lE,KAAKq3f,aAAan7f,GACxBwpE,EAAI4kc,UAAUvF,iBAAmB,IACjCr/b,EAAI4kc,UAAUxF,WAAap/b,EAAIslc,aAAaR,OAAUtvgB,GAAY,EAAGsb,IAEzE,IAAK,IAAIkN,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GACxBovS,EAAaptP,EAAIslc,aAAaR,EAAUzic,EAAMA,EAAKwR,WAAY/iE,GAC/Ds8S,EAAa,GAAK/qP,EAAK0gc,WAAW31M,aAAeA,IACjD/qP,EAAK0gc,WAAW31M,WAAaA,GAGjCptP,EAAI4kc,UAAUpF,gBAAkB,IAChCx/b,EAAI4kc,UAAUrF,UAAYv/b,EAAIslc,aAAaR,OAAUtvgB,EAAWwqE,EAAI2xb,aAAa76f,OAAQga,MAOrGywf,EAAY7rgB,UAAU6vgB,kBAAoB,WACtC,IAAIjrgB,KAAKkrgB,cAAT,CAIAlrgB,KAAKypgB,YAAY0B,eACjB,IAAI30f,EAAiB,EACjB0zf,EAAa,EACbkB,KACAC,EAAsD,SAAxCrrgB,KAAKgkgB,YAAYG,mBAGnC3tf,EAAiBxW,KAAK8pgB,eAAc,GACpCI,EAAalqgB,KAAKiqgB,oBAAoBzzf,GACtC,IAAK,IAAIta,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAIwpE,EAAM1lE,KAAKq3f,aAAan7f,GACxBougB,EAAY5kc,EAAI4kc,UAChBx3M,EAAa,EACb5E,EAAY,EACZviT,EAAS,EACT2+f,EAAUxF,WAAa,IACvB52M,EAAYluT,KAAKmqgB,aAAaG,EAAUvF,gBAAiBr/b,EAAI4kc,UAAUnF,mBAAoB+E,EAAY,MACvGlqgB,KAAKypgB,YAAY6B,WAAWx4M,EAAYA,EAAaw3M,EAAUxF,WAAY52M,EAAWA,EAAWviT,EAASuiT,IAE9G,IAAK,IAAIxqS,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GACG,IAA3B0nf,EAAgB5ugB,SAChBurE,EAAKinK,YAAc8jF,GAEvB,IAAK,IAAIxsS,EAAI,EAAGA,EAAI8kf,EAAgB5ugB,OAAQ8pB,IAAK,CAC7C,IAAIilf,EAAiBH,EAAgB9kf,GACrC,GAAIilf,EAAev8R,YAAc8jF,EAC7B/qP,EAAKinK,YAAc8jF,MADvB,CAIA,IAAIlC,EAAU,EACVk6M,GAAoB,EAExB,GADAl6M,EAAU26M,EAAe9C,WAAW73M,QAChC26M,EAAev8R,YAAc8jF,EAC7B/qP,EAAKinK,YAAc8jF,EACnBg4M,GAAoB,MAEnB,CAED58M,EAAYluT,KAAKmqgB,aAAaoB,EAAe9C,WAAWvE,eAAgBqH,EAAe9C,WAAWtE,mBAAoB+F,EAAYqB,GAClI,IAAIC,EAAaD,EAAenB,2BAK5BpqgB,KAAKypgB,YAAYpmc,QAAQ7mE,OAAS,GAClCwD,KAAKypgB,YAAY6B,WAAWx4M,EAAYA,EAAa9yT,KAAKypgB,YAAYpmc,QAAQ9kE,QAAQgtgB,EAAeE,aAAeF,EAAe9C,WAAW31M,WAAY5E,EAAWs9M,EAAY7/f,GAAUuiT,GAC3LnmP,EAAKinK,YAAc8jF,IAInB9yT,KAAKypgB,YAAY6B,WAAWx4M,EAAYA,EAAay4M,EAAev8R,YAAcu8R,EAAe9C,WAAW31M,WAAY5E,EAAWs9M,EAAY7/f,GAAUuiT,GACzJnmP,EAAKinK,YAAc8jF,GAGtBg4M,GAAqBpnf,IAAMgiD,EAAI2xb,aAAa76f,OAAS,IACtDsugB,GAAoB,GAEpBA,GAAqB5ugB,EAAIqvgB,EAAelD,SAASp5R,UAAa2hF,EAAU,IACxEw6M,EAAgBzif,OAAOrC,EAAG,GAC1BA,MAKR,GAAIyhD,EAAK0gc,WAAW73M,QAAU,EAC1B,GAA+B,IAA3Bw6M,EAAgB5ugB,QAAgB4ugB,EAAgBA,EAAgB5ugB,OAAS,GAAGwyO,aAAe8jF,EAC3Fs4M,EAAgB5mgB,KAAKujE,QAGrB,IAAK,IAAIqP,EAAIg0b,EAAgB5ugB,OAAQ46E,EAAI,EAAGA,IACpCg0b,EAAgBh0b,EAAI,GAAG43J,YAAc8jF,GACrCs4M,EAAgBzif,OAAOyuD,EAAI,EAAG,EAAGrP,GAKjDmmP,EAAYluT,KAAKmqgB,aAAapic,EAAK0gc,WAAWvE,eAAgBn8b,EAAK0gc,WAAWtE,mBAAoB+F,EAAYnic,GAC9G,IAAI9X,EAAW8X,EAAKqic,2BACpBpqgB,KAAKypgB,YAAY6B,WAAWx4M,EAAYA,GAAc/qP,EAAK0gc,WAAW31M,WAAY5E,EAAWj+P,EAAUtkD,GAAUuiT,GAC7GxqS,IAAMgiD,EAAI2xb,aAAa76f,OAAS,GAAK8tgB,EAAUpF,eAAiB,IAChEh3M,EAAYluT,KAAKmqgB,aAAaG,EAAUpF,eAAgB,QAASgF,EAAY,MAC7ElqgB,KAAKypgB,YAAY6B,WAAWx4M,EAAYA,GAAcw3M,EAAUrF,UAAW/2M,EAAWA,EAAWviT,GAAUuiT,KAIvHluT,KAAKypgB,YAAYiC,uBAEjB1rgB,KAAKypgB,YAAYkC,WAAWn1f,EAAgB0zf,EAAYmB,GAExDrrgB,KAAK4rgB,gBAAgB1B,EAAYmB,KAKrCpE,EAAY7rgB,UAAUwwgB,gBAAkB,SAAU1B,EAAYmB,GAC1D,IAAK,IAAInvgB,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAI2vgB,EAAK7rgB,KAAKq3f,aAAan7f,GACvBougB,EAAYuB,EAAGvB,UACfA,EAAUxF,WAAa,IACvBwF,EAAUhG,YAActkgB,KAAKypgB,YAAYU,aAAa,EAAGG,EAAUxF,WAAYoF,EAAYmB,IAE/F,IAAK,IAAI3nf,EAAI,EAAGA,EAAImof,EAAGxU,aAAa76f,OAAQknB,IAAK,CAC7C,IAAIqkD,EAAO8jc,EAAGxU,aAAa3ze,GAE3BqkD,EAAK0gc,WAAWv6M,UAAYluT,KAAKypgB,YAAYU,aAAapic,EAAKinK,YAAajnK,EAAK0gc,WAAW31M,WAAYo3M,EAAYmB,GAEzE,YAAvCtjc,EAAK0gc,WAAWtE,qBAChBp8b,EAAK0gc,WAAWvE,eAAiBn8b,EAAK0gc,WAAWv6M,UACjDnmP,EAAK0gc,WAAWtE,mBAAqB,SAGzCmG,EAAUrF,UAAY,IACtBqF,EAAU/F,WAAavkgB,KAAKypgB,YAAYU,aAAa,EAAGG,EAAUrF,UAAWiF,EAAYmB,MAOrGpE,EAAY7rgB,UAAU0wgB,eAAiB,SAAUl8e,GAE7C,IAAK,IADD5Z,EAAQ,EACH9Z,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAG/C,IAAK,IAFDwpE,EAAM1lE,KAAKq3f,aAAan7f,GACxBq4T,EAAW,EACN7wS,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GAC5B6wS,GAAYv0T,KAAKmqgB,aAAapic,EAAK0gc,WAAWvE,eAAgBn8b,EAAK0gc,WAAWtE,mBAAoBv0e,EAAam4C,GAE/G/xD,EAAQu+S,IACRv+S,EAAQu+S,GAGhB,OAAOv+S,GAKXixf,EAAY7rgB,UAAUs6R,YAAc,SAAUn9K,GAC1C,IAAIwzZ,EAAsB/rgB,KAAKypgB,YAAYuC,gBACvCx1f,EAAiBxW,KAAKiqgB,oBAAoBjqgB,KAAK8pgB,eAAc,IAC7Dtzf,GAAkBu1f,GAC0B,SAAxC/rgB,KAAKgkgB,YAAYG,qBACjBnkgB,KAAKgkgB,YAAYG,mBAAqB,SAGF,SAAxCnkgB,KAAKgkgB,YAAYG,oBAC2B,UAAxCnkgB,KAAKgkgB,YAAYG,qBACjBnkgB,KAAKgkgB,YAAYE,eAAiBlkgB,KAAK8rgB,eAAet1f,KAYlEywf,EAAY7rgB,UAAU6wgB,sBAAwB,SAAUC,EAAqBC,GACzE,IAAIpvgB,EAAQ,EAGZ,OAFAA,EAASmvgB,EAAsBC,EAAc,KAC7CpvgB,EAAQsP,KAAK0zB,MAAMhjC,IACJ,IAAMA,EAAQ,KAKjCkqgB,EAAY7rgB,UAAUiE,MAAQ,WAC1B,IAAI+lE,EAAQ,IAAI6hc,EAChB7hc,EAAMqkc,YAAczpgB,KAAKypgB,YAAYpqgB,QACrC+lE,EAAM4+b,YAAYrK,WAAW35f,KAAKgkgB,aAClC,IAAK,IAAI9ngB,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAIwpE,EAAM1lE,KAAKq3f,aAAan7f,GAAGmD,QAC/B+lE,EAAMiyb,aAAa7yf,KAAKkhE,GACxBA,EAAI4xb,gBAAkBlyb,EACtBM,EAAI5zD,MAAQ5V,EAOhB,OALAkpE,EAAMr4D,EAAI/M,KAAK+M,EACfq4D,EAAMp4D,EAAIhN,KAAKgN,EACfo4D,EAAMrvD,OAAS/V,KAAK+V,OACpBqvD,EAAMpvD,MAAQhW,KAAKgW,MACnBovD,EAAMkyb,gBAAkBt3f,KAAKs3f,gBACtBlyb,GAKX6hc,EAAYmF,WAAa,SAAU7rgB,GAC/B,GAAIA,aAAgB0hgB,GAAU,CAC1B,IAAIv8b,EAAMygc,GAAekG,SAAS9rgB,GAClC,OAAK9C,EAAkBioE,GAGdnlE,EAAK64f,qBAAqBmK,IAAgBhjgB,EAAK64f,UAAUA,qBAAqB6N,EAC5E1mgB,EAAK64f,UAAUA,eAGtB,EANO1zb,EAAI0ic,aAcvBnB,EAAY7rgB,UAAUkxgB,qBAAuB,WACzC,IAAI18e,EAAc5vB,KAAKsogB,oBACnBj8f,KAAK0zB,MAAMnQ,GAAevjB,KAAK0zB,MAAM//B,KAAKgqgB,kBAC1ChqgB,KAAKqqgB,qBAAqBz6e,GAE9B,IAAK,IAAI1zB,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAE1C,IAAK,IADDwpE,EAAM1lE,KAAKq3f,aAAan7f,GACnBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAEzC,IAAK,IADDqkD,EAAOrC,EAAI2xb,aAAa3ze,GACnB4C,EAAI,EAAGA,EAAIyhD,EAAKsvb,aAAa76f,OAAQ8pB,IACtCyhD,EAAKsvb,aAAa/we,aAAc2gf,GAChCl/b,EAAKsvb,aAAa/we,GAAGgmf,wBASzCrF,EAAY7rgB,UAAUmxgB,2BAA6B,SAAUC,EAAWC,GAIpE,IAAK,IAHD7lc,KACArpE,EAAQivgB,EAAUx9R,YAClB/vN,EAAMwtf,EAAQz9R,YAAcy9R,EAAQhE,WAAW31M,WAC1C52T,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAE1C,IAAK,IADDwpE,EAAM1lE,KAAKq3f,aAAan7f,GACnBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GACxBsrN,EAAcjnK,EAAKinK,YACnB8jF,EAAa/qP,EAAK0gc,WAAW31M,WAC5B9jF,EAAc8jF,EAAav1T,GAASyxO,EAAc8jF,EAAa7zS,GAAS+vN,EAAczxO,GAASyxO,EAAc/vN,EAC1G2nD,EAAMroE,QAAQwpE,GAAQ,GACtBnB,EAAMpiE,KAAKujE,GAGTinK,EAAczxO,GAASyxO,EAAc/vN,GAAO+vN,EAAc8jF,EAAa7zS,GACzE+vN,EAAczxO,GAASyxO,EAAc8jF,EAAa7zS,EAClD2nD,EAAMroE,QAAQwpE,GAAQ,GACtBnB,EAAMpiE,KAAKujE,GAGVinK,IAAgBzxO,GAASyxO,EAAc8jF,IAAe7zS,GACvD2nD,EAAMroE,QAAQwpE,GAAQ,GACtBnB,EAAMpiE,KAAKujE,GAK3B,OAAOnB,GAOXqgc,EAAY7rgB,UAAUsxgB,uBAAyB,SAAUC,GACrD,IAAK,IAAIjnc,EAAM,EAAGA,EAAM1lE,KAAKq3f,aAAa76f,OAAQkpE,IAC9C1lE,KAAKq3f,aAAa3xb,GAAKknc,qBAAqBD,IAMpD1F,EAAY7rgB,UAAUyxgB,wBAA0B,SAAUC,EAAWjnf,GACjE,IAAK,IAAI3pB,EAAI,EAAGA,EAAI4wgB,EAAUtwgB,OAAQN,IAAK,CACvC,IAAIwpE,EAAMonc,EAAUnkf,OAAOzsB,EAAG,GAAG,GACjCwpE,EAAI4xb,gBAAkBt3f,KACtBA,KAAKq3f,aAAa1ue,OAAO9C,EAAY,EAAG6/C,GACxCxpE,IAEJ8D,KAAK+sgB,eAAelnf,GACpB7lB,KAAKkrgB,eAAgB,EACrBlrgB,KAAKirgB,oBACLjrgB,KAAKkrgB,eAAgB,GAKzBjE,EAAY7rgB,UAAU2xgB,eAAiB,SAAUlnf,GAC7C,IAAK,IAAI3pB,EAAI2pB,EAAY3pB,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CACxD,IAAIwpE,EAAM1lE,KAAKq3f,aAAan7f,GAC5BwpE,EAAI5zD,MAAQ5V,EACZ,IAAK,IAAIwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACzCgiD,EAAI2xb,aAAa3ze,GAAG5R,MAAQ4R,EAC5BgiD,EAAI2xb,aAAa3ze,GAAGurN,SAAWvpK,EAAIupK,SAEvCppN,MAMRohf,EAAY7rgB,UAAU4xgB,mBAAqB,SAAUjlc,GACjD,IAAIp8D,EAAS,EACb,GAAIo8D,GAAQ/nE,KAAK0qgB,eACT1qgB,KAAK0qgB,cAAcrnR,YAAYt7K,EAAKsgc,SAASp5R,UAAW,CACxD,IAAI07R,EAAc3qgB,KAAK0qgB,cAAchjgB,IAAIqgE,EAAKsgc,SAASp5R,UACnD07R,EAAYtnR,YAAYt7K,EAAKwrP,aAC7B5nT,EAASg/f,EAAYjjgB,IAAIqgE,EAAKwrP,YAI1C,OAAO5nT,GAKXs7f,EAAY7rgB,UAAUgsgB,gBAAkB,SAAU5Y,GAC9C,IAAIz4e,EAAS/V,KAAK+V,OAClB,IAAKtY,EAAkBuC,KAAKq3f,cAAe,CACvC,IAAK,IAAI3ze,EAAI,EAAGA,EAAI1jB,KAAKq3f,aAAa76f,OAAQknB,IAAK,CAC/C,IAAImif,OAAS3qgB,EAMb,GAJA2qgB,EADkB7lgB,KAAKq3f,aAAa3ze,GAE/BjmB,EAAkBoogB,IACnBA,EAAOuB,gBAAgB5Y,GAEvB/wf,EAAkBuC,KAAKq3f,cACvB,MAEJ3ze,IAEJ1jB,KAAKq3f,kBAAen8f,EAEnBuC,EAAkBuC,KAAKs3f,mBACnB75f,EAAkBuC,KAAKs3f,gBAAgBD,iBACiB,IAArDr3f,KAAKs3f,gBAAgBD,aAAa94f,QAAQyB,OAC1CA,KAAKs3f,gBAAgBD,aAAa1ue,OAAO3oB,KAAKs3f,gBAAgBD,aAAa94f,QAAQyB,MAAO,GAE9FA,KAAKs3f,gBAAgBvhf,QAAUA,GAMnC/V,KAAKs3f,qBAAkBp8f,GAE3B8E,KAAKqS,WAKT40f,EAAY7rgB,UAAUiX,QAAU,WAI5BrS,KAAKgkgB,iBAAc9ogB,EAInB8E,KAAK2pgB,0BAAuBzugB,EAC5B8E,KAAKitgB,cACLjtgB,KAAKitgB,gBAAa/xgB,EAIlB8E,KAAKypgB,iBAAcvugB,EACnB8E,KAAKkqP,WAAQhvP,EACb8E,KAAKk8Q,gBAAahhR,EAClB8E,KAAKm8Q,eAAYjhR,EACjB8E,KAAKo8Q,iBAAclhR,EACnB8E,KAAKq8Q,kBAAenhR,EACpB8E,KAAKktgB,kBAAehygB,EACpB8E,KAAKi4D,iBAAc/8D,EACnB8E,KAAK0iC,WAAQxnC,EACbo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3BingB,GACTR,IAKEN,GAAgC,SAAU70a,GAE1C,SAAS60a,IACL,IAAIpmgB,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAQjC,OAJAD,EAAM4pgB,wBACN5pgB,EAAMwpgB,eAAiB,EACvBxpgB,EAAMypgB,kBAAoB,EAC1BzpgB,EAAMuqgB,UAAY,IAAIlG,GAAWrkgB,GAC1BA,EA2RX,OArSA0wF,GAAU01a,EAAgB70a,GAY1BhzF,OAAOuJ,eAAes+f,EAAe/qgB,UAAW,YAI5CsM,IAAK,WACD,OAAI1H,KAAKs3f,gBACEt3f,KAAKs3f,gBAAgBD,aAAa94f,QAAQyB,OAE7C,GAEZ2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAes+f,EAAe/qgB,UAAW,cAI5CsM,IAAK,WACD,GAAI1H,KAAKs3f,2BAA2B2P,GAChC,OAAOjngB,KAAKs3f,iBAIpB3vf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAes+f,EAAe/qgB,UAAW,WAI5CsM,IAAK,WACD,IAAIoK,EAAQ9R,KAAK8lgB,aACjB,GAAIh0f,GAAS,GAAKA,EAAQ9R,KAAKoogB,WAAW/Q,aAAa76f,OAAS,EAC5D,OAAOwD,KAAKoogB,WAAW/Q,aAAavlf,EAAQ,IAIpDnK,YAAY,EACZC,cAAc,IAKlBu+f,EAAe/qgB,UAAUg4C,OAAS,SAAUyyd,GACxC,OAAOA,aAAkBM,GAAkBN,EAAOyE,YAActqgB,KAAKsqgB,WAKzEnE,EAAe/qgB,UAAUwugB,aAAe,SAAUpb,GAC9C,IAAK,IAAItyf,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAI6rE,EAAO/nE,KAAKq3f,aAAan7f,GAE7B,GADA6rE,EAAKg/b,cAAcvY,GACa,IAA5Bzmb,EAAK0gc,WAAW73M,QAAe,CACd7oP,EAAKhyD,OAASgyD,EAAK/oC,OAAOtyB,IAAMq7D,EAAK/oC,OAAOryB,OACxD3M,KAAK+V,OAAS/V,KAAKoogB,WAAWpE,YAAY3zM,YAAetoP,EAAKhyD,SAC/D/V,KAAK+V,OAAS/V,KAAKoogB,WAAWpE,YAAY3zM,YAActoP,EAAKhyD,WAQ7Eowf,EAAekG,SAAW,SAAU9rgB,GAChC,GAAIA,aAAgB0hgB,GAAU,CAC1B,IAAIl6b,EAAOk+b,GAAgBkH,UAAU5sgB,GACrC,OAAK9C,EAAkBsqE,GAGdxnE,EAAK64f,qBAAqBgL,IAAc7jgB,EAAK64f,UAAUA,qBAAqB+M,EAC1E5lgB,EAAK64f,UAAUA,eAGtB,EANOrxb,EAAKsgc,WAcxBlC,EAAe/qgB,UAAU+xT,QAAU,SAAUl+E,EAAUskF,GACnD,IAAK,IAAIr3T,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAI6rE,EAAO/nE,KAAKq3f,aAAan7f,GAC7B,GAAI6rE,EAAKknK,WAAaA,GAAYlnK,EAAKj2D,QAAUyhT,EAC7C,OAAOxrP,IAQnBo+b,EAAe/qgB,UAAUwxgB,qBAAuB,SAAUD,GAGtD,IAAK,IAFD/lc,EAAQ5mE,KAAKq3f,aACbnpM,EAAYy+M,EAAmB/lc,EAAMpqE,OAChCurE,EAAO,EAAGA,EAAOnB,EAAMpqE,OAAQurE,IACpCnB,EAAMmB,GAAM0gc,WAAWvE,eAAiBh2M,GAMhDi4M,EAAe/qgB,UAAU4vgB,aAAe,SAAUoC,EAAWrlc,EAAMj2D,EAAO0E,GACtE,IAAI62f,EAAa,EACbr3f,EAAQ,EACRoyf,EAAapogB,KAAKoogB,WAClBkC,EAAYtqgB,KAAKsqgB,WACN,IAAXx4f,EACAkE,EAAQoyf,EAAW+B,aAAaG,EAAUvF,gBAAiBuF,EAAUtF,oBAAqBxuf,EAAgB,OAG1G62f,GAAcjF,EAAW+B,aAAaG,EAAUvF,gBAAiBuF,EAAUtF,oBAAqBxuf,EAAgB,MAC5G1E,GAAS,IACTu7f,GAAcjF,EAAW4E,mBAAmBjlc,IAG5C/xD,EADAlE,EAAQ9R,KAAKq3f,aAAa76f,OAClB4rgB,EAAW+B,aAAapic,EAAK0gc,WAAWvE,eAAgBn8b,EAAK0gc,WAAWtE,mBAAoB3tf,EAAgB,MAG5G4xf,EAAW+B,aAAaG,EAAUpF,eAAgBoF,EAAUnF,mBAAoB3uf,EAAgB,OAGhH,IAAI82f,EAAiBttgB,KAAKutgB,eAAeH,EAAWC,GAEpD,OADmBrtgB,KAAKutgB,eAAeH,EAAWC,EAAar3f,GACzCs3f,GAE1BnH,EAAe/qgB,UAAUmygB,eAAiB,SAAUH,EAAWzhgB,GAC3DA,EAASU,KAAK0zB,MAAMp0B,GACpB,IAAImG,EAAQ,EACZ,GAAIs7f,EAAU7ugB,QAAQoN,IAAW,EAC7BmG,EAAQs7f,EAAU7ugB,QAAQoN,OAEzB,CACD,IAAK,IAAIzP,EAAI,EAAGA,EAAIkxgB,EAAU5wgB,OAAQN,IAClC,GAAIkxgB,EAAUlxgB,GAAKyP,EACf,OAAOzP,EAGf4V,EAAQs7f,EAAU5wgB,OAAS,EAE/B,OAAOsV,GAEXq0f,EAAe/qgB,UAAUoygB,cAAgB,SAAU17f,EAAO0E,GAGtD,IAAK,IAFD62f,EAAa,EACbjF,EAAapogB,KAAKoogB,WACblsgB,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAIusgB,EAAazogB,KAAKq3f,aAAan7f,GAAGusgB,WACtC,GAAIvsgB,IAAM4V,EACN,MAEJu7f,GAAcjF,EAAW+B,aAAa1B,EAAWvE,eAAgBuE,EAAWtE,mBAAoB3tf,EAAgB,MAEpH,OAAO62f,GAKXlH,EAAe/qgB,UAAUqygB,wBAA0B,WAG/C,IAAK,IAFDrC,EAAkBprgB,KAAK0tgB,6BACvBx6M,EAAkBlzT,KAAKivO,SAClB/yO,EAAI,EAAGA,EAAIkvgB,EAAgB5ugB,OAAQN,IAAK,CAC7C,IAAIyxgB,EAAcvC,EAAgBlvgB,GACjByxgB,EAAYtF,SAASp5R,SAAW0+R,EAAYlF,WAAW73M,QAAU,GAEhEsC,IACdy6M,EAAYlF,WAAW73M,SAAW,KAO9Cu1M,EAAe/qgB,UAAUsygB,2BAA6B,SAAUE,GAG5D,IAFA,IAAIxC,KACA1lc,EAAMkoc,EAAU5tgB,KAAOA,KAAK6tgB,gBACxBpwgB,EAAkBioE,IAAM,CAC5B,IAAK,IAAIxpE,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IAAK,CAC9C,IAAI6rE,EAAOrC,EAAI2xb,aAAan7f,GACxB6rE,EAAK0gc,WAAW73M,QAAU,GAC1Bw6M,EAAgBzif,OAAO,EAAG,EAAGo/C,GAGrCrC,EAAMA,EAAImoc,eAEd,OAAOzC,GAKXjF,EAAe/qgB,UAAUusgB,mBAAqB,SAAUh0e,GACpD,IAAK,IAAIz3B,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAI6Q,EAAIV,KAAK0zB,MAAM//B,KAAKq3f,aAAan7f,GAAG6Q,GACxC,GAAIA,EAAI/M,KAAKq3f,aAAan7f,GAAG8iC,OAAOxyB,KAAO,GAAKmnB,EAAM5mB,GAC9CA,EAAI/M,KAAKq3f,aAAan7f,GAAG8Z,OAAU2d,EAAM5mB,EAC7C,OAAO/M,KAAKq3f,aAAan7f,GAExB,GAAIA,IAAM8D,KAAKq3f,aAAa76f,OAAS,GAClCwD,KAAKq3f,aAAan7f,GAAG6Q,EAAI/M,KAAKq3f,aAAan7f,GAAG8Z,MAAS,GAAK2d,EAAM5mB,EACtE,OAAO/M,KAAKq3f,aAAan7f,GAGjC,IAAI4xgB,OAAa5ygB,EASjB,OARI8E,KAAKq3f,aAAa76f,OAAS,IAEvBsxgB,EADA9tgB,KAAKq3f,aAAa,GAAGtqf,GAAK4mB,EAAM5mB,EACnB/M,KAAKq3f,aAAar3f,KAAKq3f,aAAa76f,OAAS,GAAGmrgB,mBAAmBh0e,GAGnE3zB,KAAKq3f,aAAa,GAAGsQ,mBAAmBh0e,IAGtDm6e,GAKX3H,EAAe/qgB,UAAUgsgB,gBAAkB,SAAU5Y,GACjD,IAAIz4e,EAAS/V,KAAK+V,OAClB,IAAKtY,EAAkBuC,KAAKq3f,cAAe,CACvC,IAAK,IAAIn7f,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAG/C,GAFa8D,KAAKq3f,aAAan7f,GACxBkrgB,gBAAgB5Y,GACnB/wf,EAAkBuC,KAAKq3f,cACvB,MAEJn7f,IAEJ8D,KAAKq3f,kBAAen8f,EAEnBuC,EAAkBuC,KAAKs3f,kBACnB75f,EAAkBuC,KAAKs3f,gBAAgBD,gBACxCr3f,KAAKs3f,gBAAgBD,aAAa1ue,OAAO3oB,KAAKs3f,gBAAgBD,aAAa94f,QAAQyB,MAAO,IACrFvC,EAAkBuC,KAAKs3f,gBAAgBD,eAA8D,IAA7Cr3f,KAAKs3f,gBAAgBD,aAAa76f,SACxFwD,KAAKs3f,2BAA2B2P,GACnCjngB,KAAKs3f,gBAAgB8P,gBAAgB5Y,GAEhCxuf,KAAKs3f,gBAAgBA,2BAA2BR,KACrD92f,KAAKs3f,gBAAgBA,gBAAgBvhf,QAAUA,GAEnD/V,KAAKs3f,gBAAgBvhf,QAAUA,GAGvC/V,KAAKqS,WAKT8zf,EAAe/qgB,UAAUiE,MAAQ,WAC7B,IAAIqmE,EAAM,IAAIygc,EACdzgc,EAAI4kc,UAAU3Q,WAAW35f,KAAKsqgB,WAC9B5kc,EAAI6jc,eAAiBvpgB,KAAKupgB,eAC1B7jc,EAAI8jc,kBAAoBxpgB,KAAKwpgB,kBAC7B,IAAK,IAAIttgB,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAI6rE,EAAO/nE,KAAKq3f,aAAan7f,GAAGmD,QAChCqmE,EAAI2xb,aAAa7yf,KAAKujE,GACtBA,EAAKuvb,gBAAkB5xb,EACvBqC,EAAKj2D,MAAQ5V,EACb6rE,EAAKknK,SAAWjvO,KAAKivO,SAMzB,OAJAvpK,EAAI34D,EAAI/M,KAAK+M,EACb24D,EAAI14D,EAAIhN,KAAKgN,EACb04D,EAAI3vD,OAAS/V,KAAK+V,OAClB2vD,EAAI1vD,MAAQhW,KAAKgW,MACV0vD,GAKXygc,EAAe/qgB,UAAUiX,QAAU,WAI/BrS,KAAKsqgB,eAAYpvgB,EACjB8E,KAAKsqgB,eAAYpvgB,EACjB8E,KAAK2pgB,wBACL3pgB,KAAK2pgB,0BAAuBzugB,EAC5B8E,KAAKupgB,oBAAiBrugB,EACtB8E,KAAKwpgB,uBAAoBtugB,EACzBo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3BmmgB,GACTM,IAKER,GAAiC,SAAU30a,GAE3C,SAAS20a,IACL,IAAIlmgB,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KASjC,OALAD,EAAMkvO,UAAY,EAClBlvO,EAAMi/B,OAAS,IAAI6kM,GAAO9jO,EAAMm8Q,WAAYn8Q,EAAMo8Q,UAAWp8Q,EAAMq8Q,YAAar8Q,EAAMs8Q,cACtFt8Q,EAAMspgB,gBAAkB,EACxBtpgB,EAAMupgB,iBAAmB,EACzBvpgB,EAAM0ogB,WAAa,IAAIrD,GAAYrlgB,GAC5BA,EA6zBX,OAx0BA0wF,GAAUw1a,EAAiB30a,GAa3BhzF,OAAOuJ,eAAeo+f,EAAgB7qgB,UAAW,eAI7CsM,IAAK,WACD,OAAO1H,KAAKoogB,WAAWqB,YAAYpmc,QAAQrjE,KAAKgvO,cAEpDrnO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo+f,EAAgB7qgB,UAAW,cAI7CsM,IAAK,WACD,OAAI1H,KAAKyogB,YAAczogB,KAAKyogB,WAAW/C,kBAC5B1lgB,KAAKyogB,WAAWvsP,WAEjBz+Q,EAAkBuC,KAAKoogB,aAAgB3qgB,EAAkBuC,KAAKoogB,WAAWpE,aAIxE,EAHAhkgB,KAAKoogB,WAAWpE,YAAY9nP,YAM3Cv0Q,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo+f,EAAgB7qgB,UAAW,aAI7CsM,IAAK,WACD,OAAI1H,KAAKyogB,YAAczogB,KAAKyogB,WAAW/C,kBAC5B1lgB,KAAKyogB,WAAWtsP,UAEjB1+Q,EAAkBuC,KAAKoogB,aAAgB3qgB,EAAkBuC,KAAKoogB,WAAWpE,aAIxE,EAHAhkgB,KAAKoogB,WAAWpE,YAAY7nP,WAM3Cx0Q,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo+f,EAAgB7qgB,UAAW,eAI7CsM,IAAK,WACD,OAAI1H,KAAKyogB,YAAczogB,KAAKyogB,WAAW/C,kBAC5B1lgB,KAAKyogB,WAAWrsP,YAEjB3+Q,EAAkBuC,KAAKoogB,aAAgB3qgB,EAAkBuC,KAAKoogB,WAAWpE,aAIxE,EAHAhkgB,KAAKoogB,WAAWpE,YAAY5nP,aAM3Cz0Q,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo+f,EAAgB7qgB,UAAW,gBAI7CsM,IAAK,WACD,OAAI1H,KAAKyogB,YAAczogB,KAAKyogB,WAAW/C,kBAC5B1lgB,KAAKyogB,WAAWpsP,aAEjB5+Q,EAAkBuC,KAAKoogB,aAAgB3qgB,EAAkBuC,KAAKoogB,WAAWpE,aAIxE,EAHAhkgB,KAAKoogB,WAAWpE,YAAY3nP,cAM3C10Q,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo+f,EAAgB7qgB,UAAW,aAI7CsM,IAAK,WACD,OAAI1H,KAAKqogB,SACErogB,KAAKqogB,SAAShR,aAAa94f,QAAQyB,OAEtC,GAEZ2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo+f,EAAgB7qgB,UAAW,cAI7CsM,IAAK,WACD,GAAI1H,KAAKs3f,2BAA2B6O,GAChC,OAAOnmgB,KAAKs3f,gBAAgB8Q,YAIpCzggB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeo+f,EAAgB7qgB,UAAW,YAI7CsM,IAAK,WACD,OAAO1H,KAAKs3f,iBAEhB3vf,YAAY,EACZC,cAAc,IAKlBq+f,EAAgB7qgB,UAAUg4C,OAAS,SAAUyyd,GACzC,OAAOA,aAAkBI,GAAmBJ,EAAO4C,aAAezogB,KAAKyogB,YAK3ExC,EAAgB7qgB,UAAU2ygB,kBAAoB,WAE1C,IADA,IAAI3oc,EAAQplE,KAAKoogB,WACVhjc,aAAiB6hc,IAAe7hc,EAAMojc,0BAA0BvC,GACnE7gc,EAAQA,EAAMojc,eAAeuF,oBAEjC,OAAO3oc,GAKX6gc,EAAgB7qgB,UAAU8qgB,uBAAyB,WAC/C,GAAIlmgB,KAAKs3f,2BAA2B6O,GAAgB,CAChD,IAAIzgc,EAAM1lE,KAAKs3f,gBACf,EAAG,CAEC,GADA5xb,EAAMA,EAAI2gc,uBACN5ogB,EAAkBioE,IAAQA,EAAI5zD,MAAQ9R,KAAKivO,SAC3C,MAEJ,IAAI++R,EAAetoc,EAAIynP,QAAQntT,KAAKivO,SAAUjvO,KAAK8R,OACnD,GAAIk8f,GAAgBhugB,KAAKozC,OAAO46d,GAC5B,OAAOA,QAENtoc,KAOjBugc,EAAgB7qgB,UAAUmrgB,mBAAqB,WAC3C,IAAI31M,EAAU5wT,KAAKyogB,WAAW73M,QAC9B,GAAI5wT,KAAKs3f,2BAA2B6O,GAAgB,CAChD,IAAIzgc,EAAM1lE,KAAKs3f,gBACf,EAAG,CAEC,GADA5xb,EAAMA,EAAI8gc,mBACN/ogB,EAAkBioE,IAAQA,EAAI5zD,MAAQ9R,KAAKivO,SAAW2hF,EACtD,MAEJ,IAAIq9M,EAAWvoc,EAAIynP,QAAQntT,KAAKivO,SAAUjvO,KAAK8R,OAC/C,GAAIm8f,GAAYjugB,KAAKozC,OAAO66d,GACxB,OAAOA,QAENvoc,KAOjBugc,EAAgB7qgB,UAAUusgB,mBAAqB,SAAUh0e,GACrD,IAAK,IAAIz3B,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAC1C,GAAI8D,KAAKq3f,aAAan7f,GAAG8Q,GAAK2mB,EAAM3mB,GAC5BhN,KAAKq3f,aAAan7f,GAAG8Q,EAAIhN,KAAKq3f,aAAan7f,GAAG6Z,QAAW4d,EAAM3mB,EACnE,OAAOhN,KAAKq3f,aAAan7f,GAAGyrgB,mBAAmBh0e,GAGvD,IAAIk0e,OAAkB3sgB,EAStB,OARI8E,KAAKq3f,aAAa76f,OAAS,IAEvBqrgB,EADA7ngB,KAAKq3f,aAAa,GAAGrqf,GAAK2mB,EAAM3mB,EACdhN,KAAKq3f,aAAar3f,KAAKq3f,aAAa76f,OAAS,GAAGmrgB,mBAAmBh0e,GAGnE3zB,KAAKq3f,aAAa,GAAGsQ,mBAAmBh0e,IAG3Dk0e,GAKX5B,EAAgB7qgB,UAAUs6R,YAAc,SAAUwuO,GACH,SAAvClkgB,KAAKyogB,WAAWtE,oBAChBnkgB,KAAKyogB,WAAWvE,eAAiBA,EACjClkgB,KAAKyogB,WAAWtE,mBAAqB,SAEO,UAAvCnkgB,KAAKyogB,WAAWtE,mBACrBnkgB,KAAKyogB,WAAWvE,eAAiBA,EAEW,YAAvClkgB,KAAKyogB,WAAWtE,qBACrBnkgB,KAAKyogB,WAAWvE,eAAiBlkgB,KAAKisgB,sBAAsB/H,IAEhElkgB,KAAKyogB,WAAWv6M,UAAYg2M,GAKhC+B,EAAgB7qgB,UAAU6wgB,sBAAwB,SAAUiC,GACxD,IAAInxgB,EAAQ,EACR6yB,EAAc5vB,KAAKoogB,WAAW0B,eAAc,GAIhD,OAFA/sgB,EAASmxgB,EADQlugB,KAAKoogB,WAAW6B,oBAAoBr6e,GACT,KAC5C7yB,EAAQsP,KAAK0zB,MAAMhjC,IACJ,IAAMA,EAAQ,KAKjCkpgB,EAAgBkI,kBAAoB,SAAUtE,GAC1C,IAAIuE,OAAalzgB,EACbmzgB,EAAaxE,EAAUpB,WAAW56M,QAClCygN,EAAc7wgB,EAAkBosgB,EAAUxB,eAAmDntgB,EAAvC2ugB,EAAUxB,SAASiC,UAAUz8M,QACnF0gN,EAAgB9wgB,EAAkBosgB,EAAUzB,iBAAyDltgB,EAA3C2ugB,EAAUzB,WAAWpE,YAAYn2M,QAO/F,GANKpwT,EAAkB4wgB,EAAW7hgB,QAC9B4hgB,EAAaC,EAAW7hgB,MAExB/O,EAAkB2wgB,KAClBA,EAAavE,EAAU2E,iCAAiCJ,EAAYE,EAAYC,IAEhF1E,EAAUzB,WAAWpE,YAAY3zM,YAAc,EAC/C+9M,EAAavE,EAAU2E,iCAAiCJ,EAAYE,EAAYC,OAE/E,CACD,IAAIE,OAAWvzgB,EACf,GAAKuC,EAAkBosgB,EAAUgE,iBAI5B,IAAKhE,EAAUpB,WAAW31M,WAAa,GAAK+2M,EAAU76R,YAAc,IAAM66R,EAAUxB,SAASp5R,SAAW,EAEzG,IADA,IAAIy/R,EAAc7E,EAAUxB,SAASwF,gBAC7BpwgB,EAAkBixgB,IAAgBA,EAAYrX,aAAa76f,OAAS,GAAG,CAC3E,IAAK,IAAIN,EAAI,EAAGA,EAAIwygB,EAAYrX,aAAa76f,OAAQN,IAAK,CACtD,IAAIyygB,EAAcD,EAAYrX,aAAan7f,GAC3C,GAAIyygB,EAAY3/R,YAAc2/R,EAAYlG,WAAW31M,aAAe+2M,EAAU76R,YAAa,CACvFy/R,EAAWC,EAAYrX,aAAan7f,GACpC,OAGR,IAAKuB,EAAkBgxgB,GACnB,MAEJC,EAAcA,EAAYb,qBAf9BY,EAAW5E,EAAUgE,eAkBzBO,EAAavE,EAAU+E,0BAA0BR,EAAYK,GAKjE,OAHIhxgB,EAAkB2wgB,KAClBA,EAAa,IAAInN,GAAQ4I,EAAUpB,WAAW56M,UAE3CugN,GAKXnI,EAAgB7qgB,UAAUyzgB,mBAAqB,WAW3C,OAVkB,GAetB5I,EAAgB7qgB,UAAU0zgB,oBAAsB,WAE3B9ugB,KAAKoogB,WAWtB,OAZkB,GAiBtBnC,EAAgB7qgB,UAAU2zgB,eAAiB,WACvC,IAAIC,EAAoBhvgB,KAAKoogB,YAAcpogB,KAAKoogB,WAAWpE,YAAchkgB,KAAKoogB,WAAWpE,YAAY3zM,YAAc,EAYnH,OAT0C,IAAtCrwT,KAAKqogB,SAAShR,aAAa76f,OACe,EAApBwygB,EAEE,IAAnBhvgB,KAAKuzT,WAAmBvzT,KAAKuzT,YAAcvzT,KAAKqogB,SAAShR,aAAa76f,OAAS,EAC9DwygB,EAAqBA,EAAoB,EAGzCA,GAO9B/I,EAAgB7qgB,UAAUgvgB,yBAA2B,WAGjD,OADepqgB,KAAKk8Q,WAAal8Q,KAAKo8Q,YAAcp8Q,KAAK6ugB,qBAAuB7ugB,KAAK8ugB,sBAAwB9ugB,KAAK+ugB,kBAMtH9I,EAAgB7qgB,UAAUwzgB,0BAA4B,SAAUR,EAAYJ,GAExE,GAAKvwgB,EAAkBuwgB,KAAmBvwgB,EAAkB2wgB,IAAyC,SAAzBA,EAAWjmS,YAAyBimS,EAAWa,cACvH,KAAKxxgB,EAAkB2wgB,IAAiBA,EAAWhV,UAAUA,qBAAqBmK,IAE9E,OAAOvjgB,KAAKwugB,iCAAiCJ,EAAYjI,GAAekG,SAAS+B,EAAWhV,WAAWkR,UAAUz8M,QAASo5M,GAAYmF,WAAWgC,EAAWhV,WAAW4K,YAAYn2M,aAGtL,CACD,IAAIqhN,OAAsBh0gB,EAK1B,GAHKuC,EAAkBuwgB,EAAavF,WAAW56M,UAAapwT,EAAkBuwgB,EAAavF,WAAW56M,QAAQphT,QAA8D,SAApDuhgB,EAAavF,WAAW56M,QAAQphT,MAAM07N,YAC1J+mS,EAAsBlB,EAAavF,WAAW56M,QAAQphT,QAErDhP,EAAkByxgB,IAA0D,SAAlCA,EAAoB/mS,UAC/D,OAAOnoO,KAAKmvgB,yBAAyBD,EAAqBd,GAEzD,KAAK3wgB,EAAkB2wgB,IAAiBA,EAAWhV,UAAUA,qBAAqBmK,IAEnF,OAAOvjgB,KAAKwugB,iCAAiCJ,EAAYjI,GAAekG,SAAS+B,EAAWhV,WAAWkR,UAAUz8M,QAASo5M,GAAYmF,WAAWgC,EAAWhV,WAAW4K,YAAYn2M,SAG3L,OAAOugN,GAKXnI,EAAgB7qgB,UAAU+zgB,yBAA2B,SAAUroe,EAAQsoe,GAGnE,GAAI3xgB,EAAkBqpC,GAClB,OAAOsoe,EAEN,GAAI3xgB,EAAkB2xgB,GACvB,OAAOtoe,EAEX,IAAIuoe,EAAevoe,EAAO46d,kBACtB4N,EAAuBF,EAAe1N,kBAE1C,GAAI2N,IAAiBC,EAAsB,CAEvC,IAAIC,EAAiBzoe,EAAOk7d,gBACxBwN,EAAyBJ,EAAepN,gBAC5C,GAAIuN,IAAmBC,EAAwB,CAE3C,IAAIC,EAAiBzvgB,KAAK0vgB,gBAAgB5oe,EAAOzQ,OAC7Cs5e,EAAKF,EAAetwe,EACpBywe,EAAKH,EAAerwe,EACpBywe,EAAKJ,EAAev/e,EACpB4/e,EAAyB9vgB,KAAK0vgB,gBAAgBN,EAAe/4e,OAC7D05e,EAAKD,EAAuB3we,EAC5B6we,EAAKF,EAAuB1we,EAC5B6we,EAAKH,EAAuB5/e,EAC5Bggf,EAAoBP,EAAKE,EAAM,EAAID,EACnCO,EAA4BJ,EAAKE,EAAM,EAAID,EAC/C,OAAIE,IAAqBC,GACrBD,EAAoBL,EAAM,EAAID,EAC9BO,EAA4BF,EAAM,EAAID,EAClCE,IAAqBC,EACjBP,IAAOI,EACAlpe,EAEF8oe,EAAKI,EACHZ,EAGAtoe,EAGNope,EAAmBC,EACjBf,EAGAtoe,GAGNope,EAAmBC,EACjBf,EAGAtoe,EAGV,OAAIyoe,EAAiBC,EACf1oe,EAGAsoe,EAGV,OAAIC,EAAeC,EACbxoe,EAGAsoe,GAMfnJ,EAAgB7qgB,UAAUozgB,iCAAmC,SAAUJ,EAAYE,EAAYC,GAC3F,OAAK9wgB,EAAkB2wgB,IAAyC,SAAzBA,EAAWjmS,aAAyBimS,EAAWa,cAEvD,SAAzBb,EAAWjmS,WAAiD,IAAzBimS,EAAW56a,WAAwC,YAArB46a,EAAW/3e,QAIxE54B,EAAkB2wgB,IAAgBA,EAAWhV,qBAAqB6I,IAA6E,IAAhEgE,EAAgBkH,UAAUiB,EAAWhV,WAAWpqR,aAChIvxO,EAAkB8wgB,IAAkB9wgB,EAAkB8wgB,EAAa/hgB,QACpE4hgB,EAAaG,EAAa/hgB,MAEvB4hgB,GAED3wgB,EAAkB6wgB,IACpB7wgB,EAAkB6wgB,EAAWxqY,WAA+C,SAAlCwqY,EAAWxqY,SAASqkG,UAG5D1qO,EAAkB8wgB,IACpB9wgB,EAAkB8wgB,EAAazqY,WAAiD,SAApCyqY,EAAazqY,SAASqkG,UAI/DimS,EAHAA,EAAaG,EAAazqY,SAJ1BsqY,EAAaE,EAAWxqY,SAXxBsqY,GAwBfnI,EAAgBmK,mBAAqB,SAAUvG,GAC3C,IAAIwG,OAAcn1gB,EACdmzgB,EAAaxE,EAAUpB,WAAW56M,QAClCygN,EAAc7wgB,EAAkBosgB,EAAUxB,eAAmDntgB,EAAvC2ugB,EAAUxB,SAASiC,UAAUz8M,QACnF0gN,EAAgB9wgB,EAAkBosgB,EAAUzB,iBAAyDltgB,EAA3C2ugB,EAAUzB,WAAWpE,YAAYn2M,QAO/F,GANKpwT,EAAkB4wgB,EAAW5hgB,SAC9B4jgB,EAAchC,EAAW5hgB,OAEzBhP,EAAkB4ygB,KAClBA,EAAcxG,EAAUyG,kCAAkCD,EAAa/B,EAAYC,IAEnF1E,EAAUzB,WAAWpE,YAAY3zM,YAAc,EAC/CggN,EAAcxG,EAAUyG,kCAAkCD,EAAa/B,EAAYC,OAElF,CACD,IAAIN,OAAW/ygB,EACVuC,EAAkBosgB,EAAU0G,cAC7BtC,EAAWpE,EAAU0G,YAGzBF,EAAcxG,EAAU2G,2BAA2BH,EAAapC,GAKpE,OAHIxwgB,EAAkB4ygB,KAClBA,EAAc,IAAIpP,GAAQ4I,EAAUpB,WAAW56M,UAE5CwiN,GAKXpK,EAAgB7qgB,UAAUo1gB,2BAA6B,SAAUH,EAAapC,GAE1E,GAAIxwgB,EAAkBwwgB,KAAexwgB,EAAkB4ygB,IAA2C,SAA1BA,EAAYloS,YAAyBkoS,EAAYpB,cACrH,KAAKxxgB,EAAkB4ygB,IAAkBA,EAAYjX,UAAUA,qBAAqBmK,IAEhF,OAAOvjgB,KAAKswgB,kCAAkCD,EAAalK,GAAekG,SAASgE,EAAYjX,WAAWkR,UAAUz8M,QAASo5M,GAAYmF,WAAWiE,EAAYjX,WAAW4K,YAAYn2M,aAG1L,CACD,IAAI4iN,OAAqBv1gB,EAKzB,GAHKuC,EAAkBwwgB,EAASxF,WAAW56M,UAAapwT,EAAkBwwgB,EAASxF,WAAW56M,QAAQrhT,OAAwD,SAA/CyhgB,EAASxF,WAAW56M,QAAQrhT,KAAK27N,YAC5IsoS,EAAqBxC,EAASxF,WAAW56M,QAAQrhT,OAEhD/O,EAAkBgzgB,IAAwD,SAAjCA,EAAmBtoS,UAC7D,OAAOnoO,KAAKmvgB,yBAAyBkB,EAAaI,GAEjD,KAAKhzgB,EAAkB4ygB,IAAkBA,EAAYjX,UAAUA,qBAAqBmK,IAErF,OAAOvjgB,KAAKswgB,kCAAkCD,EAAalK,GAAekG,SAASgE,EAAYjX,WAAWkR,UAAUz8M,QAASo5M,GAAYmF,WAAWiE,EAAYjX,WAAW4K,YAAYn2M,SAG/L,OAAOwiN,GAKXpK,EAAgB7qgB,UAAUk1gB,kCAAoC,SAAUD,EAAa/B,EAAYC,GAC7F,OAAK9wgB,EAAkB4ygB,IAA2C,SAA1BA,EAAYloS,aAAyBkoS,EAAYpB,cAEzD,SAA1BoB,EAAYloS,WAAkD,IAA1BkoS,EAAY78a,WAAyC,YAAtB68a,EAAYh6e,QAI3E54B,EAAkB4ygB,IAAiBA,EAAYjX,qBAAqB6I,IAAagE,EAAgBkH,UAAUkD,EAAYjX,WAAWpqR,cAAgBi3R,EAAgBkH,UAAUkD,EAAYjX,WAAWiP,SAAShR,aAAa76f,OAAS,GACnOiB,EAAkB8wgB,IAAkB9wgB,EAAkB8wgB,EAAa9hgB,SACpE4jgB,EAAc9B,EAAa9hgB,OAExB4jgB,GAED5ygB,EAAkB6wgB,IACpB7wgB,EAAkB6wgB,EAAWxqY,WAA+C,SAAlCwqY,EAAWxqY,SAASqkG,UAG5D1qO,EAAkB8wgB,IACpB9wgB,EAAkB8wgB,EAAazqY,WAAiD,SAApCyqY,EAAazqY,SAASqkG,UAI/DkoS,EAHAA,EAAc9B,EAAazqY,SAJ3BusY,EAAc/B,EAAWxqY,SAXzBusY,GAwBfpK,EAAgByK,iBAAmB,SAAU7G,GACzC,IAAI8G,OAAYz1gB,EACZmzgB,EAAaxE,EAAUpB,WAAW56M,QAClCygN,EAAc7wgB,EAAkBosgB,EAAUxB,eAAmDntgB,EAAvC2ugB,EAAUxB,SAASiC,UAAUz8M,QACnF0gN,EAAgB9wgB,EAAkBosgB,EAAUzB,iBAAyDltgB,EAA3C2ugB,EAAUzB,WAAWpE,YAAYn2M,QAO/F,GANKpwT,EAAkB4wgB,EAAW3hgB,OAC9BikgB,EAAYtC,EAAW3hgB,KAEvBjP,EAAkBkzgB,KAClBA,EAAY9G,EAAU+G,gCAAgCD,EAAWrC,EAAYC,IAE7E1E,EAAUzB,WAAWpE,YAAY3zM,YAAc,EAC/CsgN,EAAY9G,EAAU+G,gCAAgCD,EAAWrC,EAAYC,OAE5E,CAID,IAHA,IAAIsC,OAAc31gB,EAEd41gB,EAAUjH,EAAUxB,SAASwF,gBACzBpwgB,EAAkBqzgB,IAAYA,EAAQzZ,aAAa76f,OAAS,GAAG,CACnE,IAAK,IAAIN,EAAI,EAAGA,EAAI40gB,EAAQzZ,aAAa76f,OAAQN,IAAK,CAElD,IADIyygB,EAAcmC,EAAQzZ,aAAan7f,IACvB8yO,YAAc2/R,EAAYlG,WAAW31M,WAAa,GAAK+2M,EAAU76R,YAAa,CAC1F6hS,EAAcC,EAAQzZ,aAAan7f,GACnC,OAGR,IAAKuB,EAAkBozgB,GACnB,MAKJ,GAHAC,EAAUA,EAAQjD,eAGdpwgB,EAAkBqzgB,IAAYrzgB,EAAkBozgB,GAEhD,GADAC,EAAUjH,EAAUxB,SAASwF,eACzBhE,EAAU76R,YAAc8hS,EAAQzZ,aAAa76f,OAC7C,IAASN,EAAI,EAAGA,EAAI40gB,EAAQzZ,aAAa76f,OAAQN,IAAK,CAClD,IAAIyygB,EACJ,IADIA,EAAcmC,EAAQzZ,aAAan7f,IACvB8yO,cAAgB66R,EAAU76R,YAAa,CACnD6hS,EAAcC,EAAQzZ,aAAan7f,GACnC,YAOR20gB,EAAchH,EAAUxB,SAASwF,eAAexW,aAAawS,EAAUxB,SAASwF,eAAexW,aAAa76f,OAAS,GAKjIm0gB,EAAY9G,EAAUkH,yBAAyBJ,EAAWE,GAK9D,OAHIpzgB,EAAkBkzgB,KAClBA,EAAY,IAAI1P,GAAQ4I,EAAUpB,WAAW56M,UAE1C8iN,GAKX1K,EAAgB7qgB,UAAU21gB,yBAA2B,SAAUJ,EAAWK,GAEtE,GAAIvzgB,EAAkBuzgB,KAAsBvzgB,EAAkBkzgB,IAAuC,SAAxBA,EAAUxoS,YAAyBwoS,EAAU1B,cACtH,KAAKxxgB,EAAkBkzgB,IAAgBA,EAAUvX,UAAUA,qBAAqBmK,IAE5E,OAAOvjgB,KAAK4wgB,gCAAgCD,EAAWxK,GAAekG,SAASsE,EAAUvX,WAAWkR,UAAUz8M,QAASo5M,GAAYmF,WAAWuE,EAAUvX,WAAW4K,YAAYn2M,aAGlL,CACD,IAAIojN,OAA0B/1gB,EAK9B,GAHKuC,EAAkBuzgB,EAAgBvI,WAAW56M,UAAapwT,EAAkBuzgB,EAAgBvI,WAAW56M,QAAQlhT,SAAmE,SAAxDqkgB,EAAgBvI,WAAW56M,QAAQlhT,OAAOw7N,YACrK8oS,EAA0BD,EAAgBvI,WAAW56M,QAAQlhT,SAE5DlP,EAAkBwzgB,IAAkE,SAAtCA,EAAwB9oS,UACvE,OAAOnoO,KAAKmvgB,yBAAyBwB,EAAWM,GAE/C,KAAKxzgB,EAAkBkzgB,IAAgBA,EAAUvX,UAAUA,qBAAqBmK,IAEjF,OAAOvjgB,KAAK4wgB,gCAAgCD,EAAWxK,GAAekG,SAASsE,EAAUvX,WAAWkR,UAAUz8M,QAASo5M,GAAYmF,WAAWuE,EAAUvX,WAAW4K,YAAYn2M,SAGvL,OAAO8iN,GAKX1K,EAAgB7qgB,UAAUw1gB,gCAAkC,SAAUD,EAAWrC,EAAYC,GACzF,OAAK9wgB,EAAkBkzgB,IAAuC,SAAxBA,EAAUxoS,aAAyBwoS,EAAU1B,cAErD,SAAxB0B,EAAUxoS,WAAgD,IAAxBwoS,EAAUn9a,WAAuC,YAApBm9a,EAAUt6e,QAIrE54B,EAAkBkzgB,IAAeA,EAAUvX,qBAAqB6I,IAAkF,IAArEgE,EAAgBkH,UAAUwD,EAAUvX,WAAWiP,SAASp5R,UACtIxxO,EAAkB8wgB,IAAkB9wgB,EAAkB8wgB,EAAa7hgB,OACpEikgB,EAAYpC,EAAa7hgB,KAEtBikgB,GAEDlzgB,EAAkB6wgB,IACpB7wgB,EAAkB6wgB,EAAWzqY,aAAmD,SAApCyqY,EAAWzqY,WAAWskG,UAGhE1qO,EAAkB8wgB,IACpB9wgB,EAAkB8wgB,EAAa1qY,aAAqD,SAAtC0qY,EAAa1qY,WAAWskG,UAInEwoS,EAHAA,EAAYpC,EAAa1qY,WAJzB8sY,EAAYrC,EAAWzqY,WAXvB8sY,GAwBf1K,EAAgBiL,oBAAsB,SAAUrH,GAC5C,IAAIsH,OAAej2gB,EACfmzgB,EAAaxE,EAAUpB,WAAW56M,QAClCygN,EAAc7wgB,EAAkBosgB,EAAUxB,eAAmDntgB,EAAvC2ugB,EAAUxB,SAASiC,UAAUz8M,QACnF0gN,EAAgB9wgB,EAAkBosgB,EAAUzB,iBAAyDltgB,EAA3C2ugB,EAAUzB,WAAWpE,YAAYn2M,QAQ/F,GAPKpwT,EAAkB4wgB,EAAW1hgB,UAC9BwkgB,EAAe9C,EAAW1hgB,QAE1BlP,EAAkB0zgB,KAElBA,EAAetH,EAAUuH,mCAAmCD,EAAc7C,EAAYC,IAEtF1E,EAAUzB,WAAWpE,YAAY3zM,YAAc,EAC/C8gN,EAAetH,EAAUuH,mCAAmCD,EAAc7C,EAAYC,OAErF,CACD,IAAI8C,OAAiBn2gB,EACjBo2gB,EAAUzH,EAAUxB,SAASkI,YAC5B9ygB,EAAkB6zgB,IAAYzH,EAAU76R,YAAcsiS,EAAQja,aAAa76f,SAC5E60gB,EAAiBC,EAAQja,aAAawS,EAAU76R,cAGpDmiS,EAAetH,EAAU0H,4BAA4BJ,EAAcE,GAKvE,OAHI5zgB,EAAkB0zgB,KAClBA,EAAe,IAAIlQ,GAAQ4I,EAAUpB,WAAW56M,UAE7CsjN,GAKXlL,EAAgB7qgB,UAAUm2gB,4BAA8B,SAAUJ,EAAcE,GAE5E,GAAI5zgB,EAAkB4zgB,KAAqB5zgB,EAAkB0zgB,IAA6C,SAA3BA,EAAahpS,YAAyBgpS,EAAalC,cAC9H,KAAKxxgB,EAAkB0zgB,IAAmBA,EAAa/X,UAAUA,qBAAqBmK,IAElF,OAAOvjgB,KAAKoxgB,mCAAmCD,EAAchL,GAAekG,SAAS8E,EAAa/X,WAAWkR,UAAUz8M,QAASo5M,GAAYmF,WAAW+E,EAAa/X,WAAW4K,YAAYn2M,aAG9L,CACD,IAAI2jN,OAA0Bt2gB,EAK9B,GAHKuC,EAAkB4zgB,EAAe5I,WAAW56M,UAAapwT,EAAkB4zgB,EAAe5I,WAAW56M,QAAQnhT,MAA4D,SAApD2kgB,EAAe5I,WAAW56M,QAAQnhT,IAAIy7N,YAC5JqpS,EAA0BH,EAAe5I,WAAW56M,QAAQnhT,MAE3DjP,EAAkB+zgB,IAAkE,SAAtCA,EAAwBrpS,UACvE,OAAOnoO,KAAKmvgB,yBAAyBgC,EAAcK,GAElD,KAAK/zgB,EAAkB0zgB,IAAmBA,EAAa/X,UAAUA,qBAAqBmK,IAEvF,OAAOvjgB,KAAKoxgB,mCAAmCD,EAAchL,GAAekG,SAAS8E,EAAa/X,WAAWkR,UAAUz8M,QAASo5M,GAAYmF,WAAW+E,EAAa/X,WAAW4K,YAAYn2M,SAGnM,OAAOsjN,GAKXlL,EAAgB7qgB,UAAUg2gB,mCAAqC,SAAUD,EAAc7C,EAAYC,GAC/F,OAAK9wgB,EAAkB0zgB,IAA6C,SAA3BA,EAAahpS,aAAyBgpS,EAAalC,cAE3D,SAA3BkC,EAAahpS,WAAmD,IAA3BgpS,EAAa39a,WAA0C,YAAvB29a,EAAa96e,QAI9E54B,EAAkB0zgB,IAAkBA,EAAa/X,qBAAqB6I,IAAagE,EAAgBkH,UAAUgE,EAAa/X,WAAWiP,SAASp5R,SAAWg3R,EAAgBkH,UAAUgE,EAAa/X,WAAWqP,WAAW73M,UAAYq1M,EAAgBkH,UAAUgE,EAAa/X,WAAWgP,WAAW/Q,aAAa76f,QAC7SiB,EAAkB8wgB,IAAkB9wgB,EAAkB8wgB,EAAa5hgB,UACpEwkgB,EAAe5C,EAAa5hgB,QAEzBwkgB,GAED1zgB,EAAkB6wgB,IACpB7wgB,EAAkB6wgB,EAAWzqY,aAAmD,SAApCyqY,EAAWzqY,WAAWskG,UAGhE1qO,EAAkB8wgB,IACpB9wgB,EAAkB8wgB,EAAa1qY,aAAqD,SAAtC0qY,EAAa1qY,WAAWskG,UAInEgpS,EAHAA,EAAe5C,EAAa1qY,WAJ5BstY,EAAe7C,EAAWzqY,WAX1BstY,GAqBflL,EAAgB7qgB,UAAUs0gB,gBAAkB,SAAU7ve,GAClD,GAAIA,EAAW,CACXA,EAAYA,EAAU5iC,QAAQ,oBAAqB,IACnD,IAAIw0gB,EAAY78e,SAASiL,EAAW,IAIpC,OAASV,EAHAsye,GAAa,GAAM,IAGXrye,EAFRqye,GAAa,EAAK,IAEFvhf,EADL,IAAZuhf,KAQhBxL,EAAgBkH,UAAY,SAAU5sgB,GAClC,GAAIA,aAAgB0hgB,GAChB,OAAI1hgB,EAAK64f,qBAAqBgM,IAAe7kgB,EAAK64f,UAAUA,qBAAqB6M,EACtE1lgB,EAAK64f,UAAUA,eAGtB,GAQZ6M,EAAgB7qgB,UAAUgsgB,gBAAkB,SAAU5Y,GAKlD,IAAK/wf,EAAkBuC,KAAKq3f,cAAe,CACvC,IAAK,IAAIn7f,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAI2pgB,EAAS7lgB,KAAKq3f,aAAan7f,GAE3B2pgB,EAAOuB,gBAAgB5Y,GAK3Btyf,IAEJ8D,KAAKq3f,kBAAen8f,EAExB8E,KAAKqS,WAKT4zf,EAAgB7qgB,UAAUiE,MAAQ,WAC9B,IAAI0oE,EAAO,IAAIk+b,EACfl+b,EAAK0gc,WAAW9O,WAAW35f,KAAKyogB,YAChC,IAAK,IAAIvsgB,EAAI,EAAGA,EAAI8D,KAAKq3f,aAAa76f,OAAQN,IAAK,CAC/C,IAAIgsgB,EAAQlogB,KAAKq3f,aAAan7f,GAAGmD,QACjC0oE,EAAKsvb,aAAa7yf,KAAK0jgB,GACvBA,EAAM5Q,gBAAkBvvb,EACxBmgc,EAAMp2f,MAAQ5V,EAYlB,OAVA6rE,EAAKshc,gBAAkBrpgB,KAAKqpgB,gBAC5Bthc,EAAKuhc,iBAAmBtpgB,KAAKspgB,iBACzBtpgB,KAAKg/B,SACL+oC,EAAK/oC,OAASh/B,KAAKg/B,OAAO3/B,SAE9B0oE,EAAKinK,YAAchvO,KAAKgvO,YACxBjnK,EAAKh7D,EAAI/M,KAAK+M,EACdg7D,EAAK/6D,EAAIhN,KAAKgN,EACd+6D,EAAKhyD,OAAS/V,KAAK+V,OACnBgyD,EAAK/xD,MAAQhW,KAAKgW,MACX+xD,GAKXk+b,EAAgB7qgB,UAAUiX,QAAU,WAIhCrS,KAAKyogB,gBAAavtgB,EAClB8E,KAAKivO,cAAW/zO,EAChB8E,KAAKgvO,iBAAc9zO,EACnBo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3BimgB,GACTQ,IAKEY,GAA4B,WAI5B,SAASA,EAAWqK,GAIhB1xgB,KAAKoa,YAILpa,KAAK+M,EAAI,EAIT/M,KAAKgN,EAAI,EAIThN,KAAKgW,MAAQ,EAIbhW,KAAK+V,OAAS,EACd/V,KAAKi3f,UAAYya,EA+NrB,OA7NApzgB,OAAOuJ,eAAew/f,EAAWjsgB,UAAW,gBAIxCsM,IAAK,WACD,OAAI1H,KAAKi3f,WAAaj3f,KAAKi3f,UAAUI,aAC1Br3f,KAAKi3f,UAAUI,aAAa94f,QAAQyB,OAEvC,GAEZ2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/f,EAAWjsgB,UAAW,YAIxCsM,IAAK,WACD,IAAIuvf,EAAYj3f,KAAKi3f,UACjBxtN,EAAYzpS,KAAK8lgB,aACrB,GAAIr8N,GAAawtN,EAAUI,aAAa76f,OAAS,EAC7C,OAAOy6f,EAAUI,aAAa5tN,EAAY,GAEzC,GAAIwtN,EAAU6P,gBAAiB,CAChC,IAAI78c,EAAOgtc,EAAU6P,gBAAgB9pf,WACrC,GAAIitC,aAAgBo9c,GAAcp9c,EAAKgtc,UAAU7jd,OAAOpzC,KAAKi3f,WACzD,OAAOhtc,IAKnBtiD,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/f,EAAWjsgB,UAAW,gBAIxCsM,IAAK,WACD,IAAIuvf,EAAYj3f,KAAKi3f,UACjBxtN,EAAYzpS,KAAK8lgB,aACjB6L,EAAiB1a,EAAU2P,oBAC/B,GAAIn9N,EAAY,EACZ,OAAOwtN,EAAUI,aAAa5tN,EAAY,GAEzC,GAAIkoO,aAA0Bza,GAAiB,CAChD,IAAIjtc,EAAO0nd,EAAej4X,UAC1B,GAAIzvF,aAAgBo9c,GAAcp9c,EAAKgtc,UAAU7jd,OAAOpzC,KAAKi3f,WACzD,OAAOhtc,IAKnBtiD,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/f,EAAWjsgB,UAAW,uBAIxCsM,IAAK,WACD,GAAI1H,KAAKoa,SAAS5d,OAAS,EAAG,CAC1B,IAAIo1gB,EAAc5xgB,KAAKoa,SAASpa,KAAKoa,SAAS5d,OAAS,GACvD,GAAIo1gB,aAAuBhJ,GACvB,OAAOgJ,EAAYzJ,YAG3B,OAAO,GAEXxggB,YAAY,EACZC,cAAc,IAKlBy/f,EAAWjsgB,UAAUy2gB,YAAc,WAC/B,IAAI//f,EAAQ9R,KAAK8lgB,aACjB,OAAIh0f,GAAS,QAA4C5W,IAAvC8E,KAAKi3f,UAAU2P,qBACZ,IAAV90f,GAOfu1f,EAAWjsgB,UAAU02gB,WAAa,WAC9B,IAAIhggB,EAAQ9R,KAAK8lgB,aACjB,OAAIh0f,GAAS,QAAwC5W,IAAnC8E,KAAKi3f,UAAU6P,iBACtBh1f,IAAU9R,KAAKi3f,UAAUI,aAAa76f,OAAS,GAO9D6qgB,EAAWjsgB,UAAUmhE,UAAY,SAAUiiG,EAAQ1sJ,GAC/C,GAAIrU,EAAkB+gK,GAClB,OAAO1sJ,EAKX,IAAK,IAHDiggB,EAAYjggB,EACZm4C,EAAOu0G,EAAOv0G,KAET/tD,GADOsiK,EAAOv0G,KAAKgtc,UAAUI,aAAa94f,QAAQigK,EAAOv0G,MACrD,GAAG/tD,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAAK,CAC3C,IAAIysgB,EAAgB1+c,EAAK7vC,SAASle,GAClC,GAAIsiK,IAAWmqW,EACX,MAEAA,aAAyBQ,KAG7B4I,GAAapJ,EAAcnsgB,QAE/B,OAAOu1gB,GAKX1K,EAAWjsgB,UAAU42gB,aAAe,WAGhC,IAAK,IAFDnH,EAAc,EACd3rf,EAAQ,EACHhjB,EAAI,EAAGA,EAAI8D,KAAKoa,SAAS5d,OAAQN,IAAK,CAC3C,IAAIysgB,EAAgB3ogB,KAAKoa,SAASle,GACL,IAAzBysgB,EAAcnsgB,SAGdmsgB,aAAyBQ,MAGzBR,aAAyBC,IAAkBD,aAAyBE,IACjEF,aAAyBG,IAAuBH,aAAyBlJ,IACzEX,GAAcU,uBAAuBmJ,MACxCkC,EAAc3rf,EAAQypf,EAAcnsgB,QAExC0iB,GAASypf,EAAcnsgB,SAE3B,OAAOqugB,GAKXxD,EAAWjsgB,UAAU2tgB,UAAY,SAAUp9f,EAAQq9f,GAC/C,IAAIL,OAAgBztgB,EAChBgkB,EAAQ,EACR+pf,GAAY,EAChB,GAA6B,IAAzBjpgB,KAAKoa,SAAS5d,QACVwD,KAAKiygB,aAAc,CACnB,IAAIC,EAAalygB,KAAKiygB,aAAa73f,SAASpa,KAAKiygB,aAAa73f,SAAS5d,OAAS,GAChF,GAAI01gB,aAAsBtJ,IAAsC,OAApBsJ,EAAWljf,KAGnD,OAFA25e,EAAgB3ogB,KAAKiygB,aAAa73f,SAASpa,KAAKiygB,aAAa73f,SAAS5d,OAAS,GAC/EwsgB,EAAgB,GACPhogB,QAAW2ngB,EAAe72f,MAASk3f,GAIxD,IAAK,IAAI9sgB,EAAI,EAAGA,EAAI8D,KAAKoa,SAAS5d,OAAQN,IAEtC,MADAysgB,EAAgB3ogB,KAAKoa,SAASle,cACDitgB,IAA7B,CAQA,IALKF,IAAcN,aAAyBC,IAAkBD,aAAyBE,IAChFF,aAAyBG,IACzBH,aAAyBlJ,IAAmBX,GAAcU,uBAAuBmJ,MACpFM,GAAY,GAEZA,GAAat9f,GAAUuT,EAAQypf,EAAcnsgB,OAE7C,OADAwsgB,EAAiBr9f,EAASuT,GACjBle,QAAW2ngB,EAAe72f,MAASk3f,GAEhD9pf,GAASypf,EAAcnsgB,OAK3B,OAHImP,EAASuT,IACT8pf,EAAgBvrgB,EAAkBkrgB,GAAiBh9f,EAASg9f,EAAcnsgB,SAErEwE,QAAW2ngB,EAAe72f,MAASk3f,IAKhD3B,EAAWjsgB,UAAUosgB,qBAAuB,SAAUC,GAGlD,OADAA,EADWzngB,KACci3f,UAAUI,aAAa94f,QADrCyB,MACqD,IAAMyngB,EAD3DzngB,KAEFi3f,qBAAqBwP,GAFnBzmgB,KAGKi3f,UAAUuQ,qBAAqBC,GAExCA,GAKXJ,EAAWjsgB,UAAUiE,MAAQ,WAEzB,IAAK,IADD4qD,EAAO,IAAIo9c,OAAWnsgB,GACjBwoB,EAAI,EAAGA,EAAI1jB,KAAKoa,SAAS5d,OAAQknB,IAAK,CAC3C,IACIrkB,EADUW,KAAKoa,SAASsJ,GACRrkB,QACpB4qD,EAAK7vC,SAAS5V,KAAKnF,GACnBA,EAAM4qD,KAAOA,EAIjB,OAFAA,EAAKj0C,MAAQhW,KAAKgW,MAClBi0C,EAAKl0C,OAAS/V,KAAK+V,OACZk0C,GAKXo9c,EAAWjsgB,UAAUiX,QAAU,WAC3B,IAAK5U,EAAkBuC,KAAKoa,UAAW,CACnC,IAAK,IAAIle,EAAI,EAAGA,EAAI8D,KAAKoa,SAAS5d,OAAQN,IACtC8D,KAAKoa,SAASle,GAAGmW,UAErBrS,KAAKoa,YAETpa,KAAKoa,cAAWlf,EACZ8E,KAAKi3f,WACLj3f,KAAKi3f,UAAU3xf,YAAYtF,KAAK8lgB,cAEpC9lgB,KAAKi3f,eAAY/7f,EACjB8E,KAAK+M,OAAI7R,EACT8E,KAAKgN,OAAI9R,EACT8E,KAAKgW,WAAQ9a,EACb8E,KAAK+V,YAAS7a,GAEXmsgB,KAMP8K,GAA4B,WAI5B,SAASA,IAILnygB,KAAK+M,EAAI,EAIT/M,KAAKgN,EAAI,EAIThN,KAAKgW,MAAQ,EAIbhW,KAAK+V,OAAS,EAId/V,KAAKg/B,OAAS,IAAI6kM,GAAO,EAAG,EAAG,EAAG,GAIlC7jO,KAAKqyf,qBAAkBn3f,EACvB8E,KAAKqyf,gBAAkB,IAAI+E,GAAiBp3f,MAC5CA,KAAKg/B,OAAS,IAAI6kM,GAAO,EAAG,EAAG,EAAG,GA4StC,OA1SAvlO,OAAOuJ,eAAesqgB,EAAW/2gB,UAAW,eAIxCsM,IAAK,WACD,OAAI1H,gBAAgB4ogB,IACK,OAAd5ogB,KAAKgvB,MAIpBrnB,YAAY,EACZC,cAAc,IAKlBuqgB,EAAW/2gB,UAAUg3gB,mBAAqB,SAAU5jB,GAChD,GAAMxuf,gBAAgBy/f,GAGtB,GAAuB,IAAnBz/f,KAAK0/f,UAAiB,CAElBjigB,EADauC,KACgB2/f,YAC7B3/f,KAAKqygB,2BAA2BrygB,KAAKiqD,KAFxBjqD,KAAAA,OAG8B,IAAvCwuf,EAAOhie,OAAOjuB,QAHLyB,OAITwuf,EAAOhie,OAAOhoB,KAJLxE,YAQhB,GAAuB,IAAnBA,KAAK0/f,UAAiB,CAO3B,GAJIjigB,EAFiBuC,KAEgB4/f,aACjC5/f,KAAKsygB,qCAAqCtygB,KAAKiqD,KAH9BjqD,KAAAA,MAAAA,KAKN4/f,WAAW2S,eALLvygB,MAMhBvC,EANgBuC,KAMiB4/f,YAAa,CAE/C,IAAI4S,EAAaxygB,KAAKqygB,2BAA2BrygB,KAAKiqD,KARrCjqD,KAQ0D4/f,WAR1D5/f,MASbvC,EATauC,KASoB2/f,WAAa6S,IATjCxygB,KAUE2/f,SAVF3/f,KAU4B4/f,WAAWD,UAVvC3/f,KAYE2/f,WAZF3/f,KAaE2/f,SAAS4S,eAbXvygB,WAiBpB,CAGGvC,EAFWuC,KAEgB4/f,aAC3B5/f,KAAKyygB,4BAA4BzygB,KAAKiqD,KAH3BjqD,KAAAA,QAUvBmygB,EAAW/2gB,UAAUq3gB,4BAA8B,SAAUxod,EAAM01c,EAAU+S,GACzE,IAAIpsf,EAAI2jC,EAAK7vC,SAAS5d,OAAS,EAC3BytD,EAAK7vC,SAAS7b,QAAQm0gB,IAAiB,IACvCpsf,EAAI2jC,EAAK7vC,SAAS7b,QAAQm0gB,GAAgB,GAE9C,IAAK,IAAIhvf,EAAI4C,EAAG5C,GAAK,EAAGA,IAAK,CACzB,IAAIqzD,EAAY9sB,EAAK7vC,SAASsJ,GAC9B,GAAIqzD,aAAqB0ob,GAAiB,CACtC,GAA4B,IAAxB1ob,EAAU2ob,UAaV,OAZIjigB,EAAkBs5E,EAAU4ob,YAC5BA,EAASC,WAAa7ob,EAClBt5E,EAAkBs5E,EAAU4ob,YAC5B5ob,EAAU4ob,SAAWA,GAErBA,EAAS4S,gBAAkB90gB,EAAkBkigB,EAAS4S,eAAe3S,cACrED,EAAS4S,eAAe3S,WAAa7ob,EACjCt5E,EAAkBs5E,EAAUw7b,kBAC5Bx7b,EAAUw7b,eAAiB5S,EAAS4S,mBAIxC90gB,EAAkBkigB,EAASC,YAEN,IAAxB7ob,EAAU2ob,WAAmBjigB,EAAkBs5E,EAAU4ob,YAC9DA,EAAS4S,eAAiBx7b,EAC1BA,EAAU4ob,SAAWA,EAChBligB,EAAkBs5E,EAAU6ob,cAC7BD,EAASC,WAAa7ob,EAAU6ob,cAKhD,GAAI31c,EAAKgod,aACLjygB,KAAKyygB,4BAA4Bxod,EAAKgod,aAActS,EAAU3/f,WAE7D,GAAIiqD,EAAKgtc,UAAUoP,kCAAkCnP,GAAiB,CACvE,IAAIyb,EAAgB1od,EAAKgtc,UAAUoP,uBAEnCrmgB,KAAKyygB,4BAA4BE,EAActb,aAAasb,EAActb,aAAa76f,OAAS,GAAImjgB,EAAU3/f,MAElH,OAAO,GAKXmygB,EAAW/2gB,UAAUi3gB,2BAA6B,SAAUpod,EAAM21c,EAAY8S,GAC1E,IAAIx2gB,EAAI,EACJ+tD,EAAK7vC,SAAS7b,QAAQm0gB,IAAiB,IACvCx2gB,EAAI+tD,EAAK7vC,SAAS7b,QAAQm0gB,GAAgB,GAE9C,IAAK,IAAIhvf,EAAIxnB,EAAGwnB,EAAIumC,EAAK7vC,SAAS5d,OAAQknB,IAAK,CAC3C,IAAInjB,EAAO0pD,EAAK7vC,SAASsJ,GACzB,GAAInjB,aAAgBk/f,GAAiB,CACjC,GAAuB,IAAnBl/f,EAAKm/f,UAOL,OANIjigB,EAAkB8C,EAAKq/f,cACvBA,EAAWD,SAAWp/f,GAEtBq/f,EAAWD,UAAYligB,EAAkBmigB,EAAWD,SAASC,cAC7DA,EAAWD,SAASC,WAAaA,IAE9B,EAEN,GAAInigB,EAAkBmigB,EAAW2S,gBAAiB,CACnD,GAAuB,IAAnBhygB,EAAKm/f,YAAmBjigB,EAAkB8C,EAAKq/f,YAQ/C,OAAO,EANP,GADAA,EAAW2S,eAAiBhygB,GACvB9C,EAAkB8C,EAAKo/f,UAExB,OADAC,EAAWD,SAAWp/f,EAAKo/f,UACpB,IAe3B,OANI11c,EAAK2od,SACL5ygB,KAAKqygB,2BAA2Bpod,EAAK2od,SAAUhT,EAAY5/f,MAEtDiqD,EAAKgtc,UAAUuP,8BAA8BtP,IAClDl3f,KAAKqygB,2BAA2Bpod,EAAKgtc,UAAUuP,mBAAmBnP,aAAa,GAAIuI,EAAY5/f,OAE5F,GAKXmygB,EAAW/2gB,UAAUk3gB,qCAAuC,SAAUrod,EAAMsod,EAAgBG,GACxF,IAAI5ggB,EAAQm4C,EAAK7vC,SAAS5d,OAAS,EAC/BytD,EAAK7vC,SAAS7b,QAAQm0gB,IAAiB,IACvC5ggB,EAAQm4C,EAAK7vC,SAAS7b,QAAQm0gB,GAAgB,GAElD,IAAK,IAAIx2gB,EAAI4V,EAAO5V,GAAK,EAAGA,IAAK,CAC7B,IAAImgC,EAAe4tB,EAAK7vC,SAASle,GACjC,GAAImgC,aAAwBoje,IACpBpje,aAAwBoje,IAA8C,IAA3Bpje,EAAaqje,UAIxD,OAHIjigB,EAAkB4+B,EAAak2e,kBAC/BA,EAAe3S,WAAavje,IAExB5+B,EAAkB80gB,EAAe3S,YAIrD,GAAI31c,EAAKgod,aACLjygB,KAAKsygB,qCAAqCrod,EAAKgod,aAAcM,EAAgBvygB,UAE5E,CAAA,KAAIiqD,EAAKgtc,UAAUuP,8BAA8BtP,IAMlD,OAAO,EAJPjtc,EAAOA,EAAKgtc,UAAUoP,uBAAuBhP,aAAaptc,EAAKgtc,UAAUoP,uBAAuBhP,aAAa76f,OAAS,GACtHwD,KAAKsygB,qCAAqCrod,EAAMsod,EAAgBvygB,MAKpE,OAAO,GAEX1B,OAAOuJ,eAAesqgB,EAAW/2gB,UAAW,UAIxCsM,IAAK,WACD,OAAO1H,KAAKokS,aAEhBz8R,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesqgB,EAAW/2gB,UAAW,gBAIxCsM,IAAK,WACD,OAAO1H,KAAKiqD,gBAAgBo9c,IAAcrngB,KAAKiqD,KAAK7vC,SAAWpa,KAAKiqD,KAAK7vC,SAAS7b,QAAQyB,OAAS,GAEvG2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesqgB,EAAW/2gB,UAAW,mBAIxCsM,IAAK,WACD,IAAIoK,EAAQ9R,KAAK8lgB,aACjB,GAAIh0f,EAAQ,GAAKA,EAAQ9R,KAAKiqD,KAAK7vC,SAAS5d,OACxC,OAAOwD,KAAKiqD,KAAK7vC,SAAStI,EAAQ,IAI1CnK,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesqgB,EAAW/2gB,UAAW,eAIxCsM,IAAK,WACD,IAAIoK,EAAQ9R,KAAK8lgB,aACjB,GAAIh0f,GAAS,GAAKA,EAAQ9R,KAAKiqD,KAAK7vC,SAAS5d,OAAS,EAClD,OAAOwD,KAAKiqD,KAAK7vC,SAAStI,EAAQ,IAI1CnK,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesqgB,EAAW/2gB,UAAW,YAIxCsM,IAAK,WACD,IAAIoK,EAAQ9R,KAAKiqD,KAAK7vC,SAAS7b,QAAQyB,MACnCypS,EAAYzpS,KAAKiqD,KAAKgtc,UAAUI,aAAa94f,QAAQyB,KAAKiqD,MAC9D,OAAIn4C,EAAQ9R,KAAKiqD,KAAK7vC,SAAS5d,OAAS,EAC7BwD,KAAKiqD,KAAK7vC,SAAStI,EAAQ,GAE7B23R,EAAYzpS,KAAKiqD,KAAKgtc,UAAUI,aAAa76f,OAAS,EACpDwD,KAAKiqD,KAAKgtc,UAAUI,aAAa5tN,EAAY,GAAGrvR,SAAS,QAD/D,GAKTzS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesqgB,EAAW/2gB,UAAW,gBAIxCsM,IAAK,WACD,IAAIoK,EAAQ9R,KAAKiqD,KAAK7vC,SAAS7b,QAAQyB,MACnCypS,EAAYzpS,KAAKiqD,KAAKgtc,UAAUI,aAAa94f,QAAQyB,KAAKiqD,MAC9D,GAAIn4C,EAAQ,EACR,OAAO9R,KAAKiqD,KAAK7vC,SAAStI,EAAQ,GAEjC,GAAI23R,EAAY,EAAG,CACpB,IAAIopO,EAAa7ygB,KAAKiqD,KAAKgtc,UAAUI,aAAa5tN,EAAY,GAC9D,OAAOopO,EAAWz4f,SAASy4f,EAAWz4f,SAAS5d,OAAS,KAIhEmL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesqgB,EAAW/2gB,UAAW,aAIxCsM,IAAK,WACD,GAAI1H,KAAKiqD,KACL,OAAOjqD,KAAKiqD,KAAKgtc,WAIzBtvf,YAAY,EACZC,cAAc,IAKlBuqgB,EAAW/2gB,UAAUiX,QAAU,WAC3B,IAAK5U,EAAkBuC,KAAKiqD,OAASjqD,KAAKiqD,KAAK7vC,UAAYpa,KAAKiqD,KAAK7vC,SAAS7b,QAAQyB,OAAS,EAAG,CAC9F,IAAI8R,EAAQ9R,KAAKiqD,KAAK7vC,SAAS7b,QAAQyB,MACvCA,KAAKiqD,KAAK7vC,SAASuO,OAAO7W,EAAO,GAErC9R,KAAKiqD,UAAO/uD,EACR8E,KAAKqyf,iBACLryf,KAAKqyf,gBAAgBhgf,UAEzBrS,KAAKqyf,qBAAkBn3f,EACnB8E,KAAKg/B,QACLh/B,KAAKg/B,OAAO3sB,UAEhBrS,KAAKg/B,YAAS9jC,EACd8E,KAAK+M,OAAI7R,EACT8E,KAAKgN,OAAI9R,EACT8E,KAAKgW,WAAQ9a,EACb8E,KAAK+V,YAAS7a,GAKlBi3gB,EAAWW,gBAAkBppf,OAAOC,aAAa,OAC1Cwof,KAMP1S,GAAiC,SAAUnua,GAE3C,SAASmua,EAAgB/4f,GACrB,IAAI3G,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAajC,OATAD,EAAM2/f,UAAY,EAIlB3/f,EAAMgzgB,aAAc,EACpBhzgB,EAAMizgB,wBAAqB93gB,EAC3B6E,EAAMkzgB,4BAAyB/3gB,EAC/B6E,EAAMmzgB,sBAAmBh4gB,EACzB6E,EAAM2/f,UAAYh5f,EACX3G,EA8DX,OA7EA0wF,GAAUgva,EAAiBnua,GAiB3BhzF,OAAOuJ,eAAe43f,EAAgBrkgB,UAAW,cAC7CsM,IAAK,WACD,OAAO1H,KAAKgzgB,oBAEhB3rgB,IAAK,SAAU06D,GACX/hE,KAAKgzgB,mBAAqBjxc,GAE9Bp6D,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe43f,EAAgBrkgB,UAAW,kBAC7CsM,IAAK,WACD,OAAO1H,KAAKizgB,wBAEhB5rgB,IAAK,SAAU06D,GACX/hE,KAAKizgB,uBAAyBlxc,GAElCp6D,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe43f,EAAgBrkgB,UAAW,YAC7CsM,IAAK,WACD,OAAO1H,KAAKkzgB,kBAEhB7rgB,IAAK,SAAU06D,GACX/hE,KAAKkzgB,iBAAmBnxc,GAE5Bp6D,YAAY,EACZC,cAAc,IAKlB63f,EAAgBrkgB,UAAUgpS,UAAY,WAClC,OAAO,GAKXq7N,EAAgBrkgB,UAAUiE,MAAQ,WAC9B,IAAI0iE,EAAQ,IAAI09b,EAAgBz/f,KAAK0/f,WAOrC,OANA39b,EAAMswb,gBAAgBsH,WAAW35f,KAAKqyf,iBAClCryf,KAAKg/B,SACL+iC,EAAM/iC,OAASh/B,KAAKg/B,OAAO3/B,SAE/B0iE,EAAM/rD,MAAQhW,KAAKgW,MACnB+rD,EAAMhsD,OAAS/V,KAAK+V,OACbgsD,GAKX09b,EAAgBrkgB,UAAUiX,QAAU,WAChCrS,KAAK0/f,eAAYxkgB,EACjB8E,KAAK+ygB,iBAAc73gB,EACnB8E,KAAKgzgB,wBAAqB93gB,EAC1B8E,KAAKkzgB,sBAAmBh4gB,EACxB8E,KAAKizgB,4BAAyB/3gB,EAC9Bo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3By/f,GACT0S,IAKEvJ,GAAgC,SAAUt3a,GAE1C,SAASs3a,IACL,IAAI7ogB,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KASjC,OALAD,EAAMozgB,eAAiB,EAIvBpzgB,EAAMivB,KAAO,GACNjvB,EA6BX,OAxCA0wF,GAAUm4a,EAAgBt3a,GAgB1Bs3a,EAAextgB,UAAUgpS,UAAY,WACjC,OAAOpkS,KAAKgvB,KAAOhvB,KAAKgvB,KAAKxyB,OAAS,GAK1CosgB,EAAextgB,UAAUiE,MAAQ,WAC7B,IAAIooE,EAAO,IAAImhc,EAQf,OAPAnhc,EAAK4qb,gBAAgBsH,WAAW35f,KAAKqyf,iBACrC5qb,EAAKz4C,KAAOhvB,KAAKgvB,KACbhvB,KAAKg/B,SACLyoC,EAAKzoC,OAASh/B,KAAKg/B,OAAO3/B,SAE9BooE,EAAKzxD,MAAQhW,KAAKgW,MAClByxD,EAAK1xD,OAAS/V,KAAK+V,OACZ0xD,GAKXmhc,EAAextgB,UAAUiX,QAAU,WAC/BrS,KAAKgvB,UAAO9zB,EACZo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3B4ogB,GACTuJ,IAKEiB,GAAqC,SAAU9hb,GAE/C,SAAS8hb,IACL,IAAIrzgB,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAEjC,OADAD,EAAMszgB,UAAY,GACXtzgB,EA2BX,OA/BA0wF,GAAU2ib,EAAqB9hb,GAM/BhzF,OAAOuJ,eAAeurgB,EAAoBh4gB,UAAW,QACjDsM,IAAK,WACD,OAAO1H,KAAKqzgB,WAEhBhsgB,IAAK,SAAUtK,GACXiD,KAAKqzgB,UAAYt2gB,GAErB4K,YAAY,EACZC,cAAc,IAKlBwrgB,EAAoBh4gB,UAAUiE,MAAQ,WAClC,IAAIooE,EAAO,IAAI2rc,EASf,OARA3rc,EAAK4qb,gBAAgBsH,WAAW35f,KAAKqyf,iBACrC5qb,EAAKm4b,WAAa5/f,KAAK4/f,WACvBn4b,EAAKz4C,KAAOhvB,KAAKgvB,KACbhvB,KAAKg/B,SACLyoC,EAAKzoC,OAASh/B,KAAKg/B,OAAO3/B,SAE9BooE,EAAKzxD,MAAQhW,KAAKgW,MAClByxD,EAAK1xD,OAAS/V,KAAK+V,OACZ0xD,GAEJ2rc,GACTxK,IAKE0K,GAA+B,SAAUhib,GAEzC,SAASgib,IACL,IAAIvzgB,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KASjC,OALAD,EAAMwzgB,QAAU,GAIhBxzgB,EAAMyzgB,UAAY,OACXzzgB,EAyBX,OApCA0wF,GAAU6ib,EAAehib,GAgBzBgib,EAAcl4gB,UAAUiX,QAAU,WAC9BrS,KAAKuzgB,aAAUr4gB,EACf8E,KAAKwzgB,eAAYt4gB,GAKrBo4gB,EAAcl4gB,UAAUiE,MAAQ,WAC5B,IAAIooE,EAAO,IAAI6rc,EAUf,OATA7rc,EAAK4qb,gBAAgBsH,WAAW35f,KAAKqyf,iBACrC5qb,EAAK8rc,QAAUvzgB,KAAKuzgB,QACpB9rc,EAAK+rc,UAAYxzgB,KAAKwzgB,UACtB/rc,EAAKz4C,KAAOhvB,KAAKgvB,KACbhvB,KAAKg/B,SACLyoC,EAAKzoC,OAASh/B,KAAKg/B,OAAO3/B,SAE9BooE,EAAKzxD,MAAQhW,KAAKgW,MAClByxD,EAAK1xD,OAAS/V,KAAK+V,OACZ0xD,GAEJ6rc,GACT1K,IAKEE,GAAoC,SAAUx3a,GAE9C,SAASw3a,EAAmBpigB,GACxB,IAAI3G,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAKjC,OAJAD,EAAM0zgB,eAAiB,EACvB1zgB,EAAM2zgB,kBAAex4gB,EACrB6E,EAAM4zgB,OAAS,GACf5zgB,EAAM0zgB,eAAiB/sgB,EAChB3G,EA4EX,OAnFA0wF,GAAUq4a,EAAoBx3a,GAS9BhzF,OAAOuJ,eAAeihgB,EAAmB1tgB,UAAW,gBAIhDsM,IAAK,WACD,OAAO1H,KAAKyzgB,gBAEhB9rgB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeihgB,EAAmB1tgB,UAAW,QAIhDsM,IAAK,WACD,OAAO1H,KAAK2zgB,QAKhBtsgB,IAAK,SAAUkwB,GACXv3B,KAAK2zgB,OAASp8e,GAElB5vB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeihgB,EAAmB1tgB,UAAW,aAIhDsM,IAAK,WACD,OAAO1H,KAAK0zgB,cAKhBrsgB,IAAK,SAAU5F,GACXzB,KAAK0zgB,aAAejygB,GAExBkG,YAAY,EACZC,cAAc,IAKlBkhgB,EAAmB1tgB,UAAUgpS,UAAY,WACrC,OAAO,GAKX0kO,EAAmB1tgB,UAAUiX,QAAU,WACnCrS,KAAKu3B,UAAOr8B,EACZ8E,KAAKyB,eAAYvG,EACjB8E,KAAKyzgB,oBAAiBv4gB,GAS1B4tgB,EAAmB1tgB,UAAUiE,MAAQ,WACjC,IAAIooE,EAAO,IAAIqhc,EAAmB9ogB,KAAK4zgB,cAQvC,OAPAnsc,EAAKlwC,KAAOv3B,KAAKu3B,KACjBkwC,EAAKhmE,UAAYzB,KAAKyB,UAClBzB,KAAKg/B,SACLyoC,EAAKzoC,OAASh/B,KAAKg/B,OAAO3/B,SAE9BooE,EAAKzxD,MAAQhW,KAAKgW,MAClByxD,EAAK1xD,OAAS/V,KAAK+V,OACZ0xD,GAEJqhc,GACTqJ,IAKEtJ,GAAiC,SAAUv3a,GAE3C,SAASu3a,EAAgBgL,GACrB,IAAI9zgB,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KASjC,OARAD,EAAM+zgB,SAAW,GACjB/zgB,EAAMg0gB,gBAAa74gB,EACnB6E,EAAMi0gB,iBAAkB,EAIxBj0gB,EAAMk0gB,YAAa,EACnBl0gB,EAAMi0gB,gBAAkBH,EACjB9zgB,EAoFX,OA/FA0wF,GAAUo4a,EAAiBv3a,GAa3BhzF,OAAOuJ,eAAeghgB,EAAgBztgB,UAAW,iBAI7CsM,IAAK,WACD,OAAO1H,KAAKg0gB,iBAEhBrsgB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeghgB,EAAgBztgB,UAAW,WAI7CsM,IAAK,WAID,OAHIjK,EAAkBuC,KAAK+zgB,cACvB/zgB,KAAK+zgB,WAAavzgB,SAASW,cAAc,QAEtCnB,KAAK+zgB,YAEhBpsgB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeghgB,EAAgBztgB,UAAW,UAI7CsM,IAAK,WACD,OAAO,GAEXC,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeghgB,EAAgBztgB,UAAW,eAI7CsM,IAAK,WACD,OAAO1H,KAAK8zgB,UAKhBzsgB,IAAK,SAAUtK,GACXiD,KAAK8zgB,SAAW/2gB,EACXU,EAAkBV,KACnBiD,KAAKgB,QAAQ1B,IAAMU,KAAK8zgB,WAGhCnsgB,YAAY,EACZC,cAAc,IAKlBihgB,EAAgBztgB,UAAUgpS,UAAY,WAClC,OAAO,GAKXykO,EAAgBztgB,UAAUiE,MAAQ,WAC9B,IAAI40M,EAAQ,IAAI40T,EAAgB7ogB,KAAK6zgB,eASrC,OARA5/T,EAAMo+S,gBAAgBsH,WAAW35f,KAAKqyf,iBACtCp+S,EAAM8rH,YAAc//T,KAAK+/T,YACzB9rH,EAAMggU,WAAaj0gB,KAAKi0gB,WACxBhgU,EAAMj+L,MAAQhW,KAAKgW,MACnBi+L,EAAMl+L,OAAS/V,KAAK+V,OAChB/V,KAAKg/B,SACLi1K,EAAMj1K,OAASh/B,KAAKg/B,OAAO3/B,SAExB40M,GAKX40T,EAAgBztgB,UAAUiX,QAAU,WAChCrS,KAAK+zgB,gBAAa74gB,EAClB8E,KAAK+/T,iBAAc7kU,EACnB8E,KAAKg0gB,qBAAkB94gB,EACvBo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3B6ogB,GACTsJ,IAKEhJ,GAAoC,SAAU73a,GAE9C,SAAS63a,EAAmB1M,EAAWyX,GACnC,IAAIn0gB,EAAQuxF,EAAOhwF,KAAKtB,OAASA,KAWjC,OAPAD,EAAMozgB,eAAiB,EAIvBpzgB,EAAMo0gB,mBAAoB,EAC1Bp0gB,EAAM08f,UAAYA,EAClB18f,EAAMo0gB,kBAAoBD,EACnBn0gB,EA6BX,OA1CA0wF,GAAU04a,EAAoB73a,GAkB9B63a,EAAmB/tgB,UAAUgpS,UAAY,WACrC,OAAOpkS,KAAKgvB,KAAOhvB,KAAKgvB,KAAKxyB,OAAS,GAK1C2sgB,EAAmB/tgB,UAAUiE,MAAQ,WACjC,IAAI2pG,EAAO,IAAImga,EAAmBnpgB,KAAKy8f,UAAWz8f,KAAKm0gB,mBAQvD,OAPAnra,EAAKh6E,KAAOhvB,KAAKgvB,KACjBg6E,EAAKmqa,eAAiBnzgB,KAAKmzgB,eACvBnzgB,KAAKg/B,SACLgqE,EAAKhqE,OAASh/B,KAAKg/B,OAAO3/B,SAE9B2pG,EAAKhzF,MAAQhW,KAAKgW,MAClBgzF,EAAKjzF,OAAS/V,KAAK+V,OACZizF,GAKXmga,EAAmB/tgB,UAAUiX,QAAU,WACnCrS,KAAKgvB,UAAO9zB,EACZo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3BmpgB,GACTgJ,IAKEiC,GAAsB,WAItB,SAASA,IAKLp0gB,KAAK84f,kBAAoB,IAAI/ie,GAAK,GAAI,GAAI,IAAK,MAI/C/1B,KAAKq0gB,4BAA6B,EAMlCr0gB,KAAK4lgB,eAIL5lgB,KAAK+ngB,kBAAe7sgB,EAIpB8E,KAAKgogB,kBAAe9sgB,EAiFxB,OA9EAoD,OAAOuJ,eAAeusgB,EAAKh5gB,UAAW,SAIlCsM,IAAK,WACD,OAAI1H,KAAKwuf,OACExuf,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQyB,OAE7B,GAEZ2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeusgB,EAAKh5gB,UAAW,gBAIlCsM,IAAK,WACD,IAAIoK,EAAQ9R,KAAK8R,MACjB,GAAIA,EAAQ,EACR,OAAO9R,KAAKwuf,OAAOzmQ,MAAMj2O,EAAQ,IAIzCnK,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeusgB,EAAKh5gB,UAAW,YAIlCsM,IAAK,WACD,IAAIoK,EAAQ9R,KAAK8R,MACjB,GAAIA,EAAQ9R,KAAKwuf,OAAOzmQ,MAAMvrP,OAAS,EACnC,OAAOwD,KAAKwuf,OAAOzmQ,MAAMj2O,EAAQ,IAIzCnK,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeusgB,EAAKh5gB,UAAW,gBAIlCsM,IAAK,WACD,OAAI1H,KAAK4lgB,YAAYppgB,OAAS,EACnBwD,KAAK4lgB,YAAY,GAAG9zf,OAEvB,GAEZnK,YAAY,EACZC,cAAc,IAElBwsgB,EAAKh5gB,UAAUiX,QAAU,WACjBrS,KAAK+ngB,eACD/ngB,KAAKwuf,QAAUxuf,KAAKwuf,OAAOgV,MAAM8Q,QACjCt0gB,KAAKwuf,OAAOgV,MAAM8Q,OAAOC,oBAAoBv0gB,KAAK+ngB,cAEtD/ngB,KAAK+ngB,aAAa11f,WAEtBrS,KAAK+ngB,kBAAe7sgB,EAChB8E,KAAKgogB,eACDhogB,KAAKwuf,QAAUxuf,KAAKwuf,OAAOgV,MAAM8Q,QACjCt0gB,KAAKwuf,OAAOgV,MAAM8Q,OAAOC,oBAAoBv0gB,KAAKgogB,cAEtDhogB,KAAKgogB,aAAa31f,WAEtBrS,KAAKgogB,kBAAe9sgB,EACpB8E,KAAK4lgB,eACL5lgB,KAAK4lgB,iBAAc1qgB,EACduC,EAAkBuC,KAAKwuf,SACnB/wf,EAAkBuC,KAAKwuf,OAAOzmQ,QAC/B/nP,KAAKwuf,OAAOgmB,WAAWx0gB,MAG/BA,KAAKwuf,YAAStzf,GAEXk5gB,KAMP1K,GAA8B,WAC9B,SAASA,IACL1pgB,KAAKy0gB,gBAILz0gB,KAAKkqgB,WAAa,EA2KtB,OAzKA5rgB,OAAOuJ,eAAe6hgB,EAAatugB,UAAW,WAC1CsM,IAAK,WACD,OAAO1H,KAAKy0gB,cAEhB9sgB,YAAY,EACZC,cAAc,IAKlB8hgB,EAAatugB,UAAU+vgB,aAAe,WAClC,IAAK,IAAIjvgB,EAAI,EAAGA,EAAI8D,KAAKy0gB,aAAaj4gB,OAAQN,IAC1C8D,KAAKy0gB,aAAav4gB,GAAGmW,UAEzBrS,KAAKy0gB,iBAKT/K,EAAatugB,UAAUs5gB,4BAA8B,SAAUC,EAAqBC,GAEhF,IAAK,IADD5+f,EAAQ,EACH9Z,EAAIy4gB,EAAqBz4gB,EAAI04gB,EAAgB14gB,IAClD8Z,GAAShW,KAAKy0gB,aAAav4gB,GAAGgogB,eAElC,OAAOluf,GAKX0zf,EAAatugB,UAAUkwgB,WAAa,SAAUuJ,EAAoB/hN,EAAY98S,EAAOi6C,EAAUtkD,GAC3F,IAAK,IAAIzP,EAAI8D,KAAKqjE,QAAQ7mE,OAAQN,EAAI42T,EAAY52T,IAC9C8D,KAAKqjE,QAAQ7+D,KAAK,IAAIswgB,IAG1B,IAAK,IADD77M,EAAiB,EACZv1S,EAAImxf,EAAoBnxf,EAAIovS,EAAYpvS,IAC7Cu1S,GAAkBj5T,KAAKqjE,QAAQ3/C,GAAGwgf,iBAIvBpxM,EAAa+hN,EACX,IAAM57M,EAAiBjjT,IACpChW,KAAKqjE,QAAQyvP,EAAa,GAAGoxM,gBAAmBluf,EAAQijT,GAExDhpQ,EAAWjwD,KAAKqjE,QAAQyvP,EAAa,GAAG7iQ,WACxCjwD,KAAKqjE,QAAQyvP,EAAa,GAAG7iQ,SAAWA,GAExCtkD,EAAS3L,KAAKqjE,QAAQyvP,EAAa,GAAGiiN,YACtC/0gB,KAAKqjE,QAAQyvP,EAAa,GAAGiiN,UAAYppgB,IAMjD+9f,EAAatugB,UAAU4wgB,cAAgB,WAEnC,IAAK,IADDh2f,EAAQ,EACH9Z,EAAI,EAAGA,EAAI8D,KAAKqjE,QAAQ7mE,OAAQN,IAAK,CAE1C8Z,GADahW,KAAKqjE,QAAQnnE,GACVgogB,eAEpB,OAAOluf,GAKX0zf,EAAatugB,UAAU45gB,aAAe,SAAUx+f,EAAgBy+f,EAAqB5J,GAEjF,IAAI6J,EAAmBl1gB,KAAKgsgB,gBAU5B,GAPIhsgB,KAAKkqgB,WADLmB,GACkB4J,EAAsBC,EAAmBA,EAGzCD,EAIlBC,IAAqBl1gB,KAAKkqgB,WAAY,CACtC,IAAItqe,EAAS5/B,KAAKkqgB,WAAagL,EAC/Bt1e,EAASud,MAAMvd,GAAU,EAAIA,EAC7B,IAAK,IAAI1jC,EAAI,EAAGA,EAAI8D,KAAKqjE,QAAQ7mE,OAAQN,IAAK,CAC1C,IAAI8lE,EAAShiE,KAAKqjE,QAAQnnE,GAE1B,GAAI0jC,EAASoiC,EAAOkic,eAAiBlic,EAAO/R,SACxC,OAAO,EAGf,OAAO,EAGP,OAAO,GAMfy5c,EAAatugB,UAAUuwgB,WAAa,SAAUn1f,EAAgBy+f,EAAqB5J,GAE/E,IAAI6J,EAAmBl1gB,KAAKgsgB,gBAU5B,GAPIhsgB,KAAKkqgB,WADLmB,GACkB4J,EAAsBC,EAAmBA,EAGzCD,EAIlBC,IAAqBl1gB,KAAKkqgB,WAE1B,IAAK,IADDtqe,EAAS5/B,KAAKkqgB,WAAagL,EACtBh5gB,EAAI,EAAGA,EAAI8D,KAAKqjE,QAAQ7mE,OAAQN,IAAK,CAC1C,IAAI8lE,EAAShiE,KAAKqjE,QAAQnnE,GAC1B8lE,EAAOkic,eAAiBtke,EAASoiC,EAAOkic,iBAOpDwF,EAAatugB,UAAU+ugB,aAAe,SAAUn7R,EAAa8jF,EAAYmiN,EAAqB5J,GAE1F,IAAK,IADDr1f,EAAQ,EACH9Z,EAAI,EAAGA,EAAI42T,EAAY52T,IAC5B8Z,GAAShW,KAAKy0gB,aAAav4gB,EAAI8yO,GAAak1R,eAEhD,OAAOluf,GAKX0zf,EAAatugB,UAAUswgB,qBAAuB,WAC1C,IAAK,IAAIxvgB,EAAI,EAAGA,EAAI8D,KAAKqjE,QAAQ7mE,OAAQN,IAC3B,IAANA,EACI8D,KAAKqjE,QAAQnnE,GAAGgogB,iBAAmBlkgB,KAAKqjE,QAAQnnE,GAAG64gB,YACnD/0gB,KAAKqjE,QAAQnnE,GAAGgogB,eAAiBlkgB,KAAKqjE,QAAQnnE,GAAG64gB,WAMjD/0gB,KAAKqjE,QAAQnnE,EAAI,GAAG64gB,UAAY/0gB,KAAKqjE,QAAQnnE,GAAGgogB,eAAiBlkgB,KAAKqjE,QAAQnnE,GAAG64gB,YACjF/0gB,KAAKqjE,QAAQnnE,GAAGgogB,eAAiBlkgB,KAAKqjE,QAAQnnE,GAAG64gB,UAAY/0gB,KAAKqjE,QAAQnnE,EAAI,GAAG64gB,YAQjGrL,EAAatugB,UAAUiE,MAAQ,WAC3B,IAAIoqgB,EAAc,IAAIC,EACtBD,EAAYS,WAAalqgB,KAAKkqgB,WAC9B,IAAK,IAAIhugB,EAAI,EAAGA,EAAI8D,KAAKqjE,QAAQ7mE,OAAQN,IACrCutgB,EAAYpmc,QAAQ7+D,KAAKxE,KAAKqjE,QAAQnnE,GAAGmD,SAE7C,OAAOoqgB,GAKXC,EAAatugB,UAAUiX,QAAU,WAC7B,IAAK5U,EAAkBuC,KAAKy0gB,cACxB,IAAK,IAAIv4gB,EAAI,EAAGA,EAAI8D,KAAKy0gB,aAAaj4gB,OAAQN,IAAK,CAClC8D,KAAKy0gB,aAAav4gB,GACxBmW,UAGfrS,KAAKy0gB,gBACLz0gB,KAAKy0gB,kBAAev5gB,EACpB8E,KAAKkqgB,gBAAahvgB,GAEfwugB,KAMPoL,GAAyB,WACzB,SAASA,IAIL90gB,KAAKkkgB,eAAiB,EAItBlkgB,KAAKiwD,SAAW,EAIhBjwD,KAAKygC,SAAW,EAIhBzgC,KAAK+0gB,UAAY,EAoBrB,OAfAD,EAAQ15gB,UAAUiE,MAAQ,WACtB,IAAI2iE,EAAS,IAAI8yc,EAIjB,OAHA9yc,EAAOkic,eAAiBlkgB,KAAKkkgB,eAC7Blic,EAAO/R,SAAWjwD,KAAKiwD,SACvB+R,EAAOvhC,SAAWzgC,KAAKygC,SAChBuhC,GAKX8yc,EAAQ15gB,UAAUiX,QAAU,WACxBrS,KAAKkkgB,oBAAiBhpgB,EACtB8E,KAAKiwD,cAAW/0D,EAChB8E,KAAKygC,cAAWvlC,GAEb45gB,KCrrIPK,GAAmB,oBACnBC,GAAkB,mBAClBC,GAAoB,qBACpBC,GAA2B,4BAC3BC,GAAyB,0BACzBC,GAAwB,yBACxBC,GAA6B,8BAC7BC,GAA6B,8BAC7BC,GAA+B,gCAC/BC,GAA6B,8BAC7BC,GAA0B,2BAC1BC,GAAwB,gCACxBC,GAAoB,4BACpBC,GAA2B,4BAC3BC,GAA2B,4BAC3BC,GAA2B,4BAC3BC,GAA2B,4BAC3BC,GAA2B,4BAC3BC,GAA0B,2BAC1BC,GAAoC,qCACpCC,GAAyB,0BACzBC,GAA4B,6BAC5BC,GAAyB,0BACzBC,GAAiC,kCACjCC,GAAyB,0BAIzBz8I,GAA6B,WAI7B,SAASA,EAAYs0H,GACjB,IAAIzuf,EAAQC,KAIZA,KAAK42gB,yBAAsB17gB,EAM3B8E,KAAK62gB,sBAAwB,SAAUx6gB,GAC/B0D,EAAM+2gB,iBAAiB/2gB,EAAMyuf,OAAOv4a,aACpCl2E,EAAM62gB,oBAAoBl1gB,KAAKrF,EAAM2Q,EAAG3Q,EAAM0Q,GAC9C1Q,EAAMspB,mBAGd3lB,KAAKwuf,OAASA,EACd,IAAIxgf,EAAS,IAAIowG,GAAK,iBAAkBp+G,KAAKwuf,OAAOgV,MAAM33D,eAC1D79b,EAAOuwG,UAAUv+G,KAAKwuf,OAAOgV,MAAMx1f,QACnCL,GAAW3N,KAAKwuf,OAAOgV,MAAMx1f,QAC7BhO,KAAKswf,gBAAgBtif,GA6bzB,OAxbAksX,EAAY9+X,UAAU2mC,cAAgB,WAClC,MAAO,eAQXm4V,EAAY9+X,UAAUk1f,gBAAkB,SAAUymB,GAC9C,IAAIh3gB,EAAQC,KACRsD,EAAKtD,KAAKwuf,OAAOgV,MAAMxigB,QAAQsC,GACnCtD,KAAK2hd,YAAcnhd,SAASW,cAAc,OAC1CnB,KAAK2hd,YAAYr+c,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,mBACtDxjJ,SAASuL,KAAKpK,YAAY3B,KAAK2hd,aAC/B,IAAIhpU,EAAKn4I,SAASW,cAAc,MAChCw3I,EAAGj0I,MAAMsR,MAAQ,OACjB2iI,EAAGr1I,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,wBACxCrL,EAAGj0I,MAAMsygB,UAAY,OACrBr+X,EAAGj0I,MAAMs6B,OAAS,MAClB25G,EAAGj0I,MAAM45D,QAAU,MACnBq6E,EAAGj0I,MAAMsrD,UAAY,OACrB2oF,EAAGs+X,cAAgBj3gB,KAAKk3gB,0BACxBl3gB,KAAK2hd,YAAYhgd,YAAYg3I,GAC7B,IAAIupU,IAEIlzb,KAAM+nf,EAAW98b,YAAY,OAC7BL,QAAS,mBACTt2E,GAAIA,EAAK8xgB,KAGTpmf,KAAM+nf,EAAW98b,YAAY,QAC7BL,QAAS,oBACTt2E,GAAIA,EAAK6xgB,KAGTnmf,KAAM+nf,EAAW98b,YAAY,SAC7BL,QAAS,qBACTt2E,GAAIA,EAAK+xgB,KAGTh9W,WAAW,IAGXrpI,KAAM+nf,EAAW98b,YAAY,gBAC7BL,QAAS,4BACTt2E,GAAIA,EAAKgygB,KAGTtmf,KAAM+nf,EAAW98b,YAAY,cAC7BL,QAAS,0BACTt2E,GAAIA,EAAKiygB,KAGTvmf,KAAM+nf,EAAW98b,YAAY,sBAC7BL,QAAS,kCACTt2E,GAAIA,EAAKozgB,KAGT1nf,KAAM+nf,EAAW98b,YAAY,cAAgB,KAC7CL,QAAS,0BACTt2E,GAAIA,EAAKqzgB,KAGTt+W,WAAW,IAGXrpI,KAAM+nf,EAAW98b,YAAY,aAC7BL,QAAS,0BACTt2E,GAAIA,EAAKkygB,KAGTxmf,KAAM+nf,EAAW98b,YAAY,kBAAoB,MACjDL,QAAS,8BACTt2E,GAAIA,EAAKsygB,KAGT5mf,KAAM+nf,EAAW98b,YAAY,kBAC7BL,QAAS,8BACTt2E,GAAIA,EAAKmygB,KAGTzmf,KAAM+nf,EAAW98b,YAAY,kBAC7BL,QAAS,8BACTt2E,GAAIA,EAAKoygB,KAGT1mf,KAAM+nf,EAAW98b,YAAY,oBAC7BL,QAAS,gCACTt2E,GAAIA,EAAKqygB,KAGTt9W,WAAW,IAGXrpI,KAAM+nf,EAAW98b,YAAY,QAC7BL,QAAS,qBACTt2E,GAAIA,EAAKuygB,KAGT7mf,KAAM+nf,EAAW98b,YAAY,aAC7BL,QAAS,yBACTt2E,GAAIA,EAAKwygB,KAGTz9W,WAAW,IAGXrpI,KAAM+nf,EAAW98b,YAAY,oBAC7B32E,GAAIA,EAAKyygB,GACTn8b,QAAS,uBAGT5qD,KAAM+nf,EAAW98b,YAAY,eAC7B32E,GAAIA,EAAKmzgB,GACT78b,QAAS,wCAGT5qD,KAAM+nf,EAAW98b,YAAY,UAC7B32E,GAAIA,EAAK0ygB,GACTp8b,QAAS,UACTla,QAEQ1wC,KAAM+nf,EAAW98b,YAAY,gBAC7B32E,GAAIA,EAAK4ygB,GACTt8b,QAAS,6BAGT5qD,KAAM+nf,EAAW98b,YAAY,gBAC7B32E,GAAIA,EAAK6ygB,GACTv8b,QAAS,6BAGT5qD,KAAM+nf,EAAW98b,YAAY,eAC7B32E,GAAIA,EAAK+ygB,GACTz8b,QAAS,4BAGT5qD,KAAM+nf,EAAW98b,YAAY,gBAC7B32E,GAAIA,EAAK8ygB,GACTx8b,QAAS,+BAKjB5qD,KAAM+nf,EAAW98b,YAAY,UAC7B32E,GAAIA,EAAK2ygB,GACTr8b,QAAS,UACTla,QAEQ1wC,KAAM+nf,EAAW98b,YAAY,gBAC7B32E,GAAIA,EAAKgzgB,GACT18b,QAAS,8BAGT5qD,KAAM+nf,EAAW98b,YAAY,cAC7B32E,GAAIA,EAAKizgB,GACT38b,QAAS,2BAGT5qD,KAAM+nf,EAAW98b,YAAY,iBAC7B32E,GAAIA,EAAKkzgB,GACT58b,QAAS,gCAKrBu9b,GACAhwgB,OAAQ,IAAMnH,KAAKwuf,OAAOgV,MAAMx/W,YAAc,mBAC9CtkF,MAAOwiZ,EACPz8c,OAAQ,SAAUxF,GACd,IAAIge,EAAOhe,EAAKe,QAAQsC,GACxBvD,EAAMq3gB,sBAAsBn5f,KAGpCje,KAAK42gB,oBAAsB,IAAIz8I,GAAKg9I,EAAa,IAAMn3gB,KAAKwuf,OAAOgV,MAAMx/W,YAAc,yBACvFhkJ,KAAK42gB,oBAAoBjme,WAAa,WAC9B5wC,EAAMyuf,QAAUzuf,EAAMyuf,OAAOv4a,YAC7BnyE,EAAU/D,EAAMyuf,OAAOv4a,UAAUohc,UAAY,0BAC7Ct3gB,EAAMyuf,OAAOv4a,UAAUqhc,cAG/Bt3gB,KAAK42gB,oBAAoB50D,QAAU,WAC3Bjid,EAAMyuf,QAAUzuf,EAAMyuf,OAAOv4a,YAC7BnyE,EAAU/D,EAAMyuf,OAAOv4a,UAAUohc,OAAQ,6BACzCt3gB,EAAMyuf,OAAOj/X,iBAOzB2qQ,EAAY9+X,UAAU87gB,0BAA4B,WAC9C,OAAO,GAOXh9I,EAAY9+X,UAAUg8gB,sBAAwB,SAAUn5f,GACpD,IAAI3a,EAAKtD,KAAKwuf,OAAOgV,MAAMxigB,QAAQsC,GACnC,OAAQ2a,GACJ,KAAK3a,EAAK6xgB,GACNn1gB,KAAKwuf,OAAOv4a,UAAU12E,OACtB,MACJ,KAAK+D,EAAK8xgB,GACNp1gB,KAAKwuf,OAAOgV,MAAM8Q,OAAO3+E,MACzB,MACJ,KAAKryb,EAAK+xgB,GACDr1gB,KAAKwuf,OAAOgV,MAAMtR,gBACnBlyf,KAAKwuf,OAAOgV,MAAM1U,aAAayoB,mBAAcr8gB,GAEjD,MACJ,KAAKoI,EAAKgygB,GACDt1gB,KAAKwuf,OAAOgV,MAAMtR,gBACnBlyf,KAAKwuf,OAAOgV,MAAM1U,aAAa0oB,YAEnC,MACJ,KAAKl0gB,EAAKiygB,GACDv1gB,KAAKwuf,OAAOgV,MAAMtR,gBACnBlyf,KAAKwuf,OAAOgV,MAAMvS,4BAA4Bz5X,OAElD,MACJ,KAAKl0H,EAAKuygB,GACF71gB,KAAKwuf,OAAOgV,MAAMtT,kBAClBlwf,KAAKwuf,OAAOgV,MAAMtT,iBAAiBkC,iBAEvC,MACJ,KAAK9uf,EAAKmygB,GACNz1gB,KAAKwuf,OAAOv4a,UAAUwhc,oBACtB,MACJ,KAAKn0gB,EAAKoygB,GACN11gB,KAAKwuf,OAAOv4a,UAAUyhc,gBACtB,MACJ,KAAKp0gB,EAAKsygB,GACV,KAAKtygB,EAAKkygB,GACFx1gB,KAAKwuf,OAAOgV,MAAMpT,uBAClBpwf,KAAKwuf,OAAOgV,MAAMpT,sBAAsB54X,OAE5C,MACJ,KAAKl0H,EAAKqygB,GACN31gB,KAAKwuf,OAAOgV,MAAM8Q,OAAOqD,kBACzB,MACJ,KAAKr0gB,EAAKwygB,GACF91gB,KAAKwuf,OAAOgV,MAAMxhB,uBAClBhif,KAAKwuf,OAAOgV,MAAMxhB,sBAAsBxqX,OAE5C,MACJ,KAAKl0H,EAAKyygB,GACN/1gB,KAAKwuf,OAAOgV,MAAM5hB,4BAA4BpqX,OAC9C,MACJ,KAAKl0H,EAAKmzgB,GACNz2gB,KAAKwuf,OAAOgV,MAAM8Q,OAAOsD,aACzB,MACJ,KAAKt0gB,EAAK4ygB,GACNl2gB,KAAKwuf,OAAOgV,MAAM8Q,OAAOuD,WAAU,GACnC,MACJ,KAAKv0gB,EAAK6ygB,GACNn2gB,KAAKwuf,OAAOgV,MAAM8Q,OAAOuD,WAAU,GACnC,MACJ,KAAKv0gB,EAAK+ygB,GACNr2gB,KAAKwuf,OAAOgV,MAAM8Q,OAAOwD,cAAa,GACtC,MACJ,KAAKx0gB,EAAK8ygB,GACNp2gB,KAAKwuf,OAAOgV,MAAM8Q,OAAOwD,cAAa,GACtC,MACJ,KAAKx0gB,EAAKgzgB,GACNt2gB,KAAKwuf,OAAOgV,MAAM8Q,OAAOyD,cACzB,MACJ,KAAKz0gB,EAAKizgB,GACNv2gB,KAAKwuf,OAAOgV,MAAM8Q,OAAO0D,YACzB,MACJ,KAAK10gB,EAAKkzgB,GACNx2gB,KAAKwuf,OAAOgV,MAAM8Q,OAAO2D,eACzB,MACJ,KAAK30gB,EAAKozgB,GACN12gB,KAAKwuf,OAAOgV,MAAM1U,aAAaopB,uBAAuBl4gB,KAAKwuf,OAAOv4a,WAClE,MACJ,KAAK3yE,EAAKqzgB,GACN32gB,KAAKwuf,OAAOgV,MAAM1U,aAAaqpB,sBAAsBn4gB,KAAKwuf,OAAOv4a,aAI7EikT,EAAY9+X,UAAU07gB,iBAAmB,SAAU7gc,GAC/C,IAAIutb,EAAQxjgB,KAAKwuf,OAAOgV,MACpBlggB,EAAKkggB,EAAMxigB,QAAQsC,GACnB/D,EAAOiB,SAAS2uB,eAAe7rB,EAAK6xgB,IACpCx/E,EAAMn1b,SAAS2uB,eAAe7rB,EAAK8xgB,IACnCxlX,EAAQpvJ,SAAS2uB,eAAe7rB,EAAK+xgB,IACrClgI,EAAc30Y,SAAS2uB,eAAe7rB,EAAKgygB,IAC3C8C,EAAY53gB,SAAS2uB,eAAe7rB,EAAKiygB,IACzCtmf,EAAOzuB,SAAS2uB,eAAe7rB,EAAKuygB,IACpC5e,EAAYz2f,SAAS2uB,eAAe7rB,EAAKwygB,IACzCuC,EAAkB73gB,SAAS2uB,eAAe7rB,EAAKyygB,IAC/CuC,EAAc93gB,SAAS2uB,eAAe7rB,EAAK0ygB,IAC3C+B,EAAcv3gB,SAAS2uB,eAAe7rB,EAAK2ygB,IAC3C2B,EAAap3gB,SAAS2uB,eAAe7rB,EAAKmzgB,IAC1C9md,EAAYnvD,SAAS2uB,eAAe7rB,EAAKkygB,IACzC+C,EAAgB/3gB,SAAS2uB,eAAe7rB,EAAKmygB,IAC7C+C,EAAgBh4gB,SAAS2uB,eAAe7rB,EAAKsygB,IAC7C8B,EAAgBl3gB,SAAS2uB,eAAe7rB,EAAKoygB,IAC7CiC,EAAkBn3gB,SAAS2uB,eAAe7rB,EAAKqygB,IAC/C8C,EAAoBj4gB,SAAS2uB,eAAe7rB,EAAKozgB,IACjDgC,EAAYl4gB,SAAS2uB,eAAe7rB,EAAKqzgB,IAsB7C,GArBAhhF,EAAIjxb,MAAMosC,QAAU,OACpB8+G,EAAMlrJ,MAAMosC,QAAU,OACtB8+G,EAAM1L,YAAYx/I,MAAMosC,QAAU,OAClC6e,EAAUjrD,MAAMosC,QAAU,OAC1Byne,EAAc7zgB,MAAMosC,QAAU,OAC9B4me,EAAchzgB,MAAMosC,QAAU,OAC9B0ne,EAAc9zgB,MAAMosC,QAAU,OAC9B6me,EAAgBjzgB,MAAMosC,QAAU,OAChC6me,EAAgBzzX,YAAYx/I,MAAMosC,QAAU,OAC5C8me,EAAWlzgB,MAAMosC,QAAU,OAC3B7hB,EAAKvqB,MAAMosC,QAAU,OACrBmmd,EAAUvyf,MAAMosC,QAAU,OAC1Bmmd,EAAU/yW,YAAYx/I,MAAMosC,QAAU,OACtCwne,EAAY5zgB,MAAMosC,QAAU,OAC5Bine,EAAYrzgB,MAAMosC,QAAU,OAC5Bune,EAAgB3zgB,MAAMosC,QAAU,OAChCqkW,EAAYzwY,MAAMosC,QAAU,OAC5Bsne,EAAU1zgB,MAAMosC,QAAU,OAC1B2ne,EAAkB/zgB,MAAMosC,QAAU,OAClC4ne,EAAUh0gB,MAAMosC,QAAU,OAC1B4ne,EAAUx0X,YAAYx/I,MAAMosC,QAAU,OAClCrzC,EAAkBw4E,GAClB,OAAO,EAWX,GATAA,EAAU0ic,cACN1ic,EAAU2hK,SACV+9M,EAAI7xb,UAAUM,IAAI,cAClB7E,EAAKuE,UAAUM,IAAI,gBAGnBuxb,EAAI7xb,UAAUS,OAAO,cACrBhF,EAAKuE,UAAUS,OAAO,eAEtBi/f,EAAMtR,eACN,OAAO,EAeX,GAbAv8D,EAAIjxb,MAAMosC,QAAU,QACpB8+G,EAAMlrJ,MAAMosC,QAAU,QACtB8+G,EAAM1L,YAAYx/I,MAAMosC,QAAU,QAClCwne,EAAYx0gB,UAAUM,IAAI,eAC1B2zgB,EAAYj0gB,UAAUM,IAAI,eAC1B+wY,EAAYrxY,UAAUM,IAAI,eAC1Bg0gB,EAAUt0gB,UAAUM,IAAI,eACpBo/f,EAAMnhB,mBAAqB5kf,EAAkB+lgB,EAAM8Q,OAAOsE,YAC1DhpX,EAAM9rJ,UAAUS,OAAO,cAGvBqrJ,EAAM9rJ,UAAUM,IAAI,cAEM,oBAA1B6xE,EAAU4ic,YACV1jI,EAAYzwY,MAAMosC,QAAU,QAC5Bsne,EAAU1zgB,MAAMosC,QAAU,QAC1B4ne,EAAUx0X,YAAYx/I,MAAMosC,QAAU,YAErC,CACD,IAAIvzC,EAAQ04E,EAAU14E,MAClB0hB,EAAMg3D,EAAUh3D,IACU,SAA1Bg3D,EAAU4ic,aAC+D,WAAtErV,EAAM1U,aAAa4L,aAAan9f,EAAM05f,WAAW6hB,mBACpDL,EAAkB/zgB,MAAMosC,QAAU,QAClC4ne,EAAUh0gB,MAAMosC,QAAU,QAC1B4ne,EAAUx0X,YAAYx/I,MAAMosC,QAAU,SAEhBvzC,EAAM05f,UAAUsR,iBAAmBtpf,EAAIg4e,UAAUsR,eACpEhrgB,EAAM05f,UAAUuR,iBAAmBvpf,EAAIg4e,UAAUuR,gBACjDvyb,EAAU8ic,eAAex7gB,EAAM05f,UAAUuR,eAAgBjrgB,EAAO0hB,IAEnE0wC,EAAU7rD,UAAUM,IAAI,cAGpBurD,EAAU7rD,UAAUK,SAAS,eAC7BwrD,EAAU7rD,UAAUS,OAAO,cAGvB0xE,EAAU+ic,8BACDvZ,KAAoBxpb,EAAUgjc,gBAC/CV,EAAc7zgB,MAAMosC,QAAU,QAC9B4me,EAAchzgB,MAAMosC,QAAU,QAC1B0yd,EAAMpT,wBACNooB,EAAc9zgB,MAAMosC,QAAU,SAElC6me,EAAgBjzgB,MAAMosC,QAAU,QAChC6me,EAAgBzzX,YAAYx/I,MAAMosC,QAAU,SAGxC0yd,EAAMpT,wBACNzgc,EAAUjrD,MAAMosC,QAAU,SA8BtC,OA1BI9wC,KAAKwuf,OAAOgV,MAAMvtb,UAAU14E,MAAM05f,UAAUsR,eACzCvogB,KAAKwuf,OAAOgV,MAAMvtb,UAAUh3D,IAAIg4e,UAAUsR,eAC7CtR,EAAU/yW,YAAYx/I,MAAMosC,QAAU,QAClC0yd,EAAM5hB,8BACNy2B,EAAgB3zgB,MAAMosC,QAAU,SAEpCwne,EAAY5zgB,MAAMosC,QAAU,QAC5Bine,EAAYrzgB,MAAMosC,QAAU,QACxB9wC,KAAKwuf,OAAOgV,MAAM8Q,OAAO4E,kBACzBtB,EAAWlzgB,MAAMosC,QAAU,WAI3B9wC,KAAKwuf,OAAOgV,MAAMtT,mBAClBjhe,EAAKvqB,MAAMosC,QAAU,QACrB7hB,EAAKq3L,gBAAgB5hN,MAAMosC,QAAU,SAErC9wC,KAAKwuf,OAAOgV,MAAMxhB,wBAClBiV,EAAUvyf,MAAMosC,QAAU,UAGJ,UAA1BmlC,EAAU4ic,cACV5pf,EAAKvqB,MAAMosC,QAAU,OACrBmmd,EAAUvyf,MAAMosC,QAAU,OAC1B6me,EAAgBzzX,YAAYx/I,MAAMosC,QAAU,SAEzC,GAMXopV,EAAY9+X,UAAUiX,QAAU,WACxBrS,KAAK42gB,qBACL52gB,KAAK42gB,oBAAoBvkgB,UAEzBrS,KAAK2hd,cACD3hd,KAAK2hd,YAAYttc,eACjBrU,KAAK2hd,YAAYttc,cAAc/O,YAAYtF,KAAK2hd,aAEpD3hd,KAAK2hd,YAAY3/c,UAAY,IAEjChC,KAAK2hd,iBAAczmd,EACnB8E,KAAK42gB,yBAAsB17gB,GAExBg/X,KCjfPi/I,GAA+B,WAC/B,SAASA,IACLn5gB,KAAKo5gB,kBAAoB,EACzBp5gB,KAAK2lF,UAwBT,OAtBArnF,OAAOuJ,eAAesxgB,EAAc/9gB,UAAW,kBAC3CsM,IAAK,WACD,OAAO1H,KAAKo5gB,kBAEhB/xgB,IAAK,SAAUkzf,GACXv6f,KAAKo5gB,iBAAmB7e,GAE5B5yf,YAAY,EACZC,cAAc,IAElBuxgB,EAAc/9gB,UAAUiX,QAAU,WAC9B,IAAK5U,EAAkBuC,KAAK2lF,QAAS,CACjC,IAAK,IAAIzpF,EAAI,EAAGA,EAAI8D,KAAK2lF,OAAOnpF,OAAQN,IAAK,CACzC,IAAIuggB,EAAYz8f,KAAK2lF,OAAOzpF,GAC5BuggB,EAAUpqf,UACVrS,KAAK2lF,OAAOh9D,OAAO3oB,KAAK2lF,OAAOpnF,QAAQk+f,GAAY,GACnDvggB,IAEJ8D,KAAK2lF,UAET3lF,KAAK2lF,YAASzqF,GAEXi+gB,KCrBPE,GAA4B,WAC5B,SAASA,EAAW94gB,GAChBP,KAAKs5gB,qBAAkBp+gB,EACvB8E,KAAKiyf,qBAAkB/2f,EACvB8E,KAAKqyf,qBAAkBn3f,EAEnB8E,KAAKo5f,UAAY74f,EAKrBP,KAAKqyf,gBAAkB,IAAI+E,QAAiBl8f,GAC5C8E,KAAKiyf,gBAAkB,IAAIkF,QAAiBj8f,GA8IhD,OA5IAoD,OAAOuJ,eAAewxgB,EAAWj+gB,UAAW,oBACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,qBAEjC/F,IAAK,SAAUyxgB,GACX94gB,KAAK2oI,iBAAiB,mBAAoBmwY,IAE9CnxgB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewxgB,EAAWj+gB,UAAW,mBACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUkygB,GACXv5gB,KAAK2oI,iBAAiB,kBAAmB4wY,IAE7C5xgB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewxgB,EAAWj+gB,UAAW,WACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,YAEjC/F,IAAK,SAAU8yf,GACXn6f,KAAK2oI,iBAAiB,UAAWwxX,IAErCxyf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewxgB,EAAWj+gB,UAAW,gBACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUmygB,GACXx5gB,KAAK2oI,iBAAiB,eAAgB6wY,IAE1C7xgB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewxgB,EAAWj+gB,UAAW,gBACxCsM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUoygB,GACXz5gB,KAAK2oI,iBAAiB,eAAgB8wY,IAE1C9xgB,YAAY,EACZC,cAAc,IAElByxgB,EAAWj+gB,UAAUgS,iBAAmB,SAAU8tD,GAC9C,IAAI5xD,EAAeu1e,GAAcmB,gBAAgBq5B,EAAWt6B,iBAAkB7jb,GAC9E,OAAKz9D,EAAkBuC,KAAKs5gB,kBAAoBt5gB,KAAKs5gB,gBAAgBt6B,eAAe37P,YAAY/5O,GACrFtJ,KAAKs5gB,gBAAgBt6B,eAAet3e,IAAI4B,GAE5C+vgB,EAAW9f,wBAAwBr+b,IAE9Cm+c,EAAWj+gB,UAAUutI,iBAAmB,SAAUztE,EAAUn+D,GAIxD,IAHIU,EAAkBV,IAAoB,KAAVA,KAC5BA,EAAQs8gB,EAAW9f,wBAAwBr+b,IAE3Cz9D,EAAkBuC,KAAKs5gB,iBACvBt5gB,KAAK05gB,2BAA2Bx+c,EAAUn+D,OAEzC,CACD,IAAIuM,EAAeu1e,GAAcmB,gBAAgBhgf,KAAKs5gB,gBAAgBv6B,iBAAkB7jb,GACxF,GAAIl7D,KAAKs5gB,gBAAgBt6B,eAAe37P,YAAY/5O,IAEhDtJ,KAAKs5gB,gBAAgBt6B,eAAet3e,IAAI4B,KAAkBvM,EAC1D,OAGJiD,KAAKs5gB,gBAAkBD,EAAWM,iBAAiBz4B,mBAAmBlhf,KAAKs5gB,gBAAiBp+c,EAAUn+D,KAG9Gs8gB,EAAWj+gB,UAAUs+gB,2BAA6B,SAAUx+c,EAAU20E,GAClE,IAAI+pY,EAAsB,IAAIr3R,GAC9BviP,KAAK65gB,oBAAoB,mBAAoB3+c,EAAU20E,EAAW+pY,GAClE55gB,KAAK65gB,oBAAoB,UAAW3+c,EAAU20E,EAAW+pY,GACzD55gB,KAAK65gB,oBAAoB,kBAAmB3+c,EAAU20E,EAAW+pY,GACjE55gB,KAAK65gB,oBAAoB,eAAgB3+c,EAAU20E,EAAW+pY,GAC9D55gB,KAAK65gB,oBAAoB,eAAgB3+c,EAAU20E,EAAW+pY,GAE9D55gB,KAAKs5gB,gBAAkBD,EAAWM,iBAAiB34B,gBAAgB44B,EAAqBP,EAAWt6B,mBAGvGs6B,EAAWj+gB,UAAUy+gB,oBAAsB,SAAU3+c,EAAU4kb,EAAkBjwW,EAAWwuX,GACxF,IAAI/0f,EACJA,EAAeu1e,GAAcmB,gBAAgBq5B,EAAWt6B,iBAAkB7jb,GACtEA,IAAa4kb,EACbue,EAAqBj6f,IAAIkF,EAAcumI,GAGvCwuX,EAAqBj6f,IAAIkF,EAAc+vgB,EAAW9f,wBAAwBr+b,KAGlFm+c,EAAW9f,wBAA0B,SAAUr+b,GAC3C,IAAIn+D,OAAQ7B,EACZ,OAAQggE,GACJ,IAAK,mBACDn+D,EAAQ,SACR,MACJ,IAAK,UACDA,EAAQ,EACR,MACJ,IAAK,kBACDA,EAAQ,MACR,MACJ,IAAK,eACDA,EAAQ,GACR,MACJ,IAAK,eACDA,EAAQ,EAGhB,OAAOA,GAEXs8gB,EAAWj+gB,UAAUiX,QAAU,WACtB5U,EAAkBuC,KAAKqyf,kBACxBryf,KAAKqyf,gBAAgBhgf,UAEpB5U,EAAkBuC,KAAKiyf,kBACxBjyf,KAAKiyf,gBAAgB5/e,UAEpB5U,EAAkBuC,KAAKs5gB,kBACxBD,EAAWM,iBAAiBp1gB,OAAOvE,KAAKs5gB,iBAE5Ct5gB,KAAKs5gB,qBAAkBp+gB,EACvB8E,KAAKqyf,qBAAkBn3f,EACvB8E,KAAKiyf,qBAAkB/2f,GAE3Bm+gB,EAAW5sd,MAAQ,WACfzsD,KAAK25gB,iBAAiBltd,SAE1B4sd,EAAWS,UAAY,IACvBT,EAAWU,aAAe,IAC1BV,EAAWW,YAAc,IACzBX,EAAWY,aAAe,KAC1BZ,EAAWM,iBAAmB,IAAI54B,GAClCs4B,EAAWt6B,iBAAmB,EACvBs6B,KCzJPt5F,GAAwB,WAIxB,SAASA,EAAOyuE,GAIZxuf,KAAKk6gB,aAAc,EAInBl6gB,KAAKm6gB,eAAgB,EACrBn6gB,KAAK4/f,gBAAa1kgB,EAClB8E,KAAKo6gB,cAAgB,EACrBp6gB,KAAKq6gB,YAAc,EACnBr6gB,KAAKs6gB,gBAAkB,EACvBt6gB,KAAKu6gB,aAAc,EACnBv6gB,KAAKwuf,OAASA,EA4nJlB,OAvnJAzuE,EAAO3kb,UAAUkyD,OAAS,WAEXttD,KAAKwuf,OAAOzmQ,MAAM,GACb69Q,YAAY,IAKhC7lF,EAAO3kb,UAAUiX,QAAU,WACvBrS,KAAKwuf,YAAStzf,EACd8E,KAAKjD,WAAQ7B,EACb8E,KAAKk6gB,iBAAch/gB,EACnB8E,KAAKm6gB,mBAAgBj/gB,EACrB8E,KAAK4/f,gBAAa1kgB,EAClB8E,KAAKo6gB,mBAAgBl/gB,EACrB8E,KAAKq6gB,iBAAcn/gB,EACnB8E,KAAKs6gB,qBAAkBp/gB,EACvB8E,KAAKu6gB,iBAAcr/gB,GAMvB6kb,EAAO3kb,UAAUo/gB,YAAc,SAAUxjQ,GAGrC,IAAK,IADDzpG,EADAxtK,EAAQC,KAEH9D,EAAI,EAAGA,EAAI86Q,EAASx6Q,OAAQN,IAAK,CACtC,IAAI8uS,EAAUh0B,EAAS96Q,GAGvB,GAFAqxK,EAAOvtK,KAAKwuf,OAAOisB,cAAczvO,GACjChrS,KAAK06gB,cAAc16gB,KAAKwuf,OAAOmsB,iBAAkB3vO,GAC7ChrS,KAAKwuf,OAAOzmQ,MAAMvrP,OAAS,EAAG,CAE9B,IAAK,IADDgxK,EAAY,EACP7lJ,EAAM,EAAGA,EAAM3nB,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQmrB,IAAO,CACrD,IAAIizf,EAAW56gB,KAAKwuf,OAAOzmQ,MAAMpgO,GAGjC,GAFuBizf,EAASC,aACpB7vO,EAAQl5R,OACY8ogB,IAAartW,EACzC,MAEJC,IAEAA,EAAYxtK,KAAKwuf,OAAOzmQ,MAAMvrP,OAAS,GACvCwD,KAAKwuf,OAAOssB,WAAWttW,EAAWD,GAG1CvtK,KAAK+6gB,cAAc/vO,EAAS,EAAGhrS,KAAKwuf,QAExCxuf,KAAKg7gB,sBACL76gB,WAAW,WACHJ,EAAMyuf,SACNzuf,EAAMyuf,OAAOI,mBACb7uf,EAAMo6gB,eAAgB,MAUlCp6F,EAAO3kb,UAAU2/gB,cAAgB,SAAU/vO,EAASl5R,EAAO08e,EAAQysB,GAC/D,IACIC,EADAhT,EAAQl9N,EAAQhuR,WAEpB,GACIhd,KAAKwuf,OAAO2sB,yBAAyBjT,GAAO,GAC5CgT,EAAYl7gB,KAAKo7gB,YAAYlT,EAAOp2f,GACpCA,EAAQ,EACR9R,KAAKwuf,OAAO2sB,yBAAyBjT,GAAO,GAC5CA,EAAQgT,QACHhT,IAQbnoF,EAAO3kb,UAAUighB,mBAAqB,SAAUrwO,EAASwjN,EAAQjhV,GAE7D,IAAI+tW,EAAqB9sB,EAAO+sB,2BAA2BvwO,GAAS,GACpE,GAAIswO,EAAoB,CACpB,IAAIxwb,EAASwwb,EAAmBj8gB,QAChCyrF,EAAOyiF,KAAOA,EACdihV,EAAOgtB,mBAAmBxwO,EAAQ+rN,eAAe,GACjDxpV,EAAKw6V,aAAe/ngB,KAAKy7gB,wBAAwBjtB,EAAQ1ja,GACzD9qF,KAAK07gB,2BAA2B5wb,GAIpC,GADAwwb,EAAqB9sB,EAAO+sB,2BAA2BvwO,GAAS,GACxC,CACpB,IAAI/+K,EAASqvZ,EAAmBj8gB,QAChC4sH,EAAOshD,KAAOA,EACdihV,EAAOgtB,mBAAmBxwO,EAAQ+rN,eAAe,GACjDxpV,EAAKy6V,aAAehogB,KAAKy7gB,wBAAwBjtB,EAAQviY,GACzDjsH,KAAK07gB,2BAA2BzvZ,KAMxC8zT,EAAO3kb,UAAUsghB,2BAA6B,SAAUn7gB,GACpD,IAAIs6gB,EAAet6gB,EAAKgtK,KAAKstW,aACzBc,EAAY37gB,KAAKwuf,OAAOotB,gBAAgBr7gB,EAAKmngB,kBAC7CrogB,EAAQkB,EAAKlB,QACjBW,KAAKwuf,OAAOqJ,eAAegjB,GAAcc,GAAat8gB,EACtD,IAAK,IAAIqkB,EAAI,EAAGA,EAAIrkB,EAAMg4f,aAAa76f,OAAQknB,IAAK,CAChD,IAAIrjB,EAAQhB,EAAMg4f,aAAa3ze,GAC3BrjB,aAAiB4mgB,IACjBjngB,KAAK67gB,iBAAiBx7gB,GAAO,GAAO,GAG5C,OAAOhB,GAEX0gb,EAAO3kb,UAAU0ghB,wBAA0B,SAAUjW,GACjD,IAAI7of,EAAa6of,EAAO7of,WACxB,GACQA,aAAsBk6e,GACtBl3f,KAAK+7gB,qBAAqB/+f,GAG1Bhd,KAAKg8gB,iBAAiBh/f,SAGrBA,EAAaA,EAAWuzf,aAKrCxwF,EAAO3kb,UAAU2ghB,qBAAuB,SAAUlW,GAC9C,IAAK,IAAInif,EAAI,EAAGA,EAAImif,EAAOxO,aAAa76f,OAAQknB,IAE5C,IAAK,IADDumC,EAAO47c,EAAOxO,aAAa3ze,GACtBxnB,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAAK,CAC3C,IAAI8E,EAAUipD,EAAK7vC,SAASle,GACxB8E,aAAmBy+f,IAAyC,IAAtBz+f,EAAQ0+f,WAC9C1+f,EAAQoxgB,mBAAmBpygB,KAAKwuf,UAQhDzuE,EAAO3kb,UAAU4ghB,iBAAmB,SAAUnW,GAC1C,IAAK,IAAI3pgB,EAAI,EAAGA,EAAI2pgB,EAAOxO,aAAa76f,OAAQN,IAE5C,IAAK,IADDwpE,EAAMmgc,EAAOxO,aAAan7f,GACrBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAEzC,IAAK,IADDqkD,EAAOrC,EAAI2xb,aAAa3ze,GACnB4C,EAAI,EAAGA,EAAIyhD,EAAKsvb,aAAa76f,OAAQ8pB,IAAK,CAC/C,IAAI4hf,EAAQngc,EAAKsvb,aAAa/we,GAC1B4hf,aAAiBhR,GACjBl3f,KAAK+7gB,qBAAqB7T,GAG1BlogB,KAAKg8gB,iBAAiB9T,KAY1CnoF,EAAO3kb,UAAUqghB,wBAA0B,SAAUjtB,EAAQqX,GAEzD,GADA7lgB,KAAKwuf,OAAOytB,yBAAyBpW,EAAQrX,EAAOmsB,kBACjB,IAA/B9U,EAAOxO,aAAa76f,OAAc,CAClC,IAAI0/gB,EAAY,IAAIhlB,GAChBjtc,EAAO,IAAIo9c,GAAW6U,GAC1BA,EAAU7kB,aAAa7yf,KAAKylD,GAC5B47c,EAAOxO,aAAa7yf,KAAK03gB,GACzBA,EAAU5kB,gBAAkBuO,EAEhC7lgB,KAAK87gB,wBAAwBjW,GAC7B,IAAK,IAAI3pgB,EAAI,EAAGA,EAAI2pgB,EAAOxO,aAAa76f,OAAQN,IAAK,CACjD,IAAIgsgB,EAAQrC,EAAOxO,aAAan7f,GAChCsyf,EAAO2sB,yBAAyBjT,GAAO,GACvClogB,KAAKo7gB,YAAYlT,EAAO,GACxB1Z,EAAO2sB,yBAAyBjT,GAAO,GAE3C,IAAIxhgB,EAAOm/f,EAAO6B,iBAIlB,MAHa,cAAThhgB,GAAiC,eAATA,GAAkC,oBAATA,GACjD1G,KAAKm8gB,mBAAmB3tB,EAAO4tB,WAAWpvgB,EAAIwhf,EAAOmsB,iBAAiB3tgB,EAAG64f,GAEtEA,GAOX9lF,EAAO3kb,UAAU+ghB,mBAAqB,SAAUE,EAAUvf,GACtD,IAAIwf,EAAYxf,EAAW9vf,EAAIqvgB,EAC3BE,EAAkBzf,EAAWvvV,KAAKurV,kBAAkB/if,OAAU+mf,EAAWvvV,KAAKurV,kBAAkB/if,OAAS,IAAO,GAEpHsmgB,GADAC,EAAYjwgB,KAAKC,IAAIgwgB,EAAWC,IACTzf,EAAW9vf,EAClC8vf,EAAW9vf,EAAIsvgB,EACf,IAAK,IAAIpghB,EAAI,EAAGA,EAAI4ggB,EAAWzF,aAAa76f,OAAQN,IAAK,CACrD,IAAIsghB,EAAc1f,EAAWzF,aAAan7f,GACtCsghB,aAAuBtlB,IACvBslB,EAAYzvgB,EAAIyvgB,EAAYzvgB,EAC5ByvgB,EAAYxvgB,EAAIwvgB,EAAYxvgB,EAAIqvgB,GAGhCr8gB,KAAKy8gB,iCAAiCD,EAAaH,KAS/Dt8F,EAAO3kb,UAAUqhhB,iCAAmC,SAAUC,EAAaL,GACvEK,EAAY1vgB,EAAI0vgB,EAAY1vgB,EAAIqvgB,EAChC,IAAK,IAAInghB,EAAI,EAAGA,EAAIwghB,EAAYrlB,aAAa76f,OAAQN,IAAK,CACtD,IAAIsghB,EAAcE,EAAYrlB,aAAan7f,GACvCsghB,aAAuBrW,IACvBnmgB,KAAK28gB,oCAAoCH,EAAaH,KASlEt8F,EAAO3kb,UAAUuhhB,oCAAsC,SAAUC,EAAWP,GACxEO,EAAU5vgB,EAAI4vgB,EAAU5vgB,EAAIqvgB,EAC5B,IAAK,IAAInghB,EAAI,EAAGA,EAAI0ghB,EAAUvlB,aAAa76f,OAAQN,IAC/C8D,KAAK68gB,qCAAqCD,EAAUvlB,aAAan7f,GAAImghB,IAQ7Et8F,EAAO3kb,UAAUyhhB,qCAAuC,SAAU/O,EAAYuO,GAC1EvO,EAAW9ggB,EAAI8ggB,EAAW9ggB,EAAIqvgB,EAC9B,IAAK,IAAInghB,EAAI,EAAGA,EAAI4xgB,EAAWzW,aAAa76f,OAAQN,IAC5C4xgB,EAAWzW,aAAan7f,aAAcg7f,IACtC4W,EAAWzW,aAAan7f,GAAG6Q,EAAI+ggB,EAAWzW,aAAan7f,GAAG6Q,EAC1D+ggB,EAAWzW,aAAan7f,GAAG8Q,EAAI8ggB,EAAWzW,aAAan7f,GAAG8Q,EAAIqvgB,GAG9Dr8gB,KAAKy8gB,iCAAiC3O,EAAWzW,aAAan7f,GAAImghB,IAS9Et8F,EAAO3kb,UAAUgghB,YAAc,SAAUlT,EAAOp2f,EAAOgrgB,GAQnD,OANI5U,aAAiBhR,GACLl3f,KAAK+8gB,gBAAgB7U,EAAOp2f,GAG5B9R,KAAKg9gB,YAAY9U,EAAOp2f,IAEvB00f,oBAMrBzmF,EAAO3kb,UAAU6hhB,mBAAqB,SAAU/ia,EAAMw3Z,GAClD,IACIA,EAAgB95R,WAAcn6O,EAAkBi0gB,EAAgBzf,kBACb,WAAlDyf,EAAgBzf,gBAAgBjvd,eAAgF,UAAlD0ue,EAAgBzf,gBAAgBjvd,gBACxC,IAAvD0ue,EAAgBzf,gBAAgB+F,WAAWqC,OAgB3CqX,EAAgB17f,MAAQkkG,EAAKlkG,MAC7B07f,EAAgB3kgB,EAAImtG,EAAKntG,EACzB2kgB,EAAgB1kgB,EAAIktG,EAAKltG,MAlBiC,CAC1D,IAEIgJ,EAAQhW,KAAKwuf,OAAO0uB,WAAWC,sBAAsBzL,EAAgBrf,iBACrE7lf,EAAO0tG,EAAKntG,EACsC,WAAlD2kgB,EAAgBzf,gBAAgBjvd,cAChCx2B,IAAS0tG,EAAKlkG,MAAQA,GAAS,EAG/BxJ,GAAQ0tG,EAAKlkG,MAAQA,EAEzB07f,EAAgB17f,MAAQA,EACxB07f,EAAgB3kgB,EAAIP,EACpBklgB,EAAgB1kgB,EAAIktG,EAAKltG,EAO7B,OAAO0kgB,GAMX3xF,EAAO3kb,UAAUgihB,cAAgB,SAAU1L,GACvC,IAAIznd,OAAO/uD,EAKX,OAJA+uD,EAAO,IAAIo9c,GAAWqK,GACtBznd,EAAKj0C,MAAQ07f,EAAgB17f,MAC7B07f,EAAgBra,aAAa7yf,KAAKylD,GAClCA,EAAKgtc,UAAYya,EACVznd,GAOX81X,EAAO3kb,UAAU2hhB,gBAAkB,SAAU9lB,EAAWxtN,GAGpD,GAFAzpS,KAAKi9gB,mBAAmBj9gB,KAAKwuf,OAAOmsB,iBAAkB1jB,GACtDj3f,KAAKq9gB,gBAAgBpmB,GACjBA,EAAUr/Q,UACV53O,KAAKs9gB,sBAAsBrmB,GAAW,QAKtC,IAFA,IAAIhtc,EAAOw/O,EAAYwtN,EAAUI,aAAa76f,OAC1Cy6f,EAAUI,aAAa5tN,QAAavuS,EACjC+uD,aAAgBo9c,IAAY,CAC/B,GAAIp9c,EAAK4nd,eAAiBp0gB,EAAkBuC,KAAK4/f,cACxCnigB,EAAkBw5f,EAAUhF,iBAAkB,CAE/C,IAAIrjP,GAAmBkwP,GAAcO,oBAAoBpI,EAAUhF,gBAAgBrjP,iBACnF5uQ,KAAKwuf,OAAO+uB,kBAAkB3uQ,GAItCqoP,GADAhtc,EAAOjqD,KAAK+wQ,WAAW9mN,EAAM,IACZgtc,UACjBhtc,EAAOA,EAAK2od,SAIpB,OADA5ygB,KAAKw9gB,mBAAmBx9gB,KAAKwuf,OAAQyI,GAC9BA,GAEXl3E,EAAO3kb,UAAUqihB,kBAAoB,WACjCz9gB,KAAKq6gB,YAAc,EACnBr6gB,KAAKs6gB,gBAAkB,EACvBt6gB,KAAKo6gB,cAAgB,GAEzBr6F,EAAO3kb,UAAUsihB,wBAA0B,SAAUzzd,GAEjD,IADA,IAAI2od,EAAW3od,EAAK2od,SACbA,aAAoBvL,IAAY,CACnC,GAAIuL,EAASx4f,SAAS5d,OAAS,EAAG,CAC9B,IAAIwE,EAAU4xgB,EAASx4f,SAASuO,OAAO,EAAG,GAAG,GAC7CshC,EAAK7vC,SAAS5V,KAAKxD,GACnBA,EAAQipD,KAAOA,EACf,MAG+C,IAA3C2od,EAAS3b,UAAUI,aAAa76f,OAChCo2gB,EAAS3b,UAAU5kf,UAGnBuggB,EAASvggB,UAEbuggB,EAAW3od,EAAK2od,WAI5B7yF,EAAO3kb,UAAU21Q,WAAa,SAAU9mN,EAAM/qC,GAC1C,IAAI+3e,EAAYhtc,EAAKgtc,UACQ,IAAzBhtc,EAAK7vC,SAAS5d,QACdwD,KAAK09gB,wBAAwBzzd,GAEjC,IAAIjpD,EAAUipD,EAAK7vC,SAAS8E,GAE5B,IADAlf,KAAKy9gB,oBACEz8gB,aAAmBmxgB,IACtBnygB,KAAKuiT,cAAcvhT,EAASi2f,GAC5Bhtc,EAAOjpD,EAAQipD,KACfjpD,EAAUA,EAAQ28gB,YAEtB,OAAO1zd,GAGX81X,EAAO3kb,UAAUmnT,cAAgB,SAAUvhT,EAASi2f,GAChD,IAAIhtc,EAAOjpD,EAAQipD,KACfj7B,EAAO,GACPld,EAAQ9Q,EAAQ8kgB,aACpB,GAAI9kgB,aAAmBy+f,GAqBnB,OApB0B,IAAtBz+f,EAAQ0+f,YAA4D,IAAzC1/f,KAAKwuf,OAAOhie,OAAOjuB,QAAQyC,IACtDhB,KAAKwuf,OAAOhie,OAAOhoB,KAAKxD,GAE5BhB,KAAK49gB,sBAAsB58gB,QACvBA,EAAQipD,KAAK6nd,cAAgBr0gB,EAAkBuD,EAAQyuY,YAAczvY,KAAKu6gB,aACtE98gB,EAAkBuD,EAAQuxgB,iBAC1BvygB,KAAKs9gB,sBAAsBrmB,GAAW,EAAOj2f,EAAQipD,MAEzDjqD,KAAK69gB,eAAe5zd,IAEfxsD,EAAkBuD,EAAQ28gB,cAAgB39gB,KAAKwuf,OAAOmsB,iBAAiB3kgB,MAAQ,IAAMhV,EAAQipD,KAAK6nd,aACvG9xgB,KAAK09gB,wBAAwBzzd,GAExBxsD,EAAkBuD,EAAQ28gB,cAAuD,IAAvC39gB,KAAKwuf,OAAOmsB,iBAAiB3kgB,QAC5EhW,KAAK69gB,eAAe5zd,GAChBA,EAAKgtc,UAAUv9W,YAAczvF,IAASxsD,EAAkBwsD,EAAK2od,WAC7D5ygB,KAAKwuf,OAAOmsB,iBAAiB5kgB,QAAU,GACvC/V,KAAK89gB,iBAAiB7zd,KAKlC,GAAIjpD,aAAmBmogB,IAAsBnpgB,KAAKu6gB,aAAev5gB,aAAmB8ngB,GAYhF,OAXIrrgB,EAAkBuD,EAAQ28gB,cAAgB39gB,KAAKwuf,OAAOmsB,iBAAiB3kgB,MAAQ,IAAMhV,EAAQipD,KAAK6nd,cAClG9xgB,KAAK09gB,wBAAwBzzd,QAE7BjpD,EAAQipD,KAAK6nd,cAAgBr0gB,EAAkBuD,EAAQ28gB,eACnD39gB,KAAK+9gB,gBAAgB9zd,EAAKgtc,WAC1Bj3f,KAAK69gB,eAAe5zd,GAGpBjqD,KAAKs9gB,sBAAsBrzd,EAAKgtc,WAAW,EAAOhtc,GAAM,KAKpE,IAAIj0C,EAAQhV,EAAQgV,MA+BpB,GA9BIhV,aAAmBoygB,GAEN,MADbpkf,EAAOhvB,KAAKwuf,OAAOwvB,eAAeh9gB,EAAQ4+f,WAAY5+f,EAAQi2f,UAAU6F,WAAWvvV,OAE/EvsK,EAAQguB,KAAOA,EAGfA,EAAOhuB,EAAQguB,KAGdhuB,aAAmB4ngB,KACxB5ogB,KAAKi+gB,qCAAqCj9gB,EAAQguB,KAAMhuB,GACxDguB,EAAOhuB,EAAQguB,MAGfhuB,aAAmB4ngB,KACnB5yf,EAAQhW,KAAKwuf,OAAO0uB,WAAWgB,YAAYl9gB,EAASA,EAAQqxf,iBACvC,OAAjBrxf,EAAQguB,OACRhuB,EAAQgV,MAAQhW,KAAKm+gB,YAAYlnB,EAAWj3f,KAAKwuf,OAAQ18e,EAAOm4C,EAAMjpD,KAG1EhB,KAAKwuf,kBAAkBC,IACpBzuf,KAAKwuf,OAAOmsB,iBAAiB5kgB,OAAS/U,EAAQ+U,QAAU/V,KAAKwuf,OAAOmsB,iBAAiB3tgB,IAAMhN,KAAKwuf,OAAO4tB,WAAWpvgB,IACrHhN,KAAKo+gB,eAAep+gB,KAAKwuf,OAAQvkc,GAC7BjpD,aAAmBoygB,IACnBpzgB,KAAKq+gB,gBAAgBr9gB,GAErBA,EAAQ4hP,iBACR5iP,KAAKs+gB,eAAet9gB,EAAQ4hP,kBAGhC5sO,EAAQhW,KAAKwuf,OAAOmsB,iBAAiB3kgB,QAAUhW,KAAKwuf,OAAO3rd,SAE3D7iC,KAAKu+gB,iBAAiBtnB,EAAWj2f,GAC7BvD,EAAkBuD,EAAQ28gB,cAAgB39gB,KAAKwuf,OAAOmsB,iBAAiB3kgB,MAAQ,IAAMhV,EAAQipD,KAAK6nd,aAClG9xgB,KAAK09gB,wBAAwBzzd,IAEvBjpD,EAAQipD,KAAK6nd,cAAgBr0gB,EAAkBuD,EAAQ28gB,cAAuD,IAAvC39gB,KAAKwuf,OAAOmsB,iBAAiB3kgB,QAC1GhW,KAAK69gB,eAAe5zd,GAChBA,EAAKgtc,UAAUv9W,YAAczvF,GAAQjqD,KAAKwuf,OAAOmsB,iBAAiB5kgB,QAAU,GAC5E/V,KAAK89gB,iBAAiB7zd,SAI7B,GAAIjpD,aAAmB4ngB,GACxB,GAAqB,OAAjB5ngB,EAAQguB,KAAe,CACvB,IAAIwvf,EAAcx9gB,EAAQipD,KAC1BjqD,KAAKy+gB,sBAAsBD,EAAaA,EAAYpkgB,SAAS7b,QAAQyC,IACrEhB,KAAK69gB,eAAeW,GAEpBx9gB,EAAQgV,MAAQhW,KAAKm+gB,YAAYlnB,EAAWj3f,KAAKwuf,OAAQ18e,EAAOm4C,EAAMjpD,GACtEhB,KAAKu+gB,iBAAiBtnB,EAAWj2f,QAIjC,GACIipD,EAAOjpD,EAAQipD,KACfjqD,KAAK0+gB,uBAAuBz0d,EAAMjpD,EAASA,EAAQguB,KAAMhuB,EAAQgV,MAAOhV,EAAQqxf,iBAChFryf,KAAK2+gB,8BAA8B10d,EAAMjpD,GACrCA,aAAmBoygB,IACnBpzgB,KAAKq+gB,gBAAgBr9gB,SAEpBA,EAAQipD,OAASA,GAAQjqD,KAAKs+gB,eAAet9gB,SAI1D,GACIipD,EAAOjpD,EAAQipD,KACfjqD,KAAK4+gB,0BAA0B3nB,EAAWj2f,GAC1ChB,KAAK2+gB,8BAA8B10d,EAAMjpD,GACrCA,aAAmBoygB,IACnBpzgB,KAAKq+gB,gBAAgBr9gB,SAEpBA,EAAQipD,OAASA,GAAQjqD,KAAKs+gB,eAAet9gB,IAE1D,GAAa,OAATguB,GAA0B,OAATA,EAAe,CAChC,IAAI+uM,EAAe9zK,EAAK7vC,SAAS7b,QAAQyC,GACrC+8N,GAAgB,GAChB/9N,KAAKy+gB,sBAAsBx0d,EAAM8zK,IAGrC/8N,EAAQipD,KAAK6nd,cAAgBr0gB,EAAkBuD,EAAQ28gB,cAAyB,OAAT3uf,GAA0B,OAATA,KACxFhvB,KAAK69gB,eAAe78gB,EAAQipD,MACf,OAATj7B,GAAiBvxB,EAAkBuD,EAAQyuY,UAC3CzvY,KAAKs9gB,sBAAsBrmB,GAAW,EAAMhtc,GAAM,GAEpC,OAATj7B,IACDvxB,EAAkBuD,EAAQyuY,UAC1BzvY,KAAKo+gB,eAAep+gB,KAAKwuf,OAAQxtf,EAAQipD,MAAM,GAG/CjqD,KAAKo+gB,eAAep+gB,KAAKwuf,OAAQxtf,EAAQipD,KAAK2od,UAAU,MASxE7yF,EAAO3kb,UAAU2ihB,gBAAkB,SAAU9mB,GACzC,IAAIhtc,EAAOgtc,EAAUj6e,WACrB,GAAIitC,IAASxsD,EAAkBuC,KAAKwuf,OAAOv4a,WAEvC,IADA,IAAIi8b,EAAajod,EAAK7vC,SAAS,GACxB83f,GAAY,CACf,GAAIA,aAAsBzS,MACtByS,EAAalygB,KAAKwuf,OAAOv4a,UAAU4oc,4BAA4B3M,IAC/Cjod,KAAKgtc,UAAU7jd,OAAO6jd,GAClC,OAAO,EAGf,GAAIib,aAAsBtJ,GACtB,OAAO,EAEXsJ,EAAaA,EAAWziI,SAGhC,OAAO,GAEXswC,EAAO3kb,UAAUijhB,gBAAkB,SAAUr9gB,GAEzC,IAAIguB,EAAOhvB,KAAKwuf,OAAOwvB,eAAeh9gB,EAAQ4+f,WAAY5+f,EAAQi2f,UAAU6F,WAAWvvV,MAC1E,KAATv+I,IACAhuB,EAAQguB,KAAOA,EACfhvB,KAAKwuf,OAAO0uB,WAAWgB,YAAYl9gB,EAASA,EAAQqxf,mBAG5DtyE,EAAO3kb,UAAUujhB,8BAAgC,SAAU10d,EAAMjpD,IACzDipD,IAASjpD,EAAQipD,MAAQjpD,EAAQipD,OAASA,GAAQxsD,EAAkBuD,EAAQ28gB,eACxE38gB,EAAQipD,KAAK6nd,eACjB9xgB,KAAK69gB,eAAe5zd,GAEpBjpD,EAAQipD,OAASA,GAAQjqD,KAAKwuf,kBAAkBC,IAC7Czuf,KAAKwuf,OAAOmsB,iBAAiB5kgB,OAAS/U,EAAQ+U,QACjD/V,KAAKwuf,OAAOmsB,iBAAiB3tgB,IAAMhN,KAAKwuf,OAAO4tB,WAAWpvgB,EAC1DhN,KAAKo+gB,eAAep+gB,KAAKwuf,OAAQxtf,EAAQipD,MAEpCjpD,EAAQipD,OAASA,GAAQxsD,EAAkBuD,EAAQ28gB,cACrD1zd,EAAKgtc,UAAUv9W,YAAczvF,IAASA,EAAK6nd,cAAgB9xgB,KAAKwuf,OAAOmsB,iBAAiB5kgB,QAAU,GACrG/V,KAAK89gB,iBAAiB7zd,IAG9B81X,EAAO3kb,UAAU6ihB,qCAAuC,SAAUjvf,EAAMhuB,GACpE,IACI8Q,EAAQgtf,GAAcE,WAAWhwe,GADzB,KAAM,KAAM,OAExB,GAAIld,GAAS,EAAG,CACZ,IAAIgtgB,EAAY9vf,EAAKld,IACF,OAAdgtgB,GAA+B,OAAT9vf,GAAiC,OAAd8vf,GAA+B,OAAT9vf,GAC9C,OAAd8vf,GAA+B,OAAT9vf,IAC1BhvB,KAAK++gB,sBAAsB/+gB,KAAKwuf,OAAQxtf,EAAS8Q,EAAOgtgB,KAOpE/+F,EAAO3kb,UAAU0ihB,iBAAmB,SAAU7zd,GAC1C,IAAI2od,EAAW3od,EAAK2od,SAChBA,IAA+D,IAAnD3od,EAAKgtc,UAAUI,aAAa94f,QAAQq0gB,KAChDA,EAAS3b,UAAUI,aAAa1ue,OAAOiqf,EAAS9M,aAAc,GAC9D77c,EAAKgtc,UAAUI,aAAa7yf,KAAKougB,GACjCA,EAAS3b,UAAYhtc,EAAKgtc,YAGlCl3E,EAAO3kb,UAAUkjhB,eAAiB,SAAU/pgB,GACxCvU,KAAKy9gB,oBAGL,IAAK,IAFDxzd,EAAO11C,EAAe01C,KACtBj0C,EAAQ,EACH9Z,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAAK,CAC3C,IAAI8E,EAAUipD,EAAK7vC,SAASle,GAE5B,GADA8Z,GAAShV,EAAQgV,MACbzB,IAAmBvT,EACnB,MAGR,IAAIg+gB,EAAqBh/gB,KAAKwuf,OAAOmsB,iBAAiB3kgB,MAAQA,EAAQ,EAetE,OAdKgpgB,EAWIzqgB,EAAequO,iBACpB5iP,KAAKs+gB,eAAe/pgB,EAAequO,kBAXnC5iP,KAAKwuf,OAAOywB,YAAYj/gB,KAAKwuf,OAAOmsB,iBAAiB5tgB,EAAIiJ,GACW,YAAhEzB,EAAe01C,KAAKgtc,UAAUhF,gBAAgBjvd,eAC9CzuB,aAA0Bq0f,IAC1B5ogB,KAAKk/gB,2BAA2B3qgB,GAEhC9W,EAAkB8W,EAAeopgB,cAAgB39gB,KAAKwuf,OAAOmsB,iBAAiB3kgB,MAAQ,IAClFzB,EAAe01C,KAAK6nd,cACxB9xgB,KAAK09gB,wBAAwBzzd,IAM9B+0d,GAEXj/F,EAAO3kb,UAAUwihB,sBAAwB,SAAU58gB,GAC/C,GAA0B,IAAtBA,EAAQ0+f,UACH1/f,KAAKu6gB,aAAiB98gB,EAAkBuD,EAAQ2+f,YAAa3+f,EAAQ+xgB,cACtE/ygB,KAAKwuf,OAAO2wB,YAAY36gB,KAAKxD,GAC7BhB,KAAKu6gB,aAAc,EACnBv5gB,EAAQ+xgB,aAAc,QAGzB,GAAI/ygB,KAAKwuf,OAAO2wB,YAAY3ihB,OAAS,EACtC,GAA0B,IAAtBwE,EAAQ0+f,UAAiB,EACrB39b,EAAQ/hE,KAAKwuf,OAAO2wB,YAAYn/gB,KAAKwuf,OAAO2wB,YAAY3ihB,OAAS,IAC3D+1gB,iBAAmBvxgB,GAAavD,EAAkBskE,EAAM49b,YAAa59b,EAAMgxc,cACjF/ygB,KAAKu6gB,aAAc,OAGtB,CACD,IAAIx4c,EACA/gE,KADA+gE,EAAQ/hE,KAAKwuf,OAAO2wB,YAAYn/gB,KAAKwuf,OAAO2wB,YAAY3ihB,OAAS,IAC/CmjgB,WAClB3/f,KAAKwuf,OAAO2wB,YAAYt5W,MACxB7lK,KAAKu6gB,aAAc,KASnCx6F,EAAO3kb,UAAUkihB,sBAAwB,SAAUrmB,EAAWmoB,EAAan1d,EAAMo1d,GAC7EA,GAAe5hhB,EAAkB4hhB,IAAwBA,EAEzD,IAGIxM,EAHAyM,EAAoBt/gB,KAAKwuf,OAAO0uB,WAAWqC,qBAAqBtoB,EAAU5E,iBAC1Eric,EAAYsvd,EAAkBl6B,OAC9BkY,EAAgBt9f,KAAKw/gB,iBAAiBvoB,GAGtC4b,EADA5b,EAAUI,aAAa76f,OAAS,IAAM6ihB,EACzBpoB,EAAUI,aAAa,GAGvB+nB,EAAcp/gB,KAAKo9gB,cAAcnmB,GAAahtc,EAG3DjqD,KAAKwuf,kBAAkBC,IACpBzuf,KAAKwuf,OAAOmsB,iBAAiB5kgB,OAASunf,EAAgBttc,GACtDhwD,KAAKwuf,OAAOmsB,iBAAiB3tgB,IAAMhN,KAAKwuf,OAAO4tB,WAAWpvgB,GAC7DhN,KAAKo+gB,eAAep+gB,KAAKwuf,OAAQqkB,GAGrC,IAAIrhQ,EAAcxxQ,KAAKy/gB,eAAexoB,EAAWjnc,GACpBsvd,EAAkBI,gBAE1Cvie,MAAMn9C,KAAKo6gB,gBACTpqd,EAAYhwD,KAAKo6gB,gBACpBpqd,EAAYhwD,KAAKo6gB,cACQp6gB,KAAKs6gB,iBAElC,IAAIn+P,EAAY,EACZE,EAAe,EACfH,EAAa,EACbnmQ,EAASi6C,EACTwtc,EAAkBvG,EAAUhF,gBAAgBuL,gBACxB,aAApBA,EACIhsP,EAAcxhN,EACdqsN,GAAgB7K,EAAcxhN,EAG9BmsN,GAAa3K,EAAcxhN,EAGN,YAApBwtc,EACLrhP,GAAa3K,GAAe2K,EAAYpmQ,EAASsmQ,GAE5C7K,EAAc2K,EAAYpmQ,EAASsmQ,IACxCF,GAAa3K,GAAe2K,EAAYpmQ,EAASsmQ,IAErDF,GAAamhP,EACbjhP,GAAgByiP,GAAcO,oBAAoBpI,EAAUhF,gBAAgBsL,cAC5E,IAAK,IAAIrhgB,EAAI,EAAGA,EAAI22gB,EAAWz4f,SAAS5d,OAAQN,IAAK,CACjD,IAAI8E,EAAU6xgB,EAAWz4f,SAASle,GAClC,GAAI8E,aAAmBmogB,GAAoB,CACvC,IAAInme,EAAgBi0d,EAAUhF,gBAAgBjvd,cACxB,UAAlBA,EACAk5O,EAAal8Q,KAAKwuf,OAAO4tB,WAAWpmgB,MAAQhV,EAAQgV,MAE7B,WAAlBgtB,IACLk5O,GAAcl8Q,KAAKwuf,OAAO4tB,WAAWpmgB,MAAQhV,EAAQgV,OAAS,GAElEhV,EAAQg+B,OAAS,IAAI6kM,GAAOq4C,EAAYC,EAAW,EAAGE,GACtDr7Q,EAAQipD,KAAO4od,EACfA,EAAW98f,OAASomQ,EAAYpmQ,EAASsmQ,GAGjDw2P,EAAW98f,OAASomQ,EAAYpmQ,EAASsmQ,EACzCr8Q,KAAKwuf,OAAOmxB,WAAW3/gB,KAAKwuf,OAAOmsB,iBAAiB3tgB,EAAI6lgB,EAAW98f,SAMvEgqa,EAAO3kb,UAAUiihB,gBAAkB,SAAUpmB,GACpCj3f,KAAKu6gB,eACD98gB,EAAkBw5f,EAAUhF,mBACzBx0f,EAAkBw5f,EAAUhF,gBAAgB+F,cAC5Cv6f,EAAkBuC,KAAKwuf,OAAOoxB,YAAY3oB,EAAUhF,gBAAgB+F,WAAWqC,UACnFpD,EAAUhF,gBAAgB+F,WAAWkD,iBAAmB,GACrDjE,EAAUhF,gBAAgB+F,WAAWkD,gBAAkB,GAC1Dl7f,KAAK6/gB,oBAAoB5oB,GACzBj3f,KAAK8/gB,WAAW7oB,EAAWj3f,KAAKwuf,SAE3ByI,EAAUhF,gBAAgB+F,aAA+D,IAAjDf,EAAUhF,gBAAgB+F,WAAWqC,QAClFr6f,KAAK6/gB,oBAAoB5oB,KAQrCl3E,EAAO3kb,UAAU0khB,WAAa,SAAU7oB,EAAWzI,GAC/C,IAAIxlZ,EAAOwlZ,EAAOoxB,YAAY3oB,EAAUhF,gBAAgB+F,WAAWqC,QACnE7L,EAAO+uB,mBAAmBze,GAAcO,oBAAoBpI,EAAUhF,gBAAgBrjP,kBACtF,IAAImxQ,EAAmB//gB,KAAK06f,aAAa1xZ,EAAMiuZ,EAAUhF,gBAAgB+F,WAAWkD,iBAIhF2X,EAAa5b,EAAUI,aAAa,GACpC55f,EAAkBo1gB,KAClBA,EAAa,IAAIxL,GAAWpQ,GAC5BA,EAAUI,aAAa7yf,KAAKqugB,IAEhC,IAAI7xgB,EAAU,IAAImogB,GAAmB4W,GAAkB,GACvD/+gB,EAAQipD,KAAO4od,EAC2B,WAAtCkN,EAAiBjH,iBACjB93gB,EAAQguB,KAAO+wf,EAAiBvG,aAGhCx4gB,EAAQguB,KAAOhvB,KAAKgghB,cAAc/oB,EAAUhF,gBAAgB+F,YAEhExJ,EAAO0uB,WAAW+C,eAAej/gB,EAASi2f,GAC1C,IAAImnB,EAQJ,GAPIp+gB,KAAKwuf,kBAAkBC,IACpBzuf,KAAKwuf,OAAOmsB,iBAAiB5kgB,OAAS/U,EAAQ+U,QAAU/V,KAAKwuf,OAAOmsB,iBAAiB3tgB,IAAMhN,KAAKwuf,OAAO4tB,WAAWpvgB,IACrHoxgB,GAAiB,GAErB5vB,EAAOywB,YAAYzwB,EAAOmsB,iBAAiB5tgB,EAAI/L,EAAQgV,OAEvD68f,EAAWz4f,SAASuO,OAAO,EAAG,EAAG3nB,GACQ,SAArC++gB,EAAiBxG,gBAA4B,CAE7C,GADAv4gB,EAAU,IAAImogB,GAAmB4W,GAAkB,GACV,QAArCA,EAAiBxG,gBAA2B,CAC5Cv4gB,EAAQguB,KAAO,KACf,IAAIld,EAAQ+ggB,EAAWz4f,SAAS7b,QAAQyC,GACxCA,EAAQgV,MAAQhW,KAAKm+gB,YAAYlnB,EAAWzI,EAAQ18e,EAAO+ggB,OAAY33gB,QAGvE8F,EAAQguB,KAAO,IACfw/d,EAAO0uB,WAAW+C,eAAej/gB,EAASi2f,GAE9CzI,EAAOywB,YAAYzwB,EAAOmsB,iBAAiB5tgB,EAAI/L,EAAQgV,OAEvD68f,EAAWz4f,SAASuO,OAAO,EAAG,EAAG3nB,GACjCA,EAAQipD,KAAO4od,EAEnB,GAAIuL,EAGA,OAFAp+gB,KAAKo+gB,eAAep+gB,KAAKwuf,OAAQqkB,QACjC7ygB,KAAKs+gB,eAAet9gB,GAGiB,SAArC++gB,EAAiBxG,iBACjB/qB,EAAO+uB,kBAAkBze,GAAcO,oBAAoBpI,EAAUhF,gBAAgBrjP,mBAS7FmxK,EAAO3kb,UAAUs/gB,cAAgB,SAAUxga,EAAM2rZ,GAC7C,IAAI/I,EAWJ,OATIA,EADA+I,GAIa,IAAI/O,GAErBgG,EAAW9mf,MAAQkkG,EAAKlkG,MACxB8mf,EAAW/vf,EAAImtG,EAAKntG,EACpB+vf,EAAW9vf,EAAIktG,EAAKltG,EAEb8vf,GAMX/8E,EAAO3kb,UAAU8khB,cAAgB,SAAU1lB,GACvC,IAAK,IAAIt+f,EAAIs+f,EAAa70a,OAAOnpF,OAAQN,EAAI,EAAGA,IAAK,CACjD,IAAIuggB,EAAY,IAAI4c,GAAW7e,GAC3Bjye,EAAMrsB,EAAI,EACkC,WAA5Cs+f,EAAa70a,OAAO,GAAGmzb,kBACvBrc,EAAUqc,iBAAmB,SAC7Brc,EAAU+c,aAAuB,IAARjxf,EAAY,IAAmB,IAARA,EAAY,IAAW,IACvEk0e,EAAUpK,gBAAgB7ie,YAAaite,EAAU+c,aAAwC,eAGzF/c,EAAUqc,iBAAmB94gB,KAAKmghB,oBAAoB53f,GACtDk0e,EAAU+c,aAAe,KAAOt9gB,EAAI,GAAGgR,WAAa,IACpDuvf,EAAUtC,QAAU,EACpBsC,EAAUgd,aAAev9gB,GAE7BuggB,EAAUxK,gBAAkB,IAAIkF,QAAiBj8f,GACjDuhgB,EAAUxK,gBAAgBmL,WAAa,IAAMlhgB,EAAI,GACjDuggB,EAAUxK,gBAAgBrjP,iBAAmB,GAC7C4rP,EAAa70a,OAAOnhF,KAAKi4f,KAGjC18E,EAAO3kb,UAAUqjhB,sBAAwB,SAAU5L,EAAY90S,EAAcqiT,GACzE,IAAInpB,EAAY4b,EAAW5b,UACvBopB,KACA52O,EAAYwtN,EAAUI,aAAa94f,QAAQs0gB,GAC1Cp1gB,EAAkB2ihB,IACnBC,EAAgB77gB,KAAK47gB,GAIzB,IAAK,IAFDE,OAAgBplhB,EAEXgB,EAAI6hO,EAAe,EAAG7hO,EAAI22gB,EAAWz4f,SAAS5d,OAAQN,IAC3DmkhB,EAAgB77gB,KAAKqugB,EAAWz4f,SAASle,IAE7C,GAAImkhB,EAAgB7jhB,OAAS,EAAG,CAExB8jhB,EADA72O,IAAcwtN,EAAUI,aAAa76f,OAAS,EAC9B,IAAI6qgB,GAAWpQ,GAGfA,EAAUI,aAAa5tN,EAAY,GAEvD,IAAK,IAAI/lR,EAAI,EAAGA,EAAI28f,EAAgB7jhB,OAAQknB,IACxC28f,EAAgB38f,GAAGumC,KAAOq2d,EAE9BzN,EAAWz4f,SAASuO,OAAOo1M,EAAe,EAAG80S,EAAWz4f,SAAS5d,OAAS,GAC1E8jhB,EAAclmgB,SAAWimgB,EAAgB7lgB,OAAO8lgB,EAAclmgB,WACP,IAAnD68e,EAAUI,aAAa94f,QAAQ+hhB,IAC/BrpB,EAAUI,aAAa1ue,OAAO8gR,EAAY,EAAG,EAAG62O,KAQ5DvgG,EAAO3kb,UAAUmjhB,iBAAmB,SAAUtnB,EAAWj2f,GACrDhB,KAAKwuf,OAAOywB,YAAYj/gB,KAAKwuf,OAAOmsB,iBAAiB5tgB,EAAI/L,EAAQgV,OACjB,YAA5Cihf,EAAUhF,gBAAgBjvd,eAA+BhiC,aAAmB4ngB,IAC5E5ogB,KAAKk/gB,2BAA2Bl+gB,IAOxC++a,EAAO3kb,UAAUwjhB,0BAA4B,SAAU3nB,EAAWj2f,GACnDA,EAAQipD,KACnB,GAAIjpD,EAAQipD,KAAK7vC,SAAS5d,OAAS,EAAG,CAClC,IAAIomP,EAAkB5hP,EAAQ4hP,gBAC1B9wO,EAAQ9Q,EAAQ8kgB,aAGhB9kgB,EAAQipD,KAAK7vC,SAAS5d,OAAS,GAC3BomP,GAAmB5iP,KAAKwuf,OAAOmsB,iBAAiB5tgB,IAAM/M,KAAKwuf,OAAO4tB,WAAWrvgB,IAC7E+E,GAAS,GAGjB9R,KAAKy+gB,sBAAsBz9gB,EAAQipD,KAAMn4C,KAWjDiua,EAAO3kb,UAAUmlhB,YAAc,SAAU1N,EAAY5b,EAAWib,EAAYljf,EAAMhZ,EAAOq8e,GACrF,IAAIvgf,EAAQ9R,KAAKwghB,oBAAoBxghB,KAAKwuf,OAAOmsB,iBAAiB3kgB,MAAOgZ,EAAMhZ,EAAOq8e,GACtF,GAAIvgf,EAAQ,GAAKA,EAAQoggB,EAAW11gB,OAAQ,CACxC,IAAI+B,EAAUs0gB,EAAWz4f,SAAS7b,QAAQ2zgB,GAEtCkO,GADYnpB,EAAUI,aAAa94f,QAAQs0gB,GACtB,IAAIjK,IAG7B,GAFA55e,EAAOA,EAAK3K,UAAUvS,GACtBsugB,EAAmBpxf,KAAOA,EACV,MAAZA,EAAK,GAAY,CAGjBld,GAFiBkd,EAAKxyB,QACtBwyB,EAAO8ve,GAAcgB,UAAU9we,IACJxyB,OAE/B4jhB,EAAmB/tB,gBAAgBsH,WAAWuY,EAAW7f,iBACzD+tB,EAAmBpqgB,MAAQhW,KAAKwuf,OAAO0uB,WAAWhqP,SAASktP,EAAmBpxf,KAAMqje,GACpF6f,EAAWljf,KAAOkjf,EAAWljf,KAAK6H,OAAO,EAAG/kB,GAC5CoggB,EAAWl8f,OAASoqgB,EAAmBpqgB,MACvCoqgB,EAAmBrqgB,OAASm8f,EAAWn8f,OACvCqqgB,EAAmBjN,eAAiBjB,EAAWiB,eAC/CnzgB,KAAKy+gB,sBAAsB5L,EAAYt0gB,EAAS6hhB,GAChDpghB,KAAKu+gB,iBAAiBtnB,EAAWib,GACR,IAArBA,EAAWl8f,OACX68f,EAAWz4f,SAASuO,OAAOpqB,EAAS,KAYhDwhb,EAAO3kb,UAAUqlhB,iBAAmB,SAAU5N,EAAY18e,EAAanH,EAAMhZ,EAAOq8e,GAChF,IAAI4E,EAAY4b,EAAW5b,UAEvBnlf,EAAQ9R,KAAK0ghB,6BAA6B1ghB,KAAKwuf,OAAO4tB,WAAWpmgB,MAAOhW,KAAKwuf,OAAOmsB,iBAAiB3kgB,MAAOgZ,EAAMhZ,EAAOq8e,GACzHsuB,EAAa,EAKjB,GAJI7ugB,EAAQqkB,EAAY35B,SACpBmkhB,EAAa3ghB,KAAKwuf,OAAO0uB,WAAW0D,+BAA+B5xf,EAAK3K,UAAU,EAAGvS,GAAQugf,GAC7Frje,EAAOA,EAAK3K,UAAUvS,IAEtB6ugB,EAAa3ghB,KAAKwuf,OAAOmsB,iBAAiB3kgB,OAASmgB,EAAY2ve,aAAe,EAC9E9lgB,KAAKy+gB,sBAAsB5L,EAAY18e,EAAY2ve,aAAe,OADtE,CAIA,IAAIvngB,EAAUs0gB,EAAWz4f,SAAS7b,QAAQ43B,GAC1C,GAAIrkB,EAAQqkB,EAAY35B,OAAQ,CACZy6f,EAAUI,aAAa94f,QAAQs0gB,GAA/C,IACIgO,EAAkB,IAAIjY,GAC1BiY,EAAgB7xf,KAAOA,EACvBmH,EAAYnH,KAAOmH,EAAYnH,KAAK6H,OAAO,EAAG/kB,GAC9C+ugB,EAAgBxuB,gBAAgBsH,WAAWxje,EAAYk8d,iBACvDwuB,EAAgB7qgB,MAAQhW,KAAKwuf,OAAO0uB,WAAWhqP,SAAS2tP,EAAgB7xf,KAAMqje,GAC9El8d,EAAYngB,OAAS6qgB,EAAgB7qgB,MACrC6qgB,EAAgB9qgB,OAASogB,EAAYpgB,OACrC8qgB,EAAgB1N,eAAiBh9e,EAAYg9e,eAC7CN,EAAWz4f,SAASuO,OAAOwN,EAAY2ve,aAAe,EAAG,EAAG+a,GAC5D7ghB,KAAKy+gB,sBAAsB5L,EAAYt0gB,GACvCyB,KAAKu+gB,iBAAiBtnB,EAAW9ge,GACP,IAAtBA,EAAYngB,OACZ68f,EAAWz4f,SAASuO,OAAOpqB,EAAS,QAKxCyB,KAAKy+gB,sBAAsB5L,EAAYt0gB,GACvCyB,KAAKu+gB,iBAAiBtnB,EAAW9ge,KAOzC4pZ,EAAO3kb,UAAU8jhB,2BAA6B,SAAU/of,GACpD,IAGIoI,EAHAs0e,EAAa18e,EAAY8zB,KACzB1rD,EAAUs0gB,EAAWz4f,SAAS7b,QAAQ43B,GACtCnH,EAAOmH,EAAYnH,KAGvB,GADsBA,EAAK/e,OAAO1R,QAAQ,MACnB,EAAG,CACtBs0gB,EAAWz4f,SAASuO,OAAOpqB,EAAS,IACpCggC,EAASpI,EAAYk8d,iBACCjje,SAEtB,IAFA,IACItd,EAAQqkB,EAAY35B,OAASsigB,GAAcgB,UAAU9we,GAAMxyB,OACxDsV,EAAQqkB,EAAY35B,QAET,KADdsV,EAAQ9R,KAAK8ghB,uBAAuB9xf,EAAMld,KACvBA,IAAUqkB,EAAY35B,QAGzC,GAAIsV,EAAQqkB,EAAY35B,OAAQ,CAC5B,IAAIqkhB,EAAkB,IAAIjY,GACtBmY,EAAe/xf,EAAK3K,UAAU,EAAGvS,GAER,OAD7Bkd,EAAOA,EAAK3K,UAAUvS,IACbuS,UAAU,EAAG,KAElBvS,GAASkd,EAAKxyB,OAASsigB,GAAcgB,UAAU9we,GAAMxyB,QAEzDqkhB,EAAgB7xf,KAAO+xf,EACvBF,EAAgBxuB,gBAAgBsH,WAAWxje,EAAYk8d,iBACvDwuB,EAAgB52d,KAAO4od,EACvBgO,EAAgB7qgB,MAAQhW,KAAKwuf,OAAO0uB,WAAWhqP,SAAS2tP,EAAgB7xf,KAAMuP,GAC9Esif,EAAgB9qgB,OAASogB,EAAYpgB,OACrC8qgB,EAAgB1N,eAAiBh9e,EAAYg9e,eAC7CN,EAAWz4f,SAASuO,OAAOpqB,EAAS,EAAGsihB,GACvC1qf,EAAYnH,KAAOA,EACnBmH,EAAYngB,OAAS6qgB,EAAgB7qgB,MACX,IAAtBmgB,EAAYngB,OACZ68f,EAAWz4f,SAASuO,OAAOkqf,EAAWz4f,SAAS7b,QAAQ43B,GAAc,GAEzErkB,EAAQ,EACRvT,IAGR43B,EAAYnH,KAAOA,EACnB6jf,EAAWz4f,SAASuO,OAAOpqB,EAAS,EAAG43B,KAW/C4pZ,EAAO3kb,UAAUsjhB,uBAAyB,SAAU7L,EAAY7xgB,EAASguB,EAAMhZ,EAAOq8e,GAClF,IAAI4E,EAAY4b,EAAW5b,UACvB+pB,GAAgB,EAChBlvgB,GAAS,EACb,GAA+B,MAAzBkd,EAAK3K,UAAU,EAAG,GAAa,CACjC,IAAI48f,EAAYjrgB,EACZkrgB,EAAkB,EAOtB,GANAA,EAAkBpiB,GAAciB,QAAQ/we,GAAMzwB,QAAQ,KAAO,GAC7DuT,EAAQovgB,GAEI,IACRD,EAAYjhhB,KAAKwuf,OAAO0uB,WAAW0D,+BAA+B5xf,EAAK3tB,MAAM,EAAGyQ,GAAQugf,IAExFryf,KAAKwuf,OAAOmsB,iBAAiB3kgB,MAAQirgB,IAErCD,EAAgBhhhB,KAAKmhhB,qBAAqBtO,EAAYA,EAAWz4f,SAAS7b,QAAQyC,GAAUqxf,IAIxF,YAKRvgf,EAAQ,EAERkE,GAAShW,KAAKwuf,OAAOmsB,iBAAiB3kgB,MAEtChW,KAAKu+gB,iBAAiBtnB,EAAWj2f,GAE5BgghB,IAAkBlvgB,EAAQ,IAA4B,IAAvBkd,EAAKzwB,QAAQ,MACjDyB,KAAKughB,YAAY1N,EAAY5b,EAAWj2f,EAASguB,EAAMhZ,EAAOq8e,GAG9Dryf,KAAKyghB,iBAAiB5N,EAAY7xgB,EAASguB,EAAMhZ,EAAOq8e,IAWhEtyE,EAAO3kb,UAAU2jhB,sBAAwB,SAAUvwB,EAAQ/mb,EAAM31D,EAAOsvgB,GAEpE,IAAIC,EAAc55c,EAAKxd,KAAK7vC,SAAS7b,QAAQkpE,GACzC1qE,EAAQ0qE,EAAKz4C,KACbi1R,EAAYlnT,EAAMsnB,UAAUvS,GAC5BwvgB,EAAsB,OAAZF,EAAmB,IAAI9N,GAAkB,IAAI1K,GAI3D,GAHA0Y,EAAQr3d,KAAOwd,EAAKxd,KACpBq3d,EAAQjvB,gBAAgBsH,WAAWlyb,EAAK4qb,iBACxC5qb,EAAKxd,KAAK7vC,SAASuO,OAAO04f,EAAc,EAAG,EAAGC,GAC1CxvgB,EAAQ,GAA0B,IAArBmyS,EAAUznT,OACvB8khB,EAAQtyf,KAAOjyB,EAAMsnB,UAAUvS,GAC/B21D,EAAKz4C,KAAOjyB,EAAMsnB,UAAU,EAAGvS,QAE9B,GAAIA,EAAQ,EAAG,CAChBwvgB,EAAQtyf,KAAOoyf,EACf,IAAIlqd,EAAU,IAAI0xc,GAClB1xc,EAAQjN,KAAOwd,EAAKxd,KACpBiN,EAAQloC,KAAOjyB,EAAMsnB,UAAUvS,EAAQ,GACvColD,EAAQm7b,gBAAgBsH,WAAWlyb,EAAK4qb,iBACxC5qb,EAAKxd,KAAK7vC,SAASuO,OAAO04f,EAAc,EAAG,EAAGnqd,GAC9CuQ,EAAKz4C,KAAOjyB,EAAMsnB,UAAU,EAAGvS,OAEZ,KAAdmyS,IACLq9N,EAAQtyf,KAAOjyB,EAAMsnB,UAAUvS,EAAQ,GACvC21D,EAAKz4C,KAAOoyf,IAMpBrhG,EAAO3kb,UAAUyihB,eAAiB,SAAU5zd,GACxC,IAAIgtc,EAAYhtc,EAAKgtc,UACjBsqB,EAAatqB,EAAUhF,gBACvBuvB,EAAmBv3d,EAAK4nd,cACxB4P,EAAiBx3d,EAAK6nd,aACtB/7f,EAAS,EACT2rgB,EAAa,EACbnkB,EAAe,EACfD,EAAgB,EAChB9rP,EAAc,EACd5C,EAAkB,EAatB,GAZA5uQ,KAAK2hhB,iBAAiB13d,GACtBl0C,EAAS/V,KAAKo6gB,cACdsH,EAAa3rgB,EAAS/V,KAAKs6gB,gBAEvBkH,IACAlkB,EAAgBt9f,KAAKw/gB,iBAAiBvoB,GACtCroP,EAAkBkwP,GAAcO,oBAAoBkiB,EAAW3yQ,kBAG/D6yQ,IACAlkB,EAAeuB,GAAcO,oBAAoBkiB,EAAWhkB,eAE5Dpgd,MAAMn9C,KAAKo6gB,eAAgB,CAE3B,IAAIwH,EAAc5hhB,KAAKwuf,OAAO0uB,WAAWnuf,YAAY,IAAKkoe,EAAU5E,iBAEpEqvB,GADA3rgB,EAAS6rgB,EAAYx8B,QACCw8B,EAAYlC,oBAIlCgC,GADA3rgB,EAAS/V,KAAKo6gB,eACQp6gB,KAAKs6gB,gBAG/B9oQ,EAAcxxQ,KAAKy/gB,eAAexoB,EAAWlhf,GACV,YAA/BwrgB,EAAW/jB,iBACRhsP,EAAckwQ,EAAa1hhB,KAAKq6gB,cACnC7oQ,EAAckwQ,EAAa1hhB,KAAKq6gB,aAEpC,IAAIptL,EAAW,EACX40L,EAAkB,EAClB7+e,EAAgBu+e,EAAWv+e,cAE/B,GAAsB,SAAlBA,GAA4BhjC,KAAKwuf,OAAO3rd,WAAgC,YAAlBG,IAA+By+e,GAAiB,CAEtG,IAAIK,EAAmB9hhB,KAAK+hhB,YAAY93d,EAAwB,YAAlBjnB,EAA6B6+e,EAAiBjzQ,GAC5Fq+E,EAAW60L,EAAiB70L,SAC5B40L,EAAkBC,EAAiBE,WAIvC,IAAK,IAFDC,GAAc,EACdzkB,EAAkB+jB,EAAW/jB,gBACxBthgB,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAAK,CAC3C,IAAIigR,EAAY,EACZE,EAAe,EACfH,EAAa,EACbg2P,EAAajod,EAAK7vC,SAASle,GAE3BgmhB,EAAgBlihB,KAAKmihB,kBAAkBjQ,EAAY/1P,EAAWE,EAAcqlQ,EAAYO,EAAah1L,EAAUjqT,EAAe6+e,EAAiB3lhB,IAAM+tD,EAAK7vC,SAAS5d,OAAS,GAChL2/Q,EAAY+lQ,EAAc/lQ,UAC1BE,EAAe6lQ,EAAc7lQ,aAC7B4lQ,EAAcC,EAAcD,YAC5BJ,EAAkBK,EAAcL,gBAER,aAApBrkB,EACIhsP,EAAcz7P,EACdsmQ,GAAgB7K,EAAcz7P,EAG9BomQ,GAAa3K,EAAcz7P,EAGN,YAApBynf,EACLrhP,GAAa3K,GAAe2K,EAAY+1P,EAAWn8f,OAASsmQ,GAEvD7K,EAAc2K,EAAY+1P,EAAWn8f,OAASsmQ,IACnDF,GAAa3K,GAAe2K,EAAY+1P,EAAWn8f,OAASsmQ,IAEhEF,GAAamhP,EACbjhP,GAAgBkhP,EACN,IAANrhgB,IACA+tD,EAAKl0C,OAASomQ,EAAY+1P,EAAWn8f,OAASsmQ,EACxB,UAAlBr5O,EAEAk5O,EAAa+wE,EAEU,WAAlBjqT,IAELk5O,EAAa+wE,EAAW,IAGhCilL,EAAWlze,OAAS,IAAI6kM,GAAOq4C,EAAYC,EAAW,EAAGE,GACzD61P,EAAWjod,KAAOA,EAEtBjqD,KAAKwuf,OAAOmxB,WAAW3/gB,KAAKwuf,OAAOmsB,iBAAiB3tgB,EAAIi9C,EAAKl0C,SAEjEgqa,EAAO3kb,UAAUumhB,iBAAmB,SAAU13d,GAC1C,IAAK,IAAI/tD,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAAK,CAC3C,IAAI8E,EAAUipD,EAAK7vC,SAASle,GACxB8E,aAAmB4ngB,IAAkB5ngB,aAAmBmogB,IACpDnpgB,KAAKo6gB,cAAgBp5gB,EAAQ+U,SAC7B/V,KAAKo6gB,cAAgBp5gB,EAAQ+U,OAC7B/V,KAAKs6gB,gBAAkBt5gB,EAAQmygB,gBAE/BnzgB,KAAKq6gB,YAAcr6gB,KAAKs6gB,kBACxBt6gB,KAAKq6gB,YAAcr6gB,KAAKs6gB,kBAGvBt6gB,KAAKq6gB,YAAcr5gB,EAAQ+U,SAChC/V,KAAKq6gB,YAAcr5gB,EAAQ+U,UAOvCgqa,EAAO3kb,UAAUgjhB,eAAiB,SAAU5vB,EAAQvkc,EAAMk+c,GACtD,IAAIuJ,EAAkBznd,EAAKgtc,UACvBnlf,EAAQ,EACPrU,EAAkBwsD,MACnBn4C,EAAQ4/f,EAAgBra,aAAa94f,QAAQ0rD,IACjC,GAAKk+c,KACbuJ,EAAgB37f,OAASy4e,EAAOmsB,iBAAiB3tgB,EAAI0kgB,EAAgB1kgB,GAG7E,IAAIo1gB,EAAWpihB,KAAKqihB,qBAAqB3Q,GAGzC,GAFA1xgB,KAAKwuf,OAAO8zB,iBAAiBF,EAASrrB,cAAeqrB,EAAS70W,MAC9DvtK,KAAKwuf,OAAO2sB,yBAAyBzJ,GAAiB,GAClD5/f,EAAQ,EAAG,CACX,GAAIm4C,EAAK6nd,cAAgB3J,EACrB,OAEJ,IAAIoa,OAAgB,EAEhBA,EADAH,EAASplgB,sBAAsBk6e,IAAmBkrB,EAASplgB,WAAWo2B,OAAOs+d,GAC7D0Q,EAASplgB,WAGT,IAAIk6e,IAExBqrB,EAAgBvihB,KAAKi9gB,mBAAmBj9gB,KAAKwuf,OAAOmsB,iBAAkB4H,IACxDzwgB,MAAQ4/f,EAAgB5/f,MAEtC,IAAK,IADD0wgB,EAAc,EACTtmhB,EAAI4V,EAAO5V,EAAIw1gB,EAAgBra,aAAa76f,OAAQN,IAAK,CAC9D,IAAI22gB,EAAanB,EAAgBra,aAAan7f,GAC9C22gB,EAAW5b,UAAYsrB,EACvBA,EAAclrB,aAAa1ue,OAAO65f,EAAa,EAAG3P,GAClDA,EAAW5b,UAAYsrB,EACvBC,IAEJD,EAActwB,gBAAkByf,EAAgBzf,gBAChDswB,EAAclwB,gBAAkBqf,EAAgBrf,gBAChDqf,EAAgBra,aAAa1ue,OAAO7W,GACpC4/f,EAAkB6Q,OAEZpa,GACNuJ,EAAgBpa,gBAAgBhyf,YAAYosgB,EAAgB5L,cAE3DqC,KACuD,IAApDia,EAAS/qB,aAAa94f,QAAQmzgB,IAC9B0Q,EAAS/qB,aAAa1ue,OAAO,EAAG,EAAG+of,GAEvCA,EAAgBpa,gBAAkB8qB,EAClCpihB,KAAKwuf,OAAOytB,yBAAyBvK,EAAiB1xgB,KAAKwuf,OAAOmsB,oBAgB1E56F,EAAO3kb,UAAU+mhB,kBAAoB,SAAUnhhB,EAASm7Q,EAAWE,EAAcqlQ,EAAYO,EAAah1L,EAAUjqT,EAAe6+e,EAAiBY,GAChJ,GAAIzhhB,aAAmB4ngB,IAAkB5ngB,aAAmBmogB,GAAoB,CAC5E,IAAIhze,EAAcn1B,aAAmB4ngB,GAAiB5ngB,OAAU9F,EAG5Di4gB,EAAiBnygB,aAAmB4ngB,GAAiBzye,EAAYg9e,eAAiBnygB,EAAQmygB,eAI9F,GAHAh3P,GAAan8Q,KAAKq6gB,YAAclH,EAChC92P,GAAgBqlQ,GAAc1ghB,EAAQ+U,OAASo9f,IAE1C11gB,EAAkB04B,IAAkC,YAAlB6M,GAA+B6+e,EAAkB,EAAG,CAEvF,IAAI7rgB,EAAQmgB,EAAYngB,MACpBgZ,EAAOmH,EAAYnH,KAKvB,GAJKizf,IAEDA,GADAjzf,EAAO8ve,GAAcgB,UAAU9we,IACXxyB,OAAS,GAE7BylhB,EAAa,CACb,IAAID,EAAahzf,EAAKxyB,OAASsigB,GAAce,YAAY7we,GAAMxyB,OAC3DimhB,IACAT,GAAchzf,EAAKxyB,OAASsigB,GAAciB,QAAQ/we,GAAMxyB,QAExDqlhB,EAAkBG,IAClBhsgB,EAAQhW,KAAKwuf,OAAO0uB,WAAW0D,+BAA+B5xf,EAAMmH,EAAYk8d,iBAChF2vB,EAAaH,GAEbG,EAAa,IACb7rf,EAAYngB,MAAQA,EAAQi3U,EAAW+0L,EACvCH,GAAmBG,UAM/BC,GAAc,EAEd9lQ,GAAan8Q,KAAKq6gB,YAAcr5gB,EAAQ+U,OACxCsmQ,GAAgBqlQ,EAEpB,OAASvlQ,UAAaA,EAAWE,aAAgBA,EAAc4lQ,YAAeA,EAAaJ,gBAAmBA,IAQlH9hG,EAAO3kb,UAAUoihB,mBAAqB,SAAUhvB,EAAQkjB,GACpD,GAAIA,EAAgBnJ,cAAe,CAC/B,IAAIuF,EAAa4D,EAAgBlJ,eAGjC,GAFAkJ,EAAgB37f,OAASy4e,EAAOmsB,iBAAiB3tgB,EAAI0kgB,EAAgB1kgB,EAEjEvP,EAAkBi0gB,EAAgBlJ,iBAAmB/qgB,EAAkBi0gB,EAAgBlJ,eAAeH,WACnG5qgB,EAAkBi0gB,EAAgBlJ,eAAeH,SAASiC,WAC7D,OAEiE,YAAjEoH,EAAgBlJ,eAAeH,SAASiC,UAAU9F,WAClDsJ,EAAW/3f,OAAS+of,GAAcO,oBAAoBqS,EAAgBlJ,eAAeH,SAASiC,UAAUv0f,SAInG+3f,GAAYtxgB,QAAU,GAAsE,YAAjEk1gB,EAAgBlJ,eAAeH,SAASiC,UAAU9F,WAC9EsJ,EAAW/3f,OAAS1J,KAAKC,IAAIwyf,GAAcO,oBAAoBqS,EAAgBlJ,eAAeH,SAASiC,UAAUv0f,QAAS/V,KAAK0ihB,qBAAqB5U,IAGpJA,EAAW/3f,OAAS+3f,EAAW/3f,OAAS27f,EAAgB37f,OAOhE27f,EAAgBpa,gBAAkBwW,OAG7B4D,EAAgBhJ,sBACjBgJ,EAAgB37f,OAASy4e,EAAOmsB,iBAAiB3tgB,EAAI0kgB,EAAgB1kgB,GAQzE0kgB,EAAgB5U,sBAAsBsJ,KACjCsL,EAAgBnJ,gBACjBmJ,EAAgBpa,gBAAgBvhf,QAAU27f,EAAgB37f,QAE1D/V,KAAKwuf,OAAOgV,MAAMmf,wBAA4F,IAAnEjR,EAAgB5U,WAAW4K,iBAAiBnpgB,QAAQ,WAC/FyB,KAAK4ihB,yBAAyBlR,EAAgB5U,WAAY98f,KAAKwuf,UAO3EzuE,EAAO3kb,UAAUwnhB,yBAA2B,SAAU/c,EAAQrX,GAC1D,IAAIh+O,EAAaq1P,EAAOt4V,KAAKq4V,YAAY,GAAG7O,cAAcvmP,WAC1D,IAAmD,IAA/Cq1P,EAAO6B,iBAAiBnpgB,QAAQ,UAAkB,CAClD,IAEIkic,EAFAoiF,EAAiBhd,EAAOt4V,KAAKq4V,YAAY,GAAG7O,cAAc8rB,eAC1D9sgB,EAAS+of,GAAcO,oBAAoB7uP,EAAaqyQ,GAExDhd,EAAO74f,EAAI64f,EAAO9vf,OAASA,EAC3B0qb,EAAQ1qb,GAAU8vf,EAAO74f,EAAI64f,EAAO9vf,QAE/B8vf,EAAO74f,EAAI64f,EAAO9vf,OAASA,IAChC0qb,EAASolE,EAAO74f,EAAI64f,EAAO9vf,OAAUA,GAEpCtY,EAAkBgjc,KACnBA,EAAQ1qb,GAAU8vf,EAAO74f,EAAI64f,EAAO9vf,QACpC/V,KAAKm8gB,mBAAmB17E,EAAOolE,GAC/BrX,EAAOmsB,iBAAiB3tgB,GAAKyzb,KAQzC1gB,EAAO3kb,UAAU+lhB,qBAAuB,SAAUl3d,EAAMn4C,EAAOugf,GAC3Cpoc,EAAKgtc,UAGrB,IAAK,IAFD+pB,GAAgB,EAChB8B,EAAkB,EACb5mhB,EAAI4V,EAAQ,EAAG5V,GAAK,EAAGA,IAAK,CACjC,IAAIi6B,EAAc8zB,EAAK7vC,SAASle,GAChC,GAAIi6B,aAAuByye,GAAgB,CACvC,IAAI55e,EAAOmH,EAAYnH,KAEvB,GADA8zf,EAAkB5mhB,EACd8yB,EAAKxyB,OAAS,GAA+B,MAA1BwyB,EAAKA,EAAKxyB,OAAS,GAAY,CAClD,GAAIN,IAAM4V,EAAQ,EAEd,OADA9R,KAAKy+gB,sBAAsBx0d,EAAMn4C,EAAQ,IAClC,EAEXkvgB,GAAgB,EAChB,MAEC,GAAa,OAAThyf,EACL,OAAO,EAEN,GAAIA,EAAKzwB,QAAQ,MAAQ,EAAG,CAC7ByihB,GAAgB,EAChB,IAAI3oH,EAAUrpY,EAAK+vE,YAAY,KAAO,EAElC8hb,EAAkB,IAAIjY,GAC1BiY,EAAgB7xf,KAAOA,EAAK6H,OAAOwhY,GACnCwoH,EAAgBxuB,gBAAgBsH,WAAWxje,EAAYk8d,iBACvDl8d,EAAYnH,KAAOA,EAAK6H,OAAO,EAAGwhY,GAClCr4Z,KAAKwuf,OAAO0uB,WAAWgB,YAAY2C,EAAiBxuB,GACpDl8d,EAAYngB,OAAS6qgB,EAAgB7qgB,MACrCmgB,EAAYpgB,OAAS8qgB,EAAgB9qgB,OACX,IAAtBogB,EAAYngB,OACZi0C,EAAK7vC,SAASuO,OAAOzsB,EAAG,GAG5B+tD,EAAK7vC,SAASuO,OAAOzsB,EAAI,EAAG,EAAG2khB,GAC/B,YAGH,KAAM1qf,aAAuBgze,IAAqB,CAEnD2Z,EAAkB5mhB,EAClB8khB,GAAgB,EAChB,OAGR,GAAIA,KACA8B,EACsB74d,EAAK7vC,SAAS5d,OAAQ,CAEnC,IADDmkhB,EAAa,EACjB,IAASzkhB,EAAI4mhB,EAAiB5mhB,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IACpDykhB,GAAc12d,EAAK7vC,SAASle,GAAG8Z,MAC/BhW,KAAKy+gB,sBAAsBx0d,EAAM/tD,EAAI,GACrCA,IAEJ8D,KAAKwuf,OAAO+uB,kBAAkBoD,GAGtC,OAAOK,GAKXjhG,EAAO3kb,UAAUykhB,oBAAsB,SAAU5oB,GAC7C,GAAsC,IAAlCA,EAAUI,aAAa76f,OAA3B,CAGA,IAAIytD,EAAOgtc,EAAUI,aAAa,GAClC,IAAI55f,EAAkBwsD,EAAK7vC,UAG3B,IAAK,IAAIle,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,QAC1BytD,EAAK7vC,SAASle,aAAcitgB,GADMjtgB,IAElC+tD,EAAK7vC,SAASuO,OAAOzsB,EAAG,GACxBA,MAaZ6jb,EAAO3kb,UAAU4khB,cAAgB,SAAUhoB,GACvC,IAAIhvZ,EAAOhpG,KAAKwuf,OAAOoxB,YAAY5nB,EAAWqC,QAC1CH,EAAclC,EAAWkD,gBACzBuB,EAAYz8f,KAAK06f,aAAa1xZ,EAAMgvZ,EAAWkD,iBAE9Bz9f,EAAkBurG,EAAKyxZ,iBAAkBzxZ,EAAKyxZ,eAAeP,GAelF,OADAl6f,KAAK+ihB,iBAAiB/5a,EAAMkxZ,GACrBl6f,KAAKgjhB,YAAYh6a,EAAMkxZ,EAAauC,IAQ/C18E,EAAO3kb,UAAU6nhB,kBAAoB,SAAU/nB,EAAiBlyZ,GAE5D,IAAI2xZ,EAAiBl9f,EAAkBurG,EAAKyxZ,qBAAyDv/f,EAAvC8tG,EAAKyxZ,eAAeS,GAClF,IAAKz9f,EAAkBk9f,IAAkBl9f,EAAkBk9f,EAAcV,mBACrE,OAAOU,EAAcR,QAEzB,IAAIsC,EAAYz8f,KAAK06f,aAAa1xZ,EAAMkyZ,GACxC,OAAIz9f,EAAkBg/f,GACX,EAGAA,EAAUtC,SASzBp6E,EAAO3kb,UAAU2nhB,iBAAmB,SAAU/5a,EAAMkyZ,GAChD,GAAKl7f,KAAKwuf,OAAO00B,cAAc7/R,YAAYrjP,KAAKwuf,OAAO20B,oBAAoBn6a,EAAKuxZ,iBAQ3E,CAED,IAAI50a,EAAS3lF,KAAKwuf,OAAO00B,cAAcx7gB,IAAI1H,KAAKwuf,OAAO20B,oBAAoBn6a,EAAKuxZ,iBAChF,GAAI50a,EAAO09J,YAAY63Q,GAAkB,CACrC,IAAIf,EAAUx0a,EAAOj+E,IAAIwzf,GACzBv1a,EAAOt+E,IAAI6zf,EAAiBf,EAAU,GAEtC,IADA,IAAID,EAAcgB,EAAkB,EAC7BhB,EAAcl6f,KAAKwuf,OAAO20B,oBAAoBn6a,EAAKuxZ,gBAAgB50a,OAAOnpF,QAAQ,CACjFiggB,EAAYz8f,KAAK06f,aAAa1xZ,EAAMkxZ,GAEpCv0a,EAAO09J,YAAY62Q,IAAgBuC,EAAUgd,aAAeve,GAC5Dv1a,EAAOphF,OAAO21f,GAMlBA,SAGH,CAED,IADIA,EAAcgB,GACVv1a,EAAO09J,YAAY62Q,EAAc,IAAMA,EAAc,GAAG,CACxDuC,EAAYz8f,KAAK06f,aAAa1xZ,EAAMkxZ,EAAc,GAEtDv0a,EAAOvhF,IAAI81f,EAAc,EAAGl6f,KAAKijhB,kBAAkB/oB,EAAc,EAAGlxZ,IAKpEkxZ,IAEAC,EAAUn6f,KAAKijhB,kBAAkB/nB,EAAiBlyZ,GACtDrjB,EAAOvhF,IAAI82f,EAAiBf,QAzC8D,CAC9F,IAAIipB,EAAW,IAAI7gS,GACnBviP,KAAKwuf,OAAO00B,cAAc9+gB,IAAIpE,KAAKwuf,OAAO20B,oBAAoBn6a,EAAKuxZ,gBAAiB6oB,GAEpF,IAAK,IADD3mB,EAAYz8f,KAAK06f,aAAa1xZ,EAAMkyZ,GAC/Bh/f,EAAI,EAAGA,GAAKg/f,EAAiBh/f,IAClCknhB,EAASh/gB,IAAIlI,EAAG8D,KAAKijhB,kBAAkB/mhB,EAAG8sG,MA+CtD+2U,EAAO3kb,UAAU4nhB,YAAc,SAAUK,EAASnoB,EAAiB6kB,GAC/D,IAAIuD,EAAWvD,EAAiBvG,aAEhC,GAAIx5gB,KAAKwuf,OAAO00B,cAAc7/R,YAAYrjP,KAAKwuf,OAAO20B,oBAAoBE,EAAQ9oB,iBAG9E,IAAK,IAFD50a,EAAS3lF,KAAKwuf,OAAO00B,cAAcx7gB,IAAI1H,KAAKwuf,OAAO20B,oBAAoBE,EAAQ9oB,iBAC/Ej9f,EAAOqoF,EAAOroF,KACTpB,EAAI,EAAGA,EAAIoB,EAAKd,OAAQN,IAAK,CAClC,IAAIg+f,EAAc58f,EAAKpB,GACnBqnhB,EAAW,KAAOrpB,EAAc,GAAGhtf,WACnCuvf,EAAYz8f,KAAK06f,aAAa2oB,EAASnpB,GAC3C,GAAIopB,EAAS5zgB,MAAM6zgB,GAAW,CAC1B,GAAIrpB,EAAcgB,EACd,MAAO,GAGPooB,EADK39b,EAAO09J,YAAY62Q,KAAiBz8f,EAAkBg/f,GAChD6mB,EAASrmhB,QAAQsmhB,EAAUvjhB,KAAKwjhB,qBAAqB/mB,EAAW92a,EAAOj+E,IAAIwyf,KAG3EopB,EAASrmhB,QAAQsmhB,EAAU,MAKtD,OAAOD,GAOXvjG,EAAO3kb,UAAUqohB,YAAc,SAAUp2Z,GAIrC,IAAIq2Z,EAAWr2Z,EAAS,GACpB42L,EAAY52L,EAAS,GACP,IAAd42L,IAEAA,EAAY,GACZy/N,KAKJ,IAFA,IAAI1pQ,EAAStwP,OAAOC,aAAa,GAASs6R,GACtC0/N,EAAY,GACTD,GAAY,GACfC,GAAwB3pQ,EAAO9sQ,WAC/Bw2gB,IAEJ,OAAOC,GAQX5jG,EAAO3kb,UAAUoohB,qBAAuB,SAAU/mB,EAAWknB,GACzD,OAAQlnB,EAAUqc,kBACd,IAAK,UACD,OAAO94gB,KAAK4jhB,WAAWD,GAAWz4f,cACtC,IAAK,WACD,OAAOlrB,KAAK4jhB,WAAWD,GAAW/tgB,cACtC,IAAK,WACD,OAAO5V,KAAKyjhB,YAAYE,GAAWz4f,cACvC,IAAK,YACD,OAAOlrB,KAAKyjhB,YAAYE,GAAW/tgB,cACvC,IAAK,SACD,OAAO,EAAY1I,WACvB,IAAK,cACD,OAAOlN,KAAK6jhB,iBAAiBF,GACjC,IAAK,SAEL,IAAK,cAEL,IAAK,UAEL,IAAK,UAEL,IAAK,UACD,OAAO,EAAYz2gB,WACvB,QACI,MAAO,KASnB6ya,EAAO3kb,UAAUyrT,eAAiB,SAAUx5L,EAAQ45L,EAAWjtC,GAE3D,IADA,IAAIktC,EAAe,GACZ75L,GAAU45L,GACb55L,GAAU45L,EACVC,GAAgBltC,EAChBh6Q,KAAKjD,MAAQswH,EAEjB,OAAO65L,EAAah6S,YAMxB6ya,EAAO3kb,UAAUyohB,iBAAmB,SAAUF,GAC1C,OAAIA,EAAY,GACL,IAAMA,EAAUz2gB,WAGhBy2gB,EAAUz2gB,YAQzB6ya,EAAO3kb,UAAUwohB,WAAa,SAAUv2Z,GACpC,IAAIu5L,EAAS,GAeb,OAdA5mT,KAAKjD,MAAQswH,EACbu5L,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,IAAM,KAChD6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,IAAK,MAC/C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,IAAK,KAC/C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,IAAK,MAC/C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,IAAK,KAC/C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,GAAI,MAC9C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,GAAI,KAC9C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,GAAI,MAC9C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,GAAI,KAC9C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,EAAG,MAC7C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,EAAG,KAC7C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,EAAG,OAC7C6pT,GAAU5mT,KAAK6mT,eAAe7mT,KAAKjD,MAAO,EAAG,MAC/BmQ,YAQlB6ya,EAAO3kb,UAAUs/f,aAAe,SAAU1xZ,EAAMkyZ,GAC5C,IAAKz9f,EAAkBurG,GAAO,CAC1B,IAAIwxZ,EAAex6f,KAAKwuf,OAAO20B,oBAAoBn6a,EAAKuxZ,iBACnD98f,EAAkBurG,IAASwxZ,EAAa70a,OAAOnpF,QAAU0+f,GACvDA,GAAmB,GAAKA,EAAkB,GAC7Cl7f,KAAKkghB,cAAc1lB,GAEvB,IAAIspB,OAAmB5ohB,EAKvB,IAHUuC,EAAkBurG,EAAKyxZ,kBACzBh9f,EAAoBqmhB,EAAmB96a,EAAKyxZ,eAAeS,MAC1Dz9f,EAAkBqmhB,EAAiB7pB,mBAExC,OAAO6pB,EAAiB7pB,kBAEvB,IAAKx8f,EAAkB+8f,IAAiBU,GAAmB,GAAKA,EAAkBV,EAAa70a,OAAOnpF,OACvG,OAAOg+f,EAAa70a,OAAOu1a,KAWvCn7E,EAAO3kb,UAAU+ihB,YAAc,SAAUlnB,EAAWzI,EAAQ18e,EAAO+ggB,EAAY7xgB,GAC3E,IAAI+ihB,EAAY,EACZC,GAAc,EACd7nB,EAAOlF,EAAUhF,gBAAgBmK,iBAErC,GAAI5N,EAAOmsB,iBAAiB5tgB,EAAIyhf,EAAO4tB,WAAWrvgB,EAC9C,OAAOyhf,EAAO4tB,WAAWrvgB,EAAIyhf,EAAOmsB,iBAAiB5tgB,EAGzD,IAAImH,EAAWs6e,EAAOmsB,iBAAiB5tgB,GAClCyhf,EAAO4tB,WAAWrvgB,EAAI+xf,GAAcO,oBAAoBpI,EAAUhF,gBAAgBmL,aACnF6mB,EAAkBnlB,GAAcO,oBAAoB7Q,EAAOy1B,iBAC/D,GAAoB,IAAhB9nB,EAAK3/f,QAA8B,IAAb0X,GAAsC,IAApB+vgB,EAGvC,CACD,GAAI9nB,EAAK3/f,OAAS,EACd,IAAK,IAAIN,EAAI,EAAGA,EAAIiggB,EAAK3/f,OAAQN,IAAK,CAClC,IAAIgohB,EAAcplB,GAAcO,oBAAoBlD,EAAKjggB,GAAGgY,UAC5D,GAAiC,SAA7Biof,EAAKjggB,GAAG+/f,kBAA+B/nf,EAAWgwgB,EAAa,CAC/DH,EAAYG,EACZF,GAAc,EACTvmhB,EAAkBuD,KACnBA,EAAQwygB,UAAYrX,EAAKjggB,GAAGs3gB,UAC5BxygB,EAAQuygB,QAAU,IAEtB,MAEC,GAAiC,UAA7BpX,EAAKjggB,GAAG+/f,kBAAgC/nf,EAAWgwgB,EAAa,CACrE,IAAIC,EAAWD,EAAchwgB,EACzB8B,EAAQhW,KAAKokhB,iBAAiBtygB,EAAQ,EAAG+ggB,EAAY5b,GAErDgtB,EADAjugB,EAAQmugB,EACUA,EAAWnugB,EAGX,EAEtB+tgB,EAAY7vgB,EACZ8vgB,GAAc,EACTvmhB,EAAkBuD,KACnBA,EAAQwygB,UAAYrX,EAAKjggB,GAAGs3gB,UAC5BxygB,EAAQuygB,QAAU,IAEtB,OAIZ,IAAKyQ,EAAa,CACd,IAAIhgc,EAAgC,IAAvB33E,KAAK0zB,MAAM7rB,IAAkD,IAA9B7H,KAAK0zB,MAAMkkf,IAA2B,IAElFF,IADW13gB,KAAK0zB,MAAM7rB,GAAY8vE,GAAQ33E,KAAK0zB,MAAMkkf,GAClC,GAAKA,EAE5B,OAAQF,EAAY7vgB,EAAY,EAAI6vgB,EAAY7vgB,EAAW+vgB,EAvC3D,OAAOA,GAgDflkG,EAAO3kb,UAAUgphB,iBAAmB,SAAUtygB,EAAO+ggB,EAAY5b,GAG7D,IAFA,IAAIjhf,EAAQ,EACRukgB,GAAc,EACXzogB,EAAQ+ggB,EAAWz4f,SAAS5d,QAAQ,CACvC,IAAI01gB,EAAaW,EAAWz4f,SAAStI,GAerC,GAdKoggB,aAAsBzS,IAAqByS,aAAsBpJ,IAAuByR,GACrFrI,aAAsBzS,KACO,IAAzByS,EAAWxS,UACX6a,GAAc,EAEgB,IAAzBrI,EAAWxS,YAChB6a,GAAc,IAGtBrI,EAAWl8f,MAAQ,GAGnBhW,KAAKwuf,OAAO0uB,WAAWgB,YAAYhM,EAAYA,EAAW7f,iBAE1D6f,aAAsBtJ,IAAsC,OAApBsJ,EAAWljf,KACnD,OAAOhZ,EAGPA,GAAgBk8f,EAAWl8f,MAE/BlE,IAEJ,OAAOkE,GASX+pa,EAAO3kb,UAAUolhB,oBAAsB,SAAU6D,EAAmBr1f,EAAMhZ,EAAOq8e,GAG7E,IAFA,IAAIvgf,EAAQ,EACRtV,EAASwyB,EAAKxyB,OACXsV,EAAQtV,GAAQ,CACnB,IAAIomQ,EAAY5iQ,KAAK8ghB,uBAAuB9xf,EAAMld,GAChC,IAAd8wP,GAAmBA,IAAcpmQ,IACjComQ,EAAYpmQ,EAAS,GAEzB,IAAImkhB,EAAa3qgB,EAIjB,IAHK4sP,EAAYpmQ,EAAS,GAAMomQ,IAAcpmQ,EAAS,GAA6B,MAAxBwyB,EAAK4zO,EAAY,KAAgB9wP,IAAU8wP,IACnG+9Q,EAAa3ghB,KAAKwuf,OAAO0uB,WAAW0D,+BAA+B5xf,EAAK3tB,MAAM,EAAGuhQ,GAAYyvP,MAE7FsuB,GAAc0D,GAGb,CACa,IAAVvygB,GAA2B,MAAZkd,EAAK,KACpBld,EAAQ9R,KAAK8ghB,uBAAuB9xf,EAAM,IAE9C,MANAld,EAAQ8wP,EAShB,OAAO9wP,GAWXiua,EAAO3kb,UAAUslhB,6BAA+B,SAAU4D,EAAkBC,EAAuBv1f,EAAMhZ,EAAOq8e,GAE5G,IAAK,IADD71f,EAASwyB,EAAKxyB,OACTN,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAIykhB,EAAa3qgB,EAIjB,GAHI9Z,EAAI,EAAIM,IACRmkhB,EAAa3ghB,KAAKwuf,OAAO0uB,WAAW0D,+BAA+B5xf,EAAK3K,UAAU,EAAGnoB,EAAI,GAAIm2f,IAE7FsuB,EAAa4D,EACb,OAAU,IAANrohB,GAAWykhB,EAAa2D,EAEhB9nhB,EAAS,GAAiB,MAAZwyB,EAAK,GAAchvB,KAAK8ghB,uBAAuB9xf,EAAM,GAAK,EAE7E9yB,EAGf,OAAO,GAQX6jb,EAAO3kb,UAAU2mhB,YAAc,SAAUlP,EAAY2R,EAASxC,EAAYpzQ,GAItE,IAAK,IAHD54P,EAAQ,EACRyugB,GAAY,EACZC,EAAW,GACNxohB,EAAI22gB,EAAWz4f,SAAS5d,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACtD,IAAI8E,EAAU6xgB,EAAWz4f,SAASle,GAClC,GAAI8E,aAAmB4ngB,GAAgB,CACnC,IAAI+b,EAAc3jhB,EAAQguB,KAC1B01f,EAAWC,EAAcD,GACrBD,GAAqC,KAAvBE,EAAY10gB,QAAiC,OAAhB00gB,EASrCF,IACNzugB,GAAShV,EAAQgV,QATb8of,GAAc3xV,SAASw3W,GACvB3ugB,GAAShW,KAAKwuf,OAAO0uB,WAAW0D,+BAA+B+D,EAAa3jhB,EAAQqxf,iBAGpFr8e,GAAShV,EAAQgV,MAErByugB,GAAY,QAOhBC,EAAW,IAAMA,EACjBD,GAAY,EACZzugB,GAAShV,EAAQgV,MAEhBwugB,IACDxugB,EAAQ3J,KAAK0zB,MAAM/pB,IAI3BgsgB,GADA0C,EAAWA,EAASz0gB,QACEzT,OAASsigB,GAAce,YAAY6kB,GAAUlohB,OACnE,IAAIywV,EAAYjtV,KAAKwuf,OAAO4tB,WAAWpmgB,MAAQ44P,EAAkB54P,EAQjE,OAPIi3U,GAAY,GAAqB,IAAf+0L,GAAoBwC,GACtCxC,EAAa,EACb/0L,EAAW,GAENu3L,IACLv3L,GAAsB+0L,IAEjB/0L,SAAYA,EAAU+0L,WAAcA,IAOjDjiG,EAAO3kb,UAAUokhB,iBAAmB,SAAUvoB,GAC1C,IAAIqG,EAAgB,EAUpB,OATIrG,EAAU4W,0BAA0B3W,GAChCD,EAAU4W,eAAe5b,gBAAgBsL,aAAetG,EAAUhF,gBAAgBqL,gBAElFA,EAAgBrG,EAAUhF,gBAAgBqL,cAAgBrG,EAAU4W,eAAe5b,gBAAgBsL,cAIvGD,EAAgBrG,EAAUhF,gBAAgBqL,cAEvCA,GAQXv9E,EAAO3kb,UAAUqkhB,eAAiB,SAAUxoB,EAAWjnc,GACnD,GAAIvyD,EAAkBw5f,EAAUhF,iBAC5B,OAAO,EAEX,IAAIzgP,EAAc,EAClB,OAAQylP,EAAUhF,gBAAgBuL,iBAC9B,IAAK,UACL,IAAK,UACDhsP,EAAcylP,EAAUhF,gBAAgBzgP,YACxC,MACJ,QACIA,EAAcylP,EAAUhF,gBAAgBzgP,YAAcxhN,EAG9D,OAAOwhN,GAMXuuK,EAAO3kb,UAAUwphB,qBAAuB,SAAU3tB,EAAWhtc,GACzD,IAAI47c,EAAS5O,EACb,SAAIx5f,EAAkBoogB,EAAOxO,eAAuD,IAAtCwO,EAAOxO,aAAa94f,QAAQ0rD,QAGlEA,EAAK7vC,SAAS5d,OAAS,IAAMiB,EAAkBw5f,EAAU4W,iBACtD5W,EAAU4W,0BAA0B3W,KAChCjtc,EAAKgtc,UAAUnlf,QAAUmlf,EAAU4W,eAAe/7f,QAUrEiua,EAAO3kb,UAAUyphB,oBAAsB,SAAU7jhB,GAC7C,IAAIi2f,EAAYj2f,EAAQipD,KAAKgtc,UACzB6tB,EAAiB7tB,EAAUI,aAAaJ,EAAUI,aAAa76f,OAAS,GACxEuohB,EAAaD,EAAe1qgB,SAAS0qgB,EAAe1qgB,SAAS5d,OAAS,GAC1E,OAAIwE,IAAY+jhB,IAEJA,aAAsBtlB,MAAwBslB,aAAsBnc,IAAsC,OAApBmc,EAAW/1f,QASjH+wZ,EAAO3kb,UAAU0lhB,uBAAyB,SAAU9xf,EAAMnJ,GACtD,IAAIrpB,EAASwyB,EAAKxyB,OAGdomQ,EADI5zO,EAAKzwB,QAAQ,IAAKsnB,GAAc,EAExC,GAAkB,IAAd+8O,GAAmBA,IAAcpmQ,EACjC,OAAOomQ,EAEX,KAA2B,MAApB5zO,EAAK4zO,MACRA,IACkBpmQ,IAItB,OAAOomQ,GAMXm9K,EAAO3kb,UAAU4phB,uBAAyB,SAAUtI,EAAauI,EAAYC,GACzE,IAAI1oN,EAAa0oN,EAAeD,EAAWA,EAAWzohB,OAAS,GAAKyohB,EAAWA,EAAWzohB,OAAS,GAC/FyyO,EAAWutF,EAAWspM,aACtBqf,EAAezI,EAAYA,EAAYlghB,OAAS,GAChD0ohB,IACAj2S,GAAY,GAGhB,IAAK,IADDm2S,EAAc5oN,EAAW86L,gBAAgBD,aAAa1ue,OAAOsmN,GACxD/yO,EAAI,EAAGA,EAAIkphB,EAAY5ohB,OAAQN,IACpCiphB,EAAa9tB,aAAa7yf,KAAK4ghB,EAAYlphB,IAC3CkphB,EAAYlphB,GAAGo7f,gBAAkB6tB,GAUzCplG,EAAO3kb,UAAUiqhB,mBAAqB,SAAUt9c,EAAMmyC,EAAMora,EAAkBC,GAE1E,IAAIC,EAAkB,EAClBC,EAAY,EACZj5gB,EAAO,EACPE,EAAM44gB,EACN74gB,EAAQ,EACRE,EAAS44gB,EACR9nhB,EAAkBsqE,EAAK0gc,cACpB1gc,EAAK0gc,WAAW/C,mBAEhBl5f,EAAO/O,EAAkBsqE,EAAK0gc,WAAWvsP,YAAc4iP,GAAcO,oBAAoBt3b,EAAKqgc,WAAWpE,YAAY9nP,YAAc4iP,GAAcO,oBAAoBt3b,EAAK0gc,WAAWvsP,YACrLzvQ,EAAQhP,EAAkBsqE,EAAK0gc,WAAWrsP,aAAe0iP,GAAcO,oBAAoBt3b,EAAKqgc,WAAWpE,YAAY5nP,aAAe0iP,GAAcO,oBAAoBt3b,EAAK0gc,WAAWrsP,eAGxL5vQ,EAAOsyf,GAAcO,oBAAoBt3b,EAAKqgc,WAAWpE,YAAY9nP,YACrEzvQ,EAAQqyf,GAAcO,oBAAoBt3b,EAAKqgc,WAAWpE,YAAY5nP,eAG9Er0M,EAAK/oC,OAAS,IAAI6kM,GAAOr3N,EAAME,EAAKD,EAAOE,GAC3Co7D,EAAK/xD,MAAQ8of,GAAcO,oBAAoBt3b,EAAK0gc,WAAWv6M,WAC1DzwT,EAAkBsqE,EAAK8lc,kBAExB2X,EAAkBz9c,EAAK8lc,eAAe7+R,YAAcjnK,EAAK8lc,eAAepF,WAAW31M,YAGvF2yN,EAAahohB,EAAkBsqE,EAAKqgc,aAAgB3qgB,EAAkBsqE,EAAKqgc,WAAWpE,aAA4F,EAA7ElF,GAAcO,oBAAoBt3b,EAAKqgc,WAAWpE,YAAY3zM,aACnK,IAAIq1N,EAAuB,EAqC3B,OApCIF,EAAkBz9c,EAAKinK,cAEvB02S,EAAuB5mB,GAAcO,oBAAoBt3b,EAAKqgc,WAAWqB,YAAYiL,4BAA4B8Q,EAAiBz9c,EAAKinK,cAC/G,IAApBw2S,IACAE,GAA8CD,EAAY,IAGlE19c,EAAKh7D,EAAImtG,EAAKntG,EAAI24gB,EAAuB39c,EAAK/oC,OAAOxyB,KACrDu7D,EAAK/6D,EAAIktG,EAAKltG,EAAI+6D,EAAK/oC,OAAOtyB,IAAM+4gB,EACpC19c,EAAK/xD,MAAQ+xD,EAAK/xD,MAAQ+xD,EAAK/oC,OAAOxyB,KAAOu7D,EAAK/oC,OAAOvyB,MACrDg5gB,EAAY,IACZ19c,EAAKh7D,GAAK04gB,EACyC,IAA/C19c,EAAKqgc,WAAWqB,YAAYpmc,QAAQ7mE,OACpCurE,EAAK/xD,OAAqB,EAAZyvgB,EAEY,IAArB19c,EAAKinK,aAAqBjnK,EAAKinK,cAAgBjnK,EAAKqgc,WAAWqB,YAAYpmc,QAAQ7mE,OAAS,EACjGurE,EAAK/xD,OAAuB,EAAZyvgB,EAAiBA,EAAY,EAG7C19c,EAAK/xD,OAASyvgB,GAMtB19c,EAAKshc,gBAAkBvK,GAAcO,oBAAoB4G,GAAgBkI,kBAAkBpmc,GAAM0pM,gBACjG1pM,EAAKh7D,GAAKg7D,EAAKshc,gBACfthc,EAAK/xD,OAAS+xD,EAAKshc,iBACfoc,EAAY,GAAK19c,EAAKwrP,YAAcxrP,EAAKsgc,SAAShR,aAAa76f,OAAS,KACxEurE,EAAKuhc,iBAAmBrD,GAAgBmK,mBAAmBroc,GAAM0pM,eACjE1pM,EAAK/xD,OAAS+xD,EAAKuhc,kBAGvBvhc,EAAK/oC,OAAOxyB,KAAOu7D,EAAK/oC,OAAOxyB,KAAOu7D,EAAKshc,gBAC3Cthc,EAAK/oC,OAAOvyB,MAAQs7D,EAAK/oC,OAAOvyB,MAAQs7D,EAAKuhc,iBAEtCvhc,GASXg4W,EAAO3kb,UAAUuqhB,iBAAmB,SAAUn3B,EAAQo3B,EAAiBzyN,EAAeztP,EAAKmgd,GAEvF,IAAInJ,EAAckJ,EAAgB,GAC9B9zgB,EAAQ4qgB,EAAYrlB,aAAa76f,OACjCsphB,OAAa5qhB,EACb6qhB,EAAiB5yN,EAAc50T,QAAQmnE,GAU3C,GATIqgd,EAAiB,EACjBD,EAAa3yN,EAAc4yN,EAAiB,GAGvCrgd,EAAI2gc,kCAAkCF,IAC3Czgc,EAAI2gc,uBAAuB+B,WAAWh1d,OAAOsyB,EAAI0ic,cAEjD0d,EAAapgd,EAAI2gc,yBAEhB5ogB,EAAkBqohB,GAAa,CAIhC,GAHApJ,EAAcoJ,EAAWxuB,gBAEzBxlf,EAAQ4qgB,EAAYrlB,aAAa94f,QAAQunhB,GAAc,EACnDz5gB,KAAK0zB,MAAM2lC,EAAI14D,KAAOX,KAAK0zB,MAAM+lf,EAAW94gB,EAAI84gB,EAAW/vgB,QAAS,CACpE,IAAIwlX,EAAYqqJ,EAAgBrnhB,QAAQm+gB,GACpCnhJ,EAAY,GAAKqqJ,EAAgBpphB,QAEjCwD,KAAKgmhB,eAAex3B,EAAOmsB,iBAAkBiL,GAAiB,GAGlE9zgB,GADA4qgB,EAAckJ,EAAgBrqJ,EAAY,IACtB87H,aAAa76f,OAEjCuphB,EAAiB,IACjBj0gB,EAAQ,GAGhB9R,KAAKimhB,6BAA6BvJ,EAAah3c,EAAK5zD,GACpD9R,KAAKkmhB,6BAA6BN,EAAiBlgd,EAAK8ob,GAEpD9ob,EAAI4xb,iBAAmB5xb,EAAI4xb,kBAAoBolB,IACI,IAAnDh3c,EAAI4xb,gBAAgBD,aAAa94f,QAAQmnE,IACzCA,EAAI4xb,gBAAgBD,aAAa1ue,OAAO+8C,EAAI4xb,gBAAgBD,aAAa94f,QAAQmnE,GAAM,IAE5C,IAA3Cg3c,EAAYrlB,aAAa94f,QAAQmnE,IACjCg3c,EAAYrlB,aAAa1ue,OAAO7W,EAAO,EAAG4zD,GAE9CA,EAAI4xb,gBAAkBolB,EACtBA,EAAY3mgB,OAAS2mgB,EAAY3mgB,OAAS2vD,EAAI3vD,OACzCtY,EAAkBi/gB,EAAYplB,oBAC5BolB,EAAYplB,gBAAgBD,aAAa94f,QAAQm+gB,IAAgB,IAClEA,EAAYplB,2BAA2B8O,KACzCsW,EAAYplB,gBAAgBvhf,QAAU2vD,EAAI3vD,QAE9C/V,KAAKmmhB,yBAAyB33B,GAAQ,EAAOo3B,EAAiBzyN,EAAeztP,GAAK,EAAOmgd,GACzFr3B,EAAOmxB,WAAWj6c,EAAI14D,EAAI04D,EAAI3vD,SAUlCgqa,EAAO3kb,UAAU6qhB,6BAA+B,SAAUvJ,EAAah3c,EAAK88c,GACxE,IAAI5xN,EAAU,EACd,GAAwC,IAApC8rN,EAAYrlB,aAAa76f,QAAgC,IAAhBgmhB,EAA7C,CAIA,IAAK,IAAItmhB,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IAAK,CAC9C,IAAI4xgB,EAAapoc,EAAI2xb,aAAan7f,GAElC00T,EAAWnzT,EAAkBqwgB,IAAerwgB,EAAkBqwgB,EAAWrF,YAAe73M,EAAUk9M,EAAWrF,WAAW73M,QACxH5wT,KAAKomhB,2BAA2Bx1N,EAASlrP,GAE7C,IAAKjoE,EAAkBioE,EAAI0ic,YACvB,IAASlsgB,EAAI,EAAGA,EAAIwpE,EAAI0ic,WAAWuB,qBAAqBntgB,OAAQN,IAC5D,GAAIwpE,EAAI0ic,WAAWuB,qBAAqBrsgB,KAAKpB,KAAOwpE,EAAI5zD,MAAO,CAE3D,IAAK,IAAI4R,EAAI,EAAGA,EAAI8+f,EAAa9+f,IAAK,CAClC,IAAI2igB,EAAgB3J,EAAYrlB,aAAa3ze,GAC7C1jB,KAAKsmhB,gBAAgBD,EAAe3gd,GAExCA,EAAI0ic,WAAWuB,qBAAqBplgB,OAAOmhE,EAAI0ic,WAAWuB,qBAAqBrsgB,KAAKpB,IACpF,YAlBR8D,KAAKsmhB,gBAAgB5gd,EAAKA,IA6BlCq6W,EAAO3kb,UAAUkrhB,gBAAkB,SAAUD,EAAe3gd,GAGxD,IAAK,IAFDupK,EAAWvpK,EAAI5zD,MACf8+S,EAAU,EACL10T,EAAI,EAAGA,EAAImqhB,EAAchvB,aAAa76f,OAAQN,IAAK,CACxD,IAAI4xgB,EAAauY,EAAchvB,aAAan7f,GAK5C,GAHA00T,EAAWnzT,EAAkBqwgB,IAAerwgB,EAAkBqwgB,EAAWrF,YAAe73M,EAAUk9M,EAAWrF,WAAW73M,QAExH5wT,KAAKomhB,2BAA2Bx1N,EAASlrP,GACrCupK,EAAW6+R,EAAW7+R,UAAa2hF,EAAU,EAAG,CAChD,IAAI21N,EAAmBzY,EAAW9ggB,EAAI8ggB,EAAW/3f,OAAS+3f,EAAW9ue,OAAOryB,OAAS+4D,EAAI14D,EACrF04D,EAAI3vD,OAASwwgB,IACb7gd,EAAI3vD,OAASwwgB,MAM7BxmG,EAAO3kb,UAAUgrhB,2BAA6B,SAAUx1N,EAASlrP,GACzDkrP,EAAU,IAAMnzT,EAAkBioE,EAAI0ic,cAEjC1ic,EAAI0ic,WAAWuB,qBAAqBtmR,YAAY39K,EAAI5zD,MAAQ8+S,EAAU,IACvElrP,EAAI0ic,WAAWuB,qBAAqBvlgB,IAAIshE,EAAI5zD,MAAQ8+S,EAAU,EAAGlrP,EAAI5zD,SAUjFiua,EAAO3kb,UAAU8qhB,6BAA+B,SAAUN,EAAiBlgd,EAAK8ob,GACxE9ob,EAAI0ic,WAAWpE,YAAY3zM,YAAc,GAKrCu1N,EAAgBpphB,OAAS,GAAKkpE,EAAI14D,IAAMwhf,EAAO4tB,WAAWpvgB,GAAKwhf,aAAkBC,KACjF/ob,EAAI3vD,OAAS2vD,EAAI3vD,OAAS+of,GAAcO,oBAAoB35b,EAAI0ic,WAAWpE,YAAY3zM,aAAe,IASlH0vH,EAAO3kb,UAAUorhB,aAAe,SAAU9gd,EAAK8ob,GAG3C,IAAK,IAFDv/Q,EAAWvpK,EAAI5zD,MACf8+S,EAAU,EACL10T,EAAI,EAAGA,EAAIsyf,EAAOi4B,oBAAoBjqhB,OAAQN,IAAK,CACxD,IAAIwqhB,EAAel4B,EAAOi4B,oBAAoBvqhB,GAG9C,GADA00T,EAAWnzT,EAAkBiphB,IAAiBjphB,EAAkBiphB,EAAaje,YAAe73M,EAAU81N,EAAaje,WAAW73M,QAC1H3hF,EAAWy3S,EAAaz3S,UAAa2hF,EAAU,EAC/C,OAAO,EAGf,OAAO,GAOXmvH,EAAO3kb,UAAUurhB,6BAA+B,SAAUjhd,GAEtD,IAAK,IADDkhd,EAAW,EACN1qhB,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IAAK,CAC9C,IAAI6rE,EAAOrC,EAAI2xb,aAAan7f,GAC5B,GAAI0qhB,EAAW7+c,EAAKinK,YAChB,OAAO,EAEX43S,GAAY7+c,EAAK0gc,WAAW31M,WAEhC,OAAO8zN,EAAWlhd,EAAI0ic,WAAWqB,YAAYpmc,QAAQ7mE,QAUzDujb,EAAO3kb,UAAUyrhB,aAAe,SAAUC,EAAgBt4B,EAAQo3B,EAAiBzyN,EAAe+1M,EAAgB6d,GAC9G,GAAI/mhB,KAAKgnhB,qBAAqBx4B,EAAO4tB,WAAWzvgB,OAAQm6gB,IAAmBA,EAAezvB,aAAa76f,OAAS,GAE5G,GADA0sgB,EAAiBlpgB,KAAKinhB,wBAAwBz4B,EAAO4tB,WAAWzvgB,OAAQi5gB,EAAiBzyN,EAAe2zN,GACpGt4B,EAAOi4B,oBAAoBjqhB,OAAS,GAAK0sgB,IAAmB4d,EAAgB,CAC5E,GAAIC,EACA,IAAK,IAAI7qhB,EAAI,EAAGA,EAAIgtgB,EAAe7R,aAAa76f,OAAQN,IAAK,CAC9CgtgB,EAAe7R,aAAan7f,GAC9B+yO,WAAai6R,EAAep3f,QACjCo3f,EAAe7R,aAAa1ue,OAAOzsB,EAAG,GACtCA,KAKZ8D,KAAKknhB,0BAA0B14B,EAAQo3B,EAAiB1c,EAAgB4d,EAAehhB,aAAe,SAK1G9lgB,KAAKknhB,0BAA0B14B,EAAQo3B,EAAiB1c,EAAgB4d,EAAehhB,aAAe,GAE1G,OAAOoD,GAQXnpF,EAAO3kb,UAAU6rhB,wBAA0B,SAAUt6gB,EAAQi5gB,EAAiBzyN,EAAe2zN,GAGzF,IAAK,IAFD5d,OAAiBhugB,EACjB+zO,EAAW63S,EAAeh1gB,MACrB5V,EAAI,EAAGA,EAAI4qhB,EAAezvB,aAAa76f,OAAQN,IAAK,CACzD,IAAI4xgB,EAAagZ,EAAezvB,aAAan7f,GACzCwqhB,EAAe1mhB,KAAKmnhB,kBAAkBx6gB,GAAQ,EAAMi5gB,EAAiBzyN,EAAe26M,GACxF,IAAKrwgB,EAAkBiphB,GAAe,CAClC,GAAIA,IAAiB5Y,EAEjB,OAAOgZ,GAEgD,IAAvDA,EAAezvB,aAAa94f,QAAQmohB,IACpCI,EAAezvB,aAAa1ue,OAAOm+f,EAAezvB,aAAa94f,QAAQmohB,GAAe,IAEhF,IAANxqhB,GAAW4qhB,EAAe/wgB,OAAS+3f,EAAW/3f,OAAS+3f,EAAW9ue,OAAOtyB,IAAMohgB,EAAW9ue,OAAOryB,UACjGm6gB,EAAe/wgB,OAAS+3f,EAAW/3f,OAAS+3f,EAAW9ue,OAAOtyB,IAAMohgB,EAAW9ue,OAAOryB,QAEtFlP,EAAkByrgB,MAElBA,EAAiB,IAAI/C,IACN7O,gBAAkBwvB,EAAexvB,gBAChD4R,EAAep3f,MAAQg1gB,EAAeh1gB,MACtCo3f,EAAeoB,UAAYwc,EAAexc,UAC1CtqgB,KAAKonhB,qBAAqBN,EAAgB5d,GAC1CA,EAAenzf,OAAS,EACxBo9S,EAAc3uT,KAAK0kgB,IAEvB,IAAIt4M,EAAU,EAEdA,EAAWnzT,EAAkBiphB,IAAiBjphB,EAAkBiphB,EAAaje,YAAe73M,EAAU81N,EAAaje,WAAW73M,QAC1H3hF,EAAWy3S,EAAaz3S,UAAa2hF,EAAU,GAC5Cs4M,EAAenzf,OAAS2wgB,EAAa3wgB,OAAS2wgB,EAAa1nf,OAAOtyB,IAAMg6gB,EAAa1nf,OAAOryB,SAC/Fu8f,EAAenzf,OAAS2wgB,EAAa3wgB,OAAS2wgB,EAAa1nf,OAAOtyB,IAAMg6gB,EAAa1nf,OAAOryB,QAEhGu8f,EAAe7R,aAAa7yf,KAAKkihB,GACjCA,EAAapvB,gBAAkB4R,GAGvC,OAAOA,GAQXnpF,EAAO3kb,UAAUishB,qBAAuB,SAAUC,EAAcrC,EAAYv/c,GACxE,IAAIP,EAAYnlE,KAAKklE,aAAaQ,GAAMA,IACpC8ob,EAASxuf,KAAKwuf,OAEd9he,EAAWg5C,EAAI4kc,UAAU59e,SACzB66f,EAA0B7hd,EAAI4kc,UAAUzF,sBACxCL,EAAa9+b,EAAI4kc,UAAU9F,WAC3Bn0M,EAAc,EACdnxS,EAAQ,EACR4ngB,EAAiBphd,EACjB8hd,GAAqB,EACrB9hd,EAAI0ic,WAAWqf,iBAAmB/6f,IAClCg5C,EAAI0ic,WAAWqf,gBAAiB,GAEpC,IAAIV,GAAY,EAEhB,IADA12N,EAAgB5yT,EAAkBioE,EAAI0ic,aAAgB3qgB,EAAkBioE,EAAI0ic,WAAWpE,aAA4F,EAA5ElF,GAAcO,oBAAoB35b,EAAI0ic,WAAWpE,YAAY3zM,aAC7JnxS,EAAQ+lgB,EAAWzohB,QAAQ,CAE9B,GADA0iB,EAAQ+lgB,EAAWzohB,OACfkpE,EAAI0ic,WAAWG,eAAwD,IAAtC/Z,EAAOi4B,oBAAoBjqhB,QAAgBsqhB,EAAe95gB,EAAI85gB,EAAe/wgB,OAASs6S,GAAem+L,EAAO4tB,WAAWzvgB,OACxJ3M,KAAK2lhB,iBAAiBn3B,EAAQ84B,EAAcrC,EAAY6B,GACpDt4B,EAAOi4B,oBAAoBjqhB,OAAS,GAAKiB,EAAkBwnhB,EAAWA,EAAWzohB,OAAS,GAAG80gB,WAC7Fpyf,IACA6ngB,GAAY,OAGf,CAED,GAAIv4B,EAAOi4B,oBAAoBjqhB,OAAS,GAAKsqhB,EAAe95gB,EAAI85gB,EAAe/wgB,QAAUy4e,EAAO4tB,WAAWzvgB,OAAQ,CAE/G,IADmB3M,KAAKwmhB,aAAa9gd,EAAK8ob,GACvB,CACXxuf,KAAK2mhB,6BAA6Bjhd,IAAQohd,EAAe95gB,GAAKwhf,EAAO4tB,WAAWpvgB,GAChFhN,KAAKknhB,0BAA0B14B,EAAQ84B,EAAcR,EAAgBA,EAAehhB,aAAe,GAEvG9lgB,KAAK2lhB,iBAAiBn3B,EAAQ84B,EAAcrC,EAAY6B,GACxD,UAGR,IAAI5d,EAAiB4d,EACjBpK,EAAc4K,EAAaA,EAAa9qhB,OAAS,GACrD,GAAI2oE,EAAY2hd,EAAe95gB,EAAIwhf,EAAO4tB,WAAWzvgB,OAEjD,IAAK46gB,GAA4B76f,GAAYg5C,EAAI0ic,WAAWqf,gBAAmC,YAAfjjB,GAA4B1F,GAAcO,oBAAoB35b,EAAI4kc,UAAUv0f,QAAUy4e,EAAO4tB,WAAWzvgB,QASpL,IAPoB,YAAf63f,GAA4B1F,GAAcO,oBAAoB35b,EAAI4kc,UAAUv0f,QAAUy4e,EAAOmsB,iBAAiB5kgB,QAAUwxgB,GAA4C,YAAf/iB,GAA4BsiB,EAAe95gB,IAAMwhf,EAAO4tB,WAAWpvgB,GAAsB,SAAfw3f,GAAyB+iB,KACzPre,EAAiBlpgB,KAAK6mhB,aAAaC,EAAgBt4B,EAAQ84B,EAAcrC,EAAY/b,EAAgB6d,IAEtF,YAAfviB,GAA4BsiB,EAAe95gB,IAAMwhf,EAAO4tB,WAAWpvgB,IACnEhN,KAAK2lhB,iBAAiBn3B,EAAQ84B,EAAcrC,EAAY6B,GACxD5ngB,KAEAwN,GAAYg5C,EAAI0ic,WAAWqf,eAAgB,CAC3C/hd,EAAI0ic,WAAWt9a,QAAS,EACxBplB,EAAI0ic,WAAWqf,gBAAiB,EAChC/hd,EAAI0ic,WAAW8E,aAAe,EAC9B,IAAInlR,OAAQ7sP,EAIZ,GAFA6sP,EAAQymQ,EAAOzmQ,OAEVtqP,EAAkBsqP,GACnB,IAAK,IAAI7rP,EAAI,EAAGA,EAAI6rP,EAAMvrP,OAAQN,IAC1B6rP,EAAM7rP,GAAGm4gB,6BACTtsR,EAAM7rP,GAAGm4gB,4BAA6B,QAOlC,SAAf7P,GAAwC,YAAfA,IAA6B+iB,EAMnC,YAAf/iB,GAA4BsiB,EAAe95gB,IAAMwhf,EAAO4tB,WAAWpvgB,IACxEhN,KAAK2lhB,iBAAiBn3B,EAAQ84B,EAAcrC,EAAY6B,GACxD5ngB,KANM4/e,GAAcO,oBAAoB35b,EAAI4kc,UAAUv0f,QAAUy4e,EAAO4tB,WAAWzvgB,QAAWm6gB,EAAe95gB,IAAMwhf,EAAO4tB,WAAWpvgB,IAChIk8f,EAAiBlpgB,KAAK6mhB,aAAaC,EAAgBt4B,EAAQ84B,EAAcrC,EAAY/b,EAAgB6d,QAShH,CACD,IAAIW,GAA0B,EAE1B1nhB,KAAK2mhB,6BAA6Bjhd,KAAS6hd,IAC1CG,EAA0BZ,EAAe95gB,GAAKwhf,EAAO4tB,WAAWpvgB,IAC7D06gB,EACA1nhB,KAAKknhB,0BAA0B14B,EAAQ84B,EAAcpe,EAAgB4d,EAAehhB,aAAe,GAGnGoD,EAAiBlpgB,KAAK6mhB,aAAaC,EAAgBt4B,EAAQ84B,EAAcrC,EAAY/b,EAAgB6d,GAGpGA,IAAcQ,IACnBre,EAAiBlpgB,KAAK6mhB,aAAaC,EAAgBt4B,EAAQ84B,EAAcrC,EAAY/b,EAAgB6d,IAI7G,IAAKtphB,EAAkByrgB,GAAiB,CACpC,GAAIA,IAAmB4d,EAAgB,CACnC9mhB,KAAK2lhB,iBAAiBn3B,EAAQ84B,EAAcrC,EAAY6B,EAAgBA,EAAexV,SAEvFtxgB,KAAK2nhB,oBAAoBL,EAAcrC,EAAYv/c,EAAI0ic,WAAY0e,EAAexV,SACpEgW,EAAa/ohB,QAAQuohB,EAAexvB,iBACpC,GAAKgwB,EAAa9qhB,QAE5BwD,KAAKgmhB,eAAex3B,EAAOmsB,iBAAkB2M,GAAc,GAE/DR,EAAiB5d,MAEhB,CACD,GAAIxjc,EAAI5zD,MAAQ,EAIZ,GAFA9R,KAAK2nhB,oBAAoBL,EAAcrC,EAAYv/c,EAAI0ic,WAAY1ic,GAE/DA,EAAI2gc,kCAAkCF,GAAgB,CAEtD,IAAI2f,EAAapgd,EAAI2gc,uBACrB,GAAIvH,GAAc/+d,MAAM+mf,EAAe95gB,EAAG,KAAO8xf,GAAc/+d,MAAM+lf,EAAW94gB,EAAI84gB,EAAW/vgB,OAAQ,GAAI,CACvFuxgB,EAAa/ohB,QAAQunhB,EAAWxuB,iBAChC,GAAKgwB,EAAa9qhB,QAE9BwD,KAAKgmhB,eAAex3B,EAAOmsB,iBAAkB2M,GAAc,QAK/DtnhB,KAAKgmhB,eAAex3B,EAAOmsB,iBAAkB2M,GAAc,QAK/DtnhB,KAAKgmhB,eAAex3B,EAAOmsB,iBAAkB2M,GAAc,GAGnEE,GAAqB,EACrBtogB,IAEJw9f,EAAc4K,EAAaA,EAAa9qhB,OAAS,GACjD,IAAIorhB,OAAiB1shB,EACrB,GAAIoshB,EAAa9qhB,OAAS,EAEtBorhB,EAAiBN,EAAaA,EAAa9qhB,OAAS,GAAG86f,oBAEtD,CAEDswB,EADoBlid,EAAI0ic,WAAW/B,uBACJ/O,gBAG9B75f,EAAkBmqhB,IACPp5B,EAAOzmQ,MAAMxpP,QAAQqphB,EAAer6W,MAExC7nG,EAAI0ic,WAAW9Q,gBAAgBxlf,MAA3C,IACIgrf,OAAa,EACboL,OAAQ,EAERA,EADAsf,GAA8C,IAAxBF,EAAa9qhB,OAC3B8qhB,EAAaA,EAAa9qhB,OAAS,GAGnC8qhB,EAAaA,EAAa9qhB,OAAS,GAE/CsggB,EAAa98f,KAAKqihB,qBAAqBna,GACvC,IAAI2f,EAAcP,EAAaA,EAAa9qhB,OAAS,GAiBrD,GAfIgrhB,GAEkB,IAAd9hd,EAAI5zD,OAAe+1gB,EAAYvwB,kBAAsF,IAAnEuwB,EAAYvwB,gBAAgBD,aAAa94f,QAAQsphB,IACnGA,EAAYvwB,gBAAgBD,aAAa1ue,OAAOk/f,EAAYvwB,gBAAgBD,aAAa94f,QAAQsphB,GAAc,IAGjE,IAAlD/qB,EAAWzF,aAAa94f,QAAQsphB,IAChC/qB,EAAWzF,aAAa1ue,OAAOm0e,EAAWzF,aAAa94f,QAAQsphB,GAAc,GAEjF/qB,EAAWzF,aAAap8f,QAAQ4shB,GAChCA,EAAYvwB,gBAAkBwF,GAC1B0qB,GAAsB9hd,EAAI5zD,MAAQ,GAAKmzgB,EAAWzohB,OAAS,IAC3DwD,KAAKglhB,uBAAuBsC,EAAcrC,GAAauC,GAE3DA,GAAqB,EACjB9hd,EAAI0ic,WAAWt9a,QAAUg8b,EAAe/wgB,OAASy4e,EAAO4tB,WAAWzvgB,OAAQ,CAE3E6hf,EAAOs5B,qBAAqBzT,4BAA6B,EAGzD7lB,EAAO2sB,yBAAyBz1c,EAAI0ic,YAAY,EAAMkf,GAGtDpe,EAAen8f,EAAIm8f,EAAen8f,EAClCm8f,EAAel8f,EAAI0vgB,EAAY1vgB,EAAI04D,EAAI0ic,WAAW8E,aAElD,IAAIuY,EAAYp1N,EAAc,EAC9BrwT,KAAK+nhB,0BAA0BrL,EAAY1vgB,EAAI04D,EAAI0ic,WAAW8E,aAAeuY,EAAWvc,OAEvF,CAED1a,EAAO2sB,yBAAyBz1c,EAAI0ic,YAAY,EAAMkf,GAGtDpe,EAAen8f,EAAIm8f,EAAen8f,EAClCm8f,EAAel8f,EAAI0vgB,EAAY1vgB,EAE3By4gB,EAAYp1N,EAAc,EAC9BrwT,KAAK+nhB,0BAA0BrL,EAAY1vgB,EAAIy4gB,EAAWvc,IAGlE6d,GAAY,EAMhB,GAJIr6f,GAAYg5C,EAAI0ic,WAAWqf,iBAC3B/hd,EAAI0ic,WAAWt9a,QAAS,EACxBplB,EAAI0ic,WAAW8E,aAAe/nc,EAAYO,EAAI0ic,WAAW8E,cAEzDxgf,IAAajvB,EAAkBuC,KAAKozT,UAAU1tP,EAAI0ic,cAAgB1ic,EAAI5zD,QAAU9R,KAAKozT,UAAU1tP,EAAI0ic,YAAYt2f,MAAO,CACtH,IAAIo7f,EAAeltgB,KAAKgohB,gBAAgBtid,EAAI0ic,WAAY1ic,EAAKu/c,GAI7D,IAHI/X,EAAexnc,EAAI0ic,WAAW8E,cAAgBA,EAAexnc,EAAI0ic,WAAW8E,gBAC5Exnc,EAAI0ic,WAAW8E,aAAeA,GAE9Bxnc,EAAI0ic,WAAW8E,aAAe1e,EAAO4tB,WAAWrmgB,OAAQ,CACxD2vD,EAAI0ic,WAAWt9a,QAAS,EACxBplB,EAAI0ic,WAAWqf,gBAAiB,EAChC/hd,EAAI0ic,WAAW8E,aAAe,EAE9B,IADInlR,EAAQymQ,EAAOzmQ,MACV7rP,EAAI,EAAGA,EAAI6rP,EAAMvrP,OAAQN,IAC1B6rP,EAAM7rP,GAAGm4gB,6BACTtsR,EAAM7rP,GAAGm4gB,4BAA6B,IAKlDiT,EAAa9qhB,OAAS,GAAKkpE,EAAI0ic,WAAWt9a,QAAUg8b,EAAe/wgB,OAASy4e,EAAOmsB,iBAAiBhugB,SACnG6hf,EAAOs5B,qBAAqBzT,6BAC7B7lB,EAAOs5B,qBAAqBzT,4BAA6B,KAUrEt0F,EAAO3kb,UAAUg4T,UAAY,SAAUhuP,GACnC,IAAI0lB,OAAS5vF,EACT45F,GAAO,EACX1vB,EAAQA,EAAMyhc,kBAAkB,GAChC,IAAK,IAAI3qgB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GAO7B,GANIwpE,EAAI4kc,UAAU59e,SACdo+D,EAASplB,EAGTovB,GAAO,GAENA,EACD,MAGR,OAAOhK,GAOXi1V,EAAO3kb,UAAU4shB,gBAAkB,SAAU5f,EAAY1ic,EAAKytP,GAC1D,IAAIp9S,EAAS,EACb,GAAI2vD,EAAI0ic,WAAW/Q,aAAa76f,OAAS,GAAK4rgB,EAAW/Q,aAAa,GAAGiT,UAAU59e,SAC/E,IAAK,IAAIxwB,EAAI,EAAGA,EAAIksgB,EAAW/Q,aAAa76f,OAAQN,IAAK,CACrD,IAAI+rhB,EAAQ7f,EAAW/Q,aAAan7f,GACpC,IAAI+rhB,EAAM3d,UAAU59e,SAIhB,MAHA3W,GAAkB/V,KAAKklE,aAAa+id,EAAO90N,GAOvD,OAAOp9S,GAMXgqa,EAAO3kb,UAAU8shB,kBAAoB,SAAUngd,GAC9B/nE,KAAKwuf,OAAlB,IAEIouB,EAAY70c,EAAKsgc,SACNuU,EAAU7vgB,EACzB,GAAI6vgB,EAAUvlB,aAAa76f,OAAS,EAAG,CACnC,IAAI2rhB,EAAavL,EAAUvlB,aAAaulB,EAAUvlB,aAAa76f,OAAS,GAC7D2rhB,EAAWp7gB,EAAIo7gB,EAAWnygB,MAAQmygB,EAAWnpf,OAAOvyB,MAUnE,GAPAs7D,EAAKuvb,gBAAkBslB,GAGlBn/gB,EAAkBsqE,EAAKsgc,WAAoD,YAAvCtgc,EAAKsgc,SAASiC,UAAU9F,YAA4B1F,GAAcO,oBAAoBt3b,EAAKsgc,SAASiC,UAAUv0f,QAAU,GAAwB,IAAnBgyD,EAAKwrP,YACvKqpN,EAAU7mgB,OAAS6mgB,EAAU7mgB,OAAS+of,GAAcO,oBAAoBt3b,EAAKsgc,SAASiC,UAAUv0f,SAGpE,IAA5BgyD,EAAK0gc,WAAW73M,QAAe,CAC/B,IAAIzC,EAAapmP,EAAKhyD,OAASgyD,EAAK/oC,OAAOtyB,IAAMq7D,EAAK/oC,OAAOryB,OACzDiwgB,EAAU7mgB,OAAS+of,GAAcO,oBAAoBt3b,EAAKqgc,WAAWpE,YAAY3zM,aAAelC,IAChGyuN,EAAU7mgB,OAASo4S,EAAa2wM,GAAcO,oBAAoBt3b,EAAKqgc,WAAWpE,YAAY3zM,gBAW1G0vH,EAAO3kb,UAAU+qhB,yBAA2B,SAAU33B,EAAQ45B,EAA0BxC,EAAiBzyN,EAAeypN,EAAWyL,EAAYxC,GAC3I,IAAK,IAAI3phB,EAAI,EAAGA,EAAI0ghB,EAAUvlB,aAAa76f,OAAQN,IAAK,CACpD,IAAIoshB,EAAc,EACdxa,OAAa5ygB,EAKb01T,EAAU,EAGd,GAFAA,GAHAk9M,EAFkB8O,EAAUvlB,aAAan7f,IAKpBusgB,WAAW73M,QAChC03N,EAAcxpB,GAAcO,oBAAoByO,EAAW1F,WAAWpE,YAAY3zM,aAC9EO,EAAU,EAAG,CACb,IAAI23N,EAAwB3L,EAAUtlB,gBAAgBD,aAAa94f,QAAQq+gB,GAEvE4L,EAAwBD,EAAwB33N,EAAU,GAAKgsN,EAAU9qgB,MAAQg8f,EAAW7+R,WAC5Fu/Q,EAAO4tB,WAAWzvgB,OAASmhgB,EAAW9ggB,EAAI8ggB,EAAW/3f,OAAS+3f,EAAW9ue,OAAOryB,QAC7E67gB,GAAyBD,EAAwB,IACpDvohB,KAAKyohB,uBAAuB3a,EAAY8X,EAAiBzyN,EAAeq7L,GAE5E,IAAIk6B,EAAmB9L,EACvB,GAAI4L,EAAwB,EACxB,GAAIA,EAAwB5L,EAAUtlB,gBAAgBD,aAAa76f,OAAQ,CACvE,IAAImshB,EAAgB/L,EAAUtlB,gBAAgBD,aAAamxB,GACvDG,aAAyBxiB,KACzBuiB,EAAmBC,KACM9C,IACrB6C,EAAmB9L,QAM3B8L,EAAmB9L,EAAUtlB,gBAAgBD,aAAaulB,EAAUtlB,gBAAgBD,aAAa76f,OAAS,GAG9GsxgB,EAAW9ggB,EAAI8ggB,EAAW/3f,OAAS+3f,EAAW9ue,OAAOryB,OAAS+7gB,EAAiB17gB,EAAI07gB,EAAiB3ygB,OACpG+3f,EAAW/3f,OAAS2ygB,EAAiB17gB,EAAI07gB,EAAiB3ygB,OAAS+3f,EAAW9ggB,EAAI8ggB,EAAW9ue,OAAOryB,OAG/F07gB,GAAcK,GAA4C,IAAvBA,EAAiB17gB,GAAuC,IAA5B07gB,EAAiB3ygB,QAAiB+3f,EAAW9ggB,EAAI8ggB,EAAW/3f,OAAS+3f,EAAW9ue,OAAOryB,OAAS+7gB,EAAiB17gB,EAAI07gB,EAAiB3ygB,SAC1M2ygB,EAAiB3ygB,OAAS+3f,EAAW9ggB,EAAI8ggB,EAAW/3f,OAAS+3f,EAAW9ue,OAAOryB,OAAS+7gB,EAAiB17gB,QAiBzGs7gB,EAAc,GAKV1C,EAAgBpphB,OAAS,GAAKoghB,EAAU5vgB,IAAMwhf,EAAO4tB,WAAWpvgB,GAAKwhf,aAAkBC,KACvF65B,GAA4B,GAGpCxa,EAAW/3f,OAAS6mgB,EAAU7mgB,OAAS+3f,EAAW9ue,OAAOtyB,IAAMohgB,EAAW9ue,OAAOryB,OAAS27gB,EAE9FtohB,KAAK4ohB,0BAA0Bp6B,EAAQo3B,EAAiBzyN,EAAe26M,GAEvE,IADA,IAAIjI,EAAS+W,EAAUtlB,gBAChBuO,EAAOvO,2BAA2BqO,IACrCE,EAASA,EAAOvO,gBAEpB,IAAI/pV,OAAOryK,EACP2qgB,aAAkB/O,KAClBvpV,EAAOs4V,EAAOt4V,OAGbihV,aAAkBC,KAA2D,IAAvCD,EAAOsD,aAAavzf,QAAQgvK,IAAiB66W,IACpFpohB,KAAK6ohB,2BAA2B/a,GAAY,GAAO,KAkB/D/tF,EAAO3kb,UAAUwthB,0BAA4B,SAAUp6B,EAAQkuB,EAAavpN,EAAe26M,GACvF,IAAK,IAAI5xgB,EAAI,EAAGA,EAAI4xgB,EAAWzW,aAAa76f,OAAQN,IAC5C4xgB,EAAWzW,aAAan7f,aAAc+qgB,IACtCjngB,KAAK8ohB,2BAA2BpM,EAAavpN,EAAe26M,EAAWzW,aAAan7f,KAShG6jb,EAAO3kb,UAAU8pE,aAAe,SAAUQ,EAAKytP,GAC3C,IAAIp9S,EAAS,EACb,GAAiC,YAA7B2vD,EAAI4kc,UAAU9F,WACdzuf,EAAS2vD,EAAI4kc,UAAUv0f,WAEtB,CACD,IAAK,IAAI7Z,EAAI,EAAGA,EAAIi3T,EAAc32T,OAAQN,IAClCi3T,EAAcj3T,aAAciqgB,KAC5Bpwf,EAASo9S,EAAcj3T,GAAG6Z,OAASA,GAG3CA,EAAS1J,KAAKC,IAAIyJ,EAAQ2vD,EAAI4kc,UAAUv0f,QAE5C,OAAOA,GAQXgqa,EAAO3kb,UAAUqthB,uBAAyB,SAAU3a,EAAY8X,EAAiBzyN,EAAeq7L,GAC5F,IAAIk4B,EAAe1mhB,KAAKmnhB,kBAAkB34B,EAAO4tB,WAAWzvgB,QAAQ,EAAOi5gB,EAAiBzyN,EAAe26M,GACtGrwgB,EAAkBiphB,IAEnBl4B,EAAOi4B,oBAAoBjihB,KAAKkihB,IASxC3mG,EAAO3kb,UAAU8rhB,0BAA4B,SAAU14B,EAAQo3B,EAAiBhJ,EAAWmM,GACvF,IAAIv8gB,EAAOowgB,EAAU7vgB,EACjBm9f,EAAa,EACjBA,EAAapL,GAAcO,oBAAoBud,EAAUxU,WAAWqB,YAAYS,YAChF,IAAK,IAAIhugB,EAAI,EAAGA,EAAI0ghB,EAAUvlB,aAAa76f,OAAQN,IAAK,CACpD,IAAI4xgB,EAAa8O,EAAUvlB,aAAan7f,GACxC,GAAImQ,KAAK0zB,MAAMvzB,GAAQH,KAAK0zB,MAAM+te,EAAW/ggB,EAAI+ggB,EAAW9ue,OAAOxyB,MAAO,CACtE,GAAIxM,KAAKgphB,uBAAuBpM,EAAWpuB,EAAQhif,EAAMtQ,GAAI,CACzDA,IACA,SAEJ,IAAI0gC,EAAWggf,EAAUvlB,aAAa76f,OAEtC,GADAwD,KAAKiphB,8BAA8BrM,EAAWgJ,EAAiBp5gB,EAAMtQ,EAAG6shB,GACpEnsf,EAAWggf,EAAUvlB,aAAa76f,OAAQ,CAC1CN,IACA,UAIR,GADAsQ,GAAQshgB,EAAW9ue,OAAOxyB,KAAOshgB,EAAW93f,MAAQ83f,EAAW9ue,OAAOvyB,MAClEvQ,IAAM0ghB,EAAUvlB,aAAa76f,OAAS,GAAK6P,KAAK0zB,MAAMvzB,GAAQH,KAAK0zB,MAAM68e,EAAU7vgB,EAAIm9f,GAA3F,CACI,GAAIlqgB,KAAKgphB,uBAAuBpM,EAAWpuB,EAAQhif,EAAMtQ,EAAI,GACzD,SAEJ8D,KAAKiphB,8BAA8BrM,EAAWgJ,EAAiBp5gB,EAAMtQ,EAAI,EAAG6shB,SAMpF,IAAKtrhB,EAAkBm/gB,EAAUvlB,eAAmD,IAAlCulB,EAAUvlB,aAAa76f,SAAiBgyf,EAAOi4B,oBAAoBjqhB,OAAS,EAC1H,IAAK,IAAIknB,EAAI,EAAGA,EAAI8qe,EAAOi4B,oBAAoBjqhB,OAAQknB,IAAK,CACxD,IAAImif,EAASrX,EAAOi4B,oBAAoB/igB,GACxC,GAAIrX,KAAK0zB,MAAMvzB,IAASH,KAAK0zB,MAAM8le,EAAO94f,EAAI84f,EAAO7me,OAAOxyB,MAAO,CAC/D,GAAIxM,KAAKgphB,uBAAuBpM,EAAWpuB,EAAQhif,EAAMkX,GAAI,CACzDA,IACA,SAEJ,IAAIxE,EAAQ09f,EAAUvlB,aAAa76f,OAEnC,GADAwD,KAAKiphB,8BAA8BrM,EAAWgJ,EAAiBp5gB,EAAMkX,EAAGqlgB,GACpE7pgB,EAAQ09f,EAAUvlB,aAAa76f,OAAQ,CACvCknB,IACA,UAIR,GADAlX,GAAQq5f,EAAO7me,OAAOxyB,KAAOq5f,EAAO7vf,MAAQ6vf,EAAO7me,OAAOvyB,MACtDiX,IAAMk5f,EAAUvlB,aAAa76f,OAAS,GAAK6P,KAAK0zB,MAAMvzB,GACtDH,KAAK0zB,MAAM68e,EAAU7vgB,EAAIm9f,GAD7B,CAEI,GAAIlqgB,KAAKgphB,uBAAuBpM,EAAWpuB,EAAQhif,EAAMkX,EAAI,GACzD,SAEJ1jB,KAAKiphB,8BAA8BrM,EAAWgJ,EAAiBp5gB,EAAMkX,EAAI,EAAGqlgB,SAKpFv6B,EAAOi4B,oBAAoBjqhB,OAAS,IACpCgyf,EAAOi4B,yBAUf1mG,EAAO3kb,UAAU4thB,uBAAyB,SAAUpM,EAAWpuB,EAAQhif,EAAMsF,GACzE,IAAIu+S,EAAc,EACdusN,EAAUxU,WAAWpE,YAAY3zM,YAAc,IAC/CA,EAAcyuM,GAAcO,oBAAoBud,EAAUxU,WAAWpE,YAAY3zM,cAErF,IAAK,IAAIn0T,EAAI,EAAGA,EAAIsyf,EAAOi4B,oBAAoBjqhB,OAAQN,IAAK,CACxD,IAAIwqhB,EAAel4B,EAAOi4B,oBAAoBvqhB,GAC9C,GAAImQ,KAAK0zB,MAAMvzB,KAAUH,KAAK0zB,MAAM2mf,EAAa35gB,EAAI25gB,EAAa1nf,OAAOxyB,MAQrE,OAPAowgB,EAAUvlB,aAAa1ue,OAAO7W,EAAO,EAAG40gB,GACxCA,EAAapvB,gBAAkBslB,EAE3B8J,EAAa15gB,IAAM4vgB,EAAU5vgB,EAAI05gB,EAAa1nf,OAAOtyB,IAAM2jT,GAC3DrwT,KAAK+nhB,0BAA0BnL,EAAU5vgB,EAAG4vgB,GAEhDpuB,EAAOi4B,wBACA,EAGf,OAAO,GASX1mG,EAAO3kb,UAAU6thB,8BAAgC,SAAUzsN,EAAYopN,EAAiBp5gB,EAAMsF,EAAOi3gB,GAEjG,IAAK,IADDrM,EAAckJ,EAAgBA,EAAgBpphB,OAAS,GAClDN,EAAI6shB,EAAkB7shB,GAAK,EAAGA,IAGnC,IAAK,IAFD0ghB,EAAYF,EAAYrlB,aAAan7f,GACrCgthB,EAAetM,EAAU7vgB,EACpB2W,EAAI,EAAGA,EAAIk5f,EAAUvlB,aAAa76f,OAAQknB,IAAK,CACpD,IAAIktS,EAAU,EACVk9M,EAAa8O,EAAUvlB,aAAa3ze,GACxC,GAAIrX,KAAK0zB,MAAMvzB,KAAUH,KAAK0zB,MAAMmpf,GAAe,CAG/C,IAFAt4N,EAAWnzT,EAAkBqwgB,IAAerwgB,EAAkBqwgB,EAAWrF,YAAe73M,EACpFk9M,EAAWrF,WAAW73M,SACZ,EAAG,CACb,IAAIu4N,EAAkBnphB,KAAKophB,iBAAiBtb,GAC5CtxM,EAAW66L,aAAa1ue,OAAO7W,EAAO,EAAGq3gB,GACzCA,EAAgB7xB,gBAAkB96L,EAEtC,OAEJ0sN,GAAgBpb,EAAW9ue,OAAOxyB,KAAOshgB,EAAW93f,MAAQ83f,EAAW9ue,OAAOvyB,QAW1Fsza,EAAO3kb,UAAU+rhB,kBAAoB,SAAUx6gB,EAAQ08gB,EAAoBzD,EAAiBzyN,EAAe26M,GACvG,IAAI5E,OAAiBhugB,EACrB,GAAI4ygB,EAAW9ggB,EAAI8ggB,EAAW/3f,OAASpJ,EAASmhgB,EAAW9ue,OAAOryB,OAC9D,IAAK,IAAIzQ,EAAI,EAAGA,EAAI4xgB,EAAWzW,aAAa76f,OAAQN,IAChD,GAAI4xgB,EAAWzW,aAAan7f,aAAcg7f,GAAiB,CACvD,IAAIwa,EAAkB5D,EAAWzW,aAAan7f,GAC1CothB,EAAetphB,KAAKuphB,yBAAyB58gB,EAASmhgB,EAAW9ue,OAAOryB,OAAQ+kgB,GACpF,IAAKj0gB,EAAkB6rhB,GAAe,CAClC,GAAU,IAANpthB,GAAWothB,IAAiB5X,EAE5B,OAAO5D,GAE4C,IAAnDA,EAAWzW,aAAa94f,QAAQ+qhB,KAChCxb,EAAWzW,aAAa1ue,OAAOmlf,EAAWzW,aAAa94f,QAAQ+qhB,GAAe,GAC9EpthB,KAEJ4xgB,EAAW/3f,QAAUuzgB,EAAavzgB,OAC9BtY,EAAkByrgB,KAElBA,EAAiBlpgB,KAAKophB,iBAAiBtb,IAE3C5E,EAAenzf,QAAUuzgB,EAAavzgB,OACtCmzf,EAAe7R,aAAa7yf,KAAK8khB,GACjCA,EAAahyB,gBAAkB4R,OAGlC,CACD,IAAIwT,EAAc5O,EAAWzW,aAAan7f,GACtCsthB,GAAY9M,GAEhB,GAAI/vgB,EAASmhgB,EAAW9ue,OAAOryB,OAAS+vgB,EAAY1vgB,EAAI0vgB,EAAY3mgB,OAAQ,CACxE,IAAI0zgB,EAAc/M,EAAY3mgB,OAE1B2zgB,EAAgB1phB,KAAK2phB,0BAA0Bh9gB,EAASmhgB,EAAW9ue,OAAOryB,OAAQ68gB,EAAU9M,GAChG,IAAKj/gB,EAAkBishB,GAAgB,CACnC,GAAU,IAANxthB,GAAWwthB,IAAkBhN,EAE7B,OAAO5O,GAE6C,IAApDA,EAAWzW,aAAa94f,QAAQmrhB,IAChC5b,EAAWzW,aAAa1ue,OAAOmlf,EAAWzW,aAAa94f,QAAQmrhB,GAAgB,GAC/ExthB,IACA4xgB,EAAW/3f,QAAU2zgB,EAAc3zgB,QAGnC+3f,EAAW/3f,QAAU0zgB,EAAc/M,EAAY3mgB,OAE/CtY,EAAkByrgB,KAElBA,EAAiBlpgB,KAAKophB,iBAAiBtb,IAE3C5E,EAAenzf,QAAU2zgB,EAAc3zgB,OACvCmzf,EAAe7R,aAAa7yf,KAAKklhB,GACjCA,EAAcpyB,gBAAkB4R,IAUpD,OAJIzrgB,EAAkByrgB,IAAmBmgB,IAErCngB,EAAiBlpgB,KAAKophB,iBAAiBtb,IAEpC5E,GAOXnpF,EAAO3kb,UAAU+khB,oBAAsB,SAAUpjhB,GAC7C,OAAQA,GACJ,KAAK,EACD,MAAO,SACX,KAAK,EACD,MAAO,UACX,KAAK,EACD,MAAO,WACX,KAAK,EACD,MAAO,WACX,KAAK,EACD,MAAO,YACX,KAAK,EACD,MAAO,UACX,KAAK,EACD,MAAO,SACX,KAAK,EACD,MAAO,cACX,KAAK,EACD,MAAO,cACX,KAAK,EACD,MAAO,SACX,KAAK,GACD,MAAO,UACX,KAAK,GACD,MAAO,UACX,QACI,MAAO,SAOnBgjb,EAAO3kb,UAAUguhB,iBAAmB,SAAUrhd,GAC1C,IAAI+lc,EAAa,IAAI7H,GAUrB,OATA6H,EAAWrF,WAAa1gc,EAAK0gc,WAC7BqF,EAAWh8f,MAAQi2D,EAAKj2D,MACxBg8f,EAAW7+R,SAAWlnK,EAAKknK,SAC3B6+R,EAAW9+R,YAAcjnK,EAAKinK,YAC9B8+R,EAAWxW,gBAAkBvvb,EAAKuvb,gBAClCt3f,KAAKonhB,qBAAqBr/c,EAAM+lc,GAChCA,EAAW9ue,OAAS+oC,EAAK/oC,OACzB8ue,EAAWzE,gBAAkBvK,GAAcO,oBAAoBt3b,EAAKshc,iBACpEyE,EAAWxE,iBAAmBxK,GAAcO,oBAAoBt3b,EAAKuhc,kBAC9DwE,GAKX/tF,EAAO3kb,UAAUwuhB,kBAAoB,SAAUxkd,GAC3C,IAAIykd,EAAW,IAAI5iB,GASnB,OARI7hc,EAAM0lB,SACN++b,EAAS/+b,OAAS1lB,EAAM0lB,OACxB++b,EAAS3c,aAAe9nc,EAAM8nc,cAElC2c,EAAS/3gB,MAAQszD,EAAMtzD,MACvB+3gB,EAAS7lB,YAAc5+b,EAAM4+b,YAC7B6lB,EAASpgB,YAAcrkc,EAAMqkc,YAC7BogB,EAAS3e,cAAgB9lc,EAAM8lc,cACxB2e,GAOX9pG,EAAO3kb,UAAUmuhB,yBAA2B,SAAU58gB,EAAQ+kgB,GAG1D,IAAK,IAFDoY,EAAapY,EAAgB1kgB,EAC7Bk8f,OAAiBhugB,EACZgB,EAAI,EAAGA,EAAIw1gB,EAAgBra,aAAa76f,OAAQN,IAAK,CAC1D,IAAI22gB,EAAanB,EAAgBra,aAAan7f,GAC9C,GAAIyQ,EAASm9gB,EAAajX,EAAW98f,OAAQ,CACzC,GAAU,IAAN7Z,EAAS,CACT,GAAI22gB,EAAW5b,UAAUK,2BAA2B2O,IAE5C4M,EAAW5b,UAAUK,gBAAgBtqf,IAAM0kgB,EAAgB1kgB,EAAG,CAC9D88gB,GAAcjX,EAAW98f,OACzB,SAGRmzf,EAAiBwI,EACjB,OAEsD,IAAtDA,EAAgBra,aAAa94f,QAAQs0gB,KACrCnB,EAAgBra,aAAa1ue,OAAO+of,EAAgBra,aAAa94f,QAAQs0gB,GAAa,GACtF32gB,KAEJw1gB,EAAgB37f,QAAU88f,EAAW98f,OACjCtY,EAAkByrgB,KAElBA,EAAiB,IAAIhS,IACN7E,gBAAkBqf,EAAgBrf,gBACjD6W,EAAejX,gBAAkByf,EAAgBzf,gBACjDiX,EAAep3f,MAAQ4/f,EAAgB5/f,MACvC9R,KAAKonhB,qBAAqB1V,EAAiBxI,GAC3CA,EAAenzf,OAAS88f,EAAW98f,QAGnCmzf,EAAenzf,QAAU88f,EAAW98f,OAExCmzf,EAAe7R,aAAa7yf,KAAKqugB,GACjCA,EAAW5b,UAAYiS,EAE3B4gB,GAAcjX,EAAW98f,OAE7B,OAAOmzf,GASXnpF,EAAO3kb,UAAUuuhB,0BAA4B,SAAUh9gB,EAAQi5gB,EAAiBlJ,GAG5E,IAAK,IAFDqN,EAAYrN,EAAY1vgB,EACxBk8f,OAAiBhugB,EACZgB,EAAI,EAAGA,EAAIwghB,EAAYrlB,aAAa76f,OAAQN,IAAK,CACtD,IAAI0ghB,OAAY1hhB,EAKZiqE,GAFJy3c,EAFkBF,EAAYrlB,aAAan7f,IAIjB6Z,OAC1B,GAAIpJ,EAASo9gB,EAAY5kd,IAAc1nE,EAAkByrgB,GAAiB,CAGtE,IAAI8gB,OAAc9uhB,EACdo2T,GAA2B,EAQ/B,GAPK7zT,EAAkBm/gB,IAAen/gB,EAAkBm/gB,EAAUtS,aAC9Dh5M,EAA2BsrN,EAAUtS,UAAUzF,uBAE/CvzM,IAEA04N,EAAevshB,EAAkByrgB,IAAmBlpgB,KAAKgnhB,qBAAqBr6gB,EAAQiwgB,GAAc58gB,KAAKinhB,wBAAwBt6gB,EAAQi5gB,GAAkBhJ,GAAYA,GAAaA,IAEnLn/gB,EAAkBushB,GAAc,CACjC,GAAU,IAAN9thB,GAAW8thB,IAAgBpN,EAE3B,OAAOF,GAE4C,IAAnDA,EAAYrlB,aAAa94f,QAAQyrhB,IACjCtN,EAAYrlB,aAAa1ue,OAAO+zf,EAAYrlB,aAAa94f,QAAQyrhB,GAAc,GAC/E9thB,IACAwghB,EAAY3mgB,QAAUi0gB,EAAYj0gB,QAGlC2mgB,EAAY3mgB,QAAUovD,EAAYy3c,EAAU7mgB,OAE5CtY,EAAkByrgB,IAElBA,EAAiBlpgB,KAAK4phB,kBAAkBlN,GACxC18gB,KAAKonhB,qBAAqB1K,EAAaxT,GACvCA,EAAenzf,OAASi0gB,EAAYj0gB,QAGpCmzf,EAAenzf,QAAUi0gB,EAAYj0gB,OAEzCmzf,EAAe7R,aAAa7yf,KAAKwlhB,GACjCA,EAAY1yB,gBAAkB4R,GAGtC6gB,GAAanN,EAAU7mgB,OAE3B,OAAOmzf,GAOXnpF,EAAO3kb,UAAU6uhB,sBAAwB,SAAUt9gB,EAAQu9gB,GACvD,IAAIrX,EAAaqX,EAAW7yB,aAAa,GACrC8yB,EAAatX,EAAW5b,UAAUK,gBAMtC,GAAIt3f,KAAKwuf,OAAO47B,8BACZ,GAAIpqhB,KAAKwuf,OAAOmsB,iBAAiB3tgB,IAAMhN,KAAKwuf,OAAO4tB,WAAWpvgB,GAAKk9gB,EAAWl9gB,EAAI6lgB,EAAW98f,QAAUpJ,EACnG,OAAO,OAKX,GAAIw9gB,EAAW/hB,WAAWG,cAAe,CAErC,IAAI8hB,OAAsBnvhB,EAM1B,GALIivhB,EAAW7yB,2BAA2B6O,IACtCgkB,EAAW7yB,gBAAgBA,2BAA2B2P,IACnDkjB,EAAW7yB,gBAAgBA,gBAAgBA,2BAA2B2O,KACzEokB,EAAsBF,EAAW7yB,gBAAgBA,gBAAgBA,kBAEhE75f,EAAkB4shB,IAAwBF,EAAW7yB,gBAAgBtqf,IAAMq9gB,EAAoBr9gB,GAC7Fk9gB,EAAWl9gB,EAAI6lgB,EAAW98f,QAAUpJ,EACvC,OAAO,OAGV,GAAIw9gB,EAAW7yB,gBAAgBtqf,IAAMhN,KAAKwuf,OAAO4tB,WAAWpvgB,GAAKk9gB,EAAWl9gB,EAAI6lgB,EAAW98f,QAAUpJ,EACtG,OAAO,EAGf,OAAQu9gB,EAAWl9gB,EAAI6lgB,EAAW98f,QAAUpJ,GAQhDoza,EAAO3kb,UAAUkvhB,uBAAyB,SAAU39gB,EAAQ+vgB,GACxD,IAAIE,OAAY1hhB,EACZqvhB,GAAQ,EAQZ,OALA3N,EAFkBF,EAAYrlB,aAAa,GAItC55f,EAAkBm/gB,KACnB2N,EAAQvqhB,KAAKgnhB,qBAAqBr6gB,EAAQiwgB,IAEvC2N,GAOXxqG,EAAO3kb,UAAU4rhB,qBAAuB,SAAUr6gB,EAAQiwgB,GACtD,IAAK,IAAI1ghB,EAAI,EAAGA,EAAI0ghB,EAAUvlB,aAAa76f,OAAQN,IAAK,CACpD,IAAI4xgB,EAAa8O,EAAUvlB,aAAan7f,GACxC,IAAK8D,KAAKwqhB,sBAAsB79gB,EAAQmhgB,GACpC,OAAO,EAGf,OAAO,GAOX/tF,EAAO3kb,UAAUovhB,sBAAwB,SAAU79gB,EAAQmhgB,GACvD,GAAuC,IAAnCA,EAAWzW,aAAa76f,OACxB,OAAO,EAEX,GAAIsxgB,EAAWzW,aAAa,aAAcH,GAAiB,CACvD,IAAIgzB,EAAapc,EAAWzW,aAAa,GACzC,OAAOr3f,KAAKiqhB,sBAAsBt9gB,EAASmhgB,EAAW9ue,OAAOryB,OAAQu9gB,GAGrE,IAAIxN,EAAc5O,EAAWzW,aAAa,GAC1C,OAAOr3f,KAAKsqhB,uBAAuB39gB,EAASmhgB,EAAW9ue,OAAOryB,OAAQ+vgB,IAQ9E38F,EAAO3kb,UAAUgshB,qBAAuB,SAAUvhB,EAAQzgc,GACtDA,EAAMr4D,EAAI84f,EAAO94f,EACjBq4D,EAAMp4D,EAAI64f,EAAO74f,EACjBo4D,EAAMpvD,MAAQ6vf,EAAO7vf,OAQzB+pa,EAAO3kb,UAAUqvhB,4BAA8B,SAAU/9gB,EAAKgwgB,GAC1D,IAAK,IAAIxghB,EAAI,EAAGA,EAAIwghB,EAAYrlB,aAAa76f,OAAQN,IAAK,CACtD,IAAI0ghB,EAAYF,EAAYrlB,aAAan7f,GACzC0ghB,EAAU7vgB,EAAI6vgB,EAAU7vgB,EACxB6vgB,EAAU5vgB,EAAIN,EACd1M,KAAK+nhB,0BAA0Br7gB,EAAKkwgB,GACpClwgB,GAAOkwgB,EAAU7mgB,SASzBgqa,EAAO3kb,UAAU2shB,0BAA4B,SAAUr7gB,EAAKkwgB,GACxD,IAAI/qK,EAAU,EACV+qK,EAAUxU,WAAWpE,YAAY3zM,YAAc,IAC/CwhD,EAAUitJ,GAAcO,oBAAoBud,EAAUxU,WAAWpE,YAAY3zM,cAEjF,IAAK,IAAIn0T,EAAI,EAAGA,EAAI0ghB,EAAUvlB,aAAa76f,OAAQN,IAAK,CACpD,IAAI4xgB,EAAa8O,EAAUvlB,aAAan7f,GACxC4xgB,EAAW/ggB,EAAI+ggB,EAAW/ggB,EAC1B+ggB,EAAW9ggB,EAAIN,EAAMohgB,EAAW9ue,OAAOtyB,IAAMmlW,EAC7C7xW,KAAK0qhB,2BAA2B5c,EAAW9ggB,EAAG8ggB,KAQtD/tF,EAAO3kb,UAAUsvhB,2BAA6B,SAAUh+gB,EAAKohgB,GACzD,IAAK,IAAI5xgB,EAAI,EAAGA,EAAI4xgB,EAAWzW,aAAa76f,OAAQN,IAChD4xgB,EAAWzW,aAAan7f,GAAG6Q,EAAI+ggB,EAAWzW,aAAan7f,GAAG6Q,EAC1D+ggB,EAAWzW,aAAan7f,GAAG8Q,EAAIN,EAC3BohgB,EAAWzW,aAAan7f,aAAc+qgB,IACtCjngB,KAAKyqhB,4BAA4B/9gB,EAAKohgB,EAAWzW,aAAan7f,IAElEwQ,GAAOohgB,EAAWzW,aAAan7f,GAAG6Z,QAU1Cgqa,EAAO3kb,UAAUythB,2BAA6B,SAAU/a,EAAY6c,EAAepiB,GAC/E,GAAIuF,EAAW1F,WAAW9Q,2BAA2BR,IAAcyR,EAAe,CAC9E,IAAIn6F,EAAepua,KAAK4qhB,gBAAgB9c,EAAY6c,GAEpD3qhB,KAAK6qhB,kCAAkC/c,EAAY1/F,EAAcu8G,KASzE5qG,EAAO3kb,UAAUyvhB,kCAAoC,SAAU/c,EAAY1/F,EAAcu8G,GACrF,GAAqB,IAAjBv8G,EAIJ,IAAK,IADDxzY,EAAWkze,EAAW9ggB,EAAIoha,EACrBlya,EAAI,EAAGA,EAAI4xgB,EAAWzW,aAAa76f,OAAQN,IAC5C4xgB,EAAWzW,aAAan7f,aAAcg7f,GACtC4W,EAAWzW,aAAan7f,GAAG8Q,EAAI4tB,EAG/BA,EAAW56B,KAAK8qhB,0BAA0Bhd,EAAWzW,aAAan7f,GAAI0+B,EAAU+vf,GAEpF/vf,GAAsBkze,EAAWzW,aAAan7f,GAAG6Z,QASzDgqa,EAAO3kb,UAAU0vhB,0BAA4B,SAAUpO,EAAa9hf,EAAU+vf,GAC1EjO,EAAY1vgB,EAAI4tB,GAAsB8hf,EAAYnT,eAElD,IAAK,IAAIrtgB,EAAI,EAAGA,EAAIwghB,EAAYrlB,aAAa76f,OAAQN,IAAK,CACtD,IAAI0ghB,EAAYF,EAAYrlB,aAAan7f,GACzC0ghB,EAAU5vgB,EAAI4tB,EACd,IAAK,IAAIlX,EAAI,EAAGA,EAAIk5f,EAAUvlB,aAAa76f,OAAQknB,IAAK,CACpD,IAAIoqf,EAAa8O,EAAUvlB,aAAa3ze,GACxCoqf,EAAW9ggB,EAAI4tB,EAAWkze,EAAW9ue,OAAOtyB,IANlC,EAOV1M,KAAK6ohB,2BAA2B/a,EAAY6c,GAAe,GAE/D/vf,GAAsBgif,EAAU7mgB,OAEpC,OAAO6kB,GAOXmlZ,EAAO3kb,UAAUwvhB,gBAAkB,SAAU9c,EAAY6c,GAErD,IAAIxld,EAAY,EACZy3c,EAAY9O,EAAWxW,gBACvBh5b,EAAUwvc,EAAW9ue,OAAOtyB,IAAMohgB,EAAW9ue,OAAOryB,OAEpDw4D,GADC1nE,EAAkBqwgB,EAAWrF,aAAeqF,EAAWrF,WAAW73M,QAAU,EACjEk9M,EAAW/3f,QAGRtY,EAAkBm/gB,GAAgC,EAAnBA,EAAU7mgB,QAAcuoD,EAG1E,IAAIysd,EAAoB/qhB,KAAK0ihB,qBAAqB5U,GAE9C1/F,EAAe,EAUnB,OATIjpW,EAAY4ld,IACZ38G,EAAejpW,EAAY4ld,EACqB,WAA5Cjd,EAAWrF,WAAWt4c,kBACtBi+W,GAA8B,GAEoB,QAA5C0/F,EAAWrF,WAAWt4c,mBAA+Bw6d,KAC3Dv8G,EAAe,IAGhBA,GAMX2R,EAAO3kb,UAAUsnhB,qBAAuB,SAAU5U,GAC9C,GAAIrwgB,EAAkBqwgB,EAAWzW,cAC7B,OAAO,EAGX,IAAK,IADDv+E,EAAgB,EACX58a,EAAI,EAAGA,EAAI4xgB,EAAWzW,aAAa76f,OAAQN,IAC5C4xgB,EAAWzW,aAAan7f,GACxB48a,GAAiBg1F,EAAWzW,aAAan7f,GAAG6Z,OAMpD,OAAO+ia,GAOXiH,EAAO3kb,UAAU4vhB,mBAAqB,SAAUn9N,GAC5C,GAAKpwT,EAAkBowT,EAAQrhT,MAG1B,CACD,IAAIs6B,EAAS,IAAIm6d,GAAQpzM,GAGzB,OAFA/mR,EAAOqhM,UAAY,SACnBrhM,EAAO0sD,UAAY,IACZ1sD,EANP,OAAO+mR,EAAQrhT,MAcvBuza,EAAO3kb,UAAU6vhB,oBAAsB,SAAUp9N,GAC7C,GAAKpwT,EAAkBowT,EAAQphT,OAG1B,CACD,IAAIq6B,EAAS,IAAIm6d,GAAQpzM,GAGzB,OAFA/mR,EAAOqhM,UAAY,SACnBrhM,EAAO0sD,UAAY,IACZ1sD,EANP,OAAO+mR,EAAQphT,OAcvBsza,EAAO3kb,UAAU8vhB,kBAAoB,SAAUr9N,GAC3C,GAAKpwT,EAAkBowT,EAAQnhT,KAG1B,CACD,IAAIo6B,EAAS,IAAIm6d,GAAQpzM,GAGzB,OAFA/mR,EAAOqhM,UAAY,SACnBrhM,EAAO0sD,UAAY,IACZ1sD,EANP,OAAO+mR,EAAQnhT,KAcvBqza,EAAO3kb,UAAU+vhB,qBAAuB,SAAUt9N,GAC9C,GAAKpwT,EAAkBowT,EAAQlhT,QAG1B,CACD,IAAIm6B,EAAS,IAAIm6d,GAAQpzM,GAGzB,OAFA/mR,EAAOqhM,UAAY,SACnBrhM,EAAO0sD,UAAY,IACZ1sD,EANP,OAAO+mR,EAAQlhT,QAcvBoza,EAAO3kb,UAAUgwhB,wBAA0B,SAAUvhB,GACjD,IACIwE,OAAanzgB,EAGjB,OAFAmzgB,EAAaxE,EAAUpB,WAAW56M,QACfwgN,EAAWzL,YAQlC7iF,EAAO3kb,UAAUiwhB,0BAA4B,SAAUxhB,GACnD,IACIwE,OAAanzgB,EAGjB,OAFAmzgB,EAAaxE,EAAUpB,WAAW56M,QACbwgN,EAAW1L,cAQpC5iF,EAAO3kb,UAAU4ugB,cAAgB,SAAU5kc,GAEvC,IAAK,IADDpvD,EAAQ,EACH9Z,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAGhD,IAAK,IAFDwpE,EAAMN,EAAMiyb,aAAan7f,GACzBq4T,EAAW,EACN7wS,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GAC5B6wS,GAAYuqM,GAAcO,oBAAoBt3b,EAAK0gc,WAAWv6M,WAE9Dl4S,EAAQu+S,IACRv+S,EAAQu+S,GAGhB,OAAOv+S,GAMX+pa,EAAO3kb,UAAUkwhB,qBAAuB,SAAUC,EAAU/8B,GACxD,IAAIqsB,EAAe0Q,EAASzuB,WAAW+d,aACnC3S,EAAQqjB,EACRriB,EAAiBhB,EAAMrB,kBACvBqU,EAAYhS,EAAeA,EAAe1sgB,OAAS,GAAGgqgB,oBACtD/ogB,EAAkBy9gB,IAAcl7gB,KAAKwuf,OAAOg9B,eAAiBtjB,KAC7DlogB,KAAKwuf,OAAOg9B,kBAAetwhB,GAG/B,IADA,IAAIuwhB,GAAsB,EACnBvQ,aAAqBzU,IAAeyU,EAAUpe,WAAW+d,eAAiBA,GAAc,CAC3F,IAAI6Q,OAAgBxwhB,EAChBixS,EAAS+7N,EAAMrB,kBACnB6kB,EAAgBv/O,EAAOA,EAAO3vS,OAAS,GAKvC0rgB,EAAQgT,EACJ1sB,EAAOg9B,eAAiBtjB,IACxB1Z,EAAOg9B,kBAAetwhB,GAE1BuwhB,GAAsB,EACtB,IAAIlb,OAAar1gB,EAGjB,GAFAq1gB,EAAarI,EAAMrB,kBAAkB,GAEH,IAA9BrY,EAAO2wB,YAAY3ihB,SAAiBiB,EAAkB8ygB,IAAemb,EAAcp0B,kBAAoBiZ,EAAWjZ,iBAC9GwH,GAAc/+d,MAAMwwe,EAAWvjgB,EAAG,KAAO8xf,GAAc/+d,MAAM2rf,EAAc1+gB,EAAI0+gB,EAAc31gB,OAAQ,GAAK,CAC9G,IAAKtY,EAAkB+wf,EAAOg9B,cAAe,CACzCh9B,EAAOg9B,aAAetjB,EACtB,MAEJ,GAAIzqgB,EAAkB8ygB,EAAWA,YAC7B,MAIR,GADAkb,GAAsB,EAClBj9B,EAAOgV,MAAMliB,mBAAmD,IAA9BkN,EAAO2wB,YAAY3ihB,OAAc,CACnEgyf,EAAOg9B,aAAetjB,EACtB,MAEC,GAAIzqgB,EAAkBuC,KAAKwuf,OAAOgV,MAAM1U,gBAAkB9uf,KAAKwuf,OAAOgV,MAAM1U,aAAa68B,eAAgB,CAC1GzjB,EAAQA,EAAMnB,cAAc/mgB,KAAKwuf,QACjC,IAAIyI,OAAY,EACZy0B,EAAcp0B,kBAAoB4Q,EAAM5Q,oBAClCo0B,aAAyBx0B,KAC1Bw0B,aAAyBx0B,KAAqBw0B,EAAchjB,sBAE7D1ogB,KAAK4rhB,sBAAsB1jB,EAAOwjB,EAAcp0B,gBAAiBo0B,EAAc5lB,aAAe,GAAG,GAGrGoC,aAAiBjB,IACjBjngB,KAAK67gB,iBAAiB3T,GAAO,GAAM,GACnCA,EAAMgD,eAAgB,EACtBjU,EAAYj3f,KAAKwuf,OAAOv4a,UAAU41c,6BAA6B3jB,IAG/DjR,EAAYiR,EAEXlogB,KAAKwuf,OAAOgV,MAAsB,kBAAKxjgB,KAAKwuf,OAAOgV,MAAM1U,cAC1D9uf,KAAKwuf,OAAOgV,MAAM1U,aAAag9B,qBAAqB70B,GAExDzI,EAAO2sB,yBAAyBjT,GAAO,GACvClogB,KAAKwuf,OAAOlhc,OAAO8td,YAAYlT,EAAO,GACtC1Z,EAAO2sB,yBAAyBjT,GAAO,GAG3CgT,GADAhS,EAAiBgS,EAAUrU,mBACAqC,EAAe1sgB,OAAS,GAAGgqgB,mBAErDhY,EAAOgV,MAAMliB,mBAAqBthf,KAAKwuf,OAAOg9B,eAAiBtjB,GAChElogB,KAAKwuf,OAAOgV,MAAM1U,aAAai9B,uBAAuB7jB,EAAOujB,IAMrE1rG,EAAO3kb,UAAU4whB,wBAA0B,SAAU/0B,EAAWg1B,EAAiBluT,GAE7E,IAAIrxN,EAAM1M,KAAKwuf,OAAOv4a,UAAUmhO,OAAO60O,GACnCz/gB,EAAOxM,KAAKwuf,OAAO4tB,WAAWrvgB,EAClC/M,KAAKwuf,OAAOmxB,WAAWjzgB,GACvB1M,KAAKwuf,OAAOywB,YAAYzygB,IAK5Buza,EAAO3kb,UAAU8whB,eAAiB,SAAUhkB,GAExC,IADA,IAAIrC,EAASqC,EACNrC,EAAOvO,iBAAiB,CAC3B,GAAIuO,EAAOvO,2BAA2BgQ,GAClC,OAAOzB,EAEXA,EAASA,EAAOvO,kBAOxBv3E,EAAO3kb,UAAU+whB,kBAAoB,SAAUza,EAAiBjoO,EAAW2iP,GACnEpshB,KAAKwuf,OAAOg9B,eAAiB9Z,GAC7B1xgB,KAAKqshB,2BAA2B3a,EAAgB5/f,MAAO4/f,EAAgBpa,gBAAiBoa,GAAiB,GAGzGA,EAAgBnJ,cAChBvogB,KAAKsshB,cAAc5a,GAGnB1xgB,KAAKushB,aAAa7a,EAAiBjoO,GAEnCioO,EAAgB5U,sBAAsBsJ,KAC6B,IAAnEsL,EAAgB5U,WAAW4K,iBAAiBnpgB,QAAQ,WACpDyB,KAAK4ihB,yBAAyBlR,EAAgB5U,WAAY98f,KAAKwuf,SAMvEzuE,EAAO3kb,UAAUkxhB,cAAgB,SAAUpkB,GAEvC,IAAI9ic,EAAQplE,KAAKkshB,eAAehkB,GAI5Bid,EAAe//c,EAAM2hc,cAAc/mgB,KAAKwuf,QAC5C22B,EAAaja,eAAgB,EAC7Bia,EAAala,oBACbka,EAAaja,eAAgB,EAC7B,IAAIpO,EAAaqoB,EAAa7tB,gBAU9B,GATIt3f,KAAKwuf,OAAOgV,MAAMmf,uBAAyBza,EAAMskB,kBACjD1vB,EAAW/mf,QAAUovgB,EAAapvgB,OAElC/V,KAAKwuf,OAAOi+B,2BAA2Brnd,EAAM03b,WAAW/F,cAAe/2f,KAAKwuf,OAAOk+B,gBAAgBtnd,GAAQ03b,EAAWvvV,OAGtHvtK,KAAKwuf,OAAO8zB,iBAAiBxlB,EAAW/F,cAAe+F,EAAWvvV,MAGlEvtK,KAAKwuf,OAAOgV,MAAM3U,kBAAoB7uf,KAAKwuf,OAAOgV,MAAM1U,aAAc,CACtE,IAAI69B,EAAU3shB,KAAKwuf,OAAOv4a,UAAU41c,6BAA6B1G,GACjEnlhB,KAAKwuf,OAAOgV,MAAM1U,aAAag9B,qBAAqBa,GAExD3shB,KAAKwuf,OAAO2sB,yBAAyBgK,GAAc,GAEnDA,EAAap4gB,GAAKo4gB,EAAa9b,gBAC/B8b,EAAan4gB,GAAKm4gB,EAAa5b,eAE/BvpgB,KAAKwuf,OAAOmxB,WAAWwF,EAAan4gB,GACpChN,KAAK67gB,iBAAiBsJ,GAAc,GAAM,GAC1CnlhB,KAAKo7gB,YAAY+J,EAAc,GAAG,GAClCnlhB,KAAKwuf,OAAO2sB,yBAAyBgK,GAAc,GACnDnlhB,KAAKsrhB,qBAAqBnG,EAAcnlhB,KAAKwuf,SAKjDzuE,EAAO3kb,UAAUyghB,iBAAmB,SAAUz2c,EAAOwnd,EAAeC,GAChEznd,EAAMrvD,OAAS,EACX62gB,IACAxnd,EAAMp4D,EAAI,EACVo4D,EAAMr4D,EAAI,GAEd,IAAK,IAAI7Q,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GAC7B8D,KAAK8shB,eAAepnd,EAAKknd,EAAeC,KAMhD9sG,EAAO3kb,UAAU0xhB,eAAiB,SAAUpnd,EAAKknd,EAAeC,GAC5Dnnd,EAAI3vD,OAAS,EACT62gB,IACAlnd,EAAI14D,EAAI,EACR04D,EAAI34D,EAAI,GAEZ,IAAK,IAAI7Q,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IAAK,CAC9C,IAAI6rE,EAAOrC,EAAI2xb,aAAan7f,GAC5B8D,KAAK+shB,gBAAgBhld,EAAM6kd,EAAeC,KAMlD9sG,EAAO3kb,UAAU2xhB,gBAAkB,SAAUhld,EAAM6kd,EAAeC,GAC9D9kd,EAAKhyD,OAAS,EACV62gB,IACA7kd,EAAK/6D,EAAI,EACT+6D,EAAKh7D,EAAI,GAEb,IAAK,IAAI7Q,EAAI,EAAGA,EAAI6rE,EAAKsvb,aAAa76f,OAAQN,IAAK,CAC/C,IAAIgsgB,EAAQngc,EAAKsvb,aAAan7f,GAC1BgsgB,aAAiBhR,GACb21B,IACA3kB,EAAMnyf,OAAS,GAInB/V,KAAK67gB,iBAAiB3T,EAAO0kB,EAAeC,KAWxD9sG,EAAO3kb,UAAUixhB,2BAA6B,SAAUW,EAAYlwB,EAAYoL,EAAO+kB,GACnF,IAAKxvhB,EAAkBuC,KAAKwuf,OAAOgV,QAC5BxjgB,KAAKwuf,OAAOgV,MAAMjiB,gBACrB,GAAIub,aAAsBwK,GAAgB,CACtC,IAAI4lB,EAAclthB,KAAKmthB,iBAAiBrwB,EAAYkwB,GACpD,GAAIvvhB,EAAkByvhB,GAClB,OAUJ,GARIpwB,aAAsBsJ,IAEtBpmgB,KAAKwuf,OAAOi+B,2BAA2B3vB,EAAW/F,eAAkE,IAAnD+F,EAAW4K,iBAAiBnpgB,QAAQ,UAAkBu+f,EAAWvvV,MAClI2/W,EAAY51B,gBAAgBvhf,QAAUm3gB,EAAYn3gB,QAGlD/V,KAAKwuf,OAAO8zB,iBAAiBxlB,EAAW/F,cAAe+F,EAAWvvV,MAElEy/W,EAAa,EAAG,CAChB,IAAIlH,EAAaoH,EAAYrmB,kBAAkB,GAAGR,yBAC5Cyf,aAAsB5uB,KACvB4uB,aAAsB5uB,KAAqB4uB,EAAWpd,qBACvD1ogB,KAAKwuf,OAAOmxB,WAAWmG,EAAW94gB,EAAI84gB,EAAW/vgB,QAC7Cm3gB,EAAY51B,kBAAoBwuB,EAAWxuB,iBAE3Ct3f,KAAK4rhB,sBAAsBsB,EAAapH,EAAWxuB,gBAAiBwuB,EAAWhgB,aAAe,GAAG,IAGhGggB,aAAsB5uB,IAAmB4uB,EAAWpd,qBACzDod,EAAWxuB,kBAAoB41B,EAAY51B,iBAC3Ct3f,KAAKqihB,qBAAqByD,GAGlC,IAAIsH,OAAmB,GACvBF,EAAcA,EAAYnmB,cAAc/mgB,KAAKwuf,mBAClByY,IACvBjngB,KAAK67gB,iBAAiBqR,GAAa,GAAM,GACzCA,EAAYhiB,eAAgB,EAC5BkiB,EAAmBpthB,KAAKwuf,OAAOv4a,UAAU41c,6BAA6BqB,IAGtEE,EAAmBF,EAElBlthB,KAAKwuf,OAAOgV,MAAsB,kBAAKxjgB,KAAKwuf,OAAOgV,MAAM1U,cAC1D9uf,KAAKwuf,OAAOgV,MAAM1U,aAAag9B,qBAAqBsB,GAExDpthB,KAAKwuf,OAAO2sB,yBAAyB+R,GAAa,GAClDlthB,KAAKwuf,OAAOlhc,OAAO8td,YAAY8R,EAAa,GAAG,GAC/ClthB,KAAKwuf,OAAO2sB,yBAAyB+R,GAAa,GAC9CD,EACAjthB,KAAKqthB,iBAAiBH,GAGtBlthB,KAAKsrhB,qBAAqB4B,EAAalthB,KAAKwuf,aAG/C,GAAIsO,aAAsBmJ,GAAiB,CAC5C,IAAI7gc,EAAQplE,KAAKwuf,OAAOlhc,OAAO4+d,eAAepvB,EAAWsL,WAAWvB,kBAAkB,IACtF7mgB,KAAKsshB,cAAcxvB,EAAWsL,YAC9BpogB,KAAKsrhB,qBAAqBlmd,EAAOplE,KAAKwuf,UAIlDzuE,EAAO3kb,UAAU+xhB,iBAAmB,SAAU71B,EAAiB01B,GAE3D,IADA,IAAInS,EAAevjB,EAAgBxlf,MAC5Bwlf,GAAmBA,EAAgBxlf,QAAU+ogB,GAAc,CAC9D,GAAIvjB,EAAgBD,aAAa76f,OAAS,GAAK86f,EAAgBt6e,WAAWlL,OAASk7gB,GAC/E11B,EAAgB59W,UAAU5nI,OAASk7gB,EACnC,IAAK,IAAI9whB,EAAI,EAAGA,EAAIo7f,EAAgBD,aAAa76f,OAAQN,IAAK,CAC1D,IAAIgsgB,EAAQ5Q,EAAgBD,aAAan7f,GACzC,GAAIgsgB,EAAMp2f,QAAUk7gB,EAChB,OAAO9kB,EAInB,KAAI5Q,aAA2BR,IAI3B,MAHAQ,EAAkBA,EAAgBkP,qBAe9CzmF,EAAO3kb,UAAU4hhB,YAAc,SAAU53c,EAAOv/C,GACvCu/C,EAAM8lc,gBACP9lc,EAAM6lc,oBACN7lc,EAAM8lc,eAAgB,GAE1B,IAAIoiB,GAAalod,GACjBplE,KAAKgmhB,eAAehmhB,KAAKwuf,OAAOmsB,iBAAkB2S,GAClDtthB,KAAKwuf,OAAO++B,0BAA0Bnod,GAAO,GAC7C,IAAI14C,EAAW04C,EAAMiyb,aAAa,GAAGiT,UAAU59e,SAC3C04C,EAAMiyb,aAAa76f,OAAS,IAC5B4oE,EAAM0lB,OAASp+D,EACf04C,EAAMqid,eAAiB/6f,EACvB04C,EAAM8nc,aAAe,GAGzB,IADA,IAAIxnc,EAAMN,EAAMiyb,aAAaxxe,GACtB6/C,GAEHA,GADAA,EAAM1lE,KAAKwthB,UAAUF,EAAW5nd,IACtB4rc,QAGd,OADAtxgB,KAAK2nhB,oBAAoB2F,KAAelod,GACjCkod,EAAUA,EAAU9whB,OAAS,IAQxCujb,EAAO3kb,UAAU4qhB,eAAiB,SAAU9ra,EAAM90C,EAAO2rB,GACrD,IAAI2rb,EAAct3c,EAAMA,EAAM5oE,OAAS,GAuBvC,OAtBIu0F,IACA2rb,EAAc18gB,KAAK4phB,kBAAkBlN,GACrCt3c,EAAM5gE,KAAKk4gB,IAEfA,EAAY1mgB,MAAQkkG,EAAKlkG,MACzB0mgB,EAAY3vgB,EAAImtG,EAAKntG,EACrB2vgB,EAAY1vgB,EAAIktG,EAAKltG,EAEjB0vgB,EAAY1Y,YAAY3zM,YAAc,IACtCqsN,EAAY3mgB,OAAS2mgB,EAAY3mgB,OAAS+of,GAAcO,oBAAoBqd,EAAY1Y,YAAY3zM,aAEpGqsN,EAAYrT,gBAAkBvK,GAAcO,oBAAoBr/f,KAAKgrhB,mBAAmBtO,EAAY1Y,YAAYn2M,SAASp8C,gBACzHirQ,EAAYpT,iBAAmBxK,GAAcO,oBAAoBr/f,KAAKirhB,oBAAoBvO,EAAY1Y,YAAYn2M,SAASp8C,gBAE3HirQ,EAAYnT,eAAiBzK,GAAcO,oBAAoBr/f,KAAKkrhB,kBAAkBxO,EAAY1Y,YAAYn2M,SAASp8C,gBACvHirQ,EAAYlT,kBAAoB1K,GAAcO,oBAAoBr/f,KAAKmrhB,qBAAqBzO,EAAY1Y,YAAYn2M,SAASp8C,gBAC7HirQ,EAAY3vgB,GAAK2vgB,EAAYrT,gBAC7BqT,EAAY1vgB,GAAK0vgB,EAAYnT,eAC7BmT,EAAY1mgB,OAAS0mgB,EAAYrT,gBACjCqT,EAAY1mgB,OAAS0mgB,EAAYpT,iBACjCoT,EAAY3mgB,QAAU2mgB,EAAYlT,mBAE/BkT,GAOX38F,EAAO3kb,UAAUushB,oBAAsB,SAAUp7W,EAAQqgE,EAAMxnK,EAAOygd,GAClE,IAAIr3B,EAASxuf,KAAKwuf,OACdkuB,EAAcnwW,EAAOA,EAAO/vK,OAAS,GACpC4oE,EAAMmjc,gBACPvogB,KAAK8ohB,2BAA2Bv8W,EAAQqgE,EAAM8vS,EAAamJ,GACvDnJ,EAAYrlB,aAAa76f,OAAS,GAAKkghB,EAAY1vgB,IAAM0vgB,EAAYrlB,aAAa,GAAGrqf,IACrF0vgB,EAAY1vgB,EAAI0vgB,EAAYrlB,aAAa,GAAGrqf,IAUhDo4D,EAAM4+b,YAAY3zM,YAAc,IAE5BqsN,EAAY1vgB,EAAI0vgB,EAAY3mgB,OAAS+of,GAAcO,oBAAoBj6b,EAAM4+b,YAAY3zM,aAAem+L,EAAO4tB,WAAWzvgB,QAAU6hf,aAAkBC,KAItJiuB,EAAY3mgB,OAAS2mgB,EAAY3mgB,OAAS+of,GAAcO,oBAAoBj6b,EAAM4+b,YAAY3zM,aAAe,GAGjHm+L,EAAOmxB,WAAWjD,EAAY1vgB,EAAI0vgB,EAAY3mgB,SAE9CqvD,EAAM03b,sBAAsBsJ,KAC5Bhhc,EAAMkyb,gBAAgBvhf,QAAUqvD,EAAMrvD,OAClC/V,KAAKwuf,OAAOgV,MAAMmf,wBAAkF,IAAzDv9c,EAAM03b,WAAW4K,iBAAiBnpgB,QAAQ,WACrFyB,KAAK4ihB,yBAAyBx9c,EAAM03b,WAAY98f,KAAKwuf,UAWjEzuE,EAAO3kb,UAAU0thB,2BAA6B,SAAUv8W,EAAQqgE,EAAM8vS,EAAamJ,GAC/E,IAAK,IAAI3phB,EAAI,EAAGA,EAAIwghB,EAAYrlB,aAAa76f,OAAQN,IAAK,CACtD,IAAI0ghB,EAAYF,EAAYrlB,aAAan7f,GACzC,GAAI0ghB,IAAciJ,EACd,MAEJ7lhB,KAAKmmhB,yBAAyBnmhB,KAAKwuf,QAAQ,EAAMjiV,EAAQqgE,EAAMgwS,GAAW,EAAMiJ,KAUxF9lG,EAAO3kb,UAAUoyhB,UAAY,SAAU9Q,EAAah3c,GAChD,IAAI8ob,EAASxuf,KAAKwuf,OACdy2B,GAAcv/c,GACdmgc,EAAS7lgB,KAAKythB,kBAAkBj/B,EAAOmsB,iBAAkBsK,GAC7Dz2B,EAAOk/B,uBAAuBhod,GAAK,GACnC,IAAK,IAAIxpE,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IAAK,CAC9C,IAAI6rE,EAAOrC,EAAI2xb,aAAan7f,GAE5B8D,KAAK2thB,WAAW5ld,EAAM/nE,KAAK4thB,4BAA4Blod,EAAK,GAAKA,EAAI6jc,eAAgBvpgB,KAAK4thB,4BAA4Blod,EAAK,GAAKA,EAAI8jc,kBAAmB3D,GAE3JrX,EAAOk/B,uBAAuBhod,GAAK,GACnC,IAAIknK,GAAQlnK,GAEZ,OADA1lE,KAAKqnhB,qBAAqB3K,EAAa9vS,EAAMlnK,GACtCknK,EAAKA,EAAKpwO,OAAS,IAM9Bujb,EAAO3kb,UAAUqyhB,kBAAoB,SAAUvza,EAAMx0C,GACjD,IAAIk3c,EAAYl3c,EAAIA,EAAIlpE,OAAS,GACjCoghB,EAAU7vgB,EAAImtG,EAAKntG,EAAI6vgB,EAAUtS,UAAUvF,gBAC3C6X,EAAU5vgB,EAAIktG,EAAKltG,EACnB4vgB,EAAU5mgB,MAAQkkG,EAAKlkG,MACvB,IAAI6+E,EAAc,EAClB,IAAKp3F,EAAkBm/gB,EAAUxU,cAAgB3qgB,EAAkBm/gB,EAAUxU,WAAWpE,cACjF4Y,EAAUxU,WAAWpE,YAAY3zM,YAAc,EAAG,CACrDusN,EAAU7mgB,OAAS6mgB,EAAU7mgB,OAAS+of,GAAcO,oBAAoBud,EAAUxU,WAAWpE,YAAY3zM,aAEzG,IAAK,IAAI3sS,EAAI,EAAGA,EAAIk5f,EAAUvlB,aAAa76f,OAAQknB,IAC/C,IAAKjmB,EAAkBm/gB,EAAUvlB,aAAa3ze,GAAG+kf,cACzChrgB,EAAkBm/gB,EAAUvlB,aAAa3ze,GAAG+kf,WAAW56M,SAAU,CAErE,IAAI73S,EAAQiwf,GAAgBiL,oBAAoB0L,EAAUvlB,aAAa3ze,IAAI+tP,eACvEz7P,EAAQ6+E,IACRA,EAAc7+E,GAM1B,GADA4mgB,EAAUpT,kBAAoB1K,GAAcO,oBAAoBxqa,GAC5D+nb,EAAU9qgB,MAAQ,IAAMrU,EAAkBm/gB,EAAU/O,gBAAiB,CACrE,IAAIiD,EAAU8L,EAAU/O,eACxBh5a,EAAc,EACd,IAAK,IAAI34F,EAAI,EAAGA,EAAI40gB,EAAQzZ,aAAa76f,OAAQN,IAE7C,IAAKuB,EAAkBqzgB,EAAQzZ,aAAan7f,GAAGusgB,cAAgBhrgB,EAAkBqzgB,EAAQzZ,aAAan7f,GAAGusgB,WAAW56M,SAAU,EACtH9wT,EAAQkpgB,GAAgBiL,oBAAoBJ,EAAQzZ,aAAan7f,IAAIu1Q,gBAC7D58K,IACRA,EAAc93F,GAK1B6/gB,EAAUrT,eAAiBzK,GAAcO,oBAAoBxqa,IAGrE,IAAKp3F,EAAkBm/gB,EAAUvlB,cAC7B,IAASn7f,EAAI,EAAGA,EAAI0ghB,EAAUvlB,aAAa76f,OAAQN,IAE/C,IAAKuB,EAAkBm/gB,EAAUvlB,aAAan7f,GAAGusgB,cAAgBhrgB,EAAkBm/gB,EAAUvlB,aAAan7f,GAAGusgB,WAAW56M,SAAU,EAC1H9wT,EAAQkpgB,GAAgByK,iBAAiBkM,EAAUvlB,aAAan7f,IAAIu1Q,gBAC5D58K,IACRA,EAAc93F,GAS9B,GAHA6/gB,EAAUrT,eAAiBzK,GAAcO,oBAAoBxqa,IAGxDp3F,EAAkBm/gB,EAAUxU,cAAgB3qgB,EAAkBm/gB,EAAUxU,WAAWpE,cAAgB4Y,EAAUxU,WAAWpE,YAAY3zM,aAAe,GAAKusN,EAAU3tS,WAAa2tS,EAAUxU,WAAW/Q,aAAa76f,OAAS,EAAG,CAE9N,IAASN,EAAI,EAAGA,EAAI0ghB,EAAUvlB,aAAa76f,OAAQN,IAE/C,IAAKuB,EAAkBm/gB,EAAUvlB,aAAan7f,GAAGusgB,cAAgBhrgB,EAAkBm/gB,EAAUvlB,aAAan7f,GAAGusgB,WAAW56M,SAAU,CAC9H,IAAI9wT,GAAAA,EAAQkpgB,GAAgBiL,oBAAoB0L,EAAUvlB,aAAan7f,IAAIu1Q,gBAC/D58K,IACRA,EAAc93F,GAK1B6/gB,EAAUpT,kBAAoB1K,GAAcO,oBAAoBxqa,GAGpE,OAAO+nb,GAOX78F,EAAO3kb,UAAUwyhB,4BAA8B,SAAUlod,EAAKmod,GAC1D,GAAIpwhB,EAAkBioE,EAAI2xb,cACtB,OAAO,EAGX,IAAK,IADDt6f,EAAQ,EACHb,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IACzC,GAAIwpE,EAAI2xb,aAAa76f,OAAS,EAAG,CAC7B,IAAIisgB,EAAa/ic,EAAI2xb,aAAan7f,GAAGusgB,WACrC,GAAIA,EAAW/C,kBACS,IAAhBmoB,IAAsBpwhB,EAAkBgrgB,EAAWtsP,YACnD2iP,GAAcO,oBAAoBoJ,EAAWtsP,WAAap/Q,EAC1DA,EAAQ+hgB,GAAcO,oBAAoBoJ,EAAWtsP,WAEhC,IAAhB0xQ,IAAsBpwhB,EAAkBgrgB,EAAWpsP,eACxDyiP,GAAcO,oBAAoBoJ,EAAWpsP,cAAgBt/Q,IAC7DA,EAAQ+hgB,GAAcO,oBAAoBoJ,EAAWpsP,mBAGxD,CACD,IAAI2nP,EAAct+b,EAAI2xb,aAAan7f,GAAGksgB,WAAWpE,YAC7B,IAAhB6pB,GAAqB/uB,GAAcO,oBAAoB2E,EAAY7nP,WAAap/Q,EAChFA,EAAQ+hgB,GAAcO,oBAAoB2E,EAAY7nP,WAEjC,IAAhB0xQ,GAAqB/uB,GAAcO,oBAAoB2E,EAAY3nP,cAAgBt/Q,IACxFA,EAAQ+hgB,GAAcO,oBAAoB2E,EAAY3nP,gBAKtE,OAAOt/Q,GAUXgjb,EAAO3kb,UAAUuyhB,WAAa,SAAU5ld,EAAMu9c,EAAkBC,EAAqB/hB,GACjF,IAAIhV,EAASxuf,KAAKwuf,OAGlB,GAFAxuf,KAAKqlhB,mBAAmBt9c,EAAMymb,EAAOmsB,iBAAkB2K,EAAkBC,GACzE/2B,EAAOs/B,wBAAwB/ld,GAAM,GACJ,IAA7BA,EAAKsvb,aAAa76f,OAAc,CAChC,IAAIk1gB,EAAkB,IAAIxa,GAC1Bwa,EAAgBrf,gBAAkB,IAAI+E,GACtCsa,EAAgBzf,gBAAkB,IAAIkF,GACtCua,EAAgB5/f,MAAQ,EACxB,IAAI+ggB,EAAa,IAAIxL,QAAWnsgB,GAChCw2gB,EAAgBra,aAAa7yf,KAAKqugB,GAClC9qc,EAAKsvb,aAAa7yf,KAAKktgB,GAE3B,IAAK,IAAIx1gB,EAAI,EAAGA,EAAI6rE,EAAKsvb,aAAa76f,OAAQN,IAAK,CAC/C,IAAIgsgB,EAAQngc,EAAKsvb,aAAan7f,GAC9Bsyf,EAAO2sB,yBAAyBjT,GAAO,GACvCA,EAAM5Q,gBAAkBvvb,EACxB/nE,KAAKo7gB,YAAYlT,EAAO,GACxB1Z,EAAO2sB,yBAAyBjT,GAAO,GAE3ClogB,KAAKkohB,kBAAkBngd,GACvBymb,EAAOs/B,wBAAwB/ld,GAAM,IAOzCg4W,EAAO3kb,UAAU2yhB,mBAAqB,WAClC,GAAItwhB,EAAkBuC,KAAKwuf,OAAOg9B,eAAiB/thB,EAAkBuC,KAAKwuf,OAAOg9B,aAAal0B,iBAC1Ft3f,KAAKwuf,OAAOg9B,kBAAetwhB,MAD/B,CAIA,IAAIgtgB,EAAQlogB,KAAKwuf,OAAOg9B,aACpB3Q,EAAe3S,EAAMpL,WAAWhrf,MACpC9R,KAAKguhB,uBAAuB9lB,EAAOlogB,KAAKwuf,QAMxC,IALA,IAAIi9B,GAAsB,EAGtBviB,EAAiBhB,EAAMrB,kBACvBqU,EAAYhS,EAAeA,EAAe1sgB,OAAS,GAAGgqgB,mBACnD0U,aAAqBzU,IAAeyU,EAAUpe,WAAWhrf,QAAU+ogB,GAAc,CACpF,IAAI6Q,OAAgBxwhB,EAChBixS,EAAS+7N,EAAMrB,kBACnB6kB,EAAgBv/O,EAAOA,EAAO3vS,OAAS,GAEvCivhB,GAAsB,EACtB,IAAIlb,OAAar1gB,EAUjB,GATAixS,GAHA+7N,EAAQgT,GAGOrU,kBACXqB,aAAiBhR,GACjBqZ,EAAapkO,EAAO,GAGhB+7N,aAAiBjB,KACjBsJ,EAAapkO,EAAO,IAGxBu/O,EAAcp0B,kBAAoBiZ,EAAWjZ,iBACzCwH,GAAc/+d,MAAMwwe,EAAWvjgB,EAAG,KAAO8xf,GAAc/+d,MAAM//B,KAAKwuf,OAAOmsB,iBAAiB3tgB,EAAG,IACjGvP,EAAkB8ygB,EAAWA,YAC7B,MAEJkb,GAAsB,EACtBzrhB,KAAKguhB,uBAAuB9lB,EAAOlogB,KAAKwuf,QAExC0sB,GADAhS,EAAiBhB,EAAMrB,mBACIqC,EAAe1sgB,OAAS,GAAGgqgB,mBAEtDxmgB,KAAKwuf,OAAOgV,MAAM1U,cAClB9uf,KAAKwuf,OAAOgV,MAAM1U,aAAai9B,uBAAuB7jB,EAAOujB,GAEjEzrhB,KAAKwuf,OAAOg9B,kBAAetwhB,EAC3B,IAAIszf,EAASxuf,KAAKwuf,OAElBA,EAAOy/B,mBACPjuhB,KAAKg7gB,sBACLxsB,EAAOI,qBAMX7uE,EAAO3kb,UAAU4/gB,oBAAsB,WACnC,IAAK,IAAI9+gB,EAAI,EAAGA,EAAI8D,KAAKwuf,OAAOhie,OAAOhwB,OAAQN,IAAK,CAChD,IAAI0jgB,EAAa5/f,KAAKwuf,OAAOhie,OAAOtwB,GACpC,IAAKuB,EAAkBuC,KAAKwuf,OAAOv4a,WAAY,CAC3C,IAAIi4c,EAAYluhB,KAAKwuf,OAAOv4a,UAAUk4c,aAAavuB,GACnD,IAAKnigB,EAAkBywhB,IAAcA,EAAUt4gB,cAAclG,MAAM,YAAa,CAC5E,IAAIymB,EAAcype,EAAW2S,eAAe9iI,SAC5C,IAAKhyY,EAAkB04B,GAAc,CACjCA,EAAYnH,KAAOhvB,KAAKwuf,OAAOzmQ,MAAMvrP,OAAO0Q,WAC5C,IAAI+pf,EAAY2I,EAAW31c,KAAKgtc,UAChC,IAAKx5f,EAAkBw5f,EAAU6F,cAAgBr/f,EAAkBw5f,EAAU6F,WAAWvvV,MAAO,CAC3F,IAAIk8H,EAAYwtN,EAAUI,aAAa94f,QAAQqhgB,EAAW31c,MACtD8zK,EAAe6hS,EAAW31c,KAAK7vC,SAAS7b,QAAQ43B,GACpDn2B,KAAKmshB,kBAAkBl1B,EAAWxtN,EAAW1rE,SAOrEgiN,EAAO3kb,UAAU4yhB,uBAAyB,SAAUzC,EAAU/8B,GAC1D,IACI0Z,EAAQqjB,EAaZvrhB,KAAKouhB,kBAAkBlmB,EAAO1Z,GAE1Bxuf,KAAKwuf,OAAOgV,MAAM1U,cAClB9uf,KAAKwuf,OAAOgV,MAAM1U,aAAau/B,wBAAwBnmB,IAI/DnoF,EAAO3kb,UAAUgzhB,kBAAoB,SAAUlmB,EAAO1Z,GAC9C0Z,aAAiBhR,GACjBl3f,KAAKsuhB,oBAAoBpmB,EAAO1Z,GAE3B0Z,aAAiBjB,IACtBjngB,KAAKuuhB,qBAAqBrmB,EAAO1Z,IAGzCzuE,EAAO3kb,UAAUkzhB,oBAAsB,SAAUr3B,EAAWzI,GAKxD,IAAK,IAJDggC,EAAcxuhB,KAAKyuhB,6BAA6Bx3B,EAAW,GAC3D2wB,EAAiB4G,EAAY1xB,WAC7Bhrf,EAAQ08gB,EAAY18gB,MACpBg0gB,OAAa5qhB,EACRgB,EAAI,EAAGA,EAAI+6f,EAAU4P,kBAAkBrqgB,OAAQN,IAAK,CACzD,IAAI2pgB,EAAS5O,EAAU4P,kBAAkB3qgB,GACzC,IAAKuB,EAAkBqohB,GAAa,CAChC,IAAI3d,IAAc2d,EAAWpsY,WAAYosY,EAAWpsY,UAAUgvX,oBAE9D,GADA1ogB,KAAK0uhB,sBAAsB7oB,EAAQrX,EAAQs3B,EAAY3d,IAClD1qgB,EAAkBoogB,EAAOxO,eAAgD,IAA/BwO,EAAOxO,aAAa76f,UAAkB2rgB,EAAa,CAC9FjsgB,IACA,SAEJ4phB,OAAa5qhB,EACT0shB,IAAmB/hB,EAAOvO,kBAC1BswB,EAAiB/hB,EAAOvO,gBACpB6Q,GACA3Z,EAAOmgC,yBAAyB9oB,IAI5C,GAAI7lgB,KAAK4uhB,kBAAkB/oB,EAAQrX,IAY/B,GAVAs3B,EAAajgB,EACbA,EAAO74f,EAAIwhf,EAAOmsB,iBAAiB3tgB,EACnCwhf,EAAOmxB,WAAWnxB,EAAOmsB,iBAAiB3tgB,EAAI64f,EAAO9vf,QAEhDtY,EAAkBmqhB,IAAmBA,IAAmB/hB,EAAOvO,kBAChExlf,IACK81gB,EAAeluY,UAAUgvX,qBAC1B1ogB,KAAK4rhB,sBAAsB/lB,EAAQ+hB,EAAgB91gB,GAAO,IAG9D+zf,EAAO6C,oBAAqB,CAC5B,IAAImmB,EAAiB7uhB,KAAK8uhB,0BAA0BlH,EAAgB5nhB,KAAKwuf,QACzEqgC,EAAiB7uhB,KAAKqihB,qBAAqBxc,GAC3CrX,EAAO8zB,iBAAiBuM,EAAe93B,cAAe83B,EAAethX,WAGxE,CACD,IAAIwhX,EAAgBlpB,EAAOQ,uBACvB8B,GAAc,EACd4mB,aAAyB73B,IAAmB63B,EAAcrmB,sBAC1DP,GAAc,GAElB,IAAI6mB,EAAsBhvhB,KAAKgngB,YAAYnB,EAAQrX,EAAQo5B,EAAgB91gB,EAAQ,EAAGq2f,GACtF2d,OAAa5qhB,EACT0shB,IAAmB/hB,EAAOvO,kBAC1BswB,EAAiB/hB,EAAOvO,gBACxBp7f,KAEJ4V,EAAQ81gB,EAAevwB,aAAa94f,QAAQsngB,GACxCmpB,IACApH,EAAiB3wB,EAAU4P,kBAAkB3qgB,EAAI,GAAGo7f,oBAQpEv3E,EAAO3kb,UAAU6zhB,iBAAmB,SAAU7pd,EAAOopb,GACjD,IAAIjiV,GAAUnnG,GACdplE,KAAKgmhB,eAAehmhB,KAAKwuf,OAAOmsB,iBAAkBpuW,GAClDvsK,KAAKwuf,OAAO++B,0BAA0Bnod,GAAO,GAE7C,IADA,IAAIM,EAAMN,EAAMiyb,aAAa,GACtB3xb,GAEHA,GADAA,EAAM1lE,KAAKkvhB,eAAe3iX,EAAQ7mG,IACxB4rc,QAGd,OADAtxgB,KAAK2nhB,oBAAoBp7W,KAAYnnG,GAC9BmnG,EAAOA,EAAO/vK,OAAS,IAKlCujb,EAAO3kb,UAAU8zhB,eAAiB,SAAU3iX,EAAQ7mG,GAChD,IAAI8ob,EAASxuf,KAAKwuf,OACd5hR,GAAQlnK,GACC1lE,KAAKythB,kBAAkBj/B,EAAOmsB,iBAAkB/tS,GAC7D4hR,EAAOk/B,uBAAuBhod,GAAK,GACnC,IAAK,IAAIxpE,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IAAK,CAC9C,IAAI6rE,EAAOrC,EAAI2xb,aAAan7f,GAE5B8D,KAAKmvhB,gBAAgBpnd,EAAM/nE,KAAK4thB,4BAA4Blod,EAAK,GAAKA,EAAI6jc,eAAgBvpgB,KAAK4thB,4BAA4Blod,EAAK,GAAKA,EAAI8jc,mBAI7I,OAFAhb,EAAOk/B,uBAAuBhod,GAAK,GACnC1lE,KAAKqnhB,qBAAqB96W,EAAQqgE,EAAMlnK,GACjCknK,EAAKA,EAAKpwO,OAAS,IAK9Bujb,EAAO3kb,UAAU+zhB,gBAAkB,SAAUpnd,EAAMu9c,EAAkBC,GACjE,IAAI/2B,EAASxuf,KAAKwuf,OAClBxuf,KAAKqlhB,mBAAmBt9c,EAAMymb,EAAOmsB,iBAAkB2K,EAAkBC,GACzE/2B,EAAOs/B,wBAAwB/ld,GAAM,GACrC,IAAK,IAAI7rE,EAAI,EAAGA,EAAI6rE,EAAKsvb,aAAa76f,OAAQN,IAAK,CAC/C,IAAIgsgB,EAAQngc,EAAKsvb,aAAan7f,GAC9Bsyf,EAAO2sB,yBAAyBjT,GAAO,GACnCA,aAAiBhR,GACjBl3f,KAAKovhB,qBAAqBlnB,GAG1BlogB,KAAKivhB,iBAAiB/mB,EAAO1Z,GAEjCA,EAAO2sB,yBAAyBjT,GAAO,GAE3ClogB,KAAKkohB,kBAAkBngd,GACvBymb,EAAOs/B,wBAAwB/ld,GAAM,IAKzCg4W,EAAO3kb,UAAUg0hB,qBAAuB,SAAUn4B,GAC9Cj3f,KAAKi9gB,mBAAmBj9gB,KAAKwuf,OAAOmsB,iBAAkB1jB,GACtDj3f,KAAKwuf,OAAOmxB,WAAW3/gB,KAAKwuf,OAAOmsB,iBAAiB3tgB,EAAIiqf,EAAUlhf,QAClE/V,KAAKw9gB,mBAAmBx9gB,KAAKwuf,OAAQyI,IAEzCl3E,EAAO3kb,UAAUmzhB,qBAAuB,SAAUnpd,EAAOopb,GACrD,IAAIplb,EAAUppE,KAAKyuhB,6BAA6Brpd,EAAO,GACnDwid,EAAiBx+c,EAAQ0zb,WACzBhrf,EAAQs3D,EAAQt3D,MAChBq2f,EAAcyf,EAAeluY,UAAUA,UAAUgvX,oBACjDkf,IAAmBxid,EAAMkyb,kBACpB6Q,EAID3Z,EAAO8zB,iBAAiBl9c,EAAM03b,WAAW/F,cAAe3xb,EAAM03b,WAAWvvV,MAHzEvtK,KAAK4rhB,sBAAsBxmd,EAAOwid,EAAgB91gB,EAAQ,GAAG,IAMjEszD,EAAMond,mBACNpnd,EAAMkyb,gBAAgBvhf,QAAUqvD,EAAMrvD,QAE1CqvD,EAAMp4D,EAAIhN,KAAKwuf,OAAOmsB,iBAAiB3tgB,EACvChN,KAAKqvhB,4BAA4Bjqd,GAAO,GACxC,IACIkqd,EAAgBlqd,EAAM2hc,cAAc/mgB,KAAKwuf,QAC7Cxuf,KAAKwuf,OAAOlhc,OAAOm9d,4BAA4B6E,EAActihB,EAAGsihB,GAChEtvhB,KAAK67gB,iBAAiByT,GAAe,GAAM,GAC3CtvhB,KAAKivhB,iBAAiBK,EAAetvhB,KAAKwuf,QAC1Cxuf,KAAKqvhB,4BAA4Bjqd,GAAO,IAE5C26W,EAAO3kb,UAAUi0hB,4BAA8B,SAAUjqd,EAAOmqd,GAE5D,IAAK,IAAIrzhB,EAAI,EAAGA,EAAIkpE,EAAMyhc,kBAAkBrqgB,OAAQN,IAGhD,IAAK,IAFDszhB,EAAcpqd,EAAMyhc,kBAAkB3qgB,GAEjCwnB,EAAI,EAAGA,EAAI8rgB,EAAYn4B,aAAa76f,OAAQknB,IAGjD,IAAK,IAFDk5f,EAAY4S,EAAYn4B,aAAa3ze,GAEhC4C,EAAI,EAAGA,EAAIs2f,EAAUvlB,aAAa76f,OAAQ8pB,IAAK,CACpD,IAAIwnf,EAAa8O,EAAUvlB,aAAa/we,GAExCtmB,KAAKwuf,OAAOlhc,OAAOu7d,2BAA2B/a,EAAYyhB,GAAa,KAMvFxvG,EAAO3kb,UAAU4rgB,YAAc,SAAU0K,EAAiBljB,EAAQihC,EAAoB39gB,EAAOq2f,GACzF,IAAI92P,EAAYqgQ,EAAgBra,aAAa,GACzCq4B,EAAmB1vhB,KAAK2vhB,oBAAoBt+Q,EAAWm9O,GACvDohC,EAAgBle,EAAgB7K,kBAChCgoB,EAAiBnd,EAAgBpa,gBACrC,GAAI9I,EAAOmsB,iBAAiB5kgB,QAAU25gB,IAAqBvnB,EAAa,CACpE,IAAIe,OAAiBhugB,EACjB20hB,EAAcD,EAAcrxhB,QAAQmzgB,GACpCme,EAAeD,EAAcpzhB,OAAS,EAEtCqyhB,GADA3lB,EAAiB0mB,EAAcC,EAAc,IACbv4B,kBAGhC4R,EAAiB,IAAIhS,IACNplf,MAAQ4/f,EAAgB5/f,MACvCo3f,EAAe7W,gBAAkBqf,EAAgBrf,gBACjD6W,EAAejX,gBAAkByf,EAAgBzf,gBACjDiX,EAAelzf,MAAQ07f,EAAgB17f,MACvCkzf,EAAen8f,EAAI2kgB,EAAgB3kgB,EACnCm8f,EAAel8f,EAAI0kgB,EAAgB1kgB,EACnC4ihB,EAAcprhB,KAAK0kgB,IAEnBumB,IAAuB/d,EAAgBpa,iBACvCt3f,KAAK4rhB,sBAAsBla,EAAiB+d,EAAoB39gB,GAAO,GAE3E,IAAK,IAAI5V,EAAIw1gB,EAAgBra,aAAa76f,OAAS,EAAGN,EAAI,IAClD8D,KAAK4uhB,kBAAkBld,EAAiBljB,GADatyf,IAAK,CAK1D,IAAI+tD,EAAOynd,EAAgBra,aAAan7f,GAExC8D,KAAK8vhB,8BAA8B7le,EAAMi/c,EAAgB,GAGjE,GAAIzrgB,EAAkByrgB,EAAe5R,kBAAoB4R,EAAe7R,aAAa76f,OAAS,EAAG,CAC7F,IAAIwQ,EAAIwhf,EAAOmsB,iBAAiB3tgB,EAE5BovgB,EAAa,IAAIrmf,GAAKy4d,EAAO4tB,WAAWrvgB,EAAGyhf,EAAO4tB,WAAWpvgB,EAAGwhf,EAAO4tB,WAAWpmgB,MAAOw4e,EAAO4tB,WAAWrmgB,QAC3Gg6gB,EAAa,IAAIh6f,GAAKy4d,EAAOmsB,iBAAiB5tgB,EAAGyhf,EAAOmsB,iBAAiB3tgB,EAAGwhf,EAAOmsB,iBAAiB3kgB,MAAOw4e,EAAOmsB,iBAAiB5kgB,QAOvI,IALA84gB,EAAiB7uhB,KAAKqihB,qBAAqB3Q,IAE5Bra,aAAa1ue,OAAO,EAAG,EAAGugf,GACzC2lB,EAAe94gB,QAAUmzf,EAAenzf,OACxCmzf,EAAe5R,gBAAkBu3B,EACU,IAAvCA,EAAex3B,aAAa76f,QAAgBqyhB,EAAe7xgB,sBAAsBk6e,IACjF23B,EAAe7xgB,WAAWo2B,OAAOs+d,GAGjC,OAFAA,EAAgB3kgB,EAAI2kgB,EAAgB3kgB,EACpC2kgB,EAAgB1kgB,EAAIA,GACb,EAIPwhf,EAAO4tB,WAAaA,EACpB5tB,EAAOmsB,iBAAmBoV,QAKlClB,EAAiB7uhB,KAAK8uhB,0BAA0BW,EAAoBzvhB,KAAKwuf,QACrEkjB,EAAgBpa,kBAAoBu3B,IACpCA,EAAiB7uhB,KAAKqihB,qBAAqB3Q,GAC3C1xgB,KAAK4rhB,sBAAsBla,EAAiBmd,EAAgB,GAAG,IAWvE,OARIY,IAAuB/d,EAAgBpa,iBACvCoa,EAAgB1kgB,EAAIwhf,EAAOmsB,iBAAiB3tgB,EAC5Cwhf,EAAOmxB,WAAWnxB,EAAOmsB,iBAAiB3tgB,EAAI0kgB,EAAgB37f,SAI9Dy4e,EAAO8zB,iBAAiBuM,EAAe93B,cAAe83B,EAAethX,OAElE,GAEXwyQ,EAAO3kb,UAAUu0hB,oBAAsB,SAAU9c,EAAYrkB,GACzD,IAAIz4e,EAAS,EAEb,GAAmC,IAA/B88f,EAAWz4f,SAAS5d,QAAiD,IAA/Bq2gB,EAAWz4f,SAAS5d,QAAgBq2gB,EAAWz4f,SAAS,aAAc+uf,IAAuD,IAA/B0J,EAAWz4f,SAAS5d,QAAgBq2gB,EAAWz4f,SAAS,aAAc+uf,IAAsB0J,EAAWz4f,SAAS,aAAc+uf,GAAsB,CAKxR,GAFApzf,EAASy4e,EAAOv4a,UAAUspc,qBAAqB1M,EAAW5b,UAF1C,EACG,GAC2Elhf,OAC9FA,GAHgB,EAIZ88f,EAAWz4f,SAAS5d,OAAS,EAAG,CAE5BuZ,GADA/U,EAAU6xgB,EAAWz4f,SAAS,IACb4kB,OAAOtyB,IAAM1L,EAAQ+U,SACtCA,EAAS/U,EAAQg+B,OAAOtyB,IAAM1L,EAAQ+U,cAK9C,IAAK,IAAI7Z,EAAI,EAAGA,EAAI22gB,EAAWz4f,SAAS5d,OAAQN,IAAK,CACjD,IAAI8E,EACA+U,GADA/U,EAAU6xgB,EAAWz4f,SAASle,IACb8iC,OAAOtyB,IAAM1L,EAAQ+U,SACtCA,EAAS/U,EAAQg+B,OAAOtyB,IAAM1L,EAAQ+U,QAIlD,OAAOA,GAEXgqa,EAAO3kb,UAAU0zhB,0BAA4B,SAAUhyB,EAAYtO,GAC/D,IAAIqgC,OAAiB3zhB,EACjBsyK,EAAY,EAChBA,EAAYghV,EAAOzmQ,MAAMxpP,QAAQu+f,EAAWvvV,MAC5C,IAAIA,OAAOryK,EACP4W,OAAQ5W,EAEZ,GADA4W,EAAQgrf,EAAWhrf,MACf07J,IAAcghV,EAAOzmQ,MAAMvrP,OAAS,GACjCgyf,EAAOzmQ,MAAMv6E,EAAY,GAAGqtW,eAAiB/ogB,EAAO,CACvD,IAAI45gB,EAAgB,IAAI50B,GACxB40B,EAAc30B,cAAgB+F,EAAW/F,cACzC20B,EAAc55gB,MAAQgrf,EAAWhrf,MACjCy7J,EAAOihV,EAAOisB,cAAciR,GACxBl9B,EAAOzmQ,MAAMv6E,EAAY,GAAGqtW,eAAiB/ogB,GAC7C08e,EAAOssB,WAAWttW,EAAY,EAAGD,GAErCshX,EAAiBthX,EAAKq4V,YAAY,QAIlCipB,GADAthX,EAAOihV,EAAOzmQ,MAAMv6E,EAAY,IACVo4V,YAAY,GAEtC,OAAOipB,GAEX9uG,EAAO3kb,UAAUwzhB,kBAAoB,SAAUld,EAAiBljB,GAC5D,IAAIwhC,EAAWte,EAAgBra,aAAaqa,EAAgBra,aAAa76f,OAAS,GAC9EuZ,EAAS27f,EAAgB37f,OACzB25gB,EAAmB1vhB,KAAK2vhB,oBAAoBK,EAAUxhC,GAI1D,OAHIwhC,EAASj6gB,OAAS25gB,IAClB35gB,GAAUi6gB,EAASj6gB,OAAS25gB,GAEzBlhC,EAAOmsB,iBAAiB5kgB,QAAUA,GAG7Cgqa,EAAO3kb,UAAUszhB,sBAAwB,SAAUhd,EAAiBljB,EAAQqf,EAAgB1F,GACxF,IAAK,IAAIjsgB,EAAI,EAAGA,EAAIw1gB,EAAgBra,aAAa76f,OAAQN,IAAK,CAC1D,IAAI+tD,EAAOynd,EAAgBra,aAAan7f,GACpCwzhB,EAAmB1vhB,KAAK2vhB,oBAAoB1le,EAAMukc,GACtD,KAAIA,EAAOmsB,iBAAiB5kgB,QAAU25gB,IAAqBvnB,EAStD,CACD,IAAIrL,EAAa+Q,EAAevW,gBAC5Bu3B,EAAiB7uhB,KAAK8uhB,0BAA0BhyB,EAAYtO,GAC5DkjB,EAAgBpa,kBAAoBu3B,IACpCA,EAAiB7uhB,KAAKqihB,qBAAqB3Q,IAE3C5U,IAAe+xB,GACf7uhB,KAAK4rhB,sBAAsBla,EAAiBmd,EAAgB,GAAG,GAGnErgC,EAAO8zB,iBAAiBuM,EAAe93B,cAAe83B,EAAethX,MACrE,MAfA,GAHAvtK,KAAK8vhB,8BAA8B7le,EAAM4jd,EAAgBA,EAAexW,aAAa76f,QACrFN,IACAsyf,EAAOmxB,WAAWnxB,EAAOmsB,iBAAiB3tgB,EAAIi9C,EAAKl0C,QAC/CtY,EAAkBi0gB,EAAgBra,cAClC,QAkBhBt3E,EAAO3kb,UAAU00hB,8BAAgC,SAAUjd,EAAYod,EAAoBn+gB,GAClFrU,EAAkBo1gB,EAAW5b,aAC9B4b,EAAW5b,UAAUI,aAAa1ue,OAAOkqf,EAAW5b,UAAUI,aAAa94f,QAAQs0gB,GAAa,GAChGA,EAAW5b,UAAUlhf,QAAU88f,EAAW98f,OACrCtY,EAAkBo1gB,EAAW5b,UAAUK,mBACxCub,EAAW5b,UAAUK,gBAAgBvhf,QAAU88f,EAAW98f,SAG1DtY,EAAkBo1gB,EAAW5b,UAAUI,eAA8D,IAA7Cwb,EAAW5b,UAAUI,aAAa76f,SAC1Fq2gB,EAAW5b,UAAUmQ,gBAAgBpngB,KAAKwuf,SAGlDyhC,EAAmB54B,aAAa1ue,OAAO7W,EAAO,EAAG+ggB,GACjDA,EAAW5b,UAAYg5B,EACvBA,EAAmBl6gB,QAAU88f,EAAW98f,OACnCtY,EAAkBwyhB,EAAmB34B,mBACtC24B,EAAmB34B,gBAAgBvhf,QAAU88f,EAAW98f,SAGhEgqa,EAAO3kb,UAAUiyhB,iBAAmB,SAAU9B,GAE1C,IADA,IAAIrjB,EAAQqjB,EACLrjB,EAAMqI,sBAAsB9J,IAC/ByB,EAAQA,EAAMqI,WACdvwgB,KAAKguhB,uBAAuB9lB,EAAOlogB,KAAKwuf,SAMhDzuE,EAAO3kb,UAAUwwhB,sBAAwB,SAAU/lB,EAAQ/I,EAAYhrf,EAAOo+gB,GAC1E,IAAKzyhB,EAAkBoogB,EAAOvO,mBAC1BuO,EAAOvO,gBAAgBD,aAAa1ue,OAAOk9e,EAAOvO,gBAAgBD,aAAa94f,QAAQsngB,GAAS,GAChGA,EAAOvO,gBAAgBvhf,QAAU+mf,EAAW/mf,QACvCtY,EAAkBoogB,EAAOvO,gBAAgBD,eAAgE,IAA/CwO,EAAOvO,gBAAgBD,aAAa76f,SAC5FqpgB,EAAOvO,2BAA2BR,IAAc+O,EAAOvO,kBAAoBwF,GAAcozB,GAAkB,CAC9G,IAAI3iX,EAAOs4V,EAAOvO,gBAAgB/pV,KAC9BvtK,KAAKwuf,OAAOzmQ,MAAM/nP,KAAKwuf,OAAOzmQ,MAAMvrP,OAAS,KAAO+wK,IACR,IAA5CvtK,KAAKwuf,OAAOsD,aAAavzf,QAAQgvK,IACjCvtK,KAAKwuf,OAAO2hC,kBAEZ1yhB,EAAkB8vK,EAAKmuJ,WAAanuJ,EAAKmuJ,SAASkqM,YAAY,GAAG9zf,QAAU+zf,EAAOvO,gBAAgBxlf,QAClG+zf,EAAOvO,gBAAgB8P,gBAAgBpngB,KAAKwuf,QAIxDsO,EAAWzF,aAAa1ue,OAAO7W,EAAO,EAAG+zf,GACzC/I,EAAW/mf,QAAU+mf,EAAW/mf,OAChC8vf,EAAOvO,gBAAkBwF,GAE7B/8E,EAAO3kb,UAAUqzhB,6BAA+B,SAAUvmB,EAAOp2f,GAC7DA,EAAQ,EACR,IAAI81gB,OAAiB1shB,EACjB6zhB,EAAgB7mB,EAAM7B,uBAK1B,OAJAuhB,EAAkBmH,GAAiBA,EAAcz3B,gBAAgBlkd,OAAO80d,EAAM5Q,iBAC1Ey3B,EAAcz3B,gBAAkB4Q,EAAM5Q,gBAC1Cxlf,EAAQi9gB,GAAiBA,EAAcz3B,gBAAgBlkd,OAAO80d,EAAM5Q,iBAChEswB,EAAevwB,aAAa94f,QAAQwwhB,GAAiB7mB,EAAM5Q,gBAAgBD,aAAa94f,QAAQ2pgB,IAC3FpL,WAAY8qB,EAAgB91gB,MAAOA,IAKhDiua,EAAO3kb,UAAUinhB,qBAAuB,SAAUna,GAC9C,IAAIn8f,EAAOm8f,EAAMpL,WAEbtvV,EADOzhK,EAAKwhK,KACKz7J,MAAQ,EACzB4pT,OAAWxgU,EACXknhB,OAAWlnhB,EACX4/gB,GAAa,EAoBjB,IAnBI96gB,KAAKwuf,OAAOzmQ,MAAMvrP,OAASgxK,IAES,KADpCkuJ,EAAW17T,KAAKwuf,OAAOzmQ,MAAMv6E,IAChBo4V,YAAYppgB,QAAiBuP,EAAKqnC,OAAOsoR,EAASkqM,YAAY,KAKvEwc,EAAW1mN,EAASkqM,YAAY,GAChC5lgB,KAAKwuf,OAAO8zB,iBAAiBF,EAASrrB,cAAeqrB,EAAS70W,QAL9DmuJ,OAAWxgU,EACX4/gB,GAAa,IAOjBr9gB,EAAkBi+T,KAClB0mN,EAAWpihB,KAAKowhB,gBAAgBrkhB,GAChC2vT,EAAW17T,KAAKwuf,OAAOisB,cAAc2H,EAAU50W,GAC3CstW,GACA96gB,KAAKwuf,OAAOssB,WAAWttW,EAAWkuJ,MAIvC,CACC,IAAIpgE,EAAYvvP,EAAK2tI,UACrB,GAAIwuX,IAAU5sQ,EACV,MAEJvvP,EAAKsrf,aAAaxxV,MAClBu8W,EAAS/qB,aAAa1ue,OAAO,EAAG,EAAG2yO,GACnCA,EAAUg8P,gBAAkB8qB,EAC5BA,EAASrsgB,QAAUulP,EAAUvlP,OAEjC,OAAOqsgB,GAEXriG,EAAO3kb,UAAUg1hB,gBAAkB,SAAUrkhB,GACzC,IAAIskhB,EAAUrwhB,KAAK06gB,cAAc16gB,KAAKwuf,OAAOmsB,kBAG7C,OAFA0V,EAAQt5B,cAAgBhrf,EAAKgrf,cAC7Bs5B,EAAQv+gB,MAAQ/F,EAAK+F,MACdu+gB,GAUXtwG,EAAO3kb,UAAUmxhB,aAAe,SAAUt1B,EAAWxtN,GAC7CzpS,KAAKwuf,OAAOgV,MAAM3U,kBAAoB7uf,KAAKwuf,OAAOgV,MAAM1U,cACxD9uf,KAAKwuf,OAAOgV,MAAM1U,aAAag9B,qBAAqB70B,GAExD,IAAI4b,EAOAyd,GALAzd,EADA5b,EAAUhF,gBAAgB+F,aAA+D,IAAjDf,EAAUhF,gBAAgB+F,WAAWqC,OAChEpD,EAAU4P,kBAAkB,GAAG7pf,WAG/Bi6e,EAAUI,aAAa5tN,IAEVwoO,aAC1Bx0gB,EAAkB6yhB,KAClBA,EAAezd,GAEIyd,EAAar5B,UAApC,IACI6F,EAAa7F,EAAUK,gBAU3B,GATAwF,EAAW/mf,QAAUkhf,EAAUlhf,OAC3B/V,KAAKwuf,OAAOgV,MAAMmf,uBAAyB1rB,EAAUu1B,iBAErDxshB,KAAKwuf,OAAOi+B,2BAA2Bx1B,EAAU6F,WAAW/F,cAAe/2f,KAAKwuf,OAAOk+B,gBAAgBz1B,GAAY6F,EAAWvvV,MAG9HvtK,KAAKwuf,OAAO8zB,iBAAiBxlB,EAAW/F,cAAe+F,EAAWvvV,MAEtEvtK,KAAKwuf,OAAO2sB,yBAAyBlkB,GAAW,GAC5Cq5B,EAAar5B,UAAUr/Q,UACvB53O,KAAKwuf,OAAOmxB,WAAW1oB,EAAUjqf,GACjChN,KAAK+8gB,gBAAgB9lB,EAAW,OAE/B,CAGD,GAFAj3f,KAAKgshB,wBAAwBsE,EAAar5B,UAAWq5B,EAAc,GACnEtwhB,KAAKq9gB,gBAAgBiT,EAAar5B,WAC9Bq5B,EAAaze,gBAAkBp0gB,EAAkBw5f,EAAUhF,iBAAkB,CAC7E,IAAIrjP,GAAmBkwP,GAAcO,oBAAoBpI,EAAUhF,gBAAgBrjP,iBACnF5uQ,KAAKwuf,OAAO+uB,kBAAkB3uQ,GAElC,GAEIqoP,GADAq5B,EAAetwhB,KAAK+wQ,WAAWu/Q,EAAc,IACpBr5B,UACzBq5B,EAAeA,EAAa1d,eACvB0d,GACTtwhB,KAAKw9gB,mBAAmBx9gB,KAAKwuf,OAAQyI,GACrCj3f,KAAKwuf,OAAO2sB,yBAAyBlkB,GAAW,GAEpDj3f,KAAKsrhB,qBAAqBr0B,EAAWj3f,KAAKwuf,SAEvCzuE,KClpJPwwG,GAA0B,WAC1B,SAASA,EAAS/hC,GACdxuf,KAAK+4f,YAAa,EAClB/4f,KAAKsoc,SAAW,EAChBtoc,KAAKwoc,QAAU,EACfxoc,KAAKu6gB,aAAc,EACnBv6gB,KAAKwuf,OAASA,EA26BlB,OAz6BAlwf,OAAOuJ,eAAe0ohB,EAASn1hB,UAAW,cAKtCsM,IAAK,WACD,OAAI1H,KAAK+4f,YACDt7f,EAAkBuC,KAAKwwhB,gBACvBxwhB,KAAKwwhB,aAAehwhB,SAASW,cAAc,UAC3CnB,KAAKwwhB,aAAal9b,WAAW,MAAMO,QAEhC7zF,KAAKwwhB,cAET/yhB,EAAkBuC,KAAKwuf,aAAUtzf,EAAY8E,KAAKwuf,OAAOiiC,iBAEpE9ohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0ohB,EAASn1hB,UAAW,mBAItCsM,IAAK,WACD,OAAOjK,EAAkBuC,KAAKwuf,aAAUtzf,EAAY8E,KAAKwuf,OAAOkiC,iBAEpE/ohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0ohB,EAASn1hB,UAAW,eAItCsM,IAAK,WACD,OAAO1H,KAAKk5f,WAAW5la,WAAW,OAEtC3rF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0ohB,EAASn1hB,UAAW,oBAItCsM,IAAK,WACD,OAAO1H,KAAK0whB,gBAAgBp9b,WAAW,OAE3C3rF,YAAY,EACZC,cAAc,IAMlB2ohB,EAASn1hB,UAAUu1hB,SAAW,SAAUt6f,GACpC,OAAIA,EAAM75B,OAAS,GACE,MAAb65B,EAAM,IACFA,EAAM75B,OAAS,EACR65B,EAAMQ,OAAO,EAAG,GAI5BR,GAWXk6f,EAASn1hB,UAAU49f,cAAgB,SAAUzrV,EAAM/gK,EAAME,EAAKsJ,EAAOD,GACjE,IAAItY,EAAkBuC,KAAKk5f,cAAez7f,EAAkB8vK,GAA5D,CAGAvtK,KAAK4whB,YAAYr8b,UAAYv0F,KAAK2whB,SAAS3whB,KAAKwuf,OAAOpgc,iBACvDpuD,KAAK4whB,YAAY98b,YACjB9zF,KAAK4whB,YAAYp8b,SAAShoF,EAAME,EAAKsJ,EAAOD,GAC5C/V,KAAK4whB,YAAYl8b,YACjB10F,KAAK4whB,YAAYj9b,YAAc3zF,KAAKwuf,OAAOgV,MAAMrhB,YACjDnif,KAAK4whB,YAAYlyE,WAAWlyc,EAAME,EAAKsJ,EAAOD,GAC9C/V,KAAKsoc,SAAW97b,EAChBxM,KAAKwoc,QAAU97b,EACX1M,KAAK+4f,WACL/4f,KAAK6whB,YAAYtjX,IAGjBvtK,KAAK4whB,YAAY98b,YACjB9zF,KAAK4whB,YAAY/8b,OACjB7zF,KAAK4whB,YAAY19f,KAAK1mB,EAAME,EAAKsJ,EAAOD,GACxC/V,KAAK4whB,YAAYniR,QAEjBlhG,EAAKw6V,cACL/ngB,KAAK8whB,gBAAgBvjX,EAAMA,EAAKw6V,aAAc/xf,GAAO,GAErDu3J,EAAKy6V,cACLhogB,KAAK8whB,gBAAgBvjX,EAAMA,EAAKy6V,aAAchyf,GAAO,GAEzD,IAAK,IAAI9Z,EAAI,EAAGA,EAAIqxK,EAAKq4V,YAAYppgB,OAAQN,IACzC8D,KAAKoyG,OAAOm7D,EAAMA,EAAKq4V,YAAY1pgB,IAEnC8D,KAAKwuf,OAAOgV,MAAMmf,wBAA0B3ihB,KAAK+4f,YACjD/4f,KAAK+whB,sBAAsBxjX,EAAMvtK,KAAKsoc,SAAUtoc,KAAKwoc,QAASj7R,EAAKw6V,cAEvE/ngB,KAAKsoc,SAAW,EAChBtoc,KAAKwoc,QAAU,EACfxoc,KAAK4whB,YAAY38b,YAMrBs8b,EAASn1hB,UAAUy1hB,YAAc,SAAUtjX,GACvCvtK,KAAK4whB,YAAYn4E,UAAU,EAAG,EAAGz4c,KAAKk5f,WAAWljf,MAAOhW,KAAKk5f,WAAWnjf,QACxE/V,KAAKgxhB,iBAAiBv4E,UAAU,EAAG,EAAGz4c,KAAK0whB,gBAAgB16gB,MAAOhW,KAAK0whB,gBAAgB36gB,QACvF/V,KAAK4whB,YAAY38b,UACjBj0F,KAAKgxhB,iBAAiB/8b,UACtB,IAAIj+E,EAAQu3J,EAAKurV,kBAAkB9if,MAC/BD,EAASw3J,EAAKurV,kBAAkB/if,OAChCk7gB,EAAM5khB,KAAKC,IAAI,EAAG1Q,OAAOs1hB,kBAAoB,GAC7ClxhB,KAAKk5f,WAAWljf,QAAUA,EAAQi7gB,GAAOjxhB,KAAKk5f,WAAWnjf,SAAWA,EAASk7gB,IAC7EjxhB,KAAKk5f,WAAWnjf,OAASA,EAASk7gB,EAClCjxhB,KAAKk5f,WAAWljf,MAAQA,EAAQi7gB,EAChCjxhB,KAAKk5f,WAAWx0f,MAAMqR,OAASA,EAAS,KACxC/V,KAAKk5f,WAAWx0f,MAAMsR,MAAQA,EAAQ,KACtChW,KAAK4whB,YAAYv8b,YAAc,EAC/Br0F,KAAK4whB,YAAYxpe,MAAM6pe,EAAKA,KAQpCV,EAASn1hB,UAAU01hB,gBAAkB,SAAUvjX,EAAMs4V,EAAQ7vf,EAAO0W,GAChE1sB,KAAK4whB,YAAYv8b,YAAcr0F,KAAKwuf,OAAOgV,MAAMmf,sBAAwB,EAAI,IAC7E,IAAIwO,GAAS,EACb,GAAIzkgB,EAAU,CACV,IAAIyvP,EAAY2iP,GAAcO,oBAAoB9xV,EAAKq4V,YAAY,GAAG7O,cAAc56O,WAChFi1Q,EAAe/khB,KAAKC,IAAKu5f,EAAO74f,EAAI64f,EAAO9vf,OAASomQ,GACpDk1Q,EAAqB9jX,EAAKurV,kBAAkB/if,OAAS,IAAM,GAC3Dq7gB,EAAeC,IACfF,GAAS,EACTnxhB,KAAK4whB,YAAY98b,YACjB9zF,KAAK4whB,YAAY/8b,OACjB7zF,KAAK4whB,YAAY19f,KAAKlzB,KAAKsoc,SAAUtoc,KAAKwoc,QAASxyb,EAAOhW,KAAKsxhB,eAAeD,IAC9ErxhB,KAAK4whB,YAAYniR,QAGzB,IAAK,IAAIvyQ,EAAI,EAAGA,EAAI2pgB,EAAOxO,aAAa76f,OAAQN,IAAK,CACjD,IAAIgsgB,EAAQrC,EAAOxO,aAAan7f,GAChC8D,KAAKuxhB,aAAahkX,EAAM26V,GAExBipB,GACAnxhB,KAAK4whB,YAAY38b,UAErBj0F,KAAK4whB,YAAYv8b,YAAcr0F,KAAKwuf,OAAOgV,MAAMmf,sBAAwB,IAAO,GAEpF4N,EAASn1hB,UAAU21hB,sBAAwB,SAAUxjX,EAAM/gK,EAAME,EAAKm5f,GAElE,IAAI1pP,EAAY2iP,GAAcO,oBAAoB9xV,EAAKq4V,YAAY,GAAG7O,cAAc56O,WAChFnvQ,EAAIhN,KAAKsxhB,eAAejlhB,KAAKC,IAAKu5f,EAAO74f,EAAI64f,EAAO9vf,OAASomQ,IAC7DihM,EAAYp9c,KAAKsxhB,eAAe/jX,EAAKurV,kBAAkB9if,OACvDq9E,EAAMrzF,KAAK4whB,YACfv9b,EAAIQ,OACJR,EAAIgB,YAAc,IAClB,IAAIg9b,EAAsBrxhB,KAAKsxhB,eAAe/jX,EAAKurV,kBAAkB/if,QAAU,IAAO,GAEtF/I,EAAIX,KAAK+T,IAAIpT,EAAGqkhB,GAEhBrxhB,KAAKwxhB,eAAen+b,EAAK7mF,EAAME,EAAMM,EAAGowc,EAAW,WAAW,GAC9D,IAAI12c,EAAO1G,KAAKyxhB,oBAAoBlkX,GAAM,GAC1Cl6E,EAAIpkE,KAAO,YACX,IAAIjZ,EAAQq9E,EAAItkE,YAAYroB,GAAMsP,MAGlC,GAFAhW,KAAK0xhB,uBAAuBr+b,EAAK7mF,EAAO,EAAGE,EAAMM,EAAGgJ,EAAQ,GAAI,IAChEhW,KAAK2xhB,2BAA2Bt+b,EAAK3sF,EAAM8F,EAAO,GAAIQ,EAAIN,EAAM,IAC5D6gK,EAAKy6V,aAAc,CAEnB,IAAI6a,EAAiB/jB,GAAcO,oBAAoB9xV,EAAKq4V,YAAY,GAAG7O,cAAc8rB,gBAErF+O,EAAe5xhB,KAAKsxhB,eAAe/jX,EAAKurV,kBAAkB/if,QAC1D/V,KAAKsxhB,eAAejlhB,KAAKC,IAAIihK,EAAKy6V,aAAajyf,OAAS8sgB,EAAgB/jB,GAAcO,oBAAoB9xV,EAAKy6V,aAAajR,cAAc16O,gBAE9Iu1Q,EAAevlhB,KAAKC,IAAKtM,KAAKsxhB,eAAe/jX,EAAKurV,kBAAkB/if,QAAUs7gB,EAAqBO,GACnG5xhB,KAAKwxhB,eAAen+b,EAAK7mF,EAAME,EAAMklhB,EAAcx0E,EAAW,WAAW,GACzE12c,EAAO1G,KAAKyxhB,oBAAoBlkX,GAAM,GACtCv3J,EAAQq9E,EAAItkE,YAAYroB,GAAMsP,MAC9BhW,KAAK0xhB,uBAAuBr+b,EAAK7mF,EAAO,EAAGE,EAAMklhB,EAAe,GAAI57gB,EAAQ,GAAI,IAChFhW,KAAK2xhB,2BAA2Bt+b,EAAK3sF,EAAM8F,EAAO,GAAIE,EAAMklhB,EAAe,GAC3Ev+b,EAAIY,YAGZs8b,EAASn1hB,UAAUq2hB,oBAAsB,SAAUlkX,EAAM7gJ,GACrD,IAAIhmB,EAaJ,OAZAA,EAAOgmB,EAAW,SAAW,SACzB6gJ,EAAKq4V,YAAY,GAAG7O,cAAc86B,oBAA0D,IAApC7xhB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQgvK,GAClF7mK,EAAOgmB,EAAW,oBAAsB,oBAEnC6gJ,EAAKq4V,YAAY,GAAG7O,cAAc+6B,2BAEnCprhB,GADC1G,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQgvK,GAAQ,GAAK,GAAM,EACvC7gJ,EAAW,mBAAqB,mBAGhCA,EAAW,kBAAoB,mBAGvChmB,GAMX6phB,EAASn1hB,UAAUo2hB,eAAiB,SAAUn+b,EAAKtmF,EAAGC,EAAGgJ,EAAOu+E,EAAWw9b,GACvE1+b,EAAIS,YACJT,EAAIM,YAAcY,EAClBlB,EAAIG,UAAY,EACZu+b,EACA1+b,EAAIK,aAAa,EAAG,IAGpBL,EAAIK,aAAa,EAAG,IAExBL,EAAIU,OAAOhnF,EAAGC,GACdqmF,EAAIW,OAAOjnF,EAAIiJ,EAAOhJ,GACtBqmF,EAAIjzD,SACJizD,EAAIK,gBACJL,EAAIqB,aAER67b,EAASn1hB,UAAUs2hB,uBAAyB,SAAUr+b,EAAKtmF,EAAGC,EAAGsoD,EAAGC,GAChE89B,EAAIS,YACJT,EAAIkB,UAAY,YAChBlB,EAAImB,SAASznF,EAAGC,EAAGsoD,EAAGC,GACtB89B,EAAIM,YAAc,QAClBN,EAAIqrX,WAAW3xc,EAAGC,EAAGsoD,EAAGC,GACxB89B,EAAIqB,aAER67b,EAASn1hB,UAAUu2hB,2BAA6B,SAAUt+b,EAAK/2D,EAASvvB,EAAGC,GACvEqmF,EAAIS,YACJT,EAAIkB,UAAY,UAChBlB,EAAImC,aAAe,aACnBnC,EAAIqC,SAASp5D,EAASvvB,EAAGC,GACzBqmF,EAAIqB,aAOR67b,EAASn1hB,UAAUg3G,OAAS,SAAUm7D,EAAMuvV,GACxC,IAAK,IAAI5ggB,EAAI,EAAGA,EAAI4ggB,EAAWzF,aAAa76f,OAAQN,IAAK,CACrD,IAAI2pgB,EAAS/I,EAAWzF,aAAan7f,GAC3B,IAANA,GAAW4ggB,EAAWzF,aAAa,aAAc4P,IAAe15V,EAAK8mW,4BAErEr0gB,KAAKg8X,aAAazuN,EAAMs4V,EAAQ7lgB,KAAKwuf,OAAOlhc,OAAO8lQ,UAAU0pM,EAAWzF,aAAa,KAEzFr3f,KAAKuxhB,aAAahkX,EAAMs4V,KAQhC0qB,EAASn1hB,UAAUm2hB,aAAe,SAAUhkX,EAAMs4V,GAC1CA,aAAkB3O,GAClBl3f,KAAKgyhB,sBAAsBzkX,EAAMs4V,GAGjC7lgB,KAAKiyhB,kBAAkB1kX,EAAMs4V,IAUrC0qB,EAASn1hB,UAAU4gY,aAAe,SAAUzuN,EAAMs4V,EAAQ/6a,GACtD,IAAIrtF,EAAkBqtF,GAAtB,CAIA,IAAK,IADDp+E,EAAM6gK,EAAKihV,OAAO4tB,WAAWpvgB,EACxB9Q,EAAI,EAAGA,GAAK4uF,EAAOmkJ,SAAU/yO,IAAK,CACvC,GAAmE,IAA/D4uF,EAAOs9a,WAAWvB,kBAAkB,GAAGxP,aAAa76f,OACpD,OAEJ,IAAIkpE,EAAMolB,EAAOs9a,WAAWvB,kBAAkB,GAAGxP,aAAa,GAC1D0Q,EAAeric,EAAIrmE,QACvB0ogB,EAAazQ,gBAAkB5xb,EAAI4xb,gBAEnC/pV,EAAKihV,OAAOytB,yBAAyBlU,EAAc,IAAIhye,GAAKw3I,EAAKihV,OAAO4tB,WAAWrvgB,EAAGL,EAAKq7f,EAAa/xf,MAAO+xf,EAAahyf,SAC5Hw3J,EAAKihV,OAAOlhc,OAAOy6d,0BAA0Br7gB,EAAKq7f,GAGlD,IAAK,IAFDhgc,OAAO7sE,EAEFwoB,EAAI,EAAGA,EAAIqkf,EAAa1Q,aAAa76f,OAAQknB,IAClDqkD,EAAOggc,EAAa1Q,aAAa3ze,GACjC1jB,KAAKkyhB,sBAAsB3kX,EAAMxlG,GAErCr7D,GAAOq7f,EAAahyf,OAEpB8vf,EAAO74f,IAAMN,GAEb6gK,EAAKihV,OAAOlhc,OAAOm9d,4BAA4B/9gB,EAAKm5f,KAQ5D0qB,EAASn1hB,UAAU42hB,sBAAwB,SAAUzkX,EAAM28W,GAGvD,IAAK,IAFDx9gB,EAAMw9gB,EAAWl9gB,EACjBR,EAAO09gB,EAAWn9gB,EACb7Q,EAAI,EAAGA,EAAIguhB,EAAW7yB,aAAa76f,OAAQN,IAAK,CACrD,IAAI2pgB,EAASqkB,EAAW7yB,aAAan7f,GACrC8D,KAAK0zZ,WAAWmyG,EAAQt4V,EAAM/gK,EAAME,GACpCA,GAAOm5f,EAAO9vf,SAQtBw6gB,EAASn1hB,UAAU62hB,kBAAoB,SAAU1kX,EAAMmvW,GACnD,IAAK,IAAIxghB,EAAI,EAAGA,EAAIwghB,EAAYrlB,aAAa76f,OAAQN,IAAK,CACtD,IAAI2pgB,EAAS6W,EAAYrlB,aAAan7f,GACtC8D,KAAKmyhB,qBAAqB5kX,EAAMs4V,GAC5B6W,EAAY1Y,YAAY3zM,YAAc,GACtCrwT,KAAKoyhB,mBAAmB1V,KASpC6T,EAASn1hB,UAAU+2hB,qBAAuB,SAAU5kX,EAAMqvW,GACtD,IAAK,IAAI1ghB,EAAI,EAAGA,EAAI0ghB,EAAUvlB,aAAa76f,OAAQN,IAAK,CACpD,IAAI2pgB,EAAS+W,EAAUvlB,aAAan7f,GACpC8D,KAAKkyhB,sBAAsB3kX,EAAMs4V,KAQzC0qB,EAASn1hB,UAAU82hB,sBAAwB,SAAU3kX,EAAMugW,GACvD,GAAK9tgB,KAAK+4f,cACF/4f,KAAKsxhB,eAAexjB,EAAW9ggB,EAAG,GAAK8ggB,EAAW/3f,OAAS/V,KAAKwuf,OAAO15a,WAAa,GACpF90E,KAAKsxhB,eAAexjB,EAAW9ggB,EAAG,GAAKhN,KAAKwuf,OAAO6jC,cAAct8gB,QAFzE,EAOK/V,KAAK+4f,YAAcxrV,EAAKihV,OAAOgV,MAAMvtb,WAAas3F,EAAKihV,OAAOgV,MAAMvtb,UAAUq8c,gBAAgB91hB,OAAS,GACxG+wK,EAAKihV,OAAOgV,MAAMvtb,UAAUs8c,2BAA2BvyhB,KAAKgxhB,iBAAkBljB,GAElF9tgB,KAAKwyhB,uBAAuBjlX,EAAKihV,OAAQsf,GACzC,IAAK,IAAI5xgB,EAAI,EAAGA,EAAI4xgB,EAAWzW,aAAa76f,OAAQN,IAAK,CACrD,IAAI2pgB,EAASiI,EAAWzW,aAAan7f,GACjC8Z,EAAQ83f,EAAW93f,MAAQ83f,EAAW9ue,OAAOxyB,KAAOshgB,EAAWzE,gBACnErpgB,KAAKu0B,SAASu5e,EAAW/ggB,EAAG+ggB,EAAW9ggB,EAAGhN,KAAKsxhB,eAAet7gB,GAAQhW,KAAKsxhB,eAAexjB,EAAW/3f,SACrG/V,KAAKuxhB,aAAahkX,EAAMs4V,GACxB7lgB,KAAK4whB,YAAY38b,aAUzBs8b,EAASn1hB,UAAUs4Z,WAAa,SAAUm/G,EAAYtlW,EAAM/gK,EAAME,GAO9D,IANK1M,KAAK+4f,YAAcxrV,EAAKihV,OAAOgV,MAAMvtb,WAAas3F,EAAKihV,OAAOgV,MAAMvtb,UAAUq8c,gBAAgB91hB,OAAS,GACxG+wK,EAAKihV,OAAOgV,MAAMvtb,UAAUw8c,sBAAsBzyhB,KAAKgxhB,iBAAkBne,EAAYnmgB,GAErFmmgB,EAAWhB,gBACXrlgB,GAAQsyf,GAAcO,oBAAoBwT,EAAW5b,UAAUhF,gBAAgBrjP,kBAE/E5uQ,KAAKwuf,OAAOgV,MAAMxU,eAEbvxf,EAAkB8vK,EAAKihV,OAAOgV,MAAMxU,aAAa0jC,qBAAuBnlX,EAAKihV,OAAOgV,MAAMxU,aAAa0jC,mBAAmBrvS,YAAYwvR,GAEvI,IAAK,IADD8f,EAAaplX,EAAKihV,OAAOgV,MAAMxU,aAAa0jC,mBAAmBhrhB,IAAImrgB,GAC9D32gB,EAAI,EAAGA,EAAIy2hB,EAAWn2hB,OAAQN,IACnC8D,KAAK4whB,YAAYr8b,UAAY,UAE7Bv0F,KAAK4whB,YAAYp8b,SAASx0F,KAAKsxhB,eAAeqB,EAAWz2hB,GAAGsQ,KAAM,GAAIxM,KAAKsxhB,eAAe5khB,EAAK,GAAI1M,KAAKsxhB,eAAeqB,EAAWz2hB,GAAG8Z,OAAQhW,KAAKsxhB,eAAeze,EAAW98f,SAIxL,IAAS7Z,EAAI,EAAGA,EAAI22gB,EAAWz4f,SAAS5d,OAAQN,IAAK,CACjD,IAAIg2gB,EAAaW,EAAWz4f,SAASle,GACrC,GAAIg2gB,aAAsBzS,IAAmBz/f,KAAKu6gB,aACxB,IAArBrI,EAAWl8f,OAAqC,IAAtBk8f,EAAWn8f,OAClC/V,KAAKu6gB,cACLrI,EAAWl8f,MAAQ,GAEvBxJ,GAAQ0lgB,EAAWl8f,MAAQk8f,EAAWlze,OAAOxyB,KAC7CxM,KAAK4yhB,gBAAgB1gB,OANzB,CASA,IAAI2gB,EAAa7yhB,KAAK8yhB,sBAAsBjgB,GACvC7ygB,KAAK+4f,cACF/4f,KAAKsxhB,eAAe5khB,EAAMwlgB,EAAWlze,OAAOtyB,IAAK,GAAKwlgB,EAAWn8f,OAAS/V,KAAKwuf,OAAO15a,WAAa,GACnG90E,KAAKsxhB,eAAe5khB,EAAMwlgB,EAAWlze,OAAOtyB,IAAK,GAAK1M,KAAKwuf,OAAO6jC,cAAct8gB,SAKpFm8f,aAAsB/I,GACtBnpgB,KAAK+yhB,yBAAyB7gB,EAAY1lgB,EAAME,EAAKmmhB,GAEhD3gB,aAAsBrJ,GAC3B7ogB,KAAKgzhB,sBAAsB9gB,EAAY1lgB,EAAME,EAAKmmhB,GAGlD7yhB,KAAKizhB,qBAAqB/gB,EAAY1lgB,EAAME,EAAKmmhB,GAErDrmhB,GAAQ0lgB,EAAWl8f,MAAQk8f,EAAWlze,OAAOxyB,MAbrCA,GAAQ0lgB,EAAWl8f,MAAQk8f,EAAWlze,OAAOxyB,QAgB7D+jhB,EAASn1hB,UAAUw3hB,gBAAkB,SAAU5xhB,GACvCA,aAAmBy+f,KACO,IAAtBz+f,EAAQ0+f,UACFjigB,EAAkBuD,EAAQ2+f,YAAa3+f,EAAQ+xgB,cACjD/ygB,KAAKu6gB,aAAc,GAGI,IAAtBv5gB,EAAQ0+f,WAAyC,IAAtB1+f,EAAQ0+f,YACxC1/f,KAAKu6gB,aAAc,KAS/BgW,EAASn1hB,UAAU03hB,sBAAwB,SAAUjgB,GAGjD,IAAK,IAFD98f,EAAS,EACT2Z,EAAa,EACRxzB,EAAI,EAAGA,EAAI22gB,EAAWz4f,SAAS5d,OAAQN,IACxC22gB,EAAWz4f,SAASle,aAAcujgB,IACA,IAAjCoT,EAAWz4f,SAASle,GAAG8Z,OAAiD,IAAlC68f,EAAWz4f,SAASle,GAAG6Z,QAG9DA,EAAS88f,EAAWz4f,SAASle,GAAG6Z,OAAS88f,EAAWz4f,SAASle,GAAG8iC,OAAOtyB,MACvEqJ,EAAS88f,EAAWz4f,SAASle,GAAG8iC,OAAOtyB,IAAMmmgB,EAAWz4f,SAASle,GAAG6Z,OACpE2Z,EAAamjf,EAAWz4f,SAASle,GAAG6Z,OAAS,IAGrD,OAAOA,EAAS,EAAI2Z,GASxB6ggB,EAASn1hB,UAAU23hB,yBAA2B,SAAU7gB,EAAY1lgB,EAAME,EAAKmmhB,GAC3E,IAAI12Q,EAAY+1P,EAAWlze,OAAOtyB,IAC9BwvQ,EAAag2P,EAAWlze,OAAOxyB,KAC/B+xB,EAAS2ze,EAAWzV,UAAUpK,gBAC9B6gC,EAAuBhhB,EAAWjod,KAAKgtc,UAAU5E,gBACjDh8d,EAA6B,YAArBkI,EAAOkge,UAA0By0B,EAAqBz0B,UAAYlge,EAAOkge,UACrFz+f,KAAK4whB,YAAYp7b,aAAe,MAChC,IAAIvmC,EAAO,GACPE,EAAS,GACT3/B,EAAmC,YAAtB+O,EAAO/O,WAA2B0jgB,EAAqB1jgB,WAAa+O,EAAO/O,WACxFJ,EAA+B,KAApBmP,EAAOnP,SAAkB8jgB,EAAqB9jgB,SAAWmP,EAAOnP,SAE3Eove,EAAiD,WAA7Bjge,EAAOige,kBAAiC00B,EAAqB10B,kBAAoBjge,EAAOige,kBAChHvvc,EAAO1wB,EAAO0wB,KAAO,OAASike,EAAqBjke,KAAO,OAAS,GACnEE,EAAS5wB,EAAO4wB,OAAS,SAAW+je,EAAqB/je,OAAS,SAAW,GAC7E//B,EAAwB,IAAbA,EAAiB,GAAMA,GAAkC,WAAtBove,EAAiC,EAAI,KACnF,IAAIE,EAAyC,SAAzBnge,EAAOmge,cAA2Bw0B,EAAqBx0B,cAAgBnge,EAAOmge,cAC9FC,EAA2C,YAA1Bpge,EAAOoge,eAA+Bu0B,EAAqBv0B,eAC5Epge,EAAOoge,eACY,YAAnBA,IACuC,MAAnCA,EAAet6e,UAAU,EAAG,GAC5BrkB,KAAK4whB,YAAYr8b,UAAYuqa,GAAcM,sBAAsBT,GAGjE3+f,KAAK4whB,YAAYr8b,UAAYv0F,KAAK2whB,SAAShyB,GAG/C3+f,KAAK4whB,YAAYp8b,SAASx0F,KAAKsxhB,eAAe9khB,EAAO0vQ,EAAY,GAAIl8Q,KAAKsxhB,eAAe5khB,EAAMyvQ,EAAW,GAAIn8Q,KAAKsxhB,eAAepf,EAAWl8f,OAAQhW,KAAKsxhB,eAAepf,EAAWn8f,UAExL/V,KAAK4whB,YAAY3hgB,KAAOggC,EAAO,IAAME,EAAS,IAAM//B,EAAWpvB,KAAKwuf,OAAO15a,WAAa,MAAatlD,EAC3E,cAAtBgve,IACAriP,GAAa+1P,EAAWn8f,OAASm8f,EAAWn8f,OAAS,KAEzD/V,KAAK4whB,YAAYr8b,UAAYv0F,KAAK2whB,SAASt6f,GAE3Cr2B,KAAK4whB,YAAYl7b,SAASw8a,EAAWljf,KAAMhvB,KAAKsxhB,eAAe9khB,EAAO0vQ,EAAY,GAAIl8Q,KAAKsxhB,eAAe5khB,EAAMyvQ,EAAW,GAAIn8Q,KAAKsxhB,eAAepf,EAAWl8f,QACrI,SAArBuoB,EAAOivQ,WAAyB/vS,EAAkB8gC,EAAOivQ,YACzDxtS,KAAKmzhB,gBAAgBjhB,EAAY1lgB,EAAME,EAAKmmhB,EAAYx8f,EAAOkI,EAAOivQ,UAAWgxN,GAE/D,SAAlBE,GACA1+f,KAAKozhB,oBAAoBlhB,EAAY1lgB,EAAME,EAAK6xB,EAAOmge,cAAeroe,EAAOmoe,IAWrF+xB,EAASn1hB,UAAU63hB,qBAAuB,SAAU/gB,EAAY1lgB,EAAME,EAAKmmhB,GACvE,IAAIQ,GAAe,EACf/7B,EAAkB4a,EAAWjod,KAAKgtc,UAAUK,gBAC5CA,aAA2B2O,KAC3BotB,EAAkE,YAAlD/7B,EAAgB+Q,SAASiC,UAAU9F,YAEvD,IAAIroP,EAAY+1P,EAAWlze,OAAOtyB,IAC9BwvQ,EAAag2P,EAAWlze,OAAOxyB,KAC/B6mhB,GAEArzhB,KAAKu0B,SAAS+ie,EAAgBvqf,EAAGuqf,EAAgBtqf,EAAGhN,KAAKsxhB,eAAeh6B,EAAgBthf,OAAQhW,KAAKsxhB,eAAeh6B,EAAgBvhf,SAExI,IAAIwoB,EAAS2ze,EAAW7f,gBACM,YAA1B9zd,EAAOoge,iBACuC,MAA1Cpge,EAAOoge,eAAet6e,UAAU,EAAG,GACnCrkB,KAAK4whB,YAAYr8b,UAAYuqa,GAAcM,sBAAsB7ge,EAAOoge,gBAGxE3+f,KAAK4whB,YAAYr8b,UAAYv0F,KAAK2whB,SAASpyf,EAAOoge,gBAGtD3+f,KAAK4whB,YAAYp8b,SAASx0F,KAAKsxhB,eAAe9khB,EAAO0vQ,EAAY,GAAIl8Q,KAAKsxhB,eAAe5khB,EAAMyvQ,EAAW,GAAIn8Q,KAAKsxhB,eAAepf,EAAWl8f,OAAQhW,KAAKsxhB,eAAepf,EAAWn8f,UAExL,IAAIsgB,EAAQkI,EAAOkge,UACnBz+f,KAAK4whB,YAAYp7b,aAAe,MAChC,IAAIvmC,EAAO,GACPE,EAAS,GACT//B,EAAW,GACf6/B,EAAO1wB,EAAO0wB,KAAO,OAAS,GAC9BE,EAAS5wB,EAAO4wB,OAAS,SAAW,GACpC//B,EAA+B,IAApBmP,EAAOnP,SAAiB,GAAMmP,EAAOnP,UAAyC,WAA7BmP,EAAOige,kBAAiC,EAAI,KACxGx+f,KAAK4whB,YAAY3hgB,KAAOggC,EAAO,IAAME,EAAS,IAAM//B,EAAWpvB,KAAKwuf,OAAO15a,WAAa,MAAav2C,EAAO/O,WAC3E,cAA7B+O,EAAOige,oBACPriP,GAAa+1P,EAAWn8f,OAASm8f,EAAWn8f,OAAS,KAEzD/V,KAAK4whB,YAAYr8b,UAAYv0F,KAAK2whB,SAASt6f,GAC3C,IAAIi9f,EAActzhB,KAAKsxhB,eAAepf,EAAWl8f,OAC7CgZ,EAAOkjf,EAAWljf,KAEtB,GAAIkjf,aAAsBoB,GAAe,CACrC,IAAIigB,EAAarhB,EACU,KAAvBqhB,EAAWhgB,SAAmB91gB,EAAkB81hB,EAAW/f,YAAuC,SAAzB+f,EAAW/f,UAIxD,KAAvB+f,EAAWhgB,UAChBvkf,EAAOukgB,EAAWhgB,UAJlBvkf,EAAOhvB,KAAKwzhB,aAAathB,GACzBqhB,EAAWhgB,QAAUvkf,GAO7BhvB,KAAK4whB,YAAYl7b,SAAS1mE,EAAMhvB,KAAKsxhB,eAAe9khB,EAAO0vQ,EAAY,GAAIl8Q,KAAKsxhB,eAAe5khB,EAAMyvQ,EAAW,GAAIm3Q,GAC3F,SAArB/0f,EAAOivQ,WAAyB/vS,EAAkB8gC,EAAOivQ,YAEzDxtS,KAAKmzhB,gBAAgBjhB,EAAY1lgB,EAAME,EAAKmmhB,EAAYx8f,EAAOkI,EAAOivQ,UAAWjvQ,EAAOige,mBAE/D,SAAzBjge,EAAOmge,eAA6BjhgB,EAAkB8gC,EAAOmge,gBAC7D1+f,KAAKozhB,oBAAoBlhB,EAAY1lgB,EAAME,EAAK6xB,EAAOmge,cAAeroe,EAAOkI,EAAOige,mBAEpF60B,GACArzhB,KAAK4whB,YAAY38b,WAMzBs8b,EAASn1hB,UAAUo4hB,aAAe,SAAUthB,GACxC,IAAI+O,EAAY,EACZwS,EAAYzzhB,KAAK0zhB,mBAAmBxhB,EAAWsB,WAC/CD,EAAUkgB,EACdxS,EAAYjhhB,KAAKwuf,OAAO0uB,WAAWhqP,SAASqgP,EAASrB,EAAW7f,iBAEhE,IAAK,IADDnze,EAAQ7S,KAAKmT,MAAM0yf,EAAWl8f,MAAQirgB,GACjC/khB,EAAI,EAAGA,GAAKgjB,EAAOhjB,IACxBq3gB,GAAWkgB,EAEf,OAAOlgB,EAAQlygB,MAAM,GAAI,IAK7BkvhB,EAASn1hB,UAAUs4hB,mBAAqB,SAAUlgB,GAC9C,IAAIigB,EAAY,GAChB,OAAQjgB,GACJ,IAAK,MACDigB,EAAY,IACZ,MACJ,IAAK,SACDA,EAAY,IACZ,MACJ,IAAK,aACDA,EAAY,IAGpB,OAAOA,GASXlD,EAASn1hB,UAAUm5B,SAAW,SAAUm2X,EAAMC,EAAM30Y,EAAOD,GACvD/V,KAAK4whB,YAAY98b,YACjB9zF,KAAK4whB,YAAY/8b,OACjB7zF,KAAK4whB,YAAY19f,KAAKlzB,KAAKsxhB,eAAe5mI,EAAM,GAAI1qZ,KAAKsxhB,eAAe3mI,EAAM,GAAI30Y,EAAOD,GACzF/V,KAAK4whB,YAAYniR,QAarB8hR,EAASn1hB,UAAU+3hB,gBAAkB,SAAUjhB,EAAY1lgB,EAAME,EAAKmmhB,EAAYx8f,EAAOm3Q,EAAWgxN,GAChG,IAAIm1B,EAAiBzhB,EAAWn8f,QAAgC,WAAtByof,EAAiC,EAAI,KAC3EriP,EAAY+1P,EAAWlze,OAAOtyB,IAC9BknhB,EAAkBD,EAAiB,GACnC3mhB,EAAI,EACkB,cAAtBwxf,GAAqC0T,aAAsB/I,IAC3Dn8f,EAAK2mhB,EAAiB,EAAIC,EAAmBlnhB,EAE7CM,IADAmvQ,GAAa+1P,EAAWn8f,OAAS49gB,GAChB,EAAIx3Q,EAAY,GAGjCnvQ,EAAI6lhB,EAAanmhB,EAGrB1M,KAAK4whB,YAAYp8b,SAASx0F,KAAKsxhB,eAAe9khB,EAAO0lgB,EAAWlze,OAAOxyB,KAAM,GAAIxM,KAAKsxhB,eAAetkhB,EAAG,GAAIhN,KAAKsxhB,eAAepf,EAAWl8f,OAAQhW,KAAKsxhB,eAAesC,KAY3KrD,EAASn1hB,UAAUg4hB,oBAAsB,SAAUlhB,EAAY1lgB,EAAME,EAAKgyf,EAAeroe,EAAOmoe,GAC5F,IAAIm1B,EAAiBzhB,EAAWn8f,QAAgC,WAAtByof,EAAiC,EAAI,KAC3EriP,EAAY+1P,EAAWlze,OAAOtyB,IACR,cAAtB8xf,IACAriP,GAAa+1P,EAAWn8f,OAAS49gB,GAErCjnhB,GAAOyvQ,EAAY,EAAIA,EAAY,EACnC,IAAIzsP,EAAaikgB,EAAiB,GAC9B3mhB,EAAK2mhB,EAAiB,EAAM,GAAMjkgB,EAClCi6Q,EAAY,EAIhB,IAHsB,iBAAlB+0N,IACA1xf,GAAK0iB,GAEFi6Q,GAA+B,iBAAlB+0N,EAAmC,EAAI,IACvD/0N,IAEA3pS,KAAK4whB,YAAYp8b,SAASx0F,KAAKsxhB,eAAe9khB,EAAO0lgB,EAAWlze,OAAOxyB,KAAM,GAAIxM,KAAKsxhB,eAAetkhB,EAAIN,EAAK,GAAI1M,KAAKsxhB,eAAepf,EAAWl8f,OAAQhW,KAAKsxhB,eAAe5hgB,IAC7K1iB,GAAK,EAAI0iB,GAWjB6ggB,EAASn1hB,UAAU43hB,sBAAwB,SAAU9gB,EAAY1lgB,EAAME,EAAKmmhB,GACxE,IAAI12Q,EAAY+1P,EAAWlze,OAAOtyB,IAC9BwvQ,EAAag2P,EAAWlze,OAAOxyB,KACnCxM,KACK4whB,YAAYp7b,aAAe,MAChC,IAAIq+b,EAAc,EACdC,GAAY,EAChB,GAAI33Q,EAAY,GAAK+1P,EAAWjod,KAAKgtc,UAAUjhf,MAAQk8f,EAAWl8f,MAAO,CACrE,IAAI+9gB,EAAe7hB,EAAWjod,KAAKgtc,UAAUK,gBAI7C,GAAIy8B,aAAwB9tB,GAAiB,CACzC,IAAI7I,EAAa,EACjB,GAAI22B,EAAa18B,aAAa,aAAcH,GAAiB,CAEzDkG,EADc22B,EAAa18B,aAAa,GACnBpF,gBAAgBmL,WAEzCy2B,EAAcE,EAAa/9gB,MAAQ+9gB,EAAa/0f,OAAOxyB,KAAOunhB,EAAa1qB,gBAAkBjM,EAC7F02B,GAAY,EAEZ9zhB,KAAKu0B,SAAS/nB,EAAO0vQ,EAAYxvQ,EAAMyvQ,EAAWn8Q,KAAKsxhB,eAAeuC,GAAc7zhB,KAAKsxhB,eAAeyC,EAAah+gB,UAGzHm8f,EAAW+B,YAKXj0gB,KAAK4whB,YAAY96b,UAAUo8a,EAAWlxgB,QAAShB,KAAKsxhB,eAAe9khB,EAAO0vQ,EAAY,GAAIl8Q,KAAKsxhB,eAAe5khB,EAAMyvQ,EAAW,GAAIn8Q,KAAKsxhB,eAAepf,EAAWl8f,OAAQhW,KAAKsxhB,eAAepf,EAAWn8f,SAEzM+9gB,GACA9zhB,KAAK4whB,YAAY38b,WAOzBs8b,EAASn1hB,UAAUg3hB,mBAAqB,SAAU1V,GAC9C,IAAIpvd,EAAS,IAAIyyX,GAAO//a,KAAKwuf,QACzBppb,EAAQs3c,EACZA,EAAY1mgB,MAAQhW,KAAKwuf,OAAOlhc,OAAO08c,cAAc5kc,GACrD,IAAIt+B,EAASwmB,EAAO49d,kBAAkB9ld,EAAM4+b,YAAYn2M,SACpDr6N,EAAY,EAGhBA,EAAYsra,GAAcO,oBAAoBv4d,EAAO2qO,gBAErDzxQ,KAAKg0hB,mBAAmBltf,EAAQ41e,EAAY3vgB,EAAI2vgB,EAAY19e,OAAOxyB,KAAOgnF,EAAY,EAAGkpb,EAAY1vgB,EAAG0vgB,EAAY3vgB,EAAI2vgB,EAAY19e,OAAOxyB,KAAOgnF,EAAY,EAAGkpb,EAAY1vgB,EAAI0vgB,EAAY3mgB,OAAQy9E,GAErM1sD,EAASwmB,EAAO49d,kBAAkB9ld,EAAM4+b,YAAYn2M,SACpDr6N,EAAY,EAEZA,EAAYsra,GAAcO,oBAAoBv4d,EAAO2qO,gBAErDzxQ,KAAKg0hB,mBAAmBltf,EAAQ41e,EAAY3vgB,EAAI2vgB,EAAY19e,OAAOxyB,KAAOgnF,EAAWkpb,EAAY1vgB,EAAIwmF,EAAY,EAAGkpb,EAAY3vgB,EAAI2vgB,EAAY1mgB,MAAQw9E,EAAYkpb,EAAY19e,OAAOvyB,MAAOiwgB,EAAY1vgB,EAAIwmF,EAAY,EAAGA,GAE7N1sD,EAASwmB,EAAO29d,oBAAoB7ld,EAAM4+b,YAAYn2M,SACtDr6N,EAAY,EAEZA,EAAYsra,GAAcO,oBAAoBv4d,EAAO2qO,gBAErDzxQ,KAAKg0hB,mBAAmBltf,EAAQ41e,EAAY3vgB,EAAI2vgB,EAAY1mgB,MAAQ0mgB,EAAY19e,OAAOvyB,MAAQ+mF,EAAY,EAAGkpb,EAAY1vgB,EAAG0vgB,EAAY3vgB,EAAI2vgB,EAAY1mgB,MAAQ0mgB,EAAY19e,OAAOvyB,MAAQ+mF,EAAY,EAAGkpb,EAAY1vgB,EAAI0vgB,EAAY3mgB,OAAQy9E,GAE/O1sD,EAASwmB,EAAO69d,qBAAqB/ld,EAAM4+b,YAAYn2M,SACvDr6N,EAAY,EAEZA,EAAYsra,GAAcO,oBAAoBv4d,EAAO2qO,gBAErDzxQ,KAAKg0hB,mBAAmBltf,EAAQ41e,EAAY3vgB,EAAI2vgB,EAAY19e,OAAOxyB,KAAOgnF,EAAWkpb,EAAY1vgB,EAAI0vgB,EAAY3mgB,OAASy9E,EAAY,EAAGkpb,EAAY3vgB,EAAI2vgB,EAAY1mgB,MAAQw9E,EAAYkpb,EAAY19e,OAAOvyB,MAAOiwgB,EAAY1vgB,EAAI0vgB,EAAY3mgB,OAASy9E,EAAY,EAAGA,IAQ3Q+8b,EAASn1hB,UAAUo3hB,uBAAyB,SAAUhkC,EAAQsf,GAC1D,IAAIxgd,EAASkhc,EAAOlhc,OAEhBu8c,EAAYiE,EACZmmB,EAAgB,EAChBC,EAAmB,EACnBC,EAAiB,EACjBC,EAAkB,EAClBr+gB,EAAS,EACH8zf,EAAUpB,WAAW56M,QAC3BigN,EAAWxW,2BAA2B6O,KACtC+tB,EAAmBpmB,EAAW9ue,OAAOryB,OAASmhgB,EAAWxW,gBAAgBkS,kBACzEyqB,EAAgBnmB,EAAW9ue,OAAOtyB,IAAMohgB,EAAWxW,gBAAgBiS,gBAEvE4qB,EAAiBrmB,EAAW9ue,OAAOxyB,KAAOshgB,EAAWzE,gBACrD+qB,EAAkBtmB,EAAW9ue,OAAOvyB,MAAQqhgB,EAAWxE,iBAO/Cvzf,EANHtY,EAAkBosgB,EAAUxB,WAAyD,YAA5CwB,EAAUxB,SAASiC,UAAU9F,YAIlE/mgB,EAAkBosgB,EAAUxB,YAAcwB,EAAUxB,UAAU7rgB,QAAU,EAEhE6P,KAAKC,IAAIwyf,GAAcO,oBAAoBwK,EAAUxB,SAASiC,UAAUv0f,QAAS+3f,EAAW/3f,QAAUk+gB,EAAgBC,EAGtHpmB,EAAW/3f,OAASk+gB,EAAgBC,EARxCp1B,GAAcO,oBAAoBwK,EAAUxB,SAASiC,UAAUv0f,QAAUk+gB,EAAgBC,EAWtGl0hB,KAAKq0hB,qBAAqBt+gB,EAAQ+3f,GAClC,IAAIhne,EAASm/d,GAAgBkI,kBAAkBtE,GAC3Cr2a,EAAY,EAEhBA,EAAYsra,GAAcO,oBAAoBv4d,EAAO2qO,gBAErDzxQ,KAAKg0hB,mBAAmBltf,EAAQgne,EAAW/ggB,EAAIonhB,EAAiB3gc,EAAWs6a,EAAW9ggB,EAAIinhB,EAAenmB,EAAW/ggB,EAAIonhB,EAAiB3gc,EAAWs6a,EAAW9ggB,EAAI8ggB,EAAW/3f,OAASm+gB,EAAkB1gc,GAEzM1sD,EAASm/d,GAAgByK,iBAAiB7G,GAE1Cr2a,EAAYsra,GAAcO,oBAAoBv4d,EAAO2qO,gBAErDzxQ,KAAKg0hB,mBAAmBltf,EAAQgne,EAAW/ggB,EAAI+ggB,EAAW9ue,OAAOxyB,KAAMshgB,EAAW9ggB,EAAI8ggB,EAAW9ue,OAAOtyB,IAAM8mF,EAAY,EAAGs6a,EAAW/ggB,EAAI+ggB,EAAW93f,MAAQ83f,EAAW9ue,OAAOvyB,MAAOqhgB,EAAW9ggB,EAAI8ggB,EAAW9ue,OAAOtyB,IAAM8mF,EAAY,EAAGA,IAE1Oq2a,EAAUzB,WAAWpE,YAAY3zM,YAAc,GAAKw5M,EAAUt2M,YAAcs2M,EAAUxB,SAAShR,aAAa76f,OAAS,KACrHsqC,EAASm/d,GAAgBmK,mBAAmBvG,GAE5Cr2a,EAAYsra,GAAcO,oBAAoBv4d,EAAO2qO,gBAErDzxQ,KAAKg0hB,mBAAmBltf,EAAQgne,EAAW/ggB,EAAI+ggB,EAAW93f,MAAQ83f,EAAW9ue,OAAOvyB,MAAQ+mF,EAAY,EAAGs6a,EAAW9ggB,EAAIinhB,EAAenmB,EAAW/ggB,EAAI+ggB,EAAW93f,MAAQ83f,EAAW9ue,OAAOvyB,MAAQ+mF,EAAY,EAAGs6a,EAAW9ggB,EAAI8ggB,EAAW/3f,OAASm+gB,EAAkB1gc,IAG7Q,IAAI89a,EAAUzH,EAAUxB,SAASkI,WAG7B+jB,GAAgC,EACpC,IAAK72hB,EAAkB6zgB,GAAU,CAC7B,IAAIijB,OAAgBr5hB,GAEpBq5hB,EAAgBjjB,aAEanL,IAErB2H,EAAWxW,2BAA2B6O,IAAkB2H,EAAWxW,gBAAgBA,2BAA2B2P,KAC9GqtB,GAAoH,IAApFxmB,EAAWxW,gBAAgBA,gBAAgBD,aAAa94f,QAAQg2hB,KAIxG1qB,EAAUzB,WAAWpE,YAAY3zM,YAAc,GAAKw5M,EAAUxB,SAASp5R,WAAa46R,EAAUzB,WAAW/Q,aAAa76f,OAAS,GAC3HqtgB,EAAUpB,WAAW73M,QAAU,GAC5Bi5M,EAAUxB,SAASp5R,SAAW46R,EAAUpB,WAAW73M,UAAYi5M,EAAUzB,WAAW/Q,aAAa76f,SACvG83hB,KAEDxtf,EAAU+ie,EAAUpB,WAAW73M,QAAU,GAAKi5M,EAAUxB,SAASp5R,SAAW46R,EAAUpB,WAAW73M,UAAYi5M,EAAUzB,WAAW/Q,aAAa76f,OAE3IqtgB,EAAUsF,yBAAyBtF,EAAUpB,WAAW56M,QAAQlhT,OAAQs5f,GAAgBiL,oBAAoBrH,IAE1G5D,GAAgBiL,oBAAoBrH,GAG1Cr2a,EAAYsra,GAAcO,oBAAoBv4d,EAAO2qO,gBAErDzxQ,KAAKg0hB,mBAAmBltf,EAAQgne,EAAW/ggB,EAAI+ggB,EAAW9ue,OAAOxyB,KAAMshgB,EAAW9ggB,EAAI8ggB,EAAW/3f,OAASm+gB,EAAmB1gc,EAAY,EAAGs6a,EAAW/ggB,EAAI+ggB,EAAW93f,MAAQ83f,EAAW9ue,OAAOvyB,MAAOqhgB,EAAW9ggB,EAAI8ggB,EAAW/3f,OAASm+gB,EAAmB1gc,EAAY,EAAGA,IAGhR1sD,EAASwmB,EAAO89d,wBAAwBvhB,IAGxCr2a,EAAYsra,GAAcO,oBAAoBv4d,EAAO2qO,iBACrC,GAEZzxQ,KAAKg0hB,mBAAmBltf,EAAQgne,EAAW/ggB,EAAIonhB,EAAgBrmB,EAAW9ggB,EAAI8ggB,EAAW/3f,OAASm+gB,EAAkBpmB,EAAW/ggB,EAAI+ggB,EAAW93f,MAAQo+gB,EAAiBtmB,EAAW9ggB,EAAIinhB,EAAezgc,GAGzM1sD,EAASwmB,EAAO+9d,0BAA0BxhB,IAG1Cr2a,EAAYsra,GAAcO,oBAAoBv4d,EAAO2qO,iBACrC,GAEZzxQ,KAAKg0hB,mBAAmBltf,EAAQgne,EAAW/ggB,EAAIonhB,EAAgBrmB,EAAW9ggB,EAAIinhB,EAAenmB,EAAW/ggB,EAAI+ggB,EAAW93f,MAAQo+gB,EAAiBtmB,EAAW9ggB,EAAI8ggB,EAAW/3f,OAASm+gB,EAAkB1gc,IAS7M+8b,EAASn1hB,UAAUi5hB,qBAAuB,SAAUt+gB,EAAQ+3f,GACxD,IAAIrF,EAAaqF,EAAWrF,WACxBxqD,EAAiD,YAAvCwqD,EAAWrF,QAAQh1c,gBAC7B0/c,EAAW1F,WAAWpE,YAAYZ,QAAQh1c,gBAAkBq6c,EAAWrF,QAAQh1c,gBAEnF,GADApuD,KAAK4whB,YAAY98b,YACD,UAAZmqX,EAAqB,CACrBj+c,KAAK4whB,YAAYr8b,UAAYv0F,KAAK2whB,SAAS1yE,GAC3C,IAAIzxc,EAAOshgB,EAAW/ggB,EAAI+ggB,EAAW9ue,OAAOxyB,KAAOshgB,EAAWzE,gBAC1Dxtd,EAAQiyd,EAAW9ggB,EAAI8xf,GAAcO,oBAAoByO,EAAW3xP,WAEpEnmQ,EAAQ83f,EAAW93f,MAAQ83f,EAAW9ue,OAAOxyB,KAAOshgB,EAAW9ue,OAAOvyB,MAAQqhgB,EAAWzE,gBAAkByE,EAAWxE,iBAE1HtpgB,KAAK4whB,YAAYp8b,SAASx0F,KAAKsxhB,eAAe9khB,EAAM,GAAIxM,KAAKsxhB,eAAez1e,EAAO,GAAI77C,KAAKsxhB,eAAet7gB,GAAQhW,KAAKsxhB,eAAev7gB,IACvI/V,KAAK4whB,YAAYl8b,cAazB67b,EAASn1hB,UAAU44hB,mBAAqB,SAAUltf,EAAQ5F,EAAQC,EAAQmxM,EAAMF,EAAM5+I,GAClFxzF,KAAK4whB,YAAY98b,YACjB9zF,KAAK4whB,YAAY78b,OAAO/zF,KAAKsxhB,eAAepwf,EAAQ,GAAIlhC,KAAKsxhB,eAAenwf,EAAQ,IACpFnhC,KAAK4whB,YAAY58b,OAAOh0F,KAAKsxhB,eAAeh/S,EAAM,GAAItyO,KAAKsxhB,eAAel/S,EAAM,IAChFpyO,KAAK4whB,YAAYp9b,UAAYxzF,KAAKsxhB,eAAe99b,GAEjDxzF,KAAK4whB,YAAYj9b,YAAc7sD,EAAOzQ,MAClCm9D,EAAY,GACZxzF,KAAK4whB,YAAYxwf,SAErBpgC,KAAK4whB,YAAYl8b,aAQrB67b,EAASn1hB,UAAUk2hB,eAAiB,SAAUv0hB,EAAO2J,GACjD,GAAI1G,KAAK+4f,WACL,OAAOh8f,EAEPU,EAAkBiJ,KAClBA,EAAO,GAGX,OADQ3J,EAAQiD,KAAKwuf,OAAO15a,YACP,IAATpuE,EAAa1G,KAAKsoc,SAAqB,IAAT5hc,EAAa1G,KAAKwoc,QAAU,IAK1E+nF,EAASn1hB,UAAUiX,QAAU,WACzBrS,KAAKwuf,YAAStzf,EACTuC,EAAkBuC,KAAKwwhB,gBACxBxwhB,KAAKwwhB,aAAaxuhB,UAAY,IAElChC,KAAKwwhB,kBAAet1hB,GAEjBq1hB,KCl7BPiE,GAA4B,WAC5B,SAASA,EAAWhmC,GAChBxuf,KAAKwjgB,MAAQhV,EACR/wf,EAAkB+wf,KACnBxuf,KAAK2F,QAAU6of,EAAOimC,kBA0M9B,OAvMAn2hB,OAAOuJ,eAAe2shB,EAAWp5hB,UAAW,iBACxCsM,IAAK,WACD,MAAO,KAEXC,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2shB,EAAWp5hB,UAAW,iBACxCsM,IAAK,WACD,MAAO,KAEXC,YAAY,EACZC,cAAc,IAKlB4shB,EAAWp5hB,UAAU+hhB,sBAAwB,SAAU9qB,GACnD,OAAOryf,KAAKkzR,SAASlzR,KAAK00hB,cAAeriC,IAK7CmiC,EAAWp5hB,UAAUmkhB,qBAAuB,SAAUltB,GAElD,IAAIr8e,EAAQhW,KAAKkzR,SAASlzR,KAAK00hB,cAAeriC,GAI1C6qB,EAAal9gB,KAAKqzQ,UAAUg/O,GAChC,OACIlN,MAASnve,EAAOove,OAAU83B,EAAW93B,OAAQs6B,eAAkBxC,EAAWwC,iBAMlF8U,EAAWp5hB,UAAU8ihB,YAAc,SAAUhM,EAAY7f,GAErD,IAAIsiC,EAAmB,EACvBA,EAAmB30hB,KAAKkzR,SAASg/O,EAAWljf,KAAMqje,GAClD6f,EAAWl8f,MAAQ2+gB,EAEnB,IAAIzX,EAAal9gB,KAAKqzQ,UAAUg/O,GAMhC,OALA6f,EAAWn8f,OAASmngB,EAAW93B,OAC/B8sB,EAAWiB,eAAiB+J,EAAWwC,eACa,MAAhDxN,EAAWljf,KAAKkjf,EAAWljf,KAAKxyB,OAAS,KACzCm4hB,EAAmB30hB,KAAKkzR,SAAS4rO,GAAciB,QAAQmS,EAAWljf,MAAOqje,IAEtEsiC,GAKXH,EAAWp5hB,UAAUi4Q,UAAY,SAAUg/O,GAGvC,IAAIh1f,EAAM2C,KAAK40hB,cAAcviC,GAC7B,IAAK50f,EAAkBuC,KAAKwjgB,MAAMqxB,qBAAqBx3hB,IACnD,OAAO2C,KAAKwjgB,MAAMqxB,qBAAqBx3hB,GAE3C,IAAIy3hB,EAAW90hB,KAAK+0hB,kBAAkB1iC,GAEtC,OADAryf,KAAKwjgB,MAAMqxB,qBAAqBx3hB,GAAOy3hB,EAChCA,GAKXN,EAAWp5hB,UAAUw5hB,cAAgB,SAAUviC,GAC3C,IAAI2iC,EAAa3iC,EAAgB7ie,WAAWgxC,oBAQ5C,OAPAw0d,GAAc,IAAM3iC,EAAgBjje,SAChCije,EAAgBpjc,OAChB+le,GAAc,SAEd3iC,EAAgBljc,SAChB6le,GAAc,WAEXA,GAKXR,EAAWp5hB,UAAU25hB,kBAAoB,SAAU1iC,GAC/C,IAAI9mN,EAAa,EACb4nO,EAAiB,EACjB8hB,EAAcz0hB,SAASW,cAAc,QACzC8zhB,EAAY3xhB,GAAK,WACjB2xhB,EAAYvwhB,MAAM+qB,WAAa,SAC/BwlgB,EAAY/0d,UAAY,IACxBlgE,KAAKk1hB,WAAWD,EAAa5iC,GAClB7xf,SAASe,qBAAqB,QAAzC,IACIy3e,EAAYx4e,SAASW,cAAc,OACvC63e,EAAUt0e,MAAMosC,QAAU,eAC1B,IAAIs8B,EAAU5sE,SAASW,cAAc,OACrCisE,EAAQ5pE,aAAa,QAAS,0EAC9Bw1e,EAAUr3e,YAAYszhB,GACtBj8C,EAAUr3e,YAAYyrE,GACtB5sE,SAASuL,KAAKpK,YAAYq3e,GAE1BztM,EAAa0pP,EAAYt9d,aAEzB,IAAIw9d,EAAaF,EAAY7ghB,UAI7B,OAFA++f,EADoB/lc,EAAQh5D,UACK+ghB,EACjC30hB,SAASuL,KAAKzG,YAAY0ze,IACjBoM,OAAU75M,EAAYm0O,eAAkBvM,IAKrDqhB,EAAWp5hB,UAAUwlhB,+BAAiC,SAAU5xf,EAAMqje,GAClE,OAAOryf,KAAKkzR,SAAS4rO,GAAciB,QAAQ/we,GAAOqje,IAKtDmiC,EAAWp5hB,UAAU83R,SAAW,SAAUlkQ,EAAMqje,GACxCrje,EAAKtf,MAAM,OACXsf,EAAK/xB,QAAQ,KAAM+C,KAAKo1hB,eAE5B,IAAInme,EAAO,GACPE,EAAS,GACT3/B,EAAa,GACbJ,EAAWije,EAAgBjje,SAM/B,OALA6/B,EAAOojc,EAAgBpjc,KAAO,OAAS,GACvCE,EAASkjc,EAAgBljc,OAAS,SAAW,GAC7C3/B,EAAa6ie,EAAgB7ie,WAC7BJ,EAAwB,IAAbA,EAAiB,GAAMA,GAAkD,WAAtCije,EAAgBmM,kBAAiC,EAAI,KACnGx+f,KAAK2F,QAAQspB,KAAOggC,EAAO,IAAME,EAAS,IAAM//B,EAAW,MAAaI,EACjExvB,KAAK2F,QAAQopB,YAAYC,GAAMhZ,OAK1Cw+gB,EAAWp5hB,UAAU85hB,WAAa,SAAUD,EAAa5iC,GACrD,IAAK50f,EAAkBw3hB,KAAiBx3hB,EAAkB40f,GAAkB,CACrC,KAA/BA,EAAgB7ie,aAChBylgB,EAAYvwhB,MAAM8qB,WAAa6ie,EAAgB7ie,YAEnD,IAAIJ,EAAWije,EAAgBjje,SAC3BA,GAAY,KACZA,EAAW,IAEf6lgB,EAAYvwhB,MAAM0qB,SAAWA,EAASliB,WAAa,KAC/Cmlf,EAAgBpjc,OAChBgme,EAAYvwhB,MAAM4qB,WAAa,QAE/B+ie,EAAgBljc,SAChB8le,EAAYvwhB,MAAM6qB,UAAY,YAO1CilgB,EAAWp5hB,UAAU2zB,YAAc,SAAUC,EAAMqje,GAE/C,IAAIr8e,EAAQhW,KAAKkzR,SAASlkQ,EAAMqje,GAI5B6qB,EAAal9gB,KAAKqzQ,UAAUg/O,GAChC,OACIlN,MAASnve,EAAOove,OAAU83B,EAAW93B,OAAQs6B,eAAkBxC,EAAWwC,iBAMlF8U,EAAWp5hB,UAAU6khB,eAAiB,SAAU/N,EAAYjb,GACxD,IAAI14d,EAAS,IAAI64d,QAAiBl8f,GAC9Bm6hB,EAAsBnjB,EAAWzV,UAAUpK,gBAC3C6gC,EAAuBj8B,EAAU5E,gBACrC9zd,EAAOnP,SAA4C,KAAjCimgB,EAAoBjmgB,SAAkB8jgB,EAAqB9jgB,SAAWimgB,EAAoBjmgB,SAC5GmP,EAAO/O,WAAgD,YAAnC6lgB,EAAoB7lgB,WAA2B0jgB,EAAqB1jgB,WAClF6lgB,EAAoB7lgB,WAC1B,IAAIy/B,EAAO,GACPE,EAAS,GACTqvc,EAA8D,WAA1C62B,EAAoB72B,kBACxC00B,EAAqB10B,kBAAoB62B,EAAoB72B,kBACjEvvc,EAAOome,EAAoBpme,KAAO,OAASike,EAAqBjke,KAAO,OAAS,GAChFE,EAASkme,EAAoBlme,OAAS,SAAW+je,EAAqB/je,OAAS,SAAW,GAC1F5wB,EAAOige,kBAAoBA,EACvBvvc,IACA1wB,EAAO0wB,MAAO,GAEdE,IACA5wB,EAAO4wB,QAAS,GAEpB+id,EAAWl8f,MAAQhW,KAAKkzR,SAASg/O,EAAWljf,KAAMuP,GAElD,IAAI2+e,EAAal9gB,KAAKqzQ,UAAU90O,GAChC2ze,EAAWn8f,OAASmngB,EAAW93B,OAC/B8sB,EAAWiB,eAAiB+J,EAAWwC,gBAE3C8U,EAAWp5hB,UAAUiX,QAAU,WAC3BrS,KAAKwjgB,WAAQtogB,EACb8E,KAAK2F,aAAUzK,GAEZs5hB,KChNP/6U,GAAsB,WACtB,SAASA,EAAK+0S,GACV,IAAIzuf,EAAQC,KACZA,KAAKs1hB,qBAAuB,SAAUj5hB,GAClC,IAAsB,IAAlBA,EAAM6rB,QAAkB,CACxB7rB,EAAMspB,iBAEN,GADYtpB,EAAMyP,MAAQ/L,EAAMyuf,OAAO+mC,gBAAgBphhB,WAC3CpU,EAAMyuf,OAAOgnC,cAAc5whB,YAAa,CAChD,IAAI6whB,EAAQnmc,UAAUF,UAAU1/E,MAAM,WAAarT,EAAM+yI,OAAS,EAAI/yI,EAAM8yI,WAAa,EACrFr6D,EAAa/0E,EAAMyuf,OAAO15a,WAC1B2gd,EACI3gd,GAAc,IACdA,GAAc,GAGdA,EAAa,EAIbA,GAAc,GACdA,GAAc,GAGdA,EAAa,GAGrB/0E,EAAMyuf,OAAO15a,WAAaA,KAItC90E,KAAKwuf,OAASA,EA6BlB,OA3BA/0S,EAAKr+M,UAAUs6hB,cAAgB,SAAU34hB,GACrCiD,KAAK21hB,sBACAl4hB,EAAkBuC,KAAKwuf,OAAOv4a,YAC/Bj2E,KAAKwuf,OAAOv4a,UAAU2/c,sBAE1B51hB,KAAKwuf,OAAOqnC,0BACPp4hB,EAAkBuC,KAAKwuf,OAAOgV,MAAMvhB,qBACrCjif,KAAKwuf,OAAOgV,MAAMvhB,mBAAmB6zC,6BAEzC91hB,KAAKwuf,OAAOgV,MAAM5R,wBAGtBn4S,EAAKr+M,UAAUu6hB,oBAAsB,WAC7B31hB,KAAKwuf,OAAO15a,WAAa,EACzB90E,KAAKwuf,OAAO15a,WAAa,EAEpB90E,KAAKwuf,OAAO15a,WAAa,KAC9B90E,KAAKwuf,OAAO15a,WAAa,IAE7B90E,KAAKmxV,QAET13I,EAAKr+M,UAAU+1V,KAAO,WAClB,IAAIq9J,EAASxuf,KAAKwuf,OAClBA,EAAOunC,eACPvnC,EAAOwnC,aACPxnC,EAAOj/X,eAEJkqF,KC/DPhpH,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GA8BxCsga,GAA8B,WAE9B,SAASA,EAAaoS,GAClB,IAAIzjgB,EAAQC,KAIZA,KAAK6iC,UAAW,EAIhB7iC,KAAK2+O,iBAAczjP,EACnB8E,KAAKi2hB,0BAAuB/6hB,EAC5B8E,KAAKk2hB,wBAAqBh7hB,EAI1B8E,KAAKm/gB,eAILn/gB,KAAKymhB,uBAILzmhB,KAAKm2hB,cACLn2hB,KAAKygH,SAAW,EAChBzgH,KAAKwrB,OAAS,EACdxrB,KAAKo2hB,gBAAiB,EAItBp2hB,KAAKoqhB,8BAA+B,EAIpCpqhB,KAAKq2hB,cAAgB,EAIrBr2hB,KAAKs2hB,eAAiB,EAItBt2hB,KAAKu2hB,uBAAoBr7hB,EAIzB8E,KAAKw2hB,mBAAgBt7hB,EAIrB8E,KAAKouD,gBAAkB,UAIvBpuD,KAAKoX,aAAe,EAIpBpX,KAAK2W,cAAgB,EAKrB3W,KAAKgtb,aAAc,EAInBhtb,KAAKy2hB,gCAAiC,EAItCz2hB,KAAK02hB,kBAAmB,EAIxB12hB,KAAK22hB,cAAe,EAIpB32hB,KAAK42hB,uBAAwB,EAI7B52hB,KAAK62hB,yBAA2B,EAIhC72hB,KAAK82hB,gBAAiB,EAItB92hB,KAAK+2hB,iBAAmB,GAIxB/2hB,KAAK0xf,oBAAqB,EAI1B1xf,KAAKg3hB,sBAAuB,EAI5Bh3hB,KAAKi3hB,uBAAwB,EAI7Bj3hB,KAAKk3hB,kBAAmB,EAIxBl3hB,KAAKmJ,OAAS,GAIdnJ,KAAK0rP,OAAS,GAId1rP,KAAKwsB,UAILxsB,KAAK60hB,wBAIL70hB,KAAKikhB,gBAAkB,GAIvBjkhB,KAAK40S,SAIL50S,KAAKw0f,iBAILx0f,KAAKuD,OAAS,IAAIkxf,GAIlBz0f,KAAKm3hB,sBAAmBj8hB,EAIxB8E,KAAKo3hB,qBAAsB,EAC3Bp3hB,KAAKq3hB,2BAA4B,EACjCr3hB,KAAKs3hB,cAAgB,OAIrBt3hB,KAAKu3hB,mBAILv3hB,KAAKw3hB,aAAc,EAInBx3hB,KAAKy3hB,gBAAkB,IAAI5if,GAAM,EAAG,GACpC70C,KAAK03hB,mBAAqB,EAI1B13hB,KAAK23hB,YAAc,SAAUt7hB,GACzB,IAAK0D,EAAM+2hB,eAAgB,CACvBz6hB,EAAMspB,iBACN,IAAIqJ,EAAO3yB,EAAME,KACjBwD,EAAMyjgB,MAAM8Q,OAAOsjB,gBAAgB5ogB,KAQ3ChvB,KAAK63hB,iBAAmB,SAAUx7hB,GACzBmP,GAAQqb,UAAa9mB,EAAMyjgB,MAAMtR,iBAClCnyf,EAAM+2hB,gBAAiB,EACvB/2hB,EAAM+3hB,yBACF/3hB,EAAMyjgB,MAAMu0B,eACZh4hB,EAAMyjgB,MAAM8Q,OAAO0jB,mBAAmB,aAG9Cj4hB,EAAM2xf,oBAAqB,GAM/B1xf,KAAKi4hB,mBAAqB,SAAU57hB,GAC5B0D,EAAM+2hB,iBAAmB/2hB,EAAMyjgB,MAAMtR,gBAErC/xf,WAAW,WACPJ,EAAMyjgB,MAAM8Q,OAAO4jB,cAAcn4hB,EAAMo4hB,6BAA6B,IACrE,GAEPp4hB,EAAMi3hB,sBAAuB,GAMjCh3hB,KAAKo4hB,eAAiB,SAAU/7hB,GAC5B,GAAI0D,EAAM+2hB,iBAAmB/2hB,EAAMyjgB,MAAMtR,eAAgB,CACrD,IAAIlje,EAAOjvB,EAAMo4hB,4BACJ,KAATnpgB,GACAjvB,EAAMyjgB,MAAM8Q,OAAO4jB,cAAclpgB,GAAM,GAE3CjvB,EAAM+2hB,gBAAiB,EACvB/2hB,EAAMg3hB,iBAAmB,GACzBh3hB,EAAMs4hB,OAAO70hB,aAAa,QAAS,sDACnCzD,EAAMu4hB,YAAYt2hB,UAAY,GAC1BjC,EAAMyjgB,MAAMu0B,gBACZh4hB,EAAMyjgB,MAAMu0B,cAAcQ,uBACb,KAATvpgB,IAIAjvB,EAAMyjgB,MAAMu0B,cAAczpF,OAC1Bvuc,EAAMyjgB,MAAMu0B,cAAcxgE,UAAU1xT,QAIhDxpK,EAAMspB,iBACN5lB,EAAMi3hB,sBAAuB,EAC7Bj3hB,EAAMm3hB,kBAAmB,GAG7Bl3hB,KAAKw4hB,eAAiB,SAAUv4hB,IACvBxC,EAAkBsC,EAAMyjgB,MAAMvhB,qBAAuBlif,EAAMyjgB,MAAMvhB,mBAAmBw2C,uBAClF14hB,EAAMyjgB,MAAMvhB,mBAAmBy2C,kBAC9Bz4hB,aAAgBigU,WAChBngU,EAAM44hB,kBAAkB14hB,GAEnBA,aAAgB24hB,YACrB74hB,EAAM84hB,kBAAkB54hB,KAKpCD,KAAK84hB,mBAAqB,SAAUz8hB,GAChC,IAAK0D,EAAMyjgB,MAAMtR,eAAgB,CAC7B,IAAI70f,EAAMhB,EAAM8rB,SAAW9rB,EAAMm5P,SAC7B/qN,EAAO,GACPptC,EACAotC,EAAO/gB,OAAOC,aAAatsB,GAEtBhB,EAAMgB,MACXotC,EAAOpuC,EAAMgB,KAGJ,aAATotC,GAAgC,OAATA,GAA0B,OAATA,GAA0B,MAATA,GAAsB1qC,EAAMyjgB,MAAMtR,iBAAoC,IAAlB71f,EAAM6rB,QAGrG,aAATuiB,GACL1qC,EAAMyjgB,MAAM1U,aAAa8oC,gBAAgB,KAHzC73hB,EAAMyjgB,MAAM1U,aAAa8oC,gBAAgBntf,GAK7CpuC,EAAMspB,mBAGd3lB,KAAK+4hB,oBAAsB,SAAU18hB,GAC5B0D,EAAMyjgB,MAAMtR,eAIbnyf,EAAMu4hB,YAAYp4d,UAAY,GAH9BngE,EAAMyjgB,MAAM1U,aAAaiqC,oBAAoB18hB,IAWrD2D,KAAKg5hB,QAAU,SAAU38hB,GAChB0D,EAAMyjgB,MAAMtR,gBACbnyf,EAAMyjgB,MAAM1U,aAAayoB,cAAcl7gB,GAE3C0D,EAAMu4hB,YAAYp4d,UAAY,GAC9B7jE,EAAMspB,kBAMV3lB,KAAKi5hB,WAAa,WACd,IAAKx7hB,EAAkBsC,EAAMk2E,WAAY,CACrC,GAAIl2E,EAAMyjgB,MAAMvU,mBAAqBlvf,EAAMyjgB,MAAMvU,kBAAkB2nB,qBACa,UAA5E72gB,EAAMyjgB,MAAMvU,kBAAkB2nB,oBAAoB51gB,QAAQ0D,MAAMosC,QAChE,OAEJ/wC,EAAMk2E,UAAUijd,cAOxBl5hB,KAAKuvH,YAAc,WACXxvH,EAAMk2E,YACNl2E,EAAMu4hB,YAAYp2hB,QAClBnC,EAAMk2E,UAAUqhc,cAMxBt3gB,KAAK4kI,cAAgB,WACjB7kI,EAAMg2hB,eACNh2hB,EAAM6uf,mBACN,IAAIuqC,EAAWp5hB,EAAMqX,aAAerX,EAAMsyhB,cAAct8gB,OACpDojhB,EAAWp5hB,EAAMy1hB,cAAc79d,eAC/B53D,EAAMw1hB,gBAAgBpphB,UAAYpM,EAAMqX,cAAgB+hhB,EAAWp5hB,EAAMy1hB,cAAc79d,eAE9E53D,aACS0uf,KAAqBhxf,EAAkBsC,EAAMyjgB,QAC/DzjgB,EAAMyjgB,MAAM3R,kBAOpB7xf,KAAKo5hB,eAAiB,WAClB,IACIC,EADA7qC,EAASzuf,EAGbs5hB,EAAcl5hB,WAAW,WAChB1C,EAAkB+wf,EAAOgV,QAAW/lgB,EAAkBsC,EAAMyjgB,MAAMxigB,WACnEwtf,EAAO8qC,yBAAyB94hB,SAAS2uB,eAAeq/d,EAAOgV,MAAMxigB,QAAQsC,KAC7Ekrf,EAAOI,mBACFnxf,EAAkBsC,EAAMk2E,YACzBl2E,EAAMk2E,UAAU2/c,sBAEpBpnC,EAAOqnC,0BACHrnC,EAAOgV,MAAMvU,mBAAqBT,EAAOgV,MAAMvU,kBAAkB2nB,qBACjEpoB,EAAOgV,MAAMvU,kBAAkB2nB,oBAAoB30gB,QAEnDo3hB,GACAn5hB,aAAam5hB,KAGtB,MAKPr5hB,KAAKu5hB,cAAgB,SAAUl9hB,GACvB0D,EAAMyjgB,MAAMvU,mBACZlvf,EAAMyjgB,MAAMvU,kBAAkB4nB,sBAAsBx6gB,IAQ5D2D,KAAKw5hB,oBAAsB,SAAUn9hB,GACjC,KAAI0D,EAAM42hB,cAAgBt6hB,EAAMwP,QAAW9L,EAAMsyhB,cAAcr8gB,OAASjW,EAAMsyhB,cAAcr8gB,MAAQjW,EAAMw1hB,gBAAgB3lgB,cACnHvzB,EAAM4P,QAAWlM,EAAMsyhB,cAAct8gB,QAAUhW,EAAMsyhB,cAAct8gB,OAAShW,EAAMw1hB,gBAAgB1lgB,eAGpGpyB,EAAkBsC,EAAMk2E,YAAY,CACrCl2E,EAAM6tb,aAAavxb,GAEf0D,EAAM05hB,oBAAoBp9hB,KAAW0D,EAAMyjgB,MAAMtR,gBAAkBnyf,EAAMyjgB,MAAMk2B,yBAA2Bj8hB,EAAkBsC,EAAMyjgB,MAAMvhB,mBAAmB03C,yBAC3J55hB,EAAMyjgB,MAAMvhB,mBAAmBy2C,iBAAkB,GAErDr8hB,EAAMspB,iBACD5lB,EAAM42hB,cACP52hB,EAAMk2E,UAAUijd,YAEpB,IAAIU,EAAc,IAAI/kf,GAAMx4C,EAAMwP,QAASxP,EAAM4P,SAC7C27f,EAAa7ngB,EAAM85hB,gBAAgBD,GAAa,GAMpD,GALA75hB,EAAM03hB,gBAAgB1qhB,EAAI66f,EAAW76f,EACrChN,EAAM03hB,gBAAgBzqhB,EAAI46f,EAAW56f,EAErCjN,EAAMs3hB,0BAA4Bt3hB,EAAMk2E,UAAU6jd,uBAAuBF,EAAa75hB,EAAM4+O,cAAgB5+O,EAAMk2E,UAAU8jd,uBAAuBH,EAAa75hB,EAAM4+O,aACtK5+O,EAAM02hB,gCAAiC,GAClC12hB,EAAMyjgB,MAAMtR,iBAAmBnyf,EAAMyjgB,MAAM1U,aAAakrC,YAAYC,oBAAoBryB,IACzF7ngB,EAAMyjgB,MAAM1U,aAAakrC,YAAYE,mBAAmBtyB,IASxD,OARA7ngB,EAAMk2E,UAAUijd,YAChBn5hB,EAAMitb,aAAc,EACpBjtb,EAAM02hB,gCAAiC,OACnC12hB,EAAM05hB,oBAAoBp9hB,KAC1B0D,EAAMyjgB,MAAM1U,aAAakrC,YAAY74D,cAAcp0d,EAAI66f,EAAW76f,EAClEhN,EAAMyjgB,MAAM1U,aAAakrC,YAAY74D,cAAcn0d,EAAI46f,EAAW56f,EAClEjN,EAAMyjgB,MAAM1U,aAAakrC,YAAYG,aAAavyB,KAU1D,GANIvrgB,EAAM6rB,UACNnoB,EAAM22hB,kBAAmB,GAEzB32hB,EAAMyjgB,MAAMvtb,UAAU2hK,UACtB73O,EAAM62hB,uBAAwB,GAEd,IAAhBv6hB,EAAMkhH,QAAgBx9G,EAAMyjgB,MAAMvtb,UAAU2hK,SACzC73O,EAAMk2E,UAAUmkd,yBAAyBr6hB,EAAMs6hB,cAAczyB,GAAaA,GAE7E,YADAvrgB,EAAMspB,iBAGV5lB,EAAM42hB,cAAe,EACrB52hB,EAAMitb,aAAc,EACpBjtb,EAAMwvH,cAENxvH,EAAMyrB,MAAQrrB,WAAW,WACrBJ,EAAM0gH,WACiB,IAAnB1gH,EAAM0gH,WACN1gH,EAAM0gH,SAAW,IAEtB,OAQXzgH,KAAKs6hB,oBAAsB,SAAUj+hB,GAEjC,GADAA,EAAMspB,kBACDloB,EAAkBsC,EAAMk2E,WAAY,CAErC,IAAKl2E,EAAMyjgB,MAAMtR,gBAAkBnyf,EAAMyjgB,MAAMk2B,wBACxC35hB,EAAMyjgB,MAAMvhB,mBAAmBy2C,gBAIlC,YAHK34hB,EAAMyjgB,MAAMvhB,mBAAmBs4C,uBAChCx6hB,EAAMyjgB,MAAMvhB,mBAAmBu4C,2BAA2Bn+hB,IAIlE,IAAIu9hB,EAAc,IAAI/kf,GAAMx4C,EAAMwP,QAASxP,EAAM4P,SAC7C27f,EAAa7ngB,EAAM85hB,gBAAgBD,GAAc75hB,EAAMyjgB,MAAMmf,uBACjE,GAAI5ihB,EAAMitb,YAAa,CACnB,IAAKvvb,EAAkBsC,EAAM4+O,aAAc,CACvC,IAAIpyK,EAAYq7b,EAAW76f,EACvBy/D,EAAYo7b,EAAW56f,EAC3B,IAAKjN,EAAMyjgB,MAAMtR,gBAAkBnyf,EAAMq3hB,oBACrCr3hB,EAAMyjgB,MAAM1U,aAAakrC,YAAYS,eAAe7yB,QAMpD,GAHM7ngB,EAAM42hB,cAAgB52hB,EAAM02hB,gCAAkC12hB,EAAM82hB,yBAA2B,GACjG92hB,EAAM26hB,+BAA+B9yB,EAAY,GAEjD7ngB,EAAM05hB,oBAAoBp9hB,GAAQ,CAClCA,EAAMspB,iBACN,IAAIg1gB,EAASnud,EACT07U,EAAenoZ,EAAMyjgB,MAAMvtb,UAAUh3D,IACrC27gB,EAAe,IAAI/lf,GAAM03B,EAAWoud,GACnC56hB,EAAMyjgB,MAAMk2B,wBAA2B35hB,EAAMyjgB,MAAMvhB,mBAAmBw2C,uBACvE14hB,EAAMyjgB,MAAMvtb,UAAU4kd,iBAAiBD,EAAc1yI,GAEzDnoZ,EAAM02hB,gCAAiC,GAInD12hB,EAAMk2E,UAAU6kd,2BAEf/6hB,EAAMq3hB,qBAAwBr3hB,EAAM02hB,gCACrC12hB,EAAM6tb,aAAavxb,GAEnB0D,EAAMq3hB,qBACNr3hB,EAAMk2E,UAAUijd,cAS5Bl5hB,KAAK+6hB,YAAc,SAAU1+hB,GACzB,IAAKoB,EAAkBsC,EAAMk2E,WAAY,CACrCl2E,EAAM42hB,cAAe,EACrB,IAAIiD,EAAc,IAAI/kf,GAAMx4C,EAAMwP,QAASxP,EAAM4P,SACjD,GAAIlM,EAAMk2E,UAAU+kd,2BAA2BpB,EAAa75hB,EAAM85hB,gBAAgBD,GAAa,IAC3F,QAGA75hB,EAAMk2E,UAAU2hK,SAAYn6O,EAAkBsC,EAAM4+O,cAAiBlhP,EAAkBsC,EAAMyjgB,MAAMvtb,UAAU14E,SAC7GwC,EAAMyjgB,MAAMvtb,UAAUgld,oBACtBl7hB,EAAMk2E,UAAU6kd,2BAChB/6hB,EAAM0gH,SAAW,KAS7BzgH,KAAK24hB,kBAAoB,SAAUt8hB,GAC/BA,EAAMspB,iBACN5lB,EAAMm7hB,oBAAqB,EAC3B,IAAItB,EAAc,IAAI/kf,GAAMx4C,EAAMwP,QAASxP,EAAM4P,SAC7C27f,EAAa7ngB,EAAM85hB,gBAAgBD,GAAa,GACpD,IAAKn8hB,EAAkBsC,EAAMk2E,WAAY,CACrC,IAAIwqC,EAAW,EAoDf,GAnDKj1G,GAAQyc,KAMTw4F,EAAW1gH,EAAM0gH,SALbpkH,EAAM+yI,OAAS,IACf3uB,EAAWpkH,EAAM+yI,QAMrBrvI,EAAMq3hB,qBACNr3hB,EAAMyjgB,MAAM1U,aAAakrC,YAAYmB,sBAAsBvzB,IAE3D7ngB,EAAMitb,aAAgBjtb,EAAM02hB,gCACxBh5hB,EAAkBsC,EAAM4+O,cAAiBlhP,EAAkBsC,EAAMyjgB,MAAMvtb,UAAU14E,QAChFwC,EAAMyjgB,MAAMk2B,wBAA2B35hB,EAAMyjgB,MAAMvhB,mBAAmBy2C,kBACpC,IAAnC34hB,EAAM82hB,0BAAmC92hB,EAAMq3hB,sBAC/Cr3hB,EAAM26hB,+BAA+B9yB,EAAYnnZ,GAC7Cj1G,GAAQyc,MAAqB,IAAbw4F,GAChB1gH,EAAMk2E,UAAU+kd,2BAA2BpB,EAAahyB,IAGhE7ngB,EAAMk2E,UAAU6kd,4BAEfr9hB,EAAkBsC,EAAM4+O,cAAiBlhP,EAAkBsC,EAAMyjgB,MAAMvtb,UAAU14E,SAC9EwC,EAAMyjgB,MAAMvtb,UAAU2hK,UAAW73O,EAAMyjgB,MAAMvtb,UAAUmld,mBACxD/+hB,EAAM6rB,SAAWnoB,EAAMyjgB,MAAMthB,gCAC3Bnif,EAAMyjgB,MAAMthB,iCAAuE,IAArCnif,EAAM05hB,oBAAoBp9hB,IAC7E0D,EAAMk2E,UAAUold,yBAAyBzzB,GAAY,IAEpD7ngB,EAAMyjgB,MAAMtR,gBAAkBnyf,EAAMu7hB,sBAAsB1zB,IAC3D7ngB,EAAMk2E,UAAUsld,kBAGfx7hB,EAAMyjgB,MAAMtR,gBAAkBnyf,EAAMyjgB,MAAMk2B,wBAA0B35hB,EAAMyjgB,MAAMvhB,mBAAmBy2C,kBACpG34hB,EAAMyjgB,MAAMvhB,mBAAmBu5C,kBAC/Bz7hB,EAAM07hB,iBAAiB17hB,EAAMyjgB,MAAMvtb,UAAU14E,MAAOwC,EAAMyjgB,MAAMvtb,UAAUh3D,KAC1Elf,EAAMyjgB,MAAMvhB,mBAAmBy2C,iBAAkB,EACjD34hB,EAAMyjgB,MAAMvhB,mBAAmBy5C,gCAG/B37hB,EAAMyjgB,MAAMk2B,wBAA0B35hB,EAAMyjgB,MAAMvhB,mBAAmBw2C,wBAA0Bh7hB,EAAkBsC,EAAMk2E,UAAUohc,SACjIt3gB,EAAMk2E,UAAUohc,MAAM3ygB,MAAMosC,QAAU,QAE1C/wC,EAAMitb,aAAc,EACpBjtb,EAAM02hB,gCAAiC,EACvC12hB,EAAM42hB,cAAe,EACrB52hB,EAAM62hB,uBAAwB,EAC9B72hB,EAAM22hB,kBAAmB,EACzB32hB,EAAMwvH,cACFxvH,EAAMm7hB,oBACNn7hB,EAAMk2E,UAAUijd,YAEhBn5hB,EAAMyjgB,MAAMk2B,uBAAwB,CACpC,IAAIiC,EAAe57hB,EAAMyjgB,MAAMvhB,mBAC/B05C,EAAajD,iBAAkB,EAC/BiD,EAAapB,uBAAwB,EACrCoB,EAAan6Z,eAAYtmI,EACzBygiB,EAAal6Z,cAAWvmI,EAE5B6E,EAAMs3hB,2BAA4B,IAQ1Cr3hB,KAAK47hB,qBAAuB,SAAUv/hB,GAClC,GAAI0D,EAAMk2E,UAAW,CAmBjB,GAlBAl2E,EAAM2xf,oBAAqB,EAC3B3xf,EAAMm3hB,kBAAmB,EACzBn3hB,EAAMi3hB,sBAAuB,EAC7Bj3hB,EAAMk3hB,uBAAwB,EAC9Bl3hB,EAAM42hB,cAAe,EACjB52hB,EAAMq2hB,eACiB,IAAnBr2hB,EAAM0gH,SACN1gH,EAAM0gH,SAAW,GAGjB1gH,EAAM0gH,SAAW,EACjB1gH,EAAMq2hB,gBAAiB,IAI3Br2hB,EAAMq2hB,gBAAiB,EACvBr2hB,EAAM0gH,SAAW,GAEQ,IAAzBpkH,EAAMu9D,QAAQp9D,OAAc,CAC5BuD,EAAM87hB,MAAQx/hB,EAAMu9D,QAAQ,GAAGC,QAC/B95D,EAAM+7hB,MAAQz/hB,EAAMu9D,QAAQ,GAAGE,QAC3B/5D,EAAMyjgB,MAAMvtb,UAAU2hK,UACtB73O,EAAM62hB,uBAAwB,GAElC72hB,EAAMitb,aAAc,EACpBjtb,EAAM02hB,gCAAiC,EACvC,IAAI9igB,OAAQ,EAKZ,GAJI5zB,EAAMitb,cACNr5Z,EAAQ5zB,EAAMg8hB,oBAAoB1/hB,IAEtCs3B,EAAQ5zB,EAAM85hB,gBAAgBlmgB,GAAO,GACjC5zB,EAAMyjgB,MAAMk2B,uBAAwB,CACpC,IAAIsC,EAAYj8hB,EAAMyjgB,MAAMvhB,mBAAmBg6C,qBAAqBtogB,GACpE5zB,EAAMyjgB,MAAMvhB,mBAAmB03C,sBAAwBqC,EAAUhpa,gBAGjEjzH,EAAMyjgB,MAAMk2B,yBAA2Bj8hB,EAAkBsC,EAAMyjgB,MAAMvhB,mBAAmB03C,yBACxF55hB,EAAMyjgB,MAAMvhB,mBAAmBy2C,iBAAkB,GAErD,IAAI3rhB,EAAIhN,EAAMyjgB,MAAMvtb,UAAUh3D,IAAI2b,SAAS7tB,EACvCC,EAAIjN,EAAMk2E,UAAUimd,eAAen8hB,EAAMyjgB,MAAMvtb,UAAUh3D,IAAKlf,EAAMyjgB,MAAMvtb,UAAU2hK,SAAW,EAEnG73O,EAAM82hB,0BAA6BljgB,EAAM3mB,GAAKA,GAAK2mB,EAAM3mB,GAAKA,EAAI,IAAM2mB,EAAM3mB,GAAKA,GAAK2mB,EAAM3mB,GAAKA,EAAI,MAC/F2mB,EAAM5mB,GAAKA,GAAK4mB,EAAM5mB,GAAKA,EAAI,IAAM4mB,EAAM5mB,GAAKA,GAAK4mB,EAAM5mB,GAAKA,EAAI,IAAO,EAAI,EAClFhN,EAAMyjgB,MAAMvtb,UAAU2hK,SAA8C,IAAnC73O,EAAM82hB,2BACxC9phB,EAAIhN,EAAMyjgB,MAAMvtb,UAAU14E,MAAMq9B,SAAS7tB,EACzCC,EAAIjN,EAAMk2E,UAAUimd,eAAen8hB,EAAMyjgB,MAAMvtb,UAAU14E,OAAO,GAAS,EAEzEwC,EAAM82hB,0BAA6BljgB,EAAM3mB,GAAKA,GAAK2mB,EAAM3mB,GAAKA,EAAI,IAAM2mB,EAAM3mB,GAAKA,GAAK2mB,EAAM3mB,GAAKA,EAAI,MAC/F2mB,EAAM5mB,GAAKA,GAAK4mB,EAAM5mB,GAAKA,EAAI,IAAM4mB,EAAM5mB,GAAKA,GAAK4mB,EAAM5mB,GAAKA,EAAI,IAAO,EAAI,IAG1FtP,EAAkBsC,EAAMyjgB,MAAMvU,oBAAsBlvf,EAAMyjgB,MAAMvU,kBAAkB2nB,qBACnF72gB,EAAMyjgB,MAAMvU,kBAAkB2nB,oBAAoB30gB,SAElDlC,EAAM82hB,0BAA4Bx6hB,EAAMu9D,QAAQp9D,OAAS,IACzDH,EAAMspB,iBAEV5lB,EAAMyrB,MAAQrrB,WAAW,WACrBJ,EAAMq2hB,gBAAiB,GACxB,OAQXp2hB,KAAKm8hB,oBAAsB,SAAU9/hB,GACjC,IACIu9hB,EADA7hd,EAAQ17E,EAAMu9D,QAElB,IAAKn8D,EAAkBsC,EAAMk2E,WAAY,CAErC,GAAIl2E,EAAMyjgB,MAAM1U,cAAgB/uf,EAAMyjgB,MAAMk2B,wBAA0B35hB,EAAMyjgB,MAAMvhB,mBAAmBy2C,gBAMjG,OALAr8hB,EAAMspB,sBACD5lB,EAAMyjgB,MAAMvhB,mBAAmBs4C,wBAChCx6hB,EAAMyjgB,MAAMvhB,mBAAmBm6C,2BAA2B//hB,GAC1D0D,EAAMk2E,UAAUohc,MAAM3ygB,MAAMosC,QAAU,SAI9C,GAAI/wC,EAAMitb,YAAa,CACnB4sG,EAAc75hB,EAAMg8hB,oBAAoB1/hB,GACxC,IAAIurgB,EAAa7ngB,EAAM85hB,gBAAgBD,GAAa,GACpD,GAAI75hB,EAAM82hB,yBAA2B,EAAsC,CACvEx6hB,EAAMspB,iBACN,IAAIg1gB,EAAS/yB,EAAW56f,EACpBk7Y,EAAenoZ,EAAMyjgB,MAAMvtb,UAAUh3D,IAErC2of,EAAW56f,GAAK,GAChB2thB,GAAU/yB,EAAW56f,EAAI,EAAI,EAAI46f,EAAW56f,EAAI,GAGhD2thB,GAAU,KAEdzyI,EAAkD,IAAnCnoZ,EAAM82hB,yBAAiC92hB,EAAMk2E,UAAU14E,MAAQwC,EAAMk2E,UAAUh3D,IAC9F2of,EAAa,IAAI/yd,GAAM+yd,EAAW76f,EAAG4thB,GACrC56hB,EAAMyjgB,MAAMvtb,UAAU4kd,iBAAiBjzB,EAAY1/G,GACnDnoZ,EAAM02hB,gCAAiC,EAE3C12hB,EAAMk2E,UAAU6kd,4BAGxB,GAAI/id,EAAMv7E,OAAS,EAAG,CAClBH,EAAMspB,iBACN5lB,EAAMitb,aAAc,EACpBjtb,EAAM87hB,OAAS9jd,EAAM,GAAGle,QAAUke,EAAM,GAAGle,SAAW,EACtD95D,EAAM+7hB,OAAS/jd,EAAM,GAAGje,QAAUie,EAAM,GAAGje,SAAW,EAEtD,IAAIuie,EAAchwhB,KAAKQ,KAAKR,KAAKkiE,IAAKwJ,EAAM,GAAGle,QAAUke,EAAM,GAAGle,QAAU,GAAKxtD,KAAKkiE,IAAKwJ,EAAM,GAAGje,QAAUie,EAAM,GAAGje,QAAU,IAC7H/5D,EAAMu2hB,eAAiB,EACnB+F,EAAct8hB,EAAMu2hB,cACpBv2hB,EAAMu8hB,mBAAmBjgiB,GAEpBggiB,EAAct8hB,EAAMu2hB,eACzBv2hB,EAAMw8hB,kBAAkBlgiB,GAGvB0D,EAAM+0E,WAAa,GACK,IAAzB/0E,EAAMu2hB,eACF+F,EAAct8hB,EAAMu2hB,eACpBv2hB,EAAMw8hB,kBAAkBlgiB,IAIF,IAAzB0D,EAAMu2hB,eACPv2hB,EAAM+0E,WAAa,GACfund,EAAct8hB,EAAMu2hB,eACpBv2hB,EAAMw8hB,kBAAkBlgiB,GAIpC0D,EAAMu2hB,cAAgB+F,IAQ9Br8hB,KAAK64hB,kBAAoB,SAAUx8hB,GAC/B,IAAKoB,EAAkBsC,EAAMk2E,WAAY,CACrC,IAAItiD,EAAQ5zB,EAAMg8hB,oBAAoB1/hB,GAClCurgB,EAAa7ngB,EAAM85hB,gBAAgBlmgB,GAAO,GACV,IAAhCt3B,EAAM2nE,eAAexnE,SACrBuD,EAAM87hB,WAAQ3giB,EACd6E,EAAM+7hB,WAAQ5giB,GAEV6E,EAAMitb,aAAgBjtb,EAAM02hB,gCAAmCh5hB,EAAkBsC,EAAM4+O,cAAiBlhP,EAAkBsC,EAAMyjgB,MAAMvtb,UAAU14E,SACzG,IAAnCwC,EAAM82hB,2BACN92hB,EAAM26hB,+BAA+B,IAAI7lf,GAAM+yd,EAAW76f,EAAG66f,EAAW56f,GAAIjN,EAAM0gH,UAC3D,IAAnB1gH,EAAM0gH,UACN1gH,EAAMk2E,UAAU+kd,2BAA2BrngB,EAAOi0e,IAGtD7ngB,EAAMyjgB,MAAMvtb,UAAU2hK,SACtB73O,EAAMk2E,UAAU2/c,sBAEpB71hB,EAAMk2E,UAAU6kd,4BAEfr9hB,EAAkBsC,EAAM4+O,cAAiBlhP,EAAkBsC,EAAMk2E,UAAU14E,QACxEwC,EAAM02hB,kCAAmC12hB,EAAMk2E,UAAU2hK,SAC7D73O,EAAMk2E,UAAUgjc,kBAAoBl5gB,EAAMyjgB,MAAMk2B,wBAC5C35hB,EAAMyjgB,MAAMk2B,yBAA2B35hB,EAAMyjgB,MAAMvhB,mBAAmBy2C,mBAC1E34hB,EAAMk2E,UAAUold,yBAAyBzzB,GAAY,GAEzD7ngB,EAAMitb,aAAc,EACpBjtb,EAAM82hB,yBAA2B,EACjC92hB,EAAM62hB,uBAAwB,EAC9B72hB,EAAM02hB,gCAAiC,GAEvC12hB,EAAMyjgB,MAAMk2B,wBAA0B35hB,EAAMyjgB,MAAMvhB,mBAAmBy2C,kBACrE34hB,EAAMyjgB,MAAMvhB,mBAAmBu5C,kBAC/Bz7hB,EAAMyjgB,MAAMvhB,mBAAmBy2C,iBAAkB,EACjD34hB,EAAMyjgB,MAAMvhB,mBAAmBs4C,uBAAwB,EACvDx6hB,EAAM07hB,iBAAiB17hB,EAAMyjgB,MAAMvtb,UAAU14E,MAAOwC,EAAMyjgB,MAAMvtb,UAAUh3D,KAC1Elf,EAAMyjgB,MAAMvhB,mBAAmBy5C,gCAG/B37hB,EAAMyjgB,MAAMk2B,wBAA0B35hB,EAAMyjgB,MAAMvhB,mBAAmBw2C,uBAAyB14hB,EAAM42hB,eACpG52hB,EAAM08D,WAAW/3D,MAAMosC,QAAU,OACjC/wC,EAAM4kI,SAASjgI,MAAMosC,QAAU,QAKnCz0C,EAAMspB,iBAEV5lB,EAAMu2hB,eAAiB,EACvBv2hB,EAAM42hB,cAAe,EAChB52hB,EAAMq2hB,iBACPr2hB,EAAM0gH,SAAW,GAEjB1gH,EAAMm7hB,oBACNn7hB,EAAMk2E,UAAUijd,aAOxBl5hB,KAAKw8hB,gBAAkB,SAAUngiB,GACzBmP,GAAQqb,UACJjrB,OAAO6giB,eAAeC,eAAiB38hB,EAAMoJ,OAAO3M,QACpDuD,EAAMk2E,UAAU0md,4BAA4B58hB,EAAMu4hB,YAAYp4d,UAAU1jE,SAG5EH,EAAM6rB,SAA8B,KAAlB7rB,EAAM8rB,SAAkC,KAAhB9rB,EAAMkhH,SAChDx9G,EAAM22hB,kBAAmB,IAOjC12hB,KAAK48hB,kBAAoB,SAAUvgiB,GAC/B,IAAIwgiB,GAAY,EACZC,GAAiBzgiB,MAASA,EAAOwgiB,WAAa,EAAOvgiB,OAAQyD,EAAMyjgB,OAEvE,GADAzjgB,EAAMyjgB,MAAM78e,QAAQ,UAAWm2gB,IAC3BA,EAAaD,UAAjB,CAGA,IAAIx/hB,EAAMhB,EAAMkhH,OAASlhH,EAAM8rB,QAC3BmD,KAAQjvB,EAAM6rB,UAAW7rB,EAAMwyI,UAA4B,KAARxxI,EACnD6mF,EAAQ7nF,EAAMghH,SAAWhhH,EAAMghH,SAAqB,KAARhgH,EAC5Cu9G,EAAMv+G,EAAM8gH,OAAS9gH,EAAM8gH,OAAmB,KAAR9/G,EAC1C,GAAIiuB,IAAS44D,IAAU02B,EACnB,OAAQv9G,GACJ,KAAK,GACDhB,EAAMspB,iBACN5lB,EAAMyjgB,MAAMzigB,QACZ87hB,GAAY,EACZ,MACJ,KAAK,GACDxgiB,EAAMspB,iBACN5lB,EAAMyjgB,MAAM3va,KAAkC,KAA7B9zF,EAAMyjgB,MAAM7hB,aAAsB,SAAW5hf,EAAMyjgB,MAAM7hB,aAAc,QACxFk7C,GAAY,EAInBA,GAAcp/hB,EAAkBsC,EAAMk2E,YACvCl2E,EAAMk2E,UAAU2md,kBAAkBvgiB,EAAOivB,EAAM44D,EAAO02B,GAEtDiib,GACAxgiB,EAAMspB,mBAGd3lB,KAAKwjgB,MAAQA,EACbxjgB,KAAK+nP,SACL/nP,KAAKoyG,OAAS,IAAIm+a,GAASvwhB,MAC3BA,KAAK40S,SACL50S,KAAKw0f,iBACLx0f,KAAKqyf,gBAAkB,IAAI+E,GAAiBp3f,MAC5CA,KAAKiyf,gBAAkB,IAAIkF,GAAiBn3f,MAC5CA,KAAKkjhB,cAAgB,IAAI3gS,GACzBviP,KAAK63f,kBACL73f,KAAKuD,OAAS,IAAIkxf,GAClBz0f,KAAKm3hB,iBAAmB,IAAI50S,GAC5BviP,KAAK+8hB,kBACL/8hB,KAAKg9hB,UAAY,IAAIz6S,GAg2CzB,OA91CAjkP,OAAOuJ,eAAeupf,EAAah2f,UAAW,mBAM1CsM,IAAK,WASD,OARIjK,EAAkBuC,KAAKi9hB,qBACvBj9hB,KAAKi9hB,kBAAoBz8hB,SAASW,cAAc,UAChDnB,KAAKi9hB,kBAAkB3pc,WAAW,MAAMO,QAEvCp2F,EAAkBuC,KAAKw1hB,gBACrBx1hB,KAAKi9hB,kBAAkB5ohB,gBAAkBrU,KAAKw1hB,eACjDx1hB,KAAKw1hB,cAAc7zhB,YAAY3B,KAAKi9hB,mBAEjCj9hB,KAAKi9hB,mBAEhBt1hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,mBAK1CsM,IAAK,WASD,OARIjK,EAAkBuC,KAAKk9hB,qBACvBl9hB,KAAKk9hB,kBAAoB18hB,SAASW,cAAc,UAChDnB,KAAK0whB,gBAAgBp9b,WAAW,MAAMO,QAErCp2F,EAAkBuC,KAAKw1hB,gBACrBx1hB,KAAKk9hB,kBAAkB7ohB,gBAAkBrU,KAAKw1hB,eACjDx1hB,KAAKw1hB,cAAc7zhB,YAAY3B,KAAKk9hB,mBAEjCl9hB,KAAKk9hB,mBAEhBv1hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,oBAK1CsM,IAAK,WACD,OAAO1H,KAAKywhB,gBAAgBn9b,WAAW,OAE3C3rF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,oBAK1CsM,IAAK,WACD,OAAO1H,KAAK0whB,gBAAgBp9b,WAAW,OAE3C3rF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,wBAI1CsM,IAAK,WACD,GAA0B,IAAtB1H,KAAK+nP,MAAMvrP,OAGf,OAAOwD,KAAK+nP,MAAM/nP,KAAK+nP,MAAMvrP,OAAS,IAE1CmL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,iBAK1CsM,IAAK,WACD,OAAO1H,KAAKm9hB,iBAEhBx1hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,cAK1CsM,IAAK,WACD,OAAO1H,KAAK03hB,oBAEhBrwhB,IAAK,SAAUtK,GACPiD,KAAK03hB,qBAAuB36hB,IAC5BiD,KAAKq2hB,cAAgBr2hB,KAAK80E,WAC1B90E,KAAK03hB,mBAAqB36hB,EAC1BiD,KAAKg5E,WAAW08c,cAAc34hB,GAC9BiD,KAAKwjgB,MAAM1ub,WAAa/3E,IAGhC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,aAK1CsM,IAAK,WACD,OAAO1H,KAAKwjgB,MAAMvtb,WAEtBtuE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,sBAK1CsM,IAAK,WACD,OAAO1H,KAAKi2hB,sBAEhB5uhB,IAAK,SAAUtK,GACXiD,KAAKi2hB,qBAAuBl5hB,GAEhC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,oBAK1CsM,IAAK,WACD,OAAO1H,KAAKk2hB,oBAEhB7uhB,IAAK,SAAUtK,GACXiD,KAAKk2hB,mBAAqBn5hB,GAE9B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,UAK1CsM,IAAK,WAID,OAHK1H,KAAKo9hB,gBACNp9hB,KAAKq9hB,aAEFr9hB,KAAKo9hB,gBAEhBz1hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,WAK1CsM,IAAK,WAID,OAHK1H,KAAKs9hB,iBACNt9hB,KAAKu9hB,cAEFv9hB,KAAKs9hB,iBAEhB31hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeupf,EAAah2f,UAAW,eAK1CsM,IAAK,WACD,OAAO1H,KAAKs3hB,eAEhBjwhB,IAAK,SAAUtK,GACXiD,KAAKs3hB,cAAgBv6hB,EACrBiD,KAAKw9hB,qBAAqBx9hB,KAAKs3hB,gBAEnC3vhB,YAAY,EACZC,cAAc,IAElBwpf,EAAah2f,UAAU2hiB,gBAAkB,WAErC/8hB,KAAKm3hB,iBAAiB/yhB,IAAI,SAAU,wDAEpCpE,KAAKm3hB,iBAAiB/yhB,IAAI,YAAa,+ZAEvCpE,KAAKm3hB,iBAAiB/yhB,IAAI,YAAa,8ZAEvCpE,KAAKm3hB,iBAAiB/yhB,IAAI,YAAa,8ZAEvCpE,KAAKm3hB,iBAAiB/yhB,IAAI,YAAa,4ZAEvCpE,KAAKm3hB,iBAAiB/yhB,IAAI,YAAa,8YAEvCpE,KAAKm3hB,iBAAiB/yhB,IAAI,YAAa,8YAEvCpE,KAAKm3hB,iBAAiB/yhB,IAAI,yBAA0B,wDAEpDpE,KAAKm3hB,iBAAiB/yhB,IAAI,iBAAkB,0KAE5CpE,KAAKm3hB,iBAAiB/yhB,IAAI,iBAAkB,0KAE5CpE,KAAKm3hB,iBAAiB/yhB,IAAI,iBAAkB,2KAE5CpE,KAAKm3hB,iBAAiB/yhB,IAAI,iBAAkB,wKAE5CpE,KAAKm3hB,iBAAiB/yhB,IAAI,iBAAkB,0JAE5CpE,KAAKm3hB,iBAAiB/yhB,IAAI,iBAAkB,0JAE5CpE,KAAKm3hB,iBAAiB/yhB,IAAI,YAAa,8JAEvCpE,KAAKm3hB,iBAAiB/yhB,IAAI,OAAQ,gHAElCpE,KAAKm3hB,iBAAiB/yhB,IAAI,OAAQ,mIAElCpE,KAAKm3hB,iBAAiB/yhB,IAAI,OAAQ,mIAElCpE,KAAKm3hB,iBAAiB/yhB,IAAI,OAAQ,mIAElCpE,KAAKm3hB,iBAAiB/yhB,IAAI,OAAQ,mIAElCpE,KAAKm3hB,iBAAiB/yhB,IAAI,OAAQ,mIAElCpE,KAAKm3hB,iBAAiB/yhB,IAAI,OAAQ,mIAElCpE,KAAKm3hB,iBAAiB/yhB,IAAI,OAAQ,mIAElCpE,KAAKm3hB,iBAAiB/yhB,IAAI,OAAQ,oIAKtCgtf,EAAah2f,UAAUi2f,mBAAqB,WACxCrxf,KAAK63f,kBACL73f,KAAKwsB,UACLxsB,KAAKg9hB,UAAUvwe,QACfzsD,KAAKuD,OAAOkpD,QACZzsD,KAAKqyf,gBAAgBmJ,cACrBx7f,KAAKiyf,gBAAgBuJ,eAKzBpK,EAAah2f,UAAU+nhB,oBAAsB,SAAU7/gB,GACnD,IAAI7F,EAAkBuC,KAAKw0f,eAG3B,IAAK,IAAIt4f,EAAI,EAAGA,EAAI8D,KAAKw0f,cAAch4f,OAAQN,IAAK,CAChD,IAAIs+f,EAAex6f,KAAKw0f,cAAct4f,GACtC,GAAIs+f,aAAwB2e,IAAiB3e,EAAaD,iBAAmBj3f,EACzE,OAAOk3f,IAQnBpJ,EAAah2f,UAAUwkhB,YAAc,SAAUt8gB,GAC3C,IAAI7F,EAAkBuC,KAAK40S,OAG3B,IAAK,IAAI14S,EAAI,EAAGA,EAAI8D,KAAK40S,MAAMp4S,OAAQN,IACnC,IAAKuB,EAAkBuC,KAAK40S,MAAM14S,KAAO8D,KAAK40S,MAAM14S,GAAGm+f,SAAW/2f,EAC9D,OAAOtD,KAAK40S,MAAM14S,IAQ9Bk1f,EAAaqsC,mBAAqB,SAAUhhC,GACxC,OAAIA,EAAUrD,qBAAqBY,GACxByC,EAAUrD,UAAUc,YAEtBuC,EAAUrD,qBAAqB+f,KAAkB17gB,EAAkBg/f,EAAUrD,UAAUzza,QACrF82a,EAAUrD,UAAUzza,OAAOpnF,QAAQk+f,IAGlC,GAOhBrL,EAAah2f,UAAUsiiB,aAAe,SAAUC,GAE5C,IAAK,IADDX,KACK9giB,EAAI,EAAGA,EAAI8D,KAAKg9hB,UAAU1/hB,KAAKd,OAAQN,IAAK,CACjD,IAAI0hiB,EAAW59hB,KAAKg9hB,UAAU1/hB,KAAKpB,IAC/ByhiB,GAA2C,IAA1BC,EAASr/hB,QAAQ,OAClCy+hB,EAAUx4hB,KAAKo5hB,GAGvB,OAAOZ,GAMX5rC,EAAah2f,UAAUo0f,qBAAuB,WAC1C,IAAIxuf,EAAUhB,KAAKwjgB,MAAMxigB,QACrBvD,EAAkBuD,KAGtBhB,KACK69hB,qBAAuB18hB,EAAc,OACtCkC,UAAW,iCAEfrC,EAAQW,YAAY3B,KAAK69hB,sBACzB79hB,KAAKu1hB,gBAAkBp0hB,EAAc,OAASmC,GAAItD,KAAKwjgB,MAAMx/W,YAAc,qBAC3EhkJ,KAAKu1hB,gBAAgB7whB,MAAMugE,QAAU,0DACrCjlE,KAAK69hB,qBAAqBl8hB,YAAY3B,KAAKu1hB,iBAC3Cv1hB,KAAKu1hB,gBAAgB3qa,SAAW,EAChC5qH,KAAKu1hB,gBAAgB7whB,MAAMo5hB,QAAU,OACrC99hB,KAAKw1hB,cAAgBr0hB,EAAc,OAASmC,GAAItD,KAAKwjgB,MAAMx/W,YAAc,iBAAkB3gJ,UAAW,oBACtGrD,KAAKu1hB,gBAAgB5zhB,YAAY3B,KAAKw1hB,eACtCx1hB,KAAKw1hB,cAAc9whB,MAAMgI,IAAM,MAC/B1M,KAAKw1hB,cAAc9whB,MAAM8H,KAAO,MAChCxM,KAAKw1hB,cAAc9whB,MAAMwP,SAAW,WACpClU,KAAKw1hB,cAAc9whB,MAAMwvb,cAAgB,OACrC1ob,GAAQqb,SACR7mB,KAAK+9hB,kBAAkB/8hB,GAGvBhB,KAAKg+hB,uBAELh+hB,KAAKwjgB,MAAMk2B,wBACX15hB,KAAKwjgB,MAAMvhB,mBAAmBg8C,yBAElCj+hB,KAAKs5hB,yBAAyBt4hB,GAC9BhB,KAAKstD,OAAS,IAAIyyX,GAAO//a,MACzBA,KAAKk9gB,WAAa,IAAIsX,GAAWx0hB,MACjCA,KAAKg5E,WAAa,IAAIygI,GAAKz5M,MAI3BA,KAAKk+hB,mBACLl+hB,KAAKm+hB,cAKT/sC,EAAah2f,UAAU2iiB,kBAAoB,SAAU/8hB,GACjDhB,KAAKs4hB,YAAc93hB,SAASW,cAAc,OAC1CnB,KAAKs4hB,YAAY8F,gBAAkB,OACnCp+hB,KAAKs4hB,YAAY5zhB,MAAMwP,SAAW,QAClClU,KAAKs4hB,YAAY5zhB,MAAM8H,KAAO,SAC9BxM,KAAKs4hB,YAAY5zhB,MAAMsR,MAAQ,OAC/BhW,KAAKs4hB,YAAY5zhB,MAAMqR,OAAS,OAChC/V,KAAKs4hB,YAAYh1hB,GAAKtC,EAAQsC,GAAK,eACnC9C,SAASuL,KAAKpK,YAAY3B,KAAKs4hB,cAKnClnC,EAAah2f,UAAU4iiB,qBAAuB,WAC1Ch+hB,KAAKq4hB,OAASl3hB,EAAc,UACxBsC,OACI46hB,UAAa,KAAM/+hB,IAAO,mBAC1BoF,MAAS,sDAEbrB,UAAW,qBAQfrD,KAAKu1hB,gBAAgB5zhB,YAAY3B,KAAKq4hB,QACtCr4hB,KAAKq4hB,OAAOiG,gBAAgB58hB,OAC5B1B,KAAKq4hB,OAAOiG,gBAAgBv8hB,MARZ,6RAShB/B,KAAKq4hB,OAAOiG,gBAAgBr8hB,QAC5BjC,KAAKs4hB,YAAct4hB,KAAKq4hB,OAAOiG,gBAAgBvyhB,KAAKqO,SAAS,IAKjEg3e,EAAah2f,UAAU+iiB,UAAY,WAC1B1giB,EAAkBuC,KAAKi2E,YACxBj2E,KAAKi2E,UAAUsod,YAEnBv+hB,KAAKs4hB,YAAY77hB,iBAAiB,QAASuD,KAAKg5hB,SAC3CxthB,GAAQqb,SAOT7mB,KAAKs4hB,YAAY77hB,iBAAiB,QAASuD,KAAK+4hB,sBANhD/4hB,KAAKs4hB,YAAY77hB,iBAAiB,WAAYuD,KAAK84hB,oBACzB,WAAtBtthB,GAAQsb,KAAKyQ,MACbv3B,KAAKs4hB,YAAY77hB,iBAAiB,YAAauD,KAAK23hB,cAM5D33hB,KAAKs4hB,YAAY77hB,iBAAiB,OAAQuD,KAAKi5hB,YAC/Cj5hB,KAAKs4hB,YAAY77hB,iBAAiB,UAAWuD,KAAK48hB,mBAClD58hB,KAAKs4hB,YAAY77hB,iBAAiB,mBAAoBuD,KAAK63hB,kBAC3D73hB,KAAKs4hB,YAAY77hB,iBAAiB,oBAAqBuD,KAAKi4hB,oBAC5Dj4hB,KAAKs4hB,YAAY77hB,iBAAiB,iBAAkBuD,KAAKo4hB,gBACzDp4hB,KAAKu1hB,gBAAgB94hB,iBAAiB,SAAUuD,KAAK4kI,eACrD5kI,KAAKu1hB,gBAAgB94hB,iBAAiB,YAAauD,KAAKw5hB,qBACxDx5hB,KAAKu1hB,gBAAgB94hB,iBAAiB,UAAWuD,KAAK48hB,mBACtD58hB,KAAKu1hB,gBAAgB94hB,iBAAiB,YAAauD,KAAKs6hB,qBACxDt6hB,KAAKu1hB,gBAAgB94hB,iBAAiB,cAAeuD,KAAKu5hB,eAC1Dv5hB,KAAKu1hB,gBAAgB94hB,iBAAiB,WAAYuD,KAAK+6hB,aACvD/6hB,KAAKu1hB,gBAAgB94hB,iBAAiB,UAAWuD,KAAK24hB,mBACtD/8hB,OAAOa,iBAAiB,SAAUuD,KAAKo5hB,gBACvCx9hB,OAAOa,iBAAiB,QAASuD,KAAKw8hB,iBACtC5giB,OAAOa,iBAAiB,UAAWuD,KAAKw4hB,gBACxC58hB,OAAOa,iBAAiB,WAAYuD,KAAKw4hB,gBACzCx4hB,KAAKu1hB,gBAAgB94hB,iBAAiB,aAAcuD,KAAK47hB,sBACzD57hB,KAAKu1hB,gBAAgB94hB,iBAAiB,YAAauD,KAAKm8hB,qBACxDn8hB,KAAKu1hB,gBAAgB94hB,iBAAiB,WAAYuD,KAAK64hB,mBACnDvpc,UAAUF,UAAU1/E,MAAM,YAC1B1P,KAAKu1hB,gBAAgB94hB,iBAAiB,iBAAkBuD,KAAKg5E,WAAWs8c,sBAE5Et1hB,KAAKu1hB,gBAAgB94hB,iBAAiB,aAAcuD,KAAKg5E,WAAWs8c,uBAExElkC,EAAah2f,UAAU+8hB,0BAA4B,WAC/C,OAAOn4hB,KAAKs4hB,YAAYr8gB,aAK5Bm1e,EAAah2f,UAAU08hB,uBAAyB,WAC5C,IAAInkgB,EAAQ3zB,KAAKi2E,UAAUuod,QAAQx+hB,KAAKi2E,UAAU14E,OAC9CgwK,EAAOvtK,KAAKi2E,UAAUwod,iBAAiBz+hB,KAAKi2E,UAAU14E,OAEtDw5f,GADY/2f,KAAKi2E,UAAUyod,gBAAgB1+hB,KAAKwjgB,MAAMvtb,UAAU14E,OAChDgwK,EAAKq4V,YAAY,GAAG7O,eACpCvqf,EAAO+gK,EAAKurV,kBAAkB/rf,EAAK+xf,GAAcO,oBAAoBtI,EAAc76O,YAAcl8Q,KAAK80E,WACtGpoE,EAAMinB,EAAM3mB,EACZowc,EAAY25C,EAAc35C,UAAY25C,EAAc76O,WAAa66O,EAAc36O,YAC/EuiR,EAAc,QAAUnyhB,EAAO,MACnCmyhB,GAAe,OAASjyhB,EAAM,MAC9BiyhB,GAAe,SAAY7/B,GAAcO,oBAAoBjiD,GAAap9c,KAAK80E,WAAc,MAC7F6pd,GAAe,oDACf3+hB,KAAKq4hB,OAAO70hB,aAAa,QAASm7hB,GAClC,IAAIj6hB,EAAQ,kFACZA,GAAS,gBAAkBivB,EAAM5mB,EAAIP,GAAQ,MAC7C9H,GAAS,4DACTA,GAAS,aAAgBo6f,GAAcO,oBAAoBr/f,KAAKi2E,UAAUo8a,gBAAgBjje,UAAYpvB,KAAK80E,WAAc,MACzHpwE,GAAS,cAAgB1E,KAAKi2E,UAAUo8a,gBAAgB7ie,WAAa,IACrE9qB,GAAS,2DACT1E,KAAKs4hB,YAAY90hB,aAAa,QAASkB,IAK3C0sf,EAAah2f,UAAUiiiB,WAAa,WAC3Br9hB,KAAKo9hB,iBACNp9hB,KAAK4+hB,aAAez9hB,EAAc,OAASkC,UAAW,oBACtD7C,SAASuL,KAAKpK,YAAY3B,KAAK4+hB,cAC/B5+hB,KAAKo9hB,eAAiB,IAAI1ka,IACtBvxH,OAAQ3G,SAASuL,KAAM0uH,eAAe,EACtCK,eAAe,EAAMxjG,SAAS,EAAOthB,MAAO,MAAOojH,SAAS,EAAMllH,UAAYkC,EAAG,SAAUC,EAAG,UAAYkxD,OAAQ,KAEtHvnE,KAAKo9hB,eAAe17hB,KAAO1B,KAAKi2E,UAAUijd,UAC1Cl5hB,KAAKo9hB,eAAe3iY,YAAcz6J,KAAKuvH,YACvCvvH,KAAKo9hB,eAAevsf,SAAS7wC,KAAK4+hB,gBAM1CxtC,EAAah2f,UAAUmiiB,YAAc,WACjC,IAAKv9hB,KAAKs9hB,gBAAiB,CACvB,IAAIn2hB,EAAShG,EAAc,OAASkC,UAAW,oBAC/C7C,SAASuL,KAAKpK,YAAYwF,GAC1BnH,KAAKs9hB,gBAAkB,IAAI5ka,IACvBvxH,OAAQ3G,SAASuL,KAAM0uH,eAAe,EACtCK,eAAe,EAAMxjG,SAAS,EAAOthB,MAAO,MAAOojH,SAAS,EAAMllH,UAAYkC,EAAG,SAAUC,EAAG,OAASkxD,OAAQ,KAEnHvnE,KAAKs9hB,gBAAgBzsf,SAAS1pC,KAOtCiqf,EAAah2f,UAAU26hB,aAAe,WAClC/1hB,KAAKy0hB,iBAAiBh8E,UAAU,EAAG,EAAGz4c,KAAKywhB,gBAAgBz6gB,MAAOhW,KAAKywhB,gBAAgB16gB,QACvF/V,KAAKgxhB,iBAAiBv4E,UAAU,EAAG,EAAGz4c,KAAK0whB,gBAAgB16gB,MAAOhW,KAAK0whB,gBAAgB36gB,SAM3Fq7e,EAAah2f,UAAUs5f,kBAAoB,SAAU19O,GACjDh3Q,KAAK+1hB,eACD/1hB,KAAKwjgB,MAAM1U,eACX9uf,KAAKwjgB,MAAM1U,aAAa+vC,aACxB7+hB,KAAKwjgB,MAAM1U,aAAagwC,cAAgB,GAE5C9+hB,KAAK60hB,wBACL70hB,KAAKwjgB,MAAM3U,kBAAmB,EAC9B,IAAK,IAAI3yf,EAAI,EAAGA,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,IACnC8D,KAAK+nP,MAAM7rP,GAAG0pgB,YAAY,GAAGvzf,UAEjCrS,KAAK+nP,SACAtqP,EAAkBuC,KAAKkjhB,gBACxBljhB,KAAKkjhB,cAAcz2d,QAElBhvD,EAAkBuC,KAAKwjgB,MAAMu0B,gBAC9B/3hB,KAAKwjgB,MAAMu0B,cAAc1lhB,UAE7BrS,KAAKwjgB,MAAM3U,kBAAmB,EAC9B7uf,KAAKstD,OAAO6sd,eAAgB,EAC5Bn6gB,KAAKstD,OAAOktd,YAAYxjQ,GACpBh3Q,KAAKwjgB,MAAMvtb,WACXj2E,KAAKwjgB,MAAMvtb,UAAUm6I,YAAYpwN,KAAKwjgB,MAAMu7B,cAAe/+hB,KAAKwjgB,MAAMu7B,eAEtE/+hB,KAAKwjgB,MAAM7T,mBACX3vf,KAAKwjgB,MAAM7T,kBAAkBE,qBAAoB,GAErD7vf,KAAKwjgB,MAAMhS,sBAKfJ,EAAah2f,UAAU8iiB,iBAAmB,WACtC,IAAIx5hB,EAAQ,+GAERw6G,EAAU,+KACdl/G,KAAKy8D,WAAat7D,EAAc,OAASkC,UAAW,kBAAmBE,OAAQmB,IAC/E,IAAInH,EAAQ4D,EAAc,OAASoC,OAAQ27G,IAC3Cl/G,KAAK2kI,SAAWxjI,EAAc,OAASkC,UAAW,kBAAmBE,OAAQmB,IAC7E1E,KAAKy8D,WAAW/3D,MAAMosC,QAAU,OAChC,IAAI7xB,EAAM9d,EAAc,OAASoC,OAAQ27G,IACzCl/G,KAAKy8D,WAAW96D,YAAYpE,GAC5ByC,KAAK2kI,SAAShjI,YAAYsd,GAC1Bjf,KAAK2kI,SAASjgI,MAAMosC,QAAU,OAC9B9wC,KAAKu1hB,gBAAgB5zhB,YAAY3B,KAAKy8D,YACtCz8D,KAAKu1hB,gBAAgB5zhB,YAAY3B,KAAK2kI,WAM1CysX,EAAah2f,UAAUy6hB,wBAA0B,WAC7C,GAAsC,SAAlC71hB,KAAKy8D,WAAW/3D,MAAMosC,UAAuBrzC,EAAkBuC,KAAKi2E,WACpE,GAAKj2E,KAAKi2E,UAAU2hK,QAkBhB53O,KAAKi2E,UAAU2/c,0BAlBU,CACzB,IAAI5ohB,EAAIhN,KAAKi2E,UAAUimd,eAAel8hB,KAAKi2E,UAAU14E,OAAO,GACxDgwK,EAAOvtK,KAAKi2E,UAAUslO,QAAQv7S,KAAKi2E,UAAU14E,MAAM05f,WAGnDzuD,GAAWj7R,EAAKurV,kBAAkB9rf,EAFzBhN,KAEoCg/hB,SAAWh/hB,KAAK+nP,MAAMxpP,QAAQgvK,GAAQ,IAAMvtK,KAAK80E,WAFrF90E,KAEyGg/hB,SAAWh/hB,KAAK+nP,MAAMxpP,QAAQgvK,GAAQ,GAE5JvtK,KAAKy8D,WAAW/3D,MAAM8H,KAAO+gK,EAAKurV,kBAAkB/rf,GAAKV,KAAK0zB,MAAM//B,KAAKi2E,UAAU14E,MAAMq9B,SAAS7tB,GAAK/M,KAAK80E,WAAa,IAAM,KAC/H90E,KAAKy8D,WAAW/3D,MAAMgI,IAAM87b,EAAW,EAAMxoc,KAAK80E,WAAc,KAC3D90E,KAAKi2E,UAAU2hK,UAChB5qO,EAAIhN,KAAKi2E,UAAUimd,eAAel8hB,KAAKi2E,UAAUh3D,KAAK,GACtDsuJ,EAAOvtK,KAAKi2E,UAAUslO,QAAQv7S,KAAKi2E,UAAUh3D,IAAIg4e,YAGrDj3f,KAAK2kI,SAASjgI,MAAM8H,KAAO+gK,EAAKurV,kBAAkB/rf,GAAKV,KAAK0zB,MAAM//B,KAAKi2E,UAAUh3D,IAAI2b,SAAS7tB,GAAK/M,KAAK80E,WAAa,IAAM,KAC3H90E,KAAK2kI,SAASjgI,MAAMgI,IAAM87b,EAAWx7b,EAAIhN,KAAK80E,WAAc,OAOxEs8a,EAAah2f,UAAUkgiB,sBAAwB,SAAU1B,GACrD,IAAI/zB,EAAS7lgB,KAAKq6hB,cAAcT,GAChC,IAAKn8hB,EAAkBoogB,IAAWA,EAAOzrf,SAAS,aAAc+uf,GAAoB,CAChF,IAAI38f,EAAOxM,KAAKi/hB,aAAap5B,GACzB7vf,EAAQ6vf,EAAOzrf,SAAS,GAAGpE,MAC3BD,EAAS8vf,EAAOzrf,SAAS,GAAGrE,OAChC,GAAI/V,KAAKk/hB,aAAa1yhB,EAAMq5f,EAAO5O,UAAUjqf,EAAGgJ,EAAOD,EAAQ6jhB,GAE3D,OADA55hB,KAAKm/hB,oBAAsBt5B,GACpB,EAGf,OAAO,GAWXzU,EAAah2f,UAAU8jiB,aAAe,SAAUnyhB,EAAGC,EAAGgJ,EAAOD,EAAQ6xf,GACjE,OAAKA,EAAW76f,EAAIA,GAAK66f,EAAW76f,GAAKA,EAAIiJ,GAAW4xf,EAAW56f,EAAIA,GAAK46f,EAAW56f,GAAKA,EAAI+I,GAQpGq7e,EAAah2f,UAAU6jiB,aAAe,SAAUp5B,GAC5C,IAAIr5f,EAAOq5f,EAAO5O,UAAUlqf,EACxBklf,EAAkB4T,EAAO5O,UAAUhF,gBACnCjyf,KAAKi2E,UAAU2uc,qBAAqB/e,KACE,UAAlC5T,EAAgBjvd,eAChBx2B,GAAQsyf,GAAcO,oBAAoBpN,EAAgBrjP,iBAC1DpiQ,GAAQsyf,GAAcO,oBAAoBpN,EAAgBmL,aAG1D5wf,GAAQsyf,GAAcO,oBAAoBpN,EAAgBrjP,kBAGlE,IAAI5tQ,EAAU6kgB,EAAOzrf,SAAS,GAI9B,OAHIpZ,aAAmBmogB,KACnB38f,GAAQxL,EAAQg+B,OAAOxyB,MAEpBA,GAKX4kf,EAAah2f,UAAUq+hB,oBAAsB,SAAUp9hB,GACnD2D,KAAK22hB,cAAe,EAEpB,OAAkB,KADLt6hB,EAAMkhH,OAASlhH,EAAMqqI,SAMtC0qX,EAAah2f,UAAU2giB,oBAAsB,SAAU1/hB,GACnD,IACIsP,EADgB3L,KAAKu1hB,gBACE3phB,wBACvBwzhB,EAAoB/iiB,EAAMu9D,QAAQ,GAClCn8D,EAAkB2hiB,KAClBA,EAAoB/iiB,EAAM2nE,eAAe,IAE7C,IAAIn4D,EAAUuzhB,EAAkBtzhB,MAAQH,EAAOa,KAC3CP,EAAUmzhB,EAAkBlzhB,MAAQP,EAAOe,IAC/C,OAAO,IAAImoC,GAAMhpC,EAASI,IAM9Bmlf,EAAah2f,UAAUmhiB,kBAAoB,SAAUlgiB,GACjD2D,KAAKq2hB,cAAgBr2hB,KAAK80E,WAC1B,IAAIuqd,EAAoBr/hB,KAAK80E,WAAa,IACtCuqd,EAAoB,GAAKA,EAAoB,IAC7CA,GAAwC,KAExCA,EAAoB,KACpBA,EAAoB,IAExBr/hB,KAAK80E,WAAauqd,GAMtBjuC,EAAah2f,UAAUkhiB,mBAAqB,SAAUjgiB,GAClD2D,KAAKq2hB,cAAgBr2hB,KAAK80E,WAC1B,IAAIuqd,EAAoBr/hB,KAAK80E,WAAa,IACtCuqd,EAAoB,IACpBA,GAAwC,KAExCA,EAAoB,IACpBA,EAAoB,GAExBr/hB,KAAK80E,WAAauqd,GAMtBjuC,EAAah2f,UAAUs9f,aAAe,SAAUnrV,GAE5C,OADYA,EAAKurV,kBAAkB9if,OAOvCo7e,EAAah2f,UAAUo5gB,WAAa,SAAUjnW,GACtCvtK,KAAK2+O,cAAgBpxE,IACrBvtK,KAAK2+O,iBAAczjP,GAEvB,IAAI4W,EAAQ9R,KAAK+nP,MAAMxpP,QAAQgvK,GAE/BvtK,KAAK+nP,MAAMp/N,OAAO7W,EAAO,GAIzB,IAAKrU,EADQuC,KACiB8xf,eADjB9xf,KAEe,aAAEzB,QAAQgvK,IAAS,EAAG,CAC1C,IAAIC,EAHCxtK,KAG+B,aAAEzB,QAAQgvK,GAHzCvtK,KAIe,aAAE2oB,OAAO6kJ,EAAW,GAKhD,IAAK,IAAItxK,EAAI,EAAGA,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,IACjB8D,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB/if,OAG5Cw3J,EAAKurV,kBAAkB/if,OAEjC,IAAIrJ,EAAM,GAIV,GAHIoF,EAAQ,IACRpF,GAAO1M,KAAK+nP,MAAMj2O,EAAQ,GAAGgnf,kBAAkBnsf,SAEpC,IAAXmF,EACA,IAAS5V,EAAI4V,EAAO5V,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,KAEvCqxK,EAAOvtK,KAAK+nP,MAAM7rP,IAEb48f,kBAAoB,IAAI/ie,GAAKw3I,EAAKurV,kBAAkB/rf,EAAGL,EAAK6gK,EAAKurV,kBAAkB9if,MAAOu3J,EAAKurV,kBAAkB/if,QACtHrJ,EAAM6gK,EAAKurV,kBAAkBnsf,OAAS,GACtC4gK,EAAK8mW,4BAA6B,GAa9CjjB,EAAah2f,UAAUk7f,iBAAmB,WACtC,IACIt1f,EAAUhB,KAAKwjgB,MAAMlS,2BADZtxf,KAENs5hB,yBAAyBt4hB,GAFnBhB,KAGN4uf,mBACFnxf,EAAkBuC,KAAKi2E,YACxBj2E,KAAKi2E,UAAU2/c,uBAMvBxkC,EAAah2f,UAAUk+hB,yBAA2B,SAAUt4hB,GACxD,IAAKvD,EAAkBuD,GAAU,CAC7B,IAAIkyB,EAAOlyB,EAAQ4K,wBACfoK,EAAQ,EACRD,EAAS,EAEb,GADAA,EAASmd,EAAKnd,OAAS,EAAImd,EAAKnd,OAAS,IACrC/V,KAAKwjgB,MAAM7T,mBAAqB3vf,KAAKwjgB,MAAM7T,kBAAkBC,kBAAmB,CAChF,IAAI0vC,EAAct/hB,KAAKwjgB,MAAM7T,kBAAkB4vC,YAAY3zhB,wBAC3DoK,EAASkd,EAAKld,MAAQsphB,EAAYtphB,MAAS,EAAKkd,EAAKld,MAAQsphB,EAAYtphB,MAAS,SAGlFA,EAAQkd,EAAKld,MAAQ,EAAIkd,EAAKld,MAAQ,IAE1ChW,KAAKu1hB,gBAAgB7whB,MAAMqR,OAASA,EAAO7I,WAAa,KACxDlN,KAAKu1hB,gBAAgB7whB,MAAMsR,MAAQ3J,KAAKqmB,KAAK1c,GAAS,KACtDhW,KAAKm9hB,gBAAkB,IAAIpngB,GAAK,EAAG,EAAG/f,EAAOD,GAC7C/V,KAAKywhB,gBAAgBz6gB,MAAQA,EAC7BhW,KAAKywhB,gBAAgB16gB,OAASA,EAC9B/V,KAAK0whB,gBAAgB16gB,MAAQA,EAC7BhW,KAAK0whB,gBAAgB36gB,OAASA,IAOtCq7e,EAAah2f,UAAU+/gB,yBAA2B,SAAUjT,EAAOs3B,EAAc5Z,GAC7E,IAAIxoB,EAAa0B,GAAcO,oBAAoB6I,EAAM9K,YACrDC,EAAcyB,GAAcO,oBAAoB6I,EAAM7K,aAC1D,GAAImiC,EACA,GAAIt3B,aAAiBjB,IAAe2e,EAAiB,CACjD,IAAIlJ,EAAckJ,EAAgB,GAClC5lhB,KAAK26gB,iBAAiB5tgB,EAAI/M,KAAKo8gB,WAAWrvgB,EAAI2vgB,EAAY3vgB,EAC1D/M,KAAK26gB,iBAAiB3kgB,MAAQhW,KAAKo8gB,WAAWpmgB,MAAQ0mgB,EAAY1mgB,OAElE0mgB,EAAckJ,EAAgBA,EAAgBpphB,OAAS,IAC3CuQ,EAAI/M,KAAK26gB,iBAAiB5tgB,EACtC2vgB,EAAY1vgB,EAAIhN,KAAK26gB,iBAAiB3tgB,EACtChN,KAAKo8gB,WAAa,IAAIrmf,GAAK/1B,KAAKo8gB,WAAWrvgB,EAAG/M,KAAKo8gB,WAAWpvgB,EAAGhN,KAAKo8gB,WAAWpmgB,MAAOhW,KAAKo8gB,WAAWrmgB,QAExG/V,KAAK26gB,iBAAmB,IAAI5kf,GAAK/1B,KAAK26gB,iBAAiB5tgB,EAAG/M,KAAK26gB,iBAAiB3tgB,EAAGhN,KAAK26gB,iBAAiB3kgB,MAAOhW,KAAK26gB,iBAAiB5kgB,YAErI,CAED,GAAImyf,aAAiBjB,KAAgBxpgB,EAAkByqgB,EAAMlE,cAAqD,SAArCkE,EAAMlE,YAAYC,eAA2B,CACjHiE,EAAMgD,gBACPhD,EAAM+C,oBACN/C,EAAMgD,eAAgB,GAE1B,IAAIhB,EAAahC,EAAM4D,eAAe5D,EAAM+B,oBAAoB/B,EAAM4B,eAAc,KAGhF9pgB,KAAKwjgB,MAAM8Q,QAAUt0gB,KAAKwjgB,MAAM8Q,OAAO0lB,YAAYyF,uBAAyBv3B,GACvB,IAAlDlogB,KAAKwjgB,MAAM8Q,OAAO0lB,YAAY0F,kBACjCx1B,EAAahC,EAAMuB,YAAYS,YAEnCA,EAAapL,GAAcO,oBAAoB6K,GAE3C9M,EADqC,WAArC8K,EAAMlE,YAAYC,gBACJjkgB,KAAKo8gB,WAAWpmgB,MAAQk0f,GAAc,EAGvClqgB,KAAKo8gB,WAAWpmgB,MAAQk0f,EAEzClqgB,KAAKm2hB,WAAW3xhB,KAAK44f,GAEzBp9f,KAAK26gB,iBAAiB5tgB,EAAI/M,KAAKo8gB,WAAWrvgB,EAAI/M,KAAKo8gB,WAAWrvgB,EAAIqwf,EAClE,IAAIpnf,EAAQhW,KAAKo8gB,WAAWpmgB,OAASonf,EAAaC,GAClDr9f,KAAK26gB,iBAAiB3kgB,MAAQhW,KAAKo8gB,WAAWpmgB,MAAQA,EAAQ,EAAIA,EAAQ,EAE1EhW,KAAKo8gB,WAAa,IAAIrmf,GAAK/1B,KAAKo8gB,WAAWrvgB,EAAG/M,KAAKo8gB,WAAWpvgB,EAAGhN,KAAKo8gB,WAAWpmgB,MAAOhW,KAAKo8gB,WAAWrmgB,QAExG/V,KAAK26gB,iBAAmB,IAAI5kf,GAAK/1B,KAAK26gB,iBAAiB5tgB,EAAG/M,KAAK26gB,iBAAiB3tgB,EAAGhN,KAAK26gB,iBAAiB3kgB,MAAOhW,KAAK26gB,iBAAiB5kgB,YAGzI,CAEGmyf,aAAiBjB,IAAoD,SAArCiB,EAAMlE,YAAYC,gBAA6BjkgB,KAAKm2hB,WAAW35hB,OAAS,IACxG4ggB,EAAap9f,KAAKm2hB,WAAWtwX,OAEjC7lK,KAAK26gB,iBAAiB5tgB,EAAI/M,KAAKo8gB,WAAWrvgB,EAAI/M,KAAKo8gB,WAAWrvgB,EAAIqwf,EAC9Dpnf,EAAQhW,KAAKo8gB,WAAWpmgB,MAAQonf,EAAaC,EACjDr9f,KAAK26gB,iBAAiB3kgB,MAAQhW,KAAKo8gB,WAAWpmgB,MAAQA,EAAQ,EAAIA,EAAQ,EAC1EhW,KAAKo8gB,WAAa,IAAIrmf,GAAK/1B,KAAKo8gB,WAAWrvgB,EAAG/M,KAAKo8gB,WAAWpvgB,EAAGhN,KAAKo8gB,WAAWpmgB,MAAOhW,KAAKo8gB,WAAWrmgB,QAExG/V,KAAK26gB,iBAAmB,IAAI5kf,GAAK/1B,KAAK26gB,iBAAiB5tgB,EAAG/M,KAAK26gB,iBAAiB3tgB,EAAGhN,KAAK26gB,iBAAiB3kgB,MAAOhW,KAAK26gB,iBAAiB5kgB,UAO9Iq7e,EAAah2f,UAAU6jhB,YAAc,SAAUlygB,GACvCA,EAAI/M,KAAK26gB,iBAAiB5tgB,IAC1BA,EAAI/M,KAAK26gB,iBAAiB5tgB,GAE1BA,EAAI/M,KAAK26gB,iBAAiBlugB,OAASzM,KAAK6iC,WACxC91B,EAAI/M,KAAK26gB,iBAAiBlugB,OAE9BzM,KAAK26gB,iBAAiB3kgB,MAAQhW,KAAK26gB,iBAAiBlugB,MAAQM,EAAI/M,KAAK26gB,iBAAiBlugB,MAAQM,EAAI,EAClG/M,KAAK26gB,iBAAiB5tgB,EAAIA,GAM9Bqkf,EAAah2f,UAAUukhB,WAAa,SAAU3ygB,GACtCA,EAAIhN,KAAK26gB,iBAAiB3tgB,IAC1BA,EAAIhN,KAAK26gB,iBAAiB3tgB,GAE1BA,EAAIhN,KAAK26gB,iBAAiBhugB,SAC1BK,EAAIhN,KAAK26gB,iBAAiBhugB,QAE9B3M,KAAK26gB,iBAAiB5kgB,OAAS/V,KAAK26gB,iBAAiBhugB,OAASK,EAC9DhN,KAAK26gB,iBAAiB5tgB,EAAI/M,KAAKo8gB,WAAWrvgB,EAC1C/M,KAAK26gB,iBAAiB3kgB,MAAQhW,KAAKo8gB,WAAWpmgB,MAC9ChW,KAAK26gB,iBAAiB3tgB,EAAIA,GAM9Bokf,EAAah2f,UAAUmihB,kBAAoB,SAAUvngB,GACjDhW,KAAK26gB,iBAAiB5tgB,GAAKiJ,EACvBhW,KAAK26gB,iBAAiB3kgB,MAAQA,EAAQ,EACtChW,KAAK26gB,iBAAiB3kgB,OAASA,EAG/BhW,KAAK26gB,iBAAiB3kgB,MAAQ,GAOtCo7e,EAAah2f,UAAU0/gB,WAAa,SAAUhpgB,EAAOy7J,GAC7CvtK,KAAK+nP,MAAMxpP,QAAQgvK,IAAS,GAC5BvtK,KAAK+nP,MAAMp/N,OAAO3oB,KAAK+nP,MAAMxpP,QAAQgvK,GAAO,GAEhDvtK,KAAK+nP,MAAMp/N,OAAO7W,EAAO,EAAGy7J,GAC5B,IAAI7gK,EAAM,GACNoF,EAAQ,IACRpF,GAAO1M,KAAK+nP,MAAMj2O,EAAQ,GAAGgnf,kBAAkBnsf,QAEnD,IAAK,IAAIzQ,EAAI4V,EAAO5V,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,KAEvCqxK,EAAOvtK,KAAK+nP,MAAM7rP,IACb48f,kBAAoB,IAAI/ie,GAAKw3I,EAAKurV,kBAAkB/rf,EAAGL,EAAK6gK,EAAKurV,kBAAkB9if,MAAOu3J,EAAKurV,kBAAkB/if,QACtHrJ,EAAM6gK,EAAKurV,kBAAkBnsf,OAAS,IAO9Cykf,EAAah2f,UAAUknhB,iBAAmB,SAAUvrB,EAAexpV,GAC/D,IAAI7gK,EAAM,EACNizhB,EAAiB,GACjB9c,EAAiB,GACjBryQ,EAAasuP,GAAcO,oBAAoBtI,EAAcvmP,YAC7D6L,EAAeyiP,GAAcO,oBAAoBtI,EAAc16O,cAC9D5+Q,EAAkBs5f,KACnBrqf,EAAMoyf,GAAcO,oBAAoBtI,EAAc56O,WACtDwjR,EAAiB7gC,GAAcO,oBAAoBtI,EAAc4oC,gBACjE9c,EAAiB/jB,GAAcO,oBAAoBtI,EAAc8rB,iBAEhEplhB,EAAkB8vK,EAAKw6V,gBACxBr7f,EAAML,KAAK+T,IAAI/T,KAAKC,IAAIqzhB,EAAiBpyX,EAAKw6V,aAAahyf,OAAQrJ,GAAM8jQ,EAAa,IAAM,KAEhG,IAAI7jQ,EAAS,KAAQ0vQ,EAChB5+Q,EAAkB8vK,EAAKy6V,gBACxBr7f,EAAS,KAAQN,KAAK+T,IAAIowP,EAAa,IAAM,GAAInkQ,KAAKC,IAAIu2gB,EAAiBt1W,EAAKy6V,aAAajyf,OAAQsmQ,KAEzG,IAAIrmQ,EAAQ,EAEPvY,EAAkBs5f,KACnB/gf,EAAQ8of,GAAcO,oBAAoBtI,EAAc35C,UAAY25C,EAAc76O,WAAa66O,EAAc36O,cAG7GpmQ,EAAQ,IACRA,EAAQ,GAEZhW,KAAKo8gB,WAAa,IAAIrmf,GAAK+oe,GAAcO,oBAAoBtI,EAAc76O,YAAaxvQ,EAAKsJ,EAAOw6P,EAAa9jQ,EAAMC,GACvH3M,KAAK26gB,iBAAmB,IAAI5kf,GAAK/1B,KAAKo8gB,WAAWrvgB,EAAG/M,KAAKo8gB,WAAWpvgB,EAAGhN,KAAKo8gB,WAAWpmgB,MAAOhW,KAAKo8gB,WAAWrmgB,SAMlHq7e,EAAah2f,UAAUmyhB,0BAA4B,SAAU7Q,EAAa8iB,GAClEA,IACAx/hB,KAAK26gB,iBAAiB3tgB,EAAIhN,KAAK26gB,iBAAiB3tgB,EAAI0vgB,EAAYnT,eAChEvpgB,KAAK26gB,iBAAiB5tgB,EAAI/M,KAAK26gB,iBAAiB5tgB,EAAI2vgB,EAAYrT,kBAOxEjY,EAAah2f,UAAUwkiB,yBAA2B,SAAUljB,GACxD18gB,KAAK26gB,iBAAiB5tgB,EAAI/M,KAAKo8gB,WAAWrvgB,EAAI2vgB,EAAY3vgB,EAC1D/M,KAAK26gB,iBAAiB3kgB,MAAQhW,KAAKo8gB,WAAWpmgB,MAAQ0mgB,EAAY1mgB,OAMtEo7e,EAAah2f,UAAUsyhB,uBAAyB,SAAUhod,EAAK85d,GAE3D,IAAI9iB,EAAch3c,EAAI0ic,WAClBo3B,IAIAx/hB,KAAK26gB,iBAAiB5tgB,EAAI/M,KAAKo8gB,WAAWrvgB,EAAI2vgB,EAAY3vgB,EAC1D/M,KAAK26gB,iBAAiB3kgB,MAAQhW,KAAKo8gB,WAAWpmgB,MAAQ0mgB,EAAY1mgB,MAClEhW,KAAKo8gB,WAAa,IAAIrmf,GAAK/1B,KAAKo8gB,WAAWrvgB,EAAG/M,KAAKo8gB,WAAWpvgB,EAAGhN,KAAKo8gB,WAAWpmgB,MAAOhW,KAAKo8gB,WAAWrmgB,QAExG/V,KAAK26gB,iBAAmB,IAAI5kf,GAAK/1B,KAAK26gB,iBAAiB5tgB,EAAG/M,KAAK26gB,iBAAiB3tgB,EAAGhN,KAAK26gB,iBAAiB3kgB,MAAOhW,KAAK26gB,iBAAiB5kgB,UAO9Iq7e,EAAah2f,UAAU0yhB,wBAA0B,SAAU/ld,EAAMy3d,GAE7D,IAAI5iB,EAAY70c,EAAKsgc,SACjByF,EAAa/lc,EACby3d,GACAx/hB,KAAK26gB,iBAAiB5tgB,EAAI/M,KAAKo8gB,WAAWrvgB,EAAI+ggB,EAAW/ggB,EACzD/M,KAAK26gB,iBAAiB3tgB,EAAI8ggB,EAAW9ggB,EACrChN,KAAK26gB,iBAAiB3kgB,MAAQhW,KAAKo8gB,WAAWpmgB,MAAQ83f,EAAW93f,MAAQ,EAAI83f,EAAW93f,MAAQ,EAC5FhW,gBAAgByuf,KAChBzuf,KAAK26gB,iBAAiB5kgB,OAASqhB,OAAO0tM,mBAE1C9kO,KAAKo8gB,WAAa,IAAIrmf,GAAK/1B,KAAKo8gB,WAAWrvgB,EAAG/M,KAAKo8gB,WAAWpvgB,EAAGhN,KAAKo8gB,WAAWpmgB,MAAOhW,KAAKo8gB,WAAWrmgB,QAExG/V,KAAK26gB,iBAAmB,IAAI5kf,GAAK/1B,KAAK26gB,iBAAiB5tgB,EAAG/M,KAAK26gB,iBAAiB3tgB,EAAGhN,KAAK26gB,iBAAiB3kgB,MAAOhW,KAAK26gB,iBAAiB5kgB,UAGtI/V,KAAK26gB,iBAAiB5tgB,EAAI/M,KAAKo8gB,WAAWrvgB,EAAI+ggB,EAAW/ggB,EAAI+ggB,EAAW93f,MAAQ83f,EAAW9ue,OAAOvyB,MAC9FmwgB,EAAU7vgB,EAAI6vgB,EAAU5mgB,MAAQhW,KAAKo8gB,WAAWrvgB,EAAI,EACpD/M,KAAK26gB,iBAAiB3kgB,MAAQhW,KAAKo8gB,WAAWpmgB,MAAQ,EAGtDhW,KAAK26gB,iBAAiB3kgB,MAAQhW,KAAKo8gB,WAAWpmgB,MAAQ4mgB,EAAU7vgB,EAAI6vgB,EAAU5mgB,MAAQhW,KAAKo8gB,WAAWrvgB,EAG1G/M,KAAK26gB,iBAAiB3tgB,EAAI8ggB,EAAW9ggB,EAAI8ggB,EAAW9ue,OAAOtyB,IAAMoyf,GAAcO,oBAAoBt3b,EAAKqgc,WAAWpE,YAAY3zM,aAC1HtoP,EAAKqgc,WAAWG,gBACjBvogB,KAAK26gB,iBAAiB5kgB,OAAS/V,KAAKo8gB,WAAWzvgB,OAASiwgB,EAAU5vgB,EAAI,EAAIhN,KAAKo8gB,WAAWzvgB,OAASiwgB,EAAU5vgB,EAAI,GAErHhN,KAAKo8gB,WAAa,IAAIrmf,GAAK/1B,KAAKo8gB,WAAWrvgB,EAAG/M,KAAKo8gB,WAAWpvgB,EAAGhN,KAAKo8gB,WAAWpmgB,MAAOhW,KAAKo8gB,WAAWrmgB,QAExG/V,KAAK26gB,iBAAmB,IAAI5kf,GAAK/1B,KAAK26gB,iBAAiB5tgB,EAAG/M,KAAK26gB,iBAAiB3tgB,EAAGhN,KAAK26gB,iBAAiB3kgB,MAAOhW,KAAK26gB,iBAAiB5kgB,UAO9Iq7e,EAAah2f,UAAUuzhB,yBAA2B,SAAU9oB,GACxD7lgB,KAAKo8gB,WAAWrvgB,EAAI84f,EAAO94f,EAC3B/M,KAAKo8gB,WAAWpvgB,EAAI64f,EAAO74f,EAC3BhN,KAAK26gB,iBAAiB5tgB,EAAI84f,EAAO94f,EACjC/M,KAAK26gB,iBAAiB3tgB,EAAI64f,EAAO74f,GASrCokf,EAAah2f,UAAU6ghB,yBAA2B,SAAUpW,EAAQ3rZ,GAChE2rZ,EAAO94f,EAAImtG,EAAKntG,EAChB84f,EAAO74f,EAAIktG,EAAKltG,EAChB64f,EAAO7vf,MAAQkkG,EAAKlkG,OASxBo7e,EAAah2f,UAAUs/hB,+BAAiC,SAAUd,EAAan5a,GAC3E,IAAIolZ,EAAS7lgB,KAAKq6hB,cAAcT,GAIhC,GAHKn8hB,EAAkBoogB,IACnB7lgB,KAAKi2E,UAAU4pd,mBAAmBh6B,EAAQ+zB,GAE1Cn5a,EAAW,EAAG,CAGd,GAFAzgH,KAAKgtb,aAAc,EACnBhtb,KAAK42hB,uBAAwB,EACH,IAAtB52hB,KAAK+nP,MAAMvrP,OACX,OAGCiB,EAAkBuC,KAAK2+O,cAAiBlhP,EAAkBuC,KAAKwjgB,MAAMvtb,UAAU14E,SAC5EkjH,EAAW,GAAM,EACjBzgH,KAAKwjgB,MAAMvtb,UAAUgld,oBAGrBj7hB,KAAKwjgB,MAAMvtb,UAAU6pd,4BAWrC1uC,EAAah2f,UAAUqgiB,iBAAmB,SAAUn2O,EAAey6O,GAC/D,KAAI//hB,KAAKwjgB,MAAMk2B,wBAA0B15hB,KAAKwjgB,MAAMvhB,mBAAmBy2C,iBAChE14hB,KAAKq3hB,2BAA6Br3hB,KAAKo3hB,qBAD9C,CAIA,IAAIvkB,EAAa7ygB,KAAKi2E,UAAU+pd,sBAAsBD,EAAYrU,cAAeqU,EAAYp0hB,QAAQ,GACrG,IAAIlO,EAAkBo1gB,GAAtB,CAGU7ygB,KAAKi2E,UAAUmhO,OAAOy7N,GAChC,GAAI7ygB,KAAKgtb,YAAa,CAClB,IAAIizG,EAAiBjgiB,KAAKi2E,UAAU+pd,sBAAsBD,EAAYrU,cAAeqU,EAAYp0hB,QAAQ,GACrG0oG,EAAUr0G,KAAKi2E,UAAUmhO,OAAO6oP,GAChCA,IAAmBptB,GAAcktB,EAAYnlgB,SAAS5tB,GAAKqnG,IAC3Dw+Z,EAAaotB,GAGRptB,EAAW98f,OAAxB,IAEIg8e,EAAU/xf,KAAKi2E,UAAUslO,QAAQs3N,EAAW5b,WAChDj3f,KAAK2+O,YAAcozQ,EACnB,IAAIhlf,EAAI,EACJC,EAAI,EAIR,GAHahN,gBAEwByuf,GACnB,CACd,GACIhxf,EAAkBs0f,GAClB,OAEJ,IAAI30C,EAAY20C,EAAQ+G,kBAAkB9if,OAC1CjJ,GAAK/M,KAAKqyhB,cAAcr8gB,MAAQonc,EAAYp9c,KAAK80E,YAAc,GACvD,KACJ/nE,EAAI,IAGRC,EAAI+kf,EAAQ+G,kBAAkB9rf,EAAIhN,KAAK80E,YAAc90E,KAAK+nP,MAAMxpP,QAAQwzf,GAAW,GAd1E/xf,KAcsFg/hB,SAAW,EAAIh/hB,KAAK80E,YAEvH,IAAI3oE,EAAYnM,KAAKoX,aACjBpL,EAAahM,KAAK2W,cAClB65P,EAAaxwQ,KAAKqyhB,cAAct8gB,OAChCmqhB,EAAYlgiB,KAAKi2E,UAAUyod,gBAAgB1+hB,KAAKwjgB,MAAMvtb,UAAUh3D,KAAK,GACrEk9P,EAAY+jR,EAAU/jR,UACtBgkR,EAAcD,EAAUnqhB,OAC5BhJ,GAAMgzhB,EAAYnlgB,SAAU,EAAI56B,KAAK80E,WAGhC3oE,EAAY,IAFjBa,IAAM+yhB,EAAYnlgB,SAAS5tB,EAAImvQ,GAAan8Q,KAAK80E,YAG7C90E,KAAKu1hB,gBAAgBpphB,UAAaa,EAAI,GAEjCb,EAAYqkQ,EAAaxjQ,EAAImzhB,EAClCngiB,KAAKu1hB,gBAAgBpphB,UAAYa,EAAImzhB,EAAc3vR,EAAa,GAGhExwQ,KAAKi2E,UAAUmqd,kBAAkB96O,EAAeysM,GAEpD/xf,KAAKi2E,UAAUmqd,kBAAkB96O,EAAeysM,GAChD,IAAIsuC,EAAiBrgiB,KAAKu1hB,gBAAgB3whB,YAAc5E,KAAKu1hB,gBAAgB3lgB,YACzE5jB,EAAae,EACb/M,KAAKu1hB,gBAAgBvphB,WAAae,EArCzB/M,KAqCqCw1hB,cAAc5whB,YAAc,IAAO,GAE5EoH,EAAahM,KAAKqyhB,cAAcr8gB,MAAQjJ,EAAIszhB,IACjDrgiB,KAAKu1hB,gBAAgBvphB,WAAaA,EAxCzBhM,KAwC8Cw1hB,cAAc5whB,YAAc,IAAO,GAAKy7hB,MAOvGjvC,EAAah2f,UAAUi/hB,cAAgB,SAAUT,GAC7C,OAAO55hB,KAAKggiB,sBAAsBpG,GAAa,IAMnDxoC,EAAah2f,UAAU4kiB,sBAAwB,SAAUpG,EAAa0G,GAClE,IAAIz6B,OAAS3qgB,EACb,IAAKuC,EAAkBuC,KAAK2+O,aAAc,CACtC,IAAI04Q,OAAe,EACnB,GAAIr3f,KAAKwjgB,MAAMmf,sBAAuB,CAClC,IAAIp1W,EAAOvtK,KAAK2+O,YAEZ8pN,GADUzoc,KAAKi2E,UAAUsqd,WAAWhzX,GACvBA,EAAKurV,kBAAkB/if,QACpCm3f,EAAe7ggB,KAAKC,IAAKihK,EAAKw6V,aAAa/6f,EAAIugK,EAAKw6V,aAAahyf,OAAS+of,GAAcO,oBAAoB9xV,EAAKq4V,YAAY,GAAG7O,cAAc56O,YAAcn8Q,KAAK80E,WACjK+tc,EAAiB/jB,GAAcO,oBAAoB9xV,EAAKq4V,YAAY,GAAG7O,cAAc8rB,gBACrF+O,EAAgBrkX,EAAKurV,kBAAkB/if,OACvC1J,KAAKC,IAAIihK,EAAKy6V,aAAajyf,OAAS8sgB,EAAiC,EAAjBA,GAiBxD,GAhBIyd,EAEIjpC,EADAr3f,KAAK0shB,gBAAgB1shB,KAAKi2E,UAAU14E,MAAM05f,WAC3Bj3f,KAAK2+O,YAAYopR,aAGjB/ngB,KAAK2+O,YAAYqpR,aAIhC4xB,EAAY5shB,GAAKy7b,GAAcmxF,EAAY5shB,GAAK4khB,EAChDv6B,EAAer3f,KAAK2+O,YAAYqpR,aAE1B4xB,EAAa,GAAK,GAAMA,EAAa,GAAK1sB,IAChD7V,EAAer3f,KAAK2+O,YAAYopR,cAGpCtqgB,EAAkB45f,GAClB,OAEJ,OAAOr3f,KAAKi2E,UAAUuqd,wBAAwBnpC,EAAcuiC,GAG5D,IAAK,IAAI19hB,EAAI,EAAGA,EAAI8D,KAAK2+O,YAAYinR,YAAYppgB,OAAQN,IAAK,CAC1D,IAAI0pgB,EAAc5lgB,KAAK2+O,YAAYinR,YAAY1pgB,GAE/C,GADA2pgB,EAAS7lgB,KAAKi2E,UAAUuqd,wBAAwB56B,EAAag0B,IACxDn8hB,EAAkBoogB,GACnB,OAKhB,OAAOA,GAKXzU,EAAah2f,UAAUsxhB,gBAAkB,SAAUxkB,GAC/C,OAASA,EAAM5Q,2BAA2B8O,KAAqB,CAC3D,IAAK8B,EAAM5Q,gBACP,OAAO,EAEX4Q,EAAQA,EAAM5Q,gBAElB,OAAqE,IAA9D4Q,EAAM5Q,gBAAgBoQ,iBAAiBnpgB,QAAQ,WAM1D6yf,EAAah2f,UAAUqliB,wBAA0B,YAEhCzgiB,KAAK02hB,kBAAqB12hB,KAAKgtb,YAExChtb,KAAKwjgB,MAAMvtb,UAAUyqd,4CACrB1giB,KAAKgxhB,iBAAiBv4E,UAAU,EAAG,EAAGz4c,KAAK0whB,gBAAgB16gB,MAAOhW,KAAK0whB,gBAAgB36gB,SAU/Fq7e,EAAah2f,UAAU6yhB,iBAAmB,WAGtC,IAAK,IAFD0S,GAAmB,EAEdj9gB,EAAI,EAAGA,EAAI1jB,KAAK+nP,MAAMvrP,OAAQknB,IAAK,CACxC,IAAI6pJ,EAAOvtK,KAAK+nP,MAAMrkO,GACU,IAA5B6pJ,EAAKq4V,YAAYppgB,QAA4D,IAA5C+wK,EAAKq4V,YAAY,GAAGvO,aAAa76f,SAE9DknB,IAAM1jB,KAAK+nP,MAAMvrP,OAAS,GALzBwD,gBAKgDyuf,KAAoE,IALpHzuf,KAK2E8xf,aAAavzf,QAAQyB,KAAK+nP,MAAMrkO,MAC5Gi9gB,GAAmB,GAEvB3giB,KAAKw0gB,WAAWx0gB,KAAK+nP,MAAMrkO,IAC3BA,KAGJi9gB,GACA3giB,KAAKmwhB,kBAMb/+B,EAAah2f,UAAU+0hB,eAAiB,WACpC,GAAInwhB,KAAKi2E,UAAU14E,MAAM05f,WAAaj3f,KAAKi2E,UAAU14E,MAAM05f,UAAU6F,WAAY,CAC7E,IAAIvvV,EAAOvtK,KAAKi2E,UAAU14E,MAAM05f,UAAU6F,WAAWvvV,KACjDt2J,EAAkBjX,KAAKqyhB,cAAct8gB,OACzC/V,KAAKu1hB,gBAAgBpphB,UAAYohK,EAAKurV,kBAAkBnsf,OAASsK,IAOzEm6e,EAAah2f,UAAU4ihB,eAAiB,SAAUpe,EAAYryV,GAC1D,IAAK9vK,EAAkB8vK,KAAU9vK,EAAkBuC,KAAKi2E,WAAY,CAChE,IACI2qd,EADY5giB,KAAKi2E,UAAUk4c,aAAavuB,GACjB1igB,MAAM,KACjC,GAAI0jiB,EAAWpkiB,OAAS,EAAG,CACvB,IAAIqkiB,EAAgBD,EAAW,GAAG3jiB,QAAQ,YAAa,IAAIgT,OAAO2F,cAC9DkrhB,EAAeF,EAAW,GAAG3jiB,QAAQ,YAAa,IAAIgT,OAC1D,OAAQ4whB,GACJ,IAAK,OACD,OAAO7giB,KAAK+giB,aAAaD,EAAevzX,EAAKz7J,MAAQ,GACzD,IAAK,WACD,OAAO9R,KAAK+giB,aAAaD,EAAcvzX,EAAKihV,OAAOzmQ,MAAMvrP,UAMzE,MAAO,IAKX40f,EAAah2f,UAAU2liB,aAAe,SAAUryhB,EAAS3R,GACrD,OAAQ2R,GACJ,IAAK,aACD,OAAO1O,KAAKstD,OAAOm2d,YAAY1mhB,GAAOmuB,cAC1C,IAAK,aACD,OAAOlrB,KAAKstD,OAAOm2d,YAAY1mhB,GAAO6Y,cAC1C,IAAK,QACD,OAAO5V,KAAKstD,OAAOs2d,WAAW7mhB,GAAO6Y,cACzC,IAAK,QACD,OAAO5V,KAAKstD,OAAOs2d,WAAW7mhB,GAAOmuB,cACzC,QACI,OAAOnuB,EAAMmQ,aAMzBkkf,EAAah2f,UAAUiX,QAAU,WACxB5U,EAAkBuC,KAAKwjgB,QACxBxjgB,KAAKghiB,cAEThhiB,KAAK+nP,SACL/nP,KAAK+nP,WAAQ7sP,EACb8E,KAAKm/gB,eACLn/gB,KAAKm/gB,iBAAcjkhB,EACnB8E,KAAKymhB,uBACLzmhB,KAAKymhB,yBAAsBvrhB,EAC3B8E,KAAKwsB,UACLxsB,KAAKwsB,YAAStxB,EACV8E,KAAKstD,QACLttD,KAAKstD,OAAOj7C,UAEhBrS,KAAKstD,YAASpyD,EACTuC,EAAkBuC,KAAKoyG,SACxBpyG,KAAKoyG,OAAO//F,UAEhBrS,KAAKoyG,YAASl3G,EACV8E,KAAKo9hB,gBACLp9hB,KAAKo9hB,eAAe/qhB,UAExBrS,KAAKo9hB,oBAAiBliiB,EAClB8E,KAAK4+hB,cAAgB5+hB,KAAK4+hB,aAAavqhB,eACvCrU,KAAK4+hB,aAAavqhB,cAAc/O,YAAYtF,KAAK4+hB,cAErD5+hB,KAAK4+hB,kBAAe1jiB,EACfuC,EAAkBuC,KAAKy8D,cACxBz8D,KAAKy8D,WAAWz6D,UAAY,IAE5BhC,KAAKk9gB,YACLl9gB,KAAKk9gB,WAAW7qgB,UAEpBrS,KAAKk9gB,gBAAahihB,EAClB8E,KAAKy8D,gBAAavhE,EACbuC,EAAkBuC,KAAK2kI,YACxB3kI,KAAK2kI,SAAS3iI,UAAY,IAE9BhC,KAAK2kI,cAAWzpI,EACXuC,EAAkBuC,KAAKi9hB,qBACxBj9hB,KAAKi9hB,kBAAkBj7hB,UAAY,IAEvChC,KAAKi9hB,uBAAoB/hiB,EACpBuC,EAAkBuC,KAAKk9hB,qBACxBl9hB,KAAKk9hB,kBAAkBl7hB,UAAY,IAEvChC,KAAKk9hB,uBAAoBhiiB,EACpBuC,EAAkBuC,KAAKs4hB,eACxBt4hB,KAAKs4hB,YAAYt2hB,UAAY,GAC7BhC,KAAKs4hB,YAAYjkhB,cAAc/O,YAAYtF,KAAKs4hB,cAEpDt4hB,KAAKs4hB,iBAAcp9hB,EACduC,EAAkBuC,KAAKw1hB,iBACxBx1hB,KAAKw1hB,cAAcxzhB,UAAY,IAEnChC,KAAKw1hB,mBAAgBt6hB,EAChBuC,EAAkBuC,KAAKu1hB,mBACxBv1hB,KAAKu1hB,gBAAgBvzhB,UAAY,IAErChC,KAAKu1hB,qBAAkBr6hB,EACvB8E,KAAKwjgB,WAAQtogB,EACb8E,KAAK60hB,0BAAuB35hB,GAKhCk2f,EAAah2f,UAAU4liB,YAAc,WACjChhiB,KAAKu1hB,gBAAgB54hB,oBAAoB,SAAUqD,KAAK4kI,eACxD5kI,KAAKu1hB,gBAAgB54hB,oBAAoB,YAAaqD,KAAKw5hB,qBAC3Dx5hB,KAAKu1hB,gBAAgB54hB,oBAAoB,YAAaqD,KAAKs6hB,qBACtD9uhB,GAAQqb,SAOT7mB,KAAKs4hB,YAAY37hB,oBAAoB,QAASqD,KAAK+4hB,sBANnD/4hB,KAAKs4hB,YAAY37hB,oBAAoB,WAAYqD,KAAK84hB,oBAC5B,WAAtBtthB,GAAQsb,KAAKyQ,MACbv3B,KAAKs4hB,YAAY37hB,oBAAoB,YAAaqD,KAAK23hB,cAM/D33hB,KAAKs4hB,YAAY37hB,oBAAoB,QAASqD,KAAKg5hB,SACnDh5hB,KAAKu1hB,gBAAgB54hB,oBAAoB,cAAeqD,KAAKu5hB,eAC7Dv5hB,KAAKs4hB,YAAY37hB,oBAAoB,OAAQqD,KAAKi5hB,YAClDj5hB,KAAKs4hB,YAAY37hB,oBAAoB,UAAWqD,KAAK48hB,mBACrD58hB,KAAKs4hB,YAAY37hB,oBAAoB,mBAAoBqD,KAAK63hB,kBAC9D73hB,KAAKs4hB,YAAY37hB,oBAAoB,oBAAqBqD,KAAKi4hB,oBAC/Dj4hB,KAAKs4hB,YAAY37hB,oBAAoB,iBAAkBqD,KAAKo4hB,gBAC5Dp4hB,KAAKu1hB,gBAAgB54hB,oBAAoB,UAAWqD,KAAK24hB,mBACzD34hB,KAAKu1hB,gBAAgB54hB,oBAAoB,WAAYqD,KAAK+6hB,aAC1Dn/hB,OAAOe,oBAAoB,SAAUqD,KAAKo5hB,gBAC1Cx9hB,OAAOe,oBAAoB,QAASqD,KAAKw8hB,iBACzC5giB,OAAOe,oBAAoB,UAAWqD,KAAKw4hB,gBAC3C58hB,OAAOe,oBAAoB,WAAYqD,KAAKw4hB,iBAEzCpnC,KAMP3C,GAAkC,SAAUn9Z,GAK5C,SAASm9Z,EAAiB+U,GACtB,IAAIzjgB,EAAQuxF,EAAOhwF,KAAKtB,KAAMwjgB,IAAUxjgB,KAUxC,OATAD,EAAMuoc,SAAW,GAIjBvoc,EAAMi/hB,QAAU,GAIhBj/hB,EAAM+xf,gBACFr0f,EAAkB+lgB,IAAU/lgB,EAAkB+lgB,EAAMxigB,SAC7CjB,EAshBf,OAtiBA0wF,GAAUg+Z,EAAkBn9Z,GAwB5Bm9Z,EAAiBrzf,UAAUq/gB,cAAgB,SAAUzvO,EAASl5R,GAC1D,IACI64Y,EAAO3qZ,KAAKg/hB,QACZh/hB,KAAK+nP,MAAMvrP,OAAS,IACpBmuZ,EAAO3qZ,KAAK+nP,MAAM/nP,KAAK+nP,MAAMvrP,OAAS,GAAGs8f,kBAAkBnsf,OAAS3M,KAAKg/hB,SAE7E,IAAIzxX,EAAO,IAAI6mW,GACf7mW,EAAKihV,OAASxuf,KAEd,IAAIo9c,EAAa3/c,EAAkButS,EAAQ+rN,eAAsF,IAArE+H,GAAcO,oBAAoBr0N,EAAQ+rN,cAAc35C,WAEhH5sM,EAAc/yQ,EAAkButS,EAAQ+rN,eAAuF,KAAtE+H,GAAcO,oBAAoBr0N,EAAQ+rN,cAAcvmP,YACjHk6I,GAAQ1qZ,KAAKqyhB,cAAcr8gB,MAAQonc,EAAYp9c,KAAK80E,YAAc,EAgBtE,OAfI41U,EAAO1qZ,KAAKsoc,WACZ59C,EAAO1qZ,KAAKsoc,UAEhB/6R,EAAKurV,kBAAoB,IAAI/ie,GAAK20X,EAAMC,EAAMyyD,EAAW5sM,GACrD/yQ,EAAkBqU,GAClB9R,KAAK+nP,MAAMvjP,KAAK+oK,GAGhBvtK,KAAK+nP,MAAMp/N,OAAO7W,EAAO,EAAGy7J,GAEhCvtK,KAAKsihB,iBAAiBt3O,EAAQ+rN,cAAexpV,GAC7CA,EAAKq4V,YAAYphgB,KAAKwmS,GACtBz9H,EAAKq4V,YAAYr4V,EAAKq4V,YAAYppgB,OAAS,GAAG+wK,KAAOA,EACrDvtK,KAAKstD,OAAO+td,mBAAmBrwO,EAzBlBhrS,KAyBmCutK,GAChDvtK,KAAKsihB,iBAAiBt3O,EAAQ+rN,cAAexpV,GACtCA,GAKXkhV,EAAiBrzf,UAAUwyb,aAAe,SAAUvxb,GAChD,IAKIs2hB,EACAnmhB,EACAE,EAPAu0hB,OAAiB/liB,EACjBgG,EAAMlB,KAAKu1hB,gBACX5hgB,EAAQ,IAAIkhB,GAAMx4C,EAAMwP,QAASxP,EAAM4P,SACvC27f,EAAa5ngB,KAAK65hB,gBAAgBlmgB,GAAO,GACzCkye,EAAS7lgB,KAAKq6hB,cAAczyB,GAI5B0M,EAAUt0gB,KAAKwjgB,MAAMtR,oBAA2Ch3f,EAA1B8E,KAAKwjgB,MAAM1U,aACjDoyC,IAAc5sB,GAASA,EAAO0lB,YAAYE,mBAAmBtyB,GAC7Du5B,IAAe7sB,GAASA,EAAO0lB,YAAYC,oBAAoBryB,GAC/Dw5B,EAAiB,GACrB,GAAIphiB,KAAKwjgB,MAAMk2B,uBAAwB,CACnC,IAAIsC,EAAYh8hB,KAAKwjgB,MAAMvhB,mBAAmBo/C,cAAcz5B,GAC5D5ngB,KAAKwjgB,MAAMvhB,mBAAmB03C,sBAAwBqC,EAAUhpa,gBAChEoua,EAAiBpF,EAAUoF,eAE/B,IAAIE,EAAW,EACV7jiB,EAAkBoogB,KACnBy7B,EAAWthiB,KAAKi2E,UAAUsrd,iBAAiB17B,GAC3Co7B,EAAiBjhiB,KAAKi2E,UAAUurd,oCAAoC37B,EAAQ+B,GAC5E+qB,EAAa3yhB,KAAKi2E,UAAUwrd,qBAAqB57B,OAAQ3qgB,EAAW,EAAG0sgB,GAAY,GACnFp7f,EAAOxM,KAAKi2E,UAAU+gO,QAAQ6uN,GAC9Bn5f,EAAM1M,KAAKi2E,UAAUmhO,OAAOyuN,GAC5B7lgB,KAAKi2E,UAAUyrd,6BAA6BT,EAAgBp7B,EAAQ+B,EAAW76f,IAE9EtP,EAAkBwjiB,MAAoB5kiB,EAAM6rB,SAC7CloB,KAAKwjgB,MAAMthB,gCAAkClif,KAAKwjgB,MAAMthB,gCAInD0lB,EAAW76f,GAAKu0hB,GACrBjliB,EAAMwP,QAAW7L,KAAKqyhB,cAAcr8gB,OAAShW,KAAKqyhB,cAAcr8gB,MAAQhW,KAAKu1hB,gBAAgB3lgB,cAC7FvzB,EAAM4P,QAAWjM,KAAKqyhB,cAAct8gB,QAAU/V,KAAKqyhB,cAAct8gB,OAAS/V,KAAKu1hB,gBAAgB1lgB,cAC3F7vB,KAAKi2E,UAAU2hK,QACf12O,EAAIwD,MAAMg6D,OAAS,OAGnBx9D,EAAIwD,MAAMg6D,OAAS1+D,KAAKi2E,UAAUmkd,yBAAyBv0B,EAAQ+B,GAAc,UAAY,OAIjG1mgB,EAAIwD,MAAMg6D,OAAS,UAElBjhE,EAAkB2jiB,IAAsC,KAAnBA,GAGhC3jiB,EAAkBk1hB,IAAeA,EAAWyI,iBAAmB5uhB,EAAOo7f,EAAW76f,GAAKL,EAAMk7f,EAAW56f,GAC7GR,EAAOq5f,EAAO7vf,MAAQ4xf,EAAW76f,GAAKL,EAAMm5f,EAAO9vf,OAAS6xf,EAAW56f,IACvE9L,EAAIwD,MAAMg6D,OAAS,QAJnBx9D,EAAIwD,MAAMg6D,OAAS0ie,EAMnBF,EACAhgiB,EAAIwD,MAAMg6D,OAAS,aAEdyie,IACLjgiB,EAAIwD,MAAMg6D,OAAS,eA3BnBx9D,EAAIwD,MAAMg6D,OAAS,WAkC3B+vb,EAAiBrzf,UAAUy+hB,gBAAkB,SAAU5ngB,EAAc0vgB,GACjE,IAAIhugB,EAAQ,IAAIkhB,GAAM5iB,EAAallB,EAAGklB,EAAajlB,GACnD2mB,EAAM5mB,GAAK/M,KAAKu1hB,gBAAgBvphB,WAChC2nB,EAAM3mB,GAAKhN,KAAKu1hB,gBAAgBpphB,UAChC,IAAK,IAAIjQ,EAAI,EAAGA,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,IAAK,CACxC,IAAIqxK,EAAOvtK,KAAK+nP,MAAM7rP,GAClBssc,GAAWj7R,EAAKurV,kBAAkB9rf,EAAIhN,KAAKg/hB,SAAW9iiB,EAAI,IAAM8D,KAAK80E,WAAa90E,KAAKg/hB,SAAW9iiB,EAAI,GACtGs0Q,EAAcjjG,EAAKurV,kBAAkB/if,OAAS/V,KAAK80E,WAAc90E,KAAKg/hB,QACtE12F,EAAW/6R,EAAKurV,kBAAkB/rf,EAClCw7b,GAAch7R,EAAKurV,kBAAkBrsf,MAAQ67b,GAAYtoc,KAAK80E,WAAcwzX,EAChF,GAAIE,GAAW70a,EAAM3mB,GAAKw7b,EAAUh4L,GAAc78O,EAAM3mB,EAcpD,OAbI20hB,IACA3hiB,KAAK2+O,YAAcpxE,GAEvB55I,EAAM3mB,GAAK2mB,EAAM3mB,KAAiBhN,KAAK80E,WACnCnhD,EAAM5mB,EAAIw7b,EACV50a,EAAM5mB,EAAIwgK,EAAKurV,kBAAkBrsf,MAE5BknB,EAAM5mB,EAAIu7b,EACf30a,EAAM5mB,EAAI,EAGV4mB,EAAM5mB,GAAK4mB,EAAM5mB,EAAIu7b,GAAYtoc,KAAK80E,WAEnCnhD,EAGf,OAAOA,GAMX86d,EAAiBrzf,UAAUoiiB,qBAAuB,SAAUhnC,GACxD,IAAIxgf,EAAQhW,KAAKqyhB,cAAcr8gB,MAC3BD,EAAS/V,KAAKqyhB,cAAct8gB,OAC5Bi1R,EAAUhrS,KAAK8xf,aAAa,GAAG8T,YAAY,GAC3CxoD,EAAY0hD,GAAcO,oBAAoBr0N,EAAQ+rN,cAAc35C,WACpE5sM,EAAasuP,GAAcO,oBAAoBr0N,EAAQ+rN,cAAcvmP,YACzE,OAAQgmP,GACJ,IAAK,aACD,GAAIzgf,EAAS,GAAKy6P,EAAa,EAAG,CAC9B,IAAI17L,GAAc90E,KAAKqyhB,cAAct8gB,OAAS,EAAI/V,KAAKg/hB,SAAWh/hB,KAAKg/hB,QAAU,IAAMxuR,EACnF17L,IAAe90E,KAAK80E,WACfr3E,EAAkBuC,KAAKwjgB,MAAMvtb,YAAex4E,EAAkBuC,KAAKwjgB,MAAMvtb,UAAU14E,QACnFE,EAAkBuC,KAAKwjgB,MAAMvtb,UAAUh3D,MACxCjf,KAAKy7hB,iBAAiBz7hB,KAAKwjgB,MAAMvtb,UAAU14E,MAAOyC,KAAKwjgB,MAAMvtb,UAAUh3D,KAI3Ejf,KAAK80E,WAAaA,EAG1B,MACJ,IAAK,eACG9+D,EAAQ,GAAKonc,EAAY,IACzBp9c,KAAK80E,YAAc90E,KAAKqyhB,cAAcr8gB,MAAQ,IAAMonc,GAExD,MACJ,QACIp9c,KAAK80E,WAAa,IAO9B25a,EAAiBrzf,UAAU46hB,WAAa,WACpC,IAAI4L,EAAkB5hiB,KAAKq2hB,cACvB9oX,EAAO,KACPs0X,EAAiB,EACjBpG,GAAmB,EACvB,GAAIz7hB,KAAKi2E,WAAax4E,EAAkBuC,KAAK67hB,OAASp+hB,EAAkBuC,KAAK87hB,QAAS,CAClF,IAAI/uhB,EAAI,EACJC,EAAI,EACJ+kf,EAAU/xf,KAAKi2E,UAAUslO,QAAQv7S,KAAKi2E,UAAUh3D,IAAIysgB,cAAcz0B,YACtElqf,GAAK/M,KAAKqyhB,cAAcr8gB,MAAQ+7e,EAAQ+G,kBAAkB9if,MAAQ4rhB,GAAmB,GAC7E,KACJ70hB,EAAI,IAGRC,EAAI+kf,EAAQ+G,kBAAkB9rf,EAAI40hB,GAAmB5hiB,KAAK+nP,MAAMxpP,QAAQwzf,GAAW,GAAK/xf,KAAKg/hB,SAAW,EAAI4C,GAC5G,IAAI1B,EAAYlgiB,KAAKi2E,UAAUyod,gBAAgB1+hB,KAAKwjgB,MAAMvtb,UAAUh3D,KAAK,GACrEk9P,EAAY+jR,EAAU/jR,UACR+jR,EAAUnqhB,OAC5BhJ,GAAM/M,KAAKi2E,UAAUh3D,IAAI2b,SAAU,EAAIgngB,EACvC50hB,IAAMhN,KAAKi2E,UAAUh3D,IAAI2b,SAAS5tB,EAAImvQ,GAAaylR,EAC/C70hB,GAAK/M,KAAK2W,eAAiB5J,GAAK/M,KAAKqyhB,cAAcr8gB,OACnDhJ,GAAKhN,KAAKoX,cAAgBpK,GAAKhN,KAAKoX,aAAepX,KAAKqyhB,cAAct8gB,SACtE0lhB,GAAmB,GAG3B,IAAK,IAAIv/hB,EAAI,EAAGA,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,IACnC2liB,GAAkC7hiB,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB/if,OAGjE,IADD+rhB,EAAkB,EACtB,IAAS5liB,EAAI,EAAGA,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,IAC/B4liB,EAAkB9hiB,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB9if,QAClD8rhB,EAAkB9hiB,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB9if,OAI1D,IAAID,EAAU8rhB,EAAiB7hiB,KAAK80E,YAAc90E,KAAK+nP,MAAMvrP,OAAS,GAAKwD,KAAKg/hB,SAAW,EAAIh/hB,KAAK80E,YAAe90E,KAAKqyhB,cAAct8gB,OAClIgshB,EAAWD,EAAkB9hiB,KAAK80E,WAAa90E,KAAKqyhB,cAAcr8gB,MAKtE,GAJIhW,KAAKqyhB,cAAcr8gB,MAAQ8rhB,EAAkB9hiB,KAAK80E,WAAa,KAC/Ditd,GAAY,IAGZhshB,EAAS,EAAG,CACZ,IAAIhZ,EAAQiD,KAAKoX,aACjB,GAAIpX,KAAK8xf,aAAat1f,OAAS,EAAG,CAG9B,IAAIwliB,IAFJz0X,EAAOvtK,KAAK8xf,aAAa,IAEDgH,kBAAkB9rf,GAAKugK,EAAKz7J,MAAQ,GAAK9R,KAAKg/hB,SAAW4C,GAAmBr0X,EAAKz7J,MAAQ,GAAK9R,KAAKg/hB,QACvHlD,EAAQ97hB,KAAK87hB,MACbr+hB,IACAq+hB,EAAQ97hB,KAAKqyhB,cAAct8gB,OAAS,GAGxC,IADA,IAAIkshB,EAAQlliB,EAAQ++hB,EACbmG,EAAQD,EAAez0X,EAAKurV,kBAAkB/if,OAAS6rhB,GAAkB,CAC5E,IAAIp0X,EAAYD,EAAKz7J,MAAQ,EAC7B,GAAI07J,IAAcxtK,KAAK+nP,MAAMvrP,OACzB,MAIJwliB,IAFAz0X,EAAOvtK,KAAK+nP,MAAMv6E,IAEEsrV,kBAAkB9rf,GAAKugK,EAAKz7J,MAAQ,GAAK9R,KAAKg/hB,SAAW4C,GAAmBr0X,EAAKz7J,MAAQ,GAAK9R,KAAKg/hB,QAK3HjiiB,GAFgBwwK,EAAKurV,kBAAkB9rf,GAAKugK,EAAKz7J,MAAQ,GAAK9R,KAAKg/hB,SAAWh/hB,KAAK80E,YAAcy4F,EAAKz7J,MAAQ,GAAK9R,KAAKg/hB,SAChHiD,EAAQD,EAAe,EAAIC,EAAQD,GAAeC,EAAQD,IAAgBhiiB,KAAK80E,WAAa8sd,IACjF9F,EACnBA,EAAQ97hB,KAAKqyhB,cAAct8gB,OAAS,EAExC/V,KAAKu1hB,gBAAgBpphB,UAAYpP,OAGjCiD,KAAKu1hB,gBAAgBpphB,UAAY,EAGrC,GAAI41hB,EAAW,EAAG,CACVhliB,EAAQiD,KAAK2W,cACjB,GAAI3W,KAAK8xf,aAAat1f,OAAS,EAAG,CACjB,OAAT+wK,IACAA,EAAOvtK,KAAK8xf,aAAa,IAE7B,IAAI+pC,EAAQ77hB,KAAK67hB,MACbp+hB,EAAkBo+hB,KAClBA,EAAQ77hB,KAAKqyhB,cAAcr8gB,MAAQ,GAEvC,IAAIwS,EAAa+kJ,EAAKurV,kBAAkB9if,MAAQ4rhB,EAAmBr0X,EAAKurV,kBAAkB9if,MACtFulW,EAAQx+W,EAAQ8+hB,EAIpB9+hB,EAFewwK,EAAKurV,kBAAkB/rf,GAC9BwuW,EAAQhuM,EAAKurV,kBAAkB/rf,EAAK,EAAIwuW,EAAQhuM,EAAKurV,kBAAkB/rf,GAAKwuW,EAAQhuM,EAAKurV,kBAAkB/rf,IAAM/M,KAAK80E,WAAatsD,IACxHqzgB,EACnBA,EAAQ77hB,KAAKqyhB,cAAcr8gB,MAAQ,EAEvChW,KAAKu1hB,gBAAgBvphB,WAAajP,OAGlCiD,KAAKu1hB,gBAAgBvphB,WAAa,EAEtChM,KAAK4uf,mBACD6sC,GACAz7hB,KAAKy7hB,iBAAiBz7hB,KAAKi2E,UAAU14E,MAAOyC,KAAKi2E,UAAUh3D,MAOnEwve,EAAiBrzf,UAAUmghB,2BAA6B,SAAUvwO,EAASt+Q,GACvE,OAAO1sB,KAAKkiiB,uBAAuBliiB,KAAKyxhB,oBAAoBzmP,EAASt+Q,GAAWs+Q,EAAQl5R,QAM5F28e,EAAiBrzf,UAAUq2hB,oBAAsB,SAAUzmP,EAASt+Q,GAChE,IAAIhmB,EASJ,OARAA,EAAOgmB,EAAW,YAAc,aAE5Bs+Q,EAAQ+rN,cAAc86B,oBAA6C,IAAtB7xhB,KAAK+nP,MAAMvrP,QAAgBwD,KAAK+nP,MAAM/nP,KAAK+nP,MAAMvrP,OAAS,GAAGopgB,YAAY,GAAG9zf,QAAUk5R,EAAQl5R,MAGtIk5R,EAAQ+rN,cAAc+6B,0BAA4B9xhB,KAAK+nP,MAAMvrP,OAAS,GAAM,IACjFkK,EAAOgmB,EAAW,aAAe,cAHjChmB,EAAOgmB,EAAW,kBAAoB,kBAKnChmB,GAQX+nf,EAAiBrzf,UAAU8miB,uBAAyB,SAAUx7hB,EAAMm0gB,GAChE,GAAI76gB,KAAK63f,eAAegjB,GAAe,CACnC,IAAI/ogB,EAAQ9R,KAAK47gB,gBAAgBl1gB,GAC7BuhgB,EAAejogB,KAAK63f,eAAegjB,GAAc/ogB,GAKrD,OAJKm2f,IACDA,EAAejogB,KAAKmiiB,yBAAyBz7hB,GAC7C1G,KAAK63f,eAAegjB,GAAc/ogB,GAASm2f,GAExCA,EAEN,GAAI4S,EAAe,EACpB,OAAO76gB,KAAKkiiB,uBAAuBx7hB,EAAMm0gB,EAAe,IAIhEpsB,EAAiBrzf,UAAU+miB,yBAA2B,SAAUz7hB,GAC5D,IAAIuhgB,EAAe,IAAI7B,GAAmB1/f,GACtCuwf,EAAY,IAAIC,GAEpB,OADAD,EAAUI,aAAa7yf,KAAK,IAAI6igB,GAAWpQ,IACpCgR,GAOXxZ,EAAiBrzf,UAAUwghB,gBAAkB,SAAUl1gB,GACnD,OAAQA,GACJ,IAAK,YACD,OAAO,EACX,IAAK,YACD,OAAO,EACX,IAAK,aACD,OAAO,EACX,IAAK,aACD,OAAO,EACX,IAAK,kBACD,OAAO,EACX,IAAK,kBACD,OAAO,IAOnB+nf,EAAiBrzf,UAAUoghB,mBAAqB,SAAUzkB,EAAerqe,GAErE,IAAI1W,EAAQ8of,GAAcO,oBAAoBtI,EAAc35C,UAAY25C,EAAc76O,WAAa66O,EAAc36O,aAC7GpmQ,EAAQ,IACRA,EAAQ,GAIRhW,KAAKo8gB,WAAa,IAAIrmf,GAAK+oe,GAAcO,oBAAoBtI,EAAc76O,YAF3ExvP,EAEwFoye,GAAcO,oBAAoBtI,EAAc4oC,gBAIhD7gC,GAAcO,oBAAoBtI,EAAcvmP,WAAaumP,EAAc8rB,gBAJV7sgB,EAAOohB,OAAO0tM,mBAM3K9kO,KAAK26gB,iBAAmB,IAAI5kf,GAAK/1B,KAAKo8gB,WAAWrvgB,EAAG/M,KAAKo8gB,WAAWpvgB,EAAGhN,KAAKo8gB,WAAWpmgB,MAAOhW,KAAKo8gB,WAAWrmgB,SAKlH04e,EAAiBrzf,UAAUqxhB,2BAA6B,SAAU11B,EAAerqe,EAAU6gJ,GACvFvtK,KAAKw7gB,mBAAmBzkB,EAAerqe,GAClCA,GACG6gJ,EAAKy6V,aAAah7f,EAAIhN,KAAK26gB,iBAAiB3tgB,IAC5ChN,KAAK26gB,iBAAiB3tgB,EAAIugK,EAAKy6V,aAAah7f,EAC5ChN,KAAK26gB,iBAAiB5kgB,OAASqhB,OAAO0tM,oBAQlD2pR,EAAiBrzf,UAAUy5f,aAAe,SAAUrnV,GAEhD,IAAK,IADD9gK,EAAM,EACDxQ,EAAI,EAAGA,EAAI8D,KAAK+nP,MAAMvrP,SAC3BkQ,EAAM1M,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB9rf,EAAKhN,KAAKg/hB,QAAU,EACtD9iiB,IAAMsxK,GAFyBtxK,KAMvC8D,KAAKu1hB,gBAAgBpphB,UAAYO,EACjC1M,KAAK4uf,oBAMTH,EAAiBrzf,UAAUwzf,iBAAmB,WAE1C,IAAK,IADD74e,EAAS,EACJ7Z,EAAI,EAAGA,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,IACnC6Z,GAAkB/V,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB/if,OAGjD,IADDC,EAAQ,EACZ,IAAS9Z,EAAI,EAAGA,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,IAC/B8Z,EAAQhW,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB9if,QACxCA,EAAQhW,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB9if,OAGhD,IAAIQ,EAAkBR,EAAQhW,KAAK80E,WAA+B,EAAhB90E,KAAKsoc,SACnDrxb,EAAmBlB,EAAS/V,KAAK80E,YAAe90E,KAAK+nP,MAAMvrP,OAAS,GAAKwD,KAAKg/hB,QAC9EoD,EAAcpiiB,KAAKqyhB,cAAcr8gB,MACjCqshB,EAAeriiB,KAAKqyhB,cAAct8gB,OAClC/V,KAAKqyhB,cAAcr8gB,QAAUhW,KAAKu1hB,gBAAgB3lgB,YAClDwygB,GAAgBpiiB,KAAKqyhB,cAAcr8gB,MAAQhW,KAAKu1hB,gBAAgB3lgB,YAE3D3Y,EAAkBorhB,IACvBD,GAAepiiB,KAAKu1hB,gBAAgB3whB,YAAc5E,KAAKu1hB,gBAAgB3lgB,aAEvEpZ,EAAiB4rhB,IACjBC,GAAiBriiB,KAAKqyhB,cAAct8gB,OAAS/V,KAAKu1hB,gBAAgB1lgB,cAEtE7Z,EAAQQ,EAAiB4rhB,EAAc5rhB,EAAiB4rhB,EACxDrshB,EAASkB,EAAkBorhB,EAAeprhB,EAAkBorhB,EACxDztgB,SAAS50B,KAAKw1hB,cAAc9whB,MAAMsR,MAAM/Y,QAAQ,KAAM,IAAK,MAAQ+Y,GACnE4e,SAAS50B,KAAKw1hB,cAAc9whB,MAAMqR,OAAO9Y,QAAQ,KAAM,IAAK,MAAQ+Y,IACpEhW,KAAKw1hB,cAAc9whB,MAAMsR,MAAQA,EAAM9I,WAAa,KACpDlN,KAAKw1hB,cAAc9whB,MAAMqR,OAASA,EAAO7I,WAAa,MAK1D,IAAIo1hB,EAAoBj2hB,KAAKC,IAAI,EAAG1Q,OAAOs1hB,kBAAoB,GAC3DlxhB,KAAKywhB,gBAAgBz6gB,QAAU3J,KAAKmT,MAAM4ihB,EAAcE,IACrDtiiB,KAAKywhB,gBAAgB16gB,SAAW1J,KAAKmT,MAAM6ihB,EAAeC,KAC7DtiiB,KAAKywhB,gBAAgBz6gB,MAAQoshB,EAAcE,EAC3CtiiB,KAAKywhB,gBAAgB16gB,OAASsshB,EAAeC,EAC7CtiiB,KAAKywhB,gBAAgB/rhB,MAAMsR,MAAQoshB,EAAc,KACjDpiiB,KAAKywhB,gBAAgB/rhB,MAAMqR,OAASsshB,EAAe,KACnDriiB,KAAKy0hB,iBAAiBrte,MAAMk7e,EAAmBA,GAC/CtiiB,KAAK0whB,gBAAgB16gB,MAAQoshB,EAAcE,EAC3CtiiB,KAAK0whB,gBAAgB36gB,OAASsshB,EAAeC,EAC7CtiiB,KAAK0whB,gBAAgBhshB,MAAMsR,MAAQoshB,EAAc,KACjDpiiB,KAAK0whB,gBAAgBhshB,MAAMqR,OAASsshB,EAAe,KACnDriiB,KAAKgxhB,iBAAiB5pe,MAAMk7e,EAAmBA,IAEnDtiiB,KAAKy0hB,iBAAiBpgc,YAAc,EACpCr0F,KAAKgxhB,iBAAiB38b,YAAc,GACpC,IAASn4F,EAAI,EAAGA,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,IAAK,CACxC,IAAIsQ,GAAQwJ,EAAQhW,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB9if,MAAQhW,KAAK80E,YAAc,EAC3EtoE,EAAOxM,KAAKsoc,SAEZtoc,KAAK+nP,MAAM7rP,GAAG48f,kBAAoB,IAAI/ie,GAAKvpB,EAAMxM,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB9rf,EAAGhN,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB9if,MAAOhW,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB/if,QAI3J/V,KAAK+nP,MAAM7rP,GAAG48f,kBAAoB,IAAI/ie,GAAK/1B,KAAKsoc,SAAUtoc,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB9rf,EAAGhN,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB9if,MAAOhW,KAAK+nP,MAAM7rP,GAAG48f,kBAAkB/if,QAG5K/V,KAAKuiiB,wBAAwB/rhB,EAAgBS,EAAiBmrhB,EAAaC,EAAcrshB,EAAOD,IAGpG04e,EAAiBrzf,UAAUmniB,wBAA0B,SAAU/rhB,EAAgBS,EAAiBmrhB,EAAaC,EAAcrshB,EAAOD,GAE1G6F,WAAW5b,KAAKu1hB,gBAAgB7whB,MAAMqR,QACnC6F,WAAW5b,KAAKw1hB,cAAc9whB,MAAMqR,QAC3D/V,KAAKoX,aAAepX,KAAKu1hB,gBAAgBpphB,UACzCnM,KAAKywhB,gBAAgB/rhB,MAAMwP,SAAW,WACtClU,KAAKywhB,gBAAgB/rhB,MAAMgI,IAAM1M,KAAKoX,aAAalK,WAAa,KAChElN,KAAK0whB,gBAAgBhshB,MAAMwP,SAAW,WACtClU,KAAK0whB,gBAAgBhshB,MAAMgI,IAAM1M,KAAKoX,aAAalK,WAAa,KAChElN,KAAK2W,cAAgB3W,KAAKu1hB,gBAAgBvphB,WAC1ChM,KAAKywhB,gBAAgB/rhB,MAAM8H,KAAOxM,KAAK2W,cAAgB,KACvD3W,KAAK0whB,gBAAgBhshB,MAAM8H,KAAOxM,KAAK2W,cAAgB,KACvD3W,KAAKwiiB,sBAMT/zC,EAAiBrzf,UAAUoniB,mBAAqB,WAC5CxiiB,KAGK8xf,gBAGL,IAAK,IAFD/7e,EAAS/V,KAAKqyhB,cAAct8gB,OAC5B+tH,EAAW9jI,KAAKu1hB,gBAAgBpphB,UAC3BjQ,EAAI,EAAGA,EAAI8D,KAAK+nP,MAAMvrP,OAAQN,IAAK,CACxC,IAAIqxK,EAAOvtK,KAAK+nP,MAAM7rP,GAClB8Q,GAAKugK,EAAKurV,kBAAkB9rf,EAAIhN,KAAKg/hB,SAAW9iiB,EAAI,IAAM8D,KAAK80E,WAAa90E,KAAKg/hB,SAAW9iiB,EAAI,GAChGumiB,EAAQl1X,EAAKurV,kBAAkB/if,OAAS/V,KAAK80E,WAC7C4td,EAASn1X,EAAKurV,kBAAkB/rf,GACrBC,GAAK82H,GAAY92H,GAAK82H,EAAW/tH,GAC9B/I,EAAIy1hB,GAAS3+Z,GAAY92H,EAAIy1hB,GAAS3+Z,EAAW/tH,GACjD/I,GAAK82H,GAAY92H,EAAIy1hB,GAAS3+Z,EAAW/tH,IAGvD/V,KAAK2iiB,eAAep1X,EAAMm1X,EAAQ11hB,KAO9Cyhf,EAAiBrzf,UAAUuniB,eAAiB,SAAUp1X,EAAMxgK,EAAGC,GAC3D,IAAIgJ,EAAQu3J,EAAKurV,kBAAkB9if,MAAQhW,KAAK80E,WAC5C/+D,EAASw3J,EAAKurV,kBAAkB/if,OAAS/V,KAAK80E,WAE9C90E,KAAKwjgB,MAAMk2B,6BAAwEx+hB,IAA9C8E,KAAKwjgB,MAAMvhB,mBAAmBtjQ,aAA6B3+O,KAAKwjgB,MAAMvhB,mBAAmBtjQ,cAAgBpxE,GAAQvtK,KAAKwjgB,MAAMvhB,mBAAmBw2C,uBACpLz4hB,KAAKwjgB,MAAMvhB,mBAAmB2gD,yBAAyB71hB,EAAGC,EAAGgJ,EAAOD,GAExE/V,KAAK8xf,aAAattf,KAAK+oK,GACvBvtK,KAAK6iiB,WAAWt1X,EAAMxgK,EAAGC,EAAGgJ,EAAOD,IAKvC04e,EAAiBrzf,UAAUyniB,WAAa,SAAUt1X,EAAMxgK,EAAGC,EAAGgJ,EAAOD,GACjE/V,KAAKoyG,OAAO4mZ,cAAczrV,EAAMxgK,EAAI/M,KAAK2W,cAAe3J,EAAIhN,KAAKoX,aAAcpB,EAAOD,IAM1F04e,EAAiBrzf,UAAU0niB,mBAAqB,WAC5C,KAAIrliB,EAAkBuC,KAAK8xf,eAAiB9xf,KAAK8xf,aAAat1f,OAAS,GAAvE,CAGAwD,KAAK+1hB,eACL,IAAK,IAAI75hB,EAAI,EAAGA,EAAI8D,KAAK8xf,aAAat1f,OAAQN,IAAK,CAC/C,IAAIqxK,EAAOvtK,KAAK8xf,aAAa51f,GACzB8Z,EAAQu3J,EAAKurV,kBAAkB9if,MAAQhW,KAAK80E,WAC5C/+D,EAASw3J,EAAKurV,kBAAkB/if,OAAS/V,KAAK80E,WAC9C/nE,EAAIwgK,EAAKurV,kBAAkB/rf,EAC3BC,GAAKugK,EAAKurV,kBAAkB9rf,EAAIhN,KAAKg/hB,SAAW9iiB,EAAI,IAAM8D,KAAK80E,WAAa90E,KAAKg/hB,SAAW9iiB,EAAI,GACpG8D,KAAK6iiB,WAAWt1X,EAAMxgK,EAAGC,EAAGgJ,EAAOD,MAGpC04e,GACT2C,IC5tFE1C,GAA4B,WAC5B,SAASA,EAAWF,GAEhBxuf,KAAKwuf,YAAStzf,EACd8E,KAAKwuf,OAASA,EAiuBlB,OA/tBAlwf,OAAOuJ,eAAe6mf,EAAWtzf,UAAW,aACxCsM,IAAK,WACD,OAAO1H,KAAKwuf,QAAUxuf,KAAKwuf,OAAOgV,MAAMhiB,kBAE5C75e,YAAY,EACZC,cAAc,IAMlB8mf,EAAWtzf,UAAUu5f,sBAAwB,SAAUpsb,GACnD,IAAIyuM,KACA+rR,EAAaz2e,KAAKuB,MAAM0a,GAkB5B,OAjBAvoE,KAAKgjiB,qBAAqBD,EAAW1wC,gBAAiBryf,KAAKwuf,OAAO6D,iBAClEryf,KAAKijiB,qBAAqBF,EAAW9wC,gBAAiBjyf,KAAKwuf,OAAOyD,iBAC7Dx0f,EAAkBsliB,EAAWv1gB,cAC9BxtB,KAAKwuf,OAAOpgc,gBAAkBpuD,KAAK2whB,SAASoS,EAAWv1gB,WAAW6I,QAEjE54B,EAAkBsliB,EAAWvuC,gBAC9Bx0f,KAAKkjiB,kBAAkBH,EAAY/iiB,KAAKwuf,OAAOgG,eAE9C/2f,EAAkBsliB,EAAWnuP,QAC9B50S,KAAKmjiB,UAAUJ,EAAY/iiB,KAAKwuf,OAAO55M,OAEtCn3S,EAAkBsliB,EAAWx/hB,SAC9BvD,KAAKojiB,YAAYL,EAAY/iiB,KAAKwuf,OAAOjrf,QAExC9F,EAAkBsliB,EAAW/rR,WAC9Bh3Q,KAAKqjiB,cAAcN,EAAW/rR,SAAUA,GAErCA,GAEX03O,EAAWtzf,UAAUgoiB,YAAc,SAAU7miB,EAAMgH,GAC/C,IAAK,IAAIrH,EAAI,EAAGA,EAAIK,EAAKgH,OAAO/G,OAAQN,IAChCuB,EAAkBuC,KAAKwuf,OAAOjrf,OAAOu0f,WAAWv7f,EAAKgH,OAAOrH,GAAGq7B,QAC/Dv3B,KAAKsjiB,WAAW/miB,EAAMA,EAAKgH,OAAOrH,GAAIqH,IAIlDmrf,EAAWtzf,UAAUkoiB,WAAa,SAAU/miB,EAAMmI,EAAOnB,GACrD,IAAIggiB,EACJ,IAAK9liB,EAAkBiH,EAAMgC,MAAO,CAahC,GAZmB,cAAfhC,EAAMgC,QACN68hB,EAAS,IAAIpoC,IACNz0f,KAAO,aAEC,cAAfhC,EAAMgC,QACN68hB,EAAS,IAAI5iC,IACNj6f,KAAO,aAEbjJ,EAAkBiH,EAAM6yB,QACzBgsgB,EAAOhsgB,KAAO7yB,EAAM6yB,MAExBh0B,EAAOiB,KAAK++hB,IACP9liB,EAAkBiH,EAAMu2f,SAAU,CACnC,IAAIA,EAAU13f,EAAOu0f,WAAWpzf,EAAMu2f,SACtC,GAAKx9f,EAAkBw9f,GAKlB,CACD,IAAIuoC,EAAaxjiB,KAAKyjiB,SAAS/+hB,EAAMu2f,QAAS1+f,GAC1CmniB,OAAc,EAMVA,EALHjmiB,EAAkB+liB,IAAeA,EAAW98hB,OAAS68hB,EAAO78hB,KAIzC,cAAhB68hB,EAAO78hB,KACO4lD,KAAKuB,MAAM,wDAGXvB,KAAKuB,MAAM,0DAPf21e,EAUlBxjiB,KAAKsjiB,WAAW/miB,EAAMmniB,EAAangiB,GACnCggiB,EAAOtoC,QAAU13f,EAAOu0f,WAAW4rC,EAAYnsgB,WAnB3C0je,EAAQv0f,OAAS68hB,EAAO78hB,OACxB68hB,EAAOtoC,QAAUA,GAqB7B,IAAKx9f,EAAkBiH,EAAMkrD,MAAO,CAChC,IAAIA,EAAOrsD,EAAOu0f,WAAWpzf,EAAMkrD,MAC/B+ze,EAAY3jiB,KAAKyjiB,SAAS/+hB,EAAMkrD,KAAMrzD,GACtCmniB,OAAc,EAClB,GAAIjmiB,EAAkBmyD,GAAO,CACzB,GAAInyD,EAAkBkmiB,GAAY,CAE9B,IAAIC,KACJA,EAAWvxC,gBAAkB3tf,EAAM2tf,gBACnCuxC,EAAWrsgB,KAAO7yB,EAAM6yB,KAAO,QAC/BqsgB,EAAWl9hB,KAAO,YAElBk9hB,EAAW3oC,QAA4B,WAAlBv2f,EAAMu2f,QAAuB,yBAA4Bv2f,EAAMu2f,QAAU,QAC9FyoC,EAAcE,OAGdF,EAAcC,EAElB3jiB,KAAKsjiB,WAAW/miB,EAAMmniB,EAAangiB,GACnCggiB,EAAO3ze,KAAOnyD,EAAkB8F,EAAOu0f,WAAW4rC,EAAYnsgB,OAAS7yB,EAAMkrD,KAAOrsD,EAAOu0f,WAAW4rC,EAAYnsgB,WAGlHgsgB,EAAO3ze,KAAOA,EAStB,GANKnyD,EAAkBiH,EAAM2tf,kBACzBryf,KAAKgjiB,qBAAqBt+hB,EAAM2tf,gBAAiBkxC,EAAOlxC,iBAEvD50f,EAAkBiH,EAAMutf,kBACzBjyf,KAAKijiB,qBAAqBv+hB,EAAMutf,gBAAiBsxC,EAAOtxC,kBAEvDx0f,EAAkBiH,EAAM4mC,MACzB,GAAI5mC,EAAM4mC,OAAS5mC,EAAM6yB,KACrBgsgB,EAAOj4f,KAAOi4f,MAEb,CACD,IAAIj4f,EAAO/nC,EAAOu0f,WAAWpzf,EAAM4mC,MACnC,GAAK7tC,EAAkB6tC,IAASA,EAAK5kC,OAAS68hB,EAAO78hB,KAGhD,CACD,IAAIm9hB,EAAkB7jiB,KAAKyjiB,SAAS/+hB,EAAM4mC,KAAM/uC,GAC3CkB,EAAkBomiB,GAKnBN,EAAOj4f,KAAOi4f,GAJdvjiB,KAAKsjiB,WAAW/miB,EAAMsniB,EAAiBtgiB,GACvCggiB,EAAOj4f,KAAO/nC,EAAOu0f,WAAW+rC,EAAgBtsgB,YANpDgsgB,EAAOj4f,KAAOA,KAgBlCojd,EAAWtzf,UAAUqoiB,SAAW,SAAUlsgB,EAAMh7B,GAC5C,IAAK,IAAIL,EAAI,EAAGA,EAAIK,EAAKgH,OAAO/G,OAAQN,IACpC,GAAIK,EAAKgH,OAAOrH,GAAGq7B,OAASA,EACxB,OAAOh7B,EAAKgH,OAAOrH,IAK/Bwyf,EAAWtzf,UAAU8niB,kBAAoB,SAAU3miB,EAAMi4f,GACrD,IAAK,IAAIt4f,EAAI,EAAGA,EAAIK,EAAKi4f,cAAch4f,OAAQN,IAAK,CAChD,IAAIs+f,EAAe,IAAI2e,GACnB2qB,EAAWvniB,EAAKi4f,cAAct4f,GAElC,GADAs4f,EAAchwf,KAAKg2f,IACd/8f,EAAkBqmiB,KACdrmiB,EAAkBqmiB,EAASvpC,kBAC5BC,EAAaD,eAAiBupC,EAASvpC,iBAEtC98f,EAAkBqmiB,EAASn+c,SAC5B,IAAK,IAAIjiE,EAAI,EAAGA,EAAIoghB,EAASn+c,OAAOnpF,OAAQknB,IAAK,CAC7C,IAAI+rJ,EAAQq0X,EAASn+c,OAAOjiE,GAC5B,IAAKjmB,EAAkBgyK,GAAQ,CAC3B,IAAIgtV,EAAYz8f,KAAK+jiB,eAAet0X,EAAO+qV,GAC3CA,EAAa70a,OAAOnhF,KAAKi4f,OAOjD/N,EAAWtzf,UAAU2oiB,eAAiB,SAAUxniB,EAAMingB,GAClD,IAAI/G,EAAY,IAAI4c,GAAW7V,GAmB/B,MAlB8B,WAA1BjngB,EAAKu8gB,kBACLrc,EAAUqc,iBAAmB,SAC7Brc,EAAU+c,aAAgB/7gB,EAAkBlB,EAAKi9gB,cAAoC,GAApBj9gB,EAAKi9gB,eAGtE/c,EAAUqc,iBAAmBv8gB,EAAKu8gB,iBAClCrc,EAAUtC,QAAU59f,EAAK49f,QACzBsC,EAAU+c,aAAgB/7gB,EAAkBlB,EAAKi9gB,cAAoC,GAApBj9gB,EAAKi9gB,aAClEj9gB,EAAKk9gB,cAAgB,EACrBhd,EAAUgd,aAAel9gB,EAAKk9gB,aAG9Bhd,EAAUgd,aAAel9gB,EAAK29f,aAGtCuC,EAAU8c,gBAAkBh9gB,EAAKg9gB,gBACjCv5gB,KAAKgjiB,qBAAqBzmiB,EAAK81f,gBAAiBoK,EAAUpK,iBAC1Dryf,KAAKijiB,qBAAqB1miB,EAAK01f,gBAAiBwK,EAAUxK,iBACnDwK,GAEX/N,EAAWtzf,UAAU+niB,UAAY,SAAU5miB,EAAMyniB,GAC7C,IAAK,IAAI9niB,EAAI,EAAGA,EAAIK,EAAKq4S,MAAMp4S,OAAQN,IAAK,CACxC,IAAI8sG,EAAO,IAAIoxZ,GACXxlN,EAAQr4S,EAAKq4S,MAAM14S,GAClBuB,EAAkBm3S,EAAM2lN,kBACzBvxZ,EAAKuxZ,eAAiB3lN,EAAM2lN,eAC5BvxZ,EAAKwxZ,aAAex6f,KAAKwuf,OAAO20B,oBAAoBvuO,EAAM2lN,iBAE9DypC,EAAex/hB,KAAKwkG,GACfvrG,EAAkBm3S,EAAMylN,UACzBrxZ,EAAKqxZ,OAASzlN,EAAMylN,QAEpBzlN,EAAMjuS,eAAe,mBACrB3G,KAAKikiB,mBAAmBrvP,EAAM6lN,eAAgBzxZ,KAI1D0lZ,EAAWtzf,UAAU6oiB,mBAAqB,SAAU1niB,EAAMysG,GACtD,IAAIvrG,EAAkBlB,GAGtB,IAAK,IAAIL,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAIu+f,EAAiB,IAAIT,GACrBW,EAAgBp+f,EAAKL,GACzBu+f,EAAeN,QAAUQ,EAAcR,QACvCM,EAAeP,YAAcS,EAAcT,YACtCz8f,EAAkBk9f,EAAcV,qBACjCQ,EAAeR,kBAAoBj6f,KAAK+jiB,eAAeppC,EAAcV,kBAAmBQ,IAE5FzxZ,EAAKyxZ,eAAej2f,KAAKi2f,KAGjC/L,EAAWtzf,UAAUioiB,cAAgB,SAAU9miB,EAAMy6Q,GACjD,IAAK,IAAI96Q,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAI8uS,EAAU,IAAI8rN,GAClB9rN,EAAQ+rN,cAAgB,IAAIC,GAAehsN,GAC3CA,EAAQl5R,MAAQ5V,EAChB,IAAI+hB,EAAO1hB,EAAKL,GACXuB,EAAkBwgB,EAAK84e,gBACxB/2f,KAAKkkiB,mBAAmBjmhB,EAAK84e,cAAe/rN,EAAQ+rN,eAEpDt5f,EAAkBwgB,EAAK45e,kBACvB55e,EAAK45e,mBAET73f,KAAKwuf,OAAOqJ,eAAerzf,KAAKxE,KAAKw3f,kBAAkBv5e,EAAK45e,eAAgB73f,KAAKwuf,OAAOqJ,iBACxF73f,KAAKmkiB,cAAclmhB,EAAKkuR,OAAQnB,GAChC,IAAK,IAAIrjR,EAAM,EAAGA,EAAMqjR,EAAQqsN,aAAa76f,OAAQmrB,IACjDqjR,EAAQqsN,aAAa1ve,GAAK2ve,gBAAkBtsN,EAEhDh0B,EAASxyQ,KAAKwmS,KAMtB0jN,EAAWtzf,UAAUo8f,kBAAoB,SAAUj7f,EAAMs7f,GACrD,IAAIN,KACJ,IAAK95f,EAAkBlB,EAAKuuF,QAAS,CACjC,IAAIs5c,EAAY,IAAIh+B,GAAmB,aACvC7O,EAAI,GAAK6sC,EACTpkiB,KAAKmkiB,cAAc5niB,EAAKuuF,OAAOqhN,OAAQi4P,GAE3C,IAAK3miB,EAAkBlB,EAAK0vH,QAAS,CACjC,IAAIo4a,EAAY,IAAIj+B,GAAmB,aACvC7O,EAAI,GAAK8sC,EACTrkiB,KAAKmkiB,cAAc5niB,EAAK0vH,OAAOkgL,OAAQk4P,GAE3C,IAAK5miB,EAAkBlB,EAAKk7f,YAAa,CACrC,IAAIA,EAAa,IAAI2O,GAAmB,cACxC7O,EAAI,GAAKE,EACTz3f,KAAKmkiB,cAAc5niB,EAAKk7f,WAAWtrN,OAAQsrN,GAE/C,IAAKh6f,EAAkBlB,EAAKm7f,YAAa,CACrC,IAAIA,EAAa,IAAI0O,GAAmB,cACxC7O,EAAI,GAAKG,EACT13f,KAAKmkiB,cAAc5niB,EAAKm7f,WAAWvrN,OAAQurN,GAE/C,IAAKj6f,EAAkBlB,EAAKo7f,iBAAkB,CAC1C,IAAIA,EAAkB,IAAIyO,GAAmB,mBAC7C7O,EAAI,GAAKI,EACT33f,KAAKmkiB,cAAc5niB,EAAKo7f,gBAAgBxrN,OAAQwrN,GAEpD,IAAKl6f,EAAkBlB,EAAKq7f,iBAAkB,CAC1C,IAAIA,EAAkB,IAAIwO,GAAmB,mBAC7C7O,EAAI,GAAKK,EACT53f,KAAKmkiB,cAAc5niB,EAAKq7f,gBAAgBzrN,OAAQyrN,GAEpD,OAAOL,GAEX7I,EAAWtzf,UAAU+oiB,cAAgB,SAAU5niB,EAAMyuS,GACjDhrS,KAAKskiB,UAAU/niB,EAAMyuS,EAAQqsN,aAAcrsN,IAE/C0jN,EAAWtzf,UAAUkpiB,UAAY,SAAU/niB,EAAM4vS,EAAQtxR,GACrD,IAAKpd,EAAkBlB,GACnB,IAAK,IAAIL,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAIgsgB,EAAQ3rgB,EAAKL,GACjB,GAAIgsgB,EAAMvhgB,eAAe,WAAY,CACjC,IAEIswf,EAAY,IAAIC,GACpBD,EAAU5E,gBAAkB,IAAI+E,GAAiBH,GACjDA,EAAUhF,gBAAkB,IAAIkF,GAAiBF,GACjDj3f,KAAKgjiB,qBAAqB96B,EAAM7V,gBAAiB4E,EAAU5E,iBAC3Dryf,KAAKijiB,qBAAqB/6B,EAAMjW,gBAAiBgF,EAAUhF,iBAC3D,IAAIsyC,OAAW,EACV9miB,EAAkByqgB,EAAMjW,kBAAqBx0f,EAAkByqgB,EAAMjW,gBAAgBgO,YAEjFxigB,EADL8miB,EAAWvkiB,KAAKwuf,OAAOjrf,OAAOu0f,WAAWoQ,EAAMjW,gBAAgBgO,UAAW,eAEtEhJ,EAAUhF,gBAAgBwJ,WAAW8oC,GAGzCr8B,EAAMs8B,QAAQhoiB,OAAS,GACvBwD,KAAKykiB,eAAev8B,EAAMs8B,QAASvtC,GAff,GAiBxB9qN,EAAO3nS,KAAKyyf,GACZA,EAAUnlf,MAAQ5V,EAClB+6f,EAAUK,gBAAkBz8e,OAEvBqtf,EAAMvhgB,eAAe,SAC1B3G,KAAK0kiB,WAAWx8B,EAAO/7N,EAAQjwS,EAAG2e,KAKlD6ze,EAAWtzf,UAAUspiB,WAAa,SAAUx8B,EAAO/7N,EAAQr6R,EAAOk5R,GAC9D,IAAI5lO,EAAQ,IAAI6hc,GAChB7hc,EAAMtzD,MAAQA,EACdszD,EAAM4+b,YAAc,IAAIT,GAAan+b,GAChC3nE,EAAkByqgB,EAAMlE,cACzBhkgB,KAAK2kiB,iBAAiBz8B,EAAMlE,YAAa5+b,EAAM4+b,aAEnD5+b,EAAM1iC,MAAQwle,EAAMxle,MACpB0iC,EAAMnN,YAAciwc,EAAMjwc,YAC1B,IAAK,IAAI/7D,EAAI,EAAGA,EAAIgsgB,EAAMt7R,KAAKpwO,OAAQN,IAAK,CACxC,IAAIwpE,EAAM,IAAIygc,GACdzgc,EAAI4kc,UAAY,IAAIlG,GAAW1+b,GAC/B,IAAIk/d,EAAW18B,EAAMt7R,KAAK1wO,GAC1B,GAAI0oiB,EAASj+hB,eAAe,aAAc,CACtC3G,KAAK6kiB,eAAeD,EAASt6B,UAAW5kc,EAAI4kc,WAC5CtqgB,KAAK8kiB,mBAAmBF,EAAUl/d,EAAI4kc,WACtCtqgB,KAAK8kiB,mBAAmBF,EAASt6B,UAAW5kc,EAAI4kc,WAChD5kc,EAAI5zD,MAAQ5V,EACZ,IAAK,IAAIwnB,EAAI,EAAGA,EAAIwkf,EAAMt7R,KAAK1wO,GAAG0qE,MAAMpqE,OAAQknB,IAAK,CACjD,IAAIqkD,EAAO,IAAIk+b,GACfl+b,EAAK0gc,WAAa,IAAIrD,GAAYr9b,GAClCrC,EAAI2xb,aAAa7yf,KAAKujE,GACtBA,EAAKuvb,gBAAkB5xb,EACvBqC,EAAKj2D,MAAQ4R,EACbqkD,EAAKknK,SAAW/yO,EACZgsgB,EAAMt7R,KAAK1wO,GAAG0qE,MAAMljD,GAAG/c,eAAe,eACtC3G,KAAK+kiB,gBAAgB78B,EAAMt7R,KAAK1wO,GAAG0qE,MAAMljD,GAAG+kf,WAAY1gc,EAAK0gc,YAEjEzogB,KAAKmkiB,cAAcj8B,EAAMt7R,KAAK1wO,GAAG0qE,MAAMljD,GAAGyoR,OAAQpkO,IAG1D3C,EAAMiyb,aAAa7yf,KAAKkhE,GACxBA,EAAI4xb,gBAAkBlyb,EAE1BA,EAAMkyb,gBAAkBtsN,EACxBmB,EAAO3nS,KAAK4gE,GACZA,EAAM8lc,eAAgB,GAE1Bxc,EAAWtzf,UAAU0piB,mBAAqB,SAAUvoiB,EAAM+tgB,GACjD7sgB,EAAkBlB,EAAKuogB,cACxBwF,EAAUxF,WAAavogB,EAAKuogB,YAE3BrngB,EAAkBlB,EAAKwogB,mBACxBuF,EAAUvF,gBAAkBxogB,EAAKwogB,iBAEhCtngB,EAAkBlB,EAAKyogB,uBACxBsF,EAAUtF,oBAAsBzogB,EAAKyogB,qBAEpCvngB,EAAkBlB,EAAK0ogB,aACxBqF,EAAUrF,UAAY1ogB,EAAK0ogB,WAE1BxngB,EAAkBlB,EAAK2ogB,kBACxBoF,EAAUpF,eAAiB3ogB,EAAK2ogB,gBAE/BzngB,EAAkBlB,EAAK4ogB,sBACxBmF,EAAUnF,mBAAqB5ogB,EAAK4ogB,qBAG5CzW,EAAWtzf,UAAUqpiB,eAAiB,SAAUloiB,EAAM06f,EAAW+tC,GAE7D,IAAK,IADDnyB,EAAa,IAAIxL,GAAWpQ,GACvB/6f,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAIsiK,EAASjiK,EAAKL,GAClB,GAAIsiK,EAAO73J,eAAe,QAAS,CAC/B,IAAIwvB,OAAcj7B,EAclB,GAbI8E,KAAKwuf,OAAOgpC,aACZrhgB,EAAc,IAAIi9e,IACNxT,WAAa5/f,KAAKwuf,OAAO2wB,YAAYn/gB,KAAKwuf,OAAO2wB,YAAY3ihB,OAAS,GAGlF25B,EADqB,OAAhBqoI,EAAOxvI,KACE,IAAIskf,GAGJ,IAAI1K,GAEtBzye,EAAYk8d,gBAAkB,IAAI+E,GAAiBjhe,GACnDn2B,KAAKgjiB,qBAAqBxkY,EAAO6zV,gBAAiBl8d,EAAYk8d,gBAAiB2yC,IAE1EvniB,EAAkB+gK,EAAO6zV,mBAAqB50f,EAAkB+gK,EAAO6zV,gBAAgB4N,WAAY,CACpG,IAAIW,EAAY5ggB,KAAKwuf,OAAOjrf,OAAOu0f,WAAWt5V,EAAO6zV,gBAAgB4N,UAAW,aAChF9pe,EAAYk8d,gBAAgBoJ,WAAWmF,GAE3Czqe,EAAYnH,KAAOwvI,EAAOxvI,KAC1BmH,EAAY8zB,KAAO4od,EACnBA,EAAWz4f,SAAS5V,KAAK2xB,QAExB,GAAIqoI,EAAO73J,eAAe,eAAgB,CAC3C,IAAIstM,EAAQ,IAAI40T,GAAgBtsgB,EAAKL,GAAG23gB,eACxC5/T,EAAMggU,WAAa13gB,EAAKL,GAAG+3gB,WAC3BhgU,EAAMo+S,gBAAkB,IAAI+E,GAAiBnjT,GAC7CA,EAAMhqJ,KAAO4od,EACbA,EAAWz4f,SAAS5V,KAAKyvM,GACzBA,EAAM8rH,YAAcvhK,EAAOuhK,YAC3B9rH,EAAMj+L,MAAQ8of,GAAcO,oBAAoB7gW,EAAOxoJ,OACvDi+L,EAAMl+L,OAAS+of,GAAcO,oBAAoB7gW,EAAOzoJ,QACxD/V,KAAKgjiB,qBAAqBxkY,EAAO6zV,gBAAiBp+S,EAAMo+S,sBAEvD,GAAI7zV,EAAO73J,eAAe,gBAAmB63J,EAAO73J,eAAe,cAAqC,IAArB63J,EAAOkhW,UAAkB,CAC7G,IAAIE,EAAa,IAAIH,GAAgB,GACrCG,EAAWmT,YAAcv0W,EAAOu0W,YAChC/ygB,KAAKwuf,OAAO2wB,YAAY36gB,KAAKo7f,GAC7BA,EAAW31c,KAAO4od,EAClB7ygB,KAAKwuf,OAAOhie,OAAOhoB,KAAKo7f,GACxBiT,EAAWz4f,SAAS5V,KAAKo7f,QAExB,GAAIphW,EAAO73J,eAAe,aAAc,CACzC,IAAIo7D,OAAQ7mE,EACZ,GAAyB,IAArBsjK,EAAOkhW,WAGP,GAFA39b,EAAQ,IAAI09b,GAAgB,GAC5Bz/f,KAAKuygB,eAAiBxwc,EAClB/hE,KAAKwuf,OAAO2wB,YAAY3ihB,OAAS,EAAG,CACpCulE,EAAM69b,WAAa5/f,KAAKwuf,OAAO2wB,YAAYn/gB,KAAKwuf,OAAO2wB,YAAY3ihB,OAAS,GAC5EulE,EAAM69b,WAAW2S,eAAiBxwc,EAElC,IAAIkje,EAAkBpyB,EAAWz4f,SAAS5d,OAC1C,GAAIyoiB,GAAmB,GAAMpyB,EAAWz4f,SAAS6qhB,EAAkB,aAAcxlC,IAC1EoT,EAAWz4f,SAAS6qhB,EAAkB,GAAGlyB,aACxCF,EAAWz4f,SAAS6qhB,EAAkB,aAAcr8B,GAAiB,CAClDiK,EAAWz4f,SAAS6qhB,EAAkB,GAAGj2gB,KAC3Ctf,MAAM,UACvB1P,KAAKwuf,OAAOgpC,aAAc,UAKZ,IAArBh5X,EAAOkhW,YACZ39b,EAAQ,IAAI09b,GAAgB,GAExBz/f,KAAKwuf,OAAO2wB,YAAY3ihB,OAAS,IACjCulE,EAAM69b,WAAa5/f,KAAKwuf,OAAO2wB,YAAYn/gB,KAAKwuf,OAAO2wB,YAAY3ihB,OAAS,GAC5EulE,EAAM69b,WAAWD,SAAW59b,IAE3BtkE,EAAkBskE,EAAM69b,aAAe79b,EAAM69b,WAAW2S,iBACzDxwc,EAAMwwc,eAAiBxwc,EAAM69b,WAAW2S,eACxCxwc,EAAM69b,WAAW2S,eAAe5S,SAAW59b,GAG/C/hE,KAAKwuf,OAAO2wB,YAAYx2f,OAAO3oB,KAAKwuf,OAAO2wB,YAAY3ihB,OAAS,EAAG,GACnEwD,KAAKuygB,oBAAiBr3gB,EACtB8E,KAAKwuf,OAAOgpC,aAAc,EAC1Bx3hB,KAAKwuf,OAAO+oC,gBAAgB/yhB,KAAKu9D,EAAM69b,aAE3C79b,EAAM9X,KAAO4od,EACbA,EAAWz4f,SAAS5V,KAAKu9D,QAExB,GAAIy8F,EAAO73J,eAAe,gBAAiB,CAC5C,IAAIi3hB,OAAW1iiB,EAKf,GAJA0iiB,EAAW,IAAI90B,GAAmBtqW,EAAOo1W,cACzCgqB,EAASrmgB,KAAOinI,EAAOjnI,KACvBs7e,EAAWz4f,SAAS5V,KAAKo5hB,GACzBA,EAAS3ze,KAAO4od,EACY,IAAxBr0W,EAAOo1W,aACP5zgB,KAAKwuf,OAAOwuC,UAAU54hB,IAAIw5hB,EAASrmgB,KAAMqmgB,QAExC,GAA4B,IAAxBp/X,EAAOo1W,cACR5zgB,KAAKwuf,OAAOwuC,UAAU35S,YAAYu6S,EAASrmgB,MAAO,CAClD,IAAI2tgB,EAAgBlliB,KAAKwuf,OAAOwuC,UAAUt1hB,IAAIk2hB,EAASrmgB,MACvD2tgB,EAAczjiB,UAAYm8hB,EAC1BA,EAASn8hB,UAAYyjiB,IAKrCjuC,EAAUI,aAAa7yf,KAAKqugB,IAEhCnkB,EAAWtzf,UAAUupiB,iBAAmB,SAAUQ,EAAcnhC,GAC5DhkgB,KAAKoliB,aAAaD,EAAat3O,QAASm2M,EAAYn2M,SAC/CpwT,EAAkB0niB,EAAa90O,eAChC2zM,EAAY3zM,YAAc80O,EAAa90O,aAEtC5yT,EAAkB0niB,EAAajpR,cAChC8nP,EAAY9nP,WAAaipR,EAAajpR,YAErCz+Q,EAAkB0niB,EAAahpR,aAChC6nP,EAAY7nP,UAAYgpR,EAAahpR,WAEpC1+Q,EAAkB0niB,EAAa/oR,eAChC4nP,EAAY5nP,YAAc+oR,EAAa/oR,aAEtC3+Q,EAAkB0niB,EAAa9oR,gBAChC2nP,EAAY3nP,aAAe8oR,EAAa9oR,cAEvC5+Q,EAAkB0niB,EAAa/nC,cAChC4G,EAAY5G,WAAa+nC,EAAa/nC,YAE1Cp9f,KAAKqliB,aAAaF,EAAa/hC,QAASY,EAAYZ,SAC/C3lgB,EAAkB0niB,EAAalhC,kBAChCD,EAAYC,eAAiBkhC,EAAalhC,gBAEzCxmgB,EAAkB0niB,EAAajhC,kBAChCF,EAAYE,eAAiBihC,EAAajhC,gBAEzCzmgB,EAAkB0niB,EAAahhC,sBAChCH,EAAYG,mBAAqBghC,EAAahhC,qBAGtDzV,EAAWtzf,UAAU2piB,gBAAkB,SAAUI,EAAc18B,GACtDhrgB,EAAkB0niB,KACnBnliB,KAAKoliB,aAAaD,EAAat3O,QAAS46M,EAAW56M,SAC9Cs3O,EAAaG,sBAGdtliB,KAAKuliB,gBAAgBJ,EAAc18B,GAElChrgB,EAAkB0niB,EAAaj3O,aAChCu6M,EAAWv6M,UAAYi3O,EAAaj3O,WAEnCzwT,EAAkB0niB,EAAaryO,cAChC21M,EAAW31M,WAAaqyO,EAAaryO,YAEpCr1T,EAAkB0niB,EAAav0O,WAChC63M,EAAW73M,QAAUu0O,EAAav0O,SAEtC5wT,KAAKqliB,aAAaF,EAAa/hC,QAASqF,EAAWrF,SAC9C3lgB,EAAkB0niB,EAAah1e,qBAChCs4c,EAAWt4c,kBAAoBg1e,EAAah1e,mBAE3C1yD,EAAkB0niB,EAAahhC,sBAChCsE,EAAWtE,mBAAqBghC,EAAahhC,oBAE5C1mgB,EAAkB0niB,EAAajhC,kBAChCuE,EAAWvE,eAAiBihC,EAAajhC,kBAIrDxV,EAAWtzf,UAAUmqiB,gBAAkB,SAAUJ,EAAc18B,GACtDhrgB,EAAkB0niB,EAAajpR,cAChCusP,EAAWvsP,WAAaipR,EAAajpR,YAEpCz+Q,EAAkB0niB,EAAa/oR,eAChCqsP,EAAWrsP,YAAc+oR,EAAa/oR,aAErC3+Q,EAAkB0niB,EAAahpR,aAChCssP,EAAWtsP,UAAYgpR,EAAahpR,WAEnC1+Q,EAAkB0niB,EAAa9oR,gBAChCosP,EAAWpsP,aAAe8oR,EAAa9oR,eAG/CqyO,EAAWtzf,UAAUypiB,eAAiB,SAAUM,EAAc76B,GACrD7sgB,EAAkB0niB,KACd1niB,EAAkB0niB,EAAatgC,yBAChCyF,EAAUzF,sBAAwBsgC,EAAatgC,uBAE9CpngB,EAAkB0niB,EAAaz4gB,YAChC49e,EAAU59e,SAAWy4gB,EAAaz4gB,UAEjCjvB,EAAkB0niB,EAAa3gC,cAChC8F,EAAU9F,WAAa2gC,EAAa3gC,YAEnC/mgB,EAAkB0niB,EAAapvhB,UAChCu0f,EAAUv0f,OAASovhB,EAAapvhB,QAEpC/V,KAAKoliB,aAAaD,EAAat3O,QAASy8M,EAAUz8M,WAG1D6gM,EAAWtzf,UAAUgqiB,aAAe,SAAUI,EAAeC,GACpDhoiB,EAAkB+niB,KACnBxliB,KAAK0liB,YAAYF,EAAch5hB,KAAMi5hB,EAAWj5hB,MAChDxM,KAAK0liB,YAAYF,EAAc/4hB,MAAOg5hB,EAAWh5hB,OACjDzM,KAAK0liB,YAAYF,EAAc94hB,IAAK+4hB,EAAW/4hB,KAC/C1M,KAAK0liB,YAAYF,EAAc74hB,OAAQ84hB,EAAW94hB,QAClD3M,KAAK0liB,YAAYF,EAAc1ha,SAAU2ha,EAAW3ha,UACpD9jI,KAAK0liB,YAAYF,EAAc3ha,WAAY4ha,EAAW5ha,YACtD7jI,KAAK0liB,YAAYF,EAAc7iC,aAAc8iC,EAAW9iC,cACxD3igB,KAAK0liB,YAAYF,EAAc5iC,WAAY6iC,EAAW7iC,cAG9DlU,EAAWtzf,UAAUsqiB,YAAc,SAAUC,EAAcF,GAClDhoiB,EAAkBkoiB,KACdloiB,EAAkBkoiB,EAAatvgB,SAChCovgB,EAAWpvgB,MAAQr2B,KAAK2whB,SAASgV,EAAatvgB,QAE7C54B,EAAkBkoiB,EAAax9T,aAChCs9T,EAAWt9T,UAAYw9T,EAAax9T,WAEnC1qO,EAAkBkoiB,EAAanyc,aAChCiyc,EAAWjyc,UAAYmyc,EAAanyc,WAEnC/1F,EAAkBkoiB,EAAa12B,gBAChCw2B,EAAWx2B,aAAe02B,EAAa12B,gBAInDvgB,EAAWtzf,UAAUiqiB,aAAe,SAAUO,EAAeC,GACpDpoiB,EAAkBmoiB,KACdnoiB,EAAkBmoiB,EAAcx3e,mBACjCy3e,EAAYz3e,gBAAkBpuD,KAAK2whB,SAASiV,EAAcx3e,kBAEzD3wD,EAAkBmoiB,EAAcviC,mBACjCwiC,EAAYxiC,gBAAkBrjgB,KAAK2whB,SAASiV,EAAcviC,kBAEzD5lgB,EAAkBmoiB,EAAcE,UAAaroiB,EAAkBmoiB,EAActiC,gBAC9EuiC,EAAYviC,aAAgB7lgB,EAAkBmoiB,EAAcE,SAAmCF,EAActiC,aAAtCsiC,EAAcE,WAIjGp3C,EAAWtzf,UAAU4niB,qBAAuB,SAAUmC,EAAc9yC,EAAiB2yC,GACjF,IAAKvniB,EAAkB0niB,GAAe,CAClC,GAAIH,GAAqBG,EAAax+hB,eAAe,gBAEjD,YADA3G,KAAKgjiB,qBAAqBmC,EAAaY,aAAc1zC,GAGpD50f,EAAkB0niB,EAAa3mC,qBAChCnM,EAAgBmM,kBAAoB2mC,EAAa3mC,mBAEhD/ggB,EAAkB0niB,EAAa33P,aAChC6kN,EAAgB7kN,UAAY23P,EAAa33P,WAExC/vS,EAAkB0niB,EAAazmC,iBAChCrM,EAAgBqM,cAAgBymC,EAAazmC,eAE5CjhgB,EAAkB0niB,EAAa/1gB,YAChCije,EAAgBjje,SAAW+1gB,EAAa/1gB,UAEvC3xB,EAAkB0niB,EAAa31gB,cAChC6ie,EAAgB7ie,WAAa21gB,EAAa31gB,YAEzC/xB,EAAkB0niB,EAAal2e,QAChCojc,EAAgBpjc,KAAOk2e,EAAal2e,MAEnCxxD,EAAkB0niB,EAAah2e,UAChCkjc,EAAgBljc,OAASg2e,EAAah2e,QAErC1xD,EAAkB0niB,EAAaxmC,kBAChCtM,EAAgBsM,eAAiBwmC,EAAaxmC,gBAE7ClhgB,EAAkB0niB,EAAa1mC,aAChCpM,EAAgBoM,UAAYz+f,KAAK2whB,SAASwU,EAAa1mC,cAInE/P,EAAWtzf,UAAUu1hB,SAAW,SAAUt6f,GAEtC,OADmBA,GACI,WAE3Bq4d,EAAWtzf,UAAU6niB,qBAAuB,SAAUkC,EAAclzC,GAC3Dx0f,EAAkB0niB,KACd1niB,EAAkB0niB,EAAa/nC,cAChCnL,EAAgBmL,WAAa+nC,EAAa/nC,YAEzC3/f,EAAkB0niB,EAAa9nC,eAChCpL,EAAgBoL,YAAc8nC,EAAa9nC,aAE1C5/f,EAAkB0niB,EAAav2R,mBAChCqjP,EAAgBrjP,gBAAkBu2R,EAAav2R,iBAE9CnxQ,EAAkB0niB,EAAa5nC,gBAChCtL,EAAgBsL,aAAe4nC,EAAa5nC,cAE3C9/f,EAAkB0niB,EAAa7nC,iBAChCrL,EAAgBqL,cAAgB6nC,EAAa7nC,eAE5C7/f,EAAkB0niB,EAAa3zR,eAChCygP,EAAgBzgP,YAAc2zR,EAAa3zR,aAE1C/zQ,EAAkB0niB,EAAa3nC,mBAChCvL,EAAgBuL,gBAAkB2nC,EAAa3nC,iBAE9C//f,EAAkB0niB,EAAanigB,iBAChCivd,EAAgBjvd,cAAgBmigB,EAAanigB,eAE5CvlC,EAAkB0niB,EAAa1nC,gBAChCxL,EAAgBwL,aAAe0nC,EAAa1nC,cAEhDxL,EAAgB+F,WAAa,IAAI8C,GAC7BqqC,EAAax+hB,eAAe,eAC5B3G,KAAKgmiB,gBAAgBb,EAAclzC,EAAgB+F,YAEnDmtC,EAAax+hB,eAAe,SAC5B3G,KAAKimiB,aAAad,EAAahpC,KAAMlK,EAAgBkK,QAIjEzN,EAAWtzf,UAAU4qiB,gBAAkB,SAAU99B,EAAOlQ,GAC/Cv6f,EAAkByqgB,EAAMlQ,cACpBv6f,EAAkByqgB,EAAMlQ,WAAWqC,UACpCrC,EAAWqC,OAAS6N,EAAMlQ,WAAWqC,OACrCrC,EAAWhvZ,KAAOhpG,KAAKwuf,OAAOoxB,YAAY1X,EAAMlQ,WAAWqC,SAE1D58f,EAAkByqgB,EAAMlQ,WAAWkD,mBACpClD,EAAWkD,gBAAkBgN,EAAMlQ,WAAWkD,mBAI1DxM,EAAWtzf,UAAU8oiB,mBAAqB,SAAU3niB,EAAMw6f,GACjDt5f,EAAkBlB,EAAK6gd,aACxB25C,EAAc35C,UAAY7gd,EAAK6gd,WAE9B3/c,EAAkBlB,EAAKi0Q,cACxBumP,EAAcvmP,WAAaj0Q,EAAKi0Q,YAE/B/yQ,EAAkBlB,EAAK2/Q,cACxB66O,EAAc76O,WAAa3/Q,EAAK2/Q,YAE/Bz+Q,EAAkBlB,EAAK4/Q,aACxB46O,EAAc56O,UAAY5/Q,EAAK4/Q,WAE9B1+Q,EAAkBlB,EAAK6/Q,eACxB26O,EAAc36O,YAAc7/Q,EAAK6/Q,aAEhC3+Q,EAAkBlB,EAAK8/Q,gBACxB06O,EAAc16O,aAAe9/Q,EAAK8/Q,cAEjC5+Q,EAAkBlB,EAAKojiB,kBACxB5oC,EAAc4oC,eAAiBpjiB,EAAKojiB,gBAEnCliiB,EAAkBlB,EAAKsmhB,kBACxB9rB,EAAc8rB,eAAiBtmhB,EAAKsmhB,gBAEnCplhB,EAAkBlB,EAAKs1hB,sBACxB96B,EAAc86B,mBAAqBt1hB,EAAKs1hB,oBAEvCp0hB,EAAkBlB,EAAKu1hB,4BACxB/6B,EAAc+6B,yBAA2Bv1hB,EAAKu1hB,2BAGtDpjC,EAAWtzf,UAAU6qiB,aAAe,SAAUC,EAAO/pC,GACjD,IAAK,IAAIjggB,EAAI,EAAGA,EAAIgqiB,EAAM1piB,OAAQN,IAAK,CACnC,IAAIiqiB,EAAU,IAAIxqC,GAClBwqC,EAAQjyhB,SAAWgyhB,EAAMhqiB,GAAGgY,SAC5BiyhB,EAAQ3yB,UAAY0yB,EAAMhqiB,GAAGs3gB,UAC7B2yB,EAAQnqC,eAAiBkqC,EAAMhqiB,GAAG8/f,eAClCmqC,EAAQlqC,iBAAmBiqC,EAAMhqiB,GAAG+/f,iBACpCE,EAAK33f,KAAK2hiB,KAGXz3C,KCzuBP03C,GAA0C,WAI1C,SAASA,EAAyBnwd,GAC9Bj2E,KAAKqmiB,YAASnriB,EACd8E,KAAKsmiB,cAAWpriB,EAChB8E,KAAKumiB,iBAAcrriB,EACnB8E,KAAKwmiB,qBAAkBtriB,EACvB8E,KAAKymiB,yBAAsBvriB,EAC3B8E,KAAK0miB,sBAAmBxriB,EACxB8E,KAAK2miB,WAAa,EAClB3miB,KAAK4miB,iBAAc1riB,EACnB8E,KAAKi2E,UAAYA,EAgUrB,OA9TA33E,OAAOuJ,eAAeu+hB,EAAyBhriB,UAAW,YAItDsM,IAAK,WACD,OAAO1H,KAAK2miB,YAEhBt/hB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK2miB,aAGnB3miB,KAAK2miB,WAAa5piB,EAClBiD,KAAK6miB,sBAAsB,cAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu+hB,EAAyBhriB,UAAW,cAItDsM,IAAK,WACD,OAAO1H,KAAK8miB,cAEhBz/hB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK8miB,eAGnB9miB,KAAK8miB,aAAe/piB,EACpBiD,KAAK6miB,sBAAsB,gBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu+hB,EAAyBhriB,UAAW,aAItDsM,IAAK,WACD,OAAO1H,KAAK4miB,aAEhBv/hB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK4miB,cAGnB5miB,KAAK4miB,YAAc7piB,EACnBiD,KAAK6miB,sBAAsB,eAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu+hB,EAAyBhriB,UAAW,QAItDsM,IAAK,WACD,OAAO1H,KAAKqmiB,QAEhBh/hB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKqmiB,SAGnBrmiB,KAAKqmiB,OAAStpiB,EACdiD,KAAK6miB,sBAAsB,UAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu+hB,EAAyBhriB,UAAW,UAItDsM,IAAK,WACD,OAAO1H,KAAKsmiB,UAEhBj/hB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKmvD,SAGnBnvD,KAAKsmiB,SAAWvpiB,EAChBiD,KAAK6miB,sBAAsB,YAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu+hB,EAAyBhriB,UAAW,iBAItDsM,IAAK,WACD,OAAO1H,KAAKwmiB,iBAEhBn/hB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKwmiB,kBAGnBxmiB,KAAKwmiB,gBAAkBzpiB,EACvBiD,KAAK6miB,sBAAsB,mBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu+hB,EAAyBhriB,UAAW,qBAItDsM,IAAK,WACD,OAAO1H,KAAKymiB,qBAEhBp/hB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKymiB,sBAGnBzmiB,KAAKymiB,oBAAsB1piB,EAC3BiD,KAAK6miB,sBAAsB,uBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu+hB,EAAyBhriB,UAAW,aAItDsM,IAAK,WACD,OAAO1H,KAAKumiB,aAEhBl/hB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKumiB,cAGnBvmiB,KAAKumiB,YAAcxpiB,EACnBiD,KAAK6miB,sBAAsB,eAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu+hB,EAAyBhriB,UAAW,kBAItDsM,IAAK,WACD,OAAO1H,KAAK0miB,kBAEhBr/hB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK0miB,mBAGnB1miB,KAAK0miB,iBAAmB3piB,EACxBiD,KAAK6miB,sBAAsB,oBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBw+hB,EAAyBhriB,UAAUgS,iBAAmB,SAAU8tD,GAC5D,OAAQA,GACJ,IAAK,OACD,OAAOl7D,KAAKivD,KAChB,IAAK,SACD,OAAOjvD,KAAKmvD,OAChB,IAAK,WACD,GAAInvD,KAAKovB,UAAY,EACjB,OAAOpvB,KAAKovB,SAEhB,OACJ,IAAK,aACD,OAAOpvB,KAAKwvB,WAChB,IAAK,gBACD,OAAOxvB,KAAK0+f,cAChB,IAAK,oBACD,OAAO1+f,KAAKw+f,kBAChB,IAAK,iBACD,OAAOx+f,KAAK2+f,eAChB,IAAK,YACD,OAAO3+f,KAAKwtS,UAChB,IAAK,YACD,OAAOxtS,KAAKy+f,UAChB,QACI,SAOZ2nC,EAAyBhriB,UAAUyriB,sBAAwB,SAAU78hB,GAEjE,IAAKvM,EAAkBuC,KAAKi2E,aAAej2E,KAAKi2E,UAAU8wd,YAAa/miB,KAAKi2E,UAAUutb,MAAMtR,gBAAmBlyf,KAAKi2E,UAAUutb,MAAM3U,mBAAoB7uf,KAAKi2E,UAAUutb,MAAMhiB,kBAAsBxhf,KAAKi2E,UAAU+wd,wBAG7MvpiB,EAAkBuC,KAAKi2E,aAAex4E,EAAkBuC,KAAKi2E,UAAU14E,SAAWyC,KAAKi2E,UAAU+wd,qBAAsB,CACxH,IAAIC,EAAgBjniB,KAAKoN,iBAAiBpD,GACrCvM,EAAkBwpiB,IACnBjniB,KAAKi2E,UAAUutb,MAAM1U,aAAao4C,uBAAuBl9hB,EAAci9hB,KAUnFb,EAAyBhriB,UAAUu+f,WAAa,SAAUp7d,GACtDv+B,KAAKiggB,UAAaxigB,EAAkB8gC,EAAOo/d,eAA6C,yBAA5Bp/d,EAAOo/d,cAAcpme,KACjFv3B,KAAKovB,SAAWmP,EAAOnP,SACvBpvB,KAAKwvB,WAAa+O,EAAO/O,WACzBxvB,KAAKivD,KAAO1wB,EAAO0wB,KACnBjvD,KAAKmvD,OAAS5wB,EAAO4wB,OACrBnvD,KAAKw+f,kBAAoBjge,EAAOige,kBAChCx+f,KAAKwtS,UAAYjvQ,EAAOivQ,UACxBxtS,KAAKy+f,UAAYlge,EAAOkge,UACxBz+f,KAAK2+f,eAAiBpge,EAAOoge,eAC7B3+f,KAAK0+f,cAAgBnge,EAAOmge,eAOhC0nC,EAAyBhriB,UAAU+riB,cAAgB,SAAU5ogB,GACpD9gC,EAAkBuC,KAAKivD,OAASjvD,KAAKivD,OAAS1wB,EAAO0wB,OACtDjvD,KAAKivD,UAAO/zD,GAEXuC,EAAkBuC,KAAKmvD,SAAWnvD,KAAKmvD,SAAW5wB,EAAO4wB,SAC1DnvD,KAAKmvD,YAASj0D,GAEI,IAAlB8E,KAAKovB,UAAkBpvB,KAAKovB,WAAamP,EAAOnP,WAChDpvB,KAAKovB,SAAW,GAEf3xB,EAAkBuC,KAAKwvB,aAAexvB,KAAKwvB,aAAe+O,EAAO/O,aAClExvB,KAAKwvB,gBAAat0B,GAEjBuC,EAAkBuC,KAAK2+f,iBAAmB3+f,KAAK2+f,iBAAmBpge,EAAOoge,iBAC1E3+f,KAAK2+f,oBAAiBzjgB,GAErBuC,EAAkBuC,KAAKw+f,oBAAsBx+f,KAAKw+f,oBAAsBjge,EAAOige,oBAChFx+f,KAAKw+f,uBAAoBtjgB,GAExBuC,EAAkBuC,KAAKy+f,YAAez+f,KAAKy+f,YAAclge,EAAOkge,YACjEz+f,KAAKy+f,eAAYvjgB,GAEhBuC,EAAkBuC,KAAKwtS,YAAcxtS,KAAKwtS,YAAcjvQ,EAAOivQ,YAChExtS,KAAKwtS,eAAYtyS,GAEhBuC,EAAkBuC,KAAK0+f,gBAAkB1+f,KAAK0+f,gBAAkBnge,EAAOmge,gBACxE1+f,KAAK0+f,mBAAgBxjgB,IAS7BkriB,EAAyBhriB,UAAU2+f,YAAc,SAAUqtC,GACvDpniB,KAAKivD,KAAOm4e,EAAyBn4e,KACrCjvD,KAAKmvD,OAASi4e,EAAyBj4e,OACvCnvD,KAAKwtS,UAAY45P,EAAyB55P,UAC1CxtS,KAAK0+f,cAAgB0oC,EAAyB1oC,cAC9C1+f,KAAKw+f,kBAAoB4oC,EAAyB5oC,kBAClDx+f,KAAK2+f,eAAiByoC,EAAyBzoC,eAC/C3+f,KAAKovB,SAAWg4gB,EAAyBh4gB,SACzCpvB,KAAKwvB,WAAa43gB,EAAyB53gB,WAC3CxvB,KAAKy+f,UAAY2oC,EAAyB3oC,UAC1Cz+f,KAAKiggB,UAAYmnC,EAAyBnnC,WAQ9CmmC,EAAyBhriB,UAAUmjgB,cAAgB,SAAUhge,GACzD,OAAQv+B,KAAKovB,WAAamP,EAAOnP,UAC1BpvB,KAAK0+f,gBAAkBnge,EAAOmge,eAC9B1+f,KAAKivD,OAAS1wB,EAAO0wB,MACrBjvD,KAAKwvB,aAAe+O,EAAO/O,YAC3BxvB,KAAKwtS,YAAcjvQ,EAAOivQ,WAC1BxtS,KAAK2+f,iBAAmBpge,EAAOoge,gBAC/B3+f,KAAKmvD,SAAW5wB,EAAO4wB,QACvBnvD,KAAKw+f,oBAAsBjge,EAAOige,mBAClCx+f,KAAKy+f,YAAclge,EAAOkge,WAOrC2nC,EAAyBhriB,UAAUoggB,YAAc,WAC7Cx7f,KAAK2miB,WAAa,EAClB3miB,KAAKqmiB,YAASnriB,EACd8E,KAAKsmiB,cAAWpriB,EAChB8E,KAAK8miB,kBAAe5riB,EACpB8E,KAAK4miB,iBAAc1riB,EACnB8E,KAAKumiB,iBAAcrriB,EACnB8E,KAAKwmiB,qBAAkBtriB,EACvB8E,KAAK0miB,sBAAmBxriB,EACxB8E,KAAKymiB,yBAAsBvriB,EAC3B8E,KAAKiggB,eAAY/kgB,GAOrBkriB,EAAyBhriB,UAAUiX,QAAU,WACzCrS,KAAK2miB,gBAAazriB,EAClB8E,KAAKqmiB,YAASnriB,EACd8E,KAAKsmiB,cAAWpriB,EAChB8E,KAAK8miB,kBAAe5riB,EACpB8E,KAAK4miB,iBAAc1riB,EACnB8E,KAAKumiB,iBAAcrriB,EACnB8E,KAAKwmiB,qBAAkBtriB,EACvB8E,KAAKymiB,yBAAsBvriB,EAC3B8E,KAAK0miB,sBAAmBxriB,EACxB8E,KAAKi2E,eAAY/6E,EACjB8E,KAAKiggB,eAAY/kgB,GAEdkriB,KAMPiB,GAA0C,WAI1C,SAASA,EAAyBpxd,EAAWu4a,GAEzCxuf,KAAKsniB,aAAe,EACpBtniB,KAAKuniB,cAAgB,EACrBvniB,KAAKwniB,gBAAkB,EACvBxniB,KAAKyniB,eAAiB,EACtBzniB,KAAK0niB,qBAAkBxsiB,EACvB8E,KAAK2niB,kBAAoB,EACzB3niB,KAAK4niB,cAAgB,EACrB5niB,KAAK6niB,uBAAoB3siB,EACzB8E,KAAK8niB,mBAAqB,EAC1B9niB,KAAKi2E,UAAYA,EACjBj2E,KAAKwuf,OAASA,EAodlB,OAldAlwf,OAAOuJ,eAAew/hB,EAAyBjsiB,UAAW,cAKtDsM,IAAK,WACD,OAAO1H,KAAKsniB,cAEhBjgiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKsniB,eAGnBtniB,KAAKsniB,aAAevqiB,EACpBiD,KAAK6miB,sBAAsB,gBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/hB,EAAyBjsiB,UAAW,eAKtDsM,IAAK,WACD,OAAO1H,KAAKuniB,eAEhBlgiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKuniB,gBAGnBvniB,KAAKuniB,cAAgBxqiB,EACrBiD,KAAK6miB,sBAAsB,iBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/hB,EAAyBjsiB,UAAW,mBAKtDsM,IAAK,WACD,OAAO1H,KAAK2niB,mBAEhBtgiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK2niB,oBAGnB3niB,KAAK2niB,kBAAoB5qiB,EACzBiD,KAAK6miB,sBAAsB,qBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/hB,EAAyBjsiB,UAAW,iBAKtDsM,IAAK,WACD,OAAO1H,KAAK0niB,iBAEhBrgiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK0niB,kBAGnB1niB,KAAK0niB,gBAAkB3qiB,EACvBiD,KAAK6miB,sBAAsB,mBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/hB,EAAyBjsiB,UAAW,gBAKtDsM,IAAK,WACD,OAAO1H,KAAKyniB,gBAEhBpgiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKyniB,iBAGnBzniB,KAAKyniB,eAAiB1qiB,EACtBiD,KAAK6miB,sBAAsB,kBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/hB,EAAyBjsiB,UAAW,iBAKtDsM,IAAK,WACD,OAAO1H,KAAKwniB,iBAEhBngiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKwniB,kBAGnBxniB,KAAKwniB,gBAAkBzqiB,EACvBiD,KAAK6miB,sBAAsB,mBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/hB,EAAyBjsiB,UAAW,eAKtDsM,IAAK,WACD,OAAO1H,KAAK4niB,eAEhBvgiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK4niB,gBAGnB5niB,KAAK4niB,cAAgB7qiB,EACrBiD,KAAK6miB,sBAAsB,iBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/hB,EAAyBjsiB,UAAW,mBAKtDsM,IAAK,WACD,OAAO1H,KAAK6niB,mBAEhBxgiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK6niB,oBAGnB7niB,KAAK6niB,kBAAoB9qiB,EACzBiD,KAAK6miB,sBAAsB,qBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/hB,EAAyBjsiB,UAAW,mBAKtDsM,IAAK,WACD,OAAO1H,KAAK8niB,mBAEhBzgiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK8niB,oBAGnB9niB,KAAK8niB,kBAAoB/qiB,EACzBiD,KAAK6miB,sBAAsB,qBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew/hB,EAAyBjsiB,UAAW,YAItDsM,IAAK,WACD,IAAIswf,OAAa98f,EACb8tG,EAAOhpG,KAAKwuf,OAAOoxB,YAAY5/gB,KAAKq6f,QACxC,GAAIrxZ,aAAgBoxZ,IAASp6f,KAAK8niB,mBAAqB,GAAK9niB,KAAK8niB,kBAAoB,EAAG,CACpF,IAAIrrC,EAAYzzZ,EAAK0xZ,aAAa16f,KAAKk7f,iBACvC,GAAIuB,aAAqB4c,GACrB,GAAmC,WAA/B5c,EAAUqc,iBACV9gB,EAAayE,EAAU+c,iBAEtB,CACDxhB,EAAayE,EAAU+c,aACvB,IAAK,IAAIt9gB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAI6riB,EAAe,KAAO7riB,EAAI,GAC9B,GAAI87f,EAAWz5f,QAAQwpiB,IAAiB,EAAG,CAC3B7riB,IAAM8D,KAAK8niB,mBAAgC9+b,EAAK0xZ,aAAax+f,GAAzE,IACI8riB,EAAkBhoiB,KAAKi2E,UAAUgyd,sBAAsBjoiB,KAAKi2E,UAAU14E,MAAM05f,WAEhFe,EADegwC,EAAkBA,EAAgBh5gB,KAAO,MAO5E,OAAOgpe,GAEXrwf,YAAY,EACZC,cAAc,IAElBy/hB,EAAyBjsiB,UAAUgS,iBAAmB,SAAU8tD,GAC5D,OAAQA,GACJ,IAAK,aACD,OAAOl7D,KAAKo9f,WAChB,IAAK,cACD,OAAOp9f,KAAKq9f,YAChB,IAAK,kBACD,OAAOr9f,KAAK4uQ,gBAChB,IAAK,gBACD,OAAO5uQ,KAAKs9f,cAChB,IAAK,eACD,OAAOt9f,KAAKu9f,aAChB,IAAK,gBACD,OAAOv9f,KAAKgjC,cAChB,IAAK,cACD,OAAOhjC,KAAKwxQ,YAChB,IAAK,kBACD,OAAOxxQ,KAAKw9f,gBAChB,QACI,SAOZ6pC,EAAyBjsiB,UAAUyriB,sBAAwB,SAAU78hB,GACjE,IAAKvM,EAAkBuC,KAAKi2E,aACvBj2E,KAAKi2E,UAAUutb,MAAMtR,gBAAmBlyf,KAAKi2E,UAAUutb,MAAM3U,kBAC1D7uf,KAAKi2E,UAAU+wd,wBAGlBvpiB,EAAkBuC,KAAKi2E,aAAex4E,EAAkBuC,KAAKi2E,UAAU14E,SAAWyC,KAAKi2E,UAAU+wd,qBAAsB,CACxH,IAAIl4C,EAAe9uf,KAAKi2E,UAAUutb,MAAM1U,aACpC/xf,EAAQiD,KAAKoN,iBAAiBpD,GAClC,KAAsB,eAAjBA,GAAkD,gBAAjBA,GAAmD,oBAAjBA,GAC/DjN,IAAU,MAAQA,EAAQ,MAC/B,OAEiB,oBAAjBiN,EACA8kf,EAAao5C,oBAAoBloiB,KAAKwuf,OAAOoxB,YAAY5/gB,KAAKq6f,QAASr6f,KAAKk7f,iBAG5EpM,EAAaq5C,uBAAuBn+hB,EAAcjN,EAAwB,kBAAjBiN,GAAiD,KAUtHq9hB,EAAyBjsiB,UAAUu+f,WAAa,SAAUp7d,GACtDv+B,KAAKiggB,UAAaxigB,EAAkB8gC,EAAOw5d,WAAqC,SAAxBx5d,EAAOw5d,UAAUxge,KACzEv3B,KAAKo9f,WAAa7+d,EAAO6+d,WACzBp9f,KAAKq9f,YAAc9+d,EAAO8+d,YAC1Br9f,KAAK4uQ,gBAAkBrwO,EAAOqwO,gBAC9B5uQ,KAAKu9f,aAAeh/d,EAAOg/d,aAC3Bv9f,KAAKs9f,cAAgB/+d,EAAO++d,cAC5Bt9f,KAAKwxQ,YAAcjzO,EAAOizO,YAC1BxxQ,KAAKw9f,gBAAkBj/d,EAAOi/d,gBAC9Bx9f,KAAKgjC,cAAgBzE,EAAOyE,cACvBvlC,EAAkB8gC,EAAOy5d,aAAgBv6f,EAAkB8gC,EAAOy5d,WAAWqC,SAK9Er6f,KAAKq6f,YAASn/f,EACd8E,KAAKk7f,gBAAkB,IALvBl7f,KAAKq6f,OAAS97d,EAAOy5d,WAAWqC,OAChCr6f,KAAKk7f,gBAAkB38d,EAAOy5d,WAAWkD,kBAYjDmsC,EAAyBjsiB,UAAUgtiB,aAAe,SAAU7pgB,GACpD9gC,EAAkB8gC,KAGjB9gC,EAAkBuC,KAAKu9f,gBACxBh/d,EAAOg/d,aAAev9f,KAAKu9f,cAE1B9/f,EAAkBuC,KAAKs9f,iBACxB/+d,EAAO++d,cAAgBt9f,KAAKs9f,eAE3B7/f,EAAkBuC,KAAKo9f,cACxB7+d,EAAO6+d,WAAap9f,KAAKo9f,YAExB3/f,EAAkBuC,KAAKq9f,eACxB9+d,EAAO8+d,YAAcr9f,KAAKq9f,aAEzB5/f,EAAkBuC,KAAKgjC,iBACxBzE,EAAOyE,cAAgBhjC,KAAKgjC,eAE3BvlC,EAAkBuC,KAAKwxQ,eACxBjzO,EAAOizO,YAAcxxQ,KAAKwxQ,aAEzB/zQ,EAAkBuC,KAAKw9f,mBACxBj/d,EAAOi/d,gBAAkBx9f,KAAKw9f,iBAE7B//f,EAAkBuC,KAAK4uQ,mBACxBrwO,EAAOqwO,gBAAkB5uQ,KAAK4uQ,mBAQtCy4R,EAAyBjsiB,UAAU+riB,cAAgB,SAAU5ogB,GACpD9gC,EAAkBuC,KAAKo9f,aAAep9f,KAAKo9f,aAAe7+d,EAAO6+d,aAClEp9f,KAAKo9f,gBAAaligB,GAEjBuC,EAAkBuC,KAAKq9f,cAAgBr9f,KAAKq9f,cAAgB9+d,EAAO8+d,cACpEr9f,KAAKq9f,iBAAcnigB,GAElBuC,EAAkBuC,KAAK4uQ,kBAAoB5uQ,KAAK4uQ,kBAAoBrwO,EAAOqwO,kBAC5E5uQ,KAAK4uQ,qBAAkB1zQ,GAEF,IAArB8E,KAAKwxQ,aAAqBxxQ,KAAKwxQ,cAAgBjzO,EAAOizO,cACtDxxQ,KAAKwxQ,YAAc,IAEK,IAAxBxxQ,KAAKs9f,eAAwBt9f,KAAKs9f,gBAAkB/+d,EAAO++d,gBAC3Dt9f,KAAKs9f,eAAiB,IAEC,IAAvBt9f,KAAKu9f,cAAuBv9f,KAAKu9f,eAAiBh/d,EAAOg/d,eACzDv9f,KAAKu9f,cAAgB,GAEpB9/f,EAAkBuC,KAAKw9f,kBAAoBx9f,KAAKw9f,kBAAoBj/d,EAAOi/d,kBAC5Ex9f,KAAKw9f,qBAAkBtigB,GAEtBuC,EAAkBuC,KAAKgjC,gBAAkBhjC,KAAKgjC,gBAAkBzE,EAAOyE,gBACxEhjC,KAAKgjC,mBAAgB9nC,GAGrB8E,KAAKk7f,iBAAmB,IAAMz9f,EAAkBuC,KAAKq6f,UAAY58f,EAAkB8gC,EAAOy5d,aAAez5d,EAAOy5d,WAAWkD,kBAAoBl7f,KAAKk7f,mBACpJl7f,KAAKk7f,iBAAmB,IAGxBz9f,EAAkB8gC,EAAOy5d,aAAev6f,EAAkB8gC,EAAOy5d,WAAWqC,UAAa58f,EAAkBuC,KAAKq6f,SAAWr6f,KAAKq6f,SAAW97d,EAAOy5d,WAAWqC,UAC7Jr6f,KAAKq6f,YAASn/f,IAQtBmsiB,EAAyBjsiB,UAAUoggB,YAAc,WAC7Cx7f,KAAKo9f,WAAa,EAClBp9f,KAAKq9f,YAAc,EACnBr9f,KAAKs9f,cAAgB,EACrBt9f,KAAKu9f,aAAe,EACpBv9f,KAAK4uQ,gBAAkB,EACvB5uQ,KAAKwxQ,YAAc,EACnBxxQ,KAAKgjC,mBAAgB9nC,EACrB8E,KAAKw9f,qBAAkBtigB,EACvB8E,KAAKq6f,YAASn/f,EACd8E,KAAKk7f,iBAAmB,EACxBl7f,KAAKiggB,eAAY/kgB,GAOrBmsiB,EAAyBjsiB,UAAUitiB,QAAU,WACzC,IAAIr/b,EAAOhpG,KAAKwuf,OAAOoxB,YAAY5/gB,KAAKq6f,QACxC,IAAK58f,EAAkBurG,GAAO,CAC1B,IAAIq6a,EAAU,IAAIjpB,GACdI,EAAe,IAAI2e,GACnBmvB,EAAsBtoiB,KAAKwuf,OAAO20B,oBAAoBn6a,EAAKuxZ,gBAC3D+Z,EAASt0gB,KAAKi2E,UAAUutb,MAAM1U,aAClC,GAAKrxf,EAAkB6qiB,GAQnB9tC,EAAa70a,OAAOnhF,KAAK,IAAI60gB,GAAW7e,SAPxC,IAAK,IAAIt+f,EAAI,EAAGA,EAAIosiB,EAAoB3id,OAAOnpF,OAAQN,IAAK,CACxD,IAAIuzK,EAAQ6kW,EAAOi0B,eAAeD,EAAoB3id,OAAOzpF,IAC7Ds+f,EAAa70a,OAAOnhF,KAAKirK,GACzBA,EAAM2pV,UAAYoB,EAM1B,IAAK/8f,EAAkBurG,EAAKyxZ,gBACxB,IAASv+f,EAAI,EAAGA,EAAI8sG,EAAKyxZ,eAAej+f,OAAQN,IAAK,CACjD,IAAIy+f,EAAgB2Z,EAAOk0B,mBAAmBx/b,EAAKyxZ,eAAev+f,IAClEmnhB,EAAQ5oB,eAAej2f,KAAKm2f,GAMpC,OAHA0oB,EAAQ7oB,aAAeA,EACvB6oB,EAAQ9oB,eAAiBC,EAAaD,eACtC8oB,EAAQ/oB,aAAetxZ,EAAKqxZ,OACrBgpB,IASfgkB,EAAyBjsiB,UAAUqtiB,QAAU,SAAUplB,GACnD,IAAIrjhB,KAAKwuf,OAAOgV,MAAMtR,gBAAmBlyf,KAAKwuf,OAAOgV,MAAM3U,iBAA3D,CAGA,IAAI7lZ,EAAOhpG,KAAKwuf,OAAOoxB,YAAY5/gB,KAAKq6f,QACpChwd,OAAanvC,EACbotiB,EAAsBjlB,EAAUrjhB,KAAKwuf,OAAO20B,oBAAoBE,EAAQ9oB,qBAAkBr/f,EAC9F,GAAKuC,EAAkBurG,IAAUvrG,EAAkB4lhB,IAC3C5lhB,EAAkB6qiB,IAAwBjlB,EAAQ/oB,eAAiBtxZ,EAAKqxZ,OAyBtE58f,EAAkB4lhB,GAaxBrjhB,KAAKi2E,UAAUutb,MAAM1U,aAAa45C,iBAAYxtiB,IAZ9C8E,KAAKi2E,UAAUutb,MAAMjiB,iBAAkB,EAClC9jf,EAAkB6qiB,KAAoF,IAA5DtoiB,KAAKwuf,OAAOgG,cAAcj2f,QAAQ+piB,IAC7EtoiB,KAAKwuf,OAAOgG,cAAchwf,KAAK8jiB,IAES,IAAxCtoiB,KAAKwuf,OAAO55M,MAAMr2S,QAAQ8khB,IAC1BrjhB,KAAKwuf,OAAO55M,MAAMpwS,KAAK6+gB,GAG3BrjhB,KAAKi2E,UAAUutb,MAAMjiB,iBAAkB,EACvCvhf,KAAKi2E,UAAUutb,MAAM1U,aAAa45C,YAAYrlB,QAnCsC,CACpF,IAAIslB,EAAY3oiB,KAAKwuf,OAAOgV,MAAMu0B,cAClB/3hB,KAAKwuf,OAAOlhc,OAAOotc,aAAa1xZ,EAAM,GACtDhpG,KAAKi2E,UAAUutb,MAAMjiB,iBAAkB,EACvCvhf,KAAKwuf,OAAOgV,MAAM1U,aAAa85C,eAAe5oiB,KAAKi2E,WAC/C0yd,IACAt+f,EAAas+f,EAAUE,2BAA2BP,EAAqBt/b,IAE3EhpG,KAAKwuf,OAAOgV,MAAM1U,aAAag6C,uBAC3BH,GACAA,EAAUI,iBAAiB/oiB,KAAKi2E,UAAW5rC,GAE/CrqC,KAAKi2E,UAAUutb,MAAMjiB,iBAAkB,EACvCvhf,KAAKwuf,OAAO00B,cAAcz2d,QAE1BzsD,KAAKwuf,OAAOgV,MAAM1U,aAAak6C,sBAC/BhpiB,KAAKwuf,OAAOgV,MAAM1U,aAAam6C,6BAA4B,GACvDN,GAAaA,EAAUO,yBACnBP,EAAUO,uBAAuBC,mBAAmB3siB,OAAS,GAC7DmsiB,EAAUO,uBAAuBE,kBAErCT,EAAUU,iBAEdrpiB,KAAKwuf,OAAOgV,MAAM1U,aAAayC,uBAuBvC81C,EAAyBjsiB,UAAUiX,QAAU,WACzCrS,KAAKsniB,kBAAepsiB,EACpB8E,KAAKuniB,mBAAgBrsiB,EACrB8E,KAAKwniB,qBAAkBtsiB,EACvB8E,KAAKyniB,oBAAiBvsiB,EACtB8E,KAAK2niB,uBAAoBzsiB,EACzB8E,KAAK4niB,mBAAgB1siB,EACrB8E,KAAK0niB,qBAAkBxsiB,EACvB8E,KAAK6niB,uBAAoB3siB,EACzB8E,KAAKq6f,YAASn/f,EACd8E,KAAK8niB,uBAAoB5siB,EACzB8E,KAAKwuf,YAAStzf,EACd8E,KAAKi2E,eAAY/6E,EACjB8E,KAAKiggB,eAAY/kgB,GAEdmsiB,KAMPiC,GAAwC,WAIxC,SAASA,EAAuBrzd,GAC5Bj2E,KAAKupiB,0BAAuBruiB,EAC5B8E,KAAKwpiB,gCAA6BtuiB,EAClC8E,KAAKi2E,UAAYA,EAwSrB,OAtSA33E,OAAOuJ,eAAeyhiB,EAAuBluiB,UAAW,cAIpDsM,IAAK,WACD,OAAO1H,KAAKypiB,cAEhBpiiB,IAAK,SAAUtK,GACXiD,KAAKypiB,aAAe1siB,EACpBiD,KAAK6miB,sBAAsB,eAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyhiB,EAAuBluiB,UAAW,aAIpDsM,IAAK,WACD,OAAO1H,KAAK0piB,aAEhBriiB,IAAK,SAAUtK,GACXiD,KAAK0piB,YAAc3siB,EACnBiD,KAAK6miB,sBAAsB,cAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyhiB,EAAuBluiB,UAAW,cAIpDsM,IAAK,WACD,OAAO1H,KAAK2piB,cAEhBtiiB,IAAK,SAAUtK,GACXiD,KAAK2piB,aAAe5siB,EACpBiD,KAAK6miB,sBAAsB,eAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyhiB,EAAuBluiB,UAAW,gBAIpDsM,IAAK,WACD,OAAO1H,KAAK4piB,gBAEhBviiB,IAAK,SAAUtK,GACXiD,KAAK4piB,eAAiB7siB,EACtBiD,KAAK6miB,sBAAsB,iBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyhiB,EAAuBluiB,UAAW,aAIpDsM,IAAK,WACD,OAAO1H,KAAK6piB,aAEhBxiiB,IAAK,SAAUtK,GACXiD,KAAK6piB,YAAc9siB,EACnBiD,KAAK6miB,sBAAsB,cAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyhiB,EAAuBluiB,UAAW,eAIpDsM,IAAK,WACD,OAAO1H,KAAK8piB,eAEhBziiB,IAAK,SAAUtK,GACXiD,KAAK8piB,cAAgB/siB,EACrBiD,KAAK6miB,sBAAsB,gBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyhiB,EAAuBluiB,UAAW,kBAIpDsM,IAAK,WACD,OAAO1H,KAAK+piB,kBAEhB1iiB,IAAK,SAAUtK,GACXiD,KAAK+piB,iBAAmBhtiB,EACxBiD,KAAK6miB,sBAAsB,mBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyhiB,EAAuBluiB,UAAW,kBAIpDsM,IAAK,WACD,OAAO1H,KAAKgqiB,kBAEhB3iiB,IAAK,SAAUtK,GACXiD,KAAKgqiB,iBAAmBjtiB,EACxBiD,KAAK6miB,sBAAsB,mBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyhiB,EAAuBluiB,UAAW,sBAIpDsM,IAAK,WACD,OAAO1H,KAAKupiB,sBAEhBliiB,IAAK,SAAUtK,GACXiD,KAAKupiB,qBAAuBxsiB,EAC5BiD,KAAK6miB,sBAAsB,uBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyhiB,EAAuBluiB,UAAW,4BAIpDsM,IAAK,WACD,OAAO1H,KAAKwpiB,4BAEhBniiB,IAAK,SAAUtK,GACXiD,KAAKwpiB,2BAA6BzsiB,EAClCiD,KAAK6miB,sBAAsB,6BAE/Bl/hB,YAAY,EACZC,cAAc,IAQlB0hiB,EAAuBluiB,UAAUu+f,WAAa,SAAUp7d,GACpDv+B,KAAKwwQ,WAAajyO,EAAOiyO,WACzBxwQ,KAAKo9c,UAAY7+a,EAAO6+a,UACxBp9c,KAAKk8Q,WAAa39O,EAAO29O,WACzBl8Q,KAAKm8Q,UAAY59O,EAAO49O,UACxBn8Q,KAAKo8Q,YAAc79O,EAAO69O,YAC1Bp8Q,KAAKq8Q,aAAe99O,EAAO89O,aAC3Br8Q,KAAK2/hB,eAAiBphgB,EAAOohgB,eAC7B3/hB,KAAK6ihB,eAAiBtkf,EAAOskf,eAC7B7ihB,KAAK6xhB,mBAAqBtzf,EAAOszf,mBACjC7xhB,KAAK8xhB,yBAA2Bvzf,EAAOuzf,0BAE3CwX,EAAuBluiB,UAAUyriB,sBAAwB,SAAU78hB,GAC/D,IAAIisE,EAAYj2E,KAAKi2E,UACrB,IAAKx4E,EAAkBw4E,MAAeA,EAAU8wd,WAAa9wd,EAAUutb,MAAMhiB,kBACtEvra,EAAUutb,MAAMtR,iBAAmBj8a,EAAUutb,MAAM3U,kBAClD54a,EAAU+wd,wBAGbvpiB,EAAkBw4E,KAAex4E,EAAkBw4E,EAAU14E,SAAW04E,EAAU+wd,qBAAsB,CACzG,IAAIjqiB,EAAQiD,KAAKiqiB,iBAAiBjgiB,GAC7BvM,EAAkBV,IACnBk5E,EAAUutb,MAAM1U,aAAao7C,qBAAqBlgiB,EAAcjN,KAI5EusiB,EAAuBluiB,UAAU6uiB,iBAAmB,SAAUjgiB,GAC1D,OAAQA,GACJ,IAAK,aACD,GAAIhK,KAAKwwQ,WAAa,EAClB,OAAOxwQ,KAAKwwQ,WAEhB,OACJ,IAAK,YACD,GAAIxwQ,KAAKo9c,UAAY,EACjB,OAAOp9c,KAAKo9c,UAEhB,OACJ,IAAK,aACD,GAAIp9c,KAAKk8Q,YAAc,EACnB,OAAOl8Q,KAAKk8Q,WAEhB,OACJ,IAAK,cACD,GAAIl8Q,KAAKo8Q,aAAe,EACpB,OAAOp8Q,KAAKo8Q,YAEhB,OACJ,IAAK,YACD,GAAIp8Q,KAAKm8Q,WAAa,EAClB,OAAOn8Q,KAAKm8Q,UAEhB,OACJ,IAAK,eACD,GAAIn8Q,KAAKq8Q,cAAgB,EACrB,OAAOr8Q,KAAKq8Q,aAEhB,OACJ,IAAK,qBACD,IAAK5+Q,EAAkBuC,KAAK6xhB,oBACxB,OAAO7xhB,KAAK6xhB,mBAEhB,OACJ,IAAK,2BACD,IAAKp0hB,EAAkBuC,KAAK8xhB,0BACxB,OAAO9xhB,KAAK8xhB,yBAEhB,OACJ,IAAK,iBACD,OAAO9xhB,KAAK+piB,iBAChB,IAAK,iBACD,OAAO/piB,KAAK6ihB,eAChB,QACI,SAQZymB,EAAuBluiB,UAAU+riB,cAAgB,SAAU5ogB,GACnDv+B,KAAKwwQ,WAAa,GAAKxwQ,KAAKwwQ,aAAejyO,EAAOiyO,aAClDxwQ,KAAKwwQ,WAAa,GAElBxwQ,KAAKo9c,UAAY,GAAKp9c,KAAKo9c,YAAc7+a,EAAO6+a,YAChDp9c,KAAKo9c,UAAY,GAEjBp9c,KAAKk8Q,YAAc,GAAKl8Q,KAAKk8Q,aAAe39O,EAAO29O,aACnDl8Q,KAAKk8Q,YAAc,GAEnBl8Q,KAAKm8Q,WAAa,GAAKn8Q,KAAKm8Q,YAAc59O,EAAO49O,YACjDn8Q,KAAKm8Q,WAAa,GAElBn8Q,KAAKo8Q,aAAe,GAAKp8Q,KAAKo8Q,cAAgB79O,EAAO69O,cACrDp8Q,KAAKo8Q,aAAe,GAEpBp8Q,KAAKq8Q,cAAgB,GAAKr8Q,KAAKq8Q,eAAiB99O,EAAO89O,eACvDr8Q,KAAKq8Q,cAAgB,GAEG,IAAxBr8Q,KAAK2/hB,gBAAwB3/hB,KAAK2/hB,iBAAmBphgB,EAAOohgB,iBAC5D3/hB,KAAK2/hB,eAAiB,GAEE,IAAxB3/hB,KAAK6ihB,gBAAwB7ihB,KAAK6ihB,iBAAmBtkf,EAAOskf,iBAC5D7ihB,KAAK6ihB,eAAiB,GAErBplhB,EAAkBuC,KAAK6xhB,qBAAuB7xhB,KAAK6xhB,qBAAuBtzf,EAAOszf,qBAClF7xhB,KAAK6xhB,wBAAqB32hB,GAEzBuC,EAAkBuC,KAAK8xhB,2BAA6B9xhB,KAAK8xhB,2BAA6Bvzf,EAAOuzf,2BAC9F9xhB,KAAK8xhB,8BAA2B52hB,IAQxCouiB,EAAuBluiB,UAAUoggB,YAAc,WAC3Cx7f,KAAK2/hB,eAAiB,EACtB3/hB,KAAK6ihB,eAAiB,EACtB7ihB,KAAKwwQ,WAAa,EAClBxwQ,KAAKo9c,UAAY,EACjBp9c,KAAKk8Q,YAAc,EACnBl8Q,KAAKo8Q,aAAe,EACpBp8Q,KAAKm8Q,WAAa,EAClBn8Q,KAAKq8Q,cAAgB,EACrBr8Q,KAAK6xhB,wBAAqB32hB,EAC1B8E,KAAK8xhB,8BAA2B52hB,GAOpCouiB,EAAuBluiB,UAAUiX,QAAU,WACvCrS,KAAK+piB,sBAAmB7uiB,EACxB8E,KAAKgqiB,sBAAmB9uiB,EACxB8E,KAAKypiB,kBAAevuiB,EACpB8E,KAAK0piB,iBAAcxuiB,EACnB8E,KAAK2piB,kBAAezuiB,EACpB8E,KAAK8piB,mBAAgB5uiB,EACrB8E,KAAK6piB,iBAAc3uiB,EACnB8E,KAAK4piB,oBAAiB1uiB,EACtB8E,KAAKupiB,0BAAuBruiB,EAC5B8E,KAAKwpiB,gCAA6BtuiB,EAClC8E,KAAKi2E,eAAY/6E,GAEdouiB,KAMPa,GAAsC,WAItC,SAASA,EAAqBl0d,GAC1Bj2E,KAAKsniB,aAAe,EACpBtniB,KAAKoqiB,kBAAelviB,EACpB8E,KAAKqqiB,sBAAmBnviB,EACxB8E,KAAKsqiB,cAAgB,EACrBtqiB,KAAK2piB,aAAe,EACpB3piB,KAAK8piB,cAAgB,EACrB9piB,KAAK6piB,YAAc,EACnB7piB,KAAK4piB,eAAiB,EACtB5piB,KAAKuqiB,iBAAmB,EACxBvqiB,KAAKi2E,UAAYA,EAqSrB,OAnSA33E,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,SAKlDsM,IAAK,WACD,OAAO1H,KAAKwqiB,SAEhBnjiB,IAAK,SAAUtK,GACXiD,KAAKwqiB,QAAUztiB,GAEnB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,cAKlDsM,IAAK,WACD,OAAO1H,KAAKsniB,cAEhBjgiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKsniB,eAGnBtniB,KAAKsniB,aAAevqiB,EACpBiD,KAAK6miB,sBAAsB,gBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,aAKlDsM,IAAK,WACD,OAAO1H,KAAK6piB,aAEhBxiiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK6piB,cAGnB7piB,KAAK6piB,YAAc9siB,EACnBiD,KAAK6miB,sBAAsB,eAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,cAKlDsM,IAAK,WACD,OAAO1H,KAAKoqiB,cAEhB/iiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKoqiB,eAGnBpqiB,KAAKoqiB,aAAertiB,EACpBiD,KAAK6miB,sBAAsB,gBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,kBAKlDsM,IAAK,WACD,OAAO1H,KAAKqqiB,kBAEhBhjiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKqqiB,mBAGnBrqiB,KAAKqqiB,iBAAmBttiB,EACxBiD,KAAK6miB,sBAAsB,oBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,cAKlDsM,IAAK,WACD,OAAO1H,KAAK2piB,cAEhBtiiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK2piB,eAGnB3piB,KAAK2piB,aAAe5siB,EACpBiD,KAAK6miB,sBAAsB,gBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,gBAKlDsM,IAAK,WACD,OAAO1H,KAAK4piB,gBAEhBviiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK4piB,iBAGnB5piB,KAAK4piB,eAAiB7siB,EACtBiD,KAAK6miB,sBAAsB,kBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,eAKlDsM,IAAK,WACD,OAAO1H,KAAKsqiB,eAEhBjjiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKsqiB,gBAGnBtqiB,KAAKsqiB,cAAgBvtiB,EACrBiD,KAAK6miB,sBAAsB,iBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,eAKlDsM,IAAK,WACD,OAAO1H,KAAK8piB,eAEhBziiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK8piB,gBAGnB9piB,KAAK8piB,cAAgB/siB,EACrBiD,KAAK6miB,sBAAsB,iBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,kBAKlDsM,IAAK,WACD,OAAO1H,KAAKuqiB,kBAEhBljiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKuqiB,mBAGnBvqiB,KAAKuqiB,iBAAmBxtiB,EACxBiD,KAAK6miB,sBAAsB,oBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesiiB,EAAqB/uiB,UAAW,sBAKlDsM,IAAK,WACD,OAAO1H,KAAKyqiB,sBAEhBpjiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKyqiB,uBAGnBzqiB,KAAKyqiB,qBAAuB1tiB,EAC5BiD,KAAK6miB,sBAAsB,wBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBuiiB,EAAqB/uiB,UAAUgS,iBAAmB,SAAUpD,GACxD,OAAQA,GACJ,IAAK,iBACD,OAAOhK,KAAKikgB,eAChB,IAAK,aACD,OAAOjkgB,KAAKo9f,WAChB,IAAK,cACD,OAAOp9f,KAAKqwT,YAChB,IAAK,aACD,OAAOrwT,KAAKk8Q,WAChB,IAAK,cACD,OAAOl8Q,KAAKo8Q,YAChB,IAAK,YACD,OAAOp8Q,KAAKm8Q,UAChB,IAAK,eACD,OAAOn8Q,KAAKq8Q,aAChB,IAAK,aACD,IAAI+mP,EAAU,IAAIN,GAElB,OADAM,EAAQh1c,gBAAkBpuD,KAAKwtB,WACxB41e,EACX,IAAK,iBACD,OAAOpjgB,KAAKkkgB,eAChB,IAAK,qBACD,OAAOlkgB,KAAKmkgB,mBAChB,QACI,SAGZgmC,EAAqB/uiB,UAAUyriB,sBAAwB,SAAU78hB,GAC7D,IAAKvM,EAAkBuC,KAAKi2E,aAAej2E,KAAKi2E,UAAU8wd,WAClD/miB,KAAKi2E,UAAUutb,MAAM3U,mBAAoB7uf,KAAKi2E,UAAUutb,MAAMtR,iBAC/Dlyf,KAAKi2E,UAAUutb,MAAMhiB,kBAAsBxhf,KAAKi2E,UAAU+wd,wBAG5DvpiB,EAAkBuC,KAAKi2E,aAAex4E,EAAkBuC,KAAKi2E,UAAU14E,SAAWyC,KAAKi2E,UAAU+wd,qBAAsB,CACxH,IAAIjqiB,EAAQiD,KAAKoN,iBAAiBpD,GACb,eAAjBA,IACAA,EAAe,WAEdvM,EAAkBV,IACnBiD,KAAKi2E,UAAUutb,MAAM1U,aAAa47C,mBAAmB1giB,EAAcjN,KAU/EotiB,EAAqB/uiB,UAAUu+f,WAAa,SAAUp7d,GAClDv+B,KAAKo9f,WAAa7+d,EAAO6+d,WACzBp9f,KAAKwtB,WAAa+Q,EAAO6ke,QAAQh1c,gBACjCpuD,KAAKikgB,eAAiB1le,EAAO0le,eAC7BjkgB,KAAKk8Q,WAAa39O,EAAO29O,WACzBl8Q,KAAKo8Q,YAAc79O,EAAO69O,YAC1Bp8Q,KAAKm8Q,UAAY59O,EAAO49O,UACxBn8Q,KAAKq8Q,aAAe99O,EAAO89O,aAC3Br8Q,KAAKqwT,YAAc9xR,EAAO8xR,YAC1BrwT,KAAKkkgB,eAAiB3le,EAAO2le,eAC7BlkgB,KAAKmkgB,mBAAqB5le,EAAO4le,oBAOrCgmC,EAAqB/uiB,UAAUoggB,YAAc,WACzCx7f,KAAKolE,WAAQlqE,EACb8E,KAAKo9f,WAAa,EAClBp9f,KAAKwtB,gBAAatyB,EAClB8E,KAAKo9f,WAAa,EAClBp9f,KAAKk8Q,WAAa,EAClBl8Q,KAAKo8Q,YAAc,EACnBp8Q,KAAKm8Q,UAAY,EACjBn8Q,KAAKq8Q,aAAe,EACpBr8Q,KAAKqwT,YAAc,EACnBrwT,KAAKikgB,oBAAiB/ogB,GAO1BiviB,EAAqB/uiB,UAAUiX,QAAU,WACrCrS,KAAKsniB,kBAAepsiB,EACpB8E,KAAKoqiB,kBAAelviB,EACpB8E,KAAKsniB,kBAAepsiB,EACpB8E,KAAK2piB,kBAAezuiB,EACpB8E,KAAK8piB,mBAAgB5uiB,EACrB8E,KAAK6piB,iBAAc3uiB,EACnB8E,KAAK4piB,oBAAiB1uiB,EACtB8E,KAAKsqiB,mBAAgBpviB,EACrB8E,KAAKqqiB,sBAAmBnviB,EACxB8E,KAAKwqiB,aAAUtviB,EACf8E,KAAKi2E,eAAY/6E,GAEdiviB,KAMPQ,GAAqC,WAIrC,SAASA,EAAoB10d,GACzBj2E,KAAK4qiB,yBAAsB1viB,EAC3B8E,KAAK2piB,aAAe,EACpB3piB,KAAK8piB,cAAgB,EACrB9piB,KAAK6piB,YAAc,EACnB7piB,KAAK4piB,eAAiB,EACtB5piB,KAAKoqiB,kBAAelviB,EACpB8E,KAAKyqiB,0BAAuBvviB,EAC5B8E,KAAKi2E,UAAYA,EAuRrB,OArRA33E,OAAOuJ,eAAe8iiB,EAAoBvviB,UAAW,qBAKjDsM,IAAK,WACD,OAAO1H,KAAK4qiB,qBAEhBvjiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK4qiB,sBAGnB5qiB,KAAK4qiB,oBAAsB7tiB,EAC3BiD,KAAK6miB,sBAAsB,uBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8iiB,EAAoBvviB,UAAW,cAMjDsM,IAAK,WACD,OAAO1H,KAAK2piB,cAEhBtiiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK2piB,eAGnB3piB,KAAK2piB,aAAe5siB,EACpBiD,KAAK6miB,sBAAsB,gBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8iiB,EAAoBvviB,UAAW,eAKjDsM,IAAK,WACD,OAAO1H,KAAK8piB,eAEhBziiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK8piB,gBAGnB9piB,KAAK8piB,cAAgB/siB,EACrBiD,KAAK6miB,sBAAsB,iBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8iiB,EAAoBvviB,UAAW,aAKjDsM,IAAK,WACD,OAAO1H,KAAK6piB,aAEhBxiiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK6piB,cAGnB7piB,KAAK6piB,YAAc9siB,EACnBiD,KAAK6miB,sBAAsB,eAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8iiB,EAAoBvviB,UAAW,gBAKjDsM,IAAK,WACD,OAAO1H,KAAK4piB,gBAEhBviiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAK4piB,iBAGnB5piB,KAAK4piB,eAAiB7siB,EACtBiD,KAAK6miB,sBAAsB,kBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8iiB,EAAoBvviB,UAAW,cAKjDsM,IAAK,WACD,OAAO1H,KAAKoqiB,cAGhB/iiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKoqiB,eAGnBpqiB,KAAKoqiB,aAAertiB,EACpBiD,KAAK6miB,sBAAsB,gBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8iiB,EAAoBvviB,UAAW,sBAMjDsM,IAAK,WACD,OAAO1H,KAAKyqiB,sBAEhBpjiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKyqiB,uBAGnBzqiB,KAAKyqiB,qBAAuB1tiB,EAC5BiD,KAAK6miB,sBAAsB,wBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8iiB,EAAoBvviB,UAAW,kBAKjDsM,IAAK,WACD,OAAO1H,KAAKuqiB,kBAEhBljiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKuqiB,mBAGnBvqiB,KAAKuqiB,iBAAmBxtiB,EACxBiD,KAAK6miB,sBAAsB,oBAE/Bl/hB,YAAY,EACZC,cAAc,IAGlB+iiB,EAAoBvviB,UAAUyriB,sBAAwB,SAAU78hB,GAC5D,IAAIisE,EAAYj2E,KAAKi2E,UACrB,IAAKx4E,EAAkBw4E,GAAY,CAC/B,IAAKA,EAAU8wd,YAAc9wd,EAAUutb,MAAM3U,kBACtC54a,EAAUutb,MAAMtR,gBAAkBj8a,EAAUutb,MAAMhiB,oBAAsBvra,EAAU+wd,qBACrF,OAEJ,IAAKvpiB,EAAkBuC,KAAKi2E,UAAU14E,SAAWyC,KAAKi2E,UAAU+wd,qBAAsB,CAClF,IAAIjqiB,EAAQiD,KAAKoN,iBAAiBpD,GACb,eAAjBA,IACAA,EAAe,WAEdvM,EAAkBV,IACnBiD,KAAKi2E,UAAUutb,MAAM1U,aAAa+7C,uBAAuB7giB,EAAcjN,MAKvF4tiB,EAAoBvviB,UAAUgS,iBAAmB,SAAUpD,GACvD,OAAQA,GACJ,IAAK,oBACD,OAAOhK,KAAKmwD,kBAChB,IAAK,aACD,OAAOnwD,KAAKk8Q,WAChB,IAAK,cACD,OAAOl8Q,KAAKo8Q,YAChB,IAAK,YACD,OAAOp8Q,KAAKm8Q,UAChB,IAAK,eACD,OAAOn8Q,KAAKq8Q,aAChB,IAAK,iBACD,OAAOr8Q,KAAKkkgB,eAChB,IAAK,qBACD,OAAOlkgB,KAAKmkgB,mBAChB,IAAK,aACD,IAAIf,EAAU,IAAIN,GAElB,OADAM,EAAQh1c,gBAAkBpuD,KAAKwtB,WACxB41e,EACX,QACI,SASZunC,EAAoBvviB,UAAUu+f,WAAa,SAAUp7d,GACjDv+B,KAAKk8Q,WAAa39O,EAAO29O,WACzBl8Q,KAAKo8Q,YAAc79O,EAAO69O,YAC1Bp8Q,KAAKm8Q,UAAY59O,EAAO49O,UACxBn8Q,KAAKq8Q,aAAe99O,EAAO89O,aAC3Br8Q,KAAKwtB,WAAa+Q,EAAO6ke,QAAQh1c,gBACjCpuD,KAAKmwD,kBAAoB5xB,EAAO4xB,kBAChCnwD,KAAKkkgB,eAAiB3le,EAAO2le,eAC7BlkgB,KAAKmkgB,mBAAqB5le,EAAO4le,oBAOrCwmC,EAAoBvviB,UAAU0viB,gBAAkB,WAC5C9qiB,KAAKk8Q,gBAAahhR,EAClB8E,KAAKo8Q,iBAAclhR,EACnB8E,KAAKm8Q,eAAYjhR,EACjB8E,KAAKq8Q,kBAAenhR,EACpB8E,KAAKwtB,gBAAatyB,EAClB8E,KAAKmwD,uBAAoBj1D,GAO7ByviB,EAAoBvviB,UAAU+riB,cAAgB,SAAU5ogB,GAC/C9gC,EAAkBuC,KAAKk8Q,aAAel8Q,KAAKk8Q,aAAe39O,EAAO29O,aAClEl8Q,KAAKk8Q,gBAAahhR,GAEjBuC,EAAkBuC,KAAKm8Q,YAAcn8Q,KAAKm8Q,YAAc59O,EAAO49O,YAChEn8Q,KAAKm8Q,eAAYjhR,GAEhBuC,EAAkBuC,KAAKo8Q,cAAgBp8Q,KAAKo8Q,cAAgB79O,EAAO69O,cACpEp8Q,KAAKo8Q,iBAAclhR,GAElBuC,EAAkBuC,KAAKq8Q,eAAiBr8Q,KAAKq8Q,eAAiB99O,EAAO89O,eACtEr8Q,KAAKq8Q,kBAAenhR,GAEnBuC,EAAkBuC,KAAKwtB,aAAextB,KAAKwtB,aAAe+Q,EAAO6ke,QAAQh1c,kBAC1EpuD,KAAKwtB,gBAAatyB,GAEjBuC,EAAkBuC,KAAKmwD,oBAAsBnwD,KAAKmwD,oBAAsB5xB,EAAO4xB,oBAChFnwD,KAAKmwD,uBAAoBj1D,GAExBuC,EAAkBuC,KAAKkkgB,iBAAmBlkgB,KAAKkkgB,iBAAmB3le,EAAO2le,iBAC1ElkgB,KAAKkkgB,oBAAiBhpgB,GAErBuC,EAAkBuC,KAAKmkgB,qBAAuBnkgB,KAAKmkgB,qBAAuB5le,EAAO4le,qBAClFnkgB,KAAKmkgB,wBAAqBjpgB,IAQlCyviB,EAAoBvviB,UAAUoggB,YAAc,WACxCx7f,KAAKwtB,gBAAatyB,EAClB8E,KAAKq8Q,aAAe,EACpBr8Q,KAAKk8Q,WAAa,EAClBl8Q,KAAKo8Q,YAAc,EACnBp8Q,KAAKm8Q,UAAY,EACjBn8Q,KAAKmwD,uBAAoBj1D,GAO7ByviB,EAAoBvviB,UAAUiX,QAAU,WACpCrS,KAAKoqiB,kBAAelviB,EACpB8E,KAAK4qiB,yBAAsB1viB,EAC3B8E,KAAK4piB,oBAAiB1uiB,EACtB8E,KAAK2piB,kBAAezuiB,EACpB8E,KAAK8piB,mBAAgB5uiB,EACrB8E,KAAK6piB,iBAAc3uiB,EACnB8E,KAAKi2E,eAAY/6E,GAEdyviB,KAMPI,GAAoC,WAIpC,SAASA,EAAmB90d,GACxBj2E,KAAKgriB,cAAW9viB,EAChB8E,KAAKiriB,kBAAe/viB,EACpB8E,KAAKkriB,gBAAahwiB,EAClB8E,KAAKmriB,gCAA6BjwiB,EAClC8E,KAAKi2E,UAAYA,EAsKrB,OApKA33E,OAAOuJ,eAAekjiB,EAAmB3viB,UAAW,UAKhDsM,IAAK,WACD,OAAO1H,KAAKgriB,UAEhB3jiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKgriB,WAGnBhriB,KAAKgriB,SAAWjuiB,EAChBiD,KAAK6miB,sBAAsB,YAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekjiB,EAAmB3viB,UAAW,cAKhDsM,IAAK,WACD,OAAO1H,KAAKiriB,cAEhB5jiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKiriB,eAGnBjriB,KAAKiriB,aAAeluiB,EACpBiD,KAAK6miB,sBAAsB,gBAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekjiB,EAAmB3viB,UAAW,YAKhDsM,IAAK,WACD,OAAO1H,KAAKkriB,YAEhB7jiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKkriB,aAGnBlriB,KAAKkriB,WAAanuiB,EAClBiD,KAAK6miB,sBAAsB,cAE/Bl/hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekjiB,EAAmB3viB,UAAW,yBAKhDsM,IAAK,WACD,OAAO1H,KAAKmriB,4BAEhB9jiB,IAAK,SAAUtK,GACPA,IAAUiD,KAAKmriB,6BAGnBnriB,KAAKmriB,2BAA6BpuiB,EAClCiD,KAAK6miB,sBAAsB,2BAE/Bl/hB,YAAY,EACZC,cAAc,IAElBmjiB,EAAmB3viB,UAAUyriB,sBAAwB,SAAU78hB,GAC3D,IAAIisE,EAAYj2E,KAAKi2E,UACrB,IAAKx4E,EAAkBw4E,KAAeA,EAAU8wd,YAAa9wd,EAAUutb,MAAMtR,gBACrEj8a,EAAUutb,MAAM3U,mBAAoB54a,EAAUutb,MAAMhiB,kBAAsBvra,EAAU+wd,wBAGvFvpiB,EAAkBw4E,KAAex4E,EAAkBw4E,EAAU14E,SAAW04E,EAAU+wd,qBAAsB,CACzG,IAAIjqiB,EAAQiD,KAAKoN,iBAAiBpD,GAC7BvM,EAAkBV,IACnBk5E,EAAUutb,MAAM1U,aAAas8C,sBAAsBphiB,EAAcjN,KAI7EguiB,EAAmB3viB,UAAUgS,iBAAmB,SAAUpD,GACtD,OAAQA,GACJ,IAAK,SACD,OAAOhK,KAAK+V,OAChB,IAAK,aACD,OAAO/V,KAAKwkgB,WAChB,IAAK,WACD,OAAOxkgB,KAAK0sB,SAChB,IAAK,wBACD,OAAO1sB,KAAK6kgB,sBAChB,QACI,SASZkmC,EAAmB3viB,UAAUu+f,WAAa,SAAUp7d,GAChDv+B,KAAK+V,OAASwoB,EAAOxoB,OACrB/V,KAAKwkgB,WAAajme,EAAOime,WACzBxkgB,KAAK6kgB,sBAAwBtme,EAAOsme,sBACpC7kgB,KAAK0sB,SAAW6R,EAAO7R,UAO3Bq+gB,EAAmB3viB,UAAU+riB,cAAgB,SAAU5ogB,GAC9C9gC,EAAkBuC,KAAK+V,SAAW/V,KAAK+V,SAAWwoB,EAAOxoB,SAC1D/V,KAAK+V,YAAS7a,GAEbuC,EAAkBuC,KAAKwkgB,aAAexkgB,KAAKwkgB,aAAejme,EAAOime,aAClExkgB,KAAKwkgB,gBAAatpgB,GAEjBuC,EAAkBuC,KAAK6kgB,wBAA0B7kgB,KAAK6kgB,wBAA0Btme,EAAOsme,wBACxF7kgB,KAAK6kgB,2BAAwB3pgB,GAE5BuC,EAAkBuC,KAAK0sB,WAAa1sB,KAAK0sB,WAAa6R,EAAO7R,WAC9D1sB,KAAK0sB,cAAWxxB,IAQxB6viB,EAAmB3viB,UAAUiwiB,eAAiB,WAC1CrriB,KAAK+V,YAAS7a,EACd8E,KAAKwkgB,gBAAatpgB,EAClB8E,KAAK6kgB,2BAAwB3pgB,EAC7B8E,KAAK0sB,cAAWxxB,GAOpB6viB,EAAmB3viB,UAAUoggB,YAAc,WACvCx7f,KAAK+V,OAAS,EACd/V,KAAKwkgB,gBAAatpgB,EAClB8E,KAAK6kgB,2BAAwB3pgB,EAC7B8E,KAAK0sB,cAAWxxB,GAOpB6viB,EAAmB3viB,UAAUiX,QAAU,WACnCrS,KAAKgriB,cAAW9viB,EAChB8E,KAAKiriB,kBAAe/viB,EACpB8E,KAAKmriB,gCAA6BjwiB,EAClC8E,KAAKkriB,gBAAahwiB,EAClB8E,KAAKi2E,eAAY/6E,GAEd6viB,KAMPO,GAAsC,WAItC,SAASA,EAAqBr1d,GAC1Bj2E,KAAKi2E,UAAYA,EA2DrB,OAzDA33E,OAAOuJ,eAAeyjiB,EAAqBlwiB,UAAW,SAIlDsM,IAAK,WACD,OAAI1H,KAAKi0M,MACEj0M,KAAKi0M,MAAMj+L,MAEf,GAEXrO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjiB,EAAqBlwiB,UAAW,UAIlDsM,IAAK,WACD,OAAI1H,KAAKi0M,MACEj0M,KAAKi0M,MAAMl+L,OAEf,GAEXpO,YAAY,EACZC,cAAc,IAOlB0jiB,EAAqBlwiB,UAAU4/V,OAAS,SAAUhlV,EAAOD,GACrD/V,KAAKuriB,kBAAkBv1hB,EAAOD,IAMlCu1hB,EAAqBlwiB,UAAUmwiB,kBAAoB,SAAUv1hB,EAAOD,GAC5D/V,KAAKi0M,OACDj0M,KAAKi2E,UAAUutb,MAAM1U,cACrB9uf,KAAKi2E,UAAUutb,MAAM1U,aAAa08C,cAAcxriB,KAAKi0M,MAAOj+L,EAAOD,IAO/Eu1hB,EAAqBlwiB,UAAUqwiB,gBAAkB,SAAUx3V,GACvDj0M,KAAKi0M,MAAQA,GAKjBq3V,EAAqBlwiB,UAAUswiB,iBAAmB,WAC9C1riB,KAAKi0M,WAAQ/4M,GAEVowiB,KC58DPK,GAA4B,WAC5B,SAASA,IAEL3riB,KAAKQ,cAAWtF,EAKhB8E,KAAK4riB,WAAa,EAgoBtB,OAznBAD,EAAWvwiB,UAAUywiB,UAAY,SAAUrriB,GACvCR,KAAKQ,SAAWA,EAEhB,IAAK,IADD8qH,EAAO,GACFpvH,EAAI,EAAGA,EAAIsE,EAASw2Q,SAASx6Q,OAAQN,IAC1CovH,EAAOtrH,KAAK8riB,iBAAiBtriB,EAASw2Q,SAAS96Q,IAEnD,OAAOovH,GAKXqgb,EAAWvwiB,UAAU0wiB,iBAAmB,SAAU9gQ,GAE9C,IAAK,IADD39P,EAAS,GACJnxC,EAAI,EAAGA,EAAI8uS,EAAQmB,OAAO3vS,OAAQN,IAAK,CAC5C,IAAIgsgB,EAAQl9N,EAAQmB,OAAOjwS,GACvBgsgB,EAAMvhgB,eAAe,WACrB0mC,GAAUrtC,KAAK+riB,mBAAmB7jC,GAGlC76d,GAAUrtC,KAAKgsiB,eAAe9jC,GAGtC,OAAO76d,GAMXs+f,EAAWvwiB,UAAU2wiB,mBAAqB,SAAU90C,GAChD,IAAIg1C,EAAa,GAGbC,KAWJ,OAVAA,EAAc1niB,KAAK,UAAYxE,KAAKmsiB,wBAAwBl1C,EAAW,IAF1D,GAEwE,KACrFg1C,GAAcjsiB,KAAKosiB,oBAAoB,IAAKF,GACX,IAA7Bj1C,EAAUutC,QAAQhoiB,OAElByviB,GAAc,SAGdA,EAAajsiB,KAAKqsiB,iBAAiBp1C,EAAWg1C,GAElDA,GAAcjsiB,KAAKssiB,OAAO,MAO9BX,EAAWvwiB,UAAUixiB,iBAAmB,SAAUp1C,EAAWg1C,GAGzD,IAFA,IAAIztY,OAAStjK,EACTgB,EAAI,EACD+6f,EAAUutC,QAAQhoiB,OAASN,GAAG,CAEjC,IADAsiK,EAASy4V,EAAUutC,QAAQtoiB,IAChByK,eAAe,eACtBsliB,GAAcjsiB,KAAKusiB,wBAAwB/tY,QAE1C,GAAIA,EAAO73J,eAAe,aAC3B,GAAyB,IAArB63J,EAAOkhW,UAAiB,CACxB1/f,KAAK4riB,WAAa,EAClB,IAAIM,KACJA,EAAc1niB,KAAK,UAAYxE,KAAKwsiB,qBAAqBhuY,EAAO6zV,gBAAiB,IAAM,KACvF45C,GAAcjsiB,KAAKosiB,oBAAoB,IAAKF,QAElB,IAArB1tY,EAAOkhW,UACZ1/f,KAAK4riB,WAAa,GAGlBK,GAAcjsiB,KAAKssiB,OAAO,KAC1BtsiB,KAAK4riB,WAAa,OAGrB,CACD,IAAI58gB,EAAOvxB,EAAkB+gK,EAAOxvI,MAAQ,GAAKwvI,EAAOxvI,KAIxD,GAHwB,IAApBhvB,KAAK4riB,aACLK,GAAcjsiB,KAAKysiB,cAAcz9gB,EAAMwvI,EAAO6zV,kBAE1B,IAApBryf,KAAK4riB,WAAkB,CAEvBK,GAAc,WADEj9gB,EAAK/xB,QAAQ,IAAM,IACGA,QAAQ,YAAa,IAAIgT,OAC/Dg8hB,GAAc,IACdA,GAAc,IAEM,IAApBjsiB,KAAK4riB,aACLK,GAAcj9gB,GAGtB9yB,IAEJ,OAAO+viB,GAMXN,EAAWvwiB,UAAUqxiB,cAAgB,SAAU1tC,EAAU1M,GACrD,IAAIq6C,EAAY,GAChB,IAAgC,IAA5B3tC,EAASxggB,QAAQ,MAEjB,OADAmuiB,GAAa,QACIx/hB,WAErB,IAAIg/hB,KACJlsiB,KAAKwsiB,qBAAqBn6C,EAAiB,IAC3C65C,EAAc1niB,KAAK,UAAYxE,KAAKwsiB,qBAAqBn6C,EAAiB,IAAM,KAChFq6C,GAAa1siB,KAAKosiB,oBAAoB,OAAQF,GAsB9C,OAFAQ,GADW1siB,KAAK2siB,gBAAgB5tC,EAAS7xf,aAEzCw/hB,GAAa1siB,KAAKssiB,OAAO,SACRp/hB,YAMrBy+hB,EAAWvwiB,UAAUmxiB,wBAA0B,SAAUt4V,GACrD,IAAI24V,EAAa,GACbV,KACJlsiB,KAAKwsiB,qBAAqBv4V,EAAMo+S,gBAAiB,IACjD,IAAIrqF,EAAc,GACbvqa,EAAkBw2M,EAAM8rH,eACzBioG,EAAc/zN,EAAM8rH,aAExB,IAAI/pT,EAAQ8of,GAAcO,oBAAoBprT,EAAMj+L,OAChDD,EAAS+of,GAAcO,oBAAoBprT,EAAMl+L,QAMrD,OALAm2hB,EAAc1niB,KAAK,UAAWwR,EAAM9I,WAAa,KACjDg/hB,EAAc1niB,KAAK,WAAYuR,EAAO7I,WAAa,KACnDg/hB,EAAc1niB,KAAK,QAASwja,EAAc,KAC1C4kI,GAAc5siB,KAAKosiB,oBAAoB,MAAOF,IAC9CU,GAAe5siB,KAAKssiB,OAAO,QACTp/hB,YAMtBy+hB,EAAWvwiB,UAAUyxiB,cAAgB,SAAU9ke,GAC3C,IAAIkke,EAAa,GACbC,KACAY,EAAW,GACfZ,KACKzuiB,EAAkBsqE,EAAK0gc,cAExByjC,EAAc1niB,KAAK,YAAcujE,EAAK0gc,WAAWrF,QAAQh1c,gBAAkB,KAEvE2Z,EAAK0gc,WAAW31M,WAAa,GAC7Bo5O,EAAc1niB,KAAK,YAAcujE,EAAK0gc,WAAW31M,WAAW5lT,WAAa,KAEzE66D,EAAK0gc,WAAW73M,QAAU,GAC1Bs7O,EAAc1niB,KAAK,YAAcujE,EAAK0gc,WAAW73M,QAAQ1jT,WAAa,KAExC,IAA9B66D,EAAK0gc,WAAWv6M,WAChBg+O,EAAc1niB,KAAK,UAAYujE,EAAK0gc,WAAWv6M,UAAUhhT,WAAa,KAEhC,QAAtC66D,EAAK0gc,WAAWt4c,mBAChB+7e,EAAc1niB,KAAK,WAAaujE,EAAK0gc,WAAWt4c,kBAAkBjjD,WAAW0I,cAAgB,KAE5FnY,EAAkBsqE,EAAK0gc,WAAWvsP,aAA8C,IAA/Bn0M,EAAK0gc,WAAWvsP,aAClE4wR,GAAa,gBAAkB/ke,EAAK0gc,WAAWvsP,WAAWhvQ,WAAa,OAEtEzP,EAAkBsqE,EAAK0gc,WAAWrsP,cAAgD,IAAhCr0M,EAAK0gc,WAAWrsP,cACnE0wR,GAAa,iBAAmB/ke,EAAK0gc,WAAWrsP,YAAYlvQ,WAAa,OAExEzP,EAAkBsqE,EAAK0gc,WAAWtsP,YAA4C,IAA9Bp0M,EAAK0gc,WAAWtsP,YACjE2wR,GAAa,eAAiB/ke,EAAK0gc,WAAWtsP,UAAUjvQ,WAAa,OAEpEzP,EAAkBsqE,EAAK0gc,WAAWpsP,eAAkD,IAAjCt0M,EAAK0gc,WAAWpsP,eACpEywR,GAAa,kBAAoB/ke,EAAK0gc,WAAWpsP,aAAanvQ,WAAa,OAE1EzP,EAAkBsqE,EAAK0gc,WAAW56M,WACnCi/O,GAAY9siB,KAAK+siB,0BAA0Bhle,EAAK0gc,WAAW56M,WAG3C,IAApBi/O,EAAStwiB,QACT0viB,EAAc1niB,KAAK,UAAYsoiB,EAAW,KAE9Cb,GAAejsiB,KAAKosiB,oBAAoB,KAAMF,GAC9C,IAAK,IAAI5lhB,EAAI,EAAGA,EAAIyhD,EAAKokO,OAAO3vS,OAAQ8pB,IAAK,CACzC,IAAI4hf,EAAQngc,EAAKokO,OAAO7lR,GACpB4hf,EAAMvhgB,eAAe,QACrBsliB,GAAcjsiB,KAAKgsiB,eAAe9jC,GAGlC+jC,GAAcjsiB,KAAK+riB,mBAAmB7jC,GAI9C,OADA+jC,GAAejsiB,KAAKssiB,OAAO,OAO/BX,EAAWvwiB,UAAU4wiB,eAAiB,SAAU5me,GAC5C,IAAIkmD,EAAO,GACXA,GAAQtrH,KAAKgtiB,oBAAoB5ne,GACjC,IAAK,IAAI1hD,EAAI,EAAGA,EAAI0hD,EAAMwnK,KAAKpwO,OAAQknB,IACnC4nG,GAAQtrH,KAAKitiB,aAAa7ne,EAAMwnK,KAAKlpN,IAGzC,OADA4nG,GAAQtrH,KAAKktiB,qBAOjBvB,EAAWvwiB,UAAU6xiB,aAAe,SAAUvne,GAC1C,IAAI4lD,EAAO,GACXA,GAAQtrH,KAAKmtiB,kBAAkBzne,GAC/B,IAAK,IAAIp/C,EAAI,EAAGA,EAAIo/C,EAAIkB,MAAMpqE,OAAQ8pB,IAClCglG,GAAQtrH,KAAK6siB,cAAcnne,EAAIkB,MAAMtgD,IAEzC,OAAOglG,GAMXqgb,EAAWvwiB,UAAU+wiB,wBAA0B,SAAUl1C,EAAW5zf,EAAW+piB,GAC3E,IAAIC,EAAiB,GAGrB,OAFAA,GAAkBrtiB,KAAKstiB,yBAAyBr2C,EAAU5E,iBAC1Dg7C,GAAkBrtiB,KAAKutiB,yBAAyBt2C,EAAUhF,gBAAiBm7C,IAM/EzB,EAAWvwiB,UAAUoxiB,qBAAuB,SAAUn6C,EAAiBhvf,GACnE,OAAOrD,KAAKstiB,yBAAyBj7C,IAKzCs5C,EAAWvwiB,UAAUoyiB,0BAA4B,SAAU3/O,GACvD,IAAIwwG,EAAc,GAyBlB,OAxBAA,GAAgB,qBAAuBr+Z,KAAKytiB,uBAAuB5/O,EAAQrhT,KAAK27N,WAChFk2L,GAAe,IACfA,GAAgB,qBAAuBxwG,EAAQrhT,KAAKgnF,UAAUtmF,WAAa,KAC3EmxZ,GAAe,IACfA,GAAgB,qBAAuBxwG,EAAQrhT,KAAK6pB,MACpDgoY,GAAe,IACfA,GAAgB,sBAAwBr+Z,KAAKytiB,uBAAuB5/O,EAAQphT,MAAM07N,WAClFk2L,GAAe,IACfA,GAAgB,sBAAwBxwG,EAAQphT,MAAM+mF,UAAUtmF,WAAa,KAC7EmxZ,GAAe,IACfA,GAAgB,sBAAwBxwG,EAAQphT,MAAM4pB,MACtDgoY,GAAe,IACfA,GAAgB,oBAAsBr+Z,KAAKytiB,uBAAuB5/O,EAAQnhT,IAAIy7N,WAC9Ek2L,GAAe,IACfA,GAAgB,oBAAsBxwG,EAAQnhT,IAAI8mF,UAAUtmF,WAAa,KACzEmxZ,GAAe,IACfA,GAAgB,oBAAsBxwG,EAAQnhT,IAAI2pB,MAClDgoY,GAAe,IACfA,GAAgB,uBAAyBr+Z,KAAKytiB,uBAAuB5/O,EAAQlhT,OAAOw7N,WACpFk2L,GAAe,IACfA,GAAgB,uBAAyBxwG,EAAQlhT,OAAO6mF,UAAUtmF,WAAa,KAC/EmxZ,GAAe,IACfA,GAAgB,uBAAyBxwG,EAAQlhT,OAAO0pB,MACxDgoY,GAAe,KAMnBstI,EAAWvwiB,UAAU2xiB,0BAA4B,SAAUl/O,GAiCvD,MA/Bc,oBAAA,qBAoClB89O,EAAWvwiB,UAAUsyiB,qBAAuB,SAAU5mgB,EAAQ6mgB,GAC1D,IAAItvI,EAAc,GAQlB,OAPAA,GAAgB,UAAYsvI,EAAiB,UAAY3tiB,KAAKytiB,uBAAuB3mgB,EAAOqhM,WAC5Fk2L,GAAe,IACXv3X,EAAO0sD,UAAY,IACnB6qU,GAAgB,UAAYsvI,EAAiB,UAAY7mgB,EAAO0sD,UAAUtmF,WAAa,OAG3FmxZ,GAAgB,UAAYsvI,EAAiB,UAAY7mgB,EAAOzQ,MAAQ,KAM5Es1gB,EAAWvwiB,UAAUqyiB,uBAAyB,SAAUtlU,GACpD,OAAQA,GACJ,IAAK,OACD,MAAO,OACX,IAAK,SACD,MAAO,QACX,IAAK,MACD,MAAO,SACX,IAAK,eACL,IAAK,eACL,IAAK,UACL,IAAK,aACD,MAAO,SACX,IAAK,SACL,IAAK,SACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACL,IAAK,qBACL,IAAK,qBACL,IAAK,yBACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACD,MAAO,SACX,IAAK,aACD,MAAO,QACX,IAAK,aACD,MAAO,SACX,IAAK,iBACD,MAAO,QACX,IAAK,WACD,MAAO,QACX,IAAK,YACD,MAAO,SACX,IAAK,SACD,MAAO,SACX,IAAK,QACD,MAAO,QACX,QACI,MAAO,UAOnBwjU,EAAWvwiB,UAAUkyiB,yBAA2B,SAAUj7C,GACtD,IAAK50f,EAAkB40f,EAAgB0zC,cACnC,OAAO/liB,KAAKstiB,yBAAyBj7C,EAAgB0zC,cAEzD,IAAIkB,EACArmC,EAAY,GAmEhB,OAlEIvO,EAAgBpjc,OAChB2xc,GAAa,cACbA,GAAa,IACbA,GAAa,OACbA,GAAa,KAEjBA,GAAa,aACbA,GAAa,IACTvO,EAAgBljc,OAChByxc,GAAa,SAGbA,GAAa,SAEjBA,GAAa,IAEyB,iBAAlCvO,EAAgBqM,eAAsE,iBAAlCrM,EAAgBqM,gBACpEkC,GAAa,kBACbA,GAAa,IACbA,GAAa,eACbA,GAAa,KAIyB,gBAAtCvO,EAAgBmM,mBAA6E,cAAtCnM,EAAgBmM,oBACvEoC,GAAa,iBACbA,GAAa,IACbA,GAAmD,gBAAtCvO,EAAgBmM,kBAAsC,QAAU,MAC7EoC,GAAa,KAGZnjgB,EAAkB40f,EAAgBsM,kBACnCiC,GAAa,mBACbA,GAAa,IACbA,GAAavO,EAAgBsM,eAAezxf,WAC5C0zf,GAAa,KAGjBqmC,EAAgB50C,EAAgBoM,UAC3BhhgB,EAAkBwpiB,KACnBrmC,GAAa,QACbA,GAAa,IACbA,GAAaqmC,EACbrmC,GAAa,KAEZnjgB,EAAkB40f,EAAgB7kN,YAA4C,SAA9B6kN,EAAgB7kN,YACjEozN,GAAa,kBACbA,GAAa,IACbA,GAAa,YACbA,GAAa,KAEjBqmC,EAAgB50C,EAAgBjje,SAC3B3xB,EAAkBwpiB,KACnBrmC,GAAa,YACbA,GAAa,IACbA,GAAaqmC,EAAc/5hB,WAC3B0zf,GAAa,KACbA,GAAa,KAEjBqmC,EAAgB50C,EAAgB7ie,WAC3B/xB,EAAkBwpiB,KACnBrmC,GAAa,cACbA,GAAa,IACbA,GAAaqmC,EAAc/5hB,WAC3B0zf,GAAa,KAEVA,EAAU1zf,YAKrBy+hB,EAAWvwiB,UAAUmyiB,yBAA2B,SAAUt7C,EAAiBm7C,GACvE,IAAK3viB,EAAkBw0f,EAAgB8zC,cACnC,OAAO/liB,KAAKutiB,yBAAyBt7C,EAAgB8zC,aAAcqH,GAEvE,IAAInG,EACAvmC,EAAY,GAmDhB,OAlDAumC,EAAgBh1C,EAAgBjvd,cAC3BvlC,EAAkBwpiB,KACnBvmC,GAAa,cAAgBumC,EAAcrxhB,cAAgB,KAE/DqxhB,EAAgBh1C,EAAgBqL,cAC3B7/f,EAAkBwpiB,KACnBvmC,GAAa,cAAgBumC,EAAc/5hB,WAAa,QAE5D+5hB,EAAgBh1C,EAAgBoL,YAC3B5/f,EAAkBwpiB,KACnBvmC,GAAa,gBAAkBumC,EAAc/5hB,WAAa,QAE9D+5hB,EAAgBh1C,EAAgBsL,aAC3B9/f,EAAkBwpiB,KACnBvmC,GAAa,iBAAmBumC,EAAc/5hB,WAAa,QAE/D+5hB,EAAgBh1C,EAAgBmL,WAC5BgwC,IACI3viB,EAAkBwpiB,GAClBA,GAAiB,GAGjBA,GAAiB,IAGpBxpiB,EAAkBwpiB,KACnBvmC,GAAa,eAAiBumC,EAAc/5hB,WAAa,QAE7D+5hB,EAAgBh1C,EAAgBrjP,gBAC5Bw+R,IACI3viB,EAAkBwpiB,GAClBA,EAAgB,GAGhBA,GAAiB,IAGpBxpiB,EAAkBwpiB,IAAoC,IAAlBA,IACrCvmC,GAAa,eAAiBumC,EAAc/5hB,WAAa,OAE7D+5hB,EAAgBh1C,EAAgBzgP,YAC3B/zQ,EAAkBwpiB,KAOnBvmC,GAAa,gBALTumC,EADoC,aAApCh1C,EAAgBuL,iBACiB,IAAhBypC,GAAqB/5hB,WAAa,KAGnC+5hB,EAAc/5hB,WAAa,QAI5Cwzf,EAAUxzf,YAKrBy+hB,EAAWvwiB,UAAUgxiB,oBAAsB,SAAUwB,EAAUC,GAC3D,IAAI1kJ,EAAK,GACTA,GAAM,IACNA,GAAMykJ,EACN,IAAK,IAAI1xiB,EAAI,EAAGA,EAAI2xiB,EAAgBrxiB,OAAQN,IACxCitZ,GAAM,IACNA,GAAM0kJ,EAAgB3xiB,GAK1B,MAHiB,MAAb0xiB,IACAzkJ,GAAM,KAEHA,GAKXwiJ,EAAWvwiB,UAAU0yiB,UAAY,SAAUF,GACvC,IAAIvhgB,EAAI,GAIR,OAHAA,GAAK,IACLA,GAAKuhgB,EACLvhgB,GAAK,KAMTs/f,EAAWvwiB,UAAUkxiB,OAAS,SAAUsB,GACpC,IAAIzkJ,EAAK,GAKT,OAJAA,GAAM,IACNA,GAAM,IACNA,GAAMykJ,EACNzkJ,GAAM,KAMVwiJ,EAAWvwiB,UAAU4xiB,oBAAsB,SAAU5ne,GACjD,IAAI6me,EAAa,GACb8B,EAAa,GACb7B,KAuBJ,OAtBAA,EAAc1niB,KAAK,cACd/G,EAAkB2nE,EAAM4+b,eAEzBkoC,EAAc1niB,KAAK,YAAc4gE,EAAM4+b,YAAYZ,QAAQh1c,gBAAkB,KAExC,IAAjCgX,EAAM4+b,YAAY5G,YAClB8uC,EAAc1niB,KAAK,gBAAkB4gE,EAAM4+b,YAAY5G,WAAWlwf,WAAa,OAE/Ek4D,EAAM4+b,YAAY3zM,YAAc,EAChC67O,EAAc1niB,KAAK,iBAAqD,GAAhC4gE,EAAM4+b,YAAY3zM,YAAoB,GAAM,GAAGnjT,WAAa,KAGpG6giB,+BAEJ7B,EAAc1niB,KAAK,mBACd/G,EAAkB2nE,EAAM4+b,YAAYn2M,WACrCkgP,GAAc/tiB,KAAKwtiB,0BAA0Bpoe,EAAM4+b,YAAYn2M,WAG7C,IAAtBkgP,EAAWvxiB,QACX0viB,EAAc1niB,KAAK,UAAWupiB,EAAW7giB,WAAa,KAEnD++hB,GAAejsiB,KAAKosiB,oBAAoB,QAASF,IAK5DP,EAAWvwiB,UAAU8xiB,kBAAoB,WACrC,IAAIjB,EAAa,GAEjB,OADAA,GAAejsiB,KAAKssiB,OAAO,UAM/BX,EAAWvwiB,UAAU+xiB,kBAAoB,SAAUzne,GAC/C,IAAIume,EAAa,GACbC,KAOJ,OANIxme,EAAI4kc,UAAU59e,WACdu/gB,GAAejsiB,KAAK8tiB,UAAU,UAE9Bpoe,EAAI4kc,UAAUv0f,OAAS,GACvBm2hB,EAAc1niB,KAAK,WAAakhE,EAAI4kc,UAAUv0f,OAAS,KAEpDk2hB,EAAajsiB,KAAKosiB,oBAAoB,KAAMF,IAKvDP,EAAWvwiB,UAAU4yiB,gBAAkB,SAAUtoe,GAC7C,IAAIume,EAAa,GAKjB,OAJAA,GAAejsiB,KAAKssiB,OAAO,MACvB5me,EAAI4kc,UAAU59e,WACdu/gB,GAAejsiB,KAAKssiB,OAAO,UAExBL,GAKXN,EAAWvwiB,UAAUuxiB,gBAAkB,SAAU39gB,GAC7C,GAAa,OAATA,EACA,MAAO,SAEX,IAAI+xf,EAAe/xf,EAAK9xB,MAAM,KAC1B+wiB,EAAW,GACf,GAAIltB,EAAavkhB,OAAS,EAAG,CACzByxiB,EAAWltB,EAAa,GACxB,IAAK,IAAI7khB,EAAI,EAAGA,EAAI6khB,EAAavkhB,OAAS,EAAGN,IACzC+xiB,GAAY,SAAWltB,EAAa7khB,EAAI,GAGhD,OAAO+xiB,GAEJtC,KCtoBPuC,GAA8B,WAC9B,SAASA,EAAa1qC,GAIlBxjgB,KAAK46B,SAAW,IAAIia,GAAM,EAAG,GAI7B70C,KAAKmuiB,kBAAmB,EACxBnuiB,KAAKwjgB,MAAQA,EACbxjgB,KAAKwuf,OAASxuf,KAAKwjgB,MAAMhV,OA4+D7B,OA1+DAlwf,OAAOuJ,eAAeqmiB,EAAa9yiB,UAAW,aAI1CsM,IAAK,WACD,OAAO1H,KAAK0rhB,cAAcz0B,WAE9Btvf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqmiB,EAAa9yiB,UAAW,sBAI1CsM,IAAK,WACD,OAAO1H,KAAK2L,SAAW3L,KAAKwjgB,MAAMvtb,UAAUm4d,eAAepuiB,KAAKi3f,YAEpEtvf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqmiB,EAAa9yiB,UAAW,oBAI1CsM,IAAK,WACD,OAAO1H,KAAKwjgB,MAAMvtb,UAAU4uc,oBAAoB7khB,KAAK0rhB,gBAC9C1rhB,KAAK2L,SAAW3L,KAAKwjgB,MAAMvtb,UAAUo4d,cAAcruiB,KAAK0rhB,gBAEnE/jhB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqmiB,EAAa9yiB,UAAW,aAI1CsM,IAAK,WACD,OAAO1H,KAAKwjgB,MAAMvtb,WAEtBtuE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqmiB,EAAa9yiB,UAAW,wBAK1CsM,IAAK,WACD,OAAO1H,KAAKsuiB,gCAEhB3miB,YAAY,EACZC,cAAc,IAMlBsmiB,EAAa9yiB,UAAUiE,MAAQ,WAC3B,IAAI6oZ,EAAe,IAAIgmJ,EAAaluiB,KAAKwjgB,OAIzC,OAHAt7G,EAAawjI,cAAgB1rhB,KAAK0rhB,cAClCxjI,EAAav8Y,OAAS3L,KAAK2L,OAC3Bu8Y,EAAattX,SAAW56B,KAAK46B,SACtBstX,GAMXgmJ,EAAa9yiB,UAAUmziB,wBAA0B,SAAUtkf,EAAMjpD,EAAS8Q,EAAO08hB,GAE7E,IAAI/sB,GAAiB,EACjBhkhB,EAAkBuD,GAClBhB,KAAK0rhB,cAAgBzhe,GAGrBjqD,KAAK0rhB,cAAgB1qhB,EAAQipD,KACzBjpD,EAAQyuY,oBAAoBgwH,IAAmB3tf,EAAQ9Q,EAAQxE,SAC/DilhB,EAAiBzhhB,KAAKi2E,UAAUw4d,qBAAqBztiB,EAASA,EAAQxE,UAG9EwD,KAAK46B,SAAW4zgB,EAEZxuiB,KAAK2L,OADL81gB,EACczhhB,KAAKi2E,UAAUy4d,mBAAmB1uiB,KAAK0rhB,cAAcz0B,WAAa,EAGlEj3f,KAAK0rhB,cAAcnvd,UAAUv7D,EAAS8Q,IAO5Do8hB,EAAa9yiB,UAAUuziB,oBAAsB,SAAU1kf,EAAMt+C,EAAQivB,GACjE56B,KAAK0rhB,cAAgBzhe,EACrBjqD,KAAK2L,OAASA,EACVivB,aAAoBia,IACpB70C,KAAK46B,SAASr7B,KAAKq7B,IAO3BszgB,EAAa9yiB,UAAUyd,YAAc,SAAUoxC,EAAM2kf,GACjD5uiB,KAAK0rhB,cAAgBzhe,EACrBjqD,KAAK2L,OAASijiB,EAAkB5uiB,KAAKi2E,UAAUm4d,eAAenkf,EAAKgtc,WAC7Dj3f,KAAKi2E,UAAUy4d,mBAAmBzkf,EAAKgtc,WAAa,EAC1Dj3f,KAAK6uiB,wBAAuB,IAMhCX,EAAa9yiB,UAAU0ziB,oBAAsB,SAAU5mJ,GACnDloZ,KAAK0rhB,cAAgBxjI,EAAawjI,cAClC1rhB,KAAK2L,OAASu8Y,EAAav8Y,OAC3B3L,KAAK46B,SAAWstX,EAAattX,UAMjCszgB,EAAa9yiB,UAAU2ziB,2BAA6B,SAAUtnC,GAC1D,IAAI31f,GAAUA,MAAO21f,GACjBxQ,EAAYj3f,KAAKgviB,mBAAmBl9hB,GACxC9R,KAAK2L,OAASiQ,WAAW9J,EAAMA,OAC/B9R,KAAKiviB,qBAAqBh4C,EAAWj3f,KAAK2L,SAK9CuiiB,EAAa9yiB,UAAUmgT,QAAU,SAAUrnS,GACvC,IACIpC,EAAQoC,EAASpC,MAAMvT,QAAQ,KAC/B+I,EAAW,IAOf,OANIwK,GAAS,IACTxK,EAAW4M,EAASpC,MAAMuS,UAAU,EAAGvS,GACvCoC,EAASpC,MAAQoC,EAASpC,MAAMuS,UAAUvS,GAAO7U,QAAQ,IAAK,KAElE6U,EAAQ8iB,SAASttB,EAAU,IACpBtH,KAAKwuf,OAAOzmQ,MAAMj2O,IAM7Bo8hB,EAAa9yiB,UAAU4ziB,mBAAqB,SAAU96hB,GAClD,IAAIzW,EAAkByW,EAASpC,OAA/B,CAGA,IAAIy7J,EAAOvtK,KAAKu7S,QAAQrnS,GAExB,OADYlU,KAAKq6hB,mBAAcn/hB,EAAWgZ,EAAUq5J,KAMxD2gY,EAAa9yiB,UAAUi/hB,cAAgB,SAAUx0B,EAAQ3xf,EAAUq5J,GAC/D,IAAI9vK,EAAkByW,EAASpC,OAA/B,CAGA,IAAIA,EAAQoC,EAASpC,MAAMvT,QAAQ,KAC/BxB,EAAQ,IA4BZ,GA3BI+U,GAAS,IACT/U,EAAQmX,EAASpC,MAAMuS,UAAU,EAAGvS,GACpCoC,EAASpC,MAAQoC,EAASpC,MAAMuS,UAAUvS,GAAO7U,QAAQ,IAAK,KAEpD,MAAVF,GAA2B,MAAVA,EAEb8ogB,EADU,MAAV9ogB,EACSwwK,EAAKw6V,aAGLx6V,EAAKy6V,aAGZvqgB,EAAkB8vK,KACxBs4V,EAASt4V,EAAKq4V,YAAY,IAE9B9zf,EAAQ8iB,SAAS73B,EAAO,IACpB8ogB,aAAkByB,KAClBx1f,EAAQoC,EAASpC,MAAMvT,QAAQ,KAC/BxB,EAAQ,IACRA,EAAQmX,EAASpC,MAAMuS,UAAU,EAAGvS,GACpCoC,EAASpC,MAAQoC,EAASpC,MAAMuS,UAAUvS,GAAO7U,QAAQ,IAAK,IAC9D6U,EAAQ8iB,SAAS73B,EAAO,KAExB8ogB,aAAkBM,IAAkBr0f,GAAS+zf,EAAOxO,aAAa76f,SACjE0X,EAASpC,MAAQ,MACjBA,EAAQ+zf,EAAOxO,aAAa76f,OAAS,GAErCsV,GAAS,GAAKA,EAAQ+zf,EAAOxO,aAAa76f,OAAQ,CAClD,IAAI6D,EAAQwlgB,EAAOxO,aAAavlf,GAChC,GAAIzR,aAAiBgngB,GAIjB,OAHInzf,EAASpC,MAAMvT,QAAQ,KAAO,IAC9B2V,EAASpC,MAAQ,KAEdzR,EAEX,GAAIA,aAAiBslgB,GAAQ,CACzB,GAAIzxf,EAASpC,MAAMvT,QAAQ,KAAO,EAC9B,OAAOyB,KAAKq6hB,cAAch6hB,EAAO6T,GAIjC,GAAI7T,aAAiB4mgB,GACjB,OAAOjngB,KAAKq6hB,cAAcr6hB,KAAKi2E,UAAU41c,6BAA6BxrhB,GAAQ6T,GAE7E,GAAI7T,aAAiB8lgB,KAAmD,IAAjCjyf,EAASpC,MAAMvT,QAAQ,KAC/D,OAAOyB,KAAKi2E,UAAU41c,6BAA6BxrhB,EAAM+ngB,YAAY/Q,aAAa,GAEtF,aAIP,GAAIwO,EAAOW,8BAA8Bb,GAE1C,OADAzxf,EAASpC,MAAQ,IACb+zf,EAAOW,8BAA8BS,GAC9BjngB,KAAKi2E,UAAU41c,6BAA6BhmB,EAAOW,oBAAoBxpf,WAE3Ehd,KAAKq6hB,cAAcx0B,EAAOW,mBAAoBtyf,KAQ7Dg6hB,EAAa9yiB,UAAUyziB,uBAAyB,SAAUK,GAClDlviB,KAAK0rhB,eAAiB1rhB,KAAKwjgB,MAAMjiB,iBAAmBvhf,KAAKmuiB,mBACzDnuiB,KAAK46B,SAAW56B,KAAKi2E,UAAUk5d,4BAA4BnviB,KAAK0rhB,cAAe1rhB,KAAK2L,OAAQujiB,KAOpGhB,EAAa9yiB,UAAUg0iB,iBAAmB,SAAUlnJ,GAChD,OAAOloZ,KAAK0rhB,gBAAkBxjI,EAAawjI,eACpC1rhB,KAAK2L,SAAWu8Y,EAAav8Y,QAMxCuiiB,EAAa9yiB,UAAUi0iB,kBAAoB,SAAUnnJ,GACjD,GAAIzqZ,EAAkByqZ,GAClB,MAAM,IAAItnZ,MAAM,8BAEpB,OAAOZ,KAAKi3f,YAAc/uG,EAAa+uG,WAM3Ci3C,EAAa9yiB,UAAUk0iB,cAAgB,SAAUpnJ,GAC7C,GAAIzqZ,EAAkByqZ,GAClB,MAAM,IAAItnZ,MAAM,8BAEpB,GAAIZ,KAAK0rhB,gBAAkBxjI,EAAawjI,cACpC,OAAO1rhB,KAAK2L,OAASu8Y,EAAav8Y,OAEtC,IAAIyhhB,EAAmBpthB,KAAK0rhB,cAAcz0B,UACtCA,EAAY/uG,EAAawjI,cAAcz0B,UAC3C,OAAIm2B,IAAqBn2B,EACdm2B,EAAiB/1B,aAAa94f,QAAQyB,KAAK0rhB,eAAiBz0B,EAAUI,aAAa94f,QAAQ2pZ,EAAawjI,eAE/G0B,EAAiB91B,kBAAoBL,EAAUK,gBAC3C81B,EAAiB7kB,cACV6kB,EAAiB5kB,eAAenR,aAAa94f,QAAQ6uhB,GACxDn2B,EAAUuR,eAAenR,aAAa94f,QAAQ04f,GAO1Cm2B,EAAiB91B,gBAAgBD,aAAa94f,QAAQ6uhB,GACzDn2B,EAAUK,gBAAgBD,aAAa94f,QAAQ04f,GAGrDj3f,KAAKwjgB,MAAMvtb,UAAUq5d,cAAcliB,EAAkBn2B,IAMhEi3C,EAAa9yiB,UAAUm0iB,aAAe,SAAUrnJ,GAC5C,GAAIzqZ,EAAkByqZ,GAClB,MAAM,IAAItnZ,MAAM,8BAEpB,GAAIZ,KAAK0rhB,gBAAkBxjI,EAAawjI,cACpC,OAAO1rhB,KAAK2L,OAASu8Y,EAAav8Y,OAEtC,GAAI3L,KAAK0rhB,cAAcz0B,YAAc/uG,EAAawjI,cAAcz0B,UAC5D,OAAOj3f,KAAK0rhB,cAAcz0B,UAAUI,aAAa94f,QAAQyB,KAAK0rhB,eAC1DxjI,EAAawjI,cAAcz0B,UAAUI,aAAa94f,QAAQ2pZ,EAAawjI,eAE/E,IAAI8jB,EAAiBxviB,KAAK0rhB,cAAcz0B,UACpCw4C,EAAevnJ,EAAawjI,cAAcz0B,UAC9C,OAAIu4C,EAAel4C,gBAAgBxlf,QAAU29hB,EAAan4C,gBAAgBxlf,MAClE09hB,EAAejnC,cACRinC,EAAehnC,eAAenR,aAAa94f,QAAQixiB,GACtDC,EAAajnC,eAAenR,aAAa94f,QAAQkxiB,GAM7CD,EAAel4C,gBAAgBD,aAAa94f,QAAQixiB,GACvDC,EAAan4C,gBAAgBD,aAAa94f,QAAQkxiB,GAGxDzviB,KAAKwjgB,MAAMvtb,UAAUs5d,aAAaC,EAAgBC,IAM7DvB,EAAa9yiB,UAAUkziB,6BAA+B,WAClD,OAAOtuiB,KAAKwngB,qBAAqBxngB,KAAK0rhB,cAAe1rhB,KAAK2L,OAAOuB,aAKrEghiB,EAAa9yiB,UAAUosgB,qBAAuB,SAAUv9c,EAAMw9c,GAE1D,OADWx9c,EAAAA,EAEKu9c,qBAAqBC,GAE9BA,GAKXymC,EAAa9yiB,UAAU6ziB,qBAAuB,SAAUhlf,EAAMylf,GAC1D1viB,KAAK0rhB,cAAgBzhe,EACrBjqD,KAAK2L,OAAS+jiB,EACd1viB,KAAK6uiB,wBAAuB,IAKhCX,EAAa9yiB,UAAUu0iB,yBAA2B,SAAU98B,EAAYlngB,GACpE,IAAIurU,EAAal3U,KAAKi2E,UAAUo4d,cAAcx7B,GAC1CppO,EAAYopO,EAAW5b,UAAUI,aAAa94f,QAAQs0gB,GAI1D,GAHIA,EAAWf,eACX56L,GAA0B,GAE1BvrU,EAASurU,EAAb,CACI,IAAI04N,OAAiB,EACrB,GAAInmQ,GAAaopO,EAAW5b,UAAUI,aAAa76f,OAAS,EAAG,CAC3D,IAAI0+gB,EAAYl7gB,KAAKi2E,UAAU45d,qBAAqBh9B,EAAW5b,WAC3DikB,GAAaA,EAAUppgB,QAAU+ggB,EAAW5b,UAAUnlf,QACtD89hB,EAAiB10B,EAAUl+f,iBAI/B4yhB,EAAiB/8B,EAAW5b,UAAUI,aAAa5tN,EAAY,GAEnEzpS,KAAK2viB,yBAAyBC,EAAgBjkiB,EAASurU,QAGtD,GAAIvrU,EAAS,EAAb,CACD,IAAImkiB,EAAWj9B,EAAW5b,UAAUI,aAAa5tN,EAAY,GACzDsmQ,EAAgB/viB,KAAKi2E,UAAUo4d,cAAcyB,GAAYnkiB,EAC7D3L,KAAK2viB,yBAAyBG,EAAUC,QAIxC/viB,KAAK0rhB,cAAgB7Y,EACrB7ygB,KAAK2L,OAASA,EAElB3L,KAAK6uiB,wBAAuB,IAMhCX,EAAa9yiB,UAAU40iB,iBAAmB,SAAU52U,GAC5C37N,EAAkB27N,KAClBA,GAAa,GAEjB,IAAI56D,EAASx+J,KAAKi2E,UAAUg6d,mBAAmBjwiB,KAAK0rhB,cAAe1rhB,KAAK2L,QACxE,GAAI6yJ,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,YAAoBjigB,EAAkB+gK,EAAOmhW,UAAW,CACpG,GAAIvmS,EAGA,OAFAp5N,KAAKkwiB,yBAAyB1xY,QAC9Bx+J,KAAKgwiB,mBAIL,IAAI/lf,EAAOu0G,EAAOmhW,SAAS11c,KACvB01c,EAAWnhW,EAAOmhW,SAClBwwC,EAAiBlmf,EAAKsS,UAAUojc,EAAU,GAC1CywC,EAAgBpwiB,KAAKwngB,qBAAqBv9c,EAAMkmf,EAAejjiB,YACnE,GAAIghiB,EAAamC,mBAAmBrwiB,KAAKi2E,UAAUh3D,IAAIqvhB,+BAAgC8B,GAGnF,YADApwiB,KAAKi2E,UAAUh3D,IAAIqxhB,aAAa9xY,EAAOmhW,SAAU,GAGrD3/f,KAAKswiB,aAAa9xY,EAAOmhW,SAAU,GAG3C,IAAI4wC,EAAavwiB,KAAKi2E,UAAUu6d,mBAAmBxwiB,KAAK0rhB,cAAe1rhB,KAAK2L,QACxE89R,EAAYzpS,KAAKi3f,UAAUI,aAAa94f,QAAQyB,KAAK0rhB,eACrD55gB,EAAQ,EACZ,GAAIy+hB,EAAavwiB,KAAK2L,OAAQ,CAC1B3L,KAAK2L,OAAS4kiB,EACd,IAAIzphB,EAAO9mB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQmG,GAGrD,GAFA0sJ,EAAS13I,EAAK9lB,QACd8Q,EAAQgV,EAAKhV,OACRrU,EAAkB+gK,IAAW1sJ,IAAU0sJ,EAAOhiK,QAAUgiK,EAAOixO,oBAAoBgwH,GAAiB,CACrG,IAAIgxC,EAAkBzwiB,KAAKi2E,UAAUy6d,oBAAoBlyY,EAAOixO,UAE5DghK,aAA2BhxC,IAAiD,IAA9BgxC,EAAgB/wC,YAC9DlhW,EAASiyY,EACTzwiB,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUiiG,EAAQ,UAI1D,GAAIirI,EAAY,EAAIzpS,KAAKi3f,UAAUI,aAAa76f,OAAQ,CACzD,IAAIoziB,EAAiB5viB,KAAKi3f,UAAUI,aAAa5tN,EAAY,GACzDmmQ,IACA5viB,KAAK0rhB,cAAgBkkB,EACrB5viB,KAAK2L,OAAS3L,KAAKi2E,UAAU06d,mBAAmB3wiB,KAAK0rhB,gBAEzD,IAAIklB,EAAY5wiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQmG,GAC1D0sJ,EAASoyY,EAAU5viB,QACnB8Q,EAAQ8+hB,EAAU9+hB,MACd0sJ,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WAC5C1/f,KAAK2L,cAIT3L,KAAK6wiB,4BAA4B/+hB,GAAO,GAG5C9R,KAAK6uiB,wBAAuB,IAMhCX,EAAa9yiB,UAAU01iB,+BAAiC,SAAU76d,GAC9D,IAAI86d,EACAC,EAAchxiB,KAAK0rhB,cAAcz0B,UAOjCx5f,EALAsziB,EADAC,EAAYzoC,cACQtyb,EAAUg7d,yBAAyBD,EAAYxoC,gBAG/Cvyb,EAAUi7d,0BAA0BF,MAK5DhxiB,KAAK0rhB,cAAgBqlB,EAAkB15C,aAAa05C,EAAkB15C,aAAa76f,OAAS,GAC5FwD,KAAK2L,OAAS3L,KAAK0rhB,cAAc1Z,eAAiB,IAEtDk8B,EAAa9yiB,UAAUy1iB,4BAA8B,SAAU7nC,EAAemoC,GAE1E,IAAI3yY,EACAowY,GAAkB,EAClBrsB,OAAgBrnhB,EAChBuuS,EAAYzpS,KAAKi3f,UAAUI,aAAa94f,QAAQyB,KAAK0rhB,eACzD,GAAKylB,GAGA,GAAI1nQ,EAAY,EAAIzpS,KAAKi3f,UAAUI,aAAa76f,OAAQ,CACzD,IAAIoziB,EAAiB5viB,KAAKi3f,UAAUI,aAAa5tN,EAAY,GACzDmmQ,IACA5viB,KAAK0rhB,cAAgBkkB,EACrB5viB,KAAK2L,OAAS,QAKlB,GADA42gB,EAAgBvihB,KAAKi2E,UAAUm7d,sBAAsBpxiB,KAAKi3f,YACrDx5f,EAAkB8khB,IACfA,EAAcjrB,2BAA2B2O,GACzC,GAAIjmgB,KAAKi2E,UAAU14E,MAAM05f,UAAUsR,cAAe,CAG9CqmC,GADoB5uiB,KAAKi2E,UAAUo7d,mBAAmBrxiB,KAAKi2E,UAAU14E,MAAM05f,UAAUuR,eAAgB+Z,EAAc/Z,gBAClFJ,WAAWjkgB,SAASo+gB,EAAc/Z,qBAGnEomC,GAAkB,OAnB9BrsB,EAAgBvihB,KAAKi2E,UAAUq7d,sBAAsBtxiB,KAAKi3f,YAwBzDx5f,EAAkB8khB,IAAkBA,EAAclrB,aAAa76f,OAAS,IACpEoyiB,GAKD5uiB,KAAK0rhB,cAAgBnJ,EAAclrB,aAAakrB,EAAclrB,aAAa76f,OAAS,GACpFwD,KAAK2L,OAAS3L,KAAKi2E,UAAUo4d,cAAcruiB,KAAK0rhB,eAAiB,IALjE1rhB,KAAK0rhB,cAAgBnJ,EAAcvlgB,WACnChd,KAAK2L,OAASwliB,EAAc,EAAInxiB,KAAKi2E,UAAU06d,mBAAmB3wiB,KAAK0rhB,iBAO/E,IAAIklB,EAAY5wiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQq9f,GAC1DxqW,EAASoyY,EAAU5viB,QACnBgogB,EAAgB4nC,EAAU9+hB,MACtB0sJ,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WAC5C1/f,KAAK2L,UAGbuiiB,EAAa9yiB,UAAUm2iB,2BAA6B,SAAUz/hB,EAAOq/hB,GACjE,IAAIK,EACAhzY,EACAirI,EAAYzpS,KAAKi3f,UAAUI,aAAa94f,QAAQyB,KAAK0rhB,eACrDre,EAAartgB,KAAKi2E,UAAUw7d,uBAAuBzxiB,KAAK0rhB,cAAcz0B,UAAWj3f,KAAK2L,QAC1F,GAAI3L,KAAK2L,OAAS0hgB,EACdrtgB,KAAK2L,OAAS0hgB,OAEb,GAAI5jO,EAAY,EAAG,CACpB,IAAIw2P,EAAiBjgiB,KAAKi3f,UAAUI,aAAa5tN,EAAY,GACzDw2P,IACAjgiB,KAAK0rhB,cAAgBuU,EACrBjgiB,KAAK2L,OAAS3L,KAAK0rhB,cAAc1Z,oBAGpC,CAED,IAAI++B,OAAoB71iB,EACpB0ziB,GAAkB,EACtB,GAAKuC,GAKD,GADAJ,EAAoB/wiB,KAAKi2E,UAAUy7d,0BAA0B1xiB,KAAKi3f,YAC7Dx5f,EAAkBsziB,IACfA,EAAkBz5C,2BAA2B2O,GAC7C,GAAIjmgB,KAAKi2E,UAAU14E,MAAM05f,UAAUsR,cAAe,CAG9CqmC,GADoB5uiB,KAAKi2E,UAAUo7d,mBAAmBrxiB,KAAKi2E,UAAU14E,MAAM05f,UAAUuR,eAAgBuoC,EAAkBvoC,gBACtFJ,WAAWjkgB,SAAS4siB,EAAkBvoC,qBAGvEomC,GAAkB,OAZ9BmC,EAAoB/wiB,KAAKi2E,UAAUi7d,0BAA0BlxiB,KAAKi3f,WAiBjEx5f,EAAkBsziB,KACdnC,GAKD5uiB,KAAK0rhB,cAAgBqlB,EAAkB/zhB,WACvChd,KAAK2L,OAAS3L,KAAKi2E,UAAU06d,mBAAmB3wiB,KAAK0rhB,iBALrD1rhB,KAAK0rhB,cAAgBqlB,EAAkB15C,aAAa05C,EAAkB15C,aAAa76f,OAAS,GAC5FwD,KAAK2L,OAAS3L,KAAK0rhB,cAAc1Z,iBAe7C,GAPAlggB,EAAQ,EACR0/hB,EAAaxxiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQmG,GACvD0sJ,EAASgzY,EAAWxwiB,QACpB8Q,EAAQ0/hB,EAAW1/hB,MACf0sJ,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WAC5C1/f,KAAK2L,SAEL6yJ,aAAkBihW,GAAiB,CAEnC,IAAIkyC,EAAiB3xiB,KAAKi2E,UAAU27d,wBAAwBpzY,GACvD/gK,EAAkBk0iB,KACnBnzY,EAASmzY,EACT3xiB,KAAK0rhB,cAAgBltX,EAAOv0G,KAC5BjqD,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUiiG,EAAQA,EAAOhiK,QACtDgiK,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WAC5C1/f,KAAK2L,UAKjB3L,KAAK6uiB,wBAAuB,IAKhCX,EAAa9yiB,UAAUy2iB,iCAAmC,WACtD,IAAI56C,EAAYj3f,KAAK0rhB,cAAcz0B,UAC9Bx5f,EAAkBuC,KAAKi2E,UAAUq7d,sBAAsBr6C,MAExDj3f,KAAK0rhB,cAAgB1rhB,KAAKi2E,UAAUq7d,sBAAsBr6C,GAAWj6e,WACrEhd,KAAK2L,OAAS3L,KAAKi2E,UAAUm4d,eAAen3C,GAC5Cj3f,KAAK6uiB,wBAAuB,KAOpCX,EAAa9yiB,UAAU02iB,qBAAuB,WAC1C,IAAIhgiB,EAAQ,EACR0/hB,EAAaxxiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQmG,GACvD0sJ,EAASgzY,EAAWxwiB,QACxB8Q,EAAQ0/hB,EAAW1/hB,MACH9R,KAAKi3f,UAAUI,aAAa94f,QAAQyB,KAAK0rhB,eACrDltX,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,YAAoBjigB,EAAkB+gK,EAAOohW,aACzF5/f,KAAK+xiB,6BAA6BvzY,GAEtCx+J,KAAKuxiB,2BAA2Bz/hB,GAAO,IAM3Co8hB,EAAa9yiB,UAAU80iB,yBAA2B,SAAUtwC,GACxD,IAAIphW,EACA/gK,EAAkBmigB,EAAW2S,gBAC7B/zW,EAASohW,EAAWD,UAGpBnhW,EAASohW,EAAW2S,eACpBvygB,KAAK0rhB,cAAgBltX,EAAOv0G,KAExBjqD,KAAK0rhB,gBAAkB9rB,EAAWD,SAAS11c,MAASjqD,KAAKi2E,UAAU+7d,eAAehyiB,KAAKi3f,UAAWz4V,EAAQohW,EAAWD,YACrHnhW,EAASohW,EAAWD,WAG5B3/f,KAAK0rhB,cAAgBltX,EAAOv0G,KAC5BjqD,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUiiG,EAAQ,IAMvD0vY,EAAa9yiB,UAAU62iB,aAAe,WAClC,IAAIjpC,EAAgB,EAChB4nC,EAAY5wiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQq9f,GACtDxqW,EAASoyY,EAAU5viB,QAEvB,GADAgogB,EAAgB4nC,EAAU9+hB,OACrB9R,KAAKwjgB,MAAMvtb,UAAU2hK,UAAYn6O,EAAkB+gK,GAAS,CAC7D,IAAI0zY,EAAalyiB,KAAKi2E,UAAUk8d,0BAA0B3zY,EAAQwqW,GAClE,GAAIkpC,aAAsBzyC,IAA4C,IAAzByyC,EAAWxyC,UAAiB,CACrE,IAAI+H,EAAoBzngB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM+wiB,+BAE/C6B,EAAiB+B,EAAWvyC,SAAS11c,KAAKsS,UAAU21e,EAAWvyC,SAAU,GAEzEywC,EAAgBpwiB,KAAKwngB,qBAAqB0qC,EAAWvyC,SAAS11c,KAAMkmf,EAAejjiB,YACvF,IAAKghiB,EAAamC,mBAAmBD,EAAe3oC,GAIhD,YADAzngB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM0xiB,qBAAqBiD,EAAWvyC,SAAS11c,KAAMkmf,IAKtF,GAAI3xY,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,YAAoBjigB,EAAkB+gK,EAAOohW,YAAa,CAClG6H,EAAoBzngB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM+wiB,+BAC/C6B,EAAiB3xY,EAAOv0G,KAAKsS,UAAUiiG,EAAQ,GAC/C4xY,EAAgBpwiB,KAAKwngB,qBAAqBhpW,EAAOv0G,KAAMkmf,EAAejjiB,YAC1E,IAAKghiB,EAAamC,mBAAmB5oC,EAAmB2oC,GAAgB,CAGpE,IAAIgC,EAAmB5zY,EAAOohW,WAAW31c,KAAKsS,UAAUiiG,EAAOohW,WAAY,GAK3E,OAJA5/f,KAAK0rhB,cAAgBltX,EAAOohW,WAAW31c,KACvCjqD,KAAK2L,OAASymiB,OAEdpyiB,KAAK6uiB,wBAAuB,GAGhC7uiB,KAAK+xiB,6BAA6BvzY,GAEtCx+J,KAAKuxiB,2BAA2BvoC,GAAe,IAMnDklC,EAAa9yiB,UAAUsyc,YAAc,WACjC,IAAIs7D,EAAgB,EAChB4nC,EAAY5wiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQq9f,GACtDxqW,EAASoyY,EAAU5viB,QAEvB,GADAgogB,EAAgB4nC,EAAU9+hB,OACrBrU,EAAkB+gK,GAAS,CAC5B,IAAKx+J,KAAKwjgB,MAAMvtb,UAAU2hK,SAAWoxR,IAAkBxqW,EAAOhiK,QAAUgiK,aAAkBihW,IAC9D,IAArBjhW,EAAOkhW,UAAiB,CAC3B,IAAI+H,EAAoBzngB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM+wiB,+BAE/C8D,EAAmB5zY,EAAOohW,WAAW31c,KAAKsS,UAAUiiG,EAAOohW,WAAY,GAEvEyyC,EAAkBryiB,KAAKwngB,qBAAqBhpW,EAAOohW,WAAW31c,KAAMmof,EAAiBlliB,YACzF,IAAKghiB,EAAamC,mBAAmB5oC,EAAmB4qC,GAIpD,YADAryiB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM0xiB,qBAAqBzwY,EAAOohW,WAAW31c,KAAMmof,GAIhF5zY,EAASx+J,KAAKi2E,UAAUk8d,0BAA0B3zY,EAAQwqW,GAE9D,GAAIxqW,aAAkBihW,KAAoBhigB,EAAkB+gK,EAAOmhW,UAAW,CAC1E,IACI2yC,EAAsB,EAEtBC,EAH0BvyiB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,UAGH8R,UAAU/ogB,KAAKwjgB,MAAMvtb,UAAU14E,MAAMoO,OAAQ2miB,GAC/FE,EAAuBD,EAAwBvxiB,QACnDsxiB,EAAsBC,EAAwBzgiB,MAE9C,GADuB9R,KAAKi2E,UAAUk8d,0BAA0BK,EAAsBF,KAC7D9zY,EAUrB,OALAA,EAASA,EAAOmhW,SAChB3/f,KAAK0rhB,cAAgBltX,EAAOv0G,KAC5BjqD,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUiiG,EAAQ,QAEnDx+J,KAAK6uiB,wBAAuB,GAR5B7uiB,KAAKkwiB,yBAAyB1xY,QAY5BA,aAAkBihW,KACC,IAArBjhW,EAAOkhW,WAAwC,IAArBlhW,EAAOkhW,aACrC1/f,KAAK0rhB,cAAgBltX,EAAOv0G,KAC5BjqD,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUiiG,EAAQ,IAEvDwqW,EAAgB,EAChB,IAAIunC,EAAavwiB,KAAKi2E,UAAUu6d,mBAAmBxwiB,KAAK0rhB,cAAe1rhB,KAAK2L,QACxEnP,EAASwD,KAAKi2E,UAAUo4d,cAAcruiB,KAAK0rhB,eAC3CjK,EAAiBzhhB,KAAKi2E,UAAU4uc,oBAAoB7khB,KAAK0rhB,eAC7D,GAAI1rhB,KAAK2L,OAAS4kiB,EAAY,CAC1BvwiB,KAAK2L,OAAS4kiB,EACd,IAAIkC,EAAczyiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQq9f,GAG5D,GAFAxqW,EAASi0Y,EAAYzxiB,QACrBgogB,EAAgBypC,EAAY3giB,OACvBrU,EAAkB+gK,IAAWwqW,IAAkBxqW,EAAOhiK,QAAUgiK,EAAOixO,oBAAoBgwH,GAAiB,CAC7G,IAAIgxC,EAAkBzwiB,KAAKi2E,UAAUy6d,oBAAoBlyY,EAAOixO,UAE5DghK,aAA2BhxC,IAAiD,IAA9BgxC,EAAgB/wC,YAC9DlhW,EAASiyY,EACTzwiB,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUiiG,EAAQ,UAItDx+J,KAAK2L,SAAW4kiB,GAAcvwiB,KAAK2L,OAASnP,EAAS,GAAKilhB,EAC/DzhhB,KAAK2L,OAASnP,EAAS,EAGvBwD,KAAK6wiB,4BAA4B7nC,GAAe,GAGpDhpgB,KAAK6uiB,wBAAuB,IAMhCX,EAAa9yiB,UAAUk1iB,aAAe,SAAU9xY,EAAQ1sJ,GACpD9R,KAAK0rhB,cAAgBltX,EAAOv0G,KAC5BjqD,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUiiG,EAAQ1sJ,GAEnD9R,KAAK6uiB,wBAAuB,IAMhCX,EAAamC,mBAAqB,SAAU9yiB,EAAO0hB,GAC/C,GAAI1hB,IAAU0hB,EACV,OAAO,EAEX1hB,EAAQA,EAAMN,QAAQ,MAAO,IAC7BgiB,EAAMA,EAAIhiB,QAAQ,MAAO,IACzBM,EAAQA,EAAMN,QAAQ,MAAO,IAC7BgiB,EAAMA,EAAIhiB,QAAQ,MAAO,IACzBM,EAAQA,EAAMN,QAAQ,MAAO,IAC7BgiB,EAAMA,EAAIhiB,QAAQ,MAAO,IACzB,IAAI6oB,EAAiBvoB,EAAML,MAAM,KAC7B8oB,EAAe/G,EAAI/hB,MAAM,KACzBV,EAASspB,EAAetpB,OACxBA,EAASwpB,EAAaxpB,SACtBA,EAASwpB,EAAaxpB,OAAS,GAEnC,IAAK,IAAIN,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAI2ugB,EAAcjvf,WAAWkK,EAAe5pB,IACxC64gB,EAAYn5f,WAAWoK,EAAa9pB,IACxC,GAAI2ugB,IAAgBkK,EAChB,OAAOlK,EAAckK,EAG7B,OAAO,GAMXm5B,EAAa9yiB,UAAU22iB,6BAA+B,SAAUpyC,GAC5D,IAAInhW,EAEAA,EADA/gK,EAAkBkigB,EAAS4S,gBAClBvygB,KAAKi2E,UAAU27d,wBAAwBjyC,EAASC,YAGhD5/f,KAAKi2E,UAAU27d,wBAAwBjyC,GAEpD3/f,KAAK0rhB,cAAgBltX,EAAOv0G,KAC5BjqD,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUiiG,EAAQA,aAAkBihW,GAAkB,EAAIjhW,EAAOhiK,SAMtG0xiB,EAAa9yiB,UAAUs3iB,wBAA0B,SAAUhsiB,GACvD,IAAIqugB,EAAY/0gB,KAAK0rhB,cAAc1Z,eAC/Bg/B,EAAchxiB,KAAK0rhB,cAAcz0B,UACjChhb,EAAYj2E,KAAKi2E,UACrB,GAAa,IAATvvE,GAAe1G,KAAK2L,SAAWopgB,GAAa/0gB,KAAK2L,SAAWopgB,EAAY,EAA5E,CAGA,GAAI/0gB,KAAK2L,SAAWopgB,EAAY,EAC5B/0gB,KAAK2L,OAASopgB,OAEb,GAAI/0gB,KAAK2L,SAAWsqE,EAAUm4d,eAAe4C,IAAgBhxiB,KAAK0rhB,gBAAkBslB,EAAY35C,aAAa,GAAI,CAClH,IAAI05C,EAAoB96d,EAAUi7d,0BAA0BF,GAC5D,GAAIvziB,EAAkBsziB,GAClB,OAEJ/wiB,KAAK0rhB,cAAgBqlB,EAAkB15C,aAAa05C,EAAkB15C,aAAa76f,OAAS,GAC5FwD,KAAK2L,OAAS3L,KAAK0rhB,cAAc1Z,mBAEhC,CACD,GAAIhygB,KAAK2L,SAAWsqE,EAAU06d,mBAAmB3wiB,KAAK0rhB,eAAgB,CAClE,IAAIjiP,EAAYunQ,EAAY35C,aAAa94f,QAAQyB,KAAK0rhB,eAClDjiP,EAAY,GAAK,IACjBzpS,KAAK0rhB,cAAgBslB,EAAY35C,aAAa5tN,EAAY,GAC1DzpS,KAAK2L,OAAS3L,KAAK0rhB,cAAc1Z,gBAGzC,IAEIhJ,EAAgB,EAChB4nC,EAAY5wiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQq9f,GACtDxqW,EAASoyY,EAAU5viB,QACvBgogB,EAAgB4nC,EAAU9+hB,MAE1B9R,KAAK2yiB,sBAAsBn0Y,EAAQvoF,EAAW+yb,EAAetigB,EAAO83J,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WAPhG,GACG,EAMwI1/f,MAElJ,IAAT0G,GACA1G,KAAK4yiB,kBAET5yiB,KAAK6uiB,wBAAuB,KAOhCX,EAAa9yiB,UAAUy3iB,kBAAoB,SAAUr0Y,EAAQwqW,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,GAChHx0Y,aAAkBoqW,GAClB5ogB,KAAKiziB,sBAAsBz0Y,EAAQwqW,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,GAEzFx0Y,aAAkBqqW,GAEvB7ogB,KAAKkziB,uBAAuB10Y,EAAQwqW,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,GAE1Fx0Y,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,UAEjD1/f,KAAKmziB,4BAA4B30Y,EAAQwqW,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,GAE/Fx0Y,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WAAmBlhW,aAAkBsqW,GAEtF9ogB,KAAKoziB,gCAAgC50Y,EAAQwqW,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,GAEnGx0Y,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WAEjD1/f,KAAKqziB,0BAA0B70Y,EAAQwqW,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,IAQ1G9E,EAAa9yiB,UAAU+3iB,4BAA8B,SAAUvzC,EAAYoJ,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,GAClI,IAAInoC,EAAcjL,EAAW31c,KAAKsS,UAAUqjc,EAAY,GAC1BA,EAAWpjgB,OACzC,GAAIiB,EAAkBmigB,EAAW2S,gBAC7BvygB,KAAKqziB,0BAA0BzzC,EAAWD,SAAU,EAAGj5f,EAAMosiB,EAAWC,EAAchT,EAAaiT,QAElG,GAAa,IAATtsiB,EAEL1G,KAAKoziB,gCAAgCxzC,EAAW2S,eAAgB,EAAG7rgB,EAAMosiB,EAAWC,EAAchT,EAAaiT,QAE9G,IAAKv1iB,EAAkBmigB,EAAWD,UAAW,CAC9C,IAAInhW,EAASohW,EAAW2S,eAQxB,GANI/zW,EAAOv0G,KAAKgtc,YAAc2I,EAAWD,SAAS11c,KAAKgtc,WAAcj3f,KAAKi2E,UAAU+7d,eAAexzY,EAAOv0G,KAAKgtc,UAAWz4V,EAAQohW,EAAWD,YACzInhW,EAASohW,EAAWD,UAGxB3/f,KAAK6yiB,kBAAkBr0Y,EAAQ,EAAG93J,IAAQq5hB,EAAY9oC,YAAc2I,EAAW31c,KAAKgtc,WAAa8oC,EAAYp0hB,SAAWk/f,GAAckoC,EAAchT,EAAaiT,GAE7JD,IAAiBt1iB,EAAkBmigB,EAAW2S,iBAAoBwtB,EAAY9oC,YAAc2I,EAAW31c,KAAKgtc,WAAe8oC,EAAYp0hB,SAAWi0f,EAAW2S,eAAetod,KAAKsS,UAAUqjc,EAAW2S,eAAgB3S,EAAW2S,eAAe/1gB,QAEhP,YADAujiB,EAAYkP,qBAAqBrvC,EAAW31c,KAAM4gd,GAGjDkoC,GAEDhT,EAAYkP,qBAAqBrvC,EAAWD,SAAS11c,KAAM21c,EAAWD,SAAS11c,KAAKsS,UAAUqjc,EAAWD,SAAUC,EAAWD,SAASnjgB,WASnJ0xiB,EAAa9yiB,UAAU83iB,uBAAyB,SAAUj/V,EAAO+0T,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,GACxH,GAAIF,EAGA,OAFA/S,EAAYkP,qBAAqBh7V,EAAMhqJ,KAAMgqJ,EAAMhqJ,KAAKsS,UAAU03I,EAAO+0T,SACzE+pC,GAAe,GAGnB,GAAsB,IAAlB/pC,EAAqB,CACrB,IAAI6B,EAAc52T,EAAMhqJ,KAAKsS,UAAU03I,EAAO,GAC9C8+V,GAAe,EACXhT,EAAYp0hB,SAAWk/f,EACnBptgB,EAAkBw2M,EAAMw7L,UACxBswJ,EAAYkP,qBAAqBh7V,EAAMhqJ,KAAM4gd,EAAc52T,EAAMz3M,QAGjEwD,KAAK6yiB,kBAAkB5+V,EAAMw7L,SAAU,EAAG/oY,EAAMosiB,EAAWC,EAAchT,EAAaiT,GAI1FjT,EAAYkP,qBAAqBh7V,EAAMhqJ,KAAM4gd,QAG3CptgB,EAAkBw2M,EAAMw7L,WAC9BzvY,KAAK6yiB,kBAAkB5+V,EAAMw7L,SAAU,EAAG/oY,EAAMosiB,EAAWC,EAAchT,EAAaiT,IAO9F9E,EAAa9yiB,UAAU63iB,sBAAwB,SAAUxre,EAAMuhc,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,GACtH,GAAkB,OAAdvre,EAAKz4C,MAA+B,OAAdy4C,EAAKz4C,KAAe,CAC1C,GAAI8jhB,EAGA,OAFA/S,EAAYkP,qBAAqBxne,EAAKxd,KAAMwd,EAAKxd,KAAKsS,UAAUkL,EAAMuhc,SACtE+pC,GAAe,GAGnB,GAAsB,IAAlB/pC,EAAqB,CACrB+pC,GAAe,EACf,IAAIloC,EAAcpjc,EAAKxd,KAAKsS,UAAUkL,EAAM,GACxCs4d,EAAYp0hB,SAAWk/f,EACvBk1B,EAAYkP,qBAAqBxne,EAAKxd,KAAM4gd,EAAcpjc,EAAKjrE,QAG/DujiB,EAAYkP,qBAAqBxne,EAAKxd,KAAM4gd,QAG1CptgB,EAAkBgqE,EAAKgoU,WAC7BzvY,KAAK6yiB,kBAAkBpre,EAAKgoU,SAAU,EAAG/oY,EAAMosiB,EAAWC,EAAchT,EAAaiT,OAGxF,CACD,IAAIM,EAAe,EACnB,GAAsB,IAAlBtqC,GAAuB+pC,IAA8E,IAA7Dj0C,GAAcuB,oBAAoB9hgB,QAAQkpE,EAAKz4C,KAAK,KAE5F,GADA+wgB,EAAYkP,qBAAqBxne,EAAKxd,KAAMwd,EAAKxd,KAAKsS,UAAUkL,EAAMuhc,IAClE8pC,EACA,YAGH,GAAI9pC,EAAgBvhc,EAAKjrE,OAAQ,CAElC,IAAIkpS,EAAMsjO,EAAgB,GAAKvhc,EAAKz4C,KAAKxyB,OAAS,GAAKwsgB,EAAgBvhc,EAAKz4C,KAAK3tB,MAAM2ngB,EAAevhc,EAAKjrE,QAAUirE,EAAKz4C,KAE1H,IAAsB,KADtBskhB,EAAex0C,GAAcE,WAAWt5N,EAAKo5N,GAAcuB,sBAClC,CACrB,GAAIyyC,EAEA,YADAC,GAAe,GAGnB,IAAIpniB,EAAS87D,EAAKxd,KAAKsS,UAAUkL,EAAM6re,EAAetqC,GAEtD,IAAKgqC,GAAsC,MAAtBttQ,EAAI4tQ,MAA2BP,GAAgBtre,EAAKxd,KAAKgtc,YAAc8oC,EAAY9oC,WAAatrf,IAAWo0hB,EAAYp0hB,OAGxI,OAFAoniB,GAAe,OACfhT,EAAYkP,qBAAqBxne,EAAKxd,KAAMt+C,GAIhD,IADA2niB,IACOA,EAAe5tQ,EAAIlpS,SAA4E,IAAlEsigB,GAAcuB,oBAAoB9hgB,QAAQmnS,EAAI4tQ,MACpD,MAAtB5tQ,EAAI4tQ,IAA+C,MAAtB5tQ,EAAI4tQ,KAGrCA,IAEJP,GAAe,EACXO,EAAe5tQ,EAAIlpS,OAEnBujiB,EAAYkP,qBAAqBxne,EAAKxd,KAAMwd,EAAKxd,KAAKsS,UAAUkL,EAAM6re,EAAetqC,IAE/EvrgB,EAAkBgqE,EAAKgoU,UAM7BswJ,EAAYkP,qBAAqBxne,EAAKxd,KAAMwd,EAAKxd,KAAKsS,UAAUkL,EAAM6re,EAAetqC,IAJrFhpgB,KAAK6yiB,kBAAkBpre,EAAKgoU,SAAU,EAAG/oY,EAAMosiB,EAAWC,EAAchT,EAAaiT,QAOnFv1iB,EAAkBgqE,EAAKgoU,UAI7BswJ,EAAYkP,qBAAqBxne,EAAKxd,KAAMwd,EAAKxd,KAAK+nd,gBAHtDhygB,KAAK6yiB,kBAAkBpre,EAAKgoU,SAAU,EAAG/oY,EAAMosiB,EAAWC,EAAchT,EAAaiT,QAMnFv1iB,EAAkBgqE,EAAKgoU,WAC7BzvY,KAAK6yiB,kBAAkBpre,EAAKgoU,SAAU,EAAG/oY,EAAMosiB,EAAWC,EAAchT,EAAaiT,KASjG9E,EAAa9yiB,UAAUg4iB,gCAAkC,SAAU7gC,EAAgBvJ,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,GACrIv1iB,EAAkB80gB,EAAe9iI,WAClCzvY,KAAK6yiB,kBAAkBtgC,EAAe9iI,SAAU,EAAG/oY,EAAMosiB,EAAWC,EAAchT,EAAaiT,IAQvG9E,EAAa9yiB,UAAUi4iB,0BAA4B,SAAU1zC,EAAUqJ,EAAetigB,EAAMosiB,EAAWC,EAAchT,EAAaiT,GAC9H,IAAInoC,EAAclL,EAAS11c,KAAKsS,UAAUojc,EAAU,GAChDoV,EAAYlK,EAAclL,EAASnjgB,OACnCujiB,EAAYp0hB,SAAWk/f,IACvBk1B,EAAYkP,qBAAqBtvC,EAAS11c,KAAM8qd,GAC5Ct3gB,EAAkBkigB,EAASlwH,aAI9BhyY,EAAkBkigB,EAASlwH,UAO5BswJ,EAAYkP,qBAAqBtvC,EAAS11c,KAAM4gd,IANhD7qgB,KAAK6yiB,kBAAkBlzC,EAASlwH,SAAU,EAAG/oY,GAAM,EAAOqsiB,EAAchT,EAAaiT,GACjFjT,EAAYp0hB,SAAWopgB,GACvBgrB,EAAYkP,qBAAqBtvC,EAAS11c,KAAM4gd,IAMxDkoC,GAAe,IAOnB7E,EAAa9yiB,UAAUu3iB,sBAAwB,SAAUn0Y,EAAQvoF,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAC7HvhY,aAAkBoqW,GAElB5ogB,KAAKuziB,0BAA0B/0Y,EAAQvoF,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAEtGvhY,aAAkBqqW,GAEvB7ogB,KAAKwziB,2BAA2Bh1Y,EAAQvoF,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAEvGvhY,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,UAEjD1/f,KAAKyziB,gCAAgCj1Y,EAAQvoF,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAE5GvhY,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,UAEjD1/f,KAAK0ziB,oCAAoCl1Y,EAAQvoF,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAEhHvhY,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,UAEjD1/f,KAAK2ziB,8BAA8Bn1Y,EAAQvoF,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAE1GvhY,aAAkBsqW,GACvB9ogB,KAAK4ziB,8BAA8Bp1Y,EAAQvoF,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAE1GvhY,aAAkB2qW,IAAsB3qW,EAAOk0W,cAEpD1ygB,KAAKuziB,0BAA0B/0Y,EAAOk0W,aAAcz8b,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,IAIhImO,EAAa9yiB,UAAUw4iB,8BAAgC,SAAUhW,EAAU3nd,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAC3I,GAAInC,EAASlrB,cACT,GAAIkrB,EAASlrB,wBAAwB9J,GAAgB,CACjD,IAAIpqW,EAASo/X,EAASlrB,aAClB5T,GAAcI,eAAe1gW,EAAOxvI,KAAM8ve,GAAcuB,uBAAyB7hW,EAAOxvI,KAAKxyB,OAAS,EACtGwD,KAAK2yiB,sBAAsBn0Y,EAAQvoF,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAGvGA,EAAYkP,qBAAqBrR,EAAS3ze,KAAM2ze,EAAS3ze,KAAKsS,UAAUqhe,EAAU,UAK1FmC,EAAYkP,qBAAqBrR,EAAS3ze,KAAMgsB,EAAU06d,mBAAmB/S,EAAS3ze,QAQ9Fikf,EAAa9yiB,UAAUu4iB,8BAAgC,SAAUh0C,EAAU1pb,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAC3I,IAAIl1B,EAAclL,EAAS11c,KAAKsS,UAAUojc,EAAU,GAChDoV,EAAYlK,EAAclL,EAASnjgB,OACvC,GAAIiB,EAAkBkigB,EAAS4S,gBAC3BvygB,KAAKyziB,gCAAgC9zC,EAASC,WAAY3pb,EAAW,EAAGvvE,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,QAEjH,GAAa,IAATr5hB,GAAejJ,EAAkBkigB,EAAS+S,eAK9C,IAAKj1gB,EAAkBkigB,EAASC,aAAwB,IAATl5f,EAAY,CAQ5D,IALIjJ,EAFA+gK,EAASmhW,EAAS+S,eAEYl0W,EAAOv0G,KAAKgtc,YAAc0I,EAASC,WAAW31c,KAAKgtc,YAAchhb,EAAU+7d,eAAexzY,EAAOv0G,KAAKgtc,UAAWz4V,EAAQmhW,EAASC,eAChKphW,EAASmhW,EAASC,YAGtB5/f,KAAK2yiB,sBAAsBn0Y,EAAQvoF,EAAWuoF,EAAOhiK,OAAQkK,IAAQq5hB,EAAY9oC,YAAc0I,EAAS11c,KAAKgtc,WAAa8oC,EAAYp0hB,SAAWopgB,GAAY9L,EAAW8pC,EAAchT,GAClLgT,GAAgBhT,EAAY9oC,YAAc0I,EAAS11c,KAAKgtc,WACrD8oC,EAAYp0hB,SAAWk/f,EAE1B,YADAk1B,EAAYkP,qBAAqBtvC,EAAS11c,KAAM8qd,GAG/Cg+B,GAEDhT,EAAYkP,qBAAqBtvC,EAASC,WAAW31c,KAAM01c,EAASC,WAAW31c,KAAKsS,UAAUojc,EAASC,WAAY,SApBzD,CAC9D,IAAIphW,EAASmhW,EAAS+S,aAEtB1ygB,KAAK2yiB,sBAAsBn0Y,EAAQvoF,EAAWuoF,EAAOhiK,OAAQkK,EAAO83J,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,UAAkBuJ,EAAW8pC,EAAchT,KA0BnKmO,EAAa9yiB,UAAUs4iB,oCAAsC,SAAUnhC,EAAgBt8b,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GACvJ//hB,KAAKyziB,gCAAgClhC,EAAe3S,WAAY3pb,EAAWs8b,EAAe3S,WAAWpjgB,OAAQkK,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,IAO3JmO,EAAa9yiB,UAAUq4iB,gCAAkC,SAAU7zC,EAAY3pb,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAC/I,IAAIl1B,EAAcjL,EAAW31c,KAAKsS,UAAUqjc,EAAY,GACpDmV,EAAYlK,EAAcjL,EAAWpjgB,OACrCujiB,EAAYp0hB,SAAWopgB,GACvBgrB,EAAYkP,qBAAqBrvC,EAAW31c,KAAM4gd,GAEjDptgB,EAAkBmigB,EAAW8S,cAW9BqtB,EAAYkP,qBAAqBrvC,EAAW31c,KAAMgsB,EAAU06d,mBAAmB/wC,EAAW31c,QAT1FjqD,KAAK2yiB,sBAAsB/yC,EAAW8S,aAAcz8b,EAAW2pb,EAAW8S,aAAal2gB,OAAQkK,GAAM,EAAOuigB,EAAW8pC,EAAchT,GACjIA,EAAYp0hB,SAAWk/f,IACV,IAATnkgB,GAAejJ,EAAkBmigB,EAAW2S,iBAE5CwtB,EAAYkP,qBAAqBrvC,EAAW31c,KAAM21c,EAAW2S,eAAetod,KAAKsS,UAAUqjc,EAAW2S,eAAgB3S,EAAW2S,eAAe/1gB,YAahK0xiB,EAAa9yiB,UAAUo4iB,2BAA6B,SAAUv/V,EAAOh+H,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GACrI,GAAI+S,EAGA,OAFA/S,EAAYkP,qBAAqBh7V,EAAMhqJ,KAAMgqJ,EAAMhqJ,KAAKsS,UAAU03I,EAAO+0T,SACzE+pC,GAAe,GAGnB,GAAI/pC,IAAkB/0T,EAAMz3M,OAAQ,CAChC,IAAIu4gB,EAAY9gU,EAAMhqJ,KAAKsS,UAAU03I,EAAOA,EAAMz3M,QAC9Cu4gB,IAAcgrB,EAAYp0hB,OAC1Bo0hB,EAAYkP,qBAAqBh7V,EAAMhqJ,KAAM8qd,EAAY9gU,EAAMz3M,QAG/DujiB,EAAYkP,qBAAqBh7V,EAAMhqJ,KAAM8qd,QAG3Ct3gB,EAAkBw2M,EAAMy+T,eAE9B1ygB,KAAK2yiB,sBAAsB1+V,EAAMy+T,aAAcz8b,EAAWg+H,EAAMy+T,aAAal2gB,OAAQkK,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,IAQvImO,EAAa9yiB,UAAUm4iB,0BAA4B,SAAU9re,EAAMwO,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GACnI,GAAkB,OAAdt4d,EAAKz4C,MAA+B,OAAdy4C,EAAKz4C,KAAe,CAC1C,GAAI8jhB,EAEA,YADAC,GAAe,GAGnB,GAAI/pC,IAAkBvhc,EAAKjrE,OAAQ,CAC/Bu2iB,GAAe,EACf,IAAIh+B,EAAYttc,EAAKxd,KAAKsS,UAAUkL,EAAMA,EAAKjrE,QAC3Cu4gB,IAAcgrB,EAAYp0hB,OAC1Bo0hB,EAAYkP,qBAAqBxne,EAAKxd,KAAM8qd,EAAYttc,EAAKjrE,QAG7DujiB,EAAYkP,qBAAqBxne,EAAKxd,KAAM8qd,QAG1Ct3gB,EAAkBgqE,EAAKirc,eAE7B1ygB,KAAK2yiB,sBAAsBlre,EAAKirc,aAAcz8b,EAAWxO,EAAKirc,aAAal2gB,OAAQkK,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,OAGhI,CACD,IAAI8T,EAAiB,EACrB,IAAK5qC,EAAW,CACZ,KAAOD,EAAgB,GAAsC,MAAjCvhc,EAAKz4C,KAAKg6e,EAAgB,IAClDA,IAEJ+2B,EAAYkP,qBAAqBxne,EAAKxd,KAAMwd,EAAKxd,KAAKsS,UAAUkL,EAAMuhc,IAE1E,GAAIA,EAAgB,EAAG,CAEnB,GADAC,GAAY,EACU,IAAlBD,GAAuB+pC,IAA+E,IAA9Dj0C,GAAcuB,oBAAoB9hgB,QAAQkpE,EAAKz4C,KAAK,IAG5F,OAFA+wgB,EAAYkP,qBAAqBxne,EAAKxd,KAAMwd,EAAKxd,KAAKsS,UAAUkL,EAAMuhc,SACtE+pC,GAAe,GAGnB,IAAIrtQ,EAAMj+N,EAAKz4C,KAAKxyB,OAASwsgB,EAAgBvhc,EAAKz4C,KAAK3tB,MAAM,EAAG2ngB,GAAiBvhc,EAAKz4C,KAEtF,IAAwB,KADxB6khB,EAAiB/0C,GAAcI,eAAex5N,EAAKo5N,GAAcuB,sBACtC,CACvB,GAAIyyC,EAEA,YADAC,GAAe,GAGnB,KAAOc,EAAiB,GAAKd,GAAwC,MAAxBrtQ,EAAImuQ,KACgC,IAAzE/0C,GAAcuB,oBAAoB9hgB,QAAQmnS,EAAImuQ,EAAiB,KACnEA,IAMJ,GAJ4B,MAAxBnuQ,EAAImuQ,IAAmD,MAAxBnuQ,EAAImuQ,IAA4Bd,GAC/Dc,IAEJd,GAAe,EACXc,EAAiB,EAAG,CACpB,IAAIloiB,EAAS87D,EAAKxd,KAAKsS,UAAUkL,EAAMose,GACnCpse,EAAKxd,KAAKgtc,YAAc8oC,EAAY9oC,WAAatrf,IAAWo0hB,EAAYp0hB,OAExE3L,KAAKuziB,0BAA0B9re,EAAMwO,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAGzGA,EAAYkP,qBAAqBxne,EAAKxd,KAAMt+C,QAG3C87D,EAAKirc,wBAAwB9J,GAElC5ogB,KAAK2yiB,sBAAsBlre,EAAKirc,aAAcz8b,EAAWxO,EAAKirc,aAAal2gB,OAAQkK,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAG7HA,EAAYkP,qBAAqBxne,EAAKxd,KAAMwd,EAAKxd,KAAKsS,UAAUkL,EAAM,SAI1EznE,KAAK8ziB,sBAAsBrse,EAAMwO,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,QAIzG//hB,KAAK8ziB,sBAAsBrse,EAAMwO,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,KASjHmO,EAAa9yiB,UAAU04iB,sBAAwB,SAAUrse,EAAMwO,EAAW+yb,EAAetigB,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAC3Ht4d,EAAKirc,wBAAwBP,IAAc1qc,EAAKxd,OAASwd,EAAKirc,aAAazod,KAE3EjqD,KAAK2yiB,sBAAsBlre,EAAKirc,aAAcz8b,EAAWxO,EAAKirc,aAAal2gB,OAAQkK,EAAMosiB,EAAW7pC,EAAW8pC,EAAchT,GAG7HA,EAAYkP,qBAAqBxne,EAAKxd,KAAMgsB,EAAU06d,mBAAmBlpe,EAAKxd,QAOtFikf,EAAa9yiB,UAAU24iB,8BAAgC,SAAUpxS,EAAcqxS,GAC3E,IAAI9rJ,EAAe,IAAIgmJ,EAAaluiB,KAAKwjgB,OACzCt7G,EAAa6mJ,2BAA2BpsS,GACxCulJ,EAAaimJ,kBAAmB,EAEhC,IADA,IAAI8F,GAAkB,EACftxS,IAAiBqxS,GAAqB9F,EAAamC,mBAAmB1tS,EAAcqxS,IAAoB,CAC3G,IAAKC,EAAiB,CAClB/rJ,EAAa8nJ,kBAAiB,GAG9B,GAAIrtS,IAFYulJ,EAAaomJ,+BAGzB,MAGR,IAAItlC,EAAgB,EAChB4nC,EAAY1oJ,EAAawjI,cAAc3iB,UAAU7gH,EAAav8Y,OAAQq9f,GACtExqW,EAASoyY,EAAU5viB,QAEvB,GADAgogB,EAAgB4nC,EAAU9+hB,OACrBrU,EAAkB+gK,GAAS,CAC5B,IAAI8zY,EAAsBtyiB,KAAKi2E,UAAU14E,MAAM+wiB,+BAC/C,GAAItlC,IAAkBxqW,EAAOhiK,QAAUgiK,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,UAAiB,CAChG,GAAIlhW,EAAOv0G,KAAKsS,UAAUiiG,EAAQ,KAAOx+J,KAAK2L,OAC1C,OAEJ,IAAIkngB,EAAar0W,EAAOohW,WAAW31c,KAC/Bmof,EAAmBv/B,EAAWt2c,UAAUiiG,EAAOohW,WAAY,GAC3DyyC,EAAkBryiB,KAAKwngB,qBAAqBqL,EAAYu/B,EAAiBlliB,YACxEghiB,EAAamC,mBAAmBiC,EAAqBD,IACtDryiB,KAAKi2E,UAAU14E,MAAM0xiB,qBAAqBp8B,EAAYu/B,GAG9D,IAAIF,EAAalyiB,KAAKi2E,UAAUk8d,0BAA0B3zY,EAAQwqW,IAC7DvrgB,EAAkBy0iB,IAAeA,aAAsB//B,KACxD3zW,EAAS0zY,GAIjB,GADA+B,EAAmBz1Y,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,YAAoBjigB,EAAkB+gK,EAAOmhW,UACvF,CACjB,GAAInhW,EAAOv0G,KAAKsS,UAAUiiG,EAAQ,KAAOx+J,KAAK2L,OAC1C,OAEJ,IAAIg0f,EAAWnhW,EAAOmhW,SAElBwwC,GADYxwC,EAAS11c,KAAKgtc,UACT0I,EAAS11c,KAAKsS,UAAUojc,EAAU,IACnDywC,EAAgBpwiB,KAAKwngB,qBAAqB7H,EAAS11c,KAAMkmf,EAAejjiB,YAC5E,IAAKghiB,EAAamC,mBAAmBD,EAAe4D,GAGhD,YADAh0iB,KAAKswiB,aAAa9xY,EAAOmhW,SAAU,GAGvCz3G,EAAaooJ,aAAa9xY,EAAOmhW,SAAU,GAE/Ch9P,EAAeulJ,EAAaomJ,iCAOpCJ,EAAa9yiB,UAAU84iB,+BAAiC,SAAUvxS,EAAcqxS,GAC5E,IAAI9rJ,EAAe,IAAIgmJ,EAAaluiB,KAAKwjgB,OACzCt7G,EAAa6mJ,2BAA2BpsS,GACxCulJ,EAAaimJ,kBAAmB,EAEhC,IADA,IAAImE,EAAsBtyiB,KAAKi2E,UAAU14E,MAAM+wiB,+BACxC3rS,IAAiBqxS,GAAqB9F,EAAamC,mBAAmB2D,EAAmBrxS,IAAe,CAC3G,IAAIqmQ,EAAgB,EAChB4nC,EAAY1oJ,EAAawjI,cAAc3iB,UAAU7gH,EAAav8Y,OAAQq9f,GACtExqW,EAASoyY,EAAU5viB,QAEvB,GADAgogB,EAAgB4nC,EAAU9+hB,OACrBrU,EAAkB+gK,GAAS,CAC5B,IAAI0zY,EAAalyiB,KAAKi2E,UAAUk8d,0BAA0B3zY,EAAQwqW,GAClE,GAAIkpC,aAAsBzyC,IAA4C,IAAzByyC,EAAWxyC,UAAiB,CACrE,IAAIzI,EAAYi7C,EAAWvyC,SAAS11c,KAChCkmf,EAAiBl5C,EAAU16b,UAAU21e,EAAWvyC,SAAU,GAC1DywC,EAAgBpwiB,KAAKwngB,qBAAqBvQ,EAAWk5C,EAAejjiB,YACnEghiB,EAAamC,mBAAmBD,EAAekC,KAChDtyiB,KAAKi2E,UAAU14E,MAAM0xiB,qBAAqBh4C,EAAWk5C,GACrDmC,EAAsBlC,IAIlC,GAAI5xY,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,YAAoBjigB,EAAkB+gK,EAAOohW,YAAa,CACtG,IAAI31c,EAAOu0G,EAAOohW,WAAW31c,KACzB21c,EAAaphW,EAAOohW,WACpBwyC,EAAmBnof,EAAKsS,UAAUqjc,EAAY,GAC9CyyC,EAAkBryiB,KAAKwngB,qBAAqBv9c,EAAMmof,EAAiBlliB,YACvE,IAAKghiB,EAAamC,mBAAmB2D,EAAmB3B,GAGpD,YADAryiB,KAAKswiB,aAAa9xY,EAAOohW,WAAY,GAGzC13G,EAAaooJ,aAAa9xY,EAAOohW,WAAY,QAG7C13G,EAAa4pJ,uBAEjBnvS,EAAeulJ,EAAaomJ,iCAMpCJ,EAAa9yiB,UAAU+4iB,uBAAyB,SAAUl+d,EAAWm+d,GACjE,IAAIzoiB,EAASsqE,EAAU06d,mBAAmB3wiB,KAAK0rhB,eAC/C,GAAI1rhB,KAAK2L,SAAWA,GAAUyoiB,EAAyB,CAEnD,GADqBp0iB,KAAKq0iB,kCAEtBr0iB,KAAK8wiB,+BAA+B76d,QAEnC,IAAKx4E,EAAkBw4E,EAAUi7d,0BAA0BlxiB,KAAK0rhB,cAAcz0B,YAAa,CAC5F,IAAIq9C,EAAiBr+d,EAAUi7d,0BAA0BlxiB,KAAK0rhB,cAAcz0B,WAC5Ej3f,KAAK0rhB,cAAgB4oB,EAAej9C,aAAa,GACjDr3f,KAAK2L,OAASsqE,EAAU06d,mBAAmB3wiB,KAAK0rhB,qBAIpD1rhB,KAAK0rhB,cAAgB1rhB,KAAK0rhB,cAAcz0B,UAAU4P,kBAAkB,GAAGxP,aAAa,GACpFr3f,KAAK2L,OAASA,EAElB3L,KAAK4yiB,mBAKT1E,EAAa9yiB,UAAUw3iB,gBAAkB,WACrC,IAAIN,EAAsBtyiB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM+wiB,+BACjD0F,EAAoBh0iB,KAAKsuiB,+BACzBgE,IAAwB0B,GACxBh0iB,KAAKk0iB,+BAA+B5B,EAAqB0B,GAE7Dh0iB,KAAK6uiB,wBAAuB,IAMhCX,EAAa9yiB,UAAUm5iB,6BAA+B,SAAUt+d,EAAWm+d,GACvE,IAAIvpC,EAAc50b,EAAUm4d,eAAepuiB,KAAKi3f,WAChD,GAAIj3f,KAAK2L,SAAWk/f,GAAeupC,EAAyB,CACnCp0iB,KAAKq0iB,kCAEtBr0iB,KAAK8wiB,+BAA+B76d,GAE9Bx4E,EAAkBw4E,EAAUi7d,0BAA0BlxiB,KAAKi3f,cACjEj3f,KAAK0rhB,cAAgBz1c,EAAUi7d,0BAA0BlxiB,KAAKi3f,WAAWj6e,WACzEhd,KAAK2L,OAASsqE,EAAUm4d,eAAepuiB,KAAKi3f,iBAIhDj3f,KAAK0rhB,cAAgB1rhB,KAAKi3f,UAAUj6e,WACpChd,KAAK2L,OAASsqE,EAAU06d,mBAAmB3wiB,KAAK0rhB,eAEpD,IAAI4mB,EAAsBtyiB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM+wiB,+BACjD0F,EAAoBh0iB,KAAKsuiB,+BACzBgE,IAAwB0B,GACxBh0iB,KAAKk0iB,+BAA+B5B,EAAqB0B,GAE7Dh0iB,KAAK6uiB,wBAAuB,IAMhCX,EAAa9yiB,UAAUo5iB,2BAA6B,SAAUv+d,EAAWw+d,GAGrE,IADA,IAAIC,EAAoB10iB,KAAK0rhB,cAAcz0B,UACpCy9C,EAAkB5tC,iBACrB4tC,EAAoBA,EAAkB5tC,gBAE1C9mgB,KAAK0rhB,cAAgBgpB,EAAkBr9C,aAAaq9C,EAAkBr9C,aAAa76f,OAAS,GAC5F,IAAIu4gB,EAAY/0gB,KAAK0rhB,cAAc1Z,eAAiB,EACpD,GAAIhygB,KAAK2L,SAAWopgB,GAAa0/B,EAAqB,CAElD,GADmBz0iB,KAAKq0iB,kCAEpBr0iB,KAAK20iB,kCAEJ,IAAKl3iB,EAAkBw4E,EAAUq7d,sBAAsBtxiB,KAAK0rhB,cAAcz0B,YAAa,CACxF,IAAIw4C,EAAex5d,EAAUq7d,sBAAsBtxiB,KAAK0rhB,cAAcz0B,WACtEj3f,KAAK0rhB,cAAgB+jB,EAAap4C,aAAao4C,EAAap4C,aAAa76f,OAAS,GAClFwD,KAAK2L,OAAS3L,KAAK0rhB,cAAc1Z,eAAiB,QAItDhygB,KAAK2L,OAASopgB,EAElB/0gB,KAAK4yiB,mBAKT1E,EAAa9yiB,UAAUwtH,OAAS,SAAU3yC,EAAWzpE,GACjD,IAAIyqf,EAAYj3f,KAAK0rhB,cAAcz0B,UAEnCj3f,KAAK40iB,wBAAwB3+d,GAAW,GAExCj2E,KAAK8xiB,uBACL,IAAIhC,OAAW50iB,EACXkyhB,EAAmBpthB,KAAK0rhB,cAAcz0B,UAC1C,GAAIA,EAAUsR,eAAiBtR,IAAcm2B,GAAoBn2B,EAAUuR,iBAAmB4kB,EAAiB5kB,iBAEtG/qgB,EAAkB2vhB,EAAiB5kB,iBAAoBvR,EAAUuR,eAAeH,WAAa+kB,EAAiB5kB,eAAeH,SAAY,CAC9I,IAAIA,EAAW+kB,EAAiB5kB,eAAeH,SAC/C,GAAIA,EAAShC,kCAAkCF,GAAgB,CAE3D,IAAIp+b,EAAOkO,EAAU4+d,qBAAqBxsC,EAAShC,uBAAwB+mB,EAAiB5kB,eAAgBh8f,GAAM,GAC9GsoiB,EAAgB7+d,EAAU8+d,iBAAiBhte,GAC/C/nE,KAAK6Y,YAAYi8hB,EAAcz9C,aAAay9C,EAAcz9C,aAAa76f,OAAS,IAAI,OAEnF,CACD,IAAIw4iB,EAAY3sC,EAASD,WAAW/B,uBACpC,GACQ2uC,aAAqB/tC,KACrB+tC,EAAY/+d,EAAUg/d,uBAAuBD,UAE5CA,aAAqB/tC,IAC1B+tC,aAAqB99C,IACrBl3f,KAAK6Y,YAAYm8hB,EAAU39C,aAAa29C,EAAU39C,aAAa76f,OAAS,IAAI,GAGpFsziB,EAAW75d,EAAUi/d,uBAAuBl1iB,KAAK2L,OAAQ3L,KAAK0rhB,mBAE7D,CACD,IAAKz0B,EAAUsR,eAAiBvogB,KAAK0rhB,cAAcz0B,UAAUsR,cAAe,CAEpExgc,EAAOkO,EAAU4+d,qBAAqB70iB,KAAK0rhB,cAAcz0B,UAAUuR,eAAeH,SAAUrogB,KAAK0rhB,cAAcz0B,UAAUuR,eAAgBxogB,KAAKwjgB,MAAMvtb,UAAUk/d,uBAAuB,GACrLL,EAAgB7+d,EAAU8+d,iBAAiBhte,GAC/C/nE,KAAK6Y,YAAYi8hB,EAAcz9C,aAAay9C,EAAcz9C,aAAa76f,OAAS,IAAI,QAGnF,GAAIy6f,EAAUsR,gBAAmB9qgB,EAAkBuC,KAAK0rhB,cAAcz0B,UAAUuR,iBAAmBvR,EAAUuR,eAAeH,SAAShC,yBAA2BpP,EAAUuR,eAAeH,SAASzB,qBACnM3P,EAAUuR,eAAeH,SAAShC,yBAA2BrmgB,KAAK0rhB,cAAcz0B,UAAUuR,eAAeH,SAAW,CAEhHtgc,EAAOkO,EAAUm/d,oBAAoBp1iB,KAAK0rhB,cAAcz0B,UAAUuR,eAAeH,SAAUrogB,KAAK0rhB,cAAcz0B,UAAUuR,eAAgBxogB,KAAKwjgB,MAAMvtb,UAAUk/d,uBAAuB,GACpLL,EAAgB7+d,EAAU8+d,iBAAiBhte,GAC/C/nE,KAAK6Y,YAAYi8hB,EAAcz9C,aAAay9C,EAAcz9C,aAAa76f,OAAS,IAAI,GAExFsziB,EAAW75d,EAAUi/d,uBAAuBl1iB,KAAK2L,OAAQ3L,KAAK0rhB,eAGlE,IAAIh/gB,EAAMupE,EAAUmhO,OAAO04P,GAC3B75d,EAAUo/d,yBAAyBvF,EAAU,IAAIj7f,GAAMroC,EAAME,GAAM1M,MAAM,IAK7EkuiB,EAAa9yiB,UAAUutH,SAAW,SAAU1yC,EAAWzpE,GAEnD,IAAImmgB,EAAgB3ygB,KAAK0rhB,cAAcz0B,UACtBj3f,KAAK2L,OACtB3L,KAAKs1iB,sBAAsBr/d,GAAW,GACtC,IAAIz5E,EAASwD,KAAKi2E,UAAUy4d,mBAAmB1uiB,KAAK0rhB,cAAcz0B,WAC9Dj3f,KAAK2L,OAASnP,IACdwD,KAAK2L,OAASnP,GAGlBwD,KAAKgwiB,mBACL,IAAIp9B,OAAW13gB,EAEf,GAAIy3gB,EAAcpK,eAAiBoK,IAAkB3ygB,KAAK0rhB,cAAcz0B,WAAa0b,EAAcnK,iBAAmBxogB,KAAK0rhB,cAAcz0B,UAAUuR,iBAAoB/qgB,EAAkBuC,KAAK0rhB,cAAcz0B,UAAUuR,iBAAmBmK,EAAcnK,eAAeH,WAAarogB,KAAK0rhB,cAAcz0B,UAAUuR,eAAeH,SAAW,CACtU,IAAIA,EAAWrogB,KAAK0rhB,cAAcz0B,UAAUuR,eAAeH,SAO3D,GALIsK,EAAcpK,eAAiBvogB,KAAK0rhB,cAAcz0B,UAAUsR,eAAiBoK,EAAcnK,eAAeC,WAAW73M,QAAU,GAAK+hN,EAAcnK,eAAeC,WAAW73M,QAAU+hN,EAAcnK,eAAeH,SAASp5R,WAAa0jS,EAAcnK,eAAeJ,WAAW/Q,aAAa76f,SAG9R6rgB,EAAWrogB,KAAK0rhB,cAAcz0B,UAAUuR,eAAeJ,WAAW/Q,aAAar3f,KAAK0rhB,cAAcz0B,UAAUuR,eAAeJ,WAAW/Q,aAAa76f,OAAS,IAE5J6rgB,EAAS7B,8BAA8BL,GAAgB,CAEvD,IAAIp+b,EAAO/nE,KAAKi2E,UAAUm/d,oBAAoB/sC,EAAS7B,mBAAoBxmgB,KAAK0rhB,cAAcz0B,UAAUuR,eAAgBh8f,GAAM,GAC9HxM,KAAK6Y,YAAY7Y,KAAKi2E,UAAUs/d,kBAAkBxte,GAAMsvb,aAAa,IAAI,OAExE,CACD,IAAI6jB,EAAYl7gB,KAAKi2E,UAAU45d,qBAAqBxnC,EAASD,YAC7D,GACQ8S,aAAqBjU,KACrBiU,EAAYl7gB,KAAKi2E,UAAUu/d,yBAAyBt6B,UAEnDA,aAAqBjU,IAC1BiU,aAAqBhkB,IACrBl3f,KAAK6Y,YAAYqigB,EAAU7jB,aAAa,IAAI,GAGpDub,EAAW38b,EAAUi/d,uBAAuBl1iB,KAAK2L,OAAQ3L,KAAK0rhB,mBAE7D,CACD,IAAK/Y,EAAcpK,eAAiBvogB,KAAK0rhB,cAAcz0B,UAAUsR,cAAe,CAExExgc,EAAO/nE,KAAKi2E,UAAUm/d,oBAAoBp1iB,KAAK0rhB,cAAcz0B,UAAUuR,eAAeH,SAAUrogB,KAAK0rhB,cAAcz0B,UAAUuR,eAAgBxogB,KAAKwjgB,MAAMvtb,UAAUk/d,uBAAuB,GAC7Ln1iB,KAAK6Y,YAAY7Y,KAAKi2E,UAAUs/d,kBAAkBxte,GAAMsvb,aAAa,IAAI,QAGxE,GAAIsb,EAAcpK,gBAAmB9qgB,EAAkBuC,KAAK0rhB,cAAcz0B,UAAUuR,iBAAmBmK,EAAcnK,eAAeH,SAAS7B,qBAAuBmM,EAAcnK,eAAeH,SAASvB,iBACxM6L,EAAcnK,eAAeH,SAAS7B,qBAAuBxmgB,KAAK0rhB,cAAcz0B,UAAUuR,eAAeH,SAAW,CAEnHtgc,EAAOkO,EAAUm/d,oBAAoBp1iB,KAAK0rhB,cAAcz0B,UAAUuR,eAAeH,SAAUrogB,KAAK0rhB,cAAcz0B,UAAUuR,eAAgBxogB,KAAKwjgB,MAAMvtb,UAAUk/d,uBAAuB,GACxLn1iB,KAAK6Y,YAAYo9D,EAAUs/d,kBAAkBxte,GAAMsvb,aAAa,IAAI,GAExEub,EAAW38b,EAAUi/d,uBAAuBl1iB,KAAK2L,OAAQ3L,KAAK0rhB,eAGlE,IAAIh/gB,EAAM1M,KAAKi2E,UAAUmhO,OAAOw7N,GAChC5ygB,KAAKi2E,UAAUo/d,yBAAyBziC,EAAU,IAAI/9d,GAAMroC,EAAME,GAAM1M,MAAM,IAMlFkuiB,EAAa9yiB,UAAUw5iB,wBAA0B,SAAU3+d,EAAWw/d,GAC9Dz1iB,KAAK46B,SAAS7tB,EAAI/M,KAAKwuf,OAAOmsB,iBAAiBlugB,QAC/CzM,KAAK2L,OAAS3L,KAAK2L,OAAS,GAEhC,IAAI6ygB,EAAcvoc,EAAU+pd,sBAAsBhgiB,KAAK0rhB,cAAe1rhB,KAAK2L,OAAQ8piB,GAC/EloN,EAAet3Q,EAAUy/d,wBAAwBl3B,GACjD3T,EAAc50b,EAAUm4d,eAAepuiB,KAAK0rhB,cAAcz0B,WAC9D,GAAIx5f,EAAkB8vV,IAAiBvtV,KAAK2L,OAASk/f,EAAa,CAC9D,IAAI/4f,EAAQ,EAER0sJ,GADAoyY,EAAY5wiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQmG,IACnC9Q,QACvB8Q,EAAQ8+hB,EAAU9+hB,MACd0sJ,aAAkBoqW,IAAkC,OAAhBpqW,EAAOxvI,OAC3ChvB,KAAK2L,OAASk/f,QAGjB,IAAKptgB,EAAkB8vV,GAAe,CACvC,IAAIy7K,EAAgB/yb,EAAU0/d,iBAAiBpoN,GAC/CvtV,KAAK0rhB,cAAgBn+L,EAAatjS,KAClCjqD,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUgxR,EAAcy7K,GACzDA,EAAgB,EAChB,IAAI4nC,EACApyY,GADAoyY,EAAY5wiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQq9f,IACnChogB,QAEvB,GADAgogB,EAAgB4nC,EAAU9+hB,MACtB0sJ,aAAkBihW,GAAiB,CAEnC,IAAIm2C,EAAa3/d,EAAU27d,wBAAwBpzY,GAC9C/gK,EAAkBm4iB,KACnBp3Y,EAASo3Y,EACT51iB,KAAK0rhB,cAAgBltX,EAAOv0G,KAC5BjqD,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUiiG,EAAQA,EAAOhiK,QACtDgiK,aAAkBihW,IAClBz/f,KAAK2L,WAKrB3L,KAAK6uiB,wBAAuB,IAMhCX,EAAa9yiB,UAAUi5iB,gCAAkC,WACrD,SAAKr0iB,KAAKi2E,UAAU14E,MAAM05f,UAAUsR,gBAAiBvogB,KAAKi3f,UAAUsR,eAC5DvogB,KAAKi2E,UAAU14E,MAAM05f,UAAUuR,iBAAmBxogB,KAAKi3f,UAAUuR,iBAC9DxogB,KAAKi2E,UAAU8ic,eAAe/4gB,KAAKi2E,UAAU14E,MAAM05f,UAAUuR,eAAgBxogB,KAAKi2E,UAAU14E,MAAOyC,QASlHkuiB,EAAa9yiB,UAAUy6iB,sBAAwB,SAAUnviB,EAAMssiB,GAI3D,IAAI8C,EAAiB,EACjB/gC,EAAY/0gB,KAAK0rhB,cAAc1Z,eASnC,GARIhygB,KAAKi2E,UAAU2uc,qBAAqB5khB,KAAK0rhB,iBACrC1rhB,KAAK0rhB,cAActxgB,SAAS,aAAc+uf,KAC1C2sC,EAAiB,GAEjB91iB,KAAK0rhB,cAActxgB,SAAS,aAAc+uf,KAC1C2sC,EAAiB,IAGrB91iB,KAAK2L,OAASmqiB,IAAmB/gC,GAAa/0gB,KAAK2L,SAAWopgB,EAAY,EAC1E,GAAI/0gB,KAAK2L,SAAWopgB,GAAsB,IAATrugB,EAC7B1G,KAAKiviB,qBAAqBjviB,KAAK0rhB,cAAe3W,EAAY,OAEzD,CACD,IAAIwN,EAAgBvihB,KAAKi2E,UAAUq7d,sBAAsBtxiB,KAAK0rhB,cAAcz0B,WAC5E,GAAIx5f,EAAkB8khB,GAClB,OAIJ,GAFAvihB,KAAK0rhB,cAAgBnJ,EAAclrB,aAAa,GAChDr3f,KAAK2L,OAAS3L,KAAKi2E,UAAU06d,mBAAmB3wiB,KAAK0rhB,eACxC,IAAThlhB,EAAY,CAEG1G,KAAKq0iB,kCAEhBr0iB,KAAK20iB,6BAGL30iB,KAAK61iB,sBAAsBnviB,EAAMssiB,QAK5C,CACD,IAAIhqC,EAAgB,EAEhB4nC,EAAY5wiB,KAAK0rhB,cAAc3iB,UAAU/ogB,KAAK2L,OAAQq9f,GACtDxqW,EAASoyY,EAAU5viB,QACvBgogB,EAAgB4nC,EAAU9+hB,MAC1B9R,KAAK6yiB,kBAAkBr0Y,EAAQwqW,EAAetigB,GAAM,GAJjC,EAIsD1G,KAAMgziB,GAEnF,GAAa,IAATtsiB,EAAY,CACZ,IAAI4riB,EAAsBtyiB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM+wiB,+BACjD0F,EAAoBh0iB,KAAKsuiB,+BACzBgE,IAAwB0B,GACxBh0iB,KAAK+ziB,8BAA8BzB,EAAqB0B,GAGhEh0iB,KAAK6uiB,wBAAuB,IAMhCX,EAAa9yiB,UAAUu5iB,2BAA6B,WAChD,IAAI19C,EAAYj3f,KAAK0rhB,cAAcz0B,UAC/BsrB,EAAiBtrB,EAAuB,cAAIj3f,KAAKi2E,UAAU8/d,qBAAqB9+C,EAAUuR,gBAC1FxogB,KAAKi2E,UAAUq7d,sBAAsBr6C,GACrCx5f,EAAkB8khB,KAGtBvihB,KAAK0rhB,cAAgBnJ,EAAclrB,aAAakrB,EAAclrB,aAAa76f,OAAS,GACpFwD,KAAK2L,OAAS3L,KAAK0rhB,cAAc1Z,eAAiB,IAKtDk8B,EAAa9yiB,UAAUg5iB,wBAA0B,SAAUn+d,GACvD,IAAI40b,EAAc50b,EAAUm4d,eAAepuiB,KAAK0rhB,cAAcz0B,WAE9D,GAAIj3f,KAAK2L,SAAWk/f,GAAgBptgB,EAAkBw4E,EAAUi7d,0BAA0BlxiB,KAAK0rhB,cAAcz0B,YAMzGj3f,KAAK2L,OAASsqE,EAAUm4d,eAAepuiB,KAAK0rhB,cAAcz0B,eAN4D,CACtH,IAAI85C,EAAoB96d,EAAUi7d,0BAA0BlxiB,KAAK0rhB,cAAcz0B,WAC/Ej3f,KAAK0rhB,cAAgBqlB,EAAkB15C,aAAa,GACpDr3f,KAAK2L,OAASsqE,EAAUm4d,eAAepuiB,KAAK0rhB,cAAcz0B,WAK9Dj3f,KAAK6uiB,wBAAuB,IAMhCX,EAAa9yiB,UAAUq6iB,mBAAqB,SAAUx/d,EAAWzpE,GAC7D,IAAIm2P,EAAe3iQ,KAAKsuiB,+BACpB9vB,EAAcvoc,EAAUi/d,uBAAuBl1iB,KAAK2L,OAAQ3L,KAAK0rhB,eAErE1rhB,KAAK40iB,wBAAwB3+d,GAAW,GACpCj2E,KAAK0rhB,cAAcz0B,UAAUsR,cAC7BvogB,KAAKg2iB,cAAc//d,GAGnBj2E,KAAKiyiB,eAET,IAAInC,EAAW75d,EAAUi/d,uBAAuBl1iB,KAAK2L,OAAQ3L,KAAK0rhB,eAC9DuqB,EAAYhge,EAAU+gO,QAAQ84P,GAGlC,GAFgB75d,EAAUi9M,SAAS48Q,GAAU,GAE7BmG,GAAazpiB,GAAQgygB,IAAgBsxB,EAAU,CAC3D,IAAIj0f,EAAQo6B,EAAUmhO,OAAO04P,GACzBn8gB,EAAQ,IAAIkhB,GAAMroC,EAAMqvC,GAC5Bo6B,EAAUo/d,yBAAyBvF,EAAUn8gB,EAAO3zB,MAAM,GAG9D,IAAIg0iB,EAAoBh0iB,KAAKsuiB,+BAC7BtuiB,KAAKk0iB,+BAA+BvxS,EAAcqxS,IAKtD9F,EAAa9yiB,UAAUk6iB,sBAAwB,SAAUr/d,EAAW4nc,GAC5D79gB,KAAK46B,SAAS7tB,EAAI/M,KAAKwuf,OAAOmsB,iBAAiBlugB,QAC/CzM,KAAK2L,OAAS3L,KAAK2L,OAAS,GAEhC,IAAI6ygB,EAAcvoc,EAAUi/d,uBAAuBl1iB,KAAK2L,OAAQ3L,KAAK0rhB,eACjEn+L,EAAet3Q,EAAUy/d,wBAAwBl3B,GACrD,GAAI/ghB,EAAkB8vV,IAAiBvtV,KAAK2L,SAAWsqE,EAAU06d,mBAAmB3wiB,KAAK0rhB,eACrF1rhB,KAAK2L,OAASsqE,EAAUy4d,mBAAmB1uiB,KAAKi3f,WAAa,EAC7Dj3f,KAAK6uiB,wBAAuB,QAE3B,IAAKpxiB,EAAkB8vV,GAAe,CACvC,IAAIqkL,EAAc4M,EAAYpkgB,SAASokgB,EAAYpkgB,SAAS5d,OAAS,GACjEsV,EAAQ,EAGZ,GAFAA,GAAS8/f,aAAuBhJ,GAAiBgJ,EAAYp1gB,OAAS,EACtEwD,KAAK0rhB,cAAgB9Z,EAAY3nd,KAC7Bn4C,IAAU8/f,EAAYp1gB,QACnBiB,EAAkBm0gB,EAAYniI,WAAax5T,EAAU4uc,oBAAoB7khB,KAAK0rhB,eAAgB,CACjG,IAAI9uf,EAAWq5C,EAAUo4d,cAAcruiB,KAAK0rhB,eAC5C1rhB,KAAK2L,OAASkygB,EAAiBjhf,EAAW,EAAIA,MAE7C,CAED,IADA,IAAI4hI,EAASozW,GACLn0gB,EAAkB+gK,IAAWA,EAAOhiK,SAAWsV,GAAS0sJ,EAAOixO,oBAAoBgwH,IAAiB,CACxG,IAAIyyC,EAAaj8d,EAAUy6d,oBAAoBlyY,EAAOixO,UAKtD,GAJIjxO,IAAW0zY,IACX1zY,EAAS0zY,EACTpgiB,EAAQ,GAER0sJ,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,YACxCjigB,EAAkB+gK,EAAOmhW,UAAW,CACxC,IAAIC,EAAaphW,EACb/gK,EAAkBmigB,EAAW2S,gBAC7B/zW,EAASohW,EAAWD,UAGpBnhW,EAASohW,EAAW2S,eACpBvygB,KAAK0rhB,cAAgBltX,EAAOv0G,KACxBjqD,KAAK0rhB,gBAAkB9rB,EAAWD,SAAS11c,MACvCgsB,EAAU+7d,eAAehyiB,KAAK0rhB,cAAcz0B,UAAWz4V,EAAQohW,EAAWD,YAC9EnhW,EAASohW,EAAWD,WAG5B3/f,KAAK0rhB,cAAgBltX,EAAOv0G,KAE5Bu0G,aAAkBihW,KAClB3tf,EAAQ,GAGZA,IAAU0sJ,EAAOhiK,QAAUiB,EAAkB+gK,EAAOixO,WACpD39X,KAEC+rgB,GAAkBr/W,aAAkB2zW,IAA8B,OAAhB3zW,EAAOxvI,MAC1Dld,IAEJ9R,KAAK2L,OAAS3L,KAAK0rhB,cAAcnvd,UAAUiiG,EAAQ1sJ,GAEvD9R,KAAK6uiB,uBAAuBhxB,KAOpCqwB,EAAa9yiB,UAAUyihB,eAAiB,SAAUrxgB,GAC9C,IAAIypE,EAAYj2E,KAAKi2E,UACjBiyU,EAAe,IAAIgmJ,EAAaluiB,KAAKwjgB,OACzCt7G,EAAa4mJ,oBAAoB9uiB,MACjC,IAAI2iQ,EAAe3iQ,KAAKsuiB,+BACNr4d,EAAUi/d,uBAAuBl1iB,KAAK2L,OAAQ3L,KAAK0rhB,eACjD1rhB,KAAK2L,OAEzB3L,KAAKs1iB,sBAAsBr/d,GAAW,GACtC,IAAIige,GAAmBhuJ,EAAaknJ,iBAAiBpviB,MACrDkoZ,EAAa4mJ,oBAAoB9uiB,MAC7BA,KAAK0rhB,cAAcz0B,UAAUsR,cAC7BvogB,KAAKm2iB,gBAAgBlge,IAGrBj2E,KAAKgwiB,mBACLhwiB,KAAK0tc,eAET,IAAIklE,EAAW38b,EAAUi/d,uBAAuBl1iB,KAAK2L,OAAQ3L,KAAK0rhB,eAC9DuqB,EAAYhge,EAAU+gO,QAAQ47N,GAC9BrlL,EAAet3Q,EAAUy/d,wBAAwB9iC,GAEjDwjC,EAAiB34iB,EAAkB8vV,GAAgBt3Q,EAAUi9M,SAAS0/O,GAAU,GAAQ38b,EAAUoge,gBAAgBzjC,EAAUrlL,EAAc,GAAK0oN,EAEnJ,GAAIA,EAAYzpiB,GAAS4piB,EAAiB,EAAI5piB,EAAOypiB,EAAY,CAC7D,IAAIx1G,EAAQxqX,EAAUmhO,OAAOw7N,GACzBj/e,EAAQ,IAAIkhB,GAAMroC,EAAMi0b,GAC5BxqX,EAAUo/d,yBAAyBziC,EAAUj/e,EAAO3zB,MAAM,GAC9Ci2E,EAAUi9M,SAAS0/O,GAAU,GAC7BpmgB,EAAOypiB,GACfj2iB,KAAKs1iB,sBAAsBr/d,GAAW,QAGrCige,GAAmBl2iB,KAAK0rhB,cAAcz0B,UAAUsR,eAClDvogB,KAAK0rhB,gBAAkB1rhB,KAAKwjgB,MAAMvtb,UAAU14E,MAAMmuhB,cACrD1rhB,KAAK8uiB,oBAAoB5mJ,GAEnBguJ,GACNl2iB,KAAKs1iB,sBAAsBr/d,GAAW,GAG1C,IAAI+9d,EAAoBh0iB,KAAKsuiB,+BAC7BtuiB,KAAK+ziB,8BAA8BpxS,EAAcqxS,IAMrD9F,EAAa9yiB,UAAU46iB,cAAgB,SAAU//d,GAC7C,IAAIqge,GAAoB,EACpBr3hB,EAAMjf,KAAKwjgB,MAAMvtb,UAAUh3D,IAC3Bs3hB,GAAuBv2iB,KAAKwjgB,MAAMvtb,UAAU2hK,QAEhD,GADA0+T,EAAoBr3hB,EAAIg4e,UAAUsR,cACX,CACnB,IAAIiE,EAAYxsgB,KAAK0rhB,cAAcz0B,UAAUuR,eACzCiE,EAAUxtf,EAAIg4e,UAAUuR,eACxBguC,EAAgBvge,EAAUo7d,mBAAmB5kC,EAASD,GAE1D,GADA8pC,EAAoBE,EAAcpuC,WAAWjkgB,SAASqogB,GAC/B,CACnBC,EAAUx2b,EAAUwge,gBAAgBhqC,EAAS+pC,GAC7ChqC,EAAYv2b,EAAUwge,gBAAgBjqC,EAAWgqC,GAEjD,IAAIE,EAAoBzge,EAAU0ge,aAAaH,EAAex2iB,KAAK0rhB,cAAcz0B,UAAUuR,gBACvFouC,EAA0B3ge,EAAU8ic,eAAey9B,EAAex2iB,KAAMif,GAK5E,GAJK23hB,IAEDA,EAA0B52iB,KAAK0rhB,cAAcz0B,YAAchhb,EAAUs/d,kBAAkBiB,IAAkBx2iB,KAAK62iB,qBAE7GH,GAAqBE,IAClBF,KAAuBj5iB,EAAkB+ugB,EAAUnE,SAAShC,wBAAyB,CAEzF,IAAI3gc,EAAM8mc,EAAUnE,SAAShC,uBAEzBt+b,EAAOkO,EAAU4+d,qBAAqBnve,EAAK8we,EAAex2iB,KAAKwjgB,MAAMvtb,UAAUk/d,uBAAuB,GACtGpE,EAAoB96d,EAAU8+d,iBAAiBhte,GAEnD,YADA/nE,KAAK6Y,YAAYk4hB,EAAkB15C,aAAa,IAAI,GAGnD,GAAIq/C,GAAqBE,GACvBn5iB,EAAkB+ugB,EAAUnE,SAAShC,0BAA4BqwC,EACpE,GAAIH,EAAqB,CAErB/pC,EAAYA,EAAUnE,SAAShR,aAAa,GACxC05C,EAAoB96d,EAAUs/d,kBAAkB/oC,GACpDxsgB,KAAK6Y,YAAYk4hB,EAAkB15C,aAAa,IAAI,OAEnD,CAEDmV,EAAYA,EAAUnE,SAAShR,aAAamV,EAAUnE,SAAShR,aAAa76f,OAAS,GACjFu0iB,EAAoB96d,EAAU8+d,iBAAiBvoC,GACnDxsgB,KAAK6Y,YAAYk4hB,EAAkB15C,aAAa,IAAI,KAKpE,IAAKi/C,EAAmB,CAEhBvue,EAAOkO,EAAU6ge,iBAAiB92iB,KAAK0rhB,cAAcz0B,UAAUuR,gBACnE,GAAI+tC,EAAqB,CAErBxue,EAAOA,EAAKsgc,SAAShR,aAAa,GAC9B05C,EAAoB96d,EAAUs/d,kBAAkBxte,GACpD/nE,KAAK6Y,YAAYk4hB,EAAkB15C,aAAa,IAAI,OAEnD,CAEDtvb,EAAOA,EAAKsgc,SAAShR,aAAatvb,EAAKsgc,SAAShR,aAAa76f,OAAS,GAClEu0iB,EAAoB96d,EAAU8+d,iBAAiBhte,GACnD/nE,KAAK6Y,YAAYk4hB,EAAkB15C,aAAa,IAAI,IAI5Dr3f,KAAKiyiB,gBAMT/D,EAAa9yiB,UAAU+6iB,gBAAkB,SAAUlge,GAC/C,IAAIqge,GAAoB,EACpBjG,EAAqBrwiB,KAAKwjgB,MAAMvtb,UAAU2hK,SAAW53O,KAAKwjgB,MAAMvtb,UAAU8ge,UAE9E,GADAT,EAAoBt2iB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUsR,cAClC,CACnB,IAAIiE,EAAYxsgB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eACjDiE,EAAUzsgB,KAAK0rhB,cAAcz0B,UAAUuR,eACvCguC,EAAgBvge,EAAUo7d,mBAAmB7kC,EAAWC,GAE5D,GADA6pC,EAAoBE,EAAcpuC,WAAWjkgB,SAASsogB,GAC/B,CACnBD,EAAYv2b,EAAUwge,gBAAgBjqC,EAAWgqC,GACjD/pC,EAAUx2b,EAAUwge,gBAAgBhqC,EAAS+pC,GAE7C,IAAIE,EAAoBzge,EAAU0ge,aAAaH,EAAex2iB,KAAK0rhB,cAAcz0B,UAAUuR,gBACvFouC,EAA0B3ge,EAAU8ic,eAAey9B,EAAex2iB,KAAKwjgB,MAAMvtb,UAAU14E,MAAOyC,MAClG,IAAK02iB,GAAqBE,IAClBF,KAAuBj5iB,EAAkBgvgB,EAAQpE,SAAS7B,oBAAqB,CAEnF,IAAI9gc,EAAM+mc,EAAQpE,SAAS7B,mBAEvBz+b,EAAOkO,EAAUm/d,oBAAoB1ve,EAAK8we,EAAex2iB,KAAKwjgB,MAAMvtb,UAAUk/d,uBAAuB,GACrGL,EAAgB7+d,EAAU8+d,iBAAiBhte,GAE/C,YADA/nE,KAAK6Y,YAAYi8hB,EAAcz9C,aAAay9C,EAAcz9C,aAAa76f,OAAS,IAAI,GAGnF,GAAIk6iB,GAAqBE,GACvBn5iB,EAAkBgvgB,EAAQpE,SAAS7B,sBAAwBkwC,EAC9D,GAAIrG,EAAoB,CAEpB5jC,EAAUA,EAAQpE,SAAShR,aAAaoV,EAAQpE,SAAShR,aAAa76f,OAAS,GAC3Es4iB,EAAgB7+d,EAAU8+d,iBAAiBtoC,GAC/CzsgB,KAAK6Y,YAAYi8hB,EAAcz9C,aAAay9C,EAAcz9C,aAAa76f,OAAS,IAAI,OAEnF,CAEDiwgB,EAAUA,EAAQpE,SAAShR,aAAa,GACpCy9C,EAAgB7+d,EAAUs/d,kBAAkB9oC,GAChDzsgB,KAAK6Y,YAAYi8hB,EAAcz9C,aAAay9C,EAAcz9C,aAAa76f,OAAS,IAAI,KAKpG,IAAK85iB,EAAmB,CAEhBvue,EAAOkO,EAAU6ge,iBAAiB92iB,KAAK0rhB,cAAcz0B,UAAUuR,gBACnE,GAAI6nC,EAAoB,CAEpBtoe,EAAOA,EAAKsgc,SAAShR,aAAatvb,EAAKsgc,SAAShR,aAAa76f,OAAS,GAClEs4iB,EAAgB7+d,EAAU8+d,iBAAiBhte,GAC/C/nE,KAAK6Y,YAAYi8hB,EAAcz9C,aAAay9C,EAAcz9C,aAAa76f,OAAS,IAAI,QAEnF,GAAIurE,EAAKsgc,SAAS7B,mBAAoB,CAEvCz+b,EAAOA,EAAKsgc,SAAS7B,mBAAmBnP,aAAa,GACjDy9C,EAAgB7+d,EAAUs/d,kBAAkBxte,GAChD/nE,KAAK6Y,YAAYi8hB,EAAcz9C,aAAay9C,EAAcz9C,aAAa76f,OAAS,IAAI,IAI5FwD,KAAK0tc,eAKTwgG,EAAa9yiB,UAAUiX,QAAU,WAC7BrS,KAAK2L,YAASzQ,EACd8E,KAAKmuiB,sBAAmBjziB,EACnBuC,EAAkBuC,KAAK46B,WACxB56B,KAAK46B,SAASvoB,UAElBrS,KAAK46B,cAAW1/B,EAChB8E,KAAK0rhB,mBAAgBxwhB,EACrB8E,KAAKwjgB,WAAQtogB,EACb8E,KAAKwuf,YAAStzf,GAEXgziB,KAMP8I,GAAqC,WACrC,SAASA,EAAoBxqiB,EAAMwJ,GAC/BhW,KAAKkigB,OAAS,EACdligB,KAAKi3iB,QAAU,EACfj3iB,KAAKkigB,OAAS11f,EACdxM,KAAKi3iB,QAAUjhiB,EAyCnB,OAvCA1X,OAAOuJ,eAAemviB,EAAoB57iB,UAAW,QAIjDsM,IAAK,WACD,OAAO1H,KAAKkigB,QAKhB76f,IAAK,SAAUtK,GACXiD,KAAKkigB,OAASnlgB,GAElB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemviB,EAAoB57iB,UAAW,SAIjDsM,IAAK,WACD,OAAO1H,KAAKi3iB,SAKhB5viB,IAAK,SAAUtK,GACXiD,KAAKi3iB,QAAUl6iB,GAEnB4K,YAAY,EACZC,cAAc,IAKlBoviB,EAAoB57iB,UAAUiX,QAAU,WACpCrS,KAAKi3iB,aAAU/7iB,EACf8E,KAAKkigB,YAAShngB,GAEX87iB,KAMPvtI,GAA2B,WAC3B,SAASA,EAAUytI,EAAejhe,GAC9Bj2E,KAAKm3iB,aAAe,GACpBn3iB,KAAKo3iB,SAAW,GAChBp3iB,KAAKq3iB,gBAAiB,EACtB,IAAInpB,EAAYj4c,EAAUk4c,aAAa+oB,GAEL,cADlBhpB,EAAUt4gB,cACZyO,UAAU,EAAG,IACvBrkB,KAAKs3iB,iBAAiBppB,EAAU7pgB,UAAU,GAAGpU,OAAQgmE,GAiH7D,OA9GA33E,OAAOuJ,eAAe4ha,EAAUrua,UAAW,kBAMvCsM,IAAK,WACD,OAAO1H,KAAKm3iB,cAEhBxviB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4ha,EAAUrua,UAAW,kBAMvCsM,IAAK,WACD,OAAO1H,KAAKo3iB,UAEhBzviB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4ha,EAAUrua,UAAW,YAMvCsM,IAAK,WACD,OAAO1H,KAAKu3iB,cAEhB5viB,YAAY,EACZC,cAAc,IAOlB6ha,EAAUrua,UAAUk8iB,iBAAmB,SAAUv6iB,EAAOk5E,GAGpD,IAAK,IAFD6oL,EAAQ/hQ,EAAMG,MAAM,KACpBs6iB,GAAa,EACRt7iB,EAAI,EAAGA,EAAI4iQ,EAAMtiQ,OAAQN,IAAK,CACnC,IAAIutB,EAAOq1O,EAAM5iQ,GACbutB,EAAKjtB,OAAS,IAGL,QAATitB,GAA2B,QAATA,EAClB+thB,GAAa,EAEC,QAAT/thB,EACLzpB,KAAKq3iB,gBAAiB,GAGtB5thB,EAAOzpB,KAAKy3iB,gBAAgBhuhB,EAAkB,MAAZA,EAAK,GAAc,SAAOvuB,GACxDs8iB,GACAx3iB,KAAKo3iB,SAAW3thB,EAChB+thB,GAAa,GAGbx3iB,KAAKm3iB,aAAe1thB,IAIhCzpB,KAAK03iB,eAETjuI,EAAUrua,UAAUq8iB,gBAAkB,SAAU16iB,EAAO46iB,GACnD56iB,EAAQA,EAAMsnB,UAAU,GACxB,IAAI0B,EAAW4xhB,EAAU56iB,EAAMwB,QAAQo5iB,IAAY,EAInD,OAHI5xhB,EAAW,IACXA,EAAWhpB,EAAMP,QAEdO,EAAMsnB,UAAU,EAAG0B,GAAU9V,QAExCw5Z,EAAUrua,UAAUs8iB,YAAc,WAE1Bj6iB,EAAkBuC,KAAKm3iB,eAAiBn3iB,KAAKm3iB,aAAa36iB,OAAS,EACnEwD,KAAKu3iB,aAAe,qBAIpBv3iB,KAAKm3iB,aAAa9yhB,UAAU,EAAG,GAC/BrkB,KAAKm3iB,aAAe,UAAYn3iB,KAAK43iB,eAEP,MAAzB53iB,KAAKm3iB,aAAa,KACvBn3iB,KAAKm3iB,aAAe,UAAYn3iB,KAAK43iB,gBAGC,YAAtC53iB,KAAKm3iB,aAAa9yhB,UAAU,EAAG,IACU,aAAtCrkB,KAAKm3iB,aAAa9yhB,UAAU,EAAG,GAClCrkB,KAAKu3iB,aAAe,UAEuB,YAAtCv3iB,KAAKm3iB,aAAa9yhB,UAAU,EAAG,GACpCrkB,KAAKu3iB,aAAe,QAGpBv3iB,KAAKu3iB,aAAe,SAM5B9tI,EAAUrua,UAAUiX,QAAU,WAC1BrS,KAAKm3iB,kBAAej8iB,EACpB8E,KAAKo3iB,cAAWl8iB,EAChB8E,KAAKu3iB,kBAAer8iB,EACpB8E,KAAKq3iB,oBAAiBn8iB,GAEnBuua,KAMP3tJ,GAA6B,WAK7B,SAASA,EAAY+7R,GAIjB73iB,KAAKgW,MAAQ,EAIbhW,KAAK+V,OAAS,EACd/V,KAAKgW,MAAQ6hiB,EAAe7hiB,MAC5BhW,KAAK+V,OAAS8hiB,EAAe9hiB,OAUjC,OAJA+lQ,EAAY1gR,UAAUiX,QAAU,WAC5BrS,KAAKgW,WAAQ9a,EACb8E,KAAK+V,YAAS7a,GAEX4gR,KCpsEP07E,GAA2B,WAI3B,SAASA,EAAUsgN,GACf,IAAI/3iB,EAAQC,KAIZA,KAAKm1iB,sBAAwB,EAI7Bn1iB,KAAK+3iB,iBAAkB,EAIvB/3iB,KAAKo7hB,iBAAkB,EACvBp7hB,KAAKg4iB,yBAAsB98iB,EAI3B8E,KAAKq3gB,WAAQn8gB,EAKb8E,KAAKgniB,sBAAuB,EAI5BhniB,KAAKi4iB,qBAAsB,EAC3Bj4iB,KAAKk4iB,oBAAqB,EAI1Bl4iB,KAAKsyhB,qBAAkBp3hB,EAKvB8E,KAAKk5hB,UAAY,WACbn5hB,EAAMs3gB,MAAM3ygB,MAAMosC,QAAU,QAEhC9wC,KAAKwjgB,MAAQs0C,EACb93iB,KAAKwuf,OAASxuf,KAAKwjgB,MAAMhV,OACzBxuf,KAAKzC,MAAQ,IAAI2wiB,GAAaluiB,KAAKwjgB,OACnCxjgB,KAAKif,IAAM,IAAIivhB,GAAaluiB,KAAKwjgB,OACjCxjgB,KAAKsyhB,gBAAkB,IAAI/vS,GAC3BviP,KAAKm4iB,kBAAoB,IAAI/R,GAAyBpmiB,MACtDA,KAAKo4iB,kBAAoB,IAAI/Q,GAAyBrniB,KAAMA,KAAKwuf,QACjExuf,KAAKungB,gBAAkB,IAAI+hC,GAAuBtpiB,MAClDA,KAAKq4iB,YAAc,IAAItN,GAAmB/qiB,MAC1CA,KAAKs4iB,aAAe,IAAI3N,GAAoB3qiB,MAC5CA,KAAKu4iB,cAAgB,IAAIpO,GAAqBnqiB,MAC9CA,KAAKw4iB,oBAAsB,IAAIlN,GAAqBtriB,MA0uNxD,OAxuNA1B,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,cAIvCsM,IAAK,WAID,OAHIjK,EAAkBuC,KAAKy4iB,gBACvBz4iB,KAAKy4iB,aAAe,IAAI9M,IAErB3riB,KAAKy4iB,cAEhB9wiB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,SAMvCsM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKwjgB,SAAW/lgB,EAAkBuC,KAAKwuf,QAI1D,OAHI/wf,EAAkBuC,KAAK04iB,iBACvB14iB,KAAK04iB,cAAgB14iB,KAAKwjgB,MAAMu7B,eAE7B/+hB,KAAK04iB,eAOpBrxiB,IAAK,SAAUtK,GACXiD,KAAK04iB,cAAgB37iB,GAEzB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,mBAOvCsM,IAAK,WACD,OAAO1H,KAAKm4iB,mBAEhBxwiB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,mBAMvCsM,IAAK,WACD,OAAO1H,KAAKo4iB,mBAEhBzwiB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,iBAMvCsM,IAAK,WACD,OAAO1H,KAAKungB,iBAEhB5/f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,eAMvCsM,IAAK,WACD,OAAO1H,KAAKu4iB,eAEhB5wiB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,cAMvCsM,IAAK,WACD,OAAO1H,KAAKs4iB,cAEhB3wiB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,aAMvCsM,IAAK,WACD,OAAO1H,KAAKq4iB,aAEhB1wiB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,eAMvCsM,IAAK,WACD,OAAO1H,KAAKw4iB,qBAEhB7wiB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,OAKvCsM,IAAK,WACD,OAAO1H,KAAK24iB,aAMhBtxiB,IAAK,SAAUtK,GACXiD,KAAK24iB,YAAc57iB,GAEvB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,aAKvCsM,IAAK,WACD,OAAK1H,KAAKwjgB,MAAM3U,kBAAoBpxf,EAAkBuC,KAAKwuf,SACpD/wf,EAAkBuC,KAAKwuf,OAAOoqD,oBAC1B,EAEJ54iB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQyB,KAAKwuf,OAAOoqD,oBAAsB,GAEvEjxiB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,WAKvCsM,IAAK,WACD,OAAK1H,KAAKwjgB,MAAM3U,kBAAoBpxf,EAAkBuC,KAAKwuf,SACpD/wf,EAAkBuC,KAAKwuf,OAAOqqD,kBAC1B,EAEJ74iB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQyB,KAAKwuf,OAAOqqD,kBAAoB,GAErElxiB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,aAOvCsM,IAAK,WACD,OAAO1H,KAAKzC,MAAM+xiB,cAActviB,KAAKif,MAEzCtX,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,WAOvCsM,IAAK,WACD,QAAIjK,EAAkBuC,KAAKzC,QAGpByC,KAAKzC,MAAM6xiB,iBAAiBpviB,KAAKif,MAE5CtX,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,QAMvCsM,IAAK,WACD,OAAO1H,KAAK4vI,SAAQ,IAExBjoI,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,eAIvCsM,IAAK,WACD,OAAO1H,KAAKg4iB,qBAEhBrwiB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2vV,EAAUp8V,UAAW,aAIvCsM,IAAK,WACD,OAAOjK,EAAkBuC,KAAKif,MAElCtX,YAAY,EACZC,cAAc,IAElB4vV,EAAUp8V,UAAU2mC,cAAgB,WAChC,MAAO,aAMXy1T,EAAUp8V,UAAU09iB,WAAa,WAC7B94iB,KAAKwjgB,MAAMmf,uBAAwB,EACnC3ihB,KAAK+4iB,2BAA2B/4iB,KAAKzC,MAAM05f,UAAU6F,WAAWvvV,KAAKw6V,eAKzEvwK,EAAUp8V,UAAU49iB,WAAa,WAC7Bh5iB,KAAKwjgB,MAAMmf,uBAAwB,EACnC3ihB,KAAK+4iB,2BAA2B/4iB,KAAKzC,MAAM05f,UAAU6F,WAAWvvV,KAAKy6V,eAKzExwK,EAAUp8V,UAAU69iB,kBAAoB,WACpCj5iB,KAAKk5iB,uBAKT1hN,EAAUp8V,UAAU+9iB,SAAW,SAAUn3T,GACrC,GAAIA,GAAc,GAAKA,GAAchiP,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQ,CAC3D,IAAI+wK,EAAOvtK,KAAKwuf,OAAOzmQ,MAAM/F,EAAa,GAC1ChiP,KAAKo5iB,oCAAoC7rY,EAAKq4V,YAAY,MAMlEpuK,EAAUp8V,UAAUi+iB,YAAc,WACzBr5iB,KAAKwjgB,MAAMjQ,iBAGhBvzf,KAAKs5iB,uBAKT9hN,EAAUp8V,UAAUm+iB,UAAY,WACvBv5iB,KAAKwjgB,MAAMjQ,iBAGhBvzf,KAAKw5iB,kBAKThiN,EAAUp8V,UAAUq+iB,aAAe,WAC1Bz5iB,KAAKwjgB,MAAMjQ,iBAGhBvzf,KAAK05iB,wBAKTliN,EAAUp8V,UAAUu+iB,WAAa,WACxB35iB,KAAKwjgB,MAAMjQ,iBAGhBvzf,KAAK45iB,mBAKTpiN,EAAUp8V,UAAUqK,OAAS,SAAUo0iB,GACnC,IAAIlmhB,EAAQ,IAAIkhB,GAAMglgB,EAAkB9siB,EAAG8siB,EAAkB7siB,GACzD8siB,EAAkB95iB,KAAKwuf,OAAOqrC,gBAAgBlmgB,GAAO,GACrDkmhB,EAAkBn7iB,OAClBsB,KAAK66hB,iBAAiBif,EAAiB95iB,KAAKif,KAG5Cjf,KAAKwuf,OAAOksC,+BAA+Bof,EAAiB,IAOpEtiN,EAAUp8V,UAAU2+iB,WAAa,WACzB/5iB,KAAKwjgB,MAAM1U,cACX9uf,KAAKwjgB,MAAM1U,aAAairD,cAOhCviN,EAAUp8V,UAAU4+iB,aAAe,WAC3Bh6iB,KAAKwjgB,MAAM1U,cACX9uf,KAAKwjgB,MAAM1U,aAAakrD,gBAQhCxiN,EAAUp8V,UAAU6+iB,gBAAkB,SAAUzsQ,GACxCxtS,KAAKwjgB,MAAM8Q,QACXt0gB,KAAKwjgB,MAAM8Q,OAAO2lC,gBAAgBzsQ,IAQ1CgqD,EAAUp8V,UAAU8+iB,oBAAsB,SAAUx7C,GAC5C1+f,KAAKwjgB,MAAM8Q,QACXt0gB,KAAKwjgB,MAAM8Q,OAAO4lC,oBAAoBx7C,IAQ9ClnK,EAAUp8V,UAAU++iB,qBAAuB,SAAUx7C,GAC7C3+f,KAAKwjgB,MAAM8Q,QACXt0gB,KAAKwjgB,MAAM8Q,OAAO6lC,qBAAqBx7C,IAO/CnnK,EAAUp8V,UAAUg/iB,gBAAkB,WAC9Bp6iB,KAAKwjgB,MAAM8Q,QACXt0gB,KAAKwjgB,MAAM8Q,OAAO8lC,mBAO1B5iN,EAAUp8V,UAAUi/iB,kBAAoB,WAChCr6iB,KAAKwjgB,MAAM8Q,QACXt0gB,KAAKwjgB,MAAM8Q,OAAO+lC,qBAQ1B7iN,EAAUp8V,UAAUk/iB,oBAAsB,SAAUt3gB,GAC5ChjC,KAAKwjgB,MAAM8Q,QACXt0gB,KAAKwjgB,MAAM8Q,OAAOgmC,oBAAoBt3gB,IAO9Cw0T,EAAUp8V,UAAUm/iB,eAAiB,WAC7Bv6iB,KAAKwjgB,MAAM8Q,QACXt0gB,KAAKwjgB,MAAM8Q,OAAOimC,kBAO1B/iN,EAAUp8V,UAAUo/iB,eAAiB,WAC7Bx6iB,KAAKwjgB,MAAM8Q,QACXt0gB,KAAKwjgB,MAAM8Q,OAAOkmC,kBAM1BhjN,EAAUp8V,UAAUq8gB,kBAAoB,WACpC,IAAI7X,EAAa5/f,KAAKg5gB,oBAClBpZ,GACA5/f,KAAKy6iB,oBAAoB76C,IAQjCpoK,EAAUp8V,UAAUq/iB,oBAAsB,SAAU76C,GAChD,IAAIjwc,EAAY,IAAI85W,GAAUm2F,EAAY5/f,MACtCuN,GACAsvhB,WAAW,EACX+a,eAAgBjof,EAAUiof,eAC1B8C,SAAU/qf,EAAU+qf,SACpBC,eAAgBhrf,EAAUgrf,eAC1Br+iB,OAAQ0D,KAAKwjgB,OAEjBxjgB,KAAKwjgB,MAAM78e,QAAQ,kBAAmBpZ,GACjCA,EAAUsvhB,WACX78hB,KAAKwuf,OAAOv4a,UAAU2ke,iBAAiBjrf,EAAUgrf,gBAAgB,IAMzEnjN,EAAUp8V,UAAUs8gB,cAAgB,WAChC,IAAImjC,EAAiB76iB,KAAKg5gB,oBACtB8hC,EAAW96iB,KAAK+6iB,YAAYF,GAChC76iB,KAAKg7iB,gBAAgBF,IAMzBtjN,EAAUp8V,UAAU6/iB,mBAAqB,SAAUC,GAC3Cl7iB,KAAKwjgB,MAAMk2B,wBACX15hB,KAAKwjgB,MAAMvhB,mBAAmBk5D,mBAE9Bn7iB,KAAK43O,QACL53O,KAAK41hB,uBAGD51hB,KAAK+2iB,UACL/2iB,KAAKo7iB,yBAAyBp7iB,KAAKzC,MAAOyC,KAAKif,KAG/Cjf,KAAKo7iB,yBAAyBp7iB,KAAKif,IAAKjf,KAAKzC,OAE7CyC,KAAKwuf,OAAOsoC,gBACZ92hB,KAAK41hB,uBAGb51hB,KAAKwuf,OAAOqnC,0BACRqlB,GACAl7iB,KAAKwuf,OAAOitC,iBAAiBz7hB,KAAKzC,MAAOyC,KAAKif,MAMtDu4U,EAAUp8V,UAAUigjB,sBAAwB,SAAUxoC,EAAY78f,EAAOxJ,EAAME,GACvEsJ,EAAQ,IACRA,EAAQ,GAEZ,IAAIu3J,EAAOvtK,KAAKu7S,QAAQs3N,EAAW5b,WAC/Blhf,EAAS88f,EAAW98f,OACpBuliB,OAAkBpgjB,EACjB8E,KAAKsyhB,gBAAgBjvS,YAAYwvR,KAClCyoC,EAAkB,IAAItE,GAAoBxqiB,EAAMwJ,GAChDhW,KAAKsyhB,gBAAgBluhB,IAAIyugB,EAAYyoC,IAEzC,IAAI9sD,EAASxuf,KAAKwuf,OACdhmD,EAAUxoc,KAAKugiB,WAAWhzX,GAC1B+6R,EAAW/6R,EAAKurV,kBAAkB/rf,EACtC,GAAIyhf,EAAOp3e,cAAgBoxb,GACpBA,EAAUgmD,EAAOp3e,aAAeo3e,EAAOkiC,gBAAgB36gB,OAAQ,CAClE,IAAI++D,EAAa05a,EAAO15a,WACxB90E,KAAKu7iB,cAAchuY,EAAMi7R,GACrBxoc,KAAKwuf,OAAOsoC,eAEZ92hB,KAAKwxhB,eAAehjC,EAAOwiC,iBAAkBzjX,EAAMslW,EAAavqE,EAAY97b,EAAOsoE,EAAe05a,EAAO73e,cAAejK,EAAKsJ,EAAQ8+D,EAAY/+D,IAGjJy4e,EAAOwiC,iBAAiBz8b,UAAY,OACpCi6Z,EAAOwiC,iBAAiB38b,YAAc,GAEtCm6Z,EAAOwiC,iBAAiBx8b,SAAU8zW,EAAY97b,EAAOsoE,EAAe05a,EAAO73e,cAAgB6xb,EAAW97b,EAAMooE,EAAe05a,EAAOp3e,aAAcpB,EAAQ8+D,EAAY/+D,EAAS++D,IAEjL05a,EAAOwiC,iBAAiB/8b,YAOhCujQ,EAAUp8V,UAAUogjB,iCAAmC,SAAU1tC,GAC7D,IAAIvgW,EAAOvtK,KAAKu7S,QAAQuyN,GACpBwtC,OAAkBpgjB,EAClBsR,EAAOshgB,EAAW/ggB,EAAI+ggB,EAAW9ue,OAAOxyB,KAAOshgB,EAAWzE,gBAC1Drzf,EAAQ83f,EAAW93f,MAAQ83f,EAAW9ue,OAAOxyB,KAC3CshgB,EAAW9ue,OAAOvyB,MAAQqhgB,EAAWzE,gBAAkByE,EAAWxE,iBACpE58f,EAAMohgB,EAAW9ggB,EACjB+I,EAAS+3f,EAAW/3f,OACpByyb,EAAUxoc,KAAKugiB,WAAWhzX,GAC1B+6R,EAAW/6R,EAAKurV,kBAAkB/rf,EAClC0uiB,EAAgBz7iB,KAAKwuf,OAAOp3e,cAAgBoxb,GACzCA,EAAUxoc,KAAKwuf,OAAOp3e,aAAepX,KAAKwuf,OAAOkiC,gBAAgB36gB,OAUxE,GATI/V,KAAKsyhB,gBAAgBjvS,YAAYyqR,KACjCwtC,EAAkBt7iB,KAAKsyhB,gBAAgB5qhB,IAAIomgB,GACvC2tC,GAEAz7iB,KAAKwuf,OAAOwiC,iBAAiBv4E,UAAWnQ,EAAYgzG,EAAgB9uiB,KAAOxM,KAAKwuf,OAAO15a,WAAc90E,KAAKwuf,OAAO73e,cAAiB6xb,EAAW97b,EAAM1M,KAAKwuf,OAAO15a,WAAe90E,KAAKwuf,OAAOp3e,aAAckkiB,EAAgBtliB,MAAQhW,KAAKwuf,OAAO15a,WAAY/+D,EAAS/V,KAAKwuf,OAAO15a,aAGrRwme,EAAkB,IAAItE,GAAoBxqiB,EAAMwJ,GAChDhW,KAAKsyhB,gBAAgBluhB,IAAI0pgB,EAAYwtC,GACjCG,EAAe,CACfz7iB,KAAKwuf,OAAOwiC,iBAAiBz8b,UAAY,OACzCv0F,KAAKwuf,OAAOwiC,iBAAiB38b,YAAc,GAC3C,IAAIvf,EAAa90E,KAAKwuf,OAAO15a,WAC7B90E,KAAKu7iB,cAAchuY,EAAMi7R,GAEzBxoc,KAAKwuf,OAAOwiC,iBAAiBx8b,SAAU8zW,EAAY97b,EAAOsoE,EAAe90E,KAAKwuf,OAAO73e,cAAgB6xb,EAAW97b,EAAMooE,EAAe90E,KAAKwuf,OAAOp3e,aAAcpB,EAAQ8+D,EAAY/+D,EAAS++D,GAC5L90E,KAAKwuf,OAAOwiC,iBAAiB/8b,YAMrCujQ,EAAUp8V,UAAUmgjB,cAAgB,SAAUhuY,EAAMi7R,GAChD,IAAIgmD,EAASxuf,KAAKwuf,OACdx4e,EAAQu3J,EAAKurV,kBAAkB9if,MAAQw4e,EAAO15a,WAC9C/+D,EAASw3J,EAAKurV,kBAAkB/if,OAASy4e,EAAO15a,WAChDtoE,EAAO+gK,EAAKurV,kBAAkB/rf,EAClCyhf,EAAOwiC,iBAAiBl9b,YACxB06Z,EAAOwiC,iBAAiBn9b,OACxB26Z,EAAOwiC,iBAAiB99f,KAAK1mB,EAAOgif,EAAO73e,cAAe6xb,EAAUgmD,EAAOp3e,aAAcpB,EAAOD,GAChGy4e,EAAOwiC,iBAAiBviR,QAM5B+oF,EAAUp8V,UAAUq3hB,sBAAwB,SAAUipB,EAAe71C,EAAQn5f,GACzE,GAAI1M,KAAKsyhB,gBAAgBjvS,YAAYwiR,GAAS,CAC1C,IAAI9vf,EAAS8vf,EAAO9vf,OAChB48gB,EAAa3yhB,KAAKsyhB,gBAAgB5qhB,IAAIm+f,GACtC7vf,EAAQhW,KAAKwuf,OAAOp8Y,OAAOk/a,eAAeqB,EAAW38gB,OACrDxJ,EAAOxM,KAAKwuf,OAAOp8Y,OAAOk/a,eAAeqB,EAAWnmhB,KAAM,GAC1D+gK,EAAOvtK,KAAKwjgB,MAAMvtb,UAAUslO,QAAQsqN,EAAO5O,WAC/Cj3f,KAAKwjgB,MAAMvtb,UAAUsle,cAAchuY,EAAMvtK,KAAKwjgB,MAAMvtb,UAAUsqd,WAAWhzX,IACrEvtK,KAAKwuf,OAAOsoC,eACZ92hB,KAAKwxhB,eAAekqB,EAAenuY,EAAMs4V,EAAQr5f,EAAME,EAAKsJ,EAAOD,IAGnEA,EAAS/V,KAAKwuf,OAAOp8Y,OAAOk/a,eAAev7gB,GAC3C2liB,EAAcrnd,YAAc,GAC5Bqnd,EAAcnnd,UAAY,OAC1Bmnd,EAAclnd,SAAShoF,EAAMxM,KAAKwuf,OAAOp8Y,OAAOk/a,eAAe5khB,EAAK,GAAIsJ,EAAOD,IAEnF2liB,EAAcznd,YAOtBujQ,EAAUp8V,UAAUo2hB,eAAiB,SAAUn+b,EAAKk6E,EAAMs4V,EAAQr5f,EAAME,EAAKsJ,EAAOD,GAChF,IAAI0of,EAAYz+f,KAAKqyf,gBAAgBoM,UACjC5tK,EAAY4tK,EAAYz+f,KAAKwuf,OAAOp8Y,OAAOu+a,SAASlyB,GAAa,UACrEpra,EAAIgB,YAAc,EAElB,IAAI91D,EAASv+B,KAAKwjgB,MAAM8Q,OAAOqnC,iBAAiB,IAAIvkD,IAAoB,GACpEwkD,EAAa57iB,KAAKwuf,OAAO0uB,WAAW7pQ,UAAU90O,GAC9Ciqa,EAAUxoc,KAAKugiB,WAAWhzX,GAC1Bk9E,EAAUmxT,EAAWx2D,OAASw2D,EAAWl8B,eAC7ChzgB,EAAM1M,KAAKwuf,OAAOp8Y,OAAO0gb,sBAAsBjtB,GAAUn5f,EAAM,EAAI+9O,EAEnEzqP,KAAKwuf,OAAOp8Y,OAAOo/a,eAAen+b,EAAK7mF,EAAOg8b,EAAUxoc,KAAKwuf,OAAOp3e,aAAiB1K,EAAM1M,KAAKwuf,OAAO15a,WAAa9+D,EAAO66U,GAAW,IAM1I2G,EAAUp8V,UAAUm3hB,2BAA6B,SAAUmpB,EAAe7zC,GACtE,GAAI7ngB,KAAKsyhB,gBAAgBjvS,YAAYwkR,GAAkB,CACnD,IAAIyzC,EAAkBt7iB,KAAKsyhB,gBAAgB5qhB,IAAImggB,GAC3Cr7f,EAAOxM,KAAKwuf,OAAOp8Y,OAAOk/a,eAAegqB,EAAgB9uiB,KAAM,GAC/DqvC,EAAQ77C,KAAKwuf,OAAOp8Y,OAAOk/a,eAAezpB,EAAgB76f,EAAG,GAC7DgJ,EAAQhW,KAAKwuf,OAAOp8Y,OAAOk/a,eAAegqB,EAAgBtliB,OAC1DD,EAAS/V,KAAKwuf,OAAOp8Y,OAAOk/a,eAAezpB,EAAgB9xf,QAC/D2liB,EAAcnnd,UAAY,OAC1B,IAAIg5E,EAAOvtK,KAAKwjgB,MAAMvtb,UAAUslO,QAAQssN,GACxC7ngB,KAAKwjgB,MAAMvtb,UAAUsle,cAAchuY,EAAMvtK,KAAKwjgB,MAAMvtb,UAAUsqd,WAAWhzX,IACzEmuY,EAAclnd,SAAShoF,EAAMqvC,EAAO7lC,EAAOD,GAC3C2liB,EAAcznd,YAOtBujQ,EAAUp8V,UAAUygjB,yBAA2B,SAAUh2C,GACrD,IAAIr5f,EAAO,EACPE,EAAM,EACNsJ,EAAQ,EACRD,EAAS,EACTw3J,OAAOryK,EACX,GAAI2qgB,aAAkBwB,GAAY,CAC9B,IAAIwL,EAAahN,EAIjB,GAFAt4V,EAAQ9vK,EADgBo1gB,EAAW5b,gBAEQ/7f,EAAvC8E,KAAKu7S,QAASs3N,EAAoB,WAClCp1gB,EAAkB8vK,GAClB,OAEJ7gK,EAAM1M,KAAKo3S,OAAOy7N,GAClB98f,EAAS88f,EAAW98f,YAEnB,GAAI8vf,aAAkBI,GAAiB,CAGxC,GAFA14V,EAAQ9vK,EAAkBoogB,QACC3qgB,EAAvB8E,KAAKu7S,QAAQsqN,GACbpogB,EAAkB8vK,GAClB,OAEJ7gK,EAAMm5f,EAAO74f,EACb+I,EAAS8vf,EAAO9vf,OAEpB,IAAItY,EAAkB8vK,GAAtB,CAGA,IAAIolX,EAAa3yhB,KAAKsyhB,gBAAgB5qhB,IAAIm+f,GAC1C7vf,EAAQ28gB,EAAW38gB,MACnBxJ,EAAOmmhB,EAAWnmhB,KAClB,IAAIsviB,EAAWvuY,EAAKurV,kBAChBtrV,EAAYxtK,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQgvK,GACtCyxX,EAAUh/hB,KAAKwuf,OAAOwwC,QACtBx2F,GAAWszG,EAAS9uiB,EAAIgyhB,GAAWxxX,EAAY,IAAMxtK,KAAKwuf,OAAO15a,WAAakqd,GAAWxxX,EAAY,GACrG86R,EAAWwzG,EAAS/uiB,EACpB+nE,EAAa90E,KAAKwuf,OAAO15a,YACzB90E,KAAKwuf,OAAOp3e,cAAgBoxb,GACzBA,EAAUxoc,KAAKwuf,OAAOp3e,aAAepX,KAAKwuf,OAAOkiC,gBAAgB36gB,SAEpE/V,KAAKwuf,OAAOwiC,iBAAiBv4E,UAAWnQ,EAAY97b,EAAOsoE,EAAc90E,KAAKwuf,OAAO73e,cAAiB,GAAM6xb,EAAW97b,EAAMooE,EAAe90E,KAAKwuf,OAAOp3e,aAAe,GAAKpB,EAAQ8+D,EAAa,GAAK/+D,EAAS++D,EAAa,MAOpO0iR,EAAUp8V,UAAU6/hB,kBAAoB,WACpC,IAAI31O,EAAgBtlT,KAAKzC,MAAM8B,QAC3B0giB,EAAc//hB,KAAKif,IAAI5f,QAC3BW,KAAK+7iB,uBAAuBz2P,EAAey6O,GAAa,GACxD//hB,KAAKowN,YAAYk1F,EAAey6O,IAMpCvoM,EAAUp8V,UAAU0kiB,uBAAyB,WACpCriiB,EAAkBuC,KAAKzC,SACxByC,KAAKzC,MAAM42iB,uBAAuBn0iB,MAAM,GACxCA,KAAKif,IAAIu1hB,2BAA2Bx0iB,MAAM,GAC1CA,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAOlCxkN,EAAUp8V,UAAU2gjB,uBAAyB,SAAUz2P,EAAey6O,EAAaiT,GAC/E,IAAKv1iB,EAAkB6nT,GAAgB,CACnC,GAAIA,EAAc35S,OAAS,EAAG,CAC1B,IAAIswiB,EAAY32P,EAAcjmT,QAC1B2pgB,EAAgB,EAChB4nC,EAAYtrP,EAAcomO,cAAc3iB,UAAUzjN,EAAc35S,OAAQq9f,GACxExqW,EAASoyY,EAAU5viB,QACvBgogB,EAAgB4nC,EAAU9+hB,OACrBrU,EAAkB+gK,IAAWA,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,UAEtEp6M,EAAc35S,OAAS,KAAOlO,EAAkB+gK,EAAO+zW,iBAAmB90gB,EAAkB+gK,EAAOohW,cACnGq8C,EAAUhN,qBAAqBgN,EAAUvwB,cAAepmO,EAAc35S,OAAS,GAC/EswiB,EAAUpG,sBAAsB,GAAG,GAC7BoG,EAAUhlD,YAAc3xM,EAAc2xM,WAAaglD,EAAUtwiB,SAAW25S,EAAc35S,OAAS,GACjG25S,EAAcotP,wBAAwB,IAGrCptP,EAAc35S,OAAS,GAAKlO,EAAkB+gK,EAAO+zW,kBAC1D0pC,EAAUhN,qBAAqBgN,EAAUvwB,cAAepmO,EAAc35S,OAAS,GAC/EswiB,EAAUpG,sBAAsB,GAAG,GAC7BoG,EAAUhlD,YAAc3xM,EAAc2xM,WAAaglD,EAAUtwiB,SAAW25S,EAAc35S,QACxF25S,EAAcotP,wBAAwB,KAK9CuJ,EAAUhN,qBAAqBgN,EAAUvwB,cAAepmO,EAAc35S,OAAS,GAC/EswiB,EAAUpG,sBAAsB,GAAG,GAC7BoG,EAAUhlD,YAAc3xM,EAAc2xM,WAAaglD,EAAUtwiB,SAAW25S,EAAc35S,QACxF25S,EAAcotP,wBAAwB,IAIlD3S,EAAY8V,sBAAsB,EAAG7C,KAO7Cx7M,EAAUp8V,UAAU8gjB,uBAAyB,WACrCz+iB,EAAkBuC,KAAKzC,SAG3ByC,KAAKif,IAAIk1hB,uBAAuBn0iB,MAAM,GACtCA,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAU+gjB,qBAAuB,WACnC1+iB,EAAkBuC,KAAKzC,SAG3ByC,KAAKif,IAAIu1hB,2BAA2Bx0iB,MAAM,GAC1CA,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAU40iB,iBAAmB,WAC/BvyiB,EAAkBuC,KAAKzC,SAGvByC,KAAK43O,UACL53O,KAAKzC,MAAMyyiB,mBACXhwiB,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,QAEtCyC,KAAKo8iB,yBACLp8iB,KAAKm1iB,sBAAwBn1iB,KAAKzC,MAAMq9B,SAAS7tB,EACjD/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAUq5iB,oBAAsB,WAClCh3iB,EAAkBuC,KAAKzC,SAG3ByC,KAAKif,IAAI4yhB,mCACT7xiB,KAAKzC,MAAMuxiB,oBAAoB9uiB,KAAKif,KACpCjf,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAU02iB,qBAAuB,WACnCr0iB,EAAkBuC,KAAKzC,SAGvByC,KAAK43O,UACL53O,KAAKzC,MAAMu0iB,uBACX9xiB,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,QAEtCyC,KAAKq8iB,0BACLr8iB,KAAKm1iB,sBAAwBn1iB,KAAKzC,MAAMq9B,SAAS7tB,EACjD/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAUg5iB,wBAA0B,WACtC32iB,EAAkBuC,KAAKzC,SAG3ByC,KAAKif,IAAIm1hB,wBAAwBp0iB,MACjCA,KAAKzC,MAAMuxiB,oBAAoB9uiB,KAAKif,KACpCjf,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAUkhjB,qBAAuB,WACnC7+iB,EAAkBuC,KAAKzC,SAG3ByC,KAAKif,IAAIw2hB,mBAAmBz1iB,KAAMA,KAAKm1iB,uBACvCn1iB,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAUmhjB,gBAAkB,WAC9B9+iB,EAAkBuC,KAAKzC,SAG3ByC,KAAKif,IAAIq2hB,sBAAsBt1iB,MAAM,GACrCA,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAUohjB,kBAAoB,WAChC/+iB,EAAkBuC,KAAKzC,SAG3ByC,KAAKif,IAAI21hB,wBAAwB50iB,MAAM,GACvCA,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAK9BxkN,EAAUp8V,UAAUwtH,OAAS,WACrBnrH,EAAkBuC,KAAKzC,SAGtByC,KAAK43O,UACF53O,KAAK+2iB,UACL/2iB,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,OAGlCyC,KAAKzC,MAAMuxiB,oBAAoB9uiB,KAAKif,KAExCjf,KAAKm1iB,sBAAwBn1iB,KAAKzC,MAAMq9B,SAAS7tB,GAErD/M,KAAKm1iB,sBAAwBn1iB,KAAKzC,MAAMq9B,SAAS7tB,EACjD/M,KAAKzC,MAAMqrH,OAAO5oH,KAAMA,KAAKm1iB,uBAC7Bn1iB,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,OAClCyC,KAAKg8iB,sBAAqB,KAK9BxkN,EAAUp8V,UAAUutH,SAAW,WACvBlrH,EAAkBuC,KAAKzC,SAGtByC,KAAK43O,UACF53O,KAAK+2iB,UACL/2iB,KAAKzC,MAAMuxiB,oBAAoB9uiB,KAAKif,KAGpCjf,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,OAEtCyC,KAAKm1iB,sBAAwBn1iB,KAAKzC,MAAMq9B,SAAS7tB,GAErD/M,KAAKzC,MAAMorH,SAAS3oH,KAAMA,KAAKm1iB,uBAC/Bn1iB,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,OAClCyC,KAAKg8iB,sBAAqB,KAE9BxkN,EAAUp8V,UAAUghjB,uBAAyB,WACpCp8iB,KAAK43O,UACF53O,KAAK+2iB,UACL/2iB,KAAKzC,MAAMuxiB,oBAAoB9uiB,KAAKif,KAGpCjf,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,SAI9Ci6V,EAAUp8V,UAAUihjB,wBAA0B,WACrCr8iB,KAAK43O,UACF53O,KAAK+2iB,UACL/2iB,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,OAGlCyC,KAAKzC,MAAMuxiB,oBAAoB9uiB,KAAKif,OAOhDu4U,EAAUp8V,UAAUo6iB,yBAA2B,SAAUpwe,GACrD,GAAIA,EAAMiyb,aAAa76f,OAAS,EAAG,CAC/B,IAAIigjB,EAAWr3e,EAAMiyb,aAAa,GAClC,GAAIolD,EAASplD,aAAa76f,OAAS,EAAG,CAClC,IAAIkgjB,EAAYD,EAASplD,aAAa,GACtC,GAAsC,IAAlCqlD,EAAUrlD,aAAa76f,OACvB,OAEJ,OAAOkgjB,EAAUrlD,aAAa,MAS1C7/J,EAAUp8V,UAAUy5iB,qBAAuB,SAAUnve,EAAK8mc,EAAWmwC,EAAiBC,GAClF,IAAIC,EAAY78iB,KAAK88iB,YAAYp3e,EAAK8mc,GAClCuwC,EAAUF,EAAYrwC,EAAU/D,WAAWv6M,UAC3Cp5N,GAAO,EACX,GAAI+nd,GAAaF,GAAmBA,EAAkBI,EAClD,IAAK,IAAIz2hB,EAAI,EAAGA,EAAIo/C,EAAI2xb,aAAa76f,OAAQ8pB,IAAK,CAC9C,IAAI9Z,EAAOxM,KAAK88iB,YAAYp3e,EAAKA,EAAI2xb,aAAa/we,IAClD,GAAIw4e,GAAc/+d,MAAM88gB,EAAW,IAAM/9C,GAAc/+d,MAAMvzB,EAAM,IAC/Dsyf,GAAc/+d,MAAMvzB,EAAM,GAAKsyf,GAAc/+d,MAAMg9gB,EAAS,GAE5D,OADAjod,GAAO,EACApvB,EAAI2xb,aAAa/we,QAKhC,IAAK,IAAI5C,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIs5hB,EAAWh9iB,KAAK88iB,YAAYp3e,EAAKA,EAAI2xb,aAAa3ze,IACtD,GAAIs5hB,GAAYL,GAAmBK,EAC/Bt3e,EAAI2xb,aAAa3ze,GAAG+kf,WAAWv6M,UAAYyuP,EAE3C,OADA7nd,GAAO,EACApvB,EAAI2xb,aAAa3ze,GAIpC,GAAIoxE,EAAM,CACN,IAAKr3F,EAAkBioE,EAAI2gc,yBAA2Bu2C,EAAgB,CAClE,IAAI/uC,EAAiBnoc,EAAI2gc,uBACzB,OAAOrmgB,KAAK60iB,qBAAqBhnC,EAAgBrB,EAAWmwC,EAAiBC,GAE5E,IAAKn/iB,EAAkBioE,EAAI8gc,sBAAwBo2C,EACpD,OAAO58iB,KAAK60iB,qBAAqBnve,EAAI8gc,mBAAoBgG,EAAWmwC,EAAiBC,GAG7F,OAAOl3e,EAAI2xb,aAAa,IAK5B7/J,EAAUp8V,UAAUm6iB,kBAAoB,SAAU1rC,GAC9C,KAAOA,EAAUjD,qBACbiD,EAAYA,EAAUjD,oBAE1B,IAAIq2C,EAAapzC,EAAU7sf,WAC3B,OAAOhd,KAAKk9iB,uBAAuBD,IAOvCzlN,EAAUp8V,UAAU65iB,uBAAyB,SAAU7ve,GACnD,GAAIA,EAAMiyb,aAAa76f,OAAS,EAAG,CAC/B,IAAI2gjB,EAAU/3e,EAAMiyb,aAAajyb,EAAMiyb,aAAa76f,OAAS,GACzD4gjB,EAAWD,EAAQ9lD,aAAa8lD,EAAQ9lD,aAAa76f,OAAS,GAClE,OAAO4gjB,EAAS/lD,aAAa+lD,EAAS/lD,aAAa76f,OAAS,KAQpEg7V,EAAUp8V,UAAUiijB,gBAAkB,WAC9B5/iB,EAAkBuC,KAAKzC,SAG3ByC,KAAKq8iB,0BACLr8iB,KAAKzC,MAAMq3iB,wBAAwB50iB,MAAM,GACzCA,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,OAClCyC,KAAKm1iB,sBAAwBn1iB,KAAKzC,MAAMq9B,SAAS7tB,EACjD/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAUkijB,cAAgB,WAC5B7/iB,EAAkBuC,KAAKzC,SAG3ByC,KAAKo8iB,yBACLp8iB,KAAKzC,MAAM+3iB,sBAAsBt1iB,MAAM,GACvCA,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,OAClCyC,KAAKm1iB,sBAAwBn1iB,KAAKzC,MAAMq9B,SAAS7tB,EACjD/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAUmliB,WAAa,SAAUhzX,GAEvC,OAAQA,EAAKurV,kBAAkB9rf,EAAIhN,KAAKwuf,OAAOwwC,SAAWh/hB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQgvK,GAAQ,IAAMvtK,KAAKwuf,OAAO15a,WAAa90E,KAAKwuf,OAAOwwC,SAAWh/hB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQgvK,GAAQ,IAMxLiqL,EAAUp8V,UAAUy/hB,iBAAmB,SAAUjB,EAAa1xI,GAC1D,IAAIzqZ,EAAkBuC,KAAKzC,OAA3B,CAIA,IAAIsogB,EAAS7lgB,KAAKwuf,OAAOwxC,sBAAsBpG,GAAa,GACvDn8hB,EAAkBoogB,IACnB7lgB,KAAKq1iB,yBAAyBxvC,EAAQ+zB,EAAa1xI,GAAc,GAErEloZ,KAAKm1iB,sBAAwBjtJ,EAAattX,SAAS7tB,EACnD,IAAIuliB,EAAsBtyiB,KAAKzC,MAAM+wiB,+BACjC0F,EAAoBh0iB,KAAKif,IAAIqvhB,+BAC7BgE,IAAwB0B,IAEpB9F,GAAamC,mBAAmBiC,EAAqB0B,GACrD9rJ,EAAa6rJ,8BAA8BzB,EAAqB0B,GAGhE9rJ,EAAagsJ,+BAA+B5B,EAAqB0B,IAGzEh0iB,KAAKg8iB,sBAAqB,KAQ9BxkN,EAAUp8V,UAAUg0f,iBAAmB,WACnC,IACI8Y,EAAQlogB,KAAKwuf,OAAOzmQ,MAAM,GAAG69Q,YAAY,GAAGvO,aAAa,GAC7D,OAAOr3f,KAAKu9iB,oBAAoBr1C,GAAO,IAM3C1wK,EAAUp8V,UAAUi0f,eAAiB,WACjC,IAAInnG,OAAehtZ,EACf6jiB,EAAgB/+hB,KAAKwjgB,MAAMu7B,cAC3Bye,EAAWx9iB,KAAKwuf,OAAOzmQ,MAAM/nP,KAAKwuf,OAAOzmQ,MAAMvrP,OAAS,GAC5D,IAAKiB,EAAkBshiB,IAAkBye,EAAS53C,YAAY,GAAGvO,aAAa76f,OAAS,EAAG,CACtF,IAAI0rgB,OAAQhtgB,EAERixS,EADUqxQ,EAAS53C,YAAY,GACdvO,aAEjB/7P,EAAY6wC,EADEA,EAAO3vS,OAAS,GAE9B8+P,aAAqBmrQ,KACrByB,EAAQ5sQ,GAEZ4sJ,EAAeloZ,KAAKu9iB,oBAAoBr1C,GAAO,GAEnD,OAAOhgH,GAOX1wD,EAAUp8V,UAAUqijB,oBAAsB,WACtC,IAAIC,OAAcxijB,EACbuC,EAAkBuC,KAAKwjgB,MAAMk6C,eAC9BA,EAAc19iB,KAAKwjgB,MAAMk6C,aAExBjgjB,EAAkBigjB,IACnB19iB,KAAKwjgB,MAAMvtb,UAAU0ne,cAAcD,GAAa,GAEpD19iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUwijB,qBAAuB,WACvC,IAAI7e,OAAgB7jiB,EACfuC,EAAkBuC,KAAKwjgB,MAAMu7B,iBAC9BA,EAAgB/+hB,KAAKwjgB,MAAMu7B,eAE1BthiB,EAAkBshiB,IACnB/+hB,KAAKwjgB,MAAMvtb,UAAU0ne,cAAc5e,GAAe,GAEtD/+hB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUyijB,qBAAuB,WACvC79iB,KAAK89iB,mBAAkB,GACvB99iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU2ijB,sBAAwB,WACxC/9iB,KAAKg+iB,iBAAgB,GACrBh+iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU6ijB,qBAAuB,WACvCj+iB,KAAKy0iB,sBACLz0iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU8ijB,mBAAqB,WACrCl+iB,KAAKo0iB,0BACLp0iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU+ijB,mBAAqB,WACrCn+iB,KAAKo+iB,iBACLp+iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUijjB,iBAAmB,WACnCr+iB,KAAKs8iB,uBACLt8iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUkjjB,oBAAsB,WACtCt+iB,KAAKu+iB,gBACLv+iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUojjB,mBAAqB,WACrCx+iB,KAAKy+iB,mBACLz+iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUsjjB,0BAA4B,WAC5C1+iB,KAAK89iB,mBAAkB,GACvB99iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUujjB,wBAA0B,WAC1C3+iB,KAAKk8iB,yBACLl8iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUwjjB,2BAA6B,WAC7C5+iB,KAAKg+iB,iBAAgB,GACrBh+iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUyjjB,0BAA4B,WAC5C7+iB,KAAKm8iB,uBACLn8iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU0jjB,cAAgB,WAChC9+iB,KAAK8xiB,uBACL9xiB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU2jjB,YAAc,WAC9B/+iB,KAAKk4iB,oBAAqB,EAC1Bl4iB,KAAK4oH,SACL5oH,KAAKk4iB,oBAAqB,EAC1Bl4iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU4jjB,eAAiB,WACjCh/iB,KAAKgwiB,mBACLhwiB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU6jjB,aAAe,WAC/Bj/iB,KAAKs9iB,gBACLt9iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU8jjB,cAAgB,WAChCl/iB,KAAKq9iB,kBACLr9iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU+jjB,cAAgB,WAChCn/iB,KAAKk4iB,oBAAqB,EAC1Bl4iB,KAAK2oH,WACL3oH,KAAKk4iB,oBAAqB,EAC1Bl4iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUgkjB,kBAAoB,WACpCp/iB,KAAKu8iB,kBACLv8iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUikjB,mBAAqB,WACrCr/iB,KAAKw8iB,oBACLx8iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUkkjB,yBAA2B,WAC3C,IAAI5B,OAAcxijB,EACbuC,EAAkBuC,KAAKwjgB,MAAMk6C,eAC9BA,EAAc19iB,KAAKwjgB,MAAMk6C,aAExBjgjB,EAAkBigjB,KACnB19iB,KAAKif,IAAIpG,YAAY6kiB,EAAYhyB,eAAe,GAChD1rhB,KAAKg8iB,sBAAqB,IAE9Bh8iB,KAAK86hB,4BAMTtjM,EAAUp8V,UAAUmkjB,0BAA4B,WAC5C,IAAIxgB,OAAgB7jiB,EACfuC,EAAkBuC,KAAKwjgB,MAAMu7B,iBAC9BA,EAAgB/+hB,KAAKwjgB,MAAMu7B,eAE1BthiB,EAAkBshiB,KACnB/+hB,KAAKif,IAAI6vhB,oBAAoB/P,GAC7B/+hB,KAAKg8iB,sBAAqB,IAE9Bh8iB,KAAK86hB,4BAQTtjM,EAAUp8V,UAAUokjB,aAAe,SAAUC,EAAkBC,GAC3D,IAAInijB,EAAQyC,KAAKzC,MACbE,EAAkBF,KAGlBA,EAAM05f,UAAUsR,eAAiBvogB,KAAKif,IAAIg4e,UAAUsR,gBAAkBk3C,GAAoBC,GAEtFA,EACA1/iB,KAAK2/iB,qBAGL3/iB,KAAK4/iB,kBAGHH,IAAoBC,GAAgBjijB,EAAkBF,IAAUA,EAAMoO,SAAW3L,KAAKouiB,eAAe7wiB,EAAM05f,YAC7Gx5f,EAAkBF,EAAM05f,UAAUhF,kBAAqBx0f,EAAkBF,EAAM05f,UAAUhF,gBAAgB+F,cACnD,IAAvDz6f,EAAM05f,UAAUhF,gBAAgB+F,WAAWqC,QAAkBr6f,KAAKwjgB,MAAMtR,eAGrElyf,KAAKwjgB,MAAMtR,gBACjBlyf,KAAKwjgB,MAAM1U,aAAa8oC,gBAAgB,MAHxC53hB,KAAKwjgB,MAAM1U,aAAa+wD,iBAAgBH,GAK5C1/iB,KAAK86hB,6BAETtjM,EAAUp8V,UAAUukjB,mBAAqB,WACrC,IAAI91C,EAAY7pgB,KAAKzC,MAAM05f,UAAUuR,eACjCo8B,EAAW/6B,EAAUxB,SACVu8B,EAASx8B,WACxB,GAAI3qgB,EAAkBosgB,EAAUgE,iBAC5B,IAAKpwgB,EAAkBmniB,EAASv+B,wBAAyB,CAErD,IAAIyK,OAAU51gB,EACV0piB,EAASv+B,kCAAkCF,KAC3C2K,EAAU8zB,EAASv+B,wBAEvBrmgB,KAAK8/iB,wBAAwBhvC,EAAQzZ,aAAayZ,EAAQzZ,aAAa76f,OAAS,IAAI,QAGvF,CAED,IAAIiygB,OAAWvzgB,EACX2ugB,EAAUgE,0BAA0B5H,KACpCwI,EAAW5E,EAAUgE,gBAEzB7tgB,KAAK8/iB,wBAAwBrxC,GAAU,KAG/Cj3K,EAAUp8V,UAAUwkjB,eAAiB,WACjC,IAAI/1C,EAAY7pgB,KAAKzC,MAAM05f,UAAUuR,eACjCo8B,EAAW/6B,EAAUxB,SACVu8B,EAASx8B,WACxB,GAAI3qgB,EAAkBosgB,EAAU0G,YAC5B,GAAI9ygB,EAAkBmniB,EAASp+B,sBAAwBxmgB,KAAKwjgB,MAAMtR,eAE9Dlyf,KAAKwjgB,MAAM1U,aAAa+oB,WAAU,OAEjC,CAED,IAAIvG,OAAUp2gB,EACV0piB,EAASp+B,8BAA8BL,KACvCmL,EAAUszB,EAASp+B,oBAEvBxmgB,KAAK8/iB,wBAAwBxuC,EAAQja,aAAa,IAAI,OAIzD,CAED,IAAI4W,OAAW/ygB,EACX2ugB,EAAUrD,8BAA8BP,KACxCgI,EAAWpE,EAAUrD,oBAEzBxmgB,KAAK8/iB,wBAAwB7xC,GAAU,KAO/Cz2K,EAAUp8V,UAAU0kjB,wBAA0B,SAAUj2C,EAAWk2C,GAC/D,IAAIC,EAAiBhgjB,KAAKu1iB,kBAAkB1rC,GACxCirC,EAAgB90iB,KAAK+0iB,iBAAiBlrC,GAC1C,GAAIm2C,IAAmBlL,GAAiBA,EAAcl9T,UAClD53O,KAAKigjB,gBAAgBnL,GAAe,OAEnC,CACD,IAAIoL,EAAkBpL,EAAcz9C,aAAa,GACjDr3f,KAAKzC,MAAMsb,YAAYmniB,EAAe3oD,aAAa,IAAI,GACvDr3f,KAAKif,IAAIgwhB,qBAAqBiR,EAAiBA,EAAgBluC,gBAC/DhygB,KAAKg8iB,sBAAqB,KAOlCxkN,EAAUp8V,UAAUk+iB,oBAAsB,WACtC,IAAI/7iB,EAAQyC,KAAKzC,MACb0hB,EAAMjf,KAAKif,IAKf,GAJKjf,KAAK+2iB,YACNx5iB,EAAQyC,KAAKif,IACbA,EAAMjf,KAAKzC,QAEVE,EAAkBF,KAAWE,EAAkBwhB,KAASxhB,EAAkBuC,KAAK6sR,SAAStvR,EAAO0hB,IAAO,CACvG,IACImmD,EADgBplE,KAAKqxiB,mBAAmB9ziB,EAAM05f,UAAUuR,eAAgBvpf,EAAIg4e,UAAUuR,gBAChEJ,WACtB+3C,EAAYngjB,KAAKk9iB,uBAAuB93e,GACxCg7e,EAAWpgjB,KAAKqgjB,sBAAsBj7e,GACtCz5D,EAASy0iB,EAAS1ma,UAAUs4X,eAChChygB,KAAKzC,MAAMsb,YAAYsniB,EAAU9oD,aAAa,IAAI,GAClDr3f,KAAKif,IAAIgwhB,qBAAqBmR,EAAS1ma,UAAW/tI,EAAS,GAE/D3L,KAAKsgjB,eAAetgjB,KAAKzC,MAAOyC,KAAKif,MAMzCu4U,EAAUp8V,UAAUs+iB,qBAAuB,WACvC,IAAI6G,EAAevgjB,KAAKzC,MACpBijjB,EAAaxgjB,KAAKif,IAMtB,GALKjf,KAAK+2iB,YACNwJ,EAAevgjB,KAAKif,IACpBuhiB,EAAaxgjB,KAAKzC,QAGjBE,EAAkB8ijB,KAAkB9ijB,EAAkB+ijB,KAAgB/ijB,EAAkBuC,KAAK6sR,SAAS0zR,EAAcC,IAAc,CACnI,IAAIhK,EAAgBx2iB,KAAKqxiB,mBAAmBkP,EAAatpD,UAAUuR,eAAgBg4C,EAAWvpD,UAAUuR,gBACxG,GAAIguC,EAAcpuC,WAAWjkgB,SAASq8iB,EAAWvpD,UAAUuR,gBAAiB,CACxE,IAAIgE,EAAYxsgB,KAAKy2iB,gBAAgB8J,EAAatpD,UAAUuR,eAAgBguC,GACxE/pC,EAAUzsgB,KAAKy2iB,gBAAgB+J,EAAWvpD,UAAUuR,eAAgBguC,GACxE,GAAIx2iB,KAAK22iB,aAAaH,EAAegK,EAAWvpD,UAAUuR,gBAAiB,CAC7DgE,EAAUnE,SAApB,IACIo4C,EAAcjK,EAAcpuC,WAAWmE,2BAA2BiqC,EAAeA,GACrF,GAAIiK,EAAYjkjB,OAAS,EAAG,CACxB,IAAI2jjB,EAAYngjB,KAAKu1iB,kBAAkBkL,EAAY,IAC/CL,EAAWpgjB,KAAK+0iB,iBAAiB0L,EAAYA,EAAYjkjB,OAAS,IACtEwD,KAAKzC,MAAMsb,YAAYsniB,EAAUnjiB,YAAY,GAC7C,IAAIgzgB,EAAWowB,EAAS1ma,UACxB15I,KAAKif,IAAIgwhB,qBAAqBjf,EAAUA,EAAShe,eAAiB,QAGrE,CACD,IAAI0uC,EAAuBlK,EAAcpuC,WAAWmE,2BAA2BC,EAAWA,GACtFm0C,EAAqBnK,EAAcpuC,WAAWmE,2BAA2BE,EAASA,GACtF,GAAIi0C,EAAqBlkjB,OAAS,GAAKmkjB,EAAmBnkjB,OAAS,EAAG,CAC9D2jjB,EAAYngjB,KAAKu1iB,kBAAkBmL,EAAqB,IAExDN,EAAWpgjB,KAAK+0iB,iBAAiB4L,EAAmBA,EAAmBnkjB,OAAS,IACpFwD,KAAKzC,MAAMsb,YAAYsniB,EAAUnjiB,YAAY,GACzCgzgB,EAAWowB,EAAS1ma,UACxB15I,KAAKif,IAAIgwhB,qBAAqBjf,EAAUA,EAAShe,eAAiB,MAKlFhygB,KAAKsgjB,eAAetgjB,KAAKzC,MAAOyC,KAAKif,MAMzCu4U,EAAUp8V,UAAUo+iB,eAAiB,WACjC,IAAIoH,EAAW5gjB,KAAKzC,MAChBsjjB,EAAS7gjB,KAAKif,IAKlB,GAJKjf,KAAK+2iB,YACN6J,EAAW5gjB,KAAKif,IAChB4hiB,EAAS7gjB,KAAKzC,QAEbE,EAAkBmjjB,KAAcnjjB,EAAkBojjB,KAAYpjjB,EAAkBuC,KAAK6sR,SAAS+zR,EAAUC,IAAU,CACnH,IAAIrK,OAAgB,EAEpB,IADAA,EAAgBx2iB,KAAKqxiB,mBAAmBuP,EAAS3pD,UAAUuR,eAAgBq4C,EAAO5pD,UAAUuR,iBAC1EJ,WAAWjkgB,SAAS08iB,EAAO5pD,UAAUuR,gBAAiB,CACpE,IAAIgE,EAAYxsgB,KAAKy2iB,gBAAgBmK,EAAS3pD,UAAUuR,eAAgBguC,GACpE/pC,EAAUzsgB,KAAKy2iB,gBAAgBoK,EAAO5pD,UAAUuR,eAAgBguC,GACpE,GAAIx2iB,KAAK22iB,aAAaH,EAAeqK,EAAO5pD,UAAUuR,gBAAiB,CACnE,IAAI9ic,EAAM8mc,EAAUnE,SAChB83C,EAAYngjB,KAAKu1iB,kBAAkB7ve,EAAI2xb,aAAa,IACpD+oD,EAAWpgjB,KAAK+0iB,iBAAiBrve,EAAI2xb,aAAa3xb,EAAI2xb,aAAa76f,OAAS,IAChFwD,KAAKzC,MAAMsb,YAAYsniB,EAAUnjiB,YAAY,GAC7Chd,KAAKif,IAAIgwhB,qBAAqBmR,EAAS1ma,UAAW0ma,EAAS1ma,UAAUs4X,eAAiB,OAErF,CACGmuC,EAAYngjB,KAAKu1iB,kBAAkB/oC,EAAUnE,SAAShR,aAAa,IACnE+oD,OAAW,EAEfA,EAAWpgjB,KAAK+0iB,iBAAiBtoC,EAAQpE,SAAShR,aAAaoV,EAAQpE,SAAShR,aAAa76f,OAAS,IACtGwD,KAAKzC,MAAMsb,YAAYsniB,EAAUnjiB,YAAY,GAC7Chd,KAAKif,IAAIgwhB,qBAAqBmR,EAAS1ma,UAAW0ma,EAAS1ma,UAAUs4X,eAAiB,KAIlGhygB,KAAKsgjB,eAAetgjB,KAAKzC,MAAOyC,KAAKif,MAMzCu4U,EAAUp8V,UAAUw+iB,gBAAkB,WAClC,IAAIr8iB,EAAQyC,KAAKzC,MACb0hB,EAAMjf,KAAKif,IAKf,GAJKjf,KAAK+2iB,YACNx5iB,EAAQyC,KAAKif,IACbA,EAAMjf,KAAKzC,QAEXE,EAAkBuC,KAAK6sR,SAAStvR,EAAO0hB,IAA3C,CAGA,GAAIjf,KAAK43O,SACL,GAAIr6O,EAAM05f,UAAUsR,gBAAkB9qgB,EAAkBF,EAAM05f,UAAUuR,gBAAiB,EACjF23C,EAAYngjB,KAAKu1iB,kBAAkBh4iB,EAAM05f,UAAUuR,oBACnD43C,EAAWpgjB,KAAK+0iB,iBAAiB91hB,EAAIg4e,UAAUuR,kBAE/CxogB,KAAKzC,MAAMsb,YAAYuniB,EAASpjiB,YAAY,GAC5Chd,KAAKif,IAAIgwhB,qBAAqBmR,EAAS1ma,UAAW0ma,EAAS1ma,UAAUs4X,eAAiB,KAGtFhygB,KAAKzC,MAAMsb,YAAYsniB,EAAUnjiB,YAAY,GAC7Chd,KAAKif,IAAIgwhB,qBAAqBmR,EAAS1ma,UAAW0ma,EAAS1ma,UAAUs4X,eAAiB,SAI7F,CACD,IAAIwkC,EAAgBx2iB,KAAK82iB,iBAAiBv5iB,EAAM05f,UAAUuR,gBAE1D,GAAIxogB,KAAK22iB,aAAaH,EAAej5iB,EAAM05f,UAAUuR,iBAAmBxogB,KAAK22iB,aAAaH,EAAev3hB,EAAIg4e,UAAUuR,gBAAiB,CACpI,IAAI23C,EAAYngjB,KAAKu1iB,kBAAkBiB,GACnC4J,EAAWpgjB,KAAK+0iB,iBAAiByB,GAChC/4iB,EAAkB0ijB,IAAe1ijB,EAAkB2ijB,KACpDpgjB,KAAKzC,MAAMsb,YAAYsniB,EAAUnjiB,YAAY,GAC7Chd,KAAKif,IAAIgwhB,qBAAqBmR,EAAS1ma,UAAW0ma,EAAS1ma,UAAUs4X,eAAiB,KAIlGhygB,KAAKsgjB,eAAetgjB,KAAKzC,MAAOyC,KAAKif,OAMzCu4U,EAAUp8V,UAAUwK,UAAY,WAC5B,IAAIm5hB,EACA2e,EACJ,GAAI19iB,KAAKwjgB,MAAMmf,sBAAuB,CAClC,IAAI1a,EAAejogB,KAAK8gjB,mBAAmB9gjB,KAAKzC,MAAM05f,WACtD8nC,EAAgB/+hB,KAAKu9iB,oBAAoBt1C,EAAajrf,YAAY,GAClE0giB,EAAc19iB,KAAKu9iB,oBAAoBt1C,EAAavuX,WAAW,QAG/DqlZ,EAAgB/+hB,KAAKwjgB,MAAMu7B,cAC3B2e,EAAc19iB,KAAKwjgB,MAAMk6C,YAGxBjgjB,EAAkBshiB,KACnB/+hB,KAAKzC,MAAMuxiB,oBAAoB/P,GAC/B/+hB,KAAKif,IAAIgwhB,qBAAqByO,EAAYhyB,cAAegyB,EAAY/xiB,OAAS,GAC9E3L,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAOlCxkN,EAAUp8V,UAAUgjjB,eAAiB,WAC7B3gjB,EAAkBuC,KAAKzC,SAG3ByC,KAAKif,IAAIgzhB,eACTjyiB,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAUmjjB,cAAgB,WAC5B9gjB,EAAkBuC,KAAKzC,SAG3ByC,KAAKif,IAAIyub,cACT1tc,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAU2ljB,qBAAuB,WACvC,SAAK/gjB,KAAKzC,MAAM05f,UAAUsR,gBAAiBvogB,KAAKif,IAAIg4e,UAAUsR,eACtDvogB,KAAKzC,MAAM05f,UAAUuR,iBAAmBxogB,KAAKif,IAAIg4e,UAAUuR,iBACxDxogB,KAAK+4gB,eAAe/4gB,KAAKzC,MAAM05f,UAAUuR,eAAgBxogB,KAAKzC,MAAOyC,KAAKif,OASzFu4U,EAAUp8V,UAAU0ijB,kBAAoB,SAAUlhV,GAC9C,IAAIn/N,EAAkBuC,KAAKzC,OAA3B,CAGqByC,KAAK+gjB,uBAEtB/gjB,KAAKif,IAAI6xhB,+BAA+B9wiB,MAGxCA,KAAKif,IAAIyzhB,wBAAwB91U,EAAe,EAAI,GAEpDA,GACA58N,KAAKzC,MAAMuxiB,oBAAoB9uiB,KAAKif,KAExCjf,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAU4ijB,gBAAkB,SAAUphV,GAC5C,IAAIn/N,EAAkBuC,KAAKzC,OAA3B,CAGmByC,KAAK+gjB,uBAEpB/gjB,KAAKif,IAAI01hB,6BAGT30iB,KAAKif,IAAI42hB,sBAAsBj5U,EAAe,EAAI,GAAG,GAErDA,GACA58N,KAAKzC,MAAMuxiB,oBAAoB9uiB,KAAKif,KAExCjf,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,KAM9BxkN,EAAUp8V,UAAUqjjB,iBAAmB,WAC/BhhjB,EAAkBuC,KAAKzC,SAG3ByC,KAAKif,IAAI4+f,eAAe79gB,KAAKm1iB,uBAC7Bn1iB,KAAKg8iB,sBAAqB,KAI9BxkN,EAAUp8V,UAAU4ljB,gBAAkB,SAAUv5C,GAC5C,IAAIv/G,EAAe,IAAIgmJ,GAAaluiB,KAAKwjgB,OAEzC,OADAt7G,EAAa6mJ,2BAA2BtnC,GACjCv/G,GAMX1wD,EAAUp8V,UAAUw0I,QAAU,SAAUqxa,GACpC,KAAIxjjB,EAAkBuC,KAAKzC,QAAUE,EAAkBuC,KAAKif,MACrDxhB,EAAkBuC,KAAKzC,MAAM05f,YAAcx5f,EAAkBuC,KAAKif,IAAIg4e,YAD7E,CAIA,IAAI3xM,EAAgBtlT,KAAKzC,MACrBwiiB,EAAc//hB,KAAKif,IACvB,OAAIqmS,EAAc8pP,iBAAiBrP,GACxB,GAEJ//hB,KAAKkhjB,gBAAgB57P,EAAey6O,EAAakhB,KAM5DzpN,EAAUp8V,UAAU8ljB,gBAAkB,SAAU3jjB,EAAO0hB,EAAKgiiB,GACxD,GAAI1jjB,EAAMgyiB,aAAatwhB,GAAM,CACzB,IAAI8b,EAAO9b,EACXA,EAAM1hB,EACNA,EAAQw9B,EAEZ,IAAIuqR,EAAgB/nT,EAChBwiiB,EAAc9ghB,EAElB,KAAKxhB,EAAkBF,IAAWE,EAAkBwhB,IAASxhB,EAAkBF,EAAM05f,YAAex5f,EAAkBwhB,EAAIg4e,YAAY,CAClI,IAAIpxe,EAAa,EACbE,EAAW,EACX8kf,EAActtgB,EAAMoO,OACpBopgB,EAAY91f,EAAItT,OAChBw1iB,EAAiB5jjB,EAAMmuhB,cAAc3iB,UAAU8B,EAAahlf,GAChEA,EAAas7hB,EAAerviB,MAC5B,IAAI0sJ,EAAS2iZ,EAAengjB,QAE5B,GAAIw9J,aAAkBihW,KAAoBhigB,EAAkB+gK,EAAOmhW,UAAW,CAC1E,IAAIyhD,EAAcphjB,KAAKqhjB,kBAAkB7iZ,EAAQ34I,GACjD24I,EAAS4iZ,EAAYpgjB,QACrB6kB,EAAau7hB,EAAYtviB,MAE7B,IAAIwviB,EAAeriiB,EAAIysgB,cAAc3iB,UAAUgM,EAAWhvf,GACtDw7hB,EAAYD,EAAatgjB,QAC7B+kB,EAAWu7hB,EAAaxviB,MACxB,IAAIkd,EAAO,GASX,GAPIwvI,aAAkBqqW,IAAmBo4C,GAAgC,IAAfp7hB,EACtDmJ,EAAOmjf,GAAWW,gBAEbt0W,aAAkBoqW,KAEvB55e,EAASvxB,EAAkB+gK,EAAOxvI,OAA4B,KAAjBwvI,EAAW,MAAaA,EAAOxvI,KAAKxyB,OAASqpB,EAAamJ,EAAOwvI,EAAOxvI,KAAK3K,UAAUwB,IAEpIy/R,EAAc2xM,YAAc8oC,EAAY9oC,UACpCz4V,aAAkB2zW,KACd3zW,IAAW+iZ,GAAa/iZ,aAAkBoqW,GAC1C55e,EAAOA,EAAKxyB,OAASupB,EAAWF,EAAamJ,EAAOA,EAAK3K,UAAU,EAAG0B,EAAWF,GAE5E24I,EAAOixO,oBAAoB0iI,KAEhCnjf,GAAchvB,KAAKwhjB,cAAchjZ,EAAOixO,SAAUswJ,EAAY9oC,UAAWsqD,EAAWx7hB,EAAUk7hB,UAKtG,GAAIziZ,aAAkB2zW,IAAc3zW,EAAOixO,oBAAoB0iI,GAC3Dnjf,GAAchvB,KAAKwhjB,cAAchjZ,EAAOixO,SAAUswJ,EAAY9oC,eAAW/7f,EAAW,EAAG+ljB,OAEtF,CAED,IAAIQ,EAAsBzhjB,KAAKwuf,OAAOv4a,UAAUq7d,sBAAsBhsP,EAAc2xM,WAEpF,IADAjoe,GAAc,MACNvxB,EAAkBgkjB,IAAwBA,EAAoB7pU,WAAW,CAE7E,GADA5oN,GAAc,KACVyyhB,IAAwB1hB,EAAY9oC,UACpC,OAAOjoe,EAEXyyhB,EAAsBzhjB,KAAKwuf,OAAOv4a,UAAUq7d,sBAAsBmQ,GAEjEhkjB,EAAkBgkjB,IAAyBA,EAAoB7pU,YAEhE5oN,GAAchvB,KAAKwhjB,cAAcC,EAAoBpqD,aAAa,GAAGj9e,SAAS,GAAI2lhB,EAAY9oC,UAAWsqD,EAAWx7hB,EAAUk7hB,IAQ1I,OAHIlsC,IAAegrB,EAAyB,cAAE/tB,eAAiB,IAC3Dhjf,GAAc,MAEXA,IAOfwoU,EAAUp8V,UAAU6siB,sBAAwB,SAAUyZ,GAClD,IAAIjkjB,EAAkBikjB,GAAtB,CAGA,IAAI1Z,EACJ,IAAK0Z,EAAU9pU,UAAW,CACtB,IAAIi7R,EAAa6uC,EAAUrqD,aAAa,GACpCwb,EAAWz4f,SAAS5d,OAAS,GACzBq2gB,EAAWz4f,SAAS,aAAc+uf,KAClC6+B,EAAkBn1B,EAAWz4f,SAAS,IAIlD,OAAO4thB,IAMXxwM,EAAUp8V,UAAUomjB,cAAgB,SAAU74C,EAAeg5C,EAAoBJ,EAAWx7hB,EAAUk7hB,GAClG,IAAIjyhB,EAAO,GACX,EAAG,CACC,GAAI25e,IAAkB44C,EAAW,CAC7B,GAAI54C,aAAyBC,GAAgB,CACzC,IAAInhc,EAAOkhc,EACLlrgB,EAAkBgqE,EAAKz4C,OAAuB,KAAdy4C,EAAKz4C,OACnCy4C,EAAKz4C,KAAKxyB,OAASupB,EACnBiJ,GAAcy4C,EAAKz4C,KAGnBA,GAAcy4C,EAAKz4C,KAAK3K,UAAU,EAAG0B,SAKxC4if,aAAyBE,IAAmBo4C,GAAiBl7hB,IAAa4if,EAAcnsgB,SAC7FwyB,GAAcmjf,GAAWW,iBAE7B,OAAO9jf,EAgBX,GAdI25e,aAAyBC,GACzB55e,GAAc25e,EAAc35e,KAEvB25e,aAAyBE,IAAmBo4C,EACjDjyhB,GAAcmjf,GAAWW,gBAEpBnK,aAAyBlJ,KAAoBhigB,EAAkBkrgB,EAAchJ,YAK9EgJ,EAJClrgB,EAAkBkrgB,EAAc4J,gBAIjB5J,EAAchJ,SAHdgJ,EAAc4J,gBAMlC90gB,EAAkBkrgB,EAAcl5H,UAChC,MAEJk5H,EAAgBA,EAAcl5H,gBACxBhyY,EAAkBkrgB,IAC5B,GAAIg5C,IAAuBh5C,EAAc1+c,KAAKgtc,UAC1C,OAAOjoe,EAIX,IADA,IAAIyyhB,EAAsBzhjB,KAAKwuf,OAAOv4a,UAAUq7d,sBAAsB3oC,EAAc1+c,KAAKgtc,YACjFx5f,EAAkBgkjB,IAAwBA,EAAoB7pU,WAAW,CAE7E,GADA5oN,GAAc,KACVyyhB,IAAwBE,EACxB,OAAO3yhB,EAEXyyhB,EAAsBzhjB,KAAKwuf,OAAOv4a,UAAUq7d,sBAAsBmQ,GAEtE,IAAKhkjB,EAAkBgkjB,KAAyBA,EAAoB7pU,UAAW,CAC3E,IAAIi7R,EAAa4uC,EAAoBpqD,aAAa,GAElDroe,EAAOA,EAAO,KAAOhvB,KAAKwhjB,cAAc3uC,EAAWz4f,SAAS,GAAIuniB,EAAoBJ,EAAWx7hB,EAAUk7hB,GAE7G,OAAOjyhB,GAOXwoU,EAAUp8V,UAAU+yhB,aAAe,SAAUvuB,GACzC,IAAIsuB,EAAY,GAChB,KAAMtuB,EAAWD,oBAAoBF,IACjC,OAAOyuB,EAEX,IAAIj3B,EAAY2I,EAAW3I,UACvBw4C,EAAe7vC,EAAWD,SAAS1I,UACnC2I,EAAW2S,0BAA0B9S,KACrCgwC,EAAe7vC,EAAW2S,eAAetb,WAE7C,IAAI2qD,EAAiBhiD,EAAW31c,KAAK67c,aACjCjgf,EAAa+5e,EAAWkG,aAC5B,EAAG,CAEC,GADAooB,GAAaluhB,KAAK6hjB,qBAAqB5qD,EAAW2qD,EAAgB/7hB,GAC9Doxe,IAAcw4C,EACd,MAEJx4C,EAAYj3f,KAAKsxiB,sBAAsBr6C,GACvC2qD,EAAiB,EACjB/7hB,EAAa,QACRoxe,aAAqBC,IAC9B,OAAOg3B,EAAUj+gB,QAErBunV,EAAUp8V,UAAUymjB,qBAAuB,SAAU5qD,EAAW2qD,EAAgBvgC,GAE5E,IAAK,IADD6M,EAAY,GACPhyhB,EAAI0ljB,EAAgB1ljB,EAAI+6f,EAAUI,aAAa76f,OAAQN,IAAK,CAEjE,IAAK,IADD+tD,EAAOgtc,EAAUI,aAAan7f,GACzByrB,EAAM05f,EAAa15f,EAAMsiC,EAAK7vC,SAAS5d,OAAQmrB,IAAO,CAC3D,IAAI3mB,EAAUipD,EAAK7vC,SAASuN,GAI5B,GAHI3mB,aAAmB4ngB,KACnBslB,GAAalthB,EAAQguB,MAErBhuB,aAAmBy+f,KACO,IAAtBz+f,EAAQ0+f,WAAyC,IAAtB1+f,EAAQ0+f,WACvC,OAAOwuB,EAGf7M,EAAc,EAElB,OAAO6M,GAKX12L,EAAUp8V,UAAU0mjB,oBAAsB,WACtC,IAAI7qD,EAAYj3f,KAAKzC,MAAM05f,UAI3B,IAHKj3f,KAAK43O,SAAY53O,KAAK+2iB,YACvB9/C,EAAYj3f,KAAKif,IAAIg4e,WAElBA,aAAqBC,IAAmBD,EAAUI,aAAa76f,OAAS,GAAG,CAC9E,IAAIytD,EAAOgtc,EAAUj6e,WACrB,GAAIitC,EAAK7vC,SAAS5d,OAAS,EAAG,CAC1B,IAAIwE,EAAUipD,EAAK7vC,SAAS,GACxBujgB,EAAc38gB,EAAQyuY,SAC1B,GAAIzuY,aAAmBy+f,IAAyC,IAAtBz+f,EAAQ0+f,WAAmBie,aAAuB/U,IAC5B,IAAzD+U,EAAY3uf,KAAK/e,OAAO2F,cAAcrX,QAAQ,OACjD,OAAOyC,EAGfi2f,EAAYA,EAAUoP,yBAQ9B7uK,EAAUp8V,UAAU2mjB,iBAAmB,SAAU/2Q,GAC7C,GAAIA,EAAQw7N,8BAA8B1P,GAAY,CAClD,IAAIoR,EAAQl9N,EAAQw7N,mBAAmBnP,aAAa,GACpD,OAAOr3f,KAAKk9iB,uBAAuBh1C,KAO3C1wK,EAAUp8V,UAAU4mjB,qBAAuB,SAAUh3Q,GACjD,GAAIA,EAAQq7N,kCAAkCvP,GAAY,CACtD,IAAIgG,EAAa9xN,EAAQq7N,uBACrB6B,EAAQpL,EAAWzF,aAAayF,EAAWzF,aAAa76f,OAAS,GACrE,OAAOwD,KAAKqgjB,sBAAsBn4C,KAQ1C1wK,EAAUp8V,UAAU6mjB,wBAA0B,SAAUl6e,GACpD,IAAIk1e,EAAal1e,EAAKsvb,aAAa,GACnC,OAAI4lD,aAAsB/lD,GACf+lD,EAGAj9iB,KAAK6rhB,6BAA6BoxB,IAOjDzlN,EAAUp8V,UAAUywhB,6BAA+B,SAAUzmd,GACzD,GAAIA,EAAMiyb,aAAa76f,OAAS,EAAG,CAC/B,IAEI0rgB,EAFW9ic,EAAMiyb,aAAa,GACdA,aAAa,GAChBA,aAAa,GAC9B,OAAOr3f,KAAKk9iB,uBAAuBh1C,KAQ3C1wK,EAAUp8V,UAAU8mjB,2BAA6B,SAAU98e,GACvD,GAAIA,EAAMiyb,aAAa76f,OAAS,EAAG,CAC/B,IAEI8+P,EAFUl2L,EAAMs0E,UACGA,UACEA,UACzB,OAAO15I,KAAKqgjB,sBAAsB/kT,KAQ1Ck8F,EAAUp8V,UAAU+mjB,2BAA6B,SAAU/8e,GACvD,GAAIA,EAAMiyb,aAAa76f,OAAS,EAAG,CAC/B,IAEI8+P,EAFMl2L,EAAMpoD,WACG08H,UACMA,UACzB,OAAO15I,KAAKqgjB,sBAAsB/kT,KAQ1Ck8F,EAAUp8V,UAAU60iB,mBAAqB,SAAUhmf,EAAMt+C,GACrD,IAAIq9f,EAAgB,EAChB4nC,EAAY3mf,EAAK8+c,UAAUp9f,EAAQq9f,GACnCxqW,EAASoyY,EAAU5viB,QAEvB,GADAgogB,EAAgB4nC,EAAU9+hB,OACrBrU,EAAkB+gK,IAAWwqW,IAAkBxqW,EAAOhiK,QAAUgiK,EAAOixO,oBAAoBgwH,GAAiB,CAC7G,IAAIgxC,EAAkBzwiB,KAAK0wiB,oBAAoBlyY,EAAOixO,UAClDghK,aAA2BhxC,IAAiD,IAA9BgxC,EAAgB/wC,YAC9DlhW,EAASiyY,GAGjB,OAAOjyY,GAMXg5L,EAAUp8V,UAAUgnjB,sBAAwB,SAAU5jZ,GAClD,OAAIA,EAAOk0W,wBAAwB9J,GACxBpqW,EAAOk0W,aAEdl0W,EAAOk0W,wBAAwBjT,IAAmBX,GAAcU,uBAAuBhhW,EAAOk0W,cACxD,IAAlCl0W,EAAOk0W,aAAahT,WAAqD,IAAlClhW,EAAOk0W,aAAahT,UACpDlhW,EAAOk0W,aAEXl0W,EAAOk0W,aAAa9S,WAE1BnigB,EAAkB+gK,EAAOk0W,mBAA9B,EACW1ygB,KAAKoijB,sBAAuB5jZ,EAAmB,eAQ9Dg5L,EAAUp8V,UAAUinjB,kBAAoB,SAAU7jZ,GAC9C,OAAIA,EAAOixO,oBAAoBm5H,GACpBpqW,EAAOixO,SAEdjxO,EAAOixO,oBAAoBgwH,IAAoBX,GAAcU,uBAAuBhhW,EAAOixO,UACzD,IAA9BjxO,EAAOixO,SAASiwH,WAAiD,IAA9BlhW,EAAOixO,SAASiwH,UAC5ClhW,EAAOixO,SAEXjxO,EAAOixO,SAASkwH,SAEtBligB,EAAkB+gK,EAAOixO,eAA9B,EACWzvY,KAAKqijB,kBAAmB7jZ,EAAe,WAQtDg5L,EAAUp8V,UAAU2ygB,kBAAoB,SAAU7F,GAS9C,GARIA,EAAMK,gBAEFL,EADAA,EAAMM,eAAeJ,WAAWG,cACxBvogB,KAAK+tgB,kBAAkB7F,EAAMM,eAAeJ,YAG5CF,EAAMM,eAAeJ,YAGjCF,aAAiBjB,GACjB,OAAOiB,GAOf1wK,EAAUp8V,UAAUk0iB,cAAgB,SAAU/xiB,EAAO2qgB,GACjD,GAAI3qgB,EAAMgrgB,cAAe,CACrB,IAAI+5C,EAAQ/kjB,EAAMirgB,eAClB,GAAIN,EAAMK,cAAe,CACrB,IAAIg6C,EAAQr6C,EAAMM,eAClB,GAAI85C,IAAUC,EACV,OAAOD,EAAMjrD,aAAa94f,QAAQhB,GAAS+kjB,EAAMjrD,aAAa94f,QAAQ2pgB,GAE1E,GAAIo6C,EAAMj6C,WAAak6C,EAAMl6C,SACzB,OAAOi6C,EAAM/uP,UAAYgvP,EAAMhvP,UAEnC,GAAI+uP,EAAMl6C,aAAem6C,EAAMn6C,WAC3B,OAAOk6C,EAAMj6C,SAASp5R,SAAWszU,EAAMl6C,SAASp5R,SAGpD,IAAIunU,EAAgBx2iB,KAAKqxiB,mBAAmBiR,EAAOC,GACnD,OAAI/L,EAAcpuC,WAAWjkgB,SAASo+iB,IAClCD,EAAQtijB,KAAKy2iB,gBAAgB6L,EAAO9L,GACpC+L,EAAQvijB,KAAKy2iB,gBAAgB8L,EAAO/L,GAChC8L,IAAU9L,EACHx2iB,KAAKsviB,cAAc/xiB,EAAOgljB,EAAMn6C,YAEvCm6C,IAAU/L,EACHx2iB,KAAKsviB,cAAcgT,EAAMl6C,WAAYF,GAE5CsuC,EAAcnuC,WAAak6C,EAAMl6C,SAC1BmuC,EAAcjjP,UAAYgvP,EAAMhvP,UAEvCijP,EAAcpuC,aAAem6C,EAAMn6C,WAC5BouC,EAAcnuC,SAASp5R,SAAWszU,EAAMl6C,SAASp5R,SAErDjvO,KAAKsviB,cAAcgT,EAAMl6C,WAAYm6C,EAAMn6C,aAE/CpogB,KAAKsviB,cAAckH,EAAcpuC,WAAYpogB,KAAK+tgB,kBAAkBw0C,EAAMn6C,aAGjF,IAAIA,EAAapogB,KAAK+tgB,kBAAkBxwgB,GACxC,OAAOyC,KAAKsviB,cAAclnC,EAAYF,GAGzC,GAAIA,EAAMK,cAAe,CACtBH,EAAapogB,KAAK+tgB,kBAAkB7F,GACxC,OAAOlogB,KAAKsviB,cAAc/xiB,EAAO6qgB,GAI7B,GAAI7qgB,EAAM+5f,kBAAoB4Q,EAAM5Q,gBAChC,OAAO/5f,EAAMuU,MACTo2f,EAAMp2f,MAEd,GAAIvU,EAAM+5f,2BAA2BR,IAAcoR,EAAM5Q,2BAA2BR,GAAY,CAI5F,OAFgB92f,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQhB,EAAM+5f,gBAAgB/pV,MAClDvtK,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQ2pgB,EAAM5Q,gBAAgB/pV,MAK1E,OAAO,GAKXiqL,EAAUp8V,UAAUm0iB,aAAe,SAAUhyiB,EAAO2qgB,GAChD,GAAI3qgB,EAAMgrgB,cAAe,CACrB,IAAI+5C,EAAQ/kjB,EAAMirgB,eAElB,GAAIN,EAAMK,cAAe,CACrB,IAAIg6C,EAAQr6C,EAAMM,eAClB,GAAI85C,IAAUC,EACV,OAAOD,EAAMjrD,aAAa94f,QAAQhB,GAAS+kjB,EAAMjrD,aAAa94f,QAAQ2pgB,GAE1E,GAAIo6C,EAAMj6C,WAAak6C,EAAMl6C,SACzB,OAAOi6C,EAAM/uP,UAAYgvP,EAAMhvP,UAEnC,GAAI+uP,EAAMl6C,aAAem6C,EAAMn6C,WAC3B,OAAOk6C,EAAMj6C,SAASp5R,SAAWszU,EAAMl6C,SAASp5R,SAGpD,IAAIunU,EAAgBx2iB,KAAKqxiB,mBAAmBiR,EAAOC,GACnD,OAAI/L,EAAcpuC,WAAWjkgB,SAASo+iB,IAClCD,EAAQtijB,KAAKy2iB,gBAAgB6L,EAAO9L,GACpC+L,EAAQvijB,KAAKy2iB,gBAAgB8L,EAAO/L,GAChC8L,IAAU9L,EACHx2iB,KAAKuviB,aAAahyiB,EAAOgljB,EAAMn6C,YAEtCm6C,IAAU/L,EACHx2iB,KAAKuviB,aAAa+S,EAAMl6C,WAAYF,GAE3CsuC,EAAcnuC,WAAak6C,EAAMl6C,SAC1BmuC,EAAcjjP,UAAYgvP,EAAMhvP,UAEvCijP,EAAcpuC,aAAem6C,EAAMn6C,WAC5BouC,EAAcnuC,SAASp5R,SAAWszU,EAAMl6C,SAASp5R,SAErDjvO,KAAKuviB,aAAa+S,EAAMl6C,WAAYm6C,EAAMn6C,aAE9CpogB,KAAKuviB,aAAaiH,EAAcpuC,WAAYpogB,KAAK+tgB,kBAAkBw0C,EAAMn6C,aAGhF,IAAIA,EAAapogB,KAAK+tgB,kBAAkBxwgB,GACxC,OAAOyC,KAAKuviB,aAAannC,EAAYF,GAGxC,GAAIA,EAAMK,cAAe,CACtBH,EAAapogB,KAAK+tgB,kBAAkB7F,GACxC,OAAOlogB,KAAKuviB,aAAahyiB,EAAO6qgB,GAGhC,GAAI7qgB,EAAM+5f,kBAAoB4Q,EAAM5Q,gBAChC,OAAO/5f,EAAMuU,MACTo2f,EAAMp2f,MAEd,GAAIvU,EAAM+5f,2BAA2BR,IAAcoR,EAAM5Q,2BAA2BR,GAAY,CAI5F,OAFgB92f,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQhB,EAAM+5f,gBAAgB/pV,MAClDvtK,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQ2pgB,EAAM5Q,gBAAgB/pV,MAatE,OAAO,GAMXiqL,EAAUp8V,UAAUonjB,oBAAsB,SAAUC,EAAejkZ,GAC/D,GAAIikZ,EAAcx4f,OAASu0G,EAAOv0G,KAC9B,OAAOw4f,EAAcx4f,KAAK7vC,SAAS7b,QAAQkkjB,GACvCjkZ,EAAOv0G,KAAK7vC,SAAS7b,QAAQigK,GAErC,GAAIikZ,EAAcx4f,KAAKgtc,YAAcz4V,EAAOv0G,KAAKgtc,UAC7C,OAAOwrD,EAAcx4f,KAAKgtc,UAAUI,aAAa94f,QAAQkkjB,EAAcx4f,MACjEu0G,EAAOv0G,KAAKgtc,UAAUI,aAAa94f,QAAQigK,EAAOv0G,MAE5D,IAAIulf,EAAiBiT,EAAcx4f,KAAKgtc,UACpCw4C,EAAejxY,EAAOv0G,KAAKgtc,UAC/B,GAAIu4C,EAAel4C,kBAAoBm4C,EAAan4C,gBAAiB,CACjE,GAAIk4C,EAAejnC,cACf,OAAOinC,EAAehnC,eAAenR,aAAa94f,QAAQixiB,GACtDC,EAAajnC,eAAenR,aAAa94f,QAAQkxiB,GAEpD,KAAID,EAAel4C,2BAA2B8O,IAK/C,OAAOopC,EAAel4C,gBAAgBD,aAAa94f,QAAQixiB,GACvDC,EAAan4C,gBAAgBD,aAAa94f,QAAQkxiB,GAG9D,OAAOzviB,KAAKsviB,cAAcE,EAAgBC,IAM9Cj4M,EAAUp8V,UAAUsnjB,mBAAqB,SAAUD,EAAejkZ,GAC9D,GAAIikZ,EAAcx4f,OAASu0G,EAAOv0G,KAC9B,OAAOw4f,EAAcx4f,KAAK7vC,SAAS7b,QAAQkkjB,GACvCjkZ,EAAOv0G,KAAK7vC,SAAS7b,QAAQigK,GAErC,GAAIikZ,EAAcx4f,KAAKgtc,YAAcz4V,EAAOv0G,KAAKgtc,UAC7C,OAAOwrD,EAAcx4f,KAAKgtc,UAAUI,aAAa94f,QAAQkkjB,EAAcx4f,MACjEu0G,EAAOv0G,KAAKgtc,UAAUI,aAAa94f,QAAQigK,EAAOv0G,MAE5D,IAAIulf,EAAiBiT,EAAcx4f,KAAKgtc,UACpCw4C,EAAejxY,EAAOv0G,KAAKgtc,UAC/B,GAAIu4C,EAAel4C,kBAAoBm4C,EAAan4C,gBAAiB,CACjE,GAAIk4C,EAAejnC,cACf,OAAOinC,EAAehnC,eAAenR,aAAa94f,QAAQixiB,GACtDC,EAAajnC,eAAenR,aAAa94f,QAAQkxiB,GAEpD,KAAID,EAAel4C,2BAA2B8O,IAK/C,OAAOopC,EAAel4C,gBAAgBD,aAAa94f,QAAQixiB,GACvDC,EAAan4C,gBAAgBD,aAAa94f,QAAQkxiB,GAG9D,OAAOzviB,KAAKuviB,aAAaC,EAAgBC,IAM7Cj4M,EAAUp8V,UAAUy0iB,qBAAuB,SAAU3nC,GACjD,OAAIzqgB,EAAkByqgB,EAAMqI,YACjBrI,EAAM1B,mBAEV0B,EAAMqI,YAMjB/4K,EAAUp8V,UAAUunjB,yBAA2B,SAAUz6C,GACrD,OAAIzqgB,EAAkByqgB,EAAM2F,gBACjB3F,EAAM7B,uBAEV6B,EAAM2F,gBAMjBr2K,EAAUp8V,UAAUk2iB,sBAAwB,SAAUppC,GAClD,GAAIA,EAAM1B,8BAA8BtP,GACpC,OAAOgR,EAAM1B,mBAEZ,GAAI0B,EAAM1B,8BAA8BS,GACzC,OAAOjngB,KAAK6rhB,6BAA6B3jB,EAAM1B,oBAEnD,GAAI0B,EAAM5Q,2BAA2B2O,GACjC,OAAOjmgB,KAAK4ijB,qBAAqB16C,EAAM5Q,iBAEtC,GAAI4Q,EAAM5Q,2BAA2BR,GAAY,CACjCoR,EAAM5Q,gBACvB,OAAOt3f,KAAK+hjB,iBAAiB75C,EAAM5Q,iBAElC,OAAI4Q,EAAM5Q,2BAA2B8O,IAAsBpmgB,KAAKk4iB,mBAC1Dl4iB,KAAK6ijB,gCAAgC36C,QAD3C,GAQT1wK,EAAUp8V,UAAUynjB,gCAAkC,SAAU36C,GAC5D,IACIgT,EADAjT,EAAeC,EAAM5Q,gBAEzB,IAAyD,IAArD2Q,EAAaP,iBAAiBnpgB,QAAQ,UACtC28gB,EAAYjT,EAAa16V,KAAKy6V,aAAahrf,eAE1C,CAAA,IAAIirf,EAAa16V,KAAKmuJ,SAIvB,OAHAw/M,EAAYjT,EAAa16V,KAAKmuJ,SAASqsM,aAAa/qf,WAKxD,OAAIk+f,aAAqBhkB,GACdgkB,EAGAl7gB,KAAKw1iB,yBAAyBt6B,IAM7C1jL,EAAUp8V,UAAU0njB,mCAAqC,SAAU56C,GAC/D,IACI6mB,EADA9mB,EAAeC,EAAM5Q,gBAEzB,IAAyD,IAArD2Q,EAAaP,iBAAiBnpgB,QAAQ,UACtCwwhB,EAAgB9mB,EAAa16V,KAAKw6V,aAAaruX,cAE9C,CAAA,IAAIuuX,EAAa16V,KAAKw4V,aAIvB,OAHAgpB,EAAgB9mB,EAAa16V,KAAKw4V,aAAaiC,aAAatuX,UAKhE,OAAIq1Y,aAAyB73B,GAClB63B,EAGA/uhB,KAAKw1iB,yBAAyBzmB,IAO7Cv3L,EAAUp8V,UAAU81iB,0BAA4B,SAAUhpC,GACtD,OAAIA,EAAM7B,kCAAkCnP,GACjCgR,EAAM7B,uBAER6B,EAAM7B,kCAAkCY,GACtCjngB,KAAKkijB,2BAA4Bh6C,EAA4B,wBAEpEA,EAAM5Q,2BAA2B2O,GAC1BjmgB,KAAK+ijB,yBAA0B76C,EAAqB,iBAEtDA,EAAM5Q,2BAA2BR,GAC/B92f,KAAKgijB,qBAAqB95C,EAAM5Q,iBAElC4Q,EAAM5Q,2BAA2B8O,IAAsBpmgB,KAAKk4iB,mBAC1Dl4iB,KAAK8ijB,mCAAmC56C,QAD9C,GAST1wK,EAAUp8V,UAAU8hjB,uBAAyB,SAAUh1C,GACnD,OAAIA,aAAiBhR,GACVgR,EAEFA,aAAiBjB,GACfjngB,KAAK6rhB,6BAA6B3jB,QADxC,GAST1wK,EAAUp8V,UAAUiljB,sBAAwB,SAAUn4C,GAClD,OAAIA,aAAiBhR,GACVgR,EAEFA,aAAiBjB,GACfjngB,KAAKkijB,2BAA2Bh6C,QADtC,GAST1wK,EAAUp8V,UAAU42iB,eAAiB,SAAU/6C,EAAW15f,EAAO0hB,GAE7D,IAAK,IAAI/iB,EADG+6f,EAAUI,aAAa94f,QAAQhB,EAAM0sD,MAC7B/tD,EAAI+6f,EAAUI,aAAa76f,OAAQN,IACnD,IAAK,IAAIwnB,EAAI,EAAGA,EAAIuze,EAAUI,aAAan7f,GAAGke,SAAS5d,OAAQknB,IAAK,CAChE,IAAI86I,EAASy4V,EAAUI,aAAan7f,GAAGke,SAASsJ,GAChD,GAAsB,IAAlB86I,EAAOhiK,OAAX,CAGA,GAAIgiK,IAAWv/I,EACX,OAAO,EAEX,GAAIu/I,aAAkBoqW,IAAkBpqW,aAAkBqqW,IAClDrqW,aAAkBihW,IAAmBX,GAAcU,uBAAuBhhW,GAC9E,OAAO,GAInB,OAAO,GAMXg5L,EAAUp8V,UAAUsziB,mBAAqB,SAAUz3C,EAAW+rD,EAAS5B,GAEnE,IAAK,IADD5kjB,EAAS,EACJknB,EAAI,EAAGA,EAAIuze,EAAUI,aAAa76f,OAAQknB,IAAK,CACpD,IAAIumC,EAAOgtc,EAAUI,aAAa3ze,GAClC,GAAIs/hB,aAAmB37C,IAAc27C,IAAY/4f,EAAM,CAC/Cm3f,IACA5kjB,GAAUwD,KAAKquiB,cAAcpkf,EAAMm3f,IAEvC,MAEJ5kjB,GAAUwD,KAAKquiB,cAAcpkf,GAEjC,OAAOztD,GAMXg7V,EAAUp8V,UAAUiziB,cAAgB,SAAUpkf,EAAMm3f,GAEhD,IAAK,IADD5kjB,EAAS,EACJN,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAAK,CAC3C,IAAI8E,EAAUipD,EAAK7vC,SAASle,GAC5B,KAAI8E,aAAmBmogB,IAAvB,CAGA,GAAIi4C,GAAeA,EAAYpgjB,mBAAmBmxgB,IAAcivC,EAAYpgjB,UAAYA,EAAS,CAC7FxE,GAAU4kjB,EAAYtviB,MACtB,MAEJtV,GAAUwE,EAAQxE,QAEtB,OAAOA,GAMXg7V,EAAUp8V,UAAU6njB,YAAc,SAAUhsD,EAAWtrf,GAInD,IAAK,IAHDs+C,OAAO/uD,EACPsB,EAAS,EACT0mjB,EAAcjsD,EAAUI,aAAa76f,OAChCknB,EAAI,EAAGA,EAAIw/hB,IAChBj5f,EAAOgtc,EAAUI,aAAa3ze,GAC9BlnB,EAASwD,KAAKquiB,cAAcpkf,KACxBt+C,GAAUnP,GAAUknB,IAAMw/hB,EAAc,IAHfx/hB,IAOzB/X,GAAkBnP,EAG1B,OAASytD,KAAQA,EAAMt+C,OAAUA,IAKrC6rV,EAAUp8V,UAAU+njB,eAAiB,SAAUl5f,EAAMt+C,GAGjD,IAAK,IADD3K,OAAU9F,EACLgB,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAEtC,MADA8E,EAAUipD,EAAK7vC,SAASle,cACDitgB,IAAvB,CAGA,KAAIx9f,EAAS3K,EAAQxE,SACXmP,IAAW3K,EAAQxE,OAAS,GAAKiB,EAAkBuD,EAAQyuY,UAIjE,MAHA9jY,GAAkB3K,EAAQxE,OAMlC,OAASwE,QAAWA,EAAS8Q,MAASnG,IAM1C6rV,EAAUp8V,UAAUgziB,eAAiB,SAAUn3C,GAE3C,GAAIA,EAAUI,aAAa76f,OAAS,EAAG,CACnC,IAAI66f,EAAeJ,EAAUI,aAAa,GAC1C,OAAOr3f,KAAK2wiB,mBAAmBt5C,GAEnC,OALkB,GAUtB7/J,EAAUp8V,UAAUu1iB,mBAAqB,SAAU1mf,GAE/C,IAAK,IADD4gd,EAAc,EACT3ugB,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAAK,CAC3C,IAAIsiK,EAASv0G,EAAK7vC,SAASle,GAC3B,GAAsB,IAAlBsiK,EAAOhiK,OAAX,CAGA,GAAIgiK,aAAkBoqW,IAAkBpqW,aAAkBqqW,IAAmBrqW,aAAkBsqW,IACvFtqW,aAAkBihW,IAAmBX,GAAcU,uBAAuBhhW,GAC9E,OAAOqsW,EAEPrsW,aAAkB2qW,KAGtB0B,GAAersW,EAAOhiK,SAE1B,OAAOqugB,GAMXrzK,EAAUp8V,UAAU61iB,yBAA2B,SAAUlpe,GACrD,IAAKtqE,EAAkBsqE,EAAKs+b,wBAAyB,CACjD,GAAKrmgB,KAAK+2iB,UASL,CACD,IAAIpwC,EAAU5+b,EAAKs+b,uBAAuBhP,aAE1C,OADI6Q,EAAQvB,EAAQA,EAAQnqgB,OAAS,cAChB06f,GACVgR,EAIAlogB,KAAKojjB,8BAA8Bl7C,EAAM7Q,aAAa6Q,EAAM7Q,aAAa76f,OAAS,IAhB7F,IAAI0rgB,EACJ,OADIA,EAAQngc,EAAKs+b,uBAAuBhP,aAAa,cAChCH,GACVgR,EAGAlogB,KAAKqjjB,2BAA2Bn7C,GAenD,OAAOlogB,KAAKsjjB,wBAAwBv7e,EAAKsgc,WAM7C7wK,EAAUp8V,UAAUkojB,wBAA0B,SAAU59e,GACpD,IAAKjoE,EAAkBioE,EAAI2gc,wBAAyB,CAChD,GAAKrmgB,KAAK+2iB,UAMN,OAAO/2iB,KAAKojjB,8BAA8B19e,EAAI2gc,wBAL9C,IACI6B,EADOxic,EAAI2gc,uBAAuBhP,aAAa,GAClCA,aAAa,GAC9B,OAAOr3f,KAAKk9iB,uBAAuBh1C,GAM3C,OAAOlogB,KAAK0xiB,0BAA0Bhse,EAAI0ic,aAK9C5wK,EAAUp8V,UAAUg2iB,sBAAwB,SAAUlpC,GAClD,OAAIA,EAAM1B,8BAA8BtP,GAC7BgR,EAAM1B,mBAER0B,EAAM1B,8BAA8BS,GACrCjngB,KAAK43O,SAAW53O,KAAK+2iB,UACd/2iB,KAAKmijB,2BAA2Bj6C,EAAM1B,oBAGtCxmgB,KAAKujjB,0BAA0Br7C,EAAM1B,mBAAmBnP,aAAa,IAGhF6Q,EAAM5Q,2BAA2B2O,GAC1BjmgB,KAAK+1iB,qBAAqB7tC,EAAM5Q,iBAElC4Q,EAAM5Q,2BAA2BR,GAC/B92f,KAAKwjjB,iBAAiBt7C,EAAM5Q,sBADlC,GAST9/J,EAAUp8V,UAAU26iB,qBAAuB,SAAUhue,GACjD,IAAKtqE,EAAkBsqE,EAAKy+b,oBAAqB,CAC7C,GAAIxmgB,KAAK43O,SAAW53O,KAAK+2iB,UAAW,CAEhC,IAAI7uC,EAAQngc,EAAKy+b,mBAAmBnP,aAAatvb,EAAKy+b,mBAAmBnP,aAAa76f,OAAS,GAC/F,OAAOwD,KAAKqgjB,sBAAsBn4C,GAKlC,OADIA,EAAQngc,EAAKy+b,mBAAmBnP,aAAa,cAC5BH,GACVgR,EAGAlogB,KAAKujjB,0BAA0Br7C,EAAM7Q,aAAa,IAIrE,OAAOr3f,KAAKyjjB,oBAAoB17e,EAAKsgc,WAMzC7wK,EAAUp8V,UAAUqojB,oBAAsB,SAAU/9e,GAChD,IAAKjoE,EAAkBioE,EAAI8gc,oBAAqB,CAE5C,GADyBxmgB,KAAK43O,SAAW53O,KAAK+2iB,UACtB,CAEpB,IAAIhve,EAAOrC,EAAI8gc,mBAAmBnP,aAAa3xb,EAAI8gc,mBAAmBnP,aAAa76f,OAAS,GACxF0rgB,EAAQngc,EAAKsvb,aAAatvb,EAAKsvb,aAAa76f,OAAS,GACzD,OAAOwD,KAAKqgjB,sBAAsBn4C,GAGlC,OAAOlogB,KAAKujjB,0BAA0B79e,EAAI8gc,oBAGlD,OAAOxmgB,KAAKoxiB,sBAAsB1re,EAAI0ic,aAM1C5wK,EAAUp8V,UAAUoojB,iBAAmB,SAAUx4Q,GAC7C,GAAIA,EAAQw7N,8BAA8B1P,GAAY,CAClD,IAAIoR,EAAQl9N,EAAQw7N,mBAAmBnP,aAAa,GACpD,OAAI6Q,aAAiBhR,GACVgR,EAGHlogB,KAAK43O,SAAW53O,KAAK+2iB,UACd/2iB,KAAKmijB,2BAA2Bj6C,GAGhClogB,KAAKujjB,0BAA0Br7C,EAAM7Q,aAAa,MASzE7/J,EAAUp8V,UAAUmojB,0BAA4B,SAAU79e,GAEtD,IAAIqC,EAAOrC,EAAI2xb,aAAa,GAC5B,GAAIr3f,KAAKzC,MAAM05f,UAAUsR,eAClB7ic,EAAI0ic,WAAWjkgB,SAASnE,KAAKzC,MAAM05f,UAAUuR,gBAAiB,CACjE,IAAIgE,EAAYxsgB,KAAK0jjB,eAAeh+e,EAAI0ic,WAAYpogB,KAAKzC,MAAM05f,UAAUuR,gBACzEzgc,EAAO/nE,KAAK60iB,qBAAqBnve,EAAK8mc,EAAWxsgB,KAAKm1iB,uBAAuB,GAEjF,IAAIjtC,EAAQngc,EAAKsvb,aAAa,GAC9B,OAAOr3f,KAAKk9iB,uBAAuBh1C,IAKvC1wK,EAAUp8V,UAAUs2iB,0BAA4B,SAAUxpC,GACtD,OAAIA,EAAM7B,kCAAkCnP,GACjCgR,EAAM7B,uBAER6B,EAAM7B,kCAAkCY,GACxCjngB,KAAK+2iB,UAKC/2iB,KAAKojjB,8BAA8Bl7C,EAAM7B,uBAAuBhP,aAAa6Q,EAAM7B,uBAAuBhP,aAAa76f,OAAS,IAJhIwD,KAAKqjjB,2BAA2Bn7C,EAAM7B,wBAOjD6B,EAAM5Q,2BAA2B2O,GAC1BjmgB,KAAKixiB,yBAAyB/oC,EAAM5Q,iBAEtC4Q,EAAM5Q,2BAA2BR,GAC/B92f,KAAK2jjB,qBAAqBz7C,EAAM5Q,sBADtC,GAST9/J,EAAUp8V,UAAUuojB,qBAAuB,SAAU34Q,GACjD,GAAIA,EAAQq7N,kCAAkCvP,GAAY,CACtD,IAAI8wB,EAAiB58O,EAAQq7N,uBACzB6B,EAAQ0f,EAAevwB,aAAauwB,EAAevwB,aAAa76f,OAAS,GAC7E,GAAI0rgB,aAAiBhR,GACjB,OAAOgR,EAGP,GAAKlogB,KAAK+2iB,UAGL,CACD,IAAIr6B,EAAcxU,EAElB,OAAOlogB,KAAKojjB,8BAA8B1mC,EAAYrlB,aAAaqlB,EAAYrlB,aAAa76f,OAAS,IALrG,OAAOwD,KAAKqjjB,2BAA2Bn7C,KAcvD1wK,EAAUp8V,UAAUgojB,8BAAgC,SAAU19e,GAE1D,IAAIqC,EAAOrC,EAAI2xb,aAAa3xb,EAAI2xb,aAAa76f,OAAS,GACtD,GAAIwD,KAAKzC,MAAM05f,UAAUsR,eAClB7ic,EAAI0ic,WAAWjkgB,SAASnE,KAAKzC,MAAM05f,UAAUuR,gBAAiB,CACjE,IAAIgE,EAAYxsgB,KAAK0jjB,eAAeh+e,EAAI0ic,WAAYpogB,KAAKzC,MAAM05f,UAAUuR,gBACzEzgc,EAAO/nE,KAAKo1iB,oBAAoB1ve,EAAK8mc,EAAWxsgB,KAAKm1iB,uBAAuB,GAEhF,IAAIjtC,EAAQngc,EAAKsvb,aAAatvb,EAAKsvb,aAAa76f,OAAS,GACzD,OAAOwD,KAAKqgjB,sBAAsBn4C,IAMtC1wK,EAAUp8V,UAAUg6iB,oBAAsB,SAAU1ve,EAAK8mc,EAAWo3C,EAAWC,GAC3E,IAAItmjB,EAAQyC,KAAK88iB,YAAYp3e,EAAK8mc,GAC9Bvtf,EAAM1hB,EAAQivgB,EAAU/D,WAAWv6M,UACnCp5N,GAAO,EACX,GAAIv3F,GAASqmjB,GAAaA,EAAY3kiB,EAClC,IAAK,IAAI/iB,EAAIwpE,EAAI2xb,aAAa76f,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACnD,IAAIsQ,EAAOxM,KAAK88iB,YAAYp3e,EAAKA,EAAI2xb,aAAan7f,IAClD,GAAI4igB,GAAc/+d,MAAMxiC,EAAO,IAAMuhgB,GAAc/+d,MAAMvzB,EAAM,IAC3Dsyf,GAAc/+d,MAAMvzB,EAAM,GAAKsyf,GAAc/+d,MAAM9gB,EAAK,GAExD,OADA61E,GAAO,EACApvB,EAAI2xb,aAAan7f,QAKhC,IAASA,EAAIwpE,EAAI2xb,aAAa76f,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAEnD,IADIsQ,EAAOxM,KAAK88iB,YAAYp3e,EAAKA,EAAI2xb,aAAan7f,MACtC0njB,GAAap3iB,EAAOk5D,EAAI2xb,aAAan7f,GAAGusgB,WAAWv6M,UAAY01P,EAEvE,OADA9ud,GAAO,EACApvB,EAAI2xb,aAAan7f,GAIpC,GAAI44F,EAAM,CACN,IAAKr3F,EAAkBioE,EAAI2gc,yBAA2Bw9C,EAClD,OAAO7jjB,KAAKo1iB,oBAAoB1ve,EAAI2gc,uBAAwBmG,EAAWo3C,EAAWC,GAEjF,IAAKpmjB,EAAkBioE,EAAI8gc,sBAAwBq9C,EACpD,OAAO7jjB,KAAKo1iB,oBAAoB1ve,EAAI8gc,mBAAoBgG,EAAWo3C,EAAWC,GAGtF,OAAOn+e,EAAI2xb,aAAa3xb,EAAI2xb,aAAa76f,OAAS,IAMtDg7V,EAAUp8V,UAAUsojB,eAAiB,SAAUt+e,EAAOykc,GAClD,KAAOA,EAAUzB,WAAWG,eAAe,CACvC,GAAInjc,EAAMhyB,OAAOy2d,EAAUzB,YACvB,OAAOyB,EAEXA,EAAYA,EAAUzB,WAAWI,eAErC,OAAOqB,GAMXryK,EAAUp8V,UAAUiojB,2BAA6B,SAAUj+e,GACvD,GAAIA,EAAMiyb,aAAa76f,OAAS,EAAG,CAC/B,IAEI8+P,EAFUl2L,EAAMiyb,aAAajyb,EAAMiyb,aAAa76f,OAAS,GACtC66f,aAAa,GACXA,aAAa,GACtC,OAAOr3f,KAAKk9iB,uBAAuB5hT,KAQ3Ck8F,EAAUp8V,UAAUq2iB,uBAAyB,SAAUx6C,EAAWtrf,GAC9D,GAAe,IAAXA,EACA,OAAO,EAIX,IAAK,IAFDm4iB,EAAc,EACd5kiB,EAAQ,EACHhjB,EAAI,EAAGA,EAAI+6f,EAAUI,aAAa76f,OAAQN,IAE/C,IAAK,IADD22gB,EAAa5b,EAAUI,aAAan7f,GAC/BwnB,EAAI,EAAGA,EAAImvf,EAAWz4f,SAAS5d,OAAQknB,IAAK,CACjD,IAAI86I,EAASq0W,EAAWz4f,SAASsJ,GACjC,GAAsB,IAAlB86I,EAAOhiK,OAAX,CAGA,GAAImP,GAAUuT,EAAQs/I,EAAOhiK,OACzB,OAAOmP,EAAS,IAAMuT,EAAQ4kiB,EAAcn4iB,EAAS,GAErD6yJ,aAAkBoqW,IAAkBpqW,aAAkBqqW,IAClDrqW,aAAkBihW,IAAmBX,GAAcU,uBAAuBhhW,MAC9EslZ,EAAc5kiB,EAAQs/I,EAAOhiK,QAEjC0iB,GAASs/I,EAAOhiK,QAGxB,OAAOmP,EAAS,IAAMuT,EAAQ4kiB,EAAcn4iB,EAAS,GAMzD6rV,EAAUp8V,UAAUo1iB,mBAAqB,SAAUvmf,EAAMt+C,GAErD,IAAK,IADDuT,EAAQ,EACHhjB,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAAK,CAC3C,IAAIsiK,EAASv0G,EAAK7vC,SAASle,GAC3B,KAAsB,IAAlBsiK,EAAOhiK,QAAgBgiK,aAAkB2qW,IAA7C,CAGA,GAAIx9f,EAASuT,EAAQs/I,EAAOhiK,SACpBgiK,aAAkBoqW,IAAkBpqW,aAAkBqqW,IAClDrqW,aAAkBihW,IAAmBX,GAAcU,uBAAuBhhW,IAC9E,OAAQ7yJ,EAASuT,EAAQvT,EAASuT,GAAS,EAGnDA,GAASs/I,EAAOhiK,QAEpB,OAAOmP,GAMX6rV,EAAUp8V,UAAUmkhB,qBAAuB,SAAUtoB,EAAW96O,EAAWE,GACvE,IAAIhtP,EAAOrvB,KAAKwuf,OAAO0uB,WAAWqC,qBAAqBtoB,EAAU5E,iBAC7D8gB,EAAiB9jf,EAAKqwf,eACtB1vd,EAAY3gC,EAAK+1d,OACjB2+D,EAAoB5wC,EACxB,GAAIlc,aAAqBC,GAAiB,CAEtC,GAAID,EAAUI,aAAa76f,OAAS,EACfy6f,EAAUI,aAAa,GAG5C,IAAI7lP,EAAcxxQ,KAAKwuf,OAAOlhc,OAAOmyd,eAAexoB,EAAWjnc,GAC3Dstc,EAAgBt9f,KAAKwuf,OAAOlhc,OAAOkyd,iBAAiBvoB,GACxD96O,EAAY4nS,EAAoB5wC,EAChC92P,EAAersN,EAAY+zf,GAAqB10hB,EAAK+1d,OAAS+tB,GAE9D,IAAI3V,EAAkBvG,EAAUhF,gBAAgBuL,gBACxB,aAApBA,EACIhsP,EAAcxhN,EACdqsN,GAAgB7K,EAAcxhN,EAG9BmsN,GAAa3K,EAAcxhN,EAGN,YAApBwtc,EACLrhP,GAAa3K,GAAe2K,EAAY9sP,EAAK+1d,OAAS/oO,GAEjD7K,EAAc2K,EAAY9sP,EAAK+1d,OAAS/oO,IAC7CF,GAAa3K,GAAe2K,EAAY9sP,EAAK+1d,OAAS/oO,IAE1DF,GAAamhP,EACbjhP,GAAgB46O,EAAUhF,gBAAgBsL,aAE9C,OAASvnf,MAASqZ,EAAK81d,MAAOpve,OAAUsZ,EAAK+1d,OAAQjpO,UAAaA,EAAWE,aAAgBA,IAKjGm7E,EAAUp8V,UAAU+ziB,4BAA8B,SAAUllf,EAAMt+C,EAAQujiB,GACtE,GAAIjlf,EAAKgtc,UAAUr/Q,UAAW,CAC1B,IAAI85R,EAAkBznd,EAAKgtc,UACvBzqf,EAAOklgB,EAAgB3kgB,EAC3B,GAAI2kgB,EAAgBra,aAAa76f,OAAS,EAAG,CACzC,IAAIq2gB,EAAanB,EAAgBra,aAAa,GAC9C7qf,EAAOxM,KAAKg3S,QAAQ67N,GAExB,IAEIxjf,EAAOrvB,KAAKu/gB,qBAAqBt1d,EAAKgtc,UAF1B,EACG,GAKnB,OAHItrf,EAAS,IACTa,GAAQ6iB,EAAKrZ,OAEV,IAAI6+B,GAAMroC,EAAMklgB,EAAgB1kgB,EANvB,GAShB,IAAIg8f,EAAgB,EAChB4nC,EAAY3mf,EAAK8+c,UAAUp9f,EAAQq9f,GACnCxqW,EAASoyY,EAAU5viB,QAYvB,OAXAgogB,EAAgB4nC,EAAU9+hB,MAWnB9R,KAAKgkjB,0BAA0BxlZ,EAAQwqW,EAAekmC,IAOrE13M,EAAUp8V,UAAUggjB,yBAA2B,SAAU79iB,EAAO0hB,GAC5D,IAAI1hB,EAAM05f,UAAUsR,eAAmBtpf,EAAIg4e,UAAUsR,eAC5ChrgB,EAAM05f,UAAUuR,eAAep1d,OAAOn0B,EAAIg4e,UAAUuR,kBACtDxogB,KAAK+4gB,eAAex7gB,EAAM05f,UAAUuR,eAAgBjrgB,EAAO0hB,GAG7D,CACD,IAAIu/I,OAAStjK,EACT4W,EAAQ,EACZ,IAAK9R,KAAKwjgB,MAAMtR,gBAAkB30f,EAAM05f,YAAch4e,EAAIg4e,UACtD,GAAI15f,EAAMoO,OAAS,IAAMsT,EAAItT,OAAQ,CACjC,IAAIiliB,EAAY3xhB,EAAIysgB,cAAc3iB,UAAU9pf,EAAItT,OAAQmG,GAGxD,GAFA0sJ,EAASoyY,EAAU5viB,QACnB8Q,EAAQ8+hB,EAAU9+hB,MACd0sJ,aAAkBqqW,GAAiB,CACjBtrgB,EAAMmuhB,cAAcnvd,UAAUiiG,EAAQ,KACpCjhK,EAAMoO,SACtB6yJ,OAAStjK,QAIhB,CACD,IAAI8tgB,EAAgB,EAChBm4C,EAAiB5jjB,EAAMmuhB,cAAc3iB,UAAUxrgB,EAAMoO,OAAQq9f,GAC7Di7C,EAAc9C,EAAengjB,SACjCgogB,EAAgBm4C,EAAerviB,SACTmyiB,EAAYznjB,SAC9BynjB,EAAcjkjB,KAAKmyiB,0BAA0B8R,EAAaj7C,IAE9D,IAAIs4C,EAAeriiB,EAAIysgB,cAAc3iB,UAAU9pf,EAAItT,OAAQq9f,GACvDu4C,EAAYD,EAAatgjB,QAG7B,GAFAgogB,EAAgBs4C,EAAaxviB,MAEzBmyiB,aAAuBxkD,IAAmB8hD,aAAqB9hD,KAAoBhigB,EAAkBwmjB,EAAY1xC,gBAAiB,CAClI,IAAI2xC,EAAaD,EAAY1xC,eAAe9iI,SACxCy0K,aAAsBr7C,IAAmBq7C,EAAWz0K,WAAa8xK,IACjE/iZ,EAAS0lZ,IAKzB,IAAKlkjB,KAAKwjgB,MAAMtR,gBAAkB1zV,aAAkBqqW,IAAmB7ogB,KAAKwjgB,MAAM3U,iBAAkB,CAChG,IAAIs1D,EAAgBnkjB,KAAKokjB,sBAAsB5lZ,EAAQ1sJ,GACnDoggB,EAAaiyC,EAAcnjjB,QAC/B8Q,EAAQqyiB,EAAcryiB,MAClB9R,KAAKwjgB,MAAMk2B,yBACX15hB,KAAKwjgB,MAAMvhB,mBAAmBoiE,qBAAqBnyC,GACnDlygB,KAAKwjgB,MAAMvhB,mBAAmBqiE,oBAE9BtkjB,KAAKwuf,OAAOmoC,eACZ32hB,KAAKwuf,OAAO/xb,WAAW/3D,MAAMosC,QAAU,OACvC9wC,KAAKwuf,OAAO7pX,SAASjgI,MAAMosC,QAAU,aAIzC9wC,KAAKsuV,UAAU/wV,EAAM05f,UAAW15f,EAAO0hB,QAnD3Cjf,KAAKukjB,cAAchnjB,EAAM05f,UAAUuR,eAAgBxogB,KAAMzC,EAAO0hB,IA0DxEu4U,EAAUp8V,UAAUkzV,UAAY,SAAU2oK,EAAW15f,EAAO0hB,GACxD,IAAIqzhB,EAAsB,EACtB0B,EAAoB,EACpBwQ,OAAetpjB,EACfupjB,OAAavpjB,EACb+whB,OAAkB/whB,EAClBwpjB,OAAgBxpjB,EAEhBypjB,EAAe3kjB,KAAK4kjB,mBAAmB3tD,EAAW15f,EAAOinjB,EAAclS,GAGvErmB,EADAxuhB,EADJ+mjB,EAAeG,EAAa3jjB,SAENi2f,EAAUI,aAAa,GAGvBmtD,EAAav6f,KAEnCqof,EAAsBqS,EAAa7yiB,MACnC,IAAI+yiB,EAAa7kjB,KAAK8kjB,iBAAiB7liB,EAAKwliB,EAAYzQ,GAGpD0Q,GAFJD,EAAaI,EAAW7jjB,SAEJyjjB,EAAWx6f,KAGXhrC,EAAIg4e,UAAUI,aAAap4e,EAAIg4e,UAAUI,aAAa76f,OAAS,GAEnFw3iB,EAAoB6Q,EAAW/yiB,MAC/B,IAAIpF,EAAM,EACNF,EAAO,EAKX,GAJK/O,EAAkBwuhB,KACnBv/gB,EAAM1M,KAAKo3S,OAAO60O,GAClBz/gB,EAAOxM,KAAKq2iB,gBAAgBpqB,EAAiBu4B,EAAclS,IAE1D70iB,EAAkBwuhB,IAAoBA,IAAoBy4B,EAK1D,CACD,IAAKjnjB,EAAkBwuhB,GAAkB,CACrC,IAAIl/gB,EAAIk/gB,EAAgBh1B,UAAUlqf,EAClC/M,KAAKq7iB,sBAAsBpvB,EAAiBjshB,KAAKkzR,SAAS+4P,GAAiB,IAASz/gB,EAAOO,GAAIP,EAAME,GACrG,IAAI+8R,EAAYwiP,EAAgBh1B,UAAUI,aAAa94f,QAAQ0thB,GAG/D,GADAjshB,KAAK+kjB,mBAAmB9tD,EAAWxtN,EAAY,EAAGi7Q,EAAeD,EAAYzQ,IAClB,IAAvD/8C,EAAUI,aAAa94f,QAAQ0gB,EAAIysgB,eACnC,OAGR1rhB,KAAKgljB,mBAAmB/tD,EAAW15f,EAAO0hB,OAhBgC,CAE1E,IAAIxS,EAAQzM,KAAKq2iB,gBAAgBqO,EAAeD,EAAYzQ,GAC5Dh0iB,KAAKq7iB,sBAAsBpvB,EAAiBx/gB,EAAQD,EAAMA,EAAME,KAgBxE8qV,EAAUp8V,UAAU4pjB,mBAAqB,SAAU/tD,EAAW15f,EAAO0hB,GACjE,IAAIipf,EAAQjR,EAAUuP,mBACjB/ogB,EAAkByqgB,KACfA,aAAiBhR,GACjBl3f,KAAKsuV,UAAU45K,EAAO3qgB,EAAO0hB,GAG7Bjf,KAAKiljB,eAAe/8C,EAAO3qgB,EAAO0hB,KAS9Cu4U,EAAUp8V,UAAUwpjB,mBAAqB,SAAU3tD,EAAW15f,EAAOinjB,EAAclS,GAC/E,IAAI3miB,EAASsrf,IAAc15f,EAAM05f,UAAY15f,EAAMoO,OAAS3L,KAAKouiB,eAAen3C,GAC5EkqD,OAAiBjmjB,EASrB,GAPIimjB,EADAlqD,IAAc15f,EAAM05f,UACH15f,EAAMmuhB,cAAc3iB,UAAUp9f,EAAQ2miB,GAGtCr7C,EAAUj6e,WAAW+rf,UAAUp9f,EAAQ2miB,GAE5DkS,EAAerD,EAAengjB,QAC9BsxiB,EAAsB6O,EAAerviB,MACjC0yiB,aAAwB/kD,GAAiB,CACzC,IAAI+xC,EAAaxxiB,KAAKqhjB,kBAAkBmD,EAAclS,GACtDkS,EAAehT,EAAWxwiB,QAC1BsxiB,EAAsBd,EAAW1/hB,MAKrC,OAHInG,IAAW3L,KAAK0uiB,mBAAmBnxiB,EAAM05f,WAAa,GACtDq7C,KAGAxgiB,MAASwgiB,EAAqBtxiB,QAAWwjjB,IAOjDhtN,EAAUp8V,UAAU0pjB,iBAAmB,SAAU7liB,EAAKwliB,EAAYzQ,GAC9D,IAAIsN,EAAeriiB,EAAIysgB,cAAc3iB,UAAU9pf,EAAItT,OAAQqoiB,GAG3D,GAFAyQ,EAAanD,EAAatgjB,QAC1BgziB,EAAoBsN,EAAaxviB,MAC7B2yiB,aAAsBhlD,GAAiB,CACvC,IAAI+xC,EAAaxxiB,KAAKqhjB,kBAAkBoD,EAAYzQ,GACpDyQ,EAAajT,EAAWxwiB,QACxBgziB,EAAoBxC,EAAW1/hB,MAMnC,OAJgBmN,EAAIg4e,UAAUI,aAAa94f,QAAQ0gB,EAAIysgB,iBACrCzsgB,EAAIg4e,UAAUI,aAAa76f,OAAS,GAAKyiB,EAAItT,SAAW3L,KAAKquiB,cAAcpvhB,EAAIysgB,eAAiB,IAC9GsoB,EAAoByQ,EAAaA,EAAWjojB,OAAS,EAAI,IAEpDsV,MAASkiiB,EAAmBhziB,QAAWyjjB,IAMpDjtN,EAAUp8V,UAAU4kiB,sBAAwB,SAAU/1e,EAAMt+C,EAAQkygB,GAChE,IAAIhL,OAAa33gB,EACjB,GAA6B,IAAzB+uD,EAAK7vC,SAAS5d,QAAgBytD,aAAgBo9c,GAC9CwL,EAAa5od,MAEZ,CACD,IAAI++c,EAAgB,EAChBwoC,EAAavnf,EAAK8+c,UAAUp9f,EAAQq9f,GACpCxqW,EAASgzY,EAAWxwiB,QACxBgogB,EAAgBwoC,EAAW1/hB,MAC3B+ggB,EAAar0W,aAAkB2zW,GAAa3zW,EAAOv0G,KAC7CjqD,KAAKkljB,4BAA4B1mZ,EAAQwqW,EAAe6U,GAElE,OAAOhL,GAMXr7K,EAAUp8V,UAAU85iB,uBAAyB,SAAUvpiB,EAAQs+C,GAC3D,IAAIk7f,OAAajqjB,EACjB,GAA6B,IAAzB+uD,EAAK7vC,SAAS5d,OACd2ojB,EAAal7f,MAEZ,CACD,IAAI++c,EAAgB,EAChBwoC,EAAavnf,EAAK8+c,UAAUp9f,EAAQq9f,GACpCxqW,EAASgzY,EAAWxwiB,QACxBgogB,EAAgBwoC,EAAW1/hB,MAC3BqziB,EAAanljB,KAAKq6hB,cAAc77X,EAAQwqW,GAE5C,OAAOm8C,GAQX3tN,EAAUp8V,UAAUgqjB,eAAiB,SAAUhgf,EAAOonc,EAAWC,GAC7D,IAAIlvgB,EAAQyC,KAAK88iB,YAAYtwC,EAAUnE,SAAUmE,GAC7Cvtf,EAAM1hB,EAAQivgB,EAAU/D,WAAWv6M,UACnCm3P,EAAcrljB,KAAK88iB,YAAYrwC,EAAQpE,SAAUoE,GACjD64C,EAAeD,EAAc54C,EAAQhE,WAAWv6M,UAChD3wT,EAAQ8njB,IACR9njB,EAAQ8njB,GAERpmiB,EAAMqmiB,IACNrmiB,EAAMqmiB,GAEN/njB,EAAQyC,KAAKm1iB,wBACb53iB,EAAQyC,KAAKm1iB,uBAEbl2hB,EAAMjf,KAAKm1iB,wBACXl2hB,EAAMjf,KAAKm1iB,uBAEf,IAAIoQ,EAAwBngf,EAAMyhc,kBAC9B2+C,EAAkBD,EAAsBhnjB,QAAQiugB,EAAUnE,SAASD,YACnEq9C,EAAgBF,EAAsBhnjB,QAAQkugB,EAAQpE,SAASD,YACnE,GAAIo9C,IAAoBC,EAEpB,IAAK,IADDvmiB,EAAQkmD,EAAMiyb,aAAa94f,QAAQkugB,EAAQpE,UACtCnsgB,EAAIkpE,EAAMiyb,aAAa94f,QAAQiugB,EAAUnE,UAAWnsgB,GAAKgjB,EAAOhjB,IACrE8D,KAAK0ljB,aAAatgf,EAAMiyb,aAAan7f,GAAIqB,EAAO0hB,OAM/C,CAAA,IAFD09S,EAAgB,EAChBgpP,EAAc,EAClB,IAASzpjB,EAAIspjB,EAAiBtpjB,GAAKupjB,EAAevpjB,IAAK,CACnDkpE,EAAQmgf,EAAsBrpjB,GAE1BygU,EADAzgU,IAAMspjB,EACUpgf,EAAMiyb,aAAa94f,QAAQiugB,EAAUnE,UAGrC,EAGhBs9C,EADAzpjB,IAAMupjB,EACQrgf,EAAMiyb,aAAa94f,QAAQkugB,EAAQpE,UAGnCjjc,EAAMiyb,aAAa76f,OAAS,EAE9C,IAAK,IAAIknB,EAAIi5S,EAAej5S,GAAKiiiB,EAAajiiB,IAC1C1jB,KAAK0ljB,aAAatgf,EAAMiyb,aAAa3ze,GAAInmB,EAAO0hB,MAUhEu4U,EAAUp8V,UAAU6pjB,eAAiB,SAAU7/e,EAAO7nE,EAAO0hB,GACzDjf,KAAK4ljB,kBAAkBxgf,EAAMiyb,aAAa,GAAI95f,EAAO0hB,GAChDA,EAAIg4e,UAAUsR,eACXnjc,EAAMjhE,SAAS8a,EAAIg4e,UAAUuR,iBACjCxogB,KAAKgljB,mBAAmB5/e,EAAO7nE,EAAO0hB,IAO9Cu4U,EAAUp8V,UAAU0hjB,YAAc,SAAUp3e,EAAKqC,GAC7C,IAAIv7D,EAAO,EAEX,OADAA,GAAQu7D,EAAKh7D,EAAIg7D,EAAK/oC,OAAOxyB,MAOjCgrV,EAAUp8V,UAAUyqjB,oBAAsB,SAAUngf,GAChD,IAAKjoE,EAAkBioE,EAAI8gc,oBAAqB,CAC5C,IACI0B,EADOxic,EAAI8gc,mBAAmBnP,aAAa,GAC9BA,aAAa,GAC9B,OAAOr3f,KAAKk9iB,uBAAuBh1C,GAEvC,OAAOlogB,KAAKsxiB,sBAAsB5re,EAAI0ic,aAM1C5wK,EAAUp8V,UAAU0qjB,wBAA0B,SAAUpgf,GACpD,IAAKjoE,EAAkBioE,EAAI2gc,wBAAyB,CAEhD,IAAIt+b,EAAOrC,EAAI2gc,uBAAuB3sX,UAClCwuX,EAAQngc,EAAK2xE,UAAY3xE,EAAK2xE,UAAa3xE,EAAwB,oBAAE2xE,UACzE,OAAO15I,KAAKqgjB,sBAAsBn4C,GAEtC,OAAOlogB,KAAKkxiB,0BAA0Bxre,EAAI0ic,aAM9C5wK,EAAUp8V,UAAU2qjB,YAAc,SAAUrgf,EAAKmkc,GAC7C,IAA6C,IAAzCnkc,EAAI2xb,aAAa94f,QAAQsrgB,GACzB,OAAO,EAEX,KAAOA,EAAUzB,WAAWG,eAAe,CACvC,IAA6C,IAAzC7ic,EAAI2xb,aAAa94f,QAAQsrgB,GACzB,OAAO,EAEXA,EAAYA,EAAUzB,WAAWI,eAErC,OAAgD,IAAzC9ic,EAAI2xb,aAAa94f,QAAQsrgB,IAMpCryK,EAAUp8V,UAAUsqjB,aAAe,SAAUhgf,EAAKnoE,EAAO0hB,GACrD,IAAK,IAAI/iB,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IAAK,CAC9C,IAAIsQ,EAAOxM,KAAK88iB,YAAYp3e,EAAKA,EAAI2xb,aAAan7f,IAC9C4igB,GAAc/+d,MAAMxiC,EAAO,IAAMuhgB,GAAc/+d,MAAMvzB,EAAM,IAC3Dsyf,GAAc/+d,MAAMvzB,EAAM,GAAKsyf,GAAc/+d,MAAM9gB,EAAK,IACxDjf,KAAKgmjB,oBAAoBtgf,EAAI2xb,aAAan7f,MAQtDs7V,EAAUp8V,UAAUwqjB,kBAAoB,SAAUlgf,EAAKnoE,EAAO0hB,GAC1D,IAAK,IAAI/iB,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IACzC8D,KAAKgmjB,oBAAoBtgf,EAAI2xb,aAAan7f,IAE1C+iB,EAAIg4e,UAAUsR,eAAiBvogB,KAAK+ljB,YAAYrgf,EAAKzmD,EAAIg4e,UAAUuR,iBAG9D9ic,EAAI8gc,8BAA8BL,IACvCnmgB,KAAK4ljB,kBAAkBlgf,EAAI8gc,mBAAoBjpgB,EAAO0hB,IAO9Du4U,EAAUp8V,UAAU25iB,iBAAmB,SAAUhte,GAC7C,KAAOA,EAAK++b,iBACJ/+b,EAAK++b,gBAAgBzP,aAAa76f,OAAS,GAC3CurE,EAAOA,EAAK++b,gBAMpB,IAAIxrQ,EAOJ,OALIA,EADAvzL,EAAKsvb,aAAa76f,OAAS,EACfurE,EAAK2xE,UAGL3xE,EAAK6+b,oBAAoBltX,UAElC15I,KAAKqgjB,sBAAsB/kT,IAMtCk8F,EAAUp8V,UAAUu7iB,aAAe,SAAUsP,EAAYl+e,GACrD,GAAIk+e,EAAW7ygB,OAAO20B,GAClB,OAAO,EAEX,KAAOA,EAAKqgc,WAAWG,eAAe,CAClC,GAAI09C,EAAW7ygB,OAAO20B,EAAKqgc,WAAWI,gBAClC,OAAO,EAEXzgc,EAAOA,EAAKqgc,WAAWI,eAE3B,OAAO,GAMXhxK,EAAUp8V,UAAU29gB,eAAiB,SAAUhxc,EAAMu9O,EAAey6O,GAChE,IAAI+U,EAAgB90iB,KAAK+0iB,iBAAiBhte,GAG1C,OADkB+se,IAAkB/U,EAAY9oC,WAAa8oC,EAAYp0hB,SAAW3L,KAAK0uiB,mBAAmBoG,GAAiB,IACrG90iB,KAAK22iB,aAAa5ue,EAAMu9O,EAAc2xM,UAAUuR,kBACnExogB,KAAK22iB,aAAa5ue,EAAMg4d,EAAY9oC,UAAUuR,iBAMvDhxK,EAAUp8V,UAAUi2iB,mBAAqB,SAAUtpe,EAAM8hc,GACrD,KAAO9hc,EAAKqgc,WAAWG,eAAe,CAClC,GAAIxgc,EAAKqgc,WAAWjkgB,SAAS0lgB,GACzB,OAAO9hc,EAEXA,EAAOA,EAAKqgc,WAAWI,eAE3B,OAAOzgc,GAMXyvR,EAAUp8V,UAAUq7iB,gBAAkB,SAAU1ue,EAAMyue,GAClD,GAAIzue,EAAKqgc,WAAWh1d,OAAOojgB,EAAcpuC,YACrC,OAAOrgc,EAEX,KAAOA,EAAKqgc,WAAWG,eAAe,CAClC,GAAIxgc,EAAKqgc,WAAWI,eAAep1d,OAAOojgB,GACtC,OAAOzue,EAEXA,EAAOA,EAAKqgc,WAAWI,eAE3B,OAAOzgc,GAKXyvR,EAAUp8V,UAAU8qjB,iBAAmB,WAEnC,IAAK,IADDt/e,KACK1qE,EAAI,EAAGA,EAAI8D,KAAKsyhB,gBAAgBh1hB,KAAKd,OAAQN,IAAK,CACvD,IAAI2pgB,EAAS7lgB,KAAKsyhB,gBAAgBh1hB,KAAKpB,GACnC2pgB,aAAkBI,IAClBr/b,EAAMpiE,KAAKqhgB,GAGnB,OAAOj/b,GAMX4wR,EAAUp8V,UAAUwnjB,qBAAuB,SAAU76e,GACjD,GAAIA,EAAKy+b,oBAAsBz+b,EAAKy+b,8BAA8BP,GAAiB,CAG/E,IAAIiC,GADJngc,EAAOA,EAAKy+b,oBACKxpf,WACjB,OAAIkrf,EACOlogB,KAAKk9iB,uBAAuBh1C,GAG5BlogB,KAAK4ijB,qBAAqB76e,GAGzC,OAAO/nE,KAAK6ljB,oBAAoB99e,EAAKuvb,kBAMzC9/J,EAAUp8V,UAAU2njB,yBAA2B,SAAUh7e,GACrD,IAAKtqE,EAAkBsqE,EAAKs+b,yBAA2Bt+b,EAAKs+b,kCAAkCJ,GAAiB,CAE3G,IAAIiC,GADJngc,EAAOA,EAAKs+b,wBACK3sX,UACjB,OAAO15I,KAAKqgjB,sBAAsBn4C,GAEtC,OAAOlogB,KAAK8ljB,wBAAwB/9e,EAAKsgc,WAM7C7wK,EAAUp8V,UAAU07iB,iBAAmB,SAAU/ue,GAC7C,MAAQtqE,EAAkBsqE,EAAKqgc,aAAergc,EAAKqgc,WAAWG,eAC1Dxgc,EAAOA,EAAKqgc,WAAWI,eAE3B,OAAOzgc,GAOXyvR,EAAUp8V,UAAUmpjB,cAAgB,SAAUx8e,EAAMkO,EAAW14E,EAAO0hB,GAClE,GAAIA,EAAIg4e,UAAUsR,cAAe,CAC7B,IAAIiuC,EAAgBx2iB,KAAKqxiB,mBAAmBtpe,EAAM9oD,EAAIg4e,UAAUuR,gBAChE,GAAIguC,EAAcpuC,WAAWjkgB,SAAS8a,EAAIg4e,UAAUuR,gBAAiB,CACjE,IAAIgE,EAAYxsgB,KAAKy2iB,gBAAgB1ue,EAAMyue,GACvC/pC,EAAUzsgB,KAAKy2iB,gBAAgBx3hB,EAAIg4e,UAAUuR,eAAgBguC,GACjE,GAAIx2iB,KAAK22iB,aAAaH,EAAev3hB,EAAIg4e,UAAUuR,gBAG3CxogB,KAAK+4gB,eAAey9B,EAAej5iB,EAAO0hB,GAC1Cjf,KAAKgmjB,oBAAoBxP,GAGrBhqC,IAAcgqC,EACdx2iB,KAAKsuV,UAAU/wV,EAAM05f,UAAW15f,EAAO0hB,GAGvCjf,KAAKmmjB,mBAAmB35C,EAAWjvgB,EAAO0hB,QAOlD,GADAjf,KAAKgmjB,oBAAoBxP,GACrBA,EAAcnuC,SAASj1d,OAAOq5d,EAAQpE,UAGtC,IADAmE,EAAYgqC,GACJ/4iB,EAAkB+ugB,EAAUhG,sBAChCgG,EAAYA,EAAUhG,mBACtBxmgB,KAAKgmjB,oBAAoBx5C,GACrBA,IAAcC,UAMtBzsgB,KAAKoljB,eAAe5O,EAAcpuC,WAAYouC,EAAe/pC,QAKrEzsgB,KAAKmmjB,mBAAmB3P,EAAej5iB,EAAO0hB,OAGjD,CACD,IAAIqjiB,EAAQtijB,KAAK82iB,iBAAiB/ue,GAClC/nE,KAAKmmjB,mBAAmB7D,EAAO/kjB,EAAO0hB,KAM9Cu4U,EAAUp8V,UAAU+qjB,mBAAqB,SAAUp+e,EAAMxqE,EAAO0hB,GAC5Djf,KAAK4ljB,kBAAkB79e,EAAKuvb,gBAAiB/5f,EAAO0hB,GACpDjf,KAAKgljB,mBAAmBj9e,EAAKqgc,WAAY7qgB,EAAO0hB,IAMpDu4U,EAAUp8V,UAAUw2iB,wBAA0B,SAAUpzY,GAEpD,IADA,IAAI4nZ,OAAsBlrjB,EACnBsjK,aAAkBihW,IACjBX,GAAcU,uBAAuBhhW,KACjCA,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,UAC5C0mD,EAAsB5nZ,EAEjBA,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WACjD0mD,EAAsB5nZ,EAClB/gK,EAAkB+gK,EAAO+zW,kBAEzB6zC,EADA5nZ,EAASA,EAAOohW,aAMpBwmD,EADA5nZ,EAASA,EAAOohW,YAIxBphW,EAASA,EAAOk0W,aAEpB,OAAOj1gB,EAAkB2ojB,GAAuB5nZ,EAAS4nZ,GAM7D5uN,EAAUp8V,UAAUs1iB,oBAAsB,SAAUlyY,GAEhD,IADA,IAAIiyY,OAAkBv1iB,EACfsjK,aAAkBihW,IAAiB,CACtC,GAAyB,IAArBjhW,EAAOkhW,YAAoBjigB,EAAkB+gK,EAAOmhW,UACpD,OAAOligB,EAAkBgziB,GAAmBjyY,EAASiyY,EAE3B,IAArBjyY,EAAOkhW,WAAoBjigB,EAAkB+gK,EAAOohW,cACzD6wC,EAAkBjyY,GAEtBA,EAASA,EAAOixO,SAEpB,OAAQhyY,EAAkBgziB,GAAmBjyY,EAASiyY,GAM1Dj5M,EAAUp8V,UAAUirjB,qBAAuB,SAAU7nZ,EAAQ1sJ,GACzD,GAAI0sJ,EAAOhiK,SAAWsV,GAAS0sJ,EAAOixO,oBAAoBgwH,GAAiB,CAEvE,IAAIyyC,EAAalyiB,KAAK0wiB,oBAAoBlyY,EAAOixO,UAC7CyiK,aAAsBzyC,IAA4C,IAAzByyC,EAAWxyC,YACpDlhW,EAAS0zY,EACTpgiB,EAAQ,QAGX,GAAc,IAAVA,GAAe0sJ,EAAOk0W,wBAAwBjT,GAAiB,CAGpE3tf,GADA0sJ,EADiBx+J,KAAK4xiB,wBAAwBpzY,EAAOk0W,yBAE3BjT,GAAkB,EAAIjhW,EAAOhiK,OACnDgiK,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WAC5C5tf,IAGR,OAAS9Q,QAAWw9J,EAAQ1sJ,MAASA,IAMzC0lV,EAAUp8V,UAAU4ojB,0BAA4B,SAAUxlZ,EAAQ1sJ,EAAOo9hB,GACrE,IAAIluiB,OAAU9F,EAEV23gB,OAAa33gB,EACjB,GAAIuC,EAFJuD,EAAUhB,KAAKsmjB,cAAc9nZ,EAAQ1sJ,EAAOo9hB,GAAcluiB,UAExBvD,EAAkBuD,EAAQipD,MACxD,OAAIu0G,aAAkBihW,IAAmBjhW,aAAkBsqW,GAChD9ogB,KAAKumjB,0BAA0B/nZ,GAEnC,IAAI3pH,GAAM,EAAG,GAExB,IAAI7V,EAASh+B,EAAQg+B,OACjBtyB,EAAM,EACNF,EAAO,EASX,GARIxL,aAAmB4ngB,IAAmC,OAAjB5ngB,EAAQguB,MAAiBvxB,EAAkB+gK,EAAOixO,WACvFojI,EAAa7ygB,KAAKwmjB,kBAAkBxljB,EAAQipD,KAAKgtc,UAAWj2f,GAC5D8Q,EAAQ,GAGR+ggB,EAAa7xgB,EAAQipD,KAEzBv9C,EAAM1M,KAAKo3S,OAAOy7N,GACd7xgB,aAAmB6ngB,GAAiB,CACpC,IAAItqe,EAASv9B,EAAQipD,KAAKgtc,UAAU5E,gBAChCs/C,EAAiB3xiB,KAAKymjB,uBAAuBjoZ,GACjD,GAAK/gK,EAAkBk0iB,GAGlB,CACD,IAAIO,EAAalyiB,KAAK0mjB,mBAAmBloZ,GACpC/gK,EAAkBy0iB,KACnB3zgB,EAAS2zgB,EAAW7/C,sBALxB9zd,EAASozgB,EAAet/C,gBAQ5B,IAAIs0D,EAAa3mjB,KAAKwuf,OAAO0uB,WAAW7pQ,UAAU90O,GAC9Cv9B,EAAQg+B,OAAOtyB,IAAM1L,EAAQ+U,OAAS4wiB,EAAWjnC,eAAiB,IAClEhzgB,GAAO1L,EAAQg+B,OAAOtyB,IAAM1L,EAAQ+U,OAAS4wiB,EAAWjnC,qBAGrD1+gB,aAAmBy+f,KAC1B/yf,GAAOsyB,EAAOtyB,IAAM,EAAIsyB,EAAOtyB,IAAM,GAGzC,OADAF,EAAQ/O,EAAkBuD,IAAYvD,EAAkBo1gB,GAAe,EAAI7ygB,KAAKq2iB,gBAAgBxjC,EAAY7xgB,EAAS8Q,GAC9G,IAAI+iC,GAAMroC,EAAME,IAM3B8qV,EAAUp8V,UAAUmrjB,0BAA4B,SAAUK,GACtD,IAAInW,EAAkBzwiB,KAAK6+gB,4BAA4B+nC,GAEvD,GAAInpjB,EAAkBgziB,GAAkB,CACpC,IAAIluB,EAAgBqkC,EAAY38f,KAAKgtc,UACrC,OAAOj3f,KAAK6mjB,eAAetkC,GAG3B,OAAOvihB,KAAKgkjB,0BAA0BvT,EAAiB,GAAG,IAMlEj5M,EAAUp8V,UAAUyjhB,4BAA8B,SAAU+nC,GACxD,GAAIA,aAAuBnnD,IAA6C,IAA1BmnD,EAAYlnD,WACnDZ,GAAcU,uBAAuBonD,GAAc,CACtD,IAAIhnD,EAAagnD,EAEbA,EADAnpjB,EAAkBmigB,EAAW2S,gBACf3S,EAAWD,SAGXC,EAAW2S,eAGjC,IAAIk+B,OAAkBv1iB,EAItB,OAHKuC,EAAkBmpjB,EAAYn3K,YAC/BghK,EAAkBzwiB,KAAK0wiB,oBAAoBkW,EAAYn3K,WAEpDghK,GAMXj5M,EAAUp8V,UAAUyrjB,eAAiB,SAAUhhD,GAC3C,IAAIr5f,EAAOq5f,EAAO94f,EACdL,EAAMm5f,EAAO74f,EACb6lgB,OAAa33gB,EACb2qgB,EAAOxO,aAAa76f,OAAS,IAC7Bq2gB,EAAahN,EAAOxO,aAAawO,EAAOxO,aAAa76f,OAAS,GAC9DgQ,GAAQxM,KAAKkzR,SAAS2/O,GAAY,IAEjCp1gB,EAAkBo1gB,KACnBnmgB,EAAM1M,KAAKo3S,OAAOy7N,IAEtB,IAEIxjf,EAAOrvB,KAAKu/gB,qBAAqB1Z,EAFrB,EACG,GAEnB,OAAO,IAAIhxd,GAAMroC,EAAME,EAAM2iB,EAAK8sP,YAMtCq7E,EAAUp8V,UAAUkrjB,cAAgB,SAAU7D,EAAe3wiB,EAAO+rgB,GAChE,IAAI3L,OAAah3gB,EAIjB,OAHMunjB,aAAyBhjD,IAAmBgjD,aAAyB35C,KACvEoJ,EAAauwC,IAERzhjB,QAAWkxgB,EAAYpggB,MAASA,IAK7C0lV,EAAUp8V,UAAUqrjB,uBAAyB,SAAUjoZ,GACnD,OAAIA,EAAOk0W,wBAAwB9J,GACxBpqW,EAAOk0W,aAEbj1gB,EAAkB+gK,EAAOk0W,mBAA9B,EACW1ygB,KAAKymjB,uBAAuBjoZ,EAAOk0W,eAQlDl7K,EAAUp8V,UAAUsrjB,mBAAqB,SAAUloZ,GAC/C,OAAIA,EAAOixO,oBAAoBm5H,GACpBpqW,EAAOixO,SAEbhyY,EAAkB+gK,EAAOixO,eAA9B,EACWzvY,KAAK0mjB,mBAAmBloZ,EAAOixO,WAO9Cj4C,EAAUp8V,UAAU+2iB,0BAA4B,SAAU3zY,EAAQwqW,GAC9D,GAAIxqW,aAAkBihW,GAAiB,CAEnC,GAA6B,KADzBG,EAAaphW,GACFkhW,YACXlhW,EAASx+J,KAAK8mjB,iBAAiBlnD,GAC3BA,IAAephW,GACf,OAAOohW,EAGfoJ,EAAgB,EAEpB,MAAQvrgB,EAAkB+gK,IAAWwqW,IAAkBxqW,EAAOhiK,QAAUgiK,EAAOixO,oBAAoBgwH,IAAiB,CAChH,IAAIgxC,EAAkBzwiB,KAAK0wiB,oBAAqBlyY,EAAe,UAC/D,GAAIiyY,aAA2BhxC,IAAiD,IAA9BgxC,EAAgB/wC,UAAiB,CAC/E,IAAIE,EAAa6wC,EAEjB,GADAjyY,EAASx+J,KAAK8mjB,iBAAiBlnD,IAC1BnigB,EAAkB+gK,IAAWohW,IAAephW,EAC7C,OAAOohW,EAEXoJ,EAAgB,OAGhBxqW,EAASiyY,EAGjB,OAAOjyY,GAKXg5L,EAAUp8V,UAAUgpjB,sBAAwB,SAAU5lZ,EAAQ1sJ,GAC1D,IAAI9Q,OAAU9F,EAEd,OADA8F,EAAUw9J,GAENx9J,QAAWA,EAAS8Q,MAASA,IAOrC0lV,EAAUp8V,UAAUi/hB,cAAgB,SAAU77X,EAAQ1sJ,GAClD,OAAO9R,KAAKkljB,4BAA4B1mZ,EAAQ1sJ,GAAO,IAK3D0lV,EAAUp8V,UAAU8pjB,4BAA8B,SAAU1mZ,EAAQ1sJ,EAAO+rgB,GACvE,IAAIkpC,EAAa/mjB,KAAKsmjB,cAAc9nZ,EAAQ1sJ,EAAO+rgB,GAC/C78gB,EAAU+ljB,EAAW/ljB,QAEzB,GADA8Q,EAAQi1iB,EAAWj1iB,OACdrU,EAAkBuD,GACnB,OAAI68gB,GAAkB78gB,aAAmB4ngB,IAAmC,OAAjB5ngB,EAAQguB,MAA2B,IAAVld,EACzE9R,KAAKwmjB,kBAAkBxljB,EAAQipD,KAAKgtc,UAAWj2f,GAG/CA,EAAQipD,KAGvB,IAAIg6f,EAAczlZ,EAEdiyY,EAAkBzwiB,KAAK6+gB,4BAA4BolC,GAEvD,GAAIxmjB,EAAkBgziB,GAAkB,CACpC,IAAI59B,OAAa33gB,EACb2qgB,EAASo+C,EAAYh6f,KAAKgtc,UAI9B,OAHI4O,EAAOxO,aAAa76f,OAAS,IAC7Bq2gB,EAAahN,EAAOxO,aAAawO,EAAOxO,aAAa76f,OAAS,IAE3Dq2gB,EAGP,OAAO7ygB,KAAKq6hB,cAAcoW,EAAiB,IAOnDj5M,EAAUp8V,UAAUorjB,kBAAoB,SAAUvvD,EAAWj2f,GACzD,IAAI6xgB,OAAa33gB,EACb2qgB,EAAS5O,EACb,GAAI4O,EAAOxO,aAAa76f,OAAS,EAAG,CAChC,IAAIqzhB,EAAchqB,EAAOxO,aAAa94f,QAAQyC,EAAQipD,MAClD4le,IAAgBhqB,EAAOxO,aAAa76f,OAAS,GAC7CqpgB,EAAS5O,EAET44B,GAAe,GAEVA,EAAchqB,EAAOxO,aAAa76f,OAAS,GAChDqpgB,EAAS7lgB,KAAKsxiB,sBAAsBr6C,GACpC44B,GAAe,GAEVA,EAAc,IAGnBA,GADAhqB,EAAS5O,GACYI,aAAa94f,QAAQyC,EAAQipD,OAEtD4od,EAAahN,EAAOxO,aAAaw4B,EAAc,GAEnD,OAAOhd,GAOXr7K,EAAUp8V,UAAU4rjB,eAAiB,SAAUxoZ,EAAQ1sJ,EAAOysB,EAAQ0ohB,EAAkB9qS,EAAW2hB,GAC/F,IACI98R,EADiBhB,KAAKsmjB,cAAc9nZ,EAAQ1sJ,GAAO,GAC1B9Q,QACzByhjB,EAAgBjkZ,EACpB,GAAI/gK,EAAkBuD,GAClB,OAAIyhjB,aAAyBhjD,GAClBz/f,KAAKknjB,wBAAwBzE,EAAelkhB,EAAQ0ohB,EAAkB9qS,EAAW2hB,IAEnF/nR,OAAU/V,KAAKwuf,OAAO0uB,WAAW7pQ,UAAU90O,GAAQ6md,OAAQjpO,UAAaA,EAAW2hB,SAAYA,GAE5G,IAAI9+P,EAASh+B,EAAQg+B,OACjBmohB,EAAgBnmjB,EAAQ+U,OACxBqxiB,EAAgB,EACpB,GAAIpmjB,aAAmB6ngB,GAAiB,CACpC,IAAI8oC,EAAiB3xiB,KAAKymjB,uBAAuBjoZ,GAC7C0zY,EAAalyiB,KAAK0mjB,mBAAmBloZ,GACzC,GAAI/gK,EAAkBk0iB,IAAmBl0iB,EAAkBy0iB,GAAa,CACpE,IAAIzxG,EAAQ,EACR9zb,EAAS,EACT+0iB,EAAYljZ,EAAOv0G,KAAKgtc,UACxB69B,EAAW90hB,KAAKu/gB,qBAAqBmiC,EAAWjhH,EAAO9zb,GAC3D8zb,EAAQq0F,EAAS34Q,UACjBxvQ,EAASmohB,EAASz4Q,aAClB+qS,EAAgBtyB,EAAS/+gB,OACzB+nR,EAAW4jR,EAAUrvD,gBAAgBljc,OAChC83f,IACDG,GAAiB1F,EAAUzvD,gBAAgBsL,kBAG9C,CAAA,GAAI9/f,EAAkBk0iB,GAEvB,OADA7zQ,EAAWo0Q,EAAW7/C,gBAAgBljc,OAC/BnvD,KAAKgnjB,eAAe9U,EAAY,EAAGA,EAAW7/C,gBAAiB40D,EAAkB9qS,EAAW2hB,GAGnG,GAAKrgS,EAAkBy0iB,MAAelxiB,aAAmB6ngB,IAcrD,OAFA/qO,EAAW6zQ,EAAet/C,gBAAgBljc,OAEnCnvD,KAAKgnjB,eAAerV,EAAgBA,EAAen1iB,OAAQm1iB,EAAet/C,gBAAiB40D,EAAkB9qS,EAAW2hB,GAZ/H,IAAIupR,EAAernjB,KAAKwuf,OAAO0uB,WAAW7pQ,UAAUryQ,EAAQqxf,iBACxDi1D,EAAaD,EAAajiE,OAC1B+tB,EAAiBk0C,EAAa3nC,eAElC0nC,EAAiBpmjB,EAAQg+B,OAAOtyB,IAAM,GAAKymgB,EAAiBnygB,EAAQg+B,OAAOtyB,IAAM1L,EAAQ+U,OAAU/U,EAAQg+B,OAAOtyB,IAAM1L,EAAQ+U,OAASuxiB,EAAan0C,EAAiBm0C,EAClKL,IACDG,GAAiBpmjB,EAAQg+B,OAAOryB,aAU3C,CACD,IAAI6xf,EAAoBjge,EAAOige,kBAC3Bt/S,EAAgBioW,EACM,WAAtB3oD,GAAkCyoD,IAElC/nW,GAAgC,IACN,cAAtBs/S,IACAriP,EAAYgrS,EAAgBjoW,IAGpCkoW,GAAiBpohB,EAAOtyB,IAAM,EAAIsyB,EAAOtyB,IAAM,GAAKwyM,EAC/C+nW,IACDG,GAAiBpohB,EAAOryB,QAGhC,IAAKs6iB,EACD,OAASlxiB,OAAUqxiB,EAAejrS,UAAaA,EAAW2hB,SAAYA,GAE1E,IAAI/nR,EAAS/V,KAAKwuf,OAAO0uB,WAAW7pQ,UAAU90O,GAAQ6md,OAItD,OAHIrve,EAASqxiB,IACTrxiB,EAASqxiB,IAEJrxiB,OAAUA,EAAQomQ,UAAaA,EAAW2hB,SAAYA,IAOnE05D,EAAUp8V,UAAU8rjB,wBAA0B,SAAUjD,EAAa1lhB,EAAQ0ohB,EAAkB9qS,EAAW2hB,GACtG,IAAI2yQ,EAAkBzwiB,KAAK6+gB,4BAA4BolC,GAEvD,GAAIxmjB,EAAkBgziB,GAAkB,CACpC,IAAIluB,EAAgB0hC,EAAYh6f,KAAKgtc,UACjClhf,EAAS/V,KAAKwuf,OAAO0uB,WAAWqC,qBAAqBhhf,GAAQ6md,OAC7DnjD,EAAQ,EACRt1b,EAAS,EACTmohB,EAAW90hB,KAAKu/gB,qBAAqBgD,EAAetgF,EAAOt1b,GAC3Dy6iB,EAAgBtyB,EAAS/+gB,OAG7B,OAFAksb,EAAQ6yF,EAAS34Q,UACjBxvQ,EAASmohB,EAASz4Q,aACb4qS,GAIDlxiB,EAASqxiB,IACTrxiB,EAASqxiB,IAEJrxiB,OAAUA,EAAQomQ,UAAaA,EAAW2hB,SAAYA,KAN3DspR,GAAiBz6iB,GACRoJ,OAAUqxiB,EAAejrS,UAAaA,EAAW2hB,SAAYA,IAQ1E,OAAO99R,KAAKgnjB,eAAevW,EAAiB,EAAGlygB,EAAQ0ohB,EAAkB9qS,EAAW2hB,IAQ5F05D,EAAUp8V,UAAUimjB,kBAAoB,SAAU7iZ,EAAQ6iX,GAEtD,IADA,IAAIu0B,EAAa51iB,KAAK4xiB,wBAAwBpzY,GACvCo3Y,aAAsBn2C,KACzBm2C,EAAa51iB,KAAKymjB,uBAAuB7Q,cACfn2C,KACtBm2C,EAAaA,EAAWljC,cAGhC,IAAKj1gB,EAAkBm4iB,GAEnB,OADAv0B,EAAcu0B,EAAWp5iB,QAChBwE,QAAW40iB,EAAY9jiB,MAASuvgB,GAE7CA,EAAc,EACd,IAAI6wB,EAAalyiB,KAAKmyiB,0BAA0B3zY,EAAQ,GACxD,GAAI0zY,aAAsBzyC,IAA4C,IAAzByyC,EAAWxyC,UAGpD,IADAwyC,GADAA,EAAaA,EAAW3/B,gBACA9iI,SACjByiK,aAAsBzyC,IACrByyC,aAAsBzyC,IAA4C,IAAzByyC,EAAWxyC,WACjDZ,GAAcU,uBAAuB0yC,KAEpCA,EADAz0iB,EAAkBy0iB,EAAW3/B,gBAChB2/B,EAAWvyC,SAGXuyC,EAAW3/B,gBAGhC2/B,EAAaA,EAAWziK,SAGhC,OAASzuY,QAAWkxiB,EAAYpgiB,MAASuvgB,IAO7C7pL,EAAUp8V,UAAU0rjB,iBAAmB,SAAUlnD,GAC7C,IAAIphW,EAASohW,EACb,GAAInigB,EAAkBmigB,EAAW2S,gBAC7B/zW,EAASohW,EAAWD,aAEnB,CAED,IAAI1I,GADJz4V,EAASohW,EAAW2S,gBACGtod,KAAKgtc,UAC5B,GAAIA,IAAc2I,EAAWD,SAAS11c,KAAKgtc,WACnCj3f,KAAKgyiB,eAAe/6C,EAAWz4V,EAAQohW,EAAWD,UAItD,OAAOnhW,EAHPA,EAASohW,EAAWD,SAM5B,OAAOnhW,GAMXg5L,EAAUp8V,UAAUqziB,qBAAuB,SAAUjwY,EAAQ1sJ,GACzD,KAAOA,IAAU0sJ,EAAOhiK,QAAUgiK,EAAOixO,oBAAoBgwH,IAAiB,CAC1E,IAAIgxC,EAAkBzwiB,KAAK0wiB,oBAAoBlyY,EAAOixO,UAKtD,GAJA39X,EAAQ,EACJ2+hB,aAA2BhxC,IAAiD,IAA9BgxC,EAAgB/wC,YAC9DlhW,EAASiyY,GAETjyY,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,YAAoBjigB,EAAkB+gK,EAAOmhW,UAAW,CACpG,IAAIC,EAAaphW,EACjB,GAAI/gK,EAAkBmigB,EAAW2S,gBAC7B/zW,EAASohW,EAAWD,SACpB7tf,EAAQ,MAEP,CAED,IAAImlf,GADJz4V,EAASohW,EAAW2S,gBACGtod,KAAKgtc,UAE5B,GADAnlf,EAAQ,EACJmlf,IAAc2I,EAAWD,SAAS11c,KAAKgtc,WACnCj3f,KAAKgyiB,eAAe/6C,EAAWz4V,EAAQohW,EAAWD,UAItD,MAHAnhW,EAASohW,EAAWD,WAQpC,OAAO7tf,IAAU0sJ,EAAOhiK,QAAUiB,EAAkB+gK,EAAOixO,WAM/Dj4C,EAAUp8V,UAAUmgT,QAAU,SAAUsqN,GACpC,IAAIt4V,OAAOryK,EACX,GAAI2qgB,EAAOvO,2BAA2BgQ,GAAgB,CACjCzB,EAAOvO,gBACxB/pV,EAAOs4V,EAAOvO,gBAAgB/pV,UAExB9vK,EAAkBoogB,EAAOvO,mBAC/B/pV,EAAOvtK,KAAKu7S,QAAQsqN,EAAOvO,kBAE/B,OAAO/pV,GAMXiqL,EAAUp8V,UAAUsliB,yCAA2C,WAG3D,IAAK,IAFD6mB,GAAsB,EACtB5gD,EAAU3mgB,KAAKsyhB,gBAAgBh1hB,KAC1BpB,EAAI,EAAGA,EAAIyqgB,EAAQnqgB,OAAQN,IAChC8D,KAAK67iB,yBAAyBl1C,EAAQzqgB,IACtCqrjB,GAAsB,EAG1B,OADAvnjB,KAAKsyhB,gBAAgB7le,QACd86f,GAMX/vN,EAAUp8V,UAAUosjB,6BAA+B,SAAU3hD,GACzD,IAAK,IAAI3pgB,EAAI,EAAGA,EAAI2pgB,EAAOxO,aAAa76f,OAAQN,IACxC2pgB,EAAOxO,aAAan7f,aAAcmrgB,GAClCrngB,KAAKynjB,kCAAkC5hD,EAAOxO,aAAan7f,IAEtD2pgB,EAAOxO,aAAan7f,aAAc+pgB,GACvCjmgB,KAAKygiB,wBAAwB56B,EAAOxO,aAAan7f,IAE5C2pgB,EAAOxO,aAAan7f,aAAcypgB,IACvC3lgB,KAAKwnjB,6BAA6B3hD,EAAOxO,aAAan7f,KASlEs7V,EAAUp8V,UAAUoliB,wBAA0B,SAAU36B,EAAQlye,GAC5D,IAAK,IAAIz3B,EAAI,EAAGA,EAAI2pgB,EAAOxO,aAAa76f,OAAQN,IAAK,CAEjD,IADIsghB,EAAc3W,EAAOxO,aAAan7f,cACXypgB,IAAU6W,EAAYxvgB,GAAK2mB,EAAM3mB,GACpDwvgB,EAAYxvgB,EAAIwvgB,EAAYzmgB,QAAW4d,EAAM3mB,EACjD,OAAIwvgB,aAAuBtlB,GAChBl3f,KAAK0njB,wBAAwBlrC,EAAa7of,GAG1C3zB,KAAK2njB,yBAAyBnrC,EAAa7of,GAI9D,IAAIs2B,OAAO/uD,EACX,GAAI2qgB,EAAOxO,aAAa76f,OAAS,EAAG,CAChC,IAAIwgB,EAAa6of,EAAOxO,aAAa,GACrC,GAAIr6e,aAAsB2of,IAAU3of,EAAWhQ,GAAK2mB,EAAM3mB,EAGlDi9C,EAFA47c,EAAOxO,aAAawO,EAAOxO,aAAa76f,OAAS,aAAc06f,GAExDl3f,KAAK0njB,wBAAwB7hD,EAAOxO,aAAawO,EAAOxO,aAAa76f,OAAS,GAAIm3B,GAIlF3zB,KAAK2njB,yBAAyB9hD,EAAOxO,aAAawO,EAAOxO,aAAa76f,OAAS,GAAIm3B,OAG7F,CACD,IAAI6of,OAActhhB,EACd8hB,aAAsB2of,KACtB6W,EAAcx/f,GAEbvf,EAAkB++gB,KAEfvyd,EADAuyd,aAAuBtlB,GAChBl3f,KAAK0njB,wBAAwB1qiB,EAAY2W,GAGzC3zB,KAAK2njB,yBAAyB3qiB,EAAY2W,KAKjE,OAAOs2B,GAOXutS,EAAUp8V,UAAUssjB,wBAA0B,SAAU7hD,EAAQlye,GAG5D,IAAK,IAFD0je,EAAewO,EAAOxO,aACtB3qf,EAAMm5f,EAAO74f,EACR9Q,EAAI,EAAGA,EAAIm7f,EAAa76f,OAAQN,IAAK,CAC1C,GAAIwQ,GAAOinB,EAAM3mB,GACTN,EAAM2qf,EAAan7f,GAAG6Z,QAAW4d,EAAM3mB,EAC3C,OAAOqqf,EAAan7f,GAExBwQ,GAAO2qf,EAAan7f,GAAG6Z,OAE3B,IAAI88f,OAAa33gB,EASjB,OARIm8f,EAAa76f,OAAS,IAElBq2gB,EADAhN,EAAO74f,GAAK2mB,EAAM3mB,EACLqqf,EAAaA,EAAa76f,OAAS,GAGnC66f,EAAa,IAG3Bwb,GAOXr7K,EAAUp8V,UAAU2pjB,mBAAqB,SAAUl/C,EAAQhgf,EAAYm9hB,EAASyB,EAAY1+hB,GAExF,IAAK,IADDrZ,EAAM,EACDxQ,EAAI2pB,EAAY3pB,EAAI2pgB,EAAOxO,aAAa76f,OAAQN,IAAK,CAC1D,IAAI+tD,EAAO47c,EAAOxO,aAAan7f,GAC3BA,IAAM2pB,IACNnZ,EAAM1M,KAAKo3S,OAAOntP,IAEtB,IAAIz9C,EAAOxM,KAAKg3S,QAAQ/sP,GACxB,GAAIA,IAAS+4f,EAAS,CAElB,IAAIv2iB,EAAQzM,KAAKq2iB,gBAAgB2M,EAASyB,EAAY1+hB,GAEtD,YADA/lB,KAAKq7iB,sBAAsBpxf,EAAMx9C,EAAQD,EAAMA,EAAME,GAGzD1M,KAAKq7iB,sBAAsBpxf,EAAMjqD,KAAKkzR,SAASjpO,GAAM,IAASz9C,EAAOq5f,EAAO94f,GAAIP,EAAME,GACtFA,GAAOu9C,EAAKl0C,SAQpByhV,EAAUp8V,UAAUusjB,yBAA2B,SAAU9hD,EAAQlye,GAE7D,IAAK,IADDk/e,OAAa33gB,EACRgB,EAAI,EAAGA,EAAI2pgB,EAAOxO,aAAa76f,OAAQN,IAAK,CAEjD,IAAIsghB,EAAc3W,EAAOxO,aAAan7f,GACtC,GAAIsghB,aAAuBrW,IAAkBqW,EAAYxvgB,GAAK2mB,EAAM3mB,EAAG,CAEnE,IAAI8ggB,OAAa5ygB,GACZuC,EAFLo1gB,EAAa7ygB,KAAK4njB,uBAAuBprC,EAAa7of,KAEhBk/e,EAAW5b,UAAUK,2BAA2B2O,KAClF6H,EAAa+E,EAAW5b,UAAUK,iBAEtC,IAAIjnM,EAAc,EACdO,EAAU,EACd,IAAKnzT,EAAkBqwgB,GAAa,CAChC,IAAI4O,EAAc5O,EAAWzF,SAAS/Q,gBACtCjnM,EAAcyuM,GAAcO,oBAAoBqd,EAAY1Y,YAAY3zM,aACxEO,EAAUk9M,EAAWrF,WAAW73M,QAEpC,IAAIi3P,EAAkB,EAClBC,EAAmB,EACnBC,EAAiB,EACjBC,EAAoB,EACxB,GAAI33P,EAAc,EAAG,CACjBw3P,EAA2C,IAAzB/5C,EAAWv6M,UAAkBlD,EAAcA,EAAc,EAE3Ey3P,EAAmBh6C,EAAWv6M,YAAcu6M,EAAWzF,SAAShR,aAAa76f,OAAS,EAAI6zT,EAAcA,EAAc,EACtH,IAAIusN,OAAY1hhB,EACZ4ygB,EAAWxW,2BAA2B6O,KACtCyW,EAAY9O,EAAWxW,iBAEvBolB,OAAcxhhB,EACd4ygB,EAAWxW,gBAAgBA,2BAA2B2P,KACtDyV,EAAc5O,EAAWxW,gBAAgBA,iBAExC75f,EAAkBm/gB,IAAen/gB,EAAkBi/gB,KACpDqrC,EAAkD,IAAjCj6C,EAAWzF,SAASp5R,SAAiBohF,EAAcA,EAAc,EAE9E23P,EADAl6C,EAAWzF,SAASp5R,SAAW2hF,IAAYk9M,EAAW1F,WAAW/Q,aAAa76f,OAC1D6zT,EAGAA,EAAc,GAI9C,IAAM5yT,EAAkBo1gB,IAAeA,EAAW5b,UAAUlqf,GAAK4mB,EAAM5mB,GAChE8lgB,EAAW5b,UAAUlqf,EAAI8lgB,EAAW78f,OAAS2d,EAAM5mB,GACnD8lgB,EAAW5b,UAAUjqf,GAAK2mB,EAAM3mB,GAAKhN,KAAKo3S,OAAOy7N,GAAcA,EAAW98f,QAAU4d,EAAM3mB,IACxFvP,EAAkBqwgB,IAAeA,EAAW/ggB,EAAI+ggB,EAAW9ue,OAAOxyB,KAAOq7iB,GAAmBl0hB,EAAM5mB,GAChG+ggB,EAAW/ggB,EAAI+ggB,EAAW93f,MAAQ83f,EAAW9ue,OAAOvyB,MAAQq7iB,GAAoBn0hB,EAAM5mB,GACtF+ggB,EAAW9ggB,EAAI8ggB,EAAW9ue,OAAOtyB,IAAMq7iB,GAAkBp0hB,EAAM3mB,GAC/D8ggB,EAAW9ggB,EAAI8ggB,EAAW/3f,OAAS+3f,EAAW9ue,OAAOryB,OAASq7iB,GAAqBr0hB,EAAM3mB,EAChG,OAIZ,OAAO6lgB,GAOXr7K,EAAUp8V,UAAUwsjB,uBAAyB,SAAU/hD,EAAQlye,GAC3D,IAAK,IAAIz3B,EAAI,EAAGA,EAAI2pgB,EAAOxO,aAAa76f,OAAQN,IAAK,CACjD,IAAIm0T,EAAc,EAEdw3P,EAAkB,EAClBC,EAAmB,EAMvB,IARAz3P,EAAcyuM,GAAcO,oBAAoBwG,EAAOuC,WAAWpE,YAAY3zM,cAG5D,IACdw3P,EAAyD,IAAvChiD,EAAOxO,aAAan7f,GAAG8yO,YAAoBqhF,EAAcA,EAAc,EAEzFy3P,EAAmBjiD,EAAOxO,aAAan7f,GAAGq3T,YAAcsyM,EAAOxO,aAAan7f,GAAGmsgB,SAAShR,aAAa76f,OAAS,EAAI6zT,EAAcA,EAAc,GAE9Iw1M,EAAOxO,aAAan7f,GAAG6Q,EAEvB84f,EAAOxO,aAAan7f,GAAG8iC,OAAOxyB,KAAOq7iB,GAAmBl0hB,EAAM5mB,GAAM84f,EAAOxO,aAAan7f,GAAG6Q,EAE3F84f,EAAOxO,aAAan7f,GAAG8Z,MAAS6vf,EAAOxO,aAAan7f,GAAG8iC,OAAOvyB,MAAQq7iB,GAAoBn0hB,EAAM5mB,EAChG,OAAO/M,KAAKiojB,wBAAwBpiD,EAAOxO,aAAan7f,GAAIy3B,GAGpE,IAAIk/e,OAAa33gB,EASjB,OARI2qgB,EAAOxO,aAAa76f,OAAS,IAEzBq2gB,EADAhN,EAAOxO,aAAa,GAAGtqf,GAAK4mB,EAAM5mB,EACrB/M,KAAKiojB,wBAAwBpiD,EAAOxO,aAAawO,EAAOxO,aAAa76f,OAAS,GAAIm3B,GAGlF3zB,KAAKiojB,wBAAwBpiD,EAAOxO,aAAa,GAAI1je,IAGnEk/e,GAKXr7K,EAAUp8V,UAAU8sjB,cAAgB,SAAUngf,GAC1C,GAAIA,EAAKsvb,aAAa76f,OAAS,EAC3B,OAAOurE,EAAKsvb,aAAa,IASjC7/J,EAAUp8V,UAAU4qjB,oBAAsB,SAAUngD,GAChD,IAAIc,KACAd,EAAOe,qBAAuBf,EAAOiB,gBACrCH,EAAUd,EAAOgB,kBAGjBF,EAAQnigB,KAAKqhgB,GAEjB,IAAK,IAAI3pgB,EAAI,EAAGA,EAAIyqgB,EAAQnqgB,OAAQN,IAChC2pgB,EAASc,EAAQzqgB,GAEjB8D,KAAKwnjB,6BAA6B3hD,GAElC7lgB,KAAKw7iB,iCAAiC31C,IAO9CruK,EAAUp8V,UAAUqliB,wBAA0B,SAAU56B,GAChD7lgB,KAAKsyhB,gBAAgBjvS,YAAYwiR,KACjC7lgB,KAAK67iB,yBAAyBh2C,GAC9B7lgB,KAAKsyhB,gBAAgB/thB,OAAOshgB,KAOpCruK,EAAUp8V,UAAU6sjB,wBAA0B,SAAUpiD,EAAQlye,GAC5D,IAAK,IAAIz3B,EAAI,EAAGA,EAAI2pgB,EAAOxO,aAAa76f,OAAQN,IAC5C,GAAI2pgB,EAAOxO,aAAan7f,GAAG8Q,GAAK2mB,EAAM3mB,GAC9B64f,EAAOxO,aAAan7f,GAAG8Q,EAAI64f,EAAOxO,aAAan7f,GAAG6Z,QAAW4d,EAAM3mB,EACvE,OAAI64f,EAAOxO,aAAan7f,aAAcg7f,GAC3Bl3f,KAAK0njB,wBAAwB7hD,EAAOxO,aAAan7f,GAAIy3B,GAGrD3zB,KAAK2njB,yBAAyB9hD,EAAOxO,aAAan7f,GAAIy3B,GAIzE,IAAIk/e,OAAa33gB,EAYjB,OAXI2qgB,EAAOxO,aAAa76f,OAAS,GACzBqpgB,EAAOxO,aAAa,GAAGrqf,GAAK2mB,EAAM3mB,IAG9B6lgB,EAFAhN,EAAOxO,aAAawO,EAAOxO,aAAa76f,OAAS,aAAc06f,GAElDl3f,KAAK0njB,wBAAwB7hD,EAAOxO,aAAawO,EAAOxO,aAAa76f,OAAS,GAAIm3B,GAGlF3zB,KAAK2njB,yBAAyB9hD,EAAOxO,aAAa,GAAI1je,IAIxEk/e,GAOXr7K,EAAUp8V,UAAUykiB,mBAAqB,SAAUh6B,EAAQlye,GACvD,IAAIw0hB,EAAgBx0hB,EAChB3yB,OAAU9F,EACV4W,EAAQ,EACRsphB,GAAkB,EAClBgtB,EAAqBpojB,KAAKyhiB,qBAAqB57B,EAAQ7kgB,EAAS8Q,EAAO6hB,GAAO,GAC7El2B,EAAkB2qjB,KACnBpnjB,EAAUonjB,EAAmBpnjB,QAC7B8Q,EAAQs2iB,EAAmBt2iB,MAC3Bq2iB,EAAgBC,EAAmBD,cACnC/sB,EAAkBgtB,EAAmBhtB,gBACrCp7hB,KAAKo7hB,gBAAkBA,GAEvBA,GACAp7hB,KAAKqojB,eAAexiD,EAAQ7kgB,EAAS8Q,EAAOq2iB,GAC9B,IAAVr2iB,EACA9R,KAAKu+iB,gBAGLv+iB,KAAKo+iB,kBAITp+iB,KAAKqojB,eAAexiD,EAAQ7kgB,EAAS8Q,EAAOq2iB,IAOpD3wN,EAAUp8V,UAAUqmiB,qBAAuB,SAAU57B,EAAQrnW,EAAQ1sJ,EAAOq2iB,EAAeG,GACvF,IAAIltB,GAAkB,EAClB1uhB,EAAM1M,KAAKo3S,OAAOyuN,GAClBr5f,EAAOq5f,EAAO5O,UAAUlqf,EACxBw7iB,EAAgBvojB,KAAKwojB,gBAAgB3iD,EAAQr5f,GAC7CxL,EAAUunjB,EAAcvnjB,QAE5B,GADAwL,EAAO+7iB,EAAc/7iB,KACjB/O,EAAkBuD,GAAU,CAC5B,IAAIm7Q,EAAY,EACZE,EAAe,EACfhtP,EAAOrvB,KAAKu/gB,qBAAqB1Z,EAAO5O,UAAW96O,EAAWE,GAClEF,EAAY9sP,EAAK8sP,UACjBE,EAAehtP,EAAKgtP,gBACCr8Q,KAAKwuf,OAAOipC,gBAAgBzqhB,GAAKN,GAAO1M,KAAKwuf,OAAOipC,gBAAgBzqhB,EAAIN,EAAMm5f,EAAO9vf,SAAU/V,KAAKwuf,OAAOipC,gBAAgB1qhB,EAAIP,EAAO6iB,EAAKrZ,QAC1IsyiB,GAAwBH,EAAcp7iB,EAAIP,EAAO6iB,EAAKrZ,MAAQ,IAChFxJ,GAAQ6iB,EAAKrZ,MACT6vf,EAAOzrf,SAAS5d,OAAS,IAEzBsV,GADA0sJ,EAASqnW,EAAOzrf,SAASyrf,EAAOzrf,SAAS5d,OAAS,IACnCA,QAEnBsV,KAEJq2iB,EAAgB,IAAItzgB,GAAMroC,EAAM2vQ,EAAY,EAAIzvQ,EAAMyvQ,EAAYzvQ,QAGlE,IAAKjP,EAAkBuD,GAAU,CAC7B,GAAImnjB,EAAcp7iB,EAAIP,EAAOxL,EAAQg+B,OAAOxyB,KAAM,CAC9C,IAAK,IAAItQ,EAAI2pgB,EAAOzrf,SAAS7b,QAAQyC,GAAU9E,EAAI2pgB,EAAOzrf,SAAS5d,SAC/DwE,EAAU6kgB,EAAOzrf,SAASle,KACtBisjB,EAAcp7iB,EAAIP,EAAOxL,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,OAAS9Z,IAAM2pgB,EAAOzrf,SAAS5d,OAAS,IAF5BN,IAKvEsQ,GAAQxL,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,MAE1C,GAAImyiB,EAAcp7iB,EAAIP,EAAOxL,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,MAEvDlE,EAAQ9Q,aAAmB4ngB,GAAiB5ngB,EAAQxE,OAAS,EAC7DgQ,GAAQxL,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,WAErC,GAAIhV,aAAmB4ngB,GAAgB,CACxC,IAAI77f,EAAIo7iB,EAAcp7iB,EAAIP,EAAOxL,EAAQg+B,OAAOxyB,KAChDA,GAAQxL,EAAQg+B,OAAOxyB,KAGlB,IAFDovW,EAAY,EACZxmH,EAAY,EAChB,IAASl5P,EAAI,EAAGA,GAAK8E,EAAQxE,OAAQN,IAAK,CACtC,IAAI8Z,EAAQ,EAOZ,GALIA,EADA9Z,IAAM8E,EAAQxE,OACNwE,EAAQgV,MAGRhW,KAAKwuf,OAAO0uB,WAAWhqP,SAASlyR,EAAQguB,KAAK6H,OAAO,EAAG36B,GAAI8E,EAAQqxf,iBAE3Etlf,EAAIiJ,GAAS9Z,IAAM8E,EAAQxE,OAAQ,CAGnC,GAAIuQ,EAAI6uW,GADQ5lW,EAAQ4lW,GACQ,EAC5BpvW,GAAQwJ,EACRo/O,EAAYl5P,OAKZ,GAFAsQ,GAAQovW,EACRxmH,EAAYl5P,EAAI,EACN,IAANA,GAAW8E,IAAY6kgB,EAAOzrf,SAAS,GAAI,CAC3C,IAAIu+E,EAAWkta,EAAOzrf,SAAS7b,QAAQyC,GACjC6kgB,EAAOzrf,SAASu+E,EAAW,aAAcwwa,KAE3C/zQ,GADAp0P,EAAU6kgB,EAAOzrf,SAASu+E,EAAW,cACNiwa,GAAiB5ngB,EAAQxE,OAAS,GAI7E,MAEJo/W,EAAY5lW,EAEhBlE,EAAQsjP,OAIR,GADAgmS,EAAkBp6hB,aAAmB6ngB,GACjCs/C,EAAcp7iB,EAAIP,EAAOxL,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,MAAQ,EAC/DlE,EAAQ,EACRtF,GAAQxL,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,WAErC,GAAIhV,IAAY6kgB,EAAOzrf,SAAS,KAAOghhB,EAAiB,CACrDzic,EAAWkta,EAAOzrf,SAAS7b,QAAQyC,GACjC6kgB,EAAOzrf,SAASu+E,EAAW,aAAcwwa,KAE3Cr3f,GADA9Q,EAAU6kgB,EAAOzrf,SAASu+E,EAAW,cACViwa,GAAiB5ngB,EAAQxE,OAAS,GAIrEwE,aAAmB4ngB,IAAmC,OAAjB5ngB,EAAQguB,OAC7Cld,EAAQ,QAIZtF,GAAQxL,EAAQg+B,OAAOxyB,KAE3B,GAAIxL,aAAmB4ngB,GACnBl8f,GAAO1L,EAAQg+B,OAAOtyB,IAAM,EAAI1L,EAAQg+B,OAAOtyB,IAAM,MAEpD,CACD,IAAI+7iB,EAAczojB,KAAKwuf,OAAO0uB,WAAW7pQ,UAAUryQ,EAAQqxf,iBACvDt8e,EAAS/U,EAAQ+U,OACjB/U,aAAmB8ngB,KAAuB9ogB,KAAKwuf,OAAOlhc,OAAOywd,gBAAgB/8gB,EAAQipD,KAAKgtc,aAC1Flhf,EAAS0yiB,EAAYrjE,QAEzB14e,GAAO1L,EAAQg+B,OAAOtyB,IAAMqJ,EAAS0yiB,EAAY/oC,eAErDlhX,EAASx9J,EACT,IAAI4viB,EAAY5wiB,KAAKqmjB,qBAAqB7nZ,EAAQ1sJ,GAClD0sJ,EAASoyY,EAAU5viB,QACnB8Q,EAAQ8+hB,EAAU9+hB,MAClB,IAAI2vgB,EAAiBhkhB,EAAkB+gK,EAAOixO,WAAa39X,IAAU0sJ,EAAOhiK,OACxEksjB,EAAYjrjB,EAAkB+gK,EAAOixO,WAClCjxO,aAAkBoqW,IAAkC,OAAhBpqW,EAAOxvI,KAIlD,GAHIs5hB,GAAwB9pZ,EAAOixO,oBAAoBgwH,IAAmB3tf,IAAU0sJ,EAAOhiK,SACvFilhB,EAAiBzhhB,KAAKyuiB,qBAAqBjwY,EAAQ1sJ,IAEnDw2iB,GAAwB7mC,GAAkBinC,EAAW,CACjD1yiB,EAAQ,EAEZ,GAAIyrgB,EAAgB,CAChBzrgB,EAAQhW,KAAKwuf,OAAO0uB,WAAWC,sBAAsBtX,EAAO5O,UAAU5E,oBACjDryf,KAAKwuf,OAAOipC,gBAAgBzqhB,GAAKN,GAAO1M,KAAKwuf,OAAOipC,gBAAgBzqhB,EAAIN,EAAMm5f,EAAO9vf,SAAU/V,KAAKwuf,OAAOipC,gBAAgB1qhB,EAAIP,EAAOwJ,IACrImyiB,EAAcp7iB,EAAIP,EAAOwJ,EAAQ,IACnDxJ,GAAQwJ,EACRlE,EAAQ0sJ,EAAOhiK,OAAS,QAIvBksjB,IAELl8iB,GADAwJ,EAAQhV,EAAQgV,MAEhBlE,EAAQ0sJ,EAAOhiK,QAGvB2rjB,EAAgB,IAAItzgB,GAAMroC,EAAME,GAGxC,OACI1L,QAAWw9J,EACX1sJ,MAASA,EACTq2iB,cAAiBA,EACjB/sB,gBAAmBA,IA2B3B5jM,EAAUp8V,UAAU47S,QAAU,SAAU6uN,GACpC,IAAIr5f,EAAOq5f,EAAO5O,UAAUlqf,EACxBklf,EAAkB4T,EAAO5O,UAAUhF,gBACnCjyf,KAAK4khB,qBAAqB/e,IAA+C,UAAlC5T,EAAgBjvd,gBACvDx2B,GAAQsyf,GAAcO,oBAAoBpN,EAAgBrjP,kBAE9D,IAAK,IAAI1yQ,EAAI,EAAGA,EAAI2pgB,EAAOzrf,SAAS5d,OAAQN,IAAK,CAC7C,IAAI8E,EAAU6kgB,EAAOzrf,SAASle,GAC9B,KAAI8E,aAAmBmogB,IAQlB,CACD38f,GAAQxL,EAAQg+B,OAAOxyB,KACvB,MARIA,GADM,IAANtQ,EACQ8E,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,MAG9BhV,EAAQgV,MAQ5B,OAAOxJ,GAMXgrV,EAAUp8V,UAAUg8S,OAAS,SAAUyuN,GAGnC,IAAK,IAFDn5f,EAAMm5f,EAAO5O,UAAUjqf,EACvBkS,EAAQ2mf,EAAO5O,UAAUI,aAAa94f,QAAQsngB,GACzC3pgB,EAAI,EAAGA,EAAIgjB,EAAOhjB,IACvBwQ,GAAOm5f,EAAO5O,UAAUI,aAAan7f,GAAG6Z,OAE5C,OAAOrJ,GAMX8qV,EAAUp8V,UAAUotjB,gBAAkB,SAAU3iD,EAAQr5f,GACpD,IAAIoiQ,EAAkB,EAClB5uQ,KAAK4khB,qBAAqB/e,KAC1Bj3P,EAAkBkwP,GAAcO,oBAAoBwG,EAAO5O,UAAUhF,gBAAgBrjP,kBAEzFpiQ,GAAQoiQ,EAER,IAAK,IADD5tQ,OAAU9F,EACLgB,EAAI,EAAGA,EAAI2pgB,EAAOzrf,SAAS5d,SAChCwE,EAAU6kgB,EAAOzrf,SAASle,cACHitgB,GAFiBjtgB,IAGpCsQ,GAAQxL,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,MACtChV,OAAU9F,EAUlB,OAAS8F,QAAWA,EAASwL,KAAQA,IAOzCgrV,EAAUp8V,UAAUu6iB,iBAAmB,SAAUzjC,GAC7C,IAAIlJ,EAAgB,EACpB,GAAIkJ,aAAsBtJ,GAEtB,IAAK,IADD1pf,EAAQgzf,EAAWjod,KAAK7vC,SAAS7b,QAAQ2zgB,GACpCh2gB,EAAI,EAAGA,EAAIgjB,EAAOhjB,IAAK,CAC5B,IAAI8E,EAAUkxgB,EAAWjod,KAAK7vC,SAASle,GACnC8E,aAAmBy+f,IAAmBz+f,aAAmBmogB,KAG7DH,GAAiBhogB,EAAQxE,QAGjC,OAAOwsgB,GAMXxxK,EAAUp8V,UAAUwphB,qBAAuB,SAAU/e,GACjD,SAAIpogB,EAAkBoogB,EAAO5O,UAAU2P,sBACnCf,IAAWA,EAAO5O,UAAUj6e,aAQpCw6U,EAAUp8V,UAAUyphB,oBAAsB,SAAUhf,GAChD,SAAIpogB,EAAkBoogB,EAAO5O,UAAU6P,kBAChCjB,IAAWA,EAAO5O,UAAUv9W,YASvC89M,EAAUp8V,UAAU83R,SAAW,SAAU2yO,EAAQyiD,GAC7C,IAAItyiB,EAAQ,EACRhW,KAAK4khB,qBAAqB/e,KAC1B7vf,GAAS8of,GAAcO,oBAAoBwG,EAAO5O,UAAUhF,gBAAgBrjP,kBAEhF,IAAK,IAAI1yQ,EAAI,EAAGA,EAAI2pgB,EAAOzrf,SAAS5d,OAAQN,IACxC8Z,GAAS6vf,EAAOzrf,SAASle,GAAG8iC,OAAOxyB,KAAOq5f,EAAOzrf,SAASle,GAAG8Z,MAMjE,OAJIsyiB,GAAwBziD,EAAO5O,UAAUI,aAAa94f,QAAQsngB,KAAYA,EAAO5O,UAAUI,aAAa76f,OAAS,GAC9GiB,EAAkBoogB,EAAO5O,UAAU6P,mBACtC9wf,GAAShW,KAAKwuf,OAAO0uB,WAAWC,sBAAsBtX,EAAO5O,UAAU5E,kBAEpEr8e,GAMXwhV,EAAUp8V,UAAUi7iB,gBAAkB,SAAUxwC,EAAQqM,EAAYpggB,GAChE,IAAItF,EAAOq5f,EAAO5O,UAAUlqf,EACxB/M,KAAK4khB,qBAAqB/e,KAE1Br5f,GAAQsyf,GAAcO,oBAAoBwG,EAAO5O,UAAUhF,gBAAgBrjP,kBAE/E,IAAI1vP,EAAQ2mf,EAAOzrf,SAAS7b,QAAQ2zgB,IACJ,IAA3BrM,EAAOzrf,SAAS5d,QAAgBqpgB,EAAOzrf,SAAS,aAAc+uf,IAAmD,IAA3BtD,EAAOzrf,SAAS5d,QACpGqpgB,EAAOzrf,SAAS,aAAc+uf,IAAsBtD,EAAOzrf,SAAS,aAAc+uf,MACrFjqf,EAAQ2mf,EAAOzrf,SAAS5d,QAE5B,IAAK,IAAIN,EAAI,EAAGA,EAAIgjB,EAAOhjB,IAAK,CACP2pgB,EAAOzrf,SAASle,GAI3B,IAANA,GAAW2pgB,EAAOzrf,SAASle,aAAcitgB,GACzC38f,GAAQq5f,EAAOzrf,SAASle,GAAG8Z,MAG3BxJ,GAAQq5f,EAAOzrf,SAASle,GAAG8iC,OAAOxyB,KAAOq5f,EAAOzrf,SAASle,GAAG8Z,MAMpE,GAHKvY,EAAkBy0gB,KACnB1lgB,GAAQ0lgB,EAAWlze,OAAOxyB,MAE1B0lgB,aAAsBtJ,GAClB92f,IAAUoggB,EAAW11gB,OACrBgQ,GAAQ0lgB,EAAWl8f,MAEdlE,EAAQoggB,EAAW11gB,OAExBgQ,GAAQ0lgB,EAAWl8f,MAAQhW,KAAKwuf,OAAO0uB,WAAWC,sBAAsBjL,EAAWjod,KAAKgtc,UAAU5E,iBAIlG7lf,GAAQxM,KAAKwuf,OAAO0uB,WAAWhqP,SAASg/O,EAAWljf,KAAK6H,OAAO,EAAG/kB,GAAQoggB,EAAW7f,sBAGxF,GAAIvgf,EAAQ,EACb,GAAKrU,EAAkBy0gB,IAAiBA,aAAsB/I,GAQ1D38f,GAAQxM,KAAKwuf,OAAO0uB,WAAWC,sBAAsBtX,EAAO5O,UAAU5E,sBANtE,GADA7lf,GAAQ0lgB,EAAWl8f,MACL,IAAVlE,EAAa,CACb,IAAImlf,EAAYib,EAAWjod,KAAKgtc,UAChCzqf,GAAQxM,KAAKwuf,OAAO0uB,WAAWC,sBAAsBlmB,EAAU5E,iBAO3E,OAAO7lf,GAMXgrV,EAAUp8V,UAAUmmiB,iBAAmB,SAAU17B,GAC7C,IAAIr5f,EAAOq5f,EAAO5O,UAAUlqf,EAO5B,OANI/M,KAAK4khB,qBAAqB/e,KAC1Br5f,GAAQsyf,GAAcO,oBAAoBwG,EAAO5O,UAAUhF,gBAAgBrjP,kBAE3Ei3P,EAAOzrf,SAAS5d,OAAS,IACzBgQ,GAAQq5f,EAAOzrf,SAAS,GAAG4kB,OAAOxyB,MAE/BA,GAMXgrV,EAAUp8V,UAAUi6iB,yBAA2B,SAAUxvC,EAAQlye,EAAOu0X,EAAcogK,GAClF,IAGIK,EAHAR,EAAgBx0hB,EAChB6qI,OAAStjK,EACT4W,EAAQ,EAGZ0sJ,GADAmqZ,EAAoB3ojB,KAAKyhiB,qBAAqB57B,EAAQrnW,EAAQ1sJ,EAAOq2iB,EAAeG,IACzDtnjB,QAC3B8Q,EAAQ62iB,EAAkB72iB,MAC1Bq2iB,EAAgBQ,EAAkBR,cAClCjgK,EAAaqmJ,wBAAwB1oC,EAAQrnW,EAAQ1sJ,EAAOq2iB,IAMhE3wN,EAAUp8V,UAAUqsjB,kCAAoC,SAAU5hD,IACzDpogB,EAAkBuC,KAAKwjgB,QAAUxjgB,KAAKsyhB,gBAAgB91hB,OAAS,GAChEwD,KAAKygiB,wBAAwBzgiB,OAOrCw3V,EAAUp8V,UAAUs6iB,wBAA0B,SAAU7vC,GAEpD,IAAK,IADD7kgB,OAAU9F,EACLgB,EAAI,EAAGA,EAAI2pgB,EAAOzrf,SAAS5d,SAChCwE,EAAU6kgB,EAAOzrf,SAASle,cACHitgB,GAFiBjtgB,IAGpC8E,OAAU9F,EAMlB,OAAO8F,GAOXw2V,EAAUp8V,UAAUg1N,YAAc,SAAUk1F,EAAey6O,GACvD//hB,KAAKzC,MAAMuxiB,oBAAoBxpP,GAC/BtlT,KAAKif,IAAI6vhB,oBAAoB/O,GAC7B//hB,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,IAM9BxkN,EAAUp8V,UAAU6kjB,gBAAkB,SAAUhpD,EAAW23C,GACvD,IAAI3kf,EAAOgtc,EAAUj6e,WACrB,GAAI4xhB,EACA5uiB,KAAKzC,MAAMsb,YAAYoxC,EAAM2kf,OAE5B,CACD,IAAI75B,EAAY9qd,EAAK+nd,eACrBhygB,KAAKzC,MAAM0xiB,qBAAqBhlf,EAAM8qd,GAE1C/0gB,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,OAClCyC,KAAKm1iB,sBAAwBn1iB,KAAKzC,MAAMq9B,SAAS7tB,EACjD/M,KAAKg8iB,sBAAqB,IAK9BxkN,EAAUp8V,UAAUmijB,oBAAsB,SAAUr1C,EAAO0gD,GACvD,IAAI10iB,EASJ,GARIg0f,aAAiBjB,KAEbiB,EADA0gD,EACQ5ojB,KAAK6rhB,6BAA6B3jB,GAGlClogB,KAAKkijB,2BAA2Bh6C,IAG5CA,aAAiBhR,GAEjB,GADAhjf,EAAW,IAAIg6hB,GAAaluiB,KAAKwjgB,OAC7BolD,EACA10iB,EAAS2E,YAAYqvf,EAAMlrf,YAAY,OAEtC,CACD,IAAIitC,EAAOi+c,EAAMxuX,UACjBxlI,EAAS+6hB,qBAAqBhlf,EAAMA,EAAK+nd,gBAGjD,OAAO99f,GAMXsjV,EAAUp8V,UAAUuijB,cAAgB,SAAUz1J,EAAc63J,GACxD,GAAItijB,EAAkByqZ,GAClB,MAAM,IAAItnZ,MAAM,8BAEpBZ,KAAKzC,MAAMuxiB,oBAAoB5mJ,GAC/BloZ,KAAKif,IAAI6vhB,oBAAoB5mJ,GAC7BloZ,KAAKm1iB,sBAAwBn1iB,KAAKif,IAAI2b,SAAS7tB,EAC/C/M,KAAKg8iB,sBAAqB,IAM9BxkN,EAAUp8V,UAAUitjB,eAAiB,SAAUx1C,EAAY7xgB,EAAS8Q,EAAO08hB,GACvExuiB,KAAKzC,MAAMgxiB,wBAAwB17B,EAAY7xgB,EAAS8Q,EAAO08hB,GAC/DxuiB,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,OAClCyC,KAAKm1iB,sBAAwB3G,EAAiBzhiB,EAC9C/M,KAAKg8iB,sBAAqB,IAK9BxkN,EAAUp8V,UAAUixM,QAAU,SAAUwmU,EAAYlngB,EAAQk9iB,GACxD7ojB,KAAKwuf,OAAOiyC,0BACZzgiB,KAAKzC,MAAMoyiB,yBAAyB98B,EAAYlngB,GAChD3L,KAAKif,IAAI6vhB,oBAAoB9uiB,KAAKzC,OAC7BsrjB,GACD7ojB,KAAKg8iB,sBAAqB,IAOlCxkN,EAAUp8V,UAAUkljB,eAAiB,SAAUh7P,EAAey6O,GAC1D,GAAItiiB,EAAkB6nT,IAAkB7nT,EAAkBsiiB,GACtD,MAAM,IAAIn/hB,MAAM,oCAEpB,GAAInD,EAAkB6nT,EAAc2xM,YAC7B3xM,EAAc35S,OAAS3L,KAAK0uiB,mBAAmBppP,EAAc2xM,WAAa,EAC7E,MAAM,IAAIr2f,MAAM,oCAEpB,GAAInD,EAAkBsiiB,EAAY9oC,YAC3B8oC,EAAYp0hB,OAAS3L,KAAK0uiB,mBAAmB3O,EAAY9oC,WAAa,EACzE,MAAM,IAAIr2f,MAAM,kCAEhB0kT,EAAc8pP,iBAAiBrP,GAE/B//hB,KAAKowN,YAAYk1F,EAAeA,IAI5BA,EAAcgqP,cAAcvP,GAE5BA,EAAYgU,8BAA8BzuP,EAAcgpP,+BAAgCvO,EAAYuO,gCAIpGhpP,EAAcyuP,8BAA8BhU,EAAYuO,+BAAgChpP,EAAcgpP,gCAE1GtuiB,KAAKowN,YAAYk1F,EAAey6O,KAOxCvoM,EAAUp8V,UAAU4gjB,qBAAuB,SAAUd,GAC5Cl7iB,KAAK43O,UACF53O,KAAK+2iB,WACL/2iB,KAAKzC,MAAMsxiB,wBAAuB,GAClC7uiB,KAAKif,IAAI4vhB,wBAAuB,KAGhC7uiB,KAAKzC,MAAMsxiB,wBAAuB,GAClC7uiB,KAAKif,IAAI4vhB,wBAAuB,KAGnC7uiB,KAAKi4iB,qBACNj4iB,KAAK8ojB,kCAET9ojB,KAAKwuf,OAAOiyC,0BACZzgiB,KAAK24gB,cACD34gB,KAAKwjgB,MAAMjiB,kBAAoBvhf,KAAKwjgB,MAAMliB,mBAC1Cthf,KAAKi7iB,oBAAmB,GAExBC,IACIl7iB,KAAKzC,MAAM05f,UAAUu1B,mBAAqBxshB,KAAKwjgB,MAAMmf,sBACrD3ihB,KAAKwjgB,MAAMmf,uBAAwB,GAE7B3ihB,KAAKzC,MAAM05f,UAAUu1B,kBAAoBxshB,KAAKwjgB,MAAMmf,wBAC1D3ihB,KAAKwjgB,MAAMmf,uBAAwB,GAEvC3ihB,KAAKwjgB,MAAM/R,uBAEfzxf,KAAKwuf,OAAOj/X,eAOhBioO,EAAUp8V,UAAU0tjB,gCAAkC,WAClD9ojB,KAAKgniB,sBAAuB,EAC5B,IAAI1hP,EAAgBtlT,KAAKzC,MACrBwiiB,EAAc//hB,KAAKif,IAClBjf,KAAK+2iB,YACNzxP,EAAgBtlT,KAAKif,IACrB8ghB,EAAc//hB,KAAKzC,OAEvByC,KAAK+ojB,oBAAoBzjQ,EAAey6O,GACxC//hB,KAAKgpjB,wBAAwB1jQ,EAAey6O,GAC5C//hB,KAAKipjB,wBAAwB3jQ,EAAey6O,GAC5C//hB,KAAKkpjB,sBAAsB5jQ,EAAey6O,GAC1C//hB,KAAKmpjB,oBAAoB7jQ,EAAey6O,GACnC//hB,KAAKo7hB,iBACNp7hB,KAAKopjB,YAAY1d,mBAErB1riB,KAAKgniB,sBAAuB,EAC5BhniB,KAAKqpjB,yBAKT7xN,EAAUp8V,UAAU2tjB,oBAAsB,SAAUxrjB,EAAO0hB,GACvD,IAAIg1L,EACJ,GAAI12M,EAAMmuhB,gBAAkBzsgB,EAAIysgB,eAAiBnuhB,EAAMoO,OAAS,IAAMsT,EAAItT,OAAQ,CAC9E,IAAIy1iB,EAAcniiB,EAAIysgB,cAAc3iB,UAAU9pf,EAAItT,OAAQ,GAC1DsoM,EAAQmtW,EAAYpgjB,QACRogjB,EAAYtviB,MACxB,GAAImiM,aAAiB40T,GAAiB,CAChBtrgB,EAAMmuhB,cAAcnvd,UAAU03I,EAAO,KACnC12M,EAAMoO,SACtBsoM,OAAQ/4M,IAIhB+4M,aAAiB40T,GACjB7ogB,KAAKopjB,YAAY3d,gBAAgBx3V,GAGjCj0M,KAAKopjB,YAAY1d,oBAGzBl0M,EAAUp8V,UAAUiujB,sBAAwB,WACxC,IAAIC,IAAmBtpjB,KAAKopjB,YAAYn1W,MACpCs1W,GAAoB9rjB,EAAkBuC,KAAKgkgB,eAAgBvmgB,EAAkBuC,KAAKgkgB,YAAY5+b,OAC9F1gE,EAAQ1E,KAAKzC,MAAM05f,UAAUhF,gBAAgB8F,UACjD,GAAIrzf,aAAiBy2f,IAA+D,IAA5Cz2f,EAAM6yB,KAAK3hB,cAAcrX,QAAQ,OAAc,CAEnF,IAAKd,EADUuC,KAAK8hjB,uBAGhB,YADA9hjB,KAAKg4iB,oBAAsB,mBAInC,GAAIh4iB,KAAKzC,MAAM05f,UAAUu1B,iBAAkB,CACvC,IAAIg9B,GAAqF,IAAxExpjB,KAAKzC,MAAM05f,UAAU6F,WAAW4K,iBAAiBnpgB,QAAQ,UAGlEyB,KAAKg4iB,oBAFTuR,EACID,EAC2BE,EAAa,mBAAqB,mBAGlCA,EAAa,kBAAoB,kBAI5DF,EAC2BE,EAAa,cAAgB,cAG7BA,EAAa,aAAe,kBAM3DxpjB,KAAKg4iB,oBADLuR,EAC2BD,EAAmB,aAAe,YAGlCA,EAAmB,QAAU,QASpE9xN,EAAUp8V,UAAU+tjB,oBAAsB,SAAU5rjB,EAAO0hB,GACvD,IAAIwqiB,EAAWzpjB,KAAK6sR,SAAStvR,EAAO0hB,GAC/BxhB,EAAkBgsjB,GAQnBzpjB,KAAKgkgB,YAAYxI,eAPjBx7f,KAAKgkgB,YAAYrK,WAAW8vD,EAASzlD,aACrChkgB,KAAKgkgB,YAAY5+b,MAAQqkf,EACzBzpjB,KAAK0pjB,mBAAmBnsjB,EAAO0hB,GAC/Bjf,KAAK2pjB,kBAAkBpsjB,EAAO0hB,KAWtCu4U,EAAUp8V,UAAUsujB,mBAAqB,SAAUnsjB,EAAO0hB,GAClD1hB,EAAM05f,UAAUsR,eAAiBtpf,EAAIg4e,UAAUsR,eAC/CvogB,KAAKyogB,WAAW9O,WAAWp8f,EAAM05f,UAAUuR,eAAeC,YAC1DzogB,KAAK4pjB,cAAcrsjB,EAAM05f,UAAUuR,eAAeJ,WAAY7qgB,EAAO0hB,IAIrEjf,KAAKyogB,WAAWqiC,mBAOxBtzM,EAAUp8V,UAAUuujB,kBAAoB,SAAUpsjB,EAAO0hB,GACjD1hB,EAAM05f,UAAUsR,eAAiBtpf,EAAIg4e,UAAUsR,eAC/CvogB,KAAKsqgB,UAAU3Q,WAAWp8f,EAAM05f,UAAUuR,eAAeH,SAASiC,WAClEtqgB,KAAK6pjB,aAAatsjB,EAAM05f,UAAUuR,eAAeJ,WAAY7qgB,EAAO0hB,IAIpEjf,KAAKsqgB,UAAU+gC,kBAOvB7zM,EAAUp8V,UAAUwujB,cAAgB,SAAUxkf,EAAO7nE,EAAO0hB,GACxD,IAAI1hB,EAAM05f,UAAUuR,eAAep1d,OAAOn0B,EAAIg4e,UAAUuR,gBAIxD,IAAK,IADDS,GAAY,EACP/sgB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GAI7B,GAHIwpE,IAAQnoE,EAAM05f,UAAUuR,eAAeH,WACvCY,GAAY,GAEZA,EACA,IAAK,IAAIvlf,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GAI5B,GAHI1jB,KAAK+4gB,eAAehxc,EAAMxqE,EAAO0hB,IACjCjf,KAAKyogB,WAAW0+B,cAAcp/d,EAAK0gc,YAEnC1gc,IAAS9oD,EAAIg4e,UAAUuR,eAEvB,YADAxogB,KAAKyogB,WAAW0+B,cAAcp/d,EAAK0gc,eAWvDjxK,EAAUp8V,UAAUyujB,aAAe,SAAUzkf,EAAO7nE,EAAO0hB,GACvD,IAAI2lhB,EAAWrniB,EAAM05f,UAAUuR,eAAeH,SAC9C,GAAIu8B,IAAa3lhB,EAAIg4e,UAAUuR,eAAeH,SAG9C,IAAK,IAAInsgB,EAAIkpE,EAAMiyb,aAAa94f,QAAQqmiB,GAAY,EAAG1oiB,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CACvF,IAAI4tjB,EAAe1kf,EAAMiyb,aAAan7f,GAEtC,GADA8D,KAAKsqgB,UAAU68B,cAAc2iB,EAAax/C,WACtCw/C,IAAiB7qiB,EAAIg4e,UAAUuR,eAAeH,SAC9C,SAQZ7wK,EAAUp8V,UAAUyxR,SAAW,SAAUy4B,EAAey6O,GACpD,IAAKtiiB,EAAkB6nT,EAAc2xM,UAAUuR,kBAAoB/qgB,EAAkBsiiB,EAAY9oC,UAAUuR,gBAAiB,CACxH,IAAIuhD,EAAazkQ,EAAc2xM,UAAUuR,eAAeJ,WACpD4hD,EAAW1kQ,EAAc2xM,UAAUuR,eAAeJ,WACtD,GAAI2hD,IAAeC,EACf,OAAOD,EAGP,GAAIA,EAAW5ljB,SAASmhT,EAAc2xM,UAAUuR,gBAC5C,OAAOuhD,EAEN,GAAIC,EAAS7ljB,SAASmhT,EAAc2xM,UAAUuR,gBAC/C,OAAOwhD,EAEN,IAAKD,EAAWxhD,gBAAkByhD,EAASzhD,cAC5C,OAGA,EAAG,CAEC,IADAwhD,EAAaA,EAAWvhD,eAAeJ,cACpB4hD,GAAYD,EAAW5ljB,SAAS6ljB,EAASxhD,gBACxD,OAAOuhD,EAEN,GAAIC,EAAS7ljB,SAAS4ljB,EAAWvhD,gBAClC,OAAOwhD,SAELvsjB,EAAkBssjB,EAAWvhD,mBAMvDhxK,EAAUp8V,UAAU0ljB,mBAAqB,SAAU54C,GAC/C,IAAIpL,EACJ,GAAIoL,EAAM5Q,2BAA2BgQ,GACjCxK,EAAaoL,EAAM5Q,qBAInB,IADAwF,EAAaoL,EAAM5Q,kBACVwF,aAAsBwK,KAC3BxK,EAAaA,EAAWxF,gBAGhC,OAAOwF,GAQXtlK,EAAUp8V,UAAU8tjB,sBAAwB,SAAU3rjB,EAAO0hB,GACzD,IAAIgriB,EAAmBjqjB,KAAK8gjB,mBAAmBvjjB,EAAM05f,WACjDizD,EAAiBlqjB,KAAK8gjB,mBAAmB7hiB,EAAIg4e,WACjD,IAAKx5f,EAAkBwsjB,GAAmB,CACtCjqjB,KAAK+2f,cAAc4C,WAAWswD,EAAiBlzD,eAG/C,IAAK,IAFDozD,EAAiBnqjB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQ0rjB,EAAiB18Y,MAC5D68Y,EAAepqjB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQ2rjB,EAAe38Y,MACnDrxK,EAAIiujB,EAAiB,EAAGjujB,GAAKkujB,EAAclujB,IAChD8D,KAAK+2f,cAAcowC,cAAcnniB,KAAKwuf,OAAOzmQ,MAAM7rP,GAAG0pgB,YAAY,GAAG7O,iBAUjFv/J,EAAUp8V,UAAU6tjB,wBAA0B,SAAU1rjB,EAAO0hB,GAC3Djf,KAAKqqjB,+BAA+B9sjB,EAAM05f,UAAWj3f,KAAMzC,EAAO0hB,IAKtEu4U,EAAUp8V,UAAUivjB,+BAAiC,SAAUpzD,EAAWhhb,EAAW14E,EAAO0hB,IAEpF1hB,EAAM05f,UAAUsR,eAAmBtpf,EAAIg4e,UAAUsR,eAC9ChrgB,EAAM05f,UAAUuR,iBAAmBvpf,EAAIg4e,UAAUuR,iBACjDxogB,KAAK+4gB,eAAex7gB,EAAM05f,UAAUuR,eAAgBjrgB,EAAO0hB,GAI9Djf,KAAKsqjB,sCAAsCrzD,EAAW15f,EAAO0hB,GAH7Djf,KAAKuqjB,iCAAiChtjB,EAAM05f,UAAUuR,eAAgBjrgB,EAAO0hB,IAUrFu4U,EAAUp8V,UAAUkvjB,sCAAwC,SAAUrzD,EAAW15f,EAAO0hB,GAOpF,GANI1hB,EAAM05f,YAAcA,EACpBj3f,KAAKiyf,gBAAgB0H,WAAW1C,EAAUhF,iBAG1Cjyf,KAAKiyf,gBAAgBk1C,cAAclwC,EAAUhF,iBAE7Chze,EAAIg4e,YAAcA,EAAtB,CAGA,IAAIiR,EAAQlogB,KAAK6viB,qBAAqB54C,GACjCx5f,EAAkByqgB,IACnBlogB,KAAKwqjB,kCAAkCtiD,EAAO3qgB,EAAO0hB,KAM7Du4U,EAAUp8V,UAAUovjB,kCAAoC,SAAUtiD,EAAO3qgB,EAAO0hB,GACxEipf,aAAiBhR,GACjBl3f,KAAKsqjB,sCAAsCpiD,EAAO3qgB,EAAO0hB,GAGzDjf,KAAKyqjB,kCAAkCviD,EAAO3qgB,EAAO0hB,IAM7Du4U,EAAUp8V,UAAUqvjB,kCAAoC,SAAUrlf,EAAO7nE,EAAO0hB,GAC5E,IAAK,IAAI/iB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAEhD,IAAK,IADD0oiB,EAAWx/d,EAAMiyb,aAAan7f,GACzBwnB,EAAI,EAAGA,EAAIkhhB,EAASvtC,aAAa76f,OAAQknB,IAC9C1jB,KAAK0qjB,yBAAyB9lB,EAASvtC,aAAa3ze,IAExD,GAAIzE,EAAIg4e,UAAUsR,eAAiBvogB,KAAK+ljB,YAAYnhB,EAAU3lhB,EAAIg4e,UAAUuR,gBACxE,OAGR,IAAIN,EAAQlogB,KAAK6viB,qBAAqBzqe,GAEtCplE,KAAKwqjB,kCAAkCtiD,EAAO3qgB,EAAO0hB,IAMzDu4U,EAAUp8V,UAAUsvjB,yBAA2B,SAAU3if,GACrD,IAAK,IAAI7rE,EAAI,EAAGA,EAAI6rE,EAAKsvb,aAAa76f,OAAQN,IAC1C8D,KAAK2qjB,0BAA0B5if,EAAKsvb,aAAan7f,KAMzDs7V,EAAUp8V,UAAUuvjB,0BAA4B,SAAUziD,GAClDA,aAAiBhR,GACjBl3f,KAAK4qjB,8BAA8B1iD,GAGnClogB,KAAK6qjB,0BAA0B3iD,IAMvC1wK,EAAUp8V,UAAUyvjB,0BAA4B,SAAUpB,GACtD,IAAK,IAAIvtjB,EAAI,EAAGA,EAAIutjB,EAASpyD,aAAa76f,OAAQN,IAE9C,IAAK,IADD0oiB,EAAW6kB,EAASpyD,aAAan7f,GAC5BwnB,EAAI,EAAGA,EAAIkhhB,EAASvtC,aAAa76f,OAAQknB,IAC9C1jB,KAAK0qjB,yBAAyB9lB,EAASvtC,aAAa3ze,KAOhE8zU,EAAUp8V,UAAUwvjB,8BAAgC,SAAU3zD,GAC1Dj3f,KAAKiyf,gBAAgBk1C,cAAclwC,EAAUhF,kBAMjDz6J,EAAUp8V,UAAUmvjB,iCAAmC,SAAUO,EAASvtjB,EAAO0hB,GAC7E,GAAIA,EAAIg4e,UAAUsR,cAAe,CAC7B,IAAIiuC,EAAgBx2iB,KAAKqxiB,mBAAmByZ,EAAS7riB,EAAIg4e,UAAUuR,gBACnE,GAAIguC,EAAcpuC,WAAWjkgB,SAAS8a,EAAIg4e,UAAUuR,gBAAiB,CACjE,IAAIgE,EAAYxsgB,KAAKy2iB,gBAAgBqU,EAAStU,GAC1C/pC,EAAUzsgB,KAAKy2iB,gBAAgBx3hB,EAAIg4e,UAAUuR,eAAgBguC,GAC7Dx2iB,KAAK22iB,aAAaH,EAAev3hB,EAAIg4e,UAAUuR,gBAE3CxogB,KAAK+4gB,eAAey9B,EAAej5iB,EAAO0hB,GAC1Cjf,KAAK0qjB,yBAAyBlU,GAG1BhqC,IAAcgqC,EACdx2iB,KAAKsqjB,sCAAsC/sjB,EAAM05f,UAAW15f,EAAO0hB,GAGnEjf,KAAK+qjB,wBAAwBv+C,EAAUnE,SAAU9qgB,EAAO0hB,GAMhEjf,KAAKgrjB,qBAAqBxU,EAAcpuC,WAAYouC,EAAe/pC,QAIvEzsgB,KAAK+qjB,wBAAwBvU,EAAcnuC,SAAU9qgB,EAAO0hB,OAG/D,CACD,IAAI8oD,EAAO/nE,KAAK82iB,iBAAiBgU,GACjC9qjB,KAAK+qjB,wBAAwBhjf,EAAKsgc,SAAU9qgB,EAAO0hB,KAM3Du4U,EAAUp8V,UAAU4vjB,qBAAuB,SAAU5lf,EAAOonc,EAAWC,GACnE,IAAIw+C,EAAcjrjB,KAAK88iB,YAAYtwC,EAAUnE,SAAUmE,GACnD0+C,EAAYD,EAAcz+C,EAAU/D,WAAWv6M,UAC/Cm3P,EAAcrljB,KAAK88iB,YAAYrwC,EAAQpE,SAAUoE,GACjD64C,EAAeD,EAAc54C,EAAQhE,WAAWv6M,UAChD+8P,EAAc5F,IACd4F,EAAc5F,GAEd6F,EAAY5F,IACZ4F,EAAY5F,GAEZ2F,EAAcjrjB,KAAKm1iB,wBACnB8V,EAAcjrjB,KAAKm1iB,uBAEnB8V,EAAcjrjB,KAAKm1iB,wBACnB8V,EAAcjrjB,KAAKm1iB,uBAGvB,IAAK,IADDj2hB,EAAQkmD,EAAMiyb,aAAa94f,QAAQkugB,EAAQpE,UACtCnsgB,EAAIkpE,EAAMiyb,aAAa94f,QAAQiugB,EAAUnE,UAAWnsgB,GAAKgjB,EAAOhjB,IAErE,IAAK,IADD0oiB,EAAWx/d,EAAMiyb,aAAan7f,GACzBwnB,EAAI,EAAGA,EAAIkhhB,EAASvtC,aAAa76f,OAAQknB,IAAK,CACnD,IAAIqkD,EAAO68d,EAASvtC,aAAa3ze,GAC7BlX,EAAOxM,KAAK88iB,YAAYlY,EAAU78d,GAClC+2b,GAAc/+d,MAAMkrhB,EAAa,IAAMnsD,GAAc/+d,MAAMvzB,EAAM,IAC9Dsyf,GAAc/+d,MAAMvzB,EAAM,GAAKsyf,GAAc/+d,MAAMmrhB,EAAW,IACjElrjB,KAAK0qjB,yBAAyB3if,KAS9CyvR,EAAUp8V,UAAU2vjB,wBAA0B,SAAUnmB,EAAUrniB,EAAO0hB,GACrE,IAAK,IAAI/iB,EAAI0oiB,EAAS31T,SAAU/yO,EAAI0oiB,EAASx8B,WAAW/Q,aAAa76f,OAAQN,IAAK,CAE9E,IAAK,IADDwpE,EAAMk/d,EAASx8B,WAAW/Q,aAAan7f,GAClCwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACzC1jB,KAAK0qjB,yBAAyBhlf,EAAI2xb,aAAa3ze,IAEnD,GAAIzE,EAAIg4e,UAAUsR,eAAiBvogB,KAAK+ljB,YAAYrgf,EAAKzmD,EAAIg4e,UAAUuR,gBACnE,OAGR,IAAIN,EAAQlogB,KAAK6viB,qBAAqBjL,EAASx8B,YAE/CpogB,KAAKwqjB,kCAAkCtiD,EAAO3qgB,EAAO0hB,IAQzDu4U,EAAUp8V,UAAU4tjB,wBAA0B,SAAUzrjB,EAAO0hB,GAE3D,GADAjf,KAAKqyf,gBAAgBsH,WAAWp8f,EAAM05f,UAAU5E,iBAC5C90f,EAAM05f,YAAch4e,EAAIg4e,YAAa15f,EAAMmuhB,cAAc5Z,cACtDv0gB,EAAMoO,SAAW3L,KAAKquiB,cAAc9wiB,EAAMmuhB,gBAAkBnuhB,EAAMoO,OAAS,IAAMsT,EAAItT,OAD5F,CAIA,IAAIw/iB,EAAO5tjB,EAAM05f,UAIjB,IAHI15f,EAAMoO,SAAW3L,KAAK0uiB,mBAAmByc,IAAUnrjB,KAAK43O,UACxDuzU,EAAOnrjB,KAAKsxiB,sBAAsB6Z,KAE9B1tjB,EAAkB0tjB,IAASA,IAASlsiB,EAAIg4e,WAAak0D,EAAKvzU,WAC9DuzU,EAAOnrjB,KAAKsxiB,sBAAsB6Z,GAEtC,IAAIx/iB,EAASw/iB,IAAS5tjB,EAAM05f,UAAY15f,EAAMoO,OAAS,EAEvD,IAAKlO,EAAkB0tjB,KAAUA,EAAKvzU,UAAW,CAC7C,IAAI1jO,EAAW,IAAIg6hB,GAAaluiB,KAAKwjgB,OACjC4nD,EAAW7tjB,EAAMmuhB,cAAc3iB,UAAUp9f,EAH7B,GAIZ6iiB,EAAmBxuiB,KAAKmviB,4BAA4B5xiB,EAAMmuhB,cAAe//gB,GAAQ,GACrFuI,EAASq6hB,wBAAwBhxiB,EAAMmuhB,cAAe0/B,EAASpqjB,QAASoqjB,EAASt5iB,MAAO08hB,GACxFxuiB,KAAKqrjB,+BAA+BF,EAAMnrjB,KAAMkU,EAAU+K,MAOlEu4U,EAAUp8V,UAAUiwjB,+BAAiC,SAAUp0D,EAAWhhb,EAAWqvO,EAAey6O,GAE5Fz6O,EAAc2xM,qBAAqBC,IAAmB5xM,EAAc2xM,UAAUsR,iBACzEw3B,EAAY9oC,UAAUsR,eACpBjjN,EAAc2xM,UAAUuR,iBAAmBu3B,EAAY9oC,UAAUuR,gBACjExogB,KAAK+4gB,eAAezzN,EAAc2xM,UAAUuR,eAAgBljN,EAAey6O,IAClF//hB,KAAKsrjB,8BAA8BhmQ,EAAc2xM,UAAUuR,eAAgBvyb,EAAWqvO,EAAey6O,GAGrG//hB,KAAKurjB,mBAAmBt0D,EAAW3xM,EAAey6O,IAQ1DvoM,EAAUp8V,UAAUowjB,8BAAgC,SAAUC,EAAalujB,EAAO0hB,GAC9E,IAAK,IAAI/iB,EAAIuvjB,EAAYx8U,SAAU/yO,EAAIuvjB,EAAYrjD,WAAW/Q,aAAa76f,OAAQN,IAAK,CAEpF,IAAK,IADD0oiB,EAAW6mB,EAAYrjD,WAAW/Q,aAAan7f,GAC1CwnB,EAAI,EAAGA,EAAIkhhB,EAASvtC,aAAa76f,OAAQknB,IAC9C1jB,KAAK0rjB,mCAAmC9mB,EAASvtC,aAAa3ze,GAAInmB,EAAO0hB,GAE7E,GAAIA,EAAIg4e,UAAUsR,eAAiBvogB,KAAK+ljB,YAAYnhB,EAAU3lhB,EAAIg4e,UAAUuR,gBACxE,OAGR,IAAIN,EAAQlogB,KAAK6viB,qBAAqB4b,EAAYrjD,YAElDpogB,KAAK2rjB,2BAA2BzjD,EAAO3qgB,EAAO0hB,IAMlDu4U,EAAUp8V,UAAUkwjB,8BAAgC,SAAUzhD,EAAW5zb,EAAW14E,EAAO0hB,GACvF,GAAIA,EAAIg4e,UAAUsR,cAAe,CAC7B,IAAIiuC,EAAgBx2iB,KAAKqxiB,mBAAmBxnC,EAAW5qf,EAAIg4e,UAAUuR,gBACrE,GAAIguC,EAAcpuC,WAAWjkgB,SAAS8a,EAAIg4e,UAAUuR,gBAAiB,CACjE,IAAIgE,EAAYxsgB,KAAKy2iB,gBAAgB5sC,EAAW2sC,GAC5C/pC,EAAUzsgB,KAAKy2iB,gBAAgBx3hB,EAAIg4e,UAAUuR,eAAgBguC,GAC7Dx2iB,KAAK22iB,aAAaH,EAAev3hB,EAAIg4e,UAAUuR,gBAE3CxogB,KAAK+4gB,eAAey9B,EAAej5iB,EAAO0hB,GAC1Cjf,KAAK0rjB,mCAAmClV,EAAej5iB,EAAO0hB,GAG1Dutf,IAAcgqC,EACdx2iB,KAAKurjB,mBAAmBhujB,EAAM05f,UAAW15f,EAAO0hB,GAGhDjf,KAAKwrjB,8BAA8Bh/C,EAAUnE,SAAU9qgB,EAAO0hB,GAMtEjf,KAAK4rjB,kCAAkCpV,EAAcpuC,WAAYouC,EAAe/pC,EAASlvgB,EAAO0hB,QAIpGjf,KAAKwrjB,8BAA8BhV,EAAcnuC,SAAU9qgB,EAAO0hB,OAGrE,CACD,IAAI8oD,EAAO/nE,KAAK82iB,iBAAiBjtC,GACjC7pgB,KAAKwrjB,8BAA8Bzjf,EAAKsgc,SAAU9qgB,EAAO0hB,KAOjEu4U,EAAUp8V,UAAUwwjB,kCAAoC,SAAUxmf,EAAOonc,EAAWC,EAASnnN,EAAey6O,GACxG,IAAI8rB,EAAU7rjB,KAAK88iB,YAAYtwC,EAAUnE,SAAUmE,GAC/Cs/C,EAAQD,EAAUr/C,EAAU/D,WAAWv6M,UACvCm3P,EAAcrljB,KAAK88iB,YAAYrwC,EAAQpE,SAAUoE,GACjD64C,EAAeD,EAAc54C,EAAQhE,WAAWv6M,UAChD29P,EAAUxG,IACVwG,EAAUxG,GAEVyG,EAAQxG,IACRwG,EAAQxG,GAERuG,EAAU7rjB,KAAKm1iB,wBACf0W,EAAU7rjB,KAAKm1iB,uBAEf2W,EAAQ9rjB,KAAKm1iB,wBACb2W,EAAQ9rjB,KAAKm1iB,uBAGjB,IAAK,IADDj2hB,EAAQkmD,EAAMiyb,aAAa94f,QAAQkugB,EAAQpE,UACtCnsgB,EAAIkpE,EAAMiyb,aAAa94f,QAAQiugB,EAAUnE,UAAWnsgB,GAAKgjB,EAAOhjB,IAErE,IAAK,IADDwpE,EAAMN,EAAMiyb,aAAan7f,GACpBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GACxBlX,EAAOxM,KAAK88iB,YAAYp3e,EAAKqC,GAC7B+2b,GAAc/+d,MAAM8rhB,EAAS,IAAM/sD,GAAc/+d,MAAMvzB,EAAM,IAC7Dsyf,GAAc/+d,MAAMvzB,EAAM,GAAKsyf,GAAc/+d,MAAM+rhB,EAAO,IAC1D9rjB,KAAK0rjB,mCAAmC3jf,EAAMu9O,EAAey6O,KAS7EvoM,EAAUp8V,UAAUmwjB,mBAAqB,SAAUt0D,EAAW15f,EAAO0hB,GACjE,GAAIg4e,IAAc15f,EAAM05f,WAAaA,IAAch4e,EAAIg4e,WAIvD,GAAIh4e,EAAIg4e,YAAcA,GAAa15f,EAAM05f,YAAcA,GAA4B,IAAfh4e,EAAItT,OAAxE,CAGA,IAAIk/f,EAAc,EACdrugB,EAASwD,KAAK0uiB,mBAAmBz3C,GACrC,GAAIA,IAAc15f,EAAM05f,UAAW,CAC/B4T,EAActtgB,EAAMoO,OAGpB,GADgB3L,KAAK+rjB,mBAAmB90D,EAAW15f,EAAO0hB,EAAKziB,GAE3D,OAGR,IAAIyvhB,GAA2E,IAAzDh1B,EAAUI,aAAa94f,QAAQhB,EAAMmuhB,eACvDz0B,EAAUI,aAAa94f,QAAQhB,EAAMmuhB,eAAiB,EACtDg5B,GAAuE,IAAvDztD,EAAUI,aAAa94f,QAAQ0gB,EAAIysgB,eACnDz0B,EAAUI,aAAa94f,QAAQ0gB,EAAIysgB,eAAiBz0B,EAAUI,aAAa76f,OAAS,EACpFu4gB,EAAY91f,EAAItT,OAChBsrf,IAAch4e,EAAIg4e,YAClB8d,EAAYv4gB,GAGhB,IAAK,IADDwvjB,GAAuB,EAClB9vjB,EAAI+vhB,EAAiB/vhB,GAAKwojB,EAAexojB,IAAK,CACnD,IAAI22gB,EAAa5b,EAAUI,aAAan7f,GACpCA,IAAM+vhB,IACNphB,EAAc7qgB,KAAK2wiB,mBAAmB99B,IAGtCkC,EADAlC,IAAe5zf,EAAIysgB,cACPzsgB,EAAItT,OAGJ3L,KAAKquiB,cAAcx7B,GAGnC,IAAK,IADD3zf,EAAQ,EACHwE,EAAI,EAAGA,EAAImvf,EAAWz4f,SAAS5d,OAAQknB,IAAK,CACjD,IAAI86I,EAASq0W,EAAWz4f,SAASsJ,GACjC,GAAImnf,GAAe3rf,EAAQs/I,EAAOhiK,OAC9B0iB,GAASs/I,EAAOhiK,WADpB,CAIA,GAAIgiK,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WACzCZ,GAAcU,uBAAuBhhW,GAAS,CACjD,IAAI0zY,EAAaz0iB,EAAkB+gK,EAAO+zW,gBACtC/zW,EAAOmhW,SAAWnhW,EAAO+zW,eAC7B,GACIrzf,GAASs/I,EAAOhiK,OAChBgiK,EAASA,EAAOixO,SAChBvzY,WACMuB,EAAkB+gK,IAAWA,IAAW0zY,GAClD8Z,GAAuB,EAE3B,GAAIxtZ,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WACzCZ,GAAcU,uBAAuBhhW,IAAWwtZ,EAAsB,CACzE,IAAIC,EAAcztZ,EAAOohW,WACzB,GACI5/f,KAAKqyf,gBAAgB80C,cAAc8kB,EAAY55D,iBAC/C45D,EAAcA,EAAYx8K,iBACnBw8K,aAAuBxsD,KAKtC,GAHIjhW,aAAkBoqW,IAClB5ogB,KAAKqyf,gBAAgB80C,cAAc3oY,EAAO6zV,iBAE1C50f,EAAkB+gK,IAAWu2W,GAAa71f,EAAQs/I,EAAOhiK,OACzD,MAEJ0iB,GAASs/I,EAAOhiK,SAGxB,GAAIyiB,EAAIg4e,YAAcA,EAAtB,CAGA,IAAIiR,EAAQlogB,KAAK6viB,qBAAqB54C,GACjCx5f,EAAkByqgB,IACnBlogB,KAAK2rjB,2BAA2BzjD,EAAO3qgB,EAAO0hB,UA5E9Cjf,KAAKksjB,2BAA2Bj1D,EAAWj3f,OA+EnDw3V,EAAUp8V,UAAU2wjB,mBAAqB,SAAUZ,EAAMvK,EAAUC,EAAQrkjB,GACvE,IAAIsV,EAAQ,EACR+4f,EAAc+1C,EAASj1iB,OACvBwgjB,EAAiBvL,EAASl1B,cAAc3iB,UAAU8B,EAAa/4f,GACnEA,EAAQq6iB,EAAer6iB,MACvB,IAAI0sJ,EAAS2tZ,EAAenrjB,QAC5B,GAAIvD,EAAkB+gK,GAAS,CACJoiZ,EAAS3pD,UAAUI,aAAa94f,QAAQqijB,EAASl1B,eACxE,GAAIk1B,EAASl1B,cAAczZ,aAGvB,OAFAzzW,EAASoiZ,EAASl1B,cAAczZ,aAAa73f,SAASwmiB,EAASl1B,cAAczZ,aAAa73f,SAAS5d,OAAS,GAC5GwD,KAAKqyf,gBAAgBsH,WAAWn7V,EAAO6zV,kBAChC,EAGf,GAAIwY,EAAcrugB,EAAQ,CACtB,GAAIwD,KAAK43O,QAAS,CACd,GAAIp5E,aAAkBoqW,IAAmBpqW,aAAkBihW,KAC9B,IAArBjhW,EAAOkhW,WAAwC,IAArBlhW,EAAOkhW,WAAmB,CACxD,IAAIgT,EAAe1ygB,KAAKymjB,uBAAuBjoZ,GAC3B,IAAhBqsW,GAAqB6H,IACrBl0W,EAASk0W,GAEb1ygB,KAAKqyf,gBAAgBsH,WAAWn7V,EAAO6zV,sBAGlC50f,EAAkBuC,KAAKymjB,uBAAuBjoZ,IAGzC/gK,EAAkBuC,KAAK0mjB,mBAAmBloZ,IAIhDx+J,KAAKqyf,gBAAgBsH,WAAWwxD,EAAK94D,iBAHrCryf,KAAKqyf,gBAAgBsH,WAAW35f,KAAK0mjB,mBAAmBloZ,GAAQ6zV,iBAHhEryf,KAAKqyf,gBAAgBsH,WAAW35f,KAAKymjB,uBAAuBjoZ,GAAQ6zV,iBAS5E,OAAO,EAGHvgf,IAAU0sJ,EAAOhiK,QAAWiB,EAAkB+gK,EAAOixO,UAGhDjxO,aAAkBoqW,GACvB5ogB,KAAKqyf,gBAAgBsH,WAAWn7V,EAAO6zV,iBAElC7zV,aAAkBihW,IACvBz/f,KAAKqyf,gBAAgBsH,WAAW35f,KAAKosjB,mCAAmC5tZ,IANxEx+J,KAAKqyf,gBAAgBsH,WAAW35f,KAAKqsjB,4BAA4B7tZ,SAWzE,GAAIhiK,IAAWqkjB,EAAOl1iB,OAalB,OAZI6yJ,aAAkBoqW,IAAkBpqW,aAAkBihW,GACtDz/f,KAAKqyf,gBAAgBsH,WAAWn7V,EAAO6zV,iBAEjC50f,EAAkB+gK,GAOxBx+J,KAAKqyf,gBAAgBsH,WAAWwxD,EAAK94D,iBALhC50f,EADL+gK,EAASx+J,KAAKymjB,uBAAuBjoZ,KAEjCx+J,KAAKqyf,gBAAgBsH,WAAWn7V,EAAO6zV,kBAMxC,EAGf,OAAO,GAKX76J,EAAUp8V,UAAUuwjB,2BAA6B,SAAUzjD,EAAO3qgB,EAAO0hB,GACjEipf,aAAiBhR,GACjBl3f,KAAKurjB,mBAAmBrjD,EAAO3qgB,EAAO0hB,GAGtCjf,KAAKssjB,0BAA0BpkD,EAAO3qgB,EAAO0hB,IAMrDu4U,EAAUp8V,UAAUkxjB,0BAA4B,SAAUlnf,EAAO7nE,EAAO0hB,GACpE,IAAK,IAAI/iB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAEhD,IAAK,IADDwpE,EAAMN,EAAMiyb,aAAan7f,GACpBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACzC1jB,KAAK0rjB,mCAAmChmf,EAAI2xb,aAAa3ze,GAAInmB,EAAO0hB,GAExE,GAAIA,EAAIg4e,UAAUsR,eAAiBvogB,KAAK+ljB,YAAYrgf,EAAKzmD,EAAIg4e,UAAUuR,gBACnE,OAGR,IAAI+iB,EAAWvrhB,KAAK6viB,qBAAqBzqe,GAEzCplE,KAAK2rjB,2BAA2BpgC,EAAUhuhB,EAAO0hB,IAMrDu4U,EAAUp8V,UAAUswjB,mCAAqC,SAAU3jf,EAAMxqE,EAAO0hB,GAC5E,IAAK,IAAI/iB,EAAI,EAAGA,EAAI6rE,EAAKsvb,aAAa76f,OAAQN,IAC1C8D,KAAK2rjB,2BAA2B5jf,EAAKsvb,aAAan7f,GAAIqB,EAAO0hB,IAMrEu4U,EAAUp8V,UAAU8wjB,2BAA6B,SAAUj1D,EAAWhhb,GAClE,IAAK,IAAI/5E,EAAI,EAAGA,EAAI+6f,EAAUI,aAAa76f,OAAQN,IAE/C,IAAK,IADDipjB,EAAaluD,EAAUI,aAAan7f,GAC/BwnB,EAAI,EAAGA,EAAIyhiB,EAAW/qiB,SAAS5d,OAAQknB,IAAK,CACjD,IAAI1iB,EAAUmkjB,EAAW/qiB,SAASsJ,GAC5B1iB,aAAmB6ngB,IAAmB7ngB,aAAmBy+f,IAC3Dxpb,EAAUo8a,gBAAgB80C,cAAcnmiB,EAAQqxf,mBAShE76J,EAAUp8V,UAAUixjB,4BAA8B,SAAU7tZ,GACxD,IAAIylZ,EAAcjkjB,KAAK0mjB,mBAAmBloZ,GAC1C,GAAI/gK,EAAkBwmjB,GAClB,OAAOzlZ,EAAO6zV,gBAElB,IAAIuN,OAAa1kgB,EAMjB,OALI+ojB,aAAuBxkD,IACM,IAAzBG,EAAWF,YACXE,EAAaqkD,GAGjBxmjB,EAAkBmigB,GACXqkD,EAAY5xD,gBAGZryf,KAAKosjB,mCAAmCxsD,IAOvDpoK,EAAUp8V,UAAUgxjB,mCAAqC,SAAUxsD,GAC/D,IAAIqkD,EAAcrkD,EACdd,GAAcU,uBAAuBI,KAEjCqkD,EADAxmjB,EAAkBmigB,EAAW2S,gBACf3S,EAAWD,SAGXC,EAAW2S,gBAGjC,IAAIk+B,OAAkBv1iB,EAMtB,OALKuC,EAAkBwmjB,EAAYx0K,YAE/BghK,EAAkBzwiB,KAAK0wiB,oBAAoBuT,EAAYx0K,WAGvDhyY,EAAkBgziB,GACXwT,EAAY5xD,gBAEhBo+C,EAAgBp+C,iBAM3B76J,EAAUp8V,UAAUg/hB,yBAA2B,SAAUv0B,EAAQlye,GAC7D,GAAIl2B,EAAkBuC,KAAKzC,QAAUyC,KAAK43O,SAAWn6O,EAAkBoogB,GACnE,OAAO,EAEX,IAAI7nc,GAAa,EACjB,EAAG,CACC,GAAIh+D,KAAKsyhB,gBAAgBjvS,YAAYwiR,GAAS,CAC1C,IAAI0mD,OAAQ,EAER1mD,aAAkBwB,IAClBklD,EAAQvsjB,KAAKwjgB,MAAMvtb,UAAUmhO,OAAOyuN,GAC7B7lgB,KAAKwjgB,MAAMvtb,UAAU+gO,QAAQ6uN,KAGpC0mD,EAAQ1mD,EAAO74f,EACR64f,EAAO94f,GAElB,IAAI4lhB,EAAa3yhB,KAAKsyhB,gBAAgB5qhB,IAAIm+f,GAC1C7nc,EAAa20d,EAAWnmhB,MAAQmnB,EAAM5mB,GAAKw/iB,GAAS54hB,EAAM3mB,GACtDu/iB,EAAQ1mD,EAAO9vf,QAAU4d,EAAM3mB,GAAK2lhB,EAAWnmhB,KAAOmmhB,EAAW38gB,OAAS2d,EAAM5mB,EAExF84f,EAAUA,aAAkBwB,GAAcxB,EAAO5O,UAAY4O,EAAOvO,uBAC9D75f,EAAkBoogB,KAAY7nc,GACxC,OAAOA,GAMXw5R,EAAUp8V,UAAUoxjB,6BAA+B,WAC/C,IAAIjuhB,EAAS,IAAI44d,GAEjB,OADAn3f,KAAKiyf,gBAAgBm2C,aAAa7pgB,GAC3BA,GAOXi5T,EAAUp8V,UAAUqxjB,wBAA0B,SAAUx1D,EAAWsb,EAAgB5S,EAAU+sD,EAAenuhB,GACxG,IAAI4shB,EAAOl0D,EACX,GAAIk0D,IAASxrD,EAAS11c,KAAKgtc,UAEvB,OADAy1D,GAAgB,GACPC,YAAa,4BAA6BD,cAAiBA,EAAenuhB,OAAUA,GAKjG,IAAK,IAHDouhB,EAAc,GACdljR,EAAY0hR,EAAK9zD,aAAa94f,QAAQg0gB,EAAetod,MACrDn4C,EAAQq5iB,EAAK9zD,aAAa5tN,GAAWrvR,SAAS7b,QAAQg0gB,GACjD7uf,EAAI+lR,EAAW/lR,EAAIyniB,EAAK9zD,aAAa76f,OAAQknB,IAAK,CACvD,IAAImvf,EAAas4C,EAAK9zD,aAAa3ze,GAC/BA,IAAM+lR,IACN33R,GAAS,GAEb,IAAK,IAAI5V,EAAI4V,EAAQ,EAAG5V,EAAI22gB,EAAWz4f,SAAS5d,OAAQN,IAAK,CACzD,IAAIsiK,EAASq0W,EAAWz4f,SAASle,GACjC,GAAIsiK,IAAWmhW,EACX,OAASgtD,YAAeA,EAAaD,cAAiBA,EAAenuhB,OAAUA,GAEnF,GAAIigI,aAAkBoqW,GAClB+jD,GAAenuZ,EAAOxvI,KACtBuP,EAASigI,EAAO6zV,oBAEf,CAAA,KAAI7zV,aAAkBihW,IAavB,OADAitD,GAAgB,GACPC,YAAe,4BAA6BD,cAAiBA,EAAenuhB,OAAUA,GAZ3FigI,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,YACxCjigB,EAAkB+gK,EAAOmhW,YAEzB7tf,EADArU,EAAkB+gK,EAAO+zW,gBACjBM,EAAWz4f,SAAS7b,QAAQigK,EAAOmhW,UAGnCkT,EAAWz4f,SAAS7b,QAAQigK,EAAO+zW,mBAU/D,OAASo6C,YAAeA,EAAaD,cAAiBA,EAAenuhB,OAAUA,IAMnFi5T,EAAUp8V,UAAUigiB,yBAA2B,SAAUzB,EAAajD,GAClE,IAAI52hB,EAAQC,KACR6lgB,EAAS7lgB,KAAKwuf,OAAO6rC,cAAcT,GACvC,IAAKn8hB,EAAkBoogB,GAAS,CAC5B,IAAIg1C,EAAiB76iB,KAAKwhiB,oCAAoC37B,EAAQ+zB,GAEjEn8hB,EAAkBo9iB,KACnB76iB,KAAKwuf,OAAOksC,+BAA+Bd,EAAa,GACxD55hB,KAAKy6iB,oBAAoBI,GACzB16iB,WAAW,WACHJ,EAAMyuf,SACNzuf,EAAMyuf,OAAOmoC,aAAeA,EAC5B52hB,EAAMyuf,OAAOj/X,cACbxvH,EAAMyuf,OAAOmoC,cAAe,QAShDn/L,EAAUp8V,UAAU2/iB,YAAc,SAAUn7C,GACxC,IAAIjwc,EAAY,IAAI85W,GAAUm2F,EAAY5/f,MACtC4vD,EAAOD,EAAUiof,eAUrB,OATIjof,EAAUgrf,eAAen+iB,OAAS,IACE,MAAhCmzD,EAAUgrf,eAAe,KAAel9iB,EAAkBmyD,IAAyB,IAAhBA,EAAKpzD,OAIxEozD,GAAQ,IAAMD,EAAUgrf,eAHxB/qf,EAAO,oBAMfD,EAAUt9C,UACHu9C,GAMX4nS,EAAUp8V,UAAUsmiB,6BAA+B,SAAU9hC,EAAYiG,EAAQn7G,GAC7E,GAAIk1G,EAAY,CACZ,GAAI5/f,KAAKwjgB,MAAMvU,mBACgE,UAA3Ejvf,KAAKwjgB,MAAMvU,kBAAkB2nB,oBAAoB51gB,QAAQ0D,MAAMosC,QAC/D,OAEC9wC,KAAK4sjB,iBACN5sjB,KAAK4sjB,eAAiBzrjB,EAAc,OAASkC,UAAW,iBACxDrD,KAAKwuf,OAAO+mC,gBAAgB5zhB,YAAY3B,KAAK4sjB,iBAEjD5sjB,KAAK4sjB,eAAelojB,MAAMosC,QAAU,QACpC,IAAImoF,EAAO,IAAI7a,GAAK,iBAAkBp+G,KAAKwjgB,MAAM33D,eACjD5yU,EAAK1a,UAAUv+G,KAAKwjgB,MAAMx1f,QAC1B,IAAI6+iB,EAAc5zb,EAAKh/C,YAAY,wBAC/Bj6E,KAAKwjgB,MAAMthB,gCACX2qE,EAAc,QAAUA,GAE5B,IAAI/R,EAAW96iB,KAAK+6iB,YAAYn7C,GAChC5/f,KAAK4sjB,eAAe5qjB,UAAY84iB,EAAW,WAAa+R,EAAc,OACtE,IAAIvwC,EAAYt8gB,KAAKo3S,OAAOyuN,GAAU7lgB,KAAKwuf,OAAO15a,WAC9Cy4F,EAAOvtK,KAAKu7S,QAAQsqN,EAAO5O,WAC3Bzgf,EAAiBxW,KAAKwuf,OAAO+mC,gBAAgB3phB,wBAAwBoK,MAAQhW,KAAKwuf,OAAO+mC,gBAAgBvphB,WACzGQ,EAAO+gK,EAAKurV,kBAAkB/rf,EAAI29Y,EAAO1qZ,KAAKwuf,OAAO15a,WACpDtoE,EAAOxM,KAAK4sjB,eAAeh9hB,YAAc,GAAMpZ,IAChDhK,GAAgBxM,KAAK4sjB,eAAeh9hB,aAAepZ,EAAiBhK,GAAS,IAEjF,IAAIsgjB,EAAQ9sjB,KAAKugiB,WAAWhzX,IAAS+uW,EAAYt8gB,KAAK4sjB,eAAej1f,cACrEm1f,EAAQA,EAAQ9sjB,KAAKwuf,OAAO+mC,gBAAgBpphB,UAAY2gjB,EAAQA,EAAQjnD,EAAO9vf,OAAS/V,KAAK4sjB,eAAej1f,aAC5G33D,KAAK+sjB,YAAYvgjB,EAAMsgjB,GAClBrvjB,EAAkBuC,KAAKgtjB,eAAiBptD,IAAe5/f,KAAKgtjB,eAC7DhtjB,KAAKitjB,cAAc/4iB,UAAakC,EAAG5J,EAAM6J,EAAGy2iB,IAEhD9sjB,KAAKitjB,cAAcz1b,OACnBx3H,KAAKgtjB,aAAeptD,OAGpB5/f,KAAK24gB,eAObnhL,EAAUp8V,UAAU2xjB,YAAc,SAAUhgjB,EAAGC,GACtChN,KAAKitjB,gBACNjtjB,KAAKitjB,cAAgB,IAAIp4b,GAAM70H,KAAK4sjB,gBAChC72iB,OAAQ,OACRC,MAAO,OACPy/G,SAAUz1H,KAAKwuf,OAAO+mC,gBAAgBlhhB,cACtCH,UAAYkC,EAAGrJ,EAAGsJ,EAAGrJ,OAQjCwqV,EAAUp8V,UAAUu9gB,YAAc,WAC9B34gB,KAAKgtjB,kBAAe9xjB,EAChB8E,KAAKitjB,gBACLjtjB,KAAKitjB,cAActle,OACnB3nF,KAAKitjB,cAAc56iB,UACnBrS,KAAKitjB,mBAAgB/xjB,EACrB8E,KAAK4sjB,eAAelojB,MAAMosC,QAAU,SAO5C0mT,EAAUp8V,UAAUomiB,oCAAsC,SAAU37B,EAAQqnD,GACxE,IAAI1uZ,OAAStjK,EACTwR,EAAM1M,KAAKo3S,OAAOyuN,GAClBsnD,EAAgBntjB,KAAKuhiB,iBAAiB17B,GAC1C,KAAIqnD,EAAelgjB,EAAIN,GAAOwgjB,EAAelgjB,EAAIN,EAAMm5f,EAAO9vf,QACvDm3iB,EAAengjB,EAAIogjB,GAAiBD,EAAengjB,EAAIogjB,EAAgBtnD,EAAO5O,UAAUjhf,OAD/F,CAIA,IAAIxJ,EAAOq5f,EAAO5O,UAAUlqf,EACxBw7iB,EAAgBvojB,KAAKwojB,gBAAgB3iD,EAAQr5f,GACjDA,EAAO+7iB,EAAc/7iB,KACrB,IAAIxL,EAAUunjB,EAAcvnjB,QAC5B,GAAIvD,EAAkBuD,GAAU,CAC5B,IAAIgV,EAAQhW,KAAKwuf,OAAO0uB,WAAWC,sBAAsBtX,EAAO5O,UAAU5E,iBAC1E,GAAI66D,EAAengjB,GAAKogjB,EAAgBn3iB,GAASk3iB,EAAengjB,GAAKogjB,EAAgBn3iB,EAAO,CAExF,IAAIo3iB,KACArrf,EAAQ/hE,KAAKqtjB,mBAAmBxnD,EAAO5O,UAAWm2D,GAGtD,OAFAA,KACAA,OAAgBlyjB,EACT6mE,OAGV,CACD,GAAImrf,EAAengjB,EAAIP,EAAOxL,EAAQg+B,OAAOxyB,KACzC,IAAK,IAAItQ,EAAI2pgB,EAAOzrf,SAAS7b,QAAQyC,GAAU9E,EAAI2pgB,EAAOzrf,SAAS5d,SAC/DwE,EAAU6kgB,EAAOzrf,SAASle,KACtBgxjB,EAAengjB,EAAIP,EAAOxL,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,OAAS9Z,IAAM2pgB,EAAOzrf,SAAS5d,OAAS,IAF7BN,IAKvEsQ,GAAQxL,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,MAG9CwoJ,EAASx9J,EACLgV,EAAQhV,EAAQg+B,OAAOxyB,KAAOxL,EAAQgV,MAK1C,GAJIvY,EAAkB+gK,EAAOixO,YAEzBz5X,GAAShW,KAAKwuf,OAAO0uB,WAAWC,sBAAsB3+W,EAAOv0G,KAAKgtc,UAAU5E,kBAE5E66D,EAAengjB,GAAKP,EAAOwJ,EAAO,CAE9Bo3iB,KACArrf,EAAQ/hE,KAAKstjB,0BAA0B9uZ,EAAOv0G,KAAKgtc,UAAWz4V,EAAQ4uZ,GAG1E,OAFAA,KACAA,OAAgBlyjB,EACT6mE,MASnBy1R,EAAUp8V,UAAU49gB,kBAAoB,WACpC,IAAIv7gB,EAAkBuC,KAAKif,KAA3B,CAGA,IAAInN,EAAQ,EACR2wiB,EAAgBzijB,KAAKif,IAAIysgB,cAAc3iB,UAAU/ogB,KAAKif,IAAItT,OAAQmG,GACtEA,EAAQ2wiB,EAAc3wiB,MACtB,IAAI0sJ,EAASikZ,EAAczhjB,QACvBosjB,KACArrf,OAAQ7mE,EACZ,GAAIuC,EAAkB+gK,GAClBz8F,EAAQ/hE,KAAKqtjB,mBAAmBrtjB,KAAKif,IAAIg4e,UAAWm2D,OAEnD,CACD,IAAIn2D,EAAYz4V,EAAOv0G,KAAKgtc,UAC5Bl1b,EAAQ/hE,KAAKstjB,0BAA0Br2D,EAAWz4V,EAAQ4uZ,GAG9D,OADAA,KACOrrf,IAKXy1R,EAAUp8V,UAAUiyjB,mBAAqB,SAAUp2D,EAAWm2D,GAC1D,IAAK,IAAIlxjB,EAAI,EAAGA,EAAI8D,KAAKwuf,OAAOhie,OAAOhwB,OAAQN,IAC3C,IAAsD,IAAlDkxjB,EAAc7ujB,QAAQyB,KAAKwuf,OAAOhie,OAAOtwB,MAAcuB,EAAkBuC,KAAKwuf,OAAOhie,OAAOtwB,GAAGq2gB,gBAAnG,CAII66C,EAAc5ojB,KAAKxE,KAAKwuf,OAAOhie,OAAOtwB,IAE1C,IAAI6lE,EAAQ/hE,KAAKmuhB,aAAanuhB,KAAKwuf,OAAOhie,OAAOtwB,IAEjD,IADA6lE,EAAQA,EAAM9xD,OAAO2F,eACXlG,MAAM,eAAiB1P,KAAKutjB,yBAAyBvtjB,KAAKwuf,OAAOhie,OAAOtwB,GAAI+6f,GAClF,OAAOj3f,KAAKwuf,OAAOhie,OAAOtwB,KAWtCs7V,EAAUp8V,UAAUkyjB,0BAA4B,SAAUr2D,EAAWz4V,EAAQhyI,GACzE,IAAK,IAAItwB,EAAI,EAAGA,EAAI8D,KAAKwuf,OAAOhie,OAAOhwB,OAAQN,IAC3C,IAA+C,IAA3CswB,EAAOjuB,QAAQyB,KAAKwuf,OAAOhie,OAAOtwB,MAAcuB,EAAkBuC,KAAKwuf,OAAOhie,OAAOtwB,GAAGq2gB,gBAA5F,CAII/lf,EAAOhoB,KAAKxE,KAAKwuf,OAAOhie,OAAOtwB,IAEnC,IAAIgyhB,EAAYluhB,KAAKmuhB,aAAanuhB,KAAKwuf,OAAOhie,OAAOtwB,IAErD,IADAgyhB,EAAYA,EAAUj+gB,OAAO2F,eACflG,MAAM,gBAAkB1P,KAAKwtjB,sBAAsBxtjB,KAAKwuf,OAAOhie,OAAOtwB,GAAIsiK,IAAWx+J,KAAKi5gB,gBACpG,OAAOj5gB,KAAKwuf,OAAOhie,OAAOtwB,GAGlC,GAAI+6f,EAAUK,2BAA2BR,MAAgBG,aAAqBmP,IAC1E,OAAOpmgB,KAAKstjB,0BAA0Br2D,EAAUK,gBAAiB94V,EAAQhyI,IAOjFgrU,EAAUp8V,UAAUqyjB,SAAW,SAAU9qT,GACrC,GAAqB,KAAjBA,IAAuBllQ,EAAkBklQ,GAA7C,CAGA,IAAI7wP,GAAUA,MAAO6wP,GACjBp1F,EAAOvtK,KAAKzC,MAAMg+S,QAAQzpS,GAC1B47iB,EAAY57iB,EAAMA,MAAMvT,QAAQ,KAChCxB,EAAQ+U,EAAMA,MAAMuS,UAAU,EAAGqpiB,GACrC57iB,EAAMA,MAAQA,EAAMA,MAAMuS,UAAUqpiB,GAAWzwjB,QAAQ,IAAK,IAC5D,IAAI6/f,EAAavvV,EAAKq4V,YAAYhxe,SAAS73B,EAAO,KAClD,OAAOiD,KAAK2tjB,iBAAiB7wD,EAAYhrf,EAAMA,SAMnD0lV,EAAUp8V,UAAUuyjB,iBAAmB,SAAU9nD,EAAQ3xf,GACrD,GAAiB,KAAbA,IAAmBzW,EAAkByW,GAAzC,CAGA,IAAIpC,EAAQoC,EAAS3V,QAAQ,KACzBxB,EAAQmX,EAASmQ,UAAU,EAAGvS,GAClCoC,EAAWA,EAASmQ,UAAUvS,GAAO7U,QAAQ,IAAK,IAClD,IAAIsD,EAAOslgB,EAQX,MADA/zf,EAAQ8iB,SAAS73B,EAAO,MACX,GAAK+U,EAAQ+zf,EAAOxO,aAAa76f,QAmB1C,OAAO+D,EAlBP,IAAIF,EAAQwlgB,EAAOxO,gBACnB,KAAInjf,EAAS3V,QAAQ,MAAQ,GAazB,OAAO8B,EAZP,GAAIA,aAAiB62f,GAIjB,OAHIhjf,EAAS3V,QAAQ,MAAQ,IACzB2V,EAAW,KAER7T,EAEX,GAAIA,aAAiBomgB,GAAa,CAE9B,OADezmgB,KAAK2tjB,iBAAiBttjB,EAAO6T,GAWxD,OAAO3T,IAMXi3V,EAAUp8V,UAAUoyjB,sBAAwB,SAAU5tD,EAAYphW,GAC9D,QAAK/gK,EAAkBmigB,EAAWD,WAAcligB,EAAkBmigB,EAAW2S,kBACrEvygB,KAAKwijB,oBAAoB5iD,EAAW2S,eAAgB/zW,KAC7Cx+J,KAAK0ijB,mBAAmB9iD,EAAWD,SAAUnhW,IAShEg5L,EAAUp8V,UAAUmyjB,yBAA2B,SAAU3tD,EAAY3I,GACjE,IAAKx5f,EAAkBmigB,EAAWD,YAAcligB,EAAkBmigB,EAAW2S,gBAAiB,CAC1F,IAAIq7C,EAAiBhuD,EAAW2S,eAAetod,KAAKgtc,UACpD,GAAI2I,EAAW2S,eAAetod,KAAKgtc,YAAcA,GAC1Cj3f,KAAKsviB,cAAcse,EAAgB32D,GAAY,CAElD,OADuB2I,EAAWD,SAAS11c,KAAKgtc,YACnBA,GAAaj3f,KAAKuviB,aAAaqe,EAAgB32D,IAGpF,OAAO,GAMXz/J,EAAUp8V,UAAU69gB,aAAe,WAC/B,GAAIj5gB,KAAKzC,MAAM05f,UAAUr/Q,WAAa53O,KAAKif,IAAIg4e,UAAUr/Q,UACrD,OAAO,EAEX,IAAI0tE,EAAgBtlT,KAAKzC,MACrBwiiB,EAAc//hB,KAAKif,IAClBjf,KAAK+2iB,YACNzxP,EAAgBtlT,KAAKif,IACrB8ghB,EAAc//hB,KAAKzC,OAEvB,IAAIyrgB,EAAgB,EAChBwoC,EAAalsP,EAAc2xM,UAAU8R,UAAUzjN,EAAc35S,OAAQq9f,GACrExqW,EAASgzY,EAAWxwiB,SACxBgogB,EAAgBwoC,EAAW1/hB,SACL0sJ,EAAOhiK,SACzBgiK,EAASx+J,KAAKmyiB,0BAA0B3zY,EAAQwqW,IAGpD,IAAIu4C,GADJ/P,EAAazR,EAAY9oC,UAAU8R,UAAUg3B,EAAYp0hB,OAAQq9f,IACtChogB,QAE3B,GADAgogB,EAAgBwoC,EAAW1/hB,MACvB0sJ,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WACzC6hD,aAAqB9hD,IAA2C,IAAxB8hD,EAAU7hD,WAAmBlhW,EAAO+zW,eAAgB,CAC/F,IAAI2xC,EAAa1lZ,EAAO+zW,eAAe9iI,SACvC,GAAIy0K,aAAsBr7C,IAAmBq7C,EAAWz0K,WAAa8xK,EACjE,OAAO,EAGf,OAAO,GAMX/pN,EAAUp8V,UAAUmgiB,eAAiB,WACjC,IAEIsyB,EAFa7tjB,KAAKwuf,OAAO2wC,oBAEG33B,qBADhB,KAEZliN,EAAgBtlT,KAAKghjB,gBAAgB6M,GACrC9tB,EAAc//hB,KAAKghjB,gBAAgB6M,GACvC7tjB,KAAKowN,YAAYk1F,EAAey6O,GAChC//hB,KAAK8tjB,kBAAkB9tjB,KAAKwuf,OAAO2wC,qBACnCn/hB,KAAKg4iB,oBAAsB,QAM/BxgN,EAAUp8V,UAAU0yjB,kBAAoB,SAAU3I,GAC9C,IAAInviB,EAAQmviB,EAAW/qiB,SAAS,GAAGpE,MAC/BxJ,EAAOxM,KAAKwuf,OAAOywC,aAAakmB,GAChCz4iB,EAAMy4iB,EAAWluD,UAAUjqf,EAC/BhN,KAAKq7iB,sBAAsB8J,EAAYnviB,EAAOxJ,EAAME,GACpD1M,KAAKwuf,OAAO0sC,oBAAqB,GAKrC1jM,EAAUp8V,UAAU2yjB,gBAAkB,SAAU3E,GAC5CppjB,KAAKwjgB,MAAMliB,mBAAoB,EAC/B,IAAIh8L,EAAgBtlT,KAAKzC,MACrBwiiB,EAAc//hB,KAAKif,IAClBjf,KAAK+2iB,YACNzxP,EAAgBtlT,KAAKif,IACrB8ghB,EAAc//hB,KAAKzC,OAEvB,IAAIihK,EAAS,KACT1sJ,EAAQ,EACRmlf,EAAY3xM,EAAc2xM,UAC9B,GAAIA,IAAc8oC,EAAY9oC,WACvB3xM,EAAc35S,OAAS,IAAMo0hB,EAAYp0hB,OAAQ,CACpD,IAAIiliB,EAAY35C,EAAU8R,UAAUg3B,EAAYp0hB,OAAQmG,GACxD0sJ,EAASoyY,EAAU5viB,QACnB8Q,EAAQ8+hB,EAAU9+hB,MAEtB,GAAI0sJ,aAAkBqqW,GAAiB,CACnC,IAAI7yf,EAAQwoJ,EAAOxoJ,MACfD,EAASyoJ,EAAOzoJ,OAKpB,GAJAyoJ,EAAOxoJ,MAAQoziB,EAAYpziB,MAC3BwoJ,EAAOzoJ,OAASqziB,EAAYrziB,OAC5BqziB,EAAYpziB,MAAQA,EACpBoziB,EAAYrziB,OAASA,EACJ,MAAbkhf,GAAkD,MAA7BA,EAAUK,iBAA2Bt3f,KAAKwjgB,MAAM1U,aAAc,CACnF,IAAIrlN,EAAYwtN,EAAUI,aAAa94f,QAAQigK,EAAOv0G,MAClD8zK,EAAev/D,EAAOv0G,KAAK7vC,SAAS7b,QAAQigK,GAChDx+J,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAWxtN,EAAW1rE,GAC3D/9N,KAAKi7iB,oBAAmB,MAQpCzjN,EAAUp8V,UAAU4yjB,wBAA0B,SAAU5of,EAAOonc,EAAWC,GAMtE,IAAK,IALDwhD,EAAmBzhD,EAAUx9R,YAC7Bk/U,EAAiBzhD,EAAQz9R,YAAcy9R,EAAQhE,WAAW31M,WAAa,EACvEq7P,EAAgB3hD,EAAUnE,SAASv2f,MACnC6ziB,EAAcl5C,EAAQpE,SAASv2f,MAC/B80D,KACK1qE,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GAC7B,GAAIwpE,EAAI5zD,OAASq8iB,GAAiBzof,EAAI5zD,OAAS6ziB,EAC3C,IAAK,IAAIjiiB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GACxBqkD,EAAKinK,aAAei/U,GAAoBlmf,EAAKinK,aAAek/U,GAC5Dtnf,EAAMpiE,KAAKujE,GAIvB,GAAIrC,EAAI5zD,MAAQ6ziB,EACZ,MAGR,OAAO/+e,GAMX4wR,EAAUp8V,UAAUmE,KAAO,WACnBS,KAAK43O,SAGT53O,KAAKoujB,qBAAoB,IAK7B52N,EAAUp8V,UAAUgzjB,oBAAsB,SAAUC,GAChD,IAAI5wjB,EAAkBuC,KAAKwjgB,MAAM9M,kBAAjC,CAGA,IAAIpxM,EAAgBtlT,KAAKzC,MACrBwiiB,EAAc//hB,KAAKif,IAClBjf,KAAK+2iB,YACNzxP,EAAgBtlT,KAAKif,IACrB8ghB,EAAc//hB,KAAKzC,OAIvB,IAAIiD,EAAWR,KAAKwjgB,MAAM9M,iBAAiB30f,MAAMujT,EAAcomO,cAAepmO,EAAc35S,OAAQo0hB,EAAYrU,cAAeqU,EAAYp0hB,QAAQ,GAE/I3L,KAAKwjgB,MAAM1U,eACX9uf,KAAKwjgB,MAAM1U,aAAa8pB,WAAatsd,KAAKC,UAAU/rD,IAExD,IAAI8qH,EAAOtrH,KAAKsujB,WAAWziB,UAAUrriB,GACrCR,KAAKg7iB,gBAAgB1vb,GACjB+ic,GAASrujB,KAAKwjgB,MAAM1U,cACpB9uf,KAAKwjgB,MAAM1U,aAAay/D,UAAUvujB,MAEtCA,KAAKwuf,OAAOj/X,gBAMhBioO,EAAUp8V,UAAU4/iB,gBAAkB,SAAU9pf,GAC5Ct1D,OAAO6giB,eAAe+xB,kBACtB,IAAIttjB,EAAMV,SAASW,cAAc,OACjCD,EAAIwD,MAAM8H,KAAO,WACjBtL,EAAIwD,MAAMgI,IAAM,WAChBxL,EAAIc,UAAYkvD,EAChB1wD,SAASuL,KAAKpK,YAAYT,GAC1B,IAAIywB,EAAQnxB,SAASiujB,cACrB98hB,EAAM+8hB,mBAAmBxtjB,GACzBtF,OAAO6giB,eAAekyB,SAASh9hB,GAC/B,IAAIi9hB,GAAc,EAClB,IACIA,EAAcpujB,SAASqujB,YAAY,QAEvC,MAAOhujB,YAIHjF,OAAO6giB,eAAe+xB,kBACtBttjB,EAAIT,WAAW6E,YAAYpE,GAC3BlB,KAAKwuf,OAAO+mC,gBAAgBrzhB,QAEhC,OAAO0sjB,GAOXp3N,EAAUp8V,UAAUk8gB,UAAY,WAE5B,IAAI/pW,EAAQ9vK,EAAkBuC,KAAKwuf,OAAO7vQ,aAAyC3+O,KAAKwuf,OAAOs5B,qBAAtC9nhB,KAAKwuf,OAAO7vQ,YACrE,KAAIlhP,EAAkB8vK,IAASvtK,KAAKwuf,OAAO4oC,qBAAuBp3hB,KAAKwjgB,MAAMk2B,wBAA0B15hB,KAAKwjgB,MAAMvhB,mBAAmBw2C,uBAArI,CAGA,IAAIjshB,EAAO+gK,EAAKurV,kBAAkB/rf,EAC9BN,EAAQ8gK,EAAKurV,kBAAkB9if,MAAQhW,KAAKwuf,OAAO15a,WAAatoE,EACpE,IAAKxM,KAAKwjgB,MAAMk2B,yBAA2B15hB,KAAKwjgB,MAAMvhB,mBAAmBw2C,sBAErE,IAAIz4hB,KAAK43O,SAAa53O,KAAKwjgB,MAAMtR,iBAAkBlyf,KAAKwjgB,MAAMphB,uBASrDpif,KAAKo7hB,kBAAoBp7hB,KAAKwjgB,MAAMk2B,uBACzC15hB,KAAKq3gB,MAAM3ygB,MAAMosC,QAAU,SAGM,UAA7B9wC,KAAKq3gB,MAAM3ygB,MAAMosC,SAAuBrzC,EAAkBuC,SACrDA,KAAKwuf,OAAOsoC,iBACb92hB,KAAKq3gB,MAAM3ygB,MAAMosC,QAAU,aAfgD,CACnF,IAAIg+gB,EAAYl6hB,SAAS50B,KAAKq3gB,MAAM3ygB,MAAM8H,KAAKvP,QAAQ,KAAM,IAAK,IAE9D+C,KAAKq3gB,MAAM3ygB,MAAMosC,QADjBg+gB,EAAYtijB,GAAQsijB,EAAYrijB,EACL,OAGA,QAcvC,GAAKhP,EAAkBuC,QAASA,KAAKwuf,OAAOmoC,cAAiB32hB,KAAKwjgB,MAAMtR,eAwBpElyf,KAAKwuf,OAAO/xb,WAAW/3D,MAAMosC,QAAU,OACvC9wC,KAAKwuf,OAAO7pX,SAASjgI,MAAMosC,QAAU,WAzB+C,CACpF,IAAIi+gB,EAAiBn6hB,SAAS50B,KAAKwuf,OAAO/xb,WAAW/3D,MAAM8H,KAAKvP,QAAQ,KAAM,IAAK,IAAM,GACrF+xjB,EAAep6hB,SAAS50B,KAAKwuf,OAAO7pX,SAASjgI,MAAM8H,KAAKvP,QAAQ,KAAM,IAAK,IAAM,GACjFs8S,EAASv5S,KAAKy+hB,iBAAiBz+hB,KAAKzC,OACpCg8S,IAEIv5S,KAAKwuf,OAAO7pX,SAASjgI,MAAMosC,QAD3Bk+gB,EAAexijB,GAAQwijB,EAAevijB,EACD,OAGA,QAEpCzM,KAAK43O,UACNprO,EAAO+sS,EAAOu/M,kBAAkB/rf,EAChCN,EAAQ8sS,EAAOu/M,kBAAkB9if,MAAQhW,KAAKwuf,OAAO15a,WAAatoE,GAGlExM,KAAKwuf,OAAO/xb,WAAW/3D,MAAMosC,QAD7Bi+gB,EAAiBvijB,GAAQuijB,EAAiBtijB,EACH,OAGA,YAavD+qV,EAAUp8V,UAAUuhiB,4BAA8B,SAAU7qhB,GACxD9R,KAAKwuf,OAAO8pC,YAAYp2hB,QACxB,IAAI7B,EAAQL,KAAKwuf,OAAO8pC,YAAYhnhB,WAAWtR,KAAKwuf,OAAO8pC,YAAYhnhB,WAAW9U,OAAS,GAC3F,GAAI6D,EAAO,CACP,IAAIsxB,EAAQnxB,SAASiujB,cACrB98hB,EAAMs9hB,SAAS5ujB,EAAOyR,GACtB6f,EAAM2hW,UAAS,GACf13X,OAAO6giB,eAAe+xB,kBACtB5yjB,OAAO6giB,eAAekyB,SAASh9hB,KAOvC6lU,EAAUp8V,UAAUmjiB,UAAY,WAC5Bv+hB,KAAKq3gB,MAAQl2gB,EAAc,OACvBoC,OAAQ,oBACRF,UAAW,4CAEfrD,KAAKwuf,OAAO+mC,gBAAgB5zhB,YAAY3B,KAAKq3gB,QAMjD7/K,EAAUp8V,UAAUw6hB,oBAAsB,WACtC,IAAIuyB,EAAgBnojB,KAAKif,IAAI2b,SACzB2yI,EAAOvtK,KAAKy+hB,iBAAiBz+hB,KAAKif,KACtC,GAAIsuJ,EAAM,CACNvtK,KAAKq3gB,MAAM3ygB,MAAM8H,KAAO+gK,EAAKurV,kBAAkB/rf,EAAKV,KAAK0zB,MAAMoohB,EAAcp7iB,GAAK/M,KAAKwuf,OAAO15a,WAAc,KAC5G,IAAIord,EAAYlgiB,KAAK0+hB,gBAAgB1+hB,KAAKwjgB,MAAMvtb,UAAUh3D,KACtDk9P,EAAY+jR,EAAU/jR,UAEtBqyO,GADc0xC,EAAUnqhB,OACf/V,KAAKwuf,QAEdhmD,GAAWj7R,EAAKurV,kBAAkB9rf,EAAIwhf,EAAOwwC,SAAWh/hB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQgvK,GAAQ,IAAMvtK,KAAKwuf,OAAO15a,WAAa05a,EAAOwwC,SAAWh/hB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQgvK,GAAQ,GACjLvtK,KAAKq3gB,MAAM3ygB,MAAMgI,IAAM87b,EAAWn8b,KAAK0zB,MAAMoohB,EAAcn7iB,EAAImvQ,GAAan8Q,KAAKwuf,OAAO15a,WAAc,KACvC,cAA3D90E,KAAKwjgB,MAAMvtb,UAAUo8a,gBAAgBmM,oBACrCx+f,KAAKq3gB,MAAM3ygB,MAAMgI,IAAMkP,WAAW5b,KAAKq3gB,MAAM3ygB,MAAMgI,KAAQkP,WAAW5b,KAAKq3gB,MAAM3ygB,MAAMqR,QAAU,EAAK,OAEtG/V,KAAKwuf,OAAOmoC,cAAyD,SAAzC32hB,KAAKwuf,OAAO/xb,WAAW/3D,MAAMosC,WAEzD9wC,KAAKwuf,OAAO/xb,WAAW/3D,MAAM8H,KAAO+gK,EAAKurV,kBAAkB/rf,GAAKV,KAAK0zB,MAAMoohB,EAAcp7iB,GAAK/M,KAAKwuf,OAAO15a,WAAa,IAAM,KAC7H90E,KAAKwuf,OAAO/xb,WAAW/3D,MAAMgI,IAAM87b,GAAY2/G,EAAcn7iB,EAAIkzhB,EAAUnqhB,QAAU/V,KAAKwuf,OAAO15a,WAAc,KAE/G90E,KAAKwuf,OAAO7pX,SAASjgI,MAAM8H,KAAO+gK,EAAKurV,kBAAkB/rf,GAAKV,KAAK0zB,MAAMoohB,EAAcp7iB,GAAK/M,KAAKwuf,OAAO15a,WAAa,IAAM,KAC3H90E,KAAKwuf,OAAO7pX,SAASjgI,MAAMgI,IAAM87b,GAAY2/G,EAAcn7iB,EAAIkzhB,EAAUnqhB,QAAU/V,KAAKwuf,OAAO15a,WAAc,QAOzH0iR,EAAUp8V,UAAUojiB,QAAU,SAAUtqhB,GACpC,IAAIi0iB,EAAgBj0iB,EAAS0mB,SACzB2yI,EAAOvtK,KAAKy+hB,iBAAiBvqhB,GACjC,GAAIq5J,EAAM,CACN,IAAIihV,EAASxuf,KAAKwuf,OACdhif,EAAO+gK,EAAKurV,kBAAkB/rf,EAAKV,KAAK0zB,MAAMoohB,EAAcp7iB,GAAKyhf,EAAO15a,WACxEkqd,EAAUxwC,EAAOwwC,QAGjBkwB,GADW3hZ,EAAKurV,kBAAkB9rf,EAAIgyhB,GAAWzxX,EAAKz7J,MAAQ,IAAM08e,EAAO15a,WAAakqd,GAAWzxX,EAAKz7J,MAAQ,GAC7FzF,KAAK0zB,MAAMoohB,EAAcn7iB,GAAKwhf,EAAO15a,WAC5D,OAAO,IAAIjgC,GAAMroC,EAAM0ijB,GAE3B,OAAO,IAAIr6gB,GAAM,EAAG,IAMxB2iT,EAAUp8V,UAAUqjiB,iBAAmB,SAAUvqhB,GAC7C,IAAI2+f,EAAa7ygB,KAAKggiB,sBAAsB9rhB,EAASw3gB,cAAex3gB,EAASvI,QAAQ,GACrF,GAAIkngB,EACA,OAAO7ygB,KAAKu7S,QAAQs3N,EAAW5b,YAQvCz/J,EAAUp8V,UAAUsjiB,gBAAkB,SAAUx2I,EAAcinK,GAC1D,IAEI93C,EAFAl7P,EAAY,EACZ2hB,GAAW,EAEXhsR,EAAQ,EACRquhB,EAAc,EAIlB,GAHIngiB,KAAKqyf,gBAAgBljc,SACrB2uO,EAAW99R,KAAKqyf,gBAAgBljc,QAEhC+4V,EAAa+uG,UAAUr/Q,UAAW,CAClC,IAAIq/Q,EAAY/uG,EAAa+uG,UACzB56O,EAAe,EACf+yS,EAAgBpvjB,KAAKu/gB,qBAAqBtoB,EAAW96O,EAAWE,GACpEF,EAAYizS,EAAcjzS,UAC1BE,EAAe+yS,EAAc/yS,aAC7B,IAAItmQ,EAASq5iB,EAAcr5iB,OAC3BoqhB,EAAchkR,EAAY,EAAIA,EAAYpmQ,EAASA,EAC9Co5iB,IACDnvjB,KAAKq3gB,MAAM3ygB,MAAMqR,OAASoqhB,EAAcngiB,KAAKwuf,OAAO15a,WAAa,MAErEqnM,EAAY,MAEX,CACD,IAAIq1R,EAAatpJ,EAAawjI,cAAc3iB,UAAU7gH,EAAav8Y,OAAQmG,GAC3EA,EAAQ0/hB,EAAW1/hB,MACnB,IAAI0sJ,EAASgzY,EAAWxwiB,QACnBvD,EAAkB+gK,KAEnB2hY,GADA9oB,EAAQr3gB,KAAKgnjB,eAAexoZ,EAAQ1sJ,EAAO0sJ,EAAO6zV,iBAAiB,EAAMl2O,EAAW2hB,IAChE/nR,OACfo5iB,IACDnvjB,KAAKq3gB,MAAM3ygB,MAAMqR,OAASshgB,EAAMthgB,OAAS/V,KAAKwuf,OAAO15a,WAAa,OAY9E,OARKq6e,IAEGnvjB,KAAKq3gB,MAAM3ygB,MAAM2I,UADjBywR,EAC6B,gBAGA,KAIjC3hB,UAAaA,EACbpmQ,OAAUoqhB,IAOlB3oM,EAAUp8V,UAAUgliB,kBAAoB,SAAU96O,EAAeysM,GAC7D,IAAKt0f,EAAkBs0f,GAEnB,GADA/xf,KAAKwuf,OAAOqqD,iBAAmB9mD,EAC3B/xf,KAAKwjgB,MAAMvtb,UAAU2hK,QACrB53O,KAAKwuf,OAAOoqD,mBAAqB7mD,MAEhC,CAED,IAAIk6B,EAAkBjshB,KAAKk1iB,uBAAuB5vP,EAAc35S,OAAQ25S,EAAc2xM,UAAUI,aAAa,IAEzGj+L,EAAYp5T,KAAKu7S,QAAQ0wO,EAAgBh1B,WACxCx5f,EAAkB27T,KACnBp5T,KAAKwuf,OAAOoqD,mBAAqBx/O,GAI7Cp5T,KAAK86hB,4BAMTtjM,EAAUp8V,UAAU8giB,eAAiB,SAAUh0I,EAAc++J,GACzD,IAAIt6iB,EAASu7Y,EAAattX,SAAS5tB,EACnC,GAAIk7Y,EAAa+uG,UAAUr/Q,UAAW,CAClC,IAAIq/Q,EAAY/uG,EAAa+uG,UACzB96O,EAAY,EACZE,EAAe,EACfy4Q,EAAW90hB,KAAKu/gB,qBAAqBtoB,EAAW96O,EAAWE,GAC/DF,EAAY24Q,EAAS34Q,UACrBE,EAAey4Q,EAASz4Q,aACxB1vQ,GAAUmohB,EAAS/+gB,OACnBpJ,GAAUwvQ,EACL8qS,IACDt6iB,GAAU0vQ,OAGb,CACD,IAAIvqQ,EAAQ,EACR0/hB,EAAatpJ,EAAa+uG,UAAU8R,UAAU7gH,EAAav8Y,OAAQmG,GACnE0sJ,EAASgzY,EAAWxwiB,QACxB8Q,EAAQ0/hB,EAAW1/hB,MACfqqQ,EAAY,EAAhB,IACI2hB,GAAW,EAEXuxR,EAAkBrvjB,KAAKgnjB,eAAexoZ,EAAQ1sJ,EAAO0sJ,EAAO6zV,iBAAiB,EAAOl2O,EAAW2hB,GACnG3hB,EAAYkzS,EAAgBlzS,UAC5B2hB,EAAWuxR,EAAgBvxR,SAC3BnxR,GAAU0ijB,EAAgBt5iB,OACtBkxiB,IACAt6iB,GAAUmyf,GAAcO,oBAAoBn3G,EAAa+uG,UAAUhF,gBAAgBsL,eAG3F,OAAO5wf,GAOX6qV,EAAUp8V,UAAU0/hB,yBAA2B,WAC3C96hB,KAAKs3gB,aAQT9/K,EAAUp8V,UAAUwhiB,kBAAoB,SAAUvgiB,EAAOivB,EAAM44D,EAAO02B,GAClE,IAAIv9G,EAAMhB,EAAMkhH,OAASlhH,EAAM8rB,QAC/B,IAAImD,GAAS44D,GAAU02B,EA0ClB,IAAI12B,GAAU54D,GAASsvF,EA4BvB,GAAI12B,GAAS54D,IAASsvF,EACvB,OAAQv9G,GACJ,KAAK,GACD2C,KAAKs/iB,2BACL,MACJ,KAAK,GACDt/iB,KAAKu/iB,4BACL,MACJ,KAAK,GACDv/iB,KAAK0+iB,4BACL,MACJ,KAAK,GACD1+iB,KAAK2+iB,0BACL,MACJ,KAAK,GACD3+iB,KAAK4+iB,6BACL,MACJ,KAAK,GACD5+iB,KAAK6+iB,iCAKb,OAAQxhjB,GAOJ,KAAK,GACDhB,EAAMspB,iBACN3lB,KAAKwuf,OAAO+mC,gBAAgBpphB,WAAanM,KAAKwuf,OAAO6jC,cAAct8gB,OACnE,MACJ,KAAK,GACD1Z,EAAMspB,iBACN3lB,KAAKwuf,OAAO+mC,gBAAgBpphB,WAAanM,KAAKwuf,OAAO6jC,cAAct8gB,OACnE,MACJ,KAAK,GACD/V,KAAKi/iB,eACL5ijB,EAAMspB,iBACN,MACJ,KAAK,GACD3lB,KAAKk/iB,gBACL7ijB,EAAMspB,iBACN,MACJ,KAAK,GACD3lB,KAAK8+iB,gBACLzijB,EAAMspB,iBACN,MACJ,KAAK,GACD3lB,KAAK++iB,cACL1ijB,EAAMspB,iBACN,MACJ,KAAK,GACD3lB,KAAKg/iB,iBACL3ijB,EAAMspB,iBACN,MACJ,KAAK,GACD3lB,KAAKm/iB,gBACL9ijB,EAAMspB,sBAvFd,OAAQtoB,GACJ,KAAK,GACD2C,KAAKo/iB,oBACL/ijB,EAAMspB,iBACN,MACJ,KAAK,GACD3lB,KAAKq/iB,qBACLhjjB,EAAMspB,iBACN,MACJ,KAAK,GACD3lB,KAAKm+iB,qBACL9hjB,EAAMspB,iBACN,MACJ,KAAK,GACD3lB,KAAKq+iB,mBACLhijB,EAAMspB,iBACN,MACJ,KAAK,GACD3lB,KAAKs+iB,sBACLjijB,EAAMspB,iBACN,MACJ,KAAK,GACD3lB,KAAKw+iB,qBACLnijB,EAAMspB,sBAhEd,OADA3lB,KAAKwuf,OAAOkoC,kBAAmB,EACvBr5hB,GAOJ,KAAK,GACD2C,KAAKy9iB,sBACL,MACJ,KAAK,GACDz9iB,KAAK49iB,uBACL,MACJ,KAAK,GACD59iB,KAAK69iB,uBACL,MACJ,KAAK,GACD79iB,KAAKk+iB,qBACL,MACJ,KAAK,GACDl+iB,KAAK+9iB,wBACL,MACJ,KAAK,GACD/9iB,KAAKi+iB,uBACL,MACJ,KAAK,GACDj+iB,KAAKwjgB,MAAMvtb,UAAUrwE,YACrB,MACJ,KAAK,GACDvJ,EAAMspB,iBACN3lB,KAAKT,OACL,MACJ,KAAK,GACDlD,EAAMspB,iBACDloB,EAAkBuC,KAAKwjgB,MAAM7T,oBAC9B3vf,KAAKwjgB,MAAM7T,kBAAkBE,qBAAoB,GAiG5D7vf,KAAKwjgB,MAAMtR,gBACZlyf,KAAKwjgB,MAAM1U,aAAa8tC,kBAAkBvgiB,EAAOivB,EAAM44D,EAAO02B,GAE9D56G,KAAKwjgB,MAAMxU,eAENvxf,EAAkBuC,KAAKwjgB,MAAMxU,aAAa0jC,qBAAuB1yhB,KAAKwjgB,MAAMxU,aAAa0jC,mBAAmBl2hB,OAAS,GACtHwD,KAAKwjgB,MAAMxU,aAAasgE,cAAc7igB,QAGxB,KAAlBpwD,EAAM8rB,SAAkC,KAAhB9rB,EAAMkhH,QACzB9/G,EAAkBuC,KAAKwjgB,MAAM7T,oBAC9B3vf,KAAKwjgB,MAAM7T,kBAAkBE,qBAAoB,GAEjD7vf,KAAKwjgB,MAAMmf,uBACX3ihB,KAAKk5iB,wBAQjB1hN,EAAUp8V,UAAU4/hB,2BAA6B,SAAUrngB,EAAO47hB,GAC9D,IAAIhiZ,EAAOvtK,KAAKwuf,OAAO7vQ,YACvB,GAAI3+O,KAAK85hB,uBAAuBnmgB,EAAO45I,GAAO,CAC1C,GAAIvtK,KAAKwvjB,uBAAuB77hB,EAAO45I,GACnC,OAAIvtK,KAAKwjgB,MAAMmf,uBAGR3ihB,KAAK+4iB,2BAA2BxrY,EAAKw6V,cAEhD,GAAI/ngB,KAAK+5hB,uBAAuBpmgB,EAAO45I,GACnC,OAAIvtK,KAAKwjgB,MAAMmf,uBAGR3ihB,KAAK+4iB,2BAA2BxrY,EAAKy6V,cAGpD,QAAIhogB,KAAKwjgB,MAAMmf,wBACX3ihB,KAAKwjgB,MAAMmf,uBAAwB,EACnC3ihB,KAAKwuf,OAAOksC,+BAA+B60B,EAAW,IAC/C,IAOf/3N,EAAUp8V,UAAU0+hB,uBAAyB,SAAUnmgB,EAAO45I,GAC1D,OAAKvtK,KAAKwuf,OAAO73e,cAAgBgd,EAAM5mB,GAAMwgK,EAAKurV,kBAAkB/rf,GAC/D/M,KAAKwuf,OAAO73e,cAAgBgd,EAAM5mB,GAAOwgK,EAAKurV,kBAAkB/rf,EAAKwgK,EAAKurV,kBAAkB9if,MAAQhW,KAAKwuf,OAAO15a,YAQzH0iR,EAAUp8V,UAAUo0jB,uBAAyB,SAAU77hB,EAAO45I,GAC1D,IAAIi7R,EAAUxoc,KAAKugiB,WAAWhzX,GAC1B2/V,EAAe,EACf3/V,EAAKw6V,eACLmF,EAAgB3/V,EAAKw6V,aAAa/6f,EAAIugK,EAAKw6V,aAAahyf,QAE5D,IAAIA,EAAS1J,KAAKC,IAAI4ggB,EAAcpO,GAAcO,oBAAoB9xV,EAAKq4V,YAAY,GAAG7O,cAAc56O,YAClGn8Q,KAAKwuf,OAAO15a,WAClB,OAAK90E,KAAKwuf,OAAOp3e,aAAeuc,EAAM3mB,GAAMw7b,GAAYxoc,KAAKwuf,OAAOp3e,aAAeuc,EAAM3mB,GAAMw7b,EAAUzyb,GAQ7GyhV,EAAUp8V,UAAU2+hB,uBAAyB,SAAUpmgB,EAAO45I,GAC1D,IAAIuuY,EAAWvuY,EAAKurV,kBAChBtwD,EAAUxoc,KAAKugiB,WAAWhzX,GAC1Bk7R,EAAaD,EAAWszG,EAAS/liB,OAAS/V,KAAKwuf,OAAO15a,WACtD+tc,EAAiB/jB,GAAcO,oBAAoB9xV,EAAKq4V,YAAY,GAAG7O,cAAc8rB,gBACrF+O,EAAe,EACfrkX,EAAKy6V,eACL4pB,EAAerkX,EAAKy6V,aAAajyf,QAGrC,IAAIA,GAAU+liB,EAAS/liB,OACnB1J,KAAKC,IAAIslhB,EAAe/O,EAAgB/jB,GAAcO,oBAAoB9xV,EAAKq4V,YAAY,GAAG7O,cAAc16O,gBAAkBr8Q,KAAKwuf,OAAO15a,WAC9I,OAAK90E,KAAKwuf,OAAOp3e,aAAeuc,EAAM3mB,GAAMy7b,GAAezoc,KAAKwuf,OAAOp3e,aAAeuc,EAAM3mB,GAAMw7b,EAAUzyb,GAQhHyhV,EAAUp8V,UAAU29iB,2BAA6B,SAAUlzC,GAGvD,OAFA7lgB,KAAKwjgB,MAAMmf,uBAAwB,EACnC3ihB,KAAKo5iB,oCAAoCvzC,IAClC,GAKXruK,EAAUp8V,UAAUg+iB,oCAAsC,SAAUvzC,GAChE,IAAIqC,EAAQrC,EAAO7of,WACfkrf,aAAiBjB,KACjBiB,EAAQlogB,KAAKw1iB,yBAAyBttC,IAE1ClogB,KAAKigjB,gBAAgB/3C,GAAO,IAMhC1wK,EAAUp8V,UAAU89iB,oBAAsB,WACtC,IAAI3rY,EAAOvtK,KAAKu7S,QAAQv7S,KAAKzC,MAAM05f,WACnCj3f,KAAKo5iB,oCAAoC7rY,EAAKq4V,YAAY,IAC1D5lgB,KAAKwjgB,MAAMmf,uBAAwB,GAMvCnrL,EAAUp8V,UAAUiX,QAAU,WACrB5U,EAAkBuC,KAAKg4iB,uBACxBh4iB,KAAKg4iB,yBAAsB98iB,GAE/B8E,KAAKq3gB,WAAQn8gB,EACb8E,KAAKg4iB,yBAAsB98iB,EAC3B8E,KAAKm1iB,2BAAwBj6iB,EAC7B8E,KAAKwuf,YAAStzf,EACd8E,KAAKwjgB,WAAQtogB,GAQjBs8V,EAAUp8V,UAAUw/iB,iBAAmB,SAAUrjhB,EAAMk4hB,GACnD,IAAIzyB,EAAYh9hB,KAAKwuf,OAAOwuC,UAC5B,GAAIA,EAAU35S,YAAY9rN,GAAO,CAE7B,IAAIm4hB,EAAe1yB,EAAUt1hB,IAAI6vB,GAC7B5rB,EAAS+jjB,EAAazlgB,KAAKsS,UAAUmzf,EAAc,GACnDpqQ,EAAgB,IAAI4oP,GAAaluiB,KAAKwuf,OAAOgV,OAEjD,GADAl+M,EAAc2pP,qBAAqBygB,EAAazlgB,KAAMt+C,GAClD8jjB,EACAzvjB,KAAKwuf,OAAOv4a,UAAUm6I,YAAYk1F,EAAeA,OAEhD,CAED,IAAIqqQ,EAAaD,EAAajujB,UAC1BmujB,EAAYD,EAAW1lgB,KAAKsS,UAAUozf,EAAY,GAClD5vB,EAAc,IAAImO,GAAaluiB,KAAKwuf,OAAOgV,OAC/Cu8B,EAAYkP,qBAAqB0gB,EAAW1lgB,KAAM2lgB,GAElD5vjB,KAAKwuf,OAAOv4a,UAAUm6I,YAAYk1F,EAAey6O,MAQ7DvoM,EAAUp8V,UAAUy0jB,eAAiB,SAAUt4hB,GAC3Cv3B,KAAK46iB,iBAAiBrjhB,IAM1BigU,EAAUp8V,UAAU00jB,YAAc,WAG9B,IAFA,IAAI74D,EAAYj3f,KAAKzC,MAAM05f,UACvB84D,OAAU70jB,OACQA,IAAd+7f,GAA2Bj3f,KAAKgwjB,WAAW/4D,IAC/C84D,EAAU94D,EACVA,EAAYA,EAAUoP,uBAE1B,QAAgBnrgB,IAAZ60jB,EAAuB,CACvB,IAAIl9C,EAAak9C,EAAQ14D,aAAa,GACtC,QAAmBn8f,IAAf23gB,EACA,OAAOA,EAAWz4f,SAAS,KAQvCo9U,EAAUp8V,UAAU40jB,WAAa,SAAU/4D,GACvC,IAAIvyf,EAAQuyf,EAAUhF,gBAAgB8F,UACtC,YAAkB78f,IAAVwJ,IAAqE,IAA7CA,EAAM6yB,KAAK3hB,cAAcrX,QAAQ,QAE9Di5V,KCtyNPy4N,GAA4B,WAC5B,SAASA,EAAWzsD,GAChBxjgB,KAAKmggB,WAAa,MAClBnggB,KAAKoggB,UAAY,MACjBpggB,KAAK0sB,UAAW,EAChB1sB,KAAKkwjB,UAAW,EAChBlwjB,KAAKwjgB,MAAQA,EAyQjB,OAvQAllgB,OAAOuJ,eAAeoojB,EAAW70jB,UAAW,UACxCsM,IAAK,WACD,OAAO1H,KAAKwjgB,MAAMhV,QAEtB7mf,YAAY,EACZC,cAAc,IAElBqojB,EAAW70jB,UAAU+0jB,KAAO,SAAUzhjB,EAAS0hjB,GAC3C,OAAOpwjB,KAAKqwjB,SAAS3hjB,EAAS0hjB,EAAY,UAG9CH,EAAW70jB,UAAUi1jB,SAAW,SAAU3hjB,EAAS0hjB,EAAYE,GACpC,iBAAZ5hjB,IACPA,EAAU1O,KAAKuwjB,cAAc7hjB,EAAS0hjB,SAEbl1jB,IAAzBo1jB,IACAA,EAAuB,SAE3BtwjB,KAAKwjgB,MAAMxU,aAAawhE,kBAAkBC,eAC1C,IAAIjiX,EAAUxuM,KAAKwjgB,MAAMxU,aAAawhE,kBAEtC,OADAxwjB,KAAK0wjB,aAAaliX,EAAS9/L,GAAS,EAAM0hjB,EAAYE,GAC/C9hX,EAAQhyM,OAAYgyM,EAAQmiX,qBAEvCV,EAAW70jB,UAAUm1jB,cAAgB,SAAUK,EAAY10d,GAUvD,OATI00d,EAAWryjB,QAAQ,OAAS,IAC5BqyjB,EAAaA,EAAW1zjB,MAAM,MAAMskB,KAAK,SAEzCoviB,EAAWryjB,QAAQ,MAAQ,IAC3BqyjB,EAAa,KAAOA,GAET,cAAX10d,GAAqC,2BAAXA,IAC1B00d,EAAa5wjB,KAAKmggB,WAAaywD,EAAa5wjB,KAAKoggB,WAE9C,IAAIj8e,OAAOysiB,EAAwB,kBAAX10d,GAAyC,2BAAXA,EAAuC,IAAM,OAE9G+zd,EAAW70jB,UAAUy1jB,eAAiB,SAAUnijB,GAC5C,IAAIoijB,EAAY9wjB,KAAKmggB,WAAanggB,KAAKoggB,UACnC2wD,EAAgBrijB,EAAQxB,WAC5B,OAAiC,IAAzB6jjB,EAAcv0jB,QAAgBu0jB,IAAkBD,GAG5Db,EAAW70jB,UAAU41jB,QAAU,SAAUtijB,EAAS0hjB,EAAYE,GACnC,iBAAZ5hjB,IACPA,EAAU1O,KAAKuwjB,cAAc7hjB,EAAS0hjB,SAEbl1jB,IAAzBo1jB,IACAA,EAAuB,SAE3BtwjB,KAAKwjgB,MAAMxU,aAAawhE,kBAAkBC,eAC1C,IAAIjiX,EAAUxuM,KAAKwjgB,MAAMxU,aAAawhE,kBAKtC,GAJAxwjB,KAAK0wjB,aAAaliX,EAAS9/L,GAAS,EAAO0hjB,EAAYE,GACnD9hX,EAAQhyM,OAAS,GAAKgyM,EAAQm0D,aAAe,IAC7Cn0D,EAAQm0D,aAAe,IAEtBllQ,EAAkB+wM,EAAQmiX,qBAAsB,CACjD,IAAIpjjB,GAAcjR,OAAQ0D,KAAKwuf,OAAOgV,OAEtC,OADAxjgB,KAAKwuf,OAAOgV,MAAM78e,QAAQ,sBAAuBpZ,GAC1CihM,IAKfyhX,EAAW70jB,UAAUs1jB,aAAe,SAAUliX,EAAS9/L,EAASuijB,EAAcb,EAAYc,GACtF,IAAIlxjB,KAAK6wjB,eAAenijB,GAAxB,MAGmBxT,IAAfk1jB,IACAA,EAAa,QAEjB,IAAI5xZ,OAAStjK,EACT8qB,OAAe9qB,EAInB,QAH4BA,IAAxBg2jB,IACAlriB,EAAehmB,KAAKwjgB,MAAMvtb,UAAUh3D,UAEZ/jB,IAAxBg2jB,GAAqCD,QAAiC/1jB,IAAjB8qB,QAAyD9qB,IAA3B8qB,EAAaixe,WAC5Fjxe,EAAaixe,qBAAqBC,GAAiB,CACnD,IAAI8R,EAAgB,EAGhBL,EAAgB3if,EAAa0lgB,cAAc3iB,UAAU/ogB,KAAKwjgB,MAAMvtb,UAAU14E,MAAMoO,OAAQq9f,GAG5F,GAFAxqW,EAASmqW,EAAc3ngB,QACvBgogB,EAAgBL,EAAc72f,OACzBrU,EAAkB+gK,GAAS,CAC5B,IAAIijZ,OAAsBvmjB,EAG1B,IADAumjB,EAAsBzhjB,KAAKmxjB,WAAW3yZ,EAAQ9vJ,EAAS0hjB,EAAYpnD,EAAeioD,EAAcziX,EAASxoL,GAC/E,IAAnBwoL,EAAQhyM,SAAiBiB,EAAkBgkjB,IAAsB,CACpE,MAAQhkjB,EAAkBgkjB,IAAoE,IAA5CA,EAAoBpqD,aAAa76f,QAE/EiljB,EAAsBzhjB,KAAKwjgB,MAAMvtb,UAAU8re,iBAAiBN,EAAoBnqD,iBAEpF,GAAI75f,EAAkBgkjB,GAClB,MAEJ,IAAI5uC,EAAa4uC,EAAoBpqD,aAAa,GAOlD,GALI74V,EADAq0W,EAAWz4f,SAAS,aAAc+uf,GACxB0J,EAAWz4f,SAAS,aAAcwuf,GAAkBiK,EAAWz4f,SAAS,QAAKlf,EAG9E23gB,EAAWz4f,SAAS,GAE7B3c,EAAkB+gK,GAClB,MAGJijZ,EAAsBzhjB,KAAKmxjB,WAAW3yZ,EAAQ9vJ,EAAS0hjB,EAAY,EAAGa,EAAcziX,EAASxoL,GAEjG,GAAIwoL,EAAQhyM,OAAS,EACjB,QAKhB,IAAIwuS,EAEJ,IADAA,EAAUhrS,KAAKwuf,OAAOzmQ,MAAM,GAAG69Q,YAAY,IACnCnogB,EAAkButS,IAA4C,IAAhCA,EAAQqsN,aAAa76f,QACvDwuS,EAAUA,EAAQulO,WAEtB,IAAI9ygB,EAAkButS,IAA4C,IAAhCA,EAAQqsN,aAAa76f,OAAvD,CAGAwD,KAAK0sB,UAAW,EAChB1sB,KAAKkwjB,UAAW,EAChBlwjB,KAAKoxjB,eAAepmR,EAASt8R,EAAS0hjB,EAAYa,EAAcziX,EAASxoL,GACzE,IAAK,IAAI9pB,EAAI,EAAGA,EAAI8D,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQN,IAAK,CAC/C,IAAI6rgB,EAAe/ngB,KAAKwuf,OAAOzmQ,MAAM7rP,GAAG6rgB,aACnCtqgB,EAAkBsqgB,KACnB/ngB,KAAK0sB,UAAW,EAChB1sB,KAAKkwjB,UAAW,EAChBlwjB,KAAKoxjB,eAAerpD,EAAcr5f,EAAS0hjB,EAAYa,EAAcziX,EAASxoL,IAGtF,IAAS9pB,EAAI,EAAGA,EAAI8D,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQN,IAAK,CAC/C,IAAI8rgB,EAAehogB,KAAKwuf,OAAOzmQ,MAAM7rP,GAAG8rgB,aACnCvqgB,EAAkBuqgB,KACnBhogB,KAAK0sB,UAAW,EAChB1sB,KAAKkwjB,UAAW,EAChBlwjB,KAAKoxjB,eAAeppD,EAAct5f,EAAS0hjB,EAAYa,EAAcziX,EAASxoL,IAGlFiriB,IAAiBxzjB,EAAkB+wM,IAAYA,EAAQhyM,UAK/DyzjB,EAAW70jB,UAAUg2jB,eAAiB,SAAUpmR,EAASt8R,EAAS0hjB,EAAYa,EAAcziX,EAASxoL,GAGjG,IAFA,IAAI0rf,EAAkB1xgB,KAAKwjgB,MAAMvtb,UAAUine,uBAAuBlyQ,EAAQqsN,aAAa,KAE/E55f,EAAkBi0gB,IAA4D,IAAxCA,EAAgBra,aAAa76f,QAAoE,IAApDk1gB,EAAgBra,aAAa,GAAGj9e,SAAS5d,QAChIk1gB,EAAkB1xgB,KAAKwjgB,MAAMvtb,UAAUq7d,sBAAsB5/B,GAEjE,MAAQj0gB,EAAkBi0gB,IAAoBA,EAAgBra,aAAa76f,OAAS,GAAG,CACnF,IACI60jB,EADgB3/C,EAAgBra,aAAa,GACnBj9e,SAAS,GACvC,GAAI3c,EAAkB4zjB,GAClB,MAKJ,IAHArxjB,KAAKmxjB,WAAWE,EAAW3ijB,EAAS0hjB,EAAY,EAAGa,EAAcziX,EAASxoL,GAC1E0rf,EAAkB1xgB,KAAKwjgB,MAAMvtb,UAAUq7d,sBAAsB5/B,IAErDj0gB,EAAkBi0gB,IAA6D,IAAxCA,EAAgBra,aAAa76f,QAAqE,IAApDk1gB,EAAgBra,aAAa,GAAGj9e,SAAS5d,QAClIk1gB,EAAkB1xgB,KAAKwjgB,MAAMvtb,UAAUq7d,sBAAsB5/B,GAGjEu/C,IAAiBxzjB,EAAkB+wM,IAAYA,EAAQhyM,QAK/DyzjB,EAAW70jB,UAAU+1jB,WAAa,SAAUxoD,EAAej6f,EAASwtF,EAAQ8sa,EAAeioD,EAAcziX,EAASxoL,GAK9G,IAJA,IAAIw+gB,EAAU77B,EACV2oD,EAAgB,GAChBC,EAAQ,IAAIhvU,KAEb,CAEC,GAAIomR,aAAyBC,KAAoBnrgB,EAAkBkrgB,EAAc35e,OAAgC,KAAvB25e,EAAc35e,KACpGuiiB,EAAMntjB,IAAIukgB,EAAe2oD,EAAc90jB,QAGnC80jB,GADA3oD,IAAkB67B,EACe77B,EAAc35e,KAAK3K,UAAU2kf,GAG7BL,EAAkB,UAGtD,GAAIA,aAAyBlJ,GAAiB,CAC/C,IAAIG,EAAa+I,EACZlrgB,EAAkBmigB,EAAWD,YAE9BgJ,EAAgBlrgB,EAAkBmigB,EAAW2S,gBAAkB3S,EAAWD,SAAWC,EAAW2S,gBAGxG,IAAK90gB,EAAkBkrgB,IAAkBlrgB,EAAkBkrgB,EAAcl5H,UACrE,MAEChyY,EAAkBkrgB,KACnBA,EAAgBA,EAAcl5H,UAOtC,IAJA,IAEI+hL,EAFAxiiB,EAAOsiiB,EAAcpkjB,WACrBlH,MAGIvI,EAAkB+zjB,EAAc9ijB,EAAQ6wB,KAAKvQ,KACjDhpB,EAAQxB,KAAKgtjB,GAEjB,IAAK,IAAIt1jB,EAAI,EAAGA,EAAI8J,EAAQxJ,OAAQN,IAAK,CAIrC,IAAK,IAHDwT,EAAQ1J,EAAQ9J,GAChB6C,EAASyvM,EAAQijX,YACjBC,EAAWH,EAAMj0jB,KACZqqB,EAAM,EAAGA,EAAM+piB,EAASl1jB,OAAQmrB,IAAO,CAC5C,IAAI8/C,EAAOiqf,EAAS/piB,GAChB9B,EAAa0riB,EAAM7pjB,IAAI+/D,GACvBkqf,EAAalqf,EAAKjrE,OAKtB,GAHIirE,IAAS+8d,IACTmtB,GAAc3oD,GAEdvrgB,EAAkBsB,EAAOxB,QAAUmS,EAAMoC,MAAQ+T,EAAa8riB,EAAY,CAC1E,IAAI7/iB,EAAQpC,EAAMoC,MAAQ+T,EAEtB4hD,IAAS+8d,IACT1yhB,GAASk3f,GAEb,IAAIr9f,EAAU87D,EAAS,KAAElL,UAAUkL,EAAM31D,GACzC/S,EAAOxB,MAAQyC,KAAKghjB,gBAAgBv5e,EAAKxd,KAAMt+C,EAAOuB,YACtDnO,EAAOxB,MAAMq9B,SAAW56B,KAAKwjgB,MAAMvtb,UAAUk5d,4BAA4B1ne,EAAKxd,KAAMt+C,GAAQ,GAC5F5M,EAAOxB,MAAM0xiB,qBAAqBxne,EAAKxd,KAAMt+C,GAEjD,GAAI+D,EAAMoC,MAAQpC,EAAM,GAAGlT,QAAUqpB,EAAa8riB,EAAY,CACtD7/iB,EAASpC,EAAMoC,MAAQpC,EAAM,GAAGlT,OAAUqpB,EAE1C4hD,IAAS+8d,IACT1yhB,GAASk3f,GAETr9f,EAAU87D,EAAS,KAAElL,UAAUkL,EAAM31D,GACzC/S,EAAOkgB,IAAMjf,KAAKghjB,gBAAgBv5e,EAAKxd,KAAMt+C,EAAOuB,YACpDnO,EAAOkgB,IAAI2b,SAAW56B,KAAKwjgB,MAAMvtb,UAAUk5d,4BAA4B1ne,EAAKxd,KAAMt+C,GAAQ,GAC1F5M,EAAOkgB,IAAIgwhB,qBAAqBxne,EAAKxd,KAAMt+C,GAC3C,OAKR,GAFA5M,EAAO2tB,SAAW1sB,KAAK0sB,SACvB3tB,EAAOmxjB,SAAWlwjB,KAAKkwjB,SACnBe,EAEA,YADAziX,EAAQm0D,aAAe,GAGlBn0D,EAAQm0D,aAAe,GAAK38O,EAAasphB,cAAcvwiB,EAAOxB,SACnEixM,EAAQm0D,aAAen0D,EAAQjwM,QAAQQ,IAK/C,OADsBiB,KAAKwjgB,MAAMvtb,UAAUq7d,sBAAsB3oC,EAAc1+c,KAAKgtc,YAGxFg5D,EAAW70jB,UAAU4ljB,gBAAkB,SAAUnuC,EAAYpL,GACzD,IAAIv/G,EAAe,IAAIgmJ,GAAaluiB,KAAKwjgB,OACrC1xf,EAAQo2Y,EAAas/G,qBAAqBqL,EAAYpL,GAE1D,OADAv/G,EAAa6mJ,2BAA2Bj9hB,GACjCo2Y,GAEJ+nK,KAMP2B,GAAkC,WAClC,SAASA,EAAiBpljB,EAAMwJ,GAC5BhW,KAAK6xjB,aAAe,EACpB7xjB,KAAK8xjB,cAAgB,EACrB9xjB,KAAK6xjB,aAAerljB,EACpBxM,KAAK8xjB,cAAgB97iB,EAsBzB,OApBA1X,OAAOuJ,eAAe+pjB,EAAiBx2jB,UAAW,QAC9CsM,IAAK,WACD,OAAO1H,KAAK6xjB,cAEhBxqjB,IAAK,SAAUtK,GACXiD,KAAK6xjB,aAAe90jB,GAExB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+pjB,EAAiBx2jB,UAAW,SAC9CsM,IAAK,WACD,OAAO1H,KAAK8xjB,eAEhBzqjB,IAAK,SAAUtK,GACXiD,KAAK8xjB,cAAgB/0jB,GAEzB4K,YAAY,EACZC,cAAc,IAEXgqjB,KCpTPG,GAAkC,WAClC,SAASA,EAAiBvuD,GACtBxjgB,KAAK6rjB,aAAU3wjB,EACf8E,KAAK8rjB,WAAQ5wjB,EACb8E,KAAKwjgB,MAAQA,EAwCjB,OAtCAllgB,OAAOuJ,eAAekqjB,EAAiB32jB,UAAW,UAC9CsM,IAAK,WACD,OAAO1H,KAAKwjgB,MAAMhV,QAEtB7mf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekqjB,EAAiB32jB,UAAW,SAC9CsM,IAAK,WACD,OAAO1H,KAAK6rjB,SAEhBxkjB,IAAK,SAAUtK,GACXiD,KAAK6rjB,QAAU9ujB,GAEnB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekqjB,EAAiB32jB,UAAW,OAC9CsM,IAAK,WACD,OAAO1H,KAAK8rjB,OAEhBzkjB,IAAK,SAAUtK,GACXiD,KAAK8rjB,MAAQ/ujB,GAEjB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekqjB,EAAiB32jB,UAAW,QAC9CsM,IAAK,WACD,OAAO1H,KAAKwuf,OAAOv4a,UAAUire,gBAAgBlhjB,KAAKzC,MAAOyC,KAAKif,KAAK,IAEvEtX,YAAY,EACZC,cAAc,IAElBmqjB,EAAiB32jB,UAAUiX,QAAU,WACjCrS,KAAKzC,WAAQrC,EACb8E,KAAKif,SAAM/jB,GAER62jB,KC1CPC,GAAmC,WACnC,SAASA,EAAkBxuD,GACvBxjgB,KAAK2iQ,cAAgB,EACrB3iQ,KAAKwjgB,MAAQA,EAmDjB,OAjDAllgB,OAAOuJ,eAAemqjB,EAAkB52jB,UAAW,UAC/CsM,IAAK,WACD,YAAuBxM,IAAnB8E,KAAKiyjB,UACE,EAEJjyjB,KAAKiyjB,UAAUz1jB,QAE1BmL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemqjB,EAAkB52jB,UAAW,uBAC/CsM,IAAK,WACD,UAAuBxM,IAAnB8E,KAAKiyjB,WAA2BjyjB,KAAK2iQ,aAAe,GAAK3iQ,KAAK2iQ,cAAgB3iQ,KAAKxD,QAGvF,OAAOwD,KAAKiyjB,UAAUjyjB,KAAK2iQ,eAE/Bh7P,YAAY,EACZC,cAAc,IAElBoqjB,EAAkB52jB,UAAUq2jB,UAAY,WACpC,IAAIS,EAAmB,IAAIH,GAAiB/xjB,KAAKwjgB,OAKjD,OAJI/lgB,EAAkBuC,KAAKiyjB,aACvBjyjB,KAAKiyjB,cAETjyjB,KAAKiyjB,UAAUztjB,KAAK0tjB,GACbA,GAEXF,EAAkB52jB,UAAUq1jB,aAAe,WAEvC,GADAzwjB,KAAK2iQ,cAAgB,GAChBllQ,EAAkBuC,KAAKiyjB,WACxB,IAAK,IAAI/1jB,EAAI8D,KAAKiyjB,UAAUz1jB,OAAS,EAAGN,GAAK,EAAGA,IAC5C8D,KAAKiyjB,UAAU/1jB,GAAGmW,UAClBrS,KAAKiyjB,UAAUtpiB,OAAOzsB,EAAG,IAIrC81jB,EAAkB52jB,UAAUmD,QAAU,SAAUQ,GAC5C,OAAItB,EAAkBuC,KAAKiyjB,YACf,EAELjyjB,KAAKiyjB,UAAU1zjB,QAAQQ,IAElCizjB,EAAkB52jB,UAAUiX,QAAU,WAC7B5U,EAAkBuC,KAAKiyjB,YACxBjyjB,KAAKywjB,eAETzwjB,KAAKiyjB,eAAY/2jB,GAEd82jB,KCxDPG,GAA+B,WAI/B,SAASA,EAAczlZ,GACnB1sK,KAAKgvf,aAAetiV,EAoExB,OAlEApuK,OAAOuJ,eAAesqjB,EAAc/2jB,UAAW,UAI3CsM,IAAK,WACD,OAAO1H,KAAKgvf,aAAawhE,kBAAkBh0jB,QAE/CmL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesqjB,EAAc/2jB,UAAW,SAI3CsM,IAAK,WACD,OAAO1H,KAAKgvf,aAAawhE,kBAAkB7tT,cAK/Ct7P,IAAK,SAAUtK,GACS,IAAhBiD,KAAKxD,QAAgBO,EAAQ,GAAKA,EAAQiD,KAAKgvf,aAAawhE,kBAAkBh0jB,OAAS,IAG3FwD,KAAKgvf,aAAawhE,kBAAkB7tT,aAAe5lQ,EACnDiD,KAAKoyjB,SAASr1jB,KAElB4K,YAAY,EACZC,cAAc,IAOlBuqjB,EAAc/2jB,UAAU6B,QAAU,SAAUo1jB,IACpB,IAAhBryjB,KAAK8R,OAGT9R,KAAKgvf,aAAasjE,gBAAgBD,IAMtCF,EAAc/2jB,UAAUm3jB,WAAa,SAAUF,IACvB,IAAhBryjB,KAAK8R,OAGT9R,KAAKgvf,aAAawjE,mBAAmBH,IAKzCF,EAAc/2jB,UAAUg3jB,SAAW,SAAUtgjB,GACzC9R,KAAKgvf,aAAaojE,SAASpyjB,KAAKgvf,aAAawhE,kBAAkBG,qBAC/D3wjB,KAAKgvf,aAAa1gK,UAAUtuV,KAAKgvf,aAAawhE,oBAKlD2B,EAAc/2jB,UAAUqxD,MAAQ,WAC5BzsD,KAAKgvf,aAAawhE,kBAAkBC,eACpCzwjB,KAAKgvf,aAAayjE,uBAClBzyjB,KAAKgvf,aAAaR,OAAOs0C,sBAEtBqvB,KCjEPhyf,GAAwB,WAIxB,SAASA,EAAOqjc,GAIZxjgB,KAAK0yhB,wBAAqBx3hB,EAC1B8E,KAAK0yjB,4BAAyBx3jB,EAC9B8E,KAAK2yjB,6BAA0Bz3jB,EAC/B8E,KAAK4yjB,4BAAyB13jB,EAC9B8E,KAAK6yjB,6BAA0B33jB,EAC/B8E,KAAKwjgB,MAAQA,EACbxjgB,KAAK0yhB,mBAAqB,IAAInwS,GAC9BviP,KAAK8yjB,WAAa,IAAI7C,GAAWjwjB,KAAKwjgB,OACtCxjgB,KAAKwwjB,kBAAoB,IAAIwB,GAAkBhyjB,KAAKwjgB,OACpDxjgB,KAAK+yjB,sBAAwB,IAAIZ,GAAcnyjB,MA4fnD,OA1fA1B,OAAOuJ,eAAes4D,EAAO/kE,UAAW,UAIpCsM,IAAK,WACD,OAAO1H,KAAKwjgB,MAAMhV,QAEtB7mf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAes4D,EAAO/kE,UAAW,iBAIpCsM,IAAK,WACD,OAAO1H,KAAK+yjB,uBAEhBprjB,YAAY,EACZC,cAAc,IAKlBu4D,EAAO/kE,UAAU2mC,cAAgB,WAC7B,MAAO,UASXo+B,EAAO/kE,UAAU+0jB,KAAO,SAAUnhiB,EAAMgkiB,GAChCv1jB,EAAkBu1jB,KAClBA,EAAc,QAElB,IAAIj0jB,EAASiB,KAAK8yjB,WAAW3C,KAAKnhiB,EAAMgkiB,GACnCv1jB,EAAkBsB,IACnBiB,KAAKoyjB,SAASrzjB,IAQtBohE,EAAO/kE,UAAU41jB,QAAU,SAAUhiiB,EAAMgkiB,GACvC,IAAIv1jB,EAAkBuxB,GAAiB,KAATA,GAA9B,CAGIvxB,EAAkBu1jB,KAClBA,EAAc,QAElB,IAAIxkX,EAAUxuM,KAAK8yjB,WAAW9B,QAAQhiiB,EAAMgkiB,IACvCv1jB,EAAkB+wM,IAAYA,EAAQhyM,OAAS,IAChDwD,KAAKoyjB,SAAS5jX,EAAQyjX,UAAUzjX,EAAQm0D,eACxC3iQ,KAAKsuV,UAAU9/I,MAYvBruI,EAAO/kE,UAAU6B,QAAU,SAAUg2jB,EAAal0jB,EAAQyvM,GACtD,GAAI/wM,EAAkBuC,KAAKwuf,OAAOgV,QAAUxjgB,KAAKwuf,OAAOgV,MAAMtR,gBAAkBz0f,EAAkB+wM,GAC9F,OAAO,EAEN/wM,EAAkBuC,KAAKwuf,SACxBxuf,KAAKyyjB,uBAETzyjB,KAAKoyjB,SAASrzjB,GACd,IAAIghiB,EAAc//hB,KAAKwuf,OAAOv4a,UAAU14E,MAExC,GADYixM,EAAQjwM,QAAQQ,GAChB,EACR,OAAO,EAEXiB,KAAKwjgB,MAAM1U,aAAaokE,WAAWD,GAAa,GAChD,IAAIE,EAAkBp0jB,EAAOkgB,IACzBqmS,EAAgB,IAAI4oP,GAAaluiB,KAAKwuf,OAAOgV,OACjDl+M,EAAc2pP,qBAAqBkkB,EAAgBznC,cAAeqU,EAAYp0hB,OAASsnjB,EAAYz2jB,QACnGwD,KAAKwuf,OAAOv4a,UAAUm6I,YAAY2vU,EAAaz6O,GAC/C,IAAI/3S,GAAcjR,OAAQ0D,KAAKwuf,OAAOgV,OAEtC,OADAxjgB,KAAKwuf,OAAOgV,MAAM78e,QAAQ,sBAAuBpZ,GAC1C,GASX4yD,EAAO/kE,UAAUk3jB,gBAAkB,SAAUD,EAAeW,GACxD,GAAuB,KAAlBX,IAAwB50jB,EAAkB40jB,GAA/C,CAGI50jB,EAAkBu1jB,KAClBA,EAAc,QAElB,IAAIpC,EAAa5wjB,KAAKwwjB,kBAAkBG,oBAAoB3hiB,KACxDtgB,EAAU1O,KAAKwuf,OAAOgV,MAAMxU,aAAa8jE,WAAWvC,cAAcK,EAAYoC,GAC9ElhjB,EAAQ9R,KAAKwjgB,MAAMvtb,UAAUh3D,IAAIqvhB,+BACjCvviB,EAASiB,KAAKwuf,OAAOgV,MAAMxU,aAAa8jE,WAAWzC,SAAS3hjB,EAASskjB,EAAalhjB,GACjFrU,EAAkBsB,KACnBiB,KAAKoyjB,SAASrzjB,GACdiB,KAAKwwjB,kBAAkBiB,YACvBzxjB,KAAKwwjB,kBAAkByB,UAAU,GAAKlzjB,EACtCiB,KAAK/C,QAAQo1jB,EAAetzjB,EAAQiB,KAAKwwjB,mBACzC1+iB,EAAQ9R,KAAKwjgB,MAAMvtb,UAAUh3D,IAAIqvhB,gCACjCvviB,EAASiB,KAAK8yjB,WAAWzC,SAASO,EAAYoC,EAAalhjB,MAEvD9R,KAAKwwjB,kBAAkBiB,YACvBzxjB,KAAKwwjB,kBAAkByB,UAAU,GAAKlzjB,EACtCiB,KAAKoyjB,SAASrzjB,OAU1BohE,EAAO/kE,UAAUm3jB,WAAa,SAAUU,EAAazkX,GACjD,GAAI/wM,EAAkBuC,KAAKwuf,OAAOgV,QAAUxjgB,KAAKwuf,OAAOgV,MAAMtR,gBAAkBz0f,EAAkB+wM,GAC9F,OAAO,EAEPxuM,KAAKwjgB,MAAMu0B,eACX/3hB,KAAKwjgB,MAAMu0B,cAAcC,mBAAmBh4hB,KAAKwjgB,MAAMvtb,UAAW,cAEtE,IAAI/2D,EAAQsvL,EAAQhyM,OACpBwD,KAAKwuf,OAAOgV,MAAMjiB,iBAAkB,EACpC,IAAK,IAAIrlf,EAAIgjB,EAAQ,EAAGhjB,GAAK,EAAGA,IAAK,CACjC,IAAI6C,EAASyvM,EAAQyjX,UAAU/1jB,GAC/B8D,KAAKoyjB,SAAS5jX,EAAQyjX,UAAU/1jB,IAChC8D,KAAKwjgB,MAAM1U,aAAaokE,WAAWD,GAAa,IAC5Cl0jB,EAAO2tB,UAAY3tB,EAAOmxjB,WAC1BlwjB,KAAKwuf,OAAOlhc,OAAOoud,2BAA2B17gB,KAAKwuf,OAAOv4a,UAAU14E,MAAM05f,UAAU6F,YAExFtuT,EAAQyjX,UAAU/1jB,GAAGmW,UASzB,OAPIrS,KAAKwjgB,MAAMu0B,gBAAkBt6hB,EAAkBuC,KAAKwjgB,MAAMu0B,cAAcq7B,oBACxEpzjB,KAAKwjgB,MAAMu0B,cAAcQ,uBAGzBv4hB,KAAKwjgB,MAAM1U,aAAaukE,4BAA4B,GAExDrzjB,KAAKsvjB,cAAc7igB,QACZvtC,GASXihD,EAAO/kE,UAAUo3jB,mBAAqB,SAAUH,EAAeW,GACpC,KAAlBX,GAAwB50jB,EAAkB40jB,KAG3C50jB,EAAkBu1jB,KAClBA,EAAc,QAEdhzjB,KAAKwwjB,kBAAkBh0jB,OAAS,IAChCwD,KAAKoyjB,SAASpyjB,KAAKwwjB,kBAAkByB,UAAUjyjB,KAAKwwjB,kBAAkB7tT,eACtE3iQ,KAAKsuV,UAAUtuV,KAAKwwjB,mBACpBxwjB,KAAKuyjB,WAAWF,EAAeryjB,KAAKwwjB,sBAQ5Crwf,EAAO/kE,UAAUg3jB,SAAW,SAAUF,GAClC,GAAIA,EAAkB,CAClB,IAAI30jB,EAAQ20jB,EAAiB30jB,MACzB0hB,EAAMiziB,EAAiBjziB,IACtBxhB,EAAkBuC,KAAKwjgB,QAAW/lgB,EAAkBuC,KAAKwjgB,MAAMvtb,YAAex4E,EAAkBF,IAChGE,EAAkBwhB,IAASxhB,EAAkBF,EAAM05f,YAAex5f,EAAkBwhB,EAAIg4e,YACzFj3f,KAAKwjgB,MAAMvtb,UAAUm6I,YAAY7yN,EAAO0hB,KAOpDkhD,EAAO/kE,UAAUkzV,UAAY,SAAUkiO,GACnCxwjB,KAAK0yhB,mBAAqB,IAAInwS,GAC9B,IAAK,IAAIrmP,EAAI,EAAGA,EAAIs0jB,EAAkByB,UAAUz1jB,OAAQN,IAAK,CACzD,IAAI6C,EAASyxjB,EAAkByB,UAAU/1jB,GACzC8D,KAAKszjB,gBAAgBv0jB,GAEzBiB,KAAKwuf,OAAOs0C,sBAKhB3ie,EAAO/kE,UAAUk4jB,gBAAkB,SAAUv0jB,GACzCiB,KAAKuzjB,sBAAsBx0jB,EAAOxB,MAAM05f,UAAWl4f,EAAOxB,MAAOwB,EAAOkgB,MAM5EkhD,EAAO/kE,UAAUm4jB,sBAAwB,SAAUt8D,EAAW15f,EAAO0hB,GACjE,IAAIqzhB,EAAsB,EACtB0B,EAAoB,EACpBwQ,EAAe,KACfC,EAAa,KAEb5xC,EAAa7ygB,KAAKwuf,OAAOv4a,UAAU2ue,mBAAmB3tD,EAAW15f,EAAOinjB,EAAclS,GAC1FA,EAAsBz/B,EAAW/ggB,MAEjC,IAAIm6gB,GADJu4B,EAAe3xC,EAAW7xgB,SACWwjjB,EAAav6f,KAAOgtc,EAAUI,aAAa,GAC5E2rD,EAAUhjjB,KAAKwuf,OAAOv4a,UAAU6ue,iBAAiB7liB,EAAKwliB,EAAYzQ,GACtEA,EAAoBgP,EAAQlxiB,MAE5B,IAAI4yiB,GADJD,EAAazB,EAAQhijB,SACYyjjB,EAAWx6f,KACxChrC,EAAIg4e,UAAUI,aAAap4e,EAAIg4e,UAAUI,aAAa76f,OAAS,GAC/DkQ,EAAM1M,KAAKwuf,OAAOv4a,UAAUmhO,OAAO60O,GACnCz/gB,EAAOxM,KAAKwuf,OAAOv4a,UAAUoge,gBAAgBpqB,EAAiBu4B,EAAclS,GAChF,GAAK70iB,EAAkBwuhB,IAAoBA,IAAoBy4B,GAM3D,IAAKjnjB,EAAkBwuhB,GAAkB,CACjCh1B,IAAcg1B,EAAgBh1B,YAC9BA,EAAYg1B,EAAgBh1B,WAGhCj3f,KAAKq7iB,sBAAsBpvB,EAAiBjshB,KAAKwuf,OAAOv4a,UAAUi9M,SAAS+4P,GAAiB,IAASz/gB,EAAOy/gB,EAAgBh1B,UAAUlqf,GAAIP,EAAME,GAGhJ,IACK,IAHD+8R,EAAYwiP,EAAgBh1B,UAAUI,aAAa94f,QAAQ0thB,GAGtD/vhB,EAAI,EAAGA,EAAI+6f,EAAUI,aAAa76f,OAAQN,IAAK,CAKpD,GAJI+6f,IAAcg1B,EAAgBh1B,YAC9BxtN,GAAa,GAEjBzpS,KAAKwzjB,gCAAgCv8D,EAAWxtN,EAAWi7Q,EAAeD,EAAYzQ,GAClF/8C,IAAcytD,EAAcztD,UAC5B,OAGAxtN,EAAY,QAxBkD,CAE1E,IAAIh9R,EAAQzM,KAAKwuf,OAAOv4a,UAAUoge,gBAAgBqO,EAAeD,EAAYzQ,GAC7Eh0iB,KAAKq7iB,sBAAsBpvB,EAAiBx/gB,EAAQD,EAAMA,EAAME,KA8BxEyzD,EAAO/kE,UAAUigjB,sBAAwB,SAAUxoC,EAAY78f,EAAOxJ,EAAME,GACxE,IAAI+mjB,EAAgBzzjB,KAAK0zjB,yBAAyB7gD,GAC9CtlW,EAAOvtK,KAAKwuf,OAAOgV,MAAMvtb,UAAUslO,QAAQs3N,EAAW5b,WAC5C1pV,EAAKurV,kBAAkB9rf,EACtBugK,EAAKurV,kBAAkB/rf,EACtC0mjB,EAAcjnjB,KAAOH,KAAKqmB,KAAKlmB,GAC/BE,EAAML,KAAKqmB,KAAKhmB,GAChB+mjB,EAAcz9iB,MAAQ3J,KAAKmT,MAAMxJ,GACpB3J,KAAKmT,MAAMqzf,EAAW98f,QACrB/V,KAAKwuf,OAAOimC,kBAM9Bt0d,EAAO/kE,UAAUs4jB,yBAA2B,SAAU7gD,GAClD,IAAI8gD,OAAez4jB,EACf8E,KAAK0yhB,mBAAmBrvS,YAAYwvR,GACpC8gD,EAAe3zjB,KAAK0yhB,mBAAmBhrhB,IAAImrgB,IAG3C8gD,KACA3zjB,KAAK0yhB,mBAAmBtuhB,IAAIyugB,EAAY8gD,IAE5C,IAAIC,EAAkB,IAAIhC,GAAiB,EAAG,GAE9C,OADA+B,EAAanvjB,KAAKovjB,GACXA,GAMXzzf,EAAO/kE,UAAUo4jB,gCAAkC,SAAU3tD,EAAQhgf,EAAYm9hB,EAASyB,EAAY1+hB,GAElG,IAAK,IADDrZ,EAAM,EACDgX,EAAImC,EAAYnC,EAAImif,EAAOxO,aAAa76f,OAAQknB,IAAK,CAC1D,IAAImvf,EAAahN,EAAOxO,aAAa3ze,GACjCA,IAAMmC,IACNnZ,EAAM1M,KAAKwuf,OAAOv4a,UAAUmhO,OAAOy7N,IAEvC,IAAIrmgB,EAAOxM,KAAKwuf,OAAOv4a,UAAU+gO,QAAQ67N,GACzC,GAAIA,IAAemwC,EAAS,CAExB,IAAIv2iB,EAAQzM,KAAKwuf,OAAOv4a,UAAUoge,gBAAgB2M,EAASyB,EAAY1+hB,GAEvE,YADA/lB,KAAKq7iB,sBAAsBxoC,EAAYpmgB,EAAQD,EAAMA,EAAME,GAG/D1M,KAAKq7iB,sBAAsBxoC,EAAY7ygB,KAAKwuf,OAAOv4a,UAAUi9M,SAAS2/O,GAAY,IAASrmgB,EAAOq5f,EAAO94f,GAAIP,EAAME,GACnHA,GAAOmmgB,EAAW98f,SAQ1BoqD,EAAO/kE,UAAUy4jB,qBAAuB,SAAU90jB,GAC1CtB,EAAkBsB,IAAsB,KAAXA,IAG7BtB,EAAkBuC,KAAKwjgB,MAAM9hB,mBAC7B1hf,KAAKwjgB,MAAM9hB,oBAEf1hf,KAAKwjgB,MAAM9hB,gBAAgBl9e,KAAKzF,KAKpCohE,EAAO/kE,UAAU04jB,kBAAoB,SAAUtD,GAC3C,IAAK,IAAIt0jB,EAAI,EAAGA,EAAIs0jB,EAAkByB,UAAUz1jB,OAAQN,IAAK,CACzD,IAAI6C,EAASyxjB,EAAkByB,UAAU/1jB,GACzC8D,KAAK+zjB,2BAA2Bh1jB,GAEpCiB,KAAK0yjB,wBAAyB,EAC9B1yjB,KAAK4yjB,wBAAyB,EAC9B5yjB,KAAK2yjB,yBAA0B,EAC/B3yjB,KAAK6yjB,yBAA0B,GAMnC1yf,EAAO/kE,UAAU24jB,2BAA6B,SAAUh1jB,GACpD,GAAoB,MAAhBA,EAAOxB,OAA+B,MAAdwB,EAAOkgB,KAAyC,MAA1BlgB,EAAOxB,MAAM05f,WAA6C,MAAxBl4f,EAAOkgB,IAAIg4e,UAAmB,CAC9G,IACI+8D,OAAa,EAEbnuiB,EAAa,EACb+qhB,EAAY7xiB,EAAOxB,MAAMmuhB,cAAc3iB,UAAUhqgB,EAAOxB,MAAMoO,OAAQka,GACtE24I,EAASoyY,EAAU5viB,QACvB6kB,EAAa+qhB,EAAU9+hB,MACvB,IAAI3I,EAAS,GACT8hC,EAAY,EAChB,GAAIuzH,aAAkBihW,GAAiB,CACnC,IAAI2hD,EAAcphjB,KAAKwjgB,MAAMvtb,UAAUore,kBAAkB7iZ,EAAQ34I,GAC7Du7hB,EAAYpgjB,QAAQyuY,oBAAoBm5H,IACxCpqW,EAAS4iZ,EAAYpgjB,QAAQyuY,SAC7B5pX,EAAau7hB,EAAYtviB,QAGzB0sJ,EAAS4iZ,EAAYpgjB,QACrB6kB,EAAau7hB,EAAYtviB,OAGjC,IAAImijB,EAASj0jB,KAAKwjgB,MAAMvtb,UAAUmue,sBAAsB5lZ,EAAQ34I,GAC5DwK,EAAM4jiB,EAAOjzjB,QAEjB,GADA6kB,EAAaouiB,EAAOnijB,MACT,MAAPue,EAAa,CACTA,aAAeu4e,IAAkB/if,EAAa,IAC9C1c,EAASknB,EAAIrB,KAAK3K,UAAU,EAAGwB,IAEnC,IAAIquiB,EAAW7jiB,EAAI45B,KAAK7vC,SAAS7b,QAAQ8xB,GAGzC,IADA4a,EAAY9hC,EAAO41F,YAAY,KACxB9zD,EAAY,GAAKiphB,EAAW,GAAK7jiB,EAAI45B,KAAK7vC,SAAS85iB,EAAW,aAActrD,IAC/Ez/f,EAASknB,EAAI45B,KAAK7vC,SAAS85iB,EAAW,GAAGlliB,KAAO7lB,EAChD+qjB,IACAjphB,EAAY9hC,EAAO41F,YAAY,KAGvC,IAAIo1d,EAAahrjB,EAAO41F,YAAY,MAChCo1d,EAAa,EACbhrjB,EAASA,EAAOkb,UAAU,EAAG8viB,IAG7BlphB,EAAY9hC,EAAO41F,YAAY,MACN,EAAI51F,EAASA,EAAOkb,UAAU4mB,EAAY,GAEzDlsC,EAAOiwB,KACrB,IAAIjJ,EAAW,EACXu7hB,EAAevijB,EAAOkgB,IAAIysgB,cAAc3iB,UAAUhqgB,EAAOkgB,IAAItT,OAAQoa,GACrEw7hB,EAAYD,EAAatgjB,QAW7B,GAVA+kB,EAAWu7hB,EAAaxviB,MACxBkijB,EAAa,GAEC,MAAVC,IAGA5jiB,GADA4jiB,EAASj0jB,KAAKwjgB,MAAMvtb,UAAUmue,sBAAsB7C,EAAWx7hB,IAClD/kB,QACb+kB,EAAWkuiB,EAAOnijB,OAGX,MAAPue,EAAa,CACTA,aAAeu4e,IAAkB7if,EAAWsK,EAAI7zB,SAChDw3jB,EAAa3jiB,EAAIrB,KAAK3K,UAAU0B,IAIpC,IAFImuiB,EAAW7jiB,EAAI45B,KAAK7vC,SAAS7b,QAAQ8xB,GAElC6jiB,EAAW,EAAI7jiB,EAAI45B,KAAK7vC,SAAS5d,QAAW6zB,EAAI45B,KAAK7vC,SAAS85iB,EAAW,aAActrD,IAAoBv4e,EAAI45B,KAAK7vC,SAAS85iB,EAAW,aAAcz0D,IACrJpve,EAAI45B,KAAK7vC,SAAS85iB,EAAW,aAAcz0D,GAC3Cy0D,GAAsB,GAGtBF,GAA0B3jiB,EAAI45B,KAAK7vC,SAAS85iB,EAAW,GAAGlliB,KAC1DkliB,GAAsB,GAIlCjphB,EAAY+ohB,EAAWj1d,YAAY,KACnCi1d,EAA4B,OAAfA,EAAsBA,EAAa,GAAKA,EACrD,IAAII,EAAqB,GACrBr1jB,EAAO2tB,SACP0niB,EAAqB,wDAEhBr1jB,EAAOmxjB,SACZkE,EAAqB,yDAGrBA,EAAqB,GACrBA,EAAqB,GACrBp0jB,KAAK0yjB,wBAAyB,EAC9B1yjB,KAAK2yjB,yBAA0B,EAC/B3yjB,KAAK4yjB,wBAAyB,EAC9B5yjB,KAAK6yjB,yBAA0B,GAEnC,IAAI3rW,EAAc,GACd35C,EAAOxuK,EAAOyvf,OAAOv4a,UAAUslO,QAAQx8S,EAAOxB,MAAM05f,WACpDx5f,EAAkBuC,KAAK2yjB,0BAA4Bl1jB,EAAkBuC,KAAK6yjB,0BAC1E7yjB,KAAK2yjB,yBAA0B,EAC/B3yjB,KAAK6yjB,yBAA0B,GAE1Bp1jB,EAAkBuC,KAAK0yjB,yBAA2Bj1jB,EAAkBuC,KAAK4yjB,0BAC9E5yjB,KAAK0yjB,wBAAyB,EAC9B1yjB,KAAK4yjB,wBAAyB,GAE9B7zjB,EAAO2tB,SACoC,oBAAvC6gJ,EAAKw6V,aAAaL,kBAA0Cn6V,EAAKq4V,YAAY,GAAG7O,cAAc86B,mBAE9F3qU,EAAc,qEAAuEktW,EAAqBjrjB,EAAS,iEAAmEpK,EAAOiwB,KAAO,UAAYgliB,EAAa,QAEjL,eAAvCzmZ,EAAKw6V,aAAaL,kBAAqC1ngB,KAAK2yjB,yBAEjEzrW,EAAc,qEAAuEktW,EAAqBjrjB,EAAS,iEAAmEpK,EAAOiwB,KAAO,UAAYgliB,EAAa,QAC7Nh0jB,KAAK2yjB,yBAA0B,GAGa,cAAvCplZ,EAAKw6V,aAAaL,kBAAoC1ngB,KAAK0yjB,yBAChExrW,EAAc,qEAAuEktW,EAAqBjrjB,EAAS,iEAAmEpK,EAAOiwB,KAAO,UAAYgliB,EAAa,QAC7Nh0jB,KAAK0yjB,wBAAyB,GAG7B3zjB,EAAOmxjB,SAC+B,oBAAvC3iZ,EAAKy6V,aAAaN,kBAA0Cn6V,EAAKq4V,YAAY,GAAG7O,cAAc86B,mBAE9F3qU,EAAc,qEAAuEktW,EAAqBjrjB,EAAS,iEAAmEpK,EAAOiwB,KAAO,UAAYgliB,EAAa,QAEjL,eAAvCzmZ,EAAKy6V,aAAaN,kBAAqC1ngB,KAAK6yjB,yBAEjE3rW,EAAc,qEAAuEktW,EAAqBjrjB,EAAS,iEAAmEpK,EAAOiwB,KAAO,UAAYgliB,EAAa,QAC7Nh0jB,KAAK6yjB,yBAA0B,GAGa,cAAvCtlZ,EAAKy6V,aAAaN,kBAAoC1ngB,KAAK4yjB,yBAChE1rW,EAAc,qEAAuEktW,EAAqBjrjB,EAAS,iEAAmEpK,EAAOiwB,KAAO,UAAYgliB,EAAa,QAC7Nh0jB,KAAK4yjB,wBAAyB,GAI5B7zjB,EAAO2tB,UAAa3tB,EAAOmxjB,WACjChpW,EAAc,qEAAuEktW,EAAqBjrjB,EAAS,iEAAmEpK,EAAOiwB,KAAO,UAAYgliB,EAAa,SAEjOh0jB,KAAK6zjB,qBAAqB3sW,KAQlC/mJ,EAAO/kE,UAAUq3jB,qBAAuB,WAC/Bh1jB,EAAkBuC,KAAK0yhB,sBACxB1yhB,KAAK0yhB,mBAAmBjme,QACxBzsD,KAAK0yhB,wBAAqBx3hB,GAE9B,IAAIqS,GAAcjR,OAAQ0D,KAAKwuf,OAAOgV,OACtCxjgB,KAAKwuf,OAAOgV,MAAM78e,QAAQ,sBAAuBpZ,IAKrD4yD,EAAO/kE,UAAUiX,QAAU,WACnBrS,KAAKwwjB,mBACLxwjB,KAAKwwjB,kBAAkBn+iB,WAGxB8tD,KCjhBPm1b,GAA6B,WAM7B,SAASA,EAAY++D,GACjB,IAAIt0jB,EAAQC,KAIZA,KAAK4vf,mBAAoB,EACzB5vf,KAAKowjB,WAAa,OAClBpwjB,KAAK6oE,eAAY3tE,EACjB8E,KAAKs0jB,eAAYp5jB,EAEjB8E,KAAKu0jB,WAAa,aAClBv0jB,KAAKw0jB,YAAc,UACnBx0jB,KAAKy0jB,eAAiB,aACtBz0jB,KAAK00jB,kBAAoB,UACzB10jB,KAAK20jB,qBAAuB,cAC5B30jB,KAAK40jB,cAAgB,EACrB50jB,KAAKm9I,kBACLn9I,KAAK60jB,eAAgB,EACrB70jB,KAAK80jB,gBAAkB,UACvB90jB,KAAK+0jB,aAAe,OACpB/0jB,KAAKg1jB,oBAAsB,aAI3Bh1jB,KAAKi1jB,iBAAc/5jB,EAInB8E,KAAKygY,WAAY,EAMjBzgY,KAAKk1jB,gBAAkB,SAAUj1jB,GAC7B,GAAIA,EAAKqgY,gBAAkBrgY,EAAK0/D,cAAe,CAC3C,IAAIw1f,EAAc30jB,SAASmC,cAAc,cAAgB1C,EAAKqgY,eAC1D80L,EAAU50jB,SAASmC,cAAc,cAAgB1C,EAAK0/D,eAC1Dy1f,EAAQlwjB,aAAaiwjB,EAAYhwjB,kBAAmBiwjB,EAAQp4iB,YAErC,IAAvB/c,EAAK0/D,eAAwBliE,EAAkB+C,SAASmC,cAAc,cAAgB1C,EAAK0/D,kBAC3F5/D,EAAM80jB,eAAgB,EACtB90jB,EAAMs1jB,cAEiB,IAAvBp1jB,EAAK0/D,eAAwBliE,EAAkB+C,SAASmC,cAAc,cAAgB1C,EAAK0/D,kBAC3F5/D,EAAM80jB,eAAgB,EACtB90jB,EAAMu1jB,kBAGdt1jB,KAAKu1jB,mBAAqB,WACtBx1jB,EAAMy1jB,yBACNz1jB,EAAMyuf,OAAOgV,MAAMxU,aAAayjE,uBAChC,IAAIrxR,EAAYrhS,EAAM01jB,YAAY14jB,MAClC,GAAkB,KAAdqkS,EAAJ,CAGA,IAAI1yR,EAAU3O,EAAMyuf,OAAOgV,MAAMxU,aAAa8jE,WAAWvC,cAAcnvR,EAAWrhS,EAAMqwjB,YAEpFvC,EADe9tjB,EAAMyuf,OAAOv4a,UAAUh3D,IACRqvhB,+BAClCvuiB,EAAMyuM,QAAUzuM,EAAMyuf,OAAOgV,MAAMxU,aAAa8jE,WAAW9B,QAAQtijB,EAAS3O,EAAMqwjB,WAAYvC,GACzE,MAAjB9tjB,EAAMyuM,SAAmBzuM,EAAMyuM,QAAQhyM,OAAS,EAChDuD,EAAM21jB,wBAGN31jB,EAAMyuf,OAAOs0C,qBACb/iiB,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAY,cAC3Dl6E,EAAM81jB,gBAAgBnxjB,MAAMosC,QAAU,QACtC/wC,EAAM+1jB,iBAAiBpxjB,MAAMosC,QAAU,OACvC/wC,EAAMg2jB,oBACNh2jB,EAAM+1jB,iBAAiB9zjB,UAAY,MAQ3ChC,KAAKg2jB,iBAAmB,SAAU/1jB,GAC1BF,EAAMk2jB,WAAWzjjB,SAAWzS,EAAMm2jB,WAAW1jjB,QAC7CzS,EAAMqwjB,WAAa,yBAEdrwjB,EAAMk2jB,WAAWzjjB,UAAazS,EAAMm2jB,WAAkB,QAC3Dn2jB,EAAMqwjB,WAAa,iBAEZrwjB,EAAMk2jB,WAAkB,SAAKl2jB,EAAMm2jB,WAAW1jjB,QACrDzS,EAAMqwjB,WAAa,YAGnBrwjB,EAAMqwjB,WAAa,OAEvBrwjB,EAAMw1jB,sBAOVv1jB,KAAKm2jB,YAAc,SAAUl2jB,GACrBF,EAAMk2jB,WAAWzjjB,SAAWzS,EAAMm2jB,WAAW1jjB,QAC7CzS,EAAMqwjB,WAAa,0BAEZrwjB,EAAMk2jB,WAAkB,SAAKl2jB,EAAMm2jB,WAAW1jjB,QACrDzS,EAAMqwjB,WAAa,YAEdrwjB,EAAMk2jB,WAAWzjjB,UAAazS,EAAMm2jB,WAAkB,QAC3Dn2jB,EAAMqwjB,WAAa,gBAGnBrwjB,EAAMqwjB,WAAa,OAEvBrwjB,EAAMw1jB,sBAyBVv1jB,KAAKo2jB,aAAe,WAChBr2jB,EAAMs2jB,WAAW55jB,iBAAiB,QAASsD,EAAMu2jB,yBACjDv2jB,EAAMw2jB,qBAAqB95jB,iBAAiB,QAASsD,EAAMy2jB,+BAC3Dz2jB,EAAM02jB,yBAAyBh6jB,iBAAiB,QAASsD,EAAM22jB,mCAC/D32jB,EAAM01jB,YAAYh5jB,iBAAiB,UAAWsD,EAAM42jB,WACpD52jB,EAAM01jB,YAAYh5jB,iBAAiB,QAASsD,EAAM62jB,8BAClD72jB,EAAM+1jB,iBAAiBr5jB,iBAAiB,QAASsD,EAAM82jB,sBACvD92jB,EAAM+2jB,YAAYr6jB,iBAAiB,QAASsD,EAAMkC,OAClDlC,EAAMg3jB,cAAct6jB,iBAAiB,QAASsD,EAAMi3jB,sBACpDj3jB,EAAMk3jB,iBAAiBx6jB,iBAAiB,QAASsD,EAAMm3jB,0BAM3Dl3jB,KAAKq1jB,WAAa,WACdt1jB,EAAMo3jB,WAAWzyjB,MAAMosC,QAAU,OACjC/wC,EAAMq3jB,cAAc1yjB,MAAMosC,QAAU,OAC/BrzC,EAAkBsC,EAAMyuM,UAAqC,IAAzBzuM,EAAMyuM,QAAQhyM,SACnDuD,EAAM+1jB,iBAAiB9zjB,UAAY,GACnCjC,EAAM+1jB,iBAAiBpxjB,MAAMosC,QAAU,OACvC/wC,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAY,eAE/Dl6E,EAAM+1jB,iBAAiBpxjB,MAAMqR,OAAShW,EAAM+1jB,iBAAiBn+f,aAAe53D,EAAMs3jB,qBAAqB1/f,aAAe,KACtH53D,EAAMs3jB,qBAAqB3yjB,MAAMosC,QAAU,OAC3C/wC,EAAMu3jB,QAAQ5yjB,MAAMosC,QAAU,QAC9B/wC,EAAM41jB,WAAWjxjB,MAAMosC,QAAU,QACjC/wC,EAAMo9I,kBAENp9I,EAAMo9I,eAAe34I,KAAKzE,EAAM+2jB,YAAa/2jB,EAAMw3jB,oBAAqBx3jB,EAAMy3jB,uBAAwBz3jB,EAAM01jB,YAAa11jB,EAAMs2jB,WAAYt2jB,EAAM02jB,yBAA0B12jB,EAAMw2jB,qBAAsBx2jB,EAAMk2jB,WAAYl2jB,EAAMm2jB,YAC/Nn2jB,EAAM60jB,aAAe,EACrB70jB,EAAM01jB,YAAYhwjB,SAClB1F,EAAM03jB,uBAEVz3jB,KAAK42jB,6BAA+B,WACO,IAAnC72jB,EAAM01jB,YAAY14jB,MAAMP,QACxBuD,EAAMg3jB,cAAcpyc,UAAW,EAC/B5kH,EAAMk3jB,iBAAiBtyc,UAAW,IAGlC5kH,EAAMg3jB,cAAcpyc,UAAW,EAC/B5kH,EAAMk3jB,iBAAiBtyc,UAAW,IAO1C3kH,KAAKs1jB,cAAgB,WACjBv1jB,EAAMu3jB,QAAQ5yjB,MAAMosC,QAAU,QAC9B/wC,EAAMo3jB,WAAWzyjB,MAAMosC,QAAU,QACjC/wC,EAAMs3jB,qBAAqB3yjB,MAAMosC,QAAU,QAC3C/wC,EAAM+1jB,iBAAiBpxjB,MAAMqR,OAAShW,EAAM+1jB,iBAAiBn+f,aAAe53D,EAAMs3jB,qBAAqB1/f,aAAe,KACtH53D,EAAM80jB,eAAgB,EACiB,IAAnC90jB,EAAM01jB,YAAY14jB,MAAMP,QACxBuD,EAAMg3jB,cAAcpyc,UAAW,EAC/B5kH,EAAMk3jB,iBAAiBtyc,UAAW,IAGlC5kH,EAAMg3jB,cAAcpyc,UAAW,EAC/B5kH,EAAMk3jB,iBAAiBtyc,UAAW,GAEtC5kH,EAAMo9I,kBAENp9I,EAAMo9I,eAAe34I,KAAKzE,EAAM+2jB,YAAa/2jB,EAAMw3jB,oBAAqBx3jB,EAAMy3jB,uBAAwBz3jB,EAAM01jB,YAAa11jB,EAAMs2jB,WAAYt2jB,EAAM02jB,yBAA0B12jB,EAAMw2jB,qBAAsBx2jB,EAAMk2jB,WAAYl2jB,EAAMm2jB,WAAYn2jB,EAAM23jB,YAAa33jB,EAAMg3jB,cAAeh3jB,EAAMk3jB,kBACzRl3jB,EAAM60jB,aAAe,EACW,KAA5B70jB,EAAM01jB,YAAY14jB,MAClBgD,EAAM01jB,YAAYhwjB,SAGlB1F,EAAM23jB,YAAYjyjB,SAEtB1F,EAAM03jB,uBAOVz3jB,KAAK23jB,sBAAwB,SAAUt7jB,GAKnC,GAAsB,IAAlBA,EAAM8rB,QAAe,CACrB9rB,EAAMspB,iBACN,IAAIiyiB,OAAa18jB,EAEb08jB,EADAv7jB,EAAMghH,SAC+B,IAAvBt9G,EAAM60jB,cAAsBn3jB,EAAkBsC,EAAM60jB,cAC9D70jB,EAAMo9I,eAAe3gJ,OAAS,EAAIuD,EAAM60jB,aAAe,EAG7C70jB,EAAMo9I,eAAe3gJ,OAAS,IAAMuD,EAAM60jB,cAAgBn3jB,EAAkBsC,EAAM60jB,cAC5F,EAAI70jB,EAAM60jB,aAAe,GAE7B5zjB,EAAUjB,EAAMo9I,eAAey6a,IAC3B11jB,QACJlB,aAAmB+4e,kBACnB/4e,EAAQyE,SAEZ1F,EAAM60jB,aAAegD,EACjB52jB,aAAmB08M,eACnB39M,EAAM07hB,iBAAiBz6hB,QAG1B,GAAsB,KAAlB3E,EAAM8rB,SAEX,GAAI9rB,EAAM8K,SAAWpH,EAAM01jB,aAAep5jB,EAAM8K,SAAWpH,EAAM+2jB,YAAa,CAC1Ez6jB,EAAMspB,iBAEN,IAAe,KADX7T,EAAQ/R,EAAMo9I,eAAe5+I,QAAQlC,EAAM8K,SAC7B,CACd,IAAI6hG,EAAOjpG,EAAMo9I,eAAerrI,GAChCk3F,EAAKixB,QACLjxB,EAAK9mG,QACLnC,EAAM60jB,aAAe9ijB,SAI5B,IAAsB,KAAlBzV,EAAM8rB,SAAoC,KAAlB9rB,EAAM8rB,UACU,SAAzCpoB,EAAM+1jB,iBAAiBpxjB,MAAMosC,QAAoB,CACjD,IAAIh/B,OAAQ,EACR9Q,OAAU,EACQ,KAAlB3E,EAAM8rB,QACFpoB,EAAM60jB,aAAe,EACjB70jB,EAAM60jB,aAAe,EAAI70jB,EAAMo9I,eAAe3gJ,UAC9CwE,EAAUjB,EAAMo9I,eAAep9I,EAAM60jB,aAAe,IAC5C1yjB,QACRnC,EAAM60jB,aAAe70jB,EAAM60jB,aAAe,IAI9C9ijB,EAAS/R,EAAMo9I,eAAe3gJ,OAASuD,EAAM+1jB,iBAAiB17iB,SAAS5d,OAAUuD,EAAMyuM,QAAQm0D,aAAe,GAClG5iQ,EAAMo9I,eAAe3gJ,UAC7BwE,EAAUjB,EAAMo9I,eAAerrI,IACvB5P,QACRnC,EAAM60jB,aAAe9ijB,GAKzB/R,EAAM60jB,aAAe,IACrB9ijB,EAAQ/R,EAAM60jB,aAAe,GAC7B5zjB,EAAUjB,EAAMo9I,eAAerrI,IACvB5P,QACRnC,EAAM60jB,aAAe9ijB,KAUzC9R,KAAKg3jB,qBAAuB,WACNj3jB,EAAMw/hB,YAAxB,IACIs4B,EAAW93jB,EAAM01jB,YAAY14jB,MAC7Bk2jB,EAAclzjB,EAAM23jB,YAAY36jB,MAChCyxM,EAAUzuM,EAAMyuf,OAAOgV,MAAMxU,aAAawhE,kBAC9C,GAAiB,KAAbqH,IAAoBp6jB,EAAkBo6jB,IACF,MAAhC93jB,EAAMyuf,OAAOgV,MAAMvtb,UAAmB,CACtC,IAAI6hf,EAAgB/3jB,EAAMyuf,OAAOgV,MAAMvtb,UAAUjnD,KASjD,GARKjvB,EAAMyuf,OAAOgV,MAAMvtb,UAAU2hK,UAC1B73O,EAAMyuf,OAAOgV,MAAMvtb,UAAU8ge,UAC7Bh3iB,EAAMyuf,OAAOgV,MAAMvtb,UAAU0ne,cAAc59iB,EAAMyuf,OAAOgV,MAAMvtb,UAAU14E,OAAO,GAG/EwC,EAAMyuf,OAAOgV,MAAMvtb,UAAU0ne,cAAc59iB,EAAMyuf,OAAOgV,MAAMvtb,UAAUh3D,KAAK,IAGhFxhB,EAAkB+wM,IAAa/wM,EAAkB+wM,EAAQmiX,qBA6B1D5wjB,EAAM41jB,WAAWjxjB,MAAMosC,QAAU,QACjC/wC,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAYl6E,EAAMi1jB,yBA9Be,CAChF,IAAIj2jB,EAASyvM,EAAQmiX,oBAErB,GADA5wjB,EAAMyuf,OAAOgV,MAAMxU,aAAaojE,SAASrzjB,GACrCA,EAAOiwB,OAAS8oiB,EAAe,CAC/B,IAAI76jB,EAAUQ,EAAkBw1jB,GAAe,GAAKA,EACpDlzjB,EAAMyuf,OAAOgV,MAAMxU,aAAa/xf,QAAQA,EAAS8B,EAAQyvM,GACzD,IAAI9/L,EAAU3O,EAAMyuf,OAAOgV,MAAMxU,aAAa8jE,WAAWvC,cAAcsH,EAAU93jB,EAAMqwjB,YAEnFt+iB,EADe/R,EAAMyuf,OAAOv4a,UAAUh3D,IACjBqvhB,+BAEzBvuiB,EAAMyuf,OAAOgV,MAAMxU,aAAawhE,kBAAoBzwjB,EAAMyuf,OAAOgV,MAAMxU,aAAa8jE,WAAW9B,QAAQtijB,EAAS3O,EAAMqwjB,WAAYt+iB,GAClI/R,EAAMyuM,QAAUzuM,EAAMyuf,OAAOgV,MAAMxU,aAAawhE,kBAC3C/yjB,EAAkBsC,EAAMyuM,UAAa/wM,EAAkBsC,EAAMyuM,QAAQmiX,sBAItE5wjB,EAAM41jB,WAAWjxjB,MAAMosC,QAAU,QACjC/wC,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAYl6E,EAAMi1jB,sBAJjEj1jB,EAAMyuf,OAAOgV,MAAMxU,aAAaojE,SAASryjB,EAAMyuM,QAAQmiX,qBAM3D5wjB,EAAMyuf,OAAOgV,MAAM9hB,oBACdjkf,EAAkBsC,EAAMyuM,UAAYzuM,EAAMyuM,QAAQyjX,UAAUz1jB,OAAS,EACtEuD,EAAM21jB,uBAGN31jB,EAAM+1jB,iBAAiB9zjB,UAAY,OAe3DhC,KAAKk3jB,wBAA0B,WAC3Bn3jB,EAAMwyjB,aACNxyjB,EAAM+1jB,iBAAiBpxjB,MAAMosC,QAAU,OACvC/wC,EAAM41jB,WAAW3zjB,UAAY,IAMjChC,KAAKs2jB,wBAA0B,WAE3B,IAAIp1f,EAAe1gE,SAAS2uB,eAAepvB,EAAMyuf,OAAOgV,MAAMx/W,YAAc,2BAExEh1H,EAAOkyC,EAAankE,MACxB,GAAa,KAATiyB,EAAJ,CAGA,GAAIjvB,EAAMs2jB,WAAWvyjB,UAAUK,SAAS,6BAepC,OAdApE,EAAMs2jB,WAAWvyjB,UAAUM,IAAI,uBAC/BrE,EAAMs2jB,WAAWvyjB,UAAUS,OAAO,6BAClC28D,EAAankE,MAAQ,GACrBgD,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAY,cAC3Dl6E,EAAM81jB,gBAAgBnxjB,MAAMosC,QAAU,QACtC/wC,EAAM+1jB,iBAAiBpxjB,MAAMosC,QAAU,OACvC/wC,EAAMg4jB,SAASrzjB,MAAMosC,QAAU,OAC/B/wC,EAAMq3jB,cAAc1yjB,MAAMosC,QAAU,OACpC/wC,EAAM62jB,+BACN72jB,EAAMg2jB,oBACNh2jB,EAAM+1jB,iBAAiB9zjB,UAAY,GACnCjC,EAAMy1jB,yBACNz1jB,EAAMyuf,OAAOgV,MAAMxU,aAAayjE,4BAChC1yjB,EAAMyuf,OAAOs0C,qBAGb/iiB,EAAMs2jB,WAAWvyjB,UAAUK,SAAS,wBAA0B6qB,EAAKxyB,QAAU,IAC7EuD,EAAMs2jB,WAAWvyjB,UAAUM,IAAI,6BAC/BrE,EAAMs2jB,WAAWvyjB,UAAUS,OAAO,uBAClCxE,EAAM62jB,gCAEV72jB,EAAMy1jB,yBACNz1jB,EAAMyuf,OAAOgV,MAAMxU,aAAayjE,uBAChC,IAAIuF,EAAWj4jB,EAAMyuf,OAAOgV,MAAMxU,aAAa8jE,WAAWvC,cAAcvhiB,EAAMjvB,EAAMqwjB,YAEhFt+iB,EADe/R,EAAMyuf,OAAOv4a,UAAUh3D,IACjBqvhB,+BAEzB,GADAvuiB,EAAMyuM,QAAUzuM,EAAMyuf,OAAOgV,MAAMxU,aAAa8jE,WAAW9B,QAAQgH,EAAUj4jB,EAAMqwjB,WAAYt+iB,GAC1E,MAAjB/R,EAAMyuM,SAAmBzuM,EAAMyuM,QAAQhyM,OAAS,EAAG,CACnDuD,EAAM21jB,uBACN31jB,EAAM03jB,sBACN,IAAIQ,EAAyBl4jB,EAAMyuf,OAAOgV,MAAMlS,2BAA2B35b,aAAe,IAC1F53D,EAAM+1jB,iBAAiBpxjB,MAAMqR,OAASkijB,EAAyB,UAG/Dl4jB,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAY,cAC3Dl6E,EAAM81jB,gBAAgBnxjB,MAAMosC,QAAU,QACtC/wC,EAAM+1jB,iBAAiBpxjB,MAAMosC,QAAU,OACvC/wC,EAAMg2jB,oBACNh2jB,EAAM+1jB,iBAAiB9zjB,UAAY,KAO3ChC,KAAKw2jB,8BAAgC,WACjC,GAAuF,MAAnFh2jB,SAAS2uB,eAAepvB,EAAMyuf,OAAOgV,MAAMx/W,YAAc,wBACyC,SAAlGxjJ,SAAS2uB,eAAepvB,EAAMyuf,OAAOgV,MAAMx/W,YAAc,uBAAuBt/I,MAAMosC,QAAoB,CAC1G,GAAI/wC,EAAMyuM,QAAQm0D,aAAe5iQ,EAAMyuM,QAAQhyM,OAAS,EAAG,CACvDuD,EAAMyuM,QAAQm0D,aAAe5iQ,EAAMyuM,QAAQm0D,aAAe,EAC1D,IAAIu1T,EAAiBn4jB,EAAMyuM,QAAQyjX,UAAUlyjB,EAAMyuM,QAAQm0D,cAE3D5iQ,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAY,UAAY,KAAOl6E,EAAMyuM,QAAQm0D,aAAe,GAAK,IAAM5iQ,EAAM61jB,YAAY37e,YAAY,MAAQ,IAAMl6E,EAAM+1jB,iBAAiB17iB,SAAS5d,OAClM,IAAK,IAAIN,EAAI,EAAGA,EAAI6D,EAAM+1jB,iBAAiB17iB,SAAS5d,OAAQN,IAAK,CAC7D,IAAI8sG,EAAOjpG,EAAM+1jB,iBAAiB17iB,SAASle,GACvC8sG,EAAKllG,UAAUK,SAAS,6BACxB6kG,EAAKllG,UAAUS,OAAO,2BACtBykG,EAAK5uF,SAAS,GAAGtW,UAAUS,OAAO,4BAClCykG,EAAKllG,UAAUM,IAAI,4BAG3B,IAAI8iN,EAAcnnN,EAAM+1jB,iBAAiB17iB,SAASra,EAAMyuM,QAAQm0D,cAC5Dz7C,EAAYpjN,UAAUK,SAAS,6BAC/B+iN,EAAYpjN,UAAUS,OAAO,2BAC7B2iN,EAAYpjN,UAAUM,IAAI,2BAC1B8iN,EAAY9sM,SAAS,GAAGtW,UAAUM,IAAI,4BACtCrE,EAAM07hB,iBAAiBv0U,IAE3BnnN,EAAMyuf,OAAOgV,MAAMxU,aAAaojE,SAAS8F,GACzCn4jB,EAAMyuf,OAAOgV,MAAMxU,aAAa1gK,UAAUvuV,EAAMyuM,aAE/C,CACG0pX,EAAiBn4jB,EAAMyuM,QAAQyjX,UAAU,GAC7ClyjB,EAAMyuM,QAAQm0D,aAAe,EAE7B5iQ,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAY,UAAY,KAAOl6E,EAAMyuM,QAAQm0D,aAAe,GAAK,IAAM5iQ,EAAM61jB,YAAY37e,YAAY,MAAQ,IAAMl6E,EAAM+1jB,iBAAiB17iB,SAAS5d,OAClM,IAAK,IAAIknB,EAAI,EAAGA,EAAI3jB,EAAM+1jB,iBAAiB17iB,SAAS5d,OAAQknB,IAAK,CAC7D,IAAIkxR,EAAQ70S,EAAM+1jB,iBAAiB17iB,SAASsJ,GACxCkxR,EAAM9wS,UAAUK,SAAS,6BACzBywS,EAAM9wS,UAAUS,OAAO,2BACvBqwS,EAAMx6R,SAAS,GAAGtW,UAAUS,OAAO,4BACnCqwS,EAAM9wS,UAAUM,IAAI,4BAG5B,IAAI+zjB,EAAkBp4jB,EAAM+1jB,iBAAiB17iB,SAASra,EAAMyuM,QAAQm0D,cAChEw1T,EAAgBr0jB,UAAUK,SAAS,6BACnCg0jB,EAAgBr0jB,UAAUS,OAAO,2BACjC4zjB,EAAgBr0jB,UAAUM,IAAI,2BAC9B+zjB,EAAgB/9iB,SAAS,GAAGtW,UAAUM,IAAI,4BAC1CrE,EAAM07hB,iBAAiB08B,IAE3Bp4jB,EAAMyuf,OAAOgV,MAAMxU,aAAaojE,SAAS8F,GACzCn4jB,EAAMyuf,OAAOgV,MAAMxU,aAAa1gK,UAAUvuV,EAAMyuM,SAEpDzuM,EAAM60jB,aAAe70jB,EAAMo9I,eAAe5+I,QAAQwB,EAAMw2jB,wBAOhEv2jB,KAAK02jB,kCAAoC,WACrC,GAAuF,MAAnFl2jB,SAAS2uB,eAAepvB,EAAMyuf,OAAOgV,MAAMx/W,YAAc,wBACyC,SAAlGxjJ,SAAS2uB,eAAepvB,EAAMyuf,OAAOgV,MAAMx/W,YAAc,uBAAuBt/I,MAAMosC,QAAoB,CAC1G,GAAmC,IAA/B/wC,EAAMyuM,QAAQm0D,aAAoB,CAClC5iQ,EAAMyuM,QAAQm0D,aAAe5iQ,EAAMyuM,QAAQhyM,OAAS,EAEpDuD,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAY,UAAY,IAAOl6E,EAAMyuM,QAAc,OAAI,IAAMzuM,EAAM61jB,YAAY37e,YAAY,MAAQ,IAAMl6E,EAAM+1jB,iBAAiB17iB,SAAS5d,OACxL,IAAK,IAAIsV,EAAQ,EAAGA,EAAQ/R,EAAM+1jB,iBAAiB17iB,SAAS5d,OAAQsV,IAAS,EACrEk3F,EAAOjpG,EAAM+1jB,iBAAiB17iB,SAAStI,IAClChO,UAAUK,SAAS,6BACxB6kG,EAAKllG,UAAUS,OAAO,2BACtBykG,EAAK5uF,SAAS,GAAGtW,UAAUS,OAAO,4BAClCykG,EAAKllG,UAAUM,IAAI,4BAG3B,IAAI8oJ,EAAYntJ,EAAM+1jB,iBAAiB17iB,SAASra,EAAMyuM,QAAQm0D,cAC1Dz1G,EAAUppJ,UAAUK,SAAS,6BAC7B+oJ,EAAUppJ,UAAUS,OAAO,2BAC3B2oJ,EAAUppJ,UAAUM,IAAI,2BACxB8oJ,EAAU9yI,SAAS,GAAGtW,UAAUM,IAAI,4BACpCrE,EAAM07hB,iBAAiBvuY,IAE3B,IAAIgra,EAAiBn4jB,EAAMyuM,QAAQyjX,UAAUlyjB,EAAMyuM,QAAQm0D,cAC3D5iQ,EAAMyuf,OAAOgV,MAAMxU,aAAaojE,SAAS8F,GACzCn4jB,EAAMyuf,OAAOgV,MAAMxU,aAAa1gK,UAAUvuV,EAAMyuM,aAE/C,CAEDzuM,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAY,UAAY,IAAOl6E,EAAMyuM,QAAoB,aAAI,IAAMzuM,EAAM61jB,YAAY37e,YAAY,MAAQ,IAAMl6E,EAAM+1jB,iBAAiB17iB,SAAS5d,OAC9LuD,EAAMyuM,QAAQm0D,aAAe5iQ,EAAMyuM,QAAQm0D,aAAe,EAC1D,IAAK,IAAIj/O,EAAI,EAAGA,EAAI3jB,EAAM+1jB,iBAAiB17iB,SAAS5d,OAAQknB,IAAK,CAC7D,IAAIslF,GAAAA,EAAOjpG,EAAM+1jB,iBAAiB17iB,SAASsJ,IAClC5f,UAAUK,SAAS,6BACxB6kG,EAAKllG,UAAUS,OAAO,2BACtBykG,EAAK5uF,SAAS,GAAGtW,UAAUS,OAAO,4BAClCykG,EAAKllG,UAAUM,IAAI,4BAG3B,IAAIg0jB,EAAer4jB,EAAM+1jB,iBAAiB17iB,SAASra,EAAMyuM,QAAQm0D,cAC7Dy1T,EAAat0jB,UAAUK,SAAS,6BAChCi0jB,EAAat0jB,UAAUS,OAAO,2BAC9B6zjB,EAAat0jB,UAAUM,IAAI,2BAC3Bg0jB,EAAah+iB,SAAS,GAAGtW,UAAUM,IAAI,4BACvCrE,EAAM07hB,iBAAiB28B,IAEvBF,EAAiBn4jB,EAAMyuM,QAAQyjX,UAAUlyjB,EAAMyuM,QAAQm0D,cAC3D5iQ,EAAMyuf,OAAOgV,MAAMxU,aAAaojE,SAAS8F,GACzCn4jB,EAAMyuf,OAAOgV,MAAMxU,aAAa1gK,UAAUvuV,EAAMyuM,SAEpDzuM,EAAM60jB,aAAe70jB,EAAMo9I,eAAe5+I,QAAQwB,EAAM02jB,4BAQhEz2jB,KAAK22jB,UAAY,SAAUt6jB,GACvB,IAAIotB,EAAOptB,EAAMkhH,OAASlhH,EAAM8rB,QACnB,KAATsB,GAAiC,IAAlBptB,EAAM8rB,SAAmC,KAAlB9rB,EAAM8rB,SAC5C9rB,EAAMspB,iBACN5lB,EAAMu3jB,QAAQ5yjB,MAAMqR,OAAS,GAC7BhW,EAAM68hB,qBAEQ,IAATnzgB,GAAkD,IAAnC1pB,EAAM01jB,YAAY14jB,MAAMP,OAC5CuD,EAAM81jB,gBAAgBnxjB,MAAMosC,QAAU,QAEf,IAAlBz0C,EAAM8rB,SAAmC,KAAlB9rB,EAAM8rB,SAAoC,KAAlB9rB,EAAM8rB,SAC1DpoB,EAAMyuf,OAAOgV,MAAMxU,aAAayjE,uBAChC1yjB,EAAMy1jB,yBACNz1jB,EAAMyuf,OAAOs0C,qBACb/iiB,EAAM+1jB,iBAAiBpxjB,MAAMosC,QAAU,OACvC/wC,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAY,cAC3Dl6E,EAAM81jB,gBAAgBnxjB,MAAMosC,QAAU,OACtC/wC,EAAMg2jB,oBACNh2jB,EAAM+1jB,iBAAiB9zjB,UAAY,GAC/BjC,EAAMs2jB,WAAWvyjB,UAAUK,SAAS,+BACpCpE,EAAMs2jB,WAAWvyjB,UAAUM,IAAI,uBAC/BrE,EAAMs2jB,WAAWvyjB,UAAUS,OAAO,+BAGxB,KAATklB,GAAiC,KAAlBptB,EAAM8rB,SAC1BpoB,EAAM8vf,qBAAoB,IAOlC7vf,KAAKiC,MAAQ,WACTlC,EAAMg2jB,oBACNh2jB,EAAM8vf,qBAAoB,GAC1B9vf,EAAM+1jB,iBAAiB9zjB,UAAY,GACnCjC,EAAM60jB,aAAe,EACrB70jB,EAAM80jB,eAAgB,GAO1B70jB,KAAK62jB,qBAAuB,SAAU52jB,GAIlC,IAAK,IAHDo4jB,EAAcp4jB,EAAKkH,OACnBnG,EAAUjB,EAAM+1jB,iBAAiB17iB,SACjCtI,EAAQ,EACH5V,EAAI,EAAGA,EAAI8E,EAAQxE,OAAQN,IAAK,CACrC,IAAIo8jB,EAASt3jB,EAAQ9E,GACjBo8jB,EAAOx0jB,UAAUK,SAAS,6BAC1Bm0jB,EAAOx0jB,UAAUS,OAAO,2BACxB+zjB,EAAOl+iB,SAAS,GAAGtW,UAAUS,OAAO,4BACpC+zjB,EAAOx0jB,UAAUM,IAAI,4BAIxB,IADD4kG,EACJ,IAAS9sG,EAAI,EAAGA,EAAI8E,EAAQxE,OAAQN,IAC5Bm8jB,IAAgBr3jB,EAAQ9E,KACxB4V,EAAQ5V,GACR8sG,EAAOhoG,EAAQ9E,IACN4H,UAAUK,SAAS,6BACxB6kG,EAAKllG,UAAUS,OAAO,2BACtBykG,EAAKllG,UAAUM,IAAI,2BACnB4kG,EAAK5uF,SAAS,GAAGtW,UAAUM,IAAI,4BAC/BrE,EAAM60jB,aAAe70jB,EAAMo9I,eAAe5+I,QAAQyqG,KAI9D,IAAIkvd,EAAiBn4jB,EAAMyuM,QAAQyjX,UAAUngjB,GAC7C/R,EAAMyuM,QAAQm0D,aAAe7wP,EAE7B/R,EAAM41jB,WAAW3zjB,UAAYjC,EAAM61jB,YAAY37e,YAAY,UAAY,KAAOnoE,EAAQ,GAAK,IAAM/R,EAAM61jB,YAAY37e,YAAY,MAAQ,IAAMl6E,EAAM+1jB,iBAAiB17iB,SAAS5d,OAC7KuD,EAAMyuf,OAAOgV,MAAMxU,aAAaojE,SAAS8F,GACzCn4jB,EAAMyuf,OAAOgV,MAAMxU,aAAa1gK,UAAUvuV,EAAMyuM,SAChDxlG,EAAK9mG,SAETlC,KAAKwuf,OAAS6lE,EA8flB,OAzfA/+D,EAAYl6f,UAAU2mC,cAAgB,WAClC,MAAO,eAQXuzd,EAAYl6f,UAAU00f,gBAAkB,SAAU8lE,GACjC51jB,KAAKwuf,OAClBxuf,KAAK41jB,YAAcA,EACnB51jB,KAAKu/hB,YAAcp+hB,EAAc,OAASkC,UAAW,UAAWE,OAAQ,kBACxEvD,KAAKu/hB,YAAY9iiB,iBAAiB,UAAWuD,KAAK23jB,uBAClD33jB,KAAKu6e,UAAYp5e,EAAc,OAC3BkC,UAAWrD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,4BAC3ChiJ,UAAW4zjB,EAAY37e,YAAYj6E,KAAKu0jB,cAE5Cv0jB,KAAKu/hB,YAAY59hB,YAAY3B,KAAKu6e,WAElCv6e,KAAK82jB,YAAc31jB,EAAc,UAAYkC,UAAW,gEAAiEC,GAAI,UAC7HtD,KAAKu/hB,YAAY59hB,YAAY3B,KAAK82jB,aAClC,IAAIyB,EAAYp3jB,EAAc,QAAUkC,UAAW,0CACnDrD,KAAK82jB,YAAYn1jB,YAAY42jB,GAC7Bv4jB,KAAKm9I,eAAe34I,KAAKxE,KAAK82jB,aAC9B92jB,KAAKw4jB,QAAUr3jB,EAAc,OAASmC,GAAItD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,cAAe3gJ,UAAW,gBACpGrD,KAAKu/hB,YAAY59hB,YAAY3B,KAAKw4jB,SAClC,IAAIC,EAAYt3jB,EAAc,OAASkC,UAAW,iBAClDrD,KAAKw4jB,QAAQ72jB,YAAY82jB,GACzBz4jB,KAAK04jB,cAAgBv3jB,EAAc,OAASa,UAAW4zjB,EAAY37e,YAAYj6E,KAAK+0jB,gBACpF/0jB,KAAKm9I,eAAe34I,KAAKxE,KAAKu3jB,qBAC9BkB,EAAU92jB,YAAY3B,KAAK04jB,eAC3B14jB,KAAK24jB,iBAAmBx3jB,EAAc,OAASa,UAAW4zjB,EAAY37e,YAAYj6E,KAAK80jB,mBACvF90jB,KAAKm9I,eAAe34I,KAAKxE,KAAKw3jB,wBAC9BiB,EAAU92jB,YAAY3B,KAAK24jB,kBAC3B,IAAIC,EAAaz3jB,EAAc,OAASkC,UAAW,cAC/Cw1jB,EAAiB13jB,EAAc,OAASmC,GAAI,mBAChDs1jB,EAAWj3jB,YAAYk3jB,GACvB74jB,KAAK84jB,kBAAoB33jB,EAAc,OAASkC,UAAW,4BAC3DrD,KAAK+4jB,uBAAyB53jB,EAAc,OAASkC,UAAW,sCAChErD,KAAK84jB,kBAAkBn3jB,YAAY3B,KAAK+4jB,wBAExC/4jB,KAAKy1jB,YAAct0jB,EAAc,SAAWkC,UAAW,4BAA6BC,GAAItD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,0BAA2BvgJ,OAASwjB,YAAa,cAAgB1jB,OAAQ,oBACjMvD,KAAK+4jB,uBAAuBp3jB,YAAY3B,KAAKy1jB,aAC7Cz1jB,KAAKq2jB,WAAal1jB,EAAc,QAC5BkC,UAAW,6DACXC,GAAItD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,iBAExChkJ,KAAKq2jB,WAAWzrc,SAAW,EAC3B5qH,KAAK+4jB,uBAAuBp3jB,YAAY3B,KAAKq2jB,YAC7Cr2jB,KAAKm9I,eAAe34I,KAAKxE,KAAKq2jB,YAE9Br2jB,KAAKy2jB,yBAA2Bt1jB,EAAc,QAAUkC,UAAW,2FACnErD,KAAKy2jB,yBAAyB7rc,SAAW,EACzC5qH,KAAK+4jB,uBAAuBp3jB,YAAY3B,KAAKy2jB,0BAC7Cz2jB,KAAKm9I,eAAe34I,KAAKxE,KAAKy2jB,0BAE9Bz2jB,KAAKu2jB,qBAAuBp1jB,EAAc,QAAUkC,UAAW,+FAC/DrD,KAAKu2jB,qBAAqB3rc,SAAW,EACrC5qH,KAAK+4jB,uBAAuBp3jB,YAAY3B,KAAKu2jB,sBAC7Cv2jB,KAAKm9I,eAAe34I,KAAKxE,KAAKu2jB,sBAC9B,IAAIr1jB,EAAMC,EAAc,OAASkC,UAAW,sBAC5CrD,KAAKi2jB,WAAa90jB,EAAc,SAC5BsC,OAASiD,KAAM,YACfpD,GAAItD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,eAExC9iJ,EAAIS,YAAY3B,KAAKi2jB,YACrBj2jB,KAAK6oE,UAAY,IAAIy8C,IAAWjyG,MAAO,aAAcb,SAAS,EAAOiO,OAAQzgB,KAAKm2jB,cAClFn2jB,KAAK6oE,UAAUh4B,SAAS7wC,KAAKi2jB,YAC7Bj2jB,KAAKm9I,eAAe34I,KAAKxE,KAAKi2jB,YAC9Bj2jB,KAAKi2jB,WAAWrrc,SAAW,EAC3B5qH,KAAKk2jB,WAAa/0jB,EAAc,SAC5BsC,OAASiD,KAAM,YACfpD,GAAItD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,eAExC9iJ,EAAIS,YAAY3B,KAAKk2jB,YACrBl2jB,KAAKs0jB,UAAY,IAAIhvc,IAAWjyG,MAAO,cAAeb,SAAS,EAAOiO,OAAQzgB,KAAKg2jB,mBACnFh2jB,KAAKs0jB,UAAUzjhB,SAAS7wC,KAAKk2jB,YAC7Bl2jB,KAAKm9I,eAAe34I,KAAKxE,KAAKk2jB,YAC9Bl2jB,KAAKk2jB,WAAWtrc,SAAW,EAC3B5qH,KAAK84jB,kBAAkBn3jB,YAAYT,GACnC,IAAI83jB,EAAoB73jB,EAAc,OACtCy3jB,EAAWj3jB,YAAYq3jB,GACvBh5jB,KAAKq3jB,qBAAuBl2jB,EAAc,OAASkC,UAAW,+BAAgCE,OAAQ,kBACtGq1jB,EAAWj3jB,YAAY3B,KAAKq3jB,sBAC5Br3jB,KAAK84jB,kBAAkBn3jB,YAAY3B,KAAKq3jB,sBACxCr3jB,KAAKi5jB,oBACLj5jB,KAAKs3jB,QAAUn2jB,EAAc,OAASkC,UAAW,UAAWE,OAAQ,gCACpEs1jB,EAAel3jB,YAAY3B,KAAK84jB,mBAChC94jB,KAAK61jB,gBAAkB10jB,EAAc,OAASoC,OAAQ,2BAA4BF,UAAW,6BAC7FrD,KAAKs3jB,QAAQ31jB,YAAY3B,KAAK61jB,iBAE9B71jB,KAAK21jB,WAAax0jB,EAAc,OAASkC,UAAWrD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,0BAA2BhiJ,UAAWhC,KAAK41jB,YAAY37e,YAAYj6E,KAAKy0jB,gBAAiBnxjB,GAAItD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,mBACjNhkJ,KAAK61jB,gBAAgBl0jB,YAAY3B,KAAK21jB,YAEtC31jB,KAAK81jB,iBAAmB30jB,EAAc,OAASmC,GAAItD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,sBAAuBzgJ,OAAQ,4EAA6EF,UAAW,2BAC1MrD,KAAKs3jB,QAAQ31jB,YAAY3B,KAAK81jB,kBAC9B91jB,KAAK84jB,kBAAkBn3jB,YAAY3B,KAAKs3jB,SACxCt3jB,KAAKw4jB,QAAQ72jB,YAAYi3jB,GACzB54jB,KAAKi1jB,YAAc,IAAI/5L,IAAMl6O,SAAUhhJ,KAAKk1jB,kBAC5Cl1jB,KAAKi1jB,YAAYpkhB,SAAS7wC,KAAKw4jB,SAC/B,IAAIhpO,EAAaxvV,KAAKi1jB,YAAYj0jB,QAAQ0M,uBAAuB,yBAAyB,GAC1F1N,KAAKu3jB,oBAAsB/nO,EAAW9hV,uBAAuB,cAAc,GAC3E1N,KAAKu3jB,oBAAoBzzjB,UAAUM,IAAI,2BACvCpE,KAAKu3jB,oBAAoB3sc,SAAW,EACpC,IAAIsuc,EAAgBl5jB,KAAKi1jB,YAAYj0jB,QAAQ0M,uBAAuB,yBAAyB,GAC7F1N,KAAKw3jB,uBAAyB0B,EAAcxrjB,uBAAuB,cAAc,GACjF1N,KAAKw3jB,uBAAuB1zjB,UAAUM,IAAI,8BAC1CpE,KAAKw3jB,uBAAuB5sc,SAAW,EACvC5qH,KAAKo2jB,gBAKT9gE,EAAYl6f,UAAU69jB,kBAAoB,WACtCj5jB,KAAKm3jB,WAAah2jB,EAAc,OAChCnB,KAAKq3jB,qBAAqB11jB,YAAY3B,KAAKm3jB,YAC3Cn3jB,KAAK03jB,YAAcv2jB,EAAc,SAC7BkC,UAAW,8BAA+BE,OAAQ,kBAClDE,OAASwjB,YAAa,kBAE1BjnB,KAAKm3jB,WAAWx1jB,YAAY3B,KAAK03jB,aACjC,IAAIyB,EAAmBh4jB,EAAc,OAASoC,OAAQ,oBAAqBF,UAAW,uBACtFrD,KAAKm3jB,WAAWx1jB,YAAYw3jB,GAC5Bn5jB,KAAK+2jB,cAAgB51jB,EAAc,UAC/BkC,UAAW,mCACXE,OAAQ,oCACRvB,UAAWhC,KAAK41jB,YAAY37e,YAAYj6E,KAAK00jB,qBAEjDyE,EAAiBx3jB,YAAY3B,KAAK+2jB,eAClC/2jB,KAAKi3jB,iBAAmB91jB,EAAc,UAClCkC,UAAW,sCACXE,OAAQ,kBACRvB,UAAWhC,KAAK41jB,YAAY37e,YAAYj6E,KAAK20jB,wBAEjDwE,EAAiBx3jB,YAAY3B,KAAKi3jB,kBAClCj3jB,KAAK+3jB,SAAW52jB,EAAc,OAASoC,OAAQ,mCAC/CvD,KAAKm3jB,WAAWx1jB,YAAY3B,KAAK+3jB,UACjC,IAAIqB,EAAYj4jB,EAAc,OAASkC,UAAW,8BAClDrD,KAAKm3jB,WAAWx1jB,YAAYy3jB,GAC5Bp5jB,KAAKo3jB,cAAgBj2jB,EAAc,OAASoC,OAAQ,kBACpDvD,KAAKm3jB,WAAWx1jB,YAAY3B,KAAKo3jB,gBAErC9hE,EAAYl6f,UAAUs6jB,qBAAuB,WACzC11jB,KAAKwuf,OAAOgV,MAAMxU,aAAaojE,SAASpyjB,KAAKwuM,QAAQyjX,UAAUjyjB,KAAKwuM,QAAQm0D,eAC5E3iQ,KAAKwuf,OAAOgV,MAAMxU,aAAa1gK,UAAUtuV,KAAKwuM,SAC9CxuM,KAAKwuf,OAAOgV,MAAMxU,aAAa8kE,kBAAkB9zjB,KAAKwuM,SACtDxuM,KAAK81jB,iBAAiBpxjB,MAAMosC,QAAU,QACtC9wC,KAAK61jB,gBAAgBnxjB,MAAMosC,QAAU,QAGrC,IAAK,IAFD8jQ,EAAQ50S,KAAKwuf,OAAOgV,MAAM9hB,gBAC1B1yd,EAAO,GACF9yB,EAAI,EAAGA,EAAI04S,EAAMp4S,OAAQN,IAC9B8yB,GAAQ4lR,EAAM14S,GAElB8D,KAAK+1jB,oBACL/1jB,KAAK81jB,iBAAiB9zjB,UAAYgtB,EAClC,IAAS9yB,EAAI,EAAGA,EAAI8D,KAAK81jB,iBAAiB17iB,SAAS5d,OAAQN,IACvD8D,KAAKm9I,eAAe34I,KAAKxE,KAAK81jB,iBAAiB17iB,SAASle,IAE5D,IAAIm9jB,EAAoBr5jB,KAAKwuM,QAAQm0D,aAErC3iQ,KAAK21jB,WAAW3zjB,UAAYhC,KAAK41jB,YAAY37e,YAAY,UAAY,KAAOo/e,EAAoB,GAAK,IAAMr5jB,KAAK41jB,YAAY37e,YAAY,MAAQ,IAAMj6E,KAAK81jB,iBAAiB17iB,SAAS5d,OACrL,IAAI0qN,EAAclnN,KAAK81jB,iBAAiB17iB,SAASi/iB,GAC7CnyW,EAAYpjN,UAAUK,SAAS,6BAC/B+iN,EAAYpjN,UAAUS,OAAO,2BAC7B2iN,EAAYpjN,UAAUM,IAAI,2BAC1B8iN,EAAY9sM,SAAS,GAAGtW,UAAUM,IAAI,4BACtCpE,KAAKy7hB,iBAAiBv0U,KAO9BouS,EAAYl6f,UAAUwhiB,kBAAoB,WAEtC,IAAI17d,EAAe1gE,SAAS2uB,eAAenvB,KAAKwuf,OAAOgV,MAAMx/W,YAAc,2BAC3E9iF,EAAaovE,OACb,IAAIthH,EAAOkyC,EAAankE,MACxB,GAAa,KAATiyB,EAAJ,CAGIA,EAAKxyB,QAAU,GAAKwD,KAAKq2jB,WAAWvyjB,UAAUK,SAAS,yBACvDnE,KAAKq2jB,WAAWvyjB,UAAUM,IAAI,6BAC9BpE,KAAKq2jB,WAAWvyjB,UAAUS,OAAO,wBAErC,IAAI0zjB,EAAyBj4jB,KAAKwuf,OAAOgV,MAAMlS,2BAA2B35b,aAAe,IACzF33D,KAAKw1jB,yBACLx1jB,KAAKwuf,OAAOgV,MAAMxU,aAAayjE,uBAC/B,IAAI/jjB,EAAU1O,KAAKwuf,OAAOgV,MAAMxU,aAAa8jE,WAAWvC,cAAcvhiB,EAAMhvB,KAAKowjB,YAE7Et+iB,EADe9R,KAAKwuf,OAAOv4a,UAAUh3D,IAChBqvhB,+BACzBtuiB,KAAKwuM,QAAUxuM,KAAKwuf,OAAOgV,MAAMxU,aAAa8jE,WAAW9B,QAAQtijB,EAAS1O,KAAKowjB,WAAYt+iB,GAC3F,IAAI08L,EAAUxuM,KAAKwuM,QAInB,GAHI/wM,EAAkB+wM,IAClBxuM,KAAKwuf,OAAOs0C,qBAED,MAAXt0V,GAAmBA,EAAQhyM,OAAS,EAAG,EAC8B,IAAhEwD,KAAKm9I,eAAe5+I,QAAQyB,KAAKy2jB,2BAAqCz2jB,KAAK60jB,eAC5E70jB,KAAKm9I,eAAe34I,KAAKxE,KAAKy2jB,2BAE+B,IAA5Dz2jB,KAAKm9I,eAAe5+I,QAAQyB,KAAKu2jB,uBAAiCv2jB,KAAK60jB,eACxE70jB,KAAKm9I,eAAe34I,KAAKxE,KAAKu2jB,sBAElCv2jB,KAAKwuf,OAAOgV,MAAMxU,aAAaojE,SAASpyjB,KAAKwuM,QAAQyjX,UAAUjyjB,KAAKwuM,QAAQm0D,eAC5E3iQ,KAAKwuf,OAAOgV,MAAMxU,aAAa1gK,UAAU9/I,GACzCxuM,KAAKwuf,OAAOgV,MAAMxU,aAAa8kE,kBAAkBtlX,GAEjDxuM,KAAK81jB,iBAAiBpxjB,MAAMosC,QAAU,QACtC9wC,KAAK81jB,iBAAiBpxjB,MAAMqR,OAASkijB,EAAyB,KAC9Dj4jB,KAAK61jB,gBAAgBnxjB,MAAMosC,QAAU,QACrC,IAAIk4D,EAAOhpG,KAAKwuf,OAAOgV,MAAM9hB,gBACzB5nd,EAAS,GACb95B,KAAK+1jB,oBACL/1jB,KAAK81jB,iBAAiB9zjB,UAAY,GAClC,IAAK,IAAI9F,EAAI,EAAGA,EAAI8sG,EAAKxsG,OAAQN,IAC7B49B,GAAUkvE,EAAK9sG,GAEnB8D,KAAK81jB,iBAAiB9zjB,UAAY83B,EAClC,IAAS59B,EAAI,EAAGA,EAAI8D,KAAK81jB,iBAAiB17iB,SAAS5d,OAAQN,IACvD8D,KAAKm9I,eAAe34I,KAAKxE,KAAK81jB,iBAAiB17iB,SAASle,IAEhD8D,KAAK81jB,iBAAiB17iB,SAAlC,IACIuoP,EAAe3iQ,KAAKwuM,QAAQm0D,aAEhC3iQ,KAAK21jB,WAAW3zjB,UAAYhC,KAAK41jB,YAAY37e,YAAY,UAAY,KAAO0oL,EAAe,GAAK,IAAM3iQ,KAAK41jB,YAAY37e,YAAY,MAAQ,IAAMj6E,KAAK81jB,iBAAiB17iB,SAAS5d,OAChL,IAAI0qN,EAAclnN,KAAK81jB,iBAAiB17iB,SAASuoP,GAC7Cz7C,EAAYpjN,UAAUK,SAAS,6BAC/B+iN,EAAYpjN,UAAUS,OAAO,2BAC7B2iN,EAAYpjN,UAAUM,IAAI,2BAC1B8iN,EAAY9sM,SAAS,GAAGtW,UAAUM,IAAI,6BAE1CpE,KAAKu2jB,qBAAqBr0jB,QAC1BlC,KAAK40jB,aAAe,EACpB50jB,KAAKy3jB,2BAMLz3jB,KAAK21jB,WAAW3zjB,UAAYhC,KAAK41jB,YAAY37e,YAAY,cACzDj6E,KAAK61jB,gBAAgBnxjB,MAAMosC,QAAU,QACrC9wC,KAAK81jB,iBAAiBpxjB,MAAMosC,QAAU,OACtC9wC,KAAK+1jB,oBACL/1jB,KAAK81jB,iBAAiB9zjB,UAAY,KAG1Cszf,EAAYl6f,UAAUq8jB,oBAAsB,YACnCz3jB,KAAK60jB,eAAiB70jB,KAAK21jB,WAAW7xjB,UAAUK,SAAS,gBAC1DnE,KAAK21jB,WAAW7xjB,UAAUM,IAAI,8BAC9BpE,KAAK21jB,WAAW7xjB,UAAUS,OAAO,gBAE5BvE,KAAK60jB,eAAiB70jB,KAAK21jB,WAAW7xjB,UAAUK,SAAS,gCAC9DnE,KAAK21jB,WAAW7xjB,UAAUM,IAAI,eAC9BpE,KAAK21jB,WAAW7xjB,UAAUS,OAAO,gCAOzC+wf,EAAYl6f,UAAUm3jB,WAAa,WACbvyjB,KAAKu/hB,YAAvB,IACIs4B,EAAW73jB,KAAKy1jB,YAAY14jB,MAC5Bk2jB,EAAcjzjB,KAAK03jB,YAAY36jB,MACnC,GAAiB,KAAb86jB,IAAoBp6jB,EAAkBo6jB,GAAW,CACjD,IAAInpjB,EAAU1O,KAAKwuf,OAAOgV,MAAMxU,aAAa8jE,WAAWvC,cAAcsH,EAAU73jB,KAAKowjB,YAEjFt+iB,EADe9R,KAAKwuf,OAAOv4a,UAAUh3D,IAChBqvhB,+BACrB9/V,EAAUxuM,KAAKwuf,OAAOgV,MAAMxU,aAAa8jE,WAAW9B,QAAQtijB,EAAS1O,KAAKowjB,WAAYt+iB,GACtF7U,EAAUQ,EAAkBw1jB,GAAe,GAAKA,EAChD/ziB,EAAQzhB,EAAkB+wM,GAAW,EAAIA,EAAQhyM,OACrDwD,KAAKwuf,OAAOgV,MAAMxU,aAAaujE,WAAWt1jB,EAASuxM,GACnDxuM,KAAK+3jB,SAASrzjB,MAAMosC,QAAU,QAC9B9wC,KAAK+3jB,SAAS/1jB,UAAYhC,KAAK41jB,YAAY37e,YAAY,YAAc,IACrEj6E,KAAKo3jB,cAAc1yjB,MAAMosC,QAAU,QAEnC9wC,KAAKo3jB,cAAcp1jB,UAAYhC,KAAK41jB,YAAY37e,YAAY,mBAAqB,IAAM/6D,EAAQ,IAAMlf,KAAK41jB,YAAY37e,YAAY,aAAe,IAAMj6E,KAAK41jB,YAAY37e,YAAY,MAAQ,KAAO49e,EAAW,KAAO73jB,KAAK41jB,YAAY37e,YAAY,QAAU,KAAOg5e,EAAc,OAQzR39D,EAAYl6f,UAAUqgiB,iBAAmB,SAAUzyb,GAC/C,IACIt8F,EADAwmB,EAAO81E,EAAKp9F,wBAEZsnB,EAAKxmB,IAAM,GACXA,EAAMwmB,EAAKxmB,IAAMs8F,EAAK30F,cAAczI,wBAAwBc,IACvDs8F,EAAK30F,cAAcsjD,aAAejrD,GAAQs8F,EAAKrxC,cAC5CtrD,KAAKqmB,KAAKhmB,EAAMs8F,EAAKrxC,gBAAkBqxC,EAAK30F,cAAck7X,eAC1DvmS,EAAK30F,cAAclI,UAAYO,GAEnCs8F,EAAK30F,cAAclI,UAAY68F,EAAK30F,cAAclI,UAAa68F,EAAK30F,cAAcsjD,aAAe,IAAO,IAEnGjrD,EAAM,IACXs8F,EAAK30F,cAAclI,UAAY68F,EAAK30F,cAAclI,UAAa68F,EAAK30F,cAAcsjD,aAAe,IAAO,KAI5GqxC,EAAK30F,cAAclI,UAAY,GAOvCmpf,EAAYl6f,UAAU26jB,kBAAoB,WACtC,IAAK,IAAI75jB,EAAI,EAAGA,EAAI8D,KAAK81jB,iBAAiB17iB,SAAS5d,OAAQN,IAAK,CAC5D,IAAI4V,EAAQ9R,KAAKm9I,eAAe5+I,QAAQyB,KAAK81jB,iBAAiB17iB,SAASle,KACxD,IAAX4V,GACA9R,KAAKm9I,eAAex0H,OAAO7W,EAAO,GAG1C9R,KAAK40jB,aAAe,GAOxBt/D,EAAYl6f,UAAUy0f,oBAAsB,SAAUr4X,GAClD,IAAK/5H,EAAkBuC,KAAKwuf,OAAOgV,MAAM9uR,iBACrC,GAAIl9G,EAAM,CACNx3H,KAAK41jB,YAAc,IAAIx3c,GAAK,iBAAkBp+G,KAAKwuf,OAAOgV,MAAM33D,eAChE7rc,KAAK41jB,YAAYr3c,UAAUv+G,KAAKwuf,OAAOgV,MAAMx1f,QAC7CL,GAAW3N,KAAKwuf,OAAOgV,MAAMx1f,QACzBvQ,EAAkBuC,KAAKu/hB,eACvBv/hB,KAAK8vf,gBAAgB9vf,KAAK41jB,aAE1B51jB,KAAKwuf,OAAOqvC,qBAAqBr6hB,aAAa,QAAS,uBAEvDxD,KAAKwuf,OAAOqvC,qBAAqB34hB,aAAalF,KAAKwuf,OAAOgV,MAAM7T,kBAAkB4vC,YAAav/hB,KAAKwuf,OAAO+mC,kBAE/Gv1hB,KAAKu/hB,YAAY76hB,MAAMosC,QAAU,QAC7B9wC,KAAKwuf,OAAOgV,MAAMtR,eAClBlyf,KAAKi1jB,YAAYjzL,QAAQ,GAGzBhiY,KAAKi1jB,YAAYjzL,QAAQ,GAAG,GAE5BhiY,KAAKygY,YAAczgY,KAAKwuf,OAAOgV,MAAMtR,gBACrClyf,KAAKi1jB,YAAYxvjB,OAAO,GACxBzF,KAAKygY,WAAY,EACjBzgY,KAAK60jB,eAAgB,GAGrB70jB,KAAKi1jB,YAAYxvjB,OAAO,GAE5BzF,KAAKu6e,UAAUv4e,UAAYhC,KAAK41jB,YAAY37e,YAAYj6E,KAAKu0jB,YAC7Dv0jB,KAAK4vf,mBAAoB,EAEzB,IAAIpV,EAAUh6e,SAAS2uB,eAAenvB,KAAKwuf,OAAOgV,MAAMlS,2BAA2Bhuf,GAAK,2BACpFg2jB,EAAet5jB,KAAKwuf,OAAOgV,MAAMvtb,UAAUjnD,KAC/C,IAAKvxB,EAAkB67jB,GAAe,CAClC,IACIxnjB,EAAQgtf,GAAcE,WAAWs6D,GADzB,KAAM,OAElBA,EAAexnjB,EAAQ,EAAIwnjB,EAAeA,EAAaj1iB,UAAU,EAAGvS,GAExE0oe,EAAQz9e,MAAQu8jB,EAChB9+E,EAAQ/0e,SACRzF,KAAK21jB,WAAW3zjB,UAAY,GACxBhC,KAAKq2jB,WAAWvyjB,UAAUK,SAAS,+BACnCnE,KAAKq2jB,WAAWvyjB,UAAUM,IAAI,uBAC9BpE,KAAKq2jB,WAAWvyjB,UAAUS,OAAO,8BAErCvE,KAAKwuf,OAAOv4a,UAAUohc,MAAM3ygB,MAAMosC,QAAU,OAC5C9wC,KAAK40jB,aAAe,EACpB50jB,KAAKm9I,kBACDn9I,KAAK60jB,cAEL70jB,KAAKm9I,eAAe34I,KAAKxE,KAAK82jB,YAAa92jB,KAAKu3jB,oBAAqBv3jB,KAAKw3jB,uBAAwBx3jB,KAAKy1jB,YAAaz1jB,KAAKq2jB,WAAYr2jB,KAAKy2jB,yBAA0Bz2jB,KAAKu2jB,qBAAsBv2jB,KAAKi2jB,WAAYj2jB,KAAKk2jB,YAIrNl2jB,KAAKm9I,eAAe34I,KAAKxE,KAAK82jB,YAAa92jB,KAAKu3jB,oBAAqBv3jB,KAAKw3jB,uBAAwBx3jB,KAAKy1jB,YAAaz1jB,KAAKq2jB,WAAYr2jB,KAAKy2jB,yBAA0Bz2jB,KAAKu2jB,qBAAsBv2jB,KAAKi2jB,WAAYj2jB,KAAKk2jB,WAAYl2jB,KAAK03jB,YAAa13jB,KAAK+2jB,cAAe/2jB,KAAKi3jB,kBAEhRj3jB,KAAKwuf,OAAO8H,uBAEX,CACD,IAAK74f,EAAkBuC,KAAKu/hB,aAAc,CACtCv/hB,KAAKw1jB,yBACLx1jB,KAAKwuf,OAAOgV,MAAMxU,aAAayjE,uBAC/BzyjB,KAAK4vf,mBAAoB,EACzB,IAAI2pE,EAAgB/4jB,SAAS2uB,eAAenvB,KAAKwuf,OAAOgV,MAAMx/W,YAAc,uBACxErjJ,EAAUH,SAAS2uB,eAAenvB,KAAKwuf,OAAOgV,MAAMx/W,YAAc,kBACjEvmJ,EAAkB87jB,IAAmB97jB,EAAkBkD,KACxD44jB,EAAc70jB,MAAMosC,QAAU,OAC9B9wC,KAAK+1jB,oBACLwD,EAAcv3jB,UAAY,GAC1BrB,EAAQqB,UAAYhC,KAAK41jB,YAAY37e,YAAY,eAGzDj6E,KAAKwuf,OAAO8H,mBACP74f,EAAkBuC,KAAKu/hB,cACe,SAAnCv/hB,KAAKu/hB,YAAY76hB,MAAMosC,UACvB9wC,KAAKwuf,OAAOv4a,UAAU2/c,sBACtB51hB,KAAKu/hB,YAAY76hB,MAAMosC,QAAU,QAGzC9wC,KAAKwuf,OAAOj/X,cACZvvH,KAAKwuf,OAAOv4a,UAAUohc,MAAM3ygB,MAAMosC,QAAU,UAQxDwkd,EAAYl6f,UAAUo6jB,uBAAyB,WACtC/3jB,EAAkBuC,KAAKwuf,OAAOgV,MAAM9hB,mBACrC1hf,KAAKwuf,OAAOgV,MAAM9hB,qBAO1B4T,EAAYl6f,UAAUiX,QAAU,WACxBrS,KAAKu/hB,cACLv/hB,KAAKu/hB,YAAYv9hB,UAAY,GAC7BhC,KAAKu/hB,iBAAcrkiB,GAEnB8E,KAAK81jB,mBACL91jB,KAAK81jB,iBAAiB9zjB,UAAY,GAClChC,KAAK81jB,sBAAmB56jB,GAExB8E,KAAK21jB,aACL31jB,KAAK21jB,WAAW3zjB,UAAY,GAC5BhC,KAAK21jB,gBAAaz6jB,GAElB8E,KAAK61jB,kBACL71jB,KAAK61jB,gBAAgB7zjB,UAAY,IAErChC,KAAK61jB,qBAAkB36jB,EACnB8E,KAAKy1jB,cACLz1jB,KAAKy1jB,YAAY14jB,MAAQ,GACzBiD,KAAKy1jB,iBAAcv6jB,GAEnB8E,KAAKu6e,YACLv6e,KAAKu6e,UAAUv4e,UAAY,GAC3BhC,KAAKu6e,eAAYr/e,GAEjB8E,KAAK+4jB,yBACL/4jB,KAAK+4jB,uBAAuB/2jB,UAAY,GACxChC,KAAK+4jB,4BAAyB79jB,GAE9B8E,KAAK03jB,cACL13jB,KAAK03jB,YAAY11jB,UAAY,GAC7BhC,KAAK03jB,iBAAcx8jB,GAEnB8E,KAAKs3jB,UACLt3jB,KAAKs3jB,QAAQt1jB,UAAY,GACzBhC,KAAKs3jB,aAAUp8jB,GAEf8E,KAAK+2jB,gBACL/2jB,KAAK+2jB,cAAc/0jB,UAAY,GAC/BhC,KAAK+2jB,mBAAgB77jB,GAErB8E,KAAKi3jB,mBACLj3jB,KAAKi3jB,iBAAiBj1jB,UAAY,GAClChC,KAAKi3jB,sBAAmB/7jB,GAExB8E,KAAKi2jB,aACLj2jB,KAAKi2jB,WAAWj0jB,UAAY,GAC5BhC,KAAK6oE,eAAY3tE,GAEjB8E,KAAKk2jB,aACLl2jB,KAAKk2jB,WAAWl0jB,UAAY,GAC5BhC,KAAKs0jB,eAAYp5jB,GAMhBuC,EAAkBuC,KAAKwuM,UACxBxuM,KAAKwuM,QAAQn8L,UAEbrS,KAAKm9I,iBACLn9I,KAAKm9I,mBAETn9I,KAAKm9I,oBAAiBjiJ,EACtB8E,KAAKongB,mBAKT9R,EAAYl6f,UAAUgsgB,gBAAkB,WAChCpngB,KAAKu0jB,aACLv0jB,KAAKu0jB,gBAAar5jB,GAElB8E,KAAKw0jB,cACLx0jB,KAAKw0jB,iBAAct5jB,GAEnB8E,KAAKy0jB,iBACLz0jB,KAAKy0jB,oBAAiBv5jB,GAEtB8E,KAAK00jB,oBACL10jB,KAAK00jB,uBAAoBx5jB,GAEzB8E,KAAK20jB,uBACL30jB,KAAK20jB,0BAAuBz5jB,IAG7Bo6f,KC1lCPkkE,GAA8B,WAI9B,SAASA,EAAaj5jB,GAClBP,KAAKy5jB,WAAa,EAClBz5jB,KAAK0/hB,gBAAkB,EACvB1/hB,KAAKy/hB,0BAAuBvkiB,EAC5B8E,KAAKwjgB,MAAQjjgB,EACbP,KAAKmhe,cAAgB,IAAItsb,GAAM,EAAG,GAw8BtC,OAt8BAv2C,OAAOuJ,eAAe2xjB,EAAap+jB,UAAW,UAI1CsM,IAAK,WACD,OAAO1H,KAAKwjgB,MAAMhV,QAEtB7mf,YAAY,EACZC,cAAc,IAKlB4xjB,EAAap+jB,UAAU2mC,cAAgB,WACnC,MAAO,gBAKXy3hB,EAAap+jB,UAAU+/hB,sBAAwB,SAAUvzB,GACjD5ngB,KAAKwjgB,MAAMu0B,eACX/3hB,KAAKwjgB,MAAMu0B,cAAcoD,sBAAsBvzB,EAAY5ngB,MAE/DA,KAAKwuf,OAAO4oC,qBAAsB,EAClCp3hB,KAAK0/hB,iBAAmB,GAE5B85B,EAAap+jB,UAAU++hB,aAAe,SAAUxmgB,GAC5C3zB,KAAKwjgB,MAAMhV,OAAO4oC,qBAAsB,EACxCp3hB,KAAKmhe,cAAcp0d,EAAI4mB,EAAM5mB,EAC7B/M,KAAKmhe,cAAcn0d,EAAI2mB,EAAM3mB,EAE7BhN,KAAKwjgB,MAAMu0B,cAAc2hC,oBAAoB/liB,EAAO3zB,OAMxDw5jB,EAAap+jB,UAAU8+hB,mBAAqB,SAAUtyB,GAClD,IAAI1zf,EAAWlU,KAAK25jB,2BAAsBz+jB,EAAW0sgB,GACrD,OAAkB,IAAd1zf,IAIAlU,KAAKy5jB,WAAa,EAClBz5jB,KAAK0/hB,gBAAkBxrhB,GAChB,IAGfsljB,EAAap+jB,UAAU6+hB,oBAAsB,SAAUryB,GACnD,IAAI1zf,EAAWlU,KAAK45jB,uBAAuBhyD,GAC3C,OAAkB,IAAd1zf,IAIAlU,KAAKy5jB,WAAa,EAClBz5jB,KAAK0/hB,gBAAkBxrhB,GAChB,IAQfsljB,EAAap+jB,UAAUw+jB,uBAAyB,SAAUhyD,GACtD,IAAI1zf,GAAY,EAEZwogB,EAAc18gB,KAAK65jB,eAAejyD,GAClCkG,EAAa9tgB,KAAK2ngB,mBAAmBC,GACrCv3M,EAAc5yT,EAAkBi/gB,GAAe,EAAIA,EAAY1Y,YAAY3zM,YAC/E,GAAIqsN,GAAersN,EAAc,EAAG,CAGhC,GAFArwT,KAAKy/hB,qBAAuB/iB,EAExB18gB,KAAKwuf,OAAO0wC,aAAaxiB,EAAY3vgB,EAAI+xf,GAAcO,oBAAoBqd,EAAYrT,iBAAmB,IAAMqT,EAAY1vgB,EAAG8xf,GAAcO,oBAAoBqd,EAAYrT,iBAAmB,GAAKqT,EAAY3mgB,OAAQ6xf,GACzN,OAAO1zf,EAAW,EAGtB,IAAK,IADD4ljB,EAAiBp9C,EAAY3vgB,EACxB7Q,EAAI,EAAGA,EAAIwghB,EAAYjT,YAAYpmc,QAAQ7mE,OAAQN,IAAK,CAC7D,IAAIgogB,EAAiBpF,GAAcO,oBAAoBqd,EAAYjT,YAAYpmc,QAAQnnE,GAAGgogB,gBAE1F,GAAKlkgB,KAAKwuf,OAAO0wC,aAAa46B,EAAiB,EAAGp9C,EAAY1vgB,EAAG0vgB,EAAYrT,gBAd1D,EAckGqT,EAAY3mgB,OAAQ6xf,GACrI,OAAO1zf,EAAWhY,EAAI,EAAIA,EAAI,EAG7B,GAAIA,EAAI,GAAM8D,KAAKwuf,OAAO0wC,aAAa46B,EAAiB51D,EAAiB61D,EAA0Br9C,EAAY1vgB,EAlBjG,EAkB0H0vgB,EAAY3mgB,OAAQ6xf,GAC7J,OAAO1zf,EAAYhY,EAAI,EAE3B49jB,GAAkC51D,QAItC,IAAKzmgB,EAAkBqwgB,GAAa,CAGhC,GAFA9tgB,KAAKy/hB,qBAAuB3xB,EAAW1F,WAEnCpogB,KAAKwuf,OAAO0wC,aAAapxB,EAAW/ggB,EAAI+ggB,EAAW9ue,OAAOxyB,KAAOutjB,EAA0BjsD,EAAW9ggB,EAAI8ggB,EAAW9ue,OAAOtyB,IA5B7G,EA4BwIohgB,EAAW/3f,OAAQ6xf,GAC1K,OAAO1zf,EAAW45f,EAAW9+R,YAG5B,GAAIvxO,EAAkBqwgB,EAAWtH,qBAC/BxmgB,KAAKwuf,OAAO0wC,aAAapxB,EAAW/ggB,EAAI+ggB,EAAW9ue,OAAOvyB,MAAQqhgB,EAAW93f,MAAQ+jjB,EAA0BjsD,EAAW9ggB,EAAI8ggB,EAAW9ue,OAAOtyB,IAjCpI,EAiC+JohgB,EAAW/3f,OAAQ6xf,GACjM,OAAO1zf,EAAY45f,EAAW9+R,YAAc8+R,EAAWrF,WAAW31M,WAEjE,GAAIg7M,EAAWzW,aAAa76f,OAAS,EACtC,OAAOwD,KAAKg6jB,+BAA+BlsD,EAAYlG,GAInE,OAAO1zf,GAOXsljB,EAAap+jB,UAAU4+jB,+BAAiC,SAAUlsD,EAAYlG,GAC1E,IAAI1zf,GAAY,EACZ+ljB,EAAmBj6jB,KAAKk6jB,yBAAyBtyD,EAAYkG,GAC7DqsD,OAAkBj/jB,EACtB,IAAKuC,EAAkBw8jB,IAAqBA,EAAiBj2D,YAAY3zM,YAAc,EAAG,CAGtF,GAFArwT,KAAKy/hB,qBAAuBw6B,EAExBj6jB,KAAKwuf,OAAO0wC,aAAa+6B,EAAiBltjB,EAAIktjB,EAAiB5wD,gBAAkB,IAAM4wD,EAAiBjtjB,EAAGitjB,EAAiB5wD,gBAAkB,GAAK4wD,EAAiBlkjB,OAAQ6xf,GAC5K,OAAO1zf,EAAW,EAGtB,IAAK,IADD4ljB,EAAiBG,EAAiBltjB,EAC7B7Q,EAAI,EAAGA,EAAI+9jB,EAAiBxwD,YAAYpmc,QAAQ7mE,OAAQN,IAAK,CAElE,IAAIgogB,EAAiBpF,GAAcO,oBAAoB46D,EAAiBxwD,YAAYpmc,QAAQnnE,GAAGgogB,gBAE/F,GAAKlkgB,KAAKwuf,OAAO0wC,aAAa46B,EAAiB,EAAGG,EAAiBjtjB,EAAGitjB,EAAiB5wD,gBAAkB,EAAG4wD,EAAiBlkjB,OAAQ6xf,GACjI,OAAO1zf,EAAWhY,EAAI,EAAIA,EAAI,EAG7B,GAAIA,EAAI,GAAM8D,KAAKwuf,OAAO0wC,aAAa46B,EAAiB51D,EAAiB,EAAG+1D,EAAiBjtjB,EAAG,EAAGitjB,EAAiBlkjB,OAAQ6xf,GAC7H,OAAO1zf,EAAYhY,EAAI,EAE3B49jB,GAAkC51D,QAOtC,GAHKzmgB,EAAkBw8jB,KACnBE,EAAkBF,EAAiBtyD,mBAAmBC,KAErDnqgB,EAAkB08jB,GAAkB,CAGrC,GAFAn6jB,KAAKy/hB,qBAAuB06B,EAAgB/xD,WAExCpogB,KAAKwuf,OAAO0wC,aAAai7B,EAAgBptjB,EAAIotjB,EAAgBn7hB,OAAOxyB,KAAO,EAAG2tjB,EAAgBntjB,EAAImtjB,EAAgBn7hB,OAAOtyB,IAAK,EAAGytjB,EAAgBpkjB,OAAQ6xf,GACzJ,OAAO1zf,EAAWimjB,EAAgBnrV,YAEjC,GAAIvxO,EAAkB08jB,EAAgB3zD,qBAEpCxmgB,KAAKwuf,OAAO0wC,aAAai7B,EAAgBptjB,EAAIotjB,EAAgBn7hB,OAAOvyB,MAAQ0tjB,EAAgBnkjB,MAAQ,EAAGmkjB,EAAgBntjB,EAAImtjB,EAAgBn7hB,OAAOtyB,IAAK,EAAGytjB,EAAgBpkjB,OAAQ6xf,GACrL,OAAO1zf,EAAYimjB,EAAgBnrV,YAAcmrV,EAAgB1xD,WAAW31M,WAE3E,GAAIqnQ,EAAgB9iE,aAAa76f,OAAS,EAC3C,OAAOwD,KAAKg6jB,+BAA+BG,EAAiBvyD,GAIxE,OAAO1zf,GAEXsljB,EAAap+jB,UAAUu+jB,sBAAwB,SAAU9zD,EAAQ+B,GAC7D,IAAI8U,OAAcxhhB,EACd4ygB,OAAa5ygB,EACbuC,EAAkBoogB,IAClB6W,EAAc18gB,KAAK65jB,eAAejyD,GAClCkG,EAAa9tgB,KAAK2ngB,mBAAmBC,IAGrC8U,EAAc18gB,KAAKk6jB,yBAAyBtyD,EAAY/B,GAE5D,IAAIx1M,EAAc5yT,EAAkBi/gB,GAAe,EAAIA,EAAY1Y,YAAY3zM,YAC/E,GAAIqsN,GAAersN,EAAc,EAAG,CAGhC,GAFArwT,KAAKy/hB,qBAAuB/iB,EAExB18gB,KAAKwjgB,MAAMhV,OAAO0wC,aAAaxiB,EAAY3vgB,EAAG2vgB,EAAY1vgB,EAAI0vgB,EAAY3mgB,OAASs6S,EAAarwT,KAAKo6jB,eAAe19C,EAAYhjY,WAAaj8I,EAAkBi/gB,EAAY5V,iBAAmB4V,EAAYlT,kBAAoBn5M,EAAc,EAAIu3M,GAChP,OAAO8U,EAAYhjY,UAAUu1F,SAEjC,IAAK,IAAI/yO,EAAI,EAAGA,EAAIwghB,EAAYrlB,aAAa76f,OAAQN,IAAK,CAEtD,IAAI0ghB,EAAYF,EAAYrlB,aAAan7f,GACzC,GAAIwghB,EAAYrlB,aAAa94f,QAAQq+gB,IAAc,GAE3C58gB,KAAKwjgB,MAAMhV,OAAO0wC,aAAatiB,EAAU7vgB,EAAG6vgB,EAAU5vgB,EAAI4vgB,EAAU7mgB,OAASs6S,EAAc,EAAGrwT,KAAKo6jB,eAAex9C,GAAYvsN,EAAc,EAAGu3M,GACnJ,OAAOgV,EAAU3tS,eAQzB,GAHIytS,GAAe5O,IACfA,EAAa9tgB,KAAK2ngB,mBAAmBC,IAErCkG,EAAY,CACZ,IACI/3f,EAAS,EAQb,GANIA,GAHA6mgB,EAAY9O,EAAWxW,iBAEbroR,WAAa2tS,EAAUxU,WAAW/Q,aAAa76f,OAAS,EACzDoghB,EAAUpT,kBAAoB,EAG9BoT,EAAUpW,mBAAmB+C,eAAiB,EAGvDvpgB,KAAKwjgB,MAAMhV,OAAO0wC,aAAatiB,EAAU7vgB,EAAG6vgB,EAAU5vgB,EAAI4vgB,EAAU7mgB,OAASA,EAAQ6mgB,EAAU5mgB,MAAgB,EAATD,EAAY6xf,GAElH,OADA5ngB,KAAKy/hB,qBAAuB7iB,EAAUxU,WAC/BwU,EAAU3tS,SAGjB,GAAI6+R,EAAWzW,aAAa76f,OAAS,EACjC,OAAOwD,KAAK25jB,sBAAsB7rD,EAAYlG,GAK9D,OAAQ,GAOZ4xD,EAAap+jB,UAAUq/hB,eAAiB,SAAU7yB,GAC9C,IAAIrvZ,EAAY,EACQ,IAApBv4G,KAAKy5jB,YACLlhd,EAAYqvZ,EAAW76f,EAAI/M,KAAKmhe,cAAcp0d,EAC9C/M,KAAKq6jB,sBAAsB9hd,KAG3BA,EAAYqvZ,EAAW56f,EAAIhN,KAAKmhe,cAAcn0d,EAC9ChN,KAAKs6jB,eAAe/hd,KAG5Bihd,EAAap+jB,UAAUk/jB,eAAiB,SAAU/hd,GAC9C,IAAInzC,EAAQplE,KAAKy/hB,qBACjB,IAAIhiiB,EAAkB2nE,IAAwB,IAAdmzC,EAAhC,CAGA,IAAItiC,EAAYj2E,KAAKwjgB,MAAMvtb,UAI3B,GAHI7Q,EAAMmjc,gBACNvogB,KAAKwjgB,MAAMjiB,iBAAkB,GAE7Bvhf,KAAK0/hB,iBAAmB,EAAG,CAC3B,IAAIh6d,EAAMN,EAAMiyb,aAAar3f,KAAK0/hB,iBAClC1/hB,KAAKsmhB,gBAAgB5gd,EAAK6yC,GAC1BtiC,EAAUqqe,eAAerqe,EAAU14E,MAAO04E,EAAUh3D,KAExD,GAAImmD,EAAMmjc,cAAe,CACrB,IAAIx0E,EAAc/zb,KAAKwjgB,MAAMhV,OAAOlhc,OAAO4+d,eAAe9md,GAC1DplE,KAAKwjgB,MAAMjiB,iBAAkB,EAC7Bn8a,EAAQ2uX,EAEZ/zb,KAAKmhe,cAAcn0d,GAAK8xf,GAAcO,oBAAoB9mZ,GAC1Dv4G,KAAKwjgB,MAAMhV,OAAOlhc,OAAOg/d,cAAclnd,GACvCplE,KAAKwjgB,MAAM1U,aAAayrE,SAASv6jB,KAAKwjgB,MAAMvtb,aAMhDujf,EAAap+jB,UAAUy+jB,eAAiB,SAAUjgC,GAC9C,IAAI/zB,OAAS3qgB,EACTyjP,EAAc3+O,KAAKwjgB,MAAMhV,OAAO7vQ,YACpC,IAAKlhP,EAAkBkhP,GACnB,IAAK,IAAIziP,EAAI,EAAGA,EAAIyiP,EAAYinR,YAAYppgB,OAAQN,IAAK,CACrD,IAAI4ggB,EAAan+Q,EAAYinR,YAAY1pgB,GAEzC,GADA2pgB,EAAS7lgB,KAAKk6jB,yBAAyBtgC,EAAa98B,IAC/Cr/f,EAAkBoogB,GACnB,MAIZ,OAAOA,GAEX2zD,EAAap+jB,UAAU8+jB,yBAA2B,SAAUvmiB,EAAOkye,GAC/D,IAAK,IAAInif,EAAI,EAAGA,EAAImif,EAAOxO,aAAa76f,OAAQknB,IAC5C,GAAImif,EAAOxO,aAAa3ze,aAAcujf,GAAa,CAC/C,IAAIuV,EAAc3W,EAAOxO,aAAa3ze,GACtC,GAAI84f,EAAYxvgB,GAAK2mB,EAAM3mB,GAAMwvgB,EAAYxvgB,EAAIwvgB,EAAYzmgB,QAAW4d,EAAM3mB,EAC1E,OAAOwvgB,IAWvBg9C,EAAap+jB,UAAUusgB,mBAAqB,SAAUiyB,GAClD,IAAI/zB,OAAS3qgB,EACTyjP,EAAc3+O,KAAKwjgB,MAAMhV,OAAO7vQ,YACpC,IAAKlhP,EAAkBkhP,GACnB,IAAK,IAAIziP,EAAI,EAAGA,EAAIyiP,EAAYinR,YAAYppgB,OAAQN,IAAK,CAGrD,GADA2pgB,EADiBlnR,EAAYinR,YAAY1pgB,GACrByrgB,mBAAmBiyB,IAClCn8hB,EAAkBoogB,GACnB,MAIZ,OAAOA,GAEX2zD,EAAap+jB,UAAUkrhB,gBAAkB,SAAU5gd,EAAK6yC,GACpD,IAAI+xZ,EAAY5kc,EAAI4kc,UACpB,GAA6B,SAAzBA,EAAU9F,WAAuB,CACjC8F,EAAU9F,WAAa,UACvB,IAAIyjB,EAAQ3d,EAAUlR,UAClB9sH,EAAgBtsY,KAAKwjgB,MAAMhV,OAAOlhc,OAAO4X,aAAa+id,GAAQA,IAE9D37I,EAAgB/zR,GAAa,KAAO+xZ,EAAUv0f,SAAWu2X,EAAgB/zR,IACzE+xZ,EAAUv0f,OAASu2X,EAAgB/zR,QAKnC+xZ,EAAUv0f,OAASwiG,GAAa,KAAO+xZ,EAAUv0f,SAAWu0f,EAAUv0f,OAASwiG,IAC/E+xZ,EAAUv0f,OAASu0f,EAAUv0f,OAASwiG,IAKlDihd,EAAap+jB,UAAUi/jB,sBAAwB,SAAU9hd,GACrD,IAAInzC,EAAQplE,KAAKy/hB,qBACjB,IAAIhiiB,EAAkB2nE,IAAwB,IAAdmzC,IAAmB96G,EAAkB2nE,EAAMiyb,cAA3E,CAGA,IAAImjE,GAAgB,EAChBvkf,EAAYj2E,KAAKwjgB,MAAMvtb,UAC3Bj2E,KAAKwjgB,MAAM8Q,OAAOs0B,eAAe3yd,GACjC7Q,EAAQA,EAAM2hc,cAAc/mgB,KAAKwuf,QACjCxuf,KAAKwjgB,MAAMjiB,iBAAkB,EAE7Bvhf,KAAKy6jB,kBAAkBr1f,GACvB,IAAI5uD,EAAiB4uD,EAAM0kc,eAAc,GACrC4wD,EAAYt1f,EAAMg4b,WAClB6G,EAAiB7+b,EAAM4+b,YAAYC,eAIvC,GAHKhub,EAAU2hK,UACX4iV,EAAgBx6jB,KAAK26jB,0BAA0B1kf,EAAW7Q,EAAOmzC,IAEhEiid,EAAL,CAIA,GAA6B,IAAzBx6jB,KAAK0/hB,gBAAuB,CAE5B,IAAI1wT,EAAchvO,KAAK0/hB,gBACnBk7B,EAAcx1f,EAAMqkc,YAAYpmc,QAAQ2rK,GACxCh5N,EAAQ4kjB,EAAY12D,eACxB,GAAI3rZ,EAAY,EAAG,CACf,IAAIsid,EAAgBtid,EACpB,EAAG,CAEC,IADI4vV,EAAW22D,GAAc/+d,MAAM66hB,EAAY12D,eAAiB3rZ,EAAW,KAC3Dqid,EAAY3qgB,SAAU,CAClC2qgB,EAAY12D,eAAiB/7D,EAE7BuyH,GADAA,EAAYt1f,EAAMg4b,WAAa7kZ,KACL,KAAQmid,GAAa,KAAOA,EAAY,MAAS,KAC3E,MAGAG,EAAgBtid,EAChBA,GAAa4vV,EAAWyyH,EAAY3qgB,eAEnCsoD,IAAcsid,OAEtB,CACGA,EAAgBtid,EACpB,EAAG,CACC,IAAI4vV,EACJ,IADIA,EAAW22D,GAAc/+d,MAAM66hB,EAAY12D,eAAiB3rZ,EAAW,KAC3D,KAAM,CAClBqid,EAAY12D,eAAiB/7D,EAE7BuyH,GADAA,EAAYt1f,EAAMg4b,WAAa7kZ,KACL,KAAQmid,GAAa,KAAOA,EAAY,MAAS,KAC3E,MAGAG,EAAgBtid,EAChBA,GAAa4vV,EAAW,WAEvB5vV,IAAcsid,GAE3B,IAAIC,EAAavid,EAEM,SAAnB0rZ,GAA8B7+b,EAAMqkc,YAAYuC,gBAAkBx1f,GAA4D,SAAzC4uD,EAAM4+b,YAAYG,qBACnG/+b,EAAMqkc,YAAYuL,aAAax+f,EAAgB4uD,EAAMqkc,YAAYS,WAAqD,SAAzC9kc,EAAM4+b,YAAYG,oBAE/F/+b,EAAMqkc,YAAYkC,WAAWn1f,EAAgB4uD,EAAMqkc,YAAYS,WAAqD,SAAzC9kc,EAAM4+b,YAAYG,oBAG7Fy2D,EAAY12D,eAAiBluf,EAEjC8kjB,EAAa,GAEM,WAAnB72D,IACI7+b,EAAMqkc,YAAYuC,gBAAkBx1f,GAA2D,SAAzC4uD,EAAM4+b,YAAYG,sBAC5E22D,GAA0B,GAE9B11f,EAAM4+b,YAAY5G,WAAgC,SAAnB6G,EAA4By2D,EAAY,EACvEt1f,EAAMqkc,YAAYS,WAAa9kc,EAAMqkc,YAAYuC,gBACjDhsgB,KAAK+6jB,0BAA0B31f,GAC/BplE,KAAKg7jB,gBAAgB51f,GAAO,EAAM01f,QAEjC,GAAc,OAAV11f,GAAkBplE,KAAK0/hB,kBAAoBt6d,EAAMqkc,YAAYpmc,QAAQ7mE,OAE1EwD,KAAKi7jB,8BAA8B71f,EAAOmzC,EAAW/hG,OAEpD,CACD,IAA8B,IAA1BxW,KAAK0/hB,gBAEL,YADA1/hB,KAAKwjgB,MAAMjiB,iBAAkB,GAGjCvhf,KAAKk7jB,mBAAmB91f,EAAOmzC,GAGnCv4G,KAAKwjgB,MAAMjiB,iBAAkB,EAC7Btra,EAAUqqe,eAAerqe,EAAU14E,MAAO04E,EAAUh3D,UA1EhDjf,KAAKwjgB,MAAMjiB,iBAAkB,IA+ErCi4E,EAAap+jB,UAAUu/jB,0BAA4B,SAAU1kf,EAAW7Q,EAAOmzC,GAC3DnzC,EAAMg4b,WAAtB,IACI+sB,EAAanqhB,KAAK2ngB,mBAAmB3ngB,KAAKmhe,eAC9C,GAAIgpD,IAAel0c,EAAUq8c,gBAAgBjvS,YAAY8mS,IAAgBA,EAAWtc,gBAC7E53b,EAAUq8c,gBAAgBjvS,YAAa8mS,EAAyB,iBAAM,CACzE,IAAIgxC,EAAgBllf,EAAUiwe,mBAC9B,GAA6B,IAAzBlmjB,KAAK0/hB,gBACL1/hB,KAAKo7jB,oBAAoBh2f,EAAOmzC,EAAW4id,QAE1C,GAAc,OAAV/1f,GAAkBplE,KAAK0/hB,kBAAoBt6d,EAAMqkc,YAAYpmc,QAAQ7mE,OAAQ,CAElF,IAAK,IADD6+jB,EAAuBr7jB,KAAKs7jB,eAAel2f,EAAOplE,KAAK0/hB,iBAAiB,GACnExjiB,EAAI,EAAGA,EAAIm/jB,EAAqB7+jB,OAAQN,IAAK,CAClD,IAAI6rE,EAAOszf,EAAqBn/jB,IACK,IAAjCi/jB,EAAc58jB,QAAQwpE,IACtB/nE,KAAKu7jB,wBAAwBxzf,EAAMwwC,GAAW,GAItDv4G,KAAKw7jB,yBAAyBp2f,GAC9BA,EAAMswN,YAAYn9K,GAClBv4G,KAAKg7jB,gBAAgB51f,GAAO,EAAMmzC,OAEjC,CACD,IAA8B,IAA1Bv4G,KAAK0/hB,gBACL,OAAO,EAEX,IAAI1wT,EAAchvO,KAAK0/hB,gBAEnB+7B,GADAJ,EAAuBr7jB,KAAKs7jB,eAAel2f,EAAO4pK,GAAa,GACvChvO,KAAKs7jB,eAAel2f,EAAO4pK,GAAa,IAChE0sV,EAAmB17jB,KAAK27jB,iBAAiBv2f,EAAO4pK,GACpD,GAAIqsV,EAAqB7+jB,OAAS,IAAMk/jB,EACpC,IAASx/jB,EAAI,EAAGA,EAAIm/jB,EAAqB7+jB,OAAQN,KACW,IAApDi/jB,EAAc58jB,QAAQ88jB,EAAqBn/jB,MAC3Cm/jB,EAAqB1yiB,OAAOzsB,EAAG,GAC/BA,KAIZ,GAAIu/jB,EAAsBj/jB,OAAS,IAAMk/jB,EACrC,IAASx/jB,EAAI,EAAGA,EAAIu/jB,EAAsBj/jB,OAAQN,KACW,IAArDi/jB,EAAc58jB,QAAQk9jB,EAAsBv/jB,MAC5Cu/jB,EAAsB9yiB,OAAOzsB,EAAG,GAChCA,KAKZ,GAAoC,IAAhCm/jB,EAAqB7+jB,QAAgBi/jB,EAAsBj/jB,OAAS,EACpE,IAASN,EAAI,EAAGA,EAAIu/jB,EAAsBj/jB,OAAQN,IAAK,EAC/C6rE,EAAO0zf,EAAsBv/jB,IACxB2xgB,gBACLwtD,EAAqB72jB,KAAKujE,EAAK8lc,qBAItC,GAAqC,IAAjC4tD,EAAsBj/jB,QAAgB6+jB,EAAqB7+jB,OAAS,EACzE,IAASN,EAAI,EAAGA,EAAIm/jB,EAAqB7+jB,OAAQN,IAAK,EAC9C6rE,EAAOszf,EAAqBn/jB,IACvBq0gB,YACLkrD,EAAsBj3jB,KAAKujE,EAAKwoc,YAI5CvwgB,KAAK47jB,mBAAmBx2f,EAAOi2f,EAAsBI,EAAuBljd,GAAW,GACvFv4G,KAAKg7jB,gBAAgB51f,GAAO,EAAMmzC,GAEtCtiC,EAAUqqe,eAAerqe,EAAU14E,MAAO04E,EAAUh3D,KAExD,OAAO,GAKXu6iB,EAAap+jB,UAAUggkB,oBAAsB,SAAUh2f,EAAOmzC,EAAW4id,GACrE,IAAIT,EAAYt1f,EAAMg4b,WAGlBy+D,GAFwB77jB,KAAKs7jB,eAAel2f,EAAOplE,KAAK0/hB,iBAAiB,GAE3Dy7B,EAAc,GAAG9yD,UAC/BiC,EAAYuxD,EAAYvxD,UAC5B,GAAIA,EAAUhG,YAAc,EAAG,CAC3B,IAAIw3D,EAAgBxxD,EAAUhG,YAAc/rZ,EAC5C,GAAIujd,EAAgB,EAChB97jB,KAAK+7jB,iBAAiBF,EAAatjd,OAElC,CAED,GAAIujd,GADAE,EAAkBh8jB,KAAKi8jB,mBAAmB72f,EAAOy2f,KAThD,IAU6CC,EAAe,CAC7DpB,EAAYt1f,EAAMg4b,WAAa0+D,EAC/B12f,EAAM4+b,YAAY5G,WAAas9D,IAAc,KAAQA,GAAa,KAAOA,EAAY,MAAS,KAC9F,IAAK,IAAIx+jB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAE5C2/jB,KADAj3B,EAAWx/d,EAAMiyb,aAAan7f,KAE9B8D,KAAK+7jB,iBAAiBn3B,GAAWk3B,WAOjD,GAAIvjd,EAAY,EACZmid,EAAYt1f,EAAMg4b,WAAa7kZ,EAC/BnzC,EAAM4+b,YAAY5G,WAAas9D,IAAc,KAAQA,GAAa,KAAOA,EAAY,MAAS,KAC9F16jB,KAAKk8jB,oBAAoB92f,EAAO+1f,EAAe5id,OAE9C,CACD,IAAIyjd,EAAkBh8jB,KAAKi8jB,mBAAmB72f,EAAOy2f,GAErD,GAA2B,IADFz2f,EAAM4+b,YAAY5G,WAEvC,IAASlhgB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAI0oiB,EAAWx/d,EAAMiyb,aAAan7f,IACuB,IAArDi/jB,EAAc58jB,QAAQqmiB,EAASvtC,aAAa,MAC5Cr3f,KAAK+7jB,iBAAiBn3B,EAAUrsb,GAChCv4G,KAAKu7jB,wBAAwB32B,EAASvtC,aAAa,GAAI9+Y,GAAW,QAIzE,CAED,GADiByjd,EAAkBzjd,EAClB,EACbmid,EAAYt1f,EAAMg4b,WAAa7kZ,EAC/BnzC,EAAM4+b,YAAY5G,WAAas9D,IAAc,KAAQA,GAAa,KAAOA,EAAY,MAAS,KAC9F16jB,KAAKk8jB,oBAAoB92f,EAAO+1f,EAAe5id,OAE9C,CACDmid,EAAYt1f,EAAMg4b,WAAa4+D,EAC/B52f,EAAM4+b,YAAY5G,WAAas9D,IAAc,KAAQA,GAAa,KAAOA,EAAY,MAAS,KAC9F,IAASx+jB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAC5C0oiB,EAAWx/d,EAAMiyb,aAAan7f,IACuB,IAArDi/jB,EAAc58jB,QAAQqmiB,EAASvtC,aAAa,KAC5Cr3f,KAAKu7jB,wBAAwB32B,EAASvtC,aAAa,GAAI9+Y,GAAW,GAClEv4G,KAAK+7jB,iBAAiBn3B,EAAUrsb,EAAYyjd,IAG5Ch8jB,KAAK+7jB,iBAAiBn3B,GAAWo3B,MAOzDh8jB,KAAKg7jB,gBAAgB51f,GAAO,EAAMmzC,IAEtCihd,EAAap+jB,UAAU8gkB,oBAAsB,SAAU92f,EAAO+1f,EAAe5id,GACzE,IAAK,IAAIr8G,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAI0oiB,EAAWx/d,EAAMiyb,aAAan7f,IACuB,IAArDi/jB,EAAc58jB,QAAQqmiB,EAASvtC,aAAa,IAC5Cr3f,KAAKu7jB,wBAAwB32B,EAASvtC,aAAa,GAAI9+Y,GAAW,GAGlEv4G,KAAK+7jB,iBAAiBn3B,GAAWrsb,KAO7Cihd,EAAap+jB,UAAU6/jB,8BAAgC,SAAU71f,EAAOmzC,EAAW/hG,GAO/E,IANA,IAAIytf,EAAiB7+b,EAAM4+b,YAAYC,eAEnCk4D,EADiB/2f,EAAM4+b,YAAYE,eAEnCl1R,EAAchvO,KAAK0/hB,gBACnB08B,EAAah3f,EAAMqkc,YAAYpmc,QAAQ2rK,EAAc,GACrD6rV,EAAgB,EACbtid,IAAcsid,GAAe,CAChC,IAAI1yH,EAAW22D,GAAc/+d,MAAMq8hB,EAAWl4D,eAAiB3rZ,EAAW,GACtE4vV,GAAYi0H,EAAWnsgB,UACvBmsgB,EAAWl4D,eAAiB/7D,EAC5B0yH,EAAgBtid,IAGhBsid,EAAgBtid,EAChBA,GAAa4vV,EAAWi0H,EAAWnsgB,UAG3CjwD,KAAK+6jB,0BAA0B31f,IAC3B+2f,GAAiB/2f,EAAMqkc,YAAYuC,gBAAkBx1f,KACrD4uD,EAAMswN,YAAYn9K,GAClBnzC,EAAMqkc,YAAYS,WAAa9kc,EAAMqkc,YAAYuC,iBAErD,IAAI8uD,EAAavid,EACM,UAAnB0rZ,EACA62D,EAAa,EAEW,WAAnB72D,IACL62D,GAA0B,GAE9B96jB,KAAKg7jB,gBAAgB51f,GAAO,EAAM01f,IAKtCtB,EAAap+jB,UAAU8/jB,mBAAqB,SAAU91f,EAAOmzC,GACzD,IAAIy2H,EAAchvO,KAAK0/hB,gBACnB08B,EAAah3f,EAAMqkc,YAAYpmc,QAAQ2rK,EAAc,GACrD4rV,EAAcx1f,EAAMqkc,YAAYpmc,QAAQ2rK,GAC5C,GAAIz2H,EAAY,EAEZ,IADA,IAAI8jd,GAAa,EACVA,GAAY,EACXl0H,EAAW22D,GAAc/+d,MAAM66hB,EAAY12D,eAAiB3rZ,EAAW,KAC3Dqid,EAAY3qgB,UACxB2qgB,EAAY12D,eAAiB/7D,EAC7Bi0H,EAAWl4D,eAAiBk4D,EAAWl4D,eAAiB3rZ,EACxD8jd,GAAa,GAGb9jd,GAAa4vV,EAAWyyH,EAAY3qgB,cAM5C,IADIosgB,GAAa,EACVA,GAAY,CACf,IAAIl0H,GAAAA,EAAW22D,GAAc/+d,MAAMq8hB,EAAWl4D,eAAiB3rZ,EAAW,KAC1D6jd,EAAWnsgB,UACvBmsgB,EAAWl4D,eAAiB/7D,EAC5ByyH,EAAY12D,eAAiB02D,EAAY12D,eAAiB3rZ,EAC1D8jd,GAAa,GAGb9jd,GAAa4vV,EAAWi0H,EAAWnsgB,SAK/CjwD,KAAK+6jB,0BAA0B31f,GAE/BA,EAAMqkc,YAAYS,WAAa9kc,EAAMqkc,YAAYuC,gBACjDhsgB,KAAKg7jB,gBAAgB51f,GAAO,EAAOmzC,IAEvCihd,EAAap+jB,UAAU4/jB,gBAAkB,SAAU51f,EAAOk5J,EAAU/lH,GAQhE,GAPI+lH,IACAl5J,EAAMmlc,gBACNnlc,EAAM8lc,eAAgB,GAE1B9lc,EAAM6lc,oBACN7lc,EAAM8lc,eAAgB,EACtBlrgB,KAAKwuf,OAAOgV,MAAMjiB,iBAAkB,EAChCn8a,EAAMmjc,cAAe,CACrB,IAAIx0E,EAAc/zb,KAAKwuf,OAAOlhc,OAAO4+d,eAAe9md,GACpDplE,KAAKwuf,OAAOlhc,OAAOg/d,cAAcv4F,QAGjC/zb,KAAKwuf,OAAOlhc,OAAOg/d,cAAclnd,GAErCplE,KAAKwjgB,MAAM8Q,OAAOgoD,eAAet8jB,KAAKwuf,OAAOv4a,WAC7Cj2E,KAAKwjgB,MAAM1U,aAAayrE,SAASv6jB,KAAKwjgB,MAAMvtb,WACxCsiC,IACAv4G,KAAKmhe,cAAcp0d,GAAK+xf,GAAcO,oBAAoB9mZ,GAC1Dv4G,KAAK0/hB,gBAAkB1/hB,KAAK45jB,uBAAuB55jB,KAAKmhe,iBAGhEq4F,EAAap+jB,UAAUkgkB,eAAiB,SAAUl2f,EAAO4pK,EAAautV,GAElE,IAAK,IADD31f,KACK1qE,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAE3C,IAAK,IADDwpE,EAAMN,EAAMiyb,aAAan7f,GACpBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GACxB64iB,EACIx0f,EAAKinK,YAAcjnK,EAAK0gc,WAAW31M,aAAe9jF,GAClDpoK,EAAMpiE,KAAKujE,GAIXA,EAAKinK,cAAgBA,GACrBpoK,EAAMpiE,KAAKujE,GAK3B,OAAOnB,GAEX4yf,EAAap+jB,UAAU2gkB,iBAAmB,SAAUr2f,EAAK/5D,GACjD+5D,EAAI4kc,UAAUhG,YAAc34f,IAAW+5D,EAAI4kc,UAAUhG,cACrD5+b,EAAI4kc,UAAUhG,YAAc5+b,EAAI4kc,UAAUhG,YAAc34f,EACxD+5D,EAAI4kc,UAAUvF,gBAAkBr/b,EAAI4kc,UAAUhG,cAGtDk1D,EAAap+jB,UAAU6gkB,mBAAqB,SAAU72f,EAAOo3f,GAGzD,IAAK,IAFD13D,EAAa,EACbhwa,EAAO,EACF54F,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GACzBwpE,IAAQ82f,IACK,IAAT1ne,IACAgwa,EAAap/b,EAAI4kc,UAAUhG,YAC3Bxva,KAEApvB,EAAI4kc,UAAUhG,aAAeQ,IAC7BA,EAAap/b,EAAI4kc,UAAUhG,cAIvC,OAAOQ,GAEX00D,EAAap+jB,UAAUmgkB,wBAA0B,SAAUxzf,EAAMwwC,EAAWkkd,GACxE,IAAIv4D,EAAiBn8b,EAAK0gc,WAAWvE,eACM,SAAvCn8b,EAAK0gc,WAAWtE,qBAChBD,EAAiBn8b,EAAK0gc,WAAWv6M,UACjCnmP,EAAK0gc,WAAWtE,mBAAqB,SAEzC,IAAIu4D,EAAe30f,EAAK0jc,YAAYx7c,SACO,YAAvC8X,EAAK0gc,WAAWtE,qBAChBu4D,EAAe30f,EAAKkkc,sBAAsBywD,IAI1C30f,EAAK0gc,WAAWvE,eADhBu4D,EACiCv4D,EAAiB3rZ,EAAYmkd,EAAex4D,EAAiB3rZ,EAAYmkd,EAGzEx4D,EAAiB3rZ,EAAYmkd,EAAex4D,EAAiB3rZ,EAAYmkd,GAIlHlD,EAAap+jB,UAAUwgkB,mBAAqB,SAAUx2f,EAAOi2f,EAAsBI,EAAuBljd,EAAWokd,GACjH,GAAItB,EAAqB7+jB,OAAS,EAAG,CAEjC,IAAK,IADDs4F,GAAO,EACF54F,EAAI,EAAGA,EAAIm/jB,EAAqB7+jB,OAAQN,IAAK,CAClD,IAAI6rE,EAAOszf,EAAqBn/jB,GAChC8D,KAAKu7jB,wBAAwBxzf,EAAMwwC,GAAW,GAC1CxwC,EAAKwrP,YAAcxrP,EAAKsgc,SAAShR,aAAa76f,OAAS,IACvDs4F,GAAO,GAGXA,GACA90F,KAAKw7jB,yBAAyBp2f,GAGtC,GAAIq2f,EAAsBj/jB,OAAS,EAAG,CAE7B,IADDwnF,EAAO,EACX,IAAS9nF,EAAI,EAAGA,EAAIu/jB,EAAsBj/jB,OAAQN,IAAK,CAEnD,GAAuB,KADnB6rE,EAAO0zf,EAAsBv/jB,IACxBq3T,UAAiB,CACtB,IAAIuoQ,EAAgB/zf,EAAKsgc,SAASiC,UAAUhG,YAAc/rZ,EACtDujd,GAAiB,EACjB97jB,KAAK+7jB,iBAAiBh0f,EAAKsgc,SAAU9vZ,IAGjCv0B,IAAS83e,IACT93e,EAAO83e,GAEX/zf,EAAKsgc,SAASiC,UAAUvF,gBAAkB,EAC1Ch9b,EAAKsgc,SAASiC,UAAUtF,oBAAsB,QAGtDhlgB,KAAKu7jB,wBAAwBxzf,EAAMwwC,GAAW,GAElD,GAAa,IAATv0B,EAAY,CACZ,IAAI02e,EAAYt1f,EAAMg4b,WAAap5a,EACnC5e,EAAM4+b,YAAY5G,WAAas9D,IAAc,KAAQA,GAAa,KAAOA,EAAY,MAAS,KAC9F,IAAK,IAAIh3iB,EAAI,EAAGA,EAAI0hD,EAAMiyb,aAAa76f,OAAQknB,IAAK,CAChD,IAAIgiD,EAAMN,EAAMiyb,aAAa3ze,IAC+B,IAAxD+3iB,EAAsBl9jB,QAAQmnE,EAAI2xb,aAAa,KAC/Cr3f,KAAK+7jB,iBAAiBr2f,EAAKse,EAAO,EAAIA,GAAQA,OAMlEw1e,EAAap+jB,UAAUogkB,yBAA2B,SAAUp2f,GAExD,IAAK,IADD8qV,EAAclwZ,KAAK8rgB,eAAe1mc,GAAO,GACpClpE,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GACzB0gkB,EAAkB58jB,KAAK68jB,YAAYn3f,GAAK,GAC5C,GAAIwqV,GAAe0sK,GAAmBl3f,EAAI4kc,UAAU/F,aAAer0G,EAAc0sK,EAAiB,CAC9F,IAAI7/jB,EAAQmzZ,EAAc0sK,EAC1Bl3f,EAAI4kc,UAAUpF,eAAiBnogB,EAC/B2oE,EAAI4kc,UAAU/F,WAAaxngB,KAIvCy8jB,EAAap+jB,UAAUyhkB,YAAc,SAAUn3f,EAAKo3f,GAChD,IAAIvoQ,EAAW,EACXuoQ,IACAvoQ,GAAsB7uP,EAAI4kc,UAAUhG,aAExC,IAAK,IAAIpogB,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IAAK,CAE9Cq4T,GADW7uP,EAAI2xb,aAAan7f,GACXusgB,WAAWv6M,UAEhC,OAAOqG,GAEXilQ,EAAap+jB,UAAU0wgB,eAAiB,SAAU1mc,EAAO03f,GAErD,IAAK,IADD9mjB,EAAQ,EACH9Z,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GACzBq4T,EAAW,EACXuoQ,IACAvoQ,GAAsB7uP,EAAI4kc,UAAUhG,aAExC,IAAK,IAAI38e,EAAM,EAAGA,EAAM+9C,EAAI2xb,aAAa76f,OAAQmrB,IAAO,CAEpD4sS,GADW7uP,EAAI2xb,aAAa1ve,GACX8gf,WAAWv6M,UAE5Bl4S,EAAQu+S,IACRv+S,EAAQu+S,GAGhB,OAAOv+S,GAEXwjjB,EAAap+jB,UAAUugkB,iBAAmB,SAAUv2f,EAAO4pK,GAMvD,IAAK,IAJDmsV,EADYn7jB,KAAKwjgB,MAAMvtb,UACGiwe,mBAC1B6W,EAAkB/8jB,KAAKs7jB,eAAel2f,EAAO4pK,GAAa,GAC1DguV,EAAmBh9jB,KAAKs7jB,eAAel2f,EAAO4pK,GAAa,GAC3D2sV,GAAmB,EACdz/jB,EAAI,EAAGA,EAAI6gkB,EAAgBvgkB,OAAQN,IAAK,CAC7C,IAAI+gkB,EAAaF,EAAgB7gkB,GACjCy/jB,GAA0D,IAAvCR,EAAc58jB,QAAQ0+jB,GAE7C,IAAKtB,EACD,IAASz/jB,EAAI,EAAGA,EAAI8gkB,EAAiBxgkB,OAAQN,IAAK,CAC1C+gkB,EAAaD,EAAiB9gkB,GAClCy/jB,GAA0D,IAAvCR,EAAc58jB,QAAQ0+jB,GAGjD,OAAOtB,GAEXnC,EAAap+jB,UAAU8hkB,gBAAkB,SAAU93f,EAAO+3f,GACtD,IAAI1/jB,EAAkB0/jB,GAAtB,CAGA/3f,EAAQA,EAEJ+3f,EAAiB1zD,cACjBrkc,EAAMqkc,YAAc0zD,EAAiB1zD,YAAYpqgB,SAEhB,OAAjC89jB,EAAiBn5D,cACjB5+b,EAAM4+b,YAAY5G,WAAa+/D,EAAiBn5D,YAAY5G,WAC5Dh4b,EAAM4+b,YAAYE,eAAiBi5D,EAAiBn5D,YAAYE,eAChE9+b,EAAM4+b,YAAYG,mBAAqBg5D,EAAiBn5D,YAAYG,oBAExE,IAAK,IAAIjogB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GACzBougB,EAAY6yD,EAAiBvwV,KAAK1wO,GACtCwpE,EAAI4kc,UAAUxF,WAAawF,EAAUxF,WACrCp/b,EAAI4kc,UAAUvF,gBAAkBuF,EAAUvF,gBAC1Cr/b,EAAI4kc,UAAUtF,oBAAsBsF,EAAUtF,oBAC9Ct/b,EAAI4kc,UAAUrF,UAAYqF,EAAUrF,UACpCv/b,EAAI4kc,UAAUpF,eAAiBoF,EAAUpF,eACzCx/b,EAAI4kc,UAAUnF,mBAAqBmF,EAAUnF,mBAC7C,IAAK,IAAIzhf,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GACxB+kf,EAAa6B,EAAU1jc,MAAMljD,GACjCqkD,EAAKinK,YAAcy5R,EAAWz5R,YAC9BjnK,EAAK0gc,WAAW31M,WAAa21M,EAAW31M,WACxC/qP,EAAK0gc,WAAWvE,eAAiBuE,EAAWvE,eAC5Cn8b,EAAK0gc,WAAWtE,mBAAqBsE,EAAWtE,oBAGxD,IAAI3tf,EAAiB4uD,EAAM0kc,eAAc,GACrCI,EAAa9kc,EAAM6kc,oBAAoBzzf,GAE3C4uD,EAAMwmc,gBAAgB1B,EAAqD,SAAzC9kc,EAAM4+b,YAAYG,sBAMxDq1D,EAAap+jB,UAAUg/jB,eAAiB,SAAU10f,GAC9C,IAAI1vD,EAAQ,EACZ,GAAI0vD,EAAI2xb,aAAa76f,OAAS,EAC1B,IAAK,IAAIN,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IACzC8Z,GAAS0vD,EAAI2xb,aAAan7f,GAAGusgB,WAAWv6M,UAGhD,OAAOl4S,GAEXwjjB,EAAap+jB,UAAUq/jB,kBAAoB,SAAUr1f,GACjD,IAAK,IAAIlpE,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAI2vgB,EAAKzmc,EAAMiyb,aAAan7f,GACxBougB,EAAYuB,EAAGvB,UACfA,EAAUxF,WAAa,IACvBwF,EAAUvF,gBAAkBuF,EAAUhG,YACtCgG,EAAUtF,oBAAsB,SAEpC,IAAK,IAAIthf,EAAI,EAAGA,EAAImof,EAAGxU,aAAa76f,OAAQknB,IAAK,CAC7C,IAAIqkD,EAAO8jc,EAAGxU,aAAa3ze,GAC3BqkD,EAAK0gc,WAAWvE,eAAiBn8b,EAAK0gc,WAAWv6M,UACjDnmP,EAAK0gc,WAAWtE,mBAAqB,QAErCmG,EAAUrF,UAAY,IACtBqF,EAAUpF,eAAiBoF,EAAU/F,WACrC+F,EAAUnF,mBAAqB,WAI3Cq0D,EAAap+jB,UAAU2/jB,0BAA4B,SAAU31f,GAGzD,IAAK,IAFD8kc,EAAa9kc,EAAMqkc,YAAYS,WAC/BkzD,EAAqD,SAAzCh4f,EAAM4+b,YAAYG,mBACzBjogB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GAC7B,GAAIwpE,EAAI4kc,UAAUxF,WAAa,EAAG,CAC9B,IAAI9uf,EAAQovD,EAAMqkc,YAAYU,aAAa,EAAGzkc,EAAI4kc,UAAUxF,WAAYoF,EAAYkzD,GACpFp9jB,KAAKq9jB,sBAAsBrnjB,EAAO0vD,GAEtC,IAAK,IAAIhiD,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GAC5BqkD,EAAK2tN,YAAYtwN,EAAMqkc,YAAYU,aAAapic,EAAKinK,YAAajnK,EAAK0gc,WAAW31M,WAAYo3M,EAAYkzD,IAE1G13f,EAAI4kc,UAAUrF,UAAY,GAE1BjlgB,KAAKs9jB,qBAAqBl4f,EAAMqkc,YAAYU,aAAazkc,EAAI2xb,aAAa76f,OAAQkpE,EAAI4kc,UAAUrF,UAAWiF,EAAYkzD,GAAY13f,KAO/I8zf,EAAap+jB,UAAUiikB,sBAAwB,SAAUrnjB,EAAO0vD,GAC5D,IAAI4kc,EAAY5kc,EAAI4kc,UACpB,GAAIt0f,IAAUs0f,EAAUhG,YAKpB,GAJAgG,EAAUhG,YAActuf,EACc,SAAlCs0f,EAAUtF,sBACVsF,EAAUtF,oBAAsB,SAEE,UAAlCsF,EAAUtF,oBACVsF,EAAUvF,gBAAkBuF,EAAUhG,gBAErC,CAED,IAAI6H,EAAazmc,EAAI0ic,WAAW6B,oBAAoBvkc,EAAI0ic,WAAW0B,eAAc,IAC7E/sgB,EAAQ2oE,EAAI0ic,WAAW6D,sBAAsB3B,EAAUhG,YAAa6H,GACxE7B,EAAUvF,gBAAkBhogB,IAOxCy8jB,EAAap+jB,UAAUkikB,qBAAuB,SAAUtnjB,EAAO0vD,GAC3D,IAAI4kc,EAAY5kc,EAAI4kc,UAOpB,GANIt0f,IAAUs0f,EAAU/F,aACpB+F,EAAU/F,WAAavuf,GAEU,SAAjCs0f,EAAUnF,qBACVmF,EAAUnF,mBAAqB,SAEE,UAAjCmF,EAAUnF,mBACVmF,EAAUpF,eAAiBoF,EAAU/F,eAEpC,CAED,IAAI4H,EAAazmc,EAAI0ic,WAAW6B,oBAAoBvkc,EAAI0ic,WAAW0B,eAAc,IAC7E/sgB,EAAQ2oE,EAAI0ic,WAAW6D,sBAAsB3B,EAAU/F,WAAY4H,GACvE7B,EAAUpF,eAAiBnogB,IAG5By8jB,KCt8BPrkE,GAAwB,WAMxB,SAASA,EAAO3G,GACZ,IAAIzuf,EAAQC,KACZA,KAAKosD,SACLpsD,KAAKu9jB,uBAAwB,EAC7Bv9jB,KAAKwviB,oBAAiBt0iB,EACtB8E,KAAKyviB,kBAAev0iB,EAIpB8E,KAAKw9jB,kBAAmB,EAIxBx9jB,KAAKg6hB,iBAAc9+hB,EAInB8E,KAAK6+hB,aACL7+hB,KAAKy9jB,mBAAgBvikB,EACrB8E,KAAK09jB,qBAAuB,EAC5B19jB,KAAK29jB,2BAIL39jB,KAAK8+hB,cAAgB,EAIrB9+hB,KAAK44gB,gBAAa19gB,EAClB8E,KAAK49jB,iBAIL59jB,KAAK2rhB,gBAAiB,EAItB3rhB,KAAK69jB,2BAA4B,EAIjC79jB,KAAK+4hB,oBAAsB,SAAU18hB,GACjC,GAAImP,GAAQqb,SAAU,CAClB,IAAI2ne,EAASzuf,EAAMyuf,OACfsvE,EAAO,IAAI35iB,OAAOuF,OAAOC,aAAa,KAAM,KAC5Co0iB,EAAW,IAAI55iB,OAAOuF,OAAOC,aAAa,IAAK,KACnD6ke,EAAOrlf,OAASqlf,EAAOrlf,OAAOlM,QAAQ6gkB,EAAM,KAAK7gkB,QAAQ8gkB,EAAU,KACnE,IACIC,GADAhviB,EAAOw/d,EAAO8pC,YAAYr8gB,YAAYhf,QAAQ6gkB,EAAM,KAAK7gkB,QAAQ8gkB,EAAU,MACxD15iB,UAAU,GACjC,GAAImqe,EAAOkD,oBAAsBlD,EAAOwoC,qBAgBpC,OAfAxoC,EAAOwoC,sBAAuB,QACzBxoC,EAAOgV,MAAMtR,gBAAkB1D,EAAOgV,MAAM3U,kBACzCL,EAAOrlf,OAAOkb,UAAU,KAAO25iB,IAC3Bj+jB,EAAMk2E,UAAU2hK,SAEhB73O,EAAMk2E,UAAU14E,MAAMoyiB,yBAAyBnhD,EAAOv4a,UAAU14E,MAAMmuhB,cAAe3rhB,EAAMk2E,UAAU14E,MAAMoO,QAAU6if,EAAOrlf,OAAO3M,OAAS,IAC5IuD,EAAM63hB,gBAAgBomC,GACtBxvE,EAAOrlf,OAAS,IAAMugB,OAAOC,aAAa,KAAOq0iB,IAGjDj+jB,EAAM63hB,gBAAgBomC,GACtBxvE,EAAOrlf,OAAS,IAAMugB,OAAOC,aAAa,KAAOq0iB,KAM5D,GAAIxvE,EAAOkD,oBAAsBlD,EAAO0oC,kBAAsC,KAAlB1oC,EAAO9iQ,OAyBpE,OAxBI8iQ,EAAOrlf,OAAOkb,UAAU,KAAO25iB,EAC3Bj+jB,EAAMk2E,UAAU2hK,SAAW42Q,EAAOkD,oBAClClD,EAAOkD,oBAAqB,EAE5B3xf,EAAMk2E,UAAU14E,MAAMoyiB,yBAAyBnhD,EAAOv4a,UAAU14E,MAAMmuhB,cAAe3rhB,EAAMk2E,UAAU14E,MAAMoO,OAAS6if,EAAOrlf,OAAOkb,UAAU,GAAG7nB,QAC/IuD,EAAMk2E,UAAU6ye,kCACM,KAAlBt6D,EAAO9iQ,QAAiC,KAAhBsyU,GACxBj+jB,EAAM63hB,gBAAgBomC,IAGpBj+jB,EAAMk2E,UAAU2hK,UACtB42Q,EAAOkD,oBAAqB,EAC5B3xf,EAAM63hB,gBAAgBomC,IAGL,KAAhBA,GACLxvE,EAAOkD,oBAAqB,EAC5B3xf,EAAMk+jB,iBAEDzvE,EAAOrlf,OAAOkb,UAAU,KAAO25iB,GAAiC,KAAlBxvE,EAAO9iQ,SAC1D8iQ,EAAOkD,oBAAqB,EAC5B3xf,EAAM63hB,gBAAgB,WAE1BppC,EAAO0oC,kBAAmB,GAGzB,GAAI1oC,EAAO0oC,kBAAoB1oC,EAAOkD,qBAAuBlD,EAAOwoC,qBAAsB,CAC3F,GAAIgnC,EAAYxhkB,OAASgyf,EAAOrlf,OAAO3M,QACnCwhkB,IAAgBxvE,EAAOrlf,OAAOkb,UAAU,EAAGmqe,EAAOrlf,OAAO3M,OAAS,IAAMgyf,EAAO8pC,YAAYp4d,UAAU1jE,OAAS,EAE9G,YADAuD,EAAMk+jB,gBAGL,GAAsB,KAAlBzvE,EAAO9iQ,QACZ8iQ,EAAO8pC,YAAYp4d,UAAUsub,EAAO8pC,YAAYp4d,UAAU1jE,OAAS,KAAOktB,OAAOC,aAAa,KAS9F,OARA6ke,EAAOkD,oBAAqB,EAG5B3xf,EAAMk2E,UAAU14E,MAAMoyiB,yBAAyBnhD,EAAOv4a,UAAU14E,MAAMmuhB,cAAe3rhB,EAAMk2E,UAAU14E,MAAMoO,QAAU6if,EAAOrlf,OAAO3M,OAAS,IAC5IuD,EAAMk2E,UAAUh3D,IAAI0whB,yBAAyBnhD,EAAOv4a,UAAUh3D,IAAIysgB,cAAe3rhB,EAAMk2E,UAAUh3D,IAAItT,OAAS6if,EAAO9iQ,OAAOlvP,QAE5HuD,EAAMk2E,UAAU6ye,uCAChB/ojB,EAAM63hB,gBAAgBomC,GAKjB,OAAThviB,GAA0B,OAATA,GAA0B,MAATA,GAAsBw/d,EAAOgV,MAAMtR,iBAA8C,IAA5B1D,EAAOkoC,mBACjF,MAAT1ngB,GAA4B,MAAZA,EAAK,IAAuB,KAATA,GAAeA,EAAKxyB,OAASgyf,EAAOrlf,OAAO3M,QAC9EwhkB,IAAgBxvE,EAAOrlf,OAAOkb,UAAU,EAAGmqe,EAAOrlf,OAAO3M,OAAS,IAClEuD,EAAMk+jB,gBACFzvE,EAAO8pC,YAAYp4d,UAAU1jE,OAAS,GACtCuD,EAAM4xf,eAG2B,IAAhC3ie,EAAKzwB,QAAQiwf,EAAOrlf,SAAiB6lB,EAAKxyB,OAASgyf,EAAOrlf,OAAO3M,OACtEuD,EAAM63hB,gBAAgB5ogB,EAAK3K,UAAUmqe,EAAOrlf,OAAO3M,UAEb,IAAjCwyB,EAAKzwB,QAAQiwf,EAAOrlf,SAAkB6lB,EAAKA,EAAKxyB,OAAS,KAAOktB,OAAOC,aAAa,MAC5D,MAA1BqF,EAAKA,EAAKxyB,OAAS,IACjBwhkB,EAAYz+iB,OAAO,GAAG3J,cAAgBoojB,EAAY38jB,MAAM,KAAQmtf,EAAOrlf,OAAOkb,UAAU,IAEzFtkB,EAAMk2E,UAAU14E,MAAM0xiB,qBAAqBzgD,EAAOv4a,UAAU14E,MAAMmuhB,cAAe3rhB,EAAMk2E,UAAU14E,MAAMoO,QAAU6if,EAAOrlf,OAAO3M,OAAS,IAE5IuD,EAAM63hB,gBAAgBomC,IAED,IAAhBhviB,EAAKxyB,QACVuD,EAAM63hB,gBAAgB,UAI7B,CACD,IAAI5ogB,GAAAA,EAAOjvB,EAAMyuf,OAAO8pC,YAAYp4d,aACvBx2C,OAAOC,aAAa,KAEhB,OAATqF,GAA0B,OAATA,GAA0B,MAATA,GAAsBjvB,EAAMyjgB,MAAMtR,iBAAoD,IAAlCnyf,EAAMyuf,OAAOkoC,kBACnG32hB,EAAM63hB,gBAAgB5ogB,GAI1BjvB,EAAM63hB,gBAAgB,KAE1B73hB,EAAMyuf,OAAO8pC,YAAYp4d,UAAY,KAQ7ClgE,KAAKg5hB,QAAU,SAAU38hB,GAChB0D,EAAMyjgB,MAAMtR,gBACbnyf,EAAMw3gB,cAAcl7gB,GAExBA,EAAMspB,kBAEV3lB,KAAKwuf,OAASA,EACdxuf,KAAKg6hB,YAAc,IAAIw/B,GAAax5jB,KAAKwuf,OAAOgV,OAgyTpD,OA9xTAllgB,OAAOuJ,eAAestf,EAAO/5f,UAAW,iBACpCsM,IAAK,WACD,OAAO1H,KAAKwuf,OAAOgV,MAAMu0B,eAE7BpwhB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAestf,EAAO/5f,UAAW,aACpCsM,IAAK,WACD,GAAI1H,KAAKwuf,OACL,OAAOxuf,KAAKwuf,OAAOv4a,WAI3BtuE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAestf,EAAO/5f,UAAW,SACpCsM,IAAK,WACD,OAAO1H,KAAKwuf,OAAOgV,OAEvB77f,YAAY,EACZC,cAAc,IAElButf,EAAO/5f,UAAU2mC,cAAgB,WAC7B,MAAO,UAEXozd,EAAO/5f,UAAU8ikB,YAAc,SAAUz0iB,EAAM1qB,GAC3C,IAAImvhB,EAAYzkgB,EAChB,GAAIhsB,EAAkBsB,IAEiB,gBADnCmvhB,EAAYpvB,GAAcgB,UAAUouB,IACtB7pgB,UAAU,EAAG,IAAsB,CAE7C,IAAIvS,GADJo8gB,EAAYA,EAAU7pgB,UAAU,IAAIpU,QACd1R,QAAQ,OAC9BQ,EAAS,IAAMmvhB,EAAU7pgB,UAAU,EAAGvS,GAAO7B,OAAS,IAG9D,IAAIgnf,EAAY,IAAIC,GAChBjtc,EAAO,IAAIo9c,GAAWpQ,GACtB2I,EAAa,IAAIH,GAAgB,GACrCx1c,EAAK7vC,SAAS5V,KAAKo7f,GACnB,IAAIu+D,EAAgB,IAAIv1D,GACxBu1D,EAAcnviB,KAAOvF,EACrBwgC,EAAK7vC,SAAS5V,KAAK25jB,GACnB,IAAI5rD,EAAiB,IAAI9S,GAAgB,GACzC8S,EAAe3S,WAAaA,EAC5BA,EAAW2S,eAAiBA,EAC5Btod,EAAK7vC,SAAS5V,KAAK+tgB,GACnB,IAAI6rD,EAAkB,IAAIx1D,GAC1Bw1D,EAAgBpviB,KAAOjwB,EACvBkrD,EAAK7vC,SAAS5V,KAAK45jB,GACnB,IAAIz+D,EAAW,IAAIF,GAAgB,GACnCE,EAAS4S,eAAiBA,EAC1B5S,EAASC,WAAaA,EACtBA,EAAWD,SAAWA,EACtB4S,EAAe5S,SAAWA,EAC1B11c,EAAK7vC,SAAS5V,KAAKm7f,GACnBC,EAAW31c,KAAOA,EAClBgtc,EAAUI,aAAa7yf,KAAKylD,GAC5BjqD,KAAKwuf,OAAOhie,OAAOhoB,KAAKo7f,GACxB,IAAI+G,KACJA,EAAQnigB,KAAKyyf,GACbj3f,KAAKq+jB,sBAAsB13D,IAQ/BxR,EAAO/5f,UAAU85hB,WAAa,SAAUxwhB,EAAO45jB,IAC3CA,GAAwB7gkB,EAAkB6gkB,IAAiCA,KAEvEt+jB,KAAKg4hB,mBAAmB,cACxBh4hB,KAAKu+jB,mBAET,IAAIh6B,EAAWvkiB,KAAKwuf,OAAOjrf,OAAOu0f,WAAWpzf,QAC5BxJ,IAAbqpiB,EACAvkiB,KAAKmoiB,uBAAuB,YAAa5D,GAAU,GAAO,IAI1DvkiB,KAAKwuf,OAAOgV,MAAM9ma,OAAO4mc,WAAWh3e,KAAKuB,MAAM7tD,KAAKw+jB,qBAAsBlygB,KAAKuB,MAAM7tD,KAAKwuf,OAAO2oC,iBAAiBzvhB,IAAIhD,IAAS1E,KAAKwuf,OAAOjrf,QAC3IvD,KAAKk1hB,WAAWxwhB,IAEhB1E,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcq7B,oBAAuE,eAAjDpzjB,KAAK+3hB,cAAcq7B,mBAAmBpggB,QACrGhzD,KAAK+3hB,cAAcQ,wBAO3BpjC,EAAO/5f,UAAUu6b,IAAM,WACf31b,KAAKwjgB,MAAMtR,gBAAkBlyf,KAAKi2E,UAAU2hK,SAGhD53O,KAAKi2E,UAAUm4e,qBAAoB,IAMvCj5D,EAAO/5f,UAAUm2f,kBAAoB,WAC7Bvxf,KAAKwuf,OAAOgV,MAAMjiB,kBAAoBvhf,KAAKwuf,OAAOgV,MAAMliB,mBACxDthf,KAAKwuf,OAAOgV,MAAMjS,qBAO1B4D,EAAO/5f,UAAU6tiB,4BAA8B,SAAUiS,GACrDl7iB,KAAKs8jB,eAAet8jB,KAAKi2E,WACzBj2E,KAAKi2E,UAAU14E,MAAMsxiB,wBAAuB,GACxC7uiB,KAAKi2E,UAAU2hK,QACf53O,KAAKi2E,UAAUh3D,IAAI6vhB,oBAAoB9uiB,KAAKi2E,UAAU14E,OAGtDyC,KAAKi2E,UAAUh3D,IAAI4vhB,wBAAuB,GAE9C7uiB,KAAKi2E,UAAUk/d,sBAAwBn1iB,KAAKi2E,UAAUh3D,IAAI2b,SAAS7tB,EACnE/M,KAAKi2E,UAAU+le,qBAAqBd,IAMxC/lD,EAAO/5f,UAAUu2f,YAAc,WAC3B3xf,KAAKwuf,OAAO9iQ,OAAS,GACjB1rP,KAAKi2E,UAAU14E,MAAM05f,UAAUr/Q,WAA6C,IAAhC53O,KAAKi2E,UAAU14E,MAAMoO,QACjE3L,KAAKi2E,UAAU14E,MAAMmuhB,cAAc7Z,eAA+C,IAA9B7xgB,KAAKi2E,UAAUh3D,IAAItT,QACvE3L,KAAKi2E,UAAUh3D,IAAIysgB,cAAc7Z,cACjC7xgB,KAAKwuf,OAAOrlf,OAAS,GAGrBnJ,KAAKy+jB,qBAETz+jB,KAAKwuf,OAAOrlf,OAAS,IAAMugB,OAAOC,aAAa,KAAO3pB,KAAKwuf,OAAOrlf,OAClEnJ,KAAKwuf,OAAO8pC,YAAYp4d,UAAYlgE,KAAKwuf,OAAOrlf,OAChDnJ,KAAKwuf,OAAOv4a,UAAU0md,4BAA4B38hB,KAAKwuf,OAAOrlf,OAAO3M,SAOzE24f,EAAO/5f,UAAUqjkB,mBAAqB,WAClC,IAAIjwE,EAASxuf,KAAKwuf,OAClB,GAA4B,KAAxBxuf,KAAKi2E,UAAUjnD,KAAnB,CAKI,IAAInJ,EAAa,EACb2rhB,EAAaxxiB,KAAKi2E,UAAU14E,MAAMmuhB,cAAc3iB,UAAU/ogB,KAAKi2E,UAAU14E,MAAMoO,OAAQka,GACvF24I,EAASgzY,EAAWxwiB,QAExB,GADA6kB,EAAa2rhB,EAAW1/hB,WACT5W,IAAXsjK,EAAsB,CACtB,IAAIkga,EAAU1+jB,KAAKi2E,UAAUmue,sBAAsB5lZ,EAAQ34I,GACvDwK,EAAMquiB,EAAQ19jB,QAClB6kB,EAAa64iB,EAAQ5sjB,MACrB,IAAI6sjB,EAAa,EACjB,IAAKlhkB,EAAkB4yB,GAAM,CACzB,IAAIuuiB,GAAc,EAQlB,IAPIvuiB,aAAeu4e,IAAkB/if,EAAa,GAAKwK,EAAI45B,KAAK4nd,gBAC5DrjB,EAAOrlf,OAAS,IAEdq1J,aAAkBoqW,KACpBpqW,EAASx+J,KAAKi2E,UAAUwwe,uBAAuBjoZ,KAG3Cmga,EAAanwE,EAAOrlf,OAAO41F,YAAY,MAAQ,GAAKy/D,aAAkBoqW,IAC1E,GAAIpqW,EAAOk0W,wBAAwB9J,KAAkD,IAAhCpa,EAAOrlf,OAAO5K,QAAQ,KAAa,CAUpF,GATKqgkB,EAKDpwE,EAAOrlf,OAASq1J,EAAOxvI,KAAOw/d,EAAOrlf,QAJrCqlf,EAAOrlf,OAASq1J,EAAOxvI,KAAK3K,UAAU,EAAGwB,GACzC+4iB,GAAc,IAKlBpga,EAASA,EAAOk0W,wBAEMvJ,GAClB,MAEE3qW,aAAkBoqW,KACpBpqW,EAASx+J,KAAKi2E,UAAUwwe,uBAAuBjoZ,SAGlD,KAAMA,EAAOk0W,wBAAwB9J,IAAiB,CAClDg2D,EAKDpwE,EAAOrlf,OAASq1J,EAAOxvI,KAAOw/d,EAAOrlf,QAJrCqlf,EAAOrlf,OAASq1J,EAAOxvI,KAAK3K,UAAU,EAAGwB,GACzC+4iB,GAAc,GAKlB,MAGFpwE,EAAOrlf,OAAO3M,OAAS,GAAiD,MAA5Cgyf,EAAOrlf,OAAOqlf,EAAOrlf,OAAO3M,OAAS,IACvB,MAA5Cgyf,EAAOrlf,OAAOqlf,EAAOrlf,OAAO3M,OAAS,IAIrCmikB,GAAc,EACdnwE,EAAOrlf,OAAS,IAJhBw1jB,EAAanwE,EAAOrlf,OAAO41F,YAAY,KAM3CyvZ,EAAOrlf,OAASw1jB,EAAa,EAAInwE,EAAOrlf,OAASqlf,EAAOrlf,OAAOkb,UAAUs6iB,GACtC,IAA/BnwE,EAAOrlf,OAAO5K,QAAQ,MAAciwf,EAAOrlf,OAAO3M,QAAU,IAC5Dgyf,EAAOrlf,OAASqlf,EAAOrlf,OAAOkb,UAAU,IAG5C,IAAI0B,EAAW,EACX84iB,EAAgB7+jB,KAAKi2E,UAAUh3D,IAAIysgB,cAAc3iB,UAAU/ogB,KAAKi2E,UAAUh3D,IAAItT,OAAQoa,GACtFw7hB,EAAYsd,EAAc79jB,QAK9B,GAJA+kB,EAAW84iB,EAAc/sjB,MACzB4sjB,EAAU1+jB,KAAKi2E,UAAUmue,sBAAsB7C,EAAWx7hB,GAC1DsK,EAAMquiB,EAAQ19jB,QACd+kB,EAAW24iB,EAAQ5sjB,MACfue,EAAK,CACL,IAAIyuiB,GAAc,EAKlB,IAJIzuiB,aAAeu4e,IAAkB7if,EAAWsK,EAAI7zB,SAChDgyf,EAAO9iQ,OAAS,KAGZizU,EAAanwE,EAAO9iQ,OAAOntP,QAAQ,MAAQ,GAAKgjjB,aAAqB34C,IACzE,GAAI24C,EAAU9xK,oBAAoBm5H,KAAkD,IAAhCpa,EAAO9iQ,OAAOntP,QAAQ,KACjEugkB,EAKDtwE,EAAO9iQ,OAAS8iQ,EAAO9iQ,OAAS61T,EAAUvyhB,MAJ1Cw/d,EAAO9iQ,OAASr7N,EAAIrB,KAAK3K,UAAU0B,GACnC+4iB,GAAc,GAKlBvd,EAAYA,EAAU9xK,cAErB,KAAM8xK,EAAU9xK,oBAAoBm5H,IAAiB,CACjDk2D,EAKDtwE,EAAO9iQ,OAAS8iQ,EAAO9iQ,OAAS61T,EAAUvyhB,MAJ1Cw/d,EAAO9iQ,OAASr7N,EAAIrB,KAAK3K,UAAU0B,GACnC+4iB,GAAc,GAKlB,MAGRH,EAAanwE,EAAO9iQ,OAAOntP,QAAQ,KACnCiwf,EAAO9iQ,OAASizU,EAAa,EAAInwE,EAAO9iQ,OAAS8iQ,EAAO9iQ,OAAOrnO,UAAU,EAAGs6iB,WApGxFnwE,EAAOrlf,OAAS,IA+GxBgsf,EAAO/5f,UAAUwhiB,kBAAoB,SAAUvgiB,EAAOivB,EAAM44D,EAAO02B,GAC/D,IAAIv9G,EAAMhB,EAAMkhH,OAASlhH,EAAM8rB,QAC/B,IAAImD,GAAS44D,GAAU02B,EAkJlB,IAAI12B,GAAU54D,GAASsvF,EAcvB,GAAI12B,GAAS54D,IAASsvF,EACvB,OAAQv9G,GACJ,KAAK,GACI2C,KAAKwjgB,MAAMtR,gBACZlyf,KAAKwjgB,MAAMvtb,UAAUgke,gBAAgB,UAEzC,MACJ,KAAK,GACIj6iB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKwjgB,MAAMvtb,UAAUuke,iBAEzBn+iB,EAAMspB,iBACN,MACJ,KAAK,IACDtpB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKkniB,uBAAuB,WAAY,aAAa,GAEzD,MACJ,KAAK,IACD7qiB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKkniB,uBAAuB,WAAY,aAAa,GAEzD,MACJ,KAAK,IACD7qiB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAK++jB,wBAAwB,oBAIxC,IAAK76e,GAAS54D,GAAQsvF,EACvB,OAAQv9G,GACJ,KAAK,GACDhB,EAAMspB,kBACD3lB,KAAKwjgB,MAAMtR,gBAAkBlyf,KAAKwjgB,MAAM3U,kBACzC7uf,KAAKm6iB,4BAMjB,OAAQ98iB,GACJ,KAAK,EACDhB,EAAMspB,iBACN3lB,KAAKi+jB,gBACL,MACJ,KAAK,EACD5hkB,EAAMspB,iBACF3lB,KAAKwjgB,MAAMw7D,WACXh/jB,KAAKi2E,UAAUupe,cAAa,GAAM,GAEtC,MACJ,KAAK,GACDnjjB,EAAMspB,iBACN3lB,KAAKi/jB,iBACL,MACJ,KAAK,GACDj/jB,KAAKk/jB,eACL7ikB,EAAMspB,sBAzEd,OAAQtoB,GACJ,KAAK,EACDhB,EAAMspB,iBACF3lB,KAAKwjgB,MAAMw7D,WACXh/jB,KAAKi2E,UAAUupe,cAAa,GAAO,GAEvC,MACJ,KAAK,GACDx/iB,KAAKm/jB,mBACL9ikB,EAAMspB,sBA1Jd,OADA3lB,KAAKwuf,OAAOkoC,kBAAmB,EACvBr5hB,GACJ,KAAK,EACDhB,EAAMspB,iBACF3lB,KAAKwjgB,MAAMw7D,WACXh/jB,KAAKi2E,UAAUupe,cAAa,GAAO,GAEvC,MACJ,KAAK,GACDnjjB,EAAMspB,iBACN3lB,KAAKo/jB,kBACL,MACJ,KAAK,GACD/ikB,EAAMspB,iBACN3lB,KAAKmoiB,uBAAuB,gBAAiB,GAAG,GAAO,GACvD,MACJ,KAAK,GACD9riB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKmoiB,uBAAuB,cAAe,GAAG,GAAO,GAEzD,MACJ,KAAK,GACD9riB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKmoiB,uBAAuB,cAAe,GAAG,GAAO,GAEzD,MACJ,KAAK,GACD9riB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKmoiB,uBAAuB,cAAe,KAAK,GAAO,GAE3D,MACJ,KAAK,GACD9riB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAK+5iB,aAET,MACJ,KAAK,GACD19iB,EAAMspB,kBACD3lB,KAAKwjgB,MAAMtR,gBAAkBlyf,KAAKwjgB,MAAMtT,kBACzClwf,KAAKwjgB,MAAMtT,iBAAiBkC,iBAEhC,MACJ,KAAK,GACIpyf,KAAKwjgB,MAAMtR,gBACZlyf,KAAKs6iB,oBAAoB,UAE7Bj+iB,EAAMspB,iBACN,MACJ,KAAK,GACDtpB,EAAMspB,kBACD3lB,KAAKwjgB,MAAMlU,YAActvf,KAAKwjgB,MAAM7T,oBACrC3vf,KAAKwjgB,MAAM7T,kBAAkBlvH,WAAY,EACzCzgY,KAAKwjgB,MAAM7T,kBAAkBE,qBAAoB,IAErD,MACJ,KAAK,GACDxzf,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKg6iB,eAET,MACJ,KAAK,GACIh6iB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKs6iB,oBAAoB,WAE7Bj+iB,EAAMspB,iBACN,MACJ,KAAK,GACDtpB,EAAMspB,iBACF3lB,KAAKwjgB,MAAMpT,wBAA0Bpwf,KAAKwjgB,MAAMtR,gBAChDlyf,KAAKwjgB,MAAMpT,sBAAsB54X,OAErC,MACJ,KAAK,GACIx3H,KAAKwjgB,MAAMtR,gBACZlyf,KAAKs6iB,oBAAoB,QAE7Bj+iB,EAAMspB,iBACN,MACJ,KAAK,GACI3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKwjgB,MAAMvtb,UAAUske,iBAEzBl+iB,EAAMspB,iBACN,MACJ,KAAK,GACDtpB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKwjgB,MAAM/T,YAEf,MACJ,KAAK,GACIzvf,KAAKwjgB,MAAMtR,gBACZlyf,KAAKs6iB,oBAAoB,SAE7Bj+iB,EAAMspB,iBACN,MACJ,KAAK,GACDtpB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKwjgB,MAAMvtb,UAAUgke,gBAAgB,UAEzC,MACJ,KAAK,GACD59iB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKwjgB,MAAM8Q,OAAO3+E,MAEtB,MACJ,KAAK,GACG31b,KAAKwjgB,MAAMrU,sBACXnvf,KAAK+3hB,cAAcxpF,OACnBlyc,EAAMspB,kBAEV,MACJ,KAAK,GACG3lB,KAAKwjgB,MAAMrU,sBACXnvf,KAAK+3hB,cAAczpF,OACnBjyc,EAAMspB,kBAEV,MACJ,KAAK,IACDtpB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKkniB,uBAAuB,WAAY,aAAa,GAEzD,MACJ,KAAK,IACD7qiB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKkniB,uBAAuB,WAAY,aAAa,GAEzD,MACJ,KAAK,IACD7qiB,EAAMspB,iBACD3lB,KAAKwjgB,MAAMtR,gBACZlyf,KAAK++jB,wBAAwB,eAuFjD5pE,EAAO/5f,UAAU+jkB,iBAAmB,WAC3Bn/jB,KAAKwjgB,MAAMtR,gBACZlyf,KAAK43hB,gBAAgB,MAEzB53hB,KAAKi2E,UAAU6kd,4BAMnB3lC,EAAO/5f,UAAU6ikB,cAAgB,WACxBj+jB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKwjgB,MAAM1U,aAAauwE,cAE5Br/jB,KAAKi2E,UAAU6kd,4BAMnB3lC,EAAO/5f,UAAU8jkB,aAAe,WACvBl/jB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKwjgB,MAAM1U,aAAawwE,WAE5Bt/jB,KAAKi2E,UAAU6kd,4BAMnB3lC,EAAO/5f,UAAU6jkB,eAAiB,WACzBj/jB,KAAKwjgB,MAAMtR,iBACR1mf,GAAQqb,WACR7mB,KAAKwuf,OAAOkD,oBAAqB,GAErC1xf,KAAKwjgB,MAAM1U,aAAaywE,WAE5Bv/jB,KAAKi2E,UAAU6kd,4BAKnB3lC,EAAO/5f,UAAUw8hB,gBAAkB,SAAU5ogB,GACzC,IAAIjvB,EAAQC,KACPA,KAAKwjgB,MAAMtR,iBACRlyf,KAAKw/jB,gBACLt/jB,aAAaF,KAAKw/jB,gBAEtB17jB,EAAU9D,KAAKi2E,UAAUohc,UAAY,0BACrCr3gB,KAAKwjgB,MAAM1U,aAAaokE,WAAWlkiB,GAAM,GAEzChvB,KAAKw/jB,eAAiBr/jB,WAAW,WACzBJ,EAAMy/jB,gBACNt/jB,aAAaH,EAAMy/jB,gBAEnBz/jB,EAAMk2E,WAAal2E,EAAMk2E,UAAUohc,OACnCvzgB,EAAU/D,EAAMk2E,UAAUohc,OAAQ,8BAEvC,MAEPr3gB,KAAKi2E,UAAU6kd,4BAOnB3lC,EAAO/5f,UAAUugjB,iBAAmB,SAAUp9gB,EAAQh/B,GAClD,IAAIkgkB,EAAe,IAAIroE,GACnBsoE,EAAU1/jB,KAAKi2E,UAAUo8a,gBA+B7B,OA9BI9yf,GACAkgkB,EAAa9lE,WAAWp7d,GAEvB9gC,EAAkBiikB,EAAQzwgB,OAAS1wB,EAAO0wB,OAASywgB,EAAQzwgB,OAC5DwwgB,EAAaxwgB,KAAOywgB,EAAQzwgB,MAE3BxxD,EAAkBiikB,EAAQvwgB,SAAW5wB,EAAO4wB,SAAWuwgB,EAAQvwgB,SAChEswgB,EAAatwgB,OAASuwgB,EAAQvwgB,QAE9BuwgB,EAAQtwiB,SAAW,GAAKmP,EAAOnP,WAAaswiB,EAAQtwiB,WACpDqwiB,EAAarwiB,SAAWswiB,EAAQtwiB,UAE/B3xB,EAAkBiikB,EAAQlwiB,aAAe+O,EAAO/O,aAAekwiB,EAAQlwiB,aACxEiwiB,EAAajwiB,WAAakwiB,EAAQlwiB,YAEjC/xB,EAAkBiikB,EAAQ/gE,iBAAmBpge,EAAOoge,iBAAmB+gE,EAAQ/gE,iBAChF8gE,EAAa9gE,eAAiB+gE,EAAQ/gE,gBAErClhgB,EAAkBiikB,EAAQlhE,oBAAsBjge,EAAOige,oBAAsBkhE,EAAQlhE,oBACtFihE,EAAajhE,kBAAoBkhE,EAAQlhE,mBAExC/ggB,EAAkBiikB,EAAQjhE,YAAclge,EAAOkge,YAAcihE,EAAQjhE,YACtEghE,EAAahhE,UAAYihE,EAAQjhE,WAEhChhgB,EAAkBiikB,EAAQlyR,YAAcjvQ,EAAOivQ,YAAckyR,EAAQlyR,YACtEiyR,EAAajyR,UAAYkyR,EAAQlyR,WAEhC/vS,EAAkBiikB,EAAQhhE,gBAAkBnge,EAAOmge,gBAAkBghE,EAAQhhE,gBAC9E+gE,EAAa/gE,cAAgBghE,EAAQhhE,eAElC+gE,GASXtqE,EAAO/5f,UAAU83jB,WAAa,SAAUlkiB,EAAMyxW,GAC1C,IACIk/L,EADA1pf,EAAYj2E,KAAKwuf,OAAOv4a,UAExB2pf,GAAY,EAChB5/jB,KAAKk7hB,qBACLl7hB,KAAK4sc,YAAY,UACjB,IAAIwiH,EAAgBpvjB,KAAK6/jB,iBAAiB5pf,EAAU14E,OAWpD,GAVAyC,KAAKwuf,OAAOv4a,UAAU6pf,aAAe9/jB,KAAKwngB,qBAAqB4nD,EAAcn4D,UAAWm4D,EAAczjjB,OAAOuB,cACvG+oE,EAAU2hK,UAAY53O,KAAKwuf,OAAOv4a,UAAUmld,iBAC9Cp7hB,KAAKwuf,OAAO0sC,oBAAgD,SAA1Bjld,EAAU4ic,eAC5C5ic,EAAU8he,iBAAkB,EAC5B9he,EAAUgie,qBAAsB,EAChC2nB,EAAY5/jB,KAAK+/jB,uBAAuB9pf,GACxCA,EAAUgie,qBAAsB,EAChChie,EAAU8he,iBAAkB,GAEhCqX,EAAgBpvjB,KAAK6/jB,iBAAiB5pf,EAAU14E,OAC5CqikB,EAAW,CAIX,GAHA3pf,EAAUutb,MAAMliB,mBAAoB,EACpCthf,KAAKggkB,wBACLL,EAAiB1pf,EAAU14E,OACR05f,UAAUr/Q,UAAW,CACpC,IAAInwK,EAAO,IAAImhc,GACX62D,EAAez/jB,KAAK27iB,iBAAiBgkB,EAAe1oE,UAAU5E,iBAAiB,GACnF5qb,EAAK4qb,gBAAgBsH,WAAW8lE,GAChCh4f,EAAKz4C,KAAOA,EACZy4C,EAAKxd,KAAO01gB,EAAe1oE,UAAUI,aAAa,GAClD5vb,EAAKzoC,OAAS,IAAI6kM,GAAO,EAAG,EAAG,EAAG,GAClCp8J,EAAKxd,KAAK7vC,SAAS5V,KAAKijE,GACwC,WAA3Dk4f,EAAe1oE,UAAUhF,gBAAgBjvd,eACoB,UAA3D28hB,EAAe1oE,UAAUhF,gBAAgBjvd,gBACoB,IAAhE28hB,EAAe1oE,UAAUhF,gBAAgB+F,WAAWqC,SACpDslE,EAAe1oE,UAAUlqf,EAAI/M,KAAKwuf,OAAOmsB,iBAAiB5tgB,GAE9D/M,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBwzC,EAAe1oE,UAAW,EAAG,OAEjE,CACD,IAAI+R,EAAgB,EAChB4nC,EAAY+uB,EAAej0C,cAAc3iB,UAAU42D,EAAeh0jB,OAAQq9f,GAC1ExqW,EAASoyY,EAAU5viB,QACvBgogB,EAAgB4nC,EAAU9+hB,MAG1B,IADI2tjB,EAAez/jB,KAAK27iB,iBAAiBn9Y,EAAO6zV,iBAAiB,IAChDuM,aAAapgW,EAAO6zV,iBACjCryf,KAAKigkB,iBAAiBzha,EAAQvoF,EAAWjnD,EAAMg6e,OAE9C,CACD,IAAIk3D,EAAW,IAAIt3D,GACnBs3D,EAASlxiB,KAAOA,EAChBkxiB,EAASj2gB,KAAOu0G,EAAOv0G,KACvBi2gB,EAAS7tE,gBAAgBsH,WAAW8lE,GACpC,IAAIj9C,EAAchkX,EAAOsnW,aACzB,GAAIkD,IAAkBxqW,EAAOhiK,OACzBgiK,EAAOv0G,KAAK7vC,SAASuO,OAAO65f,EAAc,EAAG,EAAG09C,QAE/C,GAAsB,IAAlBl3D,EACLxqW,EAAOv0G,KAAK7vC,SAASuO,OAAO65f,EAAa,EAAG09C,OAE3C,CACD,GAAI1ha,aAAkBoqW,GAAgB,CAClC,IAAIu3D,EAAe,IAAIv3D,GACvBu3D,EAAal2gB,KAAOu0G,EAAOv0G,KAC3Bk2gB,EAAa9tE,gBAAgBsH,WAAWn7V,EAAO6zV,iBAC/C8tE,EAAanxiB,KAAOwvI,EAAOxvI,KAAK3K,UAAU2kf,GAC1CxqW,EAAOxvI,KAAOwvI,EAAOxvI,KAAK3tB,MAAM,EAAG2ngB,GACnCxqW,EAAOv0G,KAAK7vC,SAASuO,OAAO65f,EAAc,EAAG,EAAG29C,GAEpD3ha,EAAOv0G,KAAK7vC,SAASuO,OAAO65f,EAAc,EAAG,EAAG09C,GAEpDlgkB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBwzC,EAAe1oE,UAAWz4V,EAAOv0G,KAAK67c,aAAc,IAGjG9lgB,KAAKiviB,qBAAqBmgB,EAAcn4D,UAAWm4D,EAAczjjB,OAASqjB,EAAKxyB,QAAQ,GACvFwD,KAAKogkB,oBAEA3ikB,EAAkBuC,KAAK+3hB,gBAAmBt6hB,EAAkBuC,KAAK+3hB,cAAcq7B,qBAAyE,eAAjDpzjB,KAAK+3hB,cAAcq7B,mBAAmBpggB,SAC9IhzD,KAAKwuf,OAAO0sC,qBACZl7hB,KAAK+3hB,cAAcsR,gBACnBrpiB,KAAK+3hB,cAAcQ,wBAKvBv4hB,KAAKu6jB,SAAStkf,GAOlB,IAAKwqT,GAAam/L,IAAuB,MAAT5wiB,GAAyB,OAATA,GAA0B,OAATA,GAAgB,CAC7E,IACIqxiB,GAA0B5ikB,EADTw4E,EAAU+ic,qBAE3Bo0B,GAAS,EAIb,GAHe,OAATp+gB,IACFo+gB,EAASptiB,KAAKsgkB,oBAAoBrqf,EAAoB,OAATjnD,IAE7CqxiB,EACA,OAECjzB,GAEDptiB,KAAKugkB,2BAA2Btqf,GAAW,KAOvDk/a,EAAO/5f,UAAU88hB,cAAgB,SAAUlpgB,EAAMsvM,GAC7C,GAAIt+N,KAAKwuf,OAAOuoC,mBAAqB/ngB,IAAQsvM,EAA7C,CAIA,IAAI8wV,EAAgBpvjB,KAAK6/jB,iBAAiB7/jB,KAAKi2E,UAAU14E,OACrD+nT,EAAgBtlT,KAAKwngB,qBAAqB4nD,EAAcn4D,UAAWm4D,EAAczjjB,OAAOuB,YAE5FlN,KAAKkzjB,WAAWlkiB,GAAM,GACtBhvB,KAAKwuf,OAAOuoC,iBAAmB/ngB,EAE/B,IAAIzxB,EAAQyC,KAAKi2E,UAAU14E,MAC3ByC,KAAK+uiB,2BAA2BxxiB,EAAO+nT,GAEvC,IAAIy6O,EAAc,IAAImO,GAAaluiB,KAAKwjgB,OACxCu8B,EAAY4P,yBAAyBpyiB,EAAMmuhB,cAAenuhB,EAAMoO,OAASqjB,EAAKxyB,QAC9EwD,KAAKi2E,UAAUqqe,eAAehiV,EAAW/gO,EAAQwiiB,EAAaA,KAKlE5qC,EAAO/5f,UAAUolkB,mBAAqB,WAClC,IAAIvqf,EAAYj2E,KAAKwuf,OAAOv4a,UACxBx4E,EAAkBw4E,IAAcj2E,KAAKwjgB,MAAMtR,gBAAkBj8a,EAAU14E,MAAM05f,UAAUu1B,mBAG3FxshB,KAAK4sc,YAAY,gBACZ32X,EAAU2hK,SACX3hK,EAAU0ne,cAAc1ne,EAAU8ge,UAAY9ge,EAAU14E,MAAQ04E,EAAUh3D,KAAK,GAEnFjf,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtCthf,KAAKggkB,uBACLhgkB,KAAKygkB,cAAcxqf,GAAW,GAC9Bj2E,KAAKogkB,oBACLpgkB,KAAKu6jB,SAAStkf,GAAW,KAK7Bk/a,EAAO/5f,UAAUqlkB,cAAgB,SAAUxqf,EAAW2ye,GAClD,IACIttT,EACA2hT,EAFAyjB,EAAmB1gkB,KAAKi2E,UAAU14E,MAAM05f,UAAU6F,WAAW/F,cAAcgD,cAG/E,GAAI9jb,EAAU14E,MAAM05f,UAAUsR,cAAe,CACzC,IAAInjc,EAAQplE,KAAKwuf,OAAOlhc,OAAO4+d,eAAej2c,EAAU14E,MAAM05f,WAC9D7xb,EAAQA,EAAM2hc,cAAc/mgB,KAAKwuf,QACjC,IAAItpf,GAAe,EACuC,IAAtD+wE,EAAU14E,MAAM05f,UAAUuR,eAAev5R,WACzC/pO,GAAe,GAEnB,IAAIy7jB,EAAe,IAAIzpE,GACnB63B,EAAgB3pd,EAAMihc,uBACrBnhgB,EAMDo2P,EAAYl2L,GALZk2L,EAAYt7P,KAAK4gkB,WAAWx7f,EAAO6Q,EAAU14E,MAAM05f,UAAUuR,eAAeH,UAC5ErogB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2B/wR,EAAUxpP,MAAOwpP,EAAUg8P,gBAAiBh8P,GAAW,GACrGA,EAAYA,EAAUurQ,kBAAkBhhW,OAK5C,IAAI28W,EAAc,GACb/khB,EAAkBsxhB,IAAmBA,EAAcjyB,WAAW1pd,OAAOkoN,EAAUwhQ,cAAgB53f,GAKhGs9gB,EAAclnR,EAAUwqQ,aAAe,EACvC66D,EAAa7ujB,MAAQwpP,EAAUxpP,MAAQ,IALvC0wgB,EAAc,EACdm+C,EAAa7ujB,MAAQ,GAMzBwpP,EAAUg8P,gBAAgBD,aAAa1ue,OAAO65f,EAAa,EAAGm+C,GAC9DA,EAAarpE,gBAAkBh8P,EAAUg8P,gBACzCt3f,KAAK6gkB,sBAAsBF,GAAc,GACzC3gkB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2Bs0C,EAAa7ujB,MAAO6ujB,EAAarpE,gBAAiBqpE,GAAc,GAC9GrlU,EAAYqlU,MAEX,CACD,IAAIvR,EAAgBpvjB,KAAK6/jB,iBAAiB5pf,EAAU14E,OAChDuoB,EAAiB9lB,KAAKwngB,qBAAqB4nD,EAAcn4D,UAAWm4D,EAAczjjB,OAAOuB,YAE7FlN,KAAK8gkB,uBAAuB7qf,EAAWA,EAAU14E,MAAM05f,UAAWhhb,EAAU14E,MAAMmuhB,cAAez1c,EAAU14E,MAAMoO,QACjH3L,KAAK+uiB,2BAA2B94d,EAAU14E,MAAOuoB,GACjDw1O,EAAYrlL,EAAU14E,MAAM05f,UAAU4P,kBAAkBhhW,MAc5D,OAXAo3Y,EAAaj9iB,KAAK+gkB,gBAAgBzlU,EAAUwhQ,WAAY4jE,EAAkBplU,GAAWt+O,sBAC3Diqf,IACtBg2C,EAAWlwC,eAAe,GAE9B/sgB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2B4wB,EAAWnriB,MAAOmriB,EAAW3lD,gBAAiB2lD,GAAY,GACpGA,aAAsBh2C,KACtBg2C,EAAahne,EAAU41c,6BAA6BoxB,IAEpD2L,GACA3ye,EAAUgqe,gBAAgBhD,GAAY,GAEnCA,GAEX9nD,EAAO/5f,UAAU2lkB,gBAAkB,SAAUjkE,EAAY/F,EAAeiqE,GACpE,IAEIC,EAAgBjhkB,KAAKwuf,OAAOlhc,OAAO+0d,qBAAqB2+C,GAW5D,OATAhhkB,KAAKkhkB,mBAAmBnqE,EAAekqE,GAAe,GAEtDjhkB,KAAKmhkB,yBAAyBF,EAAcpmD,cAAc,GAE1D76gB,KAAKwuf,OAAOlhc,OAAO+td,mBAAmB4lD,EAAejhkB,KAAKwuf,OAAQyyE,EAAc1zZ,MAEhFvtK,KAAKohkB,iBAAiB,EAAGH,EAAcjkjB,YAEvChd,KAAKwuf,OAAO8zB,iBAAiB2+C,EAAclqE,cAAekqE,EAAc1zZ,MACjE0zZ,GAEX9rE,EAAO/5f,UAAU+lkB,yBAA2B,SAAUtmD,EAAct/Z,GAC5Dv7G,KAAKwuf,OAAOqJ,eAAegjB,KAI3B76gB,KAAKwuf,OAAOqJ,eAAegjB,QAGnC1lB,EAAO/5f,UAAUgmkB,iBAAmB,SAAUp0C,EAAY9kB,GACtD,IAAI/7N,EACA0uO,EAAe3S,EAAMpL,WAAW+d,aACpC,EAAG,CACC1uO,EAAS+7N,EAAMrB,kBACf,IAAK,IAAI3qgB,EAAI,EAAGA,EAAIiwS,EAAO3vS,OAAQN,IAC/BiwS,EAAOjwS,GAAG4V,MAAQk7gB,EAEtBA,IACA9kB,EAAQ/7N,EAAOtmI,MAAM2gW,0BACf/ogB,EAAkByqgB,IAAUA,EAAMpL,WAAW+d,eAAiBA,IAE5E1lB,EAAO/5f,UAAU8lkB,mBAAqB,SAAUnqE,EAAesqE,EAAiBC,GAC5E,IAAIC,EAAsBF,EAAgBxmD,aAEtC/d,EAAaukE,EACjB,GACQvkE,EAAWhrf,QAAUyvjB,GAAuBxqE,IAC5C+F,EAAW/F,cAAgBA,GAE3BuqE,EACAxkE,EAAWhrf,QAGXgrf,EAAWhrf,QAEfgrf,EAAaA,EAAW0J,yBACnB1J,IAGb3H,EAAO/5f,UAAUklkB,oBAAsB,SAAUrqf,EAAWurf,GAExD,IAAK/jkB,EADMw4E,EAAUg8a,gBAAgBo2C,WAEjC,OAAO,EAEX,IAAIo5B,GAAc,EACdC,GAAgB,EAChB14D,EAAgB,EAChB4nC,EAAY36d,EAAU14E,MAAMmuhB,cAAc3iB,UAAU9yb,EAAU14E,MAAMoO,OAAS,EAAGq9f,GAChFxqW,EAASoyY,EAAU5viB,QAEvB,GADAgogB,EAAgB4nC,EAAU9+hB,QACpB0sJ,aAAkBoqW,IACpB,OAAO,EAMX,IAJA,IAAInhc,EAAO+2F,EACPxvI,EAAOy4C,EAAKz4C,KAAK3K,UAAU,EAAG2kf,GAC9B24D,EAAW,EACXnlkB,EAAS,GACLiB,EAAkBgqE,EAAKirc,eAAe,CAE1C,KAAIjrc,EAAKirc,wBAAwB9J,KAA8C,OAA3Bnhc,EAAKirc,aAAa1jf,MAA0D,IAAzCy4C,EAAKirc,aAAa1jf,KAAK/e,OAAOzT,OAKrH,OAAO,EAJyB,OAA3BirE,EAAKirc,aAAa1jf,KAAiB2yiB,GAAY,GAAKnlkB,EAAyC,IAAhCirE,EAAKirc,aAAa1jf,KAAKxyB,OACrFirE,EAAOA,EAAKirc,aAKpBjrc,EAAO+2F,EACP,IAAI1sJ,EAAQ,EACR84G,EAAW57F,EAAK+vE,YAAY,MAEhC,IADAjtF,EAAS84G,GAAY,EAAKA,EAAW,EAAI57F,EAAK+vE,YAAY,KAAO,EAC1Dt3B,EAAKirc,wBAAwB9J,IAA4B,IAAV92f,GAAa,CAE/D,IAAI8vjB,GADJn6f,EAAOA,EAAKirc,cACY1jf,KAExBld,GADA84G,EAAWg3c,EAAa7ie,YAAY,QACf,EAAK6rB,EAAW,EAAIg3c,EAAa7ie,YAAY,KAAO,EAEzE/vE,GADAA,EAAOy4C,EAAKz4C,KAAOA,GACP3K,UAAUvS,GAG1B,IAAI0ngB,GADJxqf,EAAO8ve,GAAcgB,UAAU9we,IACP3K,UAAU,EAAG,GACjCy0f,EAAmB94gB,KAAKmghB,oBAAoBnxf,EAAK3K,UAAU,EAAG,IAQlE,GAPyB,SAArBy0f,GAA+B94gB,KAAK6hkB,kBAAkBroD,EAAmC,WAArBV,EAA+B9pf,GACnGyyiB,GAAc,EAETzhkB,KAAK8hkB,iBAAiB9yiB,KAC3B0yiB,GAAgB,EAChBD,GAAc,GAEdA,EAAa,CACbzhkB,KAAKg4hB,mBAAmB,YACxB,IAAI/gC,EAAYz4V,EAAOy4V,UAEvBhhb,EAAU14E,MAAM0xiB,qBAAqBh4C,EAAUI,aAAa,GAAIJ,EAAUI,aAAa,GAAG96b,UAAUiiG,EAAQwqW,EAAgB,IAC5H/yb,EAAUh3D,IAAIgwhB,qBAAqBh4C,EAAUI,aAAa,GAAI,GAC9Dr3f,KAAK4sc,YAAY,UACjB5sc,KAAK+hkB,uBAAuB9rf,GAAW,GACvCj2E,KAAKu6jB,SAAStkf,GAAW,GACzB,IAAIsjc,EAAkBioD,EAAQ,MAAQ,QACtChoD,EAAgBkoD,EAAsC,KAAO1yiB,EAAK3K,UAAU2K,EAAKxyB,OAAS,EAAGwyB,EAAKxyB,QAAlE,KAAOg9gB,EACvC,IAAIwoD,EAAkBhziB,EAAK3K,UAAU2K,EAAKxyB,OAAS,EAAGwyB,EAAKxyB,OAAS,GACpEs8gB,EAAoB4oD,EAAmC1hkB,KAAKmghB,oBAAoB6hD,GAA5ClpD,EACpC,IAAIrc,EAAY,IAAI4c,QAAWn+gB,GAC/BuhgB,EAAUqc,iBAAmBA,EACJ,WAArBA,EACa,MAAT9pf,GACAyte,EAAU+c,aAAe,IACzB/c,EAAUpK,gBAAgB7ie,WAAa,UAEzB,MAATR,IACLyte,EAAU+c,aAAe,KAI7B/c,EAAU+c,aAAeA,EAE7B/c,EAAU8c,gBAAkBA,EAC5B,IAAInc,EAAannb,EAAUg8a,gBAAgBmL,WAEvCX,EAAUxK,gBAAgBmL,WADb,IAAbukE,GAA6B,IAAXnlkB,EACqB4ggB,EAAa,GAAKukE,EAAWnlkB,EAE/DwsgB,EAAgB,EACkB5L,EAAmC,KAArB4L,EAAgB,GAAW,GAE3E5L,EAAa,EACqBA,EAAa,GAGb,GAE3CX,EAAUxK,gBAAgBrjP,iBAAmB,IACvC8yT,GAA0C,MAAzB1yiB,EAAK3K,UAAU,EAAG,IAAmC,OAApB29iB,EACpDvlE,EAAUtC,QAAU,EAGpBsC,EAAUtC,QAAU,EAExBn6f,KAAKiikB,gBAAgBhsf,EAAWwmb,GAC5Bz8f,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcq7B,oBAC5DpzjB,KAAK+3hB,cAAcQ,uBAGnBv4hB,KAAKu6jB,SAAStkf,GAGtB,OAAOwrf,GAEXtsE,EAAO/5f,UAAU+khB,oBAAsB,SAAUpjhB,GAC7C,OAAQA,GACJ,IAAK,IACL,IAAK,IACD,MAAO,SACX,IAAK,IACD,MAAO,UACX,IAAK,IACD,MAAO,WACX,IAAK,IACD,MAAO,WACX,IAAK,IACD,MAAO,YACX,IAAK,IACL,IAAK,IACD,MAAO,SACX,IAAK,KACL,IAAK,KACD,MAAO,cACX,QACI,MAAO,SAGnBo4f,EAAO/5f,UAAU6mkB,gBAAkB,SAAUhsf,EAAWwmb,GACxCxmb,EAAU14E,MACjB04E,EAAU8ge,WACH9ge,EAAUh3D,IAEtB,IAAI00F,EAAU,IAAIymZ,GACdp6f,KAAKwuf,OAAO55M,MAAMp4S,OAAS,EAC3Bm3G,EAAQ0mZ,OAASr6f,KAAKwuf,OAAO55M,MAAM50S,KAAKwuf,OAAO55M,MAAMp4S,OAAS,GAAG69f,OAAS,EAG1E1mZ,EAAQ0mZ,OAAS,EAErB,IAAI6nE,EAAkB,IAAI/oD,GACtB7rd,EAASttD,KAAKwuf,OACdlhc,EAAOknc,cAAch4f,OAAS,EAC9B0lkB,EAAgB3nE,eAAiBjtc,EAAOknc,cAAclnc,EAAOknc,cAAch4f,OAAS,GAAG+9f,eAAiB,EAGxG2nE,EAAgB3nE,eAAiB,EAErC5mZ,EAAQ4mZ,eAAiB2nE,EAAgB3nE,eACzC5mZ,EAAQ6mZ,aAAe0nE,EACvB50gB,EAAOknc,cAAchwf,KAAK09jB,GAC1BA,EAAgBv8e,OAAOnhF,KAAKi4f,GAC5BA,EAAUrD,UAAY8oE,EACtBjsf,EAAUg8a,gBAAgBw2C,QAAQ90b,GAClC19B,EAAUg8a,gBAAgBiJ,gBAAkB,GAEhD/F,EAAO/5f,UAAUymkB,kBAAoB,SAAUroD,EAAc2oD,EAAUnziB,GACnE,GAAImziB,EACA,MAAwB,KAAjB3oD,EAGP,IAAI1ngB,EAAQkd,EAAKzwB,QAAQi7gB,GACzB,OAAyB,MAAjBA,GAAyC,MAAjBA,GACR,MAAjBA,GAAyC,MAAjBA,IAAoE,KAA3Cxqf,EAAK3K,UAAUvS,EAAOkd,EAAKxyB,OAAS,IAGpG24f,EAAO/5f,UAAU0mkB,iBAAmB,SAAU9yiB,GAG1C,IAAK,IAFDtL,EACA0+iB,GAAS,EACJlmkB,EAAI,EAAGA,GAAK8yB,EAAKxyB,OAAS,EAAGN,IAAK,CACvC,GAAuB,MAAnB8yB,EAAKzP,OAAOrjB,GAAhB,CAIAwnB,EAAIxnB,EACJ,MAJIkmkB,GAAS,EAMjB,IAAI5oD,OAAet+gB,EAOnB,OALIs+gB,EADmB,MAAnBxqf,EAAKzP,OAAOmE,GACGsL,EAAKzP,OAAOmE,EAAI,GAGhBsL,EAAKzP,OAAOmE,GAExB0+iB,GAAUpikB,KAAK6hkB,kBAAkBroD,GAAc,EAAOxqf,IAEjEmme,EAAO/5f,UAAUinkB,uBAAyB,SAAUn6D,GAChD,IAAI36V,OAAOryK,EAUX,OATIgtgB,EAAM5Q,2BAA2BR,GACjCvpV,EAAO26V,EAAM5Q,gBAAgB/pV,KAExB26V,EAAM5Q,2BAA2B8O,GACtC74V,EAAO26V,EAAM5Q,gBAAgB/pV,KAExB26V,EAAM5Q,2BAA2B2O,KACtC14V,EAAO26V,EAAM5Q,gBAAgBwF,WAAWvvV,MAErCA,GAKX4nV,EAAO/5f,UAAU6kkB,iBAAmB,SAAUj/jB,EAASi1E,EAAWjnD,EAAMld,GACpE,GAAI9Q,aAAmB4ngB,GAAgB,CACnC5ngB,EAAQguB,KAAO8ve,GAAcvjZ,OAAOv6G,EAAQguB,KAAMld,EAAOkd,GACzD,IAAIioe,EAAYj2f,EAAQipD,KAAKgtc,UACzBxtN,EAAYwtN,EAAUI,aAAa94f,QAAQyC,EAAQipD,MACnD8zK,EAAe/8N,EAAQipD,KAAK7vC,SAAS7b,QAAQyC,GACjDhB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAWxtN,EAAW1rE,QAEtD/8N,aAAmB6ngB,GACxB7ogB,KAAKsikB,gBAAgBthkB,EAASi1E,EAAWjnD,EAAMld,GAE1C9Q,aAAmBy+f,GACE,IAAtBz+f,EAAQ0+f,UACR1/f,KAAKuikB,qBAAqBvhkB,EAASi1E,EAAWjnD,EAAMld,GAEzB,IAAtB9Q,EAAQ0+f,UACb1/f,KAAKwikB,yBAAyBxhkB,EAASi1E,EAAWjnD,EAAMld,GAGxD9R,KAAKyikB,mBAAmBzhkB,EAASi1E,EAAWjnD,EAAMld,GAGjD9Q,aAAmB8ngB,IACxB9ogB,KAAK0ikB,mBAAmB1hkB,EAASi1E,EAAWjnD,EAAMld,IAG1Dqjf,EAAO/5f,UAAUmnkB,qBAAuB,SAAU3iE,EAAY3pb,EAAWjnD,EAAMld,GAC3E,IAAI6wjB,EAAU,IAAI/5D,GAClB+5D,EAAQ3ziB,KAAOA,EACf,IAAIy6Q,EAAYm2N,EAAW31c,KAAKgtc,UAAUI,aAAa94f,QAAQqhgB,EAAW31c,MACtE24gB,EAAYhjE,EAAW31c,KAAK7vC,SAAS7b,QAAQqhgB,GACjD+iE,EAAQtwE,gBAAgBsH,WAAWiG,EAAWvN,iBAC9CuN,EAAW31c,KAAK7vC,SAASuO,OAAOi6iB,EAAW,EAAGD,GAC9CA,EAAQ14gB,KAAO21c,EAAW31c,KAC1BjqD,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBvsB,EAAW31c,KAAKgtc,UAAWxtN,EAAWm5R,IAE/EztE,EAAO/5f,UAAUsnkB,mBAAqB,SAAU1hkB,EAASi1E,EAAWjnD,EAAMld,GACtE,IAAI6wjB,EAAU,IAAI/5D,GAClB+5D,EAAQ3ziB,KAAOA,EACf,IAAIy6Q,EAAYzoS,EAAQipD,KAAKgtc,UAAUI,aAAa94f,QAAQyC,EAAQipD,MAChE24gB,EAAY5hkB,EAAQipD,KAAK7vC,SAAS7b,QAAQyC,GAC9C2hkB,EAAQtwE,gBAAgBsH,WAAW34f,EAAQqxf,iBAC3Crxf,EAAQipD,KAAK7vC,SAASuO,OAAOi6iB,EAAW,EAAGD,GAC3CA,EAAQ14gB,KAAOjpD,EAAQipD,KACvBjqD,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBnrhB,EAAQipD,KAAKgtc,UAAWxtN,EAAWm5R,IAE5EztE,EAAO/5f,UAAUonkB,yBAA2B,SAAUjwD,EAAgBt8b,EAAWjnD,EAAMld,GACnF,IAAI6/hB,EAAiB17d,EAAUmse,sBAAsB7vC,GACjD2/B,EAAaj8d,EAAUose,kBAAkB9vC,GACzC9qc,EAAO,IAAImhc,GACfnhc,EAAKz4C,KAAOA,EACZ,IAAI4ziB,EAAYrwD,EAAetod,KAAK7vC,SAAS7b,QAAQg0gB,GACjDzggB,IAAUyggB,EAAe/1gB,QACzBomkB,IAEAnlkB,EAAkBk0iB,IAAmBl0iB,EAAkBy0iB,GACvDzqe,EAAK4qb,gBAAgBsH,WAAW4Y,EAAetod,KAAKgtc,UAAU5E,iBAEzD50f,EAAkBk0iB,GACvBlqe,EAAK4qb,gBAAgBsH,WAAWu4C,EAAW7/C,iBAG3C5qb,EAAK4qb,gBAAgBsH,WAAWg4C,EAAet/C,iBAEnDkgB,EAAetod,KAAK7vC,SAASuO,OAAOi6iB,EAAW,EAAGn7f,GAClDA,EAAKxd,KAAOsod,EAAetod,KAC3B,IAAIw/O,EAAY8oO,EAAetod,KAAKgtc,UAAUI,aAAa94f,QAAQg0gB,EAAetod,MAClFjqD,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkB5Z,EAAetod,KAAKgtc,UAAWxtN,EAAWm5R,IAEnFztE,EAAO/5f,UAAUqnkB,mBAAqB,SAAU9iE,EAAU1pb,EAAWjnD,EAAMld,GACvE,IAAI21D,EAAO,IAAImhc,GACfnhc,EAAKz4C,KAAOA,EACZ,IAAI4ziB,EAAYjjE,EAAS11c,KAAK7vC,SAAS7b,QAAQohgB,GAC/Cl4b,EAAK4qb,gBAAgBsH,WAAWgG,EAAStN,iBACzCsN,EAAS11c,KAAK7vC,SAASuO,OAAOi6iB,EAAY,EAAG,EAAGn7f,GAChDA,EAAKxd,KAAO01c,EAAS11c,KACrB,IAAIw/O,EAAYk2N,EAAS11c,KAAKgtc,UAAUI,aAAa94f,QAAQohgB,EAAS11c,MACtEjqD,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBxsB,EAAS11c,KAAKgtc,UAAWxtN,EAAWm5R,IAE7EztE,EAAO/5f,UAAUknkB,gBAAkB,SAAUruX,EAAOh+H,EAAWjnD,EAAMld,GACjE,IAAI+wjB,EAAoB5sf,EAAUmse,sBAAsBnuW,GACpD6uX,EAAgB7sf,EAAUose,kBAAkBpuW,GAC5ChqJ,EAAOgqJ,EAAMhqJ,KACbjpD,EAAU,IAAI4ngB,GACd3R,EAAYhtc,EAAKgtc,UACjBxtN,EAAYwtN,EAAUI,aAAa94f,QAAQ0rD,GAC/CjpD,EAAQguB,KAAOA,EACf,IAAI4ziB,EAAY34gB,EAAK7vC,SAAS7b,QAAQ01M,GAClCniM,IAAUmiM,EAAMz3M,QAChBomkB,IAEAnlkB,EAAkBolkB,IAAsBplkB,EAAkBqlkB,GAC1D9hkB,EAAQqxf,gBAAgBsH,WAAW1C,EAAU5E,iBAExC50f,EAAkBolkB,GACvB7hkB,EAAQqxf,gBAAgBsH,WAAWmpE,EAAczwE,iBAGjDrxf,EAAQqxf,gBAAgBsH,WAAWkpE,EAAkBxwE,iBAEzDpoc,EAAK7vC,SAASuO,OAAOi6iB,EAAW,EAAG5hkB,GACnCA,EAAQipD,KAAOA,EACfjqD,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAWxtN,EAAWm5R,IAK/DztE,EAAO/5f,UAAU8/hB,mBAAqB,WAC9Bl7hB,KAAKwuf,OAAO0sC,qBACZl7hB,KAAKg4hB,mBAAmB,cAEpBh4hB,KAAKwuf,OAAOv4a,UAAU14E,MAAM05f,UAAUhF,gBAAgB+F,aAA2F,IAA7Eh4f,KAAKwuf,OAAOv4a,UAAU14E,MAAM05f,UAAUhF,gBAAgB+F,WAAWqC,QACrIr6f,KAAK0oiB,iBAAYxtiB,KAK7Bi6f,EAAO/5f,UAAUmlkB,2BAA6B,SAAUtqf,EAAW8sf,EAAS9rE,GACxE,IAAIjoe,EACAy4C,EACJ,GAAIs7f,EAEA/ziB,GADAy4C,EAAOwvb,EAAUv9W,UAAUt/H,SAAS68e,EAAUv9W,UAAUt/H,SAAS5d,OAAS,IAC9DwyB,SAEX,CACD,IAAIg6e,EAAgB,EAChB4nC,EAAY36d,EAAU14E,MAAMmuhB,cAAc3iB,UAAU9yb,EAAU14E,MAAMoO,OAAS,EAAGq9f,GAChFxqW,EAASoyY,EAAU5viB,QAEvB,GADAgogB,EAAgB4nC,EAAU9+hB,QACpB0sJ,aAAkBoqW,IACpB,OAGJ55e,GADAy4C,EAAO+2F,GACKxvI,KAAK3K,UAAU,EAAG2kf,GAElC,IAAIl3f,EAAQ,EACRkxjB,EAAeh0iB,EAAK+vE,YAAY,MAEpC,IADAjtF,EAASkxjB,GAAgB,EAAKA,EAAe,EAAIh0iB,EAAK+vE,YAAY,KAAO,EAClEt3B,EAAKirc,wBAAwB9J,IAA4B,IAAV92f,GAAa,CAE/D,IAAI8vjB,GADJn6f,EAAOA,EAAKirc,cACY1jf,KAExBld,GADAkxjB,EAAepB,EAAa7ie,YAAY,QACf,EAAKike,EAAe,EAAIpB,EAAa7ie,YAAY,KAAO,EACjF/vE,EAAOy4C,EAAKz4C,KAAOA,EAGvB,IAAIi0iB,GADJj0iB,EAAOA,EAAK3K,UAAUvS,IACG8D,cACrBstjB,GAAc,EAClB,GAAsC,aAAlCD,EAAc5+iB,UAAU,EAAG,IACW,YAAlC4+iB,EAAc5+iB,UAAU,EAAG,IAAoB4+iB,EAAczmkB,OAAS,GACpC,aAAlCymkB,EAAc5+iB,UAAU,EAAG,IAAqB4+iB,EAAczmkB,OAAS,GACrC,SAAlCymkB,EAAc5+iB,UAAU,EAAG,IAAiB4+iB,EAAczmkB,OAAS,GACjC,OAAlCymkB,EAAc5+iB,UAAU,EAAG,IAAe4+iB,EAAczmkB,OAAS,GAC/B,YAAlCymkB,EAAc5+iB,UAAU,EAAG,IAAoB4+iB,EAAczmkB,OAAS,EAC1E0mkB,GAAc,EACwB,SAAlCD,EAAc5+iB,UAAU,EAAG,IAAiB4+iB,EAAczmkB,OAAS,IACnEwyB,EAAO,UAAYA,OAGtB,CACD,IAAIm0iB,EAAUn0iB,EAAKzwB,QAAQ,KACvB6kkB,EAAWp0iB,EAAKzwB,QAAQ,KACxB4kkB,EAAU,GAAKA,EAAUC,GAAYA,EAAWp0iB,EAAKxyB,OAAS,IAC9D0mkB,GAAc,EACdl0iB,EAAO,UAAYA,GAG3B,GAAIk0iB,EAAa,CACb,IAAItiB,EAAW,IAAI1S,GAAaluiB,KAAKwuf,OAAOgV,OAC5Co9C,EAAS3R,qBAAqBxne,EAAKxd,KAAMwd,EAAKxd,KAAKsS,UAAUkL,EAAM31D,IACnE,IAAI+uiB,EAAS,IAAI3S,GAAaluiB,KAAKwuf,OAAOgV,OAC1C,GAAIu/D,EACAliB,EAAO5R,qBAAqBxne,EAAKxd,KAAMwd,EAAKxd,KAAK+nd,qBAGjD,GAAoD,IAAhD/7b,EAAUh3D,IAAIysgB,cAActxgB,SAAS5d,QAAyC,IAAzBy5E,EAAUh3D,IAAItT,OAAc,CACjF,IAAImkiB,EAAW75d,EAAUh3D,IAAIysgB,cAAczZ,aAC3C4uC,EAAO5R,qBAAqBa,EAAUA,EAAS99B,qBAG/C6uC,EAAO5R,qBAAqBh5d,EAAUh3D,IAAIysgB,cAAez1c,EAAUh3D,IAAItT,OAAS,GAGxF3L,KAAKqjkB,oBAAoBptf,EAAWjnD,EAAM4xhB,EAAUC,KAG5D1rD,EAAO/5f,UAAUiokB,oBAAsB,SAAUptf,EAAWn7C,EAAKwqR,EAAey6O,GAC5E//hB,KAAKg4hB,mBAAmB,uBACxB,IAAIsrC,EAAYtjkB,KAAK6/jB,iBAAiBv6Q,GAClC/nT,EAAQyC,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YACxElN,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcq7B,qBACzCpzjB,KAAK+3hB,cAAcq7B,mBAAmBuM,eAAiBpikB,GAG3D04E,EAAU14E,MAAMuxiB,oBAAoBxpP,GACpCrvO,EAAUh3D,IAAI6vhB,oBAAoB/O,GAElC,IAAIhlgB,EAAO/6B,KAAKurjB,mBAAmBt1e,GAC/B13C,EAAS,IAAI64d,GACjB74d,EAAOo7d,WAAW5+d,GAClB,IAAI4ke,EAAW3/f,KAAKujkB,uBAAuBzoiB,EAAKwqR,EAAey6O,EAAaxhgB,GAE5E03C,EAAU14E,MAAM0xiB,qBAAqBtvC,EAAS11c,KAAO01c,EAAa,KAAEpjc,UAAUojc,EAAU,IAExF1pb,EAAU14E,MAAMyyiB,mBAChB/5d,EAAUh3D,IAAI6vhB,oBAAoB74d,EAAU14E,OAC5C+lkB,EAAYtjkB,KAAK6/jB,iBAAiB5pf,EAAUh3D,KAC5C,IAAIA,EAAMjf,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YACtElN,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcq7B,oBACzCpzjB,KAAK+3hB,cAAcq7B,mBAAmBrzB,YAAc9ghB,EACpDjf,KAAK+3hB,cAAcQ,uBACnBv4hB,KAAKu6jB,SAAStkf,IAGdj2E,KAAKqzjB,4BAA4B,EAAG91jB,EAAO0hB,IAGnDk2e,EAAO/5f,UAAUookB,wBAA0B,SAAUvtf,GACjDj2E,KAAK4sc,YAAY,aACjB5sc,KAAKyjkB,gCAAgCxtf,EAAW,YAAa,UAAU,GACnEj2E,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAcsR,gBAEvBrpiB,KAAKu6jB,SAAStkf,GAAW,GAEzBj2E,KAAK4sc,YAAY,aACjB5sc,KAAKyjkB,gCAAgCxtf,EAAW,YAAa,WAAW,GACpEj2E,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAcsR,gBAEvBrpiB,KAAKu6jB,SAAStkf,GAAW,IAG7Bk/a,EAAO/5f,UAAUmokB,uBAAyB,SAAUzoiB,EAAKwqR,EAAey6O,EAAaxhgB,GACjF,IAAI03C,EAAYj2E,KAAKi2E,UACrBj2E,KAAKwuf,OAAOlhc,OAAO4sd,aAAc,EACjCl6gB,KAAKwjkB,wBAAwBvtf,GAC7Bj2E,KAAKwuf,OAAOlhc,OAAO4sd,aAAc,EAEjC,IAAIva,EAAW,IAAIF,GAAgB,GACnCE,EAAStN,gBAAgBsH,WAAWp7d,GACpCohe,EAAS11c,KAAOgsB,EAAUh3D,IAAIysgB,cAC9Bz1c,EAAU14E,MAAMuxiB,oBAAoB74d,EAAUh3D,KAE9Cjf,KAAK0jkB,iBAAiB/jE,GAEtB1pb,EAAU14E,MAAMuxiB,oBAAoBxpP,GACpCrvO,EAAUh3D,IAAI6vhB,oBAAoB74d,EAAU14E,OAE5C,IAAIshB,EAAQ7e,KAAK2jkB,qBAAqB1tf,EAAW13C,EAAQzD,GACrD2uQ,EAAYxzN,EAAU14E,MAAM05f,UAAUI,aAAa94f,QAAQsgB,EAAMorC,MACjEn4C,EAAQ+M,EAAMorC,KAAK7vC,SAAS7b,QAAQsgB,GAGxC,OAFA8gf,EAASyS,mBAAmBpygB,KAAKwuf,QACjCxuf,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl2c,EAAU14E,MAAM05f,UAAWxtN,EAAW33R,GACpE6tf,GAEXxK,EAAO/5f,UAAUuokB,qBAAuB,SAAU1tf,EAAW13C,EAAQzD,EAAK8oiB,GAEtE,IAAI/kjB,EAAQ,IAAI4gf,GAAgB,GAChC5gf,EAAMwze,gBAAgBsH,WAAWp7d,GACjC1f,EAAMorC,KAAOgsB,EAAU14E,MAAMmuhB,cAC7B1rhB,KAAK0jkB,iBAAiB7kjB,GACtB,IAAI4oD,EAAO,IAAImhc,GACfnhc,EAAK4qb,gBAAgBsH,WAAWp7d,GAE5BkpC,EAAKz4C,KADL40iB,EACY,mBAAsB9oiB,EAAM,KAG5B,eAAkBA,EAAM,KAExC2sC,EAAKxd,KAAOgsB,EAAU14E,MAAMmuhB,cAC5B1rhB,KAAK0jkB,iBAAiBj8f,GACtB,IAAI4wF,EAAY,IAAIonW,GAAgB,GAIpC,OAHApnW,EAAUg6V,gBAAgBsH,WAAWp7d,GACrC85H,EAAUpuG,KAAOgsB,EAAU14E,MAAMmuhB,cACjC1rhB,KAAK0jkB,iBAAiBrra,GACfx5I,GAEXs2e,EAAO/5f,UAAUyokB,qBAAuB,SAAUrla,GAW9C,GAVIA,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WACxClhW,EAAOmhW,WACH3/f,KAAKwuf,SACLxuf,KAAKwuf,OAAOgoC,cAAgBh4X,EAC5Bx+J,KAAKwuf,OAAO+nC,kBAAoB/3X,EAAOv0G,KAAKgtc,WAGhDz4V,EAAOmhW,cAAWzkgB,GAGtBsjK,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,UACvCjigB,EAAkB+gK,EAAOmhW,YACtB3/f,KAAKwuf,SACLxuf,KAAKwuf,OAAOgoC,cAAgBh4X,EAAOohW,WACnC5/f,KAAKwuf,OAAO+nC,kBAAoB/3X,EAAOv0G,KAAKgtc,WAEhDz4V,EAAOohW,WAAW2S,oBAAiBr3gB,EACnCsjK,EAAOmhW,SAAS4S,oBAAiBr3gB,QAGpC,GAAIsjK,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WAC7ClhW,EAAOohW,WAAY,CACdnigB,EAAkBuC,KAAKwuf,UACxBxuf,KAAKwuf,OAAOgoC,cAAgBh4X,EAAOohW,WACnC5/f,KAAKwuf,OAAO+nC,kBAAoB/3X,EAAOv0G,KAAKgtc,WAEhD,IAAI6sE,EAAa9jkB,KAAKwuf,OAAOhie,OAAOjuB,QAAQigK,EAAOohW,aAC/B,IAAhBkkE,GACA9jkB,KAAKwuf,OAAOhie,OAAO7D,OAAOm7iB,EAAY,GAE1Ctla,EAAOohW,gBAAa1kgB,IAIhCi6f,EAAO/5f,UAAUmwjB,mBAAqB,SAAUt1e,GAC5C,GAAIA,EAAU14E,MAAM05f,UAAUr/Q,UAC1B,OAAO3hK,EAAU14E,MAAM05f,UAAU5E,gBAIjC,OADWp8a,EAAU14E,MAAMmuhB,cAAc3iB,UAAU9yb,EAAU14E,MAAMoO,OAAQ,GAC/D3K,QAAQqxf,iBAU5B8C,EAAO/5f,UAAU2okB,gBAAkB,SAAUjpiB,EAAK6xhB,EAAapojB,EAAQq/jB,GACnE,IAAI3tf,EAAYj2E,KAAKwuf,OAAOv4a,UAC5B,GAAIA,EAAU14E,MAAM05f,UAAUuR,iBAAmBvyb,EAAUh3D,IAAIg4e,UAAUuR,eAGzE,GAAIjkgB,EAEAvE,KAAKgkkB,wBAAwB/tf,EAAWn7C,EAAK6xhB,EAAaiX,OAEzD,CAGD,IAAIt+Q,EAAgBrvO,EAAU14E,MAC1BwiiB,EAAc9pd,EAAUh3D,IACvBg3D,EAAU8ge,YACXzxP,EAAgBrvO,EAAUh3D,IAC1B8ghB,EAAc9pd,EAAU14E,OAE5B,IAAI0mkB,EAAqB,IAAI/1B,GAAaluiB,KAAKwuf,OAAOgV,OACtDygE,EAAmBn1B,oBAAoBxpP,GACvC,IAAIvqR,EAAO/6B,KAAKurjB,mBAAmBt1e,GAC/B13C,EAAS,IAAI64d,QAAiBl8f,GAClCqjC,EAAOo7d,WAAW5+d,GAClB/6B,KAAKg4hB,mBAAmB,mBACxB,IAAIsrC,EAAYtjkB,KAAK6/jB,iBAAiBv6Q,GAClC/nT,EAAQyC,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YACxElN,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcq7B,qBAEzCpzjB,KAAK+3hB,cAAcq7B,mBAAmBuM,eAAiB3/jB,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,aAE3HlN,KAAKwjkB,wBAAwBvtf,GAC7Bj2E,KAAKwuf,OAAOlhc,OAAO4sd,aAAc,EACjC50N,EAAcwpP,oBAAoB/O,GAElC,IAAIpgC,EAAW,IAAIF,GAAgB,GACnCE,EAAStN,gBAAgBsH,WAAWp7d,GACpCohe,EAAS11c,KAAOgsB,EAAUh3D,IAAIysgB,cAC9BpmO,EAAcwpP,oBAAoB/O,GAElC//hB,KAAK0jkB,iBAAiB/jE,GAEtBr6M,EAAcwpP,oBAAoBm1B,GAClClkC,EAAY+O,oBAAoBxpP,GAEhC,IAAIzmS,EAAQ7e,KAAK2jkB,qBAAqB1tf,EAAW13C,EAAQzD,EAAK8oiB,GAC9DjkE,EAASyS,mBAAmBpygB,KAAKwuf,QACjC,IAAI/kN,EAAYxzN,EAAU14E,MAAM05f,UAAUI,aAAa94f,QAAQsgB,EAAMorC,MACjEn4C,EAAQ+M,EAAMorC,KAAK7vC,SAAS7b,QAAQsgB,GACxC7e,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl2c,EAAU14E,MAAM05f,UAAWxtN,EAAW33R,GAC3E,IAAI+ggB,EAAalT,EAAS11c,KAC1BgsB,EAAUo2H,QAAQwmU,EAAYA,EAAWt2c,UAAUojc,EAAUA,EAASnjgB,SAAS,GAC/E8mkB,EAAYtjkB,KAAK6/jB,iBAAiB9/B,GAClC,IAAI9ghB,EAAMjf,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YACtElN,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcq7B,oBAEzCpzjB,KAAK+3hB,cAAcq7B,mBAAmBrzB,YAAc//hB,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YACpHlN,KAAK+3hB,cAAcQ,wBAGnBv4hB,KAAKqzjB,4BAA4B,EAAG91jB,EAAO0hB,KAIvDk2e,EAAO/5f,UAAU4okB,wBAA0B,SAAU/tf,EAAWn7C,EAAK6xhB,EAAaiX,GAC9E,IAAInmkB,EAAkBw4E,EAAU14E,SAG5ByC,KAAKw4gB,cAAcvic,EAAWn7C,EAAK6xhB,GAAvC,CAGA3sjB,KAAK4sc,YAAY,mBACjB,IAAIgzH,GAAY,EAIhB,GAHK3pf,EAAU2hK,UACXgoV,EAAY5/jB,KAAK+/jB,uBAAuB9pf,IAExC2pf,EAAW,CAEX,IAAI7kiB,EAAO/6B,KAAKurjB,mBAAmBt1e,GAC/B13C,EAAS,IAAI64d,GACjB74d,EAAOo7d,WAAW5+d,GAClB/6B,KAAKkkkB,wBAAwBjuf,EAAWn7C,EAAK6xhB,EAAapuhB,EAAQqliB,MAM1EzuE,EAAO/5f,UAAU8okB,wBAA0B,SAAUjuf,EAAWn7C,EAAK6xhB,EAAapuhB,EAAQqliB,GACtF5jkB,KAAKggkB,uBACL/pf,EAAUutb,MAAMliB,mBAAoB,EACpC,IAEItgf,KACA4+f,EAAa,IAAIH,GAAgB,GACrCz+f,EAAQwD,KAAKo7f,GACb,IAAIn4b,EAAO,IAAImhc,GAEXnhc,EAAKz4C,KADL40iB,EACY,mBAAsB9oiB,EAAM,KAG5B,eAAkBA,EAAM,KAExC95B,EAAQwD,KAAKijE,GACb,IAAI8qc,EAAiB,IAAI9S,GAAgB,GACzCz+f,EAAQwD,KAAK+tgB,GACR90gB,EAAkBkvjB,IAAgC,KAAhBA,KACnCllf,EAAO,IAAImhc,IACNvW,gBAAgB7kN,UAAY,SACjC/lO,EAAK4qb,gBAAgBoM,UAAY,UACjCh3b,EAAKz4C,KAAO29hB,EACZ3rjB,EAAQwD,KAAKijE,IAEjB,IAAIk4b,EAAW,IAAIF,GAAgB,GACnCz+f,EAAQwD,KAAKm7f,GACb3/f,KAAKmkkB,cAAcnjkB,GACHi1E,EAAU14E,MAAM05f,UAChC0I,EAASyS,mBAAmBpygB,KAAKwuf,SACe,IAA5Cxuf,KAAKwuf,OAAOhie,OAAOjuB,QAAQqhgB,IAC3B5/f,KAAKwuf,OAAOhie,OAAOhoB,KAAKo7f,GAEfD,EAAS11c,KAAKsS,UAAUojc,EAAU,GAC/C1pb,EAAUo2H,QAAQszT,EAAS11c,KAAM01c,EAAS11c,KAAKsS,UAAUojc,EAAUA,EAASnjgB,SAAS,GACrFwD,KAAKogkB,oBACLpgkB,KAAKu6jB,SAAStkf,GAAW,IAE7Bk/a,EAAO/5f,UAAUsokB,iBAAmB,SAAU1ikB,EAAS+ikB,GACnD/jkB,KAAK4sc,YAAY,gBACjB5sc,KAAKokkB,wBAAwBpkkB,KAAKwuf,OAAOv4a,UAAWj1E,GAChDhB,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAcsR,iBAM3Bl0C,EAAO/5f,UAAUipkB,2BAA6B,SAAUpuf,EAAWuoF,EAAQ8la,GACnEtkkB,KAAKukkB,sBACLtuf,EAAUutb,MAAMliB,mBAAoB,GAEnCrra,EAAU2hK,SACX53O,KAAK+/jB,uBAAuB9pf,GAEhCj2E,KAAKggkB,uBACLhgkB,KAAKmkkB,eAAe3la,IAChBx+J,KAAKwkkB,iBAAiBvuf,IACtBj2E,KAAKykkB,sBAAsBxuf,EAAU14E,OAAO,GAEhDyC,KAAKuxf,qBAST4D,EAAO/5f,UAAUo9gB,cAAgB,SAAUvic,EAAWn7C,EAAK6xhB,EAAaiX,GACpE,IAAIhkE,EAAa3pb,EAAU+ic,oBAC3B,GAAIv7gB,EAAkBmigB,GAClB,OAAO,EAEX5/f,KAAK4sc,YAAY,mBACjB5sc,KAAKu9jB,sBAAwB9/jB,EAAkBuC,KAAK+3hB,gBAC5C/3hB,KAAK+3hB,eAAiBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,wBACnE,IAAIw7B,EAAc,GACdhY,GAAgB,EAEhB3xhB,EAAO/6B,KAAKurjB,mBAAmBt1e,GAC/B13C,EAAS,IAAI64d,GACjB74d,EAAOo7d,WAAW5+d,GAClB,IAAIw3e,OAAiBr3gB,EACrB,IAAKuC,EAAkBmigB,EAAW2S,gBAAiB,CAC/CA,EAAiB3S,EAAW2S,eAE5B,IAAIoyD,EAAW1uf,EAAUw2e,wBAAwB7sD,EAAW2S,eAAetod,KAAKgtc,UAAW2I,EAAW2S,eAAgB3S,EAAWD,SAAU+sD,EAAenuhB,GAC1JmmiB,EAAcC,EAAShY,YACvBD,EAAgBiY,EAASjY,cACzBnuhB,EAASomiB,EAASpmiB,OAEtB,IAAI5yB,EAASi0f,EAAW31c,KAAKsS,UAAUqjc,EAAY,GAKnD,GAJA3pb,EAAU14E,MAAM0xiB,qBAAqBrvC,EAAW31c,KAAMt+C,GACtDA,EAASi0f,EAAWD,SAAS11c,KAAKsS,UAAUqjc,EAAWD,SAAU,GACjE1pb,EAAUh3D,IAAIgwhB,qBAAqBrvC,EAAWD,SAAS11c,KAAMt+C,GAC7D3L,KAAK+hkB,uBAAuB9rf,GAAW,IAClCy2e,GAAiBgY,IAAgB/X,GAAelvjB,EAAkB80gB,GACnEvygB,KAAKkkkB,wBAAwBjuf,EAAWn7C,EAAK6xhB,EAAapuhB,EAAQqliB,OAEjE,CAED5jkB,KAAKggkB,uBACL,IAAI4E,EAAgB,IAAInlE,GAAgB,GACxCmlE,EAAcvyE,gBAAgBsH,WAAWiG,EAAWvN,iBACpDuyE,EAAc36gB,KAAOgsB,EAAU14E,MAAMmuhB,cACrC1rhB,KAAK6kkB,qBAAqBD,GAC1B,IAAIn9f,EAAO,IAAImhc,GACfnhc,EAAK4qb,gBAAgBsH,WAAWiG,EAAWvN,iBAEvC5qb,EAAKz4C,KADL40iB,EACY,mBAAsB9oiB,EAAM,KAG5B,eAAkBA,EAAM,KAExC2sC,EAAKxd,KAAOgsB,EAAU14E,MAAMmuhB,cAC5B1rhB,KAAK6kkB,qBAAqBp9f,GAC1B,IAAIrb,EAAQpsD,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,uBACjDlpiB,KAAK+3hB,cAAcmR,uBAAuB47B,aAAe9kkB,KAAKosD,MAClEpsD,KAAK+kkB,wBAAwB9uf,EAAW7pB,EAAOmmd,GAChCt8b,EAAUh3D,IAAIysgB,cAAc3iB,UAAU9yb,EAAUh3D,IAAItT,OAAQ,GAAG3K,QACrEoxgB,mBAAmBpygB,KAAKwuf,QACjC,IAAIyI,EAAY2tE,EAAc36gB,KAAKgtc,UAC/BxtN,EAAYm7R,EAAc36gB,KAAKgtc,UAAUI,aAAa94f,QAAQqmkB,EAAc36gB,MAC5E8zK,EAAe6mW,EAAc36gB,KAAK7vC,SAAS7b,QAAQqmkB,GACvD5kkB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAWxtN,EAAW1rE,GAC3D9nJ,EAAUo2H,QAAQu4X,EAAcjlE,SAAS11c,KAAMt+C,GAAQ,GACvD3L,KAAKogkB,oBACLpgkB,KAAKu6jB,SAAStkf,GAAW,GAI7B,OAFAj2E,KAAKu9jB,uBAAwB,EAC7Bv9jB,KAAKosD,UACE,GAGX+oc,EAAO/5f,UAAU2pkB,wBAA0B,SAAU9uf,EAAW7pB,EAAOmmd,GAGnE,IAAK,IADDtJ,GAAY,EACP/sgB,EAAIkwD,EAAM5vD,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACxC,IAAIqE,EAAO6rD,EAAMlwD,GAEjB,IAAK+sgB,EAAW,CACZ,GAAIsJ,IAAmBhygB,EAGlB,CACD,GAAIA,aAAgB22f,IAAmB32f,IAASgygB,EAAetod,KAAKgtc,UAAW,CAC3EgS,GAAY,EACZ,IAAIhS,OAAY/7f,EAChB,GAAIgB,IAAMkwD,EAAM5vD,OAAS,EAAG,CACxBy6f,EAAYhhb,EAAU14E,MAAM05f,UAC5B,IAAI22D,EAAiBr7C,EAAetod,KAAKgtc,UACzCj3f,KAAKglkB,4BAA4BpX,EAAgB33e,EAAWs8b,QAG5Dtb,EAAYj3f,KAAKilkB,qBAAqB1yD,EAAetod,KAAKgtc,UAAWsb,GACrEvygB,KAAKklkB,gBAAgBjuE,GAAW,GAEpChhb,EAAUgqe,gBAAgBhqe,EAAUq7d,sBAAsBr6C,IAAY,GAE1E,SAjBAgS,GAAY,EAoBhB1ogB,aAAgB4xgB,GAChBnygB,KAAK6kkB,qBAAqBtkkB,EAAKlB,SAE1BkB,aAAgBkmgB,IACrBzmgB,KAAKmlkB,YAAY5kkB,EAAKlB,WAMlC81f,EAAO/5f,UAAU4pkB,4BAA8B,SAAU/tE,EAAWhhb,EAAWs8b,GAG3E,IAAK,IAFD9oO,EAAYwtN,EAAUI,aAAa94f,QAAQg0gB,EAAetod,MAC1D8zK,EAAek5R,EAAUI,aAAa5tN,GAAWrvR,SAAS7b,QAAQg0gB,GAC7D7uf,EAAI+lR,EAAW/lR,EAAIuze,EAAUI,aAAa76f,OAAQknB,IAAK,CAC5D,IAAImvf,EAAa5b,EAAUI,aAAa3ze,GACpCA,IAAM+lR,IACN1rE,EAAe,GAEnB,IAAK,IAAI7hO,EAAI6hO,EAAc7hO,EAAI22gB,EAAWz4f,SAAS5d,OAAQN,IACvD8D,KAAK6kkB,qBAAqBhyD,EAAWz4f,SAASle,GAAGmD,WAI7D81f,EAAO/5f,UAAU6pkB,qBAAuB,SAAUG,EAAc7yD,GAC5D,IAAItb,EAAY,IAAIC,GACpBD,EAAU5E,gBAAgBsH,WAAWyrE,EAAa/yE,iBAClD4E,EAAUhF,gBAAgB0H,WAAWyrE,EAAanzE,iBAGlD,IAAK,IAFDxoN,EAAY27R,EAAa/tE,aAAa94f,QAAQg0gB,EAAetod,MAC7D8zK,EAAeqnW,EAAa/tE,aAAa5tN,GAAWrvR,SAAS7b,QAAQg0gB,GAChE7uf,EAAI+lR,EAAW/lR,EAAI0hjB,EAAa/tE,aAAa76f,OAAQknB,IAAK,CAC/D,IAAImvf,EAAauyD,EAAa/tE,aAAa3ze,GACvCA,IAAM+lR,IACN1rE,EAAe,GAEnB,IAAK,IAAI7hO,EAAI6hO,EAAc7hO,EAAI22gB,EAAWz4f,SAAS5d,OAAQN,IACvD+6f,EAAUI,aAAa,GAAGj9e,SAAS5V,KAAKqugB,EAAWz4f,SAASle,IAGpE,OAAO+6f,GAKX9B,EAAO/5f,UAAUu8gB,gBAAkB,WAC/B,IAAI33gB,KAAKwjgB,MAAMtR,eAAf,CAGA,IAAIj8a,EAAYj2E,KAAKi2E,UACjB2pb,EAAa3pb,EAAU+ic,oBAC3B,IAAIv7gB,EAAkBmigB,GAAtB,CAGA,IAAID,EAAWC,EAAWD,SACtB4S,EAAiB3S,EAAW2S,eAC5B0xD,EAAqB,IAAI/1B,GAAaj4d,EAAUutb,OAEpDygE,EAAmBh1B,qBAAqBrvC,EAAW31c,KAAO21c,EAAe,KAAErjc,UAAUqjc,EAAY,IACjG,IAAIylE,EAAyB,IAAIn3B,GAAaj4d,EAAUutb,OAExD6hE,EAAuBp2B,qBAAqB18B,EAAetod,KAAOsod,EAAmB,KAAEh2c,UAAUg2c,EAAgBA,EAAe/1gB,SAChIwD,KAAKg4hB,mBAAmB,mBACxB/hd,EAAU14E,MAAM0xiB,qBAAqBtvC,EAAS11c,KAAO01c,EAAa,KAAEpjc,UAAUojc,EAAU,IACxF1pb,EAAUh3D,IAAI6vhB,oBAAoB74d,EAAU14E,OAC5CyC,KAAKs/jB,WACLrpf,EAAU14E,MAAMuxiB,oBAAoBu2B,GACpCrlkB,KAAK4sc,YAAY,aACjB5sc,KAAKyjkB,gCAAgCxtf,EAAW,YAAa,QAAQ,GACjEj2E,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAcsR,gBAGvBrpiB,KAAK4sc,YAAY,aACjB5sc,KAAKyjkB,gCAAgCxtf,EAAW,iBAAa/6E,GAAW,GACpE8E,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAcsR,gBAEvBrpiB,KAAKu6jB,SAAStkf,GAAW,GACzBA,EAAUh3D,IAAI6vhB,oBAAoB74d,EAAU14E,OAC5C04E,EAAU14E,MAAMuxiB,oBAAoBm1B,GACpCjkkB,KAAK4sc,YAAY,UACjB5sc,KAAK+hkB,uBAAuB9rf,GAAW,GACvCj2E,KAAKu6jB,SAAStkf,GAAW,GACrBj2E,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcq7B,qBAC5DpzjB,KAAK+3hB,cAAcQ,0BAW3BpjC,EAAO/5f,UAAUm8gB,cAAgB,SAAUl7gB,EAAOipkB,GAC9C,GAAItlkB,KAAKwuf,OAAOgV,MAAMnhB,iBAClBrif,KAAKulkB,iBAEJ,CACG9nkB,EAAkB6nkB,KAClBA,EAAc1pkB,QAGlB,IAAIqgB,EAAc,GAGE,MADpBA,GADmBqpjB,EAAYz4a,cAAgBy4a,EAAYz4a,cAAgBxwJ,EAAMwwJ,eACtDqnF,QAAQ,WAE/Bl0O,KAAKwlkB,cAAcvpjB,GACnBjc,KAAKwuf,OAAO8pC,YAAYt2hB,UAAY,IAG5ChC,KAAKwuf,OAAOj/X,eAKhB4lY,EAAO/5f,UAAUmqkB,WAAa,WAE1B,GAAIvlkB,KAAK44gB,YAAc54gB,KAAKwjgB,MAAMnhB,iBAAkB,CAChD,IAAIzoM,EAAattP,KAAKuB,MAAM7tD,KAAK44gB,YACjC54gB,KAAKwlkB,cAAc5rR,KAG3Bu7M,EAAO/5f,UAAUqqkB,UAAY,SAAUC,GACnC,IAAI/+D,KACJ,GAA8B,mBAAU,CACpC,IAAI6oC,EAAiBxviB,KAAKi2E,UAAU14E,MAAM05f,UACrCj3f,KAAKi2E,UAAU8ge,YAChBvH,EAAiBxviB,KAAKi2E,UAAUh3D,IAAIg4e,WAExC,IAAI/qd,KACAw5P,EAAMggS,EAEVx5hB,GADAw5P,EAAMA,EAAIzoS,QAAQ,QAAS,OACjBC,MAAM,MAChB,IAAK,IAAIhB,EAAI,EAAGA,EAAIgwC,EAAI1vC,OAAQN,IAAK,CACjC,IAAIujkB,EAAez/jB,KAAK27iB,iBAAiBnM,EAAen9C,iBAAiB,GACrEszE,EAAmB3lkB,KAAKwuf,OAAOv4a,UAAUu2e,+BACzCv1D,EAAY,IAAIC,GACpBD,EAAUhF,gBAAgB0H,WAAWgsE,GACrC,IAAI17gB,EAAO,IAAIo9c,GAAWpQ,GAC1B,GAAI/qd,EAAIhwC,GAAGM,OAAS,EAAG,CACnB,IAAI25B,EAAc,IAAIyye,GACtBzye,EAAYk8d,gBAAgBsH,WAAW8lE,GACvCtpiB,EAAYnH,KAAOkd,EAAIhwC,GACvB+tD,EAAK7vC,SAAS5V,KAAK2xB,GACnBA,EAAY8zB,KAAOA,EAEvBgtc,EAAUI,aAAa7yf,KAAKylD,GAC5B08c,EAAQnigB,KAAKyyf,SAIjB,IAAS/6f,EAAI,EAAGA,EAAIwpkB,EAAa1uT,SAASx6Q,OAAQN,IAC9C8D,KAAKwuf,OAAOgV,MAAM9ma,OAAO4nc,UAAUohC,EAAa1uT,SAAS96Q,GAAGiwS,OAAQw6N,GAG5E,OAAOA,GAEXxR,EAAO/5f,UAAUoqkB,cAAgB,SAAUlpiB,GACvCt8B,KAAKq+jB,sBAAsBr+jB,KAAKylkB,UAAUnpiB,KAE9C64d,EAAO/5f,UAAUijkB,sBAAwB,SAAU13D,GAE/C,IAAI1wb,EAAYj2E,KAAKwuf,OAAOv4a,UACxB2pf,GAAY,EAEhB,GADA5/jB,KAAKg4hB,mBAAmB,SACpBh4hB,KAAKwuf,OAAO0sC,mBAAoB,CAChC,IAAIjkC,EAAYhhb,EAAU14E,MAAM05f,UAC5BA,EAAUhF,gBAAgB+F,aAA+D,IAAjDf,EAAUhF,gBAAgB+F,WAAWqC,QAC7Er6f,KAAK0oiB,iBAAYxtiB,GAGzB8E,KAAK4sc,YAAY,SACZ32X,EAAU2hK,UAAW53O,KAAKwuf,OAAO0sC,qBAClC0kC,EAAY5/jB,KAAK4lkB,8BAA8B3vf,EAAWA,EAAU14E,MAAO04E,EAAUh3D,MAErF2gjB,EACA5/jB,KAAK0lkB,aAAa/+D,GAEb3mgB,KAAK+3hB,gBACV/3hB,KAAK+3hB,cAAcmR,4BAAyBhuiB,GAE5C8E,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcq7B,oBACzCpzjB,KAAK+3hB,cAAcsR,gBACnBrpiB,KAAK+3hB,cAAcQ,wBAGnBv4hB,KAAKu6jB,SAAStkf,EAAWA,EAAU2hK,UAI3Cu9Q,EAAO/5f,UAAUsqkB,aAAe,SAAU/+D,GAEtC3mgB,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtCthf,KAAKggkB,uBACLhgkB,KAAKwuf,OAAOgV,MAAMjiB,iBAAkB,EACpCvhf,KAAKwuf,OAAOgV,MAAMhiB,kBAAmB,EACrCxhf,KAAK6lkB,gBAAgBl/D,GACrB3mgB,KAAKogkB,oBACLpgkB,KAAKwuf,OAAOgV,MAAMhiB,kBAAmB,EACrCxhf,KAAKwuf,OAAOv4a,UAAU+le,sBAAqB,IAE/C7mD,EAAO/5f,UAAUyqkB,gBAAkB,SAAUl/D,GACzC,IAAK,IAAIjjf,EAAI,EAAGA,EAAIijf,EAAQnqgB,OAAQknB,IAAK,CACrC,IAAImif,EAASc,EAAQjjf,GAIrB,GAHImif,aAAkB3O,IAAkD,IAA/B2O,EAAOxO,aAAa76f,SACzDqpgB,EAAOxO,aAAa,GAAK,IAAIgQ,GAAWxB,IAExCnif,IAAMijf,EAAQnqgB,OAAS,GAAKqpgB,aAAkB3O,GAAiB,CAC/D,IAAIypE,EAAe96D,EACf86D,EAAatpE,aAAa76f,OAAS,GAChCmkkB,EAAatpE,aAAa,GAAGj9e,SAAS5d,OAAS,GAClDwD,KAAKmkkB,cAAcxD,EAAatpE,aAAa,GAAGj9e,eAGnD,GAAIyrf,aAAkBY,GAAa,CACpC,IAAI+oC,EAAiBxviB,KAAKi2E,UAAU14E,MAAM05f,UAC1C,GAAI4O,aAAkBoB,IAAeuoC,EAAejnC,cAAe,CAC/D,IAAInjc,EAAQygc,EAERj2e,EAAc4/gB,EAAelnC,oBACjCljc,EAAMilc,qBAAqBz6e,GAE3Bi2e,aAAkBoB,IAAeuoC,EAAe53T,WAC7C43T,EAAe3hC,0BAA0B5G,GAC5CjngB,KAAK8lkB,gBAAgBjgE,EAAQ2pC,EAAe3hC,gBAG5C7tgB,KAAK+lkB,oBAAoBlgE,MAYzC1Q,EAAO/5f,UAAU4qkB,oBAAsB,SAAU5ggB,EAAOykd,EAAUo8C,GAE9D,IAAIzjD,EAAcp9c,EAAMmU,WACxB,GAAI0sf,EAEA,IAAK,IAAI/pkB,EAAI,EAAG4V,EAAQ,EAAG5V,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK4V,IAAS,CACpE,IAAI4zD,EAAMN,EAAMiyb,aAAan7f,GAC7B2thB,EAASxyB,aAAa1ue,OAAO7W,EAAO,EAAG4zD,GACvCA,EAAI4xb,gBAAkBuyB,EACtBzkd,EAAMiyb,aAAa1ue,OAAOzsB,EAAG,GAC7BA,IAGR,IAAIsngB,EAAQp+b,EAAMkyb,gBAClBt3f,KAAKkmkB,YAAY9ggB,GAEQo+b,EAAMnM,aACZ1ue,OAAO65f,EAAa,EAAGqH,GAC1CA,EAAS/3gB,MAAQszD,EAAMtzD,MACvBszD,EAAMkyb,qBAAkBp8f,EACxB2uhB,EAASvyB,gBAAkBkM,EAC3BqmB,EAAS3e,eAAgB,EACzB2e,EAAS5e,oBACT4e,EAAS3e,eAAgB,EACzBlrgB,KAAKwuf,OAAOlhc,OAAOuud,iBAAiBgO,GAAU,GAAM,GACpD7phB,KAAK6gkB,sBAAsBh3C,GAAU,GACrC7phB,KAAKwuf,OAAOlhc,OAAO0ud,iBAAiB6N,GACpC7phB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BxC,EAAS/3gB,MAAO0xf,EAAOqmB,GAAU,IASnF10B,EAAO/5f,UAAU+qkB,iBAAmB,SAAUlwf,EAAWiyb,EAAO9ic,GAC5D,IAAIz5D,EAASsqE,EAAU14E,MAAMoO,OACbsqE,EAAU14E,MAAM05f,UAAUI,aAAa94f,QAAQ03E,EAAU14E,MAAMmuhB,eAC3ExjB,aAAiBhR,IAAmBvrf,EAAS,IAG7C3L,KAAKomkB,YAAYnwf,EAAU14E,MAAM05f,UAAWiR,EAAO,EAAG,EAAGjyb,EAAU14E,MAAM05f,UAAUj6e,WAAYrR,EAAQsqE,EAAU14E,MAAMmuhB,eACvHz1c,EAAUgqe,gBAAgBhqe,EAAU14E,MAAM05f,WAAW,GACjDj3f,KAAKqmkB,oBAAoBpwf,IACzBj2E,KAAKykkB,sBAAsBzkkB,KAAKwngB,qBAAqBU,EAAOv8f,EAAOuB,aAAa,IAGpFvB,EAAS,GAAK3L,KAAKqmkB,oBAAoBpwf,IACvCj2E,KAAKykkB,sBAAsBxuf,EAAU14E,OAAO,GAEhD,IAAIuU,EAAQszD,EAAM0gc,aAMlB,GALA1gc,EAAMkyb,gBAAgBD,aAAa1ue,OAAO7W,EAAO,EAAGo2f,GACpDA,EAAM5Q,gBAAkBlyb,EAAMkyb,gBAC9B4Q,EAAMp2f,MAAQszD,EAAMtzD,MACpB9R,KAAK6gkB,sBAAsB34D,GAAO,GAClClogB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BnkB,EAAMp2f,MAAOo2f,EAAM5Q,gBAAiB4Q,GAAO,GACrFlogB,KAAKqmkB,oBAAoBpwf,GAAY,CACrC,IAAIghb,OAAY/7f,EACZgtgB,aAAiBhR,KACjBD,EAAYiR,GAEZA,aAAiBjB,KACjBhQ,EAAYhhb,EAAU41c,6BAA6B3jB,IAEvDlogB,KAAKykkB,sBAAsBzkkB,KAAKwngB,qBAAqBvQ,EAAW,MAAM,KAU9E9B,EAAO/5f,UAAUmzjB,UAAY,SAAUt4e,GACnC,IAAIqvO,EAAgBrvO,EAAU14E,MAC1BwiiB,EAAc9pd,EAAUh3D,IACvBg3D,EAAU8ge,YACXzxP,EAAgBrvO,EAAUh3D,IAC1B8ghB,EAAc9pd,EAAU14E,OAG5B,IAAI+lkB,EAAYtjkB,KAAK6/jB,iBAAiBv6Q,GAEtC,GADArvO,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YAErFo4S,EAAc2xM,YAAc8oC,EAAY9oC,WAAa3xM,EAAc35S,OAAS,IAAMo0hB,EAAYp0hB,OAG1E25S,EAAc2xM,UAAU8R,UAAUg3B,EAAYp0hB,OADtD,GAEe3K,QAG/BhB,KAAK4sc,YAAY,OACjB32X,EAAUutb,MAAMliB,mBAAoB,EAChCthf,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,wBACrClpiB,KAAKqmkB,oBAAoBpwf,IACzBj2E,KAAKykkB,sBAAsBxuf,EAAU6pf,cAAc,GAG3D9/jB,KAAKsmkB,sBAAsBvmC,EAAY9oC,UAAWhhb,EAAWqvO,EAAey6O,EAAa,GACzF,IAAI73I,EAAe,IAAIgmJ,GAAaj4d,EAAUutb,OAC9CxjgB,KAAK+uiB,2BAA2B7mJ,EAAcjyU,EAAU6pf,cACxD7pf,EAAU0ne,cAAcz1J,GAAc,GAClCloZ,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,wBACrClpiB,KAAKwkkB,iBAAiBvuf,IACtBj2E,KAAKykkB,sBAAsBxuf,EAAUh3D,KAAK,GAGlDjf,KAAKu6jB,SAAStkf,IAElBk/a,EAAO/5f,UAAUypkB,qBAAuB,SAAU7jkB,GAC9C,IAAIi1E,EAAYj2E,KAAKi2E,UACjBz5E,EAASwE,EAAQxE,OACjB4yjB,EAAgBpvjB,KAAK6/jB,iBAAiB5pf,EAAU14E,OACpD,GAAI04E,EAAU14E,MAAM05f,UAAUr/Q,UAAW,CACrC,IAAIq/Q,EAAYhhb,EAAU14E,MAAM05f,UACiB,WAA5CA,EAAUhF,gBAAgBjvd,eAA0E,UAA5Ci0d,EAAUhF,gBAAgBjvd,gBAC/B,IAAjDi0d,EAAUhF,gBAAgB+F,WAAWqC,SACxCpD,EAAUlqf,EAAI/M,KAAKwuf,OAAOmsB,iBAAiB5tgB,GAE/Ckqf,EAAUI,aAAa,GAAGj9e,SAAS5V,KAAKxD,GACxCA,EAAQipD,KAAOgtc,EAAUI,aAAa,GACtCr2f,EAAQoxgB,mBAAmBpygB,KAAKwuf,QAChCxuf,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAW,EAAG,OAElD,CACD,IAAI+R,EAAgB,EAChB4nC,EAAY36d,EAAU14E,MAAMmuhB,cAAc3iB,UAAU9yb,EAAU14E,MAAMoO,OAAQq9f,GAC5Eu9D,EAAY31B,EAAU5viB,QAC1BgogB,EAAgB4nC,EAAU9+hB,MAC1B9R,KAAKwmkB,sBAAsBD,EAAWvlkB,EAASgogB,GAAe,GAElEhpgB,KAAKiviB,qBAAqBmgB,EAAcn4D,UAAWm4D,EAAczjjB,OAASnP,GAAQ,IAEtF24f,EAAO/5f,UAAU+okB,cAAgB,SAAUnjkB,GACvC,IAAIi1E,EAAYj2E,KAAKi2E,UACjBz5E,EAAS,EACTy6f,OAAY/7f,EACZuuS,GAAa,EACbopO,OAAa33gB,EACbsnhB,EAAc,EACd4sC,EAAgBpvjB,KAAK6/jB,iBAAiB5pf,EAAU14E,OACpD,GAAI04E,EAAU14E,MAAM05f,UAAUr/Q,UAE1Bi7R,GADA5b,EAAYhhb,EAAU14E,MAAM05f,WACLI,aAAa,GACpC5tN,EAAY,MAEX,CACD,IAAIu/N,EAAgB,EAChB4nC,EAAY36d,EAAU14E,MAAMmuhB,cAAc3iB,UAAU9yb,EAAU14E,MAAMoO,OAAQq9f,GAC5Eu9D,EAAY31B,EAAU5viB,QAM1B,GALAgogB,EAAgB4nC,EAAU9+hB,MAC1Bmlf,EAAYsvE,EAAUt8gB,KAAKgtc,UAC3BxtN,EAAYwtN,EAAUI,aAAa94f,QAAQgokB,EAAUt8gB,MACrDu4d,EAAc+jD,EAAUzgE,aACxB+M,EAAa0zD,EAAUt8gB,KACnB++c,IAAkBu9D,EAAU/pkB,OAC5BgmhB,SAEC,GAAsB,IAAlBxZ,EACDvrgB,EAAkB8okB,EAAU7zD,gBAC5B8P,EAAc,OAGjB,CACDA,IACA,IAAIikD,EAAc,IAAI79D,GACtB69D,EAAYp0E,gBAAgBsH,WAAW4sE,EAAUl0E,iBACjDo0E,EAAYz3iB,KAAOu3iB,EAAUv3iB,KAAK3K,UAAU2kf,GAC5Cu9D,EAAUv3iB,KAAOu3iB,EAAUv3iB,KAAK6H,OAAO,EAAGmye,GAC1C6J,EAAWz4f,SAASuO,OAAO65f,EAAa,EAAGikD,GAC3CA,EAAYx8gB,KAAOs8gB,EAAUt8gB,MAGrC,IAAK,IAAI/tD,EAAI,EAAGA,EAAI8E,EAAQxE,OAAQN,IAChCM,GAAUwE,EAAQ9E,GAAGM,OACrBq2gB,EAAWz4f,SAASuO,OAAO65f,EAAa,EAAGxhhB,EAAQ9E,IACnD8E,EAAQ9E,GAAG+tD,KAAO4od,EAClB7xgB,EAAQ9E,GAAGk2gB,mBAAmBpygB,KAAKwuf,QACnCg0B,IAEJxihB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAWxtN,EAAW,GAC3DzpS,KAAKiviB,qBAAqBmgB,EAAcn4D,UAAWm4D,EAAczjjB,OAASnP,GAAQ,IAEtF24f,EAAO/5f,UAAUorkB,sBAAwB,SAAUxlkB,EAAS0lkB,EAAY50jB,EAAO60jB,GAC3E,IAAI18gB,EAAOjpD,EAAQipD,KACfgtc,EAAYhtc,EAAKgtc,UACjBxtN,EAAYx/O,EAAK67c,aACjB0c,EAAcxhhB,EAAQ8kgB,aAC1B,GAAIh0f,IAAU9Q,EAAQxE,OAClBgmhB,IACAv4d,EAAK7vC,SAASuO,OAAO65f,EAAa,EAAGkkD,QAEpC,GAAc,IAAV50jB,EACDrU,EAAkBuD,EAAQ0xgB,eAC1B1xgB,EAAQipD,KAAK7vC,SAASuO,OAAO,EAAG,EAAG+9iB,GACnClkD,EAAc,GAGdxhhB,EAAQipD,KAAK7vC,SAASuO,OAAO65f,EAAa,EAAGkkD,OAGhD,CACDlkD,IACA,IAAIrsf,EAAc,IAAIyye,GACtBzye,EAAYk8d,gBAAgBsH,WAAW34f,EAAQqxf,iBAC/Cl8d,EAAYnH,KAAOhuB,EAAQguB,KAAK3K,UAAUvS,GAC1C9Q,EAAQguB,KAAOhuB,EAAQguB,KAAK6H,OAAO,EAAG/kB,GACtCm4C,EAAK7vC,SAASuO,OAAO65f,EAAa,EAAGrsf,GACrCA,EAAY8zB,KAAOjpD,EAAQipD,KAE3BA,EAAK7vC,SAASuO,OAAO65f,EAAa,EAAGkkD,GACrClkD,GAAe,EAEnBkkD,EAAWz8gB,KAAOjpD,EAAQipD,KAC1By8gB,EAAWt0D,mBAAmBpygB,KAAKwuf,QAC/Bm4E,GACA3mkB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAWxtN,EAAW+4O,IASnErtB,EAAO/5f,UAAU+pkB,YAAc,SAAUj9D,GACrC,IAAI03D,GAAY,EACZ3pf,EAAYj2E,KAAKi2E,UAQrB,GAPKA,EAAU2hK,UACXgoV,EAAY5/jB,KAAK+/jB,uBAAuB9pf,IAEvC2pf,GACD3pf,EAAU0ne,cAAc1ne,EAAU14E,OAAO,GAE7CyC,KAAK+lkB,oBAAoB79D,GACrBlogB,KAAKqmkB,oBAAoBpwf,GAAY,CACrC,IAAIghb,OAAY/7f,EAEZ+7f,EADAiR,aAAiBhR,GACLgR,EAGAlogB,KAAKi2E,UAAU41c,6BAA6B3jB,GAG5DlogB,KAAKykkB,sBAAsBzkkB,KAAKwngB,qBAAqBvQ,EAAW,MAAM,GAE1Ej3f,KAAKuxf,qBAQT4D,EAAO/5f,UAAU2qkB,oBAAsB,SAAU79D,GAC7C,IAAIjyb,EAAYj2E,KAAKi2E,UAEjB2wf,EAAY5mkB,KAAKi2E,UAAU14E,MAAM05f,UACrC,IAAKhhb,EAAU14E,MAAMs5iB,mBAAoB,CACrC,GAAI3uC,aAAiBhR,GAEjB,YADAl3f,KAAK6mkB,yBAAyB3+D,GAAO,GAGzClogB,KAAKggkB,uBACL4G,EAAYA,EAAU7/D,cAAc/mgB,KAAKwuf,QAEzCxuf,KAAK2xgB,eAAei1D,EAAWA,EAAU5pjB,WAAY,EAAGi5D,EAAU14E,MAAMmuhB,cAAez1c,EAAU14E,MAAMoO,QAAQ,GAC/GsqE,EAAUgqe,gBAAgBjgjB,KAAKi2E,UAAU14E,MAAM05f,WAAW,GAE9D,IAAI6F,EAAa7mb,EAAU14E,MAAM05f,UAAUK,gBACvC01B,EAAa/2c,EAAU14E,MAAM05f,UAAUnlf,MACvC0wgB,EAAc1lB,EAAWzF,aAAa94f,QAAQ03E,EAAU14E,MAAM05f,WAC7Dx5f,EAAkBq/f,KACnBA,EAAWzF,aAAa1ue,OAAO65f,EAAa,EAAGta,GAC/CA,EAAM5Q,gBAAkBwF,EACxBoL,EAAMp2f,MAAQk7gB,EACd9kB,EAAMnyf,OAAS,EACXmyf,aAAiBjB,KACjBiB,EAAMgD,eAAgB,EACtBhD,EAAM+C,oBACN/C,EAAMgD,eAAgB,GAE1BlrgB,KAAK6gkB,sBAAsB34D,GAAO,GAClClogB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BW,EAAYlwB,EAAYoL,GAAO,KASrF/S,EAAO/5f,UAAU0rkB,YAAc,SAAU/mQ,EAAa/pT,EAAOD,GACrD/V,KAAKwjgB,MAAMtR,iBAGXz0f,EAAkBuY,KAClBA,EAAQ,KAERvY,EAAkBsY,KAClBA,EAAS,KAEb/V,KAAK+mkB,cAAchnQ,EAAa/pT,EAAOD,KAQ3Co/e,EAAO/5f,UAAUk9gB,YAAc,SAAU1rS,EAAMvpK,GAC3C,IAAIu9e,EAAW5gjB,KAAKi2E,UAAU14E,MAC9B,IAAIyC,KAAKwjgB,MAAMtR,eAAf,CAGAtlR,EAAOA,GAAQ,EACfvpK,EAAUA,GAAW,EACrB,IAAI+B,EAAQplE,KAAKgnkB,YAAYp6V,EAAMvpK,GAC/BzzC,EAAcgxhB,EAAS3pD,UAAUqR,oBACrCljc,EAAMsnc,uBAAuB98e,GAC7B,IAAIolhB,EAAY4L,EAAS3pD,UAAU4W,eACnC,GAAI+yC,EAASl1B,cAAc7Z,eAAqC,IAApB+uC,EAASj1iB,QAAgBqpiB,aAAqB/tC,GAGtF,OAFAjngB,KAAK8lkB,gBAAgB1ggB,EAAO4ve,QAC5B5ve,EAAM/yD,UAINrS,KAAK4sc,YAAY,eACjB5sc,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtCthf,KAAKmlkB,YAAY//f,GAErB,IAAI6hgB,EAAYjnkB,KAAKi2E,UAAU41c,6BAA6Bzmd,GAAOiyb,aAAa,GAChFupD,EAAS/niB,YAAYoujB,GAAW,GAChCjnkB,KAAKi2E,UAAUh3D,IAAI6vhB,oBAAoB8R,GACvC,IAAI9L,EAAgB90iB,KAAKi2E,UAAUise,2BAA2B98e,GAC1D2vc,EAAY+/B,EAAc1wQ,YAAc,EACxCpkS,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,yBAEzClpiB,KAAK+3hB,cAAcmR,uBAAuBnJ,YAAc//hB,KAAKwngB,qBAAqBstC,EAAe//B,EAAU7ngB,aAE/GlN,KAAKu6jB,SAASv6jB,KAAKi2E,aAQvBk/a,EAAO/5f,UAAUy8gB,UAAY,SAAUqvD,EAAOhojB,GAC1C,IAAIiojB,EAAeD,EAAQ,QAAU,QACrC,IAAIlnkB,KAAKwjgB,MAAMtR,eAAf,CAGA,IAAI0uD,EAAW5gjB,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAU14E,MAAQyC,KAAKi2E,UAAUh3D,IACnEjf,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAUh3D,IAAMjf,KAAKi2E,UAAU14E,MAC5E,GAAIqjjB,EAAS3pD,UAAUsR,cAAe,CAC9BvogB,KAAKukkB,qBACLvkkB,KAAK4sc,YAA6B,UAAjBu6H,EAA2B,iBAAmB,kBAEnEnnkB,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtC,IAAIkrB,EAAYxsgB,KAAKonkB,aAAapnkB,KAAKi2E,UAAU8ge,WAAWlwC,kBAAkB,GAC1E4F,EAAUzsgB,KAAKonkB,cAAcpnkB,KAAKi2E,UAAU8ge,WAAWlwC,kBAAkB,GACzEzhc,EAAQonc,EAAUpE,WAAWrB,cAAc/mgB,KAAKwuf,QAChD9ob,EAAuB,UAAjByhgB,EAA2B16D,EAAQpE,SAAWmE,EAAUnE,SAClE,GAAIrogB,KAAK+3hB,cACa/3hB,KAAKqnkB,wBAAwBjigB,GAEnD,IAAIi5K,EAAWn/N,GAAgBlf,KAAKsnkB,sBAChC16V,KACA96N,EAAQ4zD,EAAIupK,SAChB,GAAqB,UAAjBk4V,EAA0B,CAC1Br1jB,IACA,IAAIy1jB,EAA6B9pkB,EAAkBgvgB,EAAQoB,iBACpDpB,EAAQz9R,cAAgBy9R,EAAQoB,eAAe7+R,YAAc,EACjDy9R,EAAQl5M,YAAck5M,EAAQz9R,aAAeu4V,GACzD7hgB,EAAIupK,SAAWu9R,EAAU/D,WAAW73M,QAAU,IAAM67M,EAAQpE,SAASp5R,UAEpEw9R,EAAQhE,WAAW73M,QAAU,IACxBnzT,EAAkBioE,EAAI6qc,aAAe7qc,EAAI6qc,sBAAsBpK,KAChEsG,EAAQhE,WAAW73M,SAAWvyE,EAC9B34K,EAAMA,EAAI6qc,YAK1B,IAAK,IAAIr0gB,EAAI,EAAGA,EAAImiP,EAAUniP,IAAK,CAC/B,IAAIsrkB,EAAgBxnkB,KAAKynkB,cAAc/hgB,EAAsB,UAAjByhgB,EAA2B16D,EAAUD,EAAW26D,GACxFO,EAAS1nkB,KAAK2nkB,mBAAmBH,EAActojB,MAAOhjB,GAC1DwrkB,EAAOp9D,UAAU3Q,WAAWj0b,EAAI4kc,WAChCtqgB,KAAK4nkB,+BAA+BF,EAAQF,EAAcK,aAC1Dj7V,EAAKpoO,KAAKkjkB,GAEdtigB,EAAMync,wBAAwBjgS,EAAM96N,GACpC,IAAIi2D,OAAO7sE,EACP+7f,OAAY/7f,EAChB,GAAKkqE,EAAMiyb,aAAavlf,aAAkBq0f,GACtCp+b,EAAO3C,EAAMiyb,aAAavlf,GAAOkL,WACjCi6e,EAAYj3f,KAAKi2E,UAAUs/d,kBAAkBxte,OAE5C,CAED,IADA,IAAI89b,OAAS3qgB,IACJ2qgB,aAAkBoB,KACvBpB,EAASzgc,EAAMohc,mBAEnBvP,EAAYj3f,KAAKi2E,UAAU41c,6BAA6BhmB,GAE5D7lgB,KAAKwuf,OAAOlhc,OAAOg/d,cAAclnd,GACjCplE,KAAKi2E,UAAUgqe,gBAAgBhpD,GAAW,GAE9Cj3f,KAAKu6jB,SAASv6jB,KAAKi2E,WAAW,KAElCk/a,EAAO/5f,UAAUwskB,+BAAiC,SAAUF,EAAQG,GAChE,IAAK,IAAI3rkB,EAAI,EAAGA,EAAIwrkB,EAAOrwE,aAAa76f,OAAQN,IAC5CwrkB,EAAOrwE,aAAan7f,GAAGusgB,WAAW9O,WAAWkuE,EAAY3rkB,IACzDwrkB,EAAOrwE,aAAan7f,GAAGusgB,WAAW73M,QAAU,GAGpDukM,EAAO/5f,UAAUqskB,cAAgB,SAAU/hgB,EAAK8mc,EAAW26D,GAIvD,IAAK,IAHD18D,EAAe/kc,EAAIgoc,4BAA2B,GAC9Cxuf,EAAQ,EACR2ojB,KACK3rkB,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IAAK,CAY9C,IAAK,IAXD6rE,EAAOrC,EAAI2xb,aAAan7f,GACxB4rkB,GAAiB,EAQjBC,EAAgBtqkB,EAAkBsqE,EAAK8lc,iBACpC9lc,EAAKinK,cAAgBjnK,EAAK8lc,eAAe7+R,YAAc,EACrDtrN,EAAI,EAAGA,EAAI+mf,EAAajugB,OAAQknB,IACrC,GAAIqkjB,EAAc,CACd,IAAIp6D,EAAclD,EAAa/mf,GAC3BskjB,EAAiBr6D,EAAYtF,SAASp5R,SAAW0+R,EAAYlF,WAAW73M,QAAU,EAMtF,GALI7oP,EAAKinK,YAAc2+R,EAAY3+R,aAAejnK,EAAKwrP,YAAcxrP,EAAKinK,cACtE84V,GAAiB,EACjB5ojB,IACA2ojB,EAAYrjkB,KAAKujE,EAAK0gc,aAEW,IAAjC+D,EAAU/D,WAAW73M,QAQrB,GAAIo3Q,EAAiBjggB,EAAKsgc,SAASp5R,SAAU,CACzC,GAAqB,UAAjBk4V,GACGx5D,EAAYtF,WAAamE,EAAUnE,SACtC,SAGAsF,EAAYlF,WAAW73M,SAAW,EAClC65M,EAAa9hf,OAAOjF,EAAG,GACvBA,SAGCqkD,EAAKwrP,YAAcxrP,EAAKinK,aAAe+4V,GAAgBC,IAAmBjggB,EAAKsgc,SAASp5R,WACxE,UAAjBk4V,GACAx5D,EAAYlF,WAAW73M,SAAW,EAClC65M,EAAa9hf,OAAOjF,EAAG,GACvBA,MAGAxE,IACA2ojB,EAAYrjkB,KAAKmpgB,EAAYlF,YAC7BgC,EAAa9hf,OAAOjF,EAAG,GACvBA,WAKR,GAAIiqf,IAAgBnB,EAAW,CAC3B,GAAqB,UAAjB26D,IACIx5D,EAAYtF,WAAamE,EAAUnE,UAAYsF,EAAY3+R,cAAgBw9R,EAAUx9R,aACzF,SAGI2+R,EAAY3+R,cAAgBw9R,EAAUx9R,aACnC2+R,EAAYtF,SAASp5R,WAAalnK,EAAKsgc,SAASp5R,WAC/C+4V,EAAiBx7D,EAAUnE,SAASp5R,UACf,UAAjBk4V,GAA4Ba,IAAmBx7D,EAAUnE,SAASp5R,YAC1E0+R,EAAYlF,WAAW73M,SAAW,EAClC65M,EAAa9hf,OAAOjF,EAAG,GACvBA,OAOY,IAAhC+mf,EAAalsgB,QAAQwpE,IAAgBA,EAAK0gc,WAAW73M,QAAU,IAC/Dk3Q,GAAiB,GAEhBA,IACD5ojB,IACA2ojB,EAAYrjkB,KAAKujE,EAAK0gc,aAG9B,OAASvpf,MAAOA,EAAO2ojB,YAAaA,IAExC1yE,EAAO/5f,UAAU0qkB,gBAAkB,SAAU1ggB,EAAO4ve,GAIhD,GAHAh1iB,KAAK4sc,YAAY,kBACjBxnY,EAAMkyb,gBAAkB09C,EAAU19C,gBAClC09C,EAAYA,EAAUjuC,cAAc/mgB,KAAKwuf,QACrCxuf,KAAK+3hB,cACa/3hB,KAAKqnkB,wBAAwBryB,GAEnD,IAAItve,EAAMsve,EAAU39C,aAAa29C,EAAU39C,aAAa76f,OAAS,GACjEw4iB,EAAUnoC,wBAAwBznc,EAAMiyb,aAAc29C,EAAU39C,aAAa76f,QAC7E,IAAIy6f,EAAYj3f,KAAKi2E,UAAUs/d,kBAAkB7ve,EAAI6qc,WAAWlZ,aAAa,IAC7Er3f,KAAKwuf,OAAOlhc,OAAOg/d,cAAc0oB,GACjCh1iB,KAAKi2E,UAAUgqe,gBAAgBhpD,GAAW,GACtCj3f,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,yBACzClpiB,KAAKykkB,sBAAsBzkkB,KAAKi2E,UAAU14E,OAAO,GACjDyC,KAAKykkB,sBAAsBzkkB,KAAKi2E,UAAUh3D,KAAK,IAEnDjf,KAAKu6jB,SAASv6jB,KAAKi2E,YAQvBk/a,EAAO/5f,UAAU08gB,aAAe,SAAUtrgB,EAAM0S,GAC5C,IAAIlf,KAAKwjgB,MAAMtR,eAAf,CAGA,IAAI+1E,EAAkBz7jB,EAAO,OAAS,QACtC,GAAIxM,KAAKi2E,UAAU14E,MAAM05f,UAAUsR,cAAe,CAC1CvogB,KAAKukkB,qBACLvkkB,KAAK4sc,YAAgC,SAApBq7H,EAA6B,mBAAqB,qBAEvEjokB,KAAKi2E,UAAUutb,MAAMliB,mBAAoB,EACzC,IAAIkrB,EAAYxsgB,KAAKonkB,aAAapnkB,KAAKi2E,UAAU8ge,WAC7CtqC,EAAUzsgB,KAAKonkB,cAAcpnkB,KAAKi2E,UAAU8ge,WAC5C3xe,EAAQonc,EAAUnE,SAASD,WAAWrB,cAAc/mgB,KAAKwuf,QAC7D,GAAIxuf,KAAK+3hB,cAEa/3hB,KAAKqnkB,wBAAwBjigB,GAEnDplE,KAAKi2E,UAAUutb,MAAMjiB,iBAAkB,EACvC,IAAIhuL,EAAYi5M,EAAUx9R,YACF,UAApBi5V,IACA10Q,EAAYk5M,EAAQz9R,YAAcy9R,EAAQhE,WAAW31M,YAMzD,IACK,IALD08O,OAAiBt0iB,EACjBgtkB,OAAUhtkB,EACVojP,EAAcp/N,GAAgBlf,KAAKmokB,yBACnC/8D,KAEKlvgB,EAAI,EAAGA,EAAIoiP,EAAapiP,IAC7B,IAAK,IAAIwnB,EAAI,EAAGA,EAAI0hD,EAAMiyb,aAAa76f,OAAQknB,IAAK,CAChD,IAAIgiD,EAAMN,EAAMiyb,aAAa3ze,GAU7B,GATAwkjB,EAAUlokB,KAAKookB,aAAapokB,KAAKi2E,UAAU8+d,iBAAiBvoC,IAC5D07D,EAAQp2jB,MAAQ4R,EAChBwkjB,EAAQj5V,SAAWvpK,EAAIupK,SACvBi5V,EAAQ5wE,gBAAkB5xb,EAC1BwigB,EAAQz/D,WAAW9O,WAAW6S,EAAU/D,YACxCy/D,EAAQz/D,WAAW73M,QAAU,EACzBnzT,EAAkB+xiB,KAClBA,EAAiBxviB,KAAKi2E,UAAUs/d,kBAAkB2yB,IAEpC,IAAd30Q,EACA7tP,EAAI2xb,aAAa1ue,OAAO4qS,EAAW,EAAG20Q,OAErC,CAED,IAAK,IADDG,GAAiB,EACZhuQ,EAAM,EAAGA,EAAM30P,EAAI2xb,aAAa76f,OAAQ69T,IAAO,CACpD,IAAIiuQ,EAAU5igB,EAAI2xb,aAAah9L,GAc/B,GAZIiuQ,EAAQ7/D,WAAW73M,QAAU,GAC7Bw6M,EAAgB5mgB,KAAK8jkB,GAErBA,EAAQt5V,YAAcs5V,EAAQ7/D,WAAW31M,aAAeS,GACxD7tP,EAAI2xb,aAAa1ue,OAAO2/iB,EAAQ/0Q,UAAY,EAAG,EAAG20Q,GAClDG,GAAiB,GAEZ90Q,EAAY+0Q,EAAQt5V,aAAes5V,EAAQt5V,YAAcs5V,EAAQ7/D,WAAW31M,WAAaS,GAC3FA,EAAY+0Q,EAAQt5V,YAAcs5V,EAAQ7/D,WAAW31M,aACxDptP,EAAI2xb,aAAa1ue,OAAO2/iB,EAAQ/0Q,UAAW,EAAG20Q,GAC9CG,GAAiB,GAEjBA,EACA,MAIR,IAAKA,GACGj9D,EAAgB5ugB,OAAS,EACzB,IAAK,IAAI8pB,EAAI,EAAGA,EAAI8kf,EAAgB5ugB,OAAQ8pB,IAAK,CAC7C,IAAIilf,EAAiBH,EAAgB9kf,GAmBrC,GAlBIilf,EAAelD,WAAa3ic,GACzBA,EAAIupK,UAAYs8R,EAAelD,SAASp5R,SAAWs8R,EAAe9C,WAAW73M,QAAU,IACtF26M,EAAev8R,YAAcu8R,EAAe9C,WAAW31M,aAAeS,GAClEg4M,EAAeh4M,UAAY7tP,EAAI2xb,aAAa76f,OAC5CkpE,EAAI2xb,aAAa7yf,KAAK0jkB,GAGtBxigB,EAAI2xb,aAAa1ue,OAAO4if,EAAeh4M,UAAW,EAAG20Q,GAEzDG,GAAiB,GAEZ90Q,EAAYg4M,EAAev8R,aAChCu8R,EAAev8R,YAAcu8R,EAAe9C,WAAW31M,WAAaS,GACjEA,EAAYg4M,EAAev8R,YAAcu8R,EAAe9C,WAAW31M,aACtEptP,EAAI2xb,aAAa1ue,OAAO4if,EAAev8R,YAAa,EAAGk5V,GACvDG,GAAiB,IAGrBA,EACA,QAQ5BjjgB,EAAM2nc,eAAe,GACrB,IAAIh5E,EAAc/zb,KAAKwuf,OAAOlhc,OAAO4+d,eAAe9md,GAChD2uX,EACAA,EAAYu4E,uBAGZlnc,EAAMknc,uBAEVtsgB,KAAKi2E,UAAUutb,MAAMjiB,iBAAkB,EACvCn8a,EAAM8lc,eAAgB,EACtB9lc,EAAM6lc,oBACN7lc,EAAM8lc,eAAgB,EACtBlrgB,KAAKwuf,OAAOlhc,OAAOg/d,cAAclnd,GACjCplE,KAAKi2E,UAAU14E,MAAMsb,YAAY22hB,EAAexyhB,YAAY,GAC5Dhd,KAAKi2E,UAAUh3D,IAAIpG,YAAY7Y,KAAKi2E,UAAU8+d,iBAAiBmzB,GAASlrjB,YAAY,IAChFhd,KAAKukkB,qBAAuB9mkB,EAAkBuC,KAAK+3hB,iBACnD/3hB,KAAKu6jB,SAASv6jB,KAAKi2E,cAQ/Bk/a,EAAO/5f,UAAU4rkB,YAAc,SAAUp6V,EAAMvpK,GAC3BrjE,KAAKi2E,UAAU14E,MAAM05f,UAArC,IACI7xb,EAAQ,IAAI6hc,GAChB7hc,EAAM4+b,YAAc,IAAIT,GAAan+b,GACrCA,EAAM4+b,YAAYG,mBAAqB,OACvC/+b,EAAM4+b,YAAYD,yBAElB,IADA,IAAIjyf,EAAQ,EACLA,EAAQ86N,GAAM,CACjB,IAAIg4T,EAAW5kiB,KAAK2nkB,mBAAmBtkgB,EAASvxD,GAChD8yhB,EAASt6B,UAAU9F,WAAa,OAChCogC,EAASttC,gBAAkBlyb,EAC3BA,EAAMiyb,aAAa7yf,KAAKogiB,GACxB9yhB,IAEJ,OAAOszD,GAEX+vb,EAAO/5f,UAAUuskB,mBAAqB,SAAUtkgB,EAAS4rK,GACrD,IAAI23V,EAAY5mkB,KAAKi2E,UAAU14E,MAAM05f,UACjC2tC,EAAW,IAAIz+B,GACnBy+B,EAASt6B,UAAY,IAAIlG,GAAWwgC,GACpCA,EAAS9yhB,MAAQm9N,EACjB,IAAK,IAAI/yO,EAAI,EAAGA,EAAImnE,EAASnnE,IAAK,CAC9B,IAAI2tgB,EAAY7pgB,KAAKookB,aAAaxB,GAClC/8D,EAAU/3f,MAAQ5V,EAClB2tgB,EAAU56R,SAAWA,EACrB46R,EAAUvS,gBAAkBstC,EAC5BA,EAASvtC,aAAa7yf,KAAKqlgB,GAE/B,OAAO+6B,GAEXzvC,EAAO/5f,UAAUgtkB,aAAe,SAAUnxE,GACtC,IAAI4S,EAAY,IAAI5D,GAChBklD,EAAO,IAAIj0D,GAMf,OALAi0D,EAAKl5D,gBAAgB0H,WAAW1C,EAAUhF,iBAC1Ck5D,EAAK94D,gBAAgBsH,WAAW1C,EAAU5E,iBAC1C84D,EAAK7zD,gBAAkBuS,EACvBA,EAAUxS,aAAa7yf,KAAK2mjB,GAC5BthD,EAAUpB,WAAa,IAAIrD,GAAYyE,GAChCA,GAEX1U,EAAO/5f,UAAU+skB,uBAAyB,WACtC,IAAIjpjB,EAAQ,EACR3hB,EAAQyC,KAAKi2E,UAAU14E,MACvB0hB,EAAMjf,KAAKi2E,UAAUh3D,IAKzB,GAJKjf,KAAKi2E,UAAU8ge,YAChBx5iB,EAAQyC,KAAKi2E,UAAUh3D,IACvBA,EAAMjf,KAAKi2E,UAAU14E,OAErBA,GAAS0hB,GAAOjf,KAAKi2E,UAAU42M,SAAStvR,EAAO0hB,GAAM,CACrD,GAAI1hB,EAAM05f,UAAUuR,iBAAmBvpf,EAAIg4e,UAAUuR,eACjD,OAAOtpf,EAAQ,EAEnB,GAAI3hB,EAAM05f,UAAUuR,eAAeH,WAAappf,EAAIg4e,UAAUuR,eAAeH,SACzE,OAAOnpf,EAAQA,EAAQD,EAAIg4e,UAAUuR,eAAej1M,UAAYh2T,EAAM05f,UAAUuR,eAAej1M,UAG/Fr0S,EAAQ,EAGR,IAAK,IADDi8iB,EAAgB59jB,EAAM05f,UAAUuR,eAAeJ,WAAWmE,2BAA2BhvgB,EAAM05f,UAAUuR,eAAgBvpf,EAAIg4e,UAAUuR,gBAC9HtsgB,EAAI,EAAGA,EAAIi/jB,EAAc3+jB,OAAQN,IAClCqB,EAAM05f,UAAUuR,eAAeH,WAAa8yD,EAAcj/jB,GAAGmsgB,UAC7Dnpf,IAKhB,OAAiB,IAAVA,EAAc,EAAIA,GAE7Bi2e,EAAO/5f,UAAUkskB,oBAAsB,WACnC,IAAIpojB,EAAQ,EACR3hB,EAAQyC,KAAKi2E,UAAU14E,MACvB0hB,EAAMjf,KAAKi2E,UAAUh3D,IAKzB,OAJKjf,KAAKi2E,UAAU8ge,YAChBx5iB,EAAQyC,KAAKi2E,UAAUh3D,IACvBA,EAAMjf,KAAKi2E,UAAU14E,OAEpBE,EAAkBF,IAAWE,EAAkBwhB,IAASxhB,EAAkBuC,KAAKi2E,UAAU42M,SAAStvR,EAAO0hB,IAU7F,IAAVC,EAAc,EAAIA,EAPVA,EAFP3hB,EAAM05f,UAAUuR,iBAAmBvpf,EAAIg4e,UAAUuR,gBACjDjrgB,EAAM05f,UAAUuR,eAAeH,WAAappf,EAAIg4e,UAAUuR,eAAeH,SAC1D,EAGAnpf,EACXlf,KAAKuokB,aAAavokB,KAAKi2E,UAAU8ge,WAAW9nU,SAAWjvO,KAAKuokB,YAAYvokB,KAAKi2E,UAAU8ge,WAAW9nU,UAKlHkmR,EAAO/5f,UAAUgskB,aAAe,SAAU5iK,GAQtC,IADA,IANIz8V,OAAO7sE,EACPsxgB,EAAYhoG,EAAUxka,KAAKi2E,UAAU14E,MAAM05f,UAAUuR,eACnDxogB,KAAKi2E,UAAUh3D,IAAIg4e,UAAUuR,eAC/BiE,EAAUjoG,EAAUxka,KAAKi2E,UAAUh3D,IAAIg4e,UAAUuR,eAC/CxogB,KAAKi2E,UAAU14E,MAAM05f,UAAUuR,eAEjChF,GADJz7b,EAAOykc,GACUpE,YACT3qgB,EAAkB+lgB,IAAUA,EAAMlM,2BAA2B2O,IAAmBzC,IAAUiJ,EAAQrE,YAEtG5E,GADAz7b,EAAOy7b,EAAMlM,iBACA8Q,WAEjB,OAAOrgc,GAEXotb,EAAO/5f,UAAUmtkB,YAAc,SAAU/jK,GAQrC,IADA,IANI9+V,EACA64P,EAAWimG,EAAUxka,KAAKi2E,UAAU14E,MAAM05f,UAAUuR,eAAeH,SACjErogB,KAAKi2E,UAAUh3D,IAAIg4e,UAAUuR,eAAeH,SAC9CmgE,EAAShkK,EAAUxka,KAAKi2E,UAAUh3D,IAAIg4e,UAAUuR,eAAeH,SAC7DrogB,KAAKi2E,UAAU14E,MAAM05f,UAAUuR,eAAeH,SAEhD7E,GADJ99b,EAAM64P,GACU6pM,YACR3qgB,EAAkB+lgB,IAAUA,EAAMlM,2BAA2B2O,IAAmBzC,IAAUglE,EAAOpgE,YAErG5E,GADA99b,EAAM89b,EAAMlM,gBAAgB+Q,UAChBD,WAEhB,OAAO1ic,GAEXyvb,EAAO/5f,UAAUqtkB,cAAgB,SAAUjkK,GACvC,IAAIp/V,OAAQlqE,EACR6ujB,EAAa/pjB,KAAKi2E,UAAU14E,MAAM05f,UAAUuR,eAAeJ,WAC3D4hD,EAAWhqjB,KAAKi2E,UAAUh3D,IAAIg4e,UAAUuR,eAAeJ,WAE3D,IADAhjc,EAAQo/V,EAAUulJ,EAAaC,EACxB5kf,EAAMkyb,2BAA2B2O,IAAmB7gc,KAAWo/V,EAAUwlJ,EAAWD,IACvF3kf,EAAQA,EAAMkyb,gBAAgB8Q,WAElC,OAAOhjc,GAMX+vb,EAAO/5f,UAAUstkB,0BAA4B,WACzC,GAAK1okB,KAAKk5gB,gBAAV,CAGIl5gB,KAAKukkB,qBACLvkkB,KAAK4sc,YAAY,cAErB5sc,KAAKi2E,UAAUutb,MAAMliB,mBAAoB,EACrBthf,KAAKi2E,UAAU14E,MAAnC,IACIwiiB,EAAc//hB,KAAKi2E,UAAUh3D,IAC5Bjf,KAAKi2E,UAAU8ge,YACA/2iB,KAAKi2E,UAAUh3D,IAC/B8ghB,EAAc//hB,KAAKi2E,UAAU14E,OAEjC,IAAIorkB,EAAiB3okB,KAAKonkB,aAAapnkB,KAAKi2E,UAAU8ge,WAClD6xB,EAAe5okB,KAAKonkB,cAAcpnkB,KAAKi2E,UAAU8ge,WACjDP,EAAgBx2iB,KAAKi2E,UAAUo7d,mBAAmBs3B,EAAgBC,GACtE,GAAIpyB,EAAcpuC,WAAWjkgB,SAASykkB,KAC7B5okB,KAAKi2E,UAAU0ge,aAAaH,EAAeoyB,GAAe,CAE3D,IAAIxjgB,EAAQujgB,EAAevgE,WAAWrB,cAAc/mgB,KAAKwuf,QACzDm6E,EAAiB3okB,KAAKi2E,UAAUwge,gBAAgBkyB,EAAgBnyB,GAChEoyB,EAAe5okB,KAAKi2E,UAAUwge,gBAAgBmyB,EAAcpyB,GAE5D,IAAIqyB,EAAa7okB,KAAK8okB,mBAAmB1jgB,EAAOujgB,EAAgBC,GAC5D9zB,EAAgB90iB,KAAKi2E,UAAU8+d,iBAAiB8zB,GACpD9oC,EAAYlnhB,YAAYi8hB,EAAcp7Z,WAAW,IAGrD15I,KAAKukkB,qBAAuB9mkB,EAAkBuC,KAAK+3hB,iBACnD/3hB,KAAKu6jB,SAASv6jB,KAAKi2E,WAAW,KAGtCk/a,EAAO/5f,UAAU0tkB,mBAAqB,SAAU1jgB,EAAOonc,EAAWC,GAE5CzsgB,KAAKqnkB,wBAAwBjigB,GAC/CplE,KAAKi2E,UAAUutb,MAAMjiB,iBAAkB,EAEvC,IAAIhkf,EAAQyC,KAAKi2E,UAAU6me,YAAYtwC,EAAUnE,SAAUmE,GACvDvtf,EAAM1hB,EAAQivgB,EAAU/D,WAAWv6M,UACnCm3P,EAAcrljB,KAAKi2E,UAAU6me,YAAYrwC,EAAQpE,SAAUoE,GAC3D64C,EAAeD,EAAc54C,EAAQhE,WAAWv6M,UAChD66Q,EAAW/okB,KAAKgpkB,2BAA2BzrkB,EAAO0hB,EAAKomiB,EAAaC,GACxE/njB,EAAQwrkB,EAASxrkB,MACjB0hB,EAAM8pjB,EAAS9pjB,IAIf,IAAK,IAHDC,EAAQkmD,EAAMiyb,aAAa94f,QAAQkugB,EAAQpE,UAC3C4gE,EAAgB7jgB,EAAMiyb,aAAa94f,QAAQiugB,EAAUnE,UACrDwgE,OAAa3tkB,EACRgB,EAAI+skB,EAAe/skB,GAAKgjB,EAAOhjB,IAAK,CAEzC,IAAK,IADDwpE,EAAMN,EAAMiyb,aAAan7f,GACpBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GACxBm5hB,EAAY78iB,KAAKi2E,UAAU6me,YAAYp3e,EAAKqC,GAChD,GAAI+2b,GAAc/+d,MAAMxiC,EAAO,IAAMuhgB,GAAc/+d,MAAM88gB,EAAW,IAC7D/9C,GAAc/+d,MAAM88gB,EAAW,GAAK/9C,GAAc/+d,MAAM9gB,EAAK,GAChE,GAAIxhB,EAAkBorkB,GAClBA,EAAa9ggB,MAEZ,CACG7rE,IAAM+skB,IACNJ,EAAWpgE,WAAWvE,gBAAkBn8b,EAAK0gc,WAAWvE,eACxD2kE,EAAWpgE,WAAW31M,YAAc/qP,EAAK0gc,WAAW31M,WACpD9yT,KAAKkpkB,aAAaL,EAAY9ggB,IAElC,IAAK,IAAIzhD,EAAI,EAAGA,EAAIyhD,EAAKsvb,aAAa76f,OAAQ8pB,IAAK,CAC/C,IAAI4hf,EAAQngc,EAAKsvb,aAAa/we,GAC9B,GAAiC,IAA7ByhD,EAAKsvb,aAAa76f,QAAgB0rgB,aAAiBhR,IAClB,IAA9BgR,EAAM7Q,aAAa76f,OACtB,MAEJqskB,EAAWxxE,aAAa7yf,KAAK0jgB,EAAM7ogB,SAEvCqmE,EAAI2xb,aAAa1ue,OAAOjF,EAAG,GAC3BqkD,EAAK11D,UACLqR,KAIZ,GAAgC,IAA5BgiD,EAAI2xb,aAAa76f,OAAc,CAC/B,IAAIyyO,EAAW7pK,EAAMiyb,aAAa94f,QAAQmnE,GAC1CA,EAAI+nc,0BACJroc,EAAMiyb,aAAa1ue,OAAOsmN,EAAU,GACpCvpK,EAAIrzD,UACJ6M,IACAhjB,KAeR,OAZKuB,EAAkBorkB,IAAeI,EAAgB/pjB,IAClD2pjB,EAAWpgE,WAAW73M,QAAU1xS,EAAQ+pjB,EAAgB,GAE5DjpkB,KAAKmpkB,2BAA2BN,GAChCzjgB,EAAM2nc,eAAe,GACrB3nc,EAAMmlc,gBACNnlc,EAAM8lc,eAAgB,EACtB9lc,EAAM6lc,oBACN7lc,EAAM8lc,eAAgB,EACtBlrgB,KAAKwuf,OAAOlhc,OAAOg/d,cAAclnd,GAEjCplE,KAAKi2E,UAAUutb,MAAMjiB,iBAAkB,EAChCsnF,GAEX1zE,EAAO/5f,UAAU8tkB,aAAe,SAAUL,EAAYh/D,GAClD,IAAIu/D,OAAoBlukB,EACpBmukB,EAAc,KAOlB,GANK5rkB,EAAkBorkB,EAAWpgE,WAAW56M,WACzCu7Q,EAAoBP,EAAWpgE,WAAW56M,SAEzCpwT,EAAkBosgB,EAAUpB,WAAW56M,WACxCw7Q,EAAcx/D,EAAUpB,WAAW56M,UAEnCpwT,EAAkB2rkB,KAAsB3rkB,EAAkB4rkB,GAG9D,GAAI5rkB,EAAkB2rkB,IAClBA,EAAoB,IAAInnE,GAAS4mE,EAAWpgE,aAC1B9O,WAAW0vE,OAE5B,CAAA,GAAI5rkB,EAAkB4rkB,GACvB,OAGIR,EAAWxgE,SAASp5R,WAAa46R,EAAUxB,SAASp5R,WACpDm6V,EAAkB18jB,IAAMm8jB,EAAW15D,yBAAyBi6D,EAAkB18jB,IAAK28jB,EAAY18jB,QAC/Fy8jB,EAAkBz8jB,OAASk8jB,EAAW15D,yBAAyBi6D,EAAkBz8jB,OAAQ08jB,EAAY18jB,WAIjHwof,EAAO/5f,UAAU+tkB,2BAA6B,SAAUphgB,GACpD,IAAK,IAAI7rE,EAAI,EAAGA,EAAI6rE,EAAKsvb,aAAa76f,OAAQN,IAC1C6rE,EAAKsvb,aAAan7f,GAAG4V,MAAQ5V,GAMrCi5f,EAAO/5f,UAAU89gB,cAAgB,WAC7B,GAAIl5gB,KAAKi2E,UAAU2hK,UAAY53O,KAAKi2E,UAAU14E,MAAM05f,UAAUsR,gBAAkBvogB,KAAKi2E,UAAUh3D,IAAIg4e,UAAUsR,cACzG,OAAO,EAEIvogB,KAAKi2E,UAAU14E,MACjByC,KAAKi2E,UAAUh3D,IACvBjf,KAAKi2E,UAAU8ge,YACL/2iB,KAAKi2E,UAAUh3D,IACjBjf,KAAKi2E,UAAU14E,OAE5B,IAAIivgB,EAAYxsgB,KAAKonkB,aAAapnkB,KAAKi2E,UAAU8ge,WAC7CtqC,EAAUzsgB,KAAKonkB,cAAcpnkB,KAAKi2E,UAAU8ge,WAC5CP,EAAgBx2iB,KAAKi2E,UAAUo7d,mBAAmB7kC,EAAWC,GACjE,GAAI+pC,EAAcpuC,WAAWjkgB,SAASsogB,KAC7BzsgB,KAAKi2E,UAAU0ge,aAAaH,EAAe/pC,GAAU,CACtDD,EAAYxsgB,KAAKi2E,UAAUwge,gBAAgBjqC,EAAWgqC,GACtD/pC,EAAUzsgB,KAAKi2E,UAAUwge,gBAAgBhqC,EAAS+pC,GAClD,IAAI5lP,EAAU,EACd,GAAI47M,EAAUnE,WAAaoE,EAAQpE,SAAU,CAEzC,IAAK,IADDihE,EAAiB98D,EAAUnE,SAAShR,aAAa94f,QAAQiugB,GACpDtwgB,EAAIotkB,EAAgBptkB,GAAKswgB,EAAUnE,SAAShR,aAAa94f,QAAQkugB,GAAUvwgB,IAAK,CACrF,IAAI6rE,EAAOykc,EAAUnE,SAAShR,aAAan7f,GACvCuygB,EAAW1mc,EAAK8lc,eACpB,GAAI3xgB,IAAMotkB,EAAgB,CACtB,GAAIvhgB,EAAK0gc,WAAW73M,UAAYA,EAC5B,OAAO,EAEX,IAAKnzT,EAAkBgxgB,IAChB1mc,EAAKinK,cAAiBy/R,EAAShG,WAAW31M,WAAa27M,EAASz/R,YACnE,OAAO,EAGf4hF,EAAU7oP,EAAK0gc,WAAW73M,QAE9B,OAAO,EAEX,OAAO5wT,KAAKupkB,6BAA6B/8D,EAAUpE,WAAYoE,EAAWC,GAGlF,OAAO,GAEXtX,EAAO/5f,UAAUmukB,6BAA+B,SAAUnkgB,EAAOonc,EAAWC,GACxE,IAAIvtf,EAAQkmD,EAAMiyb,aAAa94f,QAAQkugB,EAAQpE,UAC3C4gE,EAAgB7jgB,EAAMiyb,aAAa94f,QAAQiugB,EAAUnE,UACrDmhE,EAAYxpkB,KAAKi2E,UAAU6me,YAAYtwC,EAAUnE,SAAUmE,GAC3Di9D,EAAUD,EAAYh9D,EAAU/D,WAAWv6M,UAC3Cm3P,EAAcrljB,KAAKi2E,UAAU6me,YAAYrwC,EAAQpE,SAAUoE,GAC3D64C,EAAeD,EAAc54C,EAAQhE,WAAWv6M,UAChD66Q,EAAW/okB,KAAKgpkB,2BAA2BQ,EAAWC,EAASpkB,EAAaC,GAChFkkB,EAAYT,EAASxrkB,MACrBkskB,EAAUV,EAAS9pjB,IAMnB,IAAK,IALDyqjB,EAAgB,EAChBC,EAAiB,EACjBC,GAAqB,EACrBC,GAAsB,EACtBz+D,KACKlvgB,EAAI+skB,EAAe/skB,GAAKgjB,EAAOhjB,IAAK,CAKzC,IAAK,IAJDwpE,EAAMN,EAAMiyb,aAAan7f,GACzB4tkB,EAAU,EACVC,EAAW,EACX9gE,GAAY,EACPvlf,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GACxBm5hB,EAAY78iB,KAAKi2E,UAAU6me,YAAYp3e,EAAKqC,GAChD,GAAI/nE,KAAKgqkB,yBAAyBR,EAAWC,EAAS5sB,GAAY,CAC9D+sB,GAAqB,EACrBC,GAAsB,EAClB9hgB,EAAK0gc,WAAW73M,QAAU,GAC1Bw6M,EAAgB5mgB,KAAKujE,GAEpBkhc,IACD6gE,EAAUjtB,EACVktB,EAAWltB,EACX5zC,GAAY,GAEhB,IAAIwF,EAAW1mc,EAAK8lc,eACH,IAAbk8D,GAAkBjrE,GAAc/+d,MAAMgqiB,EAAU,KAAOjrE,GAAc/+d,MAAM88gB,EAAW,KACtFktB,EAAWltB,GAEfktB,GAAYjrE,GAAcO,oBAAoBt3b,EAAK0gc,WAAWv6M,WAC9D,IAAI+7Q,EAAsBjqkB,KAAKkqkB,+BAA+BV,EAAWC,EAAS1hgB,GAAM,GACpFoigB,EAAsBnqkB,KAAKkqkB,+BAA+BV,EAAWC,EAAS1hgB,GAAM,GAGpFqigB,EAAyC,IAA3Bh/D,EAAgB5ugB,QAA2C,IAA3B4ugB,EAAgB5ugB,QAAgB4ugB,EAAgB,KAAOrjc,EAErGsigB,EAAkBrqkB,KAAKsqkB,iBAAiBl/D,EAAiBrjc,EAAMkigB,EAAqBE,GAExF,GAAIjukB,IAAMgjB,IAAUzhB,EAAkBgxgB,IAAa1mc,EAAK0gc,WAAW73M,QAAU69M,EAAShG,WAAW73M,UACzFy5Q,EACJ,OAAO,EAEX,GAAInukB,IAAM+skB,EACN,IAAK,IAAI7xf,EAAI,EAAGA,EAAIg0b,EAAgB5ugB,OAAQ46E,IAAK,CAEzC,IAAIw5O,EAAWw6M,EAAgBh0b,GAAGixb,SAASp5R,SAAWm8R,EAAgBh0b,GAAGqxb,WAAW73M,QAAW,EAC/F,GAAIA,GAAWlrP,EAAIupK,SAAU,CAOzB,GANIm8R,EAAgBh0b,GAAG43J,YAAcjnK,EAAKinK,YACtC66V,GAAsB,EAGtBD,GAAqB,EAErB1tkB,IAAMgjB,GAASksf,EAAgBh0b,KAAOrP,GACnC6oP,EAAW7oP,EAAKsgc,SAASp5R,SAAWlnK,EAAK0gc,WAAW73M,QAAU,EACjE,OAAO,EAEPA,IAAYlrP,EAAIupK,UAAajvO,KAAKkqkB,+BAA+BV,EAAWC,EAAS1hgB,GAAM,IAC3Fqjc,EAAgBzif,OAAOyif,EAAgB7sgB,QAAQ6sgB,EAAgBh0b,IAAK,IAMxF,GAAI6yf,IAAwBxskB,EAAkBgxgB,IACvC27D,GACCrigB,EAAKinK,cAAgBy/R,EAASz/R,YAAc,GAAKhvO,KAAKuqkB,eAAexigB,GACzE,OAAO,GAInB,GAAI7rE,IAAM+skB,EACNS,EAAgBI,EAChBH,EAAiBI,MAEhB,CACD,GAAIA,EAAW,GAAKD,EAAU,KACnBF,GAAsBv9jB,KAAK0zB,MAAM2piB,KAAmBr9jB,KAAK0zB,MAAM+piB,KAC9DD,GAAuBx9jB,KAAK0zB,MAAM4piB,KAAoBt9jB,KAAK0zB,MAAMgqiB,IACrE,OAAO,EAGf,GAAI7tkB,IAAMgjB,EACN,OAAO,GAInB,OAAO,GAEXi2e,EAAO/5f,UAAUmvkB,eAAiB,SAAUxigB,GACxC,IAAI0mc,EAAW1mc,EAAK8lc,eAChBmvC,EAAWh9iB,KAAKwuf,OAAOv4a,UAAU6me,YAAY/0e,EAAKsgc,SAAUtgc,GAE5Dv7D,EADexM,KAAKwuf,OAAOv4a,UAAU6me,YAAY/0e,EAAKsgc,SAAUoG,GAC1C3P,GAAcO,oBAAoBoP,EAAShG,WAAWv6M,WAChF,OAAI4wM,GAAc/+d,MAAMvzB,EAAM,KAAOsyf,GAAc/+d,MAAMi9gB,EAAU,IAMvE7nD,EAAO/5f,UAAU4ukB,yBAA2B,SAAUR,EAAWC,EAAS5sB,GACtE,OAAI/9C,GAAc/+d,MAAMypiB,EAAW,IAAM1qE,GAAc/+d,MAAM88gB,EAAW,IACjE/9C,GAAc/+d,MAAM88gB,EAAW,GAAK/9C,GAAc/+d,MAAM0piB,EAAS,IAM5Et0E,EAAO/5f,UAAU8ukB,+BAAiC,SAAUV,EAAWC,EAAS1hgB,EAAMyigB,GAClF,IAAIC,EAAiBD,EAASzigB,EAAK8lc,eAAiB9lc,EAAKwoc,WACrDssC,EAAY,EAChB,OAAIp/iB,EAAkBgtkB,KAGtB5tB,EAAY78iB,KAAKwuf,OAAOv4a,UAAU6me,YAAY2tB,EAAepiE,SAAUoiE,GAChEzqkB,KAAKgqkB,yBAAyBR,EAAWC,EAAS5sB,KAG7D1nD,EAAO/5f,UAAUkvkB,iBAAmB,SAAUl/D,EAAiBrjc,EAAM2igB,EAAqBP,GACtF,IAAIQ,EAAY5igB,EAAKsgc,SACrB,GAAI+C,EAAgB5ugB,OAAS,EACzB,IAAK,IAAIN,EAAI,EAAGA,EAAIkvgB,EAAgB5ugB,OAAQN,IAAK,CAC7C,IAAI0ukB,EAAmBx/D,EAAgBlvgB,GAAGmsgB,SACtCz3M,EAAWg6Q,EAAiB37V,SAAWm8R,EAAgBlvgB,GAAGusgB,WAAW73M,QAAW,EACpF,GAAIw6M,EAAgBlvgB,KAAO6rE,IAAoC,IAA3Bqjc,EAAgB5ugB,QAAgBwD,KAAK6qkB,qBAAqBz/D,EAAiBrjc,MACtGoigB,IAAuBO,EAC5B,OAAO,EAEX,GAAIt/D,EAAgBlvgB,KAAO6rE,GAAQ6igB,EAAiB37V,SAAW07V,EAAU17V,UAClE2hF,IAAa+5Q,EAAU17V,SAAWlnK,EAAK0gc,WAAW73M,QAAU,EAC/D,OAAO,EAInB,OAAO,GAEXukM,EAAO/5f,UAAUyvkB,qBAAuB,SAAUz/D,EAAiBrjc,GAC/D,IAAK,IAAI7rE,EAAI,EAAGA,EAAIkvgB,EAAgB5ugB,OAAQN,IACxC,GAAIkvgB,EAAgBlvgB,KAAO6rE,GAAQqjc,EAAgBlvgB,GAAG8yO,cAAgBjnK,EAAKinK,YACvE,OAAO,EAGf,OAAO,GAKXmmR,EAAO/5f,UAAUyrkB,yBAA2B,SAAUlG,EAActnM,GAGhE,GAFAr5X,KAAKggkB,uBACLhgkB,KAAKklkB,gBAAgBvE,EAActnM,IAC9BA,EAAa,CACd,IAAIkpJ,OAAgB,EAChB6K,EAAmBuzC,EACvB,GAEIvzC,EADA7K,EAAgBvihB,KAAKi2E,UAAUq7d,sBAAsBlkB,SAEhD7K,GAAiBA,EAAcnve,OAAOuthB,IAC1CljkB,EAAkB8khB,GAInBvihB,KAAKi2E,UAAUgqe,gBAAgB0gB,GAAc,GAH7C3gkB,KAAKi2E,UAAUgqe,gBAAgB19B,GAAe,GAMtDvihB,KAAKuxf,qBAET4D,EAAO/5f,UAAU8pkB,gBAAkB,SAAUvE,EAActnM,GACvD,IAAIw5I,EAAa7ygB,KAAKi2E,UAAU14E,MAAMmuhB,cAClC//gB,EAAS3L,KAAKi2E,UAAU14E,MAAMoO,OAC9ByhhB,EAAmBpthB,KAAKi2E,UAAU14E,MAAM05f,UAE5C,GADAm2B,EAAmBA,EAAiBrmB,cAAc/mgB,KAAKwuf,QACnDn1H,EAAa,CAEb,IAAIz8V,EAAW58B,KAAKi2E,UAAUo4d,cAAcjhB,EAAiB1zY,WACzDoxb,EAAgBnK,EAAa3jjB,WAAa2jjB,EAAa3jjB,WAAW5C,SAAS5d,OAAS,EAExFwD,KAAKomkB,YAAYh5C,EAAkBuzC,EAAcmK,EAAen/jB,EAAQkngB,EAAYj2e,EAAUwwf,EAAiB1zY,gBAE1G/tI,EAAS,GACd3L,KAAKomkB,YAAYh5C,EAAkBuzC,EAAc,EAAG,EAAGvzC,EAAiBpwgB,WAAYrR,EAAQkngB,GAEhG,IAAI3J,EAAiBkkB,EAAiBvmB,kBAElC2b,GADJ4K,EAAmB/zJ,EAAc6vI,EAAeA,EAAe1sgB,OAAS,GAAK0sgB,EAAe,IACzD5R,gBAAgBD,aAAa94f,QAAQ6uhB,GACpE/zJ,GACAmpJ,IAEJ,IAAI1lB,EAAaswB,EAAiB91B,gBAClCqpE,EAAa7ujB,MAAQs7gB,EAAiBt7gB,MACtC6ujB,EAAarpE,gBAAkBwF,EAC/BA,EAAWzF,aAAa1ue,OAAO65f,EAAa,EAAGm+C,GAC/C3gkB,KAAK6gkB,sBAAsBxnM,EAAc+zJ,EAAmBuzC,GAAc,GAC1EA,EAAa5qjB,OAAS,EACtB/V,KAAKwuf,OAAOlhc,OAAO++d,2BAA2Bs0C,EAAa7ujB,MAAOgrf,EAAY6jE,GAAc,IAGhGxrE,EAAO/5f,UAAUgrkB,YAAc,SAAUh5C,EAAkBuzC,EAAcn+C,EAAa3X,EAAao8D,EAAWlyD,EAAWiuC,GACrH,GAAyC,IAArC2d,EAAatpE,aAAa76f,OAAc,CACxC,IAAIytD,EAAO,IAAIo9c,GAAWs5D,GAC1BA,EAAatpE,aAAa7yf,KAAKylD,GAEnC,IAAI8ghB,GAAU,EACd/qkB,KAAKwuf,OAAOlhc,OAAOuyd,oBAAoBuN,GACvCpthB,KAAKwuf,OAAOlhc,OAAOuyd,oBAAoB8gD,GACvC,IAAK,IAAIj9iB,EAAI,EAAGA,EAAI0pgB,EAAiB/1B,aAAa76f,OAAQknB,IAAK,CAC3D,IAAImvf,EAAaua,EAAiB/1B,aAAa3ze,GAC/C,GAAIujjB,IAAcp0D,GAAcmwC,IAAYnwC,EAAY,CACpD2P,EAAcxihB,KAAKgrkB,YAAYn4D,EAAYhI,EAAakK,EAAWyN,EAAam+C,GAChF,MAEJ,GAAI3d,IAAYnwC,EAAY,CACxB2P,EAAcxihB,KAAKgrkB,YAAYn4D,EAAY,EAAGkC,EAAWyN,EAAam+C,GACtE,MAEKsG,IAAcp0D,GACnBk4D,GAAU,EAEVvoD,EAAcxihB,KAAKgrkB,YAAYn4D,EAAYhI,EAAa7qgB,KAAKwuf,OAAOv4a,UAAUo4d,cAAcx7B,GAAa2P,EAAam+C,IAEjHoK,IACLvoD,EAAcxihB,KAAKgrkB,YAAYn4D,EAAY,EAAG7ygB,KAAKwuf,OAAOv4a,UAAUo4d,cAAcx7B,GAAa2P,EAAam+C,IAGpH3gkB,KAAKirkB,gBAAgB79C,GAChBA,EAAiB7kB,eAClBvogB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBiB,EAAkB,EAAG,IAOlEj4B,EAAO/5f,UAAU4vkB,YAAc,SAAUn4D,EAAYhI,EAAakK,EAAWyN,EAAavrB,GAGtF,IAAK,IAFD/3e,EAAQ,EAEHhjB,GADO22gB,EAAW5b,UAAUI,aAAa94f,QAAQs0gB,GAC7C,GAAG32gB,EAAI22gB,EAAWz4f,SAAS5d,OAAQN,IAAK,CACjD,IAAIsiK,EAASq0W,EAAWz4f,SAASle,GACjC,GAAI2ugB,GAAe3rf,EAAQs/I,EAAOhiK,QAAUgiK,aAAkB2qW,GACpD3qW,aAAkB2qW,KACpBjqf,GAASs/I,EAAOhiK,YAFxB,CAMA,IAAIqpB,EAAa,EACbglf,EAAc3rf,IACd2G,EAAaglf,EAAc3rf,GAE/B,IAAI6G,EAAWgvf,EAAY71f,EAO3B,GANI6G,EAAWy4I,EAAOhiK,SAClBupB,EAAWy4I,EAAOhiK,QAElBqpB,EAAa,IACb3G,GAAS2G,GAEM,IAAfA,GAAoBE,IAAay4I,EAAOhiK,OACxCy6f,EAAUj6e,WAAW5C,SAASuO,OAAO65f,EAAa,EAAGhkX,GACrDA,EAAOv0G,KAAOgtc,EAAUj6e,WACxBwlgB,IAGA3P,EAAWz4f,SAASuO,OAAOzsB,EAAG,GAC9BA,SAGC,GAAIsiK,aAAkBoqW,GAAgB,CAEvC,IAAInhc,EAAO,IAAImhc,GACfnhc,EAAK4qb,gBAAgBsH,WAAWn7V,EAAO6zV,iBACvC5qb,EAAKz4C,KAAOwvI,EAAOxvI,KAAK6H,OAAOhR,EAAYE,EAAWF,GACtDoxe,EAAUj6e,WAAW5C,SAASuO,OAAO65f,EAAa,EAAG/6c,GACrDA,EAAKxd,KAAOgtc,EAAUj6e,WACtBwlgB,IACAhkX,EAAOxvI,KAAOwvI,EAAOxvI,KAAK3tB,MAAM,EAAGwkB,GAAc24I,EAAOxvI,KAAK3tB,MAAM0kB,GAEvE,GAAIgvf,GAAa71f,EAAQ6G,EAAWF,EAChC,MAEJ3G,GAAS6G,EAAWF,GAExB,OAAO28f,GASXrtB,EAAO/5f,UAAUi4jB,4BAA8B,SAAUrggB,EAAQz1D,EAAO0hB,GACpE,IAAIg3D,EAAYj2E,KAAKwuf,OAAOv4a,UAC5B,GAAe,IAAXjjB,EAAc,CACd,IAAIsyP,EAAgB,IAAI4oP,GAAaj4d,EAAUutb,OAC/CxjgB,KAAK+uiB,2BAA2BzpP,EAAe/nT,GAC/CyC,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkB7mO,EAAc2xM,UAAW,EAAG,GACjEj3f,KAAK+uiB,2BAA2B94d,EAAU14E,MAAO0hB,GACjDjf,KAAK+uiB,2BAA2B94d,EAAUh3D,IAAKA,GAEnD,GAAe,IAAX+zC,EAAc,CACVsyP,EAAgB,IAAI4oP,GAAaj4d,EAAUutb,OAC/CxjgB,KAAK+uiB,2BAA2BzpP,EAAe/nT,GAC/C,IAAIwiiB,EAAc,IAAImO,GAAaj4d,EAAUutb,OAC7CxjgB,KAAK+uiB,2BAA2BhP,EAAa9ghB,GAC7Cjf,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkB7mO,EAAc2xM,UAAW,EAAG,GAC7D8oC,EAAY9oC,YAAc3xM,EAAc2xM,WACxCj3f,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkB4T,EAAY9oC,UAAW,EAAG,GAGnEhhb,EAAUutb,MAAMliB,oBAChBthf,KAAKwuf,OAAOlhc,OAAOyge,qBACf/thB,KAAKwuf,OAAOgV,MAAMmf,uBAClB3ihB,KAAKkrkB,4BAGbj1f,EAAUutb,MAAMliB,mBAAoB,EACpCrra,EAAU14E,MAAMsxiB,wBAAuB,GACnC54d,EAAU2hK,QACV3hK,EAAUh3D,IAAI6vhB,oBAAoB74d,EAAU14E,OAG5C04E,EAAUh3D,IAAI4vhB,wBAAuB,GAEzC54d,EAAUk/d,sBAAwBl/d,EAAUh3D,IAAI2b,SAAS7tB,EACzDkpE,EAAU+le,sBAAqB,GAC/Bh8iB,KAAKwuf,OAAOj/X,cACZvvH,KAAKwuf,OAAOI,mBACZ5uf,KAAKuxf,oBACLvxf,KAAKw9jB,kBAAmB,GAQ5BroE,EAAO/5f,UAAUm/jB,SAAW,SAAUtkf,EAAWile,GAC7C,IAAKl7iB,KAAKwuf,OAAOsoC,gBAAkB92hB,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcozC,0BASxE,OARI1tkB,EAAkBuC,KAAK+3hB,cAAcmR,yBACjClpiB,KAAK+3hB,cAAcmR,wBACuC,yBAArDlpiB,KAAK+3hB,cAAcmR,uBAAuBl2e,QACa,yBAArDhzD,KAAK+3hB,cAAcmR,uBAAuBl2e,UACrDhzD,KAAKwviB,oBAAiBt0iB,EACtB8E,KAAKyviB,kBAAev0iB,QAExB8E,KAAKw9jB,kBAAmB,GAGxB//jB,EAAkBuC,KAAKwuf,OAAOg9B,gBAC9BxrhB,KAAKwuf,OAAOy/B,mBACZjuhB,KAAKwuf,OAAOlhc,OAAO0td,sBACnBh7gB,KAAKwuf,OAAOI,mBACP34a,EAAUutb,MAAMliB,oBACjBrra,EAAU+le,sBAAqB,GAC/Bh8iB,KAAKwviB,oBAAiBt0iB,EACtB8E,KAAKyviB,kBAAev0iB,IAGxBuC,EAAkBy9iB,KAClBA,EAAqBjle,EAAU2hK,SAE/B3hK,EAAUutb,MAAMliB,oBAChBrra,EAAUutb,MAAMliB,mBAAoB,EACpCrra,EAAUutb,MAAMjiB,iBAAkB,EAClCvhf,KAAKwuf,OAAOlhc,OAAOyge,qBACf/thB,KAAKwuf,OAAOgV,MAAMmf,uBAClB3ihB,KAAKkrkB,2BAETlrkB,KAAKs8jB,eAAermf,GACpBA,EAAUk/d,sBAAwBl/d,EAAUh3D,IAAI2b,SAAS7tB,EACzDkpE,EAAU+le,sBAAqB,GAC/Bh8iB,KAAKwuf,OAAOj/X,cACZvvH,KAAKwviB,oBAAiBt0iB,EACtB8E,KAAKyviB,kBAAev0iB,EACpB8E,KAAKwuf,OAAOlhc,OAAO4sd,aAAc,GAEjCl6gB,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,yBACc,gBAArDlpiB,KAAK+3hB,cAAcmR,uBAAuBl2e,QACgB,iBAArDhzD,KAAK+3hB,cAAcmR,uBAAuBl2e,QACzChzD,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,aACvD75f,KAAK+3hB,cAAcmR,uBAAuBC,mBAAmB3siB,OAAS,GACtEwD,KAAK+3hB,cAAcmR,uBAAuBE,kBAE9CppiB,KAAK+3hB,cAAcsR,iBAEvBrpiB,KAAKuxf,qBAKT4D,EAAO/5f,UAAU8vkB,yBAA2B,WACxClrkB,KAAKorkB,+BAA+BprkB,KAAKi2E,UAAU14E,MAAM05f,UAAU6F,YACnE98f,KAAKqrkB,iBAAiBrrkB,KAAKi2E,UAAU14E,MAAM05f,UAAU6F,aAKzD3H,EAAO/5f,UAAUgwkB,+BAAiC,SAAU7qkB,GAIxD,IAAK,IAHDo+O,EAAcp+O,EAAKgtK,KAEnB+9Z,EAAwC,gBAD5C/qkB,EAAOP,KAAKwuf,OAAOlhc,OAAOoud,2BAA2Bn7gB,IAC9BmngB,kBAA+D,eAA1BnngB,EAAKmngB,iBACxDxrgB,EAAI,EAAGA,EAAI8D,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQN,IAAK,CAC/C,IAAIqxK,EAAOvtK,KAAKwuf,OAAOzmQ,MAAM7rP,GAC7B,GAAKA,EAAI,IAAM,GAAMqxK,EAAKq4V,YAAY,GAAG7O,cAAc86B,qBACH,IAAhDtxhB,EAAKmngB,iBAAiBnpgB,QAAQ,aAC9B,OAEe,IAAfgvK,EAAKz7J,OAAey7J,EAAKq4V,YAAY,GAAG7O,cAAc86B,qBACN,IAAhDtxhB,EAAKmngB,iBAAiBnpgB,QAAQ,cAG9BogP,IAAgBpxE,IACZA,EAAKq4V,YAAY,GAAG7O,cAAc+6B,yBAC9Bw5C,IAAepvkB,EAAI,GAAK,GAAM,EAC9B8D,KAAKurkB,uCAAuCh+Z,EAAMhtK,GAAmD,IAA7CA,EAAKmngB,iBAAiBnpgB,QAAQ,WAE/E+skB,IAAepvkB,EAAI,GAAK,GAAM,GACjCqxK,EAAKq4V,YAAY,GAAG7O,cAAc86B,oBAAuB31hB,EAAI,IAAM,GACnE8D,KAAKurkB,uCAAuCh+Z,EAAMhtK,GAAmD,IAA7CA,EAAKmngB,iBAAiBnpgB,QAAQ,WAK9FyB,KAAKurkB,uCAAuCh+Z,EAAMhtK,GAAmD,IAA7CA,EAAKmngB,iBAAiBnpgB,QAAQ,cAQtG42f,EAAO/5f,UAAUmwkB,uCAAyC,SAAUh+Z,EAAMs4V,EAAQn5e,GAC9E,GAAIm5e,EAAOt4V,OAASA,EAAM,CACtB,IAAIi+Z,EAAW3lE,EAAOxmgB,QACtBmskB,EAASj+Z,KAAOA,EAChBvtK,KAAKwuf,OAAOgtB,mBAAmBgwD,EAASz0E,cAAerqe,GACvD8+iB,EAAWxrkB,KAAKwuf,OAAOlhc,OAAOmud,wBAAwBz7gB,KAAKwuf,OAAQg9E,GACnE,IAAIC,OAAiB,EACjB/+iB,GACA++iB,EAAiBl+Z,EAAKw6V,aACtBx6V,EAAKw6V,aAAeyjE,IAGpBC,EAAiBl+Z,EAAKy6V,aACtBz6V,EAAKy6V,aAAewjE,GAExBxrkB,KAAKu0gB,oBAAoBk3D,GACzBA,EAAep5jB,YAMvB8if,EAAO/5f,UAAUm5gB,oBAAsB,SAAU1O,GAC7C,IAAK,IAAI3pgB,EAAI,EAAGA,EAAI2pgB,EAAOxO,aAAa76f,OAAQN,IAC5C8D,KAAK0rkB,mBAAmB7lE,EAAOxO,aAAan7f,KAMpDi5f,EAAO/5f,UAAUswkB,mBAAqB,SAAUxjE,GACxCA,aAAiBjB,GACjBjngB,KAAK2rkB,iBAAiBzjE,GAGtBlogB,KAAKy4Y,YAAYyvH,IAMzB/S,EAAO/5f,UAAUuwkB,iBAAmB,SAAUvmgB,GAC1C,IAAK,IAAIlpE,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAE3C,IAAK,IADDwpE,EAAMN,EAAMiyb,aAAan7f,GACpBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACzC1jB,KAAKu0gB,oBAAoB7uc,EAAI2xb,aAAa3ze,KAOtDyxe,EAAO/5f,UAAUiwkB,iBAAmB,SAAUpjE,GAC1C,IACIz6V,EADA9mK,EAAOuhgB,EAAaP,iBAEX,oBAAThhgB,GAAuC,oBAATA,EAC9B8mK,EAAY,EAEPy6V,EAAalR,cAAc+6B,yBAE5BtkX,EADAy6V,EAAalR,cAAc86B,mBACL,eAATnrhB,GAAkC,eAATA,EAAyB,EAAI,GAG5B,IAA1BA,EAAKnI,QAAQ,QAAkB,EAAI,EAKlC,KADlBivK,EAAYy6V,EAAalR,cAAc86B,mBAAqB,EAAI,IACZ,IAA7B7xhB,KAAKwuf,OAAOzmQ,MAAMvrP,SACrCgxK,EAAY,GAGpB,IAAID,EAAOvtK,KAAKwuf,OAAOzmQ,MAAMv6E,GAC7B,IAAgC,IAA5B9mK,EAAKnI,QAAQ,UAAkB,CAC/B,IAAI0+iB,EAAa1vY,EAAKq4V,YAAY,GAAG5of,WACjC6+B,EAAQijd,GAAcO,oBAAoB4I,EAAalR,cAAc56O,WACrEwjR,EAAiB7gC,GAAcO,oBAAoB4I,EAAalR,cAAc4oC,gBAElF,GADA9jf,EAAQxvC,KAAKC,IAAIqzhB,EAAiBpyX,EAAKw6V,aAAahyf,OAAQ8lC,GACxDohgB,EAAWjwiB,IAAM6uC,EAAO,CACxB77C,KAAKwuf,OAAO8zB,iBAAiB/0W,EAAKq4V,YAAY,GAAG7O,cAAexpV,GAEhE,IAAIu4W,GADJm3B,EAAaA,EAAWl2C,cAAc/mgB,KAAKwuf,SACf6X,uBACxByf,IACA9lhB,KAAKwuf,OAAOmxB,WAAWmG,EAAW94gB,EAAI84gB,EAAW/vgB,QAC7CkniB,EAAW3lD,kBAAoBwuB,EAAWxuB,iBAE1Ct3f,KAAKwuf,OAAOlhc,OAAOs+d,sBAAsBqxB,EAAYn3B,EAAWxuB,gBAAiBwuB,EAAWhgB,aAAe,GAAG,IAGtH9lgB,KAAKwuf,OAAOg9B,aAAeyxB,QAI/Bj9iB,KAAK4rkB,wBAAwBr+Z,EAAM06V,GAEnCjogB,KAAKwuf,OAAOg9B,eACZxrhB,KAAKwuf,OAAO00B,cAAcz2d,QAC1BzsD,KAAKwuf,OAAOlhc,OAAOyge,uBAM3B54B,EAAO/5f,UAAUwwkB,wBAA0B,SAAUr+Z,EAAMy6V,GAGvD,IAAK,IADDwjB,EADA1uB,EAAavvV,EAAKq4V,YAAY,GAEzB1pgB,EAAI,EAAGA,EAAI4ggB,EAAWzF,aAAa76f,OAAQN,IAAK,CACrD,IAAIgsgB,EAAQpL,EAAWzF,aAAan7f,GACpC,GAAIgsgB,EAAMl7f,EAAIk7f,EAAMnyf,OAASiyf,EAAah7f,EAAG,CACzCw+gB,EAAetjB,EACf,MAEJ,GAAIpL,EAAWzF,aAAa76f,OAAS,IAAMN,GAAKgsgB,EAAMl7f,EAAIk7f,EAAMnyf,OAASiyf,EAAah7f,EAAG,CACrFw+gB,EAAetjB,EACf,OAGRlogB,KAAKwuf,OAAO8zB,iBAAiBxlB,EAAW/F,cAAexpV,GACvDvtK,KAAKwuf,OAAOmxB,WAAW6L,EAAax+gB,GACpChN,KAAKwuf,OAAOg9B,aAAeA,GAa/Br2B,EAAO/5f,UAAU8riB,uBAAyB,SAAUhse,EAAUn+D,EAAOq9C,GACjE,IAAI67B,EAAYj2E,KAAKwuf,OAAOv4a,UAC5B,IAAIA,EAAUutb,MAAMtR,gBAAmBj8a,EAAUutb,MAAM3U,iBAAvD,CAGAz0c,GAAS38C,EAAkB28C,IAAkBA,EAC7C,IAAI4Y,EAAUkI,EAAS,GAAGhwC,cAAgBgwC,EAAS75D,MAAM,GACrD41f,EAAYhhb,EAAU14E,MAAM05f,UACjBA,EAAUI,aAAaJ,EAAUI,aAAa76f,OAAS,GACtE,GAAIy5E,EAAU2hK,SAAqC,SAA1B3hK,EAAU4ic,YAa/B,OAZA5ic,EAAUgie,qBAAsB,EAC5Bhie,EAAUh3D,IAAI4sjB,kBACd7rkB,KAAK4sc,YAAY55Y,GACjBhzD,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtCthf,KAAK8rkB,qBAAqB70E,EAAU5E,gBAAiBn3b,EAAUn+D,EAAOq9C,GACtEp6C,KAAKu6jB,SAASv6jB,KAAKwuf,OAAOv4a,WAC1Bj2E,KAAKwuf,OAAOj/X,eAGZt5C,EAAU+le,sBAAqB,QAEnC/le,EAAUgie,qBAAsB,GAGpCj4iB,KAAK4oiB,eAAe3yd,GACpBj2E,KAAK4sc,YAAY55Y,GASa,SAA1BijB,EAAU4ic,YAEV74gB,KAAK+rkB,gCAAgC91f,EAAW/a,EAAUn+D,EAAOq9C,GAIjEp6C,KAAKgskB,mCAAmC9wgB,EAAUn+D,EAAOq9C,KAOjE+6c,EAAO/5f,UAAU2wkB,gCAAkC,SAAU91f,EAAW/a,EAAUtoC,EAAQwnB,GACtF,IAAIqid,EAAYz8f,KAAK06f,aAAazkb,EAAU14E,MAAM05f,WAClD,IAAIx5f,EAAkBg/f,GAAtB,CAGA,IAAIpK,EAAkBoK,EAAUpK,gBAChC,OAAQn3b,GACJ,IAAK,OACDl7D,KAAKiskB,gCAAgCh2f,EAAWo8a,EAAiB,QAAUA,EAAoB,MAC/F,MACJ,IAAK,SACDryf,KAAKiskB,gCAAgCh2f,EAAWo8a,EAAiB,UAAYA,EAAsB,QACnG,MACJ,IAAK,YACDryf,KAAKiskB,gCAAgCh2f,EAAWo8a,EAAiB,YAAaz/d,GAC9E,MACJ,IAAK,aACD5yB,KAAKiskB,gCAAgCh2f,EAAWo8a,EAAiB,aAAcz/d,GAC/E,MACJ,IAAK,WACD5yB,KAAKiskB,gCAAgCh2f,EAAWo8a,EAAiB,WAAYz/d,GAC7E,MACJ,IAAK,iBACD5yB,KAAKiskB,gCAAgCh2f,EAAWo8a,EAAiB,iBAAkBz/d,GACnF,MACJ,IAAK,oBACGy/d,EAAgBmM,oBAAsB5re,IACtCA,EAAS,UAEb5yB,KAAKiskB,gCAAgCh2f,EAAWo8a,EAAiB,oBAAqBz/d,GACtF,MACJ,IAAK,gBACGy/d,EAAgBqM,gBAAkB9re,IAClCA,EAAS,QAEb5yB,KAAKiskB,gCAAgCh2f,EAAWo8a,EAAiB,gBAAiBz/d,GAClF,MACJ,IAAK,YACGy/d,EAAgB7kN,YAAc56Q,IAC9BA,EAAS,QAEb5yB,KAAKiskB,gCAAgCh2f,EAAWo8a,EAAiB,YAAaz/d,GAC9E,MACJ,IAAK,kBACD5yB,KAAKiskB,gCAAgCh2f,EAAWo8a,OAAiBn3f,EAAW03B,MAIxFuie,EAAO/5f,UAAU6wkB,gCAAkC,SAAUh2f,EAAW13C,EAAQ28B,EAAUn+D,GACtFiD,KAAK4sc,YAAY,uBACjB5sc,KAAK8rkB,qBAAqBvtiB,EAAQ28B,EAAUn+D,GAAO,GACnDiD,KAAK+3hB,cAAcsR,gBACnBrpiB,KAAKu6jB,SAAStkf,GACdj2E,KAAKuxf,qBAKT4D,EAAO/5f,UAAU8wkB,0BAA4B,SAAUj2f,EAAW/a,EAAUn+D,GACxEiD,KAAKmskB,uBAAuBl2f,EAAW/a,EAAUn+D,GAAO,IAE5Do4f,EAAO/5f,UAAU+wkB,uBAAyB,SAAUl2f,EAAW/a,EAAUn+D,EAAOq9C,GAC5Ep6C,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtC,IAAI8qF,EAAwBn2f,EAAU14E,MAClC8ukB,EAAsBp2f,EAAUh3D,IAC/Bg3D,EAAU8ge,YACXq1B,EAAwBn2f,EAAUh3D,IAClCotjB,EAAsBp2f,EAAU14E,OAEpCyC,KAAKsskB,oBAAoBr2f,EAAWm2f,GACpC,IAAI3vE,EAAYz8f,KAAK06f,aAAazkb,EAAU14E,MAAM05f,WAClDj3f,KAAK8rkB,qBAAqBrvE,EAAUpK,gBAAiBn3b,EAAUn+D,EAAOq9C,GACtEp6C,KAAKuskB,0BAA0BH,EAAsBn1E,UAAWhhb,EAAWm2f,EAAuBC,IAKtGl3E,EAAO/5f,UAAUs/f,aAAe,SAAUzD,GACtC,IAAIu1E,OAActxkB,EACdgggB,EAAkB,EAKtB,GAJKz9f,EAAkBw5f,EAAUhF,kBAAqBx0f,EAAkBw5f,EAAUhF,gBAAgB+F,cAC9Fw0E,EAAcxskB,KAAKwuf,OAAOoxB,YAAY3oB,EAAUhF,gBAAgB+F,WAAWqC,QAC3Ea,EAAkBjE,EAAUhF,gBAAgB+F,WAAWkD,kBAEtDz9f,EAAkB+ukB,KAClB/ukB,EAAkBuC,KAAKwuf,OAAO20B,oBAAoBqpD,EAAYjyE,mBAE3D98f,EAAkBuC,KAAKwuf,OAAO20B,oBAAoBqpD,EAAYjyE,gBAAgB50a,QAClF,OAAO3lF,KAAKwuf,OAAOlhc,OAAOotc,aAAa8xE,EAAatxE,IAI5D/F,EAAO/5f,UAAU4kkB,qBAAuB,WACpC,IAAI/pf,EAAYj2E,KAAKwuf,OAAOv4a,UACxB/hE,EAAW+hE,EAAU14E,MACpB04E,EAAU8ge,YACX7iiB,EAAW+hE,EAAUh3D,MAErBjf,KAAK+3hB,eAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,yBACxDzriB,EAAkByW,IAClBzW,EAAkBuC,KAAK+3hB,cAAcmR,uBAAuBy2B,iBAC5D3/jB,KAAKykkB,sBAAsBvwjB,GAAU,IAQjDihf,EAAO/5f,UAAUwtiB,eAAiB,SAAU3yd,GACxC,IAAInvD,EAAO9mB,KAAK6/jB,iBAAiB5pf,EAAU14E,OAC3CyC,KAAKwviB,eAAiB1ohB,EAAKmwe,UAC3Bj3f,KAAK6qgB,YAAc/jf,EAAKnb,OACxBmb,EAAO9mB,KAAK6/jB,iBAAiB5pf,EAAUh3D,KACvCjf,KAAKyviB,aAAe3ohB,EAAKmwe,UACzBj3f,KAAK+0gB,UAAYjuf,EAAKnb,QAM1Bwpf,EAAO/5f,UAAU++iB,qBAAuB,SAAUx7C,GAC9C,IAAI1ob,EAAYj2E,KAAKwuf,OAAOv4a,WACxBx4E,EAAkBkhgB,IAAsC,YAAnBA,KACrCA,EAAiB,UAGjB1ob,EAAUo8a,gBAAgBsM,iBAAmBA,IAC7CA,EAAiB,WAErB3+f,KAAKi2E,UAAUo8a,gBAAgBsM,eAAiBA,GAKpDxJ,EAAO/5f,UAAUg/iB,gBAAkB,WAC/B,IAAKp6iB,KAAKwjgB,MAAMtR,eAAgB,CAC5B,IAAIn1f,EAA6D,cAArDiD,KAAKi2E,UAAUo8a,gBAAgBmM,kBAAoC,SAAW,YAC1Fx+f,KAAKi2E,UAAUo8a,gBAAgBmM,kBAAoBzhgB,IAM3Do4f,EAAO/5f,UAAUi/iB,kBAAoB,WACjC,IAAKr6iB,KAAKwjgB,MAAMtR,eAAgB,CAC5B,IAAIn1f,EAA6D,gBAArDiD,KAAKi2E,UAAUo8a,gBAAgBmM,kBAAsC,SAAW,cAC5Fx+f,KAAKi2E,UAAUo8a,gBAAgBmM,kBAAoBzhgB,IAU3Do4f,EAAO/5f,UAAUm/iB,eAAiB,WACzBv6iB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKmoiB,uBAAuB,aAAcnoiB,KAAKwuf,OAAOy1B,iBAAiB,GAAM,IAMrF9uB,EAAO/5f,UAAUo/iB,eAAiB,WACzBx6iB,KAAKwjgB,MAAMtR,gBACZlyf,KAAKmoiB,uBAAuB,cAAenoiB,KAAKwuf,OAAOy1B,iBAAiB,GAAM,IAMtF9uB,EAAO/5f,UAAUqxkB,UAAY,WACzBzskB,KAAKi2E,UAAUutb,MAAM1U,aAAa45C,iBAAYxtiB,IAOlDi6f,EAAO/5f,UAAUsxkB,YAAc,SAAUC,EAAQn9iB,GACxCxvB,KAAKwjgB,MAAMtR,gBACZlyf,KAAK4skB,uBAAuBD,EAAQ,SAAUn9iB,IAStD2le,EAAO/5f,UAAUyxkB,eAAiB,SAAUrzD,EAAcV,GACjD94gB,KAAKwjgB,MAAMtR,gBACZlyf,KAAK4skB,uBAAuBpzD,EAAcV,EAAkB,YAQpE3jB,EAAO/5f,UAAU2jkB,wBAA0B,SAAU+N,GACjD9skB,KAAK+skB,eAAe,EAAGD,IAK3B33E,EAAO/5f,UAAUmjkB,gBAAkB,WAC/B,IAAItof,EAAYj2E,KAAKwuf,OAAOv4a,UAC5Bj2E,KAAKg4hB,mBAAmB,eAGpB/hd,EAAU2hK,UACV3hK,EAAU14E,MAAMg3iB,6BAA6Bt+d,GAAW,GACxDA,EAAUh3D,IAAIu1hB,2BAA2Bv+d,GAAW,IAExDj2E,KAAK4oiB,eAAe3yd,GAChBj2E,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAci1C,kBAAkB,wBAEzChtkB,KAAKgskB,mCAAmC,4BAAwB9wkB,GAAW,GAC3E8E,KAAKs8jB,eAAermf,GAChBj2E,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAcsR,gBAEvBrpiB,KAAK4oiB,eAAe3yd,GAChBj2E,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAci1C,kBAAkB,wBAEzChtkB,KAAKitkB,8BAA8B,4BAAwB/xkB,GAAW,GAClE8E,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAcsR,gBAEvBrpiB,KAAKs8jB,eAAermf,GAChBj2E,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcq7B,qBAC5DpzjB,KAAK+3hB,cAAcQ,uBAEvBv4hB,KAAKwviB,oBAAiBt0iB,EACtB8E,KAAKyviB,kBAAev0iB,GAYxBi6f,EAAO/5f,UAAU2xkB,eAAiB,SAAUrmkB,EAAM3J,GAC9C,IAAIk5E,EAAYj2E,KAAKi2E,UACrB,IAAIA,EAAUutb,MAAMtR,gBAAmBj8a,EAAUutb,MAAM3U,iBAAvD,CAGA,IAAIvpM,EAAgBrvO,EAAU14E,MACZ04E,EAAUh3D,IACvBg3D,EAAU8ge,YACXzxP,EAAgBrvO,EAAUh3D,IACZg3D,EAAU14E,OAE5B,IAAIyrgB,EAAgB,EAChB4nC,EAAYtrP,EAAcomO,cAAc3iB,UAAUzjN,EAAc35S,OAAQq9f,GACxExqW,EAASoyY,EAAU5viB,QACvBgogB,EAAgB4nC,EAAU9+hB,MAC1B,IAAImlf,EAAY3xM,EAAc2xM,UAI9B,GAHKx5f,EAAkB+gK,IAAWA,EAAOhiK,SAAWwsgB,GAAkBhpgB,KAAKi2E,UAAU2hK,UACjFp5E,EAASA,EAAOixO,UAEP,IAAT/oY,EAAY,CACZ,IAAIwmkB,EAAmB,OAClBzvkB,EAAkB+gK,GAGb/gK,EAAkBw5f,KACxBi2E,EAAmBj2E,EAAU5E,gBAAgB7kN,WAH7C0/R,EAAmB1ua,EAAO6zV,gBAAgB7kN,UAK9CxtS,KAAKi2E,UAAUo8a,gBAAgB7kN,UAAYzwS,IAAUmwkB,EAAmB,OAASnwkB,MAEhF,CACD,IAAIowkB,EAAS,SACR1vkB,EAAkB+gK,GAGb/gK,EAAkBw5f,KACxBk2E,EAASl2E,EAAU5E,gBAAgBmM,mBAHnC2uE,EAAS3ua,EAAO6zV,gBAAgBmM,kBAKhC2uE,IAAWpwkB,IACXA,EAAQ,UAEZiD,KAAKi2E,UAAUo8a,gBAAgBmM,kBAAoBzhgB,KAG3Do4f,EAAO/5f,UAAUojkB,kBAAoB,WAEjC,IAAK,IADD4O,EAAuB,cAClBhvkB,EAAK,EAAGyE,EAAK7C,KAAKwuf,OAAO2oC,iBAAiBxkb,UAAWv0G,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAChF,IAAI48E,EAASn4E,EAAGzE,GAChBgvkB,GAAyBptkB,KAAKwuf,OAAO2oC,iBAAiBzvhB,IAAIszE,GAAU,IAExE,OAAOoyf,EAAqB/rkB,MAAM,GAAI,GAAK,MAM/C8zf,EAAO/5f,UAAUw5f,uBAAyB,WAMtC,IAAK,IALDy4E,EAAiBrtkB,KAAKwjgB,MAAMvL,cAAc,aAKrC75f,EAAK,EAAGkvkB,GAJQ,SAAU,YAAa,YAAa,YAAa,YAAa,YAAa,aACjEpjiB,OAAO,SAAU3hB,GAChD,OAAwC,IAAjC8kjB,EAAe9ukB,QAAQgqB,KAEUnqB,EAAKkvkB,EAAa9wkB,OAAQ4B,IAAM,CACxE,IAAIm3J,EAAS+3a,EAAalvkB,GAC1B4B,KAAKq2E,YAAYr2E,KAAKwuf,OAAO2oC,iBAAiBzvhB,IAAI6tJ,MAM1D4/V,EAAO/5f,UAAUi7E,YAAc,SAAUqtd,GACrC1jiB,KAAKutkB,cAAc7pC,IAMvBvuC,EAAO/5f,UAAUmykB,cAAgB,SAAU7pC,GAEvC,IAAIh/hB,EAAQ4nD,KAAKuB,MAAM61e,GAOvB,YALiBxoiB,IADF8E,KAAKwuf,OAAOjrf,OAAOu0f,WAAWpzf,EAAM6yB,QAG/C7yB,EAAM6yB,KAAOv3B,KAAKwtkB,mBAAmB9okB,EAAM6yB,OAE/Cv3B,KAAKwuf,OAAOgV,MAAM9ma,OAAO4mc,WAAWh3e,KAAKuB,MAAM7tD,KAAKw+jB,qBAAsB95jB,EAAO1E,KAAKwuf,OAAOjrf,QACtFvD,KAAKwuf,OAAOjrf,OAAOu0f,WAAWpzf,EAAM6yB,OAK/C49d,EAAO/5f,UAAUoykB,mBAAqB,SAAUj2iB,GAG5C,IAFA,IAAIk2iB,EAAaztkB,KAAK0tkB,cAAcn2iB,GAChC7yB,EAAQ1E,KAAKwuf,OAAOjrf,OAAOu0f,WAAW21E,IAClChwkB,EAAkBiH,IACtB+okB,EAAaztkB,KAAKwtkB,mBAAmB9okB,EAAM6yB,MAC3C7yB,EAAQ1E,KAAKwuf,OAAOjrf,OAAOu0f,WAAW21E,GAE1C,OAAOA,GAEXt4E,EAAO/5f,UAAUsykB,cAAgB,SAAUn2iB,GACvC,IAAIo2iB,EAAap2iB,EAAK7nB,MAAM,QAC5B,OACKjS,EAAkBkwkB,IAAeA,EAAWnxkB,OAAS,EAC/C+6B,EAAKt6B,QAAQ0wkB,EAAW,IAAK/4iB,SAAS+4iB,EAAW,GAAI,IAAM,GAAGzgkB,YAG9DqqB,EAAO,MAOtB49d,EAAO/5f,UAAU4wkB,mCAAqC,SAAU9wgB,EAAUtoC,EAAQwnB,GAI9E,OAHI38C,EAAkBy9D,KAClBA,EAAW,mBAEPA,GACJ,IAAK,OACDl7D,KAAK4tkB,sBAAsB,OAAQh7iB,GACnC,MACJ,IAAK,SACD5yB,KAAK4tkB,sBAAsB,SAAUh7iB,GACrC,MACJ,IAAK,YACD5yB,KAAK4tkB,sBAAsB,YAAah7iB,GACxC,MACJ,IAAK,aACD5yB,KAAK4tkB,sBAAsB,aAAch7iB,GACzC,MACJ,IAAK,WACD5yB,KAAKyjkB,gCAAgCzjkB,KAAKwuf,OAAOv4a,UAAW,WAAYrjD,EAAQwnB,GAChF,MACJ,IAAK,iBACDp6C,KAAK4tkB,sBAAsB,iBAAkBh7iB,GAC7C,MACJ,IAAK,oBACD5yB,KAAK4tkB,sBAAsB,oBAAqBh7iB,GAChD,MACJ,IAAK,gBACD5yB,KAAK4tkB,sBAAsB,gBAAiBh7iB,GAC5C,MACJ,IAAK,YACD5yB,KAAK4tkB,sBAAsB,YAAah7iB,GACxC,MACJ,IAAK,YACD5yB,KAAKyjkB,gCAAgCzjkB,KAAKwuf,OAAOv4a,UAAW,YAAarjD,GAAQ,GACjF,MACJ,IAAK,kBAGL,IAAK,uBACD5yB,KAAK4tkB,2BAAsB1ykB,EAAW03B,GAG9C5yB,KAAKu6jB,SAASv6jB,KAAKwuf,OAAOv4a,YAU9Bk/a,EAAO/5f,UAAUwykB,sBAAwB,SAAU1ygB,EAAUn+D,GACzDiD,KAAKyjkB,gCAAgCzjkB,KAAKwuf,OAAOv4a,UAAW/a,EAAUn+D,GAAO,IAEjFo4f,EAAO/5f,UAAUqokB,gCAAkC,SAAUxtf,EAAW/a,EAAUn+D,EAAOq9C,GACrFp6C,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtC,IAAIh8L,EAAgBrvO,EAAU14E,MAC1BwiiB,EAAc9pd,EAAUh3D,IACvBg3D,EAAU8ge,YACXzxP,EAAgBrvO,EAAUh3D,IAC1B8ghB,EAAc9pd,EAAU14E,OAE5ByC,KAAK6tkB,+BAA+BvoR,EAAc2xM,UAAWhhb,EAAWqvO,EAAey6O,EAAa7ke,EAAUn+D,EAAOq9C,IAGzH+6c,EAAO/5f,UAAUyykB,+BAAiC,SAAU52E,EAAWhhb,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAE3G,IAAI78C,EAAM05f,UAAUsR,eAAmBtpf,EAAIg4e,UAAUsR,eAC9ChrgB,EAAM05f,UAAUuR,iBAAmBvpf,EAAIg4e,UAAUuR,iBACjDvyb,EAAU8ic,eAAex7gB,EAAM05f,UAAUuR,eAAgBjrgB,EAAO0hB,GAanEjf,KAAK8tkB,gBAAgB72E,EAAWhhb,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,OAbE,CAC1E,IAAI2tB,OAAO,EACXxqE,EAAM05f,UAAUuR,eAAeJ,WAAWrB,cAAc/mgB,KAAKwuf,QACzDxuf,KAAKqmkB,oBAAoBpwf,IACzBj2E,KAAKykkB,sBAAsBlnkB,GAAO,GAEtCwqE,EAAOxqE,EAAM05f,UAAUuR,eACvBxogB,KAAK+tkB,oBAAoBhmgB,EAAMkO,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GACvE,IAAIgrB,EAAQ2C,EAAKqgc,WAEjBpogB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2Bjnd,EAAMtzD,MAAOszD,EAAMkyb,gBAAiBlyb,GAAO,KAOjG+vb,EAAO/5f,UAAU4ykB,+BAAiC,SAAU/2E,EAAWhhb,EAAW/a,EAAUn+D,EAAOq9C,GAC/F,IAAK,IAAIl+C,EAAI,EAAGA,EAAI+6f,EAAUI,aAAa76f,OAAQN,IAE/C,IAAK,IADD+tD,EAAOgtc,EAAUI,aAAan7f,GACzBwnB,EAAI,EAAGA,EAAIumC,EAAK7vC,SAAS5d,OAAQknB,IAAK,CAC3C,IAAI1iB,EAAUipD,EAAK7vC,SAASsJ,GAC5B1jB,KAAK8rkB,qBAAqB9qkB,EAAQqxf,gBAAiBn3b,EAAUn+D,EAAOq9C,GAG5Ep6C,KAAK8rkB,qBAAqB70E,EAAU5E,gBAAiBn3b,EAAUn+D,EAAOq9C,IAE1E+6c,EAAO/5f,UAAU6ykB,sBAAwB,SAAUh3E,GAC/C,IAAIi3E,EAAiBj3E,EAAU4P,kBAC/B,OAAOqnE,EAAeA,EAAe1xkB,OAAS,IAGlD24f,EAAO/5f,UAAU+ykB,uCAAyC,SAAUjmE,EAAO3qgB,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GACpG,IAAIg0hB,EAAmBlmE,EAAMrB,kBAC7BqB,EAAQkmE,EAAiBA,EAAiB5xkB,OAAS,GAE9CiB,EADLyqgB,EAAQlogB,KAAKwuf,OAAOv4a,UAAU45d,qBAAqB3nC,MAE3CA,aAAiBhR,GACjBl3f,KAAK8tkB,gBAAgB5lE,EAAOlogB,KAAKwuf,OAAOv4a,UAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAGhFp6C,KAAKqukB,wBAAwB,EAAGnmE,EAAOlogB,KAAKwuf,OAAOv4a,UAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,KAKvG+6c,EAAO/5f,UAAU0ykB,gBAAkB,SAAU72E,EAAWhhb,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAC5F68c,EAAYA,EAAU8P,cAAc/mgB,KAAKwuf,QACzC,IAAIqc,EAAc,EACdrugB,EAASy5E,EAAUy4d,mBAAmBz3C,GACtCg1B,GAA2E,IAAzDh1B,EAAUI,aAAa94f,QAAQhB,EAAMmuhB,eACvDz0B,EAAUI,aAAa94f,QAAQhB,EAAMmuhB,eAAiB,EACtD3W,EAAY91f,EAAItT,OAChB+4iB,GAAuE,IAAvDztD,EAAUI,aAAa94f,QAAQ0gB,EAAIysgB,eACnDz0B,EAAUI,aAAa94f,QAAQ0gB,EAAIysgB,eAAiBz0B,EAAUI,aAAa76f,OAAS,EAMxF,GALKiB,EAAkBw4E,IACfghb,IAAc15f,EAAM05f,YACpB4T,EAActtgB,EAAMoO,QAGvBsrf,EAAU7jd,OAAOn0B,EAAIg4e,WAIrB,CACD,IAAI+4B,EAAW/4B,EAAUI,aAAaJ,EAAUI,aAAa76f,OAAS,GAClEy5E,EAAU4uc,oBAAoBmL,IAAa/wgB,EAAIysgB,gBAAkBsE,IAC5Djb,IAAc9+b,EAAUo4d,cAAcre,GAAY,GAAO/5c,EAAU2hK,SAAW3hK,EAAUh3D,IAAI4sjB,mBACjG7rkB,KAAK8rkB,qBAAqB70E,EAAU5E,gBAAiBn3b,EAAUn+D,EAAOq9C,QAP1Ep6C,KAAK8rkB,qBAAqB70E,EAAU5E,gBAAiBn3b,EAAUn+D,EAAOq9C,GACtE26d,EAAYv4gB,EAUhB,IAAK,IAAIN,EAAI+vhB,EAAiB/vhB,GAAKwojB,EAAexojB,IAAK,CACnD,IAAI+tD,EAAOgtc,EAAUI,aAAan7f,GAC9BA,IAAM+vhB,IACNphB,EAAc50b,EAAU06d,mBAAmB1mf,IAG3C8qd,EADA9qd,IAAShrC,EAAIysgB,cACDzsgB,EAAItT,OAGJsqE,EAAUo4d,cAAcpkf,GAGxC,IAAK,IADD/qC,EAAQ,EACHwE,EAAI,EAAGA,EAAIumC,EAAK7vC,SAAS5d,OAAQknB,IAAK,CAC3C,IAAIkthB,EAAY3mf,EAAK7vC,SAASsJ,GAC9B,KAAIkthB,aAAqBznC,IAGzB,GAAI0B,GAAe3rf,EAAQ0xhB,EAAUp0iB,OACjC0iB,GAAS0xhB,EAAUp0iB,WADvB,CAIA,IAAIqpB,EAAa,EACbglf,EAAc3rf,IACd2G,EAAaglf,EAAc3rf,GAE/B,IAAI6G,EAAWgvf,EAAY71f,EACvBovjB,EAAe19B,EAAUp0iB,OAK7B,GAJIupB,EAAWuojB,IACXvojB,EAAWuojB,GAEf5qjB,GAAK1jB,KAAKuukB,sBAAsB39B,EAAW36d,EAAWpwD,EAAYE,EAAUm1C,EAAUn+D,EAAOq9C,GACzF26d,GAAa71f,EAAQovjB,EACrB,MAEJpvjB,GAASovjB,IAGjB,IAAI7+B,EAAexwhB,EAAIg4e,UACvBj3f,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAWg1B,EAAiB,GAC7Dh1B,EAAU7jd,OAAOq8f,IAGrBzviB,KAAKmukB,uCAAuCl3E,EAAW15f,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,IAKxF+6c,EAAO/5f,UAAU2+iB,WAAa,WAC1B,IAAI/5iB,KAAKwuf,OAAOgV,MAAMtR,eAAtB,CAGA,IAAIn1f,EAAQiD,KAAKwukB,yBAAyB,QAC1CxukB,KAAKi2E,UAAUo8a,gBAAgBpjc,KAAOlyD,IAK1Co4f,EAAO/5f,UAAU4+iB,aAAe,WAC5B,IAAIh6iB,KAAKwuf,OAAOgV,MAAMtR,eAAtB,CAGA,IAAIn1f,EAAQiD,KAAKwukB,yBAAyB,UAC1CxukB,KAAKi2E,UAAUo8a,gBAAgBljc,OAASpyD,IAE5Co4f,EAAO/5f,UAAUozkB,yBAA2B,SAAUtzgB,GAClD,IAAIn+D,GAAQ,EACZ,GAAkB,SAAbm+D,GAAoC,WAAbA,EAAwB,CAChD,IAAIppD,EAAQ,EACRvU,EAAQyC,KAAKi2E,UAAU14E,MACtByC,KAAKi2E,UAAU8ge,YAChBx5iB,EAAQyC,KAAKi2E,UAAUh3D,KAE3B,IAAI4zf,EAAat1gB,EAAMmuhB,cACnBklB,EAAY/9B,EAAW9J,UAAUxrgB,EAAMoO,OAAQmG,GAC/C0sJ,EAASoyY,EAAU5viB,QAEvB8Q,EAAQ8+hB,EAAU9+hB,MAClB,IAAIugf,EAAkBwgB,EAAW5b,UAAU5E,gBACtC50f,EAAkB+gK,KAMf6zV,EALCryf,KAAKi2E,UAAU2hK,SAAW9lO,IAAU0sJ,EAAOhiK,OAK1BgiK,EAAO6zV,gBAJP50f,EAAkB+gK,EAAOixO,UAAYojI,EAAW5b,UAAU5E,gBACtE7zV,EAAOixO,SAAS4iH,iBAMb,SAAbn3b,IACAn+D,GAAUs1f,EAAoB,MAEjB,WAAbn3b,IACAn+D,GAAUs1f,EAAsB,QAGxC,OAAOt1f,GAMXo4f,EAAO/5f,UAAU6+iB,gBAAkB,SAAUzsQ,GACpCxtS,KAAKwjgB,MAAMtR,gBACZlyf,KAAK+skB,eAAe,EAAGv/R,IAO/B2nN,EAAO/5f,UAAU8+iB,oBAAsB,SAAUx7C,GAC7C,IAAK1+f,KAAKwjgB,MAAMtR,eAAgB,CAC5B,IAAIn1f,OAAQ,EAERA,EADAU,EAAkBihgB,GACuC,iBAAjD1+f,KAAKi2E,UAAUo8a,gBAAgBqM,cAAmC,OAAS,eAG3EA,EAEZ1+f,KAAKi2E,UAAUo8a,gBAAgBqM,cAAgB3hgB,IAGvDo4f,EAAO/5f,UAAUqzkB,eAAiB,SAAUlwiB,EAAQxhC,GAChD,GAAuB,sBAAcA,EAAQ,GAAyB,IAApBwhC,EAAOnP,UACrD,OAAOmP,EAAOnP,SAAWryB,EAE7B,IAAI2xkB,GAAsB,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAChF,GAAuB,oBAAsB,cAAV3xkB,EAAuB,CACtD,GAAIwhC,EAAOnP,SAAW,EAClB,OAAOmP,EAAOnP,SAAW,EAExB,GAAImP,EAAOnP,UAAY,IAAMmP,EAAOnP,SAAW,GAChD,OAAO,GAEN,GAAImP,EAAOnP,UAAY,GACxB,OAAOmP,EAAOnP,SAAW,GAGzB,IAAK,IAAIlzB,EAAI,EAAGA,EAAIwykB,EAAmBlykB,OAAQN,IAC3C,GAAIqiC,EAAOnP,SAAWs/iB,EAAmBxykB,GACrC,OAAOwykB,EAAmBxykB,QAKrC,GAAuB,oBAAsB,cAAVa,GAAyBwhC,EAAOnP,SAAW,EAAG,CAClF,GAAImP,EAAOnP,UAAY,EACnB,OAAOmP,EAAOnP,SAAW,EAExB,GAAImP,EAAOnP,SAAW,IAAMmP,EAAOnP,UAAY,GAChD,OAAO,GAEN,GAAImP,EAAOnP,SAAW,GACvB,OAAOmP,EAAOnP,SAAW,GAGzB,IAASlzB,EAAI,EAAGA,EAAIwykB,EAAmBlykB,OAAQN,IAC3C,GAAIqiC,EAAOnP,UAAYs/iB,EAAmBxykB,GACtC,OAAOwykB,EAAmBxykB,EAAI,GAK9C,OAAOqiC,EAAOnP,UAIlB+le,EAAO/5f,UAAUmzkB,sBAAwB,SAAU/va,EAAQvoF,EAAWpwD,EAAYE,EAAUm1C,EAAUn+D,EAAOq9C,GACzG,OAAmB,IAAfv0B,GAAoBE,IAAay4I,EAAOhiK,QACxCwD,KAAK8rkB,qBAAqBtta,EAAO6zV,gBAAiBn3b,EAAUn+D,EAAOq9C,GAC5D,GAEFokH,aAAkBoqW,GAChB5ogB,KAAK2ukB,aAAanwa,EAAQvoF,EAAWpwD,EAAYE,EAAUm1C,EAAUn+D,EAAOq9C,GAEhF,GAGX+6c,EAAO/5f,UAAUuzkB,aAAe,SAAUnwa,EAAQvoF,EAAWpwD,EAAYE,EAAUm1C,EAAUn+D,EAAOq9C,GAChG,IAKIjkB,EALAppB,EAAI,EACJxM,EAAOi+J,EACP1sJ,EAAQ0sJ,EAAOv0G,KAAK7vC,SAAS7b,QAAQgC,GACzBi+J,EAAOy4V,UACGI,aAAa94f,QAAQigK,EAAOv0G,MA8BtD,OA5BIpkC,EAAa,KACbsQ,EAAc,IAAIyye,IACNvW,gBAAgBsH,WAAWn7V,EAAO6zV,iBAC9Cl8d,EAAY8zB,KAAOu0G,EAAOv0G,KAC1B9zB,EAAYnH,KAAOwvI,EAAOxvI,KAAK6H,OAAOhR,EAAYE,EAAWF,GAC7D7lB,KAAK8rkB,qBAAqB31iB,EAAYk8d,gBAAiBn3b,EAAUn+D,EAAOq9C,GACxEtoC,IACAvR,EAAK0pD,KAAK7vC,SAASuO,OAAO7W,EAAO,EAAGqkB,GACpCppB,KAGAgZ,EAAWxlB,EAAK/D,UAChB25B,EAAc,IAAIyye,IACNvW,gBAAgBsH,WAAWn7V,EAAO6zV,iBAC9Cl8d,EAAYnH,KAAOzuB,EAAKyuB,KAAK3K,UAAU0B,GACvCoQ,EAAY8zB,KAAOu0G,EAAOv0G,KAC1Bn4C,IACAvR,EAAK0pD,KAAK7vC,SAASuO,OAAO7W,EAAO,EAAGqkB,GACpCppB,KAGe,IAAf8Y,GACA24I,EAAOxvI,KAAOwvI,EAAOxvI,KAAK6H,OAAO,EAAG9Q,GACpC/lB,KAAK8rkB,qBAAqBtta,EAAO6zV,gBAAiBn3b,EAAUn+D,EAAOq9C,IAGnEokH,EAAOxvI,KAAOwvI,EAAOxvI,KAAK6H,OAAO,EAAGhR,GAEjC9Y,GAIXoof,EAAO/5f,UAAU2ykB,oBAAsB,SAAUhmgB,EAAMkO,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAC3F,GAAIn7B,EAAIg4e,UAAUsR,cAAe,CAC7B,IAAIiuC,EAAgBvge,EAAUo7d,mBAAmBtpe,EAAM9oD,EAAIg4e,UAAUuR,gBACrE,GAAIguC,EAAcpuC,WAAWjkgB,SAAS8a,EAAIg4e,UAAUuR,gBAAiB,CACjE,IAAIgE,EAAYv2b,EAAUwge,gBAAgB1ue,EAAMyue,GAC5C/pC,EAAUx2b,EAAUwge,gBAAgBx3hB,EAAIg4e,UAAUuR,eAAgBguC,GAClEvge,EAAU0ge,aAAaH,EAAev3hB,EAAIg4e,UAAUuR,gBAEhDvyb,EAAU8ic,eAAey9B,EAAej5iB,EAAO0hB,IAC/CliB,EAAQiD,KAAK4ukB,8BAA8B7mgB,EAAMkO,EAAWl5E,EAAOm+D,GACnEl7D,KAAK6ukB,+BAA+Br4B,EAAevge,EAAW/a,EAAUn+D,EAAOq9C,IAG3Eoyd,IAAcgqC,EACdx2iB,KAAK8tkB,gBAAgBvwkB,EAAM05f,UAAWhhb,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAG9Ep6C,KAAK8ukB,mBAAmBtiE,EAAUnE,SAAUpyb,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAK5Fp6C,KAAK+ukB,4BAA4Bv4B,EAAcpuC,WAAYnyb,EAAWuge,EAAe/pC,EAASvxc,EAAUn+D,EAAOq9C,QAInHp6C,KAAK8ukB,mBAAmBt4B,EAAcnuC,SAAUpyb,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,OAG3F,CACD,IAAIyvd,EAAY5zb,EAAU6ge,iBAAiB/ue,GAC3C/nE,KAAK8ukB,mBAAmBjlE,EAAUxB,SAAUpyb,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,KAI5F+6c,EAAO/5f,UAAUyzkB,+BAAiC,SAAU9mgB,EAAMkO,EAAW/a,EAAUn+D,EAAOq9C,GAC1F,IAAK,IAAIl+C,EAAI,EAAGA,EAAI6rE,EAAKsvb,aAAa76f,OAAQN,IAAK,CAC/C,IAAIgsgB,EAAQngc,EAAKsvb,aAAan7f,GAC1BgsgB,aAAiBhR,GACjBl3f,KAAKgukB,+BAA+B9lE,EAAOjyb,EAAW/a,EAAUn+D,EAAOq9C,GAGvEp6C,KAAKgvkB,2BAA2B9mE,EAAOjyb,EAAW/a,EAAUn+D,EAAOq9C,KAM/E+6c,EAAO/5f,UAAU0zkB,mBAAqB,SAAUppgB,EAAKuQ,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GACzFr9C,EAAQiD,KAAK4ukB,8BAA8BlpgB,EAAI2xb,aAAa,GAAIphb,EAAWl5E,EAAOm+D,GAClFl7D,KAAKqukB,wBAAwB3ogB,EAAIupK,SAAUvpK,EAAI0ic,WAAYnyb,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,IAIvG+6c,EAAO/5f,UAAUizkB,wBAA0B,SAAUv8jB,EAAOszD,EAAO6Q,EAAW14E,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GACvGgrB,EAAQA,EAAM2hc,cAAc/mgB,KAAKwuf,QACjC,IAAK,IAAItyf,EAAI4V,EAAO5V,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAEpD,IAAK,IADDwpE,EAAMN,EAAMiyb,aAAan7f,GACpBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACzC1jB,KAAK6ukB,+BAA+BnpgB,EAAI2xb,aAAa3ze,GAAIuyD,EAAW/a,EAAUn+D,EAAOq9C,GAEzF,GAAIn7B,EAAIg4e,UAAUsR,eAAiBtyb,EAAU8ve,YAAYrgf,EAAKzmD,EAAIg4e,UAAUuR,gBAExE,YADAxogB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2Bjnd,EAAMtzD,MAAOszD,EAAMkyb,gBAAiBlyb,GAAO,GAIjGplE,KAAKwuf,OAAOlhc,OAAO++d,2BAA2Bjnd,EAAMtzD,MAAOszD,EAAMkyb,gBAAiBlyb,GAAO,GACzFplE,KAAKmukB,uCAAuC/ogB,EAAO7nE,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,IAGpF+6c,EAAO/5f,UAAU4zkB,2BAA6B,SAAUtyD,EAAazmc,EAAW/a,EAAUn+D,EAAOq9C,GAC7F,IAAK,IAAIl+C,EAAI,EAAGA,EAAIwghB,EAAYrlB,aAAa76f,OAAQN,IAEjD,IAAK,IADDwpE,EAAMg3c,EAAYrlB,aAAan7f,GAC1BwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACzC1jB,KAAK6ukB,+BAA+BnpgB,EAAI2xb,aAAa3ze,GAAIuyD,EAAW/a,EAAUn+D,EAAOq9C,IAKjG+6c,EAAO/5f,UAAU2zkB,4BAA8B,SAAU3pgB,EAAO6Q,EAAWu2b,EAAWC,EAASvxc,EAAUn+D,EAAOq9C,GAC5G,IAAI60hB,EAAgBh5f,EAAU6me,YAAYtwC,EAAUnE,SAAUmE,GAC1D0iE,EAAiBD,EAAgBziE,EAAU/D,WAAWv6M,UACtDm3P,EAAcpve,EAAU6me,YAAYrwC,EAAQpE,SAAUoE,GACtD64C,EAAeD,EAAc54C,EAAQhE,WAAWv6M,UAChD66Q,EAAW/okB,KAAKgpkB,2BAA2BiG,EAAeC,EAAgB7pB,EAAaC,GAC3F2pB,EAAgBlG,EAASxrkB,MACzB2xkB,EAAiBnG,EAAS9pjB,IAG1B,IAAK,IAFDC,EAAQkmD,EAAMiyb,aAAa94f,QAAQkugB,EAAQpE,UAC3CY,GAAY,EACP/sgB,EAAIkpE,EAAMiyb,aAAa94f,QAAQiugB,EAAUnE,UAAWnsgB,GAAKgjB,EAAOhjB,IAErE,IAAK,IADDwpE,EAAMN,EAAMiyb,aAAan7f,GACpBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIlX,EAAOypE,EAAU6me,YAAYp3e,EAAKA,EAAI2xb,aAAa3ze,IACnDo7e,GAAc/+d,MAAMkviB,EAAe,IAAMnwE,GAAc/+d,MAAMvzB,EAAM,IACnEsyf,GAAc/+d,MAAMvzB,EAAM,GAAKsyf,GAAc/+d,MAAMmviB,EAAgB,KAC9DjmE,IACDlsgB,EAAQiD,KAAK4ukB,8BAA8BlpgB,EAAI2xb,aAAa3ze,GAAIuyD,EAAWl5E,EAAOm+D,GAClF+tc,GAAY,GAEhBjpgB,KAAK6ukB,+BAA+BnpgB,EAAI2xb,aAAa3ze,GAAIuyD,EAAW/a,EAAUn+D,EAAOq9C,MAKrG+6c,EAAO/5f,UAAU4tkB,2BAA6B,SAAUzrkB,EAAO0hB,EAAKomiB,EAAaC,GAC7E,IAAIrve,EAAYj2E,KAAKwuf,OAAOv4a,UAa5B,OAZI14E,EAAQ8njB,IACR9njB,EAAQ8njB,GAERpmiB,EAAMqmiB,IACNrmiB,EAAMqmiB,GAEN/njB,EAAQ04E,EAAUk/d,wBAClB53iB,EAAQ04E,EAAUk/d,uBAElBl2hB,EAAMg3D,EAAUk/d,wBAChBl2hB,EAAMg3D,EAAUk/d,wBAEX53iB,MAAOA,EAAO0hB,IAAKA,IAEhCk2e,EAAO/5f,UAAUwzkB,8BAAgC,SAAU7mgB,EAAMkO,EAAWl5E,EAAOm+D,GAC/E,GAAuB,0BAAwBhgE,IAAV6B,IAAqC,SAAbm+D,GAAoC,WAAbA,GAAyB,CACzG,IAAI8kf,EAAiB/pe,EAAUs/d,kBAAkBxte,GAC7CxpC,EAASyhhB,EAAe3tD,gBACxB2tD,EAAe3oD,aAAa76f,OAAS,GAAKwjjB,EAAe3oD,aAAa,GAAGj9e,SAAS5d,OAAS,IAC3F+hC,EAASyhhB,EAAe3oD,aAAa,GAAGj9e,SAAS,GAAGi4e,iBAExDt1f,GAASwhC,EAAOnxB,iBAAiB8tD,GAErC,OAAOn+D,GAMXo4f,EAAO/5f,UAAU+zkB,6BAA+B,SAAUl5f,EAAW13C,EAAQ28B,EAAUn+D,GACnFiD,KAAK8rkB,qBAAqBvtiB,EAAQ28B,EAAUn+D,GAAO,IAEvDo4f,EAAO/5f,UAAUg0kB,0BAA4B,SAAUjqC,EAAckqC,GACjEA,EAAW3xE,sBAAwBynC,EAAaznC,sBAChD2xE,EAAW1xE,cAAgBwnC,EAAaxnC,eAE5CxI,EAAO/5f,UAAU0wkB,qBAAuB,SAAUvtiB,EAAQ28B,EAAUn+D,EAAOq9C,GACnEA,GAAuB,aAAb8gB,IACVn+D,EAAQiD,KAAKyukB,eAAelwiB,EAAQxhC,IAEpCiD,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,0BAC5DnsiB,EAAQiD,KAAK+3hB,cAAcmR,uBAAuBomC,sBAAsB/wiB,EAAQ28B,EAAUn+D,IAE1FA,aAAiBq6f,GACbp3f,KAAK+3hB,gBAAkB/3hB,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,WAC1E75f,KAAKovkB,0BAA0BrykB,EAAOwhC,GAGtCA,EAAOo7d,WAAW58f,GAItBU,EAAkBV,GAClBwhC,EAAOi9d,cAGM,SAAbtgc,EACA38B,EAAO0wB,KAAOlyD,EAEI,WAAbm+D,EACL38B,EAAO4wB,OAASpyD,EAEE,cAAbm+D,EACL38B,EAAOkge,UAAY1hgB,EAED,eAAbm+D,EACL38B,EAAO/O,WAAazyB,EAEF,aAAbm+D,EACL38B,EAAOnP,SAAWryB,EAEA,mBAAbm+D,EACL38B,EAAOoge,eAAiB5hgB,EAEN,sBAAbm+D,EACL38B,EAAOige,kBAAoBzhgB,EAET,kBAAbm+D,EACL38B,EAAOmge,cAAgB3hgB,EAEL,cAAbm+D,EACL38B,EAAOivQ,UAAYzwS,EAED,cAAbm+D,IACL38B,EAAOo/d,cAAgB5ggB,IAM/Bo4f,EAAO/5f,UAAUowiB,cAAgB,SAAUt5B,EAAYl8f,EAAOD,GAC1D,IAAIw5jB,EAAiB,IAAIzzT,GAAYo2P,GACjClygB,KAAK+3hB,gBACL/3hB,KAAK+3hB,cAAci1C,kBAAkB,iBACrChtkB,KAAK+3hB,cAAcmR,uBAAuBC,mBAAmB3kiB,KAAK+qkB,IAEtEvvkB,KAAK4oiB,eAAe5oiB,KAAKi2E,WACzBi8b,EAAWl8f,MAAQA,EACnBk8f,EAAWn8f,OAASA,EAEpB/V,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBja,EAAWjod,KAAKgtc,UAAWib,EAAWjod,KAAK67c,aAAc,GAC9F9lgB,KAAKu6jB,SAASv6jB,KAAKi2E,WAAW,GAC1Bj2E,KAAKwuf,OAAOgV,MAAMvhB,oBAClBjif,KAAKwuf,OAAOgV,MAAMvhB,mBAAmBoiE,qBAAqBnyC,IAOlE/c,EAAO/5f,UAAUk/iB,oBAAsB,SAAUt3gB,IACzChjC,KAAKwuf,OAAOgV,MAAMtR,gBAAmBlyf,KAAKwuf,OAAOgV,MAAM3U,mBAKtDpxf,EAAkBuC,KAAKwuf,OAAOv4a,UAAUg8a,gBAAgBjvd,gBAAkBhjC,KAAKwuf,OAAOv4a,UAAUg8a,gBAAgBjvd,gBAAkBA,EASnIhjC,KAAKmoiB,uBAAuB,gBAAiBnlgB,GAAe,GAAO,GAR7C,SAAlBA,EACAhjC,KAAKmoiB,uBAAuB,gBAAiB,WAAW,GAAO,GAG/DnoiB,KAAKmoiB,uBAAuB,gBAAiB,QAAQ,GAAO,KAexEhzC,EAAO/5f,UAAU+siB,uBAAyB,SAAUjte,EAAUn+D,EAAOq9C,EAAQ8ggB,GACzE,IAAIlof,EAAUkI,EAAS,GAAGhwC,cAAgBgwC,EAAS75D,MAAM,GACzDrB,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtC,IAAIrra,EAAYj2E,KAAKwuf,OAAOv4a,UAE5B,GADAj2E,KAAK4sc,YAAY55Y,IACbhzD,KAAKwuf,OAAOgV,MAAMtR,gBAAmBlyf,KAAKwuf,OAAOgV,MAAM3U,iBAG3D,GAAiB,eAAb3zb,IAC0C,IAAtC+a,EAAUg8a,gBAAgBoI,QAAiBjgd,EAC3Cp6C,KAAK6/iB,gBAAgB9ijB,EAAQ,OAFrC,CAMA,GAAIk5E,EAAU2hK,QAAS,CACnB53O,KAAK4oiB,eAAe3yd,GAChB77B,GAAuB,eAAb8gB,IACVn+D,EAAQiD,KAAKwvkB,wBAAwBv5f,EAAU14E,MAAM05f,UAAWl6f,IAEpE,IAAIoujB,EAAOl1e,EAAU14E,MAAM05f,UAAU8P,cAAc/mgB,KAAKwuf,QACxDxuf,KAAKyvkB,wBAAwBtkB,EAAMjwf,EAAUn+D,EAAOq9C,GACpDp6C,KAAK0vkB,gBAAgBvkB,GAAM,QAI3BnrjB,KAAK4oiB,eAAe3yd,GACpBj2E,KAAK2vkB,mCAAmCz0gB,EAAUn+D,EAAOq9C,GAE7Dp6C,KAAKu6jB,SAAStkf,KAOlBk/a,EAAO/5f,UAAUykjB,gBAAkB,SAAU+vB,GAEzC,IAKI11E,EALA1L,EAASxuf,KAAKwuf,OAEdyD,GADajyf,KAAKwuf,OAAOv4a,UAAU14E,MAAM05f,UAAUhF,gBAAgB+F,WACjDh4f,KAAKwuf,OAAOv4a,UAAU14E,MAAM05f,UAAUhF,iBACxDjpZ,EAAOwlZ,EAAOoxB,YAAY3tB,EAAgB+F,WAAWqC,QACzC7L,EAAOlhc,OAAOotc,aAAa1xZ,EAAMipZ,EAAgB+F,WAAWkD,iBAGxEhB,EADA01E,EACc39E,EAAgB+F,WAAWkD,gBAAkB,EAG7CjJ,EAAgB+F,WAAWkD,gBAAkB,EAG1Dz9f,EADe+wf,EAAOlhc,OAAOotc,aAAa1xZ,EAAMkxZ,MAEjDl6f,KAAKkoiB,oBAAoBl/b,EAAMkxZ,GAC/B1L,EAAOv4a,UAAU14E,MAAMsxiB,wBAAuB,GAC9CrgD,EAAOv4a,UAAUh3D,IAAI4vhB,wBAAuB,GAC5CrgD,EAAOv4a,UAAU2/c,wBASzBzgC,EAAO/5f,UAAU8siB,oBAAsB,SAAUl/b,EAAMkyZ,GACnCl7f,KAAKwuf,OAAOv4a,UAA5B,IACI+hb,EAAa,IAAI8C,IAChBr9f,EAAkBurG,IAASkyZ,GAAmB,GAAKA,EAAkB,IACtElD,EAAWqC,OAASrxZ,EAAKqxZ,OACzBrC,EAAWkD,gBAAkBA,GAEjCl7f,KAAKmoiB,uBAAuB,aAAcnwC,GAAY,GAAO,IAMjE7C,EAAO/5f,UAAUu0kB,mCAAqC,SAAUz0gB,EAAUn+D,EAAOq9C,GAC7E,IAAI67B,EAAYj2E,KAAKwuf,OAAOv4a,UACX,eAAb/a,GAA6B9gB,IAEzBr9C,GADCU,EAAkBw4E,EAAU14E,QAAU04E,EAAU14E,MAAM+xiB,cAAcr5d,EAAUh3D,KACvEjf,KAAKwvkB,wBAAwBv5f,EAAU14E,MAAM05f,UAAWl6f,GAGxDiD,KAAKwvkB,wBAAwBv5f,EAAUh3D,IAAIg4e,UAAWl6f,IAGtEiD,KAAKitkB,8BAA8B/xgB,EAAUn+D,EAAOq9C,IAExD+6c,EAAO/5f,UAAUo0kB,wBAA0B,SAAUpiD,EAAkByiD,GACnE,IAAIC,EAAyB1iD,EAAiBn7B,gBAAgBmL,WAC9D,GAAI0yE,EAAyB,EAAG,CAG5B,GAAID,EAAkB,GAAKC,EAAyBD,GAAmB,EACnE,OAAQC,EAGR,IAAIh6B,GAAkB91iB,KAAK+vkB,iCAAiCD,GAAyBD,GACrF,OAAO/5B,EAAiB+5B,GAAoB,EAAI/5B,EAAiBA,EAAiB+5B,EAItF,OAAO7vkB,KAAK+vkB,gCAAgCD,EAAwBD,IAG5E16E,EAAO/5f,UAAU20kB,gCAAkC,SAAU77jB,EAAU27jB,GACnE,IAAIlO,EAAWt1jB,KAAKE,IAAIsjkB,GACxB,GAAiB,IAAb37jB,GAA+B,IAAbytjB,EAClB,OAAOkO,EAAkB,EAAIlO,EAAW,EAGxC,IAAI39e,EAAgC,IAAvB33E,KAAK0zB,MAAM7rB,IAA2C,IAAvB7H,KAAK0zB,MAAM4hiB,IAAoB,IAEvEqO,GADO3jkB,KAAK0zB,MAAM7rB,GAAY8vE,GAAQ33E,KAAK0zB,MAAM4hiB,GAC/BA,EAItB,OAHIkO,EAAkB,IAClBG,GAAarO,GAETqO,EAAY97jB,GAAc,EAAI27jB,EAAkBG,EAAY97jB,GAG5Eihf,EAAO/5f,UAAU6xkB,8BAAgC,SAAU/xgB,EAAUn+D,EAAOq9C,GAIxE,OAHI38C,EAAkBy9D,KAClBA,EAAW,mBAEPA,GACJ,IAAK,eACDl7D,KAAKiwkB,sBAAsB,eAAgBlzkB,GAAO,GAClD,MACJ,IAAK,gBACDiD,KAAKiwkB,sBAAsB,gBAAiBlzkB,GAAO,GACnD,MACJ,IAAK,cACDiD,KAAKiwkB,sBAAsB,cAAelzkB,GAAO,GACjD,MACJ,IAAK,aACDiD,KAAKiwkB,sBAAsB,aAAclzkB,EAAOq9C,GAChD,MACJ,IAAK,kBACDp6C,KAAKiwkB,sBAAsB,kBAAmBlzkB,GAAO,GACrD,MACJ,IAAK,cACDiD,KAAKiwkB,sBAAsB,cAAelzkB,GAAO,GACjD,MACJ,IAAK,kBACDiD,KAAKiwkB,sBAAsB,kBAAmBlzkB,GAAO,GACrD,MACJ,IAAK,gBACDiD,KAAKiwkB,sBAAsB,gBAAiBlzkB,GAAO,GACnD,MACJ,IAAK,aACDiD,KAAKiwkB,sBAAsB,aAAclzkB,GAAO,GAChD,MACJ,IAAK,kBACDiD,KAAKiwkB,2BAAsB/0kB,EAAW6B,GAAO,GAC7C,MACJ,IAAK,YACDiD,KAAKiwkB,sBAAsB,YAAalzkB,GAAO,GAC/C,MACJ,IAAK,uBAEDiD,KAAKiwkB,2BAAsB/0kB,EAAW6B,GAAO,KAYzDo4f,EAAO/5f,UAAU60kB,sBAAwB,SAAU/0gB,EAAUn+D,EAAOq9C,GAChE,IAAI67B,EAAYj2E,KAAKwuf,OAAOv4a,UACxBqvO,EAAgBrvO,EAAU14E,MAC1BwiiB,EAAc9pd,EAAUh3D,IACvBg3D,EAAU8ge,YACXzxP,EAAgBrvO,EAAUh3D,IAC1B8ghB,EAAc9pd,EAAU14E,OAG5ByC,KAAKkwkB,+BAA+B5qR,EAAey6O,EAAa7ke,EAAUn+D,EAAOq9C,IAGrF+6c,EAAO/5f,UAAU80kB,+BAAiC,SAAU3ykB,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GACrF,IAAI67B,EAAYj2E,KAAKwuf,OAAOv4a,UAC5B,IAAI14E,EAAM05f,UAAUsR,eAAmBtpf,EAAIg4e,UAAUsR,eAC9ChrgB,EAAM05f,UAAUuR,iBAAmBvpf,EAAIg4e,UAAUuR,iBACjDvyb,EAAU8ic,eAAex7gB,EAAM05f,UAAUuR,eAAgBjrgB,EAAO0hB,GAWlE,CAED,IAAKxhB,EAAkBV,KAAWiD,KAAKi2E,UAAU2hK,SAAwB,cAAb18K,GAA4Bl7D,KAAKmwkB,oBAAoB5ykB,EAAM05f,UAAW15f,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAC3J,OAGAp6C,KAAKowkB,gBAAgB7ykB,EAAM05f,UAAW15f,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,OAjBG,CAC1E,IAAI2tB,OAAO,EACXxqE,EAAM05f,UAAUuR,eAAeJ,WAAWrB,cAAc/mgB,KAAKwuf,QACzDxuf,KAAKqmkB,oBAAoBpwf,IACzBj2E,KAAKykkB,sBAAsBlnkB,GAAO,GAEtCwqE,EAAOxqE,EAAM05f,UAAUuR,eACvBxogB,KAAKqwkB,sBAAsBtogB,EAAMxqE,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAC9D,IAAIgrB,EAAQ2C,EAAKqgc,WACjBpogB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2Bjnd,EAAMtzD,MAAOszD,EAAMkyb,gBAAiBlyb,GAAO,KAgBjG+vb,EAAO/5f,UAAUq0kB,wBAA0B,SAAUx4E,EAAW/7b,EAAUn+D,EAAOq9C,GAC7E,IAAI7b,EAAS04d,EAAUhF,gBAIvB,GAHI73c,GAAuB,eAAb8gB,IACVn+D,EAAQwhC,EAAO6+d,WAAarggB,GAEf,eAAbm+D,GAA6Bn+D,aAAiB+9f,GAAa,CAC3D,IAAI9C,EAAaj7f,EACZi7f,EAAWsB,SAAS,qBACrBtB,EAAWkD,gBAAkB38d,EAAOy5d,WAAWkD,iBAoBvD,GAjBIl7f,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,0BAC5DnsiB,EAAQiD,KAAK+3hB,cAAcmR,uBAAuBonC,wCAAwC/xiB,EAAQ28B,EAAUn+D,IAE5GA,aAAiBo6f,KACb15f,EAAkBy9D,GACdl7D,KAAK+3hB,gBAAkB/3hB,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,WAC1E75f,KAAKuwkB,oBAAoBxzkB,EAAOwhC,GAGhCA,EAAOo7d,WAAW58f,GAGJ,eAAbm+D,IACL38B,EAAOy5d,WAAaj7f,EAAMi7f,aAI9Bv6f,EAAkBV,GAGlB,OAFAwhC,EAAOi9d,mBACPx7f,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkB5tf,EAAO66d,UAAW,EAAG,GAG9D,GAAiB,iBAAbl+b,EACA38B,EAAOg/d,aAAexggB,OAErB,GAAiB,kBAAbm+D,EACL38B,EAAO++d,cAAgBvggB,OAEtB,GAAiB,eAAbm+D,EACL38B,EAAO6+d,WAAarggB,OAEnB,GAAiB,oBAAbm+D,EACL38B,EAAOi/d,gBAAkBzggB,OAExB,GAAiB,gBAAbm+D,EACL38B,EAAOizO,YAAcz0Q,OAEpB,GAAiB,gBAAbm+D,EACL38B,EAAO8+d,YAActggB,OAEpB,GAAiB,oBAAbm+D,EACL38B,EAAOqwO,gBAAkB7xQ,OAExB,GAAiB,kBAAbm+D,EACL38B,EAAOyE,cAAgBjmC,EACvBiD,KAAKwuf,OAAOlhc,OAAO4sd,aAAc,OAEhC,GAAiB,cAAbh/c,EACkB,qBACnBn+D,EAAQiD,KAAKwuf,OAAOjrf,OAAOu0f,WAAW/6f,IAE1CwhC,EAAOk9d,WAAW1+f,QAEjB,GAAiB,eAAbm+D,EASL,OARIn+D,aAAiBo6f,KACjBn3f,KAAKwwkB,iCAAiCjyiB,EAAQxhC,GAC9CA,EAAQA,EAAMi7f,YAElBz5d,EAAOy5d,WAAW2B,WAAW58f,GAC7BiD,KAAKwuf,OAAOlhc,OAAOuyd,oBAAoBthf,EAAO66d,WAC9Cp5f,KAAKywkB,mBAAmBlyiB,EAAO66d,UAAWr8f,EAAOwhC,QACjDv+B,KAAK0vkB,gBAAgBnxiB,EAAO66d,WAAW,IAI/CjE,EAAO/5f,UAAUm1kB,oBAAsB,SAAUprC,EAAckqC,GAC3DA,EAAWnzE,sBAAwBipC,EAAajpC,sBAChDmzE,EAAWr3E,WAAamtC,EAAantC,WACrCq3E,EAAWt3E,UAAYotC,EAAaptC,WAExC5C,EAAO/5f,UAAUq1kB,mBAAqB,SAAUx5E,EAAWe,EAAYupB,GAC/DvpB,aAAsB8C,IACtB96f,KAEK0wkB,0BAA0Bz5E,EAAWe,IAGlD7C,EAAO/5f,UAAUs1kB,0BAA4B,SAAUz5E,EAAWe,GAC9D,IAAIhvZ,EAAOhpG,KAAKwuf,OAAOoxB,YAAY5nB,EAAWqC,QAC1Cs2E,OAAYz1kB,EACXuC,EAAkBurG,KACnB2ne,EAAY3wkB,KAAKwuf,OAAOlhc,OAAOotc,aAAa1xZ,EAAMgvZ,EAAWkD,oBAE3Cl7f,KAAK+3hB,eAAkB/3hB,KAAK+3hB,gBAAkB/3hB,KAAK+3hB,cAAcn+B,aAE/E3C,aAAqBC,KAAoBz5f,EAAkBkzkB,KACvDlzkB,EAAkBkzkB,EAAU1+E,mBAAqBx0f,EAAkBw5f,EAAUK,iBACjFt3f,KAAKwwkB,iCAAiCv5E,EAAUhF,gBAAiB0+E,EAAU1+E,iBAEtEx0f,EAAkBurG,KACvBiuZ,EAAUhF,gBAAgBmL,gBAAaligB,EACvC+7f,EAAUhF,gBAAgBrjP,qBAAkB1zQ,KAUxDi6f,EAAO/5f,UAAUo1kB,iCAAmC,SAAUI,EAAWC,GAChEpzkB,EAAkBozkB,EAAUzzE,cAC7BwzE,EAAUxzE,WAAayzE,EAAUzzE,YAEhC3/f,EAAkBozkB,EAAUjiU,mBAC7BgiU,EAAUhiU,gBAAkBiiU,EAAUjiU,kBAM9CumP,EAAO/5f,UAAU88gB,uBAAyB,SAAUjic,GAC5Cj2E,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAci1C,kBAAkB,qBAEzChtkB,KAAK8wkB,+BAA+B76f,IAKxCk/a,EAAO/5f,UAAU01kB,+BAAiC,SAAU76f,GACxD,IAAIghb,EAAYhhb,EAAU14E,MAAM05f,UAC5B85E,EAAgB/wkB,KAAKgxkB,yBAAyB/5E,GAC9CsqB,EAAavhhB,KAAKixkB,mBAAmBh6E,EAAW85E,EAAc71E,gBAAiB61E,EAAcG,aACjGlxkB,KAAKmxkB,aAAaJ,EAAcvE,YAAav1E,EAAWsqB,EAAYwvD,EAAc71E,gBAAiB61E,EAAcG,aACjHlxkB,KAAKu6jB,SAAStkf,GAAW,GACzBj2E,KAAKwuf,OAAOj/X,eAKhB4lY,EAAO/5f,UAAU41kB,yBAA2B,SAAU/5E,GAClD,IAAIu1E,OAActxkB,EACdgggB,EAAkB,EAClBg2E,EAAc,OACbzzkB,EAAkBw5f,EAAUhF,kBACzBx0f,EAAkBw5f,EAAUhF,gBAAgB+F,cAChDw0E,EAAcxskB,KAAKwuf,OAAOoxB,YAAY3oB,EAAUhF,gBAAgB+F,WAAWqC,QAC3Ea,EAAkBjE,EAAUhF,gBAAgB+F,WAAWkD,iBAE3D,IAAI1M,EAASxuf,KAAKwuf,OAClB,GAAwB,IAApB0M,IAA0Bz9f,EAAkB+ukB,KAC3C/ukB,EAAkB+wf,EAAO20B,oBAAoBqpD,EAAYjyE,mBACtD98f,EAAkB+wf,EAAO20B,oBAAoBqpD,EAAYjyE,gBAAgB50a,OAAOu1a,IAAmB,CACvG,IAAIuB,EAAYz8f,KAAKwuf,OAAOlhc,OAAOotc,aAAa8xE,EAAatxE,GACxDz9f,EAAkBg/f,KACnBy0E,EAAcz0E,EAAUqc,kBAGhC,OACI0zD,YAAaA,EACbtxE,gBAAiBA,EACjBg2E,YAAaA,IAMrB/7E,EAAO/5f,UAAUg2kB,wBAA0B,SAAUn7f,EAAW13C,GAC5D,IAAI04d,EAAYhhb,EAAU14E,MAAM05f,UAC5B85E,EAAgB/wkB,KAAKgxkB,yBAAyB/5E,GAClDj3f,KAAKmxkB,aAAaJ,EAAcvE,YAAav1E,EAAW14d,EAAQwyiB,EAAc71E,gBAAiB61E,EAAcG,aAC7GlxkB,KAAKu6jB,SAAStkf,GAAW,GACrBj2E,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,yBAC5DlpiB,KAAK+3hB,cAAcsR,iBAG3Bl0C,EAAO/5f,UAAU+1kB,aAAe,SAAUnoe,EAAMk/Z,EAAO3pe,EAAQ8yiB,EAAUC,GACrE,IAAI7zkB,EAAkByqgB,GAAtB,CAGA,GAAIA,aAAiBhR,IACbluZ,EAAKqxZ,SAAW6N,EAAMjW,gBAAgB+F,WAAWqC,QAC9Cg3E,IAAanpE,EAAMjW,gBAAgB+F,WAAWkD,gBAAiB,CAClE,GAAIl7f,KAAK+3hB,cAAe,CACpB,IAAIw5C,EAAkBvxkB,KAAK+3hB,cAAcmR,uBACpCzriB,EAAkB8zkB,KACnBhziB,EAASgziB,EAAgBC,0CAA0CtpE,EAAMjW,gBAAiB1zd,IAGlG2pe,EAAMjW,gBAAgB0H,WAAWp7d,GACjCv+B,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBjkB,EAAO,EAAG,GAGvD,OAAOlogB,KAAKmxkB,aAAanoe,EAAMk/Z,EAAM1B,mBAAoBjoe,EAAQ8yiB,EAAUC,KAE/En8E,EAAO/5f,UAAU61kB,mBAAqB,SAAUh6E,EAAWiD,EAAao3E,GACpE,IAAK7zkB,EAAkBw5f,EAAUoP,yBACzBpP,EAAUoP,kCAAkCnP,GAAiB,CAC7D,GAAKz5f,EAAkBw5f,EAAUoP,uBAAuBpU,gBAAgB+F,cACO,IAAxEf,EAAUoP,uBAAuBpU,gBAAgB+F,WAAWqC,OAc/D,OAAOr6f,KAAKixkB,mBAAmBh6E,EAAUoP,uBAAwBnM,EAAao3E,GAb9E,IAAI70E,EAAYz8f,KAAK06f,aAAazD,EAAUoP,wBAC5C,OAAoB,IAAhBnM,EACOjD,EAAUoP,uBAAuBpU,gBAEnCq/E,IAAa70E,EAAUqc,kBACzB94gB,KAAKyxkB,kBAAkBH,EAAU70E,EAAUqc,kBACvC7hB,EAAUoP,uBAAuBpU,gBAGjCjyf,KAAKixkB,mBAAmBh6E,EAAUoP,uBAAwBnM,EAAao3E,KAUlGn8E,EAAO/5f,UAAUq2kB,kBAAoB,SAAUH,EAAUvpC,GACrD,MAAkB,WAAbupC,GAA0C,WAAjBvpC,GACL,WAAjBA,GAA0C,WAAbupC,GAQzCn8E,EAAO/5f,UAAU+8gB,sBAAwB,SAAUlic,GAC3Cj2E,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAci1C,kBAAkB,oBAEzChtkB,KAAK0xkB,cAAcz7f,IAKvBk/a,EAAO/5f,UAAUs2kB,cAAgB,SAAUz7f,GACvC,IAAI8pc,EAAmB//gB,KAAK06f,aAAazkb,EAAU14E,MAAM05f,WACrDjuZ,EAAO,IAAIoxZ,GACfpxZ,EAAKqxZ,OAASr6f,KAAKwuf,OAAO55M,MAAO50S,KAAKwuf,OAAO55M,MAAMp4S,OAAS,GAAI69f,OAAS,EACzE,IAAIG,EAAe,IAAI2e,GACvB3e,EAAaD,eAAiBv6f,KAAKwuf,OAAOgG,cAAex0f,KAAKwuf,OAAOgG,cAAch4f,OAAS,GAAI+9f,eAAiB,EACjHvxZ,EAAKuxZ,eAAiBC,EAAaD,eACnCvxZ,EAAKwxZ,aAAeA,EACpBx6f,KAAKwuf,OAAOgG,cAAchwf,KAAKg2f,GAC/Bx6f,KAAK2xkB,iBAAiBn3E,EAAculB,EAAkB/2a,GACtDhpG,KAAKwuf,OAAO55M,MAAMpwS,KAAKwkG,GACvBhpG,KAAK4xkB,sBAAsB37f,EAAW+yB,EAAKqxZ,SAK/ClF,EAAO/5f,UAAUw2kB,sBAAwB,SAAU37f,EAAWokb,GAC1D,IAAI02E,EAAgB/wkB,KAAKgxkB,yBAAyB/6f,EAAU14E,MAAM05f,WAClEj3f,KAAK6xkB,uBAAuBd,EAAcvE,YAAav2f,EAAU14E,MAAM05f,UAAWoD,GAClFr6f,KAAKu6jB,SAAStkf,GAAW,GACzBj2E,KAAK09jB,qBAAuB,EAC5B19jB,KAAKy9jB,mBAAgBvikB,EACrB8E,KAAKwuf,OAAOj/X,eAEhB4lY,EAAO/5f,UAAUy2kB,uBAAyB,SAAU7oe,EAAMk/Z,EAAO7N,GAC7D,IAAI58f,EAAkByqgB,GAAtB,CAGA,GAAIA,aAAiBhR,IACbluZ,EAAKqxZ,SAAW6N,EAAMjW,gBAAgB+F,WAAWqC,OAAQ,CACzD,GAAIr6f,KAAK+3hB,cAAe,CACpB,IAAIw5C,EAAkBvxkB,KAAK+3hB,cAAcmR,uBACpCzriB,EAAkB8zkB,KACnBl3E,EAASk3E,EAAgBO,yCAAyC5pE,EAAMjW,gBAAgB+F,WAAYqC,IAG5G6N,EAAMjW,gBAAgB+F,WAAWqC,OAASA,EACtCr6f,KAAKy9jB,gBAAkBv1D,EAAMjW,gBAAgB+F,WAAWkD,kBACxDl7f,KAAK09jB,qBAAuB,EAC5B19jB,KAAKy9jB,cAAgBv1D,EAAMjW,gBAAgB+F,WAAWkD,iBAE1DgN,EAAMjW,gBAAgB+F,WAAWkD,gBAAkBl7f,KAAK09jB,oBACxD19jB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBjkB,EAAO,EAAG,GAGvD,OAAOlogB,KAAK6xkB,uBAAuB7oe,EAAMk/Z,EAAM1B,mBAAoBnM,KAEvElF,EAAO/5f,UAAUu2kB,iBAAmB,SAAUn3E,EAAculB,EAAkB/2a,GAI1E,IAAK,IAHD++b,EAAehoB,EAAiBjH,iBAChCi5D,KACAzpC,EAAsBvoB,EAAiB3mB,UAClCl9f,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAEnBuB,EADDg/f,EAAY6rC,EAAoB3id,OAAOzpF,KAEvC61kB,EAAcvtkB,KAAKi4f,EAAUqc,kBAKhC,IAFDk5D,GAA+D,IAAzCD,EAAcxzkB,QAAQwpiB,GAAuB,EAAIgqC,EAAcxzkB,QAAQwpiB,GAC7FvuB,EAAeuG,EAAiBvG,aAAaj6f,OAAOwggB,EAAiBvG,aAAah9gB,OAAS,GAC/F,IAASN,EAAI,EAAGA,EAAIosiB,EAAoB3id,OAAOnpF,OAAQN,IAAK,CACxD,IAAIuggB,EAAY,IAAI4c,GAAW7e,GACrB,IAANt+f,EACAuggB,EAAUqc,iBAAmBivB,GAGD,IAAxBiqC,GAA6BA,EAAsBD,EAAcv1kB,OAAS,EAC1Ew1kB,IAGAA,EAAsB,EAE1Bv1E,EAAUqc,iBAAmBi5D,EAAcC,IAE/Cv1E,EAAU+c,aAAe,KAAOt9gB,EAAI,GAAKs9gB,EACzC/c,EAAUtC,QAAU,EACpBsC,EAAUpK,gBAAgBsH,WAAWomB,EAAiB1tB,iBACtDoK,EAAUxK,gBAAgB0H,WAAWomB,EAAiB9tB,iBACtDwK,EAAUgd,aAAev9gB,EACzBs+f,EAAa70a,OAAOnhF,KAAKi4f,KAIjCtH,EAAO/5f,UAAUg1kB,gBAAkB,SAAUn5E,EAAW15f,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GACjFp6C,KAAK4oiB,eAAe5oiB,KAAKi2E,WACzBghb,EAAYA,EAAU8P,cAAc/mgB,KAAKwuf,QAEzCxuf,KAAKyvkB,wBAAwBx4E,EAAW/7b,EAAUn+D,EAAOq9C,GACzDp6C,KAAK0vkB,gBAAgBz4E,GAAW,GAChCj3f,KAAKs8jB,eAAet8jB,KAAKi2E,WACrBghb,EAAU7jd,OAAOn0B,EAAIg4e,YAGzBj3f,KAAKiykB,8BAA8Bh7E,EAAW15f,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,IAG/E+6c,EAAO/5f,UAAU+0kB,oBAAsB,SAAUl5E,EAAW15f,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GACrF,IAAIs3d,EAAkBza,EAAU4P,kBAChC,IAAK5nf,EAAIg4e,YAAcA,IAAyD,IAA5Cya,EAAgBnzgB,QAAQ0gB,EAAIg4e,cACvC,cAAfl6f,EAAM2J,MAA2B3J,EAAU,gBAAa4jgB,IAAqC,cAAf5jgB,EAAM2J,MAAuB,CAC7G,IAAI5J,EAAsB,cAAfC,EAAM2J,KAAwB3J,EAAQA,EAAM6yD,KAEvD,OADA5vD,KAAKgskB,mCAAmC9wgB,EAAUp+D,EAAKs9C,IAChD,EAGf,OAAO,GAIX+6c,EAAO/5f,UAAUi1kB,sBAAwB,SAAUtogB,EAAMxqE,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAClF,IAAI67B,EAAYj2E,KAAKwuf,OAAOv4a,UAC5B,GAAIh3D,EAAIg4e,UAAUsR,cAAe,CAC7B,IAAI2pE,EAAgBj8f,EAAUo7d,mBAAmBtpe,EAAM9oD,EAAIg4e,UAAUuR,gBACrE,GAAI0pE,EAAc9pE,WAAWjkgB,SAAS8a,EAAIg4e,UAAUuR,gBAAiB,CACjE,IAAIgE,EAAYv2b,EAAUwge,gBAAgB1ue,EAAMmqgB,GAC5CzlE,EAAUx2b,EAAUwge,gBAAgBx3hB,EAAIg4e,UAAUuR,eAAgB0pE,GAClEj8f,EAAU0ge,aAAau7B,EAAejzjB,EAAIg4e,UAAUuR,gBAEhDvyb,EAAU8ic,eAAem5D,EAAe30kB,EAAO0hB,IAC/CliB,EAAQiD,KAAKmykB,yBAAyBD,EAAeh3gB,EAAUn+D,GAC/DiD,KAAKoykB,4BAA4BF,EAAeh3gB,EAAUn+D,EAAOq9C,IAG7Doyd,IAAc0lE,EACdlykB,KAAKowkB,gBAAgB7ykB,EAAM05f,UAAW15f,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAGnEp6C,KAAKqykB,wBAAwB7lE,EAAUnE,SAAU9qgB,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAMtFp6C,KAAKsykB,yBAAyBJ,EAAc9pE,WAAY8pE,EAAezlE,EAASvxc,EAAUn+D,EAAOq9C,QAIrGp6C,KAAKqykB,wBAAwBH,EAAc7pE,SAAU9qgB,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,OAGrF,CACD,IAAIm4hB,EAAQt8f,EAAU6ge,iBAAiB/ue,GACvC/nE,KAAKqykB,wBAAwBE,EAAMlqE,SAAU9qgB,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,KAGlF+6c,EAAO/5f,UAAUg3kB,4BAA8B,SAAUrqgB,EAAM7M,EAAUn+D,EAAOq9C,GAC5E,IAAK,IAAIl+C,EAAI,EAAGA,EAAI6rE,EAAKsvb,aAAa76f,OAAQN,IAAK,CAC/C,IAAIgsgB,EAAQngc,EAAKsvb,aAAan7f,GAC1BgsgB,aAAiBhR,GACjBl3f,KAAKyvkB,wBAAwBvnE,EAAOhtc,EAAUn+D,EAAOq9C,GAGrDp6C,KAAKwykB,kCAAkCtqE,EAAOhtc,EAAUn+D,EAAOq9C,KAI3E+6c,EAAO/5f,UAAU+2kB,yBAA2B,SAAUpqgB,EAAM7M,EAAUn+D,GAClE,GAAqB,kBAAVA,EAAqB,CAE5BA,GADgBiD,KAAKwuf,OAAOv4a,UAAUs/d,kBAAkBxte,GACrCkqb,gBAAgB7kf,iBAAiB8tD,GAExD,OAAOn+D,GAIXo4f,EAAO/5f,UAAUi3kB,wBAA0B,SAAUI,EAAMl1kB,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GACpFr9C,EAAQiD,KAAKmykB,yBAAyBM,EAAKp7E,aAAa,GAAIn8b,EAAUn+D,GACtE,IAAK,IAAIb,EAAIu2kB,EAAKxjW,SAAU/yO,EAAIu2kB,EAAKrqE,WAAW/Q,aAAa76f,OAAQN,IAAK,CAEtE,IAAK,IADDwpE,EAAM+sgB,EAAKrqE,WAAW/Q,aAAan7f,GAC9BwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACzC1jB,KAAKoykB,4BAA4B1sgB,EAAI2xb,aAAa3ze,GAAIw3C,EAAUn+D,EAAOq9C,GAE3E,GAAIn7B,EAAIg4e,UAAUsR,eAAiBvogB,KAAKwuf,OAAOv4a,UAAU8ve,YAAYrgf,EAAKzmD,EAAIg4e,UAAUuR,gBACpF,OAGRxogB,KAAKiykB,8BAA8BQ,EAAKrqE,WAAY7qgB,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,IAIrF+6c,EAAO/5f,UAAUk3kB,yBAA2B,SAAUltgB,EAAOonc,EAAWC,EAASvxc,EAAUn+D,EAAOq9C,GAC9F,IAAI67B,EAAYj2E,KAAKwuf,OAAOv4a,UACxBxtD,EAAawtD,EAAU6me,YAAYtwC,EAAUnE,SAAUmE,GACvDv0e,EAAWxP,EAAa+jf,EAAU/D,WAAWv6M,UAC7Cm3P,EAAcpve,EAAU6me,YAAYrwC,EAAQpE,SAAUoE,GACtD64C,EAAeD,EAAc54C,EAAQhE,WAAWv6M,UAChD66Q,EAAW/okB,KAAKgpkB,2BAA2BvgjB,EAAYwP,EAAUothB,EAAaC,GAClF78hB,EAAasgjB,EAASxrkB,MACtB06B,EAAW8wiB,EAAS9pjB,IAGpB,IAAK,IAFDC,EAAQkmD,EAAMiyb,aAAa94f,QAAQkugB,EAAQpE,UAC3CY,GAAY,EACP7xb,EAAIhS,EAAMiyb,aAAa94f,QAAQiugB,EAAUnE,UAAWjxb,GAAKl4D,EAAOk4D,IAErE,IAAK,IADD1R,EAAMN,EAAMiyb,aAAajgb,GACpB1zD,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIlX,EAAOypE,EAAU6me,YAAYp3e,EAAKA,EAAI2xb,aAAa3ze,IACnDrX,KAAK0zB,MAAMtX,IAAepc,KAAK0zB,MAAMvzB,IAASH,KAAK0zB,MAAMvzB,GAAQH,KAAK0zB,MAAM9H,KACvEgxe,IACDlsgB,EAAQiD,KAAKmykB,yBAAyBzsgB,EAAI2xb,aAAa3ze,GAAIw3C,EAAUn+D,GACrEksgB,GAAY,GAEhBjpgB,KAAKoykB,4BAA4B1sgB,EAAI2xb,aAAa3ze,GAAIw3C,EAAUn+D,EAAOq9C,MAMvF+6c,EAAO/5f,UAAUs3kB,qBAAuB,SAAUttgB,EAAO7nE,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAClFgrB,EAAQA,EAAM2hc,cAAc/mgB,KAAKwuf,QAEjC,IAAK,IADDv4a,EAAYj2E,KAAKwuf,OAAOv4a,UACnBmB,EAAI,EAAGA,EAAIhS,EAAMiyb,aAAa76f,OAAQ46E,IAAK,CAEhD,IAAK,IADDwtd,EAAWx/d,EAAMiyb,aAAajgb,GACzB9wD,EAAI,EAAGA,EAAIs+gB,EAASvtC,aAAa76f,OAAQ8pB,IAC9CtmB,KAAKoykB,4BAA4BxtC,EAASvtC,aAAa/we,GAAI40C,EAAUn+D,EAAOq9C,GAEhF,GAAIn7B,EAAIg4e,UAAUsR,eAAiBtyb,EAAU8ve,YAAYnhB,EAAU3lhB,EAAIg4e,UAAUuR,gBAE7E,YADAxogB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2Bjnd,EAAMtzD,MAAOszD,EAAMkyb,gBAAiBlyb,GAAO,GAIjGplE,KAAKwuf,OAAOlhc,OAAO++d,2BAA2Bjnd,EAAMtzD,MAAOszD,EAAMkyb,gBAAiBlyb,GAAO,GACzFplE,KAAKiykB,8BAA8B7sgB,EAAO7nE,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,IAG3E+6c,EAAO/5f,UAAU62kB,8BAAgC,SAAU/pE,EAAO3qgB,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAC3F,IAAIg0hB,EAAmBlmE,EAAMrB,kBAC7BqB,EAAQkmE,EAAiBA,EAAiB5xkB,OAAS,GAE9CiB,EADLyqgB,EAAQlogB,KAAKwuf,OAAOv4a,UAAU45d,qBAAqB3nC,MAE3CA,aAAiBhR,GACjBl3f,KAAKowkB,gBAAgBloE,EAAO3qgB,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,GAGzDp6C,KAAK0ykB,qBAAqBxqE,EAAO3qgB,EAAO0hB,EAAKi8C,EAAUn+D,EAAOq9C,KAI1E+6c,EAAO/5f,UAAUo3kB,kCAAoC,SAAUptgB,EAAOlK,EAAUn+D,EAAOq9C,GACnF,IAAK,IAAIrtC,EAAI,EAAGA,EAAIq4D,EAAMiyb,aAAa76f,OAAQuQ,IAE3C,IAAK,IADD24D,EAAMN,EAAMiyb,aAAatqf,GACpBC,EAAI,EAAGA,EAAI04D,EAAI2xb,aAAa76f,OAAQwQ,IACzChN,KAAKoykB,4BAA4B1sgB,EAAI2xb,aAAarqf,GAAIkuD,EAAUn+D,EAAOq9C,IAYnF+6c,EAAO/5f,UAAU8uiB,qBAAuB,SAAUhve,EAAUn+D,GACxD,GAAKU,EAAkBy9D,GAKnBl7D,KAAK4sc,YAAY,qBALa,CAC9B,IAAI55Y,EAAUkI,EAAS,GAAGhwC,cAAgBgwC,EAAS75D,MAAM,GACzDrB,KAAK4sc,YAAY55Y,GAKrBhzD,KAAK2ykB,oBAAoBz3gB,EAAUn+D,IASvCo4f,EAAO/5f,UAAUu3kB,oBAAsB,SAAUz3gB,EAAUn+D,GACvD,IAAIk5E,EAAYj2E,KAAKwuf,OAAOv4a,UAC5BA,EAAUutb,MAAMliB,mBAAoB,EACpC,IAAIh8L,EAAgBrvO,EAAU14E,MAC1BwiiB,EAAc9pd,EAAUh3D,IACvBg3D,EAAU8ge,YACXzxP,EAAgBrvO,EAAUh3D,IAC1B8ghB,EAAc9pd,EAAU14E,OAE5B,IAAI4sjB,EACAC,EACJpqjB,KAAKwuf,OAAOunC,eAGZ,IAAK,IAFD68C,EAAoBttR,EAAc2xM,UAAUK,gBAAgBxlf,MAC5D+gkB,EAAkB9yC,EAAY9oC,UAAUK,gBAAgBxlf,MACnD5V,EAAI,EAAGA,EAAI8D,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQN,IAC1C,GAAI8D,KAAKwuf,OAAOzmQ,MAAM7rP,GAAG0pgB,YAAY,GAAG9zf,QAAU8gkB,EAAmB,CACjEzoB,EAAiBjujB,EACjB,MAGR,IAASA,EAAIiujB,EAAgBjujB,EAAI8D,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQN,IAAK,CAC5D,IAAI4ggB,EAAa98f,KAAKwuf,OAAOzmQ,MAAM7rP,GAAG0pgB,YAAY,GAElD,GADAwkD,EAAelujB,EACV4ggB,EAAWhrf,QAAU8gkB,KAGhB91E,EAAWhrf,OAAS8gkB,GAAsB91E,EAAWhrf,OAAS+gkB,GAAnE,CAIDzoB,EAAelujB,EAAI,EACnB,OAOH,IAFDk+C,GAAS,EACTtoC,EAAQ,EACZ,IAAS5V,EAAIiujB,EAAgBjujB,GAAKkujB,EAAclujB,IACxC4V,IAAU9R,KAAKwuf,OAAOzmQ,MAAM7rP,GAAG0pgB,YAAY,GAAG9zf,OAAUsoC,IACxDA,GAAS,GAEbp6C,KAAK8ykB,6BAA6B9ykB,KAAKwuf,OAAOzmQ,MAAM7rP,GAAG0pgB,YAAY,GAAG7O,cAAe77b,EAAUn+D,EAAOq9C,GACtGtoC,EAAQ9R,KAAKwuf,OAAOzmQ,MAAM7rP,GAAG0pgB,YAAY,GAAG9zf,MAC5CsoC,GAAS,EAEbp6C,KAAKgpiB,sBACLhpiB,KAAKuxf,qBAST4D,EAAO/5f,UAAUsviB,mBAAqB,SAAUxve,EAAUn+D,GACtD,IAAIi2D,EAAShzD,KAAK+ykB,qBAAqB73gB,GACvCl7D,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtC,IAAIrra,EAAYj2E,KAAKwuf,OAAOv4a,UACxB7Q,EAAQ6Q,EAAU14E,MAAM05f,UAAUuR,eAAeJ,WACrDhjc,EAAQA,EAAM2hc,cAAc/mgB,KAAKwuf,QAC7Bv4a,EAAU2hK,SACV53O,KAAK4sc,YAAY55Y,GACjBhzD,KAAKgzkB,wBAAwB/8f,EAAW/a,EAAUn+D,EAAOqoE,IAGzDplE,KAAKizkB,2BAA2BjzkB,KAAKi2E,UAAWjjB,EAAQj2D,GAE5DqoE,EAAMmlc,gBACNvqgB,KAAKi2E,UAAUutb,MAAMjiB,iBAAkB,EACvCvhf,KAAKwuf,OAAOlhc,OAAOg/d,cAAclnd,GACjCplE,KAAKu6jB,SAAStkf,GAAW,IAE7Bk/a,EAAO/5f,UAAU23kB,qBAAuB,SAAU73gB,GAC9C,OAAQA,GACJ,IAAK,iBACD,MAAO,iBACX,IAAK,aACD,MAAO,kBACX,IAAK,aACD,MAAO,wBACX,IAAK,cACD,MAAO,yBACX,IAAK,eACD,MAAO,0BACX,IAAK,YACD,MAAO,uBACX,IAAK,iBACD,MAAO,sBACX,IAAK,qBACD,MAAO,0BACX,IAAK,UACD,MAAO,UACX,QACI,MAAO,uBAUnBi6b,EAAO/5f,UAAUgwiB,sBAAwB,SAAUlwe,EAAUn+D,GACzD,IAAIi2D,EAAShzD,KAAKkzkB,aAAah4gB,GAC/Bl7D,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtC,IAAIrra,EAAYj2E,KAAKwuf,OAAOv4a,UAC5B,GAAIA,EAAU2hK,QAAS,CACnB53O,KAAK4sc,YAAY55Y,GACLijB,EAAU14E,MAAM05f,UAAUuR,eAAeH,SAASD,WAC9DpogB,KAAKmzkB,sBAAsBl9f,EAAW/a,EAAUn+D,EAAOk5E,EAAU14E,MAAM05f,UAAUuR,eAAeH,eAGhGrogB,KAAKizkB,2BAA2BjzkB,KAAKi2E,UAAWjjB,EAAQj2D,GAE5DiD,KAAKu6jB,SAAStkf,GAAW,IAE7Bk/a,EAAO/5f,UAAU83kB,aAAe,SAAUh4gB,GACtC,OAAQA,GACJ,IAAK,SACD,MAAO,YACX,IAAK,aACD,MAAO,gBACX,IAAK,WACD,MAAO,YACX,QACI,MAAO,0BASnBi6b,EAAO/5f,UAAUyviB,uBAAyB,SAAU3ve,EAAUn+D,GAC1D,IAAIi2D,EAAShzD,KAAKozkB,mBAAmBl4gB,GACrCl7D,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtC,IAAIrra,EAAYj2E,KAAKwuf,OAAOv4a,UACxB7Q,EAAQ6Q,EAAU14E,MAAM05f,UAAUuR,eAAeJ,WACrDhjc,EAAQA,EAAM2hc,cAAc/mgB,KAAKwuf,QAC7Bv4a,EAAU2hK,SACV53O,KAAK4sc,YAAY55Y,GACjBhzD,KAAKqzkB,uBAAuBp9f,EAAW/a,EAAUn+D,EAAOk5E,EAAU14E,MAAM05f,UAAUuR,eAAeC,YACjGrjc,EAAMmlc,gBACNvqgB,KAAKi2E,UAAUutb,MAAMjiB,iBAAkB,EACvCvhf,KAAKwuf,OAAOlhc,OAAOg/d,cAAclnd,IAGjCplE,KAAKizkB,2BAA2BjzkB,KAAKi2E,UAAWjjB,EAAQj2D,GAE5DiD,KAAKu6jB,SAAStkf,GAAW,IAE7Bk/a,EAAO/5f,UAAUg4kB,mBAAqB,SAAUl4gB,GAC5C,OAAQA,GACJ,IAAK,oBACD,MAAO,+BACX,IAAK,aACD,MAAO,iBACX,IAAK,cACD,MAAO,kBACX,IAAK,eACD,MAAO,mBACX,IAAK,YACD,MAAO,gBACX,IAAK,iBACD,MAAO,qBACX,IAAK,UACD,MAAO,UACX,QACI,MAAO,2BAGnBi6b,EAAO/5f,UAAU03kB,6BAA+B,SAAU/7E,EAAe77b,EAAUn+D,EAAOq9C,GACtEp6C,KAAKwuf,OAAOv4a,UACxB77B,GAAUp6C,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,0BACtEnsiB,EAAQiD,KAAK+3hB,cAAcmR,uBAAuBoqC,gCAAgCv8E,EAAe77b,EAAUn+D,IAE3GU,EAAkBV,KAGlBA,aAAiBi6f,GACbv5f,EAAkBy9D,IAClB67b,EAAc4C,WAAW58f,EAAOiD,KAAK+3hB,eAI5B,eAAb78d,EACA67b,EAAcvmP,WAAazzQ,EAET,cAAbm+D,EACL67b,EAAc35C,UAAYrgd,EAER,eAAbm+D,EACL67b,EAAc76O,WAAan/Q,EAET,gBAAbm+D,EACL67b,EAAc36O,YAAcr/Q,EAEV,cAAbm+D,EACL67b,EAAc56O,UAAYp/Q,EAER,iBAAbm+D,EACL67b,EAAc16O,aAAet/Q,EAEX,uBAAbm+D,EACL67b,EAAc86B,mBAAqB90hB,EAEjB,6BAAbm+D,EACL67b,EAAc+6B,yBAA2B/0hB,EAEvB,mBAAbm+D,EACL67b,EAAc4oC,eAAiB5iiB,EAEb,mBAAbm+D,IACL67b,EAAc8rB,eAAiB9lhB,KAMvCo4f,EAAO/5f,UAAU4tiB,oBAAsB,WACnC,IAAI1jP,EAAgBtlT,KAAKwuf,OAAOv4a,UAAU14E,MACtCwiiB,EAAc//hB,KAAKwuf,OAAOv4a,UAAUh3D,IACpCqmS,EAAciqP,aAAaxP,KAC3Bz6O,EAAgBtlT,KAAKwuf,OAAOv4a,UAAUh3D,IACtC8ghB,EAAc//hB,KAAKwuf,OAAOv4a,UAAU14E,OAExC,IAAIg2kB,EAAYvzkB,KAAK6/jB,iBAAiBv6Q,GAClCkuR,EAAUxzkB,KAAK6/jB,iBAAiBv6Q,GAChCz/R,EAAa7lB,KAAKwngB,qBAAqB+rE,EAAUt8E,UAAWs8E,EAAU5nkB,OAAOuB,YAC7E6Y,EAAW/lB,KAAKwngB,qBAAqBgsE,EAAQv8E,UAAWu8E,EAAQ7nkB,OAAOuB,YAC3ElN,KAAKwuf,OAAO00B,cAAcz2d,QAE1B,IAAIuqN,EAAWh3Q,KAAKyzkB,iBACpBzzkB,KAAKwuf,OAAOunC,eACZ/1hB,KAAKwuf,OAAOlhc,OAAOktd,YAAYxjQ,GAC/Bh3Q,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtCthf,KAAK+uiB,2BAA2BzpP,EAAez/R,GAC/C7lB,KAAK+uiB,2BAA2BhP,EAAah6gB,GAC7C/lB,KAAKwuf,OAAOv4a,UAAUqqe,eAAeh7P,EAAey6O,GACpD//hB,KAAKu6jB,SAASv6jB,KAAKwuf,OAAOv4a,YAE9Bk/a,EAAO/5f,UAAUq4kB,eAAiB,WAC9B,IAAIz8T,KACA08T,EAAc1zkB,KAAKwuf,OAAOzmQ,MAAM,GAAG69Q,YAAY,GACnD,GACI8tE,EAAc1zkB,KAAK2zkB,oBAAoBD,EAAa18T,SAC/C08T,GACT,OAAO18T,GAEXm+O,EAAO/5f,UAAUu4kB,oBAAsB,SAAU72E,EAAY9lP,GACzD,IAAIy4Q,EAAqB3yB,EACrB/he,EAAO,IAAI+7d,GACf/7d,EAAKg8d,cAAgB+F,EAAW/F,cAChCh8d,EAAKjpB,MAAQ29gB,EAAmB39gB,MAChC,EAAG,CACC29gB,EAAqB3yB,EACjBA,EAAWpjX,WACXojX,EAAWpjX,UAAUqtX,cAAc/mgB,KAAKwuf,QAE5CsO,EAAaA,EAAW0J,mBACxB,IAAK,IAAI9if,EAAI,EAAGA,EAAI+rgB,EAAmBp4B,aAAa76f,OAAQknB,IAAK,CAC7D,IAAIwkf,EAAQunB,EAAmBp4B,aAAa3ze,GACxCwkf,aAAiBjB,GACjBjngB,KAAKwuf,OAAOlhc,OAAOuud,iBAAiB3T,GAAO,GAAM,IAGjDA,EAAMn7f,EAAI,EACVm7f,EAAMl7f,EAAI,EACVk7f,EAAMlyf,MAAQ,EACdkyf,EAAMnyf,OAAS,GAEnBglB,EAAKs8d,aAAa7yf,KAAK0jgB,GACvBunB,EAAmBp4B,aAAa1ue,OAAOjF,EAAG,GAC1CA,IACAwkf,EAAM5Q,gBAAkBv8d,EAE5B00f,EAAmBliX,KAAKl7J,gBAEnByqf,GAAc2yB,EAAmBr8e,OAAO0pd,IAEjD,OADA9lP,EAASxyQ,KAAKu2B,GACP+he,GAEX3H,EAAO/5f,UAAU63kB,2BAA6B,SAAUh9f,EAAWjjB,EAAQj2D,GACvE,OAAQi2D,GACJ,IAAK,iBACDhzD,KAAK+3hB,cAAci1C,kBAAkB,kBACrChtkB,KAAK4zkB,kBAAkB39f,EAAW,iBAAkBl5E,GACpD,MACJ,IAAK,kBACDiD,KAAK+3hB,cAAci1C,kBAAkB,mBACrChtkB,KAAK4zkB,kBAAkB39f,EAAW,aAAcl5E,GAChD,MACJ,IAAK,qBACDiD,KAAK+3hB,cAAci1C,kBAAkB,sBACrChtkB,KAAK4zkB,kBAAkB39f,EAAW,cAAel5E,GACjD,MACJ,IAAK,wBACDiD,KAAK+3hB,cAAci1C,kBAAkB,yBACrChtkB,KAAK4zkB,kBAAkB39f,EAAW,aAAcl5E,GAChD,MACJ,IAAK,yBACDiD,KAAK+3hB,cAAci1C,kBAAkB,0BACrChtkB,KAAK4zkB,kBAAkB39f,EAAW,cAAel5E,GACjD,MACJ,IAAK,uBACDiD,KAAK+3hB,cAAci1C,kBAAkB,wBACrChtkB,KAAK4zkB,kBAAkB39f,EAAW,YAAal5E,GAC/C,MACJ,IAAK,sBACDiD,KAAK+3hB,cAAci1C,kBAAkB,uBACrChtkB,KAAK4zkB,kBAAkB39f,EAAW,iBAAkBl5E,GACpD,MACJ,IAAK,0BACDiD,KAAK+3hB,cAAci1C,kBAAkB,2BACrChtkB,KAAK4zkB,kBAAkB39f,EAAW,qBAAsBl5E,GACxD,MACJ,IAAK,0BACDiD,KAAK+3hB,cAAci1C,kBAAkB,2BACrChtkB,KAAK4zkB,kBAAkB39f,EAAW,eAAgBl5E,GAClD,MACJ,IAAK,+BACDiD,KAAK+3hB,cAAci1C,kBAAkB,gCACrChtkB,KAAK6zkB,iBAAiB59f,EAAW,oBAAqBl5E,GACtD,MACJ,IAAK,iBACDiD,KAAK+3hB,cAAci1C,kBAAkB,kBACrChtkB,KAAK6zkB,iBAAiB59f,EAAW,aAAcl5E,GAC/C,MACJ,IAAK,kBACDiD,KAAK+3hB,cAAci1C,kBAAkB,mBACrChtkB,KAAK6zkB,iBAAiB59f,EAAW,cAAel5E,GAChD,MACJ,IAAK,gBACDiD,KAAK+3hB,cAAci1C,kBAAkB,iBACrChtkB,KAAK6zkB,iBAAiB59f,EAAW,YAAal5E,GAC9C,MACJ,IAAK,mBACDiD,KAAK+3hB,cAAci1C,kBAAkB,oBACrChtkB,KAAK6zkB,iBAAiB59f,EAAW,eAAgBl5E,GACjD,MACJ,IAAK,qBACDiD,KAAK+3hB,cAAci1C,kBAAkB,sBACrChtkB,KAAK6zkB,iBAAiB59f,EAAW,iBAAkBl5E,GACnD,MACJ,IAAK,yBACDiD,KAAK+3hB,cAAci1C,kBAAkB,0BACrChtkB,KAAK6zkB,iBAAiB59f,EAAW,qBAAsBl5E,GACvD,MACJ,IAAK,UACDiD,KAAK+3hB,cAAci1C,kBAAkB,WACrChtkB,KAAK6zkB,iBAAiB59f,EAAW,UAAWl5E,GAC5C,MACJ,IAAK,YACDiD,KAAK+3hB,cAAci1C,kBAAkB,aACrChtkB,KAAK8zkB,gBAAgB79f,EAAW,SAAUl5E,GAC1C,MACJ,IAAK,gBACDiD,KAAK+3hB,cAAci1C,kBAAkB,iBACrChtkB,KAAK8zkB,gBAAgB79f,EAAW,aAAcl5E,GAC9C,MACJ,IAAK,YACDiD,KAAK+3hB,cAAci1C,kBAAkB,aACrChtkB,KAAK8zkB,gBAAgB79f,EAAW,WAAYl5E,GAC5C,MACJ,IAAK,wBACDiD,KAAK+3hB,cAAci1C,kBAAkB,yBACrChtkB,KAAK8zkB,gBAAgB79f,EAAW,wBAAyBl5E,KAarEo4f,EAAO/5f,UAAUw4kB,kBAAoB,SAAU39f,EAAW/a,EAAUn+D,GAChE,IAAIg3kB,EAAqB99f,EAAU14E,MACZ04E,EAAUh3D,IAC5Bg3D,EAAU8ge,YACXg9B,EAAqB99f,EAAUh3D,IACZg3D,EAAU14E,OAEjCyC,KAAKsskB,oBAAoBr2f,EAAW89f,GAEpC/zkB,KAAKgzkB,wBAAwB/8f,EAAW/a,EAAUn+D,EAAOg3kB,EAAmB98E,UAAUuR,eAAeJ,aAUzGjT,EAAO/5f,UAAUy4kB,iBAAmB,SAAU59f,EAAW/a,EAAUn+D,GAC/Dk5E,EAAUutb,MAAMliB,mBAAoB,EACpC,IAAI0yF,EAAmB/9f,EAAU14E,MACZ04E,EAAUh3D,IAC1Bg3D,EAAU8ge,YACXi9B,EAAmB/9f,EAAUh3D,IACZg3D,EAAU14E,OAE/ByC,KAAKsskB,oBAAoBr2f,EAAW+9f,GACpCh0kB,KAAKi0kB,oBAAoBh+f,EAAW/a,EAAUn+D,IAUlDo4f,EAAO/5f,UAAU04kB,gBAAkB,SAAU79f,EAAW/a,EAAUn+D,GAC9D,IAAIm3kB,EAAmBj+f,EAAU14E,MAC7B42kB,EAAiBl+f,EAAUh3D,IAC1Bg3D,EAAU8ge,YACXm9B,EAAmBj+f,EAAUh3D,IAC7Bk1jB,EAAiBl+f,EAAU14E,OAE/ByC,KAAKsskB,oBAAoBr2f,EAAWi+f,GAEpCl0kB,KAAKo0kB,eAAeF,EAAiBj9E,UAAUuR,eAAeH,SAAU6rE,EAAkBC,EAAgBj5gB,EAAUn+D,IAExHo4f,EAAO/5f,UAAUkxkB,oBAAsB,SAAUr2f,EAAW/hE,GACpDlU,KAAKwuf,OAAOgV,MAAMzU,sBAAwBtxf,EAAkBuC,KAAK+3hB,cAAcmR,0BAC1EzriB,EAAkByW,GAKdzW,EAAkBuC,KAAK+3hB,cAAcmR,uBAAuBy2B,kBACjE3/jB,KAAK+3hB,cAAcmR,uBAAuBy2B,eAAiB1pf,EAAU14E,MAAM+wiB,gCALvE7wiB,EAAkBuC,KAAK+3hB,cAAcmR,uBAAuBy2B,kBAC5D3/jB,KAAK+3hB,cAAcmR,uBAAuBy2B,eAAiBzrjB,EAASo6hB,kCAQpFn5C,EAAO/5f,UAAUmxkB,0BAA4B,SAAUt1E,EAAWhhb,EAAW14E,EAAO0hB,GAEhF,GADAg3D,EAAUutb,MAAMjiB,iBAAkB,EAC9Bhkf,EAAM05f,UAAUsR,cAAe,CAE/B,IADA,IAAInjc,EAAQ7nE,EAAM05f,UAAUuR,eAAeJ,WACpChjc,EAAMmjc,eACTnjc,EAAQA,EAAMojc,eAAeJ,WAEjCpogB,KAAKq0kB,yBAAyBjvgB,EAAO6Q,EAAW14E,EAAO0hB,QAGvDjf,KAAKs0kB,kBAAkBr9E,EAAWhhb,EAAW14E,EAAO0hB,IAG5Dk2e,EAAO/5f,UAAUi5kB,yBAA2B,SAAUjvgB,EAAO6Q,EAAW14E,EAAO0hB,GAC3E,IAAIs1jB,GAAU,EAGd,GAFAv0kB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2Bjnd,EAAMtzD,MAAOszD,EAAMkyb,gBAAiBlyb,GAAO,IAEpF3nE,EAAkBwhB,EAAIg4e,UAAUuR,iBAAmBpjc,EAAMjhE,SAAS8a,EAAIg4e,UAAUuR,gBACjF,OAAO,EAEX,IAAIN,EAAQjyb,EAAU45d,qBAAqBzqe,GAK3C,OAHK3nE,EAAkByqgB,KACnBqsE,EAAUv0kB,KAAKw0kB,yBAAyBtsE,EAAOjyb,EAAW14E,EAAO0hB,IAE9Ds1jB,GAEXp/E,EAAO/5f,UAAUk5kB,kBAAoB,SAAUr9E,EAAWhhb,EAAW14E,EAAO0hB,GACxE,GAAI1hB,EAAM05f,YAAcA,EAAW,CACb15f,EAAMoO,OACTsqE,EAAUy4d,mBAAmBz3C,GAD5C,IAEI+R,EAAgB,EAChBl3f,EAAQ,EACR8+hB,EAAY35C,EAAU8R,UAAUxrgB,EAAMoO,OAAQq9f,GAC9CxqW,EAASoyY,EAAU5viB,QACvBgogB,EAAgB4nC,EAAU9+hB,MACrBrU,EAAkB+gK,KACfwqW,IAAkBxqW,EAAOhiK,QAAWiB,EAAkB+gK,EAAOixO,YAC7DjxO,EAASA,EAAOixO,UAEpB39X,EAAQ0sJ,EAAOv0G,KAAK7vC,SAAS7b,QAAQigK,IAEzC,IAAIirI,EAAY,EACZlsS,EAAMmuhB,cAAcz0B,YAAcA,IAClCxtN,EAAYwtN,EAAUI,aAAa94f,QAAQhB,EAAMmuhB,eACjD55gB,EAAQvU,EAAMmuhB,cAActxgB,SAAS7b,QAAQigK,IAG7CA,aAAkBoqW,KAAmBpqW,EAAOv0G,MAAQn4C,EAAQ,EAC5D9R,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAWxtN,EAAW33R,EAAQ,GAGnE9R,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAWxtN,EAAW33R,QAI/D9R,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAW,EAAG,GAGvD,GAAIh4e,EAAIg4e,YAAcA,EAClB,OAAO,EAGX,IAAIiR,EAAQjyb,EAAU45d,qBAAqB54C,GAC3C,OAAKx5f,EAAkByqgB,IACZlogB,KAAKw0kB,yBAAyBtsE,EAAOjyb,EAAW14E,EAAO0hB,IAKtEk2e,EAAO/5f,UAAUo5kB,yBAA2B,SAAUtsE,EAAOjyb,EAAW14E,EAAO0hB,GAC3E,OAAIipf,aAAiBhR,GACVl3f,KAAKs0kB,kBAAkBpsE,EAAOjyb,EAAW14E,EAAO0hB,QAGvD,GAORk2e,EAAO/5f,UAAUs0kB,gBAAkB,SAAUxnE,EAAO+kB,GAChD,IAAIjiP,OAAU9vS,EACd,GAAIgtgB,EAAM5Q,2BAA2BgQ,GAAgB,EACjDt8N,EAAUk9N,EAAM5Q,iBACID,aAAa94f,QAAQ2pgB,IACpCzqgB,EAAkBuC,KAAKwuf,OAAOgV,QAC5BxjgB,KAAKwuf,OAAOgV,MAAMjiB,iBAErBvhf,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BnkB,EAAMp2f,MAAOk5R,EAASk9N,GAAO,QAG9E,GAAIA,EAAM5Q,2BAA2B2O,GAAiB,CACvD,IAAIl+b,EAAOmgc,EAAM5Q,gBACjBvvb,EAAO/nE,KAAKwuf,OAAOv4a,UAAU6ge,iBAAiB/ue,IACzCtqE,EAAkBuC,KAAKwuf,OAAOgV,QAC5BxjgB,KAAKwuf,OAAOgV,MAAMjiB,iBACrBvhf,KAAKwuf,OAAOlhc,OAAOg/d,cAAcpkB,KAO7C/S,EAAO/5f,UAAU2kkB,uBAAyB,SAAU9pf,GAChD,OAAOj2E,KAAK4lkB,8BAA8B3vf,EAAWA,EAAU14E,MAAO04E,EAAUh3D,MAEpFk2e,EAAO/5f,UAAUwqkB,8BAAgC,SAAU3vf,EAAWqvO,EAAey6O,GACjF,IAAI6gB,EAAWt7P,EACXu7P,EAAS9gB,EAMb,GALKz6O,EAAcgqP,cAAcvP,KAC7B6gB,EAAW7gB,EACX8gB,EAASv7P,GAGTs7P,EAAS3pD,YAAc4pD,EAAO5pD,WAAa2pD,EAAS3pD,UAAUI,aAAa94f,QAAQqijB,EAASl1B,iBAAmBk1B,EAAS3pD,UAAUI,aAAa76f,OAAS,GACxJokjB,EAASj1iB,SAAWsqE,EAAUy4d,mBAAmBkS,EAAS3pD,YAAc2pD,EAASj1iB,OAAS,IAAMk1iB,EAAOl1iB,OAGvG,OAFAsqE,EAAUutb,MAAMliB,mBAAoB,EACpCrra,EAAU0ne,cAAciD,GAAU,IAC3B,EAEX,IAAIwO,EAAgBpvjB,KAAK6/jB,iBAAiBjf,GAC1C3qe,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqB4nD,EAAcn4D,UAAWm4D,EAAczjjB,OAAOuB,YACjG,IAAI0yjB,EAAY5/jB,KAAKy0kB,sBAAsB5zB,EAAO5pD,UAAWhhb,EAAW2qe,EAAUC,GAC9E34J,EAAe,IAAIgmJ,GAAaj4d,EAAUutb,OAG9C,OAFAxjgB,KAAK+uiB,2BAA2B7mJ,EAAcjyU,EAAU6pf,cACxD7pf,EAAU0ne,cAAcz1J,GAAc,GAC/B03K,GAEXzqE,EAAO/5f,UAAUq5kB,sBAAwB,SAAUx9E,EAAWhhb,EAAW14E,EAAO0hB,GAE5E,QAAIA,EAAIg4e,UAAUsR,eACXtpf,EAAIg4e,YAAchhb,EAAUise,2BAA2BjjiB,EAAIg4e,UAAUuR,eAAeJ,eAClF7qgB,EAAM05f,UAAUsR,eAAiBhrgB,EAAM05f,UAAUuR,eAAeJ,aAAenpf,EAAIg4e,UAAUuR,eAAeJ,eAGrHnyb,EAAUutb,MAAMliB,mBAAoB,EACpCthf,KAAKsmkB,sBAAsBrvE,EAAWhhb,EAAW14E,EAAO0hB,EAAK,IACtD,IAGXk2e,EAAO/5f,UAAUkrkB,sBAAwB,SAAUrvE,EAAWhhb,EAAW14E,EAAO0hB,EAAKy1jB,GACjF,IAAI1rE,EAAgB,EAChB4nC,EAAYrziB,EAAMmuhB,cAAc3iB,UAAUxrgB,EAAMoO,OAAQq9f,GAC/C4nC,EAAU5viB,QACvBgogB,EAAgB4nC,EAAU9+hB,MAkB1Bk3f,EAAgB,GAChB4nC,EAAY3xhB,EAAIysgB,cAAc3iB,UAAU9pf,EAAItT,OAAQq9f,IACjChogB,QACnBgogB,EAAgB4nC,EAAU9+hB,MAmBtBmN,EAAIg4e,YAAcA,GAKlBh4e,EAAIg4e,UAAUsR,eAAmBhrgB,EAAM05f,UAAUsR,eAC9ChrgB,EAAM05f,UAAUuR,iBAAmBvpf,EAAIg4e,UAAUuR,iBACjDvyb,EAAU8ic,eAAe95f,EAAIg4e,UAAUuR,eAAgBjrgB,EAAO0hB,GAKjEjf,KAAK20kB,WAAW19E,EAAW15f,EAAO0hB,EAAKy1jB,IAJvCz1jB,EAAIg4e,UAAUuR,eAAeJ,WAAWrB,cAAc/mgB,KAAKwuf,QAC3Dxuf,KAAK40kB,gBAAgB31jB,EAAIg4e,UAAUuR,eAAgBvyb,EAAW14E,EAAO0hB,EAAKy1jB,IAR1E10kB,KAAKsmkB,sBAAsBrnjB,EAAIg4e,UAAWhhb,EAAW14E,EAAO0hB,EAAKy1jB,IAiBzEv/E,EAAO/5f,UAAUw8gB,WAAa,YACtB53gB,KAAKwjgB,MAAMtR,gBAAmBlyf,KAAKwjgB,MAAM3U,mBAGxCpxf,EAAkBuC,KAAKwuf,SAAYxuf,KAAKi2E,UAAU2hK,SACnD53O,KAAK0okB,8BAMbvzE,EAAO/5f,UAAU28gB,YAAc,WAC3B,IAAI/3gB,KAAKwjgB,MAAMtR,eAAf,CAGA,IAAI0uD,EAAW5gjB,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAU14E,MAAQyC,KAAKi2E,UAAUh3D,IAChF,GAAI2hiB,EAAS3pD,UAAUsR,cAAe,CAClC,IAAInjc,EAAQplE,KAAKyokB,cAAczokB,KAAKi2E,UAAU8ge,WAAWhwC,cAAc/mgB,KAAKwuf,QAC5Exuf,KAAKi2E,UAAUutb,MAAMliB,mBAAoB,EACrCthf,KAAKukkB,sBACLvkkB,KAAK4sc,YAAY,eAEjB5sc,KAAKykkB,sBAAsB7jB,GAAU,IAEzC,IAAI3pD,EAAYj3f,KAAK60kB,yBAAyBzvgB,GAC1CplE,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,wBACzClpiB,KAAK+3hB,cAAcmR,uBAAuB47B,aAAatgkB,KAAK4gE,EAAM/lE,SAEtEW,KAAKkmkB,YAAY9ggB,GACjBplE,KAAKi2E,UAAUgqe,gBAAgBhpD,GAAW,IACtCj3f,KAAKukkB,qBAAuB9mkB,EAAkBuC,KAAK+3hB,iBACnD/3hB,KAAKu6jB,SAASv6jB,KAAKi2E,cAO/Bk/a,EAAO/5f,UAAU68gB,aAAe,WAC5B,IAAIj4gB,KAAKwjgB,MAAMtR,eAAf,CAGA,IAAI0uD,EAAW5gjB,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAU14E,MAAQyC,KAAKi2E,UAAUh3D,IACnEjf,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAUh3D,IAAMjf,KAAKi2E,UAAU14E,MAC5E,GAAIqjjB,EAAS3pD,UAAUsR,cAAe,CAClCvogB,KAAKi2E,UAAUutb,MAAMliB,mBAAoB,EACrCthf,KAAKukkB,qBACLvkkB,KAAK4sc,YAAY,gBAErB,IAAI4/D,EAAYxsgB,KAAKonkB,aAAapnkB,KAAKi2E,UAAU8ge,WAC7CtqC,EAAUzsgB,KAAKonkB,cAAcpnkB,KAAKi2E,UAAU8ge,WAC5C3xe,EAAQonc,EAAUpE,WAAWrB,cAAc/mgB,KAAKwuf,QAChDxuf,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,wBACzClpiB,KAAKqnkB,wBAAwBjigB,GAEjC,IAAI6xb,OAAY/7f,EAChB,GAAIuxgB,EAAQ8D,WAAY,CACpB,IAAItC,EAAWxB,EAAQ8D,WACvBtZ,EAAYj3f,KAAKi2E,UAAUs/d,kBAAkBtnC,QAE5C,GAAIzB,EAAUqB,eAAgB,CAC/B,IAAIG,EAAexB,EAAUqB,eAC7B5W,EAAYj3f,KAAKi2E,UAAUs/d,kBAAkBvnC,GAE7CvwgB,EAAkBw5f,KAClBA,EAAYj3f,KAAK60kB,yBAAyBzvgB,IAI9C,IAAK,IADD0vgB,EAAc1vgB,EAAMmnc,2BAA2BC,EAAWC,GACrDvwgB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GAC7B,GAAgC,IAA5BwpE,EAAI2xb,aAAa76f,OACbs4kB,EAAYv2kB,QAAQmnE,EAAI2xb,aAAa,KAAO,IAC5Cjyb,EAAMiyb,aAAa1ue,OAAOy8C,EAAMiyb,aAAa94f,QAAQmnE,GAAM,GAC3DA,EAAIrzD,UACJnW,SAGH,CACD,IAAK,IAAIwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAImmf,EAAYnkc,EAAI2xb,aAAa3ze,GAC7BoxjB,EAAYv2kB,QAAQsrgB,IAAc,IAClCnkc,EAAI2xb,aAAa1ue,OAAOjF,EAAG,GAC3Bmmf,EAAUx3f,UACVqR,KAGwB,IAA5BgiD,EAAI2xb,aAAa76f,SACjB4oE,EAAMiyb,aAAa1ue,OAAOy8C,EAAMiyb,aAAa94f,QAAQmnE,GAAM,GAC3DA,EAAIrzD,UACJnW,MAIsB,IAA9BkpE,EAAMiyb,aAAa76f,QAEnBy6f,EAAYj3f,KAAK60kB,yBAAyBzvgB,GAC1CplE,KAAKkmkB,YAAY9ggB,GACbplE,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,yBACzClpiB,KAAK+3hB,cAAcmR,uBAAuBl2e,OAAS,eAEvDoS,EAAM/yD,YAGN+yD,EAAM8lc,eAAgB,EACtB9lc,EAAM6lc,oBACN7lc,EAAM8lc,eAAgB,EACtBlrgB,KAAKwuf,OAAOlhc,OAAOg/d,cAAclnd,IAErCplE,KAAKi2E,UAAUgqe,gBAAgBhpD,GAAW,IACtCx5f,EAAkBuC,KAAK+3hB,gBAAkB/3hB,KAAKukkB,sBAC9CvkkB,KAAKu6jB,SAASv6jB,KAAKi2E,WAAW,MAO1Ck/a,EAAO/5f,UAAU48gB,UAAY,WACzB,IAAIh4gB,KAAKwjgB,MAAMtR,eAAf,CAGA,IAAI0uD,EAAY5gjB,KAAKi2E,UAAU8ge,UAAiC/2iB,KAAKi2E,UAAU14E,MAApCyC,KAAKi2E,UAAUh3D,IAC5Cjf,KAAKi2E,UAAU8ge,UAAmC/2iB,KAAKi2E,UAAUh3D,IAAtCjf,KAAKi2E,UAAU14E,MACxD,GAAIqjjB,EAAS3pD,UAAUsR,cAAe,CAClC,IAAIiE,EAAYxsgB,KAAKonkB,aAAapnkB,KAAKi2E,UAAU8ge,WAC7CtqC,EAAUzsgB,KAAKonkB,cAAcpnkB,KAAKi2E,UAAU8ge,WAC5C/2iB,KAAKukkB,qBACLvkkB,KAAK4sc,YAAY,aAErB5sc,KAAKi2E,UAAUutb,MAAMliB,mBAAoB,EACzC,IAAIl8a,EAAQonc,EAAUpE,WAAWrB,cAAc/mgB,KAAKwuf,QAChD9ob,EAAM1lE,KAAKuokB,aAAY,GACvBvokB,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,wBACzClpiB,KAAKqnkB,wBAAwBjigB,GAEjC,IAAI6xb,OAAY/7f,EAChB,GAAIwqE,EAAI6qc,WAAY,CAChB,IAAItC,EAAWvoc,EAAI6qc,WAAWlZ,aAAa,GAC3CJ,EAAYj3f,KAAKi2E,UAAUs/d,kBAAkBtnC,GAKjD,GAHIxwgB,EAAkBw5f,KAClBA,EAAYj3f,KAAK60kB,yBAAyBzvgB,IAEzCplE,KAAKi2E,UAAU2hK,QA4ChB53O,KAAK+0kB,UAAUrvgB,OA5CU,CAEzB,IAAI8we,EAAgBx2iB,KAAKi2E,UAAUo7d,mBAAmB7kC,EAAWC,GACjE,GAAI+pC,EAAcpuC,WAAWjkgB,SAASsogB,GAGlC,GAFAD,EAAYxsgB,KAAKi2E,UAAUwge,gBAAgBjqC,EAAWgqC,GACtD/pC,EAAUzsgB,KAAKi2E,UAAUwge,gBAAgBhqC,EAAS+pC,GAC9Cx2iB,KAAKi2E,UAAU0ge,aAAaH,EAAe/pC,GAC3C/mc,EAAM8mc,EAAUnE,SAChBrogB,KAAK+0kB,UAAUrvgB,OAEd,CACDA,EAAM8mc,EAAUnE,SAChB,IAAImgE,EAAS/7D,EAAQpE,SAGrB,GADApR,OAAY/7f,EACRstkB,EAAOj4D,WAAY,CACftC,EAAWu6D,EAAOj4D,WAAWlZ,aAAa,GAC9CJ,EAAYj3f,KAAKi2E,UAAUs/d,kBAAkBtnC,GAE7CxwgB,EAAkBw5f,KAClBA,EAAYj3f,KAAK60kB,yBAAyBzvgB,IAE9C,IAAK,IAAIlpE,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAI0oiB,EAAWx/d,EAAMiyb,aAAan7f,GAC9B0oiB,EAAS31T,UAAYvpK,EAAIupK,UAAY21T,EAAS31T,UAAYu5V,EAAOv5V,WACjE7pK,EAAMiyb,aAAa1ue,OAAOzsB,EAAG,GAC7B0oiB,EAASvyhB,UACTnW,KAG0B,IAA9BkpE,EAAMiyb,aAAa76f,QACnBwD,KAAKkmkB,YAAY9ggB,GACbplE,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,yBACzClpiB,KAAK+3hB,cAAcmR,uBAAuBl2e,OAAS,eAEvDoS,EAAM/yD,WAGNrS,KAAKg1kB,YAAY5vgB,IAQjCplE,KAAKi2E,UAAUgqe,gBAAgBhpD,GAAW,IACtCx5f,EAAkBuC,KAAK+3hB,gBAAkB/3hB,KAAKukkB,sBAC9CvkkB,KAAKu6jB,SAASv6jB,KAAKi2E,WAAW,MAI1Ck/a,EAAO/5f,UAAU25kB,UAAY,SAAUrvgB,GACnC,IAAIN,EAAQM,EAAI0ic,WACkB,IAA9Bhjc,EAAMiyb,aAAa76f,QACnBwD,KAAKkmkB,YAAY9ggB,GACbplE,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,yBACzClpiB,KAAK+3hB,cAAcmR,uBAAuBl2e,OAAS,UAEvDoS,EAAM/yD,YAGN+yD,EAAMiyb,aAAa1ue,OAAOy8C,EAAMiyb,aAAa94f,QAAQmnE,GAAM,GAC3DA,EAAIrzD,UACJrS,KAAKg1kB,YAAY5vgB,KAGzB+vb,EAAO/5f,UAAU45kB,YAAc,SAAU5vgB,GACrCA,EAAM2nc,eAAe,GACrB3nc,EAAM8lc,eAAgB,EACtB9lc,EAAM6lc,oBACN7lc,EAAM8lc,eAAgB,EACtBlrgB,KAAKwuf,OAAOlhc,OAAOg/d,cAAclnd,IAErC+vb,EAAO/5f,UAAUy5kB,yBAA2B,SAAUzvgB,GAClD,IAAI6xb,OAAY/7f,EACZq1gB,EAAanrc,EAAMmrc,WAAanrc,EAAMmrc,WAAanrc,EAAMohc,mBACzDqH,EAAiBzoc,EAAMyoc,eAAiBzoc,EAAMyoc,eAAiBzoc,EAAMihc,uBASzE,OARIkK,EACAtZ,EAAYsZ,aAAsBrZ,GAAkBqZ,EAC9CvwgB,KAAKi2E,UAAU41c,6BAA6Btb,GAE7C1C,IACL5W,EAAY4W,aAA0B3W,GAAkB2W,EAClD7tgB,KAAKi2E,UAAUise,2BAA2Br0C,IAE7C5W,GAEX9B,EAAO/5f,UAAUu5kB,WAAa,SAAU19E,EAAW15f,EAAO0hB,EAAKy1jB,GAC3Dz9E,EAAYA,EAAU8P,cAAc/mgB,KAAKwuf,QACzC,IAAIv4a,EAAYj2E,KAAKwuf,OAAOv4a,UACxBg/f,EAAiBh/f,EAAUm4d,eAAen3C,GAC1Ci+E,EAA0Bj/f,EAAUm4d,eAAenvhB,EAAIg4e,WACvD4T,EAAcoqE,EACdlgE,EAAY,EACZogE,GAAyB,EACzBC,EAAiBp1kB,KAAKi2E,UAAUo4d,cAAcp3C,EAAUv9W,WACxD0zY,EAAmBn2B,EACnBjsN,EAAUisN,EAAU6F,sBAAsBhG,GAAaG,EAAU6F,gBAAa5hgB,EAC9E+rkB,OAAY/rkB,EACZwpjB,OAAgBxpjB,EAChB+7f,IAAc15f,EAAM05f,WACpB4T,EAActtgB,EAAMoO,OACpBs7jB,EAAY1pkB,EAAMmuhB,cACdzsgB,EAAIg4e,UAAUsR,gBACd4sE,EAAyBn1kB,KAAKq1kB,qBAAqBp+E,EAAWh4e,EAAIg4e,aAItEgwE,EAAYhwE,EAAUj6e,WAEtBi6e,IAAc15f,EAAM05f,WAAahhb,EAAU8he,kBAC3C9he,EAAU8he,iBAAkB,GAE5B9gD,IAAch4e,EAAIg4e,WAClBytD,EAAgBzliB,EAAIysgB,cACpB3W,EAAY91f,EAAItT,SAGhB+4iB,EAAgBztD,EAAUv9W,UAC1Bq7X,EAAY/0gB,KAAKwuf,OAAOv4a,UAAUo4d,cAAcp3C,EAAUv9W,YAE9D,IAAIwuX,EAAQjR,EAAUoP,uBAStB,IARIwE,EAAcoqE,GAAkB13kB,EAAMmuhB,gBAAkBz0B,EAAUv9W,WAClEmxX,IAAgBuqE,IAAmBn+E,IAAch4e,EAAIg4e,WAAah4e,EAAItT,SAAWk/f,EAAc,GAC/F5T,EAAUuP,qBAAuBvnf,EAAIg4e,WAAah4e,EAAItT,SAAWupkB,IAChEl1kB,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcq7B,oBACrB,cAAjDpzjB,KAAK+3hB,cAAcq7B,mBAAmBpggB,QAA0Bk1c,GAASA,EAAMC,gBAC3D,IAAhB0C,IAAsBttgB,EAAMmuhB,cAAc7Z,aAAehH,EAAc,MAC/EsqE,GAAyB,GAEzBl2jB,EAAIg4e,YAAcA,GAAah4e,EAAIysgB,gBAAkBz0B,EAAUv9W,WAC9Dz6H,EAAIysgB,gBAAkBz0B,EAAUv9W,WAAaz6H,EAAItT,QAAUsqE,EAAUo4d,cAAcp3C,EAAUv9W,WAAa,CAC3G,IAAI47b,EAAmB/3kB,EAAM05f,YAAcA,EAM3C,IALIh4e,EAAIysgB,cAAc7Z,eAAiB5yf,EAAItT,OAASspkB,IAAmBh2jB,EAAIysgB,cAAc7Z,gBAErF7xgB,KAAKu1kB,cAAct+E,EAAWgwE,EAAWp8D,EAAa65C,EAAe3vC,EAAW2/D,IAG/Ej3kB,EAAkByqgB,KAAWotE,EAAkB,EAC5C5B,EAAcxrE,EAAMpL,sBAAsBhG,GAAaoR,EAAMpL,gBAAa5hgB,KAC1D8vS,EAAQ53P,OAAOsgiB,IAAgB1oS,EAAQl5R,QAAU4hkB,EAAY5hkB,OAC7E9R,KAAKw1kB,cAAcv/f,EAAWy9f,EAAa1oS,EAAS0pS,GAExD10kB,KAAKy1kB,YAAYvtE,EAAOjyb,EAAW14E,EAAO0hB,EAAKy1jB,QAGlD,CAAA,GAAIn3kB,EAAM05f,YAAcA,IAAc15f,EAAMmuhB,gBAAkBz0B,EAAUj6e,YACxEzf,EAAMmuhB,gBAAkBz0B,EAAUj6e,YAAc6tf,EAAcoqE,GAG/D,OAAmB,IAAfP,OACA,GAGAtnD,EAAmBpthB,KAAK2xgB,eAAe1a,EAAWA,EAAUj6e,WAAY,EAAGiqjB,EAAWp8D,GAAa,GACnG7qgB,KAAK01kB,qBAAqBz+E,EAAWm2B,EAAkB7vhB,EAAO0hB,EAAKk2jB,EAAwBT,QAC3F10kB,KAAK21kB,gBAAgB1+E,IAKzB,IAAI0pE,OAAezlkB,EACf6zhB,EAAgB93B,EAAU4W,eAC1B8E,EAAiBoc,aAAyB73B,GAAmB63B,OAAgB7zhB,EAC7Eq1gB,EAAatZ,EAAUuP,mBAC3B,GAAIkuE,EAAa,EAQb,GANA/T,EAAe3gkB,KAAK41kB,oBAAoB3+E,EAAW15f,EAAO0hB,EAAKy1jB,EAAY/hE,GAC3E3ygB,KAAKkmkB,YAAYjvE,GACbj3f,KAAKwuf,OAAOg9B,eAAiBv0B,IAC7Bj3f,KAAKwuf,OAAOg9B,kBAAetwhB,GAE/B8E,KAAK21kB,gBAAgB1+E,GAChBx5f,EAAkBkjkB,IAQlB,GAAI1pE,IAAc15f,EAAM05f,WAAax5f,EAAkB8ygB,KAAgB9ygB,EAAkBk1gB,GAAgB,CACtGhngB,EAAS3L,KAAKi2E,UAAUy4d,mBAAmB/7B,GAE/C18b,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqBmL,EAAehngB,EAAOuB,YACrElN,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,0BAC5DlpiB,KAAKykkB,sBAAsBxuf,EAAU6pf,cAAc,GACnD9/jB,KAAK+3hB,cAAcmR,uBAAuBnJ,YAAc9pd,EAAU6pf,mBAdpC,CAClC7pf,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqBm5D,EAAc,KACjE,IAAIh1jB,EAASsqE,EAAUy4d,mBAAmBiyB,GAAgB,EACtD3gkB,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,0BAE5DlpiB,KAAK+3hB,cAAcmR,uBAAuBnJ,YAAc//hB,KAAKwngB,qBAAqBm5D,EAAch1jB,EAAOuB,aAuBnH,GAAI3P,EAAM05f,YAAcA,IAAcx5f,EAAkByqgB,GAAQ,CAC5D,IAAIwrE,EAAcxrE,EAAMpL,sBAAsBhG,GAAaoR,EAAMpL,gBAAa5hgB,EAI9E8E,KAAKy1kB,YAAYvtE,EAAOjyb,EAAW14E,EAAO0hB,EAAKy1jB,IAGvD10kB,KAAK01kB,qBAAqBz+E,EAAWm2B,EAAkB7vhB,EAAO0hB,EAAKk2jB,EAAwBT,IAE/Fv/E,EAAO/5f,UAAUo6kB,cAAgB,SAAUv/f,EAAW+0N,EAAS0oS,EAAagB,GACpEA,EAAa,GACb10kB,KAAK61kB,uBAAuB5/f,EAAW+0N,EAAS0oS,GAGhDgB,EAAa,GACb1pS,EAAQ+rN,cAAc4C,WAAW+5E,EAAY38E,gBAGrD5B,EAAO/5f,UAAUy6kB,uBAAyB,SAAU5/f,EAAW+0N,EAAS0oS,GAGpE,IAAI52E,EAAa9xN,EAAQ67N,kBAAkB,GACvCivE,KACJ91kB,KAAK2zkB,oBAAoB72E,EAAYg5E,GAErC,IAAIC,GADJj5E,EAAag5E,EAAe,IACIp8b,UAAU5nI,MAC1C9R,KAAKohkB,iBAAiB2U,EAAiB,EAAGrC,EAAY12jB,YAGtD,IAAK,IAFDwlgB,EAAc,EACdlrB,EAAkBo8E,EACbx3kB,EAAI,EAAGA,EAAI4ggB,EAAWzF,aAAa76f,OAAQN,IAAK,CACrD,IAAIgsgB,EAAQpL,EAAWzF,aAAa1ue,OAAOzsB,EAAG,GAAG,GACjDo7f,EAAgBD,aAAa1ue,OAAO65f,EAAa,EAAGta,GACpDA,EAAM5Q,gBAAkBA,EACxBt3f,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BnkB,EAAMp2f,MAAOo2f,EAAMpL,WAAYoL,GAAO,GAEpF5Q,GADA4Q,EAAQA,EAAMrB,kBAAkBhhW,OACRyxV,gBACxBkrB,EAActa,EAAMpC,aAAe,EACnC5pgB,IAEJ8D,KAAKkhkB,wBAAmBhmkB,EAAWw4kB,GAAa,GAChD1zkB,KAAK21kB,gBAAgB74E,IAQzB3H,EAAO/5f,UAAUw6kB,oBAAsB,SAAU1tE,EAAO3qgB,EAAO0hB,EAAKy1jB,EAAY3jC,GAC5E,GAAI7oC,aAAiBhR,IAAmBgR,IAAU3qgB,EAAM05f,WAAaiR,aAAiBjB,GAAa,CAC/F,IAAI05D,OAAe,EAcnB,OAbIljkB,EAAkByqgB,EAAMqI,cAAgB9ygB,EAAkBsziB,IAAsBA,EAAkBvqC,8BAA8BS,MAChI05D,EAAe,IAAIzpE,GACA,IAAfw9E,GAAoBxsE,aAAiBhR,KACrCypE,EAAatuE,gBAAgBsH,WAAWuO,EAAM7V,iBAC9CsuE,EAAa1uE,gBAAgB0H,WAAWuO,EAAMjW,kBAElD0uE,EAAa7ujB,MAAQo2f,EAAMp2f,MAAQ,EACnC6ujB,EAAarpE,gBAAkB4Q,EAAM5Q,gBACrCt3f,KAAKwuf,OAAOlhc,OAAO++d,2BAA2Bs0C,EAAa7ujB,MAAO6ujB,EAAa7jE,WAAY6jE,GAAc,GACrGz4D,EAAM5Q,2BAA2BqO,IACjCuC,EAAM5Q,gBAAgBD,aAAa7yf,KAAKm8jB,IAGzCA,IAKfxrE,EAAO/5f,UAAUu2gB,eAAiB,SAAUqkE,EAAc/O,EAAWp8D,EAAam4C,EAASjuC,EAAWmxD,GAClG,IAAIjvE,EAAY,IAAIC,GACpBD,EAAUhF,gBAAkB,IAAIkF,GAAiBF,GACjDA,EAAU5E,gBAAkB,IAAI+E,GAAiBH,GACjDA,EAAUhF,gBAAgB0H,WAAWq8E,EAAa/jF,iBAClDgF,EAAU5E,gBAAgBsH,WAAWq8E,EAAa3jF,iBAClD,IAAIwgB,EAAa,IAAIxL,GAAWpQ,GAChCA,EAAUI,aAAa7yf,KAAKqugB,GAC5B,IAAIma,EAAagpD,EAAalkkB,MAC1B0wgB,EAAcwzD,EAAalwE,aAY/B,OAXA9lgB,KAAKomkB,YAAY4P,EAAc/+E,EAAW,EAAG4T,EAAao8D,EAAWlyD,EAAWiuC,GAEhFgzB,EAAa1+E,gBAAgBD,aAAa1ue,OAAO65f,EAAa,EAAGvrB,GACjEA,EAAUnlf,MAAQk7gB,EAClB/1B,EAAUK,gBAAkB0+E,EAAa1+E,gBACzCt3f,KAAK6gkB,sBAAsB5pE,GAAW,GAClCivE,GACAlmkB,KAAKkmkB,YAAY8P,GAGrBh2kB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BW,EAAY/1B,EAAUK,gBAAiBL,GAAW,GACzFA,GAKX9B,EAAO/5f,UAAU8qkB,YAAc,SAAUh+D,GACrC,IAAIp2f,EAEAwlf,EACJt3f,KAAK0rkB,mBAAmBxjE,GACpBA,EAAMK,eACNjR,EAAkB4Q,EAAMM,eACxB12f,EAAQo2f,EAAMM,eAAenR,aAAa94f,QAAQ2pgB,GAChCA,EAAMM,eAAenR,aACvCr3f,KAAK6gkB,sBAAsB34D,GAAO,GAClCA,EAAMM,eAAenR,aAAa1ue,OAAO7W,EAAO,GAChDo2f,EAAM5Q,qBAAkBp8f,EACxB8E,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BnkB,EAAMp2f,MAAOwlf,EAAiB4Q,GAAO,KAInFp2f,GADAwlf,EAAkB4Q,EAAM5Q,iBACAD,aAAa94f,QAAQ2pgB,GAC3B5Q,EAAgBD,aAClCr3f,KAAK6gkB,sBAAsB34D,GAAO,GAClC5Q,EAAgBD,aAAa1ue,OAAO7W,EAAO,GAC3Co2f,EAAM5Q,qBAAkBp8f,EACxBo8f,EAAgBvhf,QAAUmyf,EAAMnyf,OAChC/V,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BnkB,EAAMp2f,MAAOwlf,EAAiB4Q,GAAO,KAG3F/S,EAAO/5f,UAAUq9Y,YAAc,SAAUyvH,GACrC,IAAK,IAAIhsgB,EAAI,EAAGA,EAAI8D,KAAKwuf,OAAOhie,OAAOhwB,OAAQN,IAAK,CACpC8D,KAAKwuf,OAAOhie,OAAOtwB,GACrB+tD,KAAKgtc,YAAciR,IACzBlogB,KAAKwuf,OAAOhie,OAAO7D,OAAOzsB,EAAG,GAC7BA,OAIZi5f,EAAO/5f,UAAUu6kB,gBAAkB,SAAUp1kB,GACrCA,aAAgBk/f,IAAsC,IAAnBl/f,EAAKm/f,YACE,IAAtC1/f,KAAKwuf,OAAOhie,OAAOjuB,QAAQgC,IAC3BP,KAAKwuf,OAAOhie,OAAO7D,OAAO3oB,KAAKwuf,OAAOhie,OAAOjuB,QAAQgC,GAAO,GAGhEP,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,wBAC5DlpiB,KAAK+3hB,cAAcmR,uBAAuB47B,aAAatgkB,KAAKjE,GAEvDP,KAAKu9jB,uBACVv9jB,KAAKosD,MAAM5nD,KAAKjE,IAGxB40f,EAAO/5f,UAAUq6kB,YAAc,SAAUvtE,EAAOjyb,EAAW14E,EAAO0hB,EAAKy1jB,GAC/DxsE,aAAiBhR,GACjBl3f,KAAK20kB,WAAWzsE,EAAO3qgB,EAAO0hB,EAAKy1jB,GAGnC10kB,KAAKi2kB,iBAAiB/tE,EAAOjyb,EAAW14E,EAAO0hB,EAAKy1jB,IAI5Dv/E,EAAO/5f,UAAUw5kB,gBAAkB,SAAU9pB,EAAS70e,EAAW14E,EAAO0hB,EAAKy1jB,GACzE,IAAIwB,IAAwB34kB,EAAM05f,UAAUsR,eAAiBuiD,EAAQ1iD,WAAWjkgB,SAAS5G,EAAM05f,UAAUuR,iBACrGumB,EAAgB+7B,EAAQ1iD,WAAW/B,uBACvC,GAAI9ogB,EAAM05f,UAAUsR,cAAe,CAC/B,IAAIiuC,EAAgBvge,EAAUo7d,mBAAmByZ,EAASvtjB,EAAM05f,UAAUuR,gBAC1E,GAAIguC,EAAcpuC,WAAWjkgB,SAAS5G,EAAM05f,UAAUuR,gBAAiB,CACnE,IAAIgE,EAAYv2b,EAAUwge,gBAAgBqU,EAAStU,GACrCvge,EAAUwge,gBAAgBl5iB,EAAM05f,UAAUuR,eAAgBguC,GACxE,GAAIvge,EAAU0ge,aAAaH,EAAej5iB,EAAM05f,UAAUuR,gBAEtD,GAAIvyb,EAAU8ic,eAAey9B,EAAej5iB,EAAO0hB,GAG/C,GADAjf,KAAKm2kB,mBAAmB3/B,EAAevge,GACpB,IAAfy+f,EAEA10kB,KAAKo2kB,mBAAmBtrB,EAAQziD,SAASD,WAAYnyb,EAAW14E,EAAO0hB,EAAKy1jB,OAE3E,EAEmB10kB,KAAKq2kB,WAAW7/B,EAAevge,EAAWy+f,GAAY,IACrC,IAAfA,GAAoB10kB,KAAK+3hB,gBAC3C/3hB,KAAK+3hB,cAAcmR,4BAAyBhuiB,QAKhDsxgB,IAAcgqC,EACdx2iB,KAAK20kB,WAAW11jB,EAAIg4e,UAAW15f,EAAO0hB,EAAKy1jB,GAG3C10kB,KAAKs2kB,gBAAgB9pE,EAAWv2b,EAAW14E,EAAO0hB,EAAKy1jB,QAK5C,IAAfA,EAEA10kB,KAAKq2kB,WAAWvrB,EAAS70e,EAAW,GAAG,GAIvCj2E,KAAKo2kB,mBAAmB5/B,EAAcpuC,WAAYnyb,EAAW14E,EAAO0hB,EAAKy1jB,QAMjF10kB,KAAKs2kB,gBAAgB9/B,EAAevge,EAAW14E,EAAO0hB,EAAKy1jB,OAG9D,CAED,IAAI3sgB,EAAOkO,EAAU6ge,iBAAiBgU,GACtC9qjB,KAAKs2kB,gBAAgBvugB,EAAMkO,EAAW14E,EAAO0hB,EAAKy1jB,GAEtD,GAAIwB,EAAqB,CACJnnD,EAAcjyB,sBAAsBhG,IAAai4B,EAAcjyB,WAE3Er/f,EAAkBsxhB,IAMnB/uhB,KAAKy1kB,YAAY1mD,EAAe94c,EAAW14E,EAAO0hB,EAAKy1jB,KAKnEv/E,EAAO/5f,UAAUg7kB,mBAAqB,SAAUhxgB,EAAO6Q,EAAW14E,EAAO0hB,EAAKy1jB,GAC1E,IACI6B,GAAgB,EAChBvjhB,EAAS,SACTw5c,EAAYjvgB,EAAM05f,UAAUuR,eAC5BiE,EAAUxtf,EAAIg4e,UAAUuR,eACxBxogB,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,0BAC5Dl2e,EAAShzD,KAAK+3hB,cAAcmR,uBAAuBl2e,OAEnDujhB,EAAqE,cAArDv2kB,KAAK+3hB,cAAcmR,uBAAuBl2e,QAA+E,gBAArDhzD,KAAK+3hB,cAAcmR,uBAAuBl2e,QAClE,gBAArDhzD,KAAK+3hB,cAAcmR,uBAAuBl2e,QAA6Bv1D,EAAkB+ugB,EAAUnE,SAASwF,iBAC5GpwgB,EAAkBgvgB,EAAQpE,SAASkI,aAAoE,QAArDvwgB,KAAK+3hB,cAAcmR,uBAAuBl2e,OACnGhzD,KAAK+3hB,cAAcmR,uBAAuBl2e,OAASujhB,EAAgB,cAAgB,aACrEv2kB,KAAKqnkB,wBAAwBjigB,GAC3C6Q,EAAUutb,MAAMjiB,iBAAkB,GAStC,IAAK,IAPD0sE,EAAmBzhD,EAAUx9R,YAC7Bk/U,EAAiBzhD,EAAQz9R,YAAcy9R,EAAQhE,WAAW31M,WAAa,EACvE6J,EAAgB6vM,EAAUv9R,SAC1B02U,EAAcl5C,EAAQx9R,SAEtBg6R,GAAY,EAEP/sgB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GAC7B,GAAIwpE,EAAI5zD,OAAS6qT,GAAiBj3P,EAAI5zD,OAAS6ziB,EAAa,CACxD,IAAK,IAAIjiiB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GAC5B,GAAIqkD,EAAKinK,aAAei/U,GAAoBlmf,EAAKinK,aAAek/U,EAK5D,GAJKjlD,IACDjpgB,KAAKm2kB,mBAAmBpugB,EAAMkO,GAC9Bgzb,GAAY,GAEZstE,EAAe,CAEf,IAAIC,EAAS9wgB,EAAI2xb,aAAa3ze,GAC9B1jB,KAAK6gkB,sBAAsB2V,GAAQ,GACnC9wgB,EAAI2xb,aAAa1ue,OAAOjF,EAAG,GAC3BA,SAEKgxjB,EAAa,GACF10kB,KAAKq2kB,WAAWtugB,EAAMkO,EAAWy+f,GAAY,GAIzC,IAA5BhvgB,EAAI2xb,aAAa76f,SACjBwD,KAAK6gkB,sBAAsBz7f,EAAMiyb,aAAan7f,IAAI,GAClDkpE,EAAMiyb,aAAa1ue,OAAOzsB,EAAG,GAC7BA,IACAypjB,MAKZ1ve,EAAUutb,MAAMjiB,iBAAkB,EACA,IAA9Bn8a,EAAMiyb,aAAa76f,QACnBy5E,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqBpic,EAAO,KAC1DplE,KAAKy2kB,kBAAkBxggB,EAAWjjB,GAClChzD,KAAKkmkB,YAAY9ggB,KAIjBA,EAAM8lc,eAAgB,EACtB9lc,EAAM6lc,oBACN7lc,EAAM8lc,eAAgB,EACtBlrgB,KAAKwuf,OAAOlhc,OAAOg/d,cAAclnd,KAGzC+vb,EAAO/5f,UAAUi7kB,WAAa,SAAUtugB,EAAMkO,EAAWy+f,EAAYgC,GAEjE,IAAIxuE,EAAQngc,EAAKsvb,aAAa,GAC9B,GAAiC,IAA7Btvb,EAAKsvb,aAAa76f,QAAgB0rgB,aAAiBhR,IAAmBgR,EAAMtwR,UAC5E,OAAO,EAEX,IAAK,IAAI17O,EAAI,EAAGA,EAAI6rE,EAAKsvb,aAAa76f,OAAQN,IAE1C,GADAgsgB,EAAQngc,EAAKsvb,aAAan7f,GACtBw4kB,EAAa,EAAG,CAEhB,GAAIxsE,aAAiBhR,IAAgD,IAA7Bnvb,EAAKsvb,aAAa76f,OAAc,CAIpE,IAAK,IAFDy6f,EAAYiR,EAEPxkf,EAAI,EAAGA,EAAIuze,EAAUI,aAAa76f,OAAQknB,IAAK,CAEpD,IAAK,IADD86I,EAASy4V,EAAUI,aAAa3ze,GAC3B4C,EAAI,EAAGA,EAAIk4I,EAAOpkJ,SAAS5d,OAAQ8pB,IAAK,CAC7C,IAAItlB,EAAUw9J,EAAOpkJ,SAASkM,GAC9BtmB,KAAK6jkB,qBAAqB7ikB,GAC1Bw9J,EAAOpkJ,SAASuO,OAAOrC,EAAG,GAE1BA,IACItmB,KAAK22kB,gBAAgB1ggB,IACrBj2E,KAAK21kB,gBAAgB30kB,GAGzBi2f,EAAUI,aAAa76f,OAAS,IAChCy6f,EAAUI,aAAa1ue,OAAOjF,EAAG,GACjCA,KAGJ1jB,KAAK22kB,gBAAgB1ggB,KAErBA,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqBvQ,EAAW,KAC9Dj3f,KAAKykkB,sBAAsBxuf,EAAU6pf,cAAc,IAEvD,MAEJ9/jB,KAAKkmkB,YAAYh+D,GACjBhsgB,IACI8D,KAAK22kB,gBAAgB1ggB,IACrBj2E,KAAK21kB,gBAAgBztE,GAIjC,OAAO,GAEX/S,EAAO/5f,UAAUk7kB,gBAAkB,SAAUvugB,EAAMkO,EAAW14E,EAAO0hB,EAAKy1jB,GACtE,IAAItsE,EAAargc,EAAKqgc,WACtB,GAAInyb,EAAU8ve,YAAY39C,EAAW1uX,UAAWz6H,EAAIg4e,UAAUuR,gBAC1DxogB,KAAK42kB,cAAcxuE,EAAYnyb,EAAWy+f,QAG1C,IAAK,IAAIx4kB,EAAI,EAAGA,EAAIksgB,EAAW/Q,aAAa76f,OAAQN,IAAK,CACrD,IAAIwpE,EAAM0ic,EAAW/Q,aAAan7f,GAOlC,GANIw4kB,EAAa,IACb10kB,KAAK6gkB,sBAAsBn7f,GAAK,GAChC0ic,EAAW/Q,aAAa1ue,OAAOzsB,EAAG,GAClC8D,KAAK21kB,gBAAgBjwgB,GACrBxpE,KAEA+iB,EAAIg4e,UAAUsR,eAAiBtyb,EAAU8ve,YAAYrgf,EAAKzmD,EAAIg4e,UAAUuR,gBAExE,YADAxogB,KAAKwuf,OAAOlhc,OAAOg/d,cAAclkB,KAMjDjT,EAAO/5f,UAAU66kB,iBAAmB,SAAU7wgB,EAAO6Q,EAAW14E,EAAO0hB,EAAKy1jB,GAExE,GADAtvgB,EAAQA,EAAM2hc,cAAc/mgB,KAAKwuf,QAC7Bjxf,EAAM05f,UAAUsR,eAAiBnjc,EAAMjhE,SAAS5G,EAAM05f,UAAUuR,gBAAiB,CACjF,IAAIN,EAAQ9ic,EAAMihc,uBAEd0oB,EAAgB/uhB,KAAK41kB,oBAAoBxwgB,EAAO7nE,EAAO0hB,EAAKy1jB,EAAYxsE,aAAiBhR,GAAkBgR,OAAQhtgB,GACvH,GAAI+6E,EAAU8ve,YAAY3gf,EAAMpoD,WAAYzf,EAAM05f,UAAUuR,gBACxDxogB,KAAK42kB,cAAcxxgB,EAAO6Q,EAAWy+f,OAEpC,CACD,IAAI7qD,EAAW7phB,KAAK4gkB,WAAWx7f,EAAO7nE,EAAM05f,UAAUuR,eAAeH,UACrErogB,KAAK42kB,cAAcxxgB,EAAO6Q,EAAWy+f,GACrC10kB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BxC,EAAS/3gB,MAAO+3gB,EAASvyB,gBAAiBuyB,GAAU,GAEjGpshB,EAAkBsxhB,KACnB94c,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqBunB,EAAe,KAC9D/uhB,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,0BAC5DlpiB,KAAK+3hB,cAAcmR,uBAAuBnJ,YAAc9pd,EAAU6pf,mBAIzE,CACD,IAAIv0C,EAAWnmd,EAAMihc,uBACJjhc,EAAM03b,sBAAsBhG,IAAa1xb,EAAM03b,WAChE98f,KAAK42kB,cAAcxxgB,EAAO6Q,EAAWy+f,GAChCj3kB,EAAkB8thB,IAMnBvrhB,KAAKy1kB,YAAYlqD,EAAUt1c,EAAW14E,EAAO0hB,EAAKy1jB,KAI9Dv/E,EAAO/5f,UAAUwlkB,WAAa,SAAUx7f,EAAOyxgB,GAC3C,IAAIhtD,EAAW,IAAI5iB,GACnB4iB,EAAS7lB,YAAYrK,WAAWv0b,EAAM4+b,aACtC6lB,EAAS/3gB,MAAQszD,EAAMtzD,MAEvB,IAAK,IAAI5V,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GAC7B,GAAIwpE,IAAQmxgB,EACR,MAEJhtD,EAASxyB,aAAa7yf,KAAKkhE,GAC3BA,EAAI4xb,gBAAkBuyB,EACtBzkd,EAAMiyb,aAAa1ue,OAAOzsB,EAAG,GAC7BA,IAGJ,IAAIsmhB,EAAcp9c,EAAMmU,WAIxB,OAHAnU,EAAMkyb,gBAAgBD,aAAa1ue,OAAO65f,EAAa,EAAGqH,GAC1DA,EAASvyB,gBAAkBlyb,EAAMkyb,gBACjCt3f,KAAK6gkB,sBAAsBh3C,GAAU,GAC9BA,GAEX10B,EAAO/5f,UAAU+6kB,mBAAqB,SAAUpugB,EAAMkO,GAClD,IAAI+pe,EAAiB/pe,EAAUgse,wBAAwBl6e,GACvDkO,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqBw4C,EAAgB,MAKvE7qD,EAAO/5f,UAAUw7kB,cAAgB,SAAUxxgB,EAAO6Q,EAAWy+f,GACrDA,EAAa,IACb10kB,KAAKkmkB,YAAY9ggB,GACjBplE,KAAK21kB,gBAAgBvwgB,KAG7B+vb,EAAO/5f,UAAUq7kB,kBAAoB,SAAUxggB,EAAWjjB,GAClDhzD,KAAKwuf,OAAOgV,MAAMszE,oBAAsBr5kB,EAAkBuC,KAAK+3hB,cAAcmR,0BAC7ElpiB,KAAK+3hB,cAAcmR,uBAAuBl2e,OAASA,IAG3Dmic,EAAO/5f,UAAUu7kB,gBAAkB,SAAU1ggB,GAEzC,OAAOj2E,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,wBAA+E,eAArDlpiB,KAAK+3hB,cAAcmR,uBAAuBl2e,QAExHmic,EAAO/5f,UAAUi6kB,qBAAuB,SAAUp+E,EAAWw4C,GACzD,IAAIlyiB,EAAQyC,KAAKwngB,qBAAqBvQ,EAAW,IAC7Ch4e,EAAMjf,KAAKwngB,qBAAqBioC,EAAc,IAC9C3phB,EAAiBvoB,EAAML,MAAM,KAC7B8oB,EAAe/G,EAAI/hB,MAAM,KAC7B,OAAO4oB,EAAetpB,OAASwpB,EAAaxpB,QAEhD24f,EAAO/5f,UAAUiskB,wBAA0B,SAAUjigB,GACjD,GAAIplE,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,wBAAyB,CAErF,IAAI6tC,EAAc3xgB,EAAM/lE,QAQxB,OANAW,KAAK+3hB,cAAcmR,uBAAuB47B,aAAatgkB,KAAKuykB,GAExD/2kB,KAAKwuf,OAAOv4a,UAAU14E,MAAM05f,UAAUsR,eACtCvogB,KAAKwuf,OAAOv4a,UAAU14E,MAAM05f,UAAUuR,eAAeJ,aAAehjc,GACpEplE,KAAKykkB,sBAAsBzkkB,KAAKwngB,qBAAqBpic,EAAO,MAAM,GAE/D2xgB,IAKf5hF,EAAO/5f,UAAUs6kB,qBAAuB,SAAUz+E,EAAWm2B,EAAkB7vhB,EAAO0hB,EAAKk2jB,EAAwBT,GAC/G,GAAI10kB,KAAK+3hB,gBAAkB/3hB,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,YAAmE,UAArD75f,KAAK+3hB,cAAcmR,uBAAuBl2e,OAAoB,CACtJ,IAAIuvd,EAAgBvihB,KAAKi2E,UAAUq7d,sBAAsBlkB,GACzD,GAAI7K,GACIhlhB,EAAMoO,OAAS,GAAK42gB,IAAkBtjgB,EAAIg4e,WAAaA,IAAc15f,EAAM05f,WACnB,UAArDj3f,KAAK+3hB,cAAcmR,uBAAuBl2e,OAAoB,CAEjE,IAAIwvd,EAAc,EAClBxihB,KAAKkmkB,YAAY94C,GACjBpthB,KAAKwuf,OAAOlhc,OAAOuyd,oBAAoB0C,GACvCvihB,KAAKwuf,OAAOlhc,OAAOuyd,oBAAoBuN,GACvC,IAAK,IAAIlxhB,EAAI,EAAGA,EAAIkxhB,EAAiB/1B,aAAa76f,OAAQN,IAAK,CAC3D,IAAI+tD,EAAOmje,EAAiB/1B,aAAan7f,GACzCqmhB,EAAclrB,aAAa1ue,OAAO65f,EAAa,EAAGv4d,GAClDmje,EAAiB/1B,aAAa1ue,OAAOzsB,EAAG,GACxCA,IACAsmhB,IACAv4d,EAAKgtc,UAAYsrB,EAErBvihB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkB5J,EAAe,EAAG,GACvD4yD,GAAyB,EACzB,IAAIxpkB,EAAS3L,KAAKi2E,UAAU6pf,aAAaz7iB,UAAUrkB,KAAKi2E,UAAU6pf,aAAa/ge,YAAY,KAAO,GAClG/+F,KAAKi2E,UAAU6pf,aAAe9/jB,KAAKwngB,qBAAqB+a,EAAe52gB,IAI/EwpkB,GACAn1kB,KAAKg3kB,oBAAoB5pD,EAAkBpthB,KAAKi2E,UAAWy+f,IAInEv/E,EAAO/5f,UAAUm6kB,cAAgB,SAAUt+E,EAAWgwE,EAAWp8D,EAAam4C,EAASjuC,EAAW2/D,GAC9F,IAAI9U,GAAY,EAChB5/jB,KAAKwuf,OAAOlhc,OAAOuyd,oBAAoB5oB,GACtBA,EAAUI,aAAa94f,QAAQ0okB,GAChD,IAAK,IAAI/qkB,EAAI+6f,EAAUI,aAAa76f,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACzD,IAAI22gB,EAAa5b,EAAUI,aAAan7f,GACxC,GAAI+qkB,IAAcp0D,GAAcmwC,IAAYnwC,EAAY,CACpD7ygB,KAAKi3kB,cAAcpkE,EAAYhI,EAAakK,GAC5C6qD,GAAY,EACZ,MAEJ,GAAI5c,IAAYnwC,EACZ+sD,GAAY,EACZ5/jB,KAAKi3kB,cAAcpkE,EAAY,EAAGkC,OAEjC,CAAA,GAAIkyD,IAAcp0D,EAAY,CAC/B7ygB,KAAKi3kB,cAAcpkE,EAAYhI,EAAa7qgB,KAAKwuf,OAAOv4a,UAAUo4d,cAAcx7B,IAChF,MAEK+sD,GACL5/jB,KAAKi3kB,cAAcpkE,EAAY,EAAG7ygB,KAAKwuf,OAAOv4a,UAAUo4d,cAAcx7B,KAG1E+sD,IACA5/jB,KAAKirkB,gBAAgBh0E,GACrBj3f,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAW,EAAG,KAM3D9B,EAAO/5f,UAAU67kB,cAAgB,SAAUpkE,EAAYhI,EAAakK,GAEhE,IAAK,IADD71f,EAAQlf,KAAKi2E,UAAUo4d,cAAcx7B,GAChC32gB,EAAI22gB,EAAWz4f,SAAS5d,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACtD,IAAIsiK,EAASq0W,EAAWz4f,SAASle,GACjC,GAAI64gB,GAAa71f,EAAQs/I,EAAOhiK,OAC5B0iB,GAASs/I,EAAOhiK,WADpB,CAIA,IAAIupB,EAAWy4I,EAAOhiK,OAClB0iB,EAAQ61f,GAAc71f,EAAQ6G,EAAWgvf,IACzChvf,EAAWgvf,GAAa71f,EAAQs/I,EAAOhiK,SAE3C,IAAIqpB,EAAa,EAOjB,GANI3G,EAAQs/I,EAAOhiK,OAASqugB,IACxBhlf,EAAaglf,GAAe3rf,EAAQs/I,EAAOhiK,SAE3C0iB,EAAQ61f,IACR71f,GAAUs/I,EAAOhiK,OAASupB,GAEX,IAAfF,GAAoBE,IAAay4I,EAAOhiK,OAClCwD,KAAK+3hB,gBAAkB/3hB,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,YACxEr7V,aAAkBsqW,IAClB9ogB,KAAK29jB,wBAAwBn5jB,KAAKg6J,GAI1Cx+J,KAAK6jkB,qBAAqBrla,GAC1Bx+J,KAAK21kB,gBAAgB9iE,EAAWz4f,SAASle,IACzC22gB,EAAWz4f,SAASuO,OAAOzsB,EAAG,QAG7B,GAAIsiK,aAAkBoqW,GAAgB,CAEvC,IAAInhc,EAAO,IAAImhc,GACfnhc,EAAK4qb,gBAAgBsH,WAAWn7V,EAAO6zV,iBACvC5qb,EAAKz4C,KAAOwvI,EAAOxvI,KAAK6H,OAAOhR,EAAYE,EAAWF,GACtD7lB,KAAK21kB,gBAAgBlugB,GACrB+2F,EAAOxvI,KAAOwvI,EAAOxvI,KAAK3tB,MAAM,EAAGwkB,GAAc24I,EAAOxvI,KAAK3tB,MAAM0kB,GAEvE,GAAI8kf,GAAe3rf,GAAS6G,EAAWF,GACnC,MAEJ3G,GAAU6G,EAAWF,KAM7Bsve,EAAO/5f,UAAU6vkB,gBAAkB,SAAUh0E,GACzC,GAAIA,EAAUI,aAAa76f,OAAS,EAChC,IAAK,IAAIN,EAAI,EAAGA,EAAI+6f,EAAUI,aAAa76f,OAAQN,IAAK,CAEjB,IADlB+6f,EAAUI,aAAan7f,GACzBke,SAAS5d,QAAgBy6f,EAAUI,aAAa76f,OAAS,IACpEy6f,EAAUI,aAAa1ue,OAAOzsB,EAAG,GACjCA,OAWhBi5f,EAAO/5f,UAAUmtiB,eAAiB,SAAUjsiB,GACxC,IAAImggB,EAAY,IAAI4c,QAAWn+gB,GAE/B,OADA8E,KAAKk3kB,cAAcz6E,EAAWnggB,GACvBmggB,GAQXtH,EAAO/5f,UAAU87kB,cAAgB,SAAUj5kB,EAAaw+f,GAC/Ch/f,EAAkBg/f,EAAUxK,mBAC7Bh0f,EAAYg0f,gBAAkB,IAAIkF,GAAiBl5f,GACnDA,EAAYg0f,gBAAgB0H,WAAW8C,EAAUxK,kBAEhDx0f,EAAkBg/f,EAAUpK,mBAC7Bp0f,EAAYo0f,gBAAkB,IAAI+E,GAAiBn5f,GACnDA,EAAYo0f,gBAAgBsH,WAAW8C,EAAUpK,kBAEhD50f,EAAkBg/f,EAAU8c,mBAC7Bt7gB,EAAYs7gB,gBAAkB9c,EAAU8c,iBAEvC97gB,EAAkBg/f,EAAUqc,oBAC7B76gB,EAAY66gB,iBAAmBrc,EAAUqc,kBAExCr7gB,EAAkBg/f,EAAU+c,gBAC7Bv7gB,EAAYu7gB,aAAe/c,EAAU+c,cAEpC/7gB,EAAkBg/f,EAAUgd,gBAC7Bx7gB,EAAYw7gB,aAAehd,EAAUgd,cAEpCh8gB,EAAkBg/f,EAAUtC,WAC7Bl8f,EAAYk8f,QAAUsC,EAAUtC,UAQxChF,EAAO/5f,UAAUotiB,mBAAqB,SAAUlsiB,GAC5C,IAAIq+f,EAAgB,IAAIX,GAUxB,OATKv8f,EAAkBnB,EAAO69f,WAC1BQ,EAAcR,QAAU79f,EAAO69f,SAE9B18f,EAAkBnB,EAAO29f,qBAC1BU,EAAcV,kBAAoB39f,EAAO29f,mBAExCx8f,EAAkBnB,EAAO49f,eAC1BS,EAAcT,YAAc59f,EAAO49f,aAEhCS,GAMXxF,EAAO/5f,UAAU0tiB,qBAAuB,WACpC9oiB,KAAKwuf,OAAO2oF,kBACZ,IAAK,IAAIzzjB,EAAI,EAAGA,EAAI1jB,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQknB,IAE1C,IAAK,IADDo5e,EAAa98f,KAAKwuf,OAAOzmQ,MAAMrkO,GAAGkif,YAAY,GACzC1pgB,EAAI,EAAGA,EAAI4ggB,EAAWzF,aAAa76f,OAAQN,IAChD8D,KAAKo3kB,4BAA4Bt6E,EAAWzF,aAAan7f,KAOrEi5f,EAAO/5f,UAAUg8kB,4BAA8B,SAAUlvE,GACrD,GAAIA,aAAiBhR,GACZz5f,EAAkByqgB,EAAMjW,kBACrBx0f,EAAkByqgB,EAAMjW,gBAAgB+F,aACxCv6f,EAAkByqgB,EAAMjW,gBAAgB+F,WAAWqC,UACnD58f,EAAkBuC,KAAKwuf,OAAO2oF,kBAC9Bn3kB,KAAKwuf,OAAO2oF,mBAEhBn3kB,KAAKwuf,OAAO2oF,eAAe3ykB,KAAK0jgB,SAGnC,GAAIA,aAAiBjB,GACtB,IAAK,IAAI/qgB,EAAI,EAAGA,EAAIgsgB,EAAM7Q,aAAa76f,OAAQN,IAC3C,IAAK,IAAIwnB,EAAI,EAAGA,EAAIwkf,EAAM7Q,aAAan7f,GAAGm7f,aAAa76f,OAAQknB,IAE3D,IAAK,IADDqkD,EAAOmgc,EAAM7Q,aAAan7f,GAAGm7f,aAAa3ze,GACrC4C,EAAI,EAAGA,EAAIyhD,EAAKsvb,aAAa76f,OAAQ8pB,IAC1CtmB,KAAKo3kB,4BAA4BrvgB,EAAKsvb,aAAa/we,KAWvE6ue,EAAO/5f,UAAUstiB,YAAc,SAAU1/b,GACrC,IAAI/yB,EAAYj2E,KAAKwuf,OAAOv4a,UAC5Bj2E,KAAK4oiB,eAAe5oiB,KAAKwuf,OAAOv4a,WAChCj2E,KAAK4sc,YAAY,cACjB,IAAIrua,EAAS,IAAIu8d,GACZr9f,EAAkBurG,KACnBzqE,EAAO87d,OAASrxZ,EAAKqxZ,QAEzBr6f,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EAClCrra,EAAU2hK,SACV53O,KAAKyvkB,wBAAwBx5f,EAAU14E,MAAM05f,UAAW,aAAc14d,GAAQ,GAC9Ev+B,KAAK0vkB,gBAAgBz5f,EAAU14E,MAAM05f,WAAW,IAGhDj3f,KAAK2vkB,mCAAmC,aAAcpxiB,GAAQ,GAElEv+B,KAAKu6jB,SAAStkf,IASlBk/a,EAAO/5f,UAAUwxkB,uBAAyB,SAAUruiB,EAAQu6e,EAAkBtpf,GAC1E,IAAIymD,EAAYj2E,KAAKwuf,OAAOv4a,UACxB+yB,EAAO/yB,EAAUg8a,gBAAgBo2C,UACjC/pU,GAAW,EACX/gO,EAAQ04E,EAAU14E,MACjB04E,EAAU8ge,YACXx5iB,EAAQ04E,EAAUh3D,KAEtB,IAAImugB,EAAmB7vhB,EAAM05f,UAC7B,GAAIx5f,EAAkBurG,GAAO,CACzB,MAAQvrG,EAAkB2vhB,EAAiBvf,iBAAmBuf,EAAiBvf,0BAA0B3W,IAClGk2B,EAAiBvf,eAAej2R,YAAoF,IAAvEw1S,EAAiBvf,eAAe5b,gBAAgB+F,WAAWqC,QAC3G+yB,EAAmBA,EAAiBvf,eAEpCuf,EAAiBvf,gBAAkBuf,EAAiBvf,0BAA0B3W,KACJ,IAAvEk2B,EAAiBvf,eAAe5b,gBAAgB+F,WAAWqC,SAC9D+yB,EAAmBA,EAAiBvf,eACpC7ka,EAAOhpG,KAAKwuf,OAAOoxB,YAAYwN,EAAiBn7B,gBAAgB+F,WAAWqC,QAC3E/7R,GAAW,GAGnB,IAAI+4W,OAAiBn8kB,EACrB,IAAKuC,EAAkBurG,GAAO,CAC1B,IAAIsue,EAAWt3kB,KAAKwuf,OAAOoxB,YAAYwN,EAAiBn7B,gBAAgB+F,WAAWqC,QACnFg9E,EAAiBr3kB,KAAKwuf,OAAOlhc,OAAOotc,aAAa48E,EAAUlqD,EAAiBn7B,gBAAgB+F,WAAWkD,iBAE3G,GAAIz9f,EAAkBurG,KAAWvrG,EAAkBurG,KAAWque,EAAev+D,mBAAqBA,GAC9Fu+D,EAAe79D,eAAiBj7e,GAAW84iB,EAAehlF,gBAAgB7ie,aAAeA,GAClD,WAApC6njB,EAAev+D,kBAAkC,CACpDx6S,GAAW,EACXt1H,EAAO,IAAIoxZ,GACPp6f,KAAKwuf,OAAO55M,MAAMp4S,OAAS,EAC3BwsG,EAAKqxZ,OAASr6f,KAAKwuf,OAAO55M,MAAM50S,KAAKwuf,OAAO55M,MAAMp4S,OAAS,GAAG69f,OAAS,EAGvErxZ,EAAKqxZ,OAAS,EAElB,IAAIG,EAAe,IAAI2e,GAUvB,GATIn5gB,KAAKwuf,OAAOgG,cAAch4f,OAAS,EACnCg+f,EAAaD,eAAiBv6f,KAAKwuf,OAAOgG,cAAcx0f,KAAKwuf,OAAOgG,cAAch4f,OAAS,GAAG+9f,eAAiB,EAG/GC,EAAaD,eAAiB,EAElCvxZ,EAAKuxZ,eAAiBC,EAAaD,eACnCvxZ,EAAKwxZ,aAAeA,EACpBx6f,KAAKwuf,OAAOgG,cAAchwf,KAAKg2f,GAChB,WAAXj8d,GAAkC,eAAXA,GAAsC,cAAXA,EAClDv+B,KAAKkghB,cAAc1lB,EAAcj8d,EAAQ03C,OAExC,CACD,IAAIwmb,EAAY,IAAI4c,GAAW7e,GAC/BiC,EAAUqc,iBAAmBA,EAC7Brc,EAAU+c,aAAej7e,EACA,WAArBu6e,EACArc,EAAUtC,QAAU,EAGpBsC,EAAUpK,gBAAgB7ie,WAAaA,EAE3Cite,EAAUxK,gBAAgBmL,WAAa,GACvCX,EAAUxK,gBAAgBrjP,iBAAmB,GAC7C4rP,EAAa70a,OAAOnhF,KAAKi4f,GACzBxmb,EAAUg8a,gBAAgBiJ,gBAAkB,EAEhDjlb,EAAUg8a,gBAAgBw2C,QAAQz/b,QAE5BvrG,EAAkBurG,IAASs1H,EACjCroJ,EAAUg8a,gBAAgBw2C,QAAQz/b,GAGlC/yB,EAAUg8a,gBAAgBw2C,aAAQvtiB,IAG1Ci6f,EAAO/5f,UAAU8khB,cAAgB,SAAUq3D,EAAiBC,EAAUvhgB,GAElE,IAAK,IADDwhgB,GAAoB,IAAU,IAAU,IAAU,IAAU,KACvDv7kB,EAAIq7kB,EAAgB5xf,OAAOnpF,OAAQN,EAAI,EAAGA,IAAK,CACpD,IAAIuggB,EAAY,IAAI4c,GAAWk+D,GAC/B,GAAIC,EAAS9nkB,MAAM,UACf+sf,EAAUqc,iBAAmB,SAC7Brc,EAAU+c,aAAei+D,EAAiBv7kB,EAAI,EAAIA,EAAI,EAAIA,EAAI,EAAI,GAClEuggB,EAAUpK,gBAAgB7ie,WAAatzB,EAAI,GAAW,IAANA,EAAU,YAAc,aAEvE,CACD,GAAIs7kB,EAAS9nkB,MAAM,cAAe,CAC9B,IAAK,IAAIgU,EAAI,EAAGA,EAAIxnB,EAAI,EAAGwnB,IACvB+4e,EAAU+c,cAAgB,KAAO91f,EAAI,GAAGxW,WAAa,IAEzDuvf,EAAUqc,iBAAmB,cAG7Brc,EAAU+c,aAAe,KAAOt9gB,EAAI,GAAGgR,WAAa,IACpDuvf,EAAUqc,iBAAmB58gB,EAAI,GAAM,EAAI,SACrCA,EAAI,GAAM,EAAI,YAAc,WAEtCuggB,EAAUtC,QAAU,EACpBsC,EAAUgd,aAAev9gB,EAGzBuggB,EAAUxK,gBAAgBmL,WADpB,IAANlhgB,EACuC,GAGA,GAAKA,EAEhDuggB,EAAUxK,gBAAgBrjP,iBAAmB,GAC7C2oU,EAAgB5xf,OAAOnhF,KAAKi4f,GAC5Bxmb,EAAUg8a,gBAAgBiJ,gBAAkBh/f,IAMpDi5f,EAAO/5f,UAAUgkkB,gBAAkB,WAC/B,IAAKp/jB,KAAKwjgB,MAAMtR,eAAgB,CAC5B,GAAIlyf,KAAKwuf,OAAOv4a,UAAU14E,MAAM05f,UAAUsR,eACtCvogB,KAAKwuf,OAAOv4a,UAAU14E,MAAM05f,UAAUu1B,iBACtC,OAEJxshB,KAAKg4hB,mBAAmB,aACxBh4hB,KAAKu/jB,SAAQ,GACTv/jB,KAAK+3hB,eAA0D,MAAzC/3hB,KAAK+3hB,cAAcq7B,oBACzCpzjB,KAAK+3hB,cAAcQ,uBAEvBv4hB,KAAKi2E,UAAU6kd,6BAMvB3lC,EAAO/5f,UAAUmkkB,QAAU,SAAUmY,GACjC,IAAIzhgB,EAAYj2E,KAAKwuf,OAAOv4a,UAC5B,GAAIA,EAAU2hK,QAAS,CAEnB,IAAIqpT,EAAiBhrd,EAAU+ic,oBAE/B,IAD8Bv7gB,EAAkBwjiB,GAG5C,YADAhrd,EAAUwke,oBAAoBxZ,GAIlC,IADIhqC,EAAYhhb,EAAU14E,MAAM05f,WAClBr/Q,YAA8D,IAAjDq/Q,EAAUhF,gBAAgB+F,WAAWqC,OAG5D,YADAr6f,KAAKkoiB,oBAAoBloiB,KAAKwuf,OAAOoxB,YAAY3oB,EAAUhF,gBAAgB+F,WAAWqC,QAASpD,EAAUhF,gBAAgB+F,WAAWkD,gBAAkB,GAI9Jl7f,KAAK4sc,YAAY,SACjB,IAAIgzH,GAAY,EAKhB,GAJK3pf,EAAU2hK,UAEXgoV,EAAY5/jB,KAAK+/jB,uBAAuB9pf,IAExC2pf,EAAW,CACX3pf,EAAUutb,MAAMliB,mBAAoB,EACpCthf,KAAKggkB,uBACL,IAAIsD,EAAYtjkB,KAAK6/jB,iBAAiB5pf,EAAU14E,OAC5Co6kB,EAAe33kB,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YAGnF,GAFAlN,KAAK8gkB,uBAAuB7qf,EAAWA,EAAU14E,MAAM05f,UAAWhhb,EAAU14E,MAAMmuhB,cAAez1c,EAAU14E,MAAMoO,QACjH3L,KAAK+uiB,2BAA2B94d,EAAU14E,MAAOo6kB,GAC7CD,EAAmB,CACnB,IAAItqD,EAAmBn3c,EAAU14E,MAAM05f,UACnC2gF,EAAiB,IAAI1gF,GACzB0gF,EAAevlF,gBAAgBsH,WAAWyzB,EAAiB/6B,iBAC3DulF,EAAe3lF,gBAAgB0H,WAAWyzB,EAAiBn7B,iBAC3D,IAAI4lF,EAAY,IAAIjvE,GACpBivE,EAAU7ojB,KAAO,KACjB,IAAIi7B,EAAO,IAAIo9c,GAAWuwE,GAC1B3thB,EAAK7vC,SAAS5V,KAAKqzkB,GACnBA,EAAU5thB,KAAOA,EACjB2thB,EAAevgF,aAAa7yf,KAAKylD,GACjCjqD,KAAKklkB,gBAAgB0S,GAAgB,GACrC3hgB,EAAUgqe,gBAAgB23B,GAAgB,GAE9C,IAAInoM,EAAWx5T,EAAU14E,MAAM05f,UAAUsZ,WACrC9ygB,EAAkBgyY,KAClBA,EAAWx5T,EAAU45d,qBAAqB55d,EAAU14E,MAAM05f,YAE9Dhhb,EAAUgqe,gBAAgBxwK,GAAU,GACpCzvY,KAAKogkB,oBACDsX,GAAqB13kB,KAAK+3hB,eAC1B/3hB,KAAKwjgB,MAAMu0B,cAAcsR,gBAK7BrpiB,KAAKu6jB,SAAStkf,GAEd,IAAIghb,GACCx5f,EADDw5f,EAAYhhb,EAAU14E,MAAM05f,UAAU4W,kBACJ5W,EAAUr/Q,WAE5Cq/Q,EAAUv9W,UAAUt/H,SAAS68e,EAAUv9W,UAAUt/H,SAAS5d,OAAS,aAAcosgB,IACjF5ogB,KAAKugkB,2BAA2Btqf,GAAW,EAAMghb,KAI7D9B,EAAO/5f,UAAU0lkB,uBAAyB,SAAU7qf,EAAW+/f,EAAcx3D,EAAa7ygB,GACtF,IAAI62gB,EAAc,EACdwK,EAAagpD,EAAalkkB,MAC1Bmlf,EAAY,IAAIC,GAChB2b,EAAa,IAAIxL,GAAWpQ,GAChCA,EAAUI,aAAa7yf,KAAKqugB,GAE5B5b,EAAUhF,gBAAgBmH,UAAYnC,EAClCunB,IAAgBw3D,EAAat8b,WAAa/tI,IAAWsqE,EAAUo4d,cAAc7vB,IAEzEw3D,EAAa/jF,gBAAgB8F,WACsB,WAAhDi+E,EAAa/jF,gBAAgB8F,UAAUxge,MAAqBy+iB,EAAa/jF,gBAAgB8F,UAAUzsd,gBAAgB6vd,IAClH66E,EAAa/jF,gBAAgB8F,UAAUxge,OAASy+iB,EAAa/jF,gBAAgB8F,UAAUzsd,KAAK/T,MAC5F0/d,EAAUhF,gBAAgB0H,WAAWq8E,EAAa/jF,iBAClDgF,EAAU5E,gBAAgBsH,WAAWq8E,EAAa3jF,kBAGlD4E,EAAUhF,gBAAgB8F,UAAYi+E,EAAa/jF,gBAAgB8F,UAAUzsd,KAEjFtrC,KAAKi2E,UAAUgie,qBAAsB,IAGrChhD,EAAUhF,gBAAgB0H,WAAWq8E,EAAa/jF,iBAClDgF,EAAU5E,gBAAgBsH,WAAWq8E,EAAa3jF,kBAGtDmwB,IACAwK,MAGA/1B,EAAUhF,gBAAgB0H,WAAWq8E,EAAa/jF,iBAClDgF,EAAU5E,gBAAgBsH,WAAWq8E,EAAa3jF,kBAC9C1mf,EAAS,IAAM6ygB,EAAY3M,iBAC3BmkE,EAAeA,EAAajvE,cAAc/mgB,KAAKwuf,QAC/Cxuf,KAAKomkB,YAAY4P,EAAc/+E,EAAW,EAAG,EAAG++E,EAAah5jB,WAAYrR,EAAQ6ygB,IAErFw3D,EAAeA,EAAanvE,kBAAkB,IAElD2b,GAAewzD,EAAaz8f,WAC5B,IAAI1+D,EAAYm7jB,EAAa1+E,gBACZz8e,EAAUw8e,aAChB1ue,OAAO65f,EAAa,EAAGvrB,GAClCA,EAAUK,gBAAkBz8e,EAC5Bo8e,EAAUnlf,MAAQk7gB,EAClBhthB,KAAK6gkB,sBAAsB5pE,GAAW,GAEtCj3f,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BW,EAAYnygB,EAAWo8e,GAAW,IAKpF9B,EAAO/5f,UAAUylkB,sBAAwB,SAAU34D,EAAOo5D,GACtD,IAAI1+T,EAAYslQ,EAAM5Q,gBAAgBD,aAAa94f,QAAQ2pgB,GAAS,EACpE,GAAIA,EAAM5Q,2BAA2BR,GAEjC,IAAK,IADDyqE,EAAsBr5D,EAAM5Q,gBAAgBxlf,MACvC4R,EAAI1jB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQ2pgB,EAAM5Q,gBAAgB/pV,MAAO7pJ,EAAI1jB,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQknB,IAAK,CACnG,IAAI6pJ,EAAOvtK,KAAKwuf,OAAOzmQ,MAAMrkO,GAC7B,GAAI6pJ,EAAKq4V,YAAY,GAAG9zf,QAAUyvjB,EAQ9B,OAPA,IAAK,IAAIj7iB,EAAIs8O,EAAWt8O,EAAIinJ,EAAKq4V,YAAY,GAAGvO,aAAa76f,OAAQ8pB,IAAK,CACtE,IAAIk2f,EAAcjvW,EAAKq4V,YAAY,GAAGvO,aAAa/we,GACnDtmB,KAAK83kB,YAAYt7D,EAAa8kD,GAElC1+T,EAAY,OAOnB,GAAIslQ,EAAM5Q,2BAA2B2O,GAGtC,IAAK,IAFDr/b,EAAQshc,EAAM5Q,gBAAgBuP,kBAC9BzvM,EAAmBxwP,EAAMroE,QAAQ2pgB,EAAM5Q,iBAClCvqf,EAAIqqT,EAAkBrqT,EAAI65D,EAAMpqE,OAAQuQ,IAAK,CAElD,IAAK,IADDo/R,EAASvlO,EAAM75D,GAAGsqf,aACbrqf,EAAI41P,EAAW51P,EAAIm/R,EAAO3vS,OAAQwQ,IACvChN,KAAK83kB,YAAY3rS,EAAOn/R,GAAIs0jB,GAEhClqQ,EAAmB,EACnBx0D,EAAY,OAGf,GAAIslQ,EAAM5Q,2BAA2B6O,GACtC,IAAK,IAAIjqgB,EAAI0mQ,EAAW1mQ,EAAIgsgB,EAAM5Q,gBAAgBD,aAAa76f,OAAQN,IAAK,CACxE,IAAI6rE,EAAOmgc,EAAM5Q,gBAAgBD,aAAan7f,GAC1C6rE,EAAKknK,WAAai5R,EAAM5Q,gBAAgBxlf,OACxC9R,KAAK83kB,YAAY/vgB,EAAMu5f,QAI9B,GAAIp5D,EAAM5Q,2BAA2B2P,GACtC,IAAS/qgB,EAAI0mQ,EAAW1mQ,EAAIgsgB,EAAM5Q,gBAAgBD,aAAa76f,OAAQN,IAAK,CACxE,IAAIwpE,EAAMwic,EAAM5Q,gBAAgBD,aAAan7f,GAC7C8D,KAAK83kB,YAAYpygB,EAAK47f,GACtB,IAAS59iB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACzCgiD,EAAI2xb,aAAa3ze,GAAGurN,SAAWvpK,EAAI5zD,WAK1C,GAAIo2f,EAAM5Q,2BAA2B8O,GACtC,IAASlqgB,EAAI0mQ,EAAW1mQ,EAAIgsgB,EAAM5Q,gBAAgBD,aAAa76f,OAAQN,IAAK,CACxE,IAAIg/gB,EAAYhT,EAAM5Q,gBAAgBD,aAAan7f,GACnD8D,KAAK83kB,YAAY58D,EAAWomD,KAIxCnsE,EAAO/5f,UAAU08kB,YAAc,SAAUjyE,EAAQ1mf,GACzCA,EACA0mf,EAAO/zf,QAGP+zf,EAAO/zf,SAGfqjf,EAAO/5f,UAAUglkB,kBAAoB,WACjC,IAAInqf,EAAYj2E,KAAKwuf,OAAOv4a,UACxBj2E,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,yBAC5DlpiB,KAAKykkB,sBAAsBxuf,EAAU14E,OAAO,IAMpD43f,EAAO/5f,UAAUikkB,YAAc,WAC3B,IAAIppf,EAAYj2E,KAAKwuf,OAAOv4a,UAC5B,GAAIA,EAAU2hK,QACV53O,KAAK+3kB,gBAAgB9hgB,GAAW,OAE/B,CACDj2E,KAAK4sc,YAAY,aACjB,IAAIorI,EAAgBh4kB,KAAK+hkB,uBAAuB9rf,GAAW,GACvDj2E,KAAK+3hB,eAAiB/3hB,KAAK+3hB,cAAcmR,yBACrC8uC,EACAh4kB,KAAK+3hB,cAAcmR,4BAAyBhuiB,GAGxC8E,KAAKwkkB,iBAAiBvuf,IACtBj2E,KAAKykkB,sBAAsBxuf,EAAUh3D,KAAK,GAE9Cjf,KAAKu6jB,SAAStkf,OAQ9Bk/a,EAAO/5f,UAAU68kB,6BAA+B,WAE5C,IAAK,IADD9M,GAA0B,EACrBjvkB,EAAI,EAAGA,EAAI8D,KAAK29jB,wBAAwBnhkB,OAAQN,IAAK,CAC1D,IAAIg8kB,EAAWl4kB,KAAK29jB,wBAAwBzhkB,GAC5C,GAA8B,IAA1Bg8kB,EAAStkE,aAAoB,CAC7B,IAAIukE,EAAgBD,EACpB,GAAIC,GAAiBA,EAAc12kB,YAAgF,IAAnEzB,KAAK29jB,wBAAwBp/jB,QAAQ45kB,EAAc12kB,WAAmB,CAClH,IAAIskB,EAAW/lB,KAAK29jB,wBAAwBp/jB,QAAQ45kB,EAAc12kB,WAC9DokB,EAAa7lB,KAAK29jB,wBAAwBp/jB,QAAQ45kB,GACtDn4kB,KAAK29jB,wBAAwBh1iB,OAAO5C,EAAU,GAC9C/lB,KAAK29jB,wBAAwBh1iB,OAAO9C,EAAY,QAGhD7lB,KAAKg4hB,mBAAmBh4hB,KAAK+3hB,cAAcmR,uBAAuBl2e,QAClEhzD,KAAK+3hB,cAAcsR,gBACnBrpiB,KAAK0jkB,iBAAiByU,EAAc94kB,SACpCW,KAAK+3hB,cAAcQ,uBACnB4yC,GAA0B,MAG7B,CACD,IAAIiN,EAAcF,EAClB,GAAIE,GAAeA,EAAY32kB,YAA8E,IAAjEzB,KAAK29jB,wBAAwBp/jB,QAAQ65kB,EAAY32kB,WAAmB,CACxGskB,EAAW/lB,KAAK29jB,wBAAwBp/jB,QAAQ65kB,EAAY32kB,WAC5DokB,EAAa7lB,KAAK29jB,wBAAwBp/jB,QAAQ65kB,GACtDp4kB,KAAK29jB,wBAAwBh1iB,OAAO5C,EAAU,GAC9C/lB,KAAK29jB,wBAAwBh1iB,OAAO9C,EAAY,QAGhD7lB,KAAKg4hB,mBAAmBh4hB,KAAK+3hB,cAAcmR,uBAAuBl2e,QAClEhzD,KAAK+3hB,cAAcsR,gBACnBrpiB,KAAK0jkB,iBAAiB0U,EAAY/4kB,SAClCW,KAAK+3hB,cAAcQ,uBACnB4yC,GAA0B,GAKtC,OADAnrkB,KAAK29jB,2BACEwN,GAKXh2E,EAAO/5f,UAAU2mkB,uBAAyB,SAAU9rf,EAAWoigB,GAC3D,IAAIL,EAAgBh4kB,KAAKs4kB,8BAA8BrigB,EAAWoigB,EAAapigB,EAAU14E,MAAO04E,EAAUh3D,KACtGipY,EAAe,IAAIgmJ,GAAaj4d,EAAUutb,OAC1C8/D,EAAYtjkB,KAAKu4kB,cAAezmkB,MAAOmkE,EAAU6pf,eACjDn0R,EAAW3rS,KAAKijjB,YAAYqgB,EAAUrsE,UAAWqsE,EAAU33jB,QAG/D,OAFAu8Y,EAAaynJ,yBAAyBhkQ,EAAS1hP,KAAM0hP,EAAShgS,QAC9DsqE,EAAU0ne,cAAcz1J,GAAc,GAC/B8vL,GAKX7iF,EAAO/5f,UAAU28kB,gBAAkB,SAAU9hgB,EAAW4jb,GACpD,IAAI3mZ,EAAUlzG,KAAK+3hB,cAEnB,GAAI7kb,IAAY2mZ,IAAc3mZ,EAAQkwW,WAAalwW,EAAQiwW,UAAW,CAClE,IAAIq1H,EAActle,EAAQokX,UAAUpkX,EAAQokX,UAAU96d,OAAS,GAC3Di8kB,EAAiBz4kB,KAAK6/jB,iBAAiB5pf,EAAU14E,OACjDm7kB,EAAe14kB,KAAK6/jB,iBAAiB5pf,EAAUh3D,KAEnD,GAA2B,wBAAvBu5jB,EAAYxlhB,QAAoCwlhB,EAAY7Y,iBAAmB3/jB,KAAKwngB,qBAAqBixE,EAAexhF,UAAWwhF,EAAe9skB,OAAOuB,aACzJsrkB,EAAYz4C,cAAgB//hB,KAAKwngB,qBAAqBkxE,EAAazhF,UAAWyhF,EAAa/skB,OAAOuB,YAElG,YADAgmG,EAAQo7V,OAIhB,IAAI2oD,EAAYhhb,EAAU14E,MAAM05f,UAC5B0hF,EAAoB1igB,EAAU14E,MAAMmuhB,cACpC//gB,EAASsqE,EAAU14E,MAAMoO,OACzBq9f,EAAgB,EAChB4nC,EAAY+nC,EAAkB5vE,UAAUp9f,EAAQq9f,GAChDxqW,EAASoyY,EAAU5viB,QAEvB,GADAgogB,EAAgB4nC,EAAU9+hB,MAEtB0sJ,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WACxCZ,GAAcU,uBAAuBhhW,GAAS,CAC9C,IAAI3/I,EAAQ2/I,EAAOohW,WACf3gf,EAAMu/I,EAAOmhW,SAIjB,OAHA1pb,EAAU14E,MAAM0xiB,qBAAqBpwhB,EAAMorC,KAAMprC,EAAMorC,KAAKsS,UAAU19C,EAAO,IAC7Eo3D,EAAUh3D,IAAIgwhB,qBAAqBhwhB,EAAIgrC,KAAMhrC,EAAIgrC,KAAKsS,UAAUt9C,EAAK,GAAK,QAC1Eg3D,EAAU+le,sBAAqB,GAIvC,GAAIx9Y,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,UAAiB,CAC7D,IAAIk2C,EAAa3/d,EAAU27d,wBAAwBpzY,GACnD,GAAIo3Y,aAAsBn2C,GAMtB,OALAjhW,EAASo3Y,EAAWh2C,WACpB3I,EAAYz4V,EAAOv0G,KAAKgtc,UACxBtrf,EAAS6yJ,EAAOv0G,KAAKsS,UAAUiiG,EAAQ,GACvCvoF,EAAUh3D,IAAIgwhB,qBAAqBzwY,EAAOv0G,KAAMt+C,QAChDsqE,EAAU+le,sBAAqB,GAG1BpG,IAAep3Y,IAEpBy4V,GADAz4V,EAASo3Y,GACU3rf,KAAKgtc,UACxBtrf,EAAS6yJ,EAAOv0G,KAAKsS,UAAUiiG,EAAQA,EAAOhiK,SAGtD,GAAIgiK,IAAWA,aAAkBsqW,IAA8C,IAAxBtqW,EAAOo1W,cACvDp1W,EAAOk0W,wBAAwB5J,MAC9BtqW,aAAkBsqW,KAElB7R,GADAz4V,EAASA,EAAOk0W,cACGzod,KAAKgtc,UACxBtrf,EAAS6yJ,EAAOv0G,KAAKsS,UAAUiiG,EAAQA,EAAOhiK,SAE5B,IAAlBgiK,EAAOhiK,QAAgBgiK,EAAOixO,oBAAoBq5H,IAAsBtqW,EAAOk0W,wBAAwB5J,IAAoB,CACvHjqf,EAAQ2/I,EAAOk0W,aACfzzf,EAAMu/I,EAAOixO,SASjB,OARAx5T,EAAU14E,MAAM0xiB,qBAAqBpwhB,EAAMorC,KAAMprC,EAAMorC,KAAKsS,UAAU19C,EAAO,IAC7Eo3D,EAAUh3D,IAAIgwhB,qBAAqBhwhB,EAAIgrC,KAAMhrC,EAAIgrC,KAAKsS,UAAUt9C,EAAK,GAAK,GAC1Ejf,KAAK4sc,YAAY,aACjB5sc,KAAK+hkB,uBAAuB9rf,GAAW,GACnCj2E,KAAKwkkB,iBAAiBvuf,IACtBj2E,KAAKykkB,sBAAsBxuf,EAAUh3D,KAAK,QAE9Cjf,KAAKu6jB,SAAStkf,GAOtB,GAHK4jb,GACD75f,KAAK4sc,YAAY,aAEjBjhc,IAAWsqE,EAAUm4d,eAAen3C,IAAchhb,EAAU14E,MAAMmuhB,cAAc7Z,cAAe,CAC/F,GAAI5a,EAAUhF,gBAAgB+F,aAA+D,IAAjDf,EAAUhF,gBAAgB+F,WAAWqC,OAE7E,YADAr6f,KAAK0oiB,iBAAYxtiB,GAGrB,GAAkD,IAA9C+7f,EAAUhF,gBAAgBrjP,gBAE1B,YADA5uQ,KAAKmoiB,uBAAuB,kBAAmB,GAAG,GAAO,GAG7D,GAA6C,IAAzClxC,EAAUhF,gBAAgBmL,WAE1B,YADAp9f,KAAKmoiB,uBAAuB,aAAc,GAAG,GAAO,GAGxD,GAAgD,SAA5ClxC,EAAUhF,gBAAgBjvd,cAE1B,YADAhjC,KAAKmoiB,uBAAuB,gBAAiB,QAAQ,GAAO,GAGhE,GAAIlxC,EAAUoP,kCAAkCnP,GAAiB,CAC7Djhb,EAAUutb,MAAMliB,mBAAoB,EACpC,IAAIyvD,EAAoB95C,EAAUoP,uBAIlC,GAAI0qC,EAAkBn5T,UAClB53O,KAAKkmkB,YAAYn1B,GACjB/wiB,KAAK21kB,gBAAgB5kC,OAEpB,CACD/wiB,KAAKkmkB,YAAYjvE,GACjB,IAAI8d,EAAY/0gB,KAAKwuf,OAAOv4a,UAAUo4d,cAAc0C,EAAkBr3Z,WAClE4mP,EAAgBywK,EAAkB15C,aAAa76f,OAAS,EACxDq2gB,OAAa,EACjB,IAAK5b,EAAUr/Q,UACX,IAAK,IAAI17O,EAAI,EAAGA,EAAI+6f,EAAUI,aAAa76f,OAAQN,IAC/C22gB,EAAa5b,EAAUI,aAAan7f,GACpC60iB,EAAkB15C,aAAa7yf,KAAKqugB,GACpC5b,EAAUI,aAAa1ue,OAAOzsB,EAAG,GACjCA,IACA22gB,EAAW5b,UAAY85C,EAG/B/wiB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkB4kB,EAAmBzwK,EAAe,GACvErqT,EAAUo2H,QAAQ0kW,EAAkB15C,aAAa/2H,GAAgBy0I,GAAW,GAC5E/0gB,KAAK21kB,gBAAgB1+E,GAEzBj3f,KAAK44kB,wBAEL54kB,KAAKu6jB,SAAStkf,QAIVj2E,KAAK+3hB,gBACL/3hB,KAAK+3hB,cAAcmR,4BAAyBhuiB,OAInD,CACI2+f,IACD5jb,EAAUutb,MAAMliB,mBAAoB,GAExC,IAAI8tE,EAAgBpvjB,KAAK6/jB,iBAAiB5pf,EAAU14E,OAEhD08V,GADA44K,EAAa58b,EAAU14E,MAAMmuhB,cACd//gB,EAAS,GACxBsuV,EAAe,IACf44K,EAAaA,EAAWZ,aACxBh4K,EAAej6V,KAAKwuf,OAAOv4a,UAAUo4d,cAAcx7B,GAAc54K,GAErEj6V,KAAK64kB,eAAehmE,EAAY58b,EAAWgkR,GAC3Cj6V,KAAKiviB,qBAAqBmgB,EAAcn4D,UAAWm4D,EAAczjjB,OAAS,GAAG,GAC7E3L,KAAK44kB,wBACA/+E,EAID75f,KAAKuxf,oBAHLvxf,KAAKu6jB,SAAStkf,KAO1Bk/a,EAAO/5f,UAAUw9kB,sBAAwB,SAAU9Y,GAC/C,IAAI7pf,EAAYj2E,KAAKwuf,OAAOv4a,UACxBj2E,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,0BACxDzriB,EAAkBqikB,IAClB9/jB,KAAKykkB,sBAAsBxuf,EAAU14E,OAAO,GAC5CyC,KAAK+3hB,cAAcmR,uBAAuBnJ,YAAc//hB,KAAK+3hB,cAAcmR,uBAAuBy2B,iBAGlG3/jB,KAAK+3hB,cAAcmR,uBAAuBy2B,eAAiBG,EAC3D9/jB,KAAK+3hB,cAAcmR,uBAAuBnJ,YAAc+/B,KAIpE3qE,EAAO/5f,UAAUy9kB,eAAiB,SAAUhmE,EAAY58b,EAAWtqE,GAG/D,IAAK,IAFDuT,EAAQ,EACRuqR,EAAYopO,EAAW5b,UAAUI,aAAa94f,QAAQs0gB,GACjD32gB,EAAI,EAAGA,EAAI22gB,EAAWz4f,SAAS5d,OAAQN,IAAK,CACjD,IAAIsiK,EAASq0W,EAAWz4f,SAASle,GACjC,KAAIsiK,aAAkB2qW,IAAtB,CAGA,GAAIx9f,EAASuT,EAAQs/I,EAAOhiK,OAAQ,CAChC,IAAIwsgB,EAAgBr9f,EAASuT,EAC7B,GAAIvT,IAAWuT,GAA2B,IAAlBs/I,EAAOhiK,OAC3BwD,KAAK6jkB,qBAAqBrla,GAC1Bq0W,EAAWz4f,SAASuO,OAAOzsB,EAAG,GAC9B8D,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBtZ,EAAW5b,UAAWxtN,EAAWvtS,GACtE8D,KAAK21kB,gBAAgBn3a,OAEpB,CACD,IAAI/2F,EAAO,IAAImhc,GACfnhc,EAAK4qb,gBAAgBsH,WAAWn7V,EAAO6zV,iBACvC5qb,EAAKz4C,KAAOwvI,EAAOxvI,KAAK6H,OAAOmye,EAAe,GAC9CxqW,EAAOxvI,KAAO8ve,GAAcv6f,OAAOi6J,EAAOxvI,KAAMg6e,EAAe,GAC/DhpgB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBtZ,EAAW5b,UAAWxtN,EAAWvtS,GACtE8D,KAAK21kB,gBAAgBlugB,GAEzB,MAEJvoD,GAASs/I,EAAOhiK,UAMxB24f,EAAO/5f,UAAUkkkB,SAAW,WACxB,IAAIrpf,EAAYj2E,KAAKwuf,OAAOv4a,UAC5B,GAAIA,EAAU2hK,QACV53O,KAAK84kB,aAAa7igB,GAAW,OAE5B,CAIDj2E,KAAK4sc,YAAY,UACjB5sc,KAAKs4kB,8BAA8BrigB,GAAW,EAAOA,EAAU14E,MAAO04E,EAAUh3D,KAChF,IAAIipY,EAAe,IAAIgmJ,GAAaj4d,EAAUutb,OAC9CxjgB,KAAK+uiB,2BAA2B7mJ,EAAcjyU,EAAU6pf,cACxD7pf,EAAU0ne,cAAcz1J,GAAc,GAEtCloZ,KAAKu6jB,SAAStkf,KAoBtBk/a,EAAO/5f,UAAU09kB,aAAe,SAAU7igB,EAAW4jb,GAEjD,IAAI5C,EAAYhhb,EAAU14E,MAAM05f,UAC5Btrf,EAASsqE,EAAU14E,MAAMoO,OACzBq9f,EAAgB,EAChB4nC,EAAY35C,EAAU8R,UAAU9yb,EAAU14E,MAAMoO,OAAQq9f,GACxDxqW,EAASoyY,EAAU5viB,QAEvB,GADAgogB,EAAgB4nC,EAAU9+hB,MACtBmlf,EAAUhF,gBAAgB+F,aAA+D,IAAjDf,EAAUhF,gBAAgB+F,WAAWqC,QAC7Er6f,KAAKwuf,OAAO0sC,oBAAgD,SAA1Bjld,EAAU4ic,YAC5C74gB,KAAK0oiB,iBAAYxtiB,OAFrB,CASA,GAJKuC,EAAkB+gK,IAAWwqW,IAAkBxqW,EAAOhiK,QAAWiB,EAAkB+gK,EAAOixO,YAC3FjxO,EAASA,EAAOixO,SAChBu5H,EAAgB,IAEfvrgB,EAAkB+gK,GAAS,CAC5B,IAAIu6a,OAAqB79kB,EACrBg3iB,EAAaj8d,EAAUy6d,oBAAoBlyY,GAI/C,GAHI0zY,aAAsB//B,KACtB4mE,EAAqB7mC,IAEpBz0iB,EAAkBs7kB,IAAuBA,aAA8Bt5E,IACpC,IAAjCs5E,EAAmBr5E,UAMtB,OALAlhW,EAASu6a,EAAmBp5E,SAC5B1I,EAAYz4V,EAAOv0G,KAAKgtc,UACxBtrf,EAAS6yJ,EAAOv0G,KAAKsS,UAAUiiG,EAAQ,GACvCvoF,EAAUh3D,IAAIgwhB,qBAAqBzwY,EAAOv0G,KAAMt+C,QAChDsqE,EAAU+le,sBAAqB,GAG1Bx9Y,IAAWu6a,IAEhB9hF,GADAz4V,EAASu6a,GACU9uhB,KAAKgtc,UACxBtrf,EAAS6yJ,EAAOv0G,KAAKsS,UAAUiiG,EAAQ,GACnCA,aAAkBihW,IAAwC,IAArBjhW,EAAOkhW,WAC5C/zf,KAIZ,GAAI6yJ,IAAWA,aAAkBsqW,IAA8C,IAAxBtqW,EAAOo1W,cACvDp1W,EAAOixO,oBAAoBq5H,MAC1BtqW,aAAkBsqW,KAElB7R,GADAz4V,EAASA,EAAOixO,UACGxlV,KAAKgtc,UACxBtrf,EAAS6yJ,EAAOv0G,KAAKsS,UAAUiiG,EAAQ,IAErB,IAAlBA,EAAOhiK,QAAgBgiK,EAAOixO,oBAAoBq5H,IAC/CtqW,EAAOk0W,wBAAwB5J,IAAoB,CACtD,IAAIkwE,EAAgBx6a,EAAOk0W,aACvB0lE,EAAc55a,EAAOixO,SACzBx5T,EAAU14E,MAAM0xiB,qBAAqB+pC,EAAc/uhB,KAAM+uhB,EAAc/uhB,KAAKsS,UAAUy8gB,EAAe,IACrG/igB,EAAUh3D,IAAIgwhB,qBAAqBmpC,EAAYnuhB,KAAMmuhB,EAAYnuhB,KAAKsS,UAAU67gB,EAAa,GAAK,GAClGp4kB,KAAK4sc,YAAY,UACjB5sc,KAAKs4kB,8BAA8BrigB,GAAW,EAAOA,EAAU14E,MAAO04E,EAAUh3D,KAChF,IAAIipY,EAAe,IAAIgmJ,GAAaj4d,EAAUutb,OAI9C,OAHAxjgB,KAAK+uiB,2BAA2B7mJ,EAAcjyU,EAAU6pf,cACxD7pf,EAAU0ne,cAAcz1J,GAAc,QACtCloZ,KAAKu6jB,SAAStkf,GAItB,GAAIA,EAAU14E,MAAMmuhB,cAAc5Z,cAAgBnmgB,IAAW3L,KAAKwuf,OAAOv4a,UAAUo4d,cAAcp4d,EAAU14E,MAAMmuhB,eAAgB,CAC7H,GAAIz0B,EAAUsR,eAAiB9qgB,EAAkBw5f,EAAUsZ,YACvD,OAEJ,IAAIwgC,OAAoB71iB,EAEpBqnhB,EAAgBtsc,EAAUq7d,sBAAsBr6C,GACpD,GAAIx5f,EAAkB8khB,GAAgB,CAClC,GAAI52gB,EAAS,EACT,OAMA,GAHIsrf,EAAU4W,0BAA0B3W,KACpC65C,EAAoB95C,EAAU4W,gBAE9B5W,EAAU4W,0BAA0B5G,GACpC,OAEJ,GAAIxpgB,EAAkBsziB,GAClB,OAKPl3C,GACD75f,KAAK4sc,YAAY,UAErB,IAAI02H,EAAYtjkB,KAAK6/jB,iBAAiB5pf,EAAU14E,OAMhD,GALA04E,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YACrFlN,KAAKqmkB,oBAAoBpwf,IACzBj2E,KAAK44kB,sBAAsB3igB,EAAU6pf,cAEzC7pf,EAAUutb,MAAMliB,mBAAoB,EAChC2V,EAAUr/Q,UAGV,GAFA53O,KAAKkmkB,YAAYjvE,GACjBj3f,KAAK21kB,gBAAgB1+E,GACjBx5f,EAAkB8khB,GAClB,GAAI9khB,EAAkBsziB,GAAoB,CAEtC,IAAIkoC,EAAgBhjgB,EAAUy4d,wBAlCvBxziB,GAkC0D,EAC7D8E,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,0BAC5DlpiB,KAAKykkB,sBAAsBxuf,EAAU14E,OAAO,GAE5CyC,KAAK+3hB,cAAcmR,uBAAuBnJ,YAAc//hB,KAAKwngB,0BAtC1DtsgB,EAsC6F+9kB,EAAc/rkB,kBAIlH+oE,EAAUgqe,gBAAgBlP,GAAmB,GAC7C/wiB,KAAK44kB,6BAIT3igB,EAAUgqe,gBAAgB19B,GAAe,OAG5C,CACDtrB,EAAYA,EAAU8P,cAAc/mgB,KAAKwuf,QAEzC,IAAI4+B,EAAmBpthB,KAAK2xgB,eAAe1a,EAAWA,EAAUj6e,WAAY,EAAGi5D,EAAU14E,MAAMmuhB,cAAez1c,EAAU14E,MAAMoO,QAAQ,GACtI3L,KAAKg3kB,oBAAoB5pD,EAAkBn3c,EAAW,GACtDj2E,KAAK21kB,gBAAgB1+E,GACrBj3f,KAAK+uiB,2BAA2B94d,EAAU14E,MAAO04E,EAAU6pf,cAC3D7pf,EAAU0ne,cAAc1ne,EAAU14E,OAAO,GAG7CyC,KAAKu6jB,SAAStkf,QAIdj2E,KAAKk5kB,qBAAqBjjgB,EAAW4jb,EAAW5C,KAGxD9B,EAAO/5f,UAAU89kB,qBAAuB,SAAUjjgB,EAAW4jb,EAAW5C,GAC/D4C,IACD5jb,EAAUutb,MAAMliB,mBAAoB,EACpCthf,KAAK4sc,YAAY,WAEjB5sc,KAAKqmkB,oBAAoBpwf,KACzBj2E,KAAKykkB,sBAAsBxuf,EAAU14E,OAAO,GAC5CyC,KAAK+3hB,cAAcmR,uBAAuBnJ,YAAc//hB,KAAK+3hB,cAAcmR,uBAAuBy2B,gBAEtG,IAAIvQ,EAAgBpvjB,KAAK6/jB,iBAAiB5pf,EAAU14E,OAChDs1gB,EAAa58b,EAAU14E,MAAMmuhB,cAC7BzxL,EAAehkR,EAAU14E,MAAMoO,OAC/BurU,EAAajhQ,EAAUo4d,cAAcp4d,EAAU14E,MAAMmuhB,eACrDzxL,GAAgB/iB,IAChB27L,EAAaA,EAAWD,SACxB34K,GAA8B/iB,GAElCl3U,KAAK64kB,eAAehmE,EAAY58b,EAAWgkR,GAC3Cj6V,KAAKiviB,qBAAqBmgB,EAAcn4D,UAAWm4D,EAAczjjB,QAAQ,GACpEkuf,EAID75f,KAAKuxf,oBAHLvxf,KAAKu6jB,SAAStkf,IAMtBk/a,EAAO/5f,UAAU47kB,oBAAsB,SAAU//E,EAAWhhb,EAAWy+f,GACnE,IAAIj3kB,EAAkBw5f,EAAUK,iBAAhC,CAGAL,EAAYA,EAAU8P,cAAc/mgB,KAAKwuf,QACzC,IAAI+zB,EAAgBtsc,EAAUq7d,sBAAsBr6C,GACpD,KAAIA,EAAUsR,eAAiB9qgB,EAAkBw5f,EAAUsZ,aAAe9ygB,EAAkB8khB,IAA5F,CAIctrB,EAAUK,2BAA2BR,IAAaG,EAAUK,gBAA1E,IACIlyb,OAAQlqE,EAOZ,GALIkqE,EADA6Q,EAAU45d,qBAAqB54C,aAAsBgQ,GAC7Chxb,EAAU45d,qBAAqB54C,QAG/B/7f,EAERqnhB,EAAcha,gBAAkB9qgB,EAAkB2nE,IAAUA,EAAMjhE,SAASo+gB,EAAc/Z,iBACzF,GAAIksE,EAAa,EAAG,CAKhB,IAAI/okB,EAAS,EACb3L,KAAKkmkB,YAAYjvE,GACjBj3f,KAAKwuf,OAAOlhc,OAAOuyd,oBAAoB0C,GACvCvihB,KAAKwuf,OAAOlhc,OAAOuyd,oBAAoB5oB,GACvC,IAAK,IAAI/6f,EAAI+6f,EAAUI,aAAa76f,OAAS,EAAGN,GAAK,EAAGA,IAEpD,IAAK,IADD+tD,EAAOgtc,EAAUI,aAAan7f,GACzBwnB,EAAIumC,EAAK7vC,SAAS5d,OAAS,EAAGknB,GAAK,EAAGA,IAAK,CAChD,IAAI1iB,EAAUipD,EAAK7vC,SAASsJ,GAC5B/X,GAAU3K,EAAQxE,OAClB+lhB,EAAcvlgB,WAAW5C,SAASnf,QAAQ+F,GAC1CA,EAAQipD,KAAOs4d,EAAcvlgB,WAIrChd,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkB5J,EAAe,EAAG,GACnD52gB,EAAS,IACTsqE,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqB+a,EAAe52gB,EAAOuB,mBAKjF,GAAIwnkB,EAAa,EAAG,CAKCz9E,EAAUI,aAAa76f,OACzB+lhB,EAAc1b,kBAC7B0b,EAAgBA,EAAcxb,cAAc/mgB,KAAKwuf,QACjDxuf,KAAKwuf,OAAOlhc,OAAOuyd,oBAAoB0C,GACvCvihB,KAAKwuf,OAAOlhc,OAAOuyd,oBAAoB5oB,GACvCj3f,KAAKm5kB,0BAA0BliF,EAAWsrB,GAC1C,IAASrmhB,EAAI,EAAGA,EAAIqmhB,EAAclrB,aAAa76f,OAAQN,IAAK,CACxD,IAAIsiK,EAAS+jX,EAAclrB,aAAan7f,GACxCqmhB,EAAclrB,aAAa1ue,OAAOzsB,EAAG,GACrC+6f,EAAUI,aAAa7yf,KAAKg6J,GAC5BA,EAAOy4V,UAAYA,EACnB/6f,IAEsC,IAAtCqmhB,EAAclrB,aAAa76f,QAC3B+lhB,EAAclrB,aAAa7yf,KAAK,IAAI6igB,GAAWkb,IAEnDvihB,KAAKkmkB,YAAY3jD,GACjBvihB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAW,EAAG,GACnDj3f,KAAK21kB,gBAAgBpzD,OAIjCptB,EAAO/5f,UAAU+9kB,0BAA4B,SAAU/rD,EAAkB7K,GACjEvihB,KAAKwuf,OAAOv4a,UAAU6pf,eAAiB9/jB,KAAKwngB,qBAAqB+a,EAAe,WAC3CrnhB,IAArCqnhB,EAAc/b,qBAEdxmgB,KAAKwuf,OAAOv4a,UAAU6pf,aAAe9/jB,KAAKwngB,qBAAqB4lB,EAAkBpthB,KAAKwuf,OAAOv4a,UAAUo4d,cAAcjhB,EAAiB1zY,WAAWxsI,cAGzJiof,EAAO/5f,UAAUopkB,iBAAmB,SAAUvuf,GAC1C,OAAQj2E,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,yBAC7DzriB,EAAkBuC,KAAK+3hB,cAAcmR,uBAAuBnJ,cAEvE5qC,EAAO/5f,UAAUirkB,oBAAsB,SAAUpwf,GAC7C,OAAQj2E,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,yBAC7DzriB,EAAkBuC,KAAK+3hB,cAAcmR,uBAAuBy2B,iBAEvExqE,EAAO/5f,UAAUmpkB,kBAAoB,WACjC,OAAOvkkB,KAAKwuf,OAAOgV,MAAMszE,oBAAsB92kB,KAAK+3hB,cAAcl+B,WAGtE1E,EAAO/5f,UAAUk9kB,8BAAgC,SAAUrigB,EAAWoigB,EAAa/yR,EAAey6O,GAC9F,IAAI6gB,EAAWt7P,EACXu7P,EAAS9gB,EACRz6O,EAAcgqP,cAAcvP,KAC7B6gB,EAAW7gB,EACX8gB,EAASv7P,GAEb,IAAIg+Q,EAAYtjkB,KAAK6/jB,iBAAiBjf,GACtC3qe,EAAU6pf,aAAe9/jB,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YACzF,IAAI8qkB,GAAgB,EACpB,GAAIK,GAAez3B,EAASvR,kBAAkBwR,GAAS,CAEnD,GAAID,EAASj1iB,OAASk1iB,EAAOl1iB,QAAUi1iB,EAASj1iB,SAAWsqE,EAAUy4d,mBAAmBmS,EAAO5pD,WAAY,CAEvG+gF,EADgB/hgB,EAAU45d,qBAAqB+Q,EAAS3pD,qBACnBgQ,KAGnB,IAAlB45C,EAAOl1iB,QAAgBk1iB,EAAOl1iB,OAASsqE,EAAUy4d,mBAAmBmS,EAAO5pD,aACtE4pD,EAAO5pD,UAAUsR,eAAiB9qgB,EAAkBojjB,EAAO5pD,UAAUsZ,cAC1E8nE,GAAc,GAGtB,IAAKL,EAAe,CAChB/hgB,EAAUutb,MAAMliB,mBAAoB,EAChCthf,KAAKqmkB,oBAAoBpwf,KACzBj2E,KAAK+3hB,cAAcmR,uBAAuBy2B,eAAiB1pf,EAAU6pf,cAEzE,IAAI4U,EAAc2D,EAAc,EAAI,EACpCr4kB,KAAKsmkB,sBAAsBzlB,EAAO5pD,UAAWhhb,EAAW2qe,EAAUC,EAAQ6zB,GAE9E,OAAOsD,GAMX7iF,EAAO/5f,UAAUwxc,YAAc,SAAU55Y,GACjChzD,KAAKwuf,OAAOgV,MAAMszE,mBAClB92kB,KAAK+3hB,cAAci1C,kBAAkBh6gB,IAO7Cmic,EAAO/5f,UAAU48hB,mBAAqB,SAAUhle,GACxChzD,KAAKwuf,OAAOgV,MAAMszE,mBAClB92kB,KAAK+3hB,cAAcC,mBAAmBh4hB,KAAKwuf,OAAOv4a,UAAWjjB,IAWrEmic,EAAO/5f,UAAU2rkB,cAAgB,SAAUhsS,EAAc/kR,EAAOD,GAC5D,IAAIqjkB,EAAkB,IAAIvwE,IAAgB,GAC1CuwE,EAAgBr5Q,YAAchlC,EAC9Bq+S,EAAgBpjkB,MAAQA,EACxBojkB,EAAgBrjkB,OAASA,EACzB/V,KAAKq5kB,sBAAsBD,IAE/BjkF,EAAO/5f,UAAUi+kB,sBAAwB,SAAUD,GAC/C,IAAInjgB,EAAYj2E,KAAKwuf,OAAOv4a,UAC5Bj2E,KAAK4sc,YAAY,gBACjB5sc,KAAKs5kB,eAAerjgB,EAAWmjgB,GAC/Bp5kB,KAAKokkB,wBAAwBnuf,EAAWmjgB,GACxCp5kB,KAAKu6jB,SAAStkf,IAElBk/a,EAAO/5f,UAAUk+kB,eAAiB,SAAUrjgB,EAAWmjgB,GACnD,IAAIpuS,EAAU/0N,EAAU14E,MAAM05f,UAAU6F,WACpC1/C,EAAYpyK,EAAQ+rN,cAAc35C,UAAYpyK,EAAQ+rN,cAAc76O,WAAa8uB,EAAQ+rN,cAAc36O,YACvG5L,EAAaw6B,EAAQ+rN,cAAcvmP,WAAaw6B,EAAQ+rN,cAAc56O,UAAY6uB,EAAQ+rN,cAAc56O,UAExGi9T,EAAgBpjkB,MAAQonc,IACxBg8H,EAAgBrjkB,OAASqjkB,EAAgBrjkB,OAASqnc,EAAYg8H,EAAgBpjkB,MAC9EojkB,EAAgBpjkB,MAAQonc,GAExBg8H,EAAgBrjkB,OAASy6P,IACzB4oU,EAAgBpjkB,MAAQojkB,EAAgBpjkB,MAAQw6P,EAAa4oU,EAAgBrjkB,OAC7EqjkB,EAAgBrjkB,OAASy6P,IAOjC2kP,EAAO/5f,UAAUgpkB,wBAA0B,SAAUnuf,EAAWi8b,GACxDlygB,KAAKukkB,sBACLtuf,EAAUutb,MAAMliB,mBAAoB,GAEnCrra,EAAU2hK,SACX53O,KAAK+/jB,uBAAuB9pf,GAEhCj2E,KAAKggkB,uBACLhgkB,KAAK6kkB,qBAAqB3yD,GACtBlygB,KAAKwkkB,iBAAiBvuf,IACtBj2E,KAAKykkB,sBAAsBxuf,EAAU14E,OAAO,GAEhDyC,KAAKuxf,qBAKT4D,EAAO/5f,UAAUm+kB,WAAa,WAC1B,IAAIxiF,EAAgB,IAAIC,GACpBhhf,EAAQhW,KAAKwuf,OAAOv4a,UAAU8gb,cAAc35C,UAC5Crnc,EAAS/V,KAAKwuf,OAAOv4a,UAAU8gb,cAAcvmP,WAC7Cx6P,EAAQD,IACRghf,EAAc35C,UAAYrnc,EAC1Bghf,EAAcvmP,WAAax6P,GAE/BhW,KAAKkqiB,0BAAqBhviB,EAAW67f,IAKzC5B,EAAO/5f,UAAUo+kB,YAAc,WAC3B,IAAIziF,EAAgB,IAAIC,GACpBhhf,EAAQhW,KAAKwuf,OAAOv4a,UAAU8gb,cAAc35C,UAC5Crnc,EAAS/V,KAAKwuf,OAAOv4a,UAAU8gb,cAAcvmP,WAC7Cx6P,EAAQD,IACRghf,EAAc35C,UAAYrnc,EAC1Bghf,EAAcvmP,WAAax6P,GAE/BhW,KAAKkqiB,0BAAqBhviB,EAAW67f,IAEzC5B,EAAO/5f,UAAUq2H,WAAa,WAC1B,IAAIlzF,EAAS,IAAIy4d,GASjB,OARAz4d,EAAO89O,aAAer8Q,KAAKwuf,OAAOv4a,UAAU8gb,cAAc16O,aAC1D99O,EAAO49O,UAAYn8Q,KAAKwuf,OAAOv4a,UAAU8gb,cAAc56O,UACvD59O,EAAO29O,WAAal8Q,KAAKwuf,OAAOv4a,UAAU8gb,cAAc76O,WACxD39O,EAAO69O,YAAcp8Q,KAAKwuf,OAAOv4a,UAAU8gb,cAAc36O,YACzD79O,EAAOiyO,WAAaxwQ,KAAKwuf,OAAOv4a,UAAU8gb,cAAcvmP,WACxDjyO,EAAO6+a,UAAYp9c,KAAKwuf,OAAOv4a,UAAU8gb,cAAc35C,UACvD7+a,EAAOskf,eAAiB7ihB,KAAKwuf,OAAOv4a,UAAU8gb,cAAc8rB,eAC5Dtkf,EAAOohgB,eAAiB3/hB,KAAKwuf,OAAOv4a,UAAU8gb,cAAc4oC,eACrDphgB,GAKX42d,EAAO/5f,UAAUq+kB,kBAAoB,SAAUv+gB,GAC3C,IAAI67b,EAAgB/2f,KAAKyxH,aACR,sBAAbv2D,GAAiD,WAAbA,GACpC67b,EAAc56O,UAAY,GAC1B46O,EAAc16O,aAAe,GAC7B06O,EAAc76O,WAAa,GAC3B66O,EAAc36O,YAAc,IAEV,WAAblhN,GACL67b,EAAc56O,UAAY,GAC1B46O,EAAc16O,aAAe,GAC7B06O,EAAc76O,WAAa,GAC3B66O,EAAc36O,YAAc,IAEV,aAAblhN,GACL67b,EAAc56O,UAAY,GAC1B46O,EAAc16O,aAAe,GAC7B06O,EAAc76O,WAAa,GAC3B66O,EAAc36O,YAAc,IAEV,SAAblhN,GACL67b,EAAc56O,UAAY,GAC1B46O,EAAc16O,aAAe,GAC7B06O,EAAc76O,WAAa,IAC3B66O,EAAc36O,YAAc,KAEV,aAAblhN,GACL67b,EAAc56O,UAAY,GAC1B46O,EAAc16O,aAAe,GAC7B06O,EAAc76O,WAAa,GAC3B66O,EAAc36O,YAAc,IAEV,sBAAblhN,IACL67b,EAAc56O,UAAY,GAC1B46O,EAAc16O,aAAe,GAC7B06O,EAAc76O,WAAa,GAC3B66O,EAAc36O,YAAc,IAEhCp8Q,KAAKkqiB,0BAAqBhviB,EAAW67f,IAKzC5B,EAAO/5f,UAAUs+kB,YAAc,SAAUx+gB,GACrC,IAAI67b,EAAgB/2f,KAAKyxH,aACrBz7G,EAAQhW,KAAKwuf,OAAOv4a,UAAU8gb,cAAc35C,UAC5Crnc,EAAS/V,KAAKwuf,OAAOv4a,UAAU8gb,cAAcvmP,WAChC,WAAbt1M,EACIllD,EAAQD,GACRghf,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,QAG3BumP,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,OAGb,YAAbt1M,EACDllD,EAAQD,GACRghf,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,SAG3BumP,EAAc35C,UAAY,OAC1B25C,EAAcvmP,WAAa,OAGb,UAAbt1M,EACDllD,EAAQD,GACRghf,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,SAG3BumP,EAAc35C,UAAY,OAC1B25C,EAAcvmP,WAAa,OAGb,cAAbt1M,EACDllD,EAAQD,GACRghf,EAAc35C,UAAY,IAC1B25C,EAAcvmP,WAAa,QAG3BumP,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,KAGb,cAAbt1M,EACDllD,EAAQD,GACRghf,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,QAG3BumP,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,OAGb,OAAbt1M,EACDllD,EAAQD,GACRghf,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,SAG3BumP,EAAc35C,UAAY,OAC1B25C,EAAcvmP,WAAa,OAGb,OAAbt1M,EACDllD,EAAQD,GACRghf,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,QAG3BumP,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,OAGb,OAAbt1M,EACDllD,EAAQD,GACRghf,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,QAG3BumP,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,OAGb,OAAbt1M,EACDllD,EAAQD,GACRghf,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,SAG3BumP,EAAc35C,UAAY,OAC1B25C,EAAcvmP,WAAa,OAGb,OAAbt1M,IACDllD,EAAQD,GACRghf,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,QAG3BumP,EAAc35C,UAAY,MAC1B25C,EAAcvmP,WAAa,QAGnCxwQ,KAAKkqiB,0BAAqBhviB,EAAW67f,IAMzC5B,EAAO/5f,UAAU2whB,uBAAyB,SAAUR,EAAUE,GAE1D,IADA,IAAIvjB,EAAQujB,EAAsBzrhB,KAAKwuf,OAAOv4a,UAAU45d,qBAAqBtkB,GAAYA,GACjF9thB,EAAkByqgB,IAEtBlogB,KAAKquhB,wBAAwBnmB,GAC7BA,EAAQA,EAAMrB,kBAAkBhhW,MAAM2gW,oBAM9CrR,EAAO/5f,UAAU0whB,qBAAuB,SAAU5jB,GAC9ClogB,KAAKwuf,OAAO00B,cAAcz2d,QAG1B,IAAK,IADDkthB,EADA9+D,EAAe3S,EAAMpL,WAAWhrf,MAE3B4R,EAAI,EAAGA,EAAI1jB,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQknB,IAAK,CAC/C,IAAI6pJ,EAAOvtK,KAAKwuf,OAAOzmQ,MAAMrkO,GAC7B,GAAI6pJ,EAAKq4V,YAAY,GAAG9zf,QAAU+ogB,EAAc,CAC5C8+D,EAAepsa,EAAKq4V,YAAY,GAAG5of,WACnC,OAIR,EAAG,CAEC,GADgBhd,KAAK45kB,gBAAgBD,EAAczxE,GAE/C,MAEJyxE,EAAeA,EAAa9yE,kBAAkBhhW,MAAM2gW,yBAC/CmzE,IAEbxkF,EAAO/5f,UAAUw+kB,gBAAkB,SAAUruD,EAAUrjB,GAQnD,OANIqjB,aAAoBr0B,GACJl3f,KAAK65kB,uBAAuBtuD,EAAUrjB,GAGtClogB,KAAK85kB,wBAAwBvuD,EAAUrjB,IAI/D/S,EAAO/5f,UAAU0+kB,wBAA0B,SAAU10gB,EAAO8ic,GACxD,GAAIA,aAAiBjB,IAAe7hc,EAAMhyB,OAAO80d,GAC7C,OAAO,EAEX,IAAIxic,EAAMN,EAAMpoD,WAChB,EAAG,CAEC,GADoBhd,KAAK+5kB,sBAAsBr0gB,EAAKwic,GAEhD,OAAO,EAEXxic,EAAMA,EAAImhc,kBAAkBhhW,MAAM2gW,yBAC7B9gc,GACT,OAAO,GAEXyvb,EAAO/5f,UAAU2+kB,sBAAwB,SAAUr0gB,EAAKwic,GACpD,GAAIA,EAAMK,gBAA6G,IAA5F7ic,EAAI2xb,aAAa94f,QAAQyB,KAAKwuf,OAAOv4a,UAAU6ge,iBAAiB5uC,EAAMM,iBAE7F,OAAO,EAEX,IAAIzgc,EAAOrC,EAAI1oD,WACf,GACIhd,KAAKg6kB,uBAAuBjygB,EAAMmgc,GAClCngc,EAAOA,EAAKy+b,yBACPz+b,GACT,OAAO,GAEXotb,EAAO/5f,UAAU4+kB,uBAAyB,SAAUjygB,EAAMmgc,GACtD,GAAiC,IAA7Bngc,EAAKsvb,aAAa76f,OAAtB,CAGA,IAAIm9kB,EAAe5xgB,EAAK/qD,WACxB,GACIhd,KAAK45kB,gBAAgBD,EAAczxE,GACnCyxE,EAAeA,EAAa9yE,kBAAkBhhW,MAAM2gW,yBAC/CmzE,KAMbxkF,EAAO/5f,UAAUizhB,wBAA0B,SAAUnmB,GAC7CA,aAAiBhR,GACjBl3f,KAAKi6kB,+BAA+B/xE,GAGpClogB,KAAKk6kB,gCAAgChyE,IAG7C/S,EAAO/5f,UAAU8+kB,gCAAkC,SAAU90gB,GACzD,IAAIM,EAAMN,EAAMpoD,WAChB,GACIhd,KAAKm6kB,8BAA8Bz0gB,GACnCA,EAAMA,EAAImhc,kBAAkBhhW,MAAM2gW,yBAC7B9gc,IAEbyvb,EAAO/5f,UAAU++kB,8BAAgC,SAAUz0gB,GACvD,IAAIqC,EAAOrC,EAAI1oD,WACf,GACIhd,KAAKo6kB,+BAA+BrygB,GACpCA,EAAOA,EAAKy+b,yBACPz+b,IAEbotb,EAAO/5f,UAAUg/kB,+BAAiC,SAAUrygB,GACxD,GAAiC,IAA7BA,EAAKsvb,aAAa76f,OAAtB,CAGA,IAAIm9kB,EAAe5xgB,EAAK/qD,WACxB,GACIhd,KAAKquhB,wBAAwBsrD,GAC7BA,EAAeA,EAAa9yE,kBAAkBhhW,MAAM2gW,yBAC/CmzE,KAEbxkF,EAAO/5f,UAAUy+kB,uBAAyB,SAAU5iF,EAAWiR,GAC3D,GAAIjR,EAAU7jd,OAAO80d,GACjB,OAAO,EAGP,IAAIskE,OAActxkB,EACdgggB,EAAkB,EAMtB,GALKz9f,EAAkBw5f,EAAUhF,kBAAqBx0f,EAAkBw5f,EAAUhF,gBAAgB+F,cAC9Fw0E,EAAcxskB,KAAKwuf,OAAOoxB,YAAY3oB,EAAUhF,gBAAgB+F,WAAWqC,QAC3Ea,EAAkBjE,EAAUhF,gBAAgB+F,WAAWkD,kBAGtDz9f,EAAkB+ukB,KAAiB/ukB,EAAkBuC,KAAKwuf,OAAO20B,oBAAoBqpD,EAAYjyE,mBAE9F98f,EAAkBuC,KAAKwuf,OAAO20B,oBAAoBqpD,EAAYjyE,gBAAgB50a,OAAOu1a,IAAmB,CAGlE,WAFnBl7f,KAAKwuf,OAAOlhc,OAAOotc,aAAa8xE,EAAatxE,GAE/C4d,kBACjB94gB,KAAKwuf,OAAOlhc,OAAO0yd,cAAc/oB,EAAUhF,gBAAgB+F,YAIvE,OAAO,GAEX7C,EAAO/5f,UAAU6+kB,+BAAiC,SAAUhjF,GACxD,IAAKx5f,EAAkBuC,KAAKwuf,OAAOoxB,YAAY3oB,EAAUhF,gBAAgB+F,WAAWqC,SAAU,CAC1F,IAAImyE,EAAcxskB,KAAKwuf,OAAOoxB,YAAY3oB,EAAUhF,gBAAgB+F,WAAWqC,QAC3Ea,EAAkBjE,EAAUhF,gBAAgB+F,WAAWkD,gBAC3D,IAAKz9f,EAAkB+ukB,KAAiB/ukB,EAAkBuC,KAAKwuf,OAAO20B,oBAAoBqpD,EAAYjyE,mBAE9F98f,EAAkBuC,KAAKwuf,OAAO20B,oBAAoBqpD,EAAYjyE,gBAAgB50a,OAAOsxa,EAAUhF,gBAAgB+F,WAAWkD,kBAAmB,CAGjJ,GAA0C,WAFnBl7f,KAAKwuf,OAAOlhc,OAAOotc,aAAa8xE,EAAatxE,GAE/C4d,iBAA+B,CAChD,IAAI93gB,OAAU9F,EACd,GAAI+7f,EAAUI,aAAa76f,OAAS,EAAG,CACnC,IAAIq2gB,EAAa5b,EAAUI,aAAa,GACpCwb,EAAWz4f,SAAS5d,OAAS,IAC7BwE,EAAU6xgB,EAAWz4f,SAAS,IAGjC3c,EAAkBuD,KACnBA,EAAQguB,KAAOhvB,KAAKwuf,OAAOlhc,OAAO0yd,cAAc/oB,EAAUhF,gBAAgB+F,iBAU9F7C,EAAO/5f,UAAUykkB,iBAAmB,SAAU3rjB,GAC1C,OAAOlU,KAAKq6kB,yBAAyBnmkB,EAASw3gB,cAAex3gB,EAASvI,SAK1Ewpf,EAAO/5f,UAAUi/kB,yBAA2B,SAAUpwhB,EAAMqwhB,GAIxD,IAHA,IAAIrjF,EAAYhtc,EAAKgtc,UACjBtrf,EAAS3L,KAAKi2E,UAAUy4d,mBAAmBz3C,EAAWhtc,GAAQqwhB,EAC9D9nd,EAAWykY,EAAU2P,oBAClBp0Y,aAAoB0kY,IACvBD,EAAYzkY,EACZ7mH,GAAU3L,KAAKwuf,OAAOv4a,UAAUy4d,mBAAmBz3C,GACnDzkY,EAAWykY,EAAU2P,oBAEzB,OAAS3P,UAAaA,EAAWtrf,OAAUA,IAM/Cwpf,EAAO/5f,UAAUkhkB,eAAiB,SAAUrmf,GACxC,GAAIj2E,KAAKwviB,eAAgB,CACrB,IAAI7jQ,EAAW3rS,KAAKijjB,YAAYjjjB,KAAKwviB,eAAgBxviB,KAAK6qgB,aAC1D50b,EAAU14E,MAAMoxiB,oBAAoBhjQ,EAAS1hP,KAAM0hP,EAAShgS,QAGhE,GADAsqE,EAAU14E,MAAMsxiB,wBAAuB,GACnC54d,EAAU2hK,QACV3hK,EAAUh3D,IAAI6vhB,oBAAoB74d,EAAU14E,WAE3C,CACD,GAAIyC,KAAKyviB,aAAc,CACf9jQ,EAAW3rS,KAAKijjB,YAAYjjjB,KAAKyviB,aAAczviB,KAAK+0gB,WACxD9+b,EAAUh3D,IAAI0vhB,oBAAoBhjQ,EAAS1hP,KAAM0hP,EAAShgS,QAE9DsqE,EAAUh3D,IAAI4vhB,wBAAuB,KAO7C15C,EAAO/5f,UAAU6njB,YAAc,SAAUhsD,EAAWtrf,GAChD,IAEInP,EAASwD,KAAKi2E,UAAUy4d,mBAAmBz3C,GAC3C3rd,EAAO2rd,EAAU6P,gBAIrB,IAHIn7f,EAASnP,EAAS,GAAKiB,EAAkB6tC,KACzC3/B,EAASnP,GAENmP,EAASnP,GAAU8uC,aAAgB4rd,IACtCvrf,GAAUnP,EACVy6f,EAAY3rd,EACZ9uC,EAASwD,KAAKi2E,UAAUy4d,mBAAmBz3C,GAC3C3rd,EAAO2rd,EAAU6P,gBAErB,OAAO9mgB,KAAKi2E,UAAUgte,YAAYhsD,EAAWtrf,IAKjDwpf,EAAO/5f,UAAU6ziB,qBAAuB,SAAUh4C,EAAWtrf,EAAQk9iB,GACjE,IAAI5ye,EAAYj2E,KAAKwuf,OAAOv4a,UACxB01N,EAAW3rS,KAAKijjB,YAAYhsD,EAAWtrf,GAC3CsqE,EAAU14E,MAAMoxiB,oBAAoBhjQ,EAAS1hP,KAAM0hP,EAAShgS,QAC5DsqE,EAAUh3D,IAAI6vhB,oBAAoB74d,EAAU14E,OACvCsrjB,GACD5ye,EAAU+le,sBAAqB,IAMvC7mD,EAAO/5f,UAAU2ziB,2BAA6B,SAAU7mJ,EAAc43K,GAClE,IAAIwD,EAAYtjkB,KAAKu4kB,cAAezmkB,MAAOgujB,IACvCn0R,EAAW3rS,KAAKijjB,YAAYqgB,EAAUrsE,UAAWqsE,EAAU33jB,QAC/Du8Y,EAAaynJ,yBAAyBhkQ,EAAS1hP,KAAM0hP,EAAShgS,SAKlEwpf,EAAO/5f,UAAUm/kB,iBAAmB,SAAU/gE,GAO1C,IAAI0U,EAAY,SALZ1U,EADA/7gB,EAAkB+7gB,GACH,GAGA,OAASA,GAEa,mBACzCx5gB,KAAKw6kB,aAAatsD,IAKtB/4B,EAAO/5f,UAAUq/kB,gBAAkB,SAAUjhE,GAOzC,IAAI0U,EAAY,aALZ1U,EADA/7gB,EAAkB+7gB,GACH,GAGA,KAAQA,GAEkB,iBAC7Cx5gB,KAAKw6kB,aAAatsD,IAEtB/4B,EAAO/5f,UAAUo/kB,aAAe,SAAUtsD,GACtC,IAAIj3B,EAAY,IAAIC,GAChBjtc,EAAO,IAAIo9c,GAAWpQ,GACtB2I,EAAa,IAAIH,GAAgB,GACrCx1c,EAAK7vC,SAAS5V,KAAKo7f,GACnB,IAAI86E,EAAY,IAAItnE,GACpBsnE,EAAU96E,WAAaA,EACvB86E,EAAU1rjB,KAAO,IACjB,IAAIA,EAAO,IAAI45e,GACf55e,EAAKA,KAAOk/f,EACZjke,EAAK7vC,SAAS5V,KAAKwqB,GACnB,IAAIujf,EAAiB,IAAI9S,GAAgB,GACzC8S,EAAe3S,WAAaA,EAC5BA,EAAW2S,eAAiBA,EAC5Btod,EAAK7vC,SAAS5V,KAAK+tgB,GACnBtod,EAAK7vC,SAAS5V,KAAKk2kB,GACnB,IAAI/6E,EAAW,IAAIF,GAAgB,GACnCE,EAASC,WAAaA,EACtBD,EAAS4S,eAAiBA,EAC1BA,EAAe5S,SAAWA,EAC1BC,EAAWD,SAAWA,EACtB11c,EAAK7vC,SAAS5V,KAAKm7f,GACnBC,EAAW31c,KAAOA,EAClBgtc,EAAUI,aAAa7yf,KAAKylD,GAC5B,IAAI08c,KACJA,EAAQnigB,KAAKyyf,GACbj3f,KAAKwuf,OAAOhie,OAAOhoB,KAAKo7f,GACxB5/f,KAAKq+jB,sBAAsB13D,IAK/BxR,EAAO/5f,UAAUu/kB,eAAiB,SAAUpjjB,GACxC,IAAIqmgB,EAAW,IAAI90B,GAAmB,GACtC80B,EAASrmgB,KAAOA,EAChB,IAAIqjjB,EAAc,IAAI9xE,GAAmB,GACzC8xE,EAAYrjjB,KAAOA,EACnBqmgB,EAASn8hB,UAAYm5kB,EACrBA,EAAYn5kB,UAAYm8hB,EACxB59hB,KAAKwuf,OAAOwuC,UAAU54hB,IAAImzB,EAAMqmgB,GAChC59hB,KAAKg4hB,mBAAmB,kBACxBh4hB,KAAK66kB,gBAAgBD,IAAeh9C,IAChC59hB,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAc+iD,+BAEvB96kB,KAAKi2E,UAAU14E,MAAMgxiB,wBAAwB3Q,EAAS3ze,KAAM2ze,EAAU,EAAG59hB,KAAKi2E,UAAU14E,MAAMq9B,UAC9F56B,KAAKi2E,UAAUh3D,IAAIsvhB,wBAAwBqsC,EAAY3whB,KAAM2whB,EAAa,EAAG56kB,KAAKi2E,UAAUh3D,IAAI2b,UAChG56B,KAAKi2E,UAAU+le,sBAAqB,GACpCh8iB,KAAKuxf,qBAKT4D,EAAO/5f,UAAU2/kB,eAAiB,SAAUC,GACxC,IACIp9C,EADY59hB,KAAKwuf,OAAOwuC,UACHt1hB,IAAIszkB,GAC7B,GAAIp9C,aAAoB90B,GAAoB,CACtB80B,EAASn8hB,UAC3BzB,KAAK4sc,YAAY,kBACb5sc,KAAK+3hB,gBACL/3hB,KAAK+3hB,cAAcmR,uBAAuB+xC,gBAAgBr9C,GAC1D59hB,KAAK+3hB,cAAcsR,iBAEvBrpiB,KAAKk7kB,uBAAuBt9C,GAEhC59hB,KAAKuxf,qBAKT4D,EAAO/5f,UAAU8/kB,uBAAyB,SAAUt9C,GAChD59hB,KAAKwuf,OAAOwuC,UAAUz4hB,OAAOq5hB,EAASrmgB,MACtCqmgB,EAAS3ze,KAAK7vC,SAASuO,OAAOi1gB,EAAS93B,aAAc,GACrD83B,EAASn8hB,UAAUwoD,KAAK7vC,SAASuO,OAAOi1gB,EAASn8hB,UAAUqkgB,aAAc,IAK7E3Q,EAAO/5f,UAAU+/kB,iBAAmB,WAChC,IAAI59kB,EAAQyC,KAAKi2E,UAAU14E,MACvB0hB,EAAMjf,KAAKi2E,UAAUh3D,IACrB24N,EAAU53O,KAAKi2E,UAAU2hK,QACxB53O,KAAKi2E,UAAU8ge,YAChBx5iB,EAAQyC,KAAKi2E,UAAUh3D,IACvBA,EAAMjf,KAAKi2E,UAAU14E,OAEzB,IAAI69kB,EAAmB79kB,EAAMmuhB,cAAc3iB,UAAUxrgB,EAAMoO,OAAQ,GAC/D0vkB,EAAiBp8jB,EAAIysgB,cAAc3iB,UAAU9pf,EAAItT,OAAQ,GAE7D,OAASpO,MAASA,EAAM8B,QAAS4f,IAAOA,EAAI5f,QAAS+7kB,iBAAoBA,EAAkBC,eAAkBA,EAAgBzjW,QAAWA,IAK5Iu9Q,EAAO/5f,UAAUy/kB,eAAiB,SAAUS,EAAaC,GACrD,IAAIz0jB,EAAO9mB,KAAKm7kB,mBACX19kB,EAAkB89kB,IACnBv7kB,KAAKw7kB,uBAAuB10jB,EAAKvpB,MAAOg+kB,GAEvC99kB,EAAkB69kB,IACnBt7kB,KAAKw7kB,uBAAuB10jB,EAAK7H,IAAKq8jB,IAM9CnmF,EAAO/5f,UAAUoglB,uBAAyB,SAAUtnkB,EAAUtQ,GAC1D5D,KAAKi2E,UAAUqqe,eAAepsiB,EAAUA,GACxClU,KAAK4sc,YAAY,kBACjB5sc,KAAKggkB,uBACL,IAAIh3D,EAAgB,EAChBomD,EAAgBpvjB,KAAK6/jB,iBAAiB7/jB,KAAKi2E,UAAU14E,OACzD,GAAIyC,KAAKi2E,UAAU14E,MAAM05f,UAAUr/Q,UAAW,CAC1C,IAAIq/Q,EAAYj3f,KAAKi2E,UAAU14E,MAAM05f,UACrCA,EAAUI,aAAa,GAAGj9e,SAAS5V,KAAKZ,EAAS,IACjDA,EAAS,GAAGqmD,KAAOgtc,EAAUI,aAAa,GAC1Czzf,EAAS,GAAGwugB,mBAAmBpygB,KAAKwuf,QACpCxuf,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAW,EAAG,GACnDj3f,KAAKiviB,qBAAqBmgB,EAAcn4D,UAAWm4D,EAAczjjB,OAASnP,QAAQ,GAClF0X,EAASq6hB,wBAAwB3qiB,EAAS,GAAGqmD,KAAMrmD,EAAS,GAAIA,EAAS,GAAGpH,OAAQwD,KAAKi2E,UAAU14E,MAAMq9B,UACzG56B,KAAKi2E,UAAUqqe,eAAepsiB,EAAUA,OAEvC,CACD,IAAI08hB,EAAY5wiB,KAAKi2E,UAAU14E,MAAMmuhB,cAAc3iB,UAAU/ogB,KAAKwuf,OAAOv4a,UAAU14E,MAAMoO,OAAQq9f,GAC7Fu9D,EAAY31B,EAAU5viB,QAC1BgogB,EAAgB4nC,EAAU9+hB,MAC1B,IAAIy7U,EAAe3pV,EAAS,GAC5B5D,KAAKwmkB,sBAAsBD,EAAWh5O,EAAcy7K,GAAe,GAGnE,IAAK,IAFDl3f,EAAQy7U,EAAau4K,aACrB8L,EAAcrkL,EACTrxV,EAAI,EAAGA,EAAI0H,EAASpH,OAAQN,IACjC01gB,EAAchugB,EAAS1H,GACvBqxV,EAAatjS,KAAK7vC,SAASuO,OAAO7W,EAAQ5V,EAAG,EAAG01gB,GAEpD19f,EAASq6hB,wBAAwB38B,EAAY3nd,KAAM2nd,EAAaA,EAAYp1gB,OAAQwD,KAAKi2E,UAAU14E,MAAMq9B,UACzG56B,KAAKi2E,UAAUqqe,eAAepsiB,EAAUA,GAExClU,KAAK+3hB,gBACD/3hB,KAAKwkkB,oBACLxkkB,KAAKykkB,sBAAsBzkkB,KAAKi2E,UAAU14E,OAAO,GAErDyC,KAAK+3hB,cAAcsR,kBAM3Bl0C,EAAO/5f,UAAUosgB,qBAAuB,SAAUU,EAAOv8f,GACrD,IAAImG,EACJ,GAAIo2f,EAAO,CACP,GAAIA,aAAiB9B,GAAoB,CACrC,IAAIq1E,GAAyD,IAA9CvzE,EAAMR,iBAAiBnpgB,QAAQ,UAAmB,IAAM,IACnEivK,EAAY06V,EAAM36V,KAAKz7J,MAAM5E,WACTlN,KAAKwuf,OAAOotB,gBAAgB1T,EAAMR,kBAAkBx6f,WAE5E4E,EADmBo2f,EAAM36V,KAAKstW,aACP,IAAM4gE,EAAW,IAAMjua,EAAY,IAAM7hK,OAGhEmG,EAAQo2f,EAAMp2f,MAAQ,IAAMnG,EAEhC,GAAIu8f,EAAM5Q,gBAKN,OAJI4Q,aAAiBjC,IAAmBiC,EAAMj5R,WAAai5R,EAAM5Q,gBAAgBxlf,QAC7EA,EAAQo2f,EAAMj5R,SAAW,IAAMn9N,EAC/Bo2f,EAAQA,EAAM5Q,iBAEXt3f,KAAKwngB,qBAAqBU,EAAM5Q,gBAAiBxlf,GAGhE,OAAOA,GAKXqjf,EAAO/5f,UAAUqyjB,SAAW,SAAUv5iB,GAClC,IAAI4of,EAAa98f,KAAK07kB,cAAcxnkB,GACpC,OAAOlU,KAAK2tjB,iBAAiB7wD,EAAY5of,IAM7Cihf,EAAO/5f,UAAUuyjB,iBAAmB,SAAU9nD,EAAQ3xf,GAClD,GAAuB,KAAnBA,EAASpC,QAAgBrU,EAAkByW,GAA/C,CAGA,IAAIpC,EAAQoC,EAASpC,MAAMvT,QAAQ,KAC/BxB,EAAQmX,EAASpC,MAAMuS,UAAU,EAAGvS,GACxCoC,EAASpC,MAAQoC,EAASpC,MAAMuS,UAAUvS,GAAO7U,QAAQ,IAAK,IAC9D,IAAIsD,EAAOslgB,EAOX/zf,EAAQ8iB,SAAS73B,EAAO,IACxB,IAAIy/gB,EAAcx8gB,KAAK27kB,gBAAgB91E,EAAQ/zf,GAC/C,IAAI0qgB,EAoBA,OAASj8gB,KAAQA,EAAM2T,SAAYA,GAnBnC,IAAI7T,EAAQm8gB,EACZ,KAAItogB,EAASpC,MAAMvT,QAAQ,MAAQ,GAc/B,OAASgC,KAAQF,EAAO6T,SAAYA,GAbpC,GAAI7T,aAAiB62f,GAIjB,OAHIhjf,EAASpC,MAAMvT,QAAQ,MAAQ,IAC/B2V,EAASpC,MAAQ,MAEZvR,KAAQF,EAAO6T,SAAYA,GAExC,GAAI7T,aAAiBslgB,GAAQ,CACzB,IAAIi2E,EAAW57kB,KAAK2tjB,iBAAiBttjB,EAAO6T,GAE5C,OAAS3T,KAAU9C,EAAkBm+kB,QAA6B1glB,EAAhB0glB,EAASr7kB,KAAkB2T,SAAczW,EAAkBm+kB,QAAiC1glB,EAApB0glB,EAAS1nkB,UAU/I,OAAS3T,KAAQA,EAAM2T,SAAYA,KAKvCihf,EAAO/5f,UAAUm9kB,aAAe,SAAUrkkB,GAEtC,OAAS+if,UADOj3f,KAAK67kB,qBAAqB77kB,KAAK07kB,cAAcxnkB,GAAWA,GACzCvI,OAAQipB,SAAS1gB,EAASpC,MAAO,MAMpEqjf,EAAO/5f,UAAUyglB,qBAAuB,SAAUhhkB,EAAW3G,GACzD,IAAIzW,EAAkByW,EAASpC,OAA/B,CAIA,IAAIA,EAAQoC,EAASpC,MAAMvT,QAAQ,KAC/BxB,EAAQ,IACR+U,GAAS,IACT/U,EAAQmX,EAASpC,MAAMuS,UAAU,EAAGvS,GACpCoC,EAASpC,MAAQoC,EAASpC,MAAMuS,UAAUvS,GAAO7U,QAAQ,IAAK,KAKlE6U,EAAQ8iB,SAAS73B,EAAO,IACpB8d,aAAqBsrf,IAAkBr0f,GAAS+I,EAAUw8e,aAAa76f,SACvE0X,EAASpC,MAAQ,MACjBA,EAAQ+I,EAAUw8e,aAAa76f,OAAS,GAE5C,IAAIgghB,EAAcx8gB,KAAK27kB,gBAAgB9gkB,EAAW/I,GAClD,GAAI0qgB,EAAa,CACb,IAAIn8gB,EAAQm8gB,EACZ,GAAIn8gB,aAAiB62f,GAIjB,OAHIhjf,EAASpC,MAAMvT,QAAQ,KAAO,IAC9B2V,EAASpC,MAAQ,KAEdzR,EAEX,GAAIA,aAAiBslgB,GAAQ,CACzB,GAAIzxf,EAASpC,MAAMvT,QAAQ,KAAO,EAC9B,OAAOyB,KAAK67kB,qBAAqBx7kB,EAAO6T,GAIxC,GAAI7T,aAAiB4mgB,GACjB,OAAOjngB,KAAKwuf,OAAOv4a,UAAU41c,6BAA6BxrhB,GAE9D,aAIP,GAAIwa,EAAW,CAChB,IAAI01f,EAAa11f,EAAUgsf,kBAAkBhhW,MAAM2gW,mBACnD,GAAI+J,aAAsB5K,GAEtB,OADAzxf,EAASpC,MAAQ,IACby+f,aAAsBtJ,GACfjngB,KAAKwuf,OAAOv4a,UAAU41c,6BAA6Btb,GAEvDA,KAKnBpb,EAAO/5f,UAAUsglB,cAAgB,SAAUxnkB,GACvC,IAAIpC,EAAQoC,EAASpC,MAAMvT,QAAQ,KAC/BxB,EAAQmX,EAASpC,MAAMuS,UAAU,EAAGvS,GACxCoC,EAASpC,MAAQoC,EAASpC,MAAMuS,UAAUvS,GAAO7U,QAAQ,IAAK,IAC9D,IAAI49gB,EAAejmf,SAAS73B,EAAO,IAKnC,OAJA+U,EAAQ8iB,SAAS73B,EAAO,IACxB+U,EAAQoC,EAASpC,MAAMvT,QAAQ,KAGjB,OAFdxB,EAAQmX,EAASpC,MAAMuS,UAAU,EAAGvS,KAEL,MAAV/U,EACViD,KAAK87kB,sBAAsB5nkB,IAEtCpC,EAAQ8iB,SAAS73B,EAAO,IACjBiD,KAAK+7kB,sBAAsBlhE,EAAc/ogB,KAEpDqjf,EAAO/5f,UAAU0glB,sBAAwB,SAAU5nkB,GAE/C,IAAIpC,EAAQoC,EAASpC,MAAMvT,QAAQ,KAC/BxB,EAAQmX,EAASpC,MAAMuS,UAAU,EAAGvS,GACxCoC,EAASpC,MAAQoC,EAASpC,MAAMuS,UAAUvS,GAAO7U,QAAQ,IAAK,IAC9D,IAAIyvB,EAAqB,MAAV3vB,EACf+U,EAAQoC,EAASpC,MAAMvT,QAAQ,KAC/BxB,EAAQmX,EAASpC,MAAMuS,UAAU,EAAGvS,GACpCoC,EAASpC,MAAQoC,EAASpC,MAAMuS,UAAUvS,GAAO7U,QAAQ,IAAK,IAC9D6U,EAAQ8iB,SAAS73B,EAAO,IACxB,IAAIwwK,EAAOvtK,KAAKwuf,OAAOzmQ,MAAMj2O,GAC7B,OAAI4a,EACO6gJ,EAAKw6V,aAGLx6V,EAAKy6V,cAGpB7S,EAAO/5f,UAAU2glB,sBAAwB,SAAUlhE,EAAcmS,GAC7D,IAAK,IAAI9whB,EAAI,EAAGA,EAAI8D,KAAKwuf,OAAOzmQ,MAAMvrP,OAAQN,IAAK,CAC/C,IAAI4ggB,EAAa98f,KAAKwuf,OAAOzmQ,MAAM7rP,GAAG0pgB,YAAY,GAClD,GAAI9I,EAAWhrf,QAAU+ogB,GACjB/d,EAAW9/e,WAAWlL,OAASk7gB,GAAclwB,EAAWpjX,UAAU5nI,OAASk7gB,EAC3E,OAAOlwB,EAGf,GAAIA,EAAWhrf,MAAQ+ogB,EACnB,QAQZ1lB,EAAO/5f,UAAUuglB,gBAAkB,SAAU9gkB,EAAWmygB,GACpD,IAAIxQ,EACJ,GAAI3hgB,EAAW,CACX,IAAK,IAAI6I,EAAI,EAAGA,EAAI7I,EAAUw8e,aAAa76f,OAAQknB,IAC/C,GAAI7I,EAAUw8e,aAAa3ze,GAAG5R,QAAUk7gB,EAAY,CAChDxQ,EAAc3hgB,EAAUw8e,aAAa3ze,GACrC,MAGR,KAAK84f,GAAiB3hgB,aAAqBurf,IACvC,OAAOpmgB,KAAK27kB,gBAAgB9gkB,EAAUisf,gBAAiBkmB,GAG/D,OAAOxQ,GAKXrnB,EAAO/5f,UAAUqpkB,sBAAwB,SAAUvwjB,EAAU8nkB,GACzD,GAAIh8kB,KAAK+3hB,gBAAkBt6hB,EAAkBuC,KAAK+3hB,cAAcmR,wBAAyB,CACrF,IAAIzhC,OAAoB,EACxB,GAAIvzf,aAAoBg6hB,GAAc,CAClC,IAAIo1B,EAAYtjkB,KAAK6/jB,iBAAiB3rjB,GACtCuzf,EAAoBzngB,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,iBAGpFu6f,EAAoBvzf,EAEpB8nkB,EACAh8kB,KAAK+3hB,cAAcmR,uBAAuBy2B,eAAiBl4D,EAG3DzngB,KAAK+3hB,cAAcmR,uBAAuBnJ,YAAct4B,IAQpEtS,EAAO/5f,UAAU6glB,aAAe,SAAU5tY,GACtCruM,KAAK4sc,YAAY,WACjB,IAAIg0G,EAAW5gjB,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAU14E,MAAQyC,KAAKi2E,UAAUh3D,IAC5E4hiB,EAAS7gjB,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAUh3D,IAAMjf,KAAKi2E,UAAU14E,MACxE6nE,EAAQw7e,EAAS3pD,UAAUuR,eAAeJ,WAE9C,GADAhjc,EAAQA,EAAM2hc,cAAc/mgB,KAAKwuf,QAC7Bxuf,KAAK+3hB,cACa/3hB,KAAKqnkB,wBAAwBjigB,GAEnCw7e,EAAS3pD,UAAUuR,eAAnC,IAEI5hc,EADA6lc,EAAUo0C,EAAO5pD,UAAUuR,eAE3B1he,EAAS9mC,KAAKk8kB,UAAU7tY,EAASivC,YAAajvC,EAAS76G,UAAW66G,EAASgwN,aAC/E,GAAIr+Z,KAAKi2E,UAAU2hK,QAEO,mBAAlBvpC,EAAS3nM,MAA+C,eAAlB2nM,EAAS3nM,MAC7B,eAAlB2nM,EAAS3nM,MACT+lgB,EAAQhE,WAAW56M,QAAQrhT,KAAKmtf,WAAW7yd,GAEzB,mBAAlBunK,EAAS3nM,MAA+C,eAAlB2nM,EAAS3nM,MAC7B,cAAlB2nM,EAAS3nM,MACT+lgB,EAAQhE,WAAW56M,QAAQnhT,IAAIitf,WAAW7yd,GAExB,mBAAlBunK,EAAS3nM,MAA+C,eAAlB2nM,EAAS3nM,MAC7B,gBAAlB2nM,EAAS3nM,MACT+lgB,EAAQhE,WAAW56M,QAAQphT,MAAMktf,WAAW7yd,GAE1B,mBAAlBunK,EAAS3nM,MAA+C,eAAlB2nM,EAAS3nM,MAC7B,iBAAlB2nM,EAAS3nM,MACT+lgB,EAAQhE,WAAW56M,QAAQlhT,OAAOgtf,WAAW7yd,GAE3B,eAAlBunK,EAAS3nM,MAA2C,kBAAlB2nM,EAAS3nM,MACtB,yBAAlB2nM,EAAS3nM,MACZ+lgB,EAAQhE,WAAW56M,QAAQ/pL,SAAS61X,WAAW7yd,GAE7B,eAAlBunK,EAAS3nM,MAA2C,kBAAlB2nM,EAAS3nM,MACtB,2BAAlB2nM,EAAS3nM,MACZ+lgB,EAAQhE,WAAW56M,QAAQhqL,WAAW81X,WAAW7yd,GAE/B,aAAlBunK,EAAS3nM,MACT1G,KAAKm8kB,qBAAqB1vE,EAAQhE,WAAW56M,aAGhD,CACD,GAAsB,mBAAlBx/G,EAAS3nM,MAA+C,cAAlB2nM,EAAS3nM,KAE/C,IAAK,IADD01kB,EAAep8kB,KAAKq8kB,+BACfnglB,EAAI,EAAGA,EAAIkglB,EAAa5/kB,OAAQN,IACrCkglB,EAAalglB,GAAGusgB,WAAW56M,QAAQnhT,IAAIitf,WAAW7yd,GAG1D,GAAsB,mBAAlBunK,EAAS3nM,MAA+C,eAAlB2nM,EAAS3nM,KAE/C,IADI01kB,EAAep8kB,KAAKs8kB,gCACfpglB,EAAI,EAAGA,EAAIkglB,EAAa5/kB,OAAQN,IACrCkglB,EAAalglB,GAAGusgB,WAAW56M,QAAQrhT,KAAKmtf,WAAW7yd,GAG3D,GAAsB,mBAAlBunK,EAAS3nM,MAA+C,gBAAlB2nM,EAAS3nM,KAE/C,IADI01kB,EAAep8kB,KAAKu8kB,iCACfrglB,EAAI,EAAGA,EAAIkglB,EAAa5/kB,OAAQN,IACrCkglB,EAAalglB,GAAGusgB,WAAW56M,QAAQphT,MAAMktf,WAAW7yd,GAG5D,GAAsB,mBAAlBunK,EAAS3nM,MAA+C,iBAAlB2nM,EAAS3nM,KAE/C,IADI01kB,EAAep8kB,KAAKw8kB,kCACftglB,EAAI,EAAGA,EAAIkglB,EAAa5/kB,OAAQN,IACrCkglB,EAAalglB,GAAGusgB,WAAW56M,QAAQlhT,OAAOgtf,WAAW7yd,GAKjE,GAAsB,iBAAlBunK,EAAS3nM,MAA6C,eAAlB2nM,EAAS3nM,MAA2C,mBAAlB2nM,EAAS3nM,MAC1D,aAAlB2nM,EAAS3nM,KAAqB,CACjCkgE,EAAQ5mE,KAAKy8kB,qCACb,IAASvglB,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IAAK,CACnC,IAAI6rE,EAAOnB,EAAM1qE,GACK,aAAlBmyM,EAAS3nM,KACTqhE,EAAK0gc,WAAW56M,QAAQnhT,IAAIitf,WAAW35f,KAAK08kB,eAG5C30gB,EAAK0gc,WAAW56M,QAAQnhT,IAAIitf,WAAW7yd,IAInD,GAAsB,eAAlBunK,EAAS3nM,MAA2C,mBAAlB2nM,EAAS3nM,MAA+C,gBAAlB2nM,EAAS3nM,MAC5D,aAAlB2nM,EAAS3nM,KAAqB,CACjCkgE,EAAQ5mE,KAAK28kB,oCACb,IAASzglB,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IAAK,CAC/B6rE,EAAOnB,EAAM1qE,GACK,aAAlBmyM,EAAS3nM,KACTqhE,EAAK0gc,WAAW56M,QAAQrhT,KAAKmtf,WAAW35f,KAAK08kB,eAG7C30gB,EAAK0gc,WAAW56M,QAAQrhT,KAAKmtf,WAAW7yd,IAI9B,eAAlBunK,EAAS3nM,MAA2C,aAAlB2nM,EAAS3nM,MAC3C1G,KAAK48kB,gBAAgB91iB,EAAQunK,EAAS3nM,MAEpB,kBAAlB2nM,EAAS3nM,MAA8C,yBAAlB2nM,EAAS3nM,MACzB,2BAAlB2nM,EAAS3nM,MAAuD,aAAlB2nM,EAAS3nM,MAC1D1G,KAAK68kB,mBAAmB/1iB,EAAQunK,EAAS3nM,KAAM0+D,GAEnDplE,KAAK88kB,yBAAyB13gB,GAAO,GACrCplE,KAAKu6jB,SAASv6jB,KAAKi2E,WAAW,GAC9Bj2E,KAAK+3hB,cAAcsR,iBAEvBl0C,EAAO/5f,UAAUwhlB,gBAAkB,SAAU91iB,EAAQi2iB,GAEjD,IAAK,IADDn2gB,EAAQ5mE,KAAKi2E,UAAUiwe,mBAClBhqjB,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IACX,aAAf6glB,GACAn2gB,EAAM1qE,GAAGusgB,WAAW56M,QAAQrhT,KAAKmtf,WAAW35f,KAAK08kB,eACjD91gB,EAAM1qE,GAAGusgB,WAAW56M,QAAQphT,MAAMktf,WAAW35f,KAAK08kB,eAClD91gB,EAAM1qE,GAAGusgB,WAAW56M,QAAQnhT,IAAIitf,WAAW35f,KAAK08kB,eAChD91gB,EAAM1qE,GAAGusgB,WAAW56M,QAAQlhT,OAAOgtf,WAAW35f,KAAK08kB,iBAGnD91gB,EAAM1qE,GAAGusgB,WAAW56M,QAAQrhT,KAAKmtf,WAAW7yd,GAC5C8/B,EAAM1qE,GAAGusgB,WAAW56M,QAAQphT,MAAMktf,WAAW7yd,GAC7C8/B,EAAM1qE,GAAGusgB,WAAW56M,QAAQnhT,IAAIitf,WAAW7yd,GAC3C8/B,EAAM1qE,GAAGusgB,WAAW56M,QAAQlhT,OAAOgtf,WAAW7yd,KAI1Dqud,EAAO/5f,UAAUyhlB,mBAAqB,SAAU/1iB,EAAQi2iB,EAAY33gB,GAEhE,IAAK,IADDwB,EAAQ5mE,KAAKi2E,UAAUiwe,mBAClBhqjB,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IAAK,CACnC,IAAI6rE,EAAOnB,EAAM1qE,GACb8glB,EAAoBj1gB,EAAKsgc,WAAazhc,EAAMA,EAAMpqE,OAAS,GAAG6rgB,SAC9D40E,EAAmBl1gB,EAAKinK,YAAcjnK,EAAK0gc,WAAW31M,WAAa,IAAOlsP,EAAMA,EAAMpqE,OAAS,GAAGwyO,YAatG,GAZmB,aAAf+tW,GACAh1gB,EAAK0gc,WAAW56M,QAAQphT,MAAMktf,WAAW35f,KAAK08kB,eAC9C30gB,EAAK0gc,WAAW56M,QAAQlhT,OAAOgtf,WAAW35f,KAAK08kB,iBAG1CO,GAAkC,2BAAfF,GACpBh1gB,EAAK0gc,WAAW56M,QAAQphT,MAAMktf,WAAW7yd,GAExCk2iB,GAAoC,yBAAfD,GACtBh1gB,EAAK0gc,WAAW56M,QAAQlhT,OAAOgtf,WAAW7yd,KAG7Ck2iB,GAAoC,yBAAfD,EAAuC,CAE7D,IAAIG,EAAen1gB,EAAKsgc,SAASp5R,SAAWlnK,EAAK0gc,WAAW73M,QACxD0gN,EAAUlsc,EAAMiyb,aAAa6lF,GACjC,GAAI5rE,EAEA,IAAK,IADD6pD,EAAgBn7jB,KAAKm9kB,oCAAoC7rE,EAASvpc,GAAM,GACnErkD,EAAI,EAAGA,EAAIy3iB,EAAc3+jB,OAAQknB,IACnB,aAAfq5jB,EACA5hB,EAAcz3iB,GAAG+kf,WAAW56M,QAAQnhT,IAAIitf,WAAW35f,KAAK08kB,eAGxDvhB,EAAcz3iB,GAAG+kf,WAAW56M,QAAQnhT,IAAIitf,WAAW7yd,GAKnE,IAAKm2iB,GAAkC,2BAAfF,EAGpB,IAAK,IADDK,EAAmBp9kB,KAAKq9kB,4BAA4Bt1gB,EAAM3C,GACrD9+C,EAAI,EAAGA,EAAI82jB,EAAiB5glB,OAAQ8pB,IACtB,aAAfy2jB,EACAK,EAAiB92jB,GAAGmif,WAAW56M,QAAQrhT,KAAKmtf,WAAW35f,KAAK08kB,eAG5DU,EAAiB92jB,GAAGmif,WAAW56M,QAAQrhT,KAAKmtf,WAAW7yd,KAS3Equd,EAAO/5f,UAAUihlB,6BAA+B,WAK5C,IAAK,IAHD7vE,GADWxsgB,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAU14E,MAAQyC,KAAKi2E,UAAUh3D,KACvDg4e,UAAUuR,eAC/B80E,KACA12gB,EAAQ5mE,KAAKi2E,UAAUiwe,mBAClBhqjB,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IAC1B0qE,EAAM1qE,GAAGmsgB,WAAamE,EAAUnE,UAChCi1E,EAAe94kB,KAAKoiE,EAAM1qE,IAGlC,OAAOohlB,GAKXnoF,EAAO/5f,UAAUkhlB,8BAAgC,WAK7C,IAAK,IAHD9vE,GADWxsgB,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAU14E,MAAQyC,KAAKi2E,UAAUh3D,KACvDg4e,UAAUuR,eAC/B5hc,EAAQ5mE,KAAKi2E,UAAUiwe,mBACvBq3B,KACKrhlB,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IAC1B0qE,EAAM1qE,GAAG8yO,cAAgBw9R,EAAUx9R,aACnCuuW,EAAgB/4kB,KAAKoiE,EAAM1qE,IAGnC,OAAOqhlB,GAKXpoF,EAAO/5f,UAAUmhlB,+BAAiC,WAG9C,IAAK,IAFD31gB,EAAQ5mE,KAAKi2E,UAAUiwe,mBACvBk3B,KACKlhlB,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IACzB0qE,EAAM1qE,GAAG8yO,YAAcpoK,EAAM1qE,GAAGusgB,WAAW31M,WAAa,IAAOlsP,EAAMA,EAAMpqE,OAAS,GAAGwyO,aACxFouW,EAAiB54kB,KAAKoiE,EAAM1qE,IAGpC,OAAOkhlB,GAKXjoF,EAAO/5f,UAAUohlB,gCAAkC,WAK/C,IAAK,IAHD/vE,GADSzsgB,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAUh3D,IAAMjf,KAAKi2E,UAAU14E,OACvD05f,UAAUuR,eAC3B5hc,EAAQ5mE,KAAKi2E,UAAUiwe,mBACvBs3B,KACKthlB,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IAC1B0qE,EAAM1qE,GAAGmsgB,WAAaoE,EAAQpE,UAC9Bm1E,EAAkBh5kB,KAAKoiE,EAAM1qE,IAGrC,OAAOshlB,GAKXroF,EAAO/5f,UAAU+glB,qBAAuB,SAAUtuR,GAC9C,IAAI/mR,EAAS9mC,KAAK08kB,cAClB7uR,EAAQlhT,OAAOgtf,WAAW7yd,GAC1B+mR,EAAQrhT,KAAKmtf,WAAW7yd,GACxB+mR,EAAQphT,MAAMktf,WAAW7yd,GACzB+mR,EAAQnhT,IAAIitf,WAAW7yd,GACvB+mR,EAAQ/pL,SAAS61X,WAAW7yd,GAC5B+mR,EAAQhqL,WAAW81X,WAAW7yd,IAElCqud,EAAO/5f,UAAUshlB,YAAc,WAC3B,IAAI51iB,EAAS,IAAIm6d,GAEjB,OADAn6d,EAAOqhM,UAAY,UACZrhM,GAKXqud,EAAO/5f,UAAUqhlB,mCAAqC,WAClD,IAAI71gB,KACAg6e,EAAW5gjB,KAAKi2E,UAAU14E,MAC1BsjjB,EAAS7gjB,KAAKi2E,UAAUh3D,IACvBjf,KAAKi2E,UAAU8ge,YAChB6J,EAAW5gjB,KAAKi2E,UAAUh3D,IAC1B4hiB,EAAS7gjB,KAAKi2E,UAAU14E,OAE5B,IAAI6nE,EAAQw7e,EAAS3pD,UAAUuR,eAAeJ,WAC9Chjc,EAAQA,EAAM2hc,cAAc/mgB,KAAKwuf,QACjC,IAAIge,EAAYo0C,EAAS3pD,UAAUuR,eAC/BiE,EAAUo0C,EAAO5pD,UAAUuR,eAC3B00E,EAAezwE,EAAQpE,SAASp5R,SAAWw9R,EAAQhE,WAAW73M,QAC9D0gN,EAAUlsc,EAAMiyb,aAAa6lF,GACjC,GAAI5rE,EACA,GAAI7E,EAAQhE,WAAW31M,WAAa,EAChC,IAAK,IAAI52T,EAAIuwgB,EAAQz9R,YAAa9yO,EAAIuwgB,EAAQz9R,YAAcy9R,EAAQhE,WAAW31M,WAAY52T,IACvF0qE,EAAMpiE,KAAK8sgB,EAAQja,aAAan7f,SAKpC,GADA0qE,EAAQ5mE,KAAKm9kB,oCAAoC7rE,EAAS7E,IACrDzsgB,KAAKi2E,UAAU2hK,QAChB,IAAS17O,EAAI,EAAGA,EAAIo1gB,EAAQja,aAAa76f,OAAQN,IAAK,CAClD,IAAIuhlB,EAAmBnsE,EAAQja,aAAan7f,GAAG8yO,YAC3CyuW,GAAoBjxE,EAAUx9R,aAAeyuW,GAAoBhxE,EAAQz9R,aACzEpoK,EAAMpiE,KAAK8sgB,EAAQja,aAAan7f,IAMpD,OAAO0qE,GAEXuub,EAAO/5f,UAAU+hlB,oCAAsC,SAAU7rE,EAASvpc,EAAM21gB,GAC5E,IAAI92gB,KACJ,GAAImB,EAAK0gc,WAAW31M,WAAa,EAC7B,IAAK,IAAI52T,EAAI6rE,EAAKinK,YAAa9yO,EAAI6rE,EAAKinK,YAAcjnK,EAAK0gc,WAAW31M,WAAY52T,IAC9E0qE,EAAMpiE,KAAK8sgB,EAAQja,aAAan7f,SAIpC,GAAI8D,KAAKi2E,UAAU2hK,SAAW8lW,EAC1B,IAASxhlB,EAAI,EAAGA,EAAIo1gB,EAAQja,aAAa76f,OAAQN,IACzCo1gB,EAAQja,aAAan7f,GAAG8yO,cAAgBjnK,EAAKinK,aAC7CpoK,EAAMpiE,KAAK8sgB,EAAQja,aAAan7f,IAKhD,OAAO0qE,GAKXuub,EAAO/5f,UAAUuhlB,kCAAoC,WACjD,IAAI/1gB,KACA+2gB,EAAa39kB,KAAKi2E,UAAU14E,MAC5BqglB,EAAW59kB,KAAKi2E,UAAUh3D,IACzBjf,KAAKi2E,UAAU8ge,YAChB4mC,EAAa39kB,KAAKi2E,UAAUh3D,IAC5B2+jB,EAAW59kB,KAAKi2E,UAAU14E,OAE9B,IAAI6nE,EAAQu4gB,EAAW1mF,UAAUuR,eAAeJ,WAChDhjc,EAAQA,EAAM2hc,cAAc/mgB,KAAKwuf,QACjBmvF,EAAW1mF,UAAUuR,eACvBo1E,EAAS3mF,UAAUuR,eACjC,GAAIxogB,KAAKi2E,UAAU2hK,QAAS,CACxB,IAAIwkW,EAAeuB,EAAW1mF,UAAUuR,eACxC5hc,EAAQ5mE,KAAKq9kB,4BAA4BjB,EAAch3gB,QAKvD,IAAK,IADD+1f,EAAgBn7jB,KAAKu8kB,iCAChBrglB,EAAI,EAAGA,EAAIi/jB,EAAc3+jB,OAAQN,IAAK,CAC3C,IAAI6rE,EAAOozf,EAAcj/jB,GACzB0qE,EAAQA,EAAMpsD,OAAOxa,KAAKq9kB,4BAA4Bt1gB,EAAM3C,IAGpE,OAAOwB,GAEXuub,EAAO/5f,UAAUiilB,4BAA8B,SAAUjB,EAAch3gB,GACnE,IAAIwB,KAIJ,GAHIw1gB,EAAa7rE,YACb3pc,EAAMpiE,KAAK43kB,EAAa7rE,YAExB6rE,EAAa3zE,WAAW73M,QAAU,EAElC,IAAK,IADDssR,EAAed,EAAa/zE,SAASp5R,SAAWmtW,EAAa3zE,WAAW73M,QACnE10T,EAAIkglB,EAAa/zE,SAASp5R,SAAW,EAAG/yO,EAAIghlB,EAAchhlB,IAAK,CACpE,IAAIo1gB,EAAUlsc,EAAMiyb,aAAan7f,GACjC,GAAIo1gB,EACA,IAAK,IAAI5tf,EAAI,EAAGA,EAAI4tf,EAAQja,aAAa76f,OAAQknB,IACzC4tf,EAAQja,aAAa3ze,GAAGsrN,cACxBotW,EAAa7rE,WAAWvhS,aACxBpoK,EAAMpiE,KAAK8sgB,EAAQja,aAAa3ze,IAMpD,OAAOkjD,GAKXuub,EAAO/5f,UAAU8glB,UAAY,SAAU5+V,EAAa9pJ,EAAW6qU,GAC3D,IAAIv3X,EAAS,IAAIm6d,GAIjB,OAHAn6d,EAAOzQ,MAAQinN,GAAe,UAC9Bx2M,EAAO0sD,UAAYA,GAAa,EAChC1sD,EAAOqhM,UAAYk2L,GAAe,SAC3Bv3X,GAQXqud,EAAO/5f,UAAUyilB,qBAAuB,SAAUr4C,EAAey2C,GACxDx+kB,EAAkB+niB,IAAmB/niB,EAAkB+niB,KACnD/niB,EAAkB+niB,EAAc94hB,MACjC1M,KAAK89kB,YAAYt4C,EAAc94hB,IAAKuvkB,EAAavvkB,KAEhDjP,EAAkB+niB,EAAc74hB,SACjC3M,KAAK89kB,YAAYt4C,EAAc74hB,OAAQsvkB,EAAatvkB,QAEnDlP,EAAkB+niB,EAAch5hB,OACjCxM,KAAK89kB,YAAYt4C,EAAch5hB,KAAMyvkB,EAAazvkB,MAEjD/O,EAAkB+niB,EAAc/4hB,QACjCzM,KAAK89kB,YAAYt4C,EAAc/4hB,MAAOwvkB,EAAaxvkB,OAElDhP,EAAkB+niB,EAAc3ha,aACjC7jI,KAAK89kB,YAAYt4C,EAAc3ha,WAAYo4c,EAAap4c,YAEvDpmI,EAAkB+niB,EAAc1ha,WACjC9jI,KAAK89kB,YAAYt4C,EAAc1ha,SAAUm4c,EAAan4c,UAErDrmI,EAAkB+niB,EAAc5iC,aACjC5igB,KAAK89kB,YAAYt4C,EAAc5iC,WAAYq5E,EAAar5E,YAEvDnlgB,EAAkB+niB,EAAc7iC,eACjC3igB,KAAK89kB,YAAYt4C,EAAc7iC,aAAcs5E,EAAat5E,gBAUtExN,EAAO/5f,UAAU2ilB,aAAe,SAAUn4C,EAAem4C,GAChDtglB,EAAkBsglB,IAAkBtglB,EAAkBmoiB,KAClDnoiB,EAAkBsglB,EAAa3vhB,kBAC7Bw3e,EAAcx3e,kBAAoB2vhB,EAAa3vhB,kBAClDw3e,EAAcx3e,gBAAkB2vhB,EAAa3vhB,iBAE5C3wD,EAAkBsglB,EAAa16E,kBAC7BuiC,EAAcviC,kBAAoB06E,EAAa16E,kBAClDuiC,EAAcviC,gBAAkB06E,EAAa16E,iBAE5C5lgB,EAAkBsglB,EAAaz6E,eAC7BsiC,EAActiC,eAAiBy6E,EAAaz6E,eAC/CsiC,EAActiC,aAAey6E,EAAaz6E,gBAItDnO,EAAO/5f,UAAU0ilB,YAAc,SAAUn4C,EAAcm4C,GAC9CrglB,EAAkBkoiB,IAAkBloiB,EAAkBqglB,KAClDrglB,EAAkBqglB,EAAYznjB,QAC5BsvgB,EAAatvgB,QAAUynjB,EAAYznjB,QACtCsvgB,EAAatvgB,MAAQynjB,EAAYznjB,OAEhC54B,EAAkBqglB,EAAY31W,YAC5Bw9T,EAAax9T,YAAc21W,EAAY31W,YAC1Cw9T,EAAax9T,UAAY21W,EAAY31W,WAEpC1qO,EAAkBqglB,EAAYtqf,YAC5Bmyc,EAAanyc,YAAcsqf,EAAYtqf,YAC1Cmyc,EAAanyc,UAAYsqf,EAAYtqf,WAEpC/1F,EAAkBqglB,EAAY9lhB,SAC5B2te,EAAa3te,SAAW8lhB,EAAY9lhB,SACvC2te,EAAa3te,OAAS8lhB,EAAY9lhB,QAEjCv6D,EAAkBqglB,EAAY39iB,QAC5BwlgB,EAAaxlgB,QAAU29iB,EAAY39iB,QACtCwlgB,EAAaxlgB,MAAQ29iB,EAAY39iB,SAU7Cg1d,EAAO/5f,UAAU4ilB,cAAgB,SAAUz/iB,GACvC,IAAK9gC,EAAkBuC,KAAKi2E,UAAU+tb,aAAc,CAChDhkgB,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtCthf,KAAK+3hB,cAAci1C,kBAAkB,eACrC,IAAI5ngB,EAAQplE,KAAKi2E,UAAU14E,MAAM05f,UAAUuR,eAAeJ,WAAWrB,cAAc/mgB,KAAKwuf,QACxFxuf,KAAKi+kB,iBAAiB74gB,OAAOlqE,EAAWqjC,GACxCv+B,KAAKu6jB,SAASv6jB,KAAKi2E,WAAW,KAMtCk/a,EAAO/5f,UAAU6ilB,iBAAmB,SAAU74gB,EAAOlK,EAAUn+D,GAC3DiD,KAAKgzkB,wBAAwBhzkB,KAAKwuf,OAAOv4a,eAAW/6E,EAAW6B,EAAOqoE,IAG1E+vb,EAAO/5f,UAAU43kB,wBAA0B,SAAU/8f,EAAW/a,EAAUn+D,EAAOqoE,GAC7E,IAAI+/d,EAAe//d,EAAM4+b,YACpBvmgB,EAAkBuC,KAAK+3hB,cAAcmR,0BACtCnsiB,EAAQiD,KAAK+3hB,cAAcmR,uBAAuBg1C,2BAA2B/4C,EAAcjqe,EAAUn+D,IAErGA,aAAiBwmgB,GACb9lgB,EAAkBy9D,IAClBl7D,KAAKm+kB,kBAAkBh5C,EAAcpoiB,IAI5B,mBAAbm+D,EACAiqe,EAAajhC,eAAiBnngB,EAEZ,eAAbm+D,EACLiqe,EAAa/nC,WAAarggB,EAER,mBAAbm+D,EACLiqe,EAAalhC,eAAiBlngB,EAEZ,gBAAbm+D,EACLiqe,EAAa90O,YAActzT,EAET,eAAbm+D,EACLiqe,EAAajpR,WAAan/Q,EAER,gBAAbm+D,EACLiqe,EAAa/oR,YAAcr/Q,EAET,cAAbm+D,EACLiqe,EAAahpR,UAAYp/Q,EAEP,iBAAbm+D,EACLiqe,EAAa9oR,aAAet/Q,EAEV,uBAAbm+D,IACLiqe,EAAahhC,mBAAqBpngB,GAErB,YAAbm+D,EACAiqe,EAAa/hC,QAAUrmgB,EAEL,YAAbm+D,IACLiqe,EAAat3O,QAAU9wT,KAM/Bo4f,EAAO/5f,UAAU+ilB,kBAAoB,SAAUn6E,EAAao6E,IACpDp+kB,KAAK69jB,2BAA6B79jB,KAAK+3hB,cAAcn+B,WAClD55f,KAAK+3hB,cAAcl+B,aACjBp8f,EAAkBumgB,EAAYn2M,UAC/B7tT,KAAK69kB,qBAAqB75E,EAAYn2M,QAASuwR,EAAYvwR,SAE1DpwT,EAAkBumgB,EAAYZ,UAC/BpjgB,KAAK+9kB,aAAa/5E,EAAYZ,QAASg7E,EAAYh7E,UAGtDpjgB,KAAK69jB,4BACFugB,EAAY9kF,SAAS,mBAAqB8kF,EAAYl6E,iBAAmBF,EAAYE,iBACrFF,EAAYE,eAAiBk6E,EAAYl6E,gBAEzCk6E,EAAY9kF,SAAS,uBAAyB8kF,EAAYj6E,qBAAuBH,EAAYG,qBAC7FH,EAAYG,mBAAqBi6E,EAAYj6E,oBAE7Ci6E,EAAY9kF,SAAS,mBAAqB8kF,EAAYn6E,iBAAmBD,EAAYC,iBACrFD,EAAYC,eAAiBm6E,EAAYn6E,gBAEzCm6E,EAAY9kF,SAAS,eAAiB8kF,EAAYhhF,aAAe4G,EAAY5G,aAC7E4G,EAAY5G,WAAaghF,EAAYhhF,aAG7Cp9f,KAAK88kB,yBAAyB94E,EAAY5K,WAAW,IAEzDjE,EAAO/5f,UAAU0hlB,yBAA2B,SAAU13gB,EAAOi5gB,GACrDj5gB,EAAMqkc,cACNrkc,EAAM2nc,eAAe,GACrB3nc,EAAMmlc,gBACNnlc,EAAM8lc,eAAgB,GAE1BlrgB,KAAKwuf,OAAOlhc,OAAOg/d,cAAclnd,IASrC+vb,EAAO/5f,UAAUkjlB,YAAc,SAAU//iB,GACrC,IAAI9gC,EAAkBuC,KAAKi2E,aAAcx4E,EAAkB8gC,GAA3D,CAGAv+B,KAAK+3hB,cAAci1C,kBAAkB,aACrChtkB,KAAKwuf,OAAOgV,MAAMliB,mBAAoB,EACtC,IAAIi9F,EAAcv+kB,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAU14E,MAAQyC,KAAKi2E,UAAUh3D,IAC/Eu/jB,EAAYx+kB,KAAKi2E,UAAU8ge,UAAY/2iB,KAAKi2E,UAAUh3D,IAAMjf,KAAKi2E,UAAU14E,MACnEghlB,EAAYtnF,UAAUuR,eAAeJ,WAAWrB,cAAc/mgB,KAAKwuf,QAC/Exuf,KAAKo0kB,eAAemK,EAAYtnF,UAAUuR,eAAeH,SAAUk2E,EAAaC,OAAWtjlB,EAAWqjC,GACtGv+B,KAAKu6jB,SAASv6jB,KAAKi2E,WAAW,KAElCk/a,EAAO/5f,UAAUg5kB,eAAiB,SAAU1ugB,EAAKnoE,EAAO0hB,EAAKi8C,EAAUn+D,GAEnE,GADAiD,KAAKmzkB,sBAAsBnzkB,KAAKwuf,OAAOv4a,UAAW/a,EAAUn+D,EAAO2oE,GAC/DzmD,EAAIg4e,UAAUuR,eAAeH,WAAa3ic,EAA9C,CAGA,IAAIgigB,EAAShigB,EAAI6qc,WACZ9ygB,EAAkBiqkB,IACnB1nkB,KAAKo0kB,eAAe1M,EAAQnqkB,EAAO0hB,EAAKi8C,EAAUn+D,KAG1Do4f,EAAO/5f,UAAU+3kB,sBAAwB,SAAUl9f,EAAW/a,EAAUn+D,EAAO2oE,GAC3E,IAAI04gB,EAAc14gB,EAAI4kc,UACjB7sgB,EAAkBuC,KAAK+3hB,cAAcmR,0BACtCnsiB,EAAQiD,KAAK+3hB,cAAcmR,uBAAuBu1C,yBAAyBL,EAAaljhB,EAAUn+D,IAElGA,aAAiBqngB,GACb3mgB,EAAkBy9D,IAClBl7D,KAAK0+kB,gBAAgB3hlB,EAAOqhlB,IAInB,eAAbljhB,EACAkjhB,EAAY55E,WAAazngB,EAEP,WAAbm+D,EACLkjhB,EAAYrokB,OAAShZ,EAEH,aAAbm+D,EACLkjhB,EAAY1xjB,SAAW3vB,EAEL,0BAAbm+D,IACLkjhB,EAAYv5E,sBAAwB9ngB,GAEnCU,EAAkBioE,EAAI0ic,aACvBpogB,KAAK0vkB,gBAAgBhqgB,EAAI0ic,YAAY,KAG7CjT,EAAO/5f,UAAUsjlB,gBAAkB,SAAUngjB,EAAQ6/iB,GAC7C7/iB,EAAO+6d,SAAS,0BAA4B/6d,EAAOsme,wBAA0Bu5E,EAAYv5E,wBACzFu5E,EAAYv5E,sBAAwBtme,EAAOsme,uBAE3Ctme,EAAO+6d,SAAS,aAAe/6d,EAAO7R,WAAa0xjB,EAAY1xjB,WAC/D0xjB,EAAY1xjB,SAAW6R,EAAO7R,UAE9B6R,EAAO+6d,SAAS,eAAiB/6d,EAAOime,aAAe45E,EAAY55E,aACnE45E,EAAY55E,WAAajme,EAAOime,YAEhCjme,EAAO+6d,SAAS,WAAa/6d,EAAOxoB,SAAWqokB,EAAYrokB,SAC3DqokB,EAAYrokB,OAASwoB,EAAOxoB,QAEhC/V,KAAK88kB,yBAAyBsB,EAAYhlF,UAAUgP,YAAY,IASpEjT,EAAO/5f,UAAUujlB,aAAe,SAAUpgjB,GAClC9gC,EAAkBuC,KAAKi2E,YAAcx4E,EAAkB8gC,KAG3Dv+B,KAAK+3hB,cAAci1C,kBAAkB,cACrChtkB,KAAKi0kB,oBAAoBj0kB,KAAKi2E,eAAW/6E,EAAWqjC,GACpDv+B,KAAKu6jB,SAASv6jB,KAAKi2E,WAAW,KAKlCk/a,EAAO/5f,UAAUwjlB,kBAAoB,SAAU3ogB,EAAWl5E,GACtD,IAAI8hlB,EAAoB5ogB,EAAU14E,MAC9BuhlB,EAAkB7ogB,EAAUh3D,IAC3Bg3D,EAAU8ge,YACX8nC,EAAoB5ogB,EAAUh3D,IAC9B6/jB,EAAkB7ogB,EAAU14E,OAEhCyC,KAAKsskB,oBAAoBr2f,EAAW4ogB,GAEpC7+kB,KAAKwuf,OAAOgV,MAAM1hB,wBAAwBi9F,sBAAsBF,EAAkB5nF,UAAUuR,eAAeH,SAAUw2E,EAAmBC,EAAiB/hlB,IAK7Jo4f,EAAO/5f,UAAU64kB,oBAAsB,SAAUh+f,EAAW/a,EAAUn+D,GAClE,IAAIQ,EAAQ04E,EAAU14E,MAClB0hB,EAAMg3D,EAAUh3D,IACfg3D,EAAU8ge,YACXx5iB,EAAQ04E,EAAUh3D,IAClBA,EAAMg3D,EAAU14E,OAOpB,IAAK,IAHDqpE,EAFA4lc,EAAYjvgB,EAAM05f,UAAUuR,eAC5BiE,EAAUxtf,EAAIg4e,UAAUuR,eAExBpjc,EAAQonc,EAAUpE,WAAWrB,cAAc/mgB,KAAKwuf,QAE3Cloe,EAAIkmf,EAAUx9R,YAAa1oN,GAAKmmf,EAAQz9R,YAAa1oN,IAAK,CAC/DsgD,EAAQ5mE,KAAKg/kB,wBAAwBxyE,EAAUpE,WAAYoE,EAAUnE,SAASp5R,SAAU3oN,EAAGmmf,EAAQpE,SAASp5R,UAC5G,IAAK,IAAI/yO,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IACd8D,KAAKqzkB,uBAAuBrzkB,KAAKwuf,OAAOv4a,UAAW/a,EAAUn+D,EAAO6pE,EAAM1qE,GAAGusgB,YAGrGzogB,KAAK88kB,yBAAyB13gB,GAAO,IAKzC+vb,EAAO/5f,UAAU4jlB,wBAA0B,SAAU55gB,EAAO6jgB,EAAej6V,EAAaiwW,GAEpF,IAAK,IADDr4gB,KACK1qE,EAAI+skB,EAAe/skB,GAAK+ilB,EAAa/ilB,IAE1C,IAAK,IADDwpE,EAAMN,EAAMiyb,aAAan7f,GACpBwnB,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IACrCgiD,EAAI2xb,aAAa3ze,GAAGsrN,cAAgBA,GACpCpoK,EAAMpiE,KAAKkhE,EAAI2xb,aAAa3ze,IAIxC,OAAOkjD,GAEXuub,EAAO/5f,UAAUkgkB,eAAiB,SAAUl2f,EAAO4pK,EAAautV,GAE5D,IAAK,IADD31f,KACKtgD,EAAI,EAAGA,EAAI8+C,EAAMiyb,aAAa76f,OAAQ8pB,IAE3C,IAAK,IADDo/C,EAAMN,EAAMiyb,aAAa/we,GACpBpqB,EAAI,EAAGA,EAAIwpE,EAAI2xb,aAAa76f,OAAQN,IAAK,CAC9C,IAAI6rE,EAAOrC,EAAI2xb,aAAan7f,GACxBqgkB,EACIx0f,EAAKinK,YAAcjnK,EAAK0gc,WAAW31M,aAAe9jF,GAClDpoK,EAAMpiE,KAAKujE,GAIXA,EAAKinK,cAAgBA,GACrBpoK,EAAMpiE,KAAKujE,GAK3B,OAAOnB,GAKXuub,EAAO/5f,UAAU4ugB,cAAgB,SAAU5kc,GACvC,OAAyC,IAArCA,EAAM4+b,YAAYE,gBAAiE,YAAzC9+b,EAAM4+b,YAAYG,mBACf,SAAzC/+b,EAAM4+b,YAAYG,oBAA0E,UAAzC/+b,EAAM4+b,YAAYG,mBAC9D/+b,EAAM4+b,YAAYE,eAGgB,IAArC9+b,EAAM4+b,YAAYE,eACX,EAGApF,GAAcQ,oBAAoBt/f,KAAKwuf,OAAO4tB,WAAWpmgB,OAAS,IAAMovD,EAAM4+b,YAAYE,eAItGpF,GAAcQ,oBAAoBt/f,KAAKwuf,OAAOlhc,OAAO08c,cAAc5kc,KAE9E+vb,EAAO/5f,UAAUi4kB,uBAAyB,SAAUp9f,EAAW/a,EAAUn+D,EAAOqhlB,GAI5E,GAHK3glB,EAAkBuC,KAAK+3hB,cAAcmR,0BACtCnsiB,EAAQiD,KAAK+3hB,cAAcmR,uBAAuBg2C,0BAA0Bd,EAAaljhB,EAAUn+D,IAEnGA,aAAiBqogB,GAIjB,OAHI3ngB,EAAkBy9D,IAClBl7D,KAAKm/kB,iBAAiBpilB,EAAOqhlB,GAE1BrhlB,EAEM,eAAbm+D,EACAkjhB,EAAYliU,WAAan/Q,EAEP,cAAbm+D,EACLkjhB,EAAYjiU,UAAYp/Q,EAEN,gBAAbm+D,EACLkjhB,EAAYhiU,YAAcr/Q,EAER,iBAAbm+D,EACLkjhB,EAAY/hU,aAAet/Q,EAET,mBAAbm+D,GACLkjhB,EAAYl6E,eAAiBnngB,EAC7BqhlB,EAAYlwR,UAAYnxT,GAEN,cAAbm+D,EACLkjhB,EAAYlwR,UAAYnxT,EAEN,eAAbm+D,EACLkjhB,EAAYtrR,WAAa/1T,EAEP,YAAbm+D,EACLkjhB,EAAYxtR,QAAU7zT,EAEJ,uBAAbm+D,EACLkjhB,EAAYj6E,mBAAqBpngB,EAEf,sBAAbm+D,IACLkjhB,EAAYjuhB,kBAAoBpzD,GAEnB,YAAbm+D,EACAkjhB,EAAYh7E,QAAUrmgB,EAEJ,YAAbm+D,IACLkjhB,EAAYvwR,QAAU9wT,IAI9Bo4f,EAAO/5f,UAAU+jlB,iBAAmB,SAAU12E,EAAY21E,GACjD3glB,EAAkBgrgB,IAAgBhrgB,EAAkB2glB,KACjDp+kB,KAAK69jB,2BACApgkB,EAAkBgrgB,EAAW56M,UAC9B7tT,KAAK69kB,qBAAqBO,EAAYvwR,QAAS46M,EAAW56M,SAEzDpwT,EAAkBgrgB,EAAWrF,UAC9BpjgB,KAAK+9kB,aAAaK,EAAYh7E,QAASqF,EAAWrF,WAKlDqF,EAAWnP,SAAS,mBAAqB8kF,EAAYl6E,iBAAmBuE,EAAWvE,iBACnFk6E,EAAYl6E,eAAiBuE,EAAWvE,gBAExCuE,EAAWnP,SAAS,uBAAyB8kF,EAAYj6E,qBAAuBsE,EAAWtE,qBAC3Fi6E,EAAYj6E,mBAAqBsE,EAAWtE,oBAE5CsE,EAAWnP,SAAS,sBAAwB8kF,EAAYjuhB,oBAAsBs4c,EAAWt4c,oBACzFiuhB,EAAYjuhB,kBAAoBs4c,EAAWt4c,sBAQ3Dglc,EAAO/5f,UAAUiX,QAAU,WACvBrS,KAAKwuf,YAAStzf,EACd8E,KAAKosD,UAET+oc,EAAO/5f,UAAUgklB,WAAa,SAAUp+kB,GACpC,GAAIA,aAAmBy+f,GAAiB,CACpC,IAAIke,EAAc38gB,EAAQyuY,SAC1B,GAAIzuY,aAAmBy+f,IAAyC,IAAtBz+f,EAAQ0+f,WAAmBie,aAAuB/U,IAC5B,IAAzD+U,EAAY3uf,KAAK/e,OAAO2F,cAAcrX,QAAQ,OACjD,OAAO,EAGf,OAAO,GAMX42f,EAAO/5f,UAAUo8gB,UAAY,SAAU6nE,GAInC,GAHI5hlB,EAAkB4hlB,KAClBA,EAAWr/kB,KAAKi2E,UAAU6re,uBAEzB9hjB,KAAKo/kB,WAAWC,GAArB,CAIA,IAAI51jB,EAAOzpB,KAAKi2E,UAAUk4c,aAAakxD,IACU,IAA7C51jB,EAAK+2C,oBAAoBjiE,QAAQ,QACjCyB,KAAKs/kB,sBAAsBt/kB,KAAKu/kB,oBAAoBv/kB,KAAKw/kB,eAAe/1jB,EAAM41jB,OAGtFlqF,EAAO/5f,UAAUoklB,eAAiB,SAAU/1jB,EAAM41jB,GAC9C,IAAII,KAIJ,GAHAA,EAAYC,mBAAoB,EAChCD,EAAYrzS,YAAa,EAEE,sBAAvB3iR,EAAK7T,cACL6pkB,EAAYE,WAAa,EACzBF,EAAYG,SAAW,OAIvB,IAAK,IADDC,EAAWp2jB,EAAKvsB,MAAM,MACjBhB,EAAI,EAAGA,EAAI2jlB,EAASrjlB,OAAQN,IAAK,CACtC,IAAI4jlB,EAAQD,EAAS3jlB,GACrB,GAAqB,IAAjB4jlB,EAAMtjlB,OAGV,OAAQsjlB,EAAM,IACV,IAAK,IACD,GAAKrilB,EAAkBqilB,EAAMpwkB,MAAM,SAM/B+vkB,EAAYE,WAAa,EACzBF,EAAYG,SAAW,MAPkB,CACzC,IAAIj6f,EAASm6f,EAAMpwkB,MAAM,QAAQgoB,IAAIN,QACrCqojB,EAAYE,WAAah6f,EAAO,GAChC85f,EAAYG,SAAWj6f,EAAO,GAMlC,MACJ,IAAK,IACD85f,EAAYM,kBAAmB,EAC/B,MACJ,IAAK,IACDN,EAAYC,mBAAoB,EAChC,MACJ,IAAK,IACDD,EAAYrzS,YAAa,EACzB,MACJ,IAAK,IACDqzS,EAAYO,sBAAuB,EACnC,MACJ,IAAK,IACDhglB,KAAKiglB,cAAcR,EAAaK,IAMhD,IAAI3jF,EAAOkjF,EAASpoF,UAAUhF,gBAAgBmK,iBAO9C,OANID,EAAK3/f,OAAS,IACdijlB,EAAYjsE,UAAYrX,EAAKA,EAAK3/f,OAAS,GAAGg3gB,WAE9CisE,EAAYrzS,YAAc3uS,EAAkBgilB,EAAYjsE,aACxDisE,EAAYjsE,UAAY,OAErBisE,GAEXtqF,EAAO/5f,UAAU6klB,cAAgB,SAAUR,EAAaS,GACpDT,EAAYU,iBAMZ,IAAK,IADDx6f,GADJu6f,GADAA,GADAA,GADAA,EAAUA,EAAQjjlB,QAAQ,IAAK,KACbA,QAAQ,IAAK,KACbA,QAAQ,IAAK,KACbgT,QACG/S,MAAM,KAClB4U,EAAQ,EAAGA,EAAQ6zE,EAAOnpF,OAAQsV,IACvC2tkB,EAAYU,cAAcx6f,EAAO7zE,IAAU8iB,SAAS+wD,EAAO7zE,EAAQ,GAAI,IACvEA,KAORqjf,EAAO/5f,UAAUkklB,sBAAwB,SAAUc,GAC/CpglB,KAAK2rhB,gBAAiB,EACtB3rhB,KAAKg4hB,mBAAmB,OACpBv6hB,EAAkB2ilB,MAElBA,MACwBT,WAAa,EACrCS,EAAwBR,SAAW,EACnCQ,EAAwBL,kBAAmB,EAC3CK,EAAwBJ,sBAAuB,EAC/CI,EAAwBV,mBAAoB,EAC5CU,EAAwBh0S,YAAa,EACrCg0S,EAAwB5sE,UAAY,OAExC,IAAI6rE,OAAWnklB,EACXuuB,OAAOvuB,EACwB,oBAA/B8E,KAAKi2E,UAAU4ic,cACfwmE,EAAWr/kB,KAAKi2E,UAAU6re,uBAE1Bu9B,aAAoB5/E,KACpBz/f,KAAKi2E,UAAU14E,MAAMgxiB,wBAAwB8wC,EAASp1hB,KAAMo1hB,EAAU,EAAGr/kB,KAAKi2E,UAAU14E,MAAMq9B,UAC9F56B,KAAKi2E,UAAUh3D,IAAIsvhB,wBAAwB8wC,EAAS1/E,SAAS11c,KAAMo1hB,EAAS1/E,SAAU,EAAG3/f,KAAKi2E,UAAUh3D,IAAI2b,UAC5G56B,KAAKs/jB,YAGT71iB,EAAOzpB,KAAKqglB,sBAAsBD,GAClC,IAAI9K,EAAmBt1kB,KAAKi2E,UAAU14E,MAAMs5iB,mBACxCysB,EAAYtjkB,KAAK6/jB,iBAAiB7/jB,KAAKi2E,UAAU14E,OACjDo6kB,EAAe33kB,KAAKwngB,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YAG/Ey5f,EAAU3mgB,KAAKsglB,SAAStglB,KAAKu/kB,oBAAoBa,GAA0B32jB,GAAM,EAAM6rjB,GAC3F,GAAI3uE,EAAQnqgB,OAAS,EAAG,CACpB,IAAI+jlB,EAAc,IAAIrpF,GAClBspF,EAAc,IAAIn5E,GAAWk5E,GACjCA,EAAYlpF,aAAa7yf,KAAKg8kB,GAC9B,IAAI1ukB,EAAQ,EACPwjkB,IACDxjkB,EAAQ,GAEZ,IACI8tf,EADO+G,EAAQ70f,GAAOulf,aAAa,GACjBj9e,SAAS,GAC/Bpa,KAAKyglB,eAAe7gF,EAAY4gF,GAChC75E,EAAQnigB,KAAK+7kB,GACbvglB,KAAK0glB,gBAAgB/5E,GAEzB3mgB,KAAK+uiB,2BAA2B/uiB,KAAKi2E,UAAU14E,MAAOo6kB,GACtD33kB,KAAKi2E,UAAUh3D,IAAI6vhB,oBAAoB9uiB,KAAKi2E,UAAU14E,OACtDyC,KAAKq+jB,sBAAsB13D,GAC3B3mgB,KAAK2rhB,gBAAiB,EACtB3rhB,KAAK2glB,gBACD3glB,KAAK+3hB,eACL/3hB,KAAK+3hB,cAAc+iD,gCAG3B3lF,EAAO/5f,UAAUsllB,gBAAkB,SAAU/5E,GACzC,IAAIi6E,EAAY,IAAI1pF,GAChB2pF,EAAY,IAAIx5E,GAAWu5E,GAC/BA,EAAUvpF,aAAa7yf,KAAKq8kB,GAC5Bl6E,EAAQnigB,KAAKo8kB,IAEjBzrF,EAAO/5f,UAAUillB,sBAAwB,SAAUZ,GAC/C,IAAIqB,EAAe,MAGdrjlB,EAAkBgilB,EAAYE,aAA0C,IAA3BF,EAAYE,YAAqBlilB,EAAkBgilB,EAAYG,WAAsC,IAAzBH,EAAYG,WACtIkB,EAAeA,EAAe,SAAWrB,EAAYE,WAAa,IAAMF,EAAYG,SAAW,KAE/FH,EAAYC,oBAAsBD,EAAYrzS,aAC9C00S,GAA8B,YAE7BrB,EAAYC,oBACboB,GAA8B,QAE9BrB,EAAYM,mBACZe,GAA8B,YAE9BrB,EAAYO,uBACZc,GAA8B,QAElC,IAAIZ,EAAUlglB,KAAK+glB,iBAAiBtB,GAIpC,OAHIS,EAAQ1jlB,OAAS,IACjBsklB,GAA8BZ,GAE3BY,GAEX3rF,EAAO/5f,UAAU2llB,iBAAmB,SAAUtB,GAC1C,IAAIS,EAAU,GAEd,IAAKzilB,EAAkBgilB,EAAYU,eAC/B,IAAK,IAAI/hlB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmilB,EAAYU,eAAgB/hlB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAChF,IAAIf,EAAMwF,EAAGzE,GACb8hlB,EAAUA,EAAU7ilB,EAAM,IAAMoilB,EAAYU,cAAc9ilB,GAAK6P,WAAa,IAKpF,OAFAgzkB,EAAUA,EAAQ7+kB,MAAM,GAAI,GAC5B6+kB,EAAU/2kB,SAAe+2kB,EAAU,KAMvC/qF,EAAO/5f,UAAUqllB,eAAiB,SAAU7gF,EAAYiT,GACpD,IAAIlT,EAAW,IAAIF,GAAgB,GACnCE,EAAS4S,eAAiB3S,EAAW2S,eACrC3S,EAAW2S,eAAe5S,SAAWA,EACrCA,EAASC,WAAaA,EACtBD,EAASC,WAAWD,SAAWA,EAC/BA,EAAS11c,KAAO4od,EAChBA,EAAWz4f,SAAS5V,KAAKm7f,IAE7BxK,EAAO/5f,UAAUmklB,oBAAsB,SAAUE,GAmB7C,OAlBIhilB,EAAkBgilB,EAAYE,aAAeF,EAAYE,WAAa,KACtEF,EAAYE,WAAa,IAEzBlilB,EAAkBgilB,EAAYG,WAAaH,EAAYG,SAAWH,EAAYG,YAC9EH,EAAYG,SAAWH,EAAYE,WAAa,EAAIF,EAAYE,WAAa,GAE7ElilB,EAAkBgilB,EAAYM,oBAC9BN,EAAYM,kBAAmB,GAE/BtilB,EAAkBgilB,EAAYC,qBAC9BD,EAAYC,mBAAoB,GAEhCjilB,EAAkBgilB,EAAYrzS,cAC9BqzS,EAAYrzS,YAAa,GAEzB3uS,EAAkBgilB,EAAYU,iBAC9BV,EAAYU,kBAETV,GAOXtqF,EAAO/5f,UAAUkllB,SAAW,SAAUb,EAAavxD,EAAW8yD,EAAa1L,GACvE,IAAI2L,EAAajhlB,KAAKwuf,OAAOzmQ,MAAM,GAAG69Q,YAAY,GAC9Ce,KACJ3mgB,KAAKkhlB,oBAAoBzB,GACrBA,EAAYO,sBACZhglB,KAAKmhlB,oBAAoB1B,GAG7B,IADA,IAAI55E,EAASo7E,EAAW5pF,aAAa,QACnBn8f,IAAX2qgB,GAAsB,CAEzB,GAAIA,aAAkB3O,KAAoBl3f,KAAKohlB,eAAev7E,IAAY45E,EAAYO,sBAAwBhglB,KAAKqhlB,oBAAoBx7E,IAAW,CAC9I,IAAIm1E,EAAeh7kB,KAAKshlB,kBAAkBz7E,GAE1C7lgB,KAAKuhlB,iBAAiB17E,EAAQc,EAASunB,EAAW8sD,EAAcyE,EAAauB,EAAa1L,GAC1F0L,GAAc,EAElBn7E,EAAS7lgB,KAAKi2E,UAAUq7d,sBAAsBzrC,GAGlD,OADA7lgB,KAAK6+hB,aACEl4B,GAEXxR,EAAO/5f,UAAU+llB,oBAAsB,SAAU9yY,GAC7C,IAAK,IAAInyM,EAAImyM,EAASsxY,WAAYzjlB,GAAKmyM,EAASuxY,SAAU1jlB,IAAK,CAC3D,IAAIsllB,EAAa,QAAUtllB,EAAEgR,WACzBzP,EAAkBuC,KAAK6+hB,UAAU2iD,MACjCxhlB,KAAK6+hB,UAAU2iD,GAActllB,KASzCi5f,EAAO/5f,UAAU8llB,oBAAsB,SAAU7yY,GAC7C,IACK,IAAInyM,EAAImyM,EAASsxY,WAAYzjlB,GAAKmyM,EAASuxY,SAAU1jlB,IAAK,CAC3D,IAAIullB,EAAe,WAAavllB,EAAEgR,WAC9BzP,EAAkBuC,KAAK6+hB,UAAU4iD,MACjCzhlB,KAAK6+hB,UAAU4iD,GAAgBvllB,GAGvC,IAAKuB,EAAkB4wM,EAAS8xY,eAC5B,IAAK,IAAI/hlB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK+wM,EAAS8xY,eAAgB/hlB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC7E,IAAIf,EAAMwF,EAAGzE,GACb4B,KAAK6+hB,UAAUxhiB,GAAOgxM,EAAS8xY,cAAc9ilB,KAOzD83f,EAAO/5f,UAAUgmlB,eAAiB,SAAUj2B,GACxC,IAAIzmjB,EAAQymjB,EAAKl5D,gBAAgB8F,UACjC,YAAc78f,IAAVwJ,IACOjH,EAAkBuC,KAAK6+hB,UAAUn6hB,EAAM6yB,QAItD49d,EAAO/5f,UAAUimlB,oBAAsB,SAAUl2B,GAC7C,IAAIlrD,EAAYkrD,EAAKl5D,gBAAgBwL,aACrC,OAAOhggB,EAAkBuC,KAAK6+hB,UAAU5+B,KAK5C9K,EAAO/5f,UAAUsmlB,sBAAwB,SAAU7uE,EAAYqb,GAE3D,IAAItuB,EAAa,IAAIH,GAAgB,GACrCG,EAAWmT,aAAc,EACzBnT,EAAW31c,KAAO4od,EAClBA,EAAWz4f,SAAS5V,KAAKo7f,GAEzB,IAAIzpe,EAAc,IAAIyye,GACtBzye,EAAYnH,KAAOk/f,EACnB/3f,EAAY8zB,KAAO4od,EACnBA,EAAWz4f,SAAS5V,KAAK2xB,GAEzB,IAAIo8e,EAAiB,IAAI9S,GAAgB,GAKzC,OAJA8S,EAAe3S,WAAaA,EAC5B2S,EAAe3S,WAAW2S,eAAiBA,EAC3CA,EAAetod,KAAO4od,EACtBA,EAAWz4f,SAAS5V,KAAK+tgB,GAClB3S,GAMXzK,EAAO/5f,UAAUmmlB,iBAAmB,SAAU17E,EAAQc,EAASunB,EAAW8sD,EAAcyE,EAAauB,EAAa1L,GAC9G,IAAI11E,OAAa1kgB,EACb60jB,OAAU70jB,EACVymlB,OAAUzmlB,EAEd,GAAuB,IAAnByrgB,EAAQnqgB,QAA+D,IAA/CmqgB,EAAQ,GAAGtP,aAAa,GAAGj9e,SAAS5d,QAAiBiB,EAAkBujlB,IAAiBA,EAG/G,CACDjxB,EAAU,IAAI74D,GACd,IAAI+I,OAAY/kgB,EAEZ0mlB,EAAmB/7E,EAAO5T,gBAAgB8F,UAAUxge,KAEpD0oe,EADAw/E,EAAYO,sBAAwBvilB,EAAkBuC,KAAK6+hB,UAAU+iD,IACzD/7E,EAAO5T,gBAAgBwL,aAGvBmkF,EAEhB,IAAIC,EAAe,MAAQ7hlB,KAAK6+hB,UAAU5+B,GACtCS,EAAY1ggB,KAAKwuf,OAAOjrf,OAAOu0f,WAAW+pF,EAAc,aAQ5D,GAPIpklB,EAAkBijgB,KAElB1ggB,KAAKwuf,OAAOgV,MAAM9ma,OAAO4mc,WAAWh3e,KAAKuB,MAAM7tD,KAAKw+jB,qBAAsBlygB,KAAKuB,MAAM7tD,KAAKwuf,OAAO2oC,iBAAiBzvhB,IAAIm6kB,IAAgB7hlB,KAAKwuf,OAAOjrf,QAClJm9f,EAAY1ggB,KAAKwuf,OAAOjrf,OAAOu0f,WAAW+pF,EAAc,cAE5D9xB,EAAQ99D,gBAAgBwJ,WAAWiF,GAE/B++E,EAAYrzS,YAAcqzS,EAAYC,kBAAmB,CACzD,IAAIv5C,EAAU,IAAIxqC,GAClBwqC,EAAQjyhB,SAAW4qf,GAAcQ,oBAAoBt/f,KAAKwuf,OAAO4tB,WAAWpmgB,OAC5EmwhB,EAAQ3yB,UAAYisE,EAAYjsE,UAChC2yB,EAAQnqC,eAAiB,EACzBmqC,EAAQlqC,iBAAmB,QAC3B8zD,EAAQ99D,gBAAgBkK,KAAK33f,KAAK2hiB,GAEtCw7C,EAAU,IAAIt6E,GAAW0oD,GACzBA,EAAQ14D,aAAa7yf,KAAKm9kB,QA/B1BA,EAAUh7E,EAAQ,GAAGtP,aAAa,QAkCjBn8f,IAAhB8llB,GAA8BA,IAC1BvjlB,EAAkB63kB,IAAsBA,GACzCt1kB,KAAK0glB,gBAAgB/5E,GAEzB3mgB,KAAK0hlB,sBAAsBC,EAASzzD,IAGxC,IAAK,IADDl/f,EAAO,GACFy6Q,EAAY,EAAGA,EAAYo8N,EAAOxO,aAAa76f,OAAQitS,IAE5D,IAAK,IADDopO,EAAahN,EAAOxO,aAAa5tN,GAC5B1rE,EAAe,EAAGA,EAAe80S,EAAWz4f,SAAS5d,OAAQuhO,IAAgB,CAClF,IAAI/8N,EAAU6xgB,EAAWz4f,SAAS2jN,GAClC,GAAI/8N,aAAmB4ngB,IAAkB5ngB,aAAmBmogB,GAAoB,CAC5E,IAAIpue,EAAO/5B,EAAQguB,MAEY,IAA3B+L,EAAKx8B,QADK,QAEVw8B,EAAOA,EAAK99B,QAAQ,IAAIknB,OAFd,KAE8B,KAAM,MAElD6K,GAAc+L,GAI1B,GAAa,KAAT/L,EAAa,CAEb,GAAIywjB,EAAYM,uBAAsC7klB,IAAjB8/kB,EACjCp7E,EAAa5/f,KAAK8hlB,mBAAmBH,EAAS3G,EAAchsjB,OAE3D,CACD,IAAIy4C,EAAO,IAAImhc,GACfnhc,EAAKz4C,KAAOA,EACZy4C,EAAKxd,KAAO03hB,EACZA,EAAQvnkB,SAAS5V,KAAKijE,GAG1B,GAAIg4gB,EAAYC,wBAAuCxklB,IAAjB8/kB,EAA6B,CAC/D,GAAIyE,EAAYrzS,WAAY,CACxB,IAAImnO,EAAU,IAAID,GAClBC,EAAQvkf,KAAO,KACfukf,EAAQtpd,KAAO03hB,EACfA,EAAQvnkB,SAAS5V,KAAK+ugB,GAE1B,IAAIwuE,EAAY/hlB,KAAKgilB,oBAAoBhH,EAAc2G,EAASlC,EAAYrzS,WAAYy5N,GACxF7lgB,KAAKyglB,eAAesB,EAAWJ,GAE/BlC,EAAYM,uBAAmC7klB,IAAf0kgB,GAChC5/f,KAAKyglB,eAAe7gF,EAAY+hF,GAGnClklB,EAAkBsyjB,IAAsB,KAAT/giB,IAAegyjB,GAC/Cr6E,EAAQnigB,KAAKurjB,IAMrB56D,EAAO/5f,UAAU0mlB,mBAAqB,SAAUjvE,EAAYmoE,EAAchsjB,GACtE,IAAIk/f,EAAY,mBAAsB8sD,EAAe,KACjDp7E,EAAa5/f,KAAK0hlB,sBAAsB7uE,EAAYqb,GAEpDzmd,EAAO,IAAImhc,GAIf,OAHAnhc,EAAKz4C,KAAOA,EACZy4C,EAAKxd,KAAO4od,EACZA,EAAWz4f,SAAS5V,KAAKijE,GAClBm4b,GAMXzK,EAAO/5f,UAAU4mlB,oBAAsB,SAAUC,EAAcpvE,EAAYqvE,EAAcr8E,GACrF,IAAIqoB,EAAY,WAAa+zD,EAAe,QACxCriF,EAAa5/f,KAAK0hlB,sBAAsB7uE,EAAYqb,GACpDl/f,GAAQhvB,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQsngB,EAAO/I,WAAWvvV,MAAQ,GAAGrgK,WAE/Du6D,EAAO,IAAI2rc,GASf,OARA3rc,EAAKm4b,WAAaA,EACbsiF,IACDlzjB,EAAO,IAAMA,GAEjBy4C,EAAKz4C,KAAOA,EACZy4C,EAAKxd,KAAO4od,EACZA,EAAWz4f,SAAS5V,KAAKijE,GACzBznE,KAAK49jB,cAAcqkB,GAAgBx6gB,EAC5Bm4b,GAEXzK,EAAO/5f,UAAUullB,cAAgB,WAC7B,IAAK,IAAIvilB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAK49jB,eAAgBx/jB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACzE,IAAIf,EAAMwF,EAAGzE,GAET+jlB,GADWnilB,KAAKwuf,OAAOwuC,UAAUt1hB,IAAIrK,GACjB45f,UAAU6F,WAAWvvV,KAAKz7J,MAAQ,GAAG5E,WACzDu6D,EAAOznE,KAAK49jB,cAAcvgkB,GAC9B,GAAI8klB,IAAY16gB,EAAKz4C,KAAM,CACvBy4C,EAAKz4C,KAAOmzjB,EACZ,IAAIlrF,EAAYxvb,EAAKwvb,UACjBxtN,EAAYwtN,EAAUI,aAAa94f,QAAQkpE,EAAKxd,MAChD8zK,EAAet2J,EAAKxd,KAAK7vC,SAAS7b,QAAQkpE,GAC9CznE,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBl1B,EAAWxtN,EAAW1rE,MAOvEo3R,EAAO/5f,UAAUkmlB,kBAAoB,SAAUz7E,GAC3C,IAAIm1E,OAAe9/kB,EACfg8U,EAAa2uL,EAAOxO,aAAa76f,OACrC,GAAI06U,EAAa,EAAG,CAChB,IAAI+vP,EAAYphE,EAAOxO,aAAa,GAChC2rD,EAAUn9C,EAAOxO,aAAangL,EAAa,GAC/C,QAAmBh8U,IAAd+rkB,QAAyC/rkB,IAAZ8njB,EAAwB,CACtD,IAAIwB,EAAeyiB,EAAU7sjB,SAAS,GAGtC,IAAK3c,EAAkB+mjB,IAAiBA,aAAwB17C,IAAoD,IAA9B07C,EAAa5wC,cAAuB4wC,EAAajthB,KAAK3hB,cAAclG,MAAM,SAC5J,OAAO80iB,EAAajthB,KAExB,IAAIkthB,EAAazB,EAAQ5oiB,SAAS4oiB,EAAQ5oiB,SAAS5d,OAAS,QACtCtB,IAAjBspjB,QAA+CtpjB,IAAfupjB,IACjCzkjB,KAAKi2E,UAAU14E,MAAMgxiB,wBAAwB04B,EAAWziB,EAAc,EAAGxkjB,KAAKi2E,UAAU14E,MAAMq9B,UAC9F56B,KAAKi2E,UAAUh3D,IAAIsvhB,wBAAwByU,EAASyB,EAAYA,EAAWjojB,OAAQwD,KAAKi2E,UAAUh3D,IAAI2b,UACtGogjB,EAAeh7kB,KAAKoilB,uBACpBpilB,KAAK26kB,eAAeK,KAIhC,OAAOA,GAKX7lF,EAAO/5f,UAAUgnlB,qBAAuB,WACpCpilB,KAAK8+hB,gBAGL,IAFA,IAAI5/gB,EAAQ,GAAKlf,KAAK8+hB,cAAc5xhB,WAAW1Q,OAC3Cs1I,EAAe,GACZ5yH,EAAQ,EAAI,GACf4yH,EAAe,IAAMA,EACrB5yH,IAGJ,MADmB,OAAS4yH,EAAe9xI,KAAK8+hB,eAOpD3pC,EAAO/5f,UAAUinlB,uBAAyB,SAAUlyhB,EAAmBntB,GACnEhjC,KAAKwjgB,MAAMliB,mBAAoB,EAC/B,IAAIrra,EAAYj2E,KAAKwjgB,MAAMvtb,UAC3B,GAAIA,EAAU2hK,SAAW3hK,EAAU14E,MAAM05f,UAAUsR,cAAe,CAC1DvogB,KAAKwjgB,MAAMu0B,eACX/3hB,KAAKwjgB,MAAMu0B,cAAcC,mBAAmB/hd,EAAW,kBAG3DA,EAAU2je,kBACV55iB,KAAK4sc,YAAY,gCACjB,IAAI67D,EAAaxyb,EAAU14E,MAAM05f,UAAUuR,eAAeC,WAC1DzogB,KAAKqzkB,uBAAuBp9f,EAAW,oBAAqB9lB,EAAmBs4c,GAC/EzogB,KAAKu6jB,SAAStkf,GAAW,GACzBj2E,KAAK4sc,YAAY,iBACjB5sc,KAAKiwkB,sBAAsB,gBAAiBjtiB,GAAe,GAC3DhjC,KAAKu6jB,SAASv6jB,KAAKwjgB,MAAMvtb,WAAW,GAChCj2E,KAAKwjgB,MAAMu0B,eACX/3hB,KAAKwjgB,MAAMu0B,cAAcQ,4BAIzBv4hB,KAAKwjgB,MAAMu0B,eACX/3hB,KAAKwjgB,MAAMu0B,cAAcC,mBAAmB/hd,EAAW,kBAEtDx4E,EAAkBw4E,EAAU42M,SAAS52M,EAAU14E,MAAO04E,EAAUh3D,QAEjEjf,KAAKizkB,2BAA2Bh9f,EAAW,+BAAgC9lB,GAC3EnwD,KAAKu6jB,SAASv6jB,KAAKwjgB,MAAMvtb,WAAW,GACpCj2E,KAAK4sc,YAAY,iBAEjB5sc,KAAK2vkB,mCAAmC,gBAAiB3siB,GAAe,GACxEhjC,KAAKu6jB,SAAStkf,GAAW,IAEzBj2E,KAAKwjgB,MAAMu0B,eACX/3hB,KAAKwjgB,MAAMu0B,cAAcQ,wBAI9BpjC,KCv9TPmtF,GAA+B,WAC/B,SAASA,EAAc9+E,EAAO11O,GAC1B9tR,KAAKuilB,sBAAmBrnlB,EACxB8E,KAAKwilB,yBAAsBtnlB,EAC3B8E,KAAKyilB,eAAiBj/E,EACtBxjgB,KAAK0ilB,kBAAoB50T,EAyC7B,OAvCAxvR,OAAOuJ,eAAey6kB,EAAclnlB,UAAW,kBAI3CsM,IAAK,WACD,OAAO1H,KAAKuilB,kBAKhBl7kB,IAAK,SAAUtK,GACXiD,KAAKuilB,iBAAmBxllB,GAE5B4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAey6kB,EAAclnlB,UAAW,qBAI3CsM,IAAK,WACD,OAAO1H,KAAKwilB,qBAKhBn7kB,IAAK,SAAUtK,GACXiD,KAAKwilB,oBAAsBzllB,GAE/B4K,YAAY,EACZC,cAAc,IAKlB06kB,EAAclnlB,UAAUiX,QAAU,WAC9BrS,KAAKyilB,oBAAiBvnlB,EACtB8E,KAAK0ilB,uBAAoBxnlB,GAEtBonlB,KAMPK,GAAyC,WACzC,SAASA,EAAwBC,EAAarT,GAC1CvvkB,KAAK6ilB,mBAAgB3nlB,EACrB8E,KAAK8ilB,sBAAmB5nlB,EACxB8E,KAAK4ilB,YAAcA,EACnB5ilB,KAAKuvkB,eAAiBA,EA0C1B,OAxCAjxkB,OAAOuJ,eAAe86kB,EAAwBvnlB,UAAW,eAIrDsM,IAAK,WACD,OAAO1H,KAAK6ilB,eAKhBx7kB,IAAK,SAAUtK,GACXiD,KAAK6ilB,cAAgB9llB,GAEzB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe86kB,EAAwBvnlB,UAAW,kBAIrDsM,IAAK,WACD,OAAO1H,KAAK8ilB,kBAKhBz7kB,IAAK,SAAUtK,GACXiD,KAAK8ilB,iBAAmB/llB,GAE5B4K,YAAY,EACZC,cAAc,IAKlB+6kB,EAAwBvnlB,UAAUiX,QAAU,WACxCrS,KAAK4ilB,iBAAc1nlB,EACnB8E,KAAKuvkB,eAAel9jB,UACpBrS,KAAKuvkB,oBAAiBr0kB,GAEnBynlB,KAMPI,GAAkC,WAClC,SAASA,EAAiB5hH,EAAempC,GACrCtqgB,KAAKmhe,cAAgBA,EACrBnhe,KAAKsqgB,UAAYA,EACjBtqgB,KAAKgjlB,cAAgB14E,EAAU9F,WAcnC,OAZAu+E,EAAiB3nlB,UAAU6nlB,cAAgB,SAAUnqH,EAAQ0qC,GAEzD,IAAI0/E,EAAuBljlB,KAAKsqgB,UAAU9F,WAE1ChB,EAAM1U,aAAakrC,YAAY1T,gBAAgBtmhB,KAAKsqgB,UAAUlR,UAAWtgC,EAAS94d,KAAKoua,cAAiBpua,KAAKoua,cAC7Go1F,EAAMhV,OAAOlhc,OAAOg/d,cAActshB,KAAKsqgB,UAAUlR,UAAUgP,YACvDpogB,KAAKsqgB,UAAU9F,aAAexkgB,KAAKgjlB,gBACnChjlB,KAAKsqgB,UAAU9F,WAAaxkgB,KAAKgjlB,eAGrChjlB,KAAKgjlB,cAAgBE,GAElBH,KAMPI,GAAkC,WAClC,SAASA,EAAiB/9gB,EAAOo+b,GAC7BxjgB,KAAKypgB,YAAc,IAAIC,GACvB1pgB,KAAKgkgB,YAAc,IAAIo/E,GACvBpjlB,KAAK4sO,QACL5sO,KAAKwjgB,MAAQA,EACbxjgB,KAAKqjlB,eAAej+gB,GA+CxB,OA7CA+9gB,EAAiB/nlB,UAAUiolB,eAAiB,SAAUj+gB,GAC9CA,EAAMqkc,cACNzpgB,KAAKypgB,YAAcrkc,EAAMqkc,YAAYpqgB,SAErC+lE,EAAM4+b,cACNhkgB,KAAKgkgB,YAAY5G,WAAah4b,EAAM4+b,YAAY5G,WAChDp9f,KAAKgkgB,YAAYE,eAAiB9+b,EAAM4+b,YAAYE,eACpDlkgB,KAAKgkgB,YAAYG,mBAAqB/+b,EAAM4+b,YAAYG,oBAE5D,IAAK,IAAIjogB,EAAI,EAAGA,EAAIkpE,EAAMiyb,aAAa76f,OAAQN,IAAK,CAChD,IAAIwpE,EAAMN,EAAMiyb,aAAan7f,GACzBougB,EAAY,IAAIg5E,GACpBh5E,EAAUxF,WAAap/b,EAAI4kc,UAAUxF,WACrCwF,EAAUvF,gBAAkBr/b,EAAI4kc,UAAUvF,gBAC1CuF,EAAUtF,oBAAsBt/b,EAAI4kc,UAAUtF,oBAC9CsF,EAAUrF,UAAYv/b,EAAI4kc,UAAUrF,UACpCqF,EAAUpF,eAAiBx/b,EAAI4kc,UAAUpF,eACzCoF,EAAUnF,mBAAqBz/b,EAAI4kc,UAAUnF,mBAC7C,IAAK,IAAIzhf,EAAI,EAAGA,EAAIgiD,EAAI2xb,aAAa76f,OAAQknB,IAAK,CAC9C,IAAIqkD,EAAOrC,EAAI2xb,aAAa3ze,GACxB+kf,EAAa,IAAI86E,GACrB96E,EAAWz5R,YAAcjnK,EAAKinK,YAC9By5R,EAAW31M,WAAa/qP,EAAK0gc,WAAW31M,WACxC21M,EAAWvE,eAAiBn8b,EAAK0gc,WAAWvE,eAC5CuE,EAAWtE,mBAAqBp8b,EAAK0gc,WAAWtE,mBAChDmG,EAAU1jc,MAAMpiE,KAAKikgB,GAEzBzogB,KAAK4sO,KAAKpoO,KAAK8lgB,GAEnBtqgB,KAAKwjlB,uBAAyBxjlB,KAAKwjgB,MAAM1U,aAAa0Y,qBAAqBpic,EAAO,MAEtF+9gB,EAAiB/nlB,UAAUiX,QAAU,WACjCrS,KAAKwjlB,4BAAyBtolB,EAC1B8E,KAAKypgB,cACLzpgB,KAAKypgB,YAAYp3f,UACjBrS,KAAKypgB,iBAAcvugB,GAEnB8E,KAAKgkgB,cACLhkgB,KAAKgkgB,YAAc,MAEnBhkgB,KAAK4sO,OACL5sO,KAAK4sO,QACL5sO,KAAK4sO,UAAO1xO,IAGbiolB,KAMPC,GAAwC,WAIxC,OAHA,gBASAE,GAAsC,WAItC,OAHA,WACItjlB,KAAK4mE,aAQT28gB,GAAuC,WAIvC,OAHA,gBASAE,GAAmC,WAInC,OAHA,SAA2B9vjB,GACvB3zB,KAAKmhe,cAAgBxtc,MClNzB+vjB,GAAiC,WACjC,SAASA,EAAgBnjlB,GACrBP,KAAK2jlB,QAAUpjlB,EACfP,KAAKwuf,OAASjuf,EAAKiuf,OACnBxuf,KAAK4jlB,wBACL5jlB,KAAK6jlB,sBACL7jlB,KAAK8jlB,kBAqqCT,OAnqCAxllB,OAAOuJ,eAAe67kB,EAAgBtolB,UAAW,SAO7CsM,IAAK,WAAc,OAAO1H,KAAK2jlB,SAC/Bh8kB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe67kB,EAAgBtolB,UAAW,iBAK7CsM,IAAK,WACD,OAAO1H,KAAKwjgB,MAAMu0B,eAEtBpwhB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe67kB,EAAgBtolB,UAAW,UAK7CsM,IAAK,WAAc,OAAO1H,KAAK+jlB,UAC/B18kB,IAAK,SAAUtK,GAASiD,KAAK+jlB,SAAWhnlB,GACxC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe67kB,EAAgBtolB,UAAW,sBAM7CsM,IAAK,WAAc,OAAO1H,KAAK4jlB,sBAC/Bj8kB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe67kB,EAAgBtolB,UAAW,gBAI7CsM,IAAK,WACD,OAAO1H,KAAK8jlB,gBAEhBn8kB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe67kB,EAAgBtolB,UAAW,kBAM7CsM,IAAK,WAAc,OAAO1H,KAAKgklB,kBAC/B38kB,IAAK,SAAUtK,GAASiD,KAAKgklB,iBAAmBjnlB,GAChD4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe67kB,EAAgBtolB,UAAW,gBAK7CsM,IAAK,WAAc,OAAO1H,KAAKiklB,gBAC/B58kB,IAAK,SAAUtK,GAASiD,KAAKiklB,eAAiBlnlB,GAC9C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe67kB,EAAgBtolB,UAAW,kBAK7CsM,IAAK,WAAc,OAAO1H,KAAKkklB,kBAC/B78kB,IAAK,SAAUtK,GAASiD,KAAKkklB,iBAAmBnnlB,GAChD4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe67kB,EAAgBtolB,UAAW,eAK7CsM,IAAK,WAAc,OAAO1H,KAAKmklB,eAC/B98kB,IAAK,SAAUtK,GAASiD,KAAKmklB,cAAgBpnlB,GAC7C4K,YAAY,EACZC,cAAc,IAOlB87kB,EAAgBtolB,UAAUguiB,gBAAkB,WACxC,IAAIk6B,EAAYtjkB,KAAKwjgB,MAAM1U,aAAa+wE,iBAAiB7/jB,KAAKwjgB,MAAMvtb,UAAU14E,OAC9EyC,KAAK8lB,eAAiB9lB,KAAKwjgB,MAAM1U,aAAa0Y,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,YACzGo2jB,EAAYtjkB,KAAKwjgB,MAAM1U,aAAa+wE,iBAAiB7/jB,KAAKwjgB,MAAMvtb,UAAUh3D,KAC1Ejf,KAAKgmB,aAAehmB,KAAKwjgB,MAAM1U,aAAa0Y,qBAAqB87D,EAAUrsE,UAAWqsE,EAAU33jB,OAAOuB,aAE3Gw2kB,EAAgBtolB,UAAU6/kB,gBAAkB,SAAUr9C,GAClD59hB,KAAK8kkB,aAAatgkB,MAAOo5hB,SAAYA,EAAU/3gB,WAAc+3gB,EAAS93B,aAAc//e,SAAY63gB,EAASn8hB,UAAUqkgB,gBAEvH49E,EAAgBtolB,UAAUgplB,eAAiB,WACvC,IAAIC,EAAerklB,KAAK8kkB,aAAa,GACjClnC,EAAWymD,EAAazmD,SACxB59hB,KAAK+3hB,cAAcn+B,WACnB55f,KAAKwuf,OAAOwuC,UAAU54hB,IAAIw5hB,EAASrmgB,KAAMqmgB,GACzCA,EAAS3ze,KAAK7vC,SAASuO,OAAO07jB,EAAax+jB,WAAY,EAAG+3gB,GAC1DA,EAASn8hB,UAAUwoD,KAAK7vC,SAASuO,OAAO07jB,EAAat+jB,SAAU,EAAG63gB,EAASn8hB,WAC3EzB,KAAK+3hB,cAAcusD,cAActklB,QAGjCA,KAAKwjgB,MAAM1U,aAAaosF,uBAAuBt9C,GAC/C59hB,KAAK+3hB,cAAczgE,UAAU9yd,KAAKxE,QAQ1C0jlB,EAAgBtolB,UAAUmplB,OAAS,WAC/B,GAAoB,mBAAhBvklB,KAAKgzD,OAAT,CAIAhzD,KAAKwjgB,MAAMliB,mBAAoB,EAC/B,IAAIkjG,OAA6BtplB,EAC7BuplB,OAA2BvplB,EAC3BqC,EAAQyC,KAAK8lB,eACb7G,EAAMjf,KAAKgmB,aACXqqhB,EAAqBnC,GAAamC,mBAAmB9yiB,EAAO0hB,GAChE,GAAIjf,KAAKmpiB,mBAAmB3siB,OAAS,GAAqB,cAAhBwD,KAAKgzD,QAA0C,yBAAhBhzD,KAAKgzD,QACvD,yBAAhBhzD,KAAKgzD,OACRwxhB,EAA6BxklB,KAAKghjB,gBAAgBzjjB,GAClDknlB,EAA2BzklB,KAAKghjB,gBAAgB/hiB,GAChDjf,KAAK0klB,yBAAyBF,EAA4BC,OAEzD,CACD,IAAIE,EAAe3klB,KAAK8kkB,aACxB9kkB,KAAK8jlB,kBACL,IAAI/sC,EAAY7I,GAAamC,mBAAmBrwiB,KAAK2/jB,eAAgB3/jB,KAAK+/hB,aACtE6kD,EAAqB5klB,KAAKghjB,gBAAgBjK,EAAY/2iB,KAAK2/jB,eAAiB3/jB,KAAK+/hB,aACjFozB,EAAkBnzjB,KAAKghjB,gBAAgBjK,EAAY/2iB,KAAK+/hB,YAAc//hB,KAAK2/jB,gBAO/E,GANIilB,EAAmBx1C,iBAAiB+jB,GACpCnzjB,KAAKwjgB,MAAMvtb,UAAU0ne,cAAcinC,GAAoB,GAGvD5klB,KAAKwjgB,MAAMvtb,UAAUqqe,eAAeskC,EAAoBzxB,GAExC,oBAAhBnzjB,KAAKgzD,QAAgChzD,KAAK+3hB,cAAcl+B,UAAW,CACnE,IAAI+F,EAAa5/f,KAAKwjgB,MAAMvtb,UAAU+ic,oBACtC,IAAKv7gB,EAAkBmigB,GAAa,CAChC,IAAIj0f,EAAUi0f,EAAe,KAAErjc,UAAUqjc,EAAY,GACrDglF,EAAmB31C,qBAAqBrvC,EAAW31c,KAAMt+C,GACzD3L,KAAKwjgB,MAAMvtb,UAAU14E,MAAMuxiB,oBAAoB81C,GAC/Cj5kB,EAASi0f,EAAWD,SAAS11c,KAAKsS,UAAUqjc,EAAWD,SAAU,GACjEwzD,EAAgBlkB,qBAAqBrvC,EAAWD,SAAS11c,KAAMt+C,IAGvE3L,KAAK+3hB,cAAcmR,uBAAyBlpiB,KAC5CA,KAAK8lB,eAAiB9lB,KAAK2/jB,eAC3B3/jB,KAAK2/jB,oBAAiBzkkB,EACtB8E,KAAKgmB,aAAehmB,KAAK+/hB,YACzB//hB,KAAK+/hB,iBAAc7kiB,EACnB,IAAI2plB,GAAkB,EACjBD,EAAmBx1C,iBAAiB+jB,KACrC0xB,EAAkC,cAAhB7klB,KAAKgzD,QAA0C,WAAhBhzD,KAAKgzD,QAAuC,eAAhBhzD,KAAKgzD,QAC3D,gBAAhBhzD,KAAKgzD,SAC8B,eAAhBhzD,KAAKgzD,QAA2C,mBAAhBhzD,KAAKgzD,QACxC,mBAAhBhzD,KAAKgzD,QAA+C,qBAAhBhzD,KAAKgzD,QACzB,sBAAhBhzD,KAAKgzD,QAAkD,YAAhBhzD,KAAKgzD,QAC5B,gBAAhBhzD,KAAKgzD,QAA4C,iBAAhBhzD,KAAKgzD,QAA6C,cAAhBhzD,KAAKgzD,SAC3EhzD,KAAKwjgB,MAAMvtb,UAAUh3D,IAAI6vhB,oBAAoBqkB,GACxCnzjB,KAAKwjgB,MAAMvtb,UAAU2hK,UAClB53O,KAAK+3hB,cAAcl+B,UACnB75f,KAAKwjgB,MAAM1U,aAAaixE,uBAAuB//jB,KAAKwjgB,MAAMvtb,WAG1Dj2E,KAAKwjgB,MAAM1U,aAAaizE,uBAAuB/hkB,KAAKwjgB,MAAMvtb,WAAW,IAEpEx4E,EAAkBuC,KAAK+3hB,cAAcq7B,qBACW,cAAjDpzjB,KAAK+3hB,cAAcq7B,mBAAmBpggB,QAA0BhzD,KAAKwuf,OAAOg9B,cAC5ExrhB,KAAKwuf,OAAOlhc,OAAOyge,uBAKnC,IAAI+2D,EAAe9klB,KAAK+3hB,cAAcl+B,YAAcgrF,EACpD7klB,KAAK+klB,oBAAoBJ,EAAcG,EAAcz0C,EAAqB9yiB,EAAQ0hB,EAAK1hB,IAAU0hB,GAC7F4lkB,GACA7klB,KAAKi3kB,cAAc2N,EAAoBzxB,GAI/C,IAAIjY,GAAqB,GACpBl7iB,KAAK+3hB,cAAcn+B,WAAan8f,EAAkBuC,KAAK+3hB,cAAcq7B,sBACpD,mBAAhBpzjB,KAAKgzD,QAA+C,YAAhBhzD,KAAKgzD,QAAwC,mBAAhBhzD,KAAKgzD,QACjD,qBAAhBhzD,KAAKgzD,QACW,sBAAhBhzD,KAAKgzD,UAAoChzD,KAAK+3hB,cAAcl+B,WACX,UAAjD75f,KAAK+3hB,cAAcq7B,mBAAmBpggB,WAC7CwxhB,EAA6BxklB,KAAKghjB,gBAAgBzjjB,GAClDknlB,EAA2BzklB,KAAKghjB,gBAAgB/hiB,GAChDjf,KAAKwjgB,MAAMvtb,UAAUm6I,YAAYo0X,EAA4BC,GAC7DvpC,GAAqB,GAGzBl7iB,KAAK2/jB,eAAiBpikB,EACtByC,KAAK+/hB,YAAc9ghB,EACnBjf,KAAKwjgB,MAAM1U,aAAayrE,SAASv6jB,KAAKwjgB,MAAMvtb,UAAWj2E,KAAKwjgB,MAAMvtb,UAAU2hK,SACxEsjU,GACAl7iB,KAAKwuf,OAAOitC,iBAAiBz7hB,KAAKwjgB,MAAMvtb,UAAU14E,MAAOyC,KAAKwjgB,MAAMvtb,UAAUh3D,KAElFjf,KAAK8tjB,yBA1FD9tjB,KAAKoklB,kBA4FbV,EAAgBtolB,UAAU0yjB,kBAAoB,WAC1C,IAAKrwjB,EAAkBuC,KAAK+3hB,cAAcq7B,sBAElB,wBAAhBpzjB,KAAKgzD,QAAsF,eAAjDhzD,KAAK+3hB,cAAcq7B,mBAAmBpggB,QAA2C,eAAhBhzD,KAAKgzD,QAA0B,CAC1I,IACI6yc,EAD6B7lgB,KAAKghjB,gBAAgBhhjB,KAAK8lB,gBACnB4lgB,cACxC1rhB,KAAKwuf,OAAOv4a,UAAU63e,kBAAkBjoD,KAIpD69E,EAAgBtolB,UAAU67kB,cAAgB,SAAU2N,EAAoBzxB,GASpE,IAAM11jB,EAAkBmnlB,EAAmB3tF,UAAUK,kBACjDstF,EAAmB3tF,UAAUK,2BAA2BR,KACtDr5f,EAAkB01jB,EAAgBl8D,UAAUK,kBACvC67D,EAAgBl8D,UAAUK,2BAA2BR,KACvDr5f,EAAkBmnlB,EAAmB3tF,UAAUK,mBAC5C75f,EAAkB01jB,EAAgBl8D,UAAUK,kBAC7CstF,EAAmB3tF,UAAUK,2BAA2B2O,IACxDktD,EAAgBl8D,UAAUK,2BAA2B2O,KACpDxogB,EAAkBmnlB,EAAmB3tF,UAAU6F,YAAc,CAErE98f,KAAKwjgB,MAAMvtb,UAAUm6I,YAAYw0X,EAAoBzxB,GACrD,IAAI6xB,EAA4B,cAAhBhllB,KAAKgzD,OACrBhzD,KAAKwjgB,MAAM1U,aAAaizE,uBAAuB/hkB,KAAKwjgB,MAAMvtb,UAAW+ugB,KAG7EtB,EAAgBtolB,UAAUsplB,yBAA2B,SAAUnnlB,EAAO0hB,GAC9C,eAAhBjf,KAAKgzD,QAA2C,gBAAhBhzD,KAAKgzD,QAA4C,iBAAhBhzD,KAAKgzD,SACtEhzD,KAAKwjgB,MAAMliB,mBAAoB,GAEnCthf,KAAKwjgB,MAAMvtb,UAAUm6I,YAAY7yN,EAAO0hB,GACpB,gBAAhBjf,KAAKgzD,QAA4C,iBAAhBhzD,KAAKgzD,OACtChzD,KAAKillB,iBAEgB,gBAAhBjllB,KAAKgzD,QAA4C,iBAAhBhzD,KAAKgzD,OAC3ChzD,KAAKkllB,4BAA4BlllB,KAAKgzD,QAEjB,cAAhBhzD,KAAKgzD,QACVhzD,KAAKmllB,oBAIbzB,EAAgBtolB,UAAUgqlB,WAAa,WACnC,IAAI9wE,EAASt0gB,KAAKwjgB,MAAM1U,aACxB,OAAQ9uf,KAAKgzD,QACT,IAAK,YACDshd,EAAOyjE,gBAAgB/3kB,KAAKwjgB,MAAMvtb,WAAW,GAC7C,MACJ,IAAK,SACDq+b,EAAOwkE,aAAa94kB,KAAKwjgB,MAAMvtb,WAAW,GAC1C,MACJ,IAAK,cACDq+b,EAAOyD,cACP,MACJ,IAAK,eACDzD,EAAO2D,eACP,MACJ,IAAK,YACD3D,EAAO0D,YACP,MACJ,IAAK,aACD1D,EAAOo0D,4BACP,MACJ,IAAK,iBACDp0D,EAAOuD,WAAU,GACjB,MACJ,IAAK,iBACDvD,EAAOuD,WAAU,GACjB,MACJ,IAAK,mBAGL,IAAK,oBACDvD,EAAOwD,cAAa,GACpB,MACJ,IAAK,eACDxD,EAAOmsD,cAAczgkB,KAAKwjgB,MAAMvtb,WAAW,KAWvDytgB,EAAgBtolB,UAAU2plB,oBAAsB,SAAUJ,EAAcG,EAAcvnlB,EAAO0pjB,GACzF,KAAI69B,GAAiC,cAAhB9klB,KAAKgzD,QAA0C,WAAhBhzD,KAAKgzD,QAAuC,gBAAhBhzD,KAAKgzD,QAC9D,iBAAhBhzD,KAAKgzD,QAA6C,cAAhBhzD,KAAKgzD,QAA0C,mBAAhBhzD,KAAKgzD,QACzD,mBAAhBhzD,KAAKgzD,QAA+C,qBAAhBhzD,KAAKgzD,QAAiD,sBAAhBhzD,KAAKgzD,QAC5D,eAAhBhzD,KAAKgzD,QAA2C,iBAAhBhzD,KAAKgzD,SACxChzD,KAAKollB,aACe,iBAAhBpllB,KAAKgzD,UAIT2xhB,EAAanolB,OAAS,EACtB,GAAKwD,KAAK+3hB,cAAcn+B,YAA8B,gBAAhB55f,KAAKgzD,QAA4C,iBAAhBhzD,KAAKgzD,QACrD,cAAhBhzD,KAAKgzD,QAA0C,eAAhBhzD,KAAKgzD,SACnB,mBAAhBhzD,KAAKgzD,QAA+C,mBAAhBhzD,KAAKgzD,QAA+C,qBAAhBhzD,KAAKgzD,QAC1D,eAAhBhzD,KAAKgzD,QAA2C,sBAAhBhzD,KAAKgzD,QAAkD,YAAhBhzD,KAAKgzD,OAAuB,CAC1G,IAAIwvd,EAAcxihB,KAAK8lB,eACnBoif,EAAQlogB,KAAKwjgB,MAAM1U,aAAa2+D,UAAW37iB,MAAO0wgB,IAAejihB,KACjE8klB,EAAWV,EAAaA,EAAanolB,OAAS,IAC7C0rgB,aAAiBjB,IAAeiB,EAAM7B,kCAAkCY,IAAeiB,EAAMK,gBAC3F88E,aAAoBp+E,IACnBiB,aAAiBhR,KAAoBgR,EAAMK,gBAC3CL,EAAQA,EAAM7B,wBAElB6B,EAAQA,EAAMnB,cAAc/mgB,KAAKwuf,QACjCxuf,KAAKwjgB,MAAM1U,aAAak3E,oBAAoB99D,EAAOm9E,GAAU,GAC7DV,EAAah8jB,OAAOg8jB,EAAapmlB,QAAQ8mlB,GAAW,IAE/CA,aAAoBp+E,IACzBjngB,KAAKwjgB,MAAM1U,aAAaq2E,YAAYkgB,OAGvC,CACD,IAAI1N,EAAep6kB,EACf2qgB,EAAQlogB,KAAKwjgB,MAAM1U,aAAa2+D,UAAW37iB,MAAO6lkB,IAAgBp3kB,KAEtE,GAAIoklB,EAAanolB,OAAS,IAAsB,cAAhBwD,KAAKgzD,QAA0Bi0f,KACrD/+C,aAAiBjB,OAAkBiB,aAAiB9B,KAAuB,CAC7Ei/E,EAAWV,EAAa,GAM5B,IALoB,iBAAhB3klB,KAAKgzD,QAA6BqyhB,aAAoBvuF,KACrDr5f,EAAkBuC,KAAK+3hB,cAAcq7B,qBACe,cAAjDpzjB,KAAK+3hB,cAAcq7B,mBAAmBpggB,UAC1CqyhB,EAAWV,EAAa,IAExBU,aAAoBnuF,IAAmBl3f,KAAKwjgB,MAAMvtb,UAAU14E,MAAMoO,OAAS,IAC3E3L,KAAKwjgB,MAAM1U,aAAa+3E,yBAAyBwe,GAAU,GAC3DV,EAAah8jB,OAAOg8jB,EAAapmlB,QAAQ8mlB,GAAW,GAChD5nlB,EAAkByqgB,IAAQ,CAE1B,IAAIgT,EAAYl7gB,KAAKwuf,OAAOv4a,UAAUq7d,sBAAsB+zC,EAASx+E,kBAAkBhhW,OACvF7lK,KAAKwjgB,MAAMvtb,UAAU45d,qBAAqBw1C,GACtC5nlB,EAAkBy9gB,IAElBl7gB,KAAKwjgB,MAAMvtb,UAAUgqe,gBAAgBolC,GAAU,GAI3D,GAAIA,aAAoBp+E,IAAejngB,KAAKwjgB,MAAMvtb,UAAU14E,MAAMoO,OAAS,EAAG,CAC1E,IAAIsxiB,EAAa0nC,EAAaA,EAAanolB,OAAS,GACpD,GAAIygjB,aAAsB/lD,KACtBl3f,KAAKwjgB,MAAM1U,aAAa+3E,yBAAyB5pB,GAAY,GAC7D0nC,EAAah8jB,OAAOg8jB,EAAapmlB,QAAQ0+iB,GAAa,GAClDx/iB,EAAkByqgB,IAAQ,CAGtBzqgB,EADAy9gB,EAAYl7gB,KAAKwuf,OAAOv4a,UAAUq7d,sBAAsB2L,EAAWp2C,kBAAkBhhW,SAGrF7lK,KAAKwjgB,MAAMvtb,UAAUgqe,gBAAgBhD,GAAY,KAMrE,GAAI0nC,EAAanolB,OAAS,EAAG,CACzB,IAAIytY,EAAY06M,EAAaA,EAAanolB,OAAS,GACnD,GAAI0rgB,aAAiBjB,KACjBiB,EAAQA,EAAMnB,cAAc/mgB,KAAKwuf,QAC7BvkH,aAAqBg9H,IAAa,CAClCjngB,KAAKwjgB,MAAM1U,aAAak3E,oBAAoB99D,EAAOj+H,GAAW,GAC9D06M,EAAah8jB,OAAOg8jB,EAAapmlB,QAAQ0rY,GAAY,GACrDjqY,KAAK2/jB,eAAiBpikB,EACtB,IAAIgzgB,EAAatmI,EAAU48H,kBAAkBhhW,MACzC0qW,EAAW/J,8BAA8BS,GACzCiB,EAAQqI,EAAW/J,oBAGnBmxE,EAAep6kB,EACf2qgB,EAAQlogB,KAAKwjgB,MAAM1U,aAAa2+D,UAAW37iB,MAAO6lkB,IAAgBp3kB,MAM9E,GAAI0pY,aAAqBitH,IAAmBl3f,KAAKwjgB,MAAMvtb,UAAU14E,MAAMoO,OAAS,GACzE3L,KAAKwjgB,MAAMvtb,UAAU14E,MAAMoO,SAAW3L,KAAKwjgB,MAAMvtb,UAAUo4d,cAAcruiB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUv9W,WAAY,CAC7H,IAAI46X,EAASt0gB,KAAKwjgB,MAAM1U,aACxBwlB,EAAOuyD,yBAAyB58L,GAAW,GAC3C06M,EAAah8jB,OAAOg8jB,EAAapmlB,QAAQ0rY,GAAY,GAEjC,UAAhBjqY,KAAKgzD,QACLshd,EAAO4xD,YAAYlmkB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,WAGlD,IAAIA,EAAYj3f,KAAKwuf,OAAOv4a,UAAUq7d,sBAAsBrnK,EAAU48H,kBAAkBhhW,OACnFpoK,EAAkBw5f,IACnBj3f,KAAKwjgB,MAAMvtb,UAAUgqe,gBAAgBhpD,GAAW,QAGnD,GAAI0tF,EAAa,aAAc19E,IAAuC,IAAxB09E,EAAanolB,OAAc,CAC1E,IAAIizY,EAAWk1M,EAAa,GACxBl1M,aAAoBynH,IAAmBznH,EAAS73J,WAChD+sW,EAAah8jB,OAAOg8jB,EAAapmlB,QAAQkxY,GAAW,IAI5Dk1M,EAAanolB,OAAS,IAClB0rgB,aAAiBjB,KACjBiB,EAAQA,EAAMnB,cAAc/mgB,KAAKwuf,SAErCxuf,KAAKsllB,mBAAmBX,EAAcz8E,MAKtDw7E,EAAgBtolB,UAAUkqlB,mBAAqB,SAAUX,EAAcz8E,GACnE,IAAK,IAAIhsgB,EAAIyolB,EAAanolB,OAAS,EAAcN,GAAK,EAAGA,IAAK,CAC1D,IAAIqE,EAAOoklB,EAAazolB,GACpBqE,aAAgB4xgB,GAChBnygB,KAAKwjgB,MAAM1U,aAAas1E,wBAAwBpkkB,KAAKwjgB,MAAMvtb,UAAW11E,GAEjEA,aAAgBkmgB,GACjBlmgB,aAAgB4lgB,GACZ+B,aAAiBjB,KACjBiB,EAAM7Q,aAAa1ue,OARW,EAQG,EAAGpoB,GACpCP,KAAKwjgB,MAAM1U,aAAa+xE,sBAAsBtgkB,GAAM,GAC1C,IAANrE,GAAayolB,EAAazolB,EAAI,aAAciqgB,IAE5CnmgB,KAAKwuf,OAAOlhc,OAAO++d,2BAA2BnkB,EAAMp2f,MAAOo2f,EAAM5Q,gBAAiB4Q,GAAO,IAI5FA,aAAiBjB,GACtBjngB,KAAKwjgB,MAAM1U,aAAaq3E,iBAAiBnmkB,KAAKwjgB,MAAMvtb,UAAW11E,EAAM2ngB,GAGrElogB,KAAKwjgB,MAAM1U,aAAaq2E,YAAY5kkB,GAGnCA,aAAgBu2f,IACrB92f,KAAKwjgB,MAAM1U,aAAa2xE,cAAczgkB,KAAKwjgB,MAAMvtb,WAAW,GAGpE0ugB,MAEJjB,EAAgBtolB,UAAU6plB,eAAiB,WAEvC,GADAjllB,KAAK+3hB,cAAcmR,uBAAyBlpiB,KACxB,gBAAhBA,KAAKgzD,OACDhzD,KAAKmpiB,mBAAmB,aAAc45C,IAEtC/ilB,KAAKmpiB,mBAAmB,GAAG85C,cAAcjjlB,KAAK+3hB,cAAcl+B,UAAW75f,KAAKwjgB,YAIhF,GAAIxjgB,KAAKmpiB,mBAAmB,aAAcg6C,GAAkB,CAEJ,IAAhDnjlB,KAAKwjgB,MAAMvtb,UAAUq8c,gBAAgB91hB,QACrCwD,KAAKwjgB,MAAMvtb,UAAUgle,oBAAmB,GAE5C,IAAIsqC,EAAuBvllB,KAAKmpiB,mBAAmB,GAC/Cj1hB,EAAWqxkB,EAAqB/B,uBAChCt7E,EAAQlogB,KAAKwjgB,MAAM1U,aAAa2+D,UAAW37iB,MAAOoC,IAAY3T,KAClE,GAAI2ngB,aAAiBjB,GAAa,CAC9B,IAAI+yB,EAAch6hB,KAAKwjgB,MAAM1U,aAAakrC,YAK1C,GAJAh6hB,KAAKwjgB,MAAM8Q,OAAOs0B,eAAe5oiB,KAAKwjgB,MAAMvtb,WAC5Ciyb,EAAQA,EAAMnB,cAAc/mgB,KAAKwjgB,MAAMhV,QACvCwrC,EAAYyF,qBAAuBv3B,EACnClogB,KAAKmpiB,mBAAmBxghB,OAAO,EAAG,GAC9B3oB,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAC9D,IAAI2rF,EAA0B,IAAIrC,GAAiBj7E,EAAOlogB,KAAKwjgB,OAC/DxjgB,KAAKmpiB,mBAAmBxghB,OAAO,EAAG,EAAG68jB,GACrCxllB,KAAKwjgB,MAAMjiB,iBAAkB,EAC7By4C,EAAYkjC,gBAAgBljC,EAAYyF,qBAAsB8lD,GAC9DvrD,EAAYyF,qBAAqBv0B,eAAgB,EACjDlrgB,KAAKwjgB,MAAMjiB,iBAAkB,EAC7By4C,EAAYghC,gBAAgBhhC,EAAYyF,sBAAsB,GAC9D8lD,EAAqBlzkB,UACrBkzkB,OAAuBrqlB,MAM3CwolB,EAAgBtolB,UAAU8plB,4BAA8B,SAAUlyhB,GAI9D,GAHAhzD,KAAKwjgB,MAAMliB,mBAAoB,EAC/Bthf,KAAK+3hB,cAAcmR,uBAAyBlpiB,KAC5CA,KAAKyllB,qBAAuB,EACb,gBAAXzyhB,EAA0B,CAC1B,IAAIijB,EAAYj2E,KAAKwjgB,MAAMvtb,UACvBwyb,EAAazogB,KAAKmpiB,mBAAmB,GACzCnpiB,KAAKwjgB,MAAM1U,aAAa8vF,kBAAkB3ogB,EAAWwyb,OAErC,iBAAXz1c,GACLhzD,KAAKwjgB,MAAMzhB,yBAAyB2jG,wBAAwB1llB,KAAKmpiB,mBAAmB,IAExFnpiB,KAAKyllB,qBAAuB,EAC5BzllB,KAAKwjgB,MAAMliB,mBAAoB,GAEnCoiG,EAAgBtolB,UAAU4ljB,gBAAkB,SAAUv5C,GAClD,IAAIv/G,EAAe,IAAIgmJ,GAAaluiB,KAAKwjgB,OACrC8/D,EAAYtjkB,KAAKwjgB,MAAM1U,aAAaypF,cAAezmkB,MAAO21f,IAC1D97N,EAAW3rS,KAAKwjgB,MAAM1U,aAAam0D,YAAYqgB,EAAUrsE,UAAWqsE,EAAU33jB,QAElF,OADAu8Y,EAAaynJ,yBAAyBhkQ,EAAS1hP,KAAM0hP,EAAShgS,QACvDu8Y,GASXw7L,EAAgBtolB,UAAUk4kB,gCAAkC,SAAU/0iB,EAAQ28B,EAAUn+D,GACpF,GAAIiD,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAC9D,IAAIsvC,EAAqBnpiB,KAAKmpiB,mBAC1Bw8C,EAAkB3llB,KAAKyllB,qBAAuBt8C,EAAmB3siB,OACjE2siB,EAAmBnpiB,KAAKyllB,sBAAwBt8C,EAAmBA,EAAmB3siB,OAAS,GAC/FiB,EAAkBy9D,IAClBn+D,EAAQ4olB,EACJ3llB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBlnjB,EAAOw7d,cAG5D/5f,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAAK+hC,EAAOw7d,gBAIzEh9f,EAAQ4olB,EAAev4kB,iBAAiB8tD,GACxCyqhB,EAAehsF,WAAWp7d,IAE9Bv+B,KAAKyllB,4BAGL,GAAIholB,EAAkBy9D,GAClBl7D,KAAKmpiB,mBAAmB3kiB,KAAK+5B,EAAOw7d,mBAEnC,CACD,IAAI6rF,EAAgB,IAAI5uF,GACxB4uF,EAAcjsF,WAAWp7d,GACzBv+B,KAAKmpiB,mBAAmB3kiB,KAAKohlB,GAGrC,OAAO7olB,GASX2mlB,EAAgBtolB,UAAUk0kB,sBAAwB,SAAU/wiB,EAAQ28B,EAAUn+D,GAC1E,GAAIiD,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAE9D,IAAI8rF,EAAkB3llB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OAASwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAC7LqplB,GAAa,EACjB,GAAItnjB,EAAO66d,qBAAqB+Y,GAAY,CACxC,IAAI9md,EAAarrD,KAAK6jlB,mBAAmB7jlB,KAAKyllB,sBAC9C,GAAIlnjB,EAAO66d,UAAU58f,OAAS6uD,EAAY,CACtCw6hB,GAAa,EACb7llB,KAAK6jlB,mBAAmB7jlB,KAAKyllB,sBAAwBlnjB,EAAO66d,UAAU58f,OACtEwD,KAAK6jlB,mBAAmBl7jB,OAAO3oB,KAAKyllB,qBAAuB,EAAG,EAAGp6hB,EAAa9sB,EAAO66d,UAAU58f,QAE/F,IAAIsplB,EAAa,IAAI1uF,QAAiBl8f,GACtC4qlB,EAAWnsF,WAAWgsF,GACtB3llB,KAAKmpiB,mBAAmBxghB,OAAO3oB,KAAKyllB,qBAAuB,EAAG,EAAGK,IAGrD,yBAAhB9llB,KAAKgzD,OACDhzD,KAAK+3hB,cAAcn+B,WACnB78f,EAAQ4olB,EACHE,IACD7llB,KAAKmpiB,mBAAmBxghB,OAAO3oB,KAAKyllB,qBAAsB,GAC1DzllB,KAAKyllB,yBAITzllB,KAAKmpiB,mBAAmB3kiB,KAAK+5B,EAAOw7d,gBAIxCh9f,EAAQ4olB,EACJ3llB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBlnjB,EAAOw7d,cAG5D/5f,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAAK+hC,EAAOw7d,eAG7E/5f,KAAKyllB,2BAEJ,CACD,GAAIholB,EAAkBy9D,GAClBl7D,KAAKmpiB,mBAAmB3kiB,KAAK+5B,EAAOw7d,mBAEnC,CACD,IAAI6rF,EAAgB,IAAIxuF,QAAiBl8f,GACzC0qlB,EAAcjsF,WAAWp7d,GACzBv+B,KAAKmpiB,mBAAmB3kiB,KAAKohlB,GAE7BrnjB,EAAO66d,qBAAqB+Y,GAC5BnygB,KAAK6jlB,mBAAmBr/kB,KAAK+5B,EAAO66d,UAAU58f,QAG9CwD,KAAK6jlB,mBAAmBr/kB,KAAK,GAGrC,OAAOzH,GASX2mlB,EAAgBtolB,UAAUk1kB,wCAA0C,SAAU/xiB,EAAQ28B,EAAUn+D,GAC5F,GAAIiD,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAE9D,IAAI8rF,EAAkB3llB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OAASwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GACjM,GAAoB,yBAAhBwD,KAAKgzD,OAUL,OATIhzD,KAAK+3hB,cAAcn+B,WACnB78f,EAAQ4olB,EACR3llB,KAAKmpiB,mBAAmBxghB,OAAO3oB,KAAKyllB,qBAAsB,GAC1DzllB,KAAKyllB,wBAGLzllB,KAAKmpiB,mBAAmB3kiB,KAAK+5B,EAAOw7d,eAExC/5f,KAAKyllB,uBACE1olB,EAEX,GAAIU,EAAkBy9D,GASlB,OARAn+D,EAAQ4olB,EACJ3llB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBlnjB,EAAOw7d,cAG5D/5f,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAAK+hC,EAAOw7d,cAEzE/5f,KAAKyllB,uBACE1olB,EAEX,GAAiB,eAAbm+D,EAMA,OALAn+D,EAAQ,IAAIo6f,QAAiBj8f,IACvBy+f,WAAWgsF,GACjBA,EAAe3tF,WAAa,IAAI8C,GAChC6qF,EAAe3tF,WAAW2B,WAAWp7d,EAAOy5d,YAC5Ch4f,KAAKyllB,uBACE1olB,EAEX,GAAiB,cAAbm+D,EACA,OAAKz9D,EAAkBkolB,EAAe5tF,gBAOlC,IANAh7f,EAAQ,IAAIo+f,IACNsF,UAAUklF,EAAe5tF,WAC/B/3f,KAAKyllB,uBACE1olB,GAMfA,EAAQ4olB,EAAev4kB,iBAAiB8tD,GACxCyqhB,EAAehsF,WAAWp7d,GAC1Bv+B,KAAKyllB,4BAGL,GAAIholB,EAAkBy9D,GAClBl7D,KAAKmpiB,mBAAmB3kiB,KAAK+5B,EAAOw7d,mBAEnC,CACD,IAAI6rF,EAAgB,IAAIzuF,QAAiBj8f,GACzC0qlB,EAAcjsF,WAAWp7d,GACzBv+B,KAAKmpiB,mBAAmB3kiB,KAAKohlB,GAGrC,OAAO7olB,GAKX2mlB,EAAgBtolB,UAAUo2kB,0CAA4C,SAAUv/E,EAAiBl1f,GAC7F,GAAIiD,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAW9D,OARA98f,EADsBiD,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OAASwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAE7LwD,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBxzF,EAAgB8H,cAGrE/5f,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAAKy1f,EAAgB8H,cAElF/5f,KAAKyllB,uBACE1olB,EAGP,IAAI6olB,EAAgB,IAAIzuF,GAI5B,OAHIyuF,EAAcjsF,WAAW1H,GACzBjyf,KAAKmpiB,mBAAmB3kiB,KAAKohlB,GAE1B7olB,GAOX2mlB,EAAgBtolB,UAAU02kB,yCAA2C,SAAU95E,EAAYj7f,GACvF,GAAIiD,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAW9D,OARA98f,EADciD,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OAASwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAErLwD,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBztF,EAAWqC,OAGhEr6f,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAAKw7f,EAAWqC,OAE7Er6f,KAAKyllB,uBACE1olB,EAKX,OAFIiD,KAAKmpiB,mBAAmB3kiB,KAAKwzf,EAAWqC,QAErCt9f,GAOX2mlB,EAAgBtolB,UAAU2qlB,6BAA+B,SAAUtpF,GAC/D,IAAI1/f,EACJ,GAAIiD,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAE9D,IAAImsF,EAAiBhmlB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OAASwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAChMO,EAAQiplB,EACRA,EAAgB,IAAI1D,GAAc7lF,EAAWz8f,KAAKwjgB,MAAM1U,aAAay5C,eAAe9rC,IAChFz8f,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBO,EAGrDhmlB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAAKwplB,EAElEhmlB,KAAKyllB,4BAGLzllB,KAAKmpiB,mBAAmB3kiB,KAAK,IAAI89kB,GAAc7lF,EAAWz8f,KAAKwjgB,MAAM1U,aAAay5C,eAAe9rC,KACjG1/f,EAAQ0/f,EAEZ,OAAO1/f,GAMX2mlB,EAAgBtolB,UAAU+plB,iBAAmB,WACzCnllB,KAAK+3hB,cAAcmR,uBAAyBlpiB,KAC5CA,KAAKyllB,qBAAuB,EAC5B,IAAIvqhB,EAAWl7D,KAAK4+N,cAEpB,GADA5+N,KAAKwuf,OAAOgV,MAAM1U,aAAa85C,eAAe5oiB,KAAKwuf,OAAOv4a,WACtC,yBAAhBj2E,KAAKgzD,QAAqChzD,KAAKmpiB,mBAAmB,aAAc/xC,GAAkB,CAClG,GAAoB,wBAAhBp3f,KAAKgzD,OAEL,YADAhzD,KAAKwjgB,MAAM1U,aAAao9E,0BAA0BlskB,KAAKwuf,OAAOv4a,UAAW/a,OAAUhgE,GAGvF8E,KAAKwjgB,MAAM1U,aAAak9E,mCAAmC9wgB,OAAUhgE,GAAW,QAE/E,GAAoB,yBAAhB8E,KAAKgzD,QAAqChzD,KAAKmpiB,mBAAmB,aAAchyC,GAAkB,CACvG,GAAoB,sBAAhBn3f,KAAKgzD,OAGL,YADAhzD,KAAKwjgB,MAAM1U,aAAasiF,wBAAwBpxkB,KAAKwjgB,MAAMvtb,UAAWj2E,KAAKmpiB,mBAAmB,IAGlG,GAAoB,cAAhBnpiB,KAAKgzD,QAA0BhzD,KAAKmpiB,mBAAmB,aAAchyC,GAGrE,YADAn3f,KAAKwjgB,MAAM1U,aAAa6gF,mCAAmCz0gB,EAAUl7D,KAAKmpiB,mBAAmB,GAAGpxC,WAAW,GAG/G/3f,KAAKwjgB,MAAM1U,aAAa6gF,mCAAmCz0gB,OAAUhgE,GAAW,QAE/E,GAAI8E,KAAKmpiB,mBAAmB,aAAcnyC,GAC3Ch3f,KAAKwjgB,MAAM1U,aAAa6jF,oBAAoBz3gB,OAAUhgE,OAErD,CAAA,GAAoB,qBAAhB8E,KAAKgzD,OAEV,YADAhzD,KAAKwjgB,MAAM1U,aAAa8iF,sBAAsB5xkB,KAAKwjgB,MAAMvtb,UAAWj2E,KAAKmpiB,mBAAmB,IAG3F,GAAInpiB,KAAKmpiB,mBAAmB,aAAcrtR,GAC3C97Q,KAAKwjgB,MAAMvtb,UAAU83e,gBAAgB/tjB,KAAKmpiB,mBAAmB,SAE5D,GAAInpiB,KAAKmpiB,mBAAmB,aAAcm5C,GAAe,CAE1D,IAAK,IADDx0T,EAAW,IAAIvrC,GACVrmP,EAAI,EAAGA,EAAI8D,KAAKmpiB,mBAAmB3siB,OAAQN,IAAK,CACrD,IAAI+plB,EAAgBjmlB,KAAKmpiB,mBAAmBjtiB,GAE5C4xR,EAAS1pR,IAAIlI,EAAG+plB,GAEpBjmlB,KAAK+3hB,cAAcmuD,kBAAkBp4T,GACrCA,EAASz7Q,UACTy7Q,OAAW5yR,OAEN8E,KAAKmpiB,mBAAmB,aAAc5lC,GAC3CvjgB,KAAKwjgB,MAAM1U,aAAa8kF,kBAAkB5zkB,KAAKwjgB,MAAMvtb,UAAW/a,OAAUhgE,GAErE8E,KAAKmpiB,mBAAmB,aAAc/jC,IAC3CplgB,KAAKwjgB,MAAMliB,mBAAoB,EAC/Bthf,KAAKwjgB,MAAM1U,aAAa+kF,iBAAiB7zkB,KAAKwjgB,MAAMvtb,UAAW/a,OAAUhgE,IAEpE8E,KAAKmpiB,mBAAmB,aAAc/kC,IAC3CpkgB,KAAKwjgB,MAAM1U,aAAaglF,gBAAgB9zkB,KAAKwjgB,MAAMvtb,UAAW/a,OAAUhgE,GAE5E8E,KAAKyllB,qBAAuB,EACR,yBAAhBzllB,KAAKgzD,QAAqD,yBAAhBhzD,KAAKgzD,QAC/ChzD,KAAKwjgB,MAAM1U,aAAawtE,eAAet8jB,KAAKwuf,OAAOv4a,YAS3DytgB,EAAgBtolB,UAAU+qlB,uBAAyB,SAAU/H,EAAa7/iB,EAAQ6mC,GAC9E,IAAIwghB,EAQJ,GALIA,EAFAnolB,EAAkB2glB,EAAY/hU,eAAiB5+Q,EAAkB2glB,EAAYjiU,YAC1E1+Q,EAAkB2glB,EAAYhiU,cAAgB3+Q,EAAkB2glB,EAAYliU,YAC/Dl8Q,KAAKomlB,gBAAgBhhhB,EAAM4+b,aAG3BhkgB,KAAKomlB,gBAAgBhI,GAErCp+kB,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAW9D,OARAt7d,EADsBv+B,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OAASwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAE7LwD,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKomlB,gBAAgBhI,GAG1Ep+kB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAAKwD,KAAKomlB,gBAAgBhI,GAEvFp+kB,KAAKyllB,uBACElnjB,EAKX,OAFIv+B,KAAKmpiB,mBAAmB3kiB,KAAKohlB,GAE1BrnjB,GAEXmljB,EAAgBtolB,UAAUgrlB,gBAAkB,SAAU7njB,GAClD,IAAIkqe,EAAa,IAAIrD,GAKrB,OAJAqD,EAAWtsP,UAAY59O,EAAO49O,UAC9BssP,EAAWrsP,YAAc79O,EAAO69O,YAChCqsP,EAAWpsP,aAAe99O,EAAO89O,aACjCosP,EAAWvsP,WAAa39O,EAAO29O,WACxBusP,GAOXi7E,EAAgBtolB,UAAUirlB,wBAA0B,SAAU9njB,GAC1D,IAAIqnjB,EAAgB5llB,KAAKsmlB,iBAAiB/njB,GAC1C,GAAIv+B,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAExC75f,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OAASwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAC7LwD,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBxghB,OAAO3oB,KAAKyllB,qBAAsB,EAAGG,GAG7D5llB,KAAKmpiB,mBAAmBxghB,OAAO3oB,KAAKmpiB,mBAAmB3siB,OAAS,EAAG,EAAGoplB,GAE1E5llB,KAAKyllB,4BAGLzllB,KAAKmpiB,mBAAmB3kiB,KAAKohlB,IAGrClC,EAAgBtolB,UAAUkrlB,iBAAmB,SAAU/njB,GACnD,IAAIyle,EAAc,IAAIT,GAMtB,OALAS,EAAY7nP,UAAY59O,EAAO49O,UAC/B6nP,EAAY5nP,YAAc79O,EAAO69O,YACjC4nP,EAAY3nP,aAAe99O,EAAO89O,aAClC2nP,EAAY9nP,WAAa39O,EAAO29O,WAChC8nP,EAAY3zM,YAAc9xR,EAAO8xR,YAC1B2zM,GAEX0/E,EAAgBtolB,UAAUwjO,YAAc,WACpC,OAAQ5+N,KAAKgzD,QACT,IAAK,OACD,MAAO,OACX,IAAK,SACD,MAAO,SACX,IAAK,YACD,MAAO,YACX,IAAK,aACD,MAAO,aACX,IAAK,WACD,MAAO,WACX,IAAK,iBACD,MAAO,iBACX,IAAK,oBACD,MAAO,oBACX,IAAK,gBACD,MAAO,gBACX,IAAK,YACD,MAAO,YACX,IAAK,eACD,MAAO,eACX,IAAK,gBACD,MAAO,gBACX,IAAK,aACD,MAAO,aACX,IAAK,cACD,MAAO,cACX,IAAK,kBACD,MAAO,kBACX,IAAK,kBACD,MAAO,kBACX,IAAK,cACD,MAAO,cACX,IAAK,gBACD,MAAO,gBACX,IAAK,aACD,MAAO,aACX,IAAK,aACD,MAAO,aACX,IAAK,YACD,MAAO,YACX,IAAK,iBACD,MAAO,iBACX,IAAK,kBACD,MAAO,aACX,IAAK,qBACD,MAAO,cACX,IAAK,aACL,IAAK,iBACL,IAAK,wBACD,MAAO,aACX,IAAK,cACL,IAAK,kBACL,IAAK,yBACD,MAAO,cACX,IAAK,YACL,IAAK,gBACL,IAAK,uBACD,MAAO,YACX,IAAK,eACL,IAAK,mBACL,IAAK,0BACD,MAAO,eACX,IAAK,+BACD,MAAO,oBACX,IAAK,YACD,MAAO,SACX,IAAK,gBACD,MAAO,aACX,IAAK,YACD,MAAO,WACX,IAAK,wBACD,MAAO,wBACX,IAAK,sBACL,IAAK,qBACD,MAAO,iBACX,IAAK,0BACL,IAAK,yBACD,MAAO,qBACX,IAAK,UACD,MAAO,UACX,IAAK,YACD,MAAO,cAInB0whB,EAAgBtolB,UAAUmrlB,0BAA4B,SAAUrrhB,EAAU4kb,GACtE,IAAI/if,EA4BJ,MA3BiB,SAAbm+D,EACAn+D,EAAQ+if,EAAiB7wb,KAEP,WAAbiM,EACLn+D,EAAQ+if,EAAiB3wb,OAEP,cAAb+L,EACLn+D,EAAQ+if,EAAiB2e,UAEP,eAAbvjc,EACLn+D,EAAQ+if,EAAiBtwd,WAEP,aAAb0rC,EACLn+D,EAAQ+if,EAAiB1wd,SAEP,mBAAb8rC,EACLn+D,EAAQ+if,EAAiB6e,eAEP,sBAAbzjc,EACLn+D,EAAQ+if,EAAiB0e,kBAEP,kBAAbtjc,EACLn+D,EAAQ+if,EAAiB4e,cAEP,cAAbxjc,IACLn+D,EAAQ+if,EAAiBtyM,WAEtBzwS,GASX2mlB,EAAgBtolB,UAAU8ilB,2BAA6B,SAAU3/iB,EAAQ28B,EAAUn+D,GAC/E,GAAIiD,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAE9D,IAAI2sF,EAAuBxmlB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OAASwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GACtM,GAAIiB,EAAkBy9D,GASlB,OARAn+D,EAAQyplB,EACJxmlB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBlnjB,EAAOw7d,cAG5D/5f,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAAK+hC,EAAOw7d,cAEzE/5f,KAAKyllB,uBACE1olB,EAGPA,EADa,YAAbm+D,EACQsrhB,EAAoBpjF,QAGpBojF,EAAoBp5kB,iBAAiB8tD,GAEjDsrhB,EAAoB7sF,WAAWp7d,GAC/Bv+B,KAAKyllB,2BAEJ,CACD,IAAIG,EAAgB,IAAIriF,GACxBqiF,EAAcjsF,WAAWp7d,GACzBv+B,KAAKmpiB,mBAAmB3kiB,KAAKohlB,GAEjC,OAAO7olB,GASX2mlB,EAAgBtolB,UAAUqjlB,yBAA2B,SAAUn0E,EAAWpvc,EAAUn+D,GAChF,GAAIiD,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAE9D,IAAI8rF,EAAkB3llB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OAASwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GACjM,GAAIiB,EAAkBy9D,GASlB,OARAn+D,EAAQ4olB,EACJ3llB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBn7E,EAAUvQ,cAG/D/5f,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAAK8tgB,EAAUvQ,cAE5E/5f,KAAKyllB,uBACE1olB,EAEXA,EAAQ4olB,EAAev4kB,iBAAiB8tD,GACxCyqhB,EAAehsF,WAAW2Q,GAC1BtqgB,KAAKyllB,2BAEJ,CACD,IAAIG,EAAgB,IAAIxhF,GACxBwhF,EAAcjsF,WAAW2Q,GACzBtqgB,KAAKmpiB,mBAAmB3kiB,KAAKohlB,GAEjC,OAAO7olB,GASX2mlB,EAAgBtolB,UAAU8jlB,0BAA4B,SAAUz2E,EAAYvtc,EAAUn+D,GAClF,GAAIiD,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,UAAW,CAE9D,IAAI8rF,EAAkB3llB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OAASwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBzllB,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GACjM,GAAIiB,EAAkBy9D,GASlB,OARAn+D,EAAQ4olB,EACJ3llB,KAAKyllB,qBAAuBzllB,KAAKmpiB,mBAAmB3siB,OACpDwD,KAAKmpiB,mBAAmBnpiB,KAAKyllB,sBAAwBh9E,EAAW1O,cAGhE/5f,KAAKmpiB,mBAAmBnpiB,KAAKmpiB,mBAAmB3siB,OAAS,GAAKisgB,EAAW1O,cAE7E/5f,KAAKyllB,uBACE1olB,EAGPA,EADa,YAAbm+D,EACQyqhB,EAAeviF,QAGfuiF,EAAev4kB,iBAAiB8tD,GAE5CyqhB,EAAehsF,WAAW8O,GAC1BzogB,KAAKyllB,2BAEJ,CACD,IAAIG,EAAgB,IAAIxgF,GACxBwgF,EAAcjsF,WAAW8O,GACzBzogB,KAAKmpiB,mBAAmB3kiB,KAAKohlB,GAEjC,OAAO7olB,GAKX2mlB,EAAgBtolB,UAAUiX,QAAU,WAShC,GARArS,KAAK8lB,oBAAiB5qB,EACtB8E,KAAKgmB,kBAAe9qB,EACpB8E,KAAK2/jB,oBAAiBzkkB,EACtB8E,KAAK+/hB,iBAAc7kiB,EACduC,EAAkBuC,KAAK6jlB,sBACxB7jlB,KAAK6jlB,sBACL7jlB,KAAK6jlB,wBAAqB3olB,IAEzBuC,EAAkBuC,KAAKmpiB,oBAAqB,CAC7C,IAAK,IAAIjtiB,EAAI,EAAGA,EAAI8D,KAAKmpiB,mBAAmB3siB,OAAQN,IAAK,CACrD,IAAIg/D,EAAWl7D,KAAKmpiB,mBAAmBjtiB,GACnCg/D,aAAoBk8b,GACpBl8b,EAAS7oD,UAEJ6oD,aAAoBi8b,GACzBj8b,EAAS7oD,UAEJ6oD,aAAoB87b,GACzB97b,EAAS7oD,UAEJ6oD,aAAoBonhB,IACzBpnhB,EAAS7oD,UAEbrS,KAAKmpiB,mBAAmBxghB,OAAO3oB,KAAKmpiB,mBAAmB5qiB,QAAQ28D,GAAW,GAC1Eh/D,IAEJ8D,KAAK4jlB,0BAAuB1olB,EAEhC,IAAKuC,EAAkBuC,KAAK8kkB,cAAe,CACvC,IAAS5okB,EAAI,EAAGA,EAAI8D,KAAK8kkB,aAAatokB,OAAQN,IAAK,CAC/C,IAAIqE,EAAOP,KAAK8kkB,aAAa5okB,GACzBqE,aAAgB22f,GAChB32f,EAAK6mgB,gBAAgBpngB,KAAKwuf,QAErBjuf,aAAgB4xgB,IACrB5xgB,EAAK8R,UAETrS,KAAK8kkB,aAAan8iB,OAAO3oB,KAAK8kkB,aAAavmkB,QAAQgC,GAAO,GAC1DrE,IAEJ8D,KAAK8jlB,oBAAiB5olB,EAE1B8E,KAAK2jlB,aAAUzolB,GAEZwolB,KChrCPtuF,GAA8B,WAO9B,SAASA,EAAa70f,EAAMiuf,GAIxBxuf,KAAKymlB,wBAAqBvrlB,EAI1B8E,KAAK0mlB,iBAAcxrlB,EAInB8E,KAAK2mlB,mBAAgBzrlB,EAIrB8E,KAAK4mlB,kBAAe1rlB,EAIpB8E,KAAK6mlB,oBAAiB3rlB,EAItB8E,KAAK8mlB,sBAAmB5rlB,EAIxB8E,KAAK+mlB,qBAAkB7rlB,EAIvB8E,KAAKgnlB,oBAAiB9rlB,EAItB8E,KAAKinlB,qBAAkB/rlB,EAIvB8E,KAAKknlB,uBAAoBhslB,EAIzB8E,KAAKmnlB,yBAAsBjslB,EAI3B8E,KAAKonlB,wBAAqBlslB,EAI1B8E,KAAKqnlB,0BAAuBnslB,EAI5B8E,KAAKsnlB,4BAAyBpslB,EAI9B8E,KAAKunlB,2BAAwBrslB,EAI7B8E,KAAKwnlB,0BAAuBtslB,EAI5B8E,KAAKynlB,2BAAwBvslB,EAI7B8E,KAAK0nlB,iBAAmB,EAIxB1nlB,KAAK2nlB,yBAAsBzslB,EAI3B8E,KAAKuxkB,qBAAkBr2kB,EAIvB8E,KAAK04hB,iBAAkB,EAIvB14hB,KAAKy4hB,uBAAwB,EAI7Bz4hB,KAAKu6hB,uBAAwB,EAI7Bv6hB,KAAK25hB,2BAAwBz+hB,EAI7B8E,KAAKyhI,cAAWvmI,EAIhB8E,KAAKwhI,eAAYtmI,EACjB8E,KAAKwjgB,MAAQjjgB,EACbP,KAAK2nlB,oBAAsB,IAAIplW,GAC/BviP,KAAKwuf,OAASA,EACdxuf,KAAK4nlB,mBAAqB,IAAIC,GAC1BpqlB,EAAkBuC,KAAK8nlB,kBAAoB9nlB,KAAKwuf,QAAUxuf,KAAKwuf,OAAOgnC,eACtEx1hB,KAAKi+hB,yBAg+Bb,OA79BA3/hB,OAAOuJ,eAAeutf,EAAah6f,UAAW,0BAK1CsM,IAAK,WACD,OAAO1H,KAAK+nlB,0BAKhB1glB,IAAK,SAAUtK,GACXiD,KAAK+nlB,yBAA2BhrlB,GAEpC4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutf,EAAah6f,UAAW,kBAK1CsM,IAAK,WACD,OAAO1H,KAAK0nlB,kBAKhBrglB,IAAK,SAAUtK,GACXiD,KAAK0nlB,iBAAmB3qlB,GAE5B4K,YAAY,EACZC,cAAc,IAKlBwtf,EAAah6f,UAAU2mC,cAAgB,WACnC,MAAO,gBAWXqzd,EAAah6f,UAAUwniB,yBAA2B,SAAU71hB,EAAGC,EAAGgJ,EAAOD,GACrE/V,KAAKgolB,uBAAuBtjlB,MAAMgI,IAAMM,EAAEE,WAAa,KACvDlN,KAAKgolB,uBAAuBtjlB,MAAM8H,KAAOO,EAAEG,WAAa,KACxDlN,KAAKgolB,uBAAuBtjlB,MAAMmwF,YAAc,MAChD70F,KAAKgolB,uBAAuBtjlB,MAAMqR,OAASA,EAAS,KACpD/V,KAAKgolB,uBAAuBtjlB,MAAMsR,MAAQA,EAAQ,KAClDhW,KAAKgolB,uBAAuBtjlB,MAAM0pD,gBAAkB,cACpDpuD,KAAKgolB,uBAAuBtjlB,MAAMmV,SAAW,SAC7C7Z,KAAKgolB,uBAAuBtjlB,MAAMwP,SAAW,YAMjDkhf,EAAah6f,UAAU6iiB,uBAAyB,WAC5Cj+hB,KAAKgolB,uBAAyBxnlB,SAASW,cAAc,OACrDnB,KAAKgolB,uBAAuBtjlB,MAAM6iE,OAAS,IAC3CvnE,KAAKgolB,uBAAuBtjlB,MAAMosC,QAAU,OAC5C9wC,KAAKwuf,OAAOgnC,cAAc7zhB,YAAY3B,KAAKgolB,yBAO/C5yF,EAAah6f,UAAUipjB,qBAAuB,SAAUnyC,GACpDlygB,KAAK2nlB,oBAAoBl7hB,QAEzB,IAAIw7hB,EACCxqlB,EAAkBuC,KAAKwuf,OAAO7vQ,eAC/BspW,EAAYjolB,KAAKgolB,wBAEhBvqlB,EAAkBwqlB,IAAeA,EAAU9jlB,SAASnE,KAAK8nlB,mBAC1D9nlB,KAAK8nlB,gBAAkB9nlB,KAAKkolB,gBAAgBD,EAAWjolB,OAE3DA,KAAK8nlB,gBAAgBpjlB,MAAMsR,MAASk8f,EAAgB,MAAI,KACxDlygB,KAAK8nlB,gBAAgBpjlB,MAAMqR,OAAUm8f,EAAiB,OAAI,KAC1DlygB,KAAKmolB,uBAAyBj2E,EAC9B,IAAIW,EAAaX,EAAWjod,KACxBv9C,EAAM1M,KAAKwuf,OAAOv4a,UAAUmhO,OAAOy7N,GAAcX,EAAWlze,OAAOtyB,IACnEF,EAAOxM,KAAKwuf,OAAOv4a,UAAUoge,gBAAgBxjC,EAAYX,EAAY,GACrE3kW,EAAOvtK,KAAKwuf,OAAOv4a,UAAUslO,QAAQs3N,EAAW5b,WACpDj3f,KAAK2+O,YAAcpxE,EAGd9vK,EAAkBwqlB,KACnBjolB,KAAKgolB,uBAAuBtjlB,MAAMosC,QAAU,QAC5Cm3iB,EAAUvjlB,MAAMsR,MAAQu3J,EAAKurV,kBAAkB9if,MAAQ,KACvDiykB,EAAUvjlB,MAAMqR,OAASw3J,EAAKurV,kBAAkB/if,OAAS,KACzDkykB,EAAUvjlB,MAAM8H,KAAO+gK,EAAKurV,kBAAkB/rf,EAAI,KAClDk7kB,EAAUvjlB,MAAMgI,IAAM6gK,EAAKurV,kBAAkB9rf,EAAI,KACjDi7kB,EAAUvjlB,MAAMmwF,YAAc,MAC9Bozf,EAAUvjlB,MAAM0pD,gBAAkB,cAClC65hB,EAAUvjlB,MAAMmV,SAAW,SAC3BoukB,EAAUvjlB,MAAMwP,SAAW,YAE/B,IAAI4thB,EAAkB,EAClB1kF,EAAYp9c,KAAKwuf,OAAOkK,aAAanrV,GACxBvtK,KAAKwuf,OAEtBszC,EAAkBlmhB,WAAW5b,KAAKgolB,uBAAuBtjlB,MAAMsR,OAC1DhW,KAAKwuf,OAAO6jC,cAAcr8gB,MAA0BhW,KAAKwuf,OAAO15a,WAIjEsoY,EAAY0kF,GACyB9hiB,KAAKwuf,OAAO15a,WAGjDy4F,EAAKurV,kBAAkB9rf,EAAIhN,KAAKwuf,OAAO15a,WAAc90E,KAAKwuf,OAAOzmQ,MAAMxpP,QAAQgvK,GAAuBvtK,KAAKwuf,OAAO15a,WACtH,IAAIszgB,EAAiBpolB,KAAKgolB,uBACtBK,EAAsBzskB,WAAWwskB,EAAe1jlB,MAAMsR,OACtDsykB,EAAuB1skB,WAAWwskB,EAAe1jlB,MAAMqR,QACvDwykB,EAAuB3skB,WAAW5b,KAAK8nlB,gBAAgBpjlB,MAAMsR,OAC7DwykB,EAAwB5skB,WAAW5b,KAAK8nlB,gBAAgBpjlB,MAAMqR,QAC9DipB,GAAUh/B,KAAKyolB,eAAiB,GAAK,EACrCzykB,EAAQuykB,EAAuB,EAAIvpjB,EACnCjpB,EAASyykB,EAAwB,EAAIxpjB,EAiBzC,GAhBIhpB,GAASqykB,EAAsB77kB,GAAQxM,KAAKwuf,OAAO15a,WAAa91C,IAChEhpB,GAASqykB,EAAsB77kB,GAAQxM,KAAKwuf,OAAO15a,YAEnD/+D,GAAUuykB,EAAuB57kB,GAAO1M,KAAKwuf,OAAO15a,WAAa91C,IACjEjpB,GAAUuykB,EAAuB57kB,GAAO1M,KAAKwuf,OAAO15a,YAKxD90E,KAAKgolB,uBAAuBtjlB,MAAMsR,MAAQ4e,SAAS50B,KAAKgolB,uBAAuBtjlB,MAAMsR,MAAM/Y,QAAQ,KAAM,IAAK,IAAM+C,KAAKwuf,OAAO15a,WAAa,KAC7I90E,KAAKgolB,uBAAuBtjlB,MAAMqR,OAAS6e,SAAS50B,KAAKgolB,uBAAuBtjlB,MAAMqR,OAAO9Y,QAAQ,KAAM,IAAK,IAAM+C,KAAKwuf,OAAO15a,WAAa,KAC/I/+D,EAAS/V,KAAKwuf,OAAOp8Y,OAAOk/a,eAAepf,EAAWn8f,QACtDC,EAAQhW,KAAKwuf,OAAOp8Y,OAAOk/a,eAAepf,EAAWl8f,OACrDxJ,EAAOxM,KAAKwuf,OAAOp8Y,OAAOk/a,eAAe9khB,GACzCE,EAAM1M,KAAKwuf,OAAOp8Y,OAAOk/a,eAAe5khB,GACxC1M,KAAK0olB,wBAAwBl8kB,EAAME,EAAKsJ,EAAOD,EAAQ/V,OAClDA,KAAK2nlB,oBAAoBtkW,YAAYwvR,GAAa,CACnD,IAAI81E,EAAoB,IAAIC,GAAkB12E,EAAWn8f,OAAQm8f,EAAWl8f,OAC5EhW,KAAK2nlB,oBAAoBvjlB,IAAIyugB,EAAY81E,KAOjDvzF,EAAah6f,UAAUkpjB,iBAAmB,WACjC7mjB,EAAkBuC,KAAKgolB,0BACxBholB,KAAKgolB,uBAAuBtjlB,MAAMosC,QAAU,IAE3CrzC,EAAkBuC,KAAKymlB,sBACxBzmlB,KAAKymlB,mBAAmB/hlB,MAAMosC,QAAU,IAEvCrzC,EAAkBuC,KAAK6mlB,kBACxB7mlB,KAAK6mlB,eAAenilB,MAAMosC,QAAU,GACpC9wC,KAAKqnlB,qBAAqB3ilB,MAAMosC,QAAU,IAEzCrzC,EAAkBuC,KAAK+mlB,mBACxB/mlB,KAAK+mlB,gBAAgBrilB,MAAMosC,QAAU,GACrC9wC,KAAKunlB,sBAAsB7ilB,MAAMosC,QAAU,IAE1CrzC,EAAkBuC,KAAK8mlB,oBACxB9mlB,KAAK8mlB,iBAAiBpilB,MAAMosC,QAAU,GACtC9wC,KAAKsnlB,uBAAuB5ilB,MAAMosC,QAAU,IAE3CrzC,EAAkBuC,KAAKinlB,mBACxBjnlB,KAAKinlB,gBAAgBvilB,MAAMosC,QAAU,GACrC9wC,KAAKynlB,sBAAsB/ilB,MAAMosC,QAAU,IAE1CrzC,EAAkBuC,KAAK4mlB,gBACxB5mlB,KAAK4mlB,aAAalilB,MAAMosC,QAAU,GAClC9wC,KAAKonlB,mBAAmB1ilB,MAAMosC,QAAU,IAEvCrzC,EAAkBuC,KAAK0mlB,eACxB1mlB,KAAK0mlB,YAAYhilB,MAAMosC,QAAU,GACjC9wC,KAAKknlB,kBAAkBxilB,MAAMosC,QAAU,IAEtCrzC,EAAkBuC,KAAKgnlB,kBACxBhnlB,KAAKgnlB,eAAetilB,MAAMosC,QAAU,GACpC9wC,KAAKwnlB,qBAAqB9ilB,MAAMosC,QAAU,IAEzCrzC,EAAkBuC,KAAK2mlB,iBACxB3mlB,KAAK2mlB,cAAcjilB,MAAMosC,QAAU,GACnC9wC,KAAKmnlB,oBAAoBzilB,MAAMosC,QAAU,IAE7C9wC,KAAKy4hB,uBAAwB,GAMjCrjC,EAAah6f,UAAU+/iB,iBAAmB,WACjC19iB,EAAkBuC,KAAKgolB,0BACxBholB,KAAKgolB,uBAAuBtjlB,MAAMosC,QAAU,QAE3CrzC,EAAkBuC,KAAKymlB,sBACxBzmlB,KAAKymlB,mBAAmB/hlB,MAAMosC,QAAU,QAEvCrzC,EAAkBuC,KAAK6mlB,kBACxB7mlB,KAAK6mlB,eAAenilB,MAAMosC,QAAU,OACpC9wC,KAAKqnlB,qBAAqB3ilB,MAAMosC,QAAU,QAEzCrzC,EAAkBuC,KAAK+mlB,mBACxB/mlB,KAAK+mlB,gBAAgBrilB,MAAMosC,QAAU,OACrC9wC,KAAKunlB,sBAAsB7ilB,MAAMosC,QAAU,QAE1CrzC,EAAkBuC,KAAK8mlB,oBACxB9mlB,KAAK8mlB,iBAAiBpilB,MAAMosC,QAAU,OACtC9wC,KAAKsnlB,uBAAuB5ilB,MAAMosC,QAAU,QAE3CrzC,EAAkBuC,KAAKinlB,mBACxBjnlB,KAAKinlB,gBAAgBvilB,MAAMosC,QAAU,OACrC9wC,KAAKynlB,sBAAsB/ilB,MAAMosC,QAAU,QAE1CrzC,EAAkBuC,KAAK4mlB,gBACxB5mlB,KAAK4mlB,aAAalilB,MAAMosC,QAAU,OAClC9wC,KAAKonlB,mBAAmB1ilB,MAAMosC,QAAU,QAEvCrzC,EAAkBuC,KAAK0mlB,eACxB1mlB,KAAK0mlB,YAAYhilB,MAAMosC,QAAU,OACjC9wC,KAAKknlB,kBAAkBxilB,MAAMosC,QAAU,QAEtCrzC,EAAkBuC,KAAKgnlB,kBACxBhnlB,KAAKgnlB,eAAetilB,MAAMosC,QAAU,OACpC9wC,KAAKwnlB,qBAAqB9ilB,MAAMosC,QAAU,QAEzCrzC,EAAkBuC,KAAK2mlB,iBACxB3mlB,KAAK2mlB,cAAcjilB,MAAMosC,QAAU,OACnC9wC,KAAKmnlB,oBAAoBzilB,MAAMosC,QAAU,QAE7C9wC,KAAKy4hB,uBAAwB,EAC7Bz4hB,KAAK2+O,iBAAczjP,GASvBk6f,EAAah6f,UAAU8slB,gBAAkB,SAAUD,EAAWtsD,GA2G1D,OA1GA37hB,KAAK6olB,uBAAuBltD,GAC5BssD,EAAUtmlB,YAAYg6hB,EAAa8qD,oBACnC9qD,EAAayrD,mBAAqB5mlB,SAASW,cAAc,OACzDw6hB,EAAayrD,mBAAmB1ilB,MAAMg6D,OAAS,YAC/Ci9d,EAAayrD,mBAAmB9jlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,sBACrEhkJ,KAAKk9jB,gBAAgBvhC,EAAayrD,oBAClCzrD,EAAayrD,mBAAmB1ilB,MAAMsR,MAAShW,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC1EgF,EAAayrD,mBAAmB1ilB,MAAMqR,OAAU/V,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC3EgF,EAAayrD,mBAAmB1ilB,MAAM+I,QAAU,KAChDw6kB,EAAUtmlB,YAAYg6hB,EAAayrD,oBACnCzrD,EAAairD,aAAepmlB,SAASW,cAAc,OACnDw6hB,EAAairD,aAAatjlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,gBAC/D23Y,EAAairD,aAAalilB,MAAMg6D,OAAS,YACzC1+D,KAAKk9jB,gBAAgBvhC,EAAairD,cAClCqB,EAAUtmlB,YAAYg6hB,EAAairD,cACnCjrD,EAAaurD,kBAAoB1mlB,SAASW,cAAc,OACxDw6hB,EAAaurD,kBAAkBxilB,MAAMg6D,OAAS,YAC9Ci9d,EAAaurD,kBAAkB5jlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,qBACpEhkJ,KAAKk9jB,gBAAgBvhC,EAAaurD,mBAClCvrD,EAAaurD,kBAAkBxilB,MAAMsR,MAAShW,KAAKwuf,OAAOmoC,aAAwB,OAAT,OACzEgF,EAAaurD,kBAAkBxilB,MAAMqR,OAAU/V,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC1EgF,EAAaurD,kBAAkBxilB,MAAM+I,QAAU,KAC/Cw6kB,EAAUtmlB,YAAYg6hB,EAAaurD,mBACnCvrD,EAAa+qD,YAAclmlB,SAASW,cAAc,OAClDw6hB,EAAa+qD,YAAYpjlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,eAC9D23Y,EAAa+qD,YAAYhilB,MAAMg6D,OAAS,YACxC1+D,KAAKk9jB,gBAAgBvhC,EAAa+qD,aAClCuB,EAAUtmlB,YAAYg6hB,EAAa+qD,aACnC/qD,EAAawrD,oBAAsB3mlB,SAASW,cAAc,OAC1Dw6hB,EAAawrD,oBAAoBzilB,MAAMg6D,OAAS,WAChDi9d,EAAawrD,oBAAoB7jlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,uBACtEhkJ,KAAKk9jB,gBAAgBvhC,EAAawrD,qBAClCxrD,EAAawrD,oBAAoBzilB,MAAMsR,MAAShW,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC3EgF,EAAawrD,oBAAoBzilB,MAAMqR,OAAU/V,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC5EgF,EAAawrD,oBAAoBzilB,MAAM+I,QAAU,KACjDw6kB,EAAUtmlB,YAAYg6hB,EAAawrD,qBACnCxrD,EAAagrD,cAAgBnmlB,SAASW,cAAc,OACpDw6hB,EAAagrD,cAAcrjlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,iBAChE23Y,EAAagrD,cAAcjilB,MAAMg6D,OAAS,WAC1C1+D,KAAKk9jB,gBAAgBvhC,EAAagrD,eAClCsB,EAAUtmlB,YAAYg6hB,EAAagrD,eACnChrD,EAAa4rD,sBAAwB/mlB,SAASW,cAAc,OAC5Dw6hB,EAAa4rD,sBAAsB7ilB,MAAMg6D,OAAS,YAClDi9d,EAAa4rD,sBAAsBjklB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,yBACxEhkJ,KAAKk9jB,gBAAgBvhC,EAAa4rD,uBAClC5rD,EAAa4rD,sBAAsB7ilB,MAAMsR,MAAShW,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC7EgF,EAAa4rD,sBAAsB7ilB,MAAMqR,OAAU/V,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC9EgF,EAAa4rD,sBAAsB7ilB,MAAM+I,QAAU,KACnDw6kB,EAAUtmlB,YAAYg6hB,EAAa4rD,uBACnC5rD,EAAaorD,gBAAkBvmlB,SAASW,cAAc,OACtDw6hB,EAAaorD,gBAAgBzjlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,mBAClE23Y,EAAaorD,gBAAgBrilB,MAAMg6D,OAAS,YAC5C1+D,KAAKk9jB,gBAAgBvhC,EAAaorD,iBAClCkB,EAAUtmlB,YAAYg6hB,EAAaorD,iBACnCprD,EAAa0rD,qBAAuB7mlB,SAASW,cAAc,OAC3Dw6hB,EAAa0rD,qBAAqB3ilB,MAAMg6D,OAAS,YACjDi9d,EAAa0rD,qBAAqB/jlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,wBACvEhkJ,KAAKk9jB,gBAAgBvhC,EAAa0rD,sBAClC1rD,EAAa0rD,qBAAqB3ilB,MAAMsR,MAAShW,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC5EgF,EAAa0rD,qBAAqB3ilB,MAAMqR,OAAU/V,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC7EgF,EAAa0rD,qBAAqB3ilB,MAAM+I,QAAU,KAClDw6kB,EAAUtmlB,YAAYg6hB,EAAa0rD,sBACnC1rD,EAAakrD,eAAiBrmlB,SAASW,cAAc,OACrDw6hB,EAAakrD,eAAevjlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,kBACjE23Y,EAAakrD,eAAenilB,MAAMg6D,OAAS,YAC3C1+D,KAAKk9jB,gBAAgBvhC,EAAakrD,gBAClCoB,EAAUtmlB,YAAYg6hB,EAAakrD,gBACnClrD,EAAa2rD,uBAAyB9mlB,SAASW,cAAc,OAC7Dw6hB,EAAa2rD,uBAAuB5ilB,MAAMg6D,OAAS,WACnDi9d,EAAa2rD,uBAAuBhklB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,0BACzEhkJ,KAAKk9jB,gBAAgBvhC,EAAa2rD,wBAClC3rD,EAAa2rD,uBAAuB5ilB,MAAMsR,MAAShW,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC9EgF,EAAa2rD,uBAAuB5ilB,MAAMqR,OAAU/V,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC/EgF,EAAa2rD,uBAAuB5ilB,MAAM+I,QAAU,KACpDw6kB,EAAUtmlB,YAAYg6hB,EAAa2rD,wBACnC3rD,EAAamrD,iBAAmBtmlB,SAASW,cAAc,OACvDw6hB,EAAamrD,iBAAiBxjlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,oBACnE23Y,EAAamrD,iBAAiBpilB,MAAMg6D,OAAS,WAC7C1+D,KAAKk9jB,gBAAgBvhC,EAAamrD,kBAClCmB,EAAUtmlB,YAAYg6hB,EAAamrD,kBACnCnrD,EAAa8rD,sBAAwBjnlB,SAASW,cAAc,OAC5Dw6hB,EAAa8rD,sBAAsB/ilB,MAAMg6D,OAAS,WAClDi9d,EAAa8rD,sBAAsBnklB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,yBACxEhkJ,KAAKk9jB,gBAAgBvhC,EAAa8rD,uBAClC9rD,EAAa8rD,sBAAsB/ilB,MAAMsR,MAAShW,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC7EgF,EAAa8rD,sBAAsB/ilB,MAAMqR,OAAU/V,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC9EgF,EAAa8rD,sBAAsB/ilB,MAAM+I,QAAU,KACnDw6kB,EAAUtmlB,YAAYg6hB,EAAa8rD,uBACnC9rD,EAAasrD,gBAAkBzmlB,SAASW,cAAc,OACtDw6hB,EAAasrD,gBAAgB3jlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,mBAClE23Y,EAAasrD,gBAAgBvilB,MAAMg6D,OAAS,WAC5C1+D,KAAKk9jB,gBAAgBvhC,EAAasrD,iBAClCgB,EAAUtmlB,YAAYg6hB,EAAasrD,iBACnCtrD,EAAa6rD,qBAAuBhnlB,SAASW,cAAc,OAC3Dw6hB,EAAa6rD,qBAAqB9ilB,MAAMg6D,OAAS,WACjDi9d,EAAa6rD,qBAAqBlklB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,wBACvEhkJ,KAAKk9jB,gBAAgBvhC,EAAa6rD,sBAClC7rD,EAAa6rD,qBAAqB9ilB,MAAMsR,MAAShW,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC5EgF,EAAa6rD,qBAAqB9ilB,MAAMqR,OAAU/V,KAAKwuf,OAAOmoC,aAAwB,OAAT,OAC7EgF,EAAa6rD,qBAAqB9ilB,MAAM+I,QAAU,KAClDw6kB,EAAUtmlB,YAAYg6hB,EAAa6rD,sBACnC7rD,EAAaqrD,eAAiBxmlB,SAASW,cAAc,OACrDw6hB,EAAaqrD,eAAe1jlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,kBACjE23Y,EAAaqrD,eAAetilB,MAAMg6D,OAAS,WAC3C1+D,KAAKk9jB,gBAAgBvhC,EAAaqrD,gBAClCiB,EAAUtmlB,YAAYg6hB,EAAaqrD,gBAC5BrrD,EAAa8qD,oBAWxBrxF,EAAah6f,UAAUstlB,wBAA0B,SAAUl8kB,EAAME,EAAKsJ,EAAOD,EAAQ4lhB,GAEjFA,EAAa8qD,mBAAmB/hlB,MAAMsR,MAAQA,EAAQ,KACtD2lhB,EAAa8qD,mBAAmB/hlB,MAAMqR,OAASA,EAAS,KACxD4lhB,EAAa8qD,mBAAmB/hlB,MAAM8H,KAAOA,EAAO,EAAI,KACxDmvhB,EAAa8qD,mBAAmB/hlB,MAAMgI,IAAMA,EAAM,KAElDivhB,EAAairD,aAAalilB,MAAM8H,KAASA,EAAOwJ,EAAS,EAAK,KAC9D2lhB,EAAairD,aAAalilB,MAAMgI,IAAOA,EAAM,EAAK,KAClDivhB,EAAa+qD,YAAYhilB,MAAM8H,KAAQA,EAAO,EAAK,KACnDmvhB,EAAa+qD,YAAYhilB,MAAMgI,IAAOA,EAAM,EAAK,KACjDivhB,EAAagrD,cAAcjilB,MAAM8H,KAASoP,WAAW+/gB,EAAa+qD,YAAYhilB,MAAM8H,MAASwJ,EAAQ,EAAM,EAAK,KAChH2lhB,EAAagrD,cAAcjilB,MAAMgI,IAAOA,EAAM,EAAK,KACnDivhB,EAAaorD,gBAAgBrilB,MAAM8H,KAAOmvhB,EAAairD,aAAalilB,MAAM8H,KAC1EmvhB,EAAaorD,gBAAgBrilB,MAAMgI,IAAOkP,WAAW+/gB,EAAairD,aAAalilB,MAAMgI,KAAOqJ,EAAU,KACtG4lhB,EAAakrD,eAAenilB,MAAM8H,KAAOmvhB,EAAa+qD,YAAYhilB,MAAM8H,KACxEmvhB,EAAakrD,eAAenilB,MAAMgI,IAAOkP,WAAW+/gB,EAAa+qD,YAAYhilB,MAAMgI,KAAOqJ,EAAU,KACpG4lhB,EAAamrD,iBAAiBpilB,MAAM8H,KAAOmvhB,EAAagrD,cAAcjilB,MAAM8H,KAC5EmvhB,EAAamrD,iBAAiBpilB,MAAMgI,IAAOkP,WAAW+/gB,EAAagrD,cAAcjilB,MAAMgI,KAAOqJ,EAAU,KACxG4lhB,EAAasrD,gBAAgBvilB,MAAM8H,KAASA,EAAOwJ,EAAS,EAAK,KACjE2lhB,EAAasrD,gBAAgBvilB,MAAMgI,IAAOkP,WAAW+/gB,EAAairD,aAAalilB,MAAMgI,KAAQqJ,EAAS,EAAM,KAC5G4lhB,EAAaqrD,eAAetilB,MAAM8H,KAAOmvhB,EAAa+qD,YAAYhilB,MAAM8H,KACxEmvhB,EAAaqrD,eAAetilB,MAAMgI,IAAOkP,WAAW+/gB,EAAa+qD,YAAYhilB,MAAMgI,KAAQqJ,EAAS,EAAM,KAC1G4lhB,EAAayrD,mBAAmB1ilB,MAAM8H,KAAQxM,KAAKwuf,OAAOmoC,aAA+CnqhB,EAAOwJ,EAAS,GAAM,KAApDxJ,EAAOwJ,EAAS,EAAK,KAChG2lhB,EAAayrD,mBAAmB1ilB,MAAMgI,IAAO1M,KAAKwuf,OAAOmoC,aAAmCjqhB,EAAM,GAAM,KAA/BA,EAAM,EAAK,KACpFivhB,EAAaurD,kBAAkBxilB,MAAM8H,KAAQxM,KAAKwuf,OAAOmoC,aAAoCnqhB,EAAO,GAAM,KAAjCA,EAAO,EAAK,KACrFmvhB,EAAaurD,kBAAkBxilB,MAAMgI,IAAO1M,KAAKwuf,OAAOmoC,aAAmCjqhB,EAAM,GAAM,KAA/BA,EAAM,EAAK,KACnFivhB,EAAawrD,oBAAoBzilB,MAAM8H,KAASoP,WAAW+/gB,EAAaurD,kBAAkBxilB,MAAM8H,MAASwJ,EAAQ,EAAM,EAAK,KAC5H2lhB,EAAawrD,oBAAoBzilB,MAAMgI,IAAO1M,KAAKwuf,OAAOmoC,aAAmCjqhB,EAAM,GAAM,KAA/BA,EAAM,EAAK,KACrFivhB,EAAa4rD,sBAAsB7ilB,MAAM8H,KAAOmvhB,EAAayrD,mBAAmB1ilB,MAAM8H,KACtFmvhB,EAAa4rD,sBAAsB7ilB,MAAMgI,IAAOkP,WAAW+/gB,EAAayrD,mBAAmB1ilB,MAAMgI,KAAOqJ,EAAU,KAClH4lhB,EAAa0rD,qBAAqB3ilB,MAAM8H,KAAOmvhB,EAAaurD,kBAAkBxilB,MAAM8H,KACpFmvhB,EAAa0rD,qBAAqB3ilB,MAAMgI,IAAOkP,WAAW+/gB,EAAaurD,kBAAkBxilB,MAAMgI,KAAOqJ,EAAU,KAChH4lhB,EAAa2rD,uBAAuB5ilB,MAAM8H,KAAOmvhB,EAAawrD,oBAAoBzilB,MAAM8H,KACxFmvhB,EAAa2rD,uBAAuB5ilB,MAAMgI,IAAOkP,WAAW+/gB,EAAawrD,oBAAoBzilB,MAAMgI,KAAOqJ,EAAU,KAEpH4lhB,EAAa8rD,sBAAsB/ilB,MAAM8H,KAAQxM,KAAKwuf,OAAOmoC,aAA+CnqhB,EAAOwJ,EAAS,GAAM,KAApDxJ,EAAOwJ,EAAS,EAAK,KACnG2lhB,EAAa8rD,sBAAsB/ilB,MAAMgI,IAAOkP,WAAW+/gB,EAAayrD,mBAAmB1ilB,MAAMgI,KAAQqJ,EAAS,EAAM,KACxH4lhB,EAAa6rD,qBAAqB9ilB,MAAM8H,KAAOmvhB,EAAaurD,kBAAkBxilB,MAAM8H,KACpFmvhB,EAAa6rD,qBAAqB9ilB,MAAMgI,IAAOkP,WAAW+/gB,EAAaurD,kBAAkBxilB,MAAMgI,KAAQqJ,EAAS,EAAM,KACtH/V,KAAK8olB,uBAAuBntD,GACxB37hB,KAAKwuf,OAAOmoC,aACZ32hB,KAAK+olB,0BAGL/olB,KAAKgplB,2BAQb5zF,EAAah6f,UAAU0tlB,uBAAyB,SAAUntD,GACtD37hB,KAAK4nlB,mBAAmBnB,mBAAmB15kB,EAAI6O,WAAW+/gB,EAAa8qD,mBAAmB/hlB,MAAM8H,MAChGxM,KAAK4nlB,mBAAmBnB,mBAAmBz5kB,EAAI4O,WAAW+/gB,EAAa8qD,mBAAmB/hlB,MAAMgI,KAChG1M,KAAK4nlB,mBAAmBP,qBAAqBt6kB,EAAI6O,WAAW+/gB,EAAa0rD,qBAAqB3ilB,MAAM8H,MACpGxM,KAAK4nlB,mBAAmBP,qBAAqBr6kB,EAAI4O,WAAW+/gB,EAAa0rD,qBAAqB3ilB,MAAMgI,KACpG1M,KAAK4nlB,mBAAmBL,sBAAsBx6kB,EAAI6O,WAAW+/gB,EAAa4rD,sBAAsB7ilB,MAAM8H,MACtGxM,KAAK4nlB,mBAAmBL,sBAAsBv6kB,EAAI4O,WAAW+/gB,EAAa4rD,sBAAsB7ilB,MAAMgI,KACtG1M,KAAK4nlB,mBAAmBN,uBAAuBv6kB,EAAI6O,WAAW+/gB,EAAa2rD,uBAAuB5ilB,MAAM8H,MACxGxM,KAAK4nlB,mBAAmBN,uBAAuBt6kB,EAAI4O,WAAW+/gB,EAAa2rD,uBAAuB5ilB,MAAMgI,KACxG1M,KAAK4nlB,mBAAmBV,kBAAkBn6kB,EAAI6O,WAAW+/gB,EAAaurD,kBAAkBxilB,MAAM8H,MAC9FxM,KAAK4nlB,mBAAmBV,kBAAkBl6kB,EAAI4O,WAAW+/gB,EAAaurD,kBAAkBxilB,MAAMgI,KAC9F1M,KAAK4nlB,mBAAmBR,mBAAmBr6kB,EAAI6O,WAAW+/gB,EAAayrD,mBAAmB1ilB,MAAM8H,MAChGxM,KAAK4nlB,mBAAmBR,mBAAmBp6kB,EAAI4O,WAAW+/gB,EAAayrD,mBAAmB1ilB,MAAMgI,KAChG1M,KAAK4nlB,mBAAmBT,oBAAoBp6kB,EAAI6O,WAAW+/gB,EAAawrD,oBAAoBzilB,MAAM8H,MAClGxM,KAAK4nlB,mBAAmBT,oBAAoBn6kB,EAAI4O,WAAW+/gB,EAAawrD,oBAAoBzilB,MAAMgI,KAClG1M,KAAK4nlB,mBAAmBJ,qBAAqBz6kB,EAAI6O,WAAW+/gB,EAAa6rD,qBAAqB9ilB,MAAM8H,MACpGxM,KAAK4nlB,mBAAmBJ,qBAAqBx6kB,EAAI4O,WAAW+/gB,EAAa6rD,qBAAqB9ilB,MAAMgI,KACpG1M,KAAK4nlB,mBAAmBH,sBAAsB16kB,EAAI6O,WAAW+/gB,EAAa8rD,sBAAsB/ilB,MAAM8H,MACtGxM,KAAK4nlB,mBAAmBH,sBAAsBz6kB,EAAI4O,WAAW+/gB,EAAa8rD,sBAAsB/ilB,MAAMgI,MAO1G0of,EAAah6f,UAAUytlB,uBAAyB,SAAUltD,GACtDA,EAAa8qD,mBAAqBjmlB,SAASW,cAAc,OACzDw6hB,EAAa8qD,mBAAmBnjlB,GAAKtD,KAAKwuf,OAAOgV,MAAMx/W,YAAc,oBACrE23Y,EAAa8qD,mBAAmB/hlB,MAAMwP,SAAW,WACjDynhB,EAAa8qD,mBAAmB/hlB,MAAMoiC,OAAS,oBAC/C60f,EAAa8qD,mBAAmB/hlB,MAAM6iE,OAAS,KAC/Co0d,EAAa8qD,mBAAmB/hlB,MAAM0pD,gBAAkB,cACxDute,EAAa8qD,mBAAmB/hlB,MAAMosC,QAAU,SAOpDskd,EAAah6f,UAAU8hkB,gBAAkB,SAAU+rB,GAC/CA,EAAkBvklB,MAAMwP,SAAW,WACnC+0kB,EAAkBvklB,MAAMsR,MAAQ,MAChCizkB,EAAkBvklB,MAAMqR,OAAS,MACjCkzkB,EAAkBvklB,MAAM0qB,SAAW,MACnC65jB,EAAkBvklB,MAAM6iE,OAAS,OACjC0hhB,EAAkBvklB,MAAM0pD,gBAAkB,UAC1C66hB,EAAkBvklB,MAAMoiC,OAAS,oBACjCmijB,EAAkBvklB,MAAMwklB,UAAY,2BACpCD,EAAkBvklB,MAAM2xB,MAAQ,WAOpC++d,EAAah6f,UAAU+tlB,oBAAsB,SAAUvhF,EAAYrsJ,EAAO0mL,GACtE1mL,GAAgBv7W,KAAKwuf,OAAO15a,WAC5Bmtd,GAAgBjiiB,KAAKwuf,OAAO15a,WAC5B90E,KAAKwhI,UAAY/jI,EAAkBuC,KAAKwhI,WAAa+5O,EAAQv7W,KAAKwhI,UAClExhI,KAAKyhI,SAAWhkI,EAAkBuC,KAAKyhI,UAAYwga,EAAQjiiB,KAAKyhI,SAChE,IAAIhqG,EACJ,OAAQz3B,KAAK25hB,sBAAsBr2hB,GAAGpG,MAAM,KAAK,IAC7C,IAAK,qBAEDq+W,GADA9jV,EAASz3B,KAAKoplB,iBAAiBxhF,IAChBp7f,KACfy1hB,EAAQxqgB,EAAO/qB,IACf,MACJ,IAAK,oBAED6uW,IADA9jV,EAASz3B,KAAKqplB,gBAAgBzhF,IACdp7f,KAChBy1hB,GAASxqgB,EAAO/qB,IAChB,MACJ,IAAK,sBACD6uW,EAAQ,EACR0mL,EAAQjiiB,KAAKsplB,kBAAkB1hF,GAC/B,MACJ,IAAK,wBAEDrsJ,GADA9jV,EAASz3B,KAAKuplB,oBAAoB3hF,IACnBp7f,KACfy1hB,EAAQxqgB,EAAO/qB,IACf,MACJ,IAAK,uBAED6uW,IADA9jV,EAASz3B,KAAKwplB,mBAAmB5hF,IACjBp7f,KAChBy1hB,GAASxqgB,EAAO/qB,IAChB,MACJ,IAAK,yBACDu1hB,EAAQr6B,EAAW56f,EAAIi1hB,EACvB1mL,EAAQ,EACR,MACJ,IAAK,wBACDA,EAAQqsJ,EAAW76f,EAAIwuW,EACvB0mL,EAAQ,EACR,MACJ,IAAK,uBACD1mL,EAAQv7W,KAAKyplB,mBAAmB7hF,GAChCq6B,EAAQ,EAKhB,GAAc,IAAV1mL,GAAyB,IAAV0mL,EAAa,CAC5B,IAAIp8B,EAAS7lgB,KAAKmolB,uBAAuBl+hB,KAAKgtc,UAC1ChjT,EAAQj0M,KAAKmolB,uBACjB,IAAK1qlB,EAAkBoogB,IAAWA,EAAO0C,cAAe,CACpD,IAAIuF,EAAajI,EAAOvO,gBACxB,IAAK75f,EAAkBqwgB,GAAa,CAChC,IAAI8O,EAAY9O,EAAWxW,gBACvBpvO,EAAc42O,GAAcO,oBAAoBprT,EAAMl+L,QACtDq7gB,EAAexU,EAAU7mgB,OAASmyQ,EAClC+5Q,EAAQ,GAAKrlB,EAAU5vgB,EAAIokhB,EAAelpQ,EAAc+5Q,EAAQjiiB,KAAKwuf,OAAO4tB,WAAWzvgB,SACvF3M,KAAKu6hB,uBAAwB,IAQzC,GAHIv6hB,KAAKwjgB,MAAMszE,mBACX92kB,KAAK0plB,2BAA2B1plB,KAAKmolB,yBAEpC1qlB,EAAkBuC,KAAKmolB,wBAAyB,CAEjD,IAAInykB,EAAQhW,KAAKmolB,uBAAuBnykB,MAAQulW,EAAQ,GAAKv7W,KAAKmolB,uBAAuBnykB,MAAQulW,EAAQ,GAErGxlW,EAAS/V,KAAKmolB,uBAAuBpykB,OAASkshB,EAAQ,GAAKjiiB,KAAKmolB,uBAAuBpykB,OAASkshB,EAAQ,GACxD,0BAAhDjiiB,KAAK25hB,sBAAsBr2hB,GAAGpG,MAAM,KAAK,IACU,uBAAhD8C,KAAK25hB,sBAAsBr2hB,GAAGpG,MAAM,KAAK,IACO,yBAAhD8C,KAAK25hB,sBAAsBr2hB,GAAGpG,MAAM,KAAK,IACO,sBAAhD8C,KAAK25hB,sBAAsBr2hB,GAAGpG,MAAM,KAAK,KAC5C6Y,EAAS/V,KAAKmolB,uBAAuBpykB,OAAS/V,KAAKmolB,uBAAuBnykB,MAAQA,EAClFA,EAAQhW,KAAKmolB,uBAAuBnykB,MAAQhW,KAAKmolB,uBAAuBpykB,OAASA,GAErF/V,KAAKmolB,uBAAuBnykB,MAAQA,EACpChW,KAAKmolB,uBAAuBpykB,OAASA,EACzB/V,KAAKmolB,uBAAuBl+hB,KAAKgtc,UAC7Cj3f,KAAKqkjB,qBAAqBrkjB,KAAKmolB,wBAEnCnolB,KAAK04hB,iBAAkB,IAQ/BtjC,EAAah6f,UAAUo/hB,2BAA6B,SAAUn+hB,GAC1D,IAAKoB,EAAkBuC,KAAK25hB,uBAAwB,CAChD,IAAIp+K,EAAQ3/V,WAAW5b,KAAK25hB,sBAAsBj1hB,MAAM8H,MACpDy1hB,EAAQrmhB,WAAW5b,KAAK25hB,sBAAsBj1hB,MAAMgI,KACpDkthB,EAAc,IAAI/kf,GAAMx4C,EAAMwP,QAASxP,EAAM4P,SAC7C27f,EAAa5ngB,KAAKwuf,OAAOqrC,gBAAgBD,GAAa,GAC1D55hB,KAAKmplB,oBAAoBvhF,EAAYrsJ,EAAO0mL,KAGpD7sC,EAAah6f,UAAUkulB,kBAAoB,SAAU1hF,GACjD,IAAIq6B,EAiBJ,OAhBIjiiB,KAAKyhI,UAAYmmY,EAAW56f,GAC5Bi1hB,EAAQjiiB,KAAKyhI,SAAWmmY,EAAW56f,EACnChN,KAAKyhI,SAAWmmY,EAAW56f,EACvBhN,KAAKwuf,kBAAkBC,IACnBzuf,KAAKyhI,UAAYzhI,KAAKwuf,OAAOwwC,UAC7BiD,EAAQ,KAKhBA,GAAUr6B,EAAW56f,EAAIhN,KAAKyhI,SAC9BzhI,KAAKyhI,SAAWmmY,EAAW56f,EACL,IAAlBhN,KAAKyhI,WACLwga,GAAS,IAGVA,GAEX7sC,EAAah6f,UAAUqulB,mBAAqB,SAAU7hF,GAClD,IAAIrsJ,EAaJ,OAZIv7W,KAAKwhI,WAAaomY,EAAW76f,GAC7BwuW,EAAQv7W,KAAKwhI,UAAYomY,EAAW76f,EACpC/M,KAAKwhI,UAAYomY,EAAW76f,EACL,IAAnB/M,KAAKwhI,YACL+5O,EAAQ,EACRv7W,KAAKwhI,UAAY5lH,WAAW5b,KAAK25hB,sBAAsBj1hB,MAAM8H,SAIjE+uW,GAAUqsJ,EAAW76f,EAAI/M,KAAKwhI,UAC9BxhI,KAAKwhI,UAAYomY,EAAW76f,GAEzBwuW,GAEX65I,EAAah6f,UAAUgulB,iBAAmB,SAAUxhF,GAQhD,OANI5ngB,KAAKwhI,WAAaomY,EAAW76f,GAAK/M,KAAKyhI,UAAYmmY,EAAW56f,EACrDhN,KAAK2plB,sBAAsB/hF,GAG3B5ngB,KAAK4plB,sBAAsBhiF,IAI5CxS,EAAah6f,UAAUiulB,gBAAkB,SAAUzhF,GAQ/C,OANI5ngB,KAAKwhI,WAAaomY,EAAW76f,GAAK/M,KAAKyhI,UAAYmmY,EAAW56f,EACrDhN,KAAK2plB,sBAAsB/hF,GAG3B5ngB,KAAK4plB,sBAAsBhiF,IAI5CxS,EAAah6f,UAAUmulB,oBAAsB,SAAU3hF,GAQnD,OANI5ngB,KAAKwhI,WAAaomY,EAAW76f,GAAK/M,KAAKyhI,UAAYmmY,EAAW56f,EACrDhN,KAAK2plB,sBAAsB/hF,GAG3B5ngB,KAAK4plB,sBAAsBhiF,IAI5CxS,EAAah6f,UAAUoulB,mBAAqB,SAAU5hF,GAQlD,OANI5ngB,KAAKwhI,WAAaomY,EAAW76f,GAAK/M,KAAKyhI,UAAYmmY,EAAW56f,EACrDhN,KAAK2plB,sBAAsB/hF,GAG3B5ngB,KAAK4plB,sBAAsBhiF,IAI5CxS,EAAah6f,UAAUuulB,sBAAwB,SAAU/hF,GACrD,IAAIrsJ,EACA0mL,EAKJ,OAJA1mL,EAAQqsJ,EAAW76f,EAAI/M,KAAKwhI,UAC5BxhI,KAAKwhI,UAAYomY,EAAW76f,EAC5Bk1hB,EAAQr6B,EAAW56f,EAAIhN,KAAKyhI,SAC5BzhI,KAAKyhI,SAAWmmY,EAAW56f,GAClBR,KAAM+uW,EAAO7uW,IAAKu1hB,IAE/B7sC,EAAah6f,UAAUwulB,sBAAwB,SAAUhiF,GACrD,IAAIrsJ,EACA0mL,EAKJ,OAJA1mL,IAAUv7W,KAAKwhI,UAAYomY,EAAW76f,GACtC/M,KAAKwhI,UAAYomY,EAAW76f,EAC5Bk1hB,IAAUjiiB,KAAKyhI,SAAWmmY,EAAW56f,GACrChN,KAAKyhI,SAAWmmY,EAAW56f,GAClBR,KAAM+uW,EAAO7uW,IAAKu1hB,IAO/B7sC,EAAah6f,UAAUghiB,2BAA6B,SAAUytD,GAC1D,IAAKpslB,EAAkBuC,KAAK25hB,uBAAwB,CAChD,IAAIp+K,EAAQ3/V,WAAW5b,KAAK25hB,sBAAsBj1hB,MAAM8H,MAAQ,GAC5Dy1hB,EAAQrmhB,WAAW5b,KAAK25hB,sBAAsBj1hB,MAAMgI,KAAO,GAC3DqrE,EAAQ8xgB,EAAWjwhB,QACnBgge,EAAc,IAAI/kf,GAAMkjC,EAAM,GAAGle,QAASke,EAAM,GAAGje,SACnD8tc,EAAa5ngB,KAAKwuf,OAAOqrC,gBAAgBD,GAAa,GAC1D,GAAIn8hB,EAAkBuC,KAAKmolB,yBAA2B1qlB,EAAkBuC,KAAKmolB,wBACzE,OAEJnolB,KAAKmplB,oBAAoBvhF,EAAYrsJ,EAAO0mL,KAQpD7sC,EAAah6f,UAAUimiB,cAAgB,SAAUz5B,GAC7C,IAAI76f,EAAI/M,KAAKwuf,OAAOp8Y,OAAOk/a,eAAe1pB,EAAW76f,EAAG,GACpDC,EAAIhN,KAAKwuf,OAAOp8Y,OAAOk/a,eAAe1pB,EAAW56f,EAAG,GACxD46f,EAAa,IAAI/yd,GAAM9nC,EAAGC,GAC1B,IAAI88kB,EAAsB9plB,KAAK4nlB,mBAC3BxmD,EAAiB,GACjBpua,OAAkB93H,EAClB6ulB,EAAeD,EAAoBxC,uBACnCljjB,EAAc0ljB,EAAoBvC,sBAClCpjjB,EAAa2ljB,EAAoBzC,qBACjC2C,EAAYF,EAAoB3C,oBAChCjjjB,EAAW4ljB,EAAoB1C,mBAC/BnjjB,EAAU6ljB,EAAoB5C,kBAC9B+C,EAAcH,EAAoBrC,sBAClCyC,EAAaJ,EAAoBtC,qBAmDrC,OAlDK/plB,EAAkBuC,KAAKsnlB,yBAAyE,SAA9CtnlB,KAAKsnlB,uBAAuB5ilB,MAAMosC,UAEhF82d,EAAW76f,EAAIg9kB,EAAah9kB,GAAK66f,EAAW76f,GAAKg9kB,EAAah9kB,EAAI,IAAQ66f,EAAW56f,EAAI+8kB,EAAa/8kB,GAAK46f,EAAW56f,GAAK+8kB,EAAa/8kB,EAAI,IAC7IgmH,EAAkBhzH,KAAKsnlB,uBACvBlmD,EAAiB,YAGXx5B,EAAW76f,EAAIq3B,EAAYr3B,GAAK66f,EAAW76f,GAAKq3B,EAAYr3B,EAAI,IAAQ66f,EAAW56f,EAAIo3B,EAAYp3B,GAAK46f,EAAW56f,GAAKo3B,EAAYp3B,EAAI,IAC9IgmH,EAAkBhzH,KAAKunlB,sBACvBnmD,EAAiB,aAGXx5B,EAAW76f,EAAIo3B,EAAWp3B,GAAK66f,EAAW76f,GAAKo3B,EAAWp3B,EAAI,IAAQ66f,EAAW56f,EAAIm3B,EAAWn3B,GAAK46f,EAAW56f,GAAKm3B,EAAWn3B,EAAI,IAC1IgmH,EAAkBhzH,KAAKqnlB,qBACvBjmD,EAAiB,aAGXx5B,EAAW76f,EAAIi9kB,EAAUj9kB,GAAK66f,EAAW76f,GAAKi9kB,EAAUj9kB,EAAI,IAAQ66f,EAAW56f,EAAIg9kB,EAAUh9kB,GAAK46f,EAAW56f,GAAKg9kB,EAAUh9kB,EAAI,IACtIgmH,EAAkBhzH,KAAKmnlB,oBACvB/lD,EAAiB,YAGXx5B,EAAW76f,EAAIm3B,EAASn3B,GAAK66f,EAAW76f,GAAKm3B,EAASn3B,EAAI,IAAQ66f,EAAW56f,EAAIk3B,EAASl3B,GAAK46f,EAAW56f,GAAKk3B,EAASl3B,EAAI,IAClIgmH,EAAkBhzH,KAAKonlB,mBACvBhmD,EAAiB,aAGXx5B,EAAW76f,EAAIk3B,EAAQl3B,GAAK66f,EAAW76f,GAAKk3B,EAAQl3B,EAAI,IAAQ66f,EAAW56f,EAAIi3B,EAAQj3B,GAAK46f,EAAW56f,GAAKi3B,EAAQj3B,EAAI,IAC9HgmH,EAAkBhzH,KAAKknlB,kBACvB9lD,EAAiB,aAGXx5B,EAAW76f,EAAIm9kB,EAAWn9kB,GAAK66f,EAAW76f,GAAKm9kB,EAAWn9kB,EAAI,IAAQ66f,EAAW56f,EAAIk9kB,EAAWl9kB,GAAK46f,EAAW56f,GAAKk9kB,EAAWl9kB,EAAI,IAC1IgmH,EAAkBhzH,KAAKwnlB,qBACvBpmD,EAAiB,YAGXx5B,EAAW76f,EAAIk9kB,EAAYl9kB,GAAK66f,EAAW76f,GAAKk9kB,EAAYl9kB,EAAI,IAAQ66f,EAAW56f,EAAIi9kB,EAAYj9kB,GAAK46f,EAAW56f,GAAKi9kB,EAAYj9kB,EAAI,IAC9IgmH,EAAkBhzH,KAAKynlB,sBACvBrmD,EAAiB,aAGX3jiB,EAAkBuC,KAAKymlB,qBAAwB7+E,EAAW76f,EAAI6O,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAM8H,OAC1Go7f,EAAW76f,GAAM6O,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAM8H,MAAQoP,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAMsR,QAC1G4xf,EAAW56f,EAAI4O,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAMgI,MAErDk7f,EAAW56f,GAAM4O,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAMgI,KAAOkP,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAMqR,UACjHqrhB,EAAiB,UAGhBpua,gBAAmBA,EAAiBoua,eAAkBA,IAEnEhsC,EAAah6f,UAAU4tlB,wBAA0B,WACxCvrlB,EAAkBuC,KAAKqnlB,wBACxBrnlB,KAAKsnlB,uBAAuB5ilB,MAAMsR,MAAQ,OAC1ChW,KAAKsnlB,uBAAuB5ilB,MAAMqR,OAAS,OAC3C/V,KAAKunlB,sBAAsB7ilB,MAAMsR,MAAQ,OACzChW,KAAKunlB,sBAAsB7ilB,MAAMqR,OAAS,OAC1C/V,KAAKqnlB,qBAAqB3ilB,MAAMsR,MAAQ,OACxChW,KAAKqnlB,qBAAqB3ilB,MAAMqR,OAAS,OACzC/V,KAAKmnlB,oBAAoBzilB,MAAMsR,MAAQ,OACvChW,KAAKmnlB,oBAAoBzilB,MAAMqR,OAAS,OACxC/V,KAAKonlB,mBAAmB1ilB,MAAMsR,MAAQ,OACtChW,KAAKonlB,mBAAmB1ilB,MAAMqR,OAAS,OACvC/V,KAAKknlB,kBAAkBxilB,MAAMsR,MAAQ,OACrChW,KAAKknlB,kBAAkBxilB,MAAMqR,OAAS,OACtC/V,KAAKwnlB,qBAAqB9ilB,MAAMsR,MAAQ,OACxChW,KAAKwnlB,qBAAqB9ilB,MAAMqR,OAAS,OACzC/V,KAAKynlB,sBAAsB/ilB,MAAMsR,MAAQ,OACzChW,KAAKynlB,sBAAsB/ilB,MAAMqR,OAAS,SAQlDq/e,EAAah6f,UAAU6giB,qBAAuB,SAAUkuD,GACpD,IAAIp9kB,EAAI/M,KAAKwuf,OAAOp8Y,OAAOk/a,eAAe64D,EAAYp9kB,EAAG,GACrDC,EAAIhN,KAAKwuf,OAAOp8Y,OAAOk/a,eAAe64D,EAAYn9kB,EAAG,GACzDm9kB,EAAc,IAAIt1iB,GAAM9nC,EAAGC,GAC3B,IAAIo9kB,EAA6BpqlB,KAAK4nlB,mBAClCxmD,EAAiB,GACjBzoM,OAAmBz9V,EACnB6ulB,EAAeK,EAA2B9C,uBAC1CljjB,EAAcgmjB,EAA2B7C,sBACzCpjjB,EAAaimjB,EAA2B/C,qBACxC2C,EAAYI,EAA2BjD,oBACvCjjjB,EAAWkmjB,EAA2BhD,mBACtCnjjB,EAAUmmjB,EAA2BlD,kBACrC+C,EAAcG,EAA2B3C,sBACzCyC,EAAaE,EAA2B5C,qBAmD5C,OAlDK/plB,EAAkBuC,KAAKsnlB,yBAAyE,SAA9CtnlB,KAAKsnlB,uBAAuB5ilB,MAAMosC,UAEhFq5iB,EAAYp9kB,EAAIg9kB,EAAah9kB,GAAKo9kB,EAAYp9kB,GAAKg9kB,EAAah9kB,EAAI,IAAQo9kB,EAAYn9kB,EAAI+8kB,EAAa/8kB,GAAKm9kB,EAAYn9kB,GAAK+8kB,EAAa/8kB,EAAI,IACjJ2rV,EAAmB34V,KAAKsnlB,uBACxBlmD,EAAiB,YAGX+oD,EAAYp9kB,EAAIq3B,EAAYr3B,GAAKo9kB,EAAYp9kB,GAAKq3B,EAAYr3B,EAAI,IAAQo9kB,EAAYn9kB,EAAIo3B,EAAYp3B,GAAKm9kB,EAAYn9kB,GAAKo3B,EAAYp3B,EAAI,IAClJ2rV,EAAmB34V,KAAKunlB,sBACxBnmD,EAAiB,aAGX+oD,EAAYp9kB,EAAIo3B,EAAWp3B,GAAKo9kB,EAAYp9kB,GAAKo3B,EAAWp3B,EAAI,IAAQo9kB,EAAYn9kB,EAAIm3B,EAAWn3B,GAAKm9kB,EAAYn9kB,GAAKm3B,EAAWn3B,EAAI,IAC9I2rV,EAAmB34V,KAAKqnlB,qBACxBjmD,EAAiB,aAGX+oD,EAAYp9kB,EAAIi9kB,EAAUj9kB,GAAKo9kB,EAAYp9kB,GAAKi9kB,EAAUj9kB,EAAI,IAAQo9kB,EAAYn9kB,EAAIg9kB,EAAUh9kB,GAAKm9kB,EAAYn9kB,GAAKg9kB,EAAUh9kB,EAAI,IAC1I2rV,EAAmB34V,KAAKmnlB,oBACxB/lD,EAAiB,YAGX+oD,EAAYp9kB,EAAIm3B,EAASn3B,GAAKo9kB,EAAYp9kB,GAAKm3B,EAASn3B,EAAI,IAAQo9kB,EAAYn9kB,EAAIk3B,EAASl3B,GAAKm9kB,EAAYn9kB,GAAKk3B,EAASl3B,EAAI,IACtI2rV,EAAmB34V,KAAKonlB,mBACxBhmD,EAAiB,aAGX+oD,EAAYp9kB,EAAIk3B,EAAQl3B,GAAKo9kB,EAAYp9kB,GAAKk3B,EAAQl3B,EAAI,IAAQo9kB,EAAYn9kB,EAAIi3B,EAAQj3B,GAAKm9kB,EAAYn9kB,GAAKi3B,EAAQj3B,EAAI,IAClI2rV,EAAmB34V,KAAKknlB,kBACxB9lD,EAAiB,aAGX+oD,EAAYp9kB,EAAIm9kB,EAAWn9kB,GAAKo9kB,EAAYp9kB,GAAKm9kB,EAAWn9kB,EAAI,IAAQo9kB,EAAYn9kB,EAAIk9kB,EAAWl9kB,GAAKm9kB,EAAYn9kB,GAAKk9kB,EAAWl9kB,EAAI,IAC9I2rV,EAAmB34V,KAAKwnlB,qBACxBpmD,EAAiB,YAGX+oD,EAAYp9kB,EAAIk9kB,EAAYl9kB,GAAKo9kB,EAAYp9kB,GAAKk9kB,EAAYl9kB,EAAI,IAAQo9kB,EAAYn9kB,EAAIi9kB,EAAYj9kB,GAAKm9kB,EAAYn9kB,GAAKi9kB,EAAYj9kB,EAAI,IAClJ2rV,EAAmB34V,KAAKynlB,sBACxBrmD,EAAiB,aAGX3jiB,EAAkBuC,KAAKymlB,qBAAwB0D,EAAYp9kB,EAAI6O,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAM8H,OAC3G29kB,EAAYp9kB,GAAM6O,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAM8H,MAAQoP,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAMsR,QAC3Gm0kB,EAAYn9kB,EAAI4O,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAMgI,MAEtDy9kB,EAAYn9kB,GAAM4O,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAMgI,KAAOkP,WAAW5b,KAAKymlB,mBAAmB/hlB,MAAMqR,UAClHqrhB,EAAiB,UAGhBpua,gBAAmB2lO,EAAkByoM,eAAkBA,IAEpEhsC,EAAah6f,UAAU2tlB,wBAA0B,WACxCtrlB,EAAkBuC,KAAKqnlB,wBACxBrnlB,KAAKsnlB,uBAAuB5ilB,MAAMsR,MAAQ,OAC1ChW,KAAKsnlB,uBAAuB5ilB,MAAMqR,OAAS,OAC3C/V,KAAKunlB,sBAAsB7ilB,MAAMsR,MAAQ,OACzChW,KAAKunlB,sBAAsB7ilB,MAAMqR,OAAS,OAC1C/V,KAAKqnlB,qBAAqB3ilB,MAAMsR,MAAQ,OACxChW,KAAKqnlB,qBAAqB3ilB,MAAMqR,OAAS,OACzC/V,KAAKmnlB,oBAAoBzilB,MAAMsR,MAAQ,OACvChW,KAAKmnlB,oBAAoBzilB,MAAMqR,OAAS,OACxC/V,KAAKonlB,mBAAmB1ilB,MAAMsR,MAAQ,OACtChW,KAAKonlB,mBAAmB1ilB,MAAMqR,OAAS,OACvC/V,KAAKknlB,kBAAkBxilB,MAAMsR,MAAQ,OACrChW,KAAKknlB,kBAAkBxilB,MAAMqR,OAAS,OACtC/V,KAAKwnlB,qBAAqB9ilB,MAAMsR,MAAQ,OACxChW,KAAKwnlB,qBAAqB9ilB,MAAMqR,OAAS,OACzC/V,KAAKynlB,sBAAsB/ilB,MAAMsR,MAAQ,OACzChW,KAAKynlB,sBAAsB/ilB,MAAMqR,OAAS,SAMlDq/e,EAAah6f,UAAUogiB,gBAAkB,WACrCx7hB,KAAKmolB,uBAAuBnykB,MAAQ4F,WAAW5b,KAAK8nlB,gBAAgBpjlB,MAAMsR,OAAShW,KAAKwuf,OAAO15a,WAC/F90E,KAAKmolB,uBAAuBpykB,OAAS6F,WAAW5b,KAAK8nlB,gBAAgBpjlB,MAAMqR,QAAU/V,KAAKwuf,OAAO15a,WACjG90E,KAAKwjgB,MAAMliB,mBAAoB,EAC/Bthf,KAAKwjgB,MAAM1U,aAAa85C,eAAe5oiB,KAAKwjgB,MAAMvtb,WAClDj2E,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkBnshB,KAAKmolB,uBAAuBl+hB,KAAKgtc,UAAW,EAAG,GACpFj3f,KAAKwjgB,MAAM1U,aAAayrE,SAASv6jB,KAAKwjgB,MAAMvtb,WAAW,GACvDj2E,KAAKwuf,OAAOI,oBAQhBwG,EAAah6f,UAAUsulB,2BAA6B,SAAU7xC,IACrDp6iB,EAAkBuC,KAAKwjgB,QAAU/lgB,EAAkBuC,KAAKuxkB,mBACzDvxkB,KAAKuxkB,gBAAkB,IAAImS,GAAgB1jlB,KAAKwjgB,OAChDxjgB,KAAKuxkB,gBAAgBv+gB,OAAS,gBAC9BhzD,KAAKuxkB,gBAAgBnoC,kBACrBppiB,KAAKuxkB,gBAAgBpoC,mBAAmB3kiB,KAAK,IAAIs3Q,GAAY+7R,MAOrEziD,EAAah6f,UAAUsgiB,6BAA+B,WAClD,IAAKj+hB,EAAkBuC,KAAKwjgB,SAAW/lgB,EAAkBuC,KAAKuxkB,iBAAkB,CAC5E,IAAInoB,EAAcppjB,KAAKuxkB,gBAAgBpoC,mBAAmB,GACtDnpiB,KAAKmolB,uBAAuBnykB,QAAUoziB,EAAYpziB,OAC/ChW,KAAKmolB,uBAAuBpykB,SAAWqziB,EAAYrziB,OACtD/V,KAAKuxkB,gBAAgBpoC,mBAAmBtjY,MAIxC7lK,KAAKwjgB,MAAMu0B,cAAcusD,cAActklB,KAAKuxkB,iBAGhDvxkB,KAAKuxkB,qBAAkBr2kB,IAO/Bk6f,EAAah6f,UAAU06hB,2BAA6B,WAChD,IAAKr4hB,EAAkBuC,KAAKmolB,wBAAyB,CACjD,IAAIj2E,EAAalygB,KAAKmolB,uBAClBt1E,EAAaX,EAAWjod,KACxBpO,EAAQ77C,KAAKwuf,OAAOv4a,UAAUmhO,OAAOy7N,GAAcX,EAAWlze,OAAOtyB,IACrEF,EAAOxM,KAAKwuf,OAAOv4a,UAAUoge,gBAAgBxjC,EAAYX,EAAY,GACrEzwY,EAAW5lF,EAAQ77C,KAAKwuf,OAAO15a,WAC/B0sD,EAAYh1H,EAAOxM,KAAKwuf,OAAO15a,WAC/B/+D,EAAS/V,KAAKwuf,OAAOp8Y,OAAOk/a,eAAepf,EAAWn8f,OAAQ,GAC9DC,EAAQhW,KAAKwuf,OAAOp8Y,OAAOk/a,eAAepf,EAAWl8f,MAAO,GAChEhW,KAAK0olB,wBAAwBlnd,EAAWC,EAAUzrH,EAAOD,EAAQ/V,QAOzEo1f,EAAah6f,UAAUiX,QAAU,WACxB5U,EAAkBuC,KAAKymlB,sBACxBzmlB,KAAKymlB,mBAAmBzklB,UAAY,IAEnCvE,EAAkBuC,KAAK0mlB,eACxB1mlB,KAAK0mlB,YAAY1klB,UAAY,IAE5BvE,EAAkBuC,KAAK2mlB,iBACxB3mlB,KAAK2mlB,cAAc3klB,UAAY,IAE9BvE,EAAkBuC,KAAK4mlB,gBACxB5mlB,KAAK4mlB,aAAa5klB,UAAY,IAE7BvE,EAAkBuC,KAAK6mlB,kBACxB7mlB,KAAK6mlB,eAAe7klB,UAAY,IAE/BvE,EAAkBuC,KAAK8mlB,oBACxB9mlB,KAAK8mlB,iBAAiB9klB,UAAY,IAEjCvE,EAAkBuC,KAAK+mlB,mBACxB/mlB,KAAK+mlB,gBAAgB/klB,UAAY,IAEhCvE,EAAkBuC,KAAKgnlB,kBACxBhnlB,KAAKgnlB,eAAehllB,UAAY,IAE/BvE,EAAkBuC,KAAKinlB,mBACxBjnlB,KAAKinlB,gBAAgBjllB,UAAY,IAEhCvE,EAAkBuC,KAAK8nlB,mBACxB9nlB,KAAK8nlB,gBAAgB9llB,UAAY,IAEhCvE,EAAkBuC,KAAK2nlB,sBACxB3nlB,KAAK2nlB,oBAAoBt1kB,UAExB5U,EAAkBuC,KAAKgolB,0BACxBholB,KAAKgolB,uBAAuBhmlB,UAAY,IAE5ChC,KAAKgolB,4BAAyB9slB,EAC9B8E,KAAKymlB,wBAAqBvrlB,EAC1B8E,KAAK0mlB,iBAAcxrlB,EACnB8E,KAAK2mlB,mBAAgBzrlB,EACrB8E,KAAK4mlB,kBAAe1rlB,EACpB8E,KAAK6mlB,oBAAiB3rlB,EACtB8E,KAAK8mlB,sBAAmB5rlB,EACxB8E,KAAK+mlB,qBAAkB7rlB,EACvB8E,KAAKgnlB,oBAAiB9rlB,EACtB8E,KAAKinlB,qBAAkB/rlB,EACvB8E,KAAK8nlB,qBAAkB5slB,EACvB8E,KAAK2nlB,yBAAsBzslB,EAC3B8E,KAAK04hB,iBAAkB,EACvB14hB,KAAKy4hB,uBAAwB,EAC7Bz4hB,KAAK+nlB,8BAA2B7slB,EAEhC8E,KAAK0nlB,sBAAmBxslB,EACxB8E,KAAKwuf,YAAStzf,EACd8E,KAAKwjgB,WAAQtogB,GAEVk6f,KAMPyyF,GAAqC,WA0CrC,OAtCA,WAGQ7nlB,KAAKymlB,mBAAqB,IAAI5xiB,GAAM,EAAG,GAI3C70C,KAAKknlB,kBAAoB,IAAIryiB,GAAM,EAAG,GAItC70C,KAAKmnlB,oBAAsB,IAAItyiB,GAAM,EAAG,GAIxC70C,KAAKonlB,mBAAqB,IAAIvyiB,GAAM,EAAG,GAIvC70C,KAAKqnlB,qBAAuB,IAAIxyiB,GAAM,EAAG,GAIzC70C,KAAKsnlB,uBAAyB,IAAIzyiB,GAAM,EAAG,GAI3C70C,KAAKunlB,sBAAwB,IAAI1yiB,GAAM,EAAG,GAI1C70C,KAAKwnlB,qBAAuB,IAAI3yiB,GAAM,EAAG,GAIzC70C,KAAKynlB,sBAAwB,IAAI5yiB,GAAM,EAAG,OAS9C+ziB,GAAmC,WAMnC,SAASA,EAAkB7ykB,EAAQC,GAC/BhW,KAAKgriB,SAAW,EAChBhriB,KAAKi3iB,QAAU,EACfj3iB,KAAKgriB,SAAWj1hB,EAChB/V,KAAKi3iB,QAAUjhiB,EAoCnB,OAlCA1X,OAAOuJ,eAAe+glB,EAAkBxtlB,UAAW,UAK/CsM,IAAK,WACD,OAAO1H,KAAKgriB,UAKhB3jiB,IAAK,SAAUtK,GACXiD,KAAKgriB,SAAWjuiB,GAEpB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+glB,EAAkBxtlB,UAAW,SAK/CsM,IAAK,WACD,OAAO1H,KAAKi3iB,SAKhB5viB,IAAK,SAAUtK,GACXiD,KAAKi3iB,QAAUl6iB,GAEnB4K,YAAY,EACZC,cAAc,IAEXghlB,KClsCPn4f,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAqBxCu5f,GAA6B,SAAU/4f,GAEvC,SAAS+4f,EAAY9plB,EAAM0qK,GACvB,IAAIlrK,EAAQuxF,EAAOhwF,KAAKtB,KAAMO,IAASP,KAGvC,OAFAD,EAAMuqlB,oBAAqB,EAC3BvqlB,EAAMuqlB,mBAAqBr/a,EACpBlrK,EA0EX,OA/EA0wF,GAAU45f,EAAa/4f,GAOvBhzF,OAAOuJ,eAAewilB,EAAYjvlB,UAAW,aAIzCsM,IAAK,WACD,OAAQjK,EAAkBuC,KAAKuqlB,kBAEnC5ilB,YAAY,EACZC,cAAc,IAOlByilB,EAAYjvlB,UAAUovlB,kBAAoB,SAAUjZ,GAE1CvxkB,KAAK+3hB,cAAcn+B,WAAa55f,KAAK+3hB,cAAcl+B,YACjDp8f,EAAkBuC,KAAKuqlB,mBACvBvqlB,KAAKuqlB,oBAETvqlB,KAAKuqlB,gBAAgB/llB,KAAK+skB,KAOlC8Y,EAAYjvlB,UAAUmplB,OAAS,WAK3B,GAJAvklB,KAAK+3hB,cAAcq7B,mBAAqBpzjB,KACpB,sBAAhBA,KAAKgzD,SACLhzD,KAAKwjgB,MAAM1U,aAAa+uE,2BAA4B,IAEnDpgkB,EAAkBuC,KAAKuqlB,iBACxB,GAAIvqlB,KAAK+3hB,cAAcn+B,UAEnB,IADA,IAAI19f,EAAI8D,KAAKuqlB,gBAAgB/tlB,OACtBN,EAAI,GAAG,CACY8D,KAAKuqlB,gBAAgBrulB,EAAI,GAC/BqolB,SAChBrolB,GAAQ,OAKZ,IADIA,EAAI,EACDA,EAAI8D,KAAKuqlB,gBAAgB/tlB,QAAQ,CACdwD,KAAKuqlB,gBAAgBrulB,GAC3BqolB,SAChBrolB,GAAQ,EAIf8D,KAAKsqlB,mBAINtqlB,KAAK+3hB,cAAc+iD,+BAHnB96kB,KAAK+3hB,cAAcQ,wBAS3B8xD,EAAYjvlB,UAAUiX,QAAU,WAC5B,IAAK5U,EAAkBuC,KAAKuqlB,iBAAkB,CAC1C,KAAOvqlB,KAAKuqlB,gBAAgB/tlB,OAAS,GAAG,CACpC,IAAI+0kB,EAAkBvxkB,KAAKuqlB,gBAAgBvqlB,KAAKuqlB,gBAAgB/tlB,OAAS,GACzE+0kB,EAAgBl/jB,UAChBrS,KAAKuqlB,gBAAgB5hkB,OAAO3oB,KAAKuqlB,gBAAgBhslB,QAAQgzkB,GAAkB,GAE/EvxkB,KAAKuqlB,qBAAkBrvlB,EAE3Bo2F,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAE3BqqlB,GACT3G,IC3FEruF,GAA+B,WAI/B,SAASA,EAAc90f,GAEnBP,KAAKyqlB,eACLzqlB,KAAK0qlB,eACL1qlB,KAAK2qlB,oBAIL3qlB,KAAK45f,WAAY,EAIjB55f,KAAK65f,WAAY,EACjB75f,KAAKwjgB,MAAQjjgB,EACbP,KAAKwuf,OAASjuf,EAAKiuf,OACnBxuf,KAAK4qlB,oBAAsB,IAAIroW,GAC/BviP,KAAK6qlB,YAAc,IACnB7qlB,KAAK8qlB,YAAc,IA8evB,OA5eAxslB,OAAOuJ,eAAewtf,EAAcj6f,UAAW,sBAI3CsM,IAAK,WACD,OAAO1H,KAAK2qlB,kBAAoB3qlB,KAAK2qlB,iBAAiBnulB,OAAS,EAC3DwD,KAAK2qlB,iBAAiB3qlB,KAAK2qlB,iBAAiBnulB,OAAS,QAAKtB,GAElEmM,IAAK,SAAUtK,GACPA,aAAiBstlB,GACjBrqlB,KAAK2qlB,iBAAiBnmlB,KAAKzH,GAG3BiD,KAAK2qlB,iBAAiB9kb,OAG9Bl+J,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewtf,EAAcj6f,UAAW,aAM3CsM,IAAK,WAAc,OAAO1H,KAAKyqlB,aAC/B9ilB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewtf,EAAcj6f,UAAW,aAK3CsM,IAAK,WAAc,OAAO1H,KAAK0qlB,aAC/B/ilB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewtf,EAAcj6f,UAAW,aAI3CsM,IAAK,WACD,OAAOjK,EAAkBuC,KAAK6qlB,aAAe,EAAI7qlB,KAAK6qlB,aAE1DxjlB,IAAK,SAAUtK,GACX,GAAIA,EAAQ,EACR,MAAM,IAAI6D,MAAM,sDAEpBZ,KAAK6qlB,YAAc9tlB,GAEvB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewtf,EAAcj6f,UAAW,aAI3CsM,IAAK,WACD,OAAOjK,EAAkBuC,KAAK8qlB,aAAe,EAAI9qlB,KAAK8qlB,aAE1DzjlB,IAAK,SAAUtK,GACX,GAAIA,EAAQ,EACR,MAAM,IAAI6D,MAAM,sDAEpBZ,KAAK8qlB,YAAc/tlB,GAEvB4K,YAAY,EACZC,cAAc,IAKlBytf,EAAcj6f,UAAU2mC,cAAgB,WACpC,MAAO,iBAMXszd,EAAcj6f,UAAU+nd,QAAU,WAC9B,OAAQ1ld,EAAkBuC,KAAKs3d,YAAct3d,KAAKs3d,UAAU96d,OAAS,GAMzE64f,EAAcj6f,UAAUgod,QAAU,WAC9B,OAAQ3ld,EAAkBuC,KAAKu3d,YAAcv3d,KAAKu3d,UAAU/6d,OAAS,GAUzE64f,EAAcj6f,UAAU4xkB,kBAAoB,SAAUh6gB,GAClDhzD,KAAKkpiB,uBAAyB,IAAIw6C,GAAgB1jlB,KAAKwjgB,OACvDxjgB,KAAKkpiB,uBAAuBl2e,OAASA,EACrChzD,KAAKkpiB,uBAAuBE,mBAQhC/zC,EAAcj6f,UAAU48hB,mBAAqB,SAAU/hd,EAAWjjB,GAC9DhzD,KAAKozjB,mBAAqB,IAAIi3B,GAAYp0gB,EAAUutb,OAAQ/lgB,EAAkBuC,KAAKozjB,qBACnFpzjB,KAAKozjB,mBAAmBpggB,OAASA,EACjChzD,KAAKozjB,mBAAmBhqB,mBAK5B/zC,EAAcj6f,UAAUs+jB,oBAAsB,SAAUv4F,EAAe64D,GACnE,GAA+B,IAA3BA,EAAYy/B,WACZz5jB,KAAKgtkB,kBAAkB,eAClBvvkB,EAAkBuC,KAAKkpiB,yBAExBlpiB,KAAKkpiB,uBAAuBC,mBAAmB3kiB,KAAK,IAAIu+kB,GAAiB5hH,EAAe64D,EAAYyF,qBAAqBpoC,aAAa2iC,EAAY0F,iBAAiBp1B,iBAKvK,GADAtqgB,KAAKgtkB,kBAAkB,gBACnBhtkB,KAAKkpiB,uBAAwB,CAC7BlP,EAAYyF,qBAAuBzF,EAAYyF,qBAAqB14B,cAAc/mgB,KAAKwuf,QACvF,IAAI2uE,EAAmB,IAAIgmB,GAAiBnpD,EAAYyF,qBAAsBz/hB,KAAKwjgB,OACnF25D,EAAiBh8F,cAAgBA,EACjCnhe,KAAKkpiB,uBAAuBC,mBAAmB3kiB,KAAK24jB,KAUhE9nE,EAAcj6f,UAAU+/hB,sBAAwB,SAAUxngB,EAAOqmgB,GAC7D,GAA+B,IAA3BA,EAAYy/B,YACZ,IAAKh8jB,EAAkBuC,KAAKkpiB,wBAAyB,CACjD,IAAI6hD,EAAmB/qlB,KAAKkpiB,uBAAuBC,mBAAmB,GAClE4hD,EAAiB5pH,cAAcn0d,IAAM2mB,EAAM3mB,EAC3ChN,KAAKkpiB,uBAAuBC,mBAAmB3siB,OAAS,GAGxDuulB,EAAiB38K,aAAe0wF,GAAcQ,oBAAoB3re,EAAM3mB,EAAI+9kB,EAAiB5pH,cAAcn0d,GAC3GhN,KAAKsklB,cAActklB,KAAKkpiB,wBACxBlpiB,KAAKkpiB,4BAAyBhuiB,SAKtC,IAAKuC,EAAkBuC,KAAKkpiB,wBAAyB,CACjD,IAAI8hD,EAAoBhrlB,KAAKkpiB,uBAAuBC,mBAAmB,GACnE6hD,EAAkB7pH,cAAcp0d,IAAM4mB,EAAM5mB,EAC5C/M,KAAKkpiB,uBAAuBC,mBAAmB3siB,OAAS,GAGxDwulB,EAAkB58K,aAAe0wF,GAAcQ,oBAAoB3re,EAAM5mB,EAAIi+kB,EAAkB7pH,cAAcp0d,GAC7Gi+kB,EAAkBjlkB,SAAWi0gB,EAAY4/B,uBAAuBjmiB,GAChE3zB,KAAKwjgB,MAAMu0B,cAAcusD,cAActklB,KAAKkpiB,wBAC5ClpiB,KAAKkpiB,4BAAyBhuiB,KAU9Cm6f,EAAcj6f,UAAUkplB,cAAgB,SAAU/S,GAC9C,GAAKvxkB,KAAKwjgB,MAAMszE,kBAGhB,GAAI92kB,KAAK45f,UAAW,CAIhB,GAHIn8f,EAAkBuC,KAAKu3d,aACvBv3d,KAAK0qlB,gBAEL1qlB,KAAKu3d,UAAU/6d,SAAWwD,KAAKirlB,WAAajrlB,KAAKirlB,UAAY,EAAG,CAChE,IAAI/rkB,EAAQlf,KAAKkrlB,UAAY,GAAK,GAAK,EACvClrlB,KAAK0qlB,YAAY/hkB,OAAO,EAAGzJ,GAE3Blf,KAAKu3d,UAAU/6d,OAASwD,KAAKirlB,WAC7BjrlB,KAAKu3d,UAAU/yd,KAAK+skB,OAGvB,CAOD,GANKvxkB,KAAK65f,WACN75f,KAAKmrlB,iBAEL1tlB,EAAkBuC,KAAKs3d,aACvBt3d,KAAKyqlB,gBAELzqlB,KAAKs3d,UAAU96d,SAAWwD,KAAKkrlB,WAAalrlB,KAAKkrlB,UAAY,EAAG,CAC5DhskB,EAAQlf,KAAKkrlB,UAAY,GAAK,GAAK,EACvClrlB,KAAKyqlB,YAAY9hkB,OAAO,EAAGzJ,GAE3Blf,KAAKs3d,UAAU96d,OAASwD,KAAKkrlB,WAC7BlrlB,KAAKyqlB,YAAYjmlB,KAAK+skB,KAQlCl8E,EAAcj6f,UAAUiuiB,cAAgB,WAChCrpiB,KAAKwuf,OAAOgV,MAAMszE,oBAAsBr5kB,EAAkBuC,KAAKkpiB,2BAE1DzriB,EAAkBuC,KAAKkpiB,yBACrBzriB,EAAkBuC,KAAKkpiB,uBAAuBnJ,eACjD//hB,KAAKkpiB,uBAAuBnJ,YAAc//hB,KAAKkpiB,uBAAuBy2B,gBAErElikB,EAAkBuC,KAAKozjB,oBAIxBpzjB,KAAKsklB,cAActklB,KAAKkpiB,wBAHxBlpiB,KAAKozjB,mBAAmBo3B,kBAAkBxqlB,KAAKkpiB,wBAKnDlpiB,KAAKkpiB,4BAAyBhuiB,IAMtCm6f,EAAcj6f,UAAU+vkB,wBAA0B,WAC9C,IAAIA,GAA0B,EAW9B,OAVMnrkB,KAAK45f,WAAa55f,KAAK65f,YACzBsxE,EAA0BnrkB,KAAKwjgB,MAAM1U,aAAampF,gCAElDj4kB,KAAKwuf,OAAOgV,MAAMszE,oBAAsBr5kB,EAAkBuC,KAAKozjB,qBAC/DpzjB,KAAKqpiB,gBACL8hC,GAA0B,GAErBnrkB,KAAKwjgB,MAAM1U,aAAa0uE,mBAC7B2N,GAA0B,GAEvBA,GAMX91E,EAAcj6f,UAAUm9hB,qBAAuB,WAC3C,IAAItid,EAAYj2E,KAAKwuf,OAAOv4a,UAC5B,GAAIj2E,KAAKozjB,mBAAmBg4B,UAAW,CACnC,GAAuC,wBAAnCprlB,KAAKozjB,mBAAmBpggB,OAAkC,CAC1D,IAAIsyP,EAAgB,IAAI4oP,GAAaj4d,EAAUutb,OAC/CxjgB,KAAKwjgB,MAAM1U,aAAaigD,2BAA2BzpP,EAAetlT,KAAKozjB,mBAAmBuM,gBAEtF1pf,EAAUutb,MAAMu0B,cAAcn+B,WAC9B55f,KAAKwjgB,MAAM1U,aAAaigD,2BAA2B94d,EAAU14E,MAAOyC,KAAKozjB,mBAAmBttiB,gBAC5F9lB,KAAKwjgB,MAAM1U,aAAaigD,2BAA2B94d,EAAUh3D,IAAKjf,KAAKozjB,mBAAmBptiB,gBAG1FhmB,KAAKwjgB,MAAM1U,aAAaigD,2BAA2B94d,EAAU14E,MAAOyC,KAAKozjB,mBAAmBrzB,aAC5F//hB,KAAKwjgB,MAAM1U,aAAaigD,2BAA2B94d,EAAUh3D,IAAKjf,KAAKozjB,mBAAmBrzB,cAGlG,GAAuC,oBAAnC//hB,KAAKozjB,mBAAmBpggB,OAA8B,CAClDsyP,EAAgB,IAAI4oP,GAAaj4d,EAAUutb,OAC/CxjgB,KAAKwjgB,MAAM1U,aAAaigD,2BAA2BzpP,EAAetlT,KAAKozjB,mBAAmBuM,gBAC1F,IAAI5/B,EAAc,IAAImO,GAAaj4d,EAAUutb,OAC7CxjgB,KAAKwjgB,MAAM1U,aAAaigD,2BAA2BhP,EAAa//hB,KAAKozjB,mBAAmBrzB,aACxF//hB,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkB7mO,EAAc2xM,UAAW,EAAG,GAC7D8oC,EAAY9oC,YAAc3xM,EAAc2xM,WACxCj3f,KAAKwuf,OAAOlhc,OAAO6+d,kBAAkB4T,EAAY9oC,UAAW,EAAG,GAGhC,eAAnCj3f,KAAKozjB,mBAAmBpggB,OACxBhzD,KAAKwjgB,MAAM1U,aAAak6C,sBAEnB/yd,EAAUutb,MAAMliB,oBACrBthf,KAAKwuf,OAAOlhc,OAAOyge,qBACf/thB,KAAKwjgB,MAAMmf,uBACX3ihB,KAAKwjgB,MAAM1U,aAAao8E,2BAE5BlrkB,KAAKwuf,OAAOy/B,oBAGpBh4c,EAAUutb,MAAMliB,mBAAoB,EACpCrra,EAAUutb,MAAMjiB,iBAAkB,EAElCtra,EAAU14E,MAAMsxiB,wBAAuB,GACnC54d,EAAU2hK,QACV3hK,EAAUh3D,IAAI6vhB,oBAAoB74d,EAAU14E,OAG5C04E,EAAUh3D,IAAI4vhB,wBAAuB,GAEzC54d,EAAUk/d,sBAAwBl/d,EAAUh3D,IAAI2b,SAAS7tB,EACzD/M,KAAKwuf,OAAOI,mBACZ34a,EAAU+le,sBAAqB,GAC/Bh8iB,KAAKwuf,OAAOj/X,cACZvvH,KAAK86kB,+BACL96kB,KAAKwjgB,MAAM1U,aAAayC,qBAK5B8D,EAAcj6f,UAAU0/kB,6BAA+B,WACnD,IAAKr9kB,EAAkBuC,KAAKozjB,oBAAqB,CAK7C,GAHI31jB,EAAkBuC,KAAKozjB,mBAAmBrzB,eAC1C//hB,KAAKozjB,mBAAmBrzB,YAAc//hB,KAAKozjB,mBAAmBuM,gBAE9D3/jB,KAAK2qlB,iBAAiBnulB,OAAS,EAAG,CAChBwD,KAAK2qlB,iBAAiB3qlB,KAAK2qlB,iBAAiBnulB,OAAS,GAC3DgulB,kBAAkBxqlB,KAAKozjB,yBAGnCpzjB,KAAKsklB,cAActklB,KAAKozjB,oBAE5BpzjB,KAAKozjB,wBAAqBl4jB,IAWlCm6f,EAAcj6f,UAAUytiB,2BAA6B,SAAUP,EAAqBt/b,GAChFhpG,KAAKkpiB,uBAAyB,IAAIw6C,GAAgB1jlB,KAAKwuf,OAAOgV,OAC9DxjgB,KAAKkpiB,uBAAuBl2e,OAAS,OACrChzD,KAAKkpiB,uBAAuBE,kBAE5B,IAAK,IADD/+f,EAAa,IAAIk4M,GACZrmP,EAAI,EAAGA,EAAIosiB,EAAoB3id,OAAOnpF,OAAQN,IAAK,CACxD,IAAIypF,EAAS3lF,KAAKwuf,OAAO20B,oBAAoBn6a,EAAKuxZ,gBAAgB50a,OAAOzpF,GAErE+plB,GADQjmlB,KAAKkpiB,uBAAuB68C,6BAA6BpggB,GACjD,IAAI28f,GAAc38f,EAAQ2id,EAAoB3id,OAAOzpF,KACpEuB,EAAkBkoF,IACnB3lF,KAAKwuf,OAAOgV,MAAM1U,aAAaooF,cAAcvxf,EAAQ2id,EAAoB3id,OAAOzpF,IAEpFmuC,EAAWjmC,IAAIlI,EAAG+plB,GAEtB,OAAO57iB,GAQXgrd,EAAcj6f,UAAU2tiB,iBAAmB,SAAU9yd,EAAWo1gB,GACxD5tlB,EAAkBuC,KAAK4qlB,uBACvB5qlB,KAAK4qlB,oBAAsB,IAAIroW,IAGnC,IAAK,IADDl4M,KACKnuC,EAAI,EAAGA,EAAI8D,KAAKwuf,OAAO2oF,eAAe36kB,OAAQN,IAAK,CACxD,IACIqlhB,EADYvhhB,KAAKwuf,OAAO2oF,eAAej7kB,GAChB+1f,gBACvBu6E,EAAcxskB,KAAKwuf,OAAOoxB,YAAY2B,EAAWvpB,WAAWqC,QAC5DoC,EAAYz8f,KAAKwuf,OAAOlhc,OAAOotc,aAAa8xE,EAAajrD,EAAWvpB,WAAWkD,iBAEnF,GAAImwF,EAAuBhoW,YAAYk+R,EAAWvpB,WAAWkD,kBACtDmwF,EAAuB3jlB,IAAI65gB,EAAWvpB,WAAWkD,iBAAiBunF,iBAAmBhmF,EAAW,CACnG,IAAI8yE,EAAiB,IAAIp4E,GAAiB,MAC1Co4E,EAAenyE,WAAamkB,EAAWnkB,WACvCmyE,EAAe3gU,gBAAkB2yQ,EAAW3yQ,gBAC5C,IAAIkf,EAAW,IAAI60T,GAAwBphE,EAAYguD,GACvDlliB,EAAW7lC,KAAKspR,GAChB9tR,KAAKwjgB,MAAM1U,aAAa0hF,iCAAiCjvD,EAAY9kB,EAAUxK,kBAGvFjyf,KAAK4qlB,oBAAoBxmlB,IAAIpE,KAAKkpiB,uBAAwB7+f,IAQ9Dgrd,EAAcj6f,UAAU8qlB,kBAAoB,SAAUoF,GAClDtrlB,KAAKwuf,OAAOgV,MAAMjiB,iBAAkB,EACpCvhf,KAAKwjgB,MAAM1U,aAAag6C,uBACxB,IAAK,IAAI5siB,EAAI,EAAGA,EAAIovlB,EAAmBhulB,KAAKd,OAAQN,IAAK,CACrD,IAAIg+f,EAAcoxF,EAAmBhulB,KAAK,GACtC2olB,EAAgBqF,EAAmB5jlB,IAAIwyf,GACtCz8f,EAAkBuC,KAAKkpiB,0BAExB+8C,EAAgBjmlB,KAAKkpiB,uBAAuB68C,6BAA6BE,EAAcxD,iBAE3FzilB,KAAKwjgB,MAAM1U,aAAaooF,cAAc+O,EAAcxD,eAAgBwD,EAAcvD,mBAEtF1ilB,KAAKurlB,oBACLvrlB,KAAKwuf,OAAOgV,MAAMjiB,iBAAkB,EACpCvhf,KAAKwuf,OAAO00B,cAAcz2d,QAC1BzsD,KAAKwuf,OAAOzmQ,SACZ/nP,KAAKwuf,OAAOlhc,OAAOA,SACnB,IAAI2oB,EAAYj2E,KAAKwuf,OAAOv4a,UAC5BA,EAAU14E,MAAMsxiB,wBAAuB,GACnC54d,EAAU2hK,QACV3hK,EAAUh3D,IAAI6vhB,oBAAoB74d,EAAU14E,OAG5C04E,EAAUh3D,IAAI4vhB,wBAAuB,GAEzC54d,EAAUk/d,sBAAwBl/d,EAAUh3D,IAAI2b,SAAS7tB,EACzDkpE,EAAU+le,sBAAqB,GAC/Bh8iB,KAAKqpiB,iBAMTh0C,EAAcj6f,UAAUmwlB,kBAAoB,WAExC,IAAK9tlB,EAAkBuC,KAAKkpiB,yBACrBlpiB,KAAKwuf,OAAOgV,MAAMu0B,cAAc6yD,oBAAoBvnW,YAAYrjP,KAAKkpiB,wBAGxE,IAAK,IADD7+f,EAAarqC,KAAK4qlB,oBAAoBljlB,IAAI1H,KAAKkpiB,wBAC1ChtiB,EAAI,EAAGA,EAAImuC,EAAW7tC,OAAQN,IAAK,CACxC,IAAI4xR,EAAW,IAAIqpO,GAAiB,MACpCrpO,EAASsvO,WAAa/yd,EAAWnuC,GAAG0mlB,YAAYxlF,WAChDtvO,EAASlf,gBAAkBvkO,EAAWnuC,GAAG0mlB,YAAYh0U,gBACrDvkO,EAAWnuC,GAAG0mlB,YAAYjpF,WAAWtvd,EAAWnuC,GAAGqzkB,gBACnDlliB,EAAWnuC,GAAGqzkB,eAAenyE,WAAatvO,EAASsvO,WACnD/yd,EAAWnuC,GAAGqzkB,eAAe3gU,gBAAkBkf,EAASlf,kBAOpEymP,EAAcj6f,UAAUkzc,KAAO,WAC3B,IAAItuc,KAAKwjgB,MAAMtR,gBAAmBlyf,KAAKmjd,WAAcnjd,KAAKwjgB,MAAMszE,kBAAhE,CAIA,IAAI0B,EAAcx4kB,KAAKs3d,UAAUzxT,MACjC7lK,KAAK45f,WAAY,EACjB4+E,EAAY+L,SACZvklB,KAAK45f,WAAY,EACjB55f,KAAKwjgB,MAAMvtb,UAAU6kd,2BACrB96hB,KAAKwjgB,MAAM1U,aAAa+uE,2BAA4B,IAKxDxoE,EAAcj6f,UAAUmzc,KAAO,WAC3B,IAAIvuc,KAAKwjgB,MAAMtR,gBAAmBlyf,KAAKojd,WAAcpjd,KAAKwjgB,MAAMszE,kBAAhE,CAIA,IAAI0B,EAAcx4kB,KAAKu3d,UAAU1xT,MACN,sBAAvB2ya,EAAYxlhB,SACZhzD,KAAKwjgB,MAAM1U,aAAa+uE,2BAA4B,GAExD79jB,KAAK65f,WAAY,EACjB2+E,EAAY+L,SACZvklB,KAAK65f,WAAY,EACjB75f,KAAKwjgB,MAAMvtb,UAAU6kd,2BACrB96hB,KAAKwjgB,MAAM1U,aAAa+uE,2BAA4B,IAKxDxoE,EAAcj6f,UAAUiX,QAAU,WAC9BrS,KAAKwrlB,eACLxrlB,KAAKyqlB,iBAAcvvlB,EACnB8E,KAAK0qlB,iBAAcxvlB,GAEvBm6f,EAAcj6f,UAAUowlB,aAAe,WACnCxrlB,KAAKyrlB,iBACLzrlB,KAAKmrlB,kBAET91F,EAAcj6f,UAAUqwlB,eAAiB,WACrC,GAAIzrlB,KAAKmjd,UACL,KAAOnjd,KAAKs3d,UAAU96d,OAAS,GAAG,CAC9B,IAAIg8kB,EAAcx4kB,KAAKs3d,UAAUzxT,MACjC2ya,EAAYnmkB,UACZmmkB,OAAct9kB,IAI1Bm6f,EAAcj6f,UAAU+vlB,eAAiB,WACrC,GAAInrlB,KAAKojd,UACL,KAAOpjd,KAAKu3d,UAAU/6d,OAAS,GAAG,CAC9B,IAAIg8kB,EAAcx4kB,KAAKu3d,UAAU1xT,MACjC2ya,EAAYnmkB,UACZmmkB,OAAct9kB,IAInBm6f,KCvgBPJ,GAA4B,WAC5B,SAASA,IAELj1f,KAAK0rlB,aAAe,oBACpB1rlB,KAAK2rlB,UAAY,kBACjB3rlB,KAAK4rlB,cAAgB,qBACrB5rlB,KAAK6rlB,aAAe,oBACpB7rlB,KAAK8rlB,WAAa,cAClB9rlB,KAAK+rlB,WAAa,cAElB/rlB,KAAKgslB,UAAY,mBAGjBhslB,KAAKislB,QAAU,mBACfjslB,KAAKkslB,SAAW,oBAGhBlslB,KAAKmslB,iBAAmB,sBAexBnslB,KAAKoslB,oBAAsB,cAC3BpslB,KAAKqslB,iBAAmB,+BAMxBrslB,KAAKsslB,mBAAqB,oBAC1BtslB,KAAKuslB,mBAAqB,oBAI1BvslB,KAAKwslB,eAAiB,kBACtBxslB,KAAKyslB,gBAAkB,+DACvBzslB,KAAK0slB,oBAAsB,mFAG3B1slB,KAAK2slB,oBAAsB,8EAG3B3slB,KAAK4slB,kBAAoB,4EAGzB5slB,KAAK6slB,kBAAoB,4EACzB7slB,KAAK8slB,qBAAuB,+EAC5B9slB,KAAK+slB,kBAAoB,4EACzB/slB,KAAKgtlB,uBAAyB,iFAC9BhtlB,KAAKitlB,eAAiB,wEACtBjtlB,KAAKktlB,gBAAkB,6DACvBltlB,KAAKmtlB,kBAAoB,sEACzBntlB,KAAKotlB,qBAAuB,wEAC5BptlB,KAAKqtlB,oBAAsB,2DAU3BrtlB,KAAKstlB,sBAAwB,+EAW7BttlB,KAAKutlB,gBAAkB,+EAGvBvtlB,KAAKwtlB,cAAgB,6EAErBxtlB,KAAKytlB,cAAgB,6EACrBztlB,KAAK0tlB,gBAAkB,qFACvB1tlB,KAAK2tlB,iBAAmB,gFACxB3tlB,KAAK4tlB,cAAgB,6EAIrB5tlB,KAAK6tlB,YAAc,2EACnB7tlB,KAAK8tlB,kBAAoB,kFACzB9tlB,KAAK+tlB,YAAc,wFACnB/tlB,KAAKgulB,WAAa,0FAClBhulB,KAAKiulB,cAAgB,wFACrBjulB,KAAKkulB,aAAe,4EACpBlulB,KAAKmulB,iBAAmB,gFACxBnulB,KAAKoulB,eAAiB,8EACtBpulB,KAAKqulB,eAAiB,8EAGtBrulB,KAAKsulB,iBAAmB,gFACxBtulB,KAAKuulB,gBAAkB,0EACvBvulB,KAAKwulB,wBAA0B,uFAO/BxulB,KAAKyulB,WAAa,+DAClBzulB,KAAK0ulB,YAAc,yEACnB1ulB,KAAK2ulB,iBAAmB,2DACxB3ulB,KAAK4ulB,WAAa,wDAClB5ulB,KAAK6ulB,aAAe,wDAEpB7ulB,KAAK8ulB,WAAa,sEAClB9ulB,KAAK+ulB,YAAc,+DACnB/ulB,KAAKgvlB,WAAa,gCAClBhvlB,KAAKivlB,WAAa,0CAClBjvlB,KAAKkvlB,aAAe,uCACpBlvlB,KAAKmvlB,aAAe,wCACpBnvlB,KAAKovlB,YAAc,0EACnBpvlB,KAAKqvlB,YAAc,mCAGnBrvlB,KAAKsvlB,kBAAoB,4EACzBtvlB,KAAKuvlB,YAAc,8DACnBvvlB,KAAKwvlB,WAAa,6DAClBxvlB,KAAKyvlB,aAAe,uDAEpBzvlB,KAAK0vlB,qBAAuB,0EAC5B1vlB,KAAK2vlB,YAAc,uEACnB3vlB,KAAK4vlB,eAAiB,yDACtB5vlB,KAAK6vlB,YAAc,4DAGnB7vlB,KAAK8vlB,YAAc,4CACnB9vlB,KAAK+vlB,aAAe,uDAEpB/vlB,KAAKgwlB,aAAe,uDACpBhwlB,KAAKiwlB,kBAAoB,qEACzBjwlB,KAAKkwlB,mBAAqB,sEAC1BlwlB,KAAKmwlB,iBAAmB,oEACxBnwlB,KAAKowlB,eAAiB,kEACtBpwlB,KAAKqwlB,iBAAmB,oEAExBrwlB,KAAKswlB,aAAe,uDACpBtwlB,KAAKuwlB,iBAAmB,2DAExBvwlB,KAAKwwlB,WAAa,sDAClBxwlB,KAAKywlB,WAAa,iEAClBzwlB,KAAK0wlB,cAAgB,oEAErB1wlB,KAAK2wlB,kBAAoB,gBACzB3wlB,KAAK4wlB,iBAAmB,eACxB5wlB,KAAK6wlB,OAAS,KACd7wlB,KAAK8wlB,SAAW,OAChB9wlB,KAAK+wlB,WAAa,SAClB/wlB,KAAKgxlB,eAAiB,aACtBhxlB,KAAKixlB,cAAgB,eACrBjxlB,KAAKkxlB,gBAAkB,GACvBlxlB,KAAKmxlB,iBAAmB,GACxBnxlB,KAAKoxlB,iBAAmB,EACxBpxlB,KAAKqxlB,iBAAmB,GACxBrxlB,KAAKsxlB,aAAe,MAMpBtxlB,KAAKuxlB,0BAA4B,aACjCvxlB,KAAKwxlB,gBAAkB,QACvBxxlB,KAAKyxlB,cAAgB,OACrBzxlB,KAAK0xlB,eAAiB,OACtB1xlB,KAAK2xlB,oBAAsB,MAC3B3xlB,KAAK4xlB,oBAAsB,MAC3B5xlB,KAAK6xlB,YAAc,sDACnB7xlB,KAAK8xlB,aAAe,eACpB9xlB,KAAK+xlB,qBAAuB,gCAC5B/xlB,KAAKgylB,gBAAkB,wBACvBhylB,KAAKiylB,mBAAqB,qBAC1BjylB,KAAKkylB,gBAAkB,mBACvBlylB,KAAKmylB,oBAAsB,sBAC3BnylB,KAAKoylB,mBAAqB,qBAC1BpylB,KAAKqylB,iBAAmB,eACxBrylB,KAAKsylB,iBAAmB,eACxBtylB,KAAKuylB,mBAAqB,qBAC1BvylB,KAAKwylB,gBAAkB,oBACvBxylB,KAAKyylB,oBAAsB,sBAC3BzylB,KAAK0ylB,mBAAqB,qBAC1B1ylB,KAAK2ylB,cAAgB,oBACrB3ylB,KAAK4ylB,eAAiB,qBACtB5ylB,KAAK6ylB,iBAAmB,uBACxB7ylB,KAAK8ylB,oBAAsB,sBAC3B9ylB,KAAK+ylB,iBAAmB,gBACxB/ylB,KAAKgzlB,2BAA6B,oBAClChzlB,KAAKizlB,oBAAsB,oBAC3BjzlB,KAAKkzlB,kBAAoB,kBACzBlzlB,KAAKmzlB,gBAAkB,yBACvBnzlB,KAAKozlB,gBAAkB,eACvBpzlB,KAAKqzlB,kBAAoB,kBACzBrzlB,KAAKszlB,kBAAoB,iBACzBtzlB,KAAKuzlB,iBAAmB,kBACxBvzlB,KAAKwzlB,cAAgB,eACrBxzlB,KAAKyzlB,qBAAuB,uBAC5BzzlB,KAAK0zlB,kBAAoB,oBAEzB1zlB,KAAK2zlB,sBAAwB,wBAC7B3zlB,KAAK4zlB,0BAA4B,4BAEjC5zlB,KAAK6zlB,sBAAwB,iCAC7B7zlB,KAAK8zlB,qBAAuB,gCAC5B9zlB,KAAK+zlB,sBAAwB,gCAC7B/zlB,KAAKg0lB,uBAAyB,iCAC9Bh0lB,KAAKi0lB,uBAAyB,iCAC9Bj0lB,KAAKk0lB,4BAA8B,qFACnCl0lB,KAAKm0lB,qBAAuB,8EAC5Bn0lB,KAAKo0lB,yBAA2B,yDAChCp0lB,KAAKq0lB,aAAc,EACnBr0lB,KAAKs0lB,gBAAkB,EACvBt0lB,KAAKu0lB,SAAW,EAChBv0lB,KAAKw0lB,qBAAsB,EAC3Bx0lB,KAAKy0lB,gBAAav5lB,EAu0FtB,OAp0FA+5f,EAAW75f,UAAU2mC,cAAgB,WACjC,MAAO,cAEXzjC,OAAOuJ,eAAeotf,EAAW75f,UAAW,aAExCsM,IAAK,WAID,OAHIjK,EAAkBuC,KAAKy0lB,cACvBz0lB,KAAKy0lB,eAEFz0lB,KAAKy0lB,YAEhB9slB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeotf,EAAW75f,UAAW,kBAExCsM,IAAK,WAID,YAH6BxM,IAAzB8E,KAAK00lB,kBACL10lB,KAAK00lB,gBAAkB,IAAInyW,IAExBviP,KAAK00lB,iBAEhB/slB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeotf,EAAW75f,UAAW,kBAExCsM,IAAK,WAID,YAHiCxM,IAA7B8E,KAAK20lB,sBACL30lB,KAAK20lB,oBAAsB,IAAIpyW,IAE5BviP,KAAK20lB,qBAEhBhtlB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeotf,EAAW75f,UAAW,sBAExCsM,IAAK,WAID,YAHiCxM,IAA7B8E,KAAK40lB,sBACL50lB,KAAK40lB,oBAAsB,IAAIryW,IAE5BviP,KAAK40lB,qBAEhBjtlB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeotf,EAAW75f,UAAW,kBAExCsM,IAAK,WAID,YAH+BxM,IAA3B8E,KAAK60lB,oBACL70lB,KAAK60lB,kBAAoB,IAAItyW,IAE1BviP,KAAK60lB,mBAEhBltlB,YAAY,EACZC,cAAc,IAKlBqtf,EAAW75f,UAAUy4F,KAAO,SAAU26Z,EAAQ3+P,GAC1C7vP,KAAK+rD,UAAUyic,GACfxuf,KAAK80lB,SAASjhgB,KAAKg8J,EAAW,SAAS39C,KAAK,SAAU4iZ,GAClDA,EAASzilB,YAEbrS,KAAKiC,SAKTgzf,EAAW75f,UAAUwmQ,WAAa,SAAU4sP,GACxC,IAAIzuf,EAAQC,KAEZ,OADAA,KAAK+rD,UAAUyic,GACR,IAAI1la,QAAQ,SAAUC,EAASC,GAClCjpF,EAAM+0lB,SAASlzV,aAAa1vD,KAAK,SAAUx9C,GACvC30J,EAAM+0lB,SAASzilB,UACfqiJ,EAAO,IAAIu7F,MAAMv7F,IAAShuJ,KAAM,4EAChCqiF,EAAQ2rE,QAOpBugW,EAAW75f,UAAUiX,QAAU,WAC3BrS,KAAK+0lB,gBACL/0lB,KAAKs0lB,qBAAkBp5lB,EACvB8E,KAAKu0lB,cAAWr5lB,EAChB8E,KAAKw0lB,yBAAsBt5lB,EACvB8E,KAAK80lB,WACL90lB,KAAK80lB,SAASzilB,UACdrS,KAAK80lB,cAAW55lB,IAIxB+5f,EAAW75f,UAAU2wD,UAAY,SAAUyic,GAEvC,IAAIhuf,EAAWguf,EAAOgV,MAAM9M,iBAAiB30f,QAC7C/B,KAAKg1lB,YAAYx0lB,GACjBR,KAAK80lB,SAAW,IAAIvzV,GACpBvhQ,KAAK80lB,SAASG,iBAAmB,SACjCj1lB,KAAKk1lB,eAAiB,IAAI3yW,GAC1BviP,KAAKm1lB,WAAa,IAAI5yW,GAGtBviP,KAAKo1lB,oBAELp1lB,KAAKq1lB,kBAELr1lB,KAAKs1lB,sBAOLt1lB,KAAKu1lB,oBAELv1lB,KAAKw1lB,0BAELx1lB,KAAKy1lB,yBAELz1lB,KAAK01lB,wBAnBDC,GAyBJ31lB,KAAK41lB,4BAKL51lB,KAAK61lB,yBAEL71lB,KAAK81lB,6BAUL91lB,KAAK+1lB,4BAEL/1lB,KAAKg2lB,2BA5CDL,GA8CJ31lB,KAAK+0lB,iBAGT9/F,EAAW75f,UAAU45lB,YAAc,SAAUx0lB,GACzCR,KAAKQ,SAAWA,EAChBR,KAAKi2lB,UAAYz1lB,EAASw2Q,SAC1Bh3Q,KAAKk2lB,OAAS11lB,EAASo0S,MACvB50S,KAAKm2lB,eAAiB31lB,EAASg0f,cAC/Bx0f,KAAKo2lB,mBAAqB51lB,EAAS6xf,gBACnCryf,KAAKq2lB,mBAAqB71lB,EAASyxf,gBACnCjyf,KAAKs2lB,qBAAuB91lB,EAASyjhB,gBACrCjkhB,KAAKu2lB,QAAU/1lB,EAAS+C,QAG5B0xf,EAAW75f,UAAU25lB,cAAgB,WAEjC/0lB,KAAKgrS,aAAU9vS,EACf8E,KAAKq0lB,iBAAcn5lB,EACnB8E,KAAKw2lB,gBAAat7lB,EAClB8E,KAAKi3f,eAAY/7f,EACjB8E,KAAKolE,WAAQlqE,EACb8E,KAAK0lE,SAAMxqE,EACX8E,KAAKiogB,kBAAe/sgB,EACpB8E,KAAKQ,cAAWtF,EAChB8E,KAAKi2lB,eAAY/6lB,EACjB8E,KAAKk2lB,YAASh7lB,EACd8E,KAAKm2lB,oBAAiBj7lB,EACtB8E,KAAKo2lB,wBAAqBl7lB,EAC1B8E,KAAKq2lB,wBAAqBn7lB,EAC1B8E,KAAKs2lB,0BAAuBp7lB,EAC5B8E,KAAKs0lB,gBAAkB,EACvBt0lB,KAAKu0lB,SAAW,EAChBv0lB,KAAKw0lB,qBAAsB,EACvBx0lB,KAAK60lB,oBACL70lB,KAAK60lB,kBAAkBxilB,UACvBrS,KAAK60lB,uBAAoB35lB,GAEzB8E,KAAKk1lB,iBACLl1lB,KAAKk1lB,eAAe7ilB,UACpBrS,KAAKk1lB,oBAAiBh6lB,GAEtB8E,KAAKm1lB,aACLn1lB,KAAKm1lB,WAAW9ilB,UAChBrS,KAAKm1lB,gBAAaj6lB,GAElB8E,KAAK00lB,kBACL10lB,KAAK00lB,gBAAgBrilB,UACrBrS,KAAK00lB,qBAAkBx5lB,GAEvB8E,KAAK20lB,sBACL30lB,KAAK20lB,oBAAoBtilB,UACzBrS,KAAK20lB,yBAAsBz5lB,GAE3B8E,KAAK40lB,sBACL50lB,KAAK40lB,oBAAoBvilB,UACzBrS,KAAK40lB,yBAAsB15lB,IAInC+5f,EAAW75f,UAAUg6lB,kBAAoB,WACrC,IAAItxW,EAAS,IAAIiN,GACjBjN,EAAOoO,kBAAkB,IAAK,WAAYlyP,KAAKyulB,YAC/CzulB,KAAKy2lB,4BAA4B3yW,GACjC9jP,KAAK02lB,sBAAsB5yW,GAC3BA,EAAOmO,kBACP,IAAI0kW,EAAc,IAAIn1V,GAAe1d,EAAOgM,OAAQ9vP,KAAK0rlB,cACzD1rlB,KAAK80lB,SAASjyY,QAAQ8zY,IAE1B1hG,EAAW75f,UAAUq7lB,4BAA8B,SAAU3yW,GACzDA,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKiwlB,mBAC5DjwlB,KAAK42lB,YAAY9yW,GACjBA,EAAO+O,qBAAqB,QAAS,YAAQ33P,EAAW8E,KAAKkwlB,oBAC7DpsW,EAAO+O,qBAAqB,QAAS,UAAM33P,EAAW8E,KAAK0ulB,aAC3D5qW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKmvlB,cAC5DrrW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAKyulB,YAC1DzulB,KAAK62lB,SAAS/yW,GACdA,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKyvlB,cAC5D3rW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKqwlB,kBAC5DvsW,EAAO+O,qBAAqB,KAAM,iBAAa33P,EAAW,iBAE9D+5f,EAAW75f,UAAUy7lB,SAAW,SAAU/yW,GACtCA,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKgwlB,cAC5DlsW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKswlB,cAC5DxsW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKmwlB,kBAC5DrsW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKowlB,iBAEhEn7F,EAAW75f,UAAUw7lB,YAAc,SAAU9yW,GACzCA,EAAO+O,qBAAqB,QAAS,UAAM33P,EAAW8E,KAAKuvlB,aAC3DzrW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAKivlB,YAC1DnrW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAK8ulB,YAC1DhrW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAKwvlB,YAC1D1rW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAKgvlB,aAG9D/5F,EAAW75f,UAAUs7lB,sBAAwB,SAAU5yW,GACnDA,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YAEjD,IAAK,IADDvvkB,EAAQlf,KAAKQ,SAASw2Q,SAASx6Q,OAC1BN,EAAI,EAAGA,EAAIgjB,EAAOhjB,IACvB8D,KAAKgrS,QAAUhrS,KAAKQ,SAASw2Q,SAAS96Q,GACtC8D,KAAKq0lB,YAAcn4lB,IAAMgjB,EAAQ,EACjClf,KAAK8riB,iBAAiBhoT,EAAQ9jP,KAAKgrS,QAAS9uS,IAAMgjB,EAAQ,GAC1Dlf,KAAKgrS,aAAU9vS,EAEnB4oP,EAAOmO,mBAGXgjQ,EAAW75f,UAAU0wiB,iBAAmB,SAAUhoT,EAAQknD,EAASj4Q,GAC/D/yB,KAAKw2lB,WAAaxrT,EAClBhrS,KAAK82lB,mBAAmBhzW,EAAQknD,EAAQmB,OAAQp5Q,GAC5CA,GACA/yB,KAAK+2lB,2BAA2BjzW,EAAQknD,GAE5ChrS,KAAKw2lB,gBAAat7lB,GAGtB+5f,EAAW75f,UAAU27lB,2BAA6B,SAAUjzW,EAAQknD,GAChElnD,EAAOoO,kBAAkB,IAAK,SAAUlyP,KAAKyulB,YACzCzjT,EAAQ6sN,gBACR73f,KAAKg3lB,qBAAqBlzW,EAAQknD,EAAQ6sN,gBAM9C73f,KAAKi3lB,qBAAqBnzW,EAAQ,YAClC9jP,KAAKk3lB,mBAAmBpzW,EAAQknD,EAAQ+rN,eACxC/2f,KAAKm3lB,iBAAiBrzW,EAAQknD,QAoBA9vS,IAA1B8vS,EAAQ+rN,eAA+B/rN,EAAQ+rN,cAAc86B,qBAC7D/tS,EAAOoO,uBAAkBh3P,EAAW,UAAW8E,KAAKyulB,YACpD3qW,EAAOmO,mBAUXnO,EAAOmO,mBAGXgjQ,EAAW75f,UAAU+7lB,iBAAmB,SAAUrzW,EAAQknD,GACtDlnD,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YACjD3qW,EAAO+O,0BAAqB33P,EAAW,aAAc8E,KAAKyulB,WAAY,KACtE3qW,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,WAAY,KACjE3qW,EAAOmO,mBAgCXgjQ,EAAW75f,UAAU87lB,mBAAqB,SAAUpzW,EAAQszW,QACtCl8lB,IAAdk8lB,IACAp3lB,KAAKq3lB,kBAAkBvzW,EAAQszW,GAC/Bp3lB,KAAKs3lB,qBAAqBxzW,EAAQszW,IAatCtzW,EAAOoO,uBAAkBh3P,EAAW,YAAa8E,KAAKyulB,YActD3qW,EAAOmO,mBAKXgjQ,EAAW75f,UAAUi8lB,kBAAoB,SAAUvzW,EAAQszW,GACvDtzW,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YAEjD3qW,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBH,EAAUh6I,UAAYp9c,KAAKmxlB,kBAAkBjklB,YAEjI42O,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBH,EAAU5mV,WAAaxwQ,KAAKmxlB,kBAAkBjklB,YAKlI42O,EAAOmO,mBAGXgjQ,EAAW75f,UAAUk8lB,qBAAuB,SAAUxzW,EAAQszW,GAC1DtzW,EAAOoO,uBAAkBh3P,EAAW,QAAS8E,KAAKyulB,YAClD,IAAIn5O,EAAcjpW,KAAK0zB,MAAMq3jB,EAAUj7U,UAAYn8Q,KAAKmxlB,kBACxDrtW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAYn5O,EAAYpoW,YAC3EooW,EAAcjpW,KAAK0zB,MAAMq3jB,EAAUh7U,YAAcp8Q,KAAKmxlB,kBACtDrtW,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,WAAYn5O,EAAYpoW,YAC7EooW,EAAcjpW,KAAK0zB,MAAMq3jB,EAAU/6U,aAAer8Q,KAAKmxlB,kBACvDrtW,EAAO+O,0BAAqB33P,EAAW,SAAU8E,KAAKyulB,WAAYn5O,EAAYpoW,YAC9EooW,EAAcjpW,KAAK0zB,MAAMq3jB,EAAUl7U,WAAal8Q,KAAKmxlB,kBACrDrtW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAYn5O,EAAYpoW,YAE5E42O,EAAO+O,0BAAqB33P,EAAW,SAAU8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBH,EAAUz3D,eAAiB3/hB,KAAKmxlB,kBAAkBjklB,YAE3I42O,EAAO+O,0BAAqB33P,EAAW,SAAU8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBH,EAAUv0E,eAAiB7ihB,KAAKmxlB,kBAAkBjklB,YAC3I42O,EAAO+O,0BAAqB33P,EAAW,SAAU8E,KAAKyulB,WAAY,KAClE3qW,EAAOmO,mBAGXgjQ,EAAW75f,UAAU67lB,qBAAuB,SAAUnzW,EAAQ0zW,GAC1D1zW,EAAOoO,kBAAkB,IAAK,OAAQlyP,KAAKyulB,YAC3C3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY+I,GACzD1zW,EAAOmO,mBAGXgjQ,EAAW75f,UAAU47lB,qBAAuB,SAAUlzW,EAAQ+zQ,GAC1D,IAAI4/F,EAAO,GACX,QAAuBv8lB,IAAnB28f,EAA8B,CAC9B73f,KAAKw0lB,oBAAsBx0lB,KAAKgrS,QAAQ+rN,cAAc+6B,yBACtD,IAAI4lE,EAAK7/F,EAAeF,gBACpB+/F,GAAMA,EAAGvrT,QAAUurT,EAAGvrT,OAAO3vS,OAAS,IACtCsnP,EAAOoO,uBAAkBh3P,EAAW,kBAAmB8E,KAAKyulB,YAC5D3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,SAChEgJ,EAAOz3lB,KAAK23lB,wBACZ7zW,EAAO+O,0BAAqB33P,EAAW,KAAM8E,KAAK8ulB,WAAY2I,GAC9Dz3lB,KAAK43lB,gBAAgBF,EAAI,kBAAmBD,GAC5C3zW,EAAOmO,oBAEXylW,EAAK7/F,EAAeD,kBACV8/F,EAAGvrT,QAAUurT,EAAGvrT,OAAO3vS,OAAS,IACtCsnP,EAAOoO,uBAAkBh3P,EAAW,kBAAmB8E,KAAKyulB,YAC5D3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,SAChEgJ,EAAOz3lB,KAAK23lB,wBACZ7zW,EAAO+O,0BAAqB33P,EAAW,KAAM8E,KAAK8ulB,WAAY2I,GAC9Dz3lB,KAAK43lB,gBAAgBF,EAAI,kBAAmBD,GAC5C3zW,EAAOmO,oBAEXylW,EAAK7/F,EAAeJ,aACVigG,EAAGvrT,QAAUurT,EAAGvrT,OAAO3vS,OAAS,IACtCsnP,EAAOoO,uBAAkBh3P,EAAW,kBAAmB8E,KAAKyulB,YAC5D3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,QAChEgJ,EAAOz3lB,KAAK23lB,wBACZ7zW,EAAO+O,0BAAqB33P,EAAW,KAAM8E,KAAK8ulB,WAAY2I,GAC9Dz3lB,KAAK43lB,gBAAgBF,EAAI,aAAcD,GACvC3zW,EAAOmO,oBAEXylW,EAAK7/F,EAAeH,aACVggG,EAAGvrT,QAAUurT,EAAGvrT,OAAO3vS,OAAS,IACtCsnP,EAAOoO,uBAAkBh3P,EAAW,kBAAmB8E,KAAKyulB,YAC5D3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,QAChEgJ,EAAOz3lB,KAAK23lB,wBACZ7zW,EAAO+O,0BAAqB33P,EAAW,KAAM8E,KAAK8ulB,WAAY2I,GAC9Dz3lB,KAAK43lB,gBAAgBF,EAAI,aAAcD,GACvC3zW,EAAOmO,oBAEXylW,EAAK7/F,EAAe/sa,SACV4sgB,EAAGvrT,QAAUurT,EAAGvrT,OAAO3vS,OAAS,IACtCsnP,EAAOoO,uBAAkBh3P,EAAW,kBAAmB8E,KAAKyulB,YAC5D3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,WAChEgJ,EAAOz3lB,KAAK23lB,wBACZ7zW,EAAO+O,0BAAqB33P,EAAW,KAAM8E,KAAK8ulB,WAAY2I,GAC9Dz3lB,KAAK43lB,gBAAgBF,EAAI,YAAaD,GACtC3zW,EAAOmO,oBAEXylW,EAAK7/F,EAAe5rY,SACVyre,EAAGvrT,QAAUurT,EAAGvrT,OAAO3vS,OAAS,IACtCsnP,EAAOoO,uBAAkBh3P,EAAW,kBAAmB8E,KAAKyulB,YAC5D3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,WAChEgJ,EAAOz3lB,KAAK23lB,wBACZ7zW,EAAO+O,0BAAqB33P,EAAW,KAAM8E,KAAK8ulB,WAAY2I,GAC9Dz3lB,KAAK43lB,gBAAgBF,EAAI,YAAaD,GACtC3zW,EAAOmO,qBAKnBgjQ,EAAW75f,UAAUw8lB,gBAAkB,SAAUF,EAAIG,EAAQv0lB,GACzD,IAAIw0lB,EAAS,IAAIv1W,GACjBviP,KAAK63f,eAAezzf,IAAIyzlB,EAAQC,GAChC93lB,KAAK63f,eAAenwf,IAAImwlB,GAAQzzlB,IAAId,EAAIo0lB,IAG5CziG,EAAW75f,UAAU07lB,mBAAqB,SAAUhzW,EAAQi0W,EAAiBC,GACzE,IAAK,IAAI97lB,EAAI,EAAGA,EAAI67lB,EAAgBv7lB,OAAQN,IACxC8D,KAAKi4lB,kBAAkBn0W,EAAQi0W,EAAgB77lB,GAAI87lB,IAI3D/iG,EAAW75f,UAAU68lB,kBAAoB,SAAUn0W,EAAQ7lO,EAAM+5kB,GAC7D,GAAIv6lB,EAAkBwgB,GAClB,MAAM,IAAIrd,MAAM,oCAEpB,GAAIqd,EAAKtX,eAAe,WACpB3G,KAAKi3f,UAAYh5e,EACjBje,KAAK+riB,mBAAmBjoT,EAAQ7lO,EAAM+5kB,GACtCh4lB,KAAKi3f,eAAY/7f,OAIjB,IAAK,IADDkqE,EAAQnnD,EACH/hB,EAAI,EAAGA,EAAIkpE,EAAMwnK,KAAKpwO,OAAQN,IACnC,GAAIkpE,EAAMwnK,KAAK1wO,GAAG0qE,MAAMpqE,OAAS,EAAG,CAChCwD,KAAKgsiB,eAAeloT,EAAQ1+K,GAC5B,QAMhB6vb,EAAW75f,UAAU2wiB,mBAAqB,SAAUjoT,EAAQmzQ,EAAW+gG,GACnE,GAAIv6lB,EAAkBw5f,GAClB,MAAM,IAAIr2f,MAAM,qCAEpB,IAAIkrb,EAAM9rb,KAAKw2lB,YAEVwB,GAAiBlsK,EAAInlb,eAAe,kBAClCmlb,EAAI3/I,OAAO5tS,QAAQ04f,KAAenrE,EAAI3/I,OAAO3vS,OAAS,IACzDsnP,EAAOoO,kBAAkB,IAAK,IAAKlyP,KAAKyulB,YACxC3qW,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAChDzulB,KAAK+2lB,2BAA2BjzW,EAAQgoM,GACxChoM,EAAOmO,kBACPnO,EAAOmO,mBAQXnO,EAAOoO,kBAAkB,IAAK,IAAKlyP,KAAKyulB,YACxC3qW,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAChDzulB,KAAKutiB,yBAAyBzpT,EAAQmzQ,EAAUhF,gBAAiBgF,GACjEnzQ,EAAOmO,kBAGPjyP,KAAKk4lB,wBAAwBp0W,EAAQmzQ,EAAUutC,SAC/C1gT,EAAOmO,mBAGXgjQ,EAAW75f,UAAU88lB,wBAA0B,SAAUp0W,EAAQq0W,GAE7D,IAAK,IADDzlF,OAAex3gB,EACVgB,EAAI,EAAGA,EAAIi8lB,EAAU37lB,OAAQN,IAAK,CACvC,IAAI+hB,EAAOk6kB,EAAUj8lB,GACjB+hB,EAAKtX,eAAe,aACpB3G,KAAKo4lB,wBAAwBt0W,EAAQ7lO,GAEhCA,EAAKtX,eAAe,eACzB3G,KAAKq4lB,iBAAiBv0W,EAAQ7lO,GAEzBA,EAAKtX,eAAe,gBACzB3G,KAAKs4lB,kBAAkBx0W,EAAQ7lO,GAG/Bje,KAAKu4lB,mBAAmBz0W,EAAQ7lO,EAAMy0f,GAE1CA,EAAez0f,IAIvBg3e,EAAW75f,UAAUk9lB,kBAAoB,SAAUx0W,EAAQ85S,GACvD,IAAI46D,EAAax4lB,KAAKy4lB,cAAc76D,EAASrmgB,MACzCyjjB,EAAep9C,EAASrmgB,KACE,IAA1BqmgB,EAAShqB,cACT9vR,EAAOoO,kBAAkB,IAAK,gBAAiBlyP,KAAKyulB,YACpD3qW,EAAO+O,qBAAqB,IAAK,OAAQ7yP,KAAKyulB,WAAYzT,IAE3B,IAA1Bp9C,EAAShqB,cACd9vR,EAAOoO,kBAAkB,IAAK,cAAelyP,KAAKyulB,YAEtD3qW,EAAO+O,qBAAqB,IAAK,KAAM7yP,KAAKyulB,WAAY+J,EAAWtrlB,YACnE42O,EAAOmO,mBAEXgjQ,EAAW75f,UAAUq9lB,cAAgB,SAAUlhkB,GAC3C,IAAIzlB,EAAQ9R,KAAKg9hB,UAAUz+hB,QAAQg5B,GAKnC,OAJIzlB,EAAQ,IACRA,EAAQ9R,KAAKg9hB,UAAUxgiB,OACvBwD,KAAKg9hB,UAAUx4hB,KAAK+yB,IAEjBzlB,GAGXmjf,EAAW75f,UAAUi9lB,iBAAmB,SAAUv0W,EAAQ7vC,GAClDA,EAAMj+L,OAAS,GAAKi+L,EAAMl+L,QAAU,IACpC+tO,EAAOoO,uBAAkBh3P,EAAW,IAAK8E,KAAKyulB,YAC9CzulB,KAAKstiB,yBAAyBxpT,EAAQ7vC,EAAMo+S,iBAC5Cryf,KAAK04lB,iBAAiB50W,EAAQ7vC,GAC9B6vC,EAAOmO,oBAIfgjQ,EAAW75f,UAAUs9lB,iBAAmB,SAAU50W,EAAQ7vC,GACtD6vC,EAAOoO,uBAAkBh3P,EAAW,UAAW8E,KAAKyulB,YACpDzulB,KAAK24lB,uBAAuB70W,EAAQ7vC,GACpC6vC,EAAOmO,mBAGXgjQ,EAAW75f,UAAUu9lB,uBAAyB,SAAU70W,EAAQ7vC,GAC5D6vC,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAK0ulB,aACnD5qW,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAK0ulB,aACnD,IAAIpzjB,EAAKjvB,KAAK0zB,MAAMk0K,EAAMj+L,MAAQhW,KAAKsxlB,cACvCxtW,EAAO+O,0BAAqB33P,EAAW,UAAMA,EAAWogC,EAAGpuB,YAC3D,IAAIquB,EAAKlvB,KAAK0zB,MAAMk0K,EAAMl+L,OAAS/V,KAAKsxlB,cACxCxtW,EAAO+O,0BAAqB33P,EAAW,UAAMA,EAAWqgC,EAAGruB,YAC3D42O,EAAOmO,kBAaPjyP,KAAK44lB,yBAAyB90W,EAAQ7vC,GACtC6vC,EAAOmO,mBAEXgjQ,EAAW75f,UAAU8zK,WAAa,SAAU2pb,EAAcC,GACtD,OAAOA,EAAYt8lB,OAAS,GAAKq8lB,EAAax0kB,UAAU,EAAGy0kB,EAAYt8lB,UAAYs8lB,GAGvF7jG,EAAW75f,UAAUw9lB,yBAA2B,SAAU90W,EAAQi1W,GAC9D,IAAIz1lB,EAAK,GACTA,EAAKtD,KAAKg5lB,cAAcD,GAGxBj1W,EAAOoO,kBAAkB,KAAM,QAASlyP,KAAK0ulB,aAC7C5qW,EAAO+O,0BAAqB33P,EAAW,UAAMA,GAAY8E,KAAKu0lB,YAAYrnlB,YAG1E42O,EAAO+O,0BAAqB33P,EAAW,YAAQA,EAAW,IAAIgS,YAI9D42O,EAAO+O,0BAAqB33P,EAAW,aAASA,EAAW,IAI3D4oP,EAAOmO,kBACPnO,EAAOoO,kBAAkB,IAAK,UAAWlyP,KAAK4ulB,YAC9C9qW,EAAOoO,kBAAkB,IAAK,cAAelyP,KAAK4ulB,YAClD9qW,EAAO+O,0BAAqB33P,EAAW,WAAOA,EAAW8E,KAAK2ulB,kBAC9D7qW,EAAOoO,kBAAkB,MAAO,MAAOlyP,KAAK2ulB,kBAC5C7qW,EAAOoO,kBAAkB,MAAO,UAAWlyP,KAAK2ulB,kBAChD7qW,EAAOoO,kBAAkB,MAAO,QAASlyP,KAAK2ulB,kBAC9C7qW,EAAO+O,0BAAqB33P,EAAW,UAAMA,EAAW,KACxD4oP,EAAO+O,0BAAqB33P,EAAW,YAAQA,EAAW,IAC1D4oP,EAAO+O,0BAAqB33P,EAAW,aAASA,EAAW,IAC3D4oP,EAAOmO,kBACPnO,EAAOoO,kBAAkB,MAAO,WAAYlyP,KAAK2ulB,kBACjD7qW,EAAOoO,kBAAkB,IAAK,WAAYlyP,KAAK4ulB,YAC/C9qW,EAAO+O,0BAAqB33P,EAAW,sBAAkBA,EAAW,KACpE4oP,EAAO+O,0BAAqB33P,EAAW,0BAAsBA,EAAW,KACxE4oP,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOoO,kBAAkB,MAAO,WAAYlyP,KAAK2ulB,kBACjD7qW,EAAOoO,kBAAkB,IAAK,OAAQlyP,KAAK4ulB,YACvC5ulB,KAAKkvK,WAAW6pb,EAAQh5R,YAAa,cACrCj8E,EAAO+O,qBAAqB,IAAK,QAAS7yP,KAAK8ulB,WAAYxrlB,GAGvDtD,KAAKi5lB,eAAe51W,YAAY//O,KAKhCtD,KAAKi5lB,eAAe10lB,OAAOjB,GAC3BtD,KAAKk5lB,eAAe90lB,IAAId,EAAIy1lB,EAAQh5R,aACpCj8E,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAK8ulB,WAAYxrlB,IAIxEwgP,EAAOmO,kBACPnO,EAAOoO,kBAAkB,IAAK,UAAWlyP,KAAK4ulB,YAC9C9qW,EAAOmO,kBACPnO,EAAOoO,kBAAkB,IAAK,UAAWlyP,KAAK4ulB,YAC9C9qW,EAAOoO,kBAAkB,IAAK,WAAYlyP,KAAK4ulB,YAC/C9qW,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOoO,kBAAkB,MAAO,OAAQlyP,KAAK2ulB,kBAC7C7qW,EAAO+O,0BAAqB33P,EAAW,cAAUA,EAAW,QAC5D4oP,EAAOoO,kBAAkB,IAAK,OAAQlyP,KAAK4ulB,YAG3C9qW,EAAOoO,kBAAkB,IAAK,MAAOlyP,KAAK4ulB,YAC1C9qW,EAAO+O,0BAAqB33P,EAAW,SAAKA,EAAW,KACvD4oP,EAAO+O,0BAAqB33P,EAAW,SAAKA,EAAW,KACvD4oP,EAAOmO,kBACPnO,EAAOoO,kBAAkB,IAAK,MAAOlyP,KAAK4ulB,YAC1C,IAAItzjB,EAAKjvB,KAAK0zB,MAAOg5jB,EAAQ/ilB,MAAQhW,KAAKsxlB,cAC1CxtW,EAAO+O,0BAAqB33P,EAAW,UAAMA,EAAWogC,EAAGpuB,YAC3D,IAAIquB,EAAKlvB,KAAK0zB,MAAOg5jB,EAAQhjlB,OAAS/V,KAAKsxlB,cAC3CxtW,EAAO+O,0BAAqB33P,EAAW,UAAMA,EAAWqgC,EAAGruB,YAC3D42O,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOoO,kBAAkB,IAAK,WAAYlyP,KAAK4ulB,YAC/C9qW,EAAO+O,0BAAqB33P,EAAW,YAAQA,EAAW,QAC1D4oP,EAAOoO,kBAAkB,IAAK,QAASlyP,KAAK4ulB,YAC5C9qW,EAAOmO,kBACPnO,EAAOmO,kBAYPnO,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOmO,mBAGXgjQ,EAAW75f,UAAU49lB,cAAgB,SAAUD,GAC3C,IAAIz1lB,EAAK,GACL61lB,EAASn5lB,KAAKi3f,UAsBlB,OAnBIj3f,KAAKiogB,aACL3kgB,EAAKtD,KAAKo5lB,kBAAkBp5lB,KAAKiogB,aAAc8wF,GAGpC,KAAPz1lB,IACI61lB,EAAOxylB,eAAe,kBAAoBwylB,EAAOxylB,eAAe,cAChErD,EAAKtD,KAAKq5lB,iBAAiBr5lB,KAAKi5lB,eAAgBF,IAarDz1lB,GAGX2xf,EAAW75f,UAAUi+lB,iBAAmB,SAAUC,EAAiBrlZ,GAC/D,IAAIslZ,EAAa,GAcjB,OAHAA,EAAav5lB,KAAK23lB,wBAClB2B,EAAgBl1lB,IAAIm1lB,EAAYtlZ,GAEzBslZ,GAGXtkG,EAAW75f,UAAUg+lB,kBAAoB,SAAU1B,EAAIzjZ,GAKnD,IAAK,IAJD3wM,EAAK,GAELk2lB,EAAW,GACX5+gB,EAAQ56E,KAAK63f,eAAev6f,KACvBpB,EAAI,EAAGA,EAAI0+E,EAAMp+E,OAAQN,IAG9B,IAAK,IAFD47lB,EAAS93lB,KAAK63f,eAAenwf,IAAIkzE,EAAM1+E,IACvCu9lB,EAAS3B,EAAOx6lB,KACXomB,EAAI,EAAGA,EAAI+1kB,EAAOj9lB,OAAQknB,IAC/B,GAAIo0kB,EAAOpwlB,IAAI+xlB,EAAO/1kB,MAAQg0kB,EAAI,CAC9B8B,EAAWC,EAAO/1kB,GAClB,IAAIg2kB,OAAe,EACf15lB,KAAK25lB,mBAAmBt2W,YAAYm2W,IACpCE,EAAe15lB,KAAK25lB,mBAAmBjylB,IAAI8xlB,GAC3Cl2lB,EAAKtD,KAAKq5lB,iBAAiBK,EAAczlZ,KAGzCylZ,EAAe,IAAIn3W,GACnBj/O,EAAKtD,KAAKq5lB,iBAAiBK,EAAczlZ,GACzCj0M,KAAK25lB,mBAAmBv1lB,IAAIo1lB,EAAUE,IAKtD,OAAOp2lB,GAGX2xf,EAAW75f,UAAU4wiB,eAAiB,SAAUloT,EAAQ1+K,GACpD,KAAIA,EAAMwnK,KAAKpwO,QAAU,GAAzB,CAGA,IAAIgngB,EAAQxjgB,KAAKolE,MACjBplE,KAAKolE,MAAQA,EACb0+K,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAChD,IAAIzqF,EAAc5+b,EAAMwnK,KAAK,GAAG09R,UAChCtqgB,KAAK45lB,qBAAqB91W,EAAQkgR,EAAa5+b,GAC/CplE,KAAK65lB,mBAAmB/1W,EAAQ1+K,GAChCplE,KAAK85lB,mBAAmBh2W,EAAQ1+K,EAAMwnK,MACtCkX,EAAOmO,kBACPjyP,KAAKolE,MAAQo+b,IAGjBvO,EAAW75f,UAAUy+lB,mBAAqB,SAAU/1W,EAAQ1+K,GACxD0+K,EAAOoO,uBAAkBh3P,EAAW,UAAW8E,KAAKyulB,YAC1B,IAAtBrphB,EAAM6B,KAAKzqE,QACXwD,KAAK+5lB,qBAAqBj2W,EAAQ1+K,EAAM6B,MAE5C68K,EAAOmO,mBAGXgjQ,EAAW75f,UAAU0+lB,mBAAqB,SAAUh2W,EAAQlX,GACxD,GAAIA,EAAKpwO,OAAS,EACd,IAAK,IAAIN,EAAI,EAAGA,EAAI0wO,EAAKpwO,OAAQN,IAAK,CAClC,IAAIwpE,EAAMknK,EAAK1wO,GACXwpE,EAAIkB,MAAMpqE,OAAS,GACnBwD,KAAKitiB,aAAanpT,EAAQp+K,KAM1Cuvb,EAAW75f,UAAU6xiB,aAAe,SAAUnpT,EAAQp+K,GAClD,IAAI89b,EAAQxjgB,KAAK0lE,IACjB1lE,KAAK0lE,IAAMA,EACXo+K,EAAOoO,uBAAkBh3P,EAAW,KAAM8E,KAAKyulB,YAC/CzulB,KAAKg6lB,mBAAmBl2W,EAAQp+K,GAChC1lE,KAAKi6lB,eAAen2W,EAAQp+K,EAAIkB,OAChCk9K,EAAOmO,kBACPjyP,KAAK0lE,IAAM89b,GAGfvO,EAAW75f,UAAU4+lB,mBAAqB,SAAUl2W,EAAQp+K,GAGxD,GAFAo+K,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YAE7C/ohB,EAAI4kc,UAAUv0f,OAAS,EAAG,CAC1B+tO,EAAOoO,uBAAkBh3P,EAAW,WAAY8E,KAAKyulB,YACpB,YAA7B/ohB,EAAI4kc,UAAU9F,WACd1gR,EAAO+O,qBAAqB,IAAK,QAAS7yP,KAAKyulB,WAAY,SAEzB,YAA7B/ohB,EAAI4kc,UAAU9F,YACnB1gR,EAAO+O,qBAAqB,IAAK,QAAS7yP,KAAKyulB,WAAY,WAE/D,IAAI14kB,EAAS/V,KAAKu3lB,kBAAkB7xhB,EAAI4kc,UAAUv0f,OAAS/V,KAAKmxlB,kBAAkBjklB,WAClF42O,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY14kB,GACzD+tO,EAAOmO,kBAEX,IAAIq4Q,EAAY5kc,EAAI4kc,UAEhBxF,EAAawF,EAAUxF,WACvBA,EAAa,IACbhhR,EAAOoO,uBAAkBh3P,EAAW,aAAc8E,KAAKyulB,YACvD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY3pF,EAAW53f,YACpE42O,EAAOmO,mBAGX,IAAIgzQ,EAAYqF,EAAUrF,UAO1B,GANIA,EAAY,IACZnhR,EAAOoO,uBAAkBh3P,EAAW,YAAa8E,KAAKyulB,YACtD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYxpF,EAAU/3f,YACnE42O,EAAOmO,mBAGP6yQ,EAAa,EAAG,CAEhB,OADAhhR,EAAOoO,uBAAkBh3P,EAAW,UAAW8E,KAAKyulB,YAC5CnkF,EAAUtF,qBACd,IAAK,UACD,IAAIhvf,EAAQhW,KAAKu3lB,kBAAkBjtF,EAAUvF,gBAAkB/kgB,KAAKqxlB,kBAAkBnklB,WACtF42O,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYz4kB,GACzD8tO,EAAO+O,qBAAqB,IAAK,OAAQ7yP,KAAKyulB,WAAY,OAC1D,MACJ,IAAK,QACD,IAAIyL,EAAal6lB,KAAKu3lB,kBAAkBjtF,EAAUvF,gBAAkB/kgB,KAAKkxlB,iBAAiBhklB,WAC1F42O,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYyL,GACzDp2W,EAAO+O,qBAAqB,IAAK,OAAQ7yP,KAAKyulB,WAAY,OAGlE3qW,EAAOmO,kBAGX,GAAIgzQ,EAAY,EAAG,CAEf,OADAnhR,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YAC3CnkF,EAAUnF,oBACd,IAAK,UACGnvf,EAAQhW,KAAKu3lB,kBAAkBjtF,EAAUpF,eAAiBllgB,KAAKqxlB,kBAAkBnklB,WACrF42O,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYz4kB,GACzD8tO,EAAO+O,qBAAqB,IAAK,OAAQ7yP,KAAKyulB,WAAY,OAC1D,MACJ,IAAK,QACGyL,EAAal6lB,KAAKu3lB,kBAAkBjtF,EAAUpF,eAAiBllgB,KAAKkxlB,iBAAiBhklB,WACzF42O,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYyL,GACzDp2W,EAAO+O,qBAAqB,IAAK,OAAQ7yP,KAAKyulB,WAAY,OAGlE3qW,EAAOmO,kBAGNq4Q,EAAUzF,wBACX/gR,EAAOoO,uBAAkBh3P,EAAW,YAAa8E,KAAKyulB,YACtD3qW,EAAOmO,mBAGPq4Q,EAAU59e,WACVo3N,EAAOoO,uBAAkBh3P,EAAW,YAAa8E,KAAKyulB,YACtD3qW,EAAOmO,mBAEXnO,EAAOmO,mBAGXgjQ,EAAW75f,UAAU6+lB,eAAiB,SAAUn2W,EAAQl9K,GACpD,IAAK,IAAI1qE,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IAC9B8D,KAAK6siB,cAAc/oT,EAAQl9K,EAAM1qE,KAIzC+4f,EAAW75f,UAAUyxiB,cAAgB,SAAU/oT,EAAQ/7K,GACnD,IAAIy7b,EAAQxjgB,KAAKw2lB,WAIjB,GAHAx2lB,KAAKw2lB,WAAazuhB,EAClB+7K,EAAOoO,uBAAkBh3P,EAAW,KAAM8E,KAAKyulB,YAC/CzulB,KAAKm6lB,oBAAoBr2W,EAAQ/7K,EAAK0gc,YAClC1gc,EAAKokO,OAAO3vS,OAAS,EAGrB,IAFA,IAAIwjY,EAAY,EACZ/hX,OAAO/iB,EACJ8kY,EAAYj4T,EAAKokO,OAAO3vS,QAC3ByhB,EAAO8pD,EAAKokO,OAAO6zF,GACnBhgY,KAAKi4lB,kBAAkBn0W,EAAQ7lO,GAAM,GACrC+hX,GAAa,OAIjBl8I,EAAOoO,uBAAkBh3P,EAAW,IAAK8E,KAAKyulB,YAC9C3qW,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAChD3qW,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YACnD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,UACzD3qW,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOmO,kBAEXnO,EAAOmO,kBACPjyP,KAAKw2lB,WAAahzF,GAGtBvO,EAAW75f,UAAU++lB,oBAAsB,SAAUr2W,EAAQ2kR,GACzD,IAAI1gc,EAAO/nE,KAAKw2lB,WAEPx2lB,KAAKolE,MAAM4+b,YAEXhkgB,KAAK0lE,IAAI4kc,UAClBxmR,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YAIjDzulB,KAAKo6lB,mBAAmBt2W,EAAQ/7K,GAEhC/nE,KAAKq6lB,mBAAmBv2W,EAAQ2kR,GAEhCzogB,KAAKs6lB,kBAAkBx2W,EAAQ/7K,GAE/B+7K,EAAOoO,uBAAkBh3P,EAAW,YAAa8E,KAAKyulB,YACtDzulB,KAAKu6lB,iBAAiBz2W,EAAQ2kR,EAAW56M,QAAS,GAClD/pE,EAAOmO,kBAEPjyP,KAAKw6lB,iBAAiB12W,EAAQ/7K,EAAK0gc,WAAWrF,SAe9CpjgB,KAAKy6lB,4BAA4B32W,EAAQ2kR,GAazCzogB,KAAK06lB,2BAA2B52W,EAAQ2kR,EAAWt4c,mBA2BnD2zL,EAAOmO,mBAGXgjQ,EAAW75f,UAAUg/lB,mBAAqB,SAAUt2W,EAAQ/7K,GACxD,IAAI4yhB,EAAK5yhB,EAAK0gc,WACd3kR,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAClB,YAA1BkM,EAAGx2F,oBACHrgR,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,OAEhE3qW,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBoD,EAAGz2F,eAAiBlkgB,KAAKqxlB,kBAAkBnklB,aAEhG,UAA1BytlB,EAAGx2F,oBAERrgR,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBoD,EAAGz2F,eAAiBlkgB,KAAKkxlB,iBAAiBhklB,YAC9H42O,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,SAGhE3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,QAChE3qW,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,WAAY,MAEjE3qW,EAAOmO,mBAGXgjQ,EAAW75f,UAAUi/lB,mBAAqB,SAAUv2W,EAAQ2kR,GACxD,IAEImyF,EAFA7yhB,EAAO/nE,KAAKw2lB,WACZqE,GAAe,EAEfl4V,EAAe56L,EAAKinK,YACpBukF,EAAYvzT,KAAK0lE,IAAIkB,MAAMroE,QAAQwpE,GACnCwzT,EAAYhoE,EAAY,EAAIvzT,KAAK0lE,IAAIkB,MAAM2sP,EAAY,GAAGvkF,YAAcjnK,EAAKinK,YAQjF,GAPIjnK,EAAKinK,cAAgBukF,GACrBqnS,EAAU7yhB,EAAKinK,YACf6rX,GAAe,GAGfA,GAAe,GAEdA,EAAc,CACG,IAAdtnS,IACA5wD,EAAe56L,EAAKinK,YACpBusJ,GAAa,GAEjB,IAAK,IAAIr/X,EAAIq/X,EAAWr/X,EAAIymQ,EAAczmQ,IACtC0+lB,EAAUr/N,EAAY,EACtBA,GAAa,EACTv7X,KAAKk1lB,eAAe7xW,YAAYu3W,IAChC56lB,KAAK86lB,YAAYh3W,EAAQ82W,EAAS7yhB,GAI1C0gc,EAAW73M,QAAU,GACrB9sE,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YACnDzulB,KAAKk1lB,eAAe9wlB,IAAIw2lB,EAASnyF,EAAW73M,QAAU,GAClD63M,EAAW31M,WAAa,GACxB9yT,KAAKm1lB,WAAW/wlB,IAAIw2lB,EAASnyF,EAAW31M,YAE5ChvE,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,WACzD3qW,EAAOmO,mBAEFjyP,KAAKk1lB,eAAe7xW,YAAYu3W,IAAYC,EACjD76lB,KAAK86lB,YAAYh3W,EAAQ82W,EAAS7yhB,GAE7B/nE,KAAKk1lB,eAAe7xW,YAAYkwE,EAAY,IAAMsnS,QAAkC3/lB,IAAlB6sE,EAAK0nU,WAC5EmrN,EAAU7yhB,EAAKinK,YAAc,EAC7B8U,EAAOmO,kBACPnO,EAAOoO,kBAAkB,IAAK,IAAKlyP,KAAKyulB,YACxC3qW,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOoO,uBAAkBh3P,EAAW,KAAM8E,KAAKyulB,YAC/C3qW,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YACjDzulB,KAAK+6lB,oBAAoBH,EAAS92W,GAClCA,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YACnD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,YACzD3qW,EAAOmO,kBACPjyP,KAAKg7lB,eAAeJ,KAG5B3lG,EAAW75f,UAAU0/lB,YAAc,SAAUh3W,EAAQ82W,EAAS7yhB,GAC1D/nE,KAAK+6lB,oBAAoBH,EAAS92W,GAClCA,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YACnD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,YACzD3qW,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOoO,kBAAkB,IAAK,IAAKlyP,KAAKyulB,YACxC3qW,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOoO,uBAAkBh3P,EAAW,KAAM8E,KAAKyulB,YAC/C3qW,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YACjDzulB,KAAKo6lB,mBAAmBt2W,EAAQ/7K,GAChC/nE,KAAKg7lB,eAAeJ,IAExB3lG,EAAW75f,UAAU2/lB,oBAAsB,SAAUH,EAAS92W,GACtD9jP,KAAKm1lB,WAAW73lB,KAAKd,OAAS,GAAKwD,KAAKm1lB,WAAW9xW,YAAYu3W,KAC/D92W,EAAOoO,uBAAkBh3P,EAAW,WAAY8E,KAAKyulB,YACrD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYzulB,KAAKm1lB,WAAWztlB,IAAIkzlB,GAAS1tlB,YACtF42O,EAAOmO,oBAGfgjQ,EAAW75f,UAAU4/lB,eAAiB,SAAUJ,GACvC56lB,KAAKk1lB,eAAextlB,IAAIkzlB,GAAW,GAAO,GAC3C56lB,KAAKk1lB,eAAe3wlB,OAAOq2lB,GACvB56lB,KAAKm1lB,WAAW73lB,KAAKd,OAAS,GAAKwD,KAAKm1lB,WAAW9xW,YAAYu3W,IAC/D56lB,KAAKm1lB,WAAW5wlB,OAAOq2lB,IAI3B56lB,KAAKk1lB,eAAe7tlB,IAAIuzlB,EAAS56lB,KAAKk1lB,eAAextlB,IAAIkzlB,GAAW,IAI5E3lG,EAAW75f,UAAUk/lB,kBAAoB,SAAUx2W,EAAQ/7K,GAEvD,GAAIA,EAAK0gc,WAAW31M,WAAa,EAAG,CAChC,IAAIp3T,EAAMqsE,EAAK0gc,WAAW31M,WAC1BhvE,EAAOoO,uBAAkBh3P,EAAW,WAAY8E,KAAKyulB,YACrD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY/ylB,EAAIwR,YAC7D42O,EAAOmO,oBAIfgjQ,EAAW75f,UAAUq/lB,4BAA8B,SAAU32W,EAAQ2kR,KA6BrExT,EAAW75f,UAAUs/lB,2BAA6B,SAAU52W,EAAQp4L,GAEhE,OADAo4L,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YAC3C/iiB,GACJ,IAAK,MACDo4L,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,OACzD,MACJ,IAAK,SACD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,UACzD,MACJ,QACI3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,UAGjE3qW,EAAOmO,mBAGXgjQ,EAAW75f,UAAU2+lB,qBAAuB,SAAUj2W,EAAQ78K,GAC1D,IAAK,IAAI/qE,EAAI,EAAGgjB,EAAQ+nD,EAAKzqE,OAAQN,EAAIgjB,EAAOhjB,IAAK,CACjD,IAAI++lB,EAAY5ulB,KAAK0zB,MAAgB,GAAVknC,EAAK/qE,IAChC4nP,EAAOoO,uBAAkBh3P,EAAW,UAAW8E,KAAKyulB,YACpD3qW,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,WAAYwM,EAAU/tlB,YACvE42O,EAAOmO,oBAKfgjQ,EAAW75f,UAAUw+lB,qBAAuB,SAAU91W,EAAQvlN,EAAQ6mC,GAMlE0+K,EAAOoO,uBAAkBh3P,EAAW,QAAS8E,KAAKyulB,YAoBlDzulB,KAAKk7lB,oBAAoBp3W,EAAQ1+K,GACjCplE,KAAKm7lB,wBAAwBr3W,EAAQ1+K,EAAM4+b,aAC3ChkgB,KAAKo7lB,qBAAqBt3W,EAAQ1+K,EAAM4+b,aACxChkgB,KAAKq7lB,0BAA0Bv3W,EAAQ1+K,EAAM4+b,aAC7ChkgB,KAAKs7lB,sBAAsBx3W,EAAQ1+K,EAAM4+b,aACzChkgB,KAAKw6lB,iBAAiB12W,EAAQ1+K,EAAM4+b,YAAYZ,SAChDpjgB,KAAKu7lB,mBAAmBz3W,EAAQ1+K,EAAM4+b,aAiCjCvmgB,EAAkB2nE,IACnB0+K,EAAOmO,mBAIfgjQ,EAAW75f,UAAUo/lB,iBAAmB,SAAU12W,EAAQvlN,GAEtDulN,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAChD3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAYzulB,KAAK2whB,SAASpyf,EAAO6vB,kBACtD,UAA3B7vB,EAAO8ke,gBACPv/Q,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,WAAY,QAGjE3qW,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,WAAYzulB,KAAK2whB,SAASpyf,EAAO8ke,kBAE1Fv/Q,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYzulB,KAAKw7lB,gBAAgBj9jB,EAAO+ke,eACrFx/Q,EAAOmO,mBAGXgjQ,EAAW75f,UAAUogmB,gBAAkB,SAAUl4F,GAC7C,OAAQA,GACJ,IAAK,kBACL,IAAK,qBACL,IAAK,qBACD,MAAO,OACX,IAAK,mBACD,MAAO,QACX,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACD,MAAO,QACX,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACD,MAAO,QACX,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACD,MAAO,QACX,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,eACD,MAAO,gBACX,IAAK,mBACD,MAAO,YACX,IAAK,2BACD,MAAO,YACX,IAAK,0BACD,MAAO,oBACX,IAAK,wBACD,MAAO,aACX,IAAK,wBACD,MAAO,aACX,IAAK,sBACD,MAAO,aACX,IAAK,uBACD,MAAO,gBACX,IAAK,sBACD,MAAO,wBACX,IAAK,oBACD,MAAO,iBACX,IAAK,oBACD,MAAO,iBACX,IAAK,eACD,MAAO,QACX,IAAK,kBACD,MAAO,iBACX,QACI,MAAO,UAInBrO,EAAW75f,UAAUkgmB,sBAAwB,SAAUx3W,EAAQvlN,GAC7CA,EAAOsvR,QAGrB/pE,EAAOoO,uBAAkBh3P,EAAW,aAAc8E,KAAKyulB,YACvDzulB,KAAKu6lB,iBAAiBz2W,EAAQvlN,EAAOsvR,QAAS,GAC9C/pE,EAAOmO,mBAGXgjQ,EAAW75f,UAAUm/lB,iBAAmB,SAAUz2W,EAAQ+pE,EAAS4tS,GAC/Dz7lB,KAAK07lB,gBAAgB53W,EAAQ+pE,EAAQnhT,IAAK,MAAO+ulB,GACjDz7lB,KAAK07lB,gBAAgB53W,EAAQ+pE,EAAQrhT,KAAM,OAAQivlB,GACnDz7lB,KAAK07lB,gBAAgB53W,EAAQ+pE,EAAQlhT,OAAQ,SAAU8ulB,GACvDz7lB,KAAK07lB,gBAAgB53W,EAAQ+pE,EAAQphT,MAAO,QAASgvlB,GACrDz7lB,KAAK07lB,gBAAgB53W,EAAQ+pE,EAAQhqL,WAAY,UAAW43d,GAC5Dz7lB,KAAK07lB,gBAAgB53W,EAAQ+pE,EAAQ/pL,SAAU,UAAW23d,GAC1Dz7lB,KAAK07lB,gBAAgB53W,EAAQ+pE,EAAQ80M,aAAc,QAAS84F,GAC5Dz7lB,KAAK07lB,gBAAgB53W,EAAQ+pE,EAAQ+0M,WAAY,QAAS64F,IAG9DxmG,EAAW75f,UAAUmgmB,mBAAqB,SAAUz3W,EAAQvlN,KAU5D02d,EAAW75f,UAAUsgmB,gBAAkB,SAAU53W,EAAQh9M,EAAQ9jC,EAAS0+U,GACtE,IAAI28E,EAAcv3X,EAAOqhM,UACrBwzX,EAAM70jB,EAAO0sD,UAAYkuP,EACzBvhT,EAAQ2G,EAAO3G,MACnB,GAAoB,YAAhBk+X,EAIA,OAHAv6K,EAAOoO,uBAAkBh3P,EAAW8H,EAAShD,KAAKyulB,YAClD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,YACzD3qW,EAAOmO,kBAGe,SAAhBosK,IAA2Bv3X,EAAOmoe,cAAiB0sF,GAAM,IAGnE73W,EAAOoO,uBAAkBh3P,EAAW8H,EAAShD,KAAKyulB,YAClD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYzulB,KAAK47lB,eAAev9L,IAO7Ev6K,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,WAAYzulB,KAAK2whB,SAAS7pf,EAAOzQ,QAEtFytN,EAAO+O,0BAAqB33P,EAAW,KAAM8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBoE,GAAIzulB,YACzF42O,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,WAAYtujB,EAAMjzB,YACnE45B,EAAOkxB,QACP8rL,EAAO+O,0BAAqB33P,EAAW,SAAU8E,KAAKyulB,WAAY,MAEtE3qW,EAAOmO,oBAGXgjQ,EAAW75f,UAAUwgmB,eAAiB,SAAUv9L,GAC5C,OAAQA,GACJ,IAAK,UACD,MAAO,UACX,IAAK,eACD,MAAO,eACX,IAAK,SACD,MAAO,SACX,IAAK,MACD,MAAO,SACX,IAAK,UACD,MAAO,UACX,IAAK,eACD,MAAO,SACX,IAAK,aACD,MAAO,aACX,IAAK,SACD,MAAO,SACX,IAAK,oBACD,MAAO,oBACX,IAAK,oBACD,MAAO,oBACX,IAAK,wBACD,MAAO,wBACX,IAAK,qBACD,MAAO,qBACX,IAAK,qBACD,MAAO,qBACX,IAAK,yBACD,MAAO,yBACX,IAAK,oBACD,MAAO,oBACX,IAAK,oBACD,MAAO,oBACX,IAAK,wBACD,MAAO,wBACX,IAAK,QACD,MAAO,QACX,IAAK,aACD,MAAO,OACX,IAAK,aACD,MAAO,aACX,IAAK,iBACD,MAAO,iBACX,IAAK,YACD,MAAO,gBACX,IAAK,WACD,MAAO,eACX,IAAK,SACD,MAAO,SACX,IAAK,QACD,MAAO,QAGX,QACI,MAAO,WAInB42F,EAAW75f,UAAUigmB,0BAA4B,SAAUv3W,EAAQvlN,GAC/DulN,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YACnD,IAAIoN,EAAcxvlB,KAAK0zB,MAAMxB,EAAO6+d,WAAap9f,KAAKkxlB,iBACtDptW,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,WAAYoN,EAAY3ulB,YACzE42O,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,OAChE3qW,EAAOmO,mBAGXgjQ,EAAW75f,UAAUggmB,qBAAuB,SAAUt3W,EAAQvlN,IACrD9gC,EAAkB8gC,EAAO8xR,cAAgB9xR,EAAO8xR,aAAe,IAChEvsE,EAAOoO,uBAAkBh3P,EAAW,iBAAkB8E,KAAKyulB,YAE3D3qW,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBh5jB,EAAO8xR,YAAcrwT,KAAKmxlB,kBAAkBjklB,YAChI42O,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,OAChE3qW,EAAOmO,oBAIfgjQ,EAAW75f,UAAU8/lB,oBAAsB,SAAUp3W,EAAQ1+K,GAEzD,GADA0+K,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YACJ,YAAzCrphB,EAAM4+b,YAAYG,mBAElBrgR,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,YAAarphB,EAAM4+b,YAAYE,eAAiBlkgB,KAAKqxlB,kBAAkBnklB,YACxH42O,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,YAE/D,GAA6C,UAAzCrphB,EAAM4+b,YAAYG,mBAAgC,CACvD,IAAI+F,EAAa79f,KAAK0zB,MAAMqlC,EAAM4+b,YAAYE,eAAiBlkgB,KAAKkxlB,iBACpEptW,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,WAAYvkF,EAAWh9f,YACxE42O,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,YAGhE3qW,EAAO+O,0BAAqB33P,EAAW,IAAK8E,KAAKyulB,WAAY,KAC7D3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,QAEpE3qW,EAAOmO,mBAGXgjQ,EAAW75f,UAAU+/lB,wBAA0B,SAAUr3W,EAAQvlN,GAE7D,OADAulN,EAAOoO,uBAAkBh3P,EAAW,KAAM8E,KAAKyulB,YACvClwjB,EAAO0le,gBACX,IAAK,QACDngR,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,SACzD,MACJ,IAAK,SACD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,UACzD,MACJ,QACI3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,QAGjE3qW,EAAOmO,mBAGXgjQ,EAAW75f,UAAUg9lB,wBAA0B,SAAUt0W,EAAQ/hL,GAC7D+hL,EAAOoO,uBAAkBh3P,EAAW,IAAK8E,KAAKyulB,YAC9CzulB,KAAKstiB,yBAAyBxpT,EAAQ/hL,EAAMswb,iBAC5CvuQ,EAAOoO,uBAAkBh3P,EAAW,UAAW8E,KAAKyulB,YACpD,IAAI/nlB,EAA2B,IAApBq7D,EAAM29b,UAAkB,QACT,IAApB39b,EAAM29b,UAAkB,MAAQ,WACtC57Q,EAAO+O,0BAAqB33P,EAAW,cAAe8E,KAAKyulB,WAAY/nlB,GACvEo9O,EAAOmO,kBACPnO,EAAOmO,mBAGXgjQ,EAAW75f,UAAUm9lB,mBAAqB,SAAUz0W,EAAQr8K,EAAMirc,GAG9D,GAFA5uR,EAAOoO,kBAAkB,IAAK,IAAKlyP,KAAKyulB,YACxCzulB,KAAKstiB,yBAAyBxpT,EAAQr8K,EAAK4qb,iBACzB,OAAd5qb,EAAKz4C,KACL80N,EAAO6O,wBAAmBz3P,EAAW,MAAO8E,KAAKyulB,gBAAYvzlB,QAE5D,GAAkB,OAAdusE,EAAKz4C,KACV80N,EAAO6O,wBAAmBz3P,EAAW,KAAM8E,KAAKyulB,gBAAYvzlB,QAE3D,GAAkB,OAAdusE,EAAKz4C,KACV80N,EAAOoO,uBAAkBh3P,EAAW,KAAM8E,KAAKyulB,YAC/C3qW,EAAO+O,qBAAqB,IAAK,OAAQ7yP,KAAKyulB,WAAY,QAC1D3qW,EAAOmO,sBAEN,CACD,IAAI6pW,GAAWr+lB,EAAkBi1gB,IAC1BA,EAAa/rgB,eAAe,cAA2C,IAA3B+rgB,EAAahT,UAChE57Q,EAAOoO,uBAAkBh3P,EAAW4gmB,EAAU,YAAc,IAAK97lB,KAAKyulB,YACtE3qW,EAAO+O,qBAAqB,MAAO,QAAS7yP,KAAKkvlB,aAAc,YAC/DprW,EAAO8O,YAAYnrL,EAAKz4C,MACxB80N,EAAOmO,kBAEXnO,EAAOmO,mBAGXgjQ,EAAW75f,UAAUmyiB,yBAA2B,SAAUzpT,EAAQmuQ,EAAiBgF,GAC1Ex5f,EAAkBw0f,EAAgBgO,aACnCn8Q,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YACnD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYx8F,EAAgBgO,WACzEn8Q,EAAOmO,mBAENx0P,EAAkBw5f,GAInBj3f,KAAK+7lB,oBAAoBj4W,EAAQmuQ,EAAgB+F,YAHjDh4f,KAAK+7lB,oBAAoBj4W,EAAQmzQ,EAAUhF,gBAAgB+F,YAK/Dh4f,KAAKg8lB,0BAA0Bl4W,EAAQmuQ,GACvCjyf,KAAKi8lB,qBAAqBn4W,EAAQmuQ,GAClCjyf,KAAKk8lB,4BAA4Bp4W,EAAQmuQ,EAAgBjvd,gBACpDvlC,EAAkBw0f,EAAgBkK,OAASlK,EAAgBkK,KAAK3/f,OAAS,GAC1EwD,KAAKm8lB,cAAcr4W,EAAQmuQ,EAAgBkK,OAInDlH,EAAW75f,UAAU+gmB,cAAgB,SAAUr4W,EAAQw4Q,GACnDx4Q,EAAOoO,kBAAkB,IAAK,OAAQlyP,KAAKyulB,YAC3C,IAAK,IAAIvylB,EAAI,EAAGA,EAAIoggB,EAAS9/f,OAAQN,IACjC8D,KAAKo8lB,aAAat4W,EAAQw4Q,EAASpggB,IAEvC4nP,EAAOmO,mBAEXgjQ,EAAW75f,UAAUghmB,aAAe,SAAUt4W,EAAQqiT,GAClD,IAAIjyhB,EAAW,EACf4vO,EAAOoO,kBAAkB,IAAK,MAAOlyP,KAAKyulB,YACjB,IAArBtoD,EAAQjyhB,UAA6C,IAA3BiyhB,EAAQnqC,gBAClC9nf,EAAWiyhB,EAAQnqC,eAAiBh8f,KAAKmxlB,iBACzCrtW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,WAGzDv6kB,EAAWiyhB,EAAQjyhB,SAAWlU,KAAKmxlB,iBACnCrtW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYzulB,KAAKq8lB,oBAAoBl2D,EAAQlqC,oBAEzFx+f,EAAkB0oiB,EAAQ3yB,YAAqC,SAAtB2yB,EAAQ3yB,WAClD1vR,EAAO+O,qBAAqB,IAAK,SAAU7yP,KAAKyulB,WAAYzulB,KAAKwzhB,aAAa2S,EAAQ3yB,YAE1F1vR,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYv6kB,EAAShH,WAAa,IAC/E42O,EAAOmO,mBAEXgjQ,EAAW75f,UAAUo4hB,aAAe,SAAUhgB,GAC1C,OAAQA,GACJ,IAAK,MACD,MAAO,MACX,IAAK,SACD,MAAO,SACX,IAAK,aACD,MAAO,aACX,QACI,MAAO,SAGnBve,EAAW75f,UAAUihmB,oBAAsB,SAAUpgG,GACjD,OAAQA,GACJ,IAAK,MACD,MAAO,MACX,IAAK,SACD,MAAO,SACX,IAAK,UACD,MAAO,UACX,IAAK,OACD,MAAO,OACX,IAAK,OACD,MAAO,MACX,IAAK,QACD,MAAO,QACX,QACI,MAAO,UAUnBhH,EAAW75f,UAAU2gmB,oBAAsB,SAAUj4W,EAAQ/nJ,GA6BpDt+F,EAAkBs+F,EAAGs+Z,SAAY58f,EAAkBs+F,EAAGm/Z,mBACvDp3Q,EAAOoO,uBAAkBh3P,EAAW,QAAS8E,KAAKyulB,YAC7ChxlB,EAAkBs+F,EAAGm/Z,mBAA4C,IAAxBn/Z,EAAGm/Z,kBAC7Cp3Q,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YACjD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY1yf,EAAGm/Z,gBAAgBhuf,YAC5E42O,EAAOmO,mBAENx0P,EAAkBs+F,EAAGs+Z,UAA0B,IAAft+Z,EAAGs+Z,SACpCv2Q,EAAOoO,uBAAkBh3P,EAAW,QAAS8E,KAAKyulB,YAClD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,YAAa1yf,EAAGs+Z,OAAS,GAAGntf,YACzE42O,EAAOmO,mBAEXnO,EAAOmO,oBAkBfgjQ,EAAW75f,UAAU8gmB,4BAA8B,SAAUp4W,EAAQw4W,GACjE,IAAK7+lB,EAAkB6+lB,GAAe,CAClCx4W,EAAOoO,uBAAkBh3P,EAAW,KAAM8E,KAAKyulB,YAC/C,IAAI/iiB,OAAY,EAChB,OAAQ4wiB,GACJ,IAAK,SACD5wiB,EAAY,SACZ,MACJ,IAAK,QACDA,EAAY,QACZ,MACJ,IAAK,UACDA,EAAY,OACZ,MACJ,QACIA,EAAY,OAGpBo4L,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY/iiB,GACzDo4L,EAAOmO,oBAIfgjQ,EAAW75f,UAAU4gmB,0BAA4B,SAAUl4W,EAAQmuQ,GA8C/D,OA7CAnuQ,EAAOoO,uBAAkBh3P,EAAW,UAAW8E,KAAKyulB,YAY/ChxlB,EAAkBw0f,EAAgBqL,gBACnCx5Q,EAAO+O,0BAAqB33P,EAAW,SAAU8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBtlG,EAAgBqL,cAAgBt9f,KAAKmxlB,kBAAkBjklB,YAc/IzP,EAAkBw0f,EAAgBsL,eAEnCz5Q,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBtlG,EAAgBsL,aAAev9f,KAAKmxlB,kBAAkBjklB,YAclJ42O,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,OAExDx8F,EAAgBuL,iBACpB,IAAK,UACD15Q,EAAO+O,0BAAqB33P,EAAW,WAAY8E,KAAKyulB,WAAY,WACpE,MACJ,IAAK,UACD3qW,EAAO+O,0BAAqB33P,EAAW,WAAY8E,KAAKyulB,WAAY,SACpE,MACJ,QACI3qW,EAAO+O,0BAAqB33P,EAAW,WAAY8E,KAAKyulB,WAAY,QAG5E3qW,EAAOmO,mBAGXgjQ,EAAW75f,UAAU6gmB,qBAAuB,SAAUn4W,EAAQmuQ,GAC1DnuQ,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAC3ChxlB,EAAkBw0f,EAAgBmL,aAEnCt5Q,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBtlG,EAAgBmL,WAAap9f,KAAKkxlB,iBAAiBhklB,YAEzIzP,EAAkBw0f,EAAgBoL,cAEnCv5Q,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBtlG,EAAgBoL,YAAcr9f,KAAKkxlB,iBAAiBhklB,YAE3IzP,EAAkBw0f,EAAgBrjP,mBAC/BqjP,EAAgBrjP,gBAAkB,EAElC9qB,EAAO+O,0BAAqB33P,EAAW,UAAW8E,KAAKyulB,WAAYzulB,KAAKu3lB,mBAAmB,EAAItlG,EAAgBrjP,gBAAkB5uQ,KAAKkxlB,iBAAiBhklB,YAIvJ42O,EAAO+O,0BAAqB33P,EAAW,YAAa8E,KAAKyulB,WAAYzulB,KAAKu3lB,kBAAkBtlG,EAAgBrjP,gBAAkB5uQ,KAAKkxlB,iBAAiBhklB,aAG5J42O,EAAOmO,mBAGXgjQ,EAAW75f,UAAUi6lB,gBAAkB,WACnC,IAAIvxW,EAAS,IAAIiN,GACjBjN,EAAOoO,kBAAkB,IAAK,SAAUlyP,KAAKyulB,YAC7C3qW,EAAO+O,qBAAqB,QAAS,UAAM33P,EAAW8E,KAAKuvlB,aAC3DzrW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAK8ulB,YAC1DhrW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAKyulB,YAC1D3qW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKgwlB,cAC5DlsW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKswlB,cAC5DxsW,EAAO+O,qBAAqB,KAAM,iBAAa33P,EAAW,WAE1D8E,KAAKu8lB,uBAAuBz4W,GAE5B9jP,KAAKw8lB,wBAAwB14W,GAC7BA,EAAOmO,kBACP,IAAIwqW,EAAiB,IAAIj7V,GAAe1d,EAAOgM,OAAQ9vP,KAAK2rlB,WAC5D3rlB,KAAK80lB,SAASjyY,QAAQ45Y,IAG1BxnG,EAAW75f,UAAUmhmB,uBAAyB,SAAUz4W,GACpDA,EAAOoO,uBAAkBh3P,EAAW,cAAe8E,KAAKyulB,YAGxD3qW,EAAOoO,uBAAkBh3P,EAAW,aAAc8E,KAAKyulB,YAEvDzulB,KAAKstiB,yBAAyBxpT,EAAQ9jP,KAAKo2lB,oBAC3CtyW,EAAOmO,kBAgCPnO,EAAOoO,uBAAkBh3P,EAAW,aAAc8E,KAAKyulB,YAClDhxlB,EAAkBuC,KAAKq2lB,sBACxBvyW,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAChDzulB,KAAKutiB,yBAAyBzpT,EAAQ9jP,KAAKq2lB,wBAAoBn7lB,GAC/D4oP,EAAOmO,mBAEXnO,EAAOmO,kBAoBPnO,EAAOmO,mBAEXgjQ,EAAW75f,UAAUohmB,wBAA0B,SAAU14W,GACrD,IAAK,IAAI5nP,EAAI,EAAGA,EAAI8D,KAAKu2lB,QAAQ/5lB,OAAQN,IAAK,CAC1C,IAAIwI,EAAQ1E,KAAKu2lB,QAAQr6lB,GACzB4nP,EAAOoO,uBAAkBh3P,EAAW,QAAS8E,KAAKyulB,YAClD,IAAI/nlB,EAAsB,cAAfhC,EAAMgC,KAAuB,YAAc,YACtDo9O,EAAO+O,qBAAqB,IAAK,OAAQ7yP,KAAKyulB,WAAY/nlB,GAC1Do9O,EAAO+O,qBAAqB,IAAK,UAAW7yP,KAAKyulB,WAAY/plB,EAAM6yB,MAEnEusN,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YACjD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY/plB,EAAM6yB,MAC/DusN,EAAOmO,kBAEFx0P,EAAkBiH,EAAMu2f,WACzBn3Q,EAAOoO,uBAAkBh3P,EAAW,UAAW8E,KAAKyulB,YACpD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY/plB,EAAMu2f,SAC/Dn3Q,EAAOmO,mBAGNx0P,EAAkBiH,EAAM4mC,QACzBw4M,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YACjD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY/plB,EAAM4mC,MAC/Dw4M,EAAOmO,mBAGNx0P,EAAkBiH,EAAMkrD,QACzBk0L,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YACjD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY/plB,EAAMkrD,MAC/Dk0L,EAAOmO,mBAEQ,cAAfvtP,EAAMgC,OACNo9O,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAChDzulB,KAAKutiB,yBAAyBzpT,EAAQp/O,EAAMutf,qBAAiB/2f,GAC7D4oP,EAAOmO,mBAGXjyP,KAAKstiB,yBAAyBxpT,EAAQp/O,EAAM2tf,iBAC5CvuQ,EAAOmO,oBAIfgjQ,EAAW75f,UAAUkyiB,yBAA2B,SAAUxpT,EAAQuuQ,GAqB9D,GApBAvuQ,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAC3ChxlB,EAAkB40f,EAAgB4N,aACnCn8Q,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YACnD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYp8F,EAAgB4N,WACzEn8Q,EAAOmO,mBAENx0P,EAAkB40f,EAAgB7ie,cACnCs0N,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YACnD3qW,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,WAAYp8F,EAAgB7ie,YACjFs0N,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,WAAYp8F,EAAgB7ie,YACjFs0N,EAAO+O,0BAAqB33P,EAAW,WAAY8E,KAAKyulB,WAAYp8F,EAAgB7ie,YACpFs0N,EAAO+O,0BAAqB33P,EAAW,KAAM8E,KAAKyulB,WAAYp8F,EAAgB7ie,YAC9Es0N,EAAOmO,mBAENx0P,EAAkB40f,EAAgBpjc,OACnCjvD,KAAK08lB,sBAAsB54W,EAAQ,IAAKuuQ,EAAgBpjc,MAEvDxxD,EAAkB40f,EAAgBljc,SACnCnvD,KAAK08lB,sBAAsB54W,EAAQ,IAAKuuQ,EAAgBljc,SAEvD1xD,EAAkB40f,EAAgBqM,eACnC,OAAQrM,EAAgBqM,eACpB,IAAK,eACD1+f,KAAK08lB,sBAAsB54W,EAAQ,UAAU,GAC7C,MACJ,IAAK,eACD9jP,KAAK08lB,sBAAsB54W,EAAQ,WAAW,GAC9C,MACJ,QACI9jP,KAAK08lB,sBAAsB54W,EAAQ,UAAU,GAC7C9jP,KAAK08lB,sBAAsB54W,EAAQ,WAAW,GAyB1D,GArBKrmP,EAAkB40f,EAAgBoM,aACnC36Q,EAAOoO,uBAAkBh3P,EAAW,QAAS8E,KAAKyulB,YAClD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYzulB,KAAK2whB,SAASt+B,EAAgBoM,YACvF36Q,EAAOmO,mBAENx0P,EAAkB40f,EAAgBjje,YACnC00N,EAAOoO,uBAAkBh3P,EAAW,KAAM8E,KAAKyulB,YAE/C3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYzulB,KAAKu3lB,kBAA6C,EAA3BllG,EAAgBjje,UAAcliB,YAC9G42O,EAAOmO,mBAENx0P,EAAkB40f,EAAgBsM,iBAAsD,YAAnCtM,EAAgBsM,iBACtE76Q,EAAOoO,uBAAkBh3P,EAAW,YAAa8E,KAAKyulB,YACtD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYzulB,KAAK28lB,kBAAkBtqG,EAAgBsM,iBAChG76Q,EAAOmO,mBAENx0P,EAAkB40f,EAAgB7kN,YAA4C,SAA9B6kN,EAAgB7kN,YACjE1pD,EAAOoO,uBAAkBh3P,EAAW,IAAK8E,KAAKyulB,YAC9C3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAYzulB,KAAK48lB,kBAAkBvqG,EAAgB7kN,YAChG1pD,EAAOmO,oBAENx0P,EAAkB40f,EAAgBmM,mBAAoB,CAEvD,OADA16Q,EAAOoO,uBAAkBh3P,EAAW,YAAa8E,KAAKyulB,YAC9Cp8F,EAAgBmM,mBACpB,IAAK,YACD16Q,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,aACzD,MACJ,IAAK,cACD3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,eACzD,MACJ,QACI3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,YAGjE3qW,EAAOmO,kBAEXnO,EAAOmO,mBAEXgjQ,EAAW75f,UAAUu1hB,SAAW,SAAUt6f,GAStC,OARIA,EAAM75B,OAAS,IACE,MAAb65B,EAAM,KACNA,EAAQA,EAAMQ,OAAO,IAErBR,EAAM75B,OAAS,IACf65B,EAAQA,EAAMQ,OAAO,EAAG,KAGzBR,GAGX4+d,EAAW75f,UAAUwhmB,kBAAoB,SAAUC,GAC/C,OAAQA,GACJ,IAAK,kBACD,MAAO,kBACX,IAAK,eACD,MAAO,eACX,IAAK,YACD,MAAO,cACX,IAAK,WACD,MAAO,WACX,IAAK,gBACD,MAAO,gBACX,IAAK,UACD,MAAO,UACX,IAAK,aACD,MAAO,aACX,IAAK,SACD,MAAO,SACX,IAAK,cACD,MAAO,cACX,IAAK,SACD,MAAO,SACX,IAAK,SACD,MAAO,SACX,IAAK,QACD,MAAO,QACX,IAAK,OACD,MAAO,OACX,IAAK,aACD,MAAO,aACX,IAAK,YACD,MAAO,YACX,IAAK,QACD,MAAO,QACX,QACI,MAAO,SAGnB5nG,EAAW75f,UAAUuhmB,kBAAoB,SAAUruQ,GAC/C,OAAQA,GAEJ,IAAK,cACD,MAAO,QAEX,IAAK,YACD,MAAO,OAEX,IAAK,OACD,MAAO,UAEX,IAAK,OACD,MAAO,OAEX,IAAK,MACD,MAAO,MAEX,IAAK,WACD,MAAO,WAEX,IAAK,OACD,MAAO,WAEX,IAAK,QACD,MAAO,YAEX,IAAK,SACD,MAAO,cAEX,IAAK,UACD,MAAO,UAEX,IAAK,aACD,MAAO,aAEX,IAAK,SACD,MAAO,WAEX,IAAK,SACD,MAAO,YAEX,IAAK,QACD,MAAO,QAEX,QACI,MAAO,WAOnB2mK,EAAW75f,UAAUshmB,sBAAwB,SAAU54W,EAAQryO,EAAK1U,GAChE+mP,EAAOoO,uBAAkBh3P,EAAWuW,EAAKzR,KAAKyulB,YACzC1xlB,GACD+mP,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAY,KAEnE3qW,EAAOmO,mBAGXgjQ,EAAW75f,UAAUk6lB,oBAAsB,WACvC,GAAmC,IAA/Bt1lB,KAAKQ,SAASo0S,MAAMp4S,OAAxB,CAGA,IAAIsnP,EAAS,IAAIiN,GACjBjN,EAAOoO,kBAAkB,IAAK,YAAalyP,KAAKyulB,YAChDzulB,KAAKy2lB,4BAA4B3yW,GAEjC9jP,KAAK88lB,4BAA4Bh5W,EAAQ9jP,KAAKQ,SAASg0f,eACvDx0f,KAAK+8lB,uBAAuBj5W,EAAQ9jP,KAAKQ,SAASo0S,OAElD9wD,EAAOmO,kBACP,IAAIwqW,EAAiB,IAAIj7V,GAAe1d,EAAOgM,OAAQ9vP,KAAK4rlB,eAC5D5rlB,KAAK80lB,SAASjyY,QAAQ45Y,KAG1BxnG,EAAW75f,UAAU0hmB,4BAA8B,SAAUh5W,EAAQk5W,GACjE,IAAK,IAAI9gmB,EAAI,EAAGA,EAAI8gmB,EAAWxgmB,OAAQN,IAAK,CACxC,IAAIs+f,EAAewiG,EAAW9gmB,GAC9B4nP,EAAOoO,uBAAkBh3P,EAAW,cAAe8E,KAAKyulB,YACxD3qW,EAAO+O,0BAAqB33P,EAAW,gBAAiB8E,KAAKyulB,WAAYj0F,EAAaD,eAAertf,YACrG42O,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YACjD3qW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAYzulB,KAAKi9lB,eACpEn5W,EAAOmO,kBACP,IAAK,IAAIirW,EAAO,EAAGvtlB,EAAM6qf,EAAa70a,OAAOnpF,OAAQ0gmB,EAAOvtlB,EAAKutlB,IAC7Dl9lB,KAAKm9lB,mBAAmBr5W,EAAQ02Q,EAAa70a,OAAOu3gB,GAAOA,GAE/Dp5W,EAAOmO,oBAIfgjQ,EAAW75f,UAAU2hmB,uBAAyB,SAAUj5W,EAAQk5W,GAC5D,IAAK,IAAI9gmB,EAAI,EAAGA,EAAI8gmB,EAAWxgmB,OAAQN,IAAK,CACxC,IAAI8sG,EAAOg0f,EAAW9gmB,GACtB4nP,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAChD3qW,EAAO+O,0BAAqB33P,EAAW,QAAS8E,KAAKyulB,YAAazlf,EAAKqxZ,OAAS,GAAGntf,YACnF42O,EAAOoO,uBAAkBh3P,EAAW,gBAAiB8E,KAAKyulB,YAC1D3qW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAYzlf,EAAKuxZ,eAAertf,YACnF42O,EAAOmO,kBACPnO,EAAOmO,oBAGfgjQ,EAAW75f,UAAU6hmB,YAAc,WAC/B,OAAQ5wlB,KAAKmT,YAAMnT,KAAKgT,UAAuC,MAAWnS,SAAS,IAAIge,eAE3F+pe,EAAW75f,UAAUm8lB,kBAAoB,SAAU77lB,GAC/C,OAAO2Q,KAAK0zB,MAAMrkC,IAGtBu5f,EAAW75f,UAAU+hmB,mBAAqB,SAAUr5W,EAAQ24Q,EAAW2gG,GACnEt5W,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAChD3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY2O,EAAWlwlB,YAC3E42O,EAAOoO,uBAAkBh3P,EAAW,QAAS8E,KAAKyulB,YAClD3qW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAYhyF,EAAUtC,QAAQjtf,YACjF42O,EAAOmO,kBACPnO,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YACnD3qW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAYzulB,KAAKq9lB,gBAAgB5gG,EAAUqc,mBAC9Fh1R,EAAOmO,kBACHwqQ,EAAUgd,aAAe,IACzB31R,EAAOoO,uBAAkBh3P,EAAW,aAAc8E,KAAKyulB,YACvD3qW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAY,KAC/D3qW,EAAOmO,mBAYXjyP,KAAKs9lB,qBAAqBx5W,EAAQ24Q,GAClCz8f,KAAKu9lB,mBAAmBz5W,EAAQ24Q,EAAW2gG,EAAa,GAoBxDt5W,EAAOoO,uBAAkBh3P,EAAW,MAAO8E,KAAKyulB,YAChDzulB,KAAKutiB,yBAAyBzpT,EAAQ24Q,EAAUxK,qBAAiB/2f,GACjE4oP,EAAOmO,kBACPjyP,KAAKstiB,yBAAyBxpT,EAAQ24Q,EAAUpK,iBAChDvuQ,EAAOmO,mBAEXgjQ,EAAW75f,UAAUiimB,gBAAkB,SAAUt1D,GAC7C,IAAIy1D,EACJ,OAAQz1D,GACJ,IAAK,SACDy1D,EAAc,UACd,MACJ,IAAK,UACDA,EAAc,aACd,MACJ,IAAK,WACDA,EAAc,aACd,MACJ,IAAK,WACDA,EAAc,cACd,MACJ,IAAK,YACDA,EAAc,cACd,MAcJ,QACIA,EAAc,SAYtB,OAAOA,GAGXvoG,EAAW75f,UAAUmimB,mBAAqB,SAAUz5W,EAAQ24Q,EAAWghG,GACnE35W,EAAOoO,uBAAkBh3P,EAAW,UAAW8E,KAAKyulB,YACpD3qW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAahyF,EAAsB,cACtF34Q,EAAOmO,mBAGXgjQ,EAAW75f,UAAUkimB,qBAAuB,SAAUx5W,EAAQ24Q,GAC1D,IAAIihG,EAGAA,EAD8B,QAA9BjhG,EAAU8c,gBACL,MAE8B,UAA9B9c,EAAU8c,gBACV,QAGA,UAETz1R,EAAOoO,uBAAkBh3P,EAAW,OAAQ8E,KAAKyulB,YACjD3qW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAYiP,GAC/D55W,EAAOmO,mBAEXgjQ,EAAW75f,UAAUm6lB,kBAAoB,WACrC,IAAIzxW,EAAS,IAAIiN,GACjBjN,EAAOoO,kBAAkB,IAAK,WAAYlyP,KAAKyulB,YAC/CzulB,KAAK42lB,YAAY9yW,GAMjBA,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKmvlB,cAC5DrrW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKgwlB,cAC5DlsW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKswlB,cAC5DxsW,EAAO+O,qBAAqB,QAAS,UAAM33P,EAAW8E,KAAK6vlB,aAC3D/rW,EAAO+O,qBAAqB,KAAM,iBAAa33P,EAAW,WA0B1D4oP,EAAOoO,kBAAkB,IAAK,OAAQlyP,KAAKyulB,YAa3C3qW,EAAO+O,qBAAqB,IAAK,MAAO7yP,KAAKyulB,WAAY,QAGzD3qW,EAAO+O,qBAAqB,IAAK,UAAW7yP,KAAKyulB,WAAY,OAC7D3qW,EAAOmO,kBAIPnO,EAAOoO,uBAAkBh3P,EAAW,yBAA0B8E,KAAKyulB,YACnE3qW,EAAOmO,kBAGPnO,EAAOoO,uBAAkBh3P,EAAW,iBAAkB8E,KAAKyulB,YAC3D,IAAIkP,EAAWtxlB,KAAK0zB,MAAM//B,KAAKs2lB,qBAAuBt2lB,KAAKkxlB,iBAC3DptW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAYkP,EAASzwlB,YACxE42O,EAAOmO,kBAEHjyP,KAAKw0lB,sBACL1wW,EAAOoO,uBAAkBh3P,EAAW,oBAAqB8E,KAAKyulB,YAC9D3qW,EAAOmO,mBAKXnO,EAAOoO,uBAAkBh3P,EAAW,SAAU8E,KAAKyulB,YACnD3qW,EAAOoO,uBAAkBh3P,EAAW,gBAAiB8E,KAAKyulB,YAC1D3qW,EAAO+O,0BAAqB33P,EAAW,OAAQ8E,KAAKyulB,WAAY,qBAChE3qW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAY,4CAC/D3qW,EAAO+O,0BAAqB33P,EAAW,MAAO8E,KAAKyulB,WAAY,MAC/D3qW,EAAOmO,kBACPnO,EAAOmO,kBACPnO,EAAOmO,kBACP,IAAIwqW,EAAiB,IAAIj7V,GAAe1d,EAAOgM,OAAQ9vP,KAAK6rlB,cAC5D7rlB,KAAK80lB,SAASjyY,QAAQ45Y,IAE1BxnG,EAAW75f,UAAUo6lB,wBAA0B,aAG/CvgG,EAAW75f,UAAUq6lB,uBAAyB,aAG9CxgG,EAAW75f,UAAUs6lB,mBAAqB,SAAU/sgB,KAGpDssa,EAAW75f,UAAUw6lB,0BAA4B,aAGjD3gG,EAAW75f,UAAUy6lB,uBAAyB,WAC1C71lB,KAAK49lB,sBAAsB,cAC3B59lB,KAAK49lB,sBAAsB,cAC3B59lB,KAAK49lB,sBAAsB,mBAC3B59lB,KAAK49lB,sBAAsB,mBAC3B59lB,KAAK49lB,sBAAsB,aAC3B59lB,KAAK49lB,sBAAsB,cAG/B3oG,EAAW75f,UAAUwimB,sBAAwB,SAAU/F,GACnD,GAAmC,IAA/B73lB,KAAK63f,eAAer7f,OAAxB,CAGA,IAAIqhmB,EACAC,EACJ,GAAK99lB,KAAK63f,eAAex0Q,YAAYw0W,GAKrC,IAAK,IAFDC,EAAS93lB,KAAK63f,eAAenwf,IAAImwlB,GACjCH,OAAKx8lB,EACAgB,EAAI,EAAGA,EAAI47lB,EAAOx6lB,KAAKd,OAAQN,IAAK,CACzC,IAAIoH,EAAKw0lB,EAAOx6lB,KAAKpB,GACrBw7lB,EAAKI,EAAOpwlB,IAAIpE,GACD,eAAXu0lB,GAAsC,oBAAXA,GAChB,cAAXA,GACAgG,EAAmB79lB,KAAK8rlB,WAAaxolB,EAAGrG,QAAQ,MAAO,IAAM,OAC7D6gmB,EAAuB99lB,KAAKsslB,mBAAqBhplB,EAAGrG,QAAQ,MAAO,IAAM,YACzE+C,KAAK+9lB,gBAAgBrG,EAAIp0lB,EAAIu6lB,EAAkBC,KAG/CD,EAAmB79lB,KAAK+rlB,WAAazolB,EAAGrG,QAAQ,MAAO,IAAM,OAC7D6gmB,EAAuB99lB,KAAKuslB,mBAAqBjplB,EAAGrG,QAAQ,MAAO,IAAM,YACzE+C,KAAKg+lB,gBAAgBtG,EAAIp0lB,EAAIu6lB,EAAkBC,OAK3D7oG,EAAW75f,UAAU2imB,gBAAkB,SAAUjzgB,EAAQxnF,EAAIu6lB,EAAkBC,GAC3E99lB,KAAKiogB,aAAen9a,EACpB,IAAIg5J,EAAS,IAAIiN,GACjBjN,EAAOoO,kBAAkB,IAAK,MAAOlyP,KAAKyulB,YAC1CzulB,KAAKi+lB,wBAAwBn6W,GAC7B,IAAI0/Q,EAAQxjgB,KAAKw2lB,WACjBx2lB,KAAKw2lB,WAAa1rgB,EAClB9qF,KAAK82lB,mBAAmBhzW,EAAQh5J,EAAOqhN,QAAQ,GAC/CnsS,KAAKw2lB,WAAahzF,EAClB1/Q,EAAOmO,kBACP,IAAIwqW,EAAiB,IAAIj7V,GAAe1d,EAAOgM,OAAQ+tW,GACvD79lB,KAAK80lB,SAASjyY,QAAQ45Y,GACtBz8lB,KAAKk+lB,qBAAqB56lB,EAAIw6lB,GAC9B99lB,KAAKiogB,kBAAe/sgB,GAGxB+5f,EAAW75f,UAAU8imB,qBAAuB,SAAUzG,EAAMqG,GAKxD,GAJiB99lB,KAAK25lB,mBAAmBt2W,YAAYo0W,GAIrD,CACI,IAAI3zW,EAAS,IAAIiN,GACjBjN,EAAOoO,uBAAkBh3P,EAAW,gBAAiB8E,KAAK+ulB,aAC1D/ulB,KAAKm+lB,yBAAyBn+lB,KAAK25lB,mBAAmBjylB,IAAI+vlB,GAAO3zW,GAajEA,EAAOmO,kBACP,IAAIwqW,EAAiB,IAAIj7V,GAAe1d,EAAOgM,OAAQguW,GACvD99lB,KAAK80lB,SAASjyY,QAAQ45Y,KAM9BxnG,EAAW75f,UAAU6imB,wBAA0B,SAAUn6W,GACrDA,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAKgvlB,YAC1DlrW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKmvlB,cAC5DrrW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAKivlB,YAC1DnrW,EAAO+O,qBAAqB,QAAS,UAAM33P,EAAW8E,KAAKuvlB,aAC3DzrW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAK8ulB,YAC1DhrW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAKwvlB,YAC1D1rW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKyvlB,cAC5D3rW,EAAO+O,qBAAqB,QAAS,SAAK33P,EAAW8E,KAAK4ulB,YAC1D9qW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAK2ulB,kBAC5D7qW,EAAO+O,qBAAqB,QAAS,UAAM33P,EAAW8E,KAAK0ulB,aAC3D5qW,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKiwlB,mBAC5DnsW,EAAO+O,qBAAqB,QAAS,YAAQ33P,EAAW8E,KAAKkwlB,oBAC7DlwlB,KAAK62lB,SAAS/yW,GACdA,EAAO+O,qBAAqB,QAAS,WAAO33P,EAAW8E,KAAKqwlB,kBAC5DvsW,EAAO+O,qBAAqB,KAAM,iBAAa33P,EAAW,iBAG9D+5f,EAAW75f,UAAU4imB,gBAAkB,SAAU/xe,EAAQ3oH,EAAIu6lB,EAAkBC,GAC3E99lB,KAAKiogB,aAAeh8Y,EACpB,IAAI63H,EAAS,IAAIiN,GACjBjN,EAAOoO,kBAAkB,IAAK,MAAOlyP,KAAKyulB,YAC1CzulB,KAAKi+lB,wBAAwBn6W,GAC7B9jP,KAAK82lB,mBAAmBhzW,EAAQ73H,EAAOkgL,QAAQ,GAC/CroD,EAAOmO,kBACP,IAAIwqW,EAAiB,IAAIj7V,GAAe1d,EAAOgM,OAAQ+tW,GACvD79lB,KAAK80lB,SAASjyY,QAAQ45Y,GACtBz8lB,KAAKk+lB,qBAAqB56lB,EAAIw6lB,IAElC7oG,EAAW75f,UAAU06lB,2BAA6B,WAC9C,IAAIhyW,EAAS,IAAIiN,GACjBjN,EAAOoO,uBAAkBh3P,EAAW,gBAAiB8E,KAAK+ulB,aAC1D/ulB,KAAKo+lB,sBAAsBt6W,EAAQ9jP,KAAK23lB,wBAAyB33lB,KAAK4tlB,cAAe,cACrF5tlB,KAAKo+lB,sBAAsBt6W,EAAQ9jP,KAAK23lB,wBAAyB33lB,KAAKutlB,gBAAiB,gBAEnFvtlB,KAAKQ,SAASo0S,MAAMp4S,OAAS,GAC7BwD,KAAKo+lB,sBAAsBt6W,EAAQ9jP,KAAK23lB,wBAAyB33lB,KAAK2tlB,iBAAkB,iBAE5F3tlB,KAAKq+lB,+BAA+Bv6W,GAMpC9jP,KAAKm+lB,yBAAyBn+lB,KAAKi5lB,eAAgBn1W,GASnDA,EAAOmO,kBACP,IAAIwqW,EAAiB,IAAIj7V,GAAe1d,EAAOgM,OAAQ9vP,KAAKqslB,kBAC5DrslB,KAAK80lB,SAASjyY,QAAQ45Y,GACtBz8lB,KAAKiogB,kBAAe/sgB,GAGxB+5f,EAAW75f,UAAU+imB,yBAA2B,SAAUlhJ,EAAQn5N,GAC9D,GAAIm5N,EAAOzgd,OAAS,EAIhB,IAAK,IAHDwvlB,EAAY,GACZsS,OAAoB,EACpBhhmB,EAAO2/c,EAAO3/c,KACTpB,EAAI,EAAGA,EAAIoB,EAAKd,OAAQN,IAAK,CAGlC,GADAoimB,EADarhJ,EAAOv1c,IAAIpK,EAAKpB,IACF6jU,YACvBtiU,EAAkB6gmB,GAClBtS,EAAYhslB,KAAKgslB,UAAY,UAC7BhslB,KAAKo+lB,sBAAsBt6W,EAAQxmP,EAAKpB,GAAI8D,KAAKkulB,aAAclC,EAAU/ulB,QAAQ,QAAS,SAEzF,CACD,IAAIi0J,EAAY,GACZqtc,EAAsB,GACtBv+lB,KAAKkvK,WAAWovb,EAAmB,2BACnCptc,EAAY,OACZqtc,EAAsBD,EAAkBrhmB,QAAQ,yBAA0B,KAErE+C,KAAKkvK,WAAWovb,EAAmB,6BACxCptc,EAAY,OACZqtc,EAAsBD,EAAkBrhmB,QAAQ,2BAA4B,KAEvE+C,KAAKkvK,WAAWovb,EAAmB,4BACxCptc,EAAY,QACZqtc,EAAsBD,EAAkBrhmB,QAAQ,0BAA2B,KAEtE+C,KAAKkvK,WAAWovb,EAAmB,2BACxCptc,EAAY,OACZqtc,EAAsBD,EAAkBrhmB,QAAQ,yBAA0B,KAErE+C,KAAKkvK,WAAWovb,EAAmB,4BACxCptc,EAAY,OACZqtc,EAAsBD,EAAkBrhmB,QAAQ,0BAA2B,KAEtE+C,KAAKkvK,WAAWovb,EAAmB,4BACxCptc,EAAY,QACZqtc,EAAsBD,EAAkBrhmB,QAAQ,0BAA2B,KAEtE+C,KAAKkvK,WAAWovb,EAAmB,2BACxCptc,EAAY,OACZqtc,EAAsBD,EAAkBrhmB,QAAQ,yBAA0B,KAErE+C,KAAKkvK,WAAWovb,EAAmB,2BACxCptc,EAAY,OACZqtc,EAAsBD,EAAkBrhmB,QAAQ,yBAA0B,KAErE+C,KAAKkvK,WAAWovb,EAAmB,4BACxCptc,EAAY,OACZqtc,EAAsBD,EAAkBrhmB,QAAQ,0BAA2B,KAEtE+C,KAAKkvK,WAAWovb,EAAmB,6BACxCptc,EAAY,OACZqtc,EAAsBD,EAAkBrhmB,QAAQ,2BAA4B,KAG5Ei0J,EAAY,QAEhB86b,EAAYhslB,KAAKgslB,UAAY1ulB,EAAKpB,GAAKg1J,EACvClxJ,KAAKo+lB,sBAAsBt6W,EAAQxmP,EAAKpB,GAAI8D,KAAKkulB,aAAclC,EAAU/ulB,QAAQ,QAAS,KAG1F,IAAIuhmB,EAAY,IAAIvuW,MAAMjwP,KAAKglR,cAAcu5U,KACzC9B,EAAiB,IAAIj7V,GAAeg9V,EAAWxS,GAEnDhslB,KAAK80lB,SAASjyY,QAAQ45Y,MAYtCxnG,EAAW75f,UAAU4pR,cAAgB,SAAUpzQ,GAC3C,IACIqzQ,EACAC,EACAC,EAEAC,EACAC,EACAo5U,EAPAn5U,EAAS,oEAQTppR,EAAI,EACJqpR,EAAc,EAGd99L,EAA6B,GADjC71E,EAAQA,EAAM3U,QAAQ,sBAAuB,KACrBT,OAAa,EAOrC,GANIoV,EAAM2N,OAAO3N,EAAMpV,OAAS,KAAO8oR,EAAO/lQ,OAAO,KACjDkoE,IAEA71E,EAAM2N,OAAO3N,EAAMpV,OAAS,KAAO8oR,EAAO/lQ,OAAO,KACjDkoE,IAEAA,EAAc,GAAM,EAOpB,MAAM,IAAI7mF,MAAM,6CAGpB,IADA,IAAI8kQ,EAAS,IAAI7zF,WAAyB,EAAdpqF,GACrBvrF,EAAI0V,EAAMpV,QAKbyoR,EAJOK,EAAO/mR,QAAQqT,EAAM2N,OAAOrjB,OAInB,GAHhBkpR,EAAOE,EAAO/mR,QAAQqT,EAAM2N,OAAOrjB,QAGL,EAC9BgpR,GAAgB,GAAPE,IAAc,GAHvBC,EAAOC,EAAO/mR,QAAQqT,EAAM2N,OAAOrjB,QAGE,EACrCipR,GAAgB,EAAPE,IAAa,GAHtBo5U,EAAOn5U,EAAO/mR,QAAQqT,EAAM2N,OAAOrjB,OAInCwpQ,EAAO6f,KAAiBN,EACX,KAATI,IACA3f,EAAO6f,KAAiBL,GAEf,KAATu5U,IACA/4V,EAAO6f,KAAiBJ,GAGhC,OAAOzf,GAEXuvP,EAAW75f,UAAUsjmB,4BAA8B,SAAU56W,GAGzD,IAAK,IADDxmP,EAAO0C,KAAKk5lB,eAAe57lB,KACtBpB,EAAI,EAAGA,EAAI8D,KAAKk5lB,eAAe57lB,KAAKd,OAAQN,IACjD8D,KAAKo+lB,sBAAsBt6W,EAAQxmP,EAAKpB,GAAI8D,KAAKkulB,aAAclulB,KAAKk5lB,eAAexxlB,IAAIpK,EAAKpB,MAIpG+4f,EAAW75f,UAAUijmB,+BAAiC,SAAUv6W,GAC5D9jP,KAAK2+lB,oBAAoB76W,EAAQ,cACjC9jP,KAAK2+lB,oBAAoB76W,EAAQ,cACjC9jP,KAAK2+lB,oBAAoB76W,EAAQ,mBACjC9jP,KAAK2+lB,oBAAoB76W,EAAQ,mBACjC9jP,KAAK2+lB,oBAAoB76W,EAAQ,aACjC9jP,KAAK2+lB,oBAAoB76W,EAAQ,cAGrCmxQ,EAAW75f,UAAUujmB,oBAAsB,SAAU76W,EAAQ+zW,GACzD,IACI+G,EADAf,EAAmB,GAEvB,GAAK79lB,KAAK63f,eAAex0Q,YAAYw0W,GAIrC,IAAK,IADDC,EAAS93lB,KAAK63f,eAAenwf,IAAImwlB,GAC5B37lB,EAAI,EAAGA,EAAI47lB,EAAOx6lB,KAAKd,OAAQN,IAAK,CACzC,IAAIoH,EAAKw0lB,EAAOx6lB,KAAKpB,GACN,eAAX27lB,GAAsC,oBAAXA,GAChB,cAAXA,GACAgG,EAAmB,SAAWv6lB,EAAGrG,QAAQ,MAAO,IAAM,OACtD2hmB,EAAU5+lB,KAAKytlB,gBAGfoQ,EAAmB,SAAWv6lB,EAAGrG,QAAQ,MAAO,IAAM,OACtD2hmB,EAAU5+lB,KAAKwtlB,eAEnBxtlB,KAAKo+lB,sBAAsBt6W,EAAQxgP,EAAIs7lB,EAASf,KAIxD5oG,EAAW75f,UAAUgjmB,sBAAwB,SAAUt6W,EAAQ+6W,EAAgBC,EAAkBC,GAC7Fj7W,EAAOoO,uBAAkBh3P,EAAW,oBAAgBA,GACpD4oP,EAAO+O,0BAAqB33P,EAAW,UAAMA,EAAW2jmB,GACxD/6W,EAAO+O,0BAAqB33P,EAAW,YAAQA,EAAW4jmB,GAC1Dh7W,EAAO+O,0BAAqB33P,EAAW,cAAUA,EAAW6jmB,EAAW9hmB,QAAQ,KAAM,KAAKA,QAAQ,KAAM,MAEpG6hmB,IAAqB9+lB,KAAKmulB,kBAAoBnulB,KAAKkvK,WAAW6vb,EAAY,YAAc/+lB,KAAKkvK,WAAW6vb,EAAY,aAAe/+lB,KAAKkvK,WAAW6vb,EAAY,cAmB/Jj7W,EAAO+O,0BAAqB33P,EAAW,kBAAcA,EAAW,YAEpE4oP,EAAOmO,mBAGXgjQ,EAAW75f,UAAUu8lB,sBAAwB,WACzC,MAAO,SAAW33lB,KAAKs0lB,iBAE3Br/F,EAAW75f,UAAU26lB,0BAA4B,WAC7C,IAAIjyW,EAAS,IAAIiN,GACjB/wP,KAAKg/lB,sBACLl7W,EAAOoO,uBAAkBh3P,EAAW,gBAAiB8E,KAAK+ulB,aAC1D/ulB,KAAKo+lB,sBAAsBt6W,EAAQ9jP,KAAK23lB,wBAAyB33lB,KAAK0tlB,gBAAiB1tlB,KAAK0rlB,cAI5F5nW,EAAOmO,kBACP,IAAIwqW,EAAiB,IAAIj7V,GAAe1d,EAAOgM,OAAQ9vP,KAAKoslB,qBAC5DpslB,KAAK80lB,SAASjyY,QAAQ45Y,IAE1BxnG,EAAW75f,UAAU46lB,sBAAwB,SAAUrtgB,GACnD,IAAIm7J,EAAS,IAAIiN,GACjBjN,EAAOoO,uBAAkBh3P,EAAW,QAAS,gEAM7C8E,KAAKi/lB,4BAA4Bn7W,EAAQ,OAAQ9jP,KAAKqtlB,qBACtDrtlB,KAAKi/lB,4BAA4Bn7W,EAAQ,MAAO9jP,KAAKwslB,iBAKjDxslB,KAAKi5lB,eAAez8lB,OAAS,GAAKwD,KAAKk5lB,eAAe18lB,OAAS,GAAKwD,KAAK25lB,mBAAmBn9lB,OAAS,KACrGwD,KAAKi/lB,4BAA4Bn7W,EAAQ,MAAO,aAChD9jP,KAAKi/lB,4BAA4Bn7W,EAAQ,MAAO,aAChD9jP,KAAKi/lB,4BAA4Bn7W,EAAQ,MAAO,eAChD9jP,KAAKi/lB,4BAA4Bn7W,EAAQ,MAAO,eAChD9jP,KAAKi/lB,4BAA4Bn7W,EAAQ,MAAO,aAChD9jP,KAAKi/lB,4BAA4Bn7W,EAAQ,MAAO,gBAChD9jP,KAAKi/lB,4BAA4Bn7W,EAAQ,MAAO,cAChD9jP,KAAKi/lB,4BAA4Bn7W,EAAQ,OAAQ,cACjD9jP,KAAKi/lB,4BAA4Bn7W,EAAQ,OAAQ,cACjD9jP,KAAKi/lB,4BAA4Bn7W,EAAQ,MAAO,cAChD9jP,KAAKi/lB,4BAA4Bn7W,EAAQ,MAAO,kBAapD9jP,KAAKk/lB,6BAA6Bp7W,EAAQ9jP,KAAK0rlB,aAAc1rlB,KAAK0slB,qBAIlE1slB,KAAKk/lB,6BAA6Bp7W,EAAQ9jP,KAAK4rlB,cAAe5rlB,KAAK8slB,sBAQnE9slB,KAAKk/lB,6BAA6Bp7W,EAAQ9jP,KAAK2rlB,UAAW3rlB,KAAK+slB,mBAE/D/slB,KAAKk/lB,6BAA6Bp7W,EAAQ9jP,KAAK6rlB,aAAc7rlB,KAAK2slB,qBAYlE3slB,KAAKm/lB,wBAAwBr7W,GAG7BA,EAAOmO,kBACP,IAAIwqW,EAAiB,IAAIj7V,GAAe1d,EAAOgM,OAAQ9vP,KAAKmslB,kBAC5DnslB,KAAK80lB,SAASjyY,QAAQ45Y,IAG1BxnG,EAAW75f,UAAU+jmB,wBAA0B,SAAUr7W,GACrD9jP,KAAKo/lB,kCAAkCt7W,EAAQ,cAC/C9jP,KAAKo/lB,kCAAkCt7W,EAAQ,cAC/C9jP,KAAKo/lB,kCAAkCt7W,EAAQ,mBAC/C9jP,KAAKo/lB,kCAAkCt7W,EAAQ,mBAC/C9jP,KAAKo/lB,kCAAkCt7W,EAAQ,aAC/C9jP,KAAKo/lB,kCAAkCt7W,EAAQ,cAGnDmxQ,EAAW75f,UAAUgkmB,kCAAoC,SAAUt7W,EAAQ4jR,GACvE,IAAI/+a,EACA02gB,EACJ,GAAKr/lB,KAAK63f,eAAex0Q,YAAYqkR,GAIrC,IAAK,IADDowF,EAAS93lB,KAAK63f,eAAenwf,IAAIgggB,GAC5BxrgB,EAAI,EAAGA,EAAI47lB,EAAOx6lB,KAAKd,OAAQN,IAAK,CACzC,IAAIoH,EAAKw0lB,EAAOx6lB,KAAKpB,GACI,eAArBwrgB,GAA0D,oBAArBA,GAChB,cAArBA,GACA23F,EAAWr/lB,KAAK8rlB,WAAaxolB,EAAGrG,QAAQ,MAAO,IAAM,OACrD0rF,EAAc3oF,KAAK6slB,oBAGnBwS,EAAWr/lB,KAAK+rlB,WAAazolB,EAAGrG,QAAQ,MAAO,IAAM,OACrD0rF,EAAc3oF,KAAK4slB,mBAEvB5slB,KAAKk/lB,6BAA6Bp7W,EAAQu7W,EAAU12gB,KAI5Dssa,EAAW75f,UAAU8jmB,6BAA+B,SAAUp7W,EAAQu7W,EAAU12gB,GAC5Em7J,EAAOoO,uBAAkBh3P,EAAW,gBAAYA,GAChD4oP,EAAO+O,0BAAqB33P,EAAW,gBAAYA,EAAW,IAAMmkmB,EAASpimB,QAAQ,KAAM,MAC3F6mP,EAAO+O,0BAAqB33P,EAAW,mBAAeA,EAAWytF,GACjEm7J,EAAOmO,mBAGXgjQ,EAAW75f,UAAU6jmB,4BAA8B,SAAUn7W,EAAQ5yF,EAAWvoE,GAC5Em7J,EAAOoO,uBAAkBh3P,EAAW,eAAWA,GAC/C4oP,EAAO+O,0BAAqB33P,EAAW,iBAAaA,EAAWg2J,GAC/D4yF,EAAO+O,0BAAqB33P,EAAW,mBAAeA,EAAWytF,GACjEm7J,EAAOmO,mBAGXgjQ,EAAW75f,UAAU4jmB,oBAAsB,WACvCh/lB,KAAKs0lB,gBAAkB,GAE3Br/F,EAAW75f,UAAU6G,MAAQ,aAGtBgzf,KC9iGPC,GAA4B,WAC5B,SAASA,IACLl1f,KAAKgvB,KAAO,GACZhvB,KAAKs/lB,gBAAkB,EACvBt/lB,KAAKu/lB,SAAU,EA6JnB,OA3JArqG,EAAW95f,UAAU2mC,cAAgB,WACjC,MAAO,cAKXmzd,EAAW95f,UAAUy4F,KAAO,SAAU26Z,EAAQ3+P,GAC1C7vP,KAAK+rD,UAAUyic,GACf,IAAI1qQ,EAAS,IAAI4S,GACjB12P,KAAKizP,cAAcnP,GACnBA,EAAOjwJ,KAAKg8J,EAAW,SAK3BqlQ,EAAW95f,UAAUwmQ,WAAa,SAAU4sP,GACxCxuf,KAAK+rD,UAAUyic,GACf,IAAI1hP,EAAe,IAAIpW,GACvB12P,KAAKizP,cAAc6Z,GACnB,IAAIp4G,EAAOo4G,EAAahd,OAExB,OADAgd,EAAaz6P,UAEN,IAAIy2E,QAAQ,SAAUC,EAASC,GAClCD,EAAQ2rE,MAGhBwgW,EAAW95f,UAAU2wD,UAAY,SAAUyic,GACvC,IAAIhuf,EAAWguf,EAAOgV,MAAM9M,iBAAiB30f,QAC7C/B,KAAKg1lB,YAAYx0lB,IAErB00f,EAAW95f,UAAU45lB,YAAc,SAAUx0lB,GACzCR,KAAKQ,SAAWA,EAChBR,KAAKi2lB,UAAYz1lB,EAASw2Q,UAE9Bk+O,EAAW95f,UAAU63P,cAAgB,SAAU6Z,GAC3C,IAAIk+B,OAAU9vS,EACV2/S,EAAe76S,KAAKQ,SAASw2Q,SAASx6Q,OAAS,EAC/Cw7lB,GAAgB,EACpBh4lB,KAAKw/lB,sBACL,IAAK,IAAItjmB,EAAI,EAAGA,GAAK2+S,EAAc3+S,IAC/B8uS,EAAUhrS,KAAKQ,SAASw2Q,SAAS96Q,GACjC87lB,EAAiB97lB,IAAM2+S,EACvB76S,KAAKy/lB,UAAU3yV,EAAck+B,EAAQmB,QACrCnsS,KAAK0/lB,aAAa5yV,GAClB9sQ,KAAK2/lB,gBAAgB30T,EAASgtT,GAElC,IAAK,IAAIt0kB,EAAI,EAAGA,GAAKm3R,EAAcn3R,IAC/BsnR,EAAUhrS,KAAKQ,SAASw2Q,SAAStzP,GACjC1jB,KAAK4/lB,oBAAoB9yV,EAAck+B,IAM/CkqN,EAAW95f,UAAUqkmB,UAAY,SAAU3yV,EAAc/gQ,GAGrD,IAAK,IAFD8zlB,EAAiB9zlB,EAAKvP,OAAS,EAC/BsjmB,OAAW5kmB,EACNgB,EAAI,EAAGA,GAAK2jmB,EAAgB3jmB,IAEjC,IADA4jmB,EAAW/zlB,EAAK7P,IACHyK,eAAe,WAAY,CACpC,IAAIo5lB,EAAcD,IAAa9/lB,KAAKogjB,SACpCpgjB,KAAKggmB,eAAelzV,EAAcgzV,EAAUC,QAG5C//lB,KAAKigmB,WAAWnzV,EAAcgzV,IAI1C5qG,EAAW95f,UAAU4kmB,eAAiB,SAAUlzV,EAAcmqP,EAAW8oG,GACrE,IAAK,IAAI7jmB,EAAI,EAAGA,EAAI+6f,EAAUutC,QAAQhoiB,OAAQN,IAAK,CAC/C,IAAI+hB,EAAOg5e,EAAUutC,QAAQtoiB,GACzB+hB,EAAKtX,eAAe,aACpB3G,KAAKu/lB,QAA6B,IAAnBthlB,EAAKyhf,UAEfzhf,EAAKtX,eAAe,UAAY3G,KAAKu/lB,SAC1Cv/lB,KAAKq+Q,UAAUvR,EAAc7uP,EAAK+Q,MAGrC+wkB,GACD//lB,KAAK0/lB,aAAa5yV,IAO1BooP,EAAW95f,UAAU6kmB,WAAa,SAAUnzV,EAAc1nM,GACtD,IAAK,IAAIlpE,EAAI,EAAGA,EAAIkpE,EAAMwnK,KAAKpwO,OAAQN,IAEnC,IAAK,IADDwpE,EAAMN,EAAMwnK,KAAK1wO,GACZwnB,EAAI,EAAGA,EAAIgiD,EAAIkB,MAAMpqE,OAAQknB,IAAK,CACvC,IAAIqkD,EAAOrC,EAAIkB,MAAMljD,GACrB1jB,KAAKy/lB,UAAU3yV,EAAc/kM,EAAKokO,UAO9C+oN,EAAW95f,UAAUwkmB,oBAAsB,SAAU9yV,EAAck+B,GAE3DvtS,EADiButS,EAAQ6sN,kBAI7B73f,KAAKkgmB,kBAAkBpzV,EAAck+B,EAAQ6sN,eAAe/sa,QAC5D9qF,KAAKkgmB,kBAAkBpzV,EAAck+B,EAAQ6sN,eAAe5rY,QAC5DjsH,KAAKkgmB,kBAAkBpzV,EAAck+B,EAAQ6sN,eAAeH,YAC5D13f,KAAKkgmB,kBAAkBpzV,EAAck+B,EAAQ6sN,eAAeJ,YAC5Dz3f,KAAKkgmB,kBAAkBpzV,EAAck+B,EAAQ6sN,eAAeF,iBAC5D33f,KAAKkgmB,kBAAkBpzV,EAAck+B,EAAQ6sN,eAAeD,mBAEhE1C,EAAW95f,UAAU8kmB,kBAAoB,SAAUpzV,EAAcm7P,GACzDA,GAAgBA,EAAa97N,QAC7BnsS,KAAKy/lB,UAAU3yV,EAAcm7P,EAAa97N,SAMlD+oN,EAAW95f,UAAUukmB,gBAAkB,SAAU30T,EAASqpT,GACtDr0lB,KAAKs/lB,mBAETpqG,EAAW95f,UAAUskmB,aAAe,SAAU57W,GAC1CA,EAAOoT,UAAU,KAErBg+P,EAAW95f,UAAUijR,UAAY,SAAUv6B,EAAQ90N,GAC/C80N,EAAO/hP,MAAMitB,IAEjBkme,EAAW95f,UAAUokmB,oBAAsB,WACvC,IACI1zK,EADAn8a,EAAM3P,KAAKQ,SAASw2Q,SAASx6Q,OAKjC,GAHImT,EAAM,IACNm8a,EAAM9rb,KAAKQ,SAASw2Q,SAASrnQ,EAAM,KAElClS,EAAkBqub,GAAM,CAEzB,IAAK,IADDq0K,KACKjkmB,EAAI,EAAGA,EAAI4vb,EAAI3/I,OAAO3vS,OAAQN,IAC/B4vb,EAAI3/I,OAAOjwS,GAAGyK,eAAe,YAC7Bw5lB,EAAW37lB,KAAKsnb,EAAI3/I,OAAOjwS,IAGnC,IAAIkkmB,EAASD,EAAW3jmB,OACpB4jmB,EAAS,IACTpgmB,KAAKogjB,SAAW+/C,EAAWC,EAAS,MAOhDlrG,EAAW95f,UAAUiX,QAAU,WAC3BrS,KAAKQ,cAAWtF,EAChB8E,KAAKogjB,cAAWlljB,EAChB8E,KAAKi2lB,eAAY/6lB,EACjB8E,KAAKg3Q,cAAW97Q,GAEbg6f,KC9JPF,GAA4B,WAI5B,SAASA,EAAWwO,GAEhBxjgB,KAAKgjjB,aAAU9njB,EACf8E,KAAK+0gB,eAAY75gB,EACjB8E,KAAKysgB,aAAUvxgB,EACf8E,KAAKiujB,sBAAmB/yjB,EACxB8E,KAAKkujB,oBAAiBhzjB,EACtB8E,KAAK40S,WAAQ15S,EACb8E,KAAKwuf,YAAStzf,EACd8E,KAAKQ,cAAWtF,EAChB8E,KAAKqgmB,uBAAoBnlmB,EACzB8E,KAAKwuf,OAASgV,EA2kBlB,OAzkBAxO,EAAW55f,UAAU2mC,cAAgB,WACjC,MAAO,cAEXizd,EAAW55f,UAAUqxD,MAAQ,WACzBzsD,KAAKqgmB,uBAAoBnlmB,EACzB8E,KAAKgjjB,aAAU9njB,EACf8E,KAAK40S,WAAQ15S,EACb8E,KAAKQ,cAAWtF,GAMpB85f,EAAW55f,UAAU2wD,UAAY,WAC7B,OAAOO,KAAKC,UAAUvsD,KAAK+B,UAK/Bizf,EAAW55f,UAAUwmQ,WAAa,SAAU4sP,GACxC,IAAI1hP,EAAe,IAAIpW,GACvBoW,EAAa/qQ,MAAM/B,KAAK+rD,aACxB,IAAI2oG,EAAOo4G,EAAahd,OAExB,OADAgd,EAAaz6P,UAEN,IAAIy2E,QAAQ,SAAUC,EAASC,GAClCD,EAAQ2rE,MAOhBsgW,EAAW55f,UAAU2G,MAAQ,SAAUkoD,EAAM4gd,EAAam4C,EAASjuC,EAAWsrF,GAS1E,GARIA,IACArgmB,KAAKqgmB,mBAAoB,GAE7BrgmB,KAAK40S,SACL50S,KAAKQ,YACLR,KAAKQ,SAASw2Q,YACdh3Q,KAAKQ,SAAS6xf,gBAAkBryf,KAAKgggB,qBAAqBhggB,KAAKwuf,OAAO6D,iBACtEryf,KAAKQ,SAASyxf,gBAAkBjyf,KAAKsgmB,qBAAqBtgmB,KAAKwuf,OAAOyD,iBAClEhoc,aAAgBo9c,IAAc27C,aAAmB37C,GAAY,CAE7D,IAAIu/D,EAAY38gB,EAAKgtc,UACjBspG,EAAUv9C,EAAQ/rD,UAClBuV,EAAYo6D,EAAUp+D,eACtBiE,EAAU8zF,EAAQ/3F,eAGlBx9N,GADa47R,EAAU9pE,WACb98f,KAAKwgmB,cAAcv2iB,EAAKgtc,UAAU6F,aAEhD,GADA98f,KAAKQ,SAASw2Q,SAASxyQ,KAAKwmS,GACxBwhO,IAAcC,GAAWhvgB,EAAkBgvgB,GAC3CzsgB,KAAKgjjB,QAAUA,EACfhjjB,KAAK+0gB,UAAYA,OAIjB,GAAIvI,aAAqBvG,GAAiB,CACtC,IAAI8jD,EAAav9C,EAAUuB,oBACvBi8C,EAAWv9C,EAAQsB,oBACnBg8C,EAAW/lD,cAAgBgmD,EAAShmD,cACpChkgB,KAAKysgB,QAAUA,EACfzsgB,KAAKkujB,eAAiBlujB,KAAKysgB,QAAQz9R,YAAchvO,KAAKysgB,QAAQhE,WAAW31M,WACzE9yT,KAAKiujB,iBAAmBzhD,EAAUx9R,kBAItChvO,KAAKysgB,QAAUA,EAGvB,GAAID,IAAcC,GAAWhvgB,EAAkB+ugB,GAAY,CACvD,IAAIvV,EAAYj3f,KAAKygmB,gBAAgBx2iB,EAAKgtc,WAC1CjsN,EAAQmB,OAAO3nS,KAAKyyf,GACfj3f,KAAKggmB,eAAe/1iB,EAAKgtc,UAAWA,EAAWjsN,EAAQmB,OAAQliP,EAAK67c,aAAc+E,OAItF,CACD,IAAIzlc,EAAQplE,KAAKgnkB,YAAYx6D,EAAUpE,YACvCp9N,EAAQmB,OAAO3nS,KAAK4gE,GACpBplE,KAAKigmB,WAAWzzF,EAAUpE,WAAYhjc,EAAOonc,EAAUnE,SAASvC,aAAc96N,EAAQmB,cAI1F,GAAInsS,KAAKwuf,OAAOzmQ,MAAMvrP,OAAS,EAAG,CAC9B,IAAI+wK,EAAOvtK,KAAKwuf,OAAOzmQ,MAAM,GACzBx6E,EAAKq4V,YAAYppgB,OAAS,GAC1BwD,KAAK0gmB,gBAAgBnzb,EAAKq4V,YAAY,GAAI,GAItD5lgB,KAAK2gmB,YAAY3gmB,KAAKwuf,QACtBxuf,KAAK4gmB,WAAW5gmB,KAAKwuf,QACrB,IAAI94M,EAAM11S,KAAKQ,SAEf,OADAR,KAAKysD,QACEipP,GAEXs/M,EAAW55f,UAAUslmB,gBAAkB,SAAU5jG,EAAYhrf,GACzD,KAAMgrf,aAAsBhG,IACxB,OAAO,EAEX,IAAI9rN,EAAUhrS,KAAKwgmB,cAAc1jG,GAGjC,GAFA98f,KAAKQ,SAASw2Q,SAASxyQ,KAAKwmS,GAC5BhrS,KAAK6gmB,mBAAmB7gmB,KAAKwuf,OAAOqJ,eAAeiF,EAAWhrf,OAAQk5R,GAClEhrS,KAAK8gmB,WAAWhkG,EAAWzF,aAAavlf,GAAQ,EAAGk5R,EAAQmB,QAC3D,OAAO,EAEX,IAAI7gQ,EAAOwxd,EACX,GACIA,EAAaxxd,EACbA,EAAOA,EAAKk7d,yBACPl7d,aAAgBwrd,IAAcxrd,EAAKx5B,QAAUgrf,EAAWhrf,OACjE,OAAO9R,KAAK0gmB,gBAAgBp1jB,EAAMx5B,IAEtCkjf,EAAW55f,UAAUylmB,mBAAqB,SAAUtpG,EAAKvsN,GACjDvtS,EAAkB85f,KAGtBvsN,EAAQ6sN,eAAe/sa,OAAS9qF,KAAKkgmB,kBAAkB3oG,EAAI,IAC3DvsN,EAAQ6sN,eAAe5rY,OAASjsH,KAAKkgmB,kBAAkB3oG,EAAI,IAC3DvsN,EAAQ6sN,eAAeJ,WAAaz3f,KAAKkgmB,kBAAkB3oG,EAAI,IAC/DvsN,EAAQ6sN,eAAeH,WAAa13f,KAAKkgmB,kBAAkB3oG,EAAI,IAC/DvsN,EAAQ6sN,eAAeF,gBAAkB33f,KAAKkgmB,kBAAkB3oG,EAAI,IACpEvsN,EAAQ6sN,eAAeD,gBAAkB53f,KAAKkgmB,kBAAkB3oG,EAAI,MAExEvC,EAAW55f,UAAU8kmB,kBAAoB,SAAUr6F,GAC/C,IAAIpogB,EAAkBoogB,GAAtB,CAGA,IAAIoC,KAKJ,OAJIpC,GAAUA,EAAOxO,cAAgBwO,EAAOxO,aAAa76f,OAAS,IAC9DyrgB,EAAa97N,UACbnsS,KAAK8gmB,WAAWj7F,EAAO7of,WAAY,EAAGirf,EAAa97N,SAEhD87N,IAEXjT,EAAW55f,UAAUolmB,cAAgB,SAAU1jG,GAC3C,IAAI9xN,KAcJ,OAbAA,EAAQ+rN,iBACR/rN,EAAQ+rN,cAAc35C,UAAY0/C,EAAW/F,cAAc35C,UAC3DpyK,EAAQ+rN,cAAcvmP,WAAassP,EAAW/F,cAAcvmP,WAC5Dw6B,EAAQ+rN,cAAc76O,WAAa4gP,EAAW/F,cAAc76O,WAC5D8uB,EAAQ+rN,cAAc36O,YAAc0gP,EAAW/F,cAAc36O,YAC7D4uB,EAAQ+rN,cAAc56O,UAAY2gP,EAAW/F,cAAc56O,UAC3D6uB,EAAQ+rN,cAAc16O,aAAeygP,EAAW/F,cAAc16O,aAC9D2uB,EAAQ+rN,cAAc86B,mBAAqB/0B,EAAW/F,cAAc86B,mBACpE7mP,EAAQ+rN,cAAc+6B,yBAA2Bh1B,EAAW/F,cAAc+6B,yBAC1E9mP,EAAQ+rN,cAAc4oC,eAAiB7iC,EAAW/F,cAAc4oC,eAChE30P,EAAQ+rN,cAAc8rB,eAAiB/lB,EAAW/F,cAAc8rB,eAChE73O,EAAQmB,UACRnB,EAAQ6sN,kBACD7sN,GAEXgqN,EAAW55f,UAAU0lmB,WAAa,SAAUj7F,EAAQ/zf,EAAOq6R,GACvD,KAAM05N,aAAkBY,IACpB,OAAO,EAEX,GAAIZ,aAAkB3O,GAAiB,CACnC,IAAID,EAAYj3f,KAAKygmB,gBAAgB56F,GAErC,GADA15N,EAAO3nS,KAAKyyf,GACRj3f,KAAKggmB,eAAen6F,EAAQ5O,EAAW9qN,GACvC,OAAO,MAGV,CACD,IAAIuwO,EAAc7W,EACdzgc,EAAQplE,KAAKgnkB,YAAYtqD,GAE7B,GADAvwO,EAAO3nS,KAAK4gE,GACRplE,KAAKigmB,WAAWvjF,EAAat3c,EAAO,EAAG+mO,GACvC,OAAO,EAGf,OAAO,GAEX6oN,EAAW55f,UAAU2lmB,eAAiB,SAAUl7F,EAAQ15N,GACpD,IAAI7gQ,EAAOu6d,EAAOW,mBAClB,OAAIl7d,aAAgBm7d,IAAen7d,EAAKgsd,gBAAgBxlf,QAAU+zf,EAAOvO,gBAAgBxlf,OAC9E9R,KAAK8gmB,WAAWj7F,EAAOW,mBAAoB,EAAGr6N,IAI7D6oN,EAAW55f,UAAU4kmB,eAAiB,SAAUtuF,EAAiBza,EAAW9qN,EAAQ1C,EAAWlsS,GACvFE,EAAkBgsS,KAClBA,EAAY,GAEZhsS,EAAkBF,KAClBA,EAAQ,GAGZ,IADA,IAAI+tC,EAAOome,EACJpme,aAAgB4rd,IAAiB,CACpC,GAAIl3f,KAAKghmB,WAAW11jB,EAAMm+P,EAAWlsS,EAAO05f,EAAUutC,SAClD,OAAO,EAEX/6P,EAAY,EACZlsS,EAAQ,EAER+tC,GADAome,EAAkBpme,GACKw7d,gBAE3B,OAAO9mgB,KAAK+gmB,eAAervF,EAAiBvlO,IAEhD6oN,EAAW55f,UAAU6lmB,aAAe,SAAUh3iB,EAAMu6e,GAChD,IAAK,IAAItoiB,EAAI,EAAGA,EAAI+tD,EAAK7vC,SAAS5d,OAAQN,IAAK,CAC3C,IAAI8E,EAAUipD,EAAK7vC,SAASle,GAC5B,KAAI8E,aAAmBmogB,IAAvB,CAGA,IAAI3qW,EAASx+J,KAAKkhmB,YAAYlgmB,GACzBvD,EAAkB+gK,IACnBgmY,EAAQhgiB,KAAKg6J,MAIzBw2V,EAAW55f,UAAU8lmB,YAAc,SAAUlgmB,GACzC,IAAIw9J,KAoBJ,OAnBAA,EAAO6zV,gBAAkBryf,KAAKgggB,qBAAqBh/f,EAAQqxf,iBACvDrxf,aAAmBy+f,GACnBjhW,EAAOkhW,UAAY1+f,EAAQ0+f,UAEtB1+f,aAAmB6ngB,IACxBrqW,EAAOuhK,YAAc/+T,EAAQ++T,YAC7BvhK,EAAOxoJ,MAAQ8of,GAAcQ,oBAAoBt+f,EAAQgV,OACzDwoJ,EAAOzoJ,OAAS+of,GAAcQ,oBAAoBt+f,EAAQ+U,SAErD/U,aAAmB8ngB,IACxBtqW,EAAOo1W,aAAe5ygB,EAAQ4ygB,aAC9Bp1W,EAAOjnI,KAAOv2B,EAAQu2B,MAEjBv2B,aAAmB4ngB,GACxBpqW,EAAOxvI,KAAOhuB,EAAQguB,KAGtBwvI,OAAStjK,EAENsjK,GAEXw2V,EAAW55f,UAAU4lmB,WAAa,SAAU/pG,EAAWxtN,EAAW99R,EAAQ64hB,GAItE,IAAK,IAHD3+gB,EAAa4jR,EACbgmQ,EAAezviB,KAAKgjjB,mBAAmB37C,IAAcrngB,KAAKgjjB,QAAQ/rD,YAAcA,EAChFlxe,EAAW0phB,EAAezviB,KAAKgjjB,QAAQl9C,aAAe7O,EAAUI,aAAa76f,OAAS,EACjFN,EAAI2pB,EAAY3pB,GAAK6pB,EAAU7pB,IAAK,CACzC,IAAImE,EAAQ42f,EAAUI,aAAan7f,GAC/B8D,KAAKgjjB,UAAY3ijB,GAAUopS,IAAcvtS,GAAgB,IAAXyP,EAC9C3L,KAAKk3P,UAAU72P,EAAOsL,EAAQ64hB,GAG9BxkiB,KAAKihmB,aAAa5gmB,EAAOmkiB,GAGjC,OAAOiL,GAEXz6C,EAAW55f,UAAU87P,UAAY,SAAUjtM,EAAMt+C,EAAQ64hB,GAKrD,IAAK,IAJDx2N,EAAQ/jR,IAASjqD,KAAKgjjB,QACtBm+C,GAAU,EACVnuI,GAAQ,EACRx2d,EAAS,EACJknB,EAAI,EAAGA,EAAIumC,EAAK7vC,SAAS5d,OAAQknB,IAAK,CAC3C,IAAI1iB,EAAUipD,EAAK7vC,SAASsJ,GAC5B,KAAI1iB,aAAmBmogB,IAAvB,CAGA,IAAI3qW,OAAStjK,EAIb,GAHAsB,GAAUwE,EAAQxE,OAClB2kmB,EAAU3kmB,EAASmP,EACnBqnd,EAAQhlJ,GAASxxU,GAAUwD,KAAK+0gB,UAC3BosF,EAAL,CAKA,GAFA3ic,EAASx+J,KAAKkhmB,YAAYlgmB,GAC1BwjiB,EAAQA,EAAQhoiB,QAAUgiK,EACtBhiK,EAASmP,GAAUqnd,EAAO,CAC1B,GAAIx0T,EAAO73J,eAAe,QAAS,CAC/B,IAAIkf,EAAarpB,EAASwE,EAAQxE,OAC9BwsgB,EAAgBr9f,EAASka,EACzBE,EAAWitc,EAAQhzd,KAAK+0gB,UAAYlvf,EAAa7kB,EAAQxE,OAC7DgiK,EAAOxvI,KAAOwvI,EAAOxvI,KAAK3K,UAAU2kf,EAAejjf,GAEvDpa,GAAU,EAEd,GAAIqnd,EACA,UAIZgiC,EAAW55f,UAAUqlmB,gBAAkB,SAAU/uF,GAC7C,IAAIza,KAIJ,OAHAA,EAAUhF,gBAAkBjyf,KAAKsgmB,qBAAqB5uF,EAAgBzf,iBACtEgF,EAAU5E,gBAAkBryf,KAAKgggB,qBAAqB0R,EAAgBrf,iBACtE4E,EAAUutC,WACHvtC,GAKXjC,EAAW55f,UAAU4kgB,qBAAuB,SAAUzhe,EAAQssC,GAC1D,IAAIwnb,KAKJ,OAJAyM,GAAckB,qBAAqB3N,EAAiBxnb,EAAUtsC,GAC1Dv+B,KAAKqgmB,oBAAsBx1hB,IAC3Bwnb,EAAgB0zC,aAAe/liB,KAAKgggB,qBAAqBzhe,GAAQ,IAE9D8zd,GAEX2C,EAAW55f,UAAUklmB,qBAAuB,SAAU/hkB,EAAQssC,GAC1D,IAAIonb,KAgBJ,OAfAA,EAAgBmL,WAAavyb,EAAWtsC,EAAO6+d,WAAa7+d,EAAO3hC,SAAS,cAC5Eq1f,EAAgBoL,YAAcxyb,EAAWtsC,EAAO8+d,YAAc9+d,EAAO3hC,SAAS,eAC9Eq1f,EAAgBrjP,gBAAkB/jM,EAAWtsC,EAAOqwO,gBAAkBrwO,EAAO3hC,SAAS,mBACtFq1f,EAAgBjvd,cAAgB6nC,EAAWtsC,EAAOyE,cAAgBzE,EAAO3hC,SAAS,iBAClFq1f,EAAgBqL,cAAgBzyb,EAAWtsC,EAAO++d,cAAgB/+d,EAAO3hC,SAAS,iBAClFq1f,EAAgBsL,aAAe1yb,EAAWtsC,EAAOg/d,aAAeh/d,EAAO3hC,SAAS,gBAChFq1f,EAAgBzgP,YAAc3mM,EAAWtsC,EAAOizO,YAAcjzO,EAAO3hC,SAAS,eAC9Eq1f,EAAgBuL,gBAAkB3yb,EAAWtsC,EAAOi/d,gBAAkBj/d,EAAO3hC,SAAS,mBACtFq1f,EAAgBgO,UAAaxigB,EAAkB8gC,EAAOw5d,gBAAqC78f,EAAxBqjC,EAAOw5d,UAAUxge,KACpF06d,EAAgBwL,aAAe5yb,EAAWtsC,EAAOk/d,aAAel/d,EAAO3hC,SAAS,gBAChFq1f,EAAgB+F,WAAah4f,KAAKohmB,gBAAgB7ikB,EAAOy5d,WAAYntb,GACrEonb,EAAgBkK,KAAOn8f,KAAKqhmB,UAAU9ikB,EAAO49d,MACzCn8f,KAAKqgmB,oBAAsBx1hB,IAC3Bonb,EAAgB8zC,aAAe/liB,KAAKsgmB,qBAAqB/hkB,GAAQ,IAE9D0zd,GAEX+C,EAAW55f,UAAUimmB,UAAY,SAAU/kG,GACvC,KAAI7+f,EAAkB6+f,IAAaA,EAAS9/f,OAAS,GAArD,CAIA,IAAK,IADD2/f,KACKjggB,EAAI,EAAGA,EAAIoggB,EAAS9/f,OAAQN,IAAK,CACtC,IAAIiqiB,EAAU7pC,EAASpggB,GACnBw+G,KACJA,EAAIxmG,SAAWiyhB,EAAQjyhB,SACvBwmG,EAAIshZ,eAAiBmqC,EAAQnqC,eAC7BthZ,EAAIuhZ,iBAAmBkqC,EAAQlqC,iBAC/BvhZ,EAAI84Z,UAAY2yB,EAAQ3yB,UACxBrX,EAAK33f,KAAKk2G,GAEd,OAAOyhZ,IAKXnH,EAAW55f,UAAUgmmB,gBAAkB,SAAU7ikB,EAAQssC,GACrD,IAAImtb,KACAspG,EAAc/ikB,EAAO3hC,SAAS,UAQlC,OAPKa,EAAkB6jmB,IAAgBA,GAAe,IAClDtpG,EAAWqC,OAASinG,EACpBtpG,EAAWkD,gBAAkB38d,EAAO3hC,SAAS,mBACzCoD,KAAK40S,MAAMr2S,QAAQggC,EAAO87d,QAAU,GACpCr6f,KAAK40S,MAAMpwS,KAAK+5B,EAAO87d,SAGxBrC,GAEXhD,EAAW55f,UAAU6kmB,WAAa,SAAUvjF,EAAat3c,EAAOtzD,EAAOq6R,GACnE,IAAI05N,EAAS6W,EAAYrlB,aAAavlf,GACtC,GAAI+zf,aAAkBM,IACdnmgB,KAAKuhmB,SAAS17F,EAAQzgc,EAAMwnK,MAC5B,OAAO,EAGf,IAAIthM,EAAOoxe,EACX,GAEIpxe,GADAoxe,EAAcpxe,GACKw7d,sBACdx7d,aAAgBm7d,IACzB,OAAOzmgB,KAAK+gmB,eAAerkF,EAAavwO,IAE5C6oN,EAAW55f,UAAUmmmB,SAAW,SAAU3kF,EAAWhwS,GACjD,KAAMgwS,aAAqBzW,IACvB,OAAO,EAEX,IAAIzgc,EAAM1lE,KAAKwhmB,UAAU5kF,GACzBhwS,EAAKpoO,KAAKkhE,GACV,IAAK,IAAIxpE,EAAI,EAAGA,EAAI0ghB,EAAUvlB,aAAa76f,OAAQN,IAAK,CACpD,IAAI2pgB,EAAS+W,EAAUvlB,aAAan7f,GACpC,GAAI2pgB,aAAkBI,IACd2W,EAAU9qgB,QAAU+zf,EAAO52R,WACvBxxO,EAAkBuC,KAAKiujB,mBAAqBpoD,EAAO72R,aAAehvO,KAAKiujB,oBACvExwjB,EAAkBuC,KAAKkujB,iBAAmBroD,EAAO72R,YAAchvO,KAAKkujB,iBACpElujB,KAAKyhmB,UAAU57F,EAAQngc,EAAIkB,OAC3B,OAAO,EAKvB,IAAIt7B,EAAOsxe,EACX,GAEItxe,GADAsxe,EAAYtxe,GACKk7d,yBACZl7d,aAAgB66d,IAAkB76d,EAAKx5B,QAAU8qgB,EAAU9qgB,OACpE,OAAO9R,KAAKuhmB,SAASj2jB,EAAMshM,IAE/BooR,EAAW55f,UAAUqmmB,UAAY,SAAU3zF,EAAYlnc,GACnD,IAAImB,EAAO/nE,KAAK0hmB,WAAW5zF,GAE3B,OADAlnc,EAAMpiE,KAAKujE,KACP/nE,KAAK8gmB,WAAWhzF,EAAW9wf,WAAY,EAAG+qD,EAAKokO,SAG5CnsS,KAAKysgB,mBAAmBxG,IAAkBjmgB,KAAKysgB,QAAQhE,aAAeqF,EAAWrF,YAE5FzT,EAAW55f,UAAU4rkB,YAAc,SAAUtqD,GACzC,IAAIt3c,KACJA,EAAMwnK,QACNxnK,EAAM6B,QACN,IAAK,IAAI/qE,EAAI,EAAGA,EAAIwghB,EAAYjT,YAAYpmc,QAAQ7mE,OAAQN,IACxDkpE,EAAM6B,KAAK/qE,GAAKwghB,EAAYjT,YAAYpmc,QAAQnnE,GAAGgogB,eAKvD,OAHA9+b,EAAM4+b,YAAchkgB,KAAK2hmB,iBAAiBjlF,EAAY1Y,aACtD5+b,EAAMnN,YAAcykd,EAAYzkd,YAChCmN,EAAM1iC,MAAQg6e,EAAYh6e,MACnB0iC,GAEX4vb,EAAW55f,UAAUommB,UAAY,SAAU5kF,GACvC,IAAIl3c,KAGJ,OAFAA,EAAIkB,SACJlB,EAAI4kc,UAAYtqgB,KAAK4hmB,eAAehlF,EAAUtS,WACvC5kc,GAEXsvb,EAAW55f,UAAUsmmB,WAAa,SAAU5zF,GACxC,IAAI/lc,KAIJ,OAHAA,EAAKokO,UACLpkO,EAAK0gc,WAAazogB,KAAK6hmB,gBAAgB/zF,EAAWrF,YAClD1gc,EAAKinK,YAAc8+R,EAAW9+R,YACvBjnK,GAEXitb,EAAW55f,UAAU0mmB,aAAe,SAAUC,GAC1C,IAAI3+F,KAIJ,OAHAA,EAAQh1c,gBAAkB2ziB,EAAS3ziB,gBACnCg1c,EAAQC,gBAAkB0+F,EAAS1+F,gBACnCD,EAAQE,aAAey+F,EAASz+F,aACzBF,GAEXpO,EAAW55f,UAAU4mmB,YAAc,SAAUC,GACzC,IAAIn7jB,KAOJ,OANAA,EAAOzQ,MAAQ4rkB,EAAQ5rkB,MACvByQ,EAAOmoe,aAAegzF,EAAQhzF,aAC9Bnoe,EAAOqhM,UAAY85X,EAAQ95X,UAC3BrhM,EAAO0sD,UAAYyugB,EAAQzugB,UAC3B1sD,EAAOkxB,OAASiqiB,EAAQjqiB,OACxBlxB,EAAO3G,MAAQ8hkB,EAAQ9hkB,MAChB2G,GAEXkud,EAAW55f,UAAU8mmB,aAAe,SAAUC,GAC1C,IAAIt0S,KASJ,OARAA,EAAQnhT,IAAM1M,KAAKgimB,YAAYG,EAASz1lB,KACxCmhT,EAAQrhT,KAAOxM,KAAKgimB,YAAYG,EAAS31lB,MACzCqhT,EAAQphT,MAAQzM,KAAKgimB,YAAYG,EAAS11lB,OAC1CohT,EAAQlhT,OAAS3M,KAAKgimB,YAAYG,EAASx1lB,QAC3CkhT,EAAQ80M,aAAe3igB,KAAKgimB,YAAYG,EAASx/F,cACjD90M,EAAQ+0M,WAAa5igB,KAAKgimB,YAAYG,EAASv/F,YAC/C/0M,EAAQhqL,WAAa7jI,KAAKgimB,YAAYG,EAASt+d,YAC/CgqL,EAAQ/pL,SAAW9jI,KAAKgimB,YAAYG,EAASr+d,UACtC+pL,GAEXmnM,EAAW55f,UAAUymmB,gBAAkB,SAAUO,GAC7C,IAAI35F,KAaJ,OAZAA,EAAW56M,QAAU7tT,KAAKkimB,aAAaE,EAAYv0S,SACnD46M,EAAWrF,QAAUpjgB,KAAK8hmB,aAAaM,EAAYh/F,SACnDqF,EAAWtsP,UAAYimV,EAAYjmV,UACnCssP,EAAWrsP,YAAcgmV,EAAYhmV,YACrCqsP,EAAWvsP,WAAakmV,EAAYlmV,WACpCusP,EAAWpsP,aAAe+lV,EAAY/lV,aACtCosP,EAAWvE,eAAiBk+F,EAAYl+F,eACxCuE,EAAWtE,mBAAqBi+F,EAAYj+F,mBAC5CsE,EAAWv6M,UAAYk0S,EAAYl0S,UACnCu6M,EAAW31M,WAAasvS,EAAYtvS,WACpC21M,EAAW73M,QAAUwxS,EAAYxxS,QACjC63M,EAAWt4c,kBAAoBiyiB,EAAYjyiB,kBACpCs4c,GAEXzT,EAAW55f,UAAUwmmB,eAAiB,SAAUS,GAC5C,IAAI/3F,KAYJ,OAXAA,EAAUv0f,OAASsslB,EAAWtslB,OAC9Bu0f,EAAUzF,sBAAwBw9F,EAAWx9F,sBAC7CyF,EAAU9F,WAAa69F,EAAW79F,WAClC8F,EAAU59e,SAAW21kB,EAAW31kB,SAChC49e,EAAUz8M,QAAU7tT,KAAKkimB,aAAaG,EAAWx0S,SACjDy8M,EAAUxF,WAAau9F,EAAWv9F,WAClCwF,EAAUvF,gBAAkBs9F,EAAWt9F,gBACvCuF,EAAUtF,oBAAsBq9F,EAAWr9F,oBAC3CsF,EAAUrF,UAAYo9F,EAAWp9F,UACjCqF,EAAUpF,eAAiBm9F,EAAWn9F,eACtCoF,EAAUnF,mBAAqBk9F,EAAWl9F,mBACnCmF,GAEXtV,EAAW55f,UAAUummB,iBAAmB,SAAUW,GAC9C,IAAIt+F,KAYJ,OAXAA,EAAYn2M,QAAU7tT,KAAKkimB,aAAaI,EAAaz0S,SACrDm2M,EAAYZ,QAAUpjgB,KAAK8hmB,aAAaQ,EAAal/F,SACrDY,EAAY3zM,YAAciyS,EAAajyS,YACvC2zM,EAAY5G,WAAaklG,EAAallG,WACtC4G,EAAYC,eAAiBq+F,EAAar+F,eAC1CD,EAAY7nP,UAAYmmV,EAAanmV,UACrC6nP,EAAY5nP,YAAckmV,EAAalmV,YACvC4nP,EAAY9nP,WAAaomV,EAAapmV,WACtC8nP,EAAY3nP,aAAeimV,EAAajmV,aACxC2nP,EAAYE,eAAiBo+F,EAAap+F,eAC1CF,EAAYG,mBAAqBm+F,EAAan+F,mBACvCH,GAEXhP,EAAW55f,UAAUulmB,YAAc,SAAUnyG,GACzCxuf,KACKQ,SAAS+C,UACd,IAAK,IAAIrH,EAAI,EAAGA,EAAIsyf,EAAOjrf,OAAO/G,OAAQN,IACtC8D,KAAKQ,SAAS+C,OAAOiB,KAAKxE,KAAKuimB,WAAW/zG,EAAOjrf,OAAOovG,QAAQz2G,MAGxE84f,EAAW55f,UAAUmnmB,WAAa,SAAU79lB,GACxC,IAAI6+hB,KAoBJ,OAnBAA,EAAOhsgB,KAAO7yB,EAAM6yB,KACD,cAAf7yB,EAAMgC,OACN68hB,EAAO78hB,KAAO,YACd68hB,EAAOtxC,gBAAkBjyf,KAAKsgmB,qBAAqB57lB,EAAMutf,iBACzDsxC,EAAOlxC,gBAAkBryf,KAAKgggB,qBAAqBt7f,EAAM2tf,kBAE1C,cAAf3tf,EAAMgC,OACN68hB,EAAO78hB,KAAO,YACd68hB,EAAOlxC,gBAAkBryf,KAAKgggB,qBAAqBt7f,EAAM2tf,kBAExD50f,EAAkBiH,EAAMu2f,WACzBsoC,EAAOtoC,QAAUv2f,EAAMu2f,QAAQ1je,MAE9B95B,EAAkBiH,EAAMkrD,QACzB2ze,EAAO3ze,KAAOlrD,EAAMkrD,KAAKr4B,MAExB95B,EAAkBiH,EAAM4mC,QACzBi4f,EAAOj4f,KAAO5mC,EAAM4mC,KAAK/T,MAEtBgsgB,GAEXvuC,EAAW55f,UAAUwlmB,WAAa,SAAUpyG,GACxC,IAAIgG,KACJx0f,KAAKQ,SAASo0S,SACd,IAAK,IAAI14S,EAAI,EAAGA,EAAIsyf,EAAO55M,MAAMp4S,OAAQN,IAAK,CAC1C,IAAI8sG,EAAOwlZ,EAAO55M,MAAM14S,GACpB8D,KAAK40S,MAAMr2S,QAAQyqG,EAAKqxZ,SAAW,IACnCr6f,KAAKQ,SAASo0S,MAAMpwS,KAAKxE,KAAKwimB,UAAUx5f,IACpCwrZ,EAAcj2f,QAAQyqG,EAAKuxZ,gBAAkB,GAC7C/F,EAAchwf,KAAKwkG,EAAKuxZ,iBAIpCv6f,KAAKQ,SAASg0f,iBACd,IAASt4f,EAAI,EAAGA,EAAIsyf,EAAOgG,cAAch4f,OAAQN,IAAK,CAClD,IAAIs+f,EAAehM,EAAOgG,cAAct4f,GACpC8D,KAAK40S,MAAMr2S,QAAQi8f,EAAaD,iBAAmB,GACnDv6f,KAAKQ,SAASg0f,cAAchwf,KAAKxE,KAAKyimB,kBAAkBjoG,MAIpExF,EAAW55f,UAAUqnmB,kBAAoB,SAAUC,GAC/C,IAAIloG,KACJA,EAAaD,eAAiBmoG,EAAcnoG,eAC5CC,EAAa70a,UACb,IAAK,IAAIzpF,EAAI,EAAGA,EAAIwmmB,EAAc/8gB,OAAOnpF,OAAQN,IAC7Cs+f,EAAa70a,OAAOzpF,GAAK8D,KAAK2imB,eAAeD,EAAc/8gB,OAAOzpF,IAEtE,OAAOs+f,GAEXxF,EAAW55f,UAAUonmB,UAAY,SAAUI,GACvC,IAAI55f,KAIJ,OAHAA,EAAKuxZ,eAAiBqoG,EAAMroG,eAE5BvxZ,EAAKqxZ,OAASuoG,EAAMvoG,OACbrxZ,GAEXgsZ,EAAW55f,UAAUunmB,eAAiB,SAAUE,GAC5C,IAAIpmG,KAQJ,OAPAA,EAAUpK,gBAAkBryf,KAAKgggB,qBAAqB6iG,EAAWxwG,iBACjEoK,EAAUxK,gBAAkBjyf,KAAKsgmB,qBAAqBuC,EAAW5wG,iBACjEwK,EAAU8c,gBAAkBspF,EAAWtpF,gBACvC9c,EAAUqc,iBAAmB+pF,EAAW/pF,iBACxCrc,EAAU+c,aAAeqpF,EAAWrpF,aACpC/c,EAAUgd,aAAeopF,EAAWppF,aACpChd,EAAUtC,QAAU0oG,EAAW1oG,QACxBsC,GAKXzH,EAAW55f,UAAUiX,QAAU,WAC3BrS,KAAK40S,WAAQ15S,EACb8E,KAAKgjjB,aAAU9njB,EACf8E,KAAK+0gB,eAAY75gB,EACjB8E,KAAKwuf,YAAStzf,GAEX85f,Kpb/lBPn1b,GAAc,GACdC,GAAa,GACb95D,MACA+5D,GAAc,WqbNd0wB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GAO5D07K,GAA+B,SAAUvpH,GAEzC,SAASupH,IACL,OAAkB,OAAXvpH,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAiB/D,OAnBAywF,GAAUoqH,EAAevpH,GAIzBN,IACI9pF,KACD2zM,EAAcz/M,UAAW,YAAQ,GACpC41F,IACI9pF,KACD2zM,EAAcz/M,UAAW,aAAS,GACrC41F,IACI9pF,KACD2zM,EAAcz/M,UAAW,eAAW,GACvC41F,IACI9pF,KACD2zM,EAAcz/M,UAAW,eAAW,GACvC41F,IACI9pF,KACD2zM,EAAcz/M,UAAW,sBAAkB,GACvCy/M,GACTz2I,IAES0+hB,IACPlpZ,KAAM,iBACNhvI,IAAK,QACLtuC,QAAS,YACT0kH,SAAU,WACVzC,MAAO,UACPwkd,OAAQ,WACRC,UAAW,eACX9gmB,MAAO,eACP+2I,GAAIywE,GAAgBzwE,GACpB//C,MAAOwwH,GAAgBxwH,MACvByrB,SAAU+kG,GAAgB/kG,SAC1By8V,SAAU,cAKV6hJ,GAA8B,SAAU3xgB,GAKxC,SAAS2xgB,EAAajwlB,EAAShS,GAC3B,OAAOswF,EAAOhwF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KA4zBlD,OAj0BAywF,GAAUwygB,EAAc3xgB,GAQxB2xgB,EAAa7nmB,UAAU8nmB,cAAgB,SAAU54lB,EAAMuoF,EAASC,GAC5D,IAAIq9R,EAAc,IAAI7xX,OAClB6kmB,EAAc,IAAI7kmB,OAElB8S,EAAW,IAAIjW,SAAS,OAAQ,eACpCg1X,EAAY/+W,EAAS9G,IAASuoF,EAAQzhF,EAAS9G,IAC/C64lB,EAAY/xlB,EAAS9G,IAASwoF,EAAQ1hF,EAAS9G,IAC/C,IAAI/N,EAAO,IAAI+B,OAGf,OAFA/B,EAAK4zX,YAAcA,EACnB5zX,EAAK4mmB,YAAcA,EACZ5mmB,GAEX0mmB,EAAa7nmB,UAAUgomB,eAAiB,SAAUp0kB,EAAM4wC,EAAY6sG,GAChE,IAAI1vK,EAAQ,KASZ,OARKU,EAAkBuC,KAAKqjmB,YAEpBtmmB,EADA6iE,EACQ5/D,KAAKsjmB,eAAet0kB,GAAM,EAAMy9I,GAGhCzsK,KAAKsjmB,eAAet0kB,GAAM,EAAOy9I,IAG1C1vK,GAGXkmmB,EAAa7nmB,UAAUkomB,eAAiB,SAAUt0kB,EAAM4wC,EAAY6sG,EAAc82b,GAC9E,IAAIxjmB,EAAQC,KACRjD,EAAQ,KACRwmmB,IACAxmmB,EAAQiyB,GAEZ,IAAIq5C,EAAaroE,KAAKqjmB,SAClB72kB,EAASxsB,KAAKwsB,OACd9lB,EAAO1G,KAAKwjmB,WAAWn7hB,GAAY0uI,OACvC,GAAa,WAATrwM,GAA8B,WAATA,GAA8B,YAATA,EAC1C,IAAK,IAAItI,EAAK,EAAGqlmB,EAAep7hB,EAAYjqE,EAAKqlmB,EAAajnmB,OAAQ4B,IAAM,CACxE,IAAI6f,EAAOwllB,EAAarlmB,GACnBX,EAAkBwgB,KACfwuJ,EACA1vK,EAAQiD,KAAK0jmB,eAAeh6kB,OAAOzL,GAAO+Q,EAAM4wC,GAG5CA,EACI5/D,KAAK2jmB,gBAAgBj6kB,OAAOzL,GAAO+Q,KACnCjyB,EAAQiD,KAAK4jmB,aAAal6kB,OAAOzL,GAAO+Q,EAAM4wC,IAI9C5/D,KAAK6jmB,mBAAmBn6kB,OAAOzL,GAAO+Q,KACtCjyB,EAAQiD,KAAK4jmB,aAAal6kB,OAAOzL,GAAO+Q,EAAM4wC,EAAY2jiB,UAQ1E3jiB,EACAyI,EAAWn+B,OAAO,SAAUjsB,GACpBle,EAAM4jmB,gBAAgB/mmB,EAAS4vB,EAAOwC,KAAM/Q,GAAM/Q,WAAY8hB,KAC9DjyB,EAAQH,EAAS4vB,EAAOzvB,MAAOkhB,MAKnCsllB,EACAl7hB,EAAWn+B,OAAO,SAAUjsB,GACxB,IAAI6llB,EAAYlnmB,EAAS4vB,EAAOzvB,MAAOkhB,GAClCxgB,EAAkBqmmB,IAAcA,EAAU52lB,aAAenQ,EAAMmQ,aAChEnQ,EAAQH,EAAS4vB,EAAOwC,KAAM/Q,MAKtCoqD,EAAWn+B,OAAO,SAAUjsB,GACpBle,EAAM8jmB,mBAAmBjnmB,EAAS4vB,EAAOwC,KAAM/Q,GAAO+Q,KACtDjyB,EAAQH,EAAS4vB,EAAOzvB,MAAOkhB,MAMnD,OAAOlhB,GAEXkmmB,EAAa7nmB,UAAUsomB,eAAiB,SAAUzllB,EAAM+Q,EAAM4wC,GAC1D,IAAIrzC,EAAW01C,GAAS2uG,iBAAiBlnJ,OAAOzL,IAC5C8llB,EAAW9hiB,GAAS2uG,iBAAiB5hJ,EAAK9hB,YAC1CnQ,EAAQ,KAWZ,OAVI6iE,EACI5/D,KAAK2jmB,gBAAgBp3kB,EAAUw3kB,KAC/BhnmB,EAAQiD,KAAK4jmB,aAAal6kB,OAAOzL,GAAO+Q,EAAM4wC,IAI9C5/D,KAAK6jmB,mBAAmBn6kB,OAAOzL,GAAO+Q,KACtCjyB,EAAQiD,KAAK4jmB,aAAal6kB,OAAOzL,GAAO+Q,EAAM4wC,IAG/C7iE,GAEXkmmB,EAAa7nmB,UAAUuomB,gBAAkB,SAAU1llB,EAAM+Q,GACrD,OAAOtF,OAAOzL,GAAMrI,gBAAkBoZ,EAAK9hB,WAAW0I,eAE1DqtlB,EAAa7nmB,UAAUyomB,mBAAqB,SAAU5llB,EAAM+Q,GACxD,OAAOtF,OAAOzL,KAAU+Q,EAAK9hB,YAEjC+1lB,EAAa7nmB,UAAUwomB,aAAe,SAAUr3kB,EAAUy3kB,EAAWpkiB,EAAY2jiB,GAC7E,IACIl7hB,EAAaroE,KAAKqjmB,SAClB38lB,EAAO1G,KAAKwjmB,WAAWn7hB,GAAY0uI,OAYvC,OAXIwsZ,EACQh3kB,EAASrf,WAGb0yD,EACiB,WAATl5D,EAAoBgjB,OAAO6C,GAAYvsB,KAAK44N,kBAAkBlvM,OAAO6C,IAG5D,WAAT7lB,EAAoBs9lB,EAAYhkmB,KAAK44N,kBAAkBorY,IAK3Ef,EAAa7nmB,UAAU6omB,WAAa,SAAUC,GAC1C,GAA+B,qBAA3BlkmB,KAAKmkmB,mBAA2E,uBAA/BnkmB,KAAKokmB,sBAAgD,CACtG,IAAIn1lB,EAAWi1lB,EAAgBlkmB,KAAKokmB,sBAAwBpkmB,KAAKmkmB,kBAEjEnkmB,KAAKgpG,KAAKhnG,UAAY,GAEtB,IAAK,IAAI5D,EAAK,EAAGyE,EADAmM,GAAQC,EACHgrD,KAAoB77D,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC5D,IAAI6f,EAAOpb,EAAGzE,GACd4B,KAAKgpG,KAAKrnG,YAAYsc,QAGzB,CAEDje,KAAKi5H,KAAO,IAAI7a,GAAK,aADF+lf,kBAAmB,mBAAoBC,sBAAuB,sBACnCpkmB,KAAKgO,QACnDhO,KAAKgpG,KAAKhnG,UAAYkimB,EAClBlkmB,KAAKi5H,KAAKh/C,YAAY,yBAA2Bj6E,KAAKi5H,KAAKh/C,YAAY,uBAGnFgphB,EAAa7nmB,UAAUipmB,eAAiB,SAAUtnmB,GAG9C,OADOiD,KAAKsjmB,eAAevmmB,GAAO,GAAO,GAAO,IAGpDkmmB,EAAa7nmB,UAAUw9N,kBAAoB,SAAU77N,GACjD,GAAIiD,KAAKqjmB,UAAYrjmB,KAAKqjmB,SAAS7mmB,OAAQ,CACvC,IAAIyhB,EAAOje,KAAKwjmB,WAAWxjmB,KAAKqjmB,UAChC,GAAsF,iBAA3EzmmB,EAAUoD,KAAKwsB,OAAOzvB,MAAQiD,KAAKwsB,OAAOzvB,MAAQ,QAAUkhB,EAAKA,OACrD,WAAhBA,EAAK84L,OACR,OAAOniL,SAAS73B,EAAO,IAE3B,GAAsF,kBAA3EH,EAAUoD,KAAKwsB,OAAOzvB,MAAQiD,KAAKwsB,OAAOzvB,MAAQ,QAAUkhB,EAAKA,OACrD,YAAhBA,EAAK84L,OACR,MAAkB,SAAVh6M,EAGhB,OAAOA,GAKXkmmB,EAAa7nmB,UAAU05H,aAAe,WAC9B90H,KAAKgpG,MACLhpG,KAAKskmB,kBAAkB9/lB,KAAKxE,KAAKgpG,MAErChpG,KAAKkT,UAAYvP,EAAS3D,KAAKskmB,kBAAmBxB,GAAoBl4hB,KAClEvmE,EAAYrE,KAAKskmB,kBAAmBxB,GAAoBl4hB,MAMhEq4hB,EAAa7nmB,UAAU25G,WAAa,WAEhC,GADA/0G,KAAKq9H,WAAY,EACY,OAAzBr9H,KAAKgB,QAAQgC,QAAkB,CAC/B,IAAIuhmB,EAAc9kd,GAASg3D,sBAAsBz2M,KAAKgB,SACtDhB,KAAKgH,eAAgBwlB,QAAUwC,KAAM,OAAQjyB,MAAO,UAAY,GAChEiD,KAAKwkmB,UAAUD,EAAavkmB,KAAKwsB,aAEhC,GAA6B,WAAzBxsB,KAAKgB,QAAQgC,QAAsB,EACvBhD,KAAKqoE,sBAAsB7pE,MAASwB,KAAKqoE,WAAW7rE,OAAS,GACvEiB,EAAkBuC,KAAKqoE,cAE1BroE,KAAKykmB,2BAITzkmB,KAAK0kmB,YAAY1kmB,KAAKqoE,WAAYroE,KAAKwsB,OAAQxsB,KAAK2gE,QAO5DsiiB,EAAa7nmB,UAAUy3G,eAAiB,WACpC,OAAO7yG,KAAKqzG,kBAMhB4vf,EAAa7nmB,UAAUqsI,WAAa,WAC5BznI,KAAKolB,QACLplB,KAAKgB,QAAQwC,aAAa,gBAAiB,SAG3CxD,KAAKgB,QAAQwC,aAAa,gBAAiB,SAInDy/lB,EAAa7nmB,UAAUqpmB,oBAAsB,WACzC,IAAIzjmB,EAAUhB,KAAKgB,QACfwrB,GAAWzvB,MAAO,QAASiyB,KAAM,QACjCu1kB,KACArrgB,EAAQl4F,EAAQQ,iBAAiB,mBACjC06F,EAASl7F,EAAQQ,iBAAiB,iBAEtC,GADAxB,KAAK2kmB,kBAAkBJ,EAAarogB,EAAQ1vE,GACxC0sE,EAAM18F,OAAQ,CACd,IAAK,IAAIN,EAAI,EAAGA,EAAIg9F,EAAM18F,OAAQN,IAAK,CACnC,IAAI+hB,EAAOi7E,EAAMh9F,GACb0omB,KACJA,EAAYp4kB,EAAOwC,MAAQ/Q,EAAK5K,MAChCuxlB,EAAYl4kB,UAAW,EACvB,IAAIrsB,EAAQ4d,EAAKzc,iBAAiB,UAClC+imB,EAAY//lB,KAAKogmB,GACjB5kmB,KAAK2kmB,kBAAkBJ,EAAalkmB,EAAOmsB,GAEnCxrB,EAAQQ,iBAAiB,iBAEzCxB,KAAKwsB,OAAOwC,KAAOxC,EAAOwC,KAC1BhvB,KAAKwsB,OAAOzvB,MAAQyvB,EAAOzvB,MAC3BiD,KAAKwkmB,UAAUD,EAAa/3kB,IAEhCy2kB,EAAa7nmB,UAAUupmB,kBAAoB,SAAUjliB,EAAO1sD,EAASwZ,GACjE,IAAK,IAAIpuB,EAAK,EAAGosG,EAAYx3F,EAAS5U,EAAKosG,EAAUhuG,OAAQ4B,IAAM,CAC/D,IAAI89F,EAASsO,EAAUpsG,GACnBmqE,KACJA,EAAK/7C,EAAOwC,MAAQktE,EAAOh8B,UAC3BqI,EAAK/7C,EAAOzvB,OAASm/F,EAAOrpF,aAAa2Z,EAAOzvB,OAASm/F,EAAOrpF,aAAa2Z,EAAOzvB,OAASm/F,EAAOh8B,UACpGR,EAAMl7D,KAAK+jE,KAOnB06hB,EAAa7nmB,UAAUqX,UAAY,WAE/BzS,KAAK6kmB,aAAe,EACpB7kmB,KAAKskmB,qBACLtkmB,KAAK8kmB,aAAc,EACnB9kmB,KAAK+kmB,eAAgB,GAKzB9B,EAAa7nmB,UAAUspmB,YAAc,SAAUr8hB,EAAY77C,EAAQm0C,GAC/D,IAAI5gE,EAAQC,KACZwsB,EAASA,GAAkBxsB,KAAKwsB,OAChC,IAAIorL,EACJ53M,KAAK0tY,UAAW,EAChB,IAAIngY,GAAcqsB,QAAQ,EAAOr9B,KAAM8rE,EAAY1H,MAAOA,GAE1D,GADA3gE,KAAK2mB,QAAQ,cAAepZ,IACxBA,EAAUqsB,OAId,GADA55B,KAAKgiB,cACDqmD,aAAsBC,GAAa,CAEnC,GADAtoE,KAAK8kmB,aAAc,EACf9kmB,KAAK+kmB,cAEL,YADA/kmB,KAAKglmB,iBAAiBx4kB,GAG1Bjf,EAAUhR,KAAKuvK,aAAa9rK,KAAKihN,SAAS1zM,EAAUozD,QAAQuxI,KAAK,SAAUrxM,GAEvE,GADAd,EAAM4mB,QAAQ,iBAAkB9lB,IAC5BA,EAAE+4B,OAAN,CAGA,IAAIomC,EAAYn/D,EAAE9B,OACO,IAArBihE,EAAUxjE,SACVuD,EAAMglmB,eAAgB,GAE1BntZ,EAAY73M,EAAMqmF,YAAYpmB,EAAWxzC,GACzCzsB,EAAMklmB,iBAAiBrtZ,EAAW53I,EAAWn/D,GAC7Cd,EAAM+kmB,aAAc,EACpB/kmB,EAAMgjB,cACNhjB,EAAM4mB,QAAQ,aAAe+4C,MAAOM,EAAWn/D,EAAGA,OACnD0yM,MAAM,SAAU1yM,GACfd,EAAM+kmB,aAAc,EACpB/kmB,EAAMmlmB,gBAAgBrkmB,GACtBd,EAAMgjB,oBAGT,CACD,IAAI6oJ,EAAc,IAAItjG,GAAY/6D,EAAUhR,MAGxC4omB,GAAkBvrkB,QAAQ,EAAO76B,OADxBiB,KAAKihN,SAAS1zM,EAAUozD,OAAQmI,aAAa8iG,IAG1D,GADA5rK,KAAK2mB,QAAQ,iBAAkBw+kB,GAC3BA,EAAcvrkB,OACd,OAEJg+K,EAAY53M,KAAKomF,YAAY++gB,EAAcpmmB,OAAQytB,GACnDxsB,KAAKilmB,iBAAiBrtZ,EAAWutZ,EAAcpmmB,QAC/CiB,KAAK+iB,cACL/iB,KAAK2mB,QAAQ,aAAe+4C,MAAOyliB,EAAcpmmB,WAGzDkkmB,EAAa7nmB,UAAU4pmB,iBAAmB,SAAUx4kB,GAChD,IAAIwzC,KACJhgE,KAAKilmB,iBAAiBjlmB,KAAKomF,YAAYpmB,EAAWxzC,GAASwzC,GAC3DhgE,KAAK8kmB,aAAc,EACnB9kmB,KAAK+iB,eAETkglB,EAAa7nmB,UAAU4mB,YAAc,aAGrCihlB,EAAa7nmB,UAAU2nB,YAAc,aAGrCkglB,EAAa7nmB,UAAU8pmB,gBAAkB,SAAUrkmB,GAC/Cb,KAAKs4M,iBACLt4M,KAAK2mB,QAAQ,gBAAiB9lB,GAC9Bb,KAAKikmB,YAAW,GAChBtgmB,GAAU3D,KAAKgpG,MAAO85f,GAAoBC,SAE9CE,EAAa7nmB,UAAU6pmB,iBAAmB,SAAUrtZ,EAAW5uG,EAAMnoG,GACjEb,KAAKqjmB,SAAWr6f,EAChBhpG,KAAKgpG,KAAKhnG,UAAY,GACtBhC,KAAKgpG,KAAKrnG,YAAYi2M,GACtB53M,KAAKs4M,cAAgBt4M,KAAKgpG,KAAKxnG,iBAAiB,IAAMshmB,GAAoB7pd,IAC1Ej5I,KAAK43M,UAAY53M,KAAKgpG,KAAKrmG,cAAc,MACzC3C,KAAKolmB,WAAWplmB,KAAKgpG,KAAMA,EAAMhpG,KAAKq9H,YAE1C4le,EAAa7nmB,UAAUgqmB,WAAa,SAAUl+Y,EAAal+G,EAAMq0B,GAC7D,IAAIgoe,EAAYn+Y,EAAYvkN,cAAc,IAAMmgmB,GAAoB7pd,IAChEojP,EAAen1K,EAAYvkN,cAAc,IAAMmgmB,GAAoB9hd,UACnEqkd,IAAchpO,GACd14X,GAAU0hmB,GAAYvC,GAAoB5gmB,OAE1C8mG,EAAKxsG,QAAU,GACfwD,KAAKikmB,aACLtgmB,GAAUujN,GAAc47Y,GAAoBC,SAG5C77Y,EAAYpjN,UAAUS,OAAOu+lB,GAAoBC,QAEjD/imB,KAAKw3M,eACLx3M,KAAK84M,oBAAoBoO,IAMjC+7Y,EAAa7nmB,UAAU6lN,SAAW,SAAUtgJ,GACxC,OAAOA,IAAgB3gE,KAAK2gE,MAAQ3gE,KAAK2gE,MAAQ,IAAIwH,KAKzD86hB,EAAa7nmB,UAAU09M,oBAAsB,SAAUwsZ,GACnD,GAA4B,OAAxBtlmB,KAAKwsB,OAAOurL,SAAoB/3M,KAAKqoE,YAAcroE,KAAKgB,QAAQ2B,cAAc,IAAMmgmB,GAAoB5pgB,OACxG,CAAA,IAAI7wB,EAAaroE,KAAKqoE,WAClB0wI,EAAcusZ,EAAQ9jmB,iBAAiB,IAAMshmB,GAAoB5pgB,OACnDumD,GAASq5D,oBAAoB94M,KAAKw3M,cAAenvI,EAAYroE,KAAKwsB,OAAOvpB,WAAY81M,KAM/GkqZ,EAAa7nmB,UAAU08N,gBAAkB,SAAUzvJ,EAAY77C,GACvD67C,GAAc77C,EAAOurL,SAAW/3M,KAAKgB,QAAQ2B,cAAc,aACvD6pB,EAAOurL,UACgB,SAAnB/3M,KAAKu2M,YACLluI,EAAaroE,KAAKulmB,oBAAoBl9hB,IAE1CA,EAAao3E,GAAS84D,gBAAgBlwI,EAAY77C,EAAOvpB,WAAYjD,KAAKu2M,YAE9E5yM,GAAU3D,KAAKgpG,MAAO85f,GAAoB1hJ,WAG1C/4Y,EAAaroE,KAAKulmB,oBAAoBl9hB,GAE1C,IAAIr1D,EAAUhT,KAAKwlmB,WAAWn9hB,EAAY77C,GAC1C,OAAOizH,GAASw4D,WAAWj4M,KAAKmB,cAAeknE,EAAYr1D,GAAS,IAGxEiwlB,EAAa7nmB,UAAUoqmB,WAAa,SAAUn9hB,EAAY77C,GACtD,IAAIotD,GAAUn8E,EAAkB+uB,EAAOotD,SACnC6rhB,EAAehomB,EAAkB+uB,EAAOvpB,YACpBupB,EAApBA,EAAOvpB,WAKX,OAAOvE,KAJwB,OAAhB8tB,EAAOwC,MAAkC,OAAjBxC,EAAOzvB,OAC1CyvB,OAAQi5kB,EACRttc,SAAUv+E,EAASs7H,gBAAkBkC,cAAe,kBAClD5qL,QAAUzvB,MAAO,SACIyvB,GAAQ,IAGvCy2kB,EAAa7nmB,UAAUsqmB,kBAAoB,SAAU7kmB,GAC7CpD,EAAkBuC,KAAK2lmB,sBACvB3lmB,KAAK2lmB,mBAAqB3lmB,KAAKmB,cAAc,OAASkC,UAAWy/lB,GAAoBE,YAChFhjmB,KAAKgpG,KAAKrmG,cAAc,MAAMmB,UAAUK,SAAS2+lB,GAAoB5pgB,SACtEl5F,KAAK2lmB,mBAAmBjhmB,MAAMosC,QAAU,QAE5CjsC,GAAS7E,KAAK2lmB,oBAAqB3lmB,KAAKgpG,MACxChpG,KAAK4lmB,kBAEJnomB,EAAkBuC,KAAK2lmB,qBAAgE,MAAzC3lmB,KAAK2lmB,mBAAmBjhmB,MAAM6iE,QAC7EvnE,KAAK4lmB,iBAET5lmB,KAAK6lmB,WAAWhlmB,IAEpBoimB,EAAa7nmB,UAAUyqmB,WAAa,SAAUhlmB,GAK1C,IAAK,IAJDsG,EAAStG,EAAEsG,OACX0vN,EAAWjiM,SAASznB,iBAAiBnN,KAAKs4M,cAAc,GAAI,MAAMlrM,iBAAiB,UAAW,IAC9F04lB,EAAWz5lB,KAAK0zB,MAAM54B,EAAOgF,UAAY0qN,GACzCve,EAAgBt4M,KAAK43M,UAAUp2M,iBAAiB,MAC3CtF,EAAI4pmB,EAAU5pmB,GAAK,EAAGA,IAAK,CAChC,IAAKuB,EAAkB66M,EAAcp8M,KAAOo8M,EAAcp8M,GAAG4H,UAAUK,SAAS2+lB,GAAoB5pgB,OAAQ,CACxG,IAAI4jI,EAAYxkB,EAAcp8M,GAC9B8D,KAAK2lmB,mBAAmB3jmB,UAAY86N,EAAU96N,UAC9ChC,KAAK2lmB,mBAAmBjhmB,MAAMgI,IAAM7L,EAAEsG,OAAOgF,UAAY,KACzDnM,KAAK2lmB,mBAAmBjhmB,MAAMosC,QAAU,QACxC,MAGA9wC,KAAK2lmB,mBAAmBjhmB,MAAMosC,QAAU,OACxC9wC,KAAK2lmB,mBAAmBjhmB,MAAMgI,IAAM,SAOhDu2lB,EAAa7nmB,UAAUgrF,YAAc,SAAUi9gB,EAAU72kB,GACrD,IAAIorL,EACJ,GAAI53M,KAAK+lmB,cAAgB1C,EAAU,CAC/B,IAAIh7hB,EAAag7hB,EACbh7hB,GAAc77C,EAAOurL,SACE,SAAnB/3M,KAAKu2M,YACLluI,EAAaroE,KAAKulmB,oBAAoBl9hB,IAE1CA,EAAao3E,GAAS84D,gBAAgBlwI,EAAY77C,EAAOvpB,WAAYjD,KAAKu2M,YAG1EluI,EAAaroE,KAAKulmB,oBAAoBl9hB,GAE1CuvI,EAAY53M,KAAKgmmB,iBAAiB39hB,EAAY77C,QAG9CorL,EAAY53M,KAAK83N,gBAAgBurY,EAAU72kB,GAE/C,OAAOorL,GAGXqrZ,EAAa7nmB,UAAU4qmB,iBAAmB,SAAU39hB,EAAY77C,GAC5D,IAAI0vE,EAASl8F,KAAKwlmB,WAAWn9hB,EAAY77C,GACzC,OAAOizH,GAASm5D,sBAAsB54M,KAAKmB,cAAenB,KAAK+lmB,aAAc19hB,EAAY77C,EAAOvpB,WAAYi5F,IAEhH+mgB,EAAa7nmB,UAAUoomB,WAAa,SAAU9jiB,GAE1C,IAAK,IADDzhD,GAAS84L,OAAQ,KAAM94L,KAAM,MACxB/hB,EAAI,GAAKuB,EAAkBiiE,IAAUxjE,EAAIwjE,EAAMljE,OAASN,IAC7D,IAAKuB,EAAkBiiE,EAAMxjE,IACzB,OAAO+hB,GAAS84L,cAAer3I,EAAMxjE,GAAI+hB,KAAMyhD,EAAMxjE,IAG7D,OAAO+hB,GAEXgllB,EAAa7nmB,UAAUwqmB,eAAiB,WACpC5lmB,KAAKgpG,KAAK30F,cAAc3P,MAAMosC,QAAU,QACxC,IAAIm1jB,EAAUjmmB,KAAKs4M,cAAc,GAAG1zM,YACpC5E,KAAK2lmB,mBAAmBjhmB,MAAMsR,MAAQiwlB,EAAQ/4lB,WAAa,KAC3DjH,EAAkBjG,KAAK2lmB,oBAAsBp+hB,OAAQ,KACrD,IAAI2+hB,EAAUlmmB,KAAK43M,UAAUj1M,cAAc,IAAMmgmB,GAAoB5pgB,OACrEl5F,KAAK2lmB,mBAAmB3jmB,UAAYkkmB,EAAQlkmB,WAEhDihmB,EAAa7nmB,UAAUmqmB,oBAAsB,SAAUl9hB,GACnD,GAAIA,GAAiC,SAAnBroE,KAAKu2M,UAAsB,CACzC,IAAI4vZ,EAAYnmmB,KAAKwsB,OAAOwC,KAAOhvB,KAAKwsB,OAAOwC,KAAO,OACtDq5C,EAAao3E,GAAS+2D,cAAcnuI,EAAYo3E,GAAS62D,WAAWt2M,KAAKu2M,UAAW4vZ,IAExF,OAAO99hB,GAKX46hB,EAAa7nmB,UAAUgrmB,gBAAkB,SAAUrpmB,GAG/C,IAAK,IAFD+U,EACAkuD,EAAYhgE,KAAKsvP,WACZpzP,EAAI,EAAGA,EAAI8jE,EAAUxjE,OAAQN,IAClC,IAAKuB,EAAkBV,IAAUijE,EAAU9jE,GAAG2W,aAAa,gBAAkB9V,EAAMmQ,WAAY,CAC3F4E,EAAQ5V,EACR,MAGR,OAAO4V,GAMXmxlB,EAAa7nmB,UAAUuY,cAAgB,SAAU3S,EAAS0F,GACtD,IAAIq1E,EAAMv7E,SAASiT,YAAY,cAC/BsoE,EAAIroE,UAAUhN,GAAM,GAAO,GAC3B1F,EAAQ2S,cAAcooE,IAK1BknhB,EAAa7nmB,UAAUirmB,UAAY,WAC/B,IAAI75kB,EAASxsB,KAAKwsB,OACdxsB,KAAKwsB,OAAOzvB,QAAUiD,KAAKwsB,OAAOwC,KAClChvB,KAAKwsB,OAAOwC,KAAOhvB,KAAKwsB,OAAOzvB,OAEzByvB,EAAOzvB,OAASyvB,EAAOwC,KAC7BhvB,KAAKwsB,OAAOzvB,MAAQiD,KAAKwsB,OAAOwC,KAE1BhvB,KAAKwsB,OAAOzvB,OAAUiD,KAAKwsB,OAAOwC,OACxChvB,KAAKwsB,OAAOzvB,MAAQiD,KAAKwsB,OAAOwC,KAAO,SAM/Ci0kB,EAAa7nmB,UAAUopmB,UAAY,SAAUn8hB,EAAY77C,EAAQm0C,GACzD3gE,KAAKgpG,MACLhpG,KAAK0kmB,YAAYr8hB,EAAY77C,EAAQm0C,IAG7CsiiB,EAAa7nmB,UAAUguiB,gBAAkB,aAGzC65D,EAAa7nmB,UAAUimN,WAAa,WAEhCrhN,KAAKoyG,UAET6wf,EAAa7nmB,UAAUkrmB,iBAAmB,SAAU98lB,GAChDxJ,KAAKwkmB,UAAUxkmB,KAAKqoE,aAExB46hB,EAAa7nmB,UAAUmrmB,iBAAmB,SAAU/8lB,EAAOqpF,GACvD7yF,KAAK+kmB,eAAgB,EAErB,IAAK,IADDyB,KACK9ilB,EAAI,EAAGla,EAAMhN,OAASknB,EAAGA,IAC1BmvE,EAAQrpF,EAAMka,KAAoB,WAAbla,EAAMka,GAC3B1jB,KAAKqmmB,YAEAxzgB,EAAQrpF,EAAMka,MACnB8ilB,EAAWh9lB,EAAMka,IAAMmvE,EAAQrpF,EAAMka,KAGzCplB,OAAOhB,KAAKkpmB,GAAYhqmB,OAAS,GACjCwD,KAAKsmmB,iBAAiBE,IAO9BvD,EAAa7nmB,UAAUuyF,kBAAoB,SAAUkF,EAASC,GAC7B,iBAAzB9yF,KAAK+hC,iBACL/hC,KAAKummB,kBAAkB,SAAU,QAAS,cAAe1zgB,GAE7D7yF,KAAKummB,kBAAkB,YAAa,gBAAiB1zgB,GACrD,IAAK,IAAIz0F,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKu1F,GAAUz0F,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACL,IAAK,YACL,IAAK,aACL,IAAK,eACD,MACJ,IAAK,YACD4B,KAAK80H,eACL,MACJ,IAAK,UACD90H,KAAKynI,aACL,MACJ,IAAK,gBAED,GADAznI,KAAK84M,oBAAoB94M,KAAKgpG,MAC1BhpG,KAAK43M,WAAa53M,KAAK2lmB,mBAAoB,CAC3C,IAAIO,EAAUlmmB,KAAK43M,UAAUj1M,cAAc,IAAMmgmB,GAAoB5pgB,OACrEl5F,KAAK2lmB,mBAAmB3jmB,UAAYkkmB,EAAQlkmB,UAEhD,MACJ,IAAK,SACGhC,KAAKgpG,OAAUvrG,EAAkBuC,KAAKs4M,gBAAgD,IAA9Bt4M,KAAKs4M,cAAc97M,QAC3EwD,KAAKikmB,aAET,MACJ,IAAK,SACDjkmB,KAAKgH,eAAgBugE,OAAQsrB,EAAQtrB,SAAU,GAC/CvnE,KAAKs9N,eAUrB2lY,EAAa7nmB,UAAUg3G,OAAS,SAAUq0f,GACtCzmmB,KAAKgpG,KAAOhpG,KAAKmB,cAAc,OAASkC,UAAWy/lB,GAAoBxmkB,QAAS74B,OAASsmI,SAAY,OACrG/pI,KAAKgpG,KAAKllG,UAAUM,IAAI0+lB,GAAoBlpZ,MAC5C55M,KAAKqmmB,YACL,IAAIv7lB,GAAgBI,SAAU,IAAKxF,SAAU,IAAMo9lB,GAAoB7pd,IACvEj5I,KAAK0mmB,UAAY/7lB,EAAa3K,KAAKgpG,KAAMl+F,GACzC,IAAIouF,EAAQl5F,KAAKgB,QAAQ2B,cAAc,mBAIvC,IAHI3C,KAAKwsB,OAAOurL,SAAYt6M,EAAkBy7F,IAC1C3zF,GAAanB,IAAIpE,KAAKgpG,KAAM,SAAUhpG,KAAK0lmB,kBAAmB1lmB,MAErC,iBAAzBA,KAAK+hC,gBAAoC,CACrC/hC,KAAKgB,QAAQ6R,aAAa,aAC1B7S,KAAKgpG,KAAKxlG,aAAa,WAAYxD,KAAKgB,QAAQ6R,aAAa,aAEjExO,GAAarE,KAAKgB,SAAU8hmB,GAAoBlpZ,MAChD55M,KAAKgB,QAAQ0D,MAAMosC,QAAU,OAC7B,IAAI61jB,EAAiB3mmB,KAAKmB,cAAc,OACxCnB,KAAKgB,QAAQqT,cAAcnP,aAAayhmB,EAAgB3mmB,KAAKgB,SAC7D2lmB,EAAehlmB,YAAY3B,KAAKgB,SAChC2lmB,EAAehlmB,YAAY3B,KAAKgpG,MAEpChpG,KAAK80H,eACL90H,KAAKynI,aACAg/d,GACDzmmB,KAAK+0G,cAQbkuf,EAAa7nmB,UAAU2mC,cAAgB,WACnC,MAAO,gBAOXkhkB,EAAa7nmB,UAAUk0P,SAAW,WAC9B,OAAOtvP,KAAK43M,UAAUp2M,iBAAiB,IAAMshmB,GAAoB7pd,KAUrEgqd,EAAa7nmB,UAAUynN,QAAU,SAAUnjJ,EAAOsgU,GACzChgY,KAAKgpG,MAAQhpG,KAAKgpG,KAAK/sF,cAAgBjc,KAAKmkmB,mBAC7CnkmB,KAAKqhN,aAET,IAAIsgL,EAAa3hY,KAAKsvP,WAAW9yP,OAC7BoqmB,EAAoB5mmB,KAAKgpG,KAAKrmG,cAAc,IAAMmgmB,GAAoB9hd,UAC1EthF,EAASA,aAAiBlhE,MAAQkhE,GAASA,GAC3C,IAAI5tD,EACJA,EAASrU,EAAkBuiY,IAAcA,EAAY,GAAKA,EAAY2B,EAAa,EAAKA,EAAa3B,EAGrG,IAAK,IAFDxzW,EAASxsB,KAAKwsB,OACd8rL,KACKp8M,EAAI,EAAGA,EAAIwjE,EAAMljE,OAAQN,IAAK,CACnC,IAAI+hB,EAAOyhD,EAAMxjE,GACb+8I,EAAKj5I,KAAKmB,cAAc,MAAQkC,UAAWy/lB,GAAoB7pd,GAAI31I,GAAI,cAAgBpH,IAC3F+8I,EAAGz1I,aAAa,aAAc5G,EAAS4vB,EAAOzvB,MAAOkhB,IACrDg7H,EAAGz1I,aAAa,OAAQ,UACxBy1I,EAAGt3I,YAAYnB,SAAS85D,eAAe19D,EAAS4vB,EAAOwC,KAAM/Q,KAC7Dje,KAAK+N,OAAO,WAAaupF,OAAQ,oBAAqBr5E,KAAMg7H,IAC5Dq/D,EAAc9zM,KAAKy0I,GACnBj5I,KAAKqjmB,SAAS7+lB,KAAKyZ,GACnBje,KAAK6mmB,yBAAyB5td,EAAIh7H,GAEtC,GAAmB,IAAf0jX,GAAoBlkY,EAAkBuC,KAAKgpG,KAAKrmG,cAAc,OAC9D3C,KAAKgpG,KAAKhnG,UAAY,GACtBhC,KAAKgpG,KAAKrnG,YAAY3B,KAAK43M,WAC3BxyM,EAAOkzM,EAAet4M,KAAK43M,gBAG3B,IAAS17M,EAAI,EAAGA,EAAIwjE,EAAMljE,OAAQN,IAAK,CAC/B8D,KAAKs4M,cAAcxmM,GACnB9R,KAAKs4M,cAAcxmM,GAAOrR,WAAWyE,aAAaozM,EAAcp8M,GAAI8D,KAAKs4M,cAAcxmM,IAGvF9R,KAAK43M,UAAUj2M,YAAY22M,EAAcp8M,IAE7C,IAAI4qmB,KAAYzlmB,MAAMC,KAAKtB,KAAKs4M,eAChCwuZ,EAAOn+kB,OAAO7W,EAAO,EAAGwmM,EAAcp8M,IACtC8D,KAAKs4M,cAAgBwuZ,EACrBh1lB,GAAS,GAGb80lB,GAAmC,IAAd5mO,IACrBhgY,KAAKopiB,mBAGb65D,EAAa7nmB,UAAUqvK,oBAAsB,SAAUtjK,EAAQ4/lB,GAC3D,IAAIxvkB,EAAOpwB,EAAO0L,aAAa,QAAU1L,EAAO0L,aAAa,QAAU1L,EAAO0L,aAAa,MAC3Fk0lB,EAAOvjmB,aAAa,OAAQ+zB,GAC5BpwB,EAAOuE,gBAAgB,QAEvB,IAAK,IADDhI,GAAc,WAAY,gBAAiB,QACtCxH,EAAI,EAAGA,EAAIwH,EAAWlH,OAAQN,IACnC,GAAKiL,EAAO0L,aAAanP,EAAWxH,IAApC,CAGA,IAAIklK,EAAOj6J,EAAO0L,aAAanP,EAAWxH,IAC1C6qmB,EAAOvjmB,aAAaE,EAAWxH,GAAIklK,GACnCj6J,EAAOuE,gBAAgBhI,EAAWxH,MAG1C+mmB,EAAa7nmB,UAAUkiO,UAAY,aAGnC2lY,EAAa7nmB,UAAUyrmB,yBAA2B,SAAU5td,EAAIh7H,KAQhEgllB,EAAa7nmB,UAAU4rmB,eAAiB,SAAUjqmB,GAC9C,IAAKU,EAAkBuC,KAAKqjmB,UAAW,CACnC,IAAI38lB,EAAO1G,KAAKwjmB,WAAWxjmB,KAAKqjmB,UAAUtsZ,OAC1C,GAAa,WAATrwM,GAA8B,WAATA,GAA8B,YAATA,EAC1C,IAAK,IAAItI,EAAK,EAAGyE,EAAK7C,KAAKqjmB,SAAUjlmB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAEvD,IAAKX,EADDwgB,EAAOpb,EAAGzE,KACkB6f,IAASlhB,EACrC,OAAOkhB,OAKf,IAAK,IAAIha,EAAK,EAAGwG,EAAKzK,KAAKqjmB,SAAUp/lB,EAAKwG,EAAGjO,OAAQyH,IAAM,CACvD,IAAIga,EACJ,IAAKxgB,EADDwgB,EAAOxT,EAAGxG,KACkBrH,EAAUoD,KAAKwsB,OAAOzvB,MAAQiD,KAAKwsB,OAAOzvB,MAAQ,QAAUkhB,KAAUlhB,EAClG,OAAOkhB,GAKvB,OAAO,MAOXgllB,EAAa7nmB,UAAUiX,QAAU,WACzB7R,SAASuL,KAAK5H,SAASnE,KAAKgpG,QAC5BzjG,GAAahB,OAAOvE,KAAKgpG,KAAM,SAAUhpG,KAAK0lmB,mBACzCjomB,EAAkBuC,KAAK0mmB,YACxB1mmB,KAAK0mmB,YAETrhmB,EAAOrF,KAAKgpG,OAEhB1X,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,OAGlCgxF,IACIjpF,GAAUinB,KAAM,KAAMjyB,MAAO,KAAM68E,QAAS,KAAMm+H,QAAS,MAAQ8C,KACpEooZ,EAAa7nmB,UAAW,cAAU,GACrC41F,IACI9pF,GAAS,IACV+7lB,EAAa7nmB,UAAW,iBAAa,GACxC41F,IACI9pF,GAAS,IACV+7lB,EAAa7nmB,UAAW,yBAAqB,GAChD41F,IACI9pF,EAAS,OACV+7lB,EAAa7nmB,UAAW,oBAAgB,GAC3C41F,IACI9pF,EAAS,OACV+7lB,EAAa7nmB,UAAW,qBAAiB,GAC5C41F,IACI9pF,EAAS,qBACV+7lB,EAAa7nmB,UAAW,yBAAqB,GAChD41F,IACI9pF,EAAS,uBACV+7lB,EAAa7nmB,UAAW,6BAAyB,GACpD41F,IACI9pF,EAAS,SACV+7lB,EAAa7nmB,UAAW,iBAAa,GACxC41F,IACI9pF,GAAS,IACV+7lB,EAAa7nmB,UAAW,eAAW,GACtC41F,IACI9pF,OACD+7lB,EAAa7nmB,UAAW,kBAAc,GACzC41F,IACI9pF,EAAS,OACV+7lB,EAAa7nmB,UAAW,aAAS,GACpC41F,IACI9pF,EAAS,MACV+7lB,EAAa7nmB,UAAW,cAAU,GACrC41F,IACI9pF,GAAS,IACV+7lB,EAAa7nmB,UAAW,oBAAgB,GAC3C41F,IACIloF,KACDm6lB,EAAa7nmB,UAAW,mBAAe,GAC1C41F,IACIloF,KACDm6lB,EAAa7nmB,UAAW,sBAAkB,GAC7C41F,IACIloF,KACDm6lB,EAAa7nmB,UAAW,qBAAiB,GAC5C41F,IACIloF,KACDm6lB,EAAa7nmB,UAAW,cAAU,GACrC41F,IACIloF,KACDm6lB,EAAa7nmB,UAAW,iBAAa,GACxC41F,IACIloF,KACDm6lB,EAAa7nmB,UAAW,eAAW,GACtC41F,IACIloF,KACDm6lB,EAAa7nmB,UAAW,iBAAa,GACxC6nmB,EAAejygB,IACX5nF,GACD65lB,IAELrxf,ICn4BEnhB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GAcrD8nkB,IACPrtZ,KAAM,iBACNr7D,MAAOukd,GAAoBvkd,MAC3ByC,SAAU8hd,GAAoB9hd,SAC9Bp2E,IAAKk4hB,GAAoBl4hB,IACzBquE,GAAI6pd,GAAoB7pd,GACxBkhE,QAAS2oZ,GAAoBn+e,SAC7BvzF,KAAM0xkB,GAAoBlpZ,KAC1B13M,MAAO4gmB,GAAoB5gmB,MAC3B0P,MAAO,gBACPs1lB,WAAY,gBACZh3jB,KAAM,gCACNi3jB,cAAe,cACfpqmB,MAAO,gBACPqqmB,OAAQ,eACRhtZ,SAAU,yCACVitZ,mBAAoB,0CACpBC,YAAa,iBACbC,aAAc,kBACdC,aAAc,sBACdv7e,OAAQ,eACRnhC,OAAQ,eACRqrE,UAAW,eACXsxc,cAAe,oBACfC,gBAAiB,oBACjBC,YAAa,qBACbC,cAAe,gBAEfxhe,IACAvrH,UAAW,KACXk/G,YAaA8te,GAA8B,SAAUv2gB,GAKxC,SAASu2gB,EAAa70lB,EAAShS,GAC3B,IAAIjB,EAAQuxF,EAAOhwF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAEnD,OADAD,EAAMkzH,cAAgB,KACflzH,EAqiEX,OA5iEA0wF,GAAUo3gB,EAAcv2gB,GAcxBu2gB,EAAazsmB,UAAUqX,UAAY,WAC/BzS,KAAKgB,QAAQ0D,MAAM+I,QAAU,IAC7BzN,KAAK8nmB,iBACLx2gB,EAAOl2F,UAAUqX,UAAUnR,KAAKtB,MAChCA,KAAK2lN,YAAc3lN,KAAK8R,MACxB9R,KAAK6/D,YAAc,IAEvBgoiB,EAAazsmB,UAAU0smB,eAAiB,WACpC9nmB,KAAKomK,aAAc,EACnBpmK,KAAK+nmB,iBAAkB,EACvB/nmB,KAAK00H,cAAe,EACpB10H,KAAKgomB,eAAgB,EACrBhomB,KAAKiomB,iBAAkB,EACvBjomB,KAAK4mI,SAAU,EACf5mI,KAAKkomB,kBAAmB,EACxBlomB,KAAKmomB,iBAAkB,EACvBnomB,KAAKoomB,SAAU,EACfpomB,KAAKg+D,YAAa,EAClBh+D,KAAKyqN,cAAe,EACpBzqN,KAAKqomB,iBAAkB,EACvBromB,KAAKsomB,YAAa,EAClBtomB,KAAKuomB,YAAc,GACnBvomB,KAAKwomB,aAAc,EACnBxomB,KAAKq5N,eAAgB,EACrBr5N,KAAKyomB,UAAW,EAChBzomB,KAAK0omB,oBAAuBC,WAAW,GACvC3omB,KAAK4omB,oBACL5omB,KAAK6omB,gBAAiB,EACtB7omB,KAAK8omB,iBAAkB,EACvB9omB,KAAK+omB,cAAe,EACpB/omB,KAAKgpmB,gBAAiB,EACtBhpmB,KAAKipmB,eAAgB,EACrBjpmB,KAAKq4N,cACD39G,IAAK,MACLC,MAAO,KACPI,OAAQ,KACR97F,IAAK,KACLi8F,KAAM,KACNo9G,KAAM,KACNC,GAAI,KACJxvG,OAAQ,KACRC,SAAU,KACVtnH,KAAM,SACNO,MAAO,YACP0lF,KAAM,SACNxnD,MAAO,OAGf0nkB,EAAazsmB,UAAUkiO,UAAY,WAC3Bt9N,KAAKm7H,UACLn7H,KAAKm7H,SAASn0H,eAAgBugE,OAAUvnE,KAAKunE,UAGrDsgiB,EAAazsmB,UAAUimN,WAAa,SAAUolZ,GAC1Cn1gB,EAAOl2F,UAAUg3G,OAAO9wG,KAAKtB,KAAMymmB,GACnCzmmB,KAAK21N,kBAETkyY,EAAazsmB,UAAU8tmB,iBAAmB,WACtC,GAA6B,iBAAzBlpmB,KAAK+hC,iBAA8D,SAAxB/hC,KAAKknB,eAA2B,CAC3E,IAAIiilB,EAAenpmB,KAAKqrI,aAAaxwH,UAAUlY,cAAc,iBAC7B,KAA5B3C,KAAKkhE,aAAankE,OAAgBiD,KAAK00H,aACvC5wH,EAAUqlmB,GAAe,gBAAiB,mBAG1CrlmB,EAAUqlmB,GAAe,mBAAoB,kBAIzDtB,EAAazsmB,UAAUsqB,aAAe,SAAU7kB,GAC5CA,EAAE8kB,iBACF3lB,KAAKysD,MAAM5rD,GACXb,KAAKopmB,cAAcvomB,IAEvBgnmB,EAAazsmB,UAAUiumB,kBAAoB,WAKvC,GAJArpmB,KAAKs+M,cACLt+M,KAAK0sN,kBACL1sN,KAAKyrJ,cACLzrJ,KAAKgpG,KAAK78F,UAAY,EACO,iBAAzBnM,KAAK+hC,gBAAoC,CACzC,IAAIk3G,EAAKj5I,KAAK43M,UAAUj1M,cAAc,IAAMskmB,GAAoBhud,IAC5DA,GACAA,EAAGn1I,UAAUM,IAAI6imB,GAAoB/kmB,SAIjD2lmB,EAAazsmB,UAAUqxD,MAAQ,SAAU5rD,EAAGoC,IACpCxF,EAAkBwF,KAAiBxF,EAAkBwF,IAAexF,EAAkBwF,EAAWolE,cACjGroE,KAAKspmB,iBAET,IAAI/8kB,EAAWvsB,KAAKm+M,cAChBn+M,KAAKizH,gBAAkB1mG,EAASxvB,OAGpCiD,KAAKopmB,cAAcvomB,IAEvBgnmB,EAAazsmB,UAAUkumB,eAAiB,WAChCtpmB,KAAKgpG,QACDhpG,KAAKupmB,gBAA2C,iBAAzBvpmB,KAAK+hC,iBACxBtkC,EAAkBuC,KAAK0omB,mBAAmB9wZ,YAAen6M,EAAkBuC,KAAK0omB,mBAAmB1/f,OACvGhpG,KAAKilmB,iBAAiBjlmB,KAAK0omB,mBAAmB9wZ,UAAUh2M,WAAU,GAAO5B,KAAK0omB,mBAAmB1/f,MAErGhpG,KAAKqpmB,qBAETrpmB,KAAK4nmB,cAAc5lmB,UAAY,GAC/BhC,KAAKkhE,aAAankE,MAAQ,GAC1BiD,KAAKjD,MAAQ,KACbiD,KAAKsgE,SAAW,KAChBtgE,KAAKgvB,KAAO,KACZhvB,KAAK8R,MAAQ,KACb9R,KAAK2lN,YAAc,KACnB3lN,KAAKie,KAAO,KACZje,KAAK6/D,YAAc,GACf7/D,KAAKwpmB,mBACLnkmB,EAAOrF,KAAKwpmB,kBACZxpmB,KAAKkhE,aAAax8D,MAAMosC,QAAU,QAClC9wC,KAAKwpmB,iBAAmB,MAE5BxpmB,KAAKw8N,aAAa,KAAM,MACxBx8N,KAAK6omB,gBAAiB,EACtB7omB,KAAKymI,mBAETohe,EAAazsmB,UAAUqumB,kBAAoB,WACvC,GAAInrmB,OAAOhB,KAAK0C,KAAKi8E,gBAAgBz/E,OACjC,IAAK,IAAI4B,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAKi8E,gBAAiB79E,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC1E,IAAIk+E,EAAWz5E,EAAGzE,GAClB,GAAiB,UAAbk+E,EACAt8E,KAAKqrI,aAAaxwH,UAAU/W,UAAUM,IAAIpE,KAAKi8E,eAAeK,SAE7D,GAAiB,aAAbA,GAA6D,aAAlCt8E,KAAKi8E,eAAeK,GACpDt8E,KAAKolB,SAAU,EACfplB,KAAKu8E,iBAEJ,GAAiB,aAAbD,GAA6D,aAAlCt8E,KAAKi8E,eAAeK,GACpDt8E,KAAKw8E,UAAW,EAChBx8E,KAAKwnD,gBAEJ,GAAiB,UAAb80B,EACLt8E,KAAKqrI,aAAaxwH,UAAUrX,aAAa,QAASxD,KAAKi8E,eAAeK,QAErE,EAEmB,OAAQ,YACX/9E,QAAQ+9E,IAAa,EAClCt8E,KAAK4nmB,cAAcpkmB,aAAa84E,EAAUt8E,KAAKi8E,eAAeK,KAH/C,QAAS,KAAM,eAKb/9E,QAAQ+9E,IAAa,EACzB,gBAAbA,EAA6BxwD,GAAMs7G,eAAepnI,KAAKi8E,eAAeK,GAAWt8E,KAAKkhE,cAClFlhE,KAAKgB,QAAQwC,aAAa84E,EAAUt8E,KAAKi8E,eAAeK,IAG5Dt8E,KAAKqrI,aAAaxwH,UAAUrX,aAAa84E,EAAUt8E,KAAKi8E,eAAeK,OAM3FurhB,EAAazsmB,UAAUsumB,kBAAoB,WACvC,OACIp/e,gBAAiB,QACjBswC,YAAa56J,KAAKgB,QAAQsC,GAAK,WAC/BqO,KAAQ,UACRgpJ,gBAAiB,OACjBD,gBAAiB,QACjB7vC,wBAAyB,OACzBtpD,kBAAmBvhE,KAAK4nmB,cAActkmB,KAG9CukmB,EAAazsmB,UAAU05H,aAAe,WAClChpG,GAAMgpG,aAAa90H,KAAKkT,WAAYlT,KAAKkhE,aAAa7sD,gBAClDrU,KAAKm7H,WACLn7H,KAAKm7H,SAASjoH,UAAYlT,KAAKkT,UAC/BlT,KAAKm7H,SAAS3zE,aAGtBqgjB,EAAazsmB,UAAUmhF,UAAY,WAC/BzwD,GAAM27G,WAAWznI,KAAKolB,QAASplB,KAAKkhE,cAChClhE,KAAKolB,SACL/gB,GAAarE,KAAKqrI,aAAaxwH,WAAYoslB,GAAoB9sZ,SAC/Dn6M,KAAKkhE,aAAa19D,aAAa,gBAAiB,SAChDxD,KAAKkkI,gBAAgB1gI,aAAa,WAAYxD,KAAK4qH,YAGnD5qH,KAAK2pmB,YACLhmmB,GAAU3D,KAAKqrI,aAAaxwH,WAAYoslB,GAAoB9sZ,SAC5Dn6M,KAAKkhE,aAAa19D,aAAa,gBAAiB,QAChDxD,KAAKkkI,gBAAgBtZ,UAAY,IAMzCi9e,EAAazsmB,UAAUy3G,eAAiB,WACpC,OAAO7yG,KAAKqzG,cAAc,WAG9Bw0f,EAAazsmB,UAAUwumB,gBAAkB,SAAU5omB,GAClB,iBAAzBhB,KAAK+hC,kBACL/gC,EAAQ4pH,UAAY,IAG5Bi9e,EAAazsmB,UAAU8oI,cAAgB,WACnC,OAAOlkI,KAAKqrI,aAAaxwH,WAE7BgtlB,EAAazsmB,UAAUyumB,eAAiB,WACpC,MAAO,oBAEXhC,EAAazsmB,UAAU0umB,iBAAmB,SAAU96kB,GAChD,OAAOhvB,KAAK+pmB,kBAAkB/pmB,KAAKojmB,eAAep0kB,KAEtD64kB,EAAazsmB,UAAU2umB,kBAAoB,SAAUhtmB,GAGjD,IAAK,IAFDkhB,EAEK7f,EAAK,EAAG4rmB,EADDhqmB,KAAKsvP,WACqBlxP,EAAK4rmB,EAAYxtmB,OAAQ4B,IAAM,CACrE,IAAIioN,EAAS2jZ,EAAY5rmB,GACzB,GAAI4B,KAAK44N,kBAAkBvS,EAAOxzM,aAAa,iBAAmB9V,EAAO,CACrEkhB,EAAOooM,EACP,OAGR,OAAOpoM,GAGX4plB,EAAazsmB,UAAU+9N,UAAY,WAC/Bn5N,KAAKqhN,aACDrhN,KAAKqoE,sBAAsBC,GAC3BtoE,KAAKkomB,kBAAmB,EAGxBlomB,KAAKiqmB,gBAGbpC,EAAazsmB,UAAU6umB,aAAe,WAClC,GAAKxsmB,EAAkBuC,KAAKjD,OAGvB,GAAIiD,KAAKgvB,MAAQvxB,EAAkBuC,KAAKjD,OAAQ,CACjD,IAAIiE,EAAUhB,KAAK8pmB,iBAAiB9pmB,KAAKgvB,MACzC,GAAIvxB,EAAkBuD,GAElB,YADAhB,KAAKgH,eAAgBgoB,KAAM,OAI3BhvB,KAAKw8N,aAAax7N,EAAS,WAI/BhB,KAAKw8N,aAAax8N,KAAKs4M,cAAct4M,KAAK2lN,aAAc,WAbxD3lN,KAAKw8N,aAAax8N,KAAK+pmB,kBAAkB/pmB,KAAKjD,OAAQ,MAe1DiD,KAAKkqmB,iBACLp+kB,GAAM1uB,SAAS4C,KAAKgvB,KAAMhvB,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,kBAE3EsilB,EAAazsmB,UAAU+umB,OAAS,SAAUtpmB,GACtC,GAAKb,KAAKolB,QAAV,CAGA,IAAIje,EAAStG,EAAE29I,cACXxpC,EAAgBn0G,EAAEsG,OAClBkyN,EAAgBr5N,KAAKq5N,cACzBr5N,KAAKq5N,eAAgB,GAEjBA,GAAkBr5N,KAAK+nmB,kBAAmB/nmB,KAAKomK,aAAiB3oK,EAAkBu3G,KACjFh1G,KAAKoqmB,mBAAoB3smB,EAAkB0J,IAS5CnH,KAAK+nmB,kBAAqBtqmB,EAAkBuC,KAAKm7H,WAC9C36H,SAASuL,KAAK5H,SAASnE,KAAKm7H,SAASn6H,UACxChB,KAAKm7H,SAASn6H,QAAQ8C,UAAUK,SAAS8imB,GAAoBO,cACxDxnmB,KAAKiomB,kBACNjomB,KAAK+nmB,iBAAkB,KAIA,iBAAzB/nmB,KAAK+hC,kBAAuC/hC,KAAKgomB,eAAiB7gmB,IAAWnH,KAAKkhE,eAChF1gE,SAAS+4H,gBAAkBpyH,GAAW3G,SAAS+4H,gBAAkBpyH,GACjE6tG,EAAclxG,UAAUK,SAAS8imB,GAAoBC,cACxDzpmB,EAAkB0J,IAAoC,iBAAzBnH,KAAK+hC,iBAAsC/hC,KAAKupmB,gBAC1Ev0f,IAAkBh1G,KAAKqrI,aAAaxwH,WAAuC,iBAAzB7a,KAAK+hC,kBAC1D/hC,KAAKqrI,aAAaxwH,UAAU1W,SAASgD,IAAWnH,KAAKyomB,YACtDzomB,KAAK+nmB,kBAAkB/nmB,KAAKomK,YAC5BpmK,KAAKqqmB,iBACLrqmB,KAAKyomB,UAAW,IAEhBzomB,KAAK8kmB,aAAgB9kmB,KAAKomK,aAAgBpmK,KAAKq5N,gBAC/Cr5N,KAAK0tY,UAAW,EAChB1tY,KAAKiomB,iBAAkB,IA5BM,iBAAzBjomB,KAAK+hC,iBAAsC/hC,KAAKupmB,gBAAkBvpmB,KAAKomK,YACvEpmK,KAAKsnmB,YAAYplmB,QAGjBlC,KAAKkkI,gBAAgBhiI,UA2BjC2lmB,EAAazsmB,UAAUivmB,eAAiB,WACpCrqmB,KAAK00H,cAAe,EACpB10H,KAAKssI,WACLtsI,KAAKi5hB,cAET4uE,EAAazsmB,UAAU69hB,WAAa,WAC3Bj5hB,KAAKolB,UAGNplB,KAAKg+D,aACLh+D,KAAK6omB,gBAAiB,EACtB7omB,KAAKopmB,cAAc,OAEvBppmB,KAAKkpmB,mBACLlpmB,KAAK2T,cAAc3T,KAAK4nmB,cAAe,UACV,iBAAzB5nmB,KAAK+hC,iBAA+D,UAAzB/hC,KAAKgB,QAAQgC,SACxDhD,KAAK2T,cAAc3T,KAAKkhE,aAAc,QAEtClhE,KAAKqrI,aAAa5lH,aAClB9hB,GAAU3D,KAAKqrI,aAAa5lH,aAAcwhlB,GAAoBQ,eAElEznmB,KAAK2mB,QAAQ,UAEjBkhlB,EAAazsmB,UAAUkvmB,QAAU,WACxBtqmB,KAAK00H,eACN10H,KAAK00H,cAAe,EACpB10H,KAAK2mB,QAAQ,UAEjB3mB,KAAKymI,mBAETohe,EAAazsmB,UAAUmvmB,kBAAoB,SAAU1pmB,GACjD,IAAI4iJ,EAAc59I,EAAQ7F,KAAKkhE,aAAc,QACzCuiF,GAAe5iJ,EAAEsG,SAAWs8I,IAC5BzjJ,KAAKjD,MAAQ,OAGrB8qmB,EAAazsmB,UAAU+iiB,UAAY,WAC/B54hB,GAAanB,IAAIpE,KAAKqrI,aAAaxwH,UAAW,YAAa7a,KAAKwqmB,cAAexqmB,MAC/EuF,GAAanB,IAAIpE,KAAKqrI,aAAaxwH,UAAW,QAAS7a,KAAKqsI,QAASrsI,MACrEuF,GAAanB,IAAIpE,KAAKqrI,aAAaxwH,UAAW,WAAY7a,KAAK+qM,SAAU/qM,MACzEA,KAAKyqmB,mBAET5C,EAAazsmB,UAAUqvmB,gBAAkB,WACrCllmB,GAAanB,IAAIpE,KAAKkkI,gBAAiB,OAAQlkI,KAAKmqmB,OAAQnqmB,MAC5D,IAAIyjJ,EAAc59I,EAAQ7F,KAAKkhE,aAAc,QACzCuiF,GACAl+I,GAAanB,IAAIq/I,EAAa,QAASzjJ,KAAKuqmB,kBAAmBvqmB,MAE9DwL,GAAQqb,WACT7mB,KAAKosH,eAAiB,IAAIpP,GAAeh9G,KAAKkkI,iBAC1CpmB,UAAW99G,KAAK0rJ,iBAAiBrwJ,KAAK2E,MAAOw9G,WAAYx9G,KAAKq4N,aAAcniJ,UAAW,aAG/Fl2E,KAAKqlB,kBAETwilB,EAAazsmB,UAAUiqB,eAAiB,WAChCrlB,KAAKulB,iBACLhgB,GAAanB,IAAIpE,KAAKqrI,aAAa5lH,YAAa,YAAazlB,KAAK0lB,aAAc1lB,OAGxF6nmB,EAAazsmB,UAAUsvmB,kBAAoB,WACvCnlmB,GAAahB,OAAOvE,KAAKkkI,gBAAiB,OAAQlkI,KAAKmqmB,QACvD,IAAI1md,EAAc59I,EAAQ7F,KAAKkhE,aAAc,QACzCuiF,GACAl+I,GAAahB,OAAOk/I,EAAa,QAASzjJ,KAAKuqmB,mBAE9C/+lB,GAAQqb,UACT7mB,KAAKosH,eAAe/5G,UAEpBrS,KAAKulB,iBACLhgB,GAAahB,OAAOvE,KAAKqrI,aAAa5lH,YAAa,YAAazlB,KAAK0lB,eAG7EmilB,EAAazsmB,UAAUqrI,gBAAkB,WACjCzmI,KAAKulB,kBAC2B,KAA5BvlB,KAAKkhE,aAAankE,MAClBsH,GAAarE,KAAKqrI,aAAa5lH,aAAcwhlB,GAAoBQ,eAGjE9jmB,GAAU3D,KAAKqrI,aAAa5lH,aAAcwhlB,GAAoBQ,iBAO1EI,EAAazsmB,UAAUu6N,eAAiB,WACpCpwN,GAAanB,IAAIpE,KAAKgpG,KAAM,QAAShpG,KAAK+0N,aAAc/0N,MACxDuF,GAAanB,IAAIpE,KAAKgpG,KAAM,YAAahpG,KAAKk1N,YAAal1N,MAC3DuF,GAAanB,IAAIpE,KAAKgpG,KAAM,WAAYhpG,KAAKm1N,aAAcn1N,OAG/D6nmB,EAAazsmB,UAAU2vM,SAAW,SAAUlqM,GACrB,KAAfA,EAAE20P,UAAkC,KAAf30P,EAAE20P,gBACLt6P,IAAd8E,KAAKgpG,MACLhpG,KAAKqhN,aAETrhN,KAAK2qmB,eAAiB9pmB,EACjBb,KAAK8kmB,aAAgBrnmB,EAAkBuC,KAAKgpG,KAAKrmG,cAAc,QAChE3C,KAAKy/D,kBAAkB5+D,KAInCgnmB,EAAazsmB,UAAU25N,aAAe,SAAUl0N,GAC5C,IAAIsG,EAAStG,EAAEsG,OAEX8xI,GADY9xI,EAAOrD,UACd+B,EAAQsB,EAAQ,IAAM27lB,GAAoB7pd,KACnD,GAAKj5I,KAAKs5J,UAAUrgB,GAIpB,GADAj5I,KAAKw8N,aAAavjF,EAAIp4I,GAClB2K,GAAQqb,UAAY7mB,KAAKoqmB,iBACzBl3f,QAAQkrG,WAEP,CAEDp+M,KAAK+3J,WADO,OAIpB8vc,EAAazsmB,UAAU85N,YAAc,SAAUr0N,GAC3C,IAAIi8N,EAAYj3N,EAAQhF,EAAEsG,OAAQ,IAAM27lB,GAAoB7pd,IAC5Dj5I,KAAK+8N,SAASD,IAGlB+qY,EAAazsmB,UAAU2hO,SAAW,SAAU9jF,GACpCj5I,KAAKolB,SAAWplB,KAAKs5J,UAAUrgB,KAAQA,EAAGn1I,UAAUK,SAAS2+lB,GAAoBvkd,SACjFv+I,KAAKs+M,cACL36M,GAAUs1I,GAAK6pd,GAAoBvkd,SAI3Cspd,EAAazsmB,UAAU+5N,aAAe,SAAUt0N,GAC5Cb,KAAKs+M,eAGTupZ,EAAazsmB,UAAUkjN,YAAc,WACjC,IAAIigB,EAAcv+N,KAAKgpG,KAAKxnG,iBAAiB,IAAMshmB,GAAoBvkd,OACnEggF,GAAeA,EAAY/hO,QAC3B6H,EAAYk6N,EAAaukY,GAAoBvkd,QAIrDspd,EAAazsmB,UAAUk+J,UAAY,SAAUrgB,GACzC,OAAQA,GAAMA,EAAGtf,aAAa,SAAuC,WAA5Bsf,EAAGpmI,aAAa,SAG7Dg1lB,EAAazsmB,UAAUqkE,kBAAoB,SAAU5+D,GACjD,GAAIb,KAAKs4M,cAAc97M,OAAS,EAAG,CAC/B,IAAIy8I,EAAKx5E,GAAkB5+D,EAAE20P,SAAUx1P,KAAKs4M,cAAet4M,KAAK2lN,aAAa,GACxEloN,EAAkBw7I,KACnBj5I,KAAKw8N,aAAavjF,EAAIp4I,GACtBb,KAAKq2N,uBASjBwxY,EAAazsmB,UAAU2nB,YAAc,WAC5BtlB,EAAkBuC,KAAK4qmB,kBACxB7nlB,GAAY/iB,KAAK4qmB,gBACjBvmmB,GAAarE,KAAK4qmB,gBAAiB3D,GAAoBU,aACvD3nmB,KAAK4qmB,eAAe5omB,UAAY,GAChChC,KAAK4qmB,eAAiB,OAO9B/C,EAAazsmB,UAAU4mB,YAAc,WAC7BvkB,EAAkBuC,KAAK4qmB,kBACvB5qmB,KAAK4qmB,eAAiBp/lB,GAAQqb,WAAappB,EAAkBuC,KAAK6qmB,iBAAmB7qmB,KAAK6qmB,eAAe9we,QAAQ,KAC5Gt8H,EAAkBuC,KAAK6qmB,iBAAmB7qmB,KAAK6qmB,eAAe9we,QAAQ,IAAM/5H,KAAKqrI,aAAatR,QAAQ,GAC3Gp2H,GAAU3D,KAAK4qmB,gBAAiB3D,GAAoBU,aACpDjtlB,IACIvT,OAAQnH,KAAK4qmB,eACb50lB,MAAOxK,GAAQqb,SAAW,OAAS,QACpC7mB,KAAKmB,eACR6gB,GAAYhiB,KAAK4qmB,kBAGzB/C,EAAazsmB,UAAUswJ,iBAAmB,SAAU7qJ,GAChD,IAAIiqmB,EAA6B,WAAbjqmB,EAAEmyD,QAAoC,aAAbnyD,EAAEmyD,OAC3C+3iB,EAA0C,iBAAzB/qmB,KAAK+hC,kBAAoD,SAAblhC,EAAEmyD,QAAkC,QAAbnyD,EAAEmyD,QAC1FhzD,KAAKwomB,YAA2B,WAAb3nmB,EAAEmyD,OACrBhzD,KAAKyomB,UAAYzomB,KAAKomK,aAA4B,QAAbvlK,EAAEmyD,OACvC,IAAI4pK,EAA6B,SAAb/7N,EAAEmyD,QAAkC,OAAbnyD,EAAEmyD,QAAgC,WAAbnyD,EAAEmyD,QAAoC,aAAbnyD,EAAEmyD,QACvE,SAAbnyD,EAAEmyD,QAAkC,QAAbnyD,EAAEmyD,OAChC,MAAKhzD,KAAKgrmB,iBAAmBF,GAAiBC,IAAoB/qmB,KAAKomK,eAGlEpmK,KAAKw8E,SAAU,CAChB,IAAIyuhB,EAA2B,QAAbpqmB,EAAEmyD,QAAiC,UAAbnyD,EAAEmyD,OAK1C,QAJkB93D,IAAd8E,KAAKgpG,MAAuBhpG,KAAK8kmB,aAAgBmG,GAA4B,WAAbpqmB,EAAEmyD,SAClEhzD,KAAK2qmB,eAAiB9pmB,EACtBb,KAAKqhN,cAEL5jN,EAAkBuC,KAAKgpG,QAAWvrG,EAAkBuC,KAAKs4M,gBACzDskB,GAA8C,IAA9B58N,KAAKs4M,cAAc97M,QAAiBwD,KAAK8kmB,YACzD,OAOJ,QALImG,GAAejrmB,KAAKomK,aAA4B,WAAbvlK,EAAEmyD,SACrCnyD,EAAE8kB,iBAEN3lB,KAAKg+D,WAA0B,WAAbn9D,EAAEmyD,QAA8BhzD,KAAKg+D,WACvDh+D,KAAKoomB,SAAWxrY,GAA6B,WAAb/7N,EAAEmyD,QAA+BhzD,KAAKoomB,QAC9DvnmB,EAAEmyD,QACN,IAAK,OACL,IAAK,KACD,IAAI4mG,EAAW55J,KAAKgpG,KAAKrmG,cAAc,IAAMskmB,GAAoB/kmB,OACjE,GAAIlC,KAAKkrmB,kBAAkBtxc,GACvB55J,KAAKw8N,aAAa5iE,EAAU/4J,OAE3B,CACD,IAAIo9N,OAAW,EACXnsN,EAAqB,SAAbjR,EAAEmyD,OAAoBhzD,KAAK2lN,YAAc,EAAI3lN,KAAK2lN,YAAc,EACxE9/L,EAAa,EACY,iBAAzB7lB,KAAK+hC,kBACLlc,EAA0B,SAAbhlB,EAAEmyD,QAAqBv1D,EAAkBuC,KAAK2lN,aAAe,EAAI3lN,KAAKs4M,cAAc97M,OAAS,EAC1GsV,EAAQA,EAAQ,EAAI9R,KAAKs4M,cAAc97M,OAAS,EAAIsV,IAAU9R,KAAKs4M,cAAc97M,OAAS,EAAIsV,GAElGmsN,EAAWxgO,EAAkBuC,KAAK2lN,aAAe3lN,KAAKs4M,cAAczyL,GAAc7lB,KAAKs4M,cAAcxmM,GACrG9R,KAAKw8N,aAAayB,EAAUp9N,GAEhCA,EAAE8kB,iBACF,MACJ,IAAK,SACD3lB,KAAKmrmB,gBAAgBnrmB,KAAK2lN,YAAc3lN,KAAKormB,eAAgBvqmB,GAC7DA,EAAE8kB,iBACF,MACJ,IAAK,WACD3lB,KAAKqrmB,kBAAkBrrmB,KAAK2lN,YAAc3lN,KAAKormB,eAAgBvqmB,GAC/DA,EAAE8kB,iBACF,MACJ,IAAK,OACD,GAA6B,iBAAzB3lB,KAAK+hC,gBAAoC,CAEzC,GADAlhC,EAAE8kB,iBACuB,IAArB3lB,KAAK2lN,YACL,OAEJ3lN,KAAKw8N,aAAax8N,KAAKs4M,cAAc,GAAIz3M,GAE7C,MACJ,IAAK,MACD,GAA6B,iBAAzBb,KAAK+hC,gBAAoC,CACzClhC,EAAE8kB,iBACF,IAAI66L,EAASxgN,KAAKsvP,WAAW9yP,OAAS,EACtC,GAAIwD,KAAK2lN,cAAgBnF,EACrB,OAEJxgN,KAAKw8N,aAAax8N,KAAKs4M,cAAckI,GAAS3/M,GAElD,MACJ,IAAK,QAC4B,iBAAzBb,KAAK+hC,kBACA/hC,KAAKiomB,iBACNjomB,KAAKw1N,aAGb,MACJ,IAAK,OACDx1N,KAAKw1N,YACL,MACJ,IAAK,OACDx1N,KAAK+omB,aAAe/omB,KAAKomK,YACzBpmK,KAAK2pmB,YACL3pmB,KAAKsrmB,cAAczqmB,GACnB,MACJ,IAAK,QACDb,KAAKurmB,kBAAkB1qmB,GACvB,MACJ,IAAK,SACL,IAAK,MACL,IAAK,QACGb,KAAKomK,cACLpmK,KAAK2pmB,YACL3pmB,KAAKsrmB,cAAczqmB,OAMvCgnmB,EAAazsmB,UAAUmwmB,kBAAoB,SAAU1qmB,GACjD,GAAIb,KAAKomK,YAAa,CAClB,IAAIntB,EAAKj5I,KAAKgpG,KAAKrmG,cAAc,IAAMskmB,GAAoB/kmB,OACvD+2I,IACAj5I,KAAKw8N,aAAavjF,EAAIp4I,GACtBb,KAAKoomB,SAAU,GAEfpomB,KAAKg+D,aACLh+D,KAAK6omB,gBAAiB,EACtB7omB,KAAKopmB,cAAcvomB,IAEvBb,KAAK2pmB,YACL3pmB,KAAKsrmB,cAAczqmB,QAGnBb,KAAKw1N,aAGbqyY,EAAazsmB,UAAU8vmB,kBAAoB,SAAUlqmB,GACjD,OAAQvD,EAAkBuD,IAE9B6mmB,EAAazsmB,UAAUgwmB,aAAe,WAClC,IAAIv0Y,EAAW72N,KAAKgpG,KAAKllG,UAAUK,SAAS2+lB,GAAoBC,QAAU,KACtE51lB,iBAAiBnN,KAAKsvP,WAAW,GAAI,MAAMliP,iBAAiB,UAChE,OAAOf,KAAK0zB,MAAM//B,KAAKgpG,KAAKp9F,wBAAwBmK,OAAS6e,SAASiiM,EAAU,MAEpFgxY,EAAazsmB,UAAU+vmB,gBAAkB,SAAUpyd,EAAO18I,GACtD,IAAI+jY,EAAernP,GAAS,EAAI/4I,KAAKs4M,cAAcv/D,EAAQ,GAAK/4I,KAAKs4M,cAAc,GACnFt4M,KAAKw8N,aAAa4jK,EAAc/jY,IAGpCwrmB,EAAazsmB,UAAUiwmB,kBAAoB,SAAUtyd,EAAO18I,GACxD,IAAI2sG,EAAOhpG,KAAKsvP,WACZ8wI,EAAernP,GAAS/vC,EAAKxsG,OAASwD,KAAKs4M,cAAcv/D,EAAQ,GAAK/4I,KAAKs4M,cAActvG,EAAKxsG,OAAS,GAC3GwD,KAAKw8N,aAAa4jK,EAAc/jY,IAGpCwrmB,EAAazsmB,UAAU4liB,YAAc,WACjCz7hB,GAAahB,OAAOvE,KAAKqrI,aAAaxwH,UAAW,YAAa7a,KAAKwqmB,eACnEjlmB,GAAahB,OAAOvE,KAAKqrI,aAAaxwH,UAAW,WAAY7a,KAAK+qM,UAClExlM,GAAahB,OAAOvE,KAAKqrI,aAAaxwH,UAAW,QAAS7a,KAAKqsI,SAC/DrsI,KAAK0qmB,qBAKT7C,EAAazsmB,UAAUw6N,iBAAmB,WACtCrwN,GAAahB,OAAOvE,KAAKgpG,KAAM,QAAShpG,KAAK+0N,cAC7CxvN,GAAahB,OAAOvE,KAAKgpG,KAAM,YAAahpG,KAAKk1N,aACjD3vN,GAAahB,OAAOvE,KAAKgpG,KAAM,WAAYhpG,KAAKm1N,eAGpD0yY,EAAazsmB,UAAUowmB,gBAAkB,SAAU3qmB,GAC/C,IAAIsG,EAAStG,EAAEsG,OACf,IAAO1J,EAAkBuC,KAAKm7H,WAAat1H,EAAQsB,EAAQ,IAAMnH,KAAKm7H,SAASn6H,QAAQsC,KAClFtD,KAAKqrI,aAAaxwH,UAAU1W,SAAStD,EAAEsG,QAYnCA,IAAWnH,KAAKkhE,cAAkBlhE,KAAKupmB,gBAAkBpimB,IAAWnH,KAAKsnmB,aAChD,aAAzBtnmB,KAAK+hC,kBACL/hC,KAAKupmB,gBAAkB/9lB,GAAQqb,UAAY1f,IAAWnH,KAAKqrI,aAAatR,QAAQ,KACrF/5H,KAAKq5N,eAAiB7tN,GAAQyc,MAA8B,SAAtBzc,GAAQsb,KAAKyQ,QAAqB/2B,SAAS+4H,gBAAkBv5H,KAAKkkI,iBACpG1jI,SAAS+4H,gBAAkBv5H,KAAKsnmB,aACpCzmmB,EAAE8kB,uBAhBF,GAAI3lB,KAAKqrI,aAAaxwH,UAAU/W,UAAUK,SAAS8imB,GAAoBC,aAAelnmB,KAAKomK,YAAa,CACpGpmK,KAAK+nmB,iBAAkB,EACvB,IAAIr6N,EAAW1tY,KAAK8kmB,YACpB9kmB,KAAK00H,cAAe,EACpB10H,KAAK2pmB,YACAj8N,IACD1tY,KAAKi5hB,aACLj5hB,KAAKqrI,aAAaxwH,UAAU/W,UAAUS,OAAO0imB,GAAoBC,eAYjFW,EAAazsmB,UAAUqwmB,kBAAoB,WACnCzrmB,KAAK+nmB,kBACL/nmB,KAAK2pmB,YACL3pmB,KAAKi5hB,aACLj5hB,KAAKqrI,aAAaxwH,UAAU/W,UAAUS,OAAO0imB,GAAoBC,cAGzEW,EAAazsmB,UAAUkwmB,cAAgB,SAAUzqmB,IACxCb,KAAK4mI,SAAW5mI,KAAKoqmB,kBACtBpqmB,KAAKqsI,WAGbw7d,EAAazsmB,UAAUovmB,cAAgB,SAAU3pmB,GAC7C,GAAgB,IAAZA,EAAE08G,OAA4B,IAAb18G,EAAE6lI,SAGnB1mI,KAAKkkI,gBAAgBpgI,UAAUK,SAAS8imB,GAAoB9sZ,UAAYn6M,KAAKqrI,aAAa5lH,cAAgB5kB,EAAEsG,OAAhH,CAGA,IAAIA,EAAStG,EAAEsG,OAIf,GAHIA,IAAWnH,KAAKkhE,cAAkBlhE,KAAKupmB,gBAAkBpimB,IAAWnH,KAAKsnmB,aAAyC,aAAzBtnmB,KAAK+hC,iBAC9FlhC,EAAE8kB,iBAED3lB,KAAKw8E,SAoBNx8E,KAAKqsI,cApBW,CACZrsI,KAAKomK,aACLpmK,KAAK2pmB,YACD3pmB,KAAKoqmB,kBACLpqmB,KAAKsrmB,cAAczqmB,KAIvBb,KAAKqsI,UACLrsI,KAAKkpmB,mBACLlpmB,KAAK6/D,YAAiD,KAAnC7/D,KAAKkhE,aAAankE,MAAMkT,OAAgB,KAAOjQ,KAAKkhE,aAAankE,MACpFiD,KAAK8omB,iBAAkB,EACvB9omB,KAAKw1N,aAET,IAAIi2K,EAAUzrY,KACTA,KAAKipmB,eACN9omB,WAAW,WAAcsrY,EAAQigO,iBAAoB,QAOjE7D,EAAazsmB,UAAUswmB,cAAgB,WACnC,GAAI1rmB,KAAKgpG,KAAM,CACX,IAAI4uG,EAAY53M,KAAKgpG,KAAKrmG,cAAc,MACpCi1M,IACAA,EAAYA,EAAUh2M,UAAYg2M,EAAUh2M,WAAU,GAAQg2M,EAC9D53M,KAAK0omB,mBAAmB9wZ,UAAYA,EACpC53M,KAAKipmB,eAAgB,KAIjCpB,EAAazsmB,UAAUuwmB,mBAAqB,SAAU1yd,EAAIp4I,EAAG+qmB,GACzD5rmB,KAAK0sN,kBACLzzE,EAAGn1I,UAAUM,IAAI0+lB,GAAoB9hd,UACrChhJ,KAAKs+M,cACL,IAAIvhN,EAAQiD,KAAK44N,kBAAkB3/E,EAAGpmI,aAAa,eAGnD,GAFA7S,KAAKie,KAAOg7H,EACZj5I,KAAKsgE,SAAWtgE,KAAKgnmB,eAAejqmB,IAC/BiD,KAAK4mI,UAAYgle,EAAe,CACjC,IAAIlsiB,EAAQ1/D,KAAK6rmB,gBACjB7rmB,KAAKg+D,YAAa,EAClB,IAAIzwD,GACA1M,EAAGA,EACHod,KAAMje,KAAKie,KACXqiD,SAAUZ,EACVg1D,eAAc7zH,EACd+4B,QAAQ,GAGZ,GADA55B,KAAK2mB,QAAQ,SAAUpZ,GACnBA,EAAUqsB,OACV,OAAO,EAGf,IAAIkykB,EAAc9rmB,KAAKgpG,KAAKrmG,cAAc,IAAMmgmB,GAAoB5gmB,OAMpE,OALI4pmB,GACAznmB,GAAaynmB,GAAchJ,GAAoB5gmB,OAEnD+2I,EAAGz1I,aAAa,gBAAiB,QACjCxD,KAAK2lN,YAAc3lN,KAAKommB,gBAAgBrpmB,IACjC,GAEX8qmB,EAAazsmB,UAAU2wmB,WAAa,SAAU9yd,GACtCj5I,KAAKs5J,UAAUrgB,KAAQA,EAAGn1I,UAAUK,SAAS2+lB,GAAoB9hd,YACjEhhJ,KAAK0sN,kBACLzzE,EAAGn1I,UAAUM,IAAI0+lB,GAAoB9hd,UACrChhJ,KAAKs+M,cACLrlE,EAAGz1I,aAAa,gBAAiB,UAGzCqkmB,EAAazsmB,UAAUgC,SAAW,SAAUyD,GACxC,IAAI0rB,EAAWvsB,KAAKm+M,cAcpB,OAbuB,OAAnB5xL,EAASxvB,MACT+uB,GAAM1uB,SAAS,KAAM4C,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,iBAGlEuG,GAAM1uB,SAASmvB,EAASyC,KAAMhvB,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,iBAE3EvlB,KAAKgsmB,eAAmC,OAAlBhsmB,KAAKsgE,SAC3BtgE,KAAKismB,mBAEAjsmB,KAAKkhE,aAAaolJ,kBAAoBtmN,KAAKwpmB,mBAChDnkmB,EAAOrF,KAAKwpmB,kBACZxpmB,KAAKkhE,aAAax8D,MAAMosC,QAAU,SAElC9wC,KAAKizH,gBAAkB1mG,EAASxvB,OAChCiD,KAAKg+D,YAAa,GACX,IAGPh+D,KAAKg+D,YAAch+D,KAAK4mI,QACxB5mI,KAAK6omB,gBAAiB,EACO,iBAAzB7omB,KAAK+hC,iBACL/hC,KAAKymI,mBAEF,IAGfohe,EAAazsmB,UAAUohO,aAAe,SAAUvjF,EAAIp4I,GAChD,GAAIb,KAAKs5J,UAAUrgB,KAAQA,EAAGn1I,UAAUK,SAAS2+lB,GAAoB9hd,UAAW,CAC5EhhJ,KAAKksmB,iBAAqBzumB,EAAkBuC,KAAKsgE,UAA6B,KAAhBtgE,KAAKsgE,SAEnE,GADiBtgE,KAAK2rmB,mBAAmB1yd,EAAIp4I,GAAG,GAE5C,OAGJb,KAAKgpG,MACLhpG,KAAKs+M,cAETt+M,KAAKmsmB,mBAAuB1umB,EAAkBuC,KAAKugN,YAAiC,KAAlBvgN,KAAKugN,WACvEvgN,KAAKugN,WAAatnE,EACdj5I,KAAK5C,SAASyD,KAGdb,KAAKomK,cACL1iK,EAAW1D,KAAKkkI,iBAAmBrZ,wBAAyB7qH,KAAKugN,WAAavgN,KAAKugN,WAAWj9M,GAAK,OAC/FtD,KAAKoqmB,kBACL1mmB,EAAW1D,KAAKsnmB,aAAez8e,wBAAyB7qH,KAAKugN,WAAavgN,KAAKugN,WAAWj9M,GAAK,UAGjGtD,KAAKomK,cAAgB3oK,EAAkBw7I,IAASj5I,KAAKomK,cAAgB3oK,EAAkBoD,KAC7E,YAAXA,EAAE6F,MAAiC,YAAX7F,EAAE6F,MAAmC,UAAb7F,EAAEmyD,WACnDhzD,KAAK6omB,gBAAiB,EACtB7omB,KAAKopmB,cAAcvomB,KAEnBb,KAAKomK,aAAgB3oK,EAAkBuC,KAAKugN,aAAiC,OAAlBvgN,KAAKsgE,UAAuBz/D,GAAgB,UAAXA,EAAE6F,MAC9F1G,KAAKq2N,kBAAkBx1N,KAG/BgnmB,EAAazsmB,UAAU6wmB,iBAAmB,WAEjCjsmB,KAAKwpmB,mBACNxpmB,KAAKwpmB,iBAAmBxpmB,KAAKmB,cAAc,QAAUkC,UAAW4jmB,GAAoBlqmB,QACpFiD,KAAKkhE,aAAa7sD,cAAcnP,aAAalF,KAAKwpmB,iBAAkBxpmB,KAAKkhE,cACzElhE,KAAKkhE,aAAax8D,MAAMosC,QAAU,QAEtC9wC,KAAKwpmB,iBAAiBxnmB,UAAY,GAElC,IAAK,IAAI5D,EAAK,EAAGyE,EADAmM,GAAQhP,KAAKgsmB,cACR/xiB,CAAej6D,KAAKsgE,UAAWliE,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvE,IAAI6f,EAAOpb,EAAGzE,GACd4B,KAAKwpmB,iBAAiB7nmB,YAAYsc,KAG1C4plB,EAAazsmB,UAAUsxN,gBAAkB,WACrC,IAAIvgK,EAAgBnsD,KAAKgpG,KAAKxnG,iBAAiB,IAAMshmB,GAAoB9hd,UACrE70F,EAAc3vD,SACd6H,EAAY8nD,EAAe22iB,GAAoB9hd,UAC/C70F,EAAc,GAAGzgD,gBAAgB,mBAIzCm8lB,EAAazsmB,UAAU+iN,YAAc,WACjC,IAGIkyI,EACA+7Q,EAJA5/kB,EAASxsB,KAAKwsB,OACdD,EAAW,KAIV9uB,EAHL8uB,EAAWvsB,KAAKsgE,YAIZ+vR,EAAYzzV,EAAS4vB,EAAOzvB,MAAOwvB,GACnC6/kB,EAAWxvmB,EAAS4vB,EAAOwC,KAAMzC,IAMrC,OAASxvB,MAJKU,EAAkB8uB,IAC3BpvB,EAAYkzV,GAAyB9jU,EAAZ8jU,EAGPrhU,KAFVvxB,EAAkB8uB,IAC1BpvB,EAAYkzV,GAAwB9jU,EAAX6/kB,IAMlCvE,EAAazsmB,UAAUgumB,cAAgB,SAAU/3e,GAC7C,IAAI9kG,EAAWvsB,KAAKm+M,cAChBrsM,EAAQ9R,KAAK6omB,eAAiB,KAAO7omB,KAAK2lN,YAC9C3lN,KAAKgH,eAAgBjK,MAASwvB,EAASxvB,MAAO+U,MAASA,EAAOkd,KAAQzC,EAASyC,OAAQ,GACvFhvB,KAAKqsmB,kBAAkBh7e,IAG3Bw2e,EAAazsmB,UAAUywmB,cAAgB,WAmBnC,MAjB6B,iBAAlB7rmB,KAAKsgE,UACa,kBAAlBtgE,KAAKsgE,UACa,iBAAlBtgE,KAAKsgE,SACJhiE,OAAOgumB,qBACXvvmB,OACIA,MAAOiD,KAAKsgE,SACZ34D,YAAY,GAEhBqnB,MACIjyB,MAAOiD,KAAKsgE,SACZ34D,YAAY,KAKZ3H,KAAKsgE,UAIrBuniB,EAAazsmB,UAAUixmB,kBAAoB,SAAUh7e,GAKjD,GAJArxH,KAAKg+D,YAAa,EAClBh+D,KAAKizH,cAAgBjzH,KAAKjD,MAC1BiD,KAAK2lN,YAAc3lN,KAAK8R,MACxB9R,KAAKuomB,YAAe9qmB,EAAkBuC,KAAKgvB,MAAoB,GAAZhvB,KAAKgvB,MACnDhvB,KAAK4mI,QAAS,CACf,IAAIlnE,EAAQ1/D,KAAK6rmB,gBACbU,OAAW,EAIXA,EAHiC,iBAA1BvsmB,KAAKksmB,kBACqB,kBAA1BlsmB,KAAKksmB,kBACqB,iBAA1BlsmB,KAAKksmB,iBACD5tmB,OAAOgumB,qBACdvvmB,OACIA,MAAOiD,KAAKksmB,iBACZvkmB,YAAY,GAEhBqnB,MACIjyB,MAAOiD,KAAKksmB,iBACZvkmB,YAAY,KAKT3H,KAAKksmB,iBAEpBlsmB,KAAKkqmB,iBACL,IAAI38lB,GACA1M,EAAGwwH,EACHpzG,KAAMje,KAAKie,KACXqiD,SAAUZ,EACV0gU,aAAcpgY,KAAKmsmB,mBACnBD,iBAAkBK,EAClB73e,eAAcrD,EACdt0H,MAAOiD,KAAKjD,MACZiE,QAAShB,KAAKgB,SAElBhB,KAAK2mB,QAAQ,SAAUpZ,KAG/Bs6lB,EAAazsmB,UAAU8umB,eAAiB,WACpC,GAAKzsmB,EAAkBuC,KAAKjD,OAMxBiD,KAAK4nmB,cAAc5lmB,UAAY,OANC,CAChChC,KAAK4nmB,cAAc5lmB,UAAY,oBAAsBhC,KAAKgvB,KAAO,YAC3ChvB,KAAK4nmB,cAAcjlmB,cAAc,UACvCa,aAAa,QAASxD,KAAKjD,MAAMmQ,cASzD26lB,EAAazsmB,UAAUoxmB,WAAa,SAAU3rmB,GAE1C,GADAb,KAAKsomB,WAA2B,KAAdznmB,EAAEsnB,SAAgC,KAAdtnB,EAAEsnB,SAAkBnoB,KAAKsomB,WAC3DtomB,KAAKsomB,WAEL,OADAtomB,KAAKsomB,YAAa,EACVznmB,EAAEsnB,SACN,KAAK,GACL,KAAK,GAC4B,iBAAzBnoB,KAAK+hC,iBAAuC/hC,KAAKomK,aAAgBpmK,KAAK+omB,cAAiB/omB,KAAK8kmB,YAK5F9kmB,KAAKqomB,iBAAkB,GAJvBromB,KAAKqomB,iBAAkB,EACvBromB,KAAKysmB,YAAY5rmB,IAKrBb,KAAK+omB,cAAe,EACpBlomB,EAAE8kB,iBACF,MACJ,KAAK,GACL,KAAK,EACD3lB,KAAKuomB,YAAcvomB,KAAKsnmB,YAAYvqmB,OAC/BiD,KAAKomK,aAAoC,KAArBpmK,KAAKuomB,aAAsBvomB,KAAKomK,aAAepmK,KAAK6/D,YAAYrjE,OAAS,GAC9FwD,KAAKqomB,iBAAkB,EACvBromB,KAAKysmB,YAAY5rmB,IAES,KAArBb,KAAKuomB,cACVvomB,KAAKqpmB,oBACLrpmB,KAAK2lN,YAAc,KACU,iBAAzB3lN,KAAK+hC,iBACL/hC,KAAK2pmB,aAGb9omB,EAAE8kB,iBACF,MACJ,QACI3lB,KAAKuomB,YAAcvomB,KAAKsnmB,YAAYvqmB,MACpCiD,KAAKqomB,iBAAkB,EACvBromB,KAAKysmB,YAAY5rmB,KAKjCgnmB,EAAazsmB,UAAUsxmB,aAAe,SAAU7rmB,GAC5C,OAAQA,EAAEsnB,SACN,KAAK,GACD,MACJ,KAAK,GACL,KAAK,GACDnoB,KAAK6/D,YAAc7/D,KAAKsnmB,YAAYvqmB,MACpC8D,EAAE8kB,iBACF,MACJ,KAAK,EACG3lB,KAAKomK,aACLvlK,EAAE8kB,iBAEN,MACJ,QACI3lB,KAAK4omB,iBAAmB5omB,KAAK2smB,qBAC7B3smB,KAAK6/D,YAAc7/D,KAAKsnmB,YAAYvqmB,QAIhD8qmB,EAAazsmB,UAAUwxmB,oBAAsB,WACzC,GAAI5smB,KAAK00H,aAAc,CACnB,IAAIz+C,EAAYj2E,KAAK2smB,qBACrB3smB,KAAKkhE,aAAah7C,kBAAkB+vD,EAAUh3D,IAAKg3D,EAAUh3D,OAGrE4olB,EAAazsmB,UAAUuxmB,mBAAqB,WACxC,IAAI/6lB,EAAQ5R,KAAKkhE,aACjB,OAAS3jE,MAAO8O,KAAKE,IAAIqF,EAAMkU,gBAAiB7G,IAAK5S,KAAKE,IAAIqF,EAAMoU,gBAExE6hlB,EAAazsmB,UAAUqxmB,YAAc,SAAU5rmB,GAC3C,IAAId,EAAQC,KAGZ,GAFAA,KAAKoomB,SAAU,EACfpomB,KAAK2lN,YAAc,KACf3lN,KAAKsnmB,YAAYjzlB,cAAc1R,cAAc,IAAMskmB,GAAoB9wc,WAAY,CAChEn2J,KAAKsnmB,YAAYjzlB,cAAc1R,cAAc,IAAMskmB,GAAoB9wc,WAC7EzxJ,MAAMC,WAAwC,KAA3B3E,KAAKsnmB,YAAYvqmB,MAAe,SAAW,UAG/E,GADAiD,KAAK+kmB,eAAgB,EACjB/kmB,KAAK6smB,cAAe,CACpB,IAAIx3c,GACAy3c,sBAAsB,EACtB99kB,KAAMhvB,KAAKsnmB,YAAYvqmB,MACvBypmB,WAAY,SAAUn+hB,EAAY1H,EAAOn0C,GACjC6oI,EAAYz7H,SAGhB75B,EAAMipmB,gBAAiB,EACvBjpmB,EAAMgtmB,gBAAgB1kiB,EAAY1H,EAAOn0C,KAE7CwglB,cAAensmB,EACf+4B,QAAQ,GAGZ,GADA55B,KAAK2mB,QAAQ,YAAa0uI,GACtBA,EAAYz7H,OACZ,OAEJ,IAAK55B,KAAKgpmB,iBAAmB3zc,EAAYy3c,qBAAsB,CAC3D,IAAIG,EAAcjtmB,KAAK2gE,MAAQ3gE,KAAK2gE,MAAMthE,QAAU,IAAI8oE,GACpDoiB,EAAWvqF,KAAKwjmB,WAAWxjmB,KAAKqoE,YAAY0uI,OAChD,IAAM/2M,KAAKqoE,sBAAsBC,IAA6B,WAAbiiB,IAAsC,WAAbA,EAGrE,CACD,IAAI/9D,EAASxsB,KAAKwsB,OAClByglB,EAAYvkiB,MAAOjrE,EAAkB+uB,EAAOwC,MAAsB,GAAdxC,EAAOwC,KAAW,aAAchvB,KAAKsnmB,YAAYvqmB,OAAO,EAAMiD,KAAKysK,mBAJvHwgc,EAAYvkiB,MAAM,GAAI,aAAc1oE,KAAKsnmB,YAAYvqmB,OAAO,EAAMiD,KAAKysK,cAM3EzsK,KAAK+smB,gBAAgB/smB,KAAKqoE,WAAY4kiB,EAAajtmB,KAAKwsB,WAIpEq7kB,EAAazsmB,UAAU2xmB,gBAAkB,SAAU1kiB,EAAY1H,EAAOn0C,GAC7D/uB,EAAkBuC,KAAKsnmB,eACxBtnmB,KAAKiomB,iBAAkB,EACe,KAAlCjomB,KAAKsnmB,YAAYvqmB,MAAMkT,QACvBjQ,KAAK0omB,mBAAmBC,WAAY,EACpC3omB,KAAKoomB,SAAU,EACV3qmB,EAAkBuC,KAAK0omB,mBAAmB9wZ,YAAen6M,EAAkBuC,KAAK0omB,mBAAmB1/f,OACpGhpG,KAAKilmB,iBAAiBjlmB,KAAK0omB,mBAAmB9wZ,UAAW53M,KAAK0omB,mBAAmB1/f,MAErFhpG,KAAKoomB,SAAU,EACV3qmB,EAAkBuC,KAAKsgE,WAAsC,iBAAzBtgE,KAAK+hC,kBAC1C/hC,KAAKktmB,iBACLltmB,KAAKq2N,qBAETr2N,KAAKmomB,iBAAkB,IAGvBnomB,KAAKmomB,iBAAkB,EACvBnomB,KAAKwkmB,UAAUn8hB,EAAY77C,EAAQm0C,MAI/CkniB,EAAazsmB,UAAU+xmB,aAAe,SAAUv0c,GAC5C,GAAI54J,KAAK6smB,cAAe,CACpB,IAAIx4lB,EAAgBrU,KAAKmB,cAAc,QACnCkC,UAAW4jmB,GAAoBM,eAEnCvnmB,KAAKsnmB,YAActnmB,KAAKmB,cAAc,SAClCsC,OAASiD,KAAM,QACfrD,UAAW4jmB,GAAoBK,cAEnCtnmB,KAAKgB,QAAQP,WAAWyE,aAAalF,KAAKsnmB,YAAatnmB,KAAKgB,SAC5D,IAAIo5M,GAAW,EAsCf,OArCI5uM,GAAQqb,WACRuzL,GAAW,GAEfp6M,KAAK6qmB,eAAiB/+kB,GAAM48G,aACxB1nI,QAAShB,KAAKsnmB,YACdvte,QAASqgF,GACJ6sZ,GAAoB7sZ,SAAU6sZ,GAAoBI,qBAAuBJ,GAAoBI,oBAClGpkmB,YAAcgkB,YAAajnB,KAAKotmB,uBACjCptmB,KAAKmB,eACRiE,GAAQpF,KAAK6qmB,eAAehwlB,WAAYxG,GACxCxP,GAASwP,GAAgBukJ,GACzBl1J,EAAW1D,KAAKsnmB,aACZh9e,gBAAiB,QACjBswC,YAAa56J,KAAKgB,QAAQsC,GAAK,WAC/BqO,KAAQ,UACRk5G,wBAAyB7qH,KAAKugN,WAAavgN,KAAKugN,WAAWj9M,GAAK,KAChE2f,aAAgB,MAChBC,YAAe,MACfC,eAAkB,MAClBC,WAAc,UAElBpjB,KAAKqtmB,iBAAmBrtmB,KAAKsnmB,YAAYjzlB,cAAc1R,cAAc,IAAMskmB,GAAoB9wc,YAC1F3qJ,GAAQqb,UAAY7mB,KAAKqtmB,mBAC1B9nmB,GAAanB,IAAIpE,KAAKqtmB,iBAAkB,QAASrtmB,KAAKiqJ,UAAWjqJ,MACjEA,KAAKqtmB,iBAAiB3omB,MAAMC,WAAa,UAExC6G,GAAQqb,WACT7mB,KAAKstmB,gBAAkB,IAAItwf,GAAeh9G,KAAKsnmB,aAC3Cxpf,UAAW99G,KAAK0rJ,iBAAiBrwJ,KAAK2E,MACtCw9G,WAAYx9G,KAAKq4N,aACjBniJ,UAAW,aAGnB3wE,GAAanB,IAAIpE,KAAKsnmB,YAAa,QAAStnmB,KAAKutmB,QAASvtmB,MAC1DuF,GAAanB,IAAIpE,KAAKsnmB,YAAa,QAAStnmB,KAAKwsmB,WAAYxsmB,MAC7DuF,GAAanB,IAAIpE,KAAKsnmB,YAAa,UAAWtnmB,KAAK0smB,aAAc1smB,MACjEuF,GAAanB,IAAIpE,KAAKsnmB,YAAa,OAAQtnmB,KAAKmqmB,OAAQnqmB,MACjDA,KAAK6qmB,eAGZ,OAAOzke,IAIfyhe,EAAazsmB,UAAUmymB,QAAU,WAC7BvtmB,KAAKsomB,YAAa,GAEtBT,EAAazsmB,UAAU8pmB,gBAAkB,SAAUrkmB,GAC/CywF,EAAOl2F,UAAU8pmB,gBAAgB5jmB,KAAKtB,KAAMa,GACxCb,KAAKiomB,iBACLjomB,KAAKmgI,eAGb0ne,EAAazsmB,UAAU6pmB,iBAAmB,SAAUrtZ,EAAW5uG,EAAMnoG,EAAG8nmB,GACpE,GAAI3omB,KAAKmomB,gBACLnomB,KAAKmomB,iBAAkB,OAG3B,GAAInomB,KAAK0tY,SAAU,CACf,IAAIrR,EAAer8X,KAAKugN,WAAavgN,KAAKugN,WAAW3+M,WAAU,GAAQ,KACvE0vF,EAAOl2F,UAAU6pmB,iBAAiB3jmB,KAAKtB,KAAM43M,EAAW5uG,EAAMnoG,GAC1Db,KAAK8kmB,cAAgBrnmB,EAAkBuC,KAAK2qmB,iBAAgD,YAA7B3qmB,KAAK2qmB,eAAejkmB,OACnF1G,KAAK8kmB,aAAc,EACnB9kmB,KAAK0rJ,iBAAiB1rJ,KAAK2qmB,gBAC3B3qmB,KAAK2qmB,eAAiB,MAEtB3qmB,KAAK8kmB,cAAgBrnmB,EAAkBuC,KAAK2qmB,kBAC5C3qmB,KAAKy/D,kBAAkBz/D,KAAK2qmB,gBAC5B3qmB,KAAK2qmB,eAAiB,MAE1B3qmB,KAAKgpG,KAAK78F,UAAY,EACjB1O,EAAkBm6M,IACnBl0M,EAAWk0M,GAAat0M,GAAMtD,KAAKgB,QAAQsC,GAAK,WAAYqO,KAAQ,UAAW+xH,cAAe,UAE9F1jI,KAAKkomB,mBACLlomB,KAAK4mI,SAAU,EACf5mI,KAAK2lN,YAAc3lN,KAAK8R,MACxB9R,KAAKiqmB,eACLjqmB,KAAKkomB,kBAAmB,EACxBlomB,KAAK4mI,SAAU,GAEU,iBAAzB5mI,KAAK+hC,iBAAsC/hC,KAAK6smB,gBAAkB7smB,KAAKoomB,UAClEpomB,KAAK0omB,mBAAmBC,YAAgB3omB,KAAKgpmB,gBAC1ChpmB,KAAKgomB,iBACJhomB,KAAKqoE,sBAAsBC,KACvB7qE,EAAkBuC,KAAKqoE,WAAW7rE,SAAsC,IAA3BwD,KAAKqoE,WAAW7rE,WACtEwD,KAAK0omB,oBAAuB9wZ,UAAWA,EAAUh2M,WAAU,GAAOonG,KAAMA,EAAM2/f,WAAW,IAE7F3omB,KAAKwtmB,WAAWxkgB,EAAMqzR,GACjB5+X,EAAkBuC,KAAKsgE,WACxBtgE,KAAKktmB,kBAGTltmB,KAAKiomB,iBACLjomB,KAAKmgI,gBAIjB0ne,EAAazsmB,UAAUoymB,WAAa,SAAUnK,EAAU38B,GACpD,IAAI3mkB,EAAQC,KACZ,IAAKvC,EAAkBuC,KAAKsgE,YAAc7iE,EAAkBipkB,GAAa,CACrE,IAAI1+iB,EAAUhoB,KAAKm+M,cAAcphN,MACnBsmmB,EAAS1kkB,KAAK,SAAUpiC,GAClC,OAA0B,iBAATA,GAAqC,iBAATA,IAAsBA,IAASyrB,GACvEprB,EAASmD,EAAMysB,OAAOzvB,MAAOR,KAAUyrB,KAG5ChoB,KAAK6iN,QAAQ7iN,KAAKsgE,YAI9BuniB,EAAazsmB,UAAUyrmB,yBAA2B,SAAU5td,EAAIh7H,GAC/B,iBAAzBje,KAAK+hC,iBAAsC/hC,KAAK0omB,mBAAmB9wZ,YACnE53M,KAAK0omB,mBAAmB9wZ,UAAUj2M,YAAYs3I,EAAGr3I,WAAU,IACvD5B,KAAK6smB,eACL7smB,KAAK0omB,mBAAmB1/f,KAAKxkG,KAAKyZ,KAI9C4plB,EAAazsmB,UAAU8xmB,eAAiB,WACpC,IAAInwmB,EAAQiD,KAAKm+M,cAAcphN,MAC/BiD,KAAK2lN,YAAc3lN,KAAKommB,gBAAgBrpmB,GACxC,IAAIiE,EAAUhB,KAAKgpG,KAAKrmG,cAAc,gBAAkB5F,EAAQ,MAChEiD,KAAKugN,WAAav/M,EAClBhB,KAAK+rmB,WAAW/qmB,GAChBhB,KAAKyrJ,eAETo8c,EAAazsmB,UAAUguiB,gBAAkB,WACrC,IAAI/sK,EAAer8X,KAAKgpG,KAAKrmG,cAAc,IAAMmgmB,GAAoB9hd,UACjEq7O,GACAr8X,KAAKgH,eAAgB8K,MAAS9R,KAAKommB,gBAAgB/pO,EAAaxpX,aAAa,iBAC7E7S,KAAK2lN,YAAc3lN,KAAK8R,QAGxB9R,KAAKyrJ,cACLzrJ,KAAKgpG,KAAKrmG,cAAc,IAAMmgmB,GAAoB7pd,IAAIn1I,UAAUM,IAAI6imB,GAAoB/kmB,SAGhG2lmB,EAAazsmB,UAAUqwJ,YAAc,WACjC,IAAIgid,EAAkBztmB,KAAKgpG,KAAKxnG,iBAAiB,IAAMylmB,GAAoB/kmB,OACvEurmB,GAAmBA,EAAgBjxmB,QACnC6H,EAAYopmB,EAAiBxG,GAAoB/kmB,QAIzD2lmB,EAAazsmB,UAAU+kI,YAAc,WACjC,GAAIngI,KAAKm7H,UAAY36H,SAASuL,KAAK5H,SAASnE,KAAKm7H,SAASn6H,SACtDhB,KAAK0tmB,mBADT,CAIA,IAAIztmB,GAAS25B,QAAQ,GAErB,GADA55B,KAAK2mB,QAAQ,aAAc1mB,IACvBA,EAAK25B,OAAT,CAGA,IAAI8+H,EAAW14J,KAAKmB,cAAc,OAC9BmC,GAAItD,KAAKgB,QAAQsC,GAAK,SAAUD,UAAW,kBAAqC,MAAjBrD,KAAKiT,SAAmBjT,KAAKiT,SAAW,MAEvG06lB,EAAY3tmB,KAAKmtmB,aAAaz0c,GAWlC,GAVA14J,KAAK22N,WAAap0N,EAAWvC,KAAKg6N,aAC9Bh6N,KAAKg4M,gBACLh4M,KAAK4tmB,kBAAkBl1c,GAE3BtzJ,GAAQpF,KAAKgpG,MAAO0vD,GAChB14J,KAAK26H,gBACL36H,KAAK66H,kBAAkB69B,GAE3Bl4J,SAASuL,KAAKpK,YAAY+2J,GAC1BA,EAASh0J,MAAMC,WAAa,SACH,SAArB3E,KAAKg6N,YAAwB,CAM7B,GALAh6N,KAAK6tmB,gBAAkB,EAClBpwmB,EAAkBkwmB,EAAU9ylB,aAC7B7a,KAAK6tmB,gBAAmBF,EAAU9ylB,UAAuB,cAAEjP,wBAAwBmK,OACnF/V,KAAK22N,YAAc/hM,SAAS50B,KAAK22N,WAAY,IAAO32N,KAAoB,iBAAGkN,WAAa,MAExFlN,KAAKg4M,eAAgB,CACrB,IAAIjiM,EAAS1J,KAAK0zB,MAAM//B,KAAK8qF,OAAOl/E,wBAAwBmK,QAC5D/V,KAAK22N,YAAc/hM,SAAS50B,KAAK22N,WAAY,KAAO5gN,EAAS/V,KAAK6tmB,kBAAkB3gmB,WAAa,KAErG,GAAIlN,KAAK26H,eAAgB,CACjB5kH,EAAS1J,KAAK0zB,MAAM//B,KAAKisH,OAAOrgH,wBAAwBmK,QAC5D/V,KAAK22N,YAAc/hM,SAAS50B,KAAK22N,WAAY,KAAO5gN,EAAS/V,KAAK6tmB,kBAAkB3gmB,WAAa,KAErGlN,KAAKgpG,KAAKtkG,MAAMsrD,WAAap7B,SAAS50B,KAAK22N,WAAY,IAAM,GAAGzpN,WAAa,KAC7EwrJ,EAASh0J,MAAMsrD,UAAYztD,EAAWvC,KAAKg6N,kBAG3CthE,EAASh0J,MAAMqR,OAAS,OAE5B,IACIvJ,EADA0xN,EAAc,EAQlB,IANKzgO,EAAkBuC,KAAKugN,cAAiB9iN,EAAkBuC,KAAK2lN,cAAgB3lN,KAAK2lN,aAAe,EACpG3lN,KAAKq2N,oBAGLr2N,KAAKgpG,KAAK78F,UAAY,EAEtBX,GAAQqb,WAAc7mB,KAAKupmB,iBAA4C,iBAAzBvpmB,KAAK+hC,iBAClD/hC,KAAK8omB,iBAA4C,aAAzB9omB,KAAK+hC,iBAAmC,CACjEm8L,EAAcl+N,KAAKs8jB,eAAe5ja,GAClC,IAAIwhE,EAAYl6N,KAAKm6N,cAAgBn6N,KAAKgpG,KAAOhpG,KAAKs4M,cAAc,GACpE9rM,IAASooB,SAASznB,iBAAiB+sN,GAAWE,WAAY,IACtDxlM,SAASznB,iBAAiBnN,KAAKkhE,cAAco5J,YAAa,IAC1D1lM,SAASznB,iBAAiBnN,KAAKkhE,aAAa7sD,eAAe4mN,gBAAiB,KAEpFj7N,KAAK8tmB,kBACL9tmB,KAAKg4J,YAAYU,EAAUwlE,EAAa1xN,GACxCxM,KAAK22H,eAAe+hC,GAChBltJ,GAAQqb,WACR7mB,KAAKm7H,SAASn6H,QAAQ8C,UAAUM,IAAI6imB,GAAoBG,SAC3B,iBAAzBpnmB,KAAK+hC,iBAAgE,aAAzB/hC,KAAK+hC,kBAC7C/hC,KAAKupmB,gBAAkBvpmB,KAAK8omB,mBAChC9omB,KAAKm7H,SAAS1E,WAAcrgH,EAAG,MAAOC,EAAG,QAEzCrW,KAAKoqmB,mBACLpqmB,KAAKm7H,SAASn6H,QAAQ8C,UAAUM,IAAI6imB,GAAoBO,cACxDxnmB,KAAKm7H,SAASjnH,UAAakC,EAAG,EAAGC,EAAG,GACpCrW,KAAKm7H,SAAS3zE,WACd9jD,EAAW1D,KAAKm7H,SAASn6H,SAAW0D,MAAO,2CAC3Cf,GAAUnD,SAASuL,KAAM/L,KAAKm7H,SAASn6H,SAAUimmB,GAAoBS,iBACrE1nmB,KAAK+tmB,uBACL/tmB,KAAKgumB,gBAAkBL,EAAU9ylB,UAAUlY,cAAc,gBACzD3C,KAAKqtmB,iBAAmBM,EAAU9ylB,UAAUlY,cAAc,IAAMskmB,GAAoB9wc,WACpF5wJ,GAAanB,IAAIpE,KAAKgumB,gBAAiB,QAAShumB,KAAKiumB,gBAAiBjumB,MACtEuF,GAAanB,IAAIpE,KAAKqtmB,iBAAkB,QAASrtmB,KAAKiqJ,UAAWjqJ,QAGzE04J,EAASh0J,MAAMC,WAAa,UAC5BhB,GAAU+0J,GAAW,iBAErB,IAAK,IAAIt6J,EAAK,EAAG8vmB,EADUlumB,KAAKm7H,SAAS3hH,oBAAoBxZ,KAAKqrI,aAAaxwH,WACfzc,EAAK8vmB,EAAuB1xmB,OAAQ4B,IAAM,CACtG,IAAI4C,EAAUktmB,EAAuB9vmB,GACrCmH,GAAanB,IAAIpD,EAAS,SAAUhB,KAAK4kI,cAAe5kI,MAExDwL,GAAQqb,UAAY7mB,KAAKoqmB,kBACzB7kmB,GAAanB,IAAIpE,KAAKgpG,KAAM,SAAUhpG,KAAKmumB,WAAYnumB,MAE3D0D,EAAW1D,KAAKkkI,iBAAmBw2B,gBAAiB,SAEpD/2J,GADkB3D,KAAK6smB,cAAgB7smB,KAAKsnmB,YAAYjzlB,cAAgBrU,KAAKqrI,aAAaxwH,YACjEoslB,GAAoBC,aAE7ClnmB,KAAKiomB,iBAAkB,EACvB,IAAI16lB,GAAc02D,MAAOjkE,KAAKm7H,SAAUvhG,QAAQ,EAAOuX,WAFrC5Z,KAAM,SAAUrsB,SAAU,MAG5ClL,KAAK2mB,QAAQ,OAAQpZ,GACjBA,EAAUqsB,SAGdj2B,GAAU3D,KAAKqrI,aAAaxwH,YAAaoslB,GAAoBE,gBAC7DnnmB,KAAKm7H,SAAS3D,KAAK,IAAIn/F,GAAU9qB,EAAU4jC,WAA6B,MAAhBnxC,KAAKunE,OAAmBvnE,KAAKgB,QAAU,UAEnG6mmB,EAAazsmB,UAAUu7H,eAAiB,SAAU+hC,GAC9C,IAAKltJ,GAAQqb,UAAarb,GAAQqb,UAAuC,iBAAzB7mB,KAAK+hC,kBAAsC/hC,KAAK8omB,gBAAmB,CAC/FpxlB,GAAUghJ,GACZl8J,OAAS,IACnBk8J,EAASh0J,MAAMijD,WAAa/yB,SAASznB,iBAAiBurJ,GAAU/wG,UAAW,IAAM,QAI7FkgjB,EAAazsmB,UAAUkhkB,eAAiB,SAAU5ja,GAC9C,IAAI01c,EAAcjhmB,iBAAiBurJ,GAC/B21c,EAAYz5kB,SAASw5kB,EAAYC,UAAW,IAC5CC,EAAe15kB,SAASw5kB,EAAYE,aAAc,IACtD,OAAOtumB,KAAK67H,iBAAiBwye,EAAYC,IAE7CzG,EAAazsmB,UAAU48J,YAAc,SAAUh3J,EAASk9N,EAAa1xN,GACjE,IAAIzM,EAAQC,KACZA,KAAKm7H,SAAW,IAAItG,GAAM7zH,GACtBgV,MAAOhW,KAAKqwI,WAAYpZ,WAAY,WACpCxB,SAAUz1H,KAAKqrI,aAAaxwH,UAAW47G,WAAargH,EAAG,OAAQC,EAAG,QAAUpK,QAASiyN,EACrFhrN,UAAWlT,KAAKkT,UAAWrH,QAASW,EAAM0H,UAAYkC,EAAG,OAAQC,EAAG,UACpEkxD,OAAQvnE,KAAKunE,OACbtlE,MAAO,WACElC,EAAMgomB,iBACPhomB,EAAMurmB,gBAEVvrmB,EAAMgomB,iBAAkB,EACxBhomB,EAAMwumB,gBAEV7smB,KAAM,WACF6D,GAAanB,IAAI5D,SAAU,YAAaT,EAAMyrmB,gBAAiBzrmB,GAC/DA,EAAMqmK,aAAc,EAChBrmK,EAAMqqmB,mBACN/lmB,GAAatE,EAAMsrI,aAAaxwH,YAAaoslB,GAAoBC,aACjEnnmB,EAAMiomB,eAAgB,EACtBjomB,EAAMunmB,YAAYplmB,QACdnC,EAAMsrI,aAAa5lH,aACnB9hB,GAAU5D,EAAMsrI,aAAa5lH,aAAcwhlB,GAAoBQ,gBAGvE1nmB,EAAM0rmB,wBAIlB5D,EAAazsmB,UAAU++N,YAAc,WACjC,OAAQ18N,EAAkBuC,KAAKs4M,gBAAgD,IAA9Bt4M,KAAKs4M,cAAc97M,QAExEqrmB,EAAazsmB,UAAU0ymB,gBAAkB,aAGzCjG,EAAazsmB,UAAUgvmB,eAAiB,WACpC,MAAgC,iBAAzBpqmB,KAAK+hC,iBAAsC/hC,KAAKupmB,gBAE3D1B,EAAazsmB,UAAUwpI,cAAgB,WAC/Bp5H,GAAQqb,WAAuC,iBAAzB7mB,KAAK+hC,kBAC1B/hC,KAAKoqmB,kBAA+C,aAAzBpqmB,KAAK+hC,kBAAmC/hC,KAAKupmB,gBAAkBvpmB,KAAK8omB,kBAChG9omB,KAAK2pmB,YAEL3pmB,KAAKwsB,OAAOurL,UAAYt6M,EAAkBuC,KAAK2lmB,sBAC/C3lmB,KAAK2lmB,mBAAmBjhmB,MAAM6iE,OAAS,IACvCvnE,KAAK2lmB,mBAAmBjhmB,MAAMosC,QAAU,SAGhD+2jB,EAAazsmB,UAAU2ymB,qBAAuB,WAC1C,IAAIF,EAAkB7tmB,KAAKsnmB,YAAYjzlB,cAAczI,wBAAwBmK,OAC7E/V,KAAKm7H,SAASn6H,QAAQ0D,MAAMsrD,UAAY,OACxChwD,KAAKm7H,SAASn6H,QAAQ0D,MAAMsR,MAAQ,OACpChW,KAAKgpG,KAAKtkG,MAAMsrD,UAAap0D,OAAO0d,YAAcu0lB,EAAmB,KACrE7tmB,KAAKgpG,KAAKtkG,MAAMqR,OAAUna,OAAO0d,YAAcu0lB,EAAmB,KAClE,IAAIW,EAAexumB,KAAKsnmB,YAAYjzlB,cAAc1R,cAAc,IAAMskmB,GAAoB9wc,WAC1F9wJ,EAAOrF,KAAKsnmB,aACZkH,EAAan6lB,cAAcnP,aAAalF,KAAKsnmB,YAAakH,IAE9D3G,EAAazsmB,UAAUygI,iBAAmB,SAAU/0F,GAChD,IAAIo3L,EACAuwY,EAAc3nkB,EACdy5K,EAAavgN,KAAKgpG,KAAKrmG,cAAc,IAAMskmB,GAAoB/kmB,QAAUlC,KAAKugN,WAC9E2Z,EAAYl6N,KAAKm6N,cAAgBn6N,KAAKgpG,KAAOhpG,KAAKs4M,cAAc,GAChEo2Z,EAAW1umB,KAAKm6N,cAAgBn6N,KAAKgpG,KAAOhpG,KAAKs4M,cAAct4M,KAAKsvP,WAAW9yP,OAAS,GACxFq6N,EAAWqD,EAAUtuN,wBAAwBmK,OAC7C4gN,EAAa32N,KAAKgpG,KAAKrxC,aAAe,EACtC5hD,EAAStY,EAAkB8iN,GAAc2Z,EAAU9lN,UAAYmsM,EAAWnsM,UAE9E,GAD0Bs6lB,EAASt6lB,UACTuiN,EAAa5gN,IAAWtY,EAAkBuC,KAAKs4M,gBACrEt4M,KAAKs4M,cAAc97M,OAAS,IAAMiB,EAAkB8iN,GAAa,CACjE,IAAIrhM,EAAQlf,KAAKgpG,KAAKrxC,aAAek/J,EACjC83Y,EAAgB/5kB,SAASznB,iBAAiBnN,KAAKgpG,MAAM2lgB,cAAe,IACxEzwY,GAAeh/M,GAASlf,KAAKs4M,cAAc97M,OAASwD,KAAK2lN,cAAgBkR,EAAW43Y,EAAcE,EAClG3umB,KAAKgpG,KAAK78F,UAAYo0M,EAAWnsM,eAE5B2B,EAAS4gN,GACduH,EAAcvH,EAAaE,EAAW,EACtC72N,KAAKgpG,KAAK78F,UAAY4J,EAAS4gN,EAAaE,EAAW,GAGvDqH,EAAcnoN,EAIlB,QADAmoN,EAAcA,EAAcrH,EAAW43Y,GAAgB53Y,EADrC72N,KAAKqrI,aAAaxwH,UAAU88C,cACmC,IAGrFkwiB,EAAazsmB,UAAUi1I,SAAW,WAC9B,IAAIr6H,EAAQzT,EAAWvC,KAAK61N,YAC5B,GAAI7/M,EAAMzX,QAAQ,MAAQ,EAAG,CAEzByX,GADiBhW,KAAKqrI,aAAaxwH,UAAUjW,YAAcgX,WAAW5F,GAAS,KAC5D9I,WAAa,KAEpC,GAAI1B,GAAQqb,WAAc7mB,KAAKupmB,iBAA4C,iBAAzBvpmB,KAAK+hC,iBAClD/hC,KAAK8omB,iBAA4C,aAAzB9omB,KAAK+hC,iBAAmC,CACjE,IAAIm4L,EAAYl6N,KAAKm6N,cAAgBn6N,KAAKgpG,KAAOhpG,KAAKs4M,cAAc,GACpEtiM,EAAS4e,SAAS5e,EAAO,IAE8D,GAFvD4e,SAASznB,iBAAiB+sN,GAAWE,WAAY,IAC7ExlM,SAASznB,iBAAiBnN,KAAKkhE,cAAco5J,YAAa,IAC1D1lM,SAASznB,iBAAiBnN,KAAKkhE,aAAa7sD,eAAe4mN,gBAAiB,KAAY,KAEhG,OAAOjlN,GAEX6xlB,EAAazsmB,UAAUwzmB,aAAe,SAAU9klB,GAC5C,IAAI+klB,EAAgB7umB,KAAKgpG,KAAKrxC,aAC1Bm3iB,EAAa9umB,KAAKugN,WAAWnsM,UAAYpU,KAAKugN,WAAW5oJ,aAAe33D,KAAKgpG,KAAK78F,UAClFokiB,EAAavwiB,KAAKgpG,KAAK78F,UAAY2imB,EAAaD,EACpDt+D,EAAazmhB,EAAYymhB,EAAoE,EAAvD37gB,SAASznB,iBAAiBnN,KAAKgpG,MAAMq1H,WAAY,IAAUkyU,EACjG,IAAIw+D,EAAW/umB,KAAKugN,WAAWnsM,UAAYpU,KAAKugN,WAAW5oJ,aAAe33D,KAAKgpG,KAAK78F,UACpF4imB,EAAW/umB,KAAKwsB,OAAOurL,UAAYt6M,EAAkBuC,KAAK2lmB,oBACtDoJ,EAAW/umB,KAAK2lmB,mBAAmBhuiB,aAAeo3iB,EAC7B,IAArB/umB,KAAK2lN,YACL3lN,KAAKgpG,KAAK78F,UAAY,GAEjB2imB,EAAaD,KAAmBE,EAAW,GAAK/umB,KAAKgpG,KAAKrxC,aAAeo3iB,MAC9E/umB,KAAKgpG,KAAK78F,UAAYokiB,IAG9Bs3D,EAAazsmB,UAAU+Q,UAAY,WAC/B,IAAIokiB,EAAavwiB,KAAKugN,WAAWnsM,UAAYpU,KAAKgpG,KAAK78F,UACtCnM,KAAKugN,WAAWnsM,UAAYpU,KAAKugN,WAAW5oJ,aAAe33D,KAAKgpG,KAAK78F,UACtFokiB,EAAavwiB,KAAKwsB,OAAOurL,UAAYt6M,EAAkBuC,KAAK2lmB,oBACxDp1D,EAAavwiB,KAAK2lmB,mBAAmBhuiB,aAAe44e,EACxD,IAAIw+D,EAAY/umB,KAAKugN,WAAWnsM,UAAYpU,KAAKugN,WAAW5oJ,aAAe33D,KAAKgpG,KAAK78F,UAC5D,IAArBnM,KAAK2lN,YACL3lN,KAAKgpG,KAAK78F,UAAY,EAEjBokiB,EAAa,EAClBvwiB,KAAKgpG,KAAK78F,UAAYnM,KAAKgpG,KAAK78F,UAAYokiB,EAErCw+D,EAAW,GAAK/umB,KAAKgpG,KAAKrxC,aAAeo3iB,IAChD/umB,KAAKgpG,KAAK78F,UAAYnM,KAAKugN,WAAWnsM,WAAapU,KAAKwsB,OAAOurL,UAAYt6M,EAAkBuC,KAAK2lmB,oBAC9F3lmB,KAAK2lmB,mBAAmBhuiB,aAAe,KAGnDkwiB,EAAazsmB,UAAU4vmB,cAAgB,WACnC,OAAO,GAEXnD,EAAazsmB,UAAUyxmB,YAAc,WACjC,OAAO7smB,KAAKupmB,gBAEhB1B,EAAazsmB,UAAU4zmB,cAAgB,WACnC,OAAO,GAEXnH,EAAazsmB,UAAUi7N,kBAAoB,SAAUx1N,GACjD,GAAKpD,EAAkBoD,GAanBb,KAAK4umB,cAAa,QAZlB,OAAQ/tmB,EAAEmyD,QACN,IAAK,WACL,IAAK,OACL,IAAK,MACDhzD,KAAK4umB,eACL,MACJ,QACI5umB,KAAKmM,cAQrB07lB,EAAazsmB,UAAU6uJ,UAAY,WAC/BjqJ,KAAKsnmB,YAAYvqmB,MAAQ,GACzBiD,KAAKysmB,YAAY,OAErB5E,EAAazsmB,UAAU+ymB,WAAa,WAChCnumB,KAAKsnmB,YAAYh3d,QAErBu3d,EAAazsmB,UAAU28J,WAAa,SAAUl4J,GAE1C,GADAG,KAAKoomB,SAAU,EACTpomB,KAAKm7H,UAAY36H,SAASuL,KAAK5H,SAASnE,KAAKm7H,SAASn6H,UAAYhB,KAAKiomB,gBAA7E,CAGA1imB,GAAahB,OAAO/D,SAAU,YAAaR,KAAKwrmB,iBAChDxrmB,KAAK0tY,UAAW,EAChB1tY,KAAK6qmB,eAAiB,KACtB7qmB,KAAK8omB,iBAAkB,EACvB9omB,KAAKqomB,iBAAkB,EAEvB,IAAK,IAAIjqmB,EAAK,EAAG6wmB,EADcjvmB,KAAKm7H,SAAS3hH,oBAAoBxZ,KAAKqrI,aAAaxwH,WACXzc,EAAK6wmB,EAA2BzymB,OAAQ4B,IAAM,CAClH,IAAI4C,EAAUiumB,EAA2B7wmB,GACzCmH,GAAahB,OAAOvD,EAAS,SAAUhB,KAAK4kI,eAE5Cp5H,GAAQqb,UAAY7mB,KAAKoqmB,mBACzB/lmB,GAAa7D,SAASuL,KAAM/L,KAAKm7H,SAASn6H,SAAUimmB,GAAoBS,iBACxEnimB,GAAahB,OAAOvE,KAAKgpG,KAAM,SAAUhpG,KAAKmumB,aAE9CnumB,KAAKoqmB,mBACA5+lB,GAAQqb,WACT7mB,KAAKstmB,gBAAgBj7lB,UACjBrS,KAAKqtmB,kBACL9nmB,GAAahB,OAAOvE,KAAKqtmB,iBAAkB,QAASrtmB,KAAKiqJ,YAG7DjqJ,KAAKgumB,kBACLzomB,GAAahB,OAAOvE,KAAKgumB,gBAAiB,QAAShumB,KAAKiumB,iBACxD1omB,GAAahB,OAAOvE,KAAKqtmB,iBAAkB,QAASrtmB,KAAKiqJ,YAE7D1kJ,GAAahB,OAAOvE,KAAKsnmB,YAAa,QAAStnmB,KAAKutmB,SACpDhomB,GAAahB,OAAOvE,KAAKsnmB,YAAa,QAAStnmB,KAAKwsmB,YACpDjnmB,GAAahB,OAAOvE,KAAKsnmB,YAAa,UAAWtnmB,KAAK0smB,cACtDnnmB,GAAahB,OAAOvE,KAAKsnmB,YAAa,OAAQtnmB,KAAKmqmB,QACnDnqmB,KAAKsnmB,YAAc,MAEvB5jmB,EAAW1D,KAAKkkI,iBAAmBw2B,gBAAiB,QAAS7vC,wBAAyB,OACtF7qH,KAAKqrI,aAAaxwH,UAAU/W,UAAUS,OAAO0imB,GAAoBE,eAC7DnnmB,KAAK6smB,gBACL7smB,KAAK0omB,mBAAmBC,WAAY,GAExC3omB,KAAKiomB,iBAAkB,EACvB,IAAIxrY,GACAllM,KAAM,UACNrsB,SAAU,IACVrL,MAAOA,GAAgB,GAEvB0N,GAAc02D,MAAOjkE,KAAKm7H,SAAUvhG,QAAQ,EAAOuX,UAAWsrL,GAClEz8N,KAAK2mB,QAAQ,QAASpZ,GAClBA,EAAUqsB,SAGe,iBAAzB55B,KAAK+hC,iBACL/hC,KAAK0mmB,YAEL1mmB,KAAKomK,YACLpmK,KAAKm7H,SAASxzC,KAAK,IAAItvD,GAAU9qB,EAAU4jC,YAG3CnxC,KAAKuumB,kBAGb1G,EAAazsmB,UAAUmzmB,aAAe,WAClCvumB,KAAKomK,aAAc,EACnBpmK,KAAKgomB,eAAgB,EACrBhomB,KAAKm7H,SAAS9oH,UACdhN,EAAOrF,KAAKm7H,SAASn6H,UAEzB6mmB,EAAazsmB,UAAU6ymB,gBAAkB,WACrCjumB,KAAK2pmB,YACL3pmB,KAAKqsI,WAMTw7d,EAAazsmB,UAAUg3G,OAAS,WACC,UAAzBpyG,KAAKgB,QAAQgC,QACbhD,KAAKkhE,aAAelhE,KAAKgB,SAGzBhB,KAAKkhE,aAAelhE,KAAKmB,cAAc,SACnCnB,KAAKgB,QAAQgC,UAAYhD,KAAK6pmB,mBAC9B7pmB,KAAKgB,QAAQ0D,MAAMosC,QAAU,QAEjC9wC,KAAKgB,QAAQqT,cAAcnP,aAAalF,KAAKkhE,aAAclhE,KAAKgB,SAChEhB,KAAK4pmB,gBAAgB5pmB,KAAKkhE,eAE9BlhE,KAAKqrI,aAAev/G,GAAM48G,aACtB1nI,QAAShB,KAAKkhE,aACd64D,QAAS/5H,KAAKgvmB,iBAAmB/H,GAAoB/2jB,MAAQ,KAC7DhpB,eAAgBlnB,KAAKknB,eACrBjkB,YACIu5E,SAAmC,iBAAzBx8E,KAAK+hC,iBAA4C/hC,KAAKw8E,SAChEv1D,YAAajnB,KAAKinB,YAClBhU,SAAUjT,KAAKiT,SACfmS,QAASplB,KAAKolB,QACdlS,UAAWlT,KAAKkT,UAChBqS,gBAAiBvlB,KAAKulB,kBAE3BvlB,KAAKmB,eACJnB,KAAKgB,QAAQgC,UAAYhD,KAAK6pmB,iBAC9B7pmB,KAAKgB,QAAQW,YAAY3B,KAAKqrI,aAAaxwH,WAG3C7a,KAAKkhE,aAAa7sD,cAAcnP,aAAalF,KAAKgB,QAAShB,KAAKkhE,cAEpElhE,KAAK4nmB,cAAgB5nmB,KAAKmB,cAAc,UACpCsC,OAASigI,cAAe,OAAQqG,SAAY,KAAM93H,MAASg1lB,GAAoBW,iBAEnF/imB,GAAS7E,KAAK4nmB,eAAgB5nmB,KAAKqrI,aAAaxwH,WAChD7a,KAAKyqK,oBAAoBzqK,KAAKgB,QAAShB,KAAK4nmB,eAC5C5nmB,KAAKqmmB,YACLrmmB,KAAKqrI,aAAaxwH,UAAUnW,MAAMsR,MAAQzT,EAAWvC,KAAKgW,OAC1DhW,KAAKqrI,aAAaxwH,UAAU/W,UAAUM,IAAI,SAC1CpE,KAAKm+hB,YACLn+hB,KAAK4qH,SAAW5qH,KAAKgB,QAAQ24H,aAAa,YAAc35H,KAAKgB,QAAQ6R,aAAa,YAAc,IAChG7S,KAAKgB,QAAQ0K,gBAAgB,YAC7B,IAAIpI,EAAKtD,KAAKgB,QAAQ6R,aAAa,MAAQ7S,KAAKgB,QAAQ6R,aAAa,MAAQrT,EAAY,oBAMzF,GALAQ,KAAKgB,QAAQsC,GAAKA,EAClBtD,KAAK4nmB,cAActkmB,GAAKA,EAAK,UAC7BtD,KAAKkkI,gBAAgB1gI,aAAa,WAAYxD,KAAK4qH,UACnDlnH,EAAW1D,KAAKkkI,gBAAiBlkI,KAAK0pmB,qBACtC1pmB,KAAKypmB,oBACc,OAAfzpmB,KAAKjD,OAAuC,OAArBiD,KAAK2lN,aAAsC,OAAd3lN,KAAKgvB,KACzDhvB,KAAKm5N,iBAEJ,GAA6B,WAAzBn5N,KAAKgB,QAAQgC,SAAwBhD,KAAKgB,QAAQgS,QAAQ,GAAI,CACnE,IAAIqmV,EAAgBr5V,KAAKgB,QACzBhB,KAAKjD,MAAQs8V,EAAcrmV,QAAQqmV,EAAc15R,eAAe5iE,MAChEiD,KAAKgvB,KAAOvxB,EAAkBuC,KAAKjD,OAAS,KAAOs8V,EAAcrmV,QAAQqmV,EAAc15R,eAAe1jD,YACtGjc,KAAKm5N,YAETn5N,KAAK4pmB,gBAAgB5pmB,KAAKgB,SACrBhB,KAAKolB,UACNplB,KAAKkkI,gBAAgBtZ,UAAY,GAErC5qH,KAAK4mI,SAAU,EACf5mI,KAAKgB,QAAQ0D,MAAM+I,QAAU,GAC7BzN,KAAKkhE,aAAaguiB,SAAW,SAAUrumB,GAAKA,EAAEsumB,4BAC9CnvmB,KAAKkhE,aAAakuiB,SAAW,SAAUvumB,GAAKA,EAAEsumB,4BAC1CnvmB,KAAKgB,QAAQ24H,aAAa,cAC1B35H,KAAKqsI,WAIbw7d,EAAazsmB,UAAUy/H,kBAAoB,SAAU69B,GAE7C14J,KAAKisH,OACLjsH,KAAKisH,OAAOjqH,UAAY,IAGxBhC,KAAKisH,OAASjsH,KAAKmB,cAAc,OACjCwC,GAAU3D,KAAKisH,QAASg7e,GAAoBh7e,SAGhD,IAAK,IAAI7tH,EAAK,EAAGyE,EADAmM,GAAQhP,KAAK26H,eACR1gE,KAAoB77D,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC5D,IAAI6f,EAAOpb,EAAGzE,GACd4B,KAAKisH,OAAOtqH,YAAYsc,GAE5B7Y,GAAQpF,KAAKisH,QAASysC,IAE1Bmvc,EAAazsmB,UAAUwymB,kBAAoB,SAAUl1c,GAE7C14J,KAAK8qF,OACL9qF,KAAK8qF,OAAO9oF,UAAY,IAGxBhC,KAAK8qF,OAAS9qF,KAAKmB,cAAc,OACjCwC,GAAU3D,KAAK8qF,QAASm8gB,GAAoBn8gB,SAGhD,IAAK,IAAI1sF,EAAK,EAAGyE,EADAmM,GAAQhP,KAAKg4M,eACR/9I,KAAoB77D,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC5D,IAAI6f,EAAOpb,EAAGzE,GACd4B,KAAK8qF,OAAOnpF,YAAYsc,GAE5B,IAAIm+G,EAAas8B,EAAS/1J,cAAc,iBACxC+1J,EAASxzJ,aAAalF,KAAK8qF,OAAQsxC,IAEvCyre,EAAazsmB,UAAUi0mB,WAAa,SAAUrglB,GAC1ChvB,KAAKgvB,KAAOA,GAEhB64kB,EAAazsmB,UAAUk0mB,YAAc,SAAUvymB,GAC3CiD,KAAKjD,MAAQA,GAEjB8qmB,EAAazsmB,UAAUsymB,aAAe,WAC7BjwmB,EAAkBuC,KAAKm7H,YAAa36H,SAASuL,KAAK5H,SAASnE,KAAKm7H,SAASn6H,YACxEhB,KAAKupmB,gBAAoB/9lB,GAAQqb,UAAY7mB,KAAKoqmB,mBAA+C,iBAAzBpqmB,KAAK+hC,iBAC/E/hC,KAAKm7H,SAASpG,gBAAgB/0H,KAAKqrI,aAAaxwH,YAGxDgtlB,EAAazsmB,UAAUkrmB,iBAAmB,SAAU98lB,GAGhD,GAFAxJ,KAAKysD,MAAM,KAAMjjD,GACjBxJ,KAAKwkmB,UAAUxkmB,KAAKqoE,aACfroE,KAAKgpmB,iBAAmBhpmB,KAAKgomB,eAAiBxnmB,SAAS+4H,gBAAkBv5H,KAAKsnmB,YAAa,CAC5FtnmB,KAAKsgE,SAAWtgE,KAAKgnmB,eAAehnmB,KAAKjD,OACzC,IAAIwvB,EAAWvsB,KAAKm+M,cACpBn+M,KAAKgH,eAAgBjK,MAASwvB,EAASxvB,MAAOiyB,KAAQzC,EAASyC,SAOvE64kB,EAAazsmB,UAAUuyF,kBAAoB,SAAUkF,EAASC,GAC7B,iBAAzB9yF,KAAK+hC,iBACL/hC,KAAKummB,kBAAkB,SAAU,QAAS,cAAe1zgB,GAE7D,IAAK,IAAIz0F,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKu1F,GAAUz0F,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,QACL,IAAK,aACD,MACJ,IAAK,iBACDtK,KAAKypmB,oBACL,MACJ,IAAK,QACDxjmB,EAAkBjG,KAAKqrI,aAAaxwH,WAAa7E,MAASzT,EAAWswF,EAAQ78E,SAC7E,MACJ,IAAK,cACD8V,GAAMs7G,eAAev0C,EAAQ5rE,YAAajnB,KAAKkhE,cAC/C,MACJ,IAAK,uBACGlhE,KAAKsnmB,aACLx7kB,GAAMs7G,eAAev0C,EAAQu6gB,qBAAsBptmB,KAAKsnmB,aAE5D,MACJ,IAAK,WAC4B,iBAAzBtnmB,KAAK+hC,iBACLjW,GAAMw7G,YAAYz0C,EAAQrW,SAAUx8E,KAAKkhE,cAE7C,MACJ,IAAK,WACDlhE,KAAKknI,YAAYr0C,EAASC,GAC1B,MACJ,IAAK,YACD9yF,KAAK80H,eACL,MACJ,IAAK,UACD90H,KAAKu8E,YACL,MACJ,IAAK,OACD,GAAqB,OAAjBsW,EAAQ7jE,KAAe,CACvBhvB,KAAKysD,QACL,MAQJ,GANKzsD,KAAKgpG,OACFhpG,KAAKqoE,sBAAsBC,KAC3BtoE,KAAKkomB,kBAAmB,GAE5BlomB,KAAKqhN,eAEJrhN,KAAKkomB,iBAAkB,CACxB,IAAIjvd,EAAKj5I,KAAK8pmB,iBAAiBj3gB,EAAQ7jE,MACnChvB,KAAKs5J,UAAUrgB,GACfj5I,KAAKw8N,aAAavjF,EAAI,MAGtBj5I,KAAKqvmB,WAAWv8gB,EAAQ9jE,MAGhC,MACJ,IAAK,QACD,GAAsB,OAAlB6jE,EAAQ91F,MAAgB,CACxBiD,KAAKysD,QACL,MASJ,GAPAzsD,KAAK+N,OAAO,qBAAuB8kF,QAASA,IACvC7yF,KAAKgpG,OACFhpG,KAAKqoE,sBAAsBC,KAC3BtoE,KAAKkomB,kBAAmB,GAE5BlomB,KAAKqhN,eAEJrhN,KAAKkomB,iBAAkB,CACxB,IAAIjqlB,EAAOje,KAAK+pmB,kBAAkBl3gB,EAAQ91F,OACtCiD,KAAKs5J,UAAUr7I,GACfje,KAAKw8N,aAAav+M,EAAM,MAGxBje,KAAKsvmB,YAAYx8gB,EAAQ/1F,OAGjC,MACJ,IAAK,QACD,GAAsB,OAAlB81F,EAAQ/gF,MAAgB,CACxB9R,KAAKysD,QACL,MAQJ,GANKzsD,KAAKgpG,OACFhpG,KAAKqoE,sBAAsBC,KAC3BtoE,KAAKkomB,kBAAmB,GAE5BlomB,KAAKqhN,eAEJrhN,KAAKkomB,iBAAkB,CACxB,IAAIlnmB,EAAUhB,KAAKs4M,cAAczlH,EAAQ/gF,OACrC9R,KAAKs5J,UAAUt4J,GACfhB,KAAKw8N,aAAax7N,EAAS,MAG3BhB,KAAK8R,MAAQghF,EAAQhhF,MAG7B,MACJ,IAAK,iBACG9R,KAAKm7H,UACLn7H,KAAK66H,kBAAkB76H,KAAKm7H,SAASn6H,SAEzC,MACJ,IAAK,iBACGhB,KAAKm7H,UACLn7H,KAAK4tmB,kBAAkB5tmB,KAAKm7H,SAASn6H,SAEzC,MACJ,IAAK,gBACIvD,EAAkBuC,KAAKsgE,WAAmC,MAAtBtgE,KAAKgsmB,eAC1ChsmB,KAAKismB,mBAET,MACJ,IAAK,iBACDnglB,GAAM88G,eAAe5oI,KAAKqrI,cAC1Bv/G,GAAMg9G,YAAY9oI,KAAKkhE,aAAc2xB,EAAQ3rE,eAAgBlnB,KAAKinB,YAAajnB,KAAKmB,eACpF,MACJ,IAAK,kBACD2qB,GAAMk8G,eAAen1C,EAAQttE,gBAAiBvlB,KAAKkhE,aAAclhE,KAAKqrI,aAAc,KAAMrrI,KAAKmB,eAC/FnB,KAAKqlB,iBACL,MACJ,QACI,IAAIkqlB,OAAW,EACfA,EAAWvvmB,KAAKkjmB,cAAc54lB,EAAMuoF,EAASC,GAC7CxB,EAAOl2F,UAAUuyF,kBAAkBrsF,KAAKtB,KAAMuvmB,EAASp/O,YAAao/O,EAASpM,gBAK7F0E,EAAazsmB,UAAU8rI,YAAc,SAAUr0C,EAASC,GACpD9yF,KAAKqrI,aAAaxwH,UAAU/W,UAAUS,OAAOuuF,EAAQ7/E,UACrD6Y,GAAMo7G,YAAYr0C,EAAQ5/E,UAAWjT,KAAKqrI,aAAaxwH,YACnD7a,KAAKm7H,WACLn7H,KAAKm7H,SAASn6H,QAAQ8C,UAAUS,OAAOuuF,EAAQ7/E,UAC/CjT,KAAKm7H,SAASn6H,QAAQ8C,UAAUM,IAAIyuF,EAAQ5/E,YAOpD40lB,EAAazsmB,UAAU2mC,cAAgB,WACnC,MAAO,gBAMX8lkB,EAAazsmB,UAAUo6N,UAAY,WAC/B,GAAKx1N,KAAKolB,QAGV,GAAIplB,KAAKiomB,gBACLjomB,KAAK0tmB,mBADT,CAYA,GARA1tmB,KAAKiomB,iBAAkB,EACnBjomB,KAAK6smB,gBAAkB7smB,KAAK0tY,UAAY1tY,KAAK0omB,mBAAmB1/f,MAAQhpG,KAAK0omB,mBAAmB1/f,KAAK,IACrGhpG,KAAK0tY,UAAW,EAChB1tY,KAAKilmB,iBAAiBjlmB,KAAK0omB,mBAAmB9wZ,UAAW53M,KAAK0omB,mBAAmB1/f,KAAM,MAAM,KAExFvrG,EAAkBuC,KAAKgpG,QAAU7rG,EAAY6C,KAAKgpG,OAAShpG,KAAKgpG,KAAKllG,UAAUK,SAAS2+lB,GAAoBC,UACjH/imB,KAAKqhN,aAEL71M,GAAQqb,UAAY7mB,KAAKoqmB,iBAAkB,CAC3C,IAAIpxN,EAAUh5Y,KACdpE,OAAO4zmB,WAAa,WAChBx2N,EAAQ2wN,aAEZz2f,QAAQu8f,aAAc,IAErBhymB,EAAkBuC,KAAKgpG,KAAK5uF,SAAS,MAAOpa,KAAKgpG,KAAKllG,UAAUK,SAAS2+lB,GAAoBC,SAC9F/imB,KAAKmgI,cAETz8H,EAAW1D,KAAKkkI,iBAAmBrZ,wBAAyB7qH,KAAKugN,WAAavgN,KAAKugN,WAAWj9M,GAAK,SAMvGukmB,EAAazsmB,UAAUuumB,UAAY,WAC3B3pmB,KAAKwomB,aAAwC,iBAAzBxomB,KAAK+hC,kBACzBjW,GAAM1uB,SAAS4C,KAAKgvB,KAAMhvB,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,iBACvEvlB,KAAKwomB,aAAc,EACd/qmB,EAAkBuC,KAAK8R,OAQxB9R,KAAKspmB,kBAPLtpmB,KAAKugN,WAAavgN,KAAKs4M,cAAct4M,KAAK8R,OAC1C9R,KAAK2rmB,mBAAmB3rmB,KAAKugN,WAAY,MAAM,GAC3CvgN,KAAKgsmB,eAAmC,OAAlBhsmB,KAAKsgE,UAC3BtgE,KAAKismB,qBAOjBjsmB,KAAK+3J,aACL,IAAIxrI,EAAWvsB,KAAKm+M,cACmB,KAAnCn+M,KAAKkhE,aAAankE,MAAMkT,QAAkBjQ,KAAK00H,eAAiB10H,KAAK6omB,iBACpEprmB,EAAkBuC,KAAKugN,aAAevgN,KAAKkhE,aAAankE,QAAUwvB,EAASyC,QAC5EhvB,KAAK6omB,gBAAiB,EACtB7omB,KAAKysD,UAObo7iB,EAAazsmB,UAAUixI,QAAU,WAC7B,GAAKrsI,KAAKolB,UAGNplB,KAAKkkI,gBAAgBpgI,UAAUK,SAAS8imB,GAAoB9sZ,SAAhE,CAGA,IAAIluE,GAAY,EACZjsI,KAAKyqN,cAAgBj/M,GAAQqb,WAC7B7mB,KAAKqrI,aAAaxwH,UAAU+vG,SAAW,EACvC5qH,KAAKqrI,aAAaxwH,UAAU3Y,QAC5BlC,KAAKyqN,cAAe,EACpBx+E,GAAY,GAEXA,GACDjsI,KAAKkkI,gBAAgBhiI,QAEzByB,GAAU3D,KAAKqrI,aAAaxwH,YAAaoslB,GAAoBC,aAC7DlnmB,KAAKsqmB,YAMTzC,EAAazsmB,UAAUkxI,SAAW,WACzBtsI,KAAKolB,UAGVplB,KAAKoomB,SAAU,EACfpomB,KAAK2pmB,YACL3pmB,KAAKkkI,gBAAgBoM,OACrBjsI,GAAarE,KAAKqrI,aAAaxwH,YAAaoslB,GAAoBC,eAOpEW,EAAazsmB,UAAUiX,QAAU,WAC7B,IAAItS,EAAQC,KAOZ,GANAA,KAAK0tY,UAAW,EAChB1tY,KAAK2pmB,YACL3pmB,KAAKghiB,cACDhhiB,KAAKgpG,MACLhpG,KAAK41N,oBAEL51N,KAAKgB,SAAYhB,KAAKgB,QAAQ8C,UAAUK,SAAS,KAAOnE,KAAK+hC,iBAAjE,EAGiB,WAAY,gBAAiB,mBAC1C,cAAe,YAAa,kBAAmB,gBAAiB,gBAChE,wBAAyB,eAAgB,gBAAiB,cAC1D,iBAAkB,aAAc,qBAC1B3iC,QAAQ,SAAUrC,GACxBgD,EAAMmhE,aAAax1D,gBAAgB3O,KAEvCiD,KAAKkhE,aAAa19D,aAAa,WAAYxD,KAAK4qH,UAChD5qH,KAAKkhE,aAAap9D,UAAUS,OAAO,WACnCunB,GAAM1uB,SAAS,GAAI4C,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,iBAChEvlB,KAAKgB,QAAQ0D,MAAMosC,QAAU,QACzB9wC,KAAKqrI,aAAaxwH,UAAUxG,cAAcrR,UAAYhD,KAAK6pmB,iBAC3DxkmB,EAAOrF,KAAKqrI,aAAaxwH,YAGzB7a,KAAKqrI,aAAaxwH,UAAUxG,cAAcnP,aAAalF,KAAKgB,QAAShB,KAAKqrI,aAAaxwH,WACvFxV,EAAOrF,KAAKqrI,aAAaxwH,YAE7By2E,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,QAOlC6nmB,EAAazsmB,UAAUk0P,SAAW,WAO9B,OANKtvP,KAAKgpG,OACFhpG,KAAKqoE,sBAAsBC,KAC3BtoE,KAAKkomB,kBAAmB,GAE5BlomB,KAAKqhN,cAEFrhN,KAAK43M,UAAYtmH,EAAOl2F,UAAUk0P,SAAShuP,KAAKtB,UAE3DgxF,IACI9pF,EAAS,OACV2gmB,EAAazsmB,UAAW,gBAAY,GACvC41F,IACI9pF,EAAS,SACV2gmB,EAAazsmB,UAAW,aAAS,GACpC41F,IACI9pF,EAAS,UACV2gmB,EAAazsmB,UAAW,mBAAe,GAC1C41F,IACI9pF,EAAS,SACV2gmB,EAAazsmB,UAAW,kBAAc,GACzC41F,IACI9pF,EAAS,OACV2gmB,EAAazsmB,UAAW,mBAAe,GAC1C41F,IACI9pF,EAAS,OACV2gmB,EAAazsmB,UAAW,4BAAwB,GACnD41F,IACI9pF,OACD2gmB,EAAazsmB,UAAW,sBAAkB,GAC7C41F,IACI9pF,EAAS,OACV2gmB,EAAazsmB,UAAW,aAAS,GACpC41F,IACI9pF,EAAS,OACV2gmB,EAAazsmB,UAAW,qBAAiB,GAC5C41F,IACI9pF,EAAS,OACV2gmB,EAAazsmB,UAAW,sBAAkB,GAC7C41F,IACI9pF,EAAS,OACV2gmB,EAAazsmB,UAAW,sBAAkB,GAC7C41F,IACI9pF,GAAS,IACV2gmB,EAAazsmB,UAAW,sBAAkB,GAC7C41F,IACI9pF,GAAS,IACV2gmB,EAAazsmB,UAAW,gBAAY,GACvC41F,IACI9pF,EAAS,OACV2gmB,EAAazsmB,UAAW,YAAQ,GACnC41F,IACI9pF,EAAS,OACV2gmB,EAAazsmB,UAAW,aAAS,GACpC41F,IACI9pF,EAAS,OACV2gmB,EAAazsmB,UAAW,aAAS,GACpC41F,IACI9pF,EAAS,UACV2gmB,EAAazsmB,UAAW,sBAAkB,GAC7C41F,IACI9pF,GAAS,IACV2gmB,EAAazsmB,UAAW,uBAAmB,GAC9C41F,IACIloF,KACD++lB,EAAazsmB,UAAW,iBAAa,GACxC41F,IACIloF,KACD++lB,EAAazsmB,UAAW,cAAU,GACrC41F,IACIloF,KACD++lB,EAAazsmB,UAAW,kBAAc,GACzC41F,IACIloF,KACD++lB,EAAazsmB,UAAW,YAAQ,GACnC41F,IACIloF,KACD++lB,EAAazsmB,UAAW,aAAS,GACpC41F,IACIloF,KACD++lB,EAAazsmB,UAAW,YAAQ,GACnC41F,IACIloF,KACD++lB,EAAazsmB,UAAW,aAAS,GACpCysmB,EAAe72gB,IACX5nF,GACDy+lB,IAEL5E,ICxnEExygB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GAYhE8nkB,GAAoBrtZ,KAAO,aAC3B,IAAIxzE,IACAvrH,UAAW,KACXk/G,YAkBA21e,GAA0B,SAAUp+gB,GAKpC,SAASo+gB,EAAS18lB,EAAShS,GACvB,OAAOswF,EAAOhwF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KA2lBlD,OAhmBAywF,GAAUi/gB,EAAUp+gB,GAYpBo+gB,EAASt0mB,UAAUqX,UAAY,WAC3B6+E,EAAOl2F,UAAUqX,UAAUnR,KAAKtB,OAEpC0vmB,EAASt0mB,UAAU+iiB,UAAY,WACE,aAAzBn+hB,KAAK+hC,kBACLx8B,GAAanB,IAAIpE,KAAKqrI,aAAatR,QAAQ,GAAI,YAAa/5H,KAAKwqN,YAAaxqN,MAC9EuF,GAAanB,IAAIpE,KAAKqrI,aAAaxwH,UAAW,OAAQ7a,KAAKmqmB,OAAQnqmB,OAElEvC,EAAkBuC,KAAKqrI,aAAatR,QAAQ,KAC7Cx0H,GAAanB,IAAIpE,KAAKqrI,aAAatR,QAAQ,GAAI,YAAa/5H,KAAKwqmB,cAAexqmB,MAEpFuF,GAAanB,IAAIpE,KAAKkhE,aAAc,QAASlhE,KAAK2vmB,YAAa3vmB,MAC1DA,KAAKw8E,WACNj3E,GAAanB,IAAIpE,KAAKkhE,aAAc,QAASlhE,KAAKutmB,QAASvtmB,MAC3DuF,GAAanB,IAAIpE,KAAKkhE,aAAc,QAASlhE,KAAKwsmB,WAAYxsmB,MAC9DuF,GAAanB,IAAIpE,KAAKkhE,aAAc,UAAWlhE,KAAK0smB,aAAc1smB,OAEtEA,KAAKyqmB,mBAETiF,EAASt0mB,UAAUovN,YAAc,SAAU3pN,IACjCb,KAAKupmB,gBAAkB/omB,SAAS+4H,gBAAkBv5H,KAAKkhE,cACxD1gE,SAAS+4H,cAAcz1H,UAAUK,SAAS8imB,GAAoBr1lB,SAAUpG,GAAQqb,WAAarb,GAAQqb,UACtGhmB,EAAE8kB,kBAGV+plB,EAASt0mB,UAAU8oI,cAAgB,WAC/B,OAAOlkI,KAAKkhE,cAEhBwuiB,EAASt0mB,UAAUi0mB,WAAa,SAAUrglB,GACtClD,GAAM1uB,SAAS4C,KAAKgvB,KAAMhvB,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,iBACvEvlB,KAAK4vmB,cACL5vmB,KAAK0sN,mBAETgjZ,EAASt0mB,UAAUk0mB,YAAc,SAAUvymB,GACnCiD,KAAK6vmB,YACL7vmB,KAAK8vmB,gBAAgB9vmB,KAAKjD,OAG1BiD,KAAK8vmB,gBAAgB,MAEzB9vmB,KAAK0sN,kBACL1sN,KAAKkqmB,kBAETwF,EAASt0mB,UAAU00mB,gBAAkB,SAAU/ymB,GAC3C,IAAIy0N,EAAa/zN,EAAkBV,GAAS,KAAOA,EAAMmQ,WACzD4e,GAAM1uB,SAASo0N,EAAYxxN,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,iBACxEvlB,KAAKgH,eAAgBjK,MAAOA,EAAOiyB,KAAMjyB,EAAO+U,MAAO,OAAQ,GAC/D9R,KAAK2lN,YAAc3lN,KAAK8R,MACxB,IAAI0a,EAASxsB,KAAKwsB,OACdD,KACJA,EAASC,EAAOwC,MAAQvxB,EAAkBV,GAAS,KAAOA,EAAMmQ,WAChEqf,EAASC,EAAOzvB,OAASU,EAAkBV,GAAS,KAAOA,EAAMmQ,WACjElN,KAAKsgE,SAAW/zC,EAChBvsB,KAAKie,KAAO,KACRje,KAAKizH,gBAAkBjzH,KAAKjD,OAC5BiD,KAAKqsmB,kBAAkB,OAG/BqD,EAASt0mB,UAAU6umB,aAAe,WAC9B,GAAKxsmB,EAAkBuC,KAAKjD,OAYvB,GAAIiD,KAAKgvB,MAAQvxB,EAAkBuC,KAAKjD,OAAQ,EAC7Ck8I,EAAKj5I,KAAK8pmB,iBAAiB9pmB,KAAKgvB,OAEhChvB,KAAKw8N,aAAavjF,EAAI,OAGtBntH,GAAM1uB,SAAS4C,KAAKgvB,KAAMhvB,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,iBACvEvlB,KAAK4vmB,oBAIT5vmB,KAAKw8N,aAAax8N,KAAKs4M,cAAct4M,KAAK2lN,aAAc,UAvBxB,CAChC,IAAI1sE,GAAAA,EAAKj5I,KAAK+pmB,kBAAkB/pmB,KAAKjD,QAEjCiD,KAAKw8N,aAAavjF,EAAI,MAEjBj5I,KAAK6vmB,YACV7vmB,KAAK8vmB,gBAAgB9vmB,KAAKjD,OAG1BiD,KAAK8vmB,gBAAgB,MAgB7B9vmB,KAAKkqmB,iBACLp+kB,GAAM1uB,SAAS4C,KAAKgvB,KAAMhvB,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,kBAE3EmqlB,EAASt0mB,UAAUqrI,gBAAkB,WAC7BzmI,KAAKulB,kBAC2B,KAA5BvlB,KAAKkhE,aAAankE,OAAiBiD,KAAKw8E,SAIxC74E,GAAU3D,KAAKqrI,aAAa5lH,aAAcwhlB,GAAoBQ,eAH9DpjmB,GAAarE,KAAKqrI,aAAa5lH,aAAcwhlB,GAAoBQ,iBAO7EiI,EAASt0mB,UAAUsumB,kBAAoB,WAcnC,OAZI9uc,YAAa56J,KAAKgB,QAAQsC,GAAK,WAC/BqO,KAAQ,WACR6nN,oBAAqB,OACrBj4J,kBAAmBvhE,KAAK4nmB,cAActkmB,GACtCysmB,gBAAiB,OACjBr1c,gBAAiB,QACjBpvB,gBAAiBtrI,KAAKw8E,SAAStvE,WAC/B+V,aAAgB,MAChBC,YAAe,MACfC,eAAkB,MAClBC,WAAc,UAItBsslB,EAASt0mB,UAAUqxmB,YAAc,SAAU5rmB,GACvCb,KAAKoomB,SAAU,EACXpomB,KAAK6smB,eACLv7gB,EAAOl2F,UAAUqxmB,YAAYnrmB,KAAKtB,KAAMa,GACF,KAAlCb,KAAKsnmB,YAAYvqmB,MAAMkT,QACvBjQ,KAAKgwmB,aAAahwmB,KAAK43M,UAAUj1M,cAAc,IAAMskmB,GAAoBhud,OAIzEj5I,KAAK43M,WAAyC,KAA5B53M,KAAKkhE,aAAankE,OAAgBiD,KAAKqomB,iBACzDromB,KAAKgwmB,aAAahwmB,KAAK43M,UAAUj1M,cAAc,IAAMskmB,GAAoBhud,KAE7Ej5I,KAAKy/D,kBAAkB5+D,KAG/B6umB,EAASt0mB,UAAUyumB,eAAiB,WAChC,MAAO,gBAEX6F,EAASt0mB,UAAU+xmB,aAAe,WAE9B,OADAntmB,KAAKsnmB,YAActnmB,KAAKkhE,aAChBlhE,KAAK6smB,cAAgB7smB,KAAKqrI,aAAejF,IAErDspe,EAASt0mB,UAAU6pmB,iBAAmB,SAAUrtZ,EAAW5uG,EAAMnoG,EAAG8nmB,GAChEr3gB,EAAOl2F,UAAU6pmB,iBAAiB3jmB,KAAKtB,KAAM43M,EAAW5uG,EAAMnoG,GAC1Db,KAAK6omB,gBACL7omB,KAAK0sN,mBAEJ1sN,KAAKqomB,iBAA4C,aAAzBromB,KAAK+hC,iBAAkC/hC,KAAKoomB,SACrEpomB,KAAKiwmB,gBAGbP,EAASt0mB,UAAU0ymB,gBAAkB,WACjC,IAAIvhlB,EAAWvsB,KAAK6omB,gBAAmB75kB,KAAM,IAAOhvB,KAAKm+M,cACrDn9D,EAAWhhJ,KAAKgpG,KAAKrmG,cAAc,IAAMskmB,GAAoBjmd,UAEjE,GADiBz0H,EAASyC,OAAShvB,KAAKkhE,aAAankE,QAAUU,EAAkBujJ,GAE7E,OAAOA,EAEX,IAAKx1I,GAAQqb,WAAa7mB,KAAK8omB,kBAAoBt9lB,GAAQqb,YACtDppB,EAAkBuC,KAAKs4M,gBAAkBt4M,KAAKs4M,cAAc97M,OAAS,EAAG,CACzE,IAEI+8H,EADap5D,GADAngE,KAAKkhE,aAAankE,MACCiD,KAAKs4M,cAAe,cAAc,GACvCr6L,KAC/B,GAAKxgB,EAAkB87H,GAWfv5H,KAAK6omB,gBAAqD,KAAnC7omB,KAAKkhE,aAAankE,MAAMkT,SAC/CjQ,KAAKyrJ,cACLzrJ,KAAKgpG,KAAK78F,UAAY,OAbS,CACnC,IAAI+S,EAAQlf,KAAKommB,gBAAgB7se,EAAc1mH,aAAa,eAAiB,EACzEkD,EAAS6e,SAASznB,iBAAiBnN,KAAKs4M,cAAc,GAAI,MAAMlrM,iBAAiB,UAAW,IAChG,IAAK+vC,MAAMpnC,IAAoC,iBAAzB/V,KAAK+hC,gBAAoC,CAC3D/hC,KAAKyrJ,cACL,IAAIu3c,EAAYhjmB,KAAKwsB,OAAOurL,QAAU/3M,KAAKs4M,cAAc,GAAG3gJ,aAAe,EAC3E33D,KAAKgpG,KAAK78F,UAAY+S,EAAQnJ,EAASitlB,EACvCr/lB,GAAU41H,GAAgB0te,GAAoB/kmB,QAStD,OAAOq3H,EAGP,OAAO,MAGfm2e,EAASt0mB,UAAUgC,SAAW,SAAUyD,GAIpC,OAHIA,GAAgB,YAAXA,EAAE6F,MAAmC,UAAb7F,EAAEmyD,QAC/BhzD,KAAK4smB,sBAEL5smB,KAAKkwmB,UAAqC,aAAzBlwmB,KAAK+hC,iBAAkClhC,GAAgB,YAAXA,EAAE6F,MAAmC,UAAb7F,EAAEmyD,QACvFhzD,KAAKqomB,iBAAkB,EACvBromB,KAAKiwmB,aAAapvmB,IACX,GAGAywF,EAAOl2F,UAAUgC,SAASkE,KAAKtB,KAAMa,IAOpD6umB,EAASt0mB,UAAU4mB,YAAc,WACzBvkB,EAAkBuC,KAAK4qmB,kBACvB5qmB,KAAK4qmB,eAA2C,iBAAzB5qmB,KAAK+hC,gBAAuC/hC,KAAKqrI,aAAatR,QAAQ,IACzF/5H,KAAKqrI,aAAa5lH,aAClBqG,GAAM08G,WAAW,wCAAuCxoI,KAAKqrI,aAAaxwH,UAAW7a,KAAKmB,eACzFnB,KAAKqrI,aAAatR,QAAQ,IAAM/5H,KAAKqrI,aAAa5lH,YACvD9hB,GAAU3D,KAAK4qmB,gBAAiB3D,GAAoBU,aACpDjtlB,IACIvT,OAAQnH,KAAK4qmB,eACb50lB,MAAOxK,GAAQqb,SAAW,OAAS,QACpC7mB,KAAKmB,eACR6gB,GAAYhiB,KAAK4qmB,kBAOzB8E,EAASt0mB,UAAU2nB,YAAc,WACxBtlB,EAAkBuC,KAAK4qmB,kBACxB7nlB,GAAY/iB,KAAK4qmB,gBACjBvmmB,GAAarE,KAAK4qmB,gBAAiB3D,GAAoBU,aACnD3nmB,KAAK4qmB,eAAe9mmB,UAAUK,SA5P1B,sBA6PJkB,EAAOrF,KAAK4qmB,gBAGZ5qmB,KAAK4qmB,eAAe5omB,UAAY,GAEpChC,KAAK4qmB,eAAiB,OAG9B8E,EAASt0mB,UAAU+0mB,YAAc,SAAU52e,EAAe62e,GAItD,GAHKA,GACDpwmB,KAAKgwmB,aAAaz2e,GAElBv5H,KAAKkwmB,WAAalwmB,KAAKqomB,gBAAiB,CACxC,IAAI5sd,EAAez7I,KAAKqkmB,eAAe9qe,EAAc1mH,aAAa,eAAe3F,WAC7EmjmB,EAAmBrwmB,KAAK44N,kBAAkBr/F,EAAc1mH,aAAa,eAC5C,aAAzB7S,KAAK+hC,kBACA/hC,KAAKg+D,YAAch+D,KAAKizH,gBAAkBo9e,EAM3CrwmB,KAAK2rmB,mBAAmBpye,EAAe,MAAM,IAL7Cv5H,KAAK2rmB,mBAAmBpye,EAAe,MACvCv5H,KAAKg+D,YAAa,EAClBh+D,KAAKizH,cAAgBjzH,KAAK44N,kBAAkBr/F,EAAc1mH,aAAa,iBAM1E7S,KAAKswmB,kBAAkB70d,IACxBz7I,KAAKuwmB,qBAAqB90d,KAItCi0d,EAASt0mB,UAAUk1mB,kBAAoB,SAAUvzmB,GAC7C,GAAIyO,GAAQ6e,UAAW,CACnB,IAAI2pN,EAAgBh0O,KAAK2smB,qBACrB6D,EAAUxwmB,KAAK4omB,iBAAiB3plB,IAChCwxlB,EAASz8X,EAAc/0N,IACvByxlB,EAAY1wmB,KAAK4omB,iBAAiBrrmB,MAClCozmB,EAAW38X,EAAcz2O,MAC7B,OAAgB,IAAZizmB,IAAmBA,IAAYzzmB,EAAMP,QAAUk0mB,IAAc3zmB,EAAMP,QAClEk0mB,EAAYC,GAAYH,EAAUC,GAAYD,IAAYC,GAAUC,IAAcC,GAQvF,OAAO,GAGfjB,EAASt0mB,UAAUqxD,MAAQ,SAAU5rD,EAAGq6D,IAChCz9D,EAAkBy9D,KAAez9D,EAAkBy9D,IAAaz9D,EAAkBy9D,EAASmN,cAC3FipB,EAAOl2F,UAAUqxD,MAAMnrD,KAAKtB,KAAMa,IAG1C6umB,EAASt0mB,UAAU8vmB,kBAAoB,SAAUlqmB,GAC7C,OAAQvD,EAAkBuD,IAE9B0umB,EAASt0mB,UAAU60mB,aAAe,SAAUpvmB,GACxC,IAAI+vmB,EAAiB/vmB,IAAmB,SAAbA,EAAEmyD,QAAkC,OAAbnyD,EAAEmyD,QACnC,SAAbnyD,EAAEmyD,QAAkC,QAAbnyD,EAAEmyD,QAAiC,WAAbnyD,EAAEmyD,QAAoC,aAAbnyD,EAAEmyD,QACxEumE,EAAgBq3e,EAAgB5wmB,KAAKs4M,cAAct4M,KAAK2lN,aAAe3lN,KAAK8tmB,kBAChF,GAAKrwmB,EAAkB87H,GASlB,GAAgC,KAA5Bv5H,KAAKkhE,aAAankE,MAAc,CACrCiD,KAAK2lN,YAAc,KACnB3lN,KAAKgpG,KAAK78F,UAAY,EACtB,IAAIk5lB,EAAYrlmB,KAAKgpG,KAAKrmG,cAAc,IAAMskmB,GAAoBhud,IAClEj5I,KAAKgwmB,aAAa3K,QAGlBrlmB,KAAK2lN,YAAc,KACnB3lN,KAAK0sN,kBACL1sN,KAAKyrJ,kBAlB8B,CACnC,IAAKmld,EAAe,CAChB,IAAI7zmB,EAAQiD,KAAK44N,kBAAkBr/F,EAAc1mH,aAAa,eAC9D7S,KAAK2lN,YAAc3lN,KAAKommB,gBAAgBrpmB,GACxCiD,KAAK2lN,YAAeloN,EAAkBuC,KAAK2lN,aAAkC,KAAnB3lN,KAAK2lN,YAEnE3lN,KAAKqomB,gBAA8C,KAA5BromB,KAAKkhE,aAAankE,OAAuBiD,KAAKqomB,gBACrEromB,KAAKmwmB,YAAY52e,EAAeq3e,KAcxClB,EAASt0mB,UAAUqkE,kBAAoB,SAAU5+D,GAC7Cb,KAAKw1N,YACA/3N,EAAkBuC,KAAKqjmB,YACxBrjmB,KAAKiwmB,aAAapvmB,GAClBA,EAAE8kB,mBAIV+plB,EAASt0mB,UAAUm1mB,qBAAuB,SAAU90d,GAChD,IAAIxlE,EAAYj2E,KAAK2smB,qBACjB5vmB,EAAQiD,KAAKkhE,aAAankE,MAAM85B,OAAO,EAAGo/C,EAAU14E,OACxD,GAAIR,GAAUA,EAAM6Y,gBAAkB6lI,EAAa5kH,OAAO,EAAGo/C,EAAU14E,OAAOqY,cAAgB,CAC1F,IAAI47M,EAAaz0N,EAAQ0+I,EAAa5kH,OAAO95B,EAAMP,OAAQi/I,EAAaj/I,QACxEsvB,GAAM1uB,SAASo0N,EAAYxxN,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,iBACxEvlB,KAAKkhE,aAAah7C,kBAAkB+vD,EAAU14E,MAAOyC,KAAKkhE,aAAankE,MAAMP,aAG7EsvB,GAAM1uB,SAASq+I,EAAcz7I,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,iBAC1EvlB,KAAKkhE,aAAah7C,kBAAkB,EAAGlmB,KAAKkhE,aAAankE,MAAMP,SAIvEkzmB,EAASt0mB,UAAUgomB,eAAiB,SAAUp0kB,GAC1C,OAAOsiE,EAAOl2F,UAAUgomB,eAAe9hmB,KAAKtB,KAAMgvB,GAAM,EAAMhvB,KAAKysK,eAEvEijc,EAASt0mB,UAAU4liB,YAAc,WACA,aAAzBhhiB,KAAK+hC,kBACLx8B,GAAahB,OAAOvE,KAAKqrI,aAAatR,QAAQ,GAAI,YAAa/5H,KAAKwqN,aACpEjlN,GAAahB,OAAOvE,KAAKqrI,aAAaxwH,UAAW,OAAQ7a,KAAKmqmB,SAE7D1smB,EAAkBuC,KAAKqrI,aAAatR,QAAQ,KAC7Cx0H,GAAahB,OAAOvE,KAAKqrI,aAAatR,QAAQ,GAAI,YAAa/5H,KAAKwqmB,eAExEjlmB,GAAahB,OAAOvE,KAAKkhE,aAAc,QAASlhE,KAAK2vmB,aAChD3vmB,KAAKw8E,WACNj3E,GAAahB,OAAOvE,KAAKkhE,aAAc,QAASlhE,KAAKutmB,SACrDhomB,GAAahB,OAAOvE,KAAKkhE,aAAc,QAASlhE,KAAKwsmB,YACrDjnmB,GAAahB,OAAOvE,KAAKkhE,aAAc,UAAWlhE,KAAK0smB,eAE3D1smB,KAAK0qmB,qBAETgF,EAASt0mB,UAAUohO,aAAe,SAAUvjF,EAAIp4I,GAC5CywF,EAAOl2F,UAAUohO,aAAal7N,KAAKtB,KAAMi5I,EAAIp4I,GACxCpD,EAAkBw7I,IAAQj5I,KAAKkwmB,UAAalwmB,KAAK8omB,iBAClD9omB,KAAKyrJ,eAGbikd,EAASt0mB,UAAUmwmB,kBAAoB,SAAU1qmB,GAC7C,IAAIo4I,EACAj5I,KAAKomK,eACLntB,EAAKj5I,KAAKgpG,KAAKrmG,cAAc,IAAMskmB,GAAoB/kmB,UAEnDlC,KAAKw8N,aAAavjF,EAAIp4I,GACtBb,KAAKoomB,SAAU,GAEfpomB,KAAKg+D,aACLh+D,KAAK6omB,gBAAiB,EACtB7omB,KAAKopmB,cAAcvomB,KAGV,UAAbA,EAAEmyD,QAAyD,KAAnChzD,KAAKkhE,aAAankE,MAAMkT,OAChDjQ,KAAKysD,MAAM5rD,GAENb,KAAKoomB,UAAYpomB,KAAKg+D,YAAcvgE,EAAkBw7I,IAC3Dj5I,KAAK4vmB,cAET5vmB,KAAK2pmB,aAET+F,EAASt0mB,UAAU40mB,aAAe,SAAU/2d,GACxCj5I,KAAK0sN,kBACD1sN,KAAKs5J,UAAUrgB,KAAQA,EAAGn1I,UAAUK,SAAS8imB,GAAoBjmd,YACjEhhJ,KAAKyrJ,cACLxS,EAAGn1I,UAAUM,IAAI6imB,GAAoB/kmB,SAI7CwtmB,EAASt0mB,UAAUu0mB,YAAc,SAAU9umB,GACnC2K,GAAQqb,WAAa7mB,KAAKupmB,iBAC1BvpmB,KAAKyqN,cAAe,GAExBzqN,KAAKsqmB,WAEToF,EAASt0mB,UAAUovmB,cAAgB,SAAU3pmB,GACzCA,EAAE8kB,iBACEna,GAAQqb,WAAa7mB,KAAKupmB,iBAC1BvpmB,KAAKyqN,cAAe,GAExBn5H,EAAOl2F,UAAUovmB,cAAclpmB,KAAKtB,KAAMa,IAE9C6umB,EAASt0mB,UAAUw0mB,YAAc,WAC7B,IAAI7ymB,EAAQiD,KAAKojmB,eAAepjmB,KAAKkhE,aAAankE,OAClD,GAAKiD,KAAK6vmB,aAA2C,KAA5B7vmB,KAAKkhE,aAAankE,MAMtC,GAAuC,KAAnCiD,KAAKkhE,aAAankE,MAAMkT,OAAe,CAC5C,IAAIgjH,EAAgBjzH,KAAKjD,MACzB,GAAIU,EAAkBV,GAAQ,CAC1B,IAAIirB,EAAsC,KAA5BhoB,KAAKkhE,aAAankE,MAAe,KAAOiD,KAAKkhE,aAAankE,MACpEyvB,EAASxsB,KAAKwsB,OACdjf,OAAY,EAChBA,GAAcyhB,KAAMhH,EAAS/J,SACxBje,KAAK4mI,SACN5mI,KAAK2mB,QAAQ,uBAAwBpZ,GAEzC,IAAI0Q,EAAO1Q,EAAU0Q,KACjBsO,KACAtO,GAAQrhB,EAAS4vB,EAAOwC,KAAM/Q,IAASrhB,EAAS4vB,EAAOzvB,MAAOkhB,GAC9DsO,EAAWtO,GAGX7gB,EAASovB,EAAOwC,KAAMhH,EAASuE,GAC/BnvB,EAASovB,EAAOzvB,MAAOirB,EAASuE,IAEpCvsB,KAAKsgE,SAAW/zC,EAChB,IAAIsklB,GACA7hlB,KAAMpyB,EAAS4vB,EAAOwC,KAAMhvB,KAAKsgE,UACjCvjE,MAAOH,EAAS4vB,EAAOzvB,MAAOiD,KAAKsgE,UACnCxuD,MAAO,MAEX9R,KAAKgH,cAAc6pmB,GAAY,GAC/B7wmB,KAAKw8N,aAAa,KAAM,MACxBx8N,KAAK6omB,gBAAiB,OAGtB7omB,KAAK6omB,gBAAiB,EACtB7omB,KAAKgH,eAAgBjK,MAAOA,IAE5Bk2H,IAAkBjzH,KAAKjD,OACvBiD,KAAKopmB,cAAc,WAGlBppmB,KAAK6vmB,cACV7vmB,KAAK6omB,gBAAiB,QA3CtB7omB,KAAKgH,eAAgBjK,MAAOA,IACxBU,EAAkBuC,KAAKjD,QACvB+uB,GAAM1uB,SAAS,GAAI4C,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,kBAgD5EmqlB,EAASt0mB,UAAUuyF,kBAAoB,SAAUkF,EAASC,GACzB,aAAzB9yF,KAAK+hC,iBACL/hC,KAAKummB,kBAAkB,SAAU,QAAS,cAAe1zgB,GAE7D,IAAK,IAAIz0F,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKu1F,GAAUz0F,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,WACDwhB,GAAMw7G,YAAYtnI,KAAKw8E,SAAUx8E,KAAKkhE,cAClClhE,KAAKw8E,UACLj3E,GAAahB,OAAOvE,KAAKkhE,aAAc,QAASlhE,KAAKwsmB,YACrDjnmB,GAAahB,OAAOvE,KAAKkhE,aAAc,UAAWlhE,KAAK0smB,gBAGvDnnmB,GAAanB,IAAIpE,KAAKkhE,aAAc,QAASlhE,KAAKwsmB,WAAYxsmB,MAC9DuF,GAAanB,IAAIpE,KAAKkhE,aAAc,UAAWlhE,KAAK0smB,aAAc1smB,OAEtE,MACJ,IAAK,iBACDA,KAAKmtmB,eACDntmB,KAAK6smB,eAA0C,aAAzB7smB,KAAK+hC,iBAAkCtkC,EAAkBuC,KAAKgpG,OACpF1X,EAAOl2F,UAAUimN,WAAW//M,KAAKtB,MAErC,MACJ,IAAK,cACD,MACJ,QACI,IAAI8wmB,OAAa,EACjBA,EAAa9wmB,KAAKkjmB,cAAc54lB,EAAMuoF,EAASC,GAC/CxB,EAAOl2F,UAAUuyF,kBAAkBrsF,KAAKtB,KAAM8wmB,EAAW3gP,YAAa2gP,EAAW3N,gBASjGuM,EAASt0mB,UAAUg3G,OAAS,WACxB9gB,EAAOl2F,UAAUg3G,OAAO9wG,KAAKtB,MAC7BA,KAAKmtmB,eACDntmB,KAAK6smB,eAA0C,aAAzB7smB,KAAK+hC,iBAAkCtkC,EAAkBuC,KAAKgpG,OACpF1X,EAAOl2F,UAAUimN,WAAW//M,KAAKtB,OAQzC0vmB,EAASt0mB,UAAU2mC,cAAgB,WAC/B,MAAO,YAMX2tkB,EAASt0mB,UAAUuumB,UAAY,WAC3B,IAAIn4Y,EAAyC,KAA5BxxN,KAAKkhE,aAAankE,MAAe,KAAOiD,KAAKkhE,aAAankE,MAC3E,IAAKU,EAAkBuC,KAAKqjmB,UAAW,CACnC,IAAI0N,EAAW/wmB,KAAKwomB,YAChBxomB,KAAKwomB,cACL18kB,GAAM1uB,SAAS4C,KAAKuomB,YAAavomB,KAAKkhE,aAAclhE,KAAKknB,eAAgBlnB,KAAKulB,iBAC9EvlB,KAAKwomB,aAAc,GAEnBxomB,KAAKkwmB,UACLlwmB,KAAK4smB,sBAET,IAAIrglB,EAAWvsB,KAAK6omB,gBAAmB75kB,KAAM,IAAOhvB,KAAKm+M,cACrDn9D,EAAWhhJ,KAAKgpG,KAAKrmG,cAAc,IAAMskmB,GAAoBjmd,UACjE,GAAIz0H,EAASyC,OAAShvB,KAAKkhE,aAAankE,QAAUU,EAAkBujJ,GAMhE,OALIhhJ,KAAKg+D,aACLh+D,KAAKopmB,cAAc,MACnBppmB,KAAK6omB,gBAAiB,QAE1Bv3gB,EAAOl2F,UAAUuumB,UAAUromB,KAAKtB,MAGpC,GAA6B,aAAzBA,KAAK+hC,iBAAqE,KAAnC/hC,KAAKkhE,aAAankE,MAAMkT,OAAe,CAC9E,IAAI+gmB,EAAa7wiB,GAAOngE,KAAKkhE,aAAankE,MAAOiD,KAAKs4M,cAAe,SAAS,GAC9Et4M,KAAKugN,WAAaywZ,EAAW/ylB,KACzBxgB,EAAkBuzmB,EAAWl/lB,SAC7Bk/lB,EAAWl/lB,MAAQquD,GAAOngE,KAAKkhE,aAAankE,MAAOiD,KAAKs4M,cAAe,cAAc,GAAMxmM,OAE/F9R,KAAK2lN,YAAcqrZ,EAAWl/lB,MACzBrU,EAAkBuC,KAAKugN,YAGnBwwZ,IACL/wmB,KAAK6omB,gBAAiB,EACtB7omB,KAAK0sN,mBAJL1sN,KAAK2rmB,mBAAmB3rmB,KAAKugN,WAAY,MAAM,GAOlDvgN,KAAKwomB,cAAexomB,KAAKoomB,SAAYpomB,KAAK00H,cAC3C10H,KAAK4vmB,cAGTnymB,EAAkBuC,KAAKqjmB,WAAarjmB,KAAK6vmB,cAAgBpymB,EAAkB+zN,IAAeA,IAAexxN,KAAKjD,OAC9GiD,KAAK4vmB,cAETt+gB,EAAOl2F,UAAUuumB,UAAUromB,KAAKtB,OAMpC0vmB,EAASt0mB,UAAUixI,QAAU,WACpBrsI,KAAKolB,UAGN5Z,GAAQqb,WAAa7mB,KAAKupmB,iBAC1BvpmB,KAAKyqN,cAAe,GAExBn5H,EAAOl2F,UAAUixI,QAAQ/qI,KAAKtB,QAElCgxF,IACI9pF,GAAS,IACVwomB,EAASt0mB,UAAW,gBAAY,GACnC41F,IACI9pF,GAAS,IACVwomB,EAASt0mB,UAAW,mBAAe,GACtC41F,IACI9pF,OACDwomB,EAASt0mB,UAAW,sBAAkB,GACzC41F,IACI9pF,GAAS,IACVwomB,EAASt0mB,UAAW,sBAAkB,GACzC41F,IACI9pF,EAAS,OACVwomB,EAASt0mB,UAAW,aAAS,GAChC41F,IACI9pF,EAAS,OACVwomB,EAASt0mB,UAAW,aAAS,GAChC41F,IACI9pF,GAAS,IACVwomB,EAASt0mB,UAAW,uBAAmB,GAC1C41F,IACIloF,KACD4mmB,EAASt0mB,UAAW,4BAAwB,GAC/C41F,IACIloF,KACD4mmB,EAASt0mB,UAAW,iBAAa,GACpC41F,IACI9pF,EAAS,OACVwomB,EAASt0mB,UAAW,qBAAiB,GACxC41F,IACI9pF,EAAS,UACVwomB,EAASt0mB,UAAW,sBAAkB,GACzC41F,IACI9pF,EAAS,OACVwomB,EAASt0mB,UAAW,4BAAwB,GAC/Cs0mB,EAAW1+gB,IACP5nF,GACDsmmB,IAEL7H,ICppBEp3gB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GAehE8nkB,GAAoBrtZ,KAAO,iBAC3BqtZ,GAAoB/2jB,KAAO,8CAY3B,IAAI+gkB,GAA8B,SAAU3/gB,GAKxC,SAAS2/gB,EAAaj+lB,EAAShS,GAC3B,IAAIjB,EAAQuxF,EAAOhwF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAEnD,OADAD,EAAMmxmB,YAAa,EACZnxmB,EAmSX,OA1SA0wF,GAAUwghB,EAAc3/gB,GAcxB2/gB,EAAa71mB,UAAUqX,UAAY,WAC/B6+E,EAAOl2F,UAAUqX,UAAUnR,KAAKtB,OAEpCixmB,EAAa71mB,UAAUyumB,eAAiB,WACpC,MAAO,oBAEXoH,EAAa71mB,UAAU6lN,SAAW,SAAUtgJ,GACxC,IAAIssiB,EAActsiB,EAAQA,EAAMthE,QAAUW,KAAK2gE,MAAQ3gE,KAAK2gE,MAAMthE,QAAU,IAAI8oE,GAC5EgpiB,EAAmC,KAArBnxmB,KAAK6/D,aAAuBpiE,EAAkBuC,KAAKjD,OAAoBiD,KAAKmxmB,WAAf,QAC3EtxiB,EAAoC,KAArB7/D,KAAK6/D,aAAuBpiE,EAAkBuC,KAAKjD,OAAuBiD,KAAK6/D,YAAlB7/D,KAAKjD,MACrF,GAAIiD,KAAKkxmB,WACL,OAAOjE,EAEX,GAAyB,OAArBjtmB,KAAK6/D,YAAsB,CAC3B,IAAI0qB,EAAWvqF,KAAKwjmB,WAAWxjmB,KAAKqoE,YAAY0uI,OAChD,IAAM/2M,KAAKqoE,sBAAsBC,IAA6B,WAAbiiB,IAAsC,WAAbA,EAGrE,CACD,IAAI6mhB,EAAW3zmB,EAAkBuC,KAAKwsB,OAAOzvB,OAA6B,GAApBiD,KAAKwsB,OAAOzvB,MAClEkwmB,EAAYvkiB,MAAM0oiB,EAASD,EAAYtxiB,EAAa7/D,KAAK4/D,WAAY5/D,KAAKysK,mBAJ1Ewgc,EAAYvkiB,MAAM,GAAIyoiB,EAAYtxiB,EAAa7/D,KAAK4/D,WAAY5/D,KAAKysK,cAU7E,OAHKhvK,EAAkBuC,KAAKqxmB,kBACxBpE,EAAYv/b,KAAK1tK,KAAKqxmB,iBAEnBpE,GAEXgE,EAAa71mB,UAAUqxmB,YAAc,SAAU5rmB,GAC3C,IAAId,EAAQC,KACZA,KAAKoomB,SAAU,EACfpomB,KAAK6omB,gBAAiB,EACtB7omB,KAAK+kmB,eAAgB,EACjBtnmB,EAAkBuC,KAAKgpG,OACvB1X,EAAOl2F,UAAUimN,WAAW//M,KAAKtB,MAAM,GAE3C,IAAIsxmB,EAA4B,KAAdzwmB,EAAEsnB,SAAgC,KAAdtnB,EAAEsnB,QAExC,GADAnoB,KAAK6/D,YAAc7/D,KAAKsnmB,YAAYvqmB,MAChCu0mB,EAIA,OAHAtxmB,KAAK6/D,YAAmC,KAArB7/D,KAAK6/D,YAAqB,KAAO7/D,KAAK6/D,YACzD7/D,KAAKiomB,iBAAkB,OACvBjomB,KAAKwkmB,UAAUxkmB,KAAKqoE,WAAYroE,KAAKwsB,QAGzCxsB,KAAKg+D,YAAa,EAClBh+D,KAAK2lN,YAAc,KACnB,IAAIp4M,GACAu/lB,sBAAsB,EACtB99kB,KAAMhvB,KAAKsnmB,YAAYvqmB,MACvBypmB,WAAY,SAAUn+hB,EAAY1H,EAAOn0C,GACjCjf,EAAUqsB,SAGd75B,EAAMmxmB,YAAa,EACnBnxmB,EAAMwxmB,aAAalpiB,EAAY1H,EAAOn0C,KAE1CoN,QAAQ,GAEZ55B,KAAK2mB,QAAQ,YAAapZ,GACtBA,EAAUqsB,QAGT55B,KAAKkxmB,YAAe3jmB,EAAUu/lB,sBAC/B9smB,KAAKuxmB,aAAavxmB,KAAKqoE,WAAY,KAAMroE,KAAKwsB,SAGtDyklB,EAAa71mB,UAAUm2mB,aAAe,SAAUlpiB,EAAY1H,EAAOn0C,GAC/DxsB,KAAKiomB,iBAAkB,EACE,KAArBjomB,KAAK6/D,aAAuB7/D,KAAK6/D,YAAYrjE,QAAUwD,KAAKsgJ,UAC5DtgJ,KAAKwkmB,UAAUn8hB,EAAY77C,EAAQm0C,GAGnC3gE,KAAK2pmB,aAGbsH,EAAa71mB,UAAUqxD,MAAQ,SAAU5rD,EAAGq6D,IACpCz9D,EAAkBy9D,KAAez9D,EAAkBy9D,IAAaz9D,EAAkBy9D,EAASmN,cAC3FipB,EAAOl2F,UAAUqxD,MAAMnrD,KAAKtB,KAAMa,GAElCb,KAAKiomB,iBACLjomB,KAAK2pmB,aAGbsH,EAAa71mB,UAAU6pmB,iBAAmB,SAAUrtZ,EAAW5uG,EAAMnoG,EAAG8nmB,GACpE3omB,KAAK2lmB,mBAAqB,KAC1Br0gB,EAAOl2F,UAAU6pmB,iBAAiB3jmB,KAAKtB,KAAM43M,EAAW5uG,EAAMnoG,GAC9D,IAAIod,EAAOje,KAAKgpG,KAAKrmG,cAAc,IAAMskmB,GAAoBhud,IACxDx7I,EAAkBwgB,IACnB5Z,GAAa4Z,GAAOgplB,GAAoB/kmB,OAE5ClC,KAAKwxmB,kBAETP,EAAa71mB,UAAUo2mB,eAAiB,WACpC,GAAIxxmB,KAAKkwmB,WAAazymB,EAAkBuC,KAAKs4M,cAAc,IAAK,CAC5D,IAAI54I,GAAS1/D,KAAKs4M,cAAc,IAE3B76M,EADY0iE,GAAOngE,KAAKkhE,aAAankE,MAAO2iE,EAAO,aAAc1/D,KAAK4/D,YACzC3hD,OAC9BqzE,EAAOl2F,UAAU+0mB,YAAY7umB,KAAKtB,KAAMA,KAAKs4M,cAAc,IAAI,KAI3E24Z,EAAa71mB,UAAUohO,aAAe,SAAUvjF,EAAIp4I,GAChD,GAAKb,KAAKs5J,UAAUrgB,GAGpB,IAAKx7I,EAAkBoD,IAAiB,YAAXA,EAAE6F,MAAmC,UAAb7F,EAAEmyD,QAAsBhzD,KAAKs5J,UAAUrgB,GAAK,CAC7F,IAAIl8I,EAAQiD,KAAK44N,kBAAkB3/E,EAAGpmI,aAAa,eACnD7S,KAAK2lN,YAAc3lN,KAAKommB,gBAAgBrpmB,GACxCiD,KAAKgwmB,aAAa/2d,GAClBj5I,KAAKugN,WAAatnE,EAClBj5I,KAAKq2N,kBAAkBx1N,GACnBb,KAAKkwmB,WACLlwmB,KAAKqomB,iBAAkB,EACvB/2gB,EAAOl2F,UAAU+0mB,YAAY7umB,KAAKtB,KAAMi5I,IAE5Cv1I,EAAW1D,KAAKkhE,cAAgB2pD,wBAAyB7qH,KAAKugN,WAAavgN,KAAKugN,WAAWj9M,GAAK,YAGhGguF,EAAOl2F,UAAUohO,aAAal7N,KAAKtB,KAAMi5I,EAAIp4I,IAGrDowmB,EAAa71mB,UAAUoqmB,WAAa,SAAUn9hB,EAAYopiB,GACtD,IAAI1xmB,EAAQC,KACRwsB,EAAS8kE,EAAOl2F,UAAUoqmB,WAAWlkmB,KAAKtB,KAAMqoE,EAAYopiB,GAChE,GAAIh0mB,EAAkB+uB,EAAOuoL,aACzBvoL,EAAOuoL,YAAc,SAAUl0M,GACvBd,EAAMuuV,WACN5tR,GAAgB7/D,EAAEod,KAAMle,EAAM8/D,YAAa9/D,EAAM6/D,WAAY7/D,EAAMoxmB,iBAI1E,CACD,IAAIO,EAAgBlllB,EAAOuoL,YAC3BvoL,EAAOuoL,YAAc,SAAUl0M,GACvBd,EAAMuuV,WACN5tR,GAAgB7/D,EAAEod,KAAMle,EAAM8/D,YAAa9/D,EAAM6/D,WAAY7/D,EAAMoxmB,YAEvEO,EAAcp2mB,MAAMyE,GAAQc,KAGpC,OAAO2rB,GAGXyklB,EAAa71mB,UAAUyxmB,YAAc,WACjC,OAAO,GAEXoE,EAAa71mB,UAAU+kI,YAAc,WACjCngI,KAAKgpG,KAAK78F,UAAY,EACtBmlF,EAAOl2F,UAAU+kI,YAAY7+H,KAAKtB,OAEtCixmB,EAAa71mB,UAAU4vmB,cAAgB,WACnC,MAAkD,KAAnChrmB,KAAKkhE,aAAankE,MAAMkT,QAE3CghmB,EAAa71mB,UAAU4zmB,cAAgB,WACnC,OAAOhvmB,KAAK2xmB,iBAEhBV,EAAa71mB,UAAU8vmB,kBAAoB,SAAUlqmB,GACjD,OAAO,GAMXiwmB,EAAa71mB,UAAUo6N,UAAY,WAC1Bx1N,KAAKolB,UAGNplB,KAAKiomB,gBACLjomB,KAAK0tmB,gBAGT1tmB,KAAKiomB,iBAAkB,EACvBjomB,KAAKqomB,iBAAkB,EACnB5qmB,EAAkBuC,KAAKgpG,MACvBhpG,KAAKqhN,aAGLrhN,KAAKwkmB,UAAUxkmB,KAAKqoE,WAAYroE,KAAKwsB,WAO7CyklB,EAAa71mB,UAAUuumB,UAAY,WAC/Br4gB,EAAOl2F,UAAUuumB,UAAUromB,KAAKtB,MAChCA,KAAK2lN,aAAe,GAMxBsrZ,EAAa71mB,UAAUuyF,kBAAoB,SAAUkF,EAASC,GAC7B,iBAAzB9yF,KAAK+hC,iBACL/hC,KAAKummB,kBAAkB,SAAU,QAAS,cAAe1zgB,GAE7D,IAAK,IAAIz0F,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKu1F,GAAUz0F,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,kBACD,GAAItK,KAAK2xmB,gBAAiB,CACtB,IAAIjre,EAAS56G,GAAM08G,WAAWy+d,GAAoB/2jB,KAAMlwC,KAAKqrI,aAAaxwH,UAAW7a,KAAKmB,eAC1FnB,KAAKqrI,aAAatR,QAAQ,GAAK2M,EAC/BnhI,GAAanB,IAAIpE,KAAKqrI,aAAatR,QAAQ,GAAI,QAAS/5H,KAAKwqmB,cAAexqmB,WAG5EqF,EAAOrF,KAAKqrI,aAAatR,QAAQ,IACjC/5H,KAAKqrI,aAAatR,QAAQ,GAAK,KAEnC,MACJ,QACI,IAAI63e,OAAW,EACfA,EAAW5xmB,KAAKkjmB,cAAc54lB,EAAMuoF,EAASC,GAC7CxB,EAAOl2F,UAAUuyF,kBAAkBrsF,KAAKtB,KAAM4xmB,EAASzhP,YAAayhP,EAASzO,gBAS7F8N,EAAa71mB,UAAU2mC,cAAgB,WACnC,MAAO,gBAMXkvkB,EAAa71mB,UAAUg3G,OAAS,WAC5B9gB,EAAOl2F,UAAUg3G,OAAO9wG,KAAKtB,OAGjCgxF,IACIjpF,GAAUhL,MAAO,KAAM68E,QAAS,KAAMm+H,QAAS,MAAQ8C,KACxDo2Z,EAAa71mB,UAAW,cAAU,GACrC41F,IACI9pF,GAAS,IACV+pmB,EAAa71mB,UAAW,kBAAc,GACzC41F,IACI9pF,GAAS,IACV+pmB,EAAa71mB,UAAW,uBAAmB,GAC9C41F,IACI9pF,GAAS,IACV+pmB,EAAa71mB,UAAW,iBAAa,GACxC41F,IACI9pF,EAAS,KACV+pmB,EAAa71mB,UAAW,uBAAmB,GAC9C41F,IACI9pF,OACD+pmB,EAAa71mB,UAAW,sBAAkB,GAC7C41F,IACI9pF,EAAS,OACV+pmB,EAAa71mB,UAAW,aAAS,GACpC41F,IACI9pF,EAAS,IACV+pmB,EAAa71mB,UAAW,iBAAa,GACxC41F,IACI9pF,EAAS,aACV+pmB,EAAa71mB,UAAW,kBAAc,GACzC41F,IACIloF,KACDmomB,EAAa71mB,UAAW,iBAAa,GACxC41F,IACI9pF,EAAS,OACV+pmB,EAAa71mB,UAAW,aAAS,GACpC41F,IACI9pF,EAAS,UACV+pmB,EAAa71mB,UAAW,sBAAkB,GAC7C41F,IACI9pF,EAAS,OACV+pmB,EAAa71mB,UAAW,qBAAiB,GAC5C41F,IACI9pF,EAAS,OACV+pmB,EAAa71mB,UAAW,4BAAwB,GACnD41F,IACI9pF,GAAS,IACV+pmB,EAAa71mB,UAAW,sBAAkB,GAC7C41F,IACI9pF,EAAS,OACV+pmB,EAAa71mB,UAAW,YAAQ,GACnC61mB,EAAejghB,IACX5nF,GACD6nmB,IAELvB,ItbnVEruiB,GAAY,eACZC,GAAY,eACZE,GAAW,cACXC,GAAc,iBubTdgvB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GAgB5D04L,GAAQ,gBAKRg6Y,GAAY,kBAGZC,GAAO,UAEPC,GAAa,gBACbC,GAAgB,kBAGhBC,GAAY,cAEZC,GAAkB,+BAKlBC,GAAkB,oBA4BlBC,GAA6B,SAAU9ghB,GAKvC,SAAS8ghB,EAAYl2gB,EAAQl7F,GACzB,IAAIjB,EAAQuxF,EAAOhwF,KAAKtB,KAAMk8F,EAAQl7F,IAAYhB,KAMlD,OALAD,EAAMuomB,YAAa,EACnBvomB,EAAMsymB,sBACNtymB,EAAMuymB,qBACNvymB,EAAMwymB,mBAAoB,EAC1BxymB,EAAMyymB,eAAgB,EACfzymB,EA6sFX,OAxtFA0wF,GAAU2hhB,EAAa9ghB,GAcvB8ghB,EAAYh3mB,UAAUq3mB,UAAY,SAAUhnjB,GACpCA,EACAzrD,KAAKghE,eAAel9D,UAAUM,IA9C1B,SAiDJpE,KAAKghE,eAAel9D,UAAUS,OAjD1B,SAmDJvE,KAAKm7H,WACLn7H,KAAKm7H,SAASjoH,UAAYu4C,EAC1BzrD,KAAKm7H,SAAS3zE,aAGtB4qjB,EAAYh3mB,UAAU47F,gBAAkB,WACpC,IAAIgB,KAWJ,MAVkB,aAAdh4F,KAAKqgC,OACLrgC,KAAK0ymB,kBAAmB,EACxB1ymB,KAAK2ymB,kBAAmB,EACxB3ymB,KAAK4ymB,oBAAqB,EAC1B5ymB,KAAKupmB,gBAAiB,EACtBvxgB,EAAQxzF,MACJgzF,OAAQ,oBACRv3F,MAAOD,SAGRg4F,GAEXo6gB,EAAYh3mB,UAAUy3mB,oBAAsB,WACxC,GAAIv0mB,OAAOhB,KAAK0C,KAAKi8E,gBAAgBz/E,OACjC,IAAK,IAAI4B,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAKi8E,gBAAiB79E,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC1E,IAAIk+E,EAAWz5E,EAAGzE,GAClB,OAAQk+E,GACJ,IAAK,QACDt8E,KAAKghE,eAAel9D,UAAUM,IAAIpE,KAAKi8E,eAAeK,IACtDt8E,KAAKknK,aAAapjK,UAAUM,IAAIpE,KAAKi8E,eAAeK,IACpD,MACJ,IAAK,WACDt8E,KAAKiiC,QAAO,GACZ,MACJ,IAAK,cACDjiC,KAAKkhE,aAAa19D,aAAa84E,EAAUt8E,KAAKi8E,eAAeK,IAC7D,MACJ,SACuB,MAGH/9E,QAAQ+9E,IAAa,EACjCt8E,KAAKgB,QAAQwC,aAAa84E,EAAUt8E,KAAKi8E,eAAeK,KAHxC,OAAQ,WAAY,gBAAiB,QAKnC/9E,QAAQ+9E,IAAa,EACvCt8E,KAAK4nmB,cAAcpkmB,aAAa84E,EAAUt8E,KAAKi8E,eAAeK,KAL7C,QAAS,OAAQ,QAAS,SAOxB/9E,QAAQ+9E,IAAa,EACxCt8E,KAAKghE,eAAex9D,aAAa84E,EAAUt8E,KAAKi8E,eAAeK,IAG/Dt8E,KAAKkhE,aAAa19D,aAAa84E,EAAUt8E,KAAKi8E,eAAeK,OAOrF81hB,EAAYh3mB,UAAU03mB,eAAiB,SAAUrnjB,GACzCA,GAAuB,aAAdzrD,KAAKqgC,KACdrgC,KAAKkhE,aAAa19D,aAAa,WAAY,QAG3CxD,KAAKkhE,aAAax1D,gBAAgB,aAG1C0mmB,EAAYh3mB,UAAU23mB,kBAAoB,SAAUtnjB,GAC5CA,GACIzrD,KAAKgzmB,aAAavymB,WAClBT,KAAKgzmB,aAAatumB,MAAMosC,QAAU,GAGlC9wC,KAAKizmB,iBAAiBtxmB,YAAY3B,KAAKgzmB,cAE3ChzmB,KAAKizmB,iBAAiBnvmB,UAAUS,OAAO4tmB,MAGvCnymB,KAAKgzmB,aAAatumB,MAAMosC,QAAU,OAClC9wC,KAAKizmB,iBAAiBnvmB,UAAUM,IAAI+tmB,MAG5CC,EAAYh3mB,UAAU83mB,eAAiB,WAC/BlzmB,KAAKiT,WACLjT,KAAKknK,aAAapjK,UAAUM,IAAIpE,KAAKiT,UACrCjT,KAAKghE,eAAel9D,UAAUM,IAAIpE,KAAKiT,YAG/Cm/lB,EAAYh3mB,UAAU+3mB,aAAe,WACjC,GAAI3nmB,GAAQqb,UAA2B,aAAd7mB,KAAKqgC,MAAuBrgC,KAAKupmB,eAAiB,CACvE,IAAI99N,EAAUzrY,KACdpE,OAAO4zmB,WAAa,WAChB/jO,EAAQk+N,aAEZz2f,QAAQu8f,aAAc,IAE1B,IACIlimB,GAAc02D,MAAOjkE,KAAKm7H,SAAUvhG,QAAQ,EAAOuX,WADrC5Z,KAAM,SAAUrsB,SAAU,MAG5C,GADAlL,KAAK2mB,QAAQ,OAAQpZ,IACjBA,EAAUqsB,OAAd,CAUA,GAPA55B,KAAKozmB,uBACL5ymB,SAASuL,KAAKpK,YAAY3B,KAAKm7H,SAASn6H,SACtB,aAAdhB,KAAKqgC,MACL18B,GAAU3D,KAAKghE,iBA9IP,gBAgJZhhE,KAAKm7H,SAAS3D,KAAKjqH,EAAU4jC,UAA4B,MAAhBnxC,KAAKunE,OAAmBvnE,KAAKgB,QAAU,MAChF0C,EAAW1D,KAAKkhE,cAAgBw5F,gBAAiB,UAC5C16J,KAAKqzmB,aAAc,CACpB,IAAIz7Z,EAAY53M,KAAKgpG,KAAKrmG,cAAc,MACpCi1M,IACA53M,KAAKszmB,SAAW17Z,EAAUh2M,UAAYg2M,EAAUh2M,WAAU,GAAQg2M,GAEtE53M,KAAKqzmB,cAAe,EAExBrzmB,KAAKuzmB,iBAAiB,MACJ,aAAdvzmB,KAAKqgC,MACLrgC,KAAKyrJ,cAETzrJ,KAAK+N,OAAO,WAAaupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqBx/B,EAAGb,SAE/FoymB,EAAYh3mB,UAAUg4mB,qBAAuB,WACzC,GAAIpzmB,KAAK43M,WAAa53M,KAAK43M,UAAUj1M,cAAc,MAC7CmgmB,GAAoB7pd,IAAK,CAC3B,IAAIj4I,OAAU,EACd,GAAkB,aAAdhB,KAAKqgC,KAEL,YADArgC,KAAKyrJ,cAQO,QAJZzqJ,EAAUhB,KAAK43M,UAAUj1M,cAAc,MACjCmgmB,GAAoB7pd,GAAK,SACzB44d,GAAY,QAGlB7xmB,KAAKyrJ,cACLzrJ,KAAKwzmB,aAAaxymB,MAI9BoxmB,EAAYh3mB,UAAUq4mB,oBAAsB,SAAUl3mB,GAClD,IAAIg9H,EACAh9H,EACAg9H,EAAgBp5D,GAAO5jE,EAAMyD,KAAKs4M,cAAe,aAAct4M,KAAK4/D,YAGhE5/D,KAAKjD,OAASiD,KAAKjD,MAAMP,OACzB2jE,GAAOngE,KAAKjD,MAAMiD,KAAKjD,MAAMP,OAAS,GAAIwD,KAAKs4M,cAAe,aAAct4M,KAAK4/D,YAGjF25D,EAAgB,KAGpBA,GAAwC,OAAvBA,EAAct7G,OAC/Bje,KAAKwzmB,aAAaj6e,EAAct7G,MAChCje,KAAK4umB,aAAar1e,EAAct7G,KAAMs7G,EAAcznH,SAG5DsgmB,EAAYh3mB,UAAUsumB,kBAAoB,WAUtC,OARIp/e,gBAAiB,QACjBswC,YAAa56J,KAAKgB,QAAQsC,GAAK,WAC/BqO,KAAQ,UACRkgX,uBAAwB,OACxBhnQ,wBAAyB,OACzB8vC,gBAAiB,OACjBD,gBAAiB,UAIzB03c,EAAYh3mB,UAAUs4mB,eAAiB,WACnChwmB,EAAW1D,KAAK43M,WAAat0M,GAAMtD,KAAKgB,QAAQsC,GAAK,WAAYqO,KAAQ,UAAW+xH,cAAe,UACnG,IAAIiwe,IAAiB3zmB,KAAKkhE,aAAqB,SAC/Cx9D,EAAW1D,KAAKkhE,aAAclhE,KAAK0pmB,qBAC/BiK,GACAjwmB,EAAW1D,KAAKkhE,cAAgBopD,gBAAiB,UAGzD8nf,EAAYh3mB,UAAUw4mB,oBAAsB,SAAU/ymB,GAClD,IAAI+C,EAEA7G,GADJ6G,EAAW5D,KAAK6zmB,sBAAsBrymB,iBAAiB,iBAClCoC,EAASpH,OAAS,GAAGqW,aAAa,cAQvD,GAPKpV,EAAkBuC,KAAKjD,SACxBiD,KAAK2zH,WAAa3zH,KAAKjD,MAAMsE,SAEjCrB,KAAK8zmB,YAAY/2mB,EAAO8D,GACxBb,KAAK+zmB,sBACL/zmB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,eAC1Bj0mB,KAAKk0mB,mBACDl0mB,KAAKszmB,UAAYtzmB,KAAKqjmB,SAAU,CAChC,IAAIr6f,EAAOhpG,KAAKszmB,SAAS1xmB,UAAY5B,KAAKszmB,SAAS1xmB,WAAU,GAAQ5B,KAAKszmB,SAC1EtzmB,KAAKilmB,iBAAiBj8f,EAAMhpG,KAAKm0mB,UACjCn0mB,KAAKo0mB,qBAGbhC,EAAYh3mB,UAAU8pmB,gBAAkB,SAAUrkmB,GAC9CywF,EAAOl2F,UAAU8pmB,gBAAgB5jmB,KAAKtB,KAAMa,GAC5Cb,KAAKmgI,cACLngI,KAAKmzmB,gBAETf,EAAYh3mB,UAAU8oI,cAAgB,WAKlC,OAJAlkI,KAAKq0mB,mBAAqBr0mB,KAAKkhE,aACb,aAAdlhE,KAAKqgC,MACLrgC,KAAK+N,OAAO,iBAAmBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,OAEtErgC,KAAKq0mB,mBAAmBt3mB,OAEnCq1mB,EAAYh3mB,UAAUk5mB,YAAc,SAAUC,GAG1C,IAAK,IAFDhyiB,EACAR,EAAQtkE,EAAkBuC,KAAKwsB,OAAOzvB,OAASiD,KAAKwsB,OAAOwC,KAAOhvB,KAAKwsB,OAAOzvB,MACzEb,EAAI,EAAGA,EAAIq4mB,EAAW/3mB,OAAQN,IAE/BqmE,EADM,IAANrmE,EACY,IAAIwtE,GAAU3H,EAAO,QAASwyiB,EAAWr4mB,IAGzCqmE,EAAUsH,GAAG9H,EAAO,QAASwyiB,EAAWr4mB,IAG5D,OAAO,IAAIisE,IAAQO,MAAMnG,IAE7B6viB,EAAYh3mB,UAAU6pmB,iBAAmB,SAAUrtZ,EAAW5uG,EAAMnoG,EAAG8nmB,GACnEr3gB,EAAOl2F,UAAU6pmB,iBAAiB3jmB,KAAKtB,KAAM43M,EAAW5uG,EAAMnoG,GAC9D,IAAI6R,EAAQ1S,KACRu0mB,KACJ,IAAK92mB,EAAkBuC,KAAKjD,SAAWiD,KAAK0ymB,iBACxC,IAAK,IAAIx2mB,EAAI,EAAGA,EAAI8D,KAAKjD,MAAMP,OAAQN,IAAK,EACvB8D,KAAKupmB,iBAAmB9rmB,EAAkBuC,KAAKszmB,UAC5DtzmB,KAAKszmB,SAAW17Z,GAAWj1M,cAAc,kBAAoB+P,EAAM3V,MAAMb,GAAK,OAE9Eq4mB,EAAW/vmB,KAAKkO,EAAM3V,MAAMb,IAIpCq4mB,EAAW/3mB,OAAS,GAAKwD,KAAKqoE,sBAAsBC,KAAgB7qE,EAAkBuC,KAAKjD,OAC3FiD,KAAKqoE,WAAWyjG,aAAa9rK,KAAKs0mB,YAAYC,IAAaria,KAAK,SAAUrxM,GACtE6R,EAAMmwM,QAAQhiN,EAAE9B,OAAQiqG,EAAKxsG,QAC7BkW,EAAM8hmB,iBAAiB58Z,EAAW5uG,EAAMnoG,KAI5Cb,KAAKw0mB,iBAAiB58Z,EAAW5uG,EAAMnoG,IAG/CuxmB,EAAYh3mB,UAAUo5mB,iBAAmB,SAAU58Z,EAAW5uG,EAAMnoG,EAAG8nmB,GACjD,aAAd3omB,KAAKqgC,MAAuBrgC,KAAKy0mB,eACjCz0mB,KAAK+N,OAAO,aAAeupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,OAEpErgC,KAAKszmB,UAAatzmB,KAAKm0mB,SAKlB12mB,EAAkBuC,KAAKm0mB,WAAsC,IAAzBn0mB,KAAKm0mB,SAAS33mB,SACxDwD,KAAKm0mB,SAAWnrgB,IALhBhpG,KAAKszmB,SAAW17Z,EAAUh2M,UAAYg2M,EAAUh2M,WAAU,GAAQg2M,EAClE53M,KAAKm0mB,SAAWnrgB,EAChBhpG,KAAK00mB,mBAAqB10mB,KAAKs4M,gBAK9Bt4M,KAAK20mB,mBAAqB3rgB,EAAKxsG,QAAU,IAAMwD,KAAK0ymB,kBAAoB1ymB,KAAKknmB,YAAclnmB,KAAKupmB,eACjGvpmB,KAAK40mB,oBAAoB50mB,KAAK60mB,UAAW70mB,KAAKwsB,SAG9CxsB,KAAKjD,OAASiD,KAAKjD,MAAMP,SAA0B,aAAdwD,KAAKqgC,MAAmD,KAA5BrgC,KAAKkhE,aAAankE,OACrE,aAAdiD,KAAKqgC,OACLrgC,KAAKo0mB,mBAETp0mB,KAAK0zmB,iBACL1zmB,KAAK80mB,mBACL90mB,KAAK21N,iBACAl4N,EAAkBuC,KAAK+0mB,kBACxB/0mB,KAAK+0mB,kBAEJt3mB,EAAkBuC,KAAKg1mB,kBACxBh1mB,KAAKg1mB,kBAELh1mB,KAAKi1mB,cACLj1mB,KAAKk1mB,qBACLl1mB,KAAKm1mB,gBACLn1mB,KAAKo1mB,qBACLp1mB,KAAKq1mB,iBAAiB,KAAMr1mB,KAAKjD,MAAO,OAE5CiD,KAAKmgI,cACDngI,KAAKiomB,kBACLjomB,KAAKiomB,iBAAkB,EACvBjomB,KAAKmzmB,kBAGbf,EAAYh3mB,UAAUg5mB,iBAAmB,WACrC,IAAIr3mB,EACAiE,EACAqC,EAAYrD,KAAK2ymB,iBACjBd,GACA/O,GAAoB9hd,SACxB,IAAKvjJ,EAAkBuC,KAAKjD,OACxB,IAAK,IAAI+U,EAAQ,GAAIrU,EAAkBuC,KAAKjD,MAAM+U,IAASA,IAGvD,GAFA/U,EAAQiD,KAAKjD,MAAM+U,GACnB9Q,EAAUhB,KAAKgpG,KAAKrmG,cAAc,kBAAoB5F,EAAQ,MACjD,CAWT,GAVA4G,GAAU3C,GAAUqC,GAChBrD,KAAK2ymB,kBAAoB3xmB,EAAQslN,iBAC9BtlN,EAAQiiN,uBAAuBn/M,UAAUK,SAAS2+lB,GAAoB5pgB,UACpEl4F,EAAQ+lH,oBACT/lH,EAAQ+lH,mBAAmBjjH,UAAUK,SAAS2+lB,GAAoB5pgB,SACtEv1F,GAAU3C,EAAQiiN,wBAAyB5/M,GAE3CrD,KAAK2ymB,kBAAoB3ymB,KAAKwsB,OAAOurL,UAAY/2M,EAAQiiN,uBAAuBn/M,UAAUK,SAAS0tmB,KACnG7xmB,KAAKs1mB,cAAcv4mB,GAEnBiD,KAAK2ymB,kBAAoB3xmB,EAAQ8C,UAAUK,SAAS2+lB,GAAoB5gmB,OAAQ,CAChFmC,GAAarD,GAAU8hmB,GAAoB5gmB,OAC3C,IAAIojmB,EAAUtkmB,EAAQqT,cAAc7S,iBAAiB,IACjDshmB,GAAoB7pd,GAAK,SAAW44d,GAAY,KAChDvM,EAAQ9omB,OAAS,EACjBmH,GAAU2hmB,EAAQ,IAAKxC,GAAoB5gmB,QAG3ClC,KAAK43M,UAAY53M,KAAK43M,UAAUh2M,UAAY5B,KAAK43M,UAAUh2M,WAAU,GAAQ5B,KAAK43M,UAClF53M,KAAKikmB,aACLtgmB,GAAU3D,KAAKgpG,MAAO85f,GAAoBC,SAIlD,GADA/hmB,EAAQwC,aAAa,gBAAiB,QACpB,aAAdxD,KAAKqgC,MAAuBr/B,EAAQ8C,UAAUK,SAAS,YAAa,CACpE,IAAIoxmB,EAAYv0mB,EAAQmE,kBAAkB0N,aAAa,gBACvD,GAAIpV,EAAkB83mB,IAA4B,UAAdA,EAAuB,CACvD,IAAIt1mB,GACAq3F,OAAQ,oBACRr1D,OAAsB,aAAdjiC,KAAKqgC,KACb44G,GAAIj4I,EACJH,EAAG,MAEPb,KAAK+N,OAAO,aAAc9N,KAM9CD,KAAKw1mB,iBACLx1mB,KAAKy1mB,qBAETrD,EAAYh3mB,UAAUk6mB,cAAgB,SAAUv4mB,GAC5C,IAAIiE,EACA00mB,EACArymB,EAAYrD,KAAK2ymB,iBACjBd,GACA/O,GAAoB9hd,SACxB00d,EAAW10mB,EAAUhB,KAAK43M,UAAUj1M,cAAc,kBAAoB5F,EAAQ,MAC9E,IAAIb,EAAI,EACJwnB,EAAI,EACJqX,GAAO,EACP46kB,GAAQ,EACZ,GACQ30mB,GAAWA,EAAQiiN,yBACdjiN,EAAQiiN,uBAAuBn/M,UAAUK,SAAS0tmB,KACnD7wmB,EAAQiiN,uBAAuBn/M,UAAUK,SAAS2+lB,GAAoB7pd,MAC1El+G,GAAO,IAENA,IAAS/5B,GAAYA,EAAQiiN,wBAC3BjiN,EAAQiiN,uBAAuBn/M,UAAUK,SAAS2+lB,GAAoB5pgB,OACzEh9F,EAAI,GAGJ8E,EAAUA,EAAQiiN,uBAElByyZ,GAAYA,EAAS3uf,qBAChB2uf,EAAS3uf,mBAAmBjjH,UAAUK,SAAS0tmB,KAChD6D,EAAS3uf,mBAAmBjjH,UAAUK,SAAS2+lB,GAAoB7pd,MACvE08d,GAAQ,IAEPA,IAAUD,GAAaA,EAAS3uf,oBAC9B2uf,EAAS3uf,mBAAmBjjH,UAAUK,SAAS2+lB,GAAoB5pgB,OACtEx1E,EAAI,GAGJgylB,EAAWA,EAAS3uf,yBAEnB7qH,EAAI,IAAMwnB,EAAI,IACnBqX,GAAQ46kB,IAAU30mB,EAAQiiN,uBAAuBn/M,UAAUK,SAAS0tmB,IACpElumB,GAAU3C,EAAQiiN,wBAAyB5/M,GAEtC03B,GAAQ46kB,GAAS30mB,EAAQiiN,uBAAuBn/M,UAAUK,SAAS0tmB,KACxExtmB,GAAarD,EAAQiiN,wBAAyB5/M,IAGtD+umB,EAAYh3mB,UAAUo6mB,eAAiB,WACnC,IAAII,EAAc51mB,KAAKgpG,KAAKxnG,iBAAiB,MAAQshmB,GAAoB7pd,IAAIz8I,OACzEq5mB,EAAoB71mB,KAAKgpG,KAAKxnG,iBAAiB,MAAQshmB,GAAoB9hd,UAAUxkJ,OACpFo5mB,IAAgBC,GAAqC,aAAd71mB,KAAKqgC,MAAuBrgC,KAAKy0mB,eACzEz0mB,KAAK+N,OAAO,kBAAoBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqBtjC,MAAO,UAErG64mB,IAAgBC,GAAqC,aAAd71mB,KAAKqgC,MAAuBrgC,KAAKy0mB,eACzEz0mB,KAAK+N,OAAO,kBAAoBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqBtjC,MAAO,aAG9Gq1mB,EAAYh3mB,UAAU06mB,UAAY,SAAUj1mB,GACnCb,KAAK+1mB,aAA6B,aAAd/1mB,KAAKqgC,KAQpBrgC,KAAK+1mB,aAA6B,aAAd/1mB,KAAKqgC,MAAwBrgC,KAAKomK,eAC5DpmK,KAAKw1N,YARwB,KAAzBx1N,KAAKkkI,gBACLlkI,KAAKw1N,YAGLx1N,KAAK2pmB,aAOjByI,EAAYh3mB,UAAU46mB,MAAQ,SAAUn1mB,GACpC,IAAId,EAAQC,KACZ,GAAkB,aAAdA,KAAKqgC,OAAwBrgC,KAAK+1mB,YAAa,CAG1Ct4mB,EAFMisB,OAAOC,aAAa9oB,EAAEsnB,SACNzY,MAAM,SAE7B1P,KAAKsomB,YAAa,GAI1B,GADAtomB,KAAKsomB,WAActomB,KAAKomK,eAA+B,IAAdvlK,EAAEsnB,SAAkBnoB,KAAKsomB,WAC9DtomB,KAAKsomB,WAIL,OAHAtomB,KAAKsomB,YAAa,EAClBtomB,KAAKi2mB,gBACLj2mB,KAAKk2mB,mBACGr1mB,EAAEsnB,SACN,QAKI,IAJKnoB,KAAKomK,eAAiBpmK,KAAK+1mB,aAC5B/1mB,KAAKw1N,YAETx1N,KAAK81mB,UAAUj1mB,GACXb,KAAKm2mB,oBAAsBn2mB,KAAKupmB,gBAAiC,IAAd1omB,EAAEsnB,QACrDnoB,KAAKozmB,2BAEJ,CACD,IAAIpklB,EAAOhvB,KAAKkkI,gBAEhB,GADAlkI,KAAKmoB,QAAUtnB,EAAEsnB,QACbnoB,KAAKupmB,eAAgB,CACrB,IAAIl0c,GACAy3c,sBAAsB,EACtB99kB,KAAMhvB,KAAKkkI,gBACXsie,WAAY,SAAUn+hB,EAAY1H,EAAOn0C,GACjC6oI,EAAYz7H,SAGhB75B,EAAMmxmB,YAAa,EACnBnxmB,EAAMq2mB,oBAAqB,EAC3Br2mB,EAAMs2mB,YAAYhuiB,EAAY1H,EAAOn0C,KAEzCnwB,MAAOwE,EACP+4B,QAAQ,GAGZ,GADA55B,KAAK2mB,QAAQ,YAAa0uI,GACtBA,EAAYz7H,OACZ,OAEC55B,KAAKkxmB,YAAe77c,EAAYy3c,uBACjC9smB,KAAKuxmB,cAAe,EACpBvxmB,KAAKq2mB,YAAYr2mB,KAAKqoE,WAAY,KAAMroE,KAAKwsB,aAGhD,CAAA,GAAIxsB,KAAK0ymB,iBAAkB,CAC5B,IAAI/xiB,EAAQ,IAAIwH,GAChBxH,EAAkB,KAAT3xC,EAAe2xC,EAAM+H,MAAM1oE,KAAKwsB,OAAOwC,KAAM,aAAcA,EAAMhvB,KAAK4/D,WAAY5/D,KAAKysK,cAAgB9rG,EAChH3gE,KAAKq2mB,YAAYr2mB,KAAKm0mB,SAAUxziB,EAAO3gE,KAAKwsB,QAC5C,MAGA,IAAI8rL,OAAgB,EACpBA,EAAgBt4M,KAAKgpG,KAAKxnG,iBAAiB,MAAQshmB,GAAoB7pd,GAAK,0BAC5E,IAAI1f,EAAgBp5D,GAAOngE,KAAKkkI,gBAAiBo0E,EAAe,aAAct4M,KAAK4/D,YAC/E25D,GAAwC,OAAvBA,EAAct7G,MAC/Bje,KAAKwzmB,aAAaj6e,EAAct7G,MAChCje,KAAKgpG,KAAK78F,UACNotH,EAAct7G,KAAK05C,aAAe4hE,EAAcznH,OAEtB,KAAzB9R,KAAKkkI,gBACVlkI,KAAKyrJ,cAGLzrJ,KAAKozmB,2BAOjChB,EAAYh3mB,UAAU6lN,SAAW,SAAUtgJ,GACvC,IAAIssiB,EAActsiB,EAAQA,EAAMthE,QAAUW,KAAK2gE,MAAQ3gE,KAAK2gE,MAAMthE,QAAU,IAAI8oE,GAChF,GAAInoE,KAAKuxmB,aAAc,CACnB,GAA6B,OAAzBvxmB,KAAKkkI,gBAA0B,CAC/B,IAAI35C,EAAWvqF,KAAKwjmB,WAAWxjmB,KAAKqoE,YAAY0uI,OAChD,IAAM/2M,KAAKqoE,sBAAsBC,IAA6B,WAAbiiB,IAAsC,WAAbA,EAGrE,CACD,IAAI/9D,EAASxsB,KAAKwsB,OAClByglB,EAAYvkiB,MAAOjrE,EAAkB+uB,EAAOwC,MAAsB,GAAdxC,EAAOwC,KAAW,aAAchvB,KAAKkkI,gBAAiBlkI,KAAK4/D,WAAY5/D,KAAKysK,mBAJhIwgc,EAAYvkiB,MAAM,GAAI,aAAc1oE,KAAKkkI,gBAAiBlkI,KAAK4/D,WAAY5/D,KAAKysK,cAOxF,OAAOwgc,EAGP,OAAOtsiB,IAAgB3gE,KAAK2gE,MAAQ3gE,KAAK2gE,MAAQ,IAAIwH,KAG7DiqiB,EAAYh3mB,UAAUi7mB,YAAc,SAAUhuiB,EAAY1H,EAAOn0C,GAE7D,GADAxsB,KAAK+kmB,eAAgB,EACe,KAAhC/kmB,KAAKkkI,gBAAgBj0H,OAAe,CACpC,IAAI+4F,EAAOhpG,KAAKszmB,SAAS1xmB,UAAY5B,KAAKszmB,SAAS1xmB,WAAU,GAAQ5B,KAAKszmB,SACtEtzmB,KAAKs2mB,cACLt2mB,KAAK20mB,mBAAoB,EACzB30mB,KAAKilmB,iBAAiBj8f,EAAMhpG,KAAKm0mB,UAC7Bn0mB,KAAKjD,OAASiD,KAAKjD,MAAMP,QACzBwD,KAAKo0mB,mBAEY,IAAjBp0mB,KAAKmoB,SACLnoB,KAAKozmB,uBAETpzmB,KAAK+N,OAAO,WAAaupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqBx/B,EAAGb,aAI/FA,KAAKwkmB,UAAUn8hB,EAAY77C,EAAQm0C,GAC/B3gE,KAAK0ymB,mBACCrqiB,aAAsBC,IAIxBtoE,KAAK20mB,mBAAoB,EACzB30mB,KAAK60mB,UAAYl0iB,GAJjB3gE,KAAK40mB,oBAAoBj0iB,EAAOn0C,IAQ5CxsB,KAAK0tmB,eACa,aAAd1tmB,KAAKqgC,MACLrgC,KAAKyrJ,eAGb2md,EAAYh3mB,UAAUw5mB,oBAAsB,SAAUj0iB,EAAOn0C,GACzD,IAAI+plB,GAAcv2mB,KAAKojmB,eAAepjmB,KAAKkhE,aAAankE,MAAOiD,KAAK4/D,YACpE,GAAI5/D,KAAK0ymB,kBAAoB6D,EAAY,CACrC,IAAIx5mB,EAAQiD,KAAKkhE,aAAankE,MAG9B,GAA4B,kBAFTU,EAAkBuC,KAAKm0mB,WAAan0mB,KAAKm0mB,SAAS33mB,OAAS,EAC1EwD,KAAKm0mB,SAAS,GAAKn0mB,KAAKm0mB,UACU,CAClC,IAAI5nlB,KACJnvB,EAASovB,EAAOwC,KAAMjyB,EAAOwvB,GAC7BnvB,EAASovB,EAAOzvB,MAAOA,EAAOwvB,IAC1B81L,EAAW/1J,KAAKuB,MAAMvB,KAAKC,UAAUvsD,KAAKqjmB,YACrC16kB,OAAO,EAAG,EAAG4D,GACtBvsB,KAAKwkmB,UAAUniZ,EAAU71L,GAAkBxsB,KAAKwsB,OAAQm0C,OAEvD,CACD,IAAI0hJ,GAAYriN,KAAKkhE,aAAankE,OAClCiD,KAAKwkmB,UAAUniZ,EAAU71L,GAAkBxsB,KAAKwsB,SAGpDxsB,KAAKjD,OAASiD,KAAKjD,MAAMP,QACzBwD,KAAKo0mB,oBAGbhC,EAAYh3mB,UAAUyumB,eAAiB,WACnC,MAAO,mBAEXuI,EAAYh3mB,UAAUo7mB,aAAe,SAAU31mB,GAC3Cb,KAAKi1mB,aAAc,GACfj1mB,KAAKw8E,UAAax8E,KAAKolB,UAGvBvkB,EAAEsG,SAAWnH,KAAKgzmB,cAIjBhzmB,KAAKknmB,YAA4B,aAAdlnmB,KAAKqgC,MACzBrgC,KAAK2T,cAAc3T,KAAKkhE,aAAc,SAErClhE,KAAKknmB,YAA4B,aAAdlnmB,KAAKqgC,MACzBrgC,KAAKqsI,UAELxrI,EAAEsG,SAAiE,IAAvDtG,EAAEsG,OAAOrD,UAAUoJ,WAAW3O,QAAQwzmB,IAC9C/xmB,KAAKomK,eACLpmK,KAAK0tmB,iBAIR1tmB,KAAKomK,eAAiBpmK,KAAK+1mB,YAC5B/1mB,KAAKw1N,aAGLx1N,KAAK2pmB,YACa,aAAd3pmB,KAAKqgC,OACLrgC,KAAKk2mB,mBACLl2mB,KAAKknmB,YAAa,EACblnmB,KAAKghE,eAAel9D,UAAUK,SAAS0zN,KACxC73N,KAAKghE,eAAel9D,UAAUM,IAAIyzN,MAI9Ch3N,EAAE8kB,mBA5BE9kB,EAAE8kB,mBA8BVyslB,EAAYh3mB,UAAU6mC,OAAS,SAAUwpB,GACjCA,GACAzrD,KAAKghE,eAAel9D,UAAUS,OAvpB3B,cAwpBHvE,KAAKkhE,aAAax1D,gBAAgB,YAClChI,EAAW1D,KAAKkhE,cAAgBopD,gBAAiB,YAGjDtqH,KAAKghE,eAAel9D,UAAUM,IA5pB3B,cA6pBHpE,KAAKkhE,aAAa19D,aAAa,WAAY,QAC3CE,EAAW1D,KAAKkhE,cAAgBopD,gBAAiB,UAEjDtqH,KAAKolB,UAAYqmC,IACjBzrD,KAAKolB,QAAUqmC,GAEnBzrD,KAAK2pmB,aAETyI,EAAYh3mB,UAAU+umB,OAAS,SAAU94e,GACrC,IAAIlqH,EAIJ,GAHK1J,EAAkB4zH,KACnBlqH,EAASkqH,EAAImtB,eAEbx+I,KAAKm7H,UAAY36H,SAASuL,KAAK5H,SAASnE,KAAKm7H,SAASn6H,UAAYhB,KAAKm7H,SAASn6H,QAAQmD,SAASgD,GAC/E,aAAdnH,KAAKqgC,MACLrgC,KAAKkhE,aAAah/D,YAF1B,CAMA,GAAkB,aAAdlC,KAAKqgC,MAAuB70B,GAAQyc,OAASxqB,EAAkB4zH,GAG/D,OAFArxH,KAAKknmB,YAAa,OAClBlnmB,KAAKghE,eAAel9D,UAAUS,OAAOszN,IAGzC,GAAI73N,KAAKuymB,kBAML,OALK90mB,EAAkB4zH,IACnBA,EAAI1rG,iBAER3lB,KAAKkhE,aAAah/D,aAClBlC,KAAKuymB,mBAAoB,GAG7BvymB,KAAKknmB,YAAa,EAClBlnmB,KAAKghE,eAAel9D,UAAUS,OAAOszN,IACnB,QAAd73N,KAAKqgC,MAAgC,aAAdrgC,KAAKqgC,OAC5BrgC,KAAKuzmB,iBAAiB,MACtBvzmB,KAAKy2mB,mBAETz2mB,KAAKq1mB,iBAAiBhkf,EAAKrxH,KAAKjD,MAAOiD,KAAK2zH,YAC5C3zH,KAAK2T,cAAc3T,KAAK4nmB,cAAe,UACvC5nmB,KAAKgzmB,aAAatumB,MAAMosC,QAAU,OAC9B9wC,KAAKomK,eACLpmK,KAAK2pmB,YAET3pmB,KAAKk0mB,mBACLl0mB,KAAK2mB,QAAQ,QACb3mB,KAAK65M,SAAU,EACXruM,GAAQqb,UAA0B,cAAd7mB,KAAKqgC,MAAsC,aAAdrgC,KAAKqgC,MACtDrgC,KAAK02mB,kBAET12mB,KAAK+zmB,sBACL/zmB,KAAK22mB,oBvbpnBb,SAA+B31iB,EAAgBiyiB,EAAkBl2mB,EAAOmqB,EAAgBD,GACpF+5C,EAAel9D,UAAUS,OAAO,iBAChC,IAAI8O,EAAQ4/lB,EAAiBtwmB,cAAc,IAAM2+D,IAC7CvkE,GAASA,EAAMP,QAAU,GAAwB,SAAnB0qB,IAA8BzpB,EAAkB4V,KAC1EA,EAAMvP,UAAUK,SAASq9D,KACzBn9D,GAAagP,GAAQmuD,IAEzB79D,GAAU0P,GAAQouD,Kub8mBlBm1iB,CAAe52mB,KAAKghE,eAAgBhhE,KAAKizmB,iBAAkBjzmB,KAAKjD,MAAOiD,KAAKknB,eAAgBlnB,KAAKinB,aACjGjnB,KAAKo1mB,qBACDp1mB,KAAKupmB,iBAAmB9rmB,EAAkBuC,KAAKszmB,YAC/CtzmB,KAAK43M,UAAY53M,KAAKszmB,YAG9BlB,EAAYh3mB,UAAUu7mB,kBAAoB,WACjC32mB,KAAKjD,OAAUiD,KAAKjD,MAAMP,OAI3BwD,KAAKihE,cAAcn9D,UAAUM,IAAI6tmB,IAHjCjymB,KAAKihE,cAAcn9D,UAAUS,OAAO0tmB,KAM5CG,EAAYh3mB,UAAUo2H,eAAiB,SAAUlqH,EAAU0B,GACvD,OAAOsjD,KAAKC,UAAUjlD,EAASjG,QAAQyuB,UAAYw8B,KAAKC,UAAUvjD,EAAS3H,QAAQyuB,SAEvFsilB,EAAYh3mB,UAAUi6mB,iBAAmB,SAAUh5mB,EAAOuvB,EAAQrkB,GAC9D,IAAID,EAAWskB,MACX5iB,EAAWzB,MACf,GAAIvH,KAAK62mB,YAAc72mB,KAAKwxH,eAAelqH,EAAU0B,GAAW,CAC5D,IAAIuE,GACA1M,EAAGxE,EACH2M,SAAUzB,EACVxK,MAAO6uB,EACP8oG,eAAcr4H,EACd2E,QAAShB,KAAKgB,SAElBhB,KAAK2mB,QAAQ,SAAUpZ,KAG/B6kmB,EAAYh3mB,UAAU07mB,eAAiB,WACnC,IAAI/gmB,EAAS/V,KAAKgpG,KAAKllG,UAAUK,SAAS2+lB,GAAoBC,QAAU,KACpE51lB,iBAAiBnN,KAAKsvP,WAAW,GAAI,MAAMliP,iBAAiB,UAChE,OAAOf,KAAK0zB,MAAM//B,KAAKgpG,KAAKrxC,aAAe/iC,SAAS7e,EAAQ,MAEhEq8lB,EAAYh3mB,UAAU+vmB,gBAAkB,SAAUpyd,GAC9C,IAEIqnP,EAFA/1V,EAAarqC,KAAKgpG,KAAKxnG,iBAAiB,MACtCshmB,GAAoB7pd,GAAK,SAAW44d,GAAY,0BAEtDzxO,EAAernP,GAAS,EAAI1uG,EAAW0uG,EAAQ,GAAK1uG,EAAW,GAC/DrqC,KAAKwzmB,aAAapzO,GAClBpgY,KAAK4umB,aAAaxuO,EAAcpgY,KAAKommB,gBAAgBhmO,EAAavtX,aAAa,iBAGnFu/lB,EAAYh3mB,UAAUiwmB,kBAAoB,SAAUtyd,GACrC/4I,KAAKsvP,WAAhB,IAGI8wI,EAFA/1V,EAAarqC,KAAKgpG,KAAKxnG,iBAAiB,MACtCshmB,GAAoB7pd,GAAK,SAAW44d,GAAY,0BAEtDzxO,EAAernP,GAAS1uG,EAAW7tC,OAAS6tC,EAAW0uG,EAAQ,GAAK1uG,EAAWA,EAAW7tC,OAAS,GACnGwD,KAAKwzmB,aAAapzO,GAClBpgY,KAAK4umB,aAAaxuO,EAAcpgY,KAAKommB,gBAAgBhmO,EAAavtX,aAAa,iBAEnFu/lB,EAAYh3mB,UAAUk0P,SAAW,WAI7B,OAHKtvP,KAAKgpG,MACN1X,EAAOl2F,UAAUg3G,OAAO9wG,KAAKtB,MAE1BA,KAAK43M,UAAY53M,KAAK43M,UAAUp2M,iBAAiB,IAAMshmB,GAAoB7pd,GAC5E,SAAW44d,GAAY,KAAO,MAExCO,EAAYh3mB,UAAUixI,QAAU,WAC5B,SAAIrsI,KAAKolB,SAAYplB,KAAKw8E,YACtBx8E,KAAKk2mB,mBACLl2mB,KAAKknmB,YAAa,EACblnmB,KAAKjD,MAINiD,KAAK2zH,WAAa3zH,KAAKjD,MAAMsE,QAH7BrB,KAAK2zH,WAAa3zH,KAAKjD,MAKvBiD,KAAKjD,OAASiD,KAAKjD,MAAMP,SACP,cAAdwD,KAAKqgC,MAAsC,aAAdrgC,KAAKqgC,KAClCrgC,KAAK6zmB,sBAAsBnvmB,MAAMosC,QAAU,GAG3C9wC,KAAK+2mB,mBAES,aAAd/2mB,KAAKqgC,OACLrgC,KAAKg3mB,YAAYtymB,MAAMosC,QAAU,SAGvB,aAAd9wC,KAAKqgC,MACLrgC,KAAKihE,cAAcn9D,UAAUS,OAAO0tmB,IAEpCjymB,KAAK65M,UACL75M,KAAKkhE,aAAah/D,QAClBlC,KAAK2mB,QAAQ,SACb3mB,KAAK65M,SAAU,GAEd75M,KAAKghE,eAAel9D,UAAUK,SAAS0zN,KACxC73N,KAAKghE,eAAel9D,UAAUM,IAAIyzN,IvbluBlD,SAAgC72J,EAAgBiyiB,GAC5CjyiB,EAAel9D,UAAUM,IAAI,iBAC7B,IAAIiP,EAAQ4/lB,EAAiBtwmB,cAAc,IAAM2+D,IAC5C7jE,EAAkB4V,KACnB1P,GAAU0P,GAAQmuD,IACdnuD,EAAMvP,UAAUK,SAASs9D,KACzBp9D,GAAagP,GAAQouD,Kub8tBrBw1iB,CAAgBj3mB,KAAKghE,eAAgBhhE,KAAKizmB,kBACtCjzmB,KAAKomK,eACLpmK,KAAK0tmB,gBAEF,IAMf0E,EAAYh3mB,UAAU27mB,iBAAmB,WACnB,aAAd/2mB,KAAKqgC,KACLrgC,KAAKg3mB,YAAYtymB,MAAMosC,QAAU,GAGjC9wC,KAAKk3mB,iBAAiBxymB,MAAMosC,QAAU,GAE1C9wC,KAAKizmB,iBAAiBnvmB,UAAUM,IAnzBX,gBAqzBzBgumB,EAAYh3mB,UAAU+7mB,iBAAmB,WACrCn3mB,KAAKk3mB,iBAAiBxymB,MAAMosC,QAAU,OACtC9wC,KAAKizmB,iBAAiBnvmB,UAAUS,OAvzBX,gBAyzBzB6tmB,EAAYh3mB,UAAU66mB,cAAgB,WAClC,IAAI5mlB,EAAO,EACPrvB,KAAKinB,cACLoI,EAAOA,EAAOrvB,KAAKkhE,aAAaj6C,YAAYzqB,OAAS6yB,EAAOrvB,KAAKkhE,aAAaj6C,YAAYzqB,QAE1FwD,KAAKkhE,aAAankE,MAAMP,OAAS6yB,EACjCrvB,KAAKkhE,aAAa7xC,KAAOrvB,KAAKkhE,aAAankE,MAAMP,OAGjDwD,KAAKkhE,aAAa7xC,KAAOA,GAGjC+ilB,EAAYh3mB,UAAUgrK,YAAc,WAChC,OAA+B,OAAtBpmK,KAAKknK,cAA+D,OAApClnK,KAAKknK,aAAa7yJ,eAE/D+9lB,EAAYh3mB,UAAUsymB,aAAe,WAC7B1tmB,KAAKm7H,UAAYn7H,KAAKo3mB,YACtBp3mB,KAAKm7H,SAASn0H,eAAgBgP,MAAOhW,KAAKq3mB,mBAC1Cr3mB,KAAKm7H,SAASpG,gBAAgB/0H,KAAKghE,kBAG3CoxiB,EAAYh3mB,UAAU+6mB,gBAAkB,WACpC,OAAOn2mB,KAAKkkI,gBAAgB1nI,OAAS,GAEzC41mB,EAAYh3mB,UAAUk8mB,gBAAkB,SAAUnvlB,GAC9C,OAAQA,GACJ,KAAK,GACDnoB,KAAK2pmB,YACa,aAAd3pmB,KAAKqgC,MACLrgC,KAAKkhE,aAAah/D,QAEtB,MACJ,KAAK,GACIlC,KAAKomK,eACNpmK,KAAKw1N,cAKrB48Y,EAAYh3mB,UAAUm8mB,oBAAsB,WACxC,IAAIzL,EAAc9rmB,KAAKgpG,KAAKrmG,cAAc,IAAMmgmB,GAAoB5gmB,OAC/DzE,EAAkBqumB,IACnB9rmB,KAAKkhE,aAAa19D,aAAa,wBAAyBsomB,EAAYxomB,KAG5E8umB,EAAYh3mB,UAAUu7jB,UAAY,SAAU91jB,GACxC,IAAIb,KAAKw8E,WAAax8E,KAAKolB,SAAyB,aAAdplB,KAAKqgC,QAG3CrgC,KAAKwymB,eAAgB,IACjB3xmB,EAAEsnB,QAAU,KAAOtnB,EAAEsnB,QAAU,MAAnC,CAGA,GAAItnB,EAAEs8G,OAGF,OAFAn9G,KAAKs3mB,gBAAgBz2mB,EAAEsnB,cACvBtnB,EAAE8kB,iBAGD,GAAI3lB,KAAKomK,cAAe,CACzB,IAAI0lc,EAAc9rmB,KAAKgpG,KAAKrmG,cAAc,IAAMmgmB,GAAoB5gmB,OAEpE,OAAQrB,EAAEsnB,SACN,KAAK,GACL,KAAK,GAAI,MACT,KAAK,GAOD,OANAtnB,EAAE8kB,sBACEmmlB,IACA9rmB,KAAKommB,gBAAgB0F,EAAYj5lB,aAAa,eAC9C7S,KAAKmrmB,qBARC,EAQ6BnrmB,KAAK82mB,kBACxC92mB,KAAKu3mB,wBAGb,KAAK,GAOD,OANA12mB,EAAE8kB,sBACEmmlB,IACA9rmB,KAAKommB,gBAAgB0F,EAAYj5lB,aAAa,eAC9C7S,KAAKqrmB,uBAhBC,EAgB+BrrmB,KAAK82mB,kBAC1C92mB,KAAKu3mB,wBAGb,KAAK,GACDv3mB,KAAKw3mB,QAAQ32mB,GACb,MACJ,KAAK,GACDb,KAAKy3mB,UAAU52mB,GACf,MACJ,KAAK,GAMD,OALAA,EAAE8kB,iBACF3lB,KAAK2pmB,iBACa,aAAd3pmB,KAAKqgC,MACLrgC,KAAKkhE,aAAah/D,SAG1B,KAAK,GAKD,OAJArB,EAAE8kB,sBACgB,aAAd3lB,KAAKqgC,MACLrgC,KAAK03mB,YAAY72mB,IAGzB,KAAK,GAED,YADAb,KAAK23mB,kBAAkB92mB,GAE3B,KAAK,EACDA,EAAE8kB,iBACF3lB,KAAK2pmB,YACL3pmB,KAAKkhE,aAAah/D,QAClBlC,KAAKghE,eAAel9D,UAAUM,IAAIyzN,UAI1C,OAAQh3N,EAAEsnB,SACN,KAAK,GACL,KAAK,EACL,KAAK,GACL,KAAK,GACL,KAAK,GACD,OACJ,KAAK,GACGnoB,KAAK+1mB,aACL/1mB,KAAKw1N,YAET,MACJ,KAAK,GAGD,OAFA30N,EAAE8kB,sBACF3lB,KAAK43mB,eAIb53mB,KAAKm2mB,mBACLn2mB,KAAKgwN,cAAcnvN,GAEL,aAAdb,KAAKqgC,MAAuBrgC,KAAK63mB,sBACjC73mB,KAAK83mB,iBAAiBj3mB,GAE1Bb,KAAKi2mB,gBACLj2mB,KAAK0tmB,iBAET0E,EAAYh3mB,UAAUq8mB,UAAY,SAAU52mB,GACxCA,EAAE8kB,iBACF3lB,KAAK+3mB,WAAW,GAChB/3mB,KAAK89G,WAAY,EACbt9G,SAAS+4H,cAAcz1H,UAAUK,SAAS,oBAC1CnE,KAAKgpG,KAAK9mG,QACVqD,GAAanB,IAAIpE,KAAKgpG,KAAM,UAAWhpG,KAAK22jB,UAAW32jB,OAE3DA,KAAKu3mB,uBAETnF,EAAYh3mB,UAAUo8mB,QAAU,SAAU32mB,GACtCA,EAAE8kB,iBACF3lB,KAAK89G,WAAY,EACjB,IAAI9U,EAAOhpG,KAAKgpG,KAAKxnG,iBAAiB,MAChCshmB,GAAoB7pd,GACpB,SAAW44d,GAAY,0BACzBmG,EAAah4mB,KAAKgpG,KAAKrmG,cAAc,MAAQmgmB,GAAoB5gmB,OACzD1D,MAAMpD,UAAUiG,MAAMC,KAAK0nG,GAAMzqG,QAAQy5mB,IACxC,GACTh4mB,KAAK89G,WAAY,EACjB99G,KAAK+N,OAAO,cAAgBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqBtjC,MAAO,WAGlGiD,KAAKgpG,KAAK9mG,QAEdlC,KAAK+3mB,YAAY,GACjB/3mB,KAAKu3mB,uBAETnF,EAAYh3mB,UAAUu8mB,kBAAoB,SAAU92mB,GAC9B,aAAdb,KAAKqgC,OACA7/B,SAAS+4H,cAAcz1H,UAAUK,SAAS,oBAC3CtD,EAAE8kB,iBACF3lB,KAAK89G,WAAY,EACjB99G,KAAKgpG,KAAK9mG,SAEdlC,KAAK03mB,YAAY72mB,KAGzBuxmB,EAAYh3mB,UAAU08mB,iBAAmB,SAAUj3mB,GAC7B,IAAdA,EAAEsnB,SAA0C,KAAzBnoB,KAAKkkI,gBACxBlkI,KAAKs2mB,aAAc,EAGnBt2mB,KAAKs2mB,aAAc,GAG3BlE,EAAYh3mB,UAAU40N,cAAgB,SAAUnvN,GAC5C,GAAmB,cAAdb,KAAKqgC,MAAsC,aAAdrgC,KAAKqgC,MAAwBrgC,KAAKjD,OAASiD,KAAKjD,MAAMP,OACpF,OAAQqE,EAAEsnB,SACN,KAAK,GACDtnB,EAAE8kB,iBACF3lB,KAAKi4mB,QAAQ,EAAGp3mB,GAChB,MACJ,KAAK,GACDA,EAAE8kB,iBACF3lB,KAAKi4mB,OAAO,EAAGp3mB,GACf,MACJ,KAAK,EACDb,KAAK4zmB,oBAAoB/ymB,GACzB,MACJ,KAAK,GACDb,KAAKk4mB,mBAAmBr3mB,QAI/B,GAAkB,IAAdA,EAAEsnB,SAA+B,cAAdnoB,KAAKqgC,MACzBrgC,KAAKjD,OAASiD,KAAKjD,MAAMP,OAAQ,CACjCqE,EAAE8kB,iBACF,IAAIoV,EAAO/6B,KAAKjD,MAAMiD,KAAKjD,MAAMP,OAAS,GAC1CwD,KAAK8zmB,YAAY/4kB,EAAMl6B,GACvBb,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,eAC1Bj0mB,KAAKyzmB,oBAAoB14kB,KAIrCq3kB,EAAYh3mB,UAAUs8mB,YAAc,SAAU72mB,GAC1Cb,KAAK+zmB,sBACL/zmB,KAAKm4mB,gBAAgBt3mB,GACjBb,KAAK2ymB,kBACL3ymB,KAAKozmB,wBAGbhB,EAAYh3mB,UAAUw8mB,aAAe,WACjC,IAAI78kB,EAAO/6B,KAAK2zH,WAAa3zH,KAAK2zH,WAAWtyH,WACzCrB,KAAKjD,OAASiD,KAAKwxH,eAAexxH,KAAKjD,MAAOg+B,KAC9C/6B,KAAKjD,MAAQg+B,EACb/6B,KAAKk1mB,qBACa,cAAdl1mB,KAAKqgC,MAAsC,aAAdrgC,KAAKqgC,KAClCrgC,KAAK6zmB,sBAAsBnvmB,MAAMosC,QAAU,GAG3C9wC,KAAK+2mB,mBAET/2mB,KAAKo1mB,qBACDp1mB,KAAKjD,MAAMP,OACXwD,KAAKk2mB,mBAGLl2mB,KAAKo4mB,oBAGbp4mB,KAAKk0mB,oBAET9B,EAAYh3mB,UAAUwzmB,aAAe,SAAUruZ,EAAYoF,GACvD,IAAIkpZ,EAAgB7umB,KAAKgpG,KAAKrxC,aAC1Bm3iB,EAAavuZ,EAAWnsM,UAAYmsM,EAAW5oJ,aAAe33D,KAAKgpG,KAAK78F,UACxEokiB,EAAavwiB,KAAKgpG,KAAK78F,UAAY2imB,EAAaD,EAChDE,EAAYxuZ,EAAWnsM,UAAYmsM,EAAW5oJ,aAAe33D,KAAKgpG,KAAK78F,UAC3E4imB,EAAW/umB,KAAKwsB,OAAOurL,UAAY56M,EAAY6C,KAAK2lmB,oBAChDoJ,EAAW/umB,KAAK2lmB,mBAAmBhuiB,aAAeo3iB,EAClC,IAAhBppZ,EACA3lN,KAAKgpG,KAAK78F,UAAY,EAEjB2imB,EAAaD,EAClB7umB,KAAKgpG,KAAK78F,UAAYokiB,EAEfw+D,EAAW,GAAK/umB,KAAKgpG,KAAKrxC,aAAeo3iB,IAChD/umB,KAAKgpG,KAAK78F,UAAYokiB,IAG9B6hE,EAAYh3mB,UAAU+Q,UAAY,SAAUo0M,EAAYoF,GACpD,IAAI4qV,EAAahwV,EAAWnsM,UAAYpU,KAAKgpG,KAAK78F,UACjCo0M,EAAWnsM,UAAYmsM,EAAW5oJ,aAAe33D,KAAKgpG,KAAK78F,UAC5EokiB,EAAavwiB,KAAKwsB,OAAOurL,UAAY56M,EAAY6C,KAAK2lmB,oBAClDp1D,EAAavwiB,KAAK2lmB,mBAAmBhuiB,aAAe44e,EACxD,IAAIw+D,EAAYxuZ,EAAWnsM,UAAYmsM,EAAW5oJ,aAAe33D,KAAKgpG,KAAK78F,UACvD,IAAhBw5M,EACA3lN,KAAKgpG,KAAK78F,UAAY,EAEjBokiB,EAAa,EAClBvwiB,KAAKgpG,KAAK78F,UAAYnM,KAAKgpG,KAAK78F,UAAYokiB,EAErCw+D,EAAW,GAAK/umB,KAAKgpG,KAAKrxC,aAAeo3iB,IAChD/umB,KAAKgpG,KAAK78F,UAAYo0M,EAAWnsM,WAAapU,KAAKwsB,OAAOurL,UAAY56M,EAAY6C,KAAK2lmB,oBACnF3lmB,KAAK2lmB,mBAAmBhuiB,aAAe,KAGnDy6iB,EAAYh3mB,UAAU+8mB,gBAAkB,SAAUt3mB,GAC9C,IAAIo4I,EAAKj5I,KAAKgpG,KAAKrmG,cAAc,MAAQmgmB,GAAoB5gmB,OACzD0xH,EAAQ5zH,KAAKjD,OAASiD,KAAKjD,MAAMP,OAASwD,KAAKjD,MAAMP,OAAS,EACvD,OAAPy8I,IACIA,EAAGn1I,UAAUK,SAAS,cACtByvH,GAAgB,GAEhB5zH,KAAKs5J,UAAUrgB,IAAOrlB,EAAQ5zH,KAAKq4mB,yBACnCr4mB,KAAKs4mB,oBAAoBr/d,EAAIp4I,GAC7Bb,KAAKwzmB,aAAav6d,GACA,aAAdj5I,KAAKqgC,MACLrgC,KAAKy2mB,kBACLz2mB,KAAK22mB,oBACL32mB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,gBAG1Bj0mB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,eAE9Bj0mB,KAAKk0mB,mBACa,aAAdl0mB,KAAKqgC,MACLrgC,KAAKuzmB,iBAAiBt6d,EAAGh9H,aAE7Bjc,KAAK0tmB,gBAEL1tmB,KAAK4ymB,oBACL5ymB,KAAK2pmB,aAGb3pmB,KAAKo1mB,sBAEThD,EAAYh3mB,UAAUm4mB,iBAAmB,SAAUh3mB,GAC/C,IAAKyD,KAAKupmB,gBAAkBvpmB,KAAK0ymB,mBAAqB1ymB,KAAKszmB,UAAYtzmB,KAAKqjmB,SAAU,CAClF,IAAIr6f,OAAO,EAEPA,EADmB,eAAnBhpG,KAAKu2M,WAAiD,cAAnBv2M,KAAKu2M,UACjCv2M,KAAK43M,UAAUh2M,UAAY5B,KAAK43M,UAAUh2M,WAAU,GAAQ5B,KAAK43M,UAGjE53M,KAAKszmB,SAAS1xmB,UAAY5B,KAAKszmB,SAAS1xmB,WAAU,GAAQ5B,KAAKszmB,SAE1EtzmB,KAAKilmB,iBAAiBj8f,EAAMhpG,KAAKm0mB,UACjCn0mB,KAAKyzmB,oBAAoBl3mB,GACrByD,KAAKjD,OAASiD,KAAKjD,MAAMP,QACzBwD,KAAKo0mB,qBAIjBhC,EAAYh3mB,UAAU88mB,mBAAqB,SAAUr3mB,GACjD,IACIk6B,EADAw9kB,EAAev4mB,KAAK6zmB,sBAAsBlxmB,cAAc,QAAUqvmB,IAEjD,OAAjBuG,IACK96mB,EAAkBuC,KAAKjD,SACxBiD,KAAK2zH,WAAa3zH,KAAKjD,MAAMsE,SAGpB,QADb05B,EAAOw9kB,EAAaxxf,sBAEhB/mH,KAAK+zmB,sBACL/zmB,KAAKw4mB,iBAAiBz9kB,EAAMl6B,IAEhCb,KAAK8zmB,YAAYyE,EAAa1lmB,aAAa,cAAehS,GAC1Db,KAAKk0mB,oBAELl0mB,KAAK4ymB,oBACL5ymB,KAAK2pmB,aAGbyI,EAAYh3mB,UAAUq9mB,UAAY,SAAUhtjB,GACxC,IACI35C,EADAlO,EAAW5D,KAAKgpG,KAAKxnG,iBAAiB,MAAQshmB,GAAoB7pd,IAElEr1I,EAASpH,OAAS,IAClBwD,KAAKyrJ,cACL35I,EAAQ25C,EAAQ,EAAK7nD,EAASpH,OAAS,EACvCwD,KAAKwzmB,aAAa5vmB,EAASkO,IAC3B9R,KAAK4umB,aAAahrmB,EAASkO,GAAQA,IAEvC9R,KAAKu3mB,uBAETnF,EAAYh3mB,UAAU28mB,WAAa,SAAU7jmB,GACzC,GAAIlU,KAAKgpG,KAAM,CACX,IAAIplG,EAAW5D,KAAKgpG,KAAKxnG,iBAAiB,MACpCshmB,GAAoB7pd,GACpB,SAAW44d,GAAY,0BACzB0G,EAAev4mB,KAAKgpG,KAAKrmG,cAAc,MAAQmgmB,GAAoB5gmB,OACnE64B,GAAQ,EACZ,GAAIn3B,EAASpH,OAAQ,CACjB,IAAK,IAAIsV,EAAQ,EAAGA,EAAQlO,EAASpH,OAAQsV,IACzC,GAAIlO,EAASkO,KAAWymmB,EAAc,CAClCx9kB,EAAOjpB,EACP,MAGJoC,EAAW,EACP6mB,EAAQn3B,EAASpH,OAAS,IAC1BwD,KAAKyrJ,cACLzrJ,KAAKwzmB,aAAa5vmB,IAAWm3B,IAC7B/6B,KAAK4umB,aAAahrmB,EAASm3B,GAAOA,IAIlCA,EAAO,IACP/6B,KAAKyrJ,cACLzrJ,KAAKwzmB,aAAa5vmB,IAAWm3B,IAC7B/6B,KAAKmM,UAAUvI,EAASm3B,GAAOA,OAMnDq3kB,EAAYh3mB,UAAU68mB,OAAS,SAAU/jmB,EAAUrT,GAC/C,IAAI+C,EACA20mB,EACAx9kB,EACJn3B,EAAW5D,KAAK6zmB,sBAAsBrymB,iBAAiB,gBAElC,QADrB+2mB,EAAev4mB,KAAK6zmB,sBAAsBlxmB,cAAc,QAAUqvmB,KAE1D99lB,EAAW,GACXlU,KAAKw4mB,iBAAiB50mB,EAASA,EAASpH,OAAS,GAAIqE,GAIrDqT,EAAW,EAEE,QADb6mB,EAAOw9kB,EAAat1Z,0BAEhBjjN,KAAK+zmB,sBACL/zmB,KAAKw4mB,iBAAiBz9kB,EAAMl6B,KAIhCk6B,EAAOw9kB,EAAaxxf,mBACpB/mH,KAAK+zmB,sBACQ,OAATh5kB,GACA/6B,KAAKw4mB,iBAAiBz9kB,EAAMl6B,KAK5CuxmB,EAAYh3mB,UAAUs9mB,UAAY,SAAU73mB,GACxC,GAAIb,KAAKolB,QAAS,CACd,IAAI1iB,EAAOmD,EAAQhF,EAAEsG,OAAQ,YAC7BnH,KAAK+zmB,sBACL/zmB,KAAKw4mB,iBAAiB91mB,EAAM7B,KAGpCuxmB,EAAYh3mB,UAAU24mB,oBAAsB,WACpC/zmB,KAAK6zmB,uBACL7zmB,KAAK02mB,mBAGbtE,EAAYh3mB,UAAUo9mB,iBAAmB,SAAUx3mB,EAASH,GACxD8C,GAAU3C,GAAUgxmB,IACpBhymB,KAAK2mB,QAAQ,gBAAiB9lB,IAElCuxmB,EAAYh3mB,UAAUu9mB,aAAe,SAAU93mB,GAC3C,GAAgB,IAAZA,EAAE08G,OAA4B,IAAb18G,EAAE6lI,QAGnB1mI,KAAKolB,UAAYplB,KAAKw8E,SAAU,CAChC,IAAIx7E,EAAUH,EAAEsG,OAAOkN,cACnBtX,EAAQiD,KAAK44N,kBAAkB53N,EAAQ6R,aAAa,eAQxD,GAPI7S,KAAKomK,eAA+B,aAAdpmK,KAAKqgC,MAC3BrgC,KAAK2pmB,YAEJ3pmB,KAAKknmB,YACNlnmB,KAAKkhE,aAAah/D,QAEtBlC,KAAK8zmB,YAAY/2mB,EAAO8D,GACpBpD,EAAkBuC,KAAKgpG,KAAKrmG,cAAc,kBAAoB5F,EAAQ,QAAUiD,KAAKszmB,UAAYtzmB,KAAKqjmB,SAAU,CAChH,IAAIr6f,EAAOhpG,KAAKszmB,SAAS1xmB,UAAY5B,KAAKszmB,SAAS1xmB,WAAU,GAAQ5B,KAAKszmB,SAC1EtzmB,KAAKilmB,iBAAiBj8f,EAAMhpG,KAAKm0mB,UAErCn0mB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,eAC1Bj0mB,KAAKk0mB,mBACLrzmB,EAAE8kB,mBAGVyslB,EAAYh3mB,UAAU84mB,iBAAmB,WACrCl0mB,KAAKkhE,aAAankE,MAAQ,GAC1BiD,KAAKo1mB,sBAEThD,EAAYh3mB,UAAUg6mB,mBAAqB,WACnCp1mB,KAAKinB,aAAuC,UAAxBjnB,KAAKknB,eACrBlnB,KAAKjD,OAASiD,KAAKjD,MAAMP,OACzBwD,KAAKkhE,aAAaj6C,YAAc,GAGhCjnB,KAAKkhE,aAAaj6C,YAAcjnB,KAAKinB,YAIzCjnB,KAAK44mB,oBAET54mB,KAAKi2mB,iBAET7D,EAAYh3mB,UAAU04mB,YAAc,SAAU/2mB,EAAOs0H,EAAK70H,GACtD,IAAIsV,EAAQ9R,KAAKjD,MAAMwB,QAAQyB,KAAK44N,kBAAkB77N,IAClDsG,EAAYrD,KAAK2ymB,iBACjBd,GACA/O,GAAoB9hd,SACxB,IAAe,IAAXlvI,EAAc,CACd,IAAI9Q,EAAUhB,KAAKgpG,KAAKrmG,cAAc,kBAAoB5F,EAAQ,MAC9DwrB,EAAMvoB,KAAKgnmB,eAAejqmB,GAC1BwQ,GACA1M,EAAGwwH,EACHpzG,KAAMjd,EACNs/D,SAAU/3C,EACVmsG,eAAcrD,EACdz3F,QAAQ,GAGZ,GADA55B,KAAK2mB,QAAQ,WAAYpZ,GACrBA,EAAUqsB,OACV,OAIJ,GAFA55B,KAAKjD,MAAM4rB,OAAO7W,EAAO,GACzB9R,KAAKgH,eAAgBjK,SAAUyd,UAAWxa,KAAKjD,SAAU,GACzC,OAAZiE,EAAkB,CAClB,IAAI63mB,EAAc74mB,KAAKszmB,SAAS3wmB,cAAc,kBAAoB5F,EAAQ,MAC1EiE,EAAQwC,aAAa,gBAAiB,SACtCq1mB,EAAYr1mB,aAAa,gBAAiB,SAC1Ca,GAAarD,EAAS63mB,GAAcx1mB,GACpCrD,KAAK+N,OAAO,cACRupF,OAAQ,oBACRr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqB44G,GAAIj4I,EACtCH,EAAGb,KAAM8R,MAAOA,IAEpB9R,KAAK+N,OAAO,cAAgBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqB44G,GAAIj4I,EAASH,EAAGwwH,IAC3G3tH,EAAW1D,KAAKkhE,cAAgB2pD,wBAAyB7pH,EAAQsC,KAC5DtD,KAAKjD,MAAMP,SAAWwD,KAAKm0mB,SAAS33mB,QAA0B,aAAdwD,KAAKqgC,MAAuBrgC,KAAKy0mB,eAClFz0mB,KAAK+N,OAAO,kBAAoBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqBtjC,MAAO,YAG1GiD,KAAK2ymB,kBAAoB3ymB,KAAKwsB,OAAOurL,SACrC/3M,KAAKs1mB,cAAcv4mB,GAEvBiD,KAAK84mB,gBAAe,EAAM/7mB,GAC1BiD,KAAK+4mB,WAAWh8mB,GAChBiD,KAAKg5mB,mBAEL,IADYh5mB,KAAKjD,OAASiD,KAAKjD,MAAMP,OAASwD,KAAKjD,MAAMP,OAAS,GACtDwD,KAAKq4mB,uBAAwB,CAGrCh0mB,EAFiBrE,KAAKgpG,KAAKxnG,iBAAiB,MACtCshmB,GAAoB7pd,GAAK,mBACP,aAO5B,GALAj5I,KAAK2mB,QAAQ,UAAWpZ,GACpB/Q,IACAwD,KAAKqymB,mBAAmB7tmB,KAAK+jB,GAC7BvoB,KAAKsymB,kBAAkB9tmB,KAAKxD,IAEjB,IAAXxE,EAAc,CACd,IAAIyD,GACA5D,MAAOg1H,EACP3xD,MAAO1/D,KAAKsymB,kBACZhyiB,SAAUtgE,KAAKqymB,mBACf39e,eAAcrD,EACdymF,WAAW,GAEf93M,KAAK2mB,QAAQ,cAAe1mB,GAC5BD,KAAKqymB,sBACLrymB,KAAKsymB,wBAIjBF,EAAYh3mB,UAAU09mB,eAAiB,SAAUrtjB,EAAO1uD,GACpD,GAAIiD,KAAKupmB,eAAgB,CACrB,IAAI0P,EAAWj5mB,KAAKszmB,SAAS3wmB,cAAc,kBAAoB5F,EAAQ,MACnEk8mB,IACIxtjB,GACAwtjB,EAASz1mB,aAAa,gBAAiB,SACvCa,GAAa40mB,GAAWj5mB,KAAK2ymB,iBACzBd,GACA/O,GAAoB9hd,UACN,aAAdhhJ,KAAKqgC,OACL44kB,EAAS9zmB,kBAAkB3B,aAAa,eAAgB,SACxDa,GAAa40mB,EAAS9zmB,kBAAkBw0I,kBAAmB,cAI/Ds/d,EAASz1mB,aAAa,gBAAiB,QACvCG,GAAUs1mB,GAAWj5mB,KAAK2ymB,iBACtBd,GACA/O,GAAoB9hd,UACN,aAAdhhJ,KAAKqgC,OACL44kB,EAAS9zmB,kBAAkB3B,aAAa,eAAgB,QACxDG,GAAUs1mB,EAAS9zmB,kBAAkBw0I,kBAAmB,gBAM5Ey4d,EAAYh3mB,UAAU29mB,WAAa,SAAUh8mB,GACzC,GAAIiD,KAAK6zmB,sBAAuB,CAC5B,IAAI7ymB,EAAUhB,KAAK6zmB,sBAAsBlxmB,cAAc,oBAAsB5F,EAAQ,MACjFiE,GACAuD,EAAOvD,KAInBoxmB,EAAYh3mB,UAAU49mB,iBAAmB,WACjCh5mB,KAAKjD,MAAMP,QACNiB,EAAkBuC,KAAK6zmB,yBACvB7zmB,KAAK6zmB,sBAAsBnvmB,MAAMosC,QAAU,IAE9B,cAAd9wC,KAAKqgC,MAAsC,aAAdrgC,KAAKqgC,MAClCrgC,KAAK+2mB,mBAET/2mB,KAAKk2mB,qBAGAz4mB,EAAkBuC,KAAK6zmB,yBACxB7zmB,KAAK6zmB,sBAAsBnvmB,MAAMosC,QAAU,QAE1CrzC,EAAkBuC,KAAKk3mB,oBACvBl3mB,KAAKk3mB,iBAAiBxymB,MAAMosC,QAAU,QAE3C9wC,KAAKo4mB,qBAGbhG,EAAYh3mB,UAAU8zE,SAAW,SAAUnyE,EAAOiyB,EAAMqiG,GAC/CrxH,KAAKjD,QACNiD,KAAKjD,UAETiD,KAAKgH,eAAgBjK,SAAUyd,UAAWxa,KAAKjD,OAAQA,MAAW,GAClE,IAAIiE,EAAUhB,KAAKgpG,KAAKrmG,cAAc,kBAAoB5F,EAAQ,MAClEiD,KAAKyrJ,cACDzqJ,IACAhB,KAAKwzmB,aAAaxymB,GAClBhB,KAAKk5mB,iBAAiBl4mB,IAER,cAAdhB,KAAKqgC,MAAsC,aAAdrgC,KAAKqgC,MAClCrgC,KAAKm5mB,QAAQnqlB,EAAMjyB,EAAOs0H,GAE1BrxH,KAAK2ymB,kBAAoB3ymB,KAAKwsB,OAAOurL,SACrC/3M,KAAKs1mB,cAAcv4mB,GAEvBiD,KAAKg5mB,mBACLh5mB,KAAKy1mB,qBAETrD,EAAYh3mB,UAAUq6mB,kBAAoB,WAEtC,IADYz1mB,KAAKjD,OAASiD,KAAKjD,MAAMP,OAASwD,KAAKjD,MAAMP,OAAS,KACpDwD,KAAKq4mB,uBAAwB,CAGvC10mB,EAFiB3D,KAAKgpG,KAAKxnG,iBAAiB,MACtCshmB,GAAoB7pd,GAAK,mBACV,eAG7Bm5d,EAAYh3mB,UAAUg+mB,eAAiB,SAAUr8mB,EAAOs0H,EAAKrwH,EAASq4mB,EAAc78mB,GAChF,GAAIwD,KAAK62mB,aAAewC,EAAc,CAClC,IAAI9wlB,EAAMvoB,KAAKgnmB,eAAejqmB,GAC1BwQ,GACA1M,EAAGwwH,EACHpzG,KAAMjd,EACNs/D,SAAU/3C,EACVmsG,eAAcrD,EACdz3F,QAAQ,GAGZ,GADA55B,KAAK2mB,QAAQ,SAAUpZ,GACnBA,EAAUqsB,OACV,OAAO,EAMX,GAJIp9B,IACAwD,KAAKqymB,mBAAmB7tmB,KAAK+jB,GAC7BvoB,KAAKsymB,kBAAkB9tmB,KAAKxD,IAEjB,IAAXxE,EAAc,CACd,IAAIyD,GACA5D,MAAOg1H,EACP3xD,MAAO1/D,KAAKsymB,kBACZhyiB,SAAUtgE,KAAKqymB,mBACf39e,eAAcrD,EACdymF,WAAW,GAEf93M,KAAK2mB,QAAQ,cAAe1mB,GAC5BD,KAAKqymB,uBAGb,OAAO,GAEXD,EAAYh3mB,UAAU+9mB,QAAU,SAAUnqlB,EAAMjyB,EAAO8D,GACnD,GAAIb,KAAK6zmB,sBAAuB,CAC5B,IAAI51lB,EAAOje,KAAKs5mB,QAAQtqlB,EAAMjyB,EAAO8D,GACrC,GAAIod,EAAK2b,OACL,OAEJ55B,KAAK6zmB,sBAAsBlymB,YAAYsc,EAAKjd,WAGpDoxmB,EAAYh3mB,UAAUs7mB,gBAAkB,WACpC,IAAI9ymB,EACA21mB,EAIJ,GAHA31mB,EAAW5D,KAAK6zmB,sBAAsBrymB,iBAAiB,gBACvD+3mB,EAAgBv5mB,KAAK6zmB,sBAAsBrymB,iBAAiB,QAAUuwmB,GAAW70mB,MAAM,KAAK,IAC5FmH,EAAYT,EAAUoumB,IAClBxmmB,GAAQqb,SACR,IAAK,IAAI/U,EAAQ,EAAGA,EAAQynmB,EAAc/8mB,OAAQsV,IAC9CynmB,EAAcznmB,GAAOpN,MAAMosC,QAAU,QAIjDshkB,EAAYh3mB,UAAUo+mB,wBAA0B,SAAU34mB,GACtD,IAAI44mB,EAAW5zmB,EAAQhF,EAAEsG,OAAQ,YAC7BuymB,EAAYD,EAAS92mB,cAAc,QAAUovmB,GAAW70mB,MAAM,KAAK,IACnE8C,KAAKolB,UAAYplB,KAAKw8E,WACjBi9hB,EAAS31mB,UAAUK,SAAS6tmB,MAC7BhymB,KAAK02mB,kBACLgD,EAAUh1mB,MAAMosC,QAAU,GAC1B2okB,EAAS31mB,UAAUM,IAAI4tmB,KAE3BhymB,KAAK0tmB,eACL7smB,EAAE8kB,mBAGVyslB,EAAYh3mB,UAAUk+mB,QAAU,SAAU/8mB,EAAMQ,EAAO8D,GACnD,IAAIy/D,GAAatxC,KAAMjyB,EAAOA,MAAOA,GACjC48mB,EAAO35mB,KAAKmB,cAAc,QAC1BkC,UAAWyumB,GACXrumB,OAASm2mB,aAAc78mB,EAAO2lC,MAASnmC,KAEvCs9mB,EAAc75mB,KAAKmB,cAAc,QAAUkC,UA9+CpC,kBA++CPq2mB,EAAY15mB,KAAKmB,cAAc,QAAUkC,UAAW0umB,KAIxD,GAHI/xmB,KAAKm0mB,WACL7ziB,EAAWtgE,KAAKgnmB,eAAejqmB,IAE/BiD,KAAKgsmB,gBAAkBvumB,EAAkB6iE,GAEzC,IAAK,IAAIliE,EAAK,EAAGyE,EADImM,GAAQhP,KAAKgsmB,cACZ/xiB,CAAeqG,GAAWliE,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAClE,IAAI6f,EAAOpb,EAAGzE,GACdy7mB,EAAYl4mB,YAAYsc,QAI5B47lB,EAAY73mB,UAAYzF,EAE5Bo9mB,EAAKh4mB,YAAYk4mB,GACjB,IAAItsmB,GACAmnH,eAAc7zH,EACdy/D,SAAUA,EACVz/D,EAAGA,EACHi5mB,SAAU,SAAUj2mB,GAChBF,GAAUg2mB,GAAO91mB,IAErB+1B,QAAQ,GAGZ,OADA55B,KAAK2mB,QAAQ,UAAWpZ,GACpBA,EAAUqsB,QACDA,QAAQ,EAAM54B,QAAS24mB,IAEhCnumB,GAAQqb,UACR8ylB,EAAK71mB,UAAUM,IA//CT,cAggDNgB,GAAQs0mB,GAAYC,GACpBD,EAAUh1mB,MAAMosC,QAAU,OAC1BvrC,GAAanB,IAAIu1mB,EAAM,QAAS35mB,KAAKw5mB,wBAAyBx5mB,QAG9DuF,GAAanB,IAAIu1mB,EAAM,YAAa35mB,KAAK04mB,UAAW14mB,MAChDA,KAAKulB,iBACLo0lB,EAAKh4mB,YAAY+3mB,IAGzBn0mB,GAAanB,IAAIs1mB,EAAW,YAAa15mB,KAAK24mB,aAAc34mB,OACnD45B,QAAQ,EAAO54B,QAAS24mB,KAErCvH,EAAYh3mB,UAAUi8mB,eAAiB,WACnC,IAAIrhmB,EAAQzT,EAAWvC,KAAK61N,YAC5B,GAAI7/M,EAAMzX,QAAQ,MAAQ,EAAG,CAEzByX,GADkBhW,KAAKizmB,iBAA4B,YAAIr3lB,WAAW5F,GAAS,KACxD9I,WAAa,KAEpC,OAAO8I,GAEXo8lB,EAAYh3mB,UAAU2+mB,QAAU,WACxB/5mB,KAAKolB,UAAYplB,KAAKw8E,UACtBx8E,KAAKk2mB,oBAGb9D,EAAYh3mB,UAAU4+mB,SAAW,WACxBh6mB,KAAKknmB,aACNlnmB,KAAKgzmB,aAAatumB,MAAMosC,QAAU,SAG1CshkB,EAAYh3mB,UAAUoqmB,WAAa,SAAUn9hB,EAAY77C,GACrD,IAAIotD,GAAUn8E,EAAkB+uB,EAAOotD,SACnCqgiB,EAAgBztlB,EAAOvpB,WAQ3B,OAPAjD,KAAKk6mB,mBAAsC,OAAhB1tlB,EAAOwC,MAAkC,OAAjBxC,EAAOzvB,OACtDyvB,OAAQytlB,EAAe9hd,SAAUv+E,EAASs7H,gBAAkBkC,cAAe,kBACzE5qL,QAAUzvB,MAAO,SACvB2B,EAAOsB,KAAKk6mB,mBAAoBl6mB,KAAKk6mB,mBAAoB1tlB,GAAQ,GAC/C,aAAdxsB,KAAKqgC,MACLrgC,KAAK+N,OAAO,cAAgBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqBgoC,WAAYA,EAAY4xiB,cAAeA,IAE/Hj6mB,KAAKk6mB,oBAEhB9H,EAAYh3mB,UAAU+kI,YAAc,WAChC,IAAIpgI,EAAQC,KAIZ,GAHKA,KAAKgpG,MACN1X,EAAOl2F,UAAUg3G,OAAO9wG,KAAKtB,OAE5BA,KAAKm7H,SAAU,CAChB,IAAIl7H,GAAS25B,QAAQ,GAErB,GADA55B,KAAK2mB,QAAQ,aAAc1mB,GACvBA,EAAK25B,OACL,OAEJp5B,SAASuL,KAAKpK,YAAY3B,KAAKknK,cAC/B,IAAIizc,EAAgBvllB,SAAS50B,KAAKg6N,YAAa,IA6B/C,GA5BAh6N,KAAKknK,aAAaxiK,MAAMC,WAAa,SACjC3E,KAAKg4M,iBACLh4M,KAAK4tmB,oBACLuM,GAAiBn6mB,KAAK8qF,OAAOnzB,cAEjCvyD,GAAQpF,KAAKgpG,MAAOhpG,KAAKknK,cACrBlnK,KAAK26H,iBACL36H,KAAK66H,oBACLs/e,GAAiBn6mB,KAAKisH,OAAOt0D,cAEf,aAAd33D,KAAKqgC,MAAuBrgC,KAAKy0mB,eACjCz0mB,KAAK+N,OAAO,aAAeupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,OACrE85kB,GAAiBn6mB,KAAKo6mB,iBAEH,aAAdp6mB,KAAKqgC,MAAwBrgC,KAAKy0mB,eAAmBz0mB,KAAKg4M,gBAAmBh4M,KAAK26H,eAIpE,aAAd36H,KAAKqgC,MAAwBrgC,KAAKy0mB,gBACvCz0mB,KAAK+N,OAAO,aAAeupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,OACrE85kB,EAAgBvllB,SAAS50B,KAAKg6N,YAAa,IACvCh6N,KAAKg4M,gBAAkBh4M,KAAK8qF,SAC5BqvhB,GAAiBn6mB,KAAK8qF,OAAOnzB,cAE7B33D,KAAK26H,gBAAkB36H,KAAKisH,SAC5Bkuf,GAAiBn6mB,KAAKisH,OAAOt0D,gBAVjC33D,KAAK+N,OAAO,aAAeupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,OACrE85kB,EAAgBvllB,SAAS50B,KAAKg6N,YAAa,KAY7B,aAAdh6N,KAAKqgC,KAAqB,CAC1B,IAAIi8H,GACAhlE,OAAQ,oBACRr1D,OAAsB,aAAdjiC,KAAKqgC,KACbu4H,aAAc54J,KAAKknK,cAEvBlnK,KAAK+N,OAAO,YAAauuJ,GACzB69c,GAAiBn6mB,KAAK6tmB,gBACtBlqmB,GAAU3D,KAAKknK,cAAe,cAET,SAArBlnK,KAAKg6N,aACLh6N,KAAKgpG,KAAKtkG,MAAMsrD,UAAYztD,EAAW43mB,GACvCn6mB,KAAKknK,aAAaxiK,MAAMsrD,UAAYztD,EAAWvC,KAAKg6N,cAGpDh6N,KAAKgpG,KAAKtkG,MAAMsrD,UAAYztD,EAAWvC,KAAKg6N,aAEhDh6N,KAAKm7H,SAAW,IAAItG,GAAM70H,KAAKknK,cAC3BlxJ,MAAOhW,KAAKq3mB,iBAAkBpgf,WAAY,WAAY/iH,UAAYkC,EAAG,OAAQC,EAAG,UAChFo/G,SAAUz1H,KAAKghE,eAAgBy1D,WAAargH,EAAG,OAAQC,EAAG,QAAUpK,QAAS,EAC7EiH,UAAWlT,KAAKkT,UAChBq0D,OAAQvnE,KAAKunE,OACbtlE,MAAO,WACClC,EAAMo7H,SAASn6H,QAAQqT,eACvBhP,EAAOtF,EAAMo7H,SAASn6H,UAG9BU,KAAM,WACF3B,EAAMgO,OAAO,cAAgBupF,OAAQ,oBAAqBr1D,OAAuB,aAAfliC,EAAMsgC,KAAqBtjC,MAAO,aAG5GiD,KAAKm7H,SAASl5H,QACdjC,KAAKknK,aAAaxiK,MAAMC,WAAa,GACnB,aAAd3E,KAAKqgC,MAAuB70B,GAAQqb,UACpC7mB,KAAK+N,OAAO,mBAAqBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,SAIvF+xkB,EAAYh3mB,UAAUwymB,kBAAoB,WAElC5tmB,KAAK8qF,QACL9qF,KAAK8qF,OAAOvmF,SAEhBvE,KAAK8qF,OAAS9qF,KAAKmB,cAAc,OACjCwC,GAAU3D,KAAK8qF,QA9nDV,gBAioDL,IAAK,IADDlnF,EADaoL,GAAQhP,KAAKg4M,eACf/9I,KACNl/B,EAAO,EAAGA,EAAOn3B,EAASpH,OAAQu+B,IACvC/6B,KAAK8qF,OAAOnpF,YAAYiC,EAASm3B,IAEnB,aAAd/6B,KAAKqgC,MAAuBrgC,KAAKy0mB,cACjC5vmB,GAAS7E,KAAK8qF,QAAS9qF,KAAKknK,cAG5B9hK,GAAQpF,KAAK8qF,QAAS9qF,KAAKknK,cAE/B3hK,GAAanB,IAAIpE,KAAK8qF,OAAQ,YAAa9qF,KAAKq6mB,gBAAiBr6mB,OAErEoymB,EAAYh3mB,UAAUy/H,kBAAoB,WAElC76H,KAAKisH,QACLjsH,KAAKisH,OAAO1nH,SAEhBvE,KAAKisH,OAASjsH,KAAKmB,cAAc,OACjCwC,GAAU3D,KAAKisH,QAnpDV,gBAspDL,IAAK,IADDroH,EADaoL,GAAQhP,KAAK26H,eACf1gE,KACNl/B,EAAO,EAAGA,EAAOn3B,EAASpH,OAAQu+B,IACvC/6B,KAAKisH,OAAOtqH,YAAYiC,EAASm3B,IAErC31B,GAAQpF,KAAKisH,QAASjsH,KAAKknK,cAC3B3hK,GAAanB,IAAIpE,KAAKisH,OAAQ,YAAajsH,KAAKq6mB,gBAAiBr6mB,OAErEoymB,EAAYh3mB,UAAUk/mB,SAAW,SAAUz5mB,GACvC,GAAIb,KAAKolB,UAAYplB,KAAKw8E,SAAU,CAChC,IAAIzhD,OAAO,EACP44F,EAAa3zH,KAAKjD,MAAQiD,KAAKjD,MAAMsE,WACzC,GAAIrB,KAAKjD,MACL,IAAKg+B,EAAO/6B,KAAKjD,MAAM,GAA0B,IAAtBiD,KAAKjD,MAAMP,OAAcu+B,EAAO/6B,KAAKjD,MAAM,GAClEiD,KAAK8zmB,YAAY/4kB,EAAMl6B,GAG/B,GAAIb,KAAKszmB,UAAYtzmB,KAAKqjmB,UAAYrjmB,KAAKupmB,eAAgB,CACvD,IAAIvggB,EAAOhpG,KAAKszmB,SAAS1xmB,UAAY5B,KAAKszmB,SAAS1xmB,WAAU,GAAQ5B,KAAKszmB,SAC1EtzmB,KAAKilmB,iBAAiBj8f,EAAMhpG,KAAKm0mB,UAErCn0mB,KAAKozmB,uBACLpzmB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,eACR,QAAdj0mB,KAAKqgC,MACLrgC,KAAKy2mB,kBAETz2mB,KAAKk0mB,mBACDl0mB,KAAKomK,eACLpmK,KAAK0tmB,eAEJ1tmB,KAAKknmB,aACNlnmB,KAAKq1mB,iBAAiBx0mB,EAAGb,KAAKjD,MAAO42H,GACnB,aAAd3zH,KAAKqgC,MACLrgC,KAAKkhE,aAAah/D,SAGR,aAAdlC,KAAKqgC,OACLrgC,KAAKo1mB,qBACLp1mB,KAAK22mB,qBAET91mB,EAAE8kB,mBAGVyslB,EAAYh3mB,UAAUmyb,aAAe,WACjCvtb,KAAK0tmB,gBACA1tmB,KAAKknmB,YAAclnmB,KAAKg3mB,aAAeh3mB,KAAKg3mB,YAAY3imB,eACzDrU,KAAKy2mB,mBAGbrE,EAAYh3mB,UAAUmvmB,kBAAoB,SAAU1pmB,GAChD,IAAI4iJ,EAAc59I,EAAQ7F,KAAKkhE,aAAc,QACzCuiF,GAAe5iJ,EAAEsG,SAAWs8I,IAC5BzjJ,KAAKjD,MAAQ,OAGrBq1mB,EAAYh3mB,UAAU+iiB,UAAY,WAC9B54hB,GAAanB,IAAIpE,KAAKizmB,iBAAkB,YAAajzmB,KAAKw2mB,aAAcx2mB,MACxEuF,GAAanB,IAAIxI,OAAQ,SAAUoE,KAAKutb,aAAcvtb,MACtDuF,GAAanB,IAAIpE,KAAKkhE,aAAc,QAASlhE,KAAKqsI,QAASrsI,MAC3DuF,GAAanB,IAAIpE,KAAKkhE,aAAc,UAAWlhE,KAAK22jB,UAAW32jB,MAC/DuF,GAAanB,IAAIpE,KAAKkhE,aAAc,QAASlhE,KAAKg2mB,MAAOh2mB,MACvC,aAAdA,KAAKqgC,MACL96B,GAAanB,IAAIpE,KAAKkhE,aAAc,QAASlhE,KAAKutmB,QAASvtmB,MAE/DuF,GAAanB,IAAIpE,KAAKkhE,aAAc,OAAQlhE,KAAKmqmB,OAAQnqmB,MACzDuF,GAAanB,IAAIpE,KAAKizmB,iBAAkB,YAAajzmB,KAAK+5mB,QAAS/5mB,MACnE,IAAIyjJ,EAAc59I,EAAQ7F,KAAKkhE,aAAc,QACzCuiF,GACAl+I,GAAanB,IAAIq/I,EAAa,QAASzjJ,KAAKuqmB,kBAAmBvqmB,MAEnEuF,GAAanB,IAAIpE,KAAKizmB,iBAAkB,WAAYjzmB,KAAKg6mB,SAAUh6mB,MACnEuF,GAAanB,IAAIpE,KAAKgzmB,aAAc,UAAWhzmB,KAAKs6mB,SAAUt6mB,OAElEoymB,EAAYh3mB,UAAUmymB,QAAU,WACxBvtmB,KAAKwymB,cACLxymB,KAAKsomB,YAAa,EAGlBtomB,KAAKsomB,YAAa,EAEtBtomB,KAAKwymB,eAAgB,GAEzBJ,EAAYh3mB,UAAUqX,UAAY,WAC9BzS,KAAK8nmB,iBACLx2gB,EAAOl2F,UAAUqX,UAAUnR,KAAKtB,OAEpCoymB,EAAYh3mB,UAAU0smB,eAAiB,WACnC9nmB,KAAK00mB,sBACL10mB,KAAKiomB,iBAAkB,EACvBjomB,KAAKuxmB,cAAe,EACpBvxmB,KAAKo2mB,oBAAqB,EAC1Bp2mB,KAAKqzmB,cAAe,EACpBrzmB,KAAKo3mB,WAAY,EACjBp3mB,KAAKkxmB,YAAa,EAClBlxmB,KAAK65M,SAAU,EACf75M,KAAK4mI,SAAU,EACf5mI,KAAKs2mB,aAAc,GAEvBlE,EAAYh3mB,UAAUormB,WAAa,SAAUyN,GACzC,IAGIl5kB,EAHAx+B,EAAO,GACPg+mB,EAAsB,cAAdv6mB,KAAKqgC,MAAsC,aAAdrgC,KAAKqgC,KAC1CrR,KAEAqzL,EAAWriN,KAAKqjmB,SAGpB,GAFArjmB,KAAKqjmB,SAAWrjmB,KAAKm0mB,SACrBn0mB,KAAK4nmB,cAAc5lmB,UAAY,IAC1BvE,EAAkBuC,KAAKjD,OACxB,IAAK,IAAI+U,EAAQ,GAAIrU,EAAkBuC,KAAKjD,MAAM+U,IAASA,IAOvDvV,IALIw+B,EADA/6B,KAAKqjmB,SACErjmB,KAAKqkmB,eAAerkmB,KAAKjD,MAAM+U,IAG/B9R,KAAKjD,MAAM+U,IAEPmimB,EAAgB,IAC/BjllB,EAAKxqB,KAAKu2B,GACV/6B,KAAK4nmB,cAAc5lmB,WAAa,4BAA8BhC,KAAKjD,MAAM+U,GAAS,KAAOA,EAAQ,YAGzG9R,KAAKgvB,KAAOA,EAAK9hB,WACbqtmB,IACAv6mB,KAAKk3mB,iBAAiBl1mB,UAAYzF,GAEtCyD,KAAKqjmB,SAAWhhZ,GAEpB+vZ,EAAYh3mB,UAAU85mB,mBAAqB,WACvC,GAAIl1mB,KAAKgpG,KAAM,CACX,IAAIh6E,OAAO,EAGPhuB,OAAU,EACVjE,OAAQ,EAKZ,GAJIiD,KAAK6zmB,wBACL7zmB,KAAK6zmB,sBAAsB7xmB,UAAY,IAE3ChC,KAAKq1N,uBACA53N,EAAkBuC,KAAKjD,OACxB,IAAK,IAAI+U,EAAQ,GAAIrU,EAAkBuC,KAAKjD,MAAM+U,IAASA,IAKvD,GAJA/U,EAAQiD,KAAKjD,MAAM+U,GACnB9Q,EAAUhB,KAAK2ymB,iBAAmB3ymB,KAAK43M,UAAUj1M,cAAc,kBAAoB5F,EAAQ,MACrFiD,KAAKgpG,KAAKrmG,cAAc,kBAAoB5F,EAAQ,MAC1DiyB,EAAOhvB,KAAKqkmB,eAAetnmB,GACtBiE,GAAsD,SAA1CA,EAAQ6R,aAAa,kBACjC7R,GAAsD,SAA1CA,EAAQ6R,aAAa,kBAA+B7S,KAAK2ymB,mBACnD,QAAd3ymB,KAAKqgC,MAAgC,YAAdrgC,KAAKqgC,MACjCrgC,KAAKm5mB,QAAQnqlB,EAAMjyB,GACnBiD,KAAKk5mB,iBAAiBl4mB,QAErB,GAAIjE,GAASiD,KAAK0ymB,iBAAkB,CACrC,IAAI8H,EAAYx6mB,KAAKqjmB,SAAS7mmB,OAC1B8K,KACJlK,EAAS4C,KAAKwsB,OAAOwC,KAAMjyB,EAAOuK,GAClClK,EAAS4C,KAAKwsB,OAAOzvB,MAAOA,EAAOuK,GACnCtH,KAAK6iN,QAAQv7M,EAAUkzmB,GACvBx6mB,KAAKm5mB,QAAQnqlB,EAAMjyB,GACnBiD,KAAKk5mB,iBAAiBl4mB,GAIhB,aAAdhB,KAAKqgC,MACLrgC,KAAKy2mB,kBACLz2mB,KAAKq1mB,iBAAiB,KAAMr1mB,KAAKjD,MAAOiD,KAAK2zH,YAC7C3zH,KAAK22mB,oBACL32mB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,gBAG1Bj0mB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,eAEZ,aAAdj0mB,KAAKqgC,MAAuBrgC,KAAKy0mB,eAAiBh3mB,EAAkBuC,KAAKjD,QACzEiD,KAAK+N,OAAO,kBAAoBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqBtjC,MAAO,YAErGiD,KAAKknmB,aACY,QAAdlnmB,KAAKqgC,KACLrgC,KAAK6zmB,sBAAsBnvmB,MAAMosC,QAAU,GAExB,cAAd9wC,KAAKqgC,MAAsC,aAAdrgC,KAAKqgC,MACvCrgC,KAAK+2mB,sBAKrB3E,EAAYh3mB,UAAUk+J,UAAY,SAAUrgB,GACxC,OAAQA,IAAOA,EAAGn1I,UAAUK,SAAS2+lB,GAAoBn+e,YAAcs0B,EAAGn1I,UAAUK,SAAS2+lB,GAAoB5pgB,QAC7G+/C,EAAGn1I,UAAUK,SAAS2+lB,GAAoB7pd,KAGlDm5d,EAAYh3mB,UAAUk9mB,oBAAsB,SAAUr/d,EAAIp4I,EAAGrE,GACzD,IAAIO,EAAQiD,KAAK44N,kBAAkB3/E,EAAGpmI,aAAa,eAC/Cmc,EAAOhvB,KAAKqkmB,eAAetnmB,GAE/B,GADAiD,KAAKs+M,cACAt+M,KAAKjD,QAAwC,IAA/BiD,KAAKjD,MAAMwB,QAAQxB,GAuBlCiD,KAAK8zmB,YAAY/2mB,EAAO8D,EAAGrE,OAvBsB,CAEjD,GADiBwD,KAAKo5mB,eAAer8mB,EAAO8D,EAAGo4I,EAA0C,SAArCA,EAAGpmI,aAAa,iBAA8BrW,GAE9F,OAEJ,IAAKwD,KAAK0ymB,kBAAoB1ymB,KAAKupmB,kBAAoBvpmB,KAAKszmB,SAAS3wmB,cAAc,kBAAoB5F,EAAQ,MAAO,CAClH,IAAIg+B,EAAOk+G,EAAGr3I,WAAU,GACpBrF,EAAOyD,KAAKgnmB,eAAejqmB,GAC/BqI,GAAQ21B,GAAO/6B,KAAKszmB,UACpBtzmB,KAAKm0mB,SAAS3vmB,KAAKjI,GACnB,IAAIgR,GACAiiK,QAASjzK,EACTq9B,QAAQ,GAGZ,GADA55B,KAAK2mB,QAAQ,uBAAwBpZ,GACjCA,EAAUqsB,OACV,OAGR55B,KAAK20mB,mBAAoB,EACzB30mB,KAAKkvE,SAASnyE,EAAOiyB,EAAMnuB,KAMnCuxmB,EAAYh3mB,UAAUi6N,oBAAsB,WACxC,IAAIhyN,EAAYrD,KAAK2ymB,iBACjBd,GACA/O,GAAoB9hd,SACpB70F,EAAgBnsD,KAAKgpG,KAAKxnG,iBAAiB,IAAM6B,GACjD03B,EAAOoxB,EAAc3vD,OACzB,GAAI2vD,GAAiBA,EAAc3vD,OAE/B,IADA6H,EAAY8nD,EAAe9oD,GACpB03B,EAAO,GACVoxB,EAAcpxB,EAAO,GAAGv3B,aAAa,gBAAiB,SACtDu3B,IAGR,IAAKt9B,EAAkBuC,KAAKszmB,UAAW,CACnC,IAAImH,EAAcz6mB,KAAKszmB,SAAS9xmB,iBAAiB,IAAM6B,GACnDsymB,EAAQ8E,EAAYj+mB,OACxB,GAAIi+mB,GAAeA,EAAYj+mB,OAE3B,IADA6H,EAAYo2mB,EAAap3mB,GAClBsymB,EAAQ,GACX8E,EAAY9E,EAAQ,GAAGnymB,aAAa,gBAAiB,SACnC,aAAdxD,KAAKqgC,OACLo6kB,EAAY9E,EAAQ,GAAGxwmB,kBAAkB3B,aAAa,eAAgB,SACtEa,GAAao2mB,EAAY9E,EAAQ,GAAGxwmB,kBAAkBw0I,kBAAmB,YAE7Eg8d,MAMhBvD,EAAYh3mB,UAAUkjN,YAAc,WAChC,IAAIigB,EAAcv+N,KAAKgpG,KAAKxnG,iBAAiB,IAAMshmB,GAAoBvkd,OACnEggF,GAAeA,EAAY/hO,QAC3B6H,EAAYk6N,EAAaukY,GAAoBvkd,QAIrD6zd,EAAYh3mB,UAAUqwJ,YAAc,WAChC,GAAIzrJ,KAAKgpG,KAAM,CACX,IAAIu1H,EAAcv+N,KAAKgpG,KAAKxnG,iBAAiB,IAAMshmB,GAAoB5gmB,OACnEw4mB,EAAW16mB,KAAKszmB,SAAS9xmB,iBAAiB,IAAMshmB,GAAoB5gmB,OACpEq8N,GAAeA,EAAY/hO,SAC3B6H,EAAYk6N,EAAaukY,GAAoB5gmB,OAC7CmC,EAAYq2mB,EAAU5X,GAAoB5gmB,UAKtDkwmB,EAAYh3mB,UAAUu/mB,aAAe,SAAU1he,GACvCj5I,KAAKolB,SAAWplB,KAAKs5J,UAAUrgB,KAC/Bj5I,KAAKs+M,cACL36M,GAAUs1I,GAAK6pd,GAAoBvkd,SAI3C6zd,EAAYh3mB,UAAUo4mB,aAAe,SAAUxymB,GACvChB,KAAKolB,SAAWplB,KAAKs5J,UAAUt4J,KAC/BhB,KAAKyrJ,cACL9nJ,GAAU3C,GAAU8hmB,GAAoB5gmB,SAGhDkwmB,EAAYh3mB,UAAU89mB,iBAAmB,SAAUl4mB,GAC/C,IAAIqC,EAAYrD,KAAK2ymB,iBACjBd,GACA/O,GAAoB9hd,SACxB,GAAIhhJ,KAAKs5J,UAAUt4J,KAAaA,EAAQ8C,UAAUK,SAAS2+lB,GAAoBvkd,OAAQ,CAInF,GAHA56I,GAAU3C,GAAUqC,GACpBrD,KAAK84mB,gBAAe,EAAO93mB,EAAQ6R,aAAa,eAChD7R,EAAQwC,aAAa,gBAAiB,QACpB,aAAdxD,KAAKqgC,KAAqB,CAC1B,IAAIu6kB,EAAY55mB,EAAQmE,kBAAkB0N,aAAa,iBACrC,UAAd+nmB,GAAyBn9mB,EAAkBm9mB,KAC3C56mB,KAAK+N,OAAO,cAAgBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqB44G,GAAIj4I,EAASH,EAAGb,OAGnHA,KAAK+N,OAAO,cAAgBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqB44G,GAAIj4I,EAASH,EAAGb,OACxE,OAA/BA,KAAK6zmB,uBACL7zmB,KAAK+zmB,sBAETrwmB,EAAW1D,KAAKkhE,cAAgB2pD,wBAAyB7pH,EAAQsC,OAGzE8umB,EAAYh3mB,UAAU44mB,gBAAkB,SAAU6G,GAC9C76mB,KAAKwmmB,WAAWqU,IAEpBzI,EAAYh3mB,UAAU25N,aAAe,SAAUl0N,GAC3Cb,KAAKuymB,mBAAoB,EACzB,IACIt5d,EAAKpzI,EADIhF,EAAEsG,OACU,IAAM27lB,GAAoB7pd,IACnD,GAAIj5I,KAAKs5J,UAAUrgB,GAAK,CACpB,IAAIrlB,EAAQ5zH,KAAKjD,OAASiD,KAAKjD,MAAMP,OAASwD,KAAKjD,MAAMP,OAAS,EAC9Dy8I,EAAGn1I,UAAUK,SAAS,cACtByvH,GAAgB,GAEhBA,EAAQ5zH,KAAKq4mB,yBACbr4mB,KAAKs4mB,oBAAoBr/d,EAAIp4I,GAC7Bb,KAAKwzmB,aAAav6d,IACbj5I,KAAK0ymB,kBAAoB1ymB,KAAKupmB,iBAAmBvpmB,KAAKszmB,UAAYtzmB,KAAKqjmB,UACtD,aAAdrjmB,KAAKqgC,MACLrgC,KAAKyzmB,oBAAoBx6d,EAAGpmI,aAAa,eAE7C7S,KAAKo0mB,oBAGLp0mB,KAAKk0mB,oBAGK,aAAdl0mB,KAAKqgC,MACLrgC,KAAKy2mB,kBACLz2mB,KAAK22mB,oBACL32mB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,gBAG1Bj0mB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,eAE9Bj0mB,KAAKw1mB,iBACLx1mB,KAAK0tmB,eACD1tmB,KAAK2ymB,kBACL3ymB,KAAKozmB,uBAELpzmB,KAAK4ymB,mBACL5ymB,KAAK2pmB,YAGL9omB,EAAE8kB,iBAEN3lB,KAAKk0mB,wBAGLrzmB,EAAE8kB,iBAEY,aAAd3lB,KAAKqgC,MACLrgC,KAAKuzmB,iBAAiB91mB,EAAkBw7I,GAAM,KAAOA,EAAGh9H,aAE5Djc,KAAKo1mB,sBAEThD,EAAYh3mB,UAAU85N,YAAc,SAAUr0N,GAC1C,IAAIi8N,EAAYj3N,EAAQhF,EAAEsG,OAAQ,IAAM27lB,GAAoB7pd,IAC5Dj5I,KAAK26mB,aAAa79Y,IAEtBs1Y,EAAYh3mB,UAAU+5N,aAAe,SAAUt0N,GAC3Cb,KAAKs+M,eAET8zZ,EAAYh3mB,UAAUi/mB,gBAAkB,SAAUx5mB,GAC9CA,EAAE8kB,iBACF3lB,KAAKuymB,mBAAoB,GAE7BH,EAAYh3mB,UAAUowmB,gBAAkB,SAAU3qmB,GAC9C,GAAkB,aAAdb,KAAKqgC,KAAqB,CAC1B,IAAIl5B,EAAStG,EAAEsG,QACR1J,EAAkBuC,KAAKm7H,WAAat1H,EAAQsB,EAAQ,IAAMnH,KAAKm7H,SAASn6H,QAAQsC,KAClFtD,KAAKghE,eAAe78D,SAAStD,EAAEsG,QAIhCnH,KAAKuymB,mBAAqB/mmB,GAAQyc,MAA8B,SAAtBzc,GAAQsb,KAAKyQ,OAAqB/2B,SAAS+4H,gBAAkBv5H,KAAKkhE,aAH5GlhE,KAAKuymB,mBAAoB,IAOrCH,EAAYh3mB,UAAUu6N,eAAiB,WACnCpwN,GAAanB,IAAI5D,SAAU,YAAaR,KAAKwrmB,gBAAiBxrmB,MAC9DuF,GAAanB,IAAIpE,KAAKgpG,KAAM,YAAahpG,KAAKq6mB,gBAAiBr6mB,MAC/DuF,GAAanB,IAAIpE,KAAKgpG,KAAM,UAAWhpG,KAAK+0N,aAAc/0N,MAC1DuF,GAAanB,IAAIpE,KAAKgpG,KAAM,YAAahpG,KAAKk1N,YAAal1N,MAC3DuF,GAAanB,IAAIpE,KAAKgpG,KAAM,WAAYhpG,KAAKm1N,aAAcn1N,OAG/DoymB,EAAYh3mB,UAAU05mB,iBAAmB,WACrCvvmB,GAAahB,OAAO/D,SAAU,YAAaR,KAAKwrmB,iBAC5CxrmB,KAAKgpG,OACLzjG,GAAahB,OAAOvE,KAAKgpG,KAAM,YAAahpG,KAAKq6mB,iBACjD90mB,GAAahB,OAAOvE,KAAKgpG,KAAM,UAAWhpG,KAAK+0N,cAC/CxvN,GAAahB,OAAOvE,KAAKgpG,KAAM,YAAahpG,KAAKk1N,aACjD3vN,GAAahB,OAAOvE,KAAKgpG,KAAM,WAAYhpG,KAAKm1N,gBAIxDi9Y,EAAYh3mB,UAAUg9mB,iBAAmB,WAChCp4mB,KAAKjD,OAAUiD,KAAKjD,MAAMP,QAAsC,KAA5BwD,KAAKkhE,aAAankE,QACvDiD,KAAKgzmB,aAAatumB,MAAMosC,QAAU,SAG1CshkB,EAAYh3mB,UAAU86mB,iBAAmB,YAC/Bl2mB,KAAKjD,OAASiD,KAAKjD,MAAMP,QAAuC,KAA5BwD,KAAKkhE,aAAankE,QAAiBiD,KAAKulB,gBAC9EvlB,KAAKgzmB,aAAatumB,MAAMosC,QAAU,GAGlC9wC,KAAKgzmB,aAAatumB,MAAMosC,QAAU,QAO1CshkB,EAAYh3mB,UAAU4mB,YAAc,WAC5BvkB,EAAkBuC,KAAK4qmB,kBACiB,SAApC5qmB,KAAKgzmB,aAAatumB,MAAMosC,QACxB9wC,KAAK4qmB,eAAiB5qmB,KAAKgzmB,cAG3BhzmB,KAAK4qmB,eAAiB5qmB,KAAKmB,cAAc,QAAUkC,UAAW6umB,GAAkB,uBAChFlymB,KAAKizmB,iBAAiBtxmB,YAAY3B,KAAK4qmB,iBAE3ClwlB,IAAgBvT,OAAQnH,KAAK4qmB,eAAgB50lB,MAAOxK,GAAQqb,SAAW,OAAS,QAAU7mB,KAAKmB,eAC/FwC,GAAU3D,KAAK4qmB,gBAtjER,sBAujEP5olB,GAAYhiB,KAAK4qmB,kBAOzBwH,EAAYh3mB,UAAU2nB,YAAc,WAC3BtlB,EAAkBuC,KAAK4qmB,kBACxB7nlB,GAAY/iB,KAAK4qmB,gBACjBvmmB,GAAarE,KAAK4qmB,gBAjkEX,sBAkkEH5qmB,KAAK4qmB,eAAe9mmB,UAAUK,SAjkE1B,qBAkkEJkB,EAAOrF,KAAK4qmB,gBAGZ5qmB,KAAK4qmB,eAAe5omB,UAAY,GAEpChC,KAAK4qmB,eAAiB,OAG9BwH,EAAYh3mB,UAAUq7mB,gBAAkB,WAQpC,GAPIz2mB,KAAKk3mB,kBACLl3mB,KAAKm3mB,mBAELn3mB,KAAK6zmB,wBACL7zmB,KAAK6zmB,sBAAsBnvmB,MAAMosC,QAAU,QAE/C9wC,KAAKg3mB,YAAYtymB,MAAMosC,QAAU,GAC7B9wC,KAAKjD,OAASiD,KAAKjD,MAAMP,OAAQ,CACjC,IAAID,EAAO,GACPw+B,OAAO,EACPsnL,OAAW,EACX42D,EAAY,EACZ6hW,OAAc,EACd5rT,OAAY,EAChBlvT,KAAKg3mB,YAAYh1mB,UAAY,GAC7B,IAMI+4mB,EADO,IAAI38f,GAAK,aAJhB+lf,kBAAmB,mBACnBC,sBAAuB,qBACvB4W,sBAAuB,oBAEkBh7mB,KAAKgO,QACzBisE,YAAY,yBACjCghiB,EAAej7mB,KAAKmB,cAAc,QAClCkC,UA7mEK,aA+mEL42D,EAAiBjrD,GAAQ+rmB,GAC7BE,EAAat5mB,YAAYs4D,GAAiB/6C,MAASlf,KAAKjD,MAAMP,SAAU,IACxEwD,KAAKg3mB,YAAYr1mB,YAAYs5mB,GAC7B,IAAIC,EAAaD,EAAar2mB,YAC9BL,EAAO02mB,GACPj7mB,KAAKg3mB,YAAYh1mB,UAAY,GACbhC,KAAKihE,cAAcr8D,YAAnC,IACIu2mB,EAAmBvmlB,SAASh5B,OAAOuR,iBAAiBnN,KAAKizmB,kBAAkBj9lB,MAAO,IAClF4e,SAASh5B,OAAOuR,iBAAiBnN,KAAKizmB,kBAAkB34Y,YAAa,IACrE1lM,SAASh5B,OAAOuR,iBAAiBnN,KAAKizmB,kBAAkB54Y,aAAc,IACtE+gZ,OAAc,EAClB,IAAK39mB,EAAkBuC,KAAKjD,OACxB,IAAK,IAAI+U,EAAQ,GAAIrU,EAAkBuC,KAAKjD,MAAM+U,IAASA,IAAS,CAEhE,GADAvV,GAAmB,IAAVuV,EAAe,GAAK9R,KAAKi0mB,cAAgB,IAC9Cj0mB,KAAKm0mB,UAAYn0mB,KAAKm0mB,SAAS33mB,OAC/B,GAAkB,aAAdwD,KAAKqgC,KAAqB,CAC1B+6kB,EAAc,IACd,IAAIC,EAAUr7mB,KAAKqjmB,SACnBrjmB,KAAKqjmB,SAAWrjmB,KAAKm0mB,SACrBp5kB,EAAO/6B,KAAKqkmB,eAAerkmB,KAAKjD,MAAM+U,IACtC9R,KAAKqjmB,SAAWgY,OAGhBD,EAAc,EACdrglB,EAAO/6B,KAAKqkmB,eAAerkmB,KAAKjD,MAAM+U,SAI1CipB,EAAO/6B,KAAKjD,MAAM+U,GAMtB,GAJAvV,GAAQw+B,EACRA,EAAO/6B,KAAKg3mB,YAAYh1mB,UACxBhC,KAAKg3mB,YAAYh1mB,UAAYzF,GAC7Bu+mB,EAAc96mB,KAAKg3mB,YAAYpymB,aACXu2mB,EAAmBC,EAAa,MAC/BlgnB,IAAbmnN,IACAtnL,EAAOsnL,EACPvwM,EAAQmnQ,EAAY,GAExBj5Q,KAAKg3mB,YAAYh1mB,UAAY+4B,EAC7Bm0R,EAAYlvT,KAAKjD,MAAMP,OAASsV,EAChC,MAEMgpmB,EAAcI,GAAeC,GACnC94Z,EAAW9lN,EACX08Q,EAAYnnQ,GAEG,IAAVA,IACLuwM,EAAW,GACX42D,GAAa,GAIrBi2C,EAAY,IACZ+rT,EAAaj5mB,UAAY,GACzBi5mB,EAAat5mB,YAAYs4D,GAAiB/6C,MAASgwS,IAAa,IAChElvT,KAAKg3mB,YAAYr1mB,YAAYs5mB,SAIjCj7mB,KAAKg3mB,YAAYh1mB,UAAY,GAC7BhC,KAAKg3mB,YAAYtymB,MAAMosC,QAAU,QAGzCshkB,EAAYh3mB,UAAU4liB,YAAc,WAChCz7hB,GAAahB,OAAOvE,KAAKizmB,iBAAkB,YAAajzmB,KAAKw2mB,cAC7DjxmB,GAAahB,OAAO3I,OAAQ,SAAUoE,KAAKutb,cAC3Chob,GAAahB,OAAOvE,KAAKkhE,aAAc,QAASlhE,KAAKqsI,SACrD9mI,GAAahB,OAAOvE,KAAKkhE,aAAc,UAAWlhE,KAAK22jB,WACrC,aAAd32jB,KAAKqgC,MACL96B,GAAahB,OAAOvE,KAAKkhE,aAAc,QAASlhE,KAAKutmB,SAEzDhomB,GAAahB,OAAOvE,KAAKkhE,aAAc,QAASlhE,KAAKg2mB,OACrD,IAAIvyd,EAAc59I,EAAQ7F,KAAKkhE,aAAc,QACzCuiF,GACAl+I,GAAahB,OAAOk/I,EAAa,QAASzjJ,KAAKuqmB,mBAEnDhlmB,GAAahB,OAAOvE,KAAKkhE,aAAc,OAAQlhE,KAAKmqmB,QACpD5kmB,GAAahB,OAAOvE,KAAKizmB,iBAAkB,YAAajzmB,KAAK+5mB,SAC7Dx0mB,GAAahB,OAAOvE,KAAKizmB,iBAAkB,WAAYjzmB,KAAKg6mB,UAC5Dz0mB,GAAahB,OAAOvE,KAAKgzmB,aAAc,YAAahzmB,KAAKs6mB,WAE7DlI,EAAYh3mB,UAAUkgnB,cAAgB,SAAU7vjB,GAC5C,IAAIwtF,EAIAz8I,GAHJy8I,EAAKj5I,KAAKgpG,KAAKxnG,iBAAiBiqD,EAC5B,kEACA,kDACYjvD,OAChB,GAAIy8I,GAAMA,EAAGz8I,OACT,KAAOA,EAAS,GACZwD,KAAKs4mB,oBAAoBr/d,EAAGz8I,EAAS,GAAI,KAAMA,GAC/CA,IAGU,QAAdwD,KAAKqgC,MAAmBrgC,KAAKomK,cAI7BpmK,KAAKihE,cAAcn9D,UAAUS,OAAO0tmB,IAHpCjymB,KAAKy2mB,kBAKS,aAAdz2mB,KAAKqgC,MACLrgC,KAAKy2mB,kBACLz2mB,KAAK22mB,oBACL32mB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,gBAG1Bj0mB,KAAKg0mB,gBAAgBh0mB,KAAKi0mB,eAE9Bj0mB,KAAKo1mB,sBAEThD,EAAYh3mB,UAAUkiO,UAAY,WAC1Bt9N,KAAKm7H,UACLn7H,KAAKm7H,SAASn0H,eAAgBugE,OAAUvnE,KAAKunE,UAGrD6qiB,EAAYh3mB,UAAUkrmB,iBAAmB,SAAUh8lB,GAC3C7M,EAAkBuC,KAAKgpG,MACvBhpG,KAAKmgI,cAGLngI,KAAKwkmB,UAAUxkmB,KAAKqoE,YAEpBroE,KAAKjD,OAASiD,KAAKjD,MAAMP,SACzBwD,KAAKgH,eAAgBjK,MAASiD,KAAKjD,QACnCiD,KAAKo0mB,qBAGbhC,EAAYh3mB,UAAUmgnB,aAAe,WACjCv7mB,KAAKi1mB,aAAc,EACnBj1mB,KAAKmgI,eAKTiye,EAAYh3mB,UAAUy3G,eAAiB,WACnC,OAAO7yG,KAAKqzG,cAAc,WAO9B++f,EAAYh3mB,UAAUuyF,kBAAoB,SAAUkF,EAASC,GACrDD,EAAQxqB,aAAe5qE,EAAkBa,OAAOhB,KAAKu1F,EAAQxqB,eAC7DroE,KAAKszmB,SAAW,KAChBtzmB,KAAKm0mB,SAAW,MAES,gBAAzBn0mB,KAAK+hC,iBACL/hC,KAAKummB,kBAAkB,SAAU,QAAS,cAAe1zgB,GAE7D,IAAK,IAAIz0F,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKu1F,GAAUz0F,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,QACL,IAAK,aACiB,aAAdtK,KAAKqgC,MAAuBrgC,KAAKy0mB,gBAC5Bh3mB,EAAkBuC,KAAKm7H,YACxBn7H,KAAKm7H,SAAS9oH,UACdrS,KAAKm7H,SAAW,MAEpBn7H,KAAKmgI,eAET,MACJ,IAAK,iBACDngI,KAAK6ymB,sBACL,MACJ,IAAK,kBACD7ymB,KAAK+ymB,kBAAkBlghB,EAAQttE,iBAC/B,MACJ,IAAK,QACIvlB,KAAKgpG,KAGAhpG,KAAKknmB,aACXlnmB,KAAKk1mB,qBACa,QAAdl1mB,KAAKqgC,MACLrgC,KAAKy2mB,kBAETz2mB,KAAK22mB,oBACL32mB,KAAKo1mB,qBACLp1mB,KAAKq1mB,iBAAiB,KAAMr1mB,KAAKjD,MAAO+1F,EAAQ/1F,QAThDiD,KAAKu7mB,eAWT,MACJ,IAAK,QACDt1mB,EAAkBjG,KAAKghE,gBAAkBhrD,MAASzT,EAAWswF,EAAQ78E,SACrEhW,KAAKm7H,SAASn0H,eAAgBgP,MAAOhW,KAAKq3mB,mBAC1C,MACJ,IAAK,cACDr3mB,KAAKo1mB,qBACL,MACJ,IAAK,uBACDp1mB,KAAK+N,OAAO,wBAA0Bq/lB,qBAAsBv6gB,EAAQu6gB,uBACpE,MACJ,IAAK,gBACiB,QAAdptmB,KAAKqgC,MACLrgC,KAAKy2mB,kBAETz2mB,KAAKwmmB,WAAW3zgB,EAAQohhB,eACxB,MACJ,IAAK,WACDj0mB,KAAKknK,aAAapjK,UAAUS,OAAOuuF,EAAQ7/E,UAC3CjT,KAAKghE,eAAel9D,UAAUS,OAAOuuF,EAAQ7/E,UAC7CjT,KAAKkzmB,iBACL,MACJ,IAAK,YACDlzmB,KAAKyymB,UAAU5/gB,EAAQ3/E,WACvBo+E,EAAOl2F,UAAUuyF,kBAAkBrsF,KAAKtB,KAAM6yF,EAASC,GACvD,MACJ,IAAK,WACD9yF,KAAK8ymB,eAAejghB,EAAQrW,UAC5Bx8E,KAAK2pmB,YACL,MACJ,IAAK,UACD3pmB,KAAK2pmB,YACL3pmB,KAAKiiC,OAAO4wD,EAAQztE,SACpB,MACJ,IAAK,gBACGplB,KAAKm7H,WACLn7H,KAAKm7H,SAAS9oH,UACdrS,KAAKm7H,SAAW,MAEpBn7H,KAAKmgI,cACL,MACJ,IAAK,mBACDngI,KAAKw7mB,eACL,MACJ,IAAK,iBACDx7mB,KAAK44mB,oBACL,MACJ,IAAK,uBACD,MACJ,IAAK,gBACD54mB,KAAK+N,OAAO,iBAAiB,GAC7B,MACJ,IAAK,cACL,IAAK,iBACL,IAAK,iBACG/N,KAAKm7H,WACLn7H,KAAKm7H,SAAS9oH,UACdrS,KAAKm7H,SAAW,MAEpBn7H,KAAKmgI,cACL,MACJ,QACI,IAAIs7e,OAAU,EACdA,EAAUz7mB,KAAKkjmB,cAAc54lB,EAAMuoF,EAASC,GAC5CxB,EAAOl2F,UAAUuyF,kBAAkBrsF,KAAKtB,KAAMy7mB,EAAQtrP,YAAasrP,EAAQtY,gBAS3FiP,EAAYh3mB,UAAUuumB,UAAY,WAE9B,GAAI3pmB,KAAKomK,cAAe,CACpB,IAAIq2D,GACAllM,KAAM,UACNrsB,SAAU,IACVrL,MALI,KAOJ0N,GAAc02D,MAAOjkE,KAAKm7H,SAAUvhG,QAAQ,EAAOuX,UAAWsrL,GAElE,GADAz8N,KAAK2mB,QAAQ,QAASpZ,GAClBA,EAAUqsB,OACV,OAEJ55B,KAAKiomB,iBAAkB,EACvBjomB,KAAKghE,eAAel9D,UAAUS,OA72EtB,eA82ERvE,KAAKm7H,SAASxzC,KAAK,IAAItvD,GAAU9qB,EAAU4jC,YAC3CztC,EAAW1D,KAAKkhE,cAAgBw5F,gBAAiB,UACjD16J,KAAK+N,OAAO,cAAgBupF,OAAQ,oBAAqBr1D,OAAsB,aAAdjiC,KAAKqgC,KAAqBtjC,MAAO,UAClGiD,KAAKm7H,SAASxzC,OACdtjF,GAAa7D,SAASuL,KAAM/L,KAAKm7H,SAASn6H,SAAU,qBACpDuE,GAAahB,OAAOvE,KAAKgpG,KAAM,UAAWhpG,KAAK22jB,aAOvDy7C,EAAYh3mB,UAAUo6N,UAAY,WAC9B,GAAKx1N,KAAKolB,QAAV,CAGA,IAAKplB,KAAK43M,UAGN,OAFA53M,KAAKiomB,iBAAkB,OACvB32gB,EAAOl2F,UAAUg3G,OAAO9wG,KAAKtB,MAGjC,IAAI07mB,EAAe17mB,KAAK43M,UAAUp2M,iBAAiB,kBAAuBhF,OACtEm/mB,EAAW37mB,KAAK43M,UAAUp2M,iBAAiB,MACzCshmB,GAAoB7pd,GAAK,IAAM44d,IAAWr1mB,OAC5Ck/mB,EAAe,GAAMA,IAAiBC,GAAcA,IAAa37mB,KAAKm0mB,SAAS33mB,OAC/EwD,KAAKiomB,iBAAkB,EAG3BjomB,KAAKmzmB,iBASTf,EAAYh3mB,UAAUwK,UAAY,SAAU6lD,GACxC,IAAI1rD,EAAQC,KACZ,GAAIvC,EAAkBuC,KAAKgpG,MACvBhpG,KAAKg1mB,gBAAkB,WACnB,GAAmB,aAAfj1mB,EAAMsgC,MAAuBtgC,EAAM00mB,cAAe,CAClD,IAAIx0mB,GACAq3F,OAAQ,oBACRr1D,OAAuB,aAAfliC,EAAMsgC,KACdtjC,MAAO0uD,EAAQ,QAAU,WAE7B1rD,EAAMgO,OAAO,iBAAkB9N,GAEnCF,EAAMu7mB,cAAc7vjB,GACpB1rD,EAAMi1mB,gBAAkB,MAE5B1jhB,EAAOl2F,UAAUg3G,OAAO9wG,KAAKtB,UAE5B,CAED,GADAA,KAAKg1mB,gBAAkB,KACL,aAAdh1mB,KAAKqgC,MAAuBrgC,KAAKy0mB,cAAe,CAChD,IAAIx0mB,GACAq3F,OAAQ,oBACRr1D,OAAsB,aAAdjiC,KAAKqgC,KACbtjC,MAAO0uD,EAAQ,QAAU,WAE7BzrD,KAAK+N,OAAO,iBAAkB9N,GAElCD,KAAKs7mB,cAAc7vjB,KAG3B2mjB,EAAYh3mB,UAAU2mC,cAAgB,WAClC,MAAO,eAOXqwkB,EAAYh3mB,UAAUg3G,OAAS,WAC3B,IAAIryG,EAAQC,KACZA,KAAK62mB,YAAa,EAClB72mB,KAAKi1mB,aAAc,EACnBj1mB,KAAKihE,cAAgBjhE,KAAKmB,cAAc,QAAUkC,UA/8ElC,eAg9EhBrD,KAAKg3mB,YAAch3mB,KAAKmB,cAAc,QAAUkC,UAAWu4mB,8BAA0Cr4mB,OAAQ,kBAC7GvD,KACKgzmB,aAAehzmB,KAAKmB,cAAc,QACnCkC,UAAW6umB,GAAiB3umB,OAAQ,kBAExCvD,KAAKizmB,iBAAmBjzmB,KAAKmB,cAAc,OAASkC,UA99EtC,2BA+9EdrD,KAAKghE,eAAiBhhE,KAAKmB,cAAc,OAASkC,UAh+EnC,gCAi+EG,aAAdrD,KAAKqgC,MACL18B,GAAU3D,KAAKghE,gBAAiB,cAEhCx1D,GAAQqb,UACR7mB,KAAKizmB,iBAAiBnvmB,UAAUM,IAn+Ef,iBAq+ErBpE,KAAKghE,eAAet8D,MAAMsR,MAAQzT,EAAWvC,KAAKgW,OAClDhW,KAAKghE,eAAer/D,YAAY3B,KAAKizmB,kBACrCjzmB,KAAKknK,aAAelnK,KAAKmB,cAAc,OAASmC,GAAItD,KAAKgB,QAAQsC,GAAK,SAAUD,UAz9EpE,8CA09EM,cAAdrD,KAAKqgC,MAAsC,aAAdrgC,KAAKqgC,MAClCrgC,KAAKk3mB,iBAAmBl3mB,KAAKmB,cAAc,QAAUkC,UA59EzC,iBA49EuEE,OAAQ,iBAC3FvD,KAAKizmB,iBAAiBtxmB,YAAY3B,KAAKk3mB,oBAGvCl3mB,KAAK6zmB,sBAAwB7zmB,KAAKmB,cAAc,QAC5CkC,UA3+EG,qBA4+EHE,OAAQ,iBAEZvD,KAAKizmB,iBAAiBtxmB,YAAY3B,KAAK6zmB,wBAEzB,QAAd7zmB,KAAKqgC,MACLrgC,KAAKizmB,iBAAiBtxmB,YAAY3B,KAAKg3mB,aAE3Ch3mB,KAAKizmB,iBAAiBtxmB,YAAY3B,KAAKihE,eACnCjhE,KAAKulB,kBAAoB/Z,GAAQqb,SACjC7mB,KAAKizmB,iBAAiBtxmB,YAAY3B,KAAKgzmB,cAGvChzmB,KAAKizmB,iBAAiBnvmB,UAAUM,IAAI+tmB,IAExCnymB,KAAKw7mB,eACLx7mB,KAAKkhE,aAAelhE,KAAKmB,cAAc,SACnCkC,UAh/EQ,iBAi/ERI,OACI2f,WAAY,QACZ1c,KAAM,OACNuc,aAAc,MACd8mH,SAAU,OAGd/pI,KAAKgB,QAAQgC,UAAYhD,KAAK6pmB,mBAC9B7pmB,KAAKgB,QAAQ0D,MAAMosC,QAAU,QAE7B9wC,KAAKgB,QAAQgC,UAAYhD,KAAK6pmB,kBAC9B7pmB,KAAKgB,QAAQW,YAAY3B,KAAKghE,gBAC9BhhE,KAAKihE,cAAct/D,YAAY3B,KAAKkhE,gBAGpClhE,KAAKgB,QAAQqT,cAAcnP,aAAalF,KAAKghE,eAAgBhhE,KAAKgB,SAClEhB,KAAKihE,cAAct/D,YAAY3B,KAAKkhE,cACpClhE,KAAKihE,cAAct/D,YAAY3B,KAAKgB,SACpChB,KAAKgB,QAAQ0K,gBAAgB,aAEL,UAAxB1L,KAAKknB,eACL65C,GAAiB/gE,KAAKghE,eAAgBhhE,KAAKihE,cAAejhE,KAAKgB,QAAShB,KAAKkhE,aAAclhE,KAAKjD,MAAOiD,KAAKknB,eAAgBlnB,KAAKinB,aAEpG,UAAxBjnB,KAAKknB,gBACVlnB,KAAKo1mB,qBAETp1mB,KAAKgB,QAAQ0D,MAAM+I,QAAU,GAC7B,IAAInK,EAAKtD,KAAKgB,QAAQ6R,aAAa,MAAQ7S,KAAKgB,QAAQ6R,aAAa,MAAQrT,EAAY,oBACzFQ,KAAKgB,QAAQsC,GAAKA,EAClBtD,KAAK4nmB,cAAgB5nmB,KAAKmB,cAAc,UACpCsC,OAASigI,cAAe,OAAQzxH,MAvgFvB,iBAugFgD83H,SAAY,KAAM+b,SAAY,UAE3F9lJ,KAAKizmB,iBAAiBtxmB,YAAY3B,KAAK4nmB,eACvC5nmB,KAAKyqK,oBAAoBzqK,KAAKgB,QAAShB,KAAK4nmB,eAC1B,aAAd5nmB,KAAKqgC,MACLrgC,KAAKo4mB,mBAETp4mB,KAAKm+hB,YACLn+hB,KAAKiiC,OAAOjiC,KAAKolB,SACjBplB,KAAKyymB,UAAUzymB,KAAKkT,WAChBlT,KAAKjD,OAASiD,KAAKjD,MAAMP,QACzBwD,KAAKmgI,cACCngI,KAAKqoE,sBAAsBC,GAK7BtoE,KAAK+0mB,gBAAkB,WACnBh1mB,EAAM82mB,YAAa,EACnB92mB,EAAMm1mB,qBACNn1mB,EAAMo1mB,gBACNp1mB,EAAMg1mB,gBAAkB,KACxBh1mB,EAAM82mB,YAAa,IATvB72mB,KAAKk1mB,qBACLl1mB,KAAKm1mB,kBAaTn1mB,KAAKm1mB,gBAETn1mB,KAAK62mB,YAAa,EAClB72mB,KAAK67mB,kBAETzJ,EAAYh3mB,UAAUygnB,eAAiB,WAC/B77mB,KAAKgB,QAAQ24H,aAAa,cAC1B35H,KAAKqsI,WAGb+le,EAAYh3mB,UAAUw9mB,kBAAoB,YvbjiF9C,SAA+B53iB,EAAgBiyiB,EAAkBhyiB,EAAeC,EAAcnkE,EAAOmqB,EAAgBD,GACjH,IAEI60lB,EAFAC,EAAqB9I,EAAiBtwmB,cAAc,IAAM2+D,IAC1D0nE,EAAYiqe,EAAiBtwmB,cAAc,IAAM0+D,IAEhD5jE,EAAkBs+mB,GAUnBp6iB,GAAe5kE,EAAOmkE,EADtB46iB,EAAmC,OAAhB70lB,EAAwBA,EAAc,KARzD60lB,EAAkBC,EAAmB77iB,UACrC76D,EAAO47D,EAAct+D,cAAc,IAAM2+D,KACzCK,GAAe5kE,EAAOmkE,EAAc46iB,GAC/Br+mB,EAAkBurI,IACnB3jI,EAAO47D,EAAct+D,cAAc,IAAM0+D,MAOjDL,EAAel9D,UAAUS,OAAO,iBubkhF5BqkI,CAAe5oI,KAAKghE,eAAgBhhE,KAAKizmB,iBAAkBjzmB,KAAKihE,cAAejhE,KAAKkhE,aAAclhE,KAAKjD,MAAOiD,KAAKknB,eAAgBlnB,KAAKinB,aAC5G,UAAxBjnB,KAAKknB,gBACL65C,GAAiB/gE,KAAKghE,eAAgBhhE,KAAKihE,cAAejhE,KAAKgB,QAAShB,KAAKkhE,aAAclhE,KAAKjD,MAAOiD,KAAKknB,eAAgBlnB,KAAKinB,cAGzImrlB,EAAYh3mB,UAAUognB,aAAe,WACf,aAAdx7mB,KAAKqgC,MAAuBrgC,KAAKg8mB,kBACjCh8mB,KAAKu1Y,SAAWv1Y,KAAKmB,cAAc,QAAUkC,UAljFtC,kCAmjFPrD,KAAKizmB,iBAAiBtxmB,YAAY3B,KAAKu1Y,UACvC5xY,GAAU3D,KAAKizmB,mBAAoB,iBAG9Bx1mB,EAAkBuC,KAAKu1Y,YACxBv1Y,KAAKu1Y,SAASlhY,cAAc/O,YAAYtF,KAAKu1Y,UAC7ClxY,GAAarE,KAAKizmB,mBAAoB,kBAIlDb,EAAYh3mB,UAAU+5mB,cAAgB,WAChB,QAAdn1mB,KAAKqgC,MACLrgC,KAAKy2mB,kBAETz2mB,KAAKkzmB,iBACLlzmB,KAAK6ymB,sBACL7ymB,KAAK8ymB,eAAe9ymB,KAAKw8E,UACzBx8E,KAAK22mB,qBAOTvE,EAAYh3mB,UAAUiX,QAAU,WACxBrS,KAAKm7H,UACLn7H,KAAKm7H,SAASxzC,OAElB3nF,KAAK+N,OAhlFC,cAilFN/N,KAAK80mB,mBACL90mB,KAAKghiB,cACLhhiB,KAAKgpG,KAAO,KACZhpG,KAAKm7H,SAAW,KAChBn7H,KAAKszmB,SAAW,KAChBtzmB,KAAKm0mB,SAAW,KAChB7ihB,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,MAG9B,IAFA,IAAI+6B,GAAQ,WAAY,gBAAiB,mBAAoB,eACzDv+B,EAASu+B,EAAKv+B,OACXA,EAAS,GACZwD,KAAKkhE,aAAax1D,gBAAgBqvB,EAAKv+B,EAAS,IAChDA,IAEJwD,KAAKgB,QAAQ0D,MAAMosC,QAAU,QACzB9wC,KAAKghE,eAAe3sD,gBAChBrU,KAAKghE,eAAe3sD,cAAcrR,UAAYhD,KAAK6pmB,iBACnDtlmB,EAAOvE,KAAKghE,iBAGZhhE,KAAKghE,eAAe3sD,cAAcnP,aAAalF,KAAKgB,QAAShB,KAAKghE,gBAClEz8D,EAAOvE,KAAKghE,mBAKxBgwB,IACI9pF,EAAS,OACVkrmB,EAAYh3mB,UAAW,gBAAY,GACtC41F,IACI9pF,EAAS,SACVkrmB,EAAYh3mB,UAAW,aAAS,GACnC41F,IACI9pF,EAAS,UACVkrmB,EAAYh3mB,UAAW,mBAAe,GACzC41F,IACI9pF,EAAS,SACVkrmB,EAAYh3mB,UAAW,kBAAc,GACxC41F,IACI9pF,EAAS,OACVkrmB,EAAYh3mB,UAAW,mBAAe,GACzC41F,IACI9pF,EAAS,OACVkrmB,EAAYh3mB,UAAW,4BAAwB,GAClD41F,IACI9pF,OACDkrmB,EAAYh3mB,UAAW,sBAAkB,GAC5C41F,IACI9pF,EAAS,OACVkrmB,EAAYh3mB,UAAW,qBAAiB,GAC3C41F,IACI9pF,EAAS,OACVkrmB,EAAYh3mB,UAAW,sBAAkB,GAC5C41F,IACI9pF,EAAS,OACVkrmB,EAAYh3mB,UAAW,sBAAkB,GAC5C41F,IACI9pF,EAAS,OACVkrmB,EAAYh3mB,UAAW,oBAAgB,GAC1C41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,sBAAkB,GAC5C41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,wBAAoB,GAC9C41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,uBAAmB,GAC7C41F,IACI9pF,EAAS,MACVkrmB,EAAYh3mB,UAAW,8BAA0B,GACpD41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,gBAAY,GACtC41F,IACI9pF,EAAS,OACVkrmB,EAAYh3mB,UAAW,YAAQ,GAClC41F,IACI9pF,EAAS,OACVkrmB,EAAYh3mB,UAAW,aAAS,GACnC41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,wBAAoB,GAC9C41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,0BAAsB,GAChD41F,IACI9pF,EAAS,YACVkrmB,EAAYh3mB,UAAW,YAAQ,GAClC41F,IACI9pF,EAAS,MACVkrmB,EAAYh3mB,UAAW,qBAAiB,GAC3C41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,kBAAc,GACxC41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,wBAAoB,GAC9C41F,IACI9pF,EAAS,UACVkrmB,EAAYh3mB,UAAW,sBAAkB,GAC5C41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,qBAAiB,GAC3C41F,IACI9pF,EAAS,eACVkrmB,EAAYh3mB,UAAW,qBAAiB,GAC3C41F,IACI9pF,EAAS,iBACVkrmB,EAAYh3mB,UAAW,uBAAmB,GAC7C41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,4BAAwB,GAClD41F,IACI9pF,GAAS,IACVkrmB,EAAYh3mB,UAAW,mBAAe,GACzC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,cAAU,GACpC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,gBAAY,GACtC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,eAAW,GACrC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,mBAAe,GACzC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,kBAAc,GACxC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,YAAQ,GAClC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,aAAS,GACnC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,YAAQ,GAClC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,aAAS,GACnC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,qBAAiB,GAC3C41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,iBAAa,GACvC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,eAAW,GACrC41F,IACIloF,KACDspmB,EAAYh3mB,UAAW,4BAAwB,GAClDg3mB,EAAcphhB,IACV5nF,GACDgpmB,IAELnP,ICryFE9/N,GAAQ,UAMRkkO,GAAqB,0CAIrBlxc,GAAY,eAOZ8ld,GAAmC,WACnC,SAASA,EAAkB37mB,GACvBN,KAAKk8mB,YACLl8mB,KAAK2nX,aACL3nX,KAAKM,OAASA,EACdN,KAAKvD,mBAiaT,OA/ZAw/mB,EAAkB7gnB,UAAU2mC,cAAgB,WACxC,MAAO,qBAEXk6kB,EAAkB7gnB,UAAUqB,iBAAmB,WACvCuD,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAOwrF,GAAG,aAAc9rF,KAAKm8mB,cAAen8mB,MACjDA,KAAKM,OAAOwrF,GAAG,aAAc9rF,KAAKwlmB,WAAYxlmB,MAC9CA,KAAKM,OAAOwrF,GAAG,YAAa9rF,KAAKo8mB,aAAcp8mB,MAC/CA,KAAKM,OAAOwrF,GAAG,iBAAkB9rF,KAAKw1mB,eAAgBx1mB,MACtDA,KAAKM,OAAOwrF,GAAG,YAAa9rF,KAAKmtmB,aAAcntmB,MAC/CA,KAAKM,OAAOwrF,GAAG,OAAQ9rF,KAAKmqmB,OAAQnqmB,MACpCA,KAAKM,OAAOwrF,GAAG,gBAAiB9rF,KAAKkkI,cAAelkI,MACpDA,KAAKM,OAAOwrF,GAAG,kBAAmB9rF,KAAKq8mB,mBAAoBr8mB,MAC3DA,KAAKM,OAAOwrF,GAAG,aAAc9rF,KAAKs8mB,SAAUt8mB,MAC5CA,KAAKM,OAAOwrF,GAAG,UAAW9rF,KAAKu8mB,WAAYv8mB,MAC3CA,KAAKM,OAAOwrF,GAAG,aAAc9rF,KAAKw8mB,cAAex8mB,MACjDA,KAAKM,OAAOwrF,GAAG,gBAAiB9rF,KAAKu+G,UAAWv+G,MAChDA,KAAKM,OAAOwrF,GAAG,uBAAwB9rF,KAAKonI,eAAgBpnI,MAC5DuF,GAAanB,IAAI5D,SAAU,YAAaR,KAAKwrmB,gBAAiBxrmB,MAC9DA,KAAKM,OAAOwrF,GAAG,UAAW9rF,KAAKy8mB,cAAez8mB,QAElDi8mB,EAAkB7gnB,UAAUuB,oBAAsB,WAC1CqD,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAO4rF,IAAI,aAAclsF,KAAKm8mB,eACnCn8mB,KAAKM,OAAO4rF,IAAI,aAAclsF,KAAKwlmB,YACnCxlmB,KAAKM,OAAO4rF,IAAI,YAAalsF,KAAKo8mB,cAClCp8mB,KAAKM,OAAO4rF,IAAI,iBAAkBlsF,KAAKw1mB,gBACvCx1mB,KAAKM,OAAO4rF,IAAI,YAAalsF,KAAKmtmB,cAClCntmB,KAAKM,OAAO4rF,IAAI,OAAQlsF,KAAKmqmB,QAC7BnqmB,KAAKM,OAAO4rF,IAAI,gBAAiBlsF,KAAKkkI,eACtClkI,KAAKM,OAAO4rF,IAAI,kBAAmBlsF,KAAKq8mB,oBACxCr8mB,KAAKM,OAAO4rF,IAAI,aAAclsF,KAAKs8mB,UACnCt8mB,KAAKM,OAAO4rF,IAAI,UAAWlsF,KAAKu8mB,YAChCv8mB,KAAKM,OAAO4rF,IAAI,aAAclsF,KAAKw8mB,eACnCx8mB,KAAKM,OAAO4rF,IAAI,gBAAiBlsF,KAAKu+G,WACtCv+G,KAAKM,OAAO4rF,IAAI,uBAAwBlsF,KAAKonI,gBAC7CpnI,KAAKM,OAAO4rF,IAAI,UAAWlsF,KAAKy8mB,eAChCl3mB,GAAahB,OAAO/D,SAAU,YAAaR,KAAKwrmB,mBAEpDyQ,EAAkB7gnB,UAAUoqmB,WAAa,SAAUvlmB,GAC/C,IAAIF,EAAQC,KACZ,GAAIvC,EAAkBuC,KAAKM,OAAO45mB,mBAAmBnla,aACjD/0M,KAAKM,OAAO45mB,mBAAmBnla,YAAc,SAAUl0M,GACnDd,EAAM08mB,cAAc57mB,QAGvB,CACD,IAAI6wmB,EAAgB1xmB,KAAKM,OAAO45mB,mBAAmBnla,YACnD/0M,KAAKM,OAAO45mB,mBAAmBnla,YAAc,SAAUl0M,GACnDd,EAAM08mB,cAAc57mB,GACpB6wmB,EAAcp2mB,MAAMyE,GAAQc,OAKxCo7mB,EAAkB7gnB,UAAUgsI,eAAiB,SAAU59H,GACnDsiB,GAAMs7G,eAAe59H,EAAM4jmB,qBAAsBptmB,KAAKsnmB,cAE1D2U,EAAkB7gnB,UAAUqhnB,cAAgB,SAAU57mB,GAClD,IAAIod,EAOJ,GAAuB,wBAFnBA,EAJCxgB,EAAkBoD,EAAEod,MAIdpd,EAHAA,EAAEod,MAKJ5a,WAAyD,sBAAnB4a,EAAK5a,UAAmC,CACnF,IAAIkkY,EAAcz0X,GAAe9S,KAAKM,OAAOa,eAAe,GACxD+uC,EAAOzqC,EAAO,cAAewY,GACxBA,EAAKpL,aAAa,YAC3BoL,EAAK/Y,aAAaqiY,EAAatpX,EAAK3M,WAAW7T,EAAkByyC,GAAQ,EAAI,IAC7EzqC,EAAO,WAAqB8hY,GAChB9hY,EAAO,WAAqB8hY,GACxC,OAAOtpX,EAGP,OAAOA,GAGfg+lB,EAAkB7gnB,UAAUghnB,aAAe,WACnCp8mB,KAAKM,OAAOm0mB,eACRh3mB,EAAkBuC,KAAK08mB,kBACvB18mB,KAAK08mB,eAAiB18mB,KAAKM,OAAOa,cAAc,OAC5CkC,UA3GC,uBA6GLrD,KAAK28mB,cAAgB38mB,KAAKM,OAAOa,cAAc,QAC3CkC,UAAW,eAEfrD,KAAK28mB,cAAc1gmB,YAAc,GACjCjc,KAAK08mB,eAAe/6mB,YAAY3B,KAAK28mB,eACrC38mB,KAAKu+G,YACLv+G,KAAKy8mB,cAAcz8mB,KAAK08mB,gBACpB18mB,KAAKM,OAAO03M,iBACPv6M,EAAkBuC,KAAKunmB,cAIxBnimB,GAAQpF,KAAK08mB,gBAAiB18mB,KAAKM,OAAO4mK,cAH1C9hK,GAAQpF,KAAK08mB,gBAAiB18mB,KAAKunmB,eAMtCvnmB,KAAKM,OAAO03M,iBACRv6M,EAAkBuC,KAAKunmB,cAIxB1imB,GAAS7E,KAAK08mB,gBAAiB18mB,KAAKM,OAAO4mK,cAH3ClnK,KAAKunmB,aAAa9mmB,WAAWyE,aAAalF,KAAK08mB,eAAgB18mB,KAAKunmB,aAAarjd,cAMzF3+I,GAAanB,IAAIpE,KAAK08mB,eAAgB,YAAa18mB,KAAK4lH,aAAc5lH,OAEtEA,KAAKM,OAAO0oG,KAAKllG,UAAUK,SAAS,YACpCnE,KAAK08mB,eAAeh4mB,MAAMosC,QAAU,OAGpC9wC,KAAK08mB,eAAeh4mB,MAAMosC,QAAU,QAExC9wC,KAAKM,OAAO85mB,gBAAkBp6mB,KAAK08mB,eAAe9wmB,wBAAwBmK,QAEpEtY,EAAkBuC,KAAK08mB,kBAC7B18mB,KAAK08mB,eAAeromB,cAAc/O,YAAYtF,KAAK08mB,gBACnD18mB,KAAK08mB,eAAiB,OAG9BT,EAAkB7gnB,UAAUiX,QAAU,WAClCrS,KAAKrD,uBAETs/mB,EAAkB7gnB,UAAU+gnB,cAAgB,SAAUl8mB,GAClD,IAAIkH,EAcJ,GANIA,EAPC1J,EAAkBwC,EAAKY,GAOfZ,EAAKg5I,GAAGU,iBAAiBroI,WAAW,GANnC7T,EAAkBwC,EAAKY,EAAEsG,QAG7BlH,EAAKg5I,GAAGt2I,cAAc,uBAAuB2O,WAAW,GAF1DrR,EAAKY,EAAEsG,OAAOrD,UAAUK,SAAS,WAC7BlE,EAAKY,EAAEsG,OAASlH,EAAKg5I,GAAGt2I,cAAc,uBAAuB2O,WAAW,GAMhFtR,KAAKM,OAAOylmB,eACZ5+lB,EAASlH,EAAKg5I,GAAG9zI,kBAAkBmM,WAAW,IAElDtR,KAAKkrY,aAAerlY,EAAQsB,EAAQ,wBAC/B1J,EAAkBuC,KAAKkrY,cAAe,CACvC,IAAI90F,EAAe3wS,EAAO,WAAqBzF,KAAKkrY,cAEpDlrY,KAAK0pY,kBAAkB1pY,KAAKkrY,aAAc90F,EAAatyS,UAAUK,SAASg/X,IAAQljY,EAAKg5I,GAAIh5I,EAAKY,GADhF,KAIxBo7mB,EAAkB7gnB,UAAUsuY,kBAAoB,SAAUkG,EAAW5xK,EAAS/kF,EAAIp4I,EAAG+E,GACjF5F,KAAKwlH,YAAYoqR,EAAW5xK,EAAU,UAAY,QAASn9N,GAAG,EAAM+E,IAExEq2mB,EAAkB7gnB,UAAUwqH,aAAe,SAAU/kH,GACjD,IAAIsG,EAEAA,EADAtG,EAAEm0G,cAAclxG,UAAUK,SAASnE,KAAK08mB,eAAer5mB,WAC9CxC,EAAEm0G,cAAc7vG,kBAAkBw0I,iBAGlC94I,EAAEm0G,cAEfh1G,KAAKkrY,aAAerlY,EAAQsB,EAAQ,uBAEpC,IAAK1J,EAAkBuC,KAAKkrY,cAAe,CACvC,IAAI90F,EAAe3wS,EAAO,WAAqBzF,KAAKkrY,cACpDlrY,KAAK0pY,kBAAkB1pY,KAAKkrY,aAAc90F,EAAatyS,UAAUK,SAASg/X,IAAQ,KAAMtiY,GAH5E,GAKhBA,EAAE8kB,kBAENs2lB,EAAkB7gnB,UAAUoqH,YAAc,SAAUjzG,EAASk5C,EAAO5qD,EAAG8oY,EAAW/jY,GAC9E,IAAI6/G,EACAryG,EAAYb,EAAQ7E,uBArMZ,WAqMkD,GAChD,UAAV+9C,GAAsBr4C,EAAUtP,UAAUK,SAASg/X,IASpC,YAAV13U,IAAwBr4C,EAAUtP,UAAUK,SAASg/X,KAAU/vX,EAAUtP,UAAUK,SA3MhF,aA4MRE,GAAa+O,IAAa+vX,GA5MlB,WA6MR19Q,EAAY,QACR7/G,IACA5F,KAAKM,OAAOsF,WAAU,GACtB5F,KAAKu+G,eAbTnrG,EAAUtP,UAAUS,OAnMZ,UAoMR6O,EAAUtP,UAAUM,IAAI++X,IACxB19Q,EAAY,OACR7/G,IACA5F,KAAKM,OAAOsF,WAAU,GACtB5F,KAAKu+G,WAAU,KAYlB9gH,EADLgoH,EAAsB,UAAVh6D,EAAoB,OAAmB,YAAVA,EAAsB,QAAUg6D,IAErElzG,EAAQ/O,aAAa,eAAgBiiH,IAG7Cw2f,EAAkB7gnB,UAAU+xmB,aAAe,SAAUltmB,GACjD,GAAIxC,EAAkBuC,KAAKunmB,cAAe,CACtCvnmB,KAAKunmB,aAAevnmB,KAAKM,OAAOa,cAAc,QAC1CkC,UAtNG,oBAwNPrD,KAAKsnmB,YAActnmB,KAAKM,OAAOa,cAAc,SACzCsC,OAASiD,KAAM,QACfrD,UA3NE,mBA6NNrD,KAAKM,OAAOU,QAAQP,WAAWyE,aAAalF,KAAKsnmB,YAAatnmB,KAAKM,OAAOU,SAC1E,IAAIo5M,GAAW,EAgCf,OA/BI5uM,GAAQqb,WACRuzL,GAAW,EACXp6M,KAAKM,OAAO82mB,WAAY,GAE5Bp3mB,KAAK6qmB,eAAiB/+kB,GAAM48G,aACxB1nI,QAAShB,KAAKsnmB,YACdvte,QAASqgF,GAvOJ,yCAuOgCitZ,KAAuBA,IAC5DpkmB,YAAcgkB,YAAajnB,KAAKM,OAAO8smB,uBACxCptmB,KAAKM,OAAOa,eACfiE,GAAQpF,KAAK6qmB,eAAehwlB,WAAY7a,KAAKunmB,cAC7C1imB,GAAS7E,KAAKunmB,cAAetnmB,EAAK24J,cAClCl1J,EAAW1D,KAAKsnmB,aACZh9e,gBAAiB,QACjBswC,YAAa56J,KAAKM,OAAOU,QAAQsC,GAAK,WACtCqO,KAAQ,UACRk5G,wBAAyB,KACzB5nG,aAAgB,MAChBC,YAAe,MACfC,eAAkB,MAClBC,WAAc,UAElBpjB,KAAKqtmB,iBAAmBrtmB,KAAKsnmB,YAAYjzlB,cAAc1R,cAAc,IAAMwzJ,KACtE3qJ,GAAQqb,UAAY7mB,KAAKqtmB,mBAC1B9nmB,GAAanB,IAAIpE,KAAKqtmB,iBAAkB,YAAartmB,KAAKiqJ,UAAWjqJ,MACrEA,KAAKqtmB,iBAAiB3omB,MAAMC,WAAa,UAE7CY,GAAanB,IAAIpE,KAAKsnmB,YAAa,QAAStnmB,KAAKM,OAAOitmB,QAASvtmB,KAAKM,QACtEiF,GAAanB,IAAIpE,KAAKsnmB,YAAa,QAAStnmB,KAAKM,OAAO01mB,MAAOh2mB,KAAKM,QACpEiF,GAAanB,IAAIpE,KAAKsnmB,YAAa,UAAWtnmB,KAAKM,OAAOq2jB,UAAW32jB,KAAKM,QAC1EiF,GAAanB,IAAIpE,KAAKsnmB,YAAa,OAAQtnmB,KAAKmqmB,OAAQnqmB,MACxDA,KAAKM,OAAOutmB,gBAAmB7tmB,KAAK6qmB,eAAehwlB,UAAuB,cAAEjP,wBAAwBmK,OAC7F/V,KAAK6qmB,iBAIpBoR,EAAkB7gnB,UAAU6ymB,gBAAkB,SAAUptmB,GACpDb,KAAKM,OAAOqpmB,YACZtlmB,GAAa7D,SAASuL,KAAM/L,KAAKM,OAAO66H,SAASn6H,SAhQnC,sBAkQlBi7mB,EAAkB7gnB,UAAU6uJ,UAAY,SAAUppJ,GAC9Cb,KAAKM,OAAO+zmB,mBAAmBt3mB,MAAQ,GACvCiD,KAAKM,OAAOotmB,eACZ1tmB,KAAKM,OAAOizmB,iBAAiB,MAC7BvzmB,KAAKqtmB,iBAAiB3omB,MAAMC,WAAa,SACzC3E,KAAKsnmB,YAAYplmB,QACjBlC,KAAKu8mB,WAAW17mB,GAChBA,EAAE8kB,kBAENs2lB,EAAkB7gnB,UAAUihnB,mBAAqB,WAC7Cr8mB,KAAKM,OAAO66H,SAASn6H,QAAQ8C,UAAUM,IA3QlC,gBA4QLpE,KAAKM,OAAO66H,SAASn6H,QAAQ8C,UAAUM,IA/Q5B,uBAgRXpE,KAAKM,OAAO66H,SAASjnH,UAAakC,EAAG,EAAGC,EAAG,GAC3CrW,KAAKM,OAAO66H,SAAS3zE,WACrB9jD,EAAW1D,KAAKM,OAAO66H,SAASn6H,SAAW0D,MAAO,2CAClDf,GAAUnD,SAASuL,KAAM/L,KAAKM,OAAO66H,SAASn6H,SAjRhC,qBAkRdhB,KAAK+tmB,uBACL/tmB,KAAKgumB,gBAAkBhumB,KAAK6qmB,eAAehwlB,UAAUlY,cAAc,gBACnE3C,KAAKqtmB,iBAAmBrtmB,KAAK6qmB,eAAehwlB,UAAUlY,cAAc,IAAMwzJ,IAC1En2J,KAAKqtmB,iBAAiB3omB,MAAMC,WAAa,SACzCY,GAAanB,IAAIpE,KAAKgumB,gBAAiB,QAAShumB,KAAKiumB,gBAAiBjumB,MACtEuF,GAAanB,IAAIpE,KAAKqtmB,iBAAkB,QAASrtmB,KAAKiqJ,UAAWjqJ,OAErEi8mB,EAAkB7gnB,UAAU2ymB,qBAAuB,WAC/C,IAAIF,EAAkB7tmB,KAAKsnmB,YAAYjzlB,cAAczI,wBAAwBmK,OAC7E/V,KAAKM,OAAO66H,SAASn6H,QAAQ0D,MAAMsrD,UAAY,OAC/ChwD,KAAKM,OAAO66H,SAASn6H,QAAQ0D,MAAMsR,MAAQ,OAC3ChW,KAAKM,OAAO0oG,KAAKtkG,MAAMsrD,UAAap0D,OAAO0d,YAAcu0lB,EAAmB,KAC5E7tmB,KAAKM,OAAO0oG,KAAKtkG,MAAMqR,OAAUna,OAAO0d,YAAcu0lB,EAAmB,KACzE,IAAIW,EAAexumB,KAAKsnmB,YAAYjzlB,cAAc1R,cAAc,IAAMwzJ,IACtE9wJ,EAAOrF,KAAKsnmB,aACZkH,EAAan6lB,cAAcnP,aAAalF,KAAKsnmB,YAAakH,IAE9DyN,EAAkB7gnB,UAAU8oI,cAAgB,WAGxC,OAFAlkI,KAAKM,OAAO+zmB,mBAAqBr0mB,KAAKsnmB,YACtCtnmB,KAAKqtmB,iBAAiB3omB,MAAMC,WAAsD,KAAzC3E,KAAKM,OAAO+zmB,mBAAmBt3mB,MAAe,SAAW,UAC3FiD,KAAKM,OAAO+zmB,mBAAmBt3mB,OAE1Ck/mB,EAAkB7gnB,UAAU+umB,OAAS,SAAUtpmB,GAC3C,IAAIsG,EACJ,IAAInH,KAAKM,OAAOw9G,UAShB,GANItyG,GAAQyc,OACR9gB,GAAU1J,EAAkBoD,IAAMA,EAAEsG,QAEnCqE,GAAQyc,OACT9gB,GAAU1J,EAAkBoD,IAAMA,EAAE29I,eAEpCh+I,SAASuL,KAAK5H,SAASnE,KAAKM,OAAO66H,SAASn6H,UAAYhB,KAAKM,OAAO66H,SAASn6H,QAAQmD,SAASgD,KAAYqE,GAAQyc,KAClHjoB,KAAKsnmB,YAAYplmB,YADrB,CAIA,GAAIlC,KAAKM,OAAOiymB,kBAIZ,OAHA1xmB,EAAE8kB,iBACF3lB,KAAKsnmB,YAAYplmB,aACjBlC,KAAKM,OAAOiymB,mBAAoB,GAGhC/xmB,SAASuL,KAAK5H,SAASnE,KAAKM,OAAO66H,SAASn6H,WAAahB,KAAKM,OAAO66H,SAASn6H,QAAQ8C,UAAUK,SAAS,mBACzGnE,KAAKM,OAAO4mmB,YAAa,EACzBlnmB,KAAKM,OAAO+0mB,iBAAiBx0mB,EAAGb,KAAKM,OAAOvD,MAAOiD,KAAKM,OAAOqzH,YAC/D3zH,KAAKM,OAAOqT,cAAc3T,KAAKM,OAAOsnmB,cAAe,WAErDpnmB,SAASuL,KAAK5H,SAASnE,KAAKM,OAAO66H,SAASn6H,WAC3ChB,KAAKM,OAAO66H,SAASn6H,QAAQ8C,UAAUK,SAAS,mBACjDnE,KAAKM,OAAO4mmB,YAAa,EACzBlnmB,KAAKM,OAAO0gE,eAAel9D,UAAUS,OAnUrC,iBAoUAvE,KAAKM,OAAOqmB,QAAQ,QACpB3mB,KAAKM,OAAOu5M,SAAU,IAEtBr5M,SAASuL,KAAK5H,SAASnE,KAAKM,OAAO66H,SAASn6H,UAC3ChB,KAAKM,OAAO66H,SAASn6H,QAAQ8C,UAAUK,SAAS,kBAAqBqH,GAAQqb,UAC9E7mB,KAAKM,OAAOqpmB,cAGpBsS,EAAkB7gnB,UAAUowmB,gBAAkB,SAAU3qmB,GACpD,IAAIsG,EAAStG,EAAEsG,QACV1J,EAAkBuC,KAAKM,OAAO66H,WAAat1H,EAAQsB,EAAQ,IAAMnH,KAAKM,OAAO66H,SAASn6H,QAAQsC,KAC/FzC,EAAE8kB,kBAECloB,EAAkBuC,KAAKM,OAAO66H,WAAat1H,EAAQsB,EAAQ,IAAMnH,KAAKM,OAAO66H,SAASn6H,QAAQsC,KAChGtD,KAAKM,OAAO0gE,eAAe78D,SAAStD,EAAEsG,QAUvCnH,KAAKM,OAAOiymB,mBAAqB/mmB,GAAQyc,MAA8B,SAAtBzc,GAAQsb,KAAKyQ,OAAqB/2B,SAAS+4H,gBAAkBv5H,KAAKsnmB,aAT/GtnmB,KAAKM,OAAO0gE,eAAel9D,UAAUK,SAAS2+lB,GAAoB5gmB,QAAUlC,KAAKM,OAAO8lK,iBACxFpmK,KAAKM,OAAO4mmB,YAAa,EACzBlnmB,KAAKM,OAAOiymB,mBAAoB,EAChCvymB,KAAKM,OAAOqpmB,YACZ3pmB,KAAKM,OAAO6pmB,SACZnqmB,KAAKM,OAAOu5M,SAAU,GAMzB75M,KAAKM,OAAO0gE,eAAe78D,SAAStD,EAAEsG,UAAWnH,KAAKM,OAAO0gE,eAAel9D,UAAUK,SAAS,kBAC/FnE,KAAKM,OAAO8lK,eACbpmK,KAAKM,OAAO6pmB,OAAOtpmB,GAEnBb,KAAKsnmB,cAAgBngmB,GACrBnH,KAAKsnmB,YAAYplmB,SAGzB+5mB,EAAkB7gnB,UAAUkhnB,SAAW,SAAUz7mB,GAC7Cb,KAAKM,OAAO0gE,eAAel9D,UAAUS,OAvWjC,iBAwWAvE,KAAKM,OAAOw9G,WAAyB,UAAZj9G,EAAE9D,MAC3BiD,KAAKM,OAAOw9G,WAAY,GAGZ,UAAZj9G,EAAE9D,QACFiD,KAAKsnmB,YAAYplmB,QACjBlC,KAAKM,OAAOmrJ,cACZlmJ,GAAahB,OAAOvE,KAAKM,OAAO0oG,KAAM,UAAWhpG,KAAKM,OAAOq2jB,YAEjD,UAAZ91jB,EAAE9D,QACFiD,KAAKsnmB,YAAYvqmB,MAAQ,GACzBiD,KAAKqtmB,iBAAiB3omB,MAAMC,WAAa,YAGjDs3mB,EAAkB7gnB,UAAUo6mB,eAAiB,SAAU30mB,GACnC,UAAZA,EAAE9D,OAA0E,SAArDiD,KAAK08mB,eAAe7pmB,aAAa,kBACxD7S,KAAKwlH,YAAYxlH,KAAK08mB,eAAgB77mB,EAAE9D,MAAO,KAAM,MAAM,GAC3DiD,KAAKu+G,WAAU,IAEH,YAAZ19G,EAAE9D,QACFiD,KAAKwlH,YAAYxlH,KAAK08mB,eAAgB77mB,EAAE9D,MAAO,KAAM,MAAM,GAC3DiD,KAAKu+G,cAGb09f,EAAkB7gnB,UAAUmjH,UAAY,SAAUolU,GAC9C,GAAkC,eAA9B3jb,KAAKM,OAAOs8mB,eAAkE,iBAAhC58mB,KAAKM,OAAOu8mB,gBAAoC,CAC9F,IAAI5tmB,EAAW00a,EAAW3jb,KAAKM,OAAOu8mB,gBAAkB78mB,KAAKM,OAAOs8mB,cAEpE58mB,KAAK28mB,cAAc1gmB,YAAc,GAEjC,IAAK,IAAI7d,EAAK,EAAGyE,EADAmM,GAAQC,EACHgrD,KAAoB77D,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC5D,IAAI6f,EAAOpb,EAAGzE,GACd4B,KAAK28mB,cAAc1gmB,YAAcgC,EAAKhC,iBAGzC,CACD,IACIg9G,EAAO,IAAI7a,GAAK,aADDw+f,cAAe,aAAcC,gBAAiB,gBACpB78mB,KAAKM,OAAO0N,QACzDhO,KAAK28mB,cAAc1gmB,YAAc0na,EAAW1qT,EAAKh/C,YAAY,mBAAqBg/C,EAAKh/C,YAAY,mBAG3GgiiB,EAAkB7gnB,UAAUohnB,cAAgB,SAAUv8mB,GAC9CA,EAAKg5I,GAAGn1I,UAAUK,SAAS,YAC3BnE,KAAKk8mB,SAAS13mB,KAAKvE,EAAKg5I,GAAGr3I,WAAU,IAGrC5B,KAAKk8mB,SAASvzlB,OAAO1oB,EAAK6R,MAAO,IAGzCmqmB,EAAkB7gnB,UAAUmhnB,WAAa,SAAUt8mB,GAC/C,GAAID,KAAKM,OAAOu3mB,uBAAyBp6mB,EAAkBuC,KAAKM,OAAOvD,OAAQ,CAC3E,IAAI+/mB,EAAgB98mB,KAAKM,OAAOs3M,UAAUp2M,iBAAiB,eAAehF,OAEtEugnB,EAAQ/8mB,KAAKM,OAAOa,cAAc,MAClCkC,UAAW,iCAECrD,KAAKM,OAAOa,cAAc,OACtC27mB,EAAgB,IAChB13mB,EAAOpF,KAAKM,OAAOs3M,UAAUp2M,iBAAiB,eAAgBu7mB,GAE9Dp5mB,EADQ3D,KAAKM,OAAOs3M,UAAUp2M,iBAAiB,eAC/B,kBAChBqD,GAASk4mB,GAAQ/8mB,KAAKM,OAAO0oG,OAEjChpG,KAAKM,OAAO8ymB,yBAGb6I,KCvbP1mH,GAAiC,WAIjC,SAASA,EAAgB/G,GACrB,IAAIzuf,EAAQC,KACZA,KAAK2sjB,YAAc,GACnB3sjB,KAAKg9mB,mBAAgB9hnB,EACrB8E,KAAKi9mB,sBAAmB/hnB,EACxB8E,KAAKk9mB,sBAAmBhinB,EACxB8E,KAAKg9hB,aAILh9hB,KAAKm9mB,gBAAkB,SAAU9gnB,GAC7B,GAAsB,KAAlBA,EAAM8rB,QAAV,CAMmBpoB,EAAMyjgB,MAAMvtb,UAAUjnD,KAAzC,IACIoulB,EAAWr9mB,EAAMs9mB,WAAWtgnB,MACe,SAA3CqgnB,EAAS/4lB,UAAU,EAAG,GAAGzO,gBACzB7V,EAAMs9mB,WAAWtgnB,MAAQ,UAAYqgnB,GAEf,KAAtBr9mB,EAAM4sjB,cACN5sjB,EAAMu9mB,eAAevgnB,MAAQqgnB,GAEjCr9mB,EAAMw9mB,kCAbiC,KAA/Bx9mB,EAAMu9mB,eAAevgnB,OAA2C,KAA3BgD,EAAMs9mB,WAAWtgnB,OACtDgD,EAAMy9mB,qBAiBlBx9mB,KAAKy9mB,oBAAsB,WACvB19mB,EAAM4sjB,YAAc5sjB,EAAMu9mB,eAAevgnB,MACzCgD,EAAMw9mB,+BAKVv9mB,KAAK09mB,oBAAsB,WACvB39mB,EAAMy9mB,qBAKVx9mB,KAAK29mB,oBAAsB,WACvB59mB,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAM89mB,cAKV79mB,KAAK89mB,oBAAsB,WACvB/9mB,EAAMyjgB,MAAMj0Y,cACZxvH,EAAMi9hB,aACN,IAAK,IAAI9giB,EAAI,EAAGA,EAAI6D,EAAMyjgB,MAAMw5B,UAAU1/hB,KAAKd,OAAQN,IAAK,CACxD,IAAI0hiB,EAAW79hB,EAAMyjgB,MAAMw5B,UAAU1/hB,KAAKpB,GACZ,IAA1B0hiB,EAASr/hB,QAAQ,MACjBwB,EAAMi9hB,UAAUx4hB,KAAKo5hB,GAG7B,IAAIh+B,EAAa7/f,EAAMyjgB,MAAMvtb,UAAU+ic,oBACvC,GAAKv7gB,EAAkBmigB,GAcnB7/f,EAAM4sjB,YAAc5sjB,EAAMyjgB,MAAMvtb,UAAU25D,SAAQ,GACxB,KAAtB7vI,EAAM4sjB,eACyD,IAA3D5sjB,EAAM4sjB,YAAYpujB,QAAQmrB,OAAOC,aAAa,UACT,IAArC5pB,EAAM4sjB,YAAYpujB,QAAQ,QAA0D,IAAzCwB,EAAM4sjB,YAAY5td,YAAY,QACnB,IAAlDh/F,EAAM4sjB,YAAYtrjB,MAAM,GAAI,GAAG9C,QAAQ,OAC3CwB,EAAMu9mB,eAAevgnB,MAAQ,4BAC7BgD,EAAMu9mB,eAAe34f,UAAW,GAGhC5kH,EAAMu9mB,eAAevgnB,MAAQgD,EAAM4sjB,iBAvBX,CAChC,IAAKlvjB,EAAkBmigB,EAAW2S,gBAAiB,CAC/C,IAEIoyD,EAAW5kkB,EAAMyjgB,MAAMvtb,UAAUw2e,wBAAwB7sD,EAAW2S,eAAetod,KAAKgtc,UAAW2I,EAAW2S,eAAgB3S,EAAWD,UAAU,OAF1IzkgB,GAGb6E,EAAM4sjB,YAAcgY,EAAShY,YAC7B5sjB,EAAMu9mB,eAAe34f,SAAWggd,EAASjY,cAE7C3sjB,EAAMu9mB,eAAevgnB,MAAQgD,EAAM4sjB,YACnC,IAAI/8f,EAAO7vD,EAAMyjgB,MAAMvtb,UAAU8ke,YAAYn7C,GAC7C7/f,EAAMs9mB,WAAWtgnB,MAAQgD,EAAMi9mB,cAAgBptjB,EAC/C7vD,EAAMyjgB,MAAMo6G,OAAO9yhB,OAAS/qF,EAAMg+mB,SAAS9jiB,YAAY,kBAgB3Dl6E,EAAMi+mB,YAAYt5mB,MAAMosC,QAAU,OAClC/wC,EAAMk+mB,YAAYv5mB,MAAMosC,QAAU,QAClC/wC,EAAMs9mB,WAAW34mB,MAAMosC,QAAU,QACjC/wC,EAAMm9mB,iBAAiB1qmB,SAAU,EACjCzS,EAAMk9mB,iBAAiB50iB,WAAatoE,EAAMyjgB,MAAMw5B,UAAU1/hB,KAC1DyC,EAAMm+mB,aAAe19mB,SAASkN,uBAAuB,kBAAkB,GACvE3N,EAAMw9mB,8BACNx9mB,EAAMs9mB,WAAWn7mB,QACiC,SAA9CnC,EAAMyjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,UAClC/wC,EAAMyjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,QAAU,SAMpD9wC,KAAKm+mB,qBAAuB,WACxBp+mB,EAAM89mB,aACN99mB,EAAMyjgB,MAAMj0Y,eAGhBvvH,KAAKo+mB,oBAAsB,SAAUn+mB,GAC7BA,EAAKuS,SACLzS,EAAMi+mB,YAAYt5mB,MAAMosC,QAAU,QAClC/wC,EAAMk9mB,iBAAiB50iB,WAAatoE,EAAMi9hB,UAC1Cj9hB,EAAMk+mB,YAAYv5mB,MAAMosC,QAAU,OAClC/wC,EAAMs9mB,WAAW34mB,MAAMosC,QAAU,SAGjC/wC,EAAMi+mB,YAAYt5mB,MAAMosC,QAAU,OAClC/wC,EAAMk+mB,YAAYv5mB,MAAMosC,QAAU,QAClC/wC,EAAMs9mB,WAAW34mB,MAAMosC,QAAU,UAGzC9wC,KAAKq+mB,iBAAmB,SAAUp+mB,GACO,KAAjCF,EAAMk9mB,iBAAiBlgnB,QACvBgD,EAAMm+mB,aAAav5f,UAAW,IAGtC3kH,KAAKwjgB,MAAQhV,EAsJjB,OAjJA+G,EAAgBn6f,UAAU2mC,cAAgB,WACtC,MAAO,mBAKXwzd,EAAgBn6f,UAAUi1f,oBAAsB,SAAU0mB,GACtD,IACIzzgB,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,oBACxChkJ,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,mBACxD,IAAIwX,EAAY1Z,EAAc,OAC1BwrjB,EAAcxrjB,EAAc,OAASkC,UAAW,2BAA4BrB,UAAW+0gB,EAAW98b,YAAY,qBAClHj6E,KAAKs9mB,eAAiBn8mB,EAAc,SAAWmC,GAAItD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,gBAAiB3gJ,UAAW,qCAC9GrD,KAAKs9mB,eAAe7gnB,iBAAiB,QANtBuD,KAMwCy9mB,qBACvD5imB,EAAUlZ,YAAYgrjB,GACtB9xiB,EAAUlZ,YAAY3B,KAAKs9mB,gBAC3Bt9mB,KAAKi+mB,YAAc98mB,EAAc,OAASkC,UAAW,2BAA4BrB,UAAW+0gB,EAAW98b,YAAY,aACnHj6E,KAAKq9mB,WAAal8mB,EAAc,SAAWmC,GAAItD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,YAAa3gJ,UAAW,mCAAoCI,OAAS66mB,UAAW,UAC9Jt+mB,KAAKq9mB,WAAW5gnB,iBAAiB,QAXlBuD,KAWoCm9mB,iBACnDn9mB,KAAKq9mB,WAAW5gnB,iBAAiB,QAZlBuD,KAYoCm9mB,iBACnDtimB,EAAUlZ,YAAY3B,KAAKi+mB,aAC3BpjmB,EAAUlZ,YAAY3B,KAAKq9mB,YAC3Br9mB,KAAKg+mB,YAAc78mB,EAAc,OAASoC,OAAQ,kBAClD,IAAIg7mB,EAAep9mB,EAAc,OAASkC,UAAW,2BAA4BrB,UAAW+0gB,EAAW98b,YAAY,cAC/GukiB,EAAsBr9mB,EAAc,OAASkC,UAAW,gCAExDo7mB,EAAgBt9mB,EAAc,SAAWmC,GAAI,sCACjDk7mB,EAAoB78mB,YAAY88mB,GAEhCz+mB,KAAKi9mB,iBAAmB,IAAIpV,IAAex/hB,cAAgB5nD,OAAQzgB,KAAKq+mB,iBAAkBrkZ,YAAa,QAAShkN,MAAO,QAASmulB,kBAAmBptF,EAAW98b,YAAY,wBAC1Kj6E,KAAKi9mB,iBAAiBpskB,SAAS4tkB,GAC/Bz+mB,KAAKg+mB,YAAYr8mB,YAAY48mB,GAC7Bv+mB,KAAKg+mB,YAAYr8mB,YAAY68mB,GAC7B3jmB,EAAUlZ,YAAY3B,KAAKg+mB,aAE3B,IAAIU,EAAmBv9mB,EAAc,OAASkC,UAAW,2DACrDs7mB,EAAgBx9mB,EAAc,SAAWsC,OAASiD,KAAM,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,YAAaD,UAAWrD,KAAKmH,OAAO7D,GAAK,mBACxIo7mB,EAAiB/8mB,YAAYg9mB,GAC7B3+mB,KAAKk9mB,iBAAmB,IAAI53f,IAAWjyG,MAAO0jgB,EAAW98b,YAAY,iBAAkBx5D,OAAQzgB,KAAKo+mB,sBACpGp+mB,KAAKk9mB,iBAAiBrskB,SAAS8tkB,GAC/B9jmB,EAAUlZ,YAAY+8mB,GACtB1+mB,KAAKmH,OAAOxF,YAAYkZ,IAK5B06e,EAAgBn6f,UAAUo8H,KAAO,WAC7Bx3H,KAAK+9mB,SAAW,IAAI3/f,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eAC5D7rc,KAAK+9mB,SAASx/f,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACzCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAKqwf,oBAAoBrwf,KAAK+9mB,UAElC/9mB,KAAKwjgB,MAAMo6G,OAAO9yhB,OAAS9qF,KAAK+9mB,SAAS9jiB,YAAY,oBACrDj6E,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAK09mB,oBACZ1jf,aAAe19F,QAASt8B,KAAK+9mB,SAAS9jiB,YAAY,MAAOhnE,SAAU,wBAAyBwxG,WAAW,KAGvGwV,MAAOj6H,KAAK29mB,oBACZ3jf,aAAe19F,QAASt8B,KAAK+9mB,SAAS9jiB,YAAY,UAAWhnE,SAAU,2BAE/EjT,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAK89mB,oBACpC99mB,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAKm+mB,qBAC/Bn+mB,KAAKwjgB,MAAMo6G,OAAOpmf,QAKtB+9X,EAAgBn6f,UAAUusF,KAAO,WAC7B3nF,KAAKm+mB,wBAET5oH,EAAgBn6f,UAAUminB,4BAA8B,WAC/C9/mB,EAAkBuC,KAAKk+mB,gBAExBl+mB,KAAKk+mB,aAAav5f,SAAsC,KAA1B3kH,KAAKq9mB,WAAWtgnB,OAA8C,KAA9BiD,KAAKs9mB,eAAevgnB,QAM1Fw4f,EAAgBn6f,UAAUoinB,kBAAoB,WAC1C,IAAI7wD,EAAc3sjB,KAAKs9mB,eAAevgnB,MAAMkT,OACxC2umB,EAAU5+mB,KAAKq9mB,WAAWtgnB,MAAMkT,OAChC2zjB,GAAa,EAKjB,GAJKnmkB,EAAkBuC,KAAKi9mB,iBAAiBlgnB,QAA0C,KAAhCiD,KAAKi9mB,iBAAiBlgnB,QACzE6hnB,EAAU5+mB,KAAKi9mB,iBAAiBlgnB,MAChC6mkB,GAAa,GAED,KAAZg7C,EAAJ,CAUA,GALIjyD,EADgB,KAAhBA,GAAkC,KAAZiyD,EACRA,EAGA5+mB,KAAKs9mB,eAAevgnB,MAEjCU,EAAkBuC,KAAKg9mB,eAGvB,CACD,IAAIz4mB,EAASvE,KAAKwjgB,MAAMvtb,UAAUjnD,OAAS29hB,IAAgB3sjB,KAAKs9mB,eAAe34f,SAC/E3kH,KAAKwjgB,MAAMA,MAAM1U,aAAai1E,gBAAgB66C,EAASjyD,EAAapojB,EAAQq/jB,QAJ5E5jkB,KAAKwjgB,MAAMA,MAAM1U,aAAa0pB,cAAcx4gB,KAAKwjgB,MAAMvtb,UAAW2oiB,EAASjyD,EAAaiX,GAM5F5jkB,KAAKwjgB,MAAMo6G,OAAOj2hB,OAClB3nF,KAAKg9mB,mBAAgB9hnB,OAjBjB8E,KAAKwjgB,MAAMo6G,OAAOj2hB,QAuB1B4ta,EAAgBn6f,UAAUyinB,WAAa,WACnC79mB,KAAKs9mB,eAAevgnB,MAAQ,GAC5BiD,KAAKq9mB,WAAWtgnB,MAAQ,GACxBiD,KAAK2sjB,YAAc,GACnB3sjB,KAAKs9mB,eAAe34f,UAAW,EAC/B3kH,KAAKg9hB,cAKTznC,EAAgBn6f,UAAUiX,QAAU,WAC5BrS,KAAKs9mB,iBACLt9mB,KAAKs9mB,eAAet7mB,UAAY,GAChChC,KAAKs9mB,oBAAiBpinB,GAEtB8E,KAAKq9mB,aACLr9mB,KAAKq9mB,WAAWhpmB,cAAc/O,YAAYtF,KAAKq9mB,YAC/Cr9mB,KAAKq9mB,gBAAaninB,GAEtB8E,KAAKwjgB,WAAQtogB,EACRuC,EAAkBuC,KAAKmH,UACpBnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/CnH,KAAKmH,OAAOnF,UAAY,GACxBhC,KAAKmH,YAASjM,IAGfq6f,KCzRPC,GAA6B,WAI7B,SAASA,EAAYhH,GACjB,IAAIzuf,EAAQC,KAIZA,KAAK6+mB,iBAAmB,SAAUxinB,GACR,KAAlBA,EAAM8rB,SAC2B,KAA7BpoB,EAAM++mB,aAAa/hnB,OAAgD,KAAhCgD,EAAMg/mB,gBAAgBhinB,OACzDgD,EAAMi/mB,sBAOlBh/mB,KAAK29mB,oBAAsB,WACvB59mB,EAAMyjgB,MAAMo6G,OAAOj2hB,QAKvB3nF,KAAKg/mB,mBAAqB,WACtB,IAAI3gY,EAAWt+O,EAAMk/mB,gBAAgBlinB,MACjCuhP,EAAcv+O,EAAMm/mB,kBAAkBninB,MACpCU,EAAkB4gP,IAAa5gP,EAAkB6gP,IACnDv+O,EAAMyjgB,MAAMA,MAAM8Q,OAAOgE,YAAYj6R,EAAUC,GAEnDv+O,EAAMyjgB,MAAMo6G,OAAOj2hB,QAEvB3nF,KAAKwjgB,MAAQhV,EA2HjB,OAzHAgH,EAAYp6f,UAAU2mC,cAAgB,WAClC,MAAO,eAKXyzd,EAAYp6f,UAAU01f,gBAAkB,SAAUimB,GAC9C,IACIzzgB,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,gBACxChkJ,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,sBACxD,IAAI21e,EAAY73e,EAAc,OAC1Bg+mB,EAAkBh+mB,EAAc,OAChCkC,UAAW,mCAAoCrB,UAAW+0gB,EAAW98b,YAAY,uBAEjFmliB,EAAcj+mB,EAAc,OAASkC,UAAW,gCACpDrD,KAAK++mB,gBAAkB59mB,EAAc,SACjCsC,OAASiD,KAAM,QAAUpD,GAAItD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,YAEhEo7d,EAAYz9mB,YAAY3B,KAAK++mB,iBAC7B,IAAIM,EAAel+mB,EAAc,OAC7BkC,UAAW,mCAAoCrB,UAAW+0gB,EAAW98b,YAAY,oBAEjFqliB,EAAWn+mB,EAAc,OAASkC,UAAW,gCACjDrD,KAAK8+mB,aAAe39mB,EAAc,SAC9BsC,OAASiD,KAAM,QAAUpD,GAAItD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,QAEhEs7d,EAAS39mB,YAAY3B,KAAK8+mB,cAC1B9lI,EAAUr3e,YAAYw9mB,GACtBnmI,EAAUr3e,YAAYy9mB,GACtBpmI,EAAUr3e,YAAY09mB,GACtBrmI,EAAUr3e,YAAY29mB,GACtBt/mB,KAAKmH,OAAOxF,YAAYq3e,GACxBh5e,KAAK++mB,gBAAgBtinB,iBAAiB,QAzBvBuD,KAyByC6+mB,kBACxD7+mB,KAAK8+mB,aAAarinB,iBAAiB,QA1BpBuD,KA0BsC6+mB,kBACrD7+mB,KAAKi/mB,gBAAkB,IAAIz1e,IACvBjrG,OAAQ,IACRxhC,MAAO,EACPqjB,IAAK,EACL9T,IAAK,MACL2lG,mBAAmB,IAEvBjyG,KAAKi/mB,gBAAgBpukB,SAAS7wC,KAAK8+mB,cACnC9+mB,KAAKk/mB,kBAAoB,IAAI11e,IACzBjrG,OAAQ,IACRxhC,MAAO,EACPqjB,IAAK,EACL9T,IAAK,GACL2lG,mBAAmB,IAEvBjyG,KAAKk/mB,kBAAkBrukB,SAAS7wC,KAAK++mB,kBAKzCvpH,EAAYp6f,UAAUo8H,KAAO,WACzB,IAAIu/Y,EAAa,IAAI34Z,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eAC7DkrE,EAAWx4Z,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACtCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAK8wf,gBAAgBimB,GAEwB,SAA7C/2gB,KAAKwjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,UACjC9wC,KAAKwjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,QAAU,QAE/C9wC,KAAKwjgB,MAAMo6G,OAAO9yhB,OAASisb,EAAW98b,YAAY,gBAClDj6E,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAKwjgB,MAAMj0Y,YAC1CvvH,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAKg/mB,mBACZhlf,aAAe19F,QAASy6e,EAAW98b,YAAY,MAAOhnE,SAAU,oBAAqBwxG,WAAW,KAGhGwV,MAAOj6H,KAAK29mB,oBACZ3jf,aAAe19F,QAASy6e,EAAW98b,YAAY,UAAWhnE,SAAU,2BAE5EjT,KAAKi/mB,gBAAgBlinB,MAAQ,EAC7BiD,KAAKk/mB,kBAAkBninB,MAAQ,EAC/BiD,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAKwjgB,MAAMj0Y,YACrCvvH,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOpmf,QAKtBg+X,EAAYp6f,UAAUiX,QAAU,WAwB5B,GAvBIrS,KAAK++mB,kBACD/+mB,KAAK++mB,gBAAgB1qmB,eACrBrU,KAAK++mB,gBAAgB1qmB,cAAc/O,YAAYtF,KAAK++mB,iBAExD/+mB,KAAK++mB,qBAAkB7jnB,GAEvB8E,KAAK8+mB,eACD9+mB,KAAK8+mB,aAAazqmB,eAClBrU,KAAK8+mB,aAAazqmB,cAAc/O,YAAYtF,KAAK8+mB,cAErD9+mB,KAAK8+mB,kBAAe5jnB,GAEpB8E,KAAKk/mB,oBACLl/mB,KAAKk/mB,kBAAkB7smB,UACvBrS,KAAKk/mB,uBAAoBhknB,GAEzB8E,KAAKi/mB,kBACLj/mB,KAAKi/mB,gBAAgB5smB,UACrBrS,KAAKi/mB,qBAAkB/jnB,GAE3B8E,KAAK++mB,qBAAkB7jnB,EACvB8E,KAAK8+mB,kBAAe5jnB,EACpB8E,KAAKwjgB,WAAQtogB,GACRuC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIjL,EAAI,EAAGA,EAAI8D,KAAKmH,OAAOmK,WAAW9U,OAAQN,IAC/C8D,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAWpV,IAC/CA,IAEJ8D,KAAKmH,YAASjM,IAGfs6f,KC3JPC,GAAgC,WAIhC,SAASA,EAAejH,GACpB,IAAIzuf,EAAQC,KACZA,KAAKu/mB,YAAc,WACfx/mB,EAAMyjgB,MAAMA,MAAM1U,aAAa6rF,eAAe56kB,EAAMy/mB,aAAazinB,OACjEgD,EAAMyjgB,MAAMo6G,OAAOj2hB,QAGvB3nF,KAAKy/mB,cAAgB,SAAUx/mB,GAC3BF,EAAMy/mB,aAAazinB,MAAQkD,EAAK+uB,KAEhC,IAAIjyB,EAAQyD,SAAS2uB,eAAe,qBACpCpyB,EAAMmpB,kBAAkB,EAAGjmB,EAAK+uB,KAAKxyB,QACrCO,EAAMmF,SAEVlC,KAAK0/mB,aAAe,WAChB3/mB,EAAMyjgB,MAAMvtb,UAAU45e,eAAe9vjB,EAAMy/mB,aAAazinB,QAE5DiD,KAAK+6kB,eAAiB,WAClBh7kB,EAAMyjgB,MAAMA,MAAM1U,aAAaisF,eAAeh7kB,EAAMy/mB,aAAazinB,OACjEgD,EAAMy3H,QAEVx3H,KAAKwjgB,MAAQhV,EAqGjB,OAhGAiH,EAAer6f,UAAU2mC,cAAgB,WACrC,MAAO,kBAKX0zd,EAAer6f,UAAUuknB,mBAAqB,SAAU5oG,EAAYimB,GAChE,IACI15hB,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,mBACxChkJ,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,kBACxD,IACIu8mB,EAAYz+mB,EAAc,OAASa,UADrB+0gB,EAAW98b,YAAY,iBAAmB,IACG52E,UAAW,yBAC1ErD,KAAKmH,OAAOxF,YAAYi+mB,GACxB,IAAIC,EAAY1+mB,EAAc,OAASkC,UAAW,sBAClDrD,KAAKmH,OAAOxF,YAAYk+mB,GACxB,IAAItlI,EAAYp5e,EAAc,OAASkC,UAAW,oBAClDw8mB,EAAUl+mB,YAAY44e,GACtB,IAAIulI,EAAa3+mB,EAAc,OAASkC,UAAW,0BACnDk3e,EAAU54e,YAAYm+mB,GAEtB9/mB,KAAKw/mB,aAAer+mB,EAAc,SAAWkC,UAAW,mCAAoCC,GAAI,sBAChGtD,KAAKw/mB,aAAah8mB,aAAa,OAAQ,QACvCs8mB,EAAWn+mB,YAAY3B,KAAKw/mB,cAC5B,IAAIO,EAAc5+mB,EAAc,OAASkC,UAAW,yBAA0BC,GAAI,sBAClFi3e,EAAU54e,YAAYo+mB,GACX//mB,KAAKwjgB,MAAMw5B,UAAU1/hB,KAChC0C,KAAKggnB,iBAAmB,IAAIlla,IACxBzyI,WAAY20d,EACZ/phB,SAAU,wBAEdjT,KAAKggnB,iBAAiBnvkB,SAASkvkB,GAC/B//mB,KAAKggnB,iBAAiBvjnB,iBAAiB,SAAUuD,KAAKy/mB,eACtD,IAAIQ,EAAY9+mB,EAAc,OAASkC,UAAW,sBAClDw8mB,EAAUl+mB,YAAYs+mB,GACtB,IAAIC,EAAe/+mB,EAAc,OAASkC,UAAW,yBACrD48mB,EAAUt+mB,YAAYu+mB,GACtB,IAAIC,EAAmBh/mB,EAAc,UAAYa,UAAW,MAAOsB,GAAI,QACvE48mB,EAAav+mB,YAAYw+mB,GACT,IAAI37f,IAASvxG,SAAU,oBAC7B49B,SAASsvkB,GACnBA,EAAiB1jnB,iBAAiB,QAASuD,KAAKu/mB,aAChD,IAAIa,EAAkBj/mB,EAAc,OAASkC,UAAW,4BACxD48mB,EAAUt+mB,YAAYy+mB,GACtB,IAAIC,EAAsBl/mB,EAAc,UAAYa,UAAW,SAAUsB,GAAI,WAC7E88mB,EAAgBz+mB,YAAY0+mB,GACT,IAAI77f,IAASvxG,SAAU,oBAC7B49B,SAASwvkB,GACtBA,EAAoB5jnB,iBAAiB,QAASuD,KAAK+6kB,gBACnD,IAAIulC,EAAgBn/mB,EAAc,OAASkC,UAAW,0BACtD48mB,EAAUt+mB,YAAY2+mB,GACtB,IAAIC,EAAoBp/mB,EAAc,UAAYa,UAAW,QAASsB,GAAI,SAC1Eg9mB,EAAc3+mB,YAAY4+mB,GACT,IAAI/7f,IAASvxG,SAAU,oBAC7B49B,SAAS0vkB,GACpBA,EAAkB9jnB,iBAAiB,QAASuD,KAAK0/mB,eAKrDjqH,EAAer6f,UAAUo8H,KAAO,WAC5B,IAAIwla,EAAYh9hB,KAAKwjgB,MAAMk6B,eACvBqgF,EAAW,IAAI3/f,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eAC3DkyK,EAASx/f,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACpCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QAE5BhO,KAAK2/mB,mBAAmB5B,EAAU/gF,GAElCh9hB,KAAKwjgB,MAAMo6G,OAAO9yhB,OAAS,WAC3B9qF,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAKwjgB,MAAMj0Y,YAC1CvvH,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAKwjgB,MAAMj0Y,YACrCvvH,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAKwkc,cAAcnpc,KAAK2E,MAC/Bg6H,aAAe19F,QAASyhlB,EAAS9jiB,YAAY,UAAWhnE,SAAU,wBAAyBwxG,WAAW,KAE9GzkH,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOpmf,QAEtBi+X,EAAer6f,UAAUopc,cAAgB,WACrCxkc,KAAKwjgB,MAAMo6G,OAAOj2hB,QAKtB8ta,EAAer6f,UAAUiX,QAAU,WAC3BrS,KAAKw/mB,eACLx/mB,KAAKw/mB,aAAaj7mB,SAClBvE,KAAKw/mB,kBAAetknB,GAEpB8E,KAAKggnB,mBACLhgnB,KAAKggnB,iBAAiB3tmB,UACtBrS,KAAKggnB,sBAAmB9knB,IAGzBu6f,KC5HPC,GAAuC,WAIvC,SAASA,EAAsBlH,GAC3B,IAAIzuf,EAAQC,KAIZA,KAAKwgnB,yBAA2B,WAC5BzgnB,EAAMyjgB,MAAMj0Y,cACZxvH,EAAMiiP,WAAWxvO,SAAU,EAC3BzS,EAAMqsS,WAAWznL,UAAW,EAC5B5kH,EAAMqsS,WAAW55R,SAAU,EAC3BzS,EAAMyzgB,UAAUpuf,SAAU,EAC1BrlB,EAAM4vD,UAAUn9C,SAAU,EAC1BzS,EAAM2E,MAAM8N,SAAU,EACtBzS,EAAM+9hB,QAAQtrhB,SAAU,EACxBzS,EAAM+9hB,QAAQn5a,UAAW,EACzB5kH,EAAM0gnB,UAAUr7lB,SAAU,GAK9BplB,KAAK0gnB,0BAA4B,WAC7B3gnB,EAAM4gnB,0BACN5gnB,EAAMyjgB,MAAMj0Y,eAKhBvvH,KAAK29mB,oBAAsB,WACvB59mB,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAM4gnB,2BAGV3gnB,KAAKy/mB,cAAgB,SAAUx/mB,GAC3BF,EAAMy/mB,aAAazinB,MAAQkD,EAAK+uB,KAEhC,IAAIjyB,EAAQyD,SAAS2uB,eAAe,WACpCpyB,EAAMmpB,kBAAkB,EAAGjmB,EAAK+uB,KAAKxyB,QACrCO,EAAMmF,SAEVlC,KAAK0yf,gBAAkB,WACdj1f,EAAkBsC,EAAMyjgB,MAAMA,MAAMzS,oBACrChxf,EAAMyjgB,MAAMA,MAAMzS,kBAAkBv5X,KAAKz3H,EAAMy/mB,aAAazinB,QAGpEiD,KAAK4gnB,qBAAuB,SAAUvknB,GAClC,IACIu2B,KACJ,OAFav2B,EAAMU,OAGf,KAAK,EACD61B,GAAU,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACzD7yB,EAAM8gnB,cAAcjulB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACxD7yB,EAAM8gnB,cAAcjulB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,MACvD7yB,EAAM8gnB,cAAcjulB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,MACtD7yB,EAAM8gnB,cAAcjulB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MACrD7yB,EAAM8gnB,cAAcjulB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,MACpD7yB,EAAM8gnB,cAAcjulB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,MACnD7yB,EAAM8gnB,cAAcjulB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAClD7yB,EAAM8gnB,cAAcjulB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD7yB,EAAM8gnB,cAAcjulB,KAIhC5yB,KAAK6gnB,cAAgB,SAAUC,GAC3B/gnB,EAAMghnB,SAAShknB,MAAQ+jnB,EAAS,GAChC/gnB,EAAMihnB,SAASjknB,MAAQ+jnB,EAAS,GAChC/gnB,EAAMkhnB,SAASlknB,MAAQ+jnB,EAAS,GAChC/gnB,EAAMmhnB,SAASnknB,MAAQ+jnB,EAAS,GAChC/gnB,EAAMohnB,SAASpknB,MAAQ+jnB,EAAS,GAChC/gnB,EAAMqhnB,SAASrknB,MAAQ+jnB,EAAS,GAChC/gnB,EAAMshnB,SAAStknB,MAAQ+jnB,EAAS,GAChC/gnB,EAAMuhnB,SAASvknB,MAAQ+jnB,EAAS,GAChC/gnB,EAAMwhnB,SAASxknB,MAAQ+jnB,EAAS,IAEpC9gnB,KAAK87D,MAAQ,WACT/7D,EAAM0gnB,UAAUr7lB,SAAU,EAC1BrlB,EAAM0gnB,UAAU1jnB,MAAQ,EACxBgD,EAAM+9hB,QAAQn5a,UAAW,EACzB5kH,EAAM+9hB,QAAQtrhB,SAAU,EAExBzS,EAAM8gnB,eADQ,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,OAE3D9gnB,EAAMyhnB,OAAOzknB,MAAQ,MAEzBiD,KAAKyhnB,YAAc,SAAUxhnB,GACzB,IAAIyhnB,EAAezhnB,EAAK25e,WAAW78e,MAE/B2knB,IADQ3hnB,EAAM4hnB,gBAAgB1hnB,EAAK25e,aACQ,KAAjB8nI,EAC1B3hnB,EAAM0gnB,UAAUr7lB,SAAU,GAG1BrlB,EAAM0gnB,UAAUr7lB,SAAU,EAC1BrlB,EAAM6hnB,eAGd5hnB,KAAK6hnB,mBAAqB,SAAU5hnB,GAChC,IAAIyhnB,EAAezhnB,EAAK25e,WAAW78e,MAE/BgD,EAAM0gnB,UAAUr7lB,QADC,KAAjBs8lB,EAMA3hnB,EAAMyhnB,SAAWvhnB,EAAK25e,aACtB75e,EAAM+9hB,QAAQtrhB,SAAU,EACxBzS,EAAM+9hB,QAAQn5a,UAAW,IAMjC3kH,KAAK8hnB,sBAAwB,SAAU7hnB,GAC/BA,EAAKuS,SACLzS,EAAMqsS,WAAW55R,SAAU,EAC3BzS,EAAMqsS,WAAWznL,UAAW,EAC5B5kH,EAAMyzgB,UAAUpuf,SAAU,IAG1BrlB,EAAMqsS,WAAWznL,UAAW,EAC5B5kH,EAAMyzgB,UAAUpuf,SAAU,IAMlCplB,KAAK+hnB,sBAAwB,SAAU9hnB,GAC/BA,EAAKuS,QACLzS,EAAMyzgB,UAAUpuf,SAAU,EAG1BrlB,EAAMyzgB,UAAUpuf,SAAU,GAMlCplB,KAAKginB,iBAAmB,SAAU/hnB,GAC1BA,EAAKuS,SACLzS,EAAMghnB,SAASp8f,UAAW,EAC1B5kH,EAAMihnB,SAASr8f,UAAW,EAC1B5kH,EAAMkhnB,SAASt8f,UAAW,EAC1B5kH,EAAMmhnB,SAASv8f,UAAW,EAC1B5kH,EAAMohnB,SAASx8f,UAAW,EAC1B5kH,EAAMqhnB,SAASz8f,UAAW,EAC1B5kH,EAAMshnB,SAAS18f,UAAW,EAC1B5kH,EAAMuhnB,SAAS38f,UAAW,EAC1B5kH,EAAMwhnB,SAAS58f,UAAW,EAC1B5kH,EAAMyhnB,OAAO78f,UAAW,IAGxB5kH,EAAMghnB,SAASp8f,UAAW,EAC1B5kH,EAAMihnB,SAASr8f,UAAW,EAC1B5kH,EAAMkhnB,SAASt8f,UAAW,EAC1B5kH,EAAMmhnB,SAASv8f,UAAW,EAC1B5kH,EAAMohnB,SAASx8f,UAAW,EAC1B5kH,EAAMqhnB,SAASz8f,UAAW,EAC1B5kH,EAAMshnB,SAAS18f,UAAW,EAC1B5kH,EAAMuhnB,SAAS38f,UAAW,EAC1B5kH,EAAMwhnB,SAAS58f,UAAW,EAC1B5kH,EAAMyhnB,OAAO78f,UAAW,IAMhC3kH,KAAKiinB,8BAAgC,WACjC,IAAIxiC,GACAE,WAAY,EACZC,SAAU7/kB,EAAM0gnB,UAAU1jnB,MAC1BgjlB,iBAAkBhglB,EAAM4vD,UAAUn9C,QAClCktkB,kBAAmB3/kB,EAAMiiP,WAAWxvO,QACpC45R,WAAYrsS,EAAMqsS,WAAW55R,QAC7BghgB,UAAWzzgB,EAAMyzgB,UAAUz2gB,MAC3BijlB,qBAAsBjglB,EAAM+9hB,QAAQtrhB,SAExCzS,EAAMminB,kBAAkBziC,GACxB1/kB,EAAMyjgB,MAAMA,MAAM1U,aAAawwF,sBAAsBG,GACrD1/kB,EAAMyjgB,MAAMo6G,OAAOj2hB,QAKvB3nF,KAAK2gnB,wBAA0B,WAC3B5gnB,EAAMiiP,WAAWxvO,SAAU,EAC3BzS,EAAMqsS,WAAW55R,SAAU,EAC3BzS,EAAMyzgB,UAAUz2gB,MAAQ,GACxBgD,EAAM4vD,UAAUn9C,SAAU,EAC1BzS,EAAM2E,MAAM8N,SAAU,EACtBzS,EAAM+9hB,QAAQtrhB,SAAU,EACxBzS,EAAMyhnB,OAAOzknB,MAAQ,IAEzBiD,KAAKwjgB,MAAQhV,EAugBjB,OArgBAkH,EAAsBt6f,UAAU2mC,cAAgB,WAC5C,MAAO,yBAMX2zd,EAAsBt6f,UAAU81f,yBAA2B,SAAUljf,GACjE,IACIm0mB,EAAUninB,KAAKwjgB,MAAMA,MAAMx/W,YAC3B1gJ,EAAK6+mB,EAAU,cACnBninB,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,2BACxDrD,KAAKwjgB,MAAMA,MAAMxigB,QAAQW,YAAY3B,KAAKmH,QAE1C,IAAIi7mB,EAAajhnB,EAAc,OAASmC,GAAI,cAAeD,UAAW,+BACtErD,KAAKmH,OAAOxF,YAAYygnB,GAExB,IAAIC,EAAWlhnB,EAAc,OAASmC,GAAI6+mB,EAAU,YAAa9+mB,UAAW,4BAA6BE,OAAQ,uBAAwBvB,UAAWgM,EAAOisE,YAAY,aACvKmoiB,EAAWzgnB,YAAY0gnB,GAEvB,IAAIC,EAAiBnhnB,EAAc,OAASmC,GAAI,eAAgBC,OAAQ,kCACxE6+mB,EAAWzgnB,YAAY2gnB,GAEvB,IAAIC,EAAkBphnB,EAAc,OAASoC,OAAQ,qBAAsBF,UAAW,mCACtF++mB,EAAWzgnB,YAAY4gnB,GAEvB,IAAIC,EAAuBrhnB,EAAc,OAASmC,GAAI,qBAAsBC,OAAQ,4CACpF6+mB,EAAWzgnB,YAAY6gnB,GAEvB,IAAIC,EAAwBthnB,EAAc,OAASkC,UAAW,mCAAoCE,OAAQ,iBAC1G6+mB,EAAWzgnB,YAAY8gnB,GAEvB,IAAIC,EAAgBvhnB,EAAc,OAASmC,GAAI,iBAAkBD,UAAW,+BACxE2+O,EAAa7gP,EAAc,SAC3BsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,gBAExDo/mB,EAAc/gnB,YAAYqgP,GAE1B,IAAI2gY,EAAgBxhnB,EAAc,OAASmC,GAAI,iBAAkBD,UAAW,+BACxE+oS,EAAajrS,EAAc,SAC3BsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,gBAExDq/mB,EAAchhnB,YAAYyqS,GAE1BpsS,KAAKgiP,WAAa,IAAI18H,IAAWjyG,MAAOrF,EAAOisE,YAAY,qBAAsBznE,SAAS,EAAMiO,OAAQzgB,KAAK8hnB,wBAE7G9hnB,KAAKosS,WAAa,IAAI9mL,IAAWjyG,MAAOrF,EAAOisE,YAAY,4BAA6BznE,SAAS,EAAMiO,OAAQzgB,KAAK+hnB,wBACpH/hnB,KAAKgiP,WAAWnxM,SAASmxM,GACzBhiP,KAAKosS,WAAWv7P,SAASu7P,GACzB,IAAIw2U,EAASzhnB,EAAc,OAASmC,GAAI,UAAWD,UAAW,yBAE1Dw/mB,EAAoB1hnB,EAAc,OAASmC,GAAI,uBAE/Cw/mB,EAAiB3hnB,EAAc,SAAWmC,GAAI6+mB,EAAU,kBAAmB9+mB,UAAW,uBAAwBrB,UAAWgM,EAAOisE,YAAY,cAAgB,MAChK4oiB,EAAkBlhnB,YAAYmhnB,GAC9B,IAAIC,EAAe5hnB,EAAc,OAASmC,GAAI,kBAC1CkwgB,EAAYrygB,EAAc,UAC1BmC,GAAI6+mB,EAAU,aACdngnB,UAAW,yBAAgCgM,EAAOisE,YAAY,QAAQzZ,oBAAsB,4KAKhGuijB,EAAaphnB,YAAY6xgB,GACzBovG,EAAOjhnB,YAAYkhnB,GACnBD,EAAOjhnB,YAAYohnB,GACnBT,EAAe3gnB,YAAY+gnB,GAC3BJ,EAAe3gnB,YAAYghnB,GAC3BL,EAAe3gnB,YAAYihnB,GAC3B5inB,KAAKwzgB,UAAY,IAAIq0F,IAAe7xlB,MAAO,MAC3ChW,KAAKwzgB,UAAU3ie,SAAS2ie,GACxB,IAAI7jd,EAAYxuD,EAAc,SAC1BsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,eAExDi/mB,EAAgB5gnB,YAAYguD,GAC5B3vD,KAAK2vD,UAAY,IAAI21D,IAAWjyG,MAAOrF,EAAOisE,YAAY,0CAA2CznE,SAAS,IAC9GxS,KAAK2vD,UAAU9e,SAAS8e,GAExB,IAAIqzjB,EAAU7hnB,EAAc,OAASmC,GAAI,WAAYD,UAAW,6BAE5D4/mB,EAAoB9hnB,EAAc,OAASmC,GAAI,qBAAsBD,UAAW,gCAEhF6/mB,EAAiB/hnB,EAAc,SAAWmC,GAAI6+mB,EAAU,kBAAmB9+mB,UAAW,uBAAwBrB,UAAWgM,EAAOisE,YAAY,eAAiB,MACjKgpiB,EAAkBthnB,YAAYuhnB,GAE9B,IAAIC,EAAehinB,EAAc,OAASmC,GAAI,gBAAiBD,UAAW,+BAEtEo9mB,EAAYt/mB,EAAc,SAAWmC,GAAI6+mB,EAAU,aAAc1+mB,OAASiD,KAAQ,UACtFy8mB,EAAaxhnB,YAAY8+mB,GACzBuC,EAAQrhnB,YAAYshnB,GACpBD,EAAQrhnB,YAAYwhnB,GACpBZ,EAAgB5gnB,YAAYqhnB,GAC5BhjnB,KAAKygnB,UAAY,IAAIj3e,IAAiBjrG,OAAQ,IAAKxhC,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,EAAG0J,MAAO,IAAKyK,OAAQzgB,KAAK4gnB,uBACtG5gnB,KAAKygnB,UAAU5vkB,SAAS4vkB,GAExB,IAAI2C,EAAgBjinB,EAAc,OAASmC,GAAI,iBAAkBD,UAAW,+BAExEggnB,EAAkBlinB,EAAc,OAASmC,GAAI6+mB,EAAU,mBAAoB9+mB,UAAW,qDAAsDE,OAAQ,uBAAwBvB,UAAWgM,EAAOisE,YAAY,gCAAkC,MAChPuoiB,EAAqB7gnB,YAAYyhnB,GACjCZ,EAAqB7gnB,YAAY0hnB,GACjC,IAAI3+mB,EAAQvD,EAAc,SACtBsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,WAExDk/mB,EAAqB7gnB,YAAY+C,GACjC1E,KAAK0E,MAAQ,IAAI4gH,IAAWjyG,MAAOrF,EAAOisE,YAAY,UAAWznE,SAAS,EAAMiO,OAAQzgB,KAAKginB,mBAC7FhinB,KAAK0E,MAAMmsC,SAASnsC,GACpB,IAAI0gE,EAAQjkE,EAAc,SAAWoC,OAAQ,oBACzC+/mB,EAAMninB,EAAc,MACpBoinB,EAAMpinB,EAAc,MAAQoC,OAAQ,mCACpCignB,EAAiBrinB,EAAc,SAE/Ba,UAAWgM,EAAOisE,YAAY,oBAAqB52E,UAAW,2DAA4DC,GAAItD,KAAKmH,OAAO7D,GAAK,oBAEnJignB,EAAI5hnB,YAAY6hnB,GAChB,IAAIC,EAAMtinB,EAAc,MACpBuinB,EAAWvinB,EAAc,SACzBa,UAAWgM,EAAOisE,YAAY,aAAe,IAAK52E,UAAW,2DAC7DC,GAAItD,KAAKmH,OAAO7D,GAAK,cAEzBmgnB,EAAI9hnB,YAAY+hnB,GAChBJ,EAAI3hnB,YAAY4hnB,GAChBD,EAAI3hnB,YAAY8hnB,GAChBr+iB,EAAMzjE,YAAY2hnB,GAElB,IAAIK,EAAWxinB,EAAc,OAASmC,GAAI,YAAaD,UAAW,uBAC9DugnB,EAASzinB,EAAc,SACvB0inB,EAAM1inB,EAAc,MACpB2inB,EAAM3inB,EAAc,MACpB4inB,EAAgB5inB,EAAc,SAC9Ba,UAAWgM,EAAOisE,YAAY,WAAa,KAC3C52E,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEwgnB,EAAIninB,YAAYoinB,GAChB,IAAIC,EAAM7inB,EAAc,MACxBnB,KAAK+gnB,SAAW5/mB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAK+gnB,SAAShknB,MAAQ,IACtBiD,KAAK+gnB,SAAStknB,iBAAiB,QAASuD,KAAKyhnB,aAC7CuC,EAAIrinB,YAAY3B,KAAK+gnB,UACrB8C,EAAIlinB,YAAYminB,GAChBD,EAAIlinB,YAAYqinB,GAChB,IAAIC,EAAM9inB,EAAc,MACpB+inB,EAAM/inB,EAAc,MACpBgjnB,EAAgBhjnB,EAAc,SAC9Ba,UAAWgM,EAAOisE,YAAY,WAAa,KAC3C52E,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhE4gnB,EAAIvinB,YAAYwinB,GAChB,IAAIC,EAAMjjnB,EAAc,MACxBnB,KAAKghnB,SAAW7/mB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKghnB,SAASjknB,MAAQ,IACtBiD,KAAKghnB,SAASvknB,iBAAiB,QAASuD,KAAKyhnB,aAC7C2C,EAAIzinB,YAAY3B,KAAKghnB,UACrBiD,EAAItinB,YAAYuinB,GAChBD,EAAItinB,YAAYyinB,GAChB,IAAIC,EAAMljnB,EAAc,MACpBmjnB,EAAMnjnB,EAAc,MACpBojnB,EAAgBpjnB,EAAc,SAC9Ba,UAAWgM,EAAOisE,YAAY,WAAa,KAC3C52E,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEghnB,EAAI3inB,YAAY4inB,GAChB,IAAIC,EAAMrjnB,EAAc,MACxBnB,KAAKihnB,SAAW9/mB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKihnB,SAASlknB,MAAQ,IACtBiD,KAAKihnB,SAASxknB,iBAAiB,QAASuD,KAAKyhnB,aAC7C+C,EAAI7inB,YAAY3B,KAAKihnB,UACrBoD,EAAI1inB,YAAY2inB,GAChBD,EAAI1inB,YAAY6inB,GAChB,IAAIC,EAAMtjnB,EAAc,MACpBujnB,EAAMvjnB,EAAc,MACpBwjnB,EAAgBxjnB,EAAc,SAC9Ba,UAAWgM,EAAOisE,YAAY,WAAa,KAC3C52E,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEohnB,EAAI/inB,YAAYgjnB,GAChB,IAAIC,EAAOzjnB,EAAc,MACzBnB,KAAKkhnB,SAAW//mB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKkhnB,SAASzknB,iBAAiB,QAASuD,KAAKyhnB,aAC7CmD,EAAKjjnB,YAAY3B,KAAKkhnB,UACtBuD,EAAI9inB,YAAY+inB,GAChBD,EAAI9inB,YAAYijnB,GAChB,IAAIC,EAAM1jnB,EAAc,MACpB2jnB,EAAO3jnB,EAAc,MACrB4jnB,GAAgB5jnB,EAAc,SAC9Ba,UAAWgM,EAAOisE,YAAY,WAAa,KAC3C52E,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEwhnB,EAAKnjnB,YAAYojnB,IACjB,IAAIC,GAAO7jnB,EAAc,MACzBnB,KAAKmhnB,SAAWhgnB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKmhnB,SAAS1knB,iBAAiB,QAASuD,KAAKyhnB,aAC7CuD,GAAKrjnB,YAAY3B,KAAKmhnB,UACtB0D,EAAIljnB,YAAYmjnB,GAChBD,EAAIljnB,YAAYqjnB,IAChB,IAAIC,GAAM9jnB,EAAc,MACpB+jnB,GAAO/jnB,EAAc,MACrBgknB,GAAgBhknB,EAAc,SAC9Ba,UAAWgM,EAAOisE,YAAY,WAAa,KAC3C52E,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhE4hnB,GAAKvjnB,YAAYwjnB,IACjB,IAAIC,GAAOjknB,EAAc,MACzBnB,KAAKohnB,SAAWjgnB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKohnB,SAAS3knB,iBAAiB,QAASuD,KAAKyhnB,aAC7C2D,GAAKzjnB,YAAY3B,KAAKohnB,UACtB6D,GAAItjnB,YAAYujnB,IAChBD,GAAItjnB,YAAYyjnB,IAChB,IAAIC,GAAMlknB,EAAc,MACpBmknB,GAAOnknB,EAAc,MACrBoknB,GAAgBpknB,EAAc,SAC9Ba,UAAWgM,EAAOisE,YAAY,WAAa,KAC3C52E,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEginB,GAAK3jnB,YAAY4jnB,IACjB,IAAIC,GAAOrknB,EAAc,MACzBnB,KAAKqhnB,SAAWlgnB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKqhnB,SAAS5knB,iBAAiB,QAASuD,KAAKyhnB,aAC7C+D,GAAK7jnB,YAAY3B,KAAKqhnB,UACtBgE,GAAI1jnB,YAAY2jnB,IAChBD,GAAI1jnB,YAAY6jnB,IAChB,IAAIC,GAAMtknB,EAAc,MACpBuknB,GAAOvknB,EAAc,MACrBwknB,GAAgBxknB,EAAc,SAC9Ba,UAAWgM,EAAOisE,YAAY,WAAa,KAC3C52E,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEoinB,GAAK/jnB,YAAYgknB,IACjB,IAAIC,GAAOzknB,EAAc,MACzBnB,KAAKshnB,SAAWngnB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKshnB,SAAS7knB,iBAAiB,QAASuD,KAAKyhnB,aAC7CmE,GAAKjknB,YAAY3B,KAAKshnB,UACtBmE,GAAI9jnB,YAAY+jnB,IAChBD,GAAI9jnB,YAAYiknB,IAChB,IAAIC,GAAO1knB,EAAc,MACrB2knB,GAAO3knB,EAAc,MACrB4knB,GAAgB5knB,EAAc,SAC9Ba,UAAWgM,EAAOisE,YAAY,WAAa,KAC3C52E,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEwinB,GAAKnknB,YAAYoknB,IACjB,IAAIC,GAAO7knB,EAAc,MACzBnB,KAAKuhnB,SAAWpgnB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKuhnB,SAAS9knB,iBAAiB,QAASuD,KAAKyhnB,aAC7CuE,GAAKrknB,YAAY3B,KAAKuhnB,UACtBsE,GAAKlknB,YAAYmknB,IACjBD,GAAKlknB,YAAYqknB,IACjB,IAAIC,GAAO9knB,EAAc,MACrB+knB,GAAO/knB,EAAc,MACrBglnB,GAAchlnB,EAAc,SAC5Ba,UAAWgM,EAAOisE,YAAY,UAC9B52E,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,iBAEhE4inB,GAAKvknB,YAAYwknB,IACjB,IAAIC,GAAOjlnB,EAAc,MACzBnB,KAAKwhnB,OAASrgnB,EAAc,SAAWmC,GAAI,UAAWD,UAAW,mCACjErD,KAAKwhnB,OAAO/knB,iBAAiB,QAASuD,KAAK6hnB,oBAC3CuE,GAAKzknB,YAAY3B,KAAKwhnB,QACtByE,GAAKtknB,YAAYuknB,IACjBD,GAAKtknB,YAAYyknB,IACjBxC,EAAOjinB,YAAYkinB,GACnBD,EAAOjinB,YAAYsinB,GACnBL,EAAOjinB,YAAY0inB,GACnBT,EAAOjinB,YAAY8inB,GACnBb,EAAOjinB,YAAYkjnB,GACnBjB,EAAOjinB,YAAYsjnB,IACnBrB,EAAOjinB,YAAY0jnB,IACnBzB,EAAOjinB,YAAY8jnB,IACnB7B,EAAOjinB,YAAYkknB,IACnBjC,EAAOjinB,YAAYsknB,IACnBtC,EAAShinB,YAAYiinB,GACrB,IAAIyC,GAAiBllnB,EAAc,OAASkC,UAAW,8BACvDgjnB,GAAe1knB,YAAYyjE,GAC3BihjB,GAAe1knB,YAAYginB,GAC3BnB,EAAqB7gnB,YAAY0knB,IAEjC,IAAIC,GAAYnlnB,EAAc,OAASmC,GAAI,aAAcC,OAAQ,mBACjEi/mB,EAAqB7gnB,YAAY2knB,IACjC,IAAIC,GAASplnB,EAAc,OAASmC,GAAI,YAEpCkjnB,GAAarlnB,EAAc,OAASmC,GAAI,cAAeD,UAAW,2DAClEy6hB,GAAU38hB,EAAc,SACxBsC,OAASiD,KAAQ,YAAcpD,GAAI,aAEvCkjnB,GAAW7knB,YAAYm8hB,IACvByoF,GAAO5knB,YAAY6knB,IACnBF,GAAU3knB,YAAY4knB,IACtBvmnB,KAAK89hB,QAAU,IAAIx4a,IAAWjyG,MAAOrF,EAAOisE,YAAY,kBAAmBznE,SAAS,IACpFxS,KAAK89hB,QAAQjtf,SAASitf,IACtB,IAAI2oF,GAAiBtlnB,EAAc,OAASkC,UAAW,0BACvDijnB,GAAU3knB,YAAY8knB,IACtB,IAAIC,GAAevlnB,EAAc,UAAYa,UAAW,QAASsB,GAAI,UACrEmjnB,GAAe9knB,YAAY+knB,IACT,IAAIligB,IAASvxG,SAAU,iBAC7B49B,SAAS61kB,IACrBA,GAAajqnB,iBAAiB,QAASuD,KAAK87D,OAE5C,IAAI6qjB,GAAexlnB,EAAc,OAASmC,GAAI,gBAAiBD,UAAW,+BAEtEujnB,GAAiBzlnB,EAAc,OAC/BmC,GAAI6+mB,EAAU,kBAAmB9+mB,UAAW,gDAC5CrB,UAAWgM,EAAOisE,YAAY,UAAY,MAE9CwoiB,EAAsB9gnB,YAAYglnB,IAClClE,EAAsB9gnB,YAAYilnB,IAClC,IAAI9G,GAAa3+mB,EAAc,OAASkC,UAAW,6BACnDo/mB,EAAsB9gnB,YAAYm+mB,IAClC9/mB,KAAKw/mB,aAAer+mB,EAAc,SAAWkC,UAAW,UAAWC,GAAI,YACvEtD,KAAKw/mB,aAAah8mB,aAAa,OAAQ,QACvCs8mB,GAAWn+mB,YAAY3B,KAAKw/mB,cAC5B,IAAIqH,GAAc1lnB,EAAc,OAASkC,UAAW,uBAEpDrD,KAAKojN,iBAAmB,IAAItI,IAAWzyI,YADpB,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,SAC3Bp1D,SAAU,oBAC1EjT,KAAKojN,iBAAiBvyK,SAASg2kB,IAC/B7mnB,KAAKojN,iBAAiB3mN,iBAAiB,SAAUuD,KAAKy/mB,eACtDgD,EAAsB9gnB,YAAYklnB,IAClC,IAAIC,GAAkB3lnB,EAAc,OAASkC,UAAW,2BACxDo/mB,EAAsB9gnB,YAAYmlnB,IAClC,IAAIC,GAAgB5lnB,EAAc,UAAYa,UAAW,SAAUsB,GAAI,WACvEwjnB,GAAgBnlnB,YAAYolnB,IACT,IAAIvigB,IAASvxG,SAAU,iBAC7B49B,SAASk2kB,IACtBA,GAActqnB,iBAAiB,QAASuD,KAAK0yf,kBAKjDgD,EAAsBt6f,UAAUo8H,KAAO,WACnC,IAAIu/Y,EAAa,IAAI34Z,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eAC7DkrE,EAAWx4Z,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACtCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAKkxf,yBAAyB6lB,GAElC/2gB,KAAKwjgB,MAAMo6G,OAAO9yhB,OAASisb,EAAW98b,YAAY,qBAClDj6E,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAKwgnB,yBACpCxgnB,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAK0gnB,0BAC/B1gnB,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAKiinB,8BACZjof,aAAe19F,QAASy6e,EAAW98b,YAAY,MAAOhnE,SAAU,oBAAqBwxG,WAAW,KAGhGwV,MAAOj6H,KAAK29mB,oBACZ3jf,aAAe19F,QAASy6e,EAAW98b,YAAY,UAAWhnE,SAAU,yBAE5EjT,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOpmf,QAEtBk+X,EAAsBt6f,UAAUwmnB,WAAa,WACb,KAAxB5hnB,KAAK+gnB,SAAShknB,QACdiD,KAAKygnB,UAAU1jnB,MAAQ,GAEC,KAAxBiD,KAAKghnB,SAASjknB,QACdiD,KAAKygnB,UAAU1jnB,MAAQ,GAEC,KAAxBiD,KAAKihnB,SAASlknB,QACdiD,KAAKygnB,UAAU1jnB,MAAQ,GAEC,KAAxBiD,KAAKkhnB,SAASnknB,QACdiD,KAAKygnB,UAAU1jnB,MAAQ,GAEC,KAAxBiD,KAAKmhnB,SAASpknB,QACdiD,KAAKygnB,UAAU1jnB,MAAQ,GAEC,KAAxBiD,KAAKohnB,SAASrknB,QACdiD,KAAKygnB,UAAU1jnB,MAAQ,GAEC,KAAxBiD,KAAKqhnB,SAAStknB,QACdiD,KAAKygnB,UAAU1jnB,MAAQ,GAEC,KAAxBiD,KAAKshnB,SAASvknB,QACdiD,KAAKygnB,UAAU1jnB,MAAQ,GAEC,KAAxBiD,KAAKuhnB,SAASxknB,QACdiD,KAAKygnB,UAAU1jnB,MAAQ,IAG/B24f,EAAsBt6f,UAAUumnB,gBAAkB,SAAU3gnB,GACxD,OAAQA,GACJ,KAAKhB,KAAK+gnB,SACN,MAAO,IACX,KAAK/gnB,KAAKghnB,SACN,MAAO,IACX,KAAKhhnB,KAAKihnB,SACN,MAAO,IACX,KAAKjhnB,KAAKkhnB,SACN,MAAO,IACX,KAAKlhnB,KAAKmhnB,SACN,MAAO,IACX,KAAKnhnB,KAAKohnB,SACN,MAAO,IACX,KAAKphnB,KAAKqhnB,SACN,MAAO,IACX,KAAKrhnB,KAAKshnB,SACN,MAAO,IACX,KAAKthnB,KAAKuhnB,SACN,MAAO,IACX,QACI,MAAO,MAGnB7rH,EAAsBt6f,UAAU4rnB,gBAAkB,SAAUl1mB,GACxD,OAAQA,GACJ,KAAK,EACD,OAAO8iB,SAAS50B,KAAK+gnB,SAAShknB,OAClC,KAAK,EACD,OAAO63B,SAAS50B,KAAKghnB,SAASjknB,OAClC,KAAK,EACD,OAAO63B,SAAS50B,KAAKihnB,SAASlknB,OAClC,KAAK,EACD,OAAO63B,SAAS50B,KAAKkhnB,SAASnknB,OAClC,KAAK,EACD,OAAO63B,SAAS50B,KAAKmhnB,SAASpknB,OAClC,KAAK,EACD,OAAO63B,SAAS50B,KAAKohnB,SAASrknB,OAClC,KAAK,EACD,OAAO63B,SAAS50B,KAAKqhnB,SAAStknB,OAClC,KAAK,EACD,OAAO63B,SAAS50B,KAAKshnB,SAASvknB,OAClC,KAAK,EACD,OAAO63B,SAAS50B,KAAKuhnB,SAASxknB,OAClC,QACI,OAAO,IAGnB24f,EAAsBt6f,UAAU8mnB,kBAAoB,SAAUziC,GAC1DA,EAAYU,iBAKZ,IAAK,IAHD8mC,EAAgB,EAChBC,EAAc,EACdC,GAAa,EACRjrnB,EAAI,EAAGA,GAAKujlB,EAAYG,SAAU1jlB,IAAK,CAC5C,IAAIuhgB,EAAez9f,KAAKgnnB,gBAAgB9qnB,GACxC,GAAIA,IAAMuhgB,EACgB,IAAlBwpH,IACAA,EAAgB/qnB,EAChBirnB,GAAa,GAEZA,IACDD,EAAchrnB,QAKlB,GADAirnB,GAAa,EACQ,IAAjB1pH,EAAoB,CACpB,IAAIgkF,EAlBI,WAkB2BvllB,EAAEgR,WACrCuykB,EAAYU,cAAcsB,GAAgBhkF,GAItDgiF,EAAYE,WAAasnC,EACzBxnC,EAAYG,SAAWsnC,EACG,KAAtBlnnB,KAAKwhnB,OAAOzknB,QACZ0ilB,EAAYU,cAAsB,QAAKnglB,KAAKwhnB,OAAOzknB,QAM3D24f,EAAsBt6f,UAAUiX,QAAU,WA6CtC,GA5CIrS,KAAKgiP,aACLhiP,KAAKgiP,WAAW3vO,UAChBrS,KAAKgiP,gBAAa9mP,GAElB8E,KAAKosS,aACLpsS,KAAKosS,WAAW/5R,UAChBrS,KAAKosS,gBAAalxS,GAElB8E,KAAKwzgB,YACLxzgB,KAAKwzgB,UAAUnhgB,UACfrS,KAAKwzgB,eAAYt4gB,GAEjB8E,KAAKygnB,YACLzgnB,KAAKygnB,UAAUpumB,UACfrS,KAAKygnB,eAAYvlnB,GAEjB8E,KAAK2vD,YACL3vD,KAAK2vD,UAAUt9C,UACfrS,KAAK2vD,eAAYz0D,GAEjB8E,KAAK0E,QACL1E,KAAK0E,MAAM2N,UACXrS,KAAK0E,WAAQxJ,GAEb8E,KAAK89hB,UACL99hB,KAAK89hB,QAAQzrhB,UACbrS,KAAK89hB,aAAU5iiB,GAEf8E,KAAKojN,mBACLpjN,KAAKojN,iBAAiB/wM,UACtBrS,KAAKojN,sBAAmBloN,GAE5B8E,KAAK+gnB,cAAW7lnB,EAChB8E,KAAKghnB,cAAW9lnB,EAChB8E,KAAKihnB,cAAW/lnB,EAChB8E,KAAKkhnB,cAAWhmnB,EAChB8E,KAAKmhnB,cAAWjmnB,EAChB8E,KAAKohnB,cAAWlmnB,EAChB8E,KAAKqhnB,cAAWnmnB,EAChB8E,KAAKshnB,cAAWpmnB,EAChB8E,KAAKuhnB,cAAWrmnB,EAChB8E,KAAKwhnB,YAAStmnB,EACd8E,KAAKw/mB,kBAAetknB,EACpB8E,KAAKwjgB,WAAQtogB,GACRuC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAI+X,EAAQ,EAAGA,EAAQlf,KAAKmH,OAAOmK,WAAW9U,OAAQ0iB,IACvDlf,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAW4N,IAC/CA,IAEJlf,KAAKmH,YAASjM,IAGfw6f,KC9tBPC,GAAiC,WAIjC,SAASA,EAAgBnH,GACrB,IAAIzuf,EAAQC,KACZA,KAAKonnB,YAAa,EAIlBpnnB,KAAKqnnB,oBAAsB,WACvBtnnB,EAAMyjgB,MAAMj0Y,cACZ,IAAIwnY,EAAgBh3f,EAAMyjgB,MAAMvtb,UAAU8gb,cAC1Ch3f,EAAMunnB,aAAavqnB,MAAQg6f,EAAc56O,UACzCp8Q,EAAMwnnB,cAAcxqnB,MAAQg6f,EAAc76O,WAC1Cn8Q,EAAMynnB,gBAAgBzqnB,MAAQg6f,EAAc16O,aAC5Ct8Q,EAAM0nnB,eAAe1qnB,MAAQg6f,EAAc36O,YAC3Cr8Q,EAAM2nnB,SAAS3qnB,MAAQg6f,EAAc35C,UACrCr9c,EAAM4nnB,UAAU5qnB,MAAQg6f,EAAcvmP,WACtCzwQ,EAAM6nnB,UAAUp1mB,QAAUukf,EAAc+6B,yBACxC/xhB,EAAM8nnB,UAAUr1mB,QAAUukf,EAAc86B,mBACxC9xhB,EAAM+nnB,UAAU/qnB,MAAQg6f,EAAc4oC,eACtC5/hB,EAAMgonB,UAAUhrnB,MAAQg6f,EAAc8rB,eAClC9ihB,EAAM2nnB,SAAS3qnB,MAAQgD,EAAM4nnB,UAAU5qnB,MACvCgD,EAAMionB,UAAUx1mB,SAAU,EAG1BzS,EAAMkonB,SAASz1mB,SAAU,GAMjCxS,KAAKkonB,qBAAuB,WACxBnonB,EAAM4gnB,0BACN5gnB,EAAMyjgB,MAAMj0Y,eAKhBvvH,KAAK29mB,oBAAsB,WACvB59mB,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAM4gnB,2BAKV3gnB,KAAKmonB,wBAA0B,SAAU9rnB,GACf,KAAlBA,EAAM8rB,SACNpoB,EAAMqonB,4BAMdponB,KAAKoonB,yBAA2B,WAC5B,IAAIrxH,EAAgB,IAAIC,GACxBD,EAAc16O,aAAet8Q,EAAMynnB,gBAAgBzqnB,MACnDg6f,EAAc56O,UAAYp8Q,EAAMunnB,aAAavqnB,MAC7Cg6f,EAAc76O,WAAan8Q,EAAMwnnB,cAAcxqnB,MAC/Cg6f,EAAc36O,YAAcr8Q,EAAM0nnB,eAAe1qnB,MACjDg6f,EAAc35C,UAAYr9c,EAAM2nnB,SAAS3qnB,MACzCg6f,EAAcvmP,WAAazwQ,EAAM4nnB,UAAU5qnB,MAC3Cg6f,EAAc+6B,yBAA2B/xhB,EAAM6nnB,UAAUp1mB,QACzDukf,EAAc86B,mBAAqB9xhB,EAAM8nnB,UAAUr1mB,QACnDukf,EAAc4oC,eAAiB5/hB,EAAM+nnB,UAAU/qnB,MAC/Cg6f,EAAc8rB,eAAiB9ihB,EAAMgonB,UAAUhrnB,MAC/CgD,EAAMyjgB,MAAMA,MAAM1U,aAAao7C,0BAAqBhviB,EAAW67f,GAC/Dh3f,EAAMyjgB,MAAMo6G,OAAOj2hB,QAKvB3nF,KAAKqonB,kBAAoB,SAAUhsnB,GAC/B,IAAIU,EAAQV,EAAMU,MACdg6f,EAAgBh3f,EAAMyjgB,MAAMvtb,UAAU8gb,cAC9BA,EAAc35C,UACb25C,EAAcvmP,WACvBzwQ,EAAMyjgB,MAAMvtb,UAAU8gb,cAAc35C,UAAYr9c,EAAMyjgB,MAAMvtb,UAAU8gb,cAAcvmP,YAAczwQ,EAAMionB,UAAUx1mB,QAClHzS,EAAMqnnB,YAAa,EAGnBrnnB,EAAMqnnB,YAAa,EAET,WAAVrqnB,EACIgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,IACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,MAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,IACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,KAGb,YAAVA,EACDgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,IACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,OAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,KACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,KAGb,UAAVA,EACDgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,IACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,OAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,KACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,KAGb,cAAVA,EACDgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,IACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,MAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,IACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,KAGb,cAAVA,EACDgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,IACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,MAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,IACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,KAGb,OAAVA,EACDgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,MACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,UAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,QACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,OAGb,OAAVA,EACDgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,MACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,QAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,MACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,OAGb,OAAVA,EACDgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,OACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,QAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,MACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,QAGb,OAAVA,EACDgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,MACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,SAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,OACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,OAGb,OAAVA,EACDgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,MACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,QAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,MACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,OAGb,eAAVA,IACDgD,EAAMqnnB,YACNrnnB,EAAM2nnB,SAAS3qnB,MAAQ,MACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,QAGxBgD,EAAM2nnB,SAAS3qnB,MAAQ,MACvBgD,EAAM4nnB,UAAU5qnB,MAAQ,SAOpCiD,KAAKu5kB,WAAa,SAAUl9kB,GACxB0D,EAAMionB,UAAUx1mB,SAAU,EAC1B,IAAIwD,EAAQjW,EAAM2nnB,SAAS3qnB,MACvBgZ,EAAShW,EAAM4nnB,UAAU5qnB,MACzBiZ,EAAQD,IACRhW,EAAM2nnB,SAAS3qnB,MAAQgZ,EACvBhW,EAAM4nnB,UAAU5qnB,MAAQiZ,IAMhChW,KAAKw5kB,YAAc,SAAUn9kB,GACzB0D,EAAMkonB,SAASz1mB,SAAU,EACzB,IAAIwD,EAAQjW,EAAM2nnB,SAAS3qnB,MACvBgZ,EAAShW,EAAM4nnB,UAAU5qnB,MACzBiZ,EAAQD,IACRhW,EAAM2nnB,SAAS3qnB,MAAQgZ,EACvBhW,EAAM4nnB,UAAU5qnB,MAAQiZ,IAMhChW,KAAK2gnB,wBAA0B,WAC3B5gnB,EAAMuonB,UAAUvrnB,WAAQ7B,EACxB6E,EAAMunnB,aAAavqnB,WAAQ7B,EAC3B6E,EAAMynnB,gBAAgBzqnB,WAAQ7B,EAC9B6E,EAAMwnnB,cAAcxqnB,WAAQ7B,EAC5B6E,EAAM0nnB,eAAe1qnB,WAAQ7B,EAC7B6E,EAAM+nnB,UAAU/qnB,WAAQ7B,EACxB6E,EAAMgonB,UAAUhrnB,WAAQ7B,EACxB6E,EAAM2nnB,SAAS3qnB,WAAQ7B,EACvB6E,EAAM4nnB,UAAU5qnB,WAAQ7B,EACxB6E,EAAM6nnB,UAAUp1mB,SAAU,EAC1BzS,EAAM8nnB,UAAUr1mB,SAAU,EAC1BzS,EAAMkonB,SAASz1mB,SAAU,EACzBzS,EAAMionB,UAAUx1mB,SAAU,GAE9BxS,KAAKwjgB,MAAQhV,EA2WjB,OAzWAmH,EAAgBv6f,UAAU2mC,cAAgB,WACtC,MAAO,mBAKX4zd,EAAgBv6f,UAAU60f,oBAAsB,SAAUjif,GACtD,IAAI1K,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,oBACxChkJ,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,iCACxDrD,KAAKwjgB,MAAMA,MAAMxigB,QAAQW,YAAY3B,KAAKmH,QAC1C,IAAIohnB,EAAiBpnnB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,wBACjEtD,KAAKmH,OAAOxF,YAAY4mnB,GACxBvonB,KAAKwonB,UAAYrnnB,EAAc,OAC3BmC,GAAItD,KAAKmH,OAAO7D,GAAK,qBAAsBC,OAAQ,oCAEvDvD,KAAKyonB,SAAWtnnB,EAAc,OAC1BmC,GAAItD,KAAKmH,OAAO7D,GAAK,wBAAyBC,OAAQ,oCAE1DvD,KAAK0onB,UAAYvnnB,EAAc,OAC3BmC,GAAItD,KAAKmH,OAAO7D,GAAK,2BAA4BC,OAAQ,oCAG7D,IAAIolnB,EAAQxnnB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,sBAAuBD,UAAW,6BACtFgxN,EAAkBlzN,EAAc,OAASkC,UAAW,iBACpDulnB,EAAeznnB,EAAc,OAC7BmC,GAAItD,KAAKmH,OAAO7D,GAAK,gBAAiBtB,UAAWgM,EAAOisE,YAAY,YAEpE4uiB,EAAc1nnB,EAAc,OAC5BmC,GAAItD,KAAKmH,OAAO7D,GAAK,eAAgBtB,UAAWgM,EAAOisE,YAAY,WAEnE6uiB,EAAe3nnB,EAAc,OAC7BmC,GAAItD,KAAKmH,OAAO7D,GAAK,gBAAiBtB,UAAWgM,EAAOisE,YAAY,YAExEo6I,EAAgB1yN,YAAYinnB,GAC5Bv0Z,EAAgB1yN,YAAYknnB,GAC5Bx0Z,EAAgB1yN,YAAYmnnB,GAC5B,IAAItta,EAAmBr6M,EAAc,OAASkC,UAAW,cACrD0lnB,EAAgB5nnB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAC5D0lnB,EAAe7nnB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,kBAC3D2lnB,EAAgB9nnB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAChEylnB,EAAcpnnB,YAAY3B,KAAKwonB,WAC/BQ,EAAarnnB,YAAY3B,KAAKyonB,UAC9BQ,EAActnnB,YAAY3B,KAAK0onB,WAC/Blta,EAAiB75M,YAAYonnB,GAC7Bvta,EAAiB75M,YAAYqnnB,GAC7Bxta,EAAiB75M,YAAYsnnB,GAC7BN,EAAMhnnB,YAAY0yN,GAClBs0Z,EAAMhnnB,YAAY65M,GAClB+sa,EAAe5mnB,YAAYgnnB,GAC3B3onB,KAAKkpnB,qBAAqBlpnB,KAAKwonB,UAAWx6mB,GAC1ChO,KAAKmpnB,wBAAwBnpnB,KAAKyonB,SAAUz6mB,GAC5ChO,KAAKopnB,qBAAqBppnB,KAAK0onB,UAAW16mB,GAC1C,IAAIq7mB,EAAS,IAAInuP,MAAQytP,GACzB3onB,KAAKmH,OAAO1K,iBAAiB,QAASuD,KAAKmonB,yBACrBkB,EAAOronB,QAAQ0M,uBAAuB,yBAAyB,GAC3CA,uBAAuB,cAAc,GAC3D5J,UAAUM,IAAI,0CAKtCuxf,EAAgBv6f,UAAU8tnB,qBAAuB,SAAUlonB,EAASgN,GAChE,IAAIs7mB,EAAYnonB,EAAc,OAC1BmC,GAAI,aACJD,UAAW,oCAAqCE,OAAQ,kBAGxDgmnB,EAAgBponB,EAAc,OAASmC,GAAI,cAAeD,UAAW,2CACzEimnB,EAAU3nnB,YAAY4nnB,GAEtB,IAAIC,EAAiBronB,EAAc,OAASkC,UAAW,4CACvDimnB,EAAU3nnB,YAAY6nnB,GACtB,IAAIC,EAAWtonB,EAAc,SACzBa,UAAWgM,EAAOisE,YAAY,OAAQ52E,UAAW,iCACjDC,GAAItD,KAAKmH,OAAO7D,GAAK,YAAaC,OAAQ,iCAE1CmmnB,EAAavonB,EAAc,SAC3BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,SAEhDqmnB,EAAiBxonB,EAAc,SAC/Ba,UAAWgM,EAAOisE,YAAY,UAC9B52E,UAAW,uCAAwCC,GAAItD,KAAKmH,OAAO7D,GAAK,iBAExEsmnB,EAAgBzonB,EAAc,SAC9BsC,OAASiD,KAAQ,QACjBpD,GAAItD,KAAKmH,OAAO7D,GAAK,YAEzBimnB,EAAc5nnB,YAAY8nnB,GAC1BF,EAAc5nnB,YAAY+nnB,GAC1BH,EAAc5nnB,YAAYgonB,GAC1BJ,EAAc5nnB,YAAYionB,GAC1B,IAAIC,EAAe1onB,EAAc,SAC7Ba,UAAWgM,EAAOisE,YAAY,QAAS52E,UAAW,iCAAkCE,OAAQ,+BAC5FD,GAAItD,KAAKmH,OAAO7D,GAAK,eAErBwmnB,EAAc3onB,EAAc,SAC5BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,UAEhDymnB,EAAa5onB,EAAc,SAC3Ba,UAAWgM,EAAOisE,YAAY,SAC9B32E,GAAItD,KAAKmH,OAAO7D,GAAK,cAAeD,UAAW,yCAE/C2mnB,EAAe7onB,EAAc,SAC7BsC,OAASiD,KAAQ,QACjBpD,GAAItD,KAAKmH,OAAO7D,GAAK,WAEzBkmnB,EAAe7nnB,YAAYkonB,GAC3BL,EAAe7nnB,YAAYmonB,GAC3BN,EAAe7nnB,YAAYoonB,GAC3BP,EAAe7nnB,YAAYqonB,GAC3BhpnB,EAAQW,YAAY2nnB,GACpBtpnB,KAAKsnnB,aAAe,IAAI99e,IAAiBzsI,MAAO,GAAIiZ,MAAO,IAAKk1H,SAAU,IAC1ElrI,KAAKsnnB,aAAaz2kB,SAAS64kB,GAC3B1pnB,KAAKunnB,cAAgB,IAAI/9e,IAAiBzsI,MAAO,GAAIiZ,MAAO,IAAKk1H,SAAU,IAC3ElrI,KAAKunnB,cAAc12kB,SAASi5kB,GAC5B9pnB,KAAKwnnB,gBAAkB,IAAIh+e,IAAiBzsI,MAAO,GAAIiZ,MAAO,IAAKk1H,SAAU,IAC7ElrI,KAAKwnnB,gBAAgB32kB,SAAS+4kB,GAC9B5pnB,KAAKynnB,eAAiB,IAAIj+e,IAAiBzsI,MAAO,GAAIiZ,MAAO,IAAKk1H,SAAU,IAC5ElrI,KAAKynnB,eAAe52kB,SAASm5kB,GAE7B,IAAIC,EAAiB9onB,EAAc,OAASmC,GAAI,kBAAmBD,UAAW,2CAE1E6mnB,EAAsB/onB,EAAc,OAASmC,GAAI,uBAAwBD,UAAW,gCAAiCrB,UAAWgM,EAAOisE,YAAY,iBACnJkwiB,EAAqBhpnB,EAAc,OAASmC,GAAI,sBAAuBC,OAAQ,iBAAkBF,UAAW,yCAC5G+mnB,EAAcjpnB,EAAc,OAASmC,GAAI,eAAgBC,OAAQ,yBACjE0knB,EAAW9mnB,EAAc,SACzBsC,OAASiD,KAAQ,eAAiBpD,GAAItD,KAAKmH,OAAO7D,GAAK,cAEvD+mnB,EAAelpnB,EAAc,OAASmC,GAAI,kBAC1C0knB,EAAY7mnB,EAAc,SAC1BsC,OAASiD,KAAQ,eAAiBpD,GAAItD,KAAKmH,OAAO7D,GAAK,eAE3D8mnB,EAAYzonB,YAAYsmnB,GACxBoC,EAAa1onB,YAAYqmnB,GACzBmC,EAAmBxonB,YAAYyonB,GAC/BD,EAAmBxonB,YAAY0onB,GAC/BJ,EAAetonB,YAAYuonB,GAC3BD,EAAetonB,YAAYwonB,GAC3BnqnB,KAAKionB,SAAW,IAAIvhgB,IAAcrzG,MAAOrF,EAAOisE,YAAY,YAAaznE,SAAS,EAAMiO,OAAQzgB,KAAKu5kB,aACrGv5kB,KAAKgonB,UAAY,IAAIthgB,IAAcrzG,MAAOrF,EAAOisE,YAAY,aAAcx5D,OAAQzgB,KAAKw5kB,cACxFx5kB,KAAKionB,SAASp3kB,SAASo3kB,GACvBjonB,KAAKgonB,UAAUn3kB,SAASm3kB,GACxBhnnB,EAAQW,YAAYsonB,IAKxBt0H,EAAgBv6f,UAAU+tnB,wBAA0B,SAAUnonB,EAASgN,GACnE,IAAIs8mB,EAAUnpnB,EAAc,OACxBmC,GAAI,WACJD,UAAW,2CAGXknnB,EAAcppnB,EAAc,OAASmC,GAAI,YAAaD,UAAW,2CACrEinnB,EAAQ3onB,YAAY4onB,GAEpB,IAAIC,EAAerpnB,EAAc,OAASkC,UAAW,4CACrDinnB,EAAQ3onB,YAAY6onB,GACpB,IAAIC,EAAatpnB,EAAc,SAC3Ba,UAAWgM,EAAOisE,YAAY,SAAU52E,UAAW,iCACnDC,GAAItD,KAAKmH,OAAO7D,GAAK,cAAeC,OAAQ,iCAE5CmnnB,EAAevpnB,EAAc,SAC7BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,WAEpDinnB,EAAY5onB,YAAY8onB,GACxBF,EAAY5onB,YAAY+onB,GACxB,IAAIC,EAAcxpnB,EAAc,SAC5Ba,UAAWgM,EAAOisE,YAAY,UAAW52E,UAAW,iCAAkCE,OAAQ,+BAC9FD,GAAItD,KAAKmH,OAAO7D,GAAK,iBAErBsnnB,EAAgBzpnB,EAAc,SAC9BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,YAEpDknnB,EAAa7onB,YAAYgpnB,GACzBH,EAAa7onB,YAAYipnB,GACzB5pnB,EAAQW,YAAY2onB,GACpBtqnB,KAAK0nnB,SAAW,IAAIl+e,IAAiBzsI,MAAO,IAAKiZ,MAAO,IAAKk1H,SAAU,IACvElrI,KAAK0nnB,SAAS72kB,SAAS65kB,GACvB1qnB,KAAK2nnB,UAAY,IAAIn+e,IAAiBzsI,MAAO,IAAKiZ,MAAO,IAAKk1H,SAAU,IACxElrI,KAAK2nnB,UAAU92kB,SAAS+5kB,GAExB,IAAIC,EAAe1pnB,EAAc,OAASmC,GAAI,gBAAiBC,OAAQ,eAAgBF,UAAW,sCAC9FilnB,EAAYnnnB,EAAc,UAC1BmC,GAAItD,KAAKmH,OAAO7D,GAAK,aAAcC,OAAQ,oCAC3CvB,UAAW,0BAA4BgM,EAAOisE,YAAY,UACtD,oCAAsCjsE,EAAOisE,YAAY,WACzD,kCAAoCjsE,EAAOisE,YAAY,SACvD,sCAAwCjsE,EAAOisE,YAAY,aAC3D,sCAAwCjsE,EAAOisE,YAAY,aAC3D,+BAAiCjsE,EAAOisE,YAAY,MACpD,+BAAiCjsE,EAAOisE,YAAY,MACpD,+BAAiCjsE,EAAOisE,YAAY,MACpD,+BAAiCjsE,EAAOisE,YAAY,MACpD,+BAAiCjsE,EAAOisE,YAAY,MACpD,uCAAyCjsE,EAAOisE,YAAY,eAAiB,cAErF4wiB,EAAalpnB,YAAY2mnB,GACzBtonB,KAAKsonB,UAAY,IAAIzgB,IAAepnlB,OAAQzgB,KAAKqonB,kBAAmBrymB,MAAO,UAC3EhW,KAAKsonB,UAAUz3kB,SAASy3kB,GACxBtnnB,EAAQW,YAAYkpnB,IAKxBl1H,EAAgBv6f,UAAUgunB,qBAAuB,SAAUponB,EAASgN,GAEhE,IAAI88mB,EAAY3pnB,EAAc,OAASmC,GAAI,aAAcD,UAAW,6CAEhE0nnB,EAAe5pnB,EAAc,OAASmC,GAAI,gBAAiBC,OAAQ,gBAAiBF,UAAW,wCAC/FuknB,EAAYzmnB,EAAc,SAC1BsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,eAExDynnB,EAAappnB,YAAYimnB,GAEzB,IAAIoD,EAAe7pnB,EAAc,OAASmC,GAAI,gBAAiBC,OAAQ,gBAAiBF,UAAW,yCAC/FwknB,EAAY1mnB,EAAc,SAC1BsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,UAExD0nnB,EAAarpnB,YAAYkmnB,GACzBiD,EAAUnpnB,YAAYopnB,GACtBD,EAAUnpnB,YAAYqpnB,GACtBhrnB,KAAK4nnB,UAAY,IAAItigB,IAAWjyG,MAAOrF,EAAOisE,YAAY,4BAC1Dj6E,KAAK6nnB,UAAY,IAAIvigB,IAAWjyG,MAAOrF,EAAOisE,YAAY,0BAC1Dj6E,KAAK4nnB,UAAU/2kB,SAAS+2kB,GACxB5nnB,KAAK6nnB,UAAUh3kB,SAASg3kB,GACxB7mnB,EAAQW,YAAYmpnB,GAEpB,IAAIG,EAAe9pnB,EAAc,OAASmC,GAAI,gBAAiBD,UAAW,kCACtE4jH,EAAY9lH,EAAc,SAC1Ba,UAAWgM,EAAOisE,YAAY,aAAc32E,GAAItD,KAAKmH,OAAO7D,GAAK,eAErE2nnB,EAAatpnB,YAAYslH,GACzBjmH,EAAQW,YAAYspnB,GAEpB,IAAIC,EAAc/pnB,EAAc,OAASmC,GAAI,wBAAyBD,UAAW,oCAAqCE,OAAQ,kBAE1H4nnB,EAAgBhqnB,EAAc,OAASmC,GAAI,iBAAkBD,UAAW,8CAC5E6nnB,EAAYvpnB,YAAYwpnB,GAExB,IAAIC,EAAiBjqnB,EAAc,OAASkC,UAAW,+CACvD6nnB,EAAYvpnB,YAAYypnB,GACxB,IAAIC,EAAclqnB,EAAc,SAC5Ba,UAAWgM,EAAOisE,YAAY,UAAW52E,UAAW,iCACpDC,GAAItD,KAAKmH,OAAO7D,GAAK,eAAgBC,OAAQ,iCAE7CuknB,EAAY3mnB,EAAc,SAC1BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,YAEpD6nnB,EAAcxpnB,YAAY0pnB,GAC1BF,EAAcxpnB,YAAYmmnB,GAC1B,IAAIwD,EAAcnqnB,EAAc,SAC5Ba,UAAWgM,EAAOisE,YAAY,UAAW52E,UAAW,iCAAkCE,OAAQ,+BAC9FD,GAAItD,KAAKmH,OAAO7D,GAAK,iBAErByknB,EAAY5mnB,EAAc,SAC1BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,YAEpD8nnB,EAAezpnB,YAAY2pnB,GAC3BF,EAAezpnB,YAAYomnB,GAC3B/mnB,EAAQW,YAAYupnB,GACpBlrnB,KAAK8nnB,UAAY,IAAIt+e,IAAiBzsI,MAAO,IAAKiZ,MAAO,IAAKk1H,SAAU,IACxElrI,KAAK8nnB,UAAUj3kB,SAASi3kB,GACxB9nnB,KAAK+nnB,UAAY,IAAIv+e,IAAiBzsI,MAAO,IAAKiZ,MAAO,IAAKk1H,SAAU,IACxElrI,KAAK+nnB,UAAUl3kB,SAASk3kB,IAK5BpyH,EAAgBv6f,UAAUo8H,KAAO,WAC7B,IAAIu/Y,EAAa,IAAI34Z,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eAC7DkrE,EAAWx4Z,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACtCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAKiwf,oBAAoB8mB,GAE7B/2gB,KAAKwjgB,MAAMo6G,OAAO9yhB,OAASisb,EAAW98b,YAAY,cAClDj6E,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAKqnnB,oBACpCrnnB,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAKkonB,qBAC/BlonB,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAKoonB,yBACZpuf,aAAe19F,QAASy6e,EAAW98b,YAAY,MAAOhnE,SAAU,4BAA6BwxG,WAAW,KAGxGwV,MAAOj6H,KAAK29mB,oBACZ3jf,aAAe19F,QAASy6e,EAAW98b,YAAY,UAAWhnE,SAAU,iCAE5EjT,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOpmf,QAKtBm+X,EAAgBv6f,UAAUiX,QAAU,WAsDhC,GArDIrS,KAAKsnnB,eACLtnnB,KAAKsnnB,aAAaj1mB,UAClBrS,KAAKsnnB,kBAAepsnB,GAEpB8E,KAAKunnB,gBACLvnnB,KAAKunnB,cAAcl1mB,UACnBrS,KAAKunnB,mBAAgBrsnB,GAErB8E,KAAKwnnB,kBACLxnnB,KAAKwnnB,gBAAgBn1mB,UACrBrS,KAAKwnnB,qBAAkBtsnB,GAEvB8E,KAAKynnB,iBACLznnB,KAAKynnB,eAAep1mB,UACpBrS,KAAKynnB,oBAAiBvsnB,GAEtB8E,KAAK8nnB,YACL9nnB,KAAK8nnB,UAAUz1mB,UACfrS,KAAK8nnB,eAAY5snB,GAEjB8E,KAAK+nnB,YACL/nnB,KAAK+nnB,UAAU11mB,UACfrS,KAAK+nnB,eAAY7snB,GAEjB8E,KAAK0nnB,WACL1nnB,KAAK0nnB,SAASr1mB,UACdrS,KAAK0nnB,cAAWxsnB,GAEhB8E,KAAK2nnB,YACL3nnB,KAAK2nnB,UAAUt1mB,UACfrS,KAAK2nnB,eAAYzsnB,GAEjB8E,KAAKsonB,YACLtonB,KAAKsonB,UAAUj2mB,UACfrS,KAAKsonB,eAAYptnB,GAEjB8E,KAAK4nnB,YACL5nnB,KAAK4nnB,UAAUv1mB,UACfrS,KAAK4nnB,eAAY1snB,GAEjB8E,KAAK6nnB,YACL7nnB,KAAK6nnB,UAAUx1mB,UACfrS,KAAK6nnB,eAAY3snB,GAEjB8E,KAAKionB,WACLjonB,KAAKionB,SAAS51mB,UACdrS,KAAKionB,cAAW/snB,GAEhB8E,KAAKgonB,YACLhonB,KAAKgonB,UAAU31mB,UACfrS,KAAKgonB,eAAY9snB,GAErB8E,KAAKwjgB,WAAQtogB,GACRuC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIklC,EAAI,EAAGA,EAAIrsC,KAAKmH,OAAOmK,WAAW9U,OAAQ6vC,IAC/CrsC,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAW+6B,IAC/CA,IAEJrsC,KAAKmH,YAASjM,IAGfy6f,KC1lBPG,GAAiC,WAIjC,SAASA,EAAgBtH,GACrB,IAAIzuf,EAAQC,KAEZA,KAAKo9f,gBAAaligB,EAClB8E,KAAKq9f,iBAAcnigB,EACnB8E,KAAKs9f,mBAAgBpigB,EACrB8E,KAAKu9f,kBAAerigB,EACpB8E,KAAKgjC,mBAAgB9nC,EACrB8E,KAAK4uQ,qBAAkB1zQ,EACvB8E,KAAK4niB,mBAAgB1siB,EACrB8E,KAAKw9f,qBAAkBtigB,EACvB8E,KAAKiyf,qBAAkB/2f,EAIvB8E,KAAKurnB,uBAAyB,SAAUlvnB,GACd,KAAlBA,EAAM8rB,SACNpoB,EAAMyrnB,wBAGdxrnB,KAAKyrnB,oBAAsB,SAAUpvnB,GACjC0D,EAAMu9f,cAAgBjhgB,EAAMU,OAEhCiD,KAAK0rnB,mBAAqB,SAAUrvnB,GAChC0D,EAAMw9f,aAAelhgB,EAAMU,OAE/BiD,KAAK2rnB,iBAAmB,SAAUtvnB,GAC9B0D,EAAMq9f,WAAa/ggB,EAAMU,OAE7BiD,KAAK4rnB,kBAAoB,SAAUvvnB,GAC/B0D,EAAMs9f,YAAchhgB,EAAMU,OAE9BiD,KAAK6rnB,uBAAyB,SAAUxvnB,GACpC0D,EAAM6niB,cAAgBvriB,EAAMU,OAEhCiD,KAAK8rnB,sBAAwB,SAAUzvnB,GACnC0D,EAAM6uQ,gBAAkBvyQ,EAAMU,OAElCiD,KAAK+rnB,sBAAwB,SAAU9rnB,GACnCF,EAAMijC,cAAgB/iC,EAAKlD,OAK/BiD,KAAK6gnB,cAAgB,SAAUxknB,GAC3B,IAAI41f,EAAkBlyf,EAAMyjgB,MAAMvtb,UAAUg8a,gBAC5C,OAAQlyf,EAAMisnB,QAAQl6mB,OAClB,KAAK,EACuC,IAApCmgf,EAAgBrjP,kBAChB7uQ,EAAMksnB,KAAKlvnB,MAAQ,GAEvB,MACJ,KAAK,EACuC,IAApCk1f,EAAgBrjP,iBAAyBnxQ,EAAkBw0f,EAAgBrjP,iBAC3E7uQ,EAAMksnB,KAAKlvnB,MAAQ,GAEdk1f,EAAgBrjP,gBAAkB,IACvC7uQ,EAAMksnB,KAAKlvnB,OAAUk1f,EAA+B,iBAExD,MACJ,KAAK,EACuC,IAApCA,EAAgBrjP,iBAAyBnxQ,EAAkBw0f,EAAgBrjP,iBAC3EqjP,EAAgBrjP,iBAAmB,GAE9BqjP,EAAgBrjP,gBAAkB,IACvC7uQ,EAAMksnB,KAAKlvnB,OAAUk1f,EAA+B,mBAQpEjyf,KAAKksnB,gBAAkB,SAAU7vnB,GAC7B,IAAIoB,EAAkBsC,EAAMyxQ,aAG5B,OAAQzxQ,EAAMyxQ,YAAY1/P,OACtB,KAAK,EACD/R,EAAMy9f,gBAAkB,UACxBz9f,EAAMosnB,KAAKpvnB,MAAQ,GACnB,MACJ,KAAK,EACDgD,EAAMy9f,gBAAkB,UACxBz9f,EAAMosnB,KAAKpvnB,MAAQ,GACnB,MACJ,KAAK,EACDgD,EAAMy9f,gBAAkB,WACxBz9f,EAAMosnB,KAAKpvnB,MAAQ,IAQ/BiD,KAAKosnB,oBAAsB,WACvB,IAAIC,EAEAA,EADAtsnB,EAAMkyf,gBACYlyf,EAAMkyf,gBAGNlyf,EAAMyjgB,MAAMvtb,UAAUg8a,gBAE5C,IAAIq6H,EAAavsnB,EAAM2rD,UAAU55C,MAE7Bw6mB,EADkC,WAAlCD,EAAgBrplB,cACH,EAE0B,SAAlCqplB,EAAgBrplB,cACR,EAE0B,UAAlCqplB,EAAgBrplB,cACR,EAGA,EAEjBjjC,EAAM2rD,UAAU55C,MAAQw6mB,EACxBvsnB,EAAMyniB,gBAAgBzqiB,MAAQsvnB,EAAgB/uH,cAC9Cv9f,EAAM0niB,eAAe1qiB,MAAQsvnB,EAAgB9uH,aAC7Cx9f,EAAMuniB,aAAavqiB,MAAQsvnB,EAAgBjvH,WAC3Cr9f,EAAMwniB,cAAcxqiB,MAAQsvnB,EAAgBhvH,YAC5Ct9f,EAAMksnB,KAAKlvnB,MAAQsvnB,EAAgBz9W,gBACnC,IAAI29W,EAAiBxsnB,EAAMyxQ,YAAY1/P,MAEnCy6mB,EADoC,YAApCF,EAAgB7uH,gBACC,EAEwB,YAApC6uH,EAAgB7uH,gBACJ,EAGA,EAErBz9f,EAAMyxQ,YAAY1/P,MAAQy6mB,EAC1BxsnB,EAAMosnB,KAAKpvnB,MAAQsvnB,EAAgB76W,YACe,SAA9CzxQ,EAAMyjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,UAClC/wC,EAAMyjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,QAAU,SAMpD9wC,KAAKwrnB,qBAAuB,WACxB,IAAIjqG,EACAirG,EACAzsnB,EAAMkyf,iBACNsvB,EAAaxhhB,EAAMkyf,gBACnBu6H,GAAU,IAGVjrG,EAAa,IAAIpqB,GACjBq1H,GAAU,GAET/unB,EAAkBsC,EAAMu9f,iBACzBikB,EAAWjkB,cAAgBv9f,EAAMu9f,eAEhC7/f,EAAkBsC,EAAMw9f,gBACzBgkB,EAAWhkB,aAAex9f,EAAMw9f,cAE/B9/f,EAAkBsC,EAAMy9f,mBACzB+jB,EAAW/jB,gBAAkBz9f,EAAMy9f,iBAElC//f,EAAkBsC,EAAMq9f,cACzBmkB,EAAWnkB,WAAar9f,EAAMq9f,YAE7B3/f,EAAkBsC,EAAMs9f,eACzBkkB,EAAWlkB,YAAct9f,EAAMs9f,aAE9B5/f,EAAkBsC,EAAM6niB,iBACzBrmB,EAAW/vQ,YAAczxQ,EAAM6niB,eAE9BnqiB,EAAkBsC,EAAM6uQ,mBACzB2yQ,EAAW3yQ,gBAAkB7uQ,EAAM6uQ,iBAElCnxQ,EAAkBsC,EAAMijC,iBACzBu+e,EAAWv+e,cAAgBjjC,EAAMijC,eAEjCwplB,EACAzsnB,EAAM0snB,kBAAkBlrG,GAGxBxhhB,EAAMyjgB,MAAMA,MAAMzS,kBAAkBk/E,wBAExClwkB,EAAMyjgB,MAAMo6G,OAAOj2hB,QAKvB3nF,KAAK0snB,qBAAuB,WACxB3snB,EAAMq9f,gBAAaligB,EACnB6E,EAAMw9f,kBAAerigB,EACrB6E,EAAMu9f,mBAAgBpigB,EACtB6E,EAAM6uQ,qBAAkB1zQ,EACxB6E,EAAMijC,mBAAgB9nC,EACtB6E,EAAMs9f,iBAAcnigB,EACpB6E,EAAM6niB,mBAAgB1siB,EACtB6E,EAAMy9f,qBAAkBtigB,EACxB6E,EAAMkyf,qBAAkB/2f,EACxB6E,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAMyjgB,MAAMj0Y,eAEhBvvH,KAAKwjgB,MAAQhV,EAyPjB,OApPAsH,EAAgB16f,UAAU2mC,cAAgB,WACtC,MAAO,mBAMX+zd,EAAgB16f,UAAU20f,oBAAsB,SAAU/hf,GACtD,IACIm0mB,EAAUninB,KAAKwjgB,MAAMA,MAAMx/W,YAC3B1gJ,EAAK6+mB,EAAU,oBACnBninB,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,4BAExD,IAAInC,EAAMC,EAAc,OAASmC,GAAI,eAAgBC,OAAQ,iBACzD6+mB,EAAajhnB,EAAc,OAASmC,GAAI,aAAcC,OAAQ,2BAA4BF,UAAW,gCAErGg/mB,EAAWlhnB,EAAc,OAASmC,GAAI6+mB,EAAU,YAAa9+mB,UAAW,wBAAyBrB,UAAWgM,EAAOisE,YAAY,aAC/H0yiB,EAAaxrnB,EAAc,OAASmC,GAAI6+mB,EAAU,cAAe9+mB,UAAW,sBAAuBrB,UAAWgM,EAAOisE,YAAY,eACjIvuB,EAAYvqD,EAAc,UAC1BmC,GAAI6+mB,EAAU,aACdngnB,UAAW,0BAA4BgM,EAAOisE,YAAY,UACtD,iCAAmCjsE,EAAOisE,YAAY,QACtD,kCAAoCjsE,EAAOisE,YAAY,SACvD,oCAAsCjsE,EAAOisE,YAAY,WAAa,cAE9EmoiB,EAAWzgnB,YAAY0gnB,GACvBD,EAAWzgnB,YAAYgrnB,GACvBvK,EAAWzgnB,YAAY+pD,GAEvB,IAAIkhkB,EAAezrnB,EAAc,OAASmC,GAAI,gBAAiBC,OAAQ,8BAA+BF,UAAW,gCAC7GwpnB,EAAmB1rnB,EAAc,OAASmC,GAAI,iBAAkBC,OAAQ,kCAC5EqpnB,EAAajrnB,YAAYkrnB,GAEzB,IAAIC,EAAoB3rnB,EAAc,OAASkC,UAAW,oCAAqCE,OAAQ,mCACvGqpnB,EAAajrnB,YAAYmrnB,GAEzB,IAAIC,EAAa5rnB,EAAc,OAASmC,GAAI,cAAeC,OAAQ,8BAA+BF,UAAW,gCACzG2pnB,EAAiB7rnB,EAAc,OAASmC,GAAI,eAAgBC,OAAQ,kCACxEwpnB,EAAWprnB,YAAYqrnB,GAEvB,IAAIC,EAAkB9rnB,EAAc,OAASkC,UAAW,oCAAqCE,OAAQ,mCACrGwpnB,EAAWprnB,YAAYsrnB,GAEvB,IAAIC,EAAc/rnB,EAAc,OAC5BmC,GAAI6+mB,EAAU,eAAgB9+mB,UAAW,wBAAyBrB,UAAWgM,EAAOisE,YAAY,iBAEhGkziB,EAAkBhsnB,EAAc,OAChCmC,GAAI6+mB,EAAU,eACd9+mB,UAAW,sBAAuBrB,UAAWgM,EAAOisE,YAAY,iBAGhEmjb,EAAaj8f,EAAc,SAAWmC,GAAI6+mB,EAAU,cAAe1+mB,OAASiD,KAAQ,UACpF0mnB,EAAejsnB,EAAc,OAASmC,GAAI6+mB,EAAU,gBAAiB9+mB,UAAW,sBAAuBrB,UAAWgM,EAAOisE,YAAY,aACrI+xiB,EAAU7qnB,EAAc,UACxBmC,GAAI6+mB,EAAU,WACdngnB,UAAW,wBAA0BgM,EAAOisE,YAAY,QACpD,uCAAyCjsE,EAAOisE,YAAY,cAC5D,oCAAsCjsE,EAAOisE,YAAY,WAAa,eAE9E4yiB,EAAiBlrnB,YAAYurnB,GAC7BL,EAAiBlrnB,YAAYwrnB,GAC7BN,EAAiBlrnB,YAAYy7f,GAC7ByvH,EAAiBlrnB,YAAYyrnB,GAC7BP,EAAiBlrnB,YAAYqqnB,GAE7B,IAAIqB,EAAiBlsnB,EAAc,OAASmC,GAAI6+mB,EAAU,eAAgB9+mB,UAAW,sBAAuBrB,UAAWgM,EAAOisE,YAAY,gBACtIojb,EAAcl8f,EAAc,SAAWmC,GAAI6+mB,EAAU,eAAgB1+mB,OAASiD,KAAQ,UAEtF4mnB,EAAUnsnB,EAAc,SAAWmC,GAAI6+mB,EAAU,WAAY9+mB,UAAW,sBAAuBrB,UAAWgM,EAAOisE,YAAY,QAC7HsziB,EAAKpsnB,EAAc,SAAWmC,GAAI6+mB,EAAU,MAAO1+mB,OAASiD,KAAQ,UACxEomnB,EAAkBnrnB,YAAY0rnB,GAC9BP,EAAkBnrnB,YAAY07f,GAC9ByvH,EAAkBnrnB,YAAY2rnB,GAC9BR,EAAkBnrnB,YAAY4rnB,GAE9B,IAAIC,EAAarsnB,EAAc,OAASa,UAAWgM,EAAOisE,YAAY,WAAY52E,UAAW,wBAAyBC,GAAI6+mB,EAAU,gBAChIsL,EAActsnB,EAAc,OAASkC,UAAW,sBAAuBrB,UAAWgM,EAAOisE,YAAY,UAAW32E,GAAI6+mB,EAAU,iBAE9H7kH,EAAgBn8f,EAAc,SAAWmC,GAAI6+mB,EAAU,iBAAkB1+mB,OAASiD,KAAQ,UAC1FgnnB,EAAiBvsnB,EAAc,OAASmC,GAAI6+mB,EAAU,kBAAmB9+mB,UAAW,sBAAuBrB,UAAWgM,EAAOisE,YAAY,kBAEzIu3L,EAAcrwQ,EAAc,UAC5BmC,GAAI6+mB,EAAU,eAAgB5+mB,OAAQ,eACtCvB,UAAW,4BAA8BgM,EAAOisE,YAAY,YACxD,oCAAsCjsE,EAAOisE,YAAY,WACzD,qCAAuCjsE,EAAOisE,YAAY,YAAc,cAEhF+yiB,EAAerrnB,YAAY6rnB,GAC3BR,EAAerrnB,YAAY8rnB,GAC3BT,EAAerrnB,YAAY27f,GAC3B0vH,EAAerrnB,YAAY+rnB,GAC3BV,EAAerrnB,YAAY6vQ,GAE3B,IAAIm8W,EAAaxsnB,EAAc,OAASa,UAAWgM,EAAOisE,YAAY,SAAU52E,UAAW,sBAAuBC,GAAI6+mB,EAAU,gBAC5H5kH,EAAep8f,EAAc,SAAWmC,GAAI6+mB,EAAU,gBAAiB1+mB,OAASiD,KAAQ,UAExFknnB,EAAUzsnB,EAAc,OAASa,UAAWgM,EAAOisE,YAAY,MAAO32E,GAAI6+mB,EAAU,WAAY9+mB,UAAW,wBAC3GwqnB,EAAgB1snB,EAAc,SAAWmC,GAAI6+mB,EAAU,iBAAkB1+mB,OAASiD,KAAQ,UAC9FumnB,EAAgBtrnB,YAAYgsnB,GAC5BV,EAAgBtrnB,YAAY47f,GAC5B0vH,EAAgBtrnB,YAAYisnB,GAC5BX,EAAgBtrnB,YAAYksnB,GAC5B3snB,EAAIS,YAAYygnB,GAChBlhnB,EAAIS,YAAYirnB,GAChB1rnB,EAAIS,YAAYornB,GAChB/snB,KAAKmH,OAAOxF,YAAYT,GACxBlB,KAAKsniB,aAAe,IAAI99Z,IACpBjrG,OAAQ,KAAMxhC,MAAO,EAAGqjB,KAAM,KAAM9T,IAAK,KAAM0J,MAAO,IAAKi8F,mBAAmB,EAAOxxF,OAAQzgB,KAAK2rnB,mBAEtG3rnB,KAAKsniB,aAAaz2f,SAASusd,GAC3Bp9f,KAAKuniB,cAAgB,IAAI/9Z,IACrBjrG,OAAQ,KAAMxhC,MAAO,EAAGqjB,KAAM,KAAM9T,IAAK,KAAM0J,MAAO,IAAKi8F,mBAAmB,EAAOxxF,OAAQzgB,KAAK4rnB,oBAEtG5rnB,KAAKuniB,cAAc12f,SAASwsd,GAC5Br9f,KAAKisnB,KAAO,IAAIzif,IACZjrG,OAAQ,KAAMxhC,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IAAKi8F,mBAAmB,EAAOxxF,OAAQzgB,KAAK8rnB,wBAElG9rnB,KAAKisnB,KAAKp7kB,SAAS08kB,GACnBvtnB,KAAKwniB,gBAAkB,IAAIh+Z,IACvBjrG,OAAQ,KAAMxhC,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IAAKq8E,KAAM,EAAG4f,mBAAmB,EACnFxxF,OAAQzgB,KAAKyrnB,sBAEjBzrnB,KAAKwniB,gBAAgB32f,SAASysd,GAC9Bt9f,KAAKyniB,eAAiB,IAAIj+Z,IACtBjrG,OAAQ,KAAMxhC,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IAAKq8E,KAAM,EAAG4f,mBAAmB,EACnFxxF,OAAQzgB,KAAK0rnB,qBAEjB1rnB,KAAKyniB,eAAe52f,SAAS0sd,GAC7Bv9f,KAAKmsnB,KAAO,IAAI3if,IACZjrG,OAAQ,KAAMxhC,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IAAKq8E,KAAM,GAAK4f,mBAAmB,EAAOxxF,OAAQzgB,KAAK6rnB,yBAE7G7rnB,KAAKgsnB,QAAU,IAAInkB,IAAepnlB,OAAQzgB,KAAK6gnB,cAAe7qmB,MAAO,MACrEhW,KAAKgsnB,QAAQn7kB,SAASm7kB,GACtBhsnB,KAAKwxQ,YAAc,IAAIq2V,IAAepnlB,OAAQzgB,KAAKksnB,gBAAiBl2mB,MAAO,UAC3EhW,KAAKwxQ,YAAY3gO,SAAS2gO,GAC1BxxQ,KAAK0rD,UAAY,IAAIm8iB,IAAe7xlB,MAAO,IAAKyK,OAAQzgB,KAAK+rnB,wBAC7D/rnB,KAAK0rD,UAAU7a,SAAS6a,GACxB1rD,KAAKmsnB,KAAKt7kB,SAASg9kB,GACnB7tnB,KAAKmH,OAAO1K,iBAAiB,QAlIduD,KAkIgCurnB,yBAOnDz1H,EAAgB16f,UAAUqxnB,kBAAoB,SAAUx6H,GACpDjyf,KAAKwjgB,MAAMA,MAAM1U,aAAaliD,YAAY,mBAC1C,IAAI32X,EAAYj2E,KAAKwjgB,MAAMvtb,UAC3Bj2E,KAAKwjgB,MAAMA,MAAMliB,mBAAoB,EACjCthf,KAAKwjgB,MAAMvtb,UAAU2hK,SACrB53O,KAAKwjgB,MAAMA,MAAM1U,aAAa2gF,wBAAwBx5f,EAAU14E,MAAM05f,eAAW/7f,EAAW+2f,GAAiB,GAC7Gjyf,KAAKwjgB,MAAMA,MAAM8Q,OAAOo7D,gBAAgBz5f,EAAU14E,MAAM05f,WAAW,IAGnEj3f,KAAKwjgB,MAAMA,MAAM1U,aAAa6gF,mCAAmC,kBAAmB19E,GAAiB,GAEzGjyf,KAAKwjgB,MAAMA,MAAM1U,aAAayrE,SAAStkf,IAK3C6/a,EAAgB16f,UAAUo8H,KAAO,SAAUy6X,GACnCA,IACAjyf,KAAKiyf,gBAAkBA,GAE3B,IAAI67H,EAAQ,IAAI1vgB,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eACxDiiL,EAAMvvgB,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACjCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAK+vf,oBAAoB+9H,GAE7B9tnB,KAAKosnB,sBACLpsnB,KAAKwjgB,MAAMo6G,OAAO9yhB,OAAS,YAC3B9qF,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAKwrnB,qBACZxxf,aAAe19F,QAASwxlB,EAAM7ziB,YAAY,MAAOhnE,SAAU,qBAAsBwxG,WAAW,KAG5FwV,MAAOj6H,KAAK0snB,qBACZ1yf,aAAe19F,QAASwxlB,EAAM7ziB,YAAY,UAAWhnE,SAAU,0BAEvEjT,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAKwjgB,MAAMj0Y,YAC1CvvH,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAKwjgB,MAAMj0Y,YACrCvvH,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOpmf,QAKtBs+X,EAAgB16f,UAAUiX,QAAU,WAyChC,GAxCIrS,KAAKyniB,iBACLzniB,KAAKyniB,eAAep1hB,UACpBrS,KAAKyniB,oBAAiBvsiB,GAEtB8E,KAAKwniB,kBACLxniB,KAAKwniB,gBAAgBn1hB,UACrBrS,KAAKwniB,qBAAkBtsiB,GAEvB8E,KAAKsniB,eACLtniB,KAAKsniB,aAAaj1hB,UAClBrS,KAAKsniB,kBAAepsiB,GAEpB8E,KAAKuniB,gBACLvniB,KAAKuniB,cAAcl1hB,UACnBrS,KAAKuniB,mBAAgBrsiB,GAErB8E,KAAKisnB,OACLjsnB,KAAKisnB,KAAK55mB,UACVrS,KAAKisnB,UAAO/wnB,GAEZ8E,KAAKmsnB,OACLnsnB,KAAKmsnB,KAAK95mB,UACVrS,KAAKmsnB,UAAOjxnB,GAEZ8E,KAAK0rD,YACL1rD,KAAK0rD,UAAUjrC,YAASvlB,EACxB8E,KAAK0rD,UAAUr5C,WAEnBrS,KAAK0rD,eAAYxwD,EACb8E,KAAKwxQ,cACLxxQ,KAAKwxQ,YAAY/wP,YAASvlB,EAC1B8E,KAAKwxQ,YAAYn/P,WAErBrS,KAAKwxQ,iBAAct2Q,EACf8E,KAAKgsnB,UACLhsnB,KAAKgsnB,QAAQvrmB,YAASvlB,EACtB8E,KAAKgsnB,QAAQ35mB,WAEjBrS,KAAKgsnB,aAAU9wnB,EACf8E,KAAKwjgB,WAAQtogB,GACRuC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIs/J,EAAI,EAAGA,EAAIzmK,KAAKmH,OAAOmK,WAAW9U,OAAQiqK,IAC/CzmK,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAWm1J,IAC/CA,IAEJzmK,KAAKmH,YAASjM,IAGf46f,KCrcPi4H,GAA+B,WAI/B,SAASA,IACL/tnB,KAAKgunB,YAAS9ynB,EACd8E,KAAKiunB,mBAAgB/ynB,EAIrB8E,KAAK49mB,YAAS1inB,EACd8E,KAAKk6f,YAAc,EAmKvB,OAjKA57f,OAAOuJ,eAAekmnB,EAAc3ynB,UAAW,eAI3CsM,IAAK,WACD,OAAO1H,KAAKiunB,eAKhB5mnB,IAAK,SAAUtK,GACXiD,KAAKiunB,cAAgBlxnB,GAEzB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmnB,EAAc3ynB,UAAW,QAI3CsM,IAAK,WACD,OAAO1H,KAAKgunB,QAKhB3mnB,IAAK,SAAUtK,GACPU,EAAkBV,GAClBiD,KAAKi4M,aAGLj4M,KAAKgunB,OAASjxnB,GAGtB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmnB,EAAc3ynB,UAAW,aAI3CsM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKgpG,OAAShpG,KAAKk6f,aAAe,GAAKl6f,KAAKk6f,YAAc,EAAG,CAChF,GAAKz8f,EAAkBuC,KAAK49mB,OAAOp6G,MAAM2f,oBAAoBnjhB,KAAKgpG,KAAKuxZ,iBAMlE,CACDv6f,KAAK49mB,OAAOp6G,MAAM5uN,MAAMpwS,KAAKxE,KAAKgpG,MAClC,IAAIwxZ,EAAex6f,KAAKgpG,KAAKwxZ,aACxBx6f,KAAKgpG,KAAKwxZ,gBACXA,EAAe,IAAI2e,IACN5e,eAAiBv6f,KAAKgpG,KAAKuxZ,gBAE5C,IAAI2zH,EAAe,IAAI70G,GAAW7e,GAWlC,OAVA0zH,EAAa77H,gBAAkB,IAAI+E,GAAiB82H,GACpDA,EAAaj8H,gBAAkB,IAAIkF,GAAiB+2H,GACpDA,EAAaj8H,gBAAgBmL,WAAa,GAC1C8wH,EAAaj8H,gBAAgBrjP,iBAAmB,GAChDs/W,EAAa10G,aAAe,IAAM,GAAItsgB,WAAa,IACnDghnB,EAAap1G,iBAAmB,UAChCo1G,EAAa30G,gBAAkB,MAC/B20G,EAAa/zH,QAAU,EACvB+zH,EAAaz0G,aAAe,EAC5Bz5gB,KAAK49mB,OAAOp6G,MAAMhP,cAAchwf,KAAKg2f,GAC9Bx6f,KAAK49mB,OAAOp6G,MAAM2f,oBAAoBnjhB,KAAKgpG,KAAKuxZ,gBAAgB50a,OAAO,GApB9E,OAHI3lF,KAAK49mB,OAAOp6G,MAAM2f,oBAAoBnjhB,KAAKgpG,KAAKuxZ,gBAAgB50a,OAAOnpF,QAAUwD,KAAKk6f,aACtFl6f,KAAKkghB,gBAEFlghB,KAAK49mB,OAAOp6G,MAAM2f,oBAAoBnjhB,KAAKgpG,KAAKuxZ,gBAAgB50a,OAAO3lF,KAAKk6f,eA0B/Fvyf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmnB,EAAc3ynB,UAAW,oBAI3CsM,IAAK,WACD,OAAKjK,EAAkBuC,KAAKy8f,WAGrB,SAFIz8f,KAAKy8f,UAAUqc,kBAO9BzxgB,IAAK,SAAUtK,GACNU,EAAkBuC,KAAKy8f,aACxBz8f,KAAKy8f,UAAUqc,iBAAmB/7gB,IAG1C4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmnB,EAAc3ynB,UAAW,mBAI3CsM,IAAK,WACD,OAAKjK,EAAkBuC,KAAKy8f,WAGrB,OAFIz8f,KAAKy8f,UAAU8c,iBAO9BlygB,IAAK,SAAUtK,GACNU,EAAkBuC,KAAKy8f,aACxBz8f,KAAKy8f,UAAU8c,gBAAkBx8gB,IAGzC4K,YAAY,EACZC,cAAc,IAElBmmnB,EAAc3ynB,UAAU68M,WAAa,WACjCj4M,KAAKgpG,KAAO,IAAIoxZ,GAChBp6f,KAAKgpG,KAAKqxZ,OAASr6f,KAAK49mB,OAAOp6G,MAAM5uN,MAAMp4S,OAAS,EACpD,IAAIg+f,EAAe,IAAI2e,GACvB3e,EAAaD,eAAiBv6f,KAAK49mB,OAAOp6G,MAAMhP,cAAch4f,OAAS,EACvEwD,KAAKgpG,KAAKuxZ,eAAiBC,EAAaD,eACxCv6f,KAAK49mB,OAAOp6G,MAAM5uN,MAAMpwS,KAAKxE,KAAKgpG,MAClC,IAAIyzZ,EAAY,IAAI4c,GAAW7e,GAC/BiC,EAAUxK,gBAAkB,IAAIkF,GAAiBsF,GACjDA,EAAUxK,gBAAgBmL,WAAa,GACvCX,EAAUxK,gBAAgBrjP,iBAAmB,GAC7C6tP,EAAUpK,gBAAkB,IAAI+E,GAAiBqF,GACjDA,EAAU+c,aAAe,MACzB/c,EAAUtC,QAAU,EACpBK,EAAa70a,OAAOnhF,KAAKi4f,GACzBz8f,KAAK49mB,OAAOp6G,MAAMhP,cAAchwf,KAAKg2f,IAEzCuzH,EAAc3ynB,UAAU8khB,cAAgB,WACpC,IAAKzihB,EAAkBuC,KAAKgpG,QAAUvrG,EAAkBuC,KAAKgpG,KAAKuxZ,gBAC9D,IAAK,IAAIr+f,EAAI8D,KAAK49mB,OAAOp6G,MAAM2f,oBAAoBnjhB,KAAKgpG,KAAKuxZ,gBAAgB50a,OAAOnpF,OAAQN,EAAI,EAAGA,IAAK,CACpG,IAAIgynB,EAAe,IAAI70G,GAAWr5gB,KAAK49mB,OAAOp6G,MAAM2f,oBAAoBnjhB,KAAKgpG,KAAKuxZ,iBAClF2zH,EAAa77H,gBAAkB,IAAI+E,GAAiB82H,GACpDA,EAAaj8H,gBAAkB,IAAIkF,GAAiB+2H,GACpDA,EAAaj8H,gBAAgBmL,WAAuB,IAATlhgB,EAAI,GAC/CgynB,EAAaj8H,gBAAgBrjP,iBAAmB,GAChDs/W,EAAa10G,aAAe,KAAOt9gB,EAAI,GAAGgR,WAAa,IACvDghnB,EAAap1G,iBAAmB,SAChCo1G,EAAa30G,gBAAkB,MAC/B20G,EAAa/zH,QAAU,EACvB+zH,EAAaz0G,aAAev9gB,EAC3B8D,KAAK49mB,OAAY,MAAEz6F,oBAAoBnjhB,KAAKgpG,KAAKuxZ,gBAAgB50a,OAAOnhF,KAAK0pnB,KAO1FH,EAAc3ynB,UAAUiX,QAAU,WAC9BrS,KAAKgpG,UAAO9tG,EACZ8E,KAAKu5gB,qBAAkBr+gB,EACvB8E,KAAKk6f,iBAAch/f,EACnB8E,KAAK84gB,sBAAmB59gB,GAErB6ynB,KCzKPl4H,GAA4B,WAI5B,SAASA,EAAWrH,GAChB,IAAIzuf,EAAQC,KAIZA,KAAK49mB,YAAS1inB,EACd8E,KAAKmH,YAASjM,EAId8E,KAAKwjgB,WAAQtogB,EACb8E,KAAKmunB,eAAYjznB,EACjB8E,KAAKm6f,aAAUj/f,EACf8E,KAAKo6N,gBAAal/N,EAClB8E,KAAKounB,eAAYlznB,EACjB8E,KAAKqunB,sBAAmBnznB,EACxB8E,KAAKsunB,sBAAmBpznB,EACxB8E,KAAKomT,iBAAclrT,EACnB8E,KAAKw5gB,kBAAet+gB,EACpB8E,KAAKuunB,eAAYrznB,EAIjB8E,KAAKwunB,uBAAwB,EAC7BxunB,KAAKyunB,oBAAsB,SAAUxunB,GACjCF,EAAMounB,UAAU1xH,UAAUxK,gBAAgBmL,WAAan9f,EAAKlD,OAEhEiD,KAAK0unB,oBAAsB,SAAUzunB,GACjCF,EAAMounB,UAAU1xH,UAAUtC,QAAUl6f,EAAKlD,OAE7CiD,KAAK2unB,wBAA0B,SAAU1unB,GACrCF,EAAMounB,UAAUj0H,YAActle,SAAS30B,EAAKlD,MAAMsE,MAAMpB,EAAKlD,MAAMP,OAAS,GAAI,IAAM,EAClFiB,EAAkBsC,EAAM08f,aAGxBh/f,EAAkBsC,EAAM08f,UAAUpK,mBAClCtyf,EAAM08f,UAAUpK,gBAAkB,IAAI+E,GAAiBr3f,EAAMounB,UAAU1xH,YAEtEh/f,EAAkBsC,EAAM08f,UAAUxK,mBACnClyf,EAAM08f,UAAUxK,gBAAkB,IAAIkF,GAAiBp3f,EAAMounB,UAAU1xH,YAE3E18f,EAAM6unB,qBACN7unB,EAAM8unB,0BAEV7unB,KAAK8unB,sBAAwB,SAAU7unB,GACnCF,EAAMounB,UAAU1xH,UAAU+c,aAAev5gB,EAAKkH,OAAOpK,OAEzDiD,KAAK+unB,wBAA0B,SAAU9unB,GACrCF,EAAMounB,UAAU1xH,UAAUxK,gBAAgBrjP,gBAAkB3uQ,EAAKlD,OAErEiD,KAAKgvnB,8BAAgC,SAAU/unB,GACvCA,EAAKlD,QACLgD,EAAMounB,UAAU50G,gBAAkBt5gB,EAAKlD,QAG/CiD,KAAKivnB,2BAA6B,SAAUhvnB,GACxCF,EAAMounB,UAAUr1G,iBAAmB74gB,EAAKlD,MACxC,IAAIy8gB,EAAe,KAAOz5gB,EAAMm6f,YAAc,GAAGhtf,WAE7CginB,EAAsB1unB,SAAS2uB,eAAepvB,EAAMyjgB,MAAMA,MAAMx/W,YAAc,iBACzC,WAArCjkJ,EAAM08f,UAAUqc,kBAChB/4gB,EAAM08f,UAAU+c,aAAe,IAC/B01G,EAAoBnynB,MAAQgD,EAAM08f,UAAU+c,aAC5Cz5gB,EAAM08f,UAAUpK,gBAAgB7ie,WAAa,cAGJ,SAArCzvB,EAAM08f,UAAUqc,mBAChB/4gB,EAAM08f,UAAU+c,aAAe,IAE9Bz5gB,EAAM08f,UAAU+c,aAAa9pgB,MAAM8pgB,IAAsD,SAArCz5gB,EAAM08f,UAAUqc,mBACrE/4gB,EAAM08f,UAAU+c,aAAeA,EAAe,KAElD01G,EAAoBnynB,MAAQgD,EAAM08f,UAAU+c,eAGpDx5gB,KAAKmvnB,eAAiB,WAClBpvnB,EAAMyjgB,MAAMj0Y,cACR9xH,EAAkBsC,EAAMyjgB,MAAMA,SAGlCzjgB,EAAMounB,UAAY,IAAIJ,GACtBhunB,EAAMounB,UAAUvQ,OAAS79mB,EACrBA,EAAMyjgB,MAAMvtb,UAAUg8a,gBAAgBiJ,gBAAkB,IACxDn7f,EAAMounB,UAAUj0H,YAAcn6f,EAAMyjgB,MAAMvtb,UAAUg8a,gBAAgBiJ,iBAExEn7f,EAAMounB,UAAUnlhB,KAAOjpG,EAAMyjgB,MAAMvtb,UAAUg8a,gBAAgBo2C,UACzD5qiB,EAAkBsC,EAAM08f,aAGxBh/f,EAAkBsC,EAAM08f,UAAUpK,mBAClCtyf,EAAM08f,UAAUpK,gBAAkB,IAAI+E,GAAiBr3f,EAAMounB,UAAU1xH,YAEvEh/f,EAAkBsC,EAAM08f,UAAUxK,mBAClClyf,EAAM08f,UAAUxK,gBAAkB,IAAIkF,GAAiBp3f,EAAMounB,UAAU1xH,YAE3E18f,EAAM6unB,qBAC4C,SAA9C7unB,EAAMyjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,UAClC/wC,EAAMyjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,QAAU,WAGpD9wC,KAAKoyf,eAAiB,WAClBryf,EAAMyjgB,MAAMA,MAAMtT,iBAAiBkC,eAAeryf,EAAM08f,UAAUpK,kBAEtEryf,KAAK0oiB,YAAc,WACVjriB,EAAkBsC,EAAMyjgB,QACzBzjgB,EAAMyjgB,MAAMvtb,UAAUg8a,gBAAgBw2C,QAAQ1oiB,EAAMipG,MAExDjpG,EAAMyjgB,MAAM4rH,QAAQzniB,OACpB5nF,EAAMyjgB,MAAMj0Y,eAEhBvvH,KAAK29mB,oBAAsB,WACvB59mB,EAAMsvnB,0BACNtvnB,EAAMyjgB,MAAM4rH,QAAQzniB,OACpB5nF,EAAMyjgB,MAAMj0Y,cACZxvH,EAAMyunB,uBAAwB,GAElCxunB,KAAKsvnB,gBAAkB,WACnBvvnB,EAAMsvnB,0BACNtvnB,EAAMyjgB,MAAMj0Y,cACZxvH,EAAMyunB,uBAAwB,GAElCxunB,KAAKwjgB,MAAQhV,EACbxuf,KAAKmunB,UAAY,IAAIJ,GA4RzB,OA1RAzvnB,OAAOuJ,eAAeguf,EAAWz6f,UAAW,aAIxCsM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKmunB,WACxB,OAAOnunB,KAAKmunB,UAAU1xH,WAI9B90f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeguf,EAAWz6f,UAAW,QAIxCsM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKmunB,WACxB,OAAOnunB,KAAKmunB,UAAUnlhB,MAI9BrhG,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeguf,EAAWz6f,UAAW,eAIxCsM,IAAK,WACD,OAAI1H,KAAKy8f,UAAUrD,qBAAqBY,GAC7Bh6f,KAAKy8f,UAAUrD,UAAUc,YAG3Bl6f,KAAKy8f,UAAUrD,qBAAqB+f,KAAkB17gB,EAAkBuC,KAAKy8f,UAAUrD,UAAUzza,QAC/F3lF,KAAKy8f,UAAUrD,UAAUzza,OAAOpnF,QAAQyB,KAAKy8f,YAG5C,GAGhB90f,YAAY,EACZC,cAAc,IAKlBiuf,EAAWz6f,UAAU2mC,cAAgB,WACjC,MAAO,cAKX8zd,EAAWz6f,UAAU43f,eAAiB,WAClC,IAAIhlf,EAAS,IAAIowG,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eACzD79b,EAAOuwG,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QAClCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAKwwf,eAAexif,GAExBhO,KAAKwunB,uBAAwB,EAC7BxunB,KAAKwjgB,MAAM4rH,QAAQtkiB,OAAS98E,EAAOisE,YAAY,8BAC/Cj6E,KAAKwjgB,MAAM4rH,QAAQr5mB,OAAS,OAC5B/V,KAAKwjgB,MAAM4rH,QAAQp5mB,MAAQ,OAC3BhW,KAAKwjgB,MAAM4rH,QAAQ9ylB,QAAUt8B,KAAKmH,OAClCnH,KAAKwjgB,MAAM4rH,QAAQr1f,UACXE,MAAOj6H,KAAKoyf,eACZp4X,aAAe19F,QAAStuB,EAAOisE,YAAY,QAAShnE,SAAU,mCAE9DgnH,MAAOj6H,KAAK0oiB,YACZ1ua,aAAe19F,QAAStuB,EAAOisE,YAAY,MAAOhnE,SAAU,oBAAqBwxG,WAAW,KAG5FwV,MAAOj6H,KAAK29mB,oBACZ3jf,aAAe19F,QAAStuB,EAAOisE,YAAY,UAAWhnE,SAAU,uBAExEjT,KAAKwjgB,MAAM4rH,QAAQ5nkB,WACnBxnD,KAAKwjgB,MAAM4rH,QAAQz+kB,WAAa3wC,KAAKmvnB,eACrCnvnB,KAAKwjgB,MAAM4rH,QAAQntnB,MAAQjC,KAAKsvnB,gBAChCtvnB,KAAKwjgB,MAAM4rH,QAAQl7mB,UAAakC,EAAG,SAAUC,EAAG,OAChDrW,KAAKwjgB,MAAM4rH,QAAQ53f,QAMvBq+X,EAAWz6f,UAAUo1f,eAAiB,SAAUxif,GAC5C,IACIg2I,EAAchkJ,KAAKwjgB,MAAMA,MAAMx/W,YAC/B1gJ,EAAK0gJ,EAAc,eACvBhkJ,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,kBACxDrD,KAAKwjgB,MAAMA,MAAMxigB,QAAQW,YAAY3B,KAAKmH,QAE1C,IAAIoonB,EAAepunB,EAAc,OAASa,UAAW,cAAgBgiJ,EAAc,iFAAmFh2I,EAAOisE,YAAY,cAAgB,sBAAwB+pE,EAAc,sEAAwEh2I,EAAOisE,YAAY,0BAA4B,qDAAuD+pE,EAAc,uBAAyBh2I,EAAOisE,YAAY,SAAW,sBAA6BjsE,EAAOisE,YAAY,SAAW,sBAA6BjsE,EAAOisE,YAAY,SAAW,sBAA6BjsE,EAAOisE,YAAY,SAAW,sBAA6BjsE,EAAOisE,YAAY,SAAW,sBAA6BjsE,EAAOisE,YAAY,SAAW,sBAA6BjsE,EAAOisE,YAAY,SAAW,sBAA6BjsE,EAAOisE,YAAY,SAAW,sBAA6BjsE,EAAOisE,YAAY,SAAW,yBAC17Bj6E,KAAKmH,OAAOxF,YAAY4tnB,GACxB,IAAIrunB,EAAMC,EAAc,OAEpBqunB,EAAiBrunB,EAAc,OAASa,UAAW,qDAAuDgiJ,EAAc,yEAA2Eh2I,EAAOisE,YAAY,iBAAmB,sBAAwB+pE,EAAc,2EAA6Eh2I,EAAOisE,YAAY,+BAAiC,sDAAwD+pE,EAAc,yBAA2Bh2I,EAAOisE,YAAY,UAAY,oBAAsBjsE,EAAOisE,YAAY,WAAa,oBAAsBjsE,EAAOisE,YAAY,YAAc,oBAAsBjsE,EAAOisE,YAAY,YAAc,oBAAsBjsE,EAAOisE,YAAY,aAAe,oBAAsBjsE,EAAOisE,YAAY,UAAY,oBAAsBjsE,EAAOisE,YAAY,gBAAkB,oBAAsBjsE,EAAOisE,YAAY,UAAY,oBAAsBjsE,EAAOisE,YAAY,WAAa,oBAAsBjsE,EAAOisE,YAAY,gBAAkB,oBAAsBjsE,EAAOisE,YAAY,WAAa,oBAAsBjsE,EAAOisE,YAAY,YAAc,gCAAkC+pE,EAAc,6EAA+Eh2I,EAAOisE,YAAY,YAAc,kCAAoC+pE,EAAc,eACr0C9iJ,EAAIS,YAAY6tnB,GAEhB,IAAIC,EAAkBtunB,EAAc,OAASkC,UAAW,uBAAwBrB,UAAW,wBAA0BgiJ,EAAc,sFAAwFh2I,EAAOisE,YAAY,+BAAiC,uBAAyB+pE,EAAc,iIAAmIA,EAAc,iDAAmDA,EAAc,6EAA+Eh2I,EAAOisE,YAAY,sBAAwB,sDAAwD+pE,EAAc,uBAAyBh2I,EAAOisE,YAAY,cAAgB,6BACpwB/4E,EAAIS,YAAY8tnB,GAChBzvnB,KAAKmH,OAAOxF,YAAYT,GAExB,IAAIwunB,EAAavunB,EAAc,OAASa,UAAW,qDAAuDgiJ,EAAc,oEAAsEh2I,EAAOisE,YAAY,YAAc,sBAAwB+pE,EAAc,0EAA4Eh2I,EAAOisE,YAAY,kBAAoB,kCAAoC+pE,EAAc,2BAA6BA,EAAc,qFAAuFh2I,EAAOisE,YAAY,sBAAwB,sDAAwD+pE,EAAc,6BAA+Bh2I,EAAOisE,YAAY,iBAAmB,oBAAsBjsE,EAAOisE,YAAY,SAAW,oBAAsBjsE,EAAOisE,YAAY,WAAa,qEAAuE+pE,EAAc,yEAA2Eh2I,EAAOisE,YAAY,cAAgB,kCAAoC+pE,EAAc,uBACjkChkJ,KAAKmH,OAAOxF,YAAY+tnB,GACxB,IAAIC,EAAiBnvnB,SAAS2uB,eAAe60H,EAAc,YACvD4re,EAAsBpvnB,SAAS2uB,eAAe60H,EAAc,eAC5D6re,EAAmBrvnB,SAAS2uB,eAAe60H,EAAc,cAC7DhkJ,KAAKm6f,QAAU,IAAI3wX,IACfjrG,OAAQ,IACR2sG,SAAU,EACV9qH,IAAK,EACL9T,IAAK,GACL0J,MAAO,QACPi8F,mBAAmB,IAEvBjyG,KAAKm6f,QAAQ19f,iBAAiB,SA9BfuD,KA8BkC0unB,qBACjD1unB,KAAKm6f,QAAQtpd,SAAS8+kB,GACtB3vnB,KAAKo6N,WAAa,IAAI5wF,IAClBjrG,OAAQ,IACR2sG,SAAU,EACV9qH,IAAK,EACL9T,IAAK,KACL0J,MAAO,QACPq8E,KAAM,EACN4f,mBAAmB,IAEvBjyG,KAAKo6N,WAAW39N,iBAAiB,SAzClBuD,KAyCqCyunB,qBACpDzunB,KAAKo6N,WAAWvpL,SAAS++kB,GACzB5vnB,KAAKounB,UAAY,IAAI5kf,IACjBjrG,OAAQ,IACRjyB,IAAK,KACL+lF,KAAM,EACNr8E,MAAO,QACPi8F,mBAAmB,IAEvBjyG,KAAKounB,UAAU3xnB,iBAAiB,SAlDjBuD,KAkDoC+unB,yBACnD/unB,KAAKounB,UAAUv9kB,SAASg/kB,GACxB,IAAIpzH,EAAYj8f,SAAS2uB,eAAe60H,EAAc,cACtDhkJ,KAAKqunB,iBAAmB,IAAIxmB,IAAe7tY,YAAa,QAAShkN,MAAO,QAASyK,OArDlEzgB,KAqDmF2unB,0BAClG3unB,KAAKqunB,iBAAiBx9kB,SAAS4rd,GAC/B,IAAIqzH,EAAyBtvnB,SAAS2uB,eAAe60H,EAAc,oBACnEhkJ,KAAKsunB,iBAAmB,IAAIzmB,IAAe7tY,YAAa,QAAShkN,MAAO,QAASyK,OAxDlEzgB,KAwDmFgvnB,gCAClGhvnB,KAAKsunB,iBAAiBz9kB,SAASi/kB,GAC/B,IAAIC,EAAiBvvnB,SAAS2uB,eAAe60H,EAAc,gBAC3DhkJ,KAAKomT,YAAc,IAAIyhT,IAAe7tY,YAAa,QAAShkN,MAAO,QAASyK,OA3D7DzgB,KA2D8EivnB,6BAC7FjvnB,KAAKomT,YAAYv1Q,SAASk/kB,GAC1B/vnB,KAAKw5gB,aAAeh5gB,SAAS2uB,eAAe60H,EAAc,iBAC1DhkJ,KAAKw5gB,aAAa/8gB,iBAAiB,SA9DpBuD,KA8DuC8unB,uBACtD,IAAIkB,EAAiBxvnB,SAAS2uB,eAAe60H,EAAc,cAC3DhkJ,KAAKuunB,UAAY,IAAI1mB,IAAe7tY,YAAa,QAAShkN,MAAO,UACjEhW,KAAKuunB,UAAU19kB,SAASm/kB,GACxB,IAAItpf,EAASlmI,SAAS2uB,eAAe60H,EAAc,cACnDhkJ,KAAKiwnB,kBAAoB,IAAIz/kB,IAAUx6B,MAAO,MAE9ChW,KAAKiwnB,kBAAkB3zlB,QAAUtuB,EAAOisE,YAAY,qCACpDj6E,KAAKiwnB,kBAAkB/7mB,SAAW,WAClClU,KAAKiwnB,kBAAkBp/kB,SAAS61F,IAEpCmvX,EAAWz6f,UAAUyznB,sBAAwB,WAIzC,IAAK,IAHD7qe,EAAchkJ,KAAKwjgB,MAAMA,MAAMx/W,YAC/By4W,EAAYj8f,SAAS2uB,eAAe60H,EAAc,cAClDuqe,EAAY/tnB,SAAS2uB,eAAe60H,EAAc,cAC7C9nJ,EAAI,EAAGA,EAAIqynB,EAAUv7mB,QAAQxW,OAAQN,EAC1CqynB,EAAUv7mB,QAAQzO,OAAOrI,GAE7B,GAAgC,IAA5BuggB,EAAU98b,cAAqB,EAC3Bu8B,EAAS17F,SAASW,cAAc,WAC7BpE,MAAQ,aACfm/F,EAAOl6F,UAAY,aACnBusnB,EAAU5snB,YAAYu6F,OAErB,CACD,IAAShgG,EAAIuggB,EAAU98b,cAAezjE,EAAI,EAAGA,IAAK,CAC9C,IAAIg0nB,EAAW1vnB,SAASW,cAAc,UACtC+unB,EAASnznB,MAAQ,SAAWb,EAC5Bg0nB,EAASlunB,UAAY,SAAW9F,EAChCqynB,EAAU5snB,YAAYuunB,GAE1B,IAAIh0hB,GAAAA,EAAS17F,SAASW,cAAc,WAC7BpE,MAAQ,aACfm/F,EAAOl6F,UAAY,aACnBusnB,EAAU5snB,YAAYu6F,GAE1BqyhB,EAAU5ujB,cAAgB,GAE9Bk2b,EAAWz6f,UAAU+0nB,qBAAuB,SAAUr3G,GAClD,OAAQA,GACJ,IAAK,SAAU,OAAO,EACtB,IAAK,UAAW,OAAO,EACvB,IAAK,WAAY,OAAO,EACxB,IAAK,WAAY,OAAO,EACxB,IAAK,YAAa,OAAO,EACzB,IAAK,SAAU,OAAO,EACtB,IAAK,cAAe,OAAO,EAC3B,IAAK,SAAU,OAAO,EACtB,IAAK,UAAW,OAAO,EACvB,IAAK,cAAe,OAAO,EAC3B,IAAK,UAAW,OAAO,GACvB,IAAK,UAAW,OAAO,GACvB,QAAS,OAAO,KAGxBjjB,EAAWz6f,UAAUg1nB,yBAA2B,SAAU72G,GACtD,OAAQA,GACJ,IAAK,MACD,OAAO,EACX,IAAK,QACD,OAAO,EACX,QACI,OAAO,IAGnB1jB,EAAWz6f,UAAUwznB,mBAAqB,WAEfpunB,SAAS2uB,eAAenvB,KAAKwjgB,MAAMA,MAAMx/W,YAAc,cAC9EhkJ,KAAKm6f,QAAQp9f,MAAQiD,KAAKmunB,UAAU1xH,UAAUtC,QAC9Cn6f,KAAKo6N,WAAWr9N,MAAQiD,KAAKmunB,UAAU1xH,UAAUxK,gBAAgBmL,WACjEp9f,KAAKounB,UAAUrxnB,MAAQiD,KAAKmunB,UAAU1xH,UAAUxK,gBAAgBrjP,gBAChE5uQ,KAAKsunB,iBAAiBx8mB,MAAQ9R,KAAKownB,yBAAyBpwnB,KAAKmunB,UAAU50G,iBAC3Ev5gB,KAAKw5gB,aAAaz8gB,MAAQiD,KAAKmunB,UAAU1xH,UAAU+c,aACnDx5gB,KAAKomT,YAAYt0S,MAAQ9R,KAAKmwnB,qBAAqBnwnB,KAAKmunB,UAAUr1G,kBAClE94gB,KAAKqunB,iBAAiBv8mB,MAAQ9R,KAAKmunB,UAAUj0H,YAC7Cl6f,KAAKmunB,UAAUj0H,YAAcl6f,KAAKmunB,UAAUj0H,aAEhDrE,EAAWz6f,UAAUi0nB,wBAA0B,WAC3CrvnB,KAAKsunB,iBAAiBx8mB,OAAS,EAC/B9R,KAAKw5gB,aAAaz8gB,MAAQ,IAC1BiD,KAAKomT,YAAYt0S,OAAS,EAC1B9R,KAAKqunB,iBAAiBv8mB,OAAS,EAC/B9R,KAAKuunB,UAAUz8mB,OAAS,EACxB9R,KAAKmunB,UAAU97mB,WAKnBwjf,EAAWz6f,UAAUiX,QAAU,WA+B3B,GA9BIrS,KAAKounB,WACLpunB,KAAKounB,UAAU/7mB,UAEnBrS,KAAKounB,eAAYlznB,EACjB8E,KAAK49mB,YAAS1inB,EACV8E,KAAKsunB,kBACLtunB,KAAKsunB,iBAAiBj8mB,UAE1BrS,KAAKsunB,sBAAmBpznB,EACpB8E,KAAKqunB,kBACLrunB,KAAKqunB,iBAAiBh8mB,UAE1BrS,KAAKqunB,sBAAmBnznB,EACpB8E,KAAKo6N,YACLp6N,KAAKo6N,WAAW/nN,UAEpBrS,KAAKo6N,gBAAal/N,EACd8E,KAAKm6f,SACLn6f,KAAKm6f,QAAQ9nf,UAEjBrS,KAAKm6f,aAAUj/f,EACX8E,KAAKomT,aACLpmT,KAAKomT,YAAY/zS,UAErBrS,KAAKomT,iBAAclrT,EACnB8E,KAAKw5gB,kBAAet+gB,EAChB8E,KAAKuunB,WACLvunB,KAAKuunB,UAAUl8mB,UAEnBrS,KAAKuunB,eAAYrznB,GACZuC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIqmC,EAAI,EAAGA,EAAIxtC,KAAKmH,OAAOmK,WAAW9U,OAAQgxC,IAC/CxtC,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAWk8B,IAC/CA,IAEJxtC,KAAKmH,YAASjM,EAElB8E,KAAKwjgB,WAAQtogB,EACb8E,KAAKmunB,eAAYjznB,GAEd26f,KC7ZPD,GAA6B,WAI7B,SAASA,EAAYpH,GACjB,IAAIzuf,EAAQC,KACZA,KAAKmH,YAASjM,EACd8E,KAAKk4f,eAAYh9f,EACjB8E,KAAKqwnB,kBAAen1nB,EACpB8E,KAAKswnB,oBAAiBp1nB,EACtB8E,KAAKuwnB,sBAAmBr1nB,EACxB8E,KAAKiP,cAAW/T,EAChB8E,KAAKwvB,gBAAat0B,EAClB8E,KAAKovB,cAAWl0B,EAChB8E,KAAKqyf,qBAAkBn3f,EACvB8E,KAAKiyf,qBAAkB/2f,EAEvB8E,KAAKwwnB,WAAa,SAAUvwnB,GACxB,OAAQA,EAAKge,KAAK3a,IACd,IAAK,aACDvD,EAAMqyf,iBACN,MACJ,IAAK,kBACDryf,EAAMiyf,sBACN,MACJ,IAAK,kBACDjyf,EAAM0wnB,8BAIlBzwnB,KAAK0wnB,gBAAkB,WACnB3wnB,EAAMsyf,gBAAgBpjc,MAAQlvD,EAAMsyf,gBAAgBpjc,KACpDlvD,EAAM4wnB,uBAAkBz1nB,IAE5B8E,KAAK4wnB,kBAAoB,WACrB7wnB,EAAMsyf,gBAAgBljc,QAAUpvD,EAAMsyf,gBAAgBljc,OACtDpvD,EAAM4wnB,uBAAkBz1nB,IAE5B8E,KAAK6wnB,qBAAuB,WACxB9wnB,EAAMsyf,gBAAgB7kN,UAAgD,SAApCztS,EAAMsyf,gBAAgB7kN,UAAuB,SAAW,OAC1FztS,EAAM4wnB,uBAAkBz1nB,IAG5B8E,KAAK2wnB,kBAAoB,SAAU1wnB,GAC3BF,EAAMsyf,gBAAgBpjc,KACjBlvD,EAAMkvD,KAAKnrD,UAAUK,SAAS,aAC/BpE,EAAMkvD,KAAKnrD,UAAUM,IAAI,YAIzBrE,EAAMkvD,KAAKnrD,UAAUK,SAAS,aAC9BpE,EAAMkvD,KAAKnrD,UAAUS,OAAO,YAGhCxE,EAAMsyf,gBAAgBljc,OACjBpvD,EAAMovD,OAAOrrD,UAAUK,SAAS,aACjCpE,EAAMovD,OAAOrrD,UAAUM,IAAI,YAI3BrE,EAAMovD,OAAOrrD,UAAUK,SAAS,aAChCpE,EAAMovD,OAAOrrD,UAAUS,OAAO,iBAGErJ,IAApC6E,EAAMsyf,gBAAgB7kN,WAA+D,SAApCztS,EAAMsyf,gBAAgB7kN,UAClEztS,EAAMytS,UAAU1pS,UAAUK,SAAS,cACpCpE,EAAMytS,UAAU1pS,UAAUM,IAAI,YAC9BrE,EAAMsyf,gBAAgB7kN,UAAY,UAIlCztS,EAAMytS,UAAU1pS,UAAUK,SAAS,cACnCpE,EAAMytS,UAAU1pS,UAAUS,OAAO,YACjCxE,EAAMsyf,gBAAgB7kN,UAAY,SAK9CxtS,KAAK8wnB,eAAiB,SAAU7wnB,GAC5BF,EAAMsyf,gBAAgBjje,SAAWnvB,EAAKlD,OAG1CiD,KAAK+wnB,kBAAoB,SAAU9wnB,GAC/BF,EAAMsyf,gBAAgB7ie,WAAavvB,EAAKlD,OAG5CiD,KAAKgxnB,gBAAkB,SAAU/wnB,GAC7BF,EAAMsyf,gBAAgBoM,UAAYx+f,EAAKw7I,aAAakkB,MAExD3/J,KAAKixnB,iBAAmB,WACwB,SAAxClxnB,EAAMkyf,gBAAgBjvd,cACtBjjC,EAAMkyf,gBAAgBjvd,cAAgB,UAGtCjjC,EAAMkyf,gBAAgBjvd,cAAgB,OAE1CjjC,EAAMkwkB,yBAEVjwkB,KAAKkxnB,kBAAoB,WACuB,UAAxCnxnB,EAAMkyf,gBAAgBjvd,cACtBjjC,EAAMkyf,gBAAgBjvd,cAAgB,OAGtCjjC,EAAMkyf,gBAAgBjvd,cAAgB,QAE1CjjC,EAAMkwkB,yBAEVjwkB,KAAKmxnB,mBAAqB,WACsB,WAAxCpxnB,EAAMkyf,gBAAgBjvd,cACtBjjC,EAAMkyf,gBAAgBjvd,cAAgB,OAGtCjjC,EAAMkyf,gBAAgBjvd,cAAgB,SAE1CjjC,EAAMkwkB,yBAEVjwkB,KAAKoxnB,oBAAsB,WACqB,YAAxCrxnB,EAAMkyf,gBAAgBjvd,cACtBjjC,EAAMkyf,gBAAgBjvd,cAAgB,OAGtCjjC,EAAMkyf,gBAAgBjvd,cAAgB,UAE1CjjC,EAAMkwkB,yBAEVjwkB,KAAKqxnB,2BAA6B,WAC9BtxnB,EAAMkyf,gBAAgBqL,eAAiB,EACvCv9f,EAAMkyf,gBAAgBsL,cAAgB,GAE1Cv9f,KAAKsxnB,2BAA6B,WAC1BvxnB,EAAMkyf,gBAAgBqL,eAAiB,EACvCv9f,EAAMkyf,gBAAgBqL,eAAiB,EAGvCv9f,EAAMkyf,gBAAgBqL,cAAgB,EAEtCv9f,EAAMkyf,gBAAgBsL,cAAgB,EACtCx9f,EAAMkyf,gBAAgBsL,cAAgB,EAGtCx9f,EAAMkyf,gBAAgBsL,aAAe,GAM7Cv9f,KAAKuxnB,gBAAkB,SAAUtxnB,GAC7B,IAAIuxnB,EAAYvxnB,EAAK25e,WAAW78e,MAChC,GAA6B,cAAzBgD,EAAM0xnB,iBAAmCh0nB,EAAkB+znB,IAA4B,KAAdA,IAAqBzxnB,EAAM2xnB,sBAAuB,CAC3H,IAAInunB,EAASxD,EAAMyjgB,MAAMA,MAAMhV,OAAOjrf,OAAO00f,cAAcl4f,EAAM0xnB,gBAC7D1xnB,EAAM4xnB,SACNpunB,EAASA,EAAO2mC,OAAO,SAAUrpC,GAAK,OAAOA,IAAMd,EAAM6xnB,iBAE7DrunB,EAAOiB,KAAKgtnB,GACZzxnB,EAAMuwnB,eAAejojB,WAAa9kE,EAClCxD,EAAMuwnB,eAAex+mB,MAAQ,KAC7B/R,EAAMuwnB,eAAex+mB,MAAQvO,EAAOhF,QAAQiznB,GAC5CzxnB,EAAMuwnB,eAAe9okB,aAM7BxnD,KAAK6xnB,eAAiB,WACF9xnB,EAAMoH,OAAOuG,uBAAuB,qCAAqCuQ,KAAK,GAAGlhB,MACjGgD,EAAM+xnB,2BAMV9xnB,KAAK+xnB,gBAAkB,SAAU9xnB,GAC7B,GAAIA,EAAKy0H,aAAc,CACnB,IAAIhuH,OAAO,EACQ,cAAfzG,EAAKlD,QACLgD,EAAM2E,MAAQ,IAAIi8f,GAClBj6f,EAAO,aAEQ,cAAfzG,EAAKlD,OAAwC,oCAAfkD,EAAKlD,QACnCgD,EAAM2E,MAAQ,IAAIy2f,GAClBz0f,EAAO,aAEX3G,EAAMiynB,gBACNjynB,EAAMkynB,iBAAiBvrnB,KAI/B1G,KAAKkynB,mBAAqB,SAAUjynB,KAOpCD,KAAKmynB,qBAAuB,SAAUlynB,GAC9BA,EAAKy0H,eACL30H,EAAM2xnB,uBAAwB,IAOtC1xnB,KAAKoyf,eAAiB,WACb30f,EAAkBsC,EAAMyjgB,MAAMA,MAAMtT,mBACrCnwf,EAAMyjgB,MAAMA,MAAMpR,eAAeryf,EAAMsyf,iBAE3Ctyf,EAAM6tkB,yBAKV5tkB,KAAKgyf,oBAAsB,WAClBv0f,EAAkBsC,EAAMyjgB,MAAMA,MAAMxhB,wBACrCjif,EAAMyjgB,MAAMA,MAAMxR,oBAAoBjyf,EAAMkyf,kBAMpDjyf,KAAKywnB,0BAA4B,WAC7B1wnB,EAAMqynB,sBAAwB,IAAIr8H,GAA0Bh2f,EAAMyjgB,MAAMA,MAAMhV,QAC1Ezuf,EAAM2E,iBAAiBy2f,KAAqB19f,EAAkBsC,EAAM2E,MAAMutf,kBAE1Elyf,EAAMqynB,sBAAsBC,uBAAuBtynB,EAAM2E,MAAMutf,gBAAgB+F,WAAYj4f,EAAMy6f,eAMzGx6f,KAAKsynB,gBAAkB,WACnB,IAAIryH,EAAYlggB,EAAMwynB,iBAAiBx1nB,MACvC,KAAIkjgB,EAAUzjgB,OAAS,GA+CnB,MAAM,IAAIoE,MAAM,0BA9ChB,IACIo6E,EADAt2E,EAAQ3E,EAAMyjgB,MAAMA,MAAMhV,OAAOjrf,OAAOu0f,WAAWmI,GAEvD,GAAKxigB,EAAkBiH,GAmBlB,CAED,IAAIu2f,EAAUl7f,EAAMyjgB,MAAMA,MAAMhV,OAAOjrf,OAAOu0f,WAAW/3f,EAAMswnB,aAAatznB,OAC9C,cAA1BgD,EAAMm4f,UAAUn7f,OAAmD,oCAA1BgD,EAAMm4f,UAAUn7f,QACrDkjgB,IAAclggB,EAAMuwnB,eAAevznB,MACnCgD,EAAM2E,MAAM4mC,KAAOvrC,EAAM2E,MAGzB3E,EAAM2E,MAAM4mC,KAAOvrC,EAAMyjgB,MAAMA,MAAMhV,OAAOjrf,OAAOu0f,WAAW/3f,EAAMuwnB,eAAevznB,OAEvFgD,EAAMyoY,cAGVzoY,EAAM2E,MAAMkrD,KAAkC,oCAA1B7vD,EAAMm4f,UAAUn7f,MAA+CgD,EAAMyynB,gBAAgBvyH,QAAa/kgB,EACtH6E,EAAM2E,MAAMgC,KAAO3G,EAAM0xnB,eACzB1xnB,EAAM2E,MAAM6yB,KAAO0oe,EACnBlggB,EAAM2E,MAAMu2f,QAAUA,EAEtBl7f,EAAMyjgB,MAAMA,MAAMhV,OAAOjrf,OAAOiB,KAAKzE,EAAM2E,OAC3Cs2E,EAASilb,EACTlggB,EAAMyjgB,MAAMA,MAAM1U,aAAaomC,WAAWl6c,QAtC1Cj7E,EAAM2E,MAAMgC,KAAO3G,EAAM0xnB,eACzB1xnB,EAAM2E,MAAMu2f,QAAUl7f,EAAMyjgB,MAAMA,MAAMhV,OAAOjrf,OAAOu0f,WAAW/3f,EAAMswnB,aAAatznB,OACtD,cAA1BgD,EAAMm4f,UAAUn7f,OAAmD,oCAA1BgD,EAAMm4f,UAAUn7f,QACzDgD,EAAM2E,MAAM4mC,KAAOvrC,EAAMyjgB,MAAMA,MAAMhV,OAAOjrf,OAAOu0f,WAAW/3f,EAAMuwnB,eAAevznB,OACnFgD,EAAM2E,MAAM2tf,gBAAgBqJ,YAAYh3f,EAAM2tf,iBAC9Ctyf,EAAM2E,MAAMutf,gBAAgByJ,YAAYh3f,EAAMutf,iBAC9Clyf,EAAMyoY,aAENzoY,EAAM2E,MAAMkrD,KAAkC,oCAA1B7vD,EAAMm4f,UAAUn7f,MAA+CgD,EAAMyynB,gBAAgBvyH,EAAWlggB,EAAM4xnB,aAAUz2nB,GAGxI6E,EAAM2E,MAAM6yB,KAAO7yB,EAAM6yB,KACzByjD,EAASt2E,EAAM6yB,KACf7yB,EAAQ3E,EAAM2E,MACd3E,EAAMyjgB,MAAMA,MAAMliB,mBAAoB,EACtCvhf,EAAMyjgB,MAAMA,MAAM1U,aAAak6C,sBAC/BjpiB,EAAMyjgB,MAAMA,MAAMliB,mBAAoB,EAwB1Cvhf,EAAMyjgB,MAAMA,MAAMhV,OAAO4gI,QAAQzniB,OAKjC5nF,EAAM2E,OAKd1E,KAAKyynB,gBAAkB,SAAUxynB,GAC7BF,EAAMyjgB,MAAMA,MAAMhV,OAAOj/X,cACzBxvH,EAAM2xnB,uBAAwB,EAE9B3xnB,EAAMwynB,iBAAmBxynB,EAAMoH,OAAOuG,uBAAuB,qCAAqCuQ,KAAK,GACvGle,EAAMwynB,iBAAiBx1nB,MAAQ,KAC1BgD,EAAM4xnB,SACP5xnB,EAAMm4f,UAAUpmf,MAAQ,GAE5B,IAAIylB,EACAx3B,EAAM4xnB,SACN5xnB,EAAMwynB,iBAAiBx1nB,MAAQgD,EAAM6xnB,cACrCr6lB,EAAOx3B,EAAM6xnB,eAGjB7xnB,EAAM2+H,SAAW3+H,EAAMyjgB,MAAM4rH,QAAQpunB,QAAQ0M,uBAAuB,uBAAuBuQ,KAAK,GAChGle,EAAM+xnB,0BACN/xnB,EAAMkynB,iBAAiBlynB,EAAM0xnB,eAAgBl6lB,GAC7Cx3B,EAAM6tkB,sBAAsB7tkB,EAAM2E,MAAM2tf,iBACxCtyf,EAAMkwkB,sBAAsBlwkB,EAAM2E,MAAMutf,kBAK5Cjyf,KAAK29mB,oBAAsB,YAClB59mB,EAAM4xnB,QAAU5xnB,EAAM2E,OACvB3E,EAAM2E,MAAM2N,UAEhBtS,EAAMyjgB,MAAMA,MAAMhV,OAAO4gI,QAAQzniB,QAKrC3nF,KAAK0ynB,iBAAmB,WACpB3ynB,EAAMyjgB,MAAMA,MAAMhV,OAAOj/X,eAE7BvvH,KAAKwjgB,MAAQhV,EAsiBjB,OAjiBAoH,EAAYx6f,UAAU2mC,cAAgB,WAClC,MAAO,eAMX6zd,EAAYx6f,UAAU41f,gBAAkB,SAAU+lB,GAC9C,IACIzzgB,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,SACxChkJ,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,sBACxD,IAAIwX,EAAY1Z,EAAc,OAE1B8B,EAAa9B,EAAc,OAASkC,UAAW,wBAAyBrB,UAAW+0gB,EAAW98b,YAAY,gBAC9Gp/D,EAAUlZ,YAAYsB,GACtB,IAAI0vnB,EAAmBxxnB,EAAc,OAASoC,OAAQ,eAAgBF,UAAW,4BACjFwX,EAAUlZ,YAAYgxnB,GACtB,IAAIC,EAAezxnB,EAAc,OAASkC,UAAW,wBACrDsvnB,EAAiBhxnB,YAAYixnB,GAC7B,IAAIr7lB,EAAOp2B,EAAc,OAASkC,UAAW,kBAAmBrB,UAAW+0gB,EAAW98b,YAAY,QAAU,MAC5G24iB,EAAajxnB,YAAY41B,GAEzB,IAAIs7lB,EAAY1xnB,EAAc,SAAWmC,GAAItD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,cAAezgJ,OAAQ,eAAgBF,UAAW,sCAC9HwvnB,EAAUp2nB,iBAAiB,QAASuD,KAAK6xnB,gBACzCgB,EAAUp2nB,iBAAiB,QAASuD,KAAK6xnB,gBACzCgB,EAAUp2nB,iBAAiB,OAAQuD,KAAKuxnB,iBACxCqB,EAAajxnB,YAAYkxnB,GACzB,IAAIC,EAAoB3xnB,EAAc,OACtCwxnB,EAAiBhxnB,YAAYmxnB,GAE7B,IAAI56H,EAAY/2f,EAAc,OAASkC,UAAW,uBAAwBrB,UAAW+0gB,EAAW98b,YAAY,cAAgB,MAC5H64iB,EAAkBnxnB,YAAYu2f,GAC9B,IAAI66H,EAAsB5xnB,EAAc,OAASkC,UAAW,8BACxD2vnB,EAAiB7xnB,EAAc,UAAYmC,GAAI,0BAEnD0vnB,EAAehxnB,UAAY,uGAC3B+wnB,EAAoBpxnB,YAAYqxnB,GAChChznB,KAAKk4f,UAAY,IAAI2vG,IAAepnlB,OAAQzgB,KAAK+xnB,gBAAiB/3Z,YAAa,QAAShkN,MAAO,UAC/FhW,KAAKk4f,UAAUrnd,SAASmilB,GACxBF,EAAkBnxnB,YAAYoxnB,GAE9B,IAAIE,EAAoB9xnB,EAAc,OAASoC,OAAQ,eAAgBF,UAAW,8BAClFwX,EAAUlZ,YAAYsxnB,GACtB,IAAIC,EAAuB/xnB,EAAc,OAASkC,UAAW,wBAC7D4vnB,EAAkBtxnB,YAAYuxnB,GAE9B,IAAI7C,EAAelvnB,EAAc,OAASkC,UAAW,4BAA6BrB,UAAW+0gB,EAAW98b,YAAY,kBAAoB,MACxIi5iB,EAAqBvxnB,YAAY0unB,GACjC,IAAI8C,EAAyBhynB,EAAc,OAASkC,UAAW,kCAE3D+vnB,EAAoBjynB,EAAc,SAAWmC,GAAI,oCAErD6vnB,EAAuBxxnB,YAAYyxnB,GACnCpznB,KAAKqwnB,aAAe,IAAIxoB,IAAex/hB,cAAgB5iE,OAAQzF,KAAKkynB,mBAAoBl4Z,YAAa,QAAShkN,MAAO,UACrHhW,KAAKqwnB,aAAax/kB,SAASuilB,GAC3BF,EAAqBvxnB,YAAYwxnB,GACjC,IAAIE,EAAyBlynB,EAAc,OAASkC,UAAW,wBAC/D4vnB,EAAkBtxnB,YAAY0xnB,GAE9B,IAAI/C,EAAiBnvnB,EAAc,OAASkC,UAAW,6BAA8BrB,UAAW+0gB,EAAW98b,YAAY,iCAAmC,MAC1Jo5iB,EAAuB1xnB,YAAY2unB,GACnC,IAAIgD,EAA2BnynB,EAAc,OAASkC,UAAW,mCAE7DkwnB,EAAsBpynB,EAAc,SAAWmC,GAAI,qCAGvDgwnB,EAAyB3xnB,YAAY4xnB,GACrCvznB,KAAKswnB,eAAiB,IAAIzoB,IAAex/hB,cAAgB5iE,OAAQzF,KAAKmynB,qBAAsBn4Z,YAAa,QAAShkN,MAAO,UACzHhW,KAAKswnB,eAAez/kB,SAAS0ilB,GAC7BF,EAAuB1xnB,YAAY2xnB,GAEnC,IAAIE,EAAarynB,EAAc,OAASkC,UAAW,wBAAyBrB,UAAW+0gB,EAAW98b,YAAY,gBAC9Gp/D,EAAUlZ,YAAY6xnB,GACtB,IAAIC,EAAatynB,EAAc,OAASkC,UAAW,2BACnDwX,EAAUlZ,YAAY8xnB,GACtB,IAAIC,EAAiBvynB,EAAc,OAASoC,OAAQ,sCACpDkwnB,EAAW9xnB,YAAY+xnB,GACvB1znB,KAAK2znB,kBAAkBD,GACvB,IAAIE,EAAsBzynB,EAAc,OAASoC,OAAQ,eAAgBF,UAAW,sBACpFownB,EAAW9xnB,YAAYiynB,GACvB5znB,KAAK6znB,uBAAuBD,GAkB5B5znB,KAAK8znB,qBAAqBj5mB,EAAWk8f,GACrC/2gB,KAAKmH,OAAOxF,YAAYkZ,IAE5B+6e,EAAYx6f,UAAU04nB,qBAAuB,SAAU96I,EAAW+9B,GAC9D,IAAIh3gB,EAAQC,KACR+znB,EAAY5ynB,EAAc,UAAYmC,GAAI,wBAAyBtB,UAAW+0gB,EAAW98b,YAAY,YACzG85iB,EAAUrvnB,MAAMqR,OAAS,OACzBije,EAAUr3e,YAAYoynB,GACtB,IAAIr0jB,IAAW1wC,KAAM+nf,EAAW98b,YAAY,QAAU,KAAM32E,GAAI,eAC1D0rB,KAAM+nf,EAAW98b,YAAY,aAAe,KAAM32E,GAAI,oBACtD0rB,KAAM+nf,EAAW98b,YAAY,aAAe,KAAM32E,GAAI,oBACxD0wnB,EAAc,IAAIp8d,IAClBl4F,MAAOA,EAAOzsD,SAAU,4BACxBunJ,iBAAkB,SAAUv6J,GACM,cAA1BF,EAAMm4f,UAAUn7f,OACO,cAAnBkD,EAAKge,KAAK+Q,MACV/uB,EAAKe,QAAQ8C,UAAUM,IAAI,cAER,cAAnBnE,EAAKge,KAAK+Q,MACV/uB,EAAKe,QAAQ8C,UAAUM,IAAI,gBAIR,cAAnBnE,EAAKge,KAAK+Q,MACV/uB,EAAKe,QAAQ8C,UAAUS,OAAO,cAEX,cAAnBtE,EAAKge,KAAK+Q,MACV/uB,EAAKe,QAAQ8C,UAAUS,OAAO,kBAK9CyvnB,EAAYnjlB,SAASkjlB,GACrBC,EAAYv3nB,iBAAiB,SAAUuD,KAAKwwnB,aAEhD56H,EAAYx6f,UAAUu4nB,kBAAoB,SAAU36I,GAChD,IAAIi7I,EAAoB9ynB,EAAc,UAAYmC,GAAItD,KAAKmH,OAAO7D,GAAK,cACvE2wnB,EAAkBjynB,UAAY,6qBAO9Bg3e,EAAUr3e,YAAYsynB,GACtBj0nB,KAAKwvB,WAAa,IAAIkglB,IAClB15lB,MAAO,QAAS6/M,WAAY,QAC5B5iN,SAAU,4BAA6BwN,OAAQzgB,KAAK+wnB,oBAExD/wnB,KAAKwvB,WAAWjK,iBAAkB,EAClCvlB,KAAKwvB,WAAWqhB,SAASojlB,GACzB,IAAIC,EAAkB/ynB,EAAc,SACpC63e,EAAUr3e,YAAYuynB,GAEtBl0nB,KAAKovB,SAAW,IAAIsglB,IAChBrniB,YAFkB,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAEhDryD,MAAO,OAAQ/C,SAAU,4BACrDwN,OAAQzgB,KAAK8wnB,iBAEjB9wnB,KAAKovB,SAAS7J,iBAAkB,EAChCvlB,KAAKovB,SAASyhB,SAASqjlB,GACvB,IAAIC,EAAkBhznB,EAAc,OAASkC,UAAW,iCACxD21e,EAAUr3e,YAAYwynB,GAEtBn0nB,KAAKivD,KAAOjvD,KAAKo0nB,oBAAoBD,EAAiB,YAAa,8BAA+Bn0nB,KAAKwjgB,MAAMA,MAAMx/W,YAAc,eACjIhkJ,KAAKivD,KAAKxyD,iBAAiB,QAASuD,KAAK0wnB,iBAEzC1wnB,KAAKmvD,OAASnvD,KAAKo0nB,oBAAoBD,EAAiB,cAAe,8BAA+Bn0nB,KAAKwjgB,MAAMA,MAAMx/W,YAAc,iBACrIhkJ,KAAKmvD,OAAO1yD,iBAAiB,QAASuD,KAAK4wnB,mBAE3C5wnB,KAAKwtS,UAAYxtS,KAAKo0nB,oBAAoBD,EAAiB,iBAAkB,8BAA+Bn0nB,KAAKwjgB,MAAMA,MAAMx/W,YAAc,oBAC3IhkJ,KAAKwtS,UAAU/wS,iBAAiB,QAASuD,KAAK6wnB,sBAC9C,IAAIwD,EAAmBlznB,EAAc,SAAWsC,OAASiD,KAAM,SAAWrD,UAAW,gCACrF21e,EAAUr3e,YAAY0ynB,GACtBr0nB,KAAKy+f,UAAY,IAAIrgW,IAAcnrJ,SAAU,+BAAgCwN,OAAQzgB,KAAKgxnB,kBAC1FhxnB,KAAKy+f,UAAU5td,SAASwjlB,IAE5Bz+H,EAAYx6f,UAAUy4nB,uBAAyB,SAAU76I,GACrD,IAAIj5e,EAAQC,KACRs0nB,EAAenznB,EAAc,OAASkC,UAAW,sCACrD21e,EAAUr3e,YAAY2ynB,GACtBt0nB,KAAKu0nB,UAAYv0nB,KAAKo0nB,oBAAoBE,EAAc,kBAAmB,+BAC3Et0nB,KAAKu0nB,UAAU93nB,iBAAiB,QAASuD,KAAKixnB,kBAC9CjxnB,KAAKw0nB,YAAcx0nB,KAAKo0nB,oBAAoBE,EAAc,oBAAqB,+BAC/Et0nB,KAAKw0nB,YAAY/3nB,iBAAiB,QAASuD,KAAKmxnB,oBAChDnxnB,KAAKosS,WAAapsS,KAAKo0nB,oBAAoBE,EAAc,mBAAoB,+BAC7Et0nB,KAAKosS,WAAW3vS,iBAAiB,QAASuD,KAAKkxnB,mBAC/ClxnB,KAAKwkhB,QAAUxkhB,KAAKo0nB,oBAAoBE,EAAc,eAAgB,oCACtEt0nB,KAAKwkhB,QAAQ/nhB,iBAAiB,QAASuD,KAAKoxnB,qBAC5C,IAAIqD,EAAiBtznB,EAAc,OAASkC,UAAW,sCACvD21e,EAAUr3e,YAAY8ynB,GACtBz0nB,KAAK00nB,kBAAoB10nB,KAAKo0nB,oBAAoBK,EAAgB,sBAAuB,qCACzFz0nB,KAAK00nB,kBAAkBj4nB,iBAAiB,QAAS,WAC7CsD,EAAMkyf,gBAAgBzgP,YAAc,EACpCzxQ,EAAMkwkB,0BAGVjwkB,KAAK20nB,wBAA0B30nB,KAAKo0nB,oBAAoBK,EAAgB,8BAA+B,+BACvGz0nB,KAAK20nB,wBAAwBl4nB,iBAAiB,QAAS,WACnDsD,EAAMkyf,gBAAgBzgP,YAAc,IACpCzxQ,EAAMkwkB,0BAEVjwkB,KAAK40nB,kBAAoB50nB,KAAKo0nB,oBAAoBK,EAAgB,sBAAuB,oCACzFz0nB,KAAK40nB,kBAAkBn4nB,iBAAiB,QAAS,WAC7CsD,EAAMkyf,gBAAgBzgP,YAAc,EACpCzxQ,EAAMkwkB,0BAEV,IAAI88C,EAAa5rnB,EAAc,OAASkC,UAAW,sCACnD21e,EAAUr3e,YAAYornB,GACtB,IAAIzvH,EAAgBt9f,KAAKo0nB,oBAAoBrH,EAAY,sBAAuB,qCAC5ExvH,EAAev9f,KAAKo0nB,oBAAoBrH,EAAY,qBAAsB,oCAC9EzvH,EAAc7ggB,iBAAiB,QAASuD,KAAKqxnB,4BAC7C9zH,EAAa9ggB,iBAAiB,QAASuD,KAAKsxnB,4BAC5C,IAAIuD,EAAe1znB,EAAc,OAASkC,UAAW,6CACrD21e,EAAUr3e,YAAYkznB,GACD70nB,KAAKo0nB,oBAAoBS,EAAc,cAAe,qCAC5Dp4nB,iBAAiB,QAAS,WACjCsD,EAAMkyf,gBAAgBmL,YAAc,GACpCr9f,EAAMkyf,gBAAgBmL,YAAc,GAGpCr9f,EAAMkyf,gBAAgBmL,WAAa,IAGtBp9f,KAAKo0nB,oBAAoBS,EAAc,eAAgB,+BAC7Dp4nB,iBAAiB,QAAS,WACrCsD,EAAMkyf,gBAAgBmL,YAAc,MAG5CxH,EAAYx6f,UAAUg5nB,oBAAsB,SAAUp7I,EAAWp/Z,EAASv2E,EAAWC,GACjF,IAAIwxnB,EAAgB3znB,EAAc,UAC7B1D,EAAkB6F,KACnBwxnB,EAAcxxnB,GAAKA,GAEvB01e,EAAUr3e,YAAYmznB,GAGtB,OAFa,IAAItwgB,IAAS5qC,QAASA,EAAS3mE,SAAU5P,IAC/CwtC,SAASiklB,GACTA,GAEXl/H,EAAYx6f,UAAU42nB,cAAgB,WACL,cAAzBhynB,KAAKk4f,UAAUn7f,OACfiD,KAAKswnB,eAAelrmB,SAAU,EAE9BplB,KAAKmH,OAAOuG,uBAAuB,qBAAqBuQ,KAAK,GAAGza,aAAa,QAAS,kDAGtFxD,KAAKswnB,eAAelrmB,SAAU,EAC9BplB,KAAKmH,OAAOuG,uBAAuB,qBAAqBuQ,KAAK,GAAGvS,gBAAgB,SAChF1L,KAAKmH,OAAOuG,uBAAuB,qBAAqBuQ,KAAK,GAAGza,aAAa,QAAS,iBAE1FxD,KAAKqwnB,aAAajrmB,SAAU,GAKhCwwe,EAAYx6f,UAAUo8H,KAAO,SAAUyoY,EAAWn1a,GAC9C,IAAIizhB,EAAW,IAAI3/f,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eAC3D7rc,KAAK2xnB,QAAWl0nB,EAAkBwigB,IAAcA,EAAUzjgB,OAAS,EACnEwD,KAAK4xnB,cAAgB3xH,EACrBjggB,KAAKw6f,aAAe,IAAI2e,GAExB,IAAIz0gB,EAAQ1E,KAAKwjgB,MAAMA,MAAMhV,OAAOjrf,OAAOu0f,WAAWmI,GACtDjggB,KAAK0E,MAAS1E,KAAK2xnB,OAAiCjtnB,GAAgB1E,KAAKyjiB,SAASxjC,GAAtD,IAAI9E,GAChC4iH,EAASx/f,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACpCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAKgxf,gBAAgB+sH,GAErBtgnB,EAAkBqtF,KAClBA,EAASizhB,EAAS9jiB,YAAY,qBAElCj6E,KAAKwjgB,MAAMA,MAAMhV,OAAO4gI,QAAQtkiB,OAASA,EACzC9qF,KAAKwjgB,MAAMA,MAAMhV,OAAO4gI,QAAQr5mB,OAAS,OACzC/V,KAAKwjgB,MAAMA,MAAMhV,OAAO4gI,QAAQp5mB,MAAQ,OACxChW,KAAKwjgB,MAAMA,MAAMhV,OAAO4gI,QAAQ9ylB,QAAUt8B,KAAKmH,OAC/CnH,KAAKwjgB,MAAMA,MAAMhV,OAAO4gI,QAAQr1f,UACxBE,MAAOj6H,KAAKsynB,gBACZt4f,aAAe19F,QAASyhlB,EAAS9jiB,YAAY,MAAOhnE,SAAU,sBAAuBwxG,WAAW,KAGhGwV,MAAOj6H,KAAK29mB,oBACZ3jf,aAAe19F,QAASyhlB,EAAS9jiB,YAAY,UAAWhnE,SAAU,2BAE1EjT,KAAKgynB,gBACLhynB,KAAKwjgB,MAAMA,MAAMhV,OAAO4gI,QAAQ5nkB,WAChCxnD,KAAKwjgB,MAAMA,MAAMhV,OAAO4gI,QAAQz+kB,WAAa3wC,KAAKyynB,gBAClDzynB,KAAKwjgB,MAAMA,MAAMhV,OAAO4gI,QAAQntnB,MAAQjC,KAAK0ynB,iBAC7C1ynB,KAAKwjgB,MAAMA,MAAMhV,OAAO4gI,QAAQl7mB,UAAakC,EAAG,SAAUC,EAAG,UAC7DrW,KAAKwjgB,MAAMA,MAAMhV,OAAO4gI,QAAQ53f,QAEpCo+X,EAAYx6f,UAAUotY,WAAa,WAC/B,IAAI6xH,EAASr6f,KAAK0E,MAAMutf,gBAAgB+F,WAAWqC,OAC/CA,GAAU,IAC0F,IAAhGr6f,KAAKwjgB,MAAMA,MAAMhV,OAAO55M,MAAM1qQ,OAAO,SAAUja,GAAK,OAAQA,EAAEoqe,SAAWA,IAAY79f,OACrFwD,KAAKwjgB,MAAMA,MAAMhV,OAAO55M,MAAMpwS,KAAKxE,KAAK0E,MAAMutf,gBAAgB+F,WAAWhvZ,OAGzEhpG,KAAKwjgB,MAAMA,MAAMhV,OAAO55M,MAAQ50S,KAAKwjgB,MAAMA,MAAMhV,OAAO55M,MAAM1qQ,OAAO,SAAUja,GAAK,OAAQA,EAAEoqe,SAAWA,IACzGr6f,KAAKwjgB,MAAMA,MAAMhV,OAAO55M,MAAMpwS,KAAKxE,KAAK0E,MAAMutf,gBAAgB+F,WAAWhvZ,SAGvC,IAAtChpG,KAAKw6f,aAAaD,gBAClBv6f,KAAKwjgB,MAAMA,MAAMhV,OAAOgG,cAAchwf,KAAKxE,KAAKw6f,eAGxD5E,EAAYx6f,UAAUo3nB,gBAAkB,SAAUj7lB,EAAMo6lB,GACpD,IAAI/wH,EAcJ,OAZIA,EADA+wH,EACY3xnB,KAAKwjgB,MAAMA,MAAMhV,OAAOjrf,OAAOu0f,WAAYvge,EAAO,QAAU,aAG5D,IAAIope,GAEpBC,EAAUl6f,KAAO,YACjBk6f,EAAUrpe,KAAOA,EAAO,QACxBqpe,EAAUvO,gBAAkBryf,KAAK0E,MAAM2tf,gBAAgB0H,cACvD6G,EAAU3F,QAAUj7f,KAAK0E,MAAMu2f,QAC1B02H,GACD3xnB,KAAKwjgB,MAAMA,MAAMhV,OAAOjrf,OAAOiB,KAAKo8f,GAEjC5ggB,KAAKwjgB,MAAMA,MAAMhV,OAAOjrf,OAAOu0f,WAAW8I,EAAUrpe,KAAM,cAKrEq+d,EAAYx6f,UAAUwykB,sBAAwB,SAAUv7E,GAC/C50f,EAAkB40f,KACnBryf,KAAKqyf,gBAAkBA,GAE3Bryf,KAAKwvB,WAAWzyB,MAAQiD,KAAKqyf,gBAAgB7ie,WAC7CxvB,KAAKovB,SAASryB,MAAQiD,KAAKqyf,gBAAgBjje,SAC3CpvB,KAAKy+f,UAAU1hgB,MAAQiD,KAAKqyf,gBAAgBoM,UAC5Cz+f,KAAK2wnB,uBAAkBz1nB,IAK3B06f,EAAYx6f,UAAU60kB,sBAAwB,SAAU8kD,GAC/Ct3nB,EAAkBs3nB,KACnB/0nB,KAAKiyf,gBAAkB8iI,GAEgB,SAAvC/0nB,KAAKiyf,gBAAgBjvd,eAChBhjC,KAAKu0nB,UAAUzwnB,UAAUK,SAAS,aACnCnE,KAAKu0nB,UAAUzwnB,UAAUM,IAAI,YAE7BpE,KAAKosS,WAAWtoS,UAAUK,SAAS,aACnCnE,KAAKosS,WAAWtoS,UAAUS,OAAO,YAEjCvE,KAAKw0nB,YAAY1wnB,UAAUK,SAAS,aACpCnE,KAAKw0nB,YAAY1wnB,UAAUS,OAAO,YAElCvE,KAAKwkhB,QAAQ1ghB,UAAUK,SAAS,aAChCnE,KAAKwkhB,QAAQ1ghB,UAAUS,OAAO,aAGU,UAAvCvE,KAAKiyf,gBAAgBjvd,eACtBhjC,KAAKu0nB,UAAUzwnB,UAAUK,SAAS,aAClCnE,KAAKu0nB,UAAUzwnB,UAAUS,OAAO,YAE/BvE,KAAKosS,WAAWtoS,UAAUK,SAAS,aACpCnE,KAAKosS,WAAWtoS,UAAUM,IAAI,YAE9BpE,KAAKw0nB,YAAY1wnB,UAAUK,SAAS,aACpCnE,KAAKw0nB,YAAY1wnB,UAAUS,OAAO,YAElCvE,KAAKwkhB,QAAQ1ghB,UAAUK,SAAS,aAChCnE,KAAKwkhB,QAAQ1ghB,UAAUS,OAAO,aAGU,WAAvCvE,KAAKiyf,gBAAgBjvd,eACtBhjC,KAAKu0nB,UAAUzwnB,UAAUK,SAAS,aAClCnE,KAAKu0nB,UAAUzwnB,UAAUS,OAAO,YAEhCvE,KAAKosS,WAAWtoS,UAAUK,SAAS,aACnCnE,KAAKosS,WAAWtoS,UAAUS,OAAO,YAEhCvE,KAAKw0nB,YAAY1wnB,UAAUK,SAAS,aACrCnE,KAAKw0nB,YAAY1wnB,UAAUM,IAAI,YAE/BpE,KAAKwkhB,QAAQ1ghB,UAAUK,SAAS,aAChCnE,KAAKwkhB,QAAQ1ghB,UAAUS,OAAO,aAGU,YAAvCvE,KAAKiyf,gBAAgBjvd,gBACtBhjC,KAAKu0nB,UAAUzwnB,UAAUK,SAAS,aAClCnE,KAAKu0nB,UAAUzwnB,UAAUS,OAAO,YAEhCvE,KAAKosS,WAAWtoS,UAAUK,SAAS,aACnCnE,KAAKosS,WAAWtoS,UAAUS,OAAO,YAEjCvE,KAAKw0nB,YAAY1wnB,UAAUK,SAAS,aACpCnE,KAAKw0nB,YAAY1wnB,UAAUS,OAAO,YAEjCvE,KAAKwkhB,QAAQ1ghB,UAAUK,SAAS,aACjCnE,KAAKwkhB,QAAQ1ghB,UAAUM,IAAI,aAGM,IAArCpE,KAAKiyf,gBAAgBzgP,aACrBxxQ,KAAK00nB,kBAAkB5wnB,UAAUM,IAAI,YACrCpE,KAAK20nB,wBAAwB7wnB,UAAUS,OAAO,YAC9CvE,KAAK40nB,kBAAkB9wnB,UAAUS,OAAO,aAEE,MAArCvE,KAAKiyf,gBAAgBzgP,aAC1BxxQ,KAAK00nB,kBAAkB5wnB,UAAUS,OAAO,YACxCvE,KAAK20nB,wBAAwB7wnB,UAAUM,IAAI,YAC3CpE,KAAK40nB,kBAAkB9wnB,UAAUS,OAAO,aAEE,IAArCvE,KAAKiyf,gBAAgBzgP,aAC1BxxQ,KAAK00nB,kBAAkB5wnB,UAAUS,OAAO,YACxCvE,KAAK20nB,wBAAwB7wnB,UAAUS,OAAO,YAC9CvE,KAAK40nB,kBAAkB9wnB,UAAUM,IAAI,cAGrCpE,KAAK00nB,kBAAkB5wnB,UAAUS,OAAO,YACxCvE,KAAK20nB,wBAAwB7wnB,UAAUS,OAAO,YAC9CvE,KAAK40nB,kBAAkB9wnB,UAAUS,OAAO,cAGhDqxf,EAAYx6f,UAAU02nB,wBAA0B,WACvCr0nB,EAAkBuC,KAAK0+H,YACxB1+H,KAAK0+H,SAAS/Z,SAA4C,KAAhC3kH,KAAKuynB,iBAAiBx1nB,QAGxD64f,EAAYx6f,UAAUq2nB,aAAe,WACjC,MAC6B,oCAAzBzxnB,KAAKk4f,UAAUn7f,OAAwE,cAAzBiD,KAAKk4f,UAAUn7f,MACtE,YAGA,aAGf64f,EAAYx6f,UAAU62nB,iBAAmB,SAAUvrnB,EAAM6wB,GACrD,IAAIh0B,EAASvD,KAAKwjgB,MAAMA,MAAMhV,OAAOjrf,OAAO00f,cAAcvxf,GAG1D,GAFA1G,KAAKswnB,eAAejojB,WAAa9kE,EACjCvD,KAAKswnB,eAAex+mB,MAAQ,KACxBylB,EAAM,CACNv3B,KAAKqwnB,aAAahojB,WAAa9kE,EAAO2mC,OAAO,SAAUrpC,GAAK,OAAOA,IAAM02B,IACzEv3B,KAAKqwnB,aAAav+mB,MAAQ,KAC1B,IAAIpN,EAAQ1E,KAAKyjiB,SAASlsgB,GAmB1B,GAlBI7yB,EAAMu2f,mBAAmBvxe,QAAUjsB,EAAkBiH,EAAMu2f,SAC3Dj7f,KAAKqwnB,aAAajrmB,SAAU,EAI5BplB,KAAKqwnB,aAAav+mB,MAAQvO,EAAOhF,QAAQmG,EAAMu2f,QAAQ1je,OAAS,EAAIh0B,EAAOhF,QAAQmG,EAAMu2f,QAAQ1je,MAAQ,EAE1F,cAAf7yB,EAAMgC,KACDjJ,EAAkBiH,EAAMkrD,MAIzB5vD,KAAKk4f,UAAUpmf,MAAQ,EAHvB9R,KAAKk4f,UAAUpmf,MAAQ,EAO3B9R,KAAKk4f,UAAUpmf,MAAQ,GAEtBrU,EAAkBiH,EAAM4mC,MAAO,CAChC,IAAI0plB,EAAUtwnB,EAAM4mC,KAAK/T,KACrBzlB,EAAQ,EACRvO,EAAOhF,QAAQy2nB,IAAY,IAC3BljnB,EAAQvO,EAAOhF,QAAQy2nB,IAE3Bh1nB,KAAKswnB,eAAex+mB,MAAQA,EAC5B9R,KAAK0xnB,sBAAyBsD,IAAYz9lB,OAG7C,CACDv3B,KAAKqwnB,aAAahojB,WAAa9kE,EAC/BvD,KAAKqwnB,aAAav+mB,MAAQ,KAC1B,IAAImjnB,EAAe,EACnB,GAAIj1nB,KAAKwjgB,MAAMA,MAAM9uR,gBAAiB,CAClC,IAAIurR,OAAY,EAEZA,EADS,cAATv5f,EACY1G,KAAKwjgB,MAAMA,MAAMvtb,UAAUo8a,gBAAgB4N,UAG3CjggB,KAAKwjgB,MAAMA,MAAMvtb,UAAUg8a,gBAAgBgO,UAE3Dg1H,EAAe1xnB,EAAOhF,QAAQ0hgB,GAElCjggB,KAAKqwnB,aAAav+mB,MAAQmjnB,EAC1Bj1nB,KAAKswnB,eAAex+mB,MAAQ,EAE5B9R,KAAK2xnB,OACL3xnB,KAAKk4f,UAAU9ye,SAAU,EAGzBplB,KAAKk4f,UAAU9ye,SAAU,EAE7BplB,KAAKqwnB,aAAa7okB,WAClBxnD,KAAKswnB,eAAe9okB,YAExBouc,EAAYx6f,UAAUqoiB,SAAW,SAAUxjC,GAMvC,OAJIxigB,EAAkBuC,KAAKwjgB,MAAMA,MAAMhV,OAAOjrf,OAAOu0f,WAAWmI,KAE5DjggB,KAAKwjgB,MAAMA,MAAM8Q,OAAOj+b,YAAYr2E,KAAKwjgB,MAAMA,MAAMhV,OAAO2oC,iBAAiBzvhB,IAAIu4f,IAE9EjggB,KAAKwjgB,MAAMA,MAAMhV,OAAOjrf,OAAOu0f,WAAWmI,IAKrDrK,EAAYx6f,UAAUiX,QAAU,WAE5B,GADArS,KAAKwjgB,WAAQtogB,GACRuC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIq9J,EAAI,EAAGA,EAAIxkK,KAAKmH,OAAOmK,WAAW9U,OAAQgoK,IAC/CxkK,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAWkzJ,IAC/CA,IAEJxkK,KAAKmH,YAASjM,EAEd8E,KAAKk4f,WACLl4f,KAAKk4f,UAAU7lf,UAEnBrS,KAAKk4f,eAAYh9f,EACb8E,KAAKqwnB,cACLrwnB,KAAKqwnB,aAAah+mB,UAEtBrS,KAAKqwnB,kBAAen1nB,EAChB8E,KAAKswnB,gBACLtwnB,KAAKswnB,eAAej+mB,UAExBrS,KAAKswnB,oBAAiBp1nB,EAClB8E,KAAKuwnB,kBACLvwnB,KAAKuwnB,iBAAiBl+mB,UAE1BrS,KAAKuwnB,sBAAmBr1nB,EACpB8E,KAAKiP,UACLjP,KAAKiP,SAASoD,UAElBrS,KAAKiP,cAAW/T,EACZ8E,KAAK0E,QACL1E,KAAK0E,WAAQxJ,GAEb8E,KAAKw6f,eACLx6f,KAAKw6f,kBAAet/f,GAEpB8E,KAAKoynB,uBACLpynB,KAAKoynB,sBAAsB//mB,UAE/BrS,KAAKoynB,2BAAwBl3nB,GAE1B06f,KCz2BPG,GAA2C,WAI3C,SAASA,EAA0Bs+D,GAC/B,IAAIt0jB,EAAQC,KACZA,KAAKmikB,UAAW,EAIhBnikB,KAAKk1nB,gBAAkB,SAAUj1nB,GAC7BF,EAAMoikB,UAAW,EACjBpikB,EAAMo1nB,iBAAiBl1nB,GACnBA,EAAK+0G,cAAclxG,UAAUK,SAAS,4BACtCpE,EAAMy5gB,kBAAet+gB,EACrB6E,EAAM+4gB,sBAAmB59gB,GAEpB+E,EAAK+0G,cAAclxG,UAAUK,SAAS,kCAC3CpE,EAAMy5gB,aAAe,MACrBz5gB,EAAM+4gB,iBAAmB,UAEpB74gB,EAAK+0G,cAAclxG,UAAUK,SAAS,oCAC3CpE,EAAMy5gB,aAAe,MACrBz5gB,EAAM+4gB,iBAAmB,UAEpB74gB,EAAK+0G,cAAclxG,UAAUK,SAAS,gCAC3CpE,EAAMy5gB,aAAe,MACrBz5gB,EAAM+4gB,iBAAmB,WAEpB74gB,EAAK+0G,cAAclxG,UAAUK,SAAS,iCAC3CpE,EAAMy5gB,aAAe,MACrBz5gB,EAAM+4gB,iBAAmB,YAEpB74gB,EAAK+0G,cAAclxG,UAAUK,SAAS,wCAC3CpE,EAAMy5gB,aAAe,MACrBz5gB,EAAM+4gB,iBAAmB,aAEpB74gB,EAAK+0G,cAAclxG,UAAUK,SAAS,iCAC3CpE,EAAMy5gB,aAAe,MACrBz5gB,EAAM+4gB,iBAAmB,aAEpB74gB,EAAK+0G,cAAclxG,UAAUK,SAAS,kCAC3CpE,EAAMy5gB,aAAe,MACrBz5gB,EAAM+4gB,iBAAmB,aAMjC94gB,KAAKo1nB,gBAAkB,SAAUn1nB,GAC7BF,EAAMoikB,UAAW,EACjBpikB,EAAMo1nB,iBAAiBl1nB,GACnBA,EAAK+0G,cAAclxG,UAAUK,SAAS,kBACtCpE,EAAMoiG,YAASjnG,EACf6E,EAAMyvB,gBAAat0B,GAEd+E,EAAK+0G,cAAclxG,UAAUK,SAAS,iBAC3CpE,EAAMoiG,OAAS,IACfpiG,EAAMyvB,WAAa,UAEdvvB,EAAK+0G,cAAclxG,UAAUK,SAAS,oBAC3CpE,EAAMoiG,OAAS,KACfpiG,EAAMyvB,WAAa,UAEdvvB,EAAK+0G,cAAclxG,UAAUK,SAAS,oBAC3CpE,EAAMoiG,OAAS,IACfpiG,EAAMyvB,WAAa,aAEdvvB,EAAK+0G,cAAclxG,UAAUK,SAAS,oBAC3CpE,EAAMoiG,OAAS,IACfpiG,EAAMyvB,WAAa,aAEdvvB,EAAK+0G,cAAclxG,UAAUK,SAAS,mBAC3CpE,EAAMoiG,OAAS,IACfpiG,EAAMyvB,WAAa,aAEdvvB,EAAK+0G,cAAclxG,UAAUK,SAAS,mBAC3CpE,EAAMoiG,OAAS,IACfpiG,EAAMyvB,WAAa,cAM3BxvB,KAAKq1nB,0BAA4B,WAE7Bt1nB,EAAMyjgB,MAAMj0Y,eAKhBvvH,KAAKs1nB,2BAA6B,WAC9Bv1nB,EAAM4gnB,0BACN5gnB,EAAMyjgB,MAAMj0Y,eAKhBvvH,KAAK29mB,oBAAsB,WACvB59mB,EAAMoikB,UAAW,EACjBpikB,EAAM+4gB,sBAAmB59gB,EACzB6E,EAAMy5gB,kBAAet+gB,EACrB6E,EAAMoiG,YAASjnG,EACf6E,EAAMyvB,gBAAat0B,EACnB6E,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAM4gnB,2BAKV3gnB,KAAKsynB,gBAAkB,WACfvynB,EAAMyjgB,MAAMA,MAAMhV,OAAO55M,MAAMp4S,OAAS,GACxCuD,EAAMi4f,WAAWhvZ,KAAKqxZ,OAASt6f,EAAMyjgB,MAAMA,MAAMhV,OAAO55M,MAAM70S,EAAMyjgB,MAAMA,MAAMhV,OAAO55M,MAAMp4S,OAAS,GAAG69f,OAAS,EAClHt6f,EAAMi4f,WAAWqC,OAASt6f,EAAMi4f,WAAWhvZ,KAAKqxZ,SAGhDt6f,EAAMi4f,WAAWhvZ,KAAKqxZ,OAAS,EAC/Bt6f,EAAMi4f,WAAWqC,OAAS,GAE1Bt6f,EAAMyjgB,MAAMA,MAAMhV,OAAOgG,cAAch4f,OAAS,EAEhDuD,EAAMy6f,aAAaD,eAAiBx6f,EAAMyjgB,MAAMA,MAAMhV,OAAOgG,cAAcz0f,EAAMyjgB,MAAMA,MAAMhV,OAAOgG,cAAch4f,OAAS,GAAG+9f,eAAiB,EAG/Ix6f,EAAMy6f,aAAaD,eAAiB,EAExCx6f,EAAMi4f,WAAWhvZ,KAAKuxZ,eAAiBx6f,EAAMy6f,aAAaD,eAC1D,IAAIkC,EAAY,IAAI4c,GAAWt5gB,EAAMy6f,cACrCiC,EAAUqc,iBAAoBr7gB,EAAkBsC,EAAM+4gB,kBAA6C,SAAzB/4gB,EAAM+4gB,iBAChFrc,EAAU+c,aAAez5gB,EAAMoikB,SAAWpikB,EAAMoiG,OAASpiG,EAAMy5gB,aAC5B,WAA/B/c,EAAUqc,mBACVrc,EAAUtC,QAAU,GAExBsC,EAAUpK,gBAAgB7ie,WAAc/xB,EAAkBsC,EAAMyvB,YAAiC,UAAnBzvB,EAAMyvB,WACpFite,EAAUxK,gBAAgBmL,WAAa,GACvCX,EAAUxK,gBAAgBrjP,iBAAmB,GAC7C7uQ,EAAMy6f,aAAa70a,OAAOnhF,KAAKi4f,GAC/B18f,EAAMi4f,WAAWkD,gBAAkB,EACnCn7f,EAAMi4f,WAAWhvZ,KAAKwxZ,aAAez6f,EAAMy6f,aAC3Cz6f,EAAMyjgB,MAAMo6G,OAAOj2hB,QAEvB3nF,KAAKwjgB,MAAQ6wD,EA+NjB,OA1NAt+D,EAA0B36f,UAAU2mC,cAAgB,WAChD,MAAO,6BAKXg0d,EAA0B36f,UAAUm6nB,0BAA4B,SAAUvnnB,GACtE,IACI1K,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YAC1BhkJ,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAK,4BAA6BD,UAAW,2BACtF,IAAImynB,EAAYr0nB,EAAc,OAASmC,GAAIA,EAAK,yBAA0BD,UAAW,+BACrFrD,KAAKmH,OAAOxF,YAAY6znB,GACxBx1nB,KAAKy1nB,iBAAiBnynB,GACtBtD,KAAK01nB,iBAAiBpynB,GAEtB,IAAI+lnB,EAAS,IAAInuP,IACbx7T,QAEQorB,QAAU97D,KAAQhhB,EAAOisE,YAAY,cAErC39C,QAAU,IAAMh5B,EAAK,YAGrBwnF,QAAU97D,KAAQhhB,EAAOisE,YAAY,YAErC39C,QAAU,IAAMh5B,EAAK,YAG7Bo8X,iBAAkB,OAClB1pX,MAAO,MAGXqzmB,EAAOx4kB,SAAS2klB,GAChBx1nB,KAAKwjgB,MAAMA,MAAMxigB,QAAQW,YAAY3B,KAAKmH,QAC1CkinB,EAAO56jB,WAEXsnc,EAA0B36f,UAAUq6nB,iBAAmB,SAAUnynB,GAC7D,IAAIqynB,EAAgBx0nB,EAAc,OAASkC,UAAW,2BAA4BC,GAAIA,EAAK,YAC3FqynB,EAAcjxnB,MAAMosC,QAAU,OAC9B6klB,EAAcjxnB,MAAMqR,OAAS,QAC7B,IAAI6/mB,EAAQz0nB,EAAc,MACtBoC,OAAQ,gCACRD,GAAI,WACJD,UAAW,wFAEfsynB,EAAch0nB,YAAYi0nB,GAC1B,IAAIC,EAAe71nB,KAAK81nB,wBAAwBF,GAC5CG,EAAoB/1nB,KAAKg2nB,oBAAoBJ,EAAO,KAAM,KAAM,KAAM,iCACtEK,EAAsBj2nB,KAAKg2nB,oBAAoBJ,EAAO,KAAM,KAAM,KAAM,mCACxEM,EAAkBl2nB,KAAKg2nB,oBAAoBJ,EAAO,KAAM,MAAO,OAAQ,+BACvEO,EAAoBn2nB,KAAKg2nB,oBAAoBJ,EAAO,KAAM,KAAM,KAAM,gCACtEQ,EAAuBp2nB,KAAKg2nB,oBAAoBJ,EAAO,KAAM,KAAM,KAAM,gCACzES,EAAyBr2nB,KAAKg2nB,oBAAoBJ,EAAO,KAAM,KAAM,KAAM,uCAC3EU,EAAmBt2nB,KAAKg2nB,oBAAoBJ,EAAO,KAAM,MAAO,OAAQ,gCAC5EC,EAAap5nB,iBAAiB,QAASuD,KAAKk1nB,iBAC5Ca,EAAkBt5nB,iBAAiB,QAASuD,KAAKk1nB,iBACjDe,EAAoBx5nB,iBAAiB,QAASuD,KAAKk1nB,iBACnDgB,EAAgBz5nB,iBAAiB,QAASuD,KAAKk1nB,iBAC/CiB,EAAkB15nB,iBAAiB,QAASuD,KAAKk1nB,iBACjDmB,EAAuB55nB,iBAAiB,QAASuD,KAAKk1nB,iBACtDkB,EAAqB35nB,iBAAiB,QAASuD,KAAKk1nB,iBACpDoB,EAAiB75nB,iBAAiB,QAASuD,KAAKk1nB,iBAChDl1nB,KAAKmH,OAAOxF,YAAYg0nB,IAE5B5/H,EAA0B36f,UAAU46nB,oBAAsB,SAAUJ,EAAOW,EAAOlnX,EAAOmnX,EAAOnznB,GAC5F,IAAIoznB,EAAQt1nB,EAAc,MACtBoC,OAAQ,gBACRF,UAAW,iGAAmGA,IAElHuynB,EAAMj0nB,YAAY80nB,GAElB,IAAIz0nB,EAAY,QAAUu0nB,EAAQ,qDAAuDlnX,EAAQ,mCAE7FqnX,EAAav1nB,EAAc,OAC3BkC,UAAW,iCACXC,GAAI,iBAAkBtB,UAH1BA,GAAa,qBAAuBw0nB,EAAQ,oDAO5C,OAFAC,EAAM/xnB,MAAMiynB,SAAW,OACvBF,EAAM90nB,YAAY+0nB,GACXD,GAEX1gI,EAA0B36f,UAAU06nB,wBAA0B,SAAUF,GACpE,IAAIa,EAAQt1nB,EAAc,MACtBoC,OAAQ,gBAERF,UAAW,0HAEfuynB,EAAMj0nB,YAAY80nB,GAClB,IACIC,EAAav1nB,EAAc,OAC3BkC,UAAW,iCACXC,GAAI,iBAAkBtB,UAHV,8DAOhB,OAFAy0nB,EAAM/xnB,MAAMiynB,SAAW,OACvBF,EAAM90nB,YAAY+0nB,GACXD,GAEX1gI,EAA0B36f,UAAUw7nB,oBAAsB,SAAUhB,EAAOh8iB,EAASv2E,GAChF,IAAIoznB,EAAQt1nB,EAAc,MACtBoC,OAAQ,iBACRF,UAAW,wGAA0GA,IAEzHuynB,EAAMj0nB,YAAY80nB,GAElB,IAAIC,EAAav1nB,EAAc,OAASkC,UAAW,8DAA+DC,GAAI,mBAClHuznB,EAAY11nB,EAAc,OAASkC,UAAWu2E,IAGlD,OAFA88iB,EAAW/0nB,YAAYk1nB,GACvBJ,EAAM90nB,YAAY+0nB,GACXD,GAEX1gI,EAA0B36f,UAAUs6nB,iBAAmB,SAAUpynB,GAC7D,IAAIwznB,EAAgB31nB,EAAc,OAASkC,UAAW,wCAAyCC,GAAIA,EAAK,YACxGwznB,EAAcpynB,MAAMosC,QAAU,OAC9BgmlB,EAAcpynB,MAAMqR,OAAS,QAC7B,IAAI6/mB,EAAQz0nB,EAAc,MACtBoC,OAAQ,gCAAiCD,GAAI,WAC7CD,UAAW,wFAEfyznB,EAAcn1nB,YAAYi0nB,GAC1B,IAAImB,EAAa/2nB,KAAK42nB,oBAAoBhB,EAAO,+CAAgD,iBAC7FoB,EAAYh3nB,KAAK42nB,oBAAoBhB,EAAO,8CAA+C,gBAE3FqB,EAAej3nB,KAAK42nB,oBAAoBhB,EAAO,iDAAkD,mBACjGsB,EAAel3nB,KAAK42nB,oBAAoBhB,EAAO,iDAAkD,mBAEjGuB,EAAen3nB,KAAK42nB,oBAAoBhB,EAAO,iDAAkD,mBACjGwB,EAAcp3nB,KAAK42nB,oBAAoBhB,EAAO,gDAAiD,kBAC/FyB,EAAar3nB,KAAK42nB,oBAAoBhB,EAAO,+CAAgD,iBACjGmB,EAAWt6nB,iBAAiB,QAASuD,KAAKo1nB,iBAC1C4B,EAAUv6nB,iBAAiB,QAASuD,KAAKo1nB,iBACzC6B,EAAax6nB,iBAAiB,QAASuD,KAAKo1nB,iBAC5C8B,EAAaz6nB,iBAAiB,QAASuD,KAAKo1nB,iBAC5C+B,EAAa16nB,iBAAiB,QAASuD,KAAKo1nB,iBAC5CgC,EAAY36nB,iBAAiB,QAASuD,KAAKo1nB,iBAC3CiC,EAAW56nB,iBAAiB,QAASuD,KAAKo1nB,iBAE1Cp1nB,KAAKmH,OAAOxF,YAAYm1nB,IAK5B/gI,EAA0B36f,UAAUi3nB,uBAAyB,SAAUr6H,EAAYwC,GAC1E/8f,EAAkBu6f,GAInBh4f,KAAKg4f,WAAa,IAAI8C,GAHtB96f,KAAKg4f,WAAaA,EAKlBv6f,EAAkBuC,KAAKg4f,WAAWhvZ,QAClChpG,KAAKg4f,WAAWhvZ,KAAO,IAAIoxZ,IAE1B38f,EAAkB+8f,GAInBx6f,KAAKw6f,aAAe,IAAI2e,GAHxBn5gB,KAAKw6f,aAAeA,EAKxB,IAAIxsf,EAAS,IAAIowG,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eACzD79b,EAAOuwG,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QAClCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAKu1nB,0BAA0BvnnB,GAEnChO,KAAKwjgB,MAAMo6G,OAAO9yhB,OAAS98E,EAAOisE,YAAY,yBAC9Cj6E,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAKq1nB,0BACpCr1nB,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAKs1nB,2BAC/Bt1nB,KAAKwjgB,MAAMo6G,OAAO1pmB,UAAakC,EAAG,SAAUC,EAAG,UAC/CrW,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAKsynB,gBACZt4f,aAAe19F,QAAStuB,EAAOisE,YAAY,MAAOhnE,SAAU,iCAAkCwxG,WAAW,KAGzGwV,MAAOj6H,KAAK29mB,oBACZ3jf,aAAe19F,QAAStuB,EAAOisE,YAAY,UAAWhnE,SAAU,sCAExEjT,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOpmf,QAEtBu+X,EAA0B36f,UAAU+5nB,iBAAmB,SAAUl1nB,GAE7D,IAAK,IADDqrH,EAAOrrH,EAAK+0G,cAAc3gG,cACrBnY,EAAI,EAAGA,EAAIovH,EAAKphD,kBAAmBhuE,IACpCovH,EAAKh6G,WAAWpV,GAAG4H,UAAUK,SAAS,qBACtCmnH,EAAKh6G,WAAWpV,GAAG4H,UAAUS,OAAO,oBAG5CtE,EAAK+0G,cAAclxG,UAAUM,IAAI,qBAKrC2xf,EAA0B36f,UAAUulnB,wBAA0B,aAM9D5qH,EAA0B36f,UAAUiX,QAAU,WAU1C,GATArS,KAAKwjgB,WAAQtogB,EACT8E,KAAKg4f,aACLh4f,KAAKg4f,WAAW3lf,UAChBrS,KAAKg4f,gBAAa98f,GAElB8E,KAAKw6f,eACLx6f,KAAKw6f,aAAanof,UAClBrS,KAAKw6f,kBAAet/f,GAEpB8E,KAAKmH,QAAUnH,KAAKmH,OAAOkN,cAAe,CAC1CrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAC3C,IAAK,IAAIiwE,EAAI,EAAGA,EAAIp3E,KAAKmH,OAAOmK,WAAW9U,OAAQ46E,IAC/Cp3E,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAW8lE,IAC/CA,IAEJp3E,KAAKmH,YAASjM,IAGf66f,KC7WPC,GAA4B,WAI5B,SAASA,EAAWq+D,GAChB,IAAIt0jB,EAAQC,KACZA,KAAKs3nB,uBAAoBp8nB,EACzB8E,KAAKu3nB,kBAAer8nB,EACpB8E,KAAKw3nB,mBAAgBt8nB,EACrB8E,KAAKy3nB,kBAAev8nB,EACpB8E,KAAK03nB,iBAAcx8nB,EACnB8E,KAAK23nB,mBAAgBz8nB,EACrB8E,KAAK43nB,sBAAmB18nB,EACxB8E,KAAK63nB,yBAAsB38nB,EAC3B8E,KAAK83nB,iBAAc58nB,EACnB8E,KAAK+3nB,eAAY78nB,EAEjB8E,KAAKivD,UAAO/zD,EACZ8E,KAAKmvD,YAASj0D,EACd8E,KAAKwtS,eAAYtyS,EACjB8E,KAAK0+f,mBAAgBxjgB,EACrB8E,KAAKw+f,uBAAoBtjgB,EACzB8E,KAAKovB,cAAWl0B,EAChB8E,KAAKwvB,gBAAat0B,EAClB8E,KAAKy+f,eAAYvjgB,EAIjB8E,KAAKqyf,qBAAkBn3f,EAIvB8E,KAAKg4nB,eAAiB,WAClBj4nB,EAAMyjgB,MAAMj0Y,cACZ,IAAI8iY,EAwBJ,GAtBIA,EADAtyf,EAAMsyf,gBACYtyf,EAAMsyf,gBAGNtyf,EAAMyjgB,MAAMA,MAAMvtb,UAAUo8a,gBAElDtyf,EAAMw3nB,aAAax6nB,MAAQs1f,EAAgB7ie,WACtC6ie,EAAgBpjc,MAASojc,EAAgBljc,OAIrCkjc,EAAgBpjc,OAASojc,EAAgBljc,QAC9CpvD,EAAMy3nB,cAAcz6nB,MAAQgD,EAAM03nB,aAAa16nB,MAC/CgD,EAAMy3nB,cAAc1lnB,MAAQ,IAEtBugf,EAAgBpjc,MAAQojc,EAAgBljc,QAC9CpvD,EAAMy3nB,cAAcz6nB,MAAQgD,EAAM03nB,aAAa16nB,MAC/CgD,EAAMy3nB,cAAc1lnB,MAAQ,GAEvBugf,EAAgBpjc,MAAQojc,EAAgBljc,SAC7CpvD,EAAMy3nB,cAAcz6nB,MAAQgD,EAAM03nB,aAAa16nB,MAC/CgD,EAAMy3nB,cAAc1lnB,MAAQ,IAb5B/R,EAAMy3nB,cAAcz6nB,MAAQgD,EAAM03nB,aAAa16nB,MAC/CgD,EAAMy3nB,cAAc1lnB,MAAQ,IAc3BrU,EAAkB40f,EAAgBjje,UACnC,IAAK,IAAIlzB,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAC1B,IAAIwjE,EAAQ3/D,EAAM03nB,aAAanoY,WAC/B,GAAI+iQ,EAAgBjje,SAASliB,aAAewyD,EAAMxjE,GAAG8F,UAAW,CAC5DjC,EAAM03nB,aAAa16nB,MAAQs1f,EAAgBjje,SAC3CrvB,EAAM03nB,aAAa3lnB,MAAQ5V,EAC3B,OAIPuB,EAAkB40f,EAAgBoM,WAInC1+f,EAAM23nB,YAAY36nB,MAAQ,UAH1BgD,EAAM23nB,YAAY36nB,MAAQs1f,EAAgBoM,UAKZ,SAA9BpM,EAAgB7kN,UAChBztS,EAAM43nB,cAAc7lnB,MAAQ,EAEO,WAA9Bugf,EAAgB7kN,YACrBztS,EAAM43nB,cAAc7lnB,MAAQ,GAEM,iBAAlCugf,EAAgBqM,cAChB3+f,EAAM63nB,iBAAiBplnB,SAAU,EAEM,iBAAlC6/e,EAAgBqM,cACrB3+f,EAAM83nB,oBAAoBrlnB,SAAU,GAGpCzS,EAAM63nB,iBAAiBplnB,SAAU,EACjCzS,EAAM83nB,oBAAoBrlnB,SAAU,GAEE,gBAAtC6/e,EAAgBmM,kBAChBz+f,EAAM+3nB,YAAYtlnB,SAAU,EAEe,cAAtC6/e,EAAgBmM,kBACrBz+f,EAAMg4nB,UAAUvlnB,SAAU,GAG1BzS,EAAM+3nB,YAAYtlnB,SAAU,EAC5BzS,EAAMg4nB,UAAUvlnB,SAAU,GAEoB,SAA9CzS,EAAMyjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,UAClC/wC,EAAMyjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,QAAU,SAMpD9wC,KAAKi4nB,gBAAkB,WACnBl4nB,EAAM4gnB,0BACN5gnB,EAAMyjgB,MAAMj0Y,eAKhBvvH,KAAK29mB,oBAAsB,WACvB59mB,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAM4gnB,2BAKV3gnB,KAAKk4nB,mBAAqB,WACtB,IAAI35lB,EAEAA,EADAx+B,EAAMsyf,gBACGtyf,EAAMsyf,gBAGN,IAAI+E,QAAiBl8f,GAE7BuC,EAAkBsC,EAAMkvD,QACzB1wB,EAAO0wB,KAAOlvD,EAAMkvD,MAEnBxxD,EAAkBsC,EAAMovD,UACzB5wB,EAAO4wB,OAASpvD,EAAMovD,SAErB1xD,EAAkBsC,EAAMqvB,WAAarvB,EAAMqvB,SAAW,IACvDmP,EAAOnP,SAAWrvB,EAAMqvB,UAEvB3xB,EAAkBsC,EAAM0+f,aACzBlge,EAAOkge,UAAY1+f,EAAM0+f,WAExBhhgB,EAAkBsC,EAAMy+f,qBACzBjge,EAAOige,kBAAoBz+f,EAAMy+f,mBAEhC/ggB,EAAkBsC,EAAM2+f,iBACzBnge,EAAOmge,cAAgB3+f,EAAM2+f,eAE5BjhgB,EAAkBsC,EAAMytS,aACzBjvQ,EAAOivQ,UAAYztS,EAAMytS,WAExB/vS,EAAkBsC,EAAMyvB,cACzB+O,EAAO/O,WAAazvB,EAAMyvB,YAEzBzvB,EAAMsyf,gBAIPtyf,EAAMyjgB,MAAMA,MAAMzS,kBAAkB68E,wBAHpC7tkB,EAAMo4nB,kBAAkBp4nB,EAAMyjgB,MAAMvtb,UAAW13C,GAKnDx+B,EAAMyjgB,MAAMo6G,OAAOj2hB,QAEvB3nF,KAAK8wnB,eAAiB,SAAU7wnB,GAC5BF,EAAMqvB,SAAWnvB,EAAKlD,OAE1BiD,KAAKo4nB,gBAAkB,SAAUn4nB,GAC7BF,EAAMwvB,UAAYtvB,EAAKlD,OAE3BiD,KAAKq4nB,iBAAmB,SAAUp4nB,GAC9BF,EAAMyvB,WAAavvB,EAAKlD,OAE5BiD,KAAKs4nB,gBAAkB,SAAUr4nB,GAC7BF,EAAMytS,UAAYvtS,EAAKlD,OAE3BiD,KAAKgxnB,gBAAkB,SAAU/wnB,GACxBxC,EAAkBwC,EAAKw7I,gBACxB17I,EAAM0+f,UAAYx+f,EAAKw7I,aAAap8G,MAG5Cr/B,KAAKu4nB,mBAAqB,SAAUt4nB,GAChCF,EAAMy4nB,uBAAuBv4nB,GACzBA,EAAKuS,QACLzS,EAAM2+f,cAAgB,eAGtB3+f,EAAM2+f,cAAgB,QAG9B1+f,KAAKy4nB,mBAAqB,SAAUx4nB,GAChCF,EAAMy4nB,uBAAuBv4nB,GACzBA,EAAKuS,QACLzS,EAAM2+f,cAAgB,eAGtB3+f,EAAM2+f,cAAgB,QAG9B1+f,KAAK04nB,kBAAoB,SAAUz4nB,GAC/BF,EAAMy4nB,uBAAuBv4nB,GACzBA,EAAKuS,QACLzS,EAAMy+f,kBAAoB,cAG1Bz+f,EAAMy+f,kBAAoB,UAGlCx+f,KAAK24nB,gBAAkB,SAAU14nB,GAC7BF,EAAMy4nB,uBAAuBv4nB,GACzBA,EAAKuS,QACLzS,EAAMy+f,kBAAoB,YAG1Bz+f,EAAMy+f,kBAAoB,UAGlCx+f,KAAKwjgB,MAAQ6wD,EA8VjB,OA5VA/1jB,OAAOuJ,eAAemuf,EAAW56f,UAAW,aAIxCsM,IAAK,WACD,OAAO1H,KAAKs3nB,mBAKhBjwnB,IAAK,SAAUtK,GAEX,OADAiD,KAAKs3nB,kBAAoBv6nB,EACjBiD,KAAKuvB,WACT,IAAK,OACDvvB,KAAKivD,MAAO,EACZjvD,KAAKmvD,QAAS,EACd,MACJ,IAAK,SACDnvD,KAAKivD,MAAO,EACZjvD,KAAKmvD,QAAS,EACd,MACJ,IAAK,aACDnvD,KAAKivD,MAAO,EACZjvD,KAAKmvD,QAAS,EACd,MACJ,IAAK,UACDnvD,KAAKivD,MAAO,EACZjvD,KAAKmvD,QAAS,IAI1BxnD,YAAY,EACZC,cAAc,IAKlBouf,EAAW56f,UAAU2mC,cAAgB,WACjC,MAAO,cAEXi0d,EAAW56f,UAAUo9N,mBAAqB,SAAU9xN,EAAMpD,EAAID,GAM1D,OALclC,EAAc,SACxBsC,OAASiD,KAAMA,GACfpD,GAAIA,EACJD,UAAWA,KAOnB2yf,EAAW56f,UAAU+0f,eAAiB,SAAUnif,GAC5C,IACI4qnB,EACAC,EACAC,EACAC,EACAC,EACA11nB,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YAC1BhkJ,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAK,oBAAqBD,UAAW,kBAC9E,IAAI41nB,EAAUj5nB,KAAKk5nB,WAAWlrnB,GAC9BhO,KAAKmH,OAAOxF,YAAYs3nB,GACxB,IAAI3O,EAAUtqnB,KAAKm5nB,eAAenrnB,GAClChO,KAAKmH,OAAOxF,YAAY2onB,GACxB,IAAI8O,EAAWj4nB,EAAc,OAASmC,GAAIA,EAAK,aAAcC,OAAQ,qBACrEvD,KAAKq5nB,aAAel4nB,EAAc,OAASmC,GAAIA,EAAK,gBAAiBD,UAAW,0BAChF,IAAIi2nB,EAAiBn4nB,EAAc,SAC/BkC,UAAW,yDAA0DrB,UAAWgM,EAAOisE,YAAY,gBAEvGj6E,KAAKq5nB,aAAa13nB,YAAY23nB,GAC9B,IAAIjF,EAAmBr0nB,KAAKw4N,mBAAmB,QAASx4N,KAAKmH,OAAO7D,GAAK,YAAa,uBACtFtD,KAAKq5nB,aAAa13nB,YAAY0ynB,GAC9B+E,EAASz3nB,YAAY3B,KAAKq5nB,cAC1Br5nB,KAAKmH,OAAOxF,YAAYy3nB,GACxB,IAAIG,EAAiBp4nB,EAAc,OAASmC,GAAIA,EAAK,oBACjDk2nB,EAAoBr4nB,EAAc,OAClCkC,UAAW,8CACXC,GAAItD,KAAKmH,OAAO7D,GAAK,wBAEzBs1nB,EAAcz3nB,EAAc,SAAWkC,UAAW,+BAAgCrB,UAAWgM,EAAOisE,YAAY,aAChHu/iB,EAAkB73nB,YAAYi3nB,GAC9BC,EAAuB74nB,KAAKw4N,mBAAmB,WAAYx4N,KAAKmH,OAAO7D,GAAK,iBAAkB,IAC9Fk2nB,EAAkB73nB,YAAYk3nB,GAC9BC,EAAqB94nB,KAAKw4N,mBAAmB,WAAYx4N,KAAKmH,OAAO7D,GAAK,eAAgB,IAC1Fk2nB,EAAkB73nB,YAAYm3nB,GAC9BS,EAAe53nB,YAAY63nB,GAC3B,IAAIC,EAAoBt4nB,EAAc,OAASkC,UAAW,qBAAsBC,GAAIA,EAAK,wBACzFy1nB,EAAmB/4nB,KAAKw4N,mBAAmB,WAAYx4N,KAAKmH,OAAO7D,GAAK,aAAc,IACtFm2nB,EAAkB93nB,YAAYo3nB,GAC9BC,EAA6Bh5nB,KAAKw4N,mBAAmB,WAAYx4N,KAAKmH,OAAO7D,GAAK,uBAAwB,IAC1Gm2nB,EAAkB93nB,YAAYq3nB,GAC9BO,EAAe53nB,YAAY83nB,GAC3Bz5nB,KAAKmH,OAAOxF,YAAY43nB,GACxBv5nB,KAAKwjgB,MAAMA,MAAMxigB,QAAQW,YAAY3B,KAAKmH,QAC1CnH,KAAK03nB,YAAc,IAAIt5d,IACnB39I,OAAQzgB,KAAKgxnB,gBAAiBj0nB,MAAO,YAEzCiD,KAAK03nB,YAAY7mlB,SAASwjlB,GAC1Br0nB,KAAK43nB,iBAAmB,IAAItygB,IACxB7kG,OAAQzgB,KAAKu4nB,mBACbtlnB,SAAU,0BACVI,MAAOrF,EAAOisE,YAAY,mBAE9Bj6E,KAAK43nB,iBAAiB/mlB,SAASgolB,GAC/B74nB,KAAK63nB,oBAAsB,IAAIvygB,IAC3B7kG,OAAQzgB,KAAKy4nB,mBACbxlnB,SAAU,mCACVI,MAAOrF,EAAOisE,YAAY,0BAE9Bj6E,KAAK63nB,oBAAoBhnlB,SAASmolB,GAClCh5nB,KAAK+3nB,UAAY,IAAIzygB,IACjBjyG,MAAOrF,EAAOisE,YAAY,aAC1Bx5D,OAAQzgB,KAAK24nB,kBAEjB34nB,KAAK+3nB,UAAUlnlB,SAASkolB,GACxB/4nB,KAAK83nB,YAAc,IAAIxygB,IACnBjyG,MAAOrF,EAAOisE,YAAY,eAC1BhnE,SAAU,0BAA2BwN,OAAQzgB,KAAK04nB,oBAEtD14nB,KAAK83nB,YAAYjnlB,SAASiolB,IAE9B9iI,EAAW56f,UAAU+9nB,eAAiB,SAAUnrnB,GAC5C,IAAIohB,EACAk7lB,EACAhnnB,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YAC1Bsme,EAAUnpnB,EAAc,OAASmC,GAAIA,EAAK,2BAA4BD,UAAW,gDACjF,IAAIq2nB,EAAcv4nB,EAAc,OAASmC,GAAIA,EAAK,iCAC9Cq2nB,EAAYx4nB,EAAc,SAAWkC,UAAW,uBAAwBrB,UAAWgM,EAAOisE,YAAY,UACtG12E,EAAS,kDACb6rB,EAAWjuB,EAAc,UAAYmC,GAAItD,KAAKmH,OAAO7D,GAAK,YAAaC,OAAQA,KACtEvB,UAAY,iTAGrB03nB,EAAY/3nB,YAAYg4nB,GACxBD,EAAY/3nB,YAAYytB,GACxBk7lB,EAAQ3onB,YAAY+3nB,GACpB,IAMIE,EANAC,EAAc14nB,EAAc,OAC5BkC,UAAW,yBACXC,GAAIA,EAAK,iCAGTw2nB,EAAiB34nB,EAAc,SAAWkC,UAAW,uBAAwBrB,UADtEgM,EAAOisE,YAAY,qBAa9B,OAVA2/iB,EAAmBz4nB,EAAc,UAAYmC,GAAItD,KAAKmH,OAAO7D,GAAK,aAAcC,OAAQA,IACxFq2nB,EAAiB53nB,UAAY,WAAagM,EAAOisE,YAAY,QAAU,qCACvE4/iB,EAAYl4nB,YAAYm4nB,GACxBD,EAAYl4nB,YAAYi4nB,GACxBtP,EAAQ3onB,YAAYk4nB,GACpB75nB,KAAKy3nB,aAAe,IAAI/nB,IAAWjvlB,OAAQzgB,KAAK8wnB,eAAgB92Z,YAAa,QAAShkN,MAAO,UAC7FhW,KAAKy3nB,aAAalymB,iBAAkB,EACpCvlB,KAAKy3nB,aAAa5mlB,SAASzhB,GAC3BpvB,KAAK23nB,cAAgB,IAAI9vB,IAAepnlB,OAAQzgB,KAAKs4nB,gBAAiBt+Z,YAAa,QAAShkN,MAAO,UACnGhW,KAAK23nB,cAAc9mlB,SAAS+olB,GACrBtP,GAEXt0H,EAAW56f,UAAU89nB,WAAa,SAAUlrnB,GACxC,IAAI1K,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YACtBi1e,EAAU93nB,EAAc,OAASmC,GAAIA,EAAK,WAAYD,UAAW,0BACjE02nB,EAAc54nB,EAAc,OAASmC,GAAIA,EAAK,iBAC9C02nB,EAAgB74nB,EAAc,SAC9BkC,UAAW,uBACXrB,UAAWgM,EAAOisE,YAAY,UAE9BggjB,EAAiB94nB,EAAc,UAAYmC,GAAItD,KAAKmH,OAAO7D,GAAK,cACpE22nB,EAAej4nB,UAAY,6qBAO3B+3nB,EAAYp4nB,YAAYq4nB,GACxBD,EAAYp4nB,YAAYs4nB,GACxBhB,EAAQt3nB,YAAYo4nB,GACpB,IAAIG,EACAC,EACAC,EACJF,EAAc/4nB,EAAc,OAASkC,UAAW,yBAA0BC,GAAIA,EAAK,eAAgBC,OAAQ,iBAC3G42nB,EAAiBh5nB,EAAc,SAAWkC,UAAW,uBAAwBrB,UAAWgM,EAAOisE,YAAY,gBAc3G,OAZAmgjB,EAAkBj5nB,EAAc,UAAYmC,GAAItD,KAAKmH,OAAO7D,GAAK,aAAcC,OAD/D,mDAEhB62nB,EAAgBp4nB,UAAY,WACxBgM,EAAOisE,YAAY,WAAa,oBAAsBjsE,EAAOisE,YAAY,QAAU,oBACnFjsE,EAAOisE,YAAY,UAAY,oBAAsBjsE,EAAOisE,YAAY,QAAUjsE,EAAOisE,YAAY,UAAY,YACrHigjB,EAAYv4nB,YAAYw4nB,GACxBD,EAAYv4nB,YAAYy4nB,GACxBnB,EAAQt3nB,YAAYu4nB,GACpBl6nB,KAAKu3nB,aAAe,IAAI7nB,IAAWjvlB,OAAQzgB,KAAKq4nB,iBAAkBr+Z,YAAa,QAAShkN,MAAO,UAC/FhW,KAAKu3nB,aAAahymB,iBAAkB,EACpCvlB,KAAKu3nB,aAAa1mlB,SAASoplB,GAC3Bj6nB,KAAKw3nB,cAAgB,IAAI3vB,IAAepnlB,OAAQzgB,KAAKo4nB,gBAAiBp+Z,YAAa,QAAShkN,MAAO,UACnGhW,KAAKw3nB,cAAc3mlB,SAASuplB,GACrBnB,GAKXjjI,EAAW56f,UAAUg3f,eAAiB,SAAUC,GACxCA,IACAryf,KAAKqyf,gBAAkBA,GAE3B,IAAIrkf,EAAS,IAAIowG,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eACzD79b,EAAOuwG,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QAClCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAKmwf,eAAenif,GAExBhO,KAAKwjgB,MAAMo6G,OAAO9yhB,OAAS98E,EAAOisE,YAAY,QAC9Cj6E,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAKg4nB,eACpCh4nB,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAKi4nB,gBAC/Bj4nB,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAKk4nB,mBACZl+f,aAAe19F,QAAStuB,EAAOisE,YAAY,MAAOhnE,SAAU,qBAAsBwxG,WAAW,KAG7FwV,MAAOj6H,KAAK29mB,oBACZ3jf,aAAe19F,QAAStuB,EAAOisE,YAAY,UAAWhnE,SAAU,0BAExEjT,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOpmf,QAQtBw+X,EAAW56f,UAAU+8nB,kBAAoB,SAAUlijB,EAAW13C,GAE1D,GADAv+B,KAAKwjgB,MAAMA,MAAM1U,aAAaliD,YAAY,mBACtC32X,EAAU2hK,QAOV,OANI3hK,EAAU14E,MAAMoO,SAAWsqE,EAAUy4d,mBAAmBz4d,EAAU14E,MAAM05f,aAExEj3f,KAAKwjgB,MAAMA,MAAM1U,aAAaqgF,6BAA6Bl5f,EAAWA,EAAU14E,MAAM05f,UAAU5E,qBAAiBn3f,EAAWqjC,GAC5Hv+B,KAAKwjgB,MAAMA,MAAM1U,aAAayrE,SAAStkf,SAE3Cj2E,KAAKwjgB,MAAMj0Y,cAKXvvH,KAAKwjgB,MAAMA,MAAM1U,aAAa85C,eAAe5oiB,KAAKwjgB,MAAMvtb,WACxDj2E,KAAKwjgB,MAAMA,MAAM1U,aAAak9E,mCAAmC,kBAAmBztiB,GAAQ,IAMpGy3d,EAAW56f,UAAUo9nB,uBAAyB,SAAUv4nB,GAChDD,KAAK43nB,iBAAiBplnB,SAAWxS,KAAK63nB,oBAAoBrlnB,UAC1DxS,KAAK43nB,iBAAiBplnB,SAAU,EAChCxS,KAAK63nB,oBAAoBrlnB,SAAU,EAC/BvS,EAAK5D,MAAM24G,cAAc1xG,KAAOtD,KAAKmH,OAAO7D,GAAK,uBACjDtD,KAAK63nB,oBAAoBrlnB,SAAU,EAGnCxS,KAAK43nB,iBAAiBplnB,SAAU,GAGpCxS,KAAK83nB,YAAYtlnB,SAAWxS,KAAK+3nB,UAAUvlnB,UAC3CxS,KAAK+3nB,UAAUvlnB,SAAU,EACzBxS,KAAK83nB,YAAYtlnB,SAAU,EACvBvS,EAAK5D,MAAM24G,cAAc1xG,KAAOtD,KAAKmH,OAAO7D,GAAK,aACjDtD,KAAK+3nB,UAAUvlnB,SAAU,EAGzBxS,KAAK83nB,YAAYtlnB,SAAU,IAOvCwjf,EAAW56f,UAAUulnB,wBAA0B,WAC3C3gnB,KAAKu3nB,aAAax6nB,MAAQ,GAC1BiD,KAAKy3nB,aAAa16nB,MAAQ,GAC1BiD,KAAKw3nB,cAAcz6nB,MAAQ,GAC3BiD,KAAK43nB,iBAAiBplnB,SAAU,EAChCxS,KAAK63nB,oBAAoBrlnB,SAAU,EACnCxS,KAAK83nB,YAAYtlnB,SAAU,EAC3BxS,KAAK+3nB,UAAUvlnB,SAAU,EACzBxS,KAAKivD,UAAO/zD,EACZ8E,KAAKmvD,YAASj0D,EACd8E,KAAKwtS,eAAYtyS,EACjB8E,KAAK0+f,mBAAgBxjgB,EACrB8E,KAAKw+f,uBAAoBtjgB,EACzB8E,KAAKy+f,eAAYvjgB,EACjB8E,KAAKovB,cAAWl0B,EAChB8E,KAAKwvB,gBAAat0B,GAKtB86f,EAAW56f,UAAUiX,QAAU,WAM3B,GALArS,KAAKwjgB,WAAQtogB,EACT8E,KAAKqyf,kBACLryf,KAAKqyf,gBAAgBhgf,UACrBrS,KAAKqyf,qBAAkBn3f,IAEtBuC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIiwE,EAAI,EAAGA,EAAIp3E,KAAKmH,OAAOmK,WAAW9U,OAAQ46E,IAC/Cp3E,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAW8lE,IAC/CA,IAEJp3E,KAAKmH,YAASjM,EAEd8E,KAAKu3nB,cACLv3nB,KAAKu3nB,aAAallnB,UAEtBrS,KAAKu3nB,kBAAer8nB,EAChB8E,KAAKw3nB,eACLx3nB,KAAKw3nB,cAAcnlnB,UAEvBrS,KAAKw3nB,mBAAgBt8nB,EACjB8E,KAAKy3nB,cACLz3nB,KAAKy3nB,aAAaplnB,UAEtBrS,KAAKy3nB,kBAAev8nB,EAChB8E,KAAK03nB,aACL13nB,KAAK03nB,YAAYrlnB,UAErBrS,KAAK03nB,iBAAcx8nB,EACf8E,KAAK23nB,eACL33nB,KAAK23nB,cAActlnB,UAEvBrS,KAAK23nB,mBAAgBz8nB,EACjB8E,KAAK43nB,kBACL53nB,KAAK43nB,iBAAiBvlnB,UAE1BrS,KAAK43nB,sBAAmB18nB,EACpB8E,KAAK63nB,qBACL73nB,KAAK63nB,oBAAoBxlnB,UAE7BrS,KAAK63nB,yBAAsB38nB,EACvB8E,KAAK83nB,aACL93nB,KAAK83nB,YAAYzlnB,UAErBrS,KAAK83nB,iBAAc58nB,EACf8E,KAAK+3nB,WACL/3nB,KAAK+3nB,UAAU1lnB,UAEnBrS,KAAK+3nB,eAAY78nB,GAEd86f,KCljBPC,GAAuC,WAIvC,SAASA,EAAsBzH,GAC3B,IAAIzuf,EAAQC,KACZA,KAAKm8jB,eAAgB,EACrBn8jB,KAAKq6nB,cAAe,EAIpBr6nB,KAAKs6nB,iCAAkC,EAIvCt6nB,KAAKu6nB,gCAAiC,EACtCv6nB,KAAKqpnB,YAASnunB,EAId8E,KAAKw6nB,sBAAuB,EAI5Bx6nB,KAAKy6nB,uBAAwB,EAC7Bz6nB,KAAK06nB,aAAe,WAChB36nB,EAAMyjgB,MAAMj0Y,cACZxvH,EAAM46nB,uBAKV36nB,KAAK46nB,2BAA6B,WAC9B76nB,EAAMihiB,YAAY3liB,KAAK0E,GACvBA,EAAMyjgB,MAAMj0Y,eAKhBvvH,KAAK66nB,qBAAuB,WACxB,IAAI5kjB,EAAYl2E,EAAMyjgB,MAAMvtb,UAkB5B,GAjBKl2E,EAAM+6nB,eAAetonB,SAAYzS,EAAM+6nB,eAAen1gB,gBACnDloH,EAAkBw4E,EAAU+tb,YAAYE,iBAA4D,IAAzCjub,EAAU+tb,YAAYE,kBACjFnkgB,EAAMikgB,YAAYE,eAAiB,EACnCnkgB,EAAMikgB,YAAYG,mBAAqB,SAG3CpkgB,EAAMikgB,YAAY1K,SAAS,mBAA0D,SAArCv5f,EAAMikgB,YAAYC,iBAC9DxmgB,EAAkBw4E,EAAU+tb,YAAY5G,aAAoD,IAArCnnb,EAAU+tb,YAAY5G,cAC7Er9f,EAAMikgB,YAAY5G,WAAa,GAGlCr9f,EAAMg7nB,kBAAkBvonB,SAAYzS,EAAMg7nB,kBAAkBp1gB,gBACzDloH,EAAkBw4E,EAAUq0b,UAAUv0f,SAA0C,IAA/BkgE,EAAUq0b,UAAUv0f,UACrEhW,EAAMuqgB,UAAU9F,WAAa,UAC7BzkgB,EAAMuqgB,UAAUv0f,OAAS,GAG5BhW,EAAMi7nB,2BAA2BxonB,SAAYzS,EAAMi7nB,2BAA2Br1gB,eAO/E,GAA4C,YAAxC5lH,EAAM0ogB,WAAWtE,qBACZpkgB,EAAMikgB,YAAY1K,SAAS,oBAAsBv5f,EAAMikgB,YAAY1K,SAAS,uBACqB,IAA/Fv5f,EAAMyjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eAAeJ,WAAWpE,YAAYE,eAAsB,CAErG,IAAI1tf,EAAiBzW,EAAMyjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eAAeJ,WAAW0B,eAAc,GAC/FI,EAAanqgB,EAAMyjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eAAeJ,WAAW6B,oBAAoBzzf,GACrGzW,EAAMikgB,YAAYG,mBAAqB,UACvCpkgB,EAAMikgB,YAAYE,eAAiBgG,EAAapL,GAAcQ,oBAAoBv/f,EAAMyjgB,MAAM4Y,WAAWpmgB,OAAS,UAbtHvY,EAAkBw4E,EAAUwyb,WAAWvE,iBAA2D,IAAxCjub,EAAUwyb,WAAWvE,kBAC/EnkgB,EAAM0ogB,WAAWtE,mBAAqB,QACtCpkgB,EAAM0ogB,WAAWvE,eAAiB,GAetCnkgB,EAAMk7nB,iBACNl7nB,EAAMuqgB,UAAUv0f,OAAShW,EAAMk7nB,gBAEnCl7nB,EAAMyjgB,MAAMA,MAAM1U,aAAakpC,mBAAmB,mBAClDj4hB,EAAMyjgB,MAAMA,MAAM1U,aAAakvF,cAAcj+kB,EAAMikgB,aACnDjkgB,EAAMyjgB,MAAMA,MAAM1U,aAAawvF,YAAYv+kB,EAAMuqgB,WACjDvqgB,EAAMyjgB,MAAMA,MAAM1U,aAAa6vF,aAAa5+kB,EAAM0ogB,YAClD1ogB,EAAMyjgB,MAAMA,MAAMu0B,cAAcQ,uBAChCx4hB,EAAMm7nB,6BACNn7nB,EAAMyjgB,MAAMj0Y,eAKhBvvH,KAAKm7nB,wBAA0B,WAC3B,GAAIp7nB,EAAMy6nB,qBAAsB,CAC5B,IAAI/xH,EAAa1ogB,EAAMyjgB,MAAMA,MAAM1hB,wBAAwB2mB,WAC3D1ogB,EAAMyjgB,MAAMA,MAAM1hB,wBAAwBs5I,oBAAoB3yH,GAElE,GAAI1ogB,EAAM06nB,sBAAuB,CAC7B,IAAIz2H,EAAcjkgB,EAAMyjgB,MAAMA,MAAMzhB,yBAAyBiiB,YAC7DjkgB,EAAMyjgB,MAAMA,MAAMzhB,yBAAyBs5I,qBAAqBr3H,GAEpEjkgB,EAAMy6nB,sBAAuB,EAC7Bz6nB,EAAM06nB,uBAAwB,GAKlCz6nB,KAAKghiB,YAAc,WAEfjhiB,EAAM+6nB,eAAer6mB,YAASvlB,EAC9B6E,EAAMu7nB,cAAc76mB,YAASvlB,EAC7B6E,EAAMw7nB,eAAe96mB,YAASvlB,EAC9B6E,EAAMy7nB,cAAc/6mB,YAASvlB,EAE7B6E,EAAMg7nB,kBAAkBt6mB,YAASvlB,EACjC6E,EAAM07nB,aAAah7mB,YAASvlB,EAC5B6E,EAAMijlB,cAAcvikB,YAASvlB,EAC7B6E,EAAMq6T,aAAa35S,YAASvlB,EAC5B6E,EAAM27nB,cAAcj7mB,YAASvlB,EAE7B6E,EAAMi7nB,2BAA2Bv6mB,YAASvlB,EAC1C6E,EAAM47nB,aAAal7mB,YAASvlB,EAC5B6E,EAAM67nB,cAAcn7mB,YAASvlB,EAC7B6E,EAAM0ogB,WAAWp2f,UACjBtS,EAAMuqgB,UAAUj4f,UAChBtS,EAAMikgB,YAAY3xf,UAClBtS,EAAMk7nB,oBAAiB//nB,EACvB6E,EAAMyjgB,MAAM4rH,QAAQ1tnB,KAAO3B,EAAMyjgB,MAAMvtb,UAAUijd,UAAU79hB,KAAK0E,EAAMyjgB,QAK1ExjgB,KAAKk7nB,2BAA6B,WAC9Bn7nB,EAAMyjgB,MAAM4rH,QAAQzniB,OACpB5nF,EAAMyjgB,MAAMj0Y,eAKhBvvH,KAAK67nB,oBAAsB,WACvB,IAAI55lB,EAAUliC,EAAM+6nB,eAAetonB,SAAWzS,EAAM+6nB,eAAen1gB,cACnE5lH,EAAMu7nB,cAAcl2mB,QAAU6c,EAC9BliC,EAAMw7nB,eAAen2mB,QAAU6c,EAE3BliC,EAAMikgB,YAAYG,mBADlBlie,EACuE,WAA/BliC,EAAMw7nB,eAAex+nB,MACzD,QAAUgD,EAAMw7nB,eAAex+nB,MAGIgD,EAAMyjgB,MAAMvtb,UAAU+tb,YAAYG,oBAMjFnkgB,KAAK87nB,qBAAuB,SAAUz/nB,GAClC0D,EAAMg8nB,kCAAkCh8nB,EAAMi8nB,UAC9C,IAAIh7nB,EAAU3E,EAAM8K,OACpBrD,EAAU9C,GAAU,gCAAiC,oCACjDA,EAAQ8C,UAAUK,SAAS,6BAC3BpE,EAAMy7nB,cAAcp2mB,SAAU,EAG9BrlB,EAAMy7nB,cAAcp2mB,SAAU,EAElCrlB,EAAMikgB,YAAYC,eAAiBlkgB,EAAMk8nB,qBAK7Cj8nB,KAAKk8nB,uBAAyB,WAC1Bn8nB,EAAMijlB,cAAc59jB,QAAUrlB,EAAMg7nB,kBAAkBvonB,QACtDzS,EAAM07nB,aAAar2mB,QAAUrlB,EAAMg7nB,kBAAkBvonB,QACjDzS,EAAMijlB,cAAc59jB,QACpBrlB,EAAMuqgB,UAAU9F,WAAazkgB,EAAMijlB,cAAcjmlB,MAGjDgD,EAAMuqgB,UAAU9F,WAAazkgB,EAAMyjgB,MAAMvtb,UAAUq0b,UAAU9F,YAMrExkgB,KAAKm8nB,wBAA0B,WAC3Bp8nB,EAAM67nB,cAAcx2mB,QAAUrlB,EAAMi7nB,2BAA2BxonB,QAC/DzS,EAAM47nB,aAAav2mB,QAAUrlB,EAAMi7nB,2BAA2BxonB,SAKlExS,KAAKo8nB,oBAAsB,SAAU//nB,GACjC0D,EAAMs8nB,4BAA4Bt8nB,EAAMu8nB,SAExCx4nB,EADczH,EAAM8K,QACA,gCAAiC,6BACrDpH,EAAM0ogB,WAAWt4c,kBAAoBpwD,EAAMw8nB,oBAM/Cv8nB,KAAKuyf,uBAAyB,WAC1Bxyf,EAAMyjgB,MAAMA,MAAMzhB,yBAAyBvqX,OAC3Cz3H,EAAMyjgB,MAAM4rH,QAAQpunB,QAAQ0D,MAAMwvb,cAAgB,QAKtDl0b,KAAKw8nB,oCAAsC,WACvCz8nB,EAAMyjgB,MAAMA,MAAM3hB,8BAA8BrqX,OAChDz3H,EAAMyjgB,MAAM4rH,QAAQpunB,QAAQ0D,MAAMwvb,cAAgB,QAKtDl0b,KAAKsyf,sBAAwB,WACzBvyf,EAAMyjgB,MAAMA,MAAM1hB,wBAAwBtqX,OAC1Cz3H,EAAMyjgB,MAAM4rH,QAAQpunB,QAAQ0D,MAAMwvb,cAAgB,QAEtDl0b,KAAKwjgB,MAAQhV,EAm8BjB,OAj8BAlwf,OAAOuJ,eAAeouf,EAAsB76f,UAAW,cAInDsM,IAAK,WACD,OAAIjK,EAAkBuC,KAAKs4iB,cAChBt4iB,KAAKs4iB,aAAe,IAAIlzC,GAE5BplgB,KAAKs4iB,cAKhBjxiB,IAAK,SAAUtK,GACXiD,KAAKs4iB,aAAev7iB,GAExB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeouf,EAAsB76f,UAAW,eAInDsM,IAAK,WACD,OAAIjK,EAAkBuC,KAAKu4iB,gBACvBv4iB,KAAKu4iB,cAAgB,IAAIh1C,GAClBvjgB,KAAKu4iB,eAETv4iB,KAAKu4iB,eAKhBlxiB,IAAK,SAAUtK,GACXiD,KAAKu4iB,cAAgBx7iB,GAEzB4K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeouf,EAAsB76f,UAAW,aAInDsM,IAAK,WACD,OAAIjK,EAAkBuC,KAAKy8nB,oBACvBz8nB,KAAKy8nB,kBAAoB,IAAIr4H,GACtBpkgB,KAAKy8nB,mBAETz8nB,KAAKy8nB,mBAEhB90nB,YAAY,EACZC,cAAc,IAElBquf,EAAsB76f,UAAU2mC,cAAgB,WAC5C,MAAO,yBAKXk0d,EAAsB76f,UAAUq1f,wBAA0B,SAAUsmB,GAChE,IAAIzzgB,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,yBACxChkJ,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,8BACxDrD,KAAKwjgB,MAAMA,MAAMxigB,QAAQW,YAAY3B,KAAKmH,QAC1C,IAAIohnB,EAAiBpnnB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,kBACjEtD,KAAKmH,OAAOxF,YAAY4mnB,GACxBvonB,KAAKg8nB,SAAW76nB,EAAc,OAC1BmC,GAAItD,KAAKmH,OAAO7D,GAAK,mCAAoCD,UAAW,6BAExErD,KAAK08nB,OAASv7nB,EAAc,OACxBmC,GAAItD,KAAKmH,OAAO7D,GAAK,0BAA2BD,UAAW,6BAE/DrD,KAAKs8nB,QAAUn7nB,EAAc,OACzBmC,GAAItD,KAAKmH,OAAO7D,GAAK,2BAA4BD,UAAW,6BAEhE,IAAIs5nB,EAAgBx7nB,EAAc,OAASkC,UAAW,qCAElDslnB,EAAQxnnB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,4BAA6BD,UAAW,wBAC5FgxN,EAAkBlzN,EAAc,OAASkC,UAAW,iBACpDu5nB,EAAcz7nB,EAAc,OAC5BmC,GAAItD,KAAKmH,OAAO7D,GAAK,eAAgBtB,UAAW+0gB,EAAW98b,YAAY,WAEvE4ijB,EAAY17nB,EAAc,OAC1BmC,GAAItD,KAAKmH,OAAO7D,GAAK,aAActB,UAAW+0gB,EAAW98b,YAAY,SAErE6ijB,EAAa37nB,EAAc,OAC3BmC,GAAItD,KAAKmH,OAAO7D,GAAK,cAAetB,UAAW+0gB,EAAW98b,YAAY,UAE1Eo6I,EAAgB1yN,YAAYi7nB,GAC5Bvoa,EAAgB1yN,YAAYk7nB,GAC5Bxoa,EAAgB1yN,YAAYm7nB,GAC5B,IAAIthb,EAAmBr6M,EAAc,OAASkC,UAAW,cACrD05nB,EAAe57nB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,kBAC3D05nB,EAAa77nB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,gBACzD25nB,EAAc97nB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,iBAC9Dy5nB,EAAap7nB,YAAY3B,KAAKg8nB,UAC9BgB,EAAWr7nB,YAAY3B,KAAK08nB,QAC5BO,EAAYt7nB,YAAY3B,KAAKs8nB,SAC7B9gb,EAAiB75M,YAAYo7nB,GAC7Bvhb,EAAiB75M,YAAYq7nB,GAC7Bxhb,EAAiB75M,YAAYs7nB,GAC7BtU,EAAMhnnB,YAAY0yN,GAClBs0Z,EAAMhnnB,YAAY65M,GAClB+sa,EAAe5mnB,YAAYgnnB,GAC3B3onB,KAAKk9nB,oBAAoBl9nB,KAAKg8nB,SAAUjlH,GACxC/2gB,KAAKm9nB,uBAAuBn9nB,KAAK08nB,OAAQ3lH,GACzC/2gB,KAAKo9nB,wBAAwBp9nB,KAAKs8nB,QAASvlH,GAC3C/2gB,KAAKqpnB,OAAS,IAAInuP,MAAQytP,GAC1B3onB,KAAKmH,OAAOxF,YAAYg7nB,GAExB,IAAK,IADDU,EAAmBr9nB,KAAKg8nB,SAAStunB,uBAAuB1N,KAAKg8nB,SAAS14nB,GAAK,wBACtEpH,EAAI,EAAGA,EAAImhoB,EAAiB7goB,OAAQN,IACzCmhoB,EAAiBnhoB,GAAGO,iBAAiB,QAASuD,KAAK87nB,sBAGlD,IADDwB,EAAgBt9nB,KAAKs8nB,QAAQ5unB,uBAAuB1N,KAAKs8nB,QAAQh5nB,GAAK,6BAC1E,IAASpH,EAAI,EAAGA,EAAIohoB,EAAc9goB,OAAQN,IACtCohoB,EAAcphoB,GAAGO,iBAAiB,QAASuD,KAAKo8nB,qBAE/Bp8nB,KAAKqpnB,OAAOronB,QAAQ0M,uBAAuB,yBAAyB,GACjDA,uBAAuB,cAAc,GAC1D5J,UAAUM,IAAI,oCACdpE,KAAKqpnB,OAAOronB,QAAQ0M,uBAAuB,yBAAyB,GACnDA,uBAAuB,cAAc,GACxD5J,UAAUM,IAAI,kCACXpE,KAAKqpnB,OAAOronB,QAAQ0M,uBAAuB,yBAAyB,GAClDA,uBAAuB,cAAc,GACzD5J,UAAUM,IAAI,mCAChCpE,KAAKqpnB,OAAOronB,QAAQ0M,uBAAuB,eAAe,GAAGhJ,MAAM+H,MAAQ,SAK/Ewpf,EAAsB76f,UAAUo8H,KAAO,WACnC,IAAIu/Y,EAAa,IAAI34Z,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eAC7DkrE,EAAWx4Z,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACtCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAKywf,wBAAwBsmB,GAEgB,SAA7C/2gB,KAAKwjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,UACjC9wC,KAAKwjgB,MAAMvtb,UAAUohc,MAAM3ygB,MAAMosC,QAAU,QAE/C9wC,KAAKwjgB,MAAM4rH,QAAQtkiB,OAASisb,EAAW98b,YAAY,oBACnDj6E,KAAKwjgB,MAAM4rH,QAAQl7mB,UAAakC,EAAG,SAAUC,EAAG,UAChDrW,KAAKwjgB,MAAM4rH,QAAQp5mB,MAAQ,OAC3BhW,KAAKwjgB,MAAM4rH,QAAQr5mB,OAAS,OAC5B/V,KAAKwjgB,MAAM4rH,QAAQ9ylB,QAAUt8B,KAAKmH,OAClCnH,KAAKwjgB,MAAM4rH,QAAQz+kB,WAAa3wC,KAAK06nB,aACrC16nB,KAAKwjgB,MAAM4rH,QAAQntnB,MAAQjC,KAAK46nB,2BAChC56nB,KAAKwjgB,MAAM4rH,QAAQ1tnB,KAAO1B,KAAKm+hB,UAAU9iiB,KAAK2E,MAC9CA,KAAKwjgB,MAAM4rH,QAAQr1f,UACXE,MAAOj6H,KAAK66nB,qBACZ7ggB,aAAe19F,QAASy6e,EAAW98b,YAAY,MAAOhnE,SAAU,2BAA4BwxG,WAAW,KAGvGwV,MAAOj6H,KAAKk7nB,2BACZlhgB,aAAe19F,QAASy6e,EAAW98b,YAAY,UAAWhnE,SAAU,gCAG5EjT,KAAKwjgB,MAAM4rH,QAAQ5nkB,WACnBxnD,KAAKwjgB,MAAM4rH,QAAQ53f,QAKvBy+X,EAAsB76f,UAAUmioB,mBAAqB,SAAUn4jB,GAC3DA,EAAMmlc,gBACNnlc,EAAM8lc,eAAgB,EACtB9lc,EAAM6lc,oBACN7lc,EAAM8lc,eAAgB,EACtBlrgB,KAAKwjgB,MAAMvtb,UAAUutb,MAAMjiB,iBAAkB,EAC7Cvhf,KAAKwjgB,MAAMl2c,OAAOg/d,cAAclnd,GAChCplE,KAAKwjgB,MAAMA,MAAM1U,aAAayrE,SAASv6jB,KAAKwjgB,MAAMvtb,WAClDj2E,KAAKwjgB,MAAMA,MAAM1U,aAAam6C,6BAA4B,GAC1D,IAAI/1b,EAAUlzG,KAAKwjgB,MAAMA,MAAMu0B,cAC3B7kb,GAAWA,EAAQg2b,yBACfh2b,EAAQg2b,uBAAuBC,mBAAmB3siB,OAAS,GAC3D02G,EAAQg2b,uBAAuBE,kBAEnCl2b,EAAQm2b,iBAEZrpiB,KAAKwjgB,MAAMA,MAAM1U,aAAayC,qBAKlC0E,EAAsB76f,UAAUu/nB,oBAAsB,WAClD36nB,KAAKw9nB,qBACLx9nB,KAAKy9nB,wBACLz9nB,KAAK09nB,yBACA19nB,KAAKwjgB,MAAMA,MAAM3hB,8BAIlB7hf,KAAK29nB,wBAAwBh5gB,UAAW,EAHxC3kH,KAAK29nB,wBAAwBh5gB,UAAW,EAQ5C3kH,KAAK49nB,kBAAkBj5gB,UAAW,EAKlC3kH,KAAK69nB,iBAAiBl5gB,UAAW,GAMrCsxY,EAAsB76f,UAAU+iiB,UAAY,WACxCn+hB,KAAKwjgB,MAAMvtb,UAAUijd,YAErBl5hB,KAAK86nB,eAAer6mB,OAASzgB,KAAK67nB,oBAAoBxgoB,KAAK2E,MAC3DA,KAAKs7nB,cAAc76mB,OAASzgB,KAAK89nB,mBAAmBzioB,KAAK2E,MACzDA,KAAKu7nB,eAAe96mB,OAASzgB,KAAK+9nB,uBAAuB1ioB,KAAK2E,MAC9DA,KAAKw7nB,cAAc/6mB,OAASzgB,KAAKg+nB,mBAAmB3ioB,KAAK2E,MAEzDA,KAAK+6nB,kBAAkBt6mB,OAASzgB,KAAKk8nB,uBAAuB7goB,KAAK2E,MACjEA,KAAKy7nB,aAAah7mB,OAASzgB,KAAKi+nB,kBAAkB5ioB,KAAK2E,MACvDA,KAAKgjlB,cAAcvikB,OAASzgB,KAAKk+nB,sBAAsB7ioB,KAAK2E,MAC5DA,KAAK07nB,cAAcj7mB,OAASzgB,KAAKm+nB,uBAAuB9ioB,KAAK2E,MAC7DA,KAAKo6T,aAAa35S,OAASzgB,KAAKo+nB,eAAe/ioB,KAAK2E,MAEpDA,KAAKg7nB,2BAA2Bv6mB,OAASzgB,KAAKm8nB,wBAAwB9goB,KAAK2E,MAC3EA,KAAK27nB,aAAal7mB,OAASzgB,KAAKq+nB,kBAAkBhjoB,KAAK2E,MACvDA,KAAK47nB,cAAcn7mB,OAASzgB,KAAKs+nB,sBAAsBjjoB,KAAK2E,OAOhEi2f,EAAsB76f,UAAU8hoB,oBAAsB,SAAUl8nB,EAAS+1gB,GACrE,IAAIl8f,EAAY1Z,EAAc,OAASmC,GAAItC,EAAQsC,GAAK,wBACpDi7nB,EAAap9nB,EAAc,OAC3BmC,GAAIuX,EAAUvX,GAAK,aAActB,UAAW+0gB,EAAW98b,YAAY,QACnE12E,OAAQ,+DAAgEF,UAAW,oCAEnFm7nB,EAAkBr9nB,EAAc,OAASoC,OAAQ,0BACjDk7nB,EAAkBt9nB,EAAc,OAChCoC,OAAQ,eACRF,UAAW,6BAEXq7nB,EAAkBv9nB,EAAc,OAChCkC,UAAW,4CAEXknd,EAASppd,EAAc,OACvBoC,OAAQ,mBACRF,UAAW,oCAEXmnd,EAASrpd,EAAc,OACvBoC,OAAQ,sCACRF,UAAW,8CAEXs7nB,EAAkBx9nB,EAAc,OAChC25nB,EAAiB35nB,EAAc,SAC/BmC,GAAItC,EAAQsC,GAAK,yBAA0BG,OAASiD,KAAQ,cAEhE1G,KAAKkkgB,eAAiB/igB,EAAc,SAAWmC,GAAItC,EAAQsC,GAAK,oBAChE,IAAIs7nB,EAAaz9nB,EAAc,OAC3Bo6nB,EAAiBp6nB,EAAc,UAC/Ba,UAAW,WAAa+0gB,EAAW98b,YAAY,UAC3C,oBAAsB88b,EAAW98b,YAAY,WAAa,YAAa32E,GAAItC,EAAQsC,GAAK,oBAE5Fu7nB,EAAY19nB,EAAc,SAC1Ba,UAAW+0gB,EAAW98b,YAAY,cAAe12E,OAAQ,sDAEzDu7nB,EAAkB39nB,EAAc,OAChCa,UAAW+0gB,EAAW98b,YAAY,aAAc52E,UAAW,kCAC3DE,OAAQ,iDAERw7nB,EAAqB59nB,EAAc,OAASoC,OAAQ,iBACpDy7nB,EAAeh+nB,EAAQsC,GAAK,uBAC5B27nB,EAAe99nB,EAAc,OAASkC,UAAW,6BACrDrD,KAAKwM,KAAOrL,EAAc,OACtBkC,UAAW,qEAAuE27nB,EAClF17nB,GAAItC,EAAQsC,GAAK,kBAAmBC,OAAQ,sCAEhD07nB,EAAat9nB,YAAY3B,KAAKwM,MAC9B,IAAI0ynB,EAAiB/9nB,EAAc,OAASkC,UAAW,6BACvDrD,KAAKuzB,OAASpyB,EAAc,OACxBkC,UAAW,wEAA0E27nB,EACrF17nB,GAAItC,EAAQsC,GAAK,oBAAqBC,OAAQ,sCAElD27nB,EAAev9nB,YAAY3B,KAAKuzB,QAChCvzB,KAAKyM,MAAQtL,EAAc,OACvBoC,OAAQ,oCAAqCD,GAAItC,EAAQsC,GAAK,mBAC9DD,UAAW,uEAAyE27nB,IAExF,IAAIrc,EAAgBxhnB,EAAc,OAASkC,UAAW,6BACtDs/mB,EAAchhnB,YAAY3B,KAAKyM,OAC/B,IAAI0ynB,EAAYh+nB,EAAc,SAC1Ba,UAAW+0gB,EAAW98b,YAAY,QAAS52E,UAAW,+BAEtD+7nB,EAAcj+nB,EAAc,SAC5Ba,UAAW+0gB,EAAW98b,YAAY,UAAW52E,UAAW,+BAExDg8nB,EAAal+nB,EAAc,SAC3Ba,UAAW+0gB,EAAW98b,YAAY,SAAU52E,UAAW,+BAEvDi8nB,EAAuBn+nB,EAAc,OACrCkC,UAAW,8CAEXk8nB,EAAkBp+nB,EAAc,SAChCa,UAAW+0gB,EAAW98b,YAAY,oBAClC12E,OAAQ,wEAERi4nB,EAAgBr6nB,EAAc,OAC9BoC,OAAQ,sBAEZvD,KAAKo9f,WAAaj8f,EAAc,SAAWmC,GAAItC,EAAQsC,GAAK,iBAC5D,IAAIk8nB,EAAsBr+nB,EAAc,OACpCkC,UAAW,4BAEfrD,KAAK29nB,wBAA0Bx8nB,EAAc,UACzCa,UAAW+0gB,EAAW98b,YAAY,uBAClC32E,GAAItC,EAAQsC,GAAK,wBAAyBD,UAAW,0CAEzDrD,KAAK49nB,kBAAoBz8nB,EAAc,UACnCkC,UAAW,yBAA0BrB,UAAW+0gB,EAAW98b,YAAY,WACvE32E,GAAItC,EAAQsC,GAAK,sBAErBtD,KAAK49nB,kBAAkBnhoB,iBAAiB,QAASuD,KAAKuyf,wBACtDvyf,KAAK29nB,wBAAwBlhoB,iBAAiB,QAASuD,KAAKw8nB,qCAC5DgD,EAAoB79nB,YAAY3B,KAAK29nB,yBACrC6B,EAAoB79nB,YAAY3B,KAAK49nB,mBACrC0B,EAAqB39nB,YAAY49nB,GACjC/D,EAAc75nB,YAAY3B,KAAKo9f,YAC/BkiI,EAAqB39nB,YAAY65nB,GACjCuD,EAAmBp9nB,YAAYs9nB,GAC/BF,EAAmBp9nB,YAAYu9nB,GAC/BH,EAAmBp9nB,YAAYghnB,GAC/Bsc,EAAat9nB,YAAYw9nB,GACzBD,EAAev9nB,YAAYy9nB,GAC3Bzc,EAAchhnB,YAAY09nB,GAC1BN,EAAmBp9nB,YAAY29nB,GAC/BzknB,EAAUlZ,YAAY48nB,GACtBv9nB,EAAQW,YAAYkZ,GACpB4jnB,EAAgB98nB,YAAYm5nB,GAC5B0D,EAAgB78nB,YAAY88nB,GAC5BC,EAAgB/8nB,YAAY3B,KAAKkkgB,gBACjCs6H,EAAgB78nB,YAAY+8nB,GAC5BE,EAAWj9nB,YAAY45nB,GACvBhxK,EAAO5od,YAAYk9nB,GACnBr0K,EAAO7od,YAAYi9nB,GACnBD,EAAgBh9nB,YAAY4od,GAC5Bo0K,EAAgBh9nB,YAAY6od,GAC5Bg0K,EAAgB78nB,YAAYg9nB,GAC5B39nB,EAAQW,YAAY68nB,GACpBx9nB,EAAQW,YAAYm9nB,GACpB99nB,EAAQW,YAAYo9nB,GACpB/9nB,EAAQW,YAAY69nB,GACpBx/nB,KAAKs7nB,cAAgB,IAAI9xf,IACrBzsI,MAAO,EAAGmuI,SAAU,EAAG9qH,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IAAKi8F,mBAAmB,IAE7EjyG,KAAKs7nB,cAAczqlB,SAAS7wC,KAAKkkgB,gBACjClkgB,KAAKw7nB,cAAgB,IAAIhyf,IACrBzsI,MAAO,EAAGmuI,SAAU,EAAG9qH,KAAM,KAAM9T,IAAK,KAAM0J,MAAO,IAAKi8F,mBAAmB,IAEjFjyG,KAAKw7nB,cAAc3qlB,SAAS7wC,KAAKo9f,YACjCp9f,KAAK86nB,eAAiB,IAAIx1gB,IACtBjyG,MAAO0jgB,EAAW98b,YAAY,qBAElCj6E,KAAK86nB,eAAejqlB,SAASiqlB,GAC7B96nB,KAAKu7nB,eAAiB,IAAI1zB,IAAe7xlB,MAAO,UAChDhW,KAAKu7nB,eAAe1qlB,SAAS0qlB,IAKjCtlI,EAAsB76f,UAAU0ioB,mBAAqB,WACjD99nB,KAAKgkgB,YAAYE,eAAiBlkgB,KAAKs7nB,cAAcv+nB,OAKzDk5f,EAAsB76f,UAAU2ioB,uBAAyB,WAEzC/9nB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eAAeJ,WADhE,IAAIrrgB,EAEAiZ,EAAQ8of,GAAcQ,oBAAoBt/f,KAAKwjgB,MAAM4Y,WAAWpmgB,OACnC,YAA7BhW,KAAKu7nB,eAAevsmB,MAA8E,YAAxDhvB,KAAKwjgB,MAAMvtb,UAAU+tb,YAAYG,oBAC3EpngB,EAAQiD,KAAKs7nB,cAAcv+nB,MAAQiZ,EAAQ,IAC3ChW,KAAKy/nB,qBAAqBz/nB,KAAKs7nB,cAAe,UAAWv+nB,IAEvB,WAA7BiD,KAAKu7nB,eAAevsmB,MAA6E,UAAxDhvB,KAAKwjgB,MAAMvtb,UAAU+tb,YAAYG,oBAC/EpngB,EAAQiZ,EAAQ,IAAMhW,KAAKs7nB,cAAcv+nB,MACzCiD,KAAKy/nB,qBAAqBz/nB,KAAKs7nB,cAAe,QAASv+nB,KAK/CA,EAF0B,SAA9BiD,KAAKs7nB,cAAc/8lB,OACc,WAA7Bv+B,KAAKu7nB,eAAevsmB,KACZhZ,EAAQ,IAAMhW,KAAKs7nB,cAAcv+nB,MAGjCiD,KAAKs7nB,cAAcv+nB,MAIE,YAA7BiD,KAAKu7nB,eAAevsmB,KACZhvB,KAAKs7nB,cAAcv+nB,MAAQiZ,EAAQ,IAGnChW,KAAKs7nB,cAAcv+nB,MAInCiD,KAAKy/nB,qBAAqBz/nB,KAAKs7nB,cAA6C,WAA7Bt7nB,KAAKu7nB,eAAevsmB,KAAqB,QAAUhvB,KAAKu7nB,eAAevsmB,KAAMjyB,IAEhIiD,KAAKgkgB,YAAYG,mBAAmD,WAA7BnkgB,KAAKu7nB,eAAevsmB,KAAqB,QAAUhvB,KAAKu7nB,eAAevsmB,MAKlHine,EAAsB76f,UAAU4ioB,mBAAqB,WACjDh+nB,KAAKgkgB,YAAY5G,WAAap9f,KAAKw7nB,cAAcz+nB,OAErDk5f,EAAsB76f,UAAUoioB,mBAAqB,WAEjD,IAAIx5H,EAAchkgB,KAAKwjgB,MAAMvtb,UAAU+tb,YACnC07H,EAAgB17H,EAAYE,eAAiB,EAC7CA,EAAiBF,EAAYE,eACjC,GAAIzmgB,EAAkBumgB,EAAYE,gBAAiB,CAC/ClkgB,KAAK86nB,eAAen1gB,eAAgB,EAGpCu+Y,EAFiBlkgB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eAAeJ,WAC9CrB,cAAc/mgB,KAAKwjgB,OACnBQ,YAAYE,oBAGnClkgB,KAAK86nB,eAAetonB,QAAUktnB,EAElC1/nB,KAAKs7nB,cAAcl2mB,QAAUs6mB,EAC7B1/nB,KAAKu7nB,eAAen2mB,QAAUs6mB,EAC9B1/nB,KAAKy/nB,qBAAqBz/nB,KAAKs7nB,cAAet3H,EAAYG,mBAAoBD,GACvC,SAAnCF,EAAYG,oBAAoE,UAAnCH,EAAYG,mBACzDnkgB,KAAKu7nB,eAAezpnB,MAAQ,EAG5B9R,KAAKu7nB,eAAezpnB,MAAQ,EAEhC9R,KAAKw7nB,cAAcz+nB,MAAQingB,EAAY5G,WACvCp9f,KAAKw7nB,cAAcp2mB,QAAyC,SAA/B4+e,EAAYC,eACzCnggB,EAAU9D,KAAKwM,SAAW,gCAC1B1I,EAAU9D,KAAKyM,UAAY,gCAC3B3I,EAAU9D,KAAKuzB,WAAa,gCACO,SAA/Bywe,EAAYC,eACZjkgB,KAAKwM,KAAK1I,UAAUM,IAAI,+BAEY,WAA/B4/f,EAAYC,eACjBjkgB,KAAKuzB,OAAOzvB,UAAUM,IAAI,+BAEU,UAA/B4/f,EAAYC,gBACjBjkgB,KAAKyM,MAAM3I,UAAUM,IAAI,gCAMjC6xf,EAAsB76f,UAAU6goB,kBAAoB,WAGhD,IAAK,IAFD34nB,EAAKtD,KAAKg8nB,SAAS14nB,GACnBq8nB,EAAe3/nB,KAAKg8nB,SAAStunB,uBAAuBpK,EAAK,wBACpDogB,EAAI,EAAGA,EAAIi8mB,EAAanjoB,OAAQknB,IAAK,CAE1C,GADkBi8mB,EAAaj8mB,GACf5f,UAAUK,SAAS,+BAC/B,OAAU,IAANuf,EACO,OAEI,IAANA,EACE,SAGA,UASvBuye,EAAsB76f,UAAU2goB,kCAAoC,SAAU/6nB,GAG1E,IAAK,IAFDsC,EAAKtC,EAAQsC,GACbq8nB,EAAe3+nB,EAAQ0M,uBAAuBpK,EAAK,wBAC9CogB,EAAI,EAAGA,EAAIi8mB,EAAanjoB,OAAQknB,IAAK,CAC1C,IAAIk8mB,EAAcD,EAAaj8mB,GAC3Bk8mB,EAAY97nB,UAAUK,SAAS,gCAC/BL,EAAU87nB,GAAc,oCAAqC,kCASzE3pI,EAAsB76f,UAAU+hoB,uBAAyB,SAAUn8nB,EAAS+1gB,GACxE,IAAIrgI,EAASv1Y,EAAc,OAASoC,OAAQ,iBACxCs8nB,EAAe1+nB,EAAc,OAC7Ba,UAAW+0gB,EAAW98b,YAAY,QAClC12E,OAAQ,sDACRF,UAAW,oCAEX21e,EAAY73e,EAAc,OAASoC,OAAQ,iCAC3Cu8nB,EAAY3+nB,EAAc,OAC1BoC,OAAQ,+BACRF,UAAW,0BAEX03nB,EAAoB55nB,EAAc,SAClCsC,OAASiD,KAAQ,YAAcpD,GAAItC,EAAQsC,GAAK,qBAEhDy8nB,EAAY5+nB,EAAc,OAC1BoC,OAAQ,yBACRF,UAAW,oBAEfrD,KAAKmlE,UAAYhkE,EAAc,SAC3BsC,OAASiD,KAAQ,QAAUpD,GAAMtC,EAAQsC,GAAK,sBAElD,IAAIknd,EAASrpd,EAAc,OACvBoC,OAAQ,8DAERy8nB,EAAS7+nB,EAAc,OACvBoC,OAAQ,mBACRF,UAAW,yCAEX48nB,EAAS9+nB,EAAc,OACvBoC,OAAQ,mBACRF,UAAW,6BAEXu7nB,EAAaz9nB,EAAc,OAC3B6hlB,EAAgB7hlB,EAAc,UAC9Ba,UAAW,WAAa+0gB,EAAW98b,YAAY,YACzC,oBAAsB88b,EAAW98b,YAAY,WAAa,YAChE32E,GAAItC,EAAQsC,GAAK,iBAEjBu7nB,EAAY19nB,EAAc,SAC1Ba,UAAW+0gB,EAAW98b,YAAY,iBAAkB12E,OAAQ,qDAEhEmzY,EAAO/0Y,YAAYk+nB,GACnB7+nB,EAAQW,YAAY+0Y,GACpBopP,EAAUn+nB,YAAYo5nB,GACtB/hJ,EAAUr3e,YAAYm+nB,GACtBC,EAAUp+nB,YAAY3B,KAAKmlE,WAC3B6za,EAAUr3e,YAAYo+nB,GACtBnB,EAAWj9nB,YAAYqhlB,GACvBg9C,EAAOr+nB,YAAYk9nB,GACnBoB,EAAOt+nB,YAAYi9nB,GACnBp0K,EAAO7od,YAAYq+nB,GACnBx1K,EAAO7od,YAAYs+nB,GACnBjnJ,EAAUr3e,YAAY6od,GACtBxpd,EAAQW,YAAYq3e,GACpB,IAAIs7I,EAAenznB,EAAc,OAC7Ba,UAAW+0gB,EAAW98b,YAAY,WAAY12E,OAAQ,eACtDF,UAAW,oCAGX68nB,EAAoB/+nB,EAAc,OAASkC,UAAW,kCACtD88nB,EAAyBh/nB,EAAc,OAASkC,UAAW,uCAC3Dq4nB,EAAgBv6nB,EAAc,SAC9BsC,OAASiD,KAAQ,YAAcpD,GAAItC,EAAQsC,GAAK,qBAEhD82T,EAAej5T,EAAc,SAC7BsC,OAASiD,KAAQ,YAAcpD,GAAMtC,EAAQsC,GAAK,mBAEtD48nB,EAAkBv+nB,YAAY+5nB,GAC9ByE,EAAuBx+nB,YAAYy4T,GACnCp5T,EAAQW,YAAY2ynB,GACpBtznB,EAAQW,YAAYu+nB,GACpBl/nB,EAAQW,YAAYw+nB,GACpBngoB,KAAKy7nB,aAAe,IAAIjyf,IACpBzsI,MAAO,EAAGmuI,SAAU,EAAG9qH,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IAAKi8F,mBAAmB,IAE7EjyG,KAAKy7nB,aAAa5qlB,SAAS7wC,KAAKmlE,WAChCnlE,KAAK+6nB,kBAAoB,IAAIz1gB,IACzBjyG,MAAO0jgB,EAAW98b,YAAY,oBAElCj6E,KAAK+6nB,kBAAkBlqlB,SAASkqlB,GAChC/6nB,KAAKgjlB,cAAgB,IAAI6kB,IAAe7xlB,MAAO,UAC/ChW,KAAKgjlB,cAAcnyiB,SAASmyiB,GAC5BhjlB,KAAK07nB,cAAgB,IAAIp2gB,IACrBjyG,MAAO0jgB,EAAW98b,YAAY,qCAElCj6E,KAAK07nB,cAAc7qlB,SAAS6qlB,GAC5B17nB,KAAKo6T,aAAe,IAAI90M,IACpBjyG,MAAO0jgB,EAAW98b,YAAY,kDAElCj6E,KAAKo6T,aAAavpR,SAASupR,IAE/B67L,EAAsB76f,UAAUqioB,sBAAwB,WACpD,IAAInzH,EAAYtqgB,KAAKwjgB,MAAMvtb,UAAUq0b,UACjC81H,EAAmB91H,EAAUv0f,OAAS,GAA8B,YAAzBu0f,EAAU9F,WAErD47H,EACApgoB,KAAK+6nB,kBAAkBvonB,SAAU,OAGJtX,IAAzBovgB,EAAU9F,YACVxkgB,KAAK+6nB,kBAAkBp1gB,eAAgB,EACvCy6gB,GAAkB,GAGlBpgoB,KAAK+6nB,kBAAkBvonB,SAAU,EAGzCxS,KAAKy7nB,aAAar2mB,QAAUg7mB,EAC5BpgoB,KAAKgjlB,cAAc59jB,QAAUg7mB,EAGzB3ioB,EAAkBuC,KAAKwjgB,MAAMvtb,UAAUq0b,UAAU59e,WACjD1sB,KAAKo6T,aAAaz0M,eAAgB,EAClC3lH,KAAKo6T,aAAaz1M,UAAW,GAExB3kH,KAAKwjgB,MAAMvtb,UAAUq0b,UAAU59e,UACpC1sB,KAAKo6T,aAAa5nT,SAAU,EAC5BxS,KAAKo6T,aAAaz0M,eAPF,EAQhB3lH,KAAKo6T,aAAaz1M,UARF,IAWhB3kH,KAAKo6T,aAAa5nT,SAAU,EAC5BxS,KAAKo6T,aAAaz0M,eAAgB,EAClC3lH,KAAKo6T,aAAaz1M,UAbF,GAehBlnH,EAAkB6sgB,EAAUzF,uBAC5B7kgB,KAAK07nB,cAAc/1gB,eAAgB,EAGnC3lH,KAAK07nB,cAAclpnB,QAAU83f,EAAUzF,sBAE3C7kgB,KAAKy7nB,aAAa1+nB,MAAQutgB,EAAUv0f,OACP,SAAzBu0f,EAAU9F,YAAkD,YAAzB8F,EAAU9F,WAC7CxkgB,KAAKgjlB,cAAclxkB,MAAQ,EAG3B9R,KAAKgjlB,cAAclxkB,MAAQ,GAMnCmkf,EAAsB76f,UAAU6ioB,kBAAoB,WAChDj+nB,KAAKi7nB,eAAiBj7nB,KAAKy7nB,aAAa1+nB,OAK5Ck5f,EAAsB76f,UAAU8ioB,sBAAwB,WACpDl+nB,KAAKsqgB,UAAU9F,WAAaxkgB,KAAKgjlB,cAAch0jB,MAKnDine,EAAsB76f,UAAU+ioB,uBAAyB,WACrDn+nB,KAAKsqgB,UAAUzF,sBAAwB7kgB,KAAK07nB,cAAclpnB,SAK9Dyjf,EAAsB76f,UAAUgjoB,eAAiB,WAC7Cp+nB,KAAKsqgB,UAAU59e,SAAW1sB,KAAKo6T,aAAa5nT,SAsBhDyjf,EAAsB76f,UAAUgioB,wBAA0B,SAAUp8nB,EAAS+1gB,GACzE,IAAIuzG,EAAUnpnB,EAAc,OAASoC,OAAQ,iBACzCrC,EAAMC,EAAc,OACpBa,UAAW+0gB,EAAW98b,YAAY,QAAS52E,UAAW,kCACtDE,OAAQ,wDAER88nB,EAAYl/nB,EAAc,OAASoC,OAAQ,iCAC3C+8nB,EAAYn/nB,EAAc,OAC1BoC,OAAQ,+BACRF,UAAW,+BAEX23nB,EAA6B75nB,EAAc,SAC3CsC,OAASiD,KAAQ,YAAcpD,GAAItC,EAAQsC,GAAK,gCAEhDy8nB,EAAY5+nB,EAAc,OAC1BoC,OAAQ,yBACRF,UAAW,wBAEfrD,KAAKugoB,mBAAqBp/nB,EAAc,SACpCmC,GAAItC,EAAQsC,GAAK,0BAA2BG,OAASiD,KAAQ,UAEjE,IAAI8jd,EAASrpd,EAAc,OACvBoC,OAAQ,8DAERy8nB,EAAS7+nB,EAAc,OACvBoC,OAAQ,mBACRF,UAAW,+CAEX48nB,EAAS9+nB,EAAc,OACvBoC,OAAQ,gCAAiCF,UAAW,kCAEpDu7nB,EAAaz9nB,EAAc,OAC3By6nB,EAAgBz6nB,EAAc,UAC9Ba,UAAW,WAAa+0gB,EAAW98b,YAAY,UAAY,oBACvD88b,EAAW98b,YAAY,WAAa,YAAa32E,GAAMtC,EAAQsC,GAAK,uBAExEu7nB,EAAY19nB,EAAc,SAC1Ba,UAAW+0gB,EAAW98b,YAAY,cAClC12E,OAAQ,yCAEZ+mnB,EAAQ3onB,YAAYT,GACpBF,EAAQW,YAAY2onB,GACpBgW,EAAU3+nB,YAAYq5nB,GACtBqF,EAAU1+nB,YAAY2+nB,GACtBP,EAAUp+nB,YAAY3B,KAAKugoB,oBAC3BF,EAAU1+nB,YAAYo+nB,GACtBnB,EAAWj9nB,YAAYi6nB,GACvBoE,EAAOr+nB,YAAYk9nB,GACnBoB,EAAOt+nB,YAAYi9nB,GACnBp0K,EAAO7od,YAAYq+nB,GACnBx1K,EAAO7od,YAAYs+nB,GACnBI,EAAU1+nB,YAAY6od,GACtBxpd,EAAQW,YAAY0+nB,GACpB,IAAI/L,EAAenznB,EAAc,OAC7Ba,UAAW+0gB,EAAW98b,YAAY,sBAClC12E,OAAQ,2BACRF,UAAW,oCAEX27nB,EAAeh+nB,EAAQsC,GAAK,4BAC5Bk9nB,EAAer/nB,EAAc,OAC7BoC,OAAQ,+BAERk9nB,EAAW,wEACXC,EAAcv/nB,EAAc,OAASkC,UAAW,6BACpDrD,KAAK2goB,aAAex/nB,EAAc,OAC9BoC,OAAQk9nB,EAAUn9nB,GAAItC,EAAQsC,GAAK,sBACnCD,UAAW,kEAAoE27nB,IAEnF0B,EAAY/+nB,YAAY3B,KAAK2goB,cAC7B,IAAIzB,EAAiB/9nB,EAAc,OAASkC,UAAW,6BACvDrD,KAAK4goB,gBAAkBz/nB,EAAc,OACjCoC,OAAQk9nB,EAAUn9nB,GAAItC,EAAQsC,GAAK,yBACnCD,UAAW,qEAAuE27nB,IAEtFE,EAAev9nB,YAAY3B,KAAK4goB,iBAChC,IAAIC,EAAiB1/nB,EAAc,OAASkC,UAAW,6BACvDrD,KAAK8goB,gBAAkB3/nB,EAAc,OACjCoC,OAAQk9nB,EAAUn9nB,GAAItC,EAAQsC,GAAK,yBACnCD,UAAW,qEAAuE27nB,IAEtF6B,EAAel/nB,YAAY3B,KAAK8goB,iBAChC,IAAIrX,EAAWtonB,EAAc,SACzBa,UAAW+0gB,EAAW98b,YAAY,OAAQ52E,UAAW,+BAErD09nB,EAAc5/nB,EAAc,SAC5Ba,UAAW+0gB,EAAW98b,YAAY,UAAW52E,UAAW,+BAExD29nB,EAAc7/nB,EAAc,SAC5Ba,UAAW+0gB,EAAW98b,YAAY,UAAW52E,UAAW,+BAE5DrD,KAAK69nB,iBAAmB18nB,EAAc,UAClCa,UAAW+0gB,EAAW98b,YAAY,WAAY32E,GAAItC,EAAQsC,GAAK,oBAC/DD,UAAW,iEAEfm9nB,EAAa7+nB,YAAY++nB,GACzBF,EAAa7+nB,YAAYu9nB,GACzBsB,EAAa7+nB,YAAYk/nB,GACzBH,EAAY/+nB,YAAY8nnB,GACxByV,EAAev9nB,YAAYo/nB,GAC3BF,EAAel/nB,YAAYq/nB,GAC3BhgoB,EAAQW,YAAY2ynB,GACpBtznB,EAAQW,YAAY6+nB,GACpBx/nB,EAAQW,YAAY3B,KAAK69nB,kBACzB79nB,KAAK69nB,iBAAiBphoB,iBAAiB,QAASuD,KAAKsyf,uBACrDtyf,KAAK27nB,aAAe,IAAInyf,IACpBzsI,MAAO,EAAGmuI,SAAU,EAAG9qH,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IAAKi8F,mBAAmB,IAE7EjyG,KAAK27nB,aAAa9qlB,SAAS7wC,KAAKugoB,oBAChCvgoB,KAAKg7nB,2BAA6B,IAAI11gB,IAAWjyG,MAAO0jgB,EAAW98b,YAAY,qBAC/Ej6E,KAAKg7nB,2BAA2BnqlB,SAASmqlB,GACzCh7nB,KAAK47nB,cAAgB,IAAI/zB,IAAe7xlB,MAAO,UAC/ChW,KAAK47nB,cAAc/qlB,SAAS+qlB,IAEhC3lI,EAAsB76f,UAAUsioB,uBAAyB,WACrD,IAAIj1H,EAAazogB,KAAKwjgB,MAAMvtb,UAAUwyb,WAEtCzogB,KAAKq6nB,aAAe5xH,EAAWvE,eAAiB,EAChD,IAAIA,EAAiBuE,EAAWvE,eAC5BzmgB,EAAkBgrgB,EAAWvE,iBAC7BlkgB,KAAKg7nB,2BAA2Br1gB,eAAgB,EAChDu+Y,EAAiBlkgB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eAAeC,WAAWvE,gBAGhFlkgB,KAAKg7nB,2BAA2BxonB,QAAUxS,KAAKq6nB,aAEnDr6nB,KAAK27nB,aAAav2mB,QAAUplB,KAAKq6nB,aACjCr6nB,KAAK47nB,cAAcx2mB,QAAUplB,KAAKq6nB,aACI,SAAlC5xH,EAAWtE,oBAAmE,UAAlCsE,EAAWtE,mBACvDnkgB,KAAK47nB,cAAc9pnB,MAAQ,EAG3B9R,KAAK47nB,cAAc9pnB,MAAQ,EAE/B9R,KAAKy/nB,qBAAqBz/nB,KAAK27nB,aAAclzH,EAAWtE,mBAAoBD,GAC5EpggB,EAAU9D,KAAK2goB,cAAe,6BAA8B,gCAC5D78nB,EAAU9D,KAAK4goB,iBAAkB,6BAA8B,gCAC/D98nB,EAAU9D,KAAK8goB,iBAAkB,6BAA8B,gCAC1B,QAAjCr4H,EAAWt4c,kBACXnwD,KAAK2goB,aAAa78nB,UAAUM,IAAI,+BAEM,WAAjCqkgB,EAAWt4c,kBAChBnwD,KAAK4goB,gBAAgB98nB,UAAUM,IAAI,+BAEG,WAAjCqkgB,EAAWt4c,mBAChBnwD,KAAK8goB,gBAAgBh9nB,UAAUM,IAAI,gCAM3C6xf,EAAsB76f,UAAUihoB,4BAA8B,SAAUr7nB,GAEpE,IAAK,IADDigoB,EAAiBjgoB,EAAQ0M,uBAAuB1M,EAAQsC,GAAK,6BACxDogB,EAAI,EAAGA,EAAIu9mB,EAAezkoB,OAAQknB,IAAK,CAC5C,IAAI45mB,EAAgB2D,EAAev9mB,GAC/B45mB,EAAcx5nB,UAAUK,SAAS,gCACjCL,EAAUw5nB,GAAgB,6BAA8B,kCAOpErnI,EAAsB76f,UAAUqkoB,qBAAuB,SAAUjlJ,EAASj8c,EAAQxhC,GAE1Ey9e,EAAQj8c,OADG,SAAXA,GAAgC,UAAXA,EACJ,KAGA,OAErBi8c,EAAQnoZ,KAAO,EACfmoZ,EAAQtvW,SAAW,EACnBsvW,EAAQz9e,MAAQA,GAKpBk5f,EAAsB76f,UAAUmhoB,iBAAmB,WAG/C,IAAK,IAFDj5nB,EAAKtD,KAAKs8nB,QAAQh5nB,GAClBq8nB,EAAe3/nB,KAAKs8nB,QAAQ5unB,uBAAuBpK,EAAK,6BACnDogB,EAAI,EAAGA,EAAIi8mB,EAAanjoB,OAAQknB,IAAK,CAE1C,GADkBi8mB,EAAaj8mB,GACf5f,UAAUK,SAAS,+BAC/B,OAAU,IAANuf,EACO,MAEI,IAANA,EACE,SAGA,SAInB,OAAO1jB,KAAKwjgB,MAAMvtb,UAAUwyb,WAAWt4c,mBAK3C8lc,EAAsB76f,UAAUijoB,kBAAoB,WAChDr+nB,KAAKyogB,WAAWvE,eAAiBlkgB,KAAK27nB,aAAa5+nB,OAKvDk5f,EAAsB76f,UAAUkjoB,sBAAwB,WACpD,IAAIvhoB,EACAqoE,EAAQplE,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eAAeJ,WAC5D5xf,EAAiB4uD,EAAM0kc,eAAc,GACrCI,EAAa9kc,EAAM6kc,oBAAoBzzf,GACX,YAA5BxW,KAAK47nB,cAAc5smB,MAA6E,YAAvDhvB,KAAKwjgB,MAAMvtb,UAAUwyb,WAAWtE,oBACzEpngB,EAAQiD,KAAK27nB,aAAa5+nB,MAAQmtgB,EAAa,IAC/ClqgB,KAAKy/nB,qBAAqBz/nB,KAAK27nB,aAAc,UAAW5+nB,IAEvB,WAA5BiD,KAAK47nB,cAAc5smB,MAA4E,UAAvDhvB,KAAKwjgB,MAAMvtb,UAAUwyb,WAAWtE,oBAC7EpngB,EAAQmtgB,EAAa,IAAMlqgB,KAAK27nB,aAAa5+nB,MAC7CiD,KAAKy/nB,qBAAqBz/nB,KAAK27nB,aAAc,QAAS5+nB,KAK9CA,EAFyB,SAA7BiD,KAAK27nB,aAAap9lB,OACc,WAA5Bv+B,KAAK47nB,cAAc5smB,KACXk7e,EAAa,IAAMlqgB,KAAK27nB,aAAa5+nB,MAGrCiD,KAAK27nB,aAAa5+nB,MAIE,YAA5BiD,KAAK47nB,cAAc5smB,KACXhvB,KAAK27nB,aAAa5+nB,MAAQmtgB,EAAa,IAGvClqgB,KAAK27nB,aAAa5+nB,MAIlCiD,KAAKy/nB,qBAAqBz/nB,KAAK27nB,aAA2C,WAA5B37nB,KAAK47nB,cAAc5smB,KAAqB,QAAUhvB,KAAK47nB,cAAc5smB,KAAMjyB,IAE7HiD,KAAKyogB,WAAWtE,mBAAkD,WAA5BnkgB,KAAK47nB,cAAc5smB,KAAqB,QAAUhvB,KAAK47nB,cAAc5smB,MAK/Gine,EAAsB76f,UAAUiX,QAAU,WACtC,IAAK5U,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIklC,EAAI,EAAGA,EAAIrsC,KAAKmH,OAAOmK,WAAW9U,OAAQ6vC,IAC/CrsC,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAW+6B,IAC/CA,IAEJrsC,KAAKmH,YAASjM,EAElB8E,KAAK49mB,YAAS1inB,EACd8E,KAAKmH,YAASjM,EACd8E,KAAKs9nB,mBAAgBpioB,EACrB8E,KAAKikgB,oBAAiB/ogB,EACtB8E,KAAKwjgB,WAAQtogB,EACb8E,KAAK86nB,oBAAiB5/nB,EACtB8E,KAAKu7nB,oBAAiBrgoB,EACtB8E,KAAKkkgB,oBAAiBhpgB,EACtB8E,KAAKgjlB,mBAAgB9nlB,EACrB8E,KAAK+6nB,uBAAoB7/nB,EACzB8E,KAAKmlE,eAAYjqE,EACjB8E,KAAK47nB,mBAAgB1goB,EACrB8E,KAAKg7nB,gCAA6B9/nB,EAClC8E,KAAKugoB,wBAAqBrloB,EAC1B8E,KAAKg8nB,cAAW9goB,EAChB8E,KAAK08nB,YAASxhoB,EACd8E,KAAKs8nB,aAAUphoB,EACf8E,KAAKwM,UAAOtR,EACZ8E,KAAKuzB,YAASr4B,EACd8E,KAAKyM,WAAQvR,EACb8E,KAAKo9f,gBAAaligB,EAClB8E,KAAK07nB,mBAAgBxgoB,EACrB8E,KAAKo6T,kBAAel/T,EACpB8E,KAAK2goB,kBAAezloB,EACpB8E,KAAK4goB,qBAAkB1loB,EACvB8E,KAAK8goB,qBAAkB5loB,EACvB8E,KAAKgkgB,YAAY3xf,UACjBrS,KAAKyogB,WAAWp2f,UAChBrS,KAAKgkgB,iBAAc9ogB,EACnB8E,KAAKyogB,gBAAavtgB,GAEf+6f,KC7pCPC,GAAyC,WAIzC,SAASA,EAAwB1H,GAC7B,IAAIzuf,EAAQC,KACZA,KAAKyogB,WAAa,IAAIrD,GACtBplgB,KAAKgkgB,YAAc,IAAIT,GACvBvjgB,KAAKkhoB,+BAAiC,WAClC,IAAIC,EAAwBphoB,EAAMyjgB,MAAMA,MAAM5hB,4BAC1Cw6F,EAAer8kB,EAAMyjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eAErD36M,OAAU3yT,GACV6E,EAAMqhoB,eAAerhoB,EAAMshoB,mBAAqBthoB,EAAMqhoB,eAAerhoB,EAAMuhoB,sBACxEvhoB,EAAMqhoB,eAAerhoB,EAAMwhoB,sBAAwBxhoB,EAAMqhoB,eAAerhoB,EAAMyhoB,yBAC9EzhoB,EAAMqhoB,eAAerhoB,EAAM0hoB,uBAAyB1hoB,EAAMqhoB,eAAerhoB,EAAM2hoB,wBAC/E3hoB,EAAMqhoB,eAAerhoB,EAAM4hoB,0BAA4B5hoB,EAAMqhoB,eAAerhoB,EAAM6hoB,2BACrF/zU,EAAU,IAAIo0M,GACVligB,EAAMqhoB,eAAerhoB,EAAMshoB,oBAC3BxzU,EAAQnhT,IAAM3M,EAAMm8kB,aAEpBn8kB,EAAMqhoB,eAAerhoB,EAAMuhoB,uBAC3BzzU,EAAQlhT,OAAS5M,EAAMm8kB,aAEvBn8kB,EAAMqhoB,eAAerhoB,EAAM0hoB,wBAC3B5zU,EAAQrhT,KAAOzM,EAAMm8kB,aAErBn8kB,EAAMqhoB,eAAerhoB,EAAM2hoB,yBAC3B7zU,EAAQphT,MAAQ1M,EAAMm8kB,aAEtBn8kB,EAAMqhoB,eAAerhoB,EAAMwhoB,uBAC3B1zU,EAAQhqL,WAAa9jI,EAAMm8kB,aAE3Bn8kB,EAAMqhoB,eAAerhoB,EAAMyhoB,0BAC3B3zU,EAAQ/pL,SAAW/jI,EAAMm8kB,aAEzBn8kB,EAAMqhoB,eAAerhoB,EAAM6hoB,0BAC3B/zU,EAAQ80M,aAAe5igB,EAAMm8kB,aAE7Bn8kB,EAAMqhoB,eAAerhoB,EAAM4hoB,2BAC3B9zU,EAAQ+0M,WAAa7igB,EAAMm8kB,cAGnC,IAAI94E,EAAU,IAAIN,GACdhU,EAAe/uf,EAAMyjgB,MAAMA,MAAM1U,aAErC,GADAsU,EAAQh1c,gBAAkBruD,EAAM8hoB,mBAAmB9koB,MACd,IAAjCgD,EAAM+hoB,iBAAiBhwnB,MACvB/R,EAAMgioB,QAAU,EACZZ,IACAA,EAAsB5G,gCAAiC,GAE3Dx6nB,EAAM0ogB,WAAW56M,QAAU,IAAIo0M,GAC1BxkgB,EAAkBowT,GAGd9tT,EAAMiioB,QAAQl+nB,UAAUK,SAAS,2CACtC2qf,EAAa+uF,qBAAqB99kB,EAAM0ogB,WAAW56M,QAAS,IAAIo0M,IAHhEnT,EAAa+uF,qBAAqB99kB,EAAM0ogB,WAAW56M,QAASA,GAM3DpwT,EAAkB2+kB,EAAa3zE,WAAWrF,WAC3CA,EAAQC,gBAAkB+4E,EAAa3zE,WAAWrF,QAAQC,gBAC1DD,EAAQE,aAAe84E,EAAa3zE,WAAWrF,QAAQE,cAE3DvjgB,EAAM0ogB,WAAWrF,QAAU,IAAIN,GAC/BhU,EAAaivF,aAAah+kB,EAAM0ogB,WAAWrF,QAASA,OAEnD,CACG+9H,IACAA,EAAsB7G,iCAAkC,GAE5Dv6nB,EAAMgioB,QAAU,EAChB,IAAIE,EAAqBlioB,EAAMyjgB,MAAMA,MAAMvtb,UAAU+tb,YAAY5+b,MAAM4+b,YACvEjkgB,EAAMikgB,YAAYrK,WAAWsoI,GAC7BlioB,EAAMikgB,YAAYn2M,QAAU,IAAIo0M,GAC3BxkgB,EAAkBowT,GAGd9tT,EAAMiioB,QAAQl+nB,UAAUK,SAAS,2CACtC2qf,EAAa+uF,qBAAqB99kB,EAAMikgB,YAAYn2M,QAAS,IAAIo0M,IAHjEnT,EAAa+uF,qBAAqB99kB,EAAMikgB,YAAYn2M,QAASA,GAM5DpwT,EAAkBwkoB,EAAmB7+H,WACtCA,EAAQC,gBAAkB4+H,EAAmB7+H,QAAQC,gBACrDD,EAAQE,aAAe2+H,EAAmB7+H,QAAQE,cAEtDvjgB,EAAMikgB,YAAYZ,QAAU,IAAIN,GAChChU,EAAaivF,aAAah+kB,EAAMikgB,YAAYZ,QAASA,GAEzDrjgB,EAAMq+kB,cACNr+kB,EAAMmioB,eAKVlioB,KAAKkioB,YAAc,WACfnioB,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAMoioB,8BAEVnioB,KAAKmioB,2BAA6B,WAC9BpioB,EAAMyjgB,MAAM4rH,QAAQpunB,QAAQ0D,MAAMwvb,cAAgB,GAClDn0b,EAAMyjgB,MAAMj0Y,eAEhBvvH,KAAKoioB,4BAA8B,SAAU/loB,GACzC,IAAIqtC,EAAWrtC,EAAM8K,OAAO7D,GACxB++nB,EAAsBtioB,EAAMoH,OAAO7D,GAEnComC,IAAa24lB,EAAsB,aAAe34lB,IAAa24lB,EAAsB,uBAClF34lB,IAAa24lB,EAAsB,yBACtCtioB,EAAMuioB,mCACNvioB,EAAMiioB,QAAQl+nB,UAAUM,IAAI,0CAC5BrE,EAAMwioB,4BAA4B,SAE7B74lB,IAAa24lB,EAAsB,YAAc34lB,IAAa24lB,EAAsB,sBACtF34lB,IAAa24lB,EAAsB,wBACtCtioB,EAAMuioB,mCACNvioB,EAAMyioB,OAAO1+nB,UAAUM,IAAI,0CAC3BrE,EAAMwioB,4BAA4B,QAE7B74lB,IAAa24lB,EAAsB,YAAc34lB,IAAa24lB,EAAsB,sBACtF34lB,IAAa24lB,EAAsB,wBACtCtioB,EAAMuioB,mCACNvioB,EAAM0ioB,OAAO3+nB,UAAUM,IAAI,0CAC3BrE,EAAMwioB,4BAA4B,SAGlCxioB,EAAMuioB,mCACNvioB,EAAM2ioB,UAAU5+nB,UAAUM,IAAI,0CAC9BrE,EAAMwioB,4BAA4B,eAG1CvioB,KAAK2ioB,4BAA8B,SAAUtmoB,GACzC,IACIqtC,EADSrtC,EAAM8K,OACG7D,GAElB++nB,GADoBtioB,EAAMoH,OACJpH,EAAMoH,OAAO7D,IAEnCs/nB,EAAe,yCACnB7ioB,EAAM2ioB,UAAUzogB,QACZvwF,IAAa24lB,EAAsB,iCAAmC34lB,IAAa24lB,EAAsB,uBACtG34lB,IAAa24lB,EAAsB,gCACtCtioB,EAAM8ioB,8BAA8BR,EAAqBO,EAAc7ioB,EAAMshoB,kBAC7EthoB,EAAM+ioB,2BAA2BT,EAAqBO,EAAc,eAAgB,sBAAuB,WAEtGl5lB,IAAa24lB,EAAsB,oCACrC34lB,IAAa24lB,EAAsB,0BACnC34lB,IAAa24lB,EAAsB,mCACtCtioB,EAAM8ioB,8BAA8BR,EAAqBO,EAAc7ioB,EAAMwhoB,qBAE7ExhoB,EAAM+ioB,2BAA2BT,EAAqBO,EAAc,0BAA2B,yBAA0B,cAEpHl5lB,IAAa24lB,EAAsB,oCAAsC34lB,IAAa24lB,EAAsB,0BAC9G34lB,IAAa24lB,EAAsB,mCACtCtioB,EAAM8ioB,8BAA8BR,EAAqBO,EAAc7ioB,EAAMuhoB,qBAC7EvhoB,EAAM+ioB,2BAA2BT,EAAqBO,EAAc,eAAgB,yBAA0B,cAEzGl5lB,IAAa24lB,EAAsB,uCACrC34lB,IAAa24lB,EAAsB,6BACnC34lB,IAAa24lB,EAAsB,sCACtCtioB,EAAM8ioB,8BAA8BR,EAAqBO,EAAc7ioB,EAAM6hoB,wBAE7E7hoB,EAAM+ioB,2BAA2BT,EAAqBO,EAAc,6BAA8B,4BAA6B,iBAE1Hl5lB,IAAa24lB,EAAsB,qCAAuC34lB,IAAa24lB,EAAsB,2BAC/G34lB,IAAa24lB,EAAsB,oCACtCtioB,EAAM8ioB,8BAA8BR,EAAqBO,EAAc7ioB,EAAM0hoB,sBAC7E1hoB,EAAM+ioB,2BAA2BT,EAAqBO,EAAc,eAAgB,0BAA2B,eAE1Gl5lB,IAAa24lB,EAAsB,uCACrC34lB,IAAa24lB,EAAsB,6BACnC34lB,IAAa24lB,EAAsB,sCACtCtioB,EAAM8ioB,8BAA8BR,EAAqBO,EAAc7ioB,EAAMyhoB,wBAE7EzhoB,EAAM+ioB,2BAA2BT,EAAqBO,EAAc,wBAAyB,4BAA6B,iBAErHl5lB,IAAa24lB,EAAsB,sCAAwC34lB,IAAa24lB,EAAsB,4BAChH34lB,IAAa24lB,EAAsB,qCACtCtioB,EAAM8ioB,8BAA8BR,EAAqBO,EAAc7ioB,EAAM2hoB,uBAC7E3hoB,EAAM+ioB,2BAA2BT,EAAqBO,EAAc,eAAgB,2BAA4B,gBAE3Gl5lB,IAAa24lB,EAAsB,wCACrC34lB,IAAa24lB,EAAsB,8BACnC34lB,IAAa24lB,EAAsB,wCACtCtioB,EAAM8ioB,8BAA8BR,EAAqBO,EAAc7ioB,EAAM4hoB,yBAE7E5hoB,EAAM+ioB,2BAA2BT,EAAqBO,EAAc,8BAA+B,6BAA8B,mBAGzI5ioB,KAAK+ioB,2BAA6B,WAC9BhjoB,EAAM2ioB,UAAUzogB,QACXx8H,EAAkBsC,EAAM+hoB,oBACY,IAAjC/hoB,EAAM+hoB,iBAAiBhwnB,OACvB/R,EAAMijoB,gCAAgCt+nB,MAAMosC,QAAU,OACtD/wC,EAAMkjoB,6BAA6Bv+nB,MAAMosC,QAAU,OACnD/wC,EAAMmjoB,mBAAmBx+nB,MAAMosC,QAAU,OACzC/wC,EAAMojoB,qBAAqBz+nB,MAAMosC,QAAU,OAC3C/wC,EAAM6hoB,uBAAuBl9nB,MAAMosC,QAAU,GAC7C/wC,EAAM4hoB,wBAAwBj9nB,MAAMosC,QAAU,GAC9C/wC,EAAMqjoB,+BAA+B1+nB,MAAM8H,KAAO,SAGlDzM,EAAM6hoB,uBAAuBl9nB,MAAMosC,QAAU,OAC7C/wC,EAAM4hoB,wBAAwBj9nB,MAAMosC,QAAU,OAC9C/wC,EAAMijoB,gCAAgCt+nB,MAAMosC,QAAU,GACtD/wC,EAAMkjoB,6BAA6Bv+nB,MAAMosC,QAAU,GACnD/wC,EAAMmjoB,mBAAmBx+nB,MAAMosC,QAAU,GACzC/wC,EAAMojoB,qBAAqBz+nB,MAAMosC,QAAU,GAC3C/wC,EAAMqjoB,+BAA+B1+nB,MAAM8H,KAAO,WAI9DxM,KAAKqjoB,iCAAmC,SAAUpjoB,GAC9C,IAAKxC,EAAkBwC,EAAKw7I,cAAe,CACvC,IAAIplH,EAAQp2B,EAAKw7I,aAAap8G,IAC9Bt/B,EAAMujoB,WAAW5+nB,MAAM0pD,gBAAkB/3B,IAGjDr2B,KAAKujoB,6BAA+B,SAAUtjoB,GAC1C,IAAKxC,EAAkBwC,EAAKw7I,cAAe,CACvC,IAAIplH,EAAQp2B,EAAKw7I,aAAap8G,IAC9Bt/B,EAAMujoB,WAAW5+nB,MAAM44O,YAAcjnN,EACrCt2B,EAAMyjoB,wBAAwB9+nB,MAAM0pD,gBAAkB/3B,EACtDt2B,EAAM0joB,uBAAuB/+nB,MAAM0pD,gBAAkB/3B,EACrDt2B,EAAMmjoB,mBAAmBx+nB,MAAM0pD,gBAAkB/3B,EACjDt2B,EAAMojoB,qBAAqBz+nB,MAAM0pD,gBAAkB/3B,IAG3Dr2B,KAAKwjgB,MAAQhV,EA20BjB,OAz0BA0H,EAAwB96f,UAAU2mC,cAAgB,WAC9C,MAAO,2BAMXm0d,EAAwB96f,UAAUs1f,6BAA+B,SAAUklE,GAEvE51jB,KAAKmH,OAAShG,EAAc,OACxBmC,GAFWtD,KAEEwjgB,MAAMA,MAAMx/W,YAAc,yBACvC3gJ,UAAW,kCAEfrD,KAAKwjgB,MAAMA,MAAMxigB,QAAQW,YAAY3B,KAAKmH,QAC1C,IAAIwljB,EAAcxrjB,EAAc,OAC5Ba,UAAW4zjB,EAAY37e,YAAY,WAAY12E,OAAQ,gCACvDD,GAAItD,KAAKmH,OAAO7D,GAAK,gBAAiBD,UAAW,8BAEjDqgoB,EAAmBvioB,EAAc,OACjCoC,OAAQ,qGACRD,GAAItD,KAAKmH,OAAO7D,GAAK,qBAErBqgoB,EAAiBxioB,EAAc,OAE/BoC,OAAQ,wJACRD,GAAItD,KAAKmH,OAAO7D,GAAK,kBAErBsgoB,EAAkBzioB,EAAc,OAEhCoC,OAAQ,6HACRD,GAAItD,KAAKmH,OAAO7D,GAAK,oBAErBugoB,EAAY1ioB,EAAc,OAC1Ba,UAAW4zjB,EAAY37e,YAAY,SAAU12E,OAAQ,oCACrDF,UAAW,kCAEXygoB,EAAe3ioB,EAAc,UAC7BmC,GAAItD,KAAKmH,OAAO7D,GAAK,2BAEzBwgoB,EAAa9hoB,UAAY,WAAa4zjB,EAAY37e,YAAY,QAAU,oBAClE27e,EAAY37e,YAAY,UAAY,oBAAsB27e,EAAY37e,YAAY,OAAS,oBAC3F27e,EAAY37e,YAAY,gBAAkB,oBAAsB27e,EAAY37e,YAAY,gBAAkB,oBAC1G27e,EAAY37e,YAAY,WAAa,oBAAsB27e,EAAY37e,YAAY,cAAgB,oBACnG27e,EAAY37e,YAAY,UAAY,oBAAsB27e,EAAY37e,YAAY,UAAY,oBAC9F27e,EAAY37e,YAAY,qBAAuB,oBAC/C27e,EAAY37e,YAAY,qBAAuB,oBAAsB27e,EAAY37e,YAAY,yBAC7F,oBAAsB27e,EAAY37e,YAAY,sBAAwB,oBACtE27e,EAAY37e,YAAY,sBAAwB,oBAAsB27e,EAAY37e,YAAY,0BAC9F,oBAAsB27e,EAAY37e,YAAY,qBAAuB,oBACrE27e,EAAY37e,YAAY,qBAAuB,oBAAsB27e,EAAY37e,YAAY,yBAC7F,oBAAsB27e,EAAY37e,YAAY,cAAgB,oBAC9D27e,EAAY37e,YAAY,cAAgB,oBAAsB27e,EAAY37e,YAAY,kBACtF,oBAAsB27e,EAAY37e,YAAY,YAAc,oBAAsB27e,EAAY37e,YAAY,aAC1G,oBAAsB27e,EAAY37e,YAAY,UAAY,oBAC1D27e,EAAY37e,YAAY,SAAW,oBAAsB27e,EAAY37e,YAAY,SAAW,YAClG,IAAI8pjB,EAAY5ioB,EAAc,OAC1Ba,UAAW4zjB,EAAY37e,YAAY,SAAU12E,OAAQ,qDACrDF,UAAW,kCAEX2goB,EAAe7ioB,EAAc,SAC7BmC,GAAItD,KAAKmH,OAAO7D,GAAK,WAErB2goB,EAAY9ioB,EAAc,OAC1Ba,UAAW4zjB,EAAY37e,YAAY,SAAU12E,OAAQ,qBACrDF,UAAW,+BAEX6goB,EAA2B/ioB,EAAc,SACzCsC,OAASiD,KAAQ,SACjBpD,GAAItD,KAAKmH,OAAO7D,GAAK,gBACrBC,OAAQ,6CACRF,UAAW,sBAEX8goB,EAAchjoB,EAAc,OAC5Ba,UAAW4zjB,EAAY37e,YAAY,WAAY12E,OAAQ,kCACvDF,UAAW,+BAEX+goB,EAAmBjjoB,EAAc,OACjCmC,GAAItD,KAAKmH,OAAO7D,GAAK,sBAAuBD,UAAW,2BAE3DrD,KAAKgioB,QAAU7goB,EAAc,OACzBmC,GAAItD,KAAKmH,OAAO7D,GAAK,YACrBD,UAAW,sEAEf,IAAIghoB,EAAeljoB,EAAc,SAC7Ba,UAAW4zjB,EAAY37e,YAAY,QAAS52E,UAAW,oCACvDE,OAAQ,mDACRD,GAAItD,KAAKmH,OAAO7D,GAAK,oBAErBghoB,EAAkBnjoB,EAAc,OAChCmC,GAAItD,KAAKmH,OAAO7D,GAAK,qBAAsBD,UAAW,0BAE1DrD,KAAKwioB,OAASrhoB,EAAc,OACxBmC,GAAItD,KAAKmH,OAAO7D,GAAK,WACrBD,UAAW,sEAEf,IAAIkhoB,EAAcpjoB,EAAc,SAC5Ba,UAAW4zjB,EAAY37e,YAAY,OAAQ52E,UAAW,oCACtDE,OAAQ,mDACRD,GAAItD,KAAKmH,OAAO7D,GAAK,mBAErBkhoB,EAAkBrjoB,EAAc,OAChCmC,GAAItD,KAAKmH,OAAO7D,GAAK,qBAAsBD,UAAW,0BAE1DrD,KAAKyioB,OAASthoB,EAAc,OACxBmC,GAAItD,KAAKmH,OAAO7D,GAAK,WACrBD,UAAW,sEAEf,IAAIohoB,EAActjoB,EAAc,SAC5Ba,UAAW4zjB,EAAY37e,YAAY,OAAQ52E,UAAW,oCACtDE,OAAQ,mDACRD,GAAItD,KAAKmH,OAAO7D,GAAK,mBAErBohoB,EAAqBvjoB,EAAc,OACnCmC,GAAItD,KAAKmH,OAAO7D,GAAK,wBAAyBD,UAAW,6BAE7DrD,KAAK0ioB,UAAYvhoB,EAAc,OAC3BmC,GAAItD,KAAKmH,OAAO7D,GAAK,cACrBD,UAAW,sEAEf,IAAIshoB,EAAiBxjoB,EAAc,SAC/Ba,UAAW4zjB,EAAY37e,YAAY,UAAW52E,UAAW,oCACzDE,OAAQ,mDACRD,GAAItD,KAAKmH,OAAO7D,GAAK,sBAEzBtD,KAAK4koB,mBAAqBzjoB,EAAc,OACpCmC,GAAItD,KAAKmH,OAAO7D,GAAK,wBAAyBD,UAAW,qEAE7DrD,KAAK6koB,kBAAoB1joB,EAAc,OACnCmC,GAAItD,KAAKmH,OAAO7D,GAAK,uBAAwBD,UAAW,oEAE5DrD,KAAK8koB,kBAAoB3joB,EAAc,OACnCmC,GAAItD,KAAKmH,OAAO7D,GAAK,uBAAwBD,UAAW,oEAE5DrD,KAAK+koB,qBAAuB5joB,EAAc,OACtCmC,GAAItD,KAAKmH,OAAO7D,GAAK,0BAA2BD,UAAW,uEAE/D,IAAI2hoB,EAAc7joB,EAAc,OAC5Ba,UAAW4zjB,EAAY37e,YAAY,WAAY52E,UAAW,6BAC1DE,OAAQ,6CAEZvD,KAAKsjoB,WAAanioB,EAAc,OAC5BoC,OAAQ,qEACRD,GAAItD,KAAKmH,OAAO7D,GAAK,eAAgBD,UAAW,gCAEpDrD,KAAKwjoB,wBAA0BrioB,EAAc,OACzCoC,OAAQ,4FACRD,GAAItD,KAAKmH,OAAO7D,GAAK,8BACrBD,UAAW,wCAEfrD,KAAKyjoB,uBAAyBtioB,EAAc,OACxCoC,OAAQ,4FACRD,GAAItD,KAAKmH,OAAO7D,GAAK,6BACrBD,UAAW,wCAEfrD,KAAKkjoB,mBAAqB/hoB,EAAc,OACpCoC,OAAQ,mEACRD,GAAItD,KAAKmH,OAAO7D,GAAK,wBACrBD,UAAW,wCAEfrD,KAAKmjoB,qBAAuBhioB,EAAc,OACtCoC,OAAQ,mEACRD,GAAItD,KAAKmH,OAAO7D,GAAK,0BACrBD,UAAW,wCAEfrD,KAAKiloB,0BAA4B9joB,EAAc,OAC3CoC,OAAQ,2CAA4CD,GAAItD,KAAKmH,OAAO7D,GAAK,kCAE7EtD,KAAKqhoB,iBAAmBlgoB,EAAc,OAClCmC,GAAItD,KAAKmH,OAAO7D,GAAK,sBACrBD,UAAW,sEAEfrD,KAAKijoB,6BAA+B9hoB,EAAc,OAC9CoC,OAAQ,2CAA4CD,GAAItD,KAAKmH,OAAO7D,GAAK,qCAE7EtD,KAAKuhoB,oBAAsBpgoB,EAAc,OACrCmC,GAAItD,KAAKmH,OAAO7D,GAAK,yBACrBD,UAAW,sEAEfrD,KAAKkloB,6BAA+B/joB,EAAc,OAC9CoC,OAAQ,4CAA6CD,GAAItD,KAAKmH,OAAO7D,GAAK,qCAE9EtD,KAAKshoB,oBAAsBngoB,EAAc,OACrCmC,GAAItD,KAAKmH,OAAO7D,GAAK,yBACrBD,UAAW,sEAEfrD,KAAKmloB,gCAAkChkoB,EAAc,OACjDoC,OAAQ,4CAA6CD,GAAItD,KAAKmH,OAAO7D,GAAK,wCAE9EtD,KAAK4hoB,uBAAyBzgoB,EAAc,OACxCmC,GAAItD,KAAKmH,OAAO7D,GAAK,4BACrBD,UAAW,sEAEfrD,KAAKoloB,8BAAgCjkoB,EAAc,OAC/CoC,OAAQ,2CAA4CD,GAAItD,KAAKmH,OAAO7D,GAAK,sCAE7EtD,KAAKyhoB,qBAAuBtgoB,EAAc,OACtCmC,GAAItD,KAAKmH,OAAO7D,GAAK,0BACrBD,UAAW,sEAEfrD,KAAKgjoB,gCAAkC7hoB,EAAc,OACjDoC,OAAQ,4CAA6CD,GAAItD,KAAKmH,OAAO7D,GAAK,wCAE9EtD,KAAKwhoB,uBAAyBrgoB,EAAc,OACxCmC,GAAItD,KAAKmH,OAAO7D,GAAK,4BACrBD,UAAW,sEAEfrD,KAAKojoB,+BAAiCjioB,EAAc,OAChDoC,OAAQ,6CAA8CD,GAAItD,KAAKmH,OAAO7D,GAAK,uCAE/EtD,KAAK0hoB,sBAAwBvgoB,EAAc,OACvCmC,GAAItD,KAAKmH,OAAO7D,GAAK,2BACrBD,UAAW,sEAEfrD,KAAKqloB,iCAAmClkoB,EAAc,OAClDoC,OAAQ,+CAAgDD,GAAItD,KAAKmH,OAAO7D,GAAK,yCAEjFtD,KAAK2hoB,wBAA0BxgoB,EAAc,OACzCmC,GAAItD,KAAKmH,OAAO7D,GAAK,6BACrBD,UAAW,sEAEfrD,KAAKsloB,4BAA8BnkoB,EAAc,OAC7CmC,GAAItD,KAAKmH,OAAO7D,GAAK,+BACrBD,UAAW,yEAEfrD,KAAKuloB,+BAAiCpkoB,EAAc,OAChDmC,GAAItD,KAAKmH,OAAO7D,GAAK,kCACrBD,UAAW,4EAEfrD,KAAKwloB,+BAAiCrkoB,EAAc,OAChDmC,GAAItD,KAAKmH,OAAO7D,GAAK,kCACrBD,UAAW,4EAEfrD,KAAKyloB,kCAAoCtkoB,EAAc,OACnDmC,GAAItD,KAAKmH,OAAO7D,GAAK,qCACrBD,UAAW,8EAEfrD,KAAK0loB,gCAAkCvkoB,EAAc,OACjDmC,GAAItD,KAAKmH,OAAO7D,GAAK,mCACrBD,UAAW,6EAEfrD,KAAK2loB,kCAAoCxkoB,EAAc,OACnDmC,GAAItD,KAAKmH,OAAO7D,GAAK,qCACrBD,UAAW,+EAEfrD,KAAK4loB,iCAAmCzkoB,EAAc,OAClDmC,GAAItD,KAAKmH,OAAO7D,GAAK,oCACrBD,UAAW,8EAEfrD,KAAK6loB,mCAAqC1koB,EAAc,OACpDmC,GAAItD,KAAKmH,OAAO7D,GAAK,sCACrBD,UAAW,gFAEfrD,KAAK8loB,gBAAkB3koB,EAAc,OAEjCoC,OAAQ,6HACRD,GAAItD,KAAKmH,OAAO7D,GAAK,mBAAoBD,UAAW,+BAExD,IAAI0ioB,EAAc5koB,EAAc,OAC5Ba,UAAW4zjB,EAAY37e,YAAY,WAAY52E,UAAW,4BAC1DE,OAAQ,iCAERyioB,EAAW7koB,EAAc,OAASoC,OAAQ,kBAC1C8P,EAAQlS,EAAc,OACtBa,UAAW4zjB,EAAY37e,YAAY,QAAS52E,UAAW,oDACvDE,OAAQ,0BAER0ioB,EAA4B9koB,EAAc,SAC1CsC,OAASiD,KAAQ,SACjBpD,GAAItD,KAAKmH,OAAO7D,GAAK,iBAAkBC,OAAQ,yDAE/C2ioB,EAAW/koB,EAAc,OACzBoC,OAAQ,uDAERrC,EAAMC,EAAc,OACpBoC,OAAQ,oCAAqCvB,UAAW4zjB,EAAY37e,YAAY,YAChF52E,UAAW,kCAEX8ioB,EAAUhloB,EAAc,OAASoC,OAAQ,mCACzCu+nB,EAAmB3goB,EAAc,UACjCa,UAAW,WAAa4zjB,EAAY37e,YAAY,QAAU,oBACvC27e,EAAY37e,YAAY,SAAW,YACtD32E,GAAItD,KAAKmH,OAAO7D,GAAK,aAEzB6ioB,EAAQxkoB,YAAYmgoB,GACpB9hoB,KAAKgioB,QAAQrgoB,YAAY3B,KAAK4koB,oBAC9B5koB,KAAKwioB,OAAO7goB,YAAY3B,KAAK6koB,mBAC7B7koB,KAAKyioB,OAAO9goB,YAAY3B,KAAK8koB,mBAC7B9koB,KAAK0ioB,UAAU/goB,YAAY3B,KAAK+koB,sBAChCX,EAAiBzioB,YAAY3B,KAAKgioB,SAClCoC,EAAiBzioB,YAAY0ioB,GAC7BC,EAAgB3ioB,YAAY3B,KAAKwioB,QACjC8B,EAAgB3ioB,YAAY4ioB,GAC5BC,EAAgB7ioB,YAAY3B,KAAKyioB,QACjC+B,EAAgB7ioB,YAAY8ioB,GAC5BC,EAAmB/ioB,YAAY3B,KAAK0ioB,WACpCgC,EAAmB/ioB,YAAYgjoB,GAC/BjB,EAAiB/hoB,YAAYwioB,GAC7BT,EAAiB/hoB,YAAYyioB,GAC7BV,EAAiB/hoB,YAAY2ioB,GAC7BZ,EAAiB/hoB,YAAY6ioB,GAC7Bd,EAAiB/hoB,YAAY+ioB,GAC7B1koB,KAAKwhoB,uBAAuB7/nB,YAAY3B,KAAK2loB,mCAC7C3loB,KAAK0hoB,sBAAsB//nB,YAAY3B,KAAK4loB,kCAC5C5loB,KAAKyhoB,qBAAqB9/nB,YAAY3B,KAAK0loB,iCAC3C1loB,KAAKqhoB,iBAAiB1/nB,YAAY3B,KAAKsloB,6BACvCtloB,KAAKuhoB,oBAAoB5/nB,YAAY3B,KAAKuloB,gCAC1CvloB,KAAKshoB,oBAAoB3/nB,YAAY3B,KAAKwloB,gCAC1CxloB,KAAK2hoB,wBAAwBhgoB,YAAY3B,KAAK6loB,oCAC9C7loB,KAAK4hoB,uBAAuBjgoB,YAAY3B,KAAKyloB,mCAC7CzloB,KAAKgjoB,gCAAgCrhoB,YAAY3B,KAAKwhoB,wBACtDxhoB,KAAKoloB,8BAA8BzjoB,YAAY3B,KAAKyhoB,sBACpDzhoB,KAAKojoB,+BAA+BzhoB,YAAY3B,KAAK0hoB,uBACrD1hoB,KAAKqloB,iCAAiC1joB,YAAY3B,KAAK2hoB,yBACvD3hoB,KAAKmloB,gCAAgCxjoB,YAAY3B,KAAK4hoB,wBACtD5hoB,KAAKkloB,6BAA6BvjoB,YAAY3B,KAAKshoB,qBACnDthoB,KAAKijoB,6BAA6BthoB,YAAY3B,KAAKuhoB,qBACnDvhoB,KAAKiloB,0BAA0BtjoB,YAAY3B,KAAKqhoB,kBAChDuC,EAAgBjioB,YAAYqjoB,GAC5BpB,EAAgBjioB,YAAY3B,KAAKsjoB,YACjCM,EAAgBjioB,YAAY3B,KAAKwjoB,yBACjCI,EAAgBjioB,YAAY3B,KAAKmjoB,sBACjCS,EAAgBjioB,YAAY3B,KAAKyjoB,wBACjCG,EAAgBjioB,YAAY3B,KAAKkjoB,oBACjCU,EAAgBjioB,YAAY3B,KAAKgjoB,iCACjCY,EAAgBjioB,YAAY3B,KAAKoloB,+BACjCxB,EAAgBjioB,YAAY3B,KAAKojoB,gCACjCQ,EAAgBjioB,YAAY3B,KAAKqloB,kCACjCzB,EAAgBjioB,YAAY3B,KAAKmloB,iCACjCvB,EAAgBjioB,YAAY3B,KAAKkloB,8BACjCtB,EAAgBjioB,YAAY3B,KAAKijoB,8BACjCW,EAAgBjioB,YAAY3B,KAAKiloB,2BACjCiB,EAASvkoB,YAAYT,GACrBgloB,EAASvkoB,YAAYwkoB,GACrBH,EAASrkoB,YAAY0R,GACrB2ynB,EAASrkoB,YAAYskoB,GACrBD,EAASrkoB,YAAYukoB,GACrBlmoB,KAAK8loB,gBAAgBnkoB,YAAYokoB,GACjC/loB,KAAK8loB,gBAAgBnkoB,YAAYqkoB,GACjCrC,EAAehioB,YAAYkioB,GAC3BF,EAAehioB,YAAYmioB,GAC3BH,EAAehioB,YAAYoioB,GAC3BJ,EAAehioB,YAAYqioB,GAC3BL,EAAehioB,YAAYsioB,GAC3BN,EAAehioB,YAAYuioB,GAC3BlkoB,KAAKmH,OAAOxF,YAAYgrjB,GACxB3sjB,KAAKmH,OAAOxF,YAAY+hoB,GACxB1joB,KAAKmH,OAAOxF,YAAYgioB,GACxB3joB,KAAKmH,OAAOxF,YAAYiioB,GACxB5joB,KAAKmH,OAAOxF,YAAY3B,KAAK8loB,iBAE7B1B,EAAiB3noB,iBAAiB,QAASuD,KAAKoioB,6BAChDkC,EAAgB7noB,iBAAiB,QAASuD,KAAKoioB,6BAC/CoC,EAAgB/noB,iBAAiB,QAASuD,KAAKoioB,6BAC/CsC,EAAmBjooB,iBAAiB,QAASuD,KAAKoioB,6BAElDpioB,KAAKgjoB,gCAAgCvmoB,iBAAiB,QAASuD,KAAK2ioB,6BACpE3ioB,KAAKoloB,8BAA8B3ooB,iBAAiB,QAASuD,KAAK2ioB,6BAClE3ioB,KAAKojoB,+BAA+B3moB,iBAAiB,QAASuD,KAAK2ioB,6BACnE3ioB,KAAKiloB,0BAA0BxooB,iBAAiB,QAASuD,KAAK2ioB,6BAC9D3ioB,KAAKkloB,6BAA6BzooB,iBAAiB,QAASuD,KAAK2ioB,6BACjE3ioB,KAAKijoB,6BAA6BxmoB,iBAAiB,QAASuD,KAAK2ioB,6BACjE3ioB,KAAKqloB,iCAAiC5ooB,iBAAiB,QAASuD,KAAK2ioB,6BACrE3ioB,KAAKmloB,gCAAgC1ooB,iBAAiB,QAASuD,KAAK2ioB,6BAEpE3ioB,KAAK60F,YAAc,IAAI20C,IACnBzsI,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,EAAG4+H,SAAU,EACpCl1H,MAAO,IAAKi8F,mBAAmB,IAEnCjyG,KAAK60F,YAAYhkD,SAASmzlB,GAC1BhkoB,KAAKq+Z,YAAc,IAAIwpM,IACnB7xlB,MAAO,QAASgkN,YAAa,QAASloN,MAAO,IAEjD9R,KAAKq+Z,YAAYxtX,SAASizlB,GAC1B9joB,KAAK8hoB,iBAAmB,IAAIj6B,IACxB7xlB,MAAO,QAASyK,OAAQzgB,KAAK+ioB,2BAA4BjxnB,MAAO,IAEpE9R,KAAK8hoB,iBAAiBjxlB,SAASixlB,GAC/B9hoB,KAAKomoB,kBAAoB,IAAIhoe,IACzBrhK,MAAO,UAAW0jB,OAAQzgB,KAAKujoB,+BAEnCvjoB,KAAKomoB,kBAAkBv1lB,SAASqzlB,GAChClkoB,KAAK6hoB,mBAAqB,IAAIzje,IAC1BrhK,MAAO,UAAW0jB,OAAQzgB,KAAKqjoB,mCAEnCrjoB,KAAK6hoB,mBAAmBhxlB,SAASo1lB,IAErC/vI,EAAwB96f,UAAUgjlB,YAAc,WAC5Bp+kB,KAAKwjgB,MAAMvtb,UAA3B,IACI64a,EAAe9uf,KAAKwjgB,MAAMA,MAAM1U,aACpCA,EAAakpC,mBAAmB,qBAChClpC,EAAa+uE,2BAA4B,EACpB,IAAjB79jB,KAAK+hoB,QACLjzI,EAAa6vF,aAAa3+kB,KAAKyogB,YAG/B3Z,EAAakvF,cAAch+kB,KAAKgkgB,aAE/BvmgB,EAAkBuC,KAAKwjgB,MAAMA,MAAMu0B,cAAcq7B,qBAClDpzjB,KAAKwjgB,MAAMA,MAAMu0B,cAAcQ,uBAEnCzpC,EAAa+uE,2BAA4B,GAE7C3nE,EAAwB96f,UAAU8glB,UAAY,WAC1C,IAAIp1iB,EAAS,IAAIm6d,GAIjB,OAHAn6d,EAAOzQ,MAAQr2B,KAAKomoB,kBAAkBrpoB,MACtC+pC,EAAOqhM,UAAYnoO,KAAKq+Z,YAAYrvY,KACpC8X,EAAO0sD,UAAYxzF,KAAK60F,YAAY93F,MAC7B+pC,GAEXovd,EAAwB96f,UAAUgmoB,eAAiB,SAAUpgoB,GACzD,OAAOA,EAAQ8C,UAAUK,SAAS,2CAKtC+xf,EAAwB96f,UAAUo8H,KAAO,WACrC,IAAIo+b,EAAc,IAAIx3c,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eAC9D+pH,EAAYr3c,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACvCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAK0wf,6BAA6BklE,GAEtC51jB,KAAKqmoB,sCACLrmoB,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAO9yhB,OAAS8qe,EAAY37e,YAAY,uBACnDj6E,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAKwjgB,MAAMj0Y,YAC1CvvH,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAKmioB,2BAC/BnioB,KAAKwjgB,MAAMo6G,OAAO1pmB,UAAakC,EAAG,SAAUC,EAAG,UAC/CrW,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAKkhoB,+BACZlngB,aAAe19F,QAASs5hB,EAAY37e,YAAY,MAAOhnE,SAAU,qCAAsCwxG,WAAW,KAGlHwV,MAAOj6H,KAAKkioB,YACZlogB,aAAe19F,QAASs5hB,EAAY37e,YAAY,UAAWhnE,SAAU,0CAE7EjT,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOpmf,QAEtB0+X,EAAwB96f,UAAUknoB,iCAAmC,WAEjE,IAAK,IADDgE,EAActmoB,KAAKmH,OAAOuG,uBAAuB,oCAC5CgW,EAAI,EAAGA,EAAI4inB,EAAY9poB,OAAQknB,IACpC,IAAoF,IAAhF4inB,EAAY5inB,GAAGrgB,UAAU9E,QAAQ,0CAAkD,CACnF,IAAIgooB,EAAgBD,EAAY5inB,GAAGrgB,UACnCkjoB,EAAgBA,EAActpoB,QAAQ,yCAA0C,IAChFqpoB,EAAY5inB,GAAGrgB,UAAYkjoB,IAIvCrwI,EAAwB96f,UAAUmnoB,4BAA8B,SAAUrunB,GACtE,OAAQA,GACJ,IAAK,OACDlU,KAAKqhoB,iBAAiBv9nB,UAAUS,OAAO,0CACvCvE,KAAKuhoB,oBAAoBz9nB,UAAUS,OAAO,0CAC1CvE,KAAKshoB,oBAAoBx9nB,UAAUS,OAAO,0CAC1CvE,KAAK4hoB,uBAAuB99nB,UAAUS,OAAO,0CAC7CvE,KAAK2hoB,wBAAwB79nB,UAAUS,OAAO,0CAC9CvE,KAAK0hoB,sBAAsB59nB,UAAUS,OAAO,0CAC5CvE,KAAKyhoB,qBAAqB39nB,UAAUS,OAAO,0CAC3CvE,KAAKwhoB,uBAAuB19nB,UAAUS,OAAO,0CAC7CvE,KAAKwmoB,+BAA+B,QACpC,MACJ,IAAK,MACDxmoB,KAAKuhoB,oBAAoBz9nB,UAAUS,OAAO,0CAC1CvE,KAAK4hoB,uBAAuB99nB,UAAUS,OAAO,0CAC7CvE,KAAK2hoB,wBAAwB79nB,UAAUS,OAAO,0CAC9CvE,KAAKwhoB,uBAAuB19nB,UAAUS,OAAO,0CAC7CvE,KAAKqhoB,iBAAiBv9nB,UAAUM,IAAI,0CACpCpE,KAAKshoB,oBAAoBx9nB,UAAUM,IAAI,0CACvCpE,KAAK0hoB,sBAAsB59nB,UAAUM,IAAI,0CACzCpE,KAAKyhoB,qBAAqB39nB,UAAUM,IAAI,0CACxCpE,KAAKwmoB,+BAA+B,OACpC,MACJ,IAAK,MACDxmoB,KAAK4hoB,uBAAuB99nB,UAAUS,OAAO,0CAC7CvE,KAAK2hoB,wBAAwB79nB,UAAUS,OAAO,0CAC9CvE,KAAKwhoB,uBAAuB19nB,UAAUM,IAAI,0CAC1CpE,KAAKqhoB,iBAAiBv9nB,UAAUM,IAAI,0CACpCpE,KAAKshoB,oBAAoBx9nB,UAAUM,IAAI,0CACvCpE,KAAK0hoB,sBAAsB59nB,UAAUM,IAAI,0CACzCpE,KAAKyhoB,qBAAqB39nB,UAAUM,IAAI,0CACxCpE,KAAKuhoB,oBAAoBz9nB,UAAUM,IAAI,0CACvCpE,KAAKwmoB,+BAA+B,SAIhDtwI,EAAwB96f,UAAUoroB,+BAAiC,SAAUC,GACzE,OAAQA,GACJ,IAAK,OACDzmoB,KAAKsjoB,WAAW5+nB,MAAMoiC,OAAS,OAC/B9mC,KAAKwjoB,wBAAwB9+nB,MAAMosC,QAAU,OAC7C9wC,KAAKyjoB,uBAAuB/+nB,MAAMosC,QAAU,OAC5C9wC,KAAKmjoB,qBAAqBz+nB,MAAMosC,QAAU,OAC1C9wC,KAAKkjoB,mBAAmBx+nB,MAAMosC,QAAU,OACxC,MACJ,IAAK,MACD9wC,KAAKsjoB,WAAW5+nB,MAAMoiC,OAAS,+BAC/B9mC,KAAKwjoB,wBAAwB9+nB,MAAMosC,QAAU,OAC7C9wC,KAAKyjoB,uBAAuB/+nB,MAAMosC,QAAU,OAC5C9wC,KAAKmjoB,qBAAqBz+nB,MAAMosC,QAAU,OAC1C9wC,KAAKkjoB,mBAAmBx+nB,MAAMosC,QAAU,OACxC,MACJ,IAAK,MACD9wC,KAAKsjoB,WAAW5+nB,MAAMoiC,OAAS,+BAC/B9mC,KAAKwjoB,wBAAwB9+nB,MAAMosC,QAAU,OAC7C9wC,KAAKyjoB,uBAAuB/+nB,MAAMosC,QAAU,OAC5C9wC,KAAKmjoB,qBAAqBz+nB,MAAMosC,QAAU,QAC1C9wC,KAAKkjoB,mBAAmBx+nB,MAAMosC,QAAU,UAIpDold,EAAwB96f,UAAUynoB,8BAAgC,SAAUR,EAAqBO,EAAc5hoB,GACvGA,EAAQ8C,UAAUK,SAASy+nB,GAC3B5hoB,EAAQ8C,UAAUS,OAAOq+nB,GAGzB5hoB,EAAQ8C,UAAUM,IAAIw+nB,IAI9B1sI,EAAwB96f,UAAU0noB,2BAA6B,SAAUT,EAAqBO,EAAchmjB,EAAc8pjB,EAAqBxynB,GAC3I,IAAIyynB,EAAanmoB,SAAS2uB,eAAekzmB,EAAsBzljB,GAC3DgqjB,EAAiBpmoB,SAAS2uB,eAAekzmB,EAAsBqE,GAClD,WAAbxynB,EACAlU,KAAK6moB,6BAA6BF,EAAYC,EAAgBhE,EAAc,cAE1D,cAAb1unB,EACLlU,KAAK6moB,6BAA6BF,EAAYC,EAAgBhE,EAAc,WAE1D,cAAb1unB,EACLlU,KAAK6moB,6BAA6BF,EAAYC,EAAgBhE,EAAc,iBAE1D,iBAAb1unB,EACLlU,KAAK6moB,6BAA6BF,EAAYC,EAAgBhE,EAAc,WAE1D,eAAb1unB,EACLlU,KAAK6moB,6BAA6BF,EAAYC,EAAgBhE,EAAc,eAE1D,iBAAb1unB,EACLlU,KAAK6moB,6BAA6BF,EAAYC,EAAgBhE,EAAc,WAE1D,gBAAb1unB,EACLlU,KAAK6moB,6BAA6BF,EAAYC,EAAgBhE,EAAc,gBAE1D,kBAAb1unB,GACLlU,KAAK6moB,6BAA6BF,EAAYC,EAAgBhE,EAAc,YAGpF1sI,EAAwB96f,UAAUyroB,6BAA+B,SAAU7ioB,EAAK4ioB,EAAgBhE,EAAc1nkB,GACtG0rkB,EAAe9ioB,UAAUK,SAASy+nB,IAA4C,WAA3B1nkB,EAASh+D,MAAM,KAAK,GAEvE8G,EAAIU,MAAMw2D,GAAY,+BAEjB0rkB,EAAe9ioB,UAAUK,SAASy+nB,IAA8B,YAAb1nkB,EACxDl3D,EAAIU,MAAMw2D,GAAY,QAGtBl3D,EAAIU,MAAMw2D,GAAY,QAI9Bg7b,EAAwB96f,UAAUiroB,oCAAsC,WACpE,IACIl+Z,EACAmV,EACAuzG,EACAh8P,EAJAmva,EAAchkgB,KAAKwjgB,MAAMvtb,UAAU+tb,YAAY5+b,MAAM4+b,YAKpDvmgB,EAAkBumgB,IAAiBvmgB,EAAkBumgB,EAAYn2M,WAClE7tT,KAAK8moB,aAAa9iI,EAAYn2M,SAC1BpwT,EAAkBumgB,EAAYn2M,UAAYpwT,EAAkBumgB,EAAYn2M,QAAQnhT,MAChFy7N,EAAY,EACZmV,EAAc,UACdzoJ,EAAc,EACdg8P,EAAY,YAGZ1oH,EAAYnoO,KAAK+moB,aAAa/iI,EAAYn2M,QAAQnhT,IAAIy7N,WACtDmV,EAAc0mR,EAAYn2M,QAAQnhT,IAAI2pB,MACtCw+D,EAAcmva,EAAYn2M,QAAQnhT,IAAI+kQ,eACtCo/E,EAAYmzK,EAAYZ,QAAQh1c,kBAGxCpuD,KAAKomoB,kBAAkBrpoB,MAAQugP,EAC/Bt9O,KAAK6hoB,mBAAmB9koB,MAAQ8zV,EAEhC,IAAIm2S,GACA7/nB,OAAQnH,KAAKomoB,kBAAmBl+mB,SAAS,EACzCm1F,UAAU,EAAOE,MAAO,GAExB0phB,GACA9/nB,OAAQnH,KAAK6hoB,mBAAoB35mB,SAAS,EAC1Cm1F,UAAU,EAAOE,MAAO,GAG5Bv9G,KAAKqjoB,iCAAiC4D,GACtCjnoB,KAAKujoB,6BAA6ByD,GAClChnoB,KAAK8hoB,iBAAiBhwnB,MAAQ,EAC9B9R,KAAK4hoB,uBAAuBl9nB,MAAMosC,QAAU,OAC5C9wC,KAAK2hoB,wBAAwBj9nB,MAAMosC,QAAU,OAC7C9wC,KAAK60F,YAAY93F,MAAQ83F,EACzB70F,KAAKq+Z,YAAYvsZ,MAAQq2N,GAG7B+tR,EAAwB96f,UAAU0roB,aAAe,SAAUj5U,GACvD,IAAI8iN,GAAY,EACZQ,GAAe,EACf/C,GAAa,EACbiC,GAAc,EACd62H,GAAmB,EACnBC,GAAiB,EACjBC,GAAqB,EACrBC,GAAe,EACfC,GAAmB,EACP,OAAZz5U,IACIA,EAAQnhT,MAAQmhT,EAAQnhT,IAAIuigB,cAA0C,SAA1BphN,EAAQnhT,IAAIy7N,aACxDwoS,GAAY,GAEZ9iN,EAAQlhT,SAAWkhT,EAAQlhT,OAAOsigB,cAA6C,SAA7BphN,EAAQlhT,OAAOw7N,aACjEgpS,GAAe,GAEftjN,EAAQrhT,OAASqhT,EAAQrhT,KAAKyigB,cAA2C,SAA3BphN,EAAQrhT,KAAK27N,aAC3DimS,GAAa,GAEbvgN,EAAQphT,QAAUohT,EAAQphT,MAAMwigB,cAA4C,SAA5BphN,EAAQphT,MAAM07N,aAC9DkoS,GAAc,GAEdxiN,EAAQhqL,aAAegqL,EAAQhqL,WAAWorY,cAAiD,SAAjCphN,EAAQhqL,WAAWskG,aAC7E++Z,GAAmB,GAEnBr5U,EAAQ/pL,WAAa+pL,EAAQ/pL,SAASmrY,cAA+C,SAA/BphN,EAAQ/pL,SAASqkG,aACvEg/Z,GAAiB,GAEjBt5U,EAAQ80M,eAAiB90M,EAAQ80M,aAAasM,cAAmD,SAAnCphN,EAAQ80M,aAAax6R,aACnFi/Z,GAAqB,GAErBv5U,EAAQ+0M,aAAe/0M,EAAQ+0M,WAAWqM,cAAiD,SAAjCphN,EAAQ+0M,WAAWz6R,aAC7Em/Z,GAAmB,GAEhB32H,GAAcQ,GAAiB/C,GAAeiC,EAC1CM,GAAcQ,GAAiB/C,GAAeiC,GAAgB62H,GAC7DC,IAAkBG,IAAoBF,EACrCz2H,GAAaQ,GAAgB/C,GAAciC,GAAe62H,GAAoBC,IAC3EG,IAAqBF,IACrBv5U,EAAQnhT,IAAIuigB,cAAgBphN,EAAQlhT,OAAOsigB,cAAgBphN,EAAQrhT,KAAKyigB,cACrEphN,EAAQphT,MAAMwigB,cAAgBphN,EAAQhqL,WAAWorY,cAAgBphN,EAAQ/pL,SAASmrY,cACrFjvgB,KAAKuioB,4BAA4B,QACjCvioB,KAAK0ioB,UAAU5+nB,UAAUS,OAAO,0CAChCvE,KAAKgioB,QAAQl+nB,UAAUM,IAAI,0CAC3BpE,KAAKwioB,OAAO1+nB,UAAUS,OAAO,0CAC7BvE,KAAKyioB,OAAO3+nB,UAAUS,OAAO,4CAG7BvE,KAAKuioB,4BAA4B,OACjCvioB,KAAKyioB,OAAO3+nB,UAAUM,IAAI,0CAC1BpE,KAAK0ioB,UAAU5+nB,UAAUS,OAAO,0CAChCvE,KAAKgioB,QAAQl+nB,UAAUS,OAAO,0CAC9BvE,KAAKwioB,OAAO1+nB,UAAUS,OAAO,4CAI/B6pgB,GAAc+C,GAAgBR,GAAaN,IAAgB62H,IAAqBC,EAClFt5U,EAAQnhT,IAAIuigB,cAAgBphN,EAAQlhT,OAAOsigB,cAAgBphN,EAAQrhT,KAAKyigB,cACrEphN,EAAQphT,MAAMwigB,cAAgBphN,EAAQhqL,WAAWorY,cAAgBphN,EAAQ/pL,SAASmrY,cACrFjvgB,KAAKuioB,4BAA4B,QACjCvioB,KAAKwioB,OAAO1+nB,UAAUS,OAAO,0CAC7BvE,KAAKyioB,OAAO3+nB,UAAUS,OAAO,0CAC7BvE,KAAK0ioB,UAAU5+nB,UAAUS,OAAO,0CAChCvE,KAAKgioB,QAAQl+nB,UAAUM,IAAI,4CAG3BpE,KAAKuioB,4BAA4B,OACjCvioB,KAAK0ioB,UAAU5+nB,UAAUS,OAAO,0CAChCvE,KAAKgioB,QAAQl+nB,UAAUS,OAAO,0CAC9BvE,KAAKwioB,OAAO1+nB,UAAUM,IAAI,0CAC1BpE,KAAKyioB,OAAO3+nB,UAAUS,OAAO,2CAIjC8ioB,GAAe,EAInBA,GAAe,EAEnBrnoB,KAAK4hoB,uBAAuB99nB,UAAUS,OAAO,0CAC7CvE,KAAK2hoB,wBAAwB79nB,UAAUS,OAAO,0CAC1C8ioB,IACArnoB,KAAK0ioB,UAAU5+nB,UAAUM,IAAI,0CAC7BpE,KAAKgioB,QAAQl+nB,UAAUS,OAAO,0CAC9BvE,KAAKwioB,OAAO1+nB,UAAUS,OAAO,0CAC7BvE,KAAKyioB,OAAO3+nB,UAAUS,OAAO,0CACzBosgB,EACA3wgB,KAAKqhoB,iBAAiBv9nB,UAAUM,IAAI,0CAGpCpE,KAAKqhoB,iBAAiBv9nB,UAAUS,OAAO,0CAEvC4sgB,EACAnxgB,KAAKshoB,oBAAoBx9nB,UAAUM,IAAI,0CAGvCpE,KAAKshoB,oBAAoBx9nB,UAAUS,OAAO,0CAE1C6pgB,EACApugB,KAAKyhoB,qBAAqB39nB,UAAUM,IAAI,0CAGxCpE,KAAKyhoB,qBAAqB39nB,UAAUS,OAAO,0CAE3C8rgB,EACArwgB,KAAK0hoB,sBAAsB59nB,UAAUM,IAAI,0CAGzCpE,KAAK0hoB,sBAAsB59nB,UAAUS,OAAO,0CAE5C4ioB,EACAnnoB,KAAKwhoB,uBAAuB19nB,UAAUM,IAAI,0CAG1CpE,KAAKwhoB,uBAAuB19nB,UAAUS,OAAO,0CAE7C2ioB,EACAlnoB,KAAKuhoB,oBAAoBz9nB,UAAUM,IAAI,0CAGvCpE,KAAKuhoB,oBAAoBz9nB,UAAUS,OAAO,6CAK1D2xf,EAAwB96f,UAAU2roB,aAAe,SAAU5+Z,GACvD,OAAQA,GACJ,IAAK,SAAU,OAAO,EACtB,IAAK,MAAO,OAAO,EACnB,IAAK,eAAgB,OAAO,EAC5B,IAAK,eAAgB,OAAO,EAC5B,IAAK,UAAW,OAAO,EACvB,IAAK,aAAc,OAAO,EAC1B,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAO,EACtB,IAAK,oBAAqB,OAAO,EACjC,IAAK,oBAAqB,OAAO,GACjC,IAAK,wBAAyB,OAAO,GACrC,IAAK,qBAAsB,OAAO,GAClC,IAAK,qBAAsB,OAAO,GAClC,IAAK,yBAA0B,OAAO,GACtC,IAAK,oBAAqB,OAAO,GACjC,IAAK,oBAAqB,OAAO,GACjC,IAAK,wBAAyB,OAAO,GACrC,IAAK,aAAc,OAAO,GAC1B,IAAK,aAAc,OAAO,GAC1B,IAAK,iBAAkB,OAAO,GAC9B,IAAK,WAAY,OAAO,GACxB,IAAK,YAAa,OAAO,GACzB,IAAK,SAAU,OAAO,GACtB,IAAK,QAAS,OAAO,GACrB,IAAK,QAAS,OAAO,GAEzB,OAAO,GAKX+tR,EAAwB96f,UAAUiX,QAAU,WACxC,IAAK5U,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAImf,EAAI,EAAGA,EAAItmB,KAAKmH,OAAOmK,WAAW9U,OAAQ8pB,IAC/CtmB,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAWgV,IAC/CA,IAEJtmB,KAAKmH,YAASjM,EAEd8E,KAAKyogB,aACLzogB,KAAKyogB,WAAWp2f,UAChBrS,KAAKyogB,gBAAavtgB,GAElB8E,KAAKgkgB,cACLhkgB,KAAKgkgB,YAAY3xf,UACjBrS,KAAKgkgB,iBAAc9ogB,GAEvB8E,KAAK49mB,YAAS1inB,EACd8E,KAAKmH,YAASjM,EACTuC,EAAkBuC,KAAKq+Z,cACxBr+Z,KAAKq+Z,YAAYhsZ,UAErBrS,KAAKq+Z,iBAAcnja,EACduC,EAAkBuC,KAAKomoB,oBACxBpmoB,KAAKomoB,kBAAkB/znB,UAE3BrS,KAAKomoB,uBAAoBlroB,EACpBuC,EAAkBuC,KAAK6hoB,qBACxB7hoB,KAAK6hoB,mBAAmBxvnB,UAE5BrS,KAAK6hoB,wBAAqB3moB,EACrBuC,EAAkBuC,KAAK8hoB,mBACxB9hoB,KAAK8hoB,iBAAiBzvnB,UAE1BrS,KAAK8hoB,sBAAmB5moB,EACxB8E,KAAK4koB,wBAAqB1poB,EAC1B8E,KAAK6koB,uBAAoB3poB,EACzB8E,KAAK8koB,uBAAoB5poB,EACzB8E,KAAK+koB,0BAAuB7poB,EAC5B8E,KAAKsjoB,gBAAapooB,EAClB8E,KAAKwjoB,6BAA0BtooB,EAC/B8E,KAAKyjoB,4BAAyBvooB,EAC9B8E,KAAKkjoB,wBAAqBhooB,EAC1B8E,KAAKmjoB,0BAAuBjooB,EAC5B8E,KAAKiloB,+BAA4B/poB,EACjC8E,KAAKqhoB,sBAAmBnmoB,EACxB8E,KAAKijoB,kCAA+B/noB,EACpC8E,KAAKuhoB,yBAAsBrmoB,EAC3B8E,KAAKkloB,kCAA+BhqoB,EACpC8E,KAAKshoB,yBAAsBpmoB,EAC3B8E,KAAKmloB,qCAAkCjqoB,EACvC8E,KAAK4hoB,4BAAyB1moB,EAC9B8E,KAAKoloB,mCAAgClqoB,EACrC8E,KAAKyhoB,0BAAuBvmoB,EAC5B8E,KAAKgjoB,qCAAkC9noB,EACvC8E,KAAKwhoB,4BAAyBtmoB,EAC9B8E,KAAKojoB,oCAAiClooB,EACtC8E,KAAK0hoB,2BAAwBxmoB,EAC7B8E,KAAKqloB,sCAAmCnqoB,EACxC8E,KAAK2hoB,6BAA0BzmoB,EAC/B8E,KAAKsloB,iCAA8BpqoB,EACnC8E,KAAKuloB,oCAAiCrqoB,EACtC8E,KAAKwloB,oCAAiCtqoB,EACtC8E,KAAKyloB,uCAAoCvqoB,EACzC8E,KAAK0loB,qCAAkCxqoB,EACvC8E,KAAK2loB,uCAAoCzqoB,EACzC8E,KAAK4loB,sCAAmC1qoB,EACxC8E,KAAK6loB,wCAAqC3qoB,EAC1C8E,KAAK8loB,qBAAkB5qoB,EACvB8E,KAAKgioB,aAAU9moB,EACf8E,KAAK0ioB,eAAYxnoB,EACjB8E,KAAKyioB,YAASvnoB,EACd8E,KAAKwioB,YAAStnoB,GAEXg7f,KC7iCPC,GAAoC,WAIpC,SAASA,EAAmB3H,GACxB,IAAIzuf,EAAQC,KAIZA,KAAKunoB,yBAA2B,WAC5B,IAAIvjI,EAAcjkgB,EAAMyjgB,MAAMvtb,UAAU+tb,YACnCvmgB,EAAkBsC,EAAMynnB,gBAAgBzqnB,OAASgD,EAAMwnnB,cAAcxqnB,OACnEgD,EAAM0nnB,eAAe1qnB,OAASgD,EAAMunnB,aAAavqnB,OAASgD,EAAMynoB,iBAAiBzqoB,QAChFingB,EAAY3nP,eAAiBt8Q,EAAMynnB,gBAAgBzqnB,OAChDingB,EAAY9nP,aAAen8Q,EAAMwnnB,cAAcxqnB,OAC/CingB,EAAY5nP,cAAgBr8Q,EAAM0nnB,eAAe1qnB,OACjDingB,EAAY7nP,YAAcp8Q,EAAMunnB,aAAavqnB,OAC7CingB,EAAY3zM,cAAgBtwT,EAAMynoB,iBAAiBzqoB,QAC1DgD,EAAMyjgB,MAAMA,MAAM5hB,4BAA4B64I,uBAAwB,EACtE16nB,EAAM0noB,kBAAkB1noB,EAAMikgB,aAC9BjkgB,EAAMyjgB,MAAMA,MAAM5hB,4BAA4Bu5I,2BAElDp7nB,EAAM2noB,0BAKV1noB,KAAK0noB,uBAAyB,WAC1B3noB,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAMyjgB,MAAMo6G,OAAO58mB,QAAQ0D,MAAMwvb,cAAgB,GACjDn0b,EAAMyjgB,MAAMj0Y,eAKhBvvH,KAAK2noB,yBAA2B,WACxB5noB,EAAM6noB,mBAAmBp1nB,QACzBzS,EAAMynoB,iBAAiBpinB,SAAU,EAGjCrlB,EAAMynoB,iBAAiBpinB,SAAU,GAMzCplB,KAAK6noB,aAAe,WAChB9noB,EAAMyjgB,MAAM4rH,QAAQpunB,QAAQ0D,MAAMwvb,cAAgB,GAClDn0b,EAAMyjgB,MAAMj0Y,eAEhBvvH,KAAKwjgB,MAAQhV,EAwMjB,OAtMAlwf,OAAOuJ,eAAesuf,EAAmB/6f,UAAW,eAIhDsM,IAAK,WACD,OAAIjK,EAAkBuC,KAAKu4iB,eAChBv4iB,KAAKu4iB,cAAgB,IAAIh1C,GAE7BvjgB,KAAKu4iB,eAEhB5wiB,YAAY,EACZC,cAAc,IAKlBuuf,EAAmB/6f,UAAU2mC,cAAgB,WACzC,MAAO,sBAKXo0d,EAAmB/6f,UAAUw1f,uBAAyB,SAAUmmB,GAC7C/2gB,KAAKwjgB,MACpBxjgB,KAAKmH,OAAShG,EAAc,OACxBmC,GAAItD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,2BAA4B3gJ,UAAW,2BAE9ErD,KAAKwjgB,MAAMA,MAAMxigB,QAAQW,YAAY3B,KAAKmH,QAC1C,IAAIswM,EAAWt2M,EAAc,OAASoC,OAAQ,mDAC1CukoB,EAAgB3moB,EAAc,SAC9BmC,GAAItD,KAAKmH,OAAO7D,GAAK,iBAAkBD,UAAW,8BAClDrB,UAAW+0gB,EAAW98b,YAAY,0BAEtCw9H,EAAS91M,YAAYmmoB,GACrB1xI,GAAkB2xI,4BAA4B/noB,KAAMy3M,EAAUs/T,GAC9D,IAAI71gB,EAAMC,EAAc,OAASoC,OAAQ,sCACrCykoB,EAAiB7moB,EAAc,SAC/BkC,UAAW,8BACXC,GAAItD,KAAKmH,OAAO7D,GAAK,oBAEzB0koB,EAAehmoB,UAAY+0gB,EAAW98b,YAAY,wBAClD/4E,EAAIS,YAAYqmoB,GAChB,IAAIC,EAAS9moB,EAAc,SACvBoC,OAAQ,uCAER0gnB,EAAM9inB,EAAc,MACpB+inB,EAAM/inB,EAAc,MACpBymoB,EAAqBzmoB,EAAc,SACnCsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,eAEpD8gnB,EAAMjjnB,EAAc,MAAQoC,OAAQ,wBACxCvD,KAAKkooB,mBAAqB/moB,EAAc,SACpCsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,iBAEpD4gnB,EAAIvinB,YAAYimoB,GAChBxjB,EAAIzinB,YAAY3B,KAAKkooB,oBACrBjkB,EAAItinB,YAAYuinB,GAChBD,EAAItinB,YAAYyinB,GAChB6jB,EAAOtmoB,YAAYsinB,GACnB/inB,EAAIS,YAAYsmoB,GAChB,IAAIE,EAAS3noB,SAASW,cAAc,OACpCnB,KAAKmH,OAAOxF,YAAYT,GACxBlB,KAAKmH,OAAOxF,YAAYwmoB,GACxBnooB,KAAKwnoB,iBAAmB,IAAIh+f,IACxBzsI,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,MAAO0J,MAAO,IACrCk1H,SAAU,EAAGj5B,mBAAmB,IAEpCjyG,KAAKwnoB,iBAAiB32lB,SAAS7wC,KAAKkooB,oBACpClooB,KAAK4noB,mBAAqB,IAAItihB,IAC1BjyG,MAAO0jgB,EAAW98b,YAAY,+BAC9Bx5D,OAAQzgB,KAAK2noB,yBACb10nB,SAAU,+BAEdjT,KAAK4noB,mBAAmB/2lB,SAAS+2lB,IAKrCzxI,EAAmB/6f,UAAUgtoB,sBAAwB,WACjD,IAAIpkI,EAAchkgB,KAAKwjgB,MAAMvtb,UAAU+tb,YACvChkgB,KAAKwnoB,iBAAiBzqoB,MAAQingB,EAAY3zM,YAC1CrwT,KAAKwnnB,gBAAgBzqnB,MAAQingB,EAAY3nP,aACzCr8Q,KAAKsnnB,aAAavqnB,MAAQingB,EAAY7nP,UACtCn8Q,KAAKynnB,eAAe1qnB,MAAQingB,EAAY5nP,YACxCp8Q,KAAKunnB,cAAcxqnB,MAAQingB,EAAY9nP,WACnC8nP,EAAY3zM,YAAc,GAC1BrwT,KAAK4noB,mBAAmBp1nB,SAAU,EAClCxS,KAAKwnoB,iBAAiBpinB,SAAU,IAGhCplB,KAAK4noB,mBAAmBp1nB,SAAU,EAClCxS,KAAKwnoB,iBAAiBpinB,SAAU,IAMxC+we,EAAmB/6f,UAAUigoB,qBAAuB,SAAUr3H,GAC1DhkgB,KAAKwjgB,MAAMA,MAAMu0B,cAAcC,mBAAmBh4hB,KAAKwjgB,MAAMvtb,UAAW,yBACxEj2E,KAAKqooB,yBAAyBrkI,GACzBvmgB,EAAkBuC,KAAKwjgB,MAAMA,MAAMu0B,cAAcq7B,qBAClDpzjB,KAAKwjgB,MAAMA,MAAMu0B,cAAcQ,wBAMvCpiC,EAAmB/6f,UAAUsqlB,wBAA0B,SAAU1hF,GAC7DhkgB,KAAKsooB,2BAA2BtkI,IAKpC7N,EAAmB/6f,UAAUitoB,yBAA2B,SAAUrkI,GAC9DhkgB,KAAKwjgB,MAAMA,MAAM1U,aAAaliD,YAAY,gBAC1C5sc,KAAKsooB,2BAA2BtkI,IAKpC7N,EAAmB/6f,UAAUktoB,2BAA6B,SAAUtkI,GAChE,IAAIoE,EAAapogB,KAAKwjgB,MAAMvtb,UAAU14E,MAAMmuhB,cAAcz0B,UAAUuR,eAAeJ,WAE/E65H,GADJ75H,EAAaA,EAAWrB,cAAc/mgB,KAAKwjgB,QACPQ,YAC/BvmgB,EAAkBuC,KAAKwjgB,MAAMA,MAAMu0B,cAAcmR,yBAClDlpiB,KAAKwjgB,MAAMA,MAAMu0B,cAAcmR,uBAAuBm9C,wBAAwB47C,GAElFA,EAAmB5xU,YAAc2zM,EAAY3zM,YAC7C4xU,EAAmB/lX,WAAa8nP,EAAY9nP,WAC5C+lX,EAAmB9lX,UAAY6nP,EAAY7nP,UAC3C8lX,EAAmB7lX,YAAc4nP,EAAY5nP,YAC7C6lX,EAAmB5lX,aAAe2nP,EAAY3nP,aAC9Cr8Q,KAAKwjgB,MAAMA,MAAM5hB,4BAA4B27I,mBAAmBn1H,IAKpEjS,EAAmB/6f,UAAUqsoB,kBAAoB,SAAUzjI,GACvDA,EAAY9nP,WAAal8Q,KAAKunnB,cAAcxqnB,MAC5CingB,EAAY7nP,UAAYn8Q,KAAKsnnB,aAAavqnB,MAC1CingB,EAAY3nP,aAAer8Q,KAAKwnnB,gBAAgBzqnB,MAChDingB,EAAY5nP,YAAcp8Q,KAAKynnB,eAAe1qnB,MAC1CiD,KAAK4noB,mBAAmBp1nB,UACxBwxf,EAAY3zM,YAAcrwT,KAAKwnoB,iBAAiBzqoB,QAMxDo5f,EAAmB/6f,UAAUo8H,KAAO,WAChC,IAAI+wgB,EAAiB,IAAInqhB,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eACjE08L,EAAehqhB,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QAC1CL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAK4wf,uBAAuB23I,GAEhCvooB,KAAKoooB,wBACLpooB,KAAKwjgB,MAAMo6G,OAAO9yhB,OAASy9iB,EAAetujB,YAAY,iBACtDj6E,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAOjtkB,gBAAaz1C,EAC/B8E,KAAKwjgB,MAAMo6G,OAAO1pmB,UAAakC,EAAG,SAAUC,EAAG,UAE/CrW,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAOl8mB,UAAOxG,EACzB8E,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAKwjgB,MAAMj0Y,YAC1CvvH,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAK6noB,aAC/B7noB,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAKunoB,yBACZvtgB,aAAe19F,QAASismB,EAAetujB,YAAY,MAAOhnE,SAAU,2BAA4BwxG,WAAW,KAG3GwV,MAAOj6H,KAAK0noB,uBACZ1tgB,aAAe19F,QAASismB,EAAetujB,YAAY,UAAWhnE,SAAU,gCAEhFjT,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOpmf,QAKtB2+X,EAAmB/6f,UAAUiX,QAAU,WACnC,IAAK5U,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAI0pF,EAAI,EAAGA,EAAI7wF,KAAKmH,OAAOmK,WAAW9U,OAAQq0F,IAC/C7wF,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAWu/E,IAC/CA,IAEJ7wF,KAAKmH,YAASjM,EAElB8E,KAAK49mB,YAAS1inB,EACd8E,KAAKmH,YAASjM,EACd8E,KAAKwjgB,WAAQtogB,EACb8E,KAAKkooB,wBAAqBhtoB,EAC1B8E,KAAK4noB,wBAAqB1soB,GAEvBi7f,KC3PPC,GAAmC,WAInC,SAASA,EAAkB5H,GACvB,IAAIzuf,EAAQC,KAIZA,KAAK6noB,aAAe,WAChB9noB,EAAMyjgB,MAAM4rH,QAAQpunB,QAAQ0D,MAAMwvb,cAAgB,GAClDn0b,EAAMyjgB,MAAMj0Y,eAKhBvvH,KAAKwooB,kBAAoB,WACjBzooB,EAAM0ooB,oBAAoBj2nB,SAC1BzS,EAAMwnnB,cAAcnimB,SAAU,EAC9BrlB,EAAM0nnB,eAAerimB,SAAU,EAC/BrlB,EAAMynnB,gBAAgBpimB,SAAU,EAChCrlB,EAAMunnB,aAAalimB,SAAU,IAG7BrlB,EAAMwnnB,cAAcnimB,SAAU,EAC9BrlB,EAAM0nnB,eAAerimB,SAAU,EAC/BrlB,EAAMynnB,gBAAgBpimB,SAAU,EAChCrlB,EAAMunnB,aAAalimB,SAAU,IAMrCplB,KAAKunoB,yBAA2B,WAC5B,IAAI9+H,EAAa1ogB,EAAMyjgB,MAAMvtb,UAAUwyb,WAClChrgB,EAAkBsC,EAAMynnB,gBAAgBzqnB,OAASgD,EAAMwnnB,cAAcxqnB,OACnEgD,EAAM0nnB,eAAe1qnB,OAASgD,EAAMunnB,aAAavqnB,QACnD0rgB,EAAWpsP,eAAiBt8Q,EAAMynnB,gBAAgBzqnB,OAAS0rgB,EAAWvsP,aAAen8Q,EAAMwnnB,cAAcxqnB,OACnG0rgB,EAAWrsP,cAAgBr8Q,EAAM0nnB,eAAe1qnB,OAAS0rgB,EAAWtsP,YAAcp8Q,EAAMunnB,aAAavqnB,QAC5GgD,EAAMyjgB,MAAMA,MAAM5hB,4BAA4B44I,sBAAuB,EACrEz6nB,EAAM0noB,kBAAkB1noB,EAAM0ogB,YAC9B1ogB,EAAMyjgB,MAAMA,MAAM5hB,4BAA4Bu5I,2BAElDp7nB,EAAM2noB,0BAKV1noB,KAAK0noB,uBAAyB,WAC1B3noB,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAMyjgB,MAAMo6G,OAAO58mB,QAAQ0D,MAAMwvb,cAAgB,IAErDl0b,KAAKwjgB,MAAQhV,EA+RjB,OA7RAlwf,OAAOuJ,eAAeuuf,EAAkBh7f,UAAW,cAI/CsM,IAAK,WACD,OAAIjK,EAAkBuC,KAAKs4iB,cAChBt4iB,KAAKs4iB,aAAe,IAAIlzC,GAE5BplgB,KAAKs4iB,cAEhB3wiB,YAAY,EACZC,cAAc,IAKlBwuf,EAAkBh7f,UAAU2mC,cAAgB,WACxC,MAAO,qBAKXq0d,EAAkBh7f,UAAUu1f,sBAAwB,SAAUomB,GAC3C/2gB,KAAKwjgB,MACpBxjgB,KAAKmH,OAAShG,EAAc,OACxBmC,GAAItD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,0BAA2B3gJ,UAAW,+BAE7ErD,KAAKwjgB,MAAMA,MAAMxigB,QAAQW,YAAY3B,KAAKmH,QAC1C,IAAIswM,EAAWt2M,EAAc,OAASoC,OAAQ,mDAC1CukoB,EAAgB3moB,EAAc,SAC9BkC,UAAW,8BAA+BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEnEwkoB,EAAc9loB,UAAY+0gB,EAAW98b,YAAY,gBACjDw9H,EAAS91M,YAAYmmoB,GACrB,IAAI1ikB,EAAQjkE,EAAc,SACtBoC,OAAQ,oCAAqCF,UAAW,yBAExD0vW,EAAK5xW,EAAc,MACnB8tS,EAAK9tS,EAAc,MAAQkC,UAAW,2BACtColoB,EAAsBtnoB,EAAc,SACpCsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,oBAExD2rS,EAAGttS,YAAY8moB,GACf11R,EAAGpxW,YAAYstS,GACf7pO,EAAMzjE,YAAYoxW,GAClBt7J,EAAS91M,YAAYyjE,GACrBgxb,EAAkB2xI,4BAA4B/noB,KAAMy3M,EAAUs/T,GAC9D,IAAIoxH,EAAS3noB,SAASW,cAAc,OACpCnB,KAAKmH,OAAOxF,YAAYwmoB,GACxBnooB,KAAKyooB,oBAAsB,IAAInjhB,IAC3BjyG,MAAO0jgB,EAAW98b,YAAY,2BAC9Bx5D,OAAQzgB,KAAKwooB,oBAEjBxooB,KAAKyooB,oBAAoB53lB,SAAS43lB,GAClCzooB,KAAKyooB,oBAAoBhsoB,iBAAiB,SAAUuD,KAAKwooB,oBAK7DpyI,EAAkBh7f,UAAUo8H,KAAO,WAC/B,IAAIkxgB,EAAgB,IAAItqhB,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eAChE68L,EAAcnqhB,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACzCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QACvBhO,KAAKmH,QACNnH,KAAK2wf,sBAAsB+3I,GAE/B1ooB,KAAKoooB,wBACLpooB,KAAKwjgB,MAAMo6G,OAAO9yhB,OAAS49iB,EAAczujB,YAAY,gBACrDj6E,KAAKwjgB,MAAMo6G,OAAO1pmB,UAAakC,EAAG,SAAUC,EAAG,OAC/CrW,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAOjtkB,gBAAaz1C,EAC/B8E,KAAKwjgB,MAAMo6G,OAAOl8mB,UAAOxG,EACzB8E,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAK6noB,aAC/B7noB,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAKunoB,yBACZvtgB,aAAe19F,QAASosmB,EAAczujB,YAAY,MAAOhnE,SAAU,kCAAmCwxG,WAAW,KAGjHwV,MAAOj6H,KAAK0noB,uBACZ1tgB,aAAe19F,QAASosmB,EAAczujB,YAAY,UAAWhnE,SAAU,uCAE/EjT,KAAKwjgB,MAAMo6G,OAAOpmf,QAKtB4+X,EAAkBh7f,UAAUgtoB,sBAAwB,WAChD,IAAI3/H,EAAazogB,KAAKwjgB,MAAMvtb,UAAUwyb,WAGtC,GAFAzogB,KAAK2ooB,YAAclroB,EAAkBgrgB,EAAWvsP,YAAcusP,EAAWtsP,WAClEssP,EAAWrsP,aAAeqsP,EAAWpsP,cACxCr8Q,KAAK2ooB,YAAa,CAClB,IAAI3kI,EAAchkgB,KAAKwjgB,MAAMvtb,UAAU+tb,YACvChkgB,KAAK4ooB,mBAAmB5kI,GAAa,GAAO,QAG5ChkgB,KAAK4ooB,mBAAmBngI,GAAY,GAAM,IAGlDrS,EAAkBh7f,UAAUwtoB,mBAAqB,SAAUrqmB,EAAQsqmB,EAAeC,GAC9E9ooB,KAAKunnB,cAAcxqnB,MAAQwhC,EAAO29O,WAClCl8Q,KAAKynnB,eAAe1qnB,MAAQwhC,EAAO69O,YACnCp8Q,KAAKsnnB,aAAavqnB,MAAQwhC,EAAO49O,UACjCn8Q,KAAKwnnB,gBAAgBzqnB,MAAQwhC,EAAO89O,aACpCr8Q,KAAKunnB,cAAcnimB,QAAUyjnB,EAC7B7ooB,KAAKynnB,eAAerimB,QAAUyjnB,EAC9B7ooB,KAAKsnnB,aAAalimB,QAAUyjnB,EAC5B7ooB,KAAKwnnB,gBAAgBpimB,QAAUyjnB,EAC/B7ooB,KAAKyooB,oBAAoBj2nB,QAAUs2nB,GAKvC1yI,EAAkBh7f,UAAUggoB,oBAAsB,SAAU3yH,GACxDzogB,KAAKwjgB,MAAMA,MAAMu0B,cAAcC,mBAAmBh4hB,KAAKwjgB,MAAMvtb,UAAW,wBACxEj2E,KAAKwjgB,MAAMA,MAAM1U,aAAaliD,YAAY,eAE1C,IAAIm9G,EAAa/pjB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eAAeJ,WACrE2hD,EAAaA,EAAWhjD,cAAc/mgB,KAAKwjgB,OAC3CxjgB,KAAK++kB,sBAAsB/+kB,KAAKwjgB,MAAMvtb,UAAU14E,MAAM05f,UAAUuR,eAAeH,SAAStB,cAAc/mgB,KAAKwjgB,OAAQxjgB,KAAKwjgB,MAAMvtb,UAAU14E,MAAOyC,KAAKwjgB,MAAMvtb,UAAUh3D,IAAKwpf,GACzKzogB,KAAKwjgB,MAAMA,MAAM1U,aAAayrE,SAASv6jB,KAAKwjgB,MAAMvtb,WAAW,GACxDx4E,EAAkBuC,KAAKwjgB,MAAMA,MAAMu0B,cAAcq7B,qBAClDpzjB,KAAKwjgB,MAAMA,MAAMu0B,cAAcQ,wBAMvCniC,EAAkBh7f,UAAU2jlB,sBAAwB,SAAUr5gB,EAAKnoE,EAAO0hB,EAAKwpf,GAE3E,GADAzogB,KAAK+ooB,yBAAyBrjkB,EAAK+ic,GAC/Bxpf,EAAIg4e,UAAUuR,eAAeH,WAAa3ic,EAA9C,CAGA,IAAIgigB,EAAShigB,EAAI6qc,WACZ9ygB,EAAkBiqkB,IACnB1nkB,KAAK++kB,sBAAsBrX,EAAQnqkB,EAAO0hB,EAAKwpf,KAGvDrS,EAAkBh7f,UAAU2toB,yBAA2B,SAAUrjkB,EAAK+ic,GAClE,IAAKhrgB,EAAkBuC,KAAKwjgB,MAAMA,MAAMu0B,cAAcmR,wBAAyB,CAC3E,IAAI08C,EAAgBlghB,EAAI2xb,aAAa,GAAGoR,WAExCA,EAAazogB,KAAKwjgB,MAAMA,MAAMu0B,cAAcmR,uBAAuBi9C,uBAAuBP,EAAen9E,EAAY/ic,EAAI0ic,YAExH3qgB,EAAkBgrgB,IACnBzogB,KAAKgpoB,yBAAyBtjkB,EAAK+ic,IAM3CrS,EAAkBh7f,UAAU4toB,yBAA2B,SAAUtjkB,EAAK+ic,GAClE,IAAIwgI,EAAWvjkB,EAAI2xb,aACnBr3f,KAAKkpoB,aAAaD,EAAUxgI,IAKhCrS,EAAkBh7f,UAAU8toB,aAAe,SAAUtikB,EAAO6hc,GACxD,IAAK,IAAIvsgB,EAAI,EAAGA,EAAI0qE,EAAMpqE,OAAQN,IAC9B8D,KAAKmpoB,oBAAoBvikB,EAAM1qE,GAAGusgB,WAAYA,GAElDzogB,KAAKwjgB,MAAMA,MAAM5hB,4BAA4B27I,mBAAmB32jB,EAAM,GAAGwhc,aAK7EhS,EAAkBh7f,UAAU+toB,oBAAsB,SAAUhkG,EAAc18B,GACtE08B,EAAajpR,WAAausP,EAAWvsP,WACrCipR,EAAahpR,UAAYssP,EAAWtsP,UACpCgpR,EAAa/oR,YAAcqsP,EAAWrsP,YACtC+oR,EAAa9oR,aAAeosP,EAAWpsP,cAK3C+5O,EAAkBh7f,UAAUqsoB,kBAAoB,SAAUh/H,GACjDzogB,KAAKyooB,oBAAoBj2nB,UAC1Bi2f,EAAWvsP,WAAal8Q,KAAKunnB,cAAcxqnB,MAC3C0rgB,EAAWtsP,UAAYn8Q,KAAKsnnB,aAAavqnB,MACzC0rgB,EAAWpsP,aAAer8Q,KAAKwnnB,gBAAgBzqnB,MAC/C0rgB,EAAWrsP,YAAcp8Q,KAAKynnB,eAAe1qnB,QAMrDq5f,EAAkBh7f,UAAUiX,QAAU,WAClC,IAAK5U,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAI6F,EAAI,EAAGA,EAAIhN,KAAKmH,OAAOmK,WAAW9U,OAAQwQ,IAC/ChN,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOmK,WAAWtE,IAC/CA,IAEJhN,KAAKmH,YAASjM,EAElB8E,KAAK49mB,YAAS1inB,EACd8E,KAAKmH,YAASjM,EACd8E,KAAKwjgB,WAAQtogB,EACb8E,KAAKyooB,yBAAsBvtoB,GAK/Bk7f,EAAkB2xI,4BAA8B,SAAUnqB,EAAQ18mB,EAAK8M,GACnE,IAAKvQ,EAAkBmgnB,GAAS,CAC5B,IAAIx4iB,EAAQjkE,EAAc,SAAWkC,UAAW,yBAC5CignB,EAAMninB,EAAc,MAAQoC,OAAQ,8BACpCggnB,EAAMpinB,EAAc,MACpBsonB,EAAWtonB,EAAc,SACzBa,UAAWgM,EAAOisE,YAAY,OAAQ52E,UAAW,6BACjDC,GAAIs6mB,EAAOz2mB,OAAO7D,GAAK,cAEvBomnB,EAAavonB,EAAc,SAC3BsC,OAASiD,KAAQ,QAAUnD,OAAQ,aAAcD,GAAIs6mB,EAAOz2mB,OAAO7D,GAAK,SAE5EignB,EAAI5hnB,YAAY8nnB,GAChBlG,EAAI5hnB,YAAY+nnB,GAChB,IAAIjG,EAAMtinB,EAAc,MAAQkC,UAAW,2BACvC+loB,EAAYjooB,EAAc,SAC1Ba,UAAWgM,EAAOisE,YAAY,QAAS52E,UAAW,6BAClDC,GAAIs6mB,EAAOz2mB,OAAO7D,GAAK,eAEvBwmnB,EAAc3onB,EAAc,SAC5BsC,OAASiD,KAAQ,QACjBnD,OAAQ,aAAcD,GAAIs6mB,EAAOz2mB,OAAO7D,GAAK,UAEjDmgnB,EAAI9hnB,YAAYynoB,GAChB3lB,EAAI9hnB,YAAYmonB,GAChBxG,EAAI3hnB,YAAY4hnB,GAChBD,EAAI3hnB,YAAY8hnB,GAChB,IAAII,EAAM1inB,EAAc,MAAQoC,OAAQ,8BACpCugnB,EAAM3inB,EAAc,MAAQoC,OAAQ,eACpCy9nB,EAAc7/nB,EAAc,SAC5Ba,UAAWgM,EAAOisE,YAAY,UAC9B52E,UAAW,6BAA8BC,GAAIs6mB,EAAOz2mB,OAAO7D,GAAK,iBAEhEsmnB,EAAgBzonB,EAAc,SAC9BsC,OAASiD,KAAQ,QACjBnD,OAAQ,aAAcD,GAAIs6mB,EAAOz2mB,OAAO7D,GAAK,YAEjDwgnB,EAAIninB,YAAYq/nB,GAChBld,EAAIninB,YAAYionB,GAChB,IAAI5F,EAAM7inB,EAAc,MAAQoC,OAAQ,eACpCwmnB,EAAa5onB,EAAc,SAC3Ba,UAAWgM,EAAOisE,YAAY,SAAU32E,GAAIs6mB,EAAOz2mB,OAAO7D,GAAK,cAC/DD,UAAW,+BAEX2mnB,EAAe7onB,EAAc,SAC7BsC,OAASiD,KAAQ,QACjBnD,OAAQ,aAAcD,GAAIs6mB,EAAOz2mB,OAAO7D,GAAK,WAEjD0gnB,EAAIrinB,YAAYoonB,GAChB/F,EAAIrinB,YAAYqonB,GAChBnG,EAAIlinB,YAAYminB,GAChBD,EAAIlinB,YAAYqinB,GAChB5+iB,EAAMzjE,YAAY2hnB,GAClBl+iB,EAAMzjE,YAAYkinB,GAClB3inB,EAAIS,YAAYyjE,GAChBw4iB,EAAOz2mB,OAAOxF,YAAYT,GAC1B08mB,EAAO0J,aAAe,IAAI99e,IACtBzsI,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IAAKk1H,SAAU,EACnDj5B,mBAAmB,IAEvB2rgB,EAAO0J,aAAaz2kB,SAAS64kB,GAC7B9L,EAAO2J,cAAgB,IAAI/9e,IACvBzsI,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IACpCk1H,SAAU,EAAGj5B,mBAAmB,IAEpC2rgB,EAAO2J,cAAc12kB,SAASi5kB,GAC9BlM,EAAO4J,gBAAkB,IAAIh+e,IACzBzsI,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IAAKk1H,SAAU,EACnDj5B,mBAAmB,IAEvB2rgB,EAAO4J,gBAAgB32kB,SAAS+4kB,GAChChM,EAAO6J,eAAiB,IAAIj+e,IACxBzsI,MAAO,EAAGqjB,IAAK,EAAG9T,IAAK,KAAM0J,MAAO,IACpCk1H,SAAU,EAAGj5B,mBAAmB,IAEpC2rgB,EAAO6J,eAAe52kB,SAASm5kB,KAGhC5zH,KCpVPC,GAA8B,WAI9B,SAASA,EAAa7H,GAClB,IAAIzuf,EAAQC,KACZA,KAAKiynB,iBAAmB,WAIpB,OAHiBlynB,EAAMyjgB,MAAMA,MAAMhV,OAAOjrf,OAAO00f,cAAc,aAEpCz9e,QADF,SAAU,YAAa,YAAa,YAAa,YAAa,YAAa,cAC/C0vB,OAAO,SAAUs8H,EAAGtqK,EAAG+zB,GAAK,OAAOA,EAAE1xB,QAAQioK,KAAOtqK,KAG7G8D,KAAKqpoB,aAAe,WAChBtpoB,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAMyjgB,MAAMA,MAAMzS,kBAAkBv5X,KAAKz3H,EAAMkggB,UAAWlggB,EAAMg3gB,WAAW98b,YAAY,kBAG3Fj6E,KAAKy/mB,cAAgB,SAAUx/mB,GAC3BF,EAAMkggB,UAAYhggB,EAAK+uB,MAE3BhvB,KAAKspoB,aAAe,WAChBvpoB,EAAMyjgB,MAAMo6G,OAAOj2hB,OACnB5nF,EAAMyjgB,MAAMA,MAAMzS,kBAAkBv5X,QAExCx3H,KAAKwjgB,MAAQhV,EAkFjB,OA7EA6H,EAAaj7f,UAAU2mC,cAAgB,WACnC,MAAO,gBAKXs0d,EAAaj7f,UAAUmuoB,iBAAmB,SAAUxyH,EAAYxzgB,GAC5D,IACID,EAAKtD,KAAKwjgB,MAAMA,MAAMx/W,YAAc,iBACxChkJ,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,gBACxD,IACIu8mB,EAAYz+mB,EAAc,OAASa,UADrB+0gB,EAAW98b,YAAY,UACsB52E,UAAW,uBAC1ErD,KAAKmH,OAAOxF,YAAYi+mB,GACxB,IAAIC,EAAY1+mB,EAAc,OAASkC,UAAW,oBAClDrD,KAAKmH,OAAOxF,YAAYk+mB,GACxB,IAAItlI,EAAYp5e,EAAc,OAASkC,UAAW,kBAClDw8mB,EAAUl+mB,YAAY44e,GACtB,IAAIwlI,EAAc5+mB,EAAc,OAASkC,UAAW,uBAAwBC,GAAI,oBAChFi3e,EAAU54e,YAAYo+mB,GACtB//mB,KAAKggnB,iBAAmB,IAAIlla,IACxBzyI,WAAY9kE,EACZ0P,SAAU,sBAEdjT,KAAKggnB,iBAAiBnvkB,SAASkvkB,GAC/B//mB,KAAKggnB,iBAAiBvjnB,iBAAiB,SAAUuD,KAAKy/mB,eACtD,IAAIQ,EAAY9+mB,EAAc,OAASkC,UAAW,oBAClDw8mB,EAAUl+mB,YAAYs+mB,GACtB,IAAIupB,EAAerooB,EAAc,OAASkC,UAAW,uBACrD48mB,EAAUt+mB,YAAY6noB,GACtB,IAAIC,EAAmBtooB,EAAc,UAAYa,UAAW+0gB,EAAW98b,YAAY,OAAQ32E,GAAI,QAC/FkmoB,EAAa7noB,YAAY8noB,GACT,IAAIjlhB,IAASvxG,SAAU,oBAC7B49B,SAAS44lB,GACnBA,EAAiBhtoB,iBAAiB,QAASuD,KAAKspoB,cAChD,IAAII,EAAkBvooB,EAAc,OAASkC,UAAW,uBACxD48mB,EAAUt+mB,YAAY+noB,GACtB,IAAIC,EAAsBxooB,EAAc,UAAYa,UAAW+0gB,EAAW98b,YAAY,UAAW32E,GAAI,WACrGomoB,EAAgB/noB,YAAYgooB,GACZ,IAAInlhB,IAASvxG,SAAU,oBAC7B49B,SAAS84lB,GACnBA,EAAoBltoB,iBAAiB,QAASuD,KAAKqpoB,eAKvDhzI,EAAaj7f,UAAUo8H,KAAO,WAC1B,IAAIj0H,EAASvD,KAAKiynB,mBACdl7G,EAAa,IAAI34Z,GAAK,iBAAkBp+G,KAAKwjgB,MAAMA,MAAM33D,eAC7DkrE,EAAWx4Z,UAAUv+G,KAAKwjgB,MAAMA,MAAMx1f,QACtCL,GAAW3N,KAAKwjgB,MAAMA,MAAMx1f,QAC5BhO,KAAK+2gB,WAAaA,EAClB/2gB,KAAKupoB,iBAAiBxyH,EAAYxzgB,GAClCvD,KAAKwjgB,MAAMo6G,OAAOthlB,QAAUt8B,KAAKmH,OACjCnH,KAAKwjgB,MAAMo6G,OAAOjtkB,WAAa3wC,KAAKwjgB,MAAMj0Y,YAC1CvvH,KAAKwjgB,MAAMo6G,OAAO37mB,MAAQjC,KAAKwjgB,MAAMj0Y,YACrCvvH,KAAKwjgB,MAAMo6G,OAAO9yhB,OAAS,SAC3B9qF,KAAKwjgB,MAAMo6G,OAAO7nmB,OAAS,OAC3B/V,KAAKwjgB,MAAMo6G,OAAO5nmB,MAAQ,OAC1BhW,KAAKwjgB,MAAMo6G,OAAO7jf,UACVE,MAAOj6H,KAAK4poB,YAAYvuoB,KAAK2E,MAC7Bg6H,aAAe19F,QAASy6e,EAAW98b,YAAY,UAAWhnE,SAAU,wBAAyBwxG,WAAW,KAEhHzkH,KAAKwjgB,MAAMo6G,OAAOp2jB,WAClBxnD,KAAKwjgB,MAAMo6G,OAAOpmf,QAEtB6+X,EAAaj7f,UAAUwuoB,YAAc,WACjC5poB,KAAKwjgB,MAAMo6G,OAAOj2hB,QAKtB0ua,EAAaj7f,UAAUiX,QAAU,WACzBrS,KAAKggnB,mBACLhgnB,KAAKggnB,iBAAiB3tmB,UACtBrS,KAAKggnB,sBAAmB9knB,IAGzBm7f,KC/GXwzI,GAAqBp3hB,OAAQq3hB,GAAYC,GAAiBC,GAAiBC,GAAiBxvO,GAAgByvO,GAAaC,GAAaC,GAAoBC,GAAkBC,GAAkBC,GAAmBC,GAAsBC,GAAkBC,GAAqBC,GAA4BC,GAAsBC,GAAsBC,GAAiBC,GAAkBC,GAAmBC,GAAgCC,GAAiBC,GAA4BC,GAA8BC,GAAyBC,83DCAhhBC,GAAkB94hB,OAAQ+4hB,Qzc0StBrmkB,G0cvSOsmkB,6F5c6BX,SAAsCnvmB,GAElC,IAAK,IADDquF,EAAiBruF,EAAQ96B,iBAAiB,gBACrCtF,EAAIyuH,EAAenuH,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACjD,IAAI29G,EAAW8Q,EAAezuH,GAAGuE,WAC7BuuB,EAAOxuB,SAAS85D,eAAeqwD,EAAezuH,GAAG+f,aACrD49F,EAASx8E,aAAarO,EAAM27F,EAAezuH,uK6clC/CwvoB,GAA2B,WAmB3B,OAlBA,WACI1roB,KAAK2roB,SAAW,EAChB3roB,KAAK4roB,UAAY,OACjB5roB,KAAKiqP,SAAW,UAChBjqP,KAAKovB,SAAW,GAChBpvB,KAAKy+f,UAAY,UACjBz+f,KAAKmvD,QAAS,EACdnvD,KAAKivD,MAAO,EACZjvD,KAAKwtS,WAAY,EACjBxtS,KAAK6roB,UAAW,EAChB7roB,KAAK6rD,OAAS,UACd7rD,KAAK4rD,OAAS,SACd5rD,KAAK8roB,OAAS,EACd9roB,KAAKw5gB,aAAe,UACpBx5gB,KAAK0G,KAAO,WACZ1G,KAAK6tT,QAAU,IAAI+1L,GACnB5jf,KAAK+roB,eAAgB,MASzBroa,GAAsB,WAStB,OARA,WACI1jO,KAAK27lB,GAAK,GACV37lB,KAAKu3B,KAAO,UACZv3B,KAAK+8H,GAAI,EACT/8H,KAAKkwB,GAAI,EACTlwB,KAAK9D,GAAI,EACT8D,KAAKq2B,MAAQ,eASjB21mB,GAAyB,WAGzB,OAFA,gBASAppJ,GAA2B,WAG3B,OAFA,gBASAqpJ,GAA8B,WAG9B,OAFA,gBASAC,GAA4B,WAK5B,OAJA,WACIlsoB,KAAKu3B,KAAO,SACZv3B,KAAKmsoB,KAAO,MAShBC,GAAwB,WAKxB,OAJA,SAAgB9ooB,EAAImmB,GAChBzpB,KAAK2roB,SAAWrooB,EAChBtD,KAAKqsoB,WAAa5inB,MAStBk6M,GAAwB,WAKxB,OAJA,SAAgB2oa,EAAOC,GACnBvsoB,KAAKmoO,UAAYmka,EACjBtsoB,KAAKq2B,MAAQk2mB,MASjB3oJ,GAAyB,WAQzB,OAPA,WACI5jf,KAAKwM,KAAO,IAAIm3N,GAAO,OAAQ,WAC/B3jO,KAAKyM,MAAQ,IAAIk3N,GAAO,OAAQ,WAChC3jO,KAAK0M,IAAM,IAAIi3N,GAAO,OAAQ,WAC9B3jO,KAAK2M,OAAS,IAAIg3N,GAAO,OAAQ,WACjC3jO,KAAKwzM,IAAM,IAAImwB,GAAO,OAAQ,eCtHlClzI,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAiBxCyxZ,GAAsB,WAGtB,OAFA,gBASAiqJ,GAAuB,SAAUl7iB,GAEjC,SAASk7iB,IACL,IAAIzsoB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAgBhE,OAfAD,EAAMqE,IAAM,SAAU2jE,GAGlB,IAAK,IAFD0kkB,GAAW,EACXvtnB,EAAQ,EACH9gB,EAAK,EAAGyE,EAAK9C,EAAO3B,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvCyE,EAAGzE,GACL0T,QAAUi2D,EAAKj2D,QACjB/R,EAAMmf,GAAS6oD,EACf0kkB,GAAW,GAEfvtnB,IAECutnB,GACD1soB,EAAMyE,KAAKujE,IAGZhoE,EAEX,OApBA0wF,GAAU+7iB,EAAOl7iB,GAoBVk7iB,GACThuoB,OC7CE+kE,GAAwB,WAGxB,OAFA,gBCLAktB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAiBxC82I,GAAqB,WAGrB,OAFA,gBASA8ka,GAAsB,SAAUp7iB,GAEhC,SAASo7iB,IACL,IAAI3soB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAgBhE,OAfAD,EAAMqE,IAAM,SAAUshE,GAGlB,IAAK,IAFD+mkB,GAAW,EACXvtnB,EAAQ,EACH9gB,EAAK,EAAGyE,EAAK9C,EAAO3B,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvCyE,EAAGzE,GACL0T,QAAU4zD,EAAI5zD,QAChB/R,EAAMmf,GAASwmD,EACf+mkB,GAAW,GAEfvtnB,IAECutnB,GACD1soB,EAAMyE,KAAKkhE,IAGZ3lE,EAEX,OApBA0wF,GAAUi8iB,EAAMp7iB,GAoBTo7iB,GACTluoB,OCjDEiyF,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAiBxC67iB,GAA4B,SAAUr7iB,GAEtC,SAASq7iB,IACL,OAAkB,OAAXr7iB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAE/D,OAJAywF,GAAUk8iB,EAAYr7iB,GAIfq7iB,GACTnuoB,OCvBEiyF,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAiBxC87iB,GAA2B,WAK3B,OAJA,WACI5soB,KAAK6soB,mBAAoB,EACzB7soB,KAAK8soB,eAAgB,MASzBC,GAA2B,WAG3B,OAFA,gBASA3gM,GAA0B,WAG1B,OAFA,gBASA4gM,GAA4B,WAG5B,OAFA,gBASAC,GAA2B,WAG3B,OAFA,gBASAC,GAA4B,SAAU57iB,GAEtC,SAAS47iB,IACL,IAAIntoB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAwBhE,OAvBAD,EAAMqE,IAAM,SAAU+ooB,GAGlB,IAAK,IAFDV,GAAW,EACXvtnB,EAAQ,EACH9gB,EAAK,EAAGyE,EAAK9C,EAAO3B,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC/C,IAAIgvoB,EAAQvqoB,EAAGzE,GACf,GAAI8uoB,EAAWG,eAAeD,EAAOD,GAAY,CAC7C,IAAIG,EAAmB,IAAIL,GAC3BK,EAAiBvgoB,EAAIV,KAAK+T,IAAIgtnB,EAAMrgoB,EAAGogoB,EAAUpgoB,GACjDugoB,EAAiBtgoB,EAAIX,KAAK+T,IAAIgtnB,EAAM/2nB,EAAG82nB,EAAUngoB,GACjDsgoB,EAAiBt3nB,MAAQ3J,KAAKC,IAAI8goB,EAAMjoJ,MAAQioJ,EAAMh3nB,EAAG+2nB,EAAUn3nB,MAAQm3nB,EAAUpgoB,GACrFugoB,EAAiBv3nB,OAAS1J,KAAKC,IAAI8goB,EAAMhoJ,OAASgoJ,EAAM/2nB,EAAG82nB,EAAUp3nB,OAASo3nB,EAAUngoB,GACxFsgoB,EAAiBC,IAAOxtoB,EAAMmf,GAAOqunB,IAAIrwoB,MAAM,KAAK,GAAM,IAAOiwoB,EAAUI,IAAIrwoB,MAAM,KAAK,GAC1F6C,EAAMmf,GAASounB,EACfH,EAAYG,EACZb,GAAW,EAEfvtnB,IAKJ,OAHKutnB,GACD1soB,EAAMyE,KAAK2ooB,GAERA,GAEJptoB,EAQX,OAlCA0wF,GAAUy8iB,EAAY57iB,GA4BtB47iB,EAAWG,eAAiB,SAAUj8mB,EAAMiiG,GACxC,OAAQjiG,EAAKrkB,GAAKsmH,EAAQtmH,EAAIsmH,EAAQr9G,OAC9Bq9G,EAAQtmH,GAAKqkB,EAAKrkB,EAAIqkB,EAAKpb,OAC3Bob,EAAKpkB,GAAKqmH,EAAQrmH,EAAIqmH,EAAQt9G,QAC9Bs9G,EAAQrmH,GAAKokB,EAAKpkB,EAAIokB,EAAKrb,QAEhCm3nB,GACT1uoB,OClGEgvoB,GAAgC,WAChC,SAASA,EAAe5/nB,GACpB5N,KAAKqqE,KAAO,IAAIC,GA2CpB,OAtCAkjkB,EAAepyoB,UAAUmrE,kBAAoB,SAAUhoC,GACnD,OAAIA,EAAO73B,KACA1G,KAAKqqE,KAAK2mC,cAAczyE,GAGxBv+B,KAAKqqE,KAAKyD,gBAAgBvvC,IAiBzCivmB,EAAepyoB,UAAUohN,OAAS,SAAUz/M,EAAOwhC,GAC/C,IAAIx/B,EAAShC,EAIb,OAHKU,EAAkB8gC,IAAY9gC,EAAkBV,KACjDgC,EAASw/B,EAAOxhC,IAEbgC,GAQXyuoB,EAAepyoB,UAAUuxjB,YAAc,SAAU5vjB,EAAOwhC,GACpD,OAAOv+B,KAAKw8M,OAAOz/M,EAAOiD,KAAKumE,kBAAkBhoC,KAE9CivmB,KC/CPC,GAA2B,WAE3B,SAASA,EAAUllkB,GAIf,GAHAvoE,KAAK0toB,OAAS,GACd1toB,KAAKk2Z,UAAY,IAAIs3O,GACrBxtoB,KAAKkwP,qBAAwB5gK,UAAU6gK,WACnB,OAAhB5nL,EAAKhlE,aAAmCrI,IAAhBqtE,EAAKhlE,OAAsB,CACnDvD,KAAK2toB,aAAe,IAAIC,IACxB,IAAK,IAAI1xoB,EAAI,EAAGA,EAAIqsE,EAAKhlE,OAAO/G,OAAQN,SACRhB,IAAxBqtE,EAAKhlE,OAAOrH,GAAGq7B,WAAsDr8B,IAAhCqtE,EAAKhlE,OAAOrH,GAAGs9gB,cACpDx5gB,KAAK2toB,aAAatmoB,IAAIkhE,EAAKhlE,OAAOrH,GAAGq7B,KAAMgxC,EAAKhlE,OAAOrH,GAAGs9gB,cAK9C,OAApBjxc,EAAKslkB,iBAA2C3yoB,IAApBqtE,EAAKslkB,YACjC7toB,KAAK8toB,eAAevlkB,EAAKslkB,WAAW,IAyH5C,OArHAJ,EAAUryoB,UAAU0yoB,eAAiB,SAAUvlkB,GAEzB,OAAdA,EAAKqkK,WAA+B1xO,IAAdqtE,EAAKqkK,MAC3B5sO,KAAK+toB,UAAUxlkB,EAAKqkK,OAI5B6ga,EAAUryoB,UAAU2yoB,UAAY,SAAUnha,GAEtC,IAAK,IADD1tN,EAAQ,EACH9gB,EAAK,EAAG4voB,EAASpha,EAAMxuO,EAAK4voB,EAAOxxoB,OAAQ4B,IAAM,CACtD,IAAIsnE,EAAMsokB,EAAO5voB,GAEjB,GAAkB,OAAdsnE,EAAI5zD,YAAgC5W,IAAdwqE,EAAI5zD,MAQ1B,MAAMlR,MAAM,yBAPZ,KAAOse,EAAQwmD,EAAI5zD,OACf9R,KAAK0toB,QAAU,KACfxunB,IAEJlf,KAAKiuoB,SAASvokB,KAQ1B+nkB,EAAUryoB,UAAU6yoB,SAAW,SAAUvokB,GACrC,GAAkB,OAAdA,EAAIkB,YAAgC1rE,IAAdwqE,EAAIkB,MAE1B,IAAK,IADD1nD,EAAQ,EACH9gB,EAAK,EAAGyE,EAAK6iE,EAAIkB,MAAOxoE,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACnD,IAAI2pE,EAAOllE,EAAGzE,GAEd,GAAmB,OAAf2pE,EAAKj2D,YAAiC5W,IAAf6sE,EAAKj2D,MAQ5B,MAAMlR,MAAM,0BAPZ,KAAOse,EAAQ6oD,EAAKj2D,OAChB9R,KAAK0toB,QAAU,IACfxunB,IAEJlf,KAAKkuoB,UAAUnmkB,KAS/B0lkB,EAAUryoB,UAAU8yoB,UAAY,SAAUnmkB,GACtC,IAAIomkB,EAAMnuoB,KAAK0toB,YACIxyoB,IAAf6sE,EAAKhrE,QACDgrE,EAAKhrE,iBAAiBsjB,UACHnlB,IAAf6sE,EAAKrjE,YAAmDxJ,IAA5B6sE,EAAKrjE,MAAM80gB,aAEvC20H,GAAOnuoB,KAAKouoB,eAAepuoB,KAAKk2Z,UAAUy2J,YAAY5kf,EAAKhrE,OAAS2J,KAAM,WAAY8/D,SAAUuB,EAAKrjE,MAAM80gB,qBAEvFt+gB,IAAf6sE,EAAKrjE,YAA2CxJ,IAApB6sE,EAAKrjE,MAAM6yB,MAAsBv3B,KAAK2toB,aAAaU,IAAItmkB,EAAKrjE,MAAM6yB,MAEnG42mB,GAAOnuoB,KAAKouoB,eAAepuoB,KAAKk2Z,UAAUy2J,YAAY5kf,EAAKhrE,OAAS2J,KAAM,WAAY8/D,SAAUxmE,KAAK2toB,aAAajmoB,IAAIqgE,EAAKrjE,MAAM6yB,SAGjI42mB,GAAOpmkB,EAAKhrE,MAGa,kBAAhBgrE,EAAU,MACvBomkB,GAAOpmkB,EAAKhrE,MAAQ,OAAS,QAEA,iBAAhBgrE,EAAU,WACJ7sE,IAAf6sE,EAAKrjE,YAAmDxJ,IAA5B6sE,EAAKrjE,MAAM80gB,aAEvC20H,GAAOnuoB,KAAKouoB,eAAepuoB,KAAKk2Z,UAAUy2J,YAAY5kf,EAAKhrE,OAASwhC,OAAQwpC,EAAKrjE,MAAM80gB,qBAEnEt+gB,IAAf6sE,EAAKrjE,YAA2CxJ,IAApB6sE,EAAKrjE,MAAM6yB,MAAsBv3B,KAAK2toB,aAAaU,IAAItmkB,EAAKrjE,MAAM6yB,MAEnG42mB,GAAOnuoB,KAAKouoB,eAAepuoB,KAAKk2Z,UAAUy2J,YAAY5kf,EAAKhrE,OAASwhC,OAAQv+B,KAAK2toB,aAAajmoB,IAAIqgE,EAAKrjE,MAAM6yB,SAG7G42mB,GAAOpmkB,EAAKhrE,MAIhBoxoB,GAAOnuoB,KAAKouoB,eAAermkB,EAAKhrE,QAGxCiD,KAAK0toB,OAASS,GAElBV,EAAUryoB,UAAUgzoB,eAAiB,SAAUrxoB,GAC3C,OAA4B,IAAxBA,EAAMwB,QAAQ,KACPxB,EAAQ,IAAOA,EAAQ,IAGvBA,GAQf0woB,EAAUryoB,UAAUy4F,KAAO,SAAUg8J,GAEjC,GADA7vP,KAAK8vP,OAAS,IAAIG,MAAM,SAAWjwP,KAAK0toB,SAAWhnoB,KAAM,2BACrD1G,KAAKkwP,mBACL5gK,UAAU6gK,WAAWnwP,KAAK8vP,OAAQD,OAEjC,CACD,IAAIW,EAAY50P,OAAOwjJ,IAAIqxG,gBAAgBzwP,KAAK8vP,QAC5Cw+Y,EAAU9toB,SAAS4C,gBAAgB,+BAAgC,KACvEkroB,EAAQ/9Y,SAAWV,EACnBy+Y,EAAQ5ymB,KAAO80N,EACf,IAAIh9O,EAAUhT,SAASiT,YAAY,cACnCD,EAAQE,UAAU,SAAS,GAAM,GACjC46nB,EAAQ36nB,cAAcH,GACtBrT,WAAW,WACPvE,OAAOwjJ,IAAIsxG,gBAAgBF,OAIvCi9Y,EAAUryoB,UAAUwmQ,WAAa,WAC7B,OAAO,IAAI3R,MAAM,SAAWjwP,KAAK0toB,SAAWhnoB,KAAM,4BAE/C+moB,KC1IPc,GAA4B,WAC5B,SAASA,IAELvuoB,KAAKiiG,SAUT,OAPAssiB,EAAWnzoB,UAAUgK,OAAS,SAAU86C,GACpClgD,KAAKiiG,MAAMz9F,KAAK07C,GAChBlgD,KAAK00J,UAAOx5J,GAEhBqzoB,EAAWnzoB,UAAUozoB,QAAU,WAC3B,OAAO,IAAIv+Y,KAAKjwP,KAAKiiG,OAASv7F,KAAM,gBAEjC6noB,KCJPE,GAA0B,WAE1B,SAASA,EAASlmkB,EAAMmmkB,EAAUx/iB,EAASy/iB,GA4BvC,GA3BA3uoB,KAAK4uoB,kBAAoB,EACzB5uoB,KAAK6uoB,kBACD,KACA,IACA,GACA,GAAK,KACL,GAAK,KACL,EACA,GAAK,GACL,GAAK,GAAO,OAGhB7uoB,KAAK8uoB,gBAAmBrwI,UAAW,UAAWjxN,WAAW,GAErDxtS,KAAKkvF,aADOh0F,IAAZg0F,EACeA,EAGA,QAGflvF,KAAK+8F,cADc7hG,IAAnByzoB,EACgBA,EAGA,MAEpB3uoB,KAAKqqE,KAAO,IAAIC,GAAqBtqE,KAAKkvF,SAC1ClvF,KAAK+uoB,UAAYL,EACA,SAAbA,EAAqB,CAiBrB,GAhBA1uoB,KAAK80lB,SAAW,IAAIvzV,GACpBvhQ,KAAKgvoB,gBACLhvoB,KAAKivoB,UACLjvoB,KAAKkvoB,YACLlvoB,KAAKu2lB,WACLv2lB,KAAKmvoB,YAAc,IAAIvB,IACvB5toB,KAAKovoB,WAAa,IAAIxB,IACtB5toB,KAAKqvoB,QAAU,IAAIzB,IACnB5toB,KAAKsvoB,OAAS,IAAI1B,IAClB5toB,KAAKu2lB,QAAQ/xlB,KAAK,IAAIknoB,IACtB1roB,KAAKivoB,OAAOzqoB,KAAK,IAAIk/N,IAErB1jO,KAAKovoB,WAAW/noB,IAAI,SAAU,IAAI6koB,IAElClsoB,KAAKuvoB,YACLvvoB,KAAKwvoB,iBACe,OAAhBjnkB,EAAKhlE,aAAmCrI,IAAhBqtE,EAAKhlE,OAAsB,CAEnDvD,KAAK2toB,aAAe,IAAIC,IACxB,IAAK,IAAI1xoB,EAAI,EAAGA,EAAIqsE,EAAKhlE,OAAO/G,OAAQN,IACpC,QAA4BhB,IAAxBqtE,EAAKhlE,OAAOrH,GAAGq7B,KAAoB,CACnC,GAAKv3B,KAAKovoB,WAAWf,IAAI9lkB,EAAKhlE,OAAOrH,GAAGq7B,MAwBpC,MAAM32B,MAAM,cAAgB2nE,EAAKhlE,OAAOrH,GAAGq7B,KAAO,uBAvBlD,IAAIq4R,EAAY,IAAI87U,GACpB97U,EAAUm8U,eAAgB,EAC1B/roB,KAAKyvoB,gBAAgBlnkB,EAAKhlE,OAAOrH,GAAI0zT,EAAW,QAChD,IAAI8/U,EAAe,IAAIxD,GACvBwD,EAAan4mB,KAAOq4R,EAAUr4R,KAC9Bm4mB,EAAavD,KAAQv8U,EAAU99S,MAAQ,EACvC9R,KAAKovoB,WAAW/noB,IAAIqooB,EAAan4mB,KAAMm4mB,GAEvC,IAAIC,UACgCz0oB,IAAhCqtE,EAAKhlE,OAAOrH,GAAGs9gB,eACfm2H,EAAQpxmB,OAASgqC,EAAKhlE,OAAOrH,GAAGs9gB,mBAERt+gB,IAAxBqtE,EAAKhlE,OAAOrH,GAAGwK,KACfipoB,EAAQjpoB,KAAO6hE,EAAKhlE,OAAOrH,GAAGwK,KAG9BipoB,EAAQjpoB,KAAO,gBAEIxL,IAAnBy0oB,EAAQpxmB,QACRv+B,KAAK2toB,aAAatmoB,IAAIkhE,EAAKhlE,OAAOrH,GAAGq7B,KAAMo4mB,IAU/D,GAAwB,OAApBpnkB,EAAKslkB,iBAA2C3yoB,IAApBqtE,EAAKslkB,WAIjC,MAAMjtoB,MAAM,0BAHZZ,KAAK4voB,iBAAiBrnkB,EAAKslkB,YAMA,OAA3BtlkB,EAAKsnkB,wBAAyD30oB,IAA3BqtE,EAAKsnkB,oBACxC7voB,KAAK6voB,kBAAoB,IAAIC,GAC7B9voB,KAAK+voB,wBAAwBxnkB,EAAKsnkB,kBAAmB7voB,KAAK6voB,yBAI9D7voB,KAAKgwoB,UAAY,IAAIvC,GAAUllkB,GAs4CvC,OAl4CAkmkB,EAASrzoB,UAAU20oB,wBAA0B,SAAUE,EAAuBJ,GAErC,OAAjCI,EAAsBC,aAAoDh1oB,IAAjC+0oB,EAAsBC,SAC/DL,EAAkBK,OAASD,EAAsBC,QAGd,OAAnCD,EAAsBE,eAAwDj1oB,IAAnC+0oB,EAAsBE,WACjEN,EAAkBM,SAAWF,EAAsBE,UAGhB,OAAnCF,EAAsBj3b,eAAwD99M,IAAnC+0oB,EAAsBj3b,WACjE62b,EAAkB72b,SAAWi3b,EAAsBj3b,UAGjB,OAAlCi3b,EAAsBG,cAAsDl1oB,IAAlC+0oB,EAAsBG,UAChEP,EAAkBO,QAAUH,EAAsBG,SAGhB,OAAlCH,EAAsBI,cAAsDn1oB,IAAlC+0oB,EAAsBI,UAChER,EAAkBQ,QAAUJ,EAAsBI,SAGhB,OAAlCJ,EAAsBK,cAAsDp1oB,IAAlC+0oB,EAAsBK,UAChET,EAAkBS,QAAUL,EAAsBK,SAGlB,OAAhCL,EAAsBvtmB,YAAkDxnC,IAAhC+0oB,EAAsBvtmB,QAC9DmtmB,EAAkBntmB,MAAQutmB,EAAsBvtmB,OAGV,OAAtCutmB,EAAsBM,kBAA8Dr1oB,IAAtC+0oB,EAAsBM,cACpEV,EAAkBU,YAAcN,EAAsBM,aAGf,OAAvCN,EAAsBjwjB,mBAAgE9kF,IAAvC+0oB,EAAsBjwjB,eACrE6vjB,EAAkB7vjB,aAAeiwjB,EAAsBjwjB,cAGxB,OAA/BiwjB,EAAsBO,WAAgDt1oB,IAA/B+0oB,EAAsBO,OAC7DX,EAAkBW,KAAOP,EAAsBO,MAGd,OAAjCP,EAAsBvljB,aAAoDxvF,IAAjC+0oB,EAAsBvljB,SAC/DmljB,EAAkBnljB,OAASuljB,EAAsBvljB,SAIzD+jjB,EAASrzoB,UAAUw0oB,iBAAmB,SAAUrnkB,GAC5CvoE,KAAK6toB,WAAa,IAAIlB,GAEtB,IAAK,IADDnwoB,EAAS+rE,EAAK/rE,OACTN,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAIu0oB,EAAYlokB,EAAKrsE,GACjBw0oB,EAAQ,IAAI9D,GAChB5soB,KAAK43gB,WAAa,IAAIs1H,GACtBltoB,KAAK2woB,iBAAmB,IAAI/C,IAC5B5toB,KAAK4woB,eAEkB,OAAnBH,EAAUl5mB,WAAoCr8B,IAAnBu1oB,EAAUl5mB,KACrCm5mB,EAAMn5mB,KAAOk5mB,EAAUl5mB,KAGvBm5mB,EAAMn5mB,KAAO,SAAWr7B,EAAI,GAAGgR,WAEnCwjoB,EAAM5+nB,MAAS5V,EAAI,EAEO,OAAtBu0oB,EAAUptkB,cAA0CnoE,IAAtBu1oB,EAAUptkB,SACxCrjE,KAAK6woB,cAAcJ,EAAUptkB,QAASqtkB,GAGnB,OAAnBD,EAAU7ja,WAAoC1xO,IAAnBu1oB,EAAU7ja,MACrC5sO,KAAK8woB,WAAWL,EAAU7ja,KAAM8ja,GAGJ,OAA5BD,EAAU3D,oBAAsD5xoB,IAA5Bu1oB,EAAU3D,gBAC9C4D,EAAM5D,cAAgB2D,EAAU3D,eAGX,OAArB2D,EAAUM,aAAwC71oB,IAArBu1oB,EAAUM,QACvC/woB,KAAKgxoB,kBAAkBP,EAAUM,OAAQL,GAGhB,OAAzBD,EAAUQ,iBAAgD/1oB,IAAzBu1oB,EAAUQ,YAC3CjxoB,KAAKkxoB,iBAAiBT,EAAUQ,WAAYP,QAEpBx1oB,IAAxBu1oB,EAAUr5C,gBACoCl8lB,IAA1Cu1oB,EAAUr5C,UAAUy1C,oBACpB6D,EAAM7D,kBAAoB4D,EAAUr5C,UAAUy1C,mBAGtD6D,EAAM5+nB,MAAS5V,EAAI,EACnBw0oB,EAAM94H,WAAa53gB,KAAK43gB,WACxB84H,EAAMS,WAAanxoB,KAAK4woB,YACxB5woB,KAAK6toB,WAAWrpoB,KAAKksoB,KAI7BjC,EAASrzoB,UAAUg2oB,aAAe,SAAU1ie,EAAUI,GAElD,IAAI/vK,KAGJ,OAFAiB,KAAKk9jB,gBAAgBxuZ,EAAU3vK,GAC/BiB,KAAKk9jB,gBAAgBpuZ,EAAQ/vK,GACtBA,GAGX0voB,EAASrzoB,UAAU8hkB,gBAAkB,SAAUm0E,EAAYC,GAEvD,IAAK,IADDh0oB,EAAOgB,OAAOhB,KAAK+zoB,GACdv/nB,EAAQ,EAAGA,EAAQxU,EAAKd,OAAQsV,IACjB,SAAhBxU,EAAKwU,KACLw/nB,EAASh0oB,EAAKwU,IAAUu/nB,EAAW/zoB,EAAKwU,MAIpD28nB,EAASrzoB,UAAUm2oB,YAAc,SAAU7rkB,EAAK1D,GAC5C,OAAOhiE,KAAKwxoB,cAAcxvkB,GAAU0D,EAAIx4D,YAE5CuhoB,EAASrzoB,UAAUo2oB,cAAgB,SAAU/rkB,GACzCA,IACA,IAAIgskB,EAAgB,GACpB,EAAG,CACC,IAAIC,EAAgBjskB,EAAM,GAC1BA,EAAMA,EAAM,GAAK,EACjBgskB,EAAgB/nnB,OAAOC,aAAa,GAAK+nnB,GAAiBD,QACrDhskB,GAAO,GAChB,OAAOgskB,GAGXhD,EAASrzoB,UAAU81oB,iBAAmB,SAAU3okB,EAAMmokB,GAClD,IACIiB,EADAC,EAAiB,GAErB,GAAqB,OAAjBrpkB,EAAKspkB,cAAqC32oB,IAAjBqtE,EAAKspkB,QAAuB,CASrDF,EAAe,IARDppkB,EAAKspkB,QAQY,MANZ,OAAftpkB,EAAKupkB,YAAiC52oB,IAAfqtE,EAAKupkB,MACpBvpkB,EAAKupkB,MAGLvpkB,EAAKspkB,SAIrB,IAAIE,EACJ,GAAwB,OAApBxpkB,EAAKypkB,iBAA2C92oB,IAApBqtE,EAAKypkB,WAA0B,CAC3D,IAAIA,EAAazpkB,EAAKypkB,WAClBC,OAAW,EAEXA,EADkB,OAAlB1pkB,EAAK0pkB,eAAuC/2oB,IAAlBqtE,EAAK0pkB,SACpB1pkB,EAAK0pkB,SAGL1pkB,EAAKypkB,WAEpBD,EAAe,IAAM/xoB,KAAKwxoB,cAAcQ,GAAc,KAAOhyoB,KAAKwxoB,cAAcS,QAE/D/2oB,IAAjBy2oB,IACAC,GAAmBlB,EAAMn5mB,KAAO,IAAMo6mB,QAErBz2oB,IAAjB62oB,QAA+C72oB,IAAjBy2oB,EAC9BC,GAAkB,IAAOlB,EAAMn5mB,KAAO,IAAMw6mB,OAEtB72oB,IAAjB62oB,IACLH,GAAmBlB,EAAMn5mB,KAAO,IAAMw6mB,GAEnB,KAAnBH,GACA5xoB,KAAKmvoB,YAAY9noB,IAAIqpoB,EAAM5+nB,MAAQ,EAAG8/nB,IAI9CnD,EAASrzoB,UAAU41oB,kBAAoB,SAAUzokB,EAAMmokB,GACnDA,EAAMwB,YAAc,IAAIlF,GACP,OAAbzkkB,EAAK7C,UAA6BxqE,IAAbqtE,EAAK7C,IAC1BgrkB,EAAMwB,YAAYxskB,IAAM6C,EAAK7C,IAG7BgrkB,EAAMwB,YAAYxskB,IAAM,EAER,OAAhB6C,EAAKvG,aAAmC9mE,IAAhBqtE,EAAKvG,OAC7B0ukB,EAAMwB,YAAYlwkB,OAASuG,EAAKvG,OAGhC0ukB,EAAMwB,YAAYlwkB,OAAS,EAE/B0ukB,EAAMwB,YAAY1iK,SAAWxve,KAAKuxoB,YAAYb,EAAMwB,YAAYxskB,IAAM,EAAGgrkB,EAAMwB,YAAYlwkB,OAAS,IAGxGyskB,EAASrzoB,UAAUy1oB,cAAgB,SAAUtokB,EAAMmokB,GAC/C,IAAIyB,EAAgB5pkB,EAAK/rE,OACzBk0oB,EAAMrtkB,WACN,IAAK,IAAIrB,EAAS,EAAGA,EAASmwkB,EAAenwkB,IAAU,CACnD,IAAIyD,EAAM,IAAIlC,GACd,GAA2B,OAAvBgF,EAAKvG,GAAQlwD,YAAyC5W,IAAvBqtE,EAAKvG,GAAQlwD,MAI5C,MAAMlR,MAAM,4BAHZ6kE,EAAI3zD,MAAQy2D,EAAKvG,GAAQlwD,MAKF,OAAvBy2D,EAAKvG,GAAQhsD,YAAyC9a,IAAvBqtE,EAAKvG,GAAQhsD,QAC5CyvD,EAAIzvD,MAAQuyD,EAAKvG,GAAQhsD,OAE7B06nB,EAAMrtkB,QAAQ7+D,KAAKihE,KAI3BgpkB,EAASrzoB,UAAU01oB,WAAa,SAAUvokB,EAAMmokB,GAC5C,IAAI0B,EAAa7pkB,EAAK/rE,OACtBk0oB,EAAM9ja,KAAO,IAAI8/Z,GAEjB,IAAK,IADD2F,EAAQ,EACHlzmB,EAAI,EAAGA,EAAIizmB,EAAYjzmB,IAAK,CACjC,IAAIumC,EAAM1lE,KAAKsyoB,UAAU/pkB,EAAKppC,GAAIkzmB,GAClCA,EAAQ3skB,EAAI5zD,MACZ4+nB,EAAM9ja,KAAKxoO,IAAIshE,GAEnB1lE,KAAKuyoB,uBAAuB7B,IAEhCjC,EAASrzoB,UAAUm3oB,uBAAyB,SAAU7B,GAClD,IAAI3woB,EAAQC,KACRA,KAAK43gB,WAAWp7gB,OAAS,GACzBwD,KAAK2woB,iBAAiBvxoB,QAAQ,SAAUrC,EAAOM,GAC3C,IAAIqoE,EAAMgrkB,EAAM9ja,KAAK1iM,OAAO,SAAUjsB,GAClC,OAAOA,EAAKnM,QAAU/U,EAAMiQ,IAC7B,GACH,GAAKvP,EAAkBioE,GAkBlB,CACD,IAAIknK,EAAO8ja,EAAM9ja,KAAK1iM,OAAO,SAAUjsB,GACnC,OAAOA,EAAKnM,OAAS/U,EAAMiQ,IAE3BwloB,EAAc,IAAI5qa,GACtB4qa,EAAY1goB,MAAQ/U,EAAMiQ,EAC1BwloB,EAAY5rkB,MAAQ,IAAI4lkB,GACxBgG,EAAY5rkB,MAAMxiE,IAAIrE,EAAM2hmB,WAAW3kmB,EAAOM,IAC1CmlhB,EAAc,EACd51S,EAAKpwO,OAAS,IACdgmhB,EAAckuH,EAAM9ja,KAAKruO,QAAQquO,EAAKA,EAAKpwO,OAAS,IAAM,GAE9Dk0oB,EAAM9ja,KAAKjkN,OAAO65f,EAAa,EAAGgwH,OA9BT,CACzB,IAAIzqkB,EAAOrC,EAAIkB,MAAM18B,OAAO,SAAUjsB,GAClC,OAAOA,EAAKnM,QAAU/U,EAAMgQ,IAC7B,GACH,GAAKtP,EAAkBsqE,GAGlB,CACD,IAAInB,EAAQlB,EAAIkB,MAAM18B,OAAO,SAAUjsB,GACnC,OAAOA,EAAKnM,OAAS/U,EAAMgQ,IAE3By1gB,EAAc,EACd57c,EAAMpqE,OAAS,IACfgmhB,EAAc98c,EAAIkB,MAAMroE,QAAQqoE,EAAMA,EAAMpqE,OAAS,IAAM,GAE/DkpE,EAAIkB,MAAMj+C,OAAO65f,EAAa,EAAGzihB,EAAM2hmB,WAAW3kmB,EAAOM,SAVzD0qE,EAAK0qkB,WAAa11oB,EAAM01oB,eA8B5ChE,EAASrzoB,UAAUsmmB,WAAa,SAAU3kmB,EAAOM,GAC7C,IAAIq1oB,EAAe,IAAInwJ,GAKvB,OAJAmwJ,EAAaC,QAAUt1oB,EACvBq1oB,EAAa5goB,MAAQ/U,EAAMgQ,EAC3B2loB,EAAa9iV,UAAY,IAAI87U,GAC7BgH,EAAaD,WAAa11oB,EAAM01oB,WACzBC,GAGXjE,EAASrzoB,UAAUk3oB,UAAY,SAAU/pkB,EAAM0mK,GAC3C,IAAIvpK,EAAM,IAAIkiK,GAMd,GAJoB,OAAhBr/J,EAAKxyD,aAAmC7a,IAAhBqtE,EAAKxyD,SAC7B2vD,EAAI3vD,OAASwyD,EAAKxyD,QAGH,OAAfwyD,EAAKz2D,YAAiC5W,IAAfqtE,EAAKz2D,MAI5B,MAAMlR,MAAM,yBAMhB,OATI8kE,EAAI5zD,MAAQy2D,EAAKz2D,MAKC,OAAlBy2D,EAAK64Y,eAAuClmd,IAAlBqtE,EAAK64Y,UAC/Bphd,KAAK4yoB,cAAcrqkB,EAAK64Y,SAAU17Y,GAEtC1lE,KAAK6yoB,WAAWtqkB,EAAK3B,MAAOlB,GACrBA,GAGX+okB,EAASrzoB,UAAUw3oB,cAAgB,SAAUrqkB,EAAM7C,GAC/CA,EAAI07Y,SAAW,IAAIhV,QACOlxc,IAAtBqtE,EAAKk1b,eACL/3b,EAAI07Y,SAASq8C,aAAel1b,EAAKk1b,mBAEZvigB,IAArBqtE,EAAKuqkB,cACLptkB,EAAI07Y,SAAS0xL,YAAcvqkB,EAAKuqkB,kBAEd53oB,IAAlBqtE,EAAKi7D,WACL99D,EAAI07Y,SAAS59U,SAAWj7D,EAAKi7D,WAIrCirgB,EAASrzoB,UAAUy3oB,WAAa,SAAUtqkB,EAAM7C,GAC5CA,EAAIkB,MAAQ,IAAI4lkB,GAIhB,IACK,IAJDuG,OAAuB73oB,IAATqtE,EAAqBA,EAAK/rE,OAAS,EACjDw2oB,EAAU,EACVC,EAAU,EAELC,EAAS,EAAGA,EAASH,EAAaG,IAAU,CAEjD,IAAIC,EAAW5qkB,EAAK2qkB,GAChBnrkB,EAAO,IAAIw6a,GAEf,GAAuB,OAAnB4wJ,EAASrhoB,YAAqC5W,IAAnBi4oB,EAASrhoB,MAIpC,MAAMlR,MAAM,0BAyBhB,GA5BImnE,EAAKj2D,MAAQqhoB,EAASrhoB,MAKtBi2D,EAAKj2D,MAAQkhoB,EACbA,EAAUjrkB,EAAKj2D,MAEVi2D,EAAKj2D,MAAQmhoB,IAClBA,EAAUlrkB,EAAKj2D,OAGnBi2D,EAAK4qkB,QAAU3yoB,KAAKuxoB,YAAY7rkB,EAAI5zD,MAAOi2D,EAAKj2D,OAEvB,OAArBqhoB,EAASviV,cAAyC11T,IAArBi4oB,EAASviV,QACtC7oP,EAAK6oP,QAAUuiV,EAASviV,QAAU,EAGlC7oP,EAAK6oP,QAAU,EAGM,OAArBuiV,EAASvkV,cAAyC1zT,IAArBi4oB,EAASvkV,QACtC7mP,EAAK6mP,QAAUukV,EAASvkV,QAAU,EAGlC7mP,EAAK6mP,QAAU,EAGQ,OAAvBukV,EAASxjlB,gBAA6Cz0D,IAAvBi4oB,EAASxjlB,UAAyB,CACjE,IAAIyjlB,EAAY,IAAIrG,QACc7xoB,IAA9Bi4oB,EAASxjlB,UAAUxoD,SACnBisoB,EAAUjsoB,OAASgsoB,EAASxjlB,UAAUxoD,YACCjM,IAAnCi4oB,EAASxjlB,UAAUg9f,YACnB5kf,EAAKhrE,MAAQo2oB,EAASxjlB,UAAUg9f,YAGhC5kf,EAAKhrE,MAAQo2oB,EAASxjlB,UAAUxoD,OAEpC4gE,EAAKrhE,KAAO1G,KAAKqzoB,iBAAiBtrkB,EAAKhrE,OACvCq2oB,EAAU7F,IAAMxlkB,EAAK4qkB,QACrBS,EAAUE,IAAOtzoB,KAAK4woB,YAAYp0oB,OAAS,EAC3CwD,KAAK4woB,YAAYpsoB,KAAK4uoB,GACtBrrkB,EAAK6nP,UAAY,IAAI87U,GAErB1roB,KAAKyvoB,qBAAoCv0oB,IAAnBi4oB,EAASzuoB,MAAsB1E,KAAKoxoB,aAAa+B,EAASzuoB,MAAO1E,KAAK8uoB,gBAAkB9uoB,KAAK8uoB,eAAiB/mkB,EAAK6nP,UAAW,UACpJ7nP,EAAK0qkB,WAAa1qkB,EAAK6nP,UAAU99S,OAIlB,OAAnBqhoB,EAASp2oB,YAAqC7B,IAAnBi4oB,EAASp2oB,QACpCgrE,EAAKhrE,MAAQo2oB,EAASp2oB,MACtBgrE,EAAKrhE,KAAO1G,KAAKqzoB,iBAAiBtrkB,EAAKhrE,QAEpB,OAAnBo2oB,EAASzuoB,YAAqCxJ,IAAnBi4oB,EAASzuoB,YAA2CxJ,IAApB6sE,EAAK0qkB,YAChE1qkB,EAAK6nP,UAAY,IAAI87U,GACjB3jkB,EAAKhrE,iBAAiBsjB,KACtBrgB,KAAKyvoB,gBAAgB0D,EAASzuoB,MAAOqjE,EAAK6nP,UAAW7nP,EAAKrhE,KAAM,IAGhE1G,KAAKyvoB,gBAAgB0D,EAASzuoB,MAAOqjE,EAAK6nP,UAAW7nP,EAAKrhE,MAE9DqhE,EAAK0qkB,WAAa1qkB,EAAK6nP,UAAU99S,OAE5Bi2D,EAAKhrE,iBAAiBsjB,OAC3B0nD,EAAK6nP,UAAY,IAAI87U,GACrB1roB,KAAKyvoB,mBAAoB1nkB,EAAK6nP,UAAW7nP,EAAKrhE,KAAM,IACpDqhE,EAAK0qkB,WAAa1qkB,EAAK6nP,UAAU99S,OAErC9R,KAAKuzoB,cAAcxrkB,GACnB/nE,KAAK43gB,WAAa53gB,KAAKwzoB,kBAAkBzrkB,EAAMrC,EAAI5zD,MAAO9R,KAAK43gB,YAC/Dlyc,EAAIkB,MAAMxiE,IAAI2jE,GAGlBrC,EAAI6rf,MAAQ,EAAY,OAE5Bk9E,EAASrzoB,UAAUq4oB,iBAAmB,SAAUlrkB,EAAMqnP,GAE9C5vT,KAAKovoB,WAAWf,IAAI9lkB,EAAKhxC,QACzBq4R,EAAU99S,MAAQ9R,KAAKu2lB,QAAQrsjB,OAAO,SAAUja,GAAK,OAAQA,EAAEsH,OAASgxC,EAAKhxC,OAAU,GAAGzlB,MAC1F89S,EAAUr4R,KAAOgxC,EAAKhxC,OAI9Bk3mB,EAASrzoB,UAAUq0oB,gBAAkB,SAAUlnkB,EAAMqnP,EAAW8jV,EAAUC,GAEtE,GAAkB,OAAdprkB,EAAKhxC,WAA+Br8B,IAAdqtE,EAAKhxC,KAAoB,CAC/C,IAAIq4R,EAAUm8U,cAKV,YADA/roB,KAAKyzoB,iBAAiBlrkB,EAAMqnP,GAH5BA,EAAUr4R,KAAOgxC,EAAKhxC,KAQP,OAAnBgxC,EAAKqjkB,gBAAyC1woB,IAAnBqtE,EAAKqjkB,YAChCh8U,EAAUg8U,UAAYrjkB,EAAKqjkB,WAI/Bh8U,EAAU/B,QAAU,IAAI+1L,GAEH,OAAjBr7a,EAAKslP,cAAqC3yT,IAAjBqtE,EAAKslP,SAC9B7tT,KAAK4zoB,aAAarrkB,EAAKslP,QAAS+B,EAAU/B,QAAQr6G,KAG9B,OAApBjrI,EAAK6lc,iBAA2ClzgB,IAApBqtE,EAAK6lc,YACjCpugB,KAAK4zoB,aAAarrkB,EAAK6lc,WAAYx+M,EAAU/B,QAAQrhT,MAGhC,OAArB+7D,EAAK8nc,kBAA6Cn1gB,IAArBqtE,EAAK8nc,aAClCrwgB,KAAK4zoB,aAAarrkB,EAAK8nc,YAAazgN,EAAU/B,QAAQphT,OAGnC,OAAnB87D,EAAKooc,gBAAyCz1gB,IAAnBqtE,EAAKooc,WAChC3wgB,KAAK4zoB,aAAarrkB,EAAKooc,UAAW/gN,EAAU/B,QAAQnhT,KAG9B,OAAtB67D,EAAK4oc,mBAA+Cj2gB,IAAtBqtE,EAAK4oc,cACnCnxgB,KAAK4zoB,aAAarrkB,EAAK4oc,aAAcvhN,EAAU/B,QAAQlhT,QAGrC,OAAlB47D,EAAK0hL,eAAuC/uP,IAAlBqtE,EAAK0hL,WAC/B2lE,EAAU3lE,SAAW1hL,EAAK0hL,UAGR,OAAlB1hL,EAAKn5C,eAAuCl0B,IAAlBqtE,EAAKn5C,WAC/BwgS,EAAUxgS,SAAWm5C,EAAKn5C,UAGP,OAAnBm5C,EAAKk2b,gBAAyCvjgB,IAAnBqtE,EAAKk2b,YAChC7uM,EAAU6uM,UAAYl2b,EAAKk2b,WAGX,OAAhBl2b,EAAKpZ,aAAmCj0D,IAAhBqtE,EAAKpZ,SAC7BygQ,EAAUzgQ,OAASoZ,EAAKpZ,QAGV,OAAdoZ,EAAKtZ,WAA+B/zD,IAAdqtE,EAAKtZ,OAC3B2gQ,EAAU3gQ,KAAOsZ,EAAKtZ,MAGN,OAAhBsZ,EAAK1c,aAAmC3wD,IAAhBqtE,EAAK1c,SAC7B+jQ,EAAU/jQ,OAAS0c,EAAK1c,QAGR,OAAhB0c,EAAKujkB,aAAmC5woB,IAAhBqtE,EAAKujkB,SAC7Bl8U,EAAUk8U,OAASvjkB,EAAKujkB,OACG,SAArBl8U,EAAU/jQ,QAA0C,UAArB+jQ,EAAU/jQ,SAC3C+jQ,EAAU/jQ,OAAS,SAIP,OAAhB0c,EAAK3c,aAAmC1wD,IAAhBqtE,EAAK3c,SAC7BgkQ,EAAUhkQ,OAAS2c,EAAK3c,QAGL,OAAnB2c,EAAKilO,gBAAyCtyS,IAAnBqtE,EAAKilO,YAChCoiB,EAAUpiB,UAAYjlO,EAAKilO,WAGT,OAAlBjlO,EAAKsjkB,eAAuC3woB,IAAlBqtE,EAAKsjkB,WAC/Bj8U,EAAUi8U,SAAWtjkB,EAAKsjkB,UAGJ,OAAtBtjkB,EAAKixc,mBAA+Ct+gB,IAAtBqtE,EAAKixc,aACjB,OAAdjxc,EAAK7hE,WAA+BxL,IAAdqtE,EAAK7hE,KAC3BkpT,EAAU4pN,aAAex5gB,KAAK8tE,gBAAgBvF,EAAKixc,aAAcjxc,EAAK7hE,MAGtEkpT,EAAU4pN,aAAex5gB,KAAK8tE,gBAAgBvF,EAAKixc,aAAck6H,QAG9Cx4oB,IAAlBy4oB,GACL/jV,EAAU+7U,SAAW,GACrB/7U,EAAU4pN,aAAe,WAGzB5pN,EAAU4pN,aAAe,UAE7B5pN,EAAU99S,MAAQ9R,KAAK6zoB,iBAAiBjkV,IAE5C6+U,EAASrzoB,UAAU04oB,mBAAqB,SAAUt6H,EAAc9ygB,GAC5D,IAAI63B,EAASv+B,KAAK8tE,gBAAgB0rc,EAAc9ygB,GAChD,GAAI63B,IAAWi7e,EAAc,CACzB,IAAIu6H,EAAS/zoB,KAAKqvoB,QAAQ3noB,IAAI8xgB,GAC9B,QAAet+gB,IAAX64oB,IACAA,EAAO1H,WAAa9tmB,EAChBv+B,KAAKqvoB,QAAQhB,IAAI9vmB,IAAS,CAC1B,IAAK,IAAIngC,EAAK,EAAGyE,EAAK7C,KAAKwvoB,cAAepxoB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC5D,IAAI41oB,EAAenxoB,EAAGzE,GAClB41oB,EAAarI,WAAaoI,EAAOpI,WACjCqI,EAAarI,SAAW3roB,KAAKqvoB,QAAQ3noB,IAAI62B,GAAQotmB,UAGzD,IAAK,IAAI1noB,EAAK,EAAGwG,EAAKzK,KAAKuvoB,SAAUtroB,EAAKwG,EAAGjO,OAAQyH,IAAM,CACvD,IAAIgwoB,EAAUxpoB,EAAGxG,GACbgwoB,EAAQtI,WAAaoI,EAAOpI,WAC5BsI,EAAQtI,SAAW3roB,KAAKqvoB,QAAQ3noB,IAAI62B,GAAQotmB,cAOpE8C,EAASrzoB,UAAU0yE,gBAAkB,SAAU0rc,EAAc9ygB,GACzD,IAAIwtoB,EACJ,OAAQxtoB,GACJ,IAAK,SACD,IACIwtoB,EAAel0oB,KAAKqqE,KAAKmnC,kBAAmBjzE,OAAQi7e,EAAcz8a,SAAU/8F,KAAK+8F,WAErF,MAAOvS,GACH0pjB,EAAe16H,EAEnB,MACJ,IAAK,WACD,IACI06H,EAAel0oB,KAAKqqE,KAAKE,gBAAiB/D,SAAUgzc,EAAc9ygB,KAAM,aAAc,GAE1F,MAAO8jF,GACH0pjB,EAAe16H,EAEnB,MACJ,IAAK,OACD,IACI06H,EAAel0oB,KAAKqqE,KAAKE,gBAAiB/D,SAAUgzc,EAAc9ygB,KAAM,SAAU,GAEtF,MAAO8jF,GACH0pjB,EAAe16H,EAEnB,MACJ,IAAK,OACD,IACI06H,EAAel0oB,KAAKqqE,KAAKE,gBAAiB/D,SAAUgzc,EAAc9ygB,KAAM,SAAU,GAEtF,MAAO8jF,GACH0pjB,EAAe16H,EAEnB,MACJ,QACI06H,EAAe16H,EAGvB,OAAO06H,GAGXzF,EAASrzoB,UAAUw4oB,aAAe,SAAUrrkB,EAAMzhC,GAC3B,OAAfyhC,EAAKlyC,YAAiCn7B,IAAfqtE,EAAKlyC,MAC5ByQ,EAAOzQ,MAAQkyC,EAAKlyC,MAGpByQ,EAAOzQ,MAAQ,UAEI,OAAnBkyC,EAAK4/J,gBAAyCjtO,IAAnBqtE,EAAK4/J,UAChCrhM,EAAOqhM,UAAY5/J,EAAK4/J,UAGxBrhM,EAAOqhM,UAAY,QAG3Bsma,EAASrzoB,UAAUy4oB,iBAAmB,SAAUnvoB,GAC5C,GAAIA,EAAMqnoB,cAGN,OAFA/roB,KAAKm0oB,mBAAmBzvoB,GACxB1E,KAAKu2lB,QAAQ/xlB,KAAKE,GACX1E,KAAKu2lB,QAAQ/5lB,OAGpB,IAAI43oB,EAAgBp0oB,KAAKq0oB,aAAa3voB,GACtC,OAAK0voB,EAAcr1oB,OAORq1oB,EAActioB,OANrB9R,KAAKm0oB,mBAAmBzvoB,GACxB1E,KAAKu2lB,QAAQ/xlB,KAAKE,GACX1E,KAAKu2lB,QAAQ/5lB,SAQhCiyoB,EAASrzoB,UAAU+4oB,mBAAqB,SAAUzvoB,GAC9C,GAA2B,YAAvBA,EAAM80gB,eAA+Bx5gB,KAAKqvoB,QAAQhB,IAAI3poB,EAAM80gB,cAAe,CAC3E,IAAIl2gB,EAAKtD,KAAKqvoB,QAAQhgnB,KAAO,IAC7BrvB,KAAKqvoB,QAAQhooB,IAAI3C,EAAM80gB,aAAc,IAAI4yH,GAAO9ooB,EAAIoB,EAAM80gB,iBAGlEi1H,EAASrzoB,UAAUk5oB,UAAY,SAAUC,GAGrC,IAAK,IAFDx1oB,GAAS,EACT+S,EAAQ,EACH1T,EAAK,EAAGyE,EAAK7C,KAAKivoB,OAAQ7woB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACrD,IAAI6wB,EAAOpsB,EAAGzE,GACd0T,IACA,IAAI2sf,OAAYvjgB,EAUhB,QATiCA,IAA7Bq5oB,EAAe91I,YACfA,EAAa,KAAO81I,EAAe91I,UAAUxhgB,QAAQ,IAAK,KAE9D8B,EAASkwB,EAAKoH,QAAUooe,GACpBxve,EAAKiB,IAAMqknB,EAAetllB,MAC1BhgC,EAAK/yB,IAAMq4oB,EAAepllB,QAC1BlgC,EAAK8tG,IAAMw3gB,EAAe/mW,WAC1Bv+Q,EAAKsI,OAASg9mB,EAAetqZ,UAC7Bh7N,EAAK0skB,KAAO44C,EAAenlnB,SAE3B,MAIR,OADAtd,GAAgB,GACPA,MAAOA,EAAO/S,OAAQA,IAEnC0voB,EAASrzoB,UAAUo5oB,YAAc,SAAUD,GACvC,IAAIE,EAAS,IAAI/I,GACjB,OAAI1roB,KAAK00oB,YAAYH,EAAe1mV,SACxB4mV,EAAO5mV,QAAQr6G,IAAIn9K,QAAUk+mB,EAAe1mV,QAAQr6G,IAAIn9K,OAC5Do+mB,EAAO5mV,QAAQr6G,IAAI20B,YAAcosa,EAAe1mV,QAAQr6G,IAAI20B,UAGxDssa,EAAO5mV,QAAQrhT,KAAK6pB,QAAUk+mB,EAAe1mV,QAAQrhT,KAAK6pB,OAC9Do+mB,EAAO5mV,QAAQrhT,KAAK27N,YAAcosa,EAAe1mV,QAAQrhT,KAAK27N,WAC9Dssa,EAAO5mV,QAAQphT,MAAM4pB,QAAUk+mB,EAAe1mV,QAAQphT,MAAM4pB,OAC5Do+mB,EAAO5mV,QAAQphT,MAAM07N,YAAcosa,EAAe1mV,QAAQphT,MAAM07N,WAChEssa,EAAO5mV,QAAQnhT,IAAI2pB,QAAUk+mB,EAAe1mV,QAAQnhT,IAAI2pB,OACxDo+mB,EAAO5mV,QAAQnhT,IAAIy7N,YAAcosa,EAAe1mV,QAAQnhT,IAAIy7N,WAC5Dssa,EAAO5mV,QAAQlhT,OAAO0pB,QAAUk+mB,EAAe1mV,QAAQlhT,OAAO0pB,OAC9Do+mB,EAAO5mV,QAAQlhT,OAAOw7N,YAAcosa,EAAe1mV,QAAQlhT,OAAOw7N,WAG9Esma,EAASrzoB,UAAUs5oB,YAAc,SAAUC,GACvC,IAAIC,EAAiB,IAAIlJ,GACzB,OAAOkJ,EAAe/mV,QAAQr6G,IAAIn9K,QAAUs+mB,EAAgBnhc,IAAIn9K,OAC5Du+mB,EAAe/mV,QAAQr6G,IAAI20B,YAAcwsa,EAAgBnhc,IAAI20B,WAErEsma,EAASrzoB,UAAUi5oB,aAAe,SAAUE,GAGxC,IACK,IAHDx1oB,GAAS,EACT+S,EAAQ,EAEH1T,EAAK,EAAGyE,EAAK7C,KAAKu2lB,QAASn4lB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACtD,IAAI25f,EAAYl1f,EAAGzE,GAyBnB,GAxBAW,GAASg5f,EAAUg0I,gBAAyBh0I,EAAU6zI,YAAc2I,EAAe3I,WAC/E7zI,EAAU9oc,OAASsllB,EAAetllB,MAClC8oc,EAAU4zI,WAAa4I,EAAe5I,UACtC5zI,EAAUyhB,eAAiB+6H,EAAe/6H,cAC1CzhB,EAAUrxf,OAAS6toB,EAAe7toB,MAClCqxf,EAAU0G,YAAc81I,EAAe91I,WACvC1G,EAAU9tQ,WAAasqZ,EAAetqZ,UACtC8tQ,EAAU3oe,WAAamlnB,EAAenlnB,UACtC2oe,EAAUlsc,SAAW0olB,EAAe1olB,QACpCksc,EAAU5oc,SAAWollB,EAAepllB,QACpC4oc,EAAUvqN,YAAc+mW,EAAe/mW,WACvCuqN,EAAUnsc,SAAW2olB,EAAe3olB,QACpCmsc,EAAU+zI,SAAWyI,EAAezI,QACpC/zI,EAAU8zI,WAAa0I,EAAe1I,UACrC9zI,EAAUlqM,QAAQr6G,IAAIn9K,QAAUk+mB,EAAe1mV,QAAQr6G,IAAIn9K,OACxD0he,EAAUlqM,QAAQr6G,IAAI20B,YAAcosa,EAAe1mV,QAAQr6G,IAAI20B,WAClE4vR,EAAUlqM,QAAQrhT,KAAK6pB,QAAUk+mB,EAAe1mV,QAAQrhT,KAAK6pB,OAC1D0he,EAAUlqM,QAAQrhT,KAAK27N,YAAcosa,EAAe1mV,QAAQrhT,KAAK27N,WACjE4vR,EAAUlqM,QAAQphT,MAAM4pB,QAAUk+mB,EAAe1mV,QAAQphT,MAAM4pB,OAC/D0he,EAAUlqM,QAAQphT,MAAM07N,YAAcosa,EAAe1mV,QAAQphT,MAAM07N,WACnE4vR,EAAUlqM,QAAQnhT,IAAI2pB,QAAUk+mB,EAAe1mV,QAAQnhT,IAAI2pB,OAC3D0he,EAAUlqM,QAAQnhT,IAAIy7N,YAAcosa,EAAe1mV,QAAQnhT,IAAIy7N,WAC/D4vR,EAAUlqM,QAAQlhT,OAAO0pB,QAAUk+mB,EAAe1mV,QAAQlhT,OAAO0pB,OACjE0he,EAAUlqM,QAAQlhT,OAAOw7N,YAAcosa,EAAe1mV,QAAQlhT,OAAOw7N,WACjE,CACRr2N,EAAQimf,EAAUjmf,MAClB,OAGR,OAASA,MAAOA,EAAO/S,OAAQA,IAEnC0voB,EAASrzoB,UAAU+I,SAAW,SAAU0tD,EAAO5zC,GAC3C,IAAInM,EAAQ+/C,EAAMtzD,QAAQ0f,GAC1B,OAAOnM,GAAS,GAAKA,EAAQ+/C,EAAMr1D,QAEvCiyoB,EAASrzoB,UAAUi4oB,iBAAmB,SAAUt2oB,GAC5C,OAAIA,aAAiBsjB,KACV,WAEiB,oBACjB,UAEiB,mBACjB,SAGA,UAGfounB,EAASrzoB,UAAUm4oB,cAAgB,SAAUxrkB,GACzC,IACI2mkB,EADAhooB,EAAOqhE,EAAKrhE,KAEZ3J,EAAQgrE,EAAKhrE,MACjB,OAAQ2J,GACJ,IAAK,WAED,GADA3J,EAAQiD,KAAK60oB,SAAS93oB,QACC7B,IAAnB6sE,EAAK6nP,gBAAmD10T,IAAxB6sE,EAAK6nP,UAAUr4R,MAC3Cv3B,KAAK2toB,aAAaU,IAAItmkB,EAAK6nP,UAAUr4R,MAAO,CAC5C,IAAIvP,EAAUhoB,KAAK2toB,aAAajmoB,IAAIqgE,EAAK6nP,UAAUr4R,MACnDv3B,KAAK8zoB,mBAAmB9rnB,EAAQuW,OAAQvW,EAAQthB,MAGxDgooB,EAAW,IACX,MAEJ,IAAK,UACD3xoB,EAAQA,EAAQ,EAAI,EACpB2xoB,EAAW,IACX,MACJ,IAAK,SACDA,EAAW,SACYxzoB,IAAnB6sE,EAAK6nP,gBAAmD10T,IAAxB6sE,EAAK6nP,UAAUr4R,MAC3Cv3B,KAAK2toB,aAAaU,IAAItmkB,EAAK6nP,UAAUr4R,OACrCv3B,KAAK8zoB,mBAAmB9zoB,KAAK2toB,aAAajmoB,IAAIqgE,EAAK6nP,UAAUr4R,MAAMgH,OAAQ,UAGnF,MACJ,IAAK,SACDv+B,KAAK4uoB,oBACLF,EAAW,IACN1uoB,KAAKmE,SAASnE,KAAKgvoB,aAAcjyoB,IAClCiD,KAAKgvoB,aAAaxqoB,KAAKzH,GAE3BA,EAAQiD,KAAKgvoB,aAAazwoB,QAAQxB,GAK1CgrE,EAAK2mkB,SAAWA,EAChB3mkB,EAAKhrE,MAAQA,GAEjB0xoB,EAASrzoB,UAAUwmQ,WAAa,SAAUkzY,GACtC,IAAI/0oB,EAAQC,KACZ,OAAQ80oB,GACJ,IAAK,WACD,OAAO,IAAIhsjB,QAAQ,SAAUC,EAASC,GAClC,IAAIlsF,KACJA,EAAI85Q,SAAW72Q,EAAMiwoB,UAAUpuY,aAC/B74K,EAAQjsF,KAEhB,QACI,OAAO,IAAIgsF,QAAQ,SAAUC,EAASC,GAClCjpF,EAAMswP,eACNtwP,EAAM+0lB,SAASlzV,aAAa1vD,KAAK,SAAUx9C,GACvC,IAAI53J,KACJA,EAAI85Q,SAAW,IAAI3mB,MAAMv7F,IAAShuJ,KAAM,sEACxCqiF,EAAQjsF,SAK5B2xoB,EAASrzoB,UAAUy4F,KAAO,SAAUg8J,EAAUklZ,GAC1C,IAAIh1oB,EAAQC,KACZ,GAAiB,OAAb6vP,QAAkC30P,IAAb20P,GAAuC,KAAbA,EAC/C,MAAM,IAAIjvP,MAAM,6DAEpB,IAAIo0oB,EAAYnlZ,EAASngP,MAAM,UAC3BuloB,EAAWplZ,EAASngP,MAAM,SAC9B,GAAkB,OAAdsloB,GAAsBA,EAAU,KAAQ,IAAMh1oB,KAAK+uoB,UACnD/uoB,KAAKqwP,eACLrwP,KAAK80lB,SAASjhgB,KAAKg8J,GAAU39C,KAAK,WAC9BnyM,EAAM+0lB,SAASzilB,gBAGlB,CAAA,GAAiB,OAAb4ioB,GAAqBA,EAAS,KAAQ,IAAMj1oB,KAAK+uoB,UAItD,MAAMnuoB,MAAM,8CAHZZ,KAAKgwoB,UAAUn8iB,KAAKg8J,KAM5B4+Y,EAASrzoB,UAAUi1P,aAAe,WAC9BrwP,KAAKk1oB,eACLl1oB,KAAKm1oB,iBACLn1oB,KAAKo1oB,mBACLp1oB,KAAKq1oB,aACLr1oB,KAAKs1oB,QAAQt1oB,KAAK6voB,mBAClB7voB,KAAKu1oB,SAASv1oB,KAAK6voB,mBACnB7voB,KAAKw1oB,kBACLx1oB,KAAKy1oB,uBACLz1oB,KAAK01oB,wBAETjH,EAASrzoB,UAAU85oB,aAAe,WAK9B,IAAK,IAHDS,EAAe,6TACfC,EAAS,WACTp5oB,EAASwD,KAAK6toB,WAAWrxoB,OACpBN,EAAI,EAAGA,EAAIM,EAAQN,IAExB05oB,GAAU,gBAAkB51oB,KAAK6toB,WAAW3xoB,GAAGq7B,KAAO,eAAiBr7B,EAAI,GAAGgR,WAAa,gBAAkBhR,EAAI,GAAGgR,WAAa,OAIrI,GAFA0ooB,GAAU,YACVD,GAAgBC,EACZ51oB,KAAKmvoB,YAAY9/mB,KAAO,EAAG,CAC3B,IAAIwmnB,EAAe,iBACnB71oB,KAAKmvoB,YAAY/voB,QAAQ,SAAUrC,EAAOM,GACtCw4oB,GAAgB,wDAA0Dx4oB,EAAM,KAAON,EAAQ,mBAGnG44oB,GADAE,GAAgB,kBAGpB71oB,KAAK81oB,aAAaH,EAAe,cAAe,oBAEpDlH,EAASrzoB,UAAU+5oB,eAAiB,WAEhC,IAAK,IADD34oB,EAASwD,KAAK6toB,WAAWrxoB,OACpBN,EAAI,EAAGA,EAAIM,EAAQN,IACxB8D,KAAK+1oB,cAAc/1oB,KAAK6toB,WAAW3xoB,GAAIA,IAG/CuyoB,EAASrzoB,UAAU26oB,cAAgB,SAAUrF,EAAO5+nB,GAChD,IAAIkkoB,EAAY,IAAIzH,GAEhB0H,EAAc,sWAQlB,GAPKvF,EAAM7D,kBAIPoJ,iBAHAA,kEAKJA,GAAej2oB,KAAKk2oB,cAAcxF,QACZx1oB,IAAlBw1oB,EAAMrtkB,QAAuB,CAE7B,IAAK,IADD8ykB,EAAY,SACP/3oB,EAAK,EAAGyE,EAAK6toB,EAAMrtkB,QAASjlE,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvD,IAAI4jE,EAASn/D,EAAGzE,QAEKlD,IAAjB8mE,EAAOhsD,MACPmgoB,GAAa,aAAgBn0kB,EAAY,MAAI,UAAaA,EAAY,MAAI,YAAchiE,KAAKo2oB,oBAAoBp0kB,EAAOhsD,OAAS,uBAGjImgoB,GAAa,aAAgBn0kB,EAAY,MAAI,UAAaA,EAAY,MAAI,oCAGlFi0kB,GAAgBE,EAAY,UAKhC,GAHAF,iBACAD,EAAU5woB,OAAO6woB,GACjBA,EAAc,QACK/6oB,IAAfw1oB,EAAM9ja,KACN,IAAK,IAAI3oO,EAAK,EAAGwG,EAAKimoB,EAAM9ja,KAAM3oO,EAAKwG,EAAGjO,OAAQyH,IAAM,CACpD,IAAIyhE,EAAMj7D,EAAGxG,GACToyoB,EAAY,WAAc3wkB,EAAS,MAAI,KACtCjoE,EAAkBioE,EAAI6rf,SACvB8kF,GAAa,UAAY3wkB,EAAI6rf,MAAQ,WAEtBr2jB,IAAfwqE,EAAI3vD,SACJsgoB,GAAc,OAASr2oB,KAAKs2oB,kBAAkB5wkB,EAAI3vD,QAAU,4BAE3C7a,IAAjBwqE,EAAI07Y,WACA17Y,EAAI07Y,SAAS59U,WACb6ygB,uBAE8Bn7oB,IAA9BwqE,EAAI07Y,SAASq8C,eACb44I,GAAc,iBAAmB3wkB,EAAI07Y,SAASq8C,aAAe,MAE7D/3b,EAAI07Y,SAAS0xL,cACbuD,sBAGRA,OACA,IAAK,IAAIh9Z,EAAK,EAAGC,EAAK5zK,EAAIkB,MAAOyyK,EAAKC,EAAG98O,OAAQ68O,IAAM,CACnD,IAAItxK,EAAOuxK,EAAGD,QACDn+O,IAAT6sE,QAAsC7sE,IAAf6sE,EAAKhrE,YAA0C7B,IAAnB6sE,EAAK6nP,YACxDymV,GAAc,SAAWtukB,EAAK4qkB,QAAU,UAClBz3oB,IAAlB6sE,EAAK2mkB,WACL2H,GAAc,MAAQtukB,EAAK2mkB,SAAW,WAElBxzoB,IAApB6sE,EAAK0qkB,aACL4D,GAAc,MAAQtukB,EAAK0qkB,WAAa,MAE5C4D,aACmBn7oB,IAAf6sE,EAAKhrE,MACLs5oB,GAAc,MAAQtukB,EAAKhrE,MAAQ,WAGnCs5oB,WAIZA,YACAL,EAAU5woB,OAAOixoB,GAIzB,GADAJ,kBACIvF,EAAM94H,WAAWp7gB,OAAS,EAAG,CAC7By5oB,GAAgB,sBAAwBvF,EAAM94H,WAAWp7gB,OAAS,KAClE,IAAK,IAAI+8O,EAAK,EAAGC,EAAKk3Z,EAAM94H,WAAYr+R,EAAKC,EAAGh9O,OAAQ+8O,IAAM,CAE1D08Z,GAAgB,mBADJz8Z,EAAGD,GAC4Bg0Z,IAAM,OAErD0I,mBAEJ,GAAIvF,EAAMS,WAAW30oB,OAAS,EAAG,CAC7By5oB,kBACA,IAAK,IAAI5hM,EAAK,EAAGC,EAAKo8L,EAAMS,WAAY98L,EAAKC,EAAG93c,OAAQ63c,IAAM,CAC1D,IAAIkiM,EAAQjiM,EAAGD,GACf4hM,GAAgB,mBAAqBM,EAAMhJ,IAAM,cAAgBgJ,EAAMjD,IAAM,OAEjF2C,mBACAj2oB,KAAK81oB,aAAa91oB,KAAKw2oB,mBAAmB9F,GAAS,4BAA8BA,EAAM5+nB,MAAQ,aAGnGmkoB,qMACAD,EAAU5woB,OAAO6woB,GACjBj2oB,KAAK81oB,aAAaE,EAAUxH,UAAW,uBAA8B18nB,EAAQ,GAAK,SAEtF28nB,EAASrzoB,UAAUg7oB,oBAAsB,SAAUK,GAC/C,IACIlunB,EAAOkunB,EAASC,GAChB12oB,KAAK22oB,OAAOF,EAAS,GAFP,EAE0B,IAAM,IAAO,IACrDA,KACJ,OAAQlunB,EAAM,GAJI,EAKZA,EAAoB,GALR,EAK2B,IAAS,OACjDA,EANa,EAM2B,IAAS,KAE1DkmnB,EAASrzoB,UAAUu7oB,MAAQ,SAAU5poB,GACjC,IAAIy3J,EAAIz3J,EAAIA,EAAI,EAChB,OAAa,IAANy3J,IAAYz3J,EAAI,GAAY,IAANA,GAAY,EAAIA,GAAM,EAAA,IAAY,EAAIy3J,GAEvEiqe,EAASrzoB,UAAUk7oB,kBAAoB,SAAUG,GAC7C,OAAQA,EAASz2oB,KAAK6uoB,iBAAiB,GAAK7uoB,KAAK6uoB,iBAAiB,IAEtEJ,EAASrzoB,UAAUo7oB,mBAAqB,SAAU9F,GAG9C,IAAK,IADDkG,EAAS,8IACJx4oB,EAAK,EAAGyE,EAAK6toB,EAAMS,WAAY/yoB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC1D,IAAIm4oB,EAAQ1zoB,EAAGzE,GAEfw4oB,GAAU,wBAA0BL,EAAMjD,IAAM,kGAAoGiD,EAAMpvoB,OAAS,6BAGvK,OADAyvoB,GAAU,oBAGdnI,EAASrzoB,UAAU86oB,cAAgB,SAAUxF,GACzC,IAAImG,EAAa,6CAmBjB,OAlB4B,IAAxBnG,EAAM5D,cACN+J,GAAc,sBAGdA,GAAc,SAEQ37oB,IAAtBw1oB,EAAMwB,cACN2E,GAAc,qCACSnG,EAAMwB,YAAY1iK,SAAW,KACtB,IAA1BkhK,EAAMwB,YAAYxskB,MAClBmxkB,GAAc,WAAanG,EAAMwB,YAAYxskB,IAAM,MAEtB,IAA7BgrkB,EAAMwB,YAAYlwkB,SAClB60kB,GAAc,WAAanG,EAAMwB,YAAYlwkB,OAAS,MAE1D60kB,GAAc,MAElBA,GAAc,+BAGlBpI,EAASrzoB,UAAUg6oB,iBAAmB,WAClC,IAAI54oB,EAASwD,KAAKgvoB,aAAaxyoB,OAC/B,GAAIA,EAAS,EAAG,CAIZ,IAAK,IAFDs6oB,EAAW,2DAA6Dt6oB,EAAS,YAAcwD,KAAK4uoB,kBAAoB,uEACxHmI,EAAK,GACA76oB,EAAI,EAAGA,EAAIM,EAAQN,IACxB66oB,GAAM,UACNA,GAAM/2oB,KAAKg3oB,cAAch3oB,KAAKgvoB,aAAa9yoB,IAC3C66oB,GAAM,YAEVA,GAAM,SACN/2oB,KAAK81oB,aAAagB,EAAWC,EAAI,0BAGzCtI,EAASrzoB,UAAU47oB,cAAgB,SAAUj6oB,GAUzC,OAT4B,IAAxBA,EAAMwB,QAAQ,OACdxB,EAAQA,EAAME,QAAQ,KAAM,WAEJ,IAAxBF,EAAMwB,QAAQ,OACdxB,EAAQA,EAAME,QAAQ,KAAM,UAEJ,IAAxBF,EAAMwB,QAAQ,OACdxB,EAAQA,EAAME,QAAQ,KAAM,SAEzBF,GAEX0xoB,EAASrzoB,UAAUi6oB,WAAa,WAC5Br1oB,KAAKi3oB,wBAEL,IAAIC,EAAY,6RAChBA,GAAal3oB,KAAKm3oB,oBAClBD,GAAal3oB,KAAKo3oB,YAClBF,GAAal3oB,KAAKq3oB,YAClBH,GAAal3oB,KAAKs3oB,cAClBJ,GAAal3oB,KAAKu3oB,mBAClBL,GAAal3oB,KAAKw3oB,cAClBN,GAAal3oB,KAAKy3oB,iBAClBz3oB,KAAK81oB,aAAaoB,EAAY,gBAAiB,kBAEnDzI,EAASrzoB,UAAU67oB,sBAAwB,WACvC,IAAK,IAAI74oB,EAAK,EAAGyE,EAAK7C,KAAKu2lB,QAASn4lB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACtD,IAAIsG,EAAQ7B,EAAGzE,GACX61oB,OAAU/4oB,EACVwJ,EAAMqnoB,eACNkI,EAAU,IAAIhI,IACNE,KAAQznoB,EAAMoN,MAAQ,GAG9BmioB,EAAU,IAAIjI,IACNG,KAAO,EAGnB,IAAIuL,EAAoB13oB,KAAKs0oB,UAAU5voB,GACvC,GAAKgzoB,EAAkB34oB,OAYnBk1oB,EAAQ0D,OAASD,EAAkB5loB,UAZR,CAC3B,IAAImd,EAAO,IAAIy0M,GACfz0M,EAAKiB,EAAIxrB,EAAMuqD,KACfhgC,EAAK/yB,EAAIwI,EAAMyqD,OACflgC,EAAKsI,KAAO7yB,EAAMulP,SAClBh7N,EAAK0skB,GAAKj3lB,EAAM0qB,SAChBH,EAAK8tG,EAAIr4H,EAAM8oS,UACfv+Q,EAAKoH,MAAS,KAAO3xB,EAAM+5f,UAAUxhgB,QAAQ,IAAK,IAClD+C,KAAKivoB,OAAOzqoB,KAAKyqB,GACjBglnB,EAAQ0D,OAAS33oB,KAAKivoB,OAAOzyoB,OAAS,EAM1C,GAAwB,SAApBkI,EAAMknoB,UAAsB,CAC5B,IAAIA,EAAY,KAAOlnoB,EAAMknoB,UAAU3uoB,QAAQ,IAAK,IACpD,GAAI+C,KAAKsvoB,OAAOjB,IAAIzC,GAAY,CAC5B,IAAIgM,EAAS53oB,KAAKsvoB,OAAO5noB,IAAIkkoB,GAC7BqI,EAAQ2D,OAASA,MAEhB,CACGA,EAAS53oB,KAAKsvoB,OAAOjgnB,KAAO,EAChCrvB,KAAKsvoB,OAAOjooB,IAAIukoB,EAAWgM,GAC3B3D,EAAQ2D,eAIZ3D,EAAQ2D,OAAS,EAWrB,GARK53oB,KAAKw0oB,YAAY9voB,GAKlBuvoB,EAAQ4D,SAAW,GAJnB73oB,KAAKkvoB,SAAS1qoB,KAAKE,EAAMmpT,SACzBomV,EAAQ4D,SAAW73oB,KAAKkvoB,SAAS1yoB,QAMV,YAAvBkI,EAAM80gB,aACN,GAAIx5gB,KAAKqvoB,QAAQhB,IAAI3poB,EAAM80gB,cAAe,CACtC,IAAIu6H,EAAS/zoB,KAAKqvoB,QAAQ3noB,IAAIhD,EAAM80gB,cACpCy6H,EAAQtI,SAAWoI,EAAOpI,aAEzB,CACD,IAAIrooB,EAAKtD,KAAKqvoB,QAAQhgnB,KAAO,IAC7BrvB,KAAKqvoB,QAAQhooB,IAAI3C,EAAM80gB,aAAc,IAAI4yH,GAAO9ooB,EAAIoB,EAAM80gB,eAC1Dy6H,EAAQtI,SAAWrooB,MAII,YAAvBoB,EAAM80gB,cAAiD,KAAnB90gB,EAAMinoB,SAC1CsI,EAAQtI,SAAW,GAGnBsI,EAAQtI,SAAW,EAItBjnoB,EAAMqnoB,gBACPkI,EAAQ6D,eAAiB,GAE7B7D,EAAQvolB,UAAY,IAAIk3b,GACxBqxJ,EAAQvolB,UAAUoglB,OAASpnoB,EAAMonoB,OACjCmI,EAAQvolB,UAAUm4E,WAAan/H,EAAMmnD,OACrCoolB,EAAQvolB,UAAUo4E,SAAWp/H,EAAMknD,OACnCqolB,EAAQvolB,UAAUmglB,SAAWnnoB,EAAMmnoB,SAAW,EAAI,EAC9CnnoB,EAAMqnoB,eACN/roB,KAAKwvoB,cAAchroB,KAAKyvoB,GACxBj0oB,KAAKuvoB,SAAS/qoB,KAAKyvoB,IAInBj0oB,KAAKuvoB,SAAS/qoB,KAAKyvoB,KAI/BxF,EAASrzoB,UAAU+7oB,kBAAoB,WACnC,GAAIn3oB,KAAKqvoB,QAAQhgnB,MAAQ,EAAG,CACxB,IAAI0onB,EAAgB,mBAAsB/3oB,KAAKqvoB,QAAY,KAAI,KAI/D,OAHArvoB,KAAKqvoB,QAAQjwoB,QAAQ,SAAUrC,EAAOM,GAClC06oB,GAAiB,qBAAuBh7oB,EAAM4uoB,SAAW,iBAAmB5uoB,EAAMsvoB,WAAWpvoB,QAAQ,KAAM,UAAY,SAEnH86oB,GAAiB,aAGzB,MAAO,IAGftJ,EAASrzoB,UAAUg8oB,UAAY,WAE3B,IAAI7nnB,EAAY,iBAAoBvvB,KAAKivoB,OAAa,OAAI,KAC1D,GAAIjvoB,KAAKivoB,OAAOzyoB,QAAU,EACtB,IAAK,IAAI4B,EAAK,EAAGyE,EAAK7C,KAAKivoB,OAAQ7woB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACrD,IAAI6wB,EAAOpsB,EAAGzE,GACdmxB,GAAa,SACTN,EAAKiB,IACLX,GAAa,SAEbN,EAAK/yB,IACLqzB,GAAa,SAEbN,EAAK8tG,IACLxtG,GAAa,SAEjBA,GAAa,YAAcvvB,KAAKs2oB,kBAAkBrnnB,EAAK0skB,IAAM,OAC7DpskB,GAAa,eAAiBN,EAAKoH,MAAQ,OAC3C9G,GAAa,cAAgBN,EAAKsI,KAAO,cAGjD,OAAOhI,EAAY,YAEvBk/mB,EAASrzoB,UAAUi8oB,UAAY,WAE3B,IAAIW,EAAa,kBAAoBh4oB,KAAKsvoB,OAAOjgnB,KAAO,GAAK,8HAO7D,OANIrvB,KAAKsvoB,OAAOjgnB,MAAQ,GACpBrvB,KAAKsvoB,OAAOlwoB,QAAQ,SAAUrC,EAAOM,GAEjC26oB,GAAc,wDAA0D36oB,EAAM,wDAG/E26oB,EAAa,YAExBvJ,EAASrzoB,UAAUk8oB,YAAc,WAE7B,IAAIW,EAAe,oBAAsBj4oB,KAAKkvoB,SAAS1yoB,OAAS,GAAK,oEACrE,GAAIwD,KAAKkvoB,SAAS1yoB,QAAU,EACxB,IAAK,IAAI4B,EAAK,EAAGyE,EAAK7C,KAAKkvoB,SAAU9woB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvD,IAAIyvT,EAAUhrT,EAAGzE,GACjB,GAAI4B,KAAK00oB,YAAY7mV,GAAU,CAC3B,IAAIx3R,EAAQw3R,EAAQr6G,IAAIn9K,MAAMp5B,QAAQ,IAAK,IACvCkrO,EAAY0lF,EAAQr6G,IAAI20B,UAE5B8va,GAAgB,wBAA0B9va,EAAY,mBAAqB9xM,EAAQ,4BAA8B8xM,EAAY,mBAAqB9xM,EAAQ,2BAA6B8xM,EAAY,mBAAqB9xM,EAAQ,4BAA8B8xM,EAAY,mBAAqB9xM,EAAQ,8BAIvS4hnB,GAAgB,wBAA0BpqV,EAAQrhT,KAAK27N,UAAY,mBAAqB0lF,EAAQrhT,KAAK6pB,MAAMp5B,QAAQ,IAAK,IAAM,4BAA8B4wT,EAAQphT,MAAM07N,UAAY,mBAAqB0lF,EAAQphT,MAAM4pB,MAAMp5B,QAAQ,IAAK,IAAM,2BAA6B4wT,EAAQnhT,IAAIy7N,UAAY,mBAAqB0lF,EAAQnhT,IAAI2pB,MAAMp5B,QAAQ,IAAK,IAAM,4BAA8B4wT,EAAQlhT,OAAOw7N,UAAY,mBAAqB0lF,EAAQlhT,OAAO0pB,MAAMp5B,QAAQ,IAAK,IAAM,yBAIne,OAAOg7oB,EAAe,cAE1BxJ,EAASrzoB,UAAUq8oB,eAAiB,WAChC,IAAI13oB,EAAQC,KACRk4oB,EAAkB,uBAA0Bl4oB,KAAKovoB,WAAe,KAAI,KAQxE,OAPApvoB,KAAKovoB,WAAWhwoB,QAAQ,SAAUrC,EAAOM,GACrC66oB,GAAmB,oBAAsB76oB,EAAM,WAAa0C,EAAMqvoB,WAAW1noB,IAAIrK,GAAK8uoB,KAAO,IACjF,WAAR9uoB,IACA66oB,GAAmB,kBAEvBA,GAAmB,QAEhBA,GAAmB,iBAE9BzJ,EAASrzoB,UAAUm8oB,iBAAmB,WAElC,IAAIY,EAAe,yBAA2Bn4oB,KAAKwvoB,cAAchzoB,OAAS,GAAK,2DAC/E,GAAIwD,KAAKwvoB,cAAchzoB,QAAU,EAC7B,IAAK,IAAI4B,EAAK,EAAGyE,EAAK7C,KAAKwvoB,cAAepxoB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC5D,IAAIg6oB,EAAcv1oB,EAAGzE,GAErB+5oB,GAAgB,iBAAmBC,EAAYzM,SAAW,aAAeyM,EAAYT,OAAS,aAAeS,EAAYR,OAAS,eAAiBQ,EAAYP,SAAW,UAC5I38oB,IAA1Bk9oB,EAAY1slB,UACZyslB,GAAgB,IAAMn4oB,KAAKq4oB,cAAcD,GAAe,QAGxDD,GAAgB,MAI5B,OAAOA,EAAe,mBAE1B1J,EAASrzoB,UAAUo8oB,YAAc,WAE7B,IAAIW,EAAe,oBAAsBn4oB,KAAKuvoB,SAAS/yoB,OAAS,GAAK,oEACrE,GAAIwD,KAAKuvoB,SAAS/yoB,QAAU,EACxB,IAAK,IAAI4B,EAAK,EAAGyE,EAAK7C,KAAKuvoB,SAAUnxoB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACvD,IAAIk6oB,EAASz1oB,EAAGzE,GAEhB+5oB,GAAgB,iBAAmBG,EAAO3M,SAAW,aAAe2M,EAAOX,OAAS,aAAeW,EAAOV,OAAS,eAAiBU,EAAOT,SAAW,WAAaS,EAAOnM,KAAO,KACnJ,IAA1BmM,EAAOR,iBACPK,GAAgB,sBAEpBA,GAAgB,IAAMn4oB,KAAKq4oB,cAAcC,GAAU,QAG3D,OAAOH,EAAe,cAE1B1J,EAASrzoB,UAAUi9oB,cAAgB,SAAUC,GACzC,IAAIC,EAAc,cAWlB,YAVoCr9oB,IAAhCo9oB,EAAO5slB,UAAUm4E,aACjB00gB,GAAe,eAAiBD,EAAO5slB,UAAUm4E,WAAa,WAElC3oI,IAA5Bo9oB,EAAO5slB,UAAUoglB,SACjByM,GAAe,WAAaD,EAAO5slB,UAAUoglB,OAAS,WAExB5woB,IAA9Bo9oB,EAAO5slB,UAAUo4E,WACjBy0gB,GAAe,aAAeD,EAAO5slB,UAAUo4E,SAAW,MAE9Dy0gB,GAAe,aAAeD,EAAO5slB,UAAUmglB,SAAW,QAG9D4C,EAASrzoB,UAAUk6oB,QAAU,SAAUzF,GAEnC,IAAI2I,EAAY,uMACUt9oB,IAAtB20oB,SACkC30oB,IAA9B20oB,EAAkBQ,UAClBmI,GAAa,YAAc3I,EAAkBQ,QAAU,mBAEzBn1oB,IAA9B20oB,EAAkBO,UAClBoI,GAAa,YAAc3I,EAAkBO,QAAU,eAG/DpwoB,KAAK81oB,aAAc0C,EAAY,gBAAkB,qBAErD/J,EAASrzoB,UAAUm6oB,SAAW,SAAU1F,GACpC,IAAIU,EAAc,IAAIlwnB,KAElBo4nB,EAAa,+VACcv9oB,IAA3B8E,KAAK6voB,wBAC4B30oB,IAA7B20oB,EAAkBK,SAClBuI,GAAc,eAAiB5I,EAAkBK,OAAS,sBAE5Bh1oB,IAA9B20oB,EAAkBS,UAClBmI,GAAc,eAAiB5I,EAAkBS,QAAU,sBAE5Bp1oB,IAA/B20oB,EAAkB72b,WAClBy/b,GAAc,gBAAkB5I,EAAkB72b,SAAW,uBAE9B99M,IAA/B20oB,EAAkBM,WAClBsI,GAAc,mBAAqB5I,EAAkBM,SAAW,0BAEpCj1oB,IAA5B20oB,EAAkBntmB,QAClB+1mB,GAAc,aAAe5I,EAAkBntmB,MAAQ,oBAE5BxnC,IAA3B20oB,EAAkBW,OAClBiI,GAAc,gBAAkB5I,EAAkBW,KAAO,uBAE5Bt1oB,IAA7B20oB,EAAkBnljB,SAClB+tjB,GAAc,qBAAuB5I,EAAkBnljB,OAAS,4BAE9BxvF,IAAlC20oB,EAAkBU,YAElBkI,GAAc,8CAAgD5I,EAAkBU,YAAYmI,cAAgB,qBAG5GD,GAAc,8CAAgDlI,EAAYmI,cAAgB,0BAEvDx9oB,IAAnC20oB,EAAkB7vjB,aAElBy4jB,GAAc,+CAAiD5I,EAAkB7vjB,aAAa04jB,cAAgB,sBAG9GD,GAAc,+CAAiDlI,EAAYmI,cAAgB,wBAI/FD,GAAc,8CAAgDlI,EAAYmI,cAAgB,qBAC1FD,GAAc,+CAAiDlI,EAAYmI,cAAgB,uBAG/FD,GAAc,uBACdz4oB,KAAK81oB,aAAa2C,EAAY,sBAElChK,EAASrzoB,UAAUq6oB,qBAAuB,WAGtCz1oB,KAAK81oB,aADa,glBACa,gBAEnCrH,EAASrzoB,UAAUs6oB,qBAAuB,WAKtC,IAAK,IAHDiD,EAAa,8IACbn8oB,EAASwD,KAAK6toB,WAAWrxoB,OACzB0iB,EAAQ,EACHhjB,EAAI,EAAGA,EAAIM,EAAQN,IAAKgjB,IAE7By5nB,GAAc,yBAA2Bz8oB,EAAI,GAAGgR,WAAa,mHAAqHhR,EAAI,GAAGgR,WAAa,WAG1MyroB,GAAc,2BAA6Bz5nB,GAAOhS,WAAa,6GAC3DlN,KAAK4uoB,kBAAoB,IAEzB+J,GAAc,2BAA6Bz5nB,GAAOhS,WAAa,4HAEnElN,KAAK81oB,aAAc6C,EAAa,mBAAqB,+BAEzDlK,EAASrzoB,UAAUo6oB,gBAAkB,WAKjC,IAAK,IAHDoD,EAAoB,8wBACpBC,EAAiB,GACjBr8oB,EAASwD,KAAK6toB,WAAWrxoB,OACpBN,EAAI,EAAGA,EAAIM,EAAQN,IAExB28oB,GAAkB,4CAA8C38oB,EAAI,GAAGgR,WAAa,mGAEpFlN,KAAK4uoB,kBAAoB,IAEzBgK,GAAqB,6IAEzB54oB,KAAK81oB,aAAc8C,EAAoBC,EAAiB,WAAa,wBAEzEpK,EAASrzoB,UAAU06oB,aAAe,SAAUgD,EAAW/0Y,GACnD,GAA2B,mBAAU,CACjC,IAAIrvG,EAAO,IAAIu7F,MAAM6oZ,IAAcpyoB,KAAM,eACrCiwlB,EAAc,IAAIn1V,GAAe9sG,EAAMqvG,GAC3C/jQ,KAAK80lB,SAASjyY,QAAQ8zY,OAErB,CACGA,EAAc,IAAIn1V,GAAes3Y,EAAW/0Y,GAChD/jQ,KAAK80lB,SAASjyY,QAAQ8zY,KAG9B83C,EAASrzoB,UAAUo4oB,kBAAoB,SAAUzrkB,EAAMknK,EAAU2oS,GAC7D,GAAqB,IAAjB7vc,EAAK6oP,SAAkC,IAAjB7oP,EAAK6mP,QAAe,CAC1C,IAAIw+U,EAAQ,IAAIH,GAChBG,EAAMrgoB,EAAIg7D,EAAKj2D,MACfs7nB,EAAMp3nB,MAAQ+xD,EAAK6mP,QACnBw+U,EAAMpgoB,EAAIiiO,EACVm+Z,EAAMr3nB,OAASgyD,EAAK6oP,QACpB,IAAI47M,EAAYxsgB,KAAKuxoB,YAAYnE,EAAMpgoB,EAAGogoB,EAAMrgoB,GAC5C0/f,EAAUzsgB,KAAKuxoB,YAAYtia,EAAWm+Z,EAAMr3nB,OAAQgyD,EAAKj2D,MAAQs7nB,EAAMp3nB,OAC3Eo3nB,EAAMG,IAAM/gI,EAAY,IAAMC,EACbmL,EAAWxzgB,IAAIgpoB,GAAhC,IACI7voB,GAAUwP,EAAGqgoB,EAAMrgoB,EAAGC,EAAGogoB,EAAMpgoB,GAC/BiS,GACAlS,EAAIg7D,EAAKj2D,MAAQs7nB,EAAMp3nB,MAAQhJ,EAAIiiO,EAAWm+Z,EAAMr3nB,QAExD/V,KAAK+4oB,wBAAwBx7oB,EAAO0hB,EAAK8oD,GAE7C,OAAO6vc,GAEX62H,EAASrzoB,UAAU29oB,wBAA0B,SAAUC,EAAOC,EAAOlxkB,GACjE,IAAK,IAAIh7D,EAAIisoB,EAAMjsoB,EAAGA,GAAKksoB,EAAMlsoB,EAAGA,IAChC,IAAK,IAAIC,EAAIgsoB,EAAMhsoB,EAAGA,GAAKisoB,EAAMjsoB,EAAGA,IAChChN,KAAK2woB,iBAAiBtpoB,IAAIrH,KAAKuxoB,YAAYvkoB,EAAGD,IAAMA,EAAGA,EAAGC,EAAGA,EAAGyloB,WAAY1qkB,EAAK0qkB,cAU7FhE,EAASrzoB,UAAU89oB,YAAc,SAAU9piB,EAAM5sB,EAAOtE,GAIpD,GAAIkxB,GAAQ,GAAKA,GAAQ,MAAQ5sB,GAAS,GAAKA,GAAS,GAAI,CACxD,IACIx1E,EAAIoiG,EAAO,EAEf,OAPc,OAMF,IAAJpiG,GAAYA,EAAI,EAAK,IAAOA,EAAI,IAAO,IAAOA,EAAI,IAAO,IAFtDhN,KAAKm5oB,WAAW/piB,IAFT,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MADvD,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAKE5sB,EAAQ,GAAKtE,EAAM,GAGlG,MAAM,IAAIt9E,MAAM,qBAQpB6toB,EAASrzoB,UAAUg+oB,YAAc,SAAUxriB,EAAMD,EAAQ9uG,GACrD,GAAI+uG,GAAQ,GAAKA,EAAO,IAAMD,GAAU,GAAKA,EAAS,IAAM9uG,GAAU,GAAKA,EAAS,GAAI,CAEpF,OAAsB,KADI,KAAP+uG,EAAuB,GAATD,EAAc9uG,GACjB,IAElC,MAAM,IAAI+B,MAAM,mBAMpB6toB,EAASrzoB,UAAU+9oB,WAAa,SAAU/piB,GACtC,OAAOA,EAAO,GAAM,IAAMA,EAAO,KAAQ,GAAKA,EAAO,KAAQ,IAKjEq/hB,EAASrzoB,UAAUy5oB,SAAW,SAAU53jB,GACpC,IAAI40D,EAAQ,EAGZ,GAAc,KADdA,EAAQ7xI,KAAKk5oB,YAAYj8jB,EAAKpR,cAAgBoR,EAAKlR,WAAa,EAAIkR,EAAKhR,WAAajsE,KAAKo5oB,YAAYn8jB,EAAK/Q,WAAY+Q,EAAK7Q,aAAc6Q,EAAK1T,eAE5I,OAAO,EAMX,GAAIsoE,EADmB,WAEnB,MAAM,IAAIjxI,MAAM,yBAGpB,OAASixI,EANcwngB,aAMc,IADlB,OAGhB5K,KAOPqB,GAAmC,WAGnC,OAFA,8eCp/CAtC,GAAgC,WAChC,SAASA,EAAe5/nB,GACpB5N,KAAKqqE,KAAO,IAAIC,GACX7sE,EAAkBmQ,KACnB5N,KAAKqqE,KAAK6kB,QAAUthF,GAuC5B,OApCA4/nB,EAAepyoB,UAAUmrE,kBAAoB,SAAUhoC,GACnD,OAAIA,EAAO73B,KACA1G,KAAKqqE,KAAK2mC,cAAczyE,GAGxBv+B,KAAKqqE,KAAKyD,gBAAgBvvC,IAGzCivmB,EAAepyoB,UAAUsrE,kBAAoB,SAAUnoC,GACnD,OAAIA,EAAO73B,KACA1G,KAAKqqE,KAAK6mC,cAAc3yE,GAGxBv+B,KAAKqqE,KAAK8mC,gBAAgB5yE,IAGzCivmB,EAAepyoB,UAAUmhN,SAAW,SAAUx/M,EAAOwhC,EAAQ73B,GACzD,MAAc,SAATA,GAA4B,aAATA,GAAgC,WAATA,GAAwBjJ,EAAkB8gC,GAI9ExhC,EAHAwhC,EAAOxhC,IAMtBywoB,EAAepyoB,UAAUohN,OAAS,SAAUz/M,EAAOwhC,GAC/C,IAAIx/B,EAAShC,EAIb,OAHKU,EAAkB8gC,IAAY9gC,EAAkBV,KACjDgC,EAASw/B,EAAOxhC,IAEbgC,GAEXyuoB,EAAepyoB,UAAUuS,WAAa,SAAUC,GACvCnQ,EAAkBmQ,IACnBD,GAAWC,IAGZ4/nB,KC1CPjqkB,GAAwB,WACxB,SAASA,EAAOvwD,GACZ,IAAIjT,EAAQC,KAMZA,KAAKs5oB,cAAe,EAMpBt5oB,KAAKu5oB,eAAgB,EAMrBv5oB,KAAKupmB,gBAAiB,EAMtBvpmB,KAAKw5oB,eAAgB,EAMrBx5oB,KAAKy5oB,iBAAkB,EAMvBz5oB,KAAK05oB,gBAAiB,EAKtB15oB,KAAK25oB,qBAAsB,EAM3B35oB,KAAK8lE,cAAe,EAapB9lE,KAAKkqC,UAMLlqC,KAAK45oB,qBAAsB,EAK3B55oB,KAAK65oB,QACL75oB,KAAK85oB,cAAgB,aAErB95oB,KAAK+5oB,gBAAkB,WAAc,OAAOh6oB,EAAMi6oB,gBAElDh6oB,KAAKi6oB,kBAAoB,WAAc,OAAOl6oB,EAAMm6oB,kBACpDl8oB,EAAMgC,KAAMgT,GACZhT,KAAKN,IAAM8kE,GAAO,eAClB,IAAI21kB,EAAiB,IAAI3M,GAmCzB,GAlCIx6nB,EAAQurB,SAAWvrB,EAAQurB,OAAOioC,UAAYxzD,EAAQurB,OAAOA,UAC7Dv+B,KAAKmmE,aAAag0kB,EAAe5zkB,kBAAkBvzD,EAAQurB,SAC3Dv+B,KAAKymE,UAAU0zkB,EAAezzkB,kBAAkB1zD,EAAQurB,UAEvDv+B,KAAK+hE,QACN/hE,KAAKupmB,gBAAiB,EACtBvpmB,KAAKw5oB,eAAgB,EACrBx5oB,KAAKs5oB,cAAe,GAEpBt5oB,KAAKgrC,WAAahrC,KAAKovD,YACvBpvD,KAAKovD,UAAY,UAEjBpvD,KAAKiP,UAAYjP,KAAKo6oB,oBACtBp6oB,KAAKk8B,WAAa0mC,GAAiB5iE,KAAKiP,UAAYjP,KAAKo6oB,mBAEzDp6oB,KAAKg4M,iBACLh4M,KAAKq6oB,iBAAmBz3kB,GAAiB5iE,KAAKg4M,iBAE9Ch4M,KAAKkqC,OAAO67jB,eACZ/lmB,KAAKs6oB,eAAiB13kB,GAAiB5iE,KAAKkqC,OAAO67jB,eAEnD/lmB,KAAKu6oB,eACLv6oB,KAAKg6oB,eAAiBp3kB,GAAiB5iE,KAAKu6oB,eAE5Cv6oB,KAAKw6oB,iBACLx6oB,KAAKk6oB,iBAAmBt3kB,GAAiB5iE,KAAKw6oB,iBAE9Cx6oB,KAAKy6oB,oBAAsBh9oB,EAAkBuC,KAAK06oB,WAA+B,iBAAlB16oB,KAAK06oB,YACpE16oB,KAAK06oB,SAAW,eAChB16oB,KAAK65oB,KAAK9+oB,OAAS2D,GACf2pE,WAAYroE,KAAKqoE,WACjB1H,MAAO,IAAIwH,GAAS37C,QAAUzvB,MAAOiD,KAAK0jE,iBAAmB1jE,KAAK+hE,MAAO/yC,KAAMhvB,KAAKyjE,kBACrFzjE,KAAK65oB,KAAK9+oB,SAEbiF,KAAK26oB,aAAc,CACnB,IAAIC,EAAM56oB,KAAK26oB,aACf36oB,KAAK26oB,aAAe,SAAkB5toB,EAAGC,GAIrC,GAHmB,iBAAR4toB,IACPA,EAAMt0oB,GAAUs0oB,EAAKh/oB,SAEE,eAAvBoE,KAAK85oB,cAAgC,CACrC,IAAIztiB,EAAIt/F,EACRA,EAAIC,EACJA,EAAIq/F,EAER,OAAOuuiB,EAAI7toB,EAAGC,KAGjBhN,KAAK26oB,cAAgB36oB,KAAKy6oB,oBAC3Bz6oB,KAAK26oB,aAAe,SAAU5toB,EAAGC,GAG7B,OAFAD,EAAIzG,GAAUvG,EAAM0jE,gBAAiBoE,GAAe9nE,KAAWgN,GAAG,IAClEC,EAAI1G,GAAUvG,EAAM0jE,gBAAiBoE,GAAe9nE,KAAWiN,GAAG,IACnC,eAAxBjN,EAAM+5oB,cAAiC73kB,GAASmtG,aAAariK,EAAGC,GAAKi1D,GAASktG,YAAYpiK,EAAGC,KA2DhH,OAtDAu2D,EAAOnoE,UAAUy/oB,iBAAmB,WAChC,OAAO76oB,KAAK85oB,eAGhBv2kB,EAAOnoE,UAAU0/oB,iBAAmB,SAAUzlnB,GAC1Cr1B,KAAK85oB,cAAgBzknB,GAGzBkuC,EAAOnoE,UAAU4L,cAAgB,SAAUg7D,GAGvC,IAAK,IADD1kE,EAAOgB,OAAOhB,KAAK0kE,GACd9lE,EAAI,EAAGA,EAAIoB,EAAKd,OAAQN,IAC7B8D,KAAK1C,EAAKpB,IAAM8lE,EAAO1kE,EAAKpB,KAOpCqnE,EAAOnoE,UAAUq/oB,gBAAkB,WAC/B,SAAUz6oB,KAAKqoE,aAAcroE,KAAKyjE,kBAGtCF,EAAOnoE,UAAU2/oB,aAAe,WAC5B,OAAO/6oB,KAAKg7oB,UAGhBz3kB,EAAOnoE,UAAU+qE,aAAe,SAAUppE,GACtCiD,KAAKg7oB,SAAWj+oB,GAGpBwmE,EAAOnoE,UAAU6/oB,UAAY,WACzB,OAAOj7oB,KAAKk7oB,UAGhB33kB,EAAOnoE,UAAUqrE,UAAY,SAAU1pE,GACnCiD,KAAKk7oB,SAAWn+oB,GAGpBwmE,EAAOnoE,UAAU+/oB,kBAAoB,WACjC,OAAOn7oB,KAAKk8B,YAGhBqnC,EAAOnoE,UAAUggpB,kBAAoB,WACjC,OAAOp7oB,KAAKq6oB,kBAGhB92kB,EAAOnoE,UAAUigpB,sBAAwB,WACrC,OAAOr7oB,KAAKs6oB,gBAGhB/2kB,EAAOnoE,UAAUkgpB,aAAe,WAC5B,OAAOt7oB,KAAKu7oB,kBAAoB,cAAgB,aAE7Ch4kB,Ktd2CP7jE,GAAM,EAyCNqlE,GAAc,KudnRPy2kB,GAAgB,gBAEhBC,GAAiB,iBAEjBC,GAAc,cAEdC,GAAiB,iBAEjBz3C,GAAgB,gBAEhB03C,GAAY,YAEZC,GAAe,eAEfC,GAAc,cAEdC,GAAiB,iBAEjBC,GAAgB,gBAEhBC,GAAgB,gBAEhBC,GAAe,eAEfC,GAAkB,kBAElBC,GAAiB,iBAEjBC,GAAkB,kBAElBC,GAAa,aAEbC,GAAa,aAEbC,GAAe,eAEfC,GAAU,UAEVC,GAAU,UAIVC,GAAgB,gBAEhBC,GAAkB,kBAIlBC,GAAW,WAEXC,GAAc,cAEdC,GAAc,cA0BdC,GAAkB,kBAElBC,GAA0B,0BAY1BC,GAAsB,sBAEtBC,GAAkB,kBAElBC,GAAmB,mBAOnBC,GAAc,eAEdC,GAAa,cAEbC,GAAY,aAEZC,GAAe,gBAEfC,GAAW,YAEXC,GAAU,WAEVC,GAAsB,wBAEtBryM,GAAe,gBAEfsyM,GAAkB,mBAElBC,GAAkB,mBAIlBC,GAAe,kBAIfC,GAAe,mBAIfC,GAAiB,qBAIjBC,GAAiB,qBAIjBC,GAAkB,mBAIlBC,GAAyB,0BAIzBC,GAAgB,oBAIhBC,GAAkB,sBAElBC,GAAkB,mBAElBC,GAAwB,0BAExBC,GAAuB,yBAEvBC,GAAoB,qBAYpBC,GAAwB,eAExBC,GAAoB,oBAEpBC,GAAc,cAEd3/Q,GAAa,cAEbhlQ,GAAQ,QAER5nH,GAAU,UAEVwsoB,GAA0B,yBAI1BC,GAAqB,uBAErBC,GAAwB,0BAIxBC,GAAY,aAEZC,GAAc,eAEdC,GAAiB,mBAEjBC,GAAa,cAEbC,GAAqB,sBAIrBC,GAAsB,wBAEtBC,GAAW,WAEXC,GAAiB,kBAIjBC,GAAU,WAEVC,GAAiB,kBAEjBj5C,GAAa,cAUbk5C,GAAe,gBAIfC,GAAiB,kBAEjBC,GAAe,gBAEfC,GAAgB,iBAEhBC,GAAa,cAEbC,GAAkB,oBAElBC,GAAc,eAEdC,GAAY,aAIZC,GAAsB,sBAItBC,GAA2B,2BAI3BC,GAAoB,oBAIpBC,GAAyB,yBAMzBC,GAAe,eAUfC,GAAa,aAEbC,GAAsB,sBAEtBC,GAAkB,oBAElBC,GAAuB,uBAEvBC,GAAoB,oBAEpBpoa,GAAgB,gBAEhBqoa,GAAgB,gBAEhB94kB,GAAiB,iBAEjB+4kB,GAAkB,kBAElBC,GAAoB,oBAEpBC,GAAa,cAEbC,GAAmB,mBAEnBC,GAAe,eAEfC,GAAc,cAEdC,GAAc,eAEdC,GAAkB,mBbvT7B,SAAW3V,GAEPA,EAASA,EAAe,KAAI,GAAK,OAEjCA,EAASA,EAAiB,OAAI,GAAK,SAEnCA,EAASA,EAAkB,QAAI,GAAK,UAEpCA,EAASA,EAAuB,aAAI,GAAK,eAEzCA,EAASA,EAAyB,eAAI,GAAK,iBAE3CA,EAASA,EAAiB,OAAI,GAAK,SAEnCA,EAASA,EAAiB,OAAI,GAAK,SAEnCA,EAASA,EAAuB,aAAI,GAAK,eAEzCA,EAASA,EAA4B,kBAAI,GAAK,oBAE9CA,EAASA,EAAiB,OAAI,GAAK,SAEnCA,EAASA,EAAuB,aAAI,IAAM,eAE1CA,EAASA,EAAwB,cAAI,IAAM,gBAE3CA,EAASA,EAAuB,aAAI,IAAM,eAE1CA,EAASA,EAAuB,aAAI,IAAM,eAE1CA,EAASA,EAAwB,cAAI,IAAM,gBA9B/C,CA+BGA,KAAaA,QAKhB,IAAW4V,IACX,SAAWA,GAEPA,EAAWA,EAAmB,OAAI,GAAK,SAEvCA,EAAWA,EAAoB,QAAI,GAAK,UAExCA,EAAWA,EAAoB,QAAI,GAAK,UAN5C,CAOGA,KAAeA,QAKlB,IAAWC,IACX,SAAWA,GACPA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAmB,MAAI,GAAK,QACxCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAA2B,cAAI,GAAK,gBAChDA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAuB,UAAI,IAAM,YAC7CA,EAAYA,EAAwB,WAAI,IAAM,aAZlD,CAaGA,KAAgBA,QcnDnB,IAAIC,GAAgC,WAKhC,SAASA,EAAejhpB,EAAQkhpB,EAAgBp7kB,GAC5CpmE,KAAKyhpB,qBACLzhpB,KAAK0hpB,gBAAkB,IAAIv5kB,GAC3BnoE,KAAK2hpB,aAAc,EACnB3hpB,KAAK4yB,UACL5yB,KAAK4hpB,aAAc,EACnB5hpB,KAAKM,OAASA,EACdN,KAAKsD,GAAKtD,KAAKM,OAAOU,QAAQsC,GAC9BtD,KAAKomE,eAAiBA,EACtBpmE,KAAKwhpB,eAAiBA,EACtBxhpB,KAAKm6oB,eAAiB,IAAI3M,GAAextoB,KAAKM,OAAO0N,QACrDhO,KAAK6hpB,SAAW/uoB,GAAe9S,KAAKM,OAAOa,eAAe,GAASqR,SAAS,EAAMa,MAAO,MACzFrT,KAAK8hpB,UAAYhvoB,GAAe9S,KAAKM,OAAOa,eAAe,GAASqR,SAAS,EAAOa,MAAO,MAC3FrT,KAAK6hpB,SAAS38oB,aAAalF,KAAKM,OAAOa,cAAc,SACjDkC,UAAW,eAAgBI,OAASiD,KAAM,cAC1C1G,KAAK6hpB,SAAS7koB,YAClBhd,KAAK8hpB,UAAU58oB,aAAalF,KAAKM,OAAOa,cAAc,SAClDkC,UAAW,eAAgBI,OAASiD,KAAQ,cAC5C1G,KAAK8hpB,UAAU9koB,YACnBhd,KAAK8hpB,UAAUn/oB,cAAc,YAAYmB,UAAUM,IAAI,aACnDpE,KAAKM,OAAO4S,WACZvP,GAAU3D,KAAK6hpB,SAAU7hpB,KAAK8hpB,YAAa,UA+uBnD,OAvuBAP,EAAenmpB,UAAUiX,QAAU,WAC/BrS,KAAKkioB,eAETqf,EAAenmpB,UAAUspB,WAAa,WAClCnf,GAAanB,IAAIpE,KAAKgmE,IAAK,QAAShmE,KAAK4lH,aAAc5lH,MACvDA,KAAK+hpB,cAAgBpipB,EAASK,KAAKgipB,eAAgB,KACnDz8oB,GAAanB,IAAIpE,KAAKgmE,IAAIrjE,cAAc,kBAAmB,QAAS3C,KAAK+hpB,cAAe/hpB,OAE5FuhpB,EAAenmpB,UAAU6pH,aAAe,WACpC1/G,GAAahB,OAAOvE,KAAKgmE,IAAK,QAAShmE,KAAK4lH,cAC5C,IAAIljH,EAAO1C,KAAKgmE,IAAIrjE,cAAc,kBAC9BD,GACA6C,GAAahB,OAAO7B,EAAM,QAAS1C,KAAK+hpB,gBAGhDR,EAAenmpB,UAAU6mpB,iBAAmB,SAAUhipB,EAAMiipB,EAAOC,GAC/D,IAAIpipB,EAAQC,KACRoipB,KACAC,KACA1hlB,EAAQ3gE,KAAK0hpB,gBAAgBripB,QACjCW,KAAKgT,QAAQgvD,OAAOqG,WAChByjG,aAAanrG,EAAM+H,MAAMy5kB,IAAajwc,KAAK,SAAUrxM,GACrDd,EAAMiT,QAAQgvD,OAAOwG,WAAa3nE,EAAE9B,OACpCgB,EAAMO,OAAOyN,OAAOu0oB,IAAwB//kB,UAAW6/kB,EAAYpglB,OAAQjiE,EAAMiT,QAAQgvD,SACzF/hE,EAAK6pE,YAAcs4kB,EAAW7/kB,UAAUisG,WACxC4ze,EAAW7/kB,UAAUisG,WAAWpvK,QAAQ,SAAUmjpB,GAC9CF,EAAiB79oB,MACbu9D,MAAOwglB,EAAMxglB,MACbQ,UAAW,KACXsG,UAAW05kB,EAAM3ilB,WACjB6sG,aAAc81e,EAAM91e,aACpB7jG,SAAU25kB,EAAM35kB,SAChB7rE,MAAOwlpB,EAAMxlpB,MACb2J,KAAM3G,EAAMiT,QAAQtM,SAG5BzG,EAAKoipB,iBAAmBA,EAAiB7lpB,OAAS6lpB,EAC9CH,EAAMh4mB,OAAO,SAAUu7B,GAAO,OAAOA,EAAI1D,MAAQhiE,EAAMiT,QAAQ+uD,QACnEhiE,EAAMiT,QAAQxX,QAAQyE,MAG9BshpB,EAAenmpB,UAAUonpB,cAAgB,SAAUvipB,EAAMlD,GACrD,IAAI6rE,EAAW5oE,KAAKM,OAAOmipB,gBAAgB1qQ,WACT,WAA7B/3Y,KAAKgT,QAAQgvD,OAAOt7D,KAAoB,WAAa,QAAY1G,KAAKgT,QAAQgvD,OAAOt7D,KAAO,aAAe,WAC5Gg8oB,EAAkB,IAAIh5kB,GAAU1pE,KAAKgT,QAAQgvD,OAAOyB,gBAAiBmF,EAAU7rE,GAAO,EAAMiD,KAAKM,OAAOkhpB,eAAe/0e,cAC3HzsK,KAAKiipB,iBAAiBhipB,GAAOA,EAAKoipB,kBAAmBK,IAEzDnB,EAAenmpB,UAAUunpB,eAAiB,SAAU9hpB,GACnCA,EAAEsG,OACJrD,UAAUK,SAAS,mBAC1BnE,KAAK4ipB,OAAO7lpB,MAAQ,GACpBiD,KAAK6ipB,oBACL7ipB,KAAK8ipB,mBACL9ipB,KAAK4ipB,OAAO1gpB,UAGpBq/oB,EAAenmpB,UAAU4mpB,eAAiB,SAAUnhpB,GAChDb,KAAK6ipB,oBACL7ipB,KAAK8ipB,oBAETvB,EAAenmpB,UAAU0npB,iBAAmB,WACpC9ipB,KAAK4ipB,OAAO7lpB,MAAMP,OAClBsH,EAAU9D,KAAK+ipB,OAAQ,qBAAsB,kBAG7Cj/oB,EAAU9D,KAAK+ipB,OAAQ,kBAAmB,sBAQlDxB,EAAenmpB,UAAU+lU,kBAAoB,SAAU9jU,GACnD,OAAO2C,KAAKk/E,UAAUjF,YAAY58E,IAEtCkkpB,EAAenmpB,UAAUkrmB,iBAAmB,WACxC,IAAIj+hB,EAAaroE,KAAKgT,QAAQq1D,WAE9B,KAAMA,aAAsBC,IACxB,IAAK,IAAIpsE,EAAI,EAAGA,EAAImsE,EAAW7rE,OAAQN,IACnC,GAHE,iBAGSmsE,EAAoB,CAC3B,IAAIvrE,KACJA,EAAIkD,KAAKgT,QAAQ+uD,OAASsG,EAAWnsE,GACrCmsE,EAAWnsE,GAAKY,IAKhCykpB,EAAenmpB,UAAU4npB,YAAc,SAAUhwoB,GAC7ChT,KAAKgT,QAAUA,EACfhT,KAAKyhpB,kBAAoBzuoB,EAAQiwoB,oBACjCjjpB,KAAKgT,QAAQq1D,WAAar1D,EAAQq1D,WAClCroE,KAAKsmmB,mBACLtmmB,KAAKgT,QAAQtM,KAAOsM,EAAQtM,MAAQ,SACpC1G,KAAKgT,QAAQurB,OAASvrB,EAAQurB,QAAU,GACxCv+B,KAAKgT,QAAQkwoB,gBAAkBlwoB,EAAQkwoB,iBAAmBljpB,KAAKM,OAAOkhpB,eAAen+kB,QACrFrjE,KAAKgT,QAAQw4J,cAAgBx4J,EAAQw4J,eAAiBxrK,KAAKM,OAAO6ipB,aAAa9/kB,QAC/ErjE,KAAKgT,QAAQ2tD,MAAQ3tD,EAAQ2tD,OAAS,IAAIwH,GAC1CnoE,KAAKgT,QAAQowoB,mBAAqBpwoB,EAAQowoB,qBAAsB,EAChEpjpB,KAAK4yB,UACL5yB,KAAKk/E,UAAYlsE,EAAQksE,UACzBl/E,KAAKkxmB,WAAal+lB,EAAQkwoB,gBAAgB1mpB,QAE9C+kpB,EAAenmpB,UAAUiopB,iBAAmB,SAAUrwoB,GAMlD,GALAhT,KAAKgmE,IAAMhmE,KAAKM,OAAOa,cAAc,OACjCmC,GAAItD,KAAKsD,GAAKtD,KAAKgT,QAAQtM,KAAO,YAClCrD,UAAW,oCAEfrD,KAAKsjpB,KAAOtjpB,KAAKM,OAAOa,cAAc,OAASkC,UAAW,uBACrD2P,EAAQuwoB,cAAe,CACxBvjpB,KAAK4ipB,OAAS5ipB,KAAKM,OAAOa,cAAc,SACpCmC,GAAItD,KAAKsD,GAAK,aACdD,UAAW,kBAEfrD,KAAK+ipB,MAAQ/ipB,KAAKM,OAAOa,cAAc,QACnCkC,UAAW,yDAA0DI,OACjEiD,KAAM,OAAQg8B,MAAO1iC,KAAKmhU,kBAAkB,aAGpDnhU,KAAK2tmB,UAAY3tmB,KAAKM,OAAOa,cAAc,QAAUkC,UAAW,yBAChErD,KAAK2tmB,UAAUhsmB,YAAY3B,KAAK4ipB,QAChC5ipB,KAAKsjpB,KAAK3hpB,YAAY3B,KAAK2tmB,WAC3B,IAAI61C,GACAxipB,QAAShB,KAAK4ipB,OAAQ17nB,eAAgB,QAASjkB,YAC3CgkB,YAAajnB,KAAKmhU,kBAAkB,YAG5Cr1S,GAAM48G,YAAY86gB,EAAWxjpB,KAAKM,OAAOa,eACzCnB,KAAK2tmB,UAAUhrmB,cAAc,kBAAkBhB,YAAY3B,KAAK+ipB,OASpE,OAPA/ipB,KAAK47J,QAAU57J,KAAKM,OAAOa,cAAc,OAASkC,UAAW,cAC7DrD,KAAKyjpB,KAAOzjpB,KAAKM,OAAOa,cAAc,OAClCmC,GAAItD,KAAKsD,GAAKtD,KAAKgT,QAAQtM,KAAO,gBAClCrD,UAAW,4BAEfrD,KAAK47J,QAAQj6J,YAAY3B,KAAKyjpB,MAC9BzjpB,KAAKsjpB,KAAK3hpB,YAAY3B,KAAK47J,SACpB57J,KAAKsjpB,MAEhB/B,EAAenmpB,UAAUg9f,WAAa,SAAUplf,GAC5C,IAAI/S,GACA+pM,YAAa05c,GAAyBC,YAAa3jpB,KACnD4jpB,WAAY5jpB,KAAKgT,QAAQ+uD,MAAO8hlB,WAAY7jpB,KAAKgT,QAAQtM,KAAMkzB,QAAQ,GAE3E55B,KAAKM,OAAOqmB,QAAQm9nB,GAAoB7jpB,GACpCA,EAAK25B,SAGT55B,KAAKgnE,UAAY,IAAI0xD,IACjBphG,SAAS,EAAOgF,QAASt8B,KAAKsjpB,KAC9BrhpB,MAAOjC,KAAKkioB,YAAY7moB,KAAK2E,MAC7BgW,OAASvY,EAAkB87D,GAAavmD,EAAQ7L,OAAQ,cACjDnH,KAAKM,OAAOU,QAAQ8C,UAAUK,SAAS,YAAc,IAAM,IAClEgD,OAAQnH,KAAKM,OAAOU,QAAS28H,mBAAqB7lG,OAAQ,QAC1DiiG,UACQE,MAAOj6H,KAAK+jpB,SAAS1opB,KAAK2E,MAC1Bg6H,aACI19F,QAASt8B,KAAKmhU,kBAAkBnhU,KAAKgkpB,QAAU,WAAa,gBAC5D/woB,SAAU,YAAawxG,WAAW,KAItCwV,MAAOj6H,KAAK+jpB,SAAS1opB,KAAK2E,MAC1Bg6H,aAAe/mH,SAAU,SAAUqpB,QAASt8B,KAAKmhU,kBAAkBnhU,KAAKgkpB,QAAU,eAAiB,kBAE3Gp2X,QAAS5tR,KAAKikpB,cAAc5opB,KAAK2E,MACjC0B,KAAM1B,KAAK49H,WAAWviI,KAAK2E,QAE/BA,KAAKgnE,UAAUn2B,SAAS7wC,KAAKgmE,KAC7BhmE,KAAKgnE,UAAUhmE,QAAQ0D,MAAMsrD,UAAY,QACzChwD,KAAKgnE,UAAUwwD,OACfx3H,KAAK0kB,aACLhK,IAAgBvT,OAAQnH,KAAK47J,SAAW57J,KAAKM,OAAOa,eACpD6gB,GAAYhiB,KAAK47J,SACjB57J,KAAKkkpB,eAET3C,EAAenmpB,UAAU6opB,cAAgB,SAAUpjpB,GAC1C2K,GAAQqb,SAIT7mB,KAAKgnE,UAAU9yD,UAAakC,EAAG,SAAUC,EAAG,UAH5C0wD,GAAqB/mE,KAAKgT,QAAQ7L,OAAQnH,KAAKgnE,UAAWhnE,KAAKM,QAKnEN,KAAKM,OAAOyN,OAAOo2oB,GAA4BtjpB,IAEnD0gpB,EAAenmpB,UAAUo1nB,WAAa,SAAUx9mB,GAC5ChT,KAAKgjpB,YAAYhwoB,GACjBhT,KAAKqjpB,iBAAiBrwoB,GACtBhT,KAAKo4f,WAAWplf,IAEpBuuoB,EAAenmpB,UAAU8moB,YAAc,WACnC,GAAIlioB,KAAKgnE,YAAchnE,KAAKgnE,UAAUmmB,YAAa,CACvBntF,KAAKM,OAAO8jpB,aAAal6mB,OAAO,SAAUu7B,GAAO,OAAOA,EAAI41kB,0BAC9D7+oB,QAClBwD,KAAKM,OAAO+jpB,iBAAiB,uBAEjCrkpB,KAAKM,OAAOyN,OAAOu2oB,IAA0BvilB,MAAO/hE,KAAKgT,QAAQ+uD,QACjE/hE,KAAKgnE,UAAU30D,UACfrS,KAAKilH,eACL1gH,EAAOvE,KAAKgmE,KACZhmE,KAAKgmE,IAAM,OAGnBu7kB,EAAenmpB,UAAUmppB,YAAc,WAC/Bx+kB,GAAgB/lE,KAAKM,QACrBN,KAAKM,OAAOyN,OAAOy2oB,IAAuBj+oB,SAAUvG,KAAMxE,QAASwE,KAAKukpB,cAG5EvkpB,KAAKgT,QAAQxX,SAAUw3D,OAAQ,eAAgB+O,MAAO/hE,KAAKgT,QAAQ+uD,SAEvEw/kB,EAAenmpB,UAAU2opB,SAAW,SAAUljpB,GAC1C,GAAIb,KAAK2hpB,YAAa,CAClB,GAAuC,UAAnC9gpB,EAAEsG,OAAOnE,QAAQ4S,cAA2B,CAC5C,IAAI7Y,EAAQ8D,EAAEsG,OAAOpK,MACjBkD,GACA+yD,OAAQ,YAAaqvlB,kBACjBtglB,MAAO/hE,KAAKgT,QAAQ+uD,MACpB6G,SAAU5oE,KAAKM,OAAOmipB,gBAAgB1qQ,WACJ,WAA7B/3Y,KAAKgT,QAAQgvD,OAAOt7D,KAAoB,WAAa,QACxB,SAA7B1G,KAAKgT,QAAQgvD,OAAOt7D,MAAgD,aAA7B1G,KAAKgT,QAAQgvD,OAAOt7D,MAC3B,YAA7B1G,KAAKgT,QAAQgvD,OAAOt7D,KAAqB,QAAU,WAC3D3J,MAAOA,EAAO8rE,WAAW,EAAOniE,KAAM1G,KAAKgT,QAAQgvD,OAAOt7D,MAE9Dq7D,MAAO/hE,KAAKgT,QAAQ+uD,OAExBhlE,EAAQiD,KAAKgT,QAAQgvD,OAAOy4kB,kBAAoBz6oB,KAAKwipB,cAAcvipB,EAAMlD,GACrEiD,KAAKgT,QAAQxX,QAAQyE,GAAQD,KAAKkioB,kBAErC,CACD,IAAIlzmB,EAAOnuB,EAAEsG,OAAO6V,WAAWf,YAAYrG,cACvC5V,KAAKmhU,kBAAkBnhU,KAAKgkpB,QAAU,WAAa,gBAAgBpuoB,gBAAkBoZ,EACrFhvB,KAAKykpB,iBAEAzkpB,KAAKmhU,kBAAkB,eAAevrT,gBAAkBoZ,GAC7DhvB,KAAKukpB,cAGbvkpB,KAAKkioB,kBAEqC,UAAnCrhoB,EAAEsG,OAAOnE,QAAQ4S,gBACxB5V,KAAKukpB,cACLvkpB,KAAKkioB,gBAGbqf,EAAenmpB,UAAUqppB,eAAiB,WACtC,IAAIjyoB,KAAanR,MAAMC,KAAKtB,KAAKyjpB,KAAKjipB,iBAAiB,+BACnDkjpB,EAAO,QACPC,EAAgC,WAAtB3kpB,KAAKgT,QAAQtM,MACvB1G,KAAKgT,QAAQowoB,mBACb1tM,GACA3zY,MAAO/hE,KAAKgT,QAAQ+uD,MAAOQ,UAAW,KACtCqG,SAAU87kB,EAAMh+oB,KAAM1G,KAAKgT,QAAQtM,KAAMmiE,UAAW87kB,EAASl4e,aAAczsK,KAAKM,OAAOkhpB,eAAe/0e,cAEtGozU,EAAa7/e,KAAK4kpB,WAAapyoB,EAAQhW,QAAUwD,KAAK4kpB,SAAWpyoB,EAAQhW,OAASgW,EAAQhW,OAC1Fqjf,IACA6kK,EAAO,WACPlyoB,KAAanR,MAAMC,KAAKtB,KAAKyjpB,KAAKjipB,iBAAiB,iCACnDk0c,EAASnzY,UAAY,MACrBmzY,EAAS9sY,SAAW,YAExB,IAAI7rE,EACA8npB,EACArllB,KACAi2f,EAAcz1jB,KAAK2tmB,UAAUhrmB,cAAc,kBAC/C,GAAI6P,EAAQhW,SAAWwD,KAAK4kpB,UAAanvF,EAAY14jB,OAA+B,KAAtB04jB,EAAY14jB,MAAe,CACrF,IAAK,IAAIb,EAAI,EAAGA,EAAIsW,EAAQhW,OAAQN,IAOhC,GANAa,EAAQiD,KAAK4yB,OAAO2mC,GAAa/mD,EAAQtW,GAAI,YAAY2W,aAAa,QACtEgyoB,EAAOnmpB,MAAa3B,MAAOA,GAAS24c,GAChC34c,IAAUA,EAAMmQ,WAAW1Q,SAC3BqopB,EAAKj8kB,SAAWi3a,EAAa,WAAa,SAE9Crgb,EAAKh7D,KAAKqgpB,GACN9+kB,GAAgB/lE,KAAKM,QAKrB,YAJAN,KAAKM,OAAOyN,OAAOy2oB,IACfj+oB,SAAUvG,KAAMxE,QAASwE,KAAKykpB,eAAgBv4Y,KAAM24Y,EAAK9ilB,MAAOoqM,KAAM04Y,EAAKtilB,UAAW6pM,KAAMy4Y,EAAKj8kB,SACjGyjM,KAAMw4Y,EAAKh8kB,UAAWqnM,KAAM20Y,EAAKp4e,aAAc0jG,KAAM00Y,EAAK9npB,QAKtEiD,KAAK8kpB,eAAetllB,QAGpBx/D,KAAKukpB,eAGbhD,EAAenmpB,UAAU0ppB,eAAiB,SAAU5C,GAChD,IACI3/kB,EADAwilB,EAAW7C,EAAM,GAErB,IAAKzkpB,EAAkBsnpB,GAAW,CAC9BxilB,EAAYwilB,EAASj7kB,YAAci7kB,EAASj7kB,YACxC,IAAIJ,GAAUq7kB,EAAShjlB,MAAOgjlB,EAASn8kB,SAAUm8kB,EAAShopB,OAAQgopB,EAASl8kB,UAAWk8kB,EAASt4e,cACnG,IAAK,IAAI/oJ,EAAI,EAAGA,EAAIw+nB,EAAM1lpB,OAAQknB,IAC9B6+C,OAAqCrnE,IAAzBgnpB,EAAMx+nB,GAAGomD,YACjBvH,EAAU2/kB,EAAMx+nB,GAAG6+C,WAAW2/kB,EAAMx+nB,GAAGomD,aACvCvH,EAAU2/kB,EAAMx+nB,GAAG6+C,WAAW2/kB,EAAMx+nB,GAAGq+C,MAAOmglB,EAAMx+nB,GAAGklD,SAAUs5kB,EAAMx+nB,GAAG3mB,OAAQmlpB,EAAMx+nB,GAAGmlD,UAAWq5kB,EAAMx+nB,GAAG+oJ,cAEvH,IAAIxsK,GACA+yD,OAAQ,YAAaqvlB,iBAAkBH,EAAOnglB,MAAO/hE,KAAKgT,QAAQ+uD,MAClE+H,YAAaJ,GAAUG,GAAGtH,IAE9BviE,KAAKgT,QAAQxX,QAAQyE,KAG7BshpB,EAAenmpB,UAAUynpB,kBAAoB,WACzC,IAAI9ipB,EAAQC,KACRuoB,EAAMvoB,KAAK4ipB,OAAO7lpB,MAClBilE,EAAShiE,KAAKgT,QAAQgvD,OACtBrB,EAAQqB,EAAOy4kB,kBAAoBz6oB,KAAK0hpB,gBAAgBripB,QAAUW,KAAKgT,QAAQ2tD,MAAMthE,QACrF2lpB,EAAehlpB,KAAKgT,QAAQ2tD,MAAMthE,QAClC4lpB,EAAgC,WAAtBjlpB,KAAKgT,QAAQtM,MAAqBkV,WAAW2M,GAAQ3M,WAAW2M,GAAOA,EACjFqgD,EAAW5oE,KAAKM,OAAOmipB,gBAAgB1qQ,WAChB,WAAtB/3Y,KAAKgT,QAAQtM,KAAoB,WAAa,QAAY1G,KAAKgT,QAAQtM,KAAO,aAAe,WAE9F+lK,EAAezsK,KAAKM,OAAOkhpB,eAAe/0e,aAC1C1qG,EAAQC,EAAOy4kB,kBAAoBz4kB,EAAOyB,gBAAkBzB,EAAOD,MACvEkjlB,EAAqB,KAAXA,QAA4B/ppB,IAAX+ppB,OAAwB/ppB,EAAY+ppB,EAC/D,IAAIC,EACsB,YAAtBllpB,KAAKgT,QAAQtM,YACExL,IAAX+ppB,IACsF,IAAtFjlpB,KAAKmhU,kBAAkB,cAAcvrT,cAAcrX,QAAQ0mpB,EAAOrvoB,eAClEqvoB,EAAS,YAEO/ppB,IAAX+ppB,IACkF,IAAvFjlpB,KAAKmhU,kBAAkB,eAAevrT,cAAcrX,QAAQ0mpB,EAAOrvoB,iBACnEqvoB,EAAS,SAEbA,EAAoB,SAAXA,EACTr8kB,EAAW,SAEf5oE,KAAKmlpB,YAAYxklB,GACjB,IAAI1gE,GACA+pM,YDrRmB,oBCsRnB25c,YAAa3jpB,KAAM4jpB,WAAY7hlB,EAAOC,OAAQA,EAC9C4G,SAAUA,EAAUC,WArBR,EAqB8B4jG,aAAcA,EAAc24e,kBAAmB,KACzFzklB,MAAOA,GAIX,GAFA3gE,KAAKM,OAAOqmB,QAAQm9nB,GAAoB7jpB,GACxCilpB,EAAW,IAAIx7kB,GAAU3H,EAAO9hE,EAAK2oE,SAAUq8kB,EAAQhlpB,EAAK4oE,UAAW5oE,EAAKwsK,cAClD,SAAtBzsK,KAAKgT,QAAQtM,MAAyC,aAAtB1G,KAAKgT,QAAQtM,KAAqB,CAGlE,GAFAu+oB,EAASjlpB,KAAKm6oB,eAAe59b,SAASh0L,EAAKvoB,KAAKgT,QAAQkooB,SAAUl7oB,KAAKgT,QAAQtM,MAC/EkiE,EAAW,QACPnrE,EAAkBwnpB,IAAW18nB,EAAI/rB,OACjC,OAMJ0opB,EAAWv8kB,IAHP5G,MAAOA,EAAO6G,SAAUA,EAAU7rE,MAAOkopB,EAAQp8kB,WAjCzC,EAkCR4jG,aAAcA,GAEqBzsK,KAAKgT,QAAQtM,MAEpD6hB,EAAI/rB,QACJmkE,EAAM+H,MAAMw8kB,GAEhBjlpB,EAAKmlpB,kBAAqB3npB,EAAkBwC,EAAKmlpB,mBAA8C,IAAzBnlpB,EAAKmlpB,kBAC3E,IAAIhD,KACJpgoB,GAAYhiB,KAAK47J,SACjB57J,KAAK4hpB,aAAc,EACf5/kB,EAAOy4kB,mBAAqBlynB,EAAI/rB,OAEhCwlE,EAAOqG,WAAWyjG,aAAanrG,GAAOuxI,KAAK,SAAUrxM,GACjD,IAAI2nE,EAAazoE,EAAMiT,QAAQgvD,OAAOwG,WACtCzoE,EAAMiT,QAAQgvD,OAAOwG,WAAa3nE,EAAE9B,OACpCgB,EAAMO,OAAOyN,OAAOu0oB,IAAwB//kB,UAAW6/kB,EAAYpglB,OAAQA,IACvEoglB,EAAW7/kB,UAAUisG,WAAWhyK,OAChCwopB,EAAat8kB,MAAM05kB,EAAW7/kB,WAG9BxiE,EAAM6hpB,aAAc,EAExB7hpB,EAAMiT,QAAQgvD,OAAOwG,WAAaA,EAClCw8kB,EAAat3e,KAAKztK,EAAKmlpB,mBACvBrlpB,EAAM2sK,OAAOzsK,EAAM+kpB,MAIvBrklB,EAAM+sG,KAAKztK,EAAKmlpB,mBAChBplpB,KAAK0sK,OAAOzsK,EAAM0gE,KAG1B4glB,EAAenmpB,UAAUsxK,OAAS,SAAUzsK,EAAM0gE,GAC1C3gE,KAAKM,OAAO+nE,YAAc,WAAYroE,KAAKM,OAAO+nE,WAClDroE,KAAKqlpB,YAAYplpB,EAAM0gE,GAGvB3gE,KAAKslpB,cAAc3klB,IAG3B4glB,EAAenmpB,UAAUmqpB,qBAAuB,SAAUlilB,GAKtD,IAAK,IAJDmrG,EAAa+ye,EAAeiE,aAAanilB,GACzCoilB,KACArD,KACAsD,EAAgB1lpB,KAAKM,OAAOqlpB,uBACvBvnpB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKkxK,GAAapwK,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACjE,IAAIkM,EAAOzH,EAAGzE,GACVqnE,EAAMsD,GAA2Bz+D,EAAMo7oB,GACvCjglB,GACAzlE,KAAKM,OAAOyN,OAAOu0oB,IAAwB//kB,UAAW6/kB,EAAYpglB,OAAQyD,IACtE28kB,EAAW7/kB,UAAUisG,WAAWhyK,QAChCippB,EAAcjhpB,KAAKklE,GAAUG,GAAGu4kB,EAAW7/kB,UAAUisG,cAIzDi3e,EAAcjhpB,KAAKgqK,EAAWlkK,IAGtC,OAAOm7oB,EAAcjppB,QAAUktE,GAAUE,IAAI67kB,IAEjDlE,EAAenmpB,UAAU+ppB,YAAc,SAAUxklB,GAC7C,IAAIillB,EAAiB3jlB,GAASoqG,SAASrsK,KAAKM,OAAOkhpB,eAAen+kB,QAAS,SAK3E,OAJIuilB,EAAernpB,QAAQyB,KAAKgT,QAAQgvD,OAAOD,SAAW,IACtD6jlB,EAAiBA,EAAeproB,OAAOxa,KAAKgT,QAAQgvD,OAAOD,QAE/DpB,EAAM0rG,SAASu5e,GACRjllB,GAEX4glB,EAAenmpB,UAAU8opB,WAAa,WAClC,IAAIvjlB,EAAQ3gE,KAAKM,OAAOqgE,MAAMthE,QAC9BshE,EAAMqtG,gBACNhuK,KAAKmlpB,YAAYxklB,GACjB,IAAI1gE,GACA+pM,YAAa67c,GAA4BlC,YAAa3jpB,KAAM2gE,MAAOA,EAAOyklB,kBAAmB,MAEjGplpB,KAAKM,OAAOqmB,QAAQm9nB,GAAoB7jpB,GACxCA,EAAKmlpB,kBAAqB3npB,EAAkBwC,EAAKmlpB,mBAA8C,IAAzBnlpB,EAAKmlpB,kBAC3EzklB,EAAM+sG,KAAKztK,EAAKmlpB,mBACZplpB,KAAKM,OAAO+nE,YAAc,WAAYroE,KAAKM,OAAO+nE,WAClDroE,KAAKqlpB,YAAYplpB,EAAM0gE,GAGvB3gE,KAAK8lpB,qBAAqBnllB,GAAO,IAGzC4glB,EAAenmpB,UAAUiqpB,YAAc,SAAUplpB,EAAM0gE,GACnD,IAAI5gE,EAAQC,KACFA,KAAK+lpB,aAAa9lpB,EAAM0gE,GAC9B8xI,QAAQP,KAAK,SAAUrxM,GACvBd,EAAMimpB,YAAYnlpB,MAG1B0gpB,EAAenmpB,UAAU2qpB,aAAe,SAAU9lpB,EAAM0gE,GACpD,IAAIlV,EACJA,EAAQzrD,KAAKimpB,sBAAsBtllB,GACnC,IAAIpnC,EAAM,IAAI84K,GAId,OAHA5mJ,EAAM4c,WAAa9uC,EAAIwvD,QACvBt9B,EAAMuH,OAAS/yD,EACfD,KAAKM,OAAOqmB,QAAQu/nB,GAAwBz6lB,GACrClyB,GAGXgonB,EAAenmpB,UAAU6qpB,sBAAwB,SAAUtllB,GACvD,IAAIwllB,EAAS,IAAIz6c,GACbr6B,EAAK,IAAI/oG,IAAcxtC,IAAK,GAAIi2I,QAAS,IAAI26B,KAC7CjgJ,EAAQ06lB,EAAO/7c,aAAa/4B,EAAI1wG,GAEpC,OADWrU,KAAKuB,MAAMpC,EAAMlvD,OAIhCglpB,EAAenmpB,UAAU0qpB,qBAAuB,SAAUnllB,EAAO72C,GAC7D,IAAI/pB,EAAQC,KACZA,KAAKgT,QAAQq1D,WAAaroE,KAAKgT,QAAQq1D,sBAAsBC,GACzDtoE,KAAKgT,QAAQq1D,WAAa,IAAIC,GAAYtoE,KAAKgT,QAAQq1D,YAC3D,IAAI+9kB,KACAC,KACArmpB,KAAKgT,QAAQgvD,OAAOy4kB,mBAAqB3wnB,IACzCs8nB,EAAW5hpB,KAAKxE,KAAKgT,QAAQgvD,OAAOqG,WAAWyjG,aAAa9rK,KAAK0hpB,kBACjE2E,EAAS7hpB,KAAK,SAAUjI,GAAQ,OAAOwD,EAAM+nE,eAAiBvrE,KAElE6ppB,EAAW5hpB,KAAKxE,KAAKgT,QAAQq1D,WAAWyjG,aAAanrG,IACrD0llB,EAAS7hpB,KAAKxE,KAAKgmpB,YAAY3qpB,KAAK2E,OACpC,IAAI9D,EAAI,EACR4sF,QAAQ0qH,IAAI4yc,GAAYl0c,KAAK,SAAUrxM,GACnCA,EAAEzB,QAAQ,SAAU7C,GAChB8ppB,EAASnqpB,KAAKK,EAAKwC,aAI/BwipB,EAAenmpB,UAAU4qpB,YAAc,SAAUnlpB,GAC7Cb,KAAKsmpB,SAAWzlpB,EAChB,IAAI8/D,EAAQ,IAAIwH,GAChB,GAAKnoE,KAAKgT,QAAQkwoB,gBAAsB,OAAG,CAEvC,IAAK,IADDqD,KACKrqpB,EAAI,EAAGA,EAAI8D,KAAKgT,QAAQkwoB,gBAAgB1mpB,OAAQN,IAC/C8D,KAAKgT,QAAQkwoB,gBAAgBhnpB,GAAG6lE,QAAU/hE,KAAKgT,QAAQ+uD,OACzD/hE,KAAKgT,QAAQkwoB,gBAAgBhnpB,GAAG6lE,QAAU/hE,KAAKgT,QAAQywD,iBACvD8ilB,EAAK/hpB,KAAKxE,KAAKgT,QAAQkwoB,gBAAgBhnpB,IAG/C,IAAIqmE,EAAYviE,KAAKulpB,qBAAqBgB,GACtChklB,GACA5B,EAAM+H,MAAMnG,GAIpB,IAAIxjE,EAAS,IAAIupE,GAAYtoE,KAAKsmpB,UAAUx9kB,aAAanI,GACrD8E,EAAMzlE,KAAKgT,QAAQgvD,OACvBhiE,KAAKwmpB,aAAejF,EAChBkF,YAAY1npB,EAAQiB,KAAKgT,QAAQ+uD,MAAO0D,EAAKzlE,KAAK8nE,gBAAgBkoG,YACtEhwK,KAAKi5W,kBAAkB,MAAM,EAAMj5W,KAAKwmpB,cACxCxmpB,KAAK4ipB,OAAO1gpB,QACZ,IAAIjC,GACA+pM,YAAa08c,GACb/C,YAAa3jpB,KAAM4jpB,WAAY5jpB,KAAKgT,QAAQ+uD,MAAO8hlB,WAAY7jpB,KAAKgT,QAAQtM,MAEhF1G,KAAKM,OAAOqmB,QAAQggoB,GAAuB1mpB,IAE/CshpB,EAAenmpB,UAAU69W,kBAAoB,SAAUt4S,EAAO72C,EAAWu+C,GACrErmD,GAAYhiB,KAAK47J,SAKjB57J,KAAK4mpB,eACL5mpB,KAAK6mpB,kBAAkBx+kB,EAAYv+C,IAEvCy3nB,EAAenmpB,UAAUkqpB,cAAgB,SAAU3klB,GAC/C3gE,KAAK8lpB,qBAAqBnllB,IAE9B4glB,EAAenmpB,UAAUwrpB,aAAe,WACpC5mpB,KAAKjB,UACL,IAAIwjE,EAAYviE,KAAKulpB,qBAAqBvlpB,KAAKgT,QAAQkwoB,iBACnDvilB,EAAQ,IAAIwH,GACZ5F,GACA5B,EAAM+H,MAAMnG,GAGhB,IAAK,IAAInkE,EAAK,EAAG0+T,EADJ,IAAIx0P,GAAYtoE,KAAKsmpB,UAAUx9kB,aAAanI,GACrBviE,EAAK0+T,EAAStgU,OAAQ4B,IAAM,CAC5D,IAAI0oE,EAAMg2P,EAAS1+T,GACnB4B,KAAKjB,OAAOnC,EAASoD,KAAKgT,QAAQ+uD,MAAO+E,KAAQ,IAGzDy6kB,EAAenmpB,UAAUwqH,aAAe,SAAU/kH,GAC9C,IAAIsG,EAAStG,EAAEsG,OACXzE,EAAO62D,GAAapyD,EAAQ,sBAIhC,GAHIoyD,GAAapyD,EAAQ,gBACrBnH,KAAK2ipB,eAAe9hpB,GAEpB6B,EAAM,CACN,IAAIkD,EAAYlD,EAAKC,cAAc,gBAC/BiD,EACA5F,KAAK8mpB,iBAAiBlhpB,EAAU9B,UAAUK,SAAS,YAGnDqjE,GAAe9kE,EAAK2R,eAExBrU,KAAK+mpB,0BACLrkpB,EAAKC,cAAc,iBAAiBT,UAG5Cq/oB,EAAenmpB,UAAU0rpB,gBAAkB,SAAUt0oB,GAEjD,IAAK,IAAIpU,EAAK,EAAG4opB,KADD3lpB,MAAMC,KAAKtB,KAAKyjpB,KAAKjipB,iBAAiB,aAClBpD,EAAK4opB,EAASxqpB,OAAQ4B,IAAM,CAE5DupE,GADWq/kB,EAAS5opB,GACOoU,KAGnC+uoB,EAAenmpB,UAAUwiI,WAAa,WAC9B59H,KAAKM,OAAOU,QAAQ8C,UAAUK,SAAS,cACvCnE,KAAKgnE,UAAUhmE,QAAQ2B,cAAc,kBAAkBmB,UAAUS,OAAO,iBACxEvE,KAAKgnE,UAAUhmE,QAAQ2B,cAAc,UAAUT,UAGvDq/oB,EAAenmpB,UAAU6rpB,eAAiB,SAAUlqpB,EAAOyV,EAASjW,GAChE,IAAImG,EAAO8P,EAAUxS,KAAK6hpB,SAASjgpB,WAAU,GACzC5B,KAAK8hpB,UAAUlgpB,WAAU,GACzByR,EAAQ3Q,EAAKC,cAAc,YAQ/B,OAPA0Q,EAAMrR,WAAavE,EAAkBV,IAAUA,EAAMmQ,WAAW1Q,OAASO,EACrEiD,KAAKmhU,kBAAkB,UAC3Bx9T,GAAU0P,IAAS,yBACfrT,KAAKgT,QAAQ/D,WACboE,EAAMrR,UAAY,GAClByiE,GAAepxD,EAAOrT,KAAKgT,QAAQ/D,SAAS1S,EAAMyD,KAAKM,OAAQ,wBAE5DoC,GAEX6+oB,EAAenmpB,UAAU2rpB,wBAA0B,WAC/C,IAAIp3oB,EAAM3P,KAAKyjpB,KAAKrpoB,SAAS5d,OAAS,EAClC6G,KACAX,EAAO1C,KAAKyjpB,KAAK9gpB,cAAc,gBAC/Bq+I,EAAWhhJ,KAAKyjpB,KAAKjipB,iBAAiB,8BAA8BhF,OACpEy/H,EAAMj8H,KAAKgnE,UAAUsyD,OAAO,GAChC2C,EAAItX,UAAW,EACXh1G,IAAQqxI,EACR39I,GAAa,WAER29I,EACL39I,GAAa,WAGbA,GAAa,aACb44H,EAAItX,UAAW,GAEnB3kH,KAAK2hpB,aAAe1lhB,EAAItX,SACxBsX,EAAIz0E,WACJnjD,GAAa3B,IAAQ,UAAW,SAAU,cAC1CiB,GAAUjB,GAAOW,IAErBk+oB,EAAenmpB,UAAUyrpB,kBAAoB,SAAUtqpB,EAAMutB,GACzD,IAAIjnB,EACAqkpB,EAASlnpB,KAAKM,OAAOa,cAAc,OACnC86H,EAAMj8H,KAAKgnE,UAAUsyD,OAAO,GAEhC,GADAt5H,KAAK4kpB,SAAWropB,EAAKC,OACjBD,EAAKC,SAAWwD,KAAK4hpB,YAAa,CAClC,IAAIuF,EAAiBnnpB,KAAKmhU,kBAAkB,aACxCsoE,EAAWzpY,KAAKinpB,eAAeE,GAAgB,GAAQtkpB,KAASA,EAAG7C,KAAKgT,QAAQ+uD,OAASollB,EAAgBtkpB,IACzG+C,EAAY8hE,GAAmBlD,GAAO,QAASilU,EAAU,YAC7D7jY,EAAUjD,cAAc,YAAYmB,UAAUM,IAAI,eAClD8ipB,EAAOvlpB,YAAYiE,GACnB,IAAI28D,EAAY,IAAImH,GAAU,QAAS,QAAS1pE,KAAKgT,QAAQ+uD,OACzD/hE,KAAKgT,QAAQywD,kBACblB,EAAYA,EAAUsH,GAAG,QAAS,QAAS7pE,KAAKgT,QAAQywD,kBAG5D,IAAK,IADD2jlB,EAAgB,IAAI9+kB,GAAYtoE,KAAKgT,QAAQkwoB,iBAAiBp6kB,cAAa,IAAIX,IAAQO,MAAMnG,IAAY/lE,OACpGN,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAIwD,EAAM8kE,GAAO,QACjBxkE,KAAK4yB,OAAOlzB,GAAO9C,EAAS,UAAWL,EAAKL,IAC5C,IAAIa,EAAQiD,KAAKm6oB,eAAe39b,OAAO5/M,EAASoD,KAAKgT,QAAQ+uD,MAAOxlE,EAAKL,IAAK8D,KAAKgT,QAAQgooB,UACvF1gc,EAAWt6M,KAAKinpB,eAAelqpB,EAAOiD,KAAKqnpB,gBAAgBD,EAAepnpB,KAAK4yB,OAAOlzB,IAAO9C,EAAS,UAAWL,EAAKL,KAC1HgrpB,EAAOvlpB,YAAY+lE,GAAmBhoE,EAAK46M,EAAU,aAEzDt6M,KAAKyjpB,KAAKzhpB,UAAY,GACtByiE,GAAezkE,KAAKyjpB,QAASpipB,MAAMC,KAAK4lpB,EAAO9soB,WAC/Cpa,KAAK+mpB,0BACL9qhB,EAAItX,UAAW,OAGfuiiB,EAAOvlpB,YAAY3B,KAAKM,OAAOa,cAAc,QAAUa,UAAWhC,KAAKmhU,kBAAkB,eACzFnhU,KAAKyjpB,KAAKzhpB,UAAY,GACtByiE,GAAezkE,KAAKyjpB,QAASpipB,MAAMC,KAAK4lpB,EAAO9soB,WAC/C6hH,EAAItX,UAAW,EAEnB3kH,KAAK2hpB,aAAe1lhB,EAAItX,SACxBsX,EAAIz0E,WACJ,IAAIvnD,GAAS+pM,YAAa67c,GAA4BlC,YAAa3jpB,KAAMqoE,WAAYroE,KAAK4hpB,eAAmBrlpB,GAC7GyD,KAAKM,OAAOqmB,QAAQggoB,GAAuB1mpB,GAC3C8iB,GAAY/iB,KAAK47J,UAErB2lf,EAAenmpB,UAAUispB,gBAAkB,SAAUD,EAAerqpB,GAChE,OAAKiD,KAAKkxmB,aAAek2C,GAIdpnpB,KAAKjB,OAAOhC,IAG3BwkpB,EAAekF,YAAc,SAAUl+kB,EAAMxG,EAAOC,EAAQ8F,GAOxD,IANA,IAEI/qE,EAFA8E,EAAM0mE,EAAK/rE,OACXuC,KAGAsxK,KACAroG,EAAehG,GAAUA,EAAOy4kB,kBAC7B54oB,KAGH,GAFA9E,EAAQwrE,EAAK1mE,GACb9E,EAAQH,EAASmlE,EAAOhlE,KACnBU,EAAkBV,IACbA,KAASszK,GAAS,CACpB,IAAIvzK,KAGJ,GAFAA,EAAW,QAAIC,EACfszK,EAAOtzK,IAAS,EACZirE,EAAc,CACd,IAAIs/kB,EAAiBz/kB,GAAe7F,KAAYjlE,EAAO+qE,GAAgB,GACvE1qE,EAASmqpB,GAAuBD,EAAgB/+kB,EAAK1mE,IACrD9E,EAAQH,EAASolE,EAAOyB,gBAAiB6jlB,GAE7ClqpB,EAAS2kE,EAAOtkE,EAAkBV,GAAS,KAAOA,EAAOD,GACzDM,EAAS,UAAWmrE,EAAK1mE,GAAM/E,GAC/BiC,EAAOyF,KAAK1H,GAIxB,OAAOmlE,GAASi3B,MAAMj3B,GAASnyC,KAAK/wB,EAAQgjE,EAAOE,GAASktG,aAAc,YAE9Eoye,EAAeiE,aAAe,SAAUnilB,GAIpC,IAAK,IAHDkjlB,EAAOtklB,GAASoqG,SAAShpG,EAAS,SAAS,OAC3Ch5B,KACAm4B,KACKtmE,EAAI,EAAGA,EAAIqqpB,EAAK/ppB,OAAQN,IAEH,KAD1BmuC,EAAa,IAAIi+B,GAAYjF,GAASyF,cAAa,IAAIX,IAAQO,MAAM,QAAS,QAAS69kB,EAAKrqpB,GAAG6lE,SAChFvlE,SACXgmE,EAAK+jlB,EAAKrqpB,GAAG6lE,OAASw/kB,EAAeiG,kBAAkBn9mB,IAG/D,OAAOm4B,GAEX++kB,EAAeiG,kBAAoB,SAAUjB,GACzC,IACIhklB,EACA3jE,EAFAiD,EAAM0kpB,EAAOA,EAAK/ppB,OAAS,GAG/BoC,EAAQ2ipB,EAAekG,iBAAiBlB,EAAK,KACvC95e,cAAgBhvK,EAAkBmB,EAAM6tK,eAAgB7tK,EAAM6tK,aAEhElqG,EADe,SAAf3jE,EAAM8H,MAAkC,aAAf9H,EAAM8H,KACnBiiE,GAAiB/pE,EAAOA,EAAM8H,MAG9B9H,EAAMkrE,YAAclrE,EAAMkrE,YAClC,IAAIJ,GAAU9qE,EAAMmjE,MAAOnjE,EAAMgqE,SAAUhqE,EAAM7B,OAAQwkpB,EAAemG,aAAa9opB,GAAQA,EAAM6tK,cAE3G,IAAK,IAAI57E,EAAI,EAAGA,EAAIhvF,EAAKgvF,IACrB01jB,EAAK11jB,GAAK0wjB,EAAekG,iBAAiBlB,EAAK11jB,IAC3ChvF,EAAM,GAAKgvF,EAAI,GAA2B,OAAtB01jB,EAAK11jB,GAAGtuB,UACP,SAAjBgklB,EAAK11jB,GAAGnqF,MAAoC,aAAjB6/oB,EAAK11jB,GAAGnqF,KACnC67D,EAAUisG,WAAWhqK,KAAKmkE,GAAiB49kB,EAAK11jB,GAAI01jB,EAAK11jB,GAAGnqF,OAG5D67D,EAAUisG,WAAWhqK,KAAK,IAAIklE,GAAU68kB,EAAK11jB,GAAG9uB,MAAOwklB,EAAK11jB,GAAGjoB,SAAU29kB,EAAK11jB,GAAG9zF,OAAQwkpB,EAAemG,aAAanB,EAAK11jB,IAAK01jB,EAAK11jB,GAAG47E,eAKvIlqG,EADiB,SAAjBgklB,EAAK11jB,GAAGnqF,MAAoC,aAAjB6/oB,EAAK11jB,GAAGnqF,KACvB67D,EAAWgklB,EAAK11jB,GAAY,WAAGloB,GAAiB49kB,EAAK11jB,IAAK01jB,EAAK11jB,GAAGnqF,KAAM6/oB,EAAK11jB,GAAG47E,cAGhF85e,EAAK11jB,GAAG/mB,YAChBvH,EAAUgklB,EAAK11jB,GAAGtuB,WAAWgklB,EAAK11jB,GAAG/mB,aACrCvH,EAAWgklB,EAAK11jB,GAAY,WAAG01jB,EAAK11jB,GAAG9uB,MAAOwklB,EAAK11jB,GAAGjoB,SAAU29kB,EAAK11jB,GAAG9zF,OAAQwkpB,EAAemG,aAAanB,EAAK11jB,IAAK01jB,EAAK11jB,GAAG47E,cAI9I,OAAOlqG,GAAa,MAExBg/kB,EAAemG,aAAe,SAAUx9mB,GACpC,QAAIzsC,EAAkBysC,EAAO2+B,YAIlB3+B,EAAO2+B,WAGtB04kB,EAAekG,iBAAmB,SAAUv9mB,GAIxC,OAHqB,SAAhBA,EAAOxjC,MAAmC,aAAhBwjC,EAAOxjC,MAAuBwjC,EAAOntC,iBAAiBsjB,QACjF6pB,EAAOxjC,KAAOwjC,EAAOxjC,MAAQ,QAE1BwjC,GAMXq3mB,EAAenmpB,UAAU2mC,cAAgB,WACrC,MAAO,kBAEJw/mB,KChxBPnla,GAAsB,WAKtB,SAASA,EAAK97O,EAAQ8lE,GAClBpmE,KAAK2npB,WAAcC,WAAW,EAAOC,SAAU,KAAM3ujB,UACrDl5F,KAAKM,OAASA,EACdN,KAAKomE,eAAiBA,EACtBpmE,KAAKq8O,kBACDr8O,KAAKM,OAAO6sF,aAAwC,eAAzBntF,KAAK+hC,kBAGpC/hC,KAAKM,OAAOwrF,GAAGg8jB,GAAkB9npB,KAAK+npB,QAAS/npB,MAC/CA,KAAKM,OAAOwrF,GAAGk8jB,GAAoBhopB,KAAKiopB,WAAYjopB,MACpDA,KAAKM,OAAOwrF,GAAGo8jB,GAA2BlopB,KAAKq8O,gBAAiBr8O,MAChEA,KAAKM,OAAOwrF,GAAGq8jB,GAAgBnopB,KAAKqS,QAASrS,MAC7CA,KAAKM,OAAOwrF,GAAGs8jB,GAAmBpopB,KAAKqopB,YAAaropB,MACpDA,KAAKM,OAAOwrF,GAAGw8jB,GAAwBtopB,KAAKk0O,QAASl0O,OAsazD,OApaAo8O,EAAKhhP,UAAU2mC,cAAgB,WAC3B,MAAO,QAMXq6M,EAAKhhP,UAAUihP,gBAAkB,WAC7B,IAAIksa,EAAOvopB,KAAKM,OAChBN,KAAK4rK,YAAc28e,EAAKlglB,sBAAsBC,GAAciglB,EAAKlglB,WAC5D5qE,EAAkB8qpB,EAAKlglB,YAAc,IAAIC,GAAgB,IAAIA,GAAYiglB,EAAKlglB,YACnFkglB,EAAK5nlB,MAAQ4nlB,EAAK5nlB,iBAAiBwH,GAAQoglB,EAAK5nlB,MAAQ,IAAIwH,IAOhEi0K,EAAKhhP,UAAUm9O,cAAgB,SAAUiwa,GACrC,IACI7nlB,EADO3gE,KAAKM,OACCqgE,MAAMthE,QACvB,GAAoC,kBAAhCW,KAAKM,OAAOmopB,gBACZ9nlB,EAAMl7D,OAAOzF,KAAKM,OAAO8jpB,aAAal6mB,OAAO,SAAU83B,GAAU,SAAiC,IAAxBA,EAAO6D,eAA4C,IAAnB7D,EAAO1qC,cAAsCp8B,IAAjB8mE,EAAOD,SAAyBrqC,IAAI,SAAUsqC,GAAU,OAAOA,EAAOD,cAE3M,GAAoC,WAAhC/hE,KAAKM,OAAOmopB,gBAA8B,CAG/C,IAAK,IAFDC,KACArllB,EAAUrjE,KAAKM,OAAO+iE,QACjBnnE,EAAI,EAAGA,EAAImnE,EAAQ7mE,OAAQN,IAChCwspB,EAAkBlkpB,KAAK6+D,EAAQnnE,GAAG6lE,OAEtCpB,EAAMl7D,OAAOijpB,GAQjB,OANA1opB,KAAKitmB,YAAYtsiB,GACjB3gE,KAAK2opB,YAAYholB,GACjB3gE,KAAK4opB,eAAejolB,GACpB3gE,KAAK6opB,UAAUlolB,GACf3gE,KAAK8opB,UAAUnolB,EAAO6nlB,GACtBxopB,KAAKktM,WAAWvsI,GACTA,GAEXy7K,EAAKhhP,UAAUwtpB,eAAiB,SAAUjolB,EAAOoolB,GAO7C,OANA/opB,KAAKM,OAAOukE,WAAWzlE,QAAQ,SAAUsmE,GACrCA,EAAIrC,QAAQjkE,QAAQ,SAAU4iE,IACdA,EAAOt7D,gBAAgBlI,MAAQwjE,EAAOt7D,MAAQs7D,EAAOt7D,OAC3DtH,QAAQ,SAAUsH,GAAQ,OAAOi6D,EAAMstG,UAAUvnK,EAAKkP,cAAeosD,EAAOD,aAGnFpB,GAEXy7K,EAAKhhP,UAAU0tpB,UAAY,SAAUnolB,EAAO6nlB,GACxC,IAAID,EAAOvopB,KAAKM,OAWhB,OAVKiopB,EAAKS,aAAeT,EAAKrtc,wBAAsC,IAAbstc,IACnDD,EAAKv6lB,aAAa2wL,YAActyO,KAAKC,IAAI,EAAGi8oB,EAAKv6lB,aAAa2wL,aAC1D4pa,EAAKv6lB,aAAa6qP,WAAa,IAC/B0vW,EAAKv6lB,aAAa6qP,UAAY,GAE9B0vW,EAAKv6lB,aAAay/G,UAAY,IAC9B86e,EAAKv6lB,aAAay/G,SAAW,IAEjC9sG,EAAM4sG,KAAKg7e,EAAKv6lB,aAAa2wL,YAAa4pa,EAAKv6lB,aAAay/G,WAEzD9sG,GAEXy7K,EAAKhhP,UAAU8xM,WAAa,SAAUvsI,GAClC,IAAI4nlB,EAAOvopB,KAAKM,OAChB,GAAIiopB,EAAK/O,eAAiB+O,EAAKU,cAAc5llB,QAAQ7mE,OAEjD,IAAK,IADD6mE,EAAUkllB,EAAKU,cAAc5llB,QACxBnnE,EAAI,EAAG2F,EAAMwhE,EAAQ7mE,OAAQN,EAAI2F,EAAK3F,IAAK,CAChD,IAAI8lE,EAAShiE,KAAKkppB,iBAAiB7llB,EAAQnnE,IACvCitpB,EAAWnnlB,EAAO23kB,oBAClBp7mB,EAASyjC,EAAOzjC,OAChB4qnB,EACAxolB,EAAMu4B,MAAM71B,EAAQnnE,GAAI8D,KAAKoppB,kBAAkB/tpB,KAAK2E,MAAOu+B,GAG3DoiC,EAAMu4B,MAAM71B,EAAQnnE,GAAI,MAIpC,OAAOykE,GAEXy7K,EAAKhhP,UAAUytpB,UAAY,SAAUlolB,GACjC,IAAI4nlB,EAAOvopB,KAAKM,OAChB,IAAKiopB,EAAKjP,cAAgBiP,EAAK/O,gBAAkB+O,EAAKpF,aAAa9/kB,QAAQ7mE,OAAQ,CAG/E,IAAK,IAFD6mE,EAAUkllB,EAAKpF,aAAa9/kB,QAC5BgmlB,KACKntpB,EAAImnE,EAAQ7mE,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC1C,IAAIupE,EAAMzlE,KAAKkppB,iBAAiB7llB,EAAQnnE,GAAG6lE,OACvC0D,GACAA,EAAIq1kB,iBAAiBz3kB,EAAQnnE,GAAGm5B,WAEpC,IAAI+2I,EAAK3mG,EAAIk1kB,eAAiB36oB,KAAK+3Y,WAAatyU,EAAIk1kB,aAAat/oB,KAAKoqE,GAClEpC,EAAQnnE,GAAGm5B,WAC+C,IAA1DkznB,EAAKU,cAAc5llB,QAAQ9kE,QAAQ8kE,EAAQnnE,GAAG6lE,OAC9CpB,EAAMosG,OAAOtnG,EAAI1D,MAAOqqG,GAGxBi9e,EAAQ7kpB,MAAO6wB,UAAW+2I,EAAIrqG,MAAO0D,EAAI1D,QAGxC7lE,EAAI,EAAb,IAAK,IAAW2F,EAAMwnpB,EAAQ7spB,OAAQN,EAAI2F,EAAK3F,IAC3CykE,EAAMosG,OAAOs8e,EAAQntpB,GAAG6lE,MAAOsnlB,EAAQntpB,GAAGm5B,WAGlD,OAAOsrC,GAEXy7K,EAAKhhP,UAAUutpB,YAAc,SAAUholB,GACnC,IAAI5gE,EAAQC,KACRsppB,EAAYtppB,KAAKM,OAAOippB,eACxB/8nB,EAAS88nB,EAAU98nB,OAAOhwB,OAAS8spB,EAAU98nB,OAASxsB,KAAKM,OAAO8jpB,aAAa1snB,IAAI,SAAUolH,GAAK,OAAOA,EAAE/6E,QAC3G0jlB,KAqBJ,OAnBIzlpB,KAAKM,OAAOippB,eAAelspB,IAAIb,UACRwD,KAAKM,OAAOqlpB,uBAAuBhnnB,KAAK,SAAU8mC,GAAO,OAAOj5C,EAAOjuB,QAAQknE,EAAI1D,QAAU,KACtF/hE,KAAK4rK,YAAYmF,QAAQk/B,eACN,mBAA7CjwM,KAAK4rK,YAAYmF,QAAQk/B,gBAazBtvI,EAAM+rG,OAAO48e,EAAUjspB,IAAKmvB,EAAQ88nB,EAAU1glB,SAAU0glB,EAAU1plB,WAAY0plB,EAAU78e,eAZxFjgJ,EAAOptB,QAAQ,SAAUwkpB,GACrB,IAAI5hlB,EAASjiE,EAAMmppB,iBAAiBtF,GAChC5hlB,EAAOy4kB,kBACPgL,EAAgB1lpB,EAAMyppB,mBAAmBxnlB,EAAQyjlB,GAGjDA,EAAcjhpB,KAAK,IAAIklE,GAAU1H,EAAOD,MAAOunlB,EAAU1glB,SAAU0glB,EAAUjspB,IAAKispB,EAAU1plB,WAAY0plB,EAAU78e,iBAG1H9rG,EAAM+H,MAAMgB,GAAUG,GAAG47kB,MAM1B9klB,GAEXy7K,EAAKhhP,UAAU6xmB,YAAc,SAAUtsiB,EAAOqB,EAAQynlB,GAClD,IAAIlB,EAAOvopB,KAAKM,OACZmlpB,KAEAiE,KACAhE,EAAgB1lpB,KAAKM,OAAOqlpB,uBAChC,GAAI4C,EAAKh/C,gBAAkBg/C,EAAK/G,eAAen+kB,QAAQ7mE,OAAQ,CAG3D,IAAK,IAFD6mE,EAAUrB,GAAkBumlB,EAAK/G,eAAen+kB,QAChD+G,KACKhsE,EAAK,EAAGyE,EAAK0lpB,EAAKnE,aAAchmpB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAE3DgsE,GADI3E,EAAM5iE,EAAGzE,IACD2jE,OAAS0D,EAAIv7B,OAAOxjC,KAAO++D,EAAIv7B,OAAOxjC,KAAO6hpB,EAAK/G,eAAe96oB,KAIjF,IAAK,IAFDijpB,KACAC,KACK3lpB,EAAK,EAAGqwW,EAAYjxS,EAASp/D,EAAKqwW,EAAU93W,OAAQyH,IAAM,CAEpC,aAAvBmmE,GADA3E,EAAM6uS,EAAUrwW,IACJ89D,QAAgD,UAAvBqI,EAAQ3E,EAAI1D,OACjD4nlB,EAAanlpB,KAAKihE,GAGlBmklB,EAAgBplpB,KAAKihE,GAG7B,GAAIkklB,EAAantpB,OAEb,IAAK,IADDqtpB,EAAiBtI,GAAeiE,aAAamE,GACxCl/oB,EAAK,EAAG4uO,EAAK/6O,OAAOhB,KAAKuspB,GAAiBp/oB,EAAK4uO,EAAG78O,OAAQiO,IAAM,CACrE,IAAIH,EAAO+uO,EAAG5uO,IACVg7D,EAAMsD,GAA2Bz+D,EAAMo7oB,MAC/B+D,GACRhE,EAAgBzlpB,KAAKwppB,mBAAmB/jlB,EAAKgglB,GAC7CiE,EAAallpB,KAAKihE,IAGlBgglB,EAAcjhpB,KAAKqlpB,EAAev/oB,IAI9C,GAAIs/oB,EAAgBptpB,OAChB,IAAK,IAAI88O,EAAK,EAAGwwa,EAAoBF,EAAiBtwa,EAAKwwa,EAAkBttpB,OAAQ88O,IAAM,CACvF,IAAI7zK,EAAMqklB,EAAkBxwa,GACxBywa,EAAW/ppB,KAAKkppB,iBAAiBzjlB,EAAI1D,QACrCgH,GAA2BtD,EAAI1D,MAAO/hE,KAAKM,OAAOqlpB,wBAClDqE,EAAQD,EAASrjpB,KACjBqiE,GAA2BtD,EAAI1D,MAAO2jlB,KAAmB+D,GACzDC,EAAallpB,KAAKihE,GAClBgglB,EAAgBzlpB,KAAKwppB,mBAAmBO,EAAUtE,IAGpC,SAAVuE,GAA8B,aAAVA,EACpBvE,EAAcjhpB,KAAK,IAAIklE,GAAUjE,EAAI1D,MAAO0D,EAAImD,SAAUnD,EAAI1oE,OAAQ0oE,EAAIoD,UAAW7oE,KAAKM,OAAOkhpB,eAAe/0e,eAGhHg5e,EAAcjhpB,KAAKmkE,GAAiBlD,EAAKuklB,IAKrDvE,EAAcjppB,OACdmkE,EAAM+H,MAAMgB,GAAUE,IAAI67kB,IAG1BzlpB,KAAKM,OAAOyN,OAAOk8oB,OAG3B,OAAOtplB,GAEXy7K,EAAKhhP,UAAUoupB,mBAAqB,SAAU/jlB,EAAKgglB,GAC/C,IAAIrD,KAOJ,OANI38kB,IACAzlE,KAAKM,OAAOyN,OAAOu0oB,IAAwB//kB,UAAW6/kB,EAAYpglB,OAAQyD,IACtE28kB,EAAW7/kB,UAAUisG,WAAWhyK,QAChCippB,EAAcjhpB,KAAK49oB,EAAW7/kB,YAG/BkjlB,GAQXrpa,EAAKhhP,UAAU84O,QAAU,SAAUj0O,EAAM0gE,GACrC,IAAI5gE,EAAQC,UACC,IAATC,IAAmBA,GAAS+pM,YAAa,KAC7C,IAAI3sM,EAAM2C,KAAKkqpB,OAAOjqpB,EAAK6nE,gBACvBxpE,OAAOhB,KAAK2C,EAAK6nE,gBAAgBtrE,OACjCyD,EAAK6nE,eAAiB9nE,KAAKM,OAAO6ppB,2BACtC,GAAInqpB,KAAKM,OAAO+nE,YAAc,WAAYroE,KAAKM,OAAO+nE,WAAY,CAE9D,OADUroE,KAAK+lpB,aAAa9lpB,EAAM0gE,EAAOtjE,GAC9Bo1M,QAGX,IAAI23c,OAAO,EACX,OAAQnqpB,EAAK+pM,aACT,IAAK,SACDrpI,EAAQA,GAAgB3gE,KAAKu4O,gBAE7B,GAAY,IADFj6O,OAAOhB,KAAK2C,EAAK1D,MAAMC,OAE7B4tpB,EAAOpqpB,KAAK4rK,YAAYrnK,OAAOlH,EAAK4C,EAAK1D,KAAK,GAAIokE,EAAM0qG,UAAW1qG,OAElE,CACD,IAAI6pI,GACAG,gBACAD,kBACAE,mBAEJJ,EAAQE,eAAiBzqM,EAAK1D,KAC9B6tpB,EAAOpqpB,KAAK4rK,YAAYpkK,YAAYgjM,EAASntM,EAAKsjE,EAAM0qG,UAAW1qG,EAAMqtG,iBAE7E,MACJ,IAAK,OACDrtG,EAAQA,GAAgB3gE,KAAKu4O,gBAC7Bt4O,EAAK6R,MAAQrU,EAAkBwC,EAAK6R,OAAS,EAAI7R,EAAK6R,MACtDs4oB,EAAOpqpB,KAAK4rK,YAAYrwD,OAAOt7G,EAAK1D,KAAMokE,EAAM0qG,UAAW1qG,EAAO1gE,EAAK6R,OAG/E,OAAIs4oB,GAAS5rpB,MAAMC,QAAQ2rpB,IAAUA,EAAKzjpB,eAAe,kBAM9C3G,KAAKu7G,OAAO56C,EAAO1gE,GALnBmqpB,EAAKl4c,KAAK,SAAUnzM,GACvB,OAAOgB,EAAMw7G,OAAO56C,EAAO1gE,MAQ3Cm8O,EAAKhhP,UAAUmgH,OAAS,SAAU56C,EAAO1gE,GAIrC,MAHyB,SAArBA,EAAK+pM,aACLhqM,KAAKM,OAAOyN,OAAOs8oB,GAAoBpqpB,GAEpCD,KAAK8rK,aAAanrG,IAE7By7K,EAAKhhP,UAAU0wK,aAAe,SAAUnrG,GACpC,IAAI5gE,EAAQC,KACZ,GAAIA,KAAK4rK,YAAYvpK,MAAO,CACxB,IAAIiopB,EAAa,IAAIj4c,GASrB,OARYryM,KAAK4rK,YAAYvpK,MACvB6vM,KAAK,SAAUrxM,GACjBd,EAAM6rK,YAAYE,aAAanrG,GAAOuxI,KAAK,SAAUnzM,GACjDurpB,EAAWvhkB,QAAQhqF,OAExBw0M,MAAM,SAAU1yM,GACfyppB,EAAWthkB,OAAOnoF,KAEfyppB,EAAW73c,QAGlB,OAAOzyM,KAAK4rK,YAAYE,aAAanrG,IAG7Cy7K,EAAKhhP,UAAUgupB,kBAAoB,SAAUrspB,EAAOglE,GACrC/hE,KAAKM,OAAhB,IACI8lE,EAAiBpmE,KAAKomE,eACtBpE,EAAShiE,KAAKkppB,iBAAiBnnlB,GAC/Bkb,EAAOlgF,EACNilE,EAAOt7D,OACRs7D,EAAOt7D,KAAOu2E,EAAKxU,OAAUwU,EAAK/Q,WAAa,GAAK+Q,EAAK7Q,aAAe,GACpE6Q,EAAK1T,aAAe,GAAK0T,EAAKsxC,kBAAoB,EAAI,WAAa,iBAEvE9wH,EAAkBukE,EAAO+4kB,iBACzB50kB,GAAaC,EAAgBpE,GAGjC,OADgBwrkB,GAAepyoB,UAAUohN,OAAOz/M,EAAOilE,EAAO+4kB,iBAGlE3+Z,EAAKhhP,UAAUitpB,YAAc,SAAUpopB,GACnC,IAAI0gE,EAAQ3gE,KAAKu4O,gBACb9lC,EAAU,KAEVp1M,EAAM2C,KAAKkqpB,OAAOjqpB,EAAK6nE,gBACvBxpE,OAAOhB,KAAK2C,EAAK6nE,gBAAgBtrE,OAASyD,EAAK6nE,eAC/C9nE,KAAKM,OAAO6ppB,2BAIhB,OAHInqpB,KAAKM,OAAO+nE,YAAc,WAAYroE,KAAKM,OAAO+nE,YAClDroE,KAAK+lpB,aAAa9lpB,EAAM0gE,EAAOtjE,GAE3B4C,EAAK+pM,aACT,IAAK,OACDyI,EAAUzyM,KAAK4rK,YAAYxxH,OAAO/8C,EAAK4C,EAAK1D,KAAMokE,EAAM0qG,UAAW1qG,EAAO1gE,EAAKsqpB,cAGvFtqpB,EAAO,QAAIwyM,EACXzyM,KAAKM,OAAOyN,OAAOy8oB,GAAmBvqpB,IAG1Cm8O,EAAKhhP,UAAUoM,YAAc,SAAUgjM,EAASntM,EAAKmvM,GACjD,IAAI7rI,EAAQ3gE,KAAKu4O,gBAAgBvqE,gBACjC,GAAI,WAAYhuK,KAAKM,OAAO+nE,WAAY,CAE5BroE,KAAKimpB,sBAAsBtllB,GACnC,IAAIgzI,EAAO,IAAItB,GACXpyM,GACA+pM,YAAa,YAAaQ,QAASA,EAASntM,IAAKA,EAAKsjE,MAAOA,EAC7D8tX,QAAS96O,EAAK5qH,SAIlB,OAFA/oF,KAAKyqpB,UAAW7C,WAAW,EAAMC,SAAUl0c,EAAK5qH,UAChD/oF,KAAKM,OAAOqmB,QAAQ+joB,GAA0BzqpB,GACvC0zM,EAAKlB,QAIZ,OADczyM,KAAK4rK,YAAYpkK,YAAYgjM,EAASntM,EAAKsjE,EAAM0qG,UAAW1qG,EAAO6rI,IAIzF4vC,EAAKhhP,UAAU8upB,OAAS,SAAU5spB,GAC9B,GAAIA,GAAQA,EAAKd,OACb,OAAOc,EAAK,IAKpB8+O,EAAKhhP,UAAU28Y,SAAW,WACtB,OAA+C,IAAxC/3Y,KAAK4rK,YAAYvjG,WAAWspI,cAAwDz2M,IAApC8E,KAAK4rK,YAAYvjG,WAAWvtC,KAEvFshN,EAAKhhP,UAAU2spB,QAAU,SAAUlnpB,GAC/B,IAAK,IAAI3E,EAAI2E,EAAEmvK,QAAQxzK,OAAQN,EAAI,EAAGA,IAClC8D,KAAK4rK,YAAYvjG,WAAWE,KAAK5/C,OAAO9nB,EAAE8ppB,QAAS,EAAG9ppB,EAAEmvK,QAAQ9zK,EAAI,KAG5EkgP,EAAKhhP,UAAU6spB,WAAa,SAAUpnpB,GAClC,IAAI0nE,EAAOvoE,KAAK4rK,YAAYvjG,WAAWE,KACvCvoE,KAAK4rK,YAAYvjG,WAAWE,KAAOA,EAAKr+B,OAAO,SAAUntC,EAAO+U,GAAS,OAAqC,IAA9BjR,EAAEmvK,QAAQzxK,QAAQxB,MAEtGq/O,EAAKhhP,UAAU8tpB,iBAAmB,SAAUnnlB,GACxC,IAAI0D,EACJ,OAAQzlE,KAAKM,OAAkB,YAAEq+B,KAAK,SAAUqjC,GAE5C,OADAyD,EAAMzD,EACCA,EAAOD,QAAUA,KACtB0D,GAEV22K,EAAKhhP,UAAUiX,QAAU,WACjBrS,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAO4rF,IAAI47jB,GAAkB9npB,KAAK+npB,SACvC/npB,KAAKM,OAAO4rF,IAAI87jB,GAAoBhopB,KAAKiopB,YACzCjopB,KAAKM,OAAO4rF,IAAIg8jB,GAA2BlopB,KAAKq8O,iBAChDr8O,KAAKM,OAAO4rF,IAAIi8jB,GAAgBnopB,KAAKqS,SACrCrS,KAAKM,OAAO4rF,IAAIk8jB,GAAmBpopB,KAAKqopB,aACxCropB,KAAKM,OAAO4rF,IAAIo8jB,GAAwBtopB,KAAKk0O,WAEjDkI,EAAKhhP,UAAUohZ,SAAW,WACtB,OAAOx8Y,KAAK2npB,WAEhBvra,EAAKhhP,UAAUqvpB,SAAW,SAAUh/lB,GAChC,OAAOzrD,KAAK2npB,UAAYl8lB,GAE5B2wL,EAAKhhP,UAAU6qpB,sBAAwB,SAAUtllB,GAC7C,IAAIwllB,EAAS,IAAIz6c,GACbr6B,EAAK,IAAI/oG,IAAcxtC,IAAK,GAAIi2I,QAAS,IAAI26B,KAC7CjgJ,EAAQ06lB,EAAO/7c,aAAa/4B,EAAI1wG,GAEpC,OAAOjiE,EADI4tD,KAAKuB,MAAMpC,EAAMlvD,MACRkvD,EAAMygJ,UAE9BkwC,EAAKhhP,UAAU2qpB,aAAe,SAAU9lpB,EAAM0gE,EAAOtjE,GACjD,IACIouD,EADA1rD,EAAQC,KAER4qpB,EAAW3qpB,EACfwrD,EAAQzrD,KAAKimpB,sBAAsBtllB,GACnC,IAAIpnC,EAAM,IAAI84K,GACVsB,EAAO,IAAItB,GACf,QAAyBn3M,IAArB+E,EAAK+pM,cAA8D,IAAjChqM,KAAK2npB,UAAUkD,cAEjD,GADAp/lB,EAAMuH,OAAS/yD,EACU,SAArBA,EAAK+pM,aAA+C,WAArB/pM,EAAK+pM,YAA0B,CAC9D,IAAI8gd,EAAW7qpB,EACf6qpB,EAASztpB,IAAMA,EACfytpB,EAASr/lB,MAAQA,EACjBzrD,KAAKyqpB,UAAW7C,WAAW,EAAMC,SAAUl0c,EAAK5qH,UAChD6hkB,EAASn8N,QAAU96O,EAAK5qH,QACxB/oF,KAAKM,OAAOqmB,QAAQ+joB,GAA0BI,GAC9Cn3c,EAAKlB,QAAQP,KAAK,SAAUrxM,GACxBd,EAAM0qpB,UAAW7C,WAAW,EAAMC,SAAUtunB,EAAIwvD,QAASmQ,MAAOztC,EAAMytC,MAAOr0B,WAAYpZ,EAAMoZ,aAC/F9kE,EAAMO,OAAOqmB,QAAQu/nB,GAAwBz6lB,UAIjDzrD,KAAKyqpB,UAAW7C,WAAW,EAAMC,SAAUtunB,EAAIwvD,QAASmQ,MAAOztC,EAAMytC,MAAOr0B,WAAYpZ,EAAMoZ,aAC9F7kE,KAAKM,OAAOqmB,QAAQu/nB,GAAwBz6lB,QAIhDzrD,KAAKyqpB,aACLlxnB,EAAIwvD,QAAQ/oF,KAAKM,OAAO+nE,YAE5B,OAAO9uC,GAEJ6iN,KC7bPxU,GAAqB,WACrB,SAASA,EAAI50N,GACThV,EAAMgC,KAAMgT,GAQhB,OANA40N,EAAIxsO,UAAUiE,MAAQ,WAClB,IAAIqmE,EAAM,IAAIkiK,MAGd,OAFA5pO,EAAM0nE,EAAK1lE,MACX0lE,EAAIkB,MAAQ5mE,KAAK4mE,MAAMlvC,IAAI,SAAUqwC,GAAQ,OAAOA,EAAK1oE,UAClDqmE,GAEJkiK,KCVP26Q,GAAsB,WACtB,SAASA,EAAKvve,GACVhT,KAAK+qpB,WAAY,EACjB/spB,EAAMgC,KAAMgT,GAOhB,OALAuve,EAAKnnf,UAAUiE,MAAQ,WACnB,IAAI0oE,EAAO,IAAIw6a,MAEf,OADAvkf,EAAM+pE,EAAM/nE,MACL+nE,GAEJw6a,KCRPyoK,GAAiC,WACjC,SAASA,EAAgB5klB,EAAgB9lE,GACrCN,KAAKomE,eAAiBA,EACtBpmE,KAAKM,OAASA,EAsFlB,OApFA0qpB,EAAgB5vpB,UAAUg3G,OAAS,SAAU64iB,EAAUvllB,EAAKxpE,EAAG+yS,GAM3D,IAAK,IAJDi8W,EADmBlrpB,KAAKomE,eAAeE,WAAW,uBAClB6klB,gBAAgBzllB,EAAIkB,MAAM1qE,GAAGw3oB,UAAYjI,GAASrvZ,MAClF30K,EAAO/B,EAAIkB,MAAM1qE,GAAGkvpB,SAAW1llB,EAAIkB,MAAM1qE,GAAGkvpB,SAC3CH,EAASr8V,QAAU1yT,GAAMwpE,EAAIkB,MAAMpqE,OAASyupB,EAASr8V,QAAUlpP,EAAIkB,MAAMpqE,OAASN,EACnFo7B,EAAU,EACL5T,EAAIxnB,EAAI,EAAGwnB,EAAIxnB,EAAIurE,GAAQ/jD,EAAIgiD,EAAIkB,MAAMpqE,OAAQknB,KACzB,IAAzBgiD,EAAIkB,MAAMljD,GAAG4T,QACbA,IAGAouC,EAAIkB,MAAMljD,GAAGqnoB,WAAY,EAGjC,GAAIzznB,EAAU,EAAG,CACb,IAAS5T,EAAIxnB,EAAIurE,EAAM/jD,EAAIxnB,EAAIurE,EAAOnwC,GAAW5T,EAAIgiD,EAAIkB,MAAMpqE,OAAQknB,IACnEgiD,EAAIkB,MAAMljD,GAAGqnoB,WAAY,EAEzB7upB,EAAIurE,EAAOnwC,GAAWouC,EAAIkB,MAAMpqE,SAChCirE,GAASvrE,EAAIurE,EAAOnwC,EAAWouC,EAAIkB,MAAMpqE,QAcjD,OAXIkpE,EAAIkB,MAAM1qE,GAAGkvpB,WACb1llB,EAAInpE,KAAK0upB,EAASjplB,OAAOD,OAAS2D,EAAIkB,MAAM1qE,GAAG6igB,SAC/C9vN,EAAKi8W,EAAa94iB,OAAO1sC,EAAIkB,MAAM1qE,GAAIwpE,EAAInpE,MAAQuV,MAAUrU,EAAkBioE,EAAI5zD,OAAgC,GAAvB4zD,EAAI5zD,MAAM5E,cAEtGu6D,EAAO,GACP/jE,EAAWurS,GAAM2f,QAAWnnP,EAAKv6D,WAAYm+oB,eAAgB5jlB,EAAKv6D,cAElElN,KAAKM,OAAOgrpB,4BAA+B5llB,EAAIkB,MAAM1qE,GAAGkvpB,UACvDprpB,KAAKqjP,YAAY4na,EAASjplB,OAAOD,MAAOkplB,EAAS1upB,KAAK0upB,EAASjplB,OAAOD,SACvE/hE,KAAKurpB,iBAAiBN,EAASjplB,OAAOD,MAAOkplB,EAAS1upB,KAAK0upB,EAASjplB,OAAOD,OAAQkplB,EAASr8V,SAEzF3f,GAEX+7W,EAAgB5vpB,UAAUmwpB,iBAAmB,SAAUC,EAAOjvpB,EAAMkrE,GAChEznE,KAAKyrpB,cAAczrpB,KAAK0rpB,WAAWF,EAAOjvpB,GAAOkrE,IAErDujlB,EAAgB5vpB,UAAUswpB,WAAa,SAAUC,EAAOpvpB,GACpD,OAAOovpB,EAAQ,KAAOpvpB,EAAK2Q,YAE/B89oB,EAAgB5vpB,UAAUwwpB,SAAW,SAAUvupB,GAC3C,OAAOA,EAAIH,MAAM,OAErB8tpB,EAAgB5vpB,UAAUioP,YAAc,SAAUsoa,EAAOpvpB,GACrD,OAAOyD,KAAK6rpB,gBAAgBllpB,eAAe3G,KAAK0rpB,WAAWC,EAAOpvpB,KAEtEyupB,EAAgB5vpB,UAAUywpB,cAAgB,WACtC,OAAO7rpB,KAAKM,OAAOs3gB,YAEvBozI,EAAgB5vpB,UAAUqwpB,cAAgB,SAAUpupB,EAAKoqE,GACrDznE,KAAKM,OAAOs3gB,WAAWv6gB,GAAOoqE,GAElCujlB,EAAgB5vpB,UAAU0wpB,mBAAqB,SAAUl/a,GAErD,IAAK,IADDm/a,EAAS/rpB,KAAK6rpB,gBACTztpB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKyupB,GAAS3tpB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC7D,IAAIf,EAAMwF,EAAGzE,GACTrB,EAAQgvpB,EAAO1upB,GACfW,EAAQgC,KAAK4rpB,SAASvupB,GACtB2xO,EAAchvO,KAAKgspB,uBAAuBhupB,EAAM,IAChDiupB,EAAiBjspB,KAAKM,OAAO4rpB,yBAC7BzklB,EAAO1qE,GAASkvpB,EAAe,GAAKj9a,GACxC,GAAIA,EAAci9a,EAAe,IAAMxklB,EAAO,EAC1C,IAAK,IAAIxjE,EAAK,EAAG+poB,EAASpha,EAAM3oO,EAAK+poB,EAAOxxoB,OAAQyH,IAAM,CACtD,IAAIyhE,EAAMsokB,EAAO/poB,GACjB,GAAIyhE,EAAInpE,KAAKyB,EAAM,IAAIkP,aAAelP,EAAM,GAAGkP,WAAY,CACvDw4D,EAAIkB,MAAM,GAAGwklB,SAAW3jlB,EACxB/B,EAAIkB,MAAM,GAAGm4b,SAAW/ggB,EAAM,GAC9B,QAKhB,OAAO4uO,GAEXo+a,EAAgB5vpB,UAAU4wpB,uBAAyB,SAAUjqlB,GAOzD,OANYO,GAAqBtiE,KAAKM,OAAO6rpB,oBAAqB,SAAUluoB,EAAMnM,GAC9E,GAAImM,EAAK8jD,QAAUA,EACf,OAAOjwD,IAGZ,IAGAk5oB,KCtFPoB,GAA6B,WAC7B,SAASA,EAAYhmlB,EAAgBstkB,EAAUpzoB,GAC3CN,KAAK0zoB,SAAWA,EAChB1zoB,KAAKomE,eAAiBA,EACtBpmE,KAAKM,OAASA,EACdN,KAAKgB,QAAUhB,KAAKM,OAAOa,cAAc,MAAQsC,OAASkO,KAAM,SAyJpE,OAhJAy6oB,EAAYhxpB,UAAUg3G,OAAS,SAAU1sC,EAAKrC,EAAS3/D,EAAY2opB,EAAazqpB,GAC5E,OAAO5B,KAAKsspB,WAAW5mlB,EAAKrC,EAAS3/D,EAAY2opB,EAAazqpB,IASlEwqpB,EAAYhxpB,UAAUqzD,QAAU,SAAUiX,EAAKrC,EAASg5P,EAAW34T,EAAY2opB,GACvEhwV,IACA32P,EAAInpE,KAAOmC,KAAWgnE,EAAI8kI,SAC1BxqM,KAAKuspB,kBAAkB7mlB,IAE3B,IAAInlE,EAAOP,KAAKM,OAAOU,QAAQ2B,cAAc,aAAe+iE,EAAIhmE,IAAM,KAClEqzW,EAAK/yW,KAAKsspB,WAAW5mlB,EAAKrC,EAAS3/D,EAAY2opB,GAC/CzllB,KAAWvlE,MAAMC,KAAKyxW,EAAGnsS,OAC7BrmE,EAAKyB,UAAY,GACjB,IAAK,IAAI5D,EAAK,EAAGoupB,EAAU5llB,EAAOxoE,EAAKoupB,EAAQhwpB,OAAQ4B,IAAM,CACzD,IAAI2pE,EAAOyklB,EAAQpupB,GACnBmC,EAAKoB,YAAYomE,KAGzBqklB,EAAYhxpB,UAAUkxpB,WAAa,SAAU5mlB,EAAKrC,EAAS3/D,EAAY2opB,EAAazqpB,GAChF,IAAImxW,EAAMt1W,EAAkBmE,GAAyB5B,KAAKgB,QAAQY,YAAzBA,EACrC6qpB,GAAYlwpB,KAAMmpE,EAAInpE,MACtB0upB,GAAa1upB,KAAMmpE,EAAInpE,MACvBmwpB,EAAWhupB,KAAWgF,MACtBippB,EAAgB3spB,KAAKM,OAAO8jpB,aAAal6mB,OAAO,SAAUu7B,GAAO,MAAoB,aAAbA,EAAI/+D,MAAuB++D,EAAI1D,QAAU,GACjHhlE,GAAQ,EACR4vpB,IACA5vpB,EAAQuJ,GAAUqmpB,EAAc5qlB,MAAO0qlB,EAAQlwpB,OAE/CmpE,EAAIknlB,YACJlnlB,EAAI1H,WAAah+D,KAAKM,OAAOuspB,wBAAwBtupB,QAAQmnE,EAAI5zD,QAAU,GAAK/U,GAEhF2oE,EAAIknlB,WAAa5spB,KAAKM,OAAOwspB,qBACG,UAA7B9spB,KAAKM,OAAOyspB,cAA4B/spB,KAAKM,OAAO46M,uBACvDx1I,EAAI1H,YAAa,GAC+C,IAA5Dh+D,KAAKM,OAAOuspB,wBAAwBtupB,QAAQmnE,EAAI5zD,QAChD9R,KAAKM,OAAOuspB,wBAAwBropB,KAAKkhE,EAAI5zD,QAGrD9R,KAAKgtpB,sBAAsBj6S,EAAIrtS,GAC/BqiE,EAAcgrO,EAAI25S,GAClB5plB,GAAsBiwS,EAAIrtS,EAAIhiE,YAE9B,IAAK,IADDuppB,EAAmBjtpB,KAAKomE,eAAeE,WAAW,uBAC7CpqE,EAAI,EAAG2F,EAAM6jE,EAAIkB,MAAMpqE,OAAQN,EAAI2F,EAAK3F,IAAK,CAClD,IAAI6rE,EAAOrC,EAAIkB,MAAM1qE,GACrB6rE,EAAK/J,WAAa0H,EAAI1H,WACtB,IAAIktlB,EAAe+B,EAAiB9B,gBAAgBzllB,EAAIkB,MAAM1qE,GAAGw3oB,UAAYjI,GAASrvZ,MAClF34O,GAAUqO,MAAUrU,EAAkBioE,EAAI5zD,OAAgC,GAAvB4zD,EAAI5zD,MAAM5E,YAC7Dw4D,EAAI8vT,UAAY9vT,EAAIkB,MAAM1qE,GAAGw3oB,WAAajI,GAASyhB,eACnDzppB,EAAa,MAAI,qBAErB,IAAIwrS,EAAKi8W,EAAa94iB,OAAO1sC,EAAIkB,MAAM1qE,GAAIwpE,EAAInpE,KAAMkH,GACrD,GAAIiiE,EAAIkB,MAAM1qE,GAAGw3oB,WAAajI,GAAS0hB,OAAQ,CAC3C,IAAIznlB,EAAIkB,MAAM1qE,GAAGw3oB,WAAajI,GAASrvZ,MAAQ12K,EAAIkB,MAAM1qE,GAAGw3oB,WAAajI,GAAS2hB,iBAC9EptpB,KAAKM,OAAOqmB,QAAQ60nB,GAAe98oB,EAAOuspB,GACtCljlB,KAAMknO,EAAIjtO,OAAQ+F,EAAK/F,OAAQ4sP,QAAS,EACxC9mP,eAAgBpC,EAAIkB,MAAM1qE,GAAG4rE,kBAE7BmjlB,EAASr8V,QAAU,GAAKlpP,EAAIkB,MAAM1qE,GAAGkvpB,SAAW,GAAG,CAEnDn8W,EADgB,IAAI+7W,GAAgBhrpB,KAAKomE,eAAgBpmE,KAAKM,QAC/C8xG,OAAO64iB,EAAUvllB,EAAKxpE,EAAG+yS,GAG3CvpO,EAAIkB,MAAM1qE,GAAG6upB,WACdh4S,EAAGpxW,YAAYstS,IAI3B,IAAIhvS,GAASylE,IAAKqtS,EAAI5tS,UAAWnlE,KAAKM,OAAO6kE,WAgB7C,GAfIO,EAAIknlB,WACJ5spB,KAAKM,OAAOqmB,QN5FE,eM4FoBjoB,EAAO+tpB,EAASxspB,IAElDD,KAAKM,OAAO46M,uBACZuxc,EAAQtnlB,UAAYnlE,KAAKM,OAAO6kE,WAEhCsnlB,EAAQtnlB,UACR4tS,EAAGruW,MAAMqR,OAAS02oB,EAAQtnlB,UAAY,KAEjCnlE,KAAKM,OAAO6kE,YAAc4tS,EAAGpwW,cAAc,kBAAoBowW,EAAGpwW,cAAc,sBACrFowW,EAAGruW,MAAMqR,OAAS/V,KAAKM,OAAO6kE,UAAY,MAE1CO,EAAIzyD,UACJ8/V,EAAGjvW,UAAUM,IAAIshE,EAAIzyD,UAErBjT,KAAKM,OAAOU,QAAQuuY,aAAevvY,KAAKM,OAAOyV,QAAU/V,KAAKM,OAAOukE,WAAWroE,OAChF,IAASN,EAAI,EAAGA,EAAI8D,KAAKM,OAAOukE,WAAWroE,OAAQN,IAAK,CAGpD,GAAI8D,KAAKM,OAAOukE,WAAW3oE,GAAW,WAAQ,QAAE,GAAGy+H,eAAgB,CAC/D,IAAI0yhB,EAAct6S,EAAGvxW,iBAAiB,kBACtC,GAAI6rpB,EAAY7wpB,OAAQ,CAEpBmH,GADuB0ppB,EAAYA,EAAY7wpB,OAAS,KAC3B,wBAK7C,OAAOu2W,GAEXq5S,EAAYhxpB,UAAUmxpB,kBAAoB,SAAU7mlB,GAChD,IAAK,IAAItnE,EAAK,EAAGyE,EAAK6iE,EAAIkB,MAAOxoE,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACxCyE,EAAGzE,GACT2spB,WAAY,EAErB,OAAOrllB,GAOX0mlB,EAAYhxpB,UAAU4xpB,sBAAwB,SAAUj6S,EAAIrtS,GACxD,IAAI07F,KACA92J,EAAqB,gBAArBA,EAAiD,WAAjDA,EAA6E,gBAC7EzG,KACA6hE,EAAIknlB,WACJ/opB,EAAQW,KAAK,SAEbkhE,EAAI4nlB,UACJzppB,EAAQW,KAAK,YAEZ/G,EAAkBioE,EAAI5zD,SACvBsvJ,EAAK92J,GAAiBo7D,EAAI5zD,OAE1B4zD,EAAIkrP,UACJxvJ,EAAKwvJ,QAAUlrP,EAAIkrP,SAEnBlrP,EAAIhmE,MACJ0hK,EAAK92J,GAAgBo7D,EAAIhmE,KAEzBgmE,EAAI1H,aACJojG,EAAK92J,IAAqB,IAEV,IAAhBo7D,EAAIpuC,SACJzzB,EAAQW,KAAK,UAEjB48J,EAAKnvJ,MAAQpO,EACbi/D,GAAsBiwS,EAAI3xM,IAEvBgrf,KC9JPmB,GAAmC,WAInC,SAASA,EAAkBjtpB,GACvBN,KAAKM,OAASA,EA4ElB,OA1EAitpB,EAAkBnypB,UAAUoypB,aAAe,SAAUjxpB,EAAM0D,GAGvD,IAAK,IAFD2sO,KACA/mN,EAAa7lB,KAAKM,OAAO46M,qBAAuBj7M,EAAK4lB,WAAa,EAC7D3pB,EAAI,EAAG2F,EAAMvD,OAAOhB,KAAKf,GAAMC,OAAQN,EAAI2F,EAAK3F,IAAK2pB,IAC1D+mN,EAAK1wO,GAAK8D,KAAKytpB,YAAYlxpB,EAAKL,GAAI2pB,GAExC,OAAO+mN,GAEX2gb,EAAkBnypB,UAAUsypB,cAAgB,WAExC,IAAInH,KAIJ,OAHIvmpB,KAAKM,OAAOqtpB,gBAAkB3tpB,KAAKM,OAAOoxT,YAC1C60V,EAAK/hpB,KAAKxE,KAAK4tpB,gBAAiB,KAAMniB,GAASyhB,eAE5C3G,GAEXgH,EAAkBnypB,UAAUqypB,YAAc,SAAUlxpB,EAAMuV,EAAOmB,EAAU64nB,GACvE,IAAI94nB,KACJA,EAAQ80D,kBACR90D,EAAQtT,IAAM8kE,GAAO,YACrBxxD,EAAQzW,KAAOA,EACfyW,EAAQlB,MAAQA,EAChBkB,EAAQ84nB,OAASA,EACjB94nB,EAAQ45oB,WAAY,EACpB55oB,EAAQwiX,UAAW,EACnBxiX,EAAQC,SAAWA,EACnBD,EAAQs6oB,WAAWttpB,KAAKM,OAAOutpB,cAAe/7oB,EAAQ,GAAM,EAC5DkB,EAAQgrD,WAAah+D,KAAKM,OAAOuspB,wBAAwBtupB,QAAQuT,IAAU,EAC3E9R,KAAK8tpB,qBAAqB96oB,GAC1B,IAAI4zD,EAAQ5mE,KAAK0tpB,gBACbholB,EAAM,IAAIkiK,GAAI50N,GAElB,OADA0yD,EAAIkB,MAAQA,EAAMpsD,OAAOxa,KAAK+tpB,cAAc/6oB,IACrC0yD,GAEX6nlB,EAAkBnypB,UAAU0ypB,qBAAuB,SAAU96oB,GACzDhT,KAAKM,OAAOqlpB,uBAAuBvmpB,QAAQ,SAAUqmE,GACjDroE,EAASqoE,EAAI1D,MAAO8F,GAAepC,EAAKzyD,EAAQzW,MAAOyW,EAAQ80D,mBAGvEyllB,EAAkBnypB,UAAU2ypB,cAAgB,SAAU/6oB,GAClD,IAAIjT,EAAQC,KAERkyK,KAIJ,OALclyK,KAAKM,OAAO8jpB,aAElBhlpB,QAAQ,SAAUihe,EAAOvud,GAC7B,OAAOogK,EAAI1tK,KAAKzE,EAAM6tpB,aAAavtL,EAAOrtd,EAAQtT,IAAKjC,EAAkB4ie,EAAMr1b,eAAY9vC,EAAYuwoB,GAAS2hB,cAAe,KAAMt7oB,EAAOkB,EAAQ80D,mBAEjJoqG,GAEXq7e,EAAkBnypB,UAAUwypB,aAAe,SAAU5rlB,EAAQqwkB,EAAOqB,EAAU9kV,EAASo/V,EAAQlmlB,GAC3F,IAAImmlB,GACA32nB,QAAW0qC,EAAO1qC,QAClB42nB,YAAezwpB,EAAkBukE,EAAOD,OAASC,EAAO/yD,UACxDsoW,YAAe95W,EAAkBukE,EAAO/yD,UACxCk/oB,MAAS9b,EACTrwkB,OAAUA,EACV0xkB,SAAaj2oB,EAAkBi2oB,GAAuBjI,GAASrvZ,KAApBs3Z,EAC3C9kV,QAAWA,EACX5jR,SAAYg3B,EAAOh3B,SACnBg9B,aAAgBhG,EAAOy4kB,iBAAmBz4kB,EAAOy4kB,kBACjD3ykB,eAAkB9F,EAAOy4kB,iBAAmBz4kB,EAAOy4kB,mBAAqB79oB,EAASolE,EAAOD,MAAO+F,IAKnG,OAHImmlB,EAAIC,YAAkC,aAApBD,EAAIjslB,OAAOt7D,QAC7BunpB,EAAIn8oB,MAAQk8oB,GAET,IAAIzrK,GAAK0rK,IAEpBV,EAAkBnypB,UAAUgzpB,YAAc,SAAUx8oB,GAChD,IAAI7R,EAAQC,KAKZ,OAJA4R,EAAMxS,QAAQ,SAAUsmE,GACpB3lE,EAAM+tpB,qBAAqBpolB,GAC3BA,EAAIkB,MAAQ7mE,EAAMgupB,cAAcrolB,KAE7B9zD,GAEJ27oB,KC3FP98jB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAuBxCu9jB,GAAuC,WAIvC,SAASA,EAAsB/tpB,GAC3BN,KAAKM,OAASA,EA4HlB,OA1HA+tpB,EAAsBjzpB,UAAU84O,QAAU,WACtC,IAAIn0O,EAAQC,KACR4sO,KAUJ,OATA5sO,KAAKM,OAAOukE,WAAWxjE,QAAQjC,QAAQ,SAAUsmE,GAC7C,IAAIrC,EAAUqC,EAAIrC,QAAQn5B,OAAO,SAAU83B,GACvC,QAASA,EAAO24D,gBAAkB34D,EAAOsslB,qBAAuBtslB,EAAOuslB,uBAChExupB,EAAMyupB,eAAexslB,KAE5BqB,EAAQ7mE,QACRowO,EAAKpoO,MAAO6+D,QAASA,MAGtBupK,GAEXyhb,EAAsBjzpB,UAAUozpB,eAAiB,SAAUxslB,GACvD,YAAiC9mE,IAA1B8mE,EAAO24D,gBAElB0zhB,EAAsBjzpB,UAAUgppB,WAAa,SAAU7mpB,EAAO0hB,GAC1D,IAAIokD,KAQJ,OAPIrjE,KAAKM,OAAOk5oB,eACZx5oB,KAAKM,OAAO2opB,cAAc5llB,QAAQjkE,QAAQ,SAAUrC,GAAS,OAAOsmE,EAAQ7+D,KAAK,IAAI++D,WAErFvjE,KAAKM,OAAOqtpB,gBAAmBlwpB,EAAkBuC,KAAKM,OAAOoxT,YAC7DruP,EAAQ7+D,KAAK,IAAI++D,QAErBF,EAAQ7+D,KAAKlJ,MAAM+nE,EAASrjE,KAAKM,OAAO8jpB,cACjC3mpB,EAAkBF,GAAS8lE,EAAUA,EAAQhiE,MAAM9D,EAAO0hB,IAErEovoB,EAAsBjzpB,UAAUoypB,aAAe,SAAU57oB,EAAO3R,EAAM1C,EAAO0hB,GACzE,IAAIlf,EAAQC,KACZ,GAA2C,IAAvCA,KAAKM,OAAOk2O,gBAAgBh6O,OAC5B,SAEJ,IAAID,EAAOyD,KAAKyupB,iBAAiB78oB,EAAO3R,GACpC2sO,KAIJ,OAHA5sO,KAAKk0O,UAAU90O,QAAQ,SAAUsmE,EAAK5zD,GAClC86N,EAAKpoO,KAAKzE,EAAM2upB,gBAAgBhplB,EAAKnpE,EAAKuV,GAAQ7R,EAAOA,EAAKwvK,WAAQv0K,EAAWqC,EAAO0hB,MAErF2tN,GAEXyhb,EAAsBjzpB,UAAUszpB,gBAAkB,SAAUC,EAAYpypB,EAAMqypB,EAAKrxpB,EAAO0hB,GACtF,IAAIlf,EAAQC,KACRkyK,KACA28e,EAAU7upB,KAAK8upB,iBAAiBF,GAChCG,GAAqBtxpB,EAAkBuC,KAAKM,OAAOoxT,WACnDs9V,EAAehvpB,KAAKM,OAAO2opB,cAAc5llB,QAAQ7mE,QAAUwD,KAAKM,OAAOqtpB,iBACtElwpB,EAAkBuC,KAAKM,OAAOoxT,WAAa,EAAI,GACpD1xT,KAAKokpB,WAAW7mpB,EAAO0hB,GAAK7f,QAAQ,SAAUrC,EAAO+U,GAAS,OAAOogK,EAAI1tK,KAAKzE,EAAMkvpB,iBAAiBlypB,EAAO4xpB,EAAY78oB,GAASk9oB,EAAejvpB,EAAMmvpB,cAAgBzjB,GAAS0jB,OAAQN,EAAQ/8oB,GAAQi9oB,MACvM,IAAIrplB,EAAM,IAAIkiK,IAAMrrO,KAAMA,EAAMmH,YAAcuO,MAAO,kBAIrD,OAHAyzD,EAAIkB,MAAQsrG,EACZxsG,EAAIhmE,IAAM8kE,GAAO,YACjBkB,EAAIpuC,QAAU46I,EAAIvzI,KAAK,SAAUopC,GAAQ,OAAOA,EAAKmmlB,YAAcnmlB,EAAKzwC,UACjEouC,GAEX2olB,EAAsBjzpB,UAAU6zpB,iBAAmB,SAAUjtlB,EAAQ2slB,EAAYjb,EAAU5H,EAAQijB,GAE/F,IAAIK,EAAUT,EAAWtrlB,QAAQn5B,OAAO,SAAUmlnB,GAAW,OAAOA,EAAQzL,aAAe5hlB,EAAOD,QAAU,GACxGt+D,GAAUiB,OAAW0qD,UAAa4S,EAAO5S,YACzC08kB,IACArooB,EAAMwO,MAAQ65nB,GAEdruoB,EAAkBquoB,IAAWijB,IAC7BtrpB,EAAMwO,MAAQ,yBAElB,IAAIg8oB,GACA32nB,QAAW0qC,EAAO1qC,QAClB42nB,YAAezwpB,EAAkB2xpB,GACjC73S,WAAc63S,IAAY3xpB,EAAkB2xpB,EAAQz0hB,gBAC7Cy0hB,EAAQd,qBAAuBc,EAAQb,sBAC9CvslB,OAAUotlB,MACV1rpB,WAAcD,EACdiwoB,SAAYA,GAEhB,OAAO,IAAInxJ,GAAK0rK,IAEpBI,EAAsBjzpB,UAAUqzpB,iBAAmB,SAAUlypB,EAAM0D,GAC/D,IAAIF,EAAQC,KACRqge,KAEAivL,KASJ,OAVkBtvpB,KAAKk0O,UAGX90O,QAAQ,SAAUsmE,GAC1B4plB,KACA5plB,EAAIrC,QAAQjkE,QAAQ,SAAU4iE,GAC1BstlB,EAASvvpB,EAAMu8H,YAAYt6D,EAAS/hE,GAAQA,EAAK4kE,WAAc5kE,EAAO1D,EAAM+ypB,KAEhFjvL,EAAM77d,KAAK8qpB,KAERjvL,GAEXguL,EAAsBjzpB,UAAU0zpB,iBAAmB,SAAUvypB,GACzD,OAAOyD,KAAKM,OAAO2opB,cAAc5llB,QAAQ3rC,IAAI,WAAc,MAAO,qBAEtE22nB,EAAsBjzpB,UAAUkhI,YAAc,SAAUt6D,EAAQzlE,EAAM+ypB,GAClE,IAAIvvpB,EAAQC,KACR46E,EAAQ5Y,EAAOt7D,KACfwI,KACA8roB,EAAWh5kB,EAAO+4kB,gBAAwC,SAAU9qnB,GAAK,OAAOA,GAChFipE,EAAQ38F,EAmBZ,OAlBMq+E,aAAiBp8E,QACnBo8E,GAAS5Y,EAAOt7D,OAEpBk0E,EAAMx7E,QAAQ,SAAUsH,GACpB,IAAIrJ,EAAM2kE,EAAOD,MAAQ,MAAQr7D,EAAKkP,cAClC25oB,EAAOvtlB,EAAO4hlB,WACdr7nB,EAAe,WAAT7hB,GAAqBwyF,EAAMr0B,YAAcxnE,KAAO67F,EAAMr0B,WAAaq0B,EAAMr0B,WAAWxnE,GAC1FsnE,GAAmBj+D,EAAMwyF,EAAMr0B,WAAaq0B,EAAQ38F,EAAMylE,EAAQjiE,EAAMO,QAC5EgvpB,EAAOC,GAAQD,EAAOC,OACtBD,EAAOC,GAAMlypB,GAAOkrB,EACpB+moB,EAAOC,GAAM7opB,GAASjJ,EAAkB8qB,GAAuB,IAAhByynB,EAASzynB,GACpD2wE,EAAMn3B,QACNutlB,EAAOC,GAAMxtlB,MAAQm3B,EAAMn3B,MAC3ButlB,EAAOC,GAAMlypB,IAAM67F,EAAM77F,OAGjC6R,EAAOqvB,OAASyjC,EAAO+4kB,eACvB/4kB,EAAOs6D,YAAYptH,GACZogpB,GAEXjB,EAAsBjzpB,UAAU8zpB,YAAc,WAC1C,OAAOzjB,GAAS+jB,SAEbnB,KAGPoB,GAA4C,SAAUn+jB,GAEtD,SAASm+jB,IACL,OAAkB,OAAXn+jB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAY/D,OAdAywF,GAAUg/jB,EAA4Bn+jB,GAItCm+jB,EAA2Br0pB,UAAUozpB,eAAiB,SAAUxslB,GAC5D,YAAsC9mE,IAA/B8mE,EAAOsslB,qBAElBmB,EAA2Br0pB,UAAU0zpB,iBAAmB,SAAUr/e,GAE9D,YADc,IAAVA,IAAoBA,EAAQzvK,KAAKM,OAAO2opB,cAAc5llB,QAAQ7mE,QAC3DwD,KAAKM,OAAO2opB,cAAc5llB,QAAQ3rC,IAAI,SAAU8uI,EAAGoJ,GAAQ,OAAOA,GAAQH,EAAQ,EAAI,GAAK,qBAEtGggf,EAA2Br0pB,UAAU8zpB,YAAc,WAC/C,OAAOzjB,GAASikB,cAEbD,GACTpB,IAEEsB,GAA8C,SAAUr+jB,GAExD,SAASq+jB,IACL,OAAkB,OAAXr+jB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAkB/D,OApBAywF,GAAUk/jB,EAA8Br+jB,GAIxCq+jB,EAA6Bv0pB,UAAUozpB,eAAiB,SAAUxslB,GAC9D,YAAuC9mE,IAAhC8mE,EAAOuslB,sBAElBoB,EAA6Bv0pB,UAAU84O,QAAU,WAE7C,OAAQ5iJ,EAAOl2F,UAAU84O,QAAQ5yO,KAAKtB,MAAMglC,OAAO,SAAUC,EAAMsnD,GAE3D,OADAtnD,EAAKo+B,QAAUp+B,EAAKo+B,QAAQ7oD,OAAO+xE,EAAIlpB,SAChCp+B,IAHCo+B,eAMpBsslB,EAA6Bv0pB,UAAUw8O,QAAU,WAC7C,OAAoD,KAA5C53O,KAAKk0O,UAAU,GAAG7wK,aAAe7mE,QAE7CmzpB,EAA6Bv0pB,UAAU8zpB,YAAc,WACjD,OAAOzjB,GAASmkB,gBAEbD,GACTtB,ICnME59jB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAuBxC++jB,GAAqC,SAAUv+jB,GAE/C,SAASu+jB,EAAoBvvpB,GACzB,IAAIP,EAAQuxF,EAAOhwF,KAAKtB,KAAMM,IAAWN,KAMzC,OALAD,EAAM6sO,QACN7sO,EAAM+R,MAAQ,EACd/R,EAAMO,OAASA,EACfP,EAAM+vpB,gBAAkB,IAAIL,GAA2BnvpB,GACvDP,EAAMgwpB,gBAAkB,IAAIJ,GAA6BrvpB,GAClDP,EAoJX,OA5JA0wF,GAAUo/jB,EAAqBv+jB,GAU/Bu+jB,EAAoBz0pB,UAAUoypB,aAAe,SAAUjxpB,EAAM0D,GACzD,GAAiD,IAA7CD,KAAKM,OAAO2opB,cAAc5llB,QAAQ7mE,OAClC,OAAO80F,EAAOl2F,UAAUoypB,aAAalspB,KAAKtB,KAAMzD,EAAM0D,GAE1DD,KAAK4sO,QACL5sO,KAAK8R,MAAQ9R,KAAKM,OAAO46M,qBAAuBj7M,EAAK4lB,WAAa,EAClE,IAAK,IAAI3pB,EAAI,EAAG2F,EAAMtF,EAAKC,OAAQN,EAAI2F,EAAK3F,IACxC8D,KAAKgwpB,kBAAkB,EAAGzzpB,EAAKL,GAAIK,EAAKkzK,OAG5C,OADAzvK,KAAK8R,MAAQ,EACN9R,KAAK4sO,MAEhBijb,EAAoBz0pB,UAAU40pB,kBAAoB,SAAUl+oB,EAAOvV,EAAMqypB,GACrE,IAAI/rpB,EACA4sK,EAAQm/e,EACZ,GAAInxpB,EAAkBlB,EAAKmjE,OACvB,GAAIjiE,EAAkBlB,EAAK0yK,WACvBjvK,KAAK4sO,KAAO5sO,KAAK4sO,KAAKpyN,OAAOxa,KAAKiwpB,iBAAiB1zpB,EAAMuV,SAGzD,IAAK,IAAI4R,EAAI,EAAG7hB,EAAMtF,EAAKC,OAAQknB,EAAI7hB,EAAK6hB,IACxC1jB,KAAKgwpB,kBAAkBl+oB,EAAOvV,EAAKmnB,GAAInnB,EAAKkzK,YAKpDzvK,KAAK4sO,KAAO5sO,KAAK4sO,KAAKpyN,OAAOxa,KAAKkwpB,mBAAmB3zpB,EAAMuV,IACvDvV,EAAKmjE,OAASnjE,EAAKmjE,MAAMljE,QACzBwD,KAAKgwpB,kBAAkBl+oB,EAAQ,EAAGvV,EAAKmjE,MAAOnjE,EAAKmjE,MAAM+vG,OAEzDzvK,KAAKM,OAAOukE,WAAWroE,SACtBqG,EAAK7C,KAAK4sO,MAAMpoO,KAAKlJ,MAAMuH,EAAI7C,KAAK8vpB,gBAAgBtC,aAAajxpB,GAAQkzK,MAAOA,MAI7Fogf,EAAoBz0pB,UAAU+0pB,mBAAqB,SAAUpulB,EAAO+pkB,EAAQvvoB,GACxE,IAAIwD,EAAQC,KACR4mE,KACAwplB,KACApulB,EAAShiE,KAAKM,OAAO4opB,iBAAiBnnlB,GACtCg/N,EAAU/gS,KAAKM,OAAO4rpB,yBACtBlspB,KAAKM,OAAOgrpB,6BACZtplB,EAAShiE,KAAKM,OAAO+iE,QAAQn5B,OAAO,SAAUtR,GAAK,OAAOA,EAAEmpC,QAAUA,IAAU,IAEpF,IAAIsulB,EAAarwpB,KAAKM,OAAO2opB,cAAc5llB,QAAQ7mE,OAC/C+rpB,EAAOvopB,KAAKM,OAChB,IAAKN,KAAKM,OAAOgrpB,6BAA2D,IAA7BvqX,EAAQxiS,QAAQutoB,GAAgB,CAC3E,IAAK,IAAI5voB,EAAI,EAAGA,EAAI4voB,EAAQ5voB,IACxB0qE,EAAMpiE,KAAKxE,KAAKswpB,sBAEpB1plB,EAAMpiE,KAAKxE,KAAK4tpB,gBAAiB,KAAMniB,GAAS8kB,SAMpD,GAJAzkB,EAAS9roB,KAAKM,OAAOgrpB,2BAA6B,EAC7CtrpB,KAAKM,OAAO6rpB,oBAAoB3vpB,OAAS6zpB,GAAc9H,EAAKoF,gBAAkBpF,EAAK72V,UAAY,EAAI,GAChGo6U,GAAU9roB,KAAKM,OAAO6rpB,oBAAoB3vpB,QAAU,EAAI,GAE5DwD,KAAKM,OAAOukE,WAAWroE,SAAWwD,KAAK+vpB,gBAAgBn4a,UAAW,CAClE,IAAI44a,EAAexwpB,KAAK+vpB,gBAAgBvC,aAAajxpB,GAAM,GAC3DmC,EAAOnC,EAAMi0pB,EAAaj0pB,MAC1B,IAAIk0pB,EAAW,EACfD,EAAa5plB,MAAMjoC,KAAK,SAAUopC,EAAMj2D,GAA2B,OAAlB2+oB,EAAW3+oB,EAAci2D,EAAKzwC,SAAWywC,EAAKmmlB,aAC/FkC,EAAWI,EAAa5plB,MAAMvlE,MAAMovpB,GAAUvmnB,OAAO,SAAU69B,GAAQ,OAAOA,EAAKzwC,UAC/Ek5nB,EAAal5nB,SAAW84nB,EAAS,GAAGpulB,OAAOD,QAAU/hE,KAAKM,OAAO6rpB,oBAAoB,GAAGpqlB,QACxFqulB,EAAWA,EAAS/upB,MAAM,IAEiB,IAA3CrB,KAAKM,OAAO6rpB,oBAAoB3vpB,SAChC4zpB,MAEJtkB,GAAkBskB,EAAS5zpB,OAE/B,IACIk0pB,GAAQ,EAYZ,OAba1wpB,KAAKM,OAAOgrpB,2BAAwCtrpB,KAAKM,OAAO8jpB,cAAtBpilB,IAElD5iE,QAAQ,SAAUqmE,EAAK3zD,GACxB,IAAI6+oB,EAAUD,IAAsC,IAA7B3vX,EAAQxiS,QAAQutoB,GACnC6kB,IACAD,GAAQ,GAEZ,IAAIhd,GAAY3zoB,EAAMO,OAAOgrpB,4BAA8BqF,EACvDllB,GAASmlB,aAAenlB,GAASolB,kBACrC/kB,EAAS/roB,EAAMO,OAAOgrpB,4BAA8B5X,IAAajI,GAASmlB,aAAe9kB,EAASukB,EAAavkB,EAC/GllkB,EAAMpiE,KAAKzE,EAAM6tpB,aAAa5rlB,EAAQ,KAAM0xkB,EAAU5H,MAE1DllkB,EAAMpiE,KAAKlJ,MAAMsrE,EAAOwplB,GACjBxplB,GAEXiplB,EAAoBz0pB,UAAU80pB,mBAAqB,SAAU3zpB,EAAMuvoB,GAC/D,IAAI94nB,KAEAyyD,EAAMzlE,KAAKM,OAAO4opB,iBAAiB3spB,EAAKwlE,OAC5C/uD,EAAQzW,KAAOmC,KAAWnC,GACtBkpE,IACAzyD,EAAQzW,KAAKwlE,MAAQxlE,EAAKwlE,OAE9B/uD,EAAQ45oB,WAAY,EACpB55oB,EAAQtT,IAAM8kE,GAAO,YACrB,IAAIkB,EAAM,IAAIkiK,GAAI50N,GAIlB,OAHA0yD,EAAIomkB,OAASA,EACb9roB,KAAK2gpB,kBAAkBj7kB,GACvBA,EAAIkB,MAAQ5mE,KAAKmwpB,mBAAmB5zpB,EAAKwlE,MAAO+pkB,EAAQpmkB,EAAInpE,MACrDmpE,GAEXmqlB,EAAoBz0pB,UAAUulpB,kBAAoB,SAAUj7kB,GACxD,IAAInpE,EAAOmpE,EAAInpE,KACXkpE,EAAMzlE,KAAKM,OAAO4opB,iBAAiB3spB,EAAKwlE,OACxC0D,GAAOA,EAAIg1kB,iBAAmBh1kB,EAAIg1kB,mBAClCr9oB,EAAS,aAAcqoE,EAAI3D,cAAc2D,EAAIhC,gBAAiBoE,GAAepC,KAASlpE,EAAKc,KAAK,GAAIooE,GAAMC,EAAInpE,OAGtHszpB,EAAoBz0pB,UAAU60pB,iBAAmB,SAAU1zpB,EAAMuvoB,GAG7D,IAAK,IAFDl/Z,KACAm0D,EAAU/gS,KAAKM,OAAO4rpB,yBACjBhwpB,EAAI,EAAG2F,EAAMtF,EAAKC,OAAQN,EAAI2F,EAAK3F,IAAK,CAC7C0wO,EAAK1wO,GAAK8D,KAAKytpB,YAAYlxpB,EAAKL,GAAI8D,KAAK8R,MAAO5V,OAAIhB,EAAY,kBAAmB4woB,GACnF,IAAK,IAAIponB,EAAI,EAAGA,EAAIoonB,EAAQponB,IACpB1jB,KAAKM,OAAOgrpB,6BAA2D,IAA7BvqX,EAAQxiS,QAAQutoB,IAG9Dl/Z,EAAK1wO,GAAG0qE,MAAM3rE,QAAQ+E,KAAKswpB,sBAE/BtwpB,KAAK8R,QAET,OAAO86N,GAEXijb,EAAoBz0pB,UAAUk1pB,mBAAqB,WAC/C,OAAOtwpB,KAAK4tpB,gBAAiB,KAAMniB,GAAS0jB,SAEhDU,EAAoBz0pB,UAAUgzpB,YAAc,SAAUx8oB,GAClD,IAAI7R,EAAQC,KACR+gS,EAAU/gS,KAAKM,OAAO4rpB,yBAgB1B,OAfAt6oB,EAAMxS,QAAQ,SAAUsmE,GACpB,GAAIA,EAAIknlB,UAAW,CACflnlB,EAAIkB,MAAQ7mE,EAAMgupB,cAAcrolB,GAChC,IAAK,IAAIhiD,EAAI,EAAGA,EAAIgiD,EAAIomkB,OAAQponB,IACxB3jB,EAAMO,OAAOgrpB,6BAA+D,IAAjCvqX,EAAQxiS,QAAQmnE,EAAIomkB,SAGnEpmkB,EAAIkB,MAAM3rE,QAAQ8E,EAAMuwpB,0BAG3B,CACD,IAAIQ,EAAO/wpB,EAAMmwpB,mBAAmBxqlB,EAAInpE,KAAMmpE,EAAIomkB,QAClDpmkB,EAAIkB,MAAQkqlB,EAAKlqlB,SAGlBh1D,GAEJi+oB,GACTtC,ICvKEwD,GAA+B,WAI/B,SAASA,EAAczwpB,EAAQ8lE,GAC3B,IAAIrmE,EAAQC,KACZA,KAAK4sO,QACL5sO,KAAKgxpB,cACLhxpB,KAAKixpB,eACLjxpB,KAAKqlY,UAAW,EAChBrlY,KAAKq0D,KAAO,SAAUxzD,GAClBd,EAAMO,OAAOyN,OAAOmjpB,IAAqB/ppB,OAAQtG,EAAEsG,OAAQozG,eAAgB15G,EAAE05G,iBAC7Eh2G,EAAO1D,EAAE05G,iBAEbv6G,KAAKmxpB,YAAc,SAAUlxpB,GACzB,IAAIi4F,EAAMj4F,EACV,OAAO,WAEH,GADAF,EAAMqxpB,YAAYC,QAAQtxpB,EAAMuxpB,WAAWt0oB,YAAY,IACnDjd,EAAMO,OAAO6sF,YAAjB,CAGA,IAAIy/I,EAAO7sO,EAAM6sO,KAAKvrO,MAAM,GAW5B,GAVwC,IAApCtB,EAAMO,OAAOixpB,qBACb3kb,EAAO3sO,EAAKuxpB,SAAWzxpB,EAAMixpB,WAAajxpB,EAAMkxpB,aAEpDlxpB,EAAMO,OAAOyN,OAAO0jpB,IAAuB7kb,KAAMA,EAAM3sO,KAAMi4F,IACzDn4F,EAAMslY,WACNtlY,EAAMO,OAAOqmB,QAAQ+qoB,OACjB3xpB,EAAMO,OAAOqxpB,eACb5xpB,EAAMO,OAAOyN,OAAO6jpB,IAAuBC,KAAM,cAGrD35jB,EAAK,CACL,IAAIllC,GAAUklC,EAAI8xG,aAAe,IAAIp0L,cAAgB,YACrD7V,EAAMO,OAAOyN,OAAOilD,EAAQklC,GACH,cAArBj4F,EAAK+pM,cACL/pM,EAAK25B,QAAS,EACd75B,EAAMO,OAAOqmB,QAAQggoB,GAAuB1mpB,IAGhDF,EAAMslY,UACNtlY,EAAMO,OAAOyiB,iBAIzB/iB,KAAKM,OAASA,EACdN,KAAKomE,eAAiBA,EACtBpmE,KAAKoxpB,YAAcpxpB,KAAKomE,eAAeE,WAAW,eAClDtmE,KAAK8xpB,UAAY9xpB,KAAK+xpB,oBAClB/xpB,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAOwrF,GAAGkmkB,GAAgChypB,KAAKiypB,WAAYjypB,MAChEA,KAAKM,OAAOwrF,GAAGomkB,GAAwBlypB,KAAK49oB,gBAAiB59oB,MAC7DA,KAAKM,OAAOwrF,GAAGqmkB,GAAiBnypB,KAAKoypB,kBAAmBpypB,OA6Y5D,OAxYA+wpB,EAAc31pB,UAAUi3pB,YAAc,WAClC,IAAI9J,EAAOvopB,KAAKM,OACZY,EAAMlB,KAAKM,OAAOa,cAAc,OAASkC,UAAW,kBACpDo0M,EAAWz3M,KAAKM,OAAOa,cAAc,OACrCkC,UAAW,cAEfrD,KAAKoxpB,YAAYkB,WAAW76c,GAAY86c,MAAM,IAC9CrxpB,EAAIS,YAAY81M,GAChBz3M,KAAKwypB,SAAStxpB,GACdqnpB,EAAKvnpB,QAAQW,YAAYT,IAK7B6vpB,EAAc31pB,UAAUq3pB,YAAc,WAClC,IAAIC,EAAa1ypB,KAAKsxpB,WACtBoB,EAAW/wpB,YAAY3B,KAAK2ypB,mBAAmB,mBAC/C3ypB,KAAK4ypB,SAASF,EAAW/vpB,cAAc,aACvC3C,KAAKoxpB,YAAYkB,WAAWtypB,KAAK6sR,YAC7BgmY,gBAAwD,aAAvC7ypB,KAAKM,OAAOu5iB,kBAAkBnziB,OAEnD1G,KAAK8ypB,wBACD9ypB,KAAKM,OAAOyypB,YACZ/ypB,KAAKM,OAAO0ypB,mBAAmBlvpB,UAAUM,IAAI,oBAQrD2spB,EAAc31pB,UAAUu3pB,mBAAqB,SAAUrvpB,GACnD,IAAIm0M,EAAWz3M,KAAKsxpB,WAAWt0oB,WAC3BooD,EAAQplE,KAAKM,OAAOa,cAAc,SAClCkC,UAAW,UAAWI,OAClB6khB,YAAa,SAAU32gB,KAAM,OAC7BrO,GAAItD,KAAKM,OAAOU,QAAQsC,GAAKA,KAOrC,OAJAtD,KAAKizpB,YAAYjzpB,KAAKM,OAAOU,QAAQ2B,cAAc,iBAAiBA,cAAc,YAAYf,WAAU,IACxGwjE,EAAMzjE,YAAY3B,KAAKkzpB,eACvB9tlB,EAAMzjE,YAAY3B,KAAKM,OAAOa,cAAc,UAC5Cs2M,EAAS91M,YAAYyjE,GACdqyI,GAEXs5c,EAAc31pB,UAAU6je,UAAY,SAAU5zc,GACtCrrB,KAAKM,OAAOixpB,qBACA,IAARlmoB,GACArrB,KAAKgxpB,WAAahxpB,KAAK4sO,KACvB5sO,KAAKmzpB,kBAAoBnzpB,KAAKozpB,aAG9BpzpB,KAAKixpB,YAAcjxpB,KAAK4sO,OASpCmkb,EAAc31pB,UAAUi4pB,mBAAqB,SAAUpzpB,GACnD,IAAIF,EAAQC,UACC,IAATC,IAAmBA,MACvB,IAAIsopB,EAAOvopB,KAAKM,OAChB,GAAoC,IAAhCiopB,EAAK/xa,gBAAgBh6O,OAAzB,CAGA,IAIIu2W,EACAugT,EALAjrlB,EAAakglB,EAAK/xa,gBAClB+8a,EAAO/ypB,SAASyE,yBAChBuupB,EAAUhzpB,SAASyE,yBACnBo+D,EAAUkllB,EAAKnE,aAGfp6kB,EAAUu+kB,EAAKgJ,mBACf7rlB,EAAM,IAAI0mlB,GAAYpspB,KAAKomE,eAAgB,KAAMpmE,KAAKM,QAC1DN,KAAKozpB,eACLpzpB,KAAK4sO,QACL,IAAI6mb,EAAQzzpB,KAAKsxpB,WAAW3upB,cAAc,oBACtC+wpB,EAAQ1zpB,KAAKsxpB,WAAW3upB,cAAc,qBACtCm5J,EAAO97J,KAAKsxpB,WAAW3upB,cAAc,cACrCgxpB,EAAY3zpB,KAAK8xpB,UAAUtE,aAAanllB,EAAYpoE,GACpDxC,EAAkBk2pB,EAAU,GAAG/slB,MAAM,MACrC8slB,EAAM/wpB,cAAc,SAASX,UAAY,IAE7C,IAAIqpB,EAAMsooB,EAAU,GAAG/slB,MAAM,GAAG90D,MAKhC,GAHI9R,KAAKM,OAAOszpB,oBAAsB5zpB,KAAKM,OAAOszpB,mBAAmB3kpB,WAAahP,EAAKuxpB,UACnFxxpB,KAAKM,OAAO+jpB,iBAAiB,aAE7BrkpB,KAAKM,OAAOgrpB,2BAA4B,CACxB,IAAIN,GAAgBhrpB,KAAKomE,eAAgBpmE,KAAKM,QACpDwrpB,mBAAmB6H,GAG7B3zpB,KAAK6zpB,MADL7plB,GAAW3+C,GAAO2+C,EACL0plB,EAAM/wpB,cAAc,SAGpB3C,KAAK6sR,WAAWlqR,cAAc,SAE/C,IAAK,IAAIzG,EAAI,EAAG2F,EAAM8xpB,EAAUn3pB,OAAQN,EAAI2F,EAAK3F,IAAK,CAClD,GAAKqspB,EAAK8D,YASL,CACD,IAAIzopB,EAAW2kpB,EAAKuL,gBAALvL,CAAsB7ppB,GAASoT,MAAO5V,GAAKmsE,EAAWnsE,IAAKqspB,EAAM,eAChF,GAA4B,UAAxB3kpB,EAAS,GAAGZ,QAAqB,CACjC,IAAK,IAAI0gB,EAAI,EAAGA,EAAI9f,EAASpH,OAAQknB,IAAK,CACtC,IAAIqwoB,EAA8C,OAAvCnwpB,EAAS8f,GAAG3R,SAAS6D,eAC5Bm+oB,GAASnwpB,EAAS8f,GAAGliB,kBAAoBoC,EAAS8f,GAAGliB,iBAAiB,MAAMhF,UAC5Eu2W,EAAKghT,EAAOnwpB,EAAS8f,GAAK9f,EAAS8f,GAAG/gB,cAAc,OAGxD4lpB,EAAKwK,YAAc72pB,EAAIqspB,EAAKwK,WAC5BS,EAAQ7xpB,YAAYoxW,GAGpBwgT,EAAK5xpB,YAAYoxW,QAKjBA,EADAw1S,EAAKwK,YAAc72pB,EAAIqspB,EAAKwK,WACvBtulB,GAAe+ulB,EAAS5vpB,GAIxB6gE,GAAe8ulB,EAAM3vpB,QA9BlCmvW,EAAKrtS,EAAI0sC,OAAOuhjB,EAAUz3pB,GAAImnE,GAC1BkllB,EAAKwK,YAAc72pB,EAAIqspB,EAAKwK,WAC5BS,EAAQ7xpB,YAAYoxW,GAGpBwgT,EAAK5xpB,YAAYoxW,GA8BzB,GADA/yW,KAAK4sO,KAAKpoO,KAAKmvpB,EAAUz3pB,IACrBy3pB,EAAUz3pB,GAAG0wpB,UAAW,CAExB,IAAI39W,EAAK8jE,EAAGvxW,iBAAiB,2BAA2B,GACpDytS,GACAA,EAAGnrS,UAAUM,IAAI,sBAErBpE,KAAKozpB,YAAY5upB,KAAKuuW,GAE1B/yW,KAAKoxpB,YAAYkB,WAAWtypB,KAAK6sR,YAAcmnY,SAAUzL,EAAKnE,aAAa5npB,OAAO0Q,aAEtFlN,KAAKi/d,UAAU5zc,GACXk9nB,EAAKwK,cACLO,EAAWtplB,EAAUu+kB,EAAKyK,mBAAmBrwpB,cAAsB,IAAR0oB,EAAY,kBACjE,oBAAoB1oB,cAAc,SAAW4lpB,EAAK0L,iBAAiBtxpB,cAAc,UAC9EX,UAAY,GACrBsxpB,EAAS3xpB,YAAY6xpB,IAErBjL,EAAKwK,YAAsB,IAAR1noB,GAAaywI,EAAKnkG,eAAiBvgC,OAAOmxnB,EAAKxyoB,UAClE+lJ,EAAKp3J,MAAMqR,OAAU+lJ,EAAKnkG,aAAe27lB,EAAS37lB,aAAgB,MAElEqS,GAAmB,IAAR3+C,IACXrrB,KAAKsxpB,WAAWt0oB,WAAWtY,MAAMoV,UAAY,UAEjD7Z,EAAK2sO,KAAO5sO,KAAK4sO,KAAKvrO,MAAM,GAC5BpB,EAAKuxpB,SAA8C,IAAnCxxpB,KAAKM,OAAOixpB,qBAA6BtxpB,EAAKuxpB,SAC9DxxpB,KAAK8R,MAAQuZ,EACb62C,GAAkB,WACdniE,EAAMO,OAAOyN,OAAOmmpB,GAAyBj0pB,GACxCF,EAAMO,OAAO46M,uBACd32M,EAAOxE,EAAM8zpB,OACb9zpB,EAAM8zpB,MAAQ9zpB,EAAMO,OAAOa,cAAc,UAEzC6oE,GACAjqE,EAAM8zpB,MAAMlypB,YAAY4xpB,GACJ,IAAhBxzpB,EAAM+R,OACN/R,EAAMslY,UAAW,EACjBouR,EAAM9wpB,cAAc,SAAShB,YAAY5B,EAAM8zpB,SAG3C9zpB,EAAM8zpB,MAAM3plB,kBAAoB,GAChCnqE,EAAM8zpB,MAAMlypB,YAAY5B,EAAMO,OAAOa,cAAc,MAAMQ,YAAY5B,EAAMO,OAAOa,cAAc,QAEpGpB,EAAMslY,UAAW,EACjBquR,EAAM/wpB,cAAc,SAAShB,YAAY5B,EAAM8zpB,OAC/CJ,EAAM/upB,MAAMqR,OAAW29oB,EAAkB,aAAI5ulB,KAAuB,KACpE4ulB,EAAMhvpB,MAAMoV,UAAoC,SAAxB/Z,EAAMO,OAAOyV,OAAoB,SAAW,OACpE09oB,EAAM/upB,MAAMkmX,iBAAmB,QAInC7qX,EAAMo0pB,cAAcp0pB,EAAM8zpB,MAAON,EAAMtzpB,GAEvC+pE,GAAmB,IAAR3+C,GACXtrB,EAAMszpB,mBAAmB30pB,KAAWuB,IAExCszpB,EAAO,MACRvzpB,KAAKmxpB,YAAYzypB,KAAWuB,OAEnC8wpB,EAAc31pB,UAAU+4pB,cAAgB,SAAUN,EAAON,EAAMtzpB,GAC3D4zpB,EAAMlypB,YAAY4xpB,GAClBvzpB,KAAK6sR,WAAWlrR,YAAYkypB,IAMhC9C,EAAc31pB,UAAUk2pB,SAAW,WAC/B,OAAOtxpB,KAAKo0pB,cAMhBrD,EAAc31pB,UAAUo3pB,SAAW,SAAU6B,GACzCr0pB,KAAKo0pB,aAAeC,GAMxBtD,EAAc31pB,UAAUyxR,SAAW,WAC/B,OAAO7sR,KAAKs0pB,cAMhBvD,EAAc31pB,UAAUw3pB,SAAW,SAAUxtlB,GACzCplE,KAAKs0pB,aAAelvlB,GAMxB2rlB,EAAc31pB,UAAUm5pB,QAAU,WAC9B,OAAOv0pB,KAAKM,OAAOixpB,mBAAqBvxpB,KAAKgxpB,WAAahxpB,KAAK4sO,MAMnEmkb,EAAc31pB,UAAUo5pB,eAAiB,WACrC,OAAOx0pB,KAAKixpB,aAMhBF,EAAc31pB,UAAUq5pB,eAAiB,WACrC,OAAOz0pB,KAAKM,OAAOixpB,mBAAqBvxpB,KAAKmzpB,kBAAoBnzpB,KAAKozpB,aAM1ErC,EAAc31pB,UAAUs5pB,sBAAwB,WAC5C,OAAO10pB,KAAKozpB,aAMhBrC,EAAc31pB,UAAUu5pB,eAAiB,SAAU/wpB,GAC/C5D,KAAKozpB,YAAcxvpB,GAMvBmtpB,EAAc31pB,UAAU83pB,YAAc,WAClC,OAAOlzpB,KAAK40pB,UAOhB7D,EAAc31pB,UAAU63pB,YAAc,SAAU4B,GAC5C,OAAO70pB,KAAK40pB,SAAWC,GAM3B9D,EAAc31pB,UAAU62pB,WAAa,SAAU5ulB,GAC3C,IAAIkllB,EAAOvopB,KAAKM,OACZ0pE,EAAUu+kB,EAAKgJ,mBACf3kb,KACJ,GAAI5iK,EAKA,IAAK,IAJD8qlB,EAAQ90pB,KAAKgxpB,WACb+D,EAAQ/0pB,KAAKixpB,YACb+D,EAASF,EAAMt4pB,OACfy4pB,OAAU,EACL/4pB,EAAI,EAAGwpE,OAAM,EAAQxpE,EAAI84pB,EAAQ94pB,IAAK,CAC3C+4pB,EAAUF,EAAM74pB,GAAG0qE,MAAMpqE,OACzBkpE,EAAMovlB,EAAM54pB,GAAGmD,QACf,IAAK,IAAIqkB,EAAI,EAAGA,EAAIuxoB,EAASvxoB,IACzBgiD,EAAIkB,MAAMpiE,KAAKuwpB,EAAM74pB,GAAG0qE,MAAMljD,IAElCkpN,EAAKpoO,KAAKkhE,QAIdknK,EAAO5sO,KAAKu0pB,UAEhB,IACIW,EACJtob,EAAKjuM,KAAK,SAAUQ,GAElB,OAF2BA,EAAEytnB,YAC3BsI,EAAU/1nB,GACLA,EAAEytnB,YACX,IACK,IAAIh0nB,EAAI,EAAGu8nB,EAAO9xlB,EAAQ7mE,OAAQo8B,EAAIu8nB,EAAMv8nB,IAAK,CAClD,IAAIopC,EAASqB,EAAQzqC,GACjBvN,EAAMrrB,KAAKM,OAAO80pB,yBAAyBpzlB,EAAOtiE,KAEtD,IAAIM,KAAKq1pB,QAAQrzlB,EAAQkzlB,EAAS7poB,GAAlC,CAGA,IAAIiqoB,GAAgC,IAAnBtzlB,EAAO1qC,QAAmB,GAAK,OAChD,GAAI0yC,EACA,GAAI3+C,EAAM2+C,EACN/jE,EAAkBjG,KAAKkzpB,cAAc5hpB,WAAW+Z,IAAQylB,QAAWwknB,QAElE,CAEDrvpB,EADasipB,EAAK/2lB,aAAa7uD,cAAc,qBAAqBA,cAAc,YACvD2O,WAAW+Z,EAAM2+C,IAAYl5B,QAAWwknB,SAIrErvpB,EAAkBjG,KAAKkzpB,cAAc5hpB,WAAW+Z,IAAQylB,QAAWwknB,KAG3Et1pB,KAAKqzpB,oBAAqBrpd,YAAa,aAE3C+md,EAAc31pB,UAAUwipB,gBAAkB,WACtC,GAAI59oB,KAAKkzpB,cAAe,CACpB,IAAI2B,EAAW70pB,KAAKM,OAAOU,QAAQ2B,cAAc,iBAAiBA,cAAc,YAAYf,WAAU,GACtG5B,KAAK6sR,WAAWxvP,aAAaw3nB,EAAU70pB,KAAKkzpB,eAC5ClzpB,KAAKizpB,YAAY4B,KAGzB9D,EAAc31pB,UAAU03pB,sBAAwB,WAC5C,IAAIvK,EAAOvopB,KAAKM,OACL,IAAI05G,GAAUuuiB,EAAK/2lB,cAC1B2oD,OAAQ,eACR9lD,KAAMr0D,KAAKq0D,QAGnB08lB,EAAc31pB,UAAUi6pB,QAAU,SAAUrzlB,EAAQ0D,EAAK5zD,GAOrD,OAAOrU,EAAkBioE,IACrBjoE,EAAkBukE,EAAO1qC,UACzBouC,EAAIkB,MAAM90D,GAAOwlB,UAAY0qC,EAAO1qC,SAE5Cy5nB,EAAc31pB,UAAU22pB,kBAAoB,WACxC,OAAO/xpB,KAAK8xpB,UAAY9xpB,KAAKM,OAAOk5oB,cAAgB,IAAIqW,GAAoB7vpB,KAAKM,QAAU,IAAIitpB,GAAkBvtpB,KAAKM,SAE1HywpB,EAAc31pB,UAAUwmpB,YAAc,SAAUiS,GAC5C7zpB,KAAK6sR,WAAWlrR,YAAYkypB,GACxB7zpB,KAAKM,OAAOyypB,aACZ/ypB,KAAKM,OAAO0ypB,mBAAmBrwpB,cAAc,SAASX,UAAY,KAG1E+upB,EAAc31pB,UAAUohO,aAAe,SAAU98N,EAAK2H,EAAKm/I,GACnDxmJ,KAAKM,OAAOixpB,oBACZvxpB,KAAKw0pB,iBAAiBtqnB,OAAO,SAAUw7B,GAAO,OAAO8gF,GAAY9mJ,IAAQgmE,EAAIhmE,MAAQN,QAAQ,SAAUsmE,GAAO,OAAOA,EAAI1H,WAAa32D,IAE1IrH,KAAKu0pB,UAAUrqnB,OAAO,SAAUw7B,GAAO,OAAO8gF,GAAY9mJ,IAAQgmE,EAAIhmE,MACjEN,QAAQ,SAAUsmE,GACnBA,EAAI1H,WAAa32D,EACjBq+D,EAAIkB,MAAMxnE,QAAQ,SAAU2oE,GAAQ,OAAOA,EAAK/J,WAAa32D,OAGrE0ppB,EAAc31pB,UAAUm6pB,cAAgB,SAAUzjpB,GAC9C,OAAO9R,KAAKM,OAAOk1pB,cAAc1jpB,IAErCi/oB,EAAc31pB,UAAUq6pB,mBAAqB,SAAU3jpB,GACnD,OAAOA,GAEXi/oB,EAAc31pB,UAAUs6pB,qBAAuB,SAAU5jpB,GACrD,OAAO9R,KAAKM,OAAOq1pB,qBAAqB7jpB,IAE5Ci/oB,EAAc31pB,UAAUg3pB,kBAAoB,SAAUvxpB,GACjC,UAAbA,EAAEy2F,QAAsBz2F,EAAEohC,SAC1BjiC,KAAK8xpB,UAAY9xpB,KAAK+xpB,sBAG9BhB,EAAc31pB,UAAUw6pB,cAAgB,SAAUhpb,GAC9C5sO,KAAK4sO,KAAOA,GAETmkb,KCncP8E,GAA8B,WAI9B,SAASA,EAAav1pB,EAAQ8lE,GAC1B,IAAIrmE,EAAQC,KACZA,KAAK81pB,OAAS,EACd91pB,KAAKkP,OAAS,SAAUrO,GACpB,IAAI0npB,EAAOxopB,EAAMO,OACb6G,EAAStG,EAAE24G,OAAOryG,OAClBmhI,EAAY/uE,GAAapyD,EAAQ,gBACrC,IAAMohpB,EAAK9O,kBAAmB8O,EAAK/O,gBAAoB/7oB,EAAkB6qI,IAClEA,EAAU9mI,iBAAiB,qBAAqBhF,OAAS,EAC5D,OAAO,EAEX,IAAIu5pB,EAAgBh2pB,EAAMO,OAAOa,cAAc,OAASkC,UAAW,gDAC/DrC,EAAUmG,EAAOrD,UAAUK,SAAS,gBAAkBgD,EAASmhI,EACnE,IAAKtnI,IAAaunpB,EAAK9O,iBAAmBz4oB,EAAQ8C,UAAUK,SAAS,uBACjE,OAAO,EAEX,IAEIshE,EAFA1vD,EAAS/U,EAAQ22D,aACjBq+lB,EAAgBh1pB,EAAQ2B,cAAc,qBAAuB3B,EAAQ2B,cAAc,2BA4BvF,OA1BIqzpB,IAEIvwlB,EADAzkE,EAAQ2B,cAAc,2BAChB4lpB,EAAK0N,mCAAmCD,EAAc91lB,UAAUjwD,OAAQs4oB,EAAKlllB,SAG7EkllB,EAAK2N,eAAeF,EAAcnjpB,aAAa,iBAEzD9S,EAAMiiE,OAASyD,EACfswlB,EAAcvypB,aAAa,eAAgBzD,EAAMiiE,OAAOtiE,MAExD+lE,IAAQhoE,EAAkBgoE,EAAIuyI,iBACW,IAArCvyI,EAAIuyI,eAAez5M,QAAQ,KAC3Bw3pB,EAAc/zpB,UAAYxB,SAASmC,cAAc8iE,EAAIuyI,gBAAgBh2M,UAAUiO,OAG/E8lpB,EAAc/zpB,UAAYyjE,EAAIuyI,eAIlC+9c,EAAc/zpB,UAAYg0pB,EACtBvwlB,EAAIjC,WAAaxiE,EAAQmE,kBAAkBnD,UAEnD+zpB,EAAcrxpB,MAAMsR,MAAQhV,EAAQ4D,YAAc,KAClDmxpB,EAAcrxpB,MAAMqR,OAAS/U,EAAQ22D,aAAe,KACpDo+lB,EAAcrxpB,MAAMgrB,YAAc3Z,EAAS,GAAG7I,WAAa,KAC3Dq7oB,EAAKvnpB,QAAQW,YAAYo0pB,GAClBA,GAEX/1pB,KAAKu2G,UAAY,SAAU11G,GACvB,IAAI0npB,EAAOxopB,EAAMO,OACjBiopB,EAAKvnpB,QAAQ2B,cAAc,gBAAgB+B,MAAMosC,QAAU,OAC3Dy3mB,EAAKx6oB,OAAOoopB,IAA0BhvpB,OAAQtG,EAAEsG,OAAQ66D,OAAQjiE,EAAMiiE,OAAQ3lE,MAAOwE,EAAExE,SAE3F2D,KAAKu3G,KAAO,SAAU12G,GAClB,IAAI0npB,EAAOxopB,EAAMO,OACb6G,EAAStG,EAAEsG,OACf,GAAIA,EAAQ,CACR,IAAItB,EAAUyvO,EAAWnuO,EAAQ,WAC7B0iI,EAAe9pI,EAAMO,OAAOU,QAAQ2B,cAAc,sBACtD,IAAKkD,GAAWA,EAAQgN,aAAa,QAAU01oB,EAAKvnpB,QAAQ6R,aAAa,MAMrE,OALA/O,EAAU+lI,GAAe,oBAAqB,sBAC1C0+gB,EAAK9O,kBACL8O,EAAKvnpB,QAAQ2B,cAAc,qBAAqB+B,MAAMosC,QAAU,OAChEy3mB,EAAKvnpB,QAAQ2B,cAAc,uBAAuB+B,MAAMosC,QAAU,SAI1Ey3mB,EAAKx6oB,OAAOqopB,IAAqBjvpB,OAAQtG,EAAEsG,OAAQ66D,OAAQjiE,EAAMiiE,OAAQ3lE,MAAOwE,EAAExE,UAG1F2D,KAAK44G,SAAW,SAAU/3G,GACtB,IACI+4B,EADA2unB,EAAOxopB,EAAMO,OAEjBiopB,EAAKvnpB,QAAQ2B,cAAc,gBAAgB+B,MAAMosC,QAAU,SACrDyoB,GAAa14D,EAAEsG,OAAQ,kBAAoBoyD,GAAa14D,EAAEsG,OAAQ,qBAClEohpB,EAAK9O,iBAAmBlglB,GAAa14D,EAAEsG,OAAQ,kBAC/CtG,EAAEqO,OAAO2D,aAAa,iBAAmB0mD,GAAa14D,EAAEsG,OAAQ,sBAClE5C,EAAO1D,EAAEqO,QACT0qB,GAAS,GAEb2unB,EAAKx6oB,OAAOsopB,IAAyBlvpB,OAAQtG,EAAEsG,OAAQ9K,MAAOwE,EAAExE,MAAO2lE,OAAQjiE,EAAMiiE,OAAQpoC,OAAQA,KAEzG55B,KAAKq0D,KAAO,SAAUxzD,GAClB,IAAI0npB,EAAOxopB,EAAMO,OACbZ,EAAMmB,EAAE05G,eAAe1nG,aAAa,gBACpChN,EAAUyvO,EAAWz0O,EAAEsG,OAAQ,WACnC5C,EAAO1D,EAAE05G,gBACL10G,GAAWA,EAAQgN,aAAa,QAAU01oB,EAAKvnpB,QAAQ6R,aAAa,QAClE01oB,EAAK9O,kBAAmB8O,EAAK/O,eAGnC+O,EAAKx6oB,OAAOuopB,IAAqBnvpB,OAAQtG,EAAEsG,OAAQzH,IAAKA,KAE5DM,KAAKM,OAASA,EACdN,KAAKomE,eAAiBA,EACtBpmE,KAAKoxpB,YAAcpxpB,KAAKomE,eAAeE,WAAW,eAClDtmE,KAAKu2pB,aAAev2pB,KAAKomE,eAAeE,WAAW,gBAC/CtmE,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAOwrF,GAAGkmkB,GAAgChypB,KAAKiypB,WAAYjypB,MAChEA,KAAKM,OAAOwrF,GAAG0qkB,GAA8Bx2pB,KAAKy2pB,cAAez2pB,OAibrE,OA5aA61pB,EAAaz6pB,UAAUi3pB,YAAc,WACjC,IAAInxpB,EAAMlB,KAAKM,OAAOa,cAAc,OAASkC,UAAW,iBACpDo0M,EAAWz3M,KAAKM,OAAOa,cAAc,OAASkC,UAAW,oBAC7DnC,EAAIS,YAAY81M,GAChBz3M,KAAKwypB,SAAStxpB,GACdlB,KAAKM,OAAOU,QAAQW,YAAYT,IAKpC20pB,EAAaz6pB,UAAUq3pB,YAAc,WACjC,IAAIiE,EAAY12pB,KAAKsxpB,WACrBoF,EAAU/0pB,YAAY3B,KAAK22pB,qBAC3B32pB,KAAK4ypB,SAAS8D,EAAU/zpB,cAAc,aACjC3C,KAAKM,OAAOixpB,qBACbvxpB,KAAK42pB,uBACL52pB,KAAK62pB,wBAET72pB,KAAKM,OAAOyN,OAAO+opB,IAA0Blqb,KAAM5sO,KAAK4sO,KAAM3sO,MAAQuxpB,SAA6C,IAAnCxxpB,KAAKM,OAAOixpB,uBAMhGsE,EAAaz6pB,UAAUk2pB,SAAW,WAC9B,OAAOtxpB,KAAK+2pB,aAMhBlB,EAAaz6pB,UAAUo3pB,SAAW,SAAU6B,GACxCr0pB,KAAK+2pB,YAAc1C,GAMvBwB,EAAaz6pB,UAAUyxR,SAAW,WAC9B,OAAO7sR,KAAKg3pB,aAMhBnB,EAAaz6pB,UAAUw3pB,SAAW,SAAUxtlB,GACxCplE,KAAKg3pB,YAAc5xlB,GAMvBywlB,EAAaz6pB,UAAU83pB,YAAc,WACjC,OAAOlzpB,KAAK40pB,UAOhBiB,EAAaz6pB,UAAU63pB,YAAc,SAAU4B,GAC3C,OAAO70pB,KAAK40pB,SAAWC,GAM3BgB,EAAaz6pB,UAAUm5pB,QAAU,WAE7B,OADYv0pB,KAAK6sR,WACJoqY,MAAMrqb,MAOvBipb,EAAaz6pB,UAAUu7pB,kBAAoB,WACvC,IAAIvxlB,EAAQplE,KAAKgnkB,cACbvvX,EAAWz3M,KAAKsxpB,WAAWt0oB,WAE/B,OADAy6L,EAAS91M,YAAYyjE,GACdqyI,GAKXo+c,EAAaz6pB,UAAU4rkB,YAAc,WACjC,IAAIuhF,EAAOvopB,KAAKM,OAEZ8kE,GADUmjlB,EAAKnE,aACPpkpB,KAAKM,OAAOa,cAAc,SAAWkC,UAAW,UAAWI,OAAS6khB,YAAa,SAAU32gB,KAAM,WAEzGulpB,GADWl3pB,KAAKsxpB,WAAWt0oB,WACXhd,KAAKy8H,uBACrB06hB,EAAQD,EAAcC,MACtBtD,EAAQ7zpB,KAAKM,OAAOa,cAAc,SAAWkC,UAAWrD,KAAKM,OAAOyypB,WAAa,GAAK,WAC1F/ypB,KAAKo3pB,QAAUp3pB,KAAKM,OAAOa,cAAc,WAAaa,UAAWhC,KAAKM,OAAOU,QAAQsC,GAAK,gBAAiBD,UAAW,WAMtH,IAAK,IAHDg0pB,EAFAxC,EAAW70pB,KAAKM,OAAOa,cAAc,YACrCm2pB,EAAUt3pB,KAAKM,OAAOa,cAAc,MAEpCyrO,EAAO5sO,KAAK4sO,KAAOsqb,EAActqb,KAE5B1wO,GADS,IAAIkwpB,GAAYpspB,KAAKomE,eAAgBqlkB,GAASzwQ,OAAQh7X,KAAKM,QAChE,GAAGuB,EAAM+qO,EAAKpwO,OAAQN,EAAI2F,EAAK3F,IACxC,IAAK,IAAIwnB,EAAI,EAAG4iJ,EAAQsmE,EAAK1wO,GAAG0qE,MAAMpqE,OAAQknB,EAAI4iJ,EAAO5iJ,IAAK,CAC/CkpN,EAAK1wO,GAAG0qE,MAAMljD,GACzB2zoB,EAAWr3pB,KAAKM,OAAOa,cAAc,MACrCm2pB,EAAQ31pB,YAAY01pB,GAa5B,OAVI9O,EAAKh/C,gBAAkBg/C,EAAKjP,cAAgBiP,EAAK/O,gBACjDp0kB,EAAMthE,UAAUM,IAAI,gBAExBpE,KAAKu3pB,eAAe1C,GACpBhB,EAAMlypB,YAAY21pB,GAClBlylB,EAAMzjE,YAAY3B,KAAKizpB,YAAY4B,IACnCzvlB,EAAMzjE,YAAYw1pB,GAClB/xlB,EAAMzjE,YAAYkypB,GAClBzulB,EAAMzjE,YAAY3B,KAAKo3pB,SACvBp3pB,KAAKoxpB,YAAYkB,WAAWltlB,GAAS4ulB,SAAUzL,EAAKnE,aAAa5npB,OAAO0Q,aACjEk4D,GAEXywlB,EAAaz6pB,UAAUqhI,oBAAsB,WACzC,IAAI8rhB,EAAOvopB,KAAKM,OACZ+iE,EAAUkllB,EAAKnE,aACf+S,EAAQn3pB,KAAKM,OAAOa,cAAc,SAClCq2pB,EAAYx3pB,KAAKM,OAAOa,cAAc,MAAQkC,UAAW,mBACzDo0pB,EAAc,IAAIrL,GAAYpspB,KAAKomE,eAAgBqlkB,GAASzwQ,OAAQutR,GACxEkP,EAAYz2pB,QAAUw2pB,EACtB,IACIE,EADA9qb,KAEJ5sO,KAAK23pB,SAAW33pB,KAAK43pB,cACrB,IAAK,IAAI17pB,EAAI,EAAG2F,EAAM7B,KAAK23pB,SAAUz7pB,EAAI2F,EAAK3F,IAC1C0wO,EAAK1wO,GAAK8D,KAAKytpB,YAAYvxpB,GAC3B0wO,EAAK1wO,GAAG0qE,SAEZgmK,EAAO5sO,KAAK0tpB,cAAc9gb,GAC1BA,EAAO5sO,KAAK63pB,eAAejrb,GAC3B,IAAS1wO,EAAI,EAAG2F,EAAM7B,KAAK23pB,SAAUz7pB,EAAI2F,EAAK3F,IAC1Cw7pB,EAAYD,EAAYrljB,OAAOw6H,EAAK1wO,GAAImnE,GACpCrjE,KAAKM,OAAO6kE,WAAauylB,EAAU/0pB,cAAc,mBACjD+0pB,EAAUhzpB,MAAMqR,OAAS/V,KAAKM,OAAO6kE,UAAY,MAErDgylB,EAAMx1pB,YAAY+1pB,GAMtB,OAHIP,MAAOA,EACPvqb,KAAMA,IAIdipb,EAAaz6pB,UAAUm8pB,eAAiB,SAAU1C,GAC9C,IACIpvlB,EADA8glB,EAAOvmpB,KAAKM,OAAO8jpB,aAEnBrjX,EAAU/gS,KAAKM,OAAO4rpB,yBAC1B,GAAIlspB,KAAKM,OAAOk5oB,cACZ,IAAK,IAAIt9oB,EAAI,EAAG2F,EAAM7B,KAAKM,OAAO2opB,cAAc5llB,QAAQ7mE,OAAQN,EAAI2F,EAAK3F,IACjE8D,KAAKM,OAAOgrpB,6BAAsD,IAAxBvqX,EAAQxiS,QAAQrC,KAG9DupE,EAAMzlE,KAAKM,OAAOa,cAAc,OAChC0zpB,EAASlzpB,YAAY8jE,KAGzBzlE,KAAKM,OAAOqtpB,gBAAkB3tpB,KAAKM,OAAOoxT,aAC1CjsP,EAAMzlE,KAAKM,OAAOa,cAAc,OAChC0zpB,EAASlzpB,YAAY8jE,IAEzB,IAASvpE,EAAI,EAAG2F,EAAM0kpB,EAAK/ppB,OAAQN,EAAI2F,EAAK3F,IACxCupE,EAAMzlE,KAAKM,OAAOa,cAAc,QACR,IAApBolpB,EAAKrqpB,GAAGo7B,SACRrxB,EAAkBw/D,GAAO30B,QAAW,SAExC+jnB,EAASlzpB,YAAY8jE,GAEzB,OAAOovlB,GAEXgB,EAAaz6pB,UAAUsypB,cAAgB,SAAU9gb,GAI7C,IAAK,IAFD27a,EAAOvopB,KAAKM,OACZygS,EAAU/gS,KAAKM,OAAO4rpB,yBACjBhwpB,EAAI,EAAG2F,EAAM+qO,EAAKpwO,OAAQN,EAAI2F,EAAK3F,IAAK,CAC7C,GAAIqspB,EAAK/O,cACL,IAAK,IAAI5gnB,EAAI,EAAG60M,EAAQ86a,EAAKU,cAAc5llB,QAAQ7mE,OAAQo8B,EAAI60M,EAAO70M,IAC9D54B,KAAKM,OAAOgrpB,6BAAsD,IAAxBvqX,EAAQxiS,QAAQq6B,IAG9Dg0M,EAAK1wO,GAAG0qE,MAAMpiE,KAAKxE,KAAK4tpB,gBAAiBniB,GAASqsB,gBAGtDvP,EAAKoF,gBAAkBpF,EAAK72V,YAC5B9kF,EAAK1wO,GAAG0qE,MAAMpiE,KAAKxE,KAAK4tpB,gBAAiBniB,GAASssB,eAG1D,OAAOnrb,GAEXipb,EAAaz6pB,UAAUy8pB,eAAiB,SAAUjrb,GAC9C,IACIuqb,EAAQn3pB,KAAKM,OAAO2zpB,kBAAoBj0pB,KAAKM,OAAO2zpB,iBAAiBtxpB,cAAc,SACnF4jpB,EAAOvmpB,KAAKM,OAAOgrpB,2BAA6BtrpB,KAAKM,OAAO8jpB,aAAepkpB,KAAKM,OAAO+iE,QAC3FrjE,KAAK81pB,OAAS,EACd,IAAK,IAAI55pB,EAAI,EAAG2F,EAAM0kpB,EAAK/ppB,OAAQN,EAAI2F,EAAK3F,IACxC0wO,EAAO5sO,KAAKg4pB,YAAYzR,EAAKrqpB,GAAI0wO,EAAM,EAAS,IAAN1wO,GAAS,EAAOA,IAAO2F,EAAM,EAAIs1pB,GAE/E,OAAOvqb,GAEXipb,EAAaz6pB,UAAU48pB,YAAc,SAAUzR,EAAM35a,EAAM96N,EAAOmmpB,EAAYC,EAAYC,EAAWC,GACjG,IAAIC,EAAUF,EAAY,aAAe,GACrCnulB,EAAUhqE,KAAKM,OAAOixpB,mBAC1B,GAAKhL,EAAKljlB,QAQL,CACD,IAAIurP,EAAU5uT,KAAKs4pB,WAAW/R,EAAM,GACpC,GAAI33V,EAAS,CACT,IAAI2pW,EAASv4pB,KAAKw4pB,iBAAiBjS,EAAKljlB,SAAWo1lB,WAAW,EAAOC,QAAQ,EAAM/opB,IAAK,MACnFq6D,GAAYA,KACPoulB,IAAcp4pB,KAAKM,OAAOq4pB,cAAgB34pB,KAAK81pB,OAAS,GAAMyC,EAAgB,YAC5EH,GAAcxpW,EAAU5uT,KAAK81pB,OAAS91pB,KAAKM,OAAOq4pB,gBAAkBJ,EAAOG,UACnF9rb,EAAK96N,GAAO80D,MAAMpiE,KAAK,IAAI+9e,IACvBmxJ,SAAUjI,GAASmtB,cAAe52lB,OAAQuklB,EAC1C33V,QAAS5uT,KAAK64pB,WAAWjqW,EAASwpW,EAAWG,EAAO5opB,QAIhE,IAAK,IAAIzT,EAAI,EAAG2F,EAAM0kpB,EAAKljlB,QAAQ7mE,OAAQN,EAAI2F,EAAK3F,IAChD0wO,EAAO5sO,KAAKg4pB,YAAYzR,EAAKljlB,QAAQnnE,GAAI0wO,EAAM96N,EAAQ,EAAGmmpB,EAAkB,IAAN/7pB,EAASA,IAAO2F,EAAM,GAAMs2pB,EAAWC,SArB5GpulB,GAAYA,KACPoulB,IAAcp4pB,KAAK81pB,OAAS91pB,KAAKM,OAAOq4pB,eAAiBpS,EAAKiL,WAC5D4G,GAAap4pB,KAAK81pB,QAAU91pB,KAAKM,OAAOq4pB,gBAAkBpS,EAAKiL,YACvE5kb,EAAK96N,GAAO80D,MAAMpiE,KAAKxE,KAAK4tpB,aAAarH,EAAM9a,GAASzwQ,OAAQh7X,KAAK23pB,SAAW7lpB,GAAQmmpB,EAAa,GAAMC,EAAa,cAAgB,IAAOG,EAASvmpB,EAAO9R,KAAKM,OAAOw4pB,oBAAoBvS,EAAK7mpB,OAExMM,KAAK81pB,SAmBT,OAAOlpb,GAEXipb,EAAaz6pB,UAAUo9pB,iBAAmB,SAAUjS,EAAMgS,GACtD,IAAK,IAAIr8pB,EAAI,EAAGA,EAAIqqpB,EAAK/ppB,OAAQN,IACzBqqpB,EAAKrqpB,GAAGmnE,QACRk1lB,EAASv4pB,KAAKw4pB,iBAAiBjS,EAAKrqpB,GAAGmnE,QAASk1lB,IAG5ChS,EAAKrqpB,GAAGs1pB,WACR+G,EAAOE,WAAY,EACnBF,EAAO5opB,OAEX4opB,EAAOG,OAASH,EAAOG,SAAWnS,EAAKrqpB,GAAGs1pB,UACtCxxpB,KAAKM,OAAOy4pB,sBAAsBxS,EAAKrqpB,GAAG6lE,OAAS/hE,KAAKM,OAAOq4pB,gBAG3E,OAAOJ,GAEX1C,EAAaz6pB,UAAUy9pB,WAAa,SAAUjqW,EAASwpW,EAAWY,GAC9D,IAAIC,EAASj5pB,KAAKM,OAAOq4pB,cASzB,OARI34pB,KAAKM,OAAOixpB,oBAAsBvxpB,KAAK81pB,OAASlnW,EAAUqqW,IACtDb,EACAxpW,EAAUA,GAAWqqW,EAASj5pB,KAAK81pB,OAASmD,EAASj5pB,KAAK81pB,OAAS,GAAKkD,EAGxEpqW,GAAqBA,GAAWqqW,EAASj5pB,KAAK81pB,OAASmD,EAASD,EAAYh5pB,KAAK81pB,OAASkD,IAG3FpqW,GAEXinW,EAAaz6pB,UAAUqypB,YAAc,SAAU37oB,GAC3C,OAAO,IAAI81N,QAEfiub,EAAaz6pB,UAAUwypB,aAAe,SAAU5rlB,EAAQ0xkB,EAAU9iV,EAASvtT,EAAW4rO,EAAU23S,GAC5F,IAAIqnI,GACA32nB,QAAW0qC,EAAO1qC,QAClB42nB,YAAc,EACd32S,YAAe95W,EAAkBukE,EAAOg2I,gBACxCm2c,MAAS,GACTnslB,OAAUA,EACV0xkB,SAAYA,EACZ9iV,QAAWA,EACXvtT,UAAaA,EACbyO,MAASm9N,EACT23S,SAAYA,GAKhB,QAHKqnI,EAAIr9V,SAAWq9V,EAAIr9V,QAAU,WACvBq9V,EAAIr9V,QAER,IAAI2xL,GAAK0rK,IAMpB4H,EAAaz6pB,UAAU62pB,WAAa,SAAU5ulB,GAQ1C,IAAK,IAJDh4C,EAHAk9nB,EAAOvopB,KAAKM,OAEZg1pB,MADUj0pB,MAAMC,KAAKtB,KAAKu0pB,WACb,IAIbvqlB,EAAUu+kB,EAAKgJ,mBACV34nB,EAAI,EAAGu8nB,EAAO9xlB,EAAQ7mE,OAAQo8B,EAAIu8nB,EAAMv8nB,IAAK,CAClD,IAAIopC,EAASqB,EAAQzqC,GAKrB,GAJAvN,EAAMk9nB,EAAK6M,yBAAyBpzlB,EAAOtiE,MACpB,IAAnBsiE,EAAO1qC,UACPg+nB,EAAa,QAEbtrlB,EACA,GAAI3+C,EAAM2+C,EACN/jE,EAAkBjG,KAAKkzpB,cAAc94oB,SAASiR,IAAQylB,QAAWwknB,QAEhE,CAEDrvpB,EADiBsipB,EAAKyK,mBAAmBrwpB,cAAc,oBAAoBA,cAAc,YAC5DyX,SAASiR,EAAM2+C,IAAYl5B,QAAWwknB,SAIvErvpB,EAAkBjG,KAAKkzpB,cAAc94oB,SAASiR,IAAQylB,QAAWwknB,IAErEt1pB,KAAKk5pB,cAGbrD,EAAaz6pB,UAAUq7pB,cAAgB,WACnCz2pB,KAAKk5pB,aAMTrD,EAAaz6pB,UAAU89pB,UAAY,WAC/B,IAAIxC,EAAY12pB,KAAKsxpB,WACjBlslB,EAAQplE,KAAK6sR,WACb7iN,EAAUhqE,KAAKM,OAAOixpB,mBAC1B,GAAIvxpB,KAAK6sR,WAAY,CACjBtoR,EAAOvE,KAAK6sR,YACZznN,EAAM9/D,YAAY8/D,EAAMpoD,YACxBooD,EAAM9/D,YAAY8/D,EAAM9zD,WAAW,IACnC,IAAIujpB,EAAW70pB,KAAKM,OAAOa,cAAc,YACrC+1pB,EAAgBl3pB,KAAKy8H,sBACzBz8H,KAAK4sO,KAAOsqb,EAActqb,KAC1BxnK,EAAMlgE,aAAagypB,EAAcC,MAAO/xlB,EAAMpoD,YAC9Chd,KAAKu3pB,eAAe1C,GACpBzvlB,EAAMlgE,aAAalF,KAAKizpB,YAAY4B,GAAWzvlB,EAAMpoD,YACrDhd,KAAK4ypB,SAASxtlB,GACdplE,KAAKm0pB,cAAc/ulB,GACnBplE,KAAKM,OAAOyN,OAAOmkpB,OACnBlypB,KAAKu2pB,aAAa4C,oBAClBn5pB,KAAKM,OAAO84pB,sBACPpvlB,GACDhqE,KAAK42pB,uBAGT,IAAK,IADDhqb,KAAUvrO,MAAMC,KAAKo1pB,EAAUl1pB,iBAAiB,sBAC3CpD,EAAK,EAAG4voB,EAASpha,EAAMxuO,EAAK4voB,EAAOxxoB,OAAQ4B,IAAM,CACtD,IAAIsnE,EAAMsokB,EAAO5voB,GACbi7pB,KAAYh4pB,MAAMC,KAAKokE,EAAIlkE,iBAAiB,wBAC5C63pB,EAAO78pB,QACP68pB,EAAOA,EAAO78pB,OAAS,GAAGsH,UAAUM,IAAI,0BAG3C4lE,GACDhqE,KAAKM,OAAOyN,OAAO+opB,IAA0Blqb,KAAM5sO,KAAK4sO,KAAM3sO,MAAQuxpB,SAA6C,IAAnCxxpB,KAAKM,OAAOixpB,sBAE5FvxpB,KAAKM,OAAOqxpB,eAA2D,WAA1C3xpB,KAAKM,OAAOg5pB,iBAAiBC,UAC1Dr+oB,GAAK0xN,GAAM,KAIvBipb,EAAaz6pB,UAAU+4pB,cAAgB,SAAU/ulB,GAC7CplE,KAAKsxpB,WAAWt0oB,WAAWrb,YAAYyjE,IAE3CywlB,EAAaz6pB,UAAUw8pB,YAAc,WAGjC,IAAK,IAFDtrpB,EAAM,EACNi6oB,EAAOvmpB,KAAKM,OAAO+iE,QACdnnE,EAAI,EAAG2F,EAAM0kpB,EAAK/ppB,OAAQN,EAAI2F,EAAK3F,IAAK,CAC7C,IAAIqwH,EAAQvsH,KAAKw5pB,WAAWjT,EAAKrqpB,GAAI,GACjCoQ,EAAMigH,IACNjgH,EAAMigH,GAGd,OAAOjgH,EAAM,GAEjBuppB,EAAaz6pB,UAAUo+pB,WAAa,SAAU/zlB,EAAK3zD,GAC/C,IAAIxF,EAAMwF,EACNsje,KACJ,GAAI3va,EAAIpC,QAAS,CACbvxD,IACA,IAAK,IAAI5V,EAAI,EAAG2F,EAAM4jE,EAAIpC,QAAQ7mE,OAAQN,EAAI2F,EAAK3F,IAC/Ck5e,EAAQl5e,GAAK8D,KAAKw5pB,WAAW/zlB,EAAIpC,QAAQnnE,GAAI4V,GAEjD,IAAK,IAAI4R,EAAI,EAAGA,EAAI0xd,EAAQ54e,OAAQknB,IAC5BpX,EAAM8oe,EAAQ1xd,KACdpX,EAAM8oe,EAAQ1xd,IAGtB5R,EAAQxF,EAEZ,OAAOwF,GAEX+jpB,EAAaz6pB,UAAUk9pB,WAAa,SAAU7ylB,EAAK91D,GAC/C,GAAI81D,EAAIpC,QACJ,IAAK,IAAInnE,EAAI,EAAG2F,EAAM4jE,EAAIpC,QAAQ7mE,OAAQN,EAAI2F,EAAK3F,IAC/CyT,EAAM3P,KAAKs4pB,WAAW7ylB,EAAIpC,QAAQnnE,GAAIyT,QAItC81D,EAAInuC,SACJ3nB,IAGR,OAAOA,GAEXkmpB,EAAaz6pB,UAAUw7pB,qBAAuB,WAC1C,IAAIrO,EAAOvopB,KAAKM,OAChB,GAAMN,KAAKM,OAAOm5oB,iBAAoBz5oB,KAAKM,OAAOk5oB,eAAiBx5oB,KAAKM,OAAO2opB,cAAcwQ,aAI7F,IAAK,IADDC,KAAgBr4pB,MAAMC,KAAKinpB,EAAKyK,mBAAmBxxpB,iBAAiB,oBAC/DtF,EAAI,EAAG2F,EAAM63pB,EAAWl9pB,OAAQN,EAAI2F,EAAK3F,IACnC,IAAI83G,GAAU0ljB,EAAWx9pB,IAChC85G,WAAY,gBACZhhE,SAAU,EACV9lC,OAAQlP,KAAKkP,OACbqnG,UAAWv2G,KAAKu2G,UAChBgB,KAAMv3G,KAAKu3G,KACXqB,SAAU54G,KAAK44G,SACfxD,MAAO,iBAInBygjB,EAAaz6pB,UAAUy7pB,qBAAuB,WAC1C,IAAItO,EAAOvopB,KAAKM,OACL,IAAI05G,GAAUuuiB,EAAKyK,oBAC1B74iB,OAAQ,eACR9lD,KAAMr0D,KAAKq0D,QAGZwhmB,KC/hBP8D,GAA8B,WAC9B,SAASA,EAAar5pB,EAAQs5pB,GAC1B55pB,KAAK65pB,UAAYD,EAAQtzlB,WAAW,gBACpCtmE,KAAKk2Z,UAAY0jQ,EAAQtzlB,WAAW,kBACpCtmE,KAAKM,OAASA,EACdN,KAAKgB,QAAUhB,KAAKM,OAAOa,cAAc,MAAQkC,UAAW,YAAaI,OAASkO,KAAM,WAAYo4H,SAAU,QAC9G/pI,KAAK85pB,UAAY95pB,KAAKM,OAAOa,cAAc,SAAWkC,UAAW,gBAAiBI,OAASiD,KAAQ,cA2MvG,OArMAizpB,EAAav+pB,UAAU2+pB,OAAS,WAC5B,MAAO,IAQXJ,EAAav+pB,UAAUmjC,OAAS,SAAUyjC,EAAQjlE,EAAOR,GAIrD,OAHKkB,EAAkBukE,EAAOzjC,UAC1BxhC,EAAQiD,KAAKk2Z,UAAU15M,OAAOz/M,EAAOilE,EAAO+4kB,iBAEzCt9oB,EAAkBV,GAAS,GAAKA,EAAMmQ,YAEjDyspB,EAAav+pB,UAAU4+pB,SAAW,SAAUz5pB,EAAMwnE,EAAMxrE,EAAMmH,EAAYu2pB,GACtE,IAAIp3pB,EACA9D,EACJ,GAAIgpE,EAAK/F,OAAO/yD,SAAU,CACtB,IACIirpB,EAAYx7pB,KAAWnC,GAAOsG,KAASA,EAAGilE,IAAkBmylB,EAAOp3pB,IAMvE,OALA9D,EAASgpE,EAAK/F,OAAOm5kB,mBAAZpzkB,CAAgCrpE,GAASoT,MAASpO,EAAsB,OAAKw2pB,GAAYl6pB,KAAKM,OAAQ,YAC/GmkE,GAAelkE,EAAMxB,GACrBA,EAAS,KACTwB,EAAKiD,aAAa,aAAcjD,EAAK2/D,UAAY,mCAC7C6H,EAAK/F,OAAOwB,aACT,EAEX,OAAO,GAQXm2lB,EAAav+pB,UAAU++pB,gBAAkB,SAAUn4lB,EAAQjlE,EAAOR,GAC9D,IAAKkB,EAAkBukE,EAAOk0V,WAC1B,GAAIt0V,GAAuBI,EAAOk0V,UAAW,YAAa,CAEtDn5Z,GAAQ,IAAIm5Z,EADIl0V,EAAOk0V,YACCt5Z,SAASolE,EAAQzlE,QAGzCQ,EADiC,mBAArBilE,EAAOk0V,UACXl0V,EAAOk0V,UAAUl0V,EAAQzlE,GAGzBylE,EAAOk0V,UAAUt5Z,SAASolE,EAAQzlE,GAGlD,OAAOQ,GASX48pB,EAAav+pB,UAAUg3G,OAAS,SAAUrqC,EAAMxrE,EAAMmH,GAClD,OAAO1D,KAAKo6pB,YAAYrylB,EAAMxrE,EAAMmH,IASxCi2pB,EAAav+pB,UAAUi/pB,UAAY,SAAUprX,EAAIlnO,EAAMxrE,EAAMmH,GACzD,IAAInD,EAAOP,KAAKo6pB,YAAYrylB,EAAMxrE,EAAMmH,GACxCurS,EAAGjtS,UAAY,GAEf,IAAK,IAAI5D,EAAK,EAAG2zF,KADC1wF,MAAMC,KAAKf,EAAK+Q,YACMlT,EAAK2zF,EAAWv1F,OAAQ4B,IAAM,CAClE,IAAIsE,EAAOqvF,EAAW3zF,GACtB6wS,EAAGttS,YAAYe,KAGvBi3pB,EAAav+pB,UAAUg/pB,YAAc,SAAUrylB,EAAMxrE,EAAMmH,GACvD,IAAIb,EAGAo3pB,EAFA15pB,EAAOP,KAAKgB,QAAQY,YACpBogE,EAAS+F,EAAK/F,OAEd+F,EAAKC,eACLiylB,EAAQlylB,EAAKD,eAAe,KAAOjlE,KAASA,EAAGm/D,EAAOyB,iBAAmBzB,EAAOzjC,OAAS,KAAO,GAAI17B,IAGxG,IAAIw4D,EAAYr7D,KAAK+5pB,SACjBh9pB,EAAQgrE,EAAKC,aAAehoE,KAAKpD,SAASolE,EAAOyB,gBAAiBw2lB,EAAOj4lB,GACzEhiE,KAAKpD,SAASolE,EAAOD,MAAOxlE,EAAMylE,GAMtC,GALqB,SAAhBA,EAAOt7D,MAAmC,aAAhBs7D,EAAOt7D,MAAyBjJ,EAAkBV,KAC7EA,EAAQ,IAAIsjB,KAAKtjB,IAErBA,EAAQiD,KAAKu+B,OAAOyjC,EAAQjlE,EAAOR,GACnC8+D,EAAYt+D,EAAMmQ,WACE,YAAhB80D,EAAOt7D,OAAuBs7D,EAAOs4lB,kBAAmB,CACxD,IAAIC,EAAuB,SAAVx9pB,GAA8B,UAAVA,EAAqB,KAAiB,SAAVA,EAAmB,OAAS,QAC7Fs+D,EAAYk/lB,EAAYv6pB,KAAK65pB,UAAU5/kB,YAAYsglB,GAAal/lB,EAEpE,IAAIm/lB,EAAgBx6pB,KAAKm6pB,gBAAgBn4lB,EAAQjlE,EAAOR,GAMxD,GALA8+D,EAAa59D,EAAkBukE,EAAOk0V,WAAgF76V,EAAnE59D,EAAkB+8pB,GAAiB,GAAKA,EAActtpB,WACzG3M,EAAKiD,aAAa,cAA6B,KAAd63D,EAAmB,QAAUA,GAAa,kBAAoB0M,EAAK/F,OAAOwB,YACtG/lE,EAAkBsqE,EAAK/F,OAAOwB,aAC/BjjE,EAAKiD,aAAa,aAAc63D,EAAY,kBAAoB0M,EAAK/F,OAAOwB,YAE5ExjE,KAAKg6pB,SAASz5pB,EAAMwnE,EAAMxrE,EAAMmH,EAAYu2pB,IAA0B,aAAhBj4lB,EAAOt7D,KAC7D1G,KAAKy6pB,WAAWl6pB,EAAM86D,EAAW2G,EAAOs5kB,aAAet5kB,EAAOs5kB,eAAiB,kBAE9E,GAAoB,aAAhBt5kB,EAAOt7D,KAAqB,CACjCnG,EAAKuD,UAAUM,IAAI,gBACnB7D,EAAKiD,aAAa,aAAc,YAE5BzG,IADAiD,KAAKM,OAAOu5iB,kBAAkB6gH,kBACZ,SAAV39pB,GAKR6yY,EAAY98X,GAAe9S,KAAKM,OAAOa,eAAe,GAASqR,QAASzV,EAAOsW,MAAO,OAChFnO,aAAalF,KAAK85pB,UAAUl4pB,YAAaguY,EAAU5yX,YAC7Dzc,EAAKoB,YAAYiuY,GAMrB,GAJiC,UAA7B5vY,KAAKM,OAAOyspB,cAA4B/spB,KAAKM,OAAO46M,uBACpDnzI,EAAK/J,YAAa,GAEtBh+D,KAAKg8E,cAAcz7E,EAAMwnE,EAAMrkE,GACX,YAAhBs+D,EAAOt7D,MAAsBs7D,EAAOs4lB,kBAAmB,CACvD,IAAI9npB,EAAU2qC,MAAMvoB,SAAS73B,EAAMmQ,WAAY,KAAiB,SAAVnQ,EAAmB63B,SAAS73B,EAAMmQ,WAAY,IAAM,EACtG0iY,EAAY98X,GAAe9S,KAAKM,OAAOa,eAAe,GAASqR,QAASA,EAASa,MAAO,MAC5F9S,EAAKyB,UAAY,GACjB4tY,EAAU9rY,UAAUM,IAAI,uBACxB7D,EAAKoB,YAAYiuY,GACjBrvY,EAAKiD,aAAa,aAAcgP,EAAU,kBAAoBu1D,EAAK/F,OAAOwB,YAE9E,OAAOjjE,GAQXo5pB,EAAav+pB,UAAUq/pB,WAAa,SAAUl6pB,EAAM86D,EAAWH,GAG3D,YAFiB,IAAbA,IAAuBA,EAAW,aACtC36D,EAAK26D,GAAYG,EACV96D,GAKXo5pB,EAAav+pB,UAAU4gF,cAAgB,SAAUz7E,EAAMwnE,EAAMrkE,GACzD,IAAIs+D,EAAS+F,EAAK/F,OAClBhiE,KAAK26pB,uBAAuBp6pB,EAAMwnE,EAAsB,aAAhB/F,EAAOt7D,MAC/Co8D,GAAsBviE,EAAMmD,GAC5Bo/D,GAAsBviE,EAAMwnE,EAAKrkE,YAC7Bs+D,EAAOe,kBACPD,GAAsBviE,EAAMyhE,EAAOe,kBAEnCf,EAAO5S,YACP7uD,EAAKmE,MAAM0qD,UAAY4S,EAAO5S,WAEV,SAApB4S,EAAO44lB,SACPr6pB,EAAKuD,UAAUM,IAAI,cAEM,wBAApB49D,EAAO44lB,UACZr6pB,EAAKuD,UAAUM,IAAI,sBAG3Bu1pB,EAAav+pB,UAAUu/pB,uBAAyB,SAAUp6pB,EAAMwnE,EAAM8ylB,GAClE,IAAIz5f,KAEAv9J,KACAkkE,EAAK6mP,UACLxtJ,EAAKwtJ,QAAU7mP,EAAK6mP,SAEpB7mP,EAAK6oP,UACLxvJ,EAAKwvJ,QAAU7oP,EAAK6oP,SAEpB7oP,EAAKwvS,YACL1zW,EAAQW,KAAK,kBAEbujE,EAAK/J,aACLn6D,EAAQW,KAAKlJ,MAAMuI,GAAU,wBAAyB,aAClDg3pB,GACAt6pB,EAAKoC,cAAc,YAAYmB,UAAUM,IAAI,YAGhD3G,EAAkBsqE,EAAKj2D,SACxBsvJ,EAlBqB,iBAkBCr5F,EAAKj2D,OAE1Bi2D,EAAKzwC,SACNzzB,EAAQW,KAAK,UAEjB48J,EAAKnvJ,MAAQpO,EACbi/D,GAAsBviE,EAAM6gK,IAEhCu4f,EAAav+pB,UAAUwB,SAAW,SAAUmlE,EAAOxlE,EAAMylE,GACrD,OAAOA,EAAOF,cAAcC,EAAOxlE,EAAMylE,IAEtC23lB,KlerNPmB,GAA6B,WAC7B,SAASA,KAsBT,OApBAA,EAAY1/pB,UAAUk3pB,WAAa,SAAUnrpB,EAAQ6L,GACrC1U,OAAOhB,KAAK0V,GAClB5T,QAAQ,SAAUm4B,GAAQ,OAAOizC,GAAsBrjE,EAAQ42G,GAAOxmF,GAAOvkB,EAAQukB,OAE/FujoB,EAAY1/pB,UAAU2/pB,UAAY,SAAU5zpB,EAAQmlK,GAChD9hG,GAAsBrjE,EAAQ42G,GAAOuuD,OAAQA,IAEjDwuf,EAAY1/pB,UAAU4/pB,QAAU,SAAU7zpB,EAAQkuB,GAC9Cm1C,GAAsBrjE,EAAQ42G,GAAOjuF,KAAMuF,EAAgC,kBAAdA,IAEjEyloB,EAAY1/pB,UAAUi2pB,QAAU,SAAUlqpB,EAAQ8zpB,GAC9CzwlB,GAAsBrjE,EAAQ42G,GAAOw0iB,KAAM0I,GAC3CzwlB,GAAsBrjE,EAAQ42G,GAAOm9iB,QAAS,MAAM,IAExDJ,EAAY1/pB,UAAU+/pB,WAAa,SAAUh0pB,EAAQi0pB,EAAW72pB,GAC5DimE,GAAsBrjE,EAAQ42G,GAAOs9iB,QAASD,EAAW72pB,IAE7Du2pB,EAAY1/pB,UAAUkgqB,cAAgB,SAAUn0pB,EAAQqzC,GACpDgwB,GAAsBrjE,EAAQ42G,GAAOw9iB,WAAY,QAAS/gnB,IAEvDsgnB,KAeP/8iB,IACAuuD,OAAQ,gBACR36J,KAAM,OACNqvI,SAAU,gBACV6xgB,gBAAiB,uBACjB/ioB,KAAM,YACNyioB,KAAM,YACN2I,QAAS,eACTG,QAAS,eACTE,WAAY,kBACZC,SAAU,gBACV/rf,MAAO,aACPukf,SAAU,iBmetDVvjkB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAwBxC2qkB,GAAoC,SAAUnqkB,GAE9C,SAASmqkB,IACL,IAAI17pB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAQhE,OAPAD,EAAMiB,QAAUjB,EAAMO,OACjBa,cAAc,MAAQkC,UAAW,eAAgBI,OAASkO,KAAM,eAAgBo4H,SAAU,QAC/FhqI,EAAMqxpB,YAAc,IAAI0J,GACxB/6pB,EAAM27pB,QAAU37pB,EAAMO,OAAOa,cAAc,QAAUkC,UAAW,iBAChEtD,EAAM47pB,QAAU57pB,EAAMO,OAAOa,cAAc,OAASkC,UAAW,4BAC/DtD,EAAM67pB,IAAM77pB,EAAMO,OAAOa,cAAc,OACvCpB,EAAM87pB,UAAY97pB,EAAMO,OAAOa,cAAc,SAAWkC,UAAW,mBAAoBI,OAASiD,KAAQ,cACjG3G,EA6JX,OAvKA0wF,GAAUgrkB,EAAoBnqkB,GAgB9BmqkB,EAAmBrgqB,UAAU2+pB,OAAS,WAClC,OAAO/5pB,KAAK47pB,IAAIh6pB,aAQpB65pB,EAAmBrgqB,UAAUg3G,OAAS,SAAUrqC,EAAMxrE,EAAMmH,GACxD,IAAInD,EAAOP,KAAKgB,QAAQY,YACpBk6pB,EAAc97pB,KAAKM,OAAOa,cAAc,OAASkC,UAAW,0CAChE,OAAOrD,KAAK+7pB,cAAch0lB,EAAMxnE,EAAMu7pB,IAO1CL,EAAmBrgqB,UAAUqzD,QAAU,SAAUsZ,EAAMxnE,GACnDP,KAAK+3F,MAAMx3F,GACX,IAAIu7pB,EAAc97pB,KAAKM,OAAOa,cAAc,OAASkC,UAAW,0CAChE,OAAOrD,KAAK+7pB,cAAch0lB,EAAMxnE,EAAMu7pB,IAE1CL,EAAmBrgqB,UAAU28F,MAAQ,SAAUx3F,GAC3CA,EAAKyB,UAAY,IAErBy5pB,EAAmBrgqB,UAAU2gqB,cAAgB,SAAUh0lB,EAAMxnE,EAAMu7pB,GAC/D,IAAI95lB,EAAS+F,EAAK/F,OACdg6lB,KAEAC,EAAWj8pB,KAAK+5pB,SAKpB,GAJAr2pB,EAAWu4pB,GACPC,eAAgBl6lB,EAAOtiE,IACvBuS,MAAS,oBAEO,aAAhB+vD,EAAOt7D,KAAqB,CAC5B,IAAI3J,EAAQilE,EAAOwB,WACfA,EAAaxjE,KAAK07pB,QAAQ95pB,YAC9B4hE,EAAWxB,EAAOs5kB,gBAAkBv+oB,EACpCk/pB,EAASt6pB,YAAY6hE,OAEpB,CACDxB,EAAO04kB,SAAW,cAClB,IAAIyhB,EAAerppB,GAAe9S,KAAKM,OAAOa,eAAe,GAASqR,SAAS,EAAOa,MAAO,MAC7F8opB,EAAaj3pB,aAAalF,KAAK67pB,UAAUj6pB,YAAau6pB,EAAan/oB,YACnEi/oB,EAASt6pB,YAAYw6pB,GACrBF,EAASn4pB,UAAUM,IAAI,sBAK3B,GAHApE,KAAK26pB,uBAAuBp6pB,EAAMwnE,GAClC/nE,KAAKy6pB,WAAWl6pB,EAAM07pB,GACtB17pB,EAAKoB,YAAY3B,KAAK27pB,QAAQ/5pB,aACzB5B,KAAKM,OAAOipmB,gBAAsD,cAApCvpmB,KAAKM,OAAOkhpB,eAAe96oB,MACzDs7D,EAAOuniB,iBAAmB9rmB,EAAkBukE,EAAOD,UAClD/hE,KAAKM,OAAOo5oB,iBAAkB13kB,EAAO03kB,gBAAiB,CACxDh2oB,EAAWo4pB,GACPI,eAAgB,YAAcl6lB,EAAOtiE,MAEzCa,EAAKuD,UAAUM,IAAI,eACnB,IAAIg4pB,KACJ,GAAIp8pB,KAAKM,OAAOkhpB,eAAen+kB,QAAQ7mE,QAAUwD,KAAKM,OAAOkhpB,eAAen+kB,QAAQ7mE,SAAW4/pB,EAAe5/pB,OAC1G,IAAK,IAAIsV,EAAQ,EAAGA,EAAQ9R,KAAKM,OAAO+iE,QAAQ7mE,OAAQsV,IACpD,IAAK,IAAIoN,EAAQ,EAAGA,EAAQlf,KAAKM,OAAOkhpB,eAAen+kB,QAAQ7mE,OAAQ0iB,IACnE,GAAIlf,KAAKM,OAAOkhpB,eAAen+kB,QAAQnkD,GAAO6iD,QAAUC,EAAOD,MAAO,CAClE+5lB,EAAYh4pB,UAAUM,IAAI,cAC1Bg4pB,EAAe53pB,KAAKw9D,EAAOD,OAC3B,MAKhBxhE,EAAKoB,YAAYm6pB,EAAYl6pB,aAE7BmmE,EAAK1kE,WACL9C,EAAKuD,UAAUM,IAAI2jE,EAAK1kE,WAExB2+D,EAAOe,kBACPD,GAAsBviE,EAAMyhE,EAAOe,kBAEnCf,EAAOs3kB,eACP0iB,EAASlsoB,KAAO,QAEhBkyC,EAAOw3kB,gBACPwiB,EAASX,SAAU,GAEvB96pB,EAAOP,KAAKq8pB,oBAAoBr6lB,EAAQzhE,GACxC,IAAIxB,EACAu9pB,EAAUt8pB,KAAKM,OACfsmhB,EAAW01I,EAAQvD,sBAAsB/2lB,EAAOD,OAOpD,GANKtkE,EAAkBukE,EAAOg2I,kBAC1Bj5M,EAASijE,EAAOo5kB,mBAAPp5kB,CAA2BtjE,GAASoT,MAAS80gB,GAAY5kd,GAASs6lB,EAAS,kBACpF/7pB,EAAK4E,kBAAkBnD,UAAY,GACnCyiE,GAAelkE,EAAK4E,kBAAmBpG,IAE3CiB,KAAKoxpB,YAAYkB,WAAW/xpB,EAAMy7pB,IAC7Bv+pB,EAAkBukE,EAAOu6lB,mBAAqB9+pB,EAAkBukE,EAAO5S,WAAY,CACpF,IAAI1D,EAAYsW,EAAOu6lB,iBAAmBv6lB,EAAO5S,UACjD6smB,EAASv3pB,MAAM0qD,UAAY1D,EACT,UAAdA,GAAuC,SAAdA,EACzBnrD,EAAKuD,UAAUM,IAAkB,UAAdsnD,EAAwB,eAAiB,eAEzC,WAAdA,GACLnrD,EAAKuD,UAAUM,IAAI,iBAY3B,MATwB,SAApB49D,EAAO44lB,SACPr6pB,EAAKuD,UAAUM,IAAI,cAEM,wBAApB49D,EAAO44lB,UACZr6pB,EAAKuD,UAAUM,IAAI,qBAEvB7D,EAAKiD,aAAa,gBAAkB/F,EAAkBsqE,EAAK6oP,SAA0B,EAAf7oP,EAAK6oP,SAAa1jT,YACxF3M,EAAKiD,aAAa,eAAgB,KAClCxD,KAAKM,OAAOqmB,QAAQ80nB,IAAkB1zkB,KAAMA,EAAMxnE,KAAMA,IACjDA,GAEXk7pB,EAAmBrgqB,UAAUihqB,oBAAsB,SAAUr6lB,EAAQzhE,GACjE,GAAIP,KAAKM,OAAOo5oB,gBAAkB13kB,EAAO03kB,iBAAmBj8oB,EAAkBukE,EAAOD,OAAQ,CACzF,IAAI/gE,EAAWhB,KAAKM,OAAOa,cAAc,OAASkC,UAAW,yBACzDm5pB,KACJ,GAAIx8pB,KAAKM,OAAOkhpB,eAAen+kB,QAAQ7mE,QAAUwD,KAAKM,OAAOkhpB,eAAen+kB,QAAQ7mE,SAAWggqB,EAAqBhgqB,OAChH,IAAK,IAAIN,EAAI,EAAGA,EAAI8D,KAAKM,OAAO+iE,QAAQ7mE,OAAQN,IAC5C,IAAK,IAAIwnB,EAAI,EAAGA,EAAI1jB,KAAKM,OAAOkhpB,eAAen+kB,QAAQ7mE,OAAQknB,IAC3D,GAAI1jB,KAAKM,OAAOkhpB,eAAen+kB,QAAQ3/C,GAAGq+C,QAAUC,EAAOD,MAAO,CAC9D/gE,EAAQ8C,UAAUM,IAAI,cACtBo4pB,EAAqBh4pB,KAAKw9D,EAAOD,OACjC,MAKhBxhE,EAAKuD,UAAUM,IAAI,eACnB7D,EAAKoB,YAAYX,GAErB,GAAIhB,KAAKM,OAAOi5oB,cAAe,CAC3B,IAAI/9oB,EAAUwE,KAAKM,OAAOa,cAAc,OACxC3F,EAAQ6H,UAAY2+D,EAAOu3kB,cAAgB,uBAAyB,cACpEh5oB,EAAKoB,YAAYnG,GAErB,OAAO+E,GAQXk7pB,EAAmBrgqB,UAAUq/pB,WAAa,SAAUl6pB,EAAM86D,GAEtD,OADA96D,EAAKoB,YAAY05D,GACV96D,GAEJk7pB,GACT9B,ICjMElpkB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAoBxC2rkB,GAA2C,SAAUnrkB,GAErD,SAASmrkB,IACL,IAAI18pB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAOhE,OANAD,EAAMiB,QAAUjB,EAAMO,OAAOa,cAAc,MACvCkC,UAAW,mCAAoCI,OAC3CkO,KAAM,eACNo4H,SAAU,QAGXhqI,EAyBX,OAlCA0wF,GAAUgskB,EAA2BnrkB,GAiBrCmrkB,EAA0BrhqB,UAAUg3G,OAAS,SAAUrqC,EAAMxrE,EAAMmH,GAC/D,IAAInD,EAAOP,KAAKgB,QAAQY,YACpBV,EAAMlB,KAAKM,OAAOa,cAAc,OAASkC,UAAW,2BAaxD,OAZA9C,EAAKoB,YAAYT,GACjBA,EAAIc,UAAY+lE,EAAK/F,OAAOwB,WACxBuE,EAAK/F,OAAO06lB,SACZn8pB,EAAKiD,aAAa,QAASukE,EAAK/F,OAAO06lB,SAEtCj/pB,EAAkBsqE,EAAK/F,OAAO5S,aAC/BluD,EAAIwD,MAAM0qD,UAAY2Y,EAAK/F,OAAO5S,WAEtC7uD,EAAKiD,aAAa,UAAWukE,EAAK6mP,QAAQ1hT,YAC1C3M,EAAKiD,aAAa,eAAgBukE,EAAK6mP,QAAQ1hT,YAC/C3M,EAAKiD,aAAa,eAAgB,KAClCxD,KAAKM,OAAOqmB,QAAQ80nB,IAAkB1zkB,KAAMA,EAAMxnE,KAAMA,IACjDA,GAEJk8pB,GACT9C,ICxDElpkB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAmBxC6rkB,GAAoC,SAAUrrkB,GAE9C,SAASqrkB,IACL,IAAI58pB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUjB,EAAMO,OAAOa,cAAc,MAAQkC,UAAW,iBACvDtD,EAYX,OAhBA0wF,GAAUkskB,EAAoBrrkB,GAW9BqrkB,EAAmBvhqB,UAAUg3G,OAAS,SAAUrqC,EAAMxrE,GAClD,IAAIgE,EAAOP,KAAKgB,QAAQY,YAExB,OADAkhE,GAAsBviE,EAAMwnE,EAAKrkE,YAC1BnD,GAEJo8pB,GACThD,ICrCElpkB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAoBxC8rkB,GAA0C,SAAUtrkB,GAEpD,SAASsrkB,IACL,IAAI78pB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAGhE,OAFAD,EAAMiB,QAAUjB,EAAMO,OACjBa,cAAc,MAAQkC,UAAW,iBAAkBI,OAASkO,KAAM,WAAYo4H,SAAU,QACtFhqI,EAqCX,OA1CA0wF,GAAUmskB,EAA0BtrkB,GAYpCsrkB,EAAyBxhqB,UAAUg3G,OAAS,SAAUrqC,EAAMxrE,GACxD,IAIIsgqB,EAJAt8pB,EAAOP,KAAKgB,QAAQY,YACpB2mpB,EAAOvopB,KAAKM,OAIhB/D,EAAKinE,WAAauE,EAAK/F,OAAOwB,WAC1BuE,EAAKC,eACL60lB,EAAY78pB,KAAKu+B,OAAOwpC,EAAK/F,OAAQ+F,EAAK/F,OAAOF,cAAc,aAAcvlE,EAAMwrE,EAAK/F,UAE5F,IAAIjlE,EAAQgrE,EAAKC,aAAe60lB,EAAY90lB,EAAK/F,OAAO23kB,oBAAsBp9oB,EAAKc,IAC/E2C,KAAKu+B,OAAOwpC,EAAK/F,OAAQ+F,EAAK/F,OAAOF,cAAc,MAAOvlE,EAAMwrE,EAAK/F,SAiBzE,OAhBKvkE,EAAkB8qpB,EAAKU,cAAc6T,iBAUtCv8pB,EAAKyB,UAAY+lE,EAAK/F,OAAOwB,WAAa,KAAOzmE,EAAQ,MAAQR,EAAK2iB,MAAQ,KACzE3iB,EAAK2iB,MAAQ,EAAIlf,KAAK65pB,UAAU5/kB,YAAY,QAAUj6E,KAAK65pB,UAAU5/kB,YAAY,UAJtFxV,GAAelkE,GAN0C,IAArDgopB,EAAKU,cAAc6T,gBAAgBv+pB,QAAQ,KAClCqkE,GAAiBpiE,SAASmC,cAAc4lpB,EAAKU,cAAc6T,iBAAiB96pB,UAAUiO,OAAtF2yD,CAA8FrmE,GAG9FqmE,GAAiB2llB,EAAKU,cAAc6T,gBAApCl6lB,CAAqDrmE,IAQtEgE,EAAKiD,aAAa,UAAWukE,EAAK6mP,QAAQ1hT,YAC1C3M,EAAKiD,aAAa,aAAcjD,EAAKyB,UAAY,yBACjDzB,EAAKiD,aAAa,QAASjD,EAAKyB,WACzBzB,GAEJq8pB,GACTjD,IAMEoD,GAA+C,SAAUzrkB,GAEzD,SAASyrkB,IACL,IAAIh9pB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUjB,EAAMO,OAAOa,cAAc,MAAQkC,UAAW,mBACvDtD,EAaX,OAjBA0wF,GAAUsskB,EAA+BzrkB,GAWzCyrkB,EAA8B3hqB,UAAUg3G,OAAS,SAAUrqC,EAAMxrE,GAC7D,IAAIgE,EAAOP,KAAKgB,QAAQY,YAGxB,OAFArB,EAAKyB,UAAY,SACjBzB,EAAKiD,aAAa,UAAWukE,EAAK6mP,QAAQ1hT,YACnC3M,GAEJw8pB,GACTpD,ICzFElpkB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAkBxCkskB,GAAoC,SAAU1rkB,GAE9C,SAAS0rkB,IACL,OAAkB,OAAX1rkB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAiB/D,OAnBAywF,GAAUuskB,EAAoB1rkB,GAS9B0rkB,EAAmB5hqB,UAAUg3G,OAAS,SAAUrqC,EAAMxrE,GAClD,IAAIgE,EAAOP,KAAKgB,QAAQY,YAOxB,OANArB,EAAK8C,UAAY,qBACjB9C,EAAKiD,aAAa,iBAAkBjH,EAAKwlE,OACzCxhE,EAAKiD,aAAa,kBAAmBjH,EAAKc,KAC1CkD,EAAKiD,aAAa,gBAAiB,QACnCjD,EAAKiD,aAAa,WAAY,MAC9BjD,EAAKoB,YAAY3B,KAAKM,OAAOa,cAAc,OAASkC,UAAW,+CACxD9C,GAEJy8pB,GACTL,ICvCElskB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAkBxCmskB,GAA0C,SAAU3rkB,GAEpD,SAAS2rkB,IACL,IAAIl9pB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUjB,EAAMO,OAAOa,cAAc,MAAQkC,UAAW,uBACvDtD,EAYX,OAhBA0wF,GAAUwskB,EAA0B3rkB,GAWpC2rkB,EAAyB7hqB,UAAUg3G,OAAS,SAAUrqC,EAAMxrE,GACxD,IAAIgE,EAAOP,KAAKgB,QAAQY,YAExB,OADArB,EAAKoB,YAAY3B,KAAKM,OAAOa,cAAc,OAASkC,UAAW,8BAA+BrB,UAAW,MAClGzB,GAEJ08pB,GACTtD,ICpCElpkB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAkBxCoskB,GAAgD,SAAU5rkB,GAE1D,SAAS4rkB,IACL,IAAIn9pB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUjB,EAAMO,OAAOa,cAAc,MAAQkC,UAAW,uBACvDtD,EAYX,OAhBA0wF,GAAUyskB,EAAgC5rkB,GAW1C4rkB,EAA+B9hqB,UAAUg3G,OAAS,SAAUrqC,EAAMxrE,GAC9D,IAAIgE,EAAOP,KAAKgB,QAAQY,YAExB,OADArB,EAAKoB,YAAY3B,KAAKM,OAAOa,cAAc,OAASkC,UAAW,iBACxD9C,GAEJ28pB,GACTvD,ICpCElpkB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAmBxCqskB,GAA0C,SAAU7rkB,GAEpD,SAAS6rkB,IACL,IAAIp9pB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAKhE,OAJAD,EAAMiB,QAAUjB,EAAMO,OAAOa,cAAc,MACvCkC,UAAW,sBACXI,OAASi3J,gBAAiB,QAAS/oJ,KAAM,WAAYo4H,SAAU,QAE5DhqI,EAiBX,OAxBA0wF,GAAU0skB,EAA0B7rkB,GAYpC6rkB,EAAyB/hqB,UAAUg3G,OAAS,SAAUrqC,EAAMxrE,EAAMmH,GAC9D,IAAInD,EAAOP,KAAKgB,QAAQY,YASxB,OARI8B,IAAejG,EAAkBiG,EAAkB,QACnDnD,EAAK8C,UAAY,GACjB9C,EAAK8C,UAAYK,EAAkB,MACnCnD,EAAKoB,YAAY3B,KAAKM,OAAOa,cAAc,OAASkC,UAAW,iDAG/D9C,EAAKoB,YAAY3B,KAAKM,OAAOa,cAAc,OAASkC,UAAW,kDAE5D9C,GAEJ48pB,GACTxD,ICnBE3sN,GAAwB,WAIxB,SAASA,EAAO1sc,EAAQs5pB,GACpB55pB,KAAKo9pB,WAAY,EACjBp9pB,KAAKM,OAASA,EACdN,KAAK45pB,QAAUA,EACf55pB,KAAKzD,KAAO,IAAI6/O,GAAK97O,EAAQs5pB,GAC7B55pB,KAAKi5H,KAAO2giB,EAAQtzlB,WAAW,gBAC/BtmE,KAAKoxpB,YAAcpxpB,KAAK45pB,QAAQtzlB,WAAW,eAC3CtmE,KAAKswB,SAAWtwB,KAAK45pB,QAAQtzlB,WAAW,mBACxCtmE,KAAKvD,mBA0XT,OArXAuwc,EAAO5xc,UAAUg3G,OAAS,WACtB,IAAIm2iB,EAAOvopB,KAAKM,OAChBN,KAAKq9pB,eAAiBr9pB,KAAKswB,SAASgtoB,YAAYjc,GAAWrmR,QAC3Dh7X,KAAKu9pB,gBAAkBv9pB,KAAKswB,SAASgtoB,YAAYjc,GAAWmc,SAC5Dx9pB,KAAKq9pB,eAAehL,cACpBrypB,KAAKu9pB,gBAAgBlL,cACjB9J,EAAKnE,aAAa5npB,SAClBwD,KAAKy9pB,kBAAmB,EACxBz9pB,KAAKq9pB,eAAe5K,cACpBzypB,KAAKu9pB,gBAAgB9K,cACrBzypB,KAAK09pB,UAAS,IAElB19pB,KAAKo4O,sBAMT40N,EAAO5xc,UAAUqzD,QAAU,SAAU5tD,QACvB,IAANA,IAAgBA,GAAMmpM,YAAa,YACvChqM,KAAKM,OAAOyN,OAAOlN,EAAEmpM,YAAc,SAAUnpM,GAC7Cb,KAAKM,OAAOqmB,QAAQm9nB,GAAoBjjpB,GACpCA,EAAE+4B,OACF55B,KAAKM,OAAOyN,OAAO4vpB,GAAoB98pB,GAG3Cb,KAAKo4O,mBAAmBv3O,IAE5Bmsc,EAAO5xc,UAAUwiqB,gBAAkB,SAAU/8pB,GACzCb,KAAKM,OAAOqmB,QAAQggoB,GAAuB9lpB,IAM/Cmsc,EAAO5xc,UAAUg9O,mBAAqB,SAAUn4O,GAC5C,IAAIF,EAAQC,UACC,IAATC,IAAmBA,MACE,kBAArBA,EAAK+pM,aACLhqM,KAAKM,OAAO0hB,cAEhBhiB,KAAKo9pB,WAAY,EACjB,IAAIxxf,EACAiyf,EAAW79pB,KAAK89pB,sBAEpB,GADA99pB,KAAKoxpB,YAAYC,QAAQrxpB,KAAKM,OAAOkxD,aAAax0C,YAAY,GAC1D6gpB,EAAU,CACV,IAAIzrd,EAAW,IAAIC,GACnBzmC,EAAc5rK,KAAK+9pB,SAAS3rd,GAgBhC,GAVIxmC,EAJCA,EAIaA,EAAYsmC,KAAK,SAAUrxM,GACrC,IAAI8/D,EAAQ5gE,EAAMxD,KAAKg8O,gBAAgBvqE,gBACvC,GAAIjuK,EAAMq9pB,UAAW,CACjB,IAAI7joB,EAAM,IAAI84K,GAEd,OADA94K,EAAIwvD,SAAUhqF,UAAYmgB,MAAO,IAC1Bqa,EAAIk5K,QAEf,OAAO1yM,EAAMxD,KAAK23O,QAAQj0O,EAAM0gE,KAVtB3gE,KAAKzD,KAAK23O,QAAQj0O,EAAMD,KAAKzD,KAAKg8O,gBAAgBvqE,iBAahEhuK,KAAKM,OAAOqlpB,uBAAuBnppB,UAAYqhqB,GAAY79pB,KAAKM,OAAOippB,eAAelspB,IAAIb,QAAS,CACnG,IAAIwhqB,EAAa,IAAI3rd,GACrBzmC,EAAcA,EAAYsmC,KAAK,SAAUrxM,GAErC,OADAd,EAAMO,OAAOyN,OAAOkwpB,IAA4Bryf,YAAaA,EAAa7sK,OAAQ8B,EAAG4xM,QAASurd,IACvFA,EAAWvrd,UAGtBzyM,KAAKM,OAAO2opB,cAAciV,2BAA6Bl+pB,KAAKM,OAAO2opB,cAAc5llB,QAAQ7mE,SACzFovK,EAAcA,EAAYsmC,KAAK,SAAUrxM,GAAK,OAAOd,EAAMo+pB,qBAAqBt9pB,MAEpF+qK,EAAYsmC,KAAK,SAAUrxM,GAAK,OAAOd,EAAMy4O,mBAAmB33O,EAAGZ,KAC9DszM,MAAM,SAAU1yM,GAAK,OAAOd,EAAMq+pB,mBAAmBv9pB,EAAGZ,MAEjE+sc,EAAO5xc,UAAU2iqB,SAAW,SAAUM,GAElC,OADAr+pB,KAAKM,OAAOyN,OAAOkwpB,IAA4B5vf,WAAW,EAAMokC,QAAS4rd,IAClEA,EAAS5rd,SAEpBu6P,EAAO5xc,UAAU0iqB,oBAAsB,WACnC,IAAIvV,EAAOvopB,KAAKM,OAChB,SAAWiopB,EAAKh/C,gBAAkBg/C,EAAK/G,eAAen+kB,QAAQ7mE,QACzD+rpB,EAAKgB,eAAelspB,IAAU,SAAM2C,KAAK+tK,WAAW/tK,KAAKM,OAAOqlpB,yBAEzE34M,EAAO5xc,UAAU2yK,WAAa,SAAU1qG,GACpC,IAAItjE,EAAQC,KACZ,OAAOqjE,EAAQ1kC,KAAK,SAAU8mC,GAK1B,SAHQ1lE,EAAMO,OAAOkhpB,eAAen+kB,QAAQ1kC,KAAK,SAAU5hC,GACvD,OAAO0oE,EAAIhC,kBAAoB1mE,EAAMglE,UAEtBhiE,EAAMO,OAAOippB,eAAelspB,IAAIb,WAG3Dwwc,EAAO5xc,UAAUkjqB,gBAAkB,SAAUr+pB,GACzC,IAAIF,EAAQC,KACZC,EAAK+pM,YAAc,YACnB,IAAIyI,EAAUzyM,KAAKzD,KAAKiL,YAAYvH,EAAKuqM,QAASxqM,KAAKM,OAAO6ppB,0BAA0B,GAAIlqpB,EAAKusM,UAC7F7rI,EAAQ3gE,KAAKzD,KAAKg8O,gBAAgBvqE,gBAClChuK,KAAKzD,KAAKqvK,YAAYvjG,WAAWspI,QACjC3xM,KAAKo4O,oBAAqBpuC,YAAa,cAIvCyI,EAAQP,KAAK,SAAUrxM,GACnBd,EAAMxD,KAAK23O,QAAQj0O,EAAM0gE,GACpBuxI,KAAK,SAAUrxM,GAAK,OAAOd,EAAMw+pB,UAAU19pB,EAAGZ,KAC9CszM,MAAM,SAAU1yM,GAAK,OAAOd,EAAMy+pB,UAAU39pB,EAAGZ,OAEnDszM,MAAM,SAAU1yM,GAAK,OAAOd,EAAMy+pB,UAAU39pB,EAAGZ,MAG5D+sc,EAAO5xc,UAAUmjqB,UAAY,SAAU19pB,EAAGZ,GACtCD,KAAKw4O,mBAAmB33O,EAAGZ,IAE/B+sc,EAAO5xc,UAAUojqB,UAAY,SAAU39pB,EAAGZ,GACtCD,KAAKo+pB,mBAAmBv9pB,EAAGZ,IAO/B+sc,EAAO5xc,UAAUqjqB,eAAiB,WAC9Bz+pB,KAAK09pB,UAAS,IAElB1wN,EAAO5xc,UAAUsiqB,SAAW,SAAUgB,GAClC,IAEI3rT,EAFAw1S,EAAOvopB,KAAKM,OACZuzpB,EAAQ7zpB,KAAKu9pB,gBAAgB1wY,WAAWlqR,cAAc,SAErDlF,EAAkBo2pB,IACnBtvpB,EAAOsvpB,GAEXA,EAAQ7zpB,KAAKM,OAAOa,cAAc,UAClC4xW,EAAK/yW,KAAKM,OAAOa,cAAc,MAAQkC,UAAW,gBAC/C1B,YAAY3B,KAAKM,OAAOa,cAAc,MACrCa,UAAWhC,KAAKi5H,KAAKh/C,YAAY,eACjCx2E,OAASk7pB,QAASpW,EAAKnE,aAAa5npB,OAAO0Q,eAE/C2mpB,EAAMlypB,YAAYoxW,GAClB/yW,KAAKu9pB,gBAAgB3b,YAAYiS,GAC7B6K,IACA1+pB,KAAKM,OAAOqmB,QAAQ+qoB,OACpB1xpB,KAAKM,OAAOyN,OAAO6wpB,IAAkBhyb,MAAO,IAAIhF,IAAMglb,WAAW,EAAMhmlB,OAAQ,IAAI27a,IAAO2rK,YAAY,EAAM52nB,SAAS,YAG7H01a,EAAO5xc,UAAUyjqB,oBAAsB,WAC/B7+pB,KAAKM,OAAOw+pB,wBAAwBtiqB,QACpCwD,KAAK++pB,iBAAiB/+pB,KAAKM,OAAOw+pB,wBAAwB,KAGlE9xN,EAAO5xc,UAAU2jqB,iBAAmB,SAAUnwf,GAK1C,IAAK,IAHD7xK,EADAsmE,EAAUrjE,KAAKM,OAAO8jpB,aAEtB7npB,EAAOqyK,GAAUA,EAAOlvG,MAAQkvG,EAAOlvG,MAAM,GAAKkvG,EAClDvoG,EAAOrmE,KAAK45pB,QAAQtzlB,WAAW,kBAC1BpqE,EAAI,EAAG2F,EAAMwhE,EAAQ7mE,OAAQN,EAAI2F,EAAK3F,IAAK,CAChDa,EAAQuJ,GAAU+8D,EAAQnnE,GAAG6lE,OAAS,GAAIxlE,GACtC8mE,EAAQnnE,GAAGu+oB,mBAAqBp3kB,EAAQnnE,GAAGssE,aAC3CzrE,EAAQuJ,GAAU+8D,EAAQnnE,GAAGunE,iBAAmB,GAAIJ,EAAQnnE,GAAGssE,WAAW,KAEzE/qE,EAAkBV,GAQnBsmE,EAAQnnE,GAAGwK,KAAO28D,EAAQnnE,GAAGwK,MAAQ,MAPrC1G,KAAKg/pB,cAAe,EACf37lB,EAAQnnE,GAAGwK,OACZ28D,EAAQnnE,GAAGwK,KAAO3J,EAAM0rE,OAAU1rE,EAAMmvE,WAAa,GAAKnvE,EAAMqvE,aAAe,GAC3ErvE,EAAMwsE,aAAe,GAAKxsE,EAAMwxH,kBAAoB,EAAI,WAAa,kBAMjF,IAAI4rhB,EAAiB,IAAI3M,GACrBnqkB,EAAQnnE,GAAGqiC,SAAW8kC,EAAQnnE,GAAGqiC,OAAOioC,UAAYnD,EAAQnnE,GAAGqiC,OAAOA,UACtE8kC,EAAQnnE,GAAGiqE,aAAag0kB,EAAe5zkB,kBAAkBlD,EAAQnnE,GAAGqiC,SACpE8kC,EAAQnnE,GAAGuqE,UAAU0zkB,EAAezzkB,kBAAkBrD,EAAQnnE,GAAGqiC,UAElC,iBAAvB8kC,EAAQnnE,GAAS,OACzBiqE,GAAanmE,KAAK45pB,QAASv2lB,EAAQnnE,IAE7BmnE,EAAQnnE,GAAGqiC,QAA8B,WAApB8kC,EAAQnnE,GAAGwK,MACtC28D,EAAQnnE,GAAGuqE,UAAUJ,EAAKK,mBAAoBnoC,OAAQ,UAIlEyua,EAAO5xc,UAAUo9O,mBAAqB,SAAU33O,EAAGZ,GAC/C,IAAIsopB,EAAOvopB,KAAKM,OAChBiopB,EAAK5hoB,QAAQs4oB,GAAwBp+pB,GACrC,IAAIgB,EAAMvD,OAAOhB,KAAKuD,EAAE9B,QAAQvC,OAChC,IAAIwD,KAAKM,OAAO6sF,YAGhB,GAAMo7jB,EAAKnE,aAAa5npB,QAAWqF,GAAU0mpB,EAAKlllB,QAAQ7mE,QAAU+rpB,EAAKlllB,QAAQ,aAAcE,GAA/F,CAOA,GAHAvjE,KAAKM,OAAOqxnB,QAAS,EACrB3xnB,KAAKM,OAAOyN,OAAOmxpB,OACnB3W,EAAK/xa,gBAAkB31O,EAAE9B,QACpB8C,GAAOhB,EAAEqe,OAASqpoB,EAAKS,YAKxB,OAJAT,EAAK4W,gBAAiB,EACtB5W,EAAKv6lB,aAAaoxmB,kBAAoBv+pB,EAAEqe,MACxCqpoB,EAAKv6lB,aAAa2wL,YAActyO,KAAKqmB,KAAK7xB,EAAEqe,MAAQqpoB,EAAKv6lB,aAAay/G,eACtE86e,EAAK/gmB,WAaT,KAVK+gmB,EAAKnE,aAAa5npB,QAAUqF,IAAQ7B,KAAKy9pB,mBAC1Cz9pB,KAAKq/pB,uBAAuBx+pB,IAE3Bb,KAAKg/pB,cAAgBzW,EAAKuW,yBAC3B9+pB,KAAK++pB,iBAAiBxW,EAAKuW,wBAAwB,IAEvD9+pB,KAAKM,OAAOyN,OAAOuxpB,GAAkB5gqB,GAASwgB,MAAOre,EAAEqe,MAAOngB,OAAQ8B,EAAE9B,OAAQ8lE,WAAYhkE,EAAEgkE,YAAc5kE,KACxGsopB,EAAKU,cAAc5llB,QAAQ7mE,QAAWyD,GAA6B,eAArBA,EAAK+pM,cACnDhqM,KAAKq9pB,eAAenE,YAEpBr3pB,EACA7B,KAAKu9pB,gBAAgBlK,mBAAmBpzpB,OAEvC,CACD,IAAKsopB,EAAKnE,aAAa5npB,OAGnB,OAFA+rpB,EAAKvnpB,QAAQgB,UAAY,QACzBs8H,MAAMt+H,KAAKi5H,KAAKh/C,YAAY,yBAMhC,GAHAj6E,KAAKu9pB,gBAAgB5I,mBACrB30pB,KAAKu9pB,gBAAgB3H,kBACrB51pB,KAAKy+pB,iBACDx+pB,EAAM,CACN,IAAI+yD,GAAU/yD,EAAK+pM,aAAe,IAAIp0L,cAAgB,YACtD5V,KAAKM,OAAOyN,OAAOilD,EAAQ/yD,GAE/BD,KAAKM,OAAOyiB,cAEhB/iB,KAAKM,OAAOyN,OAAOwxpB,YAzCfhX,EAAKxloB,eA2Cbiqb,EAAO5xc,UAAUgjqB,mBAAqB,SAAUv9pB,EAAGZ,GAC/CD,KAAKoxpB,YAAYkB,WAAWtypB,KAAKM,OAAOkxD,aAAax0C,YAAcu1oB,MAAM,EAAO2I,SAAS,IACzFl7pB,KAAKM,OAAOqmB,QAAQ64oB,IAAwBh1kB,MAAO3pF,IACnDb,KAAKM,OAAOyiB,cACa,SAArB9iB,EAAK+pM,aAA+C,WAArB/pM,EAAK+pM,aACnB,cAAd/pM,EAAKs3B,OAGZv3B,KAAKM,OAAOk2O,mBACZx2O,KAAKy+pB,mBAETzxN,EAAO5xc,UAAUikqB,uBAAyB,SAAUx+pB,GAChDb,KAAKy9pB,kBAAmB,EACpBz9pB,KAAKM,OAAO+iE,QAAQ7mE,OAAS,GAC7BwD,KAAKy/pB,aAAa5+pB,EAAE9B,OAAO,IAE/BqkE,GAAepjE,KAAKM,OAAO+iE,SAC3BrjE,KAAKq9pB,eAAe5K,cACpBzypB,KAAKu9pB,gBAAgB9K,cACrBzypB,KAAKM,OAAOyN,OAAO2xpB,QAEvB1yN,EAAO5xc,UAAUqkqB,aAAe,SAAU7wf,GAGtC,IAAK,IAFDvrG,EAAU/kE,OAAOhB,KAAKsxK,GACtB23e,KACKrqpB,EAAI,EAAG2F,EAAMwhE,EAAQ7mE,OAAQN,EAAI2F,EAAK3F,IAC3CqqpB,EAAKrqpB,IAAO6lE,MAASsB,EAAQnnE,IACzB8D,KAAKM,OAAOgrpB,6BACZ/E,EAAKrqpB,GAAG8Z,MAASvY,EAAkB8opB,EAAKrqpB,GAAG8Z,OAAyB,IAAhBuwoB,EAAKrqpB,GAAG8Z,OAGpEhW,KAAKM,OAAO+iE,QAAUkjlB,GAE1Bv5M,EAAO5xc,UAAUukqB,oBAAsB,WACnC3/pB,KAAKswB,SAASsvoB,YAAYve,GAAWrmR,OAAQ,IAAI66R,GAAa71pB,KAAKM,OAAQN,KAAK45pB,UAChF55pB,KAAKswB,SAASsvoB,YAAYve,GAAWmc,QAAS,IAAIzM,GAAc/wpB,KAAKM,OAAQN,KAAK45pB,UAClF,IAAIiG,EAAa7/pB,KAAK45pB,QAAQtzlB,WAAW,uBACzCu5lB,EAAWC,gBAAgBr0B,GAASzwQ,OAAQ,IAAIygS,GAAmBz7pB,KAAKM,OAAQN,KAAK45pB,UACrFiG,EAAWC,gBAAgBr0B,GAASrvZ,KAAM,IAAIu9a,GAAa35pB,KAAKM,OAAQN,KAAK45pB,UAC7EiG,EAAWC,gBAAgBr0B,GAASmtB,cAAe,IAAI6D,GAA0Bz8pB,KAAKM,OAAQN,KAAK45pB,UACnGiG,EAAWC,gBAAgBr0B,GAAS0jB,OAAQ,IAAIwN,GAAmB38pB,KAAKM,OAAQN,KAAK45pB,UACrFiG,EAAWC,gBAAgBr0B,GAASmlB,aAAc,IAAIgM,GAAyB58pB,KAAKM,OAAQN,KAAK45pB,UACjGiG,EAAWC,gBAAgBr0B,GAASolB,kBAAmB,IAAIkM,GAA8B/8pB,KAAKM,OAAQN,KAAK45pB,UAC3GiG,EAAWC,gBAAgBr0B,GAAS8kB,OAAQ,IAAIyM,GAAmBh9pB,KAAKM,OAAQN,KAAK45pB,UACrFiG,EAAWC,gBAAgBr0B,GAASqsB,aAAc,IAAImF,GAAyBj9pB,KAAKM,OAAQN,KAAK45pB,UACjGiG,EAAWC,gBAAgBr0B,GAASmtB,cAAe,IAAI6D,GAA0Bz8pB,KAAKM,OAAQN,KAAK45pB,UACnGiG,EAAWC,gBAAgBr0B,GAASssB,aAAc,IAAImF,GAA+Bl9pB,KAAKM,OAAQN,KAAK45pB,UACvGiG,EAAWC,gBAAgBr0B,GAASyhB,aAAc,IAAIiQ,GAAyBn9pB,KAAKM,OAAQN,KAAK45pB,WAErG5sN,EAAO5xc,UAAUqB,iBAAmB,WAChC,IAAIsD,EAAQC,KACRA,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAOwrF,GAAGi0kB,GAAoB//pB,KAAK2/pB,oBAAqB3/pB,MAC7DA,KAAKM,OAAOwrF,GAAGk0kB,GAAqBhgqB,KAAKyuD,QAASzuD,MAClDA,KAAKM,OAAOwrF,GrBxHS,mBqBwHkB9rF,KAAK49pB,gBAAiB59pB,MAC7DA,KAAKM,OAAOwrF,GrBjHE,YqBiHkB9rF,KAAKs+pB,gBAAiBt+pB,MACtDA,KAAKM,OAAOwrF,GAAGm+jB,GAAsB,WAAclqpB,EAAMq9pB,WAAY,GAASp9pB,MAC9EA,KAAKM,OAAOwrF,GAAG4zkB,GAAgB1/pB,KAAK6+pB,oBAAqB7+pB,QAG7Dgtc,EAAO5xc,UAAU+iqB,qBAAuB,SAAUt9pB,GAC9C,IAAId,EAAQC,KACR8R,EAAQjR,EAAE9B,OAAOvC,OAAS,EAC9B,GAAIsV,EAAQ,EACR,OAAOg3E,QAAQC,QAAQloF,GAE3B,IAAIo/pB,EAASp/pB,EAAE9B,OAAO,GAClBmhqB,EAASr/pB,EAAE9B,OAAO+S,GAClBywD,KACA49lB,EAAW,SAAUvupB,IACpBqupB,EAAQC,GAAQ9gqB,QAAQ,SAAU85F,GAC/B,OAAO32B,EAAU/9D,KAAK,IAAIklE,GAAU,QAAS,KAAMwvB,EAAMn3B,OAAO6H,IAAI7pE,EAAMylpB,aAAa,MAAO,QAAStsjB,EAAM77F,SAEjHuU,EAAM82D,MAAMgB,GAAUG,GAAGtH,KAEzB5B,EAAQ,IAAIwH,GAChBg4lB,EAASx/lB,GACT,IACIy/lB,EADQ,IAAI93lB,GAAYznE,EAAE9B,QACR+pE,aAAanI,GAC/B6wI,EAAWxxM,KAAKzD,KAAKg8O,eAAc,GACnC8nb,KACArgqB,KAAKzD,KAAKw7Y,aACTkoR,EAAQC,GAAQ9gqB,QAAQ,SAAU85F,GAC/B,OAAOmnkB,EAAW77pB,KAAKzE,EAAMylpB,aAAatsjB,EAAMn3B,MAAO,QAASm3B,EAAM77F,QAE1Em0M,EAAS9oI,MAAMgB,GAAUG,GAAGw2lB,KAG5BF,EAAS3ud,GAEb,IAAI6sd,EAAW,IAAIhsd,GAKnB,OAJAryM,KAAKzD,KAAK23O,WAAY1iC,GAAUU,KAAK,SAAU/yK,GAC3Cp/B,EAAMugqB,gBAAgBF,EAAWjhoB,EAAEpgC,QACnCs/pB,EAASt1kB,QAAQloF,KAClB0yM,MAAM,SAAU1yM,GAAK,OAAOw9pB,EAASr1kB,OAAOnoF,KACxCw9pB,EAAS5rd,SAEpBu6P,EAAO5xc,UAAUoqpB,aAAe,SAAUnopB,EAAKurE,EAAU7rE,GACrD,OAAIA,aAAiBsjB,KACVsoD,IAAmB5G,MAAO1kE,EAAKurE,SAAUA,EAAU7rE,MAAOA,IAE9D,IAAI2sE,GAAUrsE,EAAKurE,EAAU7rE,IAExCiwc,EAAO5xc,UAAUklqB,gBAAkB,SAAUt/oB,EAASu/oB,GAClD,IAAIxgqB,EAAQC,KACRqxK,EAAK,IAAI/oG,GAAYi4lB,GA6BzB,OA5BAv/oB,EAAQ5hB,QAAQ,SAAU4B,EAAS8Q,EAAO+/C,GACtC,IAAI2umB,EAASnvf,EAAGvoG,cAAa,IAAIX,IAC5BO,MAAM,IAAIgB,GAAU,QAAS,KAAM1oE,EAAQ+gE,OAAO6H,IAAI7pE,EAAMylpB,aAAa,MAAO,QAASxkpB,EAAQ3D,QAAQ,GAC9G2D,EAAQke,MAAQshpB,EAAOthpB,MACvB,IAAIuhpB,EAAYz/pB,EAAQ0+D,MACpBghmB,EAAaF,EAAO9gmB,MACpB+gmB,EAAUxxf,YACVjuK,EAAQ0+D,MAAQ3/D,EAAMugqB,gBAAgBt/pB,EAAQ0+D,MAAO8gmB,EAAO9gmB,QAEhE3/D,EAAMO,OAAOukE,WAAWzlE,QAAQ,SAAUsmE,GACtC,OAAOA,EAAIrC,QAAQjkE,QAAQ,SAAU4iE,IACrBA,EAAOt7D,gBAAgBlI,MAAQwjE,EAAOt7D,MAAQs7D,EAAOt7D,OAC3DtH,QAAQ,SAAUsH,GACpB,IAAIrJ,EAAM2kE,EAAOD,MAAQ,MAAQr7D,EAAKkP,cAClCrZ,EAAOkkqB,EAAUhxf,MAAQixf,EAAW1wf,QAAUwwf,EAAO9gmB,MACrD/5D,EAAU5F,EAAMO,OACpB,GAAa,WAAToG,EAAmB,CACnB,IAAIo9G,EAAS28iB,EAAUhxf,MAAQixf,EAAaF,EAC5Cx/pB,EAAQ6jE,WAAWxnE,GAAO2kE,EAAO4C,gBAC7B5C,EAAO4C,gBAAgBtjE,KAAKqE,EAASm+G,EAAQ9hD,GAAU,QAG3DhhE,EAAQ6jE,WAAWxnE,GAAO4kE,GAAS4C,WAAWn+D,EAAKkP,eAAerZ,EAAMylE,EAAOD,eAM5F/gD,GAEJgsb,KC1ZP2zN,GAAqC,WACrC,SAASA,IACL3gqB,KAAK4gqB,iBAiBT,OAfAD,EAAoBvlqB,UAAU0kqB,gBAAkB,SAAUvooB,EAAM7wB,GAC5D6wB,EAAuB,iBAATA,EAAoBA,EAAO15B,EAAa4toB,GAAUl0mB,GAC5D95B,EAAkBuC,KAAK4gqB,cAAcrpoB,MACrCv3B,KAAK4gqB,cAAcrpoB,GAAQ7wB,IAGnCi6pB,EAAoBvlqB,UAAU+vpB,gBAAkB,SAAU5znB,GAEtD,GADAA,EAAuB,iBAATA,EAAoBA,EAAO15B,EAAa4toB,GAAUl0mB,GAC5D95B,EAAkBuC,KAAK4gqB,cAAcrpoB,IACrC,KAAM,oBAAsBA,EAAO,gBAGnC,OAAOv3B,KAAK4gqB,cAAcrpoB,IAG3BopoB,KCpBPphP,GAAgC,WAChC,SAASA,IACLv/a,KAAKw/a,YAaT,OAXAD,EAAenkb,UAAUqkb,SAAW,SAAUloZ,EAAM7wB,GAC5CjJ,EAAkBuC,KAAKw/a,SAASjoZ,MAChCv3B,KAAKw/a,SAASjoZ,GAAQ7wB,IAG9B64a,EAAenkb,UAAUkrE,WAAa,SAAU/uC,GAC5C,GAAI95B,EAAkBuC,KAAKw/a,SAASjoZ,IAChC,KAAM,eAAiBA,EAAO,qBAElC,OAAOv3B,KAAKw/a,SAASjoZ,IAElBgoZ,KCdPshP,GAAiC,WACjC,SAASA,IACL7gqB,KAAK8gqB,eAiBT,OAfAD,EAAgBzlqB,UAAUwkqB,YAAc,SAAUrooB,EAAM7wB,GACpD,IAAIq6pB,EAAQljqB,EAAawjpB,GAAY9pnB,GACjC95B,EAAkBuC,KAAK8gqB,YAAYC,MACnC/gqB,KAAK8gqB,YAAYC,GAASr6pB,IAGlCm6pB,EAAgBzlqB,UAAUkiqB,YAAc,SAAU/loB,GAC9C,IAAIwpoB,EAAQljqB,EAAawjpB,GAAY9pnB,GACrC,GAAI95B,EAAkBuC,KAAK8gqB,YAAYC,IACnC,KAAM,gBAAkBA,EAAQ,gBAGhC,OAAO/gqB,KAAK8gqB,YAAYC,IAGzBF,KCjBPG,GAAoC,WACpC,SAASA,EAAmB1gqB,GACxBN,KAAKM,OAASA,EA6JlB,OA3JA0gqB,EAAmB5lqB,UAAU+9pB,kBAAoB,WAC7C,IAAIp5pB,EAAQC,KACR9D,EAAI,EACJ6kS,EAAU/gS,KAAKM,OAAO4rpB,yBACtBwE,GAAQ,EACZ,GAAI1wpB,KAAKM,OAAOk5oB,cACZ,IAAK,IAAI33oB,EAAM7B,KAAKM,OAAO2opB,cAAc5llB,QAAQ7mE,OAAQN,EAAI2F,EAAK3F,IAC1D8D,KAAKM,OAAOgrpB,6BAAsD,IAAxBvqX,EAAQxiS,QAAQrC,GAC1Dw0pB,GAAQ,EAGZ1wpB,KAAKihqB,eAAe,IAAI19lB,IAASvtD,MAAO,SAAW9Z,IAGvD8D,KAAKM,OAAOqtpB,gBAAkB3tpB,KAAKM,OAAOoxT,YAC1C1xT,KAAKihqB,eAAe,IAAI19lB,IAASvtD,MAAO,SAAW9Z,GAEvD8D,KAAKM,OAAO8jpB,aAAahlpB,QAAQ,SAAU4iE,EAAQlwD,GAC/C/R,EAAMkhqB,eAAej/lB,EAAQ0ulB,OAAQx1pB,EAAY4W,MAGzDkvpB,EAAmB5lqB,UAAU6lqB,eAAiB,SAAUj/lB,EAAQlwD,EAAOwlF,GACnE,IAAI03I,EAAcvxO,EAAkBqU,GAAS9R,KAAKM,OAAO80pB,yBAAyBpzlB,EAAOtiE,KAAOoS,EAC5FovpB,EAASlhqB,KAAKkzR,SAASlxN,GACZ,OAAXk/lB,IACAlhqB,KAAKqwI,SAAS6whB,EAAQlyb,IACjBhvO,KAAKM,OAAOi5oB,eAA4B,WAAXjijB,GAAyBt3F,KAAKM,OAAOixpB,oBAAsBvxpB,KAAKM,OAAOi5oB,gBACrGv5oB,KAAKmhqB,kBAETnhqB,KAAKM,OAAOyN,OAAO+woB,IAAsBhtoB,MAAOk9N,EAAah5N,MAAOkrpB,EAAQl/lB,OAAQA,EAAQs1B,OAAQA,MAG5G0pkB,EAAmB5lqB,UAAUi1I,SAAW,SAAUr6H,EAAOlE,GAGrD,GAAuB,qBAAoC,IAAxBkE,EAAMzX,QAAQ,QAC3C6iqB,QAAQxlqB,OAAa,UAAMwlqB,QAAQxlqB,OAAa,OAAU,YAAOoE,KAAKM,OAAOk5oB,cAAe,CAC9F,IAAIhpU,EAAexwU,KAAKM,OAAOU,QAAQ4D,YACvCoR,EAAQ4e,SAAS5e,EAAO,IAAM,MAElC,IAGIqrpB,EAHAv2kB,EAAS9qF,KAAKM,OAAO2zpB,iBACrB33nB,EAAUt8B,KAAKM,OAAOghqB,kBACtBC,EAASh/pB,EAAWyT,GAEpBg0D,EAAUhqE,KAAKM,OAAOixpB,mBACtBiQ,EAAOxhqB,KAAKM,OAAO0ypB,mBAAmBrwpB,cAAc,qBAEpD0+pB,EADAr3lB,GAAWl4D,GAASk4D,GAAWw3lB,GAAQA,EAAK7+pB,cAAc,YAC9C6+pB,EAAK7+pB,cAAc,YAAYyX,SAAStI,EAAQk4D,GAGhD8gB,EAAOnoF,cAAc,YAAYyX,SAAStI,MAGtDuvpB,EAAU38pB,MAAMsR,MAAQurpB,GAE5B,IAAIE,GAEAA,EADAz3lB,GAAWl4D,GAASk4D,EACPhqE,KAAKM,OAAOkxD,aAAa7uD,cAAc,qBAC/CA,cAAc,YAAYyX,SAAStI,EAAQk4D,GAGnC1tC,EAAQ35B,cAAc,YAAYyX,SAAStI,MAGxD2vpB,EAAW/8pB,MAAMsR,MAAQurpB,GAE7B,IAAI1nB,EAAOv9mB,EAAQ35B,cAAc,0BAC7Bk3oB,GACIA,EAAKl3oB,cAAc,YAAYyX,SAAStI,KACxC+noB,EAAKl3oB,cAAc,YAAYyX,SAAStI,GAAOpN,MAAMsR,MAAQurpB,IAIzEP,EAAmB5lqB,UAAUsmqB,kBAAoB,SAAU1gqB,GAGvD,OAFehB,KAAK2hqB,uBAAuB3gqB,EAAS,YACzChB,KAAK2hqB,uBAAuB3gqB,EAAS,SAGpDggqB,EAAmB5lqB,UAAUumqB,uBAAyB,SAAU3gqB,EAASq0B,GAIrE,IAHA,IAAI4mX,EAAUj7Y,EAAQq0B,EAAY,kBAC9Bt2B,EAAS,EACT+E,GAAa,eAAgB,eAAgB,kBAAmB,cAAe,aAC5Em4Y,GACCn4Y,EAAU66B,KAAK,SAAU5hC,GAAS,OAAOk/Y,EAAQn4Y,UAAUK,SAASpH,OACpEgC,GAAUk9Y,EAAQtkV,cAEtBskV,EAAUA,EAAQ5mX,EAAY,kBAElC,OAAOt2B,GAEXiiqB,EAAmB5lqB,UAAU83R,SAAW,SAAUlxN,GAI9C,GAHIvkE,EAAkBukE,EAAOhsD,QAAUhW,KAAKM,OAAOi5oB,gBAC/Cv3kB,EAAOhsD,MAAQ,MAEdgsD,EAAOhsD,MACR,OAAO,KAEX,IAAIA,EAAQ4e,SAASotC,EAAOhsD,MAAM9I,WAAY,IAC9C,OAAI80D,EAAO/R,UAAYj6C,EAAQ4e,SAASotC,EAAO/R,SAAS/iD,WAAY,IACzD80D,EAAO/R,SAER+R,EAAOvhC,UAAYzqB,EAAQ4e,SAASotC,EAAOvhC,SAASvzB,WAAY,IAC/D80D,EAAOvhC,SAGPuhC,EAAOhsD,OAGtBgrpB,EAAmB5lqB,UAAU4ugB,cAAgB,SAAU3mc,GAEnD,IAAK,IADDu+lB,EAAS,EACJxjqB,EAAK,EAAGk2W,EAAYjxS,EAASjlE,EAAKk2W,EAAU93W,OAAQ4B,IAAM,CAC/D,IAAI4jE,EAASsyS,EAAUl2W,GACnB8iqB,EAASlhqB,KAAKkzR,SAASlxN,IACJ,IAAnBA,EAAO1qC,SAAgC,OAAX4poB,IAC5BU,GAAUhtoB,SAASssoB,EAAOh0pB,WAAY,KAG9C,OAAO00pB,GAEXZ,EAAmB5lqB,UAAUymqB,sBAAwB,WACjD,IAAIx+lB,EAAUrjE,KAAKM,OAAO8jpB,aAC1B/glB,EAAQ16C,OAAO3oB,KAAKM,OAAOixpB,mBAAoBlulB,EAAQ7mE,QACvD,IAAIslqB,EAAcv/pB,EAAWvC,KAAKgqgB,cAAc3mc,IAChDrjE,KAAKM,OAAO2zpB,iBAAiBvvpB,MAAMsR,MAAQ8rpB,EAC3C9hqB,KAAKM,OAAOghqB,kBAAkB58pB,MAAMsR,MAAQ8rpB,GAEhDd,EAAmB5lqB,UAAU2mqB,uBAAyB,WAClD,IAAI1+lB,EAAUrjE,KAAKM,OAAO8jpB,aAC1B/glB,EAAQ16C,OAAO,EAAG3oB,KAAKM,OAAOixpB,oBAC9B,IAAIyQ,EAAez/pB,EAAWvC,KAAKgqgB,cAAc3mc,IAC7CrjE,KAAKM,OAAO0ypB,mBAAmBrwpB,cAAc,oBAAoBwC,oBACjEnF,KAAKM,OAAO0ypB,mBAAmBrwpB,cAAc,oBAAoBwC,kBAAkBT,MAAMsR,MACnFgspB,GAEVhiqB,KAAKM,OAAOkxD,aAAa7uD,cAAc,qBAAqBwC,kBAAkBT,MAAMsR,MAChFgspB,GAERhB,EAAmB5lqB,UAAU+lqB,gBAAkB,WAC3C,IAAIS,EAASr/pB,EAAWvC,KAAKgqgB,cAAchqgB,KAAKM,OAAO8jpB,eACnDpkpB,KAAKM,OAAOixpB,oBACZvxpB,KAAK6hqB,wBACL7hqB,KAAK+hqB,4BAGD/hqB,KAAKM,OAAOqtpB,gBAAkB3tpB,KAAKM,OAAOoxT,YAC1C1xT,KAAKihqB,eAAe,IAAI19lB,IAASvtD,MAAO,UAE5ChW,KAAKM,OAAO2zpB,iBAAiBvvpB,MAAMsR,MAAQ4rpB,EAC3C5hqB,KAAKM,OAAOghqB,kBAAkB58pB,MAAMsR,MAAQ4rpB,GAEhD,IAAI/nB,EAAO75oB,KAAKM,OAAOU,QAAQ2B,cAAc,0BACzCk3oB,IACAA,EAAKn1oB,MAAMsR,MAAQ4rpB,IAGpBZ,KCvKPvwkB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAqBxCmxkB,GAA+B,WAC/B,SAASA,EAAc3hqB,GACnBN,KAAKkiqB,eACLliqB,KAAKmiqB,SAAU,EACfniqB,KAAK+1C,QACL/1C,KAAKoiqB,QAAS,EACdpiqB,KAAKqiqB,WAAY,EACjBriqB,KAAKsiqB,cAAe,EACpBtiqB,KAAKuiqB,eACLviqB,KAAKM,OAASA,EACdN,KAAKvD,mBAoVT,OAlVAwlqB,EAAc7mqB,UAAUonqB,WAAa,SAAU3hqB,GAC3C,IAAIsG,EAAStG,EAAEsG,OACfnH,KAAKsiqB,cAAe,EACpBtiqB,KAAKqiqB,UAAYl7pB,EAAOrD,UAAUK,SAAS,WAE/C89pB,EAAc7mqB,UAAUkvmB,QAAU,WAC9B,KAAItqmB,KAAKM,OAAO6sF,aAAe3hF,GAAQqb,UAAY7mB,KAAKM,OAAO46M,sBAA/D,CAGAl7M,KAAK6/X,UAAqC,IAA3B7/X,KAAKM,OAAOyypB,WAAgD,IAA9B/ypB,KAAKM,OAAOq4pB,eACzD,IAAI33oB,EAAUhhB,KAAKwxD,aAAa1jB,OAAOpmC,IAAI,GAAI,GAAI,EAAG,GAAI,KAAM1H,KAAKwxD,aAAaixmB,aAClFziqB,KAAKwxD,aAAa1jB,OAAOroC,OAAOub,EAAQ,GAAIA,EAAQ,IAChDhhB,KAAKqiqB,YACLriqB,KAAKkC,QACLlC,KAAKqiqB,WAAY,KAGzBJ,EAAc7mqB,UAAUsnqB,aAAe,SAAU7hqB,GACzCb,KAAKM,OAAO6sF,aAGZtsF,EAAEsG,QAAUtG,EAAEsG,OAAOrD,UAAUK,SAAS,kBACxCnE,KAAKkiqB,YAAYS,YAAa,EAC9Bh/pB,GAAU3D,KAAKkiqB,YAAYlhqB,UAAW,YAAa,cAG3DihqB,EAAc7mqB,UAAU+umB,OAAS,SAAUtpmB,GAClCb,KAAKM,OAAOqxnB,QAAU9wnB,KAAOA,EAAE29I,eAAiB34I,EAAQhF,EAAE29I,cAAe,cAG9Ex+I,KAAKyrJ,cACLzrJ,KAAKqiqB,WAAY,EACjBriqB,KAAKkiqB,YAAYS,YAAa,EAC1B3iqB,KAAKwxD,aAAaoxmB,eAAeC,iBACjC7iqB,KAAKwxD,aAAaoxmB,eAAeC,eAAej4iB,SAAW,KAGnEq3iB,EAAc7mqB,UAAU0nqB,QAAU,SAAUjiqB,EAAG+la,GAC3C,IAAIrqS,GAAa9+H,EAAkBoI,EAAQhF,EAAEsG,OAAQ,mBACjDulB,GAAYjvB,EAAkBoI,EAAQhF,EAAEsG,OAAQ,kBACpDo1H,EAAYA,GAAa7vG,GAAY6vG,EAAYA,EACjD,IAAIi1hB,GAAY/zpB,EAAkBoI,EAAQhF,EAAEsG,OAAQ,uBAC/C1J,EAAkBoI,EAAQhF,EAAEsG,OAAQ,oBACzC,MAAKo1H,GAAa9+H,EAAkBoI,EAAQhF,EAAEsG,OAAQ,mBAClDtG,EAAEsG,OAAOrD,UAAUK,SAAS,cAIhC,GADAnE,KAAK6/X,UAAUtjQ,EAAWi1hB,IACrBj1hB,GAAa9+H,EAAkBoI,EAAQhF,EAAEsG,OAAQ,mBAClDtG,EAAEsG,OAAOrD,UAAUK,SAAS,mBAC5BnE,KAAK+iqB,mBAFT,CAKA,IAAIC,GAAeppoB,QAAQ,EAAOqpoB,OAAO,EAAOC,SAAUzlqB,EAAkBoD,EAAEsG,QAASg8pB,UAAWtiqB,GAElG,GADAb,KAAKM,OAAOyN,OAAOq1pB,GAAyBJ,IACxCA,EAAWppoB,SAAU/zB,EAAQhF,EAAEsG,OAAQ,oBAG3CnH,KAAK6/X,UAAUtjQ,EAAWi1hB,GACtBxxpB,KAAKwxD,cAAc,CAEnB,IAAkB,IADFxxD,KAAKwxD,aAAasxmB,QAAQjiqB,EAAG+la,GAEzC,OAEJ5ma,KAAKkC,WAGb+/pB,EAAc7mqB,UAAUknX,WAAa,SAAUzhX,GAC3C,IAAIb,KAAKqjqB,OAAOxiqB,GAAhB,CAGA,IAAImiqB,GAAeppoB,QAAQ,EAAOqpoB,OAAO,EAAMC,SAAS,EAAOI,QAASziqB,GAExE,GADAb,KAAKM,OAAOyN,OAAOq1pB,GAAyBJ,IACxCA,EAAWppoB,OAAf,CAGA,IAAI2poB,EAASvjqB,KAAKwxD,aAAa1jB,OAAO9sB,QACtChhB,KAAKkiqB,YAAYpkI,SAAU,EAC3B,IAAI0lI,EAAWxjqB,KAAKwxD,aAAaiymB,KAAK5iqB,EAAEmyD,OAAQuwmB,GAChDvjqB,KAAK+1C,KAAOytnB,EACRA,EAASztnB,OACT/1C,KAAK6/X,WAAW2jS,EAASE,SAAUF,EAASG,UAC5C3jqB,KAAKwxD,aAAa1jB,OAAO9sB,QAAUhhB,KAAKwxD,aAAaoymB,eAAeL,EAAQC,EAAUxjqB,KAAK42N,OAAQ/1N,EAAEmyD,QACrGhzD,KAAKuiqB,gBAETviqB,KAAK6jqB,eAAehjqB,EAAEmyD,OAAQhzD,KAAKwxD,eAEjB,IADFxxD,KAAKwxD,aAAa8wT,WAAWzhX,IAK7CA,EAAE8kB,iBACF3lB,KAAKkC,MAAMrB,IAJPb,KAAK8jqB,oBAMb7B,EAAc7mqB,UAAUioqB,OAAS,SAAUxiqB,GACvC,IAAIsG,EAAStG,EAAEsG,OACf,QAAKA,IAGDnH,KAAKkiqB,YAAYS,YACjB3iqB,KAAK8jqB,kBACE,IAEN,SAAU,YAAYvlqB,QAAQsC,EAAEmyD,SAAW,GAC5ChzD,KAAK8jqB,kBACE,GAEU,WAAbjjqB,EAAEmyD,QACgC,UAAlChzD,KAAKM,OAAO2lE,aAAa5lC,OAAqBrgC,KAAKM,OAAOqxnB,SAAW,SAAU,MAAMpznB,QAAQsC,EAAEmyD,SAAW,IAClD,OAAxDntD,EAAQrF,SAAS+4H,cAAe,qBACiD,OAAjF1zH,EAAQrF,SAAS+4H,cAAe,IAAMv5H,KAAKM,OAAOU,QAAQsC,GAAK,gBACvD,QAAS,YAAa,aACtB,YAAa,aAAc,aAAa/E,QAAQsC,EAAEmyD,SAAW,GAC/B,OAAtCntD,EAAQsB,EAAQ,mBAAmE,OAArCtB,EAAQsB,EAAQ,kBACjD,UAAbtG,EAAEmyD,SAAwB7rD,EAAOrD,UAAUK,SAAS,iBAAwD,OAArC0B,EAAQsB,EAAQ,kBACzC,OAA3CtB,EAAQsB,EAAQ,yBAE/B86pB,EAAc7mqB,UAAU2oqB,kBAAoB,WACxC,OAAO/jqB,KAAKkiqB,YAAYW,gBAE5BZ,EAAc7mqB,UAAUo2D,WAAa,WACjC,OAAOxxD,KAAK42N,QAAU52N,KAAKs8B,SAE/B2loB,EAAc7mqB,UAAUykY,UAAY,SAAUvjW,EAASk1nB,GACnDxxpB,KAAK42N,OAASt6L,EAAUk1nB,EAAWxxpB,KAAKgkqB,SAAWhkqB,KAAKs8B,QACpDk1nB,EAAWxxpB,KAAKikqB,QAAUjkqB,KAAK8qF,QAEvCm3kB,EAAc7mqB,UAAU8oqB,kBAAoB,SAAUljqB,GAClD,IAAIjB,EAAQC,KACZA,KAAKkiqB,YAAYW,eAAiB7hqB,EAClCb,WAAW,WAAc,OAAOJ,EAAMmiqB,YAAYW,eAAe3gqB,SAAY,IAEjF+/pB,EAAc7mqB,UAAU8G,MAAQ,SAAUrB,GACtCb,KAAKyrJ,cACLzrJ,KAAKmkqB,SAASnkqB,KAAKwxD,aAAaoxmB,eAAgB/hqB,IAEpDohqB,EAAc7mqB,UAAUqwJ,YAAc,SAAU5qJ,GACvCb,KAAKkiqB,YAAYlhqB,UAGtBqD,GAAarE,KAAKkiqB,YAAYlhqB,QAAShB,KAAKkiqB,YAAYW,iBAAkB,YAAa,YACvF7iqB,KAAKkiqB,YAAYlhqB,QAAQ4pH,UAAY,IAEzCq3iB,EAAc7mqB,UAAU+oqB,SAAW,SAAUr9oB,EAAMjmB,GAG/C,GAFAb,KAAKkiqB,YAAcp7oB,EACnB9mB,KAAKkiqB,YAAYpkI,QAAUh3gB,EAAKg3gB,UAAYrgiB,EAAkBoD,GACzDimB,EAAK9lB,QAAV,CAGA,IAAIirI,EAAYnlH,EAAK+7oB,eAAe/+pB,UAAUK,SAAS,WACvD,IAAI8nI,EAAJ,CAGIjsI,KAAKkiqB,YAAYpkI,SACjBn6hB,GAAUmjB,EAAK9lB,UAAW,cAE9B2C,GAAUmjB,EAAK+7oB,iBAAkB,YACjC/7oB,EAAK9lB,QAAQ4pH,SAAW,EACnBqhB,GACDjsI,KAAKkkqB,kBAAkBp9oB,EAAK+7oB,gBAEhC7iqB,KAAKM,OAAOyN,OAAOq2pB,IACfpjqB,QAAS8lB,EAAK+7oB,eACdviqB,OAAQwmB,EAAK9lB,QACb+/R,QAAS/gS,KAAKwxD,aAAa1jB,OAAO9sB,QAClCiipB,OAAQxlqB,EAAkBoD,GAC1BqiqB,QAASzlqB,EAAkBoD,GAC3ByiqB,QAASziqB,EACTwjqB,OAAQrkqB,KAAK+1C,KAAKA,KAClBl7B,UAAW7a,KAAKwxD,aAAa8ymB,QAAQzjqB,GACrCi9hB,SAAUrgiB,EAAkBoD,GAC5B2iqB,SAAUxjqB,KAAK+1C,OAEnB,IAAIlzC,EAAK7C,KAAKwxD,aAAa1jB,OAAO9sB,QAASiuN,EAAWpsO,EAAG,GAAI0wT,EAAY1wT,EAAG,GAC5E7C,KAAKuiqB,aAAgBtzb,SAAUA,EAAUskF,UAAWA,GACpDvzT,KAAKukqB,iBAAmBvkqB,KAAKM,OAAOkkqB,iBAAiBjxW,GAAW7zT,IAChEM,KAAKsiqB,cAAe,KAExBL,EAAc7mqB,UAAUqpqB,cAAgB,SAAUnooB,GAC9C,IAAIv8B,EAAQC,KACZ,OAAO,SAAUa,GACTy7B,GAAYz7B,EAAEZ,MAAQY,EAAEZ,KAAKuxpB,WAAczxpB,EAAMikqB,SACjDjkqB,EAAMikqB,SAAW,IAAIU,GAAkB3kqB,EAAMO,QAExCg8B,IAAYv8B,EAAMu8B,UACvBv8B,EAAMu8B,QAAU,IAAIqooB,GAAa5kqB,EAAMO,UAEtCg8B,GAAYz7B,EAAEZ,MAAQY,EAAEZ,KAAKuxpB,WAAczxpB,EAAMkkqB,QAClDlkqB,EAAMkkqB,QAAU,IAAIW,GAAiB7kqB,EAAMO,QAErCg8B,GAAYv8B,EAAM+qF,SACxB/qF,EAAM+qF,OAAS,IAAI+5kB,GAAY9kqB,EAAMO,SAEzC,IAAIwkqB,EAASxooB,EAAWz7B,EAAEZ,MAAQY,EAAEZ,KAAKuxpB,SAAYzxpB,EAAMikqB,SAAWjkqB,EAAMu8B,QACvEz7B,EAAEZ,MAAQY,EAAEZ,KAAKuxpB,SAAYzxpB,EAAMkkqB,QAAUlkqB,EAAM+qF,OACpD8hJ,EAAOtwM,EAAUz7B,EAAE+rO,KAAKvrO,MAAMtB,EAAMO,OAAOyypB,YAAclypB,EAAE+rO,KAC3Dm4b,EAAYzooB,EAAUz7B,EAAE+rO,KAAKvrO,MAAM,EAAGtB,EAAMO,OAAOyypB,YAAclypB,EAAE+rO,KACnE9+L,EAASg3nB,EAAOh3nB,OAAOyxC,SAASwllB,EAAWD,EAAOp/pB,UAOtD,GANAo/pB,EAAOh3nB,OAAOyxC,SAASqtJ,EAAMk4b,EAAOp/pB,UACpCo/pB,EAAOtX,aAAauX,GAAaj3nB,OAAQA,EAAQk3nB,gBAAkBnkqB,EAAEZ,MAAQY,EAAEZ,KAAKuxpB,SAAYzxpB,EAAMkkqB,QAAUlkqB,EAAM+qF,UACjHt/E,GAAQqb,WAAa9mB,EAAMuiqB,cAAgBzhqB,GAAKA,EAAEZ,MAA+B,WAAvBY,EAAEZ,KAAK+pM,cAClEjqM,EAAMsiqB,WAAY,EAClBtiqB,EAAMO,OAAOU,QAAQkB,SAErBrB,GAAKA,EAAEZ,MAA+B,kBAAvBY,EAAEZ,KAAK+pM,YACtB,GAAIjqM,EAAMmiqB,YAAYxiqB,IAAK,CACvB,IAAI24Z,EAKJ,GAJWx3Z,EAAE+rO,KAAKjuM,KAAK,SAAU+mC,EAAKxpE,GAElC,OADAm8Z,EAAUn8Z,EACHwpE,EAAIhmE,MAAQK,EAAMmiqB,YAAYxiqB,MAE/B,CACNK,EAAMu8B,QAAQwR,OAAO9sB,QAAQ,GAAKq3Y,EAClCt4Z,EAAMu8B,QAAQwR,OAAO9sB,QAAQ,GAAKjhB,EAAMO,OAAOw4pB,oBAAoB/4pB,EAAMwkqB,mBAAqB,EAE9F,GADIU,EAAellqB,EAAMyxD,aAAaoxmB,eAAeC,eACnC,CACd,IAAIqC,EAAeD,EAAar5pB,wBAC5Bu5pB,EAAeplqB,EAAMO,OAAOU,QAAQ4K,wBACpCs5pB,EAAax4pB,KAAO,GAAKw4pB,EAAa14pB,MAAQ,GAC9C04pB,EAAaz4pB,OAASJ,KAAK+T,IAAI+kpB,EAAa14pB,MAAO7Q,OAAO2d,YACtD/Y,SAAS4L,gBAAgBwjB,cAC7Bs1oB,EAAav4pB,QAAUN,KAAK+T,IAAI+kpB,EAAax4pB,OAAQ/Q,OAAO0d,aACxD9Y,SAAS4L,gBAAgByjB,eAC7B9vB,EAAMmC,eAKjB,GAAIrB,EAAEZ,KAAKglqB,cAAgBpkqB,EAAEZ,KAAKglqB,aAAanhqB,UAAUK,SAAS,gBAAiB,CACpF,IAAI8gqB,GAAAA,EAAellqB,EAAMO,OAAOU,QAAQ2B,cAAc,IAAM9B,EAAEZ,KAAKglqB,aAAa3hqB,MAE5E2hqB,EAAa/iqB,WAMjC+/pB,EAAc7mqB,UAAUqB,iBAAmB,WACvC,IAAIsD,EAAQC,KACRA,KAAKM,OAAO6sF,cAGhB5nF,GAAanB,IAAIpE,KAAKM,OAAOU,QAAS,YAAahB,KAAKwiqB,WAAYxiqB,MACpEuF,GAAanB,IAAIpE,KAAKM,OAAOU,QAAS,QAAShB,KAAKsqmB,QAAStqmB,MAC7DA,KAAKM,OAAOU,QAAQvE,iBAAiB,QAASuD,KAAKolqB,eAAiB,SAAUvkqB,GAAK,OAAOd,EAAM2iqB,aAAa7hqB,KAAO,GACpH0E,GAAanB,IAAIpE,KAAKM,OAAOU,QAAS,WAAYhB,KAAKmqmB,OAAQnqmB,MAC/DA,KAAKM,OAAOwrF,GAAGu5kB,GAAkBrlqB,KAAKsiX,WAAYtiX,MAClDA,KAAKM,OAAOwrF,GAAGw5kB,GAAatlqB,KAAK8iqB,QAAS9iqB,MAC1CA,KAAKM,OAAOwrF,GAAGy5kB,GAAoBvlqB,KAAKykqB,eAAc,GAAOzkqB,MAC7DA,KAAKM,OAAOwrF,GAAG05kB,GAAuBxlqB,KAAKykqB,gBAAiBzkqB,MAC5DA,KAAKM,OAAOwrF,GAAG,aAAc9rF,KAAKylqB,aAAczlqB,OAC/C,aAAc,aAAaZ,QAAQ,SAAU28E,GAAO,OAAOh8E,EAAMO,OAAOwrF,GAAG/P,EAAKh8E,EAAM+jqB,eAAgB/jqB,MACtG,WAAWX,QAAQ,SAAU4zD,GAAU,OAAOjzD,EAAMO,OAAOwrF,GAAG94B,EAAS,YAAajzD,EAAM0lqB,aAAc1lqB,KACzGC,KAAKM,OAAOwrF,GAAG45kB,GAAgB1lqB,KAAKykqB,eAAc,GAAOzkqB,MACzDA,KAAKM,OAAOwrF,GAAG65kB,GAAmB3lqB,KAAKykqB,eAAc,GAAOzkqB,MAC5DA,KAAKM,OAAOwrF,GAAG85kB,GAAmB5lqB,KAAKykqB,eAAc,GAAOzkqB,MAC5DA,KAAKM,OAAOwrF,GAAG+5kB,GAAuB7lqB,KAAKykqB,eAAc,GAAOzkqB,MAChEA,KAAKM,OAAOwrF,GAAGg6kB,GAAe9lqB,KAAKykqB,eAAc,GAAOzkqB,MACxDA,KAAKM,OAAOwrF,GAAGs4kB,GAAmBpkqB,KAAK+lqB,kBAAmB/lqB,QAE9DiiqB,EAAc7mqB,UAAUuB,oBAAsB,WAC1C,IAAIoD,EAAQC,KACRA,KAAKM,OAAO6sF,cAGhB5nF,GAAahB,OAAOvE,KAAKM,OAAOU,QAAS,YAAahB,KAAKwiqB,YAC3Dj9pB,GAAahB,OAAOvE,KAAKM,OAAOU,QAAS,QAAShB,KAAKsqmB,SACvD/kmB,GAAahB,OAAOvE,KAAKM,OAAOU,QAAS,WAAYhB,KAAKmqmB,QAC1DnqmB,KAAKM,OAAOU,QAAQrE,oBAAoB,QAASqD,KAAKolqB,gBAAgB,GACtEplqB,KAAKM,OAAO4rF,IAAIm5kB,GAAkBrlqB,KAAKsiX,YACvCtiX,KAAKM,OAAO4rF,IAAIo5kB,GAAatlqB,KAAK8iqB,SAClC9iqB,KAAKM,OAAO4rF,IAAIq5kB,GAAoBvlqB,KAAKykqB,eAAc,IACvDzkqB,KAAKM,OAAO4rF,IAAIs5kB,GAAuBxlqB,KAAKykqB,iBAC5CzkqB,KAAKM,OAAO4rF,IAAI,aAAclsF,KAAKylqB,eAClC,aAAc,aAAarmqB,QAAQ,SAAU28E,GAAO,OAAOh8E,EAAMO,OAAO4rF,IAAInQ,EAAKh8E,EAAMgjqB,iBACvF,WAAW3jqB,QAAQ,SAAU4zD,GAAU,OAAOjzD,EAAMO,OAAO4rF,IAAIl5B,EAAS,YAAajzD,EAAM0lqB,gBAC5FzlqB,KAAKM,OAAO4rF,IAAIw5kB,GAAgB1lqB,KAAKykqB,eAAc,IACnDzkqB,KAAKM,OAAO4rF,IAAI05kB,GAAmB5lqB,KAAKykqB,eAAc,IACtDzkqB,KAAKM,OAAO4rF,IAAIy5kB,GAAmB3lqB,KAAKykqB,eAAc,IACtDzkqB,KAAKM,OAAO4rF,IAAI25kB,GAAuB7lqB,KAAKykqB,eAAc,IAC1DzkqB,KAAKM,OAAO4rF,IAAI45kB,GAAe9lqB,KAAKykqB,eAAc,IAClDzkqB,KAAKM,OAAO4rF,IAAIk4kB,GAAmBpkqB,KAAK+lqB,qBAE5C9D,EAAc7mqB,UAAUiX,QAAU,WAC9BrS,KAAKrD,uBAETslqB,EAAc7mqB,UAAUqqqB,aAAe,WACnCzlqB,KAAKmkqB,SAASnkqB,KAAKwxD,aAAaoxmB,iBAEpCX,EAAc7mqB,UAAU2nqB,aAAe,WACnC/iqB,KAAKwxD,aAAa1jB,OAAO9sB,QAAUhhB,KAAKwxD,aAAa1jB,OAAOpmC,IAAI,GAAI,GAAI,EAAG,GAAI,YAAa1H,KAAKwxD,aAAaixmB,aAC9GziqB,KAAK8jqB,kBAET7B,EAAc7mqB,UAAU0oqB,eAAiB,WAChC9jqB,KAAKkiqB,YAAYlhqB,SAAYhB,KAAKkiqB,YAAYW,gBAGnDx+pB,GAAarE,KAAKkiqB,YAAYlhqB,QAAShB,KAAKkiqB,YAAYW,iBAAkB,UAAW,eAEzFZ,EAAc7mqB,UAAU4qqB,eAAiB,WACrC,IAAI5D,EAASpiqB,KAAKoiqB,OAElB,OADApiqB,KAAKoiqB,QAAS,EACPA,GAAWnzb,SAAU,KAAMskF,UAAW,MAASvzT,KAAKuiqB,aAE/DN,EAAc7mqB,UAAU6qqB,eAAiB,WACrCjmqB,KAAKoiqB,QAAS,GAElBH,EAAc7mqB,UAAUyoqB,eAAiB,SAAU7wmB,EAAQ4jK,GACvD,IAAI72N,EAAQC,KACZ,GAAkC,IAA9BA,KAAKM,OAAOq4pB,eAAkD,IAA3B34pB,KAAKM,OAAOyypB,WAAnD,CAGA,IAAIjsoB,EACAgsa,GACA53U,KAAQ,WAAc,OAAUwojB,UAAW58oB,EAAKy1G,UAAWoniB,UAAU,IACrE1kpB,IAAO,WAAc,OAAUykpB,UAAW58oB,EAAKy1G,UAAWoniB,UAAU,IACpEt/R,SAAY,WAAc,OAAUq/R,UAAU,EAAMC,SAAyC,IAA/B5jqB,EAAMO,OAAOq4pB,gBAC3Er0R,QAAW,WAAc,OAAUo/R,UAAU,EAAOC,UAAU,KAElE,GAAM3wmB,KAAU8/X,EAAhB,CAGAhsa,EAAO8vM,EAAO0tc,UACd,IAAIvunB,EAAO+8Y,EAAQ9/X,KACnBhzD,KAAK6/X,WAAW9pV,EAAK2tnB,SAAU3tnB,EAAK4tnB,UACpC3jqB,KAAKwxD,aAAa1jB,OAAO9sB,QAAU41M,EAAO9oL,OAAO9sB,WAErDihpB,EAAc7mqB,UAAU2qqB,kBAAoB,SAAUllqB,GAClD,GAAMA,EAAEoiqB,OAASpiqB,EAAEga,UAAU0hH,WAAkC,UAArB17H,EAAEyiqB,QAAQtwmB,SAC5CnyD,EAAEP,OAAOwD,UAAUK,SAAS,iBAC5BtD,EAAEP,OAAOwD,UAAUK,SAAS,kBAAoBtD,EAAEP,OAAOwD,UAAUK,SAAS,mBAFpF,CAKAnE,KAAK8jqB,iBACL,IAAIlqgB,EAAW55J,KAAKwxD,aAAa00mB,aAAalmqB,KAAK+jqB,qBACnD/jqB,KAAKkkqB,kBAAkBtqgB,GACvB55J,KAAKkiqB,YAAYS,YAAa,IAE3BV,KAOPv0nB,GAAwB,WACxB,SAASA,IACL1tC,KAAK8tC,UACL9tC,KAAKghB,WAwDT,OAtDA0sB,EAAOtyC,UAAUiM,IAAM,SAAU4nO,EAAUD,EAAazwL,GACpD0wL,EAAW5iO,KAAKC,IAAI,EAAGD,KAAK+T,IAAI6uN,EAAUjvO,KAAK4sO,OAC/CoC,EAAc3iO,KAAKC,IAAI,EAAGD,KAAK+T,IAAI4uN,EAAahvO,KAAKqjE,UACrDrjE,KAAK8tC,OAAOmhM,GAAYjvO,KAAK8tC,OAAOmhM,OACpCjvO,KAAK8tC,OAAOmhM,GAAUD,GAAezwL,EAAQ,EAAI,GAErD7Q,EAAOtyC,UAAUsM,IAAM,SAAUunO,EAAUD,EAAa1/I,EAAWt8B,EAAQyvmB,GACvE,IAAIvwf,EAAM88D,EACV,GAAIC,EAAW3/I,EAAU,GAAK,EAC1B,OAAQ2/I,EAAUD,GAItB,GAFAC,EAAW5iO,KAAKC,IAAI,EAAGD,KAAK+T,IAAI6uN,EAAW3/I,EAAU,GAAItvF,KAAK4sO,OAC9DoC,EAAc3iO,KAAKC,IAAI,EAAGD,KAAK+T,IAAI4uN,EAAc1/I,EAAU,GAAItvF,KAAK8tC,OAAOmhM,GAAUzyO,OAAS,IAC1F01K,EAAM5iF,EAAU,GAAKtvF,KAAK8tC,OAAOmhM,GAAUzyO,OAAS,GAAKimqB,EAAUxzb,EAAUD,EAAah8K,GAC1F,OAAQi8K,EAAU/8D,GAEtB,IAAItzK,EAAQoB,KAAKpB,MAAMoB,KAAK8tC,OAAOmhM,GAAWD,EAAa1/I,GAAW,EAAMt8B,GAExEzqC,EAAM3rB,EAASqyO,EAAW,KAD9BD,EAAwB,OAAVpwO,EAAiBszK,EAAMtzK,GACYoB,KAAK8tC,QAItD,OAHImhM,IAAajvO,KAAK4sO,MAAmB,cAAX55K,IAC1Bs8B,EAAU,IAAM,GAEbtvF,KAAKmmqB,QAAQ59oB,KAASk6oB,EAAUxzb,EAAUD,EAAah8K,GAC1DhzD,KAAK0H,IAAIunO,EAAU/8D,EAAK5iF,EAAWt8B,EAAQyvmB,IAAcxzb,EAAUD,IAE3EthM,EAAOtyC,UAAUwD,MAAQ,SAAUm1U,EAAQjiU,EAAOw9E,EAAWyE,EAAQ/gC,GACjE,OAAMlhD,EAAQ,GAAKA,IAAUiiU,EAAOv3U,SAAWwD,KAAKmmqB,QAAQpyV,EAAOjiU,KAChD,YAAXkhD,GAAmC,cAAXA,IAA6B+gR,EAAOp1S,KAAK,SAAU6nI,GAAK,OAAa,IAANA,IACpF,KAEHxmK,KAAKmmqB,QAAQpyV,EAAOjiU,IACxB9R,KAAKpB,MAAMm1U,GAA+E,KAArE,UAAW,YAAa,UAAW,aAAax1U,QAAQy0D,GAAkB+gC,EAAS,IAAMjiF,EAAQA,EAAQw9E,EAAU,GAAIA,GAAW,EAAOt8B,GAD5HlhD,GAG1C47B,EAAOtyC,UAAUqK,OAAS,SAAUwpO,EAAUD,GAC1CC,EAAW5iO,KAAKC,IAAI,EAAGD,KAAK+T,IAAI6uN,EAAUjvO,KAAK4sO,OAC/CoC,EAAc3iO,KAAKC,IAAI,EAAGD,KAAK+T,IAAI4uN,EAAahvO,KAAK8tC,OAAOmhM,GAAUzyO,OAAS,IAC/EwD,KAAKghB,SAAWiuN,EAAUD,IAE9BthM,EAAOtyC,UAAUmkF,SAAW,SAAUqtJ,EAAMlnO,GACxC,IAAI3F,EAAQC,KAUZ,OATAA,KAAK4sO,KAAOA,EAAKpwO,OAAS,EAC1BwD,KAAK8tC,UACL8+L,EAAKxtO,QAAQ,SAAUsmE,EAAK0gmB,GACxB,IAAIx/lB,EAAQlB,EAAIkB,MAAM18B,OAAO,SAAUtR,GAAK,OAAuB,IAAhBA,EAAEmynB,YACrDhrpB,EAAMsjE,QAAUh3D,KAAKC,IAAIs6D,EAAMpqE,OAAS,EAAmB,EAAhBuD,EAAMsjE,SACjDuD,EAAMxnE,QAAQ,SAAU2oE,EAAMs+lB,GAC1BtmqB,EAAMsH,IAAI++pB,EAAQC,EAAQ3gqB,EAASggE,EAAKqC,QAGzC/nE,KAAK8tC,QAEhBJ,EAAOtyC,UAAU+qqB,QAAU,SAAUppqB,GACjC,OAAiB,IAAVA,QAAyB7B,IAAV6B,GAEnB2wC,KAMPi3nB,GAA8B,WAC9B,SAASA,EAAarkqB,GAClB,IAAIP,EAAQC,KACZA,KAAK8tC,OAAS,IAAIJ,GAClB1tC,KAAKM,OAASA,EACdN,KAAKsmqB,YACDC,YAAe,EAAG,GAClB7rjB,KAAQ,EAAG,GACX8rjB,WAAc,GAAI,GAClBx6c,UAAa,GAAI,GACjBy6c,UAAa,EAAG,GAChBC,WAAc,EAAG,GACjBjiS,UAAa,EAAG,GAChBD,WAAc,EAAG,GACjBmiS,YAAe,EAAG,GAClBC,WAAc,GAAI,GAClBjsjB,OAAU,EAAG,GACb+pR,aAAgB,EAAG,IAEvB1kY,KAAK6mqB,aAAe,SAAU7zmB,GAO1B,OALIkoD,MAASn7G,EAAM+tC,OAAO9sB,QAAQ,IAAK,EAAG,EAAG,GACzC/B,KAAQlf,EAAM+tC,OAAO9sB,QAAQ,GAAIjhB,EAAM+tC,OAAOu1B,QAAU,EAAG,GAAI,GAC/DghU,UAAa,GAAI,EAAG,EAAG,GACvBC,SAAYvkY,EAAM+tC,OAAO8+L,KAAM7sO,EAAM+tC,OAAOu1B,QAAU,EAAG,GAAI,IAEtDrQ,IAAW,MAiK9B,OA9JA2xmB,EAAavpqB,UAAUyxR,SAAW,WAC9B,OAAQ7sR,KAAKM,OAAOq4pB,cAChB34pB,KAAKM,OAAOkxD,aAAa7uD,cAAc,8BACvC3C,KAAKM,OAAOghqB,mBAEpBqD,EAAavpqB,UAAUknX,WAAa,SAAUzhX,GAC1C,IAAIyuF,EAAYtvF,KAAKsmqB,WAAWzlqB,EAAEmyD,QAC9BhyC,EAAUhhB,KAAK8mqB,qBAAqBjmqB,EAAEmyD,OAAQs8B,EAAWzuF,EAAEmyD,UAAUhzD,KAAKsmqB,WAAYzlqB,GAC1F,GAAKmgB,EAGL,SAAM,MAAO,YAAYziB,QAAQsC,EAAEmyD,SAAW,GAAKhzD,KAAK8tC,OAAO9sB,aAAe9T,aAAe8T,EAAQ9T,YAC7F8T,EAAQ9T,cAAgBlN,KAAK8tC,OAAO8+L,KAAM5sO,KAAK8tC,OAAOu1B,SAASn2D,YAC/D8T,EAAQ9T,cAAgB,EAAG,GAAGA,kBAItClN,KAAK8tC,OAAOroC,OAAOub,EAAQ,GAAIA,EAAQ,KAE3C2jpB,EAAavpqB,UAAU0rqB,qBAAuB,SAAU9zmB,EAAQs8B,EAAWy3kB,EAAWlmqB,GAElF,QADkB,IAAdyuF,IAAwBA,GAAa,EAAG,KACvCy3kB,IAAc/mqB,KAAK6mqB,aAAa7zmB,GACjC,OAAO,KAEX,IAAKhzD,KAAKgnqB,kBAAkBnmqB,GACxB,OAAOb,KAAK8tC,OAAO9sB,QAEvB,IAAIne,EAAK7C,KAAK6mqB,aAAa7zmB,IAAWhzD,KAAK8tC,OAAO9sB,QAAQxG,OAAO80E,GAAY2/I,EAAWpsO,EAAG,GAAI0wT,EAAY1wT,EAAG,GAAIokqB,EAAKpkqB,EAAG,GAAIqkqB,EAAKrkqB,EAAG,GAEtI,OADc7C,KAAK8tC,OAAOpmC,IAAIunO,EAAUskF,GAAY0zW,EAAIC,GAAKl0mB,EAAQhzD,KAAKyiqB,cAG9EkC,EAAavpqB,UAAU0nqB,QAAU,SAAUjiqB,EAAG+la,GAC1C,IAAIz/Z,EAAStG,EAAEsG,OAOf,GANAA,EAAUA,EAAOrD,UAAUK,SAAS,aAAegD,EAAStB,EAAQsB,EAAQ,MAC5EA,EAASA,IAAkBtB,EAAQhF,EAAEsG,OAAQ,2BACtCtB,EAAQhF,EAAEsG,OAAQ,yBACzBA,EAAStB,EAAQhF,EAAEsG,OAAQ,oBACvB1J,EAAkBoI,EAAQA,EAAQhF,EAAEsG,OAAQ,WAAY,oBAAsB,KAAgBA,IAClGA,EAASA,GAAUtB,EAAQsB,EAAQ,SAASrD,UAAUK,SAAS,WAAagD,EAAS,MAEjF,OAAO,EAEX,IAAItE,GAAMsE,EAAOkN,cAAc46N,SAAU9nO,EAAOosT,WAAYtkF,EAAWpsO,EAAG,GAAI0wT,EAAY1wT,EAAG,GACzFoB,EAAKjE,KAAK8tC,OAAO9sB,QAASmmpB,EAAYljqB,EAAG,GAAImjqB,EAAanjqB,EAAG,GAC7DskB,EAAM3rB,EAASqyO,EAAW,IAAMskF,EAAWvzT,KAAK8tC,OAAOA,QAC3D,GAAI9tC,KAAK8tC,OAAOq4nB,QAAQ59oB,KAAUq+Y,GAASugQ,IAAcl4b,GAAYm4b,IAAe7zW,EAChF,OAAO,EAEXvzT,KAAK8tC,OAAOroC,OAAOwpO,EAAUskF,IAEjCoxW,EAAavpqB,UAAUwnqB,aAAe,WAClC,IAAI97oB,KACAjkB,EAAK7C,KAAK8tC,OAAO9sB,QAAS/c,EAAKpB,EAAG,GAAIosO,OAAkB,IAAPhrO,EAAgB,EAAIA,EAAIwG,EAAK5H,EAAG,GAAI0wT,OAAmB,IAAP9oT,EAAgB,EAAIA,EAGzH,OAFAzK,KAAK8tC,OAAO9sB,SAAWiuN,EAAUskF,GACjCzsS,EAAK9lB,QAAWvD,EAAkBuC,KAAK6sR,WAAWjgD,KAAKqC,IAA+D,KAAlDjvO,KAAK6sR,WAAWjgD,KAAKqC,GAAUroK,MAAM2sP,GACpGzsS,EAAK9lB,SAGV8lB,EAAK+7oB,eAAkB/7oB,EAAK9lB,QAAQ8C,UAAUK,SAAS,kBAAqB2iB,EAAK9lB,QAAQ8C,UAAUK,SAAS,gBACpE2iB,EAAK9lB,QAAvChB,KAAKkmqB,aAAap/oB,EAAK9lB,SAC7B8lB,EAAKg3gB,SAAU,EACfh3gB,EAAKpnB,IAAMonB,EAAK9lB,QAAQqT,cAAcxB,aAAa,YAC5CiU,GANIA,GAQf69oB,EAAavpqB,UAAU8qqB,aAAe,SAAUllqB,GAC5C,IAAI2/D,EAAQ,gGACR3gE,KAAKM,OAAOqxnB,SACZhxjB,EAAQ,0EAEZ,IAAItgE,KAAWgB,MAAMC,KAAKN,EAAQQ,iBAAiBm/D,IAKnD,OAAOtgE,EAAM7D,OAAS6D,EAAM,GAAKW,GAErC2jqB,EAAavpqB,UAAUsK,SAAW,SAAUggE,EAAKqC,GAC7C,IAAI6S,GAAS6wjB,GAAS8kB,OAAQ9kB,GAASmlB,aAAcnlB,GAASmkB,eAAgBnkB,GAASikB,cACvF,OAAShqlB,EAAIknlB,WAAa7klB,EAAKzwC,UAAYywC,EAAKmmlB,YAAcnmlB,EAAKwvS,aAC3D7xS,EAAIknlB,WAAa7klB,EAAK2rkB,WAAajI,GAASyhB,eAC3CxnlB,EAAIknlB,WAAahykB,EAAMr8E,QAAQwpE,EAAK2rkB,WAAa,GAClD3rkB,EAAK/F,QAA+B,aAArB+F,EAAK/F,OAAOt7D,MAC3BqhE,EAAK2rkB,WAAajI,GAAS2hB,kBACb,WAAb1nlB,EAAIm0kB,MAAqBn0kB,EAAI2hmB,UAE1C1C,EAAavpqB,UAAUqoqB,KAAO,SAAUzwmB,EAAQhyC,GAC5C,IAAIsmpB,EAAatnqB,KAAKM,OAAOq4pB,cAAgB,IAC5B,cAAX3lmB,GAAqC,aAAXA,IAAyC,IAAfhyC,EAAQ,GAC9DumpB,EAAyC,IAA3BvnqB,KAAKM,OAAOyypB,YAA+B,eAAX//lB,EAMlD,OAJIjd,MAAmB,YAAXid,GAAwBu0mB,IAA+B,IAAfvmpB,EAAQ,IAAasmpB,EACrE5D,UAAsB,YAAX1wmB,GAAwBu0mB,IAA+B,IAAfvmpB,EAAQ,GAC3D2ipB,SAAU2D,IAIlB3C,EAAavpqB,UAAUwoqB,eAAiB,SAAUpxiB,EAAUz8E,EAAM6gL,EAAQ5jK,QACrD,IAAbw/D,IAAuBA,MAC3B,IAAIxxG,KASJ,MARe,eAAXgyC,GAAsC,QAAXA,GAC3BhyC,EAAQ,GAAKwxG,EAAS,GACtBxxG,EAAQ,IAAM,GAEE,cAAXgyC,GAAqC,UAAXA,IAC/BhyC,EAAQ,IAAM,EACdA,EAAQ,GAAKwxG,EAAS,IAEnBxxG,GAEX2jpB,EAAavpqB,UAAUoypB,aAAe,SAAU5gb,EAAM46b,GAClD,IAAI3kqB,EACAirC,EAAS05nB,EAAU15nB,OAAQk3nB,EAAkBwC,EAAUxC,gBACvDnjqB,EAAMmjqB,EAAgBl3nB,OAAOA,OAAOtxC,OACpCirqB,EAAaznqB,KAAKM,OAAOipmB,gBAAsD,cAApCvpmB,KAAKM,OAAOkhpB,eAAe96oB,KAAuB7E,EAAM,EAAIA,EAC3GmjqB,EAAgBl3nB,OAAOA,OAASk3nB,EAAgBl3nB,OAAOA,OAAOzsC,MAAM,EAAGomqB,GACvEzC,EAAgBl3nB,OAAO8+L,KAAO66b,GAC7B5kqB,EAAKmiqB,EAAgBl3nB,OAAOA,QAAQtpC,KAAKlJ,MAAMuH,EAAIirC,GACpDk3nB,EAAgBl3nB,OAAO8+L,MAAQ9+L,EAAOtxC,QAE1CmoqB,EAAavpqB,UAAUkpqB,QAAU,SAAUzjqB,GACvC,IAAIimB,EAAO9mB,KAAK4iqB,eACZ//pB,EAAK7C,KAAK8tC,OAAO9sB,QAASolpB,EAASvjqB,EAAG,GAAIwjqB,EAASxjqB,EAAG,GACtD6kqB,EAAS5gpB,EAAK9lB,QAAQ8C,UAAUK,SAAS,aACzCwjqB,EAAeD,GAAW7mqB,GAAkB,UAAbA,EAAEmyD,SAAuBlsC,EAAK9lB,QAAQ8C,UAAUK,SAAS,wBACrF2iB,EAAK9lB,QAAQ8C,UAAUK,SAAS,sBACnCF,GAAMoI,KAAK+T,IAAIwU,SAAS9N,EAAK9lB,QAAQqT,cAAcxB,aAAa,iBAAkB,IAAKuzpB,GACvF/5pB,KAAK+T,IAAIwU,SAAS9N,EAAK9lB,QAAQ6R,aAAa,iBAAkB,IAAKwzpB,IACvE,OAAS9piB,WAAW,EAAM2xhB,WAAYwZ,EAAQ3mY,SAD8C98R,EAAG,GAAgBA,EAAG,IACpC0jqB,aAAcA,IAEhGhD,EAAavpqB,UAAUqnqB,UAAY,WAC/B,IAAIr9lB,EAAQplE,KAAK6sR,WACjB,OAAO,SAAU59C,EAAUskF,EAAWvgQ,GAClC,IAAI+U,EAAO3C,EAAMwnK,KAAKqC,GAAUroK,MAAM2sP,GACtC,MAAe,UAAXvgQ,GAAiC,eAAXA,EACf+U,EAAKjkE,UAAUK,SAAS,eAEnB,YAAX6uD,GAAmC,cAAXA,IAA2B+U,EAAKjkE,UAAUK,SAAS,eAG5D,YAAX6uD,GAAmC,cAAXA,GACiB,IAAvC+U,EAAKn8D,wBAAwBoK,QAKhD2upB,EAAavpqB,UAAU4rqB,kBAAoB,SAAUnmqB,GACjD,IAAIgC,EAAK7C,KAAK8tC,OAAO9sB,QAAS/c,EAAKpB,EAAG,GAAIujqB,OAAgB,IAAPniqB,GAAiB,EAAIA,EAAIwG,EAAK5H,EAAG,GAAIwjqB,OAAgB,IAAP57pB,GAAiB,EAAIA,EACtH,GAAI27pB,EAAS,GAAKC,EAAS,EACvB,OAAO,EAEX,IAAIt+lB,EAAOnrE,EAASwpqB,EAAS,UAAYC,EAAQrmqB,KAAK6sR,WAAWjgD,MACjE,OAAK7kK,IAGe,UAAblnE,EAAEmyD,QAAmC,eAAbnyD,EAAEmyD,QAC7B+U,EAAKjkE,UAAUK,SAAS,eAAiB4jE,EAAKjkE,UAAUK,SAAS,mBACzD4jE,EAAKjkE,UAAUK,SAAS,oBAAsB4jE,EAAKjkE,UAAUK,SAAS,kBAE/EwgqB,KAMPE,GAA6B,SAAUvzkB,GAEvC,SAASuzkB,EAAYvkqB,GACjB,OAAOgxF,EAAOhwF,KAAKtB,KAAMM,IAAWN,KAuFxC,OAzFAywF,GAAUo0kB,EAAavzkB,GAIvBuzkB,EAAYzpqB,UAAUyxR,SAAW,WAC7B,OAAQ7sR,KAAKM,OAAOixpB,mBAChBvxpB,KAAKM,OAAO0ypB,mBAAmBrwpB,cAAc,6BAC7C3C,KAAKM,OAAO2zpB,kBAEpB4Q,EAAYzpqB,UAAU0nqB,QAAU,SAAUjiqB,GACtC,IAAIsG,EAAStG,EAAEsG,OAMf,IALAA,EAAUA,EAAOrD,UAAUK,SAAS,gBAAkBgD,EAAStB,EAAQsB,EAAQ,QACrC,IAA3BnH,KAAKM,OAAOyypB,aACvB5rpB,EAAUtG,EAAEsG,OAAOrD,UAAUK,SAAS,aAAetD,EAAEsG,OACnDtB,EAAQhF,EAAEsG,OAAQ,OAErBA,EAAL,CAGA,IAAItE,GAAMsE,EAAOkN,cAAc46N,SAAU9nO,EAAOosT,WAC5ChrS,EAAM3rB,EAD6DiG,EAAG,GAC5C,IAD4DA,EAAG,GAC9C7C,KAAK8tC,OAAOA,QAC3D,GAAI9tC,KAAK8tC,OAAOq4nB,QAAQ59oB,GACpB,OAAO,EAEXvoB,KAAK8tC,OAAOroC,OAAO0B,EAAOkN,cAAc46N,SAAU9nO,EAAOosT,aAE7DsxW,EAAYzpqB,UAAUwnqB,aAAe,WACjC,IAAI97oB,KACAjkB,EAAK7C,KAAK8tC,OAAO9sB,QAAS/c,EAAKpB,EAAG,GAAIosO,OAAkB,IAAPhrO,EAAgB,EAAIA,EAAIwG,EAAK5H,EAAG,GAAI0wT,OAAmB,IAAP9oT,EAAgB,EAAIA,EAIzH,OAHAqc,EAAK9lB,QAAUhB,KAAK6sR,WAAWjgD,KAAKqC,GAAUroK,MAAM2sP,GACpDzsS,EAAK+7oB,eAAiB7iqB,KAAKkmqB,aAAap/oB,EAAK9lB,SAC7C8lB,EAAKg3gB,SAAWh3gB,EAAK9lB,QAAQ8C,UAAUK,SAAS,mBACzC2iB,GAEX+9oB,EAAYzpqB,UAAUsK,SAAW,SAAUggE,EAAKqC,GAC5C,OAAQA,EAAKzwC,eAAkCp8B,IAAtB6sE,EAAK/F,OAAOD,OAAuBgG,EAAKwvS,aAAqC,aAArBxvS,EAAK/F,OAAOt7D,MACzFqhE,EAAK2rkB,WAAajI,GAASmtB,eAEnCiM,EAAYzpqB,UAAUqoqB,KAAO,SAAUzwmB,EAAQhyC,GAC3C,IAAIsmpB,EAAatnqB,KAAKM,OAAOq4pB,cAAgB,IAC7B,cAAX3lmB,GAAqC,aAAXA,IAAyC,IAAfhyC,EAAQ,GAC7DumpB,EAAyC,IAA3BvnqB,KAAKM,OAAOyypB,YAA+B,UAAX//lB,EAClD,OACIjd,MAAmB,cAAXid,GAA0Bu0mB,IAAgBvmpB,EAAQ,KAAOhhB,KAAK8tC,OAAOA,OAAOtxC,OAAS,GACzF8qqB,EACJ5D,SAAU4D,EACV3D,SAAU2D,IAGlBzC,EAAYzpqB,UAAUwoqB,eAAiB,SAAUpxiB,EAAUz8E,EAAM6gL,EAAQ5jK,QACpD,IAAbw/D,IAAuBA,MAC3B,IAAIo1iB,KASJ,MARe,YAAX50mB,GAAmC,eAAXA,GACxB40mB,EAAS,GAAK5nqB,KAAK8tC,OAAOA,OAAOtxC,OACjCorqB,EAAS,GAAKp1iB,EAAS,IAEP,eAAXx/D,GAAsC,QAAXA,IAChC40mB,EAAS,GAAKp1iB,EAAS,GACvBo1iB,EAAS,IAAM,GAEZA,GAEX/C,EAAYzpqB,UAAUoypB,aAAe,SAAU5gb,GAC3C,IAAI7sO,EAAQC,KACRxD,EAASwD,KAAK8tC,OAAOA,OAAOtxC,OAC5BwD,KAAKM,OAAOipmB,gBAAsD,cAApCvpmB,KAAKM,OAAOkhpB,eAAe96oB,OACzD1G,KAAK8tC,OAAO8+L,OAAS5sO,KAAK8tC,OAAO8+L,KACjCA,EAAK,GAAGhmK,MAAMxnE,QAAQ,SAAU2oE,EAAMs+lB,GAClC,OAAOtmqB,EAAM+tC,OAAOzmC,IAAI7K,EAAQ6pqB,EAAQt+lB,EAAKzwC,UAA0C,IAA/BywC,EAAK/F,OAAOuniB,oBAIhFs7D,EAAYzpqB,UAAUkpqB,QAAU,SAAUzjqB,GACtC,OAAOnC,EAAO4yF,EAAOl2F,UAAUkpqB,QAAQhjqB,KAAKtB,KAAMa,IAAM07H,WAAW,EAAO7vG,UAAU,KAExFm4oB,EAAYzpqB,UAAUqnqB,UAAY,WAC9B,OAAO,WAAc,OAAO,IAEhCoC,EAAYzpqB,UAAU4rqB,kBAAoB,SAAUnmqB,GAChD,IAAIgC,EAAK7C,KAAK8tC,OAAO9sB,QAASiuN,EAAWpsO,EAAG,GAAImsO,EAAcnsO,EAAG,GACjE,GAAIosO,EAAW,GAAKD,EAAc,EAC9B,OAAO,EAEX,IAAIjnK,EAAOnrE,EAASqyO,EAAW,UAAYD,EAAahvO,KAAK6sR,WAAWjgD,MACxE,OAAK7kK,IAGe,UAAblnE,EAAEmyD,QAAmC,iBAAbnyD,EAAEmyD,SAA6B+U,EAAKjkE,UAAUK,SAAS,kBAEnF0gqB,GACTF,IAEED,GAAmC,SAAUpzkB,GAE7C,SAASozkB,IACL,OAAkB,OAAXpzkB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KA2B/D,OA7BAywF,GAAUi0kB,EAAmBpzkB,GAI7BozkB,EAAkBtpqB,UAAUyxR,SAAW,WACnC,OAAO7sR,KAAKM,OAAOkxD,aAAa7uD,cAAc,8BAElD+hqB,EAAkBtpqB,UAAUqoqB,KAAO,SAAUzwmB,EAAQhyC,GACjD,IAAIumpB,EAAyC,IAA3BvnqB,KAAKM,OAAOyypB,YAA+B,eAAX//lB,EAClD,OACIjd,MAAkB,YAAXid,GAAwBu0mB,IAA+B,IAAfvmpB,EAAQ,KACnC,QAAXgyC,GAA+B,eAAXA,IAA4BhyC,EAAQ,KAAOhhB,KAAK8tC,OAAOu1B,QACpFqgmB,UAAsB,YAAX1wmB,GAAwBu0mB,IAA+B,IAAfvmpB,EAAQ,GAC3D2ipB,UAAsB,YAAX3wmB,GAAwBu0mB,IAA+B,IAAfvmpB,EAAQ,KAGnE0jpB,EAAkBtpqB,UAAUwoqB,eAAiB,SAAUpxiB,EAAUz8E,EAAM6gL,EAAQ5jK,QAC1D,IAAbw/D,IAAuBA,MAC3B,IAAIq1iB,KASJ,MARe,cAAX70mB,GAAqC,aAAXA,GAC1B60mB,EAAS,GAAKr1iB,EAAS,GACvBq1iB,EAAS,GAAKjxc,EAAO9oL,OAAOu1B,QAAU,GAEtB,cAAXrQ,GAAqC,UAAXA,IAC/B60mB,EAAS,IAAM,EACfA,EAAS,GAAKr1iB,EAAS,IAEpBq1iB,GAEJnD,GACTC,IAEEC,GAAkC,SAAUtzkB,GAE5C,SAASszkB,IACL,OAAkB,OAAXtzkB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KA2B/D,OA7BAywF,GAAUm0kB,EAAkBtzkB,GAI5BszkB,EAAiBxpqB,UAAUqoqB,KAAO,SAAUzwmB,EAAQhyC,GAChD,IAAIumpB,EAAyC,IAA3BvnqB,KAAKM,OAAOyypB,YAA+B,UAAX//lB,EAClD,OACIjd,MAAkB,cAAXid,GAA0Bu0mB,IAAgBvmpB,EAAQ,KAAOhhB,KAAK8tC,OAAOA,OAAOtxC,OAAS,IACxE,eAAXw2D,GAAsC,QAAXA,IAAqBhyC,EAAQ,KAAOhhB,KAAK8tC,OAAOu1B,QACpFqgmB,UAAsB,eAAX1wmB,GAAsC,QAAXA,IAAqBhyC,EAAQ,KAAOhhB,KAAK8tC,OAAOu1B,QACtFsgmB,UAAsB,cAAX3wmB,GAA0Bu0mB,IAAgBvmpB,EAAQ,KAAOhhB,KAAK8tC,OAAOA,OAAOtxC,OAAS,IAGxGooqB,EAAiBxpqB,UAAUyxR,SAAW,WAClC,OAAQ7sR,KAAKM,OAAO0ypB,mBAAmBrwpB,cAAc,6BAEzDiiqB,EAAiBxpqB,UAAUwoqB,eAAiB,SAAUpxiB,EAAUz8E,EAAM6gL,EAAQ5jK,QACzD,IAAbw/D,IAAuBA,MAC3B,IAAIs1iB,KASJ,MARe,cAAX90mB,GAAqC,aAAXA,GAC1B80mB,EAAS,GAAKt1iB,EAAS,GACvBs1iB,EAAS,GAAKlxc,EAAO9oL,OAAOu1B,QAAU,GAEtB,YAAXrQ,GAAmC,eAAXA,IAC7B80mB,EAAS,GAAK9nqB,KAAK8tC,OAAOA,OAAOtxC,OACjCsrqB,EAAS,GAAKt1iB,EAAS,IAEpBs1iB,GAEJlD,GACTC,IAGEkD,GAA2B,WAC3B,SAASA,EAAUp6D,GACf3tmB,KAAK2tmB,UAAYA,EAoBrB,OAlBAo6D,EAAU3sqB,UAAU4sqB,YAAc,SAAU/nqB,GACxCA,EAAKkH,OAAOkN,cAAcvQ,UAAUM,IAAI,kBAE5C2jqB,EAAU3sqB,UAAU6sqB,WAAa,SAAUhoqB,GACvCA,EAAKkH,OAAOkN,cAAcvQ,UAAUS,OAAO,kBAE/CwjqB,EAAU3sqB,UAAU+iiB,UAAY,WACxBn+hB,KAAK2tmB,YACLpomB,GAAanB,IAAIpE,KAAK2tmB,UAAW,QAAS3tmB,KAAKgoqB,YAAahoqB,MAC5DuF,GAAanB,IAAIpE,KAAK2tmB,UAAW,OAAQ3tmB,KAAKioqB,WAAYjoqB,QAGlE+nqB,EAAU3sqB,UAAU4liB,YAAc,WAC1BhhiB,KAAK2tmB,YACLpomB,GAAahB,OAAOvE,KAAK2tmB,UAAW,QAAS3tmB,KAAKgoqB,aAClDziqB,GAAahB,OAAOvE,KAAK2tmB,UAAW,OAAQ3tmB,KAAKioqB,cAGlDF,KClzBPt3kB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GAM5DkgZ,GAA8B,SAAU/tV,GAExC,SAAS+tV,IACL,OAAkB,OAAX/tV,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAuB/D,OAzBAywF,GAAU4uV,EAAc/tV,GAIxBN,IACI9pF,EAAS,KACVm4a,EAAajkb,UAAW,gBAAY,GACvC41F,IACI9pF,EAAS,IACVm4a,EAAajkb,UAAW,iBAAa,GACxC41F,IACI9pF,EAAS,IACVm4a,EAAajkb,UAAW,mBAAe,GAC1C41F,IACI9pF,KACDm4a,EAAajkb,UAAW,yBAAqB,GAChD41F,IACI9pF,GAAS,IACVm4a,EAAajkb,UAAW,yBAAqB,GAChD41F,IACI9pF,GAAS,IACVm4a,EAAajkb,UAAW,iBAAa,GACxC41F,IACI9pF,EAAS,OACVm4a,EAAajkb,UAAW,gBAAY,GAChCikb,GACTj7W,IClDE8jmB,GAAsC,WAStC,OARAA,GAAW5pqB,OAAO6pqB,QAAU,SAAStnnB,GACjC,IAAK,IAAIxU,EAAGnwC,EAAI,EAAGsoK,EAAIxlK,UAAUxC,OAAQN,EAAIsoK,EAAGtoK,IAAK,CACjDmwC,EAAIrtC,UAAU9C,GACd,IAAK,IAAI20F,KAAKxkD,EAAO/tC,OAAOlD,UAAUuL,eAAerF,KAAK+qC,EAAGwkD,KACzDhwC,EAAEgwC,GAAKxkD,EAAEwkD,IAEjB,OAAOhwC,IAEKvlD,MAAM0E,KAAMhB,YAa5Bw4V,GAA2B,WAK3B,SAASA,EAAUl3V,EAAQu5iB,EAAmB+/G,GAK1C55pB,KAAKooqB,sBAILpoqB,KAAKqoqB,0BAILroqB,KAAKsoqB,mBACLtoqB,KAAKyqN,cAAe,EACpBzqN,KAAKuoqB,qBAAsB,EAC3BvoqB,KAAKwoqB,oBAAqB,EAC1BxoqB,KAAKyoqB,wBAAyB,EAC9BzoqB,KAAK0oqB,oBACL1oqB,KAAKo/pB,kBAAoB,EACzBp/pB,KAAK2oqB,gBACL3oqB,KAAK4oqB,gBAAiB,EACtB5oqB,KAAK6oqB,uBACL7oqB,KAAK8oqB,kBAAmB,EACxB9oqB,KAAK+oqB,qBAAsB,EAC3B/oqB,KAAKgpqB,WAAY,EACjBhpqB,KAAKM,OAASA,EACdN,KAAK65iB,kBAAoBA,EACzB75iB,KAAKipqB,QAAUrP,EAAQtzlB,WAAW,mBAClCtmE,KAAKkC,MAAQ03pB,EAAQtzlB,WAAW,SAChCtmE,KAAKvD,mBA0yDT,OAxyDA+6V,EAAUp8V,UAAU8tqB,oBAAsB,WACtC3jqB,GAAanB,IAAIpE,KAAKM,OAAOkxD,aAAc,YAAaxxD,KAAKsmH,iBAAkBtmH,OAOnFw3V,EAAUp8V,UAAU+tqB,cAAgB,SAAUlpqB,EAAMyG,GAChD1G,KAAKM,OAAOqmB,QAAQjgB,EAAM1G,KAAKopqB,YAAYnpqB,KAE/Cu3V,EAAUp8V,UAAUguqB,YAAc,SAAUnpqB,GACxC,GAAIA,EAAKszT,WAAatzT,EAAKgvO,SAAU,CACjC,IAAIo6b,EAASrpqB,KAAKspqB,UAAU7rqB,EAAkBwC,EAAKgvO,UAAYxxO,EAAkBwC,EAAKszT,WAClFvzT,KAAK2iQ,aAAe1iQ,EAAKszT,UAAUtkF,SAAWhvO,EAAKgvO,UACvDhvO,EAAK6nE,eAAiBuhmB,EAAOvhmB,eAEjC,OAAO7nE,GAOXu3V,EAAUp8V,UAAU6pmB,iBAAmB,SAAUhlmB,EAAMyG,GACnD1G,KAAKM,OAAOqmB,QAAQjgB,EAAM1G,KAAKopqB,YAAYnpqB,KAM/Cu3V,EAAUp8V,UAAU2mC,cAAgB,WAChC,MAAO,aAOXy1T,EAAUp8V,UAAUiX,QAAU,WAC1B,IAAIk3pB,EAAcvpqB,KAAKM,OAAOU,QACzBuoqB,IAAiBA,EAAY5mqB,cAAc,kBAAqB4mqB,EAAY5mqB,cAAc,qBAG/F3C,KAAKwpqB,YACLxpqB,KAAK6jb,iBACL7jb,KAAKrD,sBACL4I,GAAahB,OAAOvE,KAAKM,OAAOkxD,aAAc,YAAaxxD,KAAKsmH,oBAEpEkxO,EAAUp8V,UAAUquqB,UAAY,WAC5B,OAA0C,WAAlCzpqB,KAAKM,OAAO2lE,aAAa5lC,MAAwD,UAAlCrgC,KAAKM,OAAO2lE,aAAa5lC,MAC5ErgC,KAAKM,OAAOopqB,WAAWC,UAAY3pqB,KAAKM,OAAOopqB,WAAWC,QAAQ5ohB,aAClE/gJ,KAAKM,OAAOqxnB,SAAW3xnB,KAAKM,OAAOspqB,oBAE3CpyU,EAAUp8V,UAAUyuqB,sBAAwB,SAAU/3pB,GAClD,IAAIy2oB,EAAOvopB,KAAKM,OAChB,OAAIiopB,EAAKgJ,mBACEhJ,EAAKmN,qBAAqB5jpB,GAE9B,MAEX0lV,EAAUp8V,UAAU0uqB,6BAA+B,WAC/C,IAAIvhB,EAAOvopB,KAAKM,OAGhB,GAA+B,UAA3BiopB,EAAKtilB,aAAa5lC,KAAkB,CACpC,IAAI0poB,EAAiBtnmB,GAAcziE,KAAKM,OAAOw+pB,yBAC/CiL,EAAiB/pqB,KAAKM,OAAOopqB,WAAWM,kBAAuB,aAAExvpB,OAAOuvpB,GAGxE,IAAK,IAFDr/d,EAAiB1qM,KAAKM,OAAOopqB,WAAWM,kBAAyB,eACjEC,EAAajqqB,KAAKM,OAAO6ppB,0BAA0B,GAC9CjupB,EAAI,EAAGA,EAAKwuM,EAAqB,OAAGxuM,IACzC,IAAK,IAAIwnB,EAAI,EAAGA,EAAIqmpB,EAAevtqB,OAAQknB,IACvC,GAAIgnL,EAAexuM,GAAG+tqB,KAAgBF,EAAermpB,GAAGumpB,GAAa,CACjEF,EAAephpB,OAAOjF,EAAG,GACzB,MAIZ,OAAOqmpB,EAGP,OAAOxhB,EAAKuW,yBASpBtnU,EAAUp8V,UAAUm+iB,UAAY,SAAUzniB,EAAOizG,GAC7C,IAAIwjiB,EAAOvopB,KAAKM,OACZu7jB,EAAc0sF,EAAKgN,cAAczjpB,GACjCo4pB,EAAqBlqqB,KAAK6pqB,sBAAsB/3pB,GAChDq4pB,EAAanqqB,KAAK8pqB,+BAA+Bh4pB,GAIrD,GAHIy2oB,EAAKrtc,sBAAwBqtc,EAAK/O,eAAiB+O,EAAKU,cAAc5llB,QAAQ7mE,QAAUq/jB,IACxFsuG,EAAa5hB,EAAK6hB,oBAAoBvuG,EAAYhpjB,aAAa,aAAatW,MAE3EyD,KAAKqqqB,aAAgBxuG,IAAe77jB,KAAKypqB,YAA9C,CAMA,IAIIxpqB,EAJgB47jB,EAAYlic,aAAa,kBAC7C5U,EAAYA,IACP/kH,KAAKooqB,mBAAmB5rqB,SACe,IAAnCwD,KAAKooqB,mBAAmB5rqB,QAAgBsV,IAAU9R,KAAKooqB,mBAAmB,IAF5DrjjB,KAMnB9kH,GACI1D,KAAM4tqB,EAAYl7b,SAAUn9N,EAAOw4pB,cAAetqqB,KAAKwoqB,mBACvD+B,eAAgBvqqB,KAAKuoqB,oBAAqB7imB,IAAKm2f,EAC/CntD,YAAa65I,EAAKgN,cAAcv1pB,KAAKwqqB,cAAezhJ,iBAAkB/ohB,KAAKwqqB,aAAcrjqB,OAAQnH,KAAKmH,OAAQyyB,QAAQ,GAE1H35B,EAAOD,KAAKyqqB,eAAexqqB,EAAMiqqB,GACjClqqB,KAAKmpqB,cAAclpqB,EAAMyqqB,MAExBjtqB,EAAkBwC,KAAuB,IAAdA,EAAQ,UAGnCD,KAAK65iB,kBAAkB6gH,kBACxB16pB,KAAK2qqB,WAEJ5ljB,IACD/kH,KAAK4qqB,mBAAmB/uG,EAAa/pjB,GACjCy2oB,EAAKgJ,oBACLvxpB,KAAK4qqB,mBAAmBV,EAAoBp4pB,GAEhDy2oB,EAAKsiB,iBAAmB/4pB,GAEvBizG,IACD9kH,GACI1D,KAAM4tqB,EAAYl7b,SAAUn9N,EAC5B4zD,IAAKm2f,EAAantD,YAAa65I,EAAKgN,cAAcv1pB,KAAKwqqB,cACvDzhJ,iBAAkB/ohB,KAAKwqqB,aAAcrjqB,OAAQnH,KAAKmH,QAEtDlH,EAAOD,KAAKyqqB,eAAexqqB,EAAMiqqB,GACjClqqB,KAAKilmB,iBAAiBhlmB,EAAM6qqB,KAEhC9qqB,KAAK+qqB,eAAej5pB,MAExB0lV,EAAUp8V,UAAUqvqB,eAAiB,SAAU/znB,EAAWs0nB,GACtD,GAAIhrqB,KAAKM,OAAOixpB,mBAAoB,CAChC,IAAI0Z,GAASD,KAAMA,EAAME,eAAgBlrqB,KAAKM,OAAOk0pB,iBAAiBx0pB,KAAKwqqB,eAC3E9znB,EAAYwxnB,MAAaxxnB,EAAWu0nB,GAExC,OAAOv0nB,GAQX8gT,EAAUp8V,UAAU+vqB,kBAAoB,SAAUtlpB,EAAYE,GAC1D/lB,KAAKorqB,WAAWprqB,KAAKqrqB,yBAAyBxlpB,EAAYE,IAC1D/lB,KAAKM,OAAOuqqB,iBAAmB9kpB,GAOnCyxU,EAAUp8V,UAAUgwqB,WAAa,SAAUE,GACvC,IAAI/iB,EAAOvopB,KAAKM,OACZ2uO,EAAYjvO,KAAKurqB,cAAgCD,EAAWA,EAAW9uqB,OAAS,GAA/C8uqB,EAAW,GAC5CzvG,EAAc0sF,EAAKgN,cAActmb,GACjCi7b,EAAqBlqqB,KAAK6pqB,sBAAsB56b,GAChDjlK,EAAUu+kB,EAAKgJ,mBAEfzsnB,EAAe9kC,KAAK8pqB,+BAA+BwB,EAAW,IAClE,GAAKtrqB,KAAKqqqB,cAAerqqB,KAAKypqB,YAA9B,CAGA,IAAIxpqB,GACAqrqB,WAAYA,EAAY5lmB,IAAKm2f,EAAa5sV,SAAUA,EAAU9nO,OAAQnH,KAAKmH,OAC3E2pgB,QAASy3I,EAAKgM,UAAUv0pB,KAAKwqqB,cAAezhJ,iBAAkB/ohB,KAAKwqqB,aACnEF,cAAetqqB,KAAKwoqB,mBAAoB+B,eAAgBvqqB,KAAKuoqB,oBAC7DhsqB,KAAMuoC,GAIV,GAFA7kC,EAAOD,KAAKyqqB,eAAexqqB,EAAMiqqB,GACjClqqB,KAAKmpqB,cAAclpqB,EAAMyqqB,IACpBjtqB,EAAkBwC,KAAuB,IAAdA,EAAQ,OAAxC,CAKA,GAFAD,KAAK2qqB,WACLpiB,EAAKsiB,iBAAmBS,EAAWjqqB,OAAO,GAAG,GACxCrB,KAAKurqB,cAWNvrqB,KAAK4qqB,mBAAmBriB,EAAKgN,cAActmb,GAAWA,GAClDjlK,GACAhqE,KAAK4qqB,mBAAmBriB,EAAKmN,qBAAqBzmb,GAAWA,GAEjEjvO,KAAK+qqB,eAAe97b,QAdpB,IAAK,IAAI7wO,EAAK,EAAGotqB,EAAeF,EAAYltqB,EAAKotqB,EAAahvqB,OAAQ4B,IAAM,CACxE,IAAIqtqB,EAASD,EAAaptqB,GAC1B4B,KAAK4qqB,mBAAmBriB,EAAKgN,cAAckW,GAASA,GAChDzhmB,GACAhqE,KAAK4qqB,mBAAmBriB,EAAKmN,qBAAqB+V,GAASA,GAE/DzrqB,KAAK+qqB,eAAe97b,GAU5BhvO,GACIqrqB,WAAYA,EAAY5lmB,IAAKm2f,EAAa5sV,SAAUA,EAAU9nO,OAAQnH,KAAKmH,OAC3E2pgB,QAASy3I,EAAKgM,UAAUv0pB,KAAKwqqB,cAAezhJ,iBAAkB/ohB,KAAKwqqB,aACnEjuqB,KAAMuoC,GAEV7kC,EAAOD,KAAKyqqB,eAAexqqB,EAAMiqqB,GACjClqqB,KAAKilmB,iBAAiBhlmB,EAAM6qqB,OAQhCtzU,EAAUp8V,UAAUswqB,mBAAqB,SAAUJ,GAC/C,IAAI/iB,EAAOvopB,KAAKM,OAEZu7jB,EAAe77jB,KAAKurqB,cACpBhjB,EAAKgN,cAAc+V,EAAWA,EAAW9uqB,OAAS,IADd+rpB,EAAKgN,cAAc+V,EAAW,IAElEpB,EAAsBlqqB,KAAKurqB,cAC3BvrqB,KAAK6pqB,sBAAsByB,EAAWA,EAAW9uqB,OAAS,IADfwD,KAAK6pqB,sBAAsByB,EAAW,IAEjFthmB,EAAUu+kB,EAAKgJ,mBACnB,GAAKvxpB,KAAKqqqB,cAAerqqB,KAAKypqB,YAI9B,IAAK,IADDxpqB,EACK7B,EAAK,EAAGutqB,EAAeL,EAAYltqB,EAAKutqB,EAAanvqB,OAAQ4B,IAAM,CACxE,IAAI6wO,EAAW08b,EAAavtqB,GACxBirqB,EAASrpqB,KAAKspqB,UAAUr6b,GACxB28b,EAAe5rqB,KAAKooqB,mBAAmB7pqB,QAAQ0wO,IAAa,EAEhE,GADAs5a,EAAKsiB,iBAAmB57b,EACpB28b,EACA5rqB,KAAK6rqB,YAAYC,IAAwB78b,IAAYo6b,EAAO9sqB,OAAQs/jB,IAAewtG,EAAOvhmB,iBAC1F9nE,KAAKooqB,mBAAmBz/oB,OAAO3oB,KAAKooqB,mBAAmB7pqB,QAAQ0wO,GAAW,GAC1EjvO,KAAKsoqB,gBAAgB3/oB,OAAO3oB,KAAKsoqB,gBAAgB/pqB,QAAQs9jB,GAAc,GACvEA,EAAYnwjB,gBAAgB,iBAC5B1L,KAAK+rqB,uBAAuBlwG,GAAa,EAAO,KAAM,wBAAyB,YAC3EquG,IACAlqqB,KAAKsoqB,gBAAgB3/oB,OAAO3oB,KAAKsoqB,gBAAgB/pqB,QAAQ2rqB,GAAqB,GAC9EA,EAAmBx+pB,gBAAgB,iBACnC1L,KAAK+rqB,uBAAuB7B,GAAoB,EAAO,KAAM,wBAAyB,aAE1FlqqB,KAAK6rqB,YAAYG,IAAuB/8b,IAAYo6b,EAAO9sqB,OAAQs/jB,IAAewtG,EAAOvhmB,iBAAkBoimB,QAE1G,CASD,GARAjqqB,GACI1D,KAAM8sqB,EAAO9sqB,KAAM0yO,SAAUA,EAAUvpK,IAAKm2f,EAAa10jB,OAAQnH,KAAKmH,OACtE2pgB,QAASy3I,EAAKgM,UAAUv0pB,KAAKwqqB,cAAezhJ,iBAAkB/ohB,KAAKwqqB,aACnEF,cAAetqqB,KAAKwoqB,mBAAoB+B,eAAgBvqqB,KAAKuoqB,oBAC7DzgmB,eAAgBuhmB,EAAOvhmB,gBAE3B7nE,EAAOD,KAAKyqqB,eAAexqqB,EAAMiqqB,GACjClqqB,KAAKmpqB,cAAclpqB,EAAMyqqB,KACpBjtqB,EAAkBwC,KAAuB,IAAdA,EAAQ,OACpC,OAEAD,KAAKurqB,eACLvrqB,KAAK2qqB,WAET3qqB,KAAK4qqB,mBAAmB/uG,EAAa5sV,GACjCjlK,GACAhqE,KAAK4qqB,mBAAmBV,EAAoBj7b,GAapD,GAVK28b,IACD3rqB,GACI1D,KAAM8sqB,EAAO9sqB,KAAM0yO,SAAUA,EAAUvpK,IAAKm2f,EAAa10jB,OAAQnH,KAAKmH,OACtE2pgB,QAASy3I,EAAKgM,UAAUv0pB,KAAKwqqB,cAAezhJ,iBAAkB/ohB,KAAKwqqB,aACnE1imB,eAAgBuhmB,EAAOvhmB,gBAE3B7nE,EAAOD,KAAKyqqB,eAAexqqB,EAAMiqqB,GACjClqqB,KAAKilmB,iBAAiBhlmB,EAAM6qqB,KAEhC9qqB,KAAK+qqB,eAAe97b,GAChBjvO,KAAKurqB,cACL,QAIZ/zU,EAAUp8V,UAAUiwqB,yBAA2B,SAAUxlpB,EAAYE,GAIjE,IAHA,IAAIg7Q,KACAl+R,EAAMgjB,EAAaE,GACjB7pB,EAAG2pB,EAAYvZ,IAAKyZ,IAAe7pB,EAAG6pB,EAAUzZ,IAAKuZ,GAAc3pB,EAAI2G,EAAG3G,EAAGoQ,EAAMzJ,EAAGyJ,IACrFpQ,GAAKoQ,EAAKpQ,IACb6kS,EAAQv8R,KAAKtI,GAKjB,OAHI2pB,EAAaE,GACbg7Q,EAAQtmP,UAELsmP,GAEXy2D,EAAUp8V,UAAUuvqB,SAAW,WAC3B3qqB,KAAKisqB,oBACLjsqB,KAAKooqB,sBACLpoqB,KAAKsoqB,mBACLtoqB,KAAKM,OAAOuqqB,kBAAoB,EAC5B7qqB,KAAKurqB,eAAiBvrqB,KAAKM,OAAOspqB,qBAClC5pqB,KAAK0oqB,sBAGblxU,EAAUp8V,UAAU2vqB,eAAiB,SAAUllpB,GAC3C7lB,KAAKwqqB,aAAe3kpB,EACpB7lB,KAAKksqB,cAAgBlsqB,KAAKooqB,mBAAmB5rqB,SAAU,GAE3Dg7V,EAAUp8V,UAAU+wqB,wBAA0B,SAAUtwG,EAAauwG,GACjE,IAAIrsqB,EAAQC,KACZ,GAAIA,KAAKM,OAAOspqB,qBAAuBnsqB,EAAkBo+jB,GAAc,CACnE,IAAIwtG,EAASrpqB,KAAKspqB,UAAUztG,GACxBwwG,EAAShD,EAAO9sqB,KAAO8sqB,EAAO9sqB,KAAKyD,KAAKiqqB,YAAc,KAC1D,GAAe,OAAXoC,EACA,OAEJhD,EAAOrrmB,WAAaoumB,EAChBA,GACApsqB,KAAK0oqB,iBAAiB2D,GAAUD,EAC3BpsqB,KAAK6oqB,oBAAoBlqoB,KAAK,SAAUpiC,GAAQ,OAAOA,EAAKwD,EAAMkqqB,cAAgBoC,KACnFrsqB,KAAK6oqB,oBAAoBrkqB,KAAK6kqB,EAAO9sqB,OAIzCyD,KAAKssqB,oBAAoBD,KAIrC70U,EAAUp8V,UAAUkxqB,oBAAsB,SAAUh8f,GAChD,IAAIvwK,EAAQC,YACJA,KAAK0oqB,iBAAiBp4f,GAC9B,IAAIx+J,EACY9R,KAAK6oqB,oBAAoBlqoB,KAAK,SAAUpiC,EAAML,GAE1D,OADA4V,EAAQ5V,EACDK,EAAKwD,EAAMkqqB,cAAgB35f,KAGlCtwK,KAAK6oqB,oBAAoBlgpB,OAAO7W,EAAO,IAG/C0lV,EAAUp8V,UAAUmxqB,iBAAmB,SAAU7mmB,EAAK0mmB,GAClD,IAAK3uqB,EAAkBioE,GAAM,CACzB,IAAI8mmB,EAAS9mmB,EAAI/iE,cAAc,kBAC1BlF,EAAkB+uqB,KACnB7kmB,GAAqB6kmB,EAAOzljB,mBAAoBqljB,IAC5C3uqB,EAAkBuC,KAAKysqB,iBAAoBhvqB,EAAkBuC,KAAKysqB,iBAC9DzsqB,KAAKysqB,cAAc3oqB,UAAUK,SAAS,sBAC1CnE,KAAK0sqB,iBAAiB93oB,SAAS8wC,EAAI7yD,aAAa,iBAAkB,QAKlF2kV,EAAUp8V,UAAUwvqB,mBAAqB,SAAU/uG,EAAah2iB,GAC5D,GAAKg2iB,EAAL,CAGA77jB,KAAKooqB,mBAAmB5jqB,KAAKqhB,GAC7B,IAAIhkB,EAAM7B,KAAKooqB,mBAAmB5rqB,OAWlC,GAVIwD,KAAKM,OAAOixpB,oBAAsB1vpB,EAAM,GACnC7B,KAAKooqB,mBAAmBvmqB,EAAM,KAAO7B,KAAKooqB,mBAAmBvmqB,EAAM,IACpE7B,KAAKooqB,mBAAmBvigB,MAGhC7lK,KAAKsoqB,gBAAgB9jqB,KAAKq3jB,GAC1BA,EAAYr4jB,aAAa,gBAAiB,QAC1CxD,KAAKmsqB,wBAAwBtwG,GAAa,GAC1C77jB,KAAKusqB,iBAAiB1wG,GAAa,GACnC77jB,KAAK+rqB,uBAAuBlwG,GAAa,EAAM,KAAM,wBAAyB,aACzE77jB,KAAKyqN,aAAc,CACpB,IAAItjN,EAASnH,KAAKkC,MAAM8jqB,iBAAiBzyW,UACrCsoQ,EAAYj1f,MAAM5mE,KAAKkC,MAAM8jqB,iBAAiBzyW,WAC9CsoQ,EAAYl5jB,cAAc,uCAC9B,IAAKwE,EACD,OAEJnH,KAAKkC,MAAM4gqB,SAAU37pB,OAAQA,IAAU,MAO/CqwV,EAAUp8V,UAAUyob,eAAiB,WACjC,IAAK7jb,KAAKM,OAAOspqB,oBAAuB5pqB,KAAKM,OAAOspqB,qBAAuB5pqB,KAAKM,OAAOqxnB,SACjFl0nB,EAAkBuC,KAAKysqB,gBAAkBzsqB,KAAKysqB,cAAc3oqB,UAAUK,SAAS,oBAAsB,CACvG,IAAIsjE,EAAOznE,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgBA,cAAc,QACvE8kE,EAAK3jE,UAAUK,SAAS,gBACxBsjE,EAAK3jE,UAAUS,OAAO,iBAE1BvE,KAAKisqB,oBACLjsqB,KAAK2sqB,qBACL3sqB,KAAKyoqB,wBAAyB,IAOtCjxU,EAAUp8V,UAAU6wqB,kBAAoB,WACpC,IAAIlsqB,EAAQC,KACZ,GAAIA,KAAKksqB,cAAe,CAUpB,IAAK,IATD3jB,EAAOvopB,KAAKM,OACZssO,EAAO5sO,KAAKM,OAAOk1pB,cACnBj5pB,KACAmpE,KACAslmB,KACA/7b,KACAjlK,EAAUu+kB,EAAKgJ,mBACfzplB,KAEK5rE,GADa8D,KAAKM,OAAOw+pB,wBACrB,GAAGj9pB,EAAM7B,KAAKooqB,mBAAmB5rqB,OAAQN,EAAI2F,EAAK3F,IAAK,CAChE,IAAIsgU,EAAax8T,KAAKM,OAAOk1pB,cAAcx1pB,KAAKooqB,mBAAmBlsqB,IAC/DmtqB,EAASrpqB,KAAKspqB,UAAU9sW,GACxB6sW,IACA9sqB,EAAKiI,KAAK6kqB,EAAO9sqB,MACjBmpE,EAAIlhE,KAAKg4T,GACTvtF,EAASzqO,KAAKxE,KAAKooqB,mBAAmBlsqB,IACtC4rE,EAAetjE,KAAK6kqB,EAAOvhmB,iBAE3BkC,GACAghmB,EAAKxmqB,KAAK+jpB,EAAKiM,iBAAiBx0pB,KAAKooqB,mBAAmBlsqB,KAIhE,GADA8D,KAAK6rqB,YAAYC,GAAuB78b,EAAU1yO,EAAMmpE,EAAKoC,EAAgBkjmB,IAC/C,IAA1BhrqB,KAAK8oqB,iBACL,OAEJl8b,EAAK1iM,OAAO,SAAU0kI,GAAU,OAAOA,EAAOj1C,aAAa,mBAAqBv6H,QAAQ,SAAU4E,GACzFjE,EAAMipqB,YACPhlqB,EAAI0H,gBAAgB,iBACpB3L,EAAMgsqB,uBAAuB/nqB,GAAK,GAAO,EAAM,wBAAyB,aAE5EjE,EAAMosqB,wBAAwBnoqB,GAAK,GACnCjE,EAAMwsqB,iBAAiBvoqB,KAE3B,IAAS9H,EAAI,EAAG2F,EAAM7B,KAAKooqB,mBAAmB5rqB,OAAQN,EAAI2F,EAAK3F,IAAK,CAChE,IAAI0wqB,EAAa5sqB,KAAK6pqB,sBAAsB7pqB,KAAKooqB,mBAAmBlsqB,IAChE0wqB,IACK5sqB,KAAKgpqB,YACN4D,EAAWlhqB,gBAAgB,iBAC3B1L,KAAK+rqB,uBAAuBa,GAAY,GAAO,EAAM,wBAAyB,aAElF5sqB,KAAKmsqB,wBAAwBS,GAAY,IAGjD5sqB,KAAKooqB,sBACLpoqB,KAAKsoqB,mBACLtoqB,KAAKksqB,eAAgB,EACrBlsqB,KAAKM,OAAOuqqB,kBAAoB,EAChC7qqB,KAAK6rqB,YAAYG,GAAsB/8b,EAAU1yO,EAAMmpE,EAAKoC,EAAgBkjmB,KAGpFxzU,EAAUp8V,UAAUywqB,YAAc,SAAUnlqB,EAAMuoO,EAAU1yO,EAAMmpE,EAAKoC,EAAgBkjmB,GAEnFhrqB,KAAKmsqB,wBAAwBzmmB,EAAI,IAAI,GACrC,IAAImnmB,GAAmB59b,SAAUA,EAAU1yO,KAAMA,EAAMmpE,IAAKA,EAAKoC,eAAgBA,EAAgBluC,QAAQ,GACzG55B,KAAKM,OAAOqmB,QAAQjgB,EAAM1G,KAAKM,OAAOixpB,mBAAqB2W,MAAa2E,GAAkB7B,KAAMA,IAAU6B,GAC1G7sqB,KAAK8oqB,iBAAmB+D,EAAoB,OAC5C7sqB,KAAKusqB,iBAAiB7mmB,EAAI,KAE9B8xR,EAAUp8V,UAAUkuqB,UAAY,SAAU5jmB,GAEtC,YADY,IAARA,IAAkBA,EAAM1lE,KAAK2iQ,cAC7BllQ,EAAkBioE,OAGH,iBAARA,IACPA,EAAM1lE,KAAKM,OAAOi1pB,cAAc7vlB,IAEhCA,EACO1lE,KAAKM,OAAO8pqB,oBAAoB1kmB,EAAI7yD,aAAa,sBAIhE2kV,EAAUp8V,UAAU0xqB,uBAAyB,SAAUv5W,GACnD,IAAIg1V,EAAOvopB,KAAKM,OACZ0pE,EAAUu+kB,EAAKgJ,mBACnB,OAAIvnlB,GACIupP,EAAUA,WAAavpP,EAChBu+kB,EAAKwkB,wBAAwBx5W,EAAUtkF,SAAUjvO,KAAKgtqB,YAAYz5W,EAAUtkF,SAAUskF,EAAUA,YAIxG,MAQXikC,EAAUp8V,UAAUu+iB,WAAa,SAAUpmP,EAAWxuM,GAClD,GAAK/kH,KAAKitqB,aAAV,CAGA,IAEIhtqB,EAFAsopB,EAAOvopB,KAAKM,OACZ87kB,EAAep8kB,KAAK8sqB,uBAAuBv5W,GAG1C6oR,IACDA,EAAemsE,EAAK2kB,iBAAiB35W,EAAUtkF,SAAUjvO,KAAKgtqB,YAAYz5W,EAAUtkF,SAAUskF,EAAUA,aAE5GvzT,KAEK2iQ,aAAe4wD,EAAUtkF,SAC9B,IAAInqM,EAAe9kC,KAAK8pqB,+BAA+B9pqB,KAAK2iQ,cAC5D,GAAK3iQ,KAAKitqB,cAAiB7wF,IAAgBp8kB,KAAKypqB,YAAhD,CAGA,IAAI1wJ,EAAiBqjE,EAAat4kB,UAAUK,SAAS,8BACrD4gH,EAAYA,GAAwB5nH,EAAY6C,KAAKmtqB,YACjD55W,EAAUtkF,WAAajvO,KAAKmtqB,UAAUl+b,UAAYskF,EAAUA,YAAcvzT,KAAKmtqB,UAAU55W,WACzFwlN,EAFmBh0Z,KAInB9kH,GACI1D,KAAMuoC,EAAcyuR,UAAWA,EAAW65W,YAAahxF,EACvDkuF,cAAetqqB,KAAKwoqB,mBAAoB+B,eAAgBvqqB,KAAKuoqB,oBAAqB8E,qBAAsBrtqB,KAAKstqB,WAC7GC,gBAAiBvtqB,KAAKstqB,WAClBttqB,KAAKwtqB,aAAaxtqB,KAAKstqB,WAAWr+b,SAAUjvO,KAAKstqB,WAAW/5W,gBAAar4T,EAC7E0+B,QAAQ,GAEZ55B,KAAKmpqB,cAAclpqB,EAAMwtqB,MAExBhwqB,EAAkBwC,KAAwB,IAAfA,EAAS,UAGzCD,KAAK0tqB,YACA3ojB,GACD/kH,KAAK2tqB,oBAAoBvxF,EAAc7oR,EAAUtkF,SAAUskF,EAAUA,WAEzEvzT,KAAK4tqB,gBAAgBr6W,EAAWA,GAC3BxuM,GACD/kH,KAAKilmB,kBACD1omB,KAAMuoC,EAAcyuR,UAAWA,EAAW65W,YAAahxF,EACvDixF,qBAAsBrtqB,KAAKstqB,WAAYO,qBAAsB7tqB,KAAKqoqB,uBAClEkF,gBAAiBvtqB,KAAKstqB,WAClBttqB,KAAKwtqB,aAAaxtqB,KAAKstqB,WAAWr+b,SAAUjvO,KAAKstqB,WAAW/5W,gBAAar4T,GAC9E4yqB,QAGXt2U,EAAUp8V,UAAUoyqB,aAAe,SAAUO,EAAM9ngB,GAC/C,OAAQjmK,KAAKM,OAAOixpB,oBAAsBtrf,GAAQjmK,KAAKM,OAAOixpB,mBAAqBvxpB,KAAKM,OAAOysqB,wBAAwBgB,EAAM9ngB,GAC3EjmK,KAAKM,OAAO4sqB,iBAAiBa,EAAM9ngB,IAQzFuxL,EAAUp8V,UAAU4yqB,mBAAqB,SAAUnopB,EAAYE,GAC3D,GAAK/lB,KAAKitqB,aAAV,CAGA,IAAI1kB,EAAOvopB,KAAKM,OACZ87kB,EAAep8kB,KAAK8sqB,uBAAuBjnpB,GAC3CmkD,EAAUu+kB,EAAKgJ,mBACdn1E,IACDA,EAAemsE,EAAK2kB,iBAAiBrnpB,EAAWopN,SAAUppN,EAAW0tS,YAEzE,IAAInzS,EACA9T,EAGA2hqB,EAFAC,EAAUropB,EACVsopB,EAAUpopB,EAAWA,GAAsBF,EAE/C7lB,KAAK2iQ,aAAe98O,EAAWopN,SAC/B,IACInqM,EAAe9kC,KAAK8pqB,+BAA+B9pqB,KAAK2iQ,cAC5D,IAAI3iQ,KAAKurqB,eAAkBvrqB,KAAKitqB,eAAgBjtqB,KAAKypqB,YAArD,CAGA,IAAIxpqB,GACA1D,KAAMuoC,EAAcyuR,UAAW1tS,EAAYunpB,YAAahxF,EACxDkuF,cAAetqqB,KAAKwoqB,mBAAoB+B,eAAgBvqqB,KAAKuoqB,oBAAqB8E,qBAAsBrtqB,KAAKstqB,WAC7GC,gBAAiBvtqB,KAAKstqB,WAAattqB,KAAKwtqB,aAAaxtqB,KAAKstqB,WAAWr+b,SAAUjvO,KAAKstqB,WAAW/5W,gBAAar4T,GAGhH,GADA8E,KAAKmpqB,cAAclpqB,EAAMwtqB,IACpBhwqB,EAAkBwC,KAAwB,IAAfA,EAAS,OAAzC,CAIA,GADAD,KAAK0tqB,YACD7npB,EAAWopN,SAAWlpN,EAASkpN,SAAU,CACzC,IAAIl0M,EAAOlV,EACXA,EAAaE,EACbA,EAAWgV,EAEf,IAAK,IAAI7+B,EAAI2pB,EAAWopN,SAAU/yO,GAAK6pB,EAASkpN,SAAU/yO,IAAK,CACV,QAA7C8D,KAAK65iB,kBAAkBu0H,mBACvBhupB,EAAMlkB,IAAM2pB,EAAWopN,SAAYppN,EAAoB,UAAI,EAC3DvZ,EAAMpQ,IAAM6pB,EAASkpN,SAAYlpN,EAAkB,UAAI/lB,KAAKquqB,gBAAgBnyqB,KAG5EkkB,EAAMyF,EAAW0tS,UACjBjnT,EAAMyZ,EAASwtS,WAEnB06W,KACA,IAAK,IAAIvqpB,EAAItD,EAAM9T,EAAM8T,EAAM9T,EAAKzK,EAAMue,EAAM9T,EAAM8T,EAAM9T,EAAKoX,GAAK7hB,EAAK6hB,KAG/D04jB,EAFJpygB,EACItmD,EAAIsmD,EACWu+kB,EAAK2kB,iBAAiBhxqB,EAAGwnB,GAGzB6koB,EAAKwkB,wBAAwB7wqB,EAAGwnB,GAIpC6koB,EAAK2kB,iBAAiBhxqB,EAAGwnB,MAK5CuqpB,EAAYzpqB,KAAKkf,GACjB1jB,KAAK2tqB,oBAAoBvxF,GACzBp8kB,KAAKm0P,aAAaioV,IAEtBp8kB,KAAKqoqB,uBAAuB7jqB,MAAOyqO,SAAU/yO,EAAG+xqB,YAAaA,IAEjEjuqB,KAAK4tqB,gBAAgBM,EAASC,GAC9BnuqB,KAAKilmB,kBACD1omB,KAAMuoC,EAAcyuR,UAAW1tS,EAAYunpB,YAAahxF,EACxDixF,qBAAsBrtqB,KAAKstqB,WAAYO,qBAAsB7tqB,KAAKqoqB,uBAClEkF,gBAAiBvtqB,KAAKstqB,WAAattqB,KAAKwtqB,aAAaxtqB,KAAKstqB,WAAWr+b,SAAUjvO,KAAKstqB,WAAW/5W,gBAAar4T,GAC7G4yqB,QAOPt2U,EAAUp8V,UAAUkzqB,YAAc,SAAUC,GACxC,GAAKvuqB,KAAKitqB,aAAV,CAGA,IAAI1kB,EAAOvopB,KAAKM,OACZ87kB,EAAep8kB,KAAK8sqB,uBAAuByB,EAAe,IAC1DvkmB,EAAUu+kB,EAAKgJ,mBACdn1E,IACDA,EAAemsE,EAAK2kB,iBAAiBqB,EAAe,GAAGt/b,SAAUs/b,EAAe,GAAGN,YAAY,KAEnGjuqB,KAAK2iQ,aAAe4ra,EAAe,GAAGt/b,SACtC,IAAInqM,EAAe9kC,KAAK8pqB,+BAA+B9pqB,KAAK2iQ,cAC5D,IAAI3iQ,KAAKurqB,eAAkBvrqB,KAAKitqB,eAAgBjtqB,KAAKypqB,YAArD,CAGAzpqB,KAAKmpqB,eACD5sqB,KAAMuoC,EAAcyuR,UAAWg7W,EAAe,GAAGN,YAAY,GAC7Db,YAAahxF,EAAckuF,cAAetqqB,KAAKwoqB,mBAC/C+B,eAAgBvqqB,KAAKuoqB,oBAAqB8E,qBAAsBrtqB,KAAKstqB,WACrEC,gBAAiBvtqB,KAAKstqB,WAAattqB,KAAKwtqB,aAAaxtqB,KAAKstqB,WAAWr+b,SAAUjvO,KAAKstqB,WAAW/5W,gBAAar4T,GAC7GuyqB,IACH,IAAK,IAAIvxqB,EAAI,EAAG2F,EAAM0sqB,EAAe/xqB,OAAQN,EAAI2F,EAAK3F,IAClD,IAAK,IAAIwnB,EAAI,EAAGuxoB,EAAUsZ,EAAeryqB,GAAG+xqB,YAAYzxqB,OAAQknB,EAAIuxoB,EAASvxoB,KAGjE04jB,EAFJpygB,EACIukmB,EAAeryqB,GAAG+xqB,YAAYvqpB,GAAKsmD,EACpBu+kB,EAAK2kB,iBAAiBqB,EAAeryqB,GAAG+yO,SAAUs/b,EAAeryqB,GAAG+xqB,YAAYvqpB,IAGhF6koB,EAAKwkB,wBAAwBwB,EAAeryqB,GAAG+yO,SAAUs/b,EAAeryqB,GAAG+xqB,YAAYvqpB,IAI3F6koB,EAAK2kB,iBAAiBqB,EAAeryqB,GAAG+yO,SAAUs/b,EAAeryqB,GAAG+xqB,YAAYvqpB,OAKnG1jB,KAAK2tqB,oBAAoBvxF,GACzBp8kB,KAAKm0P,aAAaioV,GAClBp8kB,KAAKwuqB,iBAAkBv/b,SAAUs/b,EAAeryqB,GAAG+yO,SAAUskF,UAAWg7W,EAAeryqB,GAAG+xqB,YAAYvqpB,MAG9G1jB,KAAK4tqB,iBAAkB3+b,SAAUs/b,EAAe,GAAGt/b,SAAUskF,UAAWg7W,EAAe,GAAGN,YAAY,KAAQh/b,SAAUs/b,EAAe,GAAGt/b,SAAUskF,UAAWg7W,EAAe,GAAGN,YAAY,KAC7LjuqB,KAAKilmB,kBACD1omB,KAAMuoC,EAAcyuR,UAAWg7W,EAAe,GAAGN,YAAY,GAC7Db,YAAahxF,EACbixF,qBAAsBrtqB,KAAKstqB,WAAYO,qBAAsB7tqB,KAAKqoqB,uBAClEkF,gBAAiBvtqB,KAAKstqB,WAAattqB,KAAKwtqB,aAAaxtqB,KAAKstqB,WAAWr+b,SAAUjvO,KAAKstqB,WAAW/5W,gBAAar4T,GAC7G4yqB,OAQPt2U,EAAUp8V,UAAUqzqB,oBAAsB,SAAUR,GAChD,GAAKjuqB,KAAKitqB,aAAV,CAGA,IAGI7wF,EAEAtqkB,EALAy2oB,EAAOvopB,KAAKM,OAIZ0pE,EAAUu+kB,EAAKgJ,mBAEnBvxpB,KAAK2iQ,aAAesra,EAAY,GAAGh/b,SACnC,IAAInqM,EAAe9kC,KAAK8pqB,+BAA+B9pqB,KAAK2iQ,cAC5D,IAAI3iQ,KAAKurqB,eAAkBvrqB,KAAKitqB,eAAgBjtqB,KAAKypqB,YAArD,CAGA,IAAIJ,EAEAA,EADAr/lB,GAAWikmB,EAAY,GAAG16W,WAAavpP,EAC9Bu+kB,EAAKmmB,uBAAuBT,EAAY,GAAGh/b,UAG3CjvO,KAAKspqB,UAAU2E,EAAY,GAAGh/b,UAG3C,IAAK,IADDnnK,KACK1pE,EAAK,EAAGuwqB,EAAgBV,EAAa7vqB,EAAKuwqB,EAAcnyqB,OAAQ4B,IAAM,CAE3E,IAAK,IADDm1T,EAAYo7W,EAAcvwqB,GACrBlC,EAAI,EAAG2F,EAAM7B,KAAKqoqB,uBAAuB7rqB,OAAQN,EAAI2F,EAAK3F,IAC/D,GAAI8D,KAAKqoqB,uBAAuBnsqB,GAAG+yO,WAAaskF,EAAUtkF,SAAU,CAChEn9N,EAAQ5V,EACR,OAGRkglB,EAAep8kB,KAAK8sqB,uBAAuBv5W,MAEvC6oR,EAAemsE,EAAK2kB,iBAAiB35W,EAAUtkF,SAAUjvO,KAAKgtqB,YAAYz5W,EAAUtkF,SAAUskF,EAAUA,aAE5GzrP,EAAetjE,KAAK6kqB,EAAOzimB,MAAMoD,GAAWikmB,EAAY,GAAG16W,WAAavpP,EAClEupP,EAAUA,UAAYvpP,EAAUupP,EAAUA,WAAWzrP,gBAC3D,IAAI7nE,GACA1D,KAAMuoC,EAAcyuR,UAAW06W,EAAY,GAC3C1D,eAAgBvqqB,KAAKuoqB,oBAAqB8E,qBAAsBrtqB,KAAKstqB,WACrEF,YAAahxF,EAAckuF,cAAetqqB,KAAKwoqB,mBAC/C+E,gBAAiBvtqB,KAAKstqB,WAClB/kB,EAAK2kB,iBAAiBltqB,KAAKstqB,WAAWr+b,SAAUjvO,KAAKstqB,WAAW/5W,gBAAar4T,GAEjF0wqB,EAAe95pB,GAAS,EAC5B,GAAI85pB,EAAc,CACd,IAAIgD,EAAkB5uqB,KAAKqoqB,uBAAuBv2pB,GAAOm8pB,YACrDW,EAAgBrwqB,QAAQg1T,EAAUA,YAAc,GAChDvzT,KAAK6uqB,aAAaC,KAA2B7/b,SAAUskF,EAAUtkF,SAAUg/b,aAAc16W,EAAUA,aAAezuR,GAAes3iB,GAAet0gB,GAChJ8mmB,EAAgBjmpB,OAAOimpB,EAAgBrwqB,QAAQg1T,EAAUA,WAAY,GACrE6oR,EAAat4kB,UAAUS,OAAO,6BAC9B63kB,EAAa1wkB,gBAAgB,iBAC7B1L,KAAK6uqB,aAAaE,KAA0B9/b,SAAUskF,EAAUtkF,SAAUg/b,aAAc16W,EAAUA,aAAezuR,GAAes3iB,GAAet0gB,KAG/I8jmB,GAAe,EACf5rqB,KAAKmpqB,cAAclpqB,EAAMwtqB,IACzBztqB,KAAKwuqB,iBAAkBv/b,SAAUskF,EAAUtkF,SAAUskF,UAAWA,EAAUA,YAC1EvzT,KAAK2tqB,oBAAoBvxF,GACzBp8kB,KAAKm0P,aAAaioV,SAItBp8kB,KAAKmpqB,cAAclpqB,EAAMwtqB,IACzBztqB,KAAK2tqB,oBAAoBvxF,EAAc7oR,EAAUtkF,SAAUskF,EAAUA,WAEzEvzT,KAAK4tqB,gBAAgBr6W,EAAWA,GAC3Bq4W,GACD5rqB,KAAKilmB,kBACD1omB,KAAMuoC,EAAcyuR,UAAW06W,EAAY,GAAIb,YAAahxF,EAC5DmxF,gBAAiBvtqB,KAAKstqB,WAAattqB,KAAKwtqB,aAAaxtqB,KAAKstqB,WAAWr+b,SAAUjvO,KAAKstqB,WAAW/5W,gBAC3Fr4T,EAAWmyqB,qBAAsBrtqB,KAAKstqB,WAAYO,qBAAsB7tqB,KAAKqoqB,wBAClFyF,QAIft2U,EAAUp8V,UAAU4xqB,YAAc,SAAU/9b,EAAUn9N,GAClD,IAAI80D,EACAoD,EAAUhqE,KAAKM,OAAOixpB,mBACtBvnlB,GACIl4D,GAASk4D,IACTpD,EAAQ5mE,KAAKM,OAAOq1pB,qBAAqB1mb,GAAUztO,iBAAiB,iBAGvEolE,IACDA,EAAQ5mE,KAAKM,OAAOk1pB,cAAcvmb,GAAUztO,iBAAiB,iBAEjE,IAAK,IAAI41E,EAAI,EAAGA,EAAIxQ,EAAMpqE,OAAQ46E,IAAK,CAEnC,GADexiD,SAASgyC,EAAMwQ,GAAGvkE,aAAa,iBAAkB,MAC/Cf,EAMb,OALIk4D,GACIl4D,GAASk4D,IACToN,GAAKpN,GAGNoN,EAGf,OAAQ,GAEZogR,EAAUp8V,UAAUizqB,gBAAkB,SAAUp/b,GAC5C,IAAIroK,EAAQ5mE,KAAKM,OAAOixpB,mBAAqBvxpB,KAAKM,OAAOq1pB,qBAAqB1mb,GAAUztO,iBAAiB,gBACnGxB,KAAKM,OAAOk1pB,cAAcvmb,GAAUztO,iBAAiB,gBAC3D,OAAOozB,SAASgyC,EAAMA,EAAMpqE,OAAS,GAAGqW,aAAa,iBAAkB,KAE3E2kV,EAAUp8V,UAAUsyqB,UAAY,WAC5B1tqB,KAAK2sqB,sBAETn1U,EAAUp8V,UAAUyzqB,aAAe,SAAUnoqB,EAAMunqB,EAAa1xqB,EAAMqqE,EAAOkB,GAErElB,EAAM,IAAMA,EAAM,GAAG9iE,UAAUK,SAAS,iBACxCnE,KAAKusqB,iBAAiB1mqB,EAAQ+gE,EAAM,GAAI,OAE5C,IAAI3mE,GACA2mE,MAAOA,EAAOrqE,KAAMA,EAAM0xqB,YAAaA,EAAanmmB,eAAgBA,EAAgBluC,QAAQ,GAEhG55B,KAAKM,OAAOqmB,QAAQjgB,EAAMzG,GAC1BD,KAAK+oqB,oBAAsB9oqB,EAAU,QAEzCu3V,EAAUp8V,UAAUuyqB,oBAAsB,SAAUvxF,EAAcntW,EAAUskF,GACnE91T,EAAkBwxO,IACnBjvO,KAAKwuqB,iBAAkBv/b,SAAUA,EAAUskF,UAAWA,IAE1D6oR,EAAat4kB,UAAUM,IAAI,6BACvBg4kB,EAAat4kB,UAAUK,SAAS,iBAChCnE,KAAKusqB,iBAAiB1mqB,EAAQu2kB,EAAc,OAAO,GAEvDp8kB,KAAKm0P,aAAaioV,IAEtB5kP,EAAUp8V,UAAU+4P,aAAe,SAAUpsL,GACzC/nE,KAAKmH,OAAS4gE,EACTtqE,EAAkBsqE,KACnBA,EAAKvkE,aAAa,gBAAiB,QAC9BxD,KAAKyqN,cACNzqN,KAAKkC,MAAM4gqB,SAAU37pB,OAAQ4gE,IAAQ,KAIjDyvR,EAAUp8V,UAAUwyqB,gBAAkB,SAAU/npB,EAAYE,GACxD/lB,KAAKmtqB,UAAYtnpB,EACjB7lB,KAAKstqB,WAAavnpB,EAClB/lB,KAAK+4gB,eAAiB/4gB,KAAKqoqB,uBAAuB7rqB,SAAU,GAEhEg7V,EAAUp8V,UAAUozqB,gBAAkB,SAAUQ,GAG5C,IAAK,IAFDC,EACAn9pB,EACK5V,EAAI,EAAG2F,EAAM7B,KAAKqoqB,uBAAuB7rqB,OAAQN,EAAI2F,EAAK3F,IAC/D,GAAI8D,KAAKqoqB,uBAAuBnsqB,GAAG+yO,WAAa+/b,EAAa//b,SAAU,CACnEggc,GAAa,EACbn9pB,EAAQ5V,EACR,MAGJ+yqB,EACIjvqB,KAAKqoqB,uBAAuBv2pB,GAAOm8pB,YAAY1vqB,QAAQywqB,EAAaz7W,WAAa,GACjFvzT,KAAKqoqB,uBAAuBv2pB,GAAOm8pB,YAAYzpqB,KAAKwqqB,EAAaz7W,WAIrEvzT,KAAKqoqB,uBAAuB7jqB,MAAOyqO,SAAU+/b,EAAa//b,SAAUg/b,aAAce,EAAaz7W,cAOvGikC,EAAUp8V,UAAUuxqB,mBAAqB,WACrC,GAAI3sqB,KAAK+4gB,eAAgB,CAUrB,IAAK,IATDwvI,EAAOvopB,KAAKM,OACZ66jB,EAAgBn7jB,KAAKkvqB,0BACrB5mG,EAAUtokB,KAAKqoqB,uBACf9rqB,KACAqqE,KACAkB,KACA0uK,EAAkBx2O,KAAK8pqB,+BAEvB9/lB,EAAUu+kB,EAAKgJ,mBACVr1pB,EAAI,EAAG2F,EAAMymkB,EAAQ9rkB,OAAQN,EAAI2F,EAAK3F,IAAK,CAChDK,EAAKiI,KAAKgyO,EAAgB8xV,EAAQpskB,GAAG+yO,WAErC,IAAK,IADDo6b,EAASrpqB,KAAKspqB,UAAUhhG,EAAQpskB,GAAG+yO,UAC9BvrN,EAAI,EAAGyrpB,EAAO7mG,EAAQpskB,GAAG+xqB,YAAYzxqB,OAAQknB,EAAIyrpB,EAAMzrpB,IACxDsmD,EACIs+f,EAAQpskB,GAAG+xqB,YAAYvqpB,GAAKsmD,EAC5BpD,EAAMpiE,KAAK+jpB,EAAK2kB,iBAAiB5kG,EAAQpskB,GAAG+yO,SAAUq5V,EAAQpskB,GAAG+xqB,YAAYvqpB,KAG7EkjD,EAAMpiE,KAAK+jpB,EAAKwkB,wBAAwBzkG,EAAQpskB,GAAG+yO,SAAUq5V,EAAQpskB,GAAG+xqB,YAAYvqpB,MAIxFokD,EAAetjE,KAAK6kqB,EAAOzimB,MAAM0hgB,EAAQpskB,GAAG+xqB,YAAYvqpB,IAAIokD,gBAC5DlB,EAAMpiE,KAAK+jpB,EAAK2kB,iBAAiB5kG,EAAQpskB,GAAG+yO,SAAUq5V,EAAQpskB,GAAG+xqB,YAAYvqpB,MAKzF,GADA1jB,KAAK6uqB,aAAaC,GAAwBxmG,EAAS/rkB,EAAMqqE,EAAOkB,IAC/B,IAA7B9nE,KAAK+oqB,oBACL,OAEJ,IAAS7sqB,EAAI,EAAG2F,EAAMs5jB,EAAc3+jB,OAAQN,EAAI2F,EAAK3F,IACjDi/jB,EAAcj/jB,GAAG4H,UAAUS,OAAO,6BAClC42jB,EAAcj/jB,GAAGwP,gBAAgB,iBAErC1L,KAAKqoqB,0BACLroqB,KAAK+4gB,gBAAiB,EACtB/4gB,KAAK6uqB,aAAaE,GAAuBzmG,EAAS/rkB,EAAMqqE,EAAOkB,GAC/D9nE,KAAKstqB,gBAAapyqB,IAG1Bs8V,EAAUp8V,UAAU8zqB,wBAA0B,WAC1C,IAEIna,EAFAxM,EAAOvopB,KAAKM,OACZssO,EAAO27a,EAAKiN,cAEZjN,EAAKgJ,qBACLwD,EAAQxM,EAAKoN,qBACb/ob,EAAO27a,EAAK6mB,eAAexic,EAAMmob,IAGrC,IAAK,IADDnulB,KACK1qE,EAAI,EAAG2F,EAAM+qO,EAAKpwO,OAAQN,EAAI2F,EAAK3F,IACxC0qE,EAAQA,EAAMpsD,UAAUnZ,MAAMC,KAAKsrO,EAAK1wO,GAAGsF,iBAAiB,gCAEhE,OAAOolE,GAEX4wR,EAAUp8V,UAAUmhP,iBAAmB,SAAU17O,GAC7CA,EAAE8kB,iBACF,IAMIusJ,EANAm9f,EAASrvqB,KAAKM,OAAOU,QAAQ4K,wBAC7B2xB,EAAKv9B,KAAK+M,EACVywB,EAAKx9B,KAAKgN,EACVkH,EAAWgwD,GAAYrjE,GACvB48B,EAAKvpB,EAASnH,EAAIsiqB,EAAO7iqB,KACzBkxB,EAAKxpB,EAASlH,EAAIqiqB,EAAO3iqB,IAEzBvF,EAAStB,EAAQhF,EAAEsG,OAAQ,MAqB/B,GApBAnH,KAAKsvqB,WAAY,EACZtvqB,KAAKuvqB,aACDpoqB,IACDA,EAAStB,EAAQrF,SAAS84G,iBAAiBt5G,KAAKM,OAAOU,QAAQmT,WAAa,EAAGtT,EAAEi5D,SAAU,OAE3Fv8B,EAAKE,IACLy0I,EAAMz0I,EACNA,EAAKF,EACLA,EAAK20I,GAEL10I,EAAKE,IACLw0I,EAAMx0I,EACNA,EAAKF,EACLA,EAAK00I,GAETlyK,KAAKgB,QAAQ0D,MAAM8H,KAAO+wB,EAAK,KAC/Bv9B,KAAKgB,QAAQ0D,MAAMgI,IAAM8wB,EAAK,KAC9Bx9B,KAAKgB,QAAQ0D,MAAMsR,MAAQynB,EAAKF,EAAK,KACrCv9B,KAAKgB,QAAQ0D,MAAMqR,OAAS2nB,EAAKF,EAAK,MAEtCr2B,IAAWtG,EAAEqnB,UAAYrnB,EAAEw8G,SAAU,CACrC,IAAI4xH,EAAWr6M,SAASztB,EAAO0L,aAAa,iBAAkB,IAC9D,GAAK7S,KAAKuvqB,WAGL,CACD,IAAItgY,EAAK11O,GAAa14D,EAAEsG,OAAQ,aAC5B8nS,GACAjvS,KAAKwvqB,gBAAgBvgc,EAAUr6M,SAASq6Q,EAAGp8R,aAAa,iBAAkB,UAL9E7S,KAAKmrqB,kBAAkBnrqB,KAAK6lB,WAAYopN,KAUpDuoH,EAAUp8V,UAAUo0qB,gBAAkB,SAAUvgc,EAAUskF,GACtDvzT,KAAK2sqB,qBACL3sqB,KAAKguqB,oBAAqB/+b,SAAUjvO,KAAK6lB,WAAY0tS,UAAWvzT,KAAKspkB,iBAAoBr6V,SAAUA,EAAUskF,UAAWA,KAE5HikC,EAAUp8V,UAAU4gO,eAAiB,SAAUn7N,GAC3CL,SAASuL,KAAKjI,UAAUS,OAAO,uBAC3BvE,KAAKgB,SACLuD,EAAOvE,KAAKgB,SAEhBuE,GAAahB,OAAOvE,KAAKM,OAAOkxD,aAAc,YAAaxxD,KAAKu8O,kBAChEh3O,GAAahB,OAAO/D,SAASuL,KAAM,UAAW/L,KAAKg8N,gBACnDh8N,KAAKsvqB,WAAY,GAErB93U,EAAUp8V,UAAUkrH,iBAAmB,SAAUzlH,GAC7C,IAEIu5G,EAFAjzG,EAAStG,EAAEsG,OACXohpB,EAAOvopB,KAAKM,OAEZipqB,EAAchwmB,GAAapyD,EAAQ,UACvC,KAAIoiqB,GAAeA,EAAYjmqB,KAAOilpB,EAAKvnpB,QAAQsC,OAG/CzC,EAAEw8G,UAAYx8G,EAAEqnB,UAChBrnB,EAAE8kB,iBAEFxe,EAAOrD,UAAUK,SAAS,eAAiBtD,EAAEw8G,WAAax8G,EAAEqnB,SAAS,CACrE,GAAiD,QAA7CqgoB,EAAK1uG,kBAAkBu0H,mBAAgCpuqB,KAAKqqqB,aAAgBrqqB,KAAKurqB,eAIhF,GAAIhjB,EAAKknB,oBAAqB,CAC/B,IAAKzvqB,KAAKqqqB,aAAerqqB,KAAKurqB,eAAiB1lqB,EAAQsB,EAAQ,MAAMrD,UAAUK,SAAS,yBAEpF,YADAnE,KAAKsvqB,WAAY,GAGrBl1jB,GAAS,EACTp6G,KAAKgB,QAAUhB,KAAKM,OAAOa,cAAc,OAASkC,UAAW,mBAC7DklpB,EAAK/2lB,aAAa7vD,YAAY3B,KAAKgB,eAVnChB,KAAKuvqB,YAAa,EAClBn1jB,GAAS,EAWb,GAAIA,EAAQ,CACR,IAAI24P,EAAKltW,EAAQhF,EAAEsG,OAAQ,MAC3BnH,KAAK6lB,WAAa+O,SAASm+U,EAAGlgW,aAAa,iBAAkB,IAC7D7S,KAAKspkB,eAAiB10iB,SAAS2kC,GAAapyD,EAAQ,aAAa0L,aAAa,iBAAkB,IAChGrS,SAASuL,KAAKjI,UAAUM,IAAI,uBAC5B,IAAIirqB,EAAS9mB,EAAKvnpB,QAAQ4K,wBACtB8jqB,EAAUxrmB,GAAYrjE,GAC1Bb,KAAK+M,EAAI2iqB,EAAQ3iqB,EAAIsiqB,EAAO7iqB,KAC5BxM,KAAKgN,EAAI0iqB,EAAQ1iqB,EAAIqiqB,EAAO3iqB,IAC5BnH,GAAanB,IAAImkpB,EAAK/2lB,aAAc,YAAaxxD,KAAKu8O,iBAAkBv8O,MACxEuF,GAAanB,IAAI5D,SAASuL,KAAM,UAAW/L,KAAKg8N,eAAgBh8N,SAI5Ew3V,EAAUp8V,UAAUu0qB,qBAAuB,SAAU9uqB,GAC3B,kBAAlBA,EAAEmpM,aAAoChqM,KAAKM,OAAOspqB,oBAClD5pqB,KAAK6jb,kBAMbrsF,EAAUp8V,UAAUqB,iBAAmB,WAC/BuD,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAOwrF,GAAGqmkB,GAAiBnypB,KAAKoypB,kBAAmBpypB,MACxDA,KAAKM,OAAOwrF,GAAG8jlB,GAAmB5vqB,KAAKkpqB,oBAAqBlpqB,MAC5DA,KAAKM,OAAOwrF,G5Bv4Bc,c4Bu4BkB9rF,KAAKilmB,iBAAkBjlmB,MACnEA,KAAKM,OAAOwrF,GAAG+jlB,GAA8B7vqB,KAAKilmB,iBAAkBjlmB,MACpEA,KAAKM,OAAOwrF,GAAGgklB,GAA4B9vqB,KAAK2tF,kBAAmB3tF,MACnEA,KAAKM,OAAOwrF,GAAGiklB,GAAoB/vqB,KAAKgwqB,cAAehwqB,MACvDA,KAAKM,OAAOwrF,GAAGookB,GAAyBl0pB,KAAK2vqB,qBAAsB3vqB,MACnEA,KAAKM,OAAOwrF,GAAG0qkB,GAA8Bx2pB,KAAK++oB,sBAAuB/+oB,MACzEA,KAAKM,OAAOwrF,GAAG2lkB,GAAqBzxpB,KAAKs9oB,WAAYt9oB,MACrDA,KAAKiwqB,oBAAsBjwqB,KAAK07oB,YAAYrgpB,KAAK2E,MACjDA,KAAKkwqB,uBAAyBlwqB,KAAK27oB,eAAetgpB,KAAK2E,MACvDA,KAAKM,OAAO7D,iBAAiBqnpB,GAAoB9jpB,KAAKiwqB,qBACtDjwqB,KAAKM,OAAO7D,iBAAiBkqpB,GAAuB3mpB,KAAKkwqB,wBACzDlwqB,KAAKM,OAAOwrF,GAAGk8jB,GAAoBhopB,KAAKi/oB,YAAaj/oB,MACrDA,KAAKM,OAAOwrF,GAAGgrkB,GAAwB92pB,KAAKmwqB,cAAenwqB,MAC3DA,KAAKowqB,8BAKT54U,EAAUp8V,UAAUuB,oBAAsB,WAClCqD,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAO4rF,IAAIimkB,GAAiBnypB,KAAKoypB,mBACtCpypB,KAAKM,OAAO4rF,IAAI0jlB,GAAmB5vqB,KAAKkpqB,qBACxClpqB,KAAKM,OAAO4rF,I5B/5Bc,c4B+5BmBlsF,KAAKilmB,kBAClDjlmB,KAAKM,OAAO4rF,IAAI2jlB,GAA8B7vqB,KAAKilmB,kBACnDjlmB,KAAKM,OAAO4rF,IAAI4jlB,GAA4B9vqB,KAAK2tF,mBACjD3tF,KAAKM,OAAO4rF,IAAI6jlB,GAAoB/vqB,KAAKgwqB,eACzChwqB,KAAKM,OAAO4rF,IAAIgokB,GAAyBl0pB,KAAK2vqB,sBAC9C3vqB,KAAKM,OAAO4rF,IAAIsqkB,GAA8Bx2pB,KAAK++oB,uBACnD/+oB,KAAKM,OAAO3D,oBAAoBmnpB,GAAoB9jpB,KAAKiwqB,qBACzDjwqB,KAAKM,OAAO3D,oBAAoBgqpB,GAAuB3mpB,KAAKkwqB,wBAC5DlwqB,KAAKM,OAAO4rF,IAAI87jB,GAAoBhopB,KAAKi/oB,aACzCj/oB,KAAKM,OAAO4rF,IAAI4qkB,GAAwB92pB,KAAKmwqB,eAC7CnwqB,KAAKqwqB,iCAET74U,EAAUp8V,UAAU2jpB,sBAAwB,WACnC/+oB,KAAKM,OAAOspqB,oBACb5pqB,KAAK6jb,kBAGbrsF,EAAUp8V,UAAU+0qB,cAAgB,WAChCnwqB,KAAK0sqB,oBAETl1U,EAAUp8V,UAAU6jpB,YAAc,SAAUp+oB,GACxC,IAAK,IAAI3E,EAAI,EAAGA,EAAI2E,EAAEmvK,QAAQxzK,OAAQN,WAC1B8D,KAAK0oqB,iBAAiB7nqB,EAAEmvK,QAAQ9zK,GAAG8D,KAAKiqqB,eAC9CjqqB,KAAKo/pB,kBAEXp/pB,KAAK0sqB,oBAGTl1U,EAAUp8V,UAAU4lpB,iBAAmB,SAAUngpB,GACvB,kBAAlBA,EAAEmpM,aAAoChqM,KAAKM,OAAOspqB,oBAClD5pqB,KAAK6jb,kBAIbrsF,EAAUp8V,UAAUk1qB,eAAiB,WACjC,OAAOtwqB,KAAKM,OAAO0ypB,mBAAmBrwpB,cAAc,sBAExD60V,EAAUp8V,UAAUg3pB,kBAAoB,SAAUvxpB,GAC1CA,EAAEy2F,SAAWt3F,KAAK+hC,iBAAmBlhC,EAAEohC,QACvCjiC,KAAKoyG,UAGbolP,EAAUp8V,UAAUg3G,OAAS,SAAUvxG,GACnC0E,GAAanB,IAAIpE,KAAKM,OAAOkxD,aAAc,YAAaxxD,KAAKsmH,iBAAkBtmH,OAEnFw3V,EAAUp8V,UAAUuyF,kBAAoB,SAAU9sF,GAC9C,GAAIA,EAAEy2F,SAAWt3F,KAAK+hC,gBAAtB,CAGA,IAAIwmnB,EAAOvopB,KAAKM,OACX7C,EAAkBoD,EAAEoC,WAAWyD,OAAyC,WAAhC1G,KAAK65iB,kBAAkBnziB,OAC5D1G,KAAKqoqB,uBAAuB7rqB,OAAS,GACrCwD,KAAK2sqB,qBAEL3sqB,KAAKooqB,mBAAmB5rqB,OAAS,GACjCwD,KAAKisqB,oBAETjsqB,KAAKyoqB,wBAAyB,EAC9BzoqB,KAAKwpqB,aAEJ/rqB,EAAkBoD,EAAEoC,WAAWo9B,OAC/B5iC,EAAkBoD,EAAEoC,WAAWmrqB,oBAChCpuqB,KAAK6jb,iBAET7jb,KAAKuwqB,2BACLvwqB,KAAKwwqB,wBACgBxwqB,KAAKM,OAAO8jpB,aAAal6mB,OAAO,SAAUu7B,GAAO,MAAoB,aAAbA,EAAI/+D,OAC9DlK,SACf+rpB,EAAKuE,sBAAgE,oBAAxC9spB,KAAK65iB,kBAAkB42H,iBAG5Dj5U,EAAUp8V,UAAUouqB,UAAY,WACxBxpqB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgBnB,iBAAiB,gBAAgBhF,SACnFwD,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAMosC,QAAU,SAG1E0mT,EAAUp8V,UAAUkipB,WAAa,WAC7Bt9oB,KAAKM,OAAO4rF,IAAIulkB,GAAqBzxpB,KAAKs9oB,YAC1Ct9oB,KAAKu5iB,UAAUv5iB,KAAKM,OAAOuqqB,mBAE/BrzU,EAAUp8V,UAAUm1qB,yBAA2B,WAC3CvwqB,KAAKM,OAAO4rF,IAAIulkB,GAAqBzxpB,KAAKuwqB,0BAC1C,IAAIG,EAAO1wqB,KAAKM,OACZqwqB,EAAiBD,EAAKtsB,aAAal6mB,OAAO,SAAUu7B,GAAO,MAAoB,aAAbA,EAAI/+D,OACtEiqqB,EAAen0qB,OAAS,IACxBk0qB,EAAK5jB,qBAAsB,EAC3B9spB,KAAK4wqB,SAAWD,EAAe,GAAG5umB,MAClC/hE,KAAKo/pB,kBAAoBp/pB,KAAKM,OAAO0tD,aAAaoxmB,kBAC9C3hqB,EAAkBuC,KAAKo/pB,qBACvBp/pB,KAAKo/pB,kBAAoBp/pB,KAAK8pqB,+BAA+BttqB,QAE7DwD,KAAKurqB,eACLmF,EAAK72H,kBAAkBnziB,KAAO,WAC9BgqqB,EAAKlpnB,YAGLxnD,KAAKwwqB,yBAGRE,EAAK5jB,sBACN9spB,KAAK4wqB,SAAW,KAChB5wqB,KAAKwwqB,0BAGbh5U,EAAUp8V,UAAUo1qB,sBAAwB,WACxC,IAAIE,EAAO1wqB,KAAKM,OACZN,KAAKM,OAAOu5iB,kBAAkB6gH,kBAAoB16pB,KAAKM,OAAO6ppB,0BAA0B3tpB,OAAS,GACjGk0qB,EAAK9G,oBAAqB,EAC1B5pqB,KAAK6wqB,gCAEA7wqB,KAAKM,OAAO6ppB,0BAA0B3tpB,OAAS,GACpDk0qB,EAAK9G,oBAAqB,EAC1B5pqB,KAAK6wqB,iCAGLH,EAAK9G,oBAAqB,EAC1B5pqB,KAAK0oqB,sBAGblxU,EAAUp8V,UAAUy1qB,6BAA+B,WAC/C,IAAIH,EAAO1wqB,KAAKM,OAEhB,GADAN,KAAKiqqB,WAAajqqB,KAAKM,OAAO6ppB,0BAA0B,IACnDumB,EAAKx1d,sBAAwBl7M,KAAK4wqB,WAC9BF,EAAK9G,oBAAoE,IAA9CtrqB,OAAOhB,KAAK0C,KAAK0oqB,kBAAkBlsqB,SAC9Dk0qB,EAAK9G,oBAAqB,CAC/B,IAAIrtqB,EAAOyD,KAAKM,OAAOmipB,gBACnB9hlB,GAAQ,IAAIwH,IAAQO,MAAM1oE,KAAK4wqB,SAAU,SAAS,GAClDhlgB,EAAcrvK,EAAK23O,WAAYvzK,GAC/B8qU,EAAUzrY,KACdA,KAAKM,OAAO0hB,cACZ4pJ,EAAYsmC,KAAK,SAAUrxM,GACvB4qY,EAAQu6Q,YAAYnlpB,EAAE9B,QACtB0sY,EAAQqlS,0BACRrlS,EAAQnrY,OAAOyiB,kBAI3By0U,EAAUp8V,UAAU4qpB,YAAc,SAAUl/kB,GACxC,IAAK,IAAI5qE,EAAI,EAAGA,EAAI4qE,EAAItqE,OAAQN,IACxBuB,EAAkBuC,KAAK0oqB,iBAAiB5hmB,EAAI5qE,GAAG8D,KAAKiqqB,eAAiBnjmB,EAAI5qE,GAAG8D,KAAK4wqB,YACjF5wqB,KAAK0oqB,iBAAiB5hmB,EAAI5qE,GAAG8D,KAAKiqqB,aAAenjmB,EAAI5qE,GAAG8D,KAAK4wqB,WAGrE5wqB,KAAK6oqB,oBAAsB/hmB,GAE/B0wR,EAAUp8V,UAAU21qB,gBAAkB,SAAUtlnB,GAC5C,IAAKzrD,KAAKM,OAAOmipB,gBAAgB1qQ,WAC7B,GAAItsV,EACA,IAAK,IAAIrtD,EAAK,EAAGyE,EAAK7C,KAAKk0O,UAAW91O,EAAKyE,EAAGrG,OAAQ4B,IAAM,CACxD,IAAI7B,EAAOsG,EAAGzE,GACd4B,KAAK0oqB,iBAAiBnsqB,EAAKyD,KAAKiqqB,cAAe,OAInDjqqB,KAAK0oqB,qBAOjBlxU,EAAUp8V,UAAU84O,QAAU,WAC1B,OAAOl0O,KAAKM,OAAOmipB,gBAAgB72e,YAAYvjG,WAAWE,MAE9DivR,EAAUp8V,UAAU01qB,wBAA0B,WAC1C,IAAIlkc,EAAO5sO,KAAKM,OAAOi0pB,UACvB,GAAI3nb,EAAKpwO,OAAS,IAAMwD,KAAKM,OAAOspqB,oBAAsB5pqB,KAAK4wqB,UAAW,CAEtE,IAAK,IADD7vY,KACKr9Q,EAAI,EAAGA,EAAIkpN,EAAKpwO,OAAQknB,IAAK,CAClC,IAAI2lpB,EAASrpqB,KAAKspqB,UAAU18b,EAAKlpN,IAC7B4sJ,EAAO+4f,EAASA,EAAO9sqB,KAAKyD,KAAKiqqB,YAAc,KACnD,GAAa,OAAT35f,EACA,OAEJ,IAAI0ggB,OAAa,EACbxE,EAAS5/b,EAAKlpN,GAAG/gB,cAAc,kBAC/B3C,KAAK0oqB,iBAAiBp4f,IAAuC,UAA7BtwK,KAAKM,OAAOyspB,cAA4B/spB,KAAK2oqB,aAAapqqB,QAAQ+xK,GAAQ,GACzE,YAA7BtwK,KAAKM,OAAOyspB,cAA8B/spB,KAAK2oqB,aAAapqqB,QAAQ+xK,GAAQ,GAC/C,iBAA7BtwK,KAAKM,OAAOyspB,eAAoCtvpB,EAAkBuC,KAAK4wqB,WAAavH,EAAO9sqB,KAAKyD,KAAK4wqB,WACzG7vY,EAAQv8R,KAAKowB,SAASg4M,EAAKlpN,GAAG7Q,aAAa,iBAAkB,KAC7Dm+pB,GAAa,IAGbA,GAAa,EACThxqB,KAAKysqB,gBAAkBD,GAAUxsqB,KAAKM,OAAOwspB,qBAC7CnllB,GAAqB6kmB,EAAOzljB,mBAAoBiqjB,IAGxDhxqB,KAAKmsqB,wBAAwBv/b,EAAKlpN,GAAIstpB,GAE1ChxqB,KAAKurqB,eAAiBxqY,EAAQvkS,OAAS,EAAIwD,KAAKu5iB,UAAUx4Q,EAAQ,IAAI,GAAQ/gS,KAAKorqB,WAAWrqY,GAE9F/gS,KAAKM,OAAOwspB,qBAAuB9spB,KAAK8pqB,+BAA+BttqB,OAAS,GAChFwD,KAAK0sqB,oBAGbl1U,EAAUp8V,UAAUsgpB,YAAc,SAAU76oB,GACxC,GAAsB,SAAlBA,EAAEmpM,aAA0BhqM,KAAKM,OAAOspqB,mBAAoB,CAC5D,IAAIqH,EAAajxqB,KAAKM,OAAOU,QAAQ2B,cAAc,uBACnD,IAAKlF,EAAkBwzqB,GAAa,CAChC,IAAIvrmB,EAAM7/D,EAAQorqB,EAAY,gBAC9B,GAAIvrmB,EAAK,CACiC,WAAlC1lE,KAAKM,OAAO2lE,aAAa5lC,OACzBqlC,EAAM1lE,KAAKM,OAAOU,QAAQ2B,cAAc,kBAE5C,IAAI0mqB,EAASrpqB,KAAKspqB,UAAU5jmB,GAC5B,IAAK2jmB,EACD,OAEJrpqB,KAAK0oqB,iBAAiBW,EAAO9sqB,KAAKyD,KAAKiqqB,aAAeZ,EAAOrrmB,WAAaizmB,EAAWz+pB,aAGrFxS,KAAK4oqB,eAAiBqI,EAAWz+pB,WAKjDglV,EAAUp8V,UAAUugpB,eAAiB,SAAU96oB,GAC3C,IAAId,EAAQC,KACZ,GAAsB,SAAlBa,EAAEmpM,aAA0BhqM,KAAKM,OAAOspqB,mBAAoB,CAC5D,GAAiB,QAAb/oqB,EAAEmyD,QAAoBhzD,KAAK4oqB,eAAgB,CAC3C,IAAIS,EAASrpqB,KAAKM,OAAO8pqB,oBAAoBpqqB,KAAKM,OAAOi0pB,UAAU1zpB,EAAEg7jB,aAAahpjB,aAAa,aAC/F7S,KAAK0oqB,iBAAiBW,EAAO9sqB,KAAKyD,KAAKiqqB,aAAeZ,EAAOrrmB,WAAah+D,KAAK4oqB,eAEnF5oqB,KAAK8wqB,0BAEa,WAAlBjwqB,EAAEmpM,aAA4BhqM,KAAKM,OAAOspqB,qBAC1C/oqB,EAAEtE,KAAK8E,QAAQjC,QAAQ,SAAU7C,GACxBkB,EAAkBlB,EAAKwD,EAAMkqqB,cAC9BlqqB,EAAMusqB,oBAAoB/vqB,EAAKwD,EAAMkqqB,eAG7CjqqB,KAAK0sqB,mBACL1sqB,KAAKo/pB,kBAAoBp/pB,KAAKM,OAAO0tD,aAAaoxmB,oBAG1D5nU,EAAUp8V,UAAU81qB,YAAc,YACzBlxqB,KAAKM,OAAO46M,sBAAwBl7M,KAAKM,OAAOspqB,oBACjD5pqB,KAAK8wqB,2BAGbt5U,EAAUp8V,UAAU+1qB,qBAAuB,SAAUH,GACjD,IAAII,EAAYpxqB,KAAKs9pB,cACjB+T,EAAWrxqB,KAAKM,OAAOU,QAAQ2B,cAAc,eAWjD,GAVA3C,KAAKysqB,cAAgBzsqB,KAAKswqB,iBACtBU,GAAchxqB,KAAK8pqB,+BAA+BttqB,QAClDwD,KAAKmrqB,kBAAkBiG,EAAU3b,mBAAmB,GAAI2b,EAAU3b,mBAAmBz1pB,KAAK8pqB,+BAA+BttqB,SACzHwD,KAAKM,OAAOyspB,aAAe,UAG3B/spB,KAAK6jb,iBACL7jb,KAAKM,OAAOyspB,aAAe,WAE/B/spB,KAAK2oqB,gBACD3oqB,KAAKM,OAAOspqB,mBAAoB,CAEhC,IAAK,IADDh9b,EAAO5sO,KAAKM,OAAOi0pB,UACdr4pB,EAAI,EAAGA,EAAI0wO,EAAKpwO,OAAQN,IAC7B8D,KAAKmsqB,wBAAwBv/b,EAAK1wO,GAAI80qB,GAET,YAA7BhxqB,KAAKM,OAAOyspB,cACZ/spB,KAAK+wqB,iBAAgB,GACrB/wqB,KAAK6oqB,oBAAsB7oqB,KAAKM,OAAOmipB,gBAAgB1qQ,WAAa/3Y,KAAK6oqB,wBAEvC,UAA7B7oqB,KAAKM,OAAOyspB,eACjB/spB,KAAK+wqB,iBAAgB,GACrB/wqB,KAAK6oqB,oBAAuB7oqB,KAAKM,OAAOmipB,gBAAgB1qQ,WAAsC/3Y,KAAK6oqB,oBAA9B7oqB,KAAKk0O,UAAU7yO,SAG5F,IAAK5D,EAAkB4zqB,GAAW,CAE9B1pmB,GADiB0pmB,EAAS1uqB,cAAc,uBACRokH,mBAAoBiqjB,KAG5Dx5U,EAAUp8V,UAAUo6mB,eAAiB,SAAU/rO,GAC3C,IAAI1pY,EAAQC,KACRsxqB,EAAWtxqB,KAAKuxqB,kBAAkB9nS,GAClCh+U,EAAqB,UAAb6lnB,EACK,iBAAbA,IACA7lnB,EAAQzrD,KAAK8pqB,+BAA+BnroB,KAAK,SAAUpiC,GACvD,OAAOA,EAAKwD,EAAMkqqB,cAAelqqB,EAAM2oqB,oBAG/C1oqB,KAAKmxqB,sBAAsB1lnB,GAC3BzrD,KAAKmH,OAAS,KACVnH,KAAK8pqB,+BAA+BttqB,OAAS,GAC7CwD,KAAK0sqB,mBAET1sqB,KAAKwxqB,sBAAsB/nS,GAAWh+U,IAE1C+rS,EAAUp8V,UAAUm2qB,kBAAoB,SAAUvtqB,GAC9C,IAAIH,EAAUG,EAAMA,EAAI+iH,mBAAmBjjH,UACvC9D,KAAKswqB,iBAAiBvpjB,mBAAmBjjH,UAc7C,OAZID,EAAQM,SAAS,WACR,QAEJN,EAAQM,SAAS,aACb,UAEJN,EAAQM,SAAS,UACb,eAGA,QAIjBqzV,EAAUp8V,UAAUq2qB,YAAc,SAAUhoS,GACxC,IAAItiY,EAAStB,EAAQ7F,KAAKysqB,cAAe,cACzCzsqB,KACKwoqB,oBAAqB,EAC1B,IAAIpC,EAASxxoB,SAASztB,EAAOkN,cAAcxB,aAAa,iBAAkB,IACtE7S,KAAKM,OAAOspqB,oBAAsB5pqB,KAAKM,OAAOU,QAAQQ,iBAAiB,eAAehF,OAAS,KAC7F4pqB,EAENpmqB,KAAK0xqB,wBAAwBtL,EAAQxxoB,SAASztB,EAAO0L,aAAa,iBAAkB,KACpF7S,KAAK2xqB,0BAA0B9rqB,EAAQsB,EAAQ,WAC/CnH,KAAK0sqB,mBACL1sqB,KAAKwoqB,oBAAqB,EAC1BxoqB,KAAKwxqB,sBAAsB/nS,EAAUA,EAAS1iR,mBAAmBjjH,UAAUK,SAAS,aAExFqzV,EAAUp8V,UAAUu2qB,0BAA4B,SAAUjsmB,GACtD,GAAiC,UAA7B1lE,KAAKM,OAAOyspB,cAAyD,YAA7B/spB,KAAKM,OAAOyspB,aAA4B,CAChF,IAAIsc,EAASrpqB,KAAKspqB,UAAU5jmB,GACxB4qG,EAAO+4f,GAAUA,EAAO9sqB,KAAO8sqB,EAAO9sqB,KAAKyD,KAAKiqqB,YAAc,KAClE,IAAK35f,EACD,OAEAtwK,KAAK2oqB,aAAapqqB,QAAQ+xK,GAAQ,EAClCtwK,KAAK2oqB,aAAankqB,KAAK8rK,GAGvBtwK,KAAK2oqB,aAAahgpB,OAAO3oB,KAAK2oqB,aAAapqqB,QAAQ+xK,GAAO,KAItEknL,EAAUp8V,UAAUo2qB,sBAAwB,SAAU/nS,EAAUunS,GAC5DhxqB,KAAKM,OAAOqmB,Q5B7zCQ,kB4B8zChBnU,QAASw+pB,EAAY5I,mBAAoBpoqB,KAAKM,OAAOuspB,wBACrD1lpB,OAAQsiY,IAEPzpY,KAAKM,OAAOqxnB,SACb3xnB,KAAKysqB,cAAgB,OAG7Bj1U,EAAUp8V,UAAUw2qB,uBAAyB,SAAU9/pB,GACnD,GAAI9R,KAAKM,OAAOwspB,qBAAuB9spB,KAAKM,OAAO46M,uBAAyBl7M,KAAKM,OAAOmipB,gBAAgB1qQ,WACpG,GAAiC,UAA7B/3Y,KAAKM,OAAOyspB,aAA0B,CACtC/spB,KAAKooqB,sBACL,IAAK,IAAI7rqB,EAAO,EAAGA,EAAOyD,KAAKk0O,UAAU13O,OAAQD,IAC7CyD,KAAKooqB,mBAAmB5jqB,KAAKjI,QAGhC,GAAiC,YAA7ByD,KAAKM,OAAOyspB,aACjB/spB,KAAKooqB,2BAGL,GAAIt2pB,GAA4E,UAAnE9R,KAAKM,OAAOi1pB,cAAczjpB,GAAOe,aAAa,iBAA8B,CACrF,IAAIg/pB,EAAc7xqB,KAAKooqB,mBAAmB7pqB,QAAQuT,GAClD9R,KAAKooqB,mBAAmBz/oB,OAAOkppB,EAAa,KAM5Dr6U,EAAUp8V,UAAUsxqB,iBAAmB,SAAU56pB,EAAOkY,GACpD,GAAIhqB,KAAKM,OAAOwspB,qBAAsE,oBAA/C9spB,KAAKM,OAAOu5iB,kBAAkB42H,aAAoC,CACrG,IAAIqB,EAAaxzqB,OAAOhB,KAAK0C,KAAK0oqB,kBAAkBlsqB,OAKpD,GAJKwD,KAAKM,OAAOspqB,qBACbkI,EAAa9xqB,KAAKsoqB,gBAAgB9rqB,OAClCwD,KAAKo/pB,kBAAoBp/pB,KAAK8pqB,+BAA+BttqB,QAE7DwD,KAAKswqB,iBAAkB,CACvB,IAAIyB,EAAU/xqB,KAAKswqB,iBAAiBvpjB,mBACpC1iH,GAAa0tqB,IAAW,UAAW,SAAU,cACzCD,IAAe9xqB,KAAKo/pB,mBAAqBp/pB,KAAKo/pB,mBAAsBp/pB,KAAKM,OAAO46M,uBAC5El7M,KAAKM,OAAO0opB,cAAgBhppB,KAAKM,OAAOmipB,gBAAgB1qQ,YAAc+5R,IAAe9xqB,KAAKk0O,UAAU13O,QACxGmH,GAAUouqB,IAAW,YACjB/npB,GACAhqB,KAAKs9pB,cAAc9gc,aAAa,MAAM,GAAM,GAEhDx8N,KAAKM,OAAOyspB,aAAe,SAEP,IAAf+kB,GAAmE,IAA/C9xqB,KAAK8pqB,+BAA+BttqB,QAC7DmH,GAAUouqB,IAAW,cACjB/npB,GACAhqB,KAAKs9pB,cAAc9gc,aAAa,MAAM,GAAO,GAEjDx8N,KAAKM,OAAOyspB,aAAe,UACR,IAAf+kB,GAAmE,IAA/C9xqB,KAAK8pqB,+BAA+BttqB,OACxDmH,GAAUouqB,EAAQ19pB,gBAAiB,wBAGnChQ,GAAa0tqB,EAAQ19pB,gBAAiB,0BAI1C1Q,GAAUouqB,IAAW,WACrB/xqB,KAAKM,OAAOyspB,aAAe,iBAE3B/spB,KAAKM,OAAO46M,sBAAyBl7M,KAAKM,OAAO0opB,aAAgBhppB,KAAKM,OAAOmipB,gBAAgB1qQ,YAC7F/3Y,KAAK4xqB,uBAAuB9/pB,MAK5C0lV,EAAUp8V,UAAUwqH,aAAe,SAAU/kH,GACzC,IAAIsG,EAAStG,EAAEsG,OACfnH,KAAKwoqB,mBAAqB3nqB,EAAEqnB,SAAWloB,KAAKyoqB,uBAC5CzoqB,KAAKuoqB,oBAAsB1nqB,EAAEw8G,SAC7Br9G,KAAKgyqB,kBAAkBnxqB,GACvB,IAAIoxqB,GAAY,EAChBjyqB,KAAKyqN,cAAe,EACpB,IAAIg/K,EACAmG,EAAYr2U,GAAapyD,EAAQ,sBAMrC,GALIyoY,GAAaA,EAAUpuY,iBAAiB,oCAAoChF,OAAS,IACrFitY,EAAWmG,EAAUjtY,cAAc,0BACnCsvqB,GAAY,IAEhB9qqB,EAASoyD,GAAapyD,EAAQ,eACfA,EAAOkN,cAAcvQ,UAAUK,SAAS,WAAanE,KAAKM,OAAOu5iB,kBAAkBq4H,cAAiBD,EAAW,CAK1H,GAJIjyqB,KAAKM,OAAOwspB,sBACZ9spB,KAAKwoqB,oBAAqB,GAE9BxoqB,KAAKmH,OAASA,EACT1J,EAAkBgsY,GAUlB,CACD,IAAI28R,EAASxxoB,SAASztB,EAAOkN,cAAcxB,aAAa,iBAAkB,IACtE7S,KAAKM,OAAOspqB,oBAAsB5pqB,KAAKM,OAAOU,QAAQQ,iBAAiB,eAAehF,OAAS,KAC7F4pqB,EAENpmqB,KAAK0xqB,wBAAwBtL,EAAQxxoB,SAASztB,EAAO0L,aAAa,iBAAkB,KAChF7S,KAAKM,OAAOwspB,sBACZ9spB,KAAK2xqB,0BAA0B9rqB,EAAQsB,EAAQ,WAC/CnH,KAAK0sqB,yBAjBT1sqB,KAAKysqB,cAAgBhjS,EACjBA,EAAS3lY,UAAUK,SAAS,oBAC5BnE,KAAKw1mB,eAAe/rO,IAGpBzpY,KAAKyxqB,YAAYhoS,GACjBzpY,KAAKmH,OAAStB,EAAQsB,EAAQ,eAcjCnH,KAAKM,OAAOwspB,sBAAuBthpB,GAAQqb,UAAa7mB,KAAKurqB,eAC9DvrqB,KAAKw1N,UAAU30N,GAGvBb,KAAKwoqB,oBAAqB,EAC1BxoqB,KAAKuoqB,qBAAsB,EAC3BvoqB,KAAKyqN,cAAe,GAExB+sI,EAAUp8V,UAAU42qB,kBAAoB,SAAUnxqB,GAC9C,IAAIsG,EAAStG,EAAEsG,OACXtB,EAAQsB,EAAQ,kBAAoBtG,EAAEsG,OAAOrD,UAAUK,SAAS,cAChE0B,EAAQsB,EAAQ,gBACZA,EAAOrD,UAAUK,SAAS,iBACrBgD,EAAOrD,UAAUK,SAAS,kBAK3BgD,EAAOrD,UAAUS,OAAO,iBACxBvE,KAAKyoqB,wBAAyB,EAC9BzoqB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAMosC,QAAU,SANlE3pC,EAAOrD,UAAUM,IAAI,iBACrBpE,KAAKyoqB,wBAAyB,IAUtCzoqB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAMosC,QAAU,QAG1E0mT,EAAUp8V,UAAUo6N,UAAY,SAAU30N,GACtC8iE,GAAkB3jE,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAiB9B,EAAG,yCAClEb,KAAKurqB,gBAAkBvrqB,KAAKsoqB,gBAAgB9rqB,QAAUwD,KAAKM,OAAOixpB,mBAAqB,EAAI,IACtFvxpB,KAAKqoqB,uBAAuB7rqB,OAAS,GAAK,iBAAmB,MAE5Eg7V,EAAUp8V,UAAUs2qB,wBAA0B,SAAUzic,EAAUskF,IACxDvzT,KAAKwoqB,qBAAuBxoqB,KAAKuoqB,qBAAwBvoqB,KAAKurqB,eAC3DvrqB,KAAKsvqB,WACNtvqB,KAAKu5iB,UAAUtqU,GAAU,GAE7BjvO,KAAK25iB,YAAa1qU,SAAUA,EAAUskF,UAAWA,IAAa,IAEzDvzT,KAAKuoqB,qBACNvoqB,KAAKM,OAAOwspB,sBAAyB9spB,KAAKM,OAAOwspB,sBAAwB9spB,KAAKmH,OAAOrD,UAAUK,SAAS,gBACxGnE,KAAKmrqB,kBAAkBhuqB,EAAY6C,KAAKwqqB,cAAgBv7b,EAAWjvO,KAAKwqqB,aAAcv7b,GAGtFjvO,KAAK0rqB,oBAAoBz8b,IAE7BjvO,KAAKguqB,mBAAmB7wqB,EAAY6C,KAAKmtqB,YAAel+b,SAAUA,EAAUskF,UAAWA,GAAcvzT,KAAKmtqB,WAAal+b,SAAUA,EAAUskF,UAAWA,MAGtJvzT,KAAK0rqB,oBAAoBz8b,IACzBjvO,KAAKyuqB,sBAAuBx/b,SAAUA,EAAUskF,UAAWA,MAE/DvzT,KAAKsvqB,WAAY,GAErB93U,EAAUp8V,UAAU40qB,cAAgB,SAAUnvqB,GAC1C,GAAIb,KAAKM,OAAOyypB,YAAclypB,EAAEga,UAAU6R,UAAY7rB,EAAEoiqB,MACpD,GAAyB,YAArBpiqB,EAAEyiqB,QAAQtwmB,OACNhzD,KAAKM,OAAOipmB,eACZ1omB,EAAEwjqB,OAA+B,UAAtBxjqB,EAAEG,QAAQgC,QAGrBnC,EAAEwjqB,OAA+B,OAAtBxjqB,EAAEG,QAAQgC,aAIzB,GAAyB,cAArBnC,EAAEyiqB,QAAQtwmB,OAAwB,CAClC,IAAI+6mB,EAAO32oB,OAAOv2B,EAAEG,QAAQqT,cAAcxB,aAAa,kBACvDhS,EAAEwjqB,OAAkB,IAAT0J,MAGc,aAArBltqB,EAAEyiqB,QAAQtwmB,SACVnyD,EAAEwjqB,QAAS,GAK3B,IAAI53mB,EAAQzsD,KAAKM,OAAOixpB,oBAAwB1wpB,EAAEga,UAAU6R,UAAkC,OAAtB7rB,EAAEG,QAAQgC,SAAoBnC,EAAEwjqB,SAClGxjqB,EAAEga,UAAU0hH,WAAmC,OAAtB17H,EAAEG,QAAQgC,YAAuBnC,EAAEga,UAAU8spB,cAAsC,OAAtB9mqB,EAAEG,QAAQgC,aAC7FnC,EAAEoiqB,OAA8B,UAArBpiqB,EAAEyiqB,QAAQtwmB,SAAyBnyD,EAAEga,UAAU6R,UAAY7rB,EAAEwjqB,QAC5ExjqB,EAAEga,UAAU0hH,YAAc17H,EAAEga,UAAU8spB,iBAAoB9mqB,EAAEoiqB,OAA8B,UAArBpiqB,EAAEyiqB,QAAQtwmB,QAChFm/mB,EAAgBtxqB,EAAEga,UAAU6R,UAAkC,OAAtB7rB,EAAEG,QAAQgC,UAAqB6C,EAAQhF,EAAEG,QAAS,iBACrFH,EAAEoiqB,OAA8B,UAArBpiqB,EAAEyiqB,QAAQtwmB,QAC9B,GAAKnyD,EAAEoiqB,QAASx2mB,EAAhB,CAMA,IAAI5pD,EAAKhC,EAAEga,UAAU0hH,UAAY17H,EAAEga,UAAUkmR,QAAUlgS,EAAEkgS,QAAS9xD,EAAWpsO,EAAG,GAAI0wT,EAAY1wT,EAAG,GAC/FoiC,EAAOjlC,KAAKkC,MAAM8jqB,iBACtB,GAAIhmqB,KAAKM,OAAOyypB,WAAY,CACxB,GAAIlypB,EAAEga,UAAU6R,WAAmC,OAAtB7rB,EAAEG,QAAQgC,SAAoB6C,EAAQhF,EAAEG,QAAS,eAAgB,CAC1F,IAAIoxqB,EAAQpyqB,KAAKM,OAAO2zpB,iBAAiBtxpB,cAAc,SAASunE,kBAChE+kK,GAAYmjc,EACZntoB,EAAKgqM,SAAWhqM,EAAKgqM,SAAWhqM,EAAKgqM,SAAWmjc,EAAQ,UAGxDnjc,GAAYjvO,KAAKM,OAAOyypB,WACxB9tnB,EAAKgqM,SAA6B,IAAlBhqM,EAAKgqM,UAAmBxxO,EAAkBwnC,EAAKgqM,UAAqD,KAAzChqM,EAAKgqM,SAAWjvO,KAAKM,OAAOyypB,WAE3G,GAAI/ypB,KAAKM,OAAOixpB,mBAAoB,CAChC,IAAItrf,EAAO7uI,OAAOv2B,EAAEG,QAAQ6R,aAAa,kBACzCoyB,EAAKsuR,UAAYtuR,EAAKsuR,UAAatuR,EAAKsuR,YAAcA,EAAYttJ,EAAOA,EAAO,EAAK,KACrFstJ,EAAYttJ,GAGpB,KAAIksgB,IAAwE,KAAtD,YAAa,UAAU5zqB,QAAQsC,EAAEyiqB,QAAQtwmB,SAAuC,UAArBnyD,EAAEyiqB,QAAQtwmB,QACvFi8K,IAAahqM,EAAKgqM,UAAYskF,IAActuR,EAAKsuR,WADrD,CAKA,OADAvzT,KAAKyqN,cAAe,EACZ5pN,EAAEyiqB,QAAQtwmB,QACd,IAAK,YACL,IAAK,UACL,IAAK,QACL,IAAK,aACDhzD,KAAKqyqB,eAAepjc,EAAUskF,GAC9B,MACJ,IAAK,aACL,IAAK,YACDvzT,KAAKsyqB,kBAAkBrjc,EAAUskF,GACjC,MACJ,IAAK,YACL,IAAK,UACDvzT,KAAKuyqB,aAAatjc,EAAUskF,GAC5B,MACJ,IAAK,YACL,IAAK,aACDvzT,KAAKwyqB,uBAAuBvjc,EAAUskF,GACtC,MACJ,IAAK,OACL,IAAK,MACDA,EAAiC,QAArB1yT,EAAEyiqB,QAAQtwmB,OAAmBhzD,KAAKquqB,gBAAgBp/b,GAAY,EAC1EjvO,KAAKyyqB,gBAAgBxjc,EAAUskF,GAC/B,MACJ,IAAK,WACL,IAAK,UACDvzT,KAAK0yqB,oBAAoBzjc,EAAUskF,GACnC,MACJ,IAAK,SACDvzT,KAAK6jb,iBACL,MACJ,IAAK,YACD7jb,KAAK2yqB,YACL,MACJ,IAAK,QACD3yqB,KAAK4yqB,oBAAoB/xqB,EAAEG,SAGnChB,KAAKyqN,cAAe,QAlEZh+J,IAAUzsD,KAAKM,OAAOwspB,qBACtB9spB,KAAK6jb,kBAwEjBrsF,EAAUp8V,UAAUu3qB,UAAY,WACxB3yqB,KAAKqqqB,cAAgBrqqB,KAAKurqB,eAC1BvrqB,KAAKmrqB,kBAAkB,EAAGnrqB,KAAKM,OAAOi0pB,UAAU/3pB,OAAS,GAEzDwD,KAAKitqB,eAAiBjtqB,KAAKurqB,eAC3BvrqB,KAAKguqB,oBAAqB/+b,SAAU,EAAGskF,UAAW,IAAOtkF,SAAUjvO,KAAKM,OAAOi0pB,UAAU/3pB,OAAS,EAAG+2T,UAAWvzT,KAAKM,OAAO8jpB,aAAa5npB,OAAS,KAG1Jg7V,EAAUp8V,UAAUw3qB,oBAAsB,SAAUzrqB,GAC5CA,EAAOrD,UAAUK,SAAS,qBAC1BnE,KAAKysqB,cAAgBtlqB,EACrBnH,KAAKw1mB,eAAex1mB,KAAKysqB,gBAGrBtlqB,EAAOrD,UAAUK,SAAS,mBAC1BnE,KAAKysqB,cAAgBtlqB,EACrBnH,KAAKyxqB,YAAYzxqB,KAAKysqB,iBAIlCj1U,EAAUp8V,UAAUi3qB,eAAiB,SAAUpjc,EAAUskF,GACrD,IAAIg1V,EAAOvopB,KAAKM,OACZN,KAAKM,OAAOwspB,qBAAoD,UAA7B9spB,KAAKM,OAAOyspB,eAA6B/spB,KAAK65iB,kBAAkB6gH,mBACnG16pB,KAAKmxqB,sBAAqB,GAC1BnxqB,KAAKysqB,cAAgB,MAErBzsqB,KAAKqqqB,cACDrqqB,KAAKM,OAAOyypB,WACZ/ypB,KAAKu5iB,UAAUtqU,GAAU,GACzBjvO,KAAK6yqB,YAAYtqB,EAAKsiB,mBAO1B7qqB,KAAKitqB,cACLjtqB,KAAK25iB,YAAa1qU,SAAUA,EAAUskF,UAAWA,IAAa,IAGtEikC,EAAUp8V,UAAUy3qB,YAAc,SAAU5jc,GACxC,KAAIA,EAAW,GAAf,CAGKjvO,KAAKmH,SACNnH,KAAKmH,OAASnH,KAAKM,OAAOi0pB,UAAU,GAAGn6oB,SAASpa,KAAKM,OAAO2opB,cAAc5llB,QAAQ7mE,QAAU,IAEhG,IAAI6pqB,EAASzxoB,SAAS50B,KAAKmH,OAAO0L,aAAa,iBAAkB,IAC7Dm3D,EAAUhqE,KAAKM,OAAOixpB,mBAGlBvxpB,KAAKmH,OAFT6iE,GACIq8lB,GAAUr8lB,EAENhqE,KAAKu9pB,gBAAgB7H,qBAAqBzmb,GAAUztO,iBAAiB,cAAc6kqB,EAASr8lB,GAOtFhqE,KAAKu9pB,gBAAgBhI,cAActmb,GAAUztO,iBAAiB,cAAc6kqB,GAE9FrmqB,KAAKm0P,aAAan0P,KAAKmH,UAE3BqwV,EAAUp8V,UAAUk3qB,kBAAoB,SAAUrjc,EAAUskF,GAC7CvzT,KAAKM,OACZN,KAAKitqB,eACLjtqB,KAAK25iB,YAAa1qU,SAAUA,EAAUskF,UAAWA,IAAa,GAC9DvzT,KAAKm0P,aAAan0P,KAAKmH,UAG/BqwV,EAAUp8V,UAAUq3qB,gBAAkB,SAAUxjc,EAAUskF,GAClDvzT,KAAKitqB,aACLjtqB,KAAK25iB,YAAa1qU,SAAUA,EAAUskF,UAAWA,IAAa,GAG9DvzT,KAAKm0P,aAAan0P,KAAKM,OAAO4sqB,iBAAiBj+b,EAAUskF,KAQjEikC,EAAUp8V,UAAUm3qB,aAAe,SAAUtjc,EAAUskF,GACxCvzT,KAAKM,OAChBN,KAAKuoqB,qBAAsB,EACvBvoqB,KAAKqqqB,cAAgBrqqB,KAAKurqB,gBACrBpuqB,EAAY6C,KAAKwqqB,cAKlBxqqB,KAAKu5iB,UAAU,GAAG,IAJlBv5iB,KAAKmrqB,kBAAkBnrqB,KAAKwqqB,aAAcv7b,GAC1CjvO,KAAK6yqB,YAAY5jc,KAMrBjvO,KAAKitqB,eAAiBjtqB,KAAKurqB,eAC3BvrqB,KAAKguqB,mBAAmBhuqB,KAAKmtqB,YAAel+b,SAAU,EAAGskF,UAAW,IAAOtkF,SAAUA,EAAUskF,UAAWA,IAE9GvzT,KAAKuoqB,qBAAsB,GAE/B/wU,EAAUp8V,UAAUo3qB,uBAAyB,SAAUvjc,EAAUskF,GAClDvzT,KAAKM,OAChBN,KAAKuoqB,qBAAsB,EAC3BvoqB,KAAKguqB,mBAAmBhuqB,KAAKmtqB,WAAal+b,SAAUA,EAAUskF,UAAWA,IACzEvzT,KAAKuoqB,qBAAsB,GAE/B/wU,EAAUp8V,UAAUs3qB,oBAAsB,SAAUzjc,EAAUskF,GACtDvzT,KAAKqqqB,cACLrqqB,KAAKu5iB,UAAUtqU,GAAU,GACzBjvO,KAAKm0P,aAAan0P,KAAKM,OAAO4sqB,iBAAiBj+b,EAAUskF,KAEzDvzT,KAAKitqB,cACLjtqB,KAAK25iB,YAAa1qU,SAAUA,EAAUskF,UAAWA,IAAa,IAGtEikC,EAAUp8V,UAAU2wqB,uBAAyB,SAAUrmmB,EAAKkkU,EAAOpjP,GAE/D,IAAK,IADDvmJ,KACK7B,EAAK,EAAGA,EAAKY,UAAUxC,OAAQ4B,IACpC6B,EAAK7B,EAAK,GAAKY,UAAUZ,GAE7B,GAAIsnE,EAAK,CACL,IAAIkB,KAAWvlE,MAAMC,KAAKokE,EAAIlkE,iBAAiB,eAC3CumE,EAAOrC,EAAI/iE,cAAc,yBAA2B+iE,EAAI/iE,cAAc,sBACtEolE,GACAnB,EAAMpiE,KAAKujE,GAEfpB,GAAuBrrE,WAAM,GAASsrE,EAAOgjU,GAAOpvX,OAAOva,IAE/DD,KAAKs9pB,cAAc9gc,aAAa92J,EAAMA,EAAI7yD,aAAa,YAAc,KAAM+2X,EAAOpjP,IAEtFgxM,EAAUp8V,UAAUivqB,UAAY,WAC5B,MAAuC,QAAhCrqqB,KAAK65iB,kBAAkBx5gB,MAAkD,SAAhCrgC,KAAK65iB,kBAAkBx5gB,MAE3Em3T,EAAUp8V,UAAU6xqB,WAAa,WAC7B,MAAuC,SAAhCjtqB,KAAK65iB,kBAAkBx5gB,MAAmD,SAAhCrgC,KAAK65iB,kBAAkBx5gB,MAE5Em3T,EAAUp8V,UAAUmwqB,YAAc,WAC9B,MAAuC,WAAhCvrqB,KAAK65iB,kBAAkBnziB,MAElC8wV,EAAUp8V,UAAUkiqB,YAAc,WAI9B,OAHI7/pB,EAAkBuC,KAAKu9pB,mBACvBv9pB,KAAKu9pB,gBAAkBv9pB,KAAKipqB,QAAQ3L,YAAYjc,GAAWmc,UAExDx9pB,KAAKu9pB,iBAMhB/lU,EAAUp8V,UAAU03qB,mBAAqB,WASrC,OAPK9yqB,KAAK65iB,kBAAkB6gH,iBAKT16pB,KAAK6oqB,oBAJL7oqB,KAAKM,OAAOyyqB,gBAAgB7ooB,OAAO,SAAUw7B,GAAO,OAAOA,EAAI1H,aACzEtmC,IAAI,SAAU0/C,GAAK,OAAOA,EAAE76E,QAOzCi7V,EAAUp8V,UAAUg1qB,0BAA4B,WAC5CpwqB,KAAKM,OAAOwrF,GAAGwzkB,GAAkBt/pB,KAAKu9oB,UAAWv9oB,MACjDA,KAAKgzqB,oBAAsBhzqB,KAAKkxqB,YAAY71qB,KAAK2E,MACjDA,KAAKM,OAAO7D,iBAAiBi1pB,GAAkB1xpB,KAAKgzqB,qBACpDhzqB,KAAKM,OAAOwrF,GAAG2lkB,GAAqBzxpB,KAAKuwqB,yBAA0BvwqB,MACnEA,KAAKizqB,mBAAqBjzqB,KAAKkzqB,sBAAsB73qB,KAAK2E,MAC1DA,KAAKM,OAAO7D,iBAAiBkqpB,GAAuB3mpB,KAAKizqB,oBACzDjzqB,KAAKM,OAAOwrF,GAAGqnlB,GAAcnzqB,KAAK4lH,aAAc5lH,OAEpDw3V,EAAUp8V,UAAUi1qB,6BAA+B,WAC/CrwqB,KAAKM,OAAO4rF,IAAIozkB,GAAkBt/pB,KAAKu9oB,WACvCv9oB,KAAKM,OAAO3D,oBAAoB+0pB,GAAkB1xpB,KAAKgzqB,qBACvDhzqB,KAAKM,OAAO3D,oBAAoBgqpB,GAAuB3mpB,KAAKizqB,oBAC5DjzqB,KAAKM,OAAO4rF,IAAIinlB,GAAcnzqB,KAAK4lH,eAEvC4xO,EAAUp8V,UAAUmipB,UAAY,SAAU18oB,GAChB,kBAAlBA,EAAEmpM,aAAoChqM,KAAKM,OAAOspqB,qBAClD5pqB,KAAKgpqB,WAAY,EACjBhpqB,KAAK6jb,iBACL7jb,KAAKgpqB,WAAY,IAGzBxxU,EAAUp8V,UAAU83qB,sBAAwB,SAAUryqB,GAC5B,SAAlBA,EAAEmpM,aAA0BhqM,KAAKM,OAAOspqB,oBACxC5pqB,KAAK8wqB,2BAGNt5U,KC71DPr3R,GAAwB,WAKxB,SAASA,EAAO7/D,GACZN,KAAKM,OAASA,EACdN,KAAKvD,mBAsGT,OA7FA0jE,EAAO/kE,UAAUsxK,OAAS,SAAU0mgB,GAChC,IAAI7qB,EAAOvopB,KAAKM,OAChB8yqB,EAAe31qB,EAAkB21qB,GAAgB,GAAKA,EAClDrtmB,GAAgBwilB,GAChBA,EAAKx6oB,OAAOy2oB,IAAuBj+oB,SAAUvG,KAAMxE,QAASwE,KAAK0sK,OAAQw/F,KAAMkna,IAG/EA,IAAiB7qB,EAAKgB,eAAelspB,KACrCkrpB,EAAKgB,eAAelspB,IAAM+1qB,EAAalmqB,WACvCq7oB,EAAK/gmB,YAEAxnD,KAAKqzqB,eACV9qB,EAAK95lB,WAMb0R,EAAO/kE,UAAUqB,iBAAmB,WAC5BuD,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAOwrF,GAAGgklB,GAA4B9vqB,KAAK2tF,kBAAmB3tF,MACnEA,KAAKM,OAAOwrF,GAAGwnlB,GAAuBtzqB,KAAKuzqB,iBAAkBvzqB,MAC7DA,KAAKM,OAAOwrF,GAAGq8jB,GAAgBnopB,KAAKqS,QAASrS,MAC7CA,KAAKizqB,mBAAqBjzqB,KAAKilmB,iBAAiB5pmB,KAAK2E,MACrDA,KAAKM,OAAO7D,iBAAiBkqpB,GAAuB3mpB,KAAKizqB,oBACzDjzqB,KAAKM,OAAOwrF,GAAG6xkB,GAAoB39pB,KAAKwzqB,iBAAkBxzqB,QAK9DmgE,EAAO/kE,UAAUuB,oBAAsB,WAC/BqD,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAO4rF,IAAI4jlB,GAA4B9vqB,KAAK2tF,mBACjD3tF,KAAKM,OAAO4rF,IAAIonlB,GAAuBtzqB,KAAKuzqB,kBAC5CvzqB,KAAKM,OAAO4rF,IAAIi8jB,GAAgBnopB,KAAKqS,SACrCrS,KAAKM,OAAO3D,oBAAoBgqpB,GAAuB3mpB,KAAKizqB,oBAC5DjzqB,KAAKM,OAAO4rF,IAAIyxkB,GAAoB39pB,KAAKwzqB,oBAO7CrzmB,EAAO/kE,UAAUiX,QAAU,WACvBrS,KAAKrD,uBAKTwjE,EAAO/kE,UAAUuyF,kBAAoB,SAAU9sF,GACvCA,EAAEy2F,SAAWt3F,KAAK+hC,kBAGjBtkC,EAAkBoD,EAAEoC,WAAW5F,KAMhC2C,KAAKM,OAAOyN,OAAOiypB,IACfh2d,YAAa,YAAatjM,KAAMo9oB,KANpC9jpB,KAAKM,OAAOyN,OAAOiypB,IACfh2d,YAAa,YAAatjM,KAAMo9oB,GAAoBsvB,aAAcpzqB,KAAKM,OAAOippB,eAAelspB,QAczG8iE,EAAO/kE,UAAUm4qB,iBAAmB,SAAU1yqB,GAC1Cb,KAAKM,OAAOqmB,QAAQggoB,GAAuBjopB,EAAOmC,GAC9CuyqB,aAAcpzqB,KAAKM,OAAOippB,eAAelspB,IAAK2sM,YAAa,YAAatjM,KAAMigpB,OAGtFxmlB,EAAO/kE,UAAU6pmB,iBAAmB,SAAUpkmB,GAC1Cb,KAAKqzqB,cAAkC,cAAlBxyqB,EAAEmpM,aAE3B7pI,EAAO/kE,UAAUo4qB,iBAAmB,SAAU3yqB,GACpB,cAAlBA,EAAEmpM,aACFhqM,KAAKM,OAAO0G,eAAgBuipB,gBAAkBlspB,IAAK,MAAQ,IAOnE8iE,EAAO/kE,UAAU2mC,cAAgB,WAC7B,MAAO,UAEJo+B,KC7GPszmB,GAA0B,WAK1B,SAASA,EAASnzqB,GACdN,KAAKM,OAASA,EA6ElB,OArEAmzqB,EAASr4qB,UAAUo8H,KAAO,SAAUoshB,EAAY8vB,GAC5C,IAAIp2qB,EAAO0C,KAAK2zqB,gBAAgB/vB,GAC5BvglB,EAAUrjE,KAAKokpB,WAAW9mpB,EAAMo2qB,GACpC1zqB,KAAKM,OAAOyN,OAAOmxpB,IAAyB5nkB,OAAQ,SACpDj0B,EAAQjkE,QAAQ,SAAUrC,GACtBA,EAAMu6B,SAAU,IAEpBt3B,KAAKiypB,WAAW5ulB,IAQpBowmB,EAASr4qB,UAAUusF,KAAO,SAAUi8jB,EAAYgwB,GAC5C,IAAIt2qB,EAAO0C,KAAK2zqB,gBAAgB/vB,GAC5BvglB,EAAUrjE,KAAKokpB,WAAW9mpB,EAAMs2qB,GACpC5zqB,KAAKM,OAAOyN,OAAOmxpB,IAAyB5nkB,OAAQ,SACpDj0B,EAAQjkE,QAAQ,SAAUrC,GACtBA,EAAMu6B,SAAU,IAEpBt3B,KAAKiypB,WAAW5ulB,IAEpBowmB,EAASr4qB,UAAUu4qB,gBAAkB,SAAUt2qB,GAQ3C,MANmB,iBAARA,GACMA,GAGDA,GAIpBo2qB,EAASr4qB,UAAUgppB,WAAa,SAAU9mpB,EAAMu2qB,GAC5C,IAAI9zqB,EAAQC,KASZ,OARcsiE,GAAqBhlE,EAAM,SAAUD,EAAKyU,GACpD,OAAOwwD,GAAqBviE,EAAMO,OAAO8jpB,aAAc,SAAUnmoB,EAAMnM,GACnE,GAAImM,EAAK41pB,KAAcx2qB,EACnB,OAAO4gB,IAGZ,MAUXw1pB,EAASr4qB,UAAU62pB,WAAa,SAAU5ulB,GAClC0C,GAAgB/lE,KAAKM,QACrBN,KAAKM,OAAOyN,OAAOy2oB,IACfj+oB,SAAUvG,KAAMxE,QAASwE,KAAKiypB,WAC9B/lZ,KAAM7oM,KAIdA,EAAU5lE,EAAkB4lE,GAAWrjE,KAAKM,OAAO8jpB,aAAe/glB,EAC9DrjE,KAAKM,OAAOwzqB,gBAAkB9zqB,KAAKM,OAAOwyqB,qBAAqBt2qB,QAC/DwD,KAAKM,OAAOujb,iBAEhB7jb,KAAKM,OAAOyN,OAAOikpB,GAAgC3ulB,GACf,QAAhCrjE,KAAKM,OAAOmopB,iBACZzopB,KAAKM,OAAOmuD,YAGbglnB,KChFPM,GAAwB,WAKxB,SAASA,EAAOzzqB,GACZN,KAAKg0qB,cAAgB,EAErBh0qB,KAAK8zH,gBAAmBpnH,IAAK,EAAGF,KAAM,GACtCxM,KAAKi0qB,cAAe,EACpBj0qB,KAAKM,OAASA,EACdN,KAAKu2pB,aAAe,IAAIyK,GAAmB1gqB,GAC3CN,KAAKvD,mBA8VT,OAxVAs3qB,EAAO34qB,UAAU2mC,cAAgB,WAC7B,MAAO,UAKXgyoB,EAAO34qB,UAAUi1I,SAAW,WACxBrwI,KAAKM,OAAOU,QAAQ0D,MAAMsR,MAAQzT,EAAWvC,KAAKM,OAAO0V,OACrDhW,KAAKM,OAAO4zqB,eAAiBl0qB,KAAKM,OAAO4zqB,cAAc32R,SACvDv9Y,KAAKM,OAAO4zqB,cAAc32R,QAAQv8Y,SAClChB,KAAKM,OAAO4zqB,cAAc32R,QAAQr0B,mBAM1C6qT,EAAO34qB,UAAUwwY,UAAY,WACzB,IAAIuoS,EAAa,EACb73oB,EAAUt8B,KAAKM,OAAOkxD,aAAax0C,WACnChd,KAAKM,OAAOyypB,YAAqC,SAAvB/ypB,KAAKM,OAAOyV,QACtCo+pB,EACIn0qB,KAAKM,OAAO0ypB,mBAAmBrwpB,cAAc,SAASg1D,aAC1Dr7B,EAAQ53B,MAAMqR,OAASxT,EAAWvC,KAAKM,OAAOyV,OAASo+pB,IAGvD73oB,EAAQ53B,MAAMqR,OAASxT,EAAWvC,KAAKM,OAAOyV,QAElD/V,KAAKo0qB,eAAe93oB,IAKxBy3oB,EAAO34qB,UAAUi5qB,WAAa,WAC1B,IAAI/3oB,EAAUt8B,KAAKM,OAAO0ypB,mBACtBjulB,EAAcgvmB,EAAOjvmB,oBAAsB9kE,KAAKs0qB,eAChDC,EAAWv0qB,KAAKw0qB,mBACpBl4oB,EAAQtf,WAAWtY,MAAM6vqB,EAASztoB,QAAUi+B,EAAc,EAAI,MAAQ,MACtEzoC,EAAQ53B,MAAM6vqB,EAASj2mB,SAAWyG,EAAc,EAAIA,EAAc,KAAO,OAK7EgvmB,EAAO34qB,UAAUq5qB,cAAgB,SAAU7pmB,GACvC,IAAI2pmB,EAAWv0qB,KAAKw0qB,iBAAiB5pmB,GACrC5qE,KAAKM,OAAO0ypB,mBAAmBh2oB,WAAWtY,MAAM6vqB,EAASztoB,QAAU,GACnE9mC,KAAKM,OAAO0ypB,mBAAmBh2oB,WAAW3I,cAAc3P,MAAM6vqB,EAASj2mB,SAAW,IAQtFy1mB,EAAO34qB,UAAUqzD,QAAU,WACvB,GAA2B,SAAvBzuD,KAAKM,OAAOyV,OAAhB,CAGA,IAAIumB,EAAUt8B,KAAKM,OAAOkxD,aAC1BxxD,KAAKM,OAAOU,QAAQ0D,MAAMqR,OAAS,OACnC,IAAIA,EAAS/V,KAAKu2pB,aAAamL,kBAAkBploB,GACjDA,EAAQ53B,MAAMqR,OAAS,eAAiBA,EAAS,QAErDg+pB,EAAO34qB,UAAUk5qB,aAAe,WAI5B,MAAgB,YADF9oqB,GAAQsb,KAAKyQ,KAEhB,GAEJ,GAKXw8oB,EAAO34qB,UAAUqB,iBAAmB,WAC5BuD,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAOwrF,GAAG4xjB,GAAS19oB,KAAK0kB,WAAY1kB,MACzCA,KAAKM,OAAOwrF,GAAG0xjB,GAAcx9oB,KAAK0kB,WAAY1kB,MAC9CA,KAAKM,OAAOwrF,GAAG2xjB,GAAUz9oB,KAAK2tF,kBAAmB3tF,MACjDA,KAAKM,OAAOwrF,GAAG+xjB,GAAiB79oB,KAAK00qB,cAAe10qB,QAKxD+zqB,EAAO34qB,UAAUuB,oBAAsB,WAC/BqD,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAO4rF,IAAIwxjB,GAAS19oB,KAAK0kB,YAC9B1kB,KAAKM,OAAO4rF,IAAIsxjB,GAAcx9oB,KAAK0kB,YACnC1kB,KAAKM,OAAO4rF,IAAIuxjB,GAAUz9oB,KAAK2tF,mBAC/B3tF,KAAKM,OAAO4rF,IAAI2xjB,GAAiB79oB,KAAK00qB,iBAE1CX,EAAO34qB,UAAUs5qB,cAAgB,WACzB10qB,KAAKM,OAAOq4pB,gBACZ34pB,KAAKM,OAAOq0qB,aAAaC,mBAAmB5oqB,WAAahM,KAAK8zH,eAAetnH,OAGrFunqB,EAAO34qB,UAAUy5qB,gBAAkB,SAAUC,GACzC,IAAI/0qB,EAAQC,KACRgB,EAAU8zqB,EACVpopB,EAAW1rB,EAAQ8C,UAAUK,SAAS,mBAC1C,OAAO,SAAUtD,GACb,GAA6C,OAAzCd,EAAMu8B,QAAQ35B,cAAc,WAAqB5C,EAAMO,OAAOy0qB,qBAAlE,CAGA,IAAI5tqB,EAAStG,EAAEsG,OACXqF,EAAOrF,EAAO6E,WAEdkkjB,GADS/ojB,EAAO49D,YACL59D,EAAOrD,UAAUK,SAAS,qBACrCpE,EAAM+zH,eAAetnH,OAASA,GAIlCxL,EAAQgL,WAAaQ,EACjB0jjB,IACAnwjB,EAAM+qF,OAAO9+E,WAAaQ,GAE9BzM,EAAM+zH,eAAetnH,KAAOA,EAC5BzM,EAAMO,OAAOyN,O/BgDL,U+BhDsBvB,KAAMA,KARhCzM,EAAM+zH,eAAepnH,IAAOggB,EAAsCvlB,EAAOgF,UAAlCpM,EAAM+zH,eAAepnH,OAWxEqnqB,EAAO34qB,UAAU45qB,sBAAwB,SAAUF,GAC/C,IAAI/0qB,EAAQC,KACRgB,EAAU8zqB,EACd,OAAO,SAAUj0qB,GACb,GAA6C,OAAzCd,EAAMu8B,QAAQ35B,cAAc,SAAhC,CAGA,IACI+J,EADS7L,EAAEsG,OACEgF,UACbpM,EAAM+zH,eAAepnH,MAAQA,IAGjC1L,EAAQmL,UAAYO,EACpB3M,EAAM+zH,eAAepnH,IAAMA,EACvB3M,EAAMO,OAAO6sF,gBAKzB4mlB,EAAO34qB,UAAU65qB,cAAgB,SAAUH,GACvC,IAAI/0qB,EAAQC,KACRgB,EAAU8zqB,EACd,OAAO,SAAUj0qB,GACb,GAA6C,OAAzCd,EAAMu8B,QAAQ35B,cAAc,SAAhC,CAGA,IAAI+J,EAAM1L,EAAQmL,WAA6B,IAAhBtL,EAAEq0qB,UAA6B,GAAXr0qB,EAAEykc,OAAczkc,EAAEykc,QACjEvlc,EAAM+zH,eAAepnH,MAAQA,IAGjC7L,EAAE8kB,iBACF5lB,EAAMO,OAAOkxD,aAAa7uD,cAAc,oBAAoBwJ,UAAYO,EACxE1L,EAAQmL,UAAYO,EACpB3M,EAAM+zH,eAAepnH,IAAMA,MAGnCqnqB,EAAO34qB,UAAU+5qB,cAAgB,SAAUL,GACvC,IAAI/0qB,EAAQC,KACRgB,EAAU8zqB,EACd,OAAO,SAAUj0qB,GACb,GAAsB,UAAlBA,EAAEwlU,YAAN,CAGA,IAAIvqK,EACA0lgB,EACA4T,EAASr1qB,EAAMs1qB,WAAWx0qB,GAC1B6L,EAAM1L,EAAQmL,WAAapM,EAAMq1qB,OAAOpoqB,EAAIooqB,EAAOpoqB,GACnDR,EAAOxL,EAAQgL,YAAcjM,EAAMq1qB,OAAOroqB,EAAIqoqB,EAAOroqB,GACzD,GAAIhN,EAAMO,OAAO0ypB,mBAAmB7upB,SAAStD,EAAEsG,QAAS,CAGpD,GAFAq6pB,EAAOzhqB,EAAMO,OAAOixpB,mBAChBxxpB,EAAMO,OAAO0ypB,mBAAmBrwpB,cAAc,oBAAsB5C,EAAMO,OAAO0ypB,mBAAmBh2oB,WACpGjd,EAAM+zH,eAAetnH,OAASA,GAASA,EAAO,GAAMg1pB,EAAKz8lB,YAAcy8lB,EAAK5xoB,YAAepjB,EAC3F,OAEJ3L,EAAE8kB,iBACF67oB,EAAKx1pB,WAAaQ,EAClBxL,EAAQgL,WAAaQ,EACrBzM,EAAMq1qB,OAAOroqB,EAAIqoqB,EAAOroqB,EACxBhN,EAAM+zH,eAAetnH,KAAOA,MAE3B,CAED,GADAsvJ,EAAO/7J,EAAMO,OAAOkxD,aAAa7uD,cAAc,oBAC3C5C,EAAM+zH,eAAepnH,MAAQA,GAAQA,EAAM,GAAMovJ,EAAKyzO,aAAezzO,EAAKjsI,aAAgBnjB,EAC1F,OAEJ7L,EAAE8kB,iBACFm2I,EAAK3vJ,UAAYO,EACjB1L,EAAQmL,UAAYO,EACpB3M,EAAMq1qB,OAAOpoqB,EAAIooqB,EAAOpoqB,EACxBjN,EAAM+zH,eAAepnH,IAAMA,MAIvCqnqB,EAAO34qB,UAAUk6qB,UAAY,WACzB,IAAIv1qB,EAAQC,KACZ,OAAO,SAAUa,GACS,UAAlBA,EAAEwlU,cAGNtmU,EAAMq1qB,OAASr1qB,EAAMs1qB,WAAWx0qB,MAGxCkzqB,EAAO34qB,UAAUi6qB,WAAa,SAAUx0qB,GACpC,IAAIu0qB,GAAWroqB,EAAG,EAAGC,EAAG,GASxB,OARInM,EAAE+4D,SAAW/4D,EAAE+4D,QAAQp9D,QACvB44qB,EAAOroqB,EAAIlM,EAAE+4D,QAAQ,GAAG9tD,MACxBspqB,EAAOpoqB,EAAInM,EAAE+4D,QAAQ,GAAG1tD,QAGxBkpqB,EAAOroqB,EAAIlM,EAAEiL,MACbspqB,EAAOpoqB,EAAInM,EAAEqL,OAEVkpqB,GAEXrB,EAAO34qB,UAAUspB,WAAa,WAC1B,IAAI3kB,EAAQC,KACZ,GAAIA,KAAKi0qB,aAAc,CACnB,IAAIjqmB,EAAUhqE,KAAKM,OAAOixpB,mBAC1BvxpB,KAAKs8B,QAAUt8B,KAAKM,OAAOkxD,aAAax0C,WACxChd,KAAK8qF,OAAS9qF,KAAKM,OAAO0ypB,mBAAmBh2oB,WAC7C,IAAI02oB,EAAQ1zpB,KAAKs8B,QAAQ35B,cAAc,qBACnC8wpB,EAAQzzpB,KAAKs8B,QAAQ35B,cAAc,oBACnC6+pB,EAAOxhqB,KAAK8qF,OAAOnoF,cAAc,oBACjC3C,KAAKM,OAAOyypB,aACZxtpB,GAAanB,IAAI4lE,EAAUw3lB,EAAOxhqB,KAAK8qF,OAAQ,yBAA0B9qF,KAAKs1qB,YAAat1qB,MAC3FuF,GAAanB,IAAI4lE,EAAUw3lB,EAAOxhqB,KAAK8qF,OAAQ,wBAAyB9qF,KAAKm1qB,cAAcnrmB,EAAU0plB,EAAQ1zpB,KAAKs8B,SAAUt8B,OAE5HgqE,GACAzkE,GAAanB,IAAIsvpB,EAAO,SAAU1zpB,KAAK60qB,gBAAgBrT,GAAOxhqB,MAC9DuF,GAAanB,IAAIsvpB,EAAO,SAAU1zpB,KAAKg1qB,sBAAsBvhB,GAAQzzpB,MACrEuF,GAAanB,IAAIqvpB,EAAO,SAAUzzpB,KAAKg1qB,sBAAsBthB,GAAQ1zpB,MACrEuF,GAAanB,IAAIo9pB,EAAM,SAAUxhqB,KAAK60qB,gBAAgBnhB,GAAQ1zpB,MAC9DuF,GAAanB,IAAIqvpB,EAAO,QAASzzpB,KAAKi1qB,cAAcvhB,GAAQ1zpB,MAC5DuF,GAAanB,IAAIqvpB,EAAO,yBAA0BzzpB,KAAKs1qB,YAAat1qB,MACpEuF,GAAanB,IAAIqvpB,EAAO,wBAAyBzzpB,KAAKm1qB,cAAczhB,GAAQ1zpB,QAG5EuF,GAAanB,IAAIpE,KAAKs8B,QAAS,SAAUt8B,KAAK60qB,gBAAgB70qB,KAAK8qF,QAAS9qF,MAC5EuF,GAAanB,IAAIpE,KAAK8qF,OAAQ,SAAU9qF,KAAK60qB,gBAAgB70qB,KAAKs8B,SAAUt8B,OAE5EA,KAAKM,OAAOukE,WAAWroE,QACvB+I,GAAanB,IAAIpE,KAAKM,OAAOi1qB,mBAAmBv4pB,WAAY,SAAUhd,KAAK60qB,gBAAgB70qB,KAAKs8B,SAAUt8B,MAE9GA,KAAKyuD,UACLzuD,KAAKi0qB,cAAe,EAExB,IACI97nB,EACA6+X,EACAnnZ,EAHAu1C,EAAQplE,KAAKM,OAAOghqB,kBAIxBp/lB,GAAkB,WACd/pB,EAAQp4C,EAAM+qF,OAAO9+E,WACrBgra,EAAU5xW,EAAMmqU,aAChB1/W,EAAe9vB,EAAMO,OAAOkxD,aAAa3hC,cAC1C,WACM9vB,EAAMO,OAAO46M,uBACV87N,EAAUnnZ,IACVlsB,EAASyhE,EAAM5jE,iBAAiB,oBAAqB,iBACjDzB,EAAMO,OAAOixpB,oBACb5tpB,EAAS5D,EAAMO,OAAOkxD,aAAa7uD,cAAc,qBAAqBnB,iBAAiB,oBAAqB,mBAG/GzB,EAAMO,OAAOyypB,WAAa,GAAKhzpB,EAAMO,OAAOq4pB,cAAgB,IAAM54pB,EAAM+qF,OAAOnoF,cAAc,oBAC9F5C,EAAM+qF,OAAOnoF,cAAc,oBAAoBqJ,WAAajM,EAAM+zH,eAAetnH,KAGjFzM,EAAM+qF,OAAO9+E,WAAajM,EAAM+zH,eAAetnH,KAEnDzM,EAAMu8B,QAAQtwB,WAAajM,EAAM+zH,eAAetnH,KAChDzM,EAAMu8B,QAAQnwB,UAAYpM,EAAM+zH,eAAepnH,KAE9C3M,EAAMO,OAAOgrpB,6BACdvrpB,EAAMu8B,QAAQtwB,WAAamsC,GAE3Bp4C,EAAMO,OAAOq4pB,eAAiB54pB,EAAM+qF,OAAOnoF,cAAc,sBACzD5C,EAAM+qF,OAAOnoF,cAAc,oBAAoBqJ,WAC3CjM,EAAMu8B,QAAQ35B,cAAc,qBAAqBqJ,cAG7DhM,KAAKM,OAAOy0qB,sBAAuB,GAKvChB,EAAO34qB,UAAUo5qB,iBAAmB,SAAU5pmB,GAC1C,IAAIixI,KACA3oM,EAAYzV,EAAkBmtE,GAAO5qE,KAAKM,OAAO4S,UAAY03D,EAGjE,OAFAixI,EAAI/0K,OAAS5zB,EAAY,kBAAoB,mBAC7C2oM,EAAIv9I,QAAUprD,EAAY,cAAgB,eACnC2oM,GAEXk4d,EAAO34qB,UAAUg5qB,eAAiB,SAAU93oB,GACpCt8B,KAAKM,OAAOixpB,mBACZj1nB,EAAQ35B,cAAc,qBAAqB+B,MAAMoV,UAAmC,SAAvB9Z,KAAKM,OAAOyV,OAAoB,OAAS,SAGtGumB,EAAQ53B,MAAMoV,UAAmC,SAAvB9Z,KAAKM,OAAOyV,OAAoB,OAAS,UAG3Eg+pB,EAAO34qB,UAAUuyF,kBAAoB,SAAU9sF,GACvCA,EAAEy2F,SAAWt3F,KAAK+hC,kBAGtB/hC,KAAKq0qB,aACLr0qB,KAAKi0qB,cAAe,EACO,SAAvBj0qB,KAAKM,OAAOyV,QACZ/V,KAAKy0qB,gBAETz0qB,KAAK0kB,aACL1kB,KAAK4rY,YACL5rY,KAAKqwI,aAKT0jiB,EAAO34qB,UAAUiX,QAAU,WACvB,IAAIk3pB,EAAcvpqB,KAAKM,OAAOU,QACzBuoqB,IAAiBA,EAAY5mqB,cAAc,kBAAqB4mqB,EAAY5mqB,cAAc,qBAG/F3C,KAAKrD,sBAELqD,KAAKy0qB,gBACLpwqB,GAAarE,KAAKM,OAAO0ypB,mBAAmBh2oB,YAAa,mBACzD3Y,GAAarE,KAAKM,OAAOkxD,aAAax0C,YAAa,aAEnDhd,KAAKM,OAAOkxD,aAAax0C,WAAWtY,MAAMqR,OAAS,GAEnD/V,KAAKM,OAAOU,QAAQ0D,MAAMsR,MAAQ,GAElCzQ,GAAahB,OAAOvE,KAAKM,OAAOkxD,aAAax0C,WAAY,SAAUhd,KAAK60qB,mBAO5Ed,EAAOjvmB,kBAAoB,WACvB,OAAOA,MAEJivmB,KC3WPh/K,GAAuB,WAKvB,SAASA,EAAMz0f,EAAQqlX,GACnB3lX,KAAKw1qB,cAAe,EACpBx1qB,KAAKy1qB,SAAW,aAChBz1qB,KAAKM,OAASA,EACVN,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAOwrF,GAAG2lkB,GAAqBzxpB,KAAKw9oB,aAAanipB,KAAK2E,OAC3DA,KAAKM,OAAO7D,iBAAiBqnpB,GAAoB9jpB,KAAK07oB,YAAYrgpB,KAAK2E,OACvEA,KAAKM,OAAOwrF,GAAG8ykB,GAAgB5+pB,KAAK09oB,QAAQripB,KAAK2E,OACjDA,KAAK2lX,aAAeA,GA2KxB,OAnKAovI,EAAM35f,UAAU2F,MAAQ,WACpBf,KAAK01qB,kBACL11qB,KAAK0/c,UAAY9jd,OAAO8F,KAAK,GAAI,QAAS,UAAY9F,OAAO06H,YAAc,UAAY16H,OAAOy6H,WAAa,cAC3Gr2H,KAAK0/c,UAAU3rX,OAAO,EAAG,GACzB/zF,KAAK0/c,UAAU/gJ,SAASC,OAAOC,WAAYD,OAAOE,cAEtDi2L,EAAM35f,UAAUsipB,QAAU,WAClB19oB,KAAK21qB,eACL31qB,KAAKw9oB,gBAGbzoJ,EAAM35f,UAAUsgpB,YAAc,WACtB17oB,KAAK21qB,gBACL31qB,KAAKw1qB,cAAe,IAG5BzgL,EAAM35f,UAAUs6qB,gBAAkB,WAC9B,IAAIntB,EAAOvopB,KAAKM,OAEZs1qB,KACA50qB,EAAUG,EAAc,OACxBmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,SAAUD,UAAWklpB,EAAKvnpB,QAAQqC,UAAY,kBAE/E7C,SAASuL,KAAKpK,YAAYX,GAC1B,IAAK,IAAI5C,EAAK,EAAGyE,EAAKkyf,EAAM8gL,cAAez3qB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC7D,IAAIf,EAAMwF,EAAGzE,GAETw3qB,EAAev4qB,GADP,YAARA,EACsBknE,GAAsBgklB,EAAKlrpB,IAEpC,gBAARA,EAC2C,gBAA1B2C,KAAKM,OAAOw1qB,UAGZnzmB,GAAoB4llB,EAAKlrpB,IAGvD,IAAI04qB,EAAY,IAAIr9W,GAAKk9W,GACzBG,EAAUlloB,SAAS7vC,GACnB+0qB,EAAUniB,mBAAqB5zpB,KAAKM,OAAOszpB,mBAC3CmiB,EAAU/1qB,KAAKy1qB,WAAY,EAC3BM,EAAUpvpB,QAAU4hoB,EAAK5hoB,SAE7Boue,EAAM35f,UAAUoipB,aAAe,WAC3B,GAAIx9oB,KAAK21qB,cAAe,CACpB,IAAIptB,EAAOvopB,KAAKM,OAChB,GAAIN,KAAKw1qB,aAEL,YADAx1qB,KAAK+1qB,YAGT,IAAI91qB,GACA+pM,YAAa,QACbhpM,QAASunpB,EAAKvnpB,QACdg1qB,aAAcztB,EAAK+Y,kBAAkB9/pB,iBAAiB,4BACtDo4B,QAAQ,GAKZ,GAHK55B,KAAKw1qB,cACNjtB,EAAK5hoB,QhCtCI,cgCsCwB1mB,GAEjCA,EAAK25B,OAEL,YADAv0B,EAAOkjpB,EAAKvnpB,SAGNhB,KAAKw1qB,cACXx1qB,KAAK+1qB,cAIjBhhL,EAAM35f,UAAU26qB,UAAY,WACxB,IAAIxtB,EAAOvopB,KAAKM,OAMhB,GAJIiopB,EAAKS,aAAkC,gBAAnBT,EAAKutB,YACzBvtB,EAAKvnpB,QAAQ2B,cAAc,gBAAgB+B,MAAMosC,QAAU,QAG3C,SAAhBy3mB,EAAKxyoB,OAAmB,CACxB,IAAIw+pB,EAAWv0qB,KAAK2lX,aAAa6uT,mBAC7B9hB,EAAanK,EAAKvnpB,QAAQ2B,cAAc,cACxC+zpB,EAAYnO,EAAKvnpB,QAAQ2B,cAAc,iBAC3C+vpB,EAAWhupB,MAAMqR,OAAS,OAC1B28oB,EAAWhupB,MAAMoV,UAAY,OAC7B48oB,EAAUhypB,MAAM6vqB,EAASj2mB,SAAW,GACpCo4lB,EAAUvxpB,kBAAkBT,MAAM6vqB,EAASztoB,QAAU,GAGrDyhnB,EAAK/O,gBACA+O,EAAKU,cAAc5llB,QAAQ7mE,QAI5BwD,KAAKi2qB,eAAe1tB,EAAKU,cAAc5llB,QAAQ7mE,OAAQ+rpB,EAAKvnpB,SAC5DiwB,GAAcs3nB,EAAKvnpB,QAAS,uBAC5BiwB,GAAcs3nB,EAAKvnpB,QAAS,yBAC5BiwB,GAAcs3nB,EAAKvnpB,QAAS,iBAC5BiwB,GAAcs3nB,EAAKvnpB,QAAS,wBAP5BunpB,EAAKvnpB,QAAQ2B,cAAc,oBAAoB+B,MAAMosC,QAAU,QAWvEy3mB,EAAKvnpB,QAAQ2B,cAAc,cAAc+B,MAAMqV,UAAY,SAEvDwuoB,EAAKh/C,gBAA+C,cAA7Bg/C,EAAK/G,eAAe96oB,OAC3C6hpB,EAAKvnpB,QAAQ2B,cAAc,gBAAgB+B,MAAMosC,QAAU,QAG/D,IAAIoloB,EAAa3tB,EAAKvnpB,QAAQQ,iBAAiB,gBAC3C00qB,EAAW15qB,OAAS,IACpB05qB,EAAW,GAAGpyqB,UAAUM,IAAI,eAC5B8xqB,EAAW,GAAGpyqB,UAAUS,OAAO,gBAE/BgkpB,EAAKvopB,KAAKy1qB,WACVpwqB,EAAOkjpB,EAAKvnpB,SAEhBunpB,EAAKvnpB,QAAQ8C,UAAUS,OAAO,gBAC9BvE,KAAK0/c,UAAYz+c,EAAYsnpB,EAAKvnpB,QAAShB,KAAK0/c,WAChD6oM,EAAKvopB,KAAKy1qB,WAAY,EACtB,IAAIx1qB,GACAe,QAASunpB,EAAKvnpB,SAElBunpB,EAAK5hoB,QAAQwvpB,GAAsBl2qB,IAEvC80f,EAAM35f,UAAU66qB,eAAiB,SAAU1pjB,EAAOvrH,GAG9C,IAAK,IAFDo1qB,EAAep1qB,EAAQQ,iBAAiB,mBACxCotT,EAAUwnX,EAAa7pjB,EAAQ,GAAG15G,aAAa,WAC1C3W,EAAI,EAAGA,EAAIk6qB,EAAa55qB,OAAQN,IACrCk6qB,EAAal6qB,GAAGsH,aAAa,UAAWorT,GAGvC,IADDynX,EAAYr1qB,EAAQQ,iBAAiB,YACzC,IAAStF,EAAI,EAAGA,EAAIm6qB,EAAU75qB,OAAQN,IAClC,IAAK,IAAIwnB,EAAI,EAAGA,EAAI6oG,EAAO7oG,IACvB2ypB,EAAUn6qB,GAAGoV,WAAWoS,GAAGhf,MAAMosC,QAAU,QAIvDikd,EAAM35f,UAAUu6qB,YAAc,WAC1B,OAAO31qB,KAAKM,OAAOU,QAAQsC,GAAG/E,QAAQ,UAAY,GAAKyB,KAAKM,OAAON,KAAKy1qB,WAO5E1gL,EAAM35f,UAAUiX,QAAU,WAClBrS,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAO4rF,IAAIulkB,GAAqBzxpB,KAAKw9oB,aAAanipB,KAAK2E,OAC5DA,KAAKM,OAAO3D,oBAAoBmnpB,GAAoB9jpB,KAAK07oB,YAAYrgpB,KAAK2E,OAC1EA,KAAKM,OAAO4rF,IAAI0ykB,GAAgB5+pB,KAAK09oB,QAAQripB,KAAK2E,SAMtD+0f,EAAM35f,UAAU2mC,cAAgB,WAC5B,MAAO,SAEXgzd,EAAM8gL,eACF,aAAc,gBAAiB,iBAAkB,oBAAqB,kBAAmB,eACzF,gBAAiB,YAAa,UAAW,kBAAmB,aAAc,iBAAkB,eAC5F,6BAA8B,iBAAkB,YAChD,gBAAiB,SAAU,SAAU,eAAgB,YAAa,QAAS,cAC3E,YAAa,cAAe,eAAgB,mBAAoB,chC9I/C,cgC+IGM,IAEjBphL,KClMPtka,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GAU5Dm3oB,GAAiC,SAAUhllB,GAE3C,SAASgllB,IACL,IAAIv2qB,EAAmB,OAAXuxF,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMm8B,cACCn8B,EAuEX,OA3EA0wF,GAAU6llB,EAAiBhllB,GAS3BgllB,EAAgBl7qB,UAAU+qE,aAAe,SAAUv4D,GAC/C,IAAIusoB,EAAiB,IAAI3M,GAAe5/nB,GACpC5N,KAAKu+B,SAAWv+B,KAAKu+B,OAAOioC,UAAYxmE,KAAKu+B,OAAOA,UACpDv+B,KAAKg7oB,SAAWb,EAAe5zkB,kBAAkBvmE,KAAKu+B,UAM9D+3oB,EAAgBl7qB,UAAU2/oB,aAAe,WACrC,OAAO/6oB,KAAKg7oB,UAKhBs7B,EAAgBl7qB,UAAUkhI,YAAc,SAAUptH,QAC/B,IAAXA,IAAqBA,WACGhU,IAAxB8E,KAAK26H,iBACL36H,KAAKk8B,WAAWr+B,EAAa4toB,GAAUA,GAAS+jB,WAAcpjf,GAAIp9J,GAAQhP,KAAK26H,eAAgBzrH,GAC3FgsD,SAAU,wBAEehgE,IAA7B8E,KAAKsupB,sBACLtupB,KAAKk8B,WAAWr+B,EAAa4toB,GAAUA,GAASikB,gBAAmBtjf,GAAIp9J,GAAQhP,KAAKsupB,oBAAqBp/oB,GACrGgsD,SAAU,6BAEgBhgE,IAA9B8E,KAAKuupB,uBACLvupB,KAAKk8B,WAAWr+B,EAAa4toB,GAAUA,GAASmkB,kBAAqBxjf,GAAIp9J,GAAQhP,KAAKuupB,qBAAsBr/oB,GACxGgsD,SAAU,0BAMtBo7mB,EAAgBl7qB,UAAUm7qB,YAAc,SAAU7vqB,GAC9C,OAAO1G,KAAKk8B,WAAWr+B,EAAa4toB,GAAU/koB,KAKlD4vqB,EAAgBl7qB,UAAUo7qB,oBAAsB,SAAUlsqB,GACtDtK,KAAKgH,cAAcsD,GAAM,IAE7B0mF,IACI9pF,KACDovqB,EAAgBl7qB,UAAW,YAAQ,GACtC41F,IACI9pF,KACDovqB,EAAgBl7qB,UAAW,aAAS,GACvC41F,IACI9pF,KACDovqB,EAAgBl7qB,UAAW,kBAAc,GAC5C41F,IACI9pF,KACDovqB,EAAgBl7qB,UAAW,cAAU,GACxC41F,IACI9pF,KACDovqB,EAAgBl7qB,UAAW,sBAAkB,GAChD41F,IACI9pF,KACDovqB,EAAgBl7qB,UAAW,2BAAuB,GACrD41F,IACI9pF,KACDovqB,EAAgBl7qB,UAAW,4BAAwB,GACtD41F,IACI9pF,KACDovqB,EAAgBl7qB,UAAW,uBAAmB,GAC1Ck7qB,GACTlymB,IAKEqymB,GAA8B,SAAUnllB,GAExC,SAASmllB,IACL,OAAkB,OAAXnllB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAK/D,OAPAywF,GAAUgmlB,EAAcnllB,GAIxBN,IACI3oF,KAAeiuqB,KAChBG,EAAar7qB,UAAW,eAAW,GAC/Bq7qB,GACTrymB,ICjHEsymB,GAA2B,WAK3B,SAASA,EAAUp2qB,GACfN,KAAK22qB,YAAc,GACnB32qB,KAAK42qB,UAAW,EAChB52qB,KAAKM,OAASA,EACdN,KAAKvD,mBAkMT,OA7LAi6qB,EAAUt7qB,UAAUqB,iBAAmB,WAC/BuD,KAAKM,OAAO6sF,cAGhBntF,KAAKM,OAAOwrF,GAAG2lkB,GAAqBzxpB,KAAKs9oB,WAAYt9oB,MACrDA,KAAKM,OAAOwrF,GAAG+qlB,GAAmB72qB,KAAKomH,eAAgBpmH,QAK3D02qB,EAAUt7qB,UAAUuB,oBAAsB,WAClCqD,KAAKM,OAAO6sF,aAGhBntF,KAAKM,OAAO4rF,IAAI2qlB,GAAmB72qB,KAAKomH,iBAE5CswjB,EAAUt7qB,UAAUkipB,WAAa,WAC7Bt9oB,KAAKM,OAAO4rF,IAAIulkB,GAAqBzxpB,KAAKs9oB,YAC1Ct9oB,KAAK82qB,kBAAoB92qB,KAAKM,OAAOa,cAAc,YAC/CkC,UAAW,cACXE,OAAQ,aACRE,OAAS+4E,SAAU,OAAQutD,SAAU,KAAMxf,aAAc,eAE7DvqH,KAAKM,OAAOU,QAAQW,YAAY3B,KAAK82qB,oBAEzCJ,EAAUt7qB,UAAUgrH,eAAiB,SAAUvlH,GAC1B,cAAbA,EAAEmyD,OACFhzD,KAAKT,OAEa,mBAAbsB,EAAEmyD,QACPhzD,KAAKT,MAAK,IAGlBm3qB,EAAUt7qB,UAAU27qB,YAAc,SAAUC,GACxC,GAAyC,KAArCp7qB,OAAO6giB,eAAevvhB,WAAmB,CACzC,IAAIskpB,EAAWxxpB,KAAKM,OAAOixpB,mBAC3BvxpB,KAAK82qB,kBAAkB/5qB,MAAQiD,KAAK22qB,YAAc,GAClD,IAAI5hB,OAAQ,EACRnob,EAAO5sO,KAAKM,OAAOi0pB,UAIvB,GAHI/C,IACAuD,EAAQ/0pB,KAAKM,OAAOq1pB,sBAEmB,SAAvC31pB,KAAKM,OAAOu5iB,kBAAkBx5gB,KAAiB,CAC/C,IAAI22T,EAAkBh3V,KAAKM,OAAOuspB,wBAAwB/8nB,KAAK,SAAUG,EAAGC,GAAK,OAAOD,EAAIC,IAC5F,GAAI8mpB,EAAY,CAEZ,IAAK,IADDC,KACK/6qB,EAAI,EAAGA,EAAI8D,KAAKM,OAAO6rpB,oBAAoB3vpB,OAAQN,IACxD+6qB,EAAgB/6qB,GAAK8D,KAAKM,OAAO6rpB,oBAAoBjwpB,GAAGsnE,WAE5DxjE,KAAKk3qB,YAAYD,GAAiB,EAAO,KAAMD,GAC/Ch3qB,KAAK22qB,aAAe,KAExB,IAASz6qB,EAAI,EAAGA,EAAI86V,EAAgBx6V,OAAQN,IAAK,CACzCA,EAAI,IACJ8D,KAAK22qB,aAAe,MAExB,IAAI/vmB,KAAWvlE,MAAMC,KAAKsrO,EAAKoqH,EAAgB96V,IAAIsF,iBAAiB,eAChEgwpB,GACA5qlB,EAAMpiE,KAAKlJ,MAAMsrE,KAAUvlE,MAAMC,KAAKyzpB,EAAM/9T,EAAgB96V,IAAIsF,iBAAiB,gBAErFxB,KAAKk3qB,YAAYtwmB,GAAO,EAAO,KAAMowmB,QAGxC,CACD,IAAIl6qB,EAAMkD,KAAKm3qB,oBACf,GAAIr6qB,EAAI4tF,OAAQ,CACZ,GAAIsslB,EAAY,CAEP,IADDjslB,KACJ,IAAS7uF,EAAI,EAAGA,EAAIY,EAAIs6qB,WAAW56qB,OAAQN,IACvC6uF,EAAQvmF,KAAKxE,KAAKM,OAAO+2qB,uBAAuBv6qB,EAAIs6qB,WAAWl7qB,KAEnE8D,KAAKk3qB,YAAYnslB,GAAS,EAAO,KAAMislB,GACvCh3qB,KAAK22qB,aAAe,KAExB,IAASz6qB,EAAI,EAAGA,EAAIY,EAAIwuqB,WAAW9uqB,OAAQN,IAAK,CACxCA,EAAI,IACJ8D,KAAK22qB,aAAe,MAEpB/vmB,KAAWvlE,MAAMC,KAAKsrO,EAAK9vO,EAAIwuqB,WAAWpvqB,IAC1CsF,iBAAiB,+BACjBgwpB,GACA5qlB,EAAMpiE,KAAKlJ,MAAMsrE,KAAUvlE,MAAMC,KAAKyzpB,EAAMj4pB,EAAIwuqB,WAAWpvqB,IAAIsF,iBAAiB,gCAEpFxB,KAAKk3qB,YAAYtwmB,GAAO,EAAO,KAAMowmB,SAIzCh3qB,KAAKk3qB,eAAe71qB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,gCAAgC,EAAM,KAAMw1qB,GAGxH,IAAI/2qB,GACA1D,KAAMyD,KAAK22qB,YACX/8oB,QAAQ,GAGZ,GADA55B,KAAKM,OAAOqmB,QlCdA,akCc2B1mB,GACnCA,EAAK25B,OACL,OAEJ55B,KAAK82qB,kBAAkB/5qB,MAAQiD,KAAK22qB,YAAc12qB,EAAK1D,KAClDiP,GAAQ4jF,UAAU1/E,MAAM,qBAIzB1P,KAAK82qB,kBAAkB5wpB,kBAAkB,EAAGlmB,KAAK82qB,kBAAkB/5qB,MAAMP,QAHzEwD,KAAK82qB,kBAAkBrxqB,SAK3BzF,KAAK42qB,UAAW,IAGxBF,EAAUt7qB,UAAU87qB,YAAc,SAAUtwmB,EAAO0wmB,EAAQ1rB,EAAUorB,GAEjE,IAAK,IADDO,EAAgC,iBAAb3wmB,EAAM,GACpBljD,EAAI,EAAGA,EAAIkjD,EAAMpqE,OAAQknB,IAC1BszpB,GAAcM,IACdt3qB,KAAK22qB,aAAe32qB,KAAKM,OAAO8jpB,aAAaxvnB,SAASgyC,EAAMljD,GAAG7Q,aAAa,iBAAkB,KAAK2wD,WAAa,MAEhH+zmB,EACK3wmB,EAAMljD,GAAG5f,UAAUK,SAAS,YAC7BnE,KAAK22qB,aAAe/vmB,EAAMljD,GAAGzH,aAIjCjc,KAAK22qB,aAAe/vmB,EAAMljD,GAE1BA,EAAIkjD,EAAMpqE,OAAS,IACnBwD,KAAK22qB,aAAe/qB,IAQhC8qB,EAAUt7qB,UAAUmE,KAAO,SAAUy3qB,GAC7Bx2qB,SAASg3qB,sBAAsB,UAC/Bx3qB,KAAK+2qB,YAAYC,GACjBx2qB,SAASqujB,YAAY,QACrB7ujB,KAAK82qB,kBAAkBxmiB,QAEvBtwI,KAAK42qB,WACLh7qB,OAAO6giB,eAAe+xB,kBACtBxujB,KAAK42qB,UAAW,IAOxBF,EAAUt7qB,UAAU2mC,cAAgB,WAChC,MAAO,aAOX20oB,EAAUt7qB,UAAUiX,QAAU,WAC1BrS,KAAKrD,sBACDqD,KAAK82qB,mBACLvyqB,EAAOvE,KAAK82qB,oBAGpBJ,EAAUt7qB,UAAU+7qB,kBAAoB,WACpC,IAAI7a,EAAUt8pB,KAAKM,OACfxD,GAAQ4tF,QAAQ,GACpB,GAAuC,SAAnC4xkB,EAAQziH,kBAAkBx5gB,KAAiB,CAC3C,IAAIo3oB,EAAgBnb,EAAQob,4BACxBtoqB,OAAM,EAENk8pB,KACApvqB,OAAI,EACR,IAAKA,EAAI,EAAGA,EAAIu7qB,EAAcj7qB,SACtBi7qB,EAAcv7qB,GAAG+xqB,YAAYzxqB,QAC7B8uqB,EAAW9mqB,KAAKizqB,EAAcv7qB,GAAG+yO,WAEjCwoc,EAAcv7qB,GAAG+xqB,YAAYzxqB,SACxB4S,IACDA,EAAMk9C,KAAKC,UAAUkrnB,EAAcv7qB,GAAG+xqB,YAAYn+oB,SAElD1gB,IAAQk9C,KAAKC,UAAUkrnB,EAAcv7qB,GAAG+xqB,YAAYn+oB,UAR1B5zB,KAatCovqB,EAAWx7oB,OACP5zB,IAAMu7qB,EAAcj7qB,QAAU8uqB,EAAWA,EAAW9uqB,OAAS,GAAK8uqB,EAAW,IAAOA,EAAW9uqB,OAAS,IACxGM,GAAQ4tF,QAAQ,EAAM4glB,WAAYA,EAAY8L,WAAYK,EAAc,GAAGxJ,cAGnF,OAAOnxqB,GAEJ45qB,KChNPjmlB,GAAwC,WACxC,IAAIC,EAAgB,SAAUl1D,EAAGtL,GAI7B,OAHAwgE,EAAgBpyF,OAAOqyF,iBAChBC,wBAA2BpyF,OAAS,SAAUg9B,EAAGtL,GAAKsL,EAAEo1D,UAAY1gE,IACvE,SAAUsL,EAAGtL,GAAK,IAAK,IAAI2gE,KAAK3gE,EAAOA,EAAEvpB,eAAekqF,KAAIr1D,EAAEq1D,GAAK3gE,EAAE2gE,MACpDr1D,EAAGtL,IAE5B,OAAO,SAAUsL,EAAGtL,GAEhB,SAAS4gE,IAAO9wF,KAAKpC,YAAc49B,EADnCk1D,EAAcl1D,EAAGtL,GAEjBsL,EAAEpgC,UAAkB,OAAN80B,EAAa5xB,OAAOyyF,OAAO7gE,IAAM4gE,EAAG11F,UAAY80B,EAAE90B,UAAW,IAAI01F,IAV3C,GAaxCE,GAA0C,SAAUC,EAAY9pF,EAAQ9J,EAAK6zF,GAC7E,IAA2H11D,EAAvH5C,EAAI55B,UAAUxC,OAAQ2iC,EAAIvG,EAAI,EAAIzxB,EAAkB,OAAT+pF,EAAgBA,EAAO5yF,OAAO6yF,yBAAyBhqF,EAAQ9J,GAAO6zF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlyD,EAAIiyD,QAAQC,SAASJ,EAAY9pF,EAAQ9J,EAAK6zF,QACpH,IAAK,IAAIh1F,EAAI+0F,EAAWz0F,OAAS,EAAGN,GAAK,EAAGA,KAASs/B,EAAIy1D,EAAW/0F,MAAIijC,GAAKvG,EAAI,EAAI4C,EAAE2D,GAAKvG,EAAI,EAAI4C,EAAEr0B,EAAQ9J,EAAK8hC,GAAK3D,EAAEr0B,EAAQ9J,KAAS8hC,GAChJ,OAAOvG,EAAI,GAAKuG,GAAK7gC,OAAOuJ,eAAeV,EAAQ9J,EAAK8hC,GAAIA,GAiC5Dw4oB,GAAgC,SAAUrmlB,GAE1C,SAASqmlB,IACL,OAAkB,OAAXrmlB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAQ/D,OAVAywF,GAAUknlB,EAAgBrmlB,GAI1BN,IACI9pF,KACDywqB,EAAev8qB,UAAW,aAAS,GACtC41F,IACI9pF,KACDywqB,EAAev8qB,UAAW,iBAAa,GACnCu8qB,GACTvzmB,IAKEwzmB,GAA8B,SAAUtmlB,GAExC,SAASsmlB,IACL,OAAkB,OAAXtmlB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAQ/D,OAVAywF,GAAUmnlB,EAActmlB,GAIxBN,IACI3oF,KAAesvqB,KAChBC,EAAax8qB,UAAW,eAAW,GACtC41F,IACI9pF,GAAS,IACV0wqB,EAAax8qB,UAAW,mBAAe,GACnCw8qB,GACTxzmB,IAKEsF,GAA2B,SAAU4nB,GAErC,SAAS5nB,IACL,OAAkB,OAAX4nB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAgC/D,OAlCAywF,GAAU/mB,EAAW4nB,GAIrBN,IACI9pF,KACDwiE,EAAUtuE,UAAW,aAAS,GACjC41F,IACI9pF,KACDwiE,EAAUtuE,UAAW,gBAAY,GACpC41F,IACI9pF,KACDwiE,EAAUtuE,UAAW,aAAS,GACjC41F,IACI9pF,KACDwiE,EAAUtuE,UAAW,iBAAa,GACrC41F,IACI9pF,KACDwiE,EAAUtuE,UAAW,oBAAgB,GACxC41F,IACI9pF,KACDwiE,EAAUtuE,UAAW,iBAAa,GACrC41F,IACI9pF,OACDwiE,EAAUtuE,UAAW,yBAAqB,GAC7C41F,IACI9pF,OACDwiE,EAAUtuE,UAAW,sBAAkB,GAC1C41F,IACI9pF,KACDwiE,EAAUtuE,UAAW,YAAQ,GAChC41F,IACI9pF,KACDwiE,EAAUtuE,UAAW,mBAAe,GAChCsuE,GACTtF,IAKEyzmB,GAAgC,SAAUvmlB,GAE1C,SAASumlB,IACL,OAAkB,OAAXvmlB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAuB/D,OAzBAywF,GAAUonlB,EAAgBvmlB,GAI1BN,IACI3oF,KAAeqhE,KAChBmumB,EAAez8qB,UAAW,eAAW,GACxC41F,IACI9pF,EAAS,cACV2wqB,EAAez8qB,UAAW,YAAQ,GACrC41F,IACI9pF,KACD2wqB,EAAez8qB,UAAW,YAAQ,GACrC41F,IACI9pF,GAAS,IACV2wqB,EAAez8qB,UAAW,2BAAuB,GACpD41F,IACI9pF,EAAS,OACV2wqB,EAAez8qB,UAAW,0BAAsB,GACnD41F,IACI9pF,KACD2wqB,EAAez8qB,UAAW,iBAAa,GAC1C41F,IACI9pF,GAAS,IACV2wqB,EAAez8qB,UAAW,oBAAgB,GACtCy8qB,GACTzzmB,IAKE0zmB,GAAmC,SAAUxmlB,GAE7C,SAASwmlB,IACL,OAAkB,OAAXxmlB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAoB/D,OAtBAywF,GAAUqnlB,EAAmBxmlB,GAI7BN,IACI9pF,EAAS,QACV4wqB,EAAkB18qB,UAAW,YAAQ,GACxC41F,IACI9pF,EAAS,SACV4wqB,EAAkB18qB,UAAW,yBAAqB,GACrD41F,IACI9pF,EAAS,WACV4wqB,EAAkB18qB,UAAW,YAAQ,GACxC41F,IACI9pF,GAAS,IACV4wqB,EAAkB18qB,UAAW,oBAAgB,GAChD41F,IACI9pF,GAAS,IACV4wqB,EAAkB18qB,UAAW,wBAAoB,GACpD41F,IACI9pF,EAAS,YACV4wqB,EAAkB18qB,UAAW,oBAAgB,GACzC08qB,GACT1zmB,IAKE2zmB,GAAgC,SAAUzmlB,GAE1C,SAASymlB,IACL,OAAkB,OAAXzmlB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAiB/D,OAnBAywF,GAAUsnlB,EAAgBzmlB,GAI1BN,IACI9pF,OACD6wqB,EAAe38qB,UAAW,cAAU,GACvC41F,IACI9pF,EAAS,KACV6wqB,EAAe38qB,UAAW,WAAO,GACpC41F,IACI9pF,EAAS,aACV6wqB,EAAe38qB,UAAW,gBAAY,GACzC41F,IACI9pF,GAAS,IACV6wqB,EAAe38qB,UAAW,kBAAc,GAC3C41F,IACI9pF,GAAS,IACV6wqB,EAAe38qB,UAAW,oBAAgB,GACtC28qB,GACT3zmB,IAKE4zmB,GAAiC,SAAU1mlB,GAE3C,SAAS0mlB,IACL,OAAkB,OAAX1mlB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAK/D,OAPAywF,GAAUunlB,EAAiB1mlB,GAI3BN,IACI9pF,KACD8wqB,EAAgB58qB,UAAW,gBAAY,GACnC48qB,GACT5zmB,IAKE6zmB,GAAkC,SAAU3mlB,GAE5C,SAAS2mlB,IACL,OAAkB,OAAX3mlB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAK/D,OAPAywF,GAAUwnlB,EAAkB3mlB,GAI5BN,IACI9pF,EAAS,SACV+wqB,EAAiB78qB,UAAW,gBAAY,GACpC68qB,GACT7zmB,IAKE8zmB,GAA+B,SAAU5mlB,GAEzC,SAAS4mlB,IACL,OAAkB,OAAX5mlB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KAuB/D,OAzBAywF,GAAUynlB,EAAe5mlB,GAIzBN,IACI9pF,GAAS,IACVgxqB,EAAc98qB,UAAW,oBAAgB,GAC5C41F,IACI9pF,GAAS,IACVgxqB,EAAc98qB,UAAW,wBAAoB,GAChD41F,IACI9pF,GAAS,IACVgxqB,EAAc98qB,UAAW,yBAAqB,GACjD41F,IACI9pF,GAAS,IACVgxqB,EAAc98qB,UAAW,yBAAqB,GACjD41F,IACI9pF,GAAS,IACVgxqB,EAAc98qB,UAAW,iCAA6B,GACzD41F,IACI9pF,OACDgxqB,EAAc98qB,UAAW,eAAW,GACvC41F,IACI9pF,KACDgxqB,EAAc98qB,UAAW,uBAAmB,GACxC88qB,GACT9zmB,IAKE+zmB,GAA8B,SAAU7mlB,GAExC,SAAS6mlB,IACL,OAAkB,OAAX7mlB,GAAmBA,EAAOh2F,MAAM0E,KAAMhB,YAAcgB,KA0B/D,OA5BAywF,GAAU0nlB,EAAc7mlB,GAIxBN,IACI9pF,GAAS,IACVixqB,EAAa/8qB,UAAW,mBAAe,GAC1C41F,IACI9pF,GAAS,IACVixqB,EAAa/8qB,UAAW,oBAAgB,GAC3C41F,IACI9pF,GAAS,IACVixqB,EAAa/8qB,UAAW,qBAAiB,GAC5C41F,IACI9pF,EAAS,WACVixqB,EAAa/8qB,UAAW,YAAQ,GACnC41F,IACI9pF,GAAS,IACVixqB,EAAa/8qB,UAAW,2BAAuB,GAClD41F,IACI9pF,GAAS,IACVixqB,EAAa/8qB,UAAW,yBAAqB,GAChD41F,IACI9pF,GAAS,IACVixqB,EAAa/8qB,UAAW,+BAA2B,GACtD41F,IACI9pF,EAAS,KACVixqB,EAAa/8qB,UAAW,gBAAY,GAChC+8qB,GACT/zmB,IAYEs0P,GAAsB,SAAUpnO,GAMhC,SAASonO,EAAK1lT,EAAShS,GACnB,IAAIjB,EAAQuxF,EAAOhwF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAYnD,OAXAD,EAAMg1qB,sBAAuB,EAC7Bh1qB,EAAMq4qB,iBACNr4qB,EAAMs4qB,cAAgBzmkB,GAAUx2G,UAAUqzD,QAI1C1uD,EAAMy2O,mBAENz2O,EAAMo/pB,gBAAiB,EACvBp/pB,EAAM8xG,SAAU,EAChBz0G,EAAS,mBAAoB2C,EAAMu4qB,qBAAsBv4qB,GAClDA,EAulFX,OAzmFA0wF,GAAUioO,EAAMpnO,GAyBhBonO,EAAKt9T,UAAUy3G,eAAiB,WAC5B,IAAI9yG,EAAQC,KACRu4qB,GAAa,eAAgB,eAC7B,iBAAkB,gBAAiB,UAAW,iBAAkB,oBAChE/kkB,GACAxlD,cAAe,WAAY,YAAa,oBAAqB,oBAAqB,aAClFwzlB,gBAAiB,OAAQ,OAAQ,sBAAuB,qBAAsB,gBAC9EyH,eAAgB,eAAgB,mBAAoB,oBAAqB,oBACrE,4BAA6B,oBACjCM,gBAAiB,SAAU,WAAY,cACvCpG,gBAAkB9/kB,WAAawnmB,qBAYnC,OARA0N,EAAUn5qB,QAAQ,SAAUrC,GAExB,IAAK,IADDi/b,EAAgBj8b,EAAMhD,GACjBqB,EAAK,EAAGyE,EAAK2wG,EAAgBz2G,GAAQqB,EAAKyE,EAAGrG,OAAQ4B,IAAM,QAEzD49b,EADGn5b,EAAGzE,OAIrB4B,KAAKw4qB,gBATiB,SAAU,OAAQ,oBAAqB,iBAAkB,WAC3E,kBAAmB,WAAY,cAQCx4qB,KAAKqjE,SAClCrjE,KAAKqzG,aAAaklkB,IAE7B7/W,EAAKt9T,UAAUo9qB,eAAiB,SAAUC,EAAgBp1mB,GACtD,IAAItjE,EAAQC,KACZqjE,EAAQjkE,QAAQ,SAAU4iE,GAClBA,EAAOqB,SACPtjE,EAAM24qB,eAAeD,EAAgBz2mB,GACrCjiE,EAAMy4qB,eAAeC,EAAgBz2mB,EAAOqB,UAG5CtjE,EAAM24qB,eAAeD,EAAgBz2mB,MAIjD02P,EAAKt9T,UAAUs9qB,eAAiB,SAAUD,EAAgBz2mB,GACtDy2mB,EAAer5qB,QAAQ,SAAUmpB,UACtBy5C,EAAOz5C,GACdy5C,EAAO93B,aAQfwuR,EAAKt9T,UAAU47F,gBAAkB,WAC7B,IAAIgB,KACJ,OAAIh4F,KAAKmtF,YACE6K,GAEPh4F,KAAKupmB,gBACLvxgB,EAAQxzF,MACJgzF,OAAQ,SACRv3F,MAAOD,KAAMA,KAAKwhpB,eAAgBxhpB,KAAKomE,kBAG3CpmE,KAAK24qB,kBACL3glB,EAAQxzF,MACJgzF,OAAQ,cACRv3F,MAAOD,QAGXA,KAAK44qB,gBACL5glB,EAAQxzF,MACJgzF,OAAQ,YACRv3F,MAAOD,QAGXA,KAAKs5oB,cACLthjB,EAAQxzF,MACJgzF,OAAQ,OACRv3F,MAAOD,KAAMA,KAAKmjpB,aAAcnjpB,KAAKwrK,cAAexrK,KAAKomE,kBAG7DpmE,KAAKgppB,aACLhxjB,EAAQxzF,MACJgzF,OAAQ,QACRv3F,MAAOD,KAAMA,KAAKguD,gBAGtBhuD,KAAK8zqB,gBACL97kB,EAAQxzF,MACJgzF,OAAQ,YACRv3F,MAAOD,KAAMA,KAAK65iB,kBAAmB75iB,KAAKomE,kBAGlD4xB,EAAQxzF,MACJgzF,OAAQ,SACRv3F,MAAOD,QAEPA,KAAKy5oB,iBACLzhjB,EAAQxzF,MACJgzF,OAAQ,UACRv3F,MAAOD,QAGXA,KAAKyvqB,qBACLz3kB,EAAQxzF,MACJgzF,OAAQ,iBACRv3F,MAAOD,QAGXA,KAAKw5oB,eACLxhjB,EAAQxzF,MACJgzF,OAAQ,QACRv3F,MAAOD,KAAMA,KAAKippB,cAAejppB,KAAKwrK,cAAexrK,KAAKomE,kBAG9DpmE,KAAK6kE,WAAWroE,QAChBw7F,EAAQxzF,MAAOgzF,OAAQ,YAAav3F,MAAOD,KAAMA,KAAKomE,kBAEtDpmE,KAAK64qB,YACL7glB,EAAQxzF,MACJgzF,OAAQ,YACRv3F,MAAOD,KAAMA,KAAKomE,mBAGtBpmE,KAAKu9Y,SAAWv9Y,KAAK84qB,kBACrB9glB,EAAQxzF,MACJgzF,OAAQ,UACRv3F,MAAOD,KAAMA,KAAKomE,mBAGtBpmE,KAAKk7M,sBAAwBl7M,KAAKsrpB,6BAClCtzjB,EAAQxzF,MACJgzF,OAAQ,gBACRv3F,MAAOD,KAAMA,KAAKomE,mBAGtBpmE,KAAKuxpB,oBAAsBvxpB,KAAK+ypB,aAChC/6jB,EAAQxzF,MAAOgzF,OAAQ,SAAUv3F,MAAOD,KAAMA,KAAKomE,kBAEnDpmE,KAAK+4qB,gBAAgB/4qB,KAAKqjE,UAC1B20B,EAAQxzF,MACJgzF,OAAQ,gBACRv3F,MAAOD,KAAMA,KAAKomE,mBAGtBpmE,KAAKimE,aAAa+ymB,aAAeh5qB,KAAKimE,aAAagzmB,eAAiBj5qB,KAAKimE,aAAaH,eACtFkyB,EAAQxzF,MACJgzF,OAAQ,OACRv3F,MAAOD,KAAMA,KAAKomE,kBAG1BpmE,KAAKk5qB,sBAAsBlhlB,GACpBA,IAEX0gO,EAAKt9T,UAAU89qB,sBAAwB,SAAUlhlB,GACzCh4F,KAAKm5qB,kBACLnhlB,EAAQxzF,MACJgzF,OAAQ,cACRv3F,MAAOD,KAAMA,KAAKomE,kBAGtBpmE,KAAK05oB,gBACL1hjB,EAAQxzF,MACJgzF,OAAQ,aACRv3F,MAAOD,KAAMA,KAAKomE,kBAGtBpmE,KAAKo5qB,mBACLphlB,EAAQxzF,MACJgzF,OAAQ,gBACRv3F,MAAOD,KAAMA,KAAKomE,kBAGtBpmE,KAAKq5qB,oBAAoBr5qB,KAAKqjE,UAC9B20B,EAAQxzF,MAAOgzF,OAAQ,aAAcv3F,MAAOD,KAAMA,KAAKomE,mBAO/DsyP,EAAKt9T,UAAUqX,UAAY,WACvBzS,KAAKomE,eAAiB,IAAIm5W,GAC1Bv/a,KAAK6uW,iBACL7uW,KAAK0rc,sBAEThzI,EAAKt9T,UAAUyzW,eAAiB,WAE5B7uW,KAAK8pB,WAAY,EACjB9pB,KAAKwrK,iBACLxrK,KAAKo4qB,iBACLp4qB,KAAKs5qB,YACLt5qB,KAAKm6gB,eAAgB,EACrBn6gB,KAAK43gB,cACL53gB,KAAK2xnB,QAAS,EACd3xnB,KAAK+spB,aAAe,OACpB/spB,KAAK8spB,qBAAsB,EAC3B9spB,KAAK4pqB,oBAAqB,EAC1B5pqB,KAAKq4qB,cAAgBzmkB,GAAUx2G,UAAUqzD,QACzCzuD,KAAKu5qB,iBACDp1qB,SAAU,WAAYgpK,SAAU,WAAYmG,MAAO,QAASkmgB,YAAa,cAAeC,mBAAoB,qBAC5GC,SAAU,WAAYC,gBAAiB,kBAAmBC,SAAU,WAAY1qgB,WAAY,cAEhGlvK,KAAK6rc,eACDguO,YAAa,wBACbC,KAAM,OACNC,MAAO,QACPC,qBAAsB,sBACtBC,cAAe,gDACf5tO,QAAS,wBACT6tO,aAAc,uCACdC,eAAgB,qBAChBC,qBAAsB,uHAEtBC,IAAK,MACLC,KAAM,OACNh8gB,OAAQ,SACRi8gB,OAAQ,SACR3qO,OAAQ,SACRmlD,MAAO,QACPylL,UAAW,aACXC,YAAa,eACbC,WAAY,cACZC,UAAW,aACXx6mB,OAAQ,SACRy6mB,cAAe,UACfhrb,KAAM,OACNj4F,KAAM,OACNg5C,MAAO,QACPkqe,mBAAoB,yCACpBC,qBAAsB,2CACtBC,WAAY,OACZC,SAAU,KACVC,aAAc,SACdC,cAAe,cACfC,aAAc,iBACdC,iBAAkB,yCAClBC,qBAAsB,mEACtBC,cAAe,0CACfC,WAAY,+CACZC,cAAe,gBACfC,cAAe,iBACfC,OAAQ,mBACRC,aAAc,SACdC,YAAa,QACbC,WAAY,cACZC,SAAU,YACVC,SAAU,WACVC,MAAO,QACPC,SAAU,YACVC,SAAU,YACVC,gBAAiB,qBACjBC,YAAa,eACbC,mBAAoB,wBACpBC,WAAY,gBACZC,WAAY,kBACZzwO,KAAM,OACNxU,MAAO,uBACPklP,QAAS,yBACTC,WAAY,uBACZC,QAAS,uBACTC,OAAQ,SACRC,UAAW,aACXlwX,SAAU,YACVmwX,aAAc,gBACdrhX,SAAU,YACVshX,cAAe,iBACfC,eAAgB,kBAChBC,WAAY,cACZC,aAAc,gBACdC,WAAY,SACZ/wO,UAAW,aACXgxO,OAAQ,SACRC,WAAY,OACZC,YAAa,QACbC,SAAU,mBACVC,YAAa,eACbC,aAAc,iBACdC,WAAY,eACZC,WAAY,eACZC,eAAgB,mBAChBC,UAAW,aACXC,QAAS,UACTC,aAAc,gBACdC,wBAAyB,kBACzBC,4BAA6B,gBAC7BC,IAAK,MACLC,GAAI,KACJC,cAAe,oBAEnBn+qB,KAAKw9G,YACDkpjB,UAAW,YACXD,QAAS,UACTF,WAAY,aACZC,UAAW,YACXhiS,UAAW,kBACXC,QAAS,gBACTkiS,WAAY,mBACZC,UAAW,kBACX1rjB,KAAM,OACNj8F,IAAK,MACL87F,OAAQ,SACRspR,SAAU,YACVC,QAAS,WACTv7Q,OAAQ,SACRC,SAAU,WACVo1jB,cAAe,kBACfC,gBAAiB,oBACjBC,UAAW,aACXC,YAAa,eACbv2gB,aAAc,gBACd3+C,WAAY,cACZm1jB,cAAe,iBACfC,YAAa,eACb9L,UAAW,SACX+L,UAAW,SACXnjkB,OAAQ,SACRC,OAAQ,SACRE,GAAI,KACJf,MAAO,QACPypR,UAAW,aACXM,WAAY,cACZhqR,IAAK,MACLsxG,SAAU,YACV7rL,MAAO,QACPw+oB,UAAW,SACXC,eAAgB,iBAQxBlmX,EAAKt9T,UAAUg3G,OAAS,WACpBpyG,KAAKoxpB,YAAYkB,WAAWtypB,KAAKgB,SAAW2Q,KAAM,SAClD+I,IAAgBvT,OAAQnH,KAAKgB,SAAWhB,KAAKmB,eAC7CnB,KAAK6+qB,aAAe,IAAI7xO,GAAOhtc,KAAMA,KAAKomE,gBAC1CpmE,KAAK8+qB,kBACL9+qB,KAAKgvf,aAAe,IAAI7ub,GAAOngE,MAC/BA,KAAK2lX,aAAe,IAAIouT,GAAO/zqB,MAC/BA,KAAK+N,OAAOgypB,OACZ//pB,KAAK2mB,QnChqBK,QmCiqBVy8C,GAAepjE,KAAKqjE,QAASrjE,KAAKsrpB,4BAClCtrpB,KAAKokpB,aACLpkpB,KAAK++qB,eACL/+qB,KAAKg/qB,aACLh/qB,KAAK0kB,aACL1kB,KAAKi/qB,cACLj/qB,KAAKo5pB,sBACLp5pB,KAAKk/qB,sBACLl/qB,KAAKgiB,cACLhiB,KAAK+N,OAAO6hqB,QAKhBl3W,EAAKt9T,UAAU4mB,YAAc,WACzBA,GAAYhiB,KAAKgB,UAKrB03T,EAAKt9T,UAAU2nB,YAAc,WACzBA,GAAY/iB,KAAKgB,UAErB03T,EAAKt9T,UAAU8jrB,oBAAsB,WAC7Bl/qB,KAAKupmB,gBAA+C,cAA7BvpmB,KAAKwhpB,eAAe96oB,MAC3C1G,KAAKgzpB,mBAAmBxxpB,iBAAiB,wBAAwBhF,OACjEwD,KAAKgzpB,mBAAmBlvpB,UAAUM,IAAI,mBAGtCpE,KAAKgzpB,mBAAmBlvpB,UAAUS,OAAO,oBAGjDm0T,EAAKt9T,UAAU0jrB,gBAAkB,WAC7B,IAAK9+qB,KAAKsrpB,2BAA4B,CAClC,IAAI6zB,EAAOn/qB,KAAKokpB,aAEhB,GADApkpB,KAAKo/qB,mBAAqBp/qB,KAAKomE,eAAeE,WAAW,oBACpD7oE,EAAkB0hrB,GACnB,IAAK,IAAIrtqB,EAAQ,EAAGA,EAAQqtqB,EAAK3irB,OAAQsV,IACrC,IAAKrU,EAAkB0hrB,EAAKrtqB,GAAOutqB,aAAc,CAC7Cr/qB,KAAKs5qB,SAAS90qB,KAAK26qB,EAAKrtqB,IACxB,IAAIwtqB,EAAQ1jrB,OAAOuvN,WAAWg0d,EAAKrtqB,GAAOutqB,aAC1Cr/qB,KAAKu/qB,iBAAiBztqB,EAAOwtqB,GAC7BA,EAAML,YAAYj/qB,KAAKu/qB,iBAAiBlkrB,KAAK2E,KAAM8R,OASvE4mT,EAAKt9T,UAAUmkrB,iBAAmB,SAAUvwc,EAAanuO,GACrD,IAAI4kE,EAAMzlE,KAAKokpB,aAAap1a,GAC5BvpK,EAAInuC,QAAUz2B,EAAEmF,QACZhG,KAAKm6gB,gBACD10c,EAAInuC,QACJt3B,KAAKw/qB,UAAUhojB,KAAK/xD,EAAIjC,WAAY,cAGpCxjE,KAAKw/qB,UAAU73lB,KAAKliB,EAAIjC,WAAY,gBAIhDk1P,EAAKt9T,UAAUqkrB,gBAAkB,WAE7B,GADAz/qB,KAAKm6gB,eAAgB,EACjBn6gB,KAAK6kE,WAAWroE,QAAUwD,KAAKgB,QAAQuuY,aAAevvY,KAAK+V,OAAQ,CAEnEpS,GADoB3D,KAAKgB,QAAQ2B,cAAc,mBACpB,oBAEV3C,KAAKokpB,aAAal6mB,OAAO,SAAUu7B,GAAO,MAAoB,aAAbA,EAAI/+D,OACvDlK,QAAkD,oBAAxCwD,KAAK65iB,kBAAkB42H,eAChDzwqB,KAAK8spB,qBAAsB,EAC3B9spB,KAAKmwqB,kBAObz3W,EAAKt9T,UAAUskrB,iBAAmB,aAQlChnX,EAAKt9T,UAAUiX,QAAU,WACrB,IAAIk3pB,EAAcvpqB,KAAKgB,QACvB,GAAKuoqB,EAAL,CAGA,IAAIoW,KAAepW,EAAY5mqB,cAAc,mBACzC4mqB,EAAY5mqB,cAAc,mBAC1Bg9qB,GACA3/qB,KAAKslB,eAETtlB,KAAK4/qB,iBACL5/qB,KAAK+N,OAAOo6oB,OACZnopB,KAAKu4f,0BACDonL,GACArulB,EAAOl2F,UAAUiX,QAAQ/Q,KAAKtB,MAElCA,KAAK6/qB,WAAWxtqB,UAIhB,IAAK,IAHD2lF,GAAW,eAAgB,eAAgB,gBAAiB,wBAC5D,iBAAkB,cAAe,iBAAkB,eAAgB,eAAgB,YACnF,eAAgB,cAAe,kBAAmB,eAC7C97F,EAAI,EAAGA,EAAI87F,EAAQx7F,OAAQN,IAC5B8D,KAAKg4F,EAAQ97F,MACb8D,KAAKg4F,EAAQ97F,IAAM,MAG3B8D,KAAKgB,QAAQgB,UAAY,GACzB8B,EAAU9D,KAAKgB,YAAc,QAAS,cAAe,eAAgB,YAAa,WAAY,wBAElG03T,EAAKt9T,UAAUm9f,wBAA0B,WACrC,IAAIgxK,EAAcvpqB,KAAKgB,QAClBuoqB,IAAiBA,EAAY5mqB,cAAc,kBAAqB4mqB,EAAY5mqB,cAAc,qBAG/F3C,KAAK2lX,aAAatzW,UAClBrS,KAAKosH,eAAe/5G,UACpBrS,KAAK8/qB,YAAYztqB,YAMrBqmT,EAAKt9T,UAAU2mC,cAAgB,WAC3B,MAAO,QAQX22R,EAAKt9T,UAAUuyF,kBAAoB,SAAUkF,EAASC,GAClD,IAGIitlB,EAHAC,GAAiB,EACjBC,GAAqB,EACrB5H,GAAgB,EAGpB,IAAIr4qB,KAAKmtF,YAAT,CAGA,IAAIlqF,EAAa3E,OAAOhB,KAAKu1F,GACzB5vF,EAAW1E,QAAQ,YAAc,IACjCyB,KAAKkgrB,qBACLD,GAAqB,GAEzB,IAAK,IAAI7hrB,EAAK,EAAG68D,EAAeh4D,EAAY7E,EAAK68D,EAAaz+D,OAAQ4B,IAAM,CACxE,IAAIkM,EAAO2wD,EAAa78D,GACxB,OAAQkM,GACJ,IAAK,cACDtK,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,QAASr1D,OAAQjiC,KAAKgppB,cAC7Dg3B,GAAiB,EACjB,MACJ,IAAK,eACDhgrB,KAAK+N,OAAO+hqB,IAA8Bx4kB,OAAQ,QAASr0F,WAAY4vF,EAAQ7kC,gBAC3EvwD,EAAkBo1F,EAAQ7kC,aAAa2wL,cAAgBlhP,EAAkBo1F,EAAQ7kC,aAAaoxmB,qBAC1F3hqB,EAAkBq1F,EAAQ9kC,eACxB6kC,EAAQ7kC,aAAa2wL,cAAgB7rJ,EAAQ9kC,aAAa2wL,cACpD3+O,KAAKsrpB,6BAA+BtrpB,KAAKk7M,sBAC1Cl7M,KAAKguD,aAAaoxmB,mBAAqBp/pB,KAAKguD,aAAay/G,YACpEuygB,GAAiB,GAErB,MACJ,IAAK,eACL,IAAK,SACD1ulB,EAAOl2F,UAAUqzD,QAAQntD,KAAKtB,MAC9B,MACJ,IAAK,eACDA,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,OAAQr1D,OAAQjiC,KAAKs5oB,eAC5D0mC,GAAiB,EACjBD,GAAc,EACd,MACJ,IAAK,iBACD//qB,KAAKk/qB,sBACLl/qB,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,SAAUr1D,OAAQjiC,KAAKupmB,iBAC9Dy2E,GAAiB,EACgB,cAA7BhgrB,KAAKwhpB,eAAe96oB,MACpB1G,KAAKmwqB,gBAET,MACJ,IAAK,SACL,IAAK,QACDnwqB,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,SAAUr0F,YAAc+S,MAAO68E,EAAQ78E,MAAOD,OAAQ88E,EAAQ98E,UACrG,MACJ,IAAK,kBACD/V,KAAK20qB,aAAazb,YAClB6mB,GAAc,EACd,MACJ,IAAK,sBACD//qB,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,iBAAkBr1D,OAAQjiC,KAAKyvqB,sBACtE,MACJ,IAAK,iBACDzvqB,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,YAAar1D,OAAQjiC,KAAK8zqB,iBACjE,MACJ,IAAK,cACD9zqB,KAAKmgrB,cAAgBv9mB,GAAiB5iE,KAAKqspB,aAC3C2zB,GAAiB,EACjB,MACJ,IAAK,iBACDhgrB,KAAKogrB,iBAAmBx9mB,GAAiB5iE,KAAK2tpB,gBAC9CqyB,GAAiB,EACjB,MACJ,IAAK,gBACDhgrB,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,QAASr1D,OAAQjiC,KAAKw5oB,gBAC7Dx5oB,KAAK20qB,aAAazb,YAClB8mB,GAAiB,EACjBD,GAAc,EACd,MACJ,IAAK,YACDC,GAAiB,EACjB,MACJ,IAAK,UACDhgrB,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,YACvC,MACJ,IAAK,gBACDt3F,KAAK+N,OAAO+hqB,IACRx4kB,OAAQ,QAASr0F,WAAY4vF,EAAQo2jB,cACrCp8jB,cAAeiG,EAAQm2jB,gBAE3B,MACJ,IAAK,cACIjppB,KAAK6kE,WAAWroE,QAAUwD,KAAKw5oB,eAAiBx5oB,KAAKippB,cAAc5llB,QAAQ7mE,SAC5EwjrB,GAAiB,GAErBhgrB,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,YAAar0F,WAAY4vF,IAChE,MACJ,IAAK,gBACL,IAAK,aACDwllB,GAAgB,EAChB4H,GAAqB,EACrB,MACJ,IAAK,uBACD3ulB,EAAOl2F,UAAUqzD,QAAQntD,KAAKtB,MAC9B,MACJ,QACIA,KAAKqgrB,uBAAuB/1qB,EAAMuoF,IAG1CktlB,GACA//qB,KAAKo5pB,sBAEL6mB,EACI5H,GAAiBr4qB,KAAK24pB,eAAiB34pB,KAAK+ypB,WAC5C/ypB,KAAKq4qB,gBAGLr4qB,KAAKyuD,UAGJuxnB,IACLhgrB,KAAK+N,OAAOiypB,IAjHHh2d,YAAa,YAkHtBg2e,GAAiB,KAIzBtnX,EAAKt9T,UAAUilrB,uBAAyB,SAAU/1qB,EAAMuoF,GACpD,OAAQvoF,GACJ,IAAK,YACDtK,KAAKsgrB,YACDtgrB,KAAKgppB,cACLhppB,KAAKgB,QAAQ2B,cAAc,gBAAgBkrF,cAAc,GAAG36E,UAAY2/E,EAAQ3/E,UAChFlT,KAAKgB,QAAQ2B,cAAc,gBAAgBkrF,cAAc,GAAGrmC,YAE5C,SAAhBxnD,KAAK+V,SACL/V,KAAK2lX,aAAa8uT,eAAe5hlB,EAAQ3/E,WACzClT,KAAK2lX,aAAa0uT,cAElBr0qB,KAAKu9Y,UACLv9Y,KAAKk0qB,cAAcqM,aAAa1ylB,cAAc,GAAG36E,UAAY2/E,EAAQ3/E,UACrElT,KAAKk0qB,cAAcqM,aAAa1ylB,cAAc,GAAGrmC,YAEjDxnD,KAAKm5qB,mBACLn5qB,KAAKivf,kBAAkBuxL,iBAAiB3ylB,cAAc,GAAG36E,UAAY2/E,EAAQ3/E,UAC7ElT,KAAKivf,kBAAkBuxL,iBAAiB3ylB,cAAc,GAAGrmC,YAEzDxnD,KAAK05oB,iBACL15oB,KAAKygrB,iBAAiBC,gBAAgB7ylB,cAAc,GAAG36E,UAAY2/E,EAAQ3/E,UAC3ElT,KAAKygrB,iBAAiBC,gBAAgB7ylB,cAAc,GAAGrmC,YAE3DxnD,KAAK+N,OAAO4yqB,OACZ,MACJ,IAAK,eACD3grB,KAAK6+qB,aAAapwnB,UAClB,MACJ,IAAK,gBACDzuD,KAAK20qB,aAAazb,YAClBl5pB,KAAK4grB,oBACL,MACJ,IAAK,YACG5grB,KAAKmlE,UACLxhE,GAAU3D,KAAKgB,SAAU,qBAGzBqD,GAAarE,KAAKgB,SAAU,qBAEhChB,KAAK6+qB,aAAapwnB,UAClBzuD,KAAK20qB,aAAazb,YAClB,MACJ,IAAK,YACDl5pB,KAAK6grB,kBACL,MACJ,IAAK,iBACD7grB,KAAK20qB,aAAazb,YAClBl5pB,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,aAAcr1D,QAAQ,IAC7D,MACJ,IAAK,kBACDjiC,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,aAAcr1D,OAAQjiC,KAAK8grB,kBAClE,MACJ,IAAK,mBACD9grB,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,cAAer1D,OAAQjiC,KAAKm5qB,mBACnE,MACJ,IAAK,oBACDn5qB,KAAK+N,OAAOokpB,IAAmB76jB,OAAQ,gBAAiBr1D,OAAQjiC,KAAKo5qB,oBACrE,MACJ,IAAK,iBACDp5qB,KAAKk/qB,sBACLl/qB,KAAK+N,OAAO+hqB,IAA8Bx4kB,OAAQ,SAAUr0F,WAAY4vF,EAAQ2ujB,iBAChF,MACJ,IAAK,iBACDxhpB,KAAK+N,OAAO+hqB,IAA8Bx4kB,OAAQ,SAAUr0F,WAAY4vF,EAAQ02jB,iBAChF,MACJ,IAAK,eACDvppB,KAAK+N,OAAO+hqB,IAA8Bx4kB,OAAQ,SAClD,MACJ,IAAK,oBACDt3F,KAAK+N,OAAO+hqB,IAA8Bx4kB,OAAQ,YAAar0F,WAAY4vF,EAAQgnd,oBACnF,MACJ,IAAK,eACD75iB,KAAK+N,OAAO+hqB,IAA8Bx4kB,OAAQ,OAAQr0F,WAAY4vF,EAAQ5sB,eAC9E,MACJ,IAAK,gBACL,IAAK,mBACGjmE,KAAK2xpB,cACL3xpB,KAAK+grB,gBAGL/grB,KAAKghrB,iBAEThhrB,KAAK+N,OAAO6jpB,IAAuBC,KAAM,WAAYovB,UAAqB,qBAAT32qB,IACjE,MACJ,IAAK,aACD,IAAI42qB,EAAYlhrB,KAAKyipB,gBAAgBjmQ,WACrC,GAAI0kS,EAAUt5B,UAAW,CACrB,IAAIu5B,EAAa1jrB,EAAkBuC,KAAKqoE,eAAcroE,KAAKqoE,WAAWtpE,QACrEmirB,EAAUholB,WAAa95F,QAAQ,SAAUm4B,GACtC4ppB,EAAYl/mB,GAASi3B,MAAMiolB,EAAW5ppB,EAAM2ppB,EAAUr8mB,kBAE1D7kE,KAAKqoE,YACDtpE,OAAQoirB,EAAWjiqB,MAAOlf,KAAKqoE,WAAWnpD,MAC1C2lD,WAAY7kE,KAAKqoE,WAAWxD,YAEhCq8mB,EAAUr5B,SAAS7npB,KAAKqoE,iBAGxBroE,KAAKyipB,gBAAgBgI,UAAWI,eAAe,IAC/C7qpB,KAAK+N,OAAOm6oB,OACZlopB,KAAK6+qB,aAAapwnB,UAEtB,MACJ,IAAK,eACYokC,EAAQuulB,YAAcz9qB,EAAWU,IACtCrE,KAAKgB,SAAU,iBAOnC03T,EAAKt9T,UAAU4L,cAAgB,SAAUsD,EAAM8iF,GAC3CkE,EAAOl2F,UAAU4L,cAAc1F,KAAKtB,KAAMsK,EAAM8iF,GAC5CptF,KAAKqhrB,cAAgBj0lB,GACrBptF,KAAKqhrB,aAAaC,iBAM1B5oX,EAAKt9T,UAAUg+pB,oBAAsB,WAEjC,IAAK,IAAIh7pB,EAAK,EAAGmjrB,KADGlgrB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,oBACjBpD,EAAKmjrB,EAAa/krB,OAAQ4B,IAAM,CACxE,IAAIsnE,EAAM67mB,EAAanjrB,GACnB4B,KAAKs5oB,cAAiBt5oB,KAAKw5oB,eAAiBx5oB,KAAKippB,cAAcwQ,cAAiBz5pB,KAAKy5oB,gBACrF/zkB,EAAI5hE,UAAUS,OAAO,mBAGrBmhE,EAAI5hE,UAAUM,IAAI,qBAI9Bs0T,EAAKt9T,UAAUomrB,kBAAoB,SAAUn+mB,GACzC,IAAK,IAAInnE,EAAI,EAAG2F,EAAMwhE,EAAQ7mE,OAAQN,EAAI2F,EAAK3F,IACvCmnE,EAAQnnE,GAAGmnE,QACXrjE,KAAKwhrB,kBAAkBn+mB,EAAQnnE,GAAGmnE,SAGlCrjE,KAAKyhrB,YAAYj9qB,KAAK6+D,EAAQnnE,IAGtC8D,KAAK0hrB,uBAEThpX,EAAKt9T,UAAUsmrB,oBAAsB,WAGjC,IAAK,IAFDn7B,EAAOvmpB,KAAKyhrB,YACZviqB,EAAQ,EACHhjB,EAAI,EAAG2F,EAAM0kpB,EAAK/ppB,OAAQN,EAAI2F,EAAK3F,IACpCqqpB,EAAKrqpB,GAAGs1pB,WACRjL,EAAK59nB,OAAO3oB,KAAK24pB,cAAgBz5oB,EAAO,EAAGqnoB,EAAK59nB,OAAOzsB,EAAG,GAAG,IAC7DgjB,MAQZw5S,EAAKt9T,UAAUgppB,WAAa,SAAUu9B,GAClC,IAAI5hrB,EAAQC,KACR4hrB,EAAS5hrB,KAAKo4qB,cAAc1gpB,IAAI,SAAU8uI,GAAK,OAAOA,EAAIzmK,EAAMkppB,cAAc5llB,QAAQ7mE,SAAW0tC,OAAO,SAAUs8H,GAAK,OAAOA,GAAK,IACnIq7gB,EAAOD,EAAOplrB,SACbwD,KAAKsrpB,4BAA8B7tpB,EAAkBuC,KAAKyhrB,cAA4C,IAA5BzhrB,KAAKyhrB,YAAYjlrB,QAAgBmlrB,KAC5G3hrB,KAAKyhrB,eACLzhrB,KAAKwhrB,kBAAkBxhrB,KAAKqjE,UAIhC,OAFuB,IAATw+mB,EAAa7hrB,KAAKyhrB,YAC5BzhrB,KAAKyhrB,YAAYpgrB,MAAMugrB,EAAO,GAAIA,EAAOC,EAAO,GAAK,IAM7DnpX,EAAKt9T,UAAU66pB,mCAAqC,SAAU6rB,EAAer8mB,GACzE,IAAK,IAAIvpE,EAAI,EAAGA,EAAIupE,EAAIjpE,OAAQN,IAAK,CACjC,IAAI6lrB,EAAmBt8mB,EAAIvpE,GAC3B,GAAI6lrB,EAAiBhgnB,QAAU+/mB,GAAiBC,EAAiBv+mB,aAAes+mB,EAAe,CAC3F9hrB,KAAKgirB,cAAgBD,EACrB,MAEKA,EAAiB1+mB,SACtBrjE,KAAKi2pB,mCAAmC6rB,EAAeC,EAAiB1+mB,SAGhF,OAAOrjE,KAAKgirB,eAKhBtpX,EAAKt9T,UAAU8wpB,uBAAyB,WACpC,OAAOlspB,KAAKo4qB,eAKhB1/W,EAAKt9T,UAAU6mrB,mBAAqB,WAChC,OAAOjirB,KAAK6rc,eAKhBnzI,EAAKt9T,UAAU8mrB,uBAAyB,SAAUnhZ,GAC9C/gS,KAAKo4qB,cAAgBr3Y,GAMzB23B,EAAKt9T,UAAU+wpB,kBAAoB,WAE/B,IAAK,IADD5F,KACKnopB,EAAK,EAAGyE,EAAK7C,KAAKyhrB,YAAarjrB,EAAKyE,EAAGrG,OAAQ4B,IAAM,CAC1D,IAAIqnE,EAAM5iE,EAAGzE,GACTqnE,EAAInuC,SACJivnB,EAAK/hpB,KAAKihE,GAGlB,OAAO8glB,GAMX7tV,EAAKt9T,UAAU43pB,iBAAmB,WAC9B,OAAOhzpB,KAAK20qB,aAAarjB,YAO7B54V,EAAKt9T,UAAU+mrB,qBAAuB,SAAUnhrB,GAC5ChB,KAAK20qB,aAAaniB,SAASxxpB,IAM/B03T,EAAKt9T,UAAUkmqB,gBAAkB,WAC7B,OAAOthqB,KAAKo8E,cAAcywM,YAO9B6rC,EAAKt9T,UAAUgnrB,oBAAsB,SAAUphrB,GAC3ChB,KAAKo8E,cAAcw2kB,SAAS5xpB,IAMhC03T,EAAKt9T,UAAUo2D,WAAa,WACxB,OAAOxxD,KAAKo8E,cAAck1kB,YAO9B54V,EAAKt9T,UAAUinrB,eAAiB,SAAUrhrB,GACtChB,KAAKo8E,cAAco2kB,SAASxxpB,IAMhC03T,EAAKt9T,UAAU64pB,eAAiB,WAC5B,OAAOj0pB,KAAK20qB,aAAa9nZ,YAO7B6rC,EAAKt9T,UAAUknrB,mBAAqB,SAAUthrB,GAC1ChB,KAAK20qB,aAAa/hB,SAAS5xpB,IAM/B03T,EAAKt9T,UAAUm6qB,iBAAmB,WAI9B,OAHI93qB,EAAkBuC,KAAKuirB,iBACvBvirB,KAAKuirB,cAAgBvirB,KAAKgB,QAAQ0M,uBAAuB,gBAAgB,IAEtE1N,KAAKuirB,eAMhB7pX,EAAKt9T,UAAUonrB,sBAAwB,WAInC,OAHI/krB,EAAkBuC,KAAKuirB,iBACvBvirB,KAAKuirB,cAAgBvirB,KAAKgB,QAAQ0M,uBAAuB,gBAAgB,IAEtE1N,KAAKuirB,cAAcvlqB,WAAWA,YAMzC07S,EAAKt9T,UAAUqnrB,SAAW,WACtB,OAAOzirB,KAAK0irB,WAOhBhqX,EAAKt9T,UAAUunrB,aAAe,SAAU3hrB,GACpChB,KAAK0irB,UAAY1hrB,GAOrB03T,EAAKt9T,UAAUm6pB,cAAgB,SAAUzjpB,GACrC,OAAO9R,KAAKo8E,cAAcm5kB,cAAczjpB,IAO5C4mT,EAAKt9T,UAAUs6pB,qBAAuB,SAAU5jpB,GAC5C,OAAO9R,KAAKo8E,cAAcs5kB,qBAAqB5jpB,IAMnD4mT,EAAKt9T,UAAUm5pB,QAAU,WACrB,OAAOv0pB,KAAKo8E,cAAcq4kB,kBAO9B/7V,EAAKt9T,UAAUwnrB,WAAa,SAAUz7qB,GAClC,IAAInD,EAAMmD,EACNlH,GAASkH,OAAQA,GACrB,IAAK1J,EAAkB0J,IAAW1J,EAAkB87D,GAAav1D,EAAK,wBAC/DvG,EAAkB87D,GAAav1D,EAAK,0BAA4BhE,KAAK2xnB,OAAQ,CAChF,IAAI5pjB,EAAOliE,EAAQ7B,EAAK,cACxB,IAAK+jE,EACD,OAAO9nE,EAEX,IAAIszT,EAAY3+R,SAASmzC,EAAKl1D,aAAa,iBAAkB,IAC7D,IAAKpV,EAAkBsqE,KAAU5qB,MAAMo2Q,GAAY,CAC/C,IAAI00N,EAAQpihB,EAAQkiE,EAAM,UACtBknK,EAAWr6M,SAASqzf,EAAMp1gB,aAAa,iBAAkB,IACzDm3D,EAAUhqE,KAAKuxpB,mBACf6G,IAAYpulB,GAAUupP,GAAavpP,EAGnC64mB,GAFQzqB,EACRp4pB,KAAKo8E,cAAco4kB,iBAAmBx0pB,KAAKo8E,cAAcm4kB,WACvCrqnB,OAAO,SAAU/K,GAAK,OAAOA,EAAEz/B,MAAQuohB,EAAMp1gB,aAAa,cAC5Ei4D,EAAU+3mB,EAAW,GAAGtmrB,KACxBylE,EAAS6gnB,EAAW,GAAGj8mB,MAAMwxlB,EAAY7kW,EAAYvpP,EAAUupP,GAAWvxP,OAC9E/hE,GAAS8nE,KAAMA,EAAMwrP,UAAWA,EAAW7tP,IAAKuid,EAAOh5S,SAAUA,EAAUnkK,QAASA,EAAS9I,OAAQA,EAAQ76D,OAAQA,IAG7H,OAAOlH,GAMXy4T,EAAKt9T,UAAUo5pB,eAAiB,WAC5B,OAAOx0pB,KAAKo8E,cAAcs4kB,yBAM9Bh8V,EAAKt9T,UAAUo6pB,YAAc,WACzB,IAAI5ob,KAAUvrO,MAAMC,KAAKtB,KAAKshqB,kBAAkB3+pB,cAAc,SAASyX,UACvE,GAAIpa,KAAK+ypB,WAAY,CACjB,IAAI/B,KAAgB3vpB,MAAMC,KAAKtB,KAAKi0pB,iBAAiBtxpB,cAAc,SAASyX,UAC5EwyN,EAAO5sO,KAAKovqB,eAAepe,EAAYpkb,GAG3C,OADe5sO,KAAKiwpB,iBAAiBrjb,IAMzC8rF,EAAKt9T,UAAUg0qB,eAAiB,SAAUta,EAAOguB,GAC7C,IAAK,IAAI5mrB,EAAI,EAAG2F,EAAMihrB,EAAMtmrB,OAAQN,EAAI2F,EAAK3F,IACzC44pB,EAAMtwpB,KAAKs+qB,EAAM5mrB,IAErB,OAAO44pB,GAEXp8V,EAAKt9T,UAAU60pB,iBAAmB,SAAUrjb,GAExC,IAAK,IADDm2c,KACK7mrB,EAAI,EAAG2F,EAAM+qO,EAAKpwO,OAAQN,EAAI2F,EAAK3F,IACpC0wO,EAAK1wO,GAAG4H,UAAUK,SAAS,WAAayoO,EAAK1wO,GAAG4H,UAAUK,SAAS,gBACnE4+qB,EAAMv+qB,KAAKooO,EAAK1wO,IAGxB,OAAO6mrB,GAMXrqX,EAAKt9T,UAAUu6pB,mBAAqB,WAChC,IAAI/ob,KAAUvrO,MAAMC,KAAKtB,KAAKwxD,aAAa7uD,cAAc,qBAAqBA,cAAc,SAASyX,UACrG,GAAIpa,KAAK+ypB,WAAY,CACjB,IAAI/B,KAAgB3vpB,MAAMC,KAAKtB,KAAKgzpB,mBAAmBrwpB,cAAc,oBAAoBA,cAAc,SAASyX,UAChHwyN,EAAO5sO,KAAKovqB,eAAepe,EAAYpkb,GAG3C,OADe5sO,KAAKiwpB,iBAAiBrjb,IAUzC8rF,EAAKt9T,UAAU4nrB,aAAe,SAAU3lrB,EAAK0kE,EAAOhlE,GAChD,IAIIkmrB,EACAx9mB,EACAstS,EACAmwU,EACAC,EAASnjrB,KAAKmqpB,0BAA0B,GACxCpilB,EAAO,IAAI4xlB,GAAa35pB,KAAMA,KAAKomE,gBACnCy1f,KACAunH,KACAC,EAAarjrB,KAAKo8E,cAAcm4kB,UAChC+uB,EAAoBtjrB,KAAKo8E,cAAco4kB,iBAc3C,GAbAyuB,EAAWjjrB,KAAK+4pB,sBAAsBh3lB,IAClC/hE,KAAKippB,cAAc5llB,QAAQ7mE,OAAS,GAAKwD,KAAK0xT,WAAa1xT,KAAK2tpB,kBAChEs1B,GAAsB,GAE1Bx9mB,EAAMzlE,KAAKkppB,iBAAiBnnlB,GAC5B85f,EAAcwnH,EAAWn5oB,OAAO,SAAU/K,GACtC,OAAOviC,EAASumrB,EAAQhkpB,EAAE5iC,QAAUc,IACrC,GACH+lrB,EAAqBE,EAAkBp5oB,OAAO,SAAU/K,GACpD,OAAOviC,EAASumrB,EAAQhkpB,EAAE5iC,QAAUc,IACrC,GACH01W,EAAMt1W,EAAkBo+jB,GAAsF,KAAvE77jB,KAAKgB,QAAQ2B,cAAc,aAAek5jB,EAAkB,IAAI,KACvGqnH,EAAOzlrB,EAAkB2lrB,GAAoG,KAA9EpjrB,KAAKgB,QAAQ2B,cAAc,aAAeygrB,EAAyB,IAAI,MACjH3lrB,EAAkBs1W,GAAvB,CACI31W,EAAS2kE,EAAOhlE,EAAO8+jB,EAAmB,MAC1C,IAAI5sR,EAAMxxS,EAAkBs1W,EAAGzhW,WAAW2xqB,IACZC,EAAI5xqB,WAAW2xqB,EAAWjjrB,KAAK24pB,eAAzD5lT,EAAGzhW,WAAW2xqB,GAClB,IAAKxlrB,EAAkBwxS,GAAK,CACxB,IAAIs0Y,EAAO1nH,EAAiB,MAAEonH,GAC1BjY,OAAO,EACPhrqB,KAAK24pB,gBACLqS,EAAOoY,EAAwB,MAAEH,EAAWjjrB,KAAK24pB,gBAErD5wlB,EAAKsylB,UAAUprX,EAAKxxS,EAAkB8lrB,GAAevY,EAAPuY,EAAa1nH,EAAmB,MAAK/pjB,MAAO+pjB,EAAkB,QACxG77jB,KAAK6kE,WAAWroE,OAAS,IACzBwD,KAAK+N,OAAOy1qB,OACRxjrB,KAAKippB,cAAc5llB,QAAQ7mE,OAAS,GACpCwD,KAAK+N,OAAO01qB,QAIfhmrB,EAAkB2lrB,IAAwB3lrB,EAAkB2lrB,EAA4B,WACzFA,EAA4B,QAAErhnB,GAAShlE,GAG3CiD,KAAK2mB,QAAQ+8pB,IACT37mB,KAAMknO,EAAIjtO,OAAQyD,EAAKlpE,KAAMs/jB,EAAmB,UAchEnjQ,EAAKt9T,UAAUuorB,WAAa,SAAUtmrB,EAAKytE,GACvC,IAGI+wf,EADAwnH,EAAarjrB,KAAKo8E,cAAcm4kB,UAEhC4uB,EAASnjrB,KAAKmqpB,0BAA0B,GACxCsN,EAAc,IAAIrL,GAAYpspB,KAAKomE,eAAgB,KAAMpmE,MACzDA,KAAKippB,cAAc5llB,QAAQ7mE,OAAS,GAAKwD,KAAK6kE,WAAWroE,OAAS,IAClE6mrB,EAAaA,EAAWn5oB,OAAO,SAAUw7B,GAAO,OAAOA,EAAIknlB,cAK1DnvpB,EAHLo+jB,EAAcwnH,EAAWn5oB,OAAO,SAAU/K,GACtC,OAAOviC,EAASumrB,EAAQhkpB,EAAE5iC,QAAUc,IACrC,KACoC2C,KAAKgB,QAAQQ,iBAAiB,aAAeq6jB,EAAkB,IAAI,KAAKr/jB,SAC3Gq/jB,EAAYrxX,QAAU1/H,EACtBlD,GAAmBi0f,EAAa77jB,KAAK2lpB,uBAAwB9pF,EAAYrxX,SACzEitd,EAAYhpmB,QAAQotgB,EAAa77jB,KAAKokpB,cAAc,GAChDpkpB,KAAK6kE,WAAWroE,OAAS,IACzBwD,KAAK+N,OAAOy1qB,OACRxjrB,KAAKippB,cAAc5llB,QAAQ7mE,OAAS,GACpCwD,KAAK+N,OAAO01qB,UAc5B/qX,EAAKt9T,UAAU8xqB,iBAAmB,SAAUj+b,EAAUD,GAClD,OAAOhvO,KAAKw1pB,cAAcvmb,GAAUztO,iBAAiB,cAAcwtO,IAQvE0pF,EAAKt9T,UAAU2xqB,wBAA0B,SAAU99b,EAAUD,GACzD,OAAOhvO,KAAK21pB,qBAAqB1mb,GAAUztO,iBAAiB,cAAcwtO,EAAchvO,KAAKuxpB,qBAOjG74V,EAAKt9T,UAAUi8qB,uBAAyB,SAAUvlqB,GAC9C,OAAO9R,KAAKi0pB,iBAAiBzypB,iBAAiB,iBAAiBsQ,IAKnE4mT,EAAKt9T,UAAUgvqB,oBAAsB,SAAU1qqB,GAC3C,IAAIktO,EAAO5sO,KAAKo8E,cAAcm4kB,UAC1B7ulB,EAAM1lE,KAAK4jrB,UAAUh3c,EAAMltO,GAC/B,OAAIM,KAAKuxpB,qBACA7rlB,EACDA,EAAM1lE,KAAK4jrB,UAAU5jrB,KAAKo8E,cAAco4kB,iBAAkB90pB,GAI3DgmE,GAEXgzP,EAAKt9T,UAAUworB,UAAY,SAAUh3c,EAAMltO,GACvC,IAAK,IAAItB,EAAK,EAAG4voB,EAASpha,EAAMxuO,EAAK4voB,EAAOxxoB,OAAQ4B,IAAM,CACtD,IAAIsnE,EAAMsokB,EAAO5voB,GACjB,GAAIsnE,EAAIhmE,MAAQA,EACZ,OAAOgmE,EAGf,OAAO,MAKXgzP,EAAKt9T,UAAU23qB,cAAgB,WAC3B,OAAO/yqB,KAAKo8E,cAAcm4kB,WAK9B77V,EAAKt9T,UAAUszqB,qBAAuB,WAClC,OAAO1uqB,KAAKo8E,cAAco4kB,kBAO9B97V,EAAKt9T,UAAUyorB,uBAAyB,SAAU9hnB,GAC9C,OAAO/hE,KAAK8jrB,qBAAqB9jrB,KAAKkppB,iBAAiBnnlB,GAAOriE,MAOlEg5T,EAAKt9T,UAAU0orB,qBAAuB,SAAUpkrB,GAC5C,OAAOM,KAAKgzpB,mBAAmBrwpB,cAAc,iBAAmBjD,EAAM,KAAK2U,eAK/EqkT,EAAKt9T,UAAUopqB,iBAAmB,SAAU1ypB,GACxC,IAAIkwD,EAKJ,OAJAhiE,KAAKokpB,aAAazlnB,KAAK,SAAU8mC,EAAKvpE,GAElC,OADA8lE,EAASyD,EACFvpE,IAAM4V,IAEVkwD,GAOX02P,EAAKt9T,UAAU8tpB,iBAAmB,SAAUnnlB,GACxC,OAAOO,GAAqBtiE,KAAKokpB,aAAc,SAAUnmoB,EAAMnM,GAC3D,GAAImM,EAAK8jD,QAAUA,EACf,OAAO9jD,IAGZ,IAOPy6S,EAAKt9T,UAAU29pB,sBAAwB,SAAUh3lB,GAE7C,IAAK,IADDwklB,EAAOvmpB,KAAKokpB,aACPlopB,EAAI,EAAGA,EAAIqqpB,EAAK/ppB,OAAQN,IAC7B,GAAIqqpB,EAAKrqpB,GAAG6lE,QAAUA,EAClB,OAAO7lE,EAGf,OAAQ,GAOZw8T,EAAKt9T,UAAU86pB,eAAiB,SAAUx2pB,GACtC,OAAO4iE,GAAqBtiE,KAAKokpB,aAAc,SAAUnmoB,EAAMnM,GAC3D,GAAImM,EAAKve,MAAQA,EACb,OAAOue,IAGZ,IAOPy6S,EAAKt9T,UAAU09pB,oBAAsB,SAAUp5pB,GAC3C,IAAIoS,EAAQwwD,GAAqBtiE,KAAKokpB,aAAc,SAAUnmoB,EAAMnM,GAChE,GAAImM,EAAKve,MAAQA,EACb,OAAOoS,IAGZ,GACH,OAAQrU,EAAkBqU,IAAkB,EAATA,GAOvC4mT,EAAKt9T,UAAU2orB,oBAAsB,SAAUhinB,GAC3C,OAAOO,GAAqBtiE,KAAKokpB,aAAc,SAAUnmoB,EAAMnM,GAC3D,GAAImM,EAAK8jD,QAAUA,EACf,OAAO9jD,EAAKve,MAGjB,IAQPg5T,EAAKt9T,UAAUg6pB,yBAA2B,SAAU11pB,GAChD,IAAIoS,EAAQ9R,KAAK84pB,oBAAoBp5pB,GAWrC,OAVIM,KAAKw5oB,gBACL1noB,GAAS9R,KAAKippB,cAAc5llB,QAAQ7mE,QAEpCwD,KAAK64qB,YACL/mqB,IAMGA,GAMX4mT,EAAKt9T,UAAU4orB,oBAAsB,WAGjC,IAAK,IADDhinB,EADAiinB,KAEK/nrB,EAAI,EAAG2F,EAAM7B,KAAKokpB,aAAa5npB,OAAQN,EAAI2F,EAAK3F,KACrD8lE,EAAShiE,KAAKokpB,aAAalopB,IAChBo7B,SACP2spB,EAAYz/qB,KAAKw9D,EAAOD,OAGhC,OAAOkinB,GAOXvrX,EAAKt9T,UAAU04pB,eAAiB,WAC5B,OAAO9zpB,KAAKmgrB,eAOhBznX,EAAKt9T,UAAU8orB,kBAAoB,WAC/B,OAAOlkrB,KAAKogrB,kBAOhB1nX,EAAKt9T,UAAU2+oB,gBAAkB,WAC7B,OAAO/5oB,KAAKg6oB,gBAMhBthV,EAAKt9T,UAAU+upB,wBAA0B,WAErC,IAAK,IADD7spB,KACKgpB,EAAI,EAAGA,EAAItmB,KAAKyhrB,YAAYjlrB,OAAQ8pB,IACrCtmB,KAAKyhrB,YAAYn7pB,GAAGu/C,cACpBvoE,EAAKkH,KAAKxE,KAAKyhrB,YAAYn7pB,GAAGy7C,OAGtC,OAAOzkE,GAKXo7T,EAAKt9T,UAAUqzD,QAAU,WACrBzuD,KAAK20qB,aAAazb,YAClBl5pB,KAAKk/qB,sBACLl/qB,KAAK6+qB,aAAapwnB,WAKtBiqQ,EAAKt9T,UAAU+0qB,cAAgB,WAC3BnwqB,KAAK20qB,aAAazb,aAMtBxgW,EAAKt9T,UAAU+orB,gBAAkB,WAC7B,OAAOnkrB,KAAK00O,gBAAkB10O,KAAK00O,gBAAgB4zb,oBAMvD5vW,EAAKt9T,UAAUyxpB,sBAAwB,WACnC,OAAO7spB,KAAK00O,gBAAkB10O,KAAK00O,gBAAgB0zb,uBAMvD1vW,EAAKt9T,UAAUs8qB,0BAA4B,WACvC,OAAO13qB,KAAK00O,gBAAgB2zb,wBAMhC3vW,EAAKt9T,UAAU03qB,mBAAqB,WAChC,OAAO9yqB,KAAK00O,gBAAkB10O,KAAK00O,gBAAgBo+b,yBAMvDp6W,EAAKt9T,UAAUqnpB,cAAgB,WAC3B,OAAOzipB,KAAK6+qB,aAAatirB,MAQ7Bm8T,EAAKt9T,UAAUgprB,YAAc,SAAU9mrB,EAAMo2qB,GACzCA,EAASA,GAAkB,aAC3B1zqB,KAAKw/qB,UAAUhojB,KAAKl6H,EAAMo2qB,IAQ9Bh7W,EAAKt9T,UAAUiprB,YAAc,SAAU/mrB,EAAMs2qB,GACzCA,EAASA,GAAkB,aAC3B5zqB,KAAKw/qB,UAAU73lB,KAAKrqF,EAAMs2qB,IAK9Bl7W,EAAKt9T,UAAUm2pB,iBAAmB,WAC9B,OAAOvxpB,KAAK24pB,cAAgB34pB,KAAKskrB,eAAetkrB,KAAKqjE,QAAS,IAKlEq1P,EAAKt9T,UAAUmprB,wBAA0B,WACrC,OAAOvkrB,KAAKwkrB,+BAAiCxkrB,KAAKykrB,sBAAsBzkrB,KAAKqjE,QAAS,IAE1Fq1P,EAAKt9T,UAAUoprB,6BAA+B,WAG1C,IAAK,IAFDE,EAAuB,EACvBj/mB,EAAMzlE,KAAKqjE,QACNnnE,EAAI,EAAGA,EAAI8D,KAAK24pB,cAAez8pB,IAChCupE,EAAIvpE,GAAGo7B,SACPotpB,IAGR,OAAOA,GAEXhsX,EAAKt9T,UAAUqprB,sBAAwB,SAAUl+B,EAAM52oB,GACnD,IAAK,IAAIzT,EAAI,EAAG2F,EAAM0kpB,EAAK/ppB,OAAQN,EAAI2F,EAAK3F,IACpCqqpB,EAAKrqpB,GAAGmnE,QACR1zD,EAAM3P,KAAKykrB,sBAAsBl+B,EAAKrqpB,GAAGmnE,QAAS1zD,GAG9C42oB,EAAKrqpB,GAAGs1pB,UAAYjL,EAAKrqpB,GAAGo7B,SAC5B3nB,IAIZ,OAAOA,GAEX+oT,EAAKt9T,UAAUkprB,eAAiB,SAAU/9B,EAAM52oB,GAC5C,IAAK,IAAIzT,EAAI,EAAG2F,EAAM0kpB,EAAK/ppB,OAAQN,EAAI2F,EAAK3F,IACpCqqpB,EAAKrqpB,GAAGmnE,QACR1zD,EAAM3P,KAAKskrB,eAAe/9B,EAAKrqpB,GAAGmnE,QAAS1zD,GAGvC42oB,EAAKrqpB,GAAGs1pB,UACR7hpB,IAIZ,OAAOA,GAOX+oT,EAAKt9T,UAAU+9iB,SAAW,SAAUwrI,GAChC3krB,KAAK4krB,YAAYzrI,SAASwrI,IAO9BjsX,EAAKt9T,UAAUyprB,sBAAwB,SAAUlkrB,GAC7CX,KAAK4krB,YAAYC,sBAAsBlkrB,IAS3C+3T,EAAKt9T,UAAU0prB,WAAa,SAAUlhC,EAAYvunB,EAAW0vpB,GACzD/krB,KAAKglrB,WAAWF,WAAWlhC,EAAYvunB,EAAW0vpB,IAMtDrsX,EAAKt9T,UAAU6prB,aAAe,WAC1BjlrB,KAAKglrB,WAAWC,gBAQpBvsX,EAAKt9T,UAAU8prB,iBAAmB,SAAUnjnB,GACxC/hE,KAAKglrB,WAAWE,iBAAiBnjnB,IAgBrC22P,EAAKt9T,UAAU+prB,eAAiB,SAAU34gB,EAAW44gB,EAAgBC,EAAa9inB,EAAWsG,EAAW4jG,EAAc64gB,EAAmBC,GACrIvlrB,KAAKqhrB,aAAa8D,eAAe34gB,EAAW44gB,EAAgBC,EAAa9inB,EAAWsG,EAAW4jG,EAAc64gB,EAAmBC,IAMpI7sX,EAAKt9T,UAAUoqrB,eAAiB,WAC5BxlrB,KAAKqhrB,aAAamE,kBAStB9sX,EAAKt9T,UAAUqqrB,0BAA4B,SAAU1jnB,EAAO2jnB,GACxD1lrB,KAAKqhrB,aAAaoE,0BAA0B1jnB,EAAO2jnB,IAQvDhtX,EAAKt9T,UAAUm+iB,UAAY,SAAUzniB,EAAOizG,GACxC/kH,KAAK00O,gBAAgB6kU,UAAUzniB,EAAOizG,IAO1C2zM,EAAKt9T,UAAUgwqB,WAAa,SAAUE,GAClCtrqB,KAAK00O,gBAAgB02b,WAAWE,IAMpC5yW,EAAKt9T,UAAUyob,eAAiB,WAC5B7jb,KAAK00O,gBAAgBmvM,kBAQzBnrH,EAAKt9T,UAAUu+iB,WAAa,SAAUpmP,EAAWxuM,GAC7C/kH,KAAK00O,gBAAgBilU,WAAWpmP,EAAWxuM,IAS/C2zM,EAAKt9T,UAAUsxK,OAAS,SAAU0mgB,GAC9BpzqB,KAAKgvf,aAAatiV,OAAO0mgB,IAQ7B16W,EAAKt9T,UAAU2F,MAAQ,WACnBf,KAAKy2f,YAAY11f,SAQrB23T,EAAKt9T,UAAUuqrB,aAAe,SAAUC,EAAWrprB,GAC/CyD,KAAK0pqB,WAAWic,aAAaC,EAAWrprB,IAM5Cm8T,EAAKt9T,UAAUw7c,UAAY,WACvB52c,KAAK0pqB,WAAW9yN,aAKpBl+I,EAAKt9T,UAAUqzb,QAAU,WACrBzub,KAAK0pqB,WAAWj7O,WAKpB/1H,EAAKt9T,UAAUyqrB,UAAY,WACvB7lrB,KAAK0pqB,WAAWmc,aAQpBntX,EAAKt9T,UAAU0qrB,UAAY,SAAUvprB,EAAMuV,GACvC9R,KAAK0pqB,WAAWoc,UAAUvprB,EAAMuV,IAMpC4mT,EAAKt9T,UAAU48gB,UAAY,SAAUjlK,GACjC/yW,KAAK0pqB,WAAW1xJ,UAAUjlK,IAM9Br6C,EAAKt9T,UAAUmE,KAAO,SAAUy3qB,GAC5Bh3qB,KAAK+lrB,gBAAgBxmrB,KAAKy3qB,IAK9Bt+W,EAAKt9T,UAAU4qrB,kBAAoB,WAC/B,GAAKhmrB,KAAKi0pB,iBAAiBtxpB,cAAc,kBAGnC3C,KAAKippB,cAAc5llB,QAAQ7mE,QAAWwD,KAAK64qB,cAC7C74qB,KAAKi0pB,iBAAiBtxpB,cAAc,gBAAgBkQ,aAAa,oBAChE7S,KAAKshqB,kBAFV,CAKA,IAAI2kB,EAAcjmrB,KAAKi0pB,iBAAiBtxpB,cAAc,gBAAgB0R,cAAczP,YAChFy8pB,KAAehgqB,MAAMC,KAAKtB,KAAKi0pB,iBAAiBtxpB,cAAc,YAAY2O,YAC1EmwpB,KAAgBpgqB,MAAMC,KAAKtB,KAAKshqB,kBAAkB3+pB,cAAc,YAAY2O,YAC5E40qB,EAAWD,EAAc,GACzB/prB,EAAI,EAOR,IANIgqrB,GAAY,IACZD,EAAe,GAAKC,GAEpBlmrB,KAAKsrpB,6BACL26B,EAAc,IAEX/prB,EAAI8D,KAAKippB,cAAc5llB,QAAQ7mE,QAClC6kqB,EAAUnlqB,GAAGwI,MAAMsR,MAAQiwqB,EAAc,KACzCxkB,EAAWvlqB,GAAGwI,MAAMsR,MAAQiwqB,EAAc,KAC1CjmrB,KAAK+N,OAAOo4qB,IAA6Br0qB,MAAO5V,EAAG8Z,MAAOiwqB,IAC1D/prB,IAEA8D,KAAK64qB,aACLxX,EAAUnlqB,GAAGwI,MAAMsR,MAAQiwqB,EAAc,KACzCxkB,EAAWvlqB,GAAGwI,MAAMsR,MAAQiwqB,EAAc,KAC1CjmrB,KAAK+N,OAAOo4qB,IAA6Br0qB,MAAO5V,EAAG8Z,MAAOiwqB,KAE9DjmrB,KAAKi0pB,iBAAiBtxpB,cAAc,gBAAgBa,aAAa,kBAAmB,UAQxFk1T,EAAKt9T,UAAUgrrB,eAAiB,SAAUC,EAAWC,GACjDtmrB,KAAKumrB,cAAcH,eAAeC,EAAWC,IAyBjD5tX,EAAKt9T,UAAUorrB,eAAiB,SAAU55gB,GACtC5sK,KAAKymrB,aAAaD,eAAe55gB,IAKrC8rJ,EAAKt9T,UAAUsrrB,oBAAsB,SAAU35qB,EAAGC,EAAG7F,GACjDnH,KAAK2mrB,oBAAoBC,oBAAoB75qB,EAAGC,EAAG7F,IAEvDuxT,EAAKt9T,UAAUswc,mBAAqB,WAChC1rc,KAAKomE,eAAeq5W,SAAS,eAAgBz/a,KAAKu2pB,aAAe,IAAIyK,GAAmBhhqB,OACxFA,KAAKomE,eAAeq5W,SAAS,sBAAuB,IAAIkhP,IACxD3gqB,KAAKomE,eAAeq5W,SAAS,kBAAmB,IAAIohP,IACpD7gqB,KAAKomE,eAAeq5W,SAAS,eAAgBz/a,KAAKk/E,UAAY,IAAIk/B,GAAKp+G,KAAK+hC,gBAAiB/hC,KAAK6rc,cAAe7rc,KAAKgO,SACtHhO,KAAKomE,eAAeq5W,SAAS,iBAAkBz/a,KAAK6mrB,sBAAwB,IAAIr5C,GAAextoB,KAAKgO,SACpGhO,KAAKomE,eAAeq5W,SAAS,kBAAmBz/a,KAAKw/qB,UAAY,IAAI/L,GAASzzqB,OAC9EA,KAAKomE,eAAeq5W,SAAS,cAAez/a,KAAKoxpB,YAAc,IAAI0J,IACnE96pB,KAAKomE,eAAeq5W,SAAS,QAASz/a,KAAK8/qB,YAAc,IAAI7d,GAAcjiqB,QAE/E04T,EAAKt9T,UAAU2jrB,aAAe,WAC1B,IAGIjqlB,EACApxE,EAJA3jB,EAAQC,KACR8mrB,EAAQ9mrB,KAAKippB,cAAc5llB,QAC3B0jnB,EAAQ/mrB,KAAKmjpB,aAAa9/kB,QAG9B,GAAIrjE,KAAKw5oB,cA2BL,IAAK,IA1BDv6oB,EAAU,SAAU/C,EAAG2F,GACvB6hB,EAAI,EACJ,IAAK,IAAIsjqB,EAAOD,EAAMvqrB,OAAQknB,EAAIsjqB,EAAMtjqB,IACpC,GAAIqjqB,EAAMrjqB,GAAGq+C,QAAU+knB,EAAM5qrB,GAAI,CAC7B44F,GAAO,EACP,MAcR,GAXKA,EAIG8e,EAAO0liB,aACP1liB,EAAO43D,cAAchnK,KAAKuirB,EAAMrjqB,GAAGq+C,OAGnCglnB,EAAMrjqB,GAAG2R,UAAY,YAPzB0xpB,EAAMvirB,MAAOu9D,MAAO+knB,EAAM5qrB,GAAIm5B,UAAW,eAUxCu+E,EAAOq1iB,cAAcg+B,kBAAmB,EAC5BrzkB,EAAO03iB,2BAChB13iB,EAAOvwC,QAAQn5B,OAAO,SAAUtR,GAAK,OAAOA,EAAEmpC,QAAU+knB,EAAM5qrB,KAAO,GAAK03G,EAAOs1iB,iBAAiB49B,EAAM5qrB,KACrGo7B,SAAU,IAGrBs8E,EAAS5zG,KACJ9D,EAAI,EAAG2F,EAAMilrB,EAAMtqrB,OAAQN,EAAI2F,EAAK3F,IACzC+C,EAAQ/C,GAWhB,GARK4qrB,EAAMtqrB,QACPuqrB,EAAM3nrB,QAAQ,SAAUqmE,GACpB1lE,EAAMyrK,cAAchnK,KAAKihE,EAAI1D,SAGrC/hE,KAAKmgrB,cAAgBv9mB,GAAiB5iE,KAAKqspB,aAC3CrspB,KAAKogrB,iBAAmBx9mB,GAAiB5iE,KAAK2tpB,gBAC9C3tpB,KAAKg6oB,eAAiBp3kB,GAAiB5iE,KAAKimE,aAAah3D,WACpDxR,EAAkBuC,KAAKknrB,eAAgB,CACxC,IAAInqrB,EAAQU,EAAkBuC,KAAKknrB,cAAcC,qBAAuB,YACpEnnrB,KAAKknrB,cAAcC,oBACvBnnrB,KAAK2gE,MAAM+H,MAAM1oE,KAAK6/D,YAAa,QAAS9iE,GAAO,GAEvDiD,KAAKonrB,qBAET1uX,EAAKt9T,UAAUgsrB,kBAAoB,WAC3BpnrB,KAAKq5qB,oBAAoBr5qB,KAAKokpB,eAC9BpkpB,KAAK+N,OAAOs5qB,GAA6BrnrB,KAAK2lpB,yBAGtDjtV,EAAKt9T,UAAU4jrB,WAAa,WACxBh/qB,KAAKsgrB,YACDtgrB,KAAKohrB,aACLphrB,KAAKgB,QAAQ8C,UAAUM,IAAI,eAE3BoH,GAAQqb,UACR7mB,KAAKgB,QAAQ8C,UAAUM,IAAI,YAE3BpE,KAAKmlE,WACLnlE,KAAKgB,QAAQ8C,UAAUM,IAAI,qBAE/BN,EAAU9D,KAAKgB,SAAU,eAAgB,iBACzC,IAAIsmrB,EAAkBtnrB,KAAKomE,eAAeE,WAAW,mBACrDtmE,KAAK20qB,aAAe2S,EAAgBhqB,YAAYjc,GAAWrmR,QAC3Dh7X,KAAKo8E,cAAgBkrmB,EAAgBhqB,YAAYjc,GAAWmc,SAC5Dx9pB,KAAKy2f,YAAc,IAAI1B,GAAM/0f,KAAMA,KAAK2lX,cACxC3lX,KAAK+lrB,gBAAkB,IAAIrP,GAAU12qB,MACrCA,KAAK6+qB,aAAazskB,SAClBpyG,KAAK0/qB,mBACL1/qB,KAAKunrB,yBACLvnrB,KAAKu2pB,aAAa4C,oBAClBn5pB,KAAK6grB,kBACL7grB,KAAK+grB,gBACL/grB,KAAKi1B,iBAETyjS,EAAKt9T,UAAUmipB,UAAY,WACvBv9oB,KAAK2lX,aAAat1O,WAClBrwI,KAAK2lX,aAAaimB,YACE,SAAhB5rY,KAAK+V,QACL/V,KAAK2lX,aAAa0uT,cAG1B37W,EAAKt9T,UAAUklrB,UAAY,WACnBtgrB,KAAKkT,UACLlT,KAAKgB,QAAQ8C,UAAUM,IAAI,SAG3BpE,KAAKgB,QAAQ8C,UAAUS,OAAO,UAGtCm0T,EAAKt9T,UAAUmsrB,uBAAyB,WACpC,IAAItjnB,EAAQjkE,KAAKmB,cAAc,OAASkC,UAAW,cAAeE,OAAQ,kBACtE+4B,EAAUt8B,KAAKmB,cAAc,OAASkC,UAAW,YAAaI,OAASmnH,SAAU,QACrFxlH,GAAQk3B,EAASt8B,KAAKmB,cAAc,OAASkC,UAAW,qBAAuB4gE,GAC/E3nC,EAAQ36B,YAAY3B,KAAKmB,cAAc,SACvCiE,GAAQk3B,EAASt8B,KAAKmB,cAAc,OAASkC,UAAW,uBAAyB4gE,GACjFjkE,KAAKgB,QAAQW,YAAYsiE,IAE7By0P,EAAKt9T,UAAUylrB,gBAAkB,WAE7B,OADA/8qB,EAAU9D,KAAKgB,YAAc,kBAAmB,oBAAqB,cAAe,gBAC5EhB,KAAKq6W,WACT,IAAK,aACDr6W,KAAKgB,QAAQ8C,UAAUM,IAAI,qBAC3B,MACJ,IAAK,WACDpE,KAAKgB,QAAQ8C,UAAUM,IAAI,mBAC3B,MACJ,IAAK,OACDpE,KAAKgB,QAAQ8C,UAAUM,IAAI,eAC3B,MACJ,IAAK,OACDpE,KAAKgB,QAAQ8C,UAAUM,IAAI,eAGnCpE,KAAK4grB,qBAETloX,EAAKt9T,UAAUwlrB,kBAAoB,WAC3B5grB,KAAKu5oB,eACgB,aAAnBv5oB,KAAKq6W,WAA+C,SAAnBr6W,KAAKq6W,UACxCr6W,KAAKgB,QAAQ8C,UAAUM,IAAI,kBAG3BpE,KAAKgB,QAAQ8C,UAAUS,OAAO,mBAQtCm0T,EAAKt9T,UAAU2lrB,cAAgB,WAC3B,GAAI/grB,KAAK2xpB,cAAe,CACpB,IAAI+H,KAAgBr4pB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,oBAC7D,OAAQxB,KAAKs5pB,iBAAiBC,UAC1B,IAAK,SACDr+oB,GAAKlb,KAAKgB,SAAS,GACnBka,GAAKlb,KAAKwxD,cAAc,GACxBt2C,GAAKw+oB,GAAY,GACjB,MACJ,IAAK,UACDx+oB,GAAKlb,KAAKwxD,cAAc,GACxBt2C,GAAKlb,KAAKgB,SAAS,GACnBka,GAAKw+oB,GAAY,GACjB,MACJ,QACIx+oB,GAAKlb,KAAKgB,SAAS,GACnBka,GAAKlb,KAAKwxD,cAAc,GACxBt2C,GAAKw+oB,GAAY,MASjChhW,EAAKt9T,UAAU4lrB,eAAiB,WAC5B9lqB,GAAKlb,KAAKgB,SAAS,GAEnBka,MADoB7Z,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,qBAC5C,GACjB0Z,GAAKlb,KAAKwxD,cAAc,IAO5BknQ,EAAKt9T,UAAU65B,cAAgB,WAC3Bj1B,KAAK6/qB,WAAa,IAAIrvoB,IAAUI,QAAS,SAAUtU,QAAS,IAAMt8B,KAAKgB,UAE3E03T,EAAKt9T,UAAUosrB,iBAAmB,SAAUxmrB,GACxC,IAAIgV,EACAghpB,EAAch3pB,KAAKi0pB,iBAInBwzB,GAHeznrB,KAAKshqB,kBAGXthqB,KAAKgnkB,YAAYgwF,EAFX,eAEsC,WACrD0wB,EAAS1nrB,KAAKgnkB,YAAYgwF,EAHX,eAGsC,WAErD5xlB,EAAQ4xlB,EAAY7ypB,SAASnD,GAAWymrB,EAASC,EACjD1jrB,EAAMgzpB,EAAY7ypB,SAASnD,GAAW,KAAO,KAMjD,OALAokE,EAAMziE,cAAcqB,GAAKX,UAAYrC,EAAQqC,UAC7C+hE,EAAMziE,cAAcqB,GAAKhC,UAAYhB,EAAQgB,UAC7CgU,EAAQovD,EAAMziE,cAAcqB,GAAK4H,wBAAwBoK,MACzDxV,SAASuL,KAAKzG,YAAYmirB,GAC1BjnrB,SAASuL,KAAKzG,YAAYoirB,GACtB1xqB,EAAQhV,EAAQ4K,wBAAwBoK,OAKhD0iT,EAAKt9T,UAAUmhP,iBAAmB,SAAU17O,GACxC,GAAIb,KAAK2nrB,oBAAqB,CAC1B,IAAI3mrB,EAAUu4D,GAAa14D,EAAEsG,OAAQ,qBACrC,GAAInG,EAAS,CACT,GAAIA,EAAQ6R,aAAa,oBACrB,OAEA7S,KAAKwnrB,iBAAiBxmrB,IAClBA,EAAQ0M,uBAAuB,gBAAgBlR,OAC/CwD,KAAK6/qB,WAAWvjpB,QAAUt7B,EAAQ0M,uBAAuB,gBAAgB,GAAGwyD,UAG5ElgE,KAAK6/qB,WAAWvjpB,QAAUt7B,EAAQk/D,UAEtClgE,KAAK6/qB,WAAWn+qB,KAAKV,IAGrBhB,KAAK6/qB,WAAW59qB,aAIpBjC,KAAK6/qB,WAAW59qB,UAI5By2T,EAAKt9T,UAAUusrB,kBAAoB,WAE/B,IAAK,IADDphC,EAAOvmpB,KAAKokpB,aACPlopB,EAAI,EAAGA,EAAIqqpB,EAAK/ppB,OAAQN,IAC7B,GAAyB,wBAArBqqpB,EAAKrqpB,GAAG0+pB,SACR,OAAO,EAGf,OAAO,GAEXliW,EAAKt9T,UAAUwpI,cAAgB,WACvB5kI,KAAK2nrB,qBACL3nrB,KAAK6/qB,WAAW59qB,SAOxBy2T,EAAKt9T,UAAU4rkB,YAAc,SAAU5hgB,EAAO3zD,EAAK/K,GAC/C,IAAIkhrB,EAAa5nrB,KAAKmB,cAAc,OACpCymrB,EAAWvkrB,UAAYrD,KAAKgB,QAAQqC,UACpCukrB,EAAWljrB,MAAMugE,QAAU,4DAC3B,IAAI4inB,EAAW7nrB,KAAKmB,cAAc,OAClC0mrB,EAASxkrB,UAAYoO,EACrB,IAAIq2qB,EAAU9nrB,KAAKmB,cAAc,SACjC2mrB,EAAQzkrB,UAAY+hE,EAAM/hE,UAC1BykrB,EAAQpjrB,MAAMugE,QAAU,iCACxB,IAAIjhE,EAAgB,WAAT0C,EAAqB,KAAO,KACnCqhrB,EAAO/nrB,KAAKmB,cAAc,MAC1B6mrB,EAAOhorB,KAAKmB,cAAc6C,GAM9B,OALA+jrB,EAAKpmrB,YAAYqmrB,GACjBF,EAAQnmrB,YAAYomrB,GACpBF,EAASlmrB,YAAYmmrB,GACrBF,EAAWjmrB,YAAYkmrB,GACvBrnrB,SAASuL,KAAKpK,YAAYimrB,GACnBA,GAEXlvX,EAAKt9T,UAAU6jY,WAAa,SAAUp+X,GACjB,QAAbA,EAAEmyD,QAAiC,aAAbnyD,EAAEmyD,QACxBhzD,KAAK6/qB,WAAW59qB,SAOxBy2T,EAAKt9T,UAAUspB,WAAa,WACxBnf,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAKiorB,kBAAmBjorB,MAChEuF,GAAanB,IAAIpE,KAAKgB,QAAS,WAAYhB,KAAKiorB,kBAAmBjorB,MACnEuF,GAAanB,IAAIpE,KAAKgB,QAAS,WAAYhB,KAAK6lH,gBAAiB7lH,MACjEuF,GAAanB,IAAIpE,KAAKwxD,aAAc,WAAYxxD,KAAKkorB,gBAAiBlorB,MAClEA,KAAKmorB,gBACLnorB,KAAKgB,QAAQ4pH,UAAsC,IAA3B5qH,KAAKgB,QAAQ4pH,SAAkB,EAAI5qH,KAAKgB,QAAQ4pH,UAE5E5qH,KAAKosH,eAAiB,IAAIpP,GAAeh9G,KAAKgB,SAC1C88G,UAAW99G,KAAK0rJ,iBAAiBrwJ,KAAK2E,MACtCw9G,WAAYx9G,KAAKw9G,WACjBtnC,UAAW,YAEf3wE,GAAanB,IAAIpE,KAAKwxD,aAAarsD,kBAAmB,SAAUnF,KAAK4kI,cAAe5kI,MACpFuF,GAAanB,IAAIpE,KAAKgB,QAAS,YAAahB,KAAKu8O,iBAAkBv8O,OAMvE04T,EAAKt9T,UAAUkqB,aAAe,WAC1B/f,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAKiorB,mBAChD1irB,GAAahB,OAAOvE,KAAKgB,QAAS,WAAYhB,KAAKiorB,mBACnD1irB,GAAahB,OAAOvE,KAAKgB,QAAS,WAAYhB,KAAK6lH,iBACnDtgH,GAAahB,OAAOvE,KAAKwxD,aAAarsD,kBAAmB,SAAUnF,KAAK4kI,eACxEr/H,GAAahB,OAAOvE,KAAKgB,QAAS,YAAahB,KAAKu8O,mBAKxDm8E,EAAKt9T,UAAU6jrB,YAAc,WACrBj/qB,KAAKmtF,cAGTntF,KAAK8rF,GAAGwzkB,GAAkBt/pB,KAAKu9oB,UAAWv9oB,MAC1CA,KAAK8rF,GAAG2lkB,GAAqBzxpB,KAAKgmrB,kBAAmBhmrB,MACrDA,KAAK8rF,GAAGgrkB,GAAwB92pB,KAAKgmrB,kBAAmBhmrB,MACxDA,KAAKoorB,kBAAoBporB,KAAKy/qB,gBAAgBpkrB,KAAK2E,MACnDA,KAAKvD,iBAAiBi1pB,GAAkB1xpB,KAAKoorB,mBAC7CporB,KAAK8rF,GAAG+qlB,GAAmB72qB,KAAKi/X,WAAYj/X,QAKhD04T,EAAKt9T,UAAUwkrB,eAAiB,WACxB5/qB,KAAKmtF,cAGTntF,KAAKksF,IAAIozkB,GAAkBt/pB,KAAKu9oB,WAChCv9oB,KAAKksF,IAAIulkB,GAAqBzxpB,KAAKgmrB,mBACnChmrB,KAAKksF,IAAI4qkB,GAAwB92pB,KAAKgmrB,mBACtChmrB,KAAKrD,oBAAoB+0pB,GAAkB1xpB,KAAKoorB,mBAChDporB,KAAKksF,IAAI2qlB,GAAmB72qB,KAAKi/X,cAOrCvmE,EAAKt9T,UAAU0jqB,sBAAwB,WACnC,OAAQ9+pB,KAAKw5oB,eAAiBx5oB,KAAKippB,cAAc5llB,QAAQ7mE,QAAUwD,KAAKw2O,gBAAgBh6O,OACpFwD,KAAKw2O,gBAAgBxmE,QAAUhwK,KAAKw2O,iBAE5CkiF,EAAKt9T,UAAU6srB,kBAAoB,SAAUpnrB,GACrCb,KAAKuvT,YAAY1uT,IAAO04D,GAAa14D,EAAEsG,OAAQ,gBAAkBtG,EAAE+4D,SACnE55D,KAAKgB,QAAQQ,iBAAiB,sBAAsBhF,QAAUwD,KAAKqorB,UAAUxnrB,MAG1Eb,KAAKyvqB,sBAAwBl2mB,GAAa14D,EAAEsG,OAAQ,kBAClC,OAArBtG,EAAEsG,OAAOnE,WAAyBhD,KAAKw5oB,gBAAiBx5oB,KAAKy5oB,iBAC7DlglB,GAAa14D,EAAEsG,OAAQ,kBAAqBtG,EAAE+4D,UAG9CL,GAAa14D,EAAEsG,OAAQ,iBAAmBnH,KAAKyvqB,qBAC/C5uqB,EAAE8kB,iBAEN3lB,KAAK+N,OAAOolqB,GAActyqB,KAE9B63T,EAAKt9T,UAAUitrB,UAAY,SAAUxnrB,GACjC,IAAIkyW,EAAKx5S,GAAa14D,EAAEsG,OAAQ,SAC5BwqnB,EAAoC,UAA3B3xnB,KAAKimE,aAAa5lC,MAC3BrgC,KAAK2xnB,QAAU5+Q,IAAOA,EAAGjvW,UAAUK,SAAS,gBAAkB4uW,EAAGjvW,UAAUK,SAAS,eACxF,OAAQo1D,GAAa14D,EAAEsG,OAAQ,sBAAwBwqnB,GAAWp4jB,GAAa14D,EAAEsG,OAAQ,cACrFoyD,GAAa14D,EAAEsG,OAAQ,aAAarD,UAAUK,SAAS,uBAE/Du0T,EAAKt9T,UAAU8srB,gBAAkB,SAAUrnrB,GACvC,IAAIomE,EAAO1N,GAAa14D,EAAEsG,OAAQ,UAClC,IAAI1J,EAAkBwpE,IAASA,EAAK3jE,KAAOtD,KAAKgB,QAAQsC,KAAMuC,EAAQhF,EAAEsG,OAAQ,qBAAhF,CAGA,IAAIlH,EAAOD,KAAK4irB,WAAW/hrB,EAAEsG,QAC7BlH,EAAKkH,OAAStG,EAAEsG,OAChBnH,KAAK2mB,QnCxyEkB,oBmCwyEgB1mB,GACvCD,KAAK+N,OAAOu6qB,GAAiBznrB,KAEjC63T,EAAKt9T,UAAUyqH,gBAAkB,SAAUhlH,GACvC,IAAIb,KAAKuvT,YAAY1uT,GAArB,CAGK04D,GAAa14D,EAAEsG,OAAQ,YACxBnH,KAAKgB,QAAQ2B,cAAc,gBAAgB+B,MAAMosC,QAAU,QAE/D,IAAIy3oB,EAAcvorB,KAAKgB,QAAQ2B,cAAc,0BACzC4lrB,GACAA,EAAYzkrB,UAAUM,IAAI,UAExBvD,EAAE29I,eAAkBjlF,GAAa14D,EAAE29I,cAAe,WAChDx+I,KAAKworB,UAAuC,UAA3BxorB,KAAKimE,aAAa5lC,OAAoBrgC,KAAK2xnB,QAAWnmnB,GAAQqb,WACnF7mB,KAAK0pqB,WAAW+e,WAChBzorB,KAAK+N,OAAO26qB,QAEhB1orB,KAAKworB,UAAW,IAEpB9vX,EAAKt9T,UAAUm0T,YAAc,SAAU1uT,GACnC,IAAI0oqB,EAAchwmB,GAAa14D,EAAEsG,OAAQ,UACzC,SAAIoiqB,GAAeA,EAAYjmqB,KAAOtD,KAAKgB,QAAQsC,KAKvDo1T,EAAKt9T,UAAUk9qB,qBAAuB,WAClC,IAAI/7qB,EAAOX,OAAO82G,aAAaC,QAAQ3yG,KAAK+hC,gBAAkB/hC,KAAKgB,QAAQsC,IAC3E,IAAM7F,EAAkBlB,IAAmB,KAATA,EAAe,CAC7C,IAAIqxD,EAAUtB,KAAKuB,MAAMtxD,GACrBe,EAAOgB,OAAOhB,KAAKswD,GACvB5tD,KAAK2sF,qBAAsB,EAC3B,IAAK,IAAIvuF,EAAK,EAAGC,EAASf,EAAMc,EAAKC,EAAO7B,OAAQ4B,IAAM,CACtD,IAAIf,EAAMgB,EAAOD,GACS,iBAAd4B,KAAK3C,IAAuBI,EAAkBuC,KAAK3C,IAU3D2C,KAAK3C,GAAOuwD,EAAQvwD,GAThBmB,MAAMC,QAAQuB,KAAK3C,KAAiB,YAARA,GAC5B2C,KAAK2orB,aAAa/6nB,EAAQvwD,GAAM2C,KAAK3C,IACrC2C,KAAK3C,GAAOuwD,EAAQvwD,IAGpBqB,EAAOsB,KAAK3C,GAAMuwD,EAAQvwD,IAOtC2C,KAAK2sF,qBAAsB,IAGnC+rO,EAAKt9T,UAAUutrB,aAAe,SAAUC,EAAcvlnB,GAClD,IAAItjE,EAAQC,KACZ4orB,EAAaxprB,QAAQ,SAAUqmE,EAAK3zD,EAAOo6B,GACvC,IAAI28oB,EACAC,EAAW/orB,EAAMmppB,iBAAiBzjlB,EAAI1D,QACtCsB,EAAQ1kC,KAAK,SAAU39B,EAAS9E,GAE5B,OADA2srB,EAAM3srB,EACC8E,EAAQwiE,aAAeiC,EAAIjC,cAChCH,EAAQwlnB,GACbprrB,EAAkBqrrB,KACfA,EAASzlnB,SAAWylnB,EAASzlnB,QAAQ7mE,OACrCuD,EAAM4orB,aAAaljnB,EAAIpC,QAASylnB,EAASzlnB,SAGzCn3B,EAAIp6B,GAASpT,KAAWoqrB,EAAUrjnB,GAAK,OAKvDizP,EAAKt9T,UAAUy9qB,SAAW,WACtB,OAAQp7qB,EAAkBuC,KAAK2tpB,kBAAoBlwpB,EAAkBuC,KAAK0xT,YAE9EgH,EAAKt9T,UAAU29qB,gBAAkB,SAAU11mB,GACvC,IAAItjE,EAAQC,KACZ,OAAOqjE,EAAQ1kC,KAAK,SAAU8mC,GAC1B,OAAIA,EAAIpC,QACGtjE,EAAMg5qB,gBAAgBtzmB,EAAIpC,YAE3BoC,EAAIz6B,WAAYy6B,EAAI20kB,qBAGtC1hV,EAAKt9T,UAAUi+qB,oBAAsB,SAAUh2mB,GAC3C,IAAItjE,EAAQC,KACZ,OAAOqjE,EAAQ1kC,KAAK,SAAU8mC,GAC1B,OAAIA,EAAIpC,QACGtjE,EAAMs5qB,oBAAoB5zmB,EAAIpC,YAE/BoC,EAAI4C,aAAc5C,EAAIhC,oBAGxCi1P,EAAKt9T,UAAUswJ,iBAAmB,SAAU7qJ,GACxCb,KAAKworB,SAAwB,UAAb3nrB,EAAEmyD,OACdhzD,KAAKuvT,YAAY1uT,IAChBb,KAAK2xnB,QAAuB,WAAb9wnB,EAAEmyD,QAAoC,UAAbnyD,EAAEmyD,QAAmC,eAAbnyD,EAAEmyD,QAC/C,QAAbnyD,EAAEmyD,QAAiC,aAAbnyD,EAAEmyD,QAG/BhzD,KAAKmorB,gBACY,cAAbtnrB,EAAEmyD,SACFnyD,EAAE8kB,iBACF3lB,KAAKe,SAETf,KAAK+N,OAAO8oqB,GAAmBh2qB,KAMvC63T,EAAKt9T,UAAU2trB,mBAAqB,SAAU/wlB,GAC1Ch4F,KAAKwyG,gBAAkBxa,GAE3B0gO,EAAKt9T,UAAU8krB,mBAAqB,WAChC98mB,GAAepjE,KAAKqjE,QAASrjE,KAAKsrpB,4BAClCtrpB,KAAKonrB,oBACLpnrB,KAAK+N,OAAO2xpB,QAMhBhnW,EAAKt9T,UAAUuqpB,qBAAuB,WAClC,OAAO3lpB,KAAKokpB,aAAal6mB,OAAO,SAAUu7B,GACtC,OAAOA,EAAIg1kB,qBAMnB/hV,EAAKt9T,UAAU8pE,aAAe,WAC1B,OAAOllE,KAAKmlE,UAAYnlE,KAAKmlE,UAAYD,GAAallE,KAAKgB,UAK/D03T,EAAKt9T,UAAU4trB,eAAiB,WAC5BhprB,KAAK+0qB,sBAAuB,EAC5B/0qB,KAAKkgrB,qBACLlgrB,KAAKyuD,WAUTiqQ,EAAKt9T,UAAU6trB,YAAc,SAAUC,EAAuBC,EAE9DC,EAAUC,GACN,OAAOrprB,KAAKsprB,kBAAkB17C,IAAI5toB,KAAMkprB,EAAuBC,EAAkBC,GAAU,EAAOC,IAWtG3wX,EAAKt9T,UAAUmurB,UAAY,SAAUL,EAErCC,EAAkBC,EAAUC,GACxB,OAAOrprB,KAAKsprB,kBAAkB17C,IAAI5toB,KAAMkprB,EAAuBC,EAAkBC,GAAU,EAAMC,IAWrG3wX,EAAKt9T,UAAUourB,UAAY,SAAUC,EAErCN,EAAkBO,EAAQL,GACtB,OAAOrprB,KAAK2prB,gBAAgB/7C,IAAI5toB,KAAMyprB,EAAqBN,EAAkBO,EAAQL,IAOzF3wX,EAAKt9T,UAAUwurB,YAAc,SAAUhmC,GACnC5jpB,KAAK6prB,YAAYD,YAAYhmC,IAOjClrV,EAAKt9T,UAAU0urB,cAAgB,SAAUlmC,GACrC5jpB,KAAK6prB,YAAYC,cAAclmC,IAKnClrV,EAAKt9T,UAAU2urB,kBAAoB,WAC/B,OAAO/prB,KAAKivf,mBAAqBjvf,KAAKivf,kBAAkBnkI,QAK5DpyD,EAAKt9T,UAAU4urB,qBAAuB,SAAU1ylB,GAC5C,OAAOt3F,KAAKuyG,qBAAqBh0G,QAAQ+4F,IAAW,GAMxDohO,EAAKt9T,UAAUippB,gBAAkB,SAAU4lC,GACvCjqrB,KAAK8yG,cAAcm3kB,IAEvBj5lB,IACI9pF,OACDwxT,EAAKt9T,UAAW,eAAW,GAC9B41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,mBAAe,GAClC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACIjpF,KAAYkwqB,KACbv/W,EAAKt9T,UAAW,wBAAoB,GACvC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,mBAAe,GAClC41F,IACIjpF,KAAYs3a,KACb3mH,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,4BAAwB,GAC3C41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,kCAA8B,GACjD41F,IACIjpF,KAAYgwqB,KACbr/W,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,yBAAqB,GACxC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,wBAAoB,GACvC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACIjpF,KAAY6vqB,KACbl/W,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACI9pF,GAAU,IACXwxT,EAAKt9T,UAAW,wBAAoB,GACvC41F,IACIjpF,KAAY+vqB,KACbp/W,EAAKt9T,UAAW,yBAAqB,GACxC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,2BAAuB,GAC1C41F,IACIjpF,KAAYiwqB,KACbt/W,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACIjpF,KAAY8vqB,KACbn/W,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACIjpF,KAAYmwqB,KACbx/W,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACIjpF,KAAYowqB,KACbz/W,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACI3oF,KAAeouqB,KAChB/9W,EAAKt9T,UAAW,kBAAc,GACjC41F,IACI9pF,GAAS,IACVwxT,EAAKt9T,UAAW,yBAAqB,GACxC41F,IACI9pF,EAAS,SACVwxT,EAAKt9T,UAAW,cAAU,GAC7B41F,IACI9pF,EAAS,SACVwxT,EAAKt9T,UAAW,aAAS,GAC5B41F,IACI9pF,EAAS,YACVwxT,EAAKt9T,UAAW,iBAAa,GAChC41F,IACI9pF,KACDwxT,EAAKt9T,UAAW,mBAAe,GAClC41F,IACI9pF,KACDwxT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACI9pF,KACDwxT,EAAKt9T,UAAW,iBAAa,GAChC41F,IACI9pF,KACDwxT,EAAKt9T,UAAW,mBAAe,GAClC41F,IACI9pF,EAAS,aACVwxT,EAAKt9T,UAAW,iBAAa,GAChC41F,IACI9pF,OACDwxT,EAAKt9T,UAAW,kBAAc,GACjC41F,IACI9pF,EAAS,OACVwxT,EAAKt9T,UAAW,iBAAa,GAChC41F,IACI9pF,KACDwxT,EAAKt9T,UAAW,aAAS,GAC5B41F,IACI9pF,EAAS,QACVwxT,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACI9pF,KACDwxT,EAAKt9T,UAAW,eAAW,GAC9B41F,IACI9pF,KACDwxT,EAAKt9T,UAAW,wBAAoB,GACvC41F,IACI9pF,KACDwxT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACI9pF,KACDwxT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACI9pF,KACDwxT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACI9pF,EAAS,IACVwxT,EAAKt9T,UAAW,kBAAc,GACjC41F,IACI9pF,EAAS,IACVwxT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACI9pF,EAAS,QACVwxT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,eAAW,GAC9B41F,IACIloF,KACD4vT,EAAKt9T,UAAW,iBAAa,GAChC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,YAAQ,GAC3B41F,IACIloF,KACD4vT,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,mBAAe,GAClC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,iBAAa,GAChC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,yBAAqB,GACxC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,mBAAe,GAClC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,kBAAc,GACjC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,kBAAc,GACjC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,qBAAiB,GACpC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,mBAAe,GAClC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,wBAAoB,GACvC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,8BAA0B,GAC7C41F,IACIloF,KACD4vT,EAAKt9T,UAAW,0BAAsB,GACzC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,gCAA4B,GAC/C41F,IACIloF,KACD4vT,EAAKt9T,UAAW,yBAAqB,GACxC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,2BAAuB,GAC1C41F,IACIloF,KACD4vT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,yBAAqB,GACxC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,eAAW,GAC9B41F,IACIloF,KACD4vT,EAAKt9T,UAAW,eAAW,GAC9B41F,IACIloF,KACD4vT,EAAKt9T,UAAW,oBAAgB,GACnC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,+BAA2B,GAC9C41F,IACIloF,KACD4vT,EAAKt9T,UAAW,gBAAY,GAC/B41F,IACIloF,KACD4vT,EAAKt9T,UAAW,mBAAe,GAClC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,mBAAe,GAClC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,yBAAqB,GACxC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,iBAAa,GAChC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,gBAAY,GAC/B41F,IACIloF,KACD4vT,EAAKt9T,UAAW,gBAAY,GAC/B41F,IACIloF,KACD4vT,EAAKt9T,UAAW,iBAAa,GAChC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,mBAAe,GAClC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,gBAAY,GAC/B41F,IACIloF,KACD4vT,EAAKt9T,UAAW,kBAAc,GACjC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,uBAAmB,GACtC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,wBAAoB,GACvC41F,IACIloF,KACD4vT,EAAKt9T,UAAW,sBAAkB,GACrC41F,IACIloF,KACD4vT,EA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zC4vgB,EAAKn4uB,UAAW,cAAU,GAC7B41F,IACI9pF,EAAS,aACVqsuB,EAAKn4uB,UAAW,aAAS,GAC5B41F,IACI9pF,EAAS,aACVqsuB,EAAKn4uB,UAAW,sBAAkB,GACrC41F,IACI9pF,EAAS,IACVqsuB,EAAKn4uB,UAAW,sBAAkB,GACrC41F,IACI9pF,EAAS,OACVqsuB,EAAKn4uB,UAAW,mBAAe,GAClC41F,IACI9pF,EAAS,IACVqsuB,EAAKn4uB,UAAW,gBAAY,GAC/B41F,IACI9pF,GAAWgpE,SAAU,KAAMC,UAAW,QACvCojqB,EAAKn4uB,UAAW,sBAAkB,GACrC41F,IACIjpF,KAAYqluB,KACbmG,EAAKn4uB,UAAW,gBAAY,GAC/B41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,YAAQ,GAC3B41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,mBAAe,GAClC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,cAAU,GAC7B41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,aAAS,GAC5B41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,mBAAe,GAClC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,kBAAc,GACjC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,cAAU,GAC7B41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,qBAAiB,GACpC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,qBAAiB,GACpC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,qBAAiB,GACpC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,qBAAiB,GACpC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,sBAAkB,GACrC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,sBAAkB,GACrC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,sBAAkB,GACrC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,uBAAmB,GACtC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,mBAAe,GAClC41F,IACIloF,KACDyquB,EAAKn4uB,UAAW,uBAAmB,GACtC4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1F,IACI9pF,GAAS,IACVs+vB,EAAUpqwB,UAAW,wBAAoB,GAC5C41F,IACI9pF,GAAS,IACVs+vB,EAAUpqwB,UAAW,4BAAwB,GAChD41F,IACI9pF,GAAS,IACVs+vB,EAAUpqwB,UAAW,sBAAkB,GAC1C41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,qBAAiB,GACzC41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,sBAAkB,GAC1C41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,gBAAY,GACpC41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,kBAAc,GACtC41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,8BAA0B,GAClD41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,wBAAoB,GAC5C41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,gCAA4B,GACpD41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,0BAAsB,GAC9C41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,uBAAmB,GAC3C41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,kBAAc,GACtC41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,kBAAc,GACtC41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,YAAQ,GAChC41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,wBAAoB,GAC5C41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,uBAAmB,GAC3C41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,sBAAkB,GAC1C41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,iBAAa,GACrC41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,eAAW,GACnC41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,iBAAa,GACrC41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,oBAAgB,GACxC41F,IACIloF,KACD08vB,EAAUpqwB,UAAW,iBAAa,GACrCoqwB,EAAYC,EAAcz0qB,IACtB5nF,GACDo8vB,IAEL5zpB,IC//BEg6pB,GAA2C,WAI3C,SAASA,EAA0BtrwB,GAC/BN,KAAKw9G,YACDqupB,OAAQ,U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F,IACI9pF,GAAS,IACV4uzB,EAAe16zB,UAAW,qBAAiB,GAC9C41F,IACI9pF,GAAS,IACV4uzB,EAAe16zB,UAAW,oBAAgB,GAC7C41F,IACI9pF,GAAU,IACX4uzB,EAAe16zB,UAAW,iBAAa,GAC1C41F,IACIjpF,KAAYkmf,KACb6nU,EAAe16zB,UAAW,cAAU,GACvC41F,IACIjpF,KAAYotzB,KACbW,EAAe16zB,UAAW,kBAAc,GAC3C41F,IACIjpF,KAAYqtzB,KACbU,EAAe16zB,UAAW,gBAAY,GACzC41F,IACIjpF,KAAYstzB,KACbS,EAAe16zB,UAAW,iBAAa,GAC1C41F,IACIjpF,KAAYutzB,KACbQ,EAAe16zB,UAAW,uBAAmB,GAChD41F,IACI9pF,EAAS,OACV4uzB,EAAe16zB,UAAW,qBAAiB,GAC9C41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,mBAAe,GAC5C41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,sBAAkB,GAC/C41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,eAAW,GACxC41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,iBAAa,GAC1C41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,YAAQ,GACrC41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,oBAAgB,GAC7C41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,aAAS,GACtC41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,cAAU,GACvC41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,gBAAY,GACzC41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,mBAAe,GAC5C41F,IACIloF,KACDgtzB,EAAe16zB,UAAW,kBAAc,GAC3C41F,IACI9pF,EAAS,OACV4uzB,EAAe16zB,UAAW,iBAAa,GAC1C06zB,EAAiB9kuB,IACb5nF,GACD0szB,IAELlktB,ICpvCFmntB,GAAqBtmtB,OAAQy+mB,GAAc8nG,GAAWC,GAAYC,GAAYC,GAAmBC,GAAiBC,GAAqBC,Q9rBykBnI/4uB,GAEAJ,GACAF,+csnB5kBiB,mBAEE,eAEL,gQAiCC,2BAIE,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ACI9pF,GAAS,IACVm11B,EAASjh2B,UAAW,yBAAqB,GAC5C41F,IACI9pF,EAAS,SACVm11B,EAASjh2B,UAAW,mBAAe,GACtC41F,IACI9pF,GAAU,MAAO,OAAQ,WAAY,QAAS,YAC/Cm11B,EAASjh2B,UAAW,aAAS,GAChC41F,IACI9pF,EAAS,IAAImZ,OACdg80B,EAASjh2B,UAAW,oBAAgB,GACvC41F,IACI9pF,KACDm11B,EAASjh2B,UAAW,kBAAc,GACrC41F,IACI9pF,GAAS,IACVm11B,EAASjh2B,UAAW,mBAAe,GACtC41F,IACI9pF,EAAS,IACVm11B,EAASjh2B,UAAW,sBAAkB,GACzC41F,IACI9pF,GAAU,EAAG,EAAG,EAAG,EAAG,KACvBm11B,EAASjh2B,UAAW,gBAAY,GACnC41F,IACI9pF,EAAS,UACVm11B,EAASjh2B,UAAW,iBAAa,GACpC41F,IACI9pF,EAAS,UACVm11B,EAASjh2B,UAAW,eAAW,GAClC41F,IACI9pF,GAAS,IACVm11B,EAASjh2B,UAAW,qBAAiB,GACxC41F,IACIjpF,KAAYwr1B,KACb8I,EAASjh2B,UAAW,iBAAa,GACpC41F,IACIjpF,KAAYyr1B,KACb6I,EAASjh2B,UAAW,iBAAa,GACpC41F,IACI9pF,GAAS,IACVm11B,EAASjh2B,UAAW,gCAA4B,GACnD41F,IACI9pF,GAAS,IACVm11B,EAASjh2B,UAAW,wBAAoB,GAC3C41F,IACI9pF,KACDm11B,EAASjh2B,UAAW,0BAAsB,GAC7C41F,IACI9pF,KACDm11B,EAASjh2B,UAAW,oBAAgB,GACvC41F,IACI9pF,GAAS,IACVm11B,EAASjh2B,UAAW,gBAAY,GACnC41F,IACI9pF,GAAS,IACVm11B,EAASjh2B,UAAW,qBAAiB,GACxC41F,IACI9pF,GAAS,IACVm11B,EAASjh2B,UAAW,sBAAkB,GACzC41F,IACI9pF,KACDm11B,EAASjh2B,UAAW,sBAAkB,GACzC41F,IACIjpF,KAAY0r1B,KACb4I,EAASjh2B,UAAW,0BAAsB,GAC7C41F,IACI9pF,EAAS,IACVm11B,EAASjh2B,UAAW,uBAAmB,GAC1C41F,IACI9pF,GAAS,IACVm11B,EAASjh2B,UAAW,2BAAuB,GAC9C41F,IACI9pF,KACDm11B,EAASjh2B,UAAW,gBAAY,GACnC41F,IACIjpF,KAAY6r1B,KACbyI,EAASjh2B,UAAW,qBAAiB,GACxC41F,IACI9pF,KACDm11B,EAASjh2B,UAAW,8BAA0B,GACjD41F,IACIjpF,KAAYuvb,KACb+ka,EAASjh2B,UAAW,aAAS,GAChC41F,IACI3oF,KAAektzB,KAChB8mC,EAASjh2B,UAAW,iBAAa,GACpC41F,IACI3oF,KAAeqr1B,KAChB2I,EAASjh2B,UAAW,kBAAc,GACrC41F,IACI9pF,KACDm11B,EAASjh2B,UAAW,gBAAY,GACnC41F,IACI9pF,GAAS,IACVm11B,EAASjh2B,UAAW,iBAAa,GACpC41F,IACI9pF,KACDm11B,EAASjh2B,UAAW,qBAAiB,GACxC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,eAAW,GAClC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,iBAAa,GACpC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,iBAAa,GACpC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,uBAAmB,GAC1C41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,mBAAe,GACtC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,sBAAkB,GACzC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,qBAAiB,GACxC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,kBAAc,GACrC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,kBAAc,GACrC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,kBAAc,GACrC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,qBAAiB,GACxC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,mBAAe,GACtC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,iBAAa,GACpC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,iBAAa,GACpC41F,IACIloF,KACDuz1B,EAASjh2B,UAAW,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"}